@adia-ai/web-components 0.8.40 → 0.8.42

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 (410) hide show
  1. package/CHANGELOG.md +71 -3
  2. package/MIGRATION.md +1229 -16
  3. package/README.md +25 -30
  4. package/USAGE.md +30 -4
  5. package/bin/audit-template-children.mjs +556 -0
  6. package/components/accordion/accordion-item.a2ui.json +4 -0
  7. package/components/accordion/accordion-item.yaml +2 -0
  8. package/components/accordion/accordion.a2ui.json +4 -0
  9. package/components/accordion/accordion.yaml +2 -0
  10. package/components/action-list/action-item.a2ui.json +29 -2
  11. package/components/action-list/action-item.yaml +46 -3
  12. package/components/action-list/action-list.a2ui.json +6 -1
  13. package/components/action-list/action-list.class.js +114 -11
  14. package/components/action-list/action-list.css +43 -3
  15. package/components/action-list/action-list.d.ts +6 -2
  16. package/components/action-list/action-list.yaml +5 -0
  17. package/components/adia-mark/adia-mark.a2ui.json +1 -0
  18. package/components/adia-wordmark/adia-wordmark.a2ui.json +1 -0
  19. package/components/agent-artifact/agent-artifact.a2ui.json +1 -0
  20. package/components/agent-feedback-bar/agent-feedback-bar.a2ui.json +6 -5
  21. package/components/agent-feedback-bar/agent-feedback-bar.yaml +6 -2
  22. package/components/agent-questions/agent-questions.a2ui.json +1 -0
  23. package/components/agent-reasoning/agent-reasoning.a2ui.json +6 -5
  24. package/components/agent-reasoning/agent-reasoning.yaml +6 -2
  25. package/components/agent-suggestions/agent-suggestions.a2ui.json +11 -2
  26. package/components/agent-suggestions/agent-suggestions.class.js +2 -1
  27. package/components/agent-suggestions/agent-suggestions.d.ts +4 -4
  28. package/components/agent-suggestions/agent-suggestions.yaml +4 -2
  29. package/components/agent-trace/agent-trace.a2ui.json +6 -5
  30. package/components/agent-trace/agent-trace.yaml +6 -2
  31. package/components/alert/alert.a2ui.json +1 -0
  32. package/components/alert/alert.css +1 -1
  33. package/components/anchor-bar/anchor-bar.a2ui.json +1 -0
  34. package/components/aside/aside.a2ui.json +1 -0
  35. package/components/avatar/avatar-group.a2ui.json +7 -1
  36. package/components/avatar/avatar-group.yaml +1 -0
  37. package/components/avatar/avatar.a2ui.json +12 -11
  38. package/components/avatar/avatar.d.ts +1 -1
  39. package/components/avatar/avatar.yaml +4 -4
  40. package/components/badge/badge.a2ui.json +1 -0
  41. package/components/block/block.a2ui.json +1 -0
  42. package/components/blockquote/blockquote.a2ui.json +1 -0
  43. package/components/breadcrumb/breadcrumb.a2ui.json +1 -0
  44. package/components/button/button.a2ui.json +1 -3
  45. package/components/button/button.yaml +1 -3
  46. package/components/calendar-grid/calendar-grid.a2ui.json +1 -0
  47. package/components/calendar-grid/calendar-grid.class.js +2 -1
  48. package/components/calendar-picker/calendar-picker.a2ui.json +143 -24
  49. package/components/calendar-picker/calendar-picker.class.js +490 -197
  50. package/components/calendar-picker/calendar-picker.css +120 -171
  51. package/components/calendar-picker/calendar-picker.yaml +225 -47
  52. package/components/canvas/canvas.a2ui.json +6 -5
  53. package/components/canvas/canvas.d.ts +37 -0
  54. package/components/canvas/canvas.js +72 -3
  55. package/components/canvas/canvas.yaml +6 -2
  56. package/components/card/card.a2ui.json +25 -2
  57. package/components/card/card.class.js +3 -0
  58. package/components/card/card.css +31 -1
  59. package/components/card/card.d.ts +2 -2
  60. package/components/card/card.examples.md +3 -3
  61. package/components/card/card.yaml +28 -4
  62. package/components/chart/chart.a2ui.json +27 -7
  63. package/components/chart/chart.class.js +64 -22
  64. package/components/chart/chart.css +6 -4
  65. package/components/chart/chart.d.ts +10 -4
  66. package/components/chart/chart.yaml +40 -6
  67. package/components/chart-legend/chart-legend.a2ui.json +7 -1
  68. package/components/chart-legend/chart-legend.class.js +59 -6
  69. package/components/chart-legend/chart-legend.css +5 -2
  70. package/components/chart-legend/chart-legend.d.ts +3 -1
  71. package/components/chart-legend/chart-legend.yaml +15 -1
  72. package/components/chat-thread/chat-input.a2ui.json +1 -0
  73. package/components/chat-thread/chat-thread.a2ui.json +10 -9
  74. package/components/chat-thread/chat-thread.yaml +13 -20
  75. package/components/check/check.a2ui.json +10 -9
  76. package/components/check/check.yaml +4 -4
  77. package/components/code/code.a2ui.json +1 -0
  78. package/components/col/col.a2ui.json +1 -0
  79. package/components/color-area/color-area.a2ui.json +148 -0
  80. package/components/color-area/color-area.class.js +657 -0
  81. package/components/color-area/color-area.css +188 -0
  82. package/components/color-area/color-area.d.ts +66 -0
  83. package/components/color-area/color-area.examples.md +19 -0
  84. package/components/color-area/color-area.js +17 -0
  85. package/components/color-area/color-area.yaml +183 -0
  86. package/components/color-input/color-input.a2ui.json +6 -5
  87. package/components/color-input/color-input.class.js +9 -6
  88. package/components/color-input/color-input.css +1 -1
  89. package/components/color-input/color-input.js +2 -2
  90. package/components/color-input/color-input.yaml +14 -12
  91. package/components/color-picker/color-picker.a2ui.json +16 -12
  92. package/components/color-picker/color-picker.class.js +24 -633
  93. package/components/color-picker/color-picker.css +14 -182
  94. package/components/color-picker/color-picker.yaml +41 -41
  95. package/components/combobox/combobox.a2ui.json +3 -2
  96. package/components/combobox/combobox.yaml +2 -2
  97. package/components/command/command.a2ui.json +12 -10
  98. package/components/command/command.class.js +3 -2
  99. package/components/command/command.yaml +17 -4
  100. package/components/context-menu/context-menu.a2ui.json +1 -0
  101. package/components/date-range-picker/date-range-picker.a2ui.json +2 -1
  102. package/components/date-range-picker/date-range-picker.yaml +1 -1
  103. package/components/datetime-picker/datetime-picker.a2ui.json +15 -108
  104. package/components/datetime-picker/datetime-picker.class.js +37 -690
  105. package/components/datetime-picker/datetime-picker.css +11 -183
  106. package/components/datetime-picker/datetime-picker.d.ts +4 -5
  107. package/components/datetime-picker/datetime-picker.yaml +44 -135
  108. package/components/demo-toggle/demo-toggle.a2ui.json +1 -0
  109. package/components/demo-toggle/demo-toggle.css +1 -1
  110. package/components/description-list/description-list.a2ui.json +2 -1
  111. package/components/description-list/description-list.css +1 -1
  112. package/components/description-list/description-list.d.ts +1 -1
  113. package/components/description-list/description-list.yaml +1 -1
  114. package/components/display-field/display-field.a2ui.json +1 -0
  115. package/components/divider/divider.a2ui.json +1 -0
  116. package/components/drawer/drawer.a2ui.json +1 -3
  117. package/components/drawer/drawer.css +1 -1
  118. package/components/drawer/drawer.yaml +0 -2
  119. package/components/drilldown/drilldown.a2ui.json +22 -20
  120. package/components/drilldown/drilldown.class.js +4 -3
  121. package/components/drilldown/drilldown.css +6 -6
  122. package/components/drilldown/drilldown.yaml +40 -9
  123. package/components/embed/embed.a2ui.json +6 -5
  124. package/components/embed/embed.yaml +2 -2
  125. package/components/empty-state/empty-state.a2ui.json +1 -0
  126. package/components/feed/feed-item.a2ui.json +25 -5
  127. package/components/feed/feed-item.yaml +28 -7
  128. package/components/feed/feed.a2ui.json +9 -2
  129. package/components/feed/feed.class.js +19 -12
  130. package/components/feed/feed.css +8 -8
  131. package/components/feed/feed.yaml +14 -1
  132. package/components/field/field.a2ui.json +2 -1
  133. package/components/field/field.class.js +4 -1
  134. package/components/field/field.examples.md +1 -1
  135. package/components/field/field.yaml +1 -1
  136. package/components/fields/fields.a2ui.json +1 -0
  137. package/components/fields/fields.examples.md +1 -1
  138. package/components/footer/footer.a2ui.json +1 -0
  139. package/components/frame/frame.a2ui.json +1 -0
  140. package/components/grid/grid.a2ui.json +1 -0
  141. package/components/header/header.a2ui.json +3 -2
  142. package/components/header/header.yaml +3 -3
  143. package/components/heatmap/heatmap.a2ui.json +2 -1
  144. package/components/heatmap/heatmap.class.js +1 -1
  145. package/components/heatmap/heatmap.css +4 -4
  146. package/components/heatmap/heatmap.yaml +1 -1
  147. package/components/icon/icon.a2ui.json +1 -0
  148. package/components/image/image.a2ui.json +28 -14
  149. package/components/image/image.class.js +38 -23
  150. package/components/image/image.css +18 -8
  151. package/components/image/image.d.ts +2 -2
  152. package/components/image/image.examples.md +3 -3
  153. package/components/image/image.yaml +23 -7
  154. package/components/index.js +1 -0
  155. package/components/inline-edit/inline-edit.a2ui.json +1 -0
  156. package/components/inline-message/inline-message.a2ui.json +3 -1
  157. package/components/inline-message/inline-message.class.js +3 -1
  158. package/components/inline-message/inline-message.d.ts +2 -2
  159. package/components/inline-message/inline-message.yaml +2 -1
  160. package/components/input/input.a2ui.json +66 -16
  161. package/components/input/input.class.js +64 -7
  162. package/components/input/input.css +14 -14
  163. package/components/input/input.d.ts +9 -4
  164. package/components/input/input.yaml +83 -10
  165. package/components/inspector/inspector.a2ui.json +1 -0
  166. package/components/integration-card/integration-card.a2ui.json +1 -0
  167. package/components/integration-card/integration-card.examples.md +2 -1
  168. package/components/kbd/kbd.a2ui.json +1 -0
  169. package/components/link/link.a2ui.json +2 -1
  170. package/components/link/link.yaml +1 -1
  171. package/components/list/list-item.a2ui.json +9 -0
  172. package/components/list/list-item.yaml +12 -0
  173. package/components/list/list.a2ui.json +9 -3
  174. package/components/list/list.class.js +14 -1
  175. package/components/list/list.css +12 -1
  176. package/components/list/list.d.ts +7 -5
  177. package/components/list/list.yaml +16 -6
  178. package/components/list-window/list-window.a2ui.json +1 -0
  179. package/components/list-window/list-window.class.js +2 -1
  180. package/components/loading-overlay/loading-overlay.a2ui.json +1 -0
  181. package/components/mark/mark.a2ui.json +2 -1
  182. package/components/mark/mark.yaml +1 -1
  183. package/components/menu/menu-divider.a2ui.json +1 -0
  184. package/components/menu/menu-item.a2ui.json +11 -4
  185. package/components/menu/menu-item.yaml +30 -3
  186. package/components/menu/menu-label.a2ui.json +1 -0
  187. package/components/menu/menu.a2ui.json +3 -2
  188. package/components/menu/menu.class.js +36 -8
  189. package/components/menu/menu.d.ts +5 -3
  190. package/components/menu/menu.yaml +3 -3
  191. package/components/modal/modal.a2ui.json +1 -0
  192. package/components/nav/nav.a2ui.json +1 -0
  193. package/components/nav/nav.class.js +14 -3
  194. package/components/nav-group/nav-group.a2ui.json +1 -0
  195. package/components/nav-group/nav-group.class.js +3 -1
  196. package/components/nav-item/nav-item.a2ui.json +1 -0
  197. package/components/noodles/noodles.a2ui.json +1 -0
  198. package/components/noodles/noodles.class.js +5 -1
  199. package/components/number-format/number-format.a2ui.json +1 -0
  200. package/components/option-card/option-card.a2ui.json +1 -0
  201. package/components/otp-input/otp-input.a2ui.json +3 -2
  202. package/components/otp-input/otp-input.yaml +9 -2
  203. package/components/page/page.a2ui.json +13 -0
  204. package/components/page/page.d.ts +1 -1
  205. package/components/page/page.yaml +1 -0
  206. package/components/pagination/pagination.a2ui.json +1 -0
  207. package/components/pagination/pagination.class.js +3 -2
  208. package/components/pane/pane.a2ui.json +17 -1
  209. package/components/pane/pane.class.js +35 -6
  210. package/components/pane/pane.css +17 -12
  211. package/components/pane/pane.d.ts +10 -7
  212. package/components/pane/pane.yaml +18 -1
  213. package/components/password-strength/password-strength.a2ui.json +1 -0
  214. package/components/pipeline-status/pipeline-status.a2ui.json +1 -0
  215. package/components/popover/popover.a2ui.json +7 -6
  216. package/components/popover/popover.class.js +2 -2
  217. package/components/popover/popover.d.ts +2 -2
  218. package/components/popover/popover.yaml +4 -4
  219. package/components/preview/preview.a2ui.json +1 -0
  220. package/components/preview/preview.class.js +5 -1
  221. package/components/progress/progress.a2ui.json +47 -24
  222. package/components/progress/progress.class.js +66 -11
  223. package/components/progress/progress.css +44 -26
  224. package/components/progress/progress.d.ts +7 -5
  225. package/components/progress/progress.examples.md +2 -2
  226. package/components/progress/progress.yaml +235 -53
  227. package/components/progress-row/progress-row.a2ui.json +16 -12
  228. package/components/progress-row/progress-row.d.ts +2 -2
  229. package/components/progress-row/progress-row.examples.md +2 -14
  230. package/components/progress-row/progress-row.yaml +28 -36
  231. package/components/qr-code/qr-code.a2ui.json +3 -2
  232. package/components/qr-code/qr-code.class.js +4 -4
  233. package/components/qr-code/qr-code.css +1 -1
  234. package/components/qr-code/qr-code.yaml +5 -3
  235. package/components/radio/radio.a2ui.json +8 -7
  236. package/components/radio/radio.class.js +8 -0
  237. package/components/radio/radio.yaml +3 -3
  238. package/components/radio-group/radio-group.a2ui.json +5 -3
  239. package/components/radio-group/radio-group.class.js +11 -0
  240. package/components/radio-group/radio-group.yaml +7 -1
  241. package/components/range/range.a2ui.json +6 -0
  242. package/components/range/range.class.js +2 -2
  243. package/components/range/range.css +2 -2
  244. package/components/range/range.yaml +3 -0
  245. package/components/rating/rating.a2ui.json +1 -0
  246. package/components/relative-time/relative-time.a2ui.json +1 -0
  247. package/components/richtext/richtext.a2ui.json +2 -1
  248. package/components/richtext/richtext.yaml +1 -1
  249. package/components/row/row.a2ui.json +1 -0
  250. package/components/search/search.a2ui.json +1 -0
  251. package/components/search/search.class.js +4 -1
  252. package/components/section/section.a2ui.json +1 -0
  253. package/components/segment/segment.a2ui.json +21 -10
  254. package/components/segment/segment.css +15 -0
  255. package/components/segment/segment.d.ts +2 -1
  256. package/components/segment/segment.yaml +20 -13
  257. package/components/segmented/segmented.a2ui.json +36 -7
  258. package/components/segmented/segmented.class.js +113 -22
  259. package/components/segmented/segmented.css +3 -0
  260. package/components/segmented/segmented.d.ts +3 -1
  261. package/components/segmented/segmented.yaml +80 -8
  262. package/components/select/select.a2ui.json +18 -13
  263. package/components/select/select.class.js +61 -37
  264. package/components/select/select.css +15 -13
  265. package/components/select/select.yaml +18 -7
  266. package/components/skeleton/skeleton.a2ui.json +8 -7
  267. package/components/skeleton/skeleton.class.js +8 -7
  268. package/components/skeleton/skeleton.css +21 -6
  269. package/components/skeleton/skeleton.d.ts +2 -2
  270. package/components/skeleton/skeleton.examples.md +2 -2
  271. package/components/skeleton/skeleton.yaml +3 -2
  272. package/components/skip-nav/skip-nav.a2ui.json +1 -0
  273. package/components/slider/slider.a2ui.json +6 -0
  274. package/components/slider/slider.class.js +20 -3
  275. package/components/slider/slider.css +2 -2
  276. package/components/slider/slider.yaml +3 -0
  277. package/components/spinner/spinner.a2ui.json +1 -0
  278. package/components/stack/stack.a2ui.json +1 -0
  279. package/components/stat/stat.a2ui.json +1 -0
  280. package/components/stat/stat.js +2 -2
  281. package/components/step-progress/step-progress.a2ui.json +1 -0
  282. package/components/step-progress/step-progress.yaml +1 -1
  283. package/components/stepper/stepper-item.a2ui.json +7 -3
  284. package/components/stepper/stepper-item.yaml +15 -5
  285. package/components/stepper/stepper.a2ui.json +5 -1
  286. package/components/stepper/stepper.class.js +31 -16
  287. package/components/stepper/stepper.d.ts +1 -1
  288. package/components/stepper/stepper.yaml +4 -2
  289. package/components/stream/stream.a2ui.json +1 -0
  290. package/components/swatch/swatch.a2ui.json +1 -0
  291. package/components/swatch/swatch.yaml +1 -1
  292. package/components/swiper/swiper.a2ui.json +1 -0
  293. package/components/swiper/swiper.class.js +5 -1
  294. package/components/switch/switch.a2ui.json +12 -11
  295. package/components/switch/switch.css +1 -1
  296. package/components/switch/switch.yaml +6 -6
  297. package/components/table/table.a2ui.json +1 -0
  298. package/components/table/table.class.js +14 -12
  299. package/components/table/table.css +11 -9
  300. package/components/table-toolbar/table-toolbar.a2ui.json +1 -0
  301. package/components/table-toolbar/table-toolbar.class.js +53 -22
  302. package/components/table-toolbar/table-toolbar.css +1 -1
  303. package/components/tabs/tab.a2ui.json +9 -0
  304. package/components/tabs/tab.js +4 -0
  305. package/components/tabs/tab.yaml +15 -0
  306. package/components/tabs/tabs.a2ui.json +9 -4
  307. package/components/tabs/tabs.class.js +13 -1
  308. package/components/tabs/tabs.css +8 -0
  309. package/components/tabs/tabs.d.ts +2 -0
  310. package/components/tabs/tabs.yaml +9 -2
  311. package/components/tag/tag.a2ui.json +1 -0
  312. package/components/tags-input/tags-input.a2ui.json +22 -17
  313. package/components/tags-input/tags-input.class.js +13 -11
  314. package/components/tags-input/tags-input.css +10 -6
  315. package/components/tags-input/tags-input.d.ts +16 -7
  316. package/components/tags-input/tags-input.examples.md +2 -2
  317. package/components/tags-input/tags-input.yaml +25 -8
  318. package/components/text/text.a2ui.json +6 -5
  319. package/components/text/text.css +10 -5
  320. package/components/text/text.d.ts +2 -2
  321. package/components/text/text.yaml +9 -4
  322. package/components/textarea/textarea.a2ui.json +2 -1
  323. package/components/textarea/textarea.yaml +1 -1
  324. package/components/theme-provider/theme-provider.a2ui.json +2 -1
  325. package/components/theme-provider/theme-provider.d.ts +5 -3
  326. package/components/theme-provider/theme-provider.yaml +5 -3
  327. package/components/time-picker/time-picker.a2ui.json +1 -0
  328. package/components/time-picker/time-picker.class.js +4 -2
  329. package/components/timeline/timeline-item.a2ui.json +26 -3
  330. package/components/timeline/timeline-item.yaml +22 -7
  331. package/components/timeline/timeline.a2ui.json +4 -0
  332. package/components/timeline/timeline.class.js +29 -18
  333. package/components/timeline/timeline.d.ts +3 -3
  334. package/components/timeline/timeline.yaml +2 -0
  335. package/components/toast/toast.a2ui.json +10 -3
  336. package/components/toast/toast.yaml +20 -13
  337. package/components/toc/toc.a2ui.json +1 -0
  338. package/components/toggle-group/toggle-group.a2ui.json +7 -3
  339. package/components/toggle-group/toggle-group.class.js +40 -1
  340. package/components/toggle-group/toggle-group.css +6 -1
  341. package/components/toggle-group/toggle-group.d.ts +2 -2
  342. package/components/toggle-group/toggle-group.yaml +21 -12
  343. package/components/toggle-group/toggle-option.a2ui.json +7 -3
  344. package/components/toggle-group/toggle-option.yaml +13 -7
  345. package/components/toggle-scheme/toggle-scheme.a2ui.json +2 -1
  346. package/components/toggle-scheme/toggle-scheme.yaml +1 -1
  347. package/components/toolbar/toolbar-group.a2ui.json +1 -0
  348. package/components/toolbar/toolbar.a2ui.json +1 -0
  349. package/components/toolbar/toolbar.class.js +3 -0
  350. package/components/tooltip/tooltip.a2ui.json +1 -0
  351. package/components/tour/tour-step.a2ui.json +4 -0
  352. package/components/tour/tour-step.yaml +2 -0
  353. package/components/tour/tour.a2ui.json +4 -0
  354. package/components/tour/tour.yaml +2 -0
  355. package/components/tree/tree-item.a2ui.json +5 -0
  356. package/components/tree/tree-item.yaml +3 -0
  357. package/components/tree/tree.a2ui.json +4 -0
  358. package/components/tree/tree.class.js +2 -1
  359. package/components/tree/tree.yaml +2 -0
  360. package/components/upload/upload.a2ui.json +8 -1
  361. package/components/upload/upload.class.js +35 -5
  362. package/components/upload/upload.css +28 -0
  363. package/components/upload/upload.d.ts +16 -0
  364. package/components/upload/upload.yaml +27 -7
  365. package/components/visually-hidden/visually-hidden.a2ui.json +1 -0
  366. package/core/dom.d.ts +11 -0
  367. package/core/dom.js +34 -0
  368. package/core/form.js +7 -0
  369. package/core/icons.js +5 -0
  370. package/core/index.d.ts +1 -0
  371. package/core/index.js +1 -0
  372. package/core/responsive.js +16 -4
  373. package/core/template.js +2 -1
  374. package/custom-elements.json +710 -587
  375. package/dist/host.min.css +1 -1
  376. package/dist/host.sheet.js +1 -1
  377. package/dist/theme-provider.min.js +5 -5
  378. package/dist/web-components.min.css +1 -1
  379. package/dist/web-components.min.js +92 -105
  380. package/dist/web-components.sheet.js +1 -1
  381. package/index.d.ts +12 -1
  382. package/package.json +4 -2
  383. package/patterns/admin-shell/admin-shell.examples.html +2 -2
  384. package/patterns/conversion-funnel/conversion-funnel.examples.html +15 -15
  385. package/patterns/form-system/form-system.examples.html +1 -1
  386. package/patterns/inline-dialog/inline-dialog.examples.html +2 -2
  387. package/patterns/inline-dialog/inline-dialog.html +4 -0
  388. package/patterns/timezone-selector/timezone-selector.examples.html +1 -1
  389. package/patterns/timezone-selector/timezone-selector.html +2 -2
  390. package/styles/api/text.css +7 -0
  391. package/styles/components.css +1 -0
  392. package/traits/_catalog.json +129 -41
  393. package/traits/anchor-positioning/anchor-positioning.js +1 -0
  394. package/traits/announcer/announcer.js +1 -0
  395. package/traits/arrow-grid-nav/arrow-grid-nav.js +1 -0
  396. package/traits/attention-pulse/attention-pulse.js +1 -0
  397. package/traits/count-up/count-up.js +1 -0
  398. package/traits/define.js +78 -0
  399. package/traits/focus-restore/focus-restore.js +2 -1
  400. package/traits/haptic-feedback/haptic-feedback.js +1 -0
  401. package/traits/input-mask/input-mask.js +1 -0
  402. package/traits/intersection-observer/intersection-observer.js +1 -0
  403. package/traits/layout-animation/layout-animation.js +1 -0
  404. package/traits/noise-texture/noise-texture.js +1 -0
  405. package/traits/resize-observer/resize-observer.js +1 -0
  406. package/traits/scroll-progress/scroll-progress.js +1 -0
  407. package/traits/snap-to-grid/snap-to-grid.js +1 -0
  408. package/traits/sound-feedback/sound-feedback.js +1 -0
  409. package/traits/spring-animate/spring-animate.js +1 -0
  410. package/traits/validation/validation.js +1 -0
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://adiaui.dev/a2ui/v0_9/components/ActionItem.json",
4
4
  "title": "ActionItem",
