@adia-ai/web-components 0.4.6 → 0.4.8

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 (399) hide show
  1. package/README.md +39 -0
  2. package/USAGE.md +29 -9
  3. package/components/accordion/accordion.a2ui.json +3 -0
  4. package/components/accordion/accordion.d.ts +27 -0
  5. package/components/accordion/accordion.js +10 -117
  6. package/components/accordion/accordion.yaml +4 -0
  7. package/components/accordion/class.js +132 -0
  8. package/components/action-list/action-list.a2ui.json +3 -0
  9. package/components/action-list/action-list.d.ts +25 -0
  10. package/components/action-list/action-list.js +9 -140
  11. package/components/action-list/action-list.yaml +4 -0
  12. package/components/action-list/class.js +156 -0
  13. package/components/agent-artifact/agent-artifact.a2ui.json +4 -0
  14. package/components/agent-artifact/agent-artifact.d.ts +35 -0
  15. package/components/agent-artifact/agent-artifact.js +8 -181
  16. package/components/agent-artifact/agent-artifact.yaml +5 -0
  17. package/components/agent-artifact/class.js +200 -0
  18. package/components/agent-feedback-bar/agent-feedback-bar.a2ui.json +3 -0
  19. package/components/agent-feedback-bar/agent-feedback-bar.d.ts +33 -0
  20. package/components/agent-feedback-bar/agent-feedback-bar.js +8 -143
  21. package/components/agent-feedback-bar/agent-feedback-bar.yaml +4 -0
  22. package/components/agent-feedback-bar/class.js +162 -0
  23. package/components/agent-questions/agent-questions.a2ui.json +3 -0
  24. package/components/agent-questions/agent-questions.d.ts +33 -0
  25. package/components/agent-questions/agent-questions.js +8 -180
  26. package/components/agent-questions/agent-questions.yaml +4 -0
  27. package/components/agent-questions/class.js +199 -0
  28. package/components/agent-reasoning/agent-reasoning.a2ui.json +4 -0
  29. package/components/agent-reasoning/agent-reasoning.d.ts +37 -0
  30. package/components/agent-reasoning/agent-reasoning.js +8 -494
  31. package/components/agent-reasoning/agent-reasoning.yaml +5 -0
  32. package/components/agent-reasoning/class.js +513 -0
  33. package/components/agent-suggestions/agent-suggestions.a2ui.json +3 -0
  34. package/components/agent-suggestions/agent-suggestions.d.ts +31 -0
  35. package/components/agent-suggestions/agent-suggestions.js +8 -78
  36. package/components/agent-suggestions/agent-suggestions.yaml +4 -0
  37. package/components/agent-suggestions/class.js +97 -0
  38. package/components/agent-trace/agent-trace.a2ui.json +1 -0
  39. package/components/agent-trace/agent-trace.d.ts +29 -0
  40. package/components/alert/alert.a2ui.json +1 -0
  41. package/components/alert/alert.d.ts +39 -0
  42. package/components/alert/alert.js +8 -175
  43. package/components/alert/class.js +194 -0
  44. package/components/aside/aside.a2ui.json +1 -0
  45. package/components/avatar/avatar.a2ui.json +3 -0
  46. package/components/avatar/avatar.d.ts +28 -0
  47. package/components/avatar/avatar.js +9 -159
  48. package/components/avatar/avatar.yaml +4 -0
  49. package/components/avatar/class.js +173 -0
  50. package/components/badge/badge.a2ui.json +3 -0
  51. package/components/badge/badge.d.ts +28 -0
  52. package/components/badge/badge.js +9 -75
  53. package/components/badge/badge.yaml +4 -0
  54. package/components/badge/class.js +93 -0
  55. package/components/block/block.a2ui.json +1 -0
  56. package/components/block/block.d.ts +20 -0
  57. package/components/block/block.js +9 -15
  58. package/components/block/class.js +33 -0
  59. package/components/breadcrumb/breadcrumb.a2ui.json +5 -0
  60. package/components/breadcrumb/breadcrumb.d.ts +24 -0
  61. package/components/breadcrumb/breadcrumb.js +8 -113
  62. package/components/breadcrumb/breadcrumb.yaml +6 -0
  63. package/components/breadcrumb/class.js +132 -0
  64. package/components/button/button.a2ui.json +3 -0
  65. package/components/button/button.d.ts +44 -0
  66. package/components/button/button.js +15 -66
  67. package/components/button/button.yaml +5 -0
  68. package/components/button/class.js +80 -0
  69. package/components/calendar-picker/calendar-picker.a2ui.json +7 -1
  70. package/components/calendar-picker/calendar-picker.js +8 -332
  71. package/components/calendar-picker/calendar-picker.yaml +51 -177
  72. package/components/calendar-picker/class.js +351 -0
  73. package/components/canvas/canvas.a2ui.json +7 -1
  74. package/components/canvas/canvas.d.ts +33 -0
  75. package/components/canvas/canvas.yaml +29 -36
  76. package/components/card/card.a2ui.json +4 -0
  77. package/components/card/card.d.ts +37 -0
  78. package/components/card/card.js +9 -50
  79. package/components/card/card.yaml +171 -433
  80. package/components/card/class.js +68 -0
  81. package/components/chart/chart.a2ui.json +1 -0
  82. package/components/chart/chart.d.ts +55 -0
  83. package/components/chart/chart.js +8 -2131
  84. package/components/chart/class.js +2150 -0
  85. package/components/chart-legend/chart-legend.a2ui.json +4 -0
  86. package/components/chart-legend/chart-legend.d.ts +37 -0
  87. package/components/chart-legend/chart-legend.js +8 -197
  88. package/components/chart-legend/chart-legend.yaml +5 -0
  89. package/components/chart-legend/class.js +215 -0
  90. package/components/chat-thread/chat-thread.a2ui.json +1 -0
  91. package/components/chat-thread/chat-thread.d.ts +27 -0
  92. package/components/chat-thread/chat-thread.js +8 -157
  93. package/components/chat-thread/class.js +176 -0
  94. package/components/check/check.a2ui.json +1 -0
  95. package/components/check/check.js +11 -52
  96. package/components/check/class.js +68 -0
  97. package/components/code/class.js +501 -0
  98. package/components/code/code.a2ui.json +1 -0
  99. package/components/code/code.js +8 -482
  100. package/components/col/class.js +30 -0
  101. package/components/col/col.a2ui.json +1 -0
  102. package/components/col/col.d.ts +24 -0
  103. package/components/col/col.js +10 -13
  104. package/components/color-picker/class.js +550 -0
  105. package/components/color-picker/color-picker.a2ui.json +3 -0
  106. package/components/color-picker/color-picker.js +8 -531
  107. package/components/color-picker/color-picker.yaml +4 -0
  108. package/components/command/class.js +364 -0
  109. package/components/command/command.a2ui.json +4 -0
  110. package/components/command/command.d.ts +31 -0
  111. package/components/command/command.js +8 -345
  112. package/components/command/command.yaml +105 -124
  113. package/components/demo-toggle/class.js +153 -0
  114. package/components/demo-toggle/demo-toggle.a2ui.json +1 -0
  115. package/components/demo-toggle/demo-toggle.d.ts +33 -0
  116. package/components/demo-toggle/demo-toggle.js +8 -135
  117. package/components/description-list/class.js +86 -0
  118. package/components/description-list/description-list.a2ui.json +1 -0
  119. package/components/description-list/description-list.d.ts +22 -0
  120. package/components/description-list/description-list.js +8 -67
  121. package/components/divider/class.js +57 -0
  122. package/components/divider/divider.a2ui.json +1 -0
  123. package/components/divider/divider.d.ts +20 -0
  124. package/components/divider/divider.js +10 -40
  125. package/components/drawer/class.js +306 -0
  126. package/components/drawer/drawer.a2ui.json +1 -0
  127. package/components/drawer/drawer.d.ts +35 -0
  128. package/components/drawer/drawer.js +8 -287
  129. package/components/embed/class.js +73 -0
  130. package/components/embed/embed.a2ui.json +1 -0
  131. package/components/embed/embed.d.ts +24 -0
  132. package/components/embed/embed.js +9 -55
  133. package/components/empty-state/class.js +108 -0
  134. package/components/empty-state/empty-state.a2ui.json +3 -0
  135. package/components/empty-state/empty-state.d.ts +22 -0
  136. package/components/empty-state/empty-state.js +9 -90
  137. package/components/empty-state/empty-state.yaml +4 -0
  138. package/components/feed/class.js +381 -0
  139. package/components/feed/feed.a2ui.json +9 -1
  140. package/components/feed/feed.d.ts +29 -0
  141. package/components/feed/feed.js +9 -367
  142. package/components/feed/feed.yaml +8 -1
  143. package/components/field/class.js +266 -0
  144. package/components/field/field.a2ui.json +1 -0
  145. package/components/field/field.d.ts +24 -0
  146. package/components/field/field.js +8 -247
  147. package/components/fields/class.js +106 -0
  148. package/components/fields/fields.a2ui.json +1 -0
  149. package/components/fields/fields.d.ts +20 -0
  150. package/components/fields/fields.js +8 -87
  151. package/components/footer/footer.a2ui.json +1 -0
  152. package/components/grid/class.js +31 -0
  153. package/components/grid/grid.a2ui.json +1 -0
  154. package/components/grid/grid.d.ts +24 -0
  155. package/components/grid/grid.js +10 -14
  156. package/components/header/header.a2ui.json +1 -0
  157. package/components/heatmap/class.js +305 -0
  158. package/components/heatmap/heatmap.a2ui.json +1 -0
  159. package/components/heatmap/heatmap.d.ts +43 -0
  160. package/components/heatmap/heatmap.js +8 -286
  161. package/components/icon/class.js +54 -0
  162. package/components/icon/icon.a2ui.json +1 -0
  163. package/components/icon/icon.d.ts +24 -0
  164. package/components/icon/icon.js +13 -40
  165. package/components/image/class.js +112 -0
  166. package/components/image/image.a2ui.json +3 -0
  167. package/components/image/image.d.ts +34 -0
  168. package/components/image/image.js +9 -94
  169. package/components/image/image.yaml +4 -0
  170. package/components/index.js +8 -0
  171. package/components/input/class.js +773 -0
  172. package/components/input/input.a2ui.json +7 -0
  173. package/components/input/input.js +8 -755
  174. package/components/input/input.yaml +177 -442
  175. package/components/inspector/class.js +142 -0
  176. package/components/inspector/inspector.a2ui.json +13 -1
  177. package/components/inspector/inspector.d.ts +18 -0
  178. package/components/inspector/inspector.js +8 -124
  179. package/components/inspector/inspector.yaml +21 -30
  180. package/components/kbd/class.js +34 -0
  181. package/components/kbd/kbd.a2ui.json +4 -0
  182. package/components/kbd/kbd.d.ts +18 -0
  183. package/components/kbd/kbd.js +10 -17
  184. package/components/kbd/kbd.yaml +54 -185
  185. package/components/link/class.js +187 -0
  186. package/components/link/link.a2ui.json +1 -0
  187. package/components/link/link.d.ts +65 -0
  188. package/components/link/link.js +8 -168
  189. package/components/list/class.js +249 -0
  190. package/components/list/list.a2ui.json +3 -0
  191. package/components/list/list.d.ts +33 -0
  192. package/components/list/list.js +9 -231
  193. package/components/list/list.yaml +4 -0
  194. package/components/menu/class.js +332 -0
  195. package/components/menu/menu.a2ui.json +3 -0
  196. package/components/menu/menu.d.ts +31 -0
  197. package/components/menu/menu.js +11 -316
  198. package/components/menu/menu.yaml +4 -0
  199. package/components/modal/class.js +231 -0
  200. package/components/modal/modal.a2ui.json +6 -1
  201. package/components/modal/modal.d.ts +33 -0
  202. package/components/modal/modal.js +8 -212
  203. package/components/modal/modal.yaml +19 -39
  204. package/components/nav/class.js +150 -0
  205. package/components/nav/nav.a2ui.json +1 -0
  206. package/components/nav/nav.d.ts +41 -0
  207. package/components/nav/nav.js +8 -131
  208. package/components/nav-group/class.js +152 -0
  209. package/components/nav-group/nav-group.a2ui.json +1 -0
  210. package/components/nav-group/nav-group.d.ts +45 -0
  211. package/components/nav-group/nav-group.js +9 -134
  212. package/components/nav-item/class.js +86 -0
  213. package/components/nav-item/nav-item.a2ui.json +1 -0
  214. package/components/nav-item/nav-item.d.ts +47 -0
  215. package/components/nav-item/nav-item.js +10 -69
  216. package/components/noodles/class.js +510 -0
  217. package/components/noodles/noodles.a2ui.json +1 -0
  218. package/components/noodles/noodles.d.ts +47 -0
  219. package/components/noodles/noodles.js +9 -493
  220. package/components/option-card/class.js +167 -0
  221. package/components/option-card/option-card.a2ui.json +3 -0
  222. package/components/option-card/option-card.js +8 -149
  223. package/components/option-card/option-card.yaml +4 -0
  224. package/components/otp-input/class.js +180 -0
  225. package/components/otp-input/otp-input.a2ui.json +6 -1
  226. package/components/otp-input/otp-input.js +9 -162
  227. package/components/otp-input/otp-input.yaml +45 -174
  228. package/components/page/class.js +97 -0
  229. package/components/page/page.a2ui.json +1 -0
  230. package/components/page/page.d.ts +47 -0
  231. package/components/page/page.js +8 -79
  232. package/components/pagination/class.js +195 -0
  233. package/components/pagination/pagination.a2ui.json +1 -0
  234. package/components/pagination/pagination.d.ts +33 -0
  235. package/components/pagination/pagination.js +9 -177
  236. package/components/pane/class.js +186 -0
  237. package/components/pane/pane.a2ui.json +20 -2
  238. package/components/pane/pane.d.ts +41 -0
  239. package/components/pane/pane.js +8 -167
  240. package/components/pane/pane.yaml +64 -158
  241. package/components/pipeline-status/class.js +189 -0
  242. package/components/pipeline-status/pipeline-status.a2ui.json +8 -1
  243. package/components/pipeline-status/pipeline-status.d.ts +22 -0
  244. package/components/pipeline-status/pipeline-status.js +9 -172
  245. package/components/pipeline-status/pipeline-status.yaml +34 -72
  246. package/components/popover/class.js +194 -0
  247. package/components/popover/popover.a2ui.json +1 -0
  248. package/components/popover/popover.d.ts +24 -0
  249. package/components/popover/popover.js +9 -176
  250. package/components/progress/class.js +74 -0
  251. package/components/progress/progress.a2ui.json +4 -0
  252. package/components/progress/progress.d.ts +20 -0
  253. package/components/progress/progress.js +10 -57
  254. package/components/progress/progress.yaml +124 -287
  255. package/components/progress-row/class.js +110 -0
  256. package/components/progress-row/progress-row.a2ui.json +3 -0
  257. package/components/progress-row/progress-row.d.ts +24 -0
  258. package/components/progress-row/progress-row.js +8 -92
  259. package/components/progress-row/progress-row.yaml +4 -0
  260. package/components/radio/class.js +83 -0
  261. package/components/radio/radio.a2ui.json +1 -0
  262. package/components/radio/radio.js +11 -67
  263. package/components/range/class.js +194 -0
  264. package/components/range/range.a2ui.json +1 -0
  265. package/components/range/range.js +9 -176
  266. package/components/rating/class.js +148 -0
  267. package/components/rating/rating.a2ui.json +1 -0
  268. package/components/rating/rating.js +9 -130
  269. package/components/richtext/class.js +87 -0
  270. package/components/richtext/richtext.a2ui.json +8 -1
  271. package/components/richtext/richtext.d.ts +20 -0
  272. package/components/richtext/richtext.js +8 -68
  273. package/components/richtext/richtext.yaml +30 -65
  274. package/components/row/class.js +50 -0
  275. package/components/row/row.a2ui.json +1 -0
  276. package/components/row/row.d.ts +37 -0
  277. package/components/row/row.js +10 -33
  278. package/components/search/class.js +134 -0
  279. package/components/search/search.a2ui.json +1 -0
  280. package/components/search/search.js +10 -117
  281. package/components/section/section.a2ui.json +1 -0
  282. package/components/segment/class.js +62 -0
  283. package/components/segment/segment.a2ui.json +3 -0
  284. package/components/segment/segment.d.ts +26 -0
  285. package/components/segment/segment.js +10 -45
  286. package/components/segment/segment.yaml +4 -0
  287. package/components/segmented/class.js +165 -0
  288. package/components/segmented/segmented.a2ui.json +5 -0
  289. package/components/segmented/segmented.js +10 -148
  290. package/components/segmented/segmented.yaml +41 -59
  291. package/components/select/class.js +408 -0
  292. package/components/select/select.a2ui.json +3 -0
  293. package/components/select/select.js +15 -396
  294. package/components/select/select.yaml +4 -0
  295. package/components/skeleton/class.js +52 -0
  296. package/components/skeleton/skeleton.a2ui.json +1 -0
  297. package/components/skeleton/skeleton.d.ts +24 -0
  298. package/components/skeleton/skeleton.js +8 -34
  299. package/components/slider/class.js +184 -0
  300. package/components/slider/slider.a2ui.json +1 -0
  301. package/components/slider/slider.js +9 -166
  302. package/components/stack/class.js +28 -0
  303. package/components/stack/stack.a2ui.json +1 -0
  304. package/components/stack/stack.d.ts +18 -0
  305. package/components/stack/stack.js +10 -11
  306. package/components/stat/stat.a2ui.json +1 -0
  307. package/components/step-progress/class.js +98 -0
  308. package/components/step-progress/step-progress.a2ui.json +1 -0
  309. package/components/step-progress/step-progress.d.ts +28 -0
  310. package/components/step-progress/step-progress.js +8 -79
  311. package/components/stepper/class.js +126 -0
  312. package/components/stepper/stepper.a2ui.json +3 -0
  313. package/components/stepper/stepper.d.ts +20 -0
  314. package/components/stepper/stepper.js +9 -112
  315. package/components/stepper/stepper.yaml +4 -0
  316. package/components/stream/class.js +109 -0
  317. package/components/stream/stream.a2ui.json +1 -0
  318. package/components/stream/stream.d.ts +33 -0
  319. package/components/stream/stream.js +8 -90
  320. package/components/swatch/class.js +131 -0
  321. package/components/swatch/swatch.a2ui.json +1 -0
  322. package/components/swatch/swatch.d.ts +29 -0
  323. package/components/swatch/swatch.js +8 -112
  324. package/components/swiper/class.js +373 -0
  325. package/components/swiper/swiper.a2ui.json +7 -0
  326. package/components/swiper/swiper.d.ts +45 -0
  327. package/components/swiper/swiper.js +8 -354
  328. package/components/swiper/swiper.yaml +72 -212
  329. package/components/switch/class.js +63 -0
  330. package/components/switch/switch.a2ui.json +7 -1
  331. package/components/switch/switch.js +11 -47
  332. package/components/switch/switch.yaml +70 -265
  333. package/components/table/class.js +1453 -0
  334. package/components/table/table.a2ui.json +7 -0
  335. package/components/table/table.d.ts +55 -0
  336. package/components/table/table.js +8 -1435
  337. package/components/table/table.yaml +8 -0
  338. package/components/table-toolbar/class.js +680 -0
  339. package/components/table-toolbar/table-toolbar.a2ui.json +12 -0
  340. package/components/table-toolbar/table-toolbar.d.ts +49 -0
  341. package/components/table-toolbar/table-toolbar.js +8 -689
  342. package/components/table-toolbar/table-toolbar.yaml +13 -0
  343. package/components/tabs/class.js +242 -0
  344. package/components/tabs/tabs.a2ui.json +3 -0
  345. package/components/tabs/tabs.d.ts +31 -0
  346. package/components/tabs/tabs.js +8 -223
  347. package/components/tabs/tabs.yaml +4 -0
  348. package/components/tag/class.js +99 -0
  349. package/components/tag/tag.a2ui.json +1 -0
  350. package/components/tag/tag.d.ts +37 -0
  351. package/components/tag/tag.js +8 -80
  352. package/components/text/class.js +46 -0
  353. package/components/text/text.a2ui.json +1 -0
  354. package/components/text/text.d.ts +26 -0
  355. package/components/text/text.js +9 -28
  356. package/components/textarea/class.js +134 -0
  357. package/components/textarea/textarea.a2ui.json +1 -0
  358. package/components/textarea/textarea.js +11 -118
  359. package/components/timeline/class.js +176 -0
  360. package/components/timeline/timeline.a2ui.json +18 -1
  361. package/components/timeline/timeline.d.ts +36 -0
  362. package/components/timeline/timeline.js +9 -162
  363. package/components/timeline/timeline.yaml +14 -1
  364. package/components/toast/class.js +92 -0
  365. package/components/toast/toast.a2ui.json +1 -0
  366. package/components/toast/toast.d.ts +33 -0
  367. package/components/toast/toast.js +9 -76
  368. package/components/toggle-group/class.js +154 -0
  369. package/components/toggle-group/toggle-group.a2ui.json +1 -0
  370. package/components/toggle-group/toggle-group.d.ts +29 -0
  371. package/components/toggle-group/toggle-group.js +11 -140
  372. package/components/toggle-scheme/class.js +286 -0
  373. package/components/toggle-scheme/toggle-scheme.a2ui.json +3 -0
  374. package/components/toggle-scheme/toggle-scheme.d.ts +51 -0
  375. package/components/toggle-scheme/toggle-scheme.js +8 -268
  376. package/components/toggle-scheme/toggle-scheme.yaml +4 -0
  377. package/components/toolbar/class.js +388 -0
  378. package/components/toolbar/toolbar.a2ui.json +3 -0
  379. package/components/toolbar/toolbar.d.ts +24 -0
  380. package/components/toolbar/toolbar.js +10 -376
  381. package/components/toolbar/toolbar.yaml +4 -0
  382. package/components/tooltip/class.js +299 -0
  383. package/components/tooltip/tooltip.a2ui.json +1 -0
  384. package/components/tooltip/tooltip.d.ts +28 -0
  385. package/components/tooltip/tooltip.js +8 -280
  386. package/components/tree/class.js +245 -0
  387. package/components/tree/tree.a2ui.json +3 -0
  388. package/components/tree/tree.d.ts +25 -0
  389. package/components/tree/tree.js +9 -244
  390. package/components/tree/tree.yaml +4 -0
  391. package/components/upload/class.js +199 -0
  392. package/components/upload/upload.a2ui.json +1 -0
  393. package/components/upload/upload.js +11 -183
  394. package/core/icons-phosphor.js +93 -0
  395. package/core/icons.js +92 -90
  396. package/core/index.js +5 -0
  397. package/index.d.ts +160 -5
  398. package/index.js +7 -0
  399. package/package.json +7 -2
