@easyops-cn/a2ui-react 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (604) hide show
  1. package/dist/0.8/A2UIRenderer.d.ts +49 -0
  2. package/dist/0.8/A2UIRenderer.test.d.ts +6 -0
  3. package/dist/0.8/components/ComponentRenderer.d.ts +39 -0
  4. package/dist/0.8/components/ComponentRenderer.test.d.ts +6 -0
  5. package/dist/0.8/components/UnknownComponent.d.ts +18 -0
  6. package/dist/0.8/components/display/AudioPlayerComponent.d.ts +5 -0
  7. package/dist/0.8/components/display/DividerComponent.d.ts +5 -0
  8. package/dist/0.8/components/display/IconComponent.d.ts +5 -0
  9. package/dist/0.8/components/display/ImageComponent.d.ts +6 -0
  10. package/dist/0.8/components/display/TextComponent.d.ts +6 -0
  11. package/dist/0.8/components/display/VideoComponent.d.ts +5 -0
  12. package/dist/0.8/components/display/display.test.d.ts +7 -0
  13. package/dist/0.8/components/display/index.d.ts +9 -0
  14. package/dist/0.8/components/index.d.ts +7 -0
  15. package/dist/0.8/components/interactive/ButtonComponent.d.ts +5 -0
  16. package/dist/0.8/components/interactive/CheckBoxComponent.d.ts +5 -0
  17. package/dist/0.8/components/interactive/DateTimeInputComponent.d.ts +5 -0
  18. package/dist/0.8/components/interactive/MultipleChoiceComponent.d.ts +7 -0
  19. package/dist/0.8/components/interactive/SliderComponent.d.ts +5 -0
  20. package/dist/0.8/components/interactive/TextFieldComponent.d.ts +5 -0
  21. package/dist/0.8/components/interactive/index.d.ts +9 -0
  22. package/dist/0.8/components/interactive/interactive.test.d.ts +7 -0
  23. package/dist/0.8/components/layout/CardComponent.d.ts +5 -0
  24. package/dist/0.8/components/layout/ColumnComponent.d.ts +5 -0
  25. package/dist/0.8/components/layout/ListComponent.d.ts +5 -0
  26. package/dist/0.8/components/layout/ModalComponent.d.ts +5 -0
  27. package/dist/0.8/components/layout/RowComponent.d.ts +5 -0
  28. package/dist/0.8/components/layout/TabsComponent.d.ts +5 -0
  29. package/dist/0.8/components/layout/index.d.ts +9 -0
  30. package/dist/0.8/components/layout/layout.test.d.ts +7 -0
  31. package/dist/0.8/contexts/A2UIProvider.d.ts +34 -0
  32. package/dist/0.8/contexts/A2UIProvider.test.d.ts +6 -0
  33. package/dist/0.8/contexts/ActionContext.d.ts +33 -0
  34. package/dist/0.8/contexts/ActionContext.test.d.ts +6 -0
  35. package/dist/0.8/contexts/ComponentsMapContext.d.ts +63 -0
  36. package/dist/0.8/contexts/DataModelContext.d.ts +43 -0
  37. package/dist/0.8/contexts/DataModelContext.test.d.ts +6 -0
  38. package/dist/0.8/contexts/SurfaceContext.d.ts +45 -0
  39. package/dist/0.8/contexts/SurfaceContext.test.d.ts +6 -0
  40. package/dist/0.8/hooks/useA2UIMessageHandler.d.ts +41 -0
  41. package/dist/0.8/hooks/useA2UIMessageHandler.test.d.ts +6 -0
  42. package/{src/0.8/hooks/useComponent.ts → dist/0.8/hooks/useComponent.d.ts} +2 -18
  43. package/dist/0.8/hooks/useComponent.test.d.ts +6 -0
  44. package/dist/0.8/hooks/useDataBinding.d.ts +50 -0
  45. package/dist/0.8/hooks/useDataBinding.test.d.ts +6 -0
  46. package/{src/0.8/hooks/useDispatchAction.ts → dist/0.8/hooks/useDispatchAction.d.ts} +2 -15
  47. package/dist/0.8/hooks/useDispatchAction.test.d.ts +6 -0
  48. package/{src/0.8/hooks/useSurface.ts → dist/0.8/hooks/useSurface.d.ts} +2 -15
  49. package/dist/0.8/hooks/useSurface.test.d.ts +6 -0
  50. package/{src/0.8/index.ts → dist/0.8/index.d.ts} +5 -19
  51. package/{src/0.8/types/index.ts → dist/0.8/types/index.d.ts} +128 -213
  52. package/dist/0.8/utils/dataBinding.d.ts +95 -0
  53. package/dist/0.8/utils/dataBinding.test.d.ts +6 -0
  54. package/dist/0.8/utils/pathUtils.d.ts +63 -0
  55. package/dist/0.8/utils/pathUtils.test.d.ts +6 -0
  56. package/dist/a2ui-react.js +4 -0
  57. package/dist/a2ui-react10.js +54 -0
  58. package/dist/a2ui-react100.js +24 -0
  59. package/dist/a2ui-react101.js +255 -0
  60. package/dist/a2ui-react102.js +163 -0
  61. package/dist/a2ui-react103.js +19 -0
  62. package/dist/a2ui-react104.js +251 -0
  63. package/dist/a2ui-react105.js +61 -0
  64. package/dist/a2ui-react106.js +35 -0
  65. package/dist/a2ui-react107.js +436 -0
  66. package/dist/a2ui-react108.js +16 -0
  67. package/dist/a2ui-react109.js +234 -0
  68. package/dist/a2ui-react11.js +9 -0
  69. package/dist/a2ui-react110.js +6 -0
  70. package/dist/a2ui-react111.js +6 -0
  71. package/dist/a2ui-react112.js +6 -0
  72. package/dist/a2ui-react113.js +239 -0
  73. package/dist/a2ui-react114.js +845 -0
  74. package/dist/a2ui-react115.js +6 -0
  75. package/dist/a2ui-react116.js +10 -0
  76. package/dist/a2ui-react117.js +8 -0
  77. package/dist/a2ui-react118.js +8 -0
  78. package/dist/a2ui-react119.js +20 -0
  79. package/dist/a2ui-react12.js +32 -0
  80. package/dist/a2ui-react120.js +8 -0
  81. package/dist/a2ui-react121.js +8 -0
  82. package/dist/a2ui-react122.js +9 -0
  83. package/dist/a2ui-react123.js +16 -0
  84. package/dist/a2ui-react124.js +18 -0
  85. package/dist/a2ui-react125.js +11 -0
  86. package/dist/a2ui-react126.js +9 -0
  87. package/dist/a2ui-react127.js +13 -0
  88. package/dist/a2ui-react128.js +17 -0
  89. package/dist/a2ui-react129.js +8 -0
  90. package/dist/a2ui-react13.js +36 -0
  91. package/dist/a2ui-react130.js +17 -0
  92. package/dist/a2ui-react131.js +8 -0
  93. package/dist/a2ui-react132.js +10 -0
  94. package/dist/a2ui-react133.js +9 -0
  95. package/dist/a2ui-react134.js +7 -0
  96. package/dist/a2ui-react135.js +9 -0
  97. package/dist/a2ui-react136.js +548 -0
  98. package/dist/a2ui-react137.js +49 -0
  99. package/dist/a2ui-react138.js +20 -0
  100. package/dist/a2ui-react139.js +21 -0
  101. package/dist/a2ui-react14.js +114 -0
  102. package/dist/a2ui-react140.js +11 -0
  103. package/dist/a2ui-react141.js +9 -0
  104. package/dist/a2ui-react142.js +10 -0
  105. package/dist/a2ui-react143.js +8 -0
  106. package/dist/a2ui-react144.js +9 -0
  107. package/dist/a2ui-react145.js +12 -0
  108. package/dist/a2ui-react146.js +8 -0
  109. package/dist/a2ui-react147.js +11 -0
  110. package/dist/a2ui-react148.js +15 -0
  111. package/dist/a2ui-react149.js +8 -0
  112. package/dist/a2ui-react15.js +18 -0
  113. package/dist/a2ui-react150.js +12 -0
  114. package/dist/a2ui-react151.js +10 -0
  115. package/dist/a2ui-react152.js +12 -0
  116. package/dist/a2ui-react153.js +16 -0
  117. package/dist/a2ui-react154.js +8 -0
  118. package/dist/a2ui-react155.js +8 -0
  119. package/dist/a2ui-react156.js +8 -0
  120. package/dist/a2ui-react157.js +7 -0
  121. package/dist/a2ui-react158.js +14 -0
  122. package/dist/a2ui-react159.js +13 -0
  123. package/dist/a2ui-react16.js +19 -0
  124. package/dist/a2ui-react160.js +13 -0
  125. package/dist/a2ui-react161.js +14 -0
  126. package/dist/a2ui-react162.js +14 -0
  127. package/dist/a2ui-react163.js +35 -0
  128. package/dist/a2ui-react164.js +67 -0
  129. package/dist/a2ui-react165.js +11 -0
  130. package/dist/a2ui-react166.js +11 -0
  131. package/dist/a2ui-react167.js +10 -0
  132. package/dist/a2ui-react168.js +13 -0
  133. package/dist/a2ui-react169.js +10 -0
  134. package/dist/a2ui-react17.js +18 -0
  135. package/dist/a2ui-react170.js +10 -0
  136. package/dist/a2ui-react171.js +9 -0
  137. package/dist/a2ui-react172.js +17 -0
  138. package/dist/a2ui-react173.js +21 -0
  139. package/dist/a2ui-react174.js +18 -0
  140. package/dist/a2ui-react175.js +35 -0
  141. package/dist/a2ui-react176.js +14 -0
  142. package/dist/a2ui-react177.js +7 -0
  143. package/dist/a2ui-react178.js +58 -0
  144. package/dist/a2ui-react179.js +25 -0
  145. package/dist/a2ui-react18.js +58 -0
  146. package/dist/a2ui-react180.js +43 -0
  147. package/dist/a2ui-react181.js +63 -0
  148. package/dist/a2ui-react182.js +34 -0
  149. package/dist/a2ui-react183.js +15 -0
  150. package/dist/a2ui-react184.js +67 -0
  151. package/dist/a2ui-react185.js +67 -0
  152. package/dist/a2ui-react186.js +69 -0
  153. package/dist/a2ui-react187.js +69 -0
  154. package/dist/a2ui-react188.js +42 -0
  155. package/dist/a2ui-react189.js +43 -0
  156. package/dist/a2ui-react19.js +58 -0
  157. package/dist/a2ui-react190.js +55 -0
  158. package/dist/a2ui-react191.js +45 -0
  159. package/dist/a2ui-react192.js +41 -0
  160. package/dist/a2ui-react193.js +72 -0
  161. package/dist/a2ui-react194.js +72 -0
  162. package/dist/a2ui-react195.js +97 -0
  163. package/dist/a2ui-react196.js +42 -0
  164. package/dist/a2ui-react197.js +42 -0
  165. package/dist/a2ui-react198.js +42 -0
  166. package/dist/a2ui-react199.js +27 -0
  167. package/dist/a2ui-react2.js +11 -0
  168. package/dist/a2ui-react20.js +51 -0
  169. package/dist/a2ui-react200.js +26 -0
  170. package/dist/a2ui-react201.js +26 -0
  171. package/dist/a2ui-react202.js +27 -0
  172. package/dist/a2ui-react203.js +26 -0
  173. package/dist/a2ui-react204.js +26 -0
  174. package/dist/a2ui-react205.js +16 -0
  175. package/dist/a2ui-react206.js +41 -0
  176. package/dist/a2ui-react207.js +41 -0
  177. package/dist/a2ui-react208.js +16 -0
  178. package/dist/a2ui-react209.js +16 -0
  179. package/dist/a2ui-react21.js +14 -0
  180. package/dist/a2ui-react210.js +32 -0
  181. package/dist/a2ui-react211.js +32 -0
  182. package/dist/a2ui-react212.js +6 -0
  183. package/dist/a2ui-react213.js +9 -0
  184. package/dist/a2ui-react214.js +50 -0
  185. package/dist/a2ui-react215.js +29 -0
  186. package/dist/a2ui-react216.js +68 -0
  187. package/dist/a2ui-react217.js +10 -0
  188. package/dist/a2ui-react218.js +127 -0
  189. package/dist/a2ui-react219.js +17 -0
  190. package/dist/a2ui-react22.js +29 -0
  191. package/dist/a2ui-react220.js +136 -0
  192. package/dist/a2ui-react221.js +13 -0
  193. package/dist/a2ui-react222.js +219 -0
  194. package/dist/a2ui-react223.js +15 -0
  195. package/dist/a2ui-react224.js +36 -0
  196. package/dist/a2ui-react225.js +49 -0
  197. package/dist/a2ui-react226.js +10 -0
  198. package/dist/a2ui-react227.js +52 -0
  199. package/dist/a2ui-react228.js +6 -0
  200. package/dist/a2ui-react229.js +8 -0
  201. package/dist/a2ui-react23.js +25 -0
  202. package/dist/a2ui-react230.js +30 -0
  203. package/dist/a2ui-react231.js +52 -0
  204. package/dist/a2ui-react232.js +11 -0
  205. package/dist/a2ui-react233.js +70 -0
  206. package/dist/a2ui-react234.js +49 -0
  207. package/dist/a2ui-react235.js +27 -0
  208. package/dist/a2ui-react236.js +49 -0
  209. package/dist/a2ui-react237.js +183 -0
  210. package/dist/a2ui-react238.js +70 -0
  211. package/dist/a2ui-react239.js +33 -0
  212. package/dist/a2ui-react24.js +29 -0
  213. package/dist/a2ui-react240.js +11 -0
  214. package/dist/a2ui-react241.js +155 -0
  215. package/dist/a2ui-react242.js +110 -0
  216. package/dist/a2ui-react243.js +22 -0
  217. package/dist/a2ui-react244.js +100 -0
  218. package/dist/a2ui-react245.js +49 -0
  219. package/dist/a2ui-react246.js +14 -0
  220. package/dist/a2ui-react247.js +208 -0
  221. package/dist/a2ui-react248.js +24 -0
  222. package/dist/a2ui-react249.js +402 -0
  223. package/dist/a2ui-react25.js +27 -0
  224. package/dist/a2ui-react250.js +49 -0
  225. package/dist/a2ui-react251.js +49 -0
  226. package/dist/a2ui-react252.js +54 -0
  227. package/dist/a2ui-react253.js +7 -0
  228. package/dist/a2ui-react254.js +7 -0
  229. package/dist/a2ui-react255.js +18 -0
  230. package/dist/a2ui-react256.js +8 -0
  231. package/dist/a2ui-react257.js +10 -0
  232. package/dist/a2ui-react258.js +19 -0
  233. package/dist/a2ui-react259.js +7 -0
  234. package/dist/a2ui-react26.js +44 -0
  235. package/dist/a2ui-react260.js +7 -0
  236. package/dist/a2ui-react261.js +8 -0
  237. package/dist/a2ui-react262.js +8 -0
  238. package/dist/a2ui-react263.js +7 -0
  239. package/dist/a2ui-react264.js +7 -0
  240. package/dist/a2ui-react265.js +9 -0
  241. package/dist/a2ui-react266.js +27 -0
  242. package/dist/a2ui-react267.js +9 -0
  243. package/dist/a2ui-react268.js +7 -0
  244. package/dist/a2ui-react269.js +9 -0
  245. package/dist/a2ui-react27.js +100 -0
  246. package/dist/a2ui-react270.js +8 -0
  247. package/dist/a2ui-react271.js +7 -0
  248. package/dist/a2ui-react272.js +8 -0
  249. package/dist/a2ui-react273.js +7 -0
  250. package/dist/a2ui-react274.js +11 -0
  251. package/dist/a2ui-react275.js +8 -0
  252. package/dist/a2ui-react276.js +7 -0
  253. package/dist/a2ui-react277.js +7 -0
  254. package/dist/a2ui-react278.js +9 -0
  255. package/dist/a2ui-react279.js +148 -0
  256. package/dist/a2ui-react28.js +82 -0
  257. package/dist/a2ui-react280.js +42 -0
  258. package/dist/a2ui-react281.js +7 -0
  259. package/dist/a2ui-react282.js +10 -0
  260. package/dist/a2ui-react283.js +16 -0
  261. package/dist/a2ui-react284.js +10 -0
  262. package/dist/a2ui-react285.js +34 -0
  263. package/dist/a2ui-react286.js +13 -0
  264. package/dist/a2ui-react287.js +13 -0
  265. package/dist/a2ui-react288.js +11 -0
  266. package/dist/a2ui-react289.js +16 -0
  267. package/dist/a2ui-react29.js +43 -0
  268. package/dist/a2ui-react290.js +104 -0
  269. package/dist/a2ui-react291.js +22 -0
  270. package/dist/a2ui-react292.js +56 -0
  271. package/dist/a2ui-react293.js +75 -0
  272. package/dist/a2ui-react294.js +12 -0
  273. package/dist/a2ui-react295.js +23 -0
  274. package/dist/a2ui-react296.js +19 -0
  275. package/dist/a2ui-react297.js +26 -0
  276. package/dist/a2ui-react298.js +9 -0
  277. package/dist/a2ui-react299.js +8 -0
  278. package/dist/a2ui-react3.js +40 -0
  279. package/dist/a2ui-react30.js +41 -0
  280. package/dist/a2ui-react300.js +26 -0
  281. package/dist/a2ui-react301.js +37 -0
  282. package/dist/a2ui-react302.js +18 -0
  283. package/dist/a2ui-react303.js +9 -0
  284. package/dist/a2ui-react304.js +7 -0
  285. package/dist/a2ui-react305.js +7 -0
  286. package/dist/a2ui-react306.js +7 -0
  287. package/dist/a2ui-react307.js +7 -0
  288. package/dist/a2ui-react308.js +6 -0
  289. package/dist/a2ui-react309.js +9 -0
  290. package/dist/a2ui-react31.js +86 -0
  291. package/dist/a2ui-react310.js +26 -0
  292. package/dist/a2ui-react311.js +10 -0
  293. package/dist/a2ui-react312.js +9 -0
  294. package/dist/a2ui-react313.js +8 -0
  295. package/dist/a2ui-react314.js +6 -0
  296. package/dist/a2ui-react315.js +6 -0
  297. package/dist/a2ui-react316.js +7 -0
  298. package/dist/a2ui-react317.js +6 -0
  299. package/dist/a2ui-react318.js +7 -0
  300. package/dist/a2ui-react319.js +6 -0
  301. package/dist/a2ui-react32.js +46 -0
  302. package/dist/a2ui-react320.js +6 -0
  303. package/dist/a2ui-react321.js +6 -0
  304. package/dist/a2ui-react322.js +9 -0
  305. package/dist/a2ui-react323.js +18 -0
  306. package/dist/a2ui-react324.js +31 -0
  307. package/dist/a2ui-react325.js +15 -0
  308. package/dist/a2ui-react326.js +27 -0
  309. package/dist/a2ui-react327.js +31 -0
  310. package/dist/a2ui-react328.js +7 -0
  311. package/dist/a2ui-react329.js +19 -0
  312. package/dist/a2ui-react33.js +44 -0
  313. package/dist/a2ui-react330.js +8 -0
  314. package/dist/a2ui-react331.js +8 -0
  315. package/dist/a2ui-react332.js +61 -0
  316. package/dist/a2ui-react333.js +69 -0
  317. package/dist/a2ui-react334.js +9 -0
  318. package/dist/a2ui-react335.js +7 -0
  319. package/dist/a2ui-react336.js +26 -0
  320. package/dist/a2ui-react337.js +19 -0
  321. package/dist/a2ui-react338.js +10 -0
  322. package/dist/a2ui-react339.js +13 -0
  323. package/dist/a2ui-react34.js +8 -0
  324. package/dist/a2ui-react340.js +13 -0
  325. package/dist/a2ui-react341.js +24 -0
  326. package/dist/a2ui-react342.js +13 -0
  327. package/dist/a2ui-react343.js +12 -0
  328. package/dist/a2ui-react344.js +12 -0
  329. package/dist/a2ui-react345.js +7 -0
  330. package/dist/a2ui-react346.js +8 -0
  331. package/dist/a2ui-react347.js +19 -0
  332. package/dist/a2ui-react348.js +12 -0
  333. package/dist/a2ui-react349.js +21 -0
  334. package/dist/a2ui-react35.js +16 -0
  335. package/dist/a2ui-react350.js +18 -0
  336. package/dist/a2ui-react351.js +15 -0
  337. package/dist/a2ui-react352.js +32 -0
  338. package/dist/a2ui-react353.js +15 -0
  339. package/dist/a2ui-react354.js +28 -0
  340. package/dist/a2ui-react355.js +8 -0
  341. package/dist/a2ui-react356.js +11 -0
  342. package/dist/a2ui-react357.js +22 -0
  343. package/dist/a2ui-react358.js +7 -0
  344. package/dist/a2ui-react359.js +5 -0
  345. package/dist/a2ui-react36.js +23 -0
  346. package/dist/a2ui-react360.js +26 -0
  347. package/dist/a2ui-react361.js +115 -0
  348. package/dist/a2ui-react362.js +18 -0
  349. package/dist/a2ui-react363.js +527 -0
  350. package/dist/a2ui-react364.js +130 -0
  351. package/dist/a2ui-react365.js +136 -0
  352. package/dist/a2ui-react366.js +7 -0
  353. package/dist/a2ui-react367.js +15 -0
  354. package/dist/a2ui-react368.js +67 -0
  355. package/dist/a2ui-react369.js +71 -0
  356. package/dist/a2ui-react37.js +15 -0
  357. package/dist/a2ui-react370.js +11 -0
  358. package/dist/a2ui-react371.js +16 -0
  359. package/dist/a2ui-react372.js +68 -0
  360. package/dist/a2ui-react373.js +6 -0
  361. package/dist/a2ui-react374.js +25 -0
  362. package/dist/a2ui-react375.js +15 -0
  363. package/dist/a2ui-react376.js +30 -0
  364. package/dist/a2ui-react377.js +7 -0
  365. package/dist/a2ui-react378.js +25 -0
  366. package/dist/a2ui-react38.js +10 -0
  367. package/dist/a2ui-react39.js +10 -0
  368. package/dist/a2ui-react4.js +76 -0
  369. package/dist/a2ui-react40.js +14 -0
  370. package/dist/a2ui-react41.js +14 -0
  371. package/dist/a2ui-react42.js +16 -0
  372. package/dist/a2ui-react43.js +12 -0
  373. package/dist/a2ui-react44.js +15 -0
  374. package/dist/a2ui-react45.js +15 -0
  375. package/dist/a2ui-react46.js +9 -0
  376. package/dist/a2ui-react47.js +11 -0
  377. package/dist/a2ui-react48.js +16 -0
  378. package/dist/a2ui-react49.js +10 -0
  379. package/dist/a2ui-react5.js +8 -0
  380. package/dist/a2ui-react50.js +14 -0
  381. package/dist/a2ui-react51.js +9 -0
  382. package/dist/a2ui-react52.js +9 -0
  383. package/dist/a2ui-react53.js +15 -0
  384. package/dist/a2ui-react54.js +17 -0
  385. package/dist/a2ui-react55.js +10 -0
  386. package/dist/a2ui-react56.js +10 -0
  387. package/dist/a2ui-react57.js +10 -0
  388. package/dist/a2ui-react58.js +9 -0
  389. package/dist/a2ui-react59.js +9 -0
  390. package/dist/a2ui-react6.js +28 -0
  391. package/dist/a2ui-react60.js +9 -0
  392. package/dist/a2ui-react61.js +15 -0
  393. package/dist/a2ui-react62.js +10 -0
  394. package/dist/a2ui-react63.js +15 -0
  395. package/dist/a2ui-react64.js +10 -0
  396. package/dist/a2ui-react65.js +14 -0
  397. package/dist/a2ui-react66.js +22 -0
  398. package/dist/a2ui-react67.js +14 -0
  399. package/dist/a2ui-react68.js +10 -0
  400. package/dist/a2ui-react69.js +17 -0
  401. package/dist/a2ui-react7.js +10 -0
  402. package/dist/a2ui-react70.js +15 -0
  403. package/dist/a2ui-react71.js +10 -0
  404. package/dist/a2ui-react72.js +12 -0
  405. package/dist/a2ui-react73.js +9 -0
  406. package/dist/a2ui-react74.js +6 -0
  407. package/dist/a2ui-react75.js +15 -0
  408. package/dist/a2ui-react76.js +11 -0
  409. package/dist/a2ui-react77.js +14 -0
  410. package/dist/a2ui-react78.js +9 -0
  411. package/dist/a2ui-react79.js +9 -0
  412. package/dist/a2ui-react8.js +21 -0
  413. package/dist/a2ui-react80.js +9 -0
  414. package/dist/a2ui-react81.js +10 -0
  415. package/dist/a2ui-react82.js +26 -0
  416. package/dist/a2ui-react83.js +29 -0
  417. package/dist/a2ui-react84.js +67 -0
  418. package/dist/a2ui-react85.js +77 -0
  419. package/dist/a2ui-react86.js +53 -0
  420. package/dist/a2ui-react87.js +31 -0
  421. package/dist/a2ui-react88.js +22 -0
  422. package/dist/a2ui-react89.js +21 -0
  423. package/dist/a2ui-react9.js +88 -0
  424. package/{src/components/ui/textarea.tsx → dist/a2ui-react90.js} +17 -17
  425. package/dist/a2ui-react91.js +176 -0
  426. package/dist/a2ui-react92.js +38 -0
  427. package/dist/a2ui-react93.js +88 -0
  428. package/dist/a2ui-react94.js +9 -0
  429. package/dist/a2ui-react95.js +58 -0
  430. package/dist/a2ui-react96.js +146 -0
  431. package/dist/a2ui-react97.js +63 -0
  432. package/dist/a2ui-react98.js +17 -0
  433. package/dist/a2ui-react99.js +2765 -0
  434. package/dist/components/ui/button.d.ts +10 -0
  435. package/dist/components/ui/calendar.d.ts +8 -0
  436. package/dist/components/ui/card.d.ts +9 -0
  437. package/dist/components/ui/checkbox.d.ts +4 -0
  438. package/dist/components/ui/dialog.d.ts +15 -0
  439. package/dist/components/ui/input.d.ts +3 -0
  440. package/dist/components/ui/label.d.ts +4 -0
  441. package/dist/components/ui/native-select.d.ts +7 -0
  442. package/dist/components/ui/popover.d.ts +7 -0
  443. package/dist/components/ui/select.d.ts +15 -0
  444. package/dist/components/ui/separator.d.ts +4 -0
  445. package/dist/components/ui/slider.d.ts +4 -0
  446. package/dist/components/ui/tabs.d.ts +7 -0
  447. package/dist/components/ui/textarea.d.ts +3 -0
  448. package/dist/index.d.ts +1 -0
  449. package/dist/lib/utils.d.ts +2 -0
  450. package/package.json +4 -1
  451. package/.claude/commands/speckit.analyze.md +0 -184
  452. package/.claude/commands/speckit.checklist.md +0 -294
  453. package/.claude/commands/speckit.clarify.md +0 -181
  454. package/.claude/commands/speckit.constitution.md +0 -82
  455. package/.claude/commands/speckit.implement.md +0 -135
  456. package/.claude/commands/speckit.plan.md +0 -89
  457. package/.claude/commands/speckit.specify.md +0 -256
  458. package/.claude/commands/speckit.tasks.md +0 -137
  459. package/.claude/commands/speckit.taskstoissues.md +0 -30
  460. package/.github/workflows/deploy.yml +0 -69
  461. package/.husky/pre-commit +0 -1
  462. package/.prettierignore +0 -4
  463. package/.prettierrc +0 -7
  464. package/.specify/memory/constitution.md +0 -73
  465. package/.specify/scripts/bash/check-prerequisites.sh +0 -166
  466. package/.specify/scripts/bash/common.sh +0 -156
  467. package/.specify/scripts/bash/create-new-feature.sh +0 -297
  468. package/.specify/scripts/bash/setup-plan.sh +0 -61
  469. package/.specify/scripts/bash/update-agent-context.sh +0 -799
  470. package/.specify/templates/agent-file-template.md +0 -28
  471. package/.specify/templates/checklist-template.md +0 -40
  472. package/.specify/templates/plan-template.md +0 -105
  473. package/.specify/templates/spec-template.md +0 -115
  474. package/.specify/templates/tasks-template.md +0 -250
  475. package/CLAUDE.md +0 -109
  476. package/CONTRIBUTING.md +0 -97
  477. package/components.json +0 -21
  478. package/eslint.config.js +0 -25
  479. package/netlify.toml +0 -50
  480. package/playground/README.md +0 -75
  481. package/playground/index.html +0 -22
  482. package/playground/package.json +0 -32
  483. package/playground/public/favicon.svg +0 -8
  484. package/playground/src/App.css +0 -256
  485. package/playground/src/App.tsx +0 -115
  486. package/playground/src/assets/react.svg +0 -1
  487. package/playground/src/components/ErrorDisplay.tsx +0 -13
  488. package/playground/src/components/ExampleSelector.tsx +0 -64
  489. package/playground/src/components/Header.tsx +0 -48
  490. package/playground/src/components/JsonEditor.tsx +0 -32
  491. package/playground/src/components/Preview.tsx +0 -78
  492. package/playground/src/components/ThemeToggle.tsx +0 -19
  493. package/playground/src/data/examples.ts +0 -1571
  494. package/playground/src/hooks/useTheme.ts +0 -55
  495. package/playground/src/index.css +0 -220
  496. package/playground/src/main.tsx +0 -10
  497. package/playground/tsconfig.app.json +0 -34
  498. package/playground/tsconfig.json +0 -13
  499. package/playground/tsconfig.node.json +0 -26
  500. package/playground/vite.config.ts +0 -31
  501. package/specs/001-a2ui-renderer/checklists/requirements.md +0 -41
  502. package/specs/001-a2ui-renderer/data-model.md +0 -140
  503. package/specs/001-a2ui-renderer/plan.md +0 -123
  504. package/specs/001-a2ui-renderer/quickstart.md +0 -145
  505. package/specs/001-a2ui-renderer/research.md +0 -144
  506. package/specs/001-a2ui-renderer/spec.md +0 -165
  507. package/specs/001-a2ui-renderer/tasks.md +0 -310
  508. package/specs/002-playground/checklists/requirements.md +0 -37
  509. package/specs/002-playground/contracts/components.md +0 -120
  510. package/specs/002-playground/data-model.md +0 -149
  511. package/specs/002-playground/plan.md +0 -73
  512. package/specs/002-playground/quickstart.md +0 -158
  513. package/specs/002-playground/research.md +0 -117
  514. package/specs/002-playground/spec.md +0 -109
  515. package/specs/002-playground/tasks.md +0 -224
  516. package/src/0.8/A2UIRenderer.test.tsx +0 -793
  517. package/src/0.8/A2UIRenderer.tsx +0 -142
  518. package/src/0.8/components/ComponentRenderer.test.tsx +0 -373
  519. package/src/0.8/components/ComponentRenderer.tsx +0 -163
  520. package/src/0.8/components/UnknownComponent.tsx +0 -49
  521. package/src/0.8/components/display/AudioPlayerComponent.tsx +0 -37
  522. package/src/0.8/components/display/DividerComponent.tsx +0 -23
  523. package/src/0.8/components/display/IconComponent.tsx +0 -137
  524. package/src/0.8/components/display/ImageComponent.tsx +0 -57
  525. package/src/0.8/components/display/TextComponent.tsx +0 -56
  526. package/src/0.8/components/display/VideoComponent.tsx +0 -31
  527. package/src/0.8/components/display/display.test.tsx +0 -660
  528. package/src/0.8/components/display/index.ts +0 -10
  529. package/src/0.8/components/index.ts +0 -14
  530. package/src/0.8/components/interactive/ButtonComponent.tsx +0 -44
  531. package/src/0.8/components/interactive/CheckBoxComponent.tsx +0 -45
  532. package/src/0.8/components/interactive/DateTimeInputComponent.tsx +0 -176
  533. package/src/0.8/components/interactive/MultipleChoiceComponent.tsx +0 -157
  534. package/src/0.8/components/interactive/SliderComponent.tsx +0 -53
  535. package/src/0.8/components/interactive/TextFieldComponent.tsx +0 -65
  536. package/src/0.8/components/interactive/index.ts +0 -10
  537. package/src/0.8/components/interactive/interactive.test.tsx +0 -618
  538. package/src/0.8/components/layout/CardComponent.tsx +0 -30
  539. package/src/0.8/components/layout/ColumnComponent.tsx +0 -93
  540. package/src/0.8/components/layout/ListComponent.tsx +0 -81
  541. package/src/0.8/components/layout/ModalComponent.tsx +0 -41
  542. package/src/0.8/components/layout/RowComponent.tsx +0 -94
  543. package/src/0.8/components/layout/TabsComponent.tsx +0 -59
  544. package/src/0.8/components/layout/index.ts +0 -10
  545. package/src/0.8/components/layout/layout.test.tsx +0 -558
  546. package/src/0.8/contexts/A2UIProvider.test.tsx +0 -226
  547. package/src/0.8/contexts/A2UIProvider.tsx +0 -54
  548. package/src/0.8/contexts/ActionContext.test.tsx +0 -242
  549. package/src/0.8/contexts/ActionContext.tsx +0 -105
  550. package/src/0.8/contexts/ComponentsMapContext.tsx +0 -125
  551. package/src/0.8/contexts/DataModelContext.test.tsx +0 -335
  552. package/src/0.8/contexts/DataModelContext.tsx +0 -184
  553. package/src/0.8/contexts/SurfaceContext.test.tsx +0 -339
  554. package/src/0.8/contexts/SurfaceContext.tsx +0 -197
  555. package/src/0.8/hooks/useA2UIMessageHandler.test.tsx +0 -399
  556. package/src/0.8/hooks/useA2UIMessageHandler.ts +0 -123
  557. package/src/0.8/hooks/useComponent.test.tsx +0 -148
  558. package/src/0.8/hooks/useDataBinding.test.tsx +0 -334
  559. package/src/0.8/hooks/useDataBinding.ts +0 -99
  560. package/src/0.8/hooks/useDispatchAction.test.tsx +0 -83
  561. package/src/0.8/hooks/useSurface.test.tsx +0 -114
  562. package/src/0.8/schemas/client_to_server.json +0 -50
  563. package/src/0.8/schemas/server_to_client.json +0 -148
  564. package/src/0.8/schemas/standard_catalog_definition.json +0 -661
  565. package/src/0.8/utils/dataBinding.test.ts +0 -443
  566. package/src/0.8/utils/dataBinding.ts +0 -212
  567. package/src/0.8/utils/pathUtils.test.ts +0 -353
  568. package/src/0.8/utils/pathUtils.ts +0 -200
  569. package/src/components/ui/button.tsx +0 -62
  570. package/src/components/ui/calendar.tsx +0 -220
  571. package/src/components/ui/card.tsx +0 -92
  572. package/src/components/ui/checkbox.tsx +0 -30
  573. package/src/components/ui/dialog.tsx +0 -141
  574. package/src/components/ui/input.tsx +0 -21
  575. package/src/components/ui/label.tsx +0 -22
  576. package/src/components/ui/native-select.tsx +0 -53
  577. package/src/components/ui/popover.tsx +0 -46
  578. package/src/components/ui/select.tsx +0 -188
  579. package/src/components/ui/separator.tsx +0 -26
  580. package/src/components/ui/slider.tsx +0 -61
  581. package/src/components/ui/tabs.tsx +0 -64
  582. package/src/index.ts +0 -1
  583. package/src/lib/utils.ts +0 -6
  584. package/tsconfig.json +0 -28
  585. package/vite.config.ts +0 -29
  586. package/vitest.config.ts +0 -22
  587. package/vitest.setup.ts +0 -8
  588. package/website/README.md +0 -4
  589. package/website/assets/favicon.svg +0 -8
  590. package/website/content/.gitkeep +0 -0
  591. package/website/content/api.md +0 -108
  592. package/website/content/index.md +0 -126
  593. package/website/global.d.ts +0 -9
  594. package/website/package.json +0 -17
  595. package/website/plain.config.js +0 -28
  596. package/website/serve.json +0 -8
  597. package/website/src/client/color-mode-switch.css +0 -47
  598. package/website/src/client/index.js +0 -61
  599. package/website/src/client/moon.svg +0 -1
  600. package/website/src/client/sun.svg +0 -1
  601. package/website/src/components/Footer.jsx +0 -9
  602. package/website/src/components/Header.jsx +0 -50
  603. package/website/src/components/Page.jsx +0 -28
  604. package/website/src/global.css +0 -423