5
- "description": "Child of <action-list-ui>. One actionable row — icon + label, forwards activation to the parent action-list.",
5
+ "description": "Child of <action-list-ui>. One actionable row — icon + label + optional\ndescription, forwards activation to the parent action-list. Row contract\nconverges on <menu-item-ui>: icon/text/description/value/variant/disabled\nprops and icon/text/subtitle/trailing slot overrides (#1363 C5).\n(`subtitle` is a deprecated alias for `description` — ADR-0063, gh#1571.)",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -13,6 +13,11 @@
13
13
  }
14
14
  ],
15
15
  "properties": {
16
+ "description": {
17
+ "description": "Optional secondary description line rendered under the label. Canonical spelling (ADR-0063, gh#1571) replacing `subtitle` — converges action-item onto the same spelling <menu-item-ui> adopted under gh#1563.",
18
+ "type": "string",
19
+ "default": ""
20
+ },
16
21
  "component": {
17
22
  "const": "ActionItem"
18
23
  },
@@ -25,6 +30,11 @@
25
30
  "description": "Leading icon name (Phosphor).",
26
31
  "type": "string"
27
32
  },
33
+ "subtitle": {
34
+ "description": "DEPRECATED (ADR-0063, gh#1571) — use `description` instead. Same type/default/rendered position; kept working as a dual-read compat shim (one-time console.warn when it's the name that resolves). Removed in 0.9.0. (The `subtitle` SLOT below is a separate surface, deliberately left unrenamed in this pass — see its own description.)",
35
+ "type": "string",
36
+ "default": ""
37
+ },
28
38
  "text": {
29
39
  "description": "Action label.",
30
40
  "type": "string"
@@ -34,8 +44,12 @@
34
44
  "type": "string"
35
45
  },
