@adia-ai/web-components 0.8.40 → 0.8.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/CHANGELOG.md +50 -3
  2. package/MIGRATION.md +1042 -16
  3. package/README.md +25 -30
  4. package/USAGE.md +26 -0
  5. package/bin/audit-template-children.mjs +556 -0
  6. package/components/accordion/accordion-item.a2ui.json +4 -0
  7. package/components/accordion/accordion-item.yaml +2 -0
  8. package/components/accordion/accordion.a2ui.json +4 -0
  9. package/components/accordion/accordion.yaml +2 -0
  10. package/components/action-list/action-item.a2ui.json +24 -2
  11. package/components/action-list/action-item.yaml +28 -3
  12. package/components/action-list/action-list.a2ui.json +6 -1
  13. package/components/action-list/action-list.class.js +52 -11
  14. package/components/action-list/action-list.css +43 -3
  15. package/components/action-list/action-list.d.ts +4 -2
  16. package/components/action-list/action-list.yaml +5 -0
  17. package/components/adia-mark/adia-mark.a2ui.json +1 -0
  18. package/components/adia-wordmark/adia-wordmark.a2ui.json +1 -0
  19. package/components/agent-artifact/agent-artifact.a2ui.json +1 -0
  20. package/components/agent-feedback-bar/agent-feedback-bar.a2ui.json +6 -5
  21. package/components/agent-feedback-bar/agent-feedback-bar.yaml +6 -2
  22. package/components/agent-questions/agent-questions.a2ui.json +1 -0
  23. package/components/agent-reasoning/agent-reasoning.a2ui.json +6 -5
  24. package/components/agent-reasoning/agent-reasoning.yaml +6 -2
  25. package/components/agent-suggestions/agent-suggestions.a2ui.json +11 -2
  26. package/components/agent-suggestions/agent-suggestions.class.js +2 -1
  27. package/components/agent-suggestions/agent-suggestions.d.ts +4 -4
  28. package/components/agent-suggestions/agent-suggestions.yaml +4 -2
  29. package/components/agent-trace/agent-trace.a2ui.json +6 -5
  30. package/components/agent-trace/agent-trace.yaml +6 -2
  31. package/components/alert/alert.a2ui.json +1 -0
  32. package/components/alert/alert.css +1 -1
  33. package/components/anchor-bar/anchor-bar.a2ui.json +1 -0
  34. package/components/aside/aside.a2ui.json +1 -0
  35. package/components/avatar/avatar-group.a2ui.json +7 -1
  36. package/components/avatar/avatar-group.yaml +1 -0
  37. package/components/avatar/avatar.a2ui.json +12 -11
  38. package/components/avatar/avatar.d.ts +1 -1
  39. package/components/avatar/avatar.yaml +4 -4
  40. package/components/badge/badge.a2ui.json +1 -0
  41. package/components/block/block.a2ui.json +1 -0
  42. package/components/blockquote/blockquote.a2ui.json +1 -0
  43. package/components/breadcrumb/breadcrumb.a2ui.json +1 -0
  44. package/components/button/button.a2ui.json +1 -3
  45. package/components/button/button.yaml +1 -3
  46. package/components/calendar-grid/calendar-grid.a2ui.json +1 -0
  47. package/components/calendar-grid/calendar-grid.class.js +2 -1
  48. package/components/calendar-picker/calendar-picker.a2ui.json +143 -24
  49. package/components/calendar-picker/calendar-picker.class.js +490 -197
  50. package/components/calendar-picker/calendar-picker.css +120 -171
  51. package/components/calendar-picker/calendar-picker.yaml +225 -47
  52. package/components/canvas/canvas.a2ui.json +6 -5
  53. package/components/canvas/canvas.d.ts +37 -0
  54. package/components/canvas/canvas.js +72 -3
  55. package/components/canvas/canvas.yaml +6 -2
  56. package/components/card/card.a2ui.json +25 -2
  57. package/components/card/card.class.js +3 -0
  58. package/components/card/card.css +31 -1
  59. package/components/card/card.d.ts +2 -2
  60. package/components/card/card.examples.md +3 -3
  61. package/components/card/card.yaml +28 -4
  62. package/components/chart/chart.a2ui.json +9 -4
  63. package/components/chart/chart.class.js +6 -6
  64. package/components/chart/chart.css +6 -4
  65. package/components/chart/chart.d.ts +1 -1
  66. package/components/chart/chart.yaml +5 -3
  67. package/components/chart-legend/chart-legend.a2ui.json +1 -0
  68. package/components/chat-thread/chat-input.a2ui.json +1 -0
  69. package/components/chat-thread/chat-thread.a2ui.json +10 -9
  70. package/components/chat-thread/chat-thread.yaml +13 -20
  71. package/components/check/check.a2ui.json +10 -9
  72. package/components/check/check.yaml +4 -4
  73. package/components/code/code.a2ui.json +1 -0
  74. package/components/col/col.a2ui.json +1 -0
  75. package/components/color-input/color-input.a2ui.json +1 -0
  76. package/components/color-picker/color-picker.a2ui.json +1 -0
  77. package/components/combobox/combobox.a2ui.json +3 -2
  78. package/components/combobox/combobox.yaml +2 -2
  79. package/components/command/command.a2ui.json +12 -10
  80. package/components/command/command.class.js +3 -2
  81. package/components/command/command.yaml +17 -4
  82. package/components/context-menu/context-menu.a2ui.json +1 -0
  83. package/components/date-range-picker/date-range-picker.a2ui.json +2 -1
  84. package/components/date-range-picker/date-range-picker.yaml +1 -1
  85. package/components/datetime-picker/datetime-picker.a2ui.json +15 -108
  86. package/components/datetime-picker/datetime-picker.class.js +37 -690
  87. package/components/datetime-picker/datetime-picker.css +11 -183
  88. package/components/datetime-picker/datetime-picker.d.ts +4 -5
  89. package/components/datetime-picker/datetime-picker.yaml +44 -135
  90. package/components/demo-toggle/demo-toggle.a2ui.json +1 -0
  91. package/components/demo-toggle/demo-toggle.css +1 -1
  92. package/components/description-list/description-list.a2ui.json +1 -0
  93. package/components/display-field/display-field.a2ui.json +1 -0
  94. package/components/divider/divider.a2ui.json +1 -0
  95. package/components/drawer/drawer.a2ui.json +1 -3
  96. package/components/drawer/drawer.css +1 -1
  97. package/components/drawer/drawer.yaml +0 -2
  98. package/components/drilldown/drilldown.a2ui.json +22 -20
  99. package/components/drilldown/drilldown.class.js +4 -3
  100. package/components/drilldown/drilldown.css +6 -6
  101. package/components/drilldown/drilldown.yaml +40 -9
  102. package/components/embed/embed.a2ui.json +6 -5
  103. package/components/embed/embed.yaml +2 -2
  104. package/components/empty-state/empty-state.a2ui.json +1 -0
  105. package/components/feed/feed-item.a2ui.json +25 -5
  106. package/components/feed/feed-item.yaml +28 -7
  107. package/components/feed/feed.a2ui.json +9 -2
  108. package/components/feed/feed.class.js +19 -12
  109. package/components/feed/feed.css +8 -8
  110. package/components/feed/feed.yaml +14 -1
  111. package/components/field/field.a2ui.json +1 -0
  112. package/components/field/field.examples.md +1 -1
  113. package/components/fields/fields.a2ui.json +1 -0
  114. package/components/fields/fields.examples.md +1 -1
  115. package/components/footer/footer.a2ui.json +1 -0
  116. package/components/frame/frame.a2ui.json +1 -0
  117. package/components/grid/grid.a2ui.json +1 -0
  118. package/components/header/header.a2ui.json +3 -2
  119. package/components/header/header.yaml +3 -3
  120. package/components/heatmap/heatmap.a2ui.json +2 -1
  121. package/components/heatmap/heatmap.class.js +1 -1
  122. package/components/heatmap/heatmap.css +4 -4
  123. package/components/heatmap/heatmap.yaml +1 -1
  124. package/components/icon/icon.a2ui.json +1 -0
  125. package/components/image/image.a2ui.json +28 -14
  126. package/components/image/image.class.js +38 -23
  127. package/components/image/image.css +18 -8
  128. package/components/image/image.d.ts +2 -2
  129. package/components/image/image.examples.md +3 -3
  130. package/components/image/image.yaml +23 -7
  131. package/components/inline-edit/inline-edit.a2ui.json +1 -0
  132. package/components/inline-message/inline-message.a2ui.json +3 -1
  133. package/components/inline-message/inline-message.class.js +3 -1
  134. package/components/inline-message/inline-message.d.ts +2 -2
  135. package/components/inline-message/inline-message.yaml +2 -1
  136. package/components/input/input.a2ui.json +66 -16
  137. package/components/input/input.class.js +64 -7
  138. package/components/input/input.css +14 -14
  139. package/components/input/input.d.ts +9 -4
  140. package/components/input/input.yaml +83 -10
  141. package/components/inspector/inspector.a2ui.json +1 -0
  142. package/components/integration-card/integration-card.a2ui.json +1 -0
  143. package/components/kbd/kbd.a2ui.json +1 -0
  144. package/components/link/link.a2ui.json +2 -1
  145. package/components/link/link.yaml +1 -1
  146. package/components/list/list-item.a2ui.json +9 -0
  147. package/components/list/list-item.yaml +12 -0
  148. package/components/list/list.a2ui.json +9 -3
  149. package/components/list/list.class.js +14 -1
  150. package/components/list/list.css +12 -1
  151. package/components/list/list.d.ts +7 -5
  152. package/components/list/list.yaml +16 -6
  153. package/components/list-window/list-window.a2ui.json +1 -0
  154. package/components/list-window/list-window.class.js +2 -1
  155. package/components/loading-overlay/loading-overlay.a2ui.json +1 -0
  156. package/components/mark/mark.a2ui.json +2 -1
  157. package/components/mark/mark.yaml +1 -1
  158. package/components/menu/menu-divider.a2ui.json +1 -0
  159. package/components/menu/menu-item.a2ui.json +3 -1
  160. package/components/menu/menu-item.yaml +6 -0
  161. package/components/menu/menu-label.a2ui.json +1 -0
  162. package/components/menu/menu.a2ui.json +3 -2
  163. package/components/menu/menu.class.js +2 -2
  164. package/components/menu/menu.d.ts +2 -2
  165. package/components/menu/menu.yaml +3 -3
  166. package/components/modal/modal.a2ui.json +1 -0
  167. package/components/nav/nav.a2ui.json +1 -0
  168. package/components/nav/nav.class.js +14 -3
  169. package/components/nav-group/nav-group.a2ui.json +1 -0
  170. package/components/nav-group/nav-group.class.js +3 -1
  171. package/components/nav-item/nav-item.a2ui.json +1 -0
  172. package/components/noodles/noodles.a2ui.json +1 -0
  173. package/components/noodles/noodles.class.js +5 -1
  174. package/components/number-format/number-format.a2ui.json +1 -0
  175. package/components/option-card/option-card.a2ui.json +1 -0
  176. package/components/otp-input/otp-input.a2ui.json +3 -2
  177. package/components/otp-input/otp-input.yaml +9 -2
  178. package/components/page/page.a2ui.json +13 -0
  179. package/components/page/page.d.ts +1 -1
  180. package/components/page/page.yaml +1 -0
  181. package/components/pagination/pagination.a2ui.json +1 -0
  182. package/components/pagination/pagination.class.js +3 -2
  183. package/components/pane/pane.a2ui.json +6 -0
  184. package/components/pane/pane.class.js +3 -3
  185. package/components/pane/pane.css +2 -2
  186. package/components/pane/pane.yaml +3 -0
  187. package/components/password-strength/password-strength.a2ui.json +1 -0
  188. package/components/pipeline-status/pipeline-status.a2ui.json +1 -0
  189. package/components/popover/popover.a2ui.json +7 -6
  190. package/components/popover/popover.class.js +2 -2
  191. package/components/popover/popover.d.ts +2 -2
  192. package/components/popover/popover.yaml +4 -4
  193. package/components/preview/preview.a2ui.json +1 -0
  194. package/components/preview/preview.class.js +5 -1
  195. package/components/progress/progress.a2ui.json +47 -24
  196. package/components/progress/progress.class.js +66 -11
  197. package/components/progress/progress.css +44 -26
  198. package/components/progress/progress.d.ts +7 -5
  199. package/components/progress/progress.examples.md +2 -2
  200. package/components/progress/progress.yaml +235 -53
  201. package/components/progress-row/progress-row.a2ui.json +16 -12
  202. package/components/progress-row/progress-row.d.ts +2 -2
  203. package/components/progress-row/progress-row.examples.md +2 -14
  204. package/components/progress-row/progress-row.yaml +28 -36
  205. package/components/qr-code/qr-code.a2ui.json +3 -2
  206. package/components/qr-code/qr-code.class.js +4 -4
  207. package/components/qr-code/qr-code.css +1 -1
  208. package/components/qr-code/qr-code.yaml +5 -3
  209. package/components/radio/radio.a2ui.json +8 -7
  210. package/components/radio/radio.class.js +8 -0
  211. package/components/radio/radio.yaml +3 -3
  212. package/components/radio-group/radio-group.a2ui.json +5 -3
  213. package/components/radio-group/radio-group.class.js +11 -0
  214. package/components/radio-group/radio-group.yaml +7 -1
  215. package/components/range/range.a2ui.json +6 -0
  216. package/components/range/range.class.js +2 -2
  217. package/components/range/range.css +2 -2
  218. package/components/range/range.yaml +3 -0
  219. package/components/rating/rating.a2ui.json +1 -0
  220. package/components/relative-time/relative-time.a2ui.json +1 -0
  221. package/components/richtext/richtext.a2ui.json +2 -1
  222. package/components/richtext/richtext.yaml +1 -1
  223. package/components/row/row.a2ui.json +1 -0
  224. package/components/search/search.a2ui.json +1 -0
  225. package/components/search/search.class.js +4 -1
  226. package/components/section/section.a2ui.json +1 -0
  227. package/components/segment/segment.a2ui.json +21 -10
  228. package/components/segment/segment.css +15 -0
  229. package/components/segment/segment.d.ts +2 -1
  230. package/components/segment/segment.yaml +20 -13
  231. package/components/segmented/segmented.a2ui.json +36 -7
  232. package/components/segmented/segmented.class.js +113 -22
  233. package/components/segmented/segmented.css +3 -0
  234. package/components/segmented/segmented.d.ts +3 -1
  235. package/components/segmented/segmented.yaml +80 -8
  236. package/components/select/select.a2ui.json +18 -13
  237. package/components/select/select.class.js +61 -37
  238. package/components/select/select.css +15 -13
  239. package/components/select/select.yaml +18 -7
  240. package/components/skeleton/skeleton.a2ui.json +8 -7
  241. package/components/skeleton/skeleton.class.js +8 -7
  242. package/components/skeleton/skeleton.css +21 -6
  243. package/components/skeleton/skeleton.d.ts +2 -2
  244. package/components/skeleton/skeleton.examples.md +2 -2
  245. package/components/skeleton/skeleton.yaml +3 -2
  246. package/components/skip-nav/skip-nav.a2ui.json +1 -0
  247. package/components/slider/slider.a2ui.json +6 -0
  248. package/components/slider/slider.class.js +20 -3
  249. package/components/slider/slider.css +2 -2
  250. package/components/slider/slider.yaml +3 -0
  251. package/components/spinner/spinner.a2ui.json +1 -0
  252. package/components/stack/stack.a2ui.json +1 -0
  253. package/components/stat/stat.a2ui.json +1 -0
  254. package/components/stat/stat.js +2 -2
  255. package/components/step-progress/step-progress.a2ui.json +1 -0
  256. package/components/step-progress/step-progress.yaml +1 -1
  257. package/components/stepper/stepper-item.a2ui.json +7 -3
  258. package/components/stepper/stepper-item.yaml +15 -5
  259. package/components/stepper/stepper.a2ui.json +5 -1
  260. package/components/stepper/stepper.class.js +31 -16
  261. package/components/stepper/stepper.d.ts +1 -1
  262. package/components/stepper/stepper.yaml +4 -2
  263. package/components/stream/stream.a2ui.json +1 -0
  264. package/components/swatch/swatch.a2ui.json +1 -0
  265. package/components/swiper/swiper.a2ui.json +1 -0
  266. package/components/swiper/swiper.class.js +5 -1
  267. package/components/switch/switch.a2ui.json +12 -11
  268. package/components/switch/switch.css +1 -1
  269. package/components/switch/switch.yaml +6 -6
  270. package/components/table/table.a2ui.json +1 -0
  271. package/components/table/table.class.js +14 -12
  272. package/components/table/table.css +11 -9
  273. package/components/table-toolbar/table-toolbar.a2ui.json +1 -0
  274. package/components/table-toolbar/table-toolbar.class.js +38 -19
  275. package/components/table-toolbar/table-toolbar.css +1 -1
  276. package/components/tabs/tab.a2ui.json +9 -0
  277. package/components/tabs/tab.js +4 -0
  278. package/components/tabs/tab.yaml +15 -0
  279. package/components/tabs/tabs.a2ui.json +9 -4
  280. package/components/tabs/tabs.class.js +13 -1
  281. package/components/tabs/tabs.css +8 -0
  282. package/components/tabs/tabs.d.ts +2 -0
  283. package/components/tabs/tabs.yaml +9 -2
  284. package/components/tag/tag.a2ui.json +1 -0
  285. package/components/tags-input/tags-input.a2ui.json +22 -17
  286. package/components/tags-input/tags-input.class.js +13 -11
  287. package/components/tags-input/tags-input.css +10 -6
  288. package/components/tags-input/tags-input.d.ts +16 -7
  289. package/components/tags-input/tags-input.examples.md +2 -2
  290. package/components/tags-input/tags-input.yaml +25 -8
  291. package/components/text/text.a2ui.json +6 -5
  292. package/components/text/text.css +10 -5
  293. package/components/text/text.d.ts +2 -2
  294. package/components/text/text.yaml +9 -4
  295. package/components/textarea/textarea.a2ui.json +2 -1
  296. package/components/textarea/textarea.yaml +1 -1
  297. package/components/theme-provider/theme-provider.a2ui.json +2 -1
  298. package/components/theme-provider/theme-provider.d.ts +5 -3
  299. package/components/theme-provider/theme-provider.yaml +5 -3
  300. package/components/time-picker/time-picker.a2ui.json +1 -0
  301. package/components/time-picker/time-picker.class.js +4 -2
  302. package/components/timeline/timeline-item.a2ui.json +26 -3
  303. package/components/timeline/timeline-item.yaml +22 -7
  304. package/components/timeline/timeline.a2ui.json +4 -0
  305. package/components/timeline/timeline.class.js +29 -18
  306. package/components/timeline/timeline.d.ts +3 -3
  307. package/components/timeline/timeline.yaml +2 -0
  308. package/components/toast/toast.a2ui.json +10 -3
  309. package/components/toast/toast.yaml +20 -13
  310. package/components/toc/toc.a2ui.json +1 -0
  311. package/components/toggle-group/toggle-group.a2ui.json +7 -3
  312. package/components/toggle-group/toggle-group.class.js +40 -1
  313. package/components/toggle-group/toggle-group.css +6 -1
  314. package/components/toggle-group/toggle-group.d.ts +2 -2
  315. package/components/toggle-group/toggle-group.yaml +21 -12
  316. package/components/toggle-group/toggle-option.a2ui.json +7 -3
  317. package/components/toggle-group/toggle-option.yaml +13 -7
  318. package/components/toggle-scheme/toggle-scheme.a2ui.json +2 -1
  319. package/components/toggle-scheme/toggle-scheme.yaml +1 -1
  320. package/components/toolbar/toolbar-group.a2ui.json +1 -0
  321. package/components/toolbar/toolbar.a2ui.json +1 -0
  322. package/components/toolbar/toolbar.class.js +3 -0
  323. package/components/tooltip/tooltip.a2ui.json +1 -0
  324. package/components/tour/tour-step.a2ui.json +4 -0
  325. package/components/tour/tour-step.yaml +2 -0
  326. package/components/tour/tour.a2ui.json +4 -0
  327. package/components/tour/tour.yaml +2 -0
  328. package/components/tree/tree-item.a2ui.json +5 -0
  329. package/components/tree/tree-item.yaml +3 -0
  330. package/components/tree/tree.a2ui.json +4 -0
  331. package/components/tree/tree.class.js +2 -1
  332. package/components/tree/tree.yaml +2 -0
  333. package/components/upload/upload.a2ui.json +8 -1
  334. package/components/upload/upload.class.js +35 -5
  335. package/components/upload/upload.css +28 -0
  336. package/components/upload/upload.d.ts +16 -0
  337. package/components/upload/upload.yaml +27 -7
  338. package/components/visually-hidden/visually-hidden.a2ui.json +1 -0
  339. package/core/dom.d.ts +11 -0
  340. package/core/dom.js +34 -0
  341. package/core/form.js +7 -0
  342. package/core/index.d.ts +1 -0
  343. package/core/index.js +1 -0
  344. package/core/responsive.js +16 -4
  345. package/core/template.js +2 -1
  346. package/custom-elements.json +437 -489
  347. package/dist/host.min.css +1 -1
  348. package/dist/host.sheet.js +1 -1
  349. package/dist/theme-provider.min.js +5 -5
  350. package/dist/web-components.min.css +1 -1
  351. package/dist/web-components.min.js +91 -104
  352. package/dist/web-components.sheet.js +1 -1
  353. package/package.json +4 -2
  354. package/patterns/conversion-funnel/conversion-funnel.examples.html +15 -15
  355. package/patterns/inline-dialog/inline-dialog.examples.html +2 -2
  356. package/patterns/inline-dialog/inline-dialog.html +4 -0
  357. package/patterns/timezone-selector/timezone-selector.examples.html +1 -1
  358. package/patterns/timezone-selector/timezone-selector.html +2 -2
  359. package/styles/api/text.css +7 -0
  360. package/traits/_catalog.json +129 -41
  361. package/traits/anchor-positioning/anchor-positioning.js +1 -0
  362. package/traits/announcer/announcer.js +1 -0
  363. package/traits/arrow-grid-nav/arrow-grid-nav.js +1 -0
  364. package/traits/attention-pulse/attention-pulse.js +1 -0
  365. package/traits/count-up/count-up.js +1 -0
  366. package/traits/define.js +78 -0
  367. package/traits/focus-restore/focus-restore.js +2 -1
  368. package/traits/haptic-feedback/haptic-feedback.js +1 -0
  369. package/traits/input-mask/input-mask.js +1 -0
  370. package/traits/intersection-observer/intersection-observer.js +1 -0
  371. package/traits/layout-animation/layout-animation.js +1 -0
  372. package/traits/noise-texture/noise-texture.js +1 -0
  373. package/traits/resize-observer/resize-observer.js +1 -0
  374. package/traits/scroll-progress/scroll-progress.js +1 -0
  375. package/traits/snap-to-grid/snap-to-grid.js +1 -0
  376. package/traits/sound-feedback/sound-feedback.js +1 -0
  377. package/traits/spring-animate/spring-animate.js +1 -0
  378. package/traits/validation/validation.js +1 -0
