@a2ui/web_core 0.8.0 → 0.9.1-alpha.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 (435) 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 +136 -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 +316 -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 +89 -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 +51 -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_8/events/base.ts → v0_9/reactivity/signals.test.d.ts} +14 -10
  146. package/src/v0_9/reactivity/signals.test.d.ts.map +1 -0
  147. package/src/v0_9/reactivity/signals.test.js +108 -0
  148. package/src/v0_9/reactivity/signals.test.js.map +1 -0
  149. package/src/v0_9/rendering/component-context.d.ts +37 -0
  150. package/src/v0_9/rendering/component-context.d.ts.map +1 -0
  151. package/src/v0_9/rendering/component-context.js +50 -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 +68 -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 +311 -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 +19 -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 +19 -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/validation-event.ts +0 -66
  335. package/src/v0_8/index.ts +0 -12
  336. package/src/v0_8/styles/behavior.ts +0 -55
  337. package/src/v0_8/styles/border.ts +0 -42
  338. package/src/v0_8/styles/colors.ts +0 -100
  339. package/src/v0_8/styles/icons.ts +0 -60
  340. package/src/v0_8/styles/index.ts +0 -37
  341. package/src/v0_8/styles/layout.ts +0 -235
  342. package/src/v0_8/styles/opacity.ts +0 -24
  343. package/src/v0_8/styles/shared.ts +0 -17
  344. package/src/v0_8/styles/type.ts +0 -156
  345. package/src/v0_8/styles/utils.ts +0 -104
  346. package/src/v0_8/types/client-event.ts +0 -80
  347. package/src/v0_8/types/colors.ts +0 -66
  348. package/src/v0_8/types/components.ts +0 -213
  349. package/src/v0_8/types/primitives.ts +0 -60
  350. package/src/v0_8/types/types.ts +0 -557
  351. package/src/v0_9/catalog/types.ts +0 -38
  352. package/src/v0_9/common/events.ts +0 -44
  353. package/src/v0_9/index.ts +0 -12
  354. package/src/v0_9/processing/message-processor.test.ts +0 -133
  355. package/src/v0_9/processing/message-processor.ts +0 -150
  356. package/src/v0_9/rendering/component-context.ts +0 -36
  357. package/src/v0_9/rendering/data-context.test.ts +0 -85
  358. package/src/v0_9/rendering/data-context.ts +0 -110
  359. package/src/v0_9/schema/common-types.ts +0 -125
  360. package/src/v0_9/schema/index.ts +0 -2
  361. package/src/v0_9/schema/server-to-client.ts +0 -23
  362. package/src/v0_9/state/component-model.test.ts +0 -50
  363. package/src/v0_9/state/component-model.ts +0 -32
  364. package/src/v0_9/state/data-model.test.ts +0 -257
  365. package/src/v0_9/state/data-model.ts +0 -239
  366. package/src/v0_9/state/surface-components-model.test.ts +0 -59
  367. package/src/v0_9/state/surface-components-model.ts +0 -48
  368. package/src/v0_9/state/surface-group-model.test.ts +0 -82
  369. package/src/v0_9/state/surface-group-model.ts +0 -66
  370. package/src/v0_9/state/surface-model.test.ts +0 -44
  371. package/src/v0_9/state/surface-model.ts +0 -39
  372. package/src/v0_9/test/test-utils.ts +0 -22
  373. /package/{dist/src → src}/v0_8/data/guards.d.ts +0 -0
  374. /package/{dist/src → src}/v0_8/data/guards.d.ts.map +0 -0
  375. /package/{dist/src → src}/v0_8/data/guards.js.map +0 -0
  376. /package/{dist/src → src}/v0_8/events/base.d.ts +0 -0
  377. /package/{dist/src → src}/v0_8/events/base.d.ts.map +0 -0
  378. /package/{dist/src → src}/v0_8/events/base.js +0 -0
  379. /package/{dist/src → src}/v0_8/events/base.js.map +0 -0
  380. /package/{dist/src → src}/v0_8/events/index.d.ts +0 -0
  381. /package/{dist/src → src}/v0_8/events/index.d.ts.map +0 -0
  382. /package/{dist/src → src}/v0_8/events/index.js +0 -0
  383. /package/{dist/src → src}/v0_8/events/index.js.map +0 -0
  384. /package/{dist/src → src}/v0_8/events/validation-event.d.ts +0 -0
  385. /package/{dist/src → src}/v0_8/events/validation-event.js +0 -0
  386. /package/{dist/src → src}/v0_8/schemas/a2ui_client_capabilities_schema.json +0 -0
  387. /package/{dist/src → src}/v0_8/schemas/catalog_description_schema.json +0 -0
  388. /package/{dist/src → src}/v0_8/schemas/client_to_server.json +0 -0
  389. /package/{dist/src → src}/v0_8/styles/behavior.d.ts +0 -0
  390. /package/{dist/src → src}/v0_8/styles/behavior.d.ts.map +0 -0
  391. /package/{dist/src → src}/v0_8/styles/behavior.js.map +0 -0
  392. /package/{dist/src → src}/v0_8/styles/border.d.ts +0 -0
  393. /package/{dist/src → src}/v0_8/styles/border.d.ts.map +0 -0
  394. /package/{dist/src → src}/v0_8/styles/border.js.map +0 -0
  395. /package/{dist/src → src}/v0_8/styles/colors.d.ts +0 -0
  396. /package/{dist/src → src}/v0_8/styles/colors.d.ts.map +0 -0
  397. /package/{dist/src → src}/v0_8/styles/index.d.ts +0 -0
  398. /package/{dist/src → src}/v0_8/styles/index.d.ts.map +0 -0
  399. /package/{dist/src → src}/v0_8/styles/index.js.map +0 -0
  400. /package/{dist/src → src}/v0_8/styles/layout.d.ts +0 -0
  401. /package/{dist/src → src}/v0_8/styles/layout.d.ts.map +0 -0
  402. /package/{dist/src → src}/v0_8/styles/opacity.d.ts +0 -0
  403. /package/{dist/src → src}/v0_8/styles/opacity.d.ts.map +0 -0
  404. /package/{dist/src → src}/v0_8/styles/opacity.js.map +0 -0
  405. /package/{dist/src → src}/v0_8/styles/shared.d.ts +0 -0
  406. /package/{dist/src → src}/v0_8/styles/shared.d.ts.map +0 -0
  407. /package/{dist/src → src}/v0_8/styles/shared.js.map +0 -0
  408. /package/{dist/src → src}/v0_8/styles/type.d.ts +0 -0
  409. /package/{dist/src → src}/v0_8/styles/type.d.ts.map +0 -0
  410. /package/{dist/src → src}/v0_8/styles/type.js.map +0 -0
  411. /package/{dist/src → src}/v0_8/styles/utils.d.ts +0 -0
  412. /package/{dist/src → src}/v0_8/styles/utils.d.ts.map +0 -0
  413. /package/{dist/src → src}/v0_8/styles/utils.js.map +0 -0
  414. /package/{dist/src → src}/v0_8/types/client-event.js.map +0 -0
  415. /package/{dist/src → src}/v0_8/types/colors.d.ts +0 -0
  416. /package/{dist/src → src}/v0_8/types/colors.d.ts.map +0 -0
  417. /package/{dist/src → src}/v0_8/types/colors.js.map +0 -0
  418. /package/{dist/src → src}/v0_8/types/components.js.map +0 -0
  419. /package/{dist/src → src}/v0_8/types/primitives.js.map +0 -0
  420. /package/{dist/src → src}/v0_8/types/types.js.map +0 -0
  421. /package/{dist/src → src}/v0_9/processing/message-processor.test.d.ts +0 -0
  422. /package/{dist/src → src}/v0_9/processing/message-processor.test.d.ts.map +0 -0
  423. /package/{dist/src → src}/v0_9/rendering/data-context.test.d.ts +0 -0
  424. /package/{dist/src → src}/v0_9/rendering/data-context.test.d.ts.map +0 -0
  425. /package/{dist/src → src}/v0_9/state/component-model.test.d.ts +0 -0
  426. /package/{dist/src → src}/v0_9/state/component-model.test.d.ts.map +0 -0
  427. /package/{dist/src → src}/v0_9/state/data-model.test.d.ts +0 -0
  428. /package/{dist/src → src}/v0_9/state/data-model.test.d.ts.map +0 -0
  429. /package/{dist/src → src}/v0_9/state/surface-components-model.test.d.ts +0 -0
  430. /package/{dist/src → src}/v0_9/state/surface-components-model.test.d.ts.map +0 -0
  431. /package/{dist/src → src}/v0_9/state/surface-group-model.test.d.ts +0 -0
  432. /package/{dist/src → src}/v0_9/state/surface-group-model.test.d.ts.map +0 -0
  433. /package/{dist/src → src}/v0_9/state/surface-model.test.d.ts +0 -0
  434. /package/{dist/src → src}/v0_9/state/surface-model.test.d.ts.map +0 -0
  435. /package/{dist/src → src}/v0_9/test/test-utils.d.ts +0 -0