36
46
  "variant": {
37
- "description": "Visual variant (default | accent | danger).",
47
+ "description": "Visual variant (default | danger).",
38
48
  "type": "string",
49
+ "enum": [
50
+ "default",
51
+ "danger"
52
+ ],
39
53
  "default": "default"
40
54
  }
41
55
  },
@@ -44,6 +58,9 @@
44
58
  ],
45
59
  "unevaluatedProperties": false,
46
60
  "x-adiaui": {
61
+ "allowedParents": [
62
+ "ActionList"
63
+ ],
47
64
  "anti_patterns": [],
48
65
  "category": "navigation",
49
66
  "composes": [],
@@ -57,6 +74,7 @@
57
74
  "action-list-row"
58
75
  ],
59
76
  "name": "UIActionItem",
77
+ "parts": {},
60
78
  "related": [
61
79
  "ActionList",
62
80
  "MenuItem",
@@ -65,6 +83,15 @@
65
83
  "slots": {
66
84
  "icon": {
67
85
  "description": "Override the [icon] glyph with a custom slotted element (custom icon-ui, image, avatar). Mutually exclusive with the [icon] attribute — slot child wins."
86
+ },
87
+ "subtitle": {
88
+ "description": "Custom secondary-line content override; falls through to the [description] prop (or its deprecated [subtitle] alias — ADR-0063, gh#1571) if not slotted. The slot's own name is unchanged by that rename — this is a distinct, deliberately-unrenamed surface."
89
+ },
90
+ "text": {
91
+ "description": "Custom label content; falls through to [text] prop if not slotted."
92
+ },
93
+ "trailing": {
94
+ "description": "Trailing element pinned to the far edge (shortcut hint, badge, caret). Supersedes the unnamed default slot this row previously used for trailing content — see MIGRATION GUIDE."
68
95
  }
69
96
  },
70
97
  "states": [],
@@ -16,7 +16,11 @@ component: ActionItem
16
16
  category: navigation
17
17
  version: 1
18
18
  description: |-
19
- Child of <action-list-ui>. One actionable row — icon + label, forwards activation to the parent action-list.
19
+ Child of <action-list-ui>. One actionable row — icon + label + optional
20
+ description, forwards activation to the parent action-list. Row contract
21
+ converges on <menu-item-ui>: icon/text/description/value/variant/disabled
22
+ props and icon/text/subtitle/trailing slot overrides (#1363 C5).
23
+ (`subtitle` is a deprecated alias for `description` — ADR-0063, gh#1571.)
20
24
 
21
25
  props:
22
26
  icon:
@@ -25,13 +29,31 @@ props:
25
29
  text:
26
30
  description: Action label.
27
31
  type: string
32
+ subtitle:
33
+ description: >-
34
+ DEPRECATED (ADR-0063, gh#1571) — use `description` instead. Same
35
+ type/default/rendered position; kept working as a dual-read compat
36
+ shim (one-time console.warn when it's the name that resolves).
37
+ Removed in 0.9.0. (The `subtitle` SLOT below is a separate surface,
38
+ deliberately left unrenamed in this pass — see its own description.)
39
+ type: string
40
+ default: ''
41
+ description:
42
+ description: >-
43
+ Optional secondary description line rendered under the label.
44
+ Canonical spelling (ADR-0063, gh#1571) replacing `subtitle` —
45
+ converges action-item onto the same spelling <menu-item-ui> adopted
46
+ under gh#1563.
47
+ type: string
48
+ default: ''
28
49
  value:
29
50
  description: Identifier passed to the action-list change/activate handlers.
30
51
  type: string
31
52
  variant:
32
- description: Visual variant (default | accent | danger).
53
+ description: Visual variant (default | danger).
33
54
  type: string
34
55
  default: 'default'
56
+ enum: [default, danger]
35
57
  disabled:
36
58
  description: Disables click + keyboard activation; aria-disabled is set.
37
59
  type: boolean
@@ -43,6 +65,19 @@ slots:
43
65
  Override the [icon] glyph with a custom slotted element (custom
44
66
  icon-ui, image, avatar). Mutually exclusive with the [icon]
45
67
  attribute — slot child wins.
68
+ text:
69
+ description: Custom label content; falls through to [text] prop if not slotted.
70
+ subtitle:
71
+ description: >-
72
+ Custom secondary-line content override; falls through to the
73
+ [description] prop (or its deprecated [subtitle] alias — ADR-0063,
74
+ gh#1571) if not slotted. The slot's own name is unchanged by that
75
+ rename — this is a distinct, deliberately-unrenamed surface.
76
+ trailing:
77
+ description: >-
78
+ Trailing element pinned to the far edge (shortcut hint, badge, caret).
79
+ Supersedes the unnamed default slot this row previously used for
80
+ trailing content — see MIGRATION GUIDE.
46
81
 
47
82
  keywords:
48
83
  - action-item
@@ -60,10 +95,18 @@ related:
60
95
  - Button
61
96
 
62
97
  a2ui:
98
+ allowedParents:
99
+ - ActionList
63
100
  rules:
64
- - rule: 'Child of <action-list-ui> — one inline-action row with icon + label + optional shortcut + optional sublabel.'
101
+ - rule: 'Child of <action-list-ui> — one inline-action row with icon + label + optional description + optional trailing shortcut/badge.'
65
102
  reason: 'Action-list cluster contract.'
66
103
  - rule: 'Different from <menu-item-ui>: action-items live inline in content surfaces; menu-items live inside <menu-ui> popovers.'
67
104
  reason: 'Context boundary.'
68
105
  - rule: 'For navigation entries (route-changing) use <nav-item-ui> instead.'
69
106
  reason: 'Different intent — actions vs navigation.'
107
+ - rule: 'Use [variant="danger"] exclusively for destructive/irreversible actions (Delete, Remove). Pair danger items with an explicit confirm flow when the action cannot be undone.'
108
+ reason: 'Converged with <menu-item-ui>''s danger-variant guidance (#1363 C5).'
109
+ - rule: 'Prefer [icon]/[text]/[description] props over slotted markup; use slot="icon"/"text"/"subtitle"/"trailing" only for custom markup (e.g. a slotted <kbd> shortcut hint).'
110
+ reason: 'Row-contract convergence with <menu-item-ui> (#1363 C5).'
111
+ - rule: 'NOTE (ADR-0063, gh#1571): [subtitle] is now a deprecated alias for [description] — kept as a dual-read compat shim (new-name precedence, one-time console.warn), removed at the 0.9.0 cut.'
112
+ reason: 'Convergence with <menu-item-ui>''s own subtitle -> description rename (gh#1563).'
@@ -22,6 +22,9 @@
22
22
  ],
23
23
  "unevaluatedProperties": false,
24
24
  "x-adiaui": {
25
+ "allowedChildren": [
26
+ "ActionItem"
27
+ ],
25
28
  "anti_patterns": [],
26
29
  "category": "navigation",
27
30
  "composes": [
@@ -60,10 +63,12 @@
60
63
  "list"
61
64
  ],
62
65
  "name": "UIActionList",
66
+ "parts": {},
63
67
  "related": [
64
68
  "ActionItem",
65
69
  "Menu",
66
- "Button"
70
+ "Button",
71
+ "List"
67
72
  ],
68
73
  "slots": {
69
74
  "default": {
@@ -94,6 +94,14 @@ export class UIActionItem extends UIElement {
94
94
  static properties = {
95
95
  icon: { type: String, default: '', reflect: true },
96
96
  text: { type: String, default: '', reflect: true },
97
+ // ADR-0063 (gh#1571) — `subtitle` is DEPRECATED (action-item was the
98
+ // corpus's remaining `subtitle` outlier once <menu-item-ui> converged
99
+ // under gh#1563); `description` is canonical. `subtitle` stays declared
100
+ // (dual-read compat, additive). The `subtitle` SLOT (a separate
101
+ // surface — see action-item.yaml) is deliberately unchanged; only the
102
+ // PROP renames.
103
+ subtitle: { type: String, default: '', reflect: true },
104
+ description: { type: String, default: '', reflect: true },
97
105
  value: { type: String, default: '', reflect: true },
98
106
  variant: { type: String, default: 'default', reflect: true },
99
107
  disabled: { type: Boolean, default: false, reflect: true },
@@ -101,7 +109,71 @@ export class UIActionItem extends UIElement {
101
109
 
102
110
  static template = () => null;
103
111
 
112
+ // ADR-0063 (gh#1571) one-shot-per-class deprecation warn for [subtitle].
113
+ static #warnedSubtitle = false;
114
+
115
+ // Guards + tracks the [subtitle] -> [description] compat mirror (below).
116
+ // action-item-ui (unlike menu-item-ui) has pre-existing tests that set
117
+ // [subtitle] AFTER mount and expect the rendered row to keep tracking it
118
+ // (gh#1374) — a resolve-once-at-connect shim (menu-item-ui's own shape)
119
+ // would silently stop mirroring once `description` picks up its first
120
+ // reflected value. `#mirroring` suppresses the authored-flag while WE
121
+ // write `this.description` ourselves; `#descriptionAuthored` latches
122
+ // true the moment a REAL (non-mirrored) `description` attribute shows
123
+ // up, so [description] wins permanently from that point on, even
124
+ // across later [subtitle] attribute churn.
125
+ #mirroring = false;
126
+ #descriptionAuthored = false;
127
+
128
+ attributeChangedCallback(name, oldVal, val) {
129
+ if (name === 'description' && !this.#mirroring) this.#descriptionAuthored = true;
130
+ super.attributeChangedCallback(name, oldVal, val);
131
+ }
132
+
133
+ // ADR-0063 (gh#1571) compat shim. New-name precedence: once [description]
134
+ // has ever been authored directly, it wins outright and [subtitle] is
135
+ // ignored from then on. Until then, [subtitle] mirrors into [description]
136
+ // on every resolve (initial connect AND every subsequent render), so a
137
+ // post-mount [subtitle] update keeps propagating exactly like it did
138
+ // before this shim existed.
139
+ #resolveSubtitleCompat() {
140
+ if (this.#descriptionAuthored) return;
141
+ const mirrored = this.hasAttribute('subtitle') ? this.subtitle : '';
142
+ if (this.description === mirrored) return;
143
+ this.#mirroring = true;
144
+ this.description = mirrored;
145
+ this.#mirroring = false;
146
+ if (mirrored && !UIActionItem.#warnedSubtitle) {
147
+ UIActionItem.#warnedSubtitle = true;
148
+ // eslint-disable-next-line no-console
149
+ console.warn(
150
+ '[AdiaUI] <action-item-ui [subtitle]> is deprecated — use ' +
151
+ '[description] instead (ADR-0063, gh#1571). Kept working as-is; ' +
152
+ 'no behavior change.',
153
+ );
154
+ }
155
+ }
156
+
157
+ // Set when connected()/render() stamped this fallback child from a prop —
158
+ // never touch a consumer-authored slot="icon"/"text"/"subtitle" child
159
+ // (ADR-0010, slot content is source of truth). Mirrors menu-item-ui's
160
+ // UIMenuItem stamp-marking exactly (CodeRabbit review, PR #1429).
161
+ #stampMark(el) { el.dataset.actionItemStamped = '1'; return el; }
162
+ #wasStamped(el) { return el?.dataset?.actionItemStamped === '1'; }
163
+
164
+ #ownChild(selector) {
165
+ // wrapper-trap-ok: finds component-stamped children (data-action-item-stamped) — consumer children are read but never overwritten
166
+ for (const ch of this.children) {
167
+ if (ch.matches(selector)) return ch;
168
+ }
169
+ return null;
170
+ }
171
+
104
172
  connected() {
173
+ // ADR-0063 (gh#1571) compat shim — resolve BEFORE #stamp() reads
174
+ // `this.description`, so there's no wrong-then-right flash.
175
+ this.#resolveSubtitleCompat();
176
+
105
177
  // Adopt-or-stamp (gh#753): a consumer-authored role survives connect —
106
178
  // only stamp "listitem" when the host has no author-set role at all.
107
179
  if (!this.hasAttribute('role')) this.setAttribute('role', 'listitem');
@@ -111,21 +183,28 @@ export class UIActionItem extends UIElement {
111
183
  }
112
184
 
113
185
  #stamp() {
114
- if (this.querySelector('[slot="text"]')) return;
186
+ if (this.#ownChild('[slot="text"]')) return;
115
187
 
116
- if (this.icon) {
117
- const iconEl = document.createElement('icon-ui');
188
+ if (this.icon && !this.#ownChild('[slot="icon"]')) {
189
+ const iconEl = this.#stampMark(document.createElement('icon-ui'));
118
190
  iconEl.setAttribute('slot', 'icon');
119
191
  iconEl.setAttribute('name', this.icon);
120
192
  this.appendChild(iconEl);
121
193
  }
122
194
 
123
195
  if (this.text) {
124
- const span = document.createElement('span');
196
+ const span = this.#stampMark(document.createElement('span'));
125
197
  span.setAttribute('slot', 'text');
126
198
  span.textContent = this.text;
127
199
  this.appendChild(span);
128
200
  }
201
+
202
+ if (this.description && !this.#ownChild('[slot="subtitle"]')) {
203
+ const sub = this.#stampMark(document.createElement('span'));
204
+ sub.setAttribute('slot', 'subtitle');
205
+ sub.textContent = this.description;
206
+ this.appendChild(sub);
207
+ }
129
208
  }
130
209
 
131
210
  #syncAria() {
@@ -139,21 +218,45 @@ export class UIActionItem extends UIElement {
139
218
  }
140
219
 
141
220
  render() {
142
- const iconEl = this.querySelector('[slot="icon"]');
221
+ // ADR-0063 (gh#1571) compat shim — re-resolve on every render so a
222
+ // post-mount [subtitle] update keeps mirroring into [description]
223
+ // until an author sets [description] directly (see #resolveSubtitleCompat).
224
+ this.#resolveSubtitleCompat();
225
+
226
+ // Sync icon — only touch elements we stamped.
227
+ const iconEl = this.#ownChild('[slot="icon"]');
143
228
  if (this.icon) {
144
- if (iconEl) iconEl.setAttribute('name', this.icon);
145
- else {
146
- const el = document.createElement('icon-ui');
229
+ if (iconEl) {
230
+ if (this.#wasStamped(iconEl)) iconEl.setAttribute('name', this.icon);
231
+ } else {
232
+ const el = this.#stampMark(document.createElement('icon-ui'));
147
233
  el.setAttribute('slot', 'icon');
148
234
  el.setAttribute('name', this.icon);
149
235
  this.prepend(el);
150
236
  }
151
- } else if (iconEl) {
237
+ } else if (this.#wasStamped(iconEl)) {
152
238
  iconEl.remove();
153
239
  }
154
240
 
155
- const textEl = this.querySelector('[slot="text"]');
156
- if (textEl) textEl.textContent = this.text;
241
+ // Sync text — only touch elements we stamped.
242
+ const textEl = this.#ownChild('[slot="text"]');
243
+ if (this.#wasStamped(textEl)) textEl.textContent = this.text;
244
+
245
+ // Sync subtitle (backed by the `description` prop — ADR-0063, gh#1571)
246
+ // — only touch elements we stamped.
247
+ const subEl = this.#ownChild('[slot="subtitle"]');
248
+ if (this.description) {
249
+ if (subEl) {
250
+ if (this.#wasStamped(subEl)) subEl.textContent = this.description;
251
+ } else {
252
+ const sub = this.#stampMark(document.createElement('span'));
253
+ sub.setAttribute('slot', 'subtitle');
254
+ sub.textContent = this.description;
255
+ this.appendChild(sub);
256
+ }
257
+ } else if (this.#wasStamped(subEl)) {
258
+ subEl.remove();
259
+ }
157
260
 
158
261
  this.#syncAria();
159
262
  }
@@ -47,6 +47,8 @@ action-item-ui:hover [slot="icon"] {
47
47
 
48
48
  --action-item-font-size: var(--a-ui-size);
49
49
  --action-item-icon-size: var(--action-item-font-size);
50
+ --action-item-subtitle-size: var(--a-ui-sm);
51
+ --action-item-subtitle-fg: var(--a-fg-muted);
50
52
 
51
53
  --action-item-focus-ring: var(--a-focus-ring);
52
54
 
@@ -98,11 +100,49 @@ action-item-ui:hover [slot="icon"] {
98
100
  text-overflow: ellipsis;
99
101
  }
100
102
 
101
- /* Default slot (trailing content: kbd, badge, caret) pushed to far right */
102
- & > :not([slot="icon"]):not([slot="text"]) {
103
+ /* Trailing (shortcut hint, badge, caret) pinned to the far edge.
104
+ Converged onto <menu-item-ui>'s named-slot contract (#1363 C5); the
105
+ unnamed default slot this row previously used for trailing content had
106
+ zero known consumers (verified across the monorepo at dispatch time —
107
+ see MIGRATION GUIDE) and is retired in favor of an explicit slot. */
108
+ [slot="trailing"] {
103
109
  flex-shrink: 0;
104
110
  margin-inline-start: auto;
105
- color: var(--action-item-icon-fg);
111
+ }
112
+
113
+ /* ── Subtitle — two-line anatomy, mirrors <menu-item-ui> ──
114
+ Content-driven: a present [slot="subtitle"] switches the row to a
115
+ grid so the subtitle sits under the label while icon and trailing
116
+ content span both lines. */
117
+ :scope:has(> [slot="subtitle"]) {
118
+ display: grid;
119
+ grid-template-columns: auto 1fr auto;
120
+ align-items: center;
121
+ column-gap: var(--action-item-gap);
122
+ row-gap: 0;
123
+ }
124
+ :scope:has(> [slot="subtitle"]) > [slot="icon"] {
125
+ grid-column: 1;
126
+ grid-row: 1 / span 2;
127
+ }
128
+ :scope:has(> [slot="subtitle"]) > [slot="text"] {
129
+ grid-column: 2;
130
+ grid-row: 1;
131
+ }
132
+ :scope:has(> [slot="subtitle"]) > [slot="trailing"] {
133
+ grid-column: 3;
134
+ grid-row: 1 / span 2;
135
+ margin-inline-start: 0;
136
+ }
137
+ :scope > [slot="subtitle"] {
138
+ grid-column: 2;
139
+ grid-row: 2;
140
+ min-width: 0;
141
+ font-size: var(--action-item-subtitle-size);
142
+ color: var(--action-item-subtitle-fg);
143
+ white-space: nowrap;
144
+ overflow: hidden;
145
+ text-overflow: ellipsis;
106
146
  }
107
147
 
108
148
  /* Variant: danger (destructive action) — only remaps tokens */
@@ -34,14 +34,18 @@ export class UIActionList extends UIElement {
34
34
  }
35
35
 
36
36
  export class UIActionItem extends UIElement {
37
+ /** Optional secondary description line rendered under the label. Canonical spelling (ADR-0063, gh#1571) replacing `subtitle` — converges action-item onto the same spelling <menu-item-ui> adopted under gh#1563. */
38
+ description: string;
37
39
  /** Disables click + keyboard activation; aria-disabled is set. */
38
40
  disabled: boolean;
39
41
  /** Leading icon name (Phosphor). */
40
42
  icon: string;
43
+ /** DEPRECATED (ADR-0063, gh#1571) — use `description` instead. Same type/default/rendered position; kept working as a dual-read compat shim (one-time console.warn when it's the name that resolves). Removed in 0.9.0. (The `subtitle` SLOT below is a separate surface, deliberately left unrenamed in this pass — see its own description.) */
44
+ subtitle: string;
41
45
  /** Action label. */
42
46
  text: string;
43
47
  /** Identifier passed to the action-list change/activate handlers. */
44
48
  value: string;
45
- /** Visual variant (default | accent | danger). */
46
- variant: string;
49
+ /** Visual variant (default | danger). */
50
+ variant: 'default' | 'danger';
47
51
  }
@@ -36,6 +36,8 @@ states:
36
36
  traits: []
37
37
  tokens: {}
38
38
  a2ui:
39
+ allowedChildren:
40
+ - ActionItem
39
41
  rules:
40
42
  - rule: 'Hosts <action-item-ui> children as a vertical command list inline in content surfaces.'
41
43
  reason: 'Cluster contract.'
@@ -43,6 +45,8 @@ a2ui:
43
45
  reason: 'Inline vs popover.'
44
46
  - rule: 'Typical use: command palettes, settings panels, agent suggestion lists.'
45
47
  reason: 'Surface examples.'
48
+ - rule: 'For a persisted, non-firing single selection (highlight the current row, no keyboard-activated command) use <list-ui selectable> instead — action-list-ui always fires and never holds a selected state.'
49
+ reason: 'Container-level decision (#1363 C5): kept as its own component rather than a <list-ui> mode axis; rationale in gh#1374 Findings.'
46
50
  anti_patterns: []
47
51
  examples:
48
52
  - name: basic-action-list
@@ -79,3 +83,4 @@ related:
79
83
  - ActionItem
80
84
  - Menu
81
85
  - Button
86
+ - List
@@ -70,6 +70,7 @@
70
70
  "icon"
71
71
  ],
72
72
  "name": "UIAdiaMark",
73
+ "parts": {},
73
74
  "related": [
74
75
  "AdiaWordmark",
75
76
  "Icon",
@@ -67,6 +67,7 @@
67
67
  "identity"
68
68
  ],
69
69
  "name": "UIAdiaWordmark",
70
+ "parts": {},
70
71
  "related": [
71
72
  "AdiaMark",
72
73
  "Icon",
@@ -79,6 +79,7 @@
79
79
  "attachment"
80
80
  ],
81
81
  "name": "UIAgentArtifact",
82
+ "parts": {},
82
83
  "related": [
83
84
  "card-ui",
84
85
  "code-ui"
@@ -71,15 +71,16 @@
71
71
  "bookmark"
72
72
  ],
73
73
  "name": "UIAgentFeedbackBar",
74
+ "parts": {
75
+ "default": {
76
+ "description": "Template-owned anatomy, not a light-DOM insertion point (gh#1454). `#build()` unconditionally wipes the host (`this.innerHTML = ''`) and rebuilds a fixed thumbs-up/thumbs-down/save row from props — no pre-existing children are captured or preserved."
77
+ }
78
+ },
74
79
  "related": [
75
80
  "agent-suggestions-ui",
76
81
  "agent-trace-ui"
77
82
  ],
78
- "slots": {
79
- "default": {
80
- "description": "Default slot — primary child content."
81
- }
82
- },
83
+ "slots": {},
83
84
  "states": [
84
85
  {
85
86
  "description": "Default, ready for interaction.",
@@ -44,9 +44,13 @@ events:
44
44
  description: Rating value selected by the user.
45
45
  feedback-save:
46
46
  description: "Fired on feedback-save."
47
- slots:
47
+ parts:
48
48
  default:
49
- description: "Default slot — primary child content."
49
+ description: >-
50
+ Template-owned anatomy, not a light-DOM insertion point (gh#1454).
51
+ `#build()` unconditionally wipes the host (`this.innerHTML = ''`) and
52
+ rebuilds a fixed thumbs-up/thumbs-down/save row from props — no
53
+ pre-existing children are captured or preserved.
50
54
  states:
51
55
  - name: idle
52
56
  description: Default, ready for interaction.
@@ -79,6 +79,7 @@
79
79
  "clarify"
80
80
  ],
81
81
  "name": "UIAgentQuestions",
82
+ "parts": {},
82
83
  "related": [
83
84
  "agent-suggestions-ui",
84
85
  "agent-reasoning-ui"
@@ -105,15 +105,16 @@
105
105
  "iteration"
106
106
  ],
107
107
  "name": "UIAgentReasoning",
108
+ "parts": {
109
+ "default": {
110
+ "description": "Template-owned anatomy, not a light-DOM insertion point (gh#938, gh#1454): the component rebuilds its body from the addStep()/addThought() pipeline (`this.innerHTML = ''` then rebuild) and does not consume authored children."
111
+ }
112
+ },
108
113
  "related": [
109
114
  "agent-trace-ui",
110
115
  "pipeline-status-ui"
111
116
  ],
112
- "slots": {
113
- "default": {
114
- "description": "Default slot — NOT a step-authoring surface: the component rebuilds its body from the addStep()/addThought() pipeline and does not consume authored children (gh#938)."
115
- }
116
- },
117
+ "slots": {},
117
118
  "states": [
118
119
  {
119
120
  "description": "Default, ready for interaction.",
@@ -55,9 +55,13 @@ events:
55
55
  collapsed:
56
56
  type: boolean
57
57
  description: Whether the reasoning section is now collapsed.
58
- slots:
58
+ parts:
59
59
  default:
60
- description: "Default slot — NOT a step-authoring surface: the component rebuilds its body from the addStep()/addThought() pipeline and does not consume authored children (gh#938)."
60
+ description: >-
61
+ Template-owned anatomy, not a light-DOM insertion point (gh#938,
62
+ gh#1454): the component rebuilds its body from the
63
+ addStep()/addThought() pipeline (`this.innerHTML = ''` then rebuild)
64
+ and does not consume authored children.
61
65
  states:
62
66
  - name: idle
63
67
  description: Default, ready for interaction.
@@ -22,13 +22,21 @@
22
22
  "default": false
23
23
  },
24
24
  "size": {
25
- "description": "sm | md",
25
+ "description": "sm | md — forwarded to each chip's <button-ui size>.",
26
26
  "type": "string",
27
+ "enum": [
28
+ "sm",
29
+ "md"
30
+ ],
27
31
  "default": "sm"
28
32
  },
29
33
  "variant": {
30
- "description": "outline | ghost | subtle",
34
+ "description": "outline | ghost forwarded to each chip's <button-ui variant>.",
31
35
  "type": "string",
36
+ "enum": [
37
+ "outline",
38
+ "ghost"
39
+ ],
32
40
  "default": "outline"
33
41
  }
34
42
  },
@@ -75,6 +83,7 @@
75
83
  "quick replies"
76
84
  ],
77
85
  "name": "UIAgentSuggestions",
86
+ "parts": {},
78
87
  "related": [
79
88
  "agent-questions-ui",
80
89
  "agent-feedback-bar-ui"
@@ -29,7 +29,8 @@
29
29
  * });
30
30
  *
31
31
  * Attributes:
32
- * variant — outline (default) | ghost | subtle
32
+ * variant — outline (default) | ghost (forwarded to each chip's button-ui;
33
+ * "subtle" is not a real button-ui variant — dropped gh#1378)
33
34
  * size — sm (default) | md
34
35
  * disabled — disable all chips
35
36
  *
@@ -32,10 +32,10 @@ export type AgentSuggestionsSuggestionSelectEvent = CustomEvent<AgentSuggestions
32
32
  export class UIAgentSuggestions extends UIElement {
33
33
  /** Disable all chips. */
34
34
  disabled: boolean;
35
- /** sm | md */
36
- size: string;
37
- /** outline | ghost | subtle */
38
- variant: string;
35
+ /** sm | md — forwarded to each chip's <button-ui size>. */
36
+ size: 'sm' | 'md';
37
+ /** outline | ghost forwarded to each chip's <button-ui variant>. */
38
+ variant: 'outline' | 'ghost';
39
39
 
40
40
  addEventListener(type: 'suggestion-select', listener: (ev: AgentSuggestionsSuggestionSelectEvent) => unknown, options?: boolean | AddEventListenerOptions): void;
41
41
  addEventListener<K extends keyof HTMLElementEventMap>(
@@ -25,13 +25,15 @@ props:
25
25
  default: false
26
26
  reflect: true
27
27
  size:
28
- description: sm | md
28
+ description: sm | md — forwarded to each chip's <button-ui size>.
29
29
  type: string
30
30
  default: sm
31
+ enum: [sm, md]
31
32
  variant:
32
- description: outline | ghost | subtle
33
+ description: outline | ghost forwarded to each chip's <button-ui variant>.
33
34
  type: string
34
35
  default: outline
36
+ enum: [outline, ghost]
35
37
  events:
36
38
  suggestion-select:
37
39
  description: "Fired on suggestion-select."