{"_id":"react-form","_rev":"140-efdcb5bda925140c5540cb56da551bc0","name":"react-form","description":"⚛️ 💼 React hooks for managing form state and lifecycle","dist-tags":{"latest":"4.0.1","next":"4.0.0-alpha.8","beta":"3.0.0-beta.5"},"versions":{"0.0.1":{"name":"react-form","version":"0.0.1","description":"A modular React form system.","main":"index.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git://github.com/korbin/react-form"},"keywords":["react","form","builder","rails","formtastic"],"author":{"name":"korbin","email":"k1@k1.io"},"license":"MIT","bugs":{"url":"https://github.com/korbin/react-form/issues"},"homepage":"https://github.com/korbin/react-form","dependencies":{"immutable":"^3.3.0","lodash.compose":"^2.4.1","object-path":"^0.8.1","react":"^0.12.1","type-detect":"^0.1.2"},"devDependencies":{"jest-cli":"^0.2.1"},"jest":{"unmockedModulePathPatterns":["./node_modules/react"]},"gitHead":"c55d3b0181772e8408219c77b058bcd5a9759212","_id":"react-form@0.0.1","_shasum":"df9b36e6a34b3151e1f402c90d9d3e08fa039afe","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"korbin","email":"k1@k1.io"},"maintainers":[{"name":"korbin","email":"k1@k1.io"}],"dist":{"shasum":"df9b36e6a34b3151e1f402c90d9d3e08fa039afe","tarball":"https://registry.npmjs.org/react-form/-/react-form-0.0.1.tgz","integrity":"sha512-sbb0f+CA/mKashuoEub+mEhjtBLF4NjNl9dKAYzgDmXzz8uR4kzULna0EtleGfAyqmu0Bf0bvT2gxdEcHP9LFw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLACW7d3juH4f0NIDHV/0+jUzQTvt8pjMij+4Tsk+CEQIhALgeiyla8Im4lvbPUBmyrEfqVcu9sWzbQH9ibuGYVIvh"}]},"directories":{}},"0.0.2":{"name":"react-form","version":"0.0.2","description":"A modular React form system.","main":"index.js","scripts":{"test":"jest"},"repository":{"type":"git","url":"git://github.com/korbin/react-form"},"keywords":["react","form","builder","rails","formtastic"],"author":{"name":"korbin","email":"k1@k1.io"},"license":"MIT","bugs":{"url":"https://github.com/korbin/react-form/issues"},"homepage":"https://github.com/korbin/react-form","dependencies":{"immutable":"^3.3.0","lodash.compose":"^2.4.1","object-path":"^0.8.1","react":"^0.12.1","type-detect":"^0.1.2"},"devDependencies":{"jest-cli":"^0.2.1"},"jest":{"unmockedModulePathPatterns":["./node_modules/react"]},"gitHead":"5cd64c57172ba5fda54929cdacfb51e9af5b1d9d","_id":"react-form@0.0.2","_shasum":"f3ced4fb8925e45c6c47cd11a8cb0bd1a7afb93a","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"korbin","email":"k1@k1.io"},"maintainers":[{"name":"korbin","email":"k1@k1.io"}],"dist":{"shasum":"f3ced4fb8925e45c6c47cd11a8cb0bd1a7afb93a","tarball":"https://registry.npmjs.org/react-form/-/react-form-0.0.2.tgz","integrity":"sha512-+VHsU1oiU36sHe6yH0Gk2ebxIefw6ff85w7QIC+KLe6pVmSiV0Uu/pA/+fnQXRGi3oF1aCqj/GBDRlWFVa36nw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAqyoWm/k5SYf/wytW6CDdZe04V5TueoHb/v9/B6MQbfAiEA8/4JeEv2UDo584gLpvYMaA1IHTeeZIwzmRcH4ZWEMZk="}]},"directories":{}},"0.0.17":{"name":"react-form","version":"0.0.17","description":"A fast, lightweight, opinionated table and datagrid built on React","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","table","react-form","datagrid"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js"]},"babel":{"presets":["es2015","stage-2","react"]},"gitHead":"8123ca040755ac19dbadd4d812d254f338bcf33d","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@0.0.17","_shasum":"4b22f56bc2556c505eef51c72b0664a77372f714","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"4b22f56bc2556c505eef51c72b0664a77372f714","tarball":"https://registry.npmjs.org/react-form/-/react-form-0.0.17.tgz","integrity":"sha512-PssJYKOZwUPLTbXtf410VRZ1tqKDOqxcjetCTzNwBtety/GONd8z2LAsYK0p0E4bbS62AoSstMgQrGOzk2dnaA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDipM0OCIdWiqU+/OA4sh0y4+G89X7DRQ3m7uDSgL1aBAiEA7LLsPDq+EdE5OJ41jeML0Md+/wN1T8ex3Yiaf67V7oE="}]},"maintainers":[{"name":"korbin","email":"k1@k1.io"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/react-form-0.0.17.tgz_1480977446612_0.749145534588024"},"directories":{}},"0.9.0":{"name":"react-form","version":"0.9.0","description":"A fast, lightweight, opinionated table and datagrid built on React","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js"]},"babel":{"presets":["es2015","stage-2","react"]},"gitHead":"8e3b40a7a69c0f21b8d3528c123751caa5707ff7","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@0.9.0","_shasum":"cedbcbda4efbf1bd94d0bcb5aefac6dda3707336","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"cedbcbda4efbf1bd94d0bcb5aefac6dda3707336","tarball":"https://registry.npmjs.org/react-form/-/react-form-0.9.0.tgz","integrity":"sha512-MNP+bpLmcj8Wr2J+I4j2y2UsCDY5Eq8mTRcKSv2Iq5rCXojPXr4O0ZAnnh957aKLIEUFiBJ30DRzweDSrPrP8w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBmxEbAFu7/MMPyXzGYki1xM3yvLyumTGMeNcFlhYBNwAiEAwD32KCProvwoX/DgOjicEbPwmuL913dbUgzlI+ypO24="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-0.9.0.tgz_1481223648254_0.2814330165274441"},"directories":{}},"0.9.1":{"name":"react-form","version":"0.9.1","description":"A fast, lightweight, opinionated table and datagrid built on React","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js"]},"babel":{"presets":["es2015","stage-2","react"]},"gitHead":"d395817bf169a43a9f23b6290b9b074d62e68b34","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@0.9.1","_shasum":"d16a1246a24477dc6243a2aaa113db081950e6ea","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"d16a1246a24477dc6243a2aaa113db081950e6ea","tarball":"https://registry.npmjs.org/react-form/-/react-form-0.9.1.tgz","integrity":"sha512-yMr7Qg4PgBDtI3modRMTn5il7Mx8LkgYxk+rOtrcAckBmKLe/2Eyn7z1fWBYiERHCuMpGjwSlYbWxz1RAFIy6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHrz7qhm+WIzX+0WG4ft0WSsp/64l01Y1bUaBxtjSXtwIgEmTifde1DQetcFJuKN1OT9f0jQWFXH1ArDTgQW+D8cE="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-0.9.1.tgz_1481238231014_0.7856375344563276"},"directories":{}},"0.9.2":{"name":"react-form","version":"0.9.2","description":"A fast, lightweight, opinionated table and datagrid built on React","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags"},"dependencies":{"classnames":"^2.2.5","core-js":"^2.4.1"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"f46ad7a57f6663de77fdd460aa721034b75296fe","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@0.9.2","_shasum":"8a63e05a63e79b63aa4b02057b894c393803f8d0","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"8a63e05a63e79b63aa4b02057b894c393803f8d0","tarball":"https://registry.npmjs.org/react-form/-/react-form-0.9.2.tgz","integrity":"sha512-NnpAw1W5h5vW+jjLI5lr1+rIUVJS4coPKUFnWaLP9t5QHuoneUZVnAqNNHgTKoEhuE+dIP4NVvulQHHfJHbq7Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsd87BgD5Zp5hwio7K1NXtIWVLaa+mFBK+YOeBv/dCYQIgGg4z/SDzs1U8NjLBwLDPA7wcpP/in+iTWe6sgPaiONU="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-0.9.2.tgz_1481575041319_0.13458820362575352"},"directories":{}},"0.9.3":{"name":"react-form","version":"0.9.3","description":"A fast, lightweight, opinionated table and datagrid built on React","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"0c1bb9e54e3a3fe95553aa8a14d88f8c94342dd9","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@0.9.3","_shasum":"3e4d41051fbaeffedbb5f218e34887e06f576bc5","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"3e4d41051fbaeffedbb5f218e34887e06f576bc5","tarball":"https://registry.npmjs.org/react-form/-/react-form-0.9.3.tgz","integrity":"sha512-Mr+68wCtf7X5XTLgDYZXsXwhIMfPV/tOSysQCNLN9C2ZO9r13y6tUnExniVGL61pAdeFh7wQG1LaRBTwSHO55A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEtw0QqegivKwxF4xWVogI8ygFk0oVFpZmKc/F0whTaKAiEAub11GCwx0VEd7NPsD77BVhJWOZo/3Q0+C+dUInHmr+o="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-0.9.3.tgz_1481580719341_0.32003103918395936"},"directories":{}},"0.10.0":{"name":"react-form","version":"0.10.0","description":"A fast, lightweight, opinionated table and datagrid built on React","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"5eadda7422ffb510da4e64be8b22544713cfe90f","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@0.10.0","_shasum":"0db0058cef353a0166e4e683f3b40a7f3b5c87eb","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"0db0058cef353a0166e4e683f3b40a7f3b5c87eb","tarball":"https://registry.npmjs.org/react-form/-/react-form-0.10.0.tgz","integrity":"sha512-kQIdCgDbm4j919j8BeoySwXGMtHW+P9G1ZKUaMk5dmF2quq7Md98TNen6bGCltq2eB1JAtkOt5Dmdok9nDdPkw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAFe7o3PUARrDWR4eVT8YCBaWThuBVCxoDlh9RqKAJTPAiACQ/pTOPf2uEbgiLZDKfhQ0Z2M5idC1uHpcnW8YOpEyg=="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-0.10.0.tgz_1481644457939_0.2375003683846444"},"directories":{}},"0.11.0":{"name":"react-form","version":"0.11.0","description":"A fast, lightweight, opinionated table and datagrid built on React","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"55fcb0695e76ee1629f489bd99bc0621c9789a10","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@0.11.0","_shasum":"910c49624241fa5a229448b7308b5387c3f63e1e","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"910c49624241fa5a229448b7308b5387c3f63e1e","tarball":"https://registry.npmjs.org/react-form/-/react-form-0.11.0.tgz","integrity":"sha512-uPmXLTQKoGubQoIDfXUpe8Lpy/JdDpR6QLyhhIjCeYBPqvu34hwyJi7Dh8MZsHrybIYiQCfYNbZnxnpZGHyiHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEBbY2Ci/LK1UlfRwefpYeW5ZadOIUsN8yk8jbu7WsDPAiATIsYU79buv642lwzVToyEbLxCBPS7NJnFySbPmusBsw=="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/react-form-0.11.0.tgz_1482181215574_0.0787057236302644"},"directories":{}},"0.11.1":{"name":"react-form","version":"0.11.1","description":"A fast, lightweight, opinionated table and datagrid built on React","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"edbf402412c959f7b99a51c7d8639cb485d93cd8","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@0.11.1","_shasum":"71ed1a4d668fb8212d3a082516539ab19d9be027","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"71ed1a4d668fb8212d3a082516539ab19d9be027","tarball":"https://registry.npmjs.org/react-form/-/react-form-0.11.1.tgz","integrity":"sha512-iCKcReOrHrnWR5CInb5RibWNT1njYDb5NGk4lwLHQBnNAmQInWgh0nLPdeSPBIW/LNQJFZCMhUWC5bJwZ7BsSw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC1Wkt+oCCw7AoI2ooG4NQ8/C16Nh03rsgvrgec5EtavwIgO1x17OXMCnjU3u37O6l8UYVVUeh+hcu/WGWB68PZbQ8="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-0.11.1.tgz_1483555365502_0.23783702217042446"},"directories":{}},"1.0.0-beta":{"name":"react-form","version":"1.0.0-beta","description":"A fast, lightweight, opinionated table and datagrid built on React","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8085 -c .storybook"},"dependencies":{"classnames":"^2.2.5","react":"^15.4.1","react-dom":"^15.4.1"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"a53eec1ed38ea49e54dda31df8258c57dfb585f3","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.0.0-beta","_shasum":"0dcf7b76670044059a5178eb8db209e4e3ebf18f","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"0dcf7b76670044059a5178eb8db209e4e3ebf18f","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.0.0-beta.tgz","integrity":"sha512-VF+El0QwlD2iuvBlMZb86QN0oeBBaO4AoIGcw1xV6y1JxFninCeW3PK7I0C8E+J5XU/axjZiWXbT/5rEYXP/Hg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAzh3m+mW3CGCSnXqtwIAu6impFyHWU4wV+56d2v9yZTAiBDIED5S50uggXZP29xThIU5o+Tlg+zzZFlEIMJLwjg3w=="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-1.0.0-beta.tgz_1483835542167_0.33666582498699427"},"directories":{}},"1.0.0-beta.1":{"name":"react-form","version":"1.0.0-beta.1","description":"A fast, lightweight, opinionated table and datagrid built on React","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8085 -c .storybook"},"dependencies":{"classnames":"^2.2.5","react":"^15.4.1","react-dom":"^15.4.1"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"19aa6ec65d01a59d124e59d6acb97fd80be9d6a2","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.0.0-beta.1","_shasum":"179a994b57a77e73f0a9a8208072db06993a9dd5","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"179a994b57a77e73f0a9a8208072db06993a9dd5","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.0.0-beta.1.tgz","integrity":"sha512-S/z3CKAPzhxh+Uiwj4szaIoEcMawVQsVlUN0e9KBKB4JT3pUMJahdDHHvMp43HJcqssWvGsH3TyZa3zfJjpzzg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHj/5x/m9Tt3OfaMJDQn3Y1hsPv1q0jTA9inZom+0OJgIhANtBDD/kIOjMPht95UBaCvkSaDCJiMKRgvizfySPvOaT"}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/react-form-1.0.0-beta.1.tgz_1483835622327_0.555544221540913"},"directories":{}},"1.0.0":{"name":"react-form","version":"1.0.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","react":"^15.4.1","react-dom":"^15.4.1"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"2bb3ff837b6725c51cefcf90711b674229d09386","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.0.0","_shasum":"52d79634a2fc48305a55dbc16e6c884d40bbd42e","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"52d79634a2fc48305a55dbc16e6c884d40bbd42e","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.0.0.tgz","integrity":"sha512-NOgiTCzjD1LHiaDLbeuJfPQrGax7P+JTZAnWZHLBsU42+qjt6X36y+bMgpDbX+xGzQtcP1yvpBHCVqCt4tXa9g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBxz5BERSt9fxeEv3jFcR+ugmhxyuD8k76WD1fRhncVUAiA5ZWHqOPDYvlWpHp+IFgh4+WBDRA0PbfqdnBoI2Zi0yA=="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/react-form-1.0.0.tgz_1485643644377_0.012274570995941758"},"directories":{}},"1.0.1":{"name":"react-form","version":"1.0.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","react":"^15.4.1","react-dom":"^15.4.1"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"77b00fad2e43ccecc27d824ad729001a81e8c176","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.0.1","_shasum":"c22c17571420ffb910c5b5083018de46f9007a96","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"c22c17571420ffb910c5b5083018de46f9007a96","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.0.1.tgz","integrity":"sha512-BUxsmiU3lIHRKLb4tE3A9nMu/iNj3haqounRng8Tz99J82M9vWJLtyAZhy0RM4o7ts3MYHLWcxwtPOD2v3cdyA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHwyO5SNODby74Th61Xq6wgtk/kEK/XmqI2OehqRKrOQAiBXi6Qfl27KVcx7QW7G9DS4icoqw4Jn3YxfCaYP4JYF+g=="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-1.0.1.tgz_1485981926976_0.6406159638427198"},"directories":{}},"1.1.0":{"name":"react-form","version":"1.1.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","react":"^15.4.1","react-dom":"^15.4.1"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"46113fe49563a5cd2f995f2e2c83b99e00443c89","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.1.0","_shasum":"12ac1fb53ca3cfa80b2aa81b329e76e928bf4b25","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"12ac1fb53ca3cfa80b2aa81b329e76e928bf4b25","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.1.0.tgz","integrity":"sha512-JXEHOBU2dHQu9O840TjkPlAM4hD29jOCv5rdsQspIsj0lzdZRK+FkR7o/LOU6HDAD8i8pSQ3VWx+ZMulpWHZeg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHxu7ZDlHl9RqIbuN5WaBbTEtg2ZghgskzA+Qn+WCMUBAiEAwzGqtKUpyENoV3j7sm8gmYduKwgBRkahWZgWKCgu0cs="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/react-form-1.1.0.tgz_1486411855508_0.3900185360107571"},"directories":{}},"1.1.1":{"name":"react-form","version":"1.1.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"026a569e89ce07f8b9f9c14d17617db8baf31b30","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.1.1","_shasum":"77911390a4074f3f74a98ac51bcfe20ac628e91e","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"77911390a4074f3f74a98ac51bcfe20ac628e91e","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.1.1.tgz","integrity":"sha512-WmzYYCigVFFiZ77t9qxDZuBRKVK4+Z/h+NXI7EZjJrYe89HPeZmlV6yaIiPQe4LpvkwshF8fxieWCDggopgSdQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBHWd5qtKK0fQ3NDOlO2iMwGbTQ0vflp6igvaPLv6bLGAiEA0sdxFljDSPtvGl/zVq6hyg1SiNkMOdUGrv3fpUxVRGg="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-1.1.1.tgz_1487283679362_0.2924316755961627"},"directories":{}},"1.1.2":{"name":"react-form","version":"1.1.2","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"a90c760efeb577a668dddc326ecb55acc8647b17","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.1.2","_shasum":"251cca6d35a40d363ce39c26af59d414a89c025c","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"251cca6d35a40d363ce39c26af59d414a89c025c","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.1.2.tgz","integrity":"sha512-OyER8UIGnWLtvLjyNQ3W+uaJEfMLq+2W+GwW3r6sHxB2VuQrqFk+UTzXZI+xqcx9siYZnbf9lKSjFKwnzH4aIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMaZ0Qq4sNe+nxvpNmo4d+/f8dhjcCsQX3NOJxBVj98gIgQsoeJB8L0Jye04QtHhi6g7404PX2OdOf5zRw+f7FipY="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/react-form-1.1.2.tgz_1487347918940_0.21363138570450246"},"directories":{}},"1.1.3":{"name":"react-form","version":"1.1.3","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"5817248d519aaa7cb8fa7432d2dc9a16b88642bd","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.1.3","_shasum":"23e9a074084165565aeca7099fe00de6dab2e499","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"23e9a074084165565aeca7099fe00de6dab2e499","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.1.3.tgz","integrity":"sha512-Bu9qzt9ncnmgArwwFCZLu+g8mCupu4D7fSfo9RJUVOWuVTV0mSSNv0jTTcpcX3CVV30JhxrigZTu37SQPNlxPg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyX7VOCh/7bS7X+7PE9hRkyIAvat15G5/8PkxJjy3BBQIhAL6hS012nuN6P78Z/gm8Ngp/nIpkFdReq1zMvidl69cJ"}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/react-form-1.1.3.tgz_1487461093027_0.7257642461918294"},"directories":{}},"1.1.4":{"name":"react-form","version":"1.1.4","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"877ab5f06930ec84b8c9370d268b65121b4de7d9","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.1.4","_shasum":"9394511a67295a903dd68b614fa9f6acb1ffe0a2","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"9394511a67295a903dd68b614fa9f6acb1ffe0a2","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.1.4.tgz","integrity":"sha512-qxjt9NksJ2Bjrxev+ZMQhVC6d0/wSeGlOeDkBlOQsYNAjrnBQN5y2hqlE4CA/JHFDDDNyilLarhzcj7vS5iWQw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvF0qFQeJ8y0DhWs9fGMeA1r86WWUGKcSCnBkLYVfr1wIhAK02zqBOzL5R2qZkPE5Uxq6E323PSDA2l5T9iFd84Of2"}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/react-form-1.1.4.tgz_1487731556524_0.42758985236287117"},"directories":{}},"1.1.5":{"name":"react-form","version":"1.1.5","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"eb8eacc72fe8ecd1fcb4a66cbdb9272c06c7a6b1","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.1.5","_shasum":"acbc7280217de95052b0fc06c6281251547ea8e9","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"acbc7280217de95052b0fc06c6281251547ea8e9","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.1.5.tgz","integrity":"sha512-oIWXTF50cH74/KjHXKf+Os73g/9/dBkFb7KNevjnzclME7nJ2WSOiPutoGKEAplw92UfBFu7BZXAEu5sOQ2zRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDY6bhAxyrhcKt+YDP6ZMjCVuzWtiOCRNes8OA9GLRX3AiEApQqK/rZMDwb1xg+dB/D51ElXSJWj+h7iYYro4I1qzjA="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-1.1.5.tgz_1487732505342_0.4668321155477315"},"directories":{}},"1.1.6":{"name":"react-form","version":"1.1.6","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"2bd50c7326b8a3bf43e3c10c00bb35e395987222","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.1.6","_shasum":"d7704ec5bc36c892d28baa1cfe0d908adfaeb565","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"d7704ec5bc36c892d28baa1cfe0d908adfaeb565","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.1.6.tgz","integrity":"sha512-4rTLeh/DqaGnDdnWeE47SxeuyyfWHWPDmrUpJbXE/KmBQFwr3vYVA7Yjfw38m6b7ZEhSespPQMQ7hgycrtaohQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBBeziltIe4NZ68eKwYp4ks/4zXn8uhnSm7eUlzbALL5AiEA3SXYgPTXqIOKlcIjWta4glUXehui0y3kHa2H5kPbSXk="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-1.1.6.tgz_1487732848358_0.6538518471643329"},"directories":{}},"1.2.0":{"name":"react-form","version":"1.2.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"b52549c7b4ad735d6ff623545294661c929cd561","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.2.0","_shasum":"8e33ecb1f1f96337c6fa46a4539581154b7f1e1b","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"8e33ecb1f1f96337c6fa46a4539581154b7f1e1b","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.2.0.tgz","integrity":"sha512-aHQud+auvJHVP8te4DdOizkmG661jbtzSjNaazvl0Sa1oPDdKmKen8veCS/GVGbbiB19lGFKtNn4FKyzdjoy6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDx/yBisSph8yVg8+uRwejSAXFmoZqmlg4eg+eb3a6qiAiBVQk0/1HwP7ttg8Mj22Y18zb3CuwCyis+ylLhVTkXnHA=="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/react-form-1.2.0.tgz_1487787527089_0.22649592370726168"},"directories":{}},"1.2.1":{"name":"react-form","version":"1.2.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"31596812732ecd825081f2975593fa8237e1ebf3","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.2.1","_shasum":"7ba4726ed5aeb4664684a50b1a8cf485caddf1fe","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"7ba4726ed5aeb4664684a50b1a8cf485caddf1fe","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.2.1.tgz","integrity":"sha512-DN0VBhgwbVo+dChdrAw1iBq3iFBEazdpYwXlU83vsh5Phshq+RGLVpJu9gFOPWWIc1e0WZkIAPa1IcIF26Zjtw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDldMTVNoCBPyfJMeSdBwTg0QTMzFT4InxLQD1fopETEAiAx8MUtS//+6xwmj3HHDlQ8AEspDZTSyF8EfB0AFpgWlw=="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-1.2.1.tgz_1487787991982_0.6600351384840906"},"directories":{}},"1.2.2":{"name":"react-form","version":"1.2.2","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"7246282d5648e328431e4d38c7257767f09773b1","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.2.2","_shasum":"c654dca63baba65f233e2cd0c29d55c936953891","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"c654dca63baba65f233e2cd0c29d55c936953891","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.2.2.tgz","integrity":"sha512-zH4dAUv92hFh1Z54Bd+L2fneXxci63w6lm5ZtqjZeJzCyoJcruXt8yb+Qgnviw6eOVk0yEBLVYsTcSNrhgpxGg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID6pLYPoU5MzQHZ7Rzyw23SOeiVfptjcL+aus1/Le6K1AiEA6mNZQNz9sl7Fo/cX/OrJd7ozFjGBQ4W0pNIZc8nZsbI="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-1.2.2.tgz_1487793447323_0.28446984267793596"},"directories":{}},"1.2.3":{"name":"react-form","version":"1.2.3","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"17100e2ffec47dd4ab4e12e502494cae5da3efcc","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.2.3","_shasum":"b161d80d8d9f0d1271882a77f4fc4c0dc82c1277","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"b161d80d8d9f0d1271882a77f4fc4c0dc82c1277","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.2.3.tgz","integrity":"sha512-UIEKCSu3CdK6KRbi6IO9Zcvf7mT3s2YgzNNSM5ch0EBCZa0MeUy7ez4FucNhZw115BJzlyFZrdHKBDF6WpOJiA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEly62SZevXzc58jgJ2UkM3klpY3f58dyO3RusxSIcvyAiEA0zhquzx5Sst9lvNZiCveRtbLhunprGJVCfzc8U9e9zc="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-1.2.3.tgz_1487804692704_0.2559701227582991"},"directories":{}},"1.2.4":{"name":"react-form","version":"1.2.4","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"ce10c8d5fb9712a3eb393dfee3334346b6702b41","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.2.4","_shasum":"60fd8ead0ed4a61a6421ea39c9f52f8117b178c0","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"60fd8ead0ed4a61a6421ea39c9f52f8117b178c0","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.2.4.tgz","integrity":"sha512-ORZmwdWNM4//h06vXWUjn/yhvOU/iQfWgoh6tVHTaNNRygD7EH5tcdB4D24CmEbvkOyZ81HoqtT48eILLmuW4w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzVGpsKm9oVnFWtug27jz6wahUXONilq+1Mm4+XMIcKwIhAKycjxwJtosNCbmVvEG/RHYxD9nrAWM8T+s9PNhRqP5D"}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-1.2.4.tgz_1487807072163_0.4190293785650283"},"directories":{}},"1.2.5":{"name":"react-form","version":"1.2.5","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"ed8d3e5b8dfa5b2b8955afdce81f3f83ad633c1b","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.2.5","_shasum":"18f47a3059b4a3f75d8afb6db7b3e20fcf852045","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"18f47a3059b4a3f75d8afb6db7b3e20fcf852045","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.2.5.tgz","integrity":"sha512-wQuEVLEIV4rztG0R2Gh+aRXVQ6+06Bfcv/Gw3xl9Lqph8LQ9ZPj4SHPTQx367EzXToyeVr7SiozIofkg/4aMyw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC99c/j+L18vYVqhS0a/0Fo/l5yDsA2RBAbVQqCF8rSJAIgXzOpcpY+3OuIrBZ9uGcfIo6Lc+7AZZyY1Kg4KgIzta8="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-1.2.5.tgz_1487892649715_0.6112268220167607"},"directories":{}},"1.2.6":{"name":"react-form","version":"1.2.6","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"1fd2c45a7f7159b335e29b915e91ee9dd31d01a6","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.2.6","_shasum":"17c619c9f2544eb28d4219dde9a723671e8e584c","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"17c619c9f2544eb28d4219dde9a723671e8e584c","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.2.6.tgz","integrity":"sha512-B5I2TyvR3n1tI/Masxxl1Oh8cc3SgiCUA9GisP8N0BbprsYn073tGGrVm6/vOp0/Tq2F7STObvqC5+KMokpxXQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQPHUpw6iMjag0jtoz+G1BUrgEHept5dezEzvbLOiiDQIgcG9f1yFfSpFnLRf5xvpo/GY/kOZhhdC6/bVwuqyX7yI="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/react-form-1.2.6.tgz_1488214540629_0.3041962331626564"},"directories":{}},"1.2.7":{"name":"react-form","version":"1.2.7","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.8"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"41c80689103e4ce873367c7d15aa4d26b91927cc","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.2.7","_shasum":"498167c675590fdd2f2a84d4ed9c519188e6054f","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"498167c675590fdd2f2a84d4ed9c519188e6054f","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.2.7.tgz","integrity":"sha512-ma0ZluapH2qPgrfzkU5g0IxpfateekBCx5c0J+wrOocQ6JljNCjlGoav54pJ3WlGR1LoeI+r4o6F9WXPFFWmJw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGRuu3HytZ5WcwXt/FR/AzpO7Ck0mP1d8ZY9HYV8QkJGAiEAp9NkIeFn/hsZb8POfgfOyE1AFFZDcMbW0vbUgFooEcY="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/react-form-1.2.7.tgz_1494270764785_0.8919819050934166"},"directories":{}},"1.2.8":{"name":"react-form","version":"1.2.8","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rm -rf react-form.js && browserify lib/index.js -s reactForm -x react -t babelify -g uglifyify -o react-form.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","storybook":"start-storybook -p 8000 -c .storybook","docs":"build-storybook -o docs && cp .storybook/CNAME docs/CNAME"},"dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.8"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"@kadira/storybook":"^2.35.1","babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"ea2f39b4157cdf6f11b114c5d6342293a7a3245c","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.2.8","_shasum":"7a97a310635a32a238088f5afe722e7006abd1d7","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"7a97a310635a32a238088f5afe722e7006abd1d7","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.2.8.tgz","integrity":"sha512-LwOSqxtPmiaIgLkOEINgbwXCZA5TFWsq0b4zyUHwuQumnGw+YEIfsC1vpJlDfSn0hzLaOv02ntPdoq2aMtJcmg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7jiYigzwdsw/LFt8BAwcI9soOLgMMcpiixgj680eJZQIgUt7XljewnqaNw+zg9DOmXXSDMYeOUtlLo7S6AhsrY4Q="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-1.2.8.tgz_1495720864569_0.8144009548705071"},"directories":{}},"1.3.0":{"name":"react-form","version":"1.3.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","license":"MIT","homepage":"https://github.com/tannerlinsley/react-form#readme","repository":{"type":"git","url":"git+https://github.com/tannerlinsley/react-form.git"},"keywords":["react","form","forms","form builder","nested forms"],"main":"lib/index.js","files":["lib/","react-form.js","react-form.css","media/*.png"],"scripts":{"build:node":"babel src --out-dir lib --source-maps inline","watch":"onchange 'src/**' -i -- npm-run-all build:*","test":"standard","umd":"rimraf react-form.js && webpack --config umd.webpack.js","prepublish":"npm-run-all build:* && npm run umd","postpublish":"git push --tags","docs":"yarn watch & cd docs && yarn && yarn start","docs:build":"yarn build && cd docs && yarn && yarn run build"},"dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.8"},"peerDependencies":{"react":"^15.3.1"},"devDependencies":{"babel-cli":"^6.18.0","babel-eslint":"^7.1.1","babel-plugin-transform-object-assign":"^6.8.0","babel-preset-es2015":"^6.14.0","babel-preset-react":"^6.11.1","babel-preset-stage-2":"^6.13.0","babelify":"^7.3.0","browserify":"^13.1.0","eslint":"^4.1.1","eslint-config-standard":"^10.2.1","eslint-plugin-import":"^2.7.0","eslint-plugin-node":"^5.1.0","eslint-plugin-promise":"^3.5.0","eslint-plugin-react":"^7.1.0","eslint-plugin-standard":"^3.0.1","github-markdown-css":"^2.4.1","html-loader":"^0.4.4","markdown-loader":"^0.1.7","nib":"^1.1.2","npm-run-all":"^3.1.1","onchange":"^3.0.2","react":"^15.4.1","react-dom":"^15.4.1","rimraf":"^2.6.1","standard":"^8.0.0","stylus":"^0.54.5","uglifyify":"^3.0.3","webpack":"^2.6.1"},"browserify-shim":{"react":"global:React"},"standard":{"parser":"babel-eslint","ignore":["node_modules","dist","lib","example","react-form.js","stories","docs"]},"babel":{"presets":["es2015","stage-2","react"],"plugins":["transform-object-assign"]},"gitHead":"6ffb9e8a0e515aa8a41d6f2155b2f9899d046a19","bugs":{"url":"https://github.com/tannerlinsley/react-form/issues"},"_id":"react-form@1.3.0","_shasum":"d679b43ba896c8010a942f65119649537e1a0f4b","_from":".","_npmVersion":"3.10.9","_nodeVersion":"7.2.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"shasum":"d679b43ba896c8010a942f65119649537e1a0f4b","tarball":"https://registry.npmjs.org/react-form/-/react-form-1.3.0.tgz","integrity":"sha512-2nrOGARLoebX6SrqLpR2yS9eVDmExLkptutOxj1Q45Eox3oBLw7IHh060ZUwe1lV86Ydf26bPSP+eo1Gy1WetA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEuldm0MHKKOFddzRhid3Q3Gq0XXvbKNwOWZJbdtNdKuAiAD/1TvHu0pCKSHD9rAn9sFyU2JZmx9y/WgFkhPZter1w=="}]},"maintainers":[{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-1.3.0.tgz_1499451226161_0.06088000419549644"},"directories":{}},"2.0.0":{"name":"react-form","version":"2.0.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-polyfill":"^6.26.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel"]},"gitHead":"5af4268359c11e21db14650d91779895b0baf8aa","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.0.0","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-5803hMOzVSlPYKuRxPsFwNic7HxQDqaNpMm3yuVGtJxKgtzLTV14vPsgdU60VUvyCX0SalQdey2FJwq9ABuWag==","shasum":"db63ba5221b19ecbafd67580df4eb9fe108b9d23","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.0.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQ9Qbyu49zpgCYWrP+nyl7XUdZ0Ld2vOMh5AEhf/8GGwIgIBMVcOWAXMZo5p0oHXjaTtKzrsG9fU8aES3lmaidbU4="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.0.0.tgz_1508818640040_0.4894381754565984"},"directories":{}},"2.0.1":{"name":"react-form","version":"2.0.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-polyfill":"^6.26.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel"]},"gitHead":"abee68febc46a2180c7d0d2ea7ecaf9c7e78f09f","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.0.1","_npmVersion":"5.4.2","_nodeVersion":"7.0.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-XwkPZm0SRVoJbUKm5UBqoMnoWdWmyxyMK4auGAHQF5SMD6l5gc5naoE4qvRb4QfciDbc4PGQavDPswDYaqgDrA==","shasum":"da8dc5c5203ebea9acc7d8a849cf1dd55075b7f8","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.0.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGwVjcoymMXMc5qtgtVir8YTPTHJPhwFgYpEKp3xVu/AIgF4VW0EUQgKpKarloWzzceUEMaER1li32pJBViwcbIB8="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.0.1.tgz_1508845688566_0.3105841986835003"},"directories":{}},"2.0.2":{"name":"react-form","version":"2.0.2","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel","transform-runtime"]},"gitHead":"6f6da968b91a1c2b388eb90f9c6d50ce26db2554","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.0.2","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-WCBwLxsmdo0TkkvlqNWmlrxUBq/7XPuFO8YeaHikG7ODbIUtKTjk7nFJ/9euCkFpP2a96/d8vwJqGMaXxgubcw==","shasum":"1d44eadcb46bcab3f9930475527ab7fe7541e5ef","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.0.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAC/I5NYXkOlMEanarMpvLuUZ0cYCvkgAqHvwL5txLDCAiEA6oV/v+hNznKbDGYaFNAGCxPn8OpuvoZ6JiWPJnnjBDU="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.0.2.tgz_1508952603047_0.045905610313639045"},"directories":{}},"2.0.3":{"name":"react-form","version":"2.0.3","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel","transform-runtime"]},"gitHead":"114751e8c71996ebb2cbe81168f6867653d406d7","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.0.3","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-Or+g91JZysNn8vYWkUGKUyMRFT81Xby4rHkH6/GQzGVqFSFcpEKq1sm3f3xn9EIgC/sSyVDch8pvfRHeWSKFxg==","shasum":"15b6ea1ab1038f27bd2413f3a9c71d8f6f3c5c6b","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.0.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBNxsCCwTKj1Zwr48JsXT4x9TaoLskMlZDP/Hc9d2PggIhAPV0NHqlD5YoRDfS+LJfc27vftXqCqvj2D7hAByb1DPx"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.0.3.tgz_1508960488581_0.7466377362143248"},"directories":{}},"2.1.0":{"name":"react-form","version":"2.1.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel","transform-runtime"]},"gitHead":"ece2e0418a7ac259ce5e6481d99f4e5efd4c5891","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.1.0","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-jbMkjWPjMGUtFUYa/fziNehTpu66cB26MSGcETmVkPAALwVzieJxTMxkZQfEMjqoDjpgSl/MRTHA18j83xTclA==","shasum":"3047bc22cc570657e3a99ba3354e6dd371b7fdea","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.1.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICNsEobTuGcUqRDHy7F1WnFNmOLnYdnW1d6tbaR8JJN5AiEA/dVRW+QxiuRAAagJ5EEJKWgglRktGj2qtnEhqcF23LI="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.1.0.tgz_1509059324356_0.9992914705071598"},"directories":{}},"2.1.1":{"name":"react-form","version":"2.1.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel","transform-runtime"]},"gitHead":"c09e9e715a1f8bc418427b133f419be254deb1ab","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.1.1","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-WC9LVFC46T4ffqESmmddwrVS1y3nuzzCKpzOPfssMkLQywb/rJze13bl6CpGpKj2XEnwOXiEEhR/PZh2c/NU0Q==","shasum":"33c591f786d2cccfbc6f47c3059421f77fedb42c","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.1.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzl/Rtq1I5IyJWM/ltdGnC8Y2i41jU6rDn4+Q5Ei45lAIgKVIjrEPvK/PNsGvryTfelwOWygw/XCZ7d+4aejqAJbc="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.1.1.tgz_1509160515436_0.5643438578117639"},"directories":{}},"2.1.2":{"name":"react-form","version":"2.1.2","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel","transform-runtime"]},"gitHead":"56af92f74ce1a2c1425ec6d6fb106ac1efef3a2c","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.1.2","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-5qBQXzx4f8O2rWt2CPg/DF1xbKlouugl03l5D86RaXG2RVzTYewD3TGUjsQCQnQisprJA3L5exaUUupvFn1acQ==","shasum":"2267ae3bbabe6dc37cc2e79bc3e38d6983a188ba","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.1.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjXgYMoIlb5sP3fRrIElhPrLxq+8IIWNyO978/529P+wIgNgU380K7Jrk2mg1Hdz1UsZTh/y7cSnfXdtUAfPEdYe0="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.1.2.tgz_1509163019509_0.2434469135478139"},"directories":{}},"2.1.3":{"name":"react-form","version":"2.1.3","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel","transform-runtime"]},"gitHead":"a487319f1413125698abf2ef6bf86538a2a2cb13","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.1.3","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-/rh8+9mUaMO/rGMtvFDCJENsCfMb7n6yOIPS0ZKMG0r6qwDam2vnOkiBlh0bE+Kp3D6Iw76OTc957QyLlMXXgg==","shasum":"11b1b0dd00ff73a07155c12991dd63d9bba25387","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.1.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGAtJKbS663VUSYr7INiqR4dFNeWz2oLMzeHSVtIOducAiEA33v2aZ01IyDPZoNbQORZJYk80y22scYsI/XIGj1nbIQ="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.1.3.tgz_1509282295029_0.5077401662711054"},"directories":{}},"2.1.4":{"name":"react-form","version":"2.1.4","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel","transform-runtime"]},"gitHead":"32d4bf46005e815674fb9fe81b6e5e7ebb1a634f","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.1.4","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-cX+IJJYWtwzs4mA/52Gx0Y84qJhCFLiTRgQ+kBpeRoNSF5+Gu0AioP45sRuM4NdxJo/Nwcj8wVLXgPCpH8T66Q==","shasum":"420c3e6ed9b81cd18ff492a9d48dcc29a71283d0","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.1.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC3hhdq+LAx8cknxrITOLn65AOYQwinPeZlusNgfi2qYAiEA6tjE6L7hDcBT+B4IV7vNj4nB6bcWXHY++eaQh31O/4U="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.1.4.tgz_1509283241903_0.30238698655739427"},"directories":{}},"2.1.5":{"name":"react-form","version":"2.1.5","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel","transform-runtime"]},"gitHead":"cb5b601c4c68fed276957ee7123bb877207e2e23","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.1.5","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-BvEaPf0gX98vxvEqD61uE0WZZVzpJKV93qTqINnzo4Af0cCiSN+gwROiBgr6V6cUjuYgbvfZdAR76uYH8Mw3fw==","shasum":"29aac6dcafde348f7971788d71ce467d74982e49","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.1.5.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCKyXNzAR1pM5L52VYXv+WDFO4TSIbdCIg6QCGbvmP0uwIgO7NG121YCJ896a8WB/28CIQTt+Vxf0gVRe0ivZ+ZTFE="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.1.5.tgz_1509284245268_0.6886839051730931"},"directories":{}},"2.1.6":{"name":"react-form","version":"2.1.6","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel","transform-runtime"]},"gitHead":"be222f76b11cc6af1c47c536cc3645b506c5ddcd","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.1.6","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-+sgkE/yyGMuR5dr3KZGl8XrlO1uevh+WTLQJEO1ZXrQHFJKTQNz1XnR7SLXtfNII4xiMH+jApk/+kgS4k+L/SQ==","shasum":"4f029425d698e9ee62144f4415c27ce1770add02","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.1.6.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCosxz/DBLKOVk4aAD0coC9nxfX+5J6zRd+9fxHRaLeJAIhAKI8rEr49u5oYHujZ6F3YznqSu/Sd6cVs1vpHfb5nIuQ"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.1.6.tgz_1509468464889_0.17950239987112582"},"directories":{}},"2.2.0-alpha-0":{"name":"react-form","version":"2.2.0-alpha-0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel","transform-runtime"]},"gitHead":"6e008f8b5a3655b882c473de46dd6f05241aea2d","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.2.0-alpha-0","_npmVersion":"5.3.0","_nodeVersion":"8.5.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"integrity":"sha512-gIsZ4ctr12YVjjNVjbh7MYndySohSRw7qtIYxVfXrXYFg7yHmEOeut4HvmjWGHdn+l2yVIPQOjxVxvOiNhVK+A==","shasum":"c805c5171820ed16029485322a58df7d7d72bd51","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.2.0-alpha-0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHt9yNeRxG3GC5XXFoIadglJOQ0xgLxekzxByAkR1rbrAiEAm7YFPZRuYyEJw3aMu6CwrA/p4qCOmR/4FSWd42t6/Fg="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.2.0-alpha-0.tgz_1509486368824_0.02219905611127615"},"directories":{}},"2.2.0-alpha-1":{"name":"react-form","version":"2.2.0-alpha-1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-form":"^2.2.0-alpha-0","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel","transform-runtime"]},"gitHead":"11f943ba2956af380e772c31b1ac2eecce2f20e4","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.2.0-alpha-1","_npmVersion":"5.3.0","_nodeVersion":"8.5.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"integrity":"sha512-cRTAtUevw++GlKJ6AE/2K/04WhvfMEI+0NDYqc5jC2qb7+p2bJ9vXI9cDprQ1+tFh1Y6XzwVz3HnVFztLNrUNQ==","shasum":"e4bc94e7447c38f24c519a13eca0a5fa0fcc1deb","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.2.0-alpha-1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD95qATYqR6XwhcoDimm6IqXCxNmgWyhaCSMR21ECZNrgIgOcHm4/0Ii7htuA5tbjU7iExYQihtXw+1fnqfr/XABqk="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.2.0-alpha-1.tgz_1509489782747_0.6580601127352566"},"directories":{}},"2.2.0":{"name":"react-form","version":"2.2.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel","transform-runtime"]},"gitHead":"acfe54379f75175b4c10245ddbafe7f12f1f54d1","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.2.0","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-/rUv0hacfhbr0lJ205skDIpmMcxs9q2fYffhw6p12MHylCSojs2XdyXZEYG/lOpICUhEqkNboDkNHgP3t9nbAg==","shasum":"d5c0b45116441a0462478548a8061d19b10b145d","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.2.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGOx9QyE05P6/z7ZFBBFfaOs+nro+ou443bgWsAxQub8AiEAzacfKj7tiWYN+H2qARItsop0vCWDoLTf5YaU725tRzw="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.2.0.tgz_1509511018775_0.23011842905543745"},"directories":{}},"2.3.0":{"name":"react-form","version":"2.3.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"babel":{"presets":["env","stage-0","react"],"plugins":["react-hot-loader/babel","transform-runtime"]},"gitHead":"2c0aa7a3da06a8105b5283788b59824a92a7e744","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.3.0","_npmVersion":"5.3.0","_nodeVersion":"8.5.0","_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"dist":{"integrity":"sha512-l2li8+PPurPW566+ez8qAAeIqaXYCmRE5ImD98TQLMP4Pxs7nGZXwWeiHPQRpThLwLofAWRLFporRC+2c2z9Fg==","shasum":"0061d3f3abe24deda5131431d7e476b630eff65b","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.3.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrkeCR+562kwBnTRlX26cqlI5XEe2hkOBxbyoBfiZpQwIgPyAEsU0Lb/Lsshop7aYHZgWEIjf0VqJ7Gzy2dGYBFjI="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.3.0.tgz_1509597462294_0.719046552432701"},"directories":{}},"2.4.0":{"name":"react-form","version":"2.4.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"679924a0460a61d028492570a2bbdd5b44c83499","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.4.0","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-RY0PyFX7yb3Q5xtGGUwN7wSvpaGPep/B4u1m+UeK/WPvgHRRU03VcFGJ5OIbFWKXy/Pi/1FWk6kvnacudBOzSg==","shasum":"e0164cc5bbde4058d03541ba0dded0bc8ad5f2a1","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.4.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIADA+kluUThahvUbFQf4375dWkUqGuNAeif9O1jriFvOAiA/Kwe8VJ1QXaBF7TsihKIxy8SLfH+v1adgDpC+8Largg=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.4.0.tgz_1509644454464_0.33813161798752844"},"directories":{}},"2.5.0":{"name":"react-form","version":"2.5.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"3898cbd210902361b45f8091e0f46e31ce77c370","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.5.0","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-5/8ID+ZrPrbXOWQCHZ7i0aZk8a8UxUjQrU7xIMczOHqJjerUNonPy5F1avAiZ0oOy+IK3X70S62jaKN4i45UyA==","shasum":"ff3834751a6569a317be692ea11d1ff5ec11a3a0","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.5.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB1HD3F1NvPIbwESvzvg76T6zNiJDQj8HB16HzOPyQEIAiEAseXfk2pBdEqeb9Metesv8gpUgWLrtjJraFefJM8XBxQ="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.5.0.tgz_1510091198786_0.9642594875767827"},"directories":{}},"2.6.0":{"name":"react-form","version":"2.6.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"bacadd00932d584b67229763bdc7dfe7daaf0046","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.6.0","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-UZJRaPjnGOL8xLu8+57EN5YvWjjDu6CrBJ1aOjMZiEfY5rSYr4X59JPfzRpzyLBVorYyNAi2mIyRIk1RFJHHJg==","shasum":"90b794fa1d334ac316cdff758ab283c77752ff07","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.6.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCf5rgibxn18UDFfJlqY/Rrn4Gzw03vcvgZKolByMELoAIhAJxRr6fK6FGm3/XeRfQQZtsVYc0t0qgW0X7nvc4G1tI0"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.6.0.tgz_1510109972607_0.19763008248992264"},"directories":{}},"2.6.1":{"name":"react-form","version":"2.6.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"c3a6d1af7475337b93234092317a08305acb452c","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.6.1","_npmVersion":"5.4.2","_nodeVersion":"7.0.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-y8jH8F6+gjV/OwYae6hT7RNqUsXmUVnMoGQbbN2q3UME5xJINCc0LAmae7JmhksawAJcELCblDMSHQoC6+aFVQ==","shasum":"09abff409677575d4708099c0f6989323e56e24a","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.6.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3FmiyajPa2Pc/+LaBV5jprI70/200uLlTfVzgqlRDSQIgCIvf018vNqAq2/XFKtbmKOKIqGLbe7P9WJnMI0tC/UQ="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.6.1.tgz_1510145743769_0.5358274355530739"},"directories":{}},"2.7.0":{"name":"react-form","version":"2.7.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"5cf85fa7a9b098a0fecc41c3899072eb12168ca4","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.7.0","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-Wvm+qh6x113sBjWsRNDNYypUiB4cjvPEqcV9rkHnaVSrtu4ZXDbYHOVnTqzmHxYRoL2uyyAdeleD4+JhhbiJOw==","shasum":"1dc91ffc4ab96305211164cac0ebae03856b40d5","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.7.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICy2TXU98YbD3COP3e3iuOtNLHKv4Z62w3SiKlbsxvNOAiEApJEZvMgRNVDKoGGlbehA/pdkonAd5peLZ2Spe6ZQP3w="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.7.0.tgz_1510238778010_0.07380737783387303"},"directories":{}},"2.8.0":{"name":"react-form","version":"2.8.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"95e117ab69cff50b8d0705b34fedd7189bbbd13b","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.8.0","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-Fd6Bmw7UvlCk6BfUqGBIeqpnr2BsMyotfwBq6s6ciuMVzLoIWzhGj+HN8hRu+qSQBUx/OSLpLQf4zIjXQ3gr/Q==","shasum":"890691fc4226837c48f5fa79edb0575d854c038a","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.8.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEqdExJv5+HbSZJPDNU6qRG0PspEALepszEa79GQzIz2AiEArZL+D0qXCdIWcN/Iyz8dwJ8Lt9Fpa0yFhxeVmIqjMnk="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.8.0.tgz_1510264323512_0.6494239470921457"},"directories":{}},"2.8.1":{"name":"react-form","version":"2.8.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"7832ef31a2c8c8cae44a3b85add0144a62c7dd03","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.8.1","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-Eoaw10cDx8MAGKNVndMV/N6vEvnLh8tdb4LJ74SAtycU9p/2KTUTA2nJVA5ZksPseSg60WO8iPNAh6UyxUH6RQ==","shasum":"c1f43b2d4aea272f3bafe23a732967b61158f94a","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.8.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGWBZDnHM8bjkc2KBVT8qX+amGQeirnWoIbyRiJjv/1JAiEAtaF5vI8dse/36OtcF1wBV1dm0hdTr1/98rTcrCbLxvg="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.8.1.tgz_1510283150268_0.13503562100231647"},"directories":{}},"2.9.0":{"name":"react-form","version":"2.9.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"f08db0ab2386b6114e0557aabab766b13a8b520d","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.9.0","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-iTkKwBqw9+yQrxTAgxTi5BVHvdbhtitOLjkzvKZkSA960F4EXrKpKi828WlVa8XdvLChqhl0YpBOm3IoonuR2A==","shasum":"8b41beb46710c80ec924c2dc8c42f07acf294dec","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.9.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBqgPV2WxCdmfeCrntwdZoP2yCsXfeFcMzk0e5g5N+oSAiEAkeVgSLI/pGX4wBO2YNPuek6kMLzb8Fz24sHvJ0wd8Mg="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.9.0.tgz_1510346003451_0.7550858410540968"},"directories":{}},"2.9.1":{"name":"react-form","version":"2.9.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"e2d143a6c1abce0b32d6164460b05f41d78e6a09","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.9.1","_npmVersion":"5.5.1","_nodeVersion":"7.0.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-ddLGEG+gxghH95DzRePTDvo+JqD2eNGCFO/Hv0jqqi3EhSU7KThaGGvWJCtzaAlutTFVdl4pIClQKEikut/G9A==","shasum":"7f6cf528ab9b5f13812b8fa1f791c45ec1597d7f","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.9.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAXxWgUndjx+Z8xImFB9LLoFtorwBvwO6AKeyXQ/icXsAiEAlGShr+w9nvRATQ0U0ecsIEl8T/hxx5I0DsDFi3vFmT4="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.9.1.tgz_1510632200828_0.03437292040325701"},"directories":{}},"2.10.0":{"name":"react-form","version":"2.10.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"c886395bdbcb26f9a9b1e632c4df91263f55ff3c","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.10.0","_npmVersion":"5.5.1","_nodeVersion":"7.0.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-4m/2D91pgRSENO5VsUs6a1Turm5wVOY4BHeM7mBjVZ6xIr/43o4Tzq4VUH1ySxewUKQEHxYrKNPXokYFf5C7Jw==","shasum":"fe2eb50e7308e46354c52562d42352d8ae975ef6","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.10.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQ8Lw+d7qfqpLedy04+VI1M7LZ2lmyRAmWIKpunusHYAIgJiKdlT5+peEKhJ6TCvkLDvNBToIK85PZ558uYZ9fVfg="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.10.0.tgz_1510633793886_0.5724665303714573"},"directories":{}},"2.11.0":{"name":"react-form","version":"2.11.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"0038864998f0344f4028f628023002b7d7c0e680","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.11.0","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-oqxD6+4PYpquDo9+LW5mzSfTD++NWY9blviMrhTCQxUakwOYItaOJnFBaMb09tNZsRulyi9OmelvBchN1tdriQ==","shasum":"c1695e4f8e9a5c77b946a1fea54c54ed85642a5c","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.11.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBCG3UTzdTGlcX73NdJ8xwZcHo/UZYT+I96M1vxpFDSpAiBIhUOr2B+wBWjkFlQ3eOOBM5vzdk0pymtGX6EwTTCN2A=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.11.0.tgz_1510717311264_0.7858430920168757"},"directories":{}},"2.12.0":{"name":"react-form","version":"2.12.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"101ec21e4dfda50ea068ecf0ea39e6cf5b0abc84","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.12.0","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-W2tjjcx39zjCrYz5PFzo1/pl1PoK4CFJfFt7u4REiSWiKgb4cg6iTsVxqZiysH9aqhAzPWA4ywf2eeMV+xgjvg==","shasum":"4c2e51a5b5524c5d2c4451dfaa73fbfff0b58bd0","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.12.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIByjAg1idCp0ynd5K9tliWIYejA9p5Dy/GHGTcE2YRkKAiBTzb+DaM7n5EwSGwcwLz2TIMM1r0Yae1WqwgWQ4vfvUA=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.12.0.tgz_1510955781109_0.862845535390079"},"directories":{}},"2.12.1":{"name":"react-form","version":"2.12.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"b9048627f63d74b18720a94dfba47cf9d9dae898","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.12.1","_npmVersion":"5.3.0","_nodeVersion":"8.6.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-amJzBCD/1OSaKXCfBE8KNz32VU6LZKXqMt2hrMgBJ8cq6Jaqm3q0i4vx2felEFeaeK/2agcBuW+OwTEDmzjirQ==","shasum":"917432290c757c7fe959cb66b40b5359883a830f","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.12.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYAwjwBCiZP0VxhvNPWOw1zULyhkb4iDTwmUqyrtO1jAIgGlN41X/5QKIz8NUqMe8bXM7n5MrE3qiVUhQ8RATWaYM="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.12.1.tgz_1511128977069_0.9914948488585651"},"directories":{}},"2.12.2":{"name":"react-form","version":"2.12.2","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"1480d1fb95c88352460534f9817021920f498248","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.12.2","_npmVersion":"5.5.1","_nodeVersion":"8.9.2","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-yb+qd6dk/7x2tQAy0wi32WTZ/JpNCnovDEZouxY01sUO08lxWx1W/O0rTUwGh4mxvmN+0JXp8hTNTph/4xM1GA==","shasum":"52554098196c635f493ee44b1011af2c250017d9","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.12.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB0ohhXbZsAXqXcy0FEL7jBbcsONBpj3+Xqa5HTjuDFmAiEA6h1H0FOT5yhcQucwRRF7W6lpztSPTrGH8WfsVCMeVac="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.12.2.tgz_1512609610649_0.3726648734882474"},"directories":{}},"2.13.0":{"name":"react-form","version":"2.13.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"529191691a67a073e385cdbd73a80021d7dea7a4","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.13.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.2","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-BgCeXWNqlJWevCClPCa1csWcLmj03ZYLKJqQG8i3KaupaYS8ASXgohyz0o5Cm2Vah1VMMw2Ny8X+i1iZXBER0Q==","shasum":"1ea8259755705381d64287868d7c583a9afeb594","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.13.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCaRuE5yJCS031c7yZal1ZdvDScyQwX0ge6yyTigevYUwIhAMPUko3PA4No2wBPk/rhs6Mh+chgGnvX7B+D55jst6wJ"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.13.0.tgz_1512661847899_0.5160767277702689"},"directories":{}},"2.14.0":{"name":"react-form","version":"2.14.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"42846ffa8cf4d4d1abb083fab0904f63d2030321","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.14.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.2","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-vR8huF9kqr0+M0sLNr3iv615asCeycBtXi1QxNO4DQ3mTXRp04bJUIic+4w07DTCnylTOiPbEYQ9RP2VNQC69A==","shasum":"8e13aec3763552f25ea34a9d6b6c60ed712b3e24","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.14.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB2993slxVpgbFy9mfkPnquGrWSkDj31DpzEfjRRAYiLAiBGPmW1gKClEB03of2JBToyQWd5SKzTN/G8xWJUrWWE7A=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.14.0.tgz_1512740544942_0.07663519959896803"},"directories":{}},"2.14.1":{"name":"react-form","version":"2.14.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"cf8713249be755ea62d77294b8baab7bb966e149","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.14.1","_npmVersion":"5.5.1","_nodeVersion":"8.9.2","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-AhIvAyJtFp54ip12h98AF6o4mmSWgNKVSkhV6aQlOx9twDy9imG71hnGfewruThXym6Z6RsPXyBd3H98WLSelg==","shasum":"2eb5299c929d2446f185f79a7d0b20f34c33c2ad","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.14.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHLQ5b+UeWbRimxiSP/yEpmh6L9OQ/5KBPlfP7GxuLsjAiA8C5VHY4ARt/jCd7HVSipG+93QcoGUSOivOL+c+Ij1JQ=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.14.1.tgz_1512742039237_0.5633480760734528"},"directories":{}},"2.14.2":{"name":"react-form","version":"2.14.2","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"99aadae8a076d4e38b2f32165148460410cb34e7","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.14.2","_npmVersion":"5.5.1","_nodeVersion":"8.9.2","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-dee3PlQ9daMbRiEh6l/qzP/ZZqS8j97bMJG7pNtAZ3bWvK4mWKvpkzvA9G0wn/zF37eGP12OTZdQrfNhnJBMig==","shasum":"e61e73759eeb208d3716ccd1da060b127350519d","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.14.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBHAmgsgmlYDORcLvMksZif1YUkiKETvKnho+cje+3kJAiAu+HAykQUNdHysUJfSwZAdFCenXrq47badudrz29OQOg=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.14.2.tgz_1513181751493_0.9112740692216903"},"directories":{}},"2.14.3":{"name":"react-form","version":"2.14.3","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"5e5162597fc2be42e3ab5373335ad9a57cd22b84","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.14.3","_npmVersion":"5.5.1","_nodeVersion":"8.9.2","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-tmB7tLXEp8xKuXpyBqjye+y+v8EqhJk1lLNznnlbH3pixgbdd4GyyXQFf4maZP4Eotg2edRmvvtMp7FFzvLL8Q==","shasum":"7f1736c4e40049fb5b41b881e7d2927fa71a0079","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.14.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfEk8hT86MEqon6AVEjdnC2/q4bcCHRJuLTz+wb+sYCQIgct674jtsMlK5f3u3vO7sSOqKmYPcjbSQno2bBiVYK9s="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.14.3.tgz_1513195832489_0.05689418292604387"},"directories":{}},"2.14.4":{"name":"react-form","version":"2.14.4","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"70c28f6c5f0d999c0fd69593cc47d6f0f36dfcd9","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.14.4","_npmVersion":"5.5.1","_nodeVersion":"7.0.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-KhsHNwo+TVJIEe6F5wszXhgQ4GGybNdgE5yWHzrC8ixmR5rM+CASjs6da+SnYn61Os9/vw8ksYzv3Anpd8m0Eg==","shasum":"5076c5fa3e83c2f13533dd97d4f481db5ebb0925","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.14.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDh0NKGeJnOqRwmdyDqFB/PLEe9DC2nI/6DvwrnnPQbIgIhAKwF4zNYbXGV62h0tymo3AcvPzjGP4MdvwkShXF4CP0b"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.14.4.tgz_1513340422836_0.20732499356381595"},"directories":{}},"2.15.0":{"name":"react-form","version":"2.15.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"67a2cccf100510c9b66b72d4e8f6fec233b03f42","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.15.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.2","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-qghIoP/g5PDVq32iONWA2QZ6cv/CmphFpLwd3uHqEHR3pZ+Za7ctmjE3BaR4jSmiNJWoNs8/VCPv2Ef+gdB/7Q==","shasum":"6fe0feb477a33cc3aefe487d3415df9511e2a1bf","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.15.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLZdOJd8GO1pnZn5vI1uv31KiBP0rnmsVqlcZPmr8+4wIhAOYBp4NNg7ZmwRrJ19MlSlxmJVUdAbnYsvDHu1EKpdFY"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.15.0.tgz_1513782573275_0.7412307148333639"},"directories":{}},"2.15.1":{"name":"react-form","version":"2.15.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"ffa2e458875c13558cc6620ec1c1746eb2b5d2b1","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.15.1","_npmVersion":"5.6.0","_nodeVersion":"8.9.2","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-ytwm5/EGv2KJX3JDCgzpfglOzOfVmW3oiPCu2TN4eFAgTOfRQaTNA+C+u4V8lBXLFkwqKp1ElBGmnKcUoqN8cQ==","shasum":"c9a9a4e3e1c2a0b501034e6e8feaff2a8d096ca0","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.15.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAFvAhAAr/Rxb4dJaG8GZzTMzUsyj3LnD5VmKOPc5e7UAiEAsYV6uufgrabSX59lNRDYJY509ShuRHBuVWaDc34mmgo="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.15.1.tgz_1515381108557_0.41109428997151554"},"directories":{}},"2.15.2":{"name":"react-form","version":"2.15.2","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"01db53d8baa34af06b19a79ce5cb92de2e054043","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.15.2","_npmVersion":"5.6.0","_nodeVersion":"8.9.2","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-zTwv2MwDHg7huH3sZzsEDyJCQhv5SrUTWQGregvikgCRAGl3s4EDjCswefOixhXhcvk0KNdN0qHULhkjjS9vxw==","shasum":"1dd8f9cffd2e2e68ecd179b011eb838dcd2536a6","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.15.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDadj6cWluHvakDHAtd2SSDO5/s2cB8zo2kjJS49Tuf3AiEAgj9cGB2hcyCYxmV/6cKsM5NVSMvAXk1hMcJeMLMJrO0="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.15.2.tgz_1515381783244_0.36023605917580426"},"directories":{}},"2.16.0":{"name":"react-form","version":"2.16.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"b353e8f80d188ce4cdea47fffe0c6d9f89bc1579","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.16.0","_npmVersion":"5.6.0","_nodeVersion":"8.9.2","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-Y2MAqOTplvmw34THQmXhfzus6IMW5w/7xr7t3RQ0Zfb7YCOfT/hP8YeRDU8QWhyGatSunpc3e/CA3rgfWN8i0A==","shasum":"db7c4d1145a0daa0056010c12bbc5a2f0d749f5f","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.16.0.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDUxuhiLtaBBP8kK3846Q747zk6MBqkEp/mV6EOrklbXwIhAIPvMESvo1x/+wNA9NH8q5zAqN6pRprTJh1SRrHUbM/j"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.16.0.tgz_1515775570715_0.6036067071836442"},"directories":{}},"2.16.1":{"name":"react-form","version":"2.16.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"fb3c99cabf8a7f126ac562fb53aaec3b32ef5567","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.16.1","_npmVersion":"5.6.0","_nodeVersion":"8.9.2","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-9Sg/XbYKrX9x+HyaUZydp27RPORSj7Gsk9BpfMIX7XqhG6ihvU6//aWQGC11JGoPFei5E82lCbm6kmU+ObWoCw==","shasum":"c125d1c8903c7aa6ccff91ac2c87aa19a079e164","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.16.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCY12Nj0cScBjyCKbthe/TZcX4SejeWvtlGv9vixqtgjQIgKxuA3aQt0cQwOUE5cdrEbkQZ5f0YJf6BT+HJsJy09cY="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.16.1.tgz_1515775718105_0.533583611715585"},"directories":{}},"2.16.2":{"name":"react-form","version":"2.16.2","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prettier-eslint-cli":"^4.7.0","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"5eb192c4cff1ef1fc9e6e7dbe87dbbe76bcb969f","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.16.2","_npmVersion":"5.6.0","_nodeVersion":"8.9.2","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-HhuBcgBX+I8BDWYrrbZv1iBMcHliS+dUXu1U6s9/NwmkYhNJ2R2D/eA86l0NByLGcaWiDM9rTvT6Pu6ooA1FEg==","shasum":"0fe08e11cff392403885f73b5e4f57cd6f2fb668","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.16.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTgxI+m1wMjiUjLiYtdwwYMt1wVDtViElVK/VQ3005jwIhANh7tqUoNOJuQjZRi9gUIMFzjumo8kcGHr+95LsCWJbx"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form-2.16.2.tgz_1517943477626_0.06230267835780978"},"directories":{}},"3.0.0-beta.0":{"name":"react-form","version":"3.0.0-beta.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"https://github.com/react-tools/react-form"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.2","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","sinon":"^4.1.6"},"licenseText":"MIT License\n\nCopyright (c) 2016 Tanner Linsley\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"react-form@3.0.0-beta.0","dist":{"shasum":"d721a20dedaeddac319e0c00d1b2c67f3bed0315","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.0.0-beta.0.tgz","fileCount":63,"unpackedSize":268847,"integrity":"sha512-3tahtLRo+yAHorHZ0rFM9suLAVnf8HcGecDv0F2hLlArsgqwiu3GmWOwsdGbDBt4FeYf1wyiTPQ0p87GHQmVSA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDW5fi80sUNNz5S3Qm3Uhxrm1brVqqFDewlQdtmeAWR9QIhAJEI+FSxdxHF4KHUKaUjGz4RZCjlyhXzvUr8BFTCxsxa"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.0.0-beta.0_1518210073635_0.39739368968634436"},"_hasShrinkwrap":false},"3.0.0-beta.1":{"name":"react-form","version":"3.0.0-beta.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"https://github.com/react-tools/react-form"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prettier-eslint-cli":"^4.7.0","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"licenseText":"MIT License\n\nCopyright (c) 2016 Tanner Linsley\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"react-form@3.0.0-beta.1","dist":{"shasum":"69aad12dc7230411415867c9125786fc4bc2b554","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.0.0-beta.1.tgz","fileCount":5,"unpackedSize":6331,"integrity":"sha512-Qv0/8D4l2C5Xj0Wm8EjSavKbgN8anPRmLkKGMWOEEl5Miy04jMP+iwSfDPjnRcxuQZoXrJyJXM+KnS7yEOnMSQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCicN5IXQH2Lj6eOtqJe9DxN7hiHUGqf6r+ANWreky8XAIhAIKH57aBhS5ynKgCx2QPlrq8r9ASJ/549E99hdd9BfSL"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.0.0-beta.1_1518218763022_0.8603611033256782"},"_hasShrinkwrap":false},"3.0.0-beta.2":{"name":"react-form","version":"3.0.0-beta.2","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"https://github.com/react-tools/react-form"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.2","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","sinon":"^4.1.6"},"readmeFilename":"README.md","readme":"# React-Form\nSimple, powerful, highly composable forms in React\n\n### Go to [live examples, code and docs](https://react-form.js.org)!\n\n[![Build Status](https://travis-ci.org/react-tools/react-form.svg?branch=master)](https://travis-ci.org/react-tools/react-form)\n[![npm version](https://img.shields.io/npm/v/react-form.svg)](https://www.npmjs.com/package/react-form)\n[![npm downloads](https://img.shields.io/npm/dm/react-form.svg)](https://www.npmjs.com/package/react-form)\n[![license](https://img.shields.io/github/license/mashape/apistatus.svg?maxAge=2592000)](https://github.com/react-tools/react-form/blob/master/LICENSE)\n[![React-Tools-Chat](https://img.shields.io/badge/slack-react--chat-blue.svg)](https://react-chat-signup.herokuapp.com/)\n\n# Features\n- 🚀 Lightweight and fast.\n- 🔥 Built-in input primitives for building quickly.\n- ⚖️ Scales from tiny to massively complex forms with ease.\n- 🚚 Easily integrate with 3rd party components or build your own!\n- ✍️ Nested Fields and ultra-composable syntax for complex form shapes.\n- ⏲ Asynchronous validation\n- 🎛 Simple API that supports manipulating values, errors, warnings, and successes\n- 👉 Render Props!\n- 😂 Works in IE (with a polyfill or two)\n\n## Questions? Ideas? Chat with us!\nSign up for the [React-Tools Slack Org](https://react-chat-signup.herokuapp.com/)!\n\n### Installation\n`npm install --save react-form`\n\n### Basic Usage\n```javascript\nimport { Form, Text, Radio, TextArea, Checkbox } from 'react-form';\n\nconst ExampleForm = () => (\n  <Form render={({\n    submitForm\n  }) => (\n    <form onSubmit={submitForm}>\n      <Text field=\"firstName\" placeholder='First Name' />\n      <Text field=\"lastName\" placeholder='Last Name' />\n      <div>\n        <label>\n          Male <Radio field='gender' value=\"male\" />\n        </label>\n        <label>\n          Female <Radio field='gender' value=\"female\" />\n        </label>\n      </div>\n      <TextArea field=\"bio\" />\n      <Checkbox field=\"agreesToTerms\" />\n      <button type=\"submit\">Submit</button>\n    </form>\n  )} />\n)\n```\n\n### Array and Data-driven fields\n```javascript\nimport { Form, Text } from 'react-form';\n\nconst ExampleForm = () => (\n  <Form render={({\n    submitForm,\n    values,\n    addValue,\n    removeValue\n  }) => (\n    <form onSubmit={submitForm}>\n      <Text field=\"firstName\" placeholder='First Name' />\n      <Text field=\"lastName\" placeholder='Last Name' />\n      <div>\n        Friends\n        {values.friends && values.friends.map((friend, i) => (\n          // Loop over the friend values and create fields for each friend\n          <div>\n            <Text field={['friends', i, 'firstName']} placeholder='First Name' />\n            <Text field={['friends', i, 'lastName']} placeholder='Last Name' />\n\n            // Use the form api to add or remove values to the friends array\n            <button onClick={() => removeValue('friends', i)>\n              Remove Friend\n            </div>\n          </div>\n        ))}\n        // Use the form api to add or remove values to the friends array\n        <button onClick={() => addValue('friends', {})>\n          Add Friend\n        </button>\n      </div>\n      <button type=\"submit\">Submit</button>\n    </form>\n  )} />\n)\n```\n\n### Advanced Field reuse, and Nested Fields\n```javascript\nimport { Form, FormApi, NestedField, Text } from 'react-form';\n\n// Reuse The user fields for the user and their friends!\nconst UserFields = () => (\n  <div>\n    <Text field=\"firstName\" placeholder='First Name' />\n    <Text field=\"lastName\" placeholder='Last Name' />\n  </div>\n)\n\nconst ExampleForm = () => (\n  <Form render={({\n    submitForm,\n    values,\n    addValue,\n    removeValue\n  }) => (\n    <form onSubmit={submitForm}>\n      <UserFields />\n      <NestedField field='friends' render={() => ( // Create a new nested field context\n        <div>\n          Friends\n          {values.friends.map((friend, i) => (\n            <div>\n              <NestedField field={['friends', i]} render={() => (\n                <UserFields /> // Now the user fields will map to each friend!\n              )} />\n              <button onClick={() => removeValue('friends', i)>\n                Remove Friend\n              </div>\n            </div>\n          ))}\n          <button onClick={() => addValue('friends', {})>\n            Add Friend\n          </button>\n        </div>\n      )}/>\n      <button type=\"submit\">Submit</button>\n    </form>\n  )} />\n)\n```\n\n### Examples & Documentation\n[Visit react-form.js.org](https://react-form.js.org) for examples and documentation for **2.x.x** of React-Form.\n\nOlder versions:\n* [Version 1.x.x](https://github.com/react-tools/react-form/tree/v1.3.0)\n","licenseText":"MIT License\n\nCopyright (c) 2016 Tanner Linsley\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"react-form@3.0.0-beta.2","dist":{"shasum":"91307b0ff137b7dc8ad98b3b5b07ac8473e59281","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.0.0-beta.2.tgz","fileCount":63,"unpackedSize":268767,"integrity":"sha512-2YN/zebk1BwlnI84DEv0RSL9VZP7mxFg+jp+i/2mfqN6e9f2VIRi9fkRaH/gX+F5dZAZHflWkHcyer8o37xyzA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC0FzMgDc8/pAw8HZFB9B6FU1UoKapn+Y0Z1WXNzv2CgAiEArD8QFzxT71lqkjtQei3GJKDPdUWGaZZiiDhwSDbJfXo="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.0.0-beta.2_1518218913778_0.8788215248140097"},"_hasShrinkwrap":false},"2.16.3":{"name":"react-form","version":"2.16.3","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"dist/index.js","files":["dist/"],"scripts":{"test":"cross-env NODE_ENV=test mocha-webpack --opts test/mocha-webpack.opts","test:watch":"npm run test -- --watch","start":"cross-env NODE_ENV=development webpack-dev-server -d --config config/webpack/webpack.dev.config.js --port 4005 --hot","build:dev":"cross-env NODE_ENV=development webpack --config config/webpack/webpack.dev.config.js","build:dist":"cross-env NODE_ENV=production webpack -p --config config/webpack/webpack.dist.config.js","build:docs":"cross-env NODE_ENV=production webpack -p --config config/webpack/webpack.prod.config.js","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","preversion":"npm test","version":"npm run build:dist","postpublish":"git push --tags"},"author":{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"babel-runtime":"^6.26.0","circular-json":"^0.4.0","classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-logger":"^3.0.6","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-core":"^6.26.0","babel-eslint":"^7.2.3","babel-loader":"^7.1.1","babel-plugin-transform-class-properties":"^6.24.1","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.0","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","enzyme":"^2.9.1","eslint":"^4.5.0","eslint-config-airbnb":"^15.1.0","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","file-loader":"^1.1.5","jsdom":"^9.9.1","mocha":"^3.5.0","mocha-webpack":"^0.7.0","node-sass":"^4.5.3","prettier-eslint-cli":"^4.7.0","prismjs":"^1.6.0","raw-loader":"^0.5.1","react":"^15.6.1","react-addons-test-utils":"^15.6.2","react-dom":"^15.6.1","react-hot-loader":"^3.0.0-beta.7","react-prism":"^4.3.0","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","react-test-renderer":"^15.6.2","sass-loader":"^6.0.6","sinon":"^3.2.1","style-loader":"^0.18.2","uglify-js":"^3.1.10","url-loader":"^0.5.9","webpack":"^3.5.5","webpack-dev-server":"^2.7.1","webpack-node-externals":"^1.6.0"},"gitHead":"6fb37c9d966e9f965d5a170ab44de35097f3815a","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@2.16.3","_npmVersion":"5.6.0","_nodeVersion":"8.9.2","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-Pp0XFvEUkIWUImEsyi8DQ7j3Ls6h8J7BCXPwIzBOv5ZgOynLFwJX+/gYqQRNtSZbjPP4+3FVA4zW3Qktq7H+lw==","shasum":"c45a575483696ea3f99cf271984fcabcf470f1b2","tarball":"https://registry.npmjs.org/react-form/-/react-form-2.16.3.tgz","fileCount":5,"unpackedSize":55979,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID+A53ykt2jqD0KFBGQixavO4ZvJHMqGEBU+Bh6A87l6AiEA7uA/RHj+Yi4MMy5AZw/3z0hKSC8/epWS4gcfFDWyj/s="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_2.16.3_1518805641909_0.4400172896086636"},"_hasShrinkwrap":false},"3.0.0-beta.3":{"name":"react-form","version":"3.0.0-beta.3","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.2","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"readme":"# React-Form\nSimple, powerful, highly composable forms in React\n\n### Go to [live examples, code and docs](https://react-form.js.org)!\n\n[![Build Status](https://travis-ci.org/react-tools/react-form.svg?branch=master)](https://travis-ci.org/react-tools/react-form)\n[![npm version](https://img.shields.io/npm/v/react-form.svg)](https://www.npmjs.com/package/react-form)\n[![npm downloads](https://img.shields.io/npm/dm/react-form.svg)](https://www.npmjs.com/package/react-form)\n[![license](https://img.shields.io/github/license/mashape/apistatus.svg?maxAge=2592000)](https://github.com/react-tools/react-form/blob/master/LICENSE)\n[![React-Tools-Chat](https://img.shields.io/badge/slack-react--chat-blue.svg)](https://react-chat-signup.herokuapp.com/)\n\n# Features\n- 🚀 Lightweight and fast.\n- 🔥 Built-in input primitives for building quickly.\n- ⚖️ Scales from tiny to massively complex forms with ease.\n- 🚚 Easily integrate with 3rd party components or build your own!\n- ✍️ Nested Fields and ultra-composable syntax for complex form shapes.\n- ⏲ Asynchronous validation\n- 🎛 Simple API that supports manipulating values, errors, warnings, and successes\n- 👉 Render Props!\n- 😂 Works in IE (with a polyfill or two)\n\n## Questions? Ideas? Chat with us!\nSign up for the [React-Tools Slack Org](https://react-chat-signup.herokuapp.com/)!\n\n### Installation\n`npm install --save react-form`\n\n### Basic Usage\n```javascript\nimport { Form, Text, Radio, TextArea, Checkbox } from 'react-form';\n\nconst ExampleForm = () => (\n  <Form render={({\n    submitForm\n  }) => (\n    <form onSubmit={submitForm}>\n      <Text field=\"firstName\" placeholder='First Name' />\n      <Text field=\"lastName\" placeholder='Last Name' />\n      <div>\n        <label>\n          Male <Radio field='gender' value=\"male\" />\n        </label>\n        <label>\n          Female <Radio field='gender' value=\"female\" />\n        </label>\n      </div>\n      <TextArea field=\"bio\" />\n      <Checkbox field=\"agreesToTerms\" />\n      <button type=\"submit\">Submit</button>\n    </form>\n  )} />\n)\n```\n\n### Array and Data-driven fields\n```javascript\nimport { Form, Text } from 'react-form';\n\nconst ExampleForm = () => (\n  <Form render={({\n    submitForm,\n    values,\n    addValue,\n    removeValue\n  }) => (\n    <form onSubmit={submitForm}>\n      <Text field=\"firstName\" placeholder='First Name' />\n      <Text field=\"lastName\" placeholder='Last Name' />\n      <div>\n        Friends\n        {values.friends && values.friends.map((friend, i) => (\n          // Loop over the friend values and create fields for each friend\n          <div>\n            <Text field={['friends', i, 'firstName']} placeholder='First Name' />\n            <Text field={['friends', i, 'lastName']} placeholder='Last Name' />\n\n            // Use the form api to add or remove values to the friends array\n            <button onClick={() => removeValue('friends', i)>\n              Remove Friend\n            </div>\n          </div>\n        ))}\n        // Use the form api to add or remove values to the friends array\n        <button onClick={() => addValue('friends', {})>\n          Add Friend\n        </button>\n      </div>\n      <button type=\"submit\">Submit</button>\n    </form>\n  )} />\n)\n```\n\n### Advanced Field reuse, and Nested Fields\n```javascript\nimport { Form, FormApi, NestedField, Text } from 'react-form';\n\n// Reuse The user fields for the user and their friends!\nconst UserFields = () => (\n  <div>\n    <Text field=\"firstName\" placeholder='First Name' />\n    <Text field=\"lastName\" placeholder='Last Name' />\n  </div>\n)\n\nconst ExampleForm = () => (\n  <Form render={({\n    submitForm,\n    values,\n    addValue,\n    removeValue\n  }) => (\n    <form onSubmit={submitForm}>\n      <UserFields />\n      <NestedField field='friends' render={() => ( // Create a new nested field context\n        <div>\n          Friends\n          {values.friends.map((friend, i) => (\n            <div>\n              <NestedField field={['friends', i]} render={() => (\n                <UserFields /> // Now the user fields will map to each friend!\n              )} />\n              <button onClick={() => removeValue('friends', i)>\n                Remove Friend\n              </div>\n            </div>\n          ))}\n          <button onClick={() => addValue('friends', {})>\n            Add Friend\n          </button>\n        </div>\n      )}/>\n      <button type=\"submit\">Submit</button>\n    </form>\n  )} />\n)\n```\n\n### Examples & Documentation\n[Visit react-form.js.org](https://react-form.js.org) for examples and documentation for **2.x.x** of React-Form.\n\nOlder versions:\n* [Version 1.x.x](https://github.com/react-tools/react-form/tree/v1.3.0)\n","readmeFilename":"README.md","gitHead":"79a657bb6e12e3dfbe548b7538d1eefbc0c681ea","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.0.0-beta.3","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-U5D0JzTHRoQWbQUTXuKqfAX8jmhsFAyNo1T87jUJbsGY4bfg7vDRDqdnEu9sSbe5ttqK0scLhUxlVD6DL3bgEQ==","shasum":"ac5eef2bbd288d25a3a3103914538f0ec8362737","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.0.0-beta.3.tgz","fileCount":40,"unpackedSize":216608,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKqj+ChbE6qF52PEnKC4PkqD/f9p53mJDs4P02x4yFlwIgOlI1IA3OoWWvgwWt1DPqCIRwV4PRMeBSin2cYdsft08="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.0.0-beta.3_1519314645744_0.9780955678694301"},"_hasShrinkwrap":false},"3.0.0-beta.4":{"name":"react-form","version":"3.0.0-beta.4","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.2","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"74d455cb01a16324cfc8ce7426a05f5039ba23f5","readme":"# React-Form\nSimple, powerful, highly composable forms in React\n\n### Go to [live examples, code and docs](https://react-form.js.org)!\n\n[![Build Status](https://travis-ci.org/react-tools/react-form.svg?branch=master)](https://travis-ci.org/react-tools/react-form)\n[![npm version](https://img.shields.io/npm/v/react-form.svg)](https://www.npmjs.com/package/react-form)\n[![npm downloads](https://img.shields.io/npm/dm/react-form.svg)](https://www.npmjs.com/package/react-form)\n[![license](https://img.shields.io/github/license/mashape/apistatus.svg?maxAge=2592000)](https://github.com/react-tools/react-form/blob/master/LICENSE)\n[![React-Tools-Chat](https://img.shields.io/badge/slack-react--chat-blue.svg)](https://react-chat-signup.herokuapp.com/)\n\n# Features\n- 🚀 Lightweight and fast.\n- 🔥 Built-in input primitives for building quickly.\n- ⚖️ Scales from tiny to massively complex forms with ease.\n- 🚚 Easily integrate with 3rd party components or build your own!\n- ✍️ Nested Fields and ultra-composable syntax for complex form shapes.\n- ⏲ Asynchronous validation\n- 🎛 Simple API that supports manipulating values, errors, warnings, and successes\n- 👉 Render Props!\n- 😂 Works in IE (with a polyfill or two)\n\n## Questions? Ideas? Chat with us!\nSign up for the [React-Tools Slack Org](https://react-chat-signup.herokuapp.com/)!\n\n### Installation\n`npm install --save react-form`\n\n### Basic Usage\n```javascript\nimport { Form, Text, Radio, TextArea, Checkbox } from 'react-form';\n\nconst ExampleForm = () => (\n  <Form render={({\n    submitForm\n  }) => (\n    <form onSubmit={submitForm}>\n      <Text field=\"firstName\" placeholder='First Name' />\n      <Text field=\"lastName\" placeholder='Last Name' />\n      <div>\n        <label>\n          Male <Radio field='gender' value=\"male\" />\n        </label>\n        <label>\n          Female <Radio field='gender' value=\"female\" />\n        </label>\n      </div>\n      <TextArea field=\"bio\" />\n      <Checkbox field=\"agreesToTerms\" />\n      <button type=\"submit\">Submit</button>\n    </form>\n  )} />\n)\n```\n\n### Array and Data-driven fields\n```javascript\nimport { Form, Text } from 'react-form';\n\nconst ExampleForm = () => (\n  <Form render={({\n    submitForm,\n    values,\n    addValue,\n    removeValue\n  }) => (\n    <form onSubmit={submitForm}>\n      <Text field=\"firstName\" placeholder='First Name' />\n      <Text field=\"lastName\" placeholder='Last Name' />\n      <div>\n        Friends\n        {values.friends && values.friends.map((friend, i) => (\n          // Loop over the friend values and create fields for each friend\n          <div>\n            <Text field={['friends', i, 'firstName']} placeholder='First Name' />\n            <Text field={['friends', i, 'lastName']} placeholder='Last Name' />\n\n            // Use the form api to add or remove values to the friends array\n            <button onClick={() => removeValue('friends', i)>\n              Remove Friend\n            </div>\n          </div>\n        ))}\n        // Use the form api to add or remove values to the friends array\n        <button onClick={() => addValue('friends', {})>\n          Add Friend\n        </button>\n      </div>\n      <button type=\"submit\">Submit</button>\n    </form>\n  )} />\n)\n```\n\n### Advanced Field reuse, and Nested Fields\n```javascript\nimport { Form, FormApi, NestedField, Text } from 'react-form';\n\n// Reuse The user fields for the user and their friends!\nconst UserFields = () => (\n  <div>\n    <Text field=\"firstName\" placeholder='First Name' />\n    <Text field=\"lastName\" placeholder='Last Name' />\n  </div>\n)\n\nconst ExampleForm = () => (\n  <Form render={({\n    submitForm,\n    values,\n    addValue,\n    removeValue\n  }) => (\n    <form onSubmit={submitForm}>\n      <UserFields />\n      <NestedField field='friends' render={() => ( // Create a new nested field context\n        <div>\n          Friends\n          {values.friends.map((friend, i) => (\n            <div>\n              <NestedField field={['friends', i]} render={() => (\n                <UserFields /> // Now the user fields will map to each friend!\n              )} />\n              <button onClick={() => removeValue('friends', i)>\n                Remove Friend\n              </div>\n            </div>\n          ))}\n          <button onClick={() => addValue('friends', {})>\n            Add Friend\n          </button>\n        </div>\n      )}/>\n      <button type=\"submit\">Submit</button>\n    </form>\n  )} />\n)\n```\n\n### Examples & Documentation\n[Visit react-form.js.org](https://react-form.js.org) for examples and documentation for **2.x.x** of React-Form.\n\nOlder versions:\n* [Version 1.x.x](https://github.com/react-tools/react-form/tree/v1.3.0)\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.0.0-beta.4","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-98R1ic1O3lLqPnjVmYYyBEOvihGLHQa7o8gGl19G/jXRvPLpg9LfICEA0KxWSsKm7+u5B2jnCPN+/jzxmLYPNA==","shasum":"b69b8464a46c7833ac39721a157e7d713c834939","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.0.0-beta.4.tgz","fileCount":40,"unpackedSize":216919,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEuB44oJqd1/9oZUid1+KDDrISnwcBBFGLjglhLDMDc4AiEA5PJKAjRm3ouAcvtUbr48Tdi+uwjRVvupMq0QUZ3Qka4="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.0.0-beta.4_1519331992679_0.1954420409643136"},"_hasShrinkwrap":false},"3.0.0-beta.5":{"name":"react-form","version":"3.0.0-beta.5","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.2","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"readme":"# React-Form\nSimple, powerful, highly composable forms in React\n\n### Go to [live examples, code and docs](https://react-form.js.org)!\n\n[![Build Status](https://travis-ci.org/react-tools/react-form.svg?branch=master)](https://travis-ci.org/react-tools/react-form)\n[![npm version](https://img.shields.io/npm/v/react-form.svg)](https://www.npmjs.com/package/react-form)\n[![npm downloads](https://img.shields.io/npm/dm/react-form.svg)](https://www.npmjs.com/package/react-form)\n[![license](https://img.shields.io/github/license/mashape/apistatus.svg?maxAge=2592000)](https://github.com/react-tools/react-form/blob/master/LICENSE)\n[![React-Tools-Chat](https://img.shields.io/badge/slack-react--chat-blue.svg)](https://react-chat-signup.herokuapp.com/)\n\n# Features\n- 🚀 Lightweight and fast.\n- 🔥 Built-in input primitives for building quickly.\n- ⚖️ Scales from tiny to massively complex forms with ease.\n- 🚚 Easily integrate with 3rd party components or build your own!\n- ✍️ Nested Fields and ultra-composable syntax for complex form shapes.\n- ⏲ Asynchronous validation\n- 🎛 Simple API that supports manipulating values, errors, warnings, and successes\n- 👉 Render Props!\n- 😂 Works in IE (with a polyfill or two)\n\n## Questions? Ideas? Chat with us!\nSign up for the [React-Tools Slack Org](https://react-chat-signup.herokuapp.com/)!\n\n### Installation\n`npm install --save react-form`\n\n### Basic Usage\n```javascript\nimport { Form, Text, Radio, TextArea, Checkbox } from 'react-form';\n\nconst ExampleForm = () => (\n  <Form render={({\n    submitForm\n  }) => (\n    <form onSubmit={submitForm}>\n      <Text field=\"firstName\" placeholder='First Name' />\n      <Text field=\"lastName\" placeholder='Last Name' />\n      <div>\n        <label>\n          Male <Radio field='gender' value=\"male\" />\n        </label>\n        <label>\n          Female <Radio field='gender' value=\"female\" />\n        </label>\n      </div>\n      <TextArea field=\"bio\" />\n      <Checkbox field=\"agreesToTerms\" />\n      <button type=\"submit\">Submit</button>\n    </form>\n  )} />\n)\n```\n\n### Array and Data-driven fields\n```javascript\n\nimport { Form, Text } from \"react-form\";\n\nconst ExampleForm = () => (\n  <Form\n    render={({ submitForm, values, addValue, removeValue }) => (\n      <form onSubmit={submitForm}>\n        <Text field=\"firstName\" placeholder=\"First Name\" />\n        <Text field=\"lastName\" placeholder=\"Last Name\" />\n        <div>\n          Friends\n          {values.friends &&\n            values.friends.map((friend, i) => (\n              // Loop over the friend values and create fields for each friend\n              <div>\n                <Text\n                  field={[\"friends\", i, \"firstName\"]}\n                  placeholder=\"First Name\"\n                />\n                <Text\n                  field={[\"friends\", i, \"lastName\"]}\n                  placeholder=\"Last Name\"\n                />\n                // Use the form api to add or remove values to the friends array\n                <button type=\"button\" onClick={() => removeValue(\"friends\", i)}>\n                  Remove Friend\n                </button>\n              </div>\n            ))}\n          // Use the form api to add or remove values to the friends array\n          <button type=\"button\" onClick={() => addValue(\"friends\", {})}>Add Friend</button>\n        </div>\n        <button type=\"submit\">Submit</button>\n      </form>\n    )}\n  />\n);\n```\n\n### Advanced Field reuse, and Nested Fields\n```javascript\nimport { Form, FormApi, NestedField, Text } from \"react-form\"\n\n// Reuse The user fields for the user and their friends!\nconst UserFields = () => (\n  <div>\n    <Text field=\"firstName\" placeholder=\"First Name\" />\n    <Text field=\"lastName\" placeholder=\"Last Name\" />\n  </div>\n)\n\nconst ExampleForm = () => (\n  <Form\n    onSubmit={values => console.log(values)}\n    render={({ submitForm, values, addValue, removeValue }) => (\n      <form onSubmit={submitForm}>\n        <UserFields />\n        <NestedField\n          field=\"friends\"\n          render={() => (\n            // Create a new nested field context\n            <div>\n              Friends\n              {values.friends &&\n                values.friends.map((friend, i) => (\n                  <div key={i}>\n                    <NestedField\n                      field={i}\n                      render={() => (\n                        <UserFields /> // Now the user fields will map to each friend!\n                      )}\n                    />\n                    <button type=\"button\" onClick={() => removeValue(\"friends\", i)}>\n                      Remove Friend\n                    </button>\n                  </div>\n                ))}\n              <button type=\"button\" onClick={() => addValue(\"friends\", {})}>\n                Add Friend\n              </button>\n            </div>\n          )}\n        />\n        <button type=\"submit\">Submit</button>\n      </form>\n    )}\n  />\n)\n```\n\n### Examples & Documentation\n[Visit react-form.js.org](https://react-form.js.org) for examples and documentation for **2.x.x** of React-Form.\n\nOlder versions:\n* [Version 1.x.x](https://github.com/react-tools/react-form/tree/v1.3.0)\n","readmeFilename":"README.md","gitHead":"aafbab06cd82d3f5bdc87cb6f3b2a6aaa7345c42","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.0.0-beta.5","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-IsnUwIB/CW7zf7bMUyKcRz6wm41W4YhbuCQhJAwrJBJRaqf0dJcM3dbseXHZFbZ7QGyKaKpQ/P8/orwcXYLB+g==","shasum":"26053069c5c691251ba89f7960f00a1607c20512","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.0.0-beta.5.tgz","fileCount":40,"unpackedSize":217448,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD2cIcrAR+j25JgP7hkJcGSEFTK4DyMBrcUXRae/dA6pwIgGpqZuYwS4u7myN3RbE3M9c4/HoSl1V2l6whIaGUPBsU="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.0.0-beta.5_1519335896367_0.06257171203304246"},"_hasShrinkwrap":false},"3.0.0":{"name":"react-form","version":"3.0.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"2b7441da405d838679aa7393decea9479e44bf04","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.0.0","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-UAELNqg2svPkes8+lfZcfspZ2gB/ZPTG+n9iEGSVanZLiV4/SpxQcXORG9RQhZh9E3W6vfqB7DBx94U4ZCcpfg==","shasum":"475ae6915f2d40c6d82908576f5ce756a82e6f3e","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.0.0.tgz","fileCount":40,"unpackedSize":217569,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBJbnoO8s/UIdEZqxT0+sXLnNu6jInVzy5d1SZ11oCdAAiEAg0oCrEPDXCy+4poaoiUns06h2+M0vTwTVjoUZXKrmqE="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.0.0_1519347526185_0.9916082742712766"},"_hasShrinkwrap":false},"3.0.1":{"name":"react-form","version":"3.0.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"7be14327b9ba5a64e41645b3fa94a7b2c9a865a1","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.0.1","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-OahiEJKPL7JkDVA8UpxeR6PiTkFILY0nk5gdk8BxY7hzYea7+tip6ZR1GgcFAIXtf833M1J0NHI/18V72UFH/w==","shasum":"9045bf53dec97190f358d7a679188504926db270","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.0.1.tgz","fileCount":40,"unpackedSize":217637,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEGyWpu6G6soIMZXaTsYZ9DO6y4OKIDlTcw9fG1uoWcwAiB/pp9NmjtAaZPuwZMEs954LbQWxe4NgwQ67PTEWOp6cw=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.0.1_1519423937560_0.2510223936301752"},"_hasShrinkwrap":false},"3.0.2":{"name":"react-form","version":"3.0.2","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"e9dd5a8908ee14532ca0ede169eb6501c350a090","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.0.2","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-YmLL1fs7j04Z/mHIh9j7OUyfO4jbpSMtXCJMoDqbN954QMjQ8sY8HKbWjgf/PArxyh5UYlwpeSyhVFzvJB/dyg==","shasum":"a8b433472565ee85562cd44518406ef1dc79eb89","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.0.2.tgz","fileCount":40,"unpackedSize":217491,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGZ+FF2prHEh0Wmo+TLRrGFvCOyZgba0Y+DNf7D/+wwgIgUo6oSaomaXXoCfUIgCZ7CGJWRw6pzLeNN+GyYSW5Cdg="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.0.2_1519672822126_0.5973288309438927"},"_hasShrinkwrap":false},"3.0.3":{"name":"react-form","version":"3.0.3","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"e32a91ced13f3af84ecbb2a5acbe6b103b5d155e","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.0.3","_npmVersion":"5.6.0","_nodeVersion":"7.0.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-fer3HEj9AfOfX7WDtDgl67r7SxRsAUZOUNcV5qkzPWjdd1Ib86+8A4CMvWcI7QUdiO+XWiorgP8Ae+efZPRL8w==","shasum":"9d8b79da6cf19c8c93178bca245524f2ba2be9c8","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.0.3.tgz","fileCount":40,"unpackedSize":217589,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAGkRg9XDn0scPf5tGtQUZ08+FCYXmcTUwV1qycboi/2AiB9gUKJJ3niKf8wuoDDhUALpY733c4gKzlEmPhqTEvj/A=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.0.3_1519735547675_0.45056856701963777"},"_hasShrinkwrap":false},"3.0.4":{"name":"react-form","version":"3.0.4","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"b660deac97c649d7129d7f30bc6edc739bca3b0b","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.0.4","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-7hVm4zOzVg1LCpxVTHhXvUBYJwObGyljLgjtG67g0CX8WSccD+lXrJQfxUy42o+tdf1DmD24oV2IN1ktVEHkXQ==","shasum":"cb303e72c8f88952aa94ee35bb6a977041b409cd","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.0.4.tgz","fileCount":40,"unpackedSize":217599,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwcpemR7NvmkmgCYvxrgPJdldsoZL0cuXHbPTL5IjE2AIgAuou20roiMr05Ct7W3qR4L7hJAapVpu+MsWfMrd2V68="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.0.4_1519758807184_0.41584852135851214"},"_hasShrinkwrap":false},"3.1.0":{"name":"react-form","version":"3.1.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"0f96e798748eb78f7f8f2204cd099daf9d158abc","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.1.0","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-2fTuXVPN2VVfLVJBKrnwxvPXAaIwWDs2haC+0zVifBhDF33BEEbackoz1PPYapAa1bZfA8vaTaUfpNCbwzkqgQ==","shasum":"cf282a0c6b96135492c4b27fa9776a7d8fd5df89","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.1.0.tgz","fileCount":40,"unpackedSize":217769,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCoV6GopuE46fvWWW5w3SNOWvsvQJ+LR0GzAxeUTOdEQIgXDGuboQ+wJb84egCq1kugJ802FStrQUMMwHlnIIXRVI="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.1.0_1519848917066_0.3534508343593574"},"_hasShrinkwrap":false},"3.2.0":{"name":"react-form","version":"3.2.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"47f03b1b555a1e1f959c81aa191b6a1dcdf69b7f","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.2.0","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-ZZ0axC/YrSFBzDBVzYm7VUvWmMzHeHFfA5CBLh/oKBuFGc/JjXf1RNC1ak6Bj9kmpqy6XIA7Wf9hd65YXDL4mA==","shasum":"7cd6edf4dc202e24125a30aeb51cdd405c3ab37e","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.2.0.tgz","fileCount":40,"unpackedSize":220549,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEWB50bz7HMRxWm1Pk4NUTzBfnmT+XL2PMobiT25jLZ/AiEA8pu9/ybx0VqplcYJ/dSkvCx+nUAl2t2nGV3HTo5vsn8="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.2.0_1519850645772_0.6639586477903772"},"_hasShrinkwrap":false},"3.2.1":{"name":"react-form","version":"3.2.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"https://github.com/react-tools/react-form"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"licenseText":"MIT License\n\nCopyright (c) 2016 Tanner Linsley\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"react-form@3.2.1","dist":{"shasum":"d7991b40509a4d95e223207a250942f9ba6275be","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.2.1.tgz","fileCount":51,"unpackedSize":220941,"integrity":"sha512-lEH1xSoaXhNZV3pr5r5QltNpEuTn5wic6Pbhx8b1o7FQVSgbSLlBGhifa2WDeveXTxzeF2CqVOydskj89sUPeg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGPdN7S1plKRRJujjeZFt/YZuCqwwQ2VLVA/S7EQXSgPAiAKHWYQmgCn8Z9KOzVbOGg5xfz9qXbH6iujnPlDB71Egg=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.2.1_1519854568877_0.5784340000557011"},"_hasShrinkwrap":false},"3.2.2":{"name":"react-form","version":"3.2.2","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"e9f5acd795fa60b4f39c7ae0a43756edde262839","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.2.2","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-xUhYN93MPUWVkIRkvEcDSfxKHKU2yibzNz4N3H9OtFfbc5ULd8bqxOsi17BjCeWv2l7tZgB+gKrlNGINobE5BQ==","shasum":"183950087405ea71ae8f52e3036509f566c19399","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.2.2.tgz","fileCount":42,"unpackedSize":228066,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDz8jiEhufpOO3mmtwMweobsfHHbQ3GmivILAiN8xo97QIgdFi5tMNT867nqGZpyfV+exKZ0kDQDMgM6jxHSSUaJr4="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.2.2_1519963027597_0.09592410571745247"},"_hasShrinkwrap":false},"3.2.3":{"name":"react-form","version":"3.2.3","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"c6b3b31edcde5cfcaf04d3462c9d6243052d994b","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.2.3","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-17pnn/LD2fWMSLtjydd4Vs2ZMtHLFDFfHo5FN1RghFY8dnAj1Rrv6iKxjAz/0mVa4CqYsRLSZzpbHqgDqxakhg==","shasum":"1a4aa77661f4493e86d9425041b31ae637aaa9f3","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.2.3.tgz","fileCount":42,"unpackedSize":228076,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+22/FO10rBGiGSEbyzCsIGr/aPPBUBgfEyzx4AuS6CQIgHoV9jm4okzuTW7td0HSPpEvFTt6Agm8EM1IrZ5c3YoY="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.2.3_1520002372755_0.7025057730277897"},"_hasShrinkwrap":false},"3.3.0":{"name":"react-form","version":"3.3.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"afcb56bb94f2d0830f1defedb3c4922b36ca0d1e","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.3.0","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-zjDSH/k9ahG/5sMo+nY4grQ6ZtvLTstH6oJJEnnsxb8xC41IMtK0GzBMr8UJWKkXECktWDwrbjwIIPEXegk95g==","shasum":"4a297b1d1fbee2b58eb6a417916e34f7a2152e94","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.3.0.tgz","fileCount":48,"unpackedSize":245265,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQgdR/bJzsYpNG4KvxDF1iX0LHRaZbEnB90EDcXv79FAIhAPRSOi+7GZLhrU1xDScYvyZ/WvpCqtoPTIcBESWPv0AT"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.3.0_1520016487039_0.3882493537647136"},"_hasShrinkwrap":false},"3.3.1":{"name":"react-form","version":"3.3.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"01aed1de939e5a10ca98942ba1ae03b83d2048e2","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.3.1","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-dWaoNzfpVLZ3nIWLc4eE6XOodh4hNs9R6OWK7v4r/FCSofZmaEcUhc4tUXfhxzMD6uwyrrOcsDn+pbuOXnitiw==","shasum":"eedb85599500a3b421a63d2e4351bd0bea303aa9","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.3.1.tgz","fileCount":48,"unpackedSize":245205,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD9N2+1hncLqBQLp5KcquyJRCH1c731d5ysVpmXst4MhAIgajoGclKphanTYoN1GOOcEv/ZB4LBxMeUOgxHIxgx3Sg="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.3.1_1520543527434_0.9659502458115785"},"_hasShrinkwrap":false},"3.3.2":{"name":"react-form","version":"3.3.2","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"d7b62b7aff053da06471813b3de15d33d5329a95","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.3.2","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-6UaERcEh7nSKRR5CsStxQH7gI9NSORfy5z5Yo0RA8Y37x0jHi4+LWOmETCUH/GMXBU+610+KF2g2VytQvYgNcg==","shasum":"2eeed62393fb44f45b6e9c11b0cc7d175792089e","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.3.2.tgz","fileCount":48,"unpackedSize":245205,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIubKZTyuAtlXFWGO0mM4bIAobv00hmRkJzZ1ZEqqO9wIhAOOPL7oFOvs65+rTKq6QIAFkkuz2luBl44KDyTmHBC1l"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.3.2_1520544218162_0.5844516435400846"},"_hasShrinkwrap":false},"3.4.0":{"name":"react-form","version":"3.4.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"fc2e3b829e49a4e4337ea49f70d11c52b04abf0f","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.4.0","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-ZvOKZ2C0K9k0vg9ZSLTC8bhNtddEhODWGUnVscNbFs8Q5TTF0Luda7+uWG4bvkYTzVbB3LTfZUwRp7MJua/S/w==","shasum":"627f702420e0dfa0448b327acd01100bda66eb40","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.4.0.tgz","fileCount":48,"unpackedSize":245255,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQgb62wCrhRZPFuCiJWh4gDMlXkin6R5bMytcZFoY+egIgYsTYhtYi+coqYoiYSYjTXzTuxgfVHhx3ecOntbLx1nk="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.4.0_1521125625143_0.19965070911761296"},"_hasShrinkwrap":false},"3.4.1":{"name":"react-form","version":"3.4.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"09bd2a7000c0ac0427b6fbe42cdc0a9a5e0c8a11","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.4.1","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-OggtUOvzJmttmzYJrutFgvl34zms+fK1Mazop8vKBgjJmC6T3JmjIaAP0aCCPc3cTFRUWIP4sSKzINnmE+6ykw==","shasum":"514fe35ab7cdba5282ee97c29ed13cb01a4a1ae6","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.4.1.tgz","fileCount":48,"unpackedSize":245299,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrpWImQPGV7W05sZ4r7Or9jf0x6bHBJozKG6n8v8IwHQIhAPr//sjhutgTqQ58b6t4JoODTcAfQd0DHzQwegB0K4f8"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.4.1_1521590758802_0.4023486999738437"},"_hasShrinkwrap":false},"3.4.2":{"name":"react-form","version":"3.4.2","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"85fa14c8a11e84bfec5ae5d13e1044df83a40373","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.4.2","_npmVersion":"5.6.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-jR4OjiD9grYSBq2stLwKkYSrySnphVOIle0DWMKK5v6bbXtkvlQ+sZGTgh2+m6GfLSuaEFC7t+cwm6A8AhKkYw==","shasum":"5752e431f987086fb77bbc0ee57df550645af136","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.4.2.tgz","fileCount":48,"unpackedSize":247279,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBXu2bti9fLm+MInTMRmzhaiaeoivXRzR1CQC10FoUHQAiEAo/Epq3v/u+CEfuiEFsJ3d/U9KCO1b05z3uo2jzAOLfA="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.4.2_1521733610441_0.04108198551885889"},"_hasShrinkwrap":false},"3.4.3":{"name":"react-form","version":"3.4.3","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"c120007a1bfc4f78458cfbc52f2a5f6820fae4a6","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.4.3","_npmVersion":"5.6.0","_nodeVersion":"7.0.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-7rd/V7SVLgT0HKGpdUEg2AnCeYDiLfMff3C3gFdCjeDXUxveBBytmq6akXGh4DxT+NkxBH2CTuppp/B4Dwydhg==","shasum":"4c9b04078d6d419f081851b3c0bf7a5db24d6870","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.4.3.tgz","fileCount":48,"unpackedSize":245228,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDQMBtIO9k4qKJjvMLnqiIVhGlVhT006moMJbbwjtzOAIhAJ4rY2TNrFPs6lphsTmgiOJbOeVeuCSicHgr+dFmglo6"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.4.3_1522148933650_0.18114933491853513"},"_hasShrinkwrap":false},"3.4.4":{"name":"react-form","version":"3.4.4","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","docs":"gitdocs serve"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","chai":"^4.1.1","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","bootstrap":"^4.0.0-alpha.6","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.3.2","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","sinon":"^4.1.6"},"gitHead":"dc77c7c22cc92715c962c475ee70b273593097b5","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.4.4","_npmVersion":"5.8.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-j6RHiUDh4uP6U3xLMH8V31/cLKq16GSeEllVMIHaQ9C/4fsljcexp6Z196ChpJMsl8S6/xNd5Ix9xLMqwrx4Rw==","shasum":"70de9fde89eab4b7a929df723d2d69b17124c752","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.4.4.tgz","fileCount":48,"unpackedSize":247208,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGoJ+eUtqFepNu6N9deSXsepfTiLiaqsKOH/25hzwkxnAiEA03v9+pCIJJPkxxy2JUgOl9uEogZoq5gceTq+bgxCKX0="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.4.4_1522236956666_0.8167288991647537"},"_hasShrinkwrap":false},"3.5.0":{"name":"react-form","version":"3.5.0","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","startDocs":"gitdocs serve","buildDocs":"gitdocs build","serveDocs":"serve docs-dist -p 3000"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.5.17","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","serve":"^6.5.2","sinon":"^4.1.6"},"gitHead":"5bfbb8888fdb0894a922cf7cecfc2a92c2587332","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.5.0","_npmVersion":"5.8.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-rrj34h/AkgBccNkszGOCeSraTCzLv60ZXluGhHMCh9kmbs816tDQkA0KsByYEZ8WKsGtCSX/h97czM2pHDpvTg==","shasum":"234e263a57836dec0dadee95014d788d2b7bcf99","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.5.0.tgz","fileCount":48,"unpackedSize":258555,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/vdNS5JH2JcCkwCdh3BbGA7TOelfC+xZLyqn01GtnnwIgWZLFmcZdWHbjlmhj5mHR0IBW5Cf7c0PR6+N1fsBs4Sg="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.5.0_1522903228663_0.3945227514383929"},"_hasShrinkwrap":false},"3.5.1":{"name":"react-form","version":"3.5.1","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","startDocs":"gitdocs serve","buildDocs":"gitdocs build","serveDocs":"serve docs-dist -p 3000"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.5.17","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","serve":"^6.5.2","sinon":"^4.1.6"},"gitHead":"4e8f806ca1548835d18b485dbef35dc066b790b2","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.5.1","_npmVersion":"5.8.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-gJzTqbSQavjWCmbDsGC86U2GMhiuSzyPdsK1Gsk9oXH5RelJIub83TptijfuHdi84BsRn+reNYJh70InzKRo/g==","shasum":"c7eae8b28e9fcb6086e08ad425cad33356a5efed","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.5.1.tgz","fileCount":48,"unpackedSize":258225,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwX3GtlaZKCw5kEWDPEamXd8o0A4TsgNafrIDPHEA8CgIgMmv1MrAqisr9ifeDK+uqIdVO89+1VyJnFvJzTt5JE24="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.5.1_1522973569093_0.9878894084432892"},"_hasShrinkwrap":false},"3.5.2":{"name":"react-form","version":"3.5.2","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","startDocs":"gitdocs serve","buildDocs":"gitdocs build","serveDocs":"serve docs-dist -p 3000"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.5.17","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","serve":"^6.5.2","sinon":"^4.1.6"},"gitHead":"a45deec5f1a7dfff680f02011d69c06fd6da10e7","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.5.2","_npmVersion":"5.8.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-aG1GXs6Ovkipw5iro9uBfWTQmWyqYP6UhdBBqxAUL2Z01umSud/H38ESslniyKkp8PB7xjptlQ4GHqSBnkRodQ==","shasum":"4ae3529d67445405c187ffb842fb7d80c99fea06","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.5.2.tgz","fileCount":48,"unpackedSize":258927,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDoCQGTxPT3hP9U2Eh4ftcLmfq34DwBbqiRL+8mBt1OEQIhALOqTbKxskFvyUu/XB7PvzO0t3x+iTjn9en2dB81h4R9"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.5.2_1523375591424_0.331171808119604"},"_hasShrinkwrap":false},"3.5.3":{"name":"react-form","version":"3.5.3","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","startDocs":"gitdocs serve","buildDocs":"gitdocs build","serveDocs":"serve docs-dist -p 3000"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.5.17","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","serve":"^6.5.2","sinon":"^4.1.6"},"gitHead":"77e9ab566bca7244c66f63bd1bae0365b80743da","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.5.3","_npmVersion":"5.8.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-Rt3HuOidByuuNAS01CUQsdzyrnVSIv1wpjSbWams4wR9PZSsCTFJahmiIfxwrb9YUtc3m1P6AVY5yAhXNwWzqQ==","shasum":"5b82499d4edab6ee637ae7ef2d7386071e78002e","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.5.3.tgz","fileCount":48,"unpackedSize":258901,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa1qXzCRA9TVsSAnZWagAAZD0P/RWZCK+lfwEAJkeqGXjf\nqHRboj6hdE+X8WI5B+YonqRMOdNebvz6m1fn5/h49VrYQrOaBCg9HIIsEUy3\naDfcXxPEHmxPTHO7sGOUQnxnyht4i9I8VNAiqMuDtk83xTYBXxALhfQ7dg0D\nBATOoEx5QYGvySu0f9fiDgcTYE9N1Bb9FGmdtZQvpGBHlEi4rkQOBU0oLKIX\nJ7A8Bju9GPR+q4zRz0XmwZdiuZZct8rmO4FZtvSs/KkOx2ZO29sAzc27kLn2\n035p+/q3dRlAkZderx9/rIOyYK+y4OdX2nvCDG5C2J5LXhlqiqMzGERgVJQ9\nw71BLvNOIf1CgrS1u/eF/NdrSfSSc2NViJ8Np4E0g4WPa2FYhhIWDyxzCSL8\noQhHOZcisOEk7ugpT6tQMtkkWn1EN96PYI7NUIYrocBAd51Y3xfcN0SJOn2Z\n41vqQvRWP29LGQ3BAO7YTXsCxVKSTRgjzyHcP3oe3HJI25pEJVom5pvrd6q1\n5CaMtVLAjV16e+Z81//CBdTpWhGhgD6lXB4MFaa/aRy1bmrPO+s7bAmWUTYL\nyIKuZvLdBx77mGmI4AxawlQkQE9w61wsVhHrtWK04ahqTdflJ39ns86o3WrL\nHQlKa+GxTJGPY0FF8oBmygisHQZ0nVe0U0/nwClTngMeBKXqNJwbXLwEnHfM\nWeNl\r\n=ueFz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDAGsYbiu8nuB43AplDfvAgW4MXio/0GYxsWi27szc/MAIgTGVsXqUpP4oHLRADn6qGW0MtKgVjJrLJEB1PoG8E2yI="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.5.3_1524016626877_0.0022150369054798613"},"_hasShrinkwrap":false},"3.5.4":{"name":"react-form","version":"3.5.4","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","startDocs":"gitdocs serve","buildDocs":"gitdocs build","serveDocs":"serve docs-dist -p 3000"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.5.17","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","serve":"^6.5.2","sinon":"^4.1.6"},"gitHead":"4bcdf6f7b0036487f24e9ff048c70792e4fe3a03","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.5.4","_npmVersion":"5.8.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-wTjulstj9VR6OmvMjMi/tdq3j0yWyUvyHcjv0N532HLv9YWduC9aZLU884eNCF4NquqJQ/Nf6sY0/K6I7Eo0hA==","shasum":"b6d93704f0bd5810e8768028fc8f5146f8d8d296","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.5.4.tgz","fileCount":48,"unpackedSize":260543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6cxnCRA9TVsSAnZWagAAlboP/2j3BFBAP+Ugqvsk64RQ\n3eTVOqwNvIQTRfaCu0NKFvCFPYYMCnemBjBeWxdD9gMAPnnb7/shwT5loIqe\nqFHNf2P8sgp/2WxL/lhvGVvNKnFGoN/qpPbVDfOV3LHR0dJl/BY5C6bGMZLc\nK6KMG6udq40qEWEvuxgVTt2fPz49OnefgAUVqLb8+TfGUFtnWunp3zaqYPjy\nAX3uD54/mph4eIDdbaZA3qAVFjsjbVPIp3+Qvlyhm6IinRY4nfCzUvLfCoYU\nZsFZENsg9FBPsDLKCfxifN/QsjjQ7GSe4vTVCWRlGGtfKHe3NYU8nlkeKK8U\nXiLho322J5I/040A36bPtD0wFsH5pRLzIYNyxlqBCUx5xAWn8+mJnepttlr3\nVJC0CnD6jIkI7H6QXkFbWpjnRLCQp+ugglhge3Js1s2CJ0OKWAKqIyVyT+LX\n5D5vZgUdgM1UKPzoeqgXC5B3leBqv7buYDlv4j2eU/e/ZKJb57nxhFoHQTPs\ngqrSM/7ZT/QrNsPXt0YgWQNPKbGhT71fZosjaMzUUBZhdSyyo5gOB5RhqyfL\n+I0f1nELUiiNVSNn08OW/f63FehoLkKG8UUVmJqhnya9ZMK2nO7Hsz0J4OnY\nol6/C9Yqr7kNr/EgSEej/WwiuSA0nUGZvvpsMDl/v7JXTffllmaol7GQp76V\nFcYi\r\n=cQ4+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHPLd5eCHY3c8ZK4jIkqrTa05GxVOHSTIY5y7BaUIRzfAiAWDM3K3VMBNJHpoIwur2JklmFaQ+d0ng0LLDeJsGQs5A=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.5.4_1525271654373_0.1901350958417103"},"_hasShrinkwrap":false},"3.5.5":{"name":"react-form","version":"3.5.5","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","startDocs":"gitdocs serve","buildDocs":"gitdocs build","serveDocs":"serve docs-dist -p 3000"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.5.17","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","serve":"^6.5.2","sinon":"^4.1.6"},"gitHead":"82a600c8e1c8168700e160d961513a7f7a651825","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.5.5","_npmVersion":"5.8.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-UMY3zF4mXqMV+wBryqFCuTWpzH6tMKtbHP7Dj0DiR3axH6M7/Boo87Xa+InA4BEUG4DCOebEuKD5Wkw28In9Pg==","shasum":"fea29ed2012a503169040f50a5470342badf238e","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.5.5.tgz","fileCount":48,"unpackedSize":260661,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6c92CRA9TVsSAnZWagAA5VgP/2OwHTjBvj5+gr8V3FIp\nXeuLG7T4dI5qR3jzQasmQomzGzcnOuP+SykQHDaBigYwThxFviutevKWpgK8\nx7mgk2zllIFY4Mlk/3so5SS9PC/9iAyncc6qeoJOxlZ8gTQ8aHv262HXoWFZ\n+Km9DZ+WtVFlW6u2TTs3WtONMAY43UV4zp3MoNK2LhpKLU7MdoRNNv5QuCr6\n64F1oeY44NlO0wvdgrkKiOQazMXG3S0A+KkYrUUcbahh2zgF9JG/G2yP1tFH\n2sRWXUwMye4ytZyRMlSfeXvEph8/6YQeA8C78DC4ZM7eVBcRbGOmOwM1U4Lx\ntkXcLcDyS8bkYn2ehFQvJNeubNfUZUqowbgHTJBKai99EOOYZHfZ2fMB6Hwc\n1+EI7XQR2RTsNZa75C1+1cceDGw30tDFLb1n97R8zCR1PThnxW4s0nhpsKQf\nwB/BCfBa5weIkQ7xpTBSh67tokegyr7YadeWPqeBMNF0zqsFsrJNP5FnAm11\nPbR5E4z7cDlQbmgMsb6EPLzKQWfSEQNYAER2+jwKQ2VRmQ7a5Y2Wz2zgHmr9\nS5P6W/cFlYT8aFXOyHl/TEat1XQ4S9GqvAKQ5z9m4x9PfBcETR5mh3f5YhX+\nQJsK79Cs4xGnca+P9WCBhslN/I9ypUn1k8yZK6dNpsCFdbGOaTUHlZ2WfsoC\nuN4I\r\n=yPaz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDD0pdqOf4JPN9fm+HrCXtNTRy24z/ZPXcAgfzi1rICqQIhANvfQpH+6L3KBpiurVppJJLWJfSh44GQtTFO8WSK3W5d"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.5.5_1525272435549_0.7733298729956515"},"_hasShrinkwrap":false},"3.5.6":{"name":"react-form","version":"3.5.6","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","files":["css","es","lib","umd"],"scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","startDocs":"gitdocs serve","buildDocs":"gitdocs build","serveDocs":"serve docs-dist -p 3000"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.5.17","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","serve":"^6.5.2","sinon":"^4.1.6"},"gitHead":"e56692607743550ae410b16b53cef47a3812ded1","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.5.6","_npmVersion":"5.8.0","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-eR6hR1tp50ZXX1i4u4kum1XdImSSct1eReLd3AoCBDsziqRCtZrvNlm3jWTD4K6o0Shw9yGadFH/vhQxWD857w==","shasum":"24d21509eed02fce1b799047e679647f4c085fcd","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.5.6.tgz","fileCount":48,"unpackedSize":262177,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbMPteCRA9TVsSAnZWagAAk+0P/j8SpBCJ7ijJXcK0UqL/\nMq4Cz6nHsvTBmgd94Z1Y+hD73guNkFjJbb5P0uqEauB6AfaE6xJZkYsXIEfN\nP/f1NWKplHPFS9lxl63S1SQDndOrdgfhlr51Foi3sJ9u/ARiCTMLXt3hkSys\nn32xMLIeuZYZsco3yCqLWXM/Uc2mEwcmvxDwqcmENSfhy/6TNxGWVyeowJwl\n5Rf7GEFiy3K2ymhE6UPeP56hLrEf3mmvQvyui89cdsXfNRSzJaV9LL2F/qfG\n4c6cyIXc+lFpnCjWjfHzPTPUIv4kyiOGAgiA3pG1lRdkRuq2evAfJ3NBVBGu\nA4U7//WVelDgVcAvt7ByRK8TV9FmqaMGnoJ8kwKBnx7vfdrccRTdUr6zqxsS\nivpG5UbJJ0kRVoNrLUQ8PVvGwel6hy44FxPt6/VEwGJuMNkjcRKto/e7d896\njNAK6R5ySBvShEzdMytWbnpOBF/2Gx6pqzTj1ZnAOcqqyGYFYDKiJqsjvu7f\ny/2/7jqTw18tR5Tt7o0ebYqyAMlV4gLQtxQvvfhR6bzUEbpca3F+gqE/LAyf\n9L3Tj9cerG84qY2XIg9dmvnFCtLbuuvzo9yPdAszFDdUGOPhD5nBmqAmXkkr\nKAMt3PP2Vx5XUSHg6CzZ6O+Eg2ycuKlHFkD/5sV7UP+zsN4OETEovqPaTqaI\nXMnK\r\n=T5+6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrt1VL4i33cMNaZIzavvCm+UVpcmInleNpGu2D6cThhQIgLniMRFQttDR/mfhPheqkpti6WK/D1uGfT6vG2SxH+Ag="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.5.6_1529936734856_0.5970138598378518"},"_hasShrinkwrap":false},"3.5.7":{"name":"react-form","version":"3.5.7","description":"React Form is a lightweight framework and utility for building powerful forms in React applications.","main":"lib/index.js","module":"es/index.js","scripts":{"build":"nwb build-react-component --title React Form","clean":"nwb clean-module && nwb clean-demo","start":"nwb serve-react-demo","test":"mocha-webpack --opts tests/mocha-webpack.opts","test:watch":"npm run test -- --watch","prepublishOnly":"yarn build","postPublish":"git push --tags","eslint":"eslint src/** --fix","format":"prettier-eslint src/**/*.js","startDocs":"gitdocs serve","buildDocs":"gitdocs build","serveDocs":"serve docs-dist -p 3000"},"authors":[{"name":"Joseph Puzzo","email":"jgpuzzo2@gmail.com","url":"http://joepuzzo.github.io"},{"name":"Tanner Linsley","email":"tannerlinsley@gmail.com","url":"http://github.com/tannerlinsley"}],"keywords":["react","reactjs","redux","react-redux","redux-form","form","react-form","async","async-form","asynchronous-form","asynchronous"],"repository":{"type":"git","url":"git+https://github.com/react-tools/react-form.git"},"license":"MIT","dependencies":{"classnames":"^2.2.5","prop-types":"^15.5.10","react-redux":"^5.0.6","redux":"^3.7.2","redux-thunk":"^2.2.0"},"peerDependencies":{"react":"^15.6.1 || 16","react-dom":"^15.6.1 || 16"},"devDependencies":{"babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.6.1","babel-preset-react":"^6.24.1","babel-preset-stage-0":"^6.24.1","babel-runtime":"^6.26.0","bootstrap":"^4.0.0-alpha.6","chai":"^4.1.1","copy-webpack-plugin":"^4.0.1","cross-env":"^5.1.3","css-loader":"^0.28.5","enzyme":"^3.3.0","enzyme-adapter-react-16":"^1.1.1","eslint":"^4.5.0","eslint-config-react-tools":"^1.0.10","eslint-plugin-import":"^2.7.0","eslint-plugin-jsx-a11y":"^6.0.2","eslint-plugin-react":"^7.3.0","gitdocs":"^1.5.17","jsdom":"^11.6.0","mocha":"^5.0.0","mocha-webpack":"^1.0.1","nwb":"^0.21.2","nwb-sass":"^0.8.2","prettier-eslint-cli":"^4.7.0","react":"^16.2.0","react-addons":"^0.9.1-deprecated","react-addons-test-utils":"^15.6.2","react-dom":"^16.2.0","react-prism":"^4.3.2","react-router-dom":"^4.2.2","react-router-hash-link":"^1.1.1","redux-mock-store":"^1.5.1","serve":"^6.5.2","sinon":"^4.1.6"},"gitHead":"6d1e2dba3d6070dd7b5955d79a4164edb21e2a42","bugs":{"url":"https://github.com/react-tools/react-form/issues"},"homepage":"https://github.com/react-tools/react-form#readme","_id":"react-form@3.5.7","_npmVersion":"6.4.1","_nodeVersion":"9.5.0","_npmUser":{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},"dist":{"integrity":"sha512-DSbJUJArtxZZPkySc4nTkz1evgaJ0bTlG3kMDeLe1b1P1B3NvwM1N8lsuB3SJNqptZmPYDXL8ub4YhRYS6sk6A==","shasum":"69d475d1376007346d87a2ff52a6c6c29ac8929a","tarball":"https://registry.npmjs.org/react-form/-/react-form-3.5.7.tgz","fileCount":48,"unpackedSize":256134,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXGZoCRA9TVsSAnZWagAAlhMP/2lcxG1rhnh4Wc962nGl\n/kmttwg1gqVzNvE3P0DjewpCs6WAKNoGBanFHLjoiHNjQoZuzO0uVgJ8uzHA\n/IVgY2KPaNbfTfY2DOCtNP3G51pxtSu4CxWnaiiye5qfgGA8cXtWuJUw2g9L\nzaEtmdoYdEmvj6iDO/0BxXSZk9S2onggpEAEH2UVDKT6tEtutbmVCQkpwGoD\nPqFhzL3BMUirf72i6tZQ2S0d46Cjlw5HPCk7sOoQP8hVUEkH+KjUnPJ1XcwY\nYiJHhFc0H4psELojTl+tJ6XQWX0x7U6av4Y3mJW+2EsMM7D8DqPkHi8NhIQi\n/nDeRBeinHqvppfV7pjNEnRfGY23762emGm8Sm+weIVaKQdoKQhKKtqAtZUp\nfL7ztOab0LK39DbKoNKBYHPqEIcEcBHuGxBq/fX58WnXI9axqARRYoXETKWj\n6izroyrS8DJdliMTZ7XF/9G94bFGdchGpDXqY3bRiCBBF951UQhivFUVvmWj\nArYanEupejZsYgs1M0682Eo4UU/1TdWav8ftUBIvIn3zj0bWa3m4QTowoV8r\nneGR+gt09bq16hd5SjS8ZQICCzAqdZ6MlZid1v55UooKbEtInWiMkgRLQ+8S\nICaoAf4S6xu8v4/KV7/RO/WheqjZ+PGyW7TSQt4cvTEhlcTY58oKkPjdETjD\nkoWy\r\n=ESRF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHVQt2QyN/Jvj7imnuHLR8e763hJmy+LLRFzEze5zGQ4AiBLaDG+GI87pzOI3oUZCIKiLdYx/fQUITvYKS8u2Z2KzQ=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_3.5.7_1549559400071_0.9736458774726355"},"_hasShrinkwrap":false},"4.0.0-alpha.0":{"name":"react-form","version":"4.0.0-alpha.0","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{"immer":"^3.1.3"},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^4.3.0","eslint-config-react-app":"^4.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"readmeFilename":"README.md","readme":"# React Form\n\n<a href=\"https://travis-ci.org/react-charts/react-charts\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://travis-ci.org/react-charts/react-charts.svg?branch=master\" />\n</a>\n<a href=\"https://npmjs.com/package/react-charts\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/npm/dm/react-charts.svg\" />\n</a>\n<a href=\"https://react-chat-signup.herokuapp.com/\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/badge/slack-react--chat-blue.svg\" />\n</a>\n<a href=\"https://github.com/react-charts/react-charts\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/github/stars/react-charts/react-charts.svg?style=social&label=Star\" />\n</a>\n<a href=\"https://twitter.com/tannerlinsley\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/twitter/follow/tannerlinsley.svg?style=social&label=Follow\" />\n</a>\n\n⚛️ 💼 React hooks for managing form state and lifecycle\n\n<!--\n## Features\n- Put some features here\n-->\n\n## Intro\n\nReact Form is currently in **alpha**! This means:\n\n- The existing API is not stable. Expect major changes/additions **as minor and patch releases** while use-cases evolve.\n- It is not recommended for **mission critical** production code.\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Quick Example](#quick-example)\n\n## Installation\n\n```bash\n$ yarn add react-form\n# or\n$ npm i react-form --save\n```\n\n## Quick Start\n\nThis will render a very basic form:\n\n```javascript\nimport React from 'react'\nimport { useForm, useField, splitFormProps } from 'react-form'\n\n// Build an input field\nconst InputField = React.forwardRef(function TextField(\n  { field, ...rest },\n  ref\n) {\n  // Use the useField hook with form props to access form state\n  const {\n    field: { setValue, value, setTouched, error, touched }\n  } = useField(field)\n\n  // Build your form input\n  return (\n    <>\n      <input\n        ref={ref}\n        // Use setValue to update form values\n        onChange={e => setValue(e.target.value)}\n        // Use setTouched to update form touch state\n        onBlur={() => setTouched(true)}\n        value={value || ''}\n        {...rest}\n      />\n      {\n        // Use touched and error state to show errors\n        touched && error ? <em>{error}</em> : null\n      }\n    </>\n  )\n})\n\nfunction MyForm() {\n  // Pass default values (be sure to memoize any options used)\n  const defaultValues = React.useMemo(\n    () => ({\n      foo: 'hello',\n      bar: {\n        baz: 'world'\n      }\n    }),\n    []\n  )\n\n  // Use the useForm hook to create a form instance\n  const { Form } = useForm({\n    // Pass the default values\n    defualtValues,\n    // Use a validate function\n    validate: values => ({\n      foo: !values.foo && 'Foo is required',\n      bar: {\n        baz: !values.bar.baz && 'Baz is required'\n      }\n    })\n    // Handle form submission\n    onSubmit: values => {\n      console.log('These are the values:', values)\n    }\n  })\n\n  return (\n    // Use the built-in Form component provided by the hook\n    // (or optionally construct your own with the `handleSubmit` function)\n    <Form>\n      <InputField field=\"foo\" />\n      <InputField field=\"bar\" />\n      <button type=\"submit\">Submit</button>\n    </Form>\n  )\n}\n```\n\n## Documentation\n\nComplete documentation is **coming soon**.\n\nAny sparse documentation available in this Readme is being progressively improved as the API evolves.\n\n## API\n\nReact Charts exposes these top-level exports:\n\n- `useForm` - The primary hook for creating a form.\n","_id":"react-form@4.0.0-alpha.0","dist":{"shasum":"63a365b2ea4e0aa4dc0c08e98be96e69b1318b7b","integrity":"sha512-K3E1wSWVrqBxa8KoszU+KYAFHITMTbFNBg1GrpMxGYlAjcRM3PROy4+jlyxDtnG08NOrRn4my0PYk+6pRW+dRg==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.0.tgz","fileCount":9,"unpackedSize":1043580,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdEP1UCRA9TVsSAnZWagAAiNQQAJAqy+qGXlNvbNCSmT+u\nVCvYFR5jVWTZVFZvuoBdPH6z8AJo31XDkIRlg1W2WnCmBqMpfffheT1s7y8B\n6moEjUQd0G6qGlK09QHiAC8NsU08138hT9PVpJn4t2ObZkaByY7G15XZqUIL\nBIfDIVLAvmvBaQnREIPFZm5GHyYEmlydlLAu5WTR4a58/H9fV+jSIDh3wUmY\nEaq00M7qtFjeczvCmAVZUuQWBgb77CtC2JnjxWJmA0WuRjbBA4f3Nxz3mK53\ndm0aFQ1YAbfiMCBBFvj/4X2iS0H1KpM0Ksgzq7BkJBMl5EL34bVmmDBY8ubc\n8Zm9cyklXcYFLXv88o/c9LsGRdT0vxoJi2NCoBCzrAJxoOwu3HgqmtH6q3JC\nmj4kVTvGgnxVtLJMBUipx0XPqr1LT+3zFiazn0J6kLZtxUH2lgN75rrVMTDr\nCIA3kO3HAOCAsRWtOcnDV2Ua84pUllqrTecU75eW1lkyuasL+Bdeu5Yg398e\nscbySDxUplckaBLPMhp9V/Wx1gPfe1cvbgs4CqKhYaX0LC9MiTLraZvf41X4\nNuD7Jr4SUR6fmBqqEBJX3vnoDWMeM7YnCyfjpBlrrSIwPwytvgQdTSUUH6Y0\nvnWRDxJ8YywcEQHonLRC2jz89rq3MQKVpUFg8Ano5YUFbWN+/ozFfVRRjajO\n+VZB\r\n=i4zs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC2M2iEWIZyKK+BFWUPsTubvseSERmfd2npca0WVCv+6AiB67pWZCwPJnIZAyXA5Com5D1kYiKjcuZqVpsGc6M2D4Q=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.0_1561394515331_0.39387671550589887"},"_hasShrinkwrap":false},"4.0.0-alpha.1":{"name":"react-form","version":"4.0.0-alpha.1","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^4.3.0","eslint-config-react-app":"^4.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"readmeFilename":"README.md","readme":"# ⚛️ 💼 React Form\n\nReact hooks for managing form state and lifecycle\n\n<a href=\"https://travis-ci.org/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://travis-ci.org/tannerlinsley/react-form.svg?branch=master\" />\n</a>\n<a href=\"https://npmjs.com/package/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/npm/dm/react-form.svg\" />\n</a>\n<a href=\"https://spectrum.chat/react-form\">\n  <img alt=\"Join the community on Spectrum\" src=\"https://withspectrum.github.io/badge/badge.svg\" />\n</a>\n<a href=\"https://github.com/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/github/stars/tannerlinsley/react-form.svg?style=social&label=Star\" />\n</a>\n<a href=\"https://twitter.com/tannerlinsley\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/twitter/follow/tannerlinsley.svg?style=social&label=Follow\" />\n</a>\n\n<!--\n## Features\n- Put some features here\n-->\n\n## Intro\n\nReact Form is currently in **alpha**! This means:\n\n- The existing API is not stable. Expect major changes/additions **as minor and patch releases** while use-cases evolve.\n- It is not recommended for **mission critical** production code.\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Quick Example](#quick-example)\n\n## Installation\n\n```bash\n$ yarn add react-form\n# or\n$ npm i react-form --save\n```\n\n## Quick Start\n\nThis will render a very basic form:\n\n```js\nimport React from 'react'\nimport { useForm, useField } from 'react-form'\n\n// Build an input field\nconst InputField = React.forwardRef((\n  { field, validate, ...rest },\n  ref\n) => {\n  // Use the useField hook with form props to access form state\n  const {\n    field: { value, meta: { error, isTouched }, setValue, setMeta }\n  } = useField(field, {\n    validate,\n  })\n\n  // Build your form input\n  return (\n    <>\n      <input\n        ref={ref}\n        // Use setValue to update form values\n        onChange={e => setValue(e.target.value)}\n        // Use setMeta to update form touch state\n        onBlur={() => setMeta({isTouched: true})}\n        value={value}\n        {...rest}\n      />\n      {\n        // Use isTouched and error state to show errors\n        isTouched && error ? <em>{error}</em> : null\n      }\n    </>\n  )\n})\n\nfunction MyForm() {\n  // Pass default values (be sure to memoize any options used)\n  const defaultValues = React.useMemo(\n    () => ({\n      foo: 'hello',\n      bar: {\n        baz: 'world'\n      }\n    }),\n    []\n  )\n\n  // Use the useForm hook to create a form instance\n  const { Form } = useForm({\n    // Pass the default values\n    defaultValues,\n    // Handle form submission\n    onSubmit: values => {\n      console.log('These are the values:', values)\n    }\n  })\n\n  return (\n    // Use the built-in Form component provided by the hook\n    // (or optionally construct your own with the `handleSubmit` function)\n    <Form>\n      <InputField field=\"foo\" />\n      <InputField field=\"bar.baz\" validate={value => !value ? 'Baz is required!' : false} />\n      <button type=\"submit\">Submit</button>\n    </Form>\n  )\n}\n```\n\n## Documentation\n\nComplete documentation is **coming soon**.\n\nAny sparse documentation available in this Readme is being progressively improved as the API evolves.\n\n## API\n\nReact Form exposes these top-level exports:\n\n- `useForm` - The primary hook for creating a form.\n- `useField` - A hook for utilizing form state and lifecycle on the field level.\n","_id":"react-form@4.0.0-alpha.1","dist":{"shasum":"b9166f8c9dc4b1d17e32cb9310d13bc684d50d5a","integrity":"sha512-UCHZshrCfd7wXhJ+WcHXRZh8fQNpDeNs5FcfmHgXteVirHxc3k6HSvooOQyxiXjdXrkom+w2bL41U6VvvZId3A==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.1.tgz","fileCount":9,"unpackedSize":153091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdf7I2CRA9TVsSAnZWagAANykP/iK2UlVn+isAcYlhpBKQ\nqO/wd/c9x21jO6dccAZbLepX4KzFi8g6AuNdpjf01aA4UIgczoFvoWv5FW0H\nlLT37xeNCL8B2dLluPr5DYzbEk2SmnLvi2GyXiCth7c4sircD86rgxSLwYDB\nWpdFRD5gsQ+42zkONrif+yjejB9Yf7WsGD2qeHFEd2DvlKQJS6eYfGhtrKO6\nq7mVPRcQIKAy1ACNxM07qCTAtq781IFoLorrVjfWRGqcy1D+cjR3l1v8HEJj\nv6ZlIK1cDnKROC2jVFaAUtgicOAFxVIevG5rXrGUwPiVfzrtkoUNEEbeK5qv\nWJw6HkzpgmmbeWSaUp5SKv1m9eMerKnpjHL2F/hF4lO4sBY82/fStTZj9+O1\nCnXMA4mitykrUNQvQ/h9bf4eaV1EDkeNtjtP72RTY1J0d4EK6PQSHhDPK6ll\nu0OZBybtBH776cEYkAPNWo/7RySrmLZKcgkOQrIYJXzdNMY19Dk1wwyhgTYg\ny4OCLmcbWRZhlRl1CVoaMvuP905tPD8BZBMmJyHLdUXVksSZW6W1HZ2siNS9\nYUhavSW+RwZjqZs+j3PAKCJwfAMNI/tfDyNTM7xQvMq6sFn7L+byazgvilvL\nZYCkAaTqBV2hYexc6Pr57ZRz25336H53xmQhu7BgHPZ43OB+gILpm+cL0bvP\n2cmc\r\n=6+AX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQ8GN686m0burMFkkJoxvi2r7y91sKACNK9F6aQUe4JgIgN6BEy9DpoDEx9k8WAVR38MR0AOsX1MtklntMfJYuPVs="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.1_1568649781761_0.6426062138609301"},"_hasShrinkwrap":false},"4.0.0-alpha.2":{"name":"react-form","version":"4.0.0-alpha.2","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"readmeFilename":"README.md","readme":"# ⚛️ 💼 React Form\n\nReact hooks for managing form state and lifecycle\n\n<a href=\"https://travis-ci.org/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://travis-ci.org/tannerlinsley/react-form.svg?branch=master\" />\n</a>\n<a href=\"https://npmjs.com/package/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/npm/dm/react-form.svg\" />\n</a>\n<a href=\"https://spectrum.chat/react-form\">\n  <img alt=\"Join the community on Spectrum\" src=\"https://withspectrum.github.io/badge/badge.svg\" />\n</a>\n<a href=\"https://github.com/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/github/stars/tannerlinsley/react-form.svg?style=social&label=Star\" />\n</a>\n<a href=\"https://twitter.com/tannerlinsley\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/twitter/follow/tannerlinsley.svg?style=social&label=Follow\" />\n</a>\n\n<!--\n## Features\n- Put some features here\n-->\n\n## Intro\n\nReact Form is currently in **alpha**! This means:\n\n- The existing API is not stable. Expect major changes/additions **as minor and patch releases** while use-cases evolve.\n- It is not recommended for **mission critical** production code.\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Quick Example](#quick-example)\n- [Documentation](#documentation)\n  - [`useForm`](#useform) - The primary hook for creating a form.\n    - [Form Validation](#form-validation)\n    - [Synchronous Validation](#synchronous-validation)\n    - [Asynchronous Validation](#asynchronous-validation)\n    - [Mixed Sync + Async Validation:](#mixed-sync--async-validation)\n    - [Debouncing Form Validation](#debouncing-form-validation)\n    - [Sync Debouncing](#sync-debouncing)\n    - [Async Debouncing](#async-debouncing)\n    - [Mixed Sync/Async Debouncing](#mixed-syncasync-debouncing)\n    - [Manually manage `meta` and field `meta`](#manually-manage-formmeta-and-field-meta)\n  - [`useField`](#usefield) - A hook for utilizing form state and lifecycle on the field level.\n    - [Field Validation](#field-validation)\n  - [`useFormContext`](#useformcontext) - Use this hook to gain access to the form state within a `useForm`'s `Form` component.\n  - [`splitFormProps`](#splitformprops) - A function for automatically extracting React-Form-related props from an object\n\n## Installation\n\n```bash\n$ yarn add react-form\n# or\n$ npm i react-form --save\n```\n\n## Quick Example\n\nThis will render a very basic form:\n\n```js\nimport React from 'react'\nimport { useForm, useField } from 'react-form'\n\n// Build an basic TextInput field\nconst InputField = React.forwardRef(({ field, validate, ...rest }, ref) => {\n  // Use the useField hook with form props to access form state\n  const {\n    value,\n    meta: { error, isTouched },\n    setValue,\n    setMeta,\n  } = useField(field, {\n    validate,\n  })\n\n  // Build your form input\n  return (\n    <>\n      <input\n        ref={ref}\n        // Use setValue to update form values\n        onChange={e => setValue(e.target.value)}\n        // Use setMeta to update form touch state\n        onBlur={() => setMeta({ isTouched: true })}\n        value={value}\n        {...rest}\n      />\n      {/* Use isTouched and error state to show errors */}\n      {isTouched && error ? <em>{error}</em> : null}\n    </>\n  )\n})\n\nfunction MyForm() {\n  // Pass default values (be sure to memoize any options used)\n  const defaultValues = React.useMemo(\n    () => ({\n      foo: 'hello',\n      bar: {\n        baz: 'world',\n      },\n    }),\n    []\n  )\n\n  // Use the useForm hook to create a form instance\n  const { Form } = useForm({\n    // Pass the default values\n    defaultValues,\n    // Handle form submission\n    onSubmit: values => {\n      console.log('These are the values:', values)\n    },\n  })\n\n  return (\n    // Form is just a thin wrapper around the `form` html element.\n    // It automatically wires up the onSubmit logic and context for `useField`\n    <Form>\n      <InputField field=\"foo\" />\n      <InputField\n        field=\"bar.baz\"\n        validate={value => (!value ? 'Baz is required!' : false)}\n      />\n      <button type=\"submit\">Submit</button>\n    </Form>\n  )\n}\n```\n\n# Documentation\n\n## `useForm`\n\n```js\nimport { useForm } from 'react-form'\n\nconst instance = useForm(options)\n```\n\n### Form Options\n\n- `defaultValues: any`\n  - Use defaultValues to set the default values state for the form. If this object ever changes, the state will be reset to the new object. Thus, its important to use React.useMemo to make this object only change when necessary\n- `onSubmit(values, instance) => Promise`\n  - `onSubmit` is called when the form's Form element is submitted or when `instance.handleSubmit` is called.\n  - `values` is the submitted values object for the form\n  - `instance` is the latest version of the form instance (the same instance that is returned from `useForm`)\n  - If the promise returned from this function resolves, `instance.isSubmitted` will be set to `true`\n  - When the promise returned from this function settles, `instance.isSubmitting` will be set to `false`\n- `validate async (values, instance) => String | false | undefined`\n  - `validate` is an asynchronous function that is called when the form becomes dirty and is given the opportunity to set/clear/update errors and/or manage general form state\n  - `instance` is the latest version of the form instance (the same instance that is returned from `useForm`)\n  - [See below](#form-validation) for more information on form validation\n  - Field level validation is also available. [See `useField`](#useField)\n- `validatePristine: Bool`\n  - If you want validation to run when instance.isDirty is false, you can set the `validatePristine` option to `true`\n\n### Form Instance\n\nAn `object` with the following components, properties and methods:\n\n- `Form: ReactComponent<form>`\n  - **Required**\n  - This component is a ready-to-use wrapper around the html `form` element.\n  - It will proxy any props you pass it, excluding `onSubmit`.\n    - It properly supplies the form context to any `useField` instances inside it.\n- `values: any`\n  - The current values for the entire form\n- `meta: Object`\n  - `error: String | any`\n    - If an error is returned by the form's `validation` function, or if it is set programmatically, it will be stored here.\n  - `isSubmitting: Bool`\n    - Will be set to `true` if the form is currently submitting\n  - `isDirty: Bool`\n    - Will be set to `true` if the form is dirty\n  - `isSubmitted: Bool`\n    - Will be set to `true` if the form has been submitted successfully\n  - `submissionAttempts: Int`\n    - Will be incremented, starting from `0`, every time a form submission is attempted\n  - `isValid: Bool`\n    - Will be set to `true` if `isDirty === true` and `isValid === true`, meaning that the form has been touched and there are no field-level or form-level errors\n  - `canSubmit: Bool`\n    - Will be set to `true` if `isValid === true` and `isSubmitting === false`\n    - This can be used to enable/disable a submit button for the form.\n  - `...any`\n    - Any other meta information can be stored here via the `field.setMeta` or `instance.setFieldMeta` functions\n- `debug: Bool`\n  - If set to `true` the form instance will be serialized and rendered after the `Form` element returned by the instance\n- `reset() => void`\n  - This function will reset the form's state, and set `instance.values` to the `defaultValues` option\n- `setMeta((updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update the form's `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `handleSubmit(formSubmitEvent) => void`\n  - This function is used to submit the form.\n  - It is automatically called when using the `Form` component returned by `useTable`.\n  - If you build your form using your own `form` element, this function is required and should be set as the callback to the `form` via the `onSubmit` prop\n- `debounce(Function, wait: Int) => Promise`\n  - This function can be used to debounce any function at the specified wait time. Calls to this function will be deduped per form-instance.\n  - Typically, this function is used in the `validate` callback to control validation timing and flow\n  - A new promise is returned for each call to this function\n  - Over the course of multiple overlapping calls to this function, only the latest active promise that both fires and finishes will actually resolve or reject. In other words, if you call this function before a previous call to it resolves, all previous calls will be discarded and never resolve or reject so as to avoid unwanted side effects from stale promises. Turns out this is easier than cancelling promises :)\n- `setValues(updater(previousValues: Object) => newValues: Object) | newValues: Object`\n  - Use this function to update the form's `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - If a value is passed, it **will replace the entire values** object, similar to React's `setState` callback style.\n- `runValidation() => void`\n  - Use this function to manually run the form-level validation.\n  - This function does not run validation for fields. If that is a requirement you have, the please file a feature request and I'll make it happen.\n- `getFieldValue(fieldPath: String) => any`\n  - This function returns the `value` from the form's `instance.values` object located at the `fieldPath` string that was passed.\n  - `fieldPath` is a string that supports object notation, eg. `foo[3].bar[1].baz`\n- `getFieldMeta(fieldPath: String) => Object: { error: String | null, ...any }`\n  - This function returns a field's `meta` object from the form.\n  - `fieldPath` is a string that supports object notation, eg. `foo[3].bar[1].baz`\n- `setFieldValue(fieldPath: String, (updater(previousValue: any) => newValue: any) | newValue: any, options: Object { isTouched: Bool } )`\n  - Use this function to update a field's corresponding `value` that is stored in the `instance.values` object.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n  - Optionally, an `options` object can be passed.\n    - `isTouched: Bool`\n      - Defaults to `true`\n      - If set to `false`, this operation will not trigger the field's `isTouched` to automatically be set to `true`\n- `setFieldMeta(fieldPath: String, (updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update a fields `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `pushFieldValue(fieldPath: String, newValue: any)`\n  - Use this function to push a new value into a field that has an array-like value.\n  - An error will be thrown if the field's current value is not an array.\n- `insertFieldValue(fieldPath: String, insertIndex: Int, value: any)`\n  - Use this function to insert a new value into a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `removeFieldValue(fieldPath: String, removalIndex: Int)`\n  - Use this function to remove a value from a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `swapFieldValues(fieldPath: String, firstIndex: Int, secondIndex: Int)`\n  - Use this function to swap two values inside of a field that has an array-like value at the specified indices.\n  - An error will be thrown if the field's current value is not an array.\n\n## `useField`\n\n```js\nimport { useField } from 'react-form'\n\nconst fieldInstance = useField(fieldPath, options)\n```\n\n### Field Options\n\n- `fieldPath: String`\n  - **Required**\n  - The path the value for this field.\n  - Supports deeply nested object notation, eg. `foo[3].bar[1].baz`\n  - Periods and brackets are used to specify array indices vs object keys.\n  - Object keys should not contain quotes or use bracket syntax, eg. `foo.bar` is correct. Do not use `foo[bar]` or `foo['bar']`\n  - Array indices should be integers and not contain quotes. eg. use `foo[3].bar[1].baz`. Do not use `foo.3.bar.1.baz`, as this would result in objects with keys `3` and `1` instead of arrays and indices.\n- `options` - An optional object to configure the field\n  - `defaultValue: any`\n    - Use `defaultValue` to set the default `value` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultError: String | undefined`\n    - Use `defaultError` to set the default `error` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultIsTouched: Bool | undefined`\n    - Use `defaultIsTouched` to set the default `isTouched` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultMeta: Object | undefined`\n    - Use `defaultMeta` to set any additional default `meta` state for the field.\n    - Unlike `defaultValue`, `defaultError` and `defaultIsTouched`, changing this object will not trigger the field meta to be updated. It is only updated when the `useField` hook mounts and `meta` for that field has not yet been initialized (`meta === undefined`)\n  - `validate async (value, instance) => String | false | undefined`\n    - `validate` is an asynchronous function that is called when the field becomes dirty and is given the opportunity to set/clear/update errors and/or manage general field meta\n    - `instance` is the latest version of the field instance (the same instance that is returned from `useField`)\n    - [See below](#validation) for more information on field validation\n    - Form level validation is also available. [See `useForm`](#useform)\n  - `validatePristine: Bool`\n    - If you want validation to run when instance.isDirty is false, you can set the `validatePristine` option to `true`\n\n### Field Instance\n\nAn `object` with the following components, properties and methods:\n\n- `form: FormInstance`\n  - The root form `instance`\n- `fieldName: String`\n  - The full fieldName (from the root of the form) for this field\n- `value: any`\n  - The current value of this field\n- `meta: Object {}`\n  - `error: String | any`\n    - If an error is returned by the field's `validation` function, or if it is set programmatically, it will be stored here.\n  - `isTouched: Bool`\n    - Will be set to `true` if the field has been touched.\n  - `...any`\n    - Any other meta information can be stored here via the `field.setMeta` or `instance.setFieldMeta` functions\n- `FieldScope: ReactComponent<Provider>`\n  - Optional\n  - This component does not render any markup\n  - It set the new base field scope to this field's `fieldpath`\n  - It supplies this new base field scope, along with the form scope to any `useField` instances inside it.\n  - Any `useField(fieldPath)` instances used insde of `FieldScope` will inherit this field's `fieldPath` as a parent.\n  - See [Field Scoping](#field-scoping) for more information\n- `debounce(Function, wait: Int) => Promise`\n  - This function can be used to debounce any function at the specified wait time. Calls to this function will be deduped per `useField` instance.\n  - Typically, this function is used in the `validate` callback to control validation timing and flow\n  - A new promise is returned for each call to this function\n  - Over the course of multiple overlapping calls to this function, only the latest active promise that both fires and finishes will actually resolve or reject. In other words, if you call this function before a previous call to it resolves, all previous calls will be discarded and never resolve or reject so as to avoid unwanted side effects from stale promises. Turns out this is easier than cancelling promises :)\n- `runValidation() => void`\n  - Use this function to manually run this field's validation.\n  - This function does not run validation for fields.\n\n#### Field-Specific Methods\n\nThe following methods do not require the use of a `fieldPath`. This field's `fieldPath` will automatically be used.\n\n- `setValue((updater(previousValue: any) => newValue: any) | newValue: any, options: Object { isTouched: Bool } )`\n  - Use this function to update a field's corresponding `value` that is stored in the `instance.values` object.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n  - Optionally, an `options` object can be passed.\n    - `isTouched: Bool`\n      - Defaults to `true`\n      - If set to `false`, this operation will not trigger the field's `isTouched` to automatically be set to `true`\n- `setMeta((updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update a fields `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `pushValue(newValue: any)`\n  - Use this function to push a new value into a field that has an array-like value.\n  - An error will be thrown if the field's current value is not an array.\n- `insertValue(insertIndex: Int, value: any)`\n  - Use this function to insert a new value into a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `removeValue(removalIndex: Int)`\n  - Use this function to remove a value from a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `swapValues(firstIndex: Int, secondIndex: Int)`\n\n  - Use this function to swap two values inside of a field that has an array-like value at the specified indices.\n  - An error will be thrown if the field's current value is not an array.\n\n#### Field-Scope Specific Methods\n\nThe following methods are almost exactly the same as their top-level form `instance` counterparts, except for any `fieldPath` that is passed to them will be prefixed with this field's `fieldPath`\n\nFor example, if our field had the `fieldPath` of `foo`, then `setFieldValue('[0]', true)` would be similar to calling `instance.setFieldValue('foo[0]', true)`\n\n- `setFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `setFieldMeta(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `pushFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `insertFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `removeFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `swapFieldValues(subFieldPath, ...)` - [See Form Instance](#form-instance)\n\n## Validation\n\n### Synchronous Validation\n\nIf you don't need to perform any async validation in your form or field, you can just return a value directly:\n\n- If this function resolve truthy, the value returned will be stored in either the form's `instance.meta.error` or the field's `meta.error` value\n- If this function resolve `false`, the error in either the form's `instance.meta.error` or the field's `meta.error` value the will be set to `null`\n- if this function resolve `undefined`, no changes will happen\n\n```js\nconst options = {\n  validate: value => {\n    // To set an error:\n    if (!somethingIsWrong) {\n      return 'This form/field has a form-level error'\n    }\n    // To clear any errors:\n    return false\n  },\n}\n```\n\n### Asynchronous Validation\n\nAsynchronous validation is as easy as returning a promise:\n\n```js\nconst options = {\n  validate: async value => {\n    // If you need to perform async validation, you can return a promise\n    const error = await validateOnServer(values)\n\n    if (error) {\n      return error\n    }\n    return false\n  },\n}\n```\n\n### Mixed Sync + Async Validation:\n\n```js\nconst options = {\n  validate: async value => {\n    // You can mix synchronous and asynchronous validation easily with this pattern\n    // First check for synchronous errors\n    if (!values.foo || !values.bar) {\n      return 'Foo and bar are required!'\n    }\n    // Then return a promise that resolves any async errors\n    const error = await validateOnServer(values)\n    return error ? error : false\n  },\n}\n```\n\n### Debouncing Form Validation\n\nIf you're validation is firing too often, you can debounce any stage of your validation function (sync or async) with React Form's built-in debounce utility. `instance.debounce` returns a promise that only resolves for the latest call after a given amount of time. This way, any outdated validation attempts are discarded automatically.\n\n### Sync Debouncing\n\n```js\nconst options = {\n  validate: (values, instance) => {\n    return instance.debounce(() => {\n      // Wait 1000 milliseconds before validating anything\n      if (!values.foo || !values.bar) {\n        return 'Foo and bar are required!'\n      }\n\n      return false\n    }, 1000)\n  },\n}\n```\n\n### Async Debouncing\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    return instance.debounce(() => {\n      // Wait 2 seconds before validating on the server\n      const error = await validateOnServer(values)\n      return error ? error : false\n    }, 2000)\n  }\n}\n```\n\n### Mixed Sync/Async Debouncing\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    if (!values.foo || !values.bar) {\n      return 'Foo and bar are required!'\n    }\n    // Then, if sync validation passes\n    return instance.debounce(() => {\n      // Wait 2 seconds before validating on the server\n      const error = await validateOnServer(values)\n      return error ? error : false\n    }, 2000)\n  }\n}\n```\n\n### Manually manage `meta` or a field `meta`\n\nReturning an error string or false from validate is simply shorthand for setting/unsetting the `error` property on either the form's `instance.meta` object or a field's `meta` object. If you don't want to set an error and would rather set a success or warning message, you can use the `instance.setMeta` (for form-level validation) or the `instance.setMeta` function (for field-level validation). More than just the error field can be set/used on both the `instance.meta` object and each individual field's `meta` object. You could use this meta information for success messages, warnings, or any other information about a field. Only the `error` and `isTouched` meta properties are used internally by React Form to determine form validity.\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    const serverError = await validateOnServer(values)\n\n    if (serverError) {\n      setMeta({\n        error: serverError,\n        message: null,\n        errorStack: serverError.stack,\n      })\n    } else {\n      setMeta({\n        error: null,\n        message: 'The form is good to be submitted!',\n        errorStack: null,\n      })\n    }\n\n    // Make sure this function returns undefined if you are handling\n    // meta manually.\n  },\n}\n```\n\n## Field Scoping\n\nField scoping is useful for building form inputs that don't require knowledge of the parent field name. Imagine a field component for managing some notes on a form:\n\n```js\nfunction NotesField({ field }) {\n  const fieldInstance = useField(field)\n\n  // ...\n}\n```\n\nThis approach would required us to define the nested `field` when we use the component:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <NotesField field=\"notes\" />\n    </Form>\n  )\n}\n```\n\nThis isn't a problem for shallow forms, but if we are in a deeply nested part of a form UI, it get's more verbose:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <ConfigField field=\"config\" />\n    </Form>\n  )\n}\n\nfunction ConfigField({ field: parentField }) {\n  return (\n    <>\n      <NotesField field={`${parentField}.notes`} />\n      <OtherField field={`${parentField}.other`} />\n      <FooField field={`${parentField}.foo`} />\n    </>\n  )\n}\n```\n\nInstead of requiring that all deep fields be composed with their parent strings, you can use the `FieldScope` component returned by the `useField` hook to create a new field scope for any `useField` instances rendered inside of it:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <ConfigField field=\"config\" />\n    </Form>\n  )\n}\n\nfunction ConfigField({ field: parentField }) {\n  const { FieldScope } = useField('config')\n  return (\n    <FieldScope>\n      <NotesField field=\"notes\" />\n      <OtherField field=\"other\" />\n      <FooField field=\"foo\" />\n    </FieldScope>\n  )\n}\n```\n\nUsing this approach, you can avoid having to compose deeply nested field names!\n","_id":"react-form@4.0.0-alpha.2","dist":{"shasum":"28ae9bdfb12a2f3195b5103fc4a8ecb6bf6d382b","integrity":"sha512-osEupfmETkANWeDF2H0aN3e7J6Z75iKT7TOInfH0paYP5UFxPEEksQkhcXHV5ChRqSs3P/q3TWBV4M6CXAzGUA==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.2.tgz","fileCount":9,"unpackedSize":171298,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdf/sHCRA9TVsSAnZWagAA8MoP/0HdBovwqkYRKLibOkzj\nwgvcIW0K+dcj9d+ZqIYRBnlPc81/OCx0NhnFKFyj83YUrXXodnaM12uw/AWQ\nnvCKM0uvJOSUVcQ9ztvQs+iBJyS++GeXIo8B3dgP4q82DEITXiu57a4bmTcm\nUq3KMRaLZxBFuJ4MdEmolMRh6P4nkUQjPLif6YEy77tDX3ZAbAzggnXiLqTg\nY5mvB02sZRQEnH1Pm8mnWDU08RWT/5rPbqSs70aEqCaHqYbn9Gof3YBdfO5x\nGzB6VTFQarVf9H7Ab2bSYDnOiQ2nTCcnrwINTOKZi0UiqhHo/ZVKXcEEAkRy\nZm9jRfmQvRNbYLJLK1YC0QnQ3dvkvWAI5BQfRkqlaRu95u6FZ1hm8TNLl4BG\ncrhFjHWNgaaPBl1ae+MWxrYbrMnMQe0qG90j4Ouy2Tpa4ISYIl1MohUrfBg7\n4awCvmP1wmEQOW+SVdHNuhtc4xIH2/qq7vhdu8uApnZUbV3PWDwCr2n9Y2xC\n+DK1i4O4emHpPYXCnGayb5LZsX1N/WObGweviWIZtz6jCOVlRSThvCCgRBIK\nsSryfQiQi4x+qJr/cQF9Vjc4Xl0MPziOThDmRvemDgFOe/YZg0CTYHu31kAv\njKAoBKAp1FVs11ZxfgxdD1QP5EEIe1qUX3NAX1POIccqlfnexEEiWh2gub37\nY93N\r\n=GVHo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHd9rIS13cXOMAHy7r0CqTYBsblRQbm+YrY3hqAZPRnjAiAVAWet0rimhIoh+6jIr734/6rxswK6DLSVvkKW10UcXg=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.2_1568668422772_0.41544468388867895"},"_hasShrinkwrap":false},"4.0.0-alpha.3":{"name":"react-form","version":"4.0.0-alpha.3","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"readmeFilename":"README.md","readme":"# ⚛️ 💼 React Form\n\nReact hooks for managing form state and lifecycle\n\n<a href=\"https://travis-ci.org/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://travis-ci.org/tannerlinsley/react-form.svg?branch=master\" />\n</a>\n<a href=\"https://npmjs.com/package/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/npm/dm/react-form.svg\" />\n</a>\n<a href=\"https://spectrum.chat/react-form\">\n  <img alt=\"Join the community on Spectrum\" src=\"https://withspectrum.github.io/badge/badge.svg\" />\n</a>\n<a href=\"https://github.com/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/github/stars/tannerlinsley/react-form.svg?style=social&label=Star\" />\n</a>\n<a href=\"https://twitter.com/tannerlinsley\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/twitter/follow/tannerlinsley.svg?style=social&label=Follow\" />\n</a>\n\n<!--\n## Features\n- Put some features here\n-->\n\n## Intro\n\nReact Form is currently in **alpha**! This means:\n\n- The existing API is not stable. Expect major changes/additions **as minor and patch releases** while use-cases evolve.\n- It is not recommended for **mission critical** production code.\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Quick Example](#quick-example)\n- [Documentation](#documentation)\n  - [`useForm`](#useform) - The primary hook for creating a form.\n    - [Form Validation](#form-validation)\n    - [Synchronous Validation](#synchronous-validation)\n    - [Asynchronous Validation](#asynchronous-validation)\n    - [Mixed Sync + Async Validation:](#mixed-sync--async-validation)\n    - [Debouncing Form Validation](#debouncing-form-validation)\n    - [Sync Debouncing](#sync-debouncing)\n    - [Async Debouncing](#async-debouncing)\n    - [Mixed Sync/Async Debouncing](#mixed-syncasync-debouncing)\n    - [Manually manage `meta` and field `meta`](#manually-manage-formmeta-and-field-meta)\n  - [`useField`](#usefield) - A hook for utilizing form state and lifecycle on the field level.\n    - [Field Validation](#field-validation)\n  - [`useFormContext`](#useformcontext) - Use this hook to gain access to the form state within a `useForm`'s `Form` component.\n  - [`splitFormProps`](#splitformprops) - A function for automatically extracting React-Form-related props from an object\n\n## Installation\n\n```bash\n$ yarn add react-form\n# or\n$ npm i react-form --save\n```\n\n## Quick Example\n\nThis will render a very basic form:\n\n```js\nimport React from 'react'\nimport { useForm, useField } from 'react-form'\n\n// Build an basic TextInput field\nconst InputField = React.forwardRef(({ field, validate, ...rest }, ref) => {\n  // Use the useField hook with form props to access form state\n  const {\n    value,\n    meta: { error, isTouched },\n    setValue,\n    setMeta,\n  } = useField(field, {\n    validate,\n  })\n\n  // Build your form input\n  return (\n    <>\n      <input\n        ref={ref}\n        // Use setValue to update form values\n        onChange={e => setValue(e.target.value)}\n        // Use setMeta to update form touch state\n        onBlur={() => setMeta({ isTouched: true })}\n        value={value}\n        {...rest}\n      />\n      {/* Use isTouched and error state to show errors */}\n      {isTouched && error ? <em>{error}</em> : null}\n    </>\n  )\n})\n\nfunction MyForm() {\n  // Pass default values (be sure to memoize any options used)\n  const defaultValues = React.useMemo(\n    () => ({\n      foo: 'hello',\n      bar: {\n        baz: 'world',\n      },\n    }),\n    []\n  )\n\n  // Use the useForm hook to create a form instance\n  const { Form } = useForm({\n    // Pass the default values\n    defaultValues,\n    // Handle form submission\n    onSubmit: values => {\n      console.log('These are the values:', values)\n    },\n  })\n\n  return (\n    // Form is just a thin wrapper around the `form` html element.\n    // It automatically wires up the onSubmit logic and context for `useField`\n    <Form>\n      <InputField field=\"foo\" />\n      <InputField\n        field=\"bar.baz\"\n        validate={value => (!value ? 'Baz is required!' : false)}\n      />\n      <button type=\"submit\">Submit</button>\n    </Form>\n  )\n}\n```\n\n# Documentation\n\n## `useForm`\n\n```js\nimport { useForm } from 'react-form'\n\nconst instance = useForm(options)\n```\n\n### Form Options\n\n- `defaultValues: any`\n  - Use defaultValues to set the default values state for the form. If this object ever changes, the state will be reset to the new object. Thus, its important to use React.useMemo to make this object only change when necessary\n- `onSubmit(values, instance) => Promise`\n  - `onSubmit` is called when the form's Form element is submitted or when `instance.handleSubmit` is called.\n  - `values` is the submitted values object for the form\n  - `instance` is the latest version of the form instance (the same instance that is returned from `useForm`)\n  - If the promise returned from this function resolves, `instance.isSubmitted` will be set to `true`\n  - When the promise returned from this function settles, `instance.isSubmitting` will be set to `false`\n- `validate async (values, instance) => String | false | undefined`\n  - `validate` is an asynchronous function that is called when the form becomes dirty and is given the opportunity to set/clear/update errors and/or manage general form state\n  - `instance` is the latest version of the form instance (the same instance that is returned from `useForm`)\n  - [See below](#form-validation) for more information on form validation\n  - Field level validation is also available. [See `useField`](#useField)\n- `validatePristine: Bool`\n  - If you want validation to run when instance.isDirty is false, you can set the `validatePristine` option to `true`\n\n### Form Instance\n\nAn `object` with the following components, properties and methods:\n\n- `Form: ReactComponent<form>`\n  - **Required**\n  - This component is a ready-to-use wrapper around the html `form` element.\n  - It will proxy any props you pass it, excluding `onSubmit`.\n    - It properly supplies the form context to any `useField` instances inside it.\n- `values: any`\n  - The current values for the entire form\n- `meta: Object`\n  - `error: String | any`\n    - If an error is returned by the form's `validation` function, or if it is set programmatically, it will be stored here.\n  - `isSubmitting: Bool`\n    - Will be set to `true` if the form is currently submitting\n  - `isDirty: Bool`\n    - Will be set to `true` if the form is dirty\n  - `isSubmitted: Bool`\n    - Will be set to `true` if the form has been submitted successfully\n  - `submissionAttempts: Int`\n    - Will be incremented, starting from `0`, every time a form submission is attempted\n  - `isValid: Bool`\n    - Will be set to `true` if `isDirty === true` and `isValid === true`, meaning that the form has been touched and there are no field-level or form-level errors\n  - `canSubmit: Bool`\n    - Will be set to `true` if `isValid === true` and `isSubmitting === false`\n    - This can be used to enable/disable a submit button for the form.\n  - `...any`\n    - Any other meta information can be stored here via the `field.setMeta` or `instance.setFieldMeta` functions\n- `debug: Bool`\n  - If set to `true` the form instance will be serialized and rendered after the `Form` element returned by the instance\n- `reset() => void`\n  - This function will reset the form's state, and set `instance.values` to the `defaultValues` option\n- `setMeta((updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update the form's `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `handleSubmit(formSubmitEvent) => void`\n  - This function is used to submit the form.\n  - It is automatically called when using the `Form` component returned by `useTable`.\n  - If you build your form using your own `form` element, this function is required and should be set as the callback to the `form` via the `onSubmit` prop\n- `debounce(Function, wait: Int) => Promise`\n  - This function can be used to debounce any function at the specified wait time. Calls to this function will be deduped per form-instance.\n  - Typically, this function is used in the `validate` callback to control validation timing and flow\n  - A new promise is returned for each call to this function\n  - Over the course of multiple overlapping calls to this function, only the latest active promise that both fires and finishes will actually resolve or reject. In other words, if you call this function before a previous call to it resolves, all previous calls will be discarded and never resolve or reject so as to avoid unwanted side effects from stale promises. Turns out this is easier than cancelling promises :)\n- `setValues(updater(previousValues: Object) => newValues: Object) | newValues: Object`\n  - Use this function to update the form's `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - If a value is passed, it **will replace the entire values** object, similar to React's `setState` callback style.\n- `runValidation() => void`\n  - Use this function to manually run the form-level validation.\n  - This function does not run validation for fields. If that is a requirement you have, the please file a feature request and I'll make it happen.\n- `getFieldValue(fieldPath: String) => any`\n  - This function returns the `value` from the form's `instance.values` object located at the `fieldPath` string that was passed.\n  - `fieldPath` is a string that supports object notation, eg. `foo[3].bar[1].baz`\n- `getFieldMeta(fieldPath: String) => Object: { error: String | null, ...any }`\n  - This function returns a field's `meta` object from the form.\n  - `fieldPath` is a string that supports object notation, eg. `foo[3].bar[1].baz`\n- `setFieldValue(fieldPath: String, (updater(previousValue: any) => newValue: any) | newValue: any, options: Object { isTouched: Bool } )`\n  - Use this function to update a field's corresponding `value` that is stored in the `instance.values` object.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n  - Optionally, an `options` object can be passed.\n    - `isTouched: Bool`\n      - Defaults to `true`\n      - If set to `false`, this operation will not trigger the field's `isTouched` to automatically be set to `true`\n- `setFieldMeta(fieldPath: String, (updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update a fields `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `pushFieldValue(fieldPath: String, newValue: any)`\n  - Use this function to push a new value into a field that has an array-like value.\n  - An error will be thrown if the field's current value is not an array.\n- `insertFieldValue(fieldPath: String, insertIndex: Int, value: any)`\n  - Use this function to insert a new value into a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `removeFieldValue(fieldPath: String, removalIndex: Int)`\n  - Use this function to remove a value from a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `swapFieldValues(fieldPath: String, firstIndex: Int, secondIndex: Int)`\n  - Use this function to swap two values inside of a field that has an array-like value at the specified indices.\n  - An error will be thrown if the field's current value is not an array.\n\n## `useField`\n\n```js\nimport { useField } from 'react-form'\n\nconst fieldInstance = useField(fieldPath, options)\n```\n\n### Field Options\n\n- `fieldPath: String`\n  - **Required**\n  - The path the value for this field.\n  - Supports deeply nested object notation, eg. `foo[3].bar[1].baz`\n  - Any keys that can be reliably parsed via the following regex will be treated as array indices: `(\\[(\\d*)\\])|(\\.(\\d*)\\.)|(\\.(\\d*)$)`, eg. `[1]`, `.1.` or `.1`\n- `options` - An optional object to configure the field\n  - `defaultValue: any`\n    - Use `defaultValue` to set the default `value` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultError: String | undefined`\n    - Use `defaultError` to set the default `error` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultIsTouched: Bool | undefined`\n    - Use `defaultIsTouched` to set the default `isTouched` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultMeta: Object | undefined`\n    - Use `defaultMeta` to set any additional default `meta` state for the field.\n    - Unlike `defaultValue`, `defaultError` and `defaultIsTouched`, changing this object will not trigger the field meta to be updated. It is only updated when the `useField` hook mounts and `meta` for that field has not yet been initialized (`meta === undefined`)\n  - `validate async (value, instance) => String | false | undefined`\n    - `validate` is an asynchronous function that is called when the field becomes dirty and is given the opportunity to set/clear/update errors and/or manage general field meta\n    - `instance` is the latest version of the field instance (the same instance that is returned from `useField`)\n    - [See below](#validation) for more information on field validation\n    - Form level validation is also available. [See `useForm`](#useform)\n  - `validatePristine: Bool`\n    - If you want validation to run when instance.isDirty is false, you can set the `validatePristine` option to `true`\n\n### Field Instance\n\nAn `object` with the following components, properties and methods:\n\n- `form: FormInstance`\n  - The root form `instance`\n- `fieldName: String`\n  - The full fieldName (from the root of the form) for this field\n- `value: any`\n  - The current value of this field\n- `meta: Object {}`\n  - `error: String | any`\n    - If an error is returned by the field's `validation` function, or if it is set programmatically, it will be stored here.\n  - `isTouched: Bool`\n    - Will be set to `true` if the field has been touched.\n  - `...any`\n    - Any other meta information can be stored here via the `field.setMeta` or `instance.setFieldMeta` functions\n- `FieldScope: ReactComponent<Provider>`\n  - Optional\n  - This component does not render any markup\n  - It set the new base field scope to this field's `fieldpath`\n  - It supplies this new base field scope, along with the form scope to any `useField` instances inside it.\n  - Any `useField(fieldPath)` instances used insde of `FieldScope` will inherit this field's `fieldPath` as a parent.\n  - See [Field Scoping](#field-scoping) for more information\n- `debounce(Function, wait: Int) => Promise`\n  - This function can be used to debounce any function at the specified wait time. Calls to this function will be deduped per `useField` instance.\n  - Typically, this function is used in the `validate` callback to control validation timing and flow\n  - A new promise is returned for each call to this function\n  - Over the course of multiple overlapping calls to this function, only the latest active promise that both fires and finishes will actually resolve or reject. In other words, if you call this function before a previous call to it resolves, all previous calls will be discarded and never resolve or reject so as to avoid unwanted side effects from stale promises. Turns out this is easier than cancelling promises :)\n- `runValidation() => void`\n  - Use this function to manually run this field's validation.\n  - This function does not run validation for fields.\n\n#### Field-Specific Methods\n\nThe following methods do not require the use of a `fieldPath`. This field's `fieldPath` will automatically be used.\n\n- `setValue((updater(previousValue: any) => newValue: any) | newValue: any, options: Object { isTouched: Bool } )`\n  - Use this function to update a field's corresponding `value` that is stored in the `instance.values` object.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n  - Optionally, an `options` object can be passed.\n    - `isTouched: Bool`\n      - Defaults to `true`\n      - If set to `false`, this operation will not trigger the field's `isTouched` to automatically be set to `true`\n- `setMeta((updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update a fields `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `pushValue(newValue: any)`\n  - Use this function to push a new value into a field that has an array-like value.\n  - An error will be thrown if the field's current value is not an array.\n- `insertValue(insertIndex: Int, value: any)`\n  - Use this function to insert a new value into a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `removeValue(removalIndex: Int)`\n  - Use this function to remove a value from a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `swapValues(firstIndex: Int, secondIndex: Int)`\n\n  - Use this function to swap two values inside of a field that has an array-like value at the specified indices.\n  - An error will be thrown if the field's current value is not an array.\n\n#### Field-Scope Specific Methods\n\nThe following methods are almost exactly the same as their top-level form `instance` counterparts, except for any `fieldPath` that is passed to them will be prefixed with this field's `fieldPath`\n\nFor example, if our field had the `fieldPath` of `foo`, then `setFieldValue('[0]', true)` would be similar to calling `instance.setFieldValue('foo[0]', true)`\n\n- `setFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `setFieldMeta(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `pushFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `insertFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `removeFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `swapFieldValues(subFieldPath, ...)` - [See Form Instance](#form-instance)\n\n## Validation\n\n### Synchronous Validation\n\nIf you don't need to perform any async validation in your form or field, you can just return a value directly:\n\n- If this function resolve truthy, the value returned will be stored in either the form's `instance.meta.error` or the field's `meta.error` value\n- If this function resolve `false`, the error in either the form's `instance.meta.error` or the field's `meta.error` value the will be set to `null`\n- if this function resolve `undefined`, no changes will happen\n\n```js\nconst options = {\n  validate: value => {\n    // To set an error:\n    if (!somethingIsWrong) {\n      return 'This form/field has a form-level error'\n    }\n    // To clear any errors:\n    return false\n  },\n}\n```\n\n### Asynchronous Validation\n\nAsynchronous validation is as easy as returning a promise:\n\n```js\nconst options = {\n  validate: async value => {\n    // If you need to perform async validation, you can return a promise\n    const error = await validateOnServer(values)\n\n    if (error) {\n      return error\n    }\n    return false\n  },\n}\n```\n\n### Mixed Sync + Async Validation:\n\n```js\nconst options = {\n  validate: async value => {\n    // You can mix synchronous and asynchronous validation easily with this pattern\n    // First check for synchronous errors\n    if (!values.foo || !values.bar) {\n      return 'Foo and bar are required!'\n    }\n    // Then return a promise that resolves any async errors\n    const error = await validateOnServer(values)\n    return error ? error : false\n  },\n}\n```\n\n### Debouncing Form Validation\n\nIf you're validation is firing too often, you can debounce any stage of your validation function (sync or async) with React Form's built-in debounce utility. `instance.debounce` returns a promise that only resolves for the latest call after a given amount of time. This way, any outdated validation attempts are discarded automatically.\n\n### Sync Debouncing\n\n```js\nconst options = {\n  validate: (values, instance) => {\n    return instance.debounce(() => {\n      // Wait 1000 milliseconds before validating anything\n      if (!values.foo || !values.bar) {\n        return 'Foo and bar are required!'\n      }\n\n      return false\n    }, 1000)\n  },\n}\n```\n\n### Async Debouncing\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    return instance.debounce(() => {\n      // Wait 2 seconds before validating on the server\n      const error = await validateOnServer(values)\n      return error ? error : false\n    }, 2000)\n  }\n}\n```\n\n### Mixed Sync/Async Debouncing\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    if (!values.foo || !values.bar) {\n      return 'Foo and bar are required!'\n    }\n    // Then, if sync validation passes\n    return instance.debounce(() => {\n      // Wait 2 seconds before validating on the server\n      const error = await validateOnServer(values)\n      return error ? error : false\n    }, 2000)\n  }\n}\n```\n\n### Manually manage `meta` or a field `meta`\n\nReturning an error string or false from validate is simply shorthand for setting/unsetting the `error` property on either the form's `instance.meta` object or a field's `meta` object. If you don't want to set an error and would rather set a success or warning message, you can use the `instance.setMeta` (for form-level validation) or the `instance.setMeta` function (for field-level validation). More than just the error field can be set/used on both the `instance.meta` object and each individual field's `meta` object. You could use this meta information for success messages, warnings, or any other information about a field. Only the `error` and `isTouched` meta properties are used internally by React Form to determine form validity.\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    const serverError = await validateOnServer(values)\n\n    if (serverError) {\n      setMeta({\n        error: serverError,\n        message: null,\n        errorStack: serverError.stack,\n      })\n    } else {\n      setMeta({\n        error: null,\n        message: 'The form is good to be submitted!',\n        errorStack: null,\n      })\n    }\n\n    // Make sure this function returns undefined if you are handling\n    // meta manually.\n  },\n}\n```\n\n## Field Scoping\n\nField scoping is useful for building form inputs that don't require knowledge of the parent field name. Imagine a field component for managing some notes on a form:\n\n```js\nfunction NotesField({ field }) {\n  const fieldInstance = useField(field)\n\n  // ...\n}\n```\n\nThis approach would required us to define the nested `field` when we use the component:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <NotesField field=\"notes\" />\n    </Form>\n  )\n}\n```\n\nThis isn't a problem for shallow forms, but if we are in a deeply nested part of a form UI, it get's more verbose:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <ConfigField field=\"config\" />\n    </Form>\n  )\n}\n\nfunction ConfigField({ field: parentField }) {\n  return (\n    <>\n      <NotesField field={`${parentField}.notes`} />\n      <OtherField field={`${parentField}.other`} />\n      <FooField field={`${parentField}.foo`} />\n    </>\n  )\n}\n```\n\nInstead of requiring that all deep fields be composed with their parent strings, you can use the `FieldScope` component returned by the `useField` hook to create a new field scope for any `useField` instances rendered inside of it:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <ConfigField field=\"config\" />\n    </Form>\n  )\n}\n\nfunction ConfigField({ field: parentField }) {\n  const { FieldScope } = useField('config')\n  return (\n    <FieldScope>\n      <NotesField field=\"notes\" />\n      <OtherField field=\"other\" />\n      <FooField field=\"foo\" />\n    </FieldScope>\n  )\n}\n```\n\nUsing this approach, you can avoid having to compose deeply nested field names!\n","_id":"react-form@4.0.0-alpha.3","dist":{"shasum":"7385c90880f19757fefc23484941702672260dc0","integrity":"sha512-q5KcjoSJVlPXhITUuYKdUkFPNM724f+2dQHUnCXoQ+x0Yyz9h/BhrISsaTAP7yLJ53969n70yHcDjElbR9Zy2w==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.3.tgz","fileCount":9,"unpackedSize":172185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgA9xCRA9TVsSAnZWagAA7pEP/A1kT607rDGSjORElIDw\n3d8hkljhyB8bpsLGW9dQ+WPM01TmgU/MgpMxkEt6zAlW00/VGqlswKNqqFt4\nk6823BuLRuh7UExo5cstif5pvd3N+JHEomee682JdSziUcivFGNMYXGuuZ7Z\np73/QSHHNR3WxJonQ5nhVIENOr+tAf8E+lcM6CPNkFiAtrUEOdoG9burXlXB\ne9nyTB3mflnOH8kwGclZycQmRTzu0jPL2jyCCGVHgipClo/XjQ5y/W7+YMBE\nwEuiH0srX5DyCaMcXm43ihfRW7pFWVnptDR5WrNLvEd4vrGkq5zA3N3mYSTj\ni6V5pMzMLdO6JApZQbiePizyjF6hvUZgH8SzgSY2r0wsiC9IZjG6Rq+SRDwh\nD4CdQ/zkimjkP/FIAJBmNqcNP/sFAKPzhFo46S5kwkT5JCeSFp3yeTAgdeez\niNecBi1LuJeIVXHBHdApte063I+291fW2KLE9GI2Zd8LojITHdn9SXVgCArL\nQVBPzSx918FiB+XvcTT9xiezPhQ+0a/Oxd+RWRfXqoRZ2AP1ADKlugY0alxf\ntCmGGWULPlcSdqgO3Z9gsBhdV17iBA9ik5D/tKI62mj7pa1jFosZkz1KqDWp\nw1aAk1COzsnxd7V+XlNY58ey36snlPAH5ZCClWZnD+b8ox/zq2HQbr3U494Y\ndn07\r\n=9z5p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBtnvhULmtfqlpKaaarnQaykDJ1ux5kDHx6CKw30ns7pAiEAqrA/39YOTNvdVnxtQkXiZGjUcUrIEjO7J7YxHPMo5sw="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.3_1568673648355_0.771817133929031"},"_hasShrinkwrap":false},"4.0.0-alpha.4":{"name":"react-form","version":"4.0.0-alpha.4","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"readmeFilename":"README.md","readme":"# ⚛️ 💼 React Form\n\nReact hooks for managing form state and lifecycle\n\n<a href=\"https://travis-ci.org/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://travis-ci.org/tannerlinsley/react-form.svg?branch=master\" />\n</a>\n<a href=\"https://npmjs.com/package/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/npm/dm/react-form.svg\" />\n</a>\n<a href=\"https://spectrum.chat/react-form\">\n  <img alt=\"Join the community on Spectrum\" src=\"https://withspectrum.github.io/badge/badge.svg\" />\n</a>\n<a href=\"https://github.com/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/github/stars/tannerlinsley/react-form.svg?style=social&label=Star\" />\n</a>\n<a href=\"https://twitter.com/tannerlinsley\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/twitter/follow/tannerlinsley.svg?style=social&label=Follow\" />\n</a>\n\n<!--\n## Features\n- Put some features here\n-->\n\n## Intro\n\nReact Form is currently in **alpha**! This means:\n\n- The existing API is not stable. Expect major changes/additions **as minor and patch releases** while use-cases evolve.\n- It is not recommended for **mission critical** production code.\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Quick Example](#quick-example)\n- [Documentation](#documentation)\n  - [`useForm`](#useform) - The primary hook for creating a form.\n    - [Form Validation](#form-validation)\n    - [Synchronous Validation](#synchronous-validation)\n    - [Asynchronous Validation](#asynchronous-validation)\n    - [Mixed Sync + Async Validation:](#mixed-sync--async-validation)\n    - [Debouncing Form Validation](#debouncing-form-validation)\n    - [Sync Debouncing](#sync-debouncing)\n    - [Async Debouncing](#async-debouncing)\n    - [Mixed Sync/Async Debouncing](#mixed-syncasync-debouncing)\n    - [Manually manage `meta` and field `meta`](#manually-manage-formmeta-and-field-meta)\n  - [`useField`](#usefield) - A hook for utilizing form state and lifecycle on the field level.\n    - [Field Validation](#field-validation)\n  - [`useFormContext`](#useformcontext) - Use this hook to gain access to the form state within a `useForm`'s `Form` component.\n  - [`splitFormProps`](#splitformprops) - A function for automatically extracting React-Form-related props from an object\n\n## Installation\n\n```bash\n$ yarn add react-form\n# or\n$ npm i react-form --save\n```\n\n## Quick Example\n\nThis will render a very basic form:\n\n```js\nimport React from 'react'\nimport { useForm, useField } from 'react-form'\n\n// Build an basic TextInput field\nconst InputField = React.forwardRef(({ field, validate, ...rest }, ref) => {\n  // Use the useField hook with form props to access form state\n  const {\n    value,\n    meta: { error, isTouched },\n    setValue,\n    setMeta,\n  } = useField(field, {\n    validate,\n  })\n\n  // Build your form input\n  return (\n    <>\n      <input\n        ref={ref}\n        // Use setValue to update form values\n        onChange={e => setValue(e.target.value)}\n        // Use setMeta to update form touch state\n        onBlur={() => setMeta({ isTouched: true })}\n        value={value}\n        {...rest}\n      />\n      {/* Use isTouched and error state to show errors */}\n      {isTouched && error ? <em>{error}</em> : null}\n    </>\n  )\n})\n\nfunction MyForm() {\n  // Pass default values (be sure to memoize any options used)\n  const defaultValues = React.useMemo(\n    () => ({\n      foo: 'hello',\n      bar: {\n        baz: 'world',\n      },\n    }),\n    []\n  )\n\n  // Use the useForm hook to create a form instance\n  const { Form } = useForm({\n    // Pass the default values\n    defaultValues,\n    // Handle form submission\n    onSubmit: values => {\n      console.log('These are the values:', values)\n    },\n  })\n\n  return (\n    // Form is just a thin wrapper around the `form` html element.\n    // It automatically wires up the onSubmit logic and context for `useField`\n    <Form>\n      <InputField field=\"foo\" />\n      <InputField\n        field=\"bar.baz\"\n        validate={value => (!value ? 'Baz is required!' : false)}\n      />\n      <button type=\"submit\">Submit</button>\n    </Form>\n  )\n}\n```\n\n# Documentation\n\n## `useForm`\n\n```js\nimport { useForm } from 'react-form'\n\nconst instance = useForm(options)\n```\n\n### Form Options\n\n- `defaultValues: any`\n  - Use defaultValues to set the default values state for the form. If this object ever changes, the state will be reset to the new object. Thus, its important to use React.useMemo to make this object only change when necessary\n- `onSubmit(values, instance) => Promise`\n  - `onSubmit` is called when the form's Form element is submitted or when `instance.handleSubmit` is called.\n  - `values` is the submitted values object for the form\n  - `instance` is the latest version of the form instance (the same instance that is returned from `useForm`)\n  - If the promise returned from this function resolves, `instance.isSubmitted` will be set to `true`\n  - When the promise returned from this function settles, `instance.isSubmitting` will be set to `false`\n- `validate async (values, instance) => String | false | undefined`\n  - `validate` is an asynchronous function that is called when the form becomes dirty and is given the opportunity to set/clear/update errors and/or manage general form state\n  - `instance` is the latest version of the form instance (the same instance that is returned from `useForm`)\n  - [See below](#form-validation) for more information on form validation\n  - Field level validation is also available. [See `useField`](#useField)\n- `validatePristine: Bool`\n  - If you want validation to run when instance.isDirty is false, you can set the `validatePristine` option to `true`\n\n### Form Instance\n\nAn `object` with the following components, properties and methods:\n\n- `Form: ReactComponent<form>`\n  - **Required**\n  - This component is a ready-to-use wrapper around the html `form` element.\n  - It will proxy any props you pass it, excluding `onSubmit`.\n    - It properly supplies the form context to any `useField` instances inside it.\n- `values: any`\n  - The current values for the entire form\n- `meta: Object`\n  - `error: String | any`\n    - If an error is returned by the form's `validation` function, or if it is set programmatically, it will be stored here.\n  - `isSubmitting: Bool`\n    - Will be set to `true` if the form is currently submitting\n  - `isDirty: Bool`\n    - Will be set to `true` if the form is dirty\n  - `isSubmitted: Bool`\n    - Will be set to `true` if the form has been submitted successfully\n  - `submissionAttempts: Int`\n    - Will be incremented, starting from `0`, every time a form submission is attempted\n  - `isValid: Bool`\n    - Will be set to `true` if `isDirty === true` and `isValid === true`, meaning that the form has been touched and there are no field-level or form-level errors\n  - `canSubmit: Bool`\n    - Will be set to `true` if `isValid === true` and `isSubmitting === false`\n    - This can be used to enable/disable a submit button for the form.\n  - `...any`\n    - Any other meta information can be stored here via the `field.setMeta` or `instance.setFieldMeta` functions\n- `debug: Bool`\n  - If set to `true` the form instance will be serialized and rendered after the `Form` element returned by the instance\n- `reset() => void`\n  - This function will reset the form's state, and set `instance.values` to the `defaultValues` option\n- `setMeta((updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update the form's `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `handleSubmit(formSubmitEvent) => void`\n  - This function is used to submit the form.\n  - It is automatically called when using the `Form` component returned by `useTable`.\n  - If you build your form using your own `form` element, this function is required and should be set as the callback to the `form` via the `onSubmit` prop\n- `debounce(Function, wait: Int) => Promise`\n  - This function can be used to debounce any function at the specified wait time. Calls to this function will be deduped per form-instance.\n  - Typically, this function is used in the `validate` callback to control validation timing and flow\n  - A new promise is returned for each call to this function\n  - Over the course of multiple overlapping calls to this function, only the latest active promise that both fires and finishes will actually resolve or reject. In other words, if you call this function before a previous call to it resolves, all previous calls will be discarded and never resolve or reject so as to avoid unwanted side effects from stale promises. Turns out this is easier than cancelling promises :)\n- `setValues(updater(previousValues: Object) => newValues: Object) | newValues: Object`\n  - Use this function to update the form's `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - If a value is passed, it **will replace the entire values** object, similar to React's `setState` callback style.\n- `runValidation() => void`\n  - Use this function to manually run the form-level validation.\n  - This function does not run validation for fields. If that is a requirement you have, the please file a feature request and I'll make it happen.\n- `getFieldValue(fieldPath: String) => any`\n  - This function returns the `value` from the form's `instance.values` object located at the `fieldPath` string that was passed.\n  - `fieldPath` is a string that supports object notation, eg. `foo[3].bar[1].baz`\n- `getFieldMeta(fieldPath: String) => Object: { error: String | null, ...any }`\n  - This function returns a field's `meta` object from the form.\n  - `fieldPath` is a string that supports object notation, eg. `foo[3].bar[1].baz`\n- `setFieldValue(fieldPath: String, (updater(previousValue: any) => newValue: any) | newValue: any, options: Object { isTouched: Bool } )`\n  - Use this function to update a field's corresponding `value` that is stored in the `instance.values` object.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n  - Optionally, an `options` object can be passed.\n    - `isTouched: Bool`\n      - Defaults to `true`\n      - If set to `false`, this operation will not trigger the field's `isTouched` to automatically be set to `true`\n- `setFieldMeta(fieldPath: String, (updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update a fields `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `pushFieldValue(fieldPath: String, newValue: any)`\n  - Use this function to push a new value into a field that has an array-like value.\n  - An error will be thrown if the field's current value is not an array.\n- `insertFieldValue(fieldPath: String, insertIndex: Int, value: any)`\n  - Use this function to insert a new value into a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `removeFieldValue(fieldPath: String, removalIndex: Int)`\n  - Use this function to remove a value from a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `swapFieldValues(fieldPath: String, firstIndex: Int, secondIndex: Int)`\n  - Use this function to swap two values inside of a field that has an array-like value at the specified indices.\n  - An error will be thrown if the field's current value is not an array.\n\n## `useField`\n\n```js\nimport { useField } from 'react-form'\n\nconst fieldInstance = useField(fieldPath, options)\n```\n\n### Field Options\n\n- `fieldPath: String`\n  - **Required**\n  - The path the value for this field.\n  - Supports deeply nested object notation, eg. `foo[3].bar[1].baz`\n  - Any integers that can be reliably detected between notation boundaries will be treated as array indices: `1`, `[1]`, `1.`, `.1.` or `.1`\n- `options` - An optional object to configure the field\n  - `defaultValue: any`\n    - Use `defaultValue` to set the default `value` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultError: String | undefined`\n    - Use `defaultError` to set the default `error` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultIsTouched: Bool | undefined`\n    - Use `defaultIsTouched` to set the default `isTouched` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultMeta: Object | undefined`\n    - Use `defaultMeta` to set any additional default `meta` state for the field.\n    - Unlike `defaultValue`, `defaultError` and `defaultIsTouched`, changing this object will not trigger the field meta to be updated. It is only updated when the `useField` hook mounts and `meta` for that field has not yet been initialized (`meta === undefined`)\n  - `validate async (value, instance) => String | false | undefined`\n    - `validate` is an asynchronous function that is called when the field becomes dirty and is given the opportunity to set/clear/update errors and/or manage general field meta\n    - `instance` is the latest version of the field instance (the same instance that is returned from `useField`)\n    - [See below](#validation) for more information on field validation\n    - Form level validation is also available. [See `useForm`](#useform)\n  - `validatePristine: Bool`\n    - If you want validation to run when instance.isDirty is false, you can set the `validatePristine` option to `true`\n\n### Field Instance\n\nAn `object` with the following components, properties and methods:\n\n- `form: FormInstance`\n  - The root form `instance`\n- `fieldName: String`\n  - The full fieldName (from the root of the form) for this field\n- `value: any`\n  - The current value of this field\n- `meta: Object {}`\n  - `error: String | any`\n    - If an error is returned by the field's `validation` function, or if it is set programmatically, it will be stored here.\n  - `isTouched: Bool`\n    - Will be set to `true` if the field has been touched.\n  - `...any`\n    - Any other meta information can be stored here via the `field.setMeta` or `instance.setFieldMeta` functions\n- `FieldScope: ReactComponent<Provider>`\n  - Optional\n  - This component does not render any markup\n  - It set the new base field scope to this field's `fieldpath`\n  - It supplies this new base field scope, along with the form scope to any `useField` instances inside it.\n  - Any `useField(fieldPath)` instances used insde of `FieldScope` will inherit this field's `fieldPath` as a parent.\n  - See [Field Scoping](#field-scoping) for more information\n- `debounce(Function, wait: Int) => Promise`\n  - This function can be used to debounce any function at the specified wait time. Calls to this function will be deduped per `useField` instance.\n  - Typically, this function is used in the `validate` callback to control validation timing and flow\n  - A new promise is returned for each call to this function\n  - Over the course of multiple overlapping calls to this function, only the latest active promise that both fires and finishes will actually resolve or reject. In other words, if you call this function before a previous call to it resolves, all previous calls will be discarded and never resolve or reject so as to avoid unwanted side effects from stale promises. Turns out this is easier than cancelling promises :)\n- `runValidation() => void`\n  - Use this function to manually run this field's validation.\n  - This function does not run validation for fields.\n\n#### Field-Specific Methods\n\nThe following methods do not require the use of a `fieldPath`. This field's `fieldPath` will automatically be used.\n\n- `setValue((updater(previousValue: any) => newValue: any) | newValue: any, options: Object { isTouched: Bool } )`\n  - Use this function to update a field's corresponding `value` that is stored in the `instance.values` object.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n  - Optionally, an `options` object can be passed.\n    - `isTouched: Bool`\n      - Defaults to `true`\n      - If set to `false`, this operation will not trigger the field's `isTouched` to automatically be set to `true`\n- `setMeta((updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update a fields `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `pushValue(newValue: any)`\n  - Use this function to push a new value into a field that has an array-like value.\n  - An error will be thrown if the field's current value is not an array.\n- `insertValue(insertIndex: Int, value: any)`\n  - Use this function to insert a new value into a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `removeValue(removalIndex: Int)`\n  - Use this function to remove a value from a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `swapValues(firstIndex: Int, secondIndex: Int)`\n\n  - Use this function to swap two values inside of a field that has an array-like value at the specified indices.\n  - An error will be thrown if the field's current value is not an array.\n\n#### Field-Scope Specific Methods\n\nThe following methods are almost exactly the same as their top-level form `instance` counterparts, except for any `fieldPath` that is passed to them will be prefixed with this field's `fieldPath`\n\nFor example, if our field had the `fieldPath` of `foo`, then `setFieldValue('[0]', true)` would be similar to calling `instance.setFieldValue('foo[0]', true)`\n\n- `setFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `setFieldMeta(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `pushFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `insertFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `removeFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `swapFieldValues(subFieldPath, ...)` - [See Form Instance](#form-instance)\n\n## Validation\n\n### Synchronous Validation\n\nIf you don't need to perform any async validation in your form or field, you can just return a value directly:\n\n- If this function resolve truthy, the value returned will be stored in either the form's `instance.meta.error` or the field's `meta.error` value\n- If this function resolve `false`, the error in either the form's `instance.meta.error` or the field's `meta.error` value the will be set to `null`\n- if this function resolve `undefined`, no changes will happen\n\n```js\nconst options = {\n  validate: value => {\n    // To set an error:\n    if (!somethingIsWrong) {\n      return 'This form/field has a form-level error'\n    }\n    // To clear any errors:\n    return false\n  },\n}\n```\n\n### Asynchronous Validation\n\nAsynchronous validation is as easy as returning a promise:\n\n```js\nconst options = {\n  validate: async value => {\n    // If you need to perform async validation, you can return a promise\n    const error = await validateOnServer(values)\n\n    if (error) {\n      return error\n    }\n    return false\n  },\n}\n```\n\n### Mixed Sync + Async Validation:\n\n```js\nconst options = {\n  validate: async value => {\n    // You can mix synchronous and asynchronous validation easily with this pattern\n    // First check for synchronous errors\n    if (!values.foo || !values.bar) {\n      return 'Foo and bar are required!'\n    }\n    // Then return a promise that resolves any async errors\n    const error = await validateOnServer(values)\n    return error ? error : false\n  },\n}\n```\n\n### Debouncing Form Validation\n\nIf you're validation is firing too often, you can debounce any stage of your validation function (sync or async) with React Form's built-in debounce utility. `instance.debounce` returns a promise that only resolves for the latest call after a given amount of time. This way, any outdated validation attempts are discarded automatically.\n\n### Sync Debouncing\n\n```js\nconst options = {\n  validate: (values, instance) => {\n    return instance.debounce(() => {\n      // Wait 1000 milliseconds before validating anything\n      if (!values.foo || !values.bar) {\n        return 'Foo and bar are required!'\n      }\n\n      return false\n    }, 1000)\n  },\n}\n```\n\n### Async Debouncing\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    return instance.debounce(() => {\n      // Wait 2 seconds before validating on the server\n      const error = await validateOnServer(values)\n      return error ? error : false\n    }, 2000)\n  }\n}\n```\n\n### Mixed Sync/Async Debouncing\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    if (!values.foo || !values.bar) {\n      return 'Foo and bar are required!'\n    }\n    // Then, if sync validation passes\n    return instance.debounce(() => {\n      // Wait 2 seconds before validating on the server\n      const error = await validateOnServer(values)\n      return error ? error : false\n    }, 2000)\n  }\n}\n```\n\n### Manually manage `meta` or a field `meta`\n\nReturning an error string or false from validate is simply shorthand for setting/unsetting the `error` property on either the form's `instance.meta` object or a field's `meta` object. If you don't want to set an error and would rather set a success or warning message, you can use the `instance.setMeta` (for form-level validation) or the `instance.setMeta` function (for field-level validation). More than just the error field can be set/used on both the `instance.meta` object and each individual field's `meta` object. You could use this meta information for success messages, warnings, or any other information about a field. Only the `error` and `isTouched` meta properties are used internally by React Form to determine form validity.\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    const serverError = await validateOnServer(values)\n\n    if (serverError) {\n      setMeta({\n        error: serverError,\n        message: null,\n        errorStack: serverError.stack,\n      })\n    } else {\n      setMeta({\n        error: null,\n        message: 'The form is good to be submitted!',\n        errorStack: null,\n      })\n    }\n\n    // Make sure this function returns undefined if you are handling\n    // meta manually.\n  },\n}\n```\n\n## Field Scoping\n\nField scoping is useful for building form inputs that don't require knowledge of the parent field name. Imagine a field component for managing some notes on a form:\n\n```js\nfunction NotesField({ field }) {\n  const fieldInstance = useField(field)\n\n  // ...\n}\n```\n\nThis approach would required us to define the nested `field` when we use the component:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <NotesField field=\"notes\" />\n    </Form>\n  )\n}\n```\n\nThis isn't a problem for shallow forms, but if we are in a deeply nested part of a form UI, it get's more verbose:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <ConfigField field=\"config\" />\n    </Form>\n  )\n}\n\nfunction ConfigField({ field: parentField }) {\n  return (\n    <>\n      <NotesField field={`${parentField}.notes`} />\n      <OtherField field={`${parentField}.other`} />\n      <FooField field={`${parentField}.foo`} />\n    </>\n  )\n}\n```\n\nInstead of requiring that all deep fields be composed with their parent strings, you can use the `FieldScope` component returned by the `useField` hook to create a new field scope for any `useField` instances rendered inside of it:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <ConfigField field=\"config\" />\n    </Form>\n  )\n}\n\nfunction ConfigField({ field: parentField }) {\n  const { FieldScope } = useField('config')\n  return (\n    <FieldScope>\n      <NotesField field=\"notes\" />\n      <OtherField field=\"other\" />\n      <FooField field=\"foo\" />\n    </FieldScope>\n  )\n}\n```\n\nUsing this approach, you can avoid having to compose deeply nested field names!\n","_id":"react-form@4.0.0-alpha.4","dist":{"shasum":"8e170494393396c5ba50163e72e562cac04cda99","integrity":"sha512-f2oS+2MhmIjVkxZM/27gmP0/krR4ov35R3j9A2DcCUX9t5nhU9wW5dJLd8jYlFySUYh1QnlvypjfMDIhdVoQlw==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.4.tgz","fileCount":9,"unpackedSize":172624,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgBAzCRA9TVsSAnZWagAASHsP/1TBQ6abbdTWTLGp/7BM\nOJioDXFGx2IaE8VDVULFDultZv0h26+IJRkfiqKN0NmMmOkukuX4UX1ZZkQG\nL7ZBJcq4+10VwPMPNzDXWKEJim1F5xnKf5GmlxtjbwMMFb77TwBURIFnvv9R\nglI9OwABmQ89nJgOqy9veFFksdSiE8Ll9L8GZjWOn62q3t/ROaa7DM/iEOtM\nseGpeApHMwtR+D+gdEeTujiBS4jDnwAGczcyTeMTBjTkdSqWwqibXHQrFceA\n1BbgIZEDt4o+JKavJgwUD+0dB9VBKcVkVwdFz4Qi29bMTxfg6ZCagLoIT0No\nSbrzbtabtno2jl1tq0cXuC+zwQhkEeB/bk/su9fr0lyAyuLDe7o6xrWlTcF2\nmYgLZtkQPfd8XbHb09f3NCpU7im0SAuEP1+YHIaWWp8HcuYHhdTxBxrZ0es8\nQ4iV6/pNHAf0GQ+Ls0jUnGewh/20zhrlBXcbh1czrccwhhRtu6OSoLlXEx8O\nbukUMPOYQbIiz+HfhuUxGDbvL+A4lcfx+lJIVw2nWey1m/GK6an09etrFcBM\nOe2xwdbZbvg1APyBC0wQ/ZDiP/9GA0UgHe9A26y8DeIBu4dABZYVcSuV0qAq\nNiMLbCrfwiQp9aCaWE1spZS6Vg1vVtsVyVObpB6dma6newIbMHB8EPmdr3DX\n58FM\r\n=BsEE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGDubbBAZIW5i7BgUYHHPjSI99MCxiCdwv8QwErgWyY+AiAP6yjSoDGwBMtf3Ls5AEKILYxvLN0q9nAvysHdBrVxZQ=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.4_1568673843242_0.2105555262619898"},"_hasShrinkwrap":false},"4.0.0-alpha.5":{"name":"react-form","version":"4.0.0-alpha.5","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"readmeFilename":"README.md","readme":"# ⚛️ 💼 React Form\n\nReact hooks for managing form state and lifecycle\n\n<a href=\"https://travis-ci.org/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://travis-ci.org/tannerlinsley/react-form.svg?branch=master\" />\n</a>\n<a href=\"https://npmjs.com/package/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/npm/dm/react-form.svg\" />\n</a>\n<a href=\"https://spectrum.chat/react-form\">\n  <img alt=\"Join the community on Spectrum\" src=\"https://withspectrum.github.io/badge/badge.svg\" />\n</a>\n<a href=\"https://github.com/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/github/stars/tannerlinsley/react-form.svg?style=social&label=Star\" />\n</a>\n<a href=\"https://twitter.com/tannerlinsley\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/twitter/follow/tannerlinsley.svg?style=social&label=Follow\" />\n</a>\n\n<!--\n## Features\n- Put some features here\n-->\n\n## Intro\n\nReact Form is currently in **alpha**! This means:\n\n- The existing API is not stable. Expect major changes/additions **as minor and patch releases** while use-cases evolve.\n- It is not recommended for **mission critical** production code.\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Quick Example](#quick-example)\n- [Documentation](#documentation)\n  - [`useForm`](#useform)\n  - [`useField`](#usefield)\n  - [Validation](#validation)\n  - [Synchronous Validation](#synchronous-validation)\n  - [Asynchronous Validation](#asynchronous-validation)\n  - [Mixed Sync + Async Validation:](#mixed-sync--async-validation)\n  - [Debouncing Form Validation](#debouncing-form-validation)\n  - [Sync Debouncing](#sync-debouncing)\n  - [Async Debouncing](#async-debouncing)\n  - [Mixed Sync/Async Debouncing](#mixed-syncasync-debouncing)\n  - [Manually manage form `meta` and field `meta`](#manually-manage-form-meta-and-field-meta)\n  - [Field Scoping](#field-scoping)\n  - [`useFormContext`](#useformcontext)\n  - [`splitFormProps`](#splitformprops)\n\n## Installation\n\n```bash\n$ yarn add react-form\n# or\n$ npm i react-form --save\n```\n\n## Quick Example\n\nThis will render a very basic form:\n\n```js\nimport React from 'react'\nimport { useForm, useField } from 'react-form'\n\n// Build an basic TextInput field\nconst InputField = React.forwardRef(({ field, validate, ...rest }, ref) => {\n  // Use the useField hook with form props to access form state\n  const {\n    value,\n    meta: { error, isTouched },\n    setValue,\n    setMeta,\n  } = useField(field, {\n    validate,\n  })\n\n  // Build your form input\n  return (\n    <>\n      <input\n        ref={ref}\n        // Use setValue to update form values\n        onChange={e => setValue(e.target.value)}\n        // Use setMeta to update form touch state\n        onBlur={() => setMeta({ isTouched: true })}\n        value={value}\n        {...rest}\n      />\n      {/* Use isTouched and error state to show errors */}\n      {isTouched && error ? <em>{error}</em> : null}\n    </>\n  )\n})\n\nfunction MyForm() {\n  // Pass default values (be sure to memoize any options used)\n  const defaultValues = React.useMemo(\n    () => ({\n      foo: 'hello',\n      bar: {\n        baz: 'world',\n      },\n    }),\n    []\n  )\n\n  // Use the useForm hook to create a form instance\n  const { Form } = useForm({\n    // Pass the default values\n    defaultValues,\n    // Handle form submission\n    onSubmit: values => {\n      console.log('These are the values:', values)\n    },\n  })\n\n  return (\n    // Form is just a thin wrapper around the `form` html element.\n    // It automatically wires up the onSubmit logic and context for `useField`\n    <Form>\n      <InputField field=\"foo\" />\n      <InputField\n        field=\"bar.baz\"\n        validate={value => (!value ? 'Baz is required!' : false)}\n      />\n      <button type=\"submit\">Submit</button>\n    </Form>\n  )\n}\n```\n\n# Documentation\n\n## `useForm`\n\n```js\nimport { useForm } from 'react-form'\n\nconst instance = useForm(options)\n```\n\n### Form Options\n\n- `defaultValues: any`\n  - Use defaultValues to set the default values state for the form. If this object ever changes, the state will be reset to the new object. Thus, its important to use React.useMemo to make this object only change when necessary\n- `onSubmit(values, instance) => Promise`\n  - `onSubmit` is called when the form's Form element is submitted or when `instance.handleSubmit` is called.\n  - `values` is the submitted values object for the form\n  - `instance` is the latest version of the form instance (the same instance that is returned from `useForm`)\n  - If the promise returned from this function resolves, `instance.isSubmitted` will be set to `true`\n  - When the promise returned from this function settles, `instance.isSubmitting` will be set to `false`\n- `validate async (values, instance) => String | false | undefined`\n  - `validate` is an asynchronous function that is called when the form becomes dirty and is given the opportunity to set/clear/update errors and/or manage general form state\n  - `instance` is the latest version of the form instance (the same instance that is returned from `useForm`)\n  - [See below](#form-validation) for more information on form validation\n  - Field level validation is also available. [See `useField`](#useField)\n- `validatePristine: Bool`\n  - If you want validation to run when instance.isDirty is false, you can set the `validatePristine` option to `true`\n\n### Form Instance\n\nAn `object` with the following components, properties and methods:\n\n- `Form: ReactComponent<form>`\n  - **Required**\n  - This component is a ready-to-use wrapper around the html `form` element.\n  - It will proxy any props you pass it, excluding `onSubmit`.\n    - It properly supplies the form context to any `useField` instances inside it.\n- `values: any`\n  - The current values for the entire form\n- `meta: Object`\n  - `error: String | any`\n    - If an error is returned by the form's `validation` function, or if it is set programmatically, it will be stored here.\n  - `isSubmitting: Bool`\n    - Will be set to `true` if the form is currently submitting\n  - `isDirty: Bool`\n    - Will be set to `true` if the form is dirty\n  - `isSubmitted: Bool`\n    - Will be set to `true` if the form has been submitted successfully\n  - `submissionAttempts: Int`\n    - Will be incremented, starting from `0`, every time a form submission is attempted\n  - `isValid: Bool`\n    - Will be set to `true` if `isDirty === true` and `isValid === true`, meaning that the form has been touched and there are no field-level or form-level errors\n  - `canSubmit: Bool`\n    - Will be set to `true` if `isValid === true` and `isSubmitting === false`\n    - This can be used to enable/disable a submit button for the form.\n  - `...any`\n    - Any other meta information can be stored here via the `field.setMeta` or `instance.setFieldMeta` functions\n- `debugForm: Bool`\n  - If set to `true` the form instance will be serialized and rendered after the `Form` element returned by the instance\n- `reset() => void`\n  - This function will reset the form's state, and set `instance.values` to the `defaultValues` option\n- `setMeta((updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update the form's `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `handleSubmit(formSubmitEvent) => void`\n  - This function is used to submit the form.\n  - It is automatically called when using the `Form` component returned by `useTable`.\n  - If you build your form using your own `form` element, this function is required and should be set as the callback to the `form` via the `onSubmit` prop\n- `debounce(Function, wait: Int) => Promise`\n  - This function can be used to debounce any function at the specified wait time. Calls to this function will be deduped per form-instance.\n  - Typically, this function is used in the `validate` callback to control validation timing and flow\n  - A new promise is returned for each call to this function\n  - Over the course of multiple overlapping calls to this function, only the latest active promise that both fires and finishes will actually resolve or reject. In other words, if you call this function before a previous call to it resolves, all previous calls will be discarded and never resolve or reject so as to avoid unwanted side effects from stale promises. Turns out this is easier than cancelling promises :)\n- `setValues(updater(previousValues: Object) => newValues: Object) | newValues: Object`\n  - Use this function to update the form's `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - If a value is passed, it **will replace the entire values** object, similar to React's `setState` callback style.\n- `runValidation() => void`\n  - Use this function to manually run the form-level validation.\n  - This function does not run validation for fields. If that is a requirement you have, the please file a feature request and I'll make it happen.\n- `getFieldValue(fieldPath: String) => any`\n  - This function returns the `value` from the form's `instance.values` object located at the `fieldPath` string that was passed.\n  - `fieldPath` is a string that supports object notation, eg. `foo[3].bar[1].baz`\n- `getFieldMeta(fieldPath: String) => Object: { error: String | null, ...any }`\n  - This function returns a field's `meta` object from the form.\n  - `fieldPath` is a string that supports object notation, eg. `foo[3].bar[1].baz`\n- `setFieldValue(fieldPath: String, (updater(previousValue: any) => newValue: any) | newValue: any, options: Object { isTouched: Bool } )`\n  - Use this function to update a field's corresponding `value` that is stored in the `instance.values` object.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n  - Optionally, an `options` object can be passed.\n    - `isTouched: Bool`\n      - Defaults to `true`\n      - If set to `false`, this operation will not trigger the field's `isTouched` to automatically be set to `true`\n- `setFieldMeta(fieldPath: String, (updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update a fields `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `pushFieldValue(fieldPath: String, newValue: any)`\n  - Use this function to push a new value into a field that has an array-like value.\n  - An error will be thrown if the field's current value is not an array.\n- `insertFieldValue(fieldPath: String, insertIndex: Int, value: any)`\n  - Use this function to insert a new value into a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `removeFieldValue(fieldPath: String, removalIndex: Int)`\n  - Use this function to remove a value from a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `swapFieldValues(fieldPath: String, firstIndex: Int, secondIndex: Int)`\n  - Use this function to swap two values inside of a field that has an array-like value at the specified indices.\n  - An error will be thrown if the field's current value is not an array.\n\n## `useField`\n\n```js\nimport { useField } from 'react-form'\n\nconst fieldInstance = useField(fieldPath, options)\n```\n\n### Field Options\n\n- `fieldPath: String`\n  - **Required**\n  - The path the value for this field.\n  - Supports deeply nested object notation, eg. `foo[3].bar[1].baz`\n  - Any integers that can be reliably detected between notation boundaries will be treated as array indices: `1`, `[1]`, `1.`, `.1.` or `.1`\n- `options` - An optional object to configure the field\n  - `defaultValue: any`\n    - Use `defaultValue` to set the default `value` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultError: String | undefined`\n    - Use `defaultError` to set the default `error` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultIsTouched: Bool | undefined`\n    - Use `defaultIsTouched` to set the default `isTouched` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultMeta: Object | undefined`\n    - Use `defaultMeta` to set any additional default `meta` state for the field.\n    - Unlike `defaultValue`, `defaultError` and `defaultIsTouched`, changing this object will not trigger the field meta to be updated. It is only updated when the `useField` hook mounts and `meta` for that field has not yet been initialized (`meta === undefined`)\n  - `validate async (value, instance) => String | false | undefined`\n    - `validate` is an asynchronous function that is called when the field becomes dirty and is given the opportunity to set/clear/update errors and/or manage general field meta\n    - `instance` is the latest version of the field instance (the same instance that is returned from `useField`)\n    - [See below](#validation) for more information on field validation\n    - Form level validation is also available. [See `useForm`](#useform)\n  - `validatePristine: Bool`\n    - If you want validation to run when instance.isDirty is false, you can set the `validatePristine` option to `true`\n\n### Field Instance\n\nAn `object` with the following components, properties and methods:\n\n- `form: FormInstance`\n  - The root form `instance`\n- `fieldName: String`\n  - The full fieldName (from the root of the form) for this field\n- `value: any`\n  - The current value of this field\n- `meta: Object {}`\n  - `error: String | any`\n    - If an error is returned by the field's `validation` function, or if it is set programmatically, it will be stored here.\n  - `isTouched: Bool`\n    - Will be set to `true` if the field has been touched.\n  - `...any`\n    - Any other meta information can be stored here via the `field.setMeta` or `instance.setFieldMeta` functions\n- `FieldScope: ReactComponent<Provider>`\n  - Optional\n  - This component does not render any markup\n  - It set the new base field scope to this field's `fieldpath`\n  - It supplies this new base field scope, along with the form scope to any `useField` instances inside it.\n  - Any `useField(fieldPath)` instances used insde of `FieldScope` will inherit this field's `fieldPath` as a parent.\n  - See [Field Scoping](#field-scoping) for more information\n- `debounce(Function, wait: Int) => Promise`\n  - This function can be used to debounce any function at the specified wait time. Calls to this function will be deduped per `useField` instance.\n  - Typically, this function is used in the `validate` callback to control validation timing and flow\n  - A new promise is returned for each call to this function\n  - Over the course of multiple overlapping calls to this function, only the latest active promise that both fires and finishes will actually resolve or reject. In other words, if you call this function before a previous call to it resolves, all previous calls will be discarded and never resolve or reject so as to avoid unwanted side effects from stale promises. Turns out this is easier than cancelling promises :)\n- `runValidation() => void`\n  - Use this function to manually run this field's validation.\n  - This function does not run validation for fields.\n\n#### Field-Specific Methods\n\nThe following methods do not require the use of a `fieldPath`. This field's `fieldPath` will automatically be used.\n\n- `setValue((updater(previousValue: any) => newValue: any) | newValue: any, options: Object { isTouched: Bool } )`\n  - Use this function to update a field's corresponding `value` that is stored in the `instance.values` object.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n  - Optionally, an `options` object can be passed.\n    - `isTouched: Bool`\n      - Defaults to `true`\n      - If set to `false`, this operation will not trigger the field's `isTouched` to automatically be set to `true`\n- `setMeta((updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update a fields `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `pushValue(newValue: any)`\n  - Use this function to push a new value into a field that has an array-like value.\n  - An error will be thrown if the field's current value is not an array.\n- `insertValue(insertIndex: Int, value: any)`\n  - Use this function to insert a new value into a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `removeValue(removalIndex: Int)`\n  - Use this function to remove a value from a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `swapValues(firstIndex: Int, secondIndex: Int)`\n\n  - Use this function to swap two values inside of a field that has an array-like value at the specified indices.\n  - An error will be thrown if the field's current value is not an array.\n\n#### Field-Scope Specific Methods\n\nThe following methods are almost exactly the same as their top-level form `instance` counterparts, except for any `fieldPath` that is passed to them will be prefixed with this field's `fieldPath`\n\nFor example, if our field had the `fieldPath` of `foo`, then `setFieldValue('[0]', true)` would be similar to calling `instance.setFieldValue('foo[0]', true)`\n\n- `setFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `setFieldMeta(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `pushFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `insertFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `removeFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `swapFieldValues(subFieldPath, ...)` - [See Form Instance](#form-instance)\n\n## Validation\n\n### Synchronous Validation\n\nIf you don't need to perform any async validation in your form or field, you can just return a value directly:\n\n- If this function resolve truthy, the value returned will be stored in either the form's `instance.meta.error` or the field's `meta.error` value\n- If this function resolve `false`, the error in either the form's `instance.meta.error` or the field's `meta.error` value the will be set to `null`\n- if this function resolve `undefined`, no changes will happen\n\n```js\nconst options = {\n  validate: value => {\n    // To set an error:\n    if (!somethingIsWrong) {\n      return 'This form/field has a form-level error'\n    }\n    // To clear any errors:\n    return false\n  },\n}\n```\n\n### Asynchronous Validation\n\nAsynchronous validation is as easy as returning a promise:\n\n```js\nconst options = {\n  validate: async value => {\n    // If you need to perform async validation, you can return a promise\n    const error = await validateOnServer(values)\n\n    if (error) {\n      return error\n    }\n    return false\n  },\n}\n```\n\n### Mixed Sync + Async Validation:\n\n```js\nconst options = {\n  validate: async value => {\n    // You can mix synchronous and asynchronous validation easily with this pattern\n    // First check for synchronous errors\n    if (!values.foo || !values.bar) {\n      return 'Foo and bar are required!'\n    }\n    // Then return a promise that resolves any async errors\n    const error = await validateOnServer(values)\n    return error ? error : false\n  },\n}\n```\n\n### Debouncing Form Validation\n\nIf you're validation is firing too often, you can debounce any stage of your validation function (sync or async) with React Form's built-in debounce utility. `instance.debounce` returns a promise that only resolves for the latest call after a given amount of time. This way, any outdated validation attempts are discarded automatically.\n\n### Sync Debouncing\n\n```js\nconst options = {\n  validate: (values, instance) => {\n    return instance.debounce(() => {\n      // Wait 1000 milliseconds before validating anything\n      if (!values.foo || !values.bar) {\n        return 'Foo and bar are required!'\n      }\n\n      return false\n    }, 1000)\n  },\n}\n```\n\n### Async Debouncing\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    return instance.debounce(() => {\n      // Wait 2 seconds before validating on the server\n      const error = await validateOnServer(values)\n      return error ? error : false\n    }, 2000)\n  }\n}\n```\n\n### Mixed Sync/Async Debouncing\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    if (!values.foo || !values.bar) {\n      return 'Foo and bar are required!'\n    }\n    // Then, if sync validation passes\n    return instance.debounce(() => {\n      // Wait 2 seconds before validating on the server\n      const error = await validateOnServer(values)\n      return error ? error : false\n    }, 2000)\n  }\n}\n```\n\n### Manually manage form `meta` and field `meta`\n\nReturning an error string or false from validate is simply shorthand for setting/unsetting the `error` property on either the form's `instance.meta` object or a field's `meta` object. If you don't want to set an error and would rather set a success or warning message, you can use the `instance.setMeta` (for form-level validation) or the `instance.setMeta` function (for field-level validation). More than just the error field can be set/used on both the `instance.meta` object and each individual field's `meta` object. You could use this meta information for success messages, warnings, or any other information about a field. Only the `error` and `isTouched` meta properties are used internally by React Form to determine form validity.\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    const serverError = await validateOnServer(values)\n\n    if (serverError) {\n      setMeta({\n        error: serverError,\n        message: null,\n        errorStack: serverError.stack,\n      })\n    } else {\n      setMeta({\n        error: null,\n        message: 'The form is good to be submitted!',\n        errorStack: null,\n      })\n    }\n\n    // Make sure this function returns undefined if you are handling\n    // meta manually.\n  },\n}\n```\n\n## Field Scoping\n\nField scoping is useful for building form inputs that don't require knowledge of the parent field name. Imagine a field component for managing some notes on a form:\n\n```js\nfunction NotesField({ field }) {\n  const fieldInstance = useField(field)\n\n  // ...\n}\n```\n\nThis approach would required us to define the nested `field` when we use the component:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <NotesField field=\"notes\" />\n    </Form>\n  )\n}\n```\n\nThis isn't a problem for shallow forms, but if we are in a deeply nested part of a form UI, it get's more verbose:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <ConfigField field=\"config\" />\n    </Form>\n  )\n}\n\nfunction ConfigField({ field: parentField }) {\n  return (\n    <>\n      <NotesField field={`${parentField}.notes`} />\n      <OtherField field={`${parentField}.other`} />\n      <FooField field={`${parentField}.foo`} />\n    </>\n  )\n}\n```\n\nInstead of requiring that all deep fields be composed with their parent strings, you can use the `FieldScope` component returned by the `useField` hook to create a new field scope for any `useField` instances rendered inside of it:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <ConfigField field=\"config\" />\n    </Form>\n  )\n}\n\nfunction ConfigField({ field: parentField }) {\n  const { FieldScope } = useField('config')\n  return (\n    <FieldScope>\n      <NotesField field=\"notes\" />\n      <OtherField field=\"other\" />\n      <FooField field=\"foo\" />\n    </FieldScope>\n  )\n}\n```\n\nUsing this approach, you can avoid having to compose deeply nested field names!\n\n## `useFormContext`\n\nA hook for gaining access to the form state from within a `Form` component\n\n```js\nimport { useFormContext } from 'react-form'\n\nfunction App() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <Stuff />\n    </Form>\n  )\n}\n\nfunction Stuff() {\n  const formInstance = useFormContext()\n\n  console.log(formInstance)\n}\n```\n\n## `splitFormProps`\n\nA utility function for filter React-Form-related props from an object.\n\n```js\nimport { splitFormProps } from 'react-form'\n\nfunction TextField(props) {\n  const [\n    {\n      field,\n      defaultValue,\n      defaultIsTouched,\n      defaultError,\n      defaultMeta,\n      validatePristine,\n      validate,\n      onSubmit,\n      defaultValues,\n      debugForm,\n    },\n    ...rest\n  ] = props\n\n  const fieldInstance = useField(field, {\n    defaultValue,\n    defaultIsTouched,\n    defaultError,\n    defaultMeta,\n    validatePristine,\n    validate,\n    onSubmit,\n    defaultValues,\n    debugForm,\n  })\n\n  return <input {...rest} />\n}\n```\n","_id":"react-form@4.0.0-alpha.5","dist":{"shasum":"c86de4ce53eec64190031a4ba32d8115d5443d9c","integrity":"sha512-UETRUAzQ1EpB85IAJIbhet07YSN+f8fWLsQxSHsayrDqke3FCPtGqy8JFJ3K1VHb64iQ6ia60SbwSRsKjjFa6A==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.5.tgz","fileCount":9,"unpackedSize":174378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgBNeCRA9TVsSAnZWagAA3bYQAJBM+RiYtkuXOJYPc9+U\n3pQ4ndkrhWaDhFEFDN/OEh0nivnNrv1txhOxWbryCGHifQSVufeAFDYbgrDY\n6iFRHMf1ZxZQpajCeaiODmdIXp+TKosJwvppmHipHlrVt7islAaTWyj77lAu\n//Q+lsDRhPZTThsISJXsBx4vOgkEC5/sp/bG7RN8R+7nJ1n5S2TmXcbzFCaW\nG2R8Fkp4Mi+Vj2FV1YzzX1vyA17km85c8Dx05tUT/HsmQm6M8LXN20f70EIf\nPx6eiRqxZP94OdcX0M+3Zh5ep2H3TcT6hF2VAzLu8UGFtxT9vux1ltkQVmS9\nfTvyyAgc7hU73S462bngzQEgrSRo7wQHkhFM0S0ByEN8fq5N0+TguhIkla1d\nMfhTOHGg1w2+aAXqvvNfXntT2XTpm7r67KinVyJICyNWetFBo4oO2Jw7LbbY\nNeCpLQn4VvffZj+T8yHwnvjG7WndDN6F5+JysCda71uq/CmwBK9QYJLpreO+\nJHgbsstGXx6zMP9hIN+tROtwo3chHIV1r133dQJfe6mJCtThi+byuI8+s3KJ\n0gyRY+e+LS5mIc5+MJ4M5Xxc2yZNFMvnZ94vmwUt02V5BfCJxiwCWbaHPFrI\nx5k8tlXxGwyFWSTDWvFpFg3K7p8s9z0wBXzEm757rmN5myoNtzQEs5ZjCgSn\n2WTb\r\n=vzyF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9jcSzNgpEGGg10iW9AEEYTD2YC08c1g3jwmh/ZGGzrAIhAKzbXXKhkyekdsGSG3PrKYBi6qIXsvSHNH1d26uh1/GL"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.5_1568674653462_0.14252383630040555"},"_hasShrinkwrap":false},"4.0.0-alpha.6":{"name":"react-form","version":"4.0.0-alpha.6","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"readmeFilename":"README.md","readme":"# ⚛️ 💼 React Form\n\nReact hooks for managing form state and lifecycle\n\n<a href=\"https://travis-ci.org/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://travis-ci.org/tannerlinsley/react-form.svg?branch=master\" />\n</a>\n<a href=\"https://npmjs.com/package/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/npm/dm/react-form.svg\" />\n</a>\n<a href=\"https://spectrum.chat/react-form\">\n  <img alt=\"Join the community on Spectrum\" src=\"https://withspectrum.github.io/badge/badge.svg\" />\n</a>\n<a href=\"https://github.com/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/github/stars/tannerlinsley/react-form.svg?style=social&label=Star\" />\n</a>\n<a href=\"https://twitter.com/tannerlinsley\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/twitter/follow/tannerlinsley.svg?style=social&label=Follow\" />\n</a>\n\n<!--\n## Features\n- Put some features here\n-->\n\n## Intro\n\nReact Form is currently in **alpha**! This means:\n\n- The existing API is not stable. Expect major changes/additions **as minor and patch releases** while use-cases evolve.\n- It is not recommended for **mission critical** production code.\n\n## Features\n\n- Built **with** React hooks **for** React hooks\n- Highly practical validation API with 1st-class asynchronous support\n- Built-in validation debouncing with auto cancellation for stale promises\n- Field Scoping for deeply nested form values\n- No nonsense meta management for both forms and form fields\n- Highly memoized for frequent and fast rerenders\n- Flexible form API at the field, scope, and form levels\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Quick Example](#quick-example)\n- [Documentation](#documentation)\n  - [`useForm`](#useform)\n  - [`useField`](#usefield)\n  - [Validation](#validation)\n    - [Synchronous Validation](#synchronous-validation)\n    - [Asynchronous Validation](#asynchronous-validation)\n    - [Mixed Sync + Async Validation:](#mixed-sync--async-validation)\n    - [Debouncing Form Validation](#debouncing-form-validation)\n    - [Sync Debouncing](#sync-debouncing)\n    - [Async Debouncing](#async-debouncing)\n    - [Mixed Sync/Async Debouncing](#mixed-syncasync-debouncing)\n    - [Manually manage form `meta` and field `meta`](#manually-manage-form-meta-and-field-meta)\n  - [Field Scoping](#field-scoping)\n  - [`useFormContext`](#useformcontext)\n  - [`splitFormProps`](#splitformprops)\n\n## Installation\n\n```bash\n$ yarn add react-form\n# or\n$ npm i react-form --save\n```\n\n## Quick Example\n\nNext, let's build a reusable input field.\n\n```js\nimport { useField, splitFormProps } from 'react-form'\n\nconst InputField = React.forwardRef((props, ref) => {\n  // Let's use splitFormProps to get form-specific props\n  const [field, fieldOptions, rest] = splitFormProps(props)\n\n  // Use the useField hook with a field and field options\n  // to access field state\n  const {\n    meta: { error, isTouched, isValidating },\n    getInputProps,\n  } = useField(field, fieldOptions)\n\n  // Build the field\n  return (\n    <>\n      <input\n        {...getInputProps({ ref, ...rest })}\n\n        // This will give us the following props:\n        // {\n        //   value: field.value,\n        //   onChange: e => field.setValue(e.target.value),\n        //   onBlur: e => field.setMeta({ isTouched: true }),\n        //   ref,\n        //   ...rest\n        // }\n        //\n        // You can always wire this up on your own, but prop\n        // getters are great for this!\n      />\n\n      {/*\n        Let's inline some validation and error information\n        for our field\n      */}\n\n      {isValidating ? (\n        <em>Validating...</em>\n      ) : isTouched && error ? (\n        <em>{error}</em>\n      ) : null}\n    </>\n  )\n})\n```\n\nNow that we have an input field, we can build our form!\n\n```js\nfunction MyForm() {\n  // Memoize some default values\n  const defaultValues = React.useMemo(\n    () => ({\n      name: 'Tanner',\n      address: {\n        street: '123 React Road',\n      },\n    }),\n    []\n  )\n\n  // Use the useForm hook to create a form instance\n  const {\n    Form,\n    meta: { isSubmitting, canSubmit },\n  } = useForm({\n    defaultValues,\n    onSubmit: async (values, instance) => {\n      // onSubmit (and everything else in React Form)\n      // has async support out-of-the-box\n      await sendToServer(values)\n\n      // The entire up-to-date form api is\n      // always available, everywhere\n      instance.reset()\n    },\n  })\n\n  return (\n    <Form>\n      <label>\n        Name: <InputField field=\"name\" />\n      </label>\n      <label>\n        Address Street:{' '}\n        <InputField\n          field=\"address.street\"\n          validate={value => (!value ? 'Baz is required!' : false)}\n        />\n      </label>\n\n      {isSubmitting ? 'Submitting...' : null}\n\n      <button type=\"submit\" disabled={!canSubmit}>\n        Submit\n      </button>\n    </Form>\n  )\n}\n```\n\n# Documentation\n\n## `useForm`\n\n```js\nimport { useForm } from 'react-form'\n\nconst instance = useForm(options)\n```\n\n### Form Options\n\n- `defaultValues: any`\n  - Use defaultValues to set the default values state for the form. If this object ever changes, the state will be reset to the new object. Thus, its important to use React.useMemo to make this object only change when necessary\n- `onSubmit(values, instance) => Promise`\n  - `onSubmit` is called when the form's Form element is submitted or when `instance.handleSubmit` is called.\n  - `values` is the submitted values object for the form\n  - `instance` is the latest version of the form instance (the same instance that is returned from `useForm`)\n  - If the promise returned from this function resolves, `instance.isSubmitted` will be set to `true`\n  - When the promise returned from this function settles, `instance.isSubmitting` will be set to `false`\n- `validate async (values, instance) => String | false | undefined`\n  - `validate` is an asynchronous function that is called when the form becomes dirty and is given the opportunity to set/clear/update errors and/or manage general form state\n  - `instance` is the latest version of the form instance (the same instance that is returned from `useForm`)\n  - [See below](#form-validation) for more information on form validation\n  - Field level validation is also available. [See `useField`](#useField)\n- `validatePristine: Bool`\n  - If you want validation to run when instance.isDirty is false, you can set the `validatePristine` option to `true`\n\n### Form Instance\n\nAn `object` with the following components, properties and methods:\n\n- `Form: ReactComponent<form>`\n  - **Required**\n  - This component is a ready-to-use wrapper around the html `form` element.\n  - It will proxy any props you pass it, excluding `onSubmit`.\n    - It properly supplies the form context to any `useField` instances inside it.\n- `values: any`\n  - The current values for the entire form\n- `meta: Object`\n  - `error: String | any`\n    - If an error is returned by the form's `validation` function, or if it is set programmatically, it will be stored here.\n  - `isSubmitting: Bool`\n    - Will be set to `true` if the form is currently submitting\n  - `isDirty: Bool`\n    - Will be set to `true` if the form is dirty\n  - `isSubmitted: Bool`\n    - Will be set to `true` if the form has been submitted successfully\n  - `submissionAttempts: Int`\n    - Will be incremented, starting from `0`, every time a form submission is attempted\n  - `isValid: Bool`\n    - Will be set to `true` if `isDirty === true` and `isValid === true`, meaning that the form has been touched and there are no field-level or form-level errors\n  - `canSubmit: Bool`\n    - Will be set to `true` if `isValid === true` and `isSubmitting === false`\n    - This can be used to enable/disable a submit button for the form.\n  - `...any`\n    - Any other meta information can be stored here via the `field.setMeta` or `instance.setFieldMeta` functions\n- `debugForm: Bool`\n  - If set to `true` the form instance will be serialized and rendered after the `Form` element returned by the instance\n- `reset() => void`\n  - This function will reset the form's state, and set `instance.values` to the `defaultValues` option\n- `setMeta((updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update the form's `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `handleSubmit(formSubmitEvent) => void`\n  - This function is used to submit the form.\n  - It is automatically called when using the `Form` component returned by `useTable`.\n  - If you build your form using your own `form` element, this function is required and should be set as the callback to the `form` via the `onSubmit` prop\n- `debounce(Function, wait: Int) => Promise`\n  - This function can be used to debounce any function at the specified wait time. Calls to this function will be deduped per form-instance.\n  - Typically, this function is used in the `validate` callback to control validation timing and flow\n  - A new promise is returned for each call to this function\n  - Over the course of multiple overlapping calls to this function, only the latest active promise that both fires and finishes will actually resolve or reject. In other words, if you call this function before a previous call to it resolves, all previous calls will be discarded and never resolve or reject so as to avoid unwanted side effects from stale promises. Turns out this is easier than cancelling promises :)\n- `setValues(updater(previousValues: Object) => newValues: Object) | newValues: Object`\n  - Use this function to update the form's `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - If a value is passed, it **will replace the entire values** object, similar to React's `setState` callback style.\n- `runValidation() => void`\n  - Use this function to manually run the form-level validation.\n  - This function does not run validation for fields. If that is a requirement you have, the please file a feature request and I'll make it happen.\n- `getFieldValue(fieldPath: String) => any`\n  - This function returns the `value` from the form's `instance.values` object located at the `fieldPath` string that was passed.\n  - `fieldPath` is a string that supports object notation, eg. `foo[3].bar[1].baz`\n- `getFieldMeta(fieldPath: String) => Object: { error: String | null, ...any }`\n  - This function returns a field's `meta` object from the form.\n  - `fieldPath` is a string that supports object notation, eg. `foo[3].bar[1].baz`\n- `setFieldValue(fieldPath: String, (updater(previousValue: any) => newValue: any) | newValue: any, options: Object { isTouched: Bool } )`\n  - Use this function to update a field's corresponding `value` that is stored in the `instance.values` object.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n  - Optionally, an `options` object can be passed.\n    - `isTouched: Bool`\n      - Defaults to `true`\n      - If set to `false`, this operation will not trigger the field's `isTouched` to automatically be set to `true`\n- `setFieldMeta(fieldPath: String, (updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update a fields `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `pushFieldValue(fieldPath: String, newValue: any)`\n  - Use this function to push a new value into a field that has an array-like value.\n  - An error will be thrown if the field's current value is not an array.\n- `insertFieldValue(fieldPath: String, insertIndex: Int, value: any)`\n  - Use this function to insert a new value into a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `removeFieldValue(fieldPath: String, removalIndex: Int)`\n  - Use this function to remove a value from a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `swapFieldValues(fieldPath: String, firstIndex: Int, secondIndex: Int)`\n  - Use this function to swap two values inside of a field that has an array-like value at the specified indices.\n  - An error will be thrown if the field's current value is not an array.\n\n## `useField`\n\n```js\nimport { useField } from 'react-form'\n\nconst fieldInstance = useField(fieldPath, options)\n```\n\n### Field Options\n\n- `fieldPath: String`\n  - **Required**\n  - The path the value for this field.\n  - Supports deeply nested object notation, eg. `foo[3].bar[1].baz`\n  - Any integers that can be reliably detected between notation boundaries will be treated as array indices: `1`, `[1]`, `1.`, `.1.` or `.1`\n- `options` - An optional object to configure the field\n  - `defaultValue: any`\n    - Use `defaultValue` to set the default `value` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultError: String | undefined`\n    - Use `defaultError` to set the default `error` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultIsTouched: Bool | undefined`\n    - Use `defaultIsTouched` to set the default `isTouched` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultMeta: Object | undefined`\n    - Use `defaultMeta` to set any additional default `meta` state for the field.\n    - Unlike `defaultValue`, `defaultError` and `defaultIsTouched`, changing this object will not trigger the field meta to be updated. It is only updated when the `useField` hook mounts and `meta` for that field has not yet been initialized (`meta === undefined`)\n  - `validate async (value, instance) => String | false | undefined`\n    - `validate` is an asynchronous function that is called when the field becomes dirty and is given the opportunity to set/clear/update errors and/or manage general field meta\n    - `instance` is the latest version of the field instance (the same instance that is returned from `useField`)\n    - [See below](#validation) for more information on field validation\n    - Form level validation is also available. [See `useForm`](#useform)\n  - `validatePristine: Bool`\n    - If you want validation to run when instance.isDirty is false, you can set the `validatePristine` option to `true`\n\n### Field Instance\n\nAn `object` with the following components, properties and methods:\n\n- `form: FormInstance`\n  - The root form `instance`\n- `fieldName: String`\n  - The full fieldName (from the root of the form) for this field\n- `value: any`\n  - The current value of this field\n- `meta: Object {}`\n  - `error: String | any`\n    - If an error is returned by the field's `validation` function, or if it is set programmatically, it will be stored here.\n  - `isTouched: Bool`\n    - Will be set to `true` if the field has been touched.\n  - `...any`\n    - Any other meta information can be stored here via the `field.setMeta` or `instance.setFieldMeta` functions\n- `FieldScope: ReactComponent<Provider>`\n  - Optional\n  - This component does not render any markup\n  - It set the new base field scope to this field's `fieldpath`\n  - It supplies this new base field scope, along with the form scope to any `useField` instances inside it.\n  - Any `useField(fieldPath)` instances used insde of `FieldScope` will inherit this field's `fieldPath` as a parent.\n  - See [Field Scoping](#field-scoping) for more information\n- `debounce(Function, wait: Int) => Promise`\n  - This function can be used to debounce any function at the specified wait time. Calls to this function will be deduped per `useField` instance.\n  - Typically, this function is used in the `validate` callback to control validation timing and flow\n  - A new promise is returned for each call to this function\n  - Over the course of multiple overlapping calls to this function, only the latest active promise that both fires and finishes will actually resolve or reject. In other words, if you call this function before a previous call to it resolves, all previous calls will be discarded and never resolve or reject so as to avoid unwanted side effects from stale promises. Turns out this is easier than cancelling promises :)\n- `runValidation() => void`\n  - Use this function to manually run this field's validation.\n  - This function does not run validation for fields.\n\n#### Field-Specific Methods\n\nThe following methods do not require the use of a `fieldPath`. This field's `fieldPath` will automatically be used.\n\n- `setValue((updater(previousValue: any) => newValue: any) | newValue: any, options: Object { isTouched: Bool } )`\n  - Use this function to update a field's corresponding `value` that is stored in the `instance.values` object.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n  - Optionally, an `options` object can be passed.\n    - `isTouched: Bool`\n      - Defaults to `true`\n      - If set to `false`, this operation will not trigger the field's `isTouched` to automatically be set to `true`\n- `setMeta((updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update a fields `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `pushValue(newValue: any)`\n  - Use this function to push a new value into a field that has an array-like value.\n  - An error will be thrown if the field's current value is not an array.\n- `insertValue(insertIndex: Int, value: any)`\n  - Use this function to insert a new value into a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `removeValue(removalIndex: Int)`\n  - Use this function to remove a value from a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `swapValues(firstIndex: Int, secondIndex: Int)`\n\n  - Use this function to swap two values inside of a field that has an array-like value at the specified indices.\n  - An error will be thrown if the field's current value is not an array.\n\n#### Field-Scope Specific Methods\n\nThe following methods are almost exactly the same as their top-level form `instance` counterparts, except for any `fieldPath` that is passed to them will be prefixed with this field's `fieldPath`\n\nFor example, if our field had the `fieldPath` of `foo`, then `setFieldValue('[0]', true)` would be similar to calling `instance.setFieldValue('foo[0]', true)`\n\n- `setFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `setFieldMeta(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `pushFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `insertFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `removeFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `swapFieldValues(subFieldPath, ...)` - [See Form Instance](#form-instance)\n\n## Validation\n\n### Synchronous Validation\n\nIf you don't need to perform any async validation in your form or field, you can just return an error string directly (or `false` clear an error):\n\n- If a validation function returns a `string`, the value returned will be stored in either the form's `instance.meta.error` or the field's `meta.error` value\n- If a validation function returns `false`, the error in either the form's `instance.meta.error` or the field's `meta.error` value the will be set to `null`\n- if a validation function returns `undefined`, no changes will happen\n\n```js\nconst options = {\n  validate: value => {\n    // To set an error:\n    if (!somethingIsWrong) {\n      return 'This form/field has a form-level error'\n    }\n    // To clear any errors:\n    return false\n  },\n}\n```\n\n### Asynchronous Validation\n\nAsynchronous validation is as easy as returning a promise that resolves to the standard return types shown above in the synchronous validation example:\n\n```js\nconst options = {\n  validate: async value => {\n    const error = await validateOnServer(values)\n\n    if (error) {\n      return error\n    }\n\n    return false\n  },\n}\n```\n\n### Mixed Sync + Async Validation:\n\nYou also mix both synchronous and asynchronous validation easily with this pattern as well:\n\n```js\nconst options = {\n  validate: async value => {\n    // First check for synchronous errors\n    if (!values.foo || !values.bar) {\n      return 'Foo and bar are required!'\n    }\n\n    // Then return a promise that resolves any async errors\n    const error = await validateOnServer(values)\n    return error ? error : false\n  },\n}\n```\n\n### Debouncing Form Validation\n\nIf you're validation is firing too often, you can debounce any stage of your validation function (sync or async) with React Form's built-in debounce utility. `instance.debounce` returns a promise that only resolves for the latest call after a given amount of time. This way, any outdated validation attempts are discarded automatically.\n\n### Sync Debouncing\n\nTo debounce synchronous validation, return the promise from `debounce`, called with a synchronous function:\n\n```js\nconst options = {\n  validate: (values, instance) => {\n    return instance.debounce(() => {\n      // Wait 1000 milliseconds before validating anything\n      if (!values.foo || !values.bar) {\n        return 'Foo and bar are required!'\n      }\n\n      return false\n    }, 1000)\n  },\n}\n```\n\n### Async Debouncing\n\nTo debounce asynchronous validation, return the promise from `debounce`, called with an asynchronous function:\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    return instance.debounce(async () => {\n      // Wait 2 seconds before validating on the server\n      const error = await validateOnServer(values)\n      return error ? error : false\n    }, 2000)\n  },\n}\n```\n\n### Mixed Sync/Async Debouncing\n\nAgain, you can mix both sync/async and immediate/debounced behavior however you'd like!\n\n> **Pro Tip**: This is my favorite and recommended approach to mixed validation.\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    // Check for synchronous errors immediately without debouncing them\n    if (!values.foo || !values.bar) {\n      return 'Foo and bar are required!'\n    }\n\n    // Then, if sync validation passes\n    return instance.debounce(() => {\n      // Wait 2 seconds before validating on the server\n      const error = await validateOnServer(values)\n      return error ? error : false\n    }, 2000)\n  }\n}\n```\n\n### Manually manage form `meta` and field `meta`\n\nReturning an error string or false from validate is simply shorthand for setting/unsetting the `error` property on either the form's `instance.meta` object or a field's `meta` object. If you don't want to set an error and would rather set a success or warning message, you can use the `instance.setMeta` (for form-level validation) or the `instance.setMeta` function (for field-level validation). More than just the error field can be set/used on both the `instance.meta` object and each individual field's `meta` object. You could use this meta information for success messages, warnings, or any other information about a field. Only the `error` and `isTouched` meta properties are used internally by React Form to determine form validity.\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    const serverError = await validateOnServer(values)\n\n    if (serverError) {\n      setMeta({\n        error: serverError,\n        message: null,\n        errorStack: serverError.stack,\n      })\n    } else {\n      setMeta({\n        error: null,\n        message: 'The form is good to be submitted!',\n        errorStack: null,\n      })\n    }\n\n    // Make sure this function returns undefined if you are handling\n    // meta manually.\n  },\n}\n```\n\n## Field Scoping\n\nField scoping is useful for building form inputs that don't require knowledge of the parent field name. Imagine a field component for managing some notes on a form:\n\n```js\nfunction NotesField({ field }) {\n  const fieldInstance = useField(field)\n\n  // ...\n}\n```\n\nThis approach would required us to define the nested `field` when we use the component:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <NotesField field=\"notes\" />\n    </Form>\n  )\n}\n```\n\nThis isn't a problem for shallow forms, but if we are in a deeply nested part of a form UI, it get's more verbose:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <ConfigField field=\"config\" />\n    </Form>\n  )\n}\n\nfunction ConfigField({ field: parentField }) {\n  return (\n    <>\n      <NotesField field={`${parentField}.notes`} />\n      <OtherField field={`${parentField}.other`} />\n      <FooField field={`${parentField}.foo`} />\n    </>\n  )\n}\n```\n\nInstead of requiring that all deep fields be composed with their parent strings, you can use the `FieldScope` component returned by the `useField` hook to create a new field scope for any `useField` instances rendered inside of it:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <ConfigField field=\"config\" />\n    </Form>\n  )\n}\n\nfunction ConfigField({ field: parentField }) {\n  const { FieldScope } = useField('config')\n  return (\n    <FieldScope>\n      <NotesField field=\"notes\" />\n      <OtherField field=\"other\" />\n      <FooField field=\"foo\" />\n    </FieldScope>\n  )\n}\n```\n\nUsing this approach, you can avoid having to compose deeply nested field names!\n\n## `useFormContext`\n\nA hook for gaining access to the form state from within a `Form` component\n\n```js\nimport { useFormContext } from 'react-form'\n\nfunction App() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <Stuff />\n    </Form>\n  )\n}\n\nfunction Stuff() {\n  const formInstance = useFormContext()\n\n  console.log(formInstance)\n}\n```\n\n## `splitFormProps`\n\nA utility function for filter React-Form-related props from an object.\n\n```js\nimport { splitFormProps } from 'react-form'\n\nfunction TextField(props) {\n  const [field, options, rest] = splitFormProps(props)\n\n  // options === {\n  //   defaultValue,\n  //   defaultIsTouched,\n  //   defaultError,\n  //   defaultMeta,\n  //   validatePristine,\n  //   validate,\n  //   onSubmit,\n  //   defaultValues,\n  //   debugForm,\n  // }\n\n  const fieldInstance = useField(field, options)\n\n  return <input {...rest} />\n}\n```\n","_id":"react-form@4.0.0-alpha.6","dist":{"shasum":"0325e83d2bf84912219040a6ef4cfab9c633a1fd","integrity":"sha512-zF38TdmjY2N6yWRUSlikmZMwkqTi8PilYjA/hG/ZMltXTe7LENODiKl8ZkO+Z8vl9HFLch19D9cvJh26fQvX6A==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.6.tgz","fileCount":9,"unpackedSize":185636,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgOSOCRA9TVsSAnZWagAAHJ4P+gN7Hx40Ly66eU7VuhAy\nnBG8zddR37sNpKLjuLDBAVWhJHCgr7R7ieCSXPF8VmLLTFFLhul/dpQGxPjp\nLzFtCRFb94tPqcQ8lLf0vfDOQo2dGWA9oWuQ/gpbqpQOn5MAX/9skAprLNvc\nPiBi2uus5yeRmE2/m2Y1bdsGAbRMT/T3n3Sxhbt73rSqdajYqg+9d0rmB/lc\nh/deKFmpvg7d/KGsCEqegn6Nu4u6HobA7L0pfH1818UK0uw1Zj1ZMgPIU56o\nliJTITF/HkYwabzWc9S/unRUv9OlVhgrPa9jzuVc23urPBXohvCFmuaNcIBx\nsjARqjvDT3sWojHCO+Gs4T3qkJw5Jn0wHUxKMEhV8dAkhLjUMscR96tURlJu\n/xsHQbIBB7v7qHGyhWpUEszJyF1TQ1oxS38oB160BVhorFlnWiTovu1UGQ8j\nTTfuO/INhfPbemsUam61sZuqPfUJdRyvZUMpLrjE41LPXAsVonpJc2JpWtf2\nt9MLyDWzYCgllQEzLeaq+JpmyXh9vaSRnmSBJPCHXBiOrih5vZXawK1aE8k3\nOfB1tTV66WZFvI286XajgtDOZw2OKXD6cqolfNZIA3RqrmBiQopFIwdKzwo6\nla1PVj2pRSAIuVX208GO5wsN0noXln32JSswJrv2TwotA9DRJmqzZud0GEGI\n5yPr\r\n=Uuu9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGwBTd9R2IDWsn1Jio/dDp8omoqL9q7bXMFmNlN65P+yAiAzBXoRcW683gV+86PRWd8TrA7teCQ4nGQiZwGbNs4sTg=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.6_1568728206105_0.9403339928405128"},"_hasShrinkwrap":false},"4.0.0-alpha.7":{"name":"react-form","version":"4.0.0-alpha.7","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"readmeFilename":"README.md","readme":"# ⚛️ 💼 React Form\n\nReact hooks for managing form state and lifecycle\n\n<a href=\"https://travis-ci.org/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://travis-ci.org/tannerlinsley/react-form.svg?branch=master\" />\n</a>\n<a href=\"https://npmjs.com/package/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/npm/dm/react-form.svg\" />\n</a>\n<a href=\"https://spectrum.chat/react-form\">\n  <img alt=\"Join the community on Spectrum\" src=\"https://withspectrum.github.io/badge/badge.svg\" />\n</a>\n<a href=\"https://github.com/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/github/stars/tannerlinsley/react-form.svg?style=social&label=Star\" />\n</a>\n<a href=\"https://twitter.com/tannerlinsley\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/twitter/follow/tannerlinsley.svg?style=social&label=Follow\" />\n</a>\n\n<!--\n## Features\n- Put some features here\n-->\n\n## Intro\n\nReact Form is currently in **alpha**! This means:\n\n- The existing API is not stable. Expect major changes/additions **as minor and patch releases** while use-cases evolve.\n- It is not recommended for **mission critical** production code.\n\n## Features\n\n- Built **with** React hooks **for** React hooks\n- Highly practical validation API with 1st-class asynchronous support\n- Built-in validation debouncing with auto cancellation for stale promises\n- Field Scoping for deeply nested form values\n- No nonsense meta management for both forms and form fields\n- Highly memoized for frequent and fast rerenders\n- Flexible form API at the field, scope, and form levels\n- 7 kb (gzipped)\n\n## Examples & Demos\n\n- [Basic Form](https://codesandbox.io/s/react-form-demo-q9mgm)\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Quick Example](#quick-example)\n- [Documentation](#documentation)\n  - [`useForm`](#useform)\n  - [`useField`](#usefield)\n  - [Validation](#validation)\n    - [Synchronous Validation](#synchronous-validation)\n    - [Asynchronous Validation](#asynchronous-validation)\n    - [Mixed Sync + Async Validation:](#mixed-sync--async-validation)\n    - [Debouncing Form Validation](#debouncing-form-validation)\n    - [Sync Debouncing](#sync-debouncing)\n    - [Async Debouncing](#async-debouncing)\n    - [Mixed Sync/Async Debouncing](#mixed-syncasync-debouncing)\n    - [Manually manage form `meta` and field `meta`](#manually-manage-form-meta-and-field-meta)\n  - [Field Scoping](#field-scoping)\n  - [`useFormContext`](#useformcontext)\n  - [`splitFormProps`](#splitformprops)\n\n## Installation\n\n```bash\n$ yarn add react-form\n# or\n$ npm i react-form --save\n```\n\n## Quick Example\n\nNext, let's build a reusable input field.\n\n```js\nimport { useField, splitFormProps } from 'react-form'\n\nconst InputField = React.forwardRef((props, ref) => {\n  // Let's use splitFormProps to get form-specific props\n  const [field, fieldOptions, rest] = splitFormProps(props)\n\n  // Use the useField hook with a field and field options\n  // to access field state\n  const {\n    meta: { error, isTouched, isValidating },\n    getInputProps,\n  } = useField(field, fieldOptions)\n\n  // Build the field\n  return (\n    <>\n      <input\n        {...getInputProps({ ref, ...rest })}\n\n        // This will give us the following props:\n        // {\n        //   value: field.value,\n        //   onChange: e => field.setValue(e.target.value),\n        //   onBlur: e => field.setMeta({ isTouched: true }),\n        //   ref,\n        //   ...rest\n        // }\n        //\n        // You can always wire this up on your own, but prop\n        // getters are great for this!\n      />\n\n      {/*\n        Let's inline some validation and error information\n        for our field\n      */}\n\n      {isValidating ? (\n        <em>Validating...</em>\n      ) : isTouched && error ? (\n        <em>{error}</em>\n      ) : null}\n    </>\n  )\n})\n```\n\nNow that we have an input field, we can build our form!\n\n```js\nfunction MyForm() {\n  // Memoize some default values\n  const defaultValues = React.useMemo(\n    () => ({\n      name: 'Tanner',\n      address: {\n        street: '123 React Road',\n      },\n    }),\n    []\n  )\n\n  // Use the useForm hook to create a form instance\n  const {\n    Form,\n    meta: { isSubmitting, canSubmit },\n  } = useForm({\n    defaultValues,\n    onSubmit: async (values, instance) => {\n      // onSubmit (and everything else in React Form)\n      // has async support out-of-the-box\n      await sendToServer(values)\n\n      // The entire up-to-date form api is\n      // always available, everywhere\n      instance.reset()\n    },\n  })\n\n  return (\n    <Form>\n      <label>\n        Name: <InputField field=\"name\" />\n      </label>\n      <label>\n        Address Street:{' '}\n        <InputField\n          field=\"address.street\"\n          validate={value => (!value ? 'Baz is required!' : false)}\n        />\n      </label>\n\n      {isSubmitting ? 'Submitting...' : null}\n\n      <button type=\"submit\" disabled={!canSubmit}>\n        Submit\n      </button>\n    </Form>\n  )\n}\n```\n\n# Documentation\n\n## `useForm`\n\n```js\nimport { useForm } from 'react-form'\n\nconst instance = useForm(options)\n```\n\n### Form Options\n\n- `defaultValues: any`\n  - Use defaultValues to set the default values state for the form. If this object ever changes, the state will be reset to the new object. Thus, its important to use React.useMemo to make this object only change when necessary\n- `onSubmit(values, instance) => Promise`\n  - `onSubmit` is called when the form's Form element is submitted or when `instance.handleSubmit` is called.\n  - `values` is the submitted values object for the form\n  - `instance` is the latest version of the form instance (the same instance that is returned from `useForm`)\n  - If the promise returned from this function resolves, `instance.isSubmitted` will be set to `true`\n  - When the promise returned from this function settles, `instance.isSubmitting` will be set to `false`\n- `validate async (values, instance) => String | false | undefined`\n  - `validate` is an asynchronous function that is called when the form becomes dirty and is given the opportunity to set/clear/update errors and/or manage general form state\n  - `instance` is the latest version of the form instance (the same instance that is returned from `useForm`)\n  - [See below](#form-validation) for more information on form validation\n  - Field level validation is also available. [See `useField`](#useField)\n- `validatePristine: Bool`\n  - If you want validation to run when instance.isDirty is false, you can set the `validatePristine` option to `true`\n\n### Form Instance\n\nAn `object` with the following components, properties and methods:\n\n- `Form: ReactComponent<form>`\n  - **Required**\n  - This component is a ready-to-use wrapper around the html `form` element.\n  - It will proxy any props you pass it, excluding `onSubmit`.\n    - It properly supplies the form context to any `useField` instances inside it.\n- `values: any`\n  - The current values for the entire form\n- `meta: Object`\n  - `error: String | any`\n    - If an error is returned by the form's `validation` function, or if it is set programmatically, it will be stored here.\n  - `isSubmitting: Bool`\n    - Will be set to `true` if the form is currently submitting\n  - `isDirty: Bool`\n    - Will be set to `true` if the form is dirty\n  - `isSubmitted: Bool`\n    - Will be set to `true` if the form has been submitted successfully\n  - `submissionAttempts: Int`\n    - Will be incremented, starting from `0`, every time a form submission is attempted\n  - `isValid: Bool`\n    - Will be set to `true` if `isDirty === true` and `isValid === true`, meaning that the form has been touched and there are no field-level or form-level errors\n  - `canSubmit: Bool`\n    - Will be set to `true` if `isValid === true` and `isSubmitting === false`\n    - This can be used to enable/disable a submit button for the form.\n  - `...any`\n    - Any other meta information can be stored here via the `field.setMeta` or `instance.setFieldMeta` functions\n- `formContext: FormInstance`\n  - This can be used to manually link `useField` instances to a parent form. This is useful if `useField` is in the same block scope as `useForm`.\n  - Simply pass `formContext` to `useField` like so: `useField(fieldName, { formContext })`. That field is now linked to the form that provided the `formContext`.\n- `debugForm: Bool`\n  - If set to `true` the form instance will be serialized and rendered after the `Form` element returned by the instance\n- `reset() => void`\n  - This function will reset the form's state, and set `instance.values` to the `defaultValues` option\n- `setMeta((updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update the form's `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `handleSubmit(formSubmitEvent) => void`\n  - This function is used to submit the form.\n  - It is automatically called when using the `Form` component returned by `useTable`.\n  - If you build your form using your own `form` element, this function is required and should be set as the callback to the `form` via the `onSubmit` prop\n- `debounce(Function, wait: Int) => Promise`\n  - This function can be used to debounce any function at the specified wait time. Calls to this function will be deduped per form-instance.\n  - Typically, this function is used in the `validate` callback to control validation timing and flow\n  - A new promise is returned for each call to this function\n  - Over the course of multiple overlapping calls to this function, only the latest active promise that both fires and finishes will actually resolve or reject. In other words, if you call this function before a previous call to it resolves, all previous calls will be discarded and never resolve or reject so as to avoid unwanted side effects from stale promises. Turns out this is easier than cancelling promises :)\n- `setValues(updater(previousValues: Object) => newValues: Object) | newValues: Object`\n  - Use this function to update the form's `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - If a value is passed, it **will replace the entire values** object, similar to React's `setState` callback style.\n- `runValidation() => void`\n  - Use this function to manually run the form-level validation.\n  - This function does not run validation for fields. If that is a requirement you have, the please file a feature request and I'll make it happen.\n- `getFieldValue(fieldPath: String) => any`\n  - This function returns the `value` from the form's `instance.values` object located at the `fieldPath` string that was passed.\n  - `fieldPath` is a string that supports object notation, eg. `foo[3].bar[1].baz`\n- `getFieldMeta(fieldPath: String) => Object: { error: String | null, ...any }`\n  - This function returns a field's `meta` object from the form.\n  - `fieldPath` is a string that supports object notation, eg. `foo[3].bar[1].baz`\n- `setFieldValue(fieldPath: String, (updater(previousValue: any) => newValue: any) | newValue: any, options: Object { isTouched: Bool } )`\n  - Use this function to update a field's corresponding `value` that is stored in the `instance.values` object.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n  - Optionally, an `options` object can be passed.\n    - `isTouched: Bool`\n      - Defaults to `true`\n      - If set to `false`, this operation will not trigger the field's `isTouched` to automatically be set to `true`\n- `setFieldMeta(fieldPath: String, (updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update a fields `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `pushFieldValue(fieldPath: String, newValue: any)`\n  - Use this function to push a new value into a field that has an array-like value.\n  - An error will be thrown if the field's current value is not an array.\n- `insertFieldValue(fieldPath: String, insertIndex: Int, value: any)`\n  - Use this function to insert a new value into a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `removeFieldValue(fieldPath: String, removalIndex: Int)`\n  - Use this function to remove a value from a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `swapFieldValues(fieldPath: String, firstIndex: Int, secondIndex: Int)`\n  - Use this function to swap two values inside of a field that has an array-like value at the specified indices.\n  - An error will be thrown if the field's current value is not an array.\n\n## `useField`\n\n```js\nimport { useField } from 'react-form'\n\nconst fieldInstance = useField(fieldPath, options)\n```\n\n### Field Options\n\n- `fieldPath: String`\n  - **Required**\n  - The path the value for this field.\n  - Supports deeply nested object notation, eg. `foo[3].bar[1].baz`\n  - Any integers that can be reliably detected between notation boundaries will be treated as array indices: `1`, `[1]`, `1.`, `.1.` or `.1`\n- `options` - An optional object to configure the field\n  - `defaultValue: any`\n    - Use `defaultValue` to set the default `value` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultError: String | undefined`\n    - Use `defaultError` to set the default `error` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultIsTouched: Bool | undefined`\n    - Use `defaultIsTouched` to set the default `isTouched` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultMeta: Object | undefined`\n    - Use `defaultMeta` to set any additional default `meta` state for the field.\n    - Unlike `defaultValue`, `defaultError` and `defaultIsTouched`, changing this object will not trigger the field meta to be updated. It is only updated when the `useField` hook mounts and `meta` for that field has not yet been initialized (`meta === undefined`)\n  - `validate async (value, instance) => String | false | undefined`\n    - `validate` is an asynchronous function that is called when the field becomes dirty and is given the opportunity to set/clear/update errors and/or manage general field meta\n    - `instance` is the latest version of the field instance (the same instance that is returned from `useField`)\n    - [See below](#validation) for more information on field validation\n    - Form level validation is also available. [See `useForm`](#useform)\n  - `filterValue: (value, instance) => newValue`\n    - The `filterValue` function is used to manipulate new values before they are set via `field.setValue` and `instance.setFieldValue`.\n    - This is useful for restricting fields to specific values, eg. min/max, length, regex replacement, disallowing invalid values (as opposed to warning about them), among limitless others.\n  - `validatePristine: Bool`\n    - If you want validation to run when instance.isDirty is false, you can set the `validatePristine` option to `true`\n\n### Field Instance\n\nAn `object` with the following components, properties and methods:\n\n- `form: FormInstance`\n  - The root form `instance`\n- `fieldName: String`\n  - The full fieldName (from the root of the form) for this field\n- `value: any`\n  - The current value of this field\n- `meta: Object {}`\n  - `error: String | any`\n    - If an error is returned by the field's `validation` function, or if it is set programmatically, it will be stored here.\n  - `isTouched: Bool`\n    - Will be set to `true` if the field has been touched.\n  - `...any`\n    - Any other meta information can be stored here via the `field.setMeta` or `instance.setFieldMeta` functions\n- `FieldScope: ReactComponent<Provider>`\n  - Optional\n  - This component does not render any markup\n  - It set the new base field scope to this field's `fieldpath`\n  - It supplies this new base field scope, along with the form scope to any `useField` instances inside it.\n  - Any `useField(fieldPath)` instances used insde of `FieldScope` will inherit this field's `fieldPath` as a parent.\n  - See [Field Scoping](#field-scoping) for more information\n- `debounce(Function, wait: Int) => Promise`\n  - This function can be used to debounce any function at the specified wait time. Calls to this function will be deduped per `useField` instance.\n  - Typically, this function is used in the `validate` callback to control validation timing and flow\n  - A new promise is returned for each call to this function\n  - Over the course of multiple overlapping calls to this function, only the latest active promise that both fires and finishes will actually resolve or reject. In other words, if you call this function before a previous call to it resolves, all previous calls will be discarded and never resolve or reject so as to avoid unwanted side effects from stale promises. Turns out this is easier than cancelling promises :)\n- `runValidation() => void`\n  - Use this function to manually run this field's validation.\n  - This function does not run validation for fields.\n\n#### Field-Specific Methods\n\nThe following methods do not require the use of a `fieldPath`. This field's `fieldPath` will automatically be used.\n\n- `setValue((updater(previousValue: any) => newValue: any) | newValue: any, options: Object { isTouched: Bool } )`\n  - Use this function to update a field's corresponding `value` that is stored in the `instance.values` object.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n  - Optionally, an `options` object can be passed.\n    - `isTouched: Bool`\n      - Defaults to `true`\n      - If set to `false`, this operation will not trigger the field's `isTouched` to automatically be set to `true`\n- `setMeta((updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update a fields `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `pushValue(newValue: any)`\n  - Use this function to push a new value into a field that has an array-like value.\n  - An error will be thrown if the field's current value is not an array.\n- `insertValue(insertIndex: Int, value: any)`\n  - Use this function to insert a new value into a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `removeValue(removalIndex: Int)`\n  - Use this function to remove a value from a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `swapValues(firstIndex: Int, secondIndex: Int)`\n\n  - Use this function to swap two values inside of a field that has an array-like value at the specified indices.\n  - An error will be thrown if the field's current value is not an array.\n\n#### Field-Scope Specific Methods\n\nThe following methods are almost exactly the same as their top-level form `instance` counterparts, except for any `fieldPath` that is passed to them will be prefixed with this field's `fieldPath`\n\nFor example, if our field had the `fieldPath` of `foo`, then `setFieldValue('[0]', true)` would be similar to calling `instance.setFieldValue('foo[0]', true)`\n\n- `setFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `setFieldMeta(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `pushFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `insertFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `removeFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `swapFieldValues(subFieldPath, ...)` - [See Form Instance](#form-instance)\n\n## Validation\n\n### Synchronous Validation\n\nIf you don't need to perform any async validation in your form or field, you can just return an error string directly (or `false` clear an error):\n\n- If a validation function returns a `string`, the value returned will be stored in either the form's `instance.meta.error` or the field's `meta.error` value\n- If a validation function returns `false`, the error in either the form's `instance.meta.error` or the field's `meta.error` value the will be set to `null`\n- if a validation function returns `undefined`, no changes will happen\n\n```js\nconst options = {\n  validate: value => {\n    // To set an error:\n    if (!somethingIsWrong) {\n      return 'This form/field has a form-level error'\n    }\n    // To clear any errors:\n    return false\n  },\n}\n```\n\n### Asynchronous Validation\n\nAsynchronous validation is as easy as returning a promise that resolves to the standard return types shown above in the synchronous validation example:\n\n```js\nconst options = {\n  validate: async value => {\n    const error = await validateOnServer(values)\n\n    if (error) {\n      return error\n    }\n\n    return false\n  },\n}\n```\n\n### Mixed Sync + Async Validation:\n\nYou also mix both synchronous and asynchronous validation easily with this pattern as well:\n\n```js\nconst options = {\n  validate: async value => {\n    // First check for synchronous errors\n    if (!values.foo || !values.bar) {\n      return 'Foo and bar are required!'\n    }\n\n    // Then return a promise that resolves any async errors\n    const error = await validateOnServer(values)\n    return error ? error : false\n  },\n}\n```\n\n### Debouncing Form Validation\n\nIf you're validation is firing too often, you can debounce any stage of your validation function (sync or async) with React Form's built-in debounce utility. `instance.debounce` returns a promise that only resolves for the latest call after a given amount of time. This way, any outdated validation attempts are discarded automatically.\n\n### Sync Debouncing\n\nTo debounce synchronous validation, return the promise from `debounce`, called with a synchronous function:\n\n```js\nconst options = {\n  validate: (values, instance) => {\n    return instance.debounce(() => {\n      // Wait 1000 milliseconds before validating anything\n      if (!values.foo || !values.bar) {\n        return 'Foo and bar are required!'\n      }\n\n      return false\n    }, 1000)\n  },\n}\n```\n\n### Async Debouncing\n\nTo debounce asynchronous validation, return the promise from `debounce`, called with an asynchronous function:\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    return instance.debounce(async () => {\n      // Wait 2 seconds before validating on the server\n      const error = await validateOnServer(values)\n      return error ? error : false\n    }, 2000)\n  },\n}\n```\n\n### Mixed Sync/Async Debouncing\n\nAgain, you can mix both sync/async and immediate/debounced behavior however you'd like!\n\n> **Pro Tip**: This is my favorite and recommended approach to mixed validation.\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    // Check for synchronous errors immediately without debouncing them\n    if (!values.foo || !values.bar) {\n      return 'Foo and bar are required!'\n    }\n\n    // Then, if sync validation passes\n    return instance.debounce(() => {\n      // Wait 2 seconds before validating on the server\n      const error = await validateOnServer(values)\n      return error ? error : false\n    }, 2000)\n  }\n}\n```\n\n### Manually manage form `meta` and field `meta`\n\nReturning an error string or false from validate is simply shorthand for setting/unsetting the `error` property on either the form's `instance.meta` object or a field's `meta` object. If you don't want to set an error and would rather set a success or warning message, you can use the `instance.setMeta` (for form-level validation) or the `instance.setMeta` function (for field-level validation). More than just the error field can be set/used on both the `instance.meta` object and each individual field's `meta` object. You could use this meta information for success messages, warnings, or any other information about a field. Only the `error` and `isTouched` meta properties are used internally by React Form to determine form validity.\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    const serverError = await validateOnServer(values)\n\n    if (serverError) {\n      setMeta({\n        error: serverError,\n        message: null,\n        errorStack: serverError.stack,\n      })\n    } else {\n      setMeta({\n        error: null,\n        message: 'The form is good to be submitted!',\n        errorStack: null,\n      })\n    }\n\n    // Make sure this function returns undefined if you are handling\n    // meta manually.\n  },\n}\n```\n\n## Field Scoping\n\nField scoping is useful for building form inputs that don't require knowledge of the parent field name. Imagine a field component for managing some notes on a form:\n\n```js\nfunction NotesField({ field }) {\n  const fieldInstance = useField(field)\n\n  // ...\n}\n```\n\nThis approach would required us to define the nested `field` when we use the component:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <NotesField field=\"notes\" />\n    </Form>\n  )\n}\n```\n\nThis isn't a problem for shallow forms, but if we are in a deeply nested part of a form UI, it get's more verbose:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <ConfigField field=\"config\" />\n    </Form>\n  )\n}\n\nfunction ConfigField({ field: parentField }) {\n  return (\n    <>\n      <NotesField field={`${parentField}.notes`} />\n      <OtherField field={`${parentField}.other`} />\n      <FooField field={`${parentField}.foo`} />\n    </>\n  )\n}\n```\n\nInstead of requiring that all deep fields be composed with their parent strings, you can use the `FieldScope` component returned by the `useField` hook to create a new field scope for any `useField` instances rendered inside of it:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <ConfigField field=\"config\" />\n    </Form>\n  )\n}\n\nfunction ConfigField({ field: parentField }) {\n  const { FieldScope } = useField('config')\n  return (\n    <FieldScope>\n      <NotesField field=\"notes\" />\n      <OtherField field=\"other\" />\n      <FooField field=\"foo\" />\n    </FieldScope>\n  )\n}\n```\n\nUsing this approach, you can avoid having to compose deeply nested field names!\n\n## `useFormContext`\n\nA hook for gaining access to the form state from within a `Form` component\n\n```js\nimport { useFormContext } from 'react-form'\n\nfunction App() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <Stuff />\n    </Form>\n  )\n}\n\nfunction Stuff() {\n  const formInstance = useFormContext()\n\n  console.log(formInstance)\n}\n```\n\n## `splitFormProps`\n\nA utility function for filter React-Form-related props from an object.\n\n```js\nimport { splitFormProps } from 'react-form'\n\nfunction TextField(props) {\n  const [field, options, rest] = splitFormProps(props)\n\n  // options === {\n  //   defaultValue,\n  //   defaultIsTouched,\n  //   defaultError,\n  //   defaultMeta,\n  //   validatePristine,\n  //   validate,\n  //   onSubmit,\n  //   defaultValues,\n  //   debugForm,\n  // }\n\n  const fieldInstance = useField(field, options)\n\n  return <input {...rest} />\n}\n```\n\n## Manually Link a Field to a Form\n\nIf you get into a situation where you need to use `useForm` and `useField` in the same block scope, you may see a missing form context error. This is because your `useField` usage is not inside of a `<Form>` component. To get around this error for this use case, you can pass the form's `instance.formContext` value to the `useField` options to manually link them together:\n\n```js\nfunction App() {\n  const { Form, formContext } = useForm()\n\n  // This field will now be manually linked to the form above\n  const fieldInstance = useField('age', {\n    formContext,\n  })\n\n  return <Form>...</Form>\n}\n```\n","_id":"react-form@4.0.0-alpha.7","dist":{"shasum":"fb86b4e48a7446bd56fbf6937cb305440a760ab7","integrity":"sha512-HXCNTq+IflB2vE8REDIExGnh4xuTx4G2U0QNa7wmqpnX8JPlMXutPtX9QbJOl1oCVGLHNQsS6sEVPtRekelGng==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.7.tgz","fileCount":9,"unpackedSize":191064,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgRw3CRA9TVsSAnZWagAACvsP/AtQidGTWAnoo59TQf5d\nzf1ZrcGGyF/oMD+8eMvqrKMQAp+UcgDGZLlbM9QZ9QIORMqSwfxxAvCCmwF0\nvEOAe+e4uHKvshtnfgm7ZraV8NFiwaPB312cDcUkIstJItXaI1ouu+MiEz1G\nB9XaFoxqO4XmK6ULSyM3hPVwVF3IdEbovRpxeeXWg3BnQosqKAtg5AIfKbhN\no2Ix1uv2ec31IJY7Nfmov4xncQf1MXK3t2B6V2vcStYq/W1E1/Ng8zksbxGS\nK/GivPzBlGYOJ1iXRdDmxpdYDaH0BMrTc9R8HSuvvDTvlaGOMHYx84qboLV5\nB0728KRdowz7UYZ+mrp07RTy/jY+aEhym7YvmpUh/zRUrIoraWIsryXDgzmv\nwBgFxgUUhFGJlS5w34O55QBdE45/32nuIQa10L70Gr7aVRRjPn98NzLcn5tC\nZfG/F9kq83R2dqlTOZCQqzZOioH9uHZVLR4WTdLwAFsLynqWEpSLi4VfevuY\nm18M7j1fTAqmIkSUmxyyFY2Y9AXyAkuODQ9WR4N8WVzQs+triPB5+AWAW8Md\n/wIMinWRSjNE66HpvLTYDw+QbhXoiY913NsMdEZC4jgyEnJzl6STj06t9kkR\nMqbRCKNKak1UZJPREVJAXeYYU8VRlHaK1mWO+i3F1UxreopOvyTviQu9D+4c\ntHaB\r\n=Vzq+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1Kc6LA1wIc8JmxNH8iyHrmXPZ8JwTlFWF2cf+2mdwBAIhAMrd75xgHgMqoMhUl3Qlw4QYkHPKXQOCAQbnaUgBLv5s"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.7_1568742454362_0.6328244228877171"},"_hasShrinkwrap":false},"4.0.0-alpha.8":{"name":"react-form","version":"4.0.0-alpha.8","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"readmeFilename":"README.md","readme":"# ⚛️ 💼 React Form\n\nReact hooks for managing form state and lifecycle\n\n<a href=\"https://travis-ci.org/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://travis-ci.org/tannerlinsley/react-form.svg?branch=master\" />\n</a>\n<a href=\"https://npmjs.com/package/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/npm/dm/react-form.svg\" />\n</a>\n<a href=\"https://bundlephobia.com/result?p=react-form@next\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://badgen.net/bundlephobia/minzip/react-form@next\" />\n</a>\n<a href=\"https://spectrum.chat/react-form\">\n  <img alt=\"Join the community on Spectrum\" src=\"https://withspectrum.github.io/badge/badge.svg\" />\n</a>\n<a href=\"https://github.com/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/github/stars/tannerlinsley/react-form.svg?style=social&label=Star\" />\n</a>\n<a href=\"https://twitter.com/tannerlinsley\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/twitter/follow/tannerlinsley.svg?style=social&label=Follow\" />\n</a>\n\n<!--\n## Features\n- Put some features here\n-->\n\n## Intro\n\nReact Form is currently in **alpha**! This means:\n\n- The existing API is not stable. Expect major changes/additions **as minor and patch releases** while use-cases evolve.\n- It is not recommended for **mission critical** production code.\n\n## Features\n\n- Built **with** React hooks **for** React hooks\n- Highly practical validation API with 1st-class asynchronous support\n- Built-in validation debouncing with auto cancellation for stale promises\n- Field Scoping for deeply nested form values\n- No nonsense meta management for both forms and form fields\n- Highly memoized for frequent and fast rerenders\n- Flexible form API at the field, scope, and form levels\n- 4.3 kb (minzipped)\n\n## Examples & Demos\n\n- [Basic Form](https://codesandbox.io/s/react-form-demo-q9mgm)\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Quick Example](#quick-example)\n- [Documentation](#documentation)\n  - [`useForm`](#useform)\n  - [`useField`](#usefield)\n  - [Validation](#validation)\n    - [Synchronous Validation](#synchronous-validation)\n    - [Asynchronous Validation](#asynchronous-validation)\n    - [Mixed Sync + Async Validation:](#mixed-sync--async-validation)\n    - [Debouncing Form Validation](#debouncing-form-validation)\n    - [Sync Debouncing](#sync-debouncing)\n    - [Async Debouncing](#async-debouncing)\n    - [Mixed Sync/Async Debouncing](#mixed-syncasync-debouncing)\n    - [Manually manage form `meta` and field `meta`](#manually-manage-form-meta-and-field-meta)\n  - [Field Scoping](#field-scoping)\n  - [`useFormContext`](#useformcontext)\n  - [`splitFormProps`](#splitformprops)\n\n## Installation\n\n```bash\n$ yarn add react-form\n# or\n$ npm i react-form --save\n```\n\n## Quick Example\n\nNext, let's build a reusable input field.\n\n```js\nimport { useField, splitFormProps } from 'react-form'\n\nconst InputField = React.forwardRef((props, ref) => {\n  // Let's use splitFormProps to get form-specific props\n  const [field, fieldOptions, rest] = splitFormProps(props)\n\n  // Use the useField hook with a field and field options\n  // to access field state\n  const {\n    meta: { error, isTouched, isValidating },\n    getInputProps,\n  } = useField(field, fieldOptions)\n\n  // Build the field\n  return (\n    <>\n      <input\n        {...getInputProps({ ref, ...rest })}\n\n        // This will give us the following props:\n        // {\n        //   value: field.value,\n        //   onChange: e => field.setValue(e.target.value),\n        //   onBlur: e => field.setMeta({ isTouched: true }),\n        //   ref,\n        //   ...rest\n        // }\n        //\n        // You can always wire this up on your own, but prop\n        // getters are great for this!\n      />\n\n      {/*\n        Let's inline some validation and error information\n        for our field\n      */}\n\n      {isValidating ? (\n        <em>Validating...</em>\n      ) : isTouched && error ? (\n        <em>{error}</em>\n      ) : null}\n    </>\n  )\n})\n```\n\nNow that we have an input field, we can build our form!\n\n```js\nfunction MyForm() {\n  // Memoize some default values\n  const defaultValues = React.useMemo(\n    () => ({\n      name: 'Tanner',\n      address: {\n        street: '123 React Road',\n      },\n    }),\n    []\n  )\n\n  // Use the useForm hook to create a form instance\n  const {\n    Form,\n    meta: { isSubmitting, canSubmit },\n  } = useForm({\n    defaultValues,\n    onSubmit: async (values, instance) => {\n      // onSubmit (and everything else in React Form)\n      // has async support out-of-the-box\n      await sendToServer(values)\n\n      // The entire up-to-date form api is\n      // always available, everywhere\n      instance.reset()\n    },\n  })\n\n  return (\n    <Form>\n      <label>\n        Name: <InputField field=\"name\" />\n      </label>\n      <label>\n        Address Street:{' '}\n        <InputField\n          field=\"address.street\"\n          validate={value => (!value ? 'Baz is required!' : false)}\n        />\n      </label>\n\n      {isSubmitting ? 'Submitting...' : null}\n\n      <button type=\"submit\" disabled={!canSubmit}>\n        Submit\n      </button>\n    </Form>\n  )\n}\n```\n\n# Documentation\n\n## `useForm`\n\n```js\nimport { useForm } from 'react-form'\n\nconst instance = useForm(options)\n```\n\n### Form Options\n\n- `defaultValues: any`\n  - Use defaultValues to set the default values state for the form. If this object ever changes, the state will be reset to the new object. Thus, its important to use React.useMemo to make this object only change when necessary\n- `onSubmit(values, instance) => Promise`\n  - `onSubmit` is called when the form's Form element is submitted or when `instance.handleSubmit` is called.\n  - `values` is the submitted values object for the form\n  - `instance` is the latest version of the form instance (the same instance that is returned from `useForm`)\n  - If the promise returned from this function resolves, `instance.isSubmitted` will be set to `true`\n  - When the promise returned from this function settles, `instance.isSubmitting` will be set to `false`\n- `validate async (values, instance) => String | false | undefined`\n  - `validate` is an asynchronous function that is called when the form becomes dirty and is given the opportunity to set/clear/update errors and/or manage general form state\n  - `instance` is the latest version of the form instance (the same instance that is returned from `useForm`)\n  - [See below](#form-validation) for more information on form validation\n  - Field level validation is also available. [See `useField`](#useField)\n- `validatePristine: Bool`\n  - If you want validation to run when instance.isDirty is false, you can set the `validatePristine` option to `true`\n\n### Form Instance\n\nAn `object` with the following components, properties and methods:\n\n- `Form: ReactComponent<form>`\n  - **Required**\n  - This component is a ready-to-use wrapper around the html `form` element.\n  - It will proxy any props you pass it, excluding `onSubmit`.\n    - It properly supplies the form context to any `useField` instances inside it.\n- `values: any`\n  - The current values for the entire form\n- `meta: Object`\n  - `error: String | any`\n    - If an error is returned by the form's `validation` function, or if it is set programmatically, it will be stored here.\n  - `isSubmitting: Bool`\n    - Will be set to `true` if the form is currently submitting\n  - `isDirty: Bool`\n    - Will be set to `true` if the form is dirty\n  - `isSubmitted: Bool`\n    - Will be set to `true` if the form has been submitted successfully\n  - `submissionAttempts: Int`\n    - Will be incremented, starting from `0`, every time a form submission is attempted\n  - `isValid: Bool`\n    - Will be set to `true` if `isDirty === true` and `isValid === true`, meaning that the form has been touched and there are no field-level or form-level errors\n  - `canSubmit: Bool`\n    - Will be set to `true` if `isValid === true` and `isSubmitting === false`\n    - This can be used to enable/disable a submit button for the form.\n  - `...any`\n    - Any other meta information can be stored here via the `field.setMeta` or `instance.setFieldMeta` functions\n- `formContext: FormInstance`\n  - This can be used to manually link `useField` instances to a parent form. This is useful if `useField` is in the same block scope as `useForm`.\n  - Simply pass `formContext` to `useField` like so: `useField(fieldName, { formContext })`. That field is now linked to the form that provided the `formContext`.\n- `debugForm: Bool`\n  - If set to `true` the form instance will be serialized and rendered after the `Form` element returned by the instance\n- `reset() => void`\n  - This function will reset the form's state, and set `instance.values` to the `defaultValues` option\n- `setMeta((updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update the form's `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `handleSubmit(formSubmitEvent) => void`\n  - This function is used to submit the form.\n  - It is automatically called when using the `Form` component returned by `useTable`.\n  - If you build your form using your own `form` element, this function is required and should be set as the callback to the `form` via the `onSubmit` prop\n- `debounce(Function, wait: Int) => Promise`\n  - This function can be used to debounce any function at the specified wait time. Calls to this function will be deduped per form-instance.\n  - Typically, this function is used in the `validate` callback to control validation timing and flow\n  - A new promise is returned for each call to this function\n  - Over the course of multiple overlapping calls to this function, only the latest active promise that both fires and finishes will actually resolve or reject. In other words, if you call this function before a previous call to it resolves, all previous calls will be discarded and never resolve or reject so as to avoid unwanted side effects from stale promises. Turns out this is easier than cancelling promises :)\n- `setValues(updater(previousValues: Object) => newValues: Object) | newValues: Object`\n  - Use this function to update the form's `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - If a value is passed, it **will replace the entire values** object, similar to React's `setState` callback style.\n- `runValidation() => void`\n  - Use this function to manually run the form-level validation.\n  - This function does not run validation for fields. If that is a requirement you have, the please file a feature request and I'll make it happen.\n- `getFieldValue(fieldPath: String) => any`\n  - This function returns the `value` from the form's `instance.values` object located at the `fieldPath` string that was passed.\n  - `fieldPath` is a string that supports object notation, eg. `foo[3].bar[1].baz`\n- `getFieldMeta(fieldPath: String) => Object: { error: String | null, ...any }`\n  - This function returns a field's `meta` object from the form.\n  - `fieldPath` is a string that supports object notation, eg. `foo[3].bar[1].baz`\n- `setFieldValue(fieldPath: String, (updater(previousValue: any) => newValue: any) | newValue: any, options: Object { isTouched: Bool } )`\n  - Use this function to update a field's corresponding `value` that is stored in the `instance.values` object.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n  - Optionally, an `options` object can be passed.\n    - `isTouched: Bool`\n      - Defaults to `true`\n      - If set to `false`, this operation will not trigger the field's `isTouched` to automatically be set to `true`\n- `setFieldMeta(fieldPath: String, (updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update a fields `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `pushFieldValue(fieldPath: String, newValue: any)`\n  - Use this function to push a new value into a field that has an array-like value.\n  - An error will be thrown if the field's current value is not an array.\n- `insertFieldValue(fieldPath: String, insertIndex: Int, value: any)`\n  - Use this function to insert a new value into a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `removeFieldValue(fieldPath: String, removalIndex: Int)`\n  - Use this function to remove a value from a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `swapFieldValues(fieldPath: String, firstIndex: Int, secondIndex: Int)`\n  - Use this function to swap two values inside of a field that has an array-like value at the specified indices.\n  - An error will be thrown if the field's current value is not an array.\n\n## `useField`\n\n```js\nimport { useField } from 'react-form'\n\nconst fieldInstance = useField(fieldPath, options)\n```\n\n### Field Options\n\n- `fieldPath: String`\n  - **Required**\n  - The path the value for this field.\n  - Supports deeply nested object notation, eg. `foo[3].bar[1].baz`\n  - Any integers that can be reliably detected between notation boundaries will be treated as array indices: `1`, `[1]`, `1.`, `.1.` or `.1`\n- `options` - An optional object to configure the field\n  - `defaultValue: any`\n    - Use `defaultValue` to set the default `value` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultError: String | undefined`\n    - Use `defaultError` to set the default `error` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultIsTouched: Bool | undefined`\n    - Use `defaultIsTouched` to set the default `isTouched` state for the field.\n    - If this object ever changes, the field meta will be reset to the new value. Thus, its important to use `React.useMemo` to make this object only change when necessary\n  - `defaultMeta: Object | undefined`\n    - Use `defaultMeta` to set any additional default `meta` state for the field.\n    - Unlike `defaultValue`, `defaultError` and `defaultIsTouched`, changing this object will not trigger the field meta to be updated. It is only updated when the `useField` hook mounts and `meta` for that field has not yet been initialized (`meta === undefined`)\n  - `validate async (value, instance) => String | false | undefined`\n    - `validate` is an asynchronous function that is called when the field becomes dirty and is given the opportunity to set/clear/update errors and/or manage general field meta\n    - `instance` is the latest version of the field instance (the same instance that is returned from `useField`)\n    - [See below](#validation) for more information on field validation\n    - Form level validation is also available. [See `useForm`](#useform)\n  - `filterValue: (value, instance) => newValue`\n    - The `filterValue` function is used to manipulate new values before they are set via `field.setValue` and `instance.setFieldValue`.\n    - This is useful for restricting fields to specific values, eg. min/max, length, regex replacement, disallowing invalid values (as opposed to warning about them), among limitless others.\n  - `validatePristine: Bool`\n    - If you want validation to run when instance.isDirty is false, you can set the `validatePristine` option to `true`\n\n### Field Instance\n\nAn `object` with the following components, properties and methods:\n\n- `form: FormInstance`\n  - The root form `instance`\n- `fieldName: String`\n  - The full fieldName (from the root of the form) for this field\n- `value: any`\n  - The current value of this field\n- `meta: Object {}`\n  - `error: String | any`\n    - If an error is returned by the field's `validation` function, or if it is set programmatically, it will be stored here.\n  - `isTouched: Bool`\n    - Will be set to `true` if the field has been touched.\n  - `...any`\n    - Any other meta information can be stored here via the `field.setMeta` or `instance.setFieldMeta` functions\n- `FieldScope: ReactComponent<Provider>`\n  - Optional\n  - This component does not render any markup\n  - It set the new base field scope to this field's `fieldpath`\n  - It supplies this new base field scope, along with the form scope to any `useField` instances inside it.\n  - Any `useField(fieldPath)` instances used insde of `FieldScope` will inherit this field's `fieldPath` as a parent.\n  - See [Field Scoping](#field-scoping) for more information\n- `debounce(Function, wait: Int) => Promise`\n  - This function can be used to debounce any function at the specified wait time. Calls to this function will be deduped per `useField` instance.\n  - Typically, this function is used in the `validate` callback to control validation timing and flow\n  - A new promise is returned for each call to this function\n  - Over the course of multiple overlapping calls to this function, only the latest active promise that both fires and finishes will actually resolve or reject. In other words, if you call this function before a previous call to it resolves, all previous calls will be discarded and never resolve or reject so as to avoid unwanted side effects from stale promises. Turns out this is easier than cancelling promises :)\n- `runValidation() => void`\n  - Use this function to manually run this field's validation.\n  - This function does not run validation for fields.\n\n#### Field-Specific Methods\n\nThe following methods do not require the use of a `fieldPath`. This field's `fieldPath` will automatically be used.\n\n- `setValue((updater(previousValue: any) => newValue: any) | newValue: any, options: Object { isTouched: Bool } )`\n  - Use this function to update a field's corresponding `value` that is stored in the `instance.values` object.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n  - Optionally, an `options` object can be passed.\n    - `isTouched: Bool`\n      - Defaults to `true`\n      - If set to `false`, this operation will not trigger the field's `isTouched` to automatically be set to `true`\n- `setMeta((updater(previousMeta: Object) => newMeta: Object) | newMeta: Object)`\n  - Use this function to update a fields `meta` value.\n  - If a callback is passed, it will be given the previous value and be expected to return a new one, similar to React's `setState` callback style.\n  - Unlike React's setState pattern though, if a new object is passed, it will **NOT** replace the meta object entirely. Since this is a common use case, it will be shallowly merged. If you need to replace the entire meta object, please use the functional callback style above.\n- `pushValue(newValue: any)`\n  - Use this function to push a new value into a field that has an array-like value.\n  - An error will be thrown if the field's current value is not an array.\n- `insertValue(insertIndex: Int, value: any)`\n  - Use this function to insert a new value into a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `removeValue(removalIndex: Int)`\n  - Use this function to remove a value from a field that has an array-like value at the specified index.\n  - An error will be thrown if the field's current value is not an array.\n- `swapValues(firstIndex: Int, secondIndex: Int)`\n\n  - Use this function to swap two values inside of a field that has an array-like value at the specified indices.\n  - An error will be thrown if the field's current value is not an array.\n\n#### Field-Scope Specific Methods\n\nThe following methods are almost exactly the same as their top-level form `instance` counterparts, except for any `fieldPath` that is passed to them will be prefixed with this field's `fieldPath`\n\nFor example, if our field had the `fieldPath` of `foo`, then `setFieldValue('[0]', true)` would be similar to calling `instance.setFieldValue('foo[0]', true)`\n\n- `setFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `setFieldMeta(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `pushFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `insertFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `removeFieldValue(subFieldPath, ...)` - [See Form Instance](#form-instance)\n- `swapFieldValues(subFieldPath, ...)` - [See Form Instance](#form-instance)\n\n## Validation\n\n### Synchronous Validation\n\nIf you don't need to perform any async validation in your form or field, you can just return an error string directly (or `false` clear an error):\n\n- If a validation function returns a `string`, the value returned will be stored in either the form's `instance.meta.error` or the field's `meta.error` value\n- If a validation function returns `false`, the error in either the form's `instance.meta.error` or the field's `meta.error` value the will be set to `null`\n- if a validation function returns `undefined`, no changes will happen\n\n```js\nconst options = {\n  validate: value => {\n    // To set an error:\n    if (!somethingIsWrong) {\n      return 'This form/field has a form-level error'\n    }\n    // To clear any errors:\n    return false\n  },\n}\n```\n\n### Asynchronous Validation\n\nAsynchronous validation is as easy as returning a promise that resolves to the standard return types shown above in the synchronous validation example:\n\n```js\nconst options = {\n  validate: async value => {\n    const error = await validateOnServer(values)\n\n    if (error) {\n      return error\n    }\n\n    return false\n  },\n}\n```\n\n### Mixed Sync + Async Validation:\n\nYou also mix both synchronous and asynchronous validation easily with this pattern as well:\n\n```js\nconst options = {\n  validate: async value => {\n    // First check for synchronous errors\n    if (!values.foo || !values.bar) {\n      return 'Foo and bar are required!'\n    }\n\n    // Then return a promise that resolves any async errors\n    const error = await validateOnServer(values)\n    return error ? error : false\n  },\n}\n```\n\n### Debouncing Form Validation\n\nIf you're validation is firing too often, you can debounce any stage of your validation function (sync or async) with React Form's built-in debounce utility. `instance.debounce` returns a promise that only resolves for the latest call after a given amount of time. This way, any outdated validation attempts are discarded automatically.\n\n### Sync Debouncing\n\nTo debounce synchronous validation, return the promise from `debounce`, called with a synchronous function:\n\n```js\nconst options = {\n  validate: (values, instance) => {\n    return instance.debounce(() => {\n      // Wait 1000 milliseconds before validating anything\n      if (!values.foo || !values.bar) {\n        return 'Foo and bar are required!'\n      }\n\n      return false\n    }, 1000)\n  },\n}\n```\n\n### Async Debouncing\n\nTo debounce asynchronous validation, return the promise from `debounce`, called with an asynchronous function:\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    return instance.debounce(async () => {\n      // Wait 2 seconds before validating on the server\n      const error = await validateOnServer(values)\n      return error ? error : false\n    }, 2000)\n  },\n}\n```\n\n### Mixed Sync/Async Debouncing\n\nAgain, you can mix both sync/async and immediate/debounced behavior however you'd like!\n\n> **Pro Tip**: This is my favorite and recommended approach to mixed validation.\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    // Check for synchronous errors immediately without debouncing them\n    if (!values.foo || !values.bar) {\n      return 'Foo and bar are required!'\n    }\n\n    // Then, if sync validation passes\n    return instance.debounce(() => {\n      // Wait 2 seconds before validating on the server\n      const error = await validateOnServer(values)\n      return error ? error : false\n    }, 2000)\n  }\n}\n```\n\n### Manually manage form `meta` and field `meta`\n\nReturning an error string or false from validate is simply shorthand for setting/unsetting the `error` property on either the form's `instance.meta` object or a field's `meta` object. If you don't want to set an error and would rather set a success or warning message, you can use the `instance.setMeta` (for form-level validation) or the `instance.setMeta` function (for field-level validation). More than just the error field can be set/used on both the `instance.meta` object and each individual field's `meta` object. You could use this meta information for success messages, warnings, or any other information about a field. Only the `error` and `isTouched` meta properties are used internally by React Form to determine form validity.\n\n```js\nconst options = {\n  validate: async (values, instance) => {\n    const serverError = await validateOnServer(values)\n\n    if (serverError) {\n      setMeta({\n        error: serverError,\n        message: null,\n        errorStack: serverError.stack,\n      })\n    } else {\n      setMeta({\n        error: null,\n        message: 'The form is good to be submitted!',\n        errorStack: null,\n      })\n    }\n\n    // Make sure this function returns undefined if you are handling\n    // meta manually.\n  },\n}\n```\n\n## Field Scoping\n\nField scoping is useful for building form inputs that don't require knowledge of the parent field name. Imagine a field component for managing some notes on a form:\n\n```js\nfunction NotesField({ field }) {\n  const fieldInstance = useField(field)\n\n  // ...\n}\n```\n\nThis approach would required us to define the nested `field` when we use the component:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <NotesField field=\"notes\" />\n    </Form>\n  )\n}\n```\n\nThis isn't a problem for shallow forms, but if we are in a deeply nested part of a form UI, it get's more verbose:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <ConfigField field=\"config\" />\n    </Form>\n  )\n}\n\nfunction ConfigField({ field: parentField }) {\n  return (\n    <>\n      <NotesField field={`${parentField}.notes`} />\n      <OtherField field={`${parentField}.other`} />\n      <FooField field={`${parentField}.foo`} />\n    </>\n  )\n}\n```\n\nInstead of requiring that all deep fields be composed with their parent strings, you can use the `FieldScope` component returned by the `useField` hook to create a new field scope for any `useField` instances rendered inside of it:\n\n```js\nfunction MyForm() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <ConfigField field=\"config\" />\n    </Form>\n  )\n}\n\nfunction ConfigField({ field: parentField }) {\n  const { FieldScope } = useField('config')\n  return (\n    <FieldScope>\n      <NotesField field=\"notes\" />\n      <OtherField field=\"other\" />\n      <FooField field=\"foo\" />\n    </FieldScope>\n  )\n}\n```\n\nUsing this approach, you can avoid having to compose deeply nested field names!\n\n## `useFormContext`\n\nA hook for gaining access to the form state from within a `Form` component\n\n```js\nimport { useFormContext } from 'react-form'\n\nfunction App() {\n  const { Form } = useForm()\n\n  return (\n    <Form>\n      <Stuff />\n    </Form>\n  )\n}\n\nfunction Stuff() {\n  const formInstance = useFormContext()\n\n  console.log(formInstance)\n}\n```\n\n## `splitFormProps`\n\nA utility function for filter React-Form-related props from an object.\n\n```js\nimport { splitFormProps } from 'react-form'\n\nfunction TextField(props) {\n  const [field, options, rest] = splitFormProps(props)\n\n  // options === {\n  //   defaultValue,\n  //   defaultIsTouched,\n  //   defaultError,\n  //   defaultMeta,\n  //   validatePristine,\n  //   validate,\n  //   onSubmit,\n  //   defaultValues,\n  //   debugForm,\n  // }\n\n  const fieldInstance = useField(field, options)\n\n  return <input {...rest} />\n}\n```\n\n## Manually Link a Field to a Form\n\nIf you get into a situation where you need to use `useForm` and `useField` in the same block scope, you may see a missing form context error. This is because your `useField` usage is not inside of a `<Form>` component. To get around this error for this use case, you can pass the form's `instance.formContext` value to the `useField` options to manually link them together:\n\n```js\nfunction App() {\n  const { Form, formContext } = useForm()\n\n  // This field will now be manually linked to the form above\n  const fieldInstance = useField('age', {\n    formContext,\n  })\n\n  return <Form>...</Form>\n}\n```\n","_id":"react-form@4.0.0-alpha.8","dist":{"shasum":"a4d20e0495a988da9c165c998747a206c8f017d6","integrity":"sha512-loGe+HrUnDz3t1l+sOBPEIXP0itgX+f/p9PXxt61xOn3mW0Bj5G0I8qlbeCMLvE9poG7dhYGHcdH6i7nTs+Hkg==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.8.tgz","fileCount":9,"unpackedSize":191010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgT5gCRA9TVsSAnZWagAApIkP/j3o9HneA1fTUEpqmlkl\nUovpltmeqwgL9pvNBZWm/7AWiiAZa3r2pLJmdaCTJibqWy91HVquCzWa1p5N\neFZjVh6xyHAyP2WVLQSjbD2l9XoseT0zv5GKVoI0Vg1ans0kl1Mdl34Rjm8v\nql9cDxEaVDZBqpIc1+xfX5sjbFYnjqva7pdI/7C1PR+RXPLcsNbPX9nRYcim\nDkQ9Q/ilBRPnoau36xRzegPz53ty/TWm9lqaxC/bShD9/pPBQJPUFU97i2yq\nOKza4dWiu44DaWx7eUNqmwUHhDKvNcyFEBz+PwmXs17b0IQHmeAWqfTvNaKq\nsP15ONwuQpTsDmWRCNM4R6l8YTut3LbU44PRn9yz8KyPNY08AOR5zShcJZ13\nN68u7JAh/pd/KZSZuOFC4GKcwLe45Ntk1vSQ2SeU1w5o9KfNk/VZLqfDJEEw\ni3Sb5dpoFntMBrxVoUShmmnR8iAcrnEOUpniweAfUsYIwD8hh/PXhfbUrtJD\n8HtsCuHdAyRUZY3+WxugDKeW2uP1gfWUIMbFzearHUlG11yv+mMGRfq+4O5Q\nOSWP3BhBQ48FYvPYLPykScrLG9BvOg9p9v+77/FWRlk7yfacyC4a6+iheIwv\nzFN08iqhlxPQ+qs1mfR/Vgfuek9kJ8CNOUpn0a+QByRYGQaa06sQXD4bC+/9\nwNdr\r\n=RmrT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD17vUtTlUH0WgCfcRVo7zDLLbrs85oBWcTHbEHmgPF+gIgVK0QS+NMRntuQGVR3u7ZTe4mEu985eZIZDJvIkre6uU="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.8_1568751199940_0.8366327457419009"},"_hasShrinkwrap":false},"4.0.0-alpha.9":{"name":"react-form","version":"4.0.0-alpha.9","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next","format":"prettier {src,src/**}/*.{md,js,jsx,tsx} --write"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-prettier":"^3.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"_id":"react-form@4.0.0-alpha.9","dist":{"shasum":"c4a62f551c801afff59c5ae6a7bab0f09efbada8","integrity":"sha512-ghXTOEy4NRyBCH4z3kfbyz7/9Uou+GlGRVofPzOgnzisr7ES6b4KxOgzDNxqd6GRCZOkr8uWUk4qidTMrNR3wQ==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.9.tgz","fileCount":9,"unpackedSize":192497,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiD2qCRA9TVsSAnZWagAAm+kQAJ4oH1SdoE+24zIvQRws\nDZNa6Bp+nB2Pjrc3m99UECpe78EOwIoAMcQbBuLCf4e7020ejKb4F+r9nxIc\nLJO36aRyqjlq5ceCWkIzau3R4BWn/UIrVu/lu0TdOWfno/lxCLKXGm0I7gpr\niNp1tWULQdBwkTFddGGl+AVubqMU7bQ8kqL7o3TiZCsO7JGjtR0QraLCXv49\nlp0oU697qIhDBB38wtpMkt7w869PVY01ChsUvFTKI2ctTUalxqJv6vYuYSmS\nwxX4bhpu2QGvglnP5a0C+0K38IAWRSFUwWAbxlk/FUMjCbnx1k9kO7yeRdRj\nUnNvuL76LdHMg4BZfIhJ2sStyM7XJjpj5B/6AmSJXY3BMM/9kuGMBRiJbHlI\nzypCMqjmHJgXWf288hVKmhQlLWl6weRHmlWngA2WJEa7wK/s133YC84fCSx+\nHU+7USiezi3xqkaK0x60IuhFTHb/X0lNylxlwToMFLrYifu4FRv6n6e9SeJd\n8FIpDjDf6Vajt/gZIht1w/2WBLQLnQF/u92eG2WFxPIJf7QwYcD7rbWNJ5RA\nasNtuR529T0PHjUy0AiNFatFWXqFNkD6dv59LCUtR5OvRGp9PtMyo5eUfMuE\nkDIdI/33oMCqU6Mog/NcnRe2MaGnT8vvJdLUD4glN5nJMZpqUs52fGEdLs8j\nQfsd\r\n=jdRj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDz6HVriUkoQKOlpsyQeKg5QdFAW960EwRXO65hfkRP6AiEAmCnBjIDQJl0h0lc7rQzQg6vQw4MqsFzThtq3h2Ngmq4="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.9_1569209770113_0.48986922895090457"},"_hasShrinkwrap":false},"4.0.0-alpha.10":{"name":"react-form","version":"4.0.0-alpha.10","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next","format":"prettier {src,src/**}/*.{md,js,jsx,tsx} --write"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-prettier":"^3.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"_id":"react-form@4.0.0-alpha.10","dist":{"shasum":"9ddabbf0267f32a7e413666a9d0f82cefb4aad12","integrity":"sha512-QVWAXFZYxWQHn1pym7wV+poJNii2rMPMtSsD1rfPC1CXgelauUyHTYIJN43E2mPAe5XVHdYSz+s4xRAE2b8FFQ==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.10.tgz","fileCount":9,"unpackedSize":192508,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiPhUCRA9TVsSAnZWagAArjAP/R81Bpd8OnS1Kc8+nQCm\nz0I+u/PTTRTVymtDVjM/s4uKK9j78JNFwhb2pWXClOnSkGAkKMGyv5qJAmTB\nQYbsVX1sRe2VpDa8arIL7rH9L0Pmki3xep9cuIHNlIdnoDvD7tisHTejLbEV\npSEA+RdQTtAZMVvsoMiNf3TeayoQ+cfslP6C73p5adB4Cs/6deXUNh3iLKfc\n/xaAcdENm/xhcA0P8y9dk+J7w/m+tCKCtjV3YV8eJTAf0C0G+SHD8+fNCmUP\nvAHiyEiIfCCDmeJNbaM9k2UmIi+HS38l+wQ7hcZRBdcI76VUt+WtcGtefoLU\nT0FLpGu4J5Mi2bCZq6p9RB9/+mGuTp7IH+m9MzA2BhalxXw8v4CKZxQvRgzI\njl7FksQ+rb0oeD/73Y/350qC6Ea56jDf3qwaA+yzQLQh4+8Cu/qKsPQgcfUl\nX3YgN90CMLSOAYmB+egTiQiMttOOv2ZgbhDs7lV2HQZu8yX0JSIsgKqVoMzx\nyvWGa6bLV4UcZcbpK8/SgB6ZMBbVJ6VeANe5Yta1Ofl1ygOCGiYf1DCW34o3\nL00tnG31JGaGJdNN9DNwBy4En1oueRfvWZKTDlczccj9YYP/+bUJX+0veZH2\niDxqVD0jIo3ZoTuZgbjaEkd9IFpVuS2vLLMjwr01OquRj3vx4i4qDEMCkltW\ng5E9\r\n=BxRS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGbXPsH7n5A9WWp9Wa00bSwCbhARQIaWrD2cZTYIy1BWAiEAk2m/JSiXQJ0cOvL2f/aHYfvQlQRZX3/zq5b0fyA+M8s="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.10_1569257555094_0.3751567021385971"},"_hasShrinkwrap":false},"4.0.0-alpha.11":{"name":"react-form","version":"4.0.0-alpha.11","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next","format":"prettier {src,src/**}/*.{md,js,jsx,tsx} --write"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-prettier":"^3.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"_id":"react-form@4.0.0-alpha.11","dist":{"shasum":"00a117e5b18e3acf4de9dd4e4d5ade5d237dc985","integrity":"sha512-3DBAYO3/4tF/L4zVYafPUAxSNQx/w/X/j/UAd2Nt617k51eKUvix0CwXylrHRwis7rGzXfsHpNjc22KoZUudeg==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.11.tgz","fileCount":9,"unpackedSize":211076,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiY5uCRA9TVsSAnZWagAAPAkP/jrGCYn9H8xKIoVM8Aem\naCdP1pYtbvROAM4NIAplbuaSwyOM7BGoMzWyz42bM3hdfhsxBerD99YTHzVF\nLNyfO7ubQDAEOSWTR+QCzCeipP7t14laQFVLmMU5uBqe1syV6vZv6+3CXBhm\nxO9gcdAPE8OEJYdsrBYWh+e4EORVN4i2qA1OCHwmdBwKRFefeMyDPXe5Hf20\nlyMpbJoZVcCiHZYbBftwnbVZQdx4h2Gxm/NAnPXq2rXoY4uTKHzwp2K4ovXC\njoJ2Tj8uTbk3JmpCub4E4J3fEbXYReSI5JVD+iLXgnvXmB+BfFziklTxttBQ\nzRo/Z8/pOdE/h6L9JVmBYOcc/ZGQnMCdUUajHaKxzilTQwFc6kmoc15lVWQB\nRWM9A6atBPb0ku9kIMIVY/zOH9cPStMdZJHdKGheonW/LcFhANwNmlqgSzJc\nOG/4eBOUOkC0wYwSoXJIEtH9Aubj5POlAK2gemcod9719QGKWXtW9BNOktap\nh5asl/87rSc/a36ZoDayBIYuifdZqIMYLW2sbt+fbgpX/m3Dy/bvmKdoKibI\nzo+Lx+hAsG24NWyyVr6o17BaBgCOTC11OnRbJDOebblXrtYJObmZo8ZO2qYg\nDEEAbUjiSDeoykNd8VD3+yN7IVANbYGBfZaD9SyXI7S+3c9cGALVrtABkUdp\ngCDb\r\n=5O57\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8mI5P+uXZjtqqeqao+Im2kvwvjYAcFMvd4aASXXQ9AwIgabsTdnuzrJHGKTfSrKVPJT3r5vDqpjBdYjBaSrAHWcY="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.11_1569295981634_0.34819001087638135"},"_hasShrinkwrap":false},"4.0.0-alpha.12":{"name":"react-form","version":"4.0.0-alpha.12","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next","format":"prettier {src,src/**}/*.{md,js,jsx,tsx} --write"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-prettier":"^3.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"_id":"react-form@4.0.0-alpha.12","dist":{"shasum":"38943a998590939877082bd80e378a97277512db","integrity":"sha512-Y62fbAjP6hxhyZQlII4W+fwhDHvHF0rRsN5tTpwQ17KvfGHre2DnXyfeILUSKRPpbM0mTm3AX80ZAHcAJRFsHg==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.12.tgz","fileCount":9,"unpackedSize":230773,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdikXnCRA9TVsSAnZWagAA3Y8P/RWzjrj6YFjvqUgfJDi+\nIbOdLmsQJc1lz/7F7Q4Q1VhmYEXOm9kDWoWZTpQetGMTFgK4h7ZUcMZ49Uzl\npviQVuSRxYvx1hK6+3DKufLyPKT1eor0MksIwXRshle+F+jOGO8lRrFoDTKP\nYnQ4HExZHLT6tFeiPO0tbOTLNk9AlpocFd1R6tL7/TWBkeGuOUBl9W+xZ8SJ\nltvNXRqOHRUciiyv4yJQU5sWjcLEX3gwa11JzXw4CWB1clmjAY/lUhFWlv5/\n2GlQNVemT56cKok57NNiit8Dp97CcYccey2SPWFTicSwAgB/OsabnxZZZ31q\nRUoYdYoidB+Xo9FDERtwHYpqv5cRkLj6F2LGumRRNoBd5ha5kEwa18Qfr/+N\n1ntQWKxocDVfKA54VVXExxCG9Hy6Y/icijUARlngYMgBs17/aSwdl3JJFSTR\ne50l46y15hMvx8phETbLFdKDR3HVyKdPMWzUHXVYC/D+oJsq1dF5hE9woyXS\nxn40pMsp74cdSIpp3kJgWcqzY7tyU8tzef6BC3xwT6LaLLpk+MwllhkVNUR2\nfr0RcEFJ0REreWS8r1+jmakoGbGo+VmuiOgdJScb9Hw75s8lbHnPbrFIC97a\nqRFelPsqi9omZopsdxZDDHmOq9DM4Fi0Ua8lbycVGpxGVjpf+F0v/DTrN/lM\ncuUf\r\n=G/F9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEMNUj9uQ7tJd1vBFQpXnZJpCcqQdhtZa69Pu3jbzDDzAiBbmV4xgy9d6mNeZDQLaTJJ56tqQ4mx/eKbIVwORpZr6g=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.12_1569342950359_0.48564589552491766"},"_hasShrinkwrap":false},"4.0.0-alpha.13":{"name":"react-form","version":"4.0.0-alpha.13","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next","format":"prettier {src,src/**}/*.{md,js,jsx,tsx} --write"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-prettier":"^3.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"_id":"react-form@4.0.0-alpha.13","dist":{"shasum":"626d46f5c8d773f160d5affc4536a83c1deaaa3b","integrity":"sha512-YcRaK9q3AXeIscYveZ7ghXbixIBSI9I9V93zMifAMdarkRapRsEAaRBhIM/zziTuxaB+FzEf7BbBxolbLFsZAw==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.13.tgz","fileCount":9,"unpackedSize":230429,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdikdYCRA9TVsSAnZWagAAtV4P/jEBGgVglml9+2bkbant\nqZob3uP9ZJOpC0MBiNiqCg3PS2/Dp5sufoauxJDYVAWTwxMi7E4v1xO8iO+B\nSw+ONuhgoJpT1fjmgHHpkXo2fEVX7+3gVEmLTb+1XKLwUBPYI7sAsRpdgFZ2\nojqyf3CQDFmWcwnOzMfmwgPMTIDJRUtkMlNJ+gHirKEZ+4qMECv0oIAeGRrs\npc3zU/wI5yUeLa6Brhyk7GGBVLTd3TP9P53S+ZlUOV2Sw5K4rKH2oWTMVdHB\nAWdqIYc+cYdFVvbS/URdXqRflvARS0zcEsmPInqgKhISUJ/fGS46VCY2YDfD\nm02JoY1aVTnPbWk0AXOMFoKlEJHPcvmi+tD6EEdwAAROsvZKf4Gi3jufpf/2\njXU/5TtY2Xg81PKA4egLyYsd0ZGWbAZx7dNes5zyTnB+ciaMDZ50AMIru2D0\naOXP1C2f6HHFrjFSBwVx32Gsa01DSQynbOktgjem5yEnyP+MfvQwZCX5yJNG\nHPDCXJVkV7sed/ol3syDxcGgSA7QPfUEvqN+S5RYw7GYOYTN6S3OEqvV02SN\nrITKW+QEgDeTsTX2dqeAEDCSpm40TJ8x/Ug/iFsVjaM08F6Pf0aA2V4PXoyF\nqkPosd03anzZ//XF4U+JQualVFHHCDAoLcSCm24BDosT6RtSvCGYzWbqCHP9\n/DL/\r\n=pO61\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFJV+Z0XntfF6IY3IskpB0XC6i2+B12oSxwT2Aj0iQ30AiBNSZajZXxJRaykpbSKmwpcoAh5FS2NPgH0eSuFxIVnRQ=="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.13_1569343319678_0.27278314169401185"},"_hasShrinkwrap":false},"4.0.0-alpha.14":{"name":"react-form","version":"4.0.0-alpha.14","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next","format":"prettier {src,src/**}/*.{md,js,jsx,tsx} --write"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-prettier":"^3.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"_id":"react-form@4.0.0-alpha.14","dist":{"shasum":"f11f9d963dc756ff9021eda2417b669e06b8e2f5","integrity":"sha512-UdMYU8Mpbk94epUPq2J4RFKuYipcaaXm1wpTlrUGm0n98h4IdRvGJdrJ0EZpD4tKbZERBjX7c9zZFR9ObAAFng==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0-alpha.14.tgz","fileCount":9,"unpackedSize":230493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdimUGCRA9TVsSAnZWagAAvH0P/jzVORBUsk6vtj5fQX9r\n1tTjMMnQqeD5D8rhIEAF1vHvc23lv+4KQnuzsgzSDywJuDacT85LPvCF+RMT\nWT3xL5wSR6N8V0BeXAOnBUnNw+ajNc2yAyJtuH+MDGcAhbisN/zHHU37qnXs\nOQxFPWdmYV2/Qo3FwsPLudx2rZwHfmpwA4mS0i7768T8g5yIXNze1C5hhG5g\nRB9GVKdX07Hwz5je3IzRH9sfABMzKS1mG9gW+ClmgSZPrI4Xw++8WNXy7zmr\nuellH6F9PhG2FbKFo9agqb4ge8TZHVxdZ2Z3M+XzSxiZRngqes1gzdtXDajx\nMv8R1wuvjUcSlZvFuddrY1c5zuF2PMhkqKC9BXYS5qesBquaOI7dzxSVCzNM\niBgKDBEhLJ5G3bpmTnpiFAfnFRDqMEdbrSlOQhHAxQXb0voWV8wCIItZ+7K1\n00ArepXHuFehthH2ZzYikf+jAyzEcUaUXGc7dOPMV16sxqB6+FhV4OpEKpE0\ndgcGG9HszEAwc2VZViqvKrxQKUKzvSYT1gNVRlIV2gLMCLU70EESxN0UyV+n\n6CdtULbAJpYdsCiopTrmWmFHBL9wUr91xvD+F2IJqRkOV5/dnw8JPRGM8zyX\nl8azXvpOegtUh+A4dUr9koJ68TWSrWTajQBVyb4cpl1yP93GqVy9dheM8Ffv\nXQE1\r\n=SA7p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICfgokCVkGS+dAcnKAjCtbqFredGiIvid5bsSBgTKN/UAiEAx6P6V0DS7jl6daRR3qyUB/Qiya0kje1dVwTtuCsNxGc="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0-alpha.14_1569350917535_0.606784741136462"},"_hasShrinkwrap":false},"4.0.0":{"name":"react-form","version":"4.0.0","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next","format":"prettier {src,src/**}/*.{md,js,jsx,tsx} --write"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-prettier":"^3.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"_id":"react-form@4.0.0","dist":{"shasum":"cee1f3aa1ea5f6a525d4f1adf571a20dc404a9e2","integrity":"sha512-d5TiDijBFUqcP8Y+CnBNad9VPC6190M2bJSnJ8oyvRgiTWzwm5K6wT1bejlVV5mchUASUMA6T3h3pCXkkKqL6g==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.0.tgz","fileCount":9,"unpackedSize":190416,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdycViCRA9TVsSAnZWagAAuM0P/0MFeB2TILoN6Pc6DcLy\nn7q/v9OR7Tc8eQC1BVL3xmJn6T9GIJH4DBQ8BISeN/Y78HpHPF8ftrilekxq\n35vUdq+k8V4AsBFVswySwq6fKJ7hxjEEWFOw0v/Cb+ynwoRBrq5ukGGYzwRS\nExiT3q6elmhm4buDRU2qCwCPVe6nTcq0uzEJXc7JuWFUPs5LeYYzxOPN2H0y\n057zQ5ApVddI7UrqFN7Fzb4Fzy+JyyOrOJ6saGABhcJzHt15PJ323H1bF0AP\nI+dQ//+ZAHtVNGc5X0BoH/T9eOGo4ZmpaicZqtJxheiURqE+5Y3A/cQhBCJf\n79cxbViZV1FJlnFN+iaY3wKntGx7wK0lyZOEP5HRJpgPx87Y0HVOGpFgSc6J\n7vam8sznHVo6aW6l/fRctNLPX3hcBbvbWcNrnpxCmzl4ez9sYN8jPc2eWc5j\nfeKKkNudL06mIghTFxpvXbciCPer9/DokRgZVBkaayl8ec7BQ/sQAJx858Hq\n0OcBtmp7hwbuh8LVKKXpF4wTEGxwcdz+uEYj7Ixm6DYUEpG4KJxGFZxzwtI+\nct7hD8tRrY81FfhICMO4CkDe6O669q5i+zpv1pbKR2b3F06W5Le2jPnx0zyS\nMyMzoJC2byrpmqj0cIpA0B+WQMAjF2yZV0gHm9Paraa+zAqAYe76nA7jUiVz\ni9ds\r\n=MpNR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDyrBy9v4634fnyWH4iE5IFpVH89bbKPoU8SvsV39JTogIhALmMjynRI1RCwFJn6YeFCNBp9kit4/rXYQDyDz694D+Y"}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.0_1573504354295_0.8981844688355587"},"_hasShrinkwrap":false},"4.0.1":{"name":"react-form","version":"4.0.1","description":"⚛️ 💼 React hooks for managing form state and lifecycle","author":{"name":"tannerlinsley"},"license":"MIT","repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"main":"dist/index.js","module":"dist/index.es.js","scripts":{"test":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","build":"rollup -c","start":"rollup -c -w","prepare":"yarn build","release":"yarn publish","releaseNext":"yarn publish --tag next","format":"prettier {src,src/**}/*.{md,js,jsx,tsx} --write"},"peerDependencies":{"prop-types":"^15.5.4","react":"^16.8.3"},"dependencies":{},"devDependencies":{"@babel/plugin-proposal-class-properties":"^7.4.4","@babel/preset-env":"^7.4.5","@babel/preset-react":"^7.0.0","@svgr/rollup":"^4.3.0","babel-core":"7.0.0-bridge.0","babel-eslint":"9.x","cross-env":"^5.1.4","eslint":"5.x","eslint-config-prettier":"^6.3.0","eslint-config-react-app":"^5.0.1","eslint-config-standard":"^12.0.0","eslint-config-standard-react":"^7.0.2","eslint-plugin-flowtype":"2.x","eslint-plugin-import":"2.x","eslint-plugin-jsx-a11y":"6.x","eslint-plugin-node":"^9.1.0","eslint-plugin-prettier":"^3.1.0","eslint-plugin-promise":"^4.1.1","eslint-plugin-react":"7.x","eslint-plugin-react-hooks":"1.5.0","eslint-plugin-standard":"^4.0.0","prettier":"^1.18.2","react":"^16.8.6","react-dom":"^16.8.6","rollup":"^1.12.4","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^10.0.0","rollup-plugin-node-resolve":"^5.0.0","rollup-plugin-peer-deps-external":"^2.2.0"},"_id":"react-form@4.0.1","dist":{"shasum":"f442adae7142261a6650a63001c49827e4317ca5","integrity":"sha512-vhsCuBLZJYjm6vd8TBxIhIWeB/8Jg4mmmiR3Zj+1zIGBM39qJf1CLqekadLp0J9NeW0EsZxUnBtbmEnMeZ/7Pw==","tarball":"https://registry.npmjs.org/react-form/-/react-form-4.0.1.tgz","fileCount":10,"unpackedSize":190545,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdycZzCRA9TVsSAnZWagAAqQQQAITFSFcKzwtj0hd6eTgC\n44A/F8cYYl6gR+8cdng3KL7TgPjblISl/B5c/H43mOHgI3K2l+8mtGTE1G2I\n78d3Sa7MAYt970+UEOfoQL/cjWH/7L/96XPNYk4+MwKrG8/KAE6mlbMRjm4I\ndRe/u0VmIAtf1L6p+UdLZD8cNwnxMI5urJvQscxDfRurscHNorj8Fk5f8FzA\nUrjX690ukY4UBKQiM1oKx4Bi5AHjzW4RkkBf/sirwghmQr20kY8f+kYfTsik\ndluRme09DyUvAmD94Np1MvGJkmDnE+L5IvKNwB61W0LCdULZB1DX/jSjp7xj\nemuptWhdB39TL21aKX0lppiXx1evz4U8kSqbAaDcdPxiQ2HMlbCdeFLYZU01\nzlPWgvUxKk9M/4Gxhz0xmjIL7OfEY48KVmzcsqmmrqAbFpzrzNgffqB826gR\nlRIkiUnr7fHZ0ulHeJp7EGHMJzYw9Xt57+bS5qj1jKR8LvKEuH3eaOBHNePL\n1RW24M12lWqgiU2ytXjvwDlf28vYFGz4BCRHSoLwrSX3TfZx4HyBqdxhcVOA\nTx3Qj8YV+upTnCc9yzSvwWjDel9T/N18cn7ZYuJGP2yc9MJMkw08hYLqwhA5\nkGGAMnCszI8SdYbr3pkpKtd0sMxeio+YS1GpEk3/gHhRzZDbbk9StbXuu/7E\n8YjX\r\n=o9Ig\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAllf5kySjx3jSnJWHsDQ0ECI+9/YooKE7L8gN4I5LN6AiEA10VHpGSkj4txTsxdBhlXSaxnpg63unRE3FD2FTxD0wo="}]},"maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"_npmUser":{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-form_4.0.1_1573504627265_0.7453826428411119"},"_hasShrinkwrap":false}},"readme":"![React Form Header](https://github.com/tannerlinsley/react-form/raw/master/media/header.png)\n\n<img src='https://github.com/tannerlinsley/react-form/raw/master/media/logo.png' width='300'/>\n\nHooks for managing form state and validation in React\n\n<a href=\"https://travis-ci.org/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://travis-ci.org/tannerlinsley/react-form.svg?branch=master\" />\n</a>\n<a href=\"https://npmjs.com/package/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/npm/dm/react-form.svg\" />\n</a>\n<a href=\"https://bundlephobia.com/result?p=react-form@next\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://badgen.net/bundlephobia/minzip/react-form@next\" />\n</a>\n<a href=\"https://spectrum.chat/react-form\">\n  <img alt=\"Join the community on Spectrum\" src=\"https://withspectrum.github.io/badge/badge.svg\" />\n</a>\n<a href=\"https://github.com/tannerlinsley/react-form\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/github/stars/tannerlinsley/react-form.svg?style=social&label=Star\" />\n</a>\n<a href=\"https://twitter.com/tannerlinsley\" target=\"\\_parent\">\n  <img alt=\"\" src=\"https://img.shields.io/twitter/follow/tannerlinsley.svg?style=social&label=Follow\" />\n</a>\n<br />\n<br />\n<a href=\"https://patreon.com/tannerlinsley\">\n  <img width=\"180\" alt=\"\" src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/become-a-patron.png\" />\n</a>\n\n## Features\n\n- Built **with** React hooks **for** React hooks\n- Highly practical validation API with 1st-class asynchronous support\n- Built-in validation debouncing with auto cancellation for stale validations\n- Field Scoping for deeply nested form values\n- No nonsense meta management for both forms and form fields\n- Fully memoized for frequent and fast rerenders\n- Flexible form API at the field, scope, and form levels\n\n# Documentation\n\n- [Installation](./docs/installation.md)\n- [Examples](./docs/examples.md)\n- [API](./docs/api.md)\n- [Validation Guide](./docs/validation.md)\n- [Field Scoping Guide](./docs/field-scoping.md)\n\n## Sponsors\n\n**React Form** is built and maintained by me, @tannerlinsley and I am always in need of more Patreon support to keep this project afloat. If you would like to contribute to my Patreon for React Form or my other open source libraries, [visit my Patreon and help me out!](https://patreon.com/tannerlinsley)\n\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"middle\">\n        <a href=\"https://patreon.com/tannerlinsley\" target=\"_blank\">\n          <img width='200' src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/platinum.png\">\n        </a>\n      </td>\n       <td align=\"center\" valign=\"middle\">\n        <a href=\"https://patreon.com/tannerlinsley\" target=\"_blank\">\n          <img width=\"250\" src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/platinum-placeholder.png\">\n        </a>\n      </td>\n       <td align=\"center\" valign=\"middle\">\n        <a href=\"https://patreon.com/tannerlinsley\" target=\"_blank\">\n          <img width=\"250\" src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/platinum-placeholder.png\">\n        </a>\n      </td>\n    </tr>\n  </tbody>\n</table>\n\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"middle\">\n        <a href=\"https://patreon.com/tannerlinsley\" target=\"_blank\">\n          <img width='200' src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/gold.png\">\n        </a>\n      </td>\n       <td align=\"center\" valign=\"middle\">\n       <a href=\"https://patreon.com/tannerlinsley\" target=\"_blank\">\n          <img width=\"150\" src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/gold-placeholder.png\">\n        </a>\n      </td>\n       <td align=\"center\" valign=\"middle\">\n        <a href=\"https://patreon.com/tannerlinsley\" target=\"_blank\">\n          <img width=\"150\" src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/gold-placeholder.png\">\n        </a>\n      </td>\n      </td>\n       <td align=\"center\" valign=\"middle\">\n        <a href=\"https://patreon.com/tannerlinsley\" target=\"_blank\">\n          <img width=\"150\" src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/gold-placeholder.png\">\n        </a>\n      </td>\n    </tr>\n  </tbody>\n</table>\n\n<table>\n  <tbody>\n    <tr>\n      <td align=\"center\" valign=\"middle\">\n        <a href=\"https://patreon.com/tannerlinsley\" target=\"_blank\">\n          <img width='200' src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/silver.png\">\n        </a>\n      </td>\n      <td align=\"center\" valign=\"middle\">\n        <a href=\"https://patreon.com/tannerlinsley\" target=\"_blank\">\n          <img width=\"100\" src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/silver-placeholder.png\">\n        </a>\n      </td>\n      <td align=\"center\" valign=\"middle\">\n        <a href=\"https://patreon.com/tannerlinsley\" target=\"_blank\">\n          <img width=\"100\" src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/silver-placeholder.png\">\n        </a>\n      </td>\n      <td align=\"center\" valign=\"middle\">\n        <a href=\"https://patreon.com/tannerlinsley\" target=\"_blank\">\n          <img width=\"100\" src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/silver-placeholder.png\">\n        </a>\n      </td>\n      <td align=\"center\" valign=\"middle\">\n        <a href=\"https://patreon.com/tannerlinsley\" target=\"_blank\">\n          <img width=\"100\" src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/silver-placeholder.png\">\n        </a>\n      </td>\n    </tr>\n  </tbody>\n</table>\n\n<table>\n  <tbody>\n    <tr>\n      <td valign=\"top\">\n        <a href=\"https://patreon.com/tannerlinsley\">\n          <img width='200' src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/supporters.png\" />\n        </a>\n      </td>\n      <td>\n        <div><a href=\"https://patreon.com/tannerlinsley\">Your Name and Link Here!</a></div>\n      </td>\n    </tr>\n  </tbody>\n</table>\n\n<table>\n  <tbody>\n    <tr>\n      <td valign=\"top\">\n        <a href=\"https://patreon.com/tannerlinsley\">\n          <img width='200' src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/fans.png\" />\n        </a>\n      </td>\n      <td>\n        <div><a href=\"https://patreon.com/tannerlinsley\">Your Name Here!</a></div>\n      </td>\n    </tr>\n  </tbody>\n</table>\n\n<a href=\"https://patreon.com/tannerlinsley\">\n  <img width=\"150\" alt=\"\" src=\"https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/become-a-patron.png\" />\n</a>\n","maintainers":[{"name":"joepuzzo","email":"jgpuzzo2@gmail.com"},{"name":"tannerlinsley","email":"tannerlinsley@gmail.com"}],"time":{"modified":"2022-06-25T21:58:58.385Z","created":"2014-12-26T23:18:23.622Z","0.0.1":"2014-12-26T23:18:23.622Z","0.0.2":"2014-12-27T01:26:11.270Z","0.0.17":"2016-12-05T22:37:28.700Z","0.9.0":"2016-12-08T19:00:50.438Z","0.9.1":"2016-12-08T23:03:53.495Z","0.9.2":"2016-12-12T20:37:23.625Z","0.9.3":"2016-12-12T22:11:59.588Z","0.10.0":"2016-12-13T15:54:18.206Z","0.11.0":"2016-12-19T21:00:16.355Z","0.11.1":"2017-01-04T18:42:48.055Z","1.0.0-beta":"2017-01-08T00:32:24.965Z","1.0.0-beta.1":"2017-01-08T00:33:43.237Z","1.0.0":"2017-01-28T22:47:25.203Z","1.0.1":"2017-02-01T20:45:27.202Z","1.1.0":"2017-02-06T20:10:57.646Z","1.1.1":"2017-02-16T22:21:19.605Z","1.1.2":"2017-02-17T16:12:01.923Z","1.1.3":"2017-02-18T23:38:13.871Z","1.1.4":"2017-02-22T02:45:57.363Z","1.1.5":"2017-02-22T03:01:47.677Z","1.1.6":"2017-02-22T03:07:30.696Z","1.2.0":"2017-02-22T18:18:47.816Z","1.2.1":"2017-02-22T18:26:34.176Z","1.2.2":"2017-02-22T19:57:29.407Z","1.2.3":"2017-02-22T23:04:54.988Z","1.2.4":"2017-02-22T23:44:32.430Z","1.2.5":"2017-02-23T23:30:49.956Z","1.2.6":"2017-02-27T16:55:42.997Z","1.2.7":"2017-05-08T19:12:45.817Z","1.2.8":"2017-05-25T14:01:06.392Z","1.3.0":"2017-07-07T18:13:47.536Z","2.0.0":"2017-10-24T04:17:20.963Z","2.0.1":"2017-10-24T11:48:10.425Z","2.0.2":"2017-10-25T17:30:04.070Z","2.0.3":"2017-10-25T19:41:29.482Z","2.1.0":"2017-10-26T23:08:45.316Z","2.1.1":"2017-10-28T03:15:16.344Z","2.1.2":"2017-10-28T03:57:00.449Z","2.1.3":"2017-10-29T13:04:55.941Z","2.1.4":"2017-10-29T13:20:42.814Z","2.1.5":"2017-10-29T13:37:26.250Z","2.1.6":"2017-10-31T16:47:45.781Z","2.2.0-alpha-0":"2017-10-31T21:46:08.897Z","2.2.0-alpha-1":"2017-10-31T22:43:02.841Z","2.2.0":"2017-11-01T04:36:59.716Z","2.3.0":"2017-11-02T04:37:42.623Z","2.4.0":"2017-11-02T17:40:55.414Z","2.5.0":"2017-11-07T21:46:38.869Z","2.6.0":"2017-11-08T02:59:33.677Z","2.6.1":"2017-11-08T12:55:43.959Z","2.7.0":"2017-11-09T14:46:18.996Z","2.8.0":"2017-11-09T21:52:04.603Z","2.8.1":"2017-11-10T03:05:51.244Z","2.9.0":"2017-11-10T20:33:23.545Z","2.9.1":"2017-11-14T04:03:20.927Z","2.10.0":"2017-11-14T04:29:54.032Z","2.11.0":"2017-11-15T03:41:52.312Z","2.12.0":"2017-11-17T21:56:22.093Z","2.12.1":"2017-11-19T22:02:58.142Z","2.12.2":"2017-12-07T01:20:11.634Z","2.13.0":"2017-12-07T15:50:48.924Z","2.14.0":"2017-12-08T13:42:25.806Z","2.14.1":"2017-12-08T14:07:20.167Z","2.14.2":"2017-12-13T16:15:52.446Z","2.14.3":"2017-12-13T20:10:33.518Z","2.14.4":"2017-12-15T12:20:22.968Z","2.15.0":"2017-12-20T15:09:33.528Z","2.15.1":"2018-01-08T03:11:49.497Z","2.15.2":"2018-01-08T03:23:04.270Z","2.16.0":"2018-01-12T16:46:12.887Z","2.16.1":"2018-01-12T16:48:39.103Z","2.16.2":"2018-02-06T18:57:58.056Z","3.0.0-beta.0":"2018-02-09T21:01:14.442Z","3.0.0-beta.1":"2018-02-09T23:26:03.722Z","3.0.0-beta.2":"2018-02-09T23:28:34.614Z","2.16.3":"2018-02-16T18:27:22.018Z","3.0.0-beta.3":"2018-02-22T15:50:45.833Z","3.0.0-beta.4":"2018-02-22T20:39:52.786Z","3.0.0-beta.5":"2018-02-22T21:44:56.477Z","3.0.0":"2018-02-23T00:58:46.271Z","3.0.1":"2018-02-23T22:12:17.614Z","3.0.2":"2018-02-26T19:20:22.259Z","3.0.3":"2018-02-27T12:45:48.203Z","3.0.4":"2018-02-27T19:13:27.318Z","3.1.0":"2018-02-28T20:15:17.153Z","3.2.0":"2018-02-28T20:44:05.925Z","3.2.1":"2018-02-28T21:49:29.107Z","3.2.2":"2018-03-02T03:57:07.670Z","3.2.3":"2018-03-02T14:52:52.804Z","3.3.0":"2018-03-02T18:48:07.238Z","3.3.1":"2018-03-08T21:12:07.569Z","3.3.2":"2018-03-08T21:23:38.408Z","3.4.0":"2018-03-15T14:53:45.225Z","3.4.1":"2018-03-21T00:05:58.877Z","3.4.2":"2018-03-22T15:46:50.514Z","3.4.3":"2018-03-27T11:08:53.823Z","3.4.4":"2018-03-28T11:35:56.767Z","3.5.0":"2018-04-05T04:40:28.779Z","3.5.1":"2018-04-06T00:12:49.227Z","3.5.2":"2018-04-10T15:53:11.503Z","3.5.3":"2018-04-18T01:57:06.954Z","3.5.4":"2018-05-02T14:34:14.444Z","3.5.5":"2018-05-02T14:47:17.367Z","3.5.6":"2018-06-25T14:25:34.962Z","3.5.7":"2019-02-07T17:10:00.159Z","4.0.0-alpha.0":"2019-06-24T16:41:55.518Z","4.0.0-alpha.1":"2019-09-16T16:03:01.948Z","4.0.0-alpha.2":"2019-09-16T21:13:42.925Z","4.0.0-alpha.3":"2019-09-16T22:40:48.502Z","4.0.0-alpha.4":"2019-09-16T22:44:03.407Z","4.0.0-alpha.5":"2019-09-16T22:57:33.564Z","4.0.0-alpha.6":"2019-09-17T13:50:06.289Z","4.0.0-alpha.7":"2019-09-17T17:47:34.510Z","4.0.0-alpha.8":"2019-09-17T20:13:20.148Z","4.0.0-alpha.9":"2019-09-23T03:36:10.252Z","4.0.0-alpha.10":"2019-09-23T16:52:35.383Z","4.0.0-alpha.11":"2019-09-24T03:33:01.766Z","4.0.0-alpha.12":"2019-09-24T16:35:50.557Z","4.0.0-alpha.13":"2019-09-24T16:41:59.828Z","4.0.0-alpha.14":"2019-09-24T18:48:37.799Z","4.0.0":"2019-11-11T20:32:34.452Z","4.0.1":"2019-11-11T20:37:07.458Z"},"repository":{"type":"git","url":"https://github.com/tannerlinsley/react-form.git"},"license":"MIT","readmeFilename":"README.md","users":{"zakharday":true,"blakeredwolf":true,"marcrobinson":true,"kshaban":true,"rajal13":true},"author":{"name":"tannerlinsley"}}