@ds-mo/ui 13.13.0 → 13.15.0

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 (339) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +71 -21
  3. package/dist/agent.json +291 -74
  4. package/dist/angular/ds-agent-questionnaire.d.ts +19 -0
  5. package/dist/angular/ds-agent-questionnaire.js +46 -0
  6. package/dist/angular/ds-agent-response.d.ts +1 -1
  7. package/dist/angular/ds-agent-response.js +3 -3
  8. package/dist/angular/ds-agent-source-list.d.ts +9 -2
  9. package/dist/angular/ds-agent-source-list.js +7 -3
  10. package/dist/angular/ds-agent-tool-call.d.ts +9 -2
  11. package/dist/angular/ds-agent-tool-call.js +9 -5
  12. package/dist/angular/ds-button-filled.d.ts +1 -1
  13. package/dist/angular/ds-button-filled.js +3 -3
  14. package/dist/angular/ds-button-unfilled.d.ts +1 -1
  15. package/dist/angular/ds-button-unfilled.js +3 -3
  16. package/dist/angular/ds-checkbox.d.ts +1 -1
  17. package/dist/angular/ds-checkbox.js +3 -3
  18. package/dist/angular/ds-message-composer.d.ts +1 -1
  19. package/dist/angular/ds-message-composer.js +3 -3
  20. package/dist/angular/ds-radio.js +2 -1
  21. package/dist/angular/ds-table.d.ts +4 -1
  22. package/dist/angular/ds-table.js +7 -4
  23. package/dist/angular/ds-tag.d.ts +1 -1
  24. package/dist/angular/ds-tag.js +3 -3
  25. package/dist/angular/index.d.ts +1 -1
  26. package/dist/angular/index.js +1 -0
  27. package/dist/angular/proxies.d.ts +1 -0
  28. package/dist/angular/proxies.js +1 -0
  29. package/dist/components/ds-agent-activity.js +1 -1
  30. package/dist/components/ds-agent-questionnaire.d.ts +24 -0
  31. package/dist/components/ds-agent-questionnaire.js +2 -0
  32. package/dist/components/ds-agent-questionnaire.js.map +1 -0
  33. package/dist/components/ds-agent-response.js +1 -1
  34. package/dist/components/ds-agent-response.js.map +1 -1
  35. package/dist/components/ds-agent-source-list.js +1 -1
  36. package/dist/components/ds-agent-tool-call.js +1 -1
  37. package/dist/components/ds-attachment-list.js +1 -1
  38. package/dist/components/ds-avatar.js +1 -1
  39. package/dist/components/ds-badge.js +1 -1
  40. package/dist/components/ds-banner.js +1 -1
  41. package/dist/components/ds-bar-nav.js +1 -1
  42. package/dist/components/ds-bar-title.js +1 -1
  43. package/dist/components/ds-bar-workflow.js +1 -1
  44. package/dist/components/ds-breadcrumb.js +1 -1
  45. package/dist/components/ds-button-filled.js +1 -1
  46. package/dist/components/ds-button-unfilled.js +1 -1
  47. package/dist/components/ds-card-chart.js +1 -1
  48. package/dist/components/ds-card-overview.js +1 -1
  49. package/dist/components/ds-card-overview.js.map +1 -1
  50. package/dist/components/ds-card-setting.js +1 -1
  51. package/dist/components/ds-chart-legend.js +1 -1
  52. package/dist/components/ds-chart-legend.js.map +1 -1
  53. package/dist/components/ds-chart.js +1 -1
  54. package/dist/components/ds-chart.js.map +1 -1
  55. package/dist/components/ds-checkbox.js +1 -1
  56. package/dist/components/ds-chip.js +1 -1
  57. package/dist/components/ds-chip.js.map +1 -1
  58. package/dist/components/ds-code-block.js +1 -1
  59. package/dist/components/ds-conversation-list-item.js +1 -1
  60. package/dist/components/ds-conversation-list-item.js.map +1 -1
  61. package/dist/components/ds-conversation-list-section.js +1 -1
  62. package/dist/components/ds-conversation-list.js +1 -1
  63. package/dist/components/ds-divider.js +1 -1
  64. package/dist/components/ds-empty-state.js +1 -1
  65. package/dist/components/ds-field.js +1 -1
  66. package/dist/components/ds-icon.js +1 -1
  67. package/dist/components/ds-input.js +1 -1
  68. package/dist/components/ds-input.js.map +1 -1
  69. package/dist/components/ds-markdown.js +1 -1
  70. package/dist/components/ds-menu.js +1 -1
  71. package/dist/components/ds-message-actions.js +1 -1
  72. package/dist/components/ds-message-bubble.js +1 -1
  73. package/dist/components/ds-message-bubble.js.map +1 -1
  74. package/dist/components/ds-message-composer.js +1 -1
  75. package/dist/components/ds-message-composer.js.map +1 -1
  76. package/dist/components/ds-message-scroller.js +1 -1
  77. package/dist/components/ds-message-scroller.js.map +1 -1
  78. package/dist/components/ds-message.js +1 -1
  79. package/dist/components/ds-mobile-bar-nav.js +1 -1
  80. package/dist/components/ds-mobile-header.js +1 -1
  81. package/dist/components/ds-mobile-section-switcher.js +1 -1
  82. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  83. package/dist/components/ds-modal.js +1 -1
  84. package/dist/components/ds-panel-nav.js +1 -1
  85. package/dist/components/ds-panel-sub-nav.js +1 -1
  86. package/dist/components/ds-panel-sub-nav.js.map +1 -1
  87. package/dist/components/ds-panel-tool-header.js +1 -1
  88. package/dist/components/ds-panel-tool-search.js +1 -1
  89. package/dist/components/ds-panel-tools.js +1 -1
  90. package/dist/components/ds-radio.js +1 -1
  91. package/dist/components/ds-radio.js.map +1 -1
  92. package/dist/components/ds-scroll-overlay.js +1 -1
  93. package/dist/components/ds-select.js +1 -1
  94. package/dist/components/ds-select.js.map +1 -1
  95. package/dist/components/ds-shell-app.js +1 -1
  96. package/dist/components/ds-shell-app.js.map +1 -1
  97. package/dist/components/ds-shell-page.js +1 -1
  98. package/dist/components/ds-shell-tools.js +1 -1
  99. package/dist/components/ds-skeleton.js +1 -1
  100. package/dist/components/ds-slider.js +1 -1
  101. package/dist/components/ds-slider.js.map +1 -1
  102. package/dist/components/ds-swatch-picker.js +1 -1
  103. package/dist/components/ds-switch.js +1 -1
  104. package/dist/components/ds-tab-group.js +1 -1
  105. package/dist/components/ds-table.js +1 -1
  106. package/dist/components/ds-table.js.map +1 -1
  107. package/dist/components/ds-tag.js +1 -1
  108. package/dist/components/ds-text.js +1 -1
  109. package/dist/components/ds-toast.js +1 -1
  110. package/dist/components/ds-tooltip-chart.js +1 -1
  111. package/dist/components/ds-tooltip.js +1 -1
  112. package/dist/components/ds-typing-indicator.js +1 -1
  113. package/dist/components/index.d.ts +10 -0
  114. package/dist/components/{p-PQgDzzn9.js → p-00or0yGw.js} +2 -2
  115. package/dist/components/p-B2SoinWf.js +2 -0
  116. package/dist/components/p-B2SoinWf.js.map +1 -0
  117. package/dist/components/{p-DGkWMhHO.js → p-B69Re7HW.js} +2 -2
  118. package/dist/components/p-BH_lVRgp.js +2 -0
  119. package/dist/components/{p-CCYgBUUS.js.map → p-BH_lVRgp.js.map} +1 -1
  120. package/dist/components/p-BLaqjUWu.js +2 -0
  121. package/dist/components/{p-Cw1bbiCG.js.map → p-BLaqjUWu.js.map} +1 -1
  122. package/dist/components/{p-B6z51yBf.js → p-BNkU9dcc.js} +2 -2
  123. package/dist/components/{p-DBchq8Zw.js → p-BRze4tRe.js} +2 -2
  124. package/dist/components/p-BtUgncSJ.js +2 -0
  125. package/dist/components/p-BtUgncSJ.js.map +1 -0
  126. package/dist/components/p-C891ueIx.js +2 -0
  127. package/dist/components/p-C891ueIx.js.map +1 -0
  128. package/dist/components/p-C8U5BsJf.js +2 -0
  129. package/dist/components/p-C8U5BsJf.js.map +1 -0
  130. package/dist/components/p-CCkptWPj.js +2 -0
  131. package/dist/components/p-CCkptWPj.js.map +1 -0
  132. package/dist/components/p-CKo3OFG1.js +2 -0
  133. package/dist/components/p-CKo3OFG1.js.map +1 -0
  134. package/dist/components/p-CXduurfd.js.map +1 -1
  135. package/dist/components/{p-DLwM1RNL.js → p-CdKz-QT2.js} +2 -2
  136. package/dist/components/p-CdKz-QT2.js.map +1 -0
  137. package/dist/components/p-CekGwihQ.js +2 -0
  138. package/dist/components/{p-CSlTJWFG.js.map → p-CekGwihQ.js.map} +1 -1
  139. package/dist/components/p-ClHpIZg0.js +2 -0
  140. package/dist/components/p-ClHpIZg0.js.map +1 -0
  141. package/dist/components/p-CnUq7E8S.js +2 -0
  142. package/dist/components/p-CnUq7E8S.js.map +1 -0
  143. package/dist/components/{p-C9StMCWg.js → p-Cohb8T7G.js} +2 -2
  144. package/dist/components/p-CqDJRVT8.js +2 -0
  145. package/dist/components/p-CqDJRVT8.js.map +1 -0
  146. package/dist/components/p-CsXC1cHI.js +2 -0
  147. package/dist/components/{p-DGvzGGcu.js.map → p-CsXC1cHI.js.map} +1 -1
  148. package/dist/components/p-CuwopElg.js.map +1 -1
  149. package/dist/components/p-D4j0deyd.js +2 -0
  150. package/dist/components/{p-CzV4gIxd.js.map → p-D4j0deyd.js.map} +1 -1
  151. package/dist/components/p-D5aUkdTw.js +2 -0
  152. package/dist/components/p-D5aUkdTw.js.map +1 -0
  153. package/dist/components/p-DQXzTV8N.js +2 -0
  154. package/dist/components/p-DQXzTV8N.js.map +1 -0
  155. package/dist/components/p-DStd98dM.js +2 -0
  156. package/dist/components/p-DStd98dM.js.map +1 -0
  157. package/dist/components/p-DWNhyLp2.js +2 -0
  158. package/dist/components/{p-B1JB0Zn-.js.map → p-DWNhyLp2.js.map} +1 -1
  159. package/dist/components/p-DWjE0VNn.js +2 -0
  160. package/dist/components/p-DWjE0VNn.js.map +1 -0
  161. package/dist/components/{p-BFMV9TJO.js → p-DgIRyJoc.js} +2 -2
  162. package/dist/components/{p-BNiIyZCn.js → p-Dhx_3_tf.js} +2 -2
  163. package/dist/components/p-Dhx_3_tf.js.map +1 -0
  164. package/dist/components/{p-CE82aQZr.js → p-DyVAWGL9.js} +2 -2
  165. package/dist/components/p-GSnB-sa7.js +2 -0
  166. package/dist/components/p-GSnB-sa7.js.map +1 -0
  167. package/dist/components/p-GWUTrIlk.js +2 -0
  168. package/dist/components/p-GWUTrIlk.js.map +1 -0
  169. package/dist/components/p-IhToA4m4.js +2 -0
  170. package/dist/components/{p-cPh32CFB.js.map → p-IhToA4m4.js.map} +1 -1
  171. package/dist/components/p-NQOI5gN1.js +2 -0
  172. package/dist/components/p-NQOI5gN1.js.map +1 -0
  173. package/dist/components/p-QDcUAz9m.js +2 -0
  174. package/dist/components/{p-BNHPCCw8.js.map → p-QDcUAz9m.js.map} +1 -1
  175. package/dist/components/p-Qf-os3lG.js +2 -0
  176. package/dist/components/p-Qf-os3lG.js.map +1 -0
  177. package/dist/components/{p-DBJJiSP0.js → p-chA2WA5x.js} +2 -2
  178. package/dist/components/{p-DwKC_9u2.js → p-dEouiXJ8.js} +2 -2
  179. package/dist/components/{p-BAGTb6cZ.js → p-fKwbYrhi.js} +2 -2
  180. package/dist/docs/components.json +942 -20
  181. package/dist/lib/components/ButtonFilled/ButtonFilled.d.ts +4 -0
  182. package/dist/lib/utils/control-text.d.ts +2 -0
  183. package/dist/lib/utils/index.d.ts +1 -1
  184. package/dist/lib/utils/index.js.map +2 -2
  185. package/dist/mcp-data/registry/agent-activity.json +2 -2
  186. package/dist/mcp-data/registry/agent-questionnaire.json +273 -0
  187. package/dist/mcp-data/registry/agent-response.json +33 -12
  188. package/dist/mcp-data/registry/agent-source-list.json +34 -14
  189. package/dist/mcp-data/registry/agent-tool-call.json +60 -19
  190. package/dist/mcp-data/registry/attachment-list.json +2 -2
  191. package/dist/mcp-data/registry/avatar.json +2 -2
  192. package/dist/mcp-data/registry/badge.json +2 -2
  193. package/dist/mcp-data/registry/banner.json +2 -2
  194. package/dist/mcp-data/registry/bar-nav.json +3 -3
  195. package/dist/mcp-data/registry/bar-title.json +3 -3
  196. package/dist/mcp-data/registry/bar-workflow.json +2 -2
  197. package/dist/mcp-data/registry/breadcrumb.json +3 -3
  198. package/dist/mcp-data/registry/button-filled.json +22 -4
  199. package/dist/mcp-data/registry/button-unfilled.json +28 -8
  200. package/dist/mcp-data/registry/card-chart.json +2 -2
  201. package/dist/mcp-data/registry/card-overview.json +2 -2
  202. package/dist/mcp-data/registry/card-setting.json +2 -2
  203. package/dist/mcp-data/registry/chart-legend.json +3 -3
  204. package/dist/mcp-data/registry/chart.json +3 -3
  205. package/dist/mcp-data/registry/checkbox.json +27 -10
  206. package/dist/mcp-data/registry/chip.json +3 -3
  207. package/dist/mcp-data/registry/code-block.json +15 -7
  208. package/dist/mcp-data/registry/conversation-list-item.json +3 -3
  209. package/dist/mcp-data/registry/conversation-list-section.json +2 -2
  210. package/dist/mcp-data/registry/conversation-list.json +2 -2
  211. package/dist/mcp-data/registry/divider.json +2 -2
  212. package/dist/mcp-data/registry/empty-state.json +2 -2
  213. package/dist/mcp-data/registry/field.json +2 -2
  214. package/dist/mcp-data/registry/icon.json +3 -3
  215. package/dist/mcp-data/registry/input.json +2 -2
  216. package/dist/mcp-data/registry/loader.json +2 -2
  217. package/dist/mcp-data/registry/markdown.json +2 -2
  218. package/dist/mcp-data/registry/menu.json +3 -3
  219. package/dist/mcp-data/registry/message-actions.json +2 -2
  220. package/dist/mcp-data/registry/message-bubble.json +3 -3
  221. package/dist/mcp-data/registry/message-composer.json +31 -9
  222. package/dist/mcp-data/registry/message-scroller.json +18 -10
  223. package/dist/mcp-data/registry/message.json +2 -2
  224. package/dist/mcp-data/registry/mobile-bar-nav.json +2 -2
  225. package/dist/mcp-data/registry/mobile-header.json +2 -2
  226. package/dist/mcp-data/registry/mobile-section-switcher.json +2 -2
  227. package/dist/mcp-data/registry/mobile-sheet-nav.json +2 -2
  228. package/dist/mcp-data/registry/modal.json +2 -2
  229. package/dist/mcp-data/registry/panel-nav.json +3 -3
  230. package/dist/mcp-data/registry/panel-sub-nav.json +2 -2
  231. package/dist/mcp-data/registry/panel-tool-header.json +2 -2
  232. package/dist/mcp-data/registry/panel-tool-search.json +2 -2
  233. package/dist/mcp-data/registry/panel-tools.json +3 -3
  234. package/dist/mcp-data/registry/radio.json +25 -12
  235. package/dist/mcp-data/registry/registry.json +295 -75
  236. package/dist/mcp-data/registry/scroll-overlay.json +2 -2
  237. package/dist/mcp-data/registry/select.json +3 -3
  238. package/dist/mcp-data/registry/shell-app.json +3 -3
  239. package/dist/mcp-data/registry/shell-page.json +2 -2
  240. package/dist/mcp-data/registry/shell-tools.json +2 -2
  241. package/dist/mcp-data/registry/skeleton.json +2 -2
  242. package/dist/mcp-data/registry/slider.json +3 -3
  243. package/dist/mcp-data/registry/swatch-picker.json +3 -3
  244. package/dist/mcp-data/registry/switch.json +3 -3
  245. package/dist/mcp-data/registry/tab-group.json +2 -2
  246. package/dist/mcp-data/registry/table.json +122 -21
  247. package/dist/mcp-data/registry/tag.json +24 -6
  248. package/dist/mcp-data/registry/text.json +3 -3
  249. package/dist/mcp-data/registry/toast.json +2 -2
  250. package/dist/mcp-data/registry/tooltip-chart.json +6 -4
  251. package/dist/mcp-data/registry/tooltip.json +2 -2
  252. package/dist/mcp-data/registry/typing-indicator.json +2 -2
  253. package/dist/react/components.d.ts +1 -0
  254. package/dist/react/components.js +1 -0
  255. package/dist/react/ds-agent-questionnaire.d.ts +13 -0
  256. package/dist/react/ds-agent-questionnaire.js +15 -0
  257. package/dist/react/ds-agent-source-list.d.ts +7 -2
  258. package/dist/react/ds-agent-source-list.js +1 -1
  259. package/dist/react/ds-agent-tool-call.d.ts +7 -2
  260. package/dist/react/ds-agent-tool-call.js +1 -1
  261. package/dist/react/ds-table.d.ts +2 -1
  262. package/dist/react/ds-table.js +1 -0
  263. package/dist/styles/prose.css +21 -4
  264. package/dist/styles/table.css +244 -26
  265. package/dist/types/components/AgentQuestionnaire/AgentQuestionnaire.d.ts +49 -0
  266. package/dist/types/components/AgentQuestionnaire/agent-questionnaire-model.d.ts +13 -0
  267. package/dist/types/components/AgentResponse/AgentResponse.d.ts +3 -1
  268. package/dist/types/components/AgentSourceList/AgentSourceList.d.ts +5 -0
  269. package/dist/types/components/AgentToolCall/AgentToolCall.d.ts +21 -0
  270. package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +4 -0
  271. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +11 -1
  272. package/dist/types/components/Checkbox/Checkbox.d.ts +3 -0
  273. package/dist/types/components/MessageComposer/MessageComposer.d.ts +3 -0
  274. package/dist/types/components/MessageScroller/MessageScroller.d.ts +21 -1
  275. package/dist/types/components/Radio/Radio.d.ts +4 -0
  276. package/dist/types/components/Table/Table.d.ts +31 -23
  277. package/dist/types/components/Table/index.d.ts +1 -1
  278. package/dist/types/components/Table/table-cell-model.d.ts +44 -0
  279. package/dist/types/components/Table/table-layout-controller.d.ts +65 -0
  280. package/dist/types/components/Table/table-load-controller.d.ts +49 -0
  281. package/dist/types/components/Table/table-model.d.ts +25 -0
  282. package/dist/types/components/Table/table-render-model.d.ts +41 -0
  283. package/dist/types/components/Table/table-types.d.ts +23 -2
  284. package/dist/types/components/Tag/Tag.d.ts +3 -0
  285. package/dist/types/components/conversation-types.d.ts +51 -2
  286. package/dist/types/components.d.ts +231 -10
  287. package/dist/types/utils/control-text.d.ts +2 -0
  288. package/dist/types/utils/index.d.ts +1 -1
  289. package/package.json +7 -5
  290. package/dist/components/p-B1JB0Zn-.js +0 -2
  291. package/dist/components/p-B2t8alvH.js +0 -2
  292. package/dist/components/p-B2t8alvH.js.map +0 -1
  293. package/dist/components/p-BEEYhbIb.js +0 -2
  294. package/dist/components/p-BEEYhbIb.js.map +0 -1
  295. package/dist/components/p-BNHPCCw8.js +0 -2
  296. package/dist/components/p-BNiIyZCn.js.map +0 -1
  297. package/dist/components/p-BUZLhvs1.js +0 -2
  298. package/dist/components/p-BUZLhvs1.js.map +0 -1
  299. package/dist/components/p-BgaF83uh.js +0 -2
  300. package/dist/components/p-BgaF83uh.js.map +0 -1
  301. package/dist/components/p-Br0fwWUG.js +0 -2
  302. package/dist/components/p-Br0fwWUG.js.map +0 -1
  303. package/dist/components/p-BydCwx7x.js +0 -2
  304. package/dist/components/p-BydCwx7x.js.map +0 -1
  305. package/dist/components/p-C3Z01Glr.js +0 -2
  306. package/dist/components/p-C3Z01Glr.js.map +0 -1
  307. package/dist/components/p-CCYgBUUS.js +0 -2
  308. package/dist/components/p-CSlTJWFG.js +0 -2
  309. package/dist/components/p-CdFnvBem.js +0 -2
  310. package/dist/components/p-CdFnvBem.js.map +0 -1
  311. package/dist/components/p-Ch5yT3UA.js +0 -2
  312. package/dist/components/p-Ch5yT3UA.js.map +0 -1
  313. package/dist/components/p-Cw1bbiCG.js +0 -2
  314. package/dist/components/p-CzV4gIxd.js +0 -2
  315. package/dist/components/p-D-F8eyXy.js +0 -2
  316. package/dist/components/p-D-F8eyXy.js.map +0 -1
  317. package/dist/components/p-D6g070eY.js +0 -2
  318. package/dist/components/p-D6g070eY.js.map +0 -1
  319. package/dist/components/p-DGvzGGcu.js +0 -2
  320. package/dist/components/p-DLwM1RNL.js.map +0 -1
  321. package/dist/components/p-DmblUQ4D.js +0 -2
  322. package/dist/components/p-DmblUQ4D.js.map +0 -1
  323. package/dist/components/p-Doz2uwRv.js +0 -2
  324. package/dist/components/p-Doz2uwRv.js.map +0 -1
  325. package/dist/components/p-DumWT7NN.js +0 -2
  326. package/dist/components/p-DumWT7NN.js.map +0 -1
  327. package/dist/components/p-bLCbOPYa.js +0 -2
  328. package/dist/components/p-bLCbOPYa.js.map +0 -1
  329. package/dist/components/p-cPh32CFB.js +0 -2
  330. /package/dist/components/{p-PQgDzzn9.js.map → p-00or0yGw.js.map} +0 -0
  331. /package/dist/components/{p-DGkWMhHO.js.map → p-B69Re7HW.js.map} +0 -0
  332. /package/dist/components/{p-B6z51yBf.js.map → p-BNkU9dcc.js.map} +0 -0
  333. /package/dist/components/{p-DBchq8Zw.js.map → p-BRze4tRe.js.map} +0 -0
  334. /package/dist/components/{p-C9StMCWg.js.map → p-Cohb8T7G.js.map} +0 -0
  335. /package/dist/components/{p-BFMV9TJO.js.map → p-DgIRyJoc.js.map} +0 -0
  336. /package/dist/components/{p-CE82aQZr.js.map → p-DyVAWGL9.js.map} +0 -0
  337. /package/dist/components/{p-DBJJiSP0.js.map → p-chA2WA5x.js.map} +0 -0
  338. /package/dist/components/{p-DwKC_9u2.js.map → p-dEouiXJ8.js.map} +0 -0
  339. /package/dist/components/{p-BAGTb6cZ.js.map → p-fKwbYrhi.js.map} +0 -0
