@ds-mo/ui 14.17.1 → 14.18.1

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 (316) hide show
  1. package/README.md +7 -0
  2. package/dist/.package-ready.json +1 -1
  3. package/dist/agent-patterns.json +9 -8
  4. package/dist/agent.json +103 -45
  5. package/dist/angular/ds-button-filled.d.ts +1 -1
  6. package/dist/angular/ds-button-filled.js +3 -3
  7. package/dist/angular/ds-button-unfilled.d.ts +1 -1
  8. package/dist/angular/ds-button-unfilled.js +3 -3
  9. package/dist/angular/ds-filter-menu.d.ts +1 -1
  10. package/dist/angular/ds-filter-menu.js +3 -3
  11. package/dist/angular/ds-input.d.ts +1 -1
  12. package/dist/angular/ds-input.js +3 -3
  13. package/dist/angular/ds-menu.d.ts +1 -1
  14. package/dist/angular/ds-menu.js +3 -3
  15. package/dist/angular/ds-mobile-bar-nav.d.ts +1 -1
  16. package/dist/angular/ds-mobile-bar-nav.js +3 -3
  17. package/dist/angular/ds-panel-tool-header.d.ts +3 -8
  18. package/dist/angular/ds-panel-tools.d.ts +3 -8
  19. package/dist/angular/ds-select.d.ts +1 -1
  20. package/dist/angular/ds-select.js +3 -3
  21. package/dist/angular/ds-tooltip.d.ts +1 -1
  22. package/dist/angular/ds-tooltip.js +3 -3
  23. package/dist/components/ds-agent-activity.js +1 -1
  24. package/dist/components/ds-agent-questionnaire.js +1 -1
  25. package/dist/components/ds-agent-response.js +1 -1
  26. package/dist/components/ds-agent-source-list.js +1 -1
  27. package/dist/components/ds-agent-tool-call.js +1 -1
  28. package/dist/components/ds-attachment-list.js +1 -1
  29. package/dist/components/ds-badge.js +1 -1
  30. package/dist/components/ds-banner.js +1 -1
  31. package/dist/components/ds-banner.js.map +1 -1
  32. package/dist/components/ds-bar-action.js +1 -1
  33. package/dist/components/ds-bar-action.js.map +1 -1
  34. package/dist/components/ds-bar-nav.js +1 -1
  35. package/dist/components/ds-bar-title.js +1 -1
  36. package/dist/components/ds-bar-workflow.js +1 -1
  37. package/dist/components/ds-breadcrumb.js +1 -1
  38. package/dist/components/ds-button-filled.js +1 -1
  39. package/dist/components/ds-button-unfilled.js +1 -1
  40. package/dist/components/ds-card-chart.js +1 -1
  41. package/dist/components/ds-card-chart.js.map +1 -1
  42. package/dist/components/ds-card-overview.js +1 -1
  43. package/dist/components/ds-card-setting.js +1 -1
  44. package/dist/components/ds-card-setting.js.map +1 -1
  45. package/dist/components/ds-chart-legend.js +1 -1
  46. package/dist/components/ds-chart.js +1 -1
  47. package/dist/components/ds-checkbox.js +1 -1
  48. package/dist/components/ds-chip.js +1 -1
  49. package/dist/components/ds-code-block.js +1 -1
  50. package/dist/components/ds-conversation-list-item.js +1 -1
  51. package/dist/components/ds-conversation-list-section.js +1 -1
  52. package/dist/components/ds-conversation-list.js +1 -1
  53. package/dist/components/ds-conversation-list.js.map +1 -1
  54. package/dist/components/ds-empty-state.js +1 -1
  55. package/dist/components/ds-field.js +1 -1
  56. package/dist/components/ds-filter-menu.js +1 -1
  57. package/dist/components/ds-input.js +1 -1
  58. package/dist/components/ds-markdown.js +1 -1
  59. package/dist/components/ds-menu.js +1 -1
  60. package/dist/components/ds-message-actions.js +1 -1
  61. package/dist/components/ds-message-actions.js.map +1 -1
  62. package/dist/components/ds-message-composer.js +1 -1
  63. package/dist/components/ds-message-composer.js.map +1 -1
  64. package/dist/components/ds-message-scroller.js +1 -1
  65. package/dist/components/ds-message.js +1 -1
  66. package/dist/components/ds-mobile-bar-nav.js +1 -1
  67. package/dist/components/ds-mobile-header.js +1 -1
  68. package/dist/components/ds-mobile-section-switcher.js +1 -1
  69. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  70. package/dist/components/ds-modal.js +1 -1
  71. package/dist/components/ds-pagination.js +1 -1
  72. package/dist/components/ds-panel-nav.js +1 -1
  73. package/dist/components/ds-panel-sub-nav.js +1 -1
  74. package/dist/components/ds-panel-tool-header.js +1 -1
  75. package/dist/components/ds-panel-tool-search.js +1 -1
  76. package/dist/components/ds-panel-tools.js +1 -1
  77. package/dist/components/ds-paper-texture.js +1 -1
  78. package/dist/components/ds-radio.js +1 -1
  79. package/dist/components/ds-select.js +1 -1
  80. package/dist/components/ds-shell-app.js +1 -1
  81. package/dist/components/ds-shell-app.js.map +1 -1
  82. package/dist/components/ds-shell-page.js +1 -1
  83. package/dist/components/ds-shell-tools.js +1 -1
  84. package/dist/components/ds-skeleton.js +1 -1
  85. package/dist/components/ds-slider.js +1 -1
  86. package/dist/components/ds-swatch-picker.js +1 -1
  87. package/dist/components/ds-switch.js +1 -1
  88. package/dist/components/ds-tab-group.js +1 -1
  89. package/dist/components/ds-table-filter.js +1 -1
  90. package/dist/components/ds-table-filter.js.map +1 -1
  91. package/dist/components/ds-table-saved-views.js +1 -1
  92. package/dist/components/ds-table-sort.js +1 -1
  93. package/dist/components/ds-table-sort.js.map +1 -1
  94. package/dist/components/ds-table-toolbar.js +1 -1
  95. package/dist/components/ds-table-toolbar.js.map +1 -1
  96. package/dist/components/ds-table.js +1 -1
  97. package/dist/components/ds-table.js.map +1 -1
  98. package/dist/components/ds-tag.js +1 -1
  99. package/dist/components/ds-text.js +1 -1
  100. package/dist/components/ds-toast.js +1 -1
  101. package/dist/components/ds-toast.js.map +1 -1
  102. package/dist/components/ds-tooltip-chart.js +1 -1
  103. package/dist/components/ds-tooltip.js +1 -1
  104. package/dist/components/ds-typing-indicator.js +1 -1
  105. package/dist/components/ds-typing-indicator.js.map +1 -1
  106. package/dist/components/{p-C0X2zKbB.js → p-1Hu9jlju.js} +2 -2
  107. package/dist/components/{p-DQqOzDEq.js → p-B00PEE6t.js} +2 -2
  108. package/dist/components/p-B0Byw6OX.js +2 -0
  109. package/dist/components/p-B0Byw6OX.js.map +1 -0
  110. package/dist/components/{p-D1YhYulL.js → p-B1JRCDHS.js} +2 -2
  111. package/dist/components/p-BBG6Sswb.js +2 -0
  112. package/dist/components/{p-23u3lIr1.js.map → p-BBG6Sswb.js.map} +1 -1
  113. package/dist/components/{p-D8Qd6gkf.js → p-BCOl1x0_.js} +2 -2
  114. package/dist/components/{p-Dg9qiMDa.js → p-BHVOiWz5.js} +2 -2
  115. package/dist/components/p-BPG0r_mC.js +2 -0
  116. package/dist/components/p-BPG0r_mC.js.map +1 -0
  117. package/dist/components/p-BUDAwJVV.js +2 -0
  118. package/dist/components/p-BUDAwJVV.js.map +1 -0
  119. package/dist/components/{p-DHuyj-9J.js → p-BXN-e7vF.js} +2 -2
  120. package/dist/components/{p-Bn8NryHK.js → p-B_jZIC9R.js} +2 -2
  121. package/dist/components/{p-7tZx4ukz.js → p-Bbb9A3NV.js} +2 -2
  122. package/dist/components/p-Bece5KH3.js +2 -0
  123. package/dist/components/p-Bece5KH3.js.map +1 -0
  124. package/dist/components/{p-ruPTIV6t.js → p-BhYS_Ump.js} +2 -2
  125. package/dist/components/p-Bkh7scMQ.js +2 -0
  126. package/dist/components/{p-DsJW5W3W.js.map → p-Bkh7scMQ.js.map} +1 -1
  127. package/dist/components/{p-B0PEg5RF.js → p-BknXYAEc.js} +2 -2
  128. package/dist/components/{p-C4TgWJi9.js → p-Bu3dOjpW.js} +2 -2
  129. package/dist/components/{p-BVlfQ8xZ.js → p-C-Y7gYgz.js} +2 -2
  130. package/dist/components/p-C-Y7gYgz.js.map +1 -0
  131. package/dist/components/{p-DAqSoyd4.js → p-C6R5Lft0.js} +2 -2
  132. package/dist/components/{p-PD1Vfg0t.js → p-C9gC4haA.js} +2 -2
  133. package/dist/components/{p-BGXqFq2C.js → p-CAnnQL1F.js} +2 -2
  134. package/dist/components/p-CE2IKOsy.js +2 -0
  135. package/dist/components/p-CE2IKOsy.js.map +1 -0
  136. package/dist/components/p-CKVHrOEp.js +2 -0
  137. package/dist/components/{p-DIEK54fV.js.map → p-CKVHrOEp.js.map} +1 -1
  138. package/dist/components/{p-BHz78C8h.js → p-CLVxgTme.js} +2 -2
  139. package/dist/components/p-CY4YFAT3.js +2 -0
  140. package/dist/components/p-CY4YFAT3.js.map +1 -0
  141. package/dist/components/{p-y4jhIkRc.js → p-Cg0kimXZ.js} +2 -2
  142. package/dist/components/p-CqQFowZd.js +2 -0
  143. package/dist/components/p-CqQFowZd.js.map +1 -0
  144. package/dist/components/{p-BhYWdbEp.js → p-CsBICYmt.js} +2 -2
  145. package/dist/components/p-CwjVgUqy.js +2 -0
  146. package/dist/components/p-CwjVgUqy.js.map +1 -0
  147. package/dist/components/{p-BHDkJmrC.js → p-D123Jvp-.js} +2 -2
  148. package/dist/components/p-D1eEgwcP.js +2 -0
  149. package/dist/components/p-D1eEgwcP.js.map +1 -0
  150. package/dist/components/{p-CzcWZiH-.js → p-D3fMaUJ3.js} +2 -2
  151. package/dist/components/p-D7R4yE2C.js +2 -0
  152. package/dist/components/{p-DEjh3klB.js.map → p-D7R4yE2C.js.map} +1 -1
  153. package/dist/components/{p-DZ55e3j9.js → p-D7haeL5y.js} +2 -2
  154. package/dist/components/p-D7haeL5y.js.map +1 -0
  155. package/dist/components/{p-D2z2DgtX.js → p-DAvh38E4.js} +2 -2
  156. package/dist/components/{p-CMFvaY05.js → p-DBue3ISk.js} +2 -2
  157. package/dist/components/{p-rrFMAZkj.js → p-DDgeXGbB.js} +2 -2
  158. package/dist/components/p-DNpLDbWY.js +2 -0
  159. package/dist/components/p-DNpLDbWY.js.map +1 -0
  160. package/dist/components/{p-U8JIZzI2.js → p-DUdOmSFR.js} +2 -2
  161. package/dist/components/p-DUdOmSFR.js.map +1 -0
  162. package/dist/components/p-DtndC9f1.js +2 -0
  163. package/dist/components/p-DtndC9f1.js.map +1 -0
  164. package/dist/components/{p-Be1sY58w.js → p-H5T258T-.js} +2 -2
  165. package/dist/components/p-H5T258T-.js.map +1 -0
  166. package/dist/components/p-HB_cf_aR.js +2 -0
  167. package/dist/components/{p-DNJTN_s0.js.map → p-HB_cf_aR.js.map} +1 -1
  168. package/dist/components/p-LK-jpxwq.js +2 -0
  169. package/dist/components/p-LK-jpxwq.js.map +1 -0
  170. package/dist/components/p-ag6Io-kL.js +2 -0
  171. package/dist/components/p-ag6Io-kL.js.map +1 -0
  172. package/dist/components/p-iMuFgSoM.js +2 -0
  173. package/dist/components/p-iMuFgSoM.js.map +1 -0
  174. package/dist/components/{p-DSIOINBK.js → p-uI6z53BE.js} +2 -2
  175. package/dist/docs/components.json +456 -55
  176. package/dist/lib/components/ButtonFilled/ButtonFilled.d.ts +2 -0
  177. package/dist/lib/components/PanelTools/panel-tools-types.d.ts +14 -2
  178. package/dist/lib/shell/index.d.ts +1 -1
  179. package/dist/lib/shell/index.js +17 -25
  180. package/dist/lib/shell/index.js.map +2 -2
  181. package/dist/lib/shell/shell-responsive.d.ts +6 -1
  182. package/dist/lib/utils/anchored-position.d.ts +8 -2
  183. package/dist/lib/utils/button-render.d.ts +1 -0
  184. package/dist/mcp-data/registry/badge.json +7 -9
  185. package/dist/mcp-data/registry/banner.json +2 -2
  186. package/dist/mcp-data/registry/bar-action.json +2 -2
  187. package/dist/mcp-data/registry/button-filled.json +20 -1
  188. package/dist/mcp-data/registry/button-unfilled.json +23 -3
  189. package/dist/mcp-data/registry/conversation-list.json +2 -2
  190. package/dist/mcp-data/registry/filter-menu.json +22 -7
  191. package/dist/mcp-data/registry/input.json +24 -4
  192. package/dist/mcp-data/registry/menu.json +23 -4
  193. package/dist/mcp-data/registry/message-composer.json +2 -2
  194. package/dist/mcp-data/registry/mobile-bar-nav.json +57 -6
  195. package/dist/mcp-data/registry/pagination.json +5 -4
  196. package/dist/mcp-data/registry/panel-nav.json +1 -1
  197. package/dist/mcp-data/registry/panel-tool-header.json +3 -3
  198. package/dist/mcp-data/registry/panel-tools.json +8 -7
  199. package/dist/mcp-data/registry/registry.json +102 -44
  200. package/dist/mcp-data/registry/select.json +18 -4
  201. package/dist/mcp-data/registry/shell-app.json +7 -6
  202. package/dist/mcp-data/registry/shell-tools.json +4 -4
  203. package/dist/mcp-data/registry/table-filter.json +3 -3
  204. package/dist/mcp-data/registry/table-sort.json +5 -4
  205. package/dist/mcp-data/registry/table-toolbar.json +10 -9
  206. package/dist/mcp-data/registry/table.json +24 -4
  207. package/dist/mcp-data/registry/toast.json +2 -2
  208. package/dist/mcp-data/registry/tooltip.json +20 -3
  209. package/dist/mcp-data/registry/typing-indicator.json +4 -4
  210. package/dist/react/ds-panel-tool-header.d.ts +2 -5
  211. package/dist/react/ds-panel-tools.d.ts +2 -5
  212. package/dist/styles/table.css +30 -10
  213. package/dist/types/components/Badge/Badge.d.ts +2 -16
  214. package/dist/types/components/Banner/Banner.d.ts +0 -1
  215. package/dist/types/components/BarAction/BarAction.d.ts +0 -7
  216. package/dist/types/components/ButtonFilled/ButtonFilled.d.ts +2 -0
  217. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +2 -0
  218. package/dist/types/components/ConversationList/ConversationList.d.ts +1 -0
  219. package/dist/types/components/FilterMenu/FilterMenu.d.ts +5 -5
  220. package/dist/types/components/Input/Input.d.ts +7 -0
  221. package/dist/types/components/Menu/Menu.d.ts +4 -4
  222. package/dist/types/components/MessageComposer/MessageComposer.d.ts +0 -3
  223. package/dist/types/components/MobileBarNav/MobileBarNav.d.ts +4 -0
  224. package/dist/types/components/Pagination/Pagination.d.ts +8 -0
  225. package/dist/types/components/PanelToolHeader/PanelToolHeader.d.ts +2 -5
  226. package/dist/types/components/PanelTools/PanelTools.d.ts +2 -5
  227. package/dist/types/components/PanelTools/panel-tools-types.d.ts +14 -2
  228. package/dist/types/components/Select/Select.d.ts +3 -0
  229. package/dist/types/components/Table/Table.d.ts +2 -13
  230. package/dist/types/components/Table/table-body-renderer.d.ts +36 -0
  231. package/dist/types/components/Table/table-load-view.d.ts +17 -0
  232. package/dist/types/components/Table/table-row-view.d.ts +26 -0
  233. package/dist/types/components/Table/table-skeleton-view.d.ts +12 -0
  234. package/dist/types/components/TableToolbar/TableToolbar.d.ts +5 -0
  235. package/dist/types/components/Tooltip/Tooltip.d.ts +3 -0
  236. package/dist/types/components.d.ts +112 -23
  237. package/dist/types/shell/index.d.ts +1 -1
  238. package/dist/types/shell/shell-responsive.d.ts +6 -1
  239. package/dist/types/utils/anchored-overlay-boundary.d.ts +14 -0
  240. package/dist/types/utils/anchored-overlay-interaction-controller.d.ts +26 -0
  241. package/dist/types/utils/anchored-position-controller.d.ts +14 -0
  242. package/dist/types/utils/anchored-position.d.ts +8 -2
  243. package/dist/types/utils/button-render.d.ts +1 -0
  244. package/dist/types/utils/select-controller.d.ts +1 -0
  245. package/dist/vue/ds-button-filled.js +1 -0
  246. package/dist/vue/ds-button-unfilled.js +1 -0
  247. package/dist/vue/ds-filter-menu.js +1 -0
  248. package/dist/vue/ds-input.js +1 -0
  249. package/dist/vue/ds-menu.js +1 -0
  250. package/dist/vue/ds-mobile-bar-nav.js +3 -0
  251. package/dist/vue/ds-select.js +1 -0
  252. package/dist/vue/ds-tooltip.js +1 -0
  253. package/package.json +4 -1
  254. package/dist/components/p-23u3lIr1.js +0 -2
  255. package/dist/components/p-Asi9h3pa.js +0 -2
  256. package/dist/components/p-Asi9h3pa.js.map +0 -1
  257. package/dist/components/p-BBxcMVqk.js +0 -2
  258. package/dist/components/p-BBxcMVqk.js.map +0 -1
  259. package/dist/components/p-BEvBJ65v.js +0 -2
  260. package/dist/components/p-BEvBJ65v.js.map +0 -1
  261. package/dist/components/p-BFSLT0yc.js +0 -2
  262. package/dist/components/p-BFSLT0yc.js.map +0 -1
  263. package/dist/components/p-BVlfQ8xZ.js.map +0 -1
  264. package/dist/components/p-BX0BMhgz.js +0 -2
  265. package/dist/components/p-BX0BMhgz.js.map +0 -1
  266. package/dist/components/p-Be1sY58w.js.map +0 -1
  267. package/dist/components/p-Bh67XbfB.js +0 -2
  268. package/dist/components/p-Bh67XbfB.js.map +0 -1
  269. package/dist/components/p-CKmfuK7k.js +0 -2
  270. package/dist/components/p-CKmfuK7k.js.map +0 -1
  271. package/dist/components/p-D4K9CE8a.js +0 -2
  272. package/dist/components/p-D4K9CE8a.js.map +0 -1
  273. package/dist/components/p-DEjh3klB.js +0 -2
  274. package/dist/components/p-DIEK54fV.js +0 -2
  275. package/dist/components/p-DNJTN_s0.js +0 -2
  276. package/dist/components/p-DOqnJVos.js +0 -2
  277. package/dist/components/p-DOqnJVos.js.map +0 -1
  278. package/dist/components/p-DZ55e3j9.js.map +0 -1
  279. package/dist/components/p-DhKvqh5G.js +0 -2
  280. package/dist/components/p-DhKvqh5G.js.map +0 -1
  281. package/dist/components/p-Dr4AgJbV.js +0 -2
  282. package/dist/components/p-Dr4AgJbV.js.map +0 -1
  283. package/dist/components/p-DsJW5W3W.js +0 -2
  284. package/dist/components/p-NzGRAPcF.js +0 -2
  285. package/dist/components/p-NzGRAPcF.js.map +0 -1
  286. package/dist/components/p-U8JIZzI2.js.map +0 -1
  287. package/dist/components/p-ZZzC52Ea.js +0 -2
  288. package/dist/components/p-ZZzC52Ea.js.map +0 -1
  289. package/dist/components/p-__lNIImO.js +0 -2
  290. package/dist/components/p-__lNIImO.js.map +0 -1
  291. package/dist/components/p-a6qP60zb.js +0 -2
  292. package/dist/components/p-a6qP60zb.js.map +0 -1
  293. package/dist/types/shell/badge-gradient-ring.d.ts +0 -28
  294. /package/dist/components/{p-C0X2zKbB.js.map → p-1Hu9jlju.js.map} +0 -0
  295. /package/dist/components/{p-DQqOzDEq.js.map → p-B00PEE6t.js.map} +0 -0
  296. /package/dist/components/{p-D1YhYulL.js.map → p-B1JRCDHS.js.map} +0 -0
  297. /package/dist/components/{p-D8Qd6gkf.js.map → p-BCOl1x0_.js.map} +0 -0
  298. /package/dist/components/{p-Dg9qiMDa.js.map → p-BHVOiWz5.js.map} +0 -0
  299. /package/dist/components/{p-DHuyj-9J.js.map → p-BXN-e7vF.js.map} +0 -0
  300. /package/dist/components/{p-Bn8NryHK.js.map → p-B_jZIC9R.js.map} +0 -0
  301. /package/dist/components/{p-7tZx4ukz.js.map → p-Bbb9A3NV.js.map} +0 -0
  302. /package/dist/components/{p-ruPTIV6t.js.map → p-BhYS_Ump.js.map} +0 -0
  303. /package/dist/components/{p-B0PEg5RF.js.map → p-BknXYAEc.js.map} +0 -0
  304. /package/dist/components/{p-C4TgWJi9.js.map → p-Bu3dOjpW.js.map} +0 -0
  305. /package/dist/components/{p-DAqSoyd4.js.map → p-C6R5Lft0.js.map} +0 -0
  306. /package/dist/components/{p-PD1Vfg0t.js.map → p-C9gC4haA.js.map} +0 -0
  307. /package/dist/components/{p-BGXqFq2C.js.map → p-CAnnQL1F.js.map} +0 -0
  308. /package/dist/components/{p-BHz78C8h.js.map → p-CLVxgTme.js.map} +0 -0
  309. /package/dist/components/{p-y4jhIkRc.js.map → p-Cg0kimXZ.js.map} +0 -0
  310. /package/dist/components/{p-BhYWdbEp.js.map → p-CsBICYmt.js.map} +0 -0
  311. /package/dist/components/{p-BHDkJmrC.js.map → p-D123Jvp-.js.map} +0 -0
  312. /package/dist/components/{p-CzcWZiH-.js.map → p-D3fMaUJ3.js.map} +0 -0
  313. /package/dist/components/{p-D2z2DgtX.js.map → p-DAvh38E4.js.map} +0 -0
  314. /package/dist/components/{p-CMFvaY05.js.map → p-DBue3ISk.js.map} +0 -0
  315. /package/dist/components/{p-rrFMAZkj.js.map → p-DDgeXGbB.js.map} +0 -0
  316. /package/dist/components/{p-DSIOINBK.js.map → p-uI6z53BE.js.map} +0 -0
