@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
@@ -126,6 +126,7 @@
126
126
  "volume"
127
127
  ],
128
128
  "name": "UISlider",
129
+ "parts": {},
129
130
  "related": [
130
131
  "input",
131
132
  "select",
@@ -151,6 +152,11 @@
151
152
  "description": "Default, ready for interaction.",
152
153
  "name": "idle"
153
154
  },
155
+ {
156
+ "description": "A thumb is mid-drag (pointer down through pointerup).",
157
+ "attribute": "dragging",
158
+ "name": "dragging"
159
+ },
154
160
  {
155
161
  "description": "Non-interactive; dimmed.",
156
162
  "attribute": "disabled",
@@ -317,7 +317,7 @@ export class UISlider extends UIFormElement {
317
317
  if (this.disabled) return;
318
318
  e.preventDefault();
319
319
  this.#dragging = true;
320
- this.setAttribute('data-dragging', '');
320
+ this.setAttribute('dragging', '');
321
321
 
322
322
  let thumb;
323
323
  if (this.dual) {
@@ -343,6 +343,12 @@ export class UISlider extends UIFormElement {
343
343
  thumb.setPointerCapture(e.pointerId);
344
344
  thumb.addEventListener('pointermove', this.#onPointerMove);
345
345
  thumb.addEventListener('pointerup', this.#onPointerUp);
346
+ // A drag can end without pointerup: touch interruptions (incoming call,
347
+ // OS gesture steal) fire pointercancel, and losing the capture for any
348
+ // other reason fires lostpointercapture. Without these, [dragging] and
349
+ // the move/up listeners stay stuck (gh#1332 review follow-up).
350
+ thumb.addEventListener('pointercancel', this.#onPointerCancel);
351
+ thumb.addEventListener('lostpointercapture', this.#onPointerCancel);
346
352
  };
347
353
 
348
354
  #onPointerMove = (e) => {
@@ -357,16 +363,27 @@ export class UISlider extends UIFormElement {
357
363
  }
358
364
  };
359
365
 
366
+ #onPointerCancel = (e) => {
367
+ // lostpointercapture also fires after a normal pointerup's
368
+ // releasePointerCapture — the #dragging guard makes that a no-op.
369
+ if (!this.#dragging) return;
370
+ this.#onPointerUp(e);
371
+ };
372
+
360
373
  #onPointerUp = (e) => {
361
374
  this.#dragging = false;
362
375
  this.#dragOffset = 0;
363
- this.removeAttribute('data-dragging');
376
+ this.removeAttribute('dragging');
364
377
  const thumb = this.dual
365
378
  ? (this.#draggingThumb === 'lower' ? this.#thumbLowerEl : this.#thumbUpperEl)
366
379
  : this.#thumbEl;
367
- thumb?.releasePointerCapture(e.pointerId);
380
+ // On pointercancel the capture is already gone; releasing a
381
+ // no-longer-captured pointer throws NotFoundError in some engines.
382
+ try { thumb?.releasePointerCapture(e.pointerId); } catch { /* already released */ }
368
383
  thumb?.removeEventListener('pointermove', this.#onPointerMove);
369
384
  thumb?.removeEventListener('pointerup', this.#onPointerUp);
385
+ thumb?.removeEventListener('pointercancel', this.#onPointerCancel);
386
+ thumb?.removeEventListener('lostpointercapture', this.#onPointerCancel);
370
387
  // Drop the active marker — but only after emitting change, so any
371
388
  // mid-drag z-index lift stays painted through the up event.
372
389
  thumb?.removeAttribute('data-active');
@@ -264,7 +264,7 @@
264
264
 
265
265
  /* During drag: kill the left transition so the thumb follows
266
266
  the pointer frame-by-frame without CSS interpolation lag. */
267
- :scope[data-dragging] [slot="thumb"] {
267
+ :scope[dragging] [slot="thumb"] {
268
268
  transition: transform var(--slider-duration) var(--slider-easing);
269
269
  }
270
270
 
@@ -332,6 +332,6 @@
332
332
  margin-top: var(--slider-hint-mt, var(--a-space-1));
333
333
  font-size: var(--slider-hint-size, var(--a-ui-xs));
334
334
  color: var(--slider-hint-fg, var(--a-fg-muted));
335
- line-height: var(--slider-hint-lh, 1.4);
335
+ line-height: var(--slider-hint-lh, var(--a-font-leading-normal));
336
336
  }
337
337
  }
@@ -107,6 +107,9 @@ slots:
107
107
  states:
108
108
  - name: idle
109
109
  description: Default, ready for interaction.
110
+ - name: dragging
111
+ description: A thumb is mid-drag (pointer down through pointerup).
112
+ attribute: dragging
110
113
  - name: disabled
111
114
  description: Non-interactive; dimmed.
112
115
  attribute: disabled
@@ -112,6 +112,7 @@
112
112
  "circular"
113
113
  ],
114
114
  "name": "UISpinner",
115
+ "parts": {},
115
116
  "related": [
116
117
  "Progress",
117
118
  "Skeleton",
@@ -178,7 +178,7 @@
178
178
  align-items: center;
179
179
  justify-content: center;
180
180
  font: inherit;
181
- line-height: 1;
181
+ line-height: var(--a-font-leading-none);
182
182
  text-align: center;
183
183
  color: currentColor;
184
184
  }
@@ -53,6 +53,7 @@
53
53
  "stack"
54
54
  ],
55
55
  "name": "UIStack",
56
+ "parts": {},
56
57
  "related": [
57
58
  "Col",
58
59
  "Row",
@@ -99,6 +99,7 @@
99
99
  "scoreboard"
100
100
  ],
101
101
  "name": "UIStat",
102
+ "parts": {},
102
103
  "related": [
103
104
  "Card",
104
105
  "Badge",
@@ -171,7 +171,7 @@
171
171
  grid-area: label;
172
172
  font-size: var(--stat-label-size);
173
173
  color: var(--stat-label-fg);
174
- line-height: 1.4;
174
+ line-height: var(--a-font-leading-normal);
175
175
  min-width: 0;
176
176
  overflow: hidden;
177
177
  text-overflow: ellipsis;
@@ -185,7 +185,7 @@
185
185
  align-items: center;
186
186
  gap: 0.25em;
187
187
  font-size: var(--stat-change-size);
188
- line-height: 1;
188
+ line-height: var(--a-font-leading-none);
189
189
  justify-self: start;
190
190
  }
191
191
 
@@ -195,7 +195,7 @@
195
195
  font-size: var(--stat-value-size);
196
196
  font-weight: var(--stat-value-weight);
197
197
  color: var(--stat-value-fg);
198
- line-height: 1.2;
198
+ line-height: var(--a-font-leading-snug);
199
199
  min-width: 0;
200
200
  overflow: hidden;
201
201
  text-overflow: ellipsis;
@@ -110,12 +110,12 @@ class UIStat extends UIElement {
110
110
  // Width 60% / 40% / 2em / 1em chosen to roughly mirror the rendered
111
111
  // value+change visual mass without being so wide as to look like text.
112
112
  this.#valueEl.textContent = '';
113
- this.#valueEl.innerHTML = '<skeleton-ui width="60%" height="2em" radius="sm"></skeleton-ui>';
113
+ this.#valueEl.innerHTML = '<skeleton-ui width="60%" height="2em" corner-radius="sm"></skeleton-ui>';
114
114
  // Skeleton replaces the trend icon + text children wholesale; the
115
115
  // non-loading branch below detects the detached refs (parentNode
116
116
  // check) and re-inserts them once real data arrives.
117
117
  this.#changeEl.textContent = '';
118
- this.#changeEl.innerHTML = '<skeleton-ui width="40%" height="1em" radius="sm"></skeleton-ui>';
118
+ this.#changeEl.innerHTML = '<skeleton-ui width="40%" height="1em" corner-radius="sm"></skeleton-ui>';
119
119
  this.#changeEl.hidden = false;
120
120
  // Icon stays as-is (metadata, not data).
121
121
  if (this.icon) {
@@ -68,6 +68,7 @@
68
68
  "indicator"
69
69
  ],
70
70
  "name": "UIStepProgress",
71
+ "parts": {},
71
72
  "related": [
72
73
  "progress-ui",
73
74
  "stepper-ui"
@@ -46,7 +46,7 @@
46
46
  [slot="caption"] {
47
47
  color: var(--step-progress-caption-fg);
48
48
  font-size: var(--step-progress-caption-size);
49
- line-height: 1.4;
49
+ line-height: var(--a-font-leading-normal);
50
50
  }
51
51
 
52
52
  [slot="caption"][hidden] {
@@ -51,7 +51,7 @@ a2ui:
51
51
  reason: 'Minimal stepper visualization.'
52
52
  - rule: 'Different from <stepper-ui> (labeled, expanded) — step-progress is dense and label-free.'
53
53
  reason: 'Density boundary.'
54
- - rule: 'For multi-task progress bars (multiple labeled rows) use <progress-row-ui> stack.'
54
+ - rule: 'For multi-task progress bars (multiple labeled rows) use a stack of <progress-ui> with `label` set (absorbed the row layout from the now-deprecated progress-row-ui).'
55
55
  reason: 'Different layout.'
56
56
  anti_patterns: []
57
57
 
@@ -53,6 +53,9 @@
53
53
  ],
54
54
  "unevaluatedProperties": false,
55
55
  "x-adiaui": {
56
+ "allowedParents": [
57
+ "Stepper"
58
+ ],
56
59
  "anti_patterns": [],
57
60
  "category": "navigation",
58
61
  "composes": [],
@@ -66,6 +69,7 @@
66
69
  "step-row"
67
70
  ],
68
71
  "name": "UIStepperItem",
72
+ "parts": {},
69
73
  "related": [
70
74
  "Stepper",
71
75
  "Timeline",
@@ -73,13 +77,13 @@
73
77
  ],
74
78
  "slots": {
75
79
  "description": {
76
- "description": "Custom description content; falls through to `[description]` prop if not slotted."
80
+ "description": "Custom secondary-line content; falls through to [description] prop if not slotted. Same adopt-or-stamp guard as `label` (gh#1462)."
77
81
  },
78
82
  "icon": {
79
- "description": "Override the step-status glyph with a custom slotted element. By default the step renders a numeral / check / x indicator based on [status]; slot an `<icon-ui>` or image to customize."
83
+ "description": "Override the step-status glyph with a custom slotted element (custom icon-ui, image). Mutually exclusive with the [icon] attribute a consumer-authored slot child wins and is never renamed or removed by render() (gh#1462 adopt-or-stamp guard)."
80
84
  },
81
85
  "label": {
82
- "description": "Custom label content; falls through to `[text]` prop if not slotted."
86
+ "description": "Custom label content; falls through to [text] prop if not slotted. Adopt-or-stamp guarded (gh#1462): render() only writes into the component-stamped fallback span — a consumer-authored `[slot=\"label\"]` child is adopted as source of truth and never overwritten."
83
87
  }
84
88
  },
85
89
  "states": [],
@@ -50,14 +50,22 @@ props:
50
50
  default: false
51
51
  slots:
52
52
  label:
53
- description: Custom label content; falls through to `[text]` prop if not slotted.
53
+ description: >-
54
+ Custom label content; falls through to [text] prop if not slotted.
55
+ Adopt-or-stamp guarded (gh#1462): render() only writes into the
56
+ component-stamped fallback span — a consumer-authored
57
+ `[slot="label"]` child is adopted as source of truth and never
58
+ overwritten.
54
59
  description:
55
- description: Custom description content; falls through to `[description]` prop if not slotted.
60
+ description: >-
61
+ Custom secondary-line content; falls through to [description] prop
62
+ if not slotted. Same adopt-or-stamp guard as `label` (gh#1462).
56
63
  icon:
57
64
  description: >-
58
- Override the step-status glyph with a custom slotted element. By default
59
- the step renders a numeral / check / x indicator based on [status];
60
- slot an `<icon-ui>` or image to customize.
65
+ Override the step-status glyph with a custom slotted element (custom
66
+ icon-ui, image). Mutually exclusive with the [icon] attribute a
67
+ consumer-authored slot child wins and is never renamed or removed by
68
+ render() (gh#1462 adopt-or-stamp guard).
61
69
 
62
70
  keywords:
63
71
  - stepper-item
@@ -75,6 +83,8 @@ related:
75
83
  - StepProgress
76
84
 
77
85
  a2ui:
86
+ allowedParents:
87
+ - Stepper
78
88
  rules:
79
89
  - rule: 'Child of <stepper-ui> — one numbered step with label + complete/current/upcoming state.'
80
90
  reason: 'Cluster contract.'
@@ -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/Stepper.json",
4
4
  "title": "Stepper",
5
- "description": "Wizard / process stepper — parent step index drives numbered children's complete/current/upcoming states automatically. Renders horizontally as a labeled step bar with connectors. Use for multi-step forms, onboarding, or pipelines; for read-only event history use <timeline-ui> instead. Add [interactive] to opt into click-to-navigate + roving- tabindex keyboard (arrow keys / Home / End) — the host still owns whether navigation is permitted: listen for the cancelable [step-request] event and call preventDefault() to veto a step before it lands, or set [disabled] on a stepper-item-ui to phase-gate it out of reach entirely.",
5
+ "description": "Wizard / process stepper — parent step index drives numbered children's complete/current/upcoming states automatically. Renders horizontally as a labeled step bar with connectors. Use for multi-step forms, onboarding, or pipelines; for read-only event history use <timeline-ui> instead. Add [interactive] to opt into click-to-navigate + roving-tabindex keyboard (arrow keys / Home / End) — the host still owns whether navigation is permitted: listen for the cancelable [step-request] event and call preventDefault() to veto a step before it lands, or set [disabled] on a stepper-item-ui to phase-gate it out of reach entirely.",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -37,6 +37,9 @@
37
37
  ],
38
38
  "unevaluatedProperties": false,
39
39
  "x-adiaui": {
40
+ "allowedChildren": [
41
+ "StepperItem"
42
+ ],
40
43
  "anti_patterns": [],
41
44
  "category": "navigation",
42
45
  "composes": [
@@ -89,6 +92,7 @@
89
92
  "click-to-navigate"
90
93
  ],
91
94
  "name": "UIStepper",
95
+ "parts": {},
92
96
  "related": [
93
97
  "timeline-ui",
94
98
  "progress-ui"
@@ -108,7 +108,9 @@ export class UIStepper extends UIElement {
108
108
  connected() {
109
109
  this.addEventListener('click', this.#handleClick);
110
110
  this.addEventListener('keydown', this.#handleKeydown);
111
- if (!this.#childObserver) {
111
+ // Guarded like the other Observer sites (gh#285 §1 pattern) — SSR shims
112
+ // have no MutationObserver; teardown already uses `?.disconnect()`.
113
+ if (!this.#childObserver && typeof MutationObserver !== 'undefined') {
112
114
  this.#childObserver = new MutationObserver(this.#onChildMutation);
113
115
  this.#childObserver.observe(this, {
114
116
  childList: true,
@@ -293,31 +295,44 @@ export class UIStepperItem extends UIElement {
293
295
 
294
296
  static template = () => null;
295
297
 
298
+ // Adopt-or-stamp (gh#1462): a fallback child stamped from a prop is
299
+ // marked, and render() only ever writes into marked elements — a
300
+ // consumer-authored slot="label"/"description"/"icon" child is adopted
301
+ // as source of truth and never overwritten or removed. Mirrors
302
+ // action-item-ui/menu-item-ui's stamp-marking (PR #1429).
303
+ #stampMark(el) { el.dataset.stepperItemStamped = '1'; return el; }
304
+ #wasStamped(el) { return el?.dataset?.stepperItemStamped === '1'; }
305
+
296
306
  connected() {
297
- if (!this.querySelector('[slot="label"]')) {
298
- this.innerHTML = `
299
- <span slot="label"></span>
300
- <span slot="description"></span>
301
- `;
307
+ // Each slot's adopt-or-stamp decision is independent per slot key —
308
+ // an authored label must not suppress the prop-driven description
309
+ // fallback (mirrors action-item-ui's per-part stamping, PR #1429).
310
+ for (const name of ['label', 'description']) {
311
+ if (this.querySelector(`[slot="${name}"]`)) continue;
312
+ const span = this.#stampMark(document.createElement('span'));
313
+ span.setAttribute('slot', name);
314
+ this.appendChild(span);
302
315
  }
303
316
  }
304
317
 
305
318
  render() {
306
319
  const label = this.querySelector('[slot="label"]');
307
320
  const desc = this.querySelector('[slot="description"]');
308
- if (label) label.textContent = this.text;
309
- if (desc) desc.textContent = this.description;
321
+ if (this.#wasStamped(label)) label.textContent = this.text;
322
+ if (this.#wasStamped(desc)) desc.textContent = this.description;
310
323
 
324
+ const iconEl = this.querySelector('[slot="icon"]');
311
325
  if (this.icon) {
312
- let iconEl = this.querySelector('[slot="icon"]');
313
- if (!iconEl) {
314
- iconEl = document.createElement('icon-ui');
315
- iconEl.setAttribute('slot', 'icon');
316
- this.prepend(iconEl);
326
+ if (iconEl) {
327
+ if (this.#wasStamped(iconEl)) iconEl.setAttribute('name', this.icon);
328
+ } else {
329
+ const el = this.#stampMark(document.createElement('icon-ui'));
330
+ el.setAttribute('slot', 'icon');
331
+ el.setAttribute('name', this.icon);
332
+ this.prepend(el);
317
333
  }
318
- iconEl.setAttribute('name', this.icon);
319
- } else {
320
- this.querySelector('[slot="icon"]')?.remove();
334
+ } else if (this.#wasStamped(iconEl)) {
335
+ iconEl.remove();
321
336
  }
322
337
  }
323
338
  }
@@ -236,7 +236,7 @@
236
236
  display: block;
237
237
  font-weight: var(--stepper-item-label-weight);
238
238
  font-size: var(--stepper-item-label-size);
239
- line-height: 1.4;
239
+ line-height: var(--a-font-leading-normal);
240
240
  color: var(--stepper-item-label-fg);
241
241
  min-width: 0;
242
242
  overflow-wrap: break-word;
@@ -247,7 +247,7 @@
247
247
  margin-top: var(--stepper-item-offset-xs);
248
248
  color: var(--stepper-item-desc-fg);
249
249
  font-size: var(--stepper-item-desc-size);
250
- line-height: 1.5;
250
+ line-height: var(--a-font-leading-relaxed);
251
251
  }
252
252
 
253
253
  :scope [slot]:empty {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `<stepper-ui>` — Wizard / process stepper — parent step index drives numbered children's complete/current/upcoming states automatically. Renders horizontally as a labeled step bar with connectors. Use for multi-step forms, onboarding, or pipelines; for read-only event history use <timeline-ui> instead. Add [interactive] to opt into click-to-navigate + roving- tabindex keyboard (arrow keys / Home / End) — the host still owns whether navigation is permitted: listen for the cancelable [step-request] event and call preventDefault() to veto a step before it lands, or set [disabled] on a stepper-item-ui to phase-gate it out of reach entirely.
2
+ * `<stepper-ui>` — Wizard / process stepper — parent step index drives numbered children's complete/current/upcoming states automatically. Renders horizontally as a labeled step bar with connectors. Use for multi-step forms, onboarding, or pipelines; for read-only event history use <timeline-ui> instead. Add [interactive] to opt into click-to-navigate + roving-tabindex keyboard (arrow keys / Home / End) — the host still owns whether navigation is permitted: listen for the cancelable [step-request] event and call preventDefault() to veto a step before it lands, or set [disabled] on a stepper-item-ui to phase-gate it out of reach entirely.
3
3
  *
4
4
  * @see https://ui-kit.exe.xyz/site/components/stepper
5
5
  *
@@ -12,8 +12,8 @@ description: >-
12
12
  complete/current/upcoming states automatically. Renders horizontally as
13
13
  a labeled step bar with connectors. Use for multi-step forms,
14
14
  onboarding, or pipelines; for read-only event history use <timeline-ui>
15
- instead. Add [interactive] to opt into click-to-navigate + roving-
16
- tabindex keyboard (arrow keys / Home / End) — the host still owns
15
+ instead. Add [interactive] to opt into click-to-navigate + roving-tabindex
16
+ keyboard (arrow keys / Home / End) — the host still owns
17
17
  whether navigation is permitted: listen for the cancelable
18
18
  [step-request] event and call preventDefault() to veto a step before
19
19
  it lands, or set [disabled] on a stepper-item-ui to phase-gate it
@@ -73,6 +73,8 @@ states:
73
73
  traits: []
74
74
  tokens: {}
75
75
  a2ui:
76
+ allowedChildren:
77
+ - StepperItem
76
78
  rules:
77
79
  - rule: 'Hosts <stepper-item-ui> children with a parent active-index driving complete/current/upcoming states.'
78
80
  reason: 'Process visualization cluster.'
@@ -68,6 +68,7 @@
68
68
  "stream"
69
69
  ],
70
70
  "name": "UIStream",
71
+ "parts": {},
71
72
  "related": [
72
73
  "ChatThreadUI",
73
74
  "Text",
@@ -145,6 +145,7 @@
145
145
  "token"
146
146
  ],
147
147
  "name": "UISwatch",
148
+ "parts": {},
148
149
  "related": [
149
150
  "chart-legend-ui",
150
151
  "tag-ui"
@@ -63,7 +63,7 @@
63
63
  min-width: 0;
64
64
  color: var(--swatch-label-fg);
65
65
  font-size: var(--swatch-label-size);
66
- line-height: 1.2;
66
+ line-height: var(--a-font-leading-snug);
67
67
  vertical-align: baseline;
68
68
  }
69
69
 
@@ -238,7 +238,7 @@
238
238
  background: var(--swatch-badge-bg);
239
239
  color: var(--swatch-badge-fg);
240
240
  font-size: var(--swatch-badge-size);
241
- line-height: 1;
241
+ line-height: var(--a-font-leading-none);
242
242
  border-radius: var(--swatch-badge-radius);
243
243
  box-shadow: 0 0 0 1px color-mix(in oklab, var(--md-sys-color-neutral-outline-variant) 60%, transparent);
244
244
  }
@@ -141,6 +141,7 @@
141
141
  "swiper"
142
142
  ],
143
143
  "name": "UISwiper",
144
+ "parts": {},
144
145
  "related": [
145
146
  "image-gallery",
146
147
  "hero-section",
@@ -196,7 +196,11 @@ export class UISwiper extends UIElement {
196
196
 
197
197
  play() {
198
198
  this.pause();
199
- if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;
199
+ // Feature-detect (gh#1430): SSR shims have no `matchMedia`, so treat "can't
200
+ // read the motion preference" like "reduce" — no viewport to animate, and
201
+ // a server-side setInterval would only leak.
202
+ if (typeof matchMedia !== 'function' ||
203
+ matchMedia('(prefers-reduced-motion: reduce)').matches) return;
200
204
 
201
205
  this.#timer = setInterval(() => {
202
206
  const lastPage = this.#getPageCount() - 1;
@@ -75,7 +75,7 @@
75
75
  "wrong": "<field-ui inline label=\"Email notifications\">\n <switch-ui></switch-ui>\n</field-ui>\n"
76
76
  }
77
77
  ],
78
- "category": "layout",
78
+ "category": "input",
79
79
  "composes": [],
80
80
  "events": {
81
81
  "change": {
@@ -93,25 +93,26 @@
93
93
  "switch"
94
94
  ],
95
95
  "name": "UISwitch",
96
- "related": [
97
- "Check",
98
- "Radio",
99
- "Field"
100
- ],
101
- "slots": {
96
+ "parts": {
102
97
  "hint": {
103
- "description": "Help text below the label"
98
+ "description": "Help text below the label — set via the `hint` attribute (template renders the span and wires aria-describedby); template-owned, not a light-DOM insertion point"
104
99
  },
105
100
  "label": {
106
- "description": "Label text beside the toggle"
101
+ "description": "Label text beside the toggle — set via the `label` attribute (template renders the span); template-owned, not a light-DOM insertion point (gh#1435, gh#1447)"
107
102
  },
108
103
  "thumb": {
109
- "description": "Sliding thumb indicator inside track"
104
+ "description": "Sliding thumb indicator inside track — template-owned anatomy part"
110
105
  },
111
106
  "track": {
112
- "description": "Toggle track container (holds thumb)"
107
+ "description": "Toggle track container (holds thumb) — template-owned anatomy part"
113
108
  }
114
109
  },
110
+ "related": [
111
+ "Check",
112
+ "Radio",
113
+ "Field"
114
+ ],
115
+ "slots": {},
115
116
  "states": [
116
117
  {
117
118
  "description": "Default, ready for interaction.",
@@ -113,7 +113,7 @@ switch-ui[checked] [slot="thumb"] {
113
113
  margin-top: var(--switch-hint-mt, var(--a-space-1));
114
114
  font-size: var(--switch-hint-size, var(--a-ui-xs));
115
115
  color: var(--switch-hint-fg, var(--a-fg-muted));
116
- line-height: var(--switch-hint-lh, 1.4);
116
+ line-height: var(--switch-hint-lh, var(--a-font-leading-normal));
117
117
  }
118
118
  /* The hint is documented (yaml + props table) as rendering BELOW the label,
119
119
  but the base `inline-flex` row laid the stamped `[slot="hint"]` out as a
@@ -3,7 +3,7 @@ name: UISwitch
3
3
  tag: switch-ui
4
4
  status: stable
5
5
  component: Switch
6
- category: layout
6
+ category: input
7
7
  version: 1
8
8
  description: |
9
9
  Toggle switch primitive — binary on/off control where the host IS
@@ -57,15 +57,15 @@ props:
57
57
  events:
58
58
  change:
59
59
  description: Fired when checked state changes
60
- slots:
60
+ parts:
61
61
  hint:
62
- description: Help text below the label
62
+ description: Help text below the label — set via the `hint` attribute (template renders the span and wires aria-describedby); template-owned, not a light-DOM insertion point
63
63
  label:
64
- description: Label text beside the toggle
64
+ description: Label text beside the toggle — set via the `label` attribute (template renders the span); template-owned, not a light-DOM insertion point (gh#1435, gh#1447)
65
65
  thumb:
66
- description: Sliding thumb indicator inside track
66
+ description: Sliding thumb indicator inside track — template-owned anatomy part
67
67
  track:
68
- description: Toggle track container (holds thumb)
68
+ description: Toggle track container (holds thumb) — template-owned anatomy part
69
69
  states:
70
70
  - name: idle
71
71
  description: Default, ready for interaction.
@@ -24,16 +24,6 @@
24
24
  "description": "JS property (set programmatically — `el.data = [...]`) — row records, an array of plain objects keyed to columns[].key. May also be supplied declaratively as a JSON-array `data=\"[…]\"` attribute, hydrated once at connect (gh#288) — the same pattern chart-ui's `data` attribute uses. Custom accessor on the element class, not a reflected attribute.",
25
25
  "$ref": "common_types.json#/$defs/DynamicObjectList"
26
26
  },
27
- "density": {
28
- "description": "Controls cell padding and row height. 'compact' for dense data, 'standard' for default spacing, 'comfortable' for spacious rows.",
29
- "type": "string",
30
- "enum": [
31
- "compact",
32
- "standard",
33
- "comfortable"
34
- ],
35
- "default": "standard"
36
- },
37
27
  "expandable": {
38
28
  "description": "Enable row expansion",
39
29
  "type": "boolean",
@@ -287,6 +277,7 @@
287
277
  "manage"
288
278
  ],
289
279
  "name": "UITable",
280
+ "parts": {},
290
281
  "related": [
291
282
  "button",
292
283
  "input",