@adia-ai/web-components 0.8.39 → 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 (424) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/MIGRATION.md +1269 -3
  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-artifact/agent-artifact.css +1 -1
  21. package/components/agent-feedback-bar/agent-feedback-bar.a2ui.json +6 -5
  22. package/components/agent-feedback-bar/agent-feedback-bar.yaml +6 -2
  23. package/components/agent-questions/agent-questions.a2ui.json +1 -0
  24. package/components/agent-reasoning/agent-reasoning.a2ui.json +6 -5
  25. package/components/agent-reasoning/agent-reasoning.css +2 -2
  26. package/components/agent-reasoning/agent-reasoning.yaml +6 -2
  27. package/components/agent-suggestions/agent-suggestions.a2ui.json +11 -2
  28. package/components/agent-suggestions/agent-suggestions.class.js +2 -1
  29. package/components/agent-suggestions/agent-suggestions.d.ts +4 -4
  30. package/components/agent-suggestions/agent-suggestions.yaml +4 -2
  31. package/components/agent-trace/agent-trace.a2ui.json +6 -5
  32. package/components/agent-trace/agent-trace.css +3 -3
  33. package/components/agent-trace/agent-trace.yaml +6 -2
  34. package/components/alert/alert.a2ui.json +1 -0
  35. package/components/alert/alert.css +2 -2
  36. package/components/anchor-bar/anchor-bar.a2ui.json +1 -0
  37. package/components/aside/aside.a2ui.json +1 -0
  38. package/components/avatar/avatar-group.a2ui.json +7 -1
  39. package/components/avatar/avatar-group.yaml +1 -0
  40. package/components/avatar/avatar.a2ui.json +12 -11
  41. package/components/avatar/avatar.css +1 -1
  42. package/components/avatar/avatar.d.ts +1 -1
  43. package/components/avatar/avatar.yaml +4 -4
  44. package/components/badge/badge.a2ui.json +1 -0
  45. package/components/badge/badge.css +1 -1
  46. package/components/block/block.a2ui.json +1 -0
  47. package/components/blockquote/blockquote.a2ui.json +1 -0
  48. package/components/breadcrumb/breadcrumb.a2ui.json +1 -0
  49. package/components/button/button.a2ui.json +1 -3
  50. package/components/button/button.css +6 -5
  51. package/components/button/button.yaml +1 -3
  52. package/components/calendar-grid/calendar-grid.a2ui.json +1 -0
  53. package/components/calendar-grid/calendar-grid.class.js +2 -1
  54. package/components/calendar-picker/calendar-picker.a2ui.json +143 -24
  55. package/components/calendar-picker/calendar-picker.class.js +490 -197
  56. package/components/calendar-picker/calendar-picker.css +121 -172
  57. package/components/calendar-picker/calendar-picker.yaml +225 -47
  58. package/components/canvas/canvas.a2ui.json +6 -5
  59. package/components/canvas/canvas.d.ts +37 -0
  60. package/components/canvas/canvas.js +72 -3
  61. package/components/canvas/canvas.yaml +6 -2
  62. package/components/card/card.a2ui.json +25 -2
  63. package/components/card/card.class.js +3 -0
  64. package/components/card/card.css +34 -4
  65. package/components/card/card.d.ts +2 -2
  66. package/components/card/card.examples.md +3 -3
  67. package/components/card/card.yaml +28 -4
  68. package/components/chart/chart.a2ui.json +13 -8
  69. package/components/chart/chart.class.js +10 -10
  70. package/components/chart/chart.css +12 -10
  71. package/components/chart/chart.d.ts +2 -2
  72. package/components/chart/chart.yaml +8 -5
  73. package/components/chart-legend/chart-legend.a2ui.json +1 -0
  74. package/components/chat-thread/chat-input.a2ui.json +1 -0
  75. package/components/chat-thread/chat-thread.a2ui.json +10 -9
  76. package/components/chat-thread/chat-thread.css +1 -1
  77. package/components/chat-thread/chat-thread.yaml +13 -20
  78. package/components/check/check.a2ui.json +10 -9
  79. package/components/check/check.yaml +4 -4
  80. package/components/code/code.a2ui.json +1 -0
  81. package/components/code/code.css +6 -6
  82. package/components/col/col.a2ui.json +1 -0
  83. package/components/color-input/color-input.a2ui.json +1 -0
  84. package/components/color-picker/color-picker.a2ui.json +1 -0
  85. package/components/combobox/combobox.a2ui.json +3 -2
  86. package/components/combobox/combobox.css +2 -2
  87. package/components/combobox/combobox.yaml +2 -2
  88. package/components/command/command.a2ui.json +12 -10
  89. package/components/command/command.class.js +3 -2
  90. package/components/command/command.css +3 -3
  91. package/components/command/command.yaml +17 -4
  92. package/components/context-menu/context-menu.a2ui.json +1 -0
  93. package/components/date-range-picker/date-range-picker.a2ui.json +2 -1
  94. package/components/date-range-picker/date-range-picker.css +1 -1
  95. package/components/date-range-picker/date-range-picker.yaml +1 -1
  96. package/components/datetime-picker/datetime-picker.a2ui.json +15 -108
  97. package/components/datetime-picker/datetime-picker.class.js +37 -690
  98. package/components/datetime-picker/datetime-picker.css +11 -183
  99. package/components/datetime-picker/datetime-picker.d.ts +4 -5
  100. package/components/datetime-picker/datetime-picker.yaml +44 -135
  101. package/components/demo-toggle/demo-toggle.a2ui.json +1 -0
  102. package/components/demo-toggle/demo-toggle.css +1 -1
  103. package/components/description-list/description-list.a2ui.json +1 -0
  104. package/components/description-list/description-list.css +2 -2
  105. package/components/display-field/display-field.a2ui.json +1 -0
  106. package/components/display-field/display-field.css +3 -3
  107. package/components/divider/divider.a2ui.json +1 -0
  108. package/components/divider/divider.css +1 -1
  109. package/components/drawer/drawer.a2ui.json +1 -3
  110. package/components/drawer/drawer.css +3 -3
  111. package/components/drawer/drawer.yaml +0 -2
  112. package/components/drilldown/drilldown.a2ui.json +22 -20
  113. package/components/drilldown/drilldown.class.js +4 -3
  114. package/components/drilldown/drilldown.css +8 -8
  115. package/components/drilldown/drilldown.yaml +40 -9
  116. package/components/embed/embed.a2ui.json +6 -5
  117. package/components/embed/embed.yaml +2 -2
  118. package/components/empty-state/empty-state.a2ui.json +1 -0
  119. package/components/empty-state/empty-state.css +2 -2
  120. package/components/feed/feed-item.a2ui.json +25 -5
  121. package/components/feed/feed-item.yaml +28 -7
  122. package/components/feed/feed.a2ui.json +9 -2
  123. package/components/feed/feed.class.js +19 -12
  124. package/components/feed/feed.css +8 -8
  125. package/components/feed/feed.yaml +14 -1
  126. package/components/field/field.a2ui.json +1 -0
  127. package/components/field/field.css +1 -1
  128. package/components/field/field.examples.md +1 -1
  129. package/components/fields/fields.a2ui.json +1 -0
  130. package/components/fields/fields.examples.md +1 -1
  131. package/components/footer/footer.a2ui.json +1 -0
  132. package/components/frame/frame.a2ui.json +1 -0
  133. package/components/grid/grid.a2ui.json +1 -0
  134. package/components/header/header.a2ui.json +3 -2
  135. package/components/header/header.yaml +3 -3
  136. package/components/heatmap/heatmap.a2ui.json +2 -1
  137. package/components/heatmap/heatmap.class.js +1 -1
  138. package/components/heatmap/heatmap.css +6 -6
  139. package/components/heatmap/heatmap.yaml +1 -1
  140. package/components/icon/icon.a2ui.json +1 -0
  141. package/components/image/image.a2ui.json +28 -14
  142. package/components/image/image.class.js +38 -23
  143. package/components/image/image.css +18 -8
  144. package/components/image/image.d.ts +2 -2
  145. package/components/image/image.examples.md +3 -3
  146. package/components/image/image.yaml +23 -7
  147. package/components/inline-edit/inline-edit.a2ui.json +1 -0
  148. package/components/inline-message/inline-message.a2ui.json +3 -1
  149. package/components/inline-message/inline-message.class.js +3 -1
  150. package/components/inline-message/inline-message.css +1 -1
  151. package/components/inline-message/inline-message.d.ts +2 -2
  152. package/components/inline-message/inline-message.yaml +2 -1
  153. package/components/input/input.a2ui.json +66 -16
  154. package/components/input/input.class.js +64 -7
  155. package/components/input/input.css +19 -18
  156. package/components/input/input.d.ts +9 -4
  157. package/components/input/input.yaml +83 -10
  158. package/components/inspector/inspector.a2ui.json +1 -0
  159. package/components/integration-card/integration-card.a2ui.json +1 -0
  160. package/components/integration-card/integration-card.css +4 -4
  161. package/components/kbd/kbd.a2ui.json +1 -0
  162. package/components/kbd/kbd.css +1 -1
  163. package/components/link/link.a2ui.json +2 -1
  164. package/components/link/link.yaml +1 -1
  165. package/components/list/list-item.a2ui.json +9 -0
  166. package/components/list/list-item.yaml +12 -0
  167. package/components/list/list.a2ui.json +9 -3
  168. package/components/list/list.class.js +14 -1
  169. package/components/list/list.css +14 -3
  170. package/components/list/list.d.ts +7 -5
  171. package/components/list/list.yaml +16 -6
  172. package/components/list-window/list-window.a2ui.json +1 -0
  173. package/components/list-window/list-window.class.js +2 -1
  174. package/components/loading-overlay/loading-overlay.a2ui.json +1 -0
  175. package/components/mark/mark.a2ui.json +2 -1
  176. package/components/mark/mark.yaml +1 -1
  177. package/components/menu/menu-divider.a2ui.json +1 -0
  178. package/components/menu/menu-item.a2ui.json +3 -1
  179. package/components/menu/menu-item.yaml +6 -0
  180. package/components/menu/menu-label.a2ui.json +1 -0
  181. package/components/menu/menu.a2ui.json +3 -2
  182. package/components/menu/menu.class.js +2 -2
  183. package/components/menu/menu.d.ts +2 -2
  184. package/components/menu/menu.yaml +3 -3
  185. package/components/modal/modal.a2ui.json +1 -0
  186. package/components/nav/nav.a2ui.json +1 -0
  187. package/components/nav/nav.class.js +14 -3
  188. package/components/nav/nav.css +2 -2
  189. package/components/nav-group/nav-group.a2ui.json +1 -0
  190. package/components/nav-group/nav-group.class.js +3 -1
  191. package/components/nav-group/nav-group.css +3 -3
  192. package/components/nav-item/nav-item.a2ui.json +1 -0
  193. package/components/nav-item/nav-item.css +2 -2
  194. package/components/noodles/noodles.a2ui.json +1 -0
  195. package/components/noodles/noodles.class.js +5 -1
  196. package/components/number-format/number-format.a2ui.json +1 -0
  197. package/components/option-card/option-card.a2ui.json +1 -0
  198. package/components/option-card/option-card.css +1 -1
  199. package/components/otp-input/otp-input.a2ui.json +3 -2
  200. package/components/otp-input/otp-input.css +1 -1
  201. package/components/otp-input/otp-input.yaml +9 -2
  202. package/components/page/page.a2ui.json +13 -0
  203. package/components/page/page.css +2 -2
  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/pagination/pagination.css +1 -1
  209. package/components/pane/pane.a2ui.json +6 -0
  210. package/components/pane/pane.class.js +3 -3
  211. package/components/pane/pane.css +3 -3
  212. package/components/pane/pane.yaml +3 -0
  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.css +2 -2
  229. package/components/progress-row/progress-row.d.ts +2 -2
  230. package/components/progress-row/progress-row.examples.md +2 -14
  231. package/components/progress-row/progress-row.yaml +28 -36
  232. package/components/qr-code/qr-code.a2ui.json +13 -12
  233. package/components/qr-code/qr-code.class.js +7 -7
  234. package/components/qr-code/qr-code.css +1 -1
  235. package/components/qr-code/qr-code.d.ts +10 -7
  236. package/components/qr-code/qr-code.yaml +18 -12
  237. package/components/radio/radio.a2ui.json +8 -7
  238. package/components/radio/radio.class.js +8 -0
  239. package/components/radio/radio.yaml +3 -3
  240. package/components/radio-group/radio-group.a2ui.json +5 -3
  241. package/components/radio-group/radio-group.class.js +11 -0
  242. package/components/radio-group/radio-group.yaml +7 -1
  243. package/components/range/range.a2ui.json +6 -0
  244. package/components/range/range.class.js +2 -2
  245. package/components/range/range.css +3 -3
  246. package/components/range/range.yaml +3 -0
  247. package/components/rating/rating.a2ui.json +1 -0
  248. package/components/rating/rating.css +1 -1
  249. package/components/relative-time/relative-time.a2ui.json +1 -0
  250. package/components/richtext/richtext.a2ui.json +2 -1
  251. package/components/richtext/richtext.css +3 -3
  252. package/components/richtext/richtext.yaml +1 -1
  253. package/components/row/row.a2ui.json +1 -0
  254. package/components/search/search.a2ui.json +1 -0
  255. package/components/search/search.class.js +4 -1
  256. package/components/section/section.a2ui.json +1 -0
  257. package/components/segment/segment.a2ui.json +21 -10
  258. package/components/segment/segment.css +20 -4
  259. package/components/segment/segment.d.ts +2 -1
  260. package/components/segment/segment.yaml +20 -13
  261. package/components/segmented/segmented.a2ui.json +36 -7
  262. package/components/segmented/segmented.class.js +113 -22
  263. package/components/segmented/segmented.css +3 -0
  264. package/components/segmented/segmented.d.ts +3 -1
  265. package/components/segmented/segmented.yaml +80 -8
  266. package/components/select/select.a2ui.json +18 -13
  267. package/components/select/select.class.js +61 -37
  268. package/components/select/select.css +18 -16
  269. package/components/select/select.yaml +18 -7
  270. package/components/skeleton/skeleton.a2ui.json +8 -7
  271. package/components/skeleton/skeleton.class.js +8 -7
  272. package/components/skeleton/skeleton.css +21 -6
  273. package/components/skeleton/skeleton.d.ts +2 -2
  274. package/components/skeleton/skeleton.examples.md +2 -2
  275. package/components/skeleton/skeleton.yaml +3 -2
  276. package/components/skip-nav/skip-nav.a2ui.json +1 -0
  277. package/components/slider/slider.a2ui.json +6 -0
  278. package/components/slider/slider.class.js +20 -3
  279. package/components/slider/slider.css +2 -2
  280. package/components/slider/slider.yaml +3 -0
  281. package/components/spinner/spinner.a2ui.json +1 -0
  282. package/components/spinner/spinner.css +1 -1
  283. package/components/stack/stack.a2ui.json +1 -0
  284. package/components/stat/stat.a2ui.json +1 -0
  285. package/components/stat/stat.css +3 -3
  286. package/components/stat/stat.js +2 -2
  287. package/components/step-progress/step-progress.a2ui.json +1 -0
  288. package/components/step-progress/step-progress.css +1 -1
  289. package/components/step-progress/step-progress.yaml +1 -1
  290. package/components/stepper/stepper-item.a2ui.json +7 -3
  291. package/components/stepper/stepper-item.yaml +15 -5
  292. package/components/stepper/stepper.a2ui.json +5 -1
  293. package/components/stepper/stepper.class.js +31 -16
  294. package/components/stepper/stepper.css +2 -2
  295. package/components/stepper/stepper.d.ts +1 -1
  296. package/components/stepper/stepper.yaml +4 -2
  297. package/components/stream/stream.a2ui.json +1 -0
  298. package/components/swatch/swatch.a2ui.json +1 -0
  299. package/components/swatch/swatch.css +2 -2
  300. package/components/swiper/swiper.a2ui.json +1 -0
  301. package/components/swiper/swiper.class.js +5 -1
  302. package/components/switch/switch.a2ui.json +12 -11
  303. package/components/switch/switch.css +1 -1
  304. package/components/switch/switch.yaml +6 -6
  305. package/components/table/table.a2ui.json +1 -10
  306. package/components/table/table.class.js +18 -16
  307. package/components/table/table.css +17 -18
  308. package/components/table/table.d.ts +0 -2
  309. package/components/table/table.yaml +0 -9
  310. package/components/table-toolbar/table-toolbar.a2ui.json +1 -0
  311. package/components/table-toolbar/table-toolbar.class.js +38 -19
  312. package/components/table-toolbar/table-toolbar.css +2 -2
  313. package/components/tabs/tab.a2ui.json +9 -0
  314. package/components/tabs/tab.js +4 -0
  315. package/components/tabs/tab.yaml +15 -0
  316. package/components/tabs/tabs.a2ui.json +9 -4
  317. package/components/tabs/tabs.class.js +13 -1
  318. package/components/tabs/tabs.css +9 -1
  319. package/components/tabs/tabs.d.ts +2 -0
  320. package/components/tabs/tabs.yaml +9 -2
  321. package/components/tag/tag.a2ui.json +1 -0
  322. package/components/tag/tag.css +2 -2
  323. package/components/tags-input/tags-input.a2ui.json +22 -17
  324. package/components/tags-input/tags-input.class.js +13 -11
  325. package/components/tags-input/tags-input.css +11 -7
  326. package/components/tags-input/tags-input.d.ts +16 -7
  327. package/components/tags-input/tags-input.examples.md +2 -2
  328. package/components/tags-input/tags-input.yaml +25 -8
  329. package/components/text/text.a2ui.json +6 -5
  330. package/components/text/text.css +10 -5
  331. package/components/text/text.d.ts +2 -2
  332. package/components/text/text.yaml +9 -4
  333. package/components/textarea/textarea.a2ui.json +2 -1
  334. package/components/textarea/textarea.css +1 -1
  335. package/components/textarea/textarea.yaml +1 -1
  336. package/components/theme-provider/theme-provider.a2ui.json +2 -1
  337. package/components/theme-provider/theme-provider.d.ts +5 -3
  338. package/components/theme-provider/theme-provider.yaml +5 -3
  339. package/components/time-picker/time-picker.a2ui.json +1 -0
  340. package/components/time-picker/time-picker.class.js +4 -2
  341. package/components/time-picker/time-picker.css +1 -1
  342. package/components/timeline/timeline-item.a2ui.json +26 -3
  343. package/components/timeline/timeline-item.yaml +22 -7
  344. package/components/timeline/timeline.a2ui.json +4 -0
  345. package/components/timeline/timeline.class.js +29 -18
  346. package/components/timeline/timeline.css +4 -4
  347. package/components/timeline/timeline.d.ts +3 -3
  348. package/components/timeline/timeline.yaml +2 -0
  349. package/components/toast/toast.a2ui.json +10 -3
  350. package/components/toast/toast.yaml +20 -13
  351. package/components/toc/toc.a2ui.json +1 -0
  352. package/components/toc/toc.css +1 -1
  353. package/components/toggle-group/toggle-group.a2ui.json +7 -3
  354. package/components/toggle-group/toggle-group.class.js +43 -12
  355. package/components/toggle-group/toggle-group.css +7 -4
  356. package/components/toggle-group/toggle-group.d.ts +3 -4
  357. package/components/toggle-group/toggle-group.yaml +22 -16
  358. package/components/toggle-group/toggle-option.a2ui.json +8 -4
  359. package/components/toggle-group/toggle-option.yaml +15 -13
  360. package/components/toggle-scheme/toggle-scheme.a2ui.json +2 -1
  361. package/components/toggle-scheme/toggle-scheme.yaml +1 -1
  362. package/components/toolbar/toolbar-group.a2ui.json +1 -0
  363. package/components/toolbar/toolbar.a2ui.json +1 -0
  364. package/components/toolbar/toolbar.class.js +3 -0
  365. package/components/tooltip/tooltip.a2ui.json +1 -0
  366. package/components/tooltip/tooltip.css +1 -1
  367. package/components/tour/tour-step.a2ui.json +4 -0
  368. package/components/tour/tour-step.yaml +2 -0
  369. package/components/tour/tour.a2ui.json +4 -0
  370. package/components/tour/tour.css +2 -2
  371. package/components/tour/tour.yaml +2 -0
  372. package/components/tree/tree-item.a2ui.json +5 -0
  373. package/components/tree/tree-item.yaml +3 -0
  374. package/components/tree/tree.a2ui.json +4 -0
  375. package/components/tree/tree.class.js +2 -1
  376. package/components/tree/tree.css +1 -1
  377. package/components/tree/tree.yaml +2 -0
  378. package/components/upload/upload.a2ui.json +8 -1
  379. package/components/upload/upload.class.js +35 -5
  380. package/components/upload/upload.css +28 -0
  381. package/components/upload/upload.d.ts +16 -0
  382. package/components/upload/upload.yaml +27 -7
  383. package/components/visually-hidden/visually-hidden.a2ui.json +1 -0
  384. package/core/dom.d.ts +11 -0
  385. package/core/dom.js +34 -0
  386. package/core/form.js +7 -0
  387. package/core/index.d.ts +1 -0
  388. package/core/index.js +1 -0
  389. package/core/responsive.js +16 -4
  390. package/core/template.js +2 -1
  391. package/custom-elements.json +442 -502
  392. package/dist/host.min.css +1 -1
  393. package/dist/host.sheet.js +1 -1
  394. package/dist/theme-provider.min.js +5 -5
  395. package/dist/web-components.min.css +1 -1
  396. package/dist/web-components.min.js +91 -104
  397. package/dist/web-components.sheet.js +1 -1
  398. package/package.json +4 -2
  399. package/patterns/conversion-funnel/conversion-funnel.examples.html +15 -15
  400. package/patterns/inline-dialog/inline-dialog.examples.html +2 -2
  401. package/patterns/inline-dialog/inline-dialog.html +4 -0
  402. package/patterns/timezone-selector/timezone-selector.examples.html +1 -1
  403. package/patterns/timezone-selector/timezone-selector.html +2 -2
  404. package/styles/api/text.css +7 -0
  405. package/styles/type/scale.css +6 -7
  406. package/traits/_catalog.json +129 -41
  407. package/traits/anchor-positioning/anchor-positioning.js +1 -0
  408. package/traits/announcer/announcer.js +1 -0
  409. package/traits/arrow-grid-nav/arrow-grid-nav.js +1 -0
  410. package/traits/attention-pulse/attention-pulse.js +1 -0
  411. package/traits/count-up/count-up.js +1 -0
  412. package/traits/define.js +78 -0
  413. package/traits/focus-restore/focus-restore.js +2 -1
  414. package/traits/haptic-feedback/haptic-feedback.js +1 -0
  415. package/traits/input-mask/input-mask.js +1 -0
  416. package/traits/intersection-observer/intersection-observer.js +1 -0
  417. package/traits/layout-animation/layout-animation.js +1 -0
  418. package/traits/noise-texture/noise-texture.js +1 -0
  419. package/traits/resize-observer/resize-observer.js +1 -0
  420. package/traits/scroll-progress/scroll-progress.js +1 -0
  421. package/traits/snap-to-grid/snap-to-grid.js +1 -0
  422. package/traits/sound-feedback/sound-feedback.js +1 -0
  423. package/traits/spring-animate/spring-animate.js +1 -0
  424. package/traits/validation/validation.js +1 -0
