{"_id":"@alis-build/a2ui-vuetify-renderer","_rev":"17-060e24facdc6969d1273404d7fbba30b","name":"@alis-build/a2ui-vuetify-renderer","dist-tags":{"latest":"0.4.1"},"versions":{"0.1.1":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.1.1","keywords":["a2ui","vuetify"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.1.1","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"015c8281754462f32cfa319b5f48f65ee1bc0982","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.1.1.tgz","fileCount":3,"integrity":"sha512-Kpfieh1Rly7HzveLKZ9Z7qWBnCmmgubtCf6bCjYHlB2uAWAW6CY3nu5AsFMzqAUaZeiq9i9zd12OuuaIJV+Yyw==","signatures":[{"sig":"MEUCIQCpev9f/8wvLEj6gjmGce01VT7fDt4EN/e225LVwarQLgIgHyRcW0fgqehKrDyh158UQ9svb0hjeNPkNGtOHqTjevQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32128},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","pnpm":{"overrides":{"vite":"^8.0.0-beta.13"},"supportedArchitectures":{"os":["linux","darwin","win32"],"cpu":["x64","arm64"]}},"type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"e29e5b0624365640e52c310c0ab1d163ae6446eb","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"10.8.2","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"20.20.1","dependencies":{"sass":"^1.98.0","@mdi/font":"^7.4.47"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.31","vite":"^8.0.3","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.0.4","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.8.0","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.30","vuetify":"^4.0.2","@a2ui/web_core":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.1.1_1774595252716_0.13768549162892185","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.1.2","keywords":["a2ui","vuetify"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.1.2","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"98d82cfa9054d0aff43a6fddfec48764bd2600b0","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.1.2.tgz","fileCount":49,"integrity":"sha512-R+9HbULtxtQfaRKdI1HQq8osGPLrlOe5IodUMVLmLvmLh2Ht3vHXLgcgg7yankRJmrvkrtsh/M9AwDJlrtnx/g==","signatures":[{"sig":"MEUCIQC9xw5gzZo9OdmMFmoZGrOhz5g/Od1YxbWB/OD8QQGD9QIgEW4JaBFcSFNHxeOVBCCB+uJfCZZwfhUQIzqRGOf6sMc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":988771},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","pnpm":{"overrides":{"vite":"^8.0.0-beta.13"},"supportedArchitectures":{"os":["linux","darwin","win32"],"cpu":["x64","arm64"]}},"type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"c58857294e3fa5ccf9aff732ffb27a7c731d83d6","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build","preview":"vite preview"},"_npmUser":{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"10.8.2","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"20.20.1","dependencies":{"sass":"^1.98.0","@mdi/font":"^7.4.47"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.31","vite":"^8.0.3","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.0.4","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.8.0","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.30","vuetify":"^4.0.2","@a2ui/web_core":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.1.2_1774598074188_0.18384862967808124","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.1.3","keywords":["a2ui","vuetify"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.1.3","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"aa7c723616f7a35abbb69cb2ce0bc1feeaf266fe","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.1.3.tgz","fileCount":58,"integrity":"sha512-B6SlsimSh+WjmI1K6+OX1bLUQ8g1wvKVTWMZsfrXYs5cgG/NA+qXtSo4JXpIDa1PFuTi7VdmXMAajgsmGRCAhg==","signatures":[{"sig":"MEUCIFHCBFzMgzEaTtd90KVbq0UNQoSdU4lGXnOxl3jdMGJjAiEAlgmHwLPQF6Lh7kpjVyIEykEFWIYyFspp5mCcCPKDMu0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1100323},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","pnpm":{"overrides":{"vite":"^8.0.0-beta.13"},"supportedArchitectures":{"os":["linux","darwin","win32"],"cpu":["x64","arm64"]}},"type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"7ba2b42a9cbb4307dc461677310e341d9d7efe59","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build","preview":"vite preview","generate:catalog":"node scripts/generate-catalog.mjs"},"_npmUser":{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"10.9.4","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"22.22.1","dependencies":{"sass":"^1.98.0","@mdi/font":"^7.4.47"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.31","vite":"^8.0.3","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.0.4","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.8.0","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.30","vuetify":"^4.0.2","@a2ui/web_core":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.1.3_1774857805203_0.5276191369686671","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.1.4","keywords":["a2ui","vuetify"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.1.4","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"fc670ae5edcfaf2d0043a5c4a7349ab82ef1ed91","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.1.4.tgz","fileCount":58,"integrity":"sha512-nR5gf89QyUhltrLCc9Gzyf7S0cb+qDDsqiWNLC8wVSxXWj89zNTx6ufoanlBW65wLWcxFM2WaA7ht8jpqNYT/A==","signatures":[{"sig":"MEUCIAvuXovZ1vxUNMGC6UOqmP0iJYkXkPR7kwqSRwlvLvlOAiEAlXsiFAvSywLcwIDx3tdhrbzhKqoZbVXQn6m/+ZKwDrg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1103349},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","pnpm":{"overrides":{"vite":"^8.0.0-beta.13"},"supportedArchitectures":{"os":["linux","darwin","win32"],"cpu":["x64","arm64"]}},"type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"a5b27af899223d37759281b567590ddb59785bc7","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build","preview":"vite preview","generate:catalog":"node scripts/generate-catalog.mjs"},"_npmUser":{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"10.9.4","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"22.22.1","dependencies":{"sass":"^1.98.0","@mdi/font":"^7.4.47"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.31","vite":"^8.0.3","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.0.4","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.8.0","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.30","vuetify":"^4.0.2","@a2ui/web_core":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.1.4_1774858843257_0.6593214050960963","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.1.6","keywords":["a2ui","vuetify"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.1.6","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"512554410816b541df42a68423d857f7ced9f4d9","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.1.6.tgz","fileCount":58,"integrity":"sha512-q2TFqAQpAGfIGwfKYvOO+UPnvagh36M8IhOT5gkLoP0UzhMpFyuRXUruko6/avmOI3KLsSzyncfd1RUHgVRZUA==","signatures":[{"sig":"MEUCIFUGxF4rRO0Z2mlxygwfiUWsX+hnmGkdNY/efc40qnNyAiEAhN75Mxfi8TJf3lO5G9iDHYqjPSBrh6cZZ++QKzoUCIg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1216332},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","pnpm":{"overrides":{"vite":"^8.0.0-beta.13"},"supportedArchitectures":{"os":["linux","darwin","win32"],"cpu":["x64","arm64"]}},"type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"079e3560454971d32c9504c758655797ecf0b0f1","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build","preview":"vite preview","generate:catalog":"node scripts/generate-catalog.mjs"},"_npmUser":{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"10.9.4","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"22.22.1","dependencies":{"sass":"^1.98.0","@mdi/font":"^7.4.47"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.31","vite":"^8.0.3","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.0.4","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.8.0","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.30","vuetify":"^4.0.2","@a2ui/web_core":"^0.8.0"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.1.6_1774946635405_0.23749981581212443","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.1.7","keywords":["a2ui","vuetify"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.1.7","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"d5e4651f7e4cc0591e289ded35912fbd02fddfd7","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.1.7.tgz","fileCount":58,"integrity":"sha512-ZumPKFMtP9m6LrFKLWiH4lNJllRvlrUfiyLUn8ENEk3wJfIZfK03J7o9daq3wAsBj7kbkHpdjhGjM9C5CYZNAw==","signatures":[{"sig":"MEQCICWxOR+GthrFJ3CB5SaRYdz7g0T73YIf+4xIXFDm867JAiB8Z/87n2L4hq643RsnkD11YvAd5DUmmKm7mTEpTCg0YQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1240223},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","pnpm":{"overrides":{"vite":"^8.0.0-beta.13"},"supportedArchitectures":{"os":["linux","darwin","win32"],"cpu":["x64","arm64"]}},"type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"f84524003de61315761cf6099e3c319351771632","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build","preview":"vite preview","generate:catalog":"node scripts/generate-catalog.mjs"},"_npmUser":{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"10.9.4","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"22.22.1","dependencies":{"sass":"^1.98.0","@mdi/font":"^7.4.47"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.31","vite":"^8.0.3","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.0.4","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.9.0","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.30","vuetify":"^4.0.2","@a2ui/web_core":"^0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.1.7_1774947498162_0.9279522482336957","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.1.8","keywords":["a2ui","vuetify"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.1.8","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"0074ea9d04a3d6bdaa633c7acf54257738e36a6b","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.1.8.tgz","fileCount":62,"integrity":"sha512-Y+dhp6mLeTxuMdg5o2fk0/MhJGVKMfF7LQorErqafgIIULxNpTU5wkakv8lPo+7yAZaCLTkfbHOm6GEa/y9V1Q==","signatures":[{"sig":"MEQCID8hAnleuwfWTj72+0mmuGfgPff4Vqxien84X/lHVXxuAiA61K4QhPursAqc6ND4ynWBqu4UBTFRdAT5K20VyaRsfA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1857779},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","pnpm":{"overrides":{"vite":"^8.0.0-beta.13"},"supportedArchitectures":{"os":["linux","darwin","win32"],"cpu":["x64","arm64"]}},"type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"75c2b78117689d793d0e9d2b94077ec7422ea9ba","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build","preview":"vite preview","generate:catalog":"node scripts/generate-catalog.mjs"},"_npmUser":{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"10.9.4","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.25.0","sass":"^1.98.0","@mdi/font":"^7.4.47"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.31","vite":"^8.0.3","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.0.4","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.9.0","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.30","vuetify":"^4.0.2","@a2ui/web_core":"^0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.1.8_1774950336602_0.6060293391267717","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.1.9","keywords":["a2ui","vuetify"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.1.9","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"edca8897a9be69e682414b55b747f6eb7723de53","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.1.9.tgz","fileCount":62,"integrity":"sha512-WD5a4HDOyrzbyU64jKR//3TU3UgHQppqLcLshOl/0cJfVA2yJAvD+mtmisofzuXKajfLfF5MriaTb67eCfZeaw==","signatures":[{"sig":"MEUCIQCC2R/cd/PRxQxrr9yKbEpK0L9WsfKD+vangsQ7FzYVpwIgWppHa/15Z8QhBzebjWitSJOOnVe7nqcWoSo83M7F3Y8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1912238},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","pnpm":{"overrides":{"vite":"^8.0.0-beta.13"},"supportedArchitectures":{"os":["linux","darwin","win32"],"cpu":["x64","arm64"]}},"type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"74da0ad29a6e9178432d196f25514966c18dde14","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build","format":"prettier --write \"src/**/*.{ts,vue,json}\" \"examples/**/*.{ts,vue,json}\" \"scripts/**/*.mjs\"","preview":"vite preview","generate:catalog":"node scripts/generate-catalog.mjs"},"_npmUser":{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"10.9.4","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^3.25.0","sass":"^1.98.0","@mdi/font":"^7.4.47","zod-to-json-schema":"^3.25.2"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.31","vite":"^8.0.3","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.0.4","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.9.0","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.30","vuetify":"^4.0.2","@a2ui/web_core":"^0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.1.9_1775038624033_0.9635948239227805","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.1.11","keywords":["a2ui","vuetify"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.1.11","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"dd87c535098ab24234bcf57be3ed2a20c3b61ce5","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.1.11.tgz","fileCount":63,"integrity":"sha512-PhRhMkR3eF93AMz0+Q7xcYQlAgScEoSDExS1zE9L+FyxtW14gotZ0BMpCRptfvWQiroU35EAObQBHqjcAl11fQ==","signatures":[{"sig":"MEYCIQC2nzrLI8KGLvXhuXwg6JF2MYnhuorP1I32yklY/syyzAIhAJUGLnJpofQHdgP4oI+XKW8Lefh2ve8ZsLxxt/skt02u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2322113},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","pnpm":{"overrides":{"vite":"^8.0.0-beta.13"},"supportedArchitectures":{"os":["linux","darwin","win32"],"cpu":["x64","arm64"]}},"type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"c6d738a11ea383c59f556849553a7aaaba16f292","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build","format":"prettier --write \"src/**/*.{ts,vue,json}\" \"examples/**/*.{ts,vue,json}\" \"scripts/**/*.ts\"","preview":"vite preview","generate:catalog":"tsx scripts/generate-catalog.ts"},"_npmUser":{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"10.9.7","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.25.0","sass":"^1.98.0","@mdi/font":"^7.4.47","zod-to-json-schema":"^3.25.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vue":"^3.5.31","vite":"^8.0.3","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.0.4","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.9.0","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.30","vuetify":"^4.0.2","@a2ui/web_core":"^0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.1.11_1775656788155_0.3962552049647281","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.1.12","keywords":["a2ui","vuetify"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.1.12","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"47544de5085095726581ef3f6c5b070c32f9b4ca","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.1.12.tgz","fileCount":106,"integrity":"sha512-d3KS97729rVswsfqauuHqXjbDu1cU+FhtAfDi5Vxxyl1MuDpjq4SCCuQ4CVtzKoeCUjQrXNbgo6vJmdxi2HDwg==","signatures":[{"sig":"MEUCIGzP1KKKgfdTbtMzFFKRyoubkcaIOTPhdZ3X6SHkWu/tAiEA9PunW0tOLGd7JNJj2z4FTMGlt1rZSGtsq0FW0LTrR0c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1952552},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","pnpm":{"overrides":{"vite":"^8.0.0-beta.13"},"supportedArchitectures":{"os":["linux","darwin","win32"],"cpu":["x64","arm64"]}},"type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"73a8d4dd0e8c4d5053198053d68ec1047577ca4c","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build","format":"prettier --write \"src/**/*.{ts,vue,json}\" \"examples/**/*.{ts,vue,json}\" \"scripts/**/*.ts\"","preview":"vite preview","generate:catalog":"tsx scripts/generate-catalog.ts"},"_npmUser":{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"10.9.7","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.25.0","sass":"^1.98.0","@mdi/font":"^7.4.47","zod-to-json-schema":"^3.25.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vue":"^3.5.31","vite":"^8.0.3","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.0.4","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.9.0","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.30","vuetify":"^4.0.2","@a2ui/web_core":"^0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.1.12_1775730757782_0.24411679274313802","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.1.13","keywords":["a2ui","vuetify"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.1.13","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"b5d4556a2d890fd107c27f46f07799fb3713620f","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.1.13.tgz","fileCount":105,"integrity":"sha512-BEDp1Ft3Qctd9jTxyHG6ZOPiJfYmDW2uqVE4OXP7P0GaTE43ZSEAJ0jwPX4E1Zqei1ERdHGe5osvoFWyrLb6Yw==","signatures":[{"sig":"MEYCIQCW2/zx735WcNkqd8Sc9HOzYYiqAqXZ3W3Se8u2iS/aBwIhAOK50BCzlU0/4HwxSpo0FxAd3aZ5sfvzq9NDVQjBKYrH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1636034},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","pnpm":{"overrides":{"vite":"^8.0.0-beta.13"},"supportedArchitectures":{"os":["linux","darwin","win32"],"cpu":["x64","arm64"]}},"type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"07f3c4b101d8cdf3f5728e2f132978571ff5b46f","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build","format":"prettier --write \"src/**/*.{ts,vue,json}\" \"examples/**/*.{ts,vue,json}\" \"scripts/**/*.ts\"","preview":"vite preview","generate:catalog":"tsx scripts/generate-catalog.ts"},"_npmUser":{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"10.9.7","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.25.0","sass":"^1.98.0","@mdi/font":"^7.4.47","zod-to-json-schema":"^3.25.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","vue":"^3.5.31","vite":"^8.0.3","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.0.4","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.9.0","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.30","vuetify":"^4.0.2","@a2ui/web_core":"^0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.1.13_1775809238202_0.8882614723307933","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.1.18","keywords":["a2ui","a2ui-renderer","vuetify","a2ui-vue","a2ui-vue-renderer"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.1.18","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"88aca9b1aca9340dabb4d7ebc5b82685078acdf5","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.1.18.tgz","fileCount":105,"integrity":"sha512-C5gQQec7GzDhkIpvF8evLosHHaQNGFZr0WWeh7WZiiLiOtDq6ckXWfFyooIG7FRJzDVbbAyAn5u0nIN654mhrg==","signatures":[{"sig":"MEYCIQDNH1cjaOagIfv4/D9zV6a/8lbjC3w5QsepIfMc2IAmEQIhAMcloBKYfrmNd6NpCgeFgS1KnKVzhz2VOo+5ydPHJfvq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alis-build%2fa2ui-vuetify-renderer@0.1.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1678387},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"14a75482e634ff578e5d0cf05aa0b0ba7ae6cf07","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build","format":"prettier --write \"src/**/*.{ts,vue,json}\" \"examples/**/*.{ts,vue,json}\" \"scripts/**/*.ts\"","preview":"vite preview","generate:catalog":"tsx scripts/generate-catalog.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1235a982-e7d0-4a27-a3ba-d11600eab599"}},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"11.13.0","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^3.25.76","sass":"^1.98.0","@mdi/font":"^7.4.47","zod-to-json-schema":"^3.25.2"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.5.2","devDependencies":{"tsx":"^4.19.0","vue":"^3.5.35","vite":"^8.0.16","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.1.1","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.10.0","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.35","vuetify":"^4.1.1","@a2ui/web_core":"^0.10.0"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.1.18_1781017048799_0.16324304614244167","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.2.0","keywords":["a2ui","a2ui-renderer","vuetify","a2ui-vue","a2ui-vue-renderer"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.2.0","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"ed6c2355337f665e77b9ea44c8147dd27bf173e6","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.2.0.tgz","fileCount":105,"integrity":"sha512-PK0t6AdxCC4GDlSk8kqeeeO4WnYHDkX5pd3srn86/AwTkJWv7A0fJeoUZ8dGK4r1QNMylO3+oM0sR1p/JPWoGQ==","signatures":[{"sig":"MEQCIAloudjvPDEaIu7AFiHXgjEFz8ztx7aWRlGTIRUXzPj4AiBvF/AgRs6JaKqzS4u4QVU9VK1cxHFBwG8LQFtV6Inpxg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alis-build%2fa2ui-vuetify-renderer@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1685127},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"640975ea2b249d86aee77eb62b70f4fa0d1a9e19","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build","format":"prettier --write \"src/**/*.{ts,vue,json}\" \"examples/**/*.{ts,vue,json}\" \"scripts/**/*.ts\"","preview":"vite preview","generate:catalog":"tsx scripts/generate-catalog.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1235a982-e7d0-4a27-a3ba-d11600eab599"}},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"11.13.0","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^3.25.76","sass":"^1.98.0","@mdi/font":"^7.4.47","zod-to-json-schema":"^3.25.2"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.5.2","devDependencies":{"tsx":"^4.19.0","vue":"^3.5.35","vite":"^8.0.16","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.1.1","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.10.0","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.35","vuetify":"^4.1.1","@a2ui/web_core":"^0.10.0"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.2.0_1781018660910_0.16372418840073588","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.3.0","keywords":["a2ui","a2ui-renderer","vuetify","a2ui-vue","a2ui-vue-renderer"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.3.0","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"jankrynauw","email":"jan@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"c6ee3d202a5349af956cdbb024d0e8423c1364ec","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.3.0.tgz","fileCount":107,"integrity":"sha512-0r97nNcJ8tvHpM4eAgjrF3XIKZ6V4hagw9K+2WBIMQenoRIeOXw+ZywhgzTfhwzKDnPziiR4ezK8rtSBsRLPCQ==","signatures":[{"sig":"MEQCIAfbmtUNXZSSL0Nk756nFI818zzMt/33moNVqqHm/qVFAiAu0HyP8sQ+CkBB/ZZK91AIEhI8yk/KZy+vlvpUZlcheg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alis-build%2fa2ui-vuetify-renderer@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":772527},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"38c25e6ca96938379000456ff21b9dcf66aec103","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build && tsx scripts/check-dist-externals.ts","format":"prettier --write \"src/**/*.{ts,vue,json}\" \"examples/**/*.{ts,vue,json}\" \"scripts/**/*.ts\"","preview":"vite preview","generate:catalog":"tsx scripts/generate-catalog.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1235a982-e7d0-4a27-a3ba-d11600eab599"}},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"11.19.0","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.25.76","sass":"^1.98.0","@mdi/font":"^7.4.47","zod-to-json-schema":"^3.25.2"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.5.2","devDependencies":{"tsx":"^4.19.0","vue":"^3.5.35","vite":"^8.0.16","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.1.1","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.10.7","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.35","vuetify":"^4.1.1","@a2ui/web_core":"^0.10.7"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.3.0_1788942608255_0.3611079908279302","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.4.0","keywords":["a2ui","a2ui-renderer","vuetify","a2ui-vue","a2ui-vue-renderer"],"author":{"name":"www.alisx.com"},"license":"Apache-2.0","_id":"@alis-build/a2ui-vuetify-renderer@0.4.0","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"jankrynauw","email":"jan@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"dist":{"shasum":"bbab4be54d66226fd0d213f2b0eb1e1fc5573edc","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.4.0.tgz","fileCount":107,"integrity":"sha512-rd+Rv5+5QNogbn3PPCCHGumWw5G1ErL/iT4UgDI0p0M0J7Gu0IX/GMLRVpZ55/ts8cyvPWpsG6CXkT2cpID1iA==","signatures":[{"sig":"MEUCIFcwb9+Im9/Kku6oiyzJWTfnN4mfEPzx0+xfyZfEKFcQAiEA8crAvdAcD2yX2ou3TzO6mg00GUIjtFLZGQ+DqsLKmQ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alis-build%2fa2ui-vuetify-renderer@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":719108},"main":"./dist/a2ui-vuetify-renderer.umd.cjs","type":"module","style":"./dist/a2ui-vuetify-renderer.css","types":"./dist/index.d.ts","module":"./dist/a2ui-vuetify-renderer.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs"},"./style.css":"./dist/a2ui-vuetify-renderer.css"},"gitHead":"75e2fba376e2f3479d9aeeb1b9fba7b036326054","scripts":{"dev":"vite","test":"vitest run","build":"vue-tsc -b && vite build && tsx scripts/check-dist-externals.ts","format":"prettier --write \"src/**/*.{ts,vue,json}\" \"examples/**/*.{ts,vue,json}\" \"scripts/**/*.ts\"","preview":"vite preview","generate:catalog":"tsx scripts/generate-catalog.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1235a982-e7d0-4a27-a3ba-d11600eab599"}},"repository":{"url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git","type":"git"},"_npmVersion":"11.19.0","description":"A2UI Vuetify Renderer","directories":{},"_nodeVersion":"24.20.0","dependencies":{"zod":"^3.25.76","sass":"^1.98.0","@mdi/font":"^7.4.47","zod-to-json-schema":"^3.25.2"},"_hasShrinkwrap":false,"packageManager":"pnpm@11.5.2","devDependencies":{"tsx":"^4.19.0","vue":"^3.5.35","vite":"^8.0.16","jsdom":"^28.1.0","eslint":"^9.39.4","vitest":"^4.1.1","vue-tsc":"^3.2.6","vuetify":"^4.1.1","prettier":"3.6.2","typescript":"~5.9.3","@types/node":"^24.12.0","@vue/tsconfig":"^0.8.1","@a2ui/web_core":"^0.10.7","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","eslint-plugin-vue":"^10.8.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","vite-plugin-vuetify":"^2.1.3","eslint-plugin-oxlint":"^1.57.0","@vitest/eslint-plugin":"^1.6.13","eslint-config-vuetify":"^4.4.0","eslint-plugin-playwright":"^2.10.1","vite-plugin-vue-devtools":"^8.1.1","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","prettier-plugin-organize-imports":"4.3.0"},"peerDependencies":{"vue":"^3.5.35","vuetify":"^4.1.1","@a2ui/web_core":"^0.10.7"},"_npmOperationalInternal":{"tmp":"tmp/a2ui-vuetify-renderer_0.4.0_1788943652286_0.3293894479388275","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@alis-build/a2ui-vuetify-renderer","version":"0.4.1","description":"A2UI Vuetify Renderer","author":{"name":"www.alisx.com"},"type":"module","main":"./dist/a2ui-vuetify-renderer.umd.cjs","module":"./dist/a2ui-vuetify-renderer.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/a2ui-vuetify-renderer.js","require":"./dist/a2ui-vuetify-renderer.umd.cjs","types":"./dist/index.d.ts"},"./style.css":"./dist/a2ui-vuetify-renderer.css","./catalog":"./catalog/vuetify-catalog.json"},"scripts":{"dev":"vite","build":"vue-tsc -b && vite build && tsx scripts/check-dist-externals.ts","preview":"vite preview","test":"vitest run","generate:catalog":"tsx scripts/generate-catalog.ts","format":"prettier --write \"src/**/*.{ts,vue,json}\" \"examples/**/*.{ts,vue,json}\" \"scripts/**/*.ts\""},"keywords":["a2ui","a2ui-renderer","vuetify","a2ui-vue","a2ui-vue-renderer"],"homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","repository":{"type":"git","url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git"},"bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"license":"Apache-2.0","dependencies":{"@mdi/font":"^7.4.47","sass":"^1.98.0","zod":"^3.25.76","zod-to-json-schema":"^3.25.2"},"peerDependencies":{"@a2ui/web_core":"^0.10.7","vue":"^3.5.35","vuetify":"^4.1.1"},"devDependencies":{"@a2ui/web_core":"^0.10.7","@types/node":"^24.12.0","@vitejs/plugin-vue":"^6.0.5","@vitest/coverage-v8":"4.1.0","@vitest/eslint-plugin":"^1.6.13","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","@vue/test-utils":"^2.4.6","@vue/tsconfig":"^0.8.1","eslint":"^9.39.4","eslint-config-vuetify":"^4.4.0","eslint-plugin-oxlint":"^1.57.0","eslint-plugin-playwright":"^2.10.1","eslint-plugin-vue":"^10.8.0","jsdom":"^28.1.0","prettier":"3.6.2","prettier-plugin-organize-imports":"4.3.0","tsx":"^4.19.0","typescript":"~5.9.3","vite":"^8.0.16","vite-plugin-dts":"^4.5.4","vite-plugin-vue-devtools":"^8.1.1","vite-plugin-vuetify":"^2.1.3","vitest":"^4.1.1","vue":"^3.5.35","vue-tsc":"^3.2.6","vuetify":"^4.1.1"},"style":"./dist/a2ui-vuetify-renderer.css","packageManager":"pnpm@11.5.2","gitHead":"66daa4de5046bcaa39fb65c2bcdc92f5fc5b00b7","_id":"@alis-build/a2ui-vuetify-renderer@0.4.1","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-xkm5K8MYer+7lOCaLs6SxVfKN0Wd35DEH8aSX4YCFbtYWsmCN1Jqys30vCChyp+tyA8Zm/mahfPD3+mDOX8noA==","shasum":"3deac08e06294dc8b791af8cd6fa458980aa341a","tarball":"https://registry.npmjs.org/@alis-build/a2ui-vuetify-renderer/-/a2ui-vuetify-renderer-0.4.1.tgz","fileCount":109,"unpackedSize":1243454,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@alis-build%2fa2ui-vuetify-renderer@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDaFU8tMCR8/XS+p9ewC91XLf0fAyqxlaiXrNJ8xe6grAiBduGXEFWt3LOcnYukEmwaruXtd0KQP82wpKZqxmRh9sA=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1235a982-e7d0-4a27-a3ba-d11600eab599"}},"directories":{},"maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"jankrynauw","email":"jan@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/a2ui-vuetify-renderer_0.4.1_1788944830497_0.7021078468327446"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-27T07:07:32.626Z","modified":"2026-09-09T09:07:11.307Z","0.1.1":"2026-03-27T07:07:32.844Z","0.1.2":"2026-03-27T07:54:34.369Z","0.1.3":"2026-03-30T08:03:25.399Z","0.1.4":"2026-03-30T08:20:43.475Z","0.1.6":"2026-03-31T08:43:55.619Z","0.1.7":"2026-03-31T08:58:18.327Z","0.1.8":"2026-03-31T09:45:36.767Z","0.1.9":"2026-04-01T10:17:04.245Z","0.1.11":"2026-04-08T13:59:48.343Z","0.1.12":"2026-04-09T10:32:37.979Z","0.1.13":"2026-04-10T08:20:38.379Z","0.1.18":"2026-06-09T14:57:29.056Z","0.2.0":"2026-06-09T15:24:21.145Z","0.3.0":"2026-09-09T08:30:08.399Z","0.4.0":"2026-09-09T08:47:32.425Z","0.4.1":"2026-09-09T09:07:10.613Z"},"bugs":{"url":"https://github.com/alis-exchange/a2ui-vuetify-renderer/issues"},"author":{"name":"www.alisx.com"},"license":"Apache-2.0","homepage":"https://github.com/alis-exchange/a2ui-vuetify-renderer","keywords":["a2ui","a2ui-renderer","vuetify","a2ui-vue","a2ui-vue-renderer"],"repository":{"type":"git","url":"git+https://github.com/alis-exchange/a2ui-vuetify-renderer.git"},"description":"A2UI Vuetify Renderer","maintainers":[{"name":"newtonnthiga","email":"newton@alisx.com"},{"name":"jankrynauw","email":"jan@alisx.com"},{"name":"daniel-alis-build","email":"daniel.van.niekerk@alisx.com"},{"name":"hi_ruan","email":"ruan@alisx.com"}],"readme":"# A2UI Vuetify Renderer\n\n[![npm](https://img.shields.io/npm/v/@alis-build/a2ui-vuetify-renderer)](https://www.npmjs.com/package/@alis-build/a2ui-vuetify-renderer)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n\nA Vue 3 rendering library for the [A2UI Protocol v0.9](https://a2ui.org/specification/v0.9-a2ui/). It translates A2UI JSON messages into interactive Vue interfaces backed by [Vuetify 4](https://vuetifyjs.com/) components.\n\nThe default component catalog extends the ideas of the [v0.9 basic catalog](https://a2ui.org/specification/v0.9-a2ui/) with additional Vuetify-backed types (for example `Tabs`, `Modal`, `Video`, `AudioPlayer`, `ChoicePicker`). Agents must use the same `catalogId` your app advertises—typically `CATALOG_ID` from this package—so `createSurface` and the renderer registry stay aligned.\n\n## How it works\n\nAn AI agent produces a stream of JSONL messages (`createSurface`, `updateComponents`, `updateDataModel`, `deleteSurface`). The renderer consumes these messages through [`@a2ui/web_core`](https://github.com/google/A2UI/tree/main/renderers/web_core), which handles protocol parsing, state management, and data binding. This library provides the Vue component layer that turns that state into a live Vuetify UI.\n\n```\nAgent → JSONL stream → @a2ui/web_core (MessageProcessor) → Vue reactivity bridge → Vuetify components\n```\n\n## Installation\n\n```bash\npnpm add @alis-build/a2ui-vuetify-renderer @a2ui/web_core vuetify vue\n```\n\nThe library ships ESM (`dist/a2ui-vuetify-renderer.js`), UMD (`dist/a2ui-vuetify-renderer.umd.cjs`), and TypeScript declarations (`dist/index.d.ts`).\n\n### Peer dependencies\n\n| Package          | Version   |\n| ---------------- | --------- |\n| `vue`            | `^3.5.35` |\n| `vuetify`        | `^4.1.1`  |\n| `@a2ui/web_core` | `^0.10.7` |\n\n### Catalog ID\n\n`CATALOG_ID` is the URI of the [Vuetify catalog JSON schema](https://github.com/alis-exchange/a2ui-vuetify-renderer/blob/main/catalog/vuetify-catalog.json) (`https://raw.githubusercontent.com/alis-exchange/a2ui-vuetify-renderer/main/catalog/vuetify-catalog.json`). That URI always resolves to the catalog on `main`, so it moves independently of the version you install; for a copy pinned to your installed version read `VUETIFY_CATALOG` or the `./catalog` subpath instead of fetching the URL. Pass it to `new Catalog(CATALOG_ID, …)`, `createSurface.catalogId`, and `a2uiClientCapabilities.supportedCatalogIds` so validation and rendering agree.\n\n## Setup\n\n### 1. Configure Vuetify in your host app\n\nThe renderer expects Vuetify to be installed as a Vue plugin. You also need `vite-plugin-vuetify` for component auto-imports.\n\n**`vite.config.ts`**\n\n```typescript\nimport { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport vuetify from 'vite-plugin-vuetify'\n\nexport default defineConfig({\n  plugins: [vue(), vuetify({ autoImport: true })],\n})\n```\n\n**`main.ts`**\n\n```typescript\nimport { createApp } from 'vue'\nimport App from './App.vue'\nimport { createVuetify } from 'vuetify'\nimport 'vuetify/styles'\nimport '@mdi/font/css/materialdesignicons.css'\n\nconst vuetify = createVuetify()\nconst app = createApp(App)\napp.use(vuetify)\napp.mount('#app')\n```\n\n### 2. (Optional) Install the renderer plugin\n\nThe `A2UiVueRenderer` plugin globally registers `<A2uiProvider>` and `<A2uiComponentNode>` and populates the default component registry. You can also pass custom component overrides.\n\n```typescript\nimport { A2UiVueRenderer } from '@alis-build/a2ui-vuetify-renderer'\n\napp.use(A2UiVueRenderer, {\n  components: {\n    GoogleMap: MyCustomMapComponent, // extend the catalog\n  },\n})\n```\n\nIf you skip the plugin, import `A2UIProvider`, `ComponentNode`, and `registerDefaultComponents`, then call `registerDefaultComponents()` once during app setup so `defaultRegistry` is populated (the plugin does this inside `install`).\n\n## Quick start\n\n```vue\n<script setup lang=\"ts\">\n  import { ref, onMounted } from 'vue'\n  import { MessageProcessor, Catalog, A2uiValidationError } from '@a2ui/web_core/v0_9'\n  import type { A2uiClientAction } from '@a2ui/web_core/v0_9'\n  import {\n    A2UIProvider,\n    ComponentNode,\n    CATALOG_ID,\n    VUETIFY_COMPONENTS,\n    VUETIFY_THEME_SCHEMA,\n    createVuetifyFunctions,\n    registerDefaultComponents,\n  } from '@alis-build/a2ui-vuetify-renderer'\n\n  registerDefaultComponents()\n\n  const handleAction = (action: A2uiClientAction) => {\n    console.log('Action from A2UI:', action)\n  }\n  const handleError = (error: unknown) => {\n    console.error('A2UI surface error:', error) // unknown component types, cyclic references, expression failures\n  }\n\n  // createVuetifyFunctions({ locale }) gives locale-aware formatNumber / formatCurrency / pluralize\n  const catalog = new Catalog(CATALOG_ID, VUETIFY_COMPONENTS, createVuetifyFunctions({ locale: navigator.language }), VUETIFY_THEME_SCHEMA)\n  // Keep web_core objects out of Vue's reactivity: a plain const, markRaw() or shallowRef(). Never ref()/reactive():\n  // calls made through the deep proxy bypass web_core's signals and the UI stops updating.\n  const processor = new MessageProcessor([catalog], handleAction, { version: 'v0.9' })\n  const surfaceId = 'demo-surface'\n  const ready = ref(false)\n\n  onMounted(() => {\n    processor.processMessages([\n      {\n        version: 'v0.9',\n        createSurface: {\n          surfaceId,\n          catalogId: CATALOG_ID,\n          theme: { primaryColor: '#6200EE' },\n        },\n      },\n    ])\n\n    try {\n      processor.processMessages([\n        {\n          version: 'v0.9',\n          updateComponents: {\n            surfaceId,\n            components: [\n              { id: 'root', component: 'Column', children: ['heading', 'greet-btn'] },\n              { id: 'heading', component: 'Text', text: 'Hello from A2UI!', variant: 'h4' },\n              { id: 'greet-btn', component: 'Button', variant: 'primary', label: 'Click Me', action: { event: { name: 'greet' } } },\n            ],\n          },\n        },\n      ])\n    } catch (e) {\n      // web_core rejects the whole message when any component fails the catalog schema\n      if (e instanceof A2uiValidationError) console.error(e.message, e.details)\n      throw e\n    }\n\n    ready.value = true\n  })\n</script>\n\n<template>\n  <v-app>\n    <v-main class=\"pa-4\">\n      <A2UIProvider\n        v-if=\"ready\"\n        :processor=\"processor\"\n        :surface-id=\"surfaceId\"\n        :on-action=\"handleAction\"\n        :on-error=\"handleError\"\n      >\n        <ComponentNode id=\"root\" />\n      </A2UIProvider>\n    </v-main>\n  </v-app>\n</template>\n```\n\n## Architecture\n\n### `A2UIProvider` props\n\n| Prop            | Type                       | Default         | Purpose                                                                                                                         |\n| --------------- | -------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| `processor`     | `MessageProcessor`         | required        | Owns the surface, component and data models. Pass the plain instance (or `markRaw` / `shallowRef`), never a `ref()`/`reactive()` proxy |\n| `surface-id`    | `string`                   | required        | The surface to render                                                                                                           |\n| `on-action`     | `(action) => void`         | –               | Fallback handler for component actions                                                                                          |\n| `on-error`      | `(error) => void`          | `console.error` | Surface errors reported by web_core (`UNKNOWN_COMPONENT_TYPE`, `CYCLIC_REFERENCE`, expression failures)                          |\n| `node-resolver` | `boolean`                  | `true`          | Render from web_core's live node tree. `false` is the static legacy path, which only reflects the surface as of the first paint |\n\n### Core modules\n\n| Module                     | Role                                                                                                                                                                                                                                                                                              |\n| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`A2UIProvider`**         | Wraps a surface. Provides processor, surface ID, and action callback via `provide/inject`. Owns one web_core `NodeResolver` for the surface (created when the surface appears, disposed when it is deleted or the provider unmounts) and forwards surface errors to `onError`, including a resolver that fails to build, which falls back to the static path instead of taking the provider down. Surface create/delete events are reconciled against the model's own state, since web_core delivers them asynchronously and a stale one would otherwise tear down a live surface. Bridges A2UI theme colors (`primaryColor`, `errorColor`, etc.) into a dynamic Vuetify theme via `v-theme-provider`.                        |\n| **`ComponentNode`**        | Recursive renderer. `id=\"root\"` picks the resolver's root node; any other id is looked up among the live child nodes in the parent's resolved props. Mirrors the node's props signal into the context (`nodeProps`) and scopes descendants to the node's data path, so `resolveValue` is reactive. Children that have not arrived render as `[pending: id]` and are swapped in place. Types the catalog does not know are reported through `onError` and rendered from the registry without live bindings. Supports a `path` prop for scoped data context on the legacy path. |\n| **`ComponentRegistry`**    | A `Map<string, Component>` that maps A2UI type strings (e.g. `\"Button\"`) to Vue components. Exposes `register()`, `registerAll()`, `get()`, and `has()`. The singleton `defaultRegistry` is pre-populated by `registerDefaultComponents()`.                                                       |\n| **`useA2UI()`**            | Composable that injects the provider context. Returns `resolveValue<V>(value)`, `resolveDynamicChildren`, `sendAction`, `dispatchNodeAction`, `setData`, `surfaceId`, `dataContext`, and `dataContextPath`. `resolveValue` accepts an A2UI `DynamicValue \\| undefined` (from `@a2ui/web_core/v0_9`) and resolves via `DataContext.resolveDynamicValue<V>()`; pass a type argument (e.g. `resolveValue<string>(…)`) so callers get a typed result. `dispatchNodeAction` expects a `ComponentModel`. Uses `SurfaceModel.dispatchAction()` for schema-validated action payloads. |\n| **`useChecks()`**          | Composable bridging a node's `checks` to Vue: `rules` for Vuetify inputs, plus `isValid` / `validationErrors` as reported by web_core's binder in node mode (Button and IconButton gate on them, Slider and DatePicker display them). `errorMessages(value)` falls back to the rules whenever the binder reports no failures (the legacy path, and node-mode checks the binder evaluates as passing). |\n| **`useDynamicProps()`**    | Composable for custom catalog components: given a node (ref, getter, or plain object), returns a computed ref of properties with each value passed through `resolveValue` (same generic resolver as `useA2UI`). Resolved values are still typed as `Record<string, any>` at the top level; use `resolveValue<V>()` directly when you need strong typing per field.                                                                                                        |\n| **`getCatalogSchema()`**   | Returns a deep-cloned JSON Schema for the Vuetify catalog, merging in stub entries for any extra components registered on a `ComponentRegistry` under the same `catalogId` (useful for agents or tooling). Accepts an optional `{ filter }` predicate to narrow the returned components — see **Filtering the catalog schema** below. |\n| **`VUETIFY_CATALOG`**      | The generated catalog document itself, inlined by the bundler at no extra cost. Use it when you want the schema as published (feeding an agent library, emitting it from a build step, inspecting the declared components and functions); use `getCatalogSchema()` instead when runtime-registered components must be merged in. It is the module's shared instance, so treat it as read-only. Outside a bundler the same file ships at the `./catalog` subpath: `require('@alis-build/a2ui-vuetify-renderer/catalog')`. |\n| **`catalogFilters`**       | Pre-built filter predicates for `getCatalogSchema`: `catalogFilters.customOnly` (non-built-in components only), `catalogFilters.only(...names)` (include-list), `catalogFilters.exclude(...names)` (exclude-list). |\n\nForm components map A2UI `checks` (`[{ condition: DynamicBoolean, message }]`) to Vuetify validation rules via `createVuetifyRules(checks, resolveValue)` in `src/utils/validation.ts`. Each `condition` (a literal, `{ path }` or `{ call, args }`) is resolved through the surface `DataContext` every time a rule runs, so it sees the live data model.\n\n### Data flow\n\n1. **Messages in** — `MessageProcessor.processMessages()` parses JSONL and updates `SurfaceModel` state (components, data model, theme). Since `@a2ui/web_core` 0.10.6 every component in an `updateComponents` message is validated against the catalog's Zod schema before any state changes: one invalid component throws `A2uiValidationError` (`code: 'VALIDATION_ERROR'`, `details` = Zod issues) and rejects the whole message. All Vuetify schemas are strict, so unknown properties are errors; unknown component *types* are skipped. Catch the error in your transport layer (`formatZodIssue` from web_core renders single issues).\n2. **Reactivity bridge** — `A2UIProvider` owns a web_core `NodeResolver`; each `ComponentNode` mirrors its node's `props` signal into a `shallowRef` that `resolveValue` and `resolveDynamicChildren` read. Server messages and local `setData()` writes both re-render the affected components without remounting. The binder also evaluates `checks` and reports `isValid` / `validationErrors` on the node; read them through `useChecks()` — Button and IconButton use them to disable themselves, and Slider and DatePicker to display the failing messages.\n3. **Tree resolution** — `ComponentNode` reads the flat adjacency list from `SurfaceComponentsModel`, resolves `children`/`child`/`trigger`/`content` references, and recursively renders the tree.\n4. **Value binding** — Components call `resolveValue<V>(value)` which delegates to `DataContext.resolveDynamicValue<V>()` — handling literals, `{ path }` lookups, and `{ call }` function expressions. Prefer an explicit `V` (e.g. `string`, `number[]`) for each property.\n5. **Two-way binding** — Input components use writable `computed` properties that call `setData()` on the surface's `DataModel` when the user types.\n6. **Actions out** — On user interaction, components call `dispatchNodeAction(node, extraContext?)` (reads `action` from the node, then dispatches) or `sendAction(name, sourceComponentId, context)` (fires a named event directly). Both resolve context from the data model and dispatch via `SurfaceModel.dispatchAction()` or the `onAction` callback.\n\n### Dynamic list rendering\n\nWhen `children` is an object `{ path, componentId }` instead of an array, the renderer iterates the data model array at `path` and renders the template `componentId` for each item, passing a scoped `path` prop (`/items/0`, `/items/1`, ...) so child components resolve relative bindings correctly.\n\n## Custom Components\n\nYou can extend the renderer by defining your own Vue components and registering them. This is useful for complex data visualizations, specialized input fields, or integrating third-party libraries.\n\n### 1. Define a Custom Component\n\nUse the `useA2UI` composable to easily map A2UI JSON properties to your component's props and emit actions back to the agent.\n\n```vue\n<!-- src/components/CustomChartWidget.vue -->\n<template>\n  <v-card variant=\"outlined\" class=\"pa-4 border-info\">\n    <div class=\"text-h6 mb-2\">{{ title }}</div>\n    <div class=\"d-flex align-end\" style=\"height: 100px; gap: 8px;\">\n      <div \n        v-for=\"(point, idx) in chartData\" \n        :key=\"idx\"\n        class=\"bg-info rounded-t cursor-pointer\"\n        :style=\"{ height: `${point}%`, width: '40px', transition: 'height 0.3s' }\"\n        @click=\"handleBarClick(idx, point)\"\n      ></div>\n    </div>\n  </v-card>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useA2UI, type ComponentModel } from '@alis-build/a2ui-vuetify-renderer';\n\nconst props = defineProps<{\n  node: ComponentModel;\n}>();\n\n// useA2UI automatically handles resolving dynamic data bindings (e.g. { path: '/myData' })\nconst { resolveValue, dispatchNodeAction } = useA2UI();\n\n// Resolve the 'title' property from the A2UI JSON node (generic = resolved type)\nconst title = computed(() => resolveValue<string | undefined>(props.node.properties.title) ?? 'Default Chart');\n\n// Resolve the 'data' property from the A2UI JSON node, defaulting to an empty array\nconst chartData = computed(() => {\n  const data = resolveValue<number[] | undefined>(props.node.properties.data);\n  return Array.isArray(data) ? data : [];\n});\n\n// Dispatch the action configured on the node (see ComponentApi below) with extra context\nconst handleBarClick = (index: number, value: number) => {\n  dispatchNodeAction(props.node, { index, value });\n};\n</script>\n```\n\n### 2. Register the Component\n\nBefore rendering a surface, register your new component with the `defaultRegistry` using the same `CATALOG_ID` that your surface uses. \n\nYou can optionally provide a `ComponentApi` definition for your component. This is highly recommended as it allows `getCatalogSchema()` to expose your custom component's properties to the LLM agent, so the agent knows exactly what data your component expects.\n\nInclude `ActionSchema` in the schema when your component emits user interactions back to the agent. The agent chooses the event name in JSON; your component decides **when** to fire it and what **extra context** to attach.\n\n```typescript\nimport { CATALOG_ID, defaultRegistry } from '@alis-build/a2ui-vuetify-renderer';\nimport { ActionSchema, type ComponentApi } from '@a2ui/web_core/v0_9';\nimport { z } from 'zod';\nimport CustomChartWidget from './components/CustomChartWidget.vue';\n\n// Define the ComponentApi using Zod for your custom component\nconst CustomChartApi: ComponentApi = {\n  name: 'CustomChart',\n  schema: z.object({\n    title: z.string().describe('The title of the chart').optional(),\n    data: z.object({ path: z.string() }).describe('Path to the data model array'),\n    action: ActionSchema.optional().describe('Fired when a bar is clicked; context includes index and value'),\n  }).strict(),\n};\n\n// Register the component under the type name \"CustomChart\" along with its API\ndefaultRegistry.register(CATALOG_ID, 'CustomChart', CustomChartWidget, CustomChartApi);\n```\n\nUse `ActionSchema` (required) when the component only makes sense with an action — e.g. `Button`. Use `ActionSchema.optional()` when interaction is optional — e.g. `TextField`, `Calendar`.\n\n#### Action shape\n\n`ActionSchema` from `@a2ui/web_core/v0_9` accepts either:\n\n- **Server action** — `{ event: { name: string, context?: object } }` — dispatched to the agent via `onAction`\n- **Client function** — `{ functionCall: { call: string, args?: object } }` — evaluated locally by the renderer\n\nIn your Vue component, call `dispatchNodeAction(node, extraContext?)` on user interaction. It reads `node.properties.action`, merges `extraContext` into the event context, and dispatches. Built-in components such as `Button` and `Calendar` follow this same pattern.\n\n#### `dispatchNodeAction` vs `sendAction`\n\nBoth functions emit actions back to the agent (or execute client-side `functionCall` actions). `dispatchNodeAction` is a higher-level helper that reads the node's `action` property first; for server events it delegates to `sendAction`.\n\n| | `dispatchNodeAction(node, extraContext?)` | `sendAction(name, sourceComponentId, context?)` |\n| --- | --- | --- |\n| **Who sets the event name** | The agent, via `action.event.name` in JSON | Your component code (first argument) |\n| **Static context** | From `action.event.context` in JSON (literals, `{ path }`, `{ call }` resolved) plus `extraContext` you pass at runtime | Only the `context` argument you pass |\n| **`functionCall` actions** | Yes — calls `dataContext.resolveAction()` | No — server events only |\n| **Visible in catalog schema** | Yes, when `action: ActionSchema` is in `ComponentApi` | No, unless the schema also declares `action` |\n| **When nothing happens** | Silently returns if `node.properties.action` is unset | Always dispatches when called |\n\n**Prefer `dispatchNodeAction`** for agent-driven UIs. The agent supplies `action` in `updateComponents` JSON; your component decides when to fire it and what runtime fields to add:\n\n```typescript\n// Agent JSON: { \"action\": { \"event\": { \"name\": \"chartPointClicked\" } } }\ndispatchNodeAction(props.node, { index, value });\n```\n\n**Use `sendAction`** when the event name is fixed in code and does not come from the node's `action` property — for example, `CustomChartWidget` in `examples/client`:\n\n```typescript\nsendAction('chartPointClicked', props.node.id, { index, value });\n```\n\nThis works at runtime, but the agent will not see that event in `getCatalogSchema()` unless you also add `action: ActionSchema` and switch to `dispatchNodeAction`. Built-in components such as `Button` use `dispatchNodeAction`; see `A2UIButton.vue` and `A2UICalendar.vue` for reference.\n\n#### Multiple actions on one component\n\nA2UI defines **one standard `action` property per component node**. `dispatchNodeAction` only reads `node.properties.action`. When a component has more than one user interaction, pick the pattern that fits:\n\n| Goal | Pattern |\n| --- | --- |\n| Several gestures, one handler (agent branches on context) | **One `action` + context discriminator** |\n| Different event names, all on the same custom node | **Multiple `ActionSchema` properties** (custom) |\n| Separate affordances (Confirm / Cancel buttons) | **Child `Button` components** (standard A2UI) |\n| Fixed event names, not agent-configured | **Multiple `sendAction` calls** |\n\n##### 1. One `action`, discriminate in context (recommended)\n\nUse a single `action` on the node. Your component tags which interaction fired via `extraContext`. The agent (or your `onAction` handler) branches on a field such as `interaction`.\n\n`Calendar` is the built-in example. Its schema declares one optional `action` (`A2UICalendar.api.ts`); `A2UICalendar.vue` dispatches the same action for two gestures with different context:\n\n```typescript\n// A2UICalendar.api.ts — one action property\naction: ActionSchema.optional(),\n\n// Agent JSON — agent picks the event name once\n{\n  \"id\": \"my-calendar\",\n  \"component\": \"Calendar\",\n  \"events\": [{ \"name\": \"Team standup\", \"start\": \"2026-06-09\" }],\n  \"value\": { \"path\": \"/selectedDate\" },\n  \"action\": { \"event\": { \"name\": \"calendarInteraction\" } }\n}\n\n// A2UICalendar.vue — discriminate by interaction\nconst handleClickDate = (_e: Event, day: any) => {\n  const date = day?.date;\n  if (date) modelValue.value = date;\n  dispatchNodeAction(props.node, { date, interaction: 'click:date' });\n};\n\nconst handleClickEvent = (_e: Event, eventScope: any) => {\n  const event = eventScope?.event;\n  dispatchNodeAction(props.node, {\n    event: event ? { name: event.name, start: event.start, end: event.end } : {},\n    interaction: 'click:event',\n  });\n};\n```\n\n`Tabs` uses the same pattern for tab changes — one `action`, context carries `tabIndex` and `tabTitle` (`A2UITabs.vue`).\n\n##### 2. Multiple `ActionSchema` properties (custom)\n\nNo built-in component in this catalog uses multiple `ActionSchema` properties on one node. If you extended `Calendar` so date clicks and event clicks each needed a **separate agent-configurable event name** (instead of one `action` + `interaction`), you could add custom properties to your `ComponentApi`:\n\n```typescript\n// Hypothetical extension of Calendar — not in the default catalog\nconst ExtendedCalendarApi: ComponentApi = {\n  name: 'ExtendedCalendar',\n  schema: z.object({\n    events: z.array(z.object({ name: z.string(), start: z.string() }).strict()),\n    value: DynamicStringSchema.optional(),\n    onDateClickAction: ActionSchema.optional().describe('Fired when a date cell is clicked'),\n    onEventClickAction: ActionSchema.optional().describe('Fired when a calendar event is clicked'),\n  }).strict(),\n};\n```\n\n```json\n{\n  \"onDateClickAction\": { \"event\": { \"name\": \"dateSelected\" } },\n  \"onEventClickAction\": { \"event\": { \"name\": \"eventSelected\" } }\n}\n```\n\n`dispatchNodeAction` only reads `node.properties.action`, so resolve and dispatch each property yourself:\n\n```typescript\nimport type { Action } from '@a2ui/web_core/v0_9';\n\nconst { resolveValue, sendAction } = useA2UI();\n\nfunction dispatchConfiguredAction(\n  actionValue: unknown,\n  extraContext?: Record<string, unknown>,\n) {\n  const action = resolveValue<Action | undefined>(actionValue);\n  if (!action || !('event' in action)) return;\n\n  sendAction(action.event.name, props.node.id, {\n    ...(action.event.context ?? {}),\n    ...extraContext,\n  });\n}\n\n// Mirrors A2UICalendar.vue handlers, but reads separate action properties\nfunction handleClickDate(_e: Event, day: { date?: string }) {\n  dispatchConfiguredAction(props.node.properties.onDateClickAction, {\n    date: day?.date,\n    interaction: 'click:date',\n  });\n}\n\nfunction handleClickEvent(_e: Event, eventScope: { event?: { name: string; start: string; end?: string } }) {\n  const event = eventScope?.event;\n  dispatchConfiguredAction(props.node.properties.onEventClickAction, {\n    event: event ? { name: event.name, start: event.start, end: event.end } : {},\n    interaction: 'click:event',\n  });\n}\n```\n\nPrefer pattern 1 unless you truly need distinct event names per gesture on the same node.\n\n##### 3. Child `Button` components (standard A2UI)\n\nFor discrete actions (Save, Close, Submit), put each action on a **child** `Button` with its own `action` property. `Modal` composes child nodes via `trigger` and `content` (`A2UIModal.vue`); buttons inside the modal body each carry a standard `action`:\n\n```json\n[\n  { \"id\": \"settings-modal\", \"component\": \"Modal\", \"trigger\": \"open-settings-btn\", \"content\": \"settings-modal-body\" },\n  { \"id\": \"open-settings-btn\", \"component\": \"Button\", \"label\": \"Settings\", \"variant\": \"primary\" },\n  {\n    \"id\": \"settings-modal-body\",\n    \"component\": \"Column\",\n    \"children\": [\"settings-form\", \"save-settings-btn\", \"close-settings-btn\"]\n  },\n  { \"id\": \"save-settings-btn\", \"component\": \"Button\", \"label\": \"Save\", \"variant\": \"primary\", \"action\": { \"event\": { \"name\": \"saveSettings\" } } },\n  { \"id\": \"close-settings-btn\", \"component\": \"Button\", \"label\": \"Close\", \"action\": { \"event\": { \"name\": \"closeSettingsModal\" } } }\n]\n```\n\n`Modal` itself can also emit on open/close via its optional `action` (`A2UIModal.vue` watches `isOpen` and calls `dispatchNodeAction` with `{ open }`). Put form state in the data model so Save's `action.event.context` can reference it (e.g. `{ \"settings\": { \"path\": \"/settings\" } }`).\n\n##### 4. Multiple `sendAction` calls (fixed names)\n\nWhen event names are fixed in code and do not need agent configuration. `CustomChartWidget` (`examples/client`) uses this for bar clicks:\n\n```typescript\nsendAction('chartPointClicked', props.node.id, { index, value });\n```\n\nAdditional handlers on the same component would follow the same pattern with different names. Event names are invisible to `getCatalogSchema()` unless you add `action: ActionSchema` and migrate to `dispatchNodeAction` (patterns 1 or 2).\n\n### 3. Send it from the Agent\n\nNow your agent can send `updateComponents` messages using your new `\"CustomChart\"` type.\n\n```json\n{\n  \"id\": \"my-custom-chart\",\n  \"component\": \"CustomChart\",\n  \"title\": \"Monthly Sales\",\n  \"data\": { \"path\": \"/salesData\" },\n  \"action\": { \"event\": { \"name\": \"chartPointClicked\" } }\n}\n```\n\nThe agent sets `action.event.name`; your component attaches runtime context (e.g. `index`, `value`) via `dispatchNodeAction`. Optional static context can be included in `action.event.context` using literals or data bindings:\n\n```json\n{\n  \"action\": {\n    \"event\": {\n      \"name\": \"chartPointClicked\",\n      \"context\": { \"chartId\": { \"path\": \"/activeChartId\" } }\n    }\n  }\n}\n```\n\n### Filtering the catalog schema\n\n`getCatalogSchema()` accepts an optional `filter` predicate to control which components appear in the returned schema. This is useful when you only want to expose a subset of components to the LLM agent.\n\n```typescript\nimport { getCatalogSchema, catalogFilters, defaultRegistry, CATALOG_ID } from '@alis-build/a2ui-vuetify-renderer';\n\n// Full catalog (default — same as before)\nconst full = getCatalogSchema(defaultRegistry, CATALOG_ID);\n\n// Only custom (non-built-in) components\nconst custom = getCatalogSchema(defaultRegistry, CATALOG_ID, {\n  filter: catalogFilters.customOnly,\n});\n\n// Only specific components\nconst subset = getCatalogSchema(defaultRegistry, CATALOG_ID, {\n  filter: catalogFilters.only('Button', 'TextField', 'Card'),\n});\n\n// Everything except a few\nconst lighter = getCatalogSchema(defaultRegistry, CATALOG_ID, {\n  filter: catalogFilters.exclude('Table', 'Calendar'),\n});\n\n// Arbitrary predicate\nconst myFilter = getCatalogSchema(defaultRegistry, CATALOG_ID, {\n  filter: (name) => name.startsWith('Custom'),\n});\n```\n\n| Helper | Description |\n| --- | --- |\n| `catalogFilters.customOnly` | Keeps only components **not** in the base Vuetify catalog |\n| `catalogFilters.only(...names)` | Keeps only the listed component names |\n| `catalogFilters.exclude(...names)` | Keeps everything except the listed component names |\n\n## Component catalog\n\n40 components are registered in the default catalog. Most are backed by Vuetify 4; media types use native HTML5 elements where that fits the protocol.\n\n### Content & display\n\n| A2UI type    | Vuetify / HTML               | Notes                                                            |\n| ------------ | ---------------------------- | ---------------------------------------------------------------- |\n| `Text`       | `<div>` + typography classes | Maps `variant` (h1–h5, body, caption) to `text-h1`…`text-body-1` |\n| `Image`      | `v-img`                      | `url`, `fit`, `variant`                                          |\n| `Icon`       | `v-icon`                     | Material Design Icons                                            |\n| `Divider`    | `v-divider`                  | Horizontal/vertical axis                                         |\n| `Avatar`     | `v-avatar`                   |                                                                  |\n| `Badge`      | `v-badge`                    |                                                                  |\n| `Chip`       | `v-chip`                     |                                                                  |\n| `Alert`      | `v-alert`                    |                                                                  |\n| `Banner`     | `v-banner`                   |                                                                  |\n| `EmptyState` | `v-empty-state`              |                                                                  |\n| `Rating`     | `v-rating`                   |                                                                  |\n| `Video`      | `<video>`                    | `url`, `controls`, `autoplay`, `loop`, `muted`                  |\n| `AudioPlayer` | `<audio>`                    | Same media-style props as `Video`                               |\n\n### Layout & containers\n\n| A2UI type        | Vuetify component                  | Notes                                                      |\n| ---------------- | ---------------------------------- | ---------------------------------------------------------- |\n| `Row`            | `<div class=\"d-flex flex-row\">`    | `justify`, `align` mapped to Vuetify flex utility classes  |\n| `Column`         | `<div class=\"d-flex flex-column\">` | Same flex mapping; child `weight` → `flex-grow-N`          |\n| `List`           | `v-list`                           | Supports dynamic `{ path, componentId }` children          |\n| `Card`           | `v-card`                           | Single `child` reference                                   |\n| `Form`           | `v-form`                           | Wraps children                                             |\n| `ExpansionPanel` | `v-expansion-panels`               |                                                            |\n| `Tabs`           | `v-tabs` / `v-tabs-window`         | Tab titles and panel content per A2UI `tabs` array         |\n| `Modal`          | `v-dialog`                         | `trigger` opens dialog; `content` is body                  |\n| `Table`          | `v-data-table`                     | Auto-generates headers from data if `columns` not provided |\n| `TreeView`       | `v-treeview`                       |                                                            |\n| `Calendar`       | `v-calendar`                       |                                                            |\n\n### Interactive & forms\n\n| A2UI type      | Vuetify component            | Notes                                                                                               |\n| -------------- | ---------------------------- | --------------------------------------------------------------------------------------------------- |\n| `Button`       | `v-btn`                      | `variant` → elevated/tonal/text; `action.event` triggers `dispatchNodeAction` → `sendAction`; `action.functionCall` runs locally; disabled while its `checks` fail |\n| `TextField`    | `v-text-field`               | Two-way binding via `value.path`; `checks` (`{ condition, message }`) → Vuetify rules               |\n| `TextArea`     | `v-textarea`                 | Same binding pattern                                                                                |\n| `NumberInput`  | `v-text-field type=\"number\"` |                                                                                                     |\n| `Checkbox`     | `v-checkbox`                 |                                                                                                     |\n| `RadioButton`  | `v-radio-group` / `v-radio`  |                                                                                                     |\n| `Select`       | `v-select`                   | `variant: \"multipleSelection\"` → `multiple` prop                                                    |\n| `Autocomplete` | `v-autocomplete`             |                                                                                                     |\n| `Combobox`     | `v-combobox`                 |                                                                                                     |\n| `FileInput`    | `v-file-input`               |                                                                                                     |\n| `Slider`       | `v-slider`                   |                                                                                                     |\n| `RangeSlider`  | `v-range-slider`             |                                                                                                     |\n| `DatePicker`   | `v-date-picker`              |                                                                                                     |\n| `TimePicker`   | `v-time-picker`              |                                                                                                     |\n| `ChoicePicker` | (delegates)                  | Maps A2UI choice semantics to `Select` / `RadioButton` / `Checkbox` based on variant and display style |\n\n## Theming\n\n`A2UIProvider` reads the `theme` object from `createSurface` and dynamically registers a Vuetify theme scoped to that surface. Supported theme properties:\n\n- `primaryColor` → Vuetify `primary`\n- `errorColor` → Vuetify `error`\n- `backgroundColor` → Vuetify `background`\n- `surfaceColor` → Vuetify `surface`\n\nThe theme is applied via `<v-theme-provider>` and automatically cleaned up when the provider unmounts.\n\n## Custom components\n\n### Registering & Scoping (catalogId)\n\nTo avoid collisions between disparate models, components must be registered against a specific `catalogId`. The renderer uses this ID (provided via `createSurface`) to securely sandbox standard and custom components.\n\n```typescript\nimport { CATALOG_ID, defaultRegistry } from '@alis-build/a2ui-vuetify-renderer'\nimport MyMap from './components/MyMap.vue'\n\n// Registering a synchronous custom component under the default catalog ID\ndefaultRegistry.register(CATALOG_ID, 'GoogleMap', MyMap)\n```\n\n### Lazy Loading\n\nTo optimize your initial bundle, you can register components asynchronously. Vue will load the chunk only when the A2UI server requests the component.\n\n```typescript\nimport { defineAsyncComponent } from 'vue'\n\nconst AsyncMap = defineAsyncComponent(() => import('./components/MyMap.vue'))\n\ndefaultRegistry.register(CATALOG_ID, 'GoogleMap', AsyncMap)\n```\n\n## Transport Integration\n\nWhile the A2UI Vue Renderer focuses solely on the UI layer, host applications must integrate it into an overarching transport channel (e.g., SSE, WebSockets, or a native bridge) and announce their capabilities.\n\n### Client Capabilities\n\nYou must explicitly announce which `catalogId`s your renderer supports to the AI agent during the connection handshake. Failure to do so may result in the server sending unhandled component types.\n\n```typescript\n// The processor derives the capabilities from its catalogs\nconst metadata = processor.getClientCapabilities()\n// { 'v0.9': { supportedCatalogIds: [CATALOG_ID] } }\n\n// Advertise protocol v0.9.1 instead (messages with version 'v0.9.1' are accepted either way),\n// or embed the full catalog schemas for agents that cannot fetch CATALOG_ID\nconst metadata091 = processor.getClientCapabilities({ version: 'v0.9.1', includeInlineCatalogs: true })\n// Send metadata to the server...\n```\n\n`MessageProcessor` takes the default version as its third argument: `new MessageProcessor([catalog], handleAction, { version: 'v0.9.1' })`.\n\n### Authoring\n\nCustom components receive a `node` prop (the component node from A2UI). To resolve data bindings (`path`, `call`, literals) for every field, use `useDynamicProps` with a ref, getter, or the node object (it uses Vue’s `toValue` internally). Each entry is resolved with the same `resolveValue` helper as `useA2UI`; for strongly typed fields, call `resolveValue<V>(props.node.properties.someKey)` instead of reading only from `dynamicProps`.\n\n```vue\n<script setup lang=\"ts\">\n  import { toRef } from 'vue'\n  import { useDynamicProps, useA2UI, type ComponentModel } from '@alis-build/a2ui-vuetify-renderer'\n\n  const props = defineProps<{ node: ComponentModel }>()\n\n  const dynamicProps = useDynamicProps(toRef(props, 'node'))\n\n  const { dispatchNodeAction, sendAction, setData } = useA2UI()\n\n  function handleClick(coords: { lat: number; lng: number }) {\n    setData('/map/lastClick', coords)\n    // Prefer dispatchNodeAction when the agent sets action on the node (see Custom Components above)\n    dispatchNodeAction(props.node, coords)\n    // Or sendAction for a fixed event name not configured in JSON (see CustomChartWidget):\n    // sendAction('chartPointClicked', props.node.id, { index, value })\n  }\n</script>\n\n<template>\n  <div class=\"custom-map\">\n    Latitude: {{ dynamicProps.lat }}\n    Longitude: {{ dynamicProps.lng }}\n    <v-btn @click=\"handleClick({ lat: 0, lng: 0 })\">Click Map</v-btn>\n  </div>\n</template>\n```\n\n## Catalog functions\n\n`createVuetifyFunctions({ locale })` returns the `FunctionImplementation[]` for the Vuetify catalog: the basic catalog functions (`required`, `regex`, `formatString`, `and`, …) with two differences:\n\n- **Locale** — `formatNumber`, `formatCurrency` and `pluralize` use the given BCP 47 locale (e.g. `navigator.language`). Omit it for the host runtime locale.\n- **`openUrl`** — the basic catalog's `openUrl` (web_core ≥ 0.10.2) only allows `http:`/`https:`. The Vuetify override keeps that protection but also allows `mailto:` and `tel:`:\n\n| URL scheme                                       | Behaviour                                                        |\n| ------------------------------------------------ | ---------------------------------------------------------------- |\n| `http:`, `https:` (relative URLs resolve first)  | `window.open(url, '_blank', 'noopener,noreferrer')`              |\n| `mailto:`, `tel:`                                | `window.location.assign(url)` (no blank tab left behind)         |\n| anything else (`javascript:`, `data:`, `file:`…) | throws `A2uiExpressionError` (`Unsupported URL scheme: …`)       |\n\nFunction names, schemas and return types are identical to the basic catalog, so `catalog/vuetify-catalog.json` does not change. `VUETIFY_FUNCTIONS` is `createVuetifyFunctions()` and `VuetifyOpenUrlImplementation` is exported on its own.\n\n## Exports\n\nEverything is available from the package root:\n\n```typescript\n// Components\nimport { A2UIProvider, ComponentNode } from '@alis-build/a2ui-vuetify-renderer'\n\n// Composables\nimport { useA2UI, useDynamicProps, useChecks } from '@alis-build/a2ui-vuetify-renderer'\n\n// Registry & catalog bootstrap\nimport {\n  ComponentRegistry,\n  defaultRegistry,\n  registerDefaultComponents,\n  CATALOG_ID,\n  VUETIFY_COMPONENTS,\n  VUETIFY_FUNCTIONS,\n  VUETIFY_THEME_SCHEMA,\n  createVuetifyFunctions,\n  VuetifyOpenUrlImplementation,\n  getCatalogSchema,\n  catalogFilters,\n} from '@alis-build/a2ui-vuetify-renderer'\n\n// Plugin\nimport { A2UiVueRenderer } from '@alis-build/a2ui-vuetify-renderer'\n\n// Types\nimport type { A2UIContext, A2UIActionPayload, A2UiVueRendererOptions, VuetifyFunctionsOptions, UseChecksReturn, ComponentModel } from '@alis-build/a2ui-vuetify-renderer'\n\n// Injection keys (for advanced provide/inject usage)\nimport { A2UI_CONTEXT_KEY, A2UI_REGISTRY_KEY } from '@alis-build/a2ui-vuetify-renderer'\n\n// Styles (import in your app entry)\nimport '@alis-build/a2ui-vuetify-renderer/style.css'\n```\n\n## Development\n\n```bash\ngit clone https://github.com/alis-exchange/a2ui-vuetify-renderer.git\npnpm install\n```\n\n| Command                 | Description                                                |\n| ----------------------- | ---------------------------------------------------------- |\n| `pnpm dev`              | Start Vite dev server (playground under `examples/client`) |\n| `pnpm build`            | Type-check with `vue-tsc` then build the library           |\n| `pnpm test`             | Run Vitest test suite                                      |\n| `pnpm generate:catalog` | Regenerate `catalog/vuetify-catalog.json` from sources     |\n\n### Project structure\n\n```\nrenderer/\n├── catalog/\n│   └── vuetify-catalog.json        # JSON Schema + catalogId for agents\n├── examples/client/                # Vite app for manual integration testing\n├── scripts/\n│   └── generate-catalog.ts         # Catalog JSON build script\n├── src/\n│   ├── index.ts                    # Public API barrel\n│   ├── A2UIRendererPlugin.ts       # Vue plugin (install)\n│   ├── style.css                   # Base styles\n│   ├── catalog/\n│   │   ├── index.ts                # Barrel for catalog exports\n│   │   ├── vuetify-components.ts   # Zod-based ComponentApi[] for all Vuetify components\n│   │   ├── vuetify-functions.ts    # createVuetifyFunctions(): basic catalog + Vuetify openUrl\n│   │   └── vuetify-theme.ts        # Zod theme schema for Catalog constructor\n│   ├── composables/\n│   │   ├── A2UIProvider.vue        # Context provider + theme bridge\n│   │   ├── useA2UI.ts              # Core composable\n│   │   └── useDynamicProps.ts      # Resolved props helper for custom widgets\n│   ├── core/\n│   │   ├── ComponentNode.vue       # Recursive component renderer\n│   │   ├── ComponentRegistry.ts    # Type → Component map (per catalogId)\n│   │   ├── constants.ts            # CATALOG_ID\n│   │   ├── defaultCatalog.ts       # Registers 40 default components\n│   │   ├── getCatalogSchema.ts     # Schema merge for tooling / agents\n│   │   └── catalogFilters.ts      # Pre-built filter predicates\n│   ├── components/\n│   │   └── A2UI*.vue               # Vuetify-backed (and media) implementations\n│   └── utils/\n│       └── validation.ts           # A2UI checks ({ condition, message }) → Vuetify rules\n├── dist/                           # Built library output\n├── vite.config.ts                  # Vite lib mode + vuetify auto-import\n├── vitest.config.ts                # Test config (jsdom, vuetify inlined)\n└── tsconfig.json                   # Project references\n```\n\n### Testing\n\nTests use Vitest with `@vue/test-utils` and `jsdom`. Vuetify is inlined during tests via `vitest.config.ts`. Test files live alongside source as `*.spec.ts`:\n\n- **Core** — plugin, provider (real `MessageProcessor`), `useA2UI`, `useDynamicProps`, `ComponentNode`, `liveNodes`, `ComponentRegistry`, `getCatalogSchema`, barrel `index.spec.ts`\n- **End to end** — `nodeResolver.spec.ts` renders the shipped components through the resolver: typing updates siblings, checks gate the Button, template lists grow on local writes, placeholders upgrade\n- **Components** — grouped specs (`CoreComponents`, `FormInputs`, …) plus focused tests for `Tabs`, `Modal`, `Video`, `AudioPlayer`, `ChoicePicker`\n- **Tooling** — `scripts/generate-catalog.spec.ts`, `validation.spec.ts`\n- **Catalog** — `catalog/vuetify-functions.spec.ts` (locale, `openUrl` allowlist) and `catalog/catalog.spec.ts` (strict message validation under `MessageProcessor`)\n\n## License\n\n[Apache 2.0](LICENSE)\n","readmeFilename":"README.md"}