@@ -748,7 +748,7 @@
748
748
  "Badge keeps one brand treatment; semantic severity belongs to another component or adjacent content.",
749
749
  "Use the ring only when Badge overlaps an icon or other content. Disable it in a reserved safe-area slot.",
750
750
  "When enabled, the ring matches the immediate backing surface for both variants. Use a direct ring override only for a component-local fill that no surface preset represents.",
751
- "Enabled shell gradient rings align automatically inside active ShellApp gradient chrome and may be explicitly enabled or disabled when composition requires it."
751
+ "Shell gradient rings follow the inherited ShellApp chrome context automatically; an explicit composition override may force either the gradient or flat ring treatment."
752
752
  ],
753
753
  "responsiveBehavior": [
754
754
  "The owning control or layout positions Badge and decides whether notification indicators remain visible, condense, or move at responsive breakpoints.",
@@ -1838,6 +1838,7 @@
1838
1838
  "Loading prevents duplicate activation without applying inactive opacity or removing the current keyboard focus.",
1839
1839
  "Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width.",
1840
1840
  "Physical press scaling is on by default. Disable it only when an owning composite must keep child or background geometry fixed; hover and pressed interaction washes remain available.",
1841
+ "Visible labels are emphasized by default. Set labelEmphasis to false when a composed surface deliberately needs the button label to match adjacent regular-weight control labels; this does not change the action hierarchy, foreground, icon, or interaction states.",
1841
1842
  "ButtonFilled has no active, pressed, or selected state; a filled action is a command, not a toggle or a persistent selection.",
1842
1843
  "An open popup is a transient pressed state instead. While expanded is true the pressed wash is held for the popup's complete rendered lifecycle and survives hover, so the trigger reads as held open without introducing a selected treatment.",
1843
1844
  "hasMenu supports only the label and icon-label variants. The chevron is what communicates that a menu will open, so an icon-only filled menu button would leave the affordance unstated."
@@ -1924,6 +1925,10 @@
1924
1925
  "type": "string",
1925
1926
  "required": false
1926
1927
  },
