@assistant-ui/react-generative-ui 0.0.23 → 0.1.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 (338) hide show
  1. package/README.md +2 -0
  2. package/dist/a2ui.d.ts +1 -4
  3. package/dist/a2ui.d.ts.map +1 -1
  4. package/dist/a2ui.js +1 -4
  5. package/dist/index.d.ts +1 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -10
  8. package/dist/index.server.d.ts +1 -2
  9. package/dist/index.server.d.ts.map +1 -1
  10. package/dist/index.server.js +1 -10
  11. package/dist/ir.d.ts +1 -111
  12. package/dist/ir.d.ts.map +1 -1
  13. package/dist/ir.js +1 -175
  14. package/dist/slack.d.ts +1 -4
  15. package/dist/slack.d.ts.map +1 -1
  16. package/dist/slack.js +1 -4
  17. package/dist/teams.d.ts +1 -4
  18. package/dist/teams.d.ts.map +1 -1
  19. package/dist/teams.js +1 -4
  20. package/package.json +5 -5
  21. package/src/a2ui.ts +1 -22
  22. package/src/index.server.ts +1 -2
  23. package/src/index.test.ts +75 -0
  24. package/src/index.ts +1 -2
  25. package/src/ir.ts +1 -279
  26. package/src/slack.ts +1 -39
  27. package/src/teams.ts +1 -35
  28. package/dist/JSONGenerativeUI.client.d.ts +0 -28
  29. package/dist/JSONGenerativeUI.client.d.ts.map +0 -1
  30. package/dist/JSONGenerativeUI.client.js +0 -101
  31. package/dist/JSONGenerativeUI.client.js.map +0 -1
  32. package/dist/JSONGenerativeUI.server.d.ts +0 -21
  33. package/dist/JSONGenerativeUI.server.d.ts.map +0 -1
  34. package/dist/JSONGenerativeUI.server.js +0 -32
  35. package/dist/JSONGenerativeUI.server.js.map +0 -1
  36. package/dist/JSONGenerativeUI.shared.d.ts +0 -63
  37. package/dist/JSONGenerativeUI.shared.d.ts.map +0 -1
  38. package/dist/JSONGenerativeUI.shared.js +0 -31
  39. package/dist/JSONGenerativeUI.shared.js.map +0 -1
  40. package/dist/RadioGroupScope.d.ts +0 -6
  41. package/dist/RadioGroupScope.d.ts.map +0 -1
  42. package/dist/RadioGroupScope.js +0 -25
  43. package/dist/RadioGroupScope.js.map +0 -1
  44. package/dist/a2ui/BindingContext.d.ts +0 -11
  45. package/dist/a2ui/BindingContext.d.ts.map +0 -1
  46. package/dist/a2ui/BindingContext.js +0 -12
  47. package/dist/a2ui/BindingContext.js.map +0 -1
  48. package/dist/a2ui/PresentRenderer.d.ts +0 -11
  49. package/dist/a2ui/PresentRenderer.d.ts.map +0 -1
  50. package/dist/a2ui/PresentRenderer.js +0 -39
  51. package/dist/a2ui/PresentRenderer.js.map +0 -1
  52. package/dist/a2ui/convert.d.ts +0 -15
  53. package/dist/a2ui/convert.d.ts.map +0 -1
  54. package/dist/a2ui/convert.js +0 -728
  55. package/dist/a2ui/convert.js.map +0 -1
  56. package/dist/a2ui/dataModel.d.ts +0 -9
  57. package/dist/a2ui/dataModel.d.ts.map +0 -1
  58. package/dist/a2ui/dataModel.js +0 -44
  59. package/dist/a2ui/dataModel.js.map +0 -1
  60. package/dist/a2ui/reducer.d.ts +0 -8
  61. package/dist/a2ui/reducer.d.ts.map +0 -1
  62. package/dist/a2ui/reducer.js +0 -242
  63. package/dist/a2ui/reducer.js.map +0 -1
  64. package/dist/a2ui/snapshot.d.ts +0 -3
  65. package/dist/a2ui/snapshot.d.ts.map +0 -1
  66. package/dist/a2ui/snapshot.js +0 -33
  67. package/dist/a2ui/snapshot.js.map +0 -1
  68. package/dist/a2ui/types.d.ts +0 -88
  69. package/dist/a2ui/types.d.ts.map +0 -1
  70. package/dist/a2ui/types.js +0 -6
  71. package/dist/a2ui/types.js.map +0 -1
  72. package/dist/a2ui/valueFunctions.d.ts +0 -16
  73. package/dist/a2ui/valueFunctions.d.ts.map +0 -1
  74. package/dist/a2ui/valueFunctions.js +0 -332
  75. package/dist/a2ui/valueFunctions.js.map +0 -1
  76. package/dist/actionRegistry.d.ts +0 -29
  77. package/dist/actionRegistry.d.ts.map +0 -1
  78. package/dist/actionRegistry.js +0 -41
  79. package/dist/actionRegistry.js.map +0 -1
  80. package/dist/answeredValues.d.ts +0 -16
  81. package/dist/answeredValues.d.ts.map +0 -1
  82. package/dist/answeredValues.js +0 -37
  83. package/dist/answeredValues.js.map +0 -1
  84. package/dist/buildPresentParameters.d.ts +0 -21
  85. package/dist/buildPresentParameters.d.ts.map +0 -1
  86. package/dist/buildPresentParameters.js +0 -95
  87. package/dist/buildPresentParameters.js.map +0 -1
  88. package/dist/constants.d.ts +0 -15
  89. package/dist/constants.d.ts.map +0 -1
  90. package/dist/constants.js +0 -19
  91. package/dist/constants.js.map +0 -1
  92. package/dist/convert/boundSpec.d.ts +0 -48
  93. package/dist/convert/boundSpec.d.ts.map +0 -1
  94. package/dist/convert/boundSpec.js +0 -108
  95. package/dist/convert/boundSpec.js.map +0 -1
  96. package/dist/convert/copyBounded.d.ts +0 -25
  97. package/dist/convert/copyBounded.d.ts.map +0 -1
  98. package/dist/convert/copyBounded.js +0 -38
  99. package/dist/convert/copyBounded.js.map +0 -1
  100. package/dist/convert/isElement.d.ts +0 -3
  101. package/dist/convert/isElement.d.ts.map +0 -1
  102. package/dist/convert/isElement.js +0 -6
  103. package/dist/convert/isElement.js.map +0 -1
  104. package/dist/convert/takeRun.d.ts +0 -6
  105. package/dist/convert/takeRun.d.ts.map +0 -1
  106. package/dist/convert/takeRun.js +0 -20
  107. package/dist/convert/takeRun.js.map +0 -1
  108. package/dist/defineGenerativeComponents.d.ts +0 -29
  109. package/dist/defineGenerativeComponents.d.ts.map +0 -1
  110. package/dist/defineGenerativeComponents.js +0 -34
  111. package/dist/defineGenerativeComponents.js.map +0 -1
  112. package/dist/fieldReferences.d.ts +0 -9
  113. package/dist/fieldReferences.d.ts.map +0 -1
  114. package/dist/fieldReferences.js +0 -53
  115. package/dist/fieldReferences.js.map +0 -1
  116. package/dist/generativeUIToJSX.d.ts +0 -18
  117. package/dist/generativeUIToJSX.d.ts.map +0 -1
  118. package/dist/generativeUIToJSX.js +0 -76
  119. package/dist/generativeUIToJSX.js.map +0 -1
  120. package/dist/index.shared.d.ts +0 -15
  121. package/dist/index.shared.d.ts.map +0 -1
  122. package/dist/index.shared.js +0 -9
  123. package/dist/ir.js.map +0 -1
  124. package/dist/renderGenerativeUI.d.ts +0 -14
  125. package/dist/renderGenerativeUI.d.ts.map +0 -1
  126. package/dist/renderGenerativeUI.js +0 -83
  127. package/dist/renderGenerativeUI.js.map +0 -1
  128. package/dist/scopeSchema.d.ts +0 -6
  129. package/dist/scopeSchema.d.ts.map +0 -1
  130. package/dist/scopeSchema.js +0 -56
  131. package/dist/scopeSchema.js.map +0 -1
  132. package/dist/slack/constants.d.ts +0 -93
  133. package/dist/slack/constants.d.ts.map +0 -1
  134. package/dist/slack/constants.js +0 -146
  135. package/dist/slack/constants.js.map +0 -1
  136. package/dist/slack/decodeBlockAction.d.ts +0 -10
  137. package/dist/slack/decodeBlockAction.d.ts.map +0 -1
  138. package/dist/slack/decodeBlockAction.js +0 -129
  139. package/dist/slack/decodeBlockAction.js.map +0 -1
  140. package/dist/slack/fromSlackBlocks.d.ts +0 -27
  141. package/dist/slack/fromSlackBlocks.d.ts.map +0 -1
  142. package/dist/slack/fromSlackBlocks.js +0 -483
  143. package/dist/slack/fromSlackBlocks.js.map +0 -1
  144. package/dist/slack/toSlackBlocks.d.ts +0 -4
  145. package/dist/slack/toSlackBlocks.d.ts.map +0 -1
  146. package/dist/slack/toSlackBlocks.js +0 -901
  147. package/dist/slack/toSlackBlocks.js.map +0 -1
  148. package/dist/slack/types.d.ts +0 -204
  149. package/dist/slack/types.d.ts.map +0 -1
  150. package/dist/slack/types.js +0 -0
  151. package/dist/teams/constants.d.ts +0 -34
  152. package/dist/teams/constants.d.ts.map +0 -1
  153. package/dist/teams/constants.js +0 -68
  154. package/dist/teams/constants.js.map +0 -1
  155. package/dist/teams/decodeSubmitData.d.ts +0 -26
  156. package/dist/teams/decodeSubmitData.d.ts.map +0 -1
  157. package/dist/teams/decodeSubmitData.js +0 -70
  158. package/dist/teams/decodeSubmitData.js.map +0 -1
  159. package/dist/teams/temporalId.d.ts +0 -5
  160. package/dist/teams/temporalId.d.ts.map +0 -1
  161. package/dist/teams/temporalId.js +0 -28
  162. package/dist/teams/temporalId.js.map +0 -1
  163. package/dist/teams/toAdaptiveCard.d.ts +0 -45
  164. package/dist/teams/toAdaptiveCard.d.ts.map +0 -1
  165. package/dist/teams/toAdaptiveCard.js +0 -642
  166. package/dist/teams/toAdaptiveCard.js.map +0 -1
  167. package/dist/teams/toTeamsAttachments.d.ts +0 -10
  168. package/dist/teams/toTeamsAttachments.d.ts.map +0 -1
  169. package/dist/teams/toTeamsAttachments.js +0 -99
  170. package/dist/teams/toTeamsAttachments.js.map +0 -1
  171. package/dist/teams/types.d.ts +0 -224
  172. package/dist/teams/types.d.ts.map +0 -1
  173. package/dist/teams/types.js +0 -0
  174. package/dist/temporal.d.ts +0 -33
  175. package/dist/temporal.d.ts.map +0 -1
  176. package/dist/temporal.js +0 -152
  177. package/dist/temporal.js.map +0 -1
  178. package/dist/types.d.ts +0 -99
  179. package/dist/types.d.ts.map +0 -1
  180. package/dist/types.js +0 -0
  181. package/dist/vocabulary/alert.d.ts +0 -32
  182. package/dist/vocabulary/alert.d.ts.map +0 -1
  183. package/dist/vocabulary/alert.js +0 -160
  184. package/dist/vocabulary/alert.js.map +0 -1
  185. package/dist/vocabulary/collectFormValues.d.ts +0 -23
  186. package/dist/vocabulary/collectFormValues.d.ts.map +0 -1
  187. package/dist/vocabulary/collectFormValues.js +0 -44
  188. package/dist/vocabulary/collectFormValues.js.map +0 -1
  189. package/dist/vocabulary/data.d.ts +0 -66
  190. package/dist/vocabulary/data.d.ts.map +0 -1
  191. package/dist/vocabulary/data.js +0 -503
  192. package/dist/vocabulary/data.js.map +0 -1
  193. package/dist/vocabulary/dispatch.d.ts +0 -9
  194. package/dist/vocabulary/dispatch.d.ts.map +0 -1
  195. package/dist/vocabulary/dispatch.js +0 -50
  196. package/dist/vocabulary/dispatch.js.map +0 -1
  197. package/dist/vocabulary/fact.d.ts +0 -19
  198. package/dist/vocabulary/fact.d.ts.map +0 -1
  199. package/dist/vocabulary/fact.js +0 -51
  200. package/dist/vocabulary/fact.js.map +0 -1
  201. package/dist/vocabulary/form.d.ts +0 -11
  202. package/dist/vocabulary/form.d.ts.map +0 -1
  203. package/dist/vocabulary/form.js +0 -23
  204. package/dist/vocabulary/form.js.map +0 -1
  205. package/dist/vocabulary/formatValue.d.ts +0 -7
  206. package/dist/vocabulary/formatValue.d.ts.map +0 -1
  207. package/dist/vocabulary/formatValue.js +0 -76
  208. package/dist/vocabulary/formatValue.js.map +0 -1
  209. package/dist/vocabulary/icon.d.ts +0 -41
  210. package/dist/vocabulary/icon.d.ts.map +0 -1
  211. package/dist/vocabulary/icon.js +0 -272
  212. package/dist/vocabulary/icon.js.map +0 -1
  213. package/dist/vocabulary/index.d.ts +0 -12
  214. package/dist/vocabulary/index.d.ts.map +0 -1
  215. package/dist/vocabulary/index.js +0 -36
  216. package/dist/vocabulary/index.js.map +0 -1
  217. package/dist/vocabulary/interactive.d.ts +0 -230
  218. package/dist/vocabulary/interactive.d.ts.map +0 -1
  219. package/dist/vocabulary/interactive.js +0 -530
  220. package/dist/vocabulary/interactive.js.map +0 -1
  221. package/dist/vocabulary/layout.d.ts +0 -79
  222. package/dist/vocabulary/layout.d.ts.map +0 -1
  223. package/dist/vocabulary/layout.js +0 -139
  224. package/dist/vocabulary/layout.js.map +0 -1
  225. package/dist/vocabulary/list.d.ts +0 -14
  226. package/dist/vocabulary/list.d.ts.map +0 -1
  227. package/dist/vocabulary/list.js +0 -50
  228. package/dist/vocabulary/list.js.map +0 -1
  229. package/dist/vocabulary/media.d.ts +0 -25
  230. package/dist/vocabulary/media.d.ts.map +0 -1
  231. package/dist/vocabulary/media.js +0 -42
  232. package/dist/vocabulary/media.js.map +0 -1
  233. package/dist/vocabulary/text.d.ts +0 -57
  234. package/dist/vocabulary/text.d.ts.map +0 -1
  235. package/dist/vocabulary/text.js +0 -49
  236. package/dist/vocabulary/text.js.map +0 -1
  237. package/dist/vocabulary/toTextContent.d.ts +0 -2
  238. package/dist/vocabulary/toTextContent.d.ts.map +0 -1
  239. package/dist/vocabulary/toTextContent.js +0 -6
  240. package/dist/vocabulary/toTextContent.js.map +0 -1
  241. package/src/JSONGenerativeUI.client.tsx +0 -168
  242. package/src/JSONGenerativeUI.server.tsx +0 -39
  243. package/src/JSONGenerativeUI.shared.ts +0 -90
  244. package/src/JSONGenerativeUI.test.tsx +0 -1298
  245. package/src/RadioGroupScope.server.test.tsx +0 -24
  246. package/src/RadioGroupScope.tsx +0 -34
  247. package/src/a2ui/BindingContext.ts +0 -26
  248. package/src/a2ui/PresentRenderer.tsx +0 -83
  249. package/src/a2ui/convert.test.ts +0 -2923
  250. package/src/a2ui/convert.ts +0 -1207
  251. package/src/a2ui/dataModel.ts +0 -69
  252. package/src/a2ui/reducer.test.ts +0 -422
  253. package/src/a2ui/reducer.ts +0 -363
  254. package/src/a2ui/snapshot.test.ts +0 -52
  255. package/src/a2ui/snapshot.ts +0 -52
  256. package/src/a2ui/types.ts +0 -114
  257. package/src/a2ui/valueFunctions.test.ts +0 -271
  258. package/src/a2ui/valueFunctions.ts +0 -523
  259. package/src/actionRegistry.test.ts +0 -90
  260. package/src/actionRegistry.ts +0 -88
  261. package/src/answeredValues.test.ts +0 -33
  262. package/src/answeredValues.tsx +0 -70
  263. package/src/buildPresentParameters.test.ts +0 -246
  264. package/src/buildPresentParameters.ts +0 -130
  265. package/src/constants.ts +0 -17
  266. package/src/convert/boundSpec.test.ts +0 -192
  267. package/src/convert/boundSpec.ts +0 -134
  268. package/src/convert/copyBounded.test.ts +0 -131
  269. package/src/convert/copyBounded.ts +0 -38
  270. package/src/convert/isElement.ts +0 -6
  271. package/src/convert/takeRun.test.ts +0 -64
  272. package/src/convert/takeRun.ts +0 -19
  273. package/src/defineGenerativeComponents.ts +0 -38
  274. package/src/fieldReferences.test.ts +0 -66
  275. package/src/fieldReferences.ts +0 -83
  276. package/src/generativeUIToJSX.test.ts +0 -268
  277. package/src/generativeUIToJSX.ts +0 -152
  278. package/src/index.server.test.ts +0 -106
  279. package/src/index.shared.ts +0 -61
  280. package/src/ir.test.ts +0 -203
  281. package/src/renderGenerativeUI.test.tsx +0 -373
  282. package/src/renderGenerativeUI.tsx +0 -165
  283. package/src/scopeSchema.test.ts +0 -72
  284. package/src/scopeSchema.ts +0 -71
  285. package/src/slack/a2uiSlack.test.ts +0 -198
  286. package/src/slack/constants.ts +0 -194
  287. package/src/slack/datePicker.test.ts +0 -612
  288. package/src/slack/decodeBlockAction.test.ts +0 -233
  289. package/src/slack/decodeBlockAction.ts +0 -232
  290. package/src/slack/fromSlackBlocks.test.ts +0 -1465
  291. package/src/slack/fromSlackBlocks.ts +0 -789
  292. package/src/slack/toSlackBlocks.test.ts +0 -3065
  293. package/src/slack/toSlackBlocks.ts +0 -1818
  294. package/src/slack/types.ts +0 -264
  295. package/src/teams/constants.ts +0 -93
  296. package/src/teams/decodeSubmitData.test.ts +0 -397
  297. package/src/teams/decodeSubmitData.ts +0 -110
  298. package/src/teams/temporal.test.ts +0 -766
  299. package/src/teams/temporalId.ts +0 -56
  300. package/src/teams/toAdaptiveCard.test.ts +0 -1897
  301. package/src/teams/toAdaptiveCard.ts +0 -1057
  302. package/src/teams/toTeamsAttachments.test.ts +0 -74
  303. package/src/teams/toTeamsAttachments.ts +0 -133
  304. package/src/teams/types.ts +0 -266
  305. package/src/temporal.test.ts +0 -319
  306. package/src/temporal.ts +0 -259
  307. package/src/types.ts +0 -119
  308. package/src/vocabulary/alert.test.tsx +0 -427
  309. package/src/vocabulary/alert.tsx +0 -217
  310. package/src/vocabulary/collectFormValues.test.ts +0 -389
  311. package/src/vocabulary/collectFormValues.ts +0 -116
  312. package/src/vocabulary/data.test.tsx +0 -858
  313. package/src/vocabulary/data.tsx +0 -819
  314. package/src/vocabulary/datepicker.dom.test.tsx +0 -1148
  315. package/src/vocabulary/dispatch.ts +0 -83
  316. package/src/vocabulary/fact.test.tsx +0 -94
  317. package/src/vocabulary/fact.tsx +0 -54
  318. package/src/vocabulary/form.test.tsx +0 -113
  319. package/src/vocabulary/form.tsx +0 -39
  320. package/src/vocabulary/formatValue.test.ts +0 -72
  321. package/src/vocabulary/formatValue.ts +0 -127
  322. package/src/vocabulary/icon.test.tsx +0 -64
  323. package/src/vocabulary/icon.tsx +0 -174
  324. package/src/vocabulary/index.test.ts +0 -65
  325. package/src/vocabulary/index.ts +0 -33
  326. package/src/vocabulary/interactive.dispatch.test.tsx +0 -454
  327. package/src/vocabulary/interactive.dom.test.tsx +0 -1747
  328. package/src/vocabulary/interactive.test.tsx +0 -377
  329. package/src/vocabulary/interactive.tsx +0 -1048
  330. package/src/vocabulary/layout.test.tsx +0 -323
  331. package/src/vocabulary/layout.tsx +0 -247
  332. package/src/vocabulary/list.test.tsx +0 -222
  333. package/src/vocabulary/list.tsx +0 -50
  334. package/src/vocabulary/media.test.tsx +0 -85
  335. package/src/vocabulary/media.tsx +0 -56
  336. package/src/vocabulary/text.test.tsx +0 -102
  337. package/src/vocabulary/text.tsx +0 -60
  338. package/src/vocabulary/toTextContent.ts +0 -2