@@ -1,133 +0,0 @@
1
- import assert from 'node:assert';
2
- import { test, describe, it, beforeEach } from 'node:test';
3
- import { MessageProcessor } from './message-processor.js';
4
- import { Catalog, ComponentApi } from '../catalog/types.js';
5
-
6
- describe('MessageProcessor', () => {
7
- let processor: MessageProcessor<ComponentApi>;
8
- let testCatalog: Catalog<ComponentApi>;
9
- let actions: any[] = [];
10
-
11
- beforeEach(() => {
12
- actions = [];
13
- testCatalog = new Catalog('test-catalog', []);
14
- processor = new MessageProcessor<ComponentApi>([testCatalog], async (a) => { actions.push(a); });
15
- });
16
-
17
- it('creates surface', () => {
18
- processor.processMessages([{
19
- createSurface: {
20
- surfaceId: 's1',
21
- catalogId: 'test-catalog',
22
- theme: {}
23
- }
24
- }]);
25
- const surface = processor.model.getSurface('s1');
26
- assert.ok(surface);
27
- assert.strictEqual(surface.id, 's1');
28
- });
29
-
30
- it('updates components on correct surface', () => {
31
- processor.processMessages([{
32
- createSurface: { surfaceId: 's1', catalogId: 'test-catalog' }
33
- }]);
34
-
35
- processor.processMessages([{
36
- updateComponents: {
37
- surfaceId: 's1',
38
- components: [{ id: 'root', component: 'Box' }]
39
- }
40
- }]);
41
-
42
- const surface = processor.model.getSurface('s1');
43
- assert.ok(surface?.componentsModel.get('root'));
44
- });
45
-
46
- it('updates existing components via message', () => {
47
- processor.processMessages([{
48
- createSurface: { surfaceId: 's1', catalogId: 'test-catalog' }
49
- }]);
50
-
51
- // Create
52
- processor.processMessages([{
53
- updateComponents: {
54
- surfaceId: 's1',
55
- components: [{ id: 'btn', component: 'Button', label: 'Initial' }]
56
- }
57
- }]);
58
-
59
- const surface = processor.model.getSurface('s1');
60
- const btn = surface?.componentsModel.get('btn');
61
- assert.strictEqual(btn?.properties.label, 'Initial');
62
-
63
- // Update
64
- processor.processMessages([{
65
- updateComponents: {
66
- surfaceId: 's1',
67
- components: [{ id: 'btn', component: 'Button', label: 'Updated' }]
68
- }
69
- }]);
70
-
71
- assert.strictEqual(btn?.properties.label, 'Updated');
72
- });
73
-
74
- it('deletes surface', () => {
75
- processor.processMessages([{
76
- createSurface: { surfaceId: 's1', catalogId: 'test-catalog' }
77
- }]);
78
- assert.ok(processor.model.getSurface('s1'));
79
-
80
- processor.processMessages([{
81
- deleteSurface: { surfaceId: 's1' }
82
- }]);
83
- assert.strictEqual(processor.model.getSurface('s1'), undefined);
84
- });
85
-
86
- it('routes data model updates', () => {
87
- processor.processMessages([{
88
- createSurface: { surfaceId: 's1', catalogId: 'test-catalog' }
89
- }]);
90
-
91
- processor.processMessages([{
92
- updateDataModel: {
93
- surfaceId: 's1',
94
- path: '/foo',
95
- value: 'bar'
96
- }
97
- }]);
98
-
99
- const surface = processor.model.getSurface('s1');
100
- assert.strictEqual(surface?.dataModel.get('/foo'), 'bar');
101
- });
102
-
103
- it('notifies lifecycle listeners', () => {
104
- let created: any = null;
105
- let deletedId: string | null = null;
106
-
107
- const sub = processor.onSurfaceCreated((s) => { created = s; });
108
- const sub2 = processor.onSurfaceDeleted((id) => { deletedId = id; });
109
-
110
- // Create
111
- processor.processMessages([{
112
- createSurface: { surfaceId: 's1', catalogId: 'test-catalog' }
113
- }]);
114
- assert.ok(created);
115
- assert.strictEqual(created.id, 's1');
116
-
117
- // Delete
118
- processor.processMessages([{
119
- deleteSurface: { surfaceId: 's1' }
120
- }]);
121
- assert.strictEqual(deletedId, 's1');
122
-
123
- // Test Unsubscribe
124
- created = null;
125
- sub.unsubscribe();
126
- processor.processMessages([{
127
- createSurface: { surfaceId: 's2', catalogId: 'test-catalog' }
128
- }]);
129
- assert.strictEqual(created, null);
130
-
131
- sub2.unsubscribe();
132
- });
133
- });
@@ -1,150 +0,0 @@
1
- import { SurfaceModel, ActionListener } from '../state/surface-model.js';
2
- import { Catalog, ComponentApi } from '../catalog/types.js';
3
- import { SurfaceGroupModel } from '../state/surface-group-model.js';
4
- import { ComponentModel } from '../state/component-model.js';
5
- import { Subscription } from '../common/events.js';
6
-
7
- import { A2uiMessage } from '../schema/server-to-client.js';
8
-
9
- /**
10
- * The central processor for A2UI messages.
11
- * @template T The concrete type of the ComponentApi.
12
- */
13
- export class MessageProcessor<T extends ComponentApi> {
14
- readonly model: SurfaceGroupModel<T>;
15
-
16
- /**
17
- * @param catalogs A list of available catalogs.
18
- * @param actionHandler A global handler for actions from all surfaces.
19
- */
20
- constructor(
21
- private catalogs: Catalog<T>[],
22
- private actionHandler: ActionListener
23
- ) {
24
- this.model = new SurfaceGroupModel<T>();
25
- this.model.onAction.subscribe(this.actionHandler);
26
- }
27
-
28
- /**
29
- * Subscribes to surface creation events.
30
- */
31
- onSurfaceCreated(handler: (surface: SurfaceModel<T>) => void): Subscription {
32
- return this.model.onSurfaceCreated.subscribe(handler);
33
- }
34
-
35
- /**
36
- * Subscribes to surface deletion events.
37
- */
38
- onSurfaceDeleted(handler: (id: string) => void): Subscription {
39
- return this.model.onSurfaceDeleted.subscribe(handler);
40
- }
41
-
42
- processMessages(messages: A2uiMessage[]): void {
43
- for (const message of messages) {
44
- this.processMessage(message);
45
- }
46
- }
47
-
48
- private processMessage(message: A2uiMessage): void {
49
- if (message.createSurface) {
50
- this.processCreateSurfaceMessage(message);
51
- return;
52
- }
53
-
54
- const updateTypes = ['updateComponents', 'updateDataModel', 'deleteSurface'].filter(k => (message as any)[k]);
55
- if (updateTypes.length > 1) {
56
- console.warn(`Message contains multiple update types: ${updateTypes.join(', ')}. Ignoring.`);
57
- return;
58
- }
59
-
60
- if (message.deleteSurface) {
61
- this.processDeleteSurfaceMessage(message);
62
- return;
63
- }
64
-
65
- if (message.updateComponents) {
66
- this.processUpdateComponentsMessage(message);
67
- return;
68
- }
69
-
70
- if (message.updateDataModel) {
71
- this.processUpdateDataModelMessage(message);
72
- return;
73
- }
74
- }
75
-
76
- private processCreateSurfaceMessage(message: A2uiMessage): void {
77
- const payload = message.createSurface!;
78
- const { surfaceId, catalogId, theme } = payload;
79
-
80
- // Find catalog
81
- const catalog = this.catalogs.find(c => c.id === catalogId);
82
- if (!catalog) {
83
- console.warn(`Catalog not found: ${catalogId}`);
84
- return;
85
- }
86
-
87
- if (this.model.getSurface(surfaceId)) {
88
- console.warn(`Surface ${surfaceId} already exists. Ignoring.`);
89
- return;
90
- }
91
-
92
- const surface = new SurfaceModel<T>(surfaceId, catalog, theme);
93
- this.model.addSurface(surface);
94
- }
95
-
96
- private processDeleteSurfaceMessage(message: A2uiMessage): void {
97
- const payload = message.deleteSurface!;
98
- if (!payload.surfaceId) return;
99
- this.model.deleteSurface(payload.surfaceId);
100
- }
101
-
102
- private processUpdateComponentsMessage(message: A2uiMessage): void {
103
- const payload = message.updateComponents!;
104
- if (!payload.surfaceId) return;
105
-
106
- const surface = this.model.getSurface(payload.surfaceId);
107
- if (!surface) {
108
- console.warn(`Surface not found for message: ${payload.surfaceId}`);
109
- return;
110
- }
111
-
112
- for (const comp of payload.components) {
113
- const { id, component, ...properties } = comp;
114
-
115
- const existing = surface.componentsModel.get(id);
116
- if (existing) {
117
- if (component && component !== existing.type) {
118
- // Recreate component if type changes
119
- surface.componentsModel.removeComponent(id);
120
- const newComponent = new ComponentModel(id, component, properties);
121
- surface.componentsModel.addComponent(newComponent);
122
- } else {
123
- existing.properties = properties;
124
- }
125
- } else {
126
- if (!component) {
127
- console.warn(`Cannot create component ${id} without a type.`);
128
- continue;
129
- }
130
- const newComponent = new ComponentModel(id, component, properties);
131
- surface.componentsModel.addComponent(newComponent);
132
- }
133
- }
134
- }
135
-
136
- private processUpdateDataModelMessage(message: A2uiMessage): void {
137
- const payload = message.updateDataModel!;
138
- if (!payload.surfaceId) return;
139
-
140
- const surface = this.model.getSurface(payload.surfaceId);
141
- if (!surface) {
142
- console.warn(`Surface not found for message: ${payload.surfaceId}`);
143
- return;
144
- }
145
-
146
- const path = payload.path || '/';
147
- const value = payload.value;
148
- surface.dataModel.set(path, value);
149
- }
150
- }
@@ -1,36 +0,0 @@
1
- import { DataContext } from './data-context.js';
2
- import { ComponentModel } from '../state/component-model.js';
3
- import type { SurfaceModel } from '../state/surface-model.js';
4
- import type { ComponentApi } from '../catalog/types.js';
5
- import type { SurfaceComponentsModel } from '../state/surface-components-model.js';
6
-
7
- /**
8
- * Context provided to components during rendering.
9
- * It provides access to the component's model, the data context, and a way to dispatch actions.
10
- */
11
- export class ComponentContext {
12
- readonly componentModel: ComponentModel;
13
- readonly dataContext: DataContext;
14
- readonly surfaceComponents: SurfaceComponentsModel;
15
-
16
- constructor(
17
- surface: SurfaceModel<any>,
18
- componentId: string,
19
- dataModelBasePath: string = '/'
20
- ) {
21
- const model = surface.componentsModel.get(componentId);
22
- if (!model) {
23
- throw new Error(`Component not found: ${componentId}`);
24
- }
25
- this.componentModel = model;
26
- this.surfaceComponents = surface.componentsModel;
27
- this.dataContext = new DataContext(surface.dataModel, dataModelBasePath);
28
- this._actionDispatcher = (action) => surface.dispatchAction(action);
29
- }
30
-
31
- private _actionDispatcher: (action: any) => Promise<void>;
32
-
33
- dispatchAction(action: any): Promise<void> {
34
- return this._actionDispatcher(action);
35
- }
36
- }
@@ -1,85 +0,0 @@
1
- import assert from 'node:assert';
2
- import { test, describe, it, beforeEach } from 'node:test';
3
- import { DataModel } from '../state/data-model.js';
4
- import { DataContext } from './data-context.js';
5
-
6
- describe('DataContext', () => {
7
- let model: DataModel;
8
- let context: DataContext;
9
-
10
- beforeEach(() => {
11
- model = new DataModel({
12
- user: {
13
- name: 'Alice',
14
- address: {
15
- city: 'Wonderland'
16
- }
17
- },
18
- list: ['a', 'b']
19
- });
20
- context = new DataContext(model, '/user');
21
- });
22
-
23
- it('resolves relative paths', () => {
24
- assert.strictEqual(context.resolveDynamicValue({ path: 'name' }), 'Alice');
25
- });
26
-
27
- it('resolves absolute paths', () => {
28
- assert.strictEqual(context.resolveDynamicValue({ path: '/list/0' }), 'a');
29
- });
30
-
31
- it('resolves nested paths', () => {
32
- assert.strictEqual(context.resolveDynamicValue({ path: 'address/city' }), 'Wonderland');
33
- });
34
-
35
- it('updates data via relative path', () => {
36
- context.set('name', 'Bob');
37
- assert.strictEqual(model.get('/user/name'), 'Bob');
38
- });
39
-
40
- it('creates nested context', () => {
41
- const addressContext = context.nested('address');
42
- assert.strictEqual(addressContext.path, '/user/address');
43
- assert.strictEqual(addressContext.resolveDynamicValue({ path: 'city' }), 'Wonderland');
44
- });
45
-
46
- it('handles root context', () => {
47
- const rootContext = new DataContext(model, '/');
48
- assert.strictEqual(rootContext.resolveDynamicValue({ path: 'user/name' }), 'Alice');
49
- });
50
-
51
- it('subscribes relative path', () => {
52
- let called = false;
53
- const sub = context.subscribeDynamicValue({ path: 'name' }, (val) => {
54
- assert.strictEqual(val, 'Charlie');
55
- called = true;
56
- });
57
- context.set('name', 'Charlie');
58
- assert.strictEqual(called, true, 'Callback was never called');
59
- });
60
-
61
- it('resolves using resolveDynamicValue() method with literals', () => {
62
- // Literal
63
- assert.strictEqual(context.resolveDynamicValue('literal'), 'literal');
64
-
65
- // Path
66
- assert.strictEqual(context.resolveDynamicValue({ path: 'name' }), 'Alice');
67
-
68
- // Absolute Path
69
- assert.strictEqual(context.resolveDynamicValue({ path: '/list/0' }), 'a');
70
- });
71
-
72
- it('resolves literal arrays', () => {
73
- assert.deepStrictEqual(context.resolveDynamicValue(['literal', 'array']), ['literal', 'array']);
74
- });
75
-
76
- it('subscribes literal arrays as static', () => {
77
- let called = false;
78
- const sub = context.subscribeDynamicValue(['literal', 'array'], () => { called = true; });
79
- assert.deepStrictEqual(sub.value, ['literal', 'array']);
80
-
81
- // Simulate some generic path update that shouldn't trigger anything for this static sub
82
- context.set('name', 'Charlie');
83
- assert.strictEqual(called, false);
84
- });
85
- });
@@ -1,110 +0,0 @@
1
- import { DataModel, DataSubscription } from '../state/data-model.js';
2
- import type { DynamicValue, DataBinding, FunctionCall } from '../schema/common-types.js';
3
-
4
- /**
5
- * A contextual view of the main DataModel, serving as the unified interface for resolving
6
- * DynamicValues (literals, data paths, function calls) within a specific scope.
7
- */
8
- export class DataContext {
9
- /**
10
- * @param dataModel The shared DataModel instance.
11
- * @param path The absolute path this context is currently pointing to.
12
- */
13
- constructor(
14
- readonly dataModel: DataModel,
15
- readonly path: string
16
- ) { }
17
-
18
- /**
19
- * Updates the data model at the specified path, resolving it against the current context.
20
- * This is the only method for mutating the data model.
21
- */
22
- set(path: string, value: any): void {
23
- const absolutePath = this.resolvePath(path);
24
- this.dataModel.set(absolutePath, value);
25
- }
26
-
27
- /**
28
- * Resolves a DynamicValue to its current evaluation.
29
- * Does not set up any subscriptions.
30
- */
31
- resolveDynamicValue<V>(value: DynamicValue): V {
32
- // 1. Literal Check
33
- if (typeof value !== 'object' || value === null || Array.isArray(value)) {
34
- // TODO: Define error handling when V doesn't match
35
- return value as V;
36
- }
37
-
38
- // 2. Path Check: { path: "..." }
39
- if ('path' in value) {
40
- const absolutePath = this.resolvePath((value as DataBinding).path);
41
- return this.dataModel.get(absolutePath);
42
- }
43
-
44
- // 3. Function Call: { call: "...", args: ... }
45
- if ('call' in value) {
46
- // TODO: Implement function calls (expected for now)
47
- // For now, return as is or undefined
48
- }
49
-
50
- // TODO: Define error handling when V doesn't match
51
- return value as V;
52
- }
53
-
54
- /**
55
- * Subscribes to changes in a DynamicValue.
56
- * Returns a Subscription object that provides the current value and allows listening for updates.
57
- */
58
- subscribeDynamicValue<V>(value: DynamicValue, onChange: (value: V | undefined) => void): DataSubscription<V> {
59
- // 1. Literal: Return a static subscription
60
- if (typeof value !== 'object' || value === null || Array.isArray(value)) {
61
- return {
62
- // TODO: Define error handling when V doesn't match
63
- value: value as V,
64
- unsubscribe: () => { }
65
- };
66
- }
67
-
68
- // 2. Path Check: { path: "..." }
69
- if ('path' in value) {
70
- const absolutePath = this.resolvePath((value as DataBinding).path);
71
- return this.dataModel.subscribe(absolutePath, onChange);
72
- }
73
-
74
- // 3. Function Call (TODO)
75
- return {
76
- // TODO: Define error handling when V doesn't match
77
- value: value as V,
78
- unsubscribe: () => { }
79
- };
80
- }
81
-
82
- /**
83
- * Creates a new, nested DataContext for a child component.
84
- * Used by list/template components for their children.
85
- */
86
- nested(relativePath: string): DataContext {
87
- const newPath = this.resolvePath(relativePath);
88
- return new DataContext(this.dataModel, newPath);
89
- }
90
-
91
- private resolvePath(path: string): string {
92
- // Absolute path - no resolution required.
93
- if (path.startsWith('/')) {
94
- return path;
95
- }
96
- // Handle specific cases like '.' or empty
97
- if (path === '' || path === '.') {
98
- return this.path;
99
- }
100
-
101
- // Normalize current path (remove trailing slash if exists, unless root)
102
- let base = this.path;
103
- if (base.endsWith('/') && base.length > 1) {
104
- base = base.slice(0, -1);
105
- }
106
- if (base === '/') base = '';
107
-
108
- return `${base}/${path}`;
109
- }
110
- }
@@ -1,125 +0,0 @@
1
- import { z } from 'zod';
2
-
3
- export const DataBindingSchema = z.object({
4
- path: z.string().describe('A JSON Pointer path to a value in the data model.')
5
- });
6
-
7
- export const FunctionCallSchema = z.object({
8
- call: z.string().describe('The name of the function to call.'),
9
- args: z.record(z.any()).describe('Arguments passed to the function.'),
10
- returnType: z.enum(['string', 'number', 'boolean', 'array', 'object', 'any', 'void']).default('boolean')
11
- });
12
-
13
- export const LogicExpressionSchema: z.ZodType<any> = z.lazy(() => z.union([
14
- z.object({ and: z.array(LogicExpressionSchema).min(1) }),
15
- z.object({ or: z.array(LogicExpressionSchema).min(1) }),
16
- z.object({ not: LogicExpressionSchema }),
17
- z.intersection(FunctionCallSchema, z.object({ returnType: z.literal('boolean').optional() })), // FunctionCall returning boolean
18
- z.object({ true: z.literal(true) }),
19
- z.object({ false: z.literal(false) })
20
- ]));
21
-
22
- export const DynamicStringSchema = z.union([
23
- z.string(),
24
- DataBindingSchema,
25
- // FunctionCall returning string (simplified schema for Zod, stricter in JSON Schema)
26
- FunctionCallSchema
27
- ]);
28
-
29
- export const DynamicNumberSchema = z.union([
30
- z.number(),
31
- DataBindingSchema,
32
- FunctionCallSchema
33
- ]);
34
-
35
- export const DynamicBooleanSchema = z.union([
36
- z.boolean(),
37
- DataBindingSchema,
38
- LogicExpressionSchema
39
- ]);
40
-
41
- export const DynamicStringListSchema = z.union([
42
- z.array(z.string()),
43
- DataBindingSchema,
44
- FunctionCallSchema
45
- ]);
46
-
47
- export const DynamicValueSchema = z.union([
48
- z.string(),
49
- z.number(),
50
- z.boolean(),
51
- z.array(z.any()),
52
- DataBindingSchema,
53
- FunctionCallSchema
54
- ]);
55
-
56
- export type DataBinding = z.infer<typeof DataBindingSchema>;
57
- export type FunctionCall = z.infer<typeof FunctionCallSchema>;
58
- export type LogicExpression = z.infer<typeof LogicExpressionSchema>;
59
- export type DynamicString = z.infer<typeof DynamicStringSchema>;
60
- export type DynamicNumber = z.infer<typeof DynamicNumberSchema>;
61
- export type DynamicBoolean = z.infer<typeof DynamicBooleanSchema>;
62
- export type DynamicStringList = z.infer<typeof DynamicStringListSchema>;
63
- export type DynamicValue = z.infer<typeof DynamicValueSchema>;
64
-
65
- export const ComponentIdSchema = z.string().describe('The unique identifier for a component.');
66
- export type ComponentId = z.infer<typeof ComponentIdSchema>;
67
-
68
- export const ChildListSchema = z.union([
69
- z.array(ComponentIdSchema).describe('A static list of child component IDs.'),
70
- z.object({
71
- componentId: ComponentIdSchema,
72
- path: z.string().describe('The path to the list of component property objects in the data model.')
73
- }).describe('A template for generating a dynamic list of children.')
74
- ]);
75
- export type ChildList = z.infer<typeof ChildListSchema>;
76
-
77
- export const ActionSchema = z.union([
78
- z.object({
79
- event: z.object({
80
- name: z.string(),
81
- context: z.record(DynamicValueSchema).optional()
82
- })
83
- }).describe('Triggers a server-side event.'),
84
- z.object({
85
- functionCall: FunctionCallSchema
86
- }).describe('Executes a local client-side function.')
87
- ]);
88
- export type Action = z.infer<typeof ActionSchema>;
89
-
90
- export const CheckRuleSchema = z.intersection(
91
- LogicExpressionSchema,
92
- z.object({
93
- message: z.string().describe('The error message to display if the check fails.')
94
- })
95
- );
96
- export type CheckRule = z.infer<typeof CheckRuleSchema>;
97
-
98
- export const CheckableSchema = z.object({
99
- checks: z.array(CheckRuleSchema).optional().describe('A list of checks to perform.')
100
- });
101
- export type Checkable = z.infer<typeof CheckableSchema>;
102
-
103
- export const AccessibilityAttributesSchema = z.object({
104
- label: DynamicStringSchema.optional().describe('REF:common_types.json#/$defs/DynamicString|A short string used by assistive technologies to convey the purpose of an element.'),
105
- description: DynamicStringSchema.optional().describe('REF:common_types.json#/$defs/DynamicString|Additional information provided by assistive technologies about an element.')
106
- }).describe('REF:common_types.json#/$defs/AccessibilityAttributes|Attributes to enhance accessibility.');
107
-
108
- export type AccessibilityAttributes = z.infer<typeof AccessibilityAttributesSchema>;
109
-
110
- export const CommonSchemas = {
111
- ComponentId: ComponentIdSchema,
112
- ChildList: ChildListSchema,
113
- DataBinding: DataBindingSchema,
114
- DynamicValue: DynamicValueSchema,
115
- DynamicString: DynamicStringSchema,
116
- DynamicNumber: DynamicNumberSchema,
117
- DynamicBoolean: DynamicBooleanSchema,
118
- DynamicStringList: DynamicStringListSchema,
119
- FunctionCall: FunctionCallSchema,
120
- LogicExpression: LogicExpressionSchema,
121
- CheckRule: CheckRuleSchema,
122
- Checkable: CheckableSchema,
123
- Action: ActionSchema,
124
- AccessibilityAttributes: AccessibilityAttributesSchema,
125
- };
@@ -1,2 +0,0 @@
1
- export * from './common-types.js';
2
- export * from './server-to-client.js';
@@ -1,23 +0,0 @@
1
- import { z } from 'zod';
2
-
3
- export const A2uiMessageSchema = z.object({
4
- createSurface: z.object({
5
- surfaceId: z.string(),
6
- catalogId: z.string(),
7
- theme: z.any().optional(),
8
- }).optional(),
9
- updateComponents: z.object({
10
- surfaceId: z.string(),
11
- components: z.array(z.record(z.any())),
12
- }).optional(),
13
- updateDataModel: z.object({
14
- surfaceId: z.string(),
15
- path: z.string().optional(),
16
- value: z.any(),
17
- }).optional(),
18
- deleteSurface: z.object({
19
- surfaceId: z.string(),
20
- }).optional(),
21
- });
22
-
23
- export type A2uiMessage = z.infer<typeof A2uiMessageSchema>;