1928
+ "labelEmphasis": {
1929
+ "type": "boolean",
1930
+ "required": false
1931
+ },
1927
1932
  "pressScale": {
1928
1933
  "type": "boolean",
1929
1934
  "required": false
@@ -2049,6 +2054,7 @@
2049
2054
  "Loading prevents duplicate activation without applying inactive opacity or removing the current keyboard focus.",
2050
2055
  "Rounded changes only the control radius to the half-radius treatment; it does not change hierarchy, size, variant, or interaction semantics.",
2051
2056
  "Physical press scaling is on by default. Disable it only when an owning composite must keep child or background geometry fixed; hover and pressed interaction washes remain available.",
2057
+ "Visible labels are emphasized by default. Set labelEmphasis to false when a composed surface deliberately needs the button label to match adjacent regular-weight control labels; this does not change active state, foreground, icon, chevron, or interaction fills.",
2052
2058
  "Icon and icon-label loading replace the icon in place. Label-only loading centers the loader while preserving the button's measured width.",
2053
2059
  "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 and no chevron is added.",
2054
2060
  "Because the icon-only shape has no chevron, its glyph must convey the menu on its own. Use Ellipses for a generic more-options or overflow control. Use a specific icon when the menu has a named purpose, such as Table for Customize table.",
@@ -2056,7 +2062,7 @@
2056
2062
  ],