@@ -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);
@@ -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"
@@ -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",
@@ -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}"
@@ -52,6 +52,7 @@
52
52
  "section"
53
53
  ],
54
54
  "name": "UISection",
55
+ "parts": {},
55
56
  "related": [
56
57
  "avatar",
57
58
  "input",
@@ -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/Segment.json",
4
4
  "title": "Segment",
5
- "description": "Individual segment child of <segmented-ui> — carries the [value],\n[text], optional [icon], and [selected] state for one option in\na horizontal segmented selector. Distinct from <tab-ui> (a view\nswitcher's child) and <option> (native option for <select-ui>).\nUse segment-ui only as a direct child of <segmented-ui>; never\nstandalone.\n",
5
+ "description": "Individual segment child of <segmented-ui> — carries the [value],\n[text], optional [icon], and [selected] state for one option in\na horizontal segmented selector, single- or multi-select\n(<segmented-ui multiple>, gh#1369). Distinct from <tab-ui> (a view\nswitcher's child) and <option> (native option for <select-ui>).\nUse segment-ui only as a direct child of <segmented-ui>; never\nstandalone.\n",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -47,6 +47,9 @@
47
47
  ],
48
48
  "unevaluatedProperties": false,
49
49
  "x-adiaui": {
50
+ "allowedParents": [
51
+ "Segmented"
52
+ ],
50
53
  "anti_patterns": [],
51
54
  "category": "navigation",
52
55
  "composes": [
@@ -56,36 +59,39 @@
56
59
  "examples": [
57
60
  {
58
61
  "description": "Segmented control with 3 segment options for tab-like switching.",
59
- "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"SegmentedControl\",\n \"children\": [\n \"s1\",\n \"s2\",\n \"s3\"\n ]\n },\n {\n \"id\": \"s1\",\n \"component\": \"Segment\",\n \"text\": \"Overview\",\n \"active\": true\n },\n {\n \"id\": \"s2\",\n \"component\": \"Segment\",\n \"text\": \"Features\"\n },\n {\n \"id\": \"s3\",\n \"component\": \"Segment\",\n \"text\": \"Pricing\"\n }\n]",
62
+ "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Segmented\",\n \"children\": [\n \"s1\",\n \"s2\",\n \"s3\"\n ]\n },\n {\n \"id\": \"s1\",\n \"component\": \"Segment\",\n \"text\": \"Overview\",\n \"selected\": true\n },\n {\n \"id\": \"s2\",\n \"component\": \"Segment\",\n \"text\": \"Features\"\n },\n {\n \"id\": \"s3\",\n \"component\": \"Segment\",\n \"text\": \"Pricing\"\n }\n]",
60
63
  "name": "segmented-control"
61
64
  },
62
65
  {
63
66
  "description": "Three segments inside a segmented control for view switching.",
64
- "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"SegmentedControl\",\n \"children\": [\n \"s1\",\n \"s2\",\n \"s3\"\n ]\n },\n {\n \"id\": \"s1\",\n \"component\": \"Segment\",\n \"value\": \"overview\",\n \"text\": \"Overview\"\n },\n {\n \"id\": \"s2\",\n \"component\": \"Segment\",\n \"value\": \"features\",\n \"text\": \"Features\"\n },\n {\n \"id\": \"s3\",\n \"component\": \"Segment\",\n \"value\": \"pricing\",\n \"text\": \"Pricing\"\n }\n]",
67
+ "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Segmented\",\n \"children\": [\n \"s1\",\n \"s2\",\n \"s3\"\n ]\n },\n {\n \"id\": \"s1\",\n \"component\": \"Segment\",\n \"value\": \"overview\",\n \"text\": \"Overview\"\n },\n {\n \"id\": \"s2\",\n \"component\": \"Segment\",\n \"value\": \"features\",\n \"text\": \"Features\"\n },\n {\n \"id\": \"s3\",\n \"component\": \"Segment\",\n \"value\": \"pricing\",\n \"text\": \"Pricing\"\n }\n]",
65
68
  "name": "basic"
66
69
  },
67
70
  {
68
71
  "description": "Segmented control showing four time-range segments labeled via text attribute.",
69
- "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"SegmentedControl\",\n \"children\": [\n \"s1\",\n \"s2\",\n \"s3\",\n \"s4\"\n ]\n },\n {\n \"id\": \"s1\",\n \"component\": \"Segment\",\n \"value\": \"d\",\n \"text\": \"Daily\"\n },\n {\n \"id\": \"s2\",\n \"component\": \"Segment\",\n \"value\": \"w\",\n \"text\": \"Weekly\"\n },\n {\n \"id\": \"s3\",\n \"component\": \"Segment\",\n \"value\": \"m\",\n \"text\": \"Monthly\"\n },\n {\n \"id\": \"s4\",\n \"component\": \"Segment\",\n \"value\": \"y\",\n \"text\": \"Yearly\"\n }\n]",
72
+ "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Segmented\",\n \"children\": [\n \"s1\",\n \"s2\",\n \"s3\",\n \"s4\"\n ]\n },\n {\n \"id\": \"s1\",\n \"component\": \"Segment\",\n \"value\": \"d\",\n \"text\": \"Daily\"\n },\n {\n \"id\": \"s2\",\n \"component\": \"Segment\",\n \"value\": \"w\",\n \"text\": \"Weekly\"\n },\n {\n \"id\": \"s3\",\n \"component\": \"Segment\",\n \"value\": \"m\",\n \"text\": \"Monthly\"\n },\n {\n \"id\": \"s4\",\n \"component\": \"Segment\",\n \"value\": \"y\",\n \"text\": \"Yearly\"\n }\n]",
70
73
  "name": "text"
71
74
  },
72
75
  {
73
76
  "description": "Segmented control with one disabled segment that cannot be selected.",
74
- "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"SegmentedControl\",\n \"children\": [\n \"s1\",\n \"s2\",\n \"s3\"\n ]\n },\n {\n \"id\": \"s1\",\n \"component\": \"Segment\",\n \"value\": \"free\",\n \"text\": \"Free\"\n },\n {\n \"id\": \"s2\",\n \"component\": \"Segment\",\n \"value\": \"pro\",\n \"text\": \"Pro\"\n },\n {\n \"id\": \"s3\",\n \"component\": \"Segment\",\n \"value\": \"enterprise\",\n \"text\": \"Enterprise\",\n \"disabled\": true\n }\n]",
77
+ "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Segmented\",\n \"children\": [\n \"s1\",\n \"s2\",\n \"s3\"\n ]\n },\n {\n \"id\": \"s1\",\n \"component\": \"Segment\",\n \"value\": \"free\",\n \"text\": \"Free\"\n },\n {\n \"id\": \"s2\",\n \"component\": \"Segment\",\n \"value\": \"pro\",\n \"text\": \"Pro\"\n },\n {\n \"id\": \"s3\",\n \"component\": \"Segment\",\n \"value\": \"enterprise\",\n \"text\": \"Enterprise\",\n \"disabled\": true\n }\n]",
75
78
  "name": "disabled"
76
79
  },
77
80
  {
78
81
  "description": "Segmented control with icon+text segments for view-mode toggles (list, grid, board).",
79
- "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"SegmentedControl\",\n \"children\": [\n \"s1\",\n \"s2\",\n \"s3\"\n ]\n },\n {\n \"id\": \"s1\",\n \"component\": \"Segment\",\n \"value\": \"list\",\n \"text\": \"List\",\n \"icon\": \"list\"\n },\n {\n \"id\": \"s2\",\n \"component\": \"Segment\",\n \"value\": \"grid\",\n \"text\": \"Grid\",\n \"icon\": \"squares-four\"\n },\n {\n \"id\": \"s3\",\n \"component\": \"Segment\",\n \"value\": \"board\",\n \"text\": \"Board\",\n \"icon\": \"kanban\"\n }\n]",
82
+ "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Segmented\",\n \"children\": [\n \"s1\",\n \"s2\",\n \"s3\"\n ]\n },\n {\n \"id\": \"s1\",\n \"component\": \"Segment\",\n \"value\": \"list\",\n \"text\": \"List\",\n \"icon\": \"list\"\n },\n {\n \"id\": \"s2\",\n \"component\": \"Segment\",\n \"value\": \"grid\",\n \"text\": \"Grid\",\n \"icon\": \"squares-four\"\n },\n {\n \"id\": \"s3\",\n \"component\": \"Segment\",\n \"value\": \"board\",\n \"text\": \"Board\",\n \"icon\": \"kanban\"\n }\n]",
80
83
  "name": "icons"
81
84
  }
82
85
  ],
83
86
  "keywords": [
84
- "segment"
87
+ "segment",
88
+ "toggle-option"
85
89
  ],
86
90
  "name": "UISegment",
91
+ "parts": {},
87
92
  "related": [
88
- "segmented-control"
93
+ "segmented-control",
94
+ "ToggleOption"
89
95
  ],
90
96
  "slots": {},
91
97
  "states": [
@@ -104,11 +110,16 @@
104
110
  "segment": [
105
111
  "segment-button",
106
112
  "segmented-option",
107
- "option-button"
113
+ "option-button",
114
+ "toggle-option"
108
115
  ]
109
116
  },
110
117
  "tag": "segment-ui",
111
- "tokens": {},
118
+ "tokens": {
119
+ "--segment-bg-selected": {
120
+ "description": "Background color of a selected segment under the parent's [multiple] mode (no sliding indicator in that mode)."
121
+ }
122
+ },
112
123
  "traits": [],
113
124
  "version": 1
114
125
  }
@@ -8,6 +8,16 @@ segment-ui[selected] {
8
8
  color: var(--segment-fg-selected);
9
9
  }
10
10
 
11
+ /* [multiple] (gh#1369, #1363 C1): the parent segmented-ui[multiple] never
12
+ creates a sliding indicator (segmented.class.js render()), so each
13
+ selected segment paints its own background instead — mirrors the
14
+ deprecated toggle-option-ui[selected] treatment it replaces. Scoped to
15
+ the multiple ancestor so single-select's indicator-driven look is
16
+ unchanged. */
17
+ segmented-ui[multiple] > segment-ui[selected] {
18
+ background: var(--segment-bg-selected);
19
+ }
20
+
11
21
  @scope (segment-ui) {
12
22
  :where(:scope) {
13
23
  /* ── Layout ── */
@@ -33,6 +43,11 @@ segment-ui[selected] {
33
43
  --segment-fg-hover: var(--a-ui-text-hover);
34
44
  --segment-fg-selected: var(--a-chrome-dark);
35
45
  --segment-fg-disabled: var(--a-ui-text-disabled);
46
+ /* [multiple] only — see the moved-out selector above (Safari 17.x bug
47
+ note at top of file). Same default the deprecated
48
+ toggle-option-ui[selected] background used, for visual continuity
49
+ across the merge (gh#1369). */
50
+ --segment-bg-selected: var(--md-sys-color-primary-container);
36
51
 
37
52
  /* ── Transition ── */
38
53
  --segment-duration: var(--a-duration-fast);
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * `<segment-ui>` — Individual segment child of <segmented-ui> — carries the [value],
3
3
  [text], optional [icon], and [selected] state for one option in
4
- a horizontal segmented selector. Distinct from <tab-ui> (a view
4
+ a horizontal segmented selector, single- or multi-select
5
+ (<segmented-ui multiple>, gh#1369). Distinct from <tab-ui> (a view
5
6
  switcher's child) and <option> (native option for <select-ui>).
6
7
  Use segment-ui only as a direct child of <segmented-ui>; never
7
8
  standalone.
@@ -10,7 +10,8 @@ version: 1
10
10
  description: |
11
11
  Individual segment child of <segmented-ui> — carries the [value],
12
12
  [text], optional [icon], and [selected] state for one option in
13
- a horizontal segmented selector. Distinct from <tab-ui> (a view
13
+ a horizontal segmented selector, single- or multi-select
14
+ (<segmented-ui multiple>, gh#1369). Distinct from <tab-ui> (a view
14
15
  switcher's child) and <option> (native option for <select-ui>).
15
16
  Use segment-ui only as a direct child of <segmented-ui>; never
16
17
  standalone.
@@ -51,14 +52,18 @@ states:
51
52
  description: Non-interactive; dimmed.
52
53
  attribute: disabled
53
54
  traits: []
54
- tokens: {}
55
+ tokens:
56
+ --segment-bg-selected:
57
+ description: Background color of a selected segment under the parent's [multiple] mode (no sliding indicator in that mode).
55
58
  a2ui:
59
+ allowedParents:
60
+ - Segmented
56
61
  rules:
57
- - rule: 'Child of <segmented-ui> — one selectable option button in a single-select group.'
62
+ - rule: 'Child of <segmented-ui> — one selectable option button; the parent''s [multiple] axis decides single- or multi-select, segment-ui itself is unchanged either way.'
58
63
  reason: 'Cluster contract.'
59
- - rule: 'Different from <toggle-option-ui> (which is multi-select inside <toggle-group-ui>).'
60
- reason: 'Single vs multi-select sibling distinction.'
61
- - rule: 'Selected state managed by parent <segmented-ui> via active attribute; do not set selected directly on segment.'
64
+ - rule: '<toggle-option-ui> (deprecated, gh#1369) is the same concept — use segment-ui inside <segmented-ui multiple> instead.'
65
+ reason: 'Deprecation redirect.'
66
+ - rule: 'Selected state managed by the parent <segmented-ui> it syncs the selected attribute onto every child whose value is in its own value (single value, or the [multiple] comma-separated set); do not set selected directly on segment.'
62
67
  reason: 'Parent owns selection state.'
63
68
  anti_patterns: []
64
69
  examples:
@@ -68,7 +73,7 @@ examples:
68
73
  [
69
74
  {
70
75
  "id": "root",
71
- "component": "SegmentedControl",
76
+ "component": "Segmented",
72
77
  "children": [
73
78
  "s1",
74
79
  "s2",
@@ -79,7 +84,7 @@ examples:
79
84
  "id": "s1",
80
85
  "component": "Segment",
81
86
  "text": "Overview",
82
- "active": true
87
+ "selected": true
83
88
  },
84
89
  {
85
90
  "id": "s2",
@@ -98,7 +103,7 @@ examples:
98
103
  [
99
104
  {
100
105
  "id": "root",
101
- "component": "SegmentedControl",
106
+ "component": "Segmented",
102
107
  "children": [
103
108
  "s1",
104
109
  "s2",
@@ -130,7 +135,7 @@ examples:
130
135
  [
131
136
  {
132
137
  "id": "root",
133
- "component": "SegmentedControl",
138
+ "component": "Segmented",
134
139
  "children": [
135
140
  "s1",
136
141
  "s2",
@@ -169,7 +174,7 @@ examples:
169
174
  [
170
175
  {
171
176
  "id": "root",
172
- "component": "SegmentedControl",
177
+ "component": "Segmented",
173
178
  "children": [
174
179
  "s1",
175
180
  "s2",
@@ -202,7 +207,7 @@ examples:
202
207
  [
203
208
  {
204
209
  "id": "root",
205
- "component": "SegmentedControl",
210
+ "component": "Segmented",
206
211
  "children": [
207
212
  "s1",
208
213
  "s2",
@@ -233,7 +238,9 @@ examples:
233
238
  ]
234
239
  keywords:
235
240
  - segment
241
+ - toggle-option
236
242
  synonyms:
237
- segment: [segment-button, segmented-option, option-button]
243
+ segment: [segment-button, segmented-option, option-button, toggle-option]
238
244
  related:
239
245
  - segmented-control
246
+ - ToggleOption
@@ -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/Segmented.json",
4
4
  "title": "Segmented",
5
- "description": "Single-select toggle group with an animated sliding indicator. Children must be segment-ui elements.",
5
+ "description": "Toggle group with an animated sliding indicator (single-select) or independently-toggleable segments (multi-select via [multiple]). Children must be segment-ui elements.",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -14,15 +14,20 @@
14
14
  ],
15
15
  "properties": {
16
16
  "allowEmpty": {
17
- "description": "Suppresses the connect-time self-select of the first enabled segment when value is falsy. Without it, an empty value silently selects the first segment; with it, a falsy value renders every segment unselected until a real value arrives — for path-bound consumers whose bound value can be a genuine empty state.",
17
+ "description": "Suppresses the connect-time self-select of the first enabled segment when value is falsy. Without it, an empty value silently selects the first segment; with it, a falsy value renders every segment unselected until a real value arrives — for path-bound consumers whose bound value can be a genuine empty state. No effect under [multiple] — multi-select never self-selects (empty value already means \"nothing chosen\").",
18
18
  "type": "boolean",
19
19
  "default": false
20
20
  },
21
21
  "component": {
22
22
  "const": "Segmented"
23
23
  },
24
+ "multiple": {
25
+ "description": "Enables multi-select — value becomes a comma-separated set, the sliding indicator is suppressed (each selected segment carries its own background instead), and Space/Enter toggles a focused segment instead of arrow-move selecting it. Positive polarity, matching select-ui[multiple]. Absorbs the role of the deprecated <toggle-group-ui> + <toggle-option-ui> pair (gh#1369, #1363 C1). Unlike <toggle-group-ui single>, re-clicking an already-selected segment does NOT clear the selection — segmented-ui's single-select is standard radiogroup semantics (always exactly one selected once a value is set).",
26
+ "type": "boolean",
27
+ "default": false
28
+ },
24
29
  "value": {
25
- "description": "Value of the currently selected segment.",
30
+ "description": "Value of the currently selected segment. Under [multiple], a comma-separated set of selected values (same encoding as select-ui[multiple]).",
26
31
  "type": "string",
27
32
  "default": ""
28
33
  }
@@ -32,6 +37,9 @@
32
37
  ],
33
38
  "unevaluatedProperties": false,
34
39
  "x-adiaui": {
40
+ "allowedChildren": [
41
+ "Segment"
42
+ ],
35
43
  "anti_patterns": [],
36
44
  "category": "navigation",
37
45
  "composes": [],
@@ -45,6 +53,11 @@
45
53
  "description": "Segmented control with three segment-ui children for view switching.",
46
54
  "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Card\",\n \"children\": [\n \"sec\"\n ]\n },\n {\n \"id\": \"sec\",\n \"component\": \"Section\",\n \"children\": [\n \"comp\"\n ]\n },\n {\n \"id\": \"comp\",\n \"component\": \"Segmented\",\n \"value\": \"daily\",\n \"children\": [\n \"s1\",\n \"s2\",\n \"s3\"\n ]\n },\n {\n \"id\": \"s1\",\n \"component\": \"Segment\",\n \"value\": \"daily\",\n \"text\": \"Daily\"\n },\n {\n \"id\": \"s2\",\n \"component\": \"Segment\",\n \"value\": \"weekly\",\n \"text\": \"Weekly\"\n },\n {\n \"id\": \"s3\",\n \"component\": \"Segment\",\n \"value\": \"monthly\",\n \"text\": \"Monthly\"\n }\n]",
47
55
  "name": "basic-segmented"
56
+ },
57
+ {
58
+ "description": "Multi-select segmented control (gh#1369) for filter chips — [multiple] set, value is a comma-separated set of active segments.",
59
+ "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Card\",\n \"children\": [\n \"sec\"\n ]\n },\n {\n \"id\": \"sec\",\n \"component\": \"Section\",\n \"children\": [\n \"comp\"\n ]\n },\n {\n \"id\": \"comp\",\n \"component\": \"Segmented\",\n \"multiple\": true,\n \"value\": \"bold,italic\",\n \"children\": [\n \"s1\",\n \"s2\",\n \"s3\"\n ]\n },\n {\n \"id\": \"s1\",\n \"component\": \"Segment\",\n \"value\": \"bold\",\n \"text\": \"Bold\"\n },\n {\n \"id\": \"s2\",\n \"component\": \"Segment\",\n \"value\": \"italic\",\n \"text\": \"Italic\"\n },\n {\n \"id\": \"s3\",\n \"component\": \"Segment\",\n \"value\": \"underline\",\n \"text\": \"Underline\"\n }\n]",
60
+ "name": "multi-select-filter-chips"
48
61
  }
49
62
  ],
50
63
  "keywords": [
@@ -55,21 +68,27 @@
55
68
  "switch",
56
69
  "tab",
57
70
  "tabs",
58
- "button-group"
71
+ "button-group",
72
+ "filter",
73
+ "multi-select",
74
+ "filter-chips"
59
75
  ],
60
76
  "name": "UISegmented",
77
+ "parts": {
78
+ "indicator": {
79
+ "description": "Auto-created sliding indicator element prepended on first render — template-owned anatomy part, not a light-DOM insertion point (gh#1454). Lazily created once via an internal-field guard, never adopted from a consumer-authored element."
80
+ }
81
+ },
61
82
  "related": [
62
83
  "Segment",
63
84
  "ToggleGroup",
85
+ "ToggleOption",
64
86
  "Tabs",
65
87
  "Radio"
66
88
  ],
67
89
  "slots": {
68
90
  "default": {
69
91
  "description": "Child segment-ui elements that form the toggle group. Children MUST be segment-ui — bare segment tags render text but are silently ignored for the sliding indicator and role/aria-checked state."
70
- },
71
- "indicator": {
72
- "description": "Auto-created sliding indicator element prepended on first render."
73
92
  }
74
93
  },
75
94
  "states": [
@@ -85,6 +104,16 @@
85
104
  "button",
86
105
  "segmented"
87
106
  ],
107
+ "filter": [
108
+ "segmented",
109
+ "toggle-group",
110
+ "filter-chips"
111
+ ],
112
+ "multi-select": [
113
+ "segmented",
114
+ "toggle-group",
115
+ "select"
116
+ ],
88
117
  "options": [
89
118
  "settings",
90
119
  "radio",