@adia-ai/web-components 0.8.40 → 0.8.41

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 (378) hide show
  1. package/CHANGELOG.md +50 -3
  2. package/MIGRATION.md +1042 -16
  3. package/README.md +25 -30
  4. package/USAGE.md +26 -0
  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 +24 -2
  11. package/components/action-list/action-item.yaml +28 -3
  12. package/components/action-list/action-list.a2ui.json +6 -1
  13. package/components/action-list/action-list.class.js +52 -11
  14. package/components/action-list/action-list.css +43 -3
  15. package/components/action-list/action-list.d.ts +4 -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 +9 -4
  63. package/components/chart/chart.class.js +6 -6
  64. package/components/chart/chart.css +6 -4
  65. package/components/chart/chart.d.ts +1 -1
  66. package/components/chart/chart.yaml +5 -3
  67. package/components/chart-legend/chart-legend.a2ui.json +1 -0
  68. package/components/chat-thread/chat-input.a2ui.json +1 -0
  69. package/components/chat-thread/chat-thread.a2ui.json +10 -9
  70. package/components/chat-thread/chat-thread.yaml +13 -20
  71. package/components/check/check.a2ui.json +10 -9
  72. package/components/check/check.yaml +4 -4
  73. package/components/code/code.a2ui.json +1 -0
  74. package/components/col/col.a2ui.json +1 -0
  75. package/components/color-input/color-input.a2ui.json +1 -0
  76. package/components/color-picker/color-picker.a2ui.json +1 -0
  77. package/components/combobox/combobox.a2ui.json +3 -2
  78. package/components/combobox/combobox.yaml +2 -2
  79. package/components/command/command.a2ui.json +12 -10
  80. package/components/command/command.class.js +3 -2
  81. package/components/command/command.yaml +17 -4
  82. package/components/context-menu/context-menu.a2ui.json +1 -0
  83. package/components/date-range-picker/date-range-picker.a2ui.json +2 -1
  84. package/components/date-range-picker/date-range-picker.yaml +1 -1
  85. package/components/datetime-picker/datetime-picker.a2ui.json +15 -108
  86. package/components/datetime-picker/datetime-picker.class.js +37 -690
  87. package/components/datetime-picker/datetime-picker.css +11 -183
  88. package/components/datetime-picker/datetime-picker.d.ts +4 -5
  89. package/components/datetime-picker/datetime-picker.yaml +44 -135
  90. package/components/demo-toggle/demo-toggle.a2ui.json +1 -0
  91. package/components/demo-toggle/demo-toggle.css +1 -1
  92. package/components/description-list/description-list.a2ui.json +1 -0
  93. package/components/display-field/display-field.a2ui.json +1 -0
  94. package/components/divider/divider.a2ui.json +1 -0
  95. package/components/drawer/drawer.a2ui.json +1 -3
  96. package/components/drawer/drawer.css +1 -1
  97. package/components/drawer/drawer.yaml +0 -2
  98. package/components/drilldown/drilldown.a2ui.json +22 -20
  99. package/components/drilldown/drilldown.class.js +4 -3
  100. package/components/drilldown/drilldown.css +6 -6
  101. package/components/drilldown/drilldown.yaml +40 -9
  102. package/components/embed/embed.a2ui.json +6 -5
  103. package/components/embed/embed.yaml +2 -2
  104. package/components/empty-state/empty-state.a2ui.json +1 -0
  105. package/components/feed/feed-item.a2ui.json +25 -5
  106. package/components/feed/feed-item.yaml +28 -7
  107. package/components/feed/feed.a2ui.json +9 -2
  108. package/components/feed/feed.class.js +19 -12
  109. package/components/feed/feed.css +8 -8
  110. package/components/feed/feed.yaml +14 -1
  111. package/components/field/field.a2ui.json +1 -0
  112. package/components/field/field.examples.md +1 -1
  113. package/components/fields/fields.a2ui.json +1 -0
  114. package/components/fields/fields.examples.md +1 -1
  115. package/components/footer/footer.a2ui.json +1 -0
  116. package/components/frame/frame.a2ui.json +1 -0
  117. package/components/grid/grid.a2ui.json +1 -0
  118. package/components/header/header.a2ui.json +3 -2
  119. package/components/header/header.yaml +3 -3
  120. package/components/heatmap/heatmap.a2ui.json +2 -1
  121. package/components/heatmap/heatmap.class.js +1 -1
  122. package/components/heatmap/heatmap.css +4 -4
  123. package/components/heatmap/heatmap.yaml +1 -1
  124. package/components/icon/icon.a2ui.json +1 -0
  125. package/components/image/image.a2ui.json +28 -14
  126. package/components/image/image.class.js +38 -23
  127. package/components/image/image.css +18 -8
  128. package/components/image/image.d.ts +2 -2
  129. package/components/image/image.examples.md +3 -3
  130. package/components/image/image.yaml +23 -7
  131. package/components/inline-edit/inline-edit.a2ui.json +1 -0
  132. package/components/inline-message/inline-message.a2ui.json +3 -1
  133. package/components/inline-message/inline-message.class.js +3 -1
  134. package/components/inline-message/inline-message.d.ts +2 -2
  135. package/components/inline-message/inline-message.yaml +2 -1
  136. package/components/input/input.a2ui.json +66 -16
  137. package/components/input/input.class.js +64 -7
  138. package/components/input/input.css +14 -14
  139. package/components/input/input.d.ts +9 -4
  140. package/components/input/input.yaml +83 -10
  141. package/components/inspector/inspector.a2ui.json +1 -0
  142. package/components/integration-card/integration-card.a2ui.json +1 -0
  143. package/components/kbd/kbd.a2ui.json +1 -0
  144. package/components/link/link.a2ui.json +2 -1
  145. package/components/link/link.yaml +1 -1
  146. package/components/list/list-item.a2ui.json +9 -0
  147. package/components/list/list-item.yaml +12 -0
  148. package/components/list/list.a2ui.json +9 -3
  149. package/components/list/list.class.js +14 -1
  150. package/components/list/list.css +12 -1
  151. package/components/list/list.d.ts +7 -5
  152. package/components/list/list.yaml +16 -6
  153. package/components/list-window/list-window.a2ui.json +1 -0
  154. package/components/list-window/list-window.class.js +2 -1
  155. package/components/loading-overlay/loading-overlay.a2ui.json +1 -0
  156. package/components/mark/mark.a2ui.json +2 -1
  157. package/components/mark/mark.yaml +1 -1
  158. package/components/menu/menu-divider.a2ui.json +1 -0
  159. package/components/menu/menu-item.a2ui.json +3 -1
  160. package/components/menu/menu-item.yaml +6 -0
  161. package/components/menu/menu-label.a2ui.json +1 -0
  162. package/components/menu/menu.a2ui.json +3 -2
  163. package/components/menu/menu.class.js +2 -2
  164. package/components/menu/menu.d.ts +2 -2
  165. package/components/menu/menu.yaml +3 -3
  166. package/components/modal/modal.a2ui.json +1 -0
  167. package/components/nav/nav.a2ui.json +1 -0
  168. package/components/nav/nav.class.js +14 -3
  169. package/components/nav-group/nav-group.a2ui.json +1 -0
  170. package/components/nav-group/nav-group.class.js +3 -1
  171. package/components/nav-item/nav-item.a2ui.json +1 -0
  172. package/components/noodles/noodles.a2ui.json +1 -0
  173. package/components/noodles/noodles.class.js +5 -1
  174. package/components/number-format/number-format.a2ui.json +1 -0
  175. package/components/option-card/option-card.a2ui.json +1 -0
  176. package/components/otp-input/otp-input.a2ui.json +3 -2
  177. package/components/otp-input/otp-input.yaml +9 -2
  178. package/components/page/page.a2ui.json +13 -0
  179. package/components/page/page.d.ts +1 -1
  180. package/components/page/page.yaml +1 -0
  181. package/components/pagination/pagination.a2ui.json +1 -0
  182. package/components/pagination/pagination.class.js +3 -2
  183. package/components/pane/pane.a2ui.json +6 -0
  184. package/components/pane/pane.class.js +3 -3
  185. package/components/pane/pane.css +2 -2
  186. package/components/pane/pane.yaml +3 -0
  187. package/components/password-strength/password-strength.a2ui.json +1 -0
  188. package/components/pipeline-status/pipeline-status.a2ui.json +1 -0
  189. package/components/popover/popover.a2ui.json +7 -6
  190. package/components/popover/popover.class.js +2 -2
  191. package/components/popover/popover.d.ts +2 -2
  192. package/components/popover/popover.yaml +4 -4
  193. package/components/preview/preview.a2ui.json +1 -0
  194. package/components/preview/preview.class.js +5 -1
  195. package/components/progress/progress.a2ui.json +47 -24
  196. package/components/progress/progress.class.js +66 -11
  197. package/components/progress/progress.css +44 -26
  198. package/components/progress/progress.d.ts +7 -5
  199. package/components/progress/progress.examples.md +2 -2
  200. package/components/progress/progress.yaml +235 -53
  201. package/components/progress-row/progress-row.a2ui.json +16 -12
  202. package/components/progress-row/progress-row.d.ts +2 -2
  203. package/components/progress-row/progress-row.examples.md +2 -14
  204. package/components/progress-row/progress-row.yaml +28 -36
  205. package/components/qr-code/qr-code.a2ui.json +3 -2
  206. package/components/qr-code/qr-code.class.js +4 -4
  207. package/components/qr-code/qr-code.css +1 -1
  208. package/components/qr-code/qr-code.yaml +5 -3
  209. package/components/radio/radio.a2ui.json +8 -7
  210. package/components/radio/radio.class.js +8 -0
  211. package/components/radio/radio.yaml +3 -3
  212. package/components/radio-group/radio-group.a2ui.json +5 -3
  213. package/components/radio-group/radio-group.class.js +11 -0
  214. package/components/radio-group/radio-group.yaml +7 -1
  215. package/components/range/range.a2ui.json +6 -0
  216. package/components/range/range.class.js +2 -2
  217. package/components/range/range.css +2 -2
  218. package/components/range/range.yaml +3 -0
  219. package/components/rating/rating.a2ui.json +1 -0
  220. package/components/relative-time/relative-time.a2ui.json +1 -0
  221. package/components/richtext/richtext.a2ui.json +2 -1
  222. package/components/richtext/richtext.yaml +1 -1
  223. package/components/row/row.a2ui.json +1 -0
  224. package/components/search/search.a2ui.json +1 -0
  225. package/components/search/search.class.js +4 -1
  226. package/components/section/section.a2ui.json +1 -0
  227. package/components/segment/segment.a2ui.json +21 -10
  228. package/components/segment/segment.css +15 -0
  229. package/components/segment/segment.d.ts +2 -1
  230. package/components/segment/segment.yaml +20 -13
  231. package/components/segmented/segmented.a2ui.json +36 -7
  232. package/components/segmented/segmented.class.js +113 -22
  233. package/components/segmented/segmented.css +3 -0
  234. package/components/segmented/segmented.d.ts +3 -1
  235. package/components/segmented/segmented.yaml +80 -8
  236. package/components/select/select.a2ui.json +18 -13
  237. package/components/select/select.class.js +61 -37
  238. package/components/select/select.css +15 -13
  239. package/components/select/select.yaml +18 -7
  240. package/components/skeleton/skeleton.a2ui.json +8 -7
  241. package/components/skeleton/skeleton.class.js +8 -7
  242. package/components/skeleton/skeleton.css +21 -6
  243. package/components/skeleton/skeleton.d.ts +2 -2
  244. package/components/skeleton/skeleton.examples.md +2 -2
  245. package/components/skeleton/skeleton.yaml +3 -2
  246. package/components/skip-nav/skip-nav.a2ui.json +1 -0
  247. package/components/slider/slider.a2ui.json +6 -0
  248. package/components/slider/slider.class.js +20 -3
  249. package/components/slider/slider.css +2 -2
  250. package/components/slider/slider.yaml +3 -0
  251. package/components/spinner/spinner.a2ui.json +1 -0
  252. package/components/stack/stack.a2ui.json +1 -0
  253. package/components/stat/stat.a2ui.json +1 -0
  254. package/components/stat/stat.js +2 -2
  255. package/components/step-progress/step-progress.a2ui.json +1 -0
  256. package/components/step-progress/step-progress.yaml +1 -1
  257. package/components/stepper/stepper-item.a2ui.json +7 -3
  258. package/components/stepper/stepper-item.yaml +15 -5
  259. package/components/stepper/stepper.a2ui.json +5 -1
  260. package/components/stepper/stepper.class.js +31 -16
  261. package/components/stepper/stepper.d.ts +1 -1
  262. package/components/stepper/stepper.yaml +4 -2
  263. package/components/stream/stream.a2ui.json +1 -0
  264. package/components/swatch/swatch.a2ui.json +1 -0
  265. package/components/swiper/swiper.a2ui.json +1 -0
  266. package/components/swiper/swiper.class.js +5 -1
  267. package/components/switch/switch.a2ui.json +12 -11
  268. package/components/switch/switch.css +1 -1
  269. package/components/switch/switch.yaml +6 -6
  270. package/components/table/table.a2ui.json +1 -0
  271. package/components/table/table.class.js +14 -12
  272. package/components/table/table.css +11 -9
  273. package/components/table-toolbar/table-toolbar.a2ui.json +1 -0
  274. package/components/table-toolbar/table-toolbar.class.js +38 -19
  275. package/components/table-toolbar/table-toolbar.css +1 -1
  276. package/components/tabs/tab.a2ui.json +9 -0
  277. package/components/tabs/tab.js +4 -0
  278. package/components/tabs/tab.yaml +15 -0
  279. package/components/tabs/tabs.a2ui.json +9 -4
  280. package/components/tabs/tabs.class.js +13 -1
  281. package/components/tabs/tabs.css +8 -0
  282. package/components/tabs/tabs.d.ts +2 -0
  283. package/components/tabs/tabs.yaml +9 -2
  284. package/components/tag/tag.a2ui.json +1 -0
  285. package/components/tags-input/tags-input.a2ui.json +22 -17
  286. package/components/tags-input/tags-input.class.js +13 -11
  287. package/components/tags-input/tags-input.css +10 -6
  288. package/components/tags-input/tags-input.d.ts +16 -7
  289. package/components/tags-input/tags-input.examples.md +2 -2
  290. package/components/tags-input/tags-input.yaml +25 -8
  291. package/components/text/text.a2ui.json +6 -5
  292. package/components/text/text.css +10 -5
  293. package/components/text/text.d.ts +2 -2
  294. package/components/text/text.yaml +9 -4
  295. package/components/textarea/textarea.a2ui.json +2 -1
  296. package/components/textarea/textarea.yaml +1 -1
  297. package/components/theme-provider/theme-provider.a2ui.json +2 -1
  298. package/components/theme-provider/theme-provider.d.ts +5 -3
  299. package/components/theme-provider/theme-provider.yaml +5 -3
  300. package/components/time-picker/time-picker.a2ui.json +1 -0
  301. package/components/time-picker/time-picker.class.js +4 -2
  302. package/components/timeline/timeline-item.a2ui.json +26 -3
  303. package/components/timeline/timeline-item.yaml +22 -7
  304. package/components/timeline/timeline.a2ui.json +4 -0
  305. package/components/timeline/timeline.class.js +29 -18
  306. package/components/timeline/timeline.d.ts +3 -3
  307. package/components/timeline/timeline.yaml +2 -0
  308. package/components/toast/toast.a2ui.json +10 -3
  309. package/components/toast/toast.yaml +20 -13
  310. package/components/toc/toc.a2ui.json +1 -0
  311. package/components/toggle-group/toggle-group.a2ui.json +7 -3
  312. package/components/toggle-group/toggle-group.class.js +40 -1
  313. package/components/toggle-group/toggle-group.css +6 -1
  314. package/components/toggle-group/toggle-group.d.ts +2 -2
  315. package/components/toggle-group/toggle-group.yaml +21 -12
  316. package/components/toggle-group/toggle-option.a2ui.json +7 -3
  317. package/components/toggle-group/toggle-option.yaml +13 -7
  318. package/components/toggle-scheme/toggle-scheme.a2ui.json +2 -1
  319. package/components/toggle-scheme/toggle-scheme.yaml +1 -1
  320. package/components/toolbar/toolbar-group.a2ui.json +1 -0
  321. package/components/toolbar/toolbar.a2ui.json +1 -0
  322. package/components/toolbar/toolbar.class.js +3 -0
  323. package/components/tooltip/tooltip.a2ui.json +1 -0
  324. package/components/tour/tour-step.a2ui.json +4 -0
  325. package/components/tour/tour-step.yaml +2 -0
  326. package/components/tour/tour.a2ui.json +4 -0
  327. package/components/tour/tour.yaml +2 -0
  328. package/components/tree/tree-item.a2ui.json +5 -0
  329. package/components/tree/tree-item.yaml +3 -0
  330. package/components/tree/tree.a2ui.json +4 -0
  331. package/components/tree/tree.class.js +2 -1
  332. package/components/tree/tree.yaml +2 -0
  333. package/components/upload/upload.a2ui.json +8 -1
  334. package/components/upload/upload.class.js +35 -5
  335. package/components/upload/upload.css +28 -0
  336. package/components/upload/upload.d.ts +16 -0
  337. package/components/upload/upload.yaml +27 -7
  338. package/components/visually-hidden/visually-hidden.a2ui.json +1 -0
  339. package/core/dom.d.ts +11 -0
  340. package/core/dom.js +34 -0
  341. package/core/form.js +7 -0
  342. package/core/index.d.ts +1 -0
  343. package/core/index.js +1 -0
  344. package/core/responsive.js +16 -4
  345. package/core/template.js +2 -1
  346. package/custom-elements.json +437 -489
  347. package/dist/host.min.css +1 -1
  348. package/dist/host.sheet.js +1 -1
  349. package/dist/theme-provider.min.js +5 -5
  350. package/dist/web-components.min.css +1 -1
  351. package/dist/web-components.min.js +91 -104
  352. package/dist/web-components.sheet.js +1 -1
  353. package/package.json +4 -2
  354. package/patterns/conversion-funnel/conversion-funnel.examples.html +15 -15
  355. package/patterns/inline-dialog/inline-dialog.examples.html +2 -2
  356. package/patterns/inline-dialog/inline-dialog.html +4 -0
  357. package/patterns/timezone-selector/timezone-selector.examples.html +1 -1
  358. package/patterns/timezone-selector/timezone-selector.html +2 -2
  359. package/styles/api/text.css +7 -0
  360. package/traits/_catalog.json +129 -41
  361. package/traits/anchor-positioning/anchor-positioning.js +1 -0
  362. package/traits/announcer/announcer.js +1 -0
  363. package/traits/arrow-grid-nav/arrow-grid-nav.js +1 -0
  364. package/traits/attention-pulse/attention-pulse.js +1 -0
  365. package/traits/count-up/count-up.js +1 -0
  366. package/traits/define.js +78 -0
  367. package/traits/focus-restore/focus-restore.js +2 -1
  368. package/traits/haptic-feedback/haptic-feedback.js +1 -0
  369. package/traits/input-mask/input-mask.js +1 -0
  370. package/traits/intersection-observer/intersection-observer.js +1 -0
  371. package/traits/layout-animation/layout-animation.js +1 -0
  372. package/traits/noise-texture/noise-texture.js +1 -0
  373. package/traits/resize-observer/resize-observer.js +1 -0
  374. package/traits/scroll-progress/scroll-progress.js +1 -0
  375. package/traits/snap-to-grid/snap-to-grid.js +1 -0
  376. package/traits/sound-feedback/sound-feedback.js +1 -0
  377. package/traits/spring-animate/spring-animate.js +1 -0
  378. 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/Progress.json",