2057
2063
  "responsiveBehavior": [
2058
2064
  "The consuming layout decides when an icon-label action becomes icon-only and must provide an explicit accessible name after changing variants. Table caption Customize is one such layout: below 900px it uses the icon shape while keeping the same neutral resting foreground regardless of the controlled column configuration.",
2059
- "When collapseLabel is set inside a named ds-table container narrower than 900px, an icon-label caption action omits its label and chevron and becomes icon-only while keeping its accessible name. An active control then promotes the icon to primary.",
2065
+ "When collapseLabel is set inside a named ds-table container narrower than 900px, an icon-label caption action omits its label and chevron and becomes icon-only while keeping its accessible name and exposing its label through a hover and keyboard-focus tooltip. An active control then promotes the icon to primary.",
2060
2066
  "Use fill width only when the parent layout requires a full-width secondary action."
2061
2067
  ],
2062
2068
  "frameworkCaveats": {
@@ -2151,6 +2157,10 @@
2151
2157
  "type": "string",
2152
2158
  "required": false
2153
2159
  },
2160
+ "labelEmphasis": {
2161
+ "type": "boolean",
2162
+ "required": false
2163
+ },
2154
2164
  "pressScale": {
2155
2165
  "type": "boolean",
2156
2166
  "required": false
@@ -2207,7 +2217,8 @@
2207
2217
  "badge",
2208
2218
  "icon",
2209
2219
  "loader",
2210
- "text"
2220
+ "text",
2221
+ "tooltip"
2211
2222
  ]
2212
2223
  },
2213
2224
  {
@@ -3935,6 +3946,7 @@
3935
3946
  "The built-in select trigger exposes combobox semantics with a dialog popup, synchronizes expanded state, holds the pressed interaction wash without changing resting foreground while open, and restores focus after dismissal.",
3936
3947
  "The category pane is a vertical tab list. Arrow Up and Arrow Down wrap, Home and End jump, Arrow Right enters the option pane, and Arrow Left returns to the active category.",
3937
3948
  "Escape and outside activation close the popup and restore trigger focus. Tab moves through option controls and closes only when it leaves the popup boundary.",
3949
+ "When an external trigger is inside an open shadow tree, pass its HTMLElement through anchor so outside activation, focus return, and Tab continuation use the composed tree.",
3938
3950
  "The trigger count reports active filter categories. Category counts and the footer report individual selected criteria; none replace visible selected-state indication."
3939
3951
  ],
3940
3952
  "states": [
@@ -3945,10 +3957,10 @@
3945
3957
  "The trigger reports how many filter categories have selections, while the footer appears when values are selected and reports the total selected criteria."
3946
3958
  ],
3947
3959
  "responsiveBehavior": [
3948
- "The popup defaults to the large menu-width token and clamps to the viewport.",
3949
- "When collapseLabel is set inside a named ds-table container narrower than 900px, the trigger omits its label and chevron and becomes icon-only. Active criteria promote the prefix icon to primary.",
3960
+ "The popup defaults to the large menu-width token and clamps to the nearest data-ds-overlay-boundary rectangle or the viewport fallback.",
3961
+ "When collapseLabel is set inside a named ds-table container narrower than 900px, the trigger omits its label and chevron, becomes icon-only, and exposes its label through a hover and keyboard-focus tooltip. Active criteria promote the prefix icon to primary.",
3950
3962
  "Both panes remain visible at narrow widths, with a smaller category minimum and reduced option-pane padding.",
3951
- "Treat side as preferred placement; the popup flips and clamps when viewport collision requires it."
3963
+ "Treat side as preferred placement; the popup flips and clamps when boundary collision requires it. Assign boundary as an HTMLElement only for an explicit override."
3952
3964
  ],
3953
3965
  "frameworkCaveats": {
3954
3966
  "customElements": [
@@ -3997,6 +4009,10 @@
3997
4009
  "type": "string | null",
3998
4010
  "required": false
3999
4011
  },
4012
+ "boundary": {
4013
+ "type": "HTMLElement | undefined",
4014
+ "required": false
4015
+ },
4000
4016
  "categoriesLabel": {
4001
4017
  "type": "string",
4002
4018
  "required": false
@@ -4291,17 +4307,19 @@
4291
4307
  "Choose the native input type that matches the value so browsers and assistive technology can provide appropriate semantics and keyboards.",
4292
4308
  "Error text is associated with the native input and announced as an alert when the invalid state is rendered.",
4293
4309
  "Read-only fields remain focusable and submittable while preventing edits; inactive or disabled fields leave the tab order and are omitted from form submission.",
4310
+ "Number stepper actions are pointer affordances hidden from the accessibility tree; the native spinbutton remains the single keyboard and assistive-technology control.",
4294
4311
  "Suffix content must not carry information that is otherwise absent from the field's visible label, value, or description."
4295
4312
  ],
4296
4313
  "states": [
4297
4314
  "Every size applies one complete control-density recipe across frame height, inline padding, icon zones, text-container inset, gap, and radius; supporting error content follows the shared 4px field flow.",
4298
4315
  "The normal field boundary uses the shared secondary inset border. Focus promotes it to the thicker bold-brand inset stroke, while error uses the thicker bold-negative inset stroke without changing geometry. Set hasBorder to false only in chrome that supplies enough surrounding structure; the control then remains borderless at rest, while focused, and while invalid, with semantics and supporting error copy unchanged.",
4299
- "Placeholder text is secondary at rest and quaternary while the editable field is focused because it becomes decorative once typing begins.",
4316
+ "Placeholder text is secondary at rest and quaternary while the editable field is focused because it becomes decorative once typing begins. Single-line placeholder and entered value text truncate with an ellipsis when the field is narrower than its content.",
4300
4317
  "Entered values use the parent surface's primary foreground; prefix icons, suffix content, and resting placeholder text use its secondary foreground.",
4301
4318
  "Search fields show a standard borderless CrossCircle icon action only while they contain a value. Clearing emits the empty value and restores focus to the native field.",
4302
4319
  "The suffix slot is for compact units or decorations. The optional leading icon is decorative and does not replace the field label.",
4303
4320
  "Use autoComplete, inputMode, and enterKeyHint to provide browser and virtual-keyboard hints without changing the value's semantic type.",
4304
- "Number fields preserve native spinbutton semantics, stepping, and min/max constraint behavior while dsChange continues to report the native string value.",
4321
+ "Number fields preserve native spinbutton semantics, keyboard stepping, and min/max constraint behavior while dsChange continues to report the native string value. Two borderless inset chevron actions split the available inner height, disable independently at their numeric bound, and restore focus to the spinbutton after pointer activation.",
4322
+ "textAlign positions the editable value while the numeric stepper stays on the opposite inline edge, keeping the actions clear of the number: start-aligned values use an inline-end stepper and end-aligned values use an inline-start stepper.",
4305
4323
  "The host exposes focused, filled, dirty, touched, invalid, disabled, read-only, and required data attributes for Field integration and diagnostics.",
4306
4324
  "Use Input only on primary or secondary application backgrounds. It intentionally does not expose alternate surface contexts."
4307
4325
  ],
@@ -4437,6 +4455,10 @@
4437
4455
  "type": "number | undefined",
4438
4456
  "required": false
4439
4457
  },
4458
+ "textAlign": {
4459
+ "type": "InputTextAlign",
4460
+ "required": false
4461
+ },
4440
4462
  "type": {
4441
4463
  "type": "InputType",
4442
4464
  "required": false
@@ -4725,6 +4747,7 @@
4725
4747
  "Switch rows use menuitemcheckbox semantics on the row; the nested ds-switch is an aria-hidden presentation indicator at the same density as the menu.",
4726
4748
  "Single-selection menus use menuitemradio semantics and aria-checked on each row, but render no nested radio control; selected interaction fill and primary foreground provide the visual state.",
4727
4749
  "A swatch-picker section changes the popup to a non-modal dialog so its radio group and ordinary preference buttons keep valid nested semantics; Tab moves between its controls, then leaves and closes at the popup boundary.",
4750
+ "When the anchor is inside an open shadow tree, pass its HTMLElement through anchor. Outside activation, focus return, and forward Tab continuation follow the composed tree across that boundary.",
4728
4751
  "Use notification dots only as supplemental status and not as the sole indication of important information.",
4729
4752
  "Trailing tags are non-interactive supplemental content; their visible label remains part of the menu item's accessible name.",
4730
4753
  "Reorderable rows keep a presentation Drag handle. Pointer drag on the handle and Alt+Arrow Up or Down emit dsReorder without closing. Pointer cancellation abandons the pending move. Hide-locked reorderable rows expose aria-disabled for the unavailable toggle but stay focusable so they can move; fully locked rows stay out of the contiguous reorderable run.",
@@ -4737,6 +4760,7 @@
4737
4760
  "After dsReorder, replace items or the affected section with the emitted items array. Menu never mutates order and does not close.",
4738
4761
  "For selectionMode single, keep exactly one item isSelected and replace the items or sections array after dsSelect; Menu never mutates consumer-owned selection data.",
4739
4762
  "Arrays, objects, and element anchors must be assigned as JavaScript properties.",
4763
+ "anchorId resolves only in the document tree; use the anchor property for a trigger rendered inside a shadow root.",
4740
4764
  "Use a swatch-picker section for a small curated visual preference and apply dsSwatchSelect immediately without closing the popup.",
4741
4765
  "Ordinary rows, section headings, and supporting text consume the Menu size. At xs, both the primary label and supporting text use caption metrics.",
4742
4766
  "A trailing tag resolves one density smaller than its menu row and uses the inset recipe so it nests without changing row height. Do not combine tag, dot, and switch suffixes on one item.",
@@ -4744,8 +4768,11 @@
4744
4768
  ],