@@ -3,12 +3,19 @@
3
3
  $schema: ../../../../scripts/schemas/component.yaml.schema.json
4
4
  name: UIProgressRow
5
5
  tag: progress-row-ui
6
- status: stable
6
+ status: deprecated
7
7
  component: ProgressRow
8
- category: data
8
+ category: feedback
9
9
  version: 1
10
- description: Inline labeled progress row with label, progress bar, and meta text. Used for storage
11
- quotas, capacity breakdowns, usage indicators.
10
+ description: >-
11
+ DEPRECATED (gh#1363 C4) absorbed into <progress-ui>: set
12
+ `label` (and optional `meta`) directly on <progress-ui> instead, which
13
+ activates the identical row layout in place. progress-row-ui keeps
14
+ working (still composes <progress-ui> internally, unchanged behavior)
15
+ for existing back-compat markup, but is no longer taught or generated
16
+ for new work. Was: inline labeled progress row with label, progress
17
+ bar, and meta text — storage quotas, capacity breakdowns, usage
18
+ indicators.
12
19
  # Per ADR-0027 — primitives that programmatically create other primitives
13
20
  # do NOT auto-import them. Consumer (or demo shell) must explicitly import.
14
21
  composes:
@@ -48,38 +55,23 @@ traits: []
48
55
  tokens: {}
49
56
  a2ui:
50
57
  rules:
51
- - rule: 'Labeled progress row composes a label + <progress-ui> + optional value display in one horizontal row.'
52
- reason: 'Common form for task-list progress.'
53
- - rule: 'For standalone progress bars without a row context use <progress-ui> directly.'
54
- reason: 'Composition boundary.'
55
- - rule: 'Inside lists (multiple tasks with progress) stack multiple progress-rows in a <col-ui>.'
56
- reason: 'Composition pattern.'
57
- anti_patterns: []
58
- examples:
59
- - name: basic-progress-row
60
- description: Basic ProgressRow usage
61
- a2ui: >-
62
- [
63
- {
64
- "id": "root",
65
- "component": "Card",
66
- "children": [
67
- "sec"
68
- ]
69
- },
70
- {
71
- "id": "sec",
72
- "component": "Section",
73
- "children": [
74
- "comp"
75
- ]
76
- },
77
- {
78
- "id": "comp",
79
- "component": "ProgressRow",
80
- "label": "Example ProgressRow"
81
- }
82
- ]
58
+ - rule: 'DEPRECATED do not generate ProgressRow. Set `label` (and optional `meta`) directly on <progress-ui> instead; label present activates the identical row layout.'
59
+ reason: 'Absorbed progress-row-ui''s row layout into progress-ui (gh#1363 C4); this component is now a back-compat alias only.'
60
+ - rule: 'For standalone progress bars without a row context use <progress-ui> directly (no `label`).'
61
+ reason: 'Composition boundary — unchanged by the absorption.'
62
+ anti_patterns:
63
+ - wrong: |
64
+ {"component": "ProgressRow", "label": "CPU", "value": 92}
65
+ why: |
66
+ ProgressRow is deprecated — its row layout was absorbed
67
+ into Progress directly.
68
+ fix: |
69
+ {"component": "Progress", "label": "CPU", "value": 92}
70
+ # Deliberately empty (gh#1363 C4) — deprecated components carry no
71
+ # A2UI examples: the catalog/corpus must never teach `"component":
72
+ # "ProgressRow"` as a generation target. See progress.yaml's own examples
73
+ # for the equivalent (and current) label+row shape.
74
+ examples: []
83
75
  keywords:
84
76
  - progressrow
85
77
  - progress-row
@@ -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/QRCode.json",
4
4
  "title": "QRCode",
5
- "description": "Inline QR code generator — renders a scannable code as inline SVG.\nTwo modes:\n\n**A. Auto-encode (default).** Set `[value]` to a string (URL, plain\ntext, share link, 2FA secret). The component encodes the data with\nthe built-in zero-deps QR encoder (byte mode, ECC level configurable,\nversions 1–10 up to ~150 byte chars) and renders an SVG.\n\n**B. Bring-your-own matrix.** Set `[matrix]` to a JSON string of a\n2-D 0/1 array (`[[1,0,1,...],[...],...]`). The component renders the\nsupplied matrix directly without invoking its own encoder. Use this\nwhen you need versions 11–40, kanji/alphanumeric mode, or any\nencoder feature beyond the built-in. When both `[value]` and\n`[matrix]` are set, the matrix wins (BYO override).\n\nOutput is a single `<svg>` with `viewBox=\"0 0 N N\"`. Crisp-edges\nrendering preserves the scannable cell boundaries at any size.\nSizing is controlled by the `[size]` prop (host CSS-pixel dimension);\ninternal cell size is computed from `size / (matrix-size + 2 ·\nmargin)`. ARIA: `role=\"img\"` with `aria-label` (default \"QR code\"\nor the `[label]` prop).\n",
5
+ "description": "Inline QR code generator — renders a scannable code as inline SVG.\nTwo modes:\n\n**A. Auto-encode (default).** Set `[value]` to a string (URL, plain\ntext, share link, 2FA secret). The component encodes the data with\nthe built-in zero-deps QR encoder (byte mode, ECC level configurable,\nversions 1–10 up to ~150 byte chars) and renders an SVG.\n\n**B. Bring-your-own matrix.** Set `[matrix]` to a JSON string of a\n2-D 0/1 array (`[[1,0,1,...],[...],...]`). The component renders the\nsupplied matrix directly without invoking its own encoder. Use this\nwhen you need versions 11–40, kanji/alphanumeric mode, or any\nencoder feature beyond the built-in. When both `[value]` and\n`[matrix]` are set, the matrix wins (BYO override).\n\nOutput is a single `<svg>` with `viewBox=\"0 0 N N\"`. Crisp-edges\nrendering preserves the scannable cell boundaries at any size.\nSizing is controlled by the `[size]` prop (host CSS-pixel dimension);\ninternal cell size is computed from `size / (matrix-size + 2 ·\nquiet-zone)`. ARIA: `role=\"img\"` with `aria-label` (default \"QR code\"\nor the `[label]` prop).\n",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -42,18 +42,18 @@
42
42
  "type": "string",
43
43
  "default": "QR code"
44
44
  },
