@a2ui/web_core 0.8.0 → 0.9.0

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 (436) hide show
  1. package/.tsbuildinfo +1 -0
  2. package/LICENSE +203 -0
  3. package/README.md +50 -4
  4. package/package.json +42 -72
  5. package/{dist/src → src}/v0_8/data/guards.js +13 -13
  6. package/src/v0_8/data/guards.test.d.ts +2 -0
  7. package/src/v0_8/data/guards.test.d.ts.map +1 -0
  8. package/src/v0_8/data/guards.test.js +174 -0
  9. package/src/v0_8/data/guards.test.js.map +1 -0
  10. package/{dist/src → src}/v0_8/data/model-processor.d.ts +1 -1
  11. package/{dist/src → src}/v0_8/data/model-processor.d.ts.map +1 -1
  12. package/{dist/src → src}/v0_8/data/model-processor.js +51 -40
  13. package/src/v0_8/data/model-processor.js.map +1 -0
  14. package/src/v0_8/data/model-processor.test.d.ts +2 -0
  15. package/src/v0_8/data/model-processor.test.d.ts.map +1 -0
  16. package/src/v0_8/data/model-processor.test.js +712 -0
  17. package/src/v0_8/data/model-processor.test.js.map +1 -0
  18. package/src/v0_8/errors.d.ts +35 -0
  19. package/src/v0_8/errors.d.ts.map +1 -0
  20. package/src/v0_8/errors.js +65 -0
  21. package/src/v0_8/errors.js.map +1 -0
  22. package/src/v0_8/events/validation-event.d.ts.map +1 -0
  23. package/{dist/src → src}/v0_8/events/validation-event.js.map +1 -1
  24. package/{dist/src → src}/v0_8/index.d.ts +35 -4
  25. package/{dist/src → src}/v0_8/index.d.ts.map +1 -1
  26. package/src/v0_8/index.js +28 -0
  27. package/src/v0_8/index.js.map +1 -0
  28. package/src/v0_8/schema/common-types.d.ts +1189 -0
  29. package/src/v0_8/schema/common-types.d.ts.map +1 -0
  30. package/src/v0_8/schema/common-types.js +381 -0
  31. package/src/v0_8/schema/common-types.js.map +1 -0
  32. package/src/v0_8/schema/server-to-client.d.ts +17949 -0
  33. package/src/v0_8/schema/server-to-client.d.ts.map +1 -0
  34. package/src/v0_8/schema/server-to-client.js +228 -0
  35. package/src/v0_8/schema/server-to-client.js.map +1 -0
  36. package/src/v0_8/schema/verify-schema.test.d.ts +17 -0
  37. package/src/v0_8/schema/verify-schema.test.d.ts.map +1 -0
  38. package/src/v0_8/schema/verify-schema.test.js +167 -0
  39. package/src/v0_8/schema/verify-schema.test.js.map +1 -0
  40. package/{dist/src → src}/v0_8/schemas/server_to_client.json +1 -1
  41. package/src/v0_8/schemas/server_to_client_with_standard_catalog.json +817 -787
  42. package/{dist/src → src}/v0_8/schemas/standard_catalog_definition.json +26 -0
  43. package/{dist/src → src}/v0_8/styles/behavior.js +13 -13
  44. package/{dist/src → src}/v0_8/styles/border.js +13 -13
  45. package/{dist/src → src}/v0_8/styles/colors.js +13 -13
  46. package/{dist/src → src}/v0_8/styles/colors.js.map +1 -1
  47. package/src/v0_8/styles/icons.d.ts +11 -0
  48. package/{dist/src → src}/v0_8/styles/icons.d.ts.map +1 -1
  49. package/{dist/src → src}/v0_8/styles/icons.js +17 -14
  50. package/{dist/src → src}/v0_8/styles/icons.js.map +1 -1
  51. package/src/v0_8/styles/index.js +35 -0
  52. package/{dist/src → src}/v0_8/styles/layout.js +13 -13
  53. package/{dist/src → src}/v0_8/styles/layout.js.map +1 -1
  54. package/src/v0_8/styles/opacity.js +24 -0
  55. package/src/v0_8/{events/index.ts → styles/shared.js} +3 -4
  56. package/src/v0_8/styles/styles.test.d.ts +2 -0
  57. package/src/v0_8/styles/styles.test.d.ts.map +1 -0
  58. package/src/v0_8/styles/styles.test.js +86 -0
  59. package/src/v0_8/styles/styles.test.js.map +1 -0
  60. package/{dist/src → src}/v0_8/styles/type.js +13 -13
  61. package/{dist/src → src}/v0_8/styles/utils.js +13 -13
  62. package/{dist/src → src}/v0_8/types/client-event.d.ts +10 -8
  63. package/src/v0_8/types/client-event.d.ts.map +1 -0
  64. package/src/v0_8/types/client-event.js +17 -0
  65. package/src/v0_8/types/colors.js +19 -0
  66. package/src/v0_8/types/components.d.ts +41 -0
  67. package/src/v0_8/types/components.d.ts.map +1 -0
  68. package/src/v0_8/types/components.js +17 -0
  69. package/src/v0_8/types/primitives.d.ts +9 -0
  70. package/src/v0_8/types/primitives.d.ts.map +1 -0
  71. package/src/v0_8/types/primitives.js +17 -0
  72. package/{dist/src → src}/v0_8/types/types.d.ts +44 -22
  73. package/src/v0_8/types/types.d.ts.map +1 -0
  74. package/src/v0_8/types/types.js +17 -0
  75. package/src/v0_9/basic_catalog/components/basic_components.d.ts +3359 -0
  76. package/src/v0_9/basic_catalog/components/basic_components.d.ts.map +1 -0
  77. package/src/v0_9/basic_catalog/components/basic_components.js +448 -0
  78. package/src/v0_9/basic_catalog/components/basic_components.js.map +1 -0
  79. package/src/v0_9/basic_catalog/components/basic_components.test.d.ts +2 -0
  80. package/src/v0_9/basic_catalog/components/basic_components.test.d.ts.map +1 -0
  81. package/src/v0_9/basic_catalog/components/basic_components.test.js +46 -0
  82. package/src/v0_9/basic_catalog/components/basic_components.test.js.map +1 -0
  83. package/src/v0_9/basic_catalog/expressions/expression_parser.d.ts +38 -0
  84. package/src/v0_9/basic_catalog/expressions/expression_parser.d.ts.map +1 -0
  85. package/src/v0_9/basic_catalog/expressions/expression_parser.js +294 -0
  86. package/src/v0_9/basic_catalog/expressions/expression_parser.js.map +1 -0
  87. package/src/v0_9/basic_catalog/expressions/expression_parser.test.d.ts +2 -0
  88. package/src/v0_9/basic_catalog/expressions/expression_parser.test.d.ts.map +1 -0
  89. package/src/v0_9/basic_catalog/expressions/expression_parser.test.js +126 -0
  90. package/src/v0_9/basic_catalog/expressions/expression_parser.test.js.map +1 -0
  91. package/src/v0_9/basic_catalog/functions/basic_functions.d.ts +32 -0
  92. package/src/v0_9/basic_catalog/functions/basic_functions.d.ts.map +1 -0
  93. package/src/v0_9/basic_catalog/functions/basic_functions.js +212 -0
  94. package/src/v0_9/basic_catalog/functions/basic_functions.js.map +1 -0
  95. package/src/v0_9/basic_catalog/functions/basic_functions.test.d.ts +2 -0
  96. package/src/v0_9/basic_catalog/functions/basic_functions.test.d.ts.map +1 -0
  97. package/src/v0_9/basic_catalog/functions/basic_functions.test.js +301 -0
  98. package/src/v0_9/basic_catalog/functions/basic_functions.test.js.map +1 -0
  99. package/src/v0_9/basic_catalog/functions/basic_functions_api.d.ts +930 -0
  100. package/src/v0_9/basic_catalog/functions/basic_functions_api.d.ts.map +1 -0
  101. package/src/v0_9/basic_catalog/functions/basic_functions_api.js +466 -0
  102. package/src/v0_9/basic_catalog/functions/basic_functions_api.js.map +1 -0
  103. package/src/v0_9/basic_catalog/index.d.ts +5 -0
  104. package/src/v0_9/basic_catalog/index.d.ts.map +1 -0
  105. package/src/v0_9/basic_catalog/index.js +20 -0
  106. package/src/v0_9/basic_catalog/index.js.map +1 -0
  107. package/src/v0_9/catalog/function_invoker.d.ts +12 -0
  108. package/src/v0_9/catalog/function_invoker.d.ts.map +1 -0
  109. package/src/v0_9/catalog/function_invoker.js +17 -0
  110. package/src/v0_9/catalog/function_invoker.js.map +1 -0
  111. package/src/v0_9/catalog/types.d.ts +80 -0
  112. package/src/v0_9/catalog/types.d.ts.map +1 -0
  113. package/src/v0_9/catalog/types.js +68 -0
  114. package/src/v0_9/catalog/types.js.map +1 -0
  115. package/src/v0_9/catalog/types.test.d.ts +2 -0
  116. package/src/v0_9/catalog/types.test.d.ts.map +1 -0
  117. package/src/v0_9/catalog/types.test.js +88 -0
  118. package/src/v0_9/catalog/types.test.js.map +1 -0
  119. package/src/v0_9/common/events.d.ts +45 -0
  120. package/src/v0_9/common/events.d.ts.map +1 -0
  121. package/src/v0_9/common/events.js +58 -0
  122. package/src/v0_9/common/events.js.map +1 -0
  123. package/src/v0_9/common/events.test.d.ts +2 -0
  124. package/src/v0_9/common/events.test.d.ts.map +1 -0
  125. package/src/v0_9/common/events.test.js +58 -0
  126. package/src/v0_9/common/events.test.js.map +1 -0
  127. package/src/v0_9/errors.d.ts +40 -0
  128. package/src/v0_9/errors.d.ts.map +1 -0
  129. package/src/v0_9/errors.js +69 -0
  130. package/src/v0_9/errors.js.map +1 -0
  131. package/src/v0_9/index.d.ts +152 -0
  132. package/src/v0_9/index.d.ts.map +1 -0
  133. package/src/v0_9/index.js +41 -0
  134. package/src/v0_9/index.js.map +1 -0
  135. package/src/v0_9/processing/message-processor.d.ts +70 -0
  136. package/src/v0_9/processing/message-processor.d.ts.map +1 -0
  137. package/src/v0_9/processing/message-processor.js +289 -0
  138. package/src/v0_9/processing/message-processor.js.map +1 -0
  139. package/src/v0_9/processing/message-processor.test.js +547 -0
  140. package/src/v0_9/processing/message-processor.test.js.map +1 -0
  141. package/src/v0_9/reactivity/signals.d.ts +43 -0
  142. package/src/v0_9/reactivity/signals.d.ts.map +1 -0
  143. package/src/v0_9/reactivity/signals.js +17 -0
  144. package/src/v0_9/reactivity/signals.js.map +1 -0
  145. package/src/v0_9/reactivity/signals.test.d.ts +17 -0
  146. package/src/v0_9/reactivity/signals.test.d.ts.map +1 -0
  147. package/src/v0_9/reactivity/signals.test.js +100 -0
  148. package/src/v0_9/reactivity/signals.test.js.map +1 -0
  149. package/src/v0_9/rendering/component-context.d.ts +35 -0
  150. package/src/v0_9/rendering/component-context.d.ts.map +1 -0
  151. package/src/v0_9/rendering/component-context.js +49 -0
  152. package/src/v0_9/rendering/component-context.js.map +1 -0
  153. package/src/v0_9/rendering/component-context.test.d.ts +2 -0
  154. package/src/v0_9/rendering/component-context.test.d.ts.map +1 -0
  155. package/src/v0_9/rendering/component-context.test.js +55 -0
  156. package/src/v0_9/rendering/component-context.test.js.map +1 -0
  157. package/src/v0_9/rendering/data-context.d.ts +99 -0
  158. package/src/v0_9/rendering/data-context.d.ts.map +1 -0
  159. package/src/v0_9/rendering/data-context.js +310 -0
  160. package/src/v0_9/rendering/data-context.js.map +1 -0
  161. package/src/v0_9/rendering/data-context.test.js +379 -0
  162. package/src/v0_9/rendering/data-context.test.js.map +1 -0
  163. package/src/v0_9/rendering/generic-binder.d.ts +122 -0
  164. package/src/v0_9/rendering/generic-binder.d.ts.map +1 -0
  165. package/src/v0_9/rendering/generic-binder.js +315 -0
  166. package/src/v0_9/rendering/generic-binder.js.map +1 -0
  167. package/src/v0_9/rendering/generic-binder.test.d.ts +2 -0
  168. package/src/v0_9/rendering/generic-binder.test.d.ts.map +1 -0
  169. package/src/v0_9/rendering/generic-binder.test.js +166 -0
  170. package/src/v0_9/rendering/generic-binder.test.js.map +1 -0
  171. package/src/v0_9/schema/client-capabilities.d.ts +34 -0
  172. package/src/v0_9/schema/client-capabilities.d.ts.map +1 -0
  173. package/src/v0_9/schema/client-capabilities.js +17 -0
  174. package/src/v0_9/schema/client-capabilities.js.map +1 -0
  175. package/src/v0_9/schema/client-to-server.d.ts +208 -0
  176. package/src/v0_9/schema/client-to-server.d.ts.map +1 -0
  177. package/src/v0_9/schema/client-to-server.js +104 -0
  178. package/src/v0_9/schema/client-to-server.js.map +1 -0
  179. package/src/v0_9/schema/client-to-server.test.d.ts +2 -0
  180. package/src/v0_9/schema/client-to-server.test.d.ts.map +1 -0
  181. package/src/v0_9/schema/client-to-server.test.js +85 -0
  182. package/src/v0_9/schema/client-to-server.test.js.map +1 -0
  183. package/{dist/src → src}/v0_9/schema/common-types.d.ts +318 -88
  184. package/src/v0_9/schema/common-types.d.ts.map +1 -0
  185. package/src/v0_9/schema/common-types.js +141 -0
  186. package/src/v0_9/schema/common-types.js.map +1 -0
  187. package/src/v0_9/schema/index.d.ts +5 -0
  188. package/src/v0_9/schema/index.d.ts.map +1 -0
  189. package/src/v0_9/schema/index.js +20 -0
  190. package/src/v0_9/schema/index.js.map +1 -0
  191. package/src/v0_9/schema/server-to-client.d.ts +307 -0
  192. package/src/v0_9/schema/server-to-client.d.ts.map +1 -0
  193. package/src/v0_9/schema/server-to-client.js +92 -0
  194. package/src/v0_9/schema/server-to-client.js.map +1 -0
  195. package/src/v0_9/schema/verify-schema.test.d.ts +17 -0
  196. package/src/v0_9/schema/verify-schema.test.d.ts.map +1 -0
  197. package/src/v0_9/schema/verify-schema.test.js +174 -0
  198. package/src/v0_9/schema/verify-schema.test.js.map +1 -0
  199. package/src/v0_9/schemas/basic_catalog.json +1387 -0
  200. package/src/v0_9/schemas/client_capabilities.json +97 -0
  201. package/src/v0_9/schemas/client_data_model.json +22 -0
  202. package/src/v0_9/schemas/client_to_server.json +104 -0
  203. package/src/v0_9/schemas/client_to_server_list.json +10 -0
  204. package/src/v0_9/schemas/common_types.json +315 -0
  205. package/src/v0_9/schemas/sample.json +22 -0
  206. package/src/v0_9/schemas/server_capabilities.json +26 -0
  207. package/src/v0_9/schemas/server_to_client.json +131 -0
  208. package/src/v0_9/schemas/server_to_client_list.json +10 -0
  209. package/src/v0_9/state/component-model.d.ts +36 -0
  210. package/src/v0_9/state/component-model.d.ts.map +1 -0
  211. package/src/v0_9/state/component-model.js +65 -0
  212. package/src/v0_9/state/component-model.js.map +1 -0
  213. package/{dist/src → src}/v0_9/state/component-model.test.js +23 -0
  214. package/src/v0_9/state/component-model.test.js.map +1 -0
  215. package/src/v0_9/state/data-model.d.ts +75 -0
  216. package/src/v0_9/state/data-model.d.ts.map +1 -0
  217. package/src/v0_9/state/data-model.js +235 -0
  218. package/src/v0_9/state/data-model.js.map +1 -0
  219. package/{dist/src → src}/v0_9/state/data-model.test.js +77 -17
  220. package/src/v0_9/state/data-model.test.js.map +1 -0
  221. package/src/v0_9/state/surface-components-model.d.ts +45 -0
  222. package/src/v0_9/state/surface-components-model.d.ts.map +1 -0
  223. package/src/v0_9/state/surface-components-model.js +86 -0
  224. package/src/v0_9/state/surface-components-model.js.map +1 -0
  225. package/{dist/src → src}/v0_9/state/surface-components-model.test.js +44 -2
  226. package/src/v0_9/state/surface-components-model.test.js.map +1 -0
  227. package/{dist/src → src}/v0_9/state/surface-group-model.d.ts +28 -1
  228. package/src/v0_9/state/surface-group-model.d.ts.map +1 -0
  229. package/{dist/src → src}/v0_9/state/surface-group-model.js +44 -1
  230. package/src/v0_9/state/surface-group-model.js.map +1 -0
  231. package/{dist/src → src}/v0_9/state/surface-group-model.test.js +47 -6
  232. package/src/v0_9/state/surface-group-model.test.js.map +1 -0
  233. package/src/v0_9/state/surface-model.d.ts +62 -0
  234. package/src/v0_9/state/surface-model.d.ts.map +1 -0
  235. package/src/v0_9/state/surface-model.js +101 -0
  236. package/src/v0_9/state/surface-model.js.map +1 -0
  237. package/src/v0_9/state/surface-model.test.js +93 -0
  238. package/src/v0_9/state/surface-model.test.js.map +1 -0
  239. package/src/v0_9/test/function_execution.spec.d.ts +17 -0
  240. package/src/v0_9/test/function_execution.spec.d.ts.map +1 -0
  241. package/src/v0_9/test/function_execution.spec.js +127 -0
  242. package/src/v0_9/test/function_execution.spec.js.map +1 -0
  243. package/src/v0_9/test/test-utils.d.ts.map +1 -0
  244. package/{dist/src → src}/v0_9/test/test-utils.js +15 -0
  245. package/src/v0_9/test/test-utils.js.map +1 -0
  246. package/dist/.tsbuildinfo +0 -1
  247. package/dist/src/v0_8/data/model-processor.js.map +0 -1
  248. package/dist/src/v0_8/events/validation-event.d.ts.map +0 -1
  249. package/dist/src/v0_8/index.js +0 -12
  250. package/dist/src/v0_8/index.js.map +0 -1
  251. package/dist/src/v0_8/schemas/server_to_client_with_standard_catalog.json +0 -823
  252. package/dist/src/v0_8/styles/icons.d.ts +0 -11
  253. package/dist/src/v0_8/styles/index.js +0 -35
  254. package/dist/src/v0_8/styles/opacity.js +0 -24
  255. package/dist/src/v0_8/styles/shared.js +0 -17
  256. package/dist/src/v0_8/types/client-event.d.ts.map +0 -1
  257. package/dist/src/v0_8/types/client-event.js +0 -17
  258. package/dist/src/v0_8/types/colors.js +0 -19
  259. package/dist/src/v0_8/types/components.d.ts +0 -176
  260. package/dist/src/v0_8/types/components.d.ts.map +0 -1
  261. package/dist/src/v0_8/types/components.js +0 -17
  262. package/dist/src/v0_8/types/primitives.d.ts +0 -43
  263. package/dist/src/v0_8/types/primitives.d.ts.map +0 -1
  264. package/dist/src/v0_8/types/primitives.js +0 -17
  265. package/dist/src/v0_8/types/types.d.ts.map +0 -1
  266. package/dist/src/v0_8/types/types.js +0 -17
  267. package/dist/src/v0_9/catalog/types.d.ts +0 -27
  268. package/dist/src/v0_9/catalog/types.d.ts.map +0 -1
  269. package/dist/src/v0_9/catalog/types.js +0 -11
  270. package/dist/src/v0_9/catalog/types.js.map +0 -1
  271. package/dist/src/v0_9/common/events.d.ts +0 -24
  272. package/dist/src/v0_9/common/events.d.ts.map +0 -1
  273. package/dist/src/v0_9/common/events.js +0 -29
  274. package/dist/src/v0_9/common/events.js.map +0 -1
  275. package/dist/src/v0_9/index.d.ts +0 -11
  276. package/dist/src/v0_9/index.d.ts.map +0 -1
  277. package/dist/src/v0_9/index.js +0 -11
  278. package/dist/src/v0_9/index.js.map +0 -1
  279. package/dist/src/v0_9/processing/message-processor.d.ts +0 -34
  280. package/dist/src/v0_9/processing/message-processor.d.ts.map +0 -1
  281. package/dist/src/v0_9/processing/message-processor.js +0 -128
  282. package/dist/src/v0_9/processing/message-processor.js.map +0 -1
  283. package/dist/src/v0_9/processing/message-processor.test.js +0 -112
  284. package/dist/src/v0_9/processing/message-processor.test.js.map +0 -1
  285. package/dist/src/v0_9/rendering/component-context.d.ts +0 -17
  286. package/dist/src/v0_9/rendering/component-context.d.ts.map +0 -1
  287. package/dist/src/v0_9/rendering/component-context.js +0 -21
  288. package/dist/src/v0_9/rendering/component-context.js.map +0 -1
  289. package/dist/src/v0_9/rendering/data-context.d.ts +0 -37
  290. package/dist/src/v0_9/rendering/data-context.d.ts.map +0 -1
  291. package/dist/src/v0_9/rendering/data-context.js +0 -97
  292. package/dist/src/v0_9/rendering/data-context.js.map +0 -1
  293. package/dist/src/v0_9/rendering/data-context.test.js +0 -71
  294. package/dist/src/v0_9/rendering/data-context.test.js.map +0 -1
  295. package/dist/src/v0_9/schema/common-types.d.ts.map +0 -1
  296. package/dist/src/v0_9/schema/common-types.js +0 -92
  297. package/dist/src/v0_9/schema/common-types.js.map +0 -1
  298. package/dist/src/v0_9/schema/index.d.ts +0 -3
  299. package/dist/src/v0_9/schema/index.d.ts.map +0 -1
  300. package/dist/src/v0_9/schema/index.js +0 -3
  301. package/dist/src/v0_9/schema/index.js.map +0 -1
  302. package/dist/src/v0_9/schema/server-to-client.d.ts +0 -84
  303. package/dist/src/v0_9/schema/server-to-client.d.ts.map +0 -1
  304. package/dist/src/v0_9/schema/server-to-client.js +0 -21
  305. package/dist/src/v0_9/schema/server-to-client.js.map +0 -1
  306. package/dist/src/v0_9/state/component-model.d.ts +0 -16
  307. package/dist/src/v0_9/state/component-model.d.ts.map +0 -1
  308. package/dist/src/v0_9/state/component-model.js +0 -24
  309. package/dist/src/v0_9/state/component-model.js.map +0 -1
  310. package/dist/src/v0_9/state/component-model.test.js.map +0 -1
  311. package/dist/src/v0_9/state/data-model.d.ts +0 -47
  312. package/dist/src/v0_9/state/data-model.d.ts.map +0 -1
  313. package/dist/src/v0_9/state/data-model.js +0 -191
  314. package/dist/src/v0_9/state/data-model.js.map +0 -1
  315. package/dist/src/v0_9/state/data-model.test.js.map +0 -1
  316. package/dist/src/v0_9/state/surface-components-model.d.ts +0 -19
  317. package/dist/src/v0_9/state/surface-components-model.d.ts.map +0 -1
  318. package/dist/src/v0_9/state/surface-components-model.js +0 -42
  319. package/dist/src/v0_9/state/surface-components-model.js.map +0 -1
  320. package/dist/src/v0_9/state/surface-components-model.test.js.map +0 -1
  321. package/dist/src/v0_9/state/surface-group-model.d.ts.map +0 -1
  322. package/dist/src/v0_9/state/surface-group-model.js.map +0 -1
  323. package/dist/src/v0_9/state/surface-group-model.test.js.map +0 -1
  324. package/dist/src/v0_9/state/surface-model.d.ts +0 -23
  325. package/dist/src/v0_9/state/surface-model.d.ts.map +0 -1
  326. package/dist/src/v0_9/state/surface-model.js +0 -28
  327. package/dist/src/v0_9/state/surface-model.js.map +0 -1
  328. package/dist/src/v0_9/state/surface-model.test.js +0 -39
  329. package/dist/src/v0_9/state/surface-model.test.js.map +0 -1
  330. package/dist/src/v0_9/test/test-utils.d.ts.map +0 -1
  331. package/dist/src/v0_9/test/test-utils.js.map +0 -1
  332. package/src/v0_8/data/guards.ts +0 -236
  333. package/src/v0_8/data/model-processor.ts +0 -855
  334. package/src/v0_8/events/base.ts +0 -24
  335. package/src/v0_8/events/validation-event.ts +0 -66
  336. package/src/v0_8/index.ts +0 -12
  337. package/src/v0_8/styles/behavior.ts +0 -55
  338. package/src/v0_8/styles/border.ts +0 -42
  339. package/src/v0_8/styles/colors.ts +0 -100
  340. package/src/v0_8/styles/icons.ts +0 -60
  341. package/src/v0_8/styles/index.ts +0 -37
  342. package/src/v0_8/styles/layout.ts +0 -235
  343. package/src/v0_8/styles/opacity.ts +0 -24
  344. package/src/v0_8/styles/shared.ts +0 -17
  345. package/src/v0_8/styles/type.ts +0 -156
  346. package/src/v0_8/styles/utils.ts +0 -104
  347. package/src/v0_8/types/client-event.ts +0 -80
  348. package/src/v0_8/types/colors.ts +0 -66
  349. package/src/v0_8/types/components.ts +0 -213
  350. package/src/v0_8/types/primitives.ts +0 -60
  351. package/src/v0_8/types/types.ts +0 -557
  352. package/src/v0_9/catalog/types.ts +0 -38
  353. package/src/v0_9/common/events.ts +0 -44
  354. package/src/v0_9/index.ts +0 -12
  355. package/src/v0_9/processing/message-processor.test.ts +0 -133
  356. package/src/v0_9/processing/message-processor.ts +0 -150
  357. package/src/v0_9/rendering/component-context.ts +0 -36
  358. package/src/v0_9/rendering/data-context.test.ts +0 -85
  359. package/src/v0_9/rendering/data-context.ts +0 -110
  360. package/src/v0_9/schema/common-types.ts +0 -125
  361. package/src/v0_9/schema/index.ts +0 -2
  362. package/src/v0_9/schema/server-to-client.ts +0 -23
  363. package/src/v0_9/state/component-model.test.ts +0 -50
  364. package/src/v0_9/state/component-model.ts +0 -32
  365. package/src/v0_9/state/data-model.test.ts +0 -257
  366. package/src/v0_9/state/data-model.ts +0 -239
  367. package/src/v0_9/state/surface-components-model.test.ts +0 -59
  368. package/src/v0_9/state/surface-components-model.ts +0 -48
  369. package/src/v0_9/state/surface-group-model.test.ts +0 -82
  370. package/src/v0_9/state/surface-group-model.ts +0 -66
  371. package/src/v0_9/state/surface-model.test.ts +0 -44
  372. package/src/v0_9/state/surface-model.ts +0 -39
  373. package/src/v0_9/test/test-utils.ts +0 -22
  374. /package/{dist/src → src}/v0_8/data/guards.d.ts +0 -0
  375. /package/{dist/src → src}/v0_8/data/guards.d.ts.map +0 -0
  376. /package/{dist/src → src}/v0_8/data/guards.js.map +0 -0
  377. /package/{dist/src → src}/v0_8/events/base.d.ts +0 -0
  378. /package/{dist/src → src}/v0_8/events/base.d.ts.map +0 -0
  379. /package/{dist/src → src}/v0_8/events/base.js +0 -0
  380. /package/{dist/src → src}/v0_8/events/base.js.map +0 -0
  381. /package/{dist/src → src}/v0_8/events/index.d.ts +0 -0
  382. /package/{dist/src → src}/v0_8/events/index.d.ts.map +0 -0
  383. /package/{dist/src → src}/v0_8/events/index.js +0 -0
  384. /package/{dist/src → src}/v0_8/events/index.js.map +0 -0
  385. /package/{dist/src → src}/v0_8/events/validation-event.d.ts +0 -0
  386. /package/{dist/src → src}/v0_8/events/validation-event.js +0 -0
  387. /package/{dist/src → src}/v0_8/schemas/a2ui_client_capabilities_schema.json +0 -0
  388. /package/{dist/src → src}/v0_8/schemas/catalog_description_schema.json +0 -0
  389. /package/{dist/src → src}/v0_8/schemas/client_to_server.json +0 -0
  390. /package/{dist/src → src}/v0_8/styles/behavior.d.ts +0 -0
  391. /package/{dist/src → src}/v0_8/styles/behavior.d.ts.map +0 -0
  392. /package/{dist/src → src}/v0_8/styles/behavior.js.map +0 -0
  393. /package/{dist/src → src}/v0_8/styles/border.d.ts +0 -0
  394. /package/{dist/src → src}/v0_8/styles/border.d.ts.map +0 -0
  395. /package/{dist/src → src}/v0_8/styles/border.js.map +0 -0
  396. /package/{dist/src → src}/v0_8/styles/colors.d.ts +0 -0
  397. /package/{dist/src → src}/v0_8/styles/colors.d.ts.map +0 -0
  398. /package/{dist/src → src}/v0_8/styles/index.d.ts +0 -0
  399. /package/{dist/src → src}/v0_8/styles/index.d.ts.map +0 -0
  400. /package/{dist/src → src}/v0_8/styles/index.js.map +0 -0
  401. /package/{dist/src → src}/v0_8/styles/layout.d.ts +0 -0
  402. /package/{dist/src → src}/v0_8/styles/layout.d.ts.map +0 -0
  403. /package/{dist/src → src}/v0_8/styles/opacity.d.ts +0 -0
  404. /package/{dist/src → src}/v0_8/styles/opacity.d.ts.map +0 -0
  405. /package/{dist/src → src}/v0_8/styles/opacity.js.map +0 -0
  406. /package/{dist/src → src}/v0_8/styles/shared.d.ts +0 -0
  407. /package/{dist/src → src}/v0_8/styles/shared.d.ts.map +0 -0
  408. /package/{dist/src → src}/v0_8/styles/shared.js.map +0 -0
  409. /package/{dist/src → src}/v0_8/styles/type.d.ts +0 -0
  410. /package/{dist/src → src}/v0_8/styles/type.d.ts.map +0 -0
  411. /package/{dist/src → src}/v0_8/styles/type.js.map +0 -0
  412. /package/{dist/src → src}/v0_8/styles/utils.d.ts +0 -0
  413. /package/{dist/src → src}/v0_8/styles/utils.d.ts.map +0 -0
  414. /package/{dist/src → src}/v0_8/styles/utils.js.map +0 -0
  415. /package/{dist/src → src}/v0_8/types/client-event.js.map +0 -0
  416. /package/{dist/src → src}/v0_8/types/colors.d.ts +0 -0
  417. /package/{dist/src → src}/v0_8/types/colors.d.ts.map +0 -0
  418. /package/{dist/src → src}/v0_8/types/colors.js.map +0 -0
  419. /package/{dist/src → src}/v0_8/types/components.js.map +0 -0
  420. /package/{dist/src → src}/v0_8/types/primitives.js.map +0 -0
  421. /package/{dist/src → src}/v0_8/types/types.js.map +0 -0
  422. /package/{dist/src → src}/v0_9/processing/message-processor.test.d.ts +0 -0
  423. /package/{dist/src → src}/v0_9/processing/message-processor.test.d.ts.map +0 -0
  424. /package/{dist/src → src}/v0_9/rendering/data-context.test.d.ts +0 -0
  425. /package/{dist/src → src}/v0_9/rendering/data-context.test.d.ts.map +0 -0
  426. /package/{dist/src → src}/v0_9/state/component-model.test.d.ts +0 -0
  427. /package/{dist/src → src}/v0_9/state/component-model.test.d.ts.map +0 -0
  428. /package/{dist/src → src}/v0_9/state/data-model.test.d.ts +0 -0
  429. /package/{dist/src → src}/v0_9/state/data-model.test.d.ts.map +0 -0
  430. /package/{dist/src → src}/v0_9/state/surface-components-model.test.d.ts +0 -0
  431. /package/{dist/src → src}/v0_9/state/surface-components-model.test.d.ts.map +0 -0
  432. /package/{dist/src → src}/v0_9/state/surface-group-model.test.d.ts +0 -0
  433. /package/{dist/src → src}/v0_9/state/surface-group-model.test.d.ts.map +0 -0
  434. /package/{dist/src → src}/v0_9/state/surface-model.test.d.ts +0 -0
  435. /package/{dist/src → src}/v0_9/state/surface-model.test.d.ts.map +0 -0
  436. /package/{dist/src → src}/v0_9/test/test-utils.d.ts +0 -0
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Copyright 2026 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /**
17
+ * Traverses a Zod schema tree to build a `BehaviorNode` map.
18
+ *
19
+ * This allows the Generic Binder to know *how* to handle a piece of raw JSON
20
+ * data without needing hardcoded logic for every specific component type.
21
+ * It identifies core A2UI primitives (Dynamic values, Actions, ChildLists) by
22
+ * inspecting the shape of ZodUnion objects defined in `common-types.ts`.
23
+ */
24
+ export function scrapeSchemaBehavior(schema) {
25
+ return getFieldBehavior(schema);
26
+ }
27
+ function getFieldBehavior(type, propertyName) {
28
+ let current = type;
29
+ // Unwrap optionals/nullables/defaults
30
+ while (current._def.typeName === 'ZodOptional' ||
31
+ current._def.typeName === 'ZodNullable' ||
32
+ current._def.typeName === 'ZodDefault') {
33
+ current = current._def.innerType;
34
+ }
35
+ if (propertyName === 'checks') {
36
+ return { type: 'CHECKABLE' };
37
+ }
38
+ // Structural matching for A2UI primitives using typeName to avoid dual-module instanceof issues
39
+ if (current._def.typeName === 'ZodUnion') {
40
+ const options = current._def.options;
41
+ // ActionSchema is a union containing { event: ... }
42
+ const isAction = options.some(o => o._def.typeName === 'ZodObject' && o._def.shape().event);
43
+ if (isAction)
44
+ return { type: 'ACTION' };
45
+ // Dynamic strings/values are unions containing DataBindingSchema { path: ... } but NOT { componentId: ... }
46
+ const isDynamic = options.some(o => o._def.typeName === 'ZodObject' &&
47
+ o._def.shape().path &&
48
+ !o._def.shape().componentId);
49
+ if (isDynamic)
50
+ return { type: 'DYNAMIC' };
51
+ // ChildList is a union containing an array and an object with { componentId, path }
52
+ const isChildList = options.some(o => o._def.typeName === 'ZodObject' &&
53
+ o._def.shape().componentId &&
54
+ o._def.shape().path);
55
+ if (isChildList)
56
+ return { type: 'STRUCTURAL' };
57
+ }
58
+ else if (current._def.typeName === 'ZodString') {
59
+ // ComponentId falls back to STATIC since we can't perfectly identify it, which is fine because STATIC returns strings as-is.
60
+ }
61
+ // Recursive array scraping
62
+ if (current._def.typeName === 'ZodArray') {
63
+ return {
64
+ type: 'ARRAY',
65
+ element: getFieldBehavior(current._def.type),
66
+ };
67
+ }
68
+ // Recursive object scraping
69
+ if (current._def.typeName === 'ZodObject') {
70
+ const shape = {};
71
+ const objShape = current._def.shape();
72
+ for (const [key, value] of Object.entries(objShape)) {
73
+ shape[key] = getFieldBehavior(value, key);
74
+ }
75
+ return { type: 'OBJECT', shape };
76
+ }
77
+ // Fallback
78
+ return { type: 'STATIC' };
79
+ }
80
+ /**
81
+ * The Generic Binder is a framework-agnostic engine that transforms raw A2UI JSON payload
82
+ * configurations into a single, cohesive reactive stream of strongly-typed `ResolvedProps`.
83
+ *
84
+ * It solves the problem of manual state management: developers do not need to write
85
+ * boilerplate code to subscribe to data paths, evaluate logic expressions, or tear down
86
+ * listeners when components unmount.
87
+ *
88
+ * Usage Flow:
89
+ * 1. Takes a `ComponentContext` (the raw JSON config) and a `Zod Schema` (the API definition).
90
+ * 2. Uses `scrapeSchemaBehavior` to analyze the schema.
91
+ * 3. Deeply iterates over the raw JSON properties, applying rules based on the scraped behavior.
92
+ * 4. Subscribes to the `DataContext` for all `DYNAMIC` and `CHECKABLE` paths.
93
+ * 5. Bundles the final resolved primitives, structural arrays, and executable Actions into `currentProps`.
94
+ * 6. Exposes a `subscribe()` interface for framework-specific adapters (React, Angular) to listen to state changes.
95
+ */
96
+ export class GenericBinder {
97
+ constructor(context, schema) {
98
+ this.dataListeners = [];
99
+ this.propsListeners = [];
100
+ this.currentProps = {};
101
+ this.isConnected = false;
102
+ this.context = context;
103
+ this.behaviorTree = scrapeSchemaBehavior(schema);
104
+ if (this.behaviorTree.type !== 'OBJECT') {
105
+ this.behaviorTree = { type: 'OBJECT', shape: {} };
106
+ }
107
+ this.resolveInitialProps();
108
+ }
109
+ resolveInitialProps() {
110
+ const props = this.context.componentModel.properties;
111
+ const resolved = this.resolveAndBind(props, this.behaviorTree, [], true);
112
+ this.currentProps = { ...this.currentProps, ...resolved };
113
+ }
114
+ connect() {
115
+ if (this.isConnected)
116
+ return;
117
+ this.isConnected = true;
118
+ const sub = this.context.componentModel.onUpdated.subscribe(() => {
119
+ this.rebuildAllBindings();
120
+ });
121
+ this.compUnsub = () => sub.unsubscribe();
122
+ this.rebuildAllBindings();
123
+ }
124
+ rebuildAllBindings() {
125
+ this.dataListeners.forEach(l => l());
126
+ this.dataListeners = [];
127
+ const props = this.context.componentModel.properties;
128
+ const resolved = this.resolveAndBind(props, this.behaviorTree, [], false);
129
+ this.currentProps = { ...this.currentProps, ...resolved };
130
+ this.notify();
131
+ }
132
+ resolveAndBind(value, behavior, path, isSync) {
133
+ if (value === undefined || value === null)
134
+ return value;
135
+ switch (behavior.type) {
136
+ case 'DYNAMIC': {
137
+ const bound = this.context.dataContext.subscribeDynamicValue(value, newVal => {
138
+ this.updateDeepValue(path, newVal);
139
+ this.notify();
140
+ });
141
+ if (!isSync) {
142
+ this.dataListeners.push(() => bound.unsubscribe());
143
+ }
144
+ else {
145
+ bound.unsubscribe();
146
+ }
147
+ return bound.value;
148
+ }
149
+ case 'ACTION': {
150
+ return () => {
151
+ const resolveDeepSync = (val) => {
152
+ if (typeof val !== 'object' || val === null)
153
+ return val;
154
+ if ('path' in val || 'call' in val)
155
+ return this.context.dataContext.resolveDynamicValue(val);
156
+ if (Array.isArray(val))
157
+ return val.map(resolveDeepSync);
158
+ const res = {};
159
+ for (const [k, v] of Object.entries(val))
160
+ res[k] = resolveDeepSync(v);
161
+ return res;
162
+ };
163
+ this.context.dispatchAction(resolveDeepSync(value));
164
+ };
165
+ }
166
+ case 'STRUCTURAL': {
167
+ if (value &&
168
+ typeof value === 'object' &&
169
+ value.path &&
170
+ value.componentId) {
171
+ const bound = this.context.dataContext.subscribeDynamicValue({ path: value.path }, newVal => {
172
+ const arr = Array.isArray(newVal) ? newVal : [];
173
+ const listContext = this.context.dataContext.nested(value.path);
174
+ const resolvedChildren = arr.map((_, i) => ({
175
+ id: value.componentId,
176
+ basePath: listContext.nested(String(i)).path,
177
+ }));
178
+ this.updateDeepValue(path, resolvedChildren);
179
+ this.notify();
180
+ });
181
+ if (!isSync) {
182
+ this.dataListeners.push(() => bound.unsubscribe());
183
+ }
184
+ else {
185
+ bound.unsubscribe();
186
+ }
187
+ const currentArr = Array.isArray(bound.value) ? bound.value : [];
188
+ const listContext = this.context.dataContext.nested(value.path);
189
+ return currentArr.map((_, i) => ({
190
+ id: value.componentId,
191
+ basePath: listContext.nested(String(i)).path,
192
+ }));
193
+ }
194
+ return value;
195
+ }
196
+ case 'CHECKABLE': {
197
+ const rules = Array.isArray(value) ? value : [];
198
+ const ruleResults = rules.map(() => ({ valid: true, message: '' }));
199
+ const parentPath = path.slice(0, -1);
200
+ const updateValidationState = () => {
201
+ const errors = ruleResults.filter(r => !r.valid).map(r => r.message);
202
+ this.updateDeepValue([...parentPath, 'isValid'], errors.length === 0);
203
+ this.updateDeepValue([...parentPath, 'validationErrors'], errors);
204
+ this.notify();
205
+ };
206
+ rules.forEach((rule, index) => {
207
+ const condition = rule.condition || rule; // Support both {condition, message} and direct logic expr if message is missing
208
+ const message = rule.message || 'Validation failed';
209
+ ruleResults[index].message = message;
210
+ const bound = this.context.dataContext.subscribeDynamicValue(condition, newVal => {
211
+ ruleResults[index].valid = !!newVal;
212
+ updateValidationState();
213
+ });
214
+ if (!isSync) {
215
+ this.dataListeners.push(() => bound.unsubscribe());
216
+ }
217
+ else {
218
+ bound.unsubscribe();
219
+ }
220
+ ruleResults[index].valid = !!bound.value;
221
+ });
222
+ // Set initial state
223
+ const initialErrors = ruleResults
224
+ .filter(r => !r.valid)
225
+ .map(r => r.message);
226
+ this.updateDeepValue([...parentPath, 'isValid'], initialErrors.length === 0);
227
+ this.updateDeepValue([...parentPath, 'validationErrors'], initialErrors);
228
+ return value; // The 'checks' property itself remains as the original rules array
229
+ }
230
+ case 'STATIC':
231
+ return value;
232
+ case 'ARRAY': {
233
+ if (!Array.isArray(value))
234
+ return value;
235
+ return value.map((item, index) => this.resolveAndBind(item, behavior.element, [...path, index.toString()], isSync));
236
+ }
237
+ case 'OBJECT': {
238
+ if (typeof value !== 'object')
239
+ return value;
240
+ const result = {};
241
+ // 1. Resolve all provided properties
242
+ for (const [k, v] of Object.entries(value)) {
243
+ const childBehavior = behavior.shape[k] || { type: 'STATIC' };
244
+ result[k] = this.resolveAndBind(v, childBehavior, [...path, k], isSync);
245
+ }
246
+ // 2. Ensure all dynamic setters exist, even if the property wasn't provided in the payload
247
+ for (const [k, childBehavior] of Object.entries(behavior.shape)) {
248
+ if (childBehavior.type === 'DYNAMIC') {
249
+ const setterName = `set${k.charAt(0).toUpperCase() + k.slice(1)}`;
250
+ const rawPropValue = value[k];
251
+ result[setterName] = (newValue) => {
252
+ if (rawPropValue &&
253
+ typeof rawPropValue === 'object' &&
254
+ 'path' in rawPropValue) {
255
+ this.context.dataContext.set(rawPropValue.path, newValue);
256
+ }
257
+ };
258
+ }
259
+ }
260
+ return result;
261
+ }
262
+ }
263
+ }
264
+ updateDeepValue(path, newValue) {
265
+ this.currentProps = this.cloneAndUpdate(this.currentProps, path, newValue);
266
+ }
267
+ cloneAndUpdate(obj, path, newValue) {
268
+ if (path.length === 0)
269
+ return newValue;
270
+ const [key, ...rest] = path;
271
+ if (Array.isArray(obj)) {
272
+ const newArr = [...obj];
273
+ newArr[Number(key)] = this.cloneAndUpdate(newArr[Number(key)], rest, newValue);
274
+ return newArr;
275
+ }
276
+ else {
277
+ return {
278
+ ...(obj || {}),
279
+ [key]: this.cloneAndUpdate((obj || {})[key], rest, newValue),
280
+ };
281
+ }
282
+ }
283
+ dispose() {
284
+ if (!this.isConnected)
285
+ return;
286
+ this.isConnected = false;
287
+ this.dataListeners.forEach(l => l());
288
+ this.dataListeners = [];
289
+ if (this.compUnsub) {
290
+ this.compUnsub();
291
+ this.compUnsub = undefined;
292
+ }
293
+ }
294
+ notify() {
295
+ this.propsListeners.forEach(l => l(this.currentProps));
296
+ }
297
+ subscribe(listener) {
298
+ if (this.propsListeners.length === 0) {
299
+ this.connect();
300
+ }
301
+ this.propsListeners.push(listener);
302
+ return {
303
+ unsubscribe: () => {
304
+ this.propsListeners = this.propsListeners.filter(l => l !== listener);
305
+ if (this.propsListeners.length === 0) {
306
+ this.dispose();
307
+ }
308
+ },
309
+ };
310
+ }
311
+ get snapshot() {
312
+ return this.currentProps;
313
+ }
314
+ }
315
+ //# sourceMappingURL=generic-binder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-binder.js","sourceRoot":"","sources":["../../../../src/v0_9/rendering/generic-binder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generic-binder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-binder.test.d.ts","sourceRoot":"","sources":["../../../../src/v0_9/rendering/generic-binder.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,166 @@
1
+ /*
2
+ * Copyright 2026 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import assert from 'node:assert';
17
+ import { describe, it } from 'node:test';
18
+ import { z } from 'zod';
19
+ import { GenericBinder } from './generic-binder.js';
20
+ import { ComponentContext } from './component-context.js';
21
+ import { SurfaceModel } from '../state/surface-model.js';
22
+ import { Catalog } from '../catalog/types.js';
23
+ import { ComponentModel } from '../state/component-model.js';
24
+ import { CommonSchemas } from '../schema/common-types.js';
25
+ describe('GenericBinder Checkable Trait', () => {
26
+ const mockCatalog = new Catalog('test', [], []);
27
+ function setupSurfaceAndMocks() {
28
+ const surface = new SurfaceModel('s1', mockCatalog);
29
+ // Mock required and min_length functions
30
+ surface.catalog.functions = new Map([
31
+ [
32
+ 'required',
33
+ {
34
+ execute: (args) => !!args.value,
35
+ schema: z.object({ value: z.any() }),
36
+ },
37
+ ],
38
+ [
39
+ 'min_length',
40
+ {
41
+ execute: (args) => typeof args.value === 'string' && args.value.length >= args.min,
42
+ schema: z.object({ value: z.any(), min: z.number() }),
43
+ },
44
+ ],
45
+ ]);
46
+ surface.catalog.invoker = (name, args) => {
47
+ const fn = surface.catalog.functions.get(name);
48
+ return fn.execute(args);
49
+ };
50
+ const schema = z.object({
51
+ value: CommonSchemas.DynamicString,
52
+ checks: CommonSchemas.Checkable.shape.checks,
53
+ });
54
+ return { surface, schema };
55
+ }
56
+ it('should resolve checkable validation state reactively', async () => {
57
+ const { surface, schema } = setupSurfaceAndMocks();
58
+ surface.dataModel.set('/val', '');
59
+ const compModel = new ComponentModel('c1', 'Test', {
60
+ value: { path: '/val' },
61
+ checks: [
62
+ {
63
+ condition: {
64
+ call: 'required',
65
+ args: { value: { path: '/val' } },
66
+ },
67
+ message: 'Value is required',
68
+ },
69
+ ],
70
+ });
71
+ surface.componentsModel.addComponent(compModel);
72
+ const context = new ComponentContext(surface, 'c1');
73
+ const binder = new GenericBinder(context, schema);
74
+ binder.subscribe(() => { });
75
+ // Initial state: should be invalid
76
+ assert.strictEqual(binder.snapshot.isValid, false);
77
+ assert.deepStrictEqual(binder.snapshot.validationErrors, [
78
+ 'Value is required',
79
+ ]);
80
+ // Update data: should become valid
81
+ surface.dataModel.set('/val', 'hello');
82
+ await new Promise(resolve => setTimeout(resolve, 0));
83
+ assert.strictEqual(binder.snapshot.isValid, true);
84
+ assert.deepStrictEqual(binder.snapshot.validationErrors, []);
85
+ });
86
+ it('should aggregate multiple validation rules correctly', async () => {
87
+ const { surface, schema } = setupSurfaceAndMocks();
88
+ surface.dataModel.set('/val', '');
89
+ const compModel = new ComponentModel('c2', 'Test', {
90
+ value: { path: '/val' },
91
+ checks: [
92
+ {
93
+ condition: {
94
+ call: 'required',
95
+ args: { value: { path: '/val' } },
96
+ },
97
+ message: 'Cannot be empty',
98
+ },
99
+ {
100
+ condition: {
101
+ call: 'min_length',
102
+ args: { value: { path: '/val' }, min: 3 },
103
+ },
104
+ message: 'Must be at least 3 characters',
105
+ },
106
+ ],
107
+ });
108
+ surface.componentsModel.addComponent(compModel);
109
+ const context = new ComponentContext(surface, 'c2');
110
+ const binder = new GenericBinder(context, schema);
111
+ binder.subscribe(() => { });
112
+ // Both rules fail initially
113
+ assert.strictEqual(binder.snapshot.isValid, false);
114
+ assert.deepStrictEqual(binder.snapshot.validationErrors, [
115
+ 'Cannot be empty',
116
+ 'Must be at least 3 characters',
117
+ ]);
118
+ // Update data to satisfy first rule but fail second
119
+ surface.dataModel.set('/val', 'hi');
120
+ await new Promise(resolve => setTimeout(resolve, 0));
121
+ assert.strictEqual(binder.snapshot.isValid, false);
122
+ assert.deepStrictEqual(binder.snapshot.validationErrors, [
123
+ 'Must be at least 3 characters',
124
+ ]);
125
+ // Update data to satisfy all rules
126
+ surface.dataModel.set('/val', 'hello');
127
+ await new Promise(resolve => setTimeout(resolve, 0));
128
+ assert.strictEqual(binder.snapshot.isValid, true);
129
+ assert.deepStrictEqual(binder.snapshot.validationErrors, []);
130
+ });
131
+ it('should provide a default message if rule.message is missing', async () => {
132
+ const { surface, schema } = setupSurfaceAndMocks();
133
+ surface.dataModel.set('/val', '');
134
+ const compModel = new ComponentModel('c3', 'Test', {
135
+ value: { path: '/val' },
136
+ checks: [
137
+ {
138
+ condition: {
139
+ call: 'required',
140
+ args: { value: { path: '/val' } },
141
+ },
142
+ },
143
+ ],
144
+ });
145
+ surface.componentsModel.addComponent(compModel);
146
+ const context = new ComponentContext(surface, 'c3');
147
+ const binder = new GenericBinder(context, schema);
148
+ assert.strictEqual(binder.snapshot.isValid, false);
149
+ assert.deepStrictEqual(binder.snapshot.validationErrors, [
150
+ 'Validation failed',
151
+ ]);
152
+ });
153
+ it('should default to valid if checks array is empty or undefined', async () => {
154
+ const { surface, schema } = setupSurfaceAndMocks();
155
+ const compModel = new ComponentModel('c4', 'Test', {
156
+ value: 'static',
157
+ checks: [], // Empty checks
158
+ });
159
+ surface.componentsModel.addComponent(compModel);
160
+ const context = new ComponentContext(surface, 'c4');
161
+ const binder = new GenericBinder(context, schema);
162
+ assert.strictEqual(binder.snapshot.isValid, true);
163
+ assert.deepStrictEqual(binder.snapshot.validationErrors, []);
164
+ });
165
+ });
166
+ //# sourceMappingURL=generic-binder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-binder.test.js","sourceRoot":"","sources":["../../../../src/v0_9/rendering/generic-binder.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Represents a JSON Schema definition.
3
+ * Typed as Record<string, any> to allow standard JSON schema properties
4
+ * without importing heavy schema types.
5
+ */
6
+ export type JsonSchema = Record<string, any>;
7
+ /**
8
+ * Describes a function's interface within an inline catalog.
9
+ */
10
+ export interface FunctionDefinition {
11
+ name: string;
12
+ description?: string;
13
+ parameters: JsonSchema;
14
+ returnType: 'string' | 'number' | 'boolean' | 'array' | 'object' | 'any' | 'void';
15
+ }
16
+ /**
17
+ * Defines a catalog inline for the a2uiClientCapabilities object.
18
+ */
19
+ export interface InlineCatalog {
20
+ catalogId: string;
21
+ components?: Record<string, JsonSchema>;
22
+ functions?: FunctionDefinition[];
23
+ theme?: Record<string, JsonSchema>;
24
+ }
25
+ /**
26
+ * The capabilities structure sent from the client to the server as part of transport metadata.
27
+ */
28
+ export interface A2uiClientCapabilities {
29
+ 'v0.9': {
30
+ supportedCatalogIds: string[];
31
+ inlineCatalogs?: InlineCatalog[];
32
+ };
33
+ }
34
+ //# sourceMappingURL=client-capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-capabilities.d.ts","sourceRoot":"","sources":["../../../../src/v0_9/schema/client-capabilities.ts"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EACN,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,OAAO,GACP,QAAQ,GACR,KAAK,GACL,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE;QACN,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAC9B,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;KAClC,CAAC;CACH"}
@@ -0,0 +1,17 @@
1
+ /*
2
+ * Copyright 2026 Google LLC
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * https://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=client-capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-capabilities.js","sourceRoot":"","sources":["../../../../src/v0_9/schema/client-capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}