@copilotkit/a2ui-renderer 1.51.4 → 1.51.5-next.1

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/dist/A2UIMessageRenderer.cjs +135 -0
  2. package/dist/A2UIMessageRenderer.cjs.map +1 -0
  3. package/dist/A2UIMessageRenderer.d.cts +11 -0
  4. package/dist/A2UIMessageRenderer.d.cts.map +1 -0
  5. package/dist/A2UIMessageRenderer.d.mts +11 -0
  6. package/dist/A2UIMessageRenderer.d.mts.map +1 -0
  7. package/dist/A2UIMessageRenderer.mjs +134 -0
  8. package/dist/A2UIMessageRenderer.mjs.map +1 -0
  9. package/dist/A2UIViewer.cjs +154 -0
  10. package/dist/A2UIViewer.cjs.map +1 -0
  11. package/dist/A2UIViewer.d.cts +39 -0
  12. package/dist/A2UIViewer.d.cts.map +1 -0
  13. package/dist/A2UIViewer.d.mts +39 -0
  14. package/dist/A2UIViewer.d.mts.map +1 -0
  15. package/dist/A2UIViewer.mjs +152 -0
  16. package/dist/A2UIViewer.mjs.map +1 -0
  17. package/dist/_virtual/_rolldown/runtime.cjs +29 -0
  18. package/dist/index.cjs +8 -0
  19. package/dist/index.d.cts +15 -0
  20. package/dist/index.d.cts.map +1 -0
  21. package/dist/index.d.mts +15 -0
  22. package/dist/index.d.mts.map +1 -0
  23. package/dist/index.mjs +5 -0
  24. package/dist/index.umd.js +3070 -2
  25. package/dist/index.umd.js.map +1 -1
  26. package/dist/react-renderer/components/content/AudioPlayer.cjs +34 -0
  27. package/dist/react-renderer/components/content/AudioPlayer.cjs.map +1 -0
  28. package/dist/react-renderer/components/content/AudioPlayer.mjs +33 -0
  29. package/dist/react-renderer/components/content/AudioPlayer.mjs.map +1 -0
  30. package/dist/react-renderer/components/content/Divider.cjs +31 -0
  31. package/dist/react-renderer/components/content/Divider.cjs.map +1 -0
  32. package/dist/react-renderer/components/content/Divider.mjs +30 -0
  33. package/dist/react-renderer/components/content/Divider.mjs.map +1 -0
  34. package/dist/react-renderer/components/content/Icon.cjs +50 -0
  35. package/dist/react-renderer/components/content/Icon.cjs.map +1 -0
  36. package/dist/react-renderer/components/content/Icon.mjs +49 -0
  37. package/dist/react-renderer/components/content/Icon.mjs.map +1 -0
  38. package/dist/react-renderer/components/content/Image.cjs +43 -0
  39. package/dist/react-renderer/components/content/Image.cjs.map +1 -0
  40. package/dist/react-renderer/components/content/Image.mjs +42 -0
  41. package/dist/react-renderer/components/content/Image.mjs.map +1 -0
  42. package/dist/react-renderer/components/content/Text.cjs +131 -0
  43. package/dist/react-renderer/components/content/Text.cjs.map +1 -0
  44. package/dist/react-renderer/components/content/Text.mjs +129 -0
  45. package/dist/react-renderer/components/content/Text.mjs.map +1 -0
  46. package/dist/react-renderer/components/content/Video.cjs +56 -0
  47. package/dist/react-renderer/components/content/Video.cjs.map +1 -0
  48. package/dist/react-renderer/components/content/Video.mjs +55 -0
  49. package/dist/react-renderer/components/content/Video.mjs.map +1 -0
  50. package/dist/react-renderer/components/interactive/Button.cjs +39 -0
  51. package/dist/react-renderer/components/interactive/Button.cjs.map +1 -0
  52. package/dist/react-renderer/components/interactive/Button.mjs +38 -0
  53. package/dist/react-renderer/components/interactive/Button.mjs.map +1 -0
  54. package/dist/react-renderer/components/interactive/CheckBox.cjs +58 -0
  55. package/dist/react-renderer/components/interactive/CheckBox.cjs.map +1 -0
  56. package/dist/react-renderer/components/interactive/CheckBox.mjs +57 -0
  57. package/dist/react-renderer/components/interactive/CheckBox.mjs.map +1 -0
  58. package/dist/react-renderer/components/interactive/DateTimeInput.cjs +65 -0
  59. package/dist/react-renderer/components/interactive/DateTimeInput.cjs.map +1 -0
  60. package/dist/react-renderer/components/interactive/DateTimeInput.mjs +64 -0
  61. package/dist/react-renderer/components/interactive/DateTimeInput.mjs.map +1 -0
  62. package/dist/react-renderer/components/interactive/MultipleChoice.cjs +54 -0
  63. package/dist/react-renderer/components/interactive/MultipleChoice.cjs.map +1 -0
  64. package/dist/react-renderer/components/interactive/MultipleChoice.mjs +53 -0
  65. package/dist/react-renderer/components/interactive/MultipleChoice.mjs.map +1 -0
  66. package/dist/react-renderer/components/interactive/Slider.cjs +72 -0
  67. package/dist/react-renderer/components/interactive/Slider.cjs.map +1 -0
  68. package/dist/react-renderer/components/interactive/Slider.mjs +71 -0
  69. package/dist/react-renderer/components/interactive/Slider.mjs.map +1 -0
  70. package/dist/react-renderer/components/interactive/TextField.cjs +74 -0
  71. package/dist/react-renderer/components/interactive/TextField.cjs.map +1 -0
  72. package/dist/react-renderer/components/interactive/TextField.mjs +73 -0
  73. package/dist/react-renderer/components/interactive/TextField.mjs.map +1 -0
  74. package/dist/react-renderer/components/layout/Card.cjs +46 -0
  75. package/dist/react-renderer/components/layout/Card.cjs.map +1 -0
  76. package/dist/react-renderer/components/layout/Card.mjs +45 -0
  77. package/dist/react-renderer/components/layout/Card.mjs.map +1 -0
  78. package/dist/react-renderer/components/layout/Column.cjs +43 -0
  79. package/dist/react-renderer/components/layout/Column.cjs.map +1 -0
  80. package/dist/react-renderer/components/layout/Column.mjs +42 -0
  81. package/dist/react-renderer/components/layout/Column.mjs.map +1 -0
  82. package/dist/react-renderer/components/layout/List.cjs +41 -0
  83. package/dist/react-renderer/components/layout/List.cjs.map +1 -0
  84. package/dist/react-renderer/components/layout/List.mjs +40 -0
  85. package/dist/react-renderer/components/layout/List.mjs.map +1 -0
  86. package/dist/react-renderer/components/layout/Modal.cjs +92 -0
  87. package/dist/react-renderer/components/layout/Modal.cjs.map +1 -0
  88. package/dist/react-renderer/components/layout/Modal.mjs +91 -0
  89. package/dist/react-renderer/components/layout/Modal.mjs.map +1 -0
  90. package/dist/react-renderer/components/layout/Row.cjs +43 -0
  91. package/dist/react-renderer/components/layout/Row.cjs.map +1 -0
  92. package/dist/react-renderer/components/layout/Row.mjs +42 -0
  93. package/dist/react-renderer/components/layout/Row.mjs.map +1 -0
  94. package/dist/react-renderer/components/layout/Tabs.cjs +47 -0
  95. package/dist/react-renderer/components/layout/Tabs.cjs.map +1 -0
  96. package/dist/react-renderer/components/layout/Tabs.mjs +46 -0
  97. package/dist/react-renderer/components/layout/Tabs.mjs.map +1 -0
  98. package/dist/react-renderer/core/A2UIProvider.cjs +123 -0
  99. package/dist/react-renderer/core/A2UIProvider.cjs.map +1 -0
  100. package/dist/react-renderer/core/A2UIProvider.mjs +120 -0
  101. package/dist/react-renderer/core/A2UIProvider.mjs.map +1 -0
  102. package/dist/react-renderer/core/A2UIRenderer.cjs +93 -0
  103. package/dist/react-renderer/core/A2UIRenderer.cjs.map +1 -0
  104. package/dist/react-renderer/core/A2UIRenderer.mjs +92 -0
  105. package/dist/react-renderer/core/A2UIRenderer.mjs.map +1 -0
  106. package/dist/react-renderer/core/ComponentNode.cjs +53 -0
  107. package/dist/react-renderer/core/ComponentNode.cjs.map +1 -0
  108. package/dist/react-renderer/core/ComponentNode.mjs +52 -0
  109. package/dist/react-renderer/core/ComponentNode.mjs.map +1 -0
  110. package/dist/react-renderer/hooks/useA2UI.cjs +46 -0
  111. package/dist/react-renderer/hooks/useA2UI.cjs.map +1 -0
  112. package/dist/react-renderer/hooks/useA2UI.mjs +46 -0
  113. package/dist/react-renderer/hooks/useA2UI.mjs.map +1 -0
  114. package/dist/react-renderer/hooks/useA2UIComponent.cjs +173 -0
  115. package/dist/react-renderer/hooks/useA2UIComponent.cjs.map +1 -0
  116. package/dist/react-renderer/hooks/useA2UIComponent.mjs +172 -0
  117. package/dist/react-renderer/hooks/useA2UIComponent.mjs.map +1 -0
  118. package/dist/react-renderer/lib/utils.cjs +39 -0
  119. package/dist/react-renderer/lib/utils.cjs.map +1 -0
  120. package/dist/react-renderer/lib/utils.mjs +37 -0
  121. package/dist/react-renderer/lib/utils.mjs.map +1 -0
  122. package/dist/react-renderer/registry/ComponentRegistry.cjs +114 -0
  123. package/dist/react-renderer/registry/ComponentRegistry.cjs.map +1 -0
  124. package/dist/react-renderer/registry/ComponentRegistry.mjs +113 -0
  125. package/dist/react-renderer/registry/ComponentRegistry.mjs.map +1 -0
  126. package/dist/react-renderer/registry/defaultCatalog.cjs +57 -0
  127. package/dist/react-renderer/registry/defaultCatalog.cjs.map +1 -0
  128. package/dist/react-renderer/registry/defaultCatalog.mjs +57 -0
  129. package/dist/react-renderer/registry/defaultCatalog.mjs.map +1 -0
  130. package/dist/react-renderer/styles/index.cjs +458 -0
  131. package/dist/react-renderer/styles/index.cjs.map +1 -0
  132. package/dist/react-renderer/styles/{index.js → index.mjs} +47 -64
  133. package/dist/react-renderer/styles/index.mjs.map +1 -0
  134. package/dist/react-renderer/styles/reset.cjs +29 -0
  135. package/dist/react-renderer/styles/reset.cjs.map +1 -0
  136. package/dist/react-renderer/styles/reset.mjs +28 -0
  137. package/dist/react-renderer/styles/reset.mjs.map +1 -0
  138. package/dist/react-renderer/theme/ThemeContext.cjs +35 -0
  139. package/dist/react-renderer/theme/ThemeContext.cjs.map +1 -0
  140. package/dist/react-renderer/theme/ThemeContext.mjs +33 -0
  141. package/dist/react-renderer/theme/ThemeContext.mjs.map +1 -0
  142. package/dist/react-renderer/theme/litTheme.cjs +368 -0
  143. package/dist/react-renderer/theme/litTheme.cjs.map +1 -0
  144. package/dist/react-renderer/theme/litTheme.mjs +367 -0
  145. package/dist/react-renderer/theme/litTheme.mjs.map +1 -0
  146. package/dist/react-renderer/theme/utils.cjs +41 -0
  147. package/dist/react-renderer/theme/utils.cjs.map +1 -0
  148. package/dist/react-renderer/theme/utils.mjs +39 -0
  149. package/dist/react-renderer/theme/utils.mjs.map +1 -0
  150. package/dist/theme/viewer-theme.cjs +366 -0
  151. package/dist/theme/viewer-theme.cjs.map +1 -0
  152. package/dist/theme/viewer-theme.d.cts +7 -0
  153. package/dist/theme/viewer-theme.d.cts.map +1 -0
  154. package/dist/theme/viewer-theme.d.mts +7 -0
  155. package/dist/theme/viewer-theme.d.mts.map +1 -0
  156. package/dist/theme/viewer-theme.mjs +365 -0
  157. package/dist/theme/viewer-theme.mjs.map +1 -0
  158. package/package.json +14 -9
  159. package/dist/.tsbuildinfo +0 -1
  160. package/dist/A2UIMessageRenderer.d.ts +0 -7
  161. package/dist/A2UIMessageRenderer.d.ts.map +0 -1
  162. package/dist/A2UIMessageRenderer.js +0 -126
  163. package/dist/A2UIMessageRenderer.js.map +0 -1
  164. package/dist/A2UIViewer.d.ts +0 -32
  165. package/dist/A2UIViewer.d.ts.map +0 -1
  166. package/dist/A2UIViewer.js +0 -121
  167. package/dist/A2UIViewer.js.map +0 -1
  168. package/dist/__tests__/A2UIMessageRenderer.test.d.ts +0 -2
  169. package/dist/__tests__/A2UIMessageRenderer.test.d.ts.map +0 -1
  170. package/dist/__tests__/A2UIMessageRenderer.test.js +0 -229
  171. package/dist/__tests__/A2UIMessageRenderer.test.js.map +0 -1
  172. package/dist/__tests__/clsx-shim.d.ts +0 -8
  173. package/dist/__tests__/clsx-shim.d.ts.map +0 -1
  174. package/dist/__tests__/clsx-shim.js +0 -24
  175. package/dist/__tests__/clsx-shim.js.map +0 -1
  176. package/dist/__tests__/setup.d.ts +0 -2
  177. package/dist/__tests__/setup.d.ts.map +0 -1
  178. package/dist/__tests__/setup.js +0 -29
  179. package/dist/__tests__/setup.js.map +0 -1
  180. package/dist/index.d.ts +0 -13
  181. package/dist/index.d.ts.map +0 -1
  182. package/dist/index.js +0 -19
  183. package/dist/index.js.map +0 -1
  184. package/dist/react-renderer/components/content/AudioPlayer.d.ts +0 -8
  185. package/dist/react-renderer/components/content/AudioPlayer.d.ts.map +0 -1
  186. package/dist/react-renderer/components/content/AudioPlayer.js +0 -23
  187. package/dist/react-renderer/components/content/AudioPlayer.js.map +0 -1
  188. package/dist/react-renderer/components/content/Divider.d.ts +0 -13
  189. package/dist/react-renderer/components/content/Divider.d.ts.map +0 -1
  190. package/dist/react-renderer/components/content/Divider.js +0 -22
  191. package/dist/react-renderer/components/content/Divider.js.map +0 -1
  192. package/dist/react-renderer/components/content/Icon.d.ts +0 -16
  193. package/dist/react-renderer/components/content/Icon.d.ts.map +0 -1
  194. package/dist/react-renderer/components/content/Icon.js +0 -40
  195. package/dist/react-renderer/components/content/Icon.js.map +0 -1
  196. package/dist/react-renderer/components/content/Image.d.ts +0 -11
  197. package/dist/react-renderer/components/content/Image.d.ts.map +0 -1
  198. package/dist/react-renderer/components/content/Image.js +0 -34
  199. package/dist/react-renderer/components/content/Image.js.map +0 -1
  200. package/dist/react-renderer/components/content/Text.d.ts +0 -28
  201. package/dist/react-renderer/components/content/Text.d.ts.map +0 -1
  202. package/dist/react-renderer/components/content/Text.js +0 -134
  203. package/dist/react-renderer/components/content/Text.js.map +0 -1
  204. package/dist/react-renderer/components/content/Video.d.ts +0 -10
  205. package/dist/react-renderer/components/content/Video.d.ts.map +0 -1
  206. package/dist/react-renderer/components/content/Video.js +0 -41
  207. package/dist/react-renderer/components/content/Video.js.map +0 -1
  208. package/dist/react-renderer/components/content/index.d.ts +0 -7
  209. package/dist/react-renderer/components/content/index.d.ts.map +0 -1
  210. package/dist/react-renderer/components/content/index.js +0 -7
  211. package/dist/react-renderer/components/content/index.js.map +0 -1
  212. package/dist/react-renderer/components/interactive/Button.d.ts +0 -11
  213. package/dist/react-renderer/components/interactive/Button.d.ts.map +0 -1
  214. package/dist/react-renderer/components/interactive/Button.js +0 -27
  215. package/dist/react-renderer/components/interactive/Button.js.map +0 -1
  216. package/dist/react-renderer/components/interactive/CheckBox.d.ts +0 -10
  217. package/dist/react-renderer/components/interactive/CheckBox.d.ts.map +0 -1
  218. package/dist/react-renderer/components/interactive/CheckBox.js +0 -55
  219. package/dist/react-renderer/components/interactive/CheckBox.js.map +0 -1
  220. package/dist/react-renderer/components/interactive/DateTimeInput.d.ts +0 -10
  221. package/dist/react-renderer/components/interactive/DateTimeInput.d.ts.map +0 -1
  222. package/dist/react-renderer/components/interactive/DateTimeInput.js +0 -68
  223. package/dist/react-renderer/components/interactive/DateTimeInput.js.map +0 -1
  224. package/dist/react-renderer/components/interactive/MultipleChoice.d.ts +0 -11
  225. package/dist/react-renderer/components/interactive/MultipleChoice.d.ts.map +0 -1
  226. package/dist/react-renderer/components/interactive/MultipleChoice.js +0 -43
  227. package/dist/react-renderer/components/interactive/MultipleChoice.js.map +0 -1
  228. package/dist/react-renderer/components/interactive/Slider.d.ts +0 -10
  229. package/dist/react-renderer/components/interactive/Slider.d.ts.map +0 -1
  230. package/dist/react-renderer/components/interactive/Slider.js +0 -62
  231. package/dist/react-renderer/components/interactive/Slider.js.map +0 -1
  232. package/dist/react-renderer/components/interactive/TextField.d.ts +0 -10
  233. package/dist/react-renderer/components/interactive/TextField.d.ts.map +0 -1
  234. package/dist/react-renderer/components/interactive/TextField.js +0 -59
  235. package/dist/react-renderer/components/interactive/TextField.js.map +0 -1
  236. package/dist/react-renderer/components/interactive/index.d.ts +0 -7
  237. package/dist/react-renderer/components/interactive/index.d.ts.map +0 -1
  238. package/dist/react-renderer/components/interactive/index.js +0 -7
  239. package/dist/react-renderer/components/interactive/index.js.map +0 -1
  240. package/dist/react-renderer/components/layout/Card.d.ts +0 -17
  241. package/dist/react-renderer/components/layout/Card.d.ts.map +0 -1
  242. package/dist/react-renderer/components/layout/Card.js +0 -39
  243. package/dist/react-renderer/components/layout/Card.js.map +0 -1
  244. package/dist/react-renderer/components/layout/Column.d.ts +0 -10
  245. package/dist/react-renderer/components/layout/Column.d.ts.map +0 -1
  246. package/dist/react-renderer/components/layout/Column.js +0 -33
  247. package/dist/react-renderer/components/layout/Column.js.map +0 -1
  248. package/dist/react-renderer/components/layout/List.d.ts +0 -10
  249. package/dist/react-renderer/components/layout/List.d.ts.map +0 -1
  250. package/dist/react-renderer/components/layout/List.js +0 -32
  251. package/dist/react-renderer/components/layout/List.js.map +0 -1
  252. package/dist/react-renderer/components/layout/Modal.d.ts +0 -15
  253. package/dist/react-renderer/components/layout/Modal.d.ts.map +0 -1
  254. package/dist/react-renderer/components/layout/Modal.js +0 -65
  255. package/dist/react-renderer/components/layout/Modal.js.map +0 -1
  256. package/dist/react-renderer/components/layout/Row.d.ts +0 -10
  257. package/dist/react-renderer/components/layout/Row.d.ts.map +0 -1
  258. package/dist/react-renderer/components/layout/Row.js +0 -33
  259. package/dist/react-renderer/components/layout/Row.js.map +0 -1
  260. package/dist/react-renderer/components/layout/Tabs.d.ts +0 -8
  261. package/dist/react-renderer/components/layout/Tabs.d.ts.map +0 -1
  262. package/dist/react-renderer/components/layout/Tabs.js +0 -29
  263. package/dist/react-renderer/components/layout/Tabs.js.map +0 -1
  264. package/dist/react-renderer/components/layout/index.d.ts +0 -7
  265. package/dist/react-renderer/components/layout/index.d.ts.map +0 -1
  266. package/dist/react-renderer/components/layout/index.js +0 -7
  267. package/dist/react-renderer/components/layout/index.js.map +0 -1
  268. package/dist/react-renderer/core/A2UIProvider.d.ts +0 -82
  269. package/dist/react-renderer/core/A2UIProvider.d.ts.map +0 -1
  270. package/dist/react-renderer/core/A2UIProvider.js +0 -156
  271. package/dist/react-renderer/core/A2UIProvider.js.map +0 -1
  272. package/dist/react-renderer/core/A2UIRenderer.d.ts +0 -36
  273. package/dist/react-renderer/core/A2UIRenderer.d.ts.map +0 -1
  274. package/dist/react-renderer/core/A2UIRenderer.js +0 -83
  275. package/dist/react-renderer/core/A2UIRenderer.js.map +0 -1
  276. package/dist/react-renderer/core/A2UIViewer.d.ts +0 -56
  277. package/dist/react-renderer/core/A2UIViewer.d.ts.map +0 -1
  278. package/dist/react-renderer/core/A2UIViewer.js +0 -135
  279. package/dist/react-renderer/core/A2UIViewer.js.map +0 -1
  280. package/dist/react-renderer/core/ComponentNode.d.ts +0 -25
  281. package/dist/react-renderer/core/ComponentNode.d.ts.map +0 -1
  282. package/dist/react-renderer/core/ComponentNode.js +0 -43
  283. package/dist/react-renderer/core/ComponentNode.js.map +0 -1
  284. package/dist/react-renderer/core/store.d.ts +0 -37
  285. package/dist/react-renderer/core/store.d.ts.map +0 -1
  286. package/dist/react-renderer/core/store.js +0 -2
  287. package/dist/react-renderer/core/store.js.map +0 -1
  288. package/dist/react-renderer/hooks/useA2UI.d.ts +0 -46
  289. package/dist/react-renderer/hooks/useA2UI.d.ts.map +0 -1
  290. package/dist/react-renderer/hooks/useA2UI.js +0 -41
  291. package/dist/react-renderer/hooks/useA2UI.js.map +0 -1
  292. package/dist/react-renderer/hooks/useA2UIComponent.d.ts +0 -52
  293. package/dist/react-renderer/hooks/useA2UIComponent.d.ts.map +0 -1
  294. package/dist/react-renderer/hooks/useA2UIComponent.js +0 -175
  295. package/dist/react-renderer/hooks/useA2UIComponent.js.map +0 -1
  296. package/dist/react-renderer/index.d.ts +0 -37
  297. package/dist/react-renderer/index.d.ts.map +0 -1
  298. package/dist/react-renderer/index.js +0 -40
  299. package/dist/react-renderer/index.js.map +0 -1
  300. package/dist/react-renderer/lib/utils.d.ts +0 -32
  301. package/dist/react-renderer/lib/utils.d.ts.map +0 -1
  302. package/dist/react-renderer/lib/utils.js +0 -41
  303. package/dist/react-renderer/lib/utils.js.map +0 -1
  304. package/dist/react-renderer/registry/ComponentRegistry.d.ts +0 -78
  305. package/dist/react-renderer/registry/ComponentRegistry.d.ts.map +0 -1
  306. package/dist/react-renderer/registry/ComponentRegistry.js +0 -113
  307. package/dist/react-renderer/registry/ComponentRegistry.js.map +0 -1
  308. package/dist/react-renderer/registry/defaultCatalog.d.ts +0 -13
  309. package/dist/react-renderer/registry/defaultCatalog.d.ts.map +0 -1
  310. package/dist/react-renderer/registry/defaultCatalog.js +0 -59
  311. package/dist/react-renderer/registry/defaultCatalog.js.map +0 -1
  312. package/dist/react-renderer/styles/index.d.ts +0 -41
  313. package/dist/react-renderer/styles/index.d.ts.map +0 -1
  314. package/dist/react-renderer/styles/index.js.map +0 -1
  315. package/dist/react-renderer/styles/reset.d.ts +0 -18
  316. package/dist/react-renderer/styles/reset.d.ts.map +0 -1
  317. package/dist/react-renderer/styles/reset.js +0 -24
  318. package/dist/react-renderer/styles/reset.js.map +0 -1
  319. package/dist/react-renderer/theme/ThemeContext.d.ts +0 -29
  320. package/dist/react-renderer/theme/ThemeContext.d.ts.map +0 -1
  321. package/dist/react-renderer/theme/ThemeContext.js +0 -35
  322. package/dist/react-renderer/theme/ThemeContext.js.map +0 -1
  323. package/dist/react-renderer/theme/litTheme.d.ts +0 -8
  324. package/dist/react-renderer/theme/litTheme.d.ts.map +0 -1
  325. package/dist/react-renderer/theme/litTheme.js +0 -401
  326. package/dist/react-renderer/theme/litTheme.js.map +0 -1
  327. package/dist/react-renderer/theme/utils.d.ts +0 -23
  328. package/dist/react-renderer/theme/utils.d.ts.map +0 -1
  329. package/dist/react-renderer/theme/utils.js +0 -46
  330. package/dist/react-renderer/theme/utils.js.map +0 -1
  331. package/dist/react-renderer/types.d.ts +0 -53
  332. package/dist/react-renderer/types.d.ts.map +0 -1
  333. package/dist/react-renderer/types.js +0 -2
  334. package/dist/react-renderer/types.js.map +0 -1
  335. package/dist/theme/viewer-theme.d.ts +0 -3
  336. package/dist/theme/viewer-theme.d.ts.map +0 -1
  337. package/dist/theme/viewer-theme.js +0 -391
  338. package/dist/theme/viewer-theme.js.map +0 -1
