@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,3 +1,18 @@
1
+ /*
2
+ * Copyright 2025 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
+ */
1
16
  import assert from 'node:assert';
2
17
  import { describe, it, beforeEach } from 'node:test';
3
18
  import { DataModel } from './data-model.js';
@@ -8,15 +23,23 @@ describe('DataModel', () => {
8
23
  user: {
9
24
  name: 'Alice',
10
25
  settings: {
11
- theme: 'dark'
12
- }
26
+ theme: 'dark',
27
+ },
13
28
  },
14
- items: ['a', 'b', 'c']
29
+ items: ['a', 'b', 'c'],
15
30
  });
16
31
  });
32
+ // --- Initialization ---
33
+ it('initializes with empty data if not provided', () => {
34
+ const emptyModel = new DataModel();
35
+ assert.deepStrictEqual(emptyModel.get('/'), {});
36
+ });
17
37
  // --- Basic Retrieval ---
18
38
  it('retrieves root data', () => {
19
- assert.deepStrictEqual(model.get('/'), { user: { name: 'Alice', settings: { theme: 'dark' } }, items: ['a', 'b', 'c'] });
39
+ assert.deepStrictEqual(model.get('/'), {
40
+ user: { name: 'Alice', settings: { theme: 'dark' } },
41
+ items: ['a', 'b', 'c'],
42
+ });
20
43
  });