@@ -1,503 +1,17 @@
1
1
  /**
2
- * <agent-reasoning-ui>Agent inner monologue + pipeline viewer.
2
+ * `<agent-reasoning-ui>`auto-registers the tag on import.
3
3
  *
4
- * Unified chain-of-thought surface. Composes <timeline-ui size="sm"> for step
5
- * rendering and adds plan / thought / iteration interstitials. Auto-collapses
6
- * after finish.
4
+ * For non-side-effect class import (test isolation, tag override), use
5
+ * the `class` subpath:
7
6
  *
8
- * - STEPS → timeline-ui size="sm" rows (completed / active+spinner / error)
9
- * - THOUGHTS → free-form monologue paragraphs
10
- * - PLAN → ordered up-front list in a subtle panel
11
- * - ITERATION → attempt N blocks, each with its own sub-timeline
7
+ * import { UIAgentReasoning } from '@adia-ai/web-components/components/agent-reasoning/class';
12
8
  *
13
- * JS API:
14
- * const r = document.createElement('agent-reasoning-ui');
15
- *
16
- * r.setPlan(['Read intent', 'Search patterns', 'Synthesize output']);
17
- * r.addThought('The request matches the "product card" pattern.');
18
- *
19
- * r.addStep({ id: 'search', label: 'search: Finding patterns…' });
20
- * r.updateStep('search', { outcomes: ['3 candidates ranked'] });
21
- * r.completeStep('search', 1200);
22
- *
23
- * r.startIteration(1, 'First attempt');
24
- * r.addStep({ id: 'gen', label: 'generate' });
25
- * r.completeStep('gen', 3000);
26
- * r.endIteration(1, { status: 'error', summary: 'validation 62/100' });
27
- *
28
- * r.startIteration(2, 'Retry with hint');
29
- * r.addStep({ id: 'gen2', label: 'generate (retry)' });
30
- * r.completeStep('gen2', 2500);
31
- * r.endIteration(2, { status: 'done', summary: 'validation 94/100' });
32
- *
33
- * r.finish('2 iterations · 94/100 · 7s');
34
- *
35
- * Attributes:
36
- * collapsed — start collapsed
37
- * no-autocollapse — disable auto-collapse 1.2s after finish (default: false — auto-collapse on)
38
- * heading — fallback summary label while active
39
- * status — 'idle' | 'active' | 'done' | 'error' (default: 'active')
40
- * Drives the status icon: spinner / check-circle / warning-circle
41
- *
42
- * Events:
43
- * reasoning-toggle — summary expanded/collapsed (detail: { collapsed })
44
- * reasoning-step-toggle — a step's outcomes were toggled (detail: { stepId })
45
- * reasoning-finish — .finish() was called (detail: { summary, status })
9
+ * @see ../../USAGE.md#registration--auto-vs-explicit
46
10
  */
