@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,180 +1,17 @@
1
- import { UIElement } from '../../core/element.js';
2
-
3
1
  /**
4
- * <pipeline-status-ui>Single updating pipeline status indicator.
2
+ * `<pipeline-status-ui>`auto-registers the tag on import.
3
+ *
4
+ * For non-side-effect class import (test isolation, tag override), use
5
+ * the `class` subpath:
5
6
  *
6
- * Shows the current stage with a message. Completed stages collapse into
7
- * an expandable history log. Auto-collapses when the pipeline finishes.
7
+ * import { UIPipelineStatus } from '@adia-ai/web-components/components/pipeline-status/class';
8
8
  *
9
- * Properties:
10
- * stage : String — current stage name (interpret, analyze, plan, generate, validate, render)
11
- * message : String — current stage description
12
- * status : String — 'idle' | 'active' | 'completed' | 'error'. Set to
13
- * 'completed' to render the final state and collapse
14
- * the history log.
9
+ * @see ../../USAGE.md#registration--auto-vs-explicit
15
10
  */
16
11
 
17
- const STAGE_LABELS = {
18
- interpret: 'Interpreting',
19
- analyze: 'Analyzing',
20
- plan: 'Planning',
21
- generate: 'Generating',
22
- validate: 'Validating',
23
- render: 'Rendering',
24
- };
25
-
26
- class UIPipelineStatus extends UIElement {
27
- static properties = {
28
- stage: { type: String, default: '', reflect: true },
29
- message: { type: String, default: '', reflect: true },
30
- // `status` is the canonical stage-progress shape (matches timeline-item-ui,
31
- // stepper-item-ui, agent-reasoning-ui).
32
- status: { type: String, default: 'idle', reflect: true },
33
- };
34
-
35
- static template = () => null;
36
-
37
- #history = [];
38
- #bound = false;
39
- #containerEl = null;
40
- #currentEl = null;
41
- #dotEl = null;
42
- #labelEl = null;
43
- #msgEl = null;
44
- #detailsEl = null;
45
- #summaryEl = null;
46
- #logEl = null;
47
- #prevStage = '';
48
- #prevMessage = '';
49
-
50
- connected() {
51
- this.setAttribute('role', 'status');
52
- this.setAttribute('aria-label', 'Pipeline status');
53
- }
54
-
55
- render() {
56
- if (!this.#bound) {
57
- this.#bound = true;
58
- this.#buildDOM();
59
- }
60
-
61
- this.#update();
62
- }
63
-
64
- #buildDOM() {
65
- this.#containerEl = document.createElement('div');
66
- this.#containerEl.setAttribute('data-pipeline-status', '');
67
-
68
- // Current stage row
69
- this.#currentEl = document.createElement('div');
70
- this.#currentEl.setAttribute('data-pipeline-current', '');
71
-
72
- this.#dotEl = document.createElement('span');
73
- this.#dotEl.setAttribute('data-pipeline-dot', '');
74
-
75
- this.#labelEl = document.createElement('span');
76
- this.#labelEl.setAttribute('data-pipeline-label', '');
77
-
78
- this.#msgEl = document.createElement('span');
79
- this.#msgEl.setAttribute('data-pipeline-msg', '');
80
-
81
- this.#currentEl.append(this.#dotEl, this.#labelEl, this.#msgEl);
82
-
83
- // History (expandable)
84
- this.#detailsEl = document.createElement('details');
85
- this.#detailsEl.setAttribute('data-pipeline-history', '');
86
- this.#detailsEl.hidden = true;
87
-
88
- this.#summaryEl = document.createElement('summary');
89
- this.#detailsEl.appendChild(this.#summaryEl);
90
-
91
- this.#logEl = document.createElement('ol');
92
- this.#logEl.setAttribute('data-pipeline-log', '');
93
- this.#detailsEl.appendChild(this.#logEl);
94
-
95
- this.#containerEl.append(this.#currentEl, this.#detailsEl);
96
- this.appendChild(this.#containerEl);
97
- }
98
-
99
- #update() {
100
- const { stage, message } = this;
101
-
102
- if (this.status === 'completed') {
103
- // Move current to history if not already
104
- if (this.#prevStage && this.#prevStage !== this.#history[this.#history.length - 1]?.stage) {
105
- this.#pushHistory(this.#prevStage, this.#prevMessage);
106
- }
107
- // Final state
108
- this.#dotEl.setAttribute('data-pipeline-dot', 'complete');
109
- this.#labelEl.textContent = 'Complete';
110
- this.#msgEl.textContent = '';
111
- this.#updateHistoryUI();
112
- return;
113
- }
114
-
115
- // Stage transition: push previous to history
116
- if (stage && stage !== this.#prevStage && this.#prevStage) {
117
- this.#pushHistory(this.#prevStage, this.#prevMessage);
118
- }
119
-
120
- // Update current
121
- const label = STAGE_LABELS[stage] || stage;
122
- this.#dotEl.setAttribute('data-pipeline-dot', 'active');
123
- this.#dotEl.setAttribute('data-stage', stage);
124
- this.#labelEl.textContent = label;
125
- this.#msgEl.textContent = message ? `— ${message}` : '';
126
-
127
- this.#prevStage = stage;
128
- this.#prevMessage = message;
129
-
130
- this.#updateHistoryUI();
131
- }
132
-
133
- #pushHistory(stage, message) {
134
- this.#history.push({ stage, message, timestamp: Date.now() });
135
- }
136
-
137
- #updateHistoryUI() {
138
- if (this.#history.length === 0) {
139
- this.#detailsEl.hidden = true;
140
- return;
141
- }
142
-
143
- this.#detailsEl.hidden = false;
144
- this.#summaryEl.textContent = `${this.#history.length} step${this.#history.length > 1 ? 's' : ''} completed`;
145
-
146
- // Rebuild log
147
- this.#logEl.innerHTML = '';
148
- for (const entry of this.#history) {
149
- const li = document.createElement('li');
150
- const dot = document.createElement('span');
151
- dot.setAttribute('data-pipeline-dot', 'complete');
152
- const text = document.createElement('span');
153
- const label = STAGE_LABELS[entry.stage] || entry.stage;
154
- text.textContent = entry.message ? `${label} — ${entry.message}` : label;
155
- li.append(dot, text);
156
- this.#logEl.appendChild(li);
157
- }
158
-
159
- // Auto-close when complete
160
- if (this.status === 'completed') {
161
- this.#detailsEl.removeAttribute('open');
162
- }
163
- }
164
-
165
- disconnected() {
166
- this.#containerEl = null;
167
- this.#currentEl = null;
168
- this.#dotEl = null;
169
- this.#labelEl = null;
170
- this.#msgEl = null;
171
- this.#detailsEl = null;
172
- this.#summaryEl = null;
173
- this.#logEl = null;
174
- this.#bound = false;
175
- }
176
- }
12
+ import { defineIfFree } from '../../core/register.js';
13
+ import { UIPipelineStatus } from './class.js';
177
14
 
