{"_id":"@json-render/vue","_rev":"17-169ea15bbba3918789cb71d056c3aa07","name":"@json-render/vue","dist-tags":{"latest":"0.21.0"},"versions":{"0.9.1":{"name":"@json-render/vue","version":"0.9.1","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"license":"Apache-2.0","_id":"@json-render/vue@0.9.1","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/json-render#readme","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"7c41e33361b0739d57d429ae9c743b8081fe937e","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.9.1.tgz","fileCount":17,"integrity":"sha512-VUmv2be7cg5on9pu1oKgmRJDYufXD8k20eJykDuSUYIkw6mqX5A4ves+p0u9aFboYRgwvqqJxEf21QsjbYWiHw==","signatures":[{"sig":"MEQCIBdPKxx+MEaKphuFqEhEJhPQOiBIkSidGW+BQ47vrdaMAiAXhi4M3lmXb85LzM6ykJ3LUGMqt3SIRtyVT2/LawLt0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":478809},"main":"./dist/index.js","_from":"file:json-render-vue-0.9.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/5bc29994e7ededfb149e684ef728d2fa/json-render-vue-0.9.1.tgz","_integrity":"sha512-VUmv2be7cg5on9pu1oKgmRJDYufXD8k20eJykDuSUYIkw6mqX5A4ves+p0u9aFboYRgwvqqJxEf21QsjbYWiHw==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"10.8.2","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@json-render/core":"0.9.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue_0.9.1_1772034470565_0.5558906243456043","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@json-render/vue","version":"0.10.0","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"license":"Apache-2.0","_id":"@json-render/vue@0.10.0","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/json-render#readme","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"36461cf107e6a18468ae14690377408438007f9e","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.10.0.tgz","fileCount":17,"integrity":"sha512-O0HAKcHatXTyOIHaNAS+NN/UMi8uzSDv7lQ1lWl7+r9ppvXiHCVPYgPjg9boc1A424cGs87HjIDd52QaUp+1sQ==","signatures":[{"sig":"MEQCIEM7wtlBh7NPlETP4nAxhrzIn6q2Usu6xM7+m3JG5HX4AiAsCMurOb159GNt1yhjnWJI0IUVZ2wxFVjSxt7BGu6NCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":478811},"main":"./dist/index.js","_from":"file:json-render-vue-0.10.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/d7d64d57d402e2a49f3d3fb50924bbd0/json-render-vue-0.10.0.tgz","_integrity":"sha512-O0HAKcHatXTyOIHaNAS+NN/UMi8uzSDv7lQ1lWl7+r9ppvXiHCVPYgPjg9boc1A424cGs87HjIDd52QaUp+1sQ==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"10.8.2","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@json-render/core":"0.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue_0.10.0_1772038743999_0.37660623933819726","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@json-render/vue","version":"0.11.0","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"license":"Apache-2.0","_id":"@json-render/vue@0.11.0","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/json-render#readme","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"decde8f04b0ce8551ab81b1228262b3dba5f2c62","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.11.0.tgz","fileCount":17,"integrity":"sha512-k9lXHqKbFmHDX192ks/6k/XNXjHp66+Go/5nzY3naWUZgFKBVpXhXIvnT07eLSNtXd618o79noJoKhxUQsgA+A==","signatures":[{"sig":"MEQCIBqaz6p0YTc+7ZmEvihhXMwtiMF7JsG+16Oj90dxYvtrAiA2o8Obd6SPJ29Dx/2qJg/XCwK8syVSedKtB7FiQNsCoQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":478811},"main":"./dist/index.js","_from":"file:json-render-vue-0.11.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/cb0d5bdfbc7f43cc17eaa68658dc1df0/json-render-vue-0.11.0.tgz","_integrity":"sha512-k9lXHqKbFmHDX192ks/6k/XNXjHp66+Go/5nzY3naWUZgFKBVpXhXIvnT07eLSNtXd618o79noJoKhxUQsgA+A==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"10.8.2","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@json-render/core":"0.11.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue_0.11.0_1772220734101_0.07321283456408167","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@json-render/vue","version":"0.12.0","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"license":"Apache-2.0","_id":"@json-render/vue@0.12.0","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/json-render#readme","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"c552dcff055b3a26f99c36116bbbb8ea151b504a","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.12.0.tgz","fileCount":17,"integrity":"sha512-LMPkZIk2djZ9DoiPn4G4JNke29lOfsMjIch4scPHT/DVt6BoyYDQk6yQsCOPuiPPU9gspd9yCDkyFUOhqwrCMQ==","signatures":[{"sig":"MEUCIQCRVB+LZqA8b1dHcDprw38oaWeJ1Cscr0AVm11AUNdWEgIgLJvQQ0pPqQY+/JptGqGfku/7gVyv6XGMJKDdROgZkZE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":478811},"main":"./dist/index.js","_from":"file:json-render-vue-0.12.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/3c674c59b4d65a32c78b5c20f1e3b8b8/json-render-vue-0.12.0.tgz","_integrity":"sha512-LMPkZIk2djZ9DoiPn4G4JNke29lOfsMjIch4scPHT/DVt6BoyYDQk6yQsCOPuiPPU9gspd9yCDkyFUOhqwrCMQ==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"10.8.2","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@json-render/core":"0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue_0.12.0_1772849158679_0.09974707516877124","host":"s3://npm-registry-packages-npm-production"}},"0.12.1":{"name":"@json-render/vue","version":"0.12.1","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"license":"Apache-2.0","_id":"@json-render/vue@0.12.1","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://json-render.dev","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"6ae15e60c1f4eb93b1c45cbe58f1172329a05831","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.12.1.tgz","fileCount":17,"integrity":"sha512-Alj9mU2lJkHlWSpwuym2rYKHwy1yYsxdLIKtiWyQSS08XBPkQFrnTE3mmGLm/jP5BfFwdxwST0kmUTl3IPTzUA==","signatures":[{"sig":"MEYCIQDDh9GTuuFNvV8UCfjK4CT0kuni9mCYFBkQ9/4gr7txdAIhAMoyeQRz0PzgzpmrGx6+3gU9lyhw+CPteqlemMHdaatj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":478785},"main":"./dist/index.js","_from":"file:json-render-vue-0.12.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/e09c9078ebebb7c19d48ae261e8d6237/json-render-vue-0.12.1.tgz","_integrity":"sha512-Alj9mU2lJkHlWSpwuym2rYKHwy1yYsxdLIKtiWyQSS08XBPkQFrnTE3mmGLm/jP5BfFwdxwST0kmUTl3IPTzUA==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"10.8.2","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@json-render/core":"0.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue_0.12.1_1773213785460_0.3033116903831927","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@json-render/vue","version":"0.13.0","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"license":"Apache-2.0","_id":"@json-render/vue@0.13.0","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://json-render.dev","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"98a5f8612261975f6b164c120e219ad2b757d3fb","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.13.0.tgz","fileCount":17,"integrity":"sha512-T9alNbUe4IXcduEk2vs4lL3uAYQREiEsXUUWS0J0Vs1VM95hE69QxswSgV8XpojM/KjrrSEYE6NdGNWZy8auXA==","signatures":[{"sig":"MEUCICKjORDYCF/j+B18FpaiIddjZuQdl/koR894nhv0FTtdAiEAylMEb79lLxGlBJ0MaxIjkcIbLSBltKgo5HCbacHVePE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":478785},"main":"./dist/index.js","_from":"file:json-render-vue-0.13.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/5641cdb0fee121cb2aaa9bd51a2681d2/json-render-vue-0.13.0.tgz","_integrity":"sha512-T9alNbUe4IXcduEk2vs4lL3uAYQREiEsXUUWS0J0Vs1VM95hE69QxswSgV8XpojM/KjrrSEYE6NdGNWZy8auXA==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"10.8.2","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"@json-render/core":"0.13.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue_0.13.0_1773329098218_0.7615633851046002","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@json-render/vue","version":"0.14.0","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"license":"Apache-2.0","_id":"@json-render/vue@0.14.0","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://json-render.dev","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"ffa1b159d37d455fa5daf0294d82feee474962fd","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.14.0.tgz","fileCount":17,"integrity":"sha512-wSk7pYEasOm2d32ZgJBnsMmvahIATVdjRrHgpzUDKpfFIyEb/Vkf5Eg8ny/hP7W/g1ZNCkr6HA31bKKu8rJdkA==","signatures":[{"sig":"MEUCICM+WBF7Fm3z2CfpUCTGRMjr79V33EndAwehld6gglQJAiEAyNX08RNxX/RvgKY2AKbe4ChlfqQq1h396eP0CqWMzjQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":478785},"main":"./dist/index.js","_from":"file:json-render-vue-0.14.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/1775c043499c3c35d48564775140df2b/json-render-vue-0.14.0.tgz","_integrity":"sha512-wSk7pYEasOm2d32ZgJBnsMmvahIATVdjRrHgpzUDKpfFIyEb/Vkf5Eg8ny/hP7W/g1ZNCkr6HA31bKKu8rJdkA==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"10.8.2","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@json-render/core":"0.14.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue_0.14.0_1773439800191_0.7110055320444335","host":"s3://npm-registry-packages-npm-production"}},"0.14.1":{"name":"@json-render/vue","version":"0.14.1","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"license":"Apache-2.0","_id":"@json-render/vue@0.14.1","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://json-render.dev","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"2ce9a8022d106fb56662f71ad72d417dde8f7e28","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.14.1.tgz","fileCount":17,"integrity":"sha512-Ai+UQjLgKE22wwXovWSFs2lmrcuCR3OA1XyULE9FdH1ib9i4N8tXAGunJc6ECgA2RkVjnByzZZzO5MRy8okiDA==","signatures":[{"sig":"MEQCIFNUvE137hNsLkCROa6fJDAq5Sh1kwNaRLS0/5gT/MJjAiA4qqmzAEW1Gj8dlJuESWz9COWjr0arRokynzqIMvHQHA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":478785},"main":"./dist/index.js","_from":"file:json-render-vue-0.14.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/023db71003dc8cce6491ddc379017d05/json-render-vue-0.14.1.tgz","_integrity":"sha512-Ai+UQjLgKE22wwXovWSFs2lmrcuCR3OA1XyULE9FdH1ib9i4N8tXAGunJc6ECgA2RkVjnByzZZzO5MRy8okiDA==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"10.8.2","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"@json-render/core":"0.14.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue_0.14.1_1773787697834_0.7341086104655965","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@json-render/vue","version":"0.15.0","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"license":"Apache-2.0","_id":"@json-render/vue@0.15.0","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://json-render.dev","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"07c145b30d86e83fc395b24d11548567e71a1e14","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.15.0.tgz","fileCount":17,"integrity":"sha512-hAwPUIZzaIs1oZ0aPKrGla0w2KGbCd1REah7IAMkbCCFpLNZNsLET/CPnVVmh9M0ZXDP7WShqmAX6R2Y33ph2w==","signatures":[{"sig":"MEYCIQD1HPBgQ0QBoeuJ19ZBe0rhQoDlhrM786QSm/T0VMrnJQIhAJ1iK0GscqNGTKpBCwC7AYR0+Lm3sMqZpL2gaKblOU4f","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":478785},"main":"./dist/index.js","_from":"file:json-render-vue-0.15.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/e2ed708e0f44d67c9156cc1f8b70ed7d/json-render-vue-0.15.0.tgz","_integrity":"sha512-hAwPUIZzaIs1oZ0aPKrGla0w2KGbCd1REah7IAMkbCCFpLNZNsLET/CPnVVmh9M0ZXDP7WShqmAX6R2Y33ph2w==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"10.8.2","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"@json-render/core":"0.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue_0.15.0_1774290885158_0.7528097228117763","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@json-render/vue","version":"0.16.0","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"license":"Apache-2.0","_id":"@json-render/vue@0.16.0","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://json-render.dev","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"db533682306ba2e74069051b853521078fc7227b","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.16.0.tgz","fileCount":17,"integrity":"sha512-tVuwGqL5d+Wtr9tMn407dMClEht8k1tFSssOPlvwIfk1PuVXwW0TfS4v5PuAJNhXAADJUADAmZutBYSE/rKk/Q==","signatures":[{"sig":"MEYCIQCYOeBWl6q77sUu707ElpXCIT7B2DneJzZE+1coEYGyfAIhAI8NVer8zat4W8PzyBBR4HKBsBvFChe9Ce1vqkgdQOjV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":478785},"main":"./dist/index.js","_from":"file:json-render-vue-0.16.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/6ff07726f00fe78e2b5d3f1776b695d9/json-render-vue-0.16.0.tgz","_integrity":"sha512-tVuwGqL5d+Wtr9tMn407dMClEht8k1tFSssOPlvwIfk1PuVXwW0TfS4v5PuAJNhXAADJUADAmZutBYSE/rKk/Q==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"10.8.2","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"_nodeVersion":"20.20.1","dependencies":{"@json-render/core":"0.16.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue_0.16.0_1774660921718_0.18294612902240703","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@json-render/vue","version":"0.17.0","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"license":"Apache-2.0","_id":"@json-render/vue@0.17.0","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://json-render.dev","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"04bf2abbb4ec4d2a5890099fdb5091abb8c1b27d","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.17.0.tgz","fileCount":17,"integrity":"sha512-Z4VknigGCDJorJqvJk/T/w7rT8BE/ljxmkYDIVygpM9YjSiDlsGMFNgk5+gdpfqvVjZW2UPUgHIqHJjELwTlCA==","signatures":[{"sig":"MEQCIGRokA1+6Ik3pqOyaNivelYNxxGZRM7RG56Z6FbRDMDGAiALRI9KNZip7n09CBI7Y8ZJq6O4YY7IU2WdeIhalEqaBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":478785},"main":"./dist/index.js","_from":"file:json-render-vue-0.17.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/e50094300ca29bbc6e6b1853e780111b/json-render-vue-0.17.0.tgz","_integrity":"sha512-Z4VknigGCDJorJqvJk/T/w7rT8BE/ljxmkYDIVygpM9YjSiDlsGMFNgk5+gdpfqvVjZW2UPUgHIqHJjELwTlCA==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"10.9.7","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@json-render/core":"0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue_0.17.0_1775878885017_0.4512207685216354","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@json-render/vue","version":"0.18.0","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"license":"Apache-2.0","_id":"@json-render/vue@0.18.0","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://json-render.dev","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"f241acb1eae668e82f5e2475584181cb13d6042d","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.18.0.tgz","fileCount":17,"integrity":"sha512-mGWhEOnul10j4k6mZWYmXV/rRYWl6q4KI2Kl4NQmxZvp+vLb1qvYXv01BzxHi6k6ZfjeKBSj/5RBzRG9tkTCVg==","signatures":[{"sig":"MEQCICt03dT+aVE5Tio7UaQx8agLO+BtEF25Y6qneyuZndvUAiAlZuXVnjProb0WaoYsitIGks6uUnn6qsqyYAljSFuXqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":488326},"main":"./dist/index.js","_from":"file:json-render-vue-0.18.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/9bac825c9a0c9269a1633fdac29033b4/json-render-vue-0.18.0.tgz","_integrity":"sha512-mGWhEOnul10j4k6mZWYmXV/rRYWl6q4KI2Kl4NQmxZvp+vLb1qvYXv01BzxHi6k6ZfjeKBSj/5RBzRG9tkTCVg==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"10.9.7","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"@json-render/core":"0.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue_0.18.0_1776455179890_0.19116754785471524","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@json-render/vue","version":"0.19.0","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"license":"Apache-2.0","_id":"@json-render/vue@0.19.0","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@ctate.dev"}],"homepage":"https://json-render.dev","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"bda9e91650a8825a090b3043729c4733f45647a6","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.19.0.tgz","fileCount":17,"integrity":"sha512-WWvjQnsYJsHvc61Y18z3n0feFIGDrL00ltezh4d2FGs9yrpNXhw3bZVvAi1jB7yq8/rB7nC2VF/CVu+Qg56Wgg==","signatures":[{"sig":"MEUCIEpKr+XM148SAn7YpybV0yvBPFctm8ZP2lFn2yOw+VMnAiEAjlixO1x2YtFEqhzjGFebs30/en7gZzXkH1zxw+Kh+oI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@json-render%2fvue@0.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":498540},"main":"./dist/index.js","_from":"file:/tmp/json-render-vue-0.19.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:aee78e10-142a-4f3a-aa68-5056b81caaa4"}},"_resolved":"/tmp/json-render-vue-0.19.0.tgz","_integrity":"sha512-WWvjQnsYJsHvc61Y18z3n0feFIGDrL00ltezh4d2FGs9yrpNXhw3bZVvAi1jB7yq8/rB7nC2VF/CVu+Qg56Wgg==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"11.11.0","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"@json-render/core":"0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue_0.19.0_1778131503366_0.2638686609448293","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@json-render/vue","version":"0.20.0","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"license":"Apache-2.0","_id":"@json-render/vue@0.20.0","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@ctate.dev"}],"homepage":"https://json-render.dev","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"764ac0788b2f51fe375cde3ce6838bcbf28d01ea","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.20.0.tgz","fileCount":17,"integrity":"sha512-vASy4ygzrv/h2yxwiEUkX/HomYcJ30T3oYL1LMknvAdNu4bwljDHEkx0tLxvYiogmwDQfT9nfFI5UzpbpHtVEQ==","signatures":[{"sig":"MEQCIBJH6lsRpgf2SvrFCYHEsimO9izU0DMdqeNhf3vQemQkAiA+WPW5j3VSmyrC0/7DFhW+heLKPbwmrY66Kt+NGH/clA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@json-render%2fvue@0.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":504040},"main":"./dist/index.js","_from":"file:/tmp/json-render-vue-0.20.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:aee78e10-142a-4f3a-aa68-5056b81caaa4"}},"_resolved":"/tmp/json-render-vue-0.20.0.tgz","_integrity":"sha512-vASy4ygzrv/h2yxwiEUkX/HomYcJ30T3oYL1LMknvAdNu4bwljDHEkx0tLxvYiogmwDQfT9nfFI5UzpbpHtVEQ==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"11.17.0","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@json-render/core":"0.20.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vue_0.20.0_1786888537706_0.4098714741722693","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"_id":"@json-render/vue@0.21.0","bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"dist":{"shasum":"692bd3f44779699a5f65b52b2dfef763a1fccb39","tarball":"https://registry.npmjs.org/@json-render/vue/-/vue-0.21.0.tgz","fileCount":17,"integrity":"sha512-6tG6A5mYX4QP2lvh51R/Y83dTUWVHK0RTxK0YN5bRNpj2QrN3Qy/yDD/XNtjlAGdWeHjhLsuEILJVEM1VMWcQw==","signatures":[{"sig":"MEQCIBddQFwCU3gGl6J39pJfuApw2WaUANYte1f1RuEwC66rAiAXxNj2KP/l2UVsMSyntnIT/Pn/aedHrp2MWjhqR7IqpA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCFEi6BuFG+F0psPVeZ76xw5BYrGvxPkCuQ6WOw8TsCVQIhAJM9XvYf465LPcZXD3i3XvOO+UUqFLNurFFn1u4vAhhn"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@json-render%2fvue@0.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":518437},"main":"./dist/index.js","name":"@json-render/vue","_from":"file:/tmp/json-render-vue-0.21.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./schema":{"types":"./dist/schema.d.ts","import":"./dist/schema.mjs","require":"./dist/schema.js"}},"license":"Apache-2.0","scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"version":"0.21.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:aee78e10-142a-4f3a-aa68-5056b81caaa4"}},"homepage":"https://json-render.dev","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"_resolved":"/tmp/json-render-vue-0.21.0.tgz","_integrity":"sha512-6tG6A5mYX4QP2lvh51R/Y83dTUWVHK0RTxK0YN5bRNpj2QrN3Qy/yDD/XNtjlAGdWeHjhLsuEILJVEM1VMWcQw==","repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"_npmVersion":"11.19.0","description":"Vue renderer for @json-render/core. JSON becomes Vue components.","directories":{},"maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@ctate.dev"}],"_nodeVersion":"24.20.0","dependencies":{"@json-render/core":"0.21.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","tsup":"^8.0.2","typescript":"^5.4.5","@vue/test-utils":"^2.4.6","@internal/typescript-config":"0.0.0"},"peerDependencies":{"vue":"^3.5.0","zod":"^4.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vue_0.21.0_1789757684791_0.6389972294418291"}}},"time":{"created":"2026-02-25T15:47:50.487Z","modified":"2026-09-18T18:54:45.334Z","0.9.1":"2026-02-25T15:47:50.700Z","0.10.0":"2026-02-25T16:59:04.147Z","0.11.0":"2026-02-27T19:32:14.258Z","0.12.0":"2026-03-07T02:05:58.864Z","0.12.1":"2026-03-11T07:23:05.664Z","0.13.0":"2026-03-12T15:24:58.365Z","0.14.0":"2026-03-13T22:10:00.381Z","0.14.1":"2026-03-17T22:48:18.027Z","0.15.0":"2026-03-23T18:34:45.376Z","0.16.0":"2026-03-28T01:22:01.851Z","0.17.0":"2026-04-11T03:41:25.206Z","0.18.0":"2026-04-17T19:46:20.062Z","0.19.0":"2026-05-07T05:25:03.540Z","0.20.0":"2026-08-16T13:55:37.853Z","0.21.0":"2026-09-18T18:54:44.906Z"},"bugs":{"url":"https://github.com/vercel-labs/json-render/issues"},"license":"Apache-2.0","homepage":"https://json-render.dev","keywords":["json","ui","vue","ai","generative-ui","llm","renderer","streaming","components"],"repository":{"url":"git+https://github.com/vercel-labs/json-render.git","type":"git","directory":"packages/vue"},"description":"Vue renderer for @json-render/core. JSON becomes Vue components.","maintainers":[{"name":"matt.straka","email":"matt.j.straka@gmail.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"},{"name":"ctate","email":"chris@ctate.dev"}],"readme":"# @json-render/vue\n\nVue 3 renderer for json-render. Turn JSON specs into Vue components with data binding, visibility, and actions.\n\n## Installation\n\n```bash\nnpm install @json-render/vue @json-render/core zod\n```\n\nPeer dependencies: `vue ^3.5.0` and `zod ^4.0.0`.\n\n## Quick Start\n\n### 1. Create a Catalog\n\n```typescript\nimport { defineCatalog } from \"@json-render/core\";\nimport { schema } from \"@json-render/vue/schema\";\nimport { z } from \"zod\";\n\nexport const catalog = defineCatalog(schema, {\n  components: {\n    Card: {\n      props: z.object({\n        title: z.string(),\n        description: z.string().nullable(),\n      }),\n      slots: [\"default\", \"header\", \"footer\"],\n      description: \"A card container\",\n    },\n    Button: {\n      props: z.object({\n        label: z.string(),\n        action: z.string(),\n      }),\n      description: \"A clickable button\",\n    },\n    Input: {\n      props: z.object({\n        value: z.union([z.string(), z.record(z.unknown())]).nullable(),\n        label: z.string(),\n        placeholder: z.string().nullable(),\n      }),\n      description: \"Text input field with optional value binding\",\n    },\n  },\n  actions: {\n    submit: { description: \"Submit the form\" },\n    cancel: { description: \"Cancel and close\" },\n  },\n});\n```\n\n### 2. Define Component Implementations\n\nComponents are written using Vue's `h()` render function. The `slots` context uses Vue's native slot functions, so render a region with `slots.header?.()`. For convenience and React parity, `children` contains the already-rendered result of `slots.default?.()`.\n\n`defineRegistry` conditionally requires the `actions` field only when the catalog declares actions. Catalogs with `actions: {}` can omit it entirely.\n\n```typescript\nimport { h } from \"vue\";\nimport { defineRegistry } from \"@json-render/vue\";\nimport { catalog } from \"./catalog\";\n\nexport const { registry } = defineRegistry(catalog, {\n  components: {\n    Card: ({ props, slots }) =>\n      h(\"div\", { class: \"card\" }, [\n        h(\"header\", null, slots.header?.() ?? h(\"h3\", null, props.title)),\n        props.description ? h(\"p\", null, props.description) : null,\n        slots.default?.(),\n        h(\"footer\", null, slots.footer?.()),\n      ]),\n    Button: ({ props, emit }) =>\n      h(\"button\", { onClick: () => emit(\"press\") }, props.label),\n    Input: ({ props, bindings }) => {\n      // Use bindings?.value with a watcher to implement two-way binding\n      return h(\"label\", null, [\n        props.label,\n        h(\"input\", {\n          placeholder: props.placeholder ?? \"\",\n          value: props.value ?? \"\",\n        }),\n      ]);\n    },\n  },\n  // actions stubs are required when the catalog declares actions:\n  actions: {\n    submit: async () => {},\n    cancel: async () => {},\n  },\n});\n```\n\n> **Tip:** Use `useBoundProp(props.value, bindings?.value)` for two-way binding, or handle the `bindings` object directly in your component.\n\n### 3. Render Specs\n\n```vue\n<script setup lang=\"ts\">\nimport { StateProvider, ActionProvider, Renderer } from \"@json-render/vue\";\nimport { registry } from \"./registry\";\n\nconst spec = { /* ... */ };\n\nfunction handleSubmit(params) {\n  console.log(\"Submit\", params);\n}\n</script>\n\n<template>\n  <StateProvider :initial-state=\"{ form: { name: '' } }\">\n    <ActionProvider :handlers=\"{ submit: handleSubmit }\">\n      <Renderer :spec=\"spec\" :registry=\"registry\" />\n    </ActionProvider>\n  </StateProvider>\n</template>\n```\n\n## Spec Format\n\nThe Vue renderer uses the same flat element map format as the React renderer:\n\n```typescript\ninterface Spec {\n  root: string;                          // Key of the root element\n  elements: Record<string, UIElement>;   // Flat map of elements by key\n  state?: Record<string, unknown>;       // Optional initial state\n}\n\ninterface UIElement {\n  type: string;                          // Component name from catalog\n  props: Record<string, unknown>;        // Component props\n  children?: string[];                   // Keys of child elements\n  slots?: Record<string, string[]>;      // Named slots mapped to child keys\n  visible?: VisibilityCondition;         // Visibility condition\n}\n```\n\nExample spec:\n\n```json\n{\n  \"root\": \"card-1\",\n  \"elements\": {\n    \"card-1\": {\n      \"type\": \"Card\",\n      \"props\": { \"title\": \"Welcome\" },\n      \"children\": [\"input-1\", \"btn-1\"]\n    },\n    \"input-1\": {\n      \"type\": \"Input\",\n      \"props\": {\n        \"value\": { \"$bindState\": \"/form/name\" },\n        \"label\": \"Name\",\n        \"placeholder\": \"Enter name\"\n      }\n    },\n    \"btn-1\": {\n      \"type\": \"Button\",\n      \"props\": { \"label\": \"Submit\" },\n      \"children\": []\n    }\n  }\n}\n```\n\n### Named Slots\n\nUse `children` for the default slot and the element's top-level `slots` object for other slot names declared by the catalog:\n\n```typescript\nLayout: ({ children, slots }) =>\n  h(\"div\", null, [\n    h(\"header\", null, slots.header?.()),\n    h(\"main\", null, children),\n    h(\"footer\", null, slots.footer?.()),\n  ]),\n```\n\nThe corresponding spec maps element keys to each region:\n\n```json\n{\n  \"type\": \"Layout\",\n  \"props\": {},\n  \"children\": [\"main-content\"],\n  \"slots\": {\n    \"header\": [\"page-heading\"],\n    \"footer\": [\"page-actions\"]\n  }\n}\n```\n\nRegistry components receive Vue-native slot functions and render them with `slots.header?.()`, `slots.footer?.()`, and so on. `slots.default?.()` renders the spec's `children`; `children` is an alias for that rendered result. In the JSON spec, keep default content in `children` rather than adding a `default` entry to `slots`.\n\n## Providers\n\n### StateProvider\n\nShare data across components with JSON Pointer paths:\n\n```vue\n<StateProvider :initial-state=\"{ user: { name: 'John' } }\">\n  <!-- children -->\n</StateProvider>\n```\n\n```typescript\n// In composables:\nconst { state, get, set } = useStateStore();\nconst name = get(\"/user/name\");  // \"John\"\nset(\"/user/age\", 25);\n\n// state is a ShallowRef<StateModel> — access with state.value\nconsole.log(state.value);\n```\n\n#### External Store (Controlled Mode)\n\nPass a `StateStore` to bypass the internal state and wire json-render to any state management library (Pinia, VueUse, etc.):\n\n```typescript\nimport { createStateStore, type StateStore } from \"@json-render/vue\";\n\n// Option 1: Use the built-in store outside of Vue\nconst store = createStateStore({ count: 0 });\n```\n\n```vue\n<StateProvider :store=\"store\">\n  <!-- children -->\n</StateProvider>\n```\n\n```typescript\n// Mutate from anywhere — Vue will re-render automatically:\nstore.set(\"/count\", 1);\n\n// Option 2: Implement the StateStore interface with your own backend\nconst piniaStore: StateStore = {\n  get: (path) => getByPath(myStore.$state, path),\n  set: (path, value) => myStore.$patch(/* ... */),\n  update: (updates) => myStore.$patch(/* ... */),\n  getSnapshot: () => myStore.$state,\n  subscribe: (listener) => myStore.$subscribe(listener),\n};\n```\n\nWhen `store` is provided, `initialState` and `onStateChange` are ignored.\n\n### ActionProvider\n\nHandle actions from components:\n\n```vue\n<ActionProvider :handlers=\"{ submit: handleSubmit, cancel: handleCancel }\">\n  <!-- children -->\n</ActionProvider>\n```\n\n### VisibilityProvider\n\nControl element visibility based on data:\n\n```vue\n<VisibilityProvider>\n  <!-- children -->\n</VisibilityProvider>\n```\n\n```json\n{\n  \"type\": \"Alert\",\n  \"props\": { \"message\": \"Error!\" },\n  \"visible\": { \"$state\": \"/form/hasError\" }\n}\n```\n\n### ValidationProvider\n\nAdd field validation:\n\n```vue\n<ValidationProvider>\n  <!-- children -->\n</ValidationProvider>\n```\n\n```typescript\n// Use validation composable:\nconst { errors, validate } = useFieldValidation(\"/form/email\", {\n  checks: [\n    { type: \"required\", message: \"Email required\" },\n    { type: \"email\", message: \"Invalid email\" },\n  ],\n});\n```\n\n## Composables\n\n| Composable | Purpose |\n|------------|---------|\n| `useStateStore()` | Access state context (`state` as `ShallowRef`, `get`, `set`, `update`) |\n| `useStateValue(path)` | Get single value from state |\n| `useStateBinding(path)` | Two-way data binding (deprecated — use `$bindState` instead) |\n| `useIsVisible(condition)` | Check if a visibility condition is met |\n| `useActions()` | Access action context |\n| `useAction(binding)` | Get a single action dispatch function |\n| `useFieldValidation(path, config)` | Field validation state |\n\n> **Note:** `useStateStore().state` returns a `ShallowRef<StateModel>` — use `state.value` to access the underlying object. This differs from the React renderer where `state` is a plain object.\n\n## Visibility Conditions\n\n```typescript\n// Truthiness check\n{ \"$state\": \"/user/isAdmin\" }\n\n// Auth state (use state path)\n{ \"$state\": \"/auth/isSignedIn\" }\n\n// Comparisons (flat style)\n{ \"$state\": \"/status\", \"eq\": \"active\" }\n{ \"$state\": \"/count\", \"gt\": 10 }\n\n// Negation\n{ \"$state\": \"/maintenance\", \"not\": true }\n\n// Multiple conditions (implicit AND)\n[\n  { \"$state\": \"/feature/enabled\" },\n  { \"$state\": \"/maintenance\", \"not\": true }\n]\n\n// Always / never\ntrue   // always visible\nfalse  // never visible\n```\n\nTypeScript helpers from `@json-render/core`:\n\n```typescript\nimport { visibility } from \"@json-render/core\";\n\nvisibility.when(\"/path\")       // { $state: \"/path\" }\nvisibility.unless(\"/path\")     // { $state: \"/path\", not: true }\nvisibility.eq(\"/path\", val)    // { $state: \"/path\", eq: val }\nvisibility.neq(\"/path\", val)   // { $state: \"/path\", neq: val }\nvisibility.and(cond1, cond2)  // { $and: [cond1, cond2] }\nvisibility.always             // true\nvisibility.never              // false\n```\n\n## Dynamic Prop Expressions\n\nAny prop value can use data-driven expressions that resolve at render time. The renderer resolves these transparently before passing props to components.\n\n```json\n{\n  \"type\": \"Badge\",\n  \"props\": {\n    \"label\": { \"$state\": \"/user/role\" },\n    \"color\": {\n      \"$cond\": { \"$state\": \"/user/role\", \"eq\": \"admin\" },\n      \"$then\": \"red\",\n      \"$else\": \"gray\"\n    }\n  }\n}\n```\n\nFor two-way binding, use `{ \"$bindState\": \"/path\" }` on the natural value prop. Inside repeat scopes, use `{ \"$bindItem\": \"field\" }` instead. Components receive resolved `bindings` with the state path for each bound prop.\n\nSee [@json-render/core](../core/README.md) for full expression syntax.\n\n## Built-in Actions\n\nThe `setState`, `pushState`, `removeState`, and `validateForm` actions are built into the Vue schema and handled automatically by `ActionProvider`. They are injected into AI prompts without needing to be declared in your catalog's `actions`. They update the state model, which triggers re-evaluation of visibility conditions and dynamic prop expressions:\n\n```json\n{\n  \"type\": \"Button\",\n  \"props\": { \"label\": \"Switch Tab\" },\n  \"on\": {\n    \"press\": {\n      \"action\": \"setState\",\n      \"params\": { \"statePath\": \"/activeTab\", \"value\": \"settings\" }\n    }\n  },\n  \"children\": []\n}\n```\n\n## Component Props\n\nWhen using `defineRegistry`, components receive these props via their render function:\n\n```typescript\nimport type { Slots, VNode } from \"vue\";\n\ninterface ComponentContext<P> {\n  props: P;                          // Typed props from the catalog (expressions resolved)\n  children?: VNode | VNode[];        // Rendered children (for container components)\n  slots: Slots;                      // Vue-native slot functions\n  emit: (event: string) => void;     // Emit a named event (always defined)\n  on: (event: string) => EventHandle; // Get event handle with metadata\n  loading?: boolean;                 // Whether the parent is loading\n  bindings?: Record<string, string>; // State paths for $bindState/$bindItem expressions\n}\n\ninterface EventHandle {\n  emit: () => void;            // Fire the event\n  shouldPreventDefault: boolean; // Whether any binding requested preventDefault\n  bound: boolean;              // Whether any handler is bound\n}\n```\n\nUse `emit(\"press\")` for simple event firing. Use `on(\"click\")` when you need to check metadata like `shouldPreventDefault` or `bound`:\n\n```typescript\nLink: ({ props, on }) => {\n  const click = on(\"click\");\n  return h(\"a\", {\n    href: props.href,\n    onClick: (e: MouseEvent) => {\n      if (click.shouldPreventDefault) e.preventDefault();\n      click.emit();\n    },\n  }, props.label);\n},\n```\n\n### `BaseComponentProps`\n\nFor building reusable component libraries that are not tied to a specific catalog, use the catalog-agnostic `BaseComponentProps` type:\n\n```typescript\nimport type { BaseComponentProps } from \"@json-render/vue\";\n\nconst Card = ({ props, children }: BaseComponentProps<{ title?: string }>) =>\n  h(\"div\", null, [props.title, children]);\n```\n\n## Generate AI Prompts\n\n```typescript\nconst systemPrompt = catalog.prompt();\n// Returns detailed prompt with component/action descriptions\n```\n\n## Full Example\n\n```typescript\nimport { h } from \"vue\";\nimport { defineCatalog } from \"@json-render/core\";\nimport { schema } from \"@json-render/vue/schema\";\nimport { defineRegistry, Renderer, StateProvider } from \"@json-render/vue\";\nimport { z } from \"zod\";\n\nconst catalog = defineCatalog(schema, {\n  components: {\n    Greeting: {\n      props: z.object({ name: z.string() }),\n      description: \"Displays a greeting\",\n    },\n  },\n  actions: {},\n});\n\nconst { registry } = defineRegistry(catalog, {\n  components: {\n    Greeting: ({ props }) => h(\"h1\", null, `Hello, ${props.name}!`),\n  },\n});\n\nconst spec = {\n  root: \"greeting-1\",\n  elements: {\n    \"greeting-1\": {\n      type: \"Greeting\",\n      props: { name: \"World\" },\n      children: [],\n    },\n  },\n};\n\n// In your App.vue:\n// <StateProvider>\n//   <Renderer :spec=\"spec\" :registry=\"registry\" />\n// </StateProvider>\n```\n\n## Key Exports\n\n| Export | Purpose |\n|--------|---------|\n| `defineRegistry` | Create a type-safe component registry from a catalog |\n| `Renderer` | Render a spec using a registry |\n| `schema` | Element tree schema (includes built-in actions: `setState`, `pushState`, `removeState`) |\n| `useStateStore` | Access state context (`state` is `ShallowRef<StateModel>`) |\n| `useStateValue` | Get single value from state |\n| `useActions` | Access actions context |\n| `useAction` | Get a single action dispatch function |\n| `createStateStore` | Create a framework-agnostic in-memory `StateStore` |\n\n### Types\n\n| Export | Purpose |\n|--------|---------|\n| `ComponentContext` | Typed component render function context (catalog-aware) |\n| `BaseComponentProps` | Catalog-agnostic base type for reusable component libraries |\n| `EventHandle` | Event handle with `emit()`, `shouldPreventDefault`, `bound` |\n| `ActionProviderProps` | Props for `ActionProvider` |\n| `ValidationProviderProps` | Props for `ValidationProvider` |\n| `ComponentFn` | Component render function type |\n| `SetState` | State setter type |\n| `StateModel` | State model type |\n| `StateStore` | Interface for plugging in external state management |\n\n## Differences from `@json-render/react`\n\nNested lists can set `repeat.statePath` to `{ \"$item\": \"field\" }` to iterate an array on the enclosing repeat item.\n\n| API | React | Vue | Note |\n|-----|-------|-----|------|\n| `useStateStore().state` | `StateModel` | `ShallowRef<StateModel>` | Vue reactivity; use `state.value` |\n| `children` type | `React.ReactNode` | `VNode \\| VNode[]` | Platform-specific |\n| `useBoundProp` | exported | exported | Same API; returns `[value, setValue]` |\n| Streaming hooks | `useUIStream`, `useChatUI` | `useUIStream`, `useChatUI` | Same API; returns Vue `Ref` values |\n","readmeFilename":"README.md"}