47
11
 
48
- import { UIElement } from '../../core/element.js';
49
-
50
- // Status lifecycle for the reasoning surface as a whole.
51
- // active — still thinking (default; renders the spinner)
52
- // done — finished successfully (renders check-circle)
53
- // error — finished with failure (renders warning)
54
- // idle — not started (renders muted dot)
55
- const REASONING_STATUSES = new Set(['idle', 'active', 'done', 'error']);
56
-
57
- class UIAgentReasoning extends UIElement {
58
- static properties = {
59
- collapsed: { type: Boolean, default: false, reflect: true },
60
- noAutocollapse: { type: Boolean, default: false, reflect: true, attribute: 'no-autocollapse' },
61
- heading: { type: String, default: '', reflect: true },
62
- status: { type: String, default: 'active', reflect: true },
63
- };
64
-
65
- static template = () => null;
66
-
67
- // Flat entries list; each is one of:
68
- // { kind: 'step', id, label, status, duration, outcomes, children }
69
- // { kind: 'thought', id, text }
70
- // { kind: 'plan', id, items: string[] }
71
- // { kind: 'iteration', id, n, label, status, summary, steps: step[] }
72
- #entries = [];
73
- #iterationStack = [];
74
- #startTime = Date.now();
75
- #timerInterval = null;
76
- #finishTimer = null;
77
- #summaryEl = null;
78
- #bodyEl = null;
79
- #bound = false;
80
-
81
- get entries() { return this.#entries; }
82
-
83
- connected() {
84
- if (this.#bound) return;
85
- this.#bound = true;
86
- this.#startTime = Date.now();
87
- this.#timerInterval = setInterval(() => this.#tickTimers(), 1000);
88
- this.#buildShell();
89
- }
90
-
91
- // Single delegated handler for every nested timeline-item's toggle event.
92
- // Each step element carries its id on dataset.stepId so the handler can
93
- // resolve which step fired without per-item closures.
94
- #onStepToggle = (e) => {
95
- const item = e.target.closest('timeline-item-ui[data-step-id]');
96
- if (!item || !this.#bodyEl?.contains(item)) return;
97
- this.dispatchEvent(new CustomEvent('reasoning-step-toggle', {
98
- bubbles: true, detail: { stepId: item.dataset.stepId },
99
- }));
100
- };
101
-
102
- disconnected() {
103
- if (this.#timerInterval != null) {
104
- clearInterval(this.#timerInterval);
105
- this.#timerInterval = null;
106
- }
107
- if (this.#finishTimer != null) {
108
- clearTimeout(this.#finishTimer);
109
- this.#finishTimer = null;
110
- }
111
- this.#summaryEl?.removeEventListener('click', this.#onSummaryClick);
112
- this.#summaryEl?.removeEventListener('keydown', this.#onSummaryKey);
113
- this.#bodyEl?.removeEventListener('timeline-toggle', this.#onStepToggle);
114
- this.#summaryEl = null;
115
- this.#bodyEl = null;
116
- this.#bound = false;
117
- }
118
-
119
- // ── Public API ──
120
-
121
- addStep(step) {
122
- const entry = {
123
- kind: 'step',
124
- status: 'active',
125
- duration: null,
126
- outcomes: [],
127
- children: [],
128
- ...step,
129
- };
130
- this.#appendToCurrentScope(entry);
131
- this.#render();
132
- return entry;
133
- }
134
-
135
- updateStep(id, updates) {
136
- const step = this.#findStep(id);
137
- if (!step) return;
138
- Object.assign(step, updates);
139
- this.#render();
140
- }
141
-
142
- completeStep(id, duration) {
143
- const step = this.#findStep(id);
144
- if (!step) return;
145
- step.status = 'done';
146
- if (duration != null) step.duration = duration;
147
- this.#render();
148
- }
149
-
150
- failStep(id, error) {
151
- const step = this.#findStep(id);
152
- if (!step) return;
153
- step.status = 'error';
154
- if (error) step.outcomes = [...(step.outcomes || []), String(error)];
155
- this.#render();
156
- }
157
-
158
- addThought(text, id = `thought-${this.#entries.length}`) {
159
- this.#appendToCurrentScope({ kind: 'thought', id, text });
160
- this.#render();
161
- }
162
-
163
- setPlan(items, id = 'plan') {
164
- const existing = this.#entries.find(e => e.kind === 'plan' && e.id === id);
165
- if (existing) existing.items = items.slice();
166
- else this.#entries.push({ kind: 'plan', id, items: items.slice() });
167
- this.#render();
168
- }
169
-
170
- startIteration(n, label = `Attempt ${n}`, id = `iter-${n}`) {
171
- const iter = {
172
- kind: 'iteration',
173
- id, n, label,
174
- status: 'active',
175
- summary: '',
176
- steps: [],
177
- };
178
- this.#entries.push(iter);
179
- this.#iterationStack.push(id);
180
- this.#render();
181
- return iter;
182
- }
183
-
184
- endIteration(n, { status = 'done', summary = '' } = {}) {
185
- const id = `iter-${n}`;
186
- const iter = this.#entries.find(e => e.kind === 'iteration' && e.id === id);
187
- if (!iter) return;
188
- iter.status = status;
189
- iter.summary = summary;
190
- const idx = this.#iterationStack.lastIndexOf(id);
191
- if (idx >= 0) this.#iterationStack.splice(idx, 1);
192
- this.#render();
193
- }
194
-
195
- finish(summaryLabel, { status = 'done' } = {}) {
196
- const resolved = REASONING_STATUSES.has(status) ? status : 'done';
197
- const isError = resolved === 'error';
198
- for (const entry of this.#entries) {
199
- if (entry.kind === 'step' && entry.status === 'active') {
200
- entry.status = isError ? 'error' : 'done';
201
- }
202
- if (entry.kind === 'iteration') {
203
- if (entry.status === 'active') entry.status = isError ? 'error' : 'done';
204
- for (const s of entry.steps || []) {
205
- if (s.status === 'active') s.status = isError ? 'error' : 'done';
206
- }
207
- }
208
- }
209
- if (this.#timerInterval != null) {
210
- clearInterval(this.#timerInterval);
211
- this.#timerInterval = null;
212
- }
213
- this.status = resolved;
214
- if (summaryLabel) this.dataset.summary = summaryLabel;
215
- this.#render();
216
- this.dispatchEvent(new CustomEvent('reasoning-finish', {
217
- bubbles: true,
218
- detail: { summary: summaryLabel || '', status: resolved },
219
- }));
220
-
221
- if (this.#finishTimer != null) clearTimeout(this.#finishTimer);
222
- if (!this.noAutocollapse && !isError) {
223
- this.#finishTimer = setTimeout(() => {
224
- this.#finishTimer = null;
225
- this.collapsed = true;
226
- this.#render();
227
- }, 1200);
228
- }
229
- }
230
-
231
- fail(summaryLabel) {
232
- this.finish(summaryLabel, { status: 'error' });
233
- }
234
-
235
- // ── Private ──
236
-
237
- #appendToCurrentScope(entry) {
238
- if (this.#iterationStack.length > 0) {
239
- const topId = this.#iterationStack[this.#iterationStack.length - 1];
240
- const iter = this.#entries.find(e => e.kind === 'iteration' && e.id === topId);
241
- if (iter) {
242
- if (entry.kind === 'step') iter.steps.push(entry);
243
- else this.#entries.push(entry);
244
- return;
245
- }
246
- }
247
- this.#entries.push(entry);
248
- }
249
-
250
- #findStep(id) {
251
- for (const e of this.#entries) {
252
- if (e.kind === 'step' && e.id === id) return e;
253
- if (e.kind === 'iteration') {
254
- for (const s of e.steps || []) if (s.id === id) return s;
255
- }
256
- }
257
- return null;
258
- }
259
-
260
- #onSummaryClick = () => {
261
- this.collapsed = !this.collapsed;
262
- this.dispatchEvent(new CustomEvent('reasoning-toggle', {
263
- bubbles: true,
264
- detail: { collapsed: this.collapsed },
265
- }));
266
- this.#render();
267
- };
268
-
269
- // Keyboard activation — Space/Enter toggle (matches role="button" semantics).
270
- #onSummaryKey = (e) => {
271
- if (e.key === ' ' || e.key === 'Enter') {
272
- e.preventDefault();
273
- this.#onSummaryClick();
274
- }
275
- };
276
-
277
- #buildShell() {
278
- this.innerHTML = '';
279
-
280
- // Summary is a click-to-toggle row; mark up + key-activate so it
281
- // behaves like a button under keyboard nav too.
282
- this.#summaryEl = document.createElement('div');
283
- this.#summaryEl.setAttribute('data-reasoning-summary', '');
284
- this.#summaryEl.setAttribute('role', 'button');
285
- this.#summaryEl.setAttribute('tabindex', '0');
286
- this.#summaryEl.setAttribute('aria-expanded', String(!this.collapsed));
287
- this.#summaryEl.addEventListener('click', this.#onSummaryClick);
288
- this.#summaryEl.addEventListener('keydown', this.#onSummaryKey);
289
- this.appendChild(this.#summaryEl);
290
-
291
- this.#bodyEl = document.createElement('div');
292
- this.#bodyEl.setAttribute('data-reasoning-body', '');
293
- this.#bodyEl.addEventListener('timeline-toggle', this.#onStepToggle);
294
- this.appendChild(this.#bodyEl);
295
-
296
- this.#render();
297
- }
298
-
299
- #activeLabel() {
300
- for (let i = this.#entries.length - 1; i >= 0; i--) {
301
- const e = this.#entries[i];
302
- if (e.kind === 'step' && e.status === 'active') return e.label;
303
- if (e.kind === 'iteration') {
304
- for (let j = (e.steps || []).length - 1; j >= 0; j--) {
305
- const s = e.steps[j];
306
- if (s.status === 'active') return s.label;
307
- }
308
- }
309
- if (e.kind === 'thought') return e.text;
310
- }
311
- const lastStep = this.#entries.findLast?.(e => e.kind === 'step');
312
- return lastStep?.label || this.heading || 'Thinking…';
313
- }
314
-
315
- #renderStatusIcon(status) {
316
- switch (status) {
317
- case 'done':
318
- return '<icon-ui name="check-circle" color="success" data-reasoning-check></icon-ui>';
319
- case 'error':
320
- return '<icon-ui name="warning-circle" color="danger" data-reasoning-check data-error></icon-ui>';
321
- case 'idle':
322
- return '<icon-ui name="circle" color="muted" data-reasoning-check data-idle></icon-ui>';
323
- case 'active':
324
- default:
325
- return '<span data-reasoning-spinner></span>';
326
- }
327
- }
328
-
329
- #countSteps() {
330
- let total = 0, done = 0;
331
- const tally = (s) => { total++; if (s.status === 'done') done++; };
332
- for (const e of this.#entries) {
333
- if (e.kind === 'step') tally(e);
334
- if (e.kind === 'iteration') for (const s of e.steps || []) tally(s);
335
- }
336
- return { total, done };
337
- }
338
-
339
- #render() {
340
- if (!this.#summaryEl) return;
341
-
342
- const status = REASONING_STATUSES.has(this.status) ? this.status : 'active';
343
- const isFinal = status === 'done' || status === 'error';
344
- const { total, done } = this.#countSteps();
345
- const elapsed = Math.round((Date.now() - this.#startTime) / 1000);
346
- const label = isFinal && this.dataset.summary ? this.dataset.summary : this.#activeLabel();
347
-
348
- this.#summaryEl.innerHTML = `
349
- ${this.#renderStatusIcon(status)}
350
- <span data-reasoning-label>${escapeText(label)}</span>
351
- <span data-reasoning-meta>
352
- ${total ? `<span data-reasoning-counter>${done}/${total}</span>` : ''}
353
- <span data-reasoning-time>${elapsed}s</span>
354
- <icon-ui name="${this.collapsed ? 'caret-right' : 'caret-up'}" color="muted" data-reasoning-chevron></icon-ui>
355
- </span>
356
- `;
357
-
358
- this.#bodyEl.hidden = this.collapsed;
359
- this.#summaryEl.setAttribute('aria-expanded', String(!this.collapsed));
360
- if (this.collapsed) return;
361
-
362
- // Body rendering: we group contiguous steps into timeline-ui blocks and
363
- // render plan/thought/iteration as sibling nodes between them. Keeping
364
- // steps contiguous preserves timeline-ui's connector line.
365
- this.#bodyEl.innerHTML = '';
366
- let currentTimeline = null;
367
- for (const entry of this.#entries) {
368
- if (entry.kind === 'step') {
369
- if (!currentTimeline) {
370
- currentTimeline = this.#makeTimeline();
371
- this.#bodyEl.appendChild(currentTimeline);
372
- }
373
- currentTimeline.appendChild(this.#makeStepItem(entry));
374
- } else {
375
- currentTimeline = null;
376
- this.#bodyEl.appendChild(this.#renderNonStep(entry));
377
- }
378
- }
379
- }
380
-
381
- #makeTimeline() {
382
- const tl = document.createElement('timeline-ui');
383
- tl.setAttribute('size', 'sm');
384
- return tl;
385
- }
386
-
387
- #makeStepItem(step) {
388
- const item = document.createElement('timeline-item-ui');
389
- item.setAttribute('text', step.label || '');
390
- // Map step.status → canonical timeline-item-ui [status] enum.
391
- // The legacy [completed]/[active]/[error] Booleans were removed
392
- // in the Phase 6 cut (2026-04-27); only [status] is honoured.
393
- if (step.status === 'done') item.setAttribute('status', 'completed');
394
- if (step.status === 'error') item.setAttribute('status', 'error');
395
- if (step.status === 'active') { item.setAttribute('status', 'active'); item.setAttribute('spinner', ''); }
396
-
397
- const duration = step.durationLabel
398
- || (step.duration != null ? formatDuration(step.duration) : '');
399
- if (duration) item.setAttribute('duration', duration);
400
-
401
- if (step.outcomes?.length) item.outcomes = step.outcomes;
402
-
403
- // Step id stamped on dataset so the parent's delegated #onStepToggle
404
- // listener (wired in #buildShell) can resolve which step fired.
405
- item.dataset.stepId = step.id || '';
406
- return item;
407
- }
408
-
409
- #renderNonStep(entry) {
410
- switch (entry.kind) {
411
- case 'thought': return this.#renderThought(entry);
412
- case 'plan': return this.#renderPlan(entry);
413
- case 'iteration': return this.#renderIteration(entry);
414
- default: return document.createTextNode('');
415
- }
416
- }
417
-
418
- #renderThought(entry) {
419
- const el = document.createElement('div');
420
- el.setAttribute('data-reasoning-thought', '');
421
- const text = document.createElement('span');
422
- text.setAttribute('data-reasoning-thought-text', '');
423
- text.textContent = entry.text || '';
424
- el.appendChild(text);
425
- return el;
426
- }
427
-
428
- #renderPlan(entry) {
429
- const el = document.createElement('div');
430
- el.setAttribute('data-reasoning-plan', '');
431
- const label = document.createElement('div');
432
- label.setAttribute('data-reasoning-plan-label', '');
433
- label.textContent = 'Plan';
434
- el.appendChild(label);
435
- const list = document.createElement('ol');
436
- list.setAttribute('data-reasoning-plan-list', '');
437
- for (const item of (entry.items || [])) {
438
- const li = document.createElement('li');
439
- li.textContent = item;
440
- list.appendChild(li);
441
- }
442
- el.appendChild(list);
443
- return el;
444
- }
445
-
446
- #renderIteration(entry) {
447
- const el = document.createElement('div');
448
- el.setAttribute('data-reasoning-iteration', '');
449
- if (entry.status === 'active') el.setAttribute('data-active', '');
450
- if (entry.status === 'done') el.setAttribute('data-done', '');
451
- if (entry.status === 'error') el.setAttribute('data-error', '');
452
-
453
- const header = document.createElement('div');
454
- header.setAttribute('data-reasoning-iter-header', '');
455
- const statusIcon = entry.status === 'done'
456
- ? '<icon-ui name="check-circle" color="success" size="sm"></icon-ui>'
457
- : entry.status === 'error'
458
- ? '<icon-ui name="warning" color="danger" size="sm"></icon-ui>'
459
- : '<span data-reasoning-spinner data-small></span>';
460
- header.innerHTML = `
461
- ${statusIcon}
462
- <span data-reasoning-iter-n>#${entry.n}</span>
463
- <span data-reasoning-iter-label>${escapeText(entry.label || '')}</span>
464
- ${entry.summary ? `<span data-reasoning-iter-summary>${escapeText(entry.summary)}</span>` : ''}
465
- `;
466
- el.appendChild(header);
467
-
468
- if (entry.steps?.length) {
469
- const tl = this.#makeTimeline();
470
- for (const s of entry.steps) tl.appendChild(this.#makeStepItem(s));
471
- el.appendChild(tl);
472
- }
473
- return el;
474
- }
475
-
476
- #tickTimers() {
477
- if (this.status === 'done' || this.status === 'error') return;
478
- const elapsed = Math.round((Date.now() - this.#startTime) / 1000);
479
- const timeEl = this.#summaryEl?.querySelector('[data-reasoning-time]');
480
- if (timeEl) timeEl.textContent = elapsed + 's';
481
-
482
- // Live-update active step durations inside nested timeline-item-ui
483
- const elapsedLabel = elapsed + 's';
484
- for (const item of this.querySelectorAll('timeline-item-ui[active]:not([completed])')) {
485
- // Only mirror the ticking label; do not stomp a durationLabel author set
486
- if (!item.dataset._frozenDuration) {
487
- item.setAttribute('duration', elapsedLabel);
488
- }
489
- }
490
- }
491
- }
492
-
493
- function escapeText(s) {
494
- return String(s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
495
- }
12
+ import { defineIfFree } from '../../core/register.js';
13
+ import { UIAgentReasoning } from './class.js';
496
14
 
497
- function formatDuration(ms) {
498
- if (ms < 1000) return ms + 'ms';
499
- return Math.round(ms / 1000) + 's';
500
- }
15
+ defineIfFree('agent-reasoning-ui', UIAgentReasoning);
501
16
 
502
- customElements.define('agent-reasoning-ui', UIAgentReasoning);
503
17
  export { UIAgentReasoning };
@@ -7,6 +7,11 @@ component: AgentReasoning
7
7
  category: agent
8
8
  version: 1
9
9
  description: Agent inner monologue + pipeline viewer with steps, thoughts, plans, and iterations.
10
+ # Per ADR-0027 — primitives that programmatically create other primitives
11
+ # do NOT auto-import them. Consumer (or demo shell) must explicitly import.
12
+ composes:
13
+ - timeline-ui
14
+ - timeline-item-ui
10
15
  props:
11
16
  noAutocollapse:
12
17
  description: Disable auto-collapse after finish().