{"_id":"@a2ui/react","_rev":"13-b8548b45b8327e6b29d82ec6ad0076b6","name":"@a2ui/react","dist-tags":{"latest":"0.11.1"},"versions":{"0.8.0":{"name":"@a2ui/react","version":"0.8.0","keywords":["a2ui","react","ai","agent","ui","renderer"],"license":"Apache-2.0","_id":"@a2ui/react@0.8.0","maintainers":[{"name":"a2ui-team","email":"a2ui-owners@google.com"},{"name":"ava-cassiopeia","email":"ava@mattie.codes"},{"name":"jsimionato","email":"jacob.simionato@gmail.com"}],"homepage":"https://github.com/google/A2UI#readme","bugs":{"url":"https://github.com/google/A2UI/issues"},"dist":{"shasum":"f3c212b0ad287d834d44949b1a6436d9dc38aeee","tarball":"https://registry.npmjs.org/@a2ui/react/-/react-0.8.0.tgz","fileCount":14,"integrity":"sha512-FU8eDIkhWcvtx65ATrToixzO5FxnYdROfZ1k5D24V7v1EP1Or2sdytZxL3XX/lnmTAJzG7KAls77tMB9jQ4SVA==","signatures":[{"sig":"MEUCIHBICtkvO/G8EpP9+9jfhMKaE+MR7+rtTJnOzFGtakcyAiEA334CKhzoiXF6Q3muLLeHqPwhv3+ToAXgndn1W+Fotp4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":624589},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./styles":{"import":{"types":"./dist/styles/index.d.ts","default":"./dist/styles/index.js"},"require":{"types":"./dist/styles/index.d.cts","default":"./dist/styles/index.cjs"}},"./styles/structural.css":"./dist/structural.css"},"gitHead":"24d3b8c6b5f31381b07fd77f5b64eeeb3be63695","scripts":{"dev":"tsup --watch","lint":"eslint src","test":"vitest run","build":"tsup && cp src/styles/index.d.ts dist/styles/index.d.ts && cp src/styles/index.d.ts dist/styles/index.d.cts","clean":"rm -rf dist","format":"prettier --write \"src/**/*.{ts,tsx}\"","lint:fix":"eslint src --fix","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check \"src/**/*.{ts,tsx}\""},"_npmUser":{"name":"ava-cassiopeia","email":"ava@mattie.codes"},"repository":{"url":"git+https://github.com/google/A2UI.git","type":"git","directory":"renderers/react"},"_npmVersion":"10.9.2","description":"React renderer for A2UI (Agent-to-User Interface)","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.16.0","dependencies":{"clsx":"^2.1.0","markdown-it":"^14.0.0","@a2ui/web_core":">=0.8.0 <0.8.4"},"_hasShrinkwrap":false,"devDependencies":{"gts":"^7.0.0","tsup":"^8.0.0","jsdom":"^28.0.0","react":"^18.3.0","eslint":"^9.0.0","vitest":"^4.0.18","prettier":"^3.4.0","react-dom":"^18.3.0","@eslint/js":"^9.0.0","typescript":"^5.8.0","@types/react":"^18.3.0","@types/react-dom":"^18.3.0","typescript-eslint":"^8.0.0","@types/markdown-it":"^14.1.0","eslint-plugin-react":"^7.37.0","@testing-library/react":"^16.0.0","eslint-config-prettier":"^10.0.0","@testing-library/jest-dom":"^6.6.0","eslint-plugin-react-hooks":"^5.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.8.0_1773790848090_0.6112213451874025","host":"s3://npm-registry-packages-npm-production"}},"0.9.0-alpha.0":{"name":"@a2ui/react","version":"0.9.0-alpha.0","keywords":["a2ui","react","ai","agent","ui","renderer"],"_id":"@a2ui/react@0.9.0-alpha.0","maintainers":[{"name":"a2ui-team","email":"a2ui-owners@google.com"},{"name":"ava-cassiopeia","email":"oss@avamattie.com"},{"name":"jsimionato","email":"jacob.simionato@gmail.com"}],"homepage":"https://a2ui.org/","bugs":{"url":"https://github.com/google/A2UI/issues"},"dist":{"shasum":"53446ddfa8fe2214cfc539d62d7cf1d244e8adfa","tarball":"https://registry.npmjs.org/@a2ui/react/-/react-0.9.0-alpha.0.tgz","fileCount":41,"integrity":"sha512-qB35fzT+mh8RurnZKGqD3s3yK9bV5cs4iHnfNgrqV0iqa73tqz7IEp2e1CR9bDWOilpFNjdh312NhfUO2NeZ2Q==","signatures":[{"sig":"MEUCIEHlB+BHhNBuz5xGF9zs83rh2J67Hejkbz2AMJSOsou0AiEA5aF1UH5FppnEjEwTsh8tiG3O/Zt5AEujVjrGTVNiWBk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":985242},"main":"./index.cjs","type":"module","_from":"file:/b/f/w/src/piper/google3/security/opensource/exit_gate_v1/kokoro/publisher/downloaded_artifacts/@a2ui/react/0.9.0-alpha.0/react-0.9.0-alpha.0.tgz","types":"./index.d.ts","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./index.js"},"require":{"types":"./index.d.cts","default":"./index.cjs"}},"./v0_8":{"import":{"types":"./v0_8/index.d.ts","default":"./v0_8/index.js"},"require":{"types":"./v0_8/index.d.cts","default":"./v0_8/index.cjs"}},"./v0_9":{"import":{"types":"./v0_9/index.d.ts","default":"./v0_9/index.js"},"require":{"types":"./v0_9/index.d.cts","default":"./v0_9/index.cjs"}},"./styles":{"import":{"types":"./styles/index.d.ts","default":"./styles/index.js"},"require":{"types":"./styles/index.d.cts","default":"./styles/index.cjs"}},"./styles/structural.css":"./structural.css"},"_npmUser":{"name":"a2ui-team","email":"a2ui-owners@google.com"},"_resolved":"/b/f/w/src/piper/google3/security/opensource/exit_gate_v1/kokoro/publisher/downloaded_artifacts/@a2ui/react/0.9.0-alpha.0/react-0.9.0-alpha.0.tgz","_integrity":"sha512-qB35fzT+mh8RurnZKGqD3s3yK9bV5cs4iHnfNgrqV0iqa73tqz7IEp2e1CR9bDWOilpFNjdh312NhfUO2NeZ2Q==","repository":{"url":"git+https://github.com/google/A2UI.git","type":"git","directory":"renderers/react"},"_npmVersion":"10.9.3","description":"React renderer for A2UI (Agent-to-User Interface)","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.23.8","clsx":"^2.1.0","markdown-it":"^14.0.0","@a2ui/web_core":"^0.9.1-alpha.0"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^3.23.8","react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.9.0-alpha.0_1775719551409_0.49760988852687893","host":"s3://npm-registry-packages-npm-production"}},"0.9.0-alpha.1":{"name":"@a2ui/react","version":"0.9.0-alpha.1","keywords":["a2ui","react","ai","agent","ui","renderer"],"_id":"@a2ui/react@0.9.0-alpha.1","maintainers":[{"name":"a2ui-team","email":"a2ui-owners@google.com"},{"name":"ava-cassiopeia","email":"oss@avamattie.com"},{"name":"jsimionato","email":"jacob.simionato@gmail.com"}],"homepage":"https://a2ui.org/","bugs":{"url":"https://github.com/google/A2UI/issues"},"dist":{"shasum":"8ad3aee505702f2932a6bc3ca126d80bc865939c","tarball":"https://registry.npmjs.org/@a2ui/react/-/react-0.9.0-alpha.1.tgz","fileCount":41,"integrity":"sha512-syK0gzKN32tuaSRXdkMsS0NPe0j4lxedd1/erbocoeSxl5/C19sjk0lo7c+RXHXBTq5JHlv8p+xC82Rqds89zg==","signatures":[{"sig":"MEQCIQDxyph8390KrZYI8sReOT/iN9/UE61F1gtEwTTNKYCkBQIfE2GmYFmP5D+Hd1JfYJel6DOxqSWA+C+6IPuHflOqdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1002083},"main":"./index.cjs","type":"module","_from":"file:/b/f/w/src/piper/google3/security/opensource/exit_gate_v1/kokoro/publisher/downloaded_artifacts/@a2ui/react/0.9.0-alpha.1/react-0.9.0-alpha.1.tgz","types":"./index.d.ts","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./index.js"},"require":{"types":"./index.d.cts","default":"./index.cjs"}},"./v0_8":{"import":{"types":"./v0_8/index.d.ts","default":"./v0_8/index.js"},"require":{"types":"./v0_8/index.d.cts","default":"./v0_8/index.cjs"}},"./v0_9":{"import":{"types":"./v0_9/index.d.ts","default":"./v0_9/index.js"},"require":{"types":"./v0_9/index.d.cts","default":"./v0_9/index.cjs"}},"./styles":{"import":{"types":"./styles/index.d.ts","default":"./styles/index.js"},"require":{"types":"./styles/index.d.cts","default":"./styles/index.cjs"}},"./styles/structural.css":"./structural.css"},"_npmUser":{"name":"a2ui-team","email":"a2ui-owners@google.com"},"_resolved":"/b/f/w/src/piper/google3/security/opensource/exit_gate_v1/kokoro/publisher/downloaded_artifacts/@a2ui/react/0.9.0-alpha.1/react-0.9.0-alpha.1.tgz","_integrity":"sha512-syK0gzKN32tuaSRXdkMsS0NPe0j4lxedd1/erbocoeSxl5/C19sjk0lo7c+RXHXBTq5JHlv8p+xC82Rqds89zg==","repository":{"url":"git+https://github.com/google/A2UI.git","type":"git","directory":"renderers/react"},"_npmVersion":"10.9.3","description":"React renderer for A2UI (Agent-to-User Interface)","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.23.8","clsx":"^2.1.0","markdown-it":"^14.0.0","@a2ui/web_core":"^0.9.1-alpha.1","@a2ui/markdown-it":"file:../markdown/markdown-it"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^3.23.8","react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.9.0-alpha.1_1776162477745_0.6438050554380368","host":"s3://npm-registry-packages-npm-production"}},"0.9.0-alpha.2":{"name":"@a2ui/react","version":"0.9.0-alpha.2","keywords":["a2ui","react","ai","agent","ui","renderer"],"_id":"@a2ui/react@0.9.0-alpha.2","maintainers":[{"name":"a2ui-team","email":"a2ui-owners@google.com"},{"name":"ava-cassiopeia","email":"oss@avamattie.com"},{"name":"jsimionato","email":"jacob.simionato@gmail.com"}],"homepage":"https://a2ui.org/","bugs":{"url":"https://github.com/google/A2UI/issues"},"dist":{"shasum":"815b0b9e51d5e52c2763f82c84b586260fb40440","tarball":"https://registry.npmjs.org/@a2ui/react/-/react-0.9.0-alpha.2.tgz","fileCount":41,"integrity":"sha512-jjpfxsILzODUH/K3QW/gV+IYvdt2gnJYI0MpaL5I3hRCxsVBSwSAdbt96Wa0Wdx0Xd3XCmUdS0nc/RNotbhq0g==","signatures":[{"sig":"MEYCIQCHMSyc1fxvZxCEBmEg2Vi189RcRQ1MsknPvybvsbr2nwIhAOpRYrIhj3oVOfn39cJdfLEvMqU6aFg7MVJMHyJNfod9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1002061},"main":"./index.cjs","type":"module","_from":"file:/b/f/w/src/piper/google3/security/opensource/exit_gate_v1/kokoro/publisher/downloaded_artifacts/@a2ui/react/0.9.0-alpha.2/react-0.9.0-alpha.2.tgz","types":"./index.d.ts","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./index.js"},"require":{"types":"./index.d.cts","default":"./index.cjs"}},"./v0_8":{"import":{"types":"./v0_8/index.d.ts","default":"./v0_8/index.js"},"require":{"types":"./v0_8/index.d.cts","default":"./v0_8/index.cjs"}},"./v0_9":{"import":{"types":"./v0_9/index.d.ts","default":"./v0_9/index.js"},"require":{"types":"./v0_9/index.d.cts","default":"./v0_9/index.cjs"}},"./styles":{"import":{"types":"./styles/index.d.ts","default":"./styles/index.js"},"require":{"types":"./styles/index.d.cts","default":"./styles/index.cjs"}},"./styles/structural.css":"./structural.css"},"_npmUser":{"name":"a2ui-team","email":"a2ui-owners@google.com"},"_resolved":"/b/f/w/src/piper/google3/security/opensource/exit_gate_v1/kokoro/publisher/downloaded_artifacts/@a2ui/react/0.9.0-alpha.2/react-0.9.0-alpha.2.tgz","_integrity":"sha512-jjpfxsILzODUH/K3QW/gV+IYvdt2gnJYI0MpaL5I3hRCxsVBSwSAdbt96Wa0Wdx0Xd3XCmUdS0nc/RNotbhq0g==","repository":{"url":"git+https://github.com/google/A2UI.git","type":"git","directory":"renderers/react"},"_npmVersion":"10.9.3","description":"React renderer for A2UI (Agent-to-User Interface)","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.23.8","clsx":"^2.1.0","markdown-it":"^14.0.0","@a2ui/web_core":"^0.9.1-alpha.2","@a2ui/markdown-it":"^0.0.1"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^3.23.8","react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.9.0-alpha.2_1776165961693_0.12217008749570613","host":"s3://npm-registry-packages-npm-production"}},"0.9.0-alpha.3":{"name":"@a2ui/react","version":"0.9.0-alpha.3","keywords":["a2ui","react","ai","agent","ui","renderer"],"_id":"@a2ui/react@0.9.0-alpha.3","maintainers":[{"name":"a2ui-team","email":"a2ui-owners@google.com"},{"name":"ava-cassiopeia","email":"oss@avamattie.com"},{"name":"jsimionato","email":"jacob.simionato@gmail.com"}],"homepage":"https://a2ui.org/","bugs":{"url":"https://github.com/google/A2UI/issues"},"dist":{"shasum":"e3046804da9cebe9e950a944f3e4d10dd65c7ca1","tarball":"https://registry.npmjs.org/@a2ui/react/-/react-0.9.0-alpha.3.tgz","fileCount":41,"integrity":"sha512-KmsqgH++tbeQ0xR0hlHBLj3lSU4msUxKYjACeKpqfXJpByBYGf369rHsOvRAqzbhoQy/YaxSaTZlDY/4c/q8ig==","signatures":[{"sig":"MEYCIQC+DfVhBugTFH3RxCMTgkl0VVbXi2RMAUMJB8z32yi7mwIhAMBe/YOnXSqxuWEZs1b5XlPeJZJ2tfohgOdu1dsgdytj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1002069},"main":"./index.cjs","type":"module","_from":"file:/b/f/w/src/piper/google3/security/opensource/exit_gate_v1/kokoro/publisher/downloaded_artifacts/@a2ui/react/0.9.0-alpha.3/react-0.9.0-alpha.3.tgz","types":"./index.d.ts","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./index.js"},"require":{"types":"./index.d.cts","default":"./index.cjs"}},"./v0_8":{"import":{"types":"./v0_8/index.d.ts","default":"./v0_8/index.js"},"require":{"types":"./v0_8/index.d.cts","default":"./v0_8/index.cjs"}},"./v0_9":{"import":{"types":"./v0_9/index.d.ts","default":"./v0_9/index.js"},"require":{"types":"./v0_9/index.d.cts","default":"./v0_9/index.cjs"}},"./styles":{"import":{"types":"./styles/index.d.ts","default":"./styles/index.js"},"require":{"types":"./styles/index.d.cts","default":"./styles/index.cjs"}},"./styles/structural.css":"./structural.css"},"_npmUser":{"name":"a2ui-team","email":"a2ui-owners@google.com"},"_resolved":"/b/f/w/src/piper/google3/security/opensource/exit_gate_v1/kokoro/publisher/downloaded_artifacts/@a2ui/react/0.9.0-alpha.3/react-0.9.0-alpha.3.tgz","_integrity":"sha512-KmsqgH++tbeQ0xR0hlHBLj3lSU4msUxKYjACeKpqfXJpByBYGf369rHsOvRAqzbhoQy/YaxSaTZlDY/4c/q8ig==","repository":{"url":"git+https://github.com/google/A2UI.git","type":"git","directory":"renderers/react"},"_npmVersion":"10.9.3","description":"React renderer for A2UI (Agent-to-User Interface)","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.23.8","clsx":"^2.1.0","markdown-it":"^14.0.0","@a2ui/web_core":"^0.9.1-alpha.3","@a2ui/markdown-it":"^0.0.2-alpha.3"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^3.23.8","react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.9.0-alpha.3_1776167100671_0.7678642235135924","host":"s3://npm-registry-packages-npm-production"}},"0.9.0-alpha.4":{"name":"@a2ui/react","version":"0.9.0-alpha.4","keywords":["a2ui","react","ai","agent","ui","renderer"],"_id":"@a2ui/react@0.9.0-alpha.4","maintainers":[{"name":"a2ui-team","email":"a2ui-owners@google.com"},{"name":"ava-cassiopeia","email":"oss@avamattie.com"},{"name":"jsimionato","email":"jacob.simionato@gmail.com"}],"homepage":"https://a2ui.org/","bugs":{"url":"https://github.com/google/A2UI/issues"},"dist":{"shasum":"9b0858d3e51711c0c4159fcb263f83c69f85fadd","tarball":"https://registry.npmjs.org/@a2ui/react/-/react-0.9.0-alpha.4.tgz","fileCount":41,"integrity":"sha512-UvyY92OLp50cbKvv740nQdX0IAoX6IcYmDOdA743xkIaSgNQJbTGp5Rzrf/PFHlPvLraE4vheBGBhCxB7DDucg==","signatures":[{"sig":"MEYCIQC72RzqQPJKCVP86N08phq54kMPAPrNvkUCfkjVlsbHxwIhAJwobONvRsNTqKPBAuTIYbTyf9VK4Decc6TfPyIalsjI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":993993},"main":"./index.cjs","type":"module","_from":"file:/b/f/w/src/piper/google3/security/opensource/exit_gate_v1/kokoro/publisher/downloaded_artifacts/@a2ui/react/0.9.0-alpha.4/react-0.9.0-alpha.4.tgz","types":"./index.d.ts","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./index.js"},"require":{"types":"./index.d.cts","default":"./index.cjs"}},"./v0_8":{"import":{"types":"./v0_8/index.d.ts","default":"./v0_8/index.js"},"require":{"types":"./v0_8/index.d.cts","default":"./v0_8/index.cjs"}},"./v0_9":{"import":{"types":"./v0_9/index.d.ts","default":"./v0_9/index.js"},"require":{"types":"./v0_9/index.d.cts","default":"./v0_9/index.cjs"}},"./styles":{"import":{"types":"./styles/index.d.ts","default":"./styles/index.js"},"require":{"types":"./styles/index.d.cts","default":"./styles/index.cjs"}},"./styles/structural.css":"./structural.css"},"_npmUser":{"name":"a2ui-team","email":"a2ui-owners@google.com"},"_resolved":"/b/f/w/src/piper/google3/security/opensource/exit_gate_v1/kokoro/publisher/downloaded_artifacts/@a2ui/react/0.9.0-alpha.4/react-0.9.0-alpha.4.tgz","_integrity":"sha512-UvyY92OLp50cbKvv740nQdX0IAoX6IcYmDOdA743xkIaSgNQJbTGp5Rzrf/PFHlPvLraE4vheBGBhCxB7DDucg==","repository":{"url":"git+https://github.com/google/A2UI.git","type":"git","directory":"renderers/react"},"_npmVersion":"10.9.3","description":"React renderer for A2UI (Agent-to-User Interface)","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.23.8","clsx":"^2.1.0","markdown-it":"^14.0.0","@a2ui/web_core":"^0.9.1-alpha.4","@a2ui/markdown-it":"^0.0.2-alpha.4"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^3.23.8","react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.9.0-alpha.4_1776297152383_0.9426783059806105","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@a2ui/react","version":"0.9.0","keywords":["a2ui","react","ai","agent","ui","renderer"],"_id":"@a2ui/react@0.9.0","maintainers":[{"name":"a2ui-team","email":"a2ui-owners@google.com"},{"name":"ava-cassiopeia","email":"oss@avamattie.com"},{"name":"jsimionato","email":"jacob.simionato@gmail.com"}],"homepage":"https://a2ui.org/","bugs":{"url":"https://github.com/google/A2UI/issues"},"dist":{"shasum":"2208bcbb1484dcd7bd6b7eae3ea97c364ab2603e","tarball":"https://registry.npmjs.org/@a2ui/react/-/react-0.9.0.tgz","fileCount":41,"integrity":"sha512-zHefJ+G7K1Cfag8JJmcbJiC0xluqNayt05Yz9ZPjnSBO4KHY5lq3M5+VjIl5ixwR+m5gR56bygeNwjYGWL/5vA==","signatures":[{"sig":"MEQCIADfSasnkzPcLzT3z9Aqq55G9NwTpkLNC557fhfre4pJAiBKFtqfWtHJuMg3Z1NRWEOrsL4ATtiGL9cSsFg5Tg9FPw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":993969},"main":"./index.cjs","type":"module","_from":"file:/b/f/w/src/piper/google3/security/opensource/exit_gate_v1/kokoro/publisher/downloaded_artifacts/@a2ui/react/0.9.0/react-0.9.0.tgz","types":"./index.d.ts","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./index.js"},"require":{"types":"./index.d.cts","default":"./index.cjs"}},"./v0_8":{"import":{"types":"./v0_8/index.d.ts","default":"./v0_8/index.js"},"require":{"types":"./v0_8/index.d.cts","default":"./v0_8/index.cjs"}},"./v0_9":{"import":{"types":"./v0_9/index.d.ts","default":"./v0_9/index.js"},"require":{"types":"./v0_9/index.d.cts","default":"./v0_9/index.cjs"}},"./styles":{"import":{"types":"./styles/index.d.ts","default":"./styles/index.js"},"require":{"types":"./styles/index.d.cts","default":"./styles/index.cjs"}},"./styles/structural.css":"./structural.css"},"_npmUser":{"name":"a2ui-team","email":"a2ui-owners@google.com"},"_resolved":"/b/f/w/src/piper/google3/security/opensource/exit_gate_v1/kokoro/publisher/downloaded_artifacts/@a2ui/react/0.9.0/react-0.9.0.tgz","_integrity":"sha512-zHefJ+G7K1Cfag8JJmcbJiC0xluqNayt05Yz9ZPjnSBO4KHY5lq3M5+VjIl5ixwR+m5gR56bygeNwjYGWL/5vA==","repository":{"url":"git+https://github.com/google/A2UI.git","type":"git","directory":"renderers/react"},"_npmVersion":"10.9.3","description":"React renderer for A2UI (Agent-to-User Interface)","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.23.8","clsx":"^2.1.0","markdown-it":"^14.0.0","@a2ui/web_core":"^0.9.1","@a2ui/markdown-it":"^0.0.2"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^3.23.8","react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.9.0_1776316886584_0.04012503144405977","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@a2ui/react","version":"0.9.1","keywords":["a2ui","react","ai","agent","ui","renderer"],"_id":"@a2ui/react@0.9.1","maintainers":[{"name":"a2ui-team","email":"a2ui-owners@google.com"},{"name":"ava-cassiopeia","email":"oss@avamattie.com"},{"name":"jsimionato","email":"jacob.simionato@gmail.com"}],"homepage":"https://a2ui.org/","bugs":{"url":"https://github.com/google/A2UI/issues"},"dist":{"shasum":"ea8e3a3c7d3dca12921cb230ef06144d95454098","tarball":"https://registry.npmjs.org/@a2ui/react/-/react-0.9.1.tgz","fileCount":39,"integrity":"sha512-pz8Pd8tqsrwJZIhClgOvqrT20dHfe1gybvuZ+3lkqiR3MLMErk8jUWBCjiHLgJZ+azEp6IpP5zIZgGIvYWuezQ==","signatures":[{"sig":"MEYCIQDBDnJiVSaRiSrUW2/864Rkwl/3pgJoNM4cAEOMjuTFdQIhAK/N+r70pyrx11AEusMlbheA9R0YroWuOf7UPRP8M+mR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":994487},"main":"./index.cjs","type":"module","_from":"file:/b/f/w/src/piper/google3/security/opensource/exit_gate_v1/kokoro/publisher/downloaded_artifacts/@a2ui/react/0.9.1/react-0.9.1.tgz","types":"./index.d.ts","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./index.js"},"require":{"types":"./index.d.cts","default":"./index.cjs"}},"./v0_8":{"import":{"types":"./v0_8/index.d.ts","default":"./v0_8/index.js"},"require":{"types":"./v0_8/index.d.cts","default":"./v0_8/index.cjs"}},"./v0_9":{"import":{"types":"./v0_9/index.d.ts","default":"./v0_9/index.js"},"require":{"types":"./v0_9/index.d.cts","default":"./v0_9/index.cjs"}},"./styles":{"import":{"types":"./styles/index.d.ts","default":"./styles/index.js"},"require":{"types":"./styles/index.d.cts","default":"./styles/index.cjs"}},"./styles/structural.css":"./structural.css"},"_npmUser":{"name":"a2ui-team","email":"a2ui-owners@google.com"},"_resolved":"/b/f/w/src/piper/google3/security/opensource/exit_gate_v1/kokoro/publisher/downloaded_artifacts/@a2ui/react/0.9.1/react-0.9.1.tgz","_integrity":"sha512-pz8Pd8tqsrwJZIhClgOvqrT20dHfe1gybvuZ+3lkqiR3MLMErk8jUWBCjiHLgJZ+azEp6IpP5zIZgGIvYWuezQ==","repository":{"url":"git+https://github.com/google/A2UI.git","type":"git","directory":"renderers/react"},"_npmVersion":"10.9.3","description":"React renderer for A2UI (Agent-to-User Interface)","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.23.8","clsx":"^2.1.0","markdown-it":"^14.0.0","@a2ui/web_core":"^0.9.2","@a2ui/markdown-it":"^0.0.3"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^3.23.8","react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.9.1_1776425980774_0.1978681258333046","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@a2ui/react","version":"0.10.0","keywords":["a2ui","react","ai","agent","ui","renderer"],"license":"Apache-2.0","_id":"@a2ui/react@0.10.0","maintainers":[{"name":"a2ui-team","email":"a2ui-owners@google.com"},{"name":"ava-cassiopeia","email":"oss@avamattie.com"},{"name":"jsimionato","email":"jacob.simionato@gmail.com"}],"homepage":"https://a2ui.org/","bugs":{"url":"https://github.com/google/A2UI/issues"},"dist":{"shasum":"5694f44e95d58cbf0d9d6a84bd25b74294457a77","tarball":"https://registry.npmjs.org/@a2ui/react/-/react-0.10.0.tgz","fileCount":39,"integrity":"sha512-LeyrHUv7lNkLqrxr+qM2XybCB5ok/8gm5fVcs2foPiPV0KN6XtZGDKk23Kt3oitRHJp7vFOeyDD9y+UYWh4Y3A==","signatures":[{"sig":"MEYCIQCpfkGeh1urnwuFVNzvY7otNrctLSzags4Iq40xunyd7QIhAIA1hH5i5/n2e3kEZSJBUUkP1+aqYNFKRA4Dv1oTaEtZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1002327},"main":"./index.cjs","type":"module","_from":"file:/tmp/publishing-artifacts-1832313021/@a2ui/react/0.10.0/react-0.10.0.tgz","types":"./index.d.ts","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./index.js"},"require":{"types":"./index.d.cts","default":"./index.cjs"}},"./v0_8":{"import":{"types":"./v0_8/index.d.ts","default":"./v0_8/index.js"},"require":{"types":"./v0_8/index.d.cts","default":"./v0_8/index.cjs"}},"./v0_9":{"import":{"types":"./v0_9/index.d.ts","default":"./v0_9/index.js"},"require":{"types":"./v0_9/index.d.cts","default":"./v0_9/index.cjs"}},"./styles":{"import":{"types":"./styles/index.d.ts","default":"./styles/index.js"},"require":{"types":"./styles/index.d.cts","default":"./styles/index.cjs"}},"./styles/structural.css":"./structural.css"},"_npmUser":{"name":"a2ui-team","email":"a2ui-owners@google.com"},"_resolved":"/tmp/publishing-artifacts-1832313021/@a2ui/react/0.10.0/react-0.10.0.tgz","_integrity":"sha512-LeyrHUv7lNkLqrxr+qM2XybCB5ok/8gm5fVcs2foPiPV0KN6XtZGDKk23Kt3oitRHJp7vFOeyDD9y+UYWh4Y3A==","repository":{"url":"git+https://github.com/google/A2UI.git","type":"git","directory":"renderers/react"},"_npmVersion":"10.9.3","description":"React renderer for A2UI (Agent-to-User Interface)","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.23.8","clsx":"^2.1.0","markdown-it":"^14.0.0","@a2ui/web_core":"^0.10.0","@a2ui/markdown-it":"^0.0.4"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^3.23.8","react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_0.10.0_1778593744155_0.3136665593345409","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@a2ui/react","version":"0.10.1","keywords":["a2ui","react","ai","agent","ui","renderer"],"license":"Apache-2.0","_id":"@a2ui/react@0.10.1","maintainers":[{"name":"a2ui-team","email":"a2ui-owners@google.com"},{"name":"ava-cassiopeia","email":"oss@avamattie.com"},{"name":"jsimionato","email":"jacob.simionato@gmail.com"}],"homepage":"https://a2ui.org/","bugs":{"url":"https://github.com/a2ui-project/a2ui/issues"},"dist":{"shasum":"a3525584427d1e4fec46af1413feb8e5e8cc7c8d","tarball":"https://registry.npmjs.org/@a2ui/react/-/react-0.10.1.tgz","fileCount":40,"integrity":"sha512-m7rBhOKA2PNwrD9Q7kaJn+l2u0WLAmd/n0RmaUNkTRdzCTcSfEbcet5sbCHGpT7xu4TSp+ABWfowG+mcL7HAnQ==","signatures":[{"sig":"MEUCIQDFglPHOfkeNuJdKwgfOpxaJhdBQCIlGWGzYswZeMymtQIgSZ7MI0PsMaAvBvwzv/vZnuXts6tShtvj3TMhi21i+o0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1015279},"main":"./index.cjs","type":"module","_from":"file:/tmp/publishing-artifacts-2925057051/@a2ui/react/0.10.1/react-0.10.1.tgz","types":"./index.d.ts","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./index.js"},"require":{"types":"./index.d.cts","default":"./index.cjs"}},"./v0_8":{"import":{"types":"./v0_8/index.d.ts","default":"./v0_8/index.js"},"require":{"types":"./v0_8/index.d.cts","default":"./v0_8/index.cjs"}},"./v0_9":{"import":{"types":"./v0_9/index.d.ts","default":"./v0_9/index.js"},"require":{"types":"./v0_9/index.d.cts","default":"./v0_9/index.cjs"}},"./styles":{"import":{"types":"./styles/index.d.ts","default":"./styles/index.js"},"require":{"types":"./styles/index.d.cts","default":"./styles/index.cjs"}},"./styles/structural.css":"./structural.css"},"_npmUser":{"name":"a2ui-team","email":"a2ui-owners@google.com"},"_resolved":"/tmp/publishing-artifacts-2925057051/@a2ui/react/0.10.1/react-0.10.1.tgz","_integrity":"sha512-m7rBhOKA2PNwrD9Q7kaJn+l2u0WLAmd/n0RmaUNkTRdzCTcSfEbcet5sbCHGpT7xu4TSp+ABWfowG+mcL7HAnQ==","repository":{"url":"git+https://github.com/a2ui-project/a2ui.git","type":"git","directory":"renderers/react"},"_npmVersion":"10.9.3","description":"React renderer for A2UI (Agent-to-User Interface)","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.25.76","clsx":"^2.1.1","markdown-it":"^14.2.0","@a2ui/web_core":"^0.10.1","@a2ui/markdown-it":"^0.0.4"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^3.25.76","react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/react_0.10.1_1781664782163_0.12334972084476181","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"@a2ui/react","version":"0.10.2","keywords":["a2ui","react","ai","agent","ui","renderer"],"license":"Apache-2.0","_id":"@a2ui/react@0.10.2","maintainers":[{"name":"a2ui-team","email":"a2ui-owners@google.com"},{"name":"ava-cassiopeia","email":"oss@avamattie.com"},{"name":"jsimionato","email":"jacob.simionato@gmail.com"}],"homepage":"https://a2ui.org/","bugs":{"url":"https://github.com/a2ui-project/a2ui/issues"},"dist":{"shasum":"d2c97dbf28db5c1df62cfd0c55dd05f0834cf3ef","tarball":"https://registry.npmjs.org/@a2ui/react/-/react-0.10.2.tgz","fileCount":40,"integrity":"sha512-QDVs97a/sihcjE3DMnWbwB8bJKv1z2tn291m6+0w6+lXi8dfwnSiZilAgoQmLWjW4Oikv8OFh532NiQMqL/+nw==","signatures":[{"sig":"MEQCICD7E67QJleL/CaS1ZzAxMJEf37KBEZqFTqQDZnLDd4cAiB60ww0zpYcZ8MP4CLilLjwayZl70wIeH91YoaW/T/P5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1020915},"main":"./index.cjs","type":"module","_from":"file:/tmp/publishing-artifacts-3496818777/@a2ui/react/0.10.2/react-0.10.2.tgz","types":"./index.d.ts","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./index.js"},"require":{"types":"./index.d.cts","default":"./index.cjs"}},"./v0_8":{"import":{"types":"./v0_8/index.d.ts","default":"./v0_8/index.js"},"require":{"types":"./v0_8/index.d.cts","default":"./v0_8/index.cjs"}},"./v0_9":{"import":{"types":"./v0_9/index.d.ts","default":"./v0_9/index.js"},"require":{"types":"./v0_9/index.d.cts","default":"./v0_9/index.cjs"}},"./styles":{"import":{"types":"./styles/index.d.ts","default":"./styles/index.js"},"require":{"types":"./styles/index.d.cts","default":"./styles/index.cjs"}},"./styles/structural.css":"./structural.css"},"_npmUser":{"name":"a2ui-team","email":"a2ui-owners@google.com"},"_resolved":"/tmp/publishing-artifacts-3496818777/@a2ui/react/0.10.2/react-0.10.2.tgz","_integrity":"sha512-QDVs97a/sihcjE3DMnWbwB8bJKv1z2tn291m6+0w6+lXi8dfwnSiZilAgoQmLWjW4Oikv8OFh532NiQMqL/+nw==","repository":{"url":"git+https://github.com/a2ui-project/a2ui.git","type":"git","directory":"renderers/react"},"_npmVersion":"10.9.3","description":"React renderer for A2UI (Agent-to-User Interface)","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.25.76","clsx":"^2.1.1","markdown-it":"^14.2.0","@a2ui/web_core":"^0.10.5","@a2ui/markdown-it":"*"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^3.25.76","react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/react_0.10.2_1784311163078_0.9558992136909725","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@a2ui/react","version":"0.11.0","keywords":["a2ui","react","ai","agent","ui","renderer"],"license":"Apache-2.0","_id":"@a2ui/react@0.11.0","maintainers":[{"name":"a2ui-team","email":"a2ui-owners@google.com"},{"name":"ava-cassiopeia","email":"oss@avamattie.com"},{"name":"jsimionato","email":"jacob.simionato@gmail.com"}],"homepage":"https://a2ui.org/","bugs":{"url":"https://github.com/a2ui-project/a2ui/issues"},"dist":{"shasum":"2323306dcaa7fb0f93db0b22030db828934126ff","tarball":"https://registry.npmjs.org/@a2ui/react/-/react-0.11.0.tgz","fileCount":40,"integrity":"sha512-Bz5jOi3Fa/ku9KdxT+UY3UouhSJQ+7tskkVN2JH9fEnzv6PU+dHhBr/GBMlzSBjoBBqELDWKhjyesqnfUj9cbA==","signatures":[{"sig":"MEUCIQCm92oNOvjBlLG5wfUrv2xeTZXvP/7ahd9HIa4HQ1r4awIgY6VJecUieRYqzrf0/ejk8GruI33Cu46xH1an1gmCGUs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1043288},"main":"./index.cjs","type":"module","_from":"file:/tmp/publishing-artifacts-1490159711/@a2ui/react/0.11.0/react-0.11.0.tgz","types":"./index.d.ts","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./index.d.ts","default":"./index.js"},"require":{"types":"./index.d.cts","default":"./index.cjs"}},"./v0_8":{"import":{"types":"./v0_8/index.d.ts","default":"./v0_8/index.js"},"require":{"types":"./v0_8/index.d.cts","default":"./v0_8/index.cjs"}},"./v0_9":{"import":{"types":"./v0_9/index.d.ts","default":"./v0_9/index.js"},"require":{"types":"./v0_9/index.d.cts","default":"./v0_9/index.cjs"}},"./styles":{"import":{"types":"./styles/index.d.ts","default":"./styles/index.js"},"require":{"types":"./styles/index.d.cts","default":"./styles/index.cjs"}},"./styles/structural.css":"./structural.css"},"_npmUser":{"name":"a2ui-team","email":"a2ui-owners@google.com"},"_resolved":"/tmp/publishing-artifacts-1490159711/@a2ui/react/0.11.0/react-0.11.0.tgz","_integrity":"sha512-Bz5jOi3Fa/ku9KdxT+UY3UouhSJQ+7tskkVN2JH9fEnzv6PU+dHhBr/GBMlzSBjoBBqELDWKhjyesqnfUj9cbA==","repository":{"url":"git+https://github.com/a2ui-project/a2ui.git","type":"git","directory":"renderers/react"},"_npmVersion":"10.9.3","description":"React renderer for A2UI (Agent-to-User Interface)","directories":{},"sideEffects":["*.css"],"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.25.76","clsx":"^2.1.1","markdown-it":"^14.2.0","@a2ui/web_core":"^0.10.7","@a2ui/markdown-it":"*"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^3.25.76","react":"^19.2.7","react-dom":"^19.2.7"},"_npmOperationalInternal":{"tmp":"tmp/react_0.11.0_1788224695388_0.9604453063765797","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"@a2ui/react","version":"0.11.1","license":"Apache-2.0","description":"React renderer for A2UI (Agent-to-User Interface)","homepage":"https://a2ui.org/","repository":{"directory":"renderers/react","type":"git","url":"git+https://github.com/a2ui-project/a2ui.git"},"bugs":{"url":"https://github.com/a2ui-project/a2ui/issues"},"keywords":["a2ui","react","ai","agent","ui","renderer"],"type":"module","main":"./index.cjs","module":"./index.js","types":"./index.d.ts","exports":{".":{"import":{"types":"./index.d.ts","default":"./index.js"},"require":{"types":"./index.d.cts","default":"./index.cjs"}},"./v0_8":{"import":{"types":"./v0_8/index.d.ts","default":"./v0_8/index.js"},"require":{"types":"./v0_8/index.d.cts","default":"./v0_8/index.cjs"}},"./v0_9":{"import":{"types":"./v0_9/index.d.ts","default":"./v0_9/index.js"},"require":{"types":"./v0_9/index.d.cts","default":"./v0_9/index.cjs"}},"./styles":{"import":{"types":"./styles/index.d.ts","default":"./styles/index.js"},"require":{"types":"./styles/index.d.cts","default":"./styles/index.cjs"}},"./styles/structural.css":"./structural.css"},"sideEffects":["*.css"],"dependencies":{"@a2ui/markdown-it":"^0.1.2","@a2ui/web_core":"^0.11.0","clsx":"^2.1.1","markdown-it":"^14.2.0","zod":"^3.25.76"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","zod":"^3.25.76"},"engines":{"node":">=18.0.0"},"_id":"@a2ui/react@0.11.1","_integrity":"sha512-Tj4xZ3HCFSvNvKkkBEamUQ6cTKw+VBET51EwwbWr32Bxi/c7R3uQ7lBzlHDr0PjEo9m3aKuQB4hW9aF5H5Hn1A==","_resolved":"/tmp/publishing-artifacts-4230183451/@a2ui/react/0.11.1/react-0.11.1.tgz","_from":"file:/tmp/publishing-artifacts-4230183451/@a2ui/react/0.11.1/react-0.11.1.tgz","_nodeVersion":"22.18.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-Tj4xZ3HCFSvNvKkkBEamUQ6cTKw+VBET51EwwbWr32Bxi/c7R3uQ7lBzlHDr0PjEo9m3aKuQB4hW9aF5H5Hn1A==","shasum":"4e19318cc1a7858c58573e00b5188798c0f52a2f","tarball":"https://registry.npmjs.org/@a2ui/react/-/react-0.11.1.tgz","fileCount":40,"unpackedSize":1043875,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAf/2oc2f4aW7LVEmx75Fl/5hhi/fZlJFwvQ8i+Fw6bwAiEAv1AKTc6t/uOV8582Wczng0yrODhZtOhX1LAxtttQ08Y="}]},"_npmUser":{"name":"a2ui-team","email":"a2ui-owners@google.com"},"directories":{},"maintainers":[{"name":"a2ui-team","email":"a2ui-owners@google.com"},{"name":"ava-cassiopeia","email":"oss@avamattie.com"},{"name":"jsimionato","email":"jacob.simionato@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react_0.11.1_1789172519666_0.20114265194731362"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-17T23:40:47.952Z","modified":"2026-09-12T00:21:59.959Z","0.8.0":"2026-03-17T23:40:48.241Z","0.9.0-alpha.0":"2026-04-09T07:25:51.570Z","0.9.0-alpha.1":"2026-04-14T10:27:57.925Z","0.9.0-alpha.2":"2026-04-14T11:26:01.917Z","0.9.0-alpha.3":"2026-04-14T11:45:00.860Z","0.9.0-alpha.4":"2026-04-15T23:52:32.560Z","0.9.0":"2026-04-16T05:21:26.766Z","0.9.1":"2026-04-17T11:39:40.953Z","0.10.0":"2026-05-12T13:49:04.367Z","0.10.1":"2026-06-17T02:53:02.331Z","0.10.2":"2026-07-17T17:59:23.247Z","0.11.0":"2026-09-01T01:04:55.529Z","0.11.1":"2026-09-12T00:21:59.816Z"},"bugs":{"url":"https://github.com/a2ui-project/a2ui/issues"},"license":"Apache-2.0","homepage":"https://a2ui.org/","keywords":["a2ui","react","ai","agent","ui","renderer"],"repository":{"directory":"renderers/react","type":"git","url":"git+https://github.com/a2ui-project/a2ui.git"},"description":"React renderer for A2UI (Agent-to-User Interface)","maintainers":[{"name":"a2ui-team","email":"a2ui-owners@google.com"},{"name":"ava-cassiopeia","email":"oss@avamattie.com"},{"name":"jsimionato","email":"jacob.simionato@gmail.com"}],"readme":"# @a2ui/react\n\nReact renderer for A2UI (Agent-to-User Interface) - enables AI agents to\ngenerate rich, interactive user interfaces through declarative JSON.\n\n## Features\n\n- **v0.9 Native**: Built specifically for the A2UI v0.9 protocol with improved modularity and type safety.\n- **Deep Reactivity**: Powered by the A2UI Generic Binder for automatic, fine-grained updates.\n- **Strongly Typed**: Inferred property types from Zod schemas ensure compile-time safety.\n- **Extensible**: Easily define custom component catalogs and logic functions.\n- **Multi-Surface**: Built-in support for managing independent UI surfaces.\n\n## Installation\n\n```bash\nyarn add @a2ui/react @a2ui/web_core\n```\n\n## Protocol Versioning\n\nA2UI supports multiple protocol versions to ensure backward compatibility. For new projects, it is recommended to use the **v0.9** protocol.\n\nTo use the v0.9 implementation, import from the versioned path:\n\n```typescript\nimport {A2uiSurface, basicCatalog} from '@a2ui/react/v0_9';\n```\n\n## Quick Start\n\nThe React renderer works alongside the `MessageProcessor` from `@a2ui/web_core`. The processor interprets JSON messages from an AI agent and manages the resulting UI state. The core concepts are:\n\n- **Processor** — receives and interprets the agent's messages.\n- **Surface** — an independent rendering area, uniquely identified by a string ID, that the agent creates and populates with components.\n- **Catalog** — the set of components (e.g. `Text`, `Column`, `Button`) available for a surface to use.\n\nThe example below creates a processor with the built-in `basicCatalog`, feeds it a sequence of hardcoded messages, and renders the resulting surface.\n\n```tsx\nimport {useState, useEffect} from 'react';\nimport {MessageProcessor} from '@a2ui/web_core/v0_9';\nimport {A2uiSurface, basicCatalog} from '@a2ui/react/v0_9';\n\nexport default function App() {\n  // 1. Create the processor and feed it messages.\n  const [processor] = useState(() => {\n    const p = new MessageProcessor([basicCatalog]);\n    p.processMessages(sampleAgentMessages);\n    return p;\n  });\n\n  // 2. Set up listeners to keep the UI up to date as messages arrive.\n  const [surfaces, setSurfaces] = useState(() => Array.from(processor.model.surfacesMap.values()));\n  useEffect(() => {\n    const sync = () => setSurfaces(Array.from(processor.model.surfacesMap.values()));\n\n    const createdSub = processor.onSurfaceCreated(sync);\n    const deletedSub = processor.onSurfaceDeleted(sync);\n\n    return () => {\n      createdSub.unsubscribe();\n      deletedSub.unsubscribe();\n    };\n  }, [processor]);\n\n  // 3. Render every surface the agent has created.\n  return (\n    <div className=\"a2ui-container\">\n      {surfaces.length === 0 && <div>Waiting for agent...</div>}\n      {surfaces.map(surface => (\n        <A2uiSurface key={surface.id} surface={surface} />\n      ))}\n    </div>\n  );\n}\n\n// In a real app, these messages would come from an agent via WebSocket, SSE, etc.\n// Here we hardcode them to show the message format.\nconst sampleAgentMessages = [\n  {\n    version: 'v0.9' as const,\n    createSurface: {surfaceId: 'main-chat', catalogId: basicCatalog.id},\n  },\n  {\n    version: 'v0.9' as const,\n    updateComponents: {\n      surfaceId: 'main-chat',\n      components: [\n        {id: 'root', component: 'Column', children: ['greeting', 'description']},\n        {id: 'greeting', component: 'Text', text: {path: '/title'}},\n        {id: 'description', component: 'Text', text: {path: '/body'}},\n      ],\n    },\n  },\n  {\n    version: 'v0.9' as const,\n    updateDataModel: {\n      surfaceId: 'main-chat',\n      path: '/',\n      value: {\n        title: 'Hello from A2UI!',\n        body: 'Replace these messages with real agent responses to build interactive UIs.',\n      },\n    },\n  },\n];\n```\n\nRunning this example should display \"Hello from A2UI!\". The example demonstrates three message types:\n\n- [`createSurface`](../../specification/v0_9/docs/a2ui_protocol.md#createsurface) initializes the rendering surface.\n- [`updateComponents`](../../specification/v0_9/docs/a2ui_protocol.md#updatecomponents) defines the UI tree. Here, a `Column` containing two `Text` components.\n- [`updateDataModel`](../../specification/v0_9/docs/a2ui_protocol.md#updatedatamodel) provides the data that the components reference via [`path` bindings](../../specification/v0_9/docs/a2ui_protocol.md#path-resolution--scope) (e.g. `{ path: '/title' }` resolves to the `title` field in the data model).\n\n## Defining Custom Components\n\nA2UI v0.9 strictly separates a component's API (Schema) from its implementation.\n\n### 1. Define the Component API\n\nUse Zod to define the properties. Using `CommonSchemas` from `web_core` enables automatic binding for A2UI primitives.\n\n```typescript\nimport {z} from 'zod';\nimport {CommonSchemas} from '@a2ui/web_core/v0_9';\n\nexport const MyProfileApi = {\n  name: 'Profile',\n  schema: z.object({\n    username: CommonSchemas.DynamicString, // Can be literal \"Alice\" or {path: \"/user/name\"}\n    bio: CommonSchemas.DynamicString,\n    avatarUrl: CommonSchemas.DynamicString,\n    onEdit: CommonSchemas.Action, // Resolves to a clickable () => void\n    isEditable: CommonSchemas.DynamicBoolean,\n    // Add 'checks' if you want validation support (standard in v0.9 interactive components)\n    checks: CommonSchemas.Checkable.shape.checks,\n  }),\n};\n```\n\n### 2. Create the React Implementation\n\nThe `createComponentImplementation` factory uses a **Generic Binder** to resolve all dynamic values before your component renders.\n\n```tsx\nimport {createComponentImplementation} from '@a2ui/react/v0_9';\n\nexport const MyProfile = createComponentImplementation(MyProfileApi, ({props, buildChild}) => {\n  // 'props' is strictly inferred from the Zod schema:\n  // props.username is 'string' (resolved from DynamicString)\n  // props.onEdit is '() => void' (resolved from Action)\n\n  return (\n    <div className=\"profile-widget\">\n      <img src={props.avatarUrl ?? ''} alt={props.username} />\n      <h2>{props.username}</h2>\n      <p>{props.bio}</p>\n\n      {props.isEditable && (\n        <button onClick={props.onEdit} disabled={props.isValid === false}>\n          Edit Profile\n        </button>\n      )}\n\n      {/* Render validation errors if any check fails */}\n      {props.validationErrors?.map((err, i) => (\n        <div key={i} className=\"error-hint\" style={{color: 'red'}}>\n          {err}\n        </div>\n      ))}\n    </div>\n  );\n});\n```\n\n## Generic Binder Features\n\nThe Generic Binder is a framework-agnostic engine that transforms raw JSON payload configurations into a cohesive reactive stream of strongly-typed props.\n\n- **Automatic Resolution**: Properties typed as `DynamicString`, `DynamicNumber`, and `DynamicBoolean` are automatically resolved to their current values (strings, numbers, booleans).\n- **Two-Way Binding**: If a schema uses a dynamic type (like `DynamicString`), the binder automatically injects a setter. For a property `username`, it adds `props.setUsername(val: string)`, which updates the underlying data model.\n- **Action Context**: `Action` properties are resolved into ready-to-call functions. When called, they automatically resolve their deep context bindings (e.g., gathering form data from the model) before notifying the server.\n- **Reactive Validation**: If your schema includes `checks`, the binder reactively evaluates the rules and injects `props.isValid` and `props.validationErrors` based on the results of the logic functions.\n\n## Binderless Components\n\nFor advanced use cases where you need direct access to the `ComponentContext` or want to manage reactivity manually (e.g., for performance-critical animations), use `createBinderlessComponentImplementation`.\n\n```tsx\nimport {createBinderlessComponentImplementation} from '@a2ui/react/v0_9';\n\nexport const RawInspector = createBinderlessComponentImplementation(InspectorApi, ({context}) => {\n  // Access the raw, unresolved component model and the data model directly\n  const rawData = context.componentModel.properties;\n  const componentId = context.componentModel.id;\n\n  return (\n    <details>\n      <summary>Raw Component State (ID: {componentId})</summary>\n      <pre>{JSON.stringify(rawData, null, 2)}</pre>\n    </details>\n  );\n});\n```\n\n## Defining Catalogs and Functions\n\nGroup your components and logic functions into a `Catalog` to be used by the `MessageProcessor`.\n\n```typescript\nimport {Catalog, createFunctionImplementation} from '@a2ui/web_core/v0_9';\nimport {z} from 'zod';\n\n// 1. Implement a custom logic function\nconst myCheckFunc = createFunctionImplementation(\n  {\n    name: 'is_admin',\n    returnType: 'boolean',\n    schema: z.object({role: z.string()}),\n  },\n  args => args.role === 'admin',\n);\n\n// 2. Compose the catalog\nexport const myCatalog = new Catalog(\n  'https://example.com/catalogs/v1.json',\n  [MyProfile, RawInspector], // List of ReactComponentImplementation\n  [myCheckFunc], // List of FunctionImplementation\n);\n```\n\n## Basic Catalog Components\n\nThe `@a2ui/react/v0_9` package includes a `basicCatalog` with standard components:\n\n- **Layout**: `Row`, `Column`, `List`, `Card`, `Tabs`, `Modal`, `Divider`\n- **Content**: `Text`, `Image`, `Icon`, `Video`, `AudioPlayer`\n- **Input**: `Button`, `TextField`, `CheckBox`, `ChoicePicker`, `Slider`, `DateTimeInput`\n\n## Styling and CSS Modules\n\nThe basic catalog components are designed to be self-contained and styled using CSS variables exposed from `@a2ui/web_core`.\n\nSome components in this package (like `Text`) use **CSS Modules** for style encapsulation. Most modern React environments (like Vite, Next.js, and Create React App) support CSS Modules out of the box. If you are using a custom build setup, you must ensure it is configured to handle `.module.css` files (e.g., using `css-loader` with modules enabled in Webpack).\n\nYou can also use CSS Modules for styling your custom components or extending the basic catalog:\n\n```css\n/* MyComponent.module.css */\n.myComponent {\n  display: flex;\n  gap: var(--a2ui-spacing-m, 8px);\n}\n\n/* Use :global to target nested elements (like those generated by Markdown) */\n.myComponent :global(p) {\n  color: var(--a2ui-color-on-background);\n}\n```\n\n```tsx\nimport styles from './MyComponent.module.css';\n\nexport const MyComponent = createComponentImplementation(MyComponentApi, ({props}) => {\n  return <div className={styles.myComponent}>{/* ... */}</div>;\n});\n```\n\n---\n\n## Legacy Support (v0.8)\n\nA2UI v0.8 is maintained for backward compatibility. While it remains the default export for the `@a2ui/react` package, it is recommended to transition to v0.9 for new features like type-safe binders and logic functions.\n\n### Import and Usage\n\nTo use the v0.8 renderer, you use the `A2UIProvider` and `A2UIRenderer` components:\n\n```tsx\nimport {A2UIProvider, A2UIRenderer, injectStyles} from '@a2ui/react/v0_8';\n\n// Inject v0.8 styles\ninjectStyles();\n\nfunction LegacyApp() {\n  const handleAction = msg => console.log('Action:', msg);\n\n  return (\n    <A2UIProvider onAction={handleAction}>\n      {/* Renders the surface using v0.8 logic */}\n      <A2UIRenderer surfaceId=\"main\" />\n    </A2UIProvider>\n  );\n}\n```\n\n### Key Differences (v0.8 vs v0.9)\n\n| Feature         | v0.8 (Legacy)                           | v0.9 (Current)                                                   |\n| :-------------- | :-------------------------------------- | :--------------------------------------------------------------- |\n| **Protocol**    | Uses `BeginRendering`, `SurfaceUpdate`. | Uses `createSurface`, `updateComponents`, `updateDataModel`.     |\n| **Data Flow**   | Unidirectional surface updates.         | Bidirectional synchronization (`sendDataModel`).                 |\n| **Type Safety** | Props accessed via `node.properties`.   | Strongly typed `props` inferred from Zod schemas.                |\n| **Logic**       | Limited client-side logic.              | Extensible `Function` system (e.g., `formatString`, `required`). |\n| **Reactivity**  | Hooks-based (`useA2UIComponent`).       | Automatic via the **Generic Binder** middleware.                 |\n| **Binding**     | Manual resolution in component body.    | Declarative two-way binding with injected setters.               |\n\nIn v0.8, components are responsible for resolving their own dynamic values using hooks:\n\n```tsx\n// v0.8 Manual Resolution\nfunction TextField({node, surfaceId}) {\n  const {resolveString, setValue} = useA2UIComponent(node, surfaceId);\n  const label = resolveString(node.properties.label);\n  // ...\n}\n```\n\nIn v0.9, this is handled by the **Generic Binder** before the component even renders, resulting in cleaner, framework-native view code.\n\n## Security\n\n> [!IMPORTANT]\n> The sample code provided is for demonstration purposes and illustrates the mechanics of A2UI. When building production applications, it is critical to treat any agent operating outside of your direct control as a potentially untrusted entity.\n\nAll operational data received from an external agent—including its messages and UI definitions—should be handled as untrusted input. Malicious agents could attempt to spoof legitimate interfaces to deceive users (phishing), inject malicious scripts via property values (XSS), or generate excessive layout complexity to degrade client performance (DoS). If your application supports optional embedded content (such as iframes or web views), additional care must be taken to prevent exposure to malicious external sites.\n\n**Developer Responsibility**: Failure to properly validate data and strictly sandbox rendered content can introduce severe vulnerabilities. Developers are responsible for implementing appropriate security measures—such as input sanitization, Content Security Policies (CSP), and secure credential handling—to protect their systems and users.\n\n## Development\n\n### Setup\n\n```bash\n# In the A2UI monorepo root\nyarn install\n```\n\n### Build\n\n```bash\nyarn build    # Build the package\nyarn dev      # Watch mode\n```\n\n### Type Check\n\n```bash\nyarn typecheck\n```\n\n### Lint\n\n```bash\nyarn lint\n```\n\n## Testing\n\n### Unit Tests\n\nUses [Vitest](https://vitest.dev/) +\n[React Testing Library](https://testing-library.com/docs/react-testing-library/intro/).\n\n```bash\nyarn test              # Run once\nyarn test:watch    # Watch mode\n```\n\n**Structure:** `tests/ ├── setup.ts # Initializes component catalog ├──\nhelpers.tsx # TestWrapper, TestRenderer, message creators └── components/ #\nComponent tests (*.test.tsx)`\n\n**Example:** ```tsx import { render, screen, fireEvent } from\n'@testing-library/react'; import { TestWrapper, TestRenderer,\ncreateSimpleMessages } from '../helpers';\n\nit('should dispatch action on click', () => { const onAction = vi.fn(); const\nmessages = createSimpleMessages('btn-1', 'Button', { child: 'text-1', action: {\nname: 'submit' }, });\n\nrender( <TestWrapper onAction={onAction}> <TestRenderer messages={messages} />\n</TestWrapper> );\n\nfireEvent.click(screen.getByRole('button'));\nexpect(onAction).toHaveBeenCalled(); }); ```\n\n## Visual Parity Testing\n\nThe React renderer maintains visual parity with the Lit renderer (reference\nimplementation). A comprehensive test suite compares pixel-perfect screenshots\nbetween both renderers.\n\n### Running Visual Parity Tests\n\n```bash\ncd visual-parity\nyarn test\n```\n\n### Quick Commands\n\n```bash\n# Run all tests\nyarn test\n\n# Run specific component tests\nyarn test --grep \"button\"\n\n# Run with UI mode\nyarn test:ui\n\n# Start dev servers for manual inspection\nyarn dev\n# React: http://localhost:5001\n# Lit: http://localhost:5002\n```\n\n### Documentation\n\n- **[visual-parity/README.md](./visual-parity/README.md)** - Test suite usage\n  and fixture creation\n- **[visual-parity/PARITY.md](./visual-parity/PARITY.md)** - CSS\n  transformation approach and implementation status\n\n### Key Concepts\n\n1.  **Structural Mirroring**: React components mirror Lit's Shadow DOM structure\n2.  **CSS Selector Transformation**: `:host` → `.a2ui-surface .a2ui-{component}`\n3.  **Specificity Matching**: Uses `:where()` to match Lit's low specificity\n","readmeFilename":"README.md"}