4745
4769
  "responsiveBehavior": [
4746
4770
  "Keep the default choice-cell anchor alignment so the first or last interactive row edge aligns with its trigger, matching Select; use popup-frame only for deliberate custom frame geometry.",
4747
- "Treat side as the preferred placement. When the popup cannot fit there and the opposite side offers more room, Menu flips on that main axis before clamping the final position to the viewport.",
4748
- "Avoid fixed widths that exceed narrow viewports."
4771
+ "Treat side as the preferred placement. When the popup cannot fit there and the opposite side offers more room, Menu flips on that main axis before clamping to the nearest data-ds-overlay-boundary rectangle or the viewport fallback.",
4772
+ "Keep the popup attached while its external anchor moves or resizes, including during CSS transitions in responsive shell chrome.",
4773
+ "Cap the popup to the vertical room available on its resolved side. When content is taller, the choice list scrolls internally and keyboard focus scrolls the active row into view.",
4774
+ "Assign boundary as an HTMLElement only when the nearest composed-tree boundary is not the intended collision owner.",
4775
+ "Avoid fixed widths that exceed narrow collision boundaries."
4749
4776
  ],
4750
4777
  "frameworkCaveats": {
4751
4778
  "customElements": [
@@ -4791,6 +4818,10 @@
4791
4818
  "type": "string | undefined",
4792
4819
  "required": false
4793
4820
  },
4821
+ "boundary": {
4822
+ "type": "HTMLElement | undefined",
4823
+ "required": false
4824
+ },
4794
4825
  "initialFocusVisible": {
4795
4826
  "type": "boolean",
4796
4827
  "required": false
@@ -5373,7 +5404,7 @@
5373
5404
  {
5374
5405
  "name": "mobile-bar-nav",
5375
5406
  "title": "MobileBarNav",
5376
- "description": "Persistent mobile shell navigation for Menu, the router-derived current area, Search, Inbox, Messages, and Agents.",
5407
+ "description": "Persistent mobile shell navigation for Menu, the router-derived current area, Search, Activity, Messages, and Agents, with optional Inbox grouping.",
5377
5408
  "type": "registry:ui",
5378
5409
  "meta": {
5379
5410
  "library": "@ds-mo/ui",
@@ -5384,7 +5415,7 @@
5384
5415
  "intent": {
5385
5416
  "audience": "specialized",
5386
5417
  "status": "experimental",
5387
- "summary": "Persistent mobile shell navigation for Menu, the router-derived current area, Search, Inbox, Messages, and Agents.",
5418
+ "summary": "Persistent mobile shell navigation for Menu, the router-derived current area, Search, Activity, Messages, and Agents, with optional Inbox grouping.",
5388
5419
  "useWhen": [
5389
5420
  "ShellApp is rendering its dedicated below-768px application composition."
5390
5421
  ],
@@ -5403,7 +5434,8 @@
5403
5434
  "Only the active destination exposes aria-current; Menu exposes its controlled pane through aria-expanded."
5404
5435
  ],
5405
5436
  "states": [
5406
- "The fixed groups are Menu plus current area, followed by Search, Inbox, Messages, and Agents.",
5437
+ "The fixed groups are Menu plus current area, followed by Search, Activity, Messages, and Agents.",
5438
+ "Consumers that intentionally group multiple review tools can replace the Activity destination with Inbox.",
5407
5439
  "Selection promotes foreground to primary without painting a selected fill; unselected destinations use tertiary foreground.",
5408
5440
  "Opening Mobile Sheet Nav replaces the Menu glyph with Cross while preserving its accessible name.",
5409
5441
  "Reselecting an active destination does not reset its nested state.",
@@ -5426,6 +5458,18 @@
5426
5458
  "type": "MobileDestination",
5427
5459
  "required": false
5428
5460
  },
5461
+ "activityDot": {
5462
+ "type": "boolean",
5463
+ "required": false
5464
+ },
5465
+ "activityLabel": {
5466
+ "type": "string",
5467
+ "required": false
5468
+ },
5469
+ "activityMode": {
5470
+ "type": "'direct' | 'inbox'",
5471
+ "required": false
5472
+ },
5429
5473
  "agentsDot": {
5430
5474
  "type": "boolean",
5431
5475
  "required": false
@@ -6049,7 +6093,7 @@
6049
6093
  ],
6050
6094
  "accessibility": [
6051
6095
  "The component renders a named navigation region, gives its compact page-size noun a complete accessible label, and gives every icon-only boundary control an explicit page action name.",
6052
- "The visible page-size cluster states the localized noun, selected size, and total, for example Rows: 25 of 500. The page position uses compact ‘of’ phrasing, for example 1 of 20. A polite atomic status update retains the complete current range and ‘Page’ phrasing with the localized item noun.",
6096
+ "The visible page-size cluster states the localized noun, selected size, and current-page count of total, for example Rows: [25] 25 of 500. The page position uses compact ‘of’ phrasing, for example 1 of 20. A polite atomic status update retains the complete current range and ‘Page’ phrasing with the localized item noun.",
6053
6097
  "Left and Right Arrow request the adjacent page while focus is within pagination navigation controls. The page-size combobox retains its own arrow-key behavior.",
6054
6098
  "Inactive boundary controls and every control during loading remain non-interactive while retaining their accessible names."
6055
6099
  ],
@@ -6061,7 +6105,8 @@
6061
6105
  "fitToPage appends a Fit to page choice. fitPageSize supplies its effective whole-item capacity; the closed trigger says Fit while the range continues to expose the resulting count. fitToPageInactive keeps that choice visible but unavailable when fitting is not meaningful for the current data shape. Pagination does not measure layouts itself."
6062
6106
  ],
6063
6107
  "responsiveBehavior": [
6064
- "The compact controls remain on one line with noun, selected size, total, a vertical divider, and page position. When inline space is still insufficient, the pagination surface scrolls horizontally rather than wrapping labels away from their controls."
6108
+ "The full-width controls remain on one line with noun, selected size, current-page count of total, a vertical divider, page position, and first, previous, next, and last navigation.",
6109
+ "Inside a ds-table container narrower than 900px, pagination hides the visible current-page count and first/last boundary controls while retaining the page-size noun and selector plus previous, page position, and next. The complete current range remains available to assistive technology."
6065
6110
  ],
6066
6111
  "frameworkCaveats": {
6067
6112
  "customElements": [
@@ -6630,7 +6675,7 @@
6630
6675
  "events": [
6631
6676
  {
6632
6677
  "name": "dsAction",
6633
- "detail": "{ id: string; originalEvent: MouseEvent }"
6678
+ "detail": "PanelToolHeaderActionDetail"
6634
6679
  },
6635
6680
  {
6636
6681
  "name": "dsBack",
@@ -6859,7 +6904,7 @@
6859
6904
  ],
6860
6905
  "accessibility": [
6861
6906
  "Provide localized accessible labels for the rail, shortcut group, and every rendered tool.",
6862
- "Use the canonical default recipe when the product needs Search first and Help last; custom recipes must preserve a deliberate keyboard and visual order.",
6907
+ "Use the canonical default recipe when the product needs Agents pinned first and Help pinned last; custom recipes must preserve a deliberate keyboard and visual order.",
6863
6908
  "Keep focus on the selected rail action when opening a drawer and allow normal Tab navigation into its content.",
6864
6909
  "When the shortcut rail overflows, its labeled body becomes a keyboard-focusable scroll region without changing the rail action order.",
6865
6910
  "Do not trigger global shortcuts while focus is in an editable control.",
@@ -6869,7 +6914,7 @@
6869
6914
  "states": [
6870
6915
  "Every tool has a stable explicit id and accessible label. The application filters definitions for authorization and entitlement.",
6871
6916
  "Tool order, header or footer rail placement, shortcut, and mobile grouping come from explicit item metadata rather than id-based layout assumptions.",
6872
- "PANEL_TOOLS_DEFAULT_ITEMS is the canonical Lab recipe: Search pinned first, Messages before Agents, Help pinned last, current shortcuts, and only Stacks and Activity grouped under mobile Inbox.",
6917
+ "PANEL_TOOLS_DEFAULT_ITEMS is the canonical Lab recipe: Agents pinned first; Messages, Activity, then Search in the body; Help pinned last; Activity directly reachable on mobile; and Stacks omitted.",
6873
6918
  "Only one drawer is open at a time; selecting another tool switches directly and selecting the active tool closes to rail-only mode.",
6874
6919
  "The drawer starts closed, remains open across ordinary route changes, and retains every mounted tool's independent conversation, query, scroll, and work state.",
6875
6920
  "When storageKey is set, persist only the last active tool in this browser and still restore the drawer closed after reload.",
@@ -6884,6 +6929,7 @@
6884
6929
  "If an active optional tool becomes unavailable, PanelTools closes the drawer, clears activeTool, and emits its deselection.",
6885
6930
  "Use isInactive only for a temporarily unavailable visible tool; omit tools the user is not authorized to access.",
6886
6931
  "Rail actions disable physical press scaling so notification-dot halos remain aligned to the shell gradient; hover and pressed washes continue to paint above the dot and halo.",
6932
+ "Rail tooltips are shell-owned and position against the viewport so the narrow tools-lane collision boundary cannot clamp them beyond the viewport edge.",
6887
6933
  "The application owns slotted tool products and data while PanelTools owns rail ordering, drawer selection, open state, motion, and shell events.",
6888
6934
  "Opening and closing clip an already-rendered fixed-width surface. Header and tool content remain fully opaque and retained during width motion; transition completion is accepted only at the measured terminal clip width, after which the closed surface becomes inert and paint-skipped.",
6889
6935
  "Entering and exiting fullscreen snaps without borrowing the drawer open or close animation.",
@@ -6977,7 +7023,7 @@
6977
7023
  },
6978
7024
  {
6979
7025
  "name": "dsHeaderAction",
6980
- "detail": "{\n tool: PanelToolsToolId;\n id: string;\n }"
7026
+ "detail": "PanelToolsHeaderActionDetail"
6981
7027
  },
6982
7028
  {
6983
7029
  "name": "dsHeaderBack",
@@ -7422,8 +7468,8 @@
7422
7468
  ],
7423
7469
  "responsiveBehavior": [
7424
7470
  "Use width fill for form fields and width hug for compact filter bars. Override those defaults only when the owning layout has a clear constraint.",
7425
- "When collapseLabel is set inside a named ds-table container narrower than 900px, the trigger omits its label and chevron and becomes icon-only. A selected value promotes the prefix icon to primary.",
7426
- "The popup matches the trigger minimum width, may grow for content, and clamps to the viewport.",
7471
+ "When collapseLabel is set inside a named ds-table container narrower than 900px, the trigger omits its label and chevron, becomes icon-only, and exposes its label through a hover and keyboard-focus tooltip. A selected value promotes the prefix icon to primary.",
7472
+ "The popup matches the trigger minimum width, may grow for content, and clamps to the nearest data-ds-overlay-boundary rectangle or the viewport fallback. Assign boundary as an HTMLElement only for an explicit override.",
7427
7473
  "Keep popupAlign at start for ordinary fields and filters. Use end when a control sits against a right layout edge and the popup should grow inward.",
7428
7474
  "Long option collections scroll inside the popup; virtualization and remote search are not part of this component."
7429
7475
  ],
@@ -7477,6 +7523,10 @@
7477
7523
  "type": "SelectBackground | undefined",
7478
7524
  "required": false
7479
7525
  },
7526
+ "boundary": {
7527
+ "type": "HTMLElement | undefined",
7528
+ "required": false
7529
+ },
7480
7530
  "clearLabel": {
7481
7531
  "type": "string",
7482
7532
  "required": false
@@ -7704,14 +7754,14 @@
7704
7754
  "Keep the shell-owned routed-content scroller keyboard-focusable while its page landmark retains content semantics. Do not paint a control focus ring around that scroller; it is a layout region, and a page-column outline looks like a selected card.",
7705
7755
  "Keep the managed desktop/tablet and mobile presentations available without conditionally recreating routed or tool content.",
7706
7756
  "Do not override browser keyboard chords when enabling shell shortcuts.",
7707
- "Require Search and Help as the minimum PanelTools actions and provide accessible labels for every tool.",
7757
+ "Require Agents and Help as the minimum pinned PanelTools actions and provide accessible labels for every tool.",
7708
7758
  "Preserve focus and accessible names across navigation, collapse, overflow, and responsive presentation changes."
7709
7759
  ],
7710
7760
  "states": [
7711
7761
  "Render exactly one ShellApp as the workspace root and never nest it.",
7712
7762
  "Managed composition is the standard. Supply navigation, pageChrome, and tools objects plus named tool-view and default page-content slots.",
7713
7763
  "The application router owns the current route, authorization filtering, Dashboard or Settings context, destination collections, section collections, and localized content labels.",
7714
- "ShellApp renders the lower-level desktop, tablet, and mobile chrome, coordinates layout, gradient alignment, transitions, shortcuts, global surfaces, Inbox state, focus restoration, and mobile-stage visibility.",
7764
+ "ShellApp renders the lower-level desktop, tablet, and mobile chrome, coordinates layout, gradient alignment, transitions, shortcuts, global surfaces, optional Inbox state, focus restoration, and mobile-stage visibility.",
7715
7765
  "The application router owns authorization, current URLs, history, and route execution; ShellApp forwards navigation and page intent events without routing.",
7716
7766
  "The application supplies each routed content owner and tool view once. ShellApp changes visibility, inert state, and presentation without recreating those nodes.",
7717
7767
  "The optional banner slot accepts one application-owned ds-banner above the complete shell row. The application owns its open state, orientation for the current shell capacity, action consequences, dismissal persistence, and resolution when several messages compete.",
@@ -7739,6 +7789,7 @@
7739
7789
  "A slotted Banner remains below the top safe-area inset and above routed, navigation, fullscreen-tool, and mobile global-surface presentations.",
7740
7790
  "Mobile global surfaces conceal and inert the routed workspace without unmounting it, preserving nested routes and scroll state.",
7741
7791
  "Keep PanelNav width, BarNav height, PanelTools chrome, and main-content origin stable except during intentional responsive or collapse transitions.",
7792
+ "The routed content cell and tools cell expose separate anchored-overlay collision boundaries, so top-layer menus and tooltips remain above local clipping without crossing into neighboring shell lanes. Full-screen modal overlays remain viewport-owned.",
7742
7793
  "Paper texture chrome is desktop/tablet-only and follows the fixed viewport phase of the shell chrome; mobile remains a solid primary stage.",
7743
7794
  "Managed page-header capacity follows only the fixed shell breakpoint: roomy on desktop and compact on tablet. Opening PanelTools does not compact or constrain BarTitle.",
7744
7795
  "The bottom bar remains visible at all route and tool depths in the foundation release."
@@ -8113,17 +8164,17 @@
8113
8164
  "accessibility": [
8114
8165
  "Only the active mobile tool view participates in focus or the accessibility tree.",
8115
8166
  "Header Back and application-owned header actions preserve the PanelTools event contract.",
8116
- "Mobile Inbox uses a named label-only TabGroup for Stacks and Activity; Messages remains a direct mobile destination."
8167
+ "A direct Activity destination renders its own named tool view; an explicitly grouped Inbox uses a named label-only TabGroup."
8117
8168
  ],
8118
8169
  "states": [
8119
8170
  "The application owns open and activeTool and replaces headers when tool depth changes.",
8120
- "Items with mobileDestination inbox map to one mobile Inbox destination while retaining the actual active tool id; the canonical recipe groups Stacks and Activity, while Messages remains a separate destination.",
8171
+ "Items with mobileDestination inbox map to one mobile Inbox destination while retaining the actual active tool id; the canonical recipe exposes Activity directly and keeps Inbox grouping opt-in.",
8121
8172
  "Stable tool ids own named slots; label, order, rail placement, shortcut, and mobile destination are explicit item data.",
8122
8173
  "Switching responsive mode must not recreate application-owned slotted product elements."
8123
8174
  ],
8124
8175
  "responsiveBehavior": [
8125
8176
  "Desktop and tablet compose PanelTools-compatible rail and drawer chrome.",
8126
- "Mobile renders one centered MobileHeader for every tool; Stacks and Activity use the large segmented Inbox control, while Messages remains a direct tool destination."
8177
+ "Mobile renders one centered MobileHeader for every direct tool; explicitly grouped Inbox tools use the large segmented section control."
8127
8178
  ],
8128
8179
  "frameworkCaveats": {
8129
8180
  "customElements": [
@@ -9079,7 +9130,7 @@
9079
9130
  "pattern:menu-trigger"
9080
9131
  ],
9081
9132
  "accessibility": [
9082
- "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 48px header bar renders as component chrome outside the horizontal scrollport. It defaults to a presentational caption title that does not duplicate the accessible name. Application-owned labeled controls supplied through the single named header slot replace that fallback and occupy the leading content width inside the component-owned 8px inset. When columnCustomizer is enabled, the table adds a trailing Customize control named Customize table. Its label and resting foreground remain neutral when hidden or reordered columns differ from the catalog default. The control is icon-label at typical widths and the icon-only Table menu button below 900px. Otherwise the header slot receives the complete content width.",
9133
+ "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 48px header bar renders as component chrome outside the data scrollport. It defaults to a presentational caption title that does not duplicate the accessible name. Application-owned labeled controls supplied through the single named header slot replace that fallback and share one horizontal caption overflow row with table-owned actions inside the component-owned 8px inset. Table caption buttons keep pressed interaction paint without physically scaling. When columnCustomizer is enabled, the table adds a trailing Customize control named Customize table. Its label uses regular weight and its resting foreground remains neutral when hidden or reordered columns differ from the catalog default. The control is icon-label at typical widths and the icon-only Table menu button below 900px, where a tooltip preserves the Customize label. The always-icon-only table-variant control also exposes its label through a tooltip. Otherwise the header slot receives the complete content width.",
9083
9134
  "The data-mode switcher is the shared Menu of the table's supported infinite, pagination, and virtual modes. It uses an Ellipses trigger. The switcher is the final caption-bar action; when the column customizer is also present, a decorative vertical divider separates the two controls. dataMode remains controlled, and the application responds to change intent by supplying the matching records, pagination state, loading behavior, and query consequences. Escape, dismissal, and selection return focus to the trigger.",
9084
9135
  "The column customizer is the shared Menu of switch rows, not a table-owned dialog. Data columns can be shown, hidden, and reordered. Action columns and the selection checkbox never appear in the menu. The last remaining visible data column cannot be hidden, but it stays focusable so it can still be reordered. Escape and outside click restore focus to the trigger. Persistence stays in the application.",
9085
9136
  "Sorting controls remain buttons inside column headers and expose the table's one controlled member-row sort through aria-sort. ds-table-sort in the toolbar trailing cluster is the matching menu of Data and Direction sections; it emits the same dsSortChange shape so header clicks and menu choices stay in sync. Grouping never adds a second sort indicator or header control; the application supplies groups in its fixed product order. Optional column help underlines the header label with the shared dotted decoration and shows ds-tooltip from that label; it does not add a second header control or replace the column name.",
@@ -9105,7 +9156,7 @@
9105
9156
  ],
9106
9157
  "responsiveBehavior": [
9107
9158
  "The table keeps native semantics at narrow widths and scrolls horizontally instead of transforming into cards.",
9108
- "Inside the named ds-table container, caption Filter, Group, and Sort controls that opt into collapseLabel become icon-only below 900px by omitting their labels and chevrons. Active filtering or grouping promotes the visible icon to primary. Sort keeps resting secondary chrome because its selection lives in the menu and headers. Customize switches to the icon-only Table menu button below 900px and keeps its neutral resting foreground regardless of the controlled column configuration.",
9159
+ "Inside the named ds-table container, caption Search retains its standard maximum width and flexes smaller only when the complete row needs space. Filter, Group, and Sort controls that opt into collapseLabel become icon-only below 900px by omitting their labels and chevrons. Active filtering or grouping promotes the visible icon to primary. Sort keeps resting secondary chrome because its selection lives in the menu and headers. Customize switches to the icon-only Table menu button below 900px and keeps its neutral resting foreground regardless of the controlled column configuration. The caption, frame, and footer remain within the table host at every width. The complete caption row scrolls together only when those compact controls no longer fit, while data columns scroll inside the viewport; table-owned trailing actions never stay pinned over the scrolling toolbar.",
9109
9160
  "stickyHeader follows the active vertical scroll owner: a maxHeight, height, or fitViewport table keeps its native header and group sections inside one bounded table scrollport, while a document-flow table retains a semantic native header and renders a sticky control header whose columns follow the body's native inline scroll timeline. Consumers set --ds-table-sticky-header-offset when page chrome occupies an unbounded document scrollport edge. When the 48px table header bar is visible, it sticks at that external offset and the column header stacks immediately below it.",
9110
9161
  "fitViewport uses viewportInsetBlockStart and viewportInsetBlockEnd to describe compact surrounding chrome and page gutters relative to the nearest vertical scroll owner. Before the table reaches that compact position, its host reserves the eventual height while the visible composition grows and vertical input remains owned by the outer page. Once settled, the internal table viewport becomes the vertical scroll owner. Bounded grouped tables use browser-native sticky section rows inside real block row-group boundaries, so scroll and resize do not run component JavaScript or trigger reactive section swaps. Document-flow tables retain the synchronized visual lane required by their separate horizontal scrollport.",
9111
9162
  "Without maxHeight the table grows the document and automatic lazy loading observes the browser viewport. Horizontal scrolling chains vertical wheel and trackpad movement to the page instead of trapping it.",
@@ -9494,7 +9545,7 @@
9494
9545
  ],
9495
9546
  "accessibility": [
9496
9547
  "The trigger is an icon-label combobox named Filter table unless a product aria-label supplies the table context. Compact caption widths preserve that accessible name after the visible label and chevron are omitted.",
9497
- "The popup retains ds-filter-menu category navigation, option semantics, focus entry, dismissal, and focus return.",
9548
+ "The popup retains ds-filter-menu category navigation, option semantics, focus entry, dismissal, and focus return, and aligns its start edge with the trigger.",
9498
9549
  "Localize label, menuLabel, categoriesLabel, and clearLabel together so visible and accessible wording remains consistent."
9499
9550
  ],
9500
9551
  "states": [
@@ -9504,7 +9555,7 @@
9504
9555
  ],
9505
9556
  "responsiveBehavior": [
9506
9557
  "Place the control in the trailing region of ds-table-toolbar.",
9507
- "Inside a named ds-table container narrower than 900px, the trigger becomes icon-only and active criteria promote the Filters icon to primary."
9558
+ "Inside a named ds-table container narrower than 900px, the trigger becomes icon-only, exposes its visible label through a hover and keyboard-focus tooltip, and active criteria promote the Filters icon to primary."
9508
9559
  ],
9509
9560
  "frameworkCaveats": {
9510
9561
  "customElements": [
@@ -9803,18 +9854,19 @@
9803
9854
  ],
9804
9855
  "accessibility": [
9805
9856
  "The trigger is an icon-label menu button named Sort table unless a product aria-label is supplied. Compact caption widths keep that accessible name after the visible label is omitted.",
9806
- "The menu has two sections, Data and Direction. Each section presents one selected row through isSelected; the menu is not a single radio group because field and direction are independent.",
9857
+ "The start-aligned menu has two sections, Data and Direction. Each section presents one selected row through isSelected; the menu is not a single radio group because field and direction are independent.",
9807
9858
  "Choosing a row applies immediately and keeps the menu open so the other section can be changed. Escape and outside activation close the menu and restore trigger focus."
9808
9859
  ],
9809
9860
  "states": [
9810
9861
  "columns and sort are controlled. dsSortChange reports the next TableSortState and never mutates those inputs. The same sort object is what column headers emit through the table.",
9811
9862
  "Selecting a different data field keeps the current direction, or starts ascending when no sort exists. Selecting a direction applies it to the current field, or to the first sortable field when no sort exists. Selecting the already-active field or direction is a no-op and does not toggle the way a header click does.",
9812
- "The trigger stays Sort in resting secondary chrome. Field and direction selection live in the menu and on column headers, so the trigger never uses active primary emphasis.",
9863
+ "The trigger stays Sort in regular-weight resting secondary chrome. Field and direction selection live in the menu and on column headers, so the trigger never uses active primary emphasis. It keeps pressed interaction paint without physically scaling inside the stable table caption row.",
9813
9864
  "Compound sortable headers contribute one Data row per segment. Action columns never appear."
9814
9865
  ],
9815
9866
  "responsiveBehavior": [
9816
9867
  "Place the control in the trailing region of ds-table-toolbar with Filter and Group.",
9817
- "Inside a named ds-table container narrower than 900px, the trigger omits its label and chevron and becomes icon-only. The icon keeps the resting secondary foreground."
9868
+ "Inside a named ds-table container narrower than 900px, the trigger omits its label and chevron and becomes icon-only. A hover and keyboard-focus tooltip preserves the label, and the icon keeps the resting secondary foreground.",
9869
+ "Long sortable-field catalogs inherit Menu's collision-aware height cap and internal choice scrolling instead of extending beyond the available viewport space."
9818
9870
  ],
9819
9871
  "frameworkCaveats": {
9820
9872
  "customElements": [
@@ -9878,7 +9930,7 @@
9878
9930
  {
9879
9931
  "name": "table-toolbar",
9880
9932
  "title": "TableToolbar",
9881
- "description": "Data-agnostic companion layout for application-owned table caption controls, with a start cluster, optional search, trailing Filter/Group/Sort, and narrow-width horizontal overflow.",
9933
+ "description": "Data-agnostic companion layout for application-owned table caption controls, with a start cluster, optional search, trailing Filter/Sort/Group, and narrow-width horizontal overflow.",
9882
9934
  "type": "registry:ui",
9883
9935
  "meta": {
9884
9936
  "library": "@ds-mo/ui",
@@ -9889,7 +9941,7 @@
9889
9941
  "intent": {
9890
9942
  "audience": "general",
9891
9943
  "status": "stable",
9892
- "summary": "Data-agnostic companion layout for application-owned table caption controls, with a start cluster, optional search, trailing Filter/Group/Sort, and narrow-width horizontal overflow.",
9944
+ "summary": "Data-agnostic companion layout for application-owned table caption controls, with a start cluster, optional search, trailing Filter/Sort/Group, and narrow-width horizontal overflow.",
9893
9945
  "useWhen": [
9894
9946
  "Several table pages repeat the same saved-view cluster, middle discovery and result-shaping controls, and table-owned caption actions.",
9895
9947
  "A ds-table header slot needs consistent control spacing, alignment, grouping, and narrow-width overflow without moving product behavior into the table."
@@ -9912,17 +9964,18 @@
9912
9964
  "patterns": [],
9913
9965
  "accessibility": [
9914
9966
  "The component exposes a named toolbar while each slotted control retains its own accessible name and native keyboard behavior.",
9915
- "Use the start slot for saved views. Use search for the optional discovery field, leading for any additional left-side middle controls, and trailing for Filter, Group, and Sort. Table-owned column customizer and data-mode actions remain in the table caption trailing cluster.",
9967
+ "Use the start slot for saved views. Use search for the optional discovery field, leading for any additional left-side middle controls, and trailing for Filter, Sort, and Group. Table-owned column customizer and data-mode actions remain in the table caption trailing cluster and participate in the same caption overflow row.",
9916
9968
  "Tab order follows authored DOM order. The toolbar does not add roving focus because it may contain heterogeneous form and popup controls."
9917
9969
  ],
9918
9970
  "states": [
9919
9971
  "The component owns layout only. It never mutates slotted control props, values, menus, loading, persistence, or consequences. Use ds-table-saved-views and ds-table-filter when those interactions need the shared CompoMo behavior while application data and persistence remain external.",
9920
- "The start cluster is followed by a decorative vertical divider, then the spanning middle region. The start cluster and divider hide when nothing is projected. Search is a dedicated slot that hides when nothing is projected. Empty leading or trailing clusters add no placeholder chrome. The middle region occupies remaining width so trailing controls stay at its inline end.",
9921
- "Column customizer and data-mode switching stay table-owned caption actions. Do not recreate those menus in the toolbar."
9972
+ "Buttons in the toolbar keep their hover and pressed interaction paint without physically scaling, so pointer feedback does not disturb the stable caption geometry.",
9973
+ "The start cluster is followed by a decorative vertical divider, then Search, optional leading controls, and one trailing action cluster. The start cluster and divider hide when nothing is projected. Search is a dedicated slot that hides when nothing is projected. Empty leading or trailing clusters add no placeholder chrome. Search is the only toolbar region that shrinks; all action controls retain their control geometry and align directly before the table-owned actions.",
9974
+ "Column customizer and data-mode switching stay table-owned caption actions. Do not recreate those menus in the toolbar. When slotted into a table header, the table caption owns overflow for the complete toolbar and table-owned action row."
9922
9975
  ],
9923
9976
  "responsiveBehavior": [
9924
- "The start cluster, search, trailing Filter/Group/Sort, and table caption trailing actions stay on one line. Saved views hug their current trigger content up to the compact menu-width token rather than reserving that full width; long names truncate while the dirty dot stays visible. Filter, Group, and Sort triggers cap at the same token, and Group and Sort popups keep that compact menu-width floor. The toolbar horizontally scrolls when its complete controls no longer fit.",
9925
- "Inside a named ds-table container narrower than 900px, ds-table-filter and ds-table-sort omit their labels and chevrons and become icon-only. Group controls explicitly opt into the same treatment with collapseLabel. Active filtering or grouping promotes the prefix icon to primary. Sort keeps resting secondary chrome. Table-owned Customize also becomes the icon-only Table menu button at that width.",
9977
+ "The start cluster, search, trailing Filter/Sort/Group, and table caption trailing actions stay on one line. Saved views hug their current trigger content up to the compact menu-width token rather than reserving that full width; long names truncate while the dirty dot stays visible. Filter, Sort, and Group triggers cap at the same token, and Sort and Group popups keep that compact menu-width floor. A standalone toolbar owns its horizontal scrolling; inside a table, the complete caption row is the single overflow owner so table-owned actions never remain pinned over scrolling toolbar controls.",
9978
+ "Inside a named ds-table container narrower than 900px, Search retains its standard maximum width and flexes smaller only when the complete row needs space. ds-table-filter and ds-table-sort omit their labels and chevrons, and Group controls explicitly opted into collapseLabel become icon-only; each exposes its label through a hover and keyboard-focus tooltip. Empty leading and trailing slot groups do not add spacing. Active filtering or grouping promotes the prefix icon to primary. Sort keeps resting secondary chrome. Table-owned Customize also becomes the icon-only Table menu button at that width with the same tooltip behavior.",
9926
9979
  "The scrollbar is visually suppressed without removing touch, trackpad, mouse-wheel, or keyboard scrolling from the overflow container.",
9927
9980
  "Trailing controls remain grouped after leading controls; the toolbar does not collapse controls into an application-specific overflow menu."
9928
9981
  ],
@@ -10374,7 +10427,7 @@
10374
10427
  "responsiveBehavior": [
10375
10428
  "The global stack stays at the viewport bottom-end with token-based inset and never exceeds the available viewport width.",
10376
10429
  "Set avoid-mobile-shell-bar when the application uses the persistent shell bottom bar. Below 768px the global stack clears the complete safe-area-aware bar container by 16px; tablet and desktop positioning remain unchanged.",
10377
- "Anchored toasts flip on their placement axis and clamp to viewport padding when the preferred side does not fit.",
10430
+ "Anchored toasts flip on their placement axis and clamp to their anchor's nearest data-ds-overlay-boundary rectangle, falling back to viewport padding when no owner is marked.",
10378
10431
  "The owner does not create separate mobile and desktop managers; one queue preserves ordering across responsive layouts.",
10379
10432
  "Pointer swipe remains optional input. Close and action controls retain keyboard access through the notification region."
10380
10433
  ],
@@ -10529,7 +10582,7 @@
10529
10582
  "Only one tooltip remains active globally; warm handoff removes the previous popup before showing the next.",
10530
10583
  "Disconnecting and reinserting the tooltip host rebinds the current slotted trigger.",
10531
10584
  "A host may present the popup against an external anchor it already owns, without wrapping that trigger or binding hover on it.",
10532
- "The preferred side flips when it cannot fit, then alignment is clamped to viewport padding.",
10585
+ "The preferred side flips when it cannot fit, then alignment is clamped to the nearest data-ds-overlay-boundary rectangle or viewport padding. Assign boundary as an HTMLElement for an explicit owner, or viewport when shell-owned chrome must escape a narrow page or lane boundary.",
10533
10586
  "Reduced motion removes enter and exit fades while retaining the final visible or hidden state."
10534
10587
  ],
10535
10588
  "responsiveBehavior": [
@@ -10542,7 +10595,8 @@
10542
10595
  "Place exactly one trigger element as the component's light-DOM child.",
10543
10596
  "Replacing the slotted trigger rebinds pointer and focus behavior automatically.",
10544
10597
  "A table or similar host can present the popup against an overflowing text node instead of wrapping that node.",
10545
- "sideOffset, alignOffset, and delay accept numbers or TokoMo CSS values."
10598
+ "sideOffset, alignOffset, and delay accept numbers or TokoMo CSS values.",
10599
+ "Use boundary=viewport only for shell-owned chrome whose tooltip intentionally crosses an inner page or lane boundary."
10546
10600
  ],
10547
10601
  "react": [
10548
10602
  "Wrap one focusable trigger with DsTooltip; keep the trigger's aria-label independent from the tooltip label."
@@ -10575,6 +10629,10 @@
10575
10629
  "type": "number | string",
10576
10630
  "required": false
10577
10631
  },
10632
+ "boundary": {
10633
+ "type": "AnchoredOverlayBoundary | undefined",
10634
+ "required": false
10635
+ },
10578
10636
  "delay": {
10579
10637
  "type": "number | string",
10580
10638
  "required": false
@@ -10784,7 +10842,7 @@
10784
10842
  "pattern:conversation"
10785
10843
  ],
10786
10844
  "accessibility": [
10787
- "Provide concise localized status text; the standard label is Typing followed by a three-dot ellipsis.",
10845
+ "Provide concise localized status text; the standard label is Typing followed by a single Unicode ellipsis.",
10788
10846
  "The polite atomic status announces typing without representing it as a message bubble."
10789
10847
  ],
10790
10848
  "states": [