@@ -12,8 +12,8 @@
12
12
  "themeSetup": "Set data-theme=\"dark\" on <html> for dark mode. Light is default.",
13
13
  "peerDependencies": {
14
14
  "required": [
15
- "@ds-mo/tokens ^6.0.0",
16
- "@ds-mo/icons ^6.5.0"
15
+ "@ds-mo/tokens ^6.2.1",
16
+ "@ds-mo/icons ^6.6.0"
17
17
  ],
18
18
  "optional": [],
19
19
  "frameworks": "None required for Custom Elements; generated React and Angular adapters are included."
@@ -99,10 +99,132 @@
99
99
  "text"
100
100
  ]
101
101
  },
102
+ {
103
+ "name": "agent-questionnaire",
104
+ "title": "AgentQuestionnaire",
105
+ "description": "Temporary multi-step work surface for provider-neutral agent clarification questions and durable read-only answer records.",
106
+ "type": "registry:ui",
107
+ "meta": {
108
+ "library": "@ds-mo/ui",
109
+ "distribution": "npm",
110
+ "storybook": "https://zainadeel.github.io/compomo/?path=/story/agent-questionnaire",
111
+ "source": "src/wc/components/AgentQuestionnaire/AgentQuestionnaire.tsx",
112
+ "intentStatus": "complete",
113
+ "intent": {
114
+ "audience": "specialized",
115
+ "status": "experimental",
116
+ "summary": "Temporary multi-step work surface for provider-neutral agent clarification questions and durable read-only answer records.",
117
+ "useWhen": [
118
+ "An agent turn pauses for one or more structured single-choice, multiple-choice, or free-text answers."
119
+ ],
120
+ "avoidWhen": [
121
+ "The interaction is a conventional application form, a tool authorization policy, or an application-owned approval with consequences beyond collecting answers."
122
+ ],
123
+ "commonlyComposedWith": [
124
+ "component:ds-message-scroller",
125
+ "component:ds-message-composer",
126
+ "component:ds-agent-response",
127
+ "component:ds-radio",
128
+ "component:ds-checkbox",
129
+ "component:ds-button-filled",
130
+ "component:ds-button-unfilled"
131
+ ],
132
+ "patterns": [
133
+ "pattern:agent-chat"
134
+ ],
135
+ "accessibility": [
136
+ "Radio and checkbox primitives own choice semantics, target density, keyboard interaction, and selected or disabled presentation; progress, validation relationships, static answered summaries, and every action remain available without relying on color or visual position.",
137
+ "The component never takes focus when it mounts; the application calls setFocus only when shifting focus is appropriate.",
138
+ "Choice rows use large Radio and Checkbox targets, while every navigation action uses a small Button primitive and Cancel is an icon-only Cross with localized tooltip and accessible name.",
139
+ "Selection primitives preserve focus, selected, invalid, and disabled distinctions in forced colors."
140
+ ],
141
+ "states": [
142
+ "The component owns only the current step, validation, and unsaved in-progress draft; the application owns the request, submission, transport, resume operation, persistence, and transcript replacement.",
143
+ "Preparing communicates that questions are being assembled, submitting locks editing without clearing the draft, error retains it with application feedback, and answered is a quiet noninteractive record.",
144
+ "A changed request identifier resets to the first question and seeds a fresh local draft from the supplied answers.",
145
+ "Questionnaire selection primitives are isolated from ancestor forms; only dsAnswer emits the normalized ordered answer collection."
146
+ ],
147
+ "responsiveBehavior": [
148
+ "Descriptive choices remain full-row targets, while actions collapse into a single-column layout at narrow widths."
149
+ ],
150
+ "references": [
151
+ {
152
+ "label": "Questionnaire state stories",
153
+ "path": "src/wc/components/AgentQuestionnaire/AgentQuestionnaire.stories.ts"
154
+ },
155
+ {
156
+ "label": "Agent chat composition",
157
+ "path": "agent/patterns/agent-chat/pattern.agent.json"
158
+ }
159
+ ]
160
+ },
161
+ "props": {
162
+ "allowCancel": {
163
+ "type": "boolean",
164
+ "required": false
165
+ },
166
+ "answers": {
167
+ "type": "AgentQuestionAnswer[]",
168
+ "required": false
169
+ },
170
+ "errorMessage": {
171
+ "type": "string",
172
+ "required": false
173
+ },
174
+ "labels": {
175
+ "type": "Partial<AgentQuestionnaireLabels>",
176
+ "required": false
177
+ },
178
+ "questions": {
179
+ "type": "AgentQuestion[]",
180
+ "required": true
181
+ },
182
+ "requestId": {
183
+ "type": "string",
184
+ "required": true
185
+ },
186
+ "status": {
187
+ "type": "AgentQuestionnaireStatus",
188
+ "required": false
189
+ }
190
+ },
191
+ "events": [
192
+ {
193
+ "name": "dsAnswer",
194
+ "detail": "AgentQuestionnaireAnswerEventDetail"
195
+ },
196
+ {
197
+ "name": "dsCancel",
198
+ "detail": "AgentQuestionnaireCancelEventDetail"
199
+ }
200
+ ],
201
+ "slots": [],
202
+ "exports": {
203
+ "customElement": "ds-agent-questionnaire",
204
+ "react": "DsAgentQuestionnaire",
205
+ "angular": "DsAgentQuestionnaire"
206
+ }
207
+ },
208
+ "dependencies": [
209
+ "@ds-mo/ui",
210
+ "@ds-mo/tokens",
211
+ "@ds-mo/icons"
212
+ ],
213
+ "registryDependencies": [
214
+ "button-filled",
215
+ "button-unfilled",
216
+ "checkbox",
217
+ "icon",
218
+ "loader",
219
+ "radio",
220
+ "text",
221
+ "tooltip"
222
+ ]
223
+ },
102
224
  {
103
225
  "name": "agent-response",
104
226
  "title": "AgentResponse",
105
- "description": "Ordered renderer for normalized immutable agent response parts inside a generic incoming message.",
227
+ "description": "Ordered renderer for normalized immutable agent response parts or an application-composed response body inside a generic incoming message.",
106
228
  "type": "registry:ui",
107
229
  "meta": {
108
230
  "library": "@ds-mo/ui",
@@ -113,9 +235,9 @@
113
235
  "intent": {
114
236
  "audience": "specialized",
115
237
  "status": "experimental",
116
- "summary": "Ordered renderer for normalized immutable agent response parts inside a generic incoming message.",
238
+ "summary": "Ordered renderer for normalized immutable agent response parts or an application-composed response body inside a generic incoming message.",
117
239
  "useWhen": [
118
- "An agent response combines Markdown, user-safe activity, display-only tools, attachments, and sources in authored order."
240
+ "An agent response combines Markdown, user-safe activity, display-only tools, attachments, answered questionnaires, sources, or application-specific content in authored order."
119
241
  ],
120
242
  "avoidWhen": [
121
243
  "The component would be expected to own a model, transport, persistence, title generation, approval policy, or private reasoning."
@@ -126,28 +248,30 @@
126
248
  "component:ds-markdown",
127
249
  "component:ds-agent-activity",
128
250
  "component:ds-agent-tool-call",
129
- "component:ds-agent-source-list"
251
+ "component:ds-agent-source-list",
252
+ "component:ds-agent-questionnaire"
130
253
  ],
131
254
  "patterns": [
132
255
  "pattern:agent-chat"
133
256
  ],
134
257
  "accessibility": [
135
- "Part order matches authored reading order and remains inside generic message semantics.",
258
+ "Part or composed-slot order matches authored reading order and remains inside generic message semantics.",
136
259
  "Streaming state supplements rather than replaces meaningful textual status.",
137
260
  "Forwarded metadata actions retain Message ordering, keyboard reveal, and touch visibility."
138
261
  ],
139
262
  "states": [
140
263
  "The owner replaces immutable part arrays as scripted or live output changes.",
264
+ "Parts mode remains the compatibility default for serializable content; composed mode ignores parts and gives the default slot ownership of the complete ordered response body.",
141
265
  "AgentResponse renders directly in Message without borrowing a plain MessageBubble surface.",
142
- "Markdown parts use the optional safe renderer; prose CSS owns only semantic-tree styling and never response ordering or streaming state.",
266
+ "Markdown parts use the optional safe renderer; the response sets the public prose text measure while code, tables, tools, sources, attachments, and other structured parts retain the full lane.",
143
267
  "The application may compose MessageActions for completed-response Copy and controlled feedback while retaining persistent retry or recovery controls in the separate actions slot."
144
268
  ],
145
269
  "responsiveBehavior": [
146
- "Rich content uses the available transcript width while respecting readable measure and local overflow constraints."
270
+ "Direct prose blocks use a readable text measure within the available transcript width, while narrow lanes and structured content retain their available width and local overflow constraints."
147
271
  ],
148
272
  "references": [
149
273
  {
150
- "label": "Representative streamed response",
274
+ "label": "Response modes and representative flow",
151
275
  "path": "src/wc/components/AgentResponse/AgentResponse.stories.ts"
152
276
  },
153
277
  {
@@ -173,6 +297,10 @@
173
297
  "type": "AgentResponsePart[]",
174
298
  "required": false
175
299
  },
300
+ "renderMode": {
301
+ "type": "AgentResponseRenderMode",
302
+ "required": false
303
+ },
176
304
  "showAuthor": {
177
305
  "type": "boolean",
178
306
  "required": false
@@ -200,6 +328,7 @@
200
328
  ],
201
329
  "registryDependencies": [
202
330
  "agent-activity",
331
+ "agent-questionnaire",
203
332
  "agent-source-list",
204
333
  "agent-tool-call",
205
334
  "attachment-list",
@@ -210,7 +339,7 @@
210
339
  {
211
340
  "name": "agent-source-list",
212
341
  "title": "AgentSourceList",
213
- "description": "Collapsible list of agent response sources with title, description, and validated external links.",
342
+ "description": "Inline collapsible agent-source list with safe external links, derived hostnames, optional descriptions, and observable disclosure state.",
214
343
  "type": "registry:ui",
215
344
  "meta": {
216
345
  "library": "@ds-mo/ui",
@@ -221,12 +350,12 @@
221
350
  "intent": {
222
351
  "audience": "specialized",
223
352
  "status": "experimental",
224
- "summary": "Collapsible list of agent response sources with title, description, and validated external links.",
353
+ "summary": "Inline collapsible agent-source list with safe external links, derived hostnames, optional descriptions, and observable disclosure state.",
225
354
  "useWhen": [
226
- "An agent response cites external material readers may inspect."
355
+ "A stable agent response cites external material readers may inspect inline."
227
356
  ],
228
357
  "avoidWhen": [
229
- "The links are ordinary body links or are not sources for the response."
358
+ "The links are ordinary body links, source discovery is still active, or the application expects a source drawer or deduplication behavior."
230
359
  ],
231
360
  "commonlyComposedWith": [
232
361
  "component:ds-agent-response",
@@ -236,16 +365,20 @@
236
365
  "pattern:agent-chat"
237
366
  ],
238
367
  "accessibility": [
239
- "Each source uses descriptive linked text and visible supporting context.",
240
- "Unsafe link schemes remain non-interactive text."
368
+ "Each interactive source uses descriptive linked text, a visible hostname, supporting context, and an external-link indication.",
369
+ "Malformed and unsafe schemes remain non-interactive text rather than producing executable links.",
370
+ "The native disclosure exposes keyboard and expanded-state semantics, while open-change events let applications observe participant intent."
371
+ ],
372
+ "states": [
373
+ "Applications collect and deduplicate sources, then append the stable list once; active discovery remains an activity or tool state."
241
374
  ],
242
375
  "responsiveBehavior": [
243
- "Source titles and descriptions wrap within the response width."
376
+ "Source titles, hostnames, and descriptions wrap within the response width."
244
377
  ],
245
378
  "references": [
246
379
  {
247
- "label": "Storybook examples",
248
- "path": "src/wc/components/MessageScroller/MessageScroller.stories.ts"
380
+ "label": "Source safety and disclosure stories",
381
+ "path": "src/wc/components/AgentSourceList/AgentSourceList.stories.ts"
249
382
  }
250
383
  ]
251
384
  },
@@ -263,7 +396,12 @@
263
396
  "required": false
264
397
  }
265
398
  },
266
- "events": [],
399
+ "events": [
400
+ {
401
+ "name": "dsOpenChange",
402
+ "detail": "{ open: boolean }"
403
+ }
404
+ ],
267
405
  "slots": [],
268
406
  "exports": {
269
407
  "customElement": "ds-agent-source-list",
@@ -284,7 +422,7 @@
284
422
  {
285
423
  "name": "agent-tool-call",
286
424
  "title": "AgentToolCall",
287
- "description": "Display-only disclosure for an agent tool call, its safe input or output, and execution status.",
425
+ "description": "Compact display-only status row for a provider-neutral agent tool lifecycle with optional custom result and diagnostic disclosure surfaces.",
288
426
  "type": "registry:ui",
289
427
  "meta": {
290
428
  "library": "@ds-mo/ui",
@@ -295,34 +433,45 @@
295
433
  "intent": {
296
434
  "audience": "specialized",
297
435
  "status": "experimental",
298
- "summary": "Display-only disclosure for an agent tool call, its safe input or output, and execution status.",
436
+ "summary": "Compact display-only status row for a provider-neutral agent tool lifecycle with optional custom result and diagnostic disclosure surfaces.",
299
437
  "useWhen": [
300
- "A prototype or agent product needs to expose user-safe tool execution detail."
438
+ "An agent product needs to expose user-safe tool preparation, queueing, execution, participant wait, completion, failure, denial, or cancellation state."
301
439
  ],
302
440
  "avoidWhen": [
303
- "A participant must approve, deny, edit, or retry the tool call; those are product controls outside this component."
441
+ "A participant must approve, deny, edit, retry, or execute the tool call; those product controls and consequences remain outside this component."
304
442
  ],
305
443
  "commonlyComposedWith": [
306
444
  "component:ds-agent-response",
307
- "component:ds-code-block"
445
+ "component:ds-code-block",
446
+ "component:ds-text"
308
447
  ],
309
448
  "patterns": [
310
449
  "pattern:agent-chat"
311
450
  ],
312
451
  "accessibility": [
313
- "Queued, running, success, error, and denied states are available as text.",
314
- "The disclosure uses native keyboard and expanded-state semantics."
452
+ "Every lifecycle state remains visible as text and error or denied meaning does not depend on color.",
453
+ "A disclosure is rendered only when details exist and uses native keyboard and expanded-state semantics.",
454
+ "Structured input, output, and error details use the semantic code-family fallback and optional ligature override."
315
455
  ],
316
456
  "states": [
317
- "This component presents state but never executes a tool or owns approval policy."
457
+ "Applications normalize provider-specific tool states and may localize the visible status label before rendering.",
458
+ "A custom summary replaces the generated name, a custom result owns the primary result surface, and custom details replace generic input, output, and error diagnostics.",
459
+ "An ordinary text-only custom result inherits the body-medium interface-text baseline; structured result components retain ownership of their own layout and typography.",
460
+ "Compose semantic links around ds-text when a custom result is navigational so anchor semantics and design-system typography each have one owner.",
461
+ "Applications load font assets once at their root; tool details and results never fetch or package a font.",
462
+ "This component presents state but never executes a tool or owns approval, retry, authorization, transport, or consequence policy."
318
463
  ],
319
464
  "responsiveBehavior": [
320
- "Structured detail wraps and scrolls without widening the transcript."
465
+ "Long names and state labels wrap inside the compact row while custom results and structured diagnostics remain within the transcript lane without widening it."
321
466
  ],
322
467
  "references": [
323
468
  {
324
- "label": "Storybook examples",
325
- "path": "src/wc/components/MessageScroller/MessageScroller.stories.ts"
469
+ "label": "Lifecycle and slot stories",
470
+ "path": "src/wc/components/AgentToolCall/AgentToolCall.stories.ts"
471
+ },
472
+ {
473
+ "label": "Font ownership and loading",
474
+ "path": "docs/font-ownership.md"
326
475
  }
327
476
  ]
328
477
  },
@@ -354,9 +503,18 @@
354
503
  "state": {
355
504
  "type": "AgentToolState",
356
505
  "required": false
506
+ },
507
+ "statusLabel": {
508
+ "type": "string",
509
+ "required": false
357
510
  }
358
511
  },
359
- "events": [],
512
+ "events": [
513
+ {
514
+ "name": "dsOpenChange",
515
+ "detail": "{ open: boolean }"
516
+ }
517
+ ],
360
518
  "slots": [],
361
519
  "exports": {
362
520
  "customElement": "ds-agent-tool-call",
@@ -1523,7 +1681,7 @@
1523
1681
  ],
1524
1682
  "states": [
1525
1683
  "Every size applies one complete control-density recipe across frame height, inline padding, icon zone, text-container inset, gap, and radius.",
1526
- "Set isInset only when the button is nested inside a same-size control; it reduces the outer geometry while preserving the size's icon, label inset, gap, radius, and typography.",
1684
+ "Set isInset only when the button is nested inside a same-size control. The default single inset removes 4px overall; insetDepth double removes 8px overall so the parent can add 4px per edge while preserving its outer alignment box. Double inset falls back to single at xs to protect minimum icon geometry.",
1527
1685
  "Use only one filled action per local decision area; render all secondary actions with ButtonUnfilled.",
1528
1686
  "Choose brand or neutral for general commands. Reserve positive, negative, warning, and caution for matching action consequences, and AI, guide, or walkthrough for actions that enter those feature experiences.",
1529
1687
  "Contrast serves both surface adaptation and hierarchy, but never permits a second filled action in the same decision area.",
@@ -1595,6 +1753,10 @@
1595
1753
  "type": "string",
1596
1754
  "required": false
1597
1755
  },
1756
+ "insetDepth": {
1757
+ "type": "ControlInsetDepth",
1758
+ "required": false
1759
+ },
1598
1760
  "intent": {
1599
1761
  "type": "ButtonFilledIntent",
1600
1762
  "required": false
@@ -1719,7 +1881,7 @@
1719
1881
  ],
1720
1882
  "accessibility": [
1721
1883
  "Provide an explicit accessible name for every icon-only action.",
1722
- "Set hasMenu when the button triggers a Menu; it implies aria-haspopup of menu. Pass controls with the Menu id and expanded from the same open state given to Menu.",
1884
+ "Set hasMenu when the button triggers a Menu; it implies aria-haspopup of menu. Pass controls with the Menu id and expanded from the same open state given to Menu. Expanded popup triggers hold the pressed visual while open; expanded disclosure controls without popup semantics retain the normal resting appearance.",
1723
1885
  "Give an icon-only menu button an accessible name that states the role, such as More options, because no visible label or chevron carries it.",
1724
1886
  "Use haspopup directly for a non-menu popup such as a listbox or dialog; those cases get no chevron.",
1725
1887
  "Use pressed only for a genuine toggle button; it supplies aria-pressed and dsChange intent. Use isActive only for owner-controlled visual emphasis inside a composite whose selection semantics live on the owner.",
@@ -1730,7 +1892,7 @@
1730
1892
  ],
1731
1893
  "states": [
1732
1894
  "Every size applies one complete control-density recipe across frame height, inline padding, icon zone, text-container inset, gap, and radius.",
1733
- "Set isInset only when the button is nested inside a same-size control; it reduces the outer geometry while preserving the size's icon, label inset, gap, radius, and typography.",
1895
+ "Set isInset only when the button is nested inside a same-size control. The default single inset removes 4px overall; insetDepth double removes 8px overall so the parent can add 4px per edge while preserving its outer alignment box. Double inset falls back to single at xs to protect minimum icon geometry.",
1734
1896
  "A true pressed toggle and owner-controlled isActive emphasis share the selected visual treatment, but only pressed supplies toggle semantics and dsChange.",
1735
1897
  "General content UI keeps the selected interaction fill and border for pressed or active emphasis.",
1736
1898
  "Shell, navigation, and tool-rail composites use isActive with foreground-only emphasis and no selected fill or border.",
@@ -1742,7 +1904,7 @@
1742
1904
  "Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width.",
1743
1905
  "hasMenu covers two distinct menu-button shapes and the variant selects between them. With label or icon-label the action has a menu, and a trailing chevron carries the affordance. With icon the button is a menu, meaning the overflow or more-options control, and no chevron is added.",
1744
1906
  "Because the icon-only shape has no chevron, its glyph must convey the menu on its own; use Ellipses. Never pair hasMenu with an icon-only glyph that does not read as a menu.",
1745
- "An open popup is a transient pressed state rather than a selected one. While expanded is true the pressed wash is held for the popup's complete rendered lifecycle and survives hover, including when chrome opts out of selected fills with activeFill set to false."
1907
+ "An open popup is a transient pressed state rather than a selected one. While expanded is true and haspopup or hasMenu identifies a popup, the pressed wash is held for the popup's complete rendered lifecycle and survives hover, including when chrome opts out of selected fills with activeFill set to false. Expanded disclosure buttons without popup semantics remain visually neutral."
1746
1908
  ],
1747
1909
  "responsiveBehavior": [
1748
1910
  "The consuming layout decides when an icon-label action becomes icon-only and must provide an explicit accessible name after changing variants.",
@@ -1812,6 +1974,10 @@
1812
1974
  "type": "string",
1813
1975
  "required": false
1814
1976
  },
1977
+ "insetDepth": {
1978
+ "type": "ControlInsetDepth",
1979
+ "required": false
1980
+ },
1815
1981
  "isActive": {
1816
1982
  "type": "boolean",
1817
1983
  "required": false
@@ -2581,7 +2747,7 @@
2581
2747
  {
2582
2748
  "name": "checkbox",
2583
2749
  "title": "Checkbox",
2584
- "description": "Form-associated checkbox for independent choices, acknowledgment, or consent, with checked, unchecked, mixed, and four density states.",
2750
+ "description": "Form-associated checkbox for independent choices, acknowledgment, or consent, with optional supporting description, checked, unchecked, mixed, and four density states.",
2585
2751
  "type": "registry:ui",
2586
2752
  "meta": {
2587
2753
  "library": "@ds-mo/ui",
@@ -2592,7 +2758,7 @@
2592
2758
  "intent": {
2593
2759
  "audience": "general",
2594
2760
  "status": "stable",
2595
- "summary": "Form-associated checkbox for independent choices, acknowledgment, or consent, with checked, unchecked, mixed, and four density states.",
2761
+ "summary": "Form-associated checkbox for independent choices, acknowledgment, or consent, with optional supporting description, checked, unchecked, mixed, and four density states.",
2596
2762
  "useWhen": [
2597
2763
  "A user may independently select zero or more choices.",
2598
2764
  "A form requires acknowledgment, consent, or an opt-in value before submission.",
@@ -2626,7 +2792,7 @@
2626
2792
  "component:ds-text"
2627
2793
  ],
2628
2794
  "accessibility": [
2629
- "Every interactive checkbox requires a visible label that provides its accessible name.",
2795
+ "Every interactive checkbox requires a visible label that provides its accessible name; an optional visible description is associated as supporting context.",
2630
2796
  "Enter and Space activate the checkbox; checked and mixed state are exposed through aria-checked.",
2631
2797
  "Disabled and inactive checkboxes leave the tab order and are omitted from form submission.",
2632
2798
  "Use presentation mode only inside a composite option that owns selection semantics, focus, and interaction."
@@ -2636,16 +2802,17 @@
2636
2802
  "Activating an indeterminate checkbox clears the mixed state, toggles checked, and emits dsChange with the resulting boolean.",
2637
2803
  "The initial checked and indeterminate values are restored by native form reset; checked values submit under name and unchecked values submit nothing.",
2638
2804
  "Sizes are lg with a 20px box in a 24px placement, md with a 16px box in a 20px placement, sm with a 12px box in a 16px placement, and xs with an 8px box in a 12px placement.",
2639
- "Presentation mode removes checkbox semantics, focus, interaction, label rendering, and form submission while preserving the visual state."
2805
+ "Presentation mode removes checkbox semantics, focus, interaction, label rendering, description rendering, and form submission while preserving the visual state.",
2806
+ "Description-rich checkboxes grow beyond the fixed density height while retaining its minimum target size and primitive-owned selection anatomy."
2640
2807
  ],
2641
2808
  "responsiveBehavior": [
2642
- "Choose size from the density of the containing row; labels may wrap while the placement box stays fixed.",
2809
+ "Choose size from the density of the containing row; labels and descriptions may wrap while the placement box stays fixed.",
2643
2810
  "Use the same density as the shared option icon zone in multi-select rows."
2644
2811
  ],
2645
2812
  "frameworkCaveats": {
2646
2813
  "customElements": [
2647
2814
  "Bind checked and indeterminate as properties for application state updates and listen for dsChange.",
2648
- "Use the form attribute on the host when associating a checkbox rendered outside its owning form."
2815
+ "Use the form attribute on the host when associating a checkbox rendered outside its owning form or isolating it from an ancestor form."
2649
2816
  ],
2650
2817
  "react": [
2651
2818
  "Use DsCheckbox and handle onDsChange; checked and indeterminate are mutable and update after user activation."
@@ -2670,6 +2837,10 @@
2670
2837
  "type": "boolean",
2671
2838
  "required": false
2672
2839
  },
2840
+ "description": {
2841
+ "type": "string",
2842
+ "required": false
2843
+ },
2673
2844
  "disabled": {
2674
2845
  "type": "boolean",
2675
2846
  "required": false
@@ -2870,7 +3041,7 @@
2870
3041
  {
2871
3042
  "name": "code-block",
2872
3043
  "title": "CodeBlock",
2873
- "description": "Scrollable monospace code surface with optional language or filename context and copy action.",
3044
+ "description": "Scrollable code surface with optional language or filename context and copy action.",
2874
3045
  "type": "registry:ui",
2875
3046
  "meta": {
2876
3047
  "library": "@ds-mo/ui",
@@ -2881,7 +3052,7 @@
2881
3052
  "intent": {
2882
3053
  "audience": "general",
2883
3054
  "status": "experimental",
2884
- "summary": "Scrollable monospace code surface with optional language or filename context and copy action.",
3055
+ "summary": "Scrollable code surface with optional language or filename context and copy action.",
2885
3056
  "useWhen": [
2886
3057
  "A message or document displays fenced code that readers may copy."
2887
3058
  ],
@@ -2894,7 +3065,11 @@
2894
3065
  ],
2895
3066
  "accessibility": [
2896
3067
  "The copy action has matching accessible-name and visible-tooltip status wording, and the code remains selectable text.",
2897
- "Language and filename labels supplement rather than replace the code content."
3068
+ "Language and filename labels supplement rather than replace the code content.",
3069
+ "The semantic code-family token retains a system-monospace fallback when an application does not load Fira Code; applications may disable programming ligatures through the shared code-surface custom property."
3070
+ ],
3071
+ "states": [
3072
+ "Applications load font assets once at their root. The component consumes --typography-font-family-code and never fetches or packages a font."
2898
3073
  ],
2899
3074
  "responsiveBehavior": [
2900
3075
  "Long lines scroll horizontally and do not widen the owning transcript."
@@ -2902,7 +3077,11 @@
2902
3077
  "references": [
2903
3078
  {
2904
3079
  "label": "Storybook examples",
2905
- "path": "src/wc/components/MessageScroller/MessageScroller.stories.ts"
3080
+ "path": "src/wc/components/CodeBlock/CodeBlock.stories.ts"
3081
+ },
3082
+ {
3083
+ "label": "Font ownership and loading",
3084
+ "path": "docs/font-ownership.md"
2906
3085
  }
2907
3086
  ]
2908
3087
  },
@@ -4540,7 +4719,7 @@
4540
4719
  {
4541
4720
  "name": "message-composer",
4542
4721
  "title": "MessageComposer",
4543
- "description": "Two-line auto-growing conversation textarea with submit, stop, error, and extensible leading-tool or trailing-action regions.",
4722
+ "description": "Two-line auto-growing conversation textarea with submit, stop, an attached submission-error support surface, and extensible tool, action, and error-recovery regions.",
4544
4723
  "type": "registry:ui",
4545
4724
  "meta": {
4546
4725
  "library": "@ds-mo/ui",
@@ -4551,7 +4730,7 @@
4551
4730
  "intent": {
4552
4731
  "audience": "general",
4553
4732
  "status": "experimental",
4554
- "summary": "Two-line auto-growing conversation textarea with submit, stop, error, and extensible leading-tool or trailing-action regions.",
4733
+ "summary": "Two-line auto-growing conversation textarea with submit, stop, an attached submission-error support surface, and extensible tool, action, and error-recovery regions.",
4555
4734
  "useWhen": [
4556
4735
  "A conversation accepts multi-line text and needs Enter-to-submit with a streaming stop action."
4557
4736
  ],
@@ -4569,14 +4748,17 @@
4569
4748
  "accessibility": [
4570
4749
  "Always provide a localized textarea label and submit or stop action names; the built-in icon action exposes the same name in its tooltip.",
4571
4750
  "Shift plus Enter inserts a newline while Enter submits non-empty content.",
4572
- "Streaming and error states remain perceivable without relying on icon shape alone."
4751
+ "Submission errors remain visible and announced above the editable box as part of one attached composer unit, and the editable control references their text while the error state is active.",
4752
+ "Streaming and error states remain perceivable without relying on icon shape or color alone."
4573
4753
  ],
4574
4754
  "states": [
4575
4755
  "The owner controls draft value and transport state; the composer emits intent without performing transport.",
4756
+ "Error status never clears or disables the draft; the application supplies recovery actions through error-actions and owns retry semantics. The negative support surface appears above and attached to the composer box, within the component's measured ownership.",
4576
4757
  "Use the tools slot for leading actions such as add and the actions slot for trailing actions such as dictation; the built-in submit or stop action remains last with an 8px gap from the preceding action. These icon buttons use the standard non-rounded control radius, and the application supplies tooltips for slotted icon actions.",
4577
4758
  "The composer surface uses the 10px --dimension-radius-125 token.",
4578
4759
  "Mouse or keyboard focus on the textarea gives the complete composer surface the same bold-brand inset stroke width and color as an active Input; the native textarea never draws a separate outline.",
4579
- "The empty or otherwise inactive submit action is a disabled bordered ButtonUnfilled. Ready submit actions use submitIntent, while the streaming stop action remains a bold-brand ButtonFilled."
4760
+ "The empty or otherwise inactive submit action is a disabled bordered ButtonUnfilled. Ready submit actions use submitIntent, while the streaming stop action remains a bold-brand ButtonFilled.",
4761
+ "The attached error unit keeps a real boundary in forced colors and lets message text and application-owned recovery actions wrap at narrow widths."
4580
4762
  ],
4581
4763
  "responsiveBehavior": [
4582
4764
  "The textarea begins at two body-medium lines, grows one line at a time through six lines, and then scrolls internally."
@@ -4593,6 +4775,10 @@
4593
4775
  ]
4594
4776
  },
4595
4777
  "props": {
4778
+ "errorMessage": {
4779
+ "type": "string",
4780
+ "required": false
4781
+ },
4596
4782
  "isInactive": {
4597
4783
  "type": "boolean",
4598
4784
  "required": false
@@ -4641,18 +4827,21 @@
4641
4827
  },
4642
4828
  "dependencies": [
4643
4829
  "@ds-mo/ui",
4644
- "@ds-mo/tokens"
4830
+ "@ds-mo/tokens",
4831
+ "@ds-mo/icons"
4645
4832
  ],
4646
4833
  "registryDependencies": [
4647
4834
  "button-filled",
4648
4835
  "button-unfilled",
4836
+ "icon",
4837
+ "text",
4649
4838
  "tooltip"
4650
4839
  ]
4651
4840
  },
4652
4841
  {
4653
4842
  "name": "message-scroller",
4654
4843
  "title": "MessageScroller",
4655
- "description": "Focusable transcript scroller that follows the live edge only while the reader remains there.",
4844
+ "description": "Focusable transcript scroller with turn anchoring, reader-controlled live-edge following, and a measured interaction-plus-composer overlay stack.",
4656
4845
  "type": "registry:ui",
4657
4846
  "meta": {
4658
4847
  "library": "@ds-mo/ui",
@@ -4663,7 +4852,7 @@
4663
4852
  "intent": {
4664
4853
  "audience": "general",
4665
4854
  "status": "experimental",
4666
- "summary": "Focusable transcript scroller that follows the live edge only while the reader remains there.",
4855
+ "summary": "Focusable transcript scroller with turn anchoring, reader-controlled live-edge following, and a measured interaction-plus-composer overlay stack.",
4667
4856
  "useWhen": [
4668
4857
  "Messages can append or stream and transcript position must remain respectful of reader intent."
4669
4858
  ],
@@ -4672,10 +4861,12 @@
4672
4861
  ],
4673
4862
  "commonlyComposedWith": [
4674
4863
  "component:ds-message",
4675
- "component:ds-message-composer"
4864
+ "component:ds-message-composer",
4865
+ "component:ds-agent-questionnaire"
4676
4866
  ],
4677
4867
  "patterns": [
4678
- "pattern:conversation"
4868
+ "pattern:conversation",
4869
+ "pattern:agent-chat"
4679
4870
  ],
4680
4871
  "accessibility": [
4681
4872
  "Give each transcript a concise localized label.",
@@ -4683,11 +4874,12 @@
4683
4874
  "The scroll-to-latest control remains keyboard accessible when follow behavior is released and exposes its action name in a tooltip."
4684
4875
  ],
4685
4876
  "states": [
4686
- "Selection and transcript interaction release automatic following.",
4877
+ "Wheel, touch, keyboard navigation, selection, and transcript interaction release automatic following; Scroll to latest explicitly restores it.",
4878
+ "A newly appended outgoing Message marked scroll-anchor starts a turn near the top with the configurable previous-turn peek; mutations inside existing messages and prepended history do not re-anchor.",
4687
4879
  "Opening saved history, message jumps, and prepended history preserve deliberate position.",
4688
4880
  "The scroll-to-latest action is absent at the live edge, appears only after the reader moves away, and disappears again after returning to the newest message.",
4689
4881
  "Scroll to latest uses the shared md control-elevation wrapper with a pointer-transparent top highlight, preserving its transparent backdrop blur and borderless unfilled action while the press-scale modifier moves the complete elevated surface.",
4690
- "Place a composer container with 8px padding on every side in the overlay slot so messages scroll behind it; the shared scroll-overlay controller tracks every composer growth step, reserves matching transcript clearance, begins the fade 8px before the visible composer, and keeps scroll-to-latest above it."
4882
+ "Place a pending human-input surface in interaction and a composer container with 8px padding on every side in overlay; the shared scroll-overlay controller measures them as one stack, tracks every growth step, reserves matching transcript clearance, begins the fade before the stack, and keeps scroll-to-latest above it."
4691
4883
  ],
4692
4884
  "responsiveBehavior": [
4693
4885
  "Transcript width is readable while the scroll region fills available height.",
@@ -6212,7 +6404,7 @@
6212
6404
  {
6213
6405
  "name": "radio",
6214
6406
  "title": "Radio",
6215
- "description": "Form-associated one-of-many radio selection set with vertical or horizontal layout, four densities, per-option inactive state, and roving keyboard focus.",
6407
+ "description": "Form-associated one-of-many radio selection set with vertical or horizontal layout, optional per-option descriptions, four densities, per-option inactive state, and roving keyboard focus.",
6216
6408
  "type": "registry:ui",
6217
6409
  "meta": {
6218
6410
  "library": "@ds-mo/ui",
@@ -6223,7 +6415,7 @@
6223
6415
  "intent": {
6224
6416
  "audience": "general",
6225
6417
  "status": "stable",
6226
- "summary": "Form-associated one-of-many radio selection set with vertical or horizontal layout, four densities, per-option inactive state, and roving keyboard focus.",
6418
+ "summary": "Form-associated one-of-many radio selection set with vertical or horizontal layout, optional per-option descriptions, four densities, per-option inactive state, and roving keyboard focus.",
6227
6419
  "useWhen": [
6228
6420
  "A user must select exactly one visible option from a small set.",
6229
6421
  "All available choices should remain visible for comparison.",
@@ -6257,19 +6449,20 @@
6257
6449
  ],
6258
6450
  "accessibility": [
6259
6451
  "The host exposes radiogroup semantics and requires an accessible group name from aria-label or aria-labelledby.",
6260
- "Each visible option exposes radio semantics, its checked state, its label text, and any inactive state.",
6452
+ "Each visible option exposes radio semantics, its checked state, its label text, optional supporting description, and any inactive state.",
6261
6453
  "Arrow keys move and select through active options; Home and End select the first and last active options; Space and Enter select the focused option.",
6262
- "Roving tabindex keeps one active option in the tab order, preferring the selected option."
6454
+ "Roving tabindex keeps one active option in the tab order, preferring the selected option; setFocus uses that same public focus target."
6263
6455
  ],
6264
6456
  "states": [
6265
6457
  "Unchecked circles use a tertiary-foreground inset stroke: 1.5px at lg, 1.25px at md, 1px at sm, and 0.75px at xs.",
6266
6458
  "Selected circles remove the border, use a brand fill, and draw a centered on-bold foreground dot sized 10px at lg, 8px at md, 6px at sm, and 4px at xs.",
6267
6459
  "Sizes are lg with a 20px circle in a 24px placement, md with a 16px circle in a 20px placement, sm with a 12px circle in a 16px placement, and xs with an 8px circle in a 12px placement.",
6268
- "The initial value is restored by native form reset; the selected value submits under name and a required set is invalid until one active option is selected."
6460
+ "The initial value is restored by native form reset; the selected value submits under name and a required set is invalid until one active option is selected.",
6461
+ "Description-rich options grow beyond the fixed density height while retaining its minimum target size and primitive-owned selection anatomy."
6269
6462
  ],
6270
6463
  "responsiveBehavior": [
6271
6464
  "Choose size from the density of the containing form or settings row.",
6272
- "Prefer vertical layout when labels may wrap or horizontal space is constrained; horizontal layout is appropriate for short labels in a small set."
6465
+ "Prefer vertical layout when labels or descriptions may wrap or horizontal space is constrained; horizontal layout is appropriate for short labels in a small set."
6273
6466
  ],
6274
6467
  "frameworkCaveats": {
6275
6468
  "customElements": [
@@ -8077,23 +8270,24 @@
8077
8270
  "component:ds-icon"
8078
8271
  ],
8079
8272
  "accessibility": [
8080
- "The rendered structure uses a native table, caption, column headers, row groups, and data cells; keep the caption non-empty even when it is visually hidden.",
8273
+ "The rendered structure uses a native table, caption, column headers, row groups, and data cells; keep the caption non-empty. The native caption remains visually hidden as the table's accessible name. When caption visibility is enabled, a presentational title bar renders as component chrome outside the horizontal scrollport so it stays aligned with the table frame without duplicating the accessible name.",
8081
8274
  "Sorting controls remain buttons inside column headers. Member-row sort uses aria-sort, while independent group order is described by the grouped header control.",
8082
- "Selection controls expose checkbox semantics and explicit row names; select-all affects selectable loaded rows only and preserves selected identities outside the loaded window.",
8275
+ "Selection controls expose checkbox semantics and explicit row names; select-all affects selectable loaded rows only and preserves selected identities outside the loaded window. When grouping is active with multi-selection, each group section header also exposes a checkbox that selects or clears that group's selectable loaded rows.",
8083
8276
  "Interactive rows are focusable as native rows, activate with Enter or Space, and do not steal activation from their nested selection or action controls.",
8084
8277
  "Scrollable table regions become keyboard focusable and named only when overflow exists.",
8085
- "Incremental loading, newly appended row counts, failures, and end-of-results transitions are announced through a polite status region without replacing visible state."
8278
+ "Incremental loading, newly appended row counts, failures, and end-of-results transitions are announced through a polite status region without replacing visible state.",
8279
+ "An optional result summary footer appears below the table frame when both displayedCount and totalCount are finite, formatting Displaying {displayed} of {total} in text-body-medium secondary."
8086
8280
  ],
8087
8281
  "states": [
8088
- "Columns, rows, groups, grouping, sorting, selected row IDs, and lazy-loading state are controlled inputs. Events communicate intent and never mutate those inputs.",
8089
- "Grouping supports one level. The application supplies ordered groups and ordered member rows; group order and member-row sort are independent controls.",
8282
+ "Columns, rows, groups, grouping, sorting, selected row IDs, collapsed group IDs, displayedCount, totalCount, and lazy-loading state are controlled inputs. Events communicate intent and never mutate those inputs.",
8283
+ "Grouping supports one level. The application supplies ordered groups and ordered member rows; group order and member-row sort are independent controls. Group section headers show an emphasized text-body-medium label followed by a rounded sm Tag containing only the numeric count. The Tag uses the group's faint intent surface (neutral when intent is absent) and a small-elevation, button-hugging wrapper; a localized countLabel remains available to assistive technology. Groups may declare an optional intent (brand, neutral, negative, warning, caution, positive) that paints an LTR gradient from the faint intent surface at the label edge into faint neutral at the trailing edge, plus a bold intent title color. Neutral groups remain solid faint neutral. Section separators are painted inside that viewport-width surface so translucent border tokens composite with each intent background; the final collapsed section does not duplicate the terminal table edge. A trailing visually neutral icon-only ButtonUnfilled uses the 24px md double-inset action recipe and toggles controlled collapsedGroupIds, showing ChevronUp while expanded and ChevronDown while collapsed. While any group remains expanded, a ChevronDownUp action uses the xs sort-control recipe widened to a table-owned 24px lane and collapses every group. It appears at the inline-end edge of the trailing column declared with kind action when one exists; otherwise a button-hugging 24px by 16px medium-elevation surface floats at the visible scrollport's header edge so the action remains reachable while member columns scroll beneath it. The section header stays pinned to the visible horizontal scrollport and spans the smaller of the visible viewport or table width.",
8090
8284
  "An active member sort toggles only between ascending and descending; activating a different sortable label moves sorting to that key. Applications may still clear the controlled sort state explicitly. The grouped column toggles ascending and descending group order without clearing member sort.",
8091
8285
  "Compound headers can expose multiple related labels with independent sort keys. Each label owns only its content-width interaction target while the active direction remains in the column's alignment-aware sort lane.",
8092
- "Initial loading uses row-shaped skeletons. Empty and initial error states remain inside the table. Incremental loading retains existing rows and supports automatic sentinel, manual load-more, retry, and terminal states.",
8286
+ "Initial loading uses row-shaped skeletons that preserve the standard single-line cell padding, row dividers, column dividers, selection lane, and sticky-lane boundaries. Empty and initial error states remain inside the table. Incremental loading retains existing rows and supports automatic sentinel, manual load-more, retry, and terminal states.",
8093
8287
  "Lazy loading replaces pagination. The application owns requests, cancellation, cursors, deduplication, appended records, and query identity; loadIdentity resets the component request guard.",
8094
8288
  "Rows opt into complete-row activation with interactive and emit dsRowActivate without owning navigation. Selection paints through the shared selected ::before layer; interactive hover and press paint through the shared ::after layer.",
8095
8289
  "Row selection owns the single sticky start lane. One explicitly sized application column can own the sticky end lane, or the start lane when selection is absent. Each sticky boundary owns one fixed divider and a row-clipped directional shadow that paints into the adjacent scrolling columns only while more inline content remains beyond that edge.",
8096
- "Cells accept scalar content, standard primary-and-secondary or dual-primary text primitives, declarative Tag, icon-only, 16:9 Image, or ButtonUnfilled Action content, or explicit Empty and Blank absence values. Single-track text, selection, tag-only, icon-only, Action, Empty, and Blank cells resolve a 40px base contract while multi-track cells grow downward. Action cells primarily use an icon-only Ellipses treatment, render a 24px small ButtonUnfilled inside 8px padding, default to unbordered, and emit row, column, and action identities through dsCellAction. Image cells render a 52px-high bordered preview inside 6px outer padding, establishing a 64px row, and fall back to an accessible placeholder when no source is supplied. Empty means the data applies but has no value and renders an em dash with localized assistive text; Blank means the data is not applicable and renders no content. Nullish values remain backward-compatible Empty values. Stable type and variant hooks keep every cell family independently styleable.",
8290
+ "Cells accept scalar content, standard primary-and-secondary or dual-primary text primitives, declarative Tag, icon-only, 16:9 Image, or ButtonUnfilled Action content, or explicit Empty and Blank absence values. Single-track text, selection, tag-only, icon-only, Action, Empty, and Blank cells resolve a 40px base contract while multi-track cells grow downward. Tag cells use the double-inset Tag recipe; the md tag-only recipe is 24px inside 8px padding, while compound tag tracks preserve their peer text alignment. Action cells primarily use an icon-only Ellipses treatment, render a 24px small ButtonUnfilled inside 8px padding, default to unbordered, and emit row, column, and action identities through dsCellAction. Image cells render a 48px-high 16:9 bordered preview inside 8px outer padding, establishing a 64px row and a 102px column recipe, and fall back to an accessible placeholder when no source is supplied. Empty means the data applies but has no value and renders an em dash with localized assistive text; Blank means the data is not applicable and renders no content. Nullish values remain backward-compatible Empty values. Stable type and variant hooks keep every cell family independently styleable.",
8097
8291
  "The public @ds-mo/ui/table.css export is the authoritative zero-specificity visual recipe. Override its --ds-table-* properties or target its stable element classes for product-specific styling."
8098
8292
  ],
8099
8293
  "responsiveBehavior": [
@@ -8107,12 +8301,12 @@
8107
8301
  ],
8108
8302
  "frameworkCaveats": {
8109
8303
  "customElements": [
8110
- "Assign columns, rows, groups, grouping, sort, and selectedRowIds through JavaScript properties rather than HTML attribute strings.",
8111
- "Replace controlled property values in response to dsSortChange, dsGroupingChange, dsSelectionChange, and dsLoadMore; route dsRowActivate in the application owner."
8304
+ "Assign columns, rows, groups, grouping, sort, selectedRowIds, collapsedGroupIds, displayedCount, and totalCount through JavaScript properties rather than HTML attribute strings.",
8305
+ "Replace controlled property values in response to dsSortChange, dsGroupingChange, dsGroupCollapseChange, dsSelectionChange, and dsLoadMore; route dsRowActivate in the application owner."
8112
8306
  ],
8113
8307
  "react": [
8114
8308
  "Pass new array and state-object references when the controlled data or query state changes.",
8115
- "Apply emitted sort, grouping, selection, action, or loading detail to application state and perform data transformations in the owning layer."
8309
+ "Apply emitted sort, grouping, collapse, selection, action, or loading detail to application state and perform data transformations in the owning layer."
8116
8310
  ],
8117
8311
  "angular": [
8118
8312
  "Bind complex table inputs as properties and update the controlled values from the corresponding output events.",
@@ -8139,10 +8333,18 @@
8139
8333
  "type": "TableCaptionVisibility",
8140
8334
  "required": false
8141
8335
  },
8336
+ "collapsedGroupIds": {
8337
+ "type": "string[]",
8338
+ "required": false
8339
+ },
8142
8340
  "columns": {
8143
8341
  "type": "TableColumn[]",
8144
8342
  "required": false
8145
8343
  },
8344
+ "displayedCount": {
8345
+ "type": "number | undefined",
8346
+ "required": false
8347
+ },
8146
8348
  "emptyBody": {
8147
8349
  "type": "string",
8148
8350
  "required": false
@@ -8223,6 +8425,10 @@
8223
8425
  "type": "string | number | undefined",
8224
8426
  "required": false
8225
8427
  },
8428
+ "resultSummaryLabel": {
8429
+ "type": "string",
8430
+ "required": false
8431
+ },
8226
8432
  "retryLabel": {
8227
8433
  "type": "string",
8228
8434
  "required": false
@@ -8258,6 +8464,10 @@
8258
8464
  "stickyHeader": {
8259
8465
  "type": "boolean",
8260
8466
  "required": false
8467
+ },
8468
+ "totalCount": {
8469
+ "type": "number | undefined",
8470
+ "required": false
8261
8471
  }
8262
8472
  },
8263
8473
  "events": [
@@ -8265,6 +8475,10 @@
8265
8475
  "name": "dsCellAction",
8266
8476
  "detail": "TableCellActionDetail"
8267
8477
  },
8478
+ {
8479
+ "name": "dsGroupCollapseChange",
8480
+ "detail": "TableGroupCollapseChangeDetail"
8481
+ },
8268
8482
  {
8269
8483
  "name": "dsGroupingChange",
8270
8484
  "detail": "TableGroupingChangeDetail"
@@ -8372,8 +8586,8 @@
8372
8586
  "Neutral is ordinary metadata; brand marks Motive or product affiliation; AI marks AI-generated or AI-assisted content; positive, caution, warning, and negative communicate increasingly specific status meaning.",
8373
8587
  "Warning signals higher urgency or risk than caution, which asks for attention before a possible issue.",
8374
8588
  "Contrast changes visual prominence without changing semantic intent or parent surface context.",
8375
- "Rounded is an optional visual style with no semantic difference.",
8376
- "isInset opts into reduced outer geometry only when Tag is nested inside a control of the same density; semantic styling, typography, icons, gaps, radius, and interaction remain unchanged.",
8589
+ "Rounded is an optional visual style with no semantic difference. Every size and inset depth keeps a minimum inline size equal to its resolved height, so short labels such as a one-digit count render as circles instead of vertically elongated pills.",
8590
+ "isInset opts into reduced outer geometry only when Tag is nested inside a control of the same density. The default single inset removes 4px overall; insetDepth double removes 8px overall and falls back to single at xs to protect minimum icon geometry. Semantic styling, typography, icons, gaps, radius, and interaction remain unchanged.",
8377
8591
  "Labels stay on one line and truncate only when the owner supplies a maximum width.",
8378
8592
  "Omitted interactive renders static metadata with no focus, event, or suffix. Interactive adds the fixed ChevronUpDown suffix and emits dsClick without toggling expanded internally.",
8379
8593
  "isInactive disables only the interactive button and applies the shared inactive treatment."
@@ -8417,6 +8631,10 @@
8417
8631
  "type": "string",
8418
8632
  "required": false
8419
8633
  },
8634
+ "insetDepth": {
8635
+ "type": "ControlInsetDepth",
8636
+ "required": false
8637
+ },
8420
8638
  "intent": {
8421
8639
  "type": "TagIntent",
8422
8640
  "required": false
@@ -8997,6 +9215,8 @@
8997
9215
  "The owning chart mounts the callout when a local interaction starts and unmounts it when that interaction ends.",
8998
9216
  "Coordinate updates track within one mounted interaction session without restarting the show delay.",
8999
9217
  "Placement flips horizontally or vertically when the rendered callout approaches a viewport edge.",
9218
+ "The heading and rows use the same medium-density section-heading and control-frame anatomy as menu-style choice content.",
9219
+ "When any grouped row supplies a swatch, every row reserves the shared leading icon zone so mixed-swatch labels and trailing values stay aligned.",
9000
9220
  "Placement is chosen as a quadrant rather than computed as coordinates: the component measures its own rendered rect and flips its side and align props, which CSS consumes. It therefore does not use the shared anchored-position utilities, which resolve an anchor element into x and y.",
9001
9221
  "This separation is deliberate. The callout follows the pointer instead of an element, so it has no anchor rect to resolve; adopting the shared geometry would mean rewriting its CSS to consume coordinates for no behavioral gain.",
9002
9222
  "Reduced motion preserves the final visible state without an opacity transition."