@@ -0,0 +1,64 @@
1
+ import { classMapToString, stylesToObject } from "../../theme/utils.mjs";
2
+ import "../../lib/utils.mjs";
3
+ import { useA2UIComponent } from "../../hooks/useA2UIComponent.mjs";
4
+ import { memo, useCallback, useEffect, useId, useState } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+
7
+ //#region src/react-renderer/components/interactive/DateTimeInput.tsx
8
+ /**
9
+ * DateTimeInput component - a date and/or time picker.
10
+ *
11
+ * Supports enabling date, time, or both. Uses native HTML5 date/time inputs.
12
+ */
13
+ const DateTimeInput = memo(function DateTimeInput({ node, surfaceId }) {
14
+ const { theme, resolveString, setValue, getValue } = useA2UIComponent(node, surfaceId);
15
+ const props = node.properties;
16
+ const id = useId();
17
+ const valuePath = props.value?.path;
18
+ const initialValue = resolveString(props.value) ?? "";
19
+ const enableDate = props.enableDate ?? true;
20
+ const enableTime = props.enableTime ?? false;
21
+ const [value, setLocalValue] = useState(initialValue);
22
+ useEffect(() => {
23
+ if (valuePath) {
24
+ const externalValue = getValue(valuePath);
25
+ if (externalValue !== null && String(externalValue) !== value) setLocalValue(String(externalValue));
26
+ }
27
+ }, [valuePath, getValue]);
28
+ const handleChange = useCallback((e) => {
29
+ const newValue = e.target.value;
30
+ setLocalValue(newValue);
31
+ if (valuePath) setValue(valuePath, newValue);
32
+ }, [valuePath, setValue]);
33
+ let inputType = "date";
34
+ if (enableDate && enableTime) inputType = "datetime-local";
35
+ else if (enableTime && !enableDate) inputType = "time";
36
+ const getPlaceholderText = () => {
37
+ if (enableDate && enableTime) return "Date & Time";
38
+ else if (enableTime) return "Time";
39
+ return "Date";
40
+ };
41
+ return /* @__PURE__ */ jsx("div", {
42
+ className: "a2ui-datetime-input",
43
+ style: node.weight !== void 0 ? { "--weight": node.weight } : {},
44
+ children: /* @__PURE__ */ jsxs("section", {
45
+ className: classMapToString(theme.components.DateTimeInput.container),
46
+ children: [/* @__PURE__ */ jsx("label", {
47
+ htmlFor: id,
48
+ className: classMapToString(theme.components.DateTimeInput.label),
49
+ children: getPlaceholderText()
50
+ }), /* @__PURE__ */ jsx("input", {
51
+ type: inputType,
52
+ id,
53
+ value,
54
+ onChange: handleChange,
55
+ className: classMapToString(theme.components.DateTimeInput.element),
56
+ style: stylesToObject(theme.additionalStyles?.DateTimeInput)
57
+ })]
58
+ })
59
+ });
60
+ });
61
+
62
+ //#endregion
63
+ export { DateTimeInput as default };
64
+ //# sourceMappingURL=DateTimeInput.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateTimeInput.mjs","names":[],"sources":["../../../../src/react-renderer/components/interactive/DateTimeInput.tsx"],"sourcesContent":["import { useState, useCallback, useEffect, useId, memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport { classMapToString, stylesToObject } from \"../../lib/utils\";\n\n/**\n * DateTimeInput component - a date and/or time picker.\n *\n * Supports enabling date, time, or both. Uses native HTML5 date/time inputs.\n */\nexport const DateTimeInput = memo(function DateTimeInput({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.DateTimeInputNode>) {\n const { theme, resolveString, setValue, getValue } = useA2UIComponent(\n node,\n surfaceId,\n );\n const props = node.properties;\n const id = useId();\n\n const valuePath = props.value?.path;\n const initialValue = resolveString(props.value) ?? \"\";\n const enableDate = props.enableDate ?? true;\n const enableTime = props.enableTime ?? false;\n\n const [value, setLocalValue] = useState(initialValue);\n\n // Sync with external data model changes\n useEffect(() => {\n if (valuePath) {\n const externalValue = getValue(valuePath);\n if (externalValue !== null && String(externalValue) !== value) {\n setLocalValue(String(externalValue));\n }\n }\n }, [valuePath, getValue]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setLocalValue(newValue);\n\n // Two-way binding: update data model\n if (valuePath) {\n setValue(valuePath, newValue);\n }\n },\n [valuePath, setValue],\n );\n\n // Determine input type based on enableDate and enableTime\n let inputType: \"date\" | \"time\" | \"datetime-local\" = \"date\";\n if (enableDate && enableTime) {\n inputType = \"datetime-local\";\n } else if (enableTime && !enableDate) {\n inputType = \"time\";\n }\n\n // Get placeholder text to match Lit renderer\n const getPlaceholderText = () => {\n if (enableDate && enableTime) {\n return \"Date & Time\";\n } else if (enableTime) {\n return \"Time\";\n }\n return \"Date\";\n };\n\n // Structure mirrors Lit's DateTimeInput component:\n // <div class=\"a2ui-datetime-input\"> ← :host equivalent\n // <section class=\"...\"> ← container theme classes\n // <label> ← label\n // <input> ← input element\n // </section>\n // </div>\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-datetime-input\" style={hostStyle}>\n <section\n className={classMapToString(theme.components.DateTimeInput.container)}\n >\n <label\n htmlFor={id}\n className={classMapToString(theme.components.DateTimeInput.label)}\n >\n {getPlaceholderText()}\n </label>\n <input\n type={inputType}\n id={id}\n value={value}\n onChange={handleChange}\n className={classMapToString(theme.components.DateTimeInput.element)}\n style={stylesToObject(theme.additionalStyles?.DateTimeInput)}\n />\n </section>\n </div>\n );\n});\n\nexport default DateTimeInput;\n"],"mappings":";;;;;;;;;;;;AAWA,MAAa,gBAAgB,KAAK,SAAS,cAAc,EACvD,MACA,aAC8C;CAC9C,MAAM,EAAE,OAAO,eAAe,UAAU,aAAa,iBACnD,MACA,UACD;CACD,MAAM,QAAQ,KAAK;CACnB,MAAM,KAAK,OAAO;CAElB,MAAM,YAAY,MAAM,OAAO;CAC/B,MAAM,eAAe,cAAc,MAAM,MAAM,IAAI;CACnD,MAAM,aAAa,MAAM,cAAc;CACvC,MAAM,aAAa,MAAM,cAAc;CAEvC,MAAM,CAAC,OAAO,iBAAiB,SAAS,aAAa;AAGrD,iBAAgB;AACd,MAAI,WAAW;GACb,MAAM,gBAAgB,SAAS,UAAU;AACzC,OAAI,kBAAkB,QAAQ,OAAO,cAAc,KAAK,MACtD,eAAc,OAAO,cAAc,CAAC;;IAGvC,CAAC,WAAW,SAAS,CAAC;CAEzB,MAAM,eAAe,aAClB,MAA2C;EAC1C,MAAM,WAAW,EAAE,OAAO;AAC1B,gBAAc,SAAS;AAGvB,MAAI,UACF,UAAS,WAAW,SAAS;IAGjC,CAAC,WAAW,SAAS,CACtB;CAGD,IAAI,YAAgD;AACpD,KAAI,cAAc,WAChB,aAAY;UACH,cAAc,CAAC,WACxB,aAAY;CAId,MAAM,2BAA2B;AAC/B,MAAI,cAAc,WAChB,QAAO;WACE,WACT,QAAO;AAET,SAAO;;AAiBT,QACE,oBAAC;EAAI,WAAU;EAAsB,OALrC,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,qBAAC;GACC,WAAW,iBAAiB,MAAM,WAAW,cAAc,UAAU;cAErE,oBAAC;IACC,SAAS;IACT,WAAW,iBAAiB,MAAM,WAAW,cAAc,MAAM;cAEhE,oBAAoB;KACf,EACR,oBAAC;IACC,MAAM;IACF;IACG;IACP,UAAU;IACV,WAAW,iBAAiB,MAAM,WAAW,cAAc,QAAQ;IACnE,OAAO,eAAe,MAAM,kBAAkB,cAAc;KAC5D;IACM;GACN;EAER"}
@@ -0,0 +1,54 @@
1
+ const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
2
+ const require_utils = require('../../theme/utils.cjs');
3
+ require('../../lib/utils.cjs');
4
+ const require_useA2UIComponent = require('../../hooks/useA2UIComponent.cjs');
5
+ let react = require("react");
6
+ let react_jsx_runtime = require("react/jsx-runtime");
7
+
8
+ //#region src/react-renderer/components/interactive/MultipleChoice.tsx
9
+ /**
10
+ * MultipleChoice component - a selection component using a dropdown.
11
+ *
12
+ * Renders a <select> element with options, matching the Lit renderer's behavior.
13
+ * Supports two-way data binding for the selected value.
14
+ */
15
+ const MultipleChoice = (0, react.memo)(function MultipleChoice({ node, surfaceId }) {
16
+ const { theme, resolveString, setValue } = require_useA2UIComponent.useA2UIComponent(node, surfaceId);
17
+ const props = node.properties;
18
+ const id = (0, react.useId)();
19
+ const options = props.options ?? [];
20
+ const selectionsPath = props.selections?.path;
21
+ const description = resolveString(props.description) ?? "Select an item";
22
+ const handleChange = (0, react.useCallback)((e) => {
23
+ if (selectionsPath) setValue(selectionsPath, [e.target.value]);
24
+ }, [selectionsPath, setValue]);
25
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
26
+ className: "a2ui-multiplechoice",
27
+ style: node.weight !== void 0 ? { "--weight": node.weight } : {},
28
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
29
+ className: require_utils.classMapToString(theme.components.MultipleChoice.container),
30
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
31
+ htmlFor: id,
32
+ className: require_utils.classMapToString(theme.components.MultipleChoice.label),
33
+ children: description
34
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
35
+ name: "data",
36
+ id,
37
+ className: require_utils.classMapToString(theme.components.MultipleChoice.element),
38
+ style: require_utils.stylesToObject(theme.additionalStyles?.MultipleChoice),
39
+ onChange: handleChange,
40
+ children: options.map((option) => {
41
+ const label = resolveString(option.label);
42
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
43
+ value: option.value,
44
+ children: label
45
+ }, option.value);
46
+ })
47
+ })]
48
+ })
49
+ });
50
+ });
51
+
52
+ //#endregion
53
+ exports.default = MultipleChoice;
54
+ //# sourceMappingURL=MultipleChoice.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultipleChoice.cjs","names":["useA2UIComponent","classMapToString","stylesToObject"],"sources":["../../../../src/react-renderer/components/interactive/MultipleChoice.tsx"],"sourcesContent":["import { useCallback, useId, memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport { classMapToString, stylesToObject } from \"../../lib/utils\";\n\n/**\n * MultipleChoice component - a selection component using a dropdown.\n *\n * Renders a <select> element with options, matching the Lit renderer's behavior.\n * Supports two-way data binding for the selected value.\n */\nexport const MultipleChoice = memo(function MultipleChoice({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.MultipleChoiceNode>) {\n const { theme, resolveString, setValue } = useA2UIComponent(node, surfaceId);\n const props = node.properties;\n const id = useId();\n\n const options =\n (props.options as {\n label: { literalString?: string; path?: string };\n value: string;\n }[]) ?? [];\n const selectionsPath = props.selections?.path;\n\n // Access description from props (Lit component supports it)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const description =\n resolveString((props as any).description) ?? \"Select an item\";\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => {\n // Two-way binding: update data model with array (matches Lit behavior)\n if (selectionsPath) {\n setValue(selectionsPath, [e.target.value]);\n }\n },\n [selectionsPath, setValue],\n );\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n // Structure mirrors Lit's MultipleChoice component:\n // <div class=\"a2ui-multiplechoice\"> ← :host equivalent\n // <section class=\"...\"> ← container theme classes\n // <label>...</label> ← description label\n // <select>...</select> ← dropdown element\n // </section>\n // </div>\n return (\n <div className=\"a2ui-multiplechoice\" style={hostStyle}>\n <section\n className={classMapToString(theme.components.MultipleChoice.container)}\n >\n <label\n htmlFor={id}\n className={classMapToString(theme.components.MultipleChoice.label)}\n >\n {description}\n </label>\n <select\n name=\"data\"\n id={id}\n className={classMapToString(theme.components.MultipleChoice.element)}\n style={stylesToObject(theme.additionalStyles?.MultipleChoice)}\n onChange={handleChange}\n >\n {options.map((option) => {\n const label = resolveString(option.label);\n return (\n <option key={option.value} value={option.value}>\n {label}\n </option>\n );\n })}\n </select>\n </section>\n </div>\n );\n});\n\nexport default MultipleChoice;\n"],"mappings":";;;;;;;;;;;;;;AAYA,MAAa,iCAAsB,SAAS,eAAe,EACzD,MACA,aAC+C;CAC/C,MAAM,EAAE,OAAO,eAAe,aAAaA,0CAAiB,MAAM,UAAU;CAC5E,MAAM,QAAQ,KAAK;CACnB,MAAM,uBAAY;CAElB,MAAM,UACH,MAAM,WAGC,EAAE;CACZ,MAAM,iBAAiB,MAAM,YAAY;CAIzC,MAAM,cACJ,cAAe,MAAc,YAAY,IAAI;CAE/C,MAAM,uCACH,MAA4C;AAE3C,MAAI,eACF,UAAS,gBAAgB,CAAC,EAAE,OAAO,MAAM,CAAC;IAG9C,CAAC,gBAAgB,SAAS,CAC3B;AAeD,QACE,2CAAC;EAAI,WAAU;EAAsB,OAZrC,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAWJ,4CAAC;GACC,WAAWC,+BAAiB,MAAM,WAAW,eAAe,UAAU;cAEtE,2CAAC;IACC,SAAS;IACT,WAAWA,+BAAiB,MAAM,WAAW,eAAe,MAAM;cAEjE;KACK,EACR,2CAAC;IACC,MAAK;IACD;IACJ,WAAWA,+BAAiB,MAAM,WAAW,eAAe,QAAQ;IACpE,OAAOC,6BAAe,MAAM,kBAAkB,eAAe;IAC7D,UAAU;cAET,QAAQ,KAAK,WAAW;KACvB,MAAM,QAAQ,cAAc,OAAO,MAAM;AACzC,YACE,2CAAC;MAA0B,OAAO,OAAO;gBACtC;QADU,OAAO,MAEX;MAEX;KACK;IACD;GACN;EAER"}
@@ -0,0 +1,53 @@
1
+ import { classMapToString, stylesToObject } from "../../theme/utils.mjs";
2
+ import "../../lib/utils.mjs";
3
+ import { useA2UIComponent } from "../../hooks/useA2UIComponent.mjs";
4
+ import { memo, useCallback, useId } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+
7
+ //#region src/react-renderer/components/interactive/MultipleChoice.tsx
8
+ /**
9
+ * MultipleChoice component - a selection component using a dropdown.
10
+ *
11
+ * Renders a <select> element with options, matching the Lit renderer's behavior.
12
+ * Supports two-way data binding for the selected value.
13
+ */
14
+ const MultipleChoice = memo(function MultipleChoice({ node, surfaceId }) {
15
+ const { theme, resolveString, setValue } = useA2UIComponent(node, surfaceId);
16
+ const props = node.properties;
17
+ const id = useId();
18
+ const options = props.options ?? [];
19
+ const selectionsPath = props.selections?.path;
20
+ const description = resolveString(props.description) ?? "Select an item";
21
+ const handleChange = useCallback((e) => {
22
+ if (selectionsPath) setValue(selectionsPath, [e.target.value]);
23
+ }, [selectionsPath, setValue]);
24
+ return /* @__PURE__ */ jsx("div", {
25
+ className: "a2ui-multiplechoice",
26
+ style: node.weight !== void 0 ? { "--weight": node.weight } : {},
27
+ children: /* @__PURE__ */ jsxs("section", {
28
+ className: classMapToString(theme.components.MultipleChoice.container),
29
+ children: [/* @__PURE__ */ jsx("label", {
30
+ htmlFor: id,
31
+ className: classMapToString(theme.components.MultipleChoice.label),
32
+ children: description
33
+ }), /* @__PURE__ */ jsx("select", {
34
+ name: "data",
35
+ id,
36
+ className: classMapToString(theme.components.MultipleChoice.element),
37
+ style: stylesToObject(theme.additionalStyles?.MultipleChoice),
38
+ onChange: handleChange,
39
+ children: options.map((option) => {
40
+ const label = resolveString(option.label);
41
+ return /* @__PURE__ */ jsx("option", {
42
+ value: option.value,
43
+ children: label
44
+ }, option.value);
45
+ })
46
+ })]
47
+ })
48
+ });
49
+ });
50
+
51
+ //#endregion
52
+ export { MultipleChoice as default };
53
+ //# sourceMappingURL=MultipleChoice.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultipleChoice.mjs","names":[],"sources":["../../../../src/react-renderer/components/interactive/MultipleChoice.tsx"],"sourcesContent":["import { useCallback, useId, memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport { classMapToString, stylesToObject } from \"../../lib/utils\";\n\n/**\n * MultipleChoice component - a selection component using a dropdown.\n *\n * Renders a <select> element with options, matching the Lit renderer's behavior.\n * Supports two-way data binding for the selected value.\n */\nexport const MultipleChoice = memo(function MultipleChoice({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.MultipleChoiceNode>) {\n const { theme, resolveString, setValue } = useA2UIComponent(node, surfaceId);\n const props = node.properties;\n const id = useId();\n\n const options =\n (props.options as {\n label: { literalString?: string; path?: string };\n value: string;\n }[]) ?? [];\n const selectionsPath = props.selections?.path;\n\n // Access description from props (Lit component supports it)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const description =\n resolveString((props as any).description) ?? \"Select an item\";\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => {\n // Two-way binding: update data model with array (matches Lit behavior)\n if (selectionsPath) {\n setValue(selectionsPath, [e.target.value]);\n }\n },\n [selectionsPath, setValue],\n );\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n // Structure mirrors Lit's MultipleChoice component:\n // <div class=\"a2ui-multiplechoice\"> ← :host equivalent\n // <section class=\"...\"> ← container theme classes\n // <label>...</label> ← description label\n // <select>...</select> ← dropdown element\n // </section>\n // </div>\n return (\n <div className=\"a2ui-multiplechoice\" style={hostStyle}>\n <section\n className={classMapToString(theme.components.MultipleChoice.container)}\n >\n <label\n htmlFor={id}\n className={classMapToString(theme.components.MultipleChoice.label)}\n >\n {description}\n </label>\n <select\n name=\"data\"\n id={id}\n className={classMapToString(theme.components.MultipleChoice.element)}\n style={stylesToObject(theme.additionalStyles?.MultipleChoice)}\n onChange={handleChange}\n >\n {options.map((option) => {\n const label = resolveString(option.label);\n return (\n <option key={option.value} value={option.value}>\n {label}\n </option>\n );\n })}\n </select>\n </section>\n </div>\n );\n});\n\nexport default MultipleChoice;\n"],"mappings":";;;;;;;;;;;;;AAYA,MAAa,iBAAiB,KAAK,SAAS,eAAe,EACzD,MACA,aAC+C;CAC/C,MAAM,EAAE,OAAO,eAAe,aAAa,iBAAiB,MAAM,UAAU;CAC5E,MAAM,QAAQ,KAAK;CACnB,MAAM,KAAK,OAAO;CAElB,MAAM,UACH,MAAM,WAGC,EAAE;CACZ,MAAM,iBAAiB,MAAM,YAAY;CAIzC,MAAM,cACJ,cAAe,MAAc,YAAY,IAAI;CAE/C,MAAM,eAAe,aAClB,MAA4C;AAE3C,MAAI,eACF,UAAS,gBAAgB,CAAC,EAAE,OAAO,MAAM,CAAC;IAG9C,CAAC,gBAAgB,SAAS,CAC3B;AAeD,QACE,oBAAC;EAAI,WAAU;EAAsB,OAZrC,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAWJ,qBAAC;GACC,WAAW,iBAAiB,MAAM,WAAW,eAAe,UAAU;cAEtE,oBAAC;IACC,SAAS;IACT,WAAW,iBAAiB,MAAM,WAAW,eAAe,MAAM;cAEjE;KACK,EACR,oBAAC;IACC,MAAK;IACD;IACJ,WAAW,iBAAiB,MAAM,WAAW,eAAe,QAAQ;IACpE,OAAO,eAAe,MAAM,kBAAkB,eAAe;IAC7D,UAAU;cAET,QAAQ,KAAK,WAAW;KACvB,MAAM,QAAQ,cAAc,OAAO,MAAM;AACzC,YACE,oBAAC;MAA0B,OAAO,OAAO;gBACtC;QADU,OAAO,MAEX;MAEX;KACK;IACD;GACN;EAER"}
@@ -0,0 +1,72 @@
1
+ const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
2
+ const require_utils = require('../../theme/utils.cjs');
3
+ require('../../lib/utils.cjs');
4
+ const require_useA2UIComponent = require('../../hooks/useA2UIComponent.cjs');
5
+ let react = require("react");
6
+ let react_jsx_runtime = require("react/jsx-runtime");
7
+
8
+ //#region src/react-renderer/components/interactive/Slider.tsx
9
+ /**
10
+ * Slider component - a numeric value selector with a range.
11
+ *
12
+ * Supports two-way data binding for the value.
13
+ */
14
+ const Slider = (0, react.memo)(function Slider({ node, surfaceId }) {
15
+ const { theme, resolveNumber, resolveString, setValue, getValue } = require_useA2UIComponent.useA2UIComponent(node, surfaceId);
16
+ const props = node.properties;
17
+ const id = (0, react.useId)();
18
+ const valuePath = props.value?.path;
19
+ const initialValue = resolveNumber(props.value) ?? 0;
20
+ const minValue = props.minValue ?? 0;
21
+ const maxValue = props.maxValue ?? 0;
22
+ const [value, setLocalValue] = (0, react.useState)(initialValue);
23
+ (0, react.useEffect)(() => {
24
+ if (valuePath) {
25
+ const externalValue = getValue(valuePath);
26
+ if (externalValue !== null && Number(externalValue) !== value) setLocalValue(Number(externalValue));
27
+ }
28
+ }, [valuePath, getValue]);
29
+ (0, react.useEffect)(() => {
30
+ if (props.value?.literalNumber !== void 0) setLocalValue(props.value.literalNumber);
31
+ }, [props.value?.literalNumber]);
32
+ const handleChange = (0, react.useCallback)((e) => {
33
+ const newValue = Number(e.target.value);
34
+ setLocalValue(newValue);
35
+ if (valuePath) setValue(valuePath, newValue);
36
+ }, [valuePath, setValue]);
37
+ const labelValue = props.label;
38
+ const label = labelValue ? resolveString(labelValue) : "";
39
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40
+ className: "a2ui-slider",
41
+ style: node.weight !== void 0 ? { "--weight": node.weight } : {},
42
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
43
+ className: require_utils.classMapToString(theme.components.Slider.container),
44
+ children: [
45
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
46
+ htmlFor: id,
47
+ className: require_utils.classMapToString(theme.components.Slider.label),
48
+ children: label
49
+ }),
50
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
51
+ type: "range",
52
+ id,
53
+ name: "data",
54
+ value,
55
+ min: minValue,
56
+ max: maxValue,
57
+ onChange: handleChange,
58
+ className: require_utils.classMapToString(theme.components.Slider.element),
59
+ style: require_utils.stylesToObject(theme.additionalStyles?.Slider)
60
+ }),
61
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
62
+ className: require_utils.classMapToString(theme.components.Slider.label),
63
+ children: value
64
+ })
65
+ ]
66
+ })
67
+ });
68
+ });
69
+
70
+ //#endregion
71
+ exports.default = Slider;
72
+ //# sourceMappingURL=Slider.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Slider.cjs","names":["useA2UIComponent","classMapToString","stylesToObject"],"sources":["../../../../src/react-renderer/components/interactive/Slider.tsx"],"sourcesContent":["import { useState, useCallback, useEffect, useId, memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport { classMapToString, stylesToObject } from \"../../lib/utils\";\n\n/**\n * Slider component - a numeric value selector with a range.\n *\n * Supports two-way data binding for the value.\n */\nexport const Slider = memo(function Slider({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.SliderNode>) {\n const { theme, resolveNumber, resolveString, setValue, getValue } =\n useA2UIComponent(node, surfaceId);\n const props = node.properties;\n const id = useId();\n\n const valuePath = props.value?.path;\n const initialValue = resolveNumber(props.value) ?? 0;\n // Match Lit's default values (minValue=0, maxValue=0)\n const minValue = props.minValue ?? 0;\n const maxValue = props.maxValue ?? 0;\n\n const [value, setLocalValue] = useState(initialValue);\n\n // Sync with external data model changes (path binding)\n useEffect(() => {\n if (valuePath) {\n const externalValue = getValue(valuePath);\n if (externalValue !== null && Number(externalValue) !== value) {\n setLocalValue(Number(externalValue));\n }\n }\n }, [valuePath, getValue]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Sync when literal value changes from props (server-driven updates via surfaceUpdate)\n useEffect(() => {\n if (props.value?.literalNumber !== undefined) {\n setLocalValue(props.value.literalNumber);\n }\n }, [props.value?.literalNumber]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = Number(e.target.value);\n setLocalValue(newValue);\n\n // Two-way binding: update data model\n if (valuePath) {\n setValue(valuePath, newValue);\n }\n },\n [valuePath, setValue],\n );\n\n // Access label from props if it exists (Lit component supports it but type doesn't define it)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const labelValue = (props as any).label;\n const label = labelValue ? resolveString(labelValue) : \"\";\n\n // Structure mirrors Lit's Slider component:\n // <div class=\"a2ui-slider\"> ← :host equivalent\n // <section class=\"...\"> ← internal element\n // <label>...</label>\n // <input>...</input>\n // <span>value</span>\n // </section>\n // </div>\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-slider\" style={hostStyle}>\n <section className={classMapToString(theme.components.Slider.container)}>\n <label\n htmlFor={id}\n className={classMapToString(theme.components.Slider.label)}\n >\n {label}\n </label>\n <input\n type=\"range\"\n id={id}\n name=\"data\"\n value={value}\n min={minValue}\n max={maxValue}\n onChange={handleChange}\n className={classMapToString(theme.components.Slider.element)}\n style={stylesToObject(theme.additionalStyles?.Slider)}\n />\n <span className={classMapToString(theme.components.Slider.label)}>\n {value}\n </span>\n </section>\n </div>\n );\n});\n\nexport default Slider;\n"],"mappings":";;;;;;;;;;;;;AAWA,MAAa,yBAAc,SAAS,OAAO,EACzC,MACA,aACuC;CACvC,MAAM,EAAE,OAAO,eAAe,eAAe,UAAU,aACrDA,0CAAiB,MAAM,UAAU;CACnC,MAAM,QAAQ,KAAK;CACnB,MAAM,uBAAY;CAElB,MAAM,YAAY,MAAM,OAAO;CAC/B,MAAM,eAAe,cAAc,MAAM,MAAM,IAAI;CAEnD,MAAM,WAAW,MAAM,YAAY;CACnC,MAAM,WAAW,MAAM,YAAY;CAEnC,MAAM,CAAC,OAAO,qCAA0B,aAAa;AAGrD,4BAAgB;AACd,MAAI,WAAW;GACb,MAAM,gBAAgB,SAAS,UAAU;AACzC,OAAI,kBAAkB,QAAQ,OAAO,cAAc,KAAK,MACtD,eAAc,OAAO,cAAc,CAAC;;IAGvC,CAAC,WAAW,SAAS,CAAC;AAGzB,4BAAgB;AACd,MAAI,MAAM,OAAO,kBAAkB,OACjC,eAAc,MAAM,MAAM,cAAc;IAEzC,CAAC,MAAM,OAAO,cAAc,CAAC;CAEhC,MAAM,uCACH,MAA2C;EAC1C,MAAM,WAAW,OAAO,EAAE,OAAO,MAAM;AACvC,gBAAc,SAAS;AAGvB,MAAI,UACF,UAAS,WAAW,SAAS;IAGjC,CAAC,WAAW,SAAS,CACtB;CAID,MAAM,aAAc,MAAc;CAClC,MAAM,QAAQ,aAAa,cAAc,WAAW,GAAG;AAiBvD,QACE,2CAAC;EAAI,WAAU;EAAc,OAL7B,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,4CAAC;GAAQ,WAAWC,+BAAiB,MAAM,WAAW,OAAO,UAAU;;IACrE,2CAAC;KACC,SAAS;KACT,WAAWA,+BAAiB,MAAM,WAAW,OAAO,MAAM;eAEzD;MACK;IACR,2CAAC;KACC,MAAK;KACD;KACJ,MAAK;KACE;KACP,KAAK;KACL,KAAK;KACL,UAAU;KACV,WAAWA,+BAAiB,MAAM,WAAW,OAAO,QAAQ;KAC5D,OAAOC,6BAAe,MAAM,kBAAkB,OAAO;MACrD;IACF,2CAAC;KAAK,WAAWD,+BAAiB,MAAM,WAAW,OAAO,MAAM;eAC7D;MACI;;IACC;GACN;EAER"}
@@ -0,0 +1,71 @@
1
+ import { classMapToString, stylesToObject } from "../../theme/utils.mjs";
2
+ import "../../lib/utils.mjs";
3
+ import { useA2UIComponent } from "../../hooks/useA2UIComponent.mjs";
4
+ import { memo, useCallback, useEffect, useId, useState } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+
7
+ //#region src/react-renderer/components/interactive/Slider.tsx
8
+ /**
9
+ * Slider component - a numeric value selector with a range.
10
+ *
11
+ * Supports two-way data binding for the value.
12
+ */
13
+ const Slider = memo(function Slider({ node, surfaceId }) {
14
+ const { theme, resolveNumber, resolveString, setValue, getValue } = useA2UIComponent(node, surfaceId);
15
+ const props = node.properties;
16
+ const id = useId();
17
+ const valuePath = props.value?.path;
18
+ const initialValue = resolveNumber(props.value) ?? 0;
19
+ const minValue = props.minValue ?? 0;
20
+ const maxValue = props.maxValue ?? 0;
21
+ const [value, setLocalValue] = useState(initialValue);
22
+ useEffect(() => {
23
+ if (valuePath) {
24
+ const externalValue = getValue(valuePath);
25
+ if (externalValue !== null && Number(externalValue) !== value) setLocalValue(Number(externalValue));
26
+ }
27
+ }, [valuePath, getValue]);
28
+ useEffect(() => {
29
+ if (props.value?.literalNumber !== void 0) setLocalValue(props.value.literalNumber);
30
+ }, [props.value?.literalNumber]);
31
+ const handleChange = useCallback((e) => {
32
+ const newValue = Number(e.target.value);
33
+ setLocalValue(newValue);
34
+ if (valuePath) setValue(valuePath, newValue);
35
+ }, [valuePath, setValue]);
36
+ const labelValue = props.label;
37
+ const label = labelValue ? resolveString(labelValue) : "";
38
+ return /* @__PURE__ */ jsx("div", {
39
+ className: "a2ui-slider",
40
+ style: node.weight !== void 0 ? { "--weight": node.weight } : {},
41
+ children: /* @__PURE__ */ jsxs("section", {
42
+ className: classMapToString(theme.components.Slider.container),
43
+ children: [
44
+ /* @__PURE__ */ jsx("label", {
45
+ htmlFor: id,
46
+ className: classMapToString(theme.components.Slider.label),
47
+ children: label
48
+ }),
49
+ /* @__PURE__ */ jsx("input", {
50
+ type: "range",
51
+ id,
52
+ name: "data",
53
+ value,
54
+ min: minValue,
55
+ max: maxValue,
56
+ onChange: handleChange,
57
+ className: classMapToString(theme.components.Slider.element),
58
+ style: stylesToObject(theme.additionalStyles?.Slider)
59
+ }),
60
+ /* @__PURE__ */ jsx("span", {
61
+ className: classMapToString(theme.components.Slider.label),
62
+ children: value
63
+ })
64
+ ]
65
+ })
66
+ });
67
+ });
68
+
69
+ //#endregion
70
+ export { Slider as default };
71
+ //# sourceMappingURL=Slider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Slider.mjs","names":[],"sources":["../../../../src/react-renderer/components/interactive/Slider.tsx"],"sourcesContent":["import { useState, useCallback, useEffect, useId, memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport { classMapToString, stylesToObject } from \"../../lib/utils\";\n\n/**\n * Slider component - a numeric value selector with a range.\n *\n * Supports two-way data binding for the value.\n */\nexport const Slider = memo(function Slider({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.SliderNode>) {\n const { theme, resolveNumber, resolveString, setValue, getValue } =\n useA2UIComponent(node, surfaceId);\n const props = node.properties;\n const id = useId();\n\n const valuePath = props.value?.path;\n const initialValue = resolveNumber(props.value) ?? 0;\n // Match Lit's default values (minValue=0, maxValue=0)\n const minValue = props.minValue ?? 0;\n const maxValue = props.maxValue ?? 0;\n\n const [value, setLocalValue] = useState(initialValue);\n\n // Sync with external data model changes (path binding)\n useEffect(() => {\n if (valuePath) {\n const externalValue = getValue(valuePath);\n if (externalValue !== null && Number(externalValue) !== value) {\n setLocalValue(Number(externalValue));\n }\n }\n }, [valuePath, getValue]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Sync when literal value changes from props (server-driven updates via surfaceUpdate)\n useEffect(() => {\n if (props.value?.literalNumber !== undefined) {\n setLocalValue(props.value.literalNumber);\n }\n }, [props.value?.literalNumber]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = Number(e.target.value);\n setLocalValue(newValue);\n\n // Two-way binding: update data model\n if (valuePath) {\n setValue(valuePath, newValue);\n }\n },\n [valuePath, setValue],\n );\n\n // Access label from props if it exists (Lit component supports it but type doesn't define it)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const labelValue = (props as any).label;\n const label = labelValue ? resolveString(labelValue) : \"\";\n\n // Structure mirrors Lit's Slider component:\n // <div class=\"a2ui-slider\"> ← :host equivalent\n // <section class=\"...\"> ← internal element\n // <label>...</label>\n // <input>...</input>\n // <span>value</span>\n // </section>\n // </div>\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-slider\" style={hostStyle}>\n <section className={classMapToString(theme.components.Slider.container)}>\n <label\n htmlFor={id}\n className={classMapToString(theme.components.Slider.label)}\n >\n {label}\n </label>\n <input\n type=\"range\"\n id={id}\n name=\"data\"\n value={value}\n min={minValue}\n max={maxValue}\n onChange={handleChange}\n className={classMapToString(theme.components.Slider.element)}\n style={stylesToObject(theme.additionalStyles?.Slider)}\n />\n <span className={classMapToString(theme.components.Slider.label)}>\n {value}\n </span>\n </section>\n </div>\n );\n});\n\nexport default Slider;\n"],"mappings":";;;;;;;;;;;;AAWA,MAAa,SAAS,KAAK,SAAS,OAAO,EACzC,MACA,aACuC;CACvC,MAAM,EAAE,OAAO,eAAe,eAAe,UAAU,aACrD,iBAAiB,MAAM,UAAU;CACnC,MAAM,QAAQ,KAAK;CACnB,MAAM,KAAK,OAAO;CAElB,MAAM,YAAY,MAAM,OAAO;CAC/B,MAAM,eAAe,cAAc,MAAM,MAAM,IAAI;CAEnD,MAAM,WAAW,MAAM,YAAY;CACnC,MAAM,WAAW,MAAM,YAAY;CAEnC,MAAM,CAAC,OAAO,iBAAiB,SAAS,aAAa;AAGrD,iBAAgB;AACd,MAAI,WAAW;GACb,MAAM,gBAAgB,SAAS,UAAU;AACzC,OAAI,kBAAkB,QAAQ,OAAO,cAAc,KAAK,MACtD,eAAc,OAAO,cAAc,CAAC;;IAGvC,CAAC,WAAW,SAAS,CAAC;AAGzB,iBAAgB;AACd,MAAI,MAAM,OAAO,kBAAkB,OACjC,eAAc,MAAM,MAAM,cAAc;IAEzC,CAAC,MAAM,OAAO,cAAc,CAAC;CAEhC,MAAM,eAAe,aAClB,MAA2C;EAC1C,MAAM,WAAW,OAAO,EAAE,OAAO,MAAM;AACvC,gBAAc,SAAS;AAGvB,MAAI,UACF,UAAS,WAAW,SAAS;IAGjC,CAAC,WAAW,SAAS,CACtB;CAID,MAAM,aAAc,MAAc;CAClC,MAAM,QAAQ,aAAa,cAAc,WAAW,GAAG;AAiBvD,QACE,oBAAC;EAAI,WAAU;EAAc,OAL7B,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,qBAAC;GAAQ,WAAW,iBAAiB,MAAM,WAAW,OAAO,UAAU;;IACrE,oBAAC;KACC,SAAS;KACT,WAAW,iBAAiB,MAAM,WAAW,OAAO,MAAM;eAEzD;MACK;IACR,oBAAC;KACC,MAAK;KACD;KACJ,MAAK;KACE;KACP,KAAK;KACL,KAAK;KACL,UAAU;KACV,WAAW,iBAAiB,MAAM,WAAW,OAAO,QAAQ;KAC5D,OAAO,eAAe,MAAM,kBAAkB,OAAO;MACrD;IACF,oBAAC;KAAK,WAAW,iBAAiB,MAAM,WAAW,OAAO,MAAM;eAC7D;MACI;;IACC;GACN;EAER"}
@@ -0,0 +1,74 @@
1
+ const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
2
+ const require_utils = require('../../theme/utils.cjs');
3
+ require('../../lib/utils.cjs');
4
+ const require_useA2UIComponent = require('../../hooks/useA2UIComponent.cjs');
5
+ let react = require("react");
6
+ let react_jsx_runtime = require("react/jsx-runtime");
7
+
8
+ //#region src/react-renderer/components/interactive/TextField.tsx
9
+ /**
10
+ * TextField component - an input field for text entry.
11
+ *
12
+ * Supports various input types and two-way data binding.
13
+ */
14
+ const TextField = (0, react.memo)(function TextField({ node, surfaceId }) {
15
+ const { theme, resolveString, setValue, getValue } = require_useA2UIComponent.useA2UIComponent(node, surfaceId);
16
+ const props = node.properties;
17
+ const id = (0, react.useId)();
18
+ const label = resolveString(props.label);
19
+ const textPath = props.text?.path;
20
+ const initialValue = resolveString(props.text) ?? "";
21
+ const fieldType = props.type;
22
+ const validationRegexp = props.validationRegexp;
23
+ const [value, setLocalValue] = (0, react.useState)(initialValue);
24
+ const [_isValid, setIsValid] = (0, react.useState)(true);
25
+ (0, react.useEffect)(() => {
26
+ if (textPath) {
27
+ const externalValue = getValue(textPath);
28
+ if (externalValue !== null && String(externalValue) !== value) setLocalValue(String(externalValue));
29
+ }
30
+ }, [textPath, getValue]);
31
+ const handleChange = (0, react.useCallback)((e) => {
32
+ const newValue = e.target.value;
33
+ setLocalValue(newValue);
34
+ if (validationRegexp) setIsValid(new RegExp(validationRegexp).test(newValue));
35
+ if (textPath) setValue(textPath, newValue);
36
+ }, [
37
+ validationRegexp,
38
+ textPath,
39
+ setValue
40
+ ]);
41
+ const inputType = fieldType === "number" ? "number" : fieldType === "date" ? "date" : "text";
42
+ const isTextArea = fieldType === "longText";
43
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
44
+ className: "a2ui-textfield",
45
+ style: node.weight !== void 0 ? { "--weight": node.weight } : {},
46
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
47
+ className: require_utils.classMapToString(theme.components.TextField.container),
48
+ children: [label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
49
+ htmlFor: id,
50
+ className: require_utils.classMapToString(theme.components.TextField.label),
51
+ children: label
52
+ }), isTextArea ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
53
+ id,
54
+ value,
55
+ onChange: handleChange,
56
+ placeholder: "Please enter a value",
57
+ className: require_utils.classMapToString(theme.components.TextField.element),
58
+ style: require_utils.stylesToObject(theme.additionalStyles?.TextField)
59
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
60
+ type: inputType,
61
+ id,
62
+ value,
63
+ onChange: handleChange,
64
+ placeholder: "Please enter a value",
65
+ className: require_utils.classMapToString(theme.components.TextField.element),
66
+ style: require_utils.stylesToObject(theme.additionalStyles?.TextField)
67
+ })]
68
+ })
69
+ });
70
+ });
71
+
72
+ //#endregion
73
+ exports.default = TextField;
74
+ //# sourceMappingURL=TextField.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextField.cjs","names":["useA2UIComponent","classMapToString","stylesToObject"],"sources":["../../../../src/react-renderer/components/interactive/TextField.tsx"],"sourcesContent":["import { useState, useCallback, useEffect, useId, memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport { classMapToString, stylesToObject } from \"../../lib/utils\";\n\ntype TextFieldType = \"shortText\" | \"longText\" | \"number\" | \"date\";\n\n/**\n * TextField component - an input field for text entry.\n *\n * Supports various input types and two-way data binding.\n */\nexport const TextField = memo(function TextField({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.TextFieldNode>) {\n const { theme, resolveString, setValue, getValue } = useA2UIComponent(\n node,\n surfaceId,\n );\n const props = node.properties;\n const id = useId();\n\n const label = resolveString(props.label);\n const textPath = props.text?.path;\n const initialValue = resolveString(props.text) ?? \"\";\n const fieldType = props.type as TextFieldType | undefined;\n const validationRegexp = props.validationRegexp;\n\n const [value, setLocalValue] = useState(initialValue);\n // Validation state tracked for potential future use (e.g., error styling)\n const [_isValid, setIsValid] = useState(true);\n\n // Sync with external data model changes\n useEffect(() => {\n if (textPath) {\n const externalValue = getValue(textPath);\n if (externalValue !== null && String(externalValue) !== value) {\n setLocalValue(String(externalValue));\n }\n }\n }, [textPath, getValue]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n setLocalValue(newValue);\n\n // Validate if pattern provided\n if (validationRegexp) {\n setIsValid(new RegExp(validationRegexp).test(newValue));\n }\n\n // Two-way binding: update data model\n if (textPath) {\n setValue(textPath, newValue);\n }\n },\n [validationRegexp, textPath, setValue],\n );\n\n const inputType =\n fieldType === \"number\" ? \"number\" : fieldType === \"date\" ? \"date\" : \"text\";\n const isTextArea = fieldType === \"longText\";\n\n // Structure mirrors Lit's TextField component:\n // <div class=\"a2ui-textfield\"> ← :host equivalent\n // <section class=\"...\"> ← container with theme classes\n // <label>...</label>\n // <input>...</input>\n // </section>\n // </div>\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-textfield\" style={hostStyle}>\n <section\n className={classMapToString(theme.components.TextField.container)}\n >\n {label && (\n <label\n htmlFor={id}\n className={classMapToString(theme.components.TextField.label)}\n >\n {label}\n </label>\n )}\n {isTextArea ? (\n <textarea\n id={id}\n value={value}\n onChange={handleChange}\n placeholder=\"Please enter a value\"\n className={classMapToString(theme.components.TextField.element)}\n style={stylesToObject(theme.additionalStyles?.TextField)}\n />\n ) : (\n <input\n type={inputType}\n id={id}\n value={value}\n onChange={handleChange}\n placeholder=\"Please enter a value\"\n className={classMapToString(theme.components.TextField.element)}\n style={stylesToObject(theme.additionalStyles?.TextField)}\n />\n )}\n </section>\n </div>\n );\n});\n\nexport default TextField;\n"],"mappings":";;;;;;;;;;;;;AAaA,MAAa,4BAAiB,SAAS,UAAU,EAC/C,MACA,aAC0C;CAC1C,MAAM,EAAE,OAAO,eAAe,UAAU,aAAaA,0CACnD,MACA,UACD;CACD,MAAM,QAAQ,KAAK;CACnB,MAAM,uBAAY;CAElB,MAAM,QAAQ,cAAc,MAAM,MAAM;CACxC,MAAM,WAAW,MAAM,MAAM;CAC7B,MAAM,eAAe,cAAc,MAAM,KAAK,IAAI;CAClD,MAAM,YAAY,MAAM;CACxB,MAAM,mBAAmB,MAAM;CAE/B,MAAM,CAAC,OAAO,qCAA0B,aAAa;CAErD,MAAM,CAAC,UAAU,kCAAuB,KAAK;AAG7C,4BAAgB;AACd,MAAI,UAAU;GACZ,MAAM,gBAAgB,SAAS,SAAS;AACxC,OAAI,kBAAkB,QAAQ,OAAO,cAAc,KAAK,MACtD,eAAc,OAAO,cAAc,CAAC;;IAGvC,CAAC,UAAU,SAAS,CAAC;CAExB,MAAM,uCACH,MAAiE;EAChE,MAAM,WAAW,EAAE,OAAO;AAC1B,gBAAc,SAAS;AAGvB,MAAI,iBACF,YAAW,IAAI,OAAO,iBAAiB,CAAC,KAAK,SAAS,CAAC;AAIzD,MAAI,SACF,UAAS,UAAU,SAAS;IAGhC;EAAC;EAAkB;EAAU;EAAS,CACvC;CAED,MAAM,YACJ,cAAc,WAAW,WAAW,cAAc,SAAS,SAAS;CACtE,MAAM,aAAa,cAAc;AAgBjC,QACE,2CAAC;EAAI,WAAU;EAAiB,OALhC,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,4CAAC;GACC,WAAWC,+BAAiB,MAAM,WAAW,UAAU,UAAU;cAEhE,SACC,2CAAC;IACC,SAAS;IACT,WAAWA,+BAAiB,MAAM,WAAW,UAAU,MAAM;cAE5D;KACK,EAET,aACC,2CAAC;IACK;IACG;IACP,UAAU;IACV,aAAY;IACZ,WAAWA,+BAAiB,MAAM,WAAW,UAAU,QAAQ;IAC/D,OAAOC,6BAAe,MAAM,kBAAkB,UAAU;KACxD,GAEF,2CAAC;IACC,MAAM;IACF;IACG;IACP,UAAU;IACV,aAAY;IACZ,WAAWD,+BAAiB,MAAM,WAAW,UAAU,QAAQ;IAC/D,OAAOC,6BAAe,MAAM,kBAAkB,UAAU;KACxD;IAEI;GACN;EAER"}
@@ -0,0 +1,73 @@
1
+ import { classMapToString, stylesToObject } from "../../theme/utils.mjs";
2
+ import "../../lib/utils.mjs";
3
+ import { useA2UIComponent } from "../../hooks/useA2UIComponent.mjs";
4
+ import { memo, useCallback, useEffect, useId, useState } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+
7
+ //#region src/react-renderer/components/interactive/TextField.tsx
8
+ /**
9
+ * TextField component - an input field for text entry.
10
+ *
11
+ * Supports various input types and two-way data binding.
12
+ */
13
+ const TextField = memo(function TextField({ node, surfaceId }) {
14
+ const { theme, resolveString, setValue, getValue } = useA2UIComponent(node, surfaceId);
15
+ const props = node.properties;
16
+ const id = useId();
17
+ const label = resolveString(props.label);
18
+ const textPath = props.text?.path;
19
+ const initialValue = resolveString(props.text) ?? "";
20
+ const fieldType = props.type;
21
+ const validationRegexp = props.validationRegexp;
22
+ const [value, setLocalValue] = useState(initialValue);
23
+ const [_isValid, setIsValid] = useState(true);
24
+ useEffect(() => {
25
+ if (textPath) {
26
+ const externalValue = getValue(textPath);
27
+ if (externalValue !== null && String(externalValue) !== value) setLocalValue(String(externalValue));
28
+ }
29
+ }, [textPath, getValue]);
30
+ const handleChange = useCallback((e) => {
31
+ const newValue = e.target.value;
32
+ setLocalValue(newValue);
33
+ if (validationRegexp) setIsValid(new RegExp(validationRegexp).test(newValue));
34
+ if (textPath) setValue(textPath, newValue);
35
+ }, [
36
+ validationRegexp,
37
+ textPath,
38
+ setValue
39
+ ]);
40
+ const inputType = fieldType === "number" ? "number" : fieldType === "date" ? "date" : "text";
41
+ const isTextArea = fieldType === "longText";
42
+ return /* @__PURE__ */ jsx("div", {
43
+ className: "a2ui-textfield",
44
+ style: node.weight !== void 0 ? { "--weight": node.weight } : {},
45
+ children: /* @__PURE__ */ jsxs("section", {
46
+ className: classMapToString(theme.components.TextField.container),
47
+ children: [label && /* @__PURE__ */ jsx("label", {
48
+ htmlFor: id,
49
+ className: classMapToString(theme.components.TextField.label),
50
+ children: label
51
+ }), isTextArea ? /* @__PURE__ */ jsx("textarea", {
52
+ id,
53
+ value,
54
+ onChange: handleChange,
55
+ placeholder: "Please enter a value",
56
+ className: classMapToString(theme.components.TextField.element),
57
+ style: stylesToObject(theme.additionalStyles?.TextField)
58
+ }) : /* @__PURE__ */ jsx("input", {
59
+ type: inputType,
60
+ id,
61
+ value,
62
+ onChange: handleChange,
63
+ placeholder: "Please enter a value",
64
+ className: classMapToString(theme.components.TextField.element),
65
+ style: stylesToObject(theme.additionalStyles?.TextField)
66
+ })]
67
+ })
68
+ });
69
+ });
70
+
71
+ //#endregion
72
+ export { TextField as default };
73
+ //# sourceMappingURL=TextField.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextField.mjs","names":[],"sources":["../../../../src/react-renderer/components/interactive/TextField.tsx"],"sourcesContent":["import { useState, useCallback, useEffect, useId, memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport { classMapToString, stylesToObject } from \"../../lib/utils\";\n\ntype TextFieldType = \"shortText\" | \"longText\" | \"number\" | \"date\";\n\n/**\n * TextField component - an input field for text entry.\n *\n * Supports various input types and two-way data binding.\n */\nexport const TextField = memo(function TextField({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.TextFieldNode>) {\n const { theme, resolveString, setValue, getValue } = useA2UIComponent(\n node,\n surfaceId,\n );\n const props = node.properties;\n const id = useId();\n\n const label = resolveString(props.label);\n const textPath = props.text?.path;\n const initialValue = resolveString(props.text) ?? \"\";\n const fieldType = props.type as TextFieldType | undefined;\n const validationRegexp = props.validationRegexp;\n\n const [value, setLocalValue] = useState(initialValue);\n // Validation state tracked for potential future use (e.g., error styling)\n const [_isValid, setIsValid] = useState(true);\n\n // Sync with external data model changes\n useEffect(() => {\n if (textPath) {\n const externalValue = getValue(textPath);\n if (externalValue !== null && String(externalValue) !== value) {\n setLocalValue(String(externalValue));\n }\n }\n }, [textPath, getValue]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n setLocalValue(newValue);\n\n // Validate if pattern provided\n if (validationRegexp) {\n setIsValid(new RegExp(validationRegexp).test(newValue));\n }\n\n // Two-way binding: update data model\n if (textPath) {\n setValue(textPath, newValue);\n }\n },\n [validationRegexp, textPath, setValue],\n );\n\n const inputType =\n fieldType === \"number\" ? \"number\" : fieldType === \"date\" ? \"date\" : \"text\";\n const isTextArea = fieldType === \"longText\";\n\n // Structure mirrors Lit's TextField component:\n // <div class=\"a2ui-textfield\"> ← :host equivalent\n // <section class=\"...\"> ← container with theme classes\n // <label>...</label>\n // <input>...</input>\n // </section>\n // </div>\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-textfield\" style={hostStyle}>\n <section\n className={classMapToString(theme.components.TextField.container)}\n >\n {label && (\n <label\n htmlFor={id}\n className={classMapToString(theme.components.TextField.label)}\n >\n {label}\n </label>\n )}\n {isTextArea ? (\n <textarea\n id={id}\n value={value}\n onChange={handleChange}\n placeholder=\"Please enter a value\"\n className={classMapToString(theme.components.TextField.element)}\n style={stylesToObject(theme.additionalStyles?.TextField)}\n />\n ) : (\n <input\n type={inputType}\n id={id}\n value={value}\n onChange={handleChange}\n placeholder=\"Please enter a value\"\n className={classMapToString(theme.components.TextField.element)}\n style={stylesToObject(theme.additionalStyles?.TextField)}\n />\n )}\n </section>\n </div>\n );\n});\n\nexport default TextField;\n"],"mappings":";;;;;;;;;;;;AAaA,MAAa,YAAY,KAAK,SAAS,UAAU,EAC/C,MACA,aAC0C;CAC1C,MAAM,EAAE,OAAO,eAAe,UAAU,aAAa,iBACnD,MACA,UACD;CACD,MAAM,QAAQ,KAAK;CACnB,MAAM,KAAK,OAAO;CAElB,MAAM,QAAQ,cAAc,MAAM,MAAM;CACxC,MAAM,WAAW,MAAM,MAAM;CAC7B,MAAM,eAAe,cAAc,MAAM,KAAK,IAAI;CAClD,MAAM,YAAY,MAAM;CACxB,MAAM,mBAAmB,MAAM;CAE/B,MAAM,CAAC,OAAO,iBAAiB,SAAS,aAAa;CAErD,MAAM,CAAC,UAAU,cAAc,SAAS,KAAK;AAG7C,iBAAgB;AACd,MAAI,UAAU;GACZ,MAAM,gBAAgB,SAAS,SAAS;AACxC,OAAI,kBAAkB,QAAQ,OAAO,cAAc,KAAK,MACtD,eAAc,OAAO,cAAc,CAAC;;IAGvC,CAAC,UAAU,SAAS,CAAC;CAExB,MAAM,eAAe,aAClB,MAAiE;EAChE,MAAM,WAAW,EAAE,OAAO;AAC1B,gBAAc,SAAS;AAGvB,MAAI,iBACF,YAAW,IAAI,OAAO,iBAAiB,CAAC,KAAK,SAAS,CAAC;AAIzD,MAAI,SACF,UAAS,UAAU,SAAS;IAGhC;EAAC;EAAkB;EAAU;EAAS,CACvC;CAED,MAAM,YACJ,cAAc,WAAW,WAAW,cAAc,SAAS,SAAS;CACtE,MAAM,aAAa,cAAc;AAgBjC,QACE,oBAAC;EAAI,WAAU;EAAiB,OALhC,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,qBAAC;GACC,WAAW,iBAAiB,MAAM,WAAW,UAAU,UAAU;cAEhE,SACC,oBAAC;IACC,SAAS;IACT,WAAW,iBAAiB,MAAM,WAAW,UAAU,MAAM;cAE5D;KACK,EAET,aACC,oBAAC;IACK;IACG;IACP,UAAU;IACV,aAAY;IACZ,WAAW,iBAAiB,MAAM,WAAW,UAAU,QAAQ;IAC/D,OAAO,eAAe,MAAM,kBAAkB,UAAU;KACxD,GAEF,oBAAC;IACC,MAAM;IACF;IACG;IACP,UAAU;IACV,aAAY;IACZ,WAAW,iBAAiB,MAAM,WAAW,UAAU,QAAQ;IAC/D,OAAO,eAAe,MAAM,kBAAkB,UAAU;KACxD;IAEI;GACN;EAER"}
@@ -0,0 +1,46 @@
1
+ const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
2
+ const require_ComponentNode = require('../../core/ComponentNode.cjs');
3
+ const require_utils = require('../../theme/utils.cjs');
4
+ require('../../lib/utils.cjs');
5
+ const require_useA2UIComponent = require('../../hooks/useA2UIComponent.cjs');
6
+ let react = require("react");
7
+ let react_jsx_runtime = require("react/jsx-runtime");
8
+
9
+ //#region src/react-renderer/components/layout/Card.tsx
10
+ /**
11
+ * Card component - a container that visually groups content.
12
+ *
13
+ * Structure mirrors Lit's Card component:
14
+ * <div class="a2ui-card"> ← :host equivalent
15
+ * <section class="..."> ← theme classes (border, padding, background)
16
+ * {children} ← ::slotted(*) equivalent
17
+ * </section>
18
+ * </div>
19
+ *
20
+ * All styles come from componentSpecificStyles CSS, no inline styles needed.
21
+ */
22
+ const Card = (0, react.memo)(function Card({ node, surfaceId }) {
23
+ const { theme } = require_useA2UIComponent.useA2UIComponent(node, surfaceId);
24
+ const props = node.properties;
25
+ const rawChildren = props.children ?? (props.child ? [props.child] : []);
26
+ const children = Array.isArray(rawChildren) ? rawChildren : [];
27
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
28
+ className: "a2ui-card",
29
+ style: node.weight !== void 0 ? { "--weight": node.weight } : {},
30
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("section", {
31
+ className: require_utils.classMapToString(theme.components.Card),
32
+ style: require_utils.stylesToObject(theme.additionalStyles?.Card),
33
+ children: children.map((child, index) => {
34
+ const childId = typeof child === "object" && child !== null && "id" in child ? child.id : `child-${index}`;
35
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_ComponentNode.default, {
36
+ node: typeof child === "object" && child !== null && "type" in child ? child : null,
37
+ surfaceId
38
+ }, childId);
39
+ })
40
+ })
41
+ });
42
+ });
43
+
44
+ //#endregion
45
+ exports.default = Card;
46
+ //# sourceMappingURL=Card.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.cjs","names":["useA2UIComponent","classMapToString","stylesToObject","ComponentNode"],"sources":["../../../../src/react-renderer/components/layout/Card.tsx"],"sourcesContent":["import { memo } from \"react\";\nimport type { Types } from \"@a2ui/lit/0.8\";\nimport type { A2UIComponentProps } from \"../../types\";\nimport { useA2UIComponent } from \"../../hooks/useA2UIComponent\";\nimport { classMapToString, stylesToObject } from \"../../lib/utils\";\nimport { ComponentNode } from \"../../core/ComponentNode\";\n\n/**\n * Card component - a container that visually groups content.\n *\n * Structure mirrors Lit's Card component:\n * <div class=\"a2ui-card\"> ← :host equivalent\n * <section class=\"...\"> ← theme classes (border, padding, background)\n * {children} ← ::slotted(*) equivalent\n * </section>\n * </div>\n *\n * All styles come from componentSpecificStyles CSS, no inline styles needed.\n */\nexport const Card = memo(function Card({\n node,\n surfaceId,\n}: A2UIComponentProps<Types.CardNode>) {\n const { theme } = useA2UIComponent(node, surfaceId);\n const props = node.properties;\n\n // Card can have either a single child or multiple children\n const rawChildren = props.children ?? (props.child ? [props.child] : []);\n const children = Array.isArray(rawChildren) ? rawChildren : [];\n\n // Apply --weight CSS variable on root div (:host equivalent) for flex layouts\n const hostStyle: React.CSSProperties =\n node.weight !== undefined\n ? ({ \"--weight\": node.weight } as React.CSSProperties)\n : {};\n\n return (\n <div className=\"a2ui-card\" style={hostStyle}>\n <section\n className={classMapToString(theme.components.Card)}\n style={stylesToObject(theme.additionalStyles?.Card)}\n >\n {children.map((child, index) => {\n const childId =\n typeof child === \"object\" && child !== null && \"id\" in child\n ? (child as Types.AnyComponentNode).id\n : `child-${index}`;\n const childNode =\n typeof child === \"object\" && child !== null && \"type\" in child\n ? (child as Types.AnyComponentNode)\n : null;\n return (\n <ComponentNode\n key={childId}\n node={childNode}\n surfaceId={surfaceId}\n />\n );\n })}\n </section>\n </div>\n );\n});\n\nexport default Card;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAmBA,MAAa,uBAAY,SAAS,KAAK,EACrC,MACA,aACqC;CACrC,MAAM,EAAE,UAAUA,0CAAiB,MAAM,UAAU;CACnD,MAAM,QAAQ,KAAK;CAGnB,MAAM,cAAc,MAAM,aAAa,MAAM,QAAQ,CAAC,MAAM,MAAM,GAAG,EAAE;CACvE,MAAM,WAAW,MAAM,QAAQ,YAAY,GAAG,cAAc,EAAE;AAQ9D,QACE,2CAAC;EAAI,WAAU;EAAY,OAL3B,KAAK,WAAW,SACX,EAAE,YAAY,KAAK,QAAQ,GAC5B,EAAE;YAIJ,2CAAC;GACC,WAAWC,+BAAiB,MAAM,WAAW,KAAK;GAClD,OAAOC,6BAAe,MAAM,kBAAkB,KAAK;aAElD,SAAS,KAAK,OAAO,UAAU;IAC9B,MAAM,UACJ,OAAO,UAAU,YAAY,UAAU,QAAQ,QAAQ,QAClD,MAAiC,KAClC,SAAS;AAKf,WACE,2CAACC;KAEC,MANF,OAAO,UAAU,YAAY,UAAU,QAAQ,UAAU,QACpD,QACD;KAKS;OAFN,QAGL;KAEJ;IACM;GACN;EAER"}