45
- "margin": {
46
- "description": "Quiet zone in cells around the QR pattern. QR spec requires a\nminimum 4-cell margin for reliable scanning; smaller values may\nnot scan on some devices. Default `4`.\n",
47
- "type": "number",
48
- "default": 4
49
- },
50
45
  "matrix": {
51
46
  "description": "BYO precomputed bit matrix as JSON — a 2-D array of 0/1\n(`[[1,0,...],[0,1,...],...]`). When set, the built-in encoder is\nbypassed and this matrix renders directly. Useful for QR variants\nthe built-in doesn't support (versions 11–40, alphanumeric mode,\nkanji, etc.) — bring your own encoder, pass the matrix here.\n",
52
47
  "type": "string",
53
48
  "default": ""
54
49
  },
50
+ "quietZone": {
51
+ "description": "Quiet zone in cells around the QR pattern. QR spec requires a\nminimum 4-cell quiet zone for reliable scanning; smaller values\nmay not scan on some devices. Default `4`. (Renamed from\n`[margin]` — that name collided with the framework's global\n`[margin]` Scale attribute; `margin` on `qr-code-ui` now means\nthe global spacing attribute, per ADR-0053.)\n",
52
+ "type": "number",
53
+ "default": 4
54
+ },
55
55
  "size": {
56
- "description": "Host display size in CSS pixels (width and height; the SVG is\nalways square). Default 200. Internal cell size is computed from\nthis divided by `matrix-size + 2·margin`.\n",
56
+ "description": "Host display size in CSS pixels (width and height; the SVG is\nalways square). Default 200. Internal cell size is computed from\nthis divided by `matrix-size + 2·quiet-zone`.\n",
57
57
  "type": "number",
58
58
  "default": 200
59
59
  },
