{"_id":"@formschema/native","_rev":"10-0083dcf26a13e5f4361196a4ef9a41f2","name":"@formschema/native","dist-tags":{"latest":"2.0.0-beta.7"},"versions":{"1.1.1":{"name":"@formschema/native","version":"1.1.1","description":"Vue component form based on JSON Schema","main":"dist/FormSchemaNative.js","scripts":{"pretest":"eslint --ext .js,.vue component.vue test/specs","test":"karma start karma.conf.js","build":"node build","tag":"git tag v`node -p 'require(\"./package\").version'`"},"repository":{"type":"git","url":"git+https://gitlab.com/formschema/native.git"},"keywords":["vue","form","json","schema"],"author":{"name":"Sébastien Demanou"},"license":"MIT","bugs":{"url":"https://gitlab.com/formschema/native/issues"},"homepage":"https://gitlab.com/formschema/native","devDependencies":{"@vuedoc/md":"^1.0.1","babel-core":"^6.26.3","babel-eslint":"^8.0.2","babel-loader":"^7.1.4","babel-plugin-transform-runtime":"^6.23.0","babel-preset-es2015":"^6.24.1","babel-preset-stage-2":"^6.24.1","babel-preset-vue-app":"^1.3.2","babel-runtime":"^6.26.0","css-loader":"^0.28.11","eslint":"^4.19.1","eslint-config-standard":"^10.2.1","eslint-friendly-formatter":"^3.0.0","eslint-loader":"^1.9.0","eslint-plugin-html":"^3.2.2","eslint-plugin-import":"^2.13.0","eslint-plugin-node":"^5.2.1","eslint-plugin-promise":"^3.8.0","eslint-plugin-standard":"^3.1.0","jasmine-core":"^2.99.1","karma":"^1.7.1","karma-jasmine":"^1.1.2","karma-phantomjs-launcher":"^1.0.4","karma-spec-reporter":"0.0.31","karma-webpack":"^2.0.13","ora":"^1.4.0","phantomjs-prebuilt":"^2.1.16","rimraf":"^2.6.2","vue":"^2.5.3","vue-loader":"^13.5.0","vue-style-loader":"^3.1.2","vue-template-compiler":"^2.5.3","webpack":"^3.12.0"},"dependencies":{},"gitHead":"a80eeb76ee1addce92e78281204a401a657ab7d2","_id":"@formschema/native@1.1.1","_npmVersion":"6.1.0","_nodeVersion":"8.11.3","_npmUser":{"name":"demsking","email":"demsking@gmail.com"},"dist":{"integrity":"sha512-fkDEfws3Zz0sQ/ejDkde6FUgIhsbHHIPYaaCjbTbcteRZjiHhhT5ZTulblOM6xsSOB74acH3tG3YI8+TWs0/pA==","shasum":"52b69b7ea5c6c28e3083fa229aef2f42f5af21f9","tarball":"https://registry.npmjs.org/@formschema/native/-/native-1.1.1.tgz","fileCount":5,"unpackedSize":38563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbMxx8CRA9TVsSAnZWagAASx8P/AmIB+EZOuuRNQgoQZPh\neFDcbFPkJBojNo8nx9ioHUMOGp3i6sdAEtgVzljw6dmCZvMLFvtmmijOo5m3\n3VgJaJgskphguTAibCUve06ufCgROF/zcFtbARZWRSethatj1BwRpk6Ozgfy\nI7aOYS23KzPczX5KYb00o/xvEWrMjgQETSzRi23HN4QOjP83eIoLWqenS7Sg\nUd9CYjWmYznoZah4yG5FN+QLJAuR2/6XZub/2opt5k3rfhhp43oA65DMf9oN\nwoDsPUaHO4Tix2ZPHTkFMER2t5mj1TB0j0uovbzjUIApkZKnbtXJ0h6cL7Fc\nntTTPl4FQMA9KpIoxg8swWTyYiqdfWMosjmQNIaHOT+GA6PBH0xk3C/j9fnS\nq2PkdBGh00A0dY+iBWIn7zaJFDM+zVOMCN8cJs640px50soxPouiiRHIU0s+\nviM4Pib535Udmt6lrWImaWgf3zl2UUGszu5p5eW7ZE8Ggf9SB335sv3sYWuB\nHHLUoTiSFqnER7rnk3X8N5O2wcN6yApyeqsipXWQSEt3hR/adLJqMgdbgr67\nv/nDtloGU/c67qeXvgELDUfowgQylb8QebSrVu7Oim+9BvssgcSjNC/hwNcK\n/7jLjkgmarz+dDltEG1VwHkFYLm/RezYdhqDMdk9JJWXQT0sc/vxQ3ME5LxA\nE5cM\r\n=+Fxd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFQJjtCBesE4rV5FFfFGMfiFMOaHvlPtbgU2Ps0DQD0rAiBk6kawRORRQOOkMbWzJgGzQjuVQC3JRmofPrlnHxyLAQ=="}]},"maintainers":[{"name":"demsking","email":"demsking@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/native_1.1.1_1530076284579_0.7218478276759137"},"_hasShrinkwrap":false},"2.0.0-alpha.2":{"name":"@formschema/native","version":"2.0.0-alpha.2","description":"Vue component form based on JSON Schema","main":"dist/FormSchema.esm.js","browser":"dist/FormSchema.umd.min.js","scripts":{"demo":"cd demo && npm run serve","test":"vue-cli-service test:unit --colors --testMatch '<rootDir>/test/specs/*.spec.js' --testURL='http://localhost'","lint":"vue-cli-service lint --no-fix","readme":"vuedoc.md --join src/components/*.js --ignore-name --ignore-data --section 'FormSchema API' --output README.md","build":"rollup -c"},"repository":{"type":"git","url":"git+https://gitlab.com/formschema/native.git"},"keywords":["vue","form","json","schema"],"author":{"name":"Sébastien Demanou"},"license":"MIT","bugs":{"url":"https://gitlab.com/formschema/native/issues"},"homepage":"https://gitlab.com/formschema/native","devDependencies":{"@babel/core":"^7.0.0-beta.56","@vue/cli-plugin-babel":"^3.0.0-rc.10","@vue/cli-plugin-eslint":"^3.0.0-rc.10","@vue/cli-plugin-unit-jest":"^3.0.0-rc.10","@vue/cli-service":"^3.0.0-rc.10","@vue/eslint-config-standard":"^3.0.0-rc.10","@vue/test-utils":"^1.0.0-beta.24","@vuedoc/md":"^1.4.1","babel-core":"^6.26.3","babel-jest":"^23.4.2","babel-plugin-transform-runtime":"^6.23.0","babel-preset-es2015":"^6.24.1","babel-preset-stage-2":"^6.24.1","regenerator-runtime":"^0.12.1","rollup":"^0.63.5","rollup-plugin-babel":"^4.0.0-beta.8","rollup-plugin-commonjs":"^9.1.4","rollup-plugin-node-resolve":"^3.3.0","rollup-plugin-uglify":"^4.0.0","sinon":"^6.1.4","vue":"^2.5.17"},"dependencies":{},"gitHead":"8ae525e9d25b39fe0b2413b04fe2b0246f9e676b","_id":"@formschema/native@2.0.0-alpha.2","_npmVersion":"6.2.0","_nodeVersion":"10.8.0","_npmUser":{"name":"demsking","email":"demsking@gmail.com"},"dist":{"integrity":"sha512-i6QWSdI74AwanYqj3SYQD5nHXGABNAK+RXkbpGVUFqhL/S7JKy7bhwIaoOvlsLpH6xOZAa9oIzTvseIM7PlZCA==","shasum":"793dabb7bfe5c2359124a3f44aeaa0ab9f309e5d","tarball":"https://registry.npmjs.org/@formschema/native/-/native-2.0.0-alpha.2.tgz","fileCount":19,"unpackedSize":499229,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbagXJCRA9TVsSAnZWagAAE+wQAJdH9rmCzzeVNPYlBnWp\n4Tq07KOrdVCe9GKt8LJoYAGwI8RvgrdtbqFswN4TBygeTnBAWb4nSeA2V5nq\n0GzVuxGiorGUd1n3FgFdleBHUTyP1fOupAovdXJ3k07QtEZCrV6Dp/YHTv9H\npxVynooV7MZym7J7BCdZYNo2ks4n9JDbo0/q0X8yiGLBjIXFMsgUDDlZmpdq\nSUDQ2p1TsBlU/b/O3Tf3PthAWZ26qnOON6nQxgJoX6P1A1zPCHUmWDT5BNa8\nZt0iBTAs2k08l50RS6lKVOsQ5LBmRFDfH0fz6SOEx4ENYvxyqUUM/+IMRjah\nq2mDXHf5VNo8t212U+XrvArP1oS2mYmqFQVClFt0o2hnXBhb/yL/LKUixBq1\ng3U92JJ4ADHKzUrtK+4cF9/RyuCtgFhyIBpwK5LwdTpEroObqzgSJ0pLN1pb\n2miTiWJBj/bHRDyfNsyBV0OgWxeaKXPM4SBrq4+LAE86kxRZ6fS7gTviJB2Y\nkz2Y8OKh2xgi+Kr3SvrITDq+r+UXbhfW55hzRmVG5lD/5ZjVEY/N0srdEkYI\nls5dJtCryT7jb7HBtZFUzLVFAEoUOE+exV63OYvkAhB6bdQfuZkozIaamud5\nRmTxlj5QxiGqTgMzMe7uesn2drmYE+k/dk+ZTrFUzncKMQLqReLU5aM0fCxK\nSPQc\r\n=jMf3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHec8z6YCl126QcaenUg6pBofKKKPnBFQChrxHGVQejZAiBsrzwrdKBnmvWNRz+hFygpd7EL8ZAfi5p6sCXKk2I82A=="}]},"maintainers":[{"name":"demsking","email":"demsking@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/native_2.0.0-alpha.2_1533674953421_0.475744188896694"},"_hasShrinkwrap":false},"2.0.0-beta.1":{"name":"@formschema/native","version":"2.0.0-beta.1","description":"Vue component form based on JSON Schema","main":"dist/FormSchema.esm.min.js","browser":"dist/FormSchema.umd.min.js","types":"dist/types/index.d.ts","scripts":{"playground":"cd playground && npm run serve","playground:install":"cd playground && npm i","test":"vue-cli-service test:unit","testdebug":"node --inspect-brk ./node_modules/@vue/cli-service/bin/vue-cli-service.js test:unit --runInBand","lint":"eslint src/**/* tests/**/*.ts tests/**/specs/**/*.ts","lint:fix":"eslint --fix src/**/* tests/**/*.ts tests/**/specs/**/*.ts","gimtoc":"gimtoc -f README.md -s 'Table of Contents' -o README.md","readme":"vuedoc.md -c && npm run gimtoc && git diff README.md","build":"rollup -c"},"repository":{"type":"git","url":"git+https://gitlab.com/formschema/native.git"},"keywords":["vue","form","json","schema","jsonschema"],"author":{"name":"Sébastien Demanou"},"license":"MIT","bugs":{"url":"https://gitlab.com/formschema/native/issues"},"homepage":"https://gitlab.com/formschema/native","devDependencies":{"@babel/core":"^7.11.1","@babel/preset-env":"^7.11.0","@types/jest":"^26.0.10","@types/node":"^15.0.1","@types/sinon":"^10.0.0","@typescript-eslint/eslint-plugin":"^3.9.1","@typescript-eslint/parser":"^3.9.1","@vue/cli-plugin-unit-jest":"^4.5.4","@vue/cli-service":"^4.5.4","@vue/test-utils":"^1.0.4","@vuedoc/md":"^3.0.0-beta2","@vuedoc/parser":"^3.0.0-beta2","babel-jest":"^26.3.0","eslint":"^7.7.0","eslint-config-airbnb":"^18.2.0","eslint-import-resolver-typescript":"^2.2.1","eslint-plugin-import":"^2.22.0","gimtoc":"^1.3.3","jest-serializer-vue":"^2.0.2","rollup":"^2.26.4","rollup-plugin-copy":"^3.3.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript":"^1.0.1","ts-jest":"^26.2.0","tslib":"^2.0.1","typescript":"^4.2.4","typescript-eslint-parser":"^22.0.0","vue":"^2.6.11","vue-template-compiler":"^2.6.11"},"gitHead":"18ca001f0ec02603d18735c06edbab97a16c4f8e","_id":"@formschema/native@2.0.0-beta.1","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-nFsGJHOg1qv5Tsv1YZeMAhz0c5VkU+Yu+zymQnRXw0Qb7gT+MovQht9jCxYi9YZjqR4GB00ywibxcddc0vmPzg==","shasum":"19c306d756ab67a9880615534a56b5bf5dab59d0","tarball":"https://registry.npmjs.org/@formschema/native/-/native-2.0.0-beta.1.tgz","fileCount":20,"unpackedSize":1147292,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmqhXCRA9TVsSAnZWagAAavMP/RUSOjRm/Gk2pAkx0oZo\ncTEPYSUrPHZAelJS0vs1TsDpsv1eJ0XfOCRRVN/mYn28LPwBxQVT/Ln1WGda\nB8OFkMRlfT6TUiRkClE6JTE9RJo1x9tG+EZ6KH+V+rqQeRdK3RgWihxXPV/Q\nEULpxTPSnb0mwsWuVYCQp0II6B1awkZPknKZ+qDCI9cIInitrxTQLhM8M2ri\nqluuGHUEwo9O4oP5GeK8mxaZE/ygF7xfLQJnyPuOROXcwa3IuUeov4NTvfwW\npjOWh8qxqVx63ERvjUbyEJCHQ/VV/h1jPo+XbOApllBIO0aUEwXpYB37Vctq\nwUbjlNVr64BlpRnAQ3yer1EEUft3UKTUywtmm+2a8BiiMMWZgAGLLc6I000E\n9lgGI4toH8Ko66/zNfkoaPOSTk9BsiW17u4b/UAEinrRCPoYZKe3d8P1iU1y\nojRtp1nH5hcojinWJyrYuEPYICoJly9i+/55zhRgNF+TdcPIF9PtgFLCcDU2\nlWnPBpUbOX8xgRaUsma3kngAXelkcQLbyCiPQ5esG1IoZvhZY03BTg0HQf9b\nDlNNZ5A40v16BNRbqpt1FHflSiZZcgUZO2AfKdRGoNyNz2nub16plN9Qj1CV\nzb2/f4QirQQHDaLT+TFcRfuK4qAM5RJY2/4wOyc/xto8wY1uO7kvzXcw2ECK\n7Pr8\r\n=ZWs2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPjv/FKfzv9xfoPhX7uGP5qe4HwiJgtVuyZUGEGWDhxgIgHP9lWSGvKm2bez0/xO1KH1Spx1jd41N10urIzhoMkI0="}]},"_npmUser":{"name":"demsking","email":"demsking@gmail.com"},"directories":{},"maintainers":[{"name":"demsking","email":"demsking@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/native_2.0.0-beta.1_1620748375287_0.9037805138951587"},"_hasShrinkwrap":false},"2.0.0-beta.2":{"name":"@formschema/native","version":"2.0.0-beta.2","description":"Vue component form based on JSON Schema","main":"dist/FormSchema.esm.min.js","browser":"dist/FormSchema.umd.min.js","types":"types/index.d.ts","scripts":{"playground":"cd playground && npm run serve","playground:install":"cd playground && npm i","test":"vue-cli-service test:unit","testdebug":"node --inspect-brk ./node_modules/@vue/cli-service/bin/vue-cli-service.js test:unit --runInBand","lint":"eslint src/**/* tests/**/*.ts tests/**/specs/**/*.ts","lint:fix":"eslint --fix src/**/* tests/**/*.ts tests/**/specs/**/*.ts","gimtoc":"gimtoc -f README.md -s 'Table of Contents' -o README.md","readme":"vuedoc.md -c && npm run gimtoc && git diff README.md","build":"rollup -c"},"repository":{"type":"git","url":"git+https://gitlab.com/formschema/native.git"},"keywords":["vue","form","json","schema","jsonschema"],"author":{"name":"Sébastien Demanou"},"license":"MIT","bugs":{"url":"https://gitlab.com/formschema/native/issues"},"homepage":"https://gitlab.com/formschema/native","devDependencies":{"@babel/core":"^7.11.1","@babel/preset-env":"^7.11.0","@types/jest":"^26.0.10","@types/node":"^15.0.1","@types/sinon":"^10.0.0","@typescript-eslint/eslint-plugin":"^3.9.1","@typescript-eslint/parser":"^3.9.1","@vue/cli-plugin-unit-jest":"^4.5.4","@vue/cli-service":"^4.5.4","@vue/test-utils":"^1.0.4","@vuedoc/md":"^3.0.0-beta2","@vuedoc/parser":"^3.0.0-beta2","babel-jest":"^26.3.0","eslint":"^7.7.0","eslint-config-airbnb":"^18.2.0","eslint-import-resolver-typescript":"^2.2.1","eslint-plugin-import":"^2.22.0","gimtoc":"^1.3.3","jest-serializer-vue":"^2.0.2","rollup":"^2.26.4","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript":"^1.0.1","ts-jest":"^26.2.0","tslib":"^2.0.1","typescript":"^4.2.4","typescript-eslint-parser":"^22.0.0","vue":"^2.6.11","vue-template-compiler":"^2.6.11"},"gitHead":"1f1eb50d1767be0be36646e122840a18e54bc82b","_id":"@formschema/native@2.0.0-beta.2","_nodeVersion":"14.17.3","_npmVersion":"6.14.13","dist":{"integrity":"sha512-5T6WTVrQNpb4yLdxNam+Brnb/PHKjhO7gMyLr/5BKm3Isbm/pcmv/Sxabo6C/IaY8jwZwRRHPOjDZS8NN9Tm+A==","shasum":"30f733f99cd4fc27a1427d60724337275a4e7633","tarball":"https://registry.npmjs.org/@formschema/native/-/native-2.0.0-beta.2.tgz","fileCount":19,"unpackedSize":1160568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg9HMkCRA9TVsSAnZWagAARLgP/212MwAotcktvGwLo7R0\n/RNwkp89oy0KT/Sr6oHlHOt4+qq1J4bl1zmeei8Bm3UZKbJli6nUUfbliebf\nfCaBD+6dX/rsl1i9BtNS6mfP7+GdZGuPWM0TLJhJwUZliF923JKlj78gbNx/\nChQNk00FL1GN6Mn95gilCbBqfhtu5WKqZV9LxRiFco+w8cWAV5uli0M57FnT\nE5FZEFbV8eOz6s4amTxG0m2JsutkweIrvNzHF3LkxA7vn5IigquVp2M3bENW\nrEX3vn8yGjmnpUE81W921hgJv7P3yr8YL4zvYp3KBLzy2GQOJmjd3XBld+JC\nYiIiy4K9NicPC5FmUY6lDIPsWm/WAvXYtkjSR04qi6hIGCzIzlYFw2AEsogd\nGDAuMWALYa0C0GCaSyWyu9TnkwwtbVSc5NaJd2lOhA1r3VIyYqovfpWVq5DI\nuxngFVPy24BD+J1BFa3IuB/BX6TjnXqHXinDh/pyHmihJK+myAcYcqUSopdq\n65TlJMmzI3IeivNCYhUUEIyjU9CfqM4Ci0yZv+4cHh4Pc/A+wDfblPyuiAS4\nxeBnBQWpFGdjdszPXuckwTSF81NQ6+zvR9l3i8l/5P3WdcoZkrTxH0qnwZ/M\nJoXup1v1P/fvVwtFduWQWDn+aNVOHVPp5KBIn4G4SezrkenYXXGX0bdLYZcz\nbWVV\r\n=0Onx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpvLfLe4BEiA/zQNN2Mi45QRMWxPKvoTE8zp6UE97OQwIhALar33xcd9m8LWd+ZGzzVl8TfBzdGz53kk3kKof3j3Zs"}]},"_npmUser":{"name":"demsking","email":"demsking@gmail.com"},"directories":{},"maintainers":[{"name":"demsking","email":"demsking@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/native_2.0.0-beta.2_1626632995999_0.41954033444287253"},"_hasShrinkwrap":false},"2.0.0-beta.3":{"name":"@formschema/native","version":"2.0.0-beta.3","description":"Vue component form based on JSON Schema","main":"dist/FormSchema.esm.min.js","browser":"dist/FormSchema.umd.min.js","types":"types/index.d.ts","scripts":{"playground":"cd playground && npm run serve","playground:install":"cd playground && npm i","test":"vue-cli-service test:unit","testdebug":"node --inspect-brk ./node_modules/@vue/cli-service/bin/vue-cli-service.js test:unit --runInBand","lint":"eslint src/**/* tests/**/*.ts tests/**/specs/**/*.ts","lint:fix":"eslint --fix src/**/* tests/**/*.ts tests/**/specs/**/*.ts","gimtoc":"gimtoc -f README.md -s 'Table of Contents' -o README.md","readme":"vuedoc.md -c && npm run gimtoc && git diff README.md","build":"rollup -c"},"repository":{"type":"git","url":"git+https://gitlab.com/formschema/native.git"},"keywords":["vue","form","json","schema","jsonschema"],"author":{"name":"Sébastien Demanou"},"license":"MIT","bugs":{"url":"https://gitlab.com/formschema/native/issues"},"homepage":"https://gitlab.com/formschema/native","devDependencies":{"@babel/core":"^7.11.1","@babel/preset-env":"^7.11.0","@types/jest":"^26.0.10","@types/node":"^15.0.1","@types/sinon":"^10.0.0","@typescript-eslint/eslint-plugin":"^3.9.1","@typescript-eslint/parser":"^3.9.1","@vue/cli-plugin-unit-jest":"^4.5.4","@vue/cli-service":"^4.5.4","@vue/test-utils":"^1.0.4","@vuedoc/md":"^3.0.0-beta2","@vuedoc/parser":"^3.0.0-beta2","babel-jest":"^26.3.0","eslint":"^7.7.0","eslint-config-airbnb":"^18.2.0","eslint-import-resolver-typescript":"^2.2.1","eslint-plugin-import":"^2.22.0","gimtoc":"^1.3.3","jest-serializer-vue":"^2.0.2","rollup":"^2.26.4","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript":"^1.0.1","ts-jest":"^26.2.0","tslib":"^2.0.1","typescript":"^4.2.4","typescript-eslint-parser":"^22.0.0","vue":"^2.6.11","vue-template-compiler":"^2.6.11"},"gitHead":"bedf9ec983d951022408ae047db46c15225778d0","_id":"@formschema/native@2.0.0-beta.3","_nodeVersion":"14.17.6","_npmVersion":"6.14.15","dist":{"integrity":"sha512-AJxKgU6WahBVF/kE2UxaSPzyp/JTkYg1Os7+qJ+aseRx26iw9DsZfQbSeD4CfuI0TeeyHr4yFVI2MS5b7+AMWA==","shasum":"f1096044ec6c651c24c28f0b8a8e9f083974948b","tarball":"https://registry.npmjs.org/@formschema/native/-/native-2.0.0-beta.3.tgz","fileCount":19,"unpackedSize":1163978,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhQeMuCRA9TVsSAnZWagAAICcP/3/FtWMMVfBsZ53rAs9y\niul+bGQTRSgmEGhB+Ul0dB9Z6USL2G7W0J9NTJuMQatPOjyxcirWPCjvB0tT\neo2z0FmWnAEHFvjy/DVQGh5eHfPlTVzL8RrjHci5dk2PtPCHX24XjkmSNwLJ\nEflqzFsifE6cV/BVFZs3iTa00i1DUrNXwh6mNsUm4DUdM/OW7keFkDdAusBC\nn/QsADQhC1Ci2p08x+Rf3irPd9wvvHhd0BIk3y247eI/3ndNvNvph0ASSBe5\njjdvbJgPrT40i0szlqGLNVQhLMJqwtpg14P0bCQVvRbSx4BXrdep84/6wCNR\nTkxGAhLQR6EjyyfPx5AtsvYTUBqSrkHe5rAZHTnvIdVS+ViZZtUKUC5Lx48E\nv3ixL+fMM+MkYY/3ylk82I2zoHuCDdMh0VnD85rHKazry2dyP+VWf+WeP53M\nvZTH9YHqskrm5ENxWFjIP2lGRRLr4b6tYnPGhTA/9IRdijb50ck2EcE3BRGS\neYBQS6URjOdDZPLWsUFIxE4ywqeKJ6ZTq1gKFDipzMwuE7lOKbA7Yhd/kJo3\nXZZlLWfsxACkn9Wzqnn3Wpl1aQ5mywfIoSeorIXQ/XAHchCFxHthLtrtGIXo\nfBE4lCXVIR4qULNkgWe2R+wrtwnQPp3X9otiKRqV489CkooSh5eyBWW2LnFE\n2z8y\r\n=LY0F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCT/SHQ48uoAC2o1AT49pSQRpM4Ouh/F5pMw7Hqt9O+3QIgQn5FB/9L991UQOxSTZ+l+g6aSNJi4LG3itPpRDYFjJY="}]},"_npmUser":{"name":"demsking","email":"demsking@gmail.com"},"directories":{},"maintainers":[{"name":"demsking","email":"demsking@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/native_2.0.0-beta.3_1631707950769_0.7489319264246064"},"_hasShrinkwrap":false},"2.0.0-beta.4":{"name":"@formschema/native","version":"2.0.0-beta.4","description":"Vue component form based on JSON Schema","main":"dist/FormSchema.esm.min.js","browser":"dist/FormSchema.umd.min.js","types":"types/index.d.ts","scripts":{"playground":"cd playground && npm run serve","playground:install":"cd playground && npm i","test":"vue-cli-service test:unit","testdebug":"node --inspect-brk ./node_modules/@vue/cli-service/bin/vue-cli-service.js test:unit --runInBand","lint":"eslint src/**/* tests/**/*.ts tests/**/specs/**/*.ts","lint:fix":"eslint --fix src/**/* tests/**/*.ts tests/**/specs/**/*.ts","gimtoc":"gimtoc -f README.md -s 'Table of Contents' -o README.md","readme":"vuedoc.md -c && npm run gimtoc && git diff README.md","build":"rollup -c"},"repository":{"type":"git","url":"git+https://gitlab.com/formschema/native.git"},"keywords":["vue","form","json","schema","jsonschema"],"author":{"name":"Sébastien Demanou"},"license":"MIT","bugs":{"url":"https://gitlab.com/formschema/native/issues"},"homepage":"https://gitlab.com/formschema/native","devDependencies":{"@babel/core":"^7.11.1","@babel/preset-env":"^7.11.0","@types/jest":"^26.0.10","@types/node":"^15.0.1","@types/sinon":"^10.0.0","@typescript-eslint/eslint-plugin":"^3.9.1","@typescript-eslint/parser":"^3.9.1","@vue/cli-plugin-unit-jest":"^4.5.4","@vue/cli-service":"^4.5.4","@vue/test-utils":"^1.0.4","@vuedoc/md":"^3.0.0-beta2","@vuedoc/parser":"^3.0.0-beta2","babel-jest":"^26.3.0","eslint":"^7.7.0","eslint-config-airbnb":"^18.2.0","eslint-import-resolver-typescript":"^2.2.1","eslint-plugin-import":"^2.22.0","gimtoc":"^1.3.3","jest-serializer-vue":"^2.0.2","rollup":"^2.26.4","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript":"^1.0.1","ts-jest":"^26.2.0","tslib":"^2.0.1","typescript":"^4.2.4","typescript-eslint-parser":"^22.0.0","vue":"^2.6.11","vue-template-compiler":"^2.6.11"},"gitHead":"b7e15728a442a3e75e174b35e301a71470862199","_id":"@formschema/native@2.0.0-beta.4","_nodeVersion":"14.18.0","_npmVersion":"6.14.15","dist":{"integrity":"sha512-Pq4joi6xHQJMXkA1f4Mc/2a3fPQTuPtNDoYwQDAm8uYaQMrvq5uzE+7yC38xLU8YM/0Dnt4RoX7npIKEXI3RyQ==","shasum":"95082cc5b1c7da63d67c5f4c0b7c3f88233735d5","tarball":"https://registry.npmjs.org/@formschema/native/-/native-2.0.0-beta.4.tgz","fileCount":19,"unpackedSize":1164472,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVCEKVW/D7aoFWIm1HYj7fKmVeqQ20K6TXyHQIKpryVAIhAJipxA/iaDObc7ezpiCAs83G5linDrjXDOXhbS3myQjT"}]},"_npmUser":{"name":"demsking","email":"demsking@gmail.com"},"directories":{},"maintainers":[{"name":"demsking","email":"demsking@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/native_2.0.0-beta.4_1634013452176_0.30428984024410455"},"_hasShrinkwrap":false},"2.0.0-beta.5":{"name":"@formschema/native","version":"2.0.0-beta.5","description":"Vue component form based on JSON Schema","main":"dist/FormSchema.esm.min.js","browser":"dist/FormSchema.umd.min.js","types":"types/index.d.ts","scripts":{"playground":"cd playground && npm run serve","playground:install":"cd playground && npm i","test":"vue-cli-service test:unit","testdebug":"node --inspect-brk ./node_modules/@vue/cli-service/bin/vue-cli-service.js test:unit --runInBand","lint":"eslint src/**/* tests/**/*.ts tests/**/specs/**/*.ts","lint:fix":"eslint --fix src/**/* tests/**/*.ts tests/**/specs/**/*.ts","gimtoc":"gimtoc -f README.md -s 'Table of Contents' -o README.md","readme":"vuedoc.md -c && npm run gimtoc && git diff README.md","build":"rollup -c"},"repository":{"type":"git","url":"git+https://gitlab.com/formschema/native.git"},"keywords":["vue","form","json","schema","jsonschema"],"author":{"name":"Sébastien Demanou"},"license":"MIT","bugs":{"url":"https://gitlab.com/formschema/native/issues"},"homepage":"https://gitlab.com/formschema/native","devDependencies":{"@babel/core":"^7.11.1","@babel/preset-env":"^7.11.0","@types/jest":"^26.0.10","@types/node":"^15.0.1","@types/sinon":"^10.0.0","@typescript-eslint/eslint-plugin":"^3.9.1","@typescript-eslint/parser":"^3.9.1","@vue/cli-plugin-unit-jest":"^4.5.4","@vue/cli-service":"^4.5.4","@vue/test-utils":"^1.0.4","@vuedoc/md":"^3.0.0-beta2","@vuedoc/parser":"^3.0.0-beta2","babel-jest":"^26.3.0","eslint":"^7.7.0","eslint-config-airbnb":"^18.2.0","eslint-import-resolver-typescript":"^2.2.1","eslint-plugin-import":"^2.22.0","gimtoc":"^1.3.3","jest-serializer-vue":"^2.0.2","rollup":"^2.26.4","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript":"^1.0.1","ts-jest":"^26.2.0","tslib":"^2.0.1","typescript":"^4.2.4","typescript-eslint-parser":"^22.0.0","vue":"^2.6.11","vue-template-compiler":"^2.6.11"},"gitHead":"2a79162a324610e35718c0f9db477ff1a03f4a42","_id":"@formschema/native@2.0.0-beta.5","_nodeVersion":"14.18.0","_npmVersion":"6.14.15","dist":{"integrity":"sha512-zu4sdtq9o4qQtsEEpSuzQJKzcLk6WH2bfwZuop82hI/H0IltjaLWJTMdjv4c9MXsS7tNvg7ytby/OnT4GzOj5w==","shasum":"7a6cb6850c439893ca033eeb6a5ea15f98944a89","tarball":"https://registry.npmjs.org/@formschema/native/-/native-2.0.0-beta.5.tgz","fileCount":19,"unpackedSize":1165840,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFU40tTtfTMFb63OJtaa8IxOjHpyLAtoYuv3BkYKWyuHAiEAh6RwmQRw/AOAtxglIUdqUeB12WtFtctUBH+FUiuP/zI="}]},"_npmUser":{"name":"demsking","email":"demsking@gmail.com"},"directories":{},"maintainers":[{"name":"demsking","email":"demsking@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/native_2.0.0-beta.5_1634029818167_0.6130954828211055"},"_hasShrinkwrap":false},"2.0.0-beta.6":{"name":"@formschema/native","version":"2.0.0-beta.6","description":"Vue component form based on JSON Schema","main":"dist/FormSchema.esm.min.js","browser":"dist/FormSchema.umd.min.js","types":"types/index.d.ts","scripts":{"playground":"cd playground && npm run serve","playground:install":"cd playground && npm i","test":"vue-cli-service test:unit","testdebug":"node --inspect-brk ./node_modules/@vue/cli-service/bin/vue-cli-service.js test:unit --runInBand","lint":"eslint src/**/* tests/**/*.ts tests/**/specs/**/*.ts","lint:fix":"eslint --fix src/**/* tests/**/*.ts tests/**/specs/**/*.ts","gimtoc":"gimtoc -f README.md -s 'Table of Contents' -o README.md","readme":"vuedoc.md -c && npm run gimtoc && git diff README.md","build":"rollup -c"},"repository":{"type":"git","url":"git+https://gitlab.com/formschema/native.git"},"keywords":["vue","form","json","schema","jsonschema"],"author":{"name":"Sébastien Demanou"},"license":"MIT","bugs":{"url":"https://gitlab.com/formschema/native/issues"},"homepage":"https://gitlab.com/formschema/native","devDependencies":{"@babel/core":"^7.11.1","@babel/preset-env":"^7.11.0","@types/jest":"^26.0.10","@types/node":"^15.0.1","@types/sinon":"^10.0.0","@typescript-eslint/eslint-plugin":"^3.9.1","@typescript-eslint/parser":"^3.9.1","@vue/cli-plugin-unit-jest":"^4.5.4","@vue/cli-service":"^4.5.4","@vue/test-utils":"^1.0.4","@vuedoc/md":"^3.0.0-beta2","@vuedoc/parser":"^3.0.0-beta2","babel-jest":"^26.3.0","eslint":"^7.7.0","eslint-config-airbnb":"^18.2.0","eslint-import-resolver-typescript":"^2.2.1","eslint-plugin-import":"^2.22.0","gimtoc":"^1.3.3","jest-serializer-vue":"^2.0.2","rollup":"^2.26.4","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript":"^1.0.1","ts-jest":"^26.2.0","tslib":"^2.0.1","typescript":"^4.2.4","typescript-eslint-parser":"^22.0.0","vue":"^2.6.11","vue-template-compiler":"^2.6.11"},"gitHead":"3c23ec3c294169d08a7ea94115cddf62040b5ed8","_id":"@formschema/native@2.0.0-beta.6","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","dist":{"integrity":"sha512-laXpuj1gYX9an/aBw6QJGyuAjYQZiRXkVQZkxo9AZrxUCpGX2wQA1v9eV+iCM6pvr7aF4hr9MzNyxYUaKrWsiQ==","shasum":"a0f87b6f13650c6c1539d432737f82bcf5899072","tarball":"https://registry.npmjs.org/@formschema/native/-/native-2.0.0-beta.6.tgz","fileCount":19,"unpackedSize":1168689,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2HvPCRA9TVsSAnZWagAAha4P/AjX5Lzh5Ctn5pllAoFj\n3p6f+v/eumcBWICHH7ePcQcdqU3tcvy/zh0E4dq6pRF3m0iMWRrR6LGtyuRD\nWGkXwNa1eUHK+mii5y2MJfB8fD8ER2ip1aR79uFlQlaXKdjujh8tKtG3S9i+\ndDfJ1CyupowRHeqvhX395rnwzg8JIH6fgsiB2PfIx3jbl5jGMx550uJP2D7V\ndn67OKQje6gbXKGO0R23dyEVNO0bp5MQwxNkebqBDd2at5jBW18N/e/iI1BS\n8U9jbAKADExZytkDd6zEBvbcXT2wlyL1kYnSzsSFOvYDMy5QH9jQZrDPOtIJ\n6ovUdPJpeaMiRUUt1bc3BCLp1WWVtfeHnQZhlwy3EwLqypr6zTdltEIehlBW\n0kK0exBVJy6qpWw1VjfBkAmWUhQYKxxV6IrJXyFoVU2RMyki3sVopJBuXSy2\nc+r6paKrrjm8/5nUlYF6u4uoiXF2uVN2UqUntDE1fMEDW8tYSgmwcNISaBIQ\nJNQiKsf6BTezucQjaZ7w4erL03Y9a2PIrLOHB4VG571NRdmkBVOqwjllnL60\nHfC+dnuxSpdCbXZxoFWVloFcKTL59L5HjLgGV1a4ifYolijeC1KEjZyTRF/l\nqv+hoYX8Y3vO49txmSZvKBiWZHmiH3aEEseaUkW+AnDRDM8G+ddNUsJDDwto\nRZ5C\r\n=xjDJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7J9zMKQoeEzAIH3uLqFiDXPownAOCLDJa0JsUiZLDsAIhAMu5hTiR714eC/6/iPovOacMuZ7/FMilYTvwHC7DAKeg"}]},"_npmUser":{"name":"demsking","email":"demsking@gmail.com"},"directories":{},"maintainers":[{"name":"demsking","email":"demsking@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/native_2.0.0-beta.6_1634829140855_0.8481846469972174"},"_hasShrinkwrap":false},"2.0.0-beta.7":{"name":"@formschema/native","version":"2.0.0-beta.7","description":"Vue component form based on JSON Schema","main":"dist/FormSchema.esm.min.js","browser":"dist/FormSchema.umd.min.js","types":"types/index.d.ts","scripts":{"playground":"cd playground && npm run serve","playground:install":"cd playground && npm i","test":"vue-cli-service test:unit","testdebug":"node --inspect-brk ./node_modules/@vue/cli-service/bin/vue-cli-service.js test:unit --runInBand","lint":"eslint elements src/**/* tests/**/*.ts tests/**/specs/**/*.ts","lint:fix":"eslint --fix elements src/**/* tests/**/*.ts tests/**/specs/**/*.ts","gimtoc":"gimtoc -f README.md -s 'Table of Contents' -o README.md","readme":"vuedoc.md -c && npm run gimtoc && git diff README.md","build":"rollup -c"},"repository":{"type":"git","url":"git+https://gitlab.com/formschema/native.git"},"keywords":["vue","form","json","schema","jsonschema"],"author":{"name":"Sébastien Demanou"},"license":"MIT","bugs":{"url":"https://gitlab.com/formschema/native/issues"},"homepage":"https://gitlab.com/formschema/native","devDependencies":{"@babel/core":"^7.11.1","@babel/preset-env":"^7.11.0","@types/jest":"^26.0.10","@types/node":"^15.0.1","@types/sinon":"^10.0.0","@typescript-eslint/eslint-plugin":"^3.9.1","@typescript-eslint/parser":"^3.9.1","@vue/cli-plugin-unit-jest":"^4.5.4","@vue/cli-service":"^4.5.4","@vue/test-utils":"^1.0.4","@vuedoc/md":"^3.0.0-beta2","@vuedoc/parser":"^3.0.0-beta2","babel-jest":"^26.3.0","eslint":"^7.7.0","eslint-config-airbnb":"^18.2.0","eslint-import-resolver-typescript":"^2.2.1","eslint-plugin-import":"^2.22.0","gimtoc":"^1.3.3","jest-serializer-vue":"^2.0.2","rollup":"^2.26.4","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript":"^1.0.1","ts-jest":"^26.2.0","tslib":"^2.0.1","typescript":"^4.2.4","typescript-eslint-parser":"^22.0.0","vue":"^2.6.11","vue-template-compiler":"^2.6.11"},"gitHead":"e13251caa0aae9b6efcd475d85f95138c244b2f4","_id":"@formschema/native@2.0.0-beta.7","_nodeVersion":"16.14.2","_npmVersion":"8.5.0","dist":{"integrity":"sha512-7LfhKpQ06j2frQb3a8TkCeDqrKIXhIO7kQpxPWkxetmiLGyXLMup4m765qnTBN57GuufqAQXe70C/7CQ9bfvYw==","shasum":"8333b0b6daf2f7d73b5c996d649be5d14a9fc694","tarball":"https://registry.npmjs.org/@formschema/native/-/native-2.0.0-beta.7.tgz","fileCount":21,"unpackedSize":1177551,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiPA8GACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmopxg//ZFW2OrfXSAc7N7safWe5hWMsq7mqalM6QJA01c9jGk47wuez\r\npgCtTNsmpyqyY0YKNoivqWHcvZUkVXs5or88GCMGYaTn+y1R3yKEMfxUp0gu\r\n4qjv3Jpi8+WOR4l4EHG67SclUwsZFM3FmTUWUhO22//QxnZFaCoCW1TAOK9h\r\nLeiy71uPlI5y1813fyY7HL+6Z7QUwp3eGm1sUa+tcLaOeLcRKaN46gemrEZZ\r\nzeZB8RBDNE9gJAJzChc75zmf2gOW8naug+/RzxsuR9+XHaGN+Wi4LaH7utff\r\ngJNKv5KBmt992TkLgpeZq3iwH+IllBzetCOXQCXiNAyG8PounjbByH2FOkv2\r\nh/vA9pgDOAIWp9HMe0e9zoTJotT9XrMnla3BTY7QilEtpbnXgO6E5ljAPesz\r\n8Kl9DAFqe8rKUW0ttx2teCXEk5Z5AGDR77YYI54wudW7SPLzrqG+/7NSRG2O\r\nJHpkSZ2BDjJCMj0Tvr+raMGi7gBCTDdYZcNsa3+17y915Gu8Re7iYO2JDkUm\r\nAxwJGDsAHL1IxvEhxrpWCbovMDHYstyeZ73URxFDwpWYop0J9HaFmQidcHgd\r\nmmmjKk1itJknTMKHrgTH617Szdp1ENA+O6E/HQINwyA6Ntd46sY0wpx0Nbuo\r\nEDLHLqD72CEP5NGio3vH9yC1nuuij/our8c=\r\n=RKHA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiMY/I3wsPuW+FxrzKe4Q8sRPudyFUBTI92GIQdf0M5gIgX6wIi4vhgZ63VPAvNe5r6fOc6BheL8/lfqV0DG0FrRk="}]},"_npmUser":{"name":"demsking","email":"demsking@gmail.com"},"directories":{},"maintainers":[{"name":"demsking","email":"demsking@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/native_2.0.0-beta.7_1648103174043_0.9002741828817731"},"_hasShrinkwrap":false}},"time":{"created":"2018-06-27T05:11:24.342Z","1.1.1":"2018-06-27T05:11:24.682Z","modified":"2022-04-05T11:54:44.518Z","2.0.0-alpha.2":"2018-08-07T20:49:13.500Z","2.0.0-beta.1":"2021-05-11T15:52:55.462Z","2.0.0-beta.2":"2021-07-18T18:29:56.251Z","2.0.0-beta.3":"2021-09-15T12:12:30.969Z","2.0.0-beta.4":"2021-10-12T04:37:32.335Z","2.0.0-beta.5":"2021-10-12T09:10:18.375Z","2.0.0-beta.6":"2021-10-21T15:12:21.074Z","2.0.0-beta.7":"2022-03-24T06:26:14.232Z"},"maintainers":[{"name":"demsking","email":"demsking@gmail.com"}],"description":"Vue component form based on JSON Schema","homepage":"https://gitlab.com/formschema/native","keywords":["vue","form","json","schema","jsonschema"],"repository":{"type":"git","url":"git+https://gitlab.com/formschema/native.git"},"author":{"name":"Sébastien Demanou"},"bugs":{"url":"https://gitlab.com/formschema/native/issues"},"license":"MIT","readme":"# FormSchema Native\n\nVue component form based on JSON Schema and Native HTML\n\n[![npm](https://img.shields.io/npm/v/@formschema/native.svg)](https://www.npmjs.com/package/@formschema/native) [![Build status](https://gitlab.com/formschema/native/badges/master/pipeline.svg)](https://gitlab.com/formschema/native/pipelines?ref=master) [![Test coverage](https://gitlab.com/formschema/native/badges/master/coverage.svg)](https://gitlab.com/formschema/native/-/jobs)\n\n## Table of Contents\n\n- [Install](#install)\n- [Demo](#demo)\n- [Usage](#usage)\n- [Features](#features)\n- [Supported Keywords](#supported-keywords)\n- [Irrelevant (ignored) Keywords](#irrelevant-ignored-keywords)\n- [FormSchema API](#formschema-api)\n  * [Props](#props)\n  * [Events](#events)\n  * [Methods](#methods)\n    + [form()](#form)\n- [Working with Async Schema](#working-with-async-schema)\n- [Working with Vue Router](#working-with-vue-router)\n- [Workind with JSON Schema $ref Pointers](#workind-with-json-schema-ref-pointers)\n- [Data Validation](#data-validation)\n  * [Native HTML5 Validation](#native-html5-validation)\n  * [Custom Validation API](#custom-validation-api)\n  * [Custom Validation with AJV](#custom-validation-with-ajv)\n  * [Disable Native HTML5 Validation](#disable-native-html5-validation)\n    + [Example: Disable Form Validation using `novalidate`](#example-disable-form-validation-using-novalidate)\n    + [Usecase: Implement Save, Cancel and Submit](#usecase-implement-save-cancel-and-submit)\n- [Labels Translation](#labels-translation)\n- [Render Form Elements](#render-form-elements)\n  * [Textarea](#textarea)\n  * [File Input](#file-input)\n  * [Hidden Input](#hidden-input)\n  * [Password Input](#password-input)\n  * [Multiple Checkbox](#multiple-checkbox)\n  * [Grouped Radio](#grouped-radio)\n  * [Select Input](#select-input)\n  * [Array Input](#array-input)\n  * [Regex Input](#regex-input)\n  * [Fieldset Element](#fieldset-element)\n- [Custom Form Elements](#custom-form-elements)\n  * [Elements API](#elements-api)\n  * [Custom Elements Example](#custom-elements-example)\n- [Descriptor Interface](#descriptor-interface)\n- [Usecases](#usecases)\n  * [Grouping fields](#grouping-fields)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Install\n\n```sh\nnpm install --save @formschema/native\n```\n\n## Demo\n\n- [Demo with ElementUI](https://gitlab.com/formschema/components/elementui)\n\n![formschema-demo-elementui](https://gitlab.com/formschema/components/elementui/raw/master/screenshot.png \"FormSchema Demo with ElementUI\")\n\n## Usage\n\n```html\n<template>\n  <FormSchema :schema=\"schema\" v-model=\"model\" @submit.prevent=\"submit\">\n    <button type=\"submit\">Subscribe</button>\n  </FormSchema>\n</template>\n\n<script>\n  import FormSchema from '@formschema/native'\n  import schema from './schema/newsletter-subscription.json'\n\n  export default {\n    data: () => ({\n      schema: schema,\n      model: {}\n    }),\n    methods: {\n      submit (e) {\n        // this.model contains the valid data according your JSON Schema.\n        // You can submit your model to the server here\n      }\n    },\n    components: { FormSchema }\n  }\n</script>\n```\n\n## Features\n\n- [Keywords for Applying Subschemas With Boolean Logic](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.7)\n- [Validation Keywords for Any Instance Type](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.1)<br>\n  FormSchema uses:\n  - HTML input `text` to render schema with `type: 'string'`\n  - HTML input `number` to render schema with `type: 'number' | 'integer'`\n  - HTML input `hidden` to render schema with `type: 'null'`\n  - HTML input `checkbox` to render schema with `type: 'boolean'`\n- [Validation Keywords for Numeric Instances (number and integer)](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.2)<br>\n  FormSchema parses keywords `maximum`, `minimum`, `exclusiveMaximum` and `exclusiveMinimum` to generate HTML attributes `max` and `min`.\n- [Validation Keywords for Strings](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.3)<br>\n  FormSchema parses keywords `maxLength`, `minLength`, `pattern` to generate HTML attributes `maxlength`, `minlength` and `pattern`.\n- [Validation Keywords for Arrays](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.4)\n- [Semantic Validation With \"format\"](https://json-schema.org/latest/json-schema-validation.html#rfc.section.7)<br>\n  FormSchema uses:\n  - HTML input `date` to render schema with `format: 'date'`\n  - HTML input `datetime-local` to render schema with `format: 'date-time'`\n  - HTML input `email` to render schema with `format: 'email' | 'idn-email'`\n  - HTML input `time` to render schema with `format: 'time'`\n  - HTML input `url` to render schema with `format: 'uri'`\n- [String-Encoding Non-JSON Data](https://json-schema.org/latest/json-schema-validation.html#rfc.section.8)\n- [Property dependencies and Schema dependencies](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.5.7)\n- [Schema Re-Use With \"definitions\"](https://json-schema.org/latest/json-schema-validation.html#rfc.section.9) (see [JSON Schema $ref Pointers](#json-schema-ref-pointers))\n- [Schema Annotations](https://json-schema.org/latest/json-schema-validation.html#rfc.section.10)\n\n## Supported Keywords\n\n- [type](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.1.1) is only supported string value. Array type definition is not supported.\n- [enum](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.1.2) is used to render multiple choices input\n- [maximum](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.2.2), [exclusiveMaximum](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.2.3), [minimum](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.2.4) and [exclusiveMinimum](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.2.5) are used to render numeric fields\n- [multipleOf](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.2.1) is used to render the input attribute `step`\n- [maxLength](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.3.1), [minLength](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.3.2), [pattern](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.3.3) and [const](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.1.3) are used to render string fields\n- [items](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.4.1), [additionalItems](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.4.2), [maxItems](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.4.3), [minItems](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.4.4) and [uniqueItems](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.4.5) are used to render array fields\n- [dependencies](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.5.7) is used to implement *Property dependencies* and *Schema dependencies*\n- [contentEncoding](https://json-schema.org/latest/json-schema-validation.html#rfc.section.8.3)\n- [contentMediaType](https://json-schema.org/latest/json-schema-validation.html#rfc.section.8.4)<br>\n  - When `contentMediaType` is equal to `text/*`, the HTML element `<textarea/>` is used for rendering\n  - When `contentMediaType` is not equal to `text/*`, the HTML element `<input/>` with attributes `{ type: file, accept: contentMediaType }` is used for rendering\n- [title](https://json-schema.org/latest/json-schema-validation.html#rfc.section.10.1) is used to render the input label\n- [description](https://json-schema.org/latest/json-schema-validation.html#rfc.section.10.1) is used to render the input description\n- [default](https://json-schema.org/latest/json-schema-validation.html#rfc.section.10.2) is used to define the default input value\n- [readOnly](https://json-schema.org/latest/json-schema-validation.html#rfc.section.10.3) is used to render a field as an read-only input\n\n## Irrelevant (ignored) Keywords\n\nSince FormSchema is just a form generator, some JSON Schema validation keywords\nare irrelevant:\n\n- [contains](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.4.6)\n- [maxProperties](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.5.1)\n- [minProperties](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.5.2)\n- [patternProperties](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.5.5)\n- [additionalProperties](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.5.6)\n- [propertyNames](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.5.8)\n- [not](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.7.4)\n- [writeOnly](https://json-schema.org/latest/json-schema-validation.html#rfc.section.10.3)\n- [examples](https://json-schema.org/latest/json-schema-validation.html#rfc.section.10.4)\n\n## FormSchema API\n\n### Props\n\n| Name                          | Type                                          | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | Default            |\n| ----------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |\n| `schema` *required*           | `Object`                                      | The input JSON Schema object.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |                    |\n| `v-model`                     | `any`                                         | Use this directive to create two-way data bindings with the component. It automatically picks the correct way to update the element based on the input type.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | `undefined`        |\n| `id`                          | `String`                                      | The id property of the Element interface represents the form's identifier, reflecting the id global attribute.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | `Random unique ID` |\n| `name`                        | `String`                                      | The name of the form. It must be unique among the forms in a document.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | `undefined`        |\n| `bracketed-object-input-name` | `Boolean`                                     | When set to `true` (default), checkbox inputs and nested object inputs will * automatically include brackets at the end of their names (e.g. `name=\"grouped-checkbox-fields[]\"`). Setting this property to `false`, disables this behaviour.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | `true`             |\n| `search`                      | `Boolean`                                     | Use this prop to enable `search` landmark role to identify a section of the page used to search the page, site, or collection of sites.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | `false`            |\n| `disabled`                    | `Boolean`                                     | Indicates whether the form elements are disabled or not.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | `false`            |\n| `components`                  | `ComponentsLib`                               | Use this prop to overwrite the default Native HTML Elements with custom components.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | `GLOBAL.Elements`  |\n| `descriptor`                  | [`DescriptorInstance`](#descriptor-interface) | UI Schema Descriptor to use for rendering.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | `{}`               |\n| `validator`                   | `Function`                                    | The validator function to use to validate data before to emit the `input` event.<br>**Syntax**<br><code class=\"language-typescript\">function validator(field: GenericField): Promise&lt;boolean&gt;</code><br>**Parameters**<br><ul><li>`field: GenericField` The field that requests validation</li><li>`field.id: string` The input ID attribute value</li><li>`field.name: string` The input name attribute value</li><li>`field.value: any` The input value for validation</li><li>`field.schema: JsonSchema` The JSON Schema object of the input</li><li>`field.required: boolean` Boolean indicating whether or not the field is mandatory</li><li>`field.hasChildren: boolean` Boolean indicating whether or not the field has children</li><li>`field.initialValue: any` The initial input value</li><li>`field.messages: Message[]` The input value for validation</li></ul>**Return value**<br>A promise that return `true` if validation success and `false` otherwise<br> | `null`             |\n\n### Events\n\n| Name    | Description                                                                                                         |\n| ------- | ------------------------------------------------------------------------------------------------------------------- |\n| `input` | Fired synchronously when the value of an element is changed.<br>**Arguments**<br><ul><li>**`value: any`**</li></ul> |\n\n### Methods\n\n#### form()\n\nGet the HTML form object reference.\n\n**Example**\n\n```html\n<template>\n  <FormSchema ref=\"formSchema\" :schema=\"schema\"/>\n</template>\n\n<script>\n  import FormSchema from '@formschema/native'\n\n  export default {\n    components: { FormSchema },\n    data: () => ({\n      schema: { type: 'string' }\n    }),\n    mounted() {\n      console.log(this.$refs.formSchema.form())\n    }\n  };\n</script>\n```\n\n**Syntax**\n\n```typescript\nform(): HTMLFormElement | VNode | undefined\n```\n\n**Return value**\n\nAn `HTMLFormElement` object or a `VNode` object describing the form element\nobject, or `undefined` for input JSON schema object.\n\n## Working with Async Schema\n\n```html\n<template>\n  <FormSchema :schema=\"schema\"/>\n</template>\n\n<script>\n  import axios from 'axios'\n  import FormSchema from '@formschema/native'\n\n  export default {\n    components: { FormSchema },\n    data: () => ({\n      schema: {}\n    }),\n    created() {\n      axios.get('/api/schema/subscription.json').then(({ data: schema }) => {\n        this.schema = schema\n      });\n    }\n  };\n</script>\n```\n\n## Working with Vue Router\n\nLoad an async schema on the `beforeRouterEnter` hook:\n\n```html\n<template>\n  <FormSchema :schema=\"schema\"/>\n</template>\n\n<script>\n  import axios from 'axios'\n  import FormSchema from '@formschema/native'\n\n  export default {\n    components: { FormSchema },\n    data: () => ({\n      schema: {}\n    }),\n    beforeRouterEnter(from, to, next) {\n      axios.get('/api/schema/subscription.json')\n        .then(({ data: schema }) => next((vm) => vm.setSchema(schema)))\n        .catch(next);\n    },\n    methods: {\n      setSchema(schema) {\n        this.schema = schema;\n      }\n    }\n  };\n</script>\n```\n\n## Workind with JSON Schema $ref Pointers\n\nTo load a JSON Schema with `$ref` pointers, you need to install an additional\ndependency to resolve them:\n\n```js\nimport $RefParser from 'json-schema-ref-parser';\nimport FormSchema from '@formschema/native';\nimport schemaWithPointers from './schema/with-pointers.json';\n\nexport default {\n  components: { FormSchema },\n  data: () => ({\n    schema: {}\n  }),\n  created () {\n    $RefParser.dereference(schemaWithPointers)\n      .then((schema) => {\n        // `schema` is the resolved schema that contains your entire JSON\n        // Schema, including referenced files, combined into a single object\n        this.schema = schema;\n      });\n  }\n}\n```\n\nSee [json-schema-ref-parser's documentation page](https://www.npmjs.com/package/json-schema-ref-parser)\nfor more details.\n\n## Workind with `allOf` keyword\n\nTo load a JSON Schema containing `allOf` keyword, you need to install an\nadditional dependency [json-schema-merge-allof](https://www.npmjs.com/package/json-schema-merge-allof)\nto help FormSchema to work properly:\n\n```js\nimport mergeAllOf from 'json-schema-merge-allof';\nimport FormSchema from '@formschema/native';\nimport schemaWithAllof from './schema/with-allof.json';\n\nexport default {\n  components: { FormSchema },\n  data: () => ({\n    schema: mergeAllOf(schemaWithAllof)\n  })\n}\n```\n\nSee [json-schema-merge-allof's documentation page](https://www.npmjs.com/package/json-schema-merge-allof)\nfor more details.\n\n## Data Validation\n\n### Native HTML5 Validation\n\nBy default, FormSchema uses basic HTML5 validation by applying validation\nattributes on inputs. This is enough for simple schema, but you will need to\ndedicated JSON Schema validator if you want to validate complex schema.\n\n### Custom Validation API\n\nFor custom validation, you need to provide a [validation function prop](#props).\n\nBellow the custom validation API:\n\n```ts\ntype MessageInfo = 0;\ntype MessageSuccess = 1;\ntype MessageWarining = 2;\ntype MessageError = 3;\ntype MessageType = MessageInfo | MessageSuccess | MessageWarining | MessageError;\n\ninterface Message {\n  type?: MessageType;\n  text: string;\n}\n\ninterface GenericField<TModel = any> {\n  readonly id: string;\n  readonly key: string;\n  readonly name: string;\n  readonly isRoot: boolean;\n  readonly schema: JsonSchema;\n  readonly required: boolean;\n  readonly hasChildren: boolean;\n  readonly initialValue: TModel;\n  readonly value: TModel;\n  readonly messages: Required<Message>[];\n  clear(): void; // clear field\n  reset(): void; // reset initial field value\n  addMessage(message: string, type: MessageType = MessageError): void;\n  clearMessages(recursive: boolean = false): void;\n}\n```\n\n### Custom Validation with AJV\n\nBellow a basic example with the popular [AJV](https://www.npmjs.com/package/ajv)\nvalidator:\n\n```html\n<template>\n  <FormSchema v-model=\"model\" v-bind=\"{ schema, validator }\" @submit.prevent=\"onSubmit\">\n    <button type=\"submit\">Submit</button>\n  </FormSchema>\n</template>\n\n<script>\n  import Ajv from 'ajv';\n  import FormSchema from '@formschema/native';\n\n  export default {\n    data: () => ({\n      schema: {\n        type: 'object',\n        properties: {\n          username: {\n            type: 'string',\n            minLength: 5\n          },\n          password: {\n            type: 'string',\n            minLength: 6\n          }\n        },\n        required: ['username', 'password']\n      },\n      model: {},\n      ajv: new Ajv({ allErrors: true })\n    }),\n    computed: {\n      validate() {\n        return this.ajv.compile(this.schema);\n      }\n    },\n    methods: {\n      onSubmit({ field }) {\n        if (field && this.validator(field)) {\n          // validation success, submit code here\n        }\n      },\n      validator(field) {\n        // Clear all messages\n        field.clearMessages(true);\n\n        if (!this.validate(field.value)) {\n          this.validate.errors.forEach(({ dataPath, message }) => {\n            const errorField = field.hasChildren\n              ? field.getField(dataPath) || field\n              : field;\n\n            /**\n             * Add a message to `errorField`.\n             * The first argument is the message string\n             * and the second one the message type:\n             *    0 - Message Info\n             *    1 - Message Success\n             *    2 - Message Warning\n             *    3 - Message Error\n             */\n            errorField.addMessage(message, 3);\n          });\n\n          // Return `false` to cancel the `input` event\n          return Promise.resolve(false);\n        }\n\n        // Return `true` to trigger the `input` event\n        return Promise.resolve(true);\n      }\n    },\n    components: { FormSchema }\n  };\n</script>\n```\n\n### Disable Native HTML5 Validation\n\nSince FormSchema use the native HTML Form element, attributes `novalidate` and\n`formvalidate` can be used to disable form validation as it described in the\n[W3C specification](https://dev.w3.org/html5/spec-LC/association-of-controls-and-forms.html#attr-fs-novalidate):\n\n> If present, they indicate that the form is not to be validated during\n  submission.<br>\n  The **no-validate state** of an element is true if the element is a\n  [submit button](https://dev.w3.org/html5/spec-LC/forms.html#concept-submit-button)\n  and the element's `formnovalidate` attribute is present, or if the element's\n  [form owner](https://dev.w3.org/html5/spec-LC/association-of-controls-and-forms.html#form-owner)'s\n  `novalidate` attribute is present, and `false` otherwise.\n\n#### Example: Disable Form Validation using `novalidate`\n\n```html\n<template>\n  <FormSchema v-model=\"model\" :schema=\"schema\" novalidate>\n    <button type=\"submit\">Submit</button>\n  </FormSchema>\n</template>\n```\n\n#### Usecase: Implement Save, Cancel and Submit\n\nDisable the form validation constraints could be useful when implementing a\n*save* feature to the form:\n\n- The user should be able to save their progress even though they haven't fully entered the data in the form\n- The user should be able to cancel the saved form data\n- The user should be able to submit form data with validation\n\n```html\n<template>\n  <FormSchema v-model=\"model\" :schema=\"schema\" action=\"/api/blog/post\" method=\"post\">\n    <input type=\"submit\" name=\"submit\" value=\"Submit\">\n    <input type=\"submit\" formnovalidate name=\"save\" value=\"Save\">\n    <input type=\"submit\" formnovalidate name=\"cancel\" value=\"Cancel\">\n  </FormSchema>\n</template>\n```\n\n## Labels Translation\n\nThe simple way to translate labels without to change the JSON Schema file is to\nuse a descriptor.\n\nHere an example with [Vue I18n](https://kazupon.github.io/vue-i18n):\n\n```html\n<template>\n  <FormSchema v-model=\"model\" :schema=\"schema\" :descriptor=\"descriptor\"/>\n</template>\n\n<script>\n  import FormSchema from '@formschema/native';\n\n  export default {\n    data: () => ({\n      schema: {\n        type: 'object',\n        properties: {\n          firstname: {\n            type: 'string'\n          },\n          lastname: {\n            type: 'string'\n          }\n        }\n      },\n      model: {}\n    }),\n    computed: {\n      descriptor() {\n        properties: {\n          firstname: {\n            label: this.$t('firstname.label'),\n            helper: this.$t('firstname.helper')\n          },\n          lastname: {\n            label: this.$t('lastname.label'),\n            helper: this.$t('lastname.helper')\n          }\n        }\n      }\n    },\n    // `i18n` option, setup locale info for component\n    // see https://kazupon.github.io/vue-i18n/guide/component.html\n    i18n: {\n      messages: {\n        en: {\n          firstname: {\n            label: 'First Name',\n            helper: 'Your First Name'\n          },\n          lastname: {\n            label: 'Last Name',\n            helper: 'Your Last Name'\n          }\n        },\n        fr: {\n          firstname: {\n            label: 'Prénom',\n            helper: 'Votre prénom'\n          },\n          lastname: {\n            label: 'Nom',\n            helper: 'Votre nom'\n          }\n        }\n      }\n    },\n    components: { FormSchema }\n  };\n</script>\n```\n\n## Render Form Elements\n\n### Textarea\n\nAdd a `text/*` media types to a string schema to render a Textarea element.\n\n**Example schema.json**\n\n```json\n{\n  \"type\": \"string\",\n  \"contentMediaType\": \"text/plain\"\n}\n```\n\nYou can also use a descriptor to force the Render to use a Textarea\nelement:\n\n**Example descriptor.json**\n\n```json\n{\n  \"kind\": \"textarea\"\n}\n```\n\n### File Input\n\nString schemas with media types not starting with `text/*` are automatically render as Input File elements.\n\n**Example schema.json**\n\n```json\n{\n  \"type\": \"string\",\n  \"contentMediaType\": \"image/png\"\n}\n```\n\n> There is a list of [MIME types officially registered by the IANA](http://www.iana.org/assignments/media-types/media-types.xhtml),\n  but the set of types supported will be application and operating system\n  dependent. Mozilla Developer Network also maintains a\n  [shorter list of MIME types that are important for the web](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types).\n\n### Hidden Input\n\nSchemas with descriptor's kind `hidden` are render as hidden input elements.\n\n**Example schema.json**\n\n```json\n{\n  \"type\": \"string\"\n}\n```\n\n**Example descriptor.json**\n\n```json\n{\n  \"kind\": \"hidden\"\n}\n```\n\n### Password Input\n\nString schemas with a descriptor's kind `password` are used to render Input\nPassword elements.\n\n**Example schema.json**\n\n```json\n{\n  \"type\": \"string\"\n}\n```\n\n**Example descriptor.json**\n\n```json\n{\n  \"kind\": \"password\"\n}\n```\n\n### Multiple Checkbox\n\nTo define multiple checkbox, use the [JSON Schema keyword `enum`](http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.23)\nand [uniqueItems](https://json-schema.org/latest/json-schema-validation.html#rfc.section.6.4.5):\n\n**Example schema.json**\n\n```json\n{\n  \"type\": \"array\",\n  \"uniqueItems\": true,\n  \"enum\": {\n    \"type\": \"string\",\n    \"enum\": [\n      \"daily\",\n      \"promotion\"\n    ]\n  }\n}\n```\n\n**Example descriptor.json**\n\n```json\n{\n  \"items\": {\n    \"daily\": {\n      \"label\": \"Receive daily updates\"\n    },\n    \"promotion\": {\n      \"label\": \"Receive promotion emails\"\n    }\n  }\n}\n```\n\n### Grouped Radio\n\nTo group radio elements, use the [JSON Schema keyword `enum`](http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.23)\nwith a `enum` descriptor:\n\n**Example schema.json**\n\n```json\n{\n  \"type\": \"string\",\n  \"enum\": [\n    \"monday\",\n    \"tuesday\",\n    \"wednesday\",\n    \"thursday\",\n    \"friday\",\n    \"saturday\",\n    \"sunday\"\n  ]\n}\n```\n\n**Example descriptor.json**\n\n```json\n{\n  \"kind\": \"enum\",\n  \"items\": {\n    \"monday\": { \"label\": \"Monday\" },\n    \"tuesday\": { \"label\": \"Tuesday\" },\n    \"wednesday\": { \"label\": \"Wednesday\" },\n    \"thursday\": { \"label\": \"Thursday\" },\n    \"friday\": { \"label\": \"Friday\" },\n    \"saturday\": { \"label\": \"Saturday\" },\n    \"sunday\": { \"label\": \"Sunday\" }\n  }\n}\n```\n\n### Select Input\n\nTo group HTML Select element, use the [JSON Schema keyword `enum`](http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.23)\nwith a `list` descriptor:\n\n**Example schema.json**\n\n```json\n{\n  \"type\": \"string\",\n  \"enum\": [\n    \"monday\",\n    \"tuesday\",\n    \"wednesday\",\n    \"thruday\",\n    \"friday\",\n    \"saturday\",\n    \"sunday\"\n  ]\n}\n```\n\n**Example descriptor.json**\n\n```json\n{\n  \"kind\": \"list\",\n  \"items\": {\n    \"monday\": { \"label\": \"Monday\" },\n    \"tuesday\": { \"label\": \"Tuesday\" },\n    \"wednesday\": { \"label\": \"Wednesday\" },\n    \"thursday\": { \"label\": \"Thursday\" },\n    \"friday\": { \"label\": \"Friday\" },\n    \"saturday\": { \"label\": \"Saturday\" },\n    \"sunday\": { \"label\": \"Sunday\" }\n  }\n}\n```\n\n### Array Input\n\nTo render a [array field](http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.4), define your schema like:\n\n**Example schema.json**\n\n```json\n{\n  \"type\": \"array\",\n  \"items\": {\n    \"type\": \"string\"\n  }\n}\n```\n\n`FormSchema` will render a text input by adding a button to add more inputs.\n\n### Regex Input\n\nTo render a [regex input](http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.3.3),\ndefine your schema like:\n\n**Example schema.json**\n\n```json\n{\n  \"type\": \"string\",\n  \"pattern\": \"[a-e]+\"\n}\n```\n\n### Fieldset Element\n\nFormSchema use a `<fieldset>` element to group inputs of a object JSON Schema:\n\n**Example schema.json**\n\n```json\n{\n  \"type\": \"object\",\n  \"properties\": {\n    \"firstname\": {\n      \"type\": \"string\"\n    },\n    \"lastname\": {\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\"firstname\"]\n}\n```\n\nUse descriptor to set labels and helpers. You can also change the order of\nproperties for the rendering:\n\n**Example descriptor.json**\n\n```json\n{\n  \"properties\": {\n    \"firstname\": {\n      \"label\": \"First Name\",\n      \"helper\": \"Your first name\"\n    },\n    \"lastname\": {\n      \"label\": \"Last Name\",\n      \"helper\": \"Your last name\"\n    }\n  },\n  \"order\": [\"lastname\", \"firstname\"]\n}\n```\n\n## Custom Form Elements\n\n### Elements API\n\n```ts\ntype SchemaType = 'object' | 'array' | 'string' | 'number' | 'integer' | 'boolean' | 'null';\ntype ScalarKind = 'string' | 'password' | 'number' | 'integer' | 'null' | 'boolean' | 'hidden' | 'textarea' | 'image' | 'file' | 'radio' | 'checkbox';\ntype ItemKind = 'enum' | 'list';\ntype FieldKind = SchemaType | ScalarKind | ItemKind;\ntype ComponentsType = 'form' | 'message' | 'button' | 'helper' | FieldKind;\ntype Component = string | VueComponent | VueAsyncComponent;\n\ninterface IComponents {\n  set(kind: ComponentsType, component: Component): void;\n  get(kind: ComponentsType, fallbackComponent?: Component): Component;\n}\n```\n\n### Custom Elements Example\n\nTo define custom elements, you need to use the `NativeComponents` class and the\n`components` prop:\n\n```js\n// MyCustomComponents.js\n\n// First, import the base class Components from `@formschema/native` package\nimport { NativeComponents } from '@formschema/native';\n\n// Then declare your custom components as functional components\nimport { InputElement } from '@/components/InputElement';\nimport { StateElement } from '@/components/StateElement';\nimport { ArrayElement } from '@/components/ArrayElement';\nimport { FieldsetElement } from '@/components/FieldsetElement';\nimport { ListElement } from '@/components/ListElement';\nimport { TextareaElement } from '@/components/TextareaElement';\nimport { MessageElement } from '@/components/Message';\n\n// Finaly, extend the NativeComponents class and define override it\nexport class MyCustomComponents extends NativeComponents {\n  constructor() {\n    super();\n\n    this.set('array', ArrayElement);\n    this.set('boolean', StateElement);\n    this.set('string', InputElement);\n    this.set('password', InputElement);\n    this.set('file', InputElement);\n    this.set('image', InputElement);\n    this.set('radio', StateElement);\n    this.set('checkbox', StateElement);\n    this.set('enum', FieldsetElement);\n    this.set('number', InputElement);\n    this.set('integer', InputElement);\n    this.set('object', FieldsetElement);\n    this.set('list', ListElement);\n    this.set('textarea', TextareaElement);\n    this.set('message', MessageElement);\n  }\n}\n```\n\n> See the file [NativeComponents.ts](https://gitlab.com/formschema/native/blob/master/src/lib/NativeComponents.ts) for an example.\n\n```html\n<template>\n  <FormSchema v-model=\"model\" :schema=\"schema\" :components=\"components\"/>\n</template>\n\n<script>\n  import FormSchema from '@formschema/native'\n  import { MyCustomComponents } from './MyCustomComponents'\n\n  export default {\n    data: () => ({\n      schema: { /* ... */ },\n      components: new MyCustomComponents(),\n      model: {}\n    }),\n    components: { FormSchema }\n  }\n</script>\n```\n\n### VueMaterial Example\n\n- Source: [elements/VueMaterial.js](https://gitlab.com/formschema/native/blob/master/elements/VueMaterial.js)\n\n```html\n<template>\n  <FormSchema v-model=\"model\" :schema=\"schema\" :components=\"components\"/>\n</template>\n\n<script>\n  import FormSchema, { NativeComponents } from '@formschema/native'\n  import createComponents from '@formschema/native/elements/VueMaterial'\n\n  export default {\n    data: () => ({\n      schema: { /* ... */ },\n      components: createComponents(NativeComponents),\n      model: {}\n    }),\n    components: { FormSchema }\n  }\n</script>\n```\n\n## Descriptor Interface\n\n```ts\ntype SchemaType = 'object' | 'array' | 'string' | 'number' | 'integer' | 'boolean' | 'null';\ntype ParserKind = SchemaType | 'enum' | 'list' | 'textarea' | 'image' | 'file' | 'password';\ntype ScalarKind = 'string' | 'password' | 'number' | 'integer' | 'null' | 'boolean' | 'hidden' | 'textarea' | 'image' | 'file' | 'radio' | 'checkbox';\ntype ItemKind = 'enum' | 'list';\ntype FieldKind = SchemaType | ScalarKind | ItemKind;\ntype ComponentsType = 'form' | 'message' | 'button' | 'helper' | FieldKind;\ntype Component = string | VueComponent | AsyncVueComponent;\n\ntype SetDescriptor = EnumDescriptor | ArrayDescriptor | ObjectDescriptor;\ntype Descriptor = ScalarDescriptor | SetDescriptor | ListDescriptor;\ntype DescriptorConstructor = (field: Field) => Descriptor;\ntype DescriptorInstance = Descriptor | DescriptorConstructor;\n\ninterface DescriptorDefinition<TKind extends FieldKind = FieldKind> {\n  kind?: TKind;\n  label?: string;\n  helper?: string;\n  visible?: boolean; // by default true. If false, component will be ignored on rendering\n  component?: Component;\n  attrs?: {\n    [attr: string]: unknown;\n  };\n  props?: {\n    [prop: string]: unknown;\n  };\n}\n\n/**\n * Describe scalar types like: string, password, number, integer,\n * boolean, null, hidden field, textarea element, image and file\n * inputs, radio and checkbox elements\n */\ninterface ScalarDescriptor extends DescriptorDefinition<ScalarKind> {\n}\n\n/**\n * Use to describe grouped object properties\n */\ninterface ObjectGroupDescriptor extends DescriptorDefinition {\n  properties: string[];\n}\n\n/**\n * Describe JSON Schema with type `object`\n */\ninterface ObjectDescriptor extends DescriptorDefinition {\n  layout?: Component; // default: 'fieldset'\n  properties?: {\n    [schemaProperty: string]: DescriptorInstance;\n  };\n  order?: string[];\n  groups?: {\n    [groupId: string]: ObjectGroupDescriptor;\n  };\n}\n\n/**\n * Describe JSON Schema with key `enum`\n */\ninterface ItemsDescriptor<TKind extends ItemKind> extends DescriptorDefinition<TKind> {\n  items?: {\n    [itemValue: string]: ScalarDescriptor;\n  };\n}\n\n/**\n * Describe HTML Radio Elements\n */\ninterface EnumDescriptor extends ItemsDescriptor<'enum'> {\n  layout?: Component; // default: 'fieldset'\n}\n\n/**\n * Describe HTML Select Element\n */\ninterface ListDescriptor extends ItemsDescriptor<'list'> {\n}\n\n/**\n * Describe buttons for array schema\n */\ninterface ButtonDescriptor<T extends string, A extends Function> extends Partial<ActionButton<A>> {\n  type: T;\n  label: string;\n  tooltip?: string;\n  visible?: boolean;\n  component?: Component;\n}\n\ntype ActionPushTrigger = () => void;\n\ntype PushButtonDescriptor = ButtonDescriptor<'push', ActionPushTrigger>;\ntype MoveUpButtonDescriptor = ButtonDescriptor<'moveUp', ActionPushTrigger>;\ntype MoveDownButtonDescriptor = ButtonDescriptor<'moveDown', ActionPushTrigger>;\ntype DeleteButtonDescriptor = ButtonDescriptor<'delete', ActionPushTrigger>;\ntype UnknownButtonDescriptor = ButtonDescriptor<string, ActionPushTrigger>;\n\ntype ArrayItemButton = MoveUpButtonDescriptor\n  | MoveDownButtonDescriptor\n  | DeleteButtonDescriptor\n  | UnknownButtonDescriptor;\n\n/**\n * Describe JSON Schema with type `array`\n */\ninterface ArrayDescriptor extends DescriptorDefinition {\n  layout?: Component; // default: 'fieldset'\n  items?: DescriptorInstance[] | DescriptorInstance;\n  pushButton: PushButtonDescriptor | null;\n  buttons: ArrayItemButton[];\n}\n```\n\n## Usecases\n\n### Grouping fields\n\nFormSchema can help you organize your form fields by grouping them.\nPlease check [ObjectDescriptor definition](#descriptor-interface).\n\n**Example schema.json**\n\n```json\n{\n  \"type\": \"object\",\n  \"properties\": {\n    \"lastname\": {\n      \"type\": \"string\"\n    },\n    \"firstname\": {\n      \"type\": \"string\"\n    },\n    \"city\": {\n      \"type\": \"string\"\n    }\n  }\n}\n```\n\n**Example descriptor.json**\n\n```json\n{\n  \"groups\": {\n    \"name\": {\n      \"label\": \"Your name\",\n      \"properties\": [\"firstname\", \"lastname\"]\n    },\n    \"location\": {\n      \"label\": \"Your location\",\n      \"properties\": [\"city\"]\n    }\n  }\n}\n```\n\n<details>\n  <summary>Result without grouping</summary>\n\n  ```html\n  <form id=\"id-form\">\n    <fieldset id=\"id-form-field\">\n      <div data-fs-kind=\"string\" data-fs-type=\"text\" data-fs-field=\"lastname\"><label for=\"id-form-field-lastname\"></label>\n        <div data-fs-input=\"text\"><input id=\"id-form-field-lastname\" type=\"text\" name=\"lastname\"></div>\n      </div>\n      <div data-fs-kind=\"string\" data-fs-type=\"text\" data-fs-field=\"firstname\"><label for=\"id-form-field-firstname\"></label>\n        <div data-fs-input=\"text\"><input id=\"id-form-field-firstname\" type=\"text\" name=\"firstname\"></div>\n      </div>\n      <div data-fs-kind=\"string\" data-fs-type=\"text\" data-fs-field=\"city\"><label for=\"id-form-field-city\"></label>\n        <div data-fs-input=\"text\"><input id=\"id-form-field-city\" type=\"text\" name=\"city\"></div>\n      </div>\n    </fieldset>\n  </form>\n  ```\n</details>\n\n<details>\n  <summary>Result with grouping</summary>\n\n  ```html\n  <form id=\"id-form\">\n    <fieldset id=\"id-form-field\">\n      <div data-fs-group=\"name\">\n        <div data-fs-group-label=\"name\">Your name</div>\n        <div data-fs-group-nodes=\"2\">\n          <div data-fs-kind=\"string\" data-fs-type=\"text\" data-fs-field=\"firstname\"><label for=\"id-form-field-firstname\"></label>\n            <div data-fs-input=\"text\"><input id=\"id-form-field-firstname\" type=\"text\" name=\"firstname\"></div>\n          </div>\n          <div data-fs-kind=\"string\" data-fs-type=\"text\" data-fs-field=\"lastname\"><label for=\"id-form-field-lastname\"></label>\n            <div data-fs-input=\"text\"><input id=\"id-form-field-lastname\" type=\"text\" name=\"lastname\"></div>\n          </div>\n        </div>\n      </div>\n      <div data-fs-group=\"location\">\n        <div data-fs-group-label=\"location\">Your location</div>\n        <div data-fs-group-nodes=\"1\">\n          <div data-fs-kind=\"string\" data-fs-type=\"text\" data-fs-field=\"city\"><label for=\"id-form-field-city\"></label>\n            <div data-fs-input=\"text\"><input id=\"id-form-field-city\" type=\"text\" name=\"city\"></div>\n          </div>\n        </div>\n      </div>\n    </fieldset>\n  </form>\n  ```\n</details>\n\n## Contributing\n\nPlease see [contributing guide](https://gitlab.com/formschema/native/blob/master/CONTRIBUTING.md).\n\n## License\n\nUnder the MIT license. See [LICENSE](https://gitlab.com/formschema/native/blob/master/LICENSE) file for more details.\n","readmeFilename":"README.md"}