@@ -1,88 +0,0 @@
1
- export declare const A2UI_SURFACE_ID: unique symbol;
2
- export type A2uiVersion = "v0.9" | "v0.9.1" | "v1.0";
3
- export interface A2uiTemplateChildren {
4
- readonly template: {
5
- readonly componentId: string;
6
- readonly path: string;
7
- };
8
- }
9
- export interface ComponentNode extends Record<string, unknown> {
10
- readonly id: string;
11
- readonly component: string;
12
- readonly children?: readonly string[] | {
13
- readonly componentId: string;
14
- readonly path: string;
15
- } | A2uiTemplateChildren;
16
- }
17
- export interface A2uiCreateSurfaceV09Payload {
18
- readonly surfaceId: string;
19
- readonly catalogId?: string;
20
- readonly theme?: unknown;
21
- readonly attachDataModel?: unknown;
22
- }
23
- export interface A2uiCreateSurfaceV10Payload {
24
- readonly surfaceId: string;
25
- readonly catalogId?: string;
26
- readonly surfaceProperties?: unknown;
27
- readonly sendDataModel?: unknown;
28
- readonly components?: readonly ComponentNode[];
29
- readonly dataModel?: unknown;
30
- }
31
- export interface A2uiUpdateComponentsPayload {
32
- readonly surfaceId: string;
33
- readonly components: readonly ComponentNode[];
34
- }
35
- export interface A2uiUpdateDataModelPayload {
36
- readonly surfaceId: string;
37
- readonly path?: string;
38
- readonly contents?: unknown;
39
- readonly value?: unknown;
40
- readonly data?: unknown;
41
- }
42
- export interface A2uiDeleteSurfacePayload {
43
- readonly surfaceId: string;
44
- }
45
- export type A2uiCreateSurfaceOperation = {
46
- readonly version: "v0.9";
47
- readonly createSurface: A2uiCreateSurfaceV09Payload;
48
- } | {
49
- readonly version: "v0.9.1";
50
- readonly createSurface: A2uiCreateSurfaceV09Payload;
51
- } | {
52
- readonly version: "v1.0";
53
- readonly createSurface: A2uiCreateSurfaceV10Payload;
54
- };
55
- export interface A2uiUpdateComponentsOperation {
56
- readonly version: A2uiVersion;
57
- readonly updateComponents: A2uiUpdateComponentsPayload;
58
- }
59
- export interface A2uiUpdateDataModelOperation {
60
- readonly version: A2uiVersion;
61
- readonly updateDataModel: A2uiUpdateDataModelPayload;
62
- }
63
- export interface A2uiDeleteSurfaceOperation {
64
- readonly version: A2uiVersion;
65
- readonly deleteSurface: A2uiDeleteSurfacePayload;
66
- }
67
- export type A2uiOperation = A2uiCreateSurfaceOperation | A2uiUpdateComponentsOperation | A2uiUpdateDataModelOperation | A2uiDeleteSurfaceOperation;
68
- export type A2uiSurfaceSnapshotOperation = {
69
- readonly version: "v0.9";
70
- readonly createSurface: A2uiCreateSurfaceV09Payload;
71
- } | {
72
- readonly version: "v0.9";
73
- readonly updateComponents: A2uiUpdateComponentsPayload;
74
- } | {
75
- readonly version: "v0.9";
76
- readonly updateDataModel: A2uiUpdateDataModelPayload;
77
- };
78
- export type A2uiSurfaceState = {
79
- catalogId?: string;
80
- components: Map<string, Record<string, unknown>>;
81
- dataModel: unknown;
82
- };
83
- export type A2uiState = ReadonlyMap<string, A2uiSurfaceState>;
84
- export interface A2uiOperationResult {
85
- readonly state: A2uiState;
86
- readonly warnings: string[];
87
- }
88
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/a2ui/types.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- //#region src/a2ui/types.ts
2
- const A2UI_SURFACE_ID = Symbol("a2uiSurfaceId");
3
- //#endregion
4
- export { A2UI_SURFACE_ID };
5
-
6
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../src/a2ui/types.ts"],"sourcesContent":["export const A2UI_SURFACE_ID = Symbol(\"a2uiSurfaceId\");\n\nexport type A2uiVersion = \"v0.9\" | \"v0.9.1\" | \"v1.0\";\n\nexport interface A2uiTemplateChildren {\n readonly template: {\n readonly componentId: string;\n readonly path: string;\n };\n}\n\nexport interface ComponentNode extends Record<string, unknown> {\n readonly id: string;\n readonly component: string;\n readonly children?:\n | readonly string[]\n | { readonly componentId: string; readonly path: string }\n | A2uiTemplateChildren;\n}\n\nexport interface A2uiCreateSurfaceV09Payload {\n readonly surfaceId: string;\n readonly catalogId?: string;\n readonly theme?: unknown;\n readonly attachDataModel?: unknown;\n}\n\nexport interface A2uiCreateSurfaceV10Payload {\n readonly surfaceId: string;\n readonly catalogId?: string;\n readonly surfaceProperties?: unknown;\n readonly sendDataModel?: unknown;\n readonly components?: readonly ComponentNode[];\n readonly dataModel?: unknown;\n}\n\nexport interface A2uiUpdateComponentsPayload {\n readonly surfaceId: string;\n readonly components: readonly ComponentNode[];\n}\n\nexport interface A2uiUpdateDataModelPayload {\n readonly surfaceId: string;\n readonly path?: string;\n readonly contents?: unknown;\n readonly value?: unknown;\n readonly data?: unknown;\n}\n\nexport interface A2uiDeleteSurfacePayload {\n readonly surfaceId: string;\n}\n\nexport type A2uiCreateSurfaceOperation =\n | {\n readonly version: \"v0.9\";\n readonly createSurface: A2uiCreateSurfaceV09Payload;\n }\n | {\n readonly version: \"v0.9.1\";\n readonly createSurface: A2uiCreateSurfaceV09Payload;\n }\n | {\n readonly version: \"v1.0\";\n readonly createSurface: A2uiCreateSurfaceV10Payload;\n };\n\nexport interface A2uiUpdateComponentsOperation {\n readonly version: A2uiVersion;\n readonly updateComponents: A2uiUpdateComponentsPayload;\n}\n\nexport interface A2uiUpdateDataModelOperation {\n readonly version: A2uiVersion;\n readonly updateDataModel: A2uiUpdateDataModelPayload;\n}\n\nexport interface A2uiDeleteSurfaceOperation {\n readonly version: A2uiVersion;\n readonly deleteSurface: A2uiDeleteSurfacePayload;\n}\n\nexport type A2uiOperation =\n | A2uiCreateSurfaceOperation\n | A2uiUpdateComponentsOperation\n | A2uiUpdateDataModelOperation\n | A2uiDeleteSurfaceOperation;\n\nexport type A2uiSurfaceSnapshotOperation =\n | {\n readonly version: \"v0.9\";\n readonly createSurface: A2uiCreateSurfaceV09Payload;\n }\n | {\n readonly version: \"v0.9\";\n readonly updateComponents: A2uiUpdateComponentsPayload;\n }\n | {\n readonly version: \"v0.9\";\n readonly updateDataModel: A2uiUpdateDataModelPayload;\n };\n\nexport type A2uiSurfaceState = {\n catalogId?: string;\n components: Map<string, Record<string, unknown>>;\n dataModel: unknown;\n};\n\nexport type A2uiState = ReadonlyMap<string, A2uiSurfaceState>;\n\nexport interface A2uiOperationResult {\n readonly state: A2uiState;\n readonly warnings: string[];\n}\n"],"mappings":";AAAA,MAAa,kBAAkB,OAAO,eAAe"}
@@ -1,16 +0,0 @@
1
- export type ExpressionPart = string | number | boolean | null | {
2
- readonly path: string;
3
- } | {
4
- readonly call: string;
5
- readonly args: Record<string, ExpressionPart>;
6
- };
7
- export type ValueFunctionContext = {
8
- readonly resolve: (value: ExpressionPart) => unknown;
9
- readonly warn: (message: string) => void;
10
- readonly templates: Map<string, ExpressionPart[] | null>;
11
- };
12
- export declare class ExpressionSyntaxError extends Error {
13
- }
14
- export declare const parseExpressionTemplate: (template: string) => ExpressionPart[];
15
- export declare const evaluateA2uiValueFunction: (name: string, args: Record<string, unknown>, context: ValueFunctionContext) => unknown;
16
- //# sourceMappingURL=valueFunctions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"valueFunctions.d.ts","sourceRoot":"","sources":["../../src/a2ui/valueFunctions.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CAAE,CAAC;AAE7E,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC;CAC1D,CAAC;AAEF,qBAAa,qBAAsB,SAAQ,KAAK;CAAG;AA2KnD,eAAO,MAAM,uBAAuB,GAAI,UAAU,MAAM,KAAG,cAAc,EAkCxE,CAAC;AAiSF,eAAO,MAAM,yBAAyB,GACpC,MAAM,MAAM,EACZ,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,oBAAoB,KAC5B,OAMF,CAAC"}
@@ -1,332 +0,0 @@
1
- //#region src/a2ui/valueFunctions.ts
2
- const MAX_TEMPLATE_LENGTH = 1e4;
3
- const MAX_TEMPLATE_PARTS = 1e3;
4
- const MAX_EXPRESSION_DEPTH = 32;
5
- var ExpressionSyntaxError = class extends Error {};
6
- const FUNCTION_NAME = /^[A-Za-z_@]\w*$/;
7
- const isSpace = (character) => /\s/.test(character);
8
- const isPathCharacter = (character) => !isSpace(character) && !"{}(),:'\"$".includes(character);
9
- const isDigit = (character) => character !== void 0 && character >= "0" && character <= "9";
10
- var ExpressionReader = class {
11
- text;
12
- position;
13
- constructor(text, position) {
14
- this.text = text;
15
- this.position = position;
16
- }
17
- expression(depth) {
18
- if (depth > MAX_EXPRESSION_DEPTH) this.fail("it nests too deeply");
19
- this.skipSpace();
20
- const character = this.text[this.position];
21
- if (this.text.startsWith("${", this.position)) {
22
- this.position += 2;
23
- this.skipSpace();
24
- if (this.text[this.position] === "}") {
25
- this.position++;
26
- return "";
27
- }
28
- const value = this.expression(depth + 1);
29
- this.skipSpace();
30
- if (this.text[this.position] !== "}") this.fail(this.position >= this.text.length ? "an interpolation is not closed" : "characters follow a complete expression");
31
- this.position++;
32
- return value;
33
- }
34
- if (character === "'" || character === "\"") return this.string(character);
35
- if (isDigit(character) || character === "-" && isDigit(this.text[this.position + 1])) return this.number();
36
- const word = this.word();
37
- if (word === "") this.fail("an expression is missing");
38
- const end = this.position;
39
- this.skipSpace();
40
- if (this.text[this.position] === "(") {
41
- if (!FUNCTION_NAME.test(word)) this.fail(`"${word}" is not a function`);
42
- this.position++;
43
- return {
44
- call: word,
45
- args: this.arguments(depth)
46
- };
47
- }
48
- this.position = end;
49
- if (word === "true") return true;
50
- if (word === "false") return false;
51
- if (word === "null") return null;
52
- return { path: word };
53
- }
54
- arguments(depth) {
55
- const args = {};
56
- this.skipSpace();
57
- if (this.text[this.position] === ")") {
58
- this.position++;
59
- return args;
60
- }
61
- for (;;) {
62
- this.skipSpace();
63
- const name = this.word();
64
- if (!FUNCTION_NAME.test(name)) this.fail("an argument name is missing");
65
- this.skipSpace();
66
- if (this.text[this.position] !== ":") this.fail(`argument "${name}" has no colon`);
67
- this.position++;
68
- Object.defineProperty(args, name, {
69
- value: this.expression(depth + 1),
70
- enumerable: true,
71
- configurable: true,
72
- writable: true
73
- });
74
- this.skipSpace();
75
- const separator = this.text[this.position++];
76
- if (separator === ")") return args;
77
- if (separator !== ",") this.fail(separator === void 0 ? "a function call is not closed" : "arguments are not separated by commas");
78
- this.skipSpace();
79
- if (this.text[this.position] === ")") {
80
- this.position++;
81
- return args;
82
- }
83
- }
84
- }
85
- string(quote) {
86
- let value = "";
87
- this.position++;
88
- for (;;) {
89
- const character = this.text[this.position++];
90
- if (character === void 0) this.fail("a string is not closed");
91
- if (character === quote) return value;
92
- if (character !== "\\") {
93
- value += character;
94
- continue;
95
- }
96
- const escaped = this.text[this.position++];
97
- if (escaped === void 0) this.fail("a string is not closed");
98
- value += escaped === "n" ? "\n" : escaped === "t" ? " " : escaped === "r" ? "\r" : escaped;
99
- }
100
- }
101
- number() {
102
- const start = this.position;
103
- if (this.text[this.position] === "-") this.position++;
104
- while (isDigit(this.text[this.position])) this.position++;
105
- if (this.text[this.position] === ".") {
106
- this.position++;
107
- while (isDigit(this.text[this.position])) this.position++;
108
- }
109
- const next = this.text[this.position];
110
- if (next !== void 0 && isPathCharacter(next)) this.fail("a number is malformed");
111
- return Number(this.text.slice(start, this.position));
112
- }
113
- word() {
114
- const start = this.position;
115
- while (this.position < this.text.length && isPathCharacter(this.text[this.position])) this.position++;
116
- return this.text.slice(start, this.position);
117
- }
118
- skipSpace() {
119
- while (this.position < this.text.length && isSpace(this.text[this.position])) this.position++;
120
- }
121
- fail(reason) {
122
- throw new ExpressionSyntaxError(reason);
123
- }
124
- };
125
- const parseExpressionTemplate = (template) => {
126
- if (template.length > MAX_TEMPLATE_LENGTH) throw new ExpressionSyntaxError(`it is longer than ${MAX_TEMPLATE_LENGTH} characters`);
127
- const parts = [];
128
- const push = (part) => {
129
- if (parts.length >= MAX_TEMPLATE_PARTS) throw new ExpressionSyntaxError(`it has more than ${MAX_TEMPLATE_PARTS} parts`);
130
- parts.push(part);
131
- };
132
- let literal = "";
133
- let index = 0;
134
- while (index < template.length) if (template.startsWith("\\${", index)) {
135
- literal += "${";
136
- index += 3;
137
- } else if (template.startsWith("${", index)) {
138
- if (literal) push(literal);
139
- literal = "";
140
- const reader = new ExpressionReader(template, index);
141
- push(reader.expression(0));
142
- index = reader.position;
143
- } else {
144
- literal += template[index];
145
- index++;
146
- }
147
- if (literal) push(literal);
148
- return parts;
149
- };
150
- const isMissing = (value) => value === void 0 || value === null || value === "";
151
- const toNumber = (value) => {
152
- const number = typeof value === "number" ? value : typeof value === "string" && value.trim() !== "" ? Number(value) : NaN;
153
- return Number.isFinite(number) ? number : void 0;
154
- };
155
- const DATE_ONLY = /^(\d{4})-(\d{2})-(\d{2})$/;
156
- const toDate = (value) => {
157
- if (typeof value === "number") return new Date(value);
158
- if (typeof value !== "string") return void 0;
159
- const dateOnly = DATE_ONLY.exec(value);
160
- if (!dateOnly) return new Date(value);
161
- const [year, month, day] = dateOnly.slice(1).map(Number);
162
- const date = /* @__PURE__ */ new Date(0);
163
- date.setFullYear(year, month - 1, day);
164
- date.setHours(0, 0, 0, 0);
165
- return date.getMonth() === month - 1 && date.getDate() === day ? date : void 0;
166
- };
167
- const toText = (value) => {
168
- if (value === void 0 || value === null) return "";
169
- if (typeof value !== "object") return String(value);
170
- try {
171
- return JSON.stringify(value) ?? "";
172
- } catch {
173
- return "";
174
- }
175
- };
176
- const cached = (cache, key, create) => {
177
- let value = cache.get(key);
178
- if (value === void 0) {
179
- value = create();
180
- if (cache.size >= 64) cache.clear();
181
- cache.set(key, value);
182
- }
183
- return value;
184
- };
185
- const numberFormats = /* @__PURE__ */ new Map();
186
- const dateFormats = /* @__PURE__ */ new Map();
187
- const pluralRules = /* @__PURE__ */ new Map();
188
- const invalidArguments = (name, context) => {
189
- context.warn(`A2UI function "${name}" received invalid arguments.`);
190
- };
191
- const formatAmount = (name, args, context, currency) => {
192
- if (isMissing(args["value"])) return "";
193
- const value = toNumber(args["value"]);
194
- const decimals = args["decimals"] === void 0 ? void 0 : toNumber(args["decimals"]);
195
- if (value === void 0 || args["decimals"] !== void 0 && (decimals === void 0 || !Number.isInteger(decimals) || decimals < 0 || decimals > 20)) return invalidArguments(name, context);
196
- const options = {
197
- useGrouping: args["grouping"] !== false,
198
- ...currency !== void 0 ? {
199
- style: "currency",
200
- currency
201
- } : {},
202
- ...decimals !== void 0 ? {
203
- minimumFractionDigits: decimals,
204
- maximumFractionDigits: decimals
205
- } : {}
206
- };
207
- try {
208
- return cached(numberFormats, JSON.stringify(options), () => new Intl.NumberFormat(void 0, options)).format(value);
209
- } catch {
210
- return invalidArguments(name, context);
211
- }
212
- };
213
- const dateName = (date, options, type) => {
214
- try {
215
- return cached(dateFormats, JSON.stringify(options), () => new Intl.DateTimeFormat(void 0, options)).formatToParts(date).find((part) => part.type === type)?.value;
216
- } catch {
217
- return;
218
- }
219
- };
220
- const pad = (value, width) => String(value).padStart(width, "0");
221
- const dateField = (date, letter, width) => {
222
- switch (letter) {
223
- case "y": return width === 2 ? pad(date.getFullYear() % 100, 2) : pad(date.getFullYear(), width);
224
- case "M": return width <= 2 ? pad(date.getMonth() + 1, width) : dateName(date, { month: width === 3 ? "short" : width === 4 ? "long" : "narrow" }, "month");
225
- case "d": return pad(date.getDate(), width);
226
- case "E": return dateName(date, { weekday: width <= 3 ? "short" : width === 4 ? "long" : "narrow" }, "weekday");
227
- case "h": return pad(date.getHours() % 12 || 12, width);
228
- case "H": return pad(date.getHours(), width);
229
- case "m": return pad(date.getMinutes(), width);
230
- case "s": return pad(date.getSeconds(), width);
231
- case "a": return dateName(date, {
232
- hour: "numeric",
233
- hour12: true
234
- }, "dayPeriod") ?? (date.getHours() < 12 ? "AM" : "PM");
235
- default: return;
236
- }
237
- };
238
- const formatDatePattern = (date, pattern) => {
239
- let result = "";
240
- let index = 0;
241
- while (index < pattern.length) {
242
- const character = pattern[index];
243
- if (character === "'") {
244
- index++;
245
- if (pattern[index] === "'") {
246
- result += "'";
247
- index++;
248
- continue;
249
- }
250
- while (index < pattern.length) if (pattern[index] !== "'") result += pattern[index++];
251
- else if (pattern[index + 1] === "'") {
252
- result += "'";
253
- index += 2;
254
- } else {
255
- index++;
256
- break;
257
- }
258
- } else if (/[A-Za-z]/.test(character)) {
259
- let end = index + 1;
260
- while (pattern[end] === character) end++;
261
- const field = dateField(date, character, end - index);
262
- if (field === void 0) return void 0;
263
- result += field;
264
- index = end;
265
- } else {
266
- result += character;
267
- index++;
268
- }
269
- }
270
- return result;
271
- };
272
- const pluralCategory = (value) => {
273
- try {
274
- return cached(pluralRules, "", () => new Intl.PluralRules()).select(value);
275
- } catch {
276
- return value === 1 ? "one" : "other";
277
- }
278
- };
279
- const VALUE_FUNCTIONS = {
280
- formatString: (args, context) => {
281
- const template = args["value"];
282
- if (template === void 0 || template === null) return "";
283
- if (typeof template !== "string") return invalidArguments("formatString", context);
284
- let parts = context.templates.get(template);
285
- if (parts === void 0) {
286
- try {
287
- parts = parseExpressionTemplate(template);
288
- } catch (error) {
289
- if (!(error instanceof ExpressionSyntaxError)) throw error;
290
- context.warn(`A2UI formatString template is malformed: ${error.message}.`);
291
- parts = null;
292
- }
293
- context.templates.set(template, parts);
294
- }
295
- if (parts === null) return void 0;
296
- return parts.map((part) => toText(typeof part === "object" && part !== null ? context.resolve(part) : part)).join("");
297
- },
298
- formatNumber: (args, context) => formatAmount("formatNumber", args, context),
299
- formatCurrency: (args, context) => typeof args["currency"] === "string" ? formatAmount("formatCurrency", args, context, args["currency"]) : invalidArguments("formatCurrency", context),
300
- formatDate: (args, context) => {
301
- const value = args["value"];
302
- if (isMissing(value)) return "";
303
- const format = args["format"];
304
- const date = toDate(value);
305
- if (typeof format !== "string" || !date || Number.isNaN(date.getTime())) return invalidArguments("formatDate", context);
306
- const formatted = formatDatePattern(date, format);
307
- if (formatted !== void 0) return formatted;
308
- context.warn(`A2UI function "formatDate" does not support the pattern "${format}", so it returned an ISO date.`);
309
- return date.toISOString();
310
- },
311
- pluralize: (args, context) => {
312
- if (isMissing(args["value"])) return "";
313
- const value = toNumber(args["value"]);
314
- if (value === void 0 || typeof args["other"] !== "string") return invalidArguments("pluralize", context);
315
- const selected = args[pluralCategory(value)];
316
- return typeof selected === "string" ? selected : args["other"];
317
- },
318
- and: (args, context) => Array.isArray(args["values"]) ? args["values"].every(Boolean) : invalidArguments("and", context),
319
- or: (args, context) => Array.isArray(args["values"]) ? args["values"].some(Boolean) : invalidArguments("or", context),
320
- not: (args) => !args["value"]
321
- };
322
- const evaluateA2uiValueFunction = (name, args, context) => {
323
- if (!Object.hasOwn(VALUE_FUNCTIONS, name)) {
324
- context.warn(`A2UI function "${name}" is not supported and was skipped.`);
325
- return;
326
- }
327
- return VALUE_FUNCTIONS[name](args, context);
328
- };
329
- //#endregion
330
- export { ExpressionSyntaxError, evaluateA2uiValueFunction, parseExpressionTemplate };
331
-
332
- //# sourceMappingURL=valueFunctions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"valueFunctions.js","names":[],"sources":["../../src/a2ui/valueFunctions.ts"],"sourcesContent":["const MAX_TEMPLATE_LENGTH = 10_000;\nconst MAX_TEMPLATE_PARTS = 1_000;\nconst MAX_EXPRESSION_DEPTH = 32;\n\nexport type ExpressionPart =\n | string\n | number\n | boolean\n | null\n | { readonly path: string }\n | { readonly call: string; readonly args: Record<string, ExpressionPart> };\n\nexport type ValueFunctionContext = {\n readonly resolve: (value: ExpressionPart) => unknown;\n readonly warn: (message: string) => void;\n readonly templates: Map<string, ExpressionPart[] | null>;\n};\n\nexport class ExpressionSyntaxError extends Error {}\n\nconst FUNCTION_NAME = /^[A-Za-z_@]\\w*$/;\n\nconst isSpace = (character: string) => /\\s/.test(character);\n\nconst isPathCharacter = (character: string) =>\n !isSpace(character) && !\"{}(),:'\\\"$\".includes(character);\n\nconst isDigit = (character: string | undefined) =>\n character !== undefined && character >= \"0\" && character <= \"9\";\n\nclass ExpressionReader {\n private readonly text: string;\n position: number;\n\n constructor(text: string, position: number) {\n this.text = text;\n this.position = position;\n }\n\n expression(depth: number): ExpressionPart {\n if (depth > MAX_EXPRESSION_DEPTH) this.fail(\"it nests too deeply\");\n this.skipSpace();\n const character = this.text[this.position];\n if (this.text.startsWith(\"${\", this.position)) {\n this.position += 2;\n this.skipSpace();\n if (this.text[this.position] === \"}\") {\n this.position++;\n return \"\";\n }\n const value = this.expression(depth + 1);\n this.skipSpace();\n if (this.text[this.position] !== \"}\") {\n this.fail(\n this.position >= this.text.length\n ? \"an interpolation is not closed\"\n : \"characters follow a complete expression\",\n );\n }\n this.position++;\n return value;\n }\n if (character === \"'\" || character === '\"') return this.string(character);\n if (\n isDigit(character) ||\n (character === \"-\" && isDigit(this.text[this.position + 1]))\n ) {\n return this.number();\n }\n const word = this.word();\n if (word === \"\") this.fail(\"an expression is missing\");\n const end = this.position;\n this.skipSpace();\n if (this.text[this.position] === \"(\") {\n if (!FUNCTION_NAME.test(word)) this.fail(`\"${word}\" is not a function`);\n this.position++;\n return { call: word, args: this.arguments(depth) };\n }\n this.position = end;\n if (word === \"true\") return true;\n if (word === \"false\") return false;\n if (word === \"null\") return null;\n return { path: word };\n }\n\n private arguments(depth: number): Record<string, ExpressionPart> {\n const args: Record<string, ExpressionPart> = {};\n this.skipSpace();\n if (this.text[this.position] === \")\") {\n this.position++;\n return args;\n }\n for (;;) {\n this.skipSpace();\n const name = this.word();\n if (!FUNCTION_NAME.test(name)) this.fail(\"an argument name is missing\");\n this.skipSpace();\n if (this.text[this.position] !== \":\") {\n this.fail(`argument \"${name}\" has no colon`);\n }\n this.position++;\n Object.defineProperty(args, name, {\n value: this.expression(depth + 1),\n enumerable: true,\n configurable: true,\n writable: true,\n });\n this.skipSpace();\n const separator = this.text[this.position++];\n if (separator === \")\") return args;\n if (separator !== \",\") {\n this.fail(\n separator === undefined\n ? \"a function call is not closed\"\n : \"arguments are not separated by commas\",\n );\n }\n this.skipSpace();\n if (this.text[this.position] === \")\") {\n this.position++;\n return args;\n }\n }\n }\n\n private string(quote: string): string {\n let value = \"\";\n this.position++;\n for (;;) {\n const character = this.text[this.position++];\n if (character === undefined) this.fail(\"a string is not closed\");\n if (character === quote) return value;\n if (character !== \"\\\\\") {\n value += character;\n continue;\n }\n const escaped = this.text[this.position++];\n if (escaped === undefined) this.fail(\"a string is not closed\");\n value +=\n escaped === \"n\"\n ? \"\\n\"\n : escaped === \"t\"\n ? \"\\t\"\n : escaped === \"r\"\n ? \"\\r\"\n : escaped;\n }\n }\n\n private number(): number {\n const start = this.position;\n if (this.text[this.position] === \"-\") this.position++;\n while (isDigit(this.text[this.position])) this.position++;\n if (this.text[this.position] === \".\") {\n this.position++;\n while (isDigit(this.text[this.position])) this.position++;\n }\n const next = this.text[this.position];\n if (next !== undefined && isPathCharacter(next)) {\n this.fail(\"a number is malformed\");\n }\n return Number(this.text.slice(start, this.position));\n }\n\n private word(): string {\n const start = this.position;\n while (\n this.position < this.text.length &&\n isPathCharacter(this.text[this.position]!)\n ) {\n this.position++;\n }\n return this.text.slice(start, this.position);\n }\n\n private skipSpace() {\n while (\n this.position < this.text.length &&\n isSpace(this.text[this.position]!)\n ) {\n this.position++;\n }\n }\n\n private fail(reason: string): never {\n throw new ExpressionSyntaxError(reason);\n }\n}\n\nexport const parseExpressionTemplate = (template: string): ExpressionPart[] => {\n if (template.length > MAX_TEMPLATE_LENGTH) {\n throw new ExpressionSyntaxError(\n `it is longer than ${MAX_TEMPLATE_LENGTH} characters`,\n );\n }\n const parts: ExpressionPart[] = [];\n const push = (part: ExpressionPart) => {\n if (parts.length >= MAX_TEMPLATE_PARTS) {\n throw new ExpressionSyntaxError(\n `it has more than ${MAX_TEMPLATE_PARTS} parts`,\n );\n }\n parts.push(part);\n };\n let literal = \"\";\n let index = 0;\n while (index < template.length) {\n if (template.startsWith(\"\\\\${\", index)) {\n literal += \"${\";\n index += 3;\n } else if (template.startsWith(\"${\", index)) {\n if (literal) push(literal);\n literal = \"\";\n const reader = new ExpressionReader(template, index);\n push(reader.expression(0));\n index = reader.position;\n } else {\n literal += template[index];\n index++;\n }\n }\n if (literal) push(literal);\n return parts;\n};\n\nconst isMissing = (value: unknown) =>\n value === undefined || value === null || value === \"\";\n\nconst toNumber = (value: unknown): number | undefined => {\n const number =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\" && value.trim() !== \"\"\n ? Number(value)\n : Number.NaN;\n return Number.isFinite(number) ? number : undefined;\n};\n\nconst DATE_ONLY = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\nconst toDate = (value: unknown): Date | undefined => {\n if (typeof value === \"number\") return new Date(value);\n if (typeof value !== \"string\") return undefined;\n const dateOnly = DATE_ONLY.exec(value);\n if (!dateOnly) return new Date(value);\n const [year, month, day] = dateOnly.slice(1).map(Number) as [\n number,\n number,\n number,\n ];\n const date = new Date(0);\n date.setFullYear(year, month - 1, day);\n date.setHours(0, 0, 0, 0);\n return date.getMonth() === month - 1 && date.getDate() === day\n ? date\n : undefined;\n};\n\nconst toText = (value: unknown): string => {\n if (value === undefined || value === null) return \"\";\n if (typeof value !== \"object\") return String(value);\n try {\n return JSON.stringify(value) ?? \"\";\n } catch {\n return \"\";\n }\n};\n\nconst cached = <T>(cache: Map<string, T>, key: string, create: () => T): T => {\n let value = cache.get(key);\n if (value === undefined) {\n value = create();\n if (cache.size >= 64) cache.clear();\n cache.set(key, value);\n }\n return value;\n};\n\nconst numberFormats = new Map<string, Intl.NumberFormat>();\nconst dateFormats = new Map<string, Intl.DateTimeFormat>();\nconst pluralRules = new Map<string, Intl.PluralRules>();\n\nconst invalidArguments = (name: string, context: ValueFunctionContext) => {\n context.warn(`A2UI function \"${name}\" received invalid arguments.`);\n return undefined;\n};\n\nconst formatAmount = (\n name: string,\n args: Record<string, unknown>,\n context: ValueFunctionContext,\n currency?: string,\n): unknown => {\n if (isMissing(args[\"value\"])) return \"\";\n const value = toNumber(args[\"value\"]);\n const decimals =\n args[\"decimals\"] === undefined ? undefined : toNumber(args[\"decimals\"]);\n if (\n value === undefined ||\n (args[\"decimals\"] !== undefined &&\n (decimals === undefined ||\n !Number.isInteger(decimals) ||\n decimals < 0 ||\n decimals > 20))\n ) {\n return invalidArguments(name, context);\n }\n const options: Intl.NumberFormatOptions = {\n useGrouping: args[\"grouping\"] !== false,\n ...(currency !== undefined ? { style: \"currency\", currency } : {}),\n ...(decimals !== undefined\n ? { minimumFractionDigits: decimals, maximumFractionDigits: decimals }\n : {}),\n };\n try {\n return cached(\n numberFormats,\n JSON.stringify(options),\n () => new Intl.NumberFormat(undefined, options),\n ).format(value);\n } catch {\n return invalidArguments(name, context);\n }\n};\n\nconst dateName = (\n date: Date,\n options: Intl.DateTimeFormatOptions,\n type: Intl.DateTimeFormatPartTypes,\n): string | undefined => {\n try {\n return cached(\n dateFormats,\n JSON.stringify(options),\n () => new Intl.DateTimeFormat(undefined, options),\n )\n .formatToParts(date)\n .find((part) => part.type === type)?.value;\n } catch {\n return undefined;\n }\n};\n\nconst pad = (value: number, width: number) =>\n String(value).padStart(width, \"0\");\n\nconst dateField = (\n date: Date,\n letter: string,\n width: number,\n): string | undefined => {\n switch (letter) {\n case \"y\":\n return width === 2\n ? pad(date.getFullYear() % 100, 2)\n : pad(date.getFullYear(), width);\n case \"M\":\n return width <= 2\n ? pad(date.getMonth() + 1, width)\n : dateName(\n date,\n { month: width === 3 ? \"short\" : width === 4 ? \"long\" : \"narrow\" },\n \"month\",\n );\n case \"d\":\n return pad(date.getDate(), width);\n case \"E\":\n return dateName(\n date,\n { weekday: width <= 3 ? \"short\" : width === 4 ? \"long\" : \"narrow\" },\n \"weekday\",\n );\n case \"h\":\n return pad(date.getHours() % 12 || 12, width);\n case \"H\":\n return pad(date.getHours(), width);\n case \"m\":\n return pad(date.getMinutes(), width);\n case \"s\":\n return pad(date.getSeconds(), width);\n case \"a\":\n return (\n dateName(date, { hour: \"numeric\", hour12: true }, \"dayPeriod\") ??\n (date.getHours() < 12 ? \"AM\" : \"PM\")\n );\n default:\n return undefined;\n }\n};\n\nconst formatDatePattern = (date: Date, pattern: string): string | undefined => {\n let result = \"\";\n let index = 0;\n while (index < pattern.length) {\n const character = pattern[index]!;\n if (character === \"'\") {\n index++;\n if (pattern[index] === \"'\") {\n result += \"'\";\n index++;\n continue;\n }\n while (index < pattern.length) {\n if (pattern[index] !== \"'\") {\n result += pattern[index++];\n } else if (pattern[index + 1] === \"'\") {\n result += \"'\";\n index += 2;\n } else {\n index++;\n break;\n }\n }\n } else if (/[A-Za-z]/.test(character)) {\n let end = index + 1;\n while (pattern[end] === character) end++;\n const field = dateField(date, character, end - index);\n if (field === undefined) return undefined;\n result += field;\n index = end;\n } else {\n result += character;\n index++;\n }\n }\n return result;\n};\n\nconst pluralCategory = (value: number): string => {\n try {\n return cached(pluralRules, \"\", () => new Intl.PluralRules()).select(value);\n } catch {\n return value === 1 ? \"one\" : \"other\";\n }\n};\n\ntype ValueFunction = (\n args: Record<string, unknown>,\n context: ValueFunctionContext,\n) => unknown;\n\nconst VALUE_FUNCTIONS: Readonly<Record<string, ValueFunction>> = {\n formatString: (args, context) => {\n const template = args[\"value\"];\n if (template === undefined || template === null) return \"\";\n if (typeof template !== \"string\") {\n return invalidArguments(\"formatString\", context);\n }\n let parts = context.templates.get(template);\n if (parts === undefined) {\n try {\n parts = parseExpressionTemplate(template);\n } catch (error) {\n if (!(error instanceof ExpressionSyntaxError)) throw error;\n context.warn(\n `A2UI formatString template is malformed: ${error.message}.`,\n );\n parts = null;\n }\n context.templates.set(template, parts);\n }\n if (parts === null) return undefined;\n return parts\n .map((part) =>\n toText(\n typeof part === \"object\" && part !== null\n ? context.resolve(part)\n : part,\n ),\n )\n .join(\"\");\n },\n formatNumber: (args, context) => formatAmount(\"formatNumber\", args, context),\n formatCurrency: (args, context) =>\n typeof args[\"currency\"] === \"string\"\n ? formatAmount(\"formatCurrency\", args, context, args[\"currency\"])\n : invalidArguments(\"formatCurrency\", context),\n formatDate: (args, context) => {\n const value = args[\"value\"];\n if (isMissing(value)) return \"\";\n const format = args[\"format\"];\n const date = toDate(value);\n if (typeof format !== \"string\" || !date || Number.isNaN(date.getTime())) {\n return invalidArguments(\"formatDate\", context);\n }\n const formatted = formatDatePattern(date, format);\n if (formatted !== undefined) return formatted;\n context.warn(\n `A2UI function \"formatDate\" does not support the pattern \"${format}\", so it returned an ISO date.`,\n );\n return date.toISOString();\n },\n pluralize: (args, context) => {\n if (isMissing(args[\"value\"])) return \"\";\n const value = toNumber(args[\"value\"]);\n if (value === undefined || typeof args[\"other\"] !== \"string\") {\n return invalidArguments(\"pluralize\", context);\n }\n const selected = args[pluralCategory(value)];\n return typeof selected === \"string\" ? selected : args[\"other\"];\n },\n and: (args, context) =>\n Array.isArray(args[\"values\"])\n ? args[\"values\"].every(Boolean)\n : invalidArguments(\"and\", context),\n or: (args, context) =>\n Array.isArray(args[\"values\"])\n ? args[\"values\"].some(Boolean)\n : invalidArguments(\"or\", context),\n not: (args) => !args[\"value\"],\n};\n\nexport const evaluateA2uiValueFunction = (\n name: string,\n args: Record<string, unknown>,\n context: ValueFunctionContext,\n): unknown => {\n if (!Object.hasOwn(VALUE_FUNCTIONS, name)) {\n context.warn(`A2UI function \"${name}\" is not supported and was skipped.`);\n return undefined;\n }\n return VALUE_FUNCTIONS[name]!(args, context);\n};\n"],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- import type { Action } from "./ir.js";
2
- /** Context handed to an {@link ActionHandler} when an `$action` fires. */
3
- export type ActionDispatchContext = {
4
- /**
5
- * The action payload. For fire-and-forget actions this is the `$action` as the model emitted it. For an interactive component the user's runtime input is merged in under the reserved `$input` key: a single value for a standalone control's dispatch, or an object keyed by each field's `name` for a `Form` or a `Card` with `asForm` set. A model-supplied `value` field is never clobbered.
6
- */
7
- readonly payload: Action;
8
- };
9
- /**
10
- * Resolves a single `$action.type`. Fire-and-forget actions return `void` or a
11
- * promise that resolves to it. For a `prompt_user` tool whose call has no
12
- * result yet, a non-`undefined` return value becomes the tool result. Whether
13
- * that resumes the run depends on the runtime, including how it treats human
14
- * tools. The return value is handed back to `dispatch`'s caller as `unknown`.
15
- */
16
- export type ActionHandler = (ctx: ActionDispatchContext) => unknown | Promise<unknown>;
17
- /**
18
- * The host-provided map from `$action.type` to {@link ActionHandler}. This is the single dispatch target for rendered generative UI: every interactive component fires its `$action` here through the injected `$dispatch` (a submit Button defers to its ancestor form's dispatch instead). The payload's `$input` takes one of two shapes: a single value for a standalone control's dispatch (`Select`, `Input`, `DatePicker`, `Checkbox`, `RadioGroup`, or a `CheckboxGroup`'s array of checked values), or an object keyed by field `name` for a `Form` or a `Card` with `asForm` set. When a registry is used in a `JSONGenerativeUI` tool, each dispatched payload, including `$input`, is recorded on the tool call on a best-effort basis. Recording depends on the runtime and interaction log limits, and never delays or prevents dispatch. Construct it with {@link createActionRegistry} and pass it to `JSONGenerativeUI`.
19
- */
20
- export type ActionRegistry = {
21
- dispatch(action: Action): unknown;
22
- has(type: string): boolean;
23
- };
24
- export declare function createActionRegistry(handlers: Readonly<Record<string, ActionHandler>>): ActionRegistry;
25
- /** A no-op registry used when no handlers are provided. Dispatch resolves to
26
- * `undefined` and logs a warning in dev for unknown types, so a model-emitted
27
- * action with no handler degrades to "does nothing" rather than throwing. */
28
- export declare const emptyActionRegistry: ActionRegistry;
29
- //# sourceMappingURL=actionRegistry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"actionRegistry.d.ts","sourceRoot":"","sources":["../src/actionRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,gBAAa;AAEnC,0EAA0E;AAC1E,MAAM,MAAM,qBAAqB,GAAG;IAClC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,GAAG,EAAE,qBAAqB,KACvB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,GAChD,cAAc,CAqChB;AAED;;6EAE6E;AAC7E,eAAO,MAAM,mBAAmB,EAAE,cAAyC,CAAC"}
@@ -1,41 +0,0 @@
1
- //#region src/actionRegistry.ts
2
- function createActionRegistry(handlers) {
3
- const map = new Map(Object.entries(handlers));
4
- return {
5
- dispatch(action) {
6
- if (typeof action?.type !== "string") {
7
- if (process.env["NODE_ENV"] !== "production") console.warn(`[@assistant-ui/react-generative-ui] Skipping malformed action; \`\$action.type\` must be a string. Received ${formatReceivedType(action?.type)}. Update the emitted \`\$action\` payload.`);
8
- return;
9
- }
10
- const handler = map.get(action.type);
11
- if (!handler) {
12
- if (process.env["NODE_ENV"] !== "production") {
13
- const actionTypes = [...map.keys()];
14
- console.warn(`[@assistant-ui/react-generative-ui] Action "${action.type}" has no registered handler. ${formatRegisteredActions(actionTypes)} Register it with createActionRegistry(...) or update the emitted \`\$action.type\`.`);
15
- }
16
- return;
17
- }
18
- return handler({ payload: action });
19
- },
20
- has(type) {
21
- return map.has(type);
22
- }
23
- };
24
- }
25
- /** A no-op registry used when no handlers are provided. Dispatch resolves to
26
- * `undefined` and logs a warning in dev for unknown types, so a model-emitted
27
- * action with no handler degrades to "does nothing" rather than throwing. */
28
- const emptyActionRegistry = createActionRegistry({});
29
- function formatRegisteredActions(actionTypes) {
30
- if (actionTypes.length === 0) return "No actions are registered.";
31
- return `Registered actions: ${actionTypes.map((type) => `"${type}"`).join(", ")}.`;
32
- }
33
- function formatReceivedType(value) {
34
- if (value === null) return "null";
35
- if (Array.isArray(value)) return "array";
36
- return typeof value;
37
- }
38
- //#endregion
39
- export { createActionRegistry, emptyActionRegistry };
40
-
41
- //# sourceMappingURL=actionRegistry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"actionRegistry.js","names":[],"sources":["../src/actionRegistry.ts"],"sourcesContent":["import type { Action } from \"./ir\";\n\n/** Context handed to an {@link ActionHandler} when an `$action` fires. */\nexport type ActionDispatchContext = {\n /**\n * The action payload. For fire-and-forget actions this is the `$action` as the model emitted it. For an interactive component the user's runtime input is merged in under the reserved `$input` key: a single value for a standalone control's dispatch, or an object keyed by each field's `name` for a `Form` or a `Card` with `asForm` set. A model-supplied `value` field is never clobbered.\n */\n readonly payload: Action;\n};\n\n/**\n * Resolves a single `$action.type`. Fire-and-forget actions return `void` or a\n * promise that resolves to it. For a `prompt_user` tool whose call has no\n * result yet, a non-`undefined` return value becomes the tool result. Whether\n * that resumes the run depends on the runtime, including how it treats human\n * tools. The return value is handed back to `dispatch`'s caller as `unknown`.\n */\nexport type ActionHandler = (\n ctx: ActionDispatchContext,\n) => unknown | Promise<unknown>;\n\n/**\n * The host-provided map from `$action.type` to {@link ActionHandler}. This is the single dispatch target for rendered generative UI: every interactive component fires its `$action` here through the injected `$dispatch` (a submit Button defers to its ancestor form's dispatch instead). The payload's `$input` takes one of two shapes: a single value for a standalone control's dispatch (`Select`, `Input`, `DatePicker`, `Checkbox`, `RadioGroup`, or a `CheckboxGroup`'s array of checked values), or an object keyed by field `name` for a `Form` or a `Card` with `asForm` set. When a registry is used in a `JSONGenerativeUI` tool, each dispatched payload, including `$input`, is recorded on the tool call on a best-effort basis. Recording depends on the runtime and interaction log limits, and never delays or prevents dispatch. Construct it with {@link createActionRegistry} and pass it to `JSONGenerativeUI`.\n */\nexport type ActionRegistry = {\n dispatch(action: Action): unknown;\n has(type: string): boolean;\n};\n\nexport function createActionRegistry(\n handlers: Readonly<Record<string, ActionHandler>>,\n): ActionRegistry {\n const map = new Map(Object.entries(handlers));\n return {\n dispatch(action) {\n if (typeof action?.type !== \"string\") {\n if (process.env[\"NODE_ENV\"] !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\n \"[@assistant-ui/react-generative-ui] Skipping malformed action; \" +\n \"`$action.type` must be a string. \" +\n `Received ${formatReceivedType(action?.type)}. Update the emitted ` +\n \"`$action` payload.\",\n );\n }\n return undefined;\n }\n\n const handler = map.get(action.type);\n if (!handler) {\n if (process.env[\"NODE_ENV\"] !== \"production\") {\n const actionTypes = [...map.keys()];\n // eslint-disable-next-line no-console\n console.warn(\n `[@assistant-ui/react-generative-ui] Action \"${action.type}\" has ` +\n `no registered handler. ${formatRegisteredActions(actionTypes)} ` +\n \"Register it with createActionRegistry(...) or update the emitted \" +\n \"`$action.type`.\",\n );\n }\n return undefined;\n }\n return handler({ payload: action });\n },\n has(type) {\n return map.has(type);\n },\n };\n}\n\n/** A no-op registry used when no handlers are provided. Dispatch resolves to\n * `undefined` and logs a warning in dev for unknown types, so a model-emitted\n * action with no handler degrades to \"does nothing\" rather than throwing. */\nexport const emptyActionRegistry: ActionRegistry = createActionRegistry({});\n\nfunction formatRegisteredActions(actionTypes: string[]) {\n if (actionTypes.length === 0) return \"No actions are registered.\";\n\n return `Registered actions: ${actionTypes\n .map((type) => `\"${type}\"`)\n .join(\", \")}.`;\n}\n\nfunction formatReceivedType(value: unknown) {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return \"array\";\n return typeof value;\n}\n"],"mappings":";AA6BA,SAAgB,qBACd,UACgB;CAChB,MAAM,MAAM,IAAI,IAAI,OAAO,QAAQ,QAAQ,CAAC;CAC5C,OAAO;EACL,SAAS,QAAQ;GACf,IAAI,OAAO,QAAQ,SAAS,UAAU;IACpC,IAAI,QAAQ,IAAI,gBAAgB,cAE9B,QAAQ,KACN,+GAEc,mBAAmB,QAAQ,IAAI,EAAE,2CAEjD;IAEF;GACF;GAEA,MAAM,UAAU,IAAI,IAAI,OAAO,IAAI;GACnC,IAAI,CAAC,SAAS;IACZ,IAAI,QAAQ,IAAI,gBAAgB,cAAc;KAC5C,MAAM,cAAc,CAAC,GAAG,IAAI,KAAK,CAAC;KAElC,QAAQ,KACN,+CAA+C,OAAO,KAAK,+BAC/B,wBAAwB,WAAW,EAAE,qFAGnE;IACF;IACA;GACF;GACA,OAAO,QAAQ,EAAE,SAAS,OAAO,CAAC;EACpC;EACA,IAAI,MAAM;GACR,OAAO,IAAI,IAAI,IAAI;EACrB;CACF;AACF;;;;AAKA,MAAa,sBAAsC,qBAAqB,CAAC,CAAC;AAE1E,SAAS,wBAAwB,aAAuB;CACtD,IAAI,YAAY,WAAW,GAAG,OAAO;CAErC,OAAO,uBAAuB,YAC3B,KAAK,SAAS,IAAI,KAAK,EAAE,CAAC,CAC1B,KAAK,IAAI,EAAE;AAChB;AAEA,SAAS,mBAAmB,OAAgB;CAC1C,IAAI,UAAU,MAAM,OAAO;CAC3B,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO;CACjC,OAAO,OAAO;AAChB"}
@@ -1,16 +0,0 @@
1
- import * as React from "react";
2
- type AnsweredValues = Readonly<Record<string, unknown>>;
3
- type ToolInteractionLog = {
4
- readonly entries: readonly {
5
- readonly type: string;
6
- readonly payload: unknown;
7
- }[];
8
- };
9
- export declare const findAnsweredValues: (interactions: ToolInteractionLog | undefined) => AnsweredValues | undefined;
10
- export declare const AnsweredValuesProvider: ({ values, children, }: {
11
- values: AnsweredValues | undefined;
12
- children: React.ReactNode;
13
- }) => string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | React.JSX.Element | null | undefined;
14
- export declare const useAnsweredValue: (name: string | undefined) => unknown;
15
- export {};
16
- //# sourceMappingURL=answeredValues.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"answeredValues.d.ts","sourceRoot":"","sources":["../src/answeredValues.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,KAAK,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAExD,KAAK,kBAAkB,GAAG;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS;QACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;KAC3B,EAAE,CAAC;CACL,CAAC;AAuBF,eAAO,MAAM,kBAAkB,GAC7B,cAAc,kBAAkB,GAAG,SAAS,KAC3C,cAAc,GAAG,SAanB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,uBAGpC;IACD,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,oSAOA,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,GAAG,SAAS,KAAG,OAK3D,CAAC"}