@@ -71,13 +71,13 @@
71
71
  "anti_patterns": [
72
72
  {
73
73
  "fix": "Drop the ECC level (lower L gives more capacity for the same\nversion), OR shorten the URL (use a URL shortener), OR encode\nwith a BYO encoder library + pass the [matrix]:\n`<qr-code-ui matrix=\"[[1,0,1,...],...]\"></qr-code-ui>`\n",
74
- "why": "Built-in encoder covers versions 1–10. Data beyond v10 capacity\nthrows + renders empty + sets [data-error]. Console warns with\nthe byte length so consumers can diagnose.\n",
74
+ "why": "Built-in encoder covers versions 1–10. Data beyond v10 capacity\nis caught internally: the component renders empty and sets [error]\n(no exception reaches the consumer). Console warns with the value's\nUTF-16 code-unit length (String.length, not UTF-8 bytes) so\nconsumers can diagnose.\n",
75
75
  "wrong": "<qr-code-ui value=\"https://very.long.url.that.exceeds.150.bytes.of.utf8.encoded.length...\"></qr-code-ui>\n"
76
76
  },
77
77
  {
78
- "fix": "<qr-code-ui value=\"...\" margin=\"4\"></qr-code-ui>\n",
79
- "why": "Zero margin breaks scanning. QR spec requires a 4-cell quiet\nzone for reliable detection.\n",
80
- "wrong": "<qr-code-ui value=\"...\" margin=\"0\"></qr-code-ui>\n"
78
+ "fix": "<qr-code-ui value=\"...\" quiet-zone=\"4\"></qr-code-ui>\n",
79
+ "why": "Zero quiet zone breaks scanning. QR spec requires a 4-cell quiet\nzone for reliable detection.\n",
80
+ "wrong": "<qr-code-ui value=\"...\" quiet-zone=\"0\"></qr-code-ui>\n"
81
81
  }
82
82
  ],