21
44
  it('retrieves nested path', () => {
22
45
  assert.strictEqual(model.get('/user/name'), 'Alice');
@@ -30,6 +53,10 @@ describe('DataModel', () => {
30
53
  assert.strictEqual(model.get('/user/age'), undefined);
31
54
  assert.strictEqual(model.get('/unknown/path'), undefined);
32
55
  });
56
+ it('returns undefined when traversing through undefined/null segments', () => {
57
+ model.set('/nullable', null);
58
+ assert.strictEqual(model.get('/nullable/deep/path'), undefined);
59
+ });
33
60
  // --- Updates ---
34
61
  it('sets value at existing path', () => {
35
62
  model.set('/user/name', 'Bob');
@@ -49,10 +76,6 @@ describe('DataModel', () => {
49
76
  assert.strictEqual(model.get('/user/name'), undefined);
50
77
  assert.strictEqual(Object.keys(model.get('/user')).includes('name'), false);
51
78
  });
52
- it('replaces root object on root update', () => {
53
- model.set('/', { newRoot: true });
54
- assert.deepStrictEqual(model.get('/'), { newRoot: true });
55
- });
56
79
  // --- Array / List Handling (Flutter Parity) ---
57
80
  it('List: set and get', () => {
58
81
  model.set('/list/0', 'hello');
@@ -88,7 +111,7 @@ describe('DataModel', () => {
88
111
  // --- Subscriptions ---
89
112
  it('returns a subscription object', () => {
90
113
  model.set('/a', 1);
91
- const sub = model.subscribe('/a', (val) => updatedValue = val);
114
+ const sub = model.subscribe('/a', val => (updatedValue = val));
92
115
  assert.strictEqual(sub.value, 1);
93
116
  let updatedValue;
94
117
  model.set('/a', 2);
@@ -101,7 +124,7 @@ describe('DataModel', () => {
101
124
  });
102
125
  it('notifies subscribers on exact match', () => {
103
126
  let called = false;
104
- const sub = model.subscribe('/user/name', (val) => {
127
+ model.subscribe('/user/name', val => {
105
128
  assert.strictEqual(val, 'Charlie');
106
129
  called = true;
107
130
  });
@@ -110,7 +133,7 @@ describe('DataModel', () => {
110
133
  });
111
134
  it('notifies ancestor subscribers (Container Semantics)', () => {
112
135
  let called = false;
113
- const sub = model.subscribe('/user', (val) => {
136
+ model.subscribe('/user', (val) => {
114
137
  assert.strictEqual(val.name, 'Dave');
115
138
  called = true;
116
139
  });
@@ -119,7 +142,7 @@ describe('DataModel', () => {
119
142
  });
120
143
  it('notifies descendant subscribers', () => {
121
144
  let called = false;
122
- const sub = model.subscribe('/user/settings/theme', (val) => {
145
+ model.subscribe('/user/settings/theme', val => {
123
146
  assert.strictEqual(val, 'light');
124
147
  called = true;
125
148
  });
@@ -129,7 +152,7 @@ describe('DataModel', () => {
129
152
  });
130
153
  it('notifies root subscriber', () => {
131
154
  let called = false;
132
- const sub = model.subscribe('/', (val) => {
155
+ model.subscribe('/', (val) => {
133
156
  assert.strictEqual(val.newProp, 'test');
134
157
  called = true;
135
158
  });
@@ -139,13 +162,13 @@ describe('DataModel', () => {
139
162
  it('notifies parent when child updates', () => {
140
163
  model.set('/parent', { child: 'initial' });
141
164
  let parentValue;
142
- const sub = model.subscribe('/parent', (val) => parentValue = val);
165
+ model.subscribe('/parent', val => (parentValue = val));
143
166
  model.set('/parent/child', 'updated');
144
167
  assert.deepStrictEqual(parentValue, { child: 'updated' });
145
168
  });
146
169
  it('stops notifying after dispose', () => {
147
170
  let count = 0;
148
- const sub = model.subscribe('/', () => count++);
171
+ model.subscribe('/', () => count++);
149
172
  model.dispose();
150
173
  model.set('/foo', 'bar');
151
174
  assert.strictEqual(count, 0);
@@ -171,10 +194,13 @@ describe('DataModel', () => {
171
194
  assert.strictEqual(callCount1, 0); // sub1 was unsubscribed
172
195
  assert.strictEqual(callCount2, 1); // sub2 still active
173
196
  assert.strictEqual(sub2.value, 'Frank');
197
+ sub2.unsubscribe(); // Should clear the internal map set
198
+ model.set('/user/name', 'Grace');
199
+ assert.strictEqual(callCount2, 1); // still 1
174
200
  });
175
201
  it('handles subscription to non-existent path', () => {
176
202
  let val;
177
- const sub = model.subscribe('/non/existent', (v) => val = v);
203
+ const sub = model.subscribe('/non/existent', v => (val = v));
178
204
  assert.strictEqual(sub.value, undefined);
179
205
  model.set('/non/existent', 'exists now');
180
206
  assert.strictEqual(sub.value, 'exists now');
@@ -183,7 +209,7 @@ describe('DataModel', () => {
183
209
  it('handles updates to undefined', () => {
184
210
  model.set('/foo', 'bar');
185
211
  let val = 'initial';
186
- const sub = model.subscribe('/foo', (v) => val = v);
212
+ const sub = model.subscribe('/foo', v => (val = v));
187
213
  model.set('/foo', undefined);
188
214
  assert.strictEqual(sub.value, undefined);
189
215
  assert.strictEqual(val, undefined);
@@ -200,5 +226,39 @@ describe('DataModel', () => {
200
226
  model.set('/items/foo', 'bar');
201
227
  }, /Cannot use non-numeric segment/);
202
228
  });
229
+ it('throws when using non-numeric segment on an array (intermediate)', () => {
230
+ model.set('/', { items: [1, 2, 3] });
231
+ assert.throws(() => {
232
+ model.set('/items/foo/bar', 'value');
233
+ }, /Cannot use non-numeric segment 'foo' on an array/);
234
+ });
235
+ it('normalizes trailing slashes', () => {
236
+ let callCount = 0;
237
+ model.subscribe('/foo', () => callCount++);
238
+ model.set('/foo/', 'bar'); // Trailing slash
239
+ assert.strictEqual(model.get('/foo/'), 'bar');
240
+ assert.strictEqual(callCount, 1);
241
+ });
242
+ it('replaces root object on root update', () => {
243
+ let callCount = 0;
244
+ model.subscribe('/', () => callCount++);
245
+ // Just add another sub on a generic path to ensure notifyAllSubscribers loop hits multiple items
246
+ model.subscribe('/unrelated', () => { });
247
+ model.set('/', { newRoot: 'foo' });
248
+ assert.deepStrictEqual(model.get(''), { newRoot: 'foo' });
249
+ assert.strictEqual(callCount, 1);
250
+ });
251
+ it('throws when path is null or undefined', () => {
252
+ assert.throws(() => model.get(null), /Path cannot be null or undefined/);
253
+ assert.throws(() => model.get(undefined), /Path cannot be null or undefined/);
254
+ assert.throws(() => model.set(null, 'value'), /Path cannot be null or undefined/);
255
+ assert.throws(() => model.set(undefined, 'value'), /Path cannot be null or undefined/);
256
+ });
257
+ it('calculates descendants against root path', () => {
258
+ // This explicitly hits an internal method branch where parentPath === "/"
259
+ const isDescendant = model.isDescendant.bind(model);
260
+ assert.strictEqual(isDescendant('/user', '/'), true);
261
+ assert.strictEqual(isDescendant('/', '/'), false);
262
+ });
203
263
  });
204
264
  //# sourceMappingURL=data-model.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-model.test.js","sourceRoot":"","sources":["../../../../src/v0_9/state/data-model.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { ComponentModel } from './component-model.js';
2
+ import { EventSource } from '../common/events.js';
3
+ /**
4
+ * Manages the collection of components for a specific surface.
5
+ */
6
+ export declare class SurfaceComponentsModel {
7
+ private components;
8
+ private readonly _onCreated;
9
+ private readonly _onDeleted;
10
+ /** Fires when a new component is added to the model. */
11
+ readonly onCreated: EventSource<ComponentModel>;
12
+ /** Fires when a component is removed, providing the ID of the deleted component. */
13
+ readonly onDeleted: EventSource<string>;
14
+ /**
15
+ * Retrieves a component by its ID.
16
+ *
17
+ *
18
+ * @param id The ID of the component to retrieve.
19
+ * @returns The component model, or undefined if not found.
20
+ */
21
+ get(id: string): ComponentModel | undefined;
22
+ /**
23
+ * Returns an iterator over the components in the model.
24
+ */
25
+ get entries(): IterableIterator<[string, ComponentModel]>;
26
+ /**
27
+ * Adds a component to the model.
28
+ * Throws an error if a component with the same ID already exists.
29
+ *
30
+ * @param component The component to add.
31
+ */
32
+ addComponent(component: ComponentModel): void;
33
+ /**
34
+ * Removes a component from the model by its ID.
35
+ * Disposes of the component upon removal.
36
+ *
37
+ * @param id The ID of the component to remove.
38
+ */
39
+ removeComponent(id: string): void;
40
+ /**
41
+ * Disposes of the model and all its components.
42
+ */
43
+ dispose(): void;
44
+ }
45
+ //# sourceMappingURL=surface-components-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-components-model.d.ts","sourceRoot":"","sources":["../../../../src/v0_9/state/surface-components-model.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAe,WAAW,EAAC,MAAM,qBAAqB,CAAC;AAG9D;;GAEG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,UAAU,CAA0C;IAE5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IAEzD,wDAAwD;IACxD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,CAAmB;IAClE,oFAAoF;IACpF,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAmB;IAE1D;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI3C;;OAEG;IACH,IAAI,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAExD;IAED;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAW7C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IASjC;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB"}
@@ -0,0 +1,86 @@
1
+ /*
2
+ * Copyright 2025 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 { EventEmitter } from '../common/events.js';
17
+ import { A2uiStateError } from '../errors.js';
18
+ /**
19
+ * Manages the collection of components for a specific surface.
20
+ */
21
+ export class SurfaceComponentsModel {
22
+ constructor() {
23
+ this.components = new Map();
24
+ this._onCreated = new EventEmitter();
25
+ this._onDeleted = new EventEmitter();
26
+ /** Fires when a new component is added to the model. */
27
+ this.onCreated = this._onCreated;
28
+ /** Fires when a component is removed, providing the ID of the deleted component. */
29
+ this.onDeleted = this._onDeleted;
30
+ }
31
+ /**
32
+ * Retrieves a component by its ID.
33
+ *
34
+ *
35
+ * @param id The ID of the component to retrieve.
36
+ * @returns The component model, or undefined if not found.
37
+ */
38
+ get(id) {
39
+ return this.components.get(id);
40
+ }
41
+ /**
42
+ * Returns an iterator over the components in the model.
43
+ */
44
+ get entries() {
45
+ return this.components.entries();
46
+ }
47
+ /**
48
+ * Adds a component to the model.
49
+ * Throws an error if a component with the same ID already exists.
50
+ *
51
+ * @param component The component to add.
52
+ */
53
+ addComponent(component) {
54
+ if (this.components.has(component.id)) {
55
+ throw new A2uiStateError(`Component with id '${component.id}' already exists.`);
56
+ }
57
+ this.components.set(component.id, component);
58
+ this._onCreated.emit(component);
59
+ }
60
+ /**
61
+ * Removes a component from the model by its ID.
62
+ * Disposes of the component upon removal.
63
+ *
64
+ * @param id The ID of the component to remove.
65
+ */
66
+ removeComponent(id) {
67
+ const component = this.components.get(id);
68
+ if (component) {
69
+ this.components.delete(id);
70
+ component.dispose();
71
+ this._onDeleted.emit(id);
72
+ }
73
+ }
74
+ /**
75
+ * Disposes of the model and all its components.
76
+ */
77
+ dispose() {
78
+ for (const component of this.components.values()) {
79
+ component.dispose();
80
+ }
81
+ this.components.clear();
82
+ this._onCreated.dispose();
83
+ this._onDeleted.dispose();
84
+ }
85
+ }
86
+ //# sourceMappingURL=surface-components-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-components-model.js","sourceRoot":"","sources":["../../../../src/v0_9/state/surface-components-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAC,YAAY,EAAc,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAE5C;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAAnC;QACU,eAAU,GAAgC,IAAI,GAAG,EAAE,CAAC;QAE3C,eAAU,GAAG,IAAI,YAAY,EAAkB,CAAC;QAChD,eAAU,GAAG,IAAI,YAAY,EAAU,CAAC;QAEzD,wDAAwD;QAC/C,cAAS,GAAgC,IAAI,CAAC,UAAU,CAAC;QAClE,oFAAoF;QAC3E,cAAS,GAAwB,IAAI,CAAC,UAAU,CAAC;IA+D5D,CAAC;IA7DC;;;;;;OAMG;IACH,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,SAAyB;QACpC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,cAAc,CACtB,sBAAsB,SAAS,CAAC,EAAE,mBAAmB,CACtD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,EAAU;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,SAAS,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;CACF"}
@@ -1,3 +1,18 @@
1
+ /*
2
+ * Copyright 2025 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
+ */
1
16
  import assert from 'node:assert';
2
17
  import { describe, it, beforeEach } from 'node:test';
3
18
  import { SurfaceComponentsModel } from './surface-components-model.js';
@@ -24,14 +39,16 @@ describe('SurfaceComponentsModel', () => {
24
39
  model.addComponent(c1);
25
40
  // Track update on component itself
26
41
  let updateCount = 0;
27
- c1.onUpdated.subscribe(() => { updateCount++; });
42
+ c1.onUpdated.subscribe(() => {
43
+ updateCount++;
44
+ });
28
45
  c1.properties = { label: 'Updated' };
29
46
  assert.strictEqual(c1.properties.label, 'Updated');
30
47
  assert.strictEqual(updateCount, 1);
31
48
  });
32
49
  it('notifies on component creation', () => {
33
50
  let createdComponent;
34
- model.onCreated.subscribe((c) => {
51
+ model.onCreated.subscribe(c => {
35
52
  createdComponent = c;
36
53
  });
37
54
  model.addComponent(new ComponentModel('c1', 'Button', {}));
@@ -45,5 +62,30 @@ describe('SurfaceComponentsModel', () => {
45
62
  model.addComponent(new ComponentModel('c1', 'Button', {}));
46
63
  }, /already exists/);
47
64
  });
65
+ it('returns entries iterator', () => {
66
+ const c1 = new ComponentModel('c1', 'Button', {});
67
+ const c2 = new ComponentModel('c2', 'Text', {});
68
+ model.addComponent(c1);
69
+ model.addComponent(c2);
70
+ const entries = Array.from(model.entries);
71
+ assert.strictEqual(entries.length, 2);
72
+ assert.deepStrictEqual(entries[0], ['c1', c1]);
73
+ assert.deepStrictEqual(entries[1], ['c2', c2]);
74
+ });
75
+ it('disposes components during model dispose', () => {
76
+ const c1 = new ComponentModel('c1', 'Button', {});
77
+ model.addComponent(c1);
78
+ let childDisposed = false;
79
+ c1.dispose = () => {
80
+ childDisposed = true;
81
+ };
82
+ model.dispose();
83
+ assert.strictEqual(childDisposed, true);
84
+ assert.strictEqual(model.components.size, 0);
85
+ });
86
+ it('safely attempts to remove non-existent component', () => {
87
+ // Should not throw
88
+ model.removeComponent('does-not-exist');
89
+ });
48
90
  });
49
91
  //# sourceMappingURL=surface-components-model.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-components-model.test.js","sourceRoot":"","sources":["../../../../src/v0_9/state/surface-components-model.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { SurfaceModel } from './surface-model.js';
2
2
  import { ComponentApi } from '../catalog/types.js';
3
3
  import { EventSource } from '../common/events.js';
4
+ import { A2uiClientAction } from '../schema/client-to-server.js';
4
5
  /**
5
6
  * The root state model for the A2UI system.
6
7
  * Manages the collection of active surfaces.
@@ -16,10 +17,36 @@ export declare class SurfaceGroupModel<T extends ComponentApi> {
16
17
  /** Fires when a surface is removed. */
17
18
  readonly onSurfaceDeleted: EventSource<string>;
18
19
  /** Fires when an action is dispatched from ANY surface in the group. */
19
- readonly onAction: EventSource<any>;
20
+ readonly onAction: EventSource<A2uiClientAction>;
21
+ /**
22
+ * Adds a surface to the group.
23
+ * Ignores if a surface with the same ID already exists.
24
+ *
25
+ * @param surface The surface model to add.
26
+ */
20
27
  addSurface(surface: SurfaceModel<T>): void;
28
+ /**
29
+ * Removes a surface from the group by its ID.
30
+ * Disposes of the surface upon removal.
31
+ *
32
+ * @param id The ID of the surface to remove.
33
+ */
21
34
  deleteSurface(id: string): void;
35
+ /**
36
+ * Retrieves a surface by its ID.
37
+ *
38
+ *
39
+ * @param id The ID of the surface to retrieve.
40
+ * @returns The surface model, or undefined if not found.
41
+ */
22
42
  getSurface(id: string): SurfaceModel<T> | undefined;
43
+ /**
44
+ * Returns a readonly map of all active surfaces.
45
+ */
46
+ get surfacesMap(): ReadonlyMap<string, SurfaceModel<T>>;
47
+ /**
48
+ * Disposes of the group and all its surfaces.
49
+ */
23
50
  dispose(): void;
24
51
  }
25
52
  //# sourceMappingURL=surface-group-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-group-model.d.ts","sourceRoot":"","sources":["../../../../src/v0_9/state/surface-group-model.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAe,WAAW,EAAe,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAC,gBAAgB,EAAC,MAAM,+BAA+B,CAAC;AAE/D;;;GAGG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,YAAY;IACnD,OAAO,CAAC,QAAQ,CAA2C;IAC3D,OAAO,CAAC,oBAAoB,CAAwC;IAEpE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuC;IACzE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA8B;IAChE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAElE,yCAAyC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAC9B;IACzB,uCAAuC;IACvC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAA0B;IACxE,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAkB;IAElE;;;;;OAKG;IACH,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAiB1C;;;;;OAKG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAe/B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS;IAInD;;OAEG;IACH,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAEtD;IAED;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB"}
@@ -1,3 +1,18 @@
1
+ /*
2
+ * Copyright 2025 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
+ */
1
16
  import { EventEmitter } from '../common/events.js';
2
17
  /**
3
18
  * The root state model for the A2UI system.
@@ -17,6 +32,12 @@ export class SurfaceGroupModel {
17
32
  /** Fires when an action is dispatched from ANY surface in the group. */
18
33
  this.onAction = this._onAction;
19
34
  }
35
+ /**
36
+ * Adds a surface to the group.
37
+ * Ignores if a surface with the same ID already exists.
38
+ *
39
+ * @param surface The surface model to add.
40
+ */
20
41
  addSurface(surface) {
21
42
  if (this.surfaces.has(surface.id)) {
22
43
  console.warn(`Surface ${surface.id} already exists. Ignoring.`);
@@ -24,10 +45,16 @@ export class SurfaceGroupModel {
24
45
  }
25
46
  this.surfaces.set(surface.id, surface);
26
47
  // Subscribe to surface actions and propagate
27
- const sub = surface.onAction.subscribe((action) => this._onAction.emit(action));
48
+ const sub = surface.onAction.subscribe(action => this._onAction.emit(action));
28
49
  this.surfaceUnsubscribers.set(surface.id, sub);
29
50
  this._onSurfaceCreated.emit(surface);
30
51
  }
52
+ /**
53
+ * Removes a surface from the group by its ID.
54
+ * Disposes of the surface upon removal.
55
+ *
56
+ * @param id The ID of the surface to remove.
57
+ */
31
58
  deleteSurface(id) {
32
59
  const surface = this.surfaces.get(id);
33
60
  if (surface) {
@@ -41,9 +68,25 @@ export class SurfaceGroupModel {
41
68
  this._onSurfaceDeleted.emit(id);
42
69
  }
43
70
  }
71
+ /**
72
+ * Retrieves a surface by its ID.
73
+ *
74
+ *
75
+ * @param id The ID of the surface to retrieve.
76
+ * @returns The surface model, or undefined if not found.
77
+ */
44
78
  getSurface(id) {
45
79
  return this.surfaces.get(id);
46
80
  }
81
+ /**
82
+ * Returns a readonly map of all active surfaces.
83
+ */
84
+ get surfacesMap() {
85
+ return this.surfaces;
86
+ }
87
+ /**
88
+ * Disposes of the group and all its surfaces.
89
+ */
47
90
  dispose() {
48
91
  for (const id of Array.from(this.surfaces.keys())) {
49
92
  this.deleteSurface(id);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-group-model.js","sourceRoot":"","sources":["../../../../src/v0_9/state/surface-group-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAC,YAAY,EAA4B,MAAM,qBAAqB,CAAC;AAG5E;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IAA9B;QACU,aAAQ,GAAiC,IAAI,GAAG,EAAE,CAAC;QACnD,yBAAoB,GAA8B,IAAI,GAAG,EAAE,CAAC;QAEnD,sBAAiB,GAAG,IAAI,YAAY,EAAmB,CAAC;QACxD,sBAAiB,GAAG,IAAI,YAAY,EAAU,CAAC;QAC/C,cAAS,GAAG,IAAI,YAAY,EAAoB,CAAC;QAElE,yCAAyC;QAChC,qBAAgB,GACvB,IAAI,CAAC,iBAAiB,CAAC;QACzB,uCAAuC;QAC9B,qBAAgB,GAAwB,IAAI,CAAC,iBAAiB,CAAC;QACxE,wEAAwE;QAC/D,aAAQ,GAAkC,IAAI,CAAC,SAAS,CAAC;IA2EpE,CAAC;IAzEC;;;;;OAKG;IACH,UAAU,CAAC,OAAwB;QACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,EAAE,4BAA4B,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAEvC,6CAA6C;QAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAC9C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAC5B,CAAC;QACF,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAE/C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,EAAU;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,GAAG,EAAE,CAAC;gBACR,GAAG,CAAC,WAAW,EAAE,CAAC;gBAClB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvC,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,OAAO;QACL,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF"}
@@ -1,3 +1,18 @@
1
+ /*
2
+ * Copyright 2025 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
+ */
1
16
  import assert from 'node:assert';
2
17
  import { describe, it, beforeEach } from 'node:test';
3
18
  import { SurfaceGroupModel } from './surface-group-model.js';
@@ -33,8 +48,12 @@ describe('SurfaceGroupModel', () => {
33
48
  it('notifies lifecycle listeners', () => {
34
49
  let created;
35
50
  let deletedId;
36
- model.onSurfaceCreated.subscribe((s) => { created = s; });
37
- model.onSurfaceDeleted.subscribe((id) => { deletedId = id; });
51
+ model.onSurfaceCreated.subscribe(s => {
52
+ created = s;
53
+ });
54
+ model.onSurfaceDeleted.subscribe(id => {
55
+ deletedId = id;
56
+ });
38
57
  const surface = new SurfaceModel('s1', catalog, {});
39
58
  model.addSurface(surface);
40
59
  assert.ok(created);
@@ -44,13 +63,15 @@ describe('SurfaceGroupModel', () => {
44
63
  });
45
64
  it('propagates actions from surfaces', async () => {
46
65
  let receivedAction;
47
- model.onAction.subscribe((action) => {
66
+ model.onAction.subscribe(action => {
48
67
  receivedAction = action;
49
68
  });
50
69
  const surface = new SurfaceModel('s1', catalog, {});
51
70
  model.addSurface(surface);
52
- await surface.dispatchAction({ type: 'test' });
53
- assert.deepStrictEqual(receivedAction, { type: 'test' });
71
+ await surface.dispatchAction({ event: { name: 'test' } }, 'c1');
72
+ assert.strictEqual(receivedAction.name, 'test');
73
+ assert.strictEqual(receivedAction.surfaceId, 's1');
74
+ assert.strictEqual(receivedAction.sourceComponentId, 'c1');
54
75
  });
55
76
  it('stops propagating actions after deletion', async () => {
56
77
  let callCount = 0;
@@ -60,8 +81,28 @@ describe('SurfaceGroupModel', () => {
60
81
  const surface = new SurfaceModel('s1', catalog, {});
61
82
  model.addSurface(surface);
62
83
  model.deleteSurface('s1');
63
- await surface.dispatchAction({ type: 'test' });
84
+ await surface.dispatchAction({ event: { name: 'test' } }, 'c1');
64
85
  assert.strictEqual(callCount, 0);
65
86
  });
87
+ it('exposes surfacesMap', () => {
88
+ const surface = new SurfaceModel('s1', catalog, {});
89
+ model.addSurface(surface);
90
+ const map = model.surfacesMap;
91
+ assert.strictEqual(map.size, 1);
92
+ assert.strictEqual(map.get('s1'), surface);
93
+ });
94
+ it('disposes correctly', () => {
95
+ const s1 = new SurfaceModel('s1', catalog, {});
96
+ const s2 = new SurfaceModel('s2', catalog, {});
97
+ model.addSurface(s1);
98
+ model.addSurface(s2);
99
+ let deletedCount = 0;
100
+ model.onSurfaceDeleted.subscribe(() => {
101
+ deletedCount++;
102
+ });
103
+ model.dispose();
104
+ assert.strictEqual(deletedCount, 2);
105
+ assert.strictEqual(model.surfacesMap.size, 0);
106
+ });
66
107
  });
67
108
  //# sourceMappingURL=surface-group-model.test.js.map