4
4
  "title": "Progress",
5
- "description": "Progress indicator with bar (default) or spinner variant. Value < 0 marks indeterminate state showing animated activity instead of a fill. Use inside <progress-row-ui> for labeled task lists or standalone for global loading indicators; for percent-complete inline displays use <stat-ui> instead.",
5
+ "description": "Linear progress bar indicator. Value < 0 marks indeterminate state showing animated activity instead of a fill. Bar-only for circular loading indicators use <spinner-ui> instead (the former `variant=\"spinner\"` render mode was retired; spinner-ui owns circular). Set `label` for a labeled task-list row (label + bar + optional `meta` text in one row, e.g. storage quotas, capacity breakdowns) — absorbed <progress-row-ui>'s row layout directly; that component is now a deprecated alias. Omit `label` for a standalone bar (global loading indicators); for percent-complete inline displays use <stat-ui> instead.",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -16,19 +16,23 @@
16
16
  "component": {
17
17
  "const": "Progress"
18
18
  },
19
- "value": {
20
- "description": "Current progress. 0..max (or 0..1 when max omitted). null = indeterminate (legacy -1 accepted for back-compat).",
21
- "type": "number",
22
- "default": null
19
+ "label": {
20
+ "description": "Left-hand label text. Presence (non-empty) switches to the labeled row layout — label + bar + optional `meta` in one row; absent = plain bar. Sanctioned Mode Attribute (component-token-contract.md).",
21
+ "type": "string",
22
+ "default": ""
23
23
  },
24
- "variant": {
25
- "description": "Render mode `bar` (default) or `spinner`. For fill color set the `--progress-fill` token (defaults to `--md-sys-color-primary`); there is no variant-as-color (use the token).",
24
+ "meta": {
25
+ "description": "Right-hand meta text shown in row layout (e.g. '32 GB', '4.2k / 10k'). No visible effect without `label`.",
26
26
  "type": "string",
27
- "enum": [
28
- "bar",
29
- "spinner"
27
+ "default": ""
28
+ },
29
+ "value": {
30
+ "description": "Current progress, 0-100 (clamped). null = indeterminate (legacy -1 accepted for back-compat).",
31
+ "type": [
32
+ "number",
33
+ "null"
30
34
  ],
31
- "default": "bar"
35
+ "default": null
32
36
  }
33
37
  },
34
38
  "required": [
@@ -36,19 +40,30 @@
36
40
  ],
37
41
  "unevaluatedProperties": false,
38
42
  "x-adiaui": {
39
- "anti_patterns": [],
40
- "category": "display",
43
+ "anti_patterns": [
44
+ {
45
+ "fix": "{\"component\": \"Spinner\"}\n",
46
+ "why": "Progress no longer has a `variant` prop — the spinner render mode\nwas retired. Progress is bar-only now.\n",
47
+ "wrong": "{\"component\": \"Progress\", \"variant\": \"spinner\"}\n"
48
+ },
49
+ {
50
+ "fix": "{\"component\": \"Progress\", \"label\": \"CPU\", \"value\": 92}\n",
51
+ "why": "ProgressRow is deprecated — its label+row layout was\nabsorbed into Progress directly.\n",
52
+ "wrong": "{\"component\": \"ProgressRow\", \"label\": \"CPU\", \"value\": 92}\n"
53
+ }
54
+ ],
55
+ "category": "feedback",
41
56
  "composes": [],
42
57
  "events": {},
43
58
  "examples": [
44
59
  {
45
60
  "description": "Two-column dashboard with quick actions (buttons) and system status (progress bars).",
46
- "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Grid\",\n \"children\": [\n \"c1\",\n \"c2\"\n ],\n \"columns\": \"2\"\n },\n {\n \"id\": \"c1\",\n \"component\": \"Card\",\n \"children\": [\n \"c1h\",\n \"c1s\"\n ]\n },\n {\n \"id\": \"c1h\",\n \"component\": \"Header\",\n \"children\": [\n \"c1t\"\n ]\n },\n {\n \"id\": \"c1t\",\n \"component\": \"Text\",\n \"slot\": \"heading\",\n \"textContent\": \"Quick Actions\",\n \"variant\": \"section\"\n },\n {\n \"id\": \"c1s\",\n \"component\": \"Section\",\n \"children\": [\n \"c1col\"\n ]\n },\n {\n \"id\": \"c1col\",\n \"component\": \"Column\",\n \"children\": [\n \"b1\",\n \"b2\",\n \"b3\"\n ]\n },\n {\n \"id\": \"b1\",\n \"component\": \"Button\",\n \"text\": \"New Project\",\n \"variant\": \"solid\",\n \"iconLeading\": \"plus\"\n },\n {\n \"id\": \"b2\",\n \"component\": \"Button\",\n \"text\": \"Invite Member\",\n \"variant\": \"outline\",\n \"iconLeading\": \"users\"\n },\n {\n \"id\": \"b3\",\n \"component\": \"Button\",\n \"text\": \"View Reports\",\n \"variant\": \"ghost\",\n \"iconLeading\": \"chart\"\n },\n {\n \"id\": \"c2\",\n \"component\": \"Card\",\n \"children\": [\n \"c2h\",\n \"c2s\"\n ]\n },\n {\n \"id\": \"c2h\",\n \"component\": \"Header\",\n \"children\": [\n \"c2t\"\n ]\n },\n {\n \"id\": \"c2t\",\n \"component\": \"Text\",\n \"slot\": \"heading\",\n \"textContent\": \"System Status\",\n \"variant\": \"section\"\n },\n {\n \"id\": \"c2s\",\n \"component\": \"Section\",\n \"children\": [\n \"c2col\"\n ]\n },\n {\n \"id\": \"c2col\",\n \"component\": \"Column\",\n \"children\": [\n \"p1\",\n \"p2\",\n \"p3\"\n ]\n },\n {\n \"id\": \"p1\",\n \"component\": \"Progress\",\n \"value\": \"92\",\n \"label\": \"CPU\"\n },\n {\n \"id\": \"p2\",\n \"component\": \"Progress\",\n \"value\": \"67\",\n \"label\": \"Memory\"\n },\n {\n \"id\": \"p3\",\n \"component\": \"Progress\",\n \"value\": \"34\",\n \"label\": \"Disk\"\n }\n]",
61
+ "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Grid\",\n \"children\": [\n \"c1\",\n \"c2\"\n ],\n \"columns\": \"2\"\n },\n {\n \"id\": \"c1\",\n \"component\": \"Card\",\n \"children\": [\n \"c1h\",\n \"c1s\"\n ]\n },\n {\n \"id\": \"c1h\",\n \"component\": \"Header\",\n \"children\": [\n \"c1t\"\n ]\n },\n {\n \"id\": \"c1t\",\n \"component\": \"Text\",\n \"slot\": \"heading\",\n \"textContent\": \"Quick Actions\",\n \"variant\": \"section\"\n },\n {\n \"id\": \"c1s\",\n \"component\": \"Section\",\n \"children\": [\n \"c1col\"\n ]\n },\n {\n \"id\": \"c1col\",\n \"component\": \"Column\",\n \"children\": [\n \"b1\",\n \"b2\",\n \"b3\"\n ]\n },\n {\n \"id\": \"b1\",\n \"component\": \"Button\",\n \"text\": \"New Project\",\n \"variant\": \"solid\",\n \"icon\": \"plus\"\n },\n {\n \"id\": \"b2\",\n \"component\": \"Button\",\n \"text\": \"Invite Member\",\n \"variant\": \"outline\",\n \"icon\": \"users\"\n },\n {\n \"id\": \"b3\",\n \"component\": \"Button\",\n \"text\": \"View Reports\",\n \"variant\": \"ghost\",\n \"icon\": \"chart\"\n },\n {\n \"id\": \"c2\",\n \"component\": \"Card\",\n \"children\": [\n \"c2h\",\n \"c2s\"\n ]\n },\n {\n \"id\": \"c2h\",\n \"component\": \"Header\",\n \"children\": [\n \"c2t\"\n ]\n },\n {\n \"id\": \"c2t\",\n \"component\": \"Text\",\n \"slot\": \"heading\",\n \"textContent\": \"System Status\",\n \"variant\": \"section\"\n },\n {\n \"id\": \"c2s\",\n \"component\": \"Section\",\n \"children\": [\n \"c2col\"\n ]\n },\n {\n \"id\": \"c2col\",\n \"component\": \"Column\",\n \"children\": [\n \"p1\",\n \"p2\",\n \"p3\"\n ]\n },\n {\n \"id\": \"p1\",\n \"component\": \"Progress\",\n \"value\": 92,\n \"label\": \"CPU\"\n },\n {\n \"id\": \"p2\",\n \"component\": \"Progress\",\n \"value\": 67,\n \"label\": \"Memory\"\n },\n {\n \"id\": \"p3\",\n \"component\": \"Progress\",\n \"value\": 34,\n \"label\": \"Disk\"\n }\n]",
47
62
  "name": "dashboard"
48
63
  },
49
64
  {
50
65
  "description": "User onboarding checklist with progress and checkbox items.",
51
- "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Card\",\n \"children\": [\n \"hdr\",\n \"sec\"\n ]\n },\n {\n \"id\": \"hdr\",\n \"component\": \"Header\",\n \"children\": [\n \"title\"\n ]\n },\n {\n \"id\": \"title\",\n \"component\": \"Text\",\n \"slot\": \"heading\",\n \"textContent\": \"Getting Started\"\n },\n {\n \"id\": \"sec\",\n \"component\": \"Section\",\n \"children\": [\n \"col\"\n ]\n },\n {\n \"id\": \"col\",\n \"component\": \"Column\",\n \"children\": [\n \"prog\",\n \"c1\",\n \"c2\",\n \"c3\"\n ],\n \"gap\": \"3\"\n },\n {\n \"id\": \"prog\",\n \"component\": \"Progress\",\n \"value\": 33,\n \"max\": 100\n },\n {\n \"id\": \"c1\",\n \"component\": \"CheckBox\",\n \"label\": \"Complete your profile\",\n \"checked\": true\n },\n {\n \"id\": \"c2\",\n \"component\": \"CheckBox\",\n \"label\": \"Invite team members\"\n },\n {\n \"id\": \"c3\",\n \"component\": \"CheckBox\",\n \"label\": \"Create your first project\"\n }\n]",
66
+ "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Card\",\n \"children\": [\n \"hdr\",\n \"sec\"\n ]\n },\n {\n \"id\": \"hdr\",\n \"component\": \"Header\",\n \"children\": [\n \"title\"\n ]\n },\n {\n \"id\": \"title\",\n \"component\": \"Text\",\n \"slot\": \"heading\",\n \"textContent\": \"Getting Started\"\n },\n {\n \"id\": \"sec\",\n \"component\": \"Section\",\n \"children\": [\n \"col\"\n ]\n },\n {\n \"id\": \"col\",\n \"component\": \"Column\",\n \"children\": [\n \"prog\",\n \"c1\",\n \"c2\",\n \"c3\"\n ],\n \"gap\": \"3\"\n },\n {\n \"id\": \"prog\",\n \"component\": \"Progress\",\n \"value\": 33\n },\n {\n \"id\": \"c1\",\n \"component\": \"CheckBox\",\n \"label\": \"Complete your profile\",\n \"checked\": true\n },\n {\n \"id\": \"c2\",\n \"component\": \"CheckBox\",\n \"label\": \"Invite team members\"\n },\n {\n \"id\": \"c3\",\n \"component\": \"CheckBox\",\n \"label\": \"Create your first project\"\n }\n]",
52
67
  "name": "onboarding-checklist"
53
68
  }
54
69
  ],
@@ -69,20 +84,28 @@
69
84
  "gamification"
70
85
  ],
71
86
  "name": "UIProgress",
72
- "related": [
73
- "grid",
74
- "button",
75
- "check-box",
76
- "upload"
77
- ],
78
- "slots": {
87
+ "parts": {
79
88
  "fill": {
80
- "description": "Bar fill element inside track"
89
+ "description": "Bar fill element inside track — template-owned anatomy part, not a light-DOM insertion point (gh#1447)"
90
+ },
91
+ "label": {
92
+ "description": "Label region — row-layout left-hand text (active when `label` is set)."
93
+ },
94
+ "meta": {
95
+ "description": "Meta region — row-layout right-hand text (active when `label` is set)."
81
96
  },
82
97
  "track": {
83
- "description": "Bar track container"
98
+ "description": "Bar track container — template-owned anatomy part, not a light-DOM insertion point (gh#1447)"
84
99
  }
85
100
  },
101
+ "related": [
102
+ "grid",
103
+ "button",
104
+ "check-box",
105
+ "upload",
106
+ "spinner"
107
+ ],
108
+ "slots": {},
86
109
  "states": [
87
110
  {
88
111
  "description": "Default, ready for interaction.",
@@ -13,40 +13,61 @@
13
13
 
14
14
  /**
15
15
  * <progress-ui value="60"></progress-ui>
16
- * <progress-ui variant="spinner"></progress-ui>
17
16
  * <progress-ui></progress-ui> <!-- indeterminate bar -->
17
+ * <progress-ui value="42" label="CPU" meta="4.2 / 10 GHz"></progress-ui> <!-- labeled row -->
18
18
  *
19
- * Progress indicator. Bar (default) or spinner variant.
19
+ * Linear progress bar indicator. Bar-only for circular loading
20
+ * indicators use <spinner-ui> instead (the former
21
+ * variant="spinner" render mode was retired; spinner-ui owns circular).
20
22
  * value null (absent) = indeterminate, 0-100 = determinate.
21
23
  * (Legacy `value="-1"` is still treated as indeterminate for back-compat.)
24
+ *
25
+ * `label` (non-empty) activates the labeled row layout — label + bar +
26
+ * optional `meta` text in one row (absorbed from the now-deprecated
27
+ * <progress-row-ui>, gh#1363 C4). Omit `label` for a plain standalone bar.
22
28
  */
23
29
 
24
30
  import { UIElement } from '../../core/element.js';
25
31
 
26
32
  export class UIProgress extends UIElement {
27
33
  static properties = {
28
- value: { type: Number, default: null, reflect: true },
29
- variant: { type: String, default: 'bar', reflect: true },
34
+ value: { type: Number, default: null, reflect: true },
35
+ label: { type: String, default: '', reflect: true },
36
+ meta: { type: String, default: '', reflect: true },
30
37
  };
31
38
 
32
39
  static template = () => null;
33
40
 
34
41
  #track = null;
35
42
  #fill = null;
43
+ #labelEl = null;
44
+ #metaEl = null;
36
45
 
37
46
  connected() {
38
47
  this.setAttribute('role', 'progressbar');
39
48
  this.setAttribute('aria-valuemin', '0');
40
49
  this.setAttribute('aria-valuemax', '100');
41
50
 
42
- if (this.variant === 'bar') {
43
- this.#track = document.createElement('div');
44
- this.#track.setAttribute('slot', 'track');
45
- this.#fill = document.createElement('div');
46
- this.#fill.setAttribute('slot', 'fill');
47
- this.#track.appendChild(this.#fill);
48
- this.appendChild(this.#track);
51
+ this.#labelEl = this.querySelector(':scope > [slot="label"]');
52
+ if (!this.#labelEl) {
53
+ this.#labelEl = document.createElement('span');
54
+ this.#labelEl.setAttribute('slot', 'label');
55
+ this.appendChild(this.#labelEl);
56
+ }
57
+
58
+ this.#metaEl = this.querySelector(':scope > [slot="meta"]');
59
+ if (!this.#metaEl) {
60
+ this.#metaEl = document.createElement('span');
61
+ this.#metaEl.setAttribute('slot', 'meta');
62
+ this.appendChild(this.#metaEl);
49
63
  }
64
+
65
+ this.#track = document.createElement('div');
66
+ this.#track.setAttribute('slot', 'track');
67
+ this.#fill = document.createElement('div');
68
+ this.#fill.setAttribute('slot', 'fill');
69
+ this.#track.appendChild(this.#fill);
70
+ this.appendChild(this.#track);
50
71
  }
51
72
 
52
73
  render() {
@@ -64,11 +85,45 @@ export class UIProgress extends UIElement {
64
85
  if (this.#fill) {
65
86
  this.#fill.style.width = indeterminate ? '100%' : `${clamped}%`;
66
87
  }
88
+
89
+ // Row layout — label present (CSS keys off the reflected [label] attr).
90
+ if (this.#labelEl) {
91
+ this.#labelEl.textContent = this.label;
92
+ this.#labelEl.hidden = !this.label;
93
+ }
94
+
95
+ // meta has no visible effect without label — the row layout (and
96
+ // meta's grid-area placement within it) only activates when label is
97
+ // set; without it there's no grid to place meta INTO, so it would
98
+ // otherwise render as a stray block below the bar (gh#1426 CodeRabbit
99
+ // sweep). When label IS set, the [meta] ATTR owns the text; when
100
+ // absent, authored [slot="meta"] content is left intact instead of
101
+ // being wiped + hidden (progress-row-ui's own gh#502 fix, carried
102
+ // over) — only a genuinely empty meta element hides.
103
+ if (this.#metaEl) {
104
+ if (!this.label) {
105
+ this.#metaEl.hidden = true;
106
+ } else if (this.meta) {
107
+ this.#metaEl.textContent = this.meta;
108
+ this.#metaEl.hidden = false;
109
+ } else {
110
+ this.#metaEl.hidden = !this.#metaEl.hasChildNodes();
111
+ }
112
+ }
113
+
114
+ // ARIA: label the control so screen readers announce "CPU, 42 percent".
115
+ if (this.label) {
116
+ this.setAttribute('aria-label', this.meta ? `${this.label}, ${this.meta}` : this.label);
117
+ } else {
118
+ this.removeAttribute('aria-label');
119
+ }
67
120
  }
68
121
 
69
122
  disconnected() {
70
123
  this.#track?.remove();
71
124
  this.#track = null;
72
125
  this.#fill = null;
126
+ this.#labelEl = null;
127
+ this.#metaEl = null;
73
128
  }
74
129
  }
@@ -11,8 +11,14 @@
11
11
  /* -- Indeterminate motion -- */
12
12
  --progress-shimmer-duration: 1.5s;
13
13
  --progress-shimmer-easing: ease-in-out;
14
- --progress-spin-duration: 0.6s;
15
- --progress-spin-easing: linear;
14
+
15
+ /* -- Row layout (label present — absorbed progress-row-ui) -- */
16
+ --progress-row-gap: var(--a-space-2);
17
+ --progress-row-column-gap: var(--a-space-2);
18
+ --progress-row-label-size: var(--a-ui-size);
19
+ --progress-row-label-fg: var(--md-sys-color-neutral-on-surface);
20
+ --progress-row-meta-size: var(--a-ui-sm);
21
+ --progress-row-meta-fg: var(--a-fg-muted);
16
22
  }
17
23
 
18
24
  :scope {
@@ -20,11 +26,14 @@
20
26
  box-sizing: border-box;
21
27
  display: block;
22
28
  width: 100%;
29
+ text-align: start; /* §text-align-reset — row-layout label/meta shouldn't inherit centered ancestors */
23
30
  }
24
31
 
25
- /* ── Bar variant ── */
26
-
27
- [slot="track"] {
32
+ /* Track is the sole direct-child <div> (fill nests inside it) — tag +
33
+ ancestor selects it; slot="track" stays decorative metadata only
34
+ (AGENTS.md: position by tag/ancestor/DOM order, never [slot=]). */
35
+ :scope > div {
36
+ grid-area: bar; /* no-op unless the row-layout mode below is active */
28
37
  width: 100%;
29
38
  height: var(--progress-height);
30
39
  border-radius: var(--progress-radius);
@@ -66,31 +75,40 @@
66
75
  100% { background-position: -200% 0; }
67
76
  }
68
77
 
69
- /* ── Spinner variant ── */
78
+ /* ── Row layout label present (Sanctioned Mode Attribute,
79
+ absorbed from progress-row-ui; component-token-contract.md) ──
80
+ label/meta are both direct-child <span>s, appended in that order
81
+ (progress.class.js#connected) — position by tag + DOM order, never
82
+ [slot=] (AGENTS.md: slot= stays decorative metadata only). */
70
83
 
71
- :scope[variant="spinner"] {
72
- display: inline-flex;
73
- align-items: center;
74
- justify-content: center;
75
- width: 1.5em;
76
- height: 1.5em;
84
+ :scope > span:first-of-type {
85
+ grid-area: label;
86
+ font-size: var(--progress-row-label-size);
87
+ color: var(--progress-row-label-fg);
88
+ line-height: var(--a-font-leading-normal);
89
+ min-width: 0;
90
+ overflow: hidden;
91
+ text-overflow: ellipsis;
92
+ white-space: nowrap;
77
93
  }
78
94
 
79
- :scope[variant="spinner"] [slot="track"] { display: none; }
80
-
81
- :scope[variant="spinner"]::after {
82
- content: "";
83
- box-sizing: border-box;
84
- display: block;
85
- width: 100%;
86
- height: 100%;
87
- border: 2px solid var(--progress-fill);
88
- border-top-color: transparent;
89
- border-radius: var(--progress-radius);
90
- animation: progress-spin var(--progress-spin-duration) var(--progress-spin-easing) infinite;
95
+ :scope > span:last-of-type {
96
+ grid-area: meta;
97
+ font-size: var(--progress-row-meta-size);
98
+ color: var(--progress-row-meta-fg);
99
+ font-variant-numeric: tabular-nums;
100
+ justify-self: end;
101
+ line-height: var(--a-font-leading-normal);
91
102
  }
92
103
 
93
- @keyframes progress-spin {
94
- to { transform: rotate(360deg); }
104
+ :scope[label]:not([label=""]) {
105
+ display: grid;
106
+ grid-template-columns: minmax(0, 1fr) auto;
107
+ grid-template-areas:
108
+ "label meta"
109
+ "bar bar";
110
+ column-gap: var(--progress-row-column-gap);
111
+ row-gap: var(--progress-row-gap);
112
+ align-items: baseline;
95
113
  }
96
114
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `<progress-ui>` — Progress indicator with bar (default) or spinner variant. Value < 0 marks indeterminate state showing animated activity instead of a fill. Use inside <progress-row-ui> for labeled task lists or standalone for global loading indicators; for percent-complete inline displays use <stat-ui> instead.
2
+ * `<progress-ui>` — Linear progress bar indicator. Value < 0 marks indeterminate state showing animated activity instead of a fill. Bar-only for circular loading indicators use <spinner-ui> instead (the former `variant="spinner"` render mode was retired; spinner-ui owns circular). Set `label` for a labeled task-list row (label + bar + optional `meta` text in one row, e.g. storage quotas, capacity breakdowns) — absorbed <progress-row-ui>'s row layout directly; that component is now a deprecated alias. Omit `label` for a standalone bar (global loading indicators); for percent-complete inline displays use <stat-ui> instead.
3
3
  *
4
4
  * @see https://ui-kit.exe.xyz/site/components/progress
5
5
  *
@@ -13,8 +13,10 @@
13
13
  import { UIElement } from '../../core/element.js';
14
14
 
15
15
  export class UIProgress extends UIElement {
16
- /** Current progress. 0..max (or 0..1 when max omitted). null = indeterminate (legacy -1 accepted for back-compat). */
17
- value: number;
18
- /** Render mode `bar` (default) or `spinner`. For fill color set the `--progress-fill` token (defaults to `--md-sys-color-primary`); there is no variant-as-color (use the token). */
19
- variant: 'bar' | 'spinner';
16
+ /** Left-hand label text. Presence (non-empty) switches to the labeled row layout — label + bar + optional `meta` in one row; absent = plain bar. Sanctioned Mode Attribute (component-token-contract.md). */
17
+ label: string;
18
+ /** Right-hand meta text shown in row layout (e.g. '32 GB', '4.2k / 10k'). No visible effect without `label`. */
19
+ meta: string;
20
+ /** Current progress, 0-100 (clamped). null = indeterminate (legacy -1 accepted for back-compat). */
21
+ value: number | null;
20
22
  }
@@ -12,8 +12,8 @@
12
12
  <progress-ui></progress-ui>
13
13
  ```
14
14
 
15
- ## variant
15
+ ## Sizes
16
16
 
17
17
  ```html
18
- <progress-ui value="60" variant="bar"></progress-ui>
18
+ <progress-ui value="60" style="width:100px"></progress-ui>
19
19
  ```