{"_id":"@aderbalnunes/react-jsonform","_rev":"23-9cf3745280287c37878bb857e46631e4","name":"@aderbalnunes/react-jsonform","dist-tags":{"latest":"0.2.7","beta":"0.2.8-beta.2"},"versions":{"0.1.2":{"name":"@aderbalnunes/react-jsonform","version":"0.1.2","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"react":"^17.0.1","react-redux":"^7.2.2","redux":"^4.0.5","prop-types":"^15.5.4","@material-ui/core":"^4.11.2"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.1","react-dom":"^17.0.1","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"8da952a7521a163cff0f1bf8db664781672a3172","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.1.2","_nodeVersion":"10.19.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-bbLeQK62lMcmJiG8VyOuzPm+kfpq3pCwaYG8KtluNqqO6foJeZbjN4Hit5BaOTHI91WBK9EhGAtGKy+VTj2aIQ==","shasum":"f632a34f43ed99551c6fea5b1abedd032dd6d853","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.1.2.tgz","fileCount":7,"unpackedSize":968204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYiItCRA9TVsSAnZWagAAi0IQAIBUp6tuVHCBzR3Rhvsd\namw9kx0WogTjDXdFLnFzz14vQKAqMZR3Xge1ZaK3Lqpz3OollazdvtnwfX0A\nasB4UNKoOSPmlAGsZXJrR1PMTSWzExgoC4ywI0G3nM8uIKfmzwxorvQ8CNMw\nAb0GrpcmkQ85XxGooENAuDxRXNWY2BhuiSx+QPD7Xqd2bLTdgoOqoj/izpr+\ni/5xjOkUEn5pdHlnbiXV1ltDARY+tUW/gLxShMNAXDUds/ok4Rk3eC9PEBJ6\n7/8SAx4StMZzS3aVy6trk9AXuAXg3J3qpXW8aC+UNXw0+NsKaIPbTS8rKBZ2\ni4B94fV0cB2148ln9q3+rOIFcpvfzfnG1tcaXDAC94FVMPTcmbFUmIuZ97LI\nLIVazCGWTenetH+NliaQPj4Ep9eGpPB1fK+sgubonqXGb23GH74BRniKYF4Y\nKY+Deq/o6S/B5v0kyoM0I9qBu699WvQt9jpN6MPsjkIuvKDMjJnBUPpjuT8Z\ntcX8SIWc5ZbBuyfliV9jE4kXZP45hFc2lfTI88UCpVKv7LtT6O2hUVmiuBAU\nldqz9MZ2TWgGuJY89vye9xGcFH7WusT6gAhwxdtOaRflgYQK3i2epCd+SdNp\nPTNcZ8XKtqdpR5cKJQ8Lu2iMA98j8LUDTCjioM/9EIRaLmP3tr+hkrYm/BOC\nbUnr\r\n=eNHM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChWqIfwHNx9oroWtKdfEcxff9IlI307WUsuN5vjoyy1QIhAJ03qF9PKlgUimz0e7RgPrV4+ZdxtON+zri5vrWdFnF0"}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.1.2_1617044012806_0.007020162832979793"},"_hasShrinkwrap":false},"0.1.3":{"name":"@aderbalnunes/react-jsonform","version":"0.1.3","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"react":"^17.0.1","react-redux":"^7.2.2","redux":"^4.0.5","prop-types":"^15.5.4","@material-ui/core":"^4.11.2"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.1","react-dom":"^17.0.1","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"8da952a7521a163cff0f1bf8db664781672a3172","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.1.3","_nodeVersion":"10.19.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-feLd9+9QyNAThHzijVg32HCUrKHbl4bS+sToiELOu+tcoKmHnM1tmWPjNHWgSY0DQTGU+ZsTjMvjBkjHai8dSw==","shasum":"1492ac284b9bf41bc6e80dfb913f517e3e3c617d","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.1.3.tgz","fileCount":7,"unpackedSize":968150,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYij1CRA9TVsSAnZWagAAfL8P/1WCBVtLpU4vsMtmF/P+\neOcGc9ZA3CgdwLXnUxeYlO6jK0fpuN3jQFWNCgrGG8t/An7xnqg6BGQZPkSL\nZhoVz9ESlE0W3yG/5sMrAxRQ+NHrbZHJh22VPEphAlaeJjYY1kGrzsnn3FXo\njv+xqA7tY1/hwqbzgcbU7Wv34rvQ9l1PccGf3DzZE6505zfkfmllP6Iuk7Qg\n6KfEZol2EWrTolDgOxGnB2oqHP9GCIeAuFlZRZNyTQYAHaHgES6XVbUKwR6n\nxbyzkfAONNsagbnGaLRilQuPVJ5AgVGSxSZreiFVIyGsqbmVTNVUan9U6fV0\n17PmZg0i4YRrLZawbVu3/tgRiHiCLGIwNQPF9j+lSZVXasIcbB14v+0lSLZm\nbC5qLix+MhY559hQ/55DEHg8oCLVOI4ye20ne0dZDPLgBQ6bV35rHK16bT3O\nKieW5KVXJ54xy4EgXc/Y0lQAZ5fYUnlFZNzBj/5Q6wrk3c8cGsorUZ4xZ9Ud\nSE3ZWCu88IJiU3l48zQA47egkRCSObNvBRifakuDhGOs3BgkBp8wKveduTvX\nu98xBUjCqF8FTEhFQ1ros3BUNnsoMteO6ByOWVO9AnM7YJYOxDljeyI8gpfk\nVygyNXMAX9yAa7IwVSgr0F+J2Bqu01za3rzNq5G0H7ybi4Kaaxo8tX5Mvzln\nEtIC\r\n=8uh1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDF3G6CMIuMz2wO/sgst8t1fAy1/MTdXCGJ7j+9uyX3xwIhAJP7cAw4Wvu1w5WX5icnlh+Nyy1+uqA/mBeWMKABa6zl"}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.1.3_1617045748895_0.4617546330687723"},"_hasShrinkwrap":false},"0.1.4":{"name":"@aderbalnunes/react-jsonform","version":"0.1.4","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"react":"^17.0.1","react-redux":"^7.2.2","redux":"^4.0.5","prop-types":"^15.5.4","@material-ui/core":"^4.11.2"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.1","react-dom":"^17.0.1","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"8da952a7521a163cff0f1bf8db664781672a3172","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.1.4","_nodeVersion":"10.19.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-sxhJQNnW8dSubxiHghq57SIja7BeiS9oH28tsNxdQUjKeucQ5Hcg3tWn/tjNf3aWemUCy/nZqIEIJYAOzCiN4g==","shasum":"e0e0cc497f99801da6b61aababe97f014bf5c3d4","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.1.4.tgz","fileCount":7,"unpackedSize":968350,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZIlSCRA9TVsSAnZWagAAee8P/04w0NtfVt+atf+JUQpj\nIUnYxSYePIBN3uamWy0E8wDtwQF8cf2nVf41k/3X857mEN/QoGc+im85Jk7f\nfXonJ/N6ay/PI/1pIYq74qD9FZyZVAgyvKeWq+poAeA3kUXdiHKXhnJW9kRg\n+lLrjl5VJdsXAMXj2g7xb5tC0fFAum44Hv9vgVEi7CbaaOtZSKQGDUTqx1Hy\nxJouN8OCaHtCQ5Uxl5G7y5W45KR916+YD8cLTmPe6GFEkw4MZYd76ph28iFz\nP67Sj+v89yfXjVYrvAqso+WgqRK+d3gs36hd02Mh9fjNjJiJ9UA8VPNxu74E\ncRfWCBW3i5lxIlXMEWt3vi+N3Re24J6Aa3xEG3wSZAY4/xyiDlYhZplO5ijn\nlXsPUjrx7Ag73abQcsAdEEqmpcv84dh4xsWTRPeeThy0KQTt8gGKvsbw481g\nPmHox3ktUmpmqIVPwZa0hfskPpCIEoQ/4TaRcIL56smT2FA0C/3xe5Ui99qB\nuJ5GjS3FyHUhl1dm6IrJ7esfEwU9mMoJ2dUx2S5q+SDT8/cVV6vMBtmKzo6f\njhGp6bRYqG3y6gPEgtFe9v84fI9PqVIzo7hE27eflH6259bU3WW1Z3EdZ+e0\n0l0JM35wXVXooMeA9xO6nzVsofEC5cXUIybFPpUXG+O7mpKfzP1dx6hBKwCW\nLpit\r\n=+KCa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkE6xfoGnHhTUGBmNvkOyG3JueBdUvIi1UQ2kpzZiL+AIhAIw2ZWjzZ5GTvv+D7GkQVHO0pcGUZzX+vC4eoZmPW+yn"}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.1.4_1617201489993_0.49828702207331355"},"_hasShrinkwrap":false},"0.1.6":{"name":"@aderbalnunes/react-jsonform","version":"0.1.6","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.2","redux":"^4.0.5"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"9578398f632a8fbef6220f8779525bc6484910c5","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.1.6","_nodeVersion":"10.19.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-Tn+04z0CPSY6c/nqWIDbA4q6INs9FI8txVwGo287LNOYcuPH7BdNxeG5huXu5K9m2D/6FP6PhOmy0SPs8TH8tQ==","shasum":"0f4ea27f0da2ab19702d38a09f92bebe08a2ab84","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.1.6.tgz","fileCount":7,"unpackedSize":979105,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgpbJNCRA9TVsSAnZWagAA4m4P/ioLOLjNp9pkQGmDZmKp\nMFZ/SwhPKnJaSEkzlSdZOrfXeU1yM7lkH+bfSYm1be3+ZQYSAb6bsBrE9bQi\n3xZRL7WUFwORLaeZq0qNMMtpeR4J4wsk37WfNXfhNuj2zDZWZllDz4xDbCpG\naeNFhgYgnm9Msylwc7AN2Ttgfc4Vt7sYOpj27RKWTc76qlFiXM1hOpAhci9M\nZ68+dec64oa4VV2/rKhckXP+6r4FhWg30WAW67xCcIeRwEp+GIYjy980j98G\nHds0nBPe8t48GSl6SlXDfzGBW1PpBy/DNUw7TbyTo24wjgXezEayNnFMHNg1\n8ZQKRBbiAgfz+k+KXtI4eZpo+mOjTSWvNm6Gpoyo9yAvRf6JQpcpQfL/IQLP\n6XztK+297wgdDoFqf+Ip/y76z6QGBPeIBOhZtIJtbBEHoreJtnXZFAAsHByT\nT22um7OQ/Na+vAD9yQynZCEExn/Y/ySi8u0tVFXdLQeUisHQWyGuW7z1Tk8G\nL9MMvB8Eip9mhDQNYJFDKHJFRRQR1KzPEQfmQzT/Lg5uY1U2UEpxBlVt0UvP\nuzTCwAePBs7dQ/SLKTY1ezWSb2yB4wavKr2J2V0RcRR3T9EWAQ+MhBNny5BK\nivfJOmFotIzpaXG6zf/4+djPxIPhqwHZmAxgIXDlM54Cq5ABfcSKvND4uNww\nC6L7\r\n=9FZC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE/5rJPQttniRGyme6wLiYvEVaeL2FsaRPXi0ijSwlxwAiAFADfXdRV9Ogd7g4NtCulm+90rdPvbc1XyMdOVP8fg+w=="}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.1.6_1621471821422_0.5877413628485382"},"_hasShrinkwrap":false},"0.1.7":{"name":"@aderbalnunes/react-jsonform","version":"0.1.7","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.2","redux":"^4.0.5"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"60c1cf12cd7463aa98535883ef8f58b3531bb612","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.1.7","_nodeVersion":"10.19.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-bZ/Vam/Kju9ZoOv8LBh+q7mxeHSF5qGJG9QepIX4YDd9yGyj65o4jAv5X7XVALGkRSbiGuKz0bxa2X9l2Vfj2Q==","shasum":"c74cb07994f5bb18ba79cabbcedca9bde5bfc939","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.1.7.tgz","fileCount":7,"unpackedSize":982395,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgtt70CRA9TVsSAnZWagAAtyoQAImQ/xqKyS/cZI4CB3HA\nqgXhZxIsMV8f3FIFwWGwMuzR9/1Bs3ng1HGSl/PRtiSfYSr1e1vWIGdEMeYI\n1PT3i4XW7tpd3uFrsisixX67YKd5dXjOURK1WLIGfkxtED0uSSTF+BOggX61\nMfT+cGV7rvASMkgquOQBdcXnLolijunD/fPsNf8m1Cqls1+4Eh75no0m/TK9\ntjszVQVyDNsDxd7P/eUY85BmGe0I73dP0DiHNkaxuBQzxyXBXDNzp4zo6qtK\nzcupvmjEKB8YTzaiQq80rxp+39uV+Ph4WUWPIbfxqxdq5E/aGHqku84LlOIE\nzjPCV/UJYUwQGQnVagfX0BDlQIshO/xYagoHeTJMb5cMcZt2svRi/ONMYbNA\nIeJl60tlQvXx7aueQk4UzaQQn8BKkC65baD2pwTrL1iAs3PFCsbdGW0OAH/P\nPK/CItnNnFfa9TluNxyFiWUZ9f8I76ELtG1cCW0hNKo6TmTZbJJJ811FxxF0\nPf0dAe9crwmYXKhprjmziliQUy65bPoFvAVpUw/0sJIb3Aj0JoNZBsFmsg8o\nxEmaSeOfo1jzW0DjcvHt8kZPBTN2+6fG2s6+wnfh2z8ooCrbL0AySgr5IDgY\n3Vr0iRKBocFeebZ/9D6KKMILdbx6OlKBtQnzqjUJpIAGazy3SnE2Icr72TdS\nEu9x\r\n=pOQz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCiil2dMUlO7UKzksuHtIqazdHgUzBsotKvuAcxx0i7KQIhAMrYKYyyDnrBfUbhLHdTjKDYZsGcFhYFXEl3ewSBKD8R"}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.1.7_1622597363930_0.08659068165079487"},"_hasShrinkwrap":false},"0.1.8":{"name":"@aderbalnunes/react-jsonform","version":"0.1.8","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.2","redux":"^4.0.5"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"1cd82339397d705b599704f0a4d3134f3b6f54ea","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.1.8","_nodeVersion":"10.19.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-dChU8Biq+KPa0gnhmAxN/F+dmzSxY91Ey6KJkRpPkffg2YLLOEqNSrBRJfX/71nWDq70SsJaLz+9Vcyy23Z6YQ==","shasum":"d2be4ae338810572d53c29e62a18038ab0724516","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.1.8.tgz","fileCount":7,"unpackedSize":1024559,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1TKDCRA9TVsSAnZWagAAlUsP/R2bakPnapVOtvBOcxTG\nqbb9dxwNQPbmZZqmybhv+wj/rNT9FGOT15TAVdrbXe2i1nTwegFlYHb8Sv2c\nSjTIRII7CTXyJV1u7/iu3n9xpY1FigGOtPI8TA+h7ZAmofur5qVpZlQLrnL+\nhrrSYjYOr1gWLV8tLlT9Ay2BWXFOQsI13FT8KlU1agTjT0gcOjaFOuSv8TqG\n28pZ6tC/y9DFWJs/oVO9FB0Xyn9UvAXohcan4k+3ONZaSZ0FcflTf4AoBNFV\ngJ+UFTkA6qZfhwL8QXiLKjUxqwbePKauM7baKrpdlW4qPNcBeAF5gN03qQDt\n/P8M3VRNLyP92mU9qC9BevtkYFRcBW8f9907B8U2cy+kJsZn+USd0jgGxNFC\nOxAr2GRozJIisX/UQ1qoK5ZeZ2ZUGObaIFgS5+KFMZLX67ogCPBsTXfhz/Xd\n90bKfgYIrmi0x4uKpWgTTUkHYTD2PNixPVwauI8MxR6HvBRaTgsJ89xnahMO\n19Yc4w4TrdwEzbkZpcbimqsosLCzWVs7/h5vWmqCbE0c3Brf4rKfBvdttFJu\nGFmHXua8SHMozbgkwDEblVPRm58jrVEcGKxNYmNxbwxdAaCBq7niYmYw/+ao\nG+bvdKp9MMuWcR8dvHWtcgApkogZFO7LVV4YlMeIEcpNjY6jc5c2BZxSILC9\nG9GF\r\n=90cn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHfwe2UN07Gdr9XezUuPDU0s+1gH2dJCCXHGp3c4DiD9AiBhw3yBPCOaEgTsHb++OA6a0l2rqQdWakCmIv85xoXz8w=="}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.1.8_1624584834500_0.1983983343707416"},"_hasShrinkwrap":false},"0.1.9-beta":{"name":"@aderbalnunes/react-jsonform","version":"0.1.9-beta","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"readme":"# jsonform\n\n> Create material design form from a JSON object\n\n[![NPM](https://img.shields.io/npm/v/jsonform.svg)](https://www.npmjs.com/package/jsonform) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)\n\n## Dev Dependencies\n* [Material-UI](https://material-ui.com/pt/)\n\n## Install\n\n```bash\n$ npm i --save @aderbalnunes/react-jsonform\n```\n\n## Basic Usage\n\n```jsx\nimport React, { Component } from 'react'\n\nimport JsonForm from 'jsonform'\n\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  }\n}\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        onSave={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n## Popule form with remote data\n\n```jsx\nconst formFields = {\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_type': {\n    component: 'select',\n    props: {\n      label: 'User Type',\n      options: () => new Promise(resolve => {\n        fetch('<rest api endpoint>')\n          .then(res => res.json())\n          .then(json => resolve(json.map(r => ({label: r.type, value: r.id}))\n          .catch(resolve([]);\n      })\n    }\n  }\n}\n\n// assume that the endpoint API returns something like: \n// { result: {user_id: 321, user_type: 123, user_name: 'Foo'} }\nconst fetchRemoteData = user => new Promise(resolve => {\n  fetch(`<url endpoint>/${user}`)\n    .then(res => res.json())\n    .then(json => resolve({data: json.result}))\n    .catch(() => resolve({}))\n});\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        fetchData={fetchRemoteData}\n        fetchParams={[321,]}\n        onSave={(data) => console.log(data)}\n        formChange={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n\n## Split form into columns\n\n![Splited columns](./example/public/assets/images/split_columns.png)\n```jsx\nconst formFields = [{\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_email': {\n    component: 'text',\n    props: {\n      label: 'E-mail',\n      required: true\n    }\n  },\n}, {\n  'user_password': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  },\n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  }   \n}]\n```\n\n## Custom components\n```jsx\n\nconst MyComponent = ({...props}) => {\n  const {id,value,onChange} = props;\n\n  const _increment = () => {\n    if(typeof onChange === 'function'){\n      onChange({target: {name: id, value: value + 1}})\n    }\n  }\n\n  return (\n    <Button onClick={_increment}>Increment {value}</Button>\n  )\n}\n\nconst formFields = {\n  'my_component': {\n    component: MyComponent,\n    props: { value: 1 }\n  },\n}\n```\n\n## Elements\n\n* Text input\n> props required: label\n```jsx\n'phone_number': {\n  component: 'text',\n  props: {\n    label: 'Phone',\n    required: true,\n    value: \"(123) 456 7899\",\n    validation: /\\(?([0-9]{3})\\)?([ .-]?)([0-9]{3})\\2([0-9]{4})/,\n    onKeyPress: (ev) => {  }\n  }\n}\n```\n\n* Input Select\n> props required: label and options\n```jsx\n// fixed values\n'user_level': {\n  component: 'select',\n  props: {\n    label: 'User Level',\n    required: true,\n    options: [\n      {value: 1, label: 'Admin'},\n      {value: 2, label: 'Default'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n// assume that the endpoint API returns something like: [{id: 123, label: 'Foo'},...]\n'user_status': {\n  component: 'select',\n  props: {\n    label: 'User Status',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n```jsx\n// dependency\n// fetch remote data based on value selected in other select\n'user_profile': {\n  component: 'select',\n  props: {\n    label: 'User Profile',\n    depends: 'user_level',\n    options: level => new Promise(resolve => {\n      fetch(`<rest api endpoint>/${level}`)\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.profile, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n* Multiselect\n> props required: label and options\n```jsx\n// fixed values\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    required: true,\n    options: [\n      {value: 1, label: 'delete'},\n      {value: 2, label: 'update'},\n      {value: 3, label: 'insert'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n\n* Radio Group\n```jsx\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: [\n      {value: 'male',   label: 'Male'},\n      {value: 'female', label: 'Female'},\n      {value: 'unknow', label: 'Unknow'}\n    ]\n  }\n}\n// fetch remote data options\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n\n* Switch\n> props required: label\n```jsx\n  'user_is_master': {\n    component: 'switch',\n    props: {\n      label: 'Master user',\n      value: true,\n      value_type: 'bool'\n    }\n  }\n```\n* File upload\n> props required: label\n```jsx\n  'file_upload': {\n    component: 'upload',\n    props: {\n      label: 'File Upload',\n      info: 'CSV or XML file'\n    }\n  }\n```\n\n## Options\n\n### Controls\n```jsx\n<JsonForm \n  components={formFields} \n  controlOptions={{\n    saveText: 'Save Form',\n    cancelText: 'Cancel'\n  }}\n  onSave={(data) => console.log(data)}\n/>\n```\n### Skip a property in the model\n```jsx\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  },\n  'info': {\n    component: 'info',\n    props: {\n      text: 'Tip: Use a non commercial email.'\n    },\n    options: {\n      skipFromModel: true\n    }    \n  }  \n}\n```\n### Popule with a model\n```jsx\nconst MyModel = {\n  user_name: 'Tom',\n  user_email: 'tom@email.com',\n  user_gener: 'male'\n}\n\n<JsonForm \n  components={formFields} \n  model={MyModel}\n  onSave={(data) => console.log(data)}\n/>\n```\n\n## License\n\nMIT © [Aderbal Nunes](https://github.com/aderbas)\n","readmeFilename":"README.md","gitHead":"aada224ea4422bdcf12047eefd9a5e50e33078c6","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.1.9-beta","_nodeVersion":"14.17.2","_npmVersion":"6.14.13","dist":{"integrity":"sha512-YmmSJ5tIgdP0dMeRvwbqJxKkzXo4qWtJ/QkbACRIALOdd+GRejSSjjGeokMXVHO3BYvXXF9+9TZHO3eDKA0zEg==","shasum":"e772e83fdc475af2c7a598c146d31c7f13760b61","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.1.9-beta.tgz","fileCount":6,"unpackedSize":1031212,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg7a+jCRA9TVsSAnZWagAA1WQP/j80BpI8Fvhx6AcZdgAr\nu0GkJ97fm5KCyWInKe67V7QLhx7yQfvrMHdRpFRG2l9+B56Tbqv75UZQNaMb\n27iK/HFJPwE7orIDkeoxLY+shsepb15+qabcJR99SvbjO4D3D4ICvTpxQa02\nKetSdaYM0zpymOPiM46zMwCNImKd/TdbtfwH/J+KW7IZ/s9gL6EiKCl7AJPN\nYdj3nohRmZMX8ao9R+58hzFVKn1uNMFMDX8TLRRpgY2P7R6DpIII9U2CWcXt\nEt/tWf1ZRJiz1PQWSBE2CXPMKSbegRdyPkQDby5v5Ial3502lZ5CYg+cjUcG\nsmCTTWyWZ0E+5h0KsIRDqn/hlk/DKHT7MR7KtPXweIKJwjnRH+htrc1GZEFa\nIG8NK4jsZaiyL0uQo5ss6J4wr9G+hb/ysn9H9dHVcbq2zQUWXAbWwDljWdQO\nKf1P5A0ErHCEaXdUKYcknyz+gofsrmMnaPTwU49/evnBnWTvRssng6gLjtMc\nfXzv/VGOiVcoFb+8LICWRpmfBaydIyG4rGlfBlSj1Z4Y57BJbFWpDgoYeZOp\nNe3xJ8yQOXnth0FL8H/NFNlxFk2jinbBYBUxv9OkP8OONMEE7CWgKbauQ8JQ\nv613US58jCF9jvblXGoTVSRfG2fnSLaKtxPFcOuZfksgSKvLIVz3YvBuL7Qk\nQxrd\r\n=db2R\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDFlelKhczIU6AfLURevsdBz/S/ulC9xOIhn6Sh1ztI1AIgNjKVJVeZ1di4Oy7b2I3Xwe4quzI+vJxYh46EQKPJ0cU="}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.1.9-beta_1626189731199_0.7065523516340779"},"_hasShrinkwrap":false},"0.1.9-4-beta":{"name":"@aderbalnunes/react-jsonform","version":"0.1.9-4-beta","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"readme":"# jsonform\n\n> Create material design form from a JSON object\n\n[![NPM](https://img.shields.io/npm/v/jsonform.svg)](https://www.npmjs.com/package/jsonform) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)\n\n## Dev Dependencies\n* [Material-UI](https://material-ui.com/pt/)\n\n## Install\n\n```bash\n$ npm i --save @aderbalnunes/react-jsonform\n```\n\n## Basic Usage\n\n```jsx\nimport React, { Component } from 'react'\n\nimport JsonForm from 'jsonform'\n\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  }\n}\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        onSave={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n## Popule form with remote data\n\n```jsx\nconst formFields = {\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_type': {\n    component: 'select',\n    props: {\n      label: 'User Type',\n      options: () => new Promise(resolve => {\n        fetch('<rest api endpoint>')\n          .then(res => res.json())\n          .then(json => resolve(json.map(r => ({label: r.type, value: r.id}))\n          .catch(resolve([]);\n      })\n    }\n  }\n}\n\n// assume that the endpoint API returns something like: \n// { result: {user_id: 321, user_type: 123, user_name: 'Foo'} }\nconst fetchRemoteData = user => new Promise(resolve => {\n  fetch(`<url endpoint>/${user}`)\n    .then(res => res.json())\n    .then(json => resolve({data: json.result}))\n    .catch(() => resolve({}))\n});\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        fetchData={fetchRemoteData}\n        fetchParams={[321,]}\n        onSave={(data) => console.log(data)}\n        formChange={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n\n## Split form into columns\n\n![Splited columns](./example/public/assets/images/split_columns.png)\n```jsx\nconst formFields = [{\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_email': {\n    component: 'text',\n    props: {\n      label: 'E-mail',\n      required: true\n    }\n  },\n}, {\n  'user_password': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  },\n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  }   \n}]\n```\n\n## Custom components\n```jsx\n\nconst MyComponent = ({...props}) => {\n  const {id,value,onChange} = props;\n\n  const _increment = () => {\n    if(typeof onChange === 'function'){\n      onChange({target: {name: id, value: value + 1}})\n    }\n  }\n\n  return (\n    <Button onClick={_increment}>Increment {value}</Button>\n  )\n}\n\nconst formFields = {\n  'my_component': {\n    component: MyComponent,\n    props: { value: 1 }\n  },\n}\n```\n\n## Elements\n\n* Text input\n> props required: label\n```jsx\n'phone_number': {\n  component: 'text',\n  props: {\n    label: 'Phone',\n    required: true,\n    value: \"(123) 456 7899\",\n    validation: /\\(?([0-9]{3})\\)?([ .-]?)([0-9]{3})\\2([0-9]{4})/,\n    onKeyPress: (ev) => {  }\n  }\n}\n```\n\n* Input Select\n> props required: label and options\n```jsx\n// fixed values\n'user_level': {\n  component: 'select',\n  props: {\n    label: 'User Level',\n    required: true,\n    options: [\n      {value: 1, label: 'Admin'},\n      {value: 2, label: 'Default'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n// assume that the endpoint API returns something like: [{id: 123, label: 'Foo'},...]\n'user_status': {\n  component: 'select',\n  props: {\n    label: 'User Status',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n```jsx\n// dependency\n// fetch remote data based on value selected in other select\n'user_profile': {\n  component: 'select',\n  props: {\n    label: 'User Profile',\n    options: level => new Promise(resolve => {\n      fetch(`<rest api endpoint>/${level}`)\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.profile, value: r.id}))\n        .catch(resolve([]);\n    })\n  },\n  options: {\n    depends: 'user_level'\n  }\n}\n```\n* Multiselect\n> props required: label and options\n```jsx\n// fixed values\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    required: true,\n    options: [\n      {value: 1, label: 'delete'},\n      {value: 2, label: 'update'},\n      {value: 3, label: 'insert'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n\n* Radio Group\n```jsx\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: [\n      {value: 'male',   label: 'Male'},\n      {value: 'female', label: 'Female'},\n      {value: 'unknow', label: 'Unknow'}\n    ]\n  }\n}\n// fetch remote data options\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n\n* Switch\n> props required: label\n```jsx\n  'user_is_master': {\n    component: 'switch',\n    props: {\n      label: 'Master user',\n      value: true,\n      value_type: 'bool'\n    }\n  }\n```\n* File upload\n> props required: label\n```jsx\n  'file_upload': {\n    component: 'upload',\n    props: {\n      label: 'File Upload',\n      info: 'CSV or XML file'\n    }\n  }\n```\n\n## Options\n\n### Controls\n```jsx\n<JsonForm \n  components={formFields} \n  controlOptions={{\n    saveText: 'Save Form',\n    cancelText: 'Cancel'\n  }}\n  onSave={(data) => console.log(data)}\n/>\n```\n### Skip a property in the model\n```jsx\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  },\n  'info': {\n    component: 'info',\n    props: {\n      text: 'Tip: Use a non commercial email.'\n    },\n    options: {\n      skipFromModel: true\n    }    \n  }  \n}\n```\n### Popule with a model\n```jsx\nconst MyModel = {\n  user_name: 'Tom',\n  user_email: 'tom@email.com',\n  user_gener: 'male'\n}\n\n<JsonForm \n  components={formFields} \n  model={MyModel}\n  onSave={(data) => console.log(data)}\n/>\n```\n\n## License\n\nMIT © [Aderbal Nunes](https://github.com/aderbas)\n","readmeFilename":"README.md","gitHead":"dd736d808b8d0e1cc64187a713f4bf62d34b8177","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.1.9-4-beta","_nodeVersion":"10.19.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-tyAViwY1mxaQb7PkJyELj1ho2iq2FLEw+PRlU8zCzsgq7w2i8e3DF1DIE68O4xeGcrcrl/nmrN0qSLLYLRotxQ==","shasum":"a113bab639889ce0ad411e6ed8507ed188bd62bd","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.1.9-4-beta.tgz","fileCount":8,"unpackedSize":1750087,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg7j0GCRA9TVsSAnZWagAAJa4P/Ahfbjk0IIulczUavgTN\nvJ61e2Tl97LwuCeC6JlgG2m1n/u1usJB/OPvrDh2JRa30qrbxgaBeVjMMisY\n8uPuWV7hoFSkVR5atYafKVJ0HoryvQ1NVqVx6f6rZvIo6VN/GDhvZsQx3q3x\nZUcR5n0M6B114RDni/3A2HGg6l/u1ScKsUDqCDG85iiP+f4frnbWSiDte9kH\natVuZZDCxIhIX3OViTicgrS1blVYqmR0loBwKfVoW7prWN8rM2g9GPZIaAHe\ngIo+slCbsZE2V8pbaTcJ4mFT7ANEOo0KegGyYCodccZKA52KyfA0M/TakeGA\n8KWPLqajLFpO2kjxlaLaRDRtY/Qmc64kuBkCOH1oEsHz/H/c9H+IImxkLY/+\nTviJglDjYcZ5DYfxw1ZZO6Qm7/XMjLIm9CMNcxcnfKVXfjg4jYZpWhWHep9M\nYawqhN4r79jLqn3zP+rv8pHdIWWCh6mw+HSj4E5nhMjV00amNBLzleQOrPIP\n7jRn7bdvlXCgOwBCMBBCRi3zF8WFvvkJdW73h2t+JXQz9XvvQiJZWnlR6fju\nUVrSFEyBJnPwlE/jeapA5Y0aBTe2pCKD9G2KMzV8DtvobHS0EQKZZInVdY8q\nihdyOHmr9V0Kn1kptzaRkOsiet9Xv7u7HWQUrhLj1v/eJOfQWxsGtsjp9URK\nOLuC\r\n=oii8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvpnB+3Aypp+n2wvmvCGNt61PIMC8IRLGO+Qgb9hgblgIhAIvnbwtV3w+IdA/kIhhJ8qgQgPyuFSVwtsBjlecIE8w1"}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.1.9-4-beta_1626225925703_0.5054217974462669"},"_hasShrinkwrap":false},"0.1.9-5-beta":{"name":"@aderbalnunes/react-jsonform","version":"0.1.9-5-beta","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"readme":"# jsonform\n\n> Create material design form from a JSON object\n\n[![NPM](https://img.shields.io/npm/v/jsonform.svg)](https://www.npmjs.com/package/jsonform) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)\n\n## Dev Dependencies\n* [Material-UI](https://material-ui.com/pt/)\n\n## Install\n\n```bash\n$ npm i --save @aderbalnunes/react-jsonform\n```\n\n## Basic Usage\n\n```jsx\nimport React, { Component } from 'react'\n\nimport JsonForm from 'jsonform'\n\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  }\n}\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        onSave={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n## Popule form with remote data\n\n```jsx\nconst formFields = {\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_type': {\n    component: 'select',\n    props: {\n      label: 'User Type',\n      options: () => new Promise(resolve => {\n        fetch('<rest api endpoint>')\n          .then(res => res.json())\n          .then(json => resolve(json.map(r => ({label: r.type, value: r.id}))\n          .catch(resolve([]);\n      })\n    }\n  }\n}\n\n// assume that the endpoint API returns something like: \n// { result: {user_id: 321, user_type: 123, user_name: 'Foo'} }\nconst fetchRemoteData = user => new Promise(resolve => {\n  fetch(`<url endpoint>/${user}`)\n    .then(res => res.json())\n    .then(json => resolve({data: json.result}))\n    .catch(() => resolve({}))\n});\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        fetchData={fetchRemoteData}\n        fetchParams={[321,]}\n        onSave={(data) => console.log(data)}\n        formChange={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n\n## Split form into columns\n\n![Splited columns](./example/public/assets/images/split_columns.png)\n```jsx\nconst formFields = [{\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_email': {\n    component: 'text',\n    props: {\n      label: 'E-mail',\n      required: true\n    }\n  },\n}, {\n  'user_password': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  },\n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  }   \n}]\n```\n\n## Custom components\n```jsx\n\nconst MyComponent = ({...props}) => {\n  const {id,value,onChange} = props;\n\n  const _increment = () => {\n    if(typeof onChange === 'function'){\n      onChange({target: {name: id, value: value + 1}})\n    }\n  }\n\n  return (\n    <Button onClick={_increment}>Increment {value}</Button>\n  )\n}\n\nconst formFields = {\n  'my_component': {\n    component: MyComponent,\n    props: { value: 1 }\n  },\n}\n```\n\n## Elements\n\n* Text input\n> props required: label\n```jsx\n'phone_number': {\n  component: 'text',\n  props: {\n    label: 'Phone',\n    required: true,\n    value: \"(123) 456 7899\",\n    validation: /\\(?([0-9]{3})\\)?([ .-]?)([0-9]{3})\\2([0-9]{4})/,\n    onKeyPress: (ev) => {  }\n  }\n}\n```\n\n* Input Select\n> props required: label and options\n```jsx\n// fixed values\n'user_level': {\n  component: 'select',\n  props: {\n    label: 'User Level',\n    required: true,\n    options: [\n      {value: 1, label: 'Admin'},\n      {value: 2, label: 'Default'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n// assume that the endpoint API returns something like: [{id: 123, label: 'Foo'},...]\n'user_status': {\n  component: 'select',\n  props: {\n    label: 'User Status',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n```jsx\n// dependency\n// fetch remote data based on value selected in other select\n'user_profile': {\n  component: 'select',\n  props: {\n    label: 'User Profile',\n    options: level => new Promise(resolve => {\n      fetch(`<rest api endpoint>/${level}`)\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.profile, value: r.id}))\n        .catch(resolve([]);\n    })\n  },\n  options: {\n    depends: 'user_level'\n  }\n}\n```\n* Multiselect\n> props required: label and options\n```jsx\n// fixed values\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    required: true,\n    options: [\n      {value: 1, label: 'delete'},\n      {value: 2, label: 'update'},\n      {value: 3, label: 'insert'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n\n* Radio Group\n```jsx\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: [\n      {value: 'male',   label: 'Male'},\n      {value: 'female', label: 'Female'},\n      {value: 'unknow', label: 'Unknow'}\n    ]\n  }\n}\n// fetch remote data options\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n\n* Switch\n> props required: label\n```jsx\n  'user_is_master': {\n    component: 'switch',\n    props: {\n      label: 'Master user',\n      value: true,\n      value_type: 'bool'\n    }\n  }\n```\n* File upload\n> props required: label\n```jsx\n  'file_upload': {\n    component: 'upload',\n    props: {\n      label: 'File Upload',\n      info: 'CSV or XML file'\n    }\n  }\n```\n\n## Options\n\n### Controls\n```jsx\n<JsonForm \n  components={formFields} \n  controlOptions={{\n    saveText: 'Save Form',\n    cancelText: 'Cancel'\n  }}\n  onSave={(data) => console.log(data)}\n/>\n```\n### Skip a property in the model\n```jsx\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  },\n  'info': {\n    component: 'info',\n    props: {\n      text: 'Tip: Use a non commercial email.'\n    },\n    options: {\n      skipFromModel: true\n    }    \n  }  \n}\n```\n### Popule with a model\n```jsx\nconst MyModel = {\n  user_name: 'Tom',\n  user_email: 'tom@email.com',\n  user_gener: 'male'\n}\n\n<JsonForm \n  components={formFields} \n  model={MyModel}\n  onSave={(data) => console.log(data)}\n/>\n```\n\n## License\n\nMIT © [Aderbal Nunes](https://github.com/aderbas)\n","readmeFilename":"README.md","gitHead":"ca72226d5f848f74a6ced1a6e5ad66f6a1920556","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.1.9-5-beta","_nodeVersion":"10.19.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-v1XftiodpKB5ogQadn39X4Pfl4QcGvp9lkY94QYWdLIEaSiSCmdcHDgTFulLeuebI9Js8m7hWumwHImBTyjcng==","shasum":"e3392061049fe034142527f8012076843faadffc","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.1.9-5-beta.tgz","fileCount":8,"unpackedSize":1758586,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg74AYCRA9TVsSAnZWagAANhMP/1Qjd0tSGq1XNpVKWShl\n72w+ZoKC7cxfYB6V3dZI6zUt4NPsyXLMNXNyDwvvMB0GobdDP+qYFgq7Xgra\nkyB8fopW3jK4StHofGvwqLnNC8n96QQ9GzIOcNw3UYtFY9wBA3vNx6ZW3pNj\narmzhQe08cw+kfUxUZfTWDjg0k25b7OgQFnu/cCJTmdPdATpELSmd+fovc6y\nmg5SdZDcDG29pgrjXwQaPFSKjKcuioJ4RjfB3yahfw1ws8Fmb7xcNO2rO98P\n8ORKCBS6TZDH4FIMz2mi1uQruUNVdK0H30vOJQn3TgdBOJ0a2tfiss1bh3l7\nVw0wkpcd4hB8xDn3foOiG6LznKbuNOs51AUZrXjmNaOqJoEAIHzjjJWFzFg+\nmEwrfo5Q5fZa6l31EZ1tufxI8+Mz2IK5uVjCVQ2DOjQOMJiwaxy1C0Nqng/E\nuLtypCpNyllaJpOKTepcqpepJInZeV08Z5qILrRBshqj3L1ae1Vhmcksuvut\neUpD6H5pQN2belFRt9NgmYc6XEzc+3vadE4BsmSuGLXbzFSM+L8gBMs5F0uz\nO+fwpUFTcdnQXkqAFOXFDjvGmJ4IkJvq65tAvCndqjqYyJgMy1kJl5th0OQ9\nUCVw33SALeeG4RoBSh1LsTMgLCJLQ3F0KM2UtU92f89nJaY8XDW0DX85zeOb\nngZJ\r\n=+lGo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiweB555qDgIMUAzaPnJEt6FrjZAo+yKNQS+hV8TweiwIgYvC6zkPem/WIYarJ5K+moe5w1Mnar2TzuNkUpF8VmoM="}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.1.9-5-beta_1626308631910_0.8092632030637714"},"_hasShrinkwrap":false},"0.1.9-6-beta":{"name":"@aderbalnunes/react-jsonform","version":"0.1.9-6-beta","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"readme":"# jsonform\n\n> Create material design form from a JSON object\n\n[![NPM](https://img.shields.io/npm/v/jsonform.svg)](https://www.npmjs.com/package/jsonform) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)\n\n## Dev Dependencies\n* [Material-UI](https://material-ui.com/pt/)\n\n## Install\n\n```bash\n$ npm i --save @aderbalnunes/react-jsonform\n```\n\n## Basic Usage\n\n```jsx\nimport React, { Component } from 'react'\n\nimport JsonForm from 'jsonform'\n\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  }\n}\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        onSave={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n## Popule form with remote data\n\n```jsx\nconst formFields = {\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_type': {\n    component: 'select',\n    props: {\n      label: 'User Type',\n      options: () => new Promise(resolve => {\n        fetch('<rest api endpoint>')\n          .then(res => res.json())\n          .then(json => resolve(json.map(r => ({label: r.type, value: r.id}))\n          .catch(resolve([]);\n      })\n    }\n  }\n}\n\n// assume that the endpoint API returns something like: \n// { result: {user_id: 321, user_type: 123, user_name: 'Foo'} }\nconst fetchRemoteData = user => new Promise(resolve => {\n  fetch(`<url endpoint>/${user}`)\n    .then(res => res.json())\n    .then(json => resolve({data: json.result}))\n    .catch(() => resolve({}))\n});\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        fetchData={fetchRemoteData}\n        fetchParams={[321,]}\n        onSave={(data) => console.log(data)}\n        formChange={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n\n## Split form into columns\n\n![Splited columns](./example/public/assets/images/split_columns.png)\n```jsx\nconst formFields = [{\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_email': {\n    component: 'text',\n    props: {\n      label: 'E-mail',\n      required: true\n    }\n  },\n}, {\n  'user_password': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  },\n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  }   \n}]\n```\n\n## Custom components\n```jsx\n\nconst MyComponent = ({...props}) => {\n  const {id,value,onChange} = props;\n\n  const _increment = () => {\n    if(typeof onChange === 'function'){\n      onChange({target: {name: id, value: value + 1}})\n    }\n  }\n\n  return (\n    <Button onClick={_increment}>Increment {value}</Button>\n  )\n}\n\nconst formFields = {\n  'my_component': {\n    component: MyComponent,\n    props: { value: 1 }\n  },\n}\n```\n\n## Elements\n\n* Text input\n> props required: label\n```jsx\n'phone_number': {\n  component: 'text',\n  props: {\n    label: 'Phone',\n    required: true,\n    value: \"(123) 456 7899\",\n    validation: /\\(?([0-9]{3})\\)?([ .-]?)([0-9]{3})\\2([0-9]{4})/,\n    onKeyPress: (ev) => {  }\n  }\n}\n```\n\n* Input Select\n> props required: label and options\n```jsx\n// fixed values\n'user_level': {\n  component: 'select',\n  props: {\n    label: 'User Level',\n    required: true,\n    options: [\n      {value: 1, label: 'Admin'},\n      {value: 2, label: 'Default'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n// assume that the endpoint API returns something like: [{id: 123, label: 'Foo'},...]\n'user_status': {\n  component: 'select',\n  props: {\n    label: 'User Status',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n```jsx\n// dependency\n// fetch remote data based on value selected in other select\n'user_profile': {\n  component: 'select',\n  props: {\n    label: 'User Profile',\n    options: level => new Promise(resolve => {\n      fetch(`<rest api endpoint>/${level}`)\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.profile, value: r.id}))\n        .catch(resolve([]);\n    })\n  },\n  options: {\n    depends: 'user_level'\n  }\n}\n```\n* Multiselect\n> props required: label and options\n```jsx\n// fixed values\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    required: true,\n    options: [\n      {value: 1, label: 'delete'},\n      {value: 2, label: 'update'},\n      {value: 3, label: 'insert'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n\n* Radio Group\n```jsx\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: [\n      {value: 'male',   label: 'Male'},\n      {value: 'female', label: 'Female'},\n      {value: 'unknow', label: 'Unknow'}\n    ]\n  }\n}\n// fetch remote data options\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n\n* Switch\n> props required: label\n```jsx\n  'user_is_master': {\n    component: 'switch',\n    props: {\n      label: 'Master user',\n      value: true,\n      value_type: 'bool'\n    }\n  }\n```\n* File upload\n> props required: label\n```jsx\n  'file_upload': {\n    component: 'upload',\n    props: {\n      label: 'File Upload',\n      info: 'CSV or XML file'\n    }\n  }\n```\n\n## Options\n\n### Controls\n```jsx\n<JsonForm \n  components={formFields} \n  controlOptions={{\n    saveText: 'Save Form',\n    cancelText: 'Cancel'\n  }}\n  onSave={(data) => console.log(data)}\n/>\n```\n### Skip a property in the model\n```jsx\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  },\n  'info': {\n    component: 'info',\n    props: {\n      text: 'Tip: Use a non commercial email.'\n    },\n    options: {\n      skipFromModel: true\n    }    \n  }  \n}\n```\n### Popule with a model\n```jsx\nconst MyModel = {\n  user_name: 'Tom',\n  user_email: 'tom@email.com',\n  user_gener: 'male'\n}\n\n<JsonForm \n  components={formFields} \n  model={MyModel}\n  onSave={(data) => console.log(data)}\n/>\n```\n\n## License\n\nMIT © [Aderbal Nunes](https://github.com/aderbas)\n","readmeFilename":"README.md","gitHead":"9e51156b59d919b736ce3bfd43de499d3146d97d","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.1.9-6-beta","_nodeVersion":"10.19.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-CujvVHqKUT4R2CBB7Gun1ooPxZBu/aE+2325D2FFnhe7ZabMHkgflLEgY5kGIM7LYAa8I9RchhposEujaZY6SQ==","shasum":"7bc50425bb49fd03c0a538d89d48a476f7f5d5db","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.1.9-6-beta.tgz","fileCount":8,"unpackedSize":1769181,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAfdHCRA9TVsSAnZWagAAbZUQAKDWMyFv3Hf0t5EN9AtX\nqxHgFPB7CrXBugnU8iPKZKLRFmghYs1hDSXw3OS//IY1St6IHEhUkjdvIjjX\nUWbTKT0sq+6B4TxLIpIGD+JO0fMovehUNzFBgi9xgJpMz8d2MbbCb7qhVo0M\nxlX1qminvoA+bIMsZDPvpE3hzcCG37KXEZJDXcoQduutix3siVIp2ct1Irsr\nx8Sq0BjEuS4jXg6000ipjKVlzknXpWPOU2alnQC+BbN/0VfMOiz3dGy+jNIw\nLCSN3eZRAzvvhZkBFx7R5hU/UT09MsWGOboYuR7Dv7isvd5A8PJlwMse2H0y\nX0th/FfhfR+DotlNCg5+12tSbLlbo5hpdKvPEGVaG6rLMaM6l4F1d49N8HK+\n25ZxSMWJJZ4bR3DLTo/Ozfd6zsj+vQYCOlP/hoSzau5LhMLNDfLhLf+ueuKN\nGKgdf52z2R/mKhVng2XLA3i5klgA+D8Uzdg0filvWZYfLmHOjGSH5jjyb+M8\n+U9zXfU5Z/9SCEbZFAnlpaPHjJo6y+mMOmGrfL686LRCyGn4nuTXbEP6MAZr\njrDgaRlj2oesYBBbi/lezCJhS6Ln6eGMYxiQLgCIg0xfsIfbYr+Nry1nWaOI\naodn/dG0jcqX2Z/XQL7c1AcQVi9YH2TlZTqOGhCGTiqXG0u1hLNKscQPRlNV\naSUY\r\n=2O0j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFzaCftL271SrgchbZwNXh66FC/Tu0ens1YahXX5nPHxAiEAp/grJrerfFYxzdpqAUWWgxMDKo0RU9IHq2CxoQSRHRM="}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.1.9-6-beta_1627518791516_0.11882321735328816"},"_hasShrinkwrap":false},"0.1.9":{"name":"@aderbalnunes/react-jsonform","version":"0.1.9","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"d0a8f606ad2b6032208c3a4a526719f376c40586","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.1.9","_nodeVersion":"10.19.0","_npmVersion":"7.20.3","dist":{"integrity":"sha512-vcCKBkv5RCQnvHljjj2ETz+JqBtWasr9asnNeflyS21qfU+VdmQe+hA1WA7Tqd6aJOpiGVdoMHtAD8BBJefCGg==","shasum":"a069187cc93258b510a4d3bc3135bae16dc90ec9","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.1.9.tgz","fileCount":8,"unpackedSize":1771014,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhHZ9gCRA9TVsSAnZWagAAmCgP/RJw7ZksSLVaz7lf5z5+\nN0ICOHQeLJZLYmsphw/q8BM/rGolYP6Qbd3JNiXwrkFB+MiwJ8MvKEj/RHHM\n+d8MLnH/uq9bY9QIfMNr+O/0gnXXF1Mu9yy++JR9sDdeoXjRO/db3V9YMoNF\nfnsky3lAyEUDcb7jPc9b4W5I81Vr0c28WqccQjuaq45dT8Yqs4/vy7GEyvRL\n53xk29Q4R0DVehGtsPok/6SZpfBPbinmQ+u5Dnv+qTPzMGyZYqpiGKeEGq2H\nEqAbUi2oTs4wjqS9+3H7NlYQQ4vXE0Osh9M3ix4YmH6ID5cbGiDSFbSZG9BN\n7C340yUgpEhdyVIOSFcGOGUXsQS6GgFHj37FjrSEoAw1p8iCn5a+H1TuIcH1\n75ul4ZmRe8+AXYtNVqabhCGUd3SCa1GEmZF00ACkGO5aDtfa7ccd8NV6YUtS\nDMKp19kCZS8lG63hHMBVJ4ea0iidfLRjTnweUG5y1iz252spfmU2i06bGHh0\nHmbgUeEHUPepR6rnT/S46fWUp2PlOpYJwvRZZxkmRd1UUD/VpywW+n2iY0s5\nzo6DYatGvAi58GxFZ4q6jg9y3ubDuy8QyZTukSy1P86mXfYWz2WtfzMZf13U\nk9fBU5D5WQkqUjREQPyf1VeSM+vC56NXsv73vJxsAKgfb+pCEMm93GHIN5e9\nIMVV\r\n=wcRW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfdykKQXhgagmeRW8acR58dtDIhTLStx+V8YeAg46FDQIhAPU9y6Cr1p16XyiW9Q6PpeBp5YaHtav2c35Tkge/hzRS"}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.1.9_1629331296442_0.8187425803999457"},"_hasShrinkwrap":false},"0.2.0":{"name":"@aderbalnunes/react-jsonform","version":"0.2.0","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"2d2c5324c7e17393d3dde476cc6eedd10e948918","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.2.0","_nodeVersion":"10.19.0","_npmVersion":"7.20.3","dist":{"integrity":"sha512-JbM1FkeBA7Rya9e14ixAvfbBC/KiwXIuR/s63uRQiUGSSVLeHcOtM8Plo2bcacSS+SuTKVWYFrGwQK4WnG2v0Q==","shasum":"09f3ec9a10febd5f5e9b4f8e493e021d93d05916","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.2.0.tgz","fileCount":8,"unpackedSize":1771260,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhJt97CRA9TVsSAnZWagAASDYP/2BeJ8J/QK06tcPGgfLs\naHXmBeDdYHgwgK6fpWnmtoAAsBZgOEetOx6zFHJvk+ScwDGeNdKuNDaMZO/V\ne2FRkfnGm5WAIZ/x1CTuWJ6rHIpK/MMtL5Bz4M5FIghoD0uzlZQFOiYjSZnN\n1OwdPcaH/ADB60TRHRdxhmB7rBaXJR4aEm9j3M6TA8KbtArAAN1N9lYE381c\nonkGBxj7ddwHjVlbvZiVRJ5xzY8IfFX0GDufaAv0wSwQ2qQulY0SFuVE2+Uh\nJesr/GObVaAdFLNFcxKPz7IJBQcqiB7NMcEC7XA8sZm0XLbITtNpSdMJuHQ+\nDWHTqPeTNFU1kn/OBYbq1fvAC6Fa9Q1wgBM8U4Kg2PbojQGqFgY+Vb3ObfnE\nIHjIslbLmsRgMMgQG1m4yDmvYOkUlt+WW0Faf7v2U/iKa0ThFF+LYJ644RFx\nVHyx7ghmDIL05y9pC8uL1cp03l1REUOW7GA3Eistk3mYpT7D5jIa6N+3IwgP\nw1dNsrl0xcbBvY5P0ZR8gO8pTs4US+nZb40xqbqhypCMRW6QZ5HueSBgXQp5\nbbIMd+G0zL1bleybFxp43fiZF8D9+b1Kcvqvp6VGqiwzP+ifWDsYJkqtIeID\nv+Ux7GgJCGVrp0JzEJDac2vmxpsVmEZ8oKg3b0IQadcNyYDI/lGJDkgZEgfy\nA9iZ\r\n=efcs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGDf/Rnl6ckWbRU9IAD62Pzwvzq07tuvRKimrec2yRoEAiEAy9FNP8tVcv9EKe/MzVGOZPbmM3TDmkIsTq5Zb9PMar8="}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.2.0_1629937531500_0.10850582305404433"},"_hasShrinkwrap":false},"0.2.1":{"name":"@aderbalnunes/react-jsonform","version":"0.2.1","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"1515e334b018618adb061cb8bbdfc532dadb4fc7","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.2.1","_nodeVersion":"14.17.6","_npmVersion":"6.14.15","dist":{"integrity":"sha512-TfwW57rfX/Gi//RRoQLzBMvzMoUcq1Oq7TjQO2cXNrXoJKk4qm19hv/oJBN+uGipkRsoBPpOucdT2ehsxv9f8w==","shasum":"625748e048be3f84a66a9b5c17b8da496a5bac41","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.2.1.tgz","fileCount":6,"unpackedSize":1112993,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEr+b9FtEV2iNXar+2iTHeH2mKQb+n8jnMYpD/uRfdBQIgXAyOOtf6pRHDfD86pp7NbT6zWvCfKnBeeuWBgYk+0qE="}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.2.1_1632236089416_0.2168996161933019"},"_hasShrinkwrap":false},"0.2.2":{"name":"@aderbalnunes/react-jsonform","version":"0.2.2","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"285ab6e0b138164cd79ddbdb8ab1f3f7e54d1989","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.2.2","_nodeVersion":"14.18.0","_npmVersion":"6.14.15","dist":{"integrity":"sha512-9IpGf+ngRWZq8pFHYgcYxXcRKADEPmy/2ZJZCPEED8wKlfW/R5wN2Xl1rzv7S+LHSUukSFjuMDW1Ym8RQAB1OQ==","shasum":"3d2cba6125b956e434e2e8bfbe7ddf059e82aeaa","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.2.2.tgz","fileCount":6,"unpackedSize":1130381,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAv/x6BTVj0K+N5r5vDM1MTFTW/csZl6C5wChb0Eb7zYAiBq9ufDEPoRUFtggY/AlD9fYtHCSLtByth8hNI7/nIDeg=="}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.2.2_1632840252860_0.800194440453736"},"_hasShrinkwrap":false},"0.2.3":{"name":"@aderbalnunes/react-jsonform","version":"0.2.3","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@material-ui/core":"^4.11.2","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"73ca03988a4af2b1b73ffa952e6c8ad7f92037e4","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.2.3","_nodeVersion":"14.18.0","_npmVersion":"6.14.15","dist":{"integrity":"sha512-XJlBay6rEdV8xqB+Pa0QJ9CYG9SN+oxRBdSHl1zeDoxLHF2VDoGXeS4wTDDoUweKJBNGRZSxJylmlqh4XmtJ4w==","shasum":"355377a73981c1f4d08b6e979838b227ef61a1fc","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.2.3.tgz","fileCount":6,"unpackedSize":1131117,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNxuNMAr7BmUHM62WqyU4/Rw2h2iYMm87mhCn9xpHuSwIhALHZDxQd1FMuPzSNa8BhOraAP5BhauZx8n6E+/3Osxb9"}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.2.3_1633460529497_0.4824772555716519"},"_hasShrinkwrap":false},"0.2.4":{"name":"@aderbalnunes/react-jsonform","version":"0.2.4","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@material-ui/core":"^4.12.3","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"e508252e34251d137ff5b657bedde78ce4c28231","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.2.4","_nodeVersion":"14.18.0","_npmVersion":"6.14.15","dist":{"integrity":"sha512-L6BttHLGzwri6qOHRK9+4PrAD7Cx8ixtPUtAYvxo9qluNXWajQqNHU7BucW5NRWXztT/JO6bkWFg20C/DsaGDA==","shasum":"87fa6f068e9929d1578c9302f1ab96564530299a","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.2.4.tgz","fileCount":6,"unpackedSize":1127009,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHot4Z4q8xc3f+RxhYDOacPEVyqzPVbV4uzgrGABOWIAIgEGYw1mw9CHhmY/rx0ajXgTY91xwdiKoWU3pcpUl1+EE="}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.2.4_1633522084328_0.5333726788990747"},"_hasShrinkwrap":false},"0.2.5":{"name":"@aderbalnunes/react-jsonform","version":"0.2.5","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@material-ui/core":"^4.12.3","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"6d1533c650a990035b78d3964bf6704779b5c715","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.2.5","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","dist":{"integrity":"sha512-CmesSxkdb1KHFzXMG5p/+yTpk+ctSsvxDkbaLzr/CNmo9Gnq/iBOfPuQLQWmnuHkvfm+neaazvidk8/6AgVkIg==","shasum":"263533133479f8c9edcabd5093da69229e6f69d4","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.2.5.tgz","fileCount":6,"unpackedSize":1127711,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhpmROCRA9TVsSAnZWagAAFvAP/0bsJBA7P5lalilypsOq\nZqjIPurE13jsMYy0I52hTXJPz5PEM9KXOVt6hUAEA+41/xt2bn28MXBAv6Dw\ntvuSiREo3E3cbJgJQW/Z2iuYmG6Rwb04i+mdr0p4VlLknsPIwSkTKqDlmHXq\nVq/lNdL2FHV3AnzO+r0k33QzEMegVPDj70WTwBpkiF4gv16WYUsQviep0h9I\nxINMbjykcGE+WBPjjID/Tb7ho6sJ5NgnCDBztsuyzE3LktDtJ5FkqVjejlMA\n6mNxbs+e0E4QVsdSO7TRqJ6VRBGJDw29QHuEY9iKs8vQEOHCJh5ihwNzD+TY\nAtJBQv4IhSEp4GkDbV20YxvgJH5x89gqe0fU8Tai/OQvuf7dovQb5cGfkqek\nSbKIPu7k8vCVyOtHYNM3TBeTwSbJb1JO5jfWBzGeoq5sfNqjGPQvq3SFKLCN\nc7nuWD9msmQbtYEBLVZLiYcrN5oFR6q+9jYB9uSGSdrjFmzUt4ZAaCFVeN2G\nJKEMYCWJGWwEVfSzF+bDETnpNXyT4FFWl+9mPSOIIce9/dzwTTDsNFo2fDt9\neDudbYIxmlC+fCF6+RhBeSGXPHvgjOE38yjzlVVV6+wiQIlKI93Q1YiEjdxx\nsHiB9BuhnmOEPVoiXNJdeMC8eDUBloi/KIXzPg4khLWZ9COBC9QCDpw6irfG\nAnke\r\n=xibi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDn9iEU8MkY13h+gD2x9bR/sdM259IU8TQGq6rFLRQm3QIhANWIQF/1LCNCmpNDxvNUWQuCUJ8wnCVw5JH2fprzWXpG"}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.2.5_1638294606150_0.08398858030577006"},"_hasShrinkwrap":false},"0.2.6":{"name":"@aderbalnunes/react-jsonform","version":"0.2.6","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@material-ui/core":"^4.12.3","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"10443c78d00877c44e96ee6212dbc225430fb820","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.2.6","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","dist":{"integrity":"sha512-x6jDcaZP5dr1Xb6fs9tY5OG7rvCorEaFMInJB5Yuj9Xo7IWgGL8deNDxroPLhWWe2jpB3mKXm9PO+TkhVwQwzg==","shasum":"e57ed6d5d900ee30a146a8228cf270b1730f6de8","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.2.6.tgz","fileCount":6,"unpackedSize":1128231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhp3JRCRA9TVsSAnZWagAAN2QP/iij2OrgAoXbM2k1k7PR\nj7n98vF2mxkHx+rSLgy4QHvO0zNkiTSR47uC85as6O+QC+C+Sf6OskrS9jla\nmjiQuVPth9jZr+pPJhhAc5JWSlhiD56ovT5C/xwBeb9AEDBFl3CxTFe8++Ls\n6qICsIlQVdEUCtOL5LDFdmKjiuoMaYkdB1lY8fzfk6G5mChwehWgU+MVNFll\n2v7ag7Ozrsgd2FkXv5+slYi+sgZ7ZKOsi1gjMyw+SREJMpLw4GHAaFcNM3g0\nlg9RrESdBV1OWG6WiXnsBFLfTLpWf9kT8HERPFBcf3ISITblvGxFIzuZgTfQ\nEkzwgaFvkCD5jdvorKcGyKag13a/cJQJW5LoxQOTC7ieFPCl1Rs/iH4HRb4u\np3RxfBknlCkhQgIX46ARZBHAqITlVvYgtMfAEoFsG9J/6Q4Ir33d7lxgdwb3\nalr/50lY9W0V4kOMw7cEOR8agEyHLJfhZwTyxpmnhMDYTI22xg2HjQkYWRFk\nEc8OcSEW3dPGQ8LDInZQX3SiT3fl4TPw5mnmPndfI30khiTU5/AuL+HCT7cG\nsfFlytQT3gOZ1wPoIBOTusgkFrLwxCPkacD2RTQhSswiXKvqSt54Vcv4pzCk\nks744bMGHhNKJq4zgfNaii57bCzw48zm96CXtt8TfRMzlDse9dAK+OyPQOKk\n9YJk\r\n=IX5u\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID3N/okDk3buEmT/AtTyl9BQ5MXf5KokXgEyu0aLheNQAiEAniLTKN/e2f6YRhKO+Mk+EoFED0s9PDToKvHZKCDznCE="}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.2.6_1638363729359_0.24100721527301583"},"_hasShrinkwrap":false},"0.2.7":{"name":"@aderbalnunes/react-jsonform","version":"0.2.7","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@material-ui/core":"^4.12.3","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"gitHead":"d212228b3359c4be54587735d2a407e003ef8dfc","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.2.7","_nodeVersion":"14.18.2","_npmVersion":"6.14.15","dist":{"integrity":"sha512-R9ISKbl7/gubx4rsVRsuy7ju3SmoUC+Oadl2/XbHifzRoorqyPDZ6e50bb3PuW3+SIRe6f5eanGqfXwPaMfCEg==","shasum":"13946e0e83713926986d25e35a085cdcc62fd3cf","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.2.7.tgz","fileCount":6,"unpackedSize":1128459,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhsedMCRA9TVsSAnZWagAALVYP/RLuZxYB0DCZTpAIZ4WD\nQCT7tk93gDpRTeEJLpzdkfHZeKCmaU4rGcjwLt8KFhCm2J46BsxtXgd5YiKn\n+Og1XP6gNye9eL/YrnsFKHGSADcQHRPL5WNC98BFEZfn3v77Z7iPClbY9vK2\nNrC5unAvBBObt9cluuX7Dxz5/zFi1BtF8xFETU6LZn10aBhd2daWhHh5LBKN\n6+yoNVnNI5mJzYRaq9ONxyIjhtVKbuDeRQcuGEvpwWu3f5E7WLB5KtYSd+1j\nhOHiTG3weeeZ/g/fbjz0vhKati7BkYaeBW0IayOsNNKPln17GJwMmQWDUl3/\nBV19EYxSY3wFg7hJr5zuF5dOcTzf/e9XJ49GSHE6SYsoFnBs2i1CxrFCtLrH\nXTOZuGjePz9q+QaX/W5W/vrTwyM+ucMaNFFf5Py4KPyvp4aLwsjqrkfiO9+K\nooH6xc7qweoEE/fltekIcHLMQXDYaHI+VIMY0JEdjduGBSXN5G2KG0h8tD+B\n2xPzFhHWZZk8xQPGIC3OwSL/vkgBSIe8gPE21736AJCOrQj5207VtvrUi9bS\n48+TexbjbnkAdtwMdttHZiqbgK78PfVE8V/UTo0RHAqlQ/ppKlOCcNSuZG67\nhDOepYVkL2ZadZxjlwUXSwTKzA+cqmDHdhATTMxxAp/gm+xotp1GQ20oONQ7\ndgYM\r\n=LT2G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGJV+/N7UF7Afmwpud9D7xbZMRkNuMVCHrgeoKnn/sCrAiBtoa0mVOGo/FF+n5yA9gzi/EsaQXlx+5FZEJw2qEZxHw=="}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.2.7_1639049036122_0.8741160110524249"},"_hasShrinkwrap":false},"0.2.8-beta.1":{"name":"@aderbalnunes/react-jsonform","version":"0.2.8-beta.1","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"@material-ui/core":"^4.11.2","prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@material-ui/core":"^4.12.3","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^6.8.0","eslint-config-prettier":"^6.7.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^3.4.1","redux":"^4.0.5"},"readme":"# jsonform\n\n> Create material design form from a JSON object\n\n[![NPM](https://img.shields.io/npm/v/jsonform.svg)](https://www.npmjs.com/package/jsonform) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)\n\n## Dev Dependencies\n* [Material-UI](https://material-ui.com/pt/)\n\n## Table of Contents\n1. [Install](#install)\n2. [Basic Usage](#basic-usage)\n3. [Popule form with remote data](#popule-form-with-remote-data)\n4. [Split form into columns](#split-form-into-columns)\n5. [Custom components](#custom-components)\n6. [Elements](#elements)\n7. [Options](#options)\n8. [Popule with a model](#popule-with-a-model)\n9. [License](#license)\n\n## Install\n\n```bash\n$ npm i --save @aderbalnunes/react-jsonform\n```\n\n## Basic Usage\n\n```jsx\nimport React, { Component } from 'react'\n\nimport JsonForm from 'jsonform'\n\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  }\n}\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        onSave={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n## Popule form with remote data\n\n```jsx\nconst formFields = {\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_type': {\n    component: 'select',\n    props: {\n      label: 'User Type',\n      options: () => new Promise(resolve => {\n        fetch('<rest api endpoint>')\n          .then(res => res.json())\n          .then(json => resolve(json.map(r => ({label: r.type, value: r.id}))\n          .catch(resolve([]);\n      })\n    }\n  }\n}\n\n// assume that the endpoint API returns something like: \n// { result: {user_id: 321, user_type: 123, user_name: 'Foo'} }\nconst fetchRemoteData = user => new Promise(resolve => {\n  fetch(`<url endpoint>/${user}`)\n    .then(res => res.json())\n    .then(json => resolve({data: json.result}))\n    .catch(() => resolve({}))\n});\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        fetchData={fetchRemoteData}\n        fetchParams={[321,]}\n        onSave={(data) => console.log(data)}\n        formChange={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n\n## Split form into columns\n\n![Splited columns](./example/public/assets/images/split_columns.png)\n```jsx\nconst formFields = [{\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_email': {\n    component: 'text',\n    props: {\n      label: 'E-mail',\n      required: true\n    }\n  },\n}, {\n  'user_password': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  },\n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  }   \n}]\n```\n\n## Custom components\n```jsx\n\nconst MyComponent = ({...props}) => {\n  const {id,value,onChange} = props;\n\n  const _increment = () => {\n    if(typeof onChange === 'function'){\n      onChange({target: {name: id, value: value + 1}})\n    }\n  }\n\n  return (\n    <Button onClick={_increment}>Increment {value}</Button>\n  )\n}\n\nconst formFields = {\n  'my_component': {\n    component: MyComponent,\n    props: { value: 1 }\n  },\n}\n```\n\n## Elements\n\n* Text input\n> props required: label\n```jsx\n'phone_number': {\n  component: 'text',\n  props: {\n    label: 'Phone',\n    required: true,\n    value: \"(123) 456 7899\",\n    validation: /\\(?([0-9]{3})\\)?([ .-]?)([0-9]{3})\\2([0-9]{4})/,\n    onKeyPress: (ev) => {  }\n  }\n}\n```\n\n* Input Select\n> props required: label and options\n```jsx\n// fixed values\n'user_level': {\n  component: 'select',\n  props: {\n    label: 'User Level',\n    required: true,\n    options: [\n      {value: 1, label: 'Admin'},\n      {value: 2, label: 'Default'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n// assume that the endpoint API returns something like: [{id: 123, label: 'Foo'},...]\n'user_status': {\n  component: 'select',\n  props: {\n    label: 'User Status',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n* Multiselect\n> props required: label and options\n```jsx\n// fixed values\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    required: true,\n    options: [\n      {value: 1, label: 'delete'},\n      {value: 2, label: 'update'},\n      {value: 3, label: 'insert'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n* Radio Group\n```jsx\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: [\n      {value: 'male',   label: 'Male'},\n      {value: 'female', label: 'Female'},\n      {value: 'unknow', label: 'Unknow'}\n    ]\n  }\n}\n// fetch remote data options\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n\n* Switch\n> props required: label\n```jsx\n  'user_is_master': {\n    component: 'switch',\n    props: {\n      label: 'Master user',\n      value: true,\n      value_type: 'bool'\n    }\n  }\n```\n* File upload\n> props required: label\n```jsx\n  'file_upload': {\n    component: 'upload',\n    props: {\n      label: 'File Upload',\n      info: 'CSV or XML file'\n    }\n  }\n```\n\n## Options\n\n### Control Buttons\n```jsx\n<JsonForm \n  components={formFields} \n  controlOptions={{\n    saveText: 'Save Form',\n    cancelText: 'Cancel',\n    boxProps: {\n      textAlign: 'right'\n    }\n    confirmSave: 'Confirm form submission?',\n    confirmCancel: 'Do you really want to cancel?',\n    confirmButtonsLabel: {\n      yes: 'Sim', no: 'Não'\n    }    \n  }}\n  onSave={(data) => console.log(data)}\n/>\n```\n- **saveText:** Text for the save button. Default: 'Save'\n- **cancelText:** Text for the cancel button. Default: 'Cancel'\n- **boxProps:** Options for panel with buttons. Default: null\n- **confirmSave:** Adds the confirm alert for the save button. String with the text of the question. Default: null\n- **confirmCancel:** Adds the confirm alert for the cancel button. String with the text of the question. Default: null\n- **confirmButtonsLabel:** Text for \"yes\" and \"no\" dialog buttons. Default: {no: 'No', yes: 'Yes'}\n\n### Skip a property in the model\n```jsx\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  },\n  'info': {\n    component: 'info',\n    props: {\n      text: 'Tip: Use a non commercial email.'\n    },\n    options: {\n      skipFromModel: true\n    }    \n  }  \n}\n```\n### Field dependency\n* For select/multiselect/radiogroup\n```jsx\nconst formFields = {\n  'user_has_domain': {\n    component: 'switch',\n    props: {\n      label: 'Use domain',\n    }\n  },\n  // without rule\n  'user_domain': {\n    component: 'select',\n    props: {\n      label: 'Type',\n      options: [...]\n    },\n    options: {\n      depends: 'user_has_domain'\n    }\n  },\n  // with rule. E.g: disabled if selected 'user_domain' value is 2.\n  // suported conditions: eq|ne|gt|lt|le|ge\n  'user_type': {\n    component: 'select',\n    props: {\n      label: 'Type',\n      options: [...]\n    },\n    options: {\n      depends: {\n        rules: [\n          {field: 'user_domain', condition: 'eq', value: 2}\n        ]\n      }\n    }    \n  },  \n}\n```\n* For input text\n```jsx\nconst formFields = {\n  'user_password': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      type: 'password'\n    },\n  },\n  // with rule length for input text\n  // suported conditions: eq|ne|gt|lt|le|ge\n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Confirm password',\n      type: 'password'\n    },\n    options: {\n      depends: {\n        rules: [\n          {field: 'user_password', condition: 'ge', length: 6}\n        ]\n      }\n    }\n  },\n  // with regex. Disable If the regex result exists \n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Confirm password',\n      type: 'password'\n    },\n    options: {\n      depends: {\n        rules: [\n          {field: 'user_password', regex: /abc/g}\n        ]\n      }\n    }\n  }  \n}\n```\n\n### Popule with a model\n```jsx\nconst MyModel = {\n  user_name: 'Tom',\n  user_email: 'tom@email.com',\n  user_gener: 'male'\n}\n\n<JsonForm \n  components={formFields} \n  model={MyModel}\n  onSave={(data) => console.log(data)}\n/>\n```\n\n## License\n\nMIT © [Aderbal Nunes](https://github.com/aderbas)\n","readmeFilename":"README.md","gitHead":"d212228b3359c4be54587735d2a407e003ef8dfc","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.2.8-beta.1","_nodeVersion":"14.18.2","_npmVersion":"6.14.15","dist":{"integrity":"sha512-GHjPR+Mb5soUt5N1mLVWRxBWSXntlo1wtVCXYFKtpZz4IxIT/qlBbkb6muriOiTUNmSRj7EDI76ZefzsgRnPuw==","shasum":"481cbf55974f4d2adb5182f5e0fe96a163a14e7e","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.2.8-beta.1.tgz","fileCount":6,"unpackedSize":1128713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhsfAUCRA9TVsSAnZWagAAEGoP/jsryfGyjtRZ+b1ncUEU\nwWcrKJvDnH85XX1lRTDXrhDIFAl2rvM5Vbrt3/HLKHU/ArHUqj2jzKHlWVvH\nQibGW0CCu71kxYvn+Q1iUDGP2nfv++e1lxSrIHMSI9VIIwGAM+7Sc3uIAZSb\nZcIb7wjhuijVqDGiUEu0Jg2Wz84PcbEpZYkZLvfeqUWDjqk8y3Vq0W0zrXgr\nyo+Xouz4AEcbIcUNtsnd6qhLFNXlUEk8/3xCsTQlEYsojMn8t45ATrjRm6h0\nffob8fWpT/MTCthxkl6yzijKcMkz5y9i5oVJ9bbW+B0EAulZ8QlhmkNf9IOm\nmWxpphWo3pLgpbFwKHzbP/X17noQGK3Y4naJ6klTbZ5/eVQJpN8scAPwnLk4\nQThChLU4NayvOYZgpmU9MQbBLc3aZX24hBFsRBEQnzxsPasonI4PPqaGXw7m\niffPaXEn3kbOmg1VgBuvnHaz8y1PRbrWhJcqk9ZdvzjvqBymCkYGNN8OQpsD\nK99q0P51D+E6om74wvLRzIS5nYr3p2R8RnW3e1n8x2KhAFnC+MwRhsdMfqhk\n/7Q4bSojMyCw+NMEe803qi90WkkyKGe2MZ0lJ+xs1zWy+JhRYyVI3mRghv4Y\nDK+6/LDgzB7ncpo3jvi9eiD321JVB7NqOcsJvEf1f/kFdkLr5w2Asl7JgNYp\ntk+q\r\n=S+Eq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNVvERA5YFdPpblDq9ivpAzl1/PILWd9FgpL5K+dRy+wIgOqk/dXNsy5NNZJ27LcWSbNOjENMyGOq2K48C+6njgLw="}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.2.8-beta.1_1639051283975_0.8199812863372029"},"_hasShrinkwrap":false},"0.2.5-beta.1":{"name":"@aderbalnunes/react-jsonform","version":"0.2.5-beta.1","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@emotion/react":"^11.7.1","@emotion/styled":"^11.6.0","@mui/material":"^5.2.8","@mui/styles":"^5.2.3","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^8.6.0","eslint-config-prettier":"^6.7.0","eslint-config-react-app":"^7.0.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^5.0.0","redux":"^4.0.5"},"readme":"# jsonform\n\n> Create material design form from a JSON object\n\n[![NPM](https://img.shields.io/npm/v/jsonform.svg)](https://www.npmjs.com/package/jsonform) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)\n\n## Dev Dependencies\n* [Material-UI](https://material-ui.com/pt/)\n\n## Table of Contents\n1. [Install](#install)\n2. [Basic Usage](#basic-usage)\n3. [Popule form with remote data](#popule-form-with-remote-data)\n4. [Split form into columns](#split-form-into-columns)\n5. [Custom components](#custom-components)\n6. [Elements](#elements)\n7. [Options](#options)\n8. [Popule with a model](#popule-with-a-model)\n9. [License](#license)\n\n## Install\n\n```bash\n$ npm i --save @aderbalnunes/react-jsonform\n```\n\n## Basic Usage\n\n```jsx\nimport React, { Component } from 'react'\n\nimport JsonForm from 'jsonform'\n\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  }\n}\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        onSave={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n## Popule form with remote data\n\n```jsx\nconst formFields = {\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_type': {\n    component: 'select',\n    props: {\n      label: 'User Type',\n      options: () => new Promise(resolve => {\n        fetch('<rest api endpoint>')\n          .then(res => res.json())\n          .then(json => resolve(json.map(r => ({label: r.type, value: r.id}))\n          .catch(resolve([]);\n      })\n    }\n  }\n}\n\n// assume that the endpoint API returns something like: \n// { result: {user_id: 321, user_type: 123, user_name: 'Foo'} }\nconst fetchRemoteData = user => new Promise(resolve => {\n  fetch(`<url endpoint>/${user}`)\n    .then(res => res.json())\n    .then(json => resolve({data: json.result}))\n    .catch(() => resolve({}))\n});\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        fetchData={fetchRemoteData}\n        fetchParams={[321,]}\n        onSave={(data) => console.log(data)}\n        formChange={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n\n## Split form into columns\n\n![Splited columns](./example/public/assets/images/split_columns.png)\n```jsx\nconst formFields = [{\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_email': {\n    component: 'text',\n    props: {\n      label: 'E-mail',\n      required: true\n    }\n  },\n}, {\n  'user_password': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  },\n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  }   \n}]\n```\n\n## Custom components\n```jsx\n\nconst MyComponent = ({...props}) => {\n  const {id,value,onChange} = props;\n\n  const _increment = () => {\n    if(typeof onChange === 'function'){\n      onChange({target: {name: id, value: value + 1}})\n    }\n  }\n\n  return (\n    <Button onClick={_increment}>Increment {value}</Button>\n  )\n}\n\nconst formFields = {\n  'my_component': {\n    component: MyComponent,\n    props: { value: 1 }\n  },\n}\n```\n\n## Elements\n\n* Text input\n> props required: label\n```jsx\n'phone_number': {\n  component: 'text',\n  props: {\n    label: 'Phone',\n    required: true,\n    value: \"(123) 456 7899\",\n    validation: /\\(?([0-9]{3})\\)?([ .-]?)([0-9]{3})\\2([0-9]{4})/,\n    onKeyPress: (ev) => {  }\n  }\n}\n```\n\n* Input Select\n> props required: label and options\n```jsx\n// fixed values\n'user_level': {\n  component: 'select',\n  props: {\n    label: 'User Level',\n    required: true,\n    options: [\n      {value: 1, label: 'Admin'},\n      {value: 2, label: 'Default'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n// assume that the endpoint API returns something like: [{id: 123, label: 'Foo'},...]\n'user_status': {\n  component: 'select',\n  props: {\n    label: 'User Status',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n* Multiselect\n> props required: label and options\n```jsx\n// fixed values\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    required: true,\n    options: [\n      {value: 1, label: 'delete'},\n      {value: 2, label: 'update'},\n      {value: 3, label: 'insert'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n* Radio Group\n```jsx\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: [\n      {value: 'male',   label: 'Male'},\n      {value: 'female', label: 'Female'},\n      {value: 'unknow', label: 'Unknow'}\n    ]\n  }\n}\n// fetch remote data options\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n\n* Switch\n> props required: label\n```jsx\n  'user_is_master': {\n    component: 'switch',\n    props: {\n      label: 'Master user',\n      value: true,\n      value_type: 'bool'\n    }\n  }\n```\n* File upload\n> props required: label\n```jsx\n  'file_upload': {\n    component: 'upload',\n    props: {\n      label: 'File Upload',\n      info: 'CSV or XML file'\n    }\n  }\n```\n\n## Options\n\n### Control Buttons\n```jsx\n<JsonForm \n  components={formFields} \n  controlOptions={{\n    saveText: 'Save Form',\n    cancelText: 'Cancel',\n    boxProps: {\n      textAlign: 'right'\n    }\n    confirmSave: 'Confirm form submission?',\n    confirmCancel: 'Do you really want to cancel?',\n    confirmButtonsLabel: {\n      yes: 'Sim', no: 'Não'\n    }    \n  }}\n  onSave={(data) => console.log(data)}\n/>\n```\n- **saveText:** Text for the save button. Default: 'Save'\n- **cancelText:** Text for the cancel button. Default: 'Cancel'\n- **boxProps:** Options for panel with buttons. Default: null\n- **confirmSave:** Adds the confirm alert for the save button. String with the text of the question. Default: null\n- **confirmCancel:** Adds the confirm alert for the cancel button. String with the text of the question. Default: null\n- **confirmButtonsLabel:** Text for \"yes\" and \"no\" dialog buttons. Default: {no: 'No', yes: 'Yes'}\n\n### Skip a property in the model\n```jsx\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  },\n  'info': {\n    component: 'info',\n    props: {\n      text: 'Tip: Use a non commercial email.'\n    },\n    options: {\n      skipFromModel: true\n    }    \n  }  \n}\n```\n### Field dependency\n* For select/multiselect/radiogroup\n```jsx\nconst formFields = {\n  'user_has_domain': {\n    component: 'switch',\n    props: {\n      label: 'Use domain',\n    }\n  },\n  // without rule\n  'user_domain': {\n    component: 'select',\n    props: {\n      label: 'Type',\n      options: [...]\n    },\n    options: {\n      depends: 'user_has_domain'\n    }\n  },\n  // with rule. E.g: disabled if selected 'user_domain' value is 2.\n  // suported conditions: eq|ne|gt|lt|le|ge\n  'user_type': {\n    component: 'select',\n    props: {\n      label: 'Type',\n      options: [...]\n    },\n    options: {\n      depends: {\n        rules: [\n          {field: 'user_domain', condition: 'eq', value: 2}\n        ]\n      }\n    }    \n  },  \n}\n```\n* For input text\n```jsx\nconst formFields = {\n  'user_password': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      type: 'password'\n    },\n  },\n  // with rule length for input text\n  // suported conditions: eq|ne|gt|lt|le|ge\n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Confirm password',\n      type: 'password'\n    },\n    options: {\n      depends: {\n        rules: [\n          {field: 'user_password', condition: 'ge', length: 6}\n        ]\n      }\n    }\n  },\n  // with regex. Disable If the regex result exists \n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Confirm password',\n      type: 'password'\n    },\n    options: {\n      depends: {\n        rules: [\n          {field: 'user_password', regex: /abc/g}\n        ]\n      }\n    }\n  }  \n}\n```\n\n### Popule with a model\n```jsx\nconst MyModel = {\n  user_name: 'Tom',\n  user_email: 'tom@email.com',\n  user_gener: 'male'\n}\n\n<JsonForm \n  components={formFields} \n  model={MyModel}\n  onSave={(data) => console.log(data)}\n/>\n```\n\n## License\n\nMIT © [Aderbal Nunes](https://github.com/aderbas)\n","readmeFilename":"README.md","gitHead":"702f50fbf4cd84e454bb2b9dd9734e16f1a3fd7d","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.2.5-beta.1","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-jcxhR3ckMTLB1uFE0jueUobY4woNu/AO4lvAOpF5HRnsKddBDWkk8MlNLBQbSRjlx0AtBxxvWkD1NAC3V94AaA==","shasum":"049e6cfaaf0273d3899fd3e433b5dcc2e861b86a","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.2.5-beta.1.tgz","fileCount":8,"unpackedSize":5436615,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3xgGCRA9TVsSAnZWagAAmKAP/2912UvPaerxDsO7WvFq\ncAJO6F+Wh+9xANkPlcNQMN5RHVRxgwCPw1UVPd+ttlepdhwMKXF5Jj4r0I/r\ndC1q3a+z5AIi0KJLPr3ky9pqk//7ym8UTdkl9IszOGi5C6tmd5ILYat8+4J6\nZqZcDhetG83GvRTNHNX6X4LsyRY4lKAHnz2A3HSySk9rMXWLwVSmstHVTlNw\nqbnvuhwmvP0jpUPivw3rLyqDjTLGs2fo/Q9+Idczj5nfZL80jLY0xpUzBIKv\nZAVYLTaB2cRNLAjMovaGcr233bW6Se9BRdmFmEriSo2EetSVigzZf6x7zhLH\nAMtS6zoMVRWrapX2ejo94LEudtoyniGz1GYYBFVRg82A4ZBUWUL0yt3+ACUq\ntYee4NtH+zIBti6kZ4rzthMogQlFgyIhQneFqeNPvdOcpIrLZdhyffKfDWKT\nUiKOJOsdOti21EXGiEGer0ZhNvdW7mzq+2/pXSlIhDylKl7XNeaqHx+3AYzc\nJA58zNxuIU8TgeK23jzL7Hkx9BAuQuRxBoK8vLBuTai1f3PGQwI2IGzMqukc\nbozKEZgsZvVDU8ebaytnqAUpE6MitHVd0fMPbiknSSlCsZPe8wmZQazUn8pB\nKlgNEsImC6fYNlvReb2jFrWsiNS3kQVELSHdexYqidIjVTXOv4RtlJZ7fKYU\nweR2\r\n=+ajp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcYzAqtb2ZkkiXu17chsE+O8m9Ji63I8z/97RWyfPBgAIhALpZ7OpxSGfGxCDEy/ydWE+nlOwHDosOpI3OLvo78djE"}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.2.5-beta.1_1642010630637_0.4838983121404805"},"_hasShrinkwrap":false},"0.2.5-beta.2":{"name":"@aderbalnunes/react-jsonform","version":"0.2.5-beta.2","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@emotion/react":"^11.7.1","@emotion/styled":"^11.6.0","@mui/material":"^5.2.8","@mui/styles":"^5.2.3","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^8.6.0","eslint-config-prettier":"^6.7.0","eslint-config-react-app":"^7.0.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^5.0.0","redux":"^4.0.5"},"readme":"# jsonform\n\n> Create material design form from a JSON object\n\n[![NPM](https://img.shields.io/npm/v/jsonform.svg)](https://www.npmjs.com/package/jsonform) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)\n\n## Dev Dependencies\n* [Material-UI](https://material-ui.com/pt/)\n\n## Table of Contents\n1. [Install](#install)\n2. [Basic Usage](#basic-usage)\n3. [Popule form with remote data](#popule-form-with-remote-data)\n4. [Split form into columns](#split-form-into-columns)\n5. [Custom components](#custom-components)\n6. [Elements](#elements)\n7. [Options](#options)\n8. [Popule with a model](#popule-with-a-model)\n9. [License](#license)\n\n## Install\n\n```bash\n$ npm i --save @aderbalnunes/react-jsonform\n```\n\n## Basic Usage\n\n```jsx\nimport React, { Component } from 'react'\n\nimport JsonForm from 'jsonform'\n\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  }\n}\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        onSave={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n## Popule form with remote data\n\n```jsx\nconst formFields = {\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_type': {\n    component: 'select',\n    props: {\n      label: 'User Type',\n      options: () => new Promise(resolve => {\n        fetch('<rest api endpoint>')\n          .then(res => res.json())\n          .then(json => resolve(json.map(r => ({label: r.type, value: r.id}))\n          .catch(resolve([]);\n      })\n    }\n  }\n}\n\n// assume that the endpoint API returns something like: \n// { result: {user_id: 321, user_type: 123, user_name: 'Foo'} }\nconst fetchRemoteData = user => new Promise(resolve => {\n  fetch(`<url endpoint>/${user}`)\n    .then(res => res.json())\n    .then(json => resolve({data: json.result}))\n    .catch(() => resolve({}))\n});\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        fetchData={fetchRemoteData}\n        fetchParams={[321,]}\n        onSave={(data) => console.log(data)}\n        formChange={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n\n## Split form into columns\n\n![Splited columns](./example/public/assets/images/split_columns.png)\n```jsx\nconst formFields = [{\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_email': {\n    component: 'text',\n    props: {\n      label: 'E-mail',\n      required: true\n    }\n  },\n}, {\n  'user_password': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  },\n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  }   \n}]\n```\n\n## Custom components\n```jsx\n\nconst MyComponent = ({...props}) => {\n  const {id,value,onChange} = props;\n\n  const _increment = () => {\n    if(typeof onChange === 'function'){\n      onChange({target: {name: id, value: value + 1}})\n    }\n  }\n\n  return (\n    <Button onClick={_increment}>Increment {value}</Button>\n  )\n}\n\nconst formFields = {\n  'my_component': {\n    component: MyComponent,\n    props: { value: 1 }\n  },\n}\n```\n\n## Elements\n\n* Text input\n> props required: label\n```jsx\n'phone_number': {\n  component: 'text',\n  props: {\n    label: 'Phone',\n    required: true,\n    value: \"(123) 456 7899\",\n    validation: /\\(?([0-9]{3})\\)?([ .-]?)([0-9]{3})\\2([0-9]{4})/,\n    onKeyPress: (ev) => {  }\n  }\n}\n```\n\n* Input Select\n> props required: label and options\n```jsx\n// fixed values\n'user_level': {\n  component: 'select',\n  props: {\n    label: 'User Level',\n    required: true,\n    options: [\n      {value: 1, label: 'Admin'},\n      {value: 2, label: 'Default'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n// assume that the endpoint API returns something like: [{id: 123, label: 'Foo'},...]\n'user_status': {\n  component: 'select',\n  props: {\n    label: 'User Status',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n* Multiselect\n> props required: label and options\n```jsx\n// fixed values\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    required: true,\n    options: [\n      {value: 1, label: 'delete'},\n      {value: 2, label: 'update'},\n      {value: 3, label: 'insert'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n* Radio Group\n```jsx\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: [\n      {value: 'male',   label: 'Male'},\n      {value: 'female', label: 'Female'},\n      {value: 'unknow', label: 'Unknow'}\n    ]\n  }\n}\n// fetch remote data options\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n\n* Switch\n> props required: label\n```jsx\n  'user_is_master': {\n    component: 'switch',\n    props: {\n      label: 'Master user',\n      value: true,\n      value_type: 'bool'\n    }\n  }\n```\n* File upload\n> props required: label\n```jsx\n  'file_upload': {\n    component: 'upload',\n    props: {\n      label: 'File Upload',\n      info: 'CSV or XML file'\n    }\n  }\n```\n\n## Options\n\n### Control Buttons\n```jsx\n<JsonForm \n  components={formFields} \n  controlOptions={{\n    saveText: 'Save Form',\n    cancelText: 'Cancel',\n    boxProps: {\n      textAlign: 'right'\n    }\n    confirmSave: 'Confirm form submission?',\n    confirmCancel: 'Do you really want to cancel?',\n    confirmButtonsLabel: {\n      yes: 'Sim', no: 'Não'\n    }    \n  }}\n  onSave={(data) => console.log(data)}\n/>\n```\n- **saveText:** Text for the save button. Default: 'Save'\n- **cancelText:** Text for the cancel button. Default: 'Cancel'\n- **boxProps:** Options for panel with buttons. Default: null\n- **confirmSave:** Adds the confirm alert for the save button. String with the text of the question. Default: null\n- **confirmCancel:** Adds the confirm alert for the cancel button. String with the text of the question. Default: null\n- **confirmButtonsLabel:** Text for \"yes\" and \"no\" dialog buttons. Default: {no: 'No', yes: 'Yes'}\n\n### Skip a property in the model\n```jsx\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  },\n  'info': {\n    component: 'info',\n    props: {\n      text: 'Tip: Use a non commercial email.'\n    },\n    options: {\n      skipFromModel: true\n    }    \n  }  \n}\n```\n### Field dependency\n* For select/multiselect/radiogroup\n```jsx\nconst formFields = {\n  'user_has_domain': {\n    component: 'switch',\n    props: {\n      label: 'Use domain',\n    }\n  },\n  // without rule\n  'user_domain': {\n    component: 'select',\n    props: {\n      label: 'Type',\n      options: [...]\n    },\n    options: {\n      depends: 'user_has_domain'\n    }\n  },\n  // with rule. E.g: disabled if selected 'user_domain' value is 2.\n  // suported conditions: eq|ne|gt|lt|le|ge\n  'user_type': {\n    component: 'select',\n    props: {\n      label: 'Type',\n      options: [...]\n    },\n    options: {\n      depends: {\n        rules: [\n          {field: 'user_domain', condition: 'eq', value: 2}\n        ]\n      }\n    }    \n  },  \n}\n```\n* For input text\n```jsx\nconst formFields = {\n  'user_password': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      type: 'password'\n    },\n  },\n  // with rule length for input text\n  // suported conditions: eq|ne|gt|lt|le|ge\n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Confirm password',\n      type: 'password'\n    },\n    options: {\n      depends: {\n        rules: [\n          {field: 'user_password', condition: 'ge', length: 6}\n        ]\n      }\n    }\n  },\n  // with regex. Disable If the regex result exists \n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Confirm password',\n      type: 'password'\n    },\n    options: {\n      depends: {\n        rules: [\n          {field: 'user_password', regex: /abc/g}\n        ]\n      }\n    }\n  }  \n}\n```\n\n### Popule with a model\n```jsx\nconst MyModel = {\n  user_name: 'Tom',\n  user_email: 'tom@email.com',\n  user_gener: 'male'\n}\n\n<JsonForm \n  components={formFields} \n  model={MyModel}\n  onSave={(data) => console.log(data)}\n/>\n```\n\n## License\n\nMIT © [Aderbal Nunes](https://github.com/aderbas)\n","readmeFilename":"README.md","gitHead":"2fe2600515ca941b6b66c3e16633c5eda912b7e8","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.2.5-beta.2","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-ghvUGFAqFcG2OfRL4zbRMghl+p6OQbwP8Itv3e43Mui2GmBNlaXbuSxKRigO2ZsdtNZPBpvojTOW5l+lHT0IjA==","shasum":"fbf4599bc61ea1e361108c3c939ad73b701c832b","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.2.5-beta.2.tgz","fileCount":8,"unpackedSize":5437365,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3xm6CRA9TVsSAnZWagAAFdwP/2RhnuW2HV1j49QVHjM4\n2rZBNEbM6GDFtW6ac293+tN19LvVftSo2Vk0bUx1rpWlQ8rwnXTBVk52S73u\nc/7Z3McEhFZuhZnsolWia9GTPl78ehZV7N9aVuTo/HCtkl4pdCAorx9JkhQB\nr2ADYHZVS/u18mPJgwesB7/2Jm3LgNt88SOvLucMRL4B7Pcqy67BuGbWsxHM\nnQMO/3iN8xojYjuX3HshilzcQykcx1eJ66vpWeRXffUwmBcFuFnPk6NHdbh7\nMqNgNU1WJiQBQkJeLZ/ah0QT1hWR4MBkuxBnYewjDfn62hSoh93gmwzFPuO0\niiWKiMSdlKV4JCsQx2ChlfN0Yp1oNMGEGiHNO8GXxEiIup2QLZzC2r4rK6LX\nMxI3LNg3/nyAGB5FX84+P7VrquZRVXO8KI9ZuuC9y1XZq2luUZ87ncmm6uaG\nmiwnDaB4Iln9oWf+ZWkhbSAXRVVEfuYVF6bKZ8MhJOD1SZrwJUrK+P1MKvbI\naP9btew19CffTRlPOwbzSgGWk+pq4+yDQHDdrmpQM9U13q5Gdqapny9XkYmI\nqOmBbRXjXIr+4TsKENM8pCwz5eRPV6xM1L06aCQkB4qsJpqzeH2kTEkB98AO\nQmTLGAhcX1ESt7wggKi/bD5x4G50dVI/icFiIHAvpSbV5jeSy7K4immU0XHE\n/Egs\r\n=F5vM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGdGPXSDitdKz8oBMOjHoPZEZKeByKIpn20Fv+ueXv3qAiAwz2Ggf8oZDx8IkT2rpqmrbl7hImNhDNYHPSqIGL8zJg=="}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.2.5-beta.2_1642011066219_0.751969449198147"},"_hasShrinkwrap":false},"0.2.8-beta.2":{"name":"@aderbalnunes/react-jsonform","version":"0.2.8-beta.2","description":"Create Form from a custom JSON","author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"main":"dist/index.js","module":"dist/index.modern.js","source":"src/index.js","engines":{"node":">=10"},"scripts":{"build":"microbundle-crl --no-compress --format modern,cjs --external=react,react-dom,react-is","start":"microbundle-crl watch --no-compress --format modern,cjs --external=react,react-dom,react-is","prepare":"run-s build","test":"run-s test:unit test:lint test:build","test:build":"run-s build","test:lint":"eslint .","test:unit":"cross-env CI=1 react-scripts test --env=jsdom","test:watch":"react-scripts test --env=jsdom","predeploy":"cd example && npm install && npm run build","deploy":"gh-pages -d example/build"},"peerDependencies":{"prop-types":"^15.5.4","react":"^17.0.2","react-redux":"^7.2.4","redux":"^4.1.0"},"devDependencies":{"@emotion/react":"^11.7.1","@emotion/styled":"^11.6.0","@mui/material":"^5.2.8","@mui/styles":"^5.2.3","babel-eslint":"^10.0.3","cross-env":"^7.0.2","eslint":"^8.6.0","eslint-config-prettier":"^6.7.0","eslint-config-react-app":"^7.0.0","eslint-config-standard":"^14.1.0","eslint-config-standard-react":"^9.2.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^11.0.0","eslint-plugin-prettier":"^3.1.1","eslint-plugin-promise":"^4.2.1","eslint-plugin-react":"^7.17.0","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","microbundle-crl":"^0.13.10","npm-run-all":"^4.1.5","prettier":"^2.0.4","prop-types":"^15.7.2","react":"^17.0.2","react-dom":"^17.0.2","react-redux":"^7.2.2","react-scripts":"^5.0.0","redux":"^4.0.5"},"readme":"# jsonform\n\n> Create material design form from a JSON object\n\n[![NPM](https://img.shields.io/npm/v/jsonform.svg)](https://www.npmjs.com/package/jsonform) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)\n\n## Dev Dependencies\n* [Material-UI](https://material-ui.com/pt/)\n\n## Table of Contents\n1. [Install](#install)\n2. [Basic Usage](#basic-usage)\n3. [Popule form with remote data](#popule-form-with-remote-data)\n4. [Split form into columns](#split-form-into-columns)\n5. [Custom components](#custom-components)\n6. [Elements](#elements)\n7. [Options](#options)\n8. [Popule with a model](#popule-with-a-model)\n9. [License](#license)\n\n## Install\n\n```bash\n$ npm i --save @aderbalnunes/react-jsonform\n```\n\n## Basic Usage\n\n```jsx\nimport React, { Component } from 'react'\n\nimport JsonForm from 'jsonform'\n\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  }\n}\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        onSave={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n## Popule form with remote data\n\n```jsx\nconst formFields = {\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_type': {\n    component: 'select',\n    props: {\n      label: 'User Type',\n      options: () => new Promise(resolve => {\n        fetch('<rest api endpoint>')\n          .then(res => res.json())\n          .then(json => resolve(json.map(r => ({label: r.type, value: r.id}))\n          .catch(resolve([]);\n      })\n    }\n  }\n}\n\n// assume that the endpoint API returns something like: \n// { result: {user_id: 321, user_type: 123, user_name: 'Foo'} }\nconst fetchRemoteData = user => new Promise(resolve => {\n  fetch(`<url endpoint>/${user}`)\n    .then(res => res.json())\n    .then(json => resolve({data: json.result}))\n    .catch(() => resolve({}))\n});\n\nclass MyClass extends Component {\n  render() {\n    return (\n      <JsonForm \n        components={formFields}\n        fetchData={fetchRemoteData}\n        fetchParams={[321,]}\n        onSave={(data) => console.log(data)}\n        formChange={(data) => console.log(data)}\n      />\n    )\n  }\n}\n```\n\n## Split form into columns\n\n![Splited columns](./example/public/assets/images/split_columns.png)\n```jsx\nconst formFields = [{\n  'user_name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'user_email': {\n    component: 'text',\n    props: {\n      label: 'E-mail',\n      required: true\n    }\n  },\n}, {\n  'user_password': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  },\n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      required: true,\n      type: 'password'\n    }\n  }   \n}]\n```\n\n## Custom components\n```jsx\n\nconst MyComponent = ({...props}) => {\n  const {id,value,onChange} = props;\n\n  const _increment = () => {\n    if(typeof onChange === 'function'){\n      onChange({target: {name: id, value: value + 1}})\n    }\n  }\n\n  return (\n    <Button onClick={_increment}>Increment {value}</Button>\n  )\n}\n\nconst formFields = {\n  'my_component': {\n    component: MyComponent,\n    props: { value: 1 }\n  },\n}\n```\n\n## Elements\n\n* Text input\n> props required: label\n```jsx\n'phone_number': {\n  component: 'text',\n  props: {\n    label: 'Phone',\n    required: true,\n    value: \"(123) 456 7899\",\n    validation: /\\(?([0-9]{3})\\)?([ .-]?)([0-9]{3})\\2([0-9]{4})/,\n    onKeyPress: (ev) => {  }\n  }\n}\n```\n\n* Input Select\n> props required: label and options\n```jsx\n// fixed values\n'user_level': {\n  component: 'select',\n  props: {\n    label: 'User Level',\n    required: true,\n    options: [\n      {value: 1, label: 'Admin'},\n      {value: 2, label: 'Default'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n// assume that the endpoint API returns something like: [{id: 123, label: 'Foo'},...]\n'user_status': {\n  component: 'select',\n  props: {\n    label: 'User Status',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n* Multiselect\n> props required: label and options\n```jsx\n// fixed values\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    required: true,\n    options: [\n      {value: 1, label: 'delete'},\n      {value: 2, label: 'update'},\n      {value: 3, label: 'insert'},\n    ]\n  }\n}\n```\n```jsx\n// fetch remote data options\n'user_rights': {\n  component: 'multiselect',\n  props: {\n    label: 'User Rights',\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n* Radio Group\n```jsx\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: [\n      {value: 'male',   label: 'Male'},\n      {value: 'female', label: 'Female'},\n      {value: 'unknow', label: 'Unknow'}\n    ]\n  }\n}\n// fetch remote data options\n'user_gender': {\n  component: 'radiogroup',\n  props: {\n    label: 'User Gender',\n    value: 'male'\n    options: () => new Promise(resolve => {\n      fetch('<rest api endpoint>')\n        .then(res => res.json())\n        .then(json => resolve(json.map(r => ({label: r.label, value: r.id}))\n        .catch(resolve([]);\n    })\n  }\n}\n```\n\n* Switch\n> props required: label\n```jsx\n  'user_is_master': {\n    component: 'switch',\n    props: {\n      label: 'Master user',\n      value: true,\n      value_type: 'bool'\n    }\n  }\n```\n* File upload\n> props required: label\n```jsx\n  'file_upload': {\n    component: 'upload',\n    props: {\n      label: 'File Upload',\n      info: 'CSV or XML file'\n    }\n  }\n```\n\n## Options\n\n### Control Buttons\n```jsx\n<JsonForm \n  components={formFields} \n  controlOptions={{\n    saveText: 'Save Form',\n    cancelText: 'Cancel',\n    boxProps: {\n      textAlign: 'right'\n    }\n    confirmSave: 'Confirm form submission?',\n    confirmCancel: 'Do you really want to cancel?',\n    confirmButtonsLabel: {\n      yes: 'Sim', no: 'Não'\n    }    \n  }}\n  onSave={(data) => console.log(data)}\n/>\n```\n- **saveText:** Text for the save button. Default: 'Save'\n- **cancelText:** Text for the cancel button. Default: 'Cancel'\n- **boxProps:** Options for panel with buttons. Default: null\n- **confirmSave:** Adds the confirm alert for the save button. String with the text of the question. Default: null\n- **confirmCancel:** Adds the confirm alert for the cancel button. String with the text of the question. Default: null\n- **confirmButtonsLabel:** Text for \"yes\" and \"no\" dialog buttons. Default: {no: 'No', yes: 'Yes'}\n\n### Skip a property in the model\n```jsx\nconst formFields = {\n  'name': {\n    component: 'text',\n    props: {\n      label: 'Name',\n      required: true\n    }\n  },\n  'email': {\n    component: 'text',\n    props: {\n      label: 'Email',\n      required: true\n    }    \n  },\n  'info': {\n    component: 'info',\n    props: {\n      text: 'Tip: Use a non commercial email.'\n    },\n    options: {\n      skipFromModel: true\n    }    \n  }  \n}\n```\n### Field dependency\n* For select/multiselect/radiogroup\n```jsx\nconst formFields = {\n  'user_has_domain': {\n    component: 'switch',\n    props: {\n      label: 'Use domain',\n    }\n  },\n  // without rule\n  'user_domain': {\n    component: 'select',\n    props: {\n      label: 'Type',\n      options: [...]\n    },\n    options: {\n      depends: 'user_has_domain'\n    }\n  },\n  // with rule. E.g: disabled if selected 'user_domain' value is 2.\n  // suported conditions: eq|ne|gt|lt|le|ge\n  'user_type': {\n    component: 'select',\n    props: {\n      label: 'Type',\n      options: [...]\n    },\n    options: {\n      depends: {\n        rules: [\n          {field: 'user_domain', condition: 'eq', value: 2}\n        ]\n      }\n    }    \n  },  \n}\n```\n* For input text\n```jsx\nconst formFields = {\n  'user_password': {\n    component: 'text',\n    props: {\n      label: 'Password',\n      type: 'password'\n    },\n  },\n  // with rule length for input text\n  // suported conditions: eq|ne|gt|lt|le|ge\n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Confirm password',\n      type: 'password'\n    },\n    options: {\n      depends: {\n        rules: [\n          {field: 'user_password', condition: 'ge', length: 6}\n        ]\n      }\n    }\n  },\n  // with regex. Disable If the regex result exists \n  'user_repassword': {\n    component: 'text',\n    props: {\n      label: 'Confirm password',\n      type: 'password'\n    },\n    options: {\n      depends: {\n        rules: [\n          {field: 'user_password', regex: /abc/g}\n        ]\n      }\n    }\n  }  \n}\n```\n\n### Popule with a model\n```jsx\nconst MyModel = {\n  user_name: 'Tom',\n  user_email: 'tom@email.com',\n  user_gener: 'male'\n}\n\n<JsonForm \n  components={formFields} \n  model={MyModel}\n  onSave={(data) => console.log(data)}\n/>\n```\n\n## License\n\nMIT © [Aderbal Nunes](https://github.com/aderbas)\n","readmeFilename":"README.md","gitHead":"0bd4742445fa73b26e3b8e95ebb1c4b1e2890fd8","bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"homepage":"https://github.com/aderbas/jsonform#readme","_id":"@aderbalnunes/react-jsonform@0.2.8-beta.2","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-x4MatsJoNhS19HR3rFrRnXInkWkCJgRqK3be1VxNjlgHcPx2QbyHHTsMzCO+LZ4xEDBIVLF+kPnPtCu3YqYy+g==","shasum":"65ba3e33ccc72e6f6fd85e1264ee80fdce4db6d4","tarball":"https://registry.npmjs.org/@aderbalnunes/react-jsonform/-/react-jsonform-0.2.8-beta.2.tgz","fileCount":8,"unpackedSize":5437365,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3xolCRA9TVsSAnZWagAALIIP/2h8MOzLLG0pgdKCVctu\n6M3FVd5St1GslCRzfOfHaiRfc8hPI9aFit1sLIuDZGZgXQF8TPX2ynkFbTvm\nPV4l0bGobHGdRsYjmpr/ZEd+R34IbVdaCbbJ2vyGuPC1yMBSk55SnjxMzCkU\n8tDXfw7SmwHcCj2lUySmJOKsRdKu9LX7fNIVBCYvREZfc6a0FmeP3CAPxdOf\nhQGMLlqR54dTOCjxvMeREYJvwFuTXnksxnRucK+F37lRj9kw6oCWnSGRgLD7\nH48c1d+KDDYPRnHgmN2c+b1KlE3VUHByiLkaJDTLziE5yn1p2Vxha+LXutL1\noiuDwh6f5hF+/mLxNGNAPIAx0V5cHLwcyf/iAyNLvQW4HAj605cgrCWyjae6\ngf4shXeMHmJE8gQpF+ufXNHvHns64DONTkTKalD36Ai3+nT/vAnwsKnFOBRB\n1X9Cing0/YG0Z8jM5a5UK1FJhDlWdaTSrPCE8GLJuu7uux0w7uVYvCLnfh3t\ndty/KwCh2DFOjfNpf1jjF8Axyniq5eEJCBd0CJwFf7vzv4PgFAUoZWul9/Da\nmLXmfGsggq9HHt7jh7edD0YgOJD+ULD8zEtcHQCqpG2aWVZPZKzrf2OfVqsi\nQ2IWzVaYfYjhYjfh/uPNqHhhJtlvmRvlxBYAbn+rMGdyOrO/11XeX30JnM9c\nsHIW\r\n=32N+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHZ9E11JjrqjV9hxmIQNvYyvP9RGkYUyEzq6bOgCeHSsAiEAsCT9QbGKMlbL/phmauNAvxIw///d3hjjP8F2Eg9g0jI="}]},"_npmUser":{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"},"directories":{},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-jsonform_0.2.8-beta.2_1642011172931_0.005055864683690681"},"_hasShrinkwrap":false}},"time":{"created":"2021-03-29T18:53:32.759Z","0.1.2":"2021-03-29T18:53:33.332Z","modified":"2022-04-04T11:28:58.924Z","0.1.3":"2021-03-29T19:22:29.136Z","0.1.4":"2021-03-31T14:38:10.177Z","0.1.6":"2021-05-20T00:50:21.649Z","0.1.7":"2021-06-02T01:29:24.083Z","0.1.8":"2021-06-25T01:33:54.732Z","0.1.9-beta":"2021-07-13T15:22:11.448Z","0.1.9-4-beta":"2021-07-14T01:25:26.024Z","0.1.9-5-beta":"2021-07-15T00:23:52.193Z","0.1.9-6-beta":"2021-07-29T00:33:11.833Z","0.1.9":"2021-08-19T00:01:36.665Z","0.2.0":"2021-08-26T00:25:31.676Z","0.2.1":"2021-09-21T14:54:49.652Z","0.2.2":"2021-09-28T14:44:13.118Z","0.2.3":"2021-10-05T19:02:09.703Z","0.2.4":"2021-10-06T12:08:04.708Z","0.2.5":"2021-11-30T17:50:06.346Z","0.2.6":"2021-12-01T13:02:09.546Z","0.2.7":"2021-12-09T11:23:56.280Z","0.2.8-beta.1":"2021-12-09T12:01:24.169Z","0.2.5-beta.1":"2022-01-12T18:03:50.890Z","0.2.5-beta.2":"2022-01-12T18:11:06.406Z","0.2.8-beta.2":"2022-01-12T18:12:53.182Z"},"maintainers":[{"name":"aderbalnunes","email":"aderbalnunes@gmail.com"}],"description":"Create Form from a custom JSON","homepage":"https://github.com/aderbas/jsonform#readme","repository":{"type":"git","url":"git+https://github.com/aderbas/jsonform.git"},"author":{"name":"Aderbal Nunes aderbalnunes@gmail.com"},"bugs":{"url":"https://github.com/aderbas/jsonform/issues"},"license":"MIT","readme":"","readmeFilename":""}