@@ -1,142 +0,0 @@
1
- /**
2
- * A2UIRenderer - Main entry component for rendering A2UI messages.
3
- *
4
- * This component processes A2UI messages and renders the resulting UI.
5
- * It supports custom component overrides via the components prop.
6
- *
7
- * @example
8
- * ```tsx
9
- * import { A2UIRenderer, A2UIMessage, A2UIAction } from '@easyops-cn/a2ui-react/0.8'
10
- *
11
- * function App() {
12
- * const messages: A2UIMessage[] = [...]
13
- * const handleAction = (action: A2UIAction) => {
14
- * console.log('Action:', action)
15
- * }
16
- * return <A2UIRenderer messages={messages} onAction={handleAction} />
17
- * }
18
- * ```
19
- */
20
-
21
- import { useEffect, type ComponentType } from 'react'
22
- import type { A2UIMessage, ActionPayload, BaseComponentProps } from './types'
23
- import { A2UIProvider } from './contexts/A2UIProvider'
24
- import { ComponentsMapProvider } from './contexts/ComponentsMapContext'
25
- import { useSurfaceContext } from './contexts/SurfaceContext'
26
- import { useA2UIMessageHandler } from './hooks/useA2UIMessageHandler'
27
- import {
28
- ComponentRenderer,
29
- componentRegistry,
30
- } from './components/ComponentRenderer'
31
-
32
- /**
33
- * Type for custom component map.
34
- */
35
- export type ComponentsMap = Map<
36
- string,
37
- ComponentType<BaseComponentProps & Record<string, unknown>>
38
- >
39
-
40
- /**
41
- * Props for A2UIRenderer component.
42
- */
43
- export interface A2UIRenderProps {
44
- /** Array of A2UI messages to render */
45
- messages: A2UIMessage[]
46
- /** Callback when an action is dispatched */
47
- onAction?: (action: ActionPayload) => void
48
- /** Custom component overrides */
49
- components?: ComponentsMap
50
- }
51
-
52
- /**
53
- * Internal component that handles message processing and surface rendering.
54
- */
55
- function A2UIRenderInner({ messages }: { messages: A2UIMessage[] }) {
56
- const { processMessages, clear } = useA2UIMessageHandler()
57
- const { surfaces } = useSurfaceContext()
58
-
59
- // Process messages when they change
60
- useEffect(() => {
61
- // Clear existing state and process new messages
62
- clear()
63
- if (messages && messages.length > 0) {
64
- processMessages(messages)
65
- }
66
- }, [messages, processMessages, clear])
67
-
68
- // Render all surfaces
69
- const surfaceEntries = Array.from(surfaces.entries())
70
-
71
- if (surfaceEntries.length === 0) {
72
- return null
73
- }
74
-
75
- return (
76
- <>
77
- {surfaceEntries.map(([surfaceId, surface]) => {
78
- // Only render surfaces that have a root component
79
- if (!surface.root) {
80
- return null
81
- }
82
- return (
83
- <ComponentRenderer
84
- key={surfaceId}
85
- surfaceId={surfaceId}
86
- componentId={surface.root}
87
- />
88
- )
89
- })}
90
- </>
91
- )
92
- }
93
-
94
- /**
95
- * Main entry component for rendering A2UI messages.
96
- *
97
- * Processes an array of A2UIMessage objects and renders the resulting UI.
98
- * Supports custom component overrides via the components prop.
99
- *
100
- * @param props - Component props
101
- * @param props.messages - Array of A2UI messages to render
102
- * @param props.onAction - Optional callback when an action is dispatched
103
- * @param props.components - Optional custom component overrides
104
- *
105
- * @example
106
- * ```tsx
107
- * // Basic usage
108
- * <A2UIRenderer messages={messages} onAction={handleAction} />
109
- *
110
- * // With custom components
111
- * const customComponents = new Map([
112
- * ['Button', CustomButton],
113
- * ['Switch', CustomSwitch],
114
- * ])
115
- * <A2UIRenderer
116
- * messages={messages}
117
- * onAction={handleAction}
118
- * components={customComponents}
119
- * />
120
- * ```
121
- */
122
- export function A2UIRenderer({
123
- messages,
124
- onAction,
125
- components,
126
- }: A2UIRenderProps) {
127
- // Handle null/undefined messages gracefully
128
- const safeMessages = messages ?? []
129
-
130
- return (
131
- <A2UIProvider onAction={onAction}>
132
- <ComponentsMapProvider
133
- components={components}
134
- defaultComponents={componentRegistry}
135
- >
136
- <A2UIRenderInner messages={safeMessages} />
137
- </ComponentsMapProvider>
138
- </A2UIProvider>
139
- )
140
- }
141
-
142
- A2UIRenderer.displayName = 'A2UI.Render'
@@ -1,373 +0,0 @@
1
- /**
2
- * ComponentRenderer Tests
3
- *
4
- * Tests for the ComponentRenderer component that routes rendering based on type.
5
- */
6
-
7
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
8
- import { render, screen } from '@testing-library/react'
9
- import { ComponentRenderer, registerComponent } from './ComponentRenderer'
10
- import { SurfaceProvider, useSurfaceContext } from '../contexts/SurfaceContext'
11
- import { DataModelProvider } from '../contexts/DataModelContext'
12
- import { ActionProvider } from '../contexts/ActionContext'
13
- import type { ReactNode } from 'react'
14
- import type { BaseComponentProps, ComponentDefinition } from '../types'
15
- import React from 'react'
16
-
17
- // Wrapper with all providers
18
- const wrapper = ({ children }: { children: ReactNode }) => (
19
- <SurfaceProvider>
20
- <DataModelProvider>
21
- <ActionProvider>{children}</ActionProvider>
22
- </DataModelProvider>
23
- </SurfaceProvider>
24
- )
25
-
26
- // Helper component to set up surface with components
27
- function SurfaceSetup({
28
- children,
29
- components,
30
- }: {
31
- children: ReactNode
32
- components: ComponentDefinition[]
33
- }) {
34
- const { initSurface, updateSurface } = useSurfaceContext()
35
- React.useEffect(() => {
36
- initSurface('test-surface', 'root')
37
- updateSurface('test-surface', components)
38
- }, [initSurface, updateSurface, components])
39
- return <>{children}</>
40
- }
41
-
42
- // Custom wrapper that sets up surface
43
- const createSurfaceWrapper = (components: ComponentDefinition[]) => {
44
- return ({ children }: { children: ReactNode }) => (
45
- <SurfaceProvider>
46
- <DataModelProvider>
47
- <ActionProvider>
48
- <SurfaceSetup components={components}>{children}</SurfaceSetup>
49
- </ActionProvider>
50
- </DataModelProvider>
51
- </SurfaceProvider>
52
- )
53
- }
54
-
55
- describe('ComponentRenderer', () => {
56
- let consoleWarn: ReturnType<typeof vi.spyOn>
57
-
58
- beforeEach(() => {
59
- consoleWarn = vi.spyOn(console, 'warn').mockImplementation(() => {})
60
- })
61
-
62
- afterEach(() => {
63
- consoleWarn.mockRestore()
64
- })
65
-
66
- describe('component not found', () => {
67
- it('should return null and warn when component not found', () => {
68
- render(
69
- <ComponentRenderer
70
- surfaceId="test-surface"
71
- componentId="nonexistent"
72
- />,
73
- { wrapper }
74
- )
75
-
76
- expect(consoleWarn).toHaveBeenCalledWith(
77
- 'A2UI: Component not found: nonexistent on surface test-surface'
78
- )
79
- })
80
- })
81
-
82
- describe('component with no type definition', () => {
83
- it('should return null and warn when component has no type', () => {
84
- const components: ComponentDefinition[] = [
85
- { id: 'empty-comp', component: {} },
86
- ]
87
- const surfaceWrapper = createSurfaceWrapper(components)
88
-
89
- render(
90
- <ComponentRenderer surfaceId="test-surface" componentId="empty-comp" />,
91
- { wrapper: surfaceWrapper }
92
- )
93
-
94
- expect(consoleWarn).toHaveBeenCalledWith(
95
- 'A2UI: Component empty-comp has no type definition'
96
- )
97
- })
98
- })
99
-
100
- describe('unknown component type', () => {
101
- it('should return null and warn for unknown component type', () => {
102
- const components: ComponentDefinition[] = [
103
- { id: 'unknown-comp', component: { UnknownType: {} } },
104
- ]
105
- const surfaceWrapper = createSurfaceWrapper(components)
106
-
107
- render(
108
- <ComponentRenderer
109
- surfaceId="test-surface"
110
- componentId="unknown-comp"
111
- />,
112
- { wrapper: surfaceWrapper }
113
- )
114
-
115
- expect(consoleWarn).toHaveBeenCalledWith(
116
- 'A2UI: Unknown component type: UnknownType'
117
- )
118
- })
119
- })
120
-
121
- describe('rendering display components', () => {
122
- it('should render Text component', () => {
123
- const components: ComponentDefinition[] = [
124
- {
125
- id: 'text-1',
126
- component: { Text: { text: { literalString: 'Hello World' } } },
127
- },
128
- ]
129
- const surfaceWrapper = createSurfaceWrapper(components)
130
-
131
- render(
132
- <ComponentRenderer surfaceId="test-surface" componentId="text-1" />,
133
- { wrapper: surfaceWrapper }
134
- )
135
-
136
- expect(screen.getByText('Hello World')).toBeInTheDocument()
137
- })
138
-
139
- it('should render Image component', () => {
140
- const components: ComponentDefinition[] = [
141
- {
142
- id: 'image-1',
143
- component: {
144
- Image: { url: { literalString: 'https://example.com/image.jpg' } },
145
- },
146
- },
147
- ]
148
- const surfaceWrapper = createSurfaceWrapper(components)
149
-
150
- render(
151
- <ComponentRenderer surfaceId="test-surface" componentId="image-1" />,
152
- { wrapper: surfaceWrapper }
153
- )
154
-
155
- const img = screen.getByRole('presentation')
156
- expect(img).toHaveAttribute('src', 'https://example.com/image.jpg')
157
- })
158
-
159
- it('should render Divider component', () => {
160
- const components: ComponentDefinition[] = [
161
- { id: 'divider-1', component: { Divider: { axis: 'horizontal' } } },
162
- ]
163
- const surfaceWrapper = createSurfaceWrapper(components)
164
-
165
- const { container } = render(
166
- <ComponentRenderer surfaceId="test-surface" componentId="divider-1" />,
167
- { wrapper: surfaceWrapper }
168
- )
169
-
170
- expect(
171
- container.querySelector('[data-orientation="horizontal"]')
172
- ).toBeInTheDocument()
173
- })
174
- })
175
-
176
- describe('rendering layout components', () => {
177
- it('should render Row component', () => {
178
- const components: ComponentDefinition[] = [
179
- { id: 'row-1', component: { Row: { distribution: 'center' } } },
180
- ]
181
- const surfaceWrapper = createSurfaceWrapper(components)
182
-
183
- const { container } = render(
184
- <ComponentRenderer surfaceId="test-surface" componentId="row-1" />,
185
- { wrapper: surfaceWrapper }
186
- )
187
-
188
- expect(container.querySelector('.flex-row')).toBeInTheDocument()
189
- })
190
-
191
- it('should render Column component', () => {
192
- const components: ComponentDefinition[] = [
193
- { id: 'column-1', component: { Column: { alignment: 'center' } } },
194
- ]
195
- const surfaceWrapper = createSurfaceWrapper(components)
196
-
197
- const { container } = render(
198
- <ComponentRenderer surfaceId="test-surface" componentId="column-1" />,
199
- { wrapper: surfaceWrapper }
200
- )
201
-
202
- expect(container.querySelector('.flex-col')).toBeInTheDocument()
203
- })
204
-
205
- it('should render Card component', () => {
206
- const components: ComponentDefinition[] = [
207
- { id: 'card-1', component: { Card: {} } },
208
- ]
209
- const surfaceWrapper = createSurfaceWrapper(components)
210
-
211
- const { container } = render(
212
- <ComponentRenderer surfaceId="test-surface" componentId="card-1" />,
213
- { wrapper: surfaceWrapper }
214
- )
215
-
216
- expect(container.firstChild).toBeInTheDocument()
217
- })
218
- })
219
-
220
- describe('rendering interactive components', () => {
221
- it('should render Button component', () => {
222
- const components: ComponentDefinition[] = [
223
- { id: 'button-1', component: { Button: { primary: true } } },
224
- ]
225
- const surfaceWrapper = createSurfaceWrapper(components)
226
-
227
- render(
228
- <ComponentRenderer surfaceId="test-surface" componentId="button-1" />,
229
- { wrapper: surfaceWrapper }
230
- )
231
-
232
- expect(screen.getByRole('button')).toBeInTheDocument()
233
- })
234
-
235
- it('should render CheckBox component', () => {
236
- const components: ComponentDefinition[] = [
237
- {
238
- id: 'checkbox-1',
239
- component: { CheckBox: { label: { literalString: 'Accept' } } },
240
- },
241
- ]
242
- const surfaceWrapper = createSurfaceWrapper(components)
243
-
244
- render(
245
- <ComponentRenderer surfaceId="test-surface" componentId="checkbox-1" />,
246
- { wrapper: surfaceWrapper }
247
- )
248
-
249
- expect(screen.getByRole('checkbox')).toBeInTheDocument()
250
- expect(screen.getByText('Accept')).toBeInTheDocument()
251
- })
252
-
253
- it('should render TextField component', () => {
254
- const components: ComponentDefinition[] = [
255
- {
256
- id: 'field-1',
257
- component: { TextField: { label: { literalString: 'Name' } } },
258
- },
259
- ]
260
- const surfaceWrapper = createSurfaceWrapper(components)
261
-
262
- render(
263
- <ComponentRenderer surfaceId="test-surface" componentId="field-1" />,
264
- { wrapper: surfaceWrapper }
265
- )
266
-
267
- expect(screen.getByRole('textbox')).toBeInTheDocument()
268
- expect(screen.getByText('Name')).toBeInTheDocument()
269
- })
270
-
271
- it('should render Slider component', () => {
272
- const components: ComponentDefinition[] = [
273
- {
274
- id: 'slider-1',
275
- component: { Slider: { minValue: 0, maxValue: 100 } },
276
- },
277
- ]
278
- const surfaceWrapper = createSurfaceWrapper(components)
279
-
280
- render(
281
- <ComponentRenderer surfaceId="test-surface" componentId="slider-1" />,
282
- { wrapper: surfaceWrapper }
283
- )
284
-
285
- expect(screen.getByRole('slider')).toBeInTheDocument()
286
- })
287
- })
288
-
289
- describe('passing props', () => {
290
- it('should pass weight prop to component', () => {
291
- const components: ComponentDefinition[] = [
292
- {
293
- id: 'text-1',
294
- weight: 2,
295
- component: { Text: { text: { literalString: 'Weighted' } } },
296
- },
297
- ]
298
- const surfaceWrapper = createSurfaceWrapper(components)
299
-
300
- render(
301
- <ComponentRenderer surfaceId="test-surface" componentId="text-1" />,
302
- { wrapper: surfaceWrapper }
303
- )
304
-
305
- // Component should render (weight is passed but may not affect visual)
306
- expect(screen.getByText('Weighted')).toBeInTheDocument()
307
- })
308
-
309
- it('should pass all component props', () => {
310
- const components: ComponentDefinition[] = [
311
- {
312
- id: 'text-1',
313
- component: {
314
- Text: {
315
- text: { literalString: 'Heading' },
316
- usageHint: 'h1',
317
- },
318
- },
319
- },
320
- ]
321
- const surfaceWrapper = createSurfaceWrapper(components)
322
-
323
- const { container } = render(
324
- <ComponentRenderer surfaceId="test-surface" componentId="text-1" />,
325
- { wrapper: surfaceWrapper }
326
- )
327
-
328
- expect(container.querySelector('h1')).toBeInTheDocument()
329
- expect(container.querySelector('h1')).toHaveTextContent('Heading')
330
- })
331
- })
332
-
333
- describe('registerComponent', () => {
334
- it('should register and render custom component', () => {
335
- // Register a custom component
336
- const CustomComponent = ({
337
- surfaceId,
338
- componentId,
339
- customProp,
340
- }: BaseComponentProps & { customProp?: string }) => (
341
- <div data-testid="custom-component">
342
- Custom: {customProp} ({surfaceId}/{componentId})
343
- </div>
344
- )
345
-
346
- registerComponent('CustomWidget', CustomComponent)
347
-
348
- const components: ComponentDefinition[] = [
349
- {
350
- id: 'custom-1',
351
- component: { CustomWidget: { customProp: 'test-value' } },
352
- },
353
- ]
354
- const surfaceWrapper = createSurfaceWrapper(components)
355
-
356
- render(
357
- <ComponentRenderer surfaceId="test-surface" componentId="custom-1" />,
358
- { wrapper: surfaceWrapper }
359
- )
360
-
361
- expect(screen.getByTestId('custom-component')).toBeInTheDocument()
362
- expect(screen.getByTestId('custom-component')).toHaveTextContent(
363
- 'Custom: test-value'
364
- )
365
- })
366
- })
367
-
368
- describe('displayName', () => {
369
- it('should have correct displayName', () => {
370
- expect(ComponentRenderer.displayName).toBe('A2UI.ComponentRenderer')
371
- })
372
- })
373
- })
@@ -1,163 +0,0 @@
1
- /**
2
- * ComponentRenderer - Routes component rendering based on type.
3
- */
4
-
5
- import { memo, useContext, type ComponentType } from 'react'
6
- import type { BaseComponentProps } from '../types'
7
- import { useComponent } from '../hooks/useComponent'
8
- import { ComponentsMapContext } from '../contexts/ComponentsMapContext'
9
-
10
- // Display components
11
- import {
12
- TextComponent,
13
- ImageComponent,
14
- IconComponent,
15
- VideoComponent,
16
- AudioPlayerComponent,
17
- DividerComponent,
18
- } from './display'
19
-
20
- // Layout components (will be imported after creation)
21
- import {
22
- RowComponent,
23
- ColumnComponent,
24
- ListComponent,
25
- CardComponent,
26
- TabsComponent,
27
- ModalComponent,
28
- } from './layout'
29
-
30
- // Interactive components (will be imported after creation)
31
- import {
32
- ButtonComponent,
33
- CheckBoxComponent,
34
- TextFieldComponent,
35
- DateTimeInputComponent,
36
- MultipleChoiceComponent,
37
- SliderComponent,
38
- } from './interactive'
39
-
40
- /**
41
- * Component registry mapping component type names to React components.
42
- */
43
- export const componentRegistry: Record<
44
- string,
45
- ComponentType<BaseComponentProps & Record<string, unknown>>
46
- > = {
47
- // Display components
48
- Text: TextComponent,
49
- Image: ImageComponent,
50
- Icon: IconComponent,
51
- Video: VideoComponent,
52
- AudioPlayer: AudioPlayerComponent,
53
- Divider: DividerComponent,
54
-
55
- // Layout components
56
- Row: RowComponent,
57
- Column: ColumnComponent,
58
- List: ListComponent,
59
- Card: CardComponent,
60
- Tabs: TabsComponent,
61
- Modal: ModalComponent,
62
-
63
- // Interactive components
64
- Button: ButtonComponent,
65
- CheckBox: CheckBoxComponent,
66
- TextField: TextFieldComponent,
67
- DateTimeInput: DateTimeInputComponent,
68
- MultipleChoice: MultipleChoiceComponent,
69
- Slider: SliderComponent,
70
- }
71
-
72
- /**
73
- * Props for ComponentRenderer.
74
- */
75
- export interface ComponentRendererProps {
76
- surfaceId: string
77
- componentId: string
78
- }
79
-
80
- /**
81
- * Renders a component based on its type from the component registry.
82
- * Supports custom component overrides via ComponentsMapContext.
83
- *
84
- * @example
85
- * ```tsx
86
- * // Render a component by ID
87
- * <ComponentRenderer surfaceId="surface-1" componentId="text-1" />
88
- * ```
89
- */
90
- export const ComponentRenderer = memo(function ComponentRenderer({
91
- surfaceId,
92
- componentId,
93
- }: ComponentRendererProps) {
94
- const component = useComponent(surfaceId, componentId)
95
- const componentsMapContext = useContext(ComponentsMapContext)
96
-
97
- if (!component) {
98
- console.warn(
99
- `A2UI: Component not found: ${componentId} on surface ${surfaceId}`
100
- )
101
- return null
102
- }
103
-
104
- // Extract the component type and props from the definition
105
- // component.component is { [componentType]: props }
106
- const entries = Object.entries(component.component)
107
- if (entries.length === 0) {
108
- console.warn(`A2UI: Component ${componentId} has no type definition`)
109
- return null
110
- }
111
-
112
- const [componentType, props] = entries[0]
113
-
114
- // Try to get component from context first (custom components), then fall back to registry
115
- let Component:
116
- | ComponentType<BaseComponentProps & Record<string, unknown>>
117
- | undefined
118
- if (componentsMapContext) {
119
- Component = componentsMapContext.getComponent(componentType)
120
- } else {
121
- Component = componentRegistry[componentType]
122
- }
123
-
124
- if (!Component) {
125
- // In development mode, render a placeholder for unknown components
126
- // In production, skip unknown components silently
127
- console.warn(`A2UI: Unknown component type: ${componentType}`)
128
- return null
129
- }
130
-
131
- return (
132
- // eslint-disable-next-line react-hooks/static-components
133
- <Component
134
- surfaceId={surfaceId}
135
- componentId={componentId}
136
- weight={component.weight}
137
- {...(props as Record<string, unknown>)}
138
- />
139
- )
140
- })
141
-
142
- ComponentRenderer.displayName = 'A2UI.ComponentRenderer'
143
-
144
- /**
145
- * Registers a custom component type.
146
- *
147
- * @param type - The component type name
148
- * @param component - The React component to register
149
- *
150
- * @example
151
- * ```tsx
152
- * registerComponent('CustomChart', ({ surfaceId, data }) => {
153
- * const chartData = useDataBinding(surfaceId, data, []);
154
- * return <Chart data={chartData} />;
155
- * });
156
- * ```
157
- */
158
- export function registerComponent(
159
- type: string,
160
- component: ComponentType<BaseComponentProps & Record<string, unknown>>
161
- ): void {
162
- componentRegistry[type] = component
163
- }