83
83
  "category": "display",
@@ -110,6 +110,7 @@
110
110
  "share-link"
111
111
  ],
112
112
  "name": "UIQRCode",
113
+ "parts": {},
113
114
  "related": [
114
115
  "link",
115
116
  "share"
@@ -122,7 +123,7 @@
122
123
  },
123
124
  {
124
125
  "description": "Auto-encode failed (data too long for v1–10 at requested ECC). Renders an empty placeholder; logs a console warning. Switch to a BYO matrix from an external encoder, or downgrade the ECC level.",
125
- "attribute": "data-error",
126
+ "attribute": "error",
126
127
  "name": "error"
127
128
  }
128
129
  ],
@@ -33,7 +33,7 @@ export class UIQRCode extends UIElement {
33
33
  matrix: { type: String, default: '', reflect: true },
34
34
  size: { type: Number, default: 200, reflect: true },
35
35
  errorCorrection: { type: String, default: 'M', reflect: true, attribute: 'error-correction' },
36
- margin: { type: Number, default: 4, reflect: true },
36
+ quietZone: { type: Number, default: 4, reflect: true, attribute: 'quiet-zone' },
37
37
  color: { type: String, default: '', reflect: true },
38
38
  background: { type: String, default: '', reflect: true },
39
39
  label: { type: String, default: 'QR code', reflect: true },
@@ -62,19 +62,19 @@ export class UIQRCode extends UIElement {
62
62
  // BYO matrix wins
63
63
  const byo = this.#parseMatrix(this.matrix);
64
64
  if (byo) {
65
- this.removeAttribute('data-error');
65
+ this.removeAttribute('error');
66
66
  return byo;
67
67
  }
68
68
  if (!this.value) {
69
- this.removeAttribute('data-error');
69
+ this.removeAttribute('error');
70
70
  return null;
71
71
  }
72
72
  try {
73
73
  const result = encodeQR(this.value, { errorCorrection: this.errorCorrection || 'M' });
74
- this.removeAttribute('data-error');
74
+ this.removeAttribute('error');
75
75
  return result.matrix;
76
76
  } catch (e) {
77
- this.setAttribute('data-error', '');
77
+ this.setAttribute('error', '');
78
78
  // eslint-disable-next-line no-console
79
79
  console.warn(`[qr-code-ui] encode failed for value (${this.value?.length || 0} chars at ECC=${this.errorCorrection}): ${e.message}. Lower ECC, shorten input, or supply a precomputed [matrix].`);
80
80
  return null;
@@ -91,7 +91,7 @@ export class UIQRCode extends UIElement {
91
91
  // Cheap idempotence: compute a signature of inputs, skip re-render
92
92
  // if nothing changed (encoding is non-trivial — version selection +
93
93
  // RS ECC + 8 mask evaluations).
94
- const sig = `${this.value}|${this.matrix}|${this.size}|${this.errorCorrection}|${this.margin}|${this.color}|${this.background}`;
94
+ const sig = `${this.value}|${this.matrix}|${this.size}|${this.errorCorrection}|${this.quietZone}|${this.color}|${this.background}`;
95
95
  if (sig === this.#lastSig && this.querySelector('svg')) return;
96
96
  this.#lastSig = sig;
97
97
 
@@ -106,7 +106,7 @@ export class UIQRCode extends UIElement {
106
106
 
107
107
  const svg = matrixToSVG(matrix, {
108
108
  cellSize: 8, // arbitrary internal unit; host CSS controls actual size via [size]
109
- margin: Number.isFinite(this.margin) ? this.margin : 4,
109
+ margin: Number.isFinite(this.quietZone) ? this.quietZone : 4,
110
110
  // Hardcoded fallback to black-on-white — the scannable convention.
111
111
  // Theme-aware `currentColor` produces light-on-dark in dark mode,
112
112
  // which most phone cameras (iPhone Camera in particular) refuse to
@@ -35,7 +35,7 @@
35
35
  the configured ECC. Render an empty placeholder; the warning
36
36
  went to console. Visually: a dashed outline at the requested
37
37
  size so the layout doesn't collapse silently. */
38
- :scope[data-error] {
38
+ :scope[error] {
39
39
  border: 1px dashed var(--a-border-strong);
40
40
  border-radius: var(--a-radius-sm);
41
41
  min-width: 4em;
@@ -18,7 +18,7 @@ Output is a single `<svg>` with `viewBox="0 0 N N"`. Crisp-edges
18
18
  rendering preserves the scannable cell boundaries at any size.
19
19
  Sizing is controlled by the `[size]` prop (host CSS-pixel dimension);
20
20
  internal cell size is computed from `size / (matrix-size + 2 ·
21
- margin)`. ARIA: `role="img"` with `aria-label` (default "QR code"
21
+ quiet-zone)`. ARIA: `role="img"` with `aria-label` (default "QR code"
22
22
  or the `[label]` prop).
23
23
 
24
24
  *
@@ -58,11 +58,6 @@ from more damage at the cost of QR-version size growth.
58
58
  better AT context (e.g. "Share link QR code", "2FA setup QR").
59
59
  */
60
60
  label: string;
61
- /** Quiet zone in cells around the QR pattern. QR spec requires a
62
- minimum 4-cell margin for reliable scanning; smaller values may
63
- not scan on some devices. Default `4`.
64
- */
65
- margin: number;
66
61
  /** BYO precomputed bit matrix as JSON — a 2-D array of 0/1
67
62
  (`[[1,0,...],[0,1,...],...]`). When set, the built-in encoder is
68
63
  bypassed and this matrix renders directly. Useful for QR variants
@@ -70,9 +65,17 @@ the built-in doesn't support (versions 11–40, alphanumeric mode,
70
65
  kanji, etc.) — bring your own encoder, pass the matrix here.
71
66
  */
72
67
  matrix: string;
68
+ /** Quiet zone in cells around the QR pattern. QR spec requires a
69
+ minimum 4-cell quiet zone for reliable scanning; smaller values
70
+ may not scan on some devices. Default `4`. (Renamed from
71
+ `[margin]` — that name collided with the framework's global
72
+ `[margin]` Scale attribute; `margin` on `qr-code-ui` now means
73
+ the global spacing attribute, per ADR-0053.)
74
+ */
75
+ quietZone: number;
73
76
  /** Host display size in CSS pixels (width and height; the SVG is
74
77
  always square). Default 200. Internal cell size is computed from
75
- this divided by `matrix-size + 2·margin`.
78
+ this divided by `matrix-size + 2·quiet-zone`.
76
79
  */
77
80
  size: number;
78
81
  /** The string to encode (URL / text / share link / 2FA seed). When
@@ -25,7 +25,7 @@ description: |
25
25
  rendering preserves the scannable cell boundaries at any size.
26
26
  Sizing is controlled by the `[size]` prop (host CSS-pixel dimension);
27
27
  internal cell size is computed from `size / (matrix-size + 2 ·
28
- margin)`. ARIA: `role="img"` with `aria-label` (default "QR code"
28
+ quiet-zone)`. ARIA: `role="img"` with `aria-label` (default "QR code"
29
29
  or the `[label]` prop).
30
30
  props:
31
31
  value:
@@ -50,7 +50,7 @@ props:
50
50
  description: |
51
51
  Host display size in CSS pixels (width and height; the SVG is
52
52
  always square). Default 200. Internal cell size is computed from
53
- this divided by `matrix-size + 2·margin`.
53
+ this divided by `matrix-size + 2·quiet-zone`.
54
54
  type: number
55
55
  default: 200
56
56
  reflect: true
@@ -64,14 +64,18 @@ props:
64
64
  enum: [L, M, Q, H]
65
65
  reflect: true
66
66
  attribute: error-correction
67
- margin:
67
+ quietZone:
68
68
  description: |
69
69
  Quiet zone in cells around the QR pattern. QR spec requires a
70
- minimum 4-cell margin for reliable scanning; smaller values may
71
- not scan on some devices. Default `4`.
70
+ minimum 4-cell quiet zone for reliable scanning; smaller values
71
+ may not scan on some devices. Default `4`. (Renamed from
72
+ `[margin]` — that name collided with the framework's global
73
+ `[margin]` Scale attribute; `margin` on `qr-code-ui` now means
74
+ the global spacing attribute, per ADR-0053.)
72
75
  type: number
73
76
  default: 4
74
77
  reflect: true
78
+ attribute: quiet-zone
75
79
  color:
76
80
  description: |
77
81
  Foreground (dark-cell) color. Any CSS color string (hex, rgb,
@@ -107,7 +111,7 @@ states:
107
111
  description: Default — QR rendered (or empty if no value/matrix).
108
112
  - name: error
109
113
  description: Auto-encode failed (data too long for v1–10 at requested ECC). Renders an empty placeholder; logs a console warning. Switch to a BYO matrix from an external encoder, or downgrade the ECC level.
110
- attribute: data-error
114
+ attribute: error
111
115
  traits: []
112
116
  tokens:
113
117
  --qr-code-fg:
@@ -125,27 +129,29 @@ a2ui:
125
129
  reason: "Encoder capacity contract."
126
130
  - rule: "When QR sits over a non-white surface, set [background] to a solid color. White-on-image QR backgrounds are unreliable for scanners — quiet-zone contrast against the dark cells is the load-bearing visual."
127
131
  reason: "Scannability constraint."
128
- - rule: "The [margin] (quiet zone) defaults to 4 cells per QR spec. Smaller margins may scan on some devices but not others; do not go below 2."
132
+ - rule: "The [quiet-zone] defaults to 4 cells per QR spec. Smaller values may scan on some devices but not others; do not go below 2."
129
133
  reason: "Quiet-zone requirement."
130
134
  anti_patterns:
131
135
  - wrong: |
132
136
  <qr-code-ui value="https://very.long.url.that.exceeds.150.bytes.of.utf8.encoded.length..."></qr-code-ui>
133
137
  why: |
134
138
  Built-in encoder covers versions 1–10. Data beyond v10 capacity
135
- throws + renders empty + sets [data-error]. Console warns with
136
- the byte length so consumers can diagnose.
139
+ is caught internally: the component renders empty and sets [error]
140
+ (no exception reaches the consumer). Console warns with the value's
141
+ UTF-16 code-unit length (String.length, not UTF-8 bytes) so
142
+ consumers can diagnose.
137
143
  fix: |
138
144
  Drop the ECC level (lower L gives more capacity for the same
139
145
  version), OR shorten the URL (use a URL shortener), OR encode
140
146
  with a BYO encoder library + pass the [matrix]:
141
147
  `<qr-code-ui matrix="[[1,0,1,...],...]"></qr-code-ui>`
142
148
  - wrong: |
143
- <qr-code-ui value="..." margin="0"></qr-code-ui>
149
+ <qr-code-ui value="..." quiet-zone="0"></qr-code-ui>
144
150
  why: |
145
- Zero margin breaks scanning. QR spec requires a 4-cell quiet
151
+ Zero quiet zone breaks scanning. QR spec requires a 4-cell quiet
146
152
  zone for reliable detection.
147
153
  fix: |
148
- <qr-code-ui value="..." margin="4"></qr-code-ui>
154
+ <qr-code-ui value="..." quiet-zone="4"></qr-code-ui>
149
155
  examples:
150
156
  - name: default
151
157
  description: Plain URL encoding at default size + ECC-M.
@@ -101,18 +101,19 @@
101
101
  "poll"
102
102
  ],
103
103
  "name": "UIRadio",
104
- "related": [
105
- "button",
106
- "radio-group"
107
- ],
108
- "slots": {
104
+ "parts": {
109
105
  "dot": {
110
- "description": "Radio dot indicator, sized via --dot-size"
106
+ "description": "Radio dot indicator, sized via --dot-size — template-owned anatomy part, not a light-DOM insertion point"
111
107
  },
112
108
  "label": {
113
- "description": "Label text container, rendered via CSS attr(label) on ::after"
109
+ "description": "Label text beside the dot — set via the `label` attribute (rendered by CSS `attr(label)` on `::after`); template-owned, not a light-DOM insertion point (gh#1435, gh#1447)"
114
110
  }
115
111
  },
112
+ "related": [
113
+ "button",
114
+ "radio-group"
115
+ ],
116
+ "slots": {},
116
117
  "states": [
117
118
  {
118
119
  "description": "Default, ready for interaction.",
@@ -14,6 +14,14 @@
14
14
  /**
15
15
  * <radio-ui> — Radio button. The host IS the control.
16
16
  * Pure CSS dot via [slot="dot"]::after inner circle. No SVG, no inset shadow hack.
17
+ *
18
+ * ADR-0056 exemption (#1363 B7): [checked] — not [selected] — is the
19
+ * state surface here. radio-ui is a native form-control primitive (like
20
+ * option-card-ui's [checked] and accordion-item-ui's [open]); ADR-0056
21
+ * governs the parent-managed selection-item shape (segment-ui,
22
+ * toggle-option-ui), a different convention. radio-ui self-selects on
23
+ * click/keydown and stays independently form-participating per [name] —
24
+ * it is not a child a parent stamps top-down.
17
25
  */
18
26
 
19
27
  import { UIFormElement } from '../../core/form.js';
@@ -56,11 +56,11 @@ props:
56
56
  events:
57
57
  change:
58
58
  description: Fired when this radio becomes selected (bubbles)
59
- slots:
59
+ parts:
60
60
  dot:
61
- description: Radio dot indicator, sized via --dot-size
61
+ description: Radio dot indicator, sized via --dot-size — template-owned anatomy part, not a light-DOM insertion point
62
62
  label:
63
- description: Label text container, rendered via CSS attr(label) on ::after
63
+ description: Label text beside the dot — set via the `label` attribute (rendered by CSS `attr(label)` on `::after`); template-owned, not a light-DOM insertion point (gh#1435, gh#1447)
64
64
  states:
65
65
  - name: idle
66
66
  description: Default, ready for interaction.
@@ -63,6 +63,11 @@
63
63
  "aria-labelledby"
64
64
  ],
65
65
  "name": "UIRadioGroup",
66
+ "parts": {
67
+ "label": {
68
+ "description": "Auto-minted label element (mounted by radio-group-ui from the [label] prop) — do not author this slot directly; template-owned anatomy part, not a light-DOM insertion point (gh#1454). `#ensureLabelElement()` only recognizes its own `[data-radio-group-label]` marker, never a bare consumer-authored `[slot=\"label\"]` element."
69
+ }
70
+ },
66
71
  "related": [
67
72
  "radio",
68
73
  "field"
@@ -70,9 +75,6 @@
70
75
  "slots": {
71
76
  "default": {
72
77
  "description": "radio-ui children sharing one [name=] — exclusivity and arrow-key navigation are unchanged; they still resolve via closest('fieldset, [role=radiogroup]'), which now matches this host."
73
- },
74
- "label": {
75
- "description": "Auto-minted label element (mounted by radio-group-ui from the [label] prop) — do not author this slot directly."
76
78
  }
77
79
  },
78
80
  "states": [
@@ -28,6 +28,17 @@
28
28
  *
29
29
  * Not a form-associated element itself — it carries no value; each child
30
30
  * radio-ui is its own form participant per the existing [name=] contract.
31
+ *
32
+ * ADR-0056 scope note (#1363 B7 flagged "radio-group exposes no value
33
+ * surface at all" against segmented/tabs/select's parent [value]):
34
+ * evaluated and NOT adopted here. ADR-0056 itself governs only a
35
+ * selection-item CHILD's own state surface (segment-ui/toggle-option-ui's
36
+ * [selected]) — radio-ui already conforms via its native [checked]
37
+ * (radio.class.js, same exemption class as option-card-ui/
38
+ * accordion-item-ui). A parent-level [value] on this host would
39
+ * contradict the "not form-associated" design documented above and has
40
+ * no ratifying ADR of its own; left as a named rejected alternative
41
+ * (gh#1379) pending a future naming-convention ruling (B5/B9-shaped).
31
42
  */
32
43
  import { UIElement } from '../../core/element.js';
33
44
 
@@ -37,8 +37,14 @@ events: {}
37
37
  slots:
38
38
  default:
39
39
  description: "radio-ui children sharing one [name=] — exclusivity and arrow-key navigation are unchanged; they still resolve via closest('fieldset, [role=radiogroup]'), which now matches this host."
40
+ parts:
40
41
  label:
41
- description: Auto-minted label element (mounted by radio-group-ui from the [label] prop) — do not author this slot directly.
42
+ description: >-
43
+ Auto-minted label element (mounted by radio-group-ui from the [label]
44
+ prop) — do not author this slot directly; template-owned anatomy part,
45
+ not a light-DOM insertion point (gh#1454).
46
+ `#ensureLabelElement()` only recognizes its own `[data-radio-group-label]`
47
+ marker, never a bare consumer-authored `[slot="label"]` element.
42
48
  states:
43
49
  - name: idle
44
50
  description: Default, ready for interaction.
@@ -95,6 +95,7 @@
95
95
  "volume"
96
96
  ],
97
97
  "name": "UIRange",
98
+ "parts": {},
98
99
  "related": [
99
100
  "input",
100
101
  "button"
@@ -105,6 +106,11 @@
105
106
  "description": "Default, ready for interaction.",
106
107
  "name": "idle"
107
108
  },
109
+ {
110
+ "description": "The field is mid-drag (pointer down through pointerup).",
111
+ "attribute": "dragging",
112
+ "name": "dragging"
113
+ },
108
114
  {
109
115
  "description": "Non-interactive; dimmed.",
110
116
  "attribute": "disabled",
@@ -138,7 +138,7 @@ export class UIRange extends UIFormElement {
138
138
  this.#dragging = true;
139
139
  this.#startX = e.clientX;
140
140
  this.#startVal = this.value;
141
- this.setAttribute('data-dragging', '');
141
+ this.setAttribute('dragging', '');
142
142
  this.#fieldEl.setPointerCapture(e.pointerId);
143
143
  this.#fieldEl.addEventListener('pointermove', this.#onPointerMove);
144
144
  this.#fieldEl.addEventListener('pointerup', this.#onPointerUp);
@@ -156,7 +156,7 @@ export class UIRange extends UIFormElement {
156
156
 
157
157
  #onPointerUp = (e) => {
158
158
  this.#dragging = false;
159
- this.removeAttribute('data-dragging');
159
+ this.removeAttribute('dragging');
160
160
  this.#fieldEl.releasePointerCapture(e.pointerId);
161
161
  this.#fieldEl.removeEventListener('pointermove', this.#onPointerMove);
162
162
  this.#fieldEl.removeEventListener('pointerup', this.#onPointerUp);
@@ -69,7 +69,7 @@ range-ui:not([disabled]) [slot="field"]:hover [data-layer="fill"] {
69
69
  /* font-family floor — see segment.css rationale. */
70
70
  font-family: var(--range-font-family);
71
71
  font-size: var(--range-font-size);
72
- line-height: 1;
72
+ line-height: var(--a-font-leading-none);
73
73
  transition:
74
74
  border-color var(--range-duration) var(--range-easing),
75
75
  background var(--range-duration) var(--range-easing);
@@ -147,10 +147,10 @@ range-ui:not([disabled]) [slot="field"]:hover [data-layer="fill"] {
147
147
  /* Hover-fill brighten moved outside @scope — see Safari 17.x bug note at top. */
148
148
 
149
149
  /* Dragging: deepest fill, sharper border, instant (no transition lag on the clip) */
150
- :scope[data-dragging] [slot="field"] {
150
+ :scope[dragging] [slot="field"] {
151
151
  border-color: var(--range-border-dragging);
152
152
  }
153
- :scope[data-dragging] [data-layer="fill"] {
153
+ :scope[dragging] [data-layer="fill"] {
154
154
  background: var(--range-fill-bg-active);
155
155
  transition: none;
156
156
  }
@@ -61,6 +61,9 @@ slots: {}
61
61
  states:
62
62
  - name: idle
63
63
  description: Default, ready for interaction.
64
+ - name: dragging
65
+ description: The field is mid-drag (pointer down through pointerup).
66
+ attribute: dragging
64
67
  - name: disabled
65
68
  description: Non-interactive; dimmed.
66
69
  attribute: disabled
@@ -93,6 +93,7 @@
93
93
  "like"
94
94
  ],
95
95
  "name": "UIRating",
96
+ "parts": {},
96
97
  "related": [
97
98
  "Field",
98
99
  "AgentFeedbackBar"
@@ -32,7 +32,7 @@ rating-ui:hover [data-rating-symbol] {
32
32
  gap: var(--rating-gap);
33
33
  cursor: pointer;
34
34
  user-select: none;
35
- line-height: 1;
35
+ line-height: var(--a-font-leading-none);
36
36
  }
37
37
 
38
38
  :scope[readonly],
@@ -88,6 +88,7 @@
88
88
  "duration"
89
89
  ],
90
90
  "name": "UIRelativeTime",
91
+ "parts": {},
91
92
  "related": [
92
93
  "text",
93
94
  "badge",
@@ -38,7 +38,7 @@
38
38
  "unevaluatedProperties": false,
39
39
  "x-adiaui": {
40
40
  "anti_patterns": [],
41
- "category": "forms",
41
+ "category": "display",
42
42
  "composes": [],
43
43
  "events": {},
44
44
  "examples": [
@@ -67,6 +67,7 @@
67
67
  "richtext"
68
68
  ],
69
69
  "name": "UIRichText",
70
+ "parts": {},
70
71
  "related": [
71
72
  "Code",
72
73
  "Text",
@@ -164,7 +164,7 @@
164
164
  font-weight: var(--richtext-h4-weight);
165
165
  color: var(--richtext-fg-muted);
166
166
  text-transform: uppercase;
167
- letter-spacing: 0.04em;
167
+ letter-spacing: var(--a-font-tracking-wide);
168
168
  margin: var(--richtext-h4-margin-top) 0 var(--richtext-h4-margin-bottom);
169
169
  }
170
170
 
@@ -173,7 +173,7 @@
173
173
  font-weight: var(--richtext-h4-weight);
174
174
  color: var(--richtext-fg-muted);
175
175
  text-transform: uppercase;
176
- letter-spacing: 0.06em;
176
+ letter-spacing: var(--a-font-tracking-wider);
177
177
  margin: var(--richtext-h4-margin-top) 0 var(--richtext-h4-margin-bottom);
178
178
  }
179
179
 
@@ -212,7 +212,7 @@
212
212
  padding: var(--richtext-pre-inset);
213
213
  overflow-x: auto;
214
214
  font-size: var(--richtext-code-size);
215
- line-height: 1.5;
215
+ line-height: var(--a-font-leading-relaxed);
216
216
  margin: var(--richtext-pre-my) 0;
217
217
  }
218
218
 
@@ -3,7 +3,7 @@ name: UIRichText
3
3
  tag: richtext-ui
4
4
  status: stable
5
5
  component: RichText
6
- category: forms
6
+ category: display
7
7
  version: 1
8
8
  description: |
9
9
  Markdown-to-HTML rendering primitive — converts the [markdown] prop
@@ -77,6 +77,7 @@
77
77
  "row"
78
78
  ],
79
79
  "name": "UIRow",
80
+ "parts": {},
80
81
  "related": [
81
82
  "avatar",
82
83
  "input",
@@ -94,6 +94,7 @@
94
94
  "combobox"
95
95
  ],
96
96
  "name": "UISearch",
97
+ "parts": {},
97
98
  "related": [
98
99
  "Input",
99
100
  "Command",
@@ -41,8 +41,11 @@ export class UISearch extends UIFormElement {
41
41
 
42
42
  if (!this.querySelector('input-ui')) {
43
43
  const size = this.getAttribute('size');
44
+ // No `type` attribute here — input-ui's `type` enum no longer
45
+ // includes "search" (gh#1381, gh#1363 B10); it was always
46
+ // decorative on this primitive (input.class.js never branched on
47
+ // it), so dropping it is a no-op on rendered behavior.
44
48
  this.innerHTML = `<input-ui
45
- type="search"
46
49
  prefix="magnifying-glass"
47
50
  suffix="x-circle"
48
51
  placeholder="${this.placeholder}"