178
- customElements.define('pipeline-status-ui', UIPipelineStatus);
15
+ defineIfFree('pipeline-status-ui', UIPipelineStatus);
179
16
 
180
17
  export { UIPipelineStatus };
@@ -1,5 +1,3 @@
1
- # Generated by scripts/migrate-yamls-to-v1.mjs — migrated to v1 contract.
2
- # Edit this file; run `npm run build:components` to regenerate a2ui.json.
3
1
  $schema: ../../../../scripts/schemas/component.yaml.schema.json
4
2
  name: UIPipelineStatus
5
3
  tag: pipeline-status-ui
@@ -9,91 +7,55 @@ version: 1
9
7
  description: <pipeline-status-ui> — Single updating pipeline status indicator.
10
8
  props:
11
9
  complete:
12
- description: "Component property: complete."
10
+ description: 'Component property: complete.'
13
11
  type: boolean
14
12
  default: false
15
13
  message:
16
- description: "Component property: message."
14
+ description: 'Component property: message.'
17
15
  type: string
18
- default: ""
16
+ default: ''
19
17
  stage:
20
- description: "Component property: stage."
18
+ description: 'Component property: stage.'
21
19
  type: string
22
- default: ""
20
+ default: ''
23
21
  events: {}
24
22
  slots:
25
23
  default:
26
- description: "Default slot — primary child content."
24
+ description: Default slot — primary child content.
27
25
  states:
28
- - name: idle
29
- description: Default, ready for interaction.
26
+ - name: idle
27
+ description: Default, ready for interaction.
30
28
  traits: []
31
29
  tokens: {}
32
30
  a2ui:
33
31
  rules: []
34
32
  anti_patterns: []
35
33
  examples:
36
- - name: basic-pipeline-status
37
- description: Basic PipelineStatus usage
38
- a2ui: >-
39
- [
40
- {
41
- "id": "root",
42
- "component": "Card",
43
- "children": [
44
- "sec"
45
- ]
46
- },
47
- {
48
- "id": "sec",
49
- "component": "Section",
50
- "children": [
51
- "comp"
52
- ]
53
- },
54
- {
55
- "id": "comp",
56
- "component": "PipelineStatus"
57
- }
58
- ]
59
- - name: stage
60
- description: Pipeline status with a prominent stage label for the current step.
61
- a2ui: >-
62
- [
63
- {
64
- "id": "root",
65
- "component": "PipelineStatus",
66
- "stage": "Building catalog",
67
- "message": "Reading 100 patterns from disk..."
68
- }
69
- ]
70
- - name: message
71
- description: Pipeline status with a secondary progress message updated as the stage advances.
72
- a2ui: >-
73
- [
74
- {
75
- "id": "root",
76
- "component": "PipelineStatus",
77
- "stage": "Running evals",
78
- "message": "32 / 100 intents scored..."
79
- }
80
- ]
81
- - name: complete
82
- description: Pipeline status marked complete; indicator switches to success state.
83
- a2ui: >-
84
- [
85
- {
86
- "id": "root",
87
- "component": "PipelineStatus",
88
- "stage": "Done",
89
- "message": "All 100 intents passed",
90
- "complete": true
91
- }
92
- ]
34
+ - name: basic-pipeline-status
35
+ description: Basic PipelineStatus usage
36
+ a2ui: "[\n {\n \"id\": \"root\",\n \"component\": \"Card\",\n \"children\": [\n \"sec\"\n ]\n },\n {\n\
37
+ \ \"id\": \"sec\",\n \"component\": \"Section\",\n \"children\": [\n \"comp\"\n ]\n },\n {\n \"\
38
+ id\": \"comp\",\n \"component\": \"PipelineStatus\"\n }\n]"
39
+ - name: stage
40
+ description: Pipeline status with a prominent stage label for the current step.
41
+ a2ui: "[\n {\n \"id\": \"root\",\n \"component\": \"PipelineStatus\",\n \"stage\": \"Building catalog\",\n \
42
+ \ \"message\": \"Reading 100 patterns from disk...\"\n }\n]"
43
+ - name: message
44
+ description: Pipeline status with a secondary progress message updated as the stage advances.
45
+ a2ui: "[\n {\n \"id\": \"root\",\n \"component\": \"PipelineStatus\",\n \"stage\": \"Running evals\",\n \"\
46
+ message\": \"32 / 100 intents scored...\"\n }\n]"
47
+ - name: complete
48
+ description: Pipeline status marked complete; indicator switches to success state.
49
+ a2ui: "[\n {\n \"id\": \"root\",\n \"component\": \"PipelineStatus\",\n \"stage\": \"Done\",\n \"message\"\
50
+ : \"All 100 intents passed\",\n \"complete\": true\n }\n]"
93
51
  keywords:
94
- - pipelinestatus
95
- - pipeline-status
96
- - pipeline
97
- - status
98
- synonyms: {}
52
+ - pipelinestatus
53
+ - pipeline-status
54
+ - pipeline
55
+ - status
56
+ synonyms:
57
+ tags:
58
+ - job-status
59
+ - deploy-status
60
+ - pipeline-indicator
99
61
  related: []
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Non-side-effect class export for `<popover-ui>`.
3
+ *
4
+ * Importing this file gives you the class(es) without auto-registering the tag.
5
+ * Useful for test isolation, subclassing with tag-name override, or selective
6
+ * composition.
7
+ *
8
+ * The auto-register path stays at `@adia-ai/web-components/components/popover`
9
+ * (which imports this file + calls `defineIfFree()`).
10
+ *
11
+ * @see ../../USAGE.md#registration--auto-vs-explicit
12
+ */
13
+
14
+ /**
15
+ * <popover-ui trigger="click" placement="bottom-start">
16
+ * <button-ui slot="trigger" text="Open"></button-ui>
17
+ * <div slot="content">Popover content here</div>
18
+ * </popover-ui>
19
+ *
20
+ * Built on the web platform:
21
+ * • Popover API — content has popover="manual"; showPopover() promotes it
22
+ * to the top layer (no z-index, no overflow clipping, ESC bubbling handled).
23
+ * • CSS Anchor Positioning — used natively when supported, JS fallback otherwise
24
+ * (see @core/anchor.js).
25
+ *
26
+ * Triggers: click | hover | manual. ESC closes click/manual popovers.
27
+ */
28
+
29
+ import { UIElement } from '../../core/element.js';
30
+ import { anchorPopover } from '../../core/anchor.js';
31
+
32
+ const HOVER_CLOSE_DELAY = 120;
33
+
34
+ export class UIPopover extends UIElement {
35
+ static properties = {
36
+ placement: { type: String, default: 'bottom', reflect: true },
37
+ gap: { type: Number, default: 4, reflect: true },
38
+ open: { type: Boolean, default: false, reflect: true },
39
+ trigger: { type: String, default: 'click', reflect: true },
40
+ };
41
+
42
+ static template = () => null;
43
+
44
+ #anchorCleanup = null;
45
+ #bound = false;
46
+ #hoverTimer = null;
47
+ #content = null;
48
+ #rafId = null;
49
+
50
+ connected() {
51
+ const content = this.querySelector('[slot="content"]');
52
+ if (content) {
53
+ if (!content.hasAttribute('popover')) content.setAttribute('popover', 'manual');
54
+ // Sync state when the browser toggles the popover (e.g. light-dismiss, ESC on auto, programmatic).
55
+ content.addEventListener('toggle', this.#onToggle);
56
+ this.#content = content;
57
+ }
58
+
59
+ if (!this.#bound) {
60
+ this.#bound = true;
61
+
62
+ if (this.trigger === 'click') {
63
+ this.addEventListener('click', this.#onClick);
64
+ }
65
+
66
+ if (this.trigger === 'hover') {
67
+ this.addEventListener('pointerenter', this.#onEnter);
68
+ this.addEventListener('pointerleave', this.#onLeave);
69
+ // Also let the pointer cross into the content without closing.
70
+ if (content) {
71
+ content.addEventListener('pointerenter', this.#onEnter);
72
+ content.addEventListener('pointerleave', this.#onLeave);
73
+ }
74
+ }
75
+ }
76
+ }
77
+
78
+ render() {
79
+ if (this.open) this.#show();
80
+ else this.#hide();
81
+ }
82
+
83
+ // ── Public API ──
84
+ show() { this.open = true; }
85
+ hide() { this.open = false; }
86
+ toggle() { this.open = !this.open; }
87
+
88
+ // ── Internal ──
89
+
90
+ #show() {
91
+ const trigger = this.querySelector('[slot="trigger"]');
92
+ const content = this.#content ?? this.querySelector('[slot="content"]');
93
+ if (!trigger || !content) return;
94
+
95
+ if (!content.matches(':popover-open')) {
96
+ // try/catch covers test envs (happy-dom) without the API. Known iOS
97
+ // Safari quirks at the supported floor (light-dismiss broken on
98
+ // 17.0–18.2, virtual-keyboard-on-input persists past 18.3) are
99
+ // documented in docs/BROWSER-COMPAT.md §3a.
100
+ try { content.showPopover(); } catch { /* popover API unavailable — anchor positioning still runs */ }
101
+ }
102
+
103
+ this.#anchorCleanup?.();
104
+ this.#anchorCleanup = anchorPopover(trigger, content, {
105
+ placement: this.placement,
106
+ gap: this.gap,
107
+ });
108
+
109
+ if (this.trigger === 'click' || this.trigger === 'manual') {
110
+ // Defer to next frame so the opening click doesn't trigger outside-dismiss.
111
+ this.#rafId = requestAnimationFrame(() => {
112
+ this.#rafId = null;
113
+ document.addEventListener('pointerdown', this.#onOutside);
114
+ document.addEventListener('keydown', this.#onKey);
115
+ });
116
+ }
117
+ }
118
+
119
+ #hide() {
120
+ this.#anchorCleanup?.();
121
+ this.#anchorCleanup = null;
122
+
123
+ const content = this.#content ?? this.querySelector('[slot="content"]');
124
+ if (content?.matches(':popover-open')) {
125
+ try { content.hidePopover(); } catch { /* popover API unavailable */ }
126
+ }
127
+
128
+ if (this.#rafId != null) {
129
+ cancelAnimationFrame(this.#rafId);
130
+ this.#rafId = null;
131
+ }
132
+ document.removeEventListener('pointerdown', this.#onOutside);
133
+ document.removeEventListener('keydown', this.#onKey);
134
+ }
135
+
136
+ // ── Events ──
137
+
138
+ #onClick = (e) => {
139
+ const trigger = this.querySelector('[slot="trigger"]');
140
+ if (trigger && (e.target === trigger || trigger.contains(e.target))) {
141
+ this.open = !this.open;
142
+ }
143
+ };
144
+
145
+ #onOutside = (e) => {
146
+ if (!this.open) return;
147
+ const content = this.#content;
148
+ // Click inside host or inside the (top-layer) content: keep open.
149
+ if (this.contains(e.target) || content?.contains(e.target)) return;
150
+ this.open = false;
151
+ };
152
+
153
+ #onKey = (e) => {
154
+ if (e.key === 'Escape' && this.open) {
155
+ e.stopPropagation();
156
+ this.open = false;
157
+ }
158
+ };
159
+
160
+ #onEnter = () => {
161
+ clearTimeout(this.#hoverTimer);
162
+ this.open = true;
163
+ };
164
+
165
+ #onLeave = () => {
166
+ clearTimeout(this.#hoverTimer);
167
+ this.#hoverTimer = setTimeout(() => { this.open = false; }, HOVER_CLOSE_DELAY);
168
+ };
169
+
170
+ #onToggle = (e) => {
171
+ // Reflect browser-driven state changes (e.g. popover-auto light-dismiss).
172
+ const nowOpen = e.newState === 'open';
173
+ if (nowOpen !== this.open) this.open = nowOpen;
174
+ };
175
+
176
+ disconnected() {
177
+ clearTimeout(this.#hoverTimer);
178
+ this.#hide();
179
+ if (this.trigger === 'click') {
180
+ this.removeEventListener('click', this.#onClick);
181
+ }
182
+ if (this.trigger === 'hover') {
183
+ this.removeEventListener('pointerenter', this.#onEnter);
184
+ this.removeEventListener('pointerleave', this.#onLeave);
185
+ if (this.#content) {
186
+ this.#content.removeEventListener('pointerenter', this.#onEnter);
187
+ this.#content.removeEventListener('pointerleave', this.#onLeave);
188
+ }
189
+ }
190
+ this.#content?.removeEventListener('toggle', this.#onToggle);
191
+ this.#content = null;
192
+ this.#bound = false;
193
+ }
194
+ }
@@ -59,6 +59,7 @@
59
59
  "x-adiaui": {
60
60
  "anti_patterns": [],
61
61
  "category": "container",
62
+ "composes": [],
62
63
  "events": {},
63
64
  "examples": [
64
65
  {
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `<popover-ui>` — Popover using Popover API + CSS Anchor Positioning. Triggers: click, hover, manual.
3
+ *
4
+ * @see https://ui-kit.exe.xyz/site/components/popover
5
+ *
6
+ * Type declarations generated by scripts/build/dts-codegen.mjs from
7
+ * the component's `.a2ui.json` sidecar. Edit the source `.yaml`,
8
+ * run `npm run build:components`, then `npm run codegen:dts` to
9
+ * regenerate; or hand-author this file fully if rich event types are
10
+ * needed beyond what the yaml `events:` block can express.
11
+ */
12
+
13
+ import { UIElement } from '../../core/element.js';
14
+
15
+ export class UIPopover extends UIElement {
16
+ /** Pixel offset between the anchor and the popover */
17
+ gap: number;
18
+ /** Controls visibility via showPopover()/hidePopover() */
19
+ open: boolean;
20
+ /** Popover placement */
21
+ placement: 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end';
22
+ /** Trigger mode */
23
+ trigger: 'click' | 'hover' | 'manual';
24
+ }