@ds-mo/ui 15.5.1 → 15.7.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 (395) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +372 -25
  4. package/dist/angular/ds-data-preferences.d.ts +1 -1
  5. package/dist/angular/ds-data-preferences.js +3 -3
  6. package/dist/angular/ds-menu.d.ts +7 -1
  7. package/dist/angular/ds-menu.js +5 -2
  8. package/dist/angular/ds-navigation-tab-group.d.ts +15 -0
  9. package/dist/angular/ds-navigation-tab-group.js +42 -0
  10. package/dist/angular/ds-select-toggle.d.ts +15 -0
  11. package/dist/angular/ds-select-toggle.js +42 -0
  12. package/dist/angular/ds-table.d.ts +1 -1
  13. package/dist/angular/ds-table.js +3 -3
  14. package/dist/angular/index.d.ts +1 -1
  15. package/dist/angular/index.js +2 -0
  16. package/dist/angular/proxies.d.ts +2 -0
  17. package/dist/angular/proxies.js +2 -0
  18. package/dist/components/THIRD-PARTY-NOTICES +1 -1
  19. package/dist/components/bundled-dependencies.json +1 -1
  20. package/dist/components/ds-agent-activity.js +1 -1
  21. package/dist/components/ds-agent-questionnaire.js +1 -1
  22. package/dist/components/ds-agent-response.js +1 -1
  23. package/dist/components/ds-agent-source-list.js +1 -1
  24. package/dist/components/ds-agent-tool-call.js +1 -1
  25. package/dist/components/ds-attachment-list.js +1 -1
  26. package/dist/components/ds-badge.js +1 -1
  27. package/dist/components/ds-banner.js +1 -1
  28. package/dist/components/ds-bar-action.js +1 -1
  29. package/dist/components/ds-bar-nav.js +1 -1
  30. package/dist/components/ds-bar-page-title.js +1 -1
  31. package/dist/components/ds-bar-title.js +1 -1
  32. package/dist/components/ds-bar-workflow.js +1 -1
  33. package/dist/components/ds-breadcrumb.js +1 -1
  34. package/dist/components/ds-button-filled.js +1 -1
  35. package/dist/components/ds-button-inverted.js +1 -1
  36. package/dist/components/ds-button-unfilled.js +1 -1
  37. package/dist/components/ds-calendar.js +1 -1
  38. package/dist/components/ds-card-action-center.js +1 -1
  39. package/dist/components/ds-card-chart.js +1 -1
  40. package/dist/components/ds-card-navigation.js +1 -1
  41. package/dist/components/ds-card-overview.js +1 -1
  42. package/dist/components/ds-card-setting.js +1 -1
  43. package/dist/components/ds-card-settings-scope.js +1 -1
  44. package/dist/components/ds-chart-legend.js +1 -1
  45. package/dist/components/ds-chart.js +1 -1
  46. package/dist/components/ds-checkbox-group.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-data-customize.js +1 -1
  54. package/dist/components/ds-data-filter.js +1 -1
  55. package/dist/components/ds-data-group.js +1 -1
  56. package/dist/components/ds-data-preferences.js +1 -1
  57. package/dist/components/ds-data-preferences.js.map +1 -1
  58. package/dist/components/ds-data-saved-views.js +1 -1
  59. package/dist/components/ds-data-search.js +1 -1
  60. package/dist/components/ds-data-search.js.map +1 -1
  61. package/dist/components/ds-data-sort.js +1 -1
  62. package/dist/components/ds-data-toolbar.js +1 -1
  63. package/dist/components/ds-empty-state.js +1 -1
  64. package/dist/components/ds-field.js +1 -1
  65. package/dist/components/ds-filter-menu.js +1 -1
  66. package/dist/components/ds-inline-banner-settings.js +1 -1
  67. package/dist/components/ds-input-date.js +1 -1
  68. package/dist/components/ds-input-time.js +1 -1
  69. package/dist/components/ds-input.js +1 -1
  70. package/dist/components/ds-map-cluster-marker.js +1 -1
  71. package/dist/components/ds-map-entity-marker.js +1 -1
  72. package/dist/components/ds-markdown.js +1 -1
  73. package/dist/components/ds-menu.js +1 -1
  74. package/dist/components/ds-message-actions.js +1 -1
  75. package/dist/components/ds-message-composer.js +1 -1
  76. package/dist/components/ds-message-scroller.js +1 -1
  77. package/dist/components/ds-message.js +1 -1
  78. package/dist/components/ds-mobile-bar-nav.js +1 -1
  79. package/dist/components/ds-mobile-header.js +1 -1
  80. package/dist/components/ds-mobile-section-switcher.js +1 -1
  81. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  82. package/dist/components/ds-modal.js +1 -1
  83. package/dist/components/ds-navigation-tab-group.d.ts +11 -0
  84. package/dist/components/ds-navigation-tab-group.js +2 -0
  85. package/dist/components/ds-navigation-tab-group.js.map +1 -0
  86. package/dist/components/ds-pagination.js +1 -1
  87. package/dist/components/ds-panel-nav.js +1 -1
  88. package/dist/components/ds-panel-sub-nav.js +1 -1
  89. package/dist/components/ds-panel-tool-header.js +1 -1
  90. package/dist/components/ds-panel-tool-search.js +1 -1
  91. package/dist/components/ds-panel-tools.js +1 -1
  92. package/dist/components/ds-paper-texture.js +1 -1
  93. package/dist/components/ds-radio-tile.js +1 -1
  94. package/dist/components/ds-radio.js +1 -1
  95. package/dist/components/ds-score.js +1 -1
  96. package/dist/components/ds-select-toggle.d.ts +11 -0
  97. package/dist/components/ds-select-toggle.js +2 -0
  98. package/dist/components/ds-select-toggle.js.map +1 -0
  99. package/dist/components/ds-select.js +1 -1
  100. package/dist/components/ds-setting-row-checkbox.js +1 -1
  101. package/dist/components/ds-setting-row-radio.js +1 -1
  102. package/dist/components/ds-setting-row-radio.js.map +1 -1
  103. package/dist/components/ds-setting-row-toggle.js +1 -1
  104. package/dist/components/ds-shell-app.js +1 -1
  105. package/dist/components/ds-shell-page.js +1 -1
  106. package/dist/components/ds-shell-tools.js +1 -1
  107. package/dist/components/ds-skeleton.js +1 -1
  108. package/dist/components/ds-slider.js +1 -1
  109. package/dist/components/ds-slider.js.map +1 -1
  110. package/dist/components/ds-swatch-picker.js +1 -1
  111. package/dist/components/ds-switch.js +1 -1
  112. package/dist/components/ds-tab-group.js +1 -1
  113. package/dist/components/ds-table.js +1 -1
  114. package/dist/components/ds-table.js.map +1 -1
  115. package/dist/components/ds-tag.js +1 -1
  116. package/dist/components/ds-text.js +1 -1
  117. package/dist/components/ds-textarea.js +1 -1
  118. package/dist/components/ds-time-picker.js +1 -1
  119. package/dist/components/ds-toast.js +1 -1
  120. package/dist/components/ds-toast.js.map +1 -1
  121. package/dist/components/ds-tooltip-chart.js +1 -1
  122. package/dist/components/ds-tooltip.js +1 -1
  123. package/dist/components/ds-typing-indicator.js +1 -1
  124. package/dist/components/{p--pJyciTI.js → p--_bPiNCd.js} +2 -2
  125. package/dist/components/{p-UJMEz8_O.js → p-3SCy1PHa.js} +2 -2
  126. package/dist/components/{p-7MwoWtTJ.js → p-4sBUSsqs.js} +2 -2
  127. package/dist/components/p-4sBUSsqs.js.map +1 -0
  128. package/dist/components/{p-kwS-vkau.js → p-5aZVNYQz.js} +2 -2
  129. package/dist/components/{p-DKGW3gRa.js → p-AGqUGzNZ.js} +2 -2
  130. package/dist/components/p-BJf49edB.js +2 -0
  131. package/dist/components/p-BJf49edB.js.map +1 -0
  132. package/dist/components/{p-BNarCFJZ.js → p-BKyE025p.js} +2 -2
  133. package/dist/components/{p-S1Ct3FJV.js → p-BNN9KkXe.js} +2 -2
  134. package/dist/components/p-BPDo1eQV.js +2 -0
  135. package/dist/components/p-BPDo1eQV.js.map +1 -0
  136. package/dist/components/{p-CwdRaJER.js → p-BWJb2rih.js} +2 -2
  137. package/dist/components/{p-D8OWhnID.js → p-BbvAWFJA.js} +2 -2
  138. package/dist/components/p-Bdp2V6-c.js +2 -0
  139. package/dist/components/{p-Da3aFRk2.js.map → p-Bdp2V6-c.js.map} +1 -1
  140. package/dist/components/p-BjBFJ2dd.js +2 -0
  141. package/dist/components/{p-C5BBIDVm.js.map → p-BjBFJ2dd.js.map} +1 -1
  142. package/dist/components/{p-BmIllmq2.js → p-BwNW5nqj.js} +2 -2
  143. package/dist/components/{p-CzdE3M3g.js → p-C0L-VnSr.js} +2 -2
  144. package/dist/components/p-C2e7BkNn.js +2 -0
  145. package/dist/components/p-C2e7BkNn.js.map +1 -0
  146. package/dist/components/{p-BnuNaXR2.js → p-C4t7HnfZ.js} +2 -2
  147. package/dist/components/{p-C1ZfBbJ_.js → p-C7_awFtr.js} +2 -2
  148. package/dist/components/p-CCsxoztj.js +2 -0
  149. package/dist/components/{p-BuGlC5r8.js.map → p-CCsxoztj.js.map} +1 -1
  150. package/dist/components/{p-C378wwRj.js → p-CHyxUWqL.js} +2 -2
  151. package/dist/components/{p-d76Ry5nh.js → p-CKSJwSWd.js} +2 -2
  152. package/dist/components/p-CLqqb0Jp.js +2 -0
  153. package/dist/components/{p-CcwxySms.js.map → p-CLqqb0Jp.js.map} +1 -1
  154. package/dist/components/{p-C9H-3JOA.js → p-CRhoeCC8.js} +2 -2
  155. package/dist/components/p-CWc6Blcp.js +2 -0
  156. package/dist/components/{p-B95UP66y.js.map → p-CWc6Blcp.js.map} +1 -1
  157. package/dist/components/p-CXB_T13u.js +2 -0
  158. package/dist/components/{p-CNeDJTGX.js.map → p-CXB_T13u.js.map} +1 -1
  159. package/dist/components/{p-DZLtFn-r.js → p-CgC4SM5b.js} +2 -2
  160. package/dist/components/p-CqAC2IQO.js +2 -0
  161. package/dist/components/{p-5-gQbIIz.js.map → p-CqAC2IQO.js.map} +1 -1
  162. package/dist/components/{p--VQc5GDy.js → p-Cs8Gq-PZ.js} +2 -2
  163. package/dist/components/p-Ct2KQHF4.js +2 -0
  164. package/dist/components/{p-Df9S0aWi.js.map → p-Ct2KQHF4.js.map} +1 -1
  165. package/dist/components/{p-DYsRXun3.js → p-CvIHBa8S.js} +2 -2
  166. package/dist/components/{p-YC7UM4jH.js → p-D1tmszmN.js} +2 -2
  167. package/dist/components/{p-BlbfbYg6.js → p-D62yUMhr.js} +2 -2
  168. package/dist/components/{p-CgQB8Ct5.js → p-D9l0QBgN.js} +2 -2
  169. package/dist/components/{p-Dr5rkAhe.js → p-DGrSro-o.js} +2 -2
  170. package/dist/components/{p-BVxK8ce0.js → p-DKvHBXwn.js} +2 -2
  171. package/dist/components/p-D_xZ5SFL.js +2 -0
  172. package/dist/components/{p-bQE1NZVe.js.map → p-D_xZ5SFL.js.map} +1 -1
  173. package/dist/components/p-DdNJPBCS.js +2 -0
  174. package/dist/components/{p-a-cIN_BX.js.map → p-DdNJPBCS.js.map} +1 -1
  175. package/dist/components/p-DiPqdcD4.js +2 -0
  176. package/dist/components/{p-DPwptvZl.js.map → p-DiPqdcD4.js.map} +1 -1
  177. package/dist/components/p-Dkh_40bl.js +2 -0
  178. package/dist/components/p-Dkh_40bl.js.map +1 -0
  179. package/dist/components/p-DlCLfwP4.js +2 -0
  180. package/dist/components/p-DmgDVoDb.js +2 -0
  181. package/dist/components/{p-CXlklL-0.js.map → p-DmgDVoDb.js.map} +1 -1
  182. package/dist/components/{p-DXL5D30P.js → p-Du8LT8JS.js} +2 -2
  183. package/dist/components/p-DuCfCvPs.js +2 -0
  184. package/dist/components/p-DuCfCvPs.js.map +1 -0
  185. package/dist/components/{p-BuDxlhnQ.js → p-Dyjs8_Cl.js} +2 -2
  186. package/dist/components/{p-BYrBU_U9.js → p-HMDczkQf.js} +2 -2
  187. package/dist/components/p-LJXiEPw1.js +2 -0
  188. package/dist/components/{p-D9_iDlkT.js.map → p-LJXiEPw1.js.map} +1 -1
  189. package/dist/components/{p-CbCN9ew9.js → p-QGtBlTMt.js} +2 -2
  190. package/dist/components/{p-C35Tki38.js → p-UBQ5O7B-.js} +2 -2
  191. package/dist/components/{p-DVsGfz7J.js → p-dSNHIJz6.js} +2 -2
  192. package/dist/components/{p-B9y6azEw.js → p-eKnJNQtL.js} +2 -2
  193. package/dist/components/{p-sDm8BEMy.js → p-g2OUK8Z0.js} +2 -2
  194. package/dist/components/{p-DSmDyI2o.js → p-n_OBbh94.js} +2 -2
  195. package/dist/components/{p-BfVMaZZE.js → p-oBpjD9OA.js} +2 -2
  196. package/dist/components/p-pJ6gbwSa.js +2 -0
  197. package/dist/components/p-pJ6gbwSa.js.map +1 -0
  198. package/dist/components/{p-DfMTDFcE.js → p-v9Nhw5yM.js} +2 -2
  199. package/dist/docs/components.json +1067 -213
  200. package/dist/lint/index.js +1 -1
  201. package/dist/mcp-data/registry/agent-activity.json +1 -1
  202. package/dist/mcp-data/registry/agent-questionnaire.json +1 -1
  203. package/dist/mcp-data/registry/agent-response.json +1 -1
  204. package/dist/mcp-data/registry/agent-source-list.json +1 -1
  205. package/dist/mcp-data/registry/agent-tool-call.json +1 -1
  206. package/dist/mcp-data/registry/attachment-list.json +1 -1
  207. package/dist/mcp-data/registry/avatar.json +1 -1
  208. package/dist/mcp-data/registry/badge.json +1 -1
  209. package/dist/mcp-data/registry/banner.json +1 -1
  210. package/dist/mcp-data/registry/bar-action.json +1 -1
  211. package/dist/mcp-data/registry/bar-nav.json +1 -1
  212. package/dist/mcp-data/registry/bar-page-title.json +1 -1
  213. package/dist/mcp-data/registry/bar-title.json +1 -1
  214. package/dist/mcp-data/registry/bar-workflow.json +1 -1
  215. package/dist/mcp-data/registry/breadcrumb.json +1 -1
  216. package/dist/mcp-data/registry/button-filled.json +1 -1
  217. package/dist/mcp-data/registry/button-inverted.json +1 -1
  218. package/dist/mcp-data/registry/button-unfilled.json +1 -1
  219. package/dist/mcp-data/registry/calendar.json +1 -1
  220. package/dist/mcp-data/registry/card-action-center.json +1 -1
  221. package/dist/mcp-data/registry/card-chart.json +1 -1
  222. package/dist/mcp-data/registry/card-navigation.json +1 -1
  223. package/dist/mcp-data/registry/card-overview.json +1 -1
  224. package/dist/mcp-data/registry/card-setting.json +1 -1
  225. package/dist/mcp-data/registry/card-settings-scope.json +1 -1
  226. package/dist/mcp-data/registry/chart-legend.json +1 -1
  227. package/dist/mcp-data/registry/chart.json +1 -1
  228. package/dist/mcp-data/registry/checkbox-group.json +1 -1
  229. package/dist/mcp-data/registry/checkbox.json +1 -1
  230. package/dist/mcp-data/registry/chip.json +1 -1
  231. package/dist/mcp-data/registry/code-block.json +1 -1
  232. package/dist/mcp-data/registry/conversation-list-item.json +1 -1
  233. package/dist/mcp-data/registry/conversation-list-section.json +1 -1
  234. package/dist/mcp-data/registry/conversation-list.json +1 -1
  235. package/dist/mcp-data/registry/data-customize.json +1 -1
  236. package/dist/mcp-data/registry/data-filter.json +1 -1
  237. package/dist/mcp-data/registry/data-group.json +1 -1
  238. package/dist/mcp-data/registry/data-preferences.json +22 -6
  239. package/dist/mcp-data/registry/data-saved-views.json +1 -1
  240. package/dist/mcp-data/registry/data-search.json +1 -1
  241. package/dist/mcp-data/registry/data-sort.json +1 -1
  242. package/dist/mcp-data/registry/data-toolbar.json +1 -1
  243. package/dist/mcp-data/registry/divider.json +1 -1
  244. package/dist/mcp-data/registry/empty-state.json +1 -1
  245. package/dist/mcp-data/registry/field.json +1 -1
  246. package/dist/mcp-data/registry/filter-menu.json +1 -1
  247. package/dist/mcp-data/registry/icon.json +1 -1
  248. package/dist/mcp-data/registry/inline-banner-settings.json +1 -1
  249. package/dist/mcp-data/registry/input-date.json +1 -1
  250. package/dist/mcp-data/registry/input-time.json +1 -1
  251. package/dist/mcp-data/registry/input.json +1 -1
  252. package/dist/mcp-data/registry/loader.json +1 -1
  253. package/dist/mcp-data/registry/map-cluster-marker.json +1 -1
  254. package/dist/mcp-data/registry/map-entity-marker.json +1 -1
  255. package/dist/mcp-data/registry/markdown.json +1 -1
  256. package/dist/mcp-data/registry/menu.json +31 -12
  257. package/dist/mcp-data/registry/message-actions.json +1 -1
  258. package/dist/mcp-data/registry/message-bubble.json +1 -1
  259. package/dist/mcp-data/registry/message-composer.json +1 -1
  260. package/dist/mcp-data/registry/message-scroller.json +1 -1
  261. package/dist/mcp-data/registry/message.json +1 -1
  262. package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
  263. package/dist/mcp-data/registry/mobile-header.json +1 -1
  264. package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
  265. package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
  266. package/dist/mcp-data/registry/modal.json +1 -1
  267. package/dist/mcp-data/registry/navigation-tab-group.json +279 -0
  268. package/dist/mcp-data/registry/pagination.json +1 -1
  269. package/dist/mcp-data/registry/panel-nav.json +1 -1
  270. package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
  271. package/dist/mcp-data/registry/panel-tool-header.json +1 -1
  272. package/dist/mcp-data/registry/panel-tool-search.json +1 -1
  273. package/dist/mcp-data/registry/panel-tools.json +1 -1
  274. package/dist/mcp-data/registry/paper-texture.json +1 -1
  275. package/dist/mcp-data/registry/radio-tile.json +1 -1
  276. package/dist/mcp-data/registry/radio.json +1 -1
  277. package/dist/mcp-data/registry/registry.json +378 -25
  278. package/dist/mcp-data/registry/score.json +1 -1
  279. package/dist/mcp-data/registry/scroll-overlay.json +1 -1
  280. package/dist/mcp-data/registry/select-toggle.json +351 -0
  281. package/dist/mcp-data/registry/select.json +1 -1
  282. package/dist/mcp-data/registry/setting-row-checkbox.json +1 -1
  283. package/dist/mcp-data/registry/setting-row-radio.json +1 -1
  284. package/dist/mcp-data/registry/setting-row-toggle.json +1 -1
  285. package/dist/mcp-data/registry/shell-app.json +1 -1
  286. package/dist/mcp-data/registry/shell-page.json +1 -1
  287. package/dist/mcp-data/registry/shell-tools.json +1 -1
  288. package/dist/mcp-data/registry/skeleton.json +1 -1
  289. package/dist/mcp-data/registry/slider.json +7 -6
  290. package/dist/mcp-data/registry/swatch-picker.json +1 -1
  291. package/dist/mcp-data/registry/switch.json +3 -3
  292. package/dist/mcp-data/registry/tab-group.json +15 -9
  293. package/dist/mcp-data/registry/table.json +80 -21
  294. package/dist/mcp-data/registry/tag.json +1 -1
  295. package/dist/mcp-data/registry/text.json +1 -1
  296. package/dist/mcp-data/registry/textarea.json +1 -1
  297. package/dist/mcp-data/registry/time-picker.json +1 -1
  298. package/dist/mcp-data/registry/toast.json +1 -1
  299. package/dist/mcp-data/registry/tooltip-chart.json +1 -1
  300. package/dist/mcp-data/registry/tooltip.json +1 -1
  301. package/dist/mcp-data/registry/typing-indicator.json +1 -1
  302. package/dist/react/components.d.ts +2 -0
  303. package/dist/react/components.js +2 -0
  304. package/dist/react/ds-menu.d.ts +2 -1
  305. package/dist/react/ds-menu.js +1 -0
  306. package/dist/react/ds-navigation-tab-group.d.ts +12 -0
  307. package/dist/react/ds-navigation-tab-group.js +12 -0
  308. package/dist/react/ds-select-toggle.d.ts +12 -0
  309. package/dist/react/ds-select-toggle.js +12 -0
  310. package/dist/styles/table.css +41 -0
  311. package/dist/types/components/DataPreferences/DataPreferences.d.ts +3 -0
  312. package/dist/types/components/Menu/Menu.d.ts +5 -1
  313. package/dist/types/components/Menu/menu-types.d.ts +36 -0
  314. package/dist/types/components/NavigationTabGroup/NavigationTabGroup.d.ts +16 -0
  315. package/dist/types/components/SelectToggle/SelectToggle.d.ts +46 -0
  316. package/dist/types/components/Slider/Slider.d.ts +1 -1
  317. package/dist/types/components/TabGroup/TabGroup.d.ts +2 -2
  318. package/dist/types/components/Table/Table.d.ts +14 -2
  319. package/dist/types/components/Table/index.d.ts +1 -1
  320. package/dist/types/components/Table/table-column-customizer.d.ts +23 -4
  321. package/dist/types/components/Table/table-layout-controller.d.ts +2 -1
  322. package/dist/types/components/Table/table-types.d.ts +3 -1
  323. package/dist/types/components.d.ts +279 -21
  324. package/dist/vue/components.d.ts +2 -0
  325. package/dist/vue/components.js +2 -0
  326. package/dist/vue/ds-data-preferences.js +1 -0
  327. package/dist/vue/ds-menu.js +2 -0
  328. package/dist/vue/ds-navigation-tab-group.d.ts +3 -0
  329. package/dist/vue/ds-navigation-tab-group.js +16 -0
  330. package/dist/vue/ds-select-toggle.d.ts +3 -0
  331. package/dist/vue/ds-select-toggle.js +19 -0
  332. package/dist/vue/ds-table.js +3 -0
  333. package/package.json +3 -3
  334. package/dist/components/p-5-gQbIIz.js +0 -2
  335. package/dist/components/p-7MwoWtTJ.js.map +0 -1
  336. package/dist/components/p-B95UP66y.js +0 -2
  337. package/dist/components/p-BLeHHoVb.js +0 -2
  338. package/dist/components/p-BLeHHoVb.js.map +0 -1
  339. package/dist/components/p-Bf-BphXP.js +0 -2
  340. package/dist/components/p-Bf-BphXP.js.map +0 -1
  341. package/dist/components/p-BuGlC5r8.js +0 -2
  342. package/dist/components/p-C5BBIDVm.js +0 -2
  343. package/dist/components/p-CE6MaXBg.js +0 -2
  344. package/dist/components/p-CE6MaXBg.js.map +0 -1
  345. package/dist/components/p-CNeDJTGX.js +0 -2
  346. package/dist/components/p-CXlklL-0.js +0 -2
  347. package/dist/components/p-CcwxySms.js +0 -2
  348. package/dist/components/p-D9_iDlkT.js +0 -2
  349. package/dist/components/p-DPwptvZl.js +0 -2
  350. package/dist/components/p-Da3aFRk2.js +0 -2
  351. package/dist/components/p-Df9S0aWi.js +0 -2
  352. package/dist/components/p-DvGrsLgt.js +0 -2
  353. package/dist/components/p-DvGrsLgt.js.map +0 -1
  354. package/dist/components/p-a-cIN_BX.js +0 -2
  355. package/dist/components/p-aD5cw_m2.js +0 -2
  356. package/dist/components/p-aD5cw_m2.js.map +0 -1
  357. package/dist/components/p-bQE1NZVe.js +0 -2
  358. package/dist/components/p-kDZ0sEII.js +0 -2
  359. package/dist/components/p-t2Ebn8si.js +0 -2
  360. package/dist/components/p-t2Ebn8si.js.map +0 -1
  361. /package/dist/components/{p--pJyciTI.js.map → p--_bPiNCd.js.map} +0 -0
  362. /package/dist/components/{p-UJMEz8_O.js.map → p-3SCy1PHa.js.map} +0 -0
  363. /package/dist/components/{p-kwS-vkau.js.map → p-5aZVNYQz.js.map} +0 -0
  364. /package/dist/components/{p-DKGW3gRa.js.map → p-AGqUGzNZ.js.map} +0 -0
  365. /package/dist/components/{p-BNarCFJZ.js.map → p-BKyE025p.js.map} +0 -0
  366. /package/dist/components/{p-S1Ct3FJV.js.map → p-BNN9KkXe.js.map} +0 -0
  367. /package/dist/components/{p-CwdRaJER.js.map → p-BWJb2rih.js.map} +0 -0
  368. /package/dist/components/{p-D8OWhnID.js.map → p-BbvAWFJA.js.map} +0 -0
  369. /package/dist/components/{p-BmIllmq2.js.map → p-BwNW5nqj.js.map} +0 -0
  370. /package/dist/components/{p-CzdE3M3g.js.map → p-C0L-VnSr.js.map} +0 -0
  371. /package/dist/components/{p-BnuNaXR2.js.map → p-C4t7HnfZ.js.map} +0 -0
  372. /package/dist/components/{p-C1ZfBbJ_.js.map → p-C7_awFtr.js.map} +0 -0
  373. /package/dist/components/{p-C378wwRj.js.map → p-CHyxUWqL.js.map} +0 -0
  374. /package/dist/components/{p-d76Ry5nh.js.map → p-CKSJwSWd.js.map} +0 -0
  375. /package/dist/components/{p-C9H-3JOA.js.map → p-CRhoeCC8.js.map} +0 -0
  376. /package/dist/components/{p-DZLtFn-r.js.map → p-CgC4SM5b.js.map} +0 -0
  377. /package/dist/components/{p--VQc5GDy.js.map → p-Cs8Gq-PZ.js.map} +0 -0
  378. /package/dist/components/{p-DYsRXun3.js.map → p-CvIHBa8S.js.map} +0 -0
  379. /package/dist/components/{p-YC7UM4jH.js.map → p-D1tmszmN.js.map} +0 -0
  380. /package/dist/components/{p-BlbfbYg6.js.map → p-D62yUMhr.js.map} +0 -0
  381. /package/dist/components/{p-CgQB8Ct5.js.map → p-D9l0QBgN.js.map} +0 -0
  382. /package/dist/components/{p-Dr5rkAhe.js.map → p-DGrSro-o.js.map} +0 -0
  383. /package/dist/components/{p-BVxK8ce0.js.map → p-DKvHBXwn.js.map} +0 -0
  384. /package/dist/components/{p-kDZ0sEII.js.map → p-DlCLfwP4.js.map} +0 -0
  385. /package/dist/components/{p-DXL5D30P.js.map → p-Du8LT8JS.js.map} +0 -0
  386. /package/dist/components/{p-BuDxlhnQ.js.map → p-Dyjs8_Cl.js.map} +0 -0
  387. /package/dist/components/{p-BYrBU_U9.js.map → p-HMDczkQf.js.map} +0 -0
  388. /package/dist/components/{p-CbCN9ew9.js.map → p-QGtBlTMt.js.map} +0 -0
  389. /package/dist/components/{p-C35Tki38.js.map → p-UBQ5O7B-.js.map} +0 -0
  390. /package/dist/components/{p-DVsGfz7J.js.map → p-dSNHIJz6.js.map} +0 -0
  391. /package/dist/components/{p-B9y6azEw.js.map → p-eKnJNQtL.js.map} +0 -0
  392. /package/dist/components/{p-sDm8BEMy.js.map → p-g2OUK8Z0.js.map} +0 -0
  393. /package/dist/components/{p-DSmDyI2o.js.map → p-n_OBbh94.js.map} +0 -0
  394. /package/dist/components/{p-BfVMaZZE.js.map → p-oBpjD9OA.js.map} +0 -0
  395. /package/dist/components/{p-DfMTDFcE.js.map → p-v9Nhw5yM.js.map} +0 -0
package/dist/agent.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
3
  "package": "@ds-mo/ui",
4
- "packageVersion": "15.5.1",
4
+ "packageVersion": "15.7.0",
5
5
  "kind": "components",
6
6
  "entries": [
7
7
  {
@@ -5931,9 +5931,9 @@
5931
5931
  "Borderless toolbar compositions omit resting control borders while retaining focus and interaction feedback.",
5932
5932
  "Apply-required filtering stages edits locally, including match mode. Clear immediately clears all filters and discards pending edits. The footer appears when filters are selected or applied; Apply stays in place and inactive without pending changes; applying emits controlled changes. Closing discards unapplied edits.",
5933
5933
  "Embedded presentation delegates its active tab, draft state, Apply, Reset, and dismissal to the owning panel; it renders vertical filter and grouping content without a popup trigger.",
5934
- "Customize builds its catalog from fields. catalogReorderable defaults to true for a table: rows drag to reorder and the last visible entry stays locked. Pass false for a show-and-hide catalog, where rows are switches with no drag handle and every entry may be hidden.",
5934
+ "Customize builds its catalog from fields. catalogReorderable defaults to true for a table: each row independently controls visibility and left-side pinning, pinned and unpinned sections constrain drag reorder to their own partition, and the last visible entry stays locked. Pass false for a show-and-hide catalog, where rows are switches with no drag handle or pin action and every entry may be hidden.",
5935
5935
  "catalogHeader overrides the catalog section header, which otherwise reads Columns whenever customizeOptions supply a second section. customizeLabel names the Customize menu, so a non-table surface can announce Customize view rather than Customize table.",
5936
- "Both catalog modes emit dsFieldsConfigChange with hiddenFieldIds and fieldOrder, so a consumer that never reorders can ignore fieldOrder and keep using hiddenFieldIds."
5936
+ "Both catalog modes emit dsFieldsConfigChange with hiddenFieldIds, fieldOrder, and pinnedFieldIds. Toggle-only catalogs preserve pin state unchanged; table catalogs report pin and partitioned order intent."
5937
5937
  ],
5938
5938
  "accessibility": [
5939
5939
  "An icon-only Preferences trigger opens a named dialog. TabGroup owns section keyboard navigation; Escape and outside activation dismiss, returning focus to the trigger."
@@ -6046,6 +6046,10 @@
6046
6046
  "type": "FilterMenuMatchModes",
6047
6047
  "required": false
6048
6048
  },
6049
+ "pinnedFieldIds": {
6050
+ "type": "string[]",
6051
+ "required": false
6052
+ },
6049
6053
  "sort": {
6050
6054
  "type": "DataSortState | null",
6051
6055
  "required": false
@@ -9151,12 +9155,12 @@
9151
9155
  "tag": "ds-menu",
9152
9156
  "name": "menu",
9153
9157
  "title": "Menu",
9154
- "summary": "Anchored action menu with flat commands, grouped sections, single-selection choices, supplemental notification dots or trailing tags, prefix icons, reorderable rows, switches, and destructive actions.",
9158
+ "summary": "Anchored action menu with flat commands, grouped sections, single-selection choices, supplemental notification dots or trailing tags, prefix icons, reorderable rows, switches, independent trailing actions, separate trailing toggles, and destructive actions.",
9155
9159
  "intentStatus": "complete",
9156
9160
  "intent": {
9157
9161
  "audience": "general",
9158
9162
  "status": "stable",
9159
- "summary": "Anchored action menu with flat commands, grouped sections, single-selection choices, supplemental notification dots or trailing tags, prefix icons, reorderable rows, switches, and destructive actions.",
9163
+ "summary": "Anchored action menu with flat commands, grouped sections, single-selection choices, supplemental notification dots or trailing tags, prefix icons, reorderable rows, switches, independent trailing actions, separate trailing toggles, and destructive actions.",
9160
9164
  "useWhen": [
9161
9165
  "A trigger reveals a short contextual list of commands or state-changing actions.",
9162
9166
  "Actions need grouping, mutually exclusive selected state, supplemental notification dots or trailing tags, prefix icons, reorderable switch or command rows, or destructive treatment."
@@ -9203,7 +9207,9 @@
9203
9207
  "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.",
9204
9208
  "Use notification dots only as supplemental status and not as the sole indication of important information.",
9205
9209
  "Trailing tags are non-interactive supplemental content; their visible label remains part of the menu item's accessible name.",
9206
- "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.",
9210
+ "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. Use reorderHandleInactive to retain quaternary Drag dots without exposing drag interaction when a temporarily fixed row still needs visual alignment.",
9211
+ "A row may append one separately focusable icon toggle after a decorative tertiary divider. The popup uses non-modal dialog semantics for this composite content, the row retains its primary command or visibility toggle, and dsItemToggle reports the requested controlled state without closing the surface.",
9212
+ "A composite row may expose independent trailing icon actions without making its non-actionable row surface appear clickable. Active Drag handles and trailing actions own separate inset hover and pressed feedback. Each action has its own accessible name, does not use aria-pressed, and reports its stable action identity through dsItemToggle without closing the surface.",
9207
9213
  "Announce the new position through a polite live region that is a sibling of the role=menu popup, so the menu retains only permitted descendants."
9208
9214
  ],
9209
9215
  "states": [
@@ -9217,7 +9223,7 @@
9217
9223
  "Use a swatch-picker section for a small curated visual preference and apply dsSwatchSelect immediately without closing the popup.",
9218
9224
  "Ordinary rows, section headings, and supporting text consume the Menu size. At xs, both the primary label and supporting text use caption metrics.",
9219
9225
  "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.",
9220
- "Reorderable rows use the Drag prefix and ignore icon. Prefix and drag-handle icons inherit the choice-popup secondary foreground, matching Select. When any row in a section has an icon or is reorderable, the remaining rows get a spacer so labels align.",
9226
+ "Reorderable rows use the Drag prefix and ignore icon. Active drag handles inherit the choice-popup secondary foreground; inactive drag handles use quaternary foreground. When any row in a section has an icon, an active handle, or an inactive handle, the remaining rows get a spacer so labels align.",
9221
9227
  "Embedded mode renders the same controlled content inside a parent-owned surface; the parent owns positioning, initial focus, Escape, Tab exit, and dismissal."
9222
9228
  ],
9223
9229
  "responsiveBehavior": [
@@ -9231,13 +9237,13 @@
9231
9237
  "frameworkCaveats": {
9232
9238
  "customElements": [
9233
9239
  "Assign items, sections, and HTMLElement anchors as properties after the element is defined.",
9234
- "Handle dsReorder by replacing the items or section items with the emitted items array; Menu never mutates order."
9240
+ "Handle dsReorder by replacing the items or section items with the emitted items array; Menu never mutates order. Handle dsItemToggle by replacing either the controlled trailingToggle state or the requested trailingActions state without changing unrelated row state."
9235
9241
  ],
9236
9242
  "react": [
9237
- "Pass arrays and objects as wrapper props and handle generated onDsSelect, onDsReorder, and onDsClose event props."
9243
+ "Pass arrays and objects as wrapper props and handle generated onDsSelect, onDsItemToggle, onDsReorder, and onDsClose event props."
9238
9244
  ],
9239
9245
  "angular": [
9240
- "Use property bindings for arrays, objects, and anchors and event bindings for dsSelect, dsReorder, and dsClose."
9246
+ "Use property bindings for arrays, objects, and anchors and event bindings for dsSelect, dsItemToggle, dsReorder, and dsClose."
9241
9247
  ]
9242
9248
  },
9243
9249
  "references": [
@@ -9364,6 +9370,10 @@
9364
9370
  "name": "dsClose",
9365
9371
  "detail": "void"
9366
9372
  },
9373
+ {
9374
+ "name": "dsItemToggle",
9375
+ "detail": "MenuItemToggleDetail"
9376
+ },
9367
9377
  {
9368
9378
  "name": "dsReorder",
9369
9379
  "detail": "MenuReorderDetail"
@@ -9392,6 +9402,7 @@
9392
9402
  ],
9393
9403
  "componentDependencies": [
9394
9404
  "badge",
9405
+ "button-unfilled",
9395
9406
  "icon",
9396
9407
  "swatch-picker",
9397
9408
  "switch",
@@ -10752,6 +10763,152 @@
10752
10763
  "tooltip"
10753
10764
  ]
10754
10765
  },
10766
+ {
10767
+ "id": "component:ds-navigation-tab-group",
10768
+ "tag": "ds-navigation-tab-group",
10769
+ "name": "navigation-tab-group",
10770
+ "title": "NavigationTabGroup",
10771
+ "summary": "Outset horizontal tab group for switching adjacent local panels on basic application surfaces.",
10772
+ "intentStatus": "complete",
10773
+ "intent": {
10774
+ "audience": "general",
10775
+ "status": "experimental",
10776
+ "summary": "Outset horizontal tab group for switching adjacent local panels on basic application surfaces.",
10777
+ "useWhen": [
10778
+ "Adjacent local panels need a prominent navigation row with full control-height selected tabs.",
10779
+ "A horizontal tab row has room for an outset shell rather than needing to align beside compact controls."
10780
+ ],
10781
+ "avoidWhen": [
10782
+ "The tab row must sit inline with ordinary controls; use TabGroup's compact segmented presentation instead.",
10783
+ "The row sits on bold, strong, media, inverted, or other specialized surfaces; this treatment is intended for basic application backgrounds.",
10784
+ "The choices navigate application routes rather than switching local panels; use PanelNav or BarNav."
10785
+ ],
10786
+ "alternatives": [
10787
+ {
10788
+ "when": "A compact selector must align beside other controls or support specialized surface contexts.",
10789
+ "component": "component:ds-tab-group",
10790
+ "reason": "TabGroup provides control-height segmented chrome and surface-aware selection."
10791
+ },
10792
+ {
10793
+ "when": "The choices are application destinations rather than local panels.",
10794
+ "component": "component:ds-panel-nav",
10795
+ "reason": "PanelNav owns application navigation semantics and route selection."
10796
+ }
10797
+ ],
10798
+ "commonlyComposedWith": [
10799
+ "component:ds-text",
10800
+ "component:ds-icon"
10801
+ ],
10802
+ "accessibility": [
10803
+ "Provide an accessible name for the delegated tab list with aria-label or aria-labelledby.",
10804
+ "TabGroup owns tab semantics, roving focus, arrow-key selection, and inactive-tab behavior; the navigation wrapper must not create a second tab or event stream.",
10805
+ "Keep the selected local panel synchronized with dsChange and connect each tab to its panel when panels are present."
10806
+ ],
10807
+ "states": [
10808
+ "The parent owns which adjacent panel is visible; user activation updates the mutable selected value and emits dsChange once through the wrapper.",
10809
+ "The selected tab uses the normal control-density height and primary surface with medium elevation inside an outset, padded shell.",
10810
+ "The navigation treatment delegates its tab items, selection, focus, and keyboard behavior to TabGroup rather than maintaining a parallel implementation."
10811
+ ],
10812
+ "responsiveBehavior": [
10813
+ "The group stays on one horizontal row; choose the control density and bounded width to fit the available layout.",
10814
+ "Hug follows content width and fill distributes selectable tabs evenly across a definite parent width."
10815
+ ],
10816
+ "frameworkCaveats": {
10817
+ "customElements": [
10818
+ "Assign tabs as a JavaScript property and keep the selected panel synchronized with dsChange."
10819
+ ],
10820
+ "react": [
10821
+ "Pass tabs as an array through the generated wrapper and handle onDsChange to update the visible panel."
10822
+ ],
10823
+ "vue": [
10824
+ "Use v-model for the selected value and pass tabs as a property-bound array."
10825
+ ],
10826
+ "angular": [
10827
+ "Bind tabs and value as properties and handle dsChange to update the visible panel."
10828
+ ]
10829
+ },
10830
+ "references": [
10831
+ {
10832
+ "label": "Storybook examples",
10833
+ "path": "src/wc/components/NavigationTabGroup/NavigationTabGroup.stories.ts"
10834
+ },
10835
+ {
10836
+ "label": "Rendered behavior and geometry",
10837
+ "path": "tests/e2e/navigation-tab-group.spec.ts"
10838
+ }
10839
+ ],
10840
+ "styling": {
10841
+ "rationale": "The component owns its outset shell and selected-tab treatment through TabGroup's shared tab anatomy; applications own the surrounding basic surface and panel layout.",
10842
+ "protected": [
10843
+ {
10844
+ "properties": [
10845
+ "height",
10846
+ "padding",
10847
+ "gap",
10848
+ "border-radius",
10849
+ "background",
10850
+ "border",
10851
+ "box-shadow"
10852
+ ],
10853
+ "reason": "The shell and selected tab form one density-specific navigation recipe; choose size and width instead of restyling nested tabs.",
10854
+ "props": [
10855
+ "size",
10856
+ "width"
10857
+ ]
10858
+ }
10859
+ ],
10860
+ "customProperties": []
10861
+ }
10862
+ },
10863
+ "api": {
10864
+ "props": {
10865
+ "ariaLabel": {
10866
+ "type": "string | null",
10867
+ "required": false
10868
+ },
10869
+ "ariaLabelledby": {
10870
+ "type": "string | undefined",
10871
+ "required": false
10872
+ },
10873
+ "size": {
10874
+ "type": "TabGroupSize",
10875
+ "required": false
10876
+ },
10877
+ "tabs": {
10878
+ "type": "TabGroupItem[]",
10879
+ "required": false
10880
+ },
10881
+ "value": {
10882
+ "type": "string",
10883
+ "required": false
10884
+ },
10885
+ "width": {
10886
+ "type": "TabGroupWidth",
10887
+ "required": false
10888
+ }
10889
+ },
10890
+ "events": [
10891
+ {
10892
+ "name": "dsChange",
10893
+ "detail": "string"
10894
+ }
10895
+ ],
10896
+ "slots": []
10897
+ },
10898
+ "exports": {
10899
+ "customElement": "ds-navigation-tab-group",
10900
+ "react": "DsNavigationTabGroup",
10901
+ "vue": "DsNavigationTabGroup",
10902
+ "angular": "DsNavigationTabGroup"
10903
+ },
10904
+ "dependencies": [
10905
+ "@ds-mo/ui",
10906
+ "@ds-mo/tokens"
10907
+ ],
10908
+ "componentDependencies": [
10909
+ "tab-group"
10910
+ ]
10911
+ },
10755
10912
  {
10756
10913
  "id": "component:ds-pagination",
10757
10914
  "tag": "ds-pagination",
@@ -13055,6 +13212,170 @@
13055
13212
  "tooltip"
13056
13213
  ]
13057
13214
  },
13215
+ {
13216
+ "id": "component:ds-select-toggle",
13217
+ "tag": "ds-select-toggle",
13218
+ "name": "select-toggle",
13219
+ "title": "SelectToggle",
13220
+ "summary": "Compact cycling choice control with a vertical position indicator.",
13221
+ "intentStatus": "complete",
13222
+ "intent": {
13223
+ "audience": "general",
13224
+ "status": "experimental",
13225
+ "summary": "Compact cycling choice control with a vertical position indicator.",
13226
+ "useWhen": [
13227
+ "Two or three local view modes should cycle through one compact button without opening a popup.",
13228
+ "The current choice should update its label and/or icon while a small vertical dot indicator shows its position."
13229
+ ],
13230
+ "avoidWhen": [
13231
+ "The full choice set must remain visible at once; use TabGroup instead.",
13232
+ "The user must inspect or search more than three options; use Select instead.",
13233
+ "The value must participate in native form submission; this initial component is a local cycling control, not a form-associated select."
13234
+ ],
13235
+ "alternatives": [
13236
+ {
13237
+ "when": "Every choice should be visible and individually selectable.",
13238
+ "component": "component:ds-tab-group",
13239
+ "reason": "TabGroup exposes all choices and owns segmented keyboard selection."
13240
+ },
13241
+ {
13242
+ "when": "The option list exceeds three choices or needs a dropdown.",
13243
+ "component": "component:ds-select",
13244
+ "reason": "Select provides a popup and the complete form-select contract."
13245
+ }
13246
+ ],
13247
+ "commonlyComposedWith": [
13248
+ "component:ds-text",
13249
+ "component:ds-icon"
13250
+ ],
13251
+ "accessibility": [
13252
+ "A single native button owns focus and activation by pointer, Enter, or Space; the dots are decorative and hidden from assistive technology.",
13253
+ "Each option supplies a nonempty label, including icon-only choices. The button name announces the current label, position, and next choice; aria-label adds stable context.",
13254
+ "An inactive button is natively disabled. Do not use aria-pressed because this is a multi-choice cycle, not a binary toggle."
13255
+ ],
13256
+ "states": [
13257
+ "The application supplies exactly two or three uniquely valued options and may set value; invalid values resolve to the first choice without emitting a user-change event.",
13258
+ "Activation advances to the next choice, wraps after the last, updates the mutable value, and emits dsChange once with the next value.",
13259
+ "Variant selects label, icon, or icon-label content; the trailing slot scales with control density and displays the same number of vertical dots as choices.",
13260
+ "Both treatments use transparent unfilled chrome; hasBorder removes only the inset stroke while preserving control geometry."
13261
+ ],
13262
+ "responsiveBehavior": [
13263
+ "Hug follows the current content; fill uses the parent width and truncates a long label without moving the trailing indicator.",
13264
+ "When collapseLabel is enabled in a table caption or data toolbar narrower than 900px, icon-label choices display only the icon while preserving the changing accessible name. Explicit icon and label variants are unchanged.",
13265
+ "Small, medium, and large use shared control-density heights and matching dot-slot geometry."
13266
+ ],
13267
+ "frameworkCaveats": {
13268
+ "customElements": [
13269
+ "Assign options as a JavaScript property and listen for dsChange to observe user cycling."
13270
+ ],
13271
+ "react": [
13272
+ "Pass options as an array and handle onDsChange to observe user cycling."
13273
+ ],
13274
+ "vue": [
13275
+ "Bind options as an array and handle dsChange to update application state."
13276
+ ],
13277
+ "angular": [
13278
+ "Bind options as an array and handle dsChange to update application state."
13279
+ ]
13280
+ },
13281
+ "references": [
13282
+ {
13283
+ "label": "Storybook examples",
13284
+ "path": "src/wc/components/SelectToggle/SelectToggle.stories.ts"
13285
+ },
13286
+ {
13287
+ "label": "Rendered behavior and geometry",
13288
+ "path": "tests/e2e/select-toggle.spec.ts"
13289
+ }
13290
+ ],
13291
+ "styling": {
13292
+ "rationale": "The component owns one density-sized unfilled button, changing choice content, and a fixed trailing position indicator; applications own surrounding layout and the choice data.",
13293
+ "protected": [
13294
+ {
13295
+ "properties": [
13296
+ "height",
13297
+ "padding",
13298
+ "gap",
13299
+ "border-radius",
13300
+ "background",
13301
+ "border",
13302
+ "color"
13303
+ ],
13304
+ "reason": "Control density and the indicator slot stay aligned across the supported variants.",
13305
+ "props": [
13306
+ "size",
13307
+ "variant",
13308
+ "width",
13309
+ "hasBorder"
13310
+ ]
13311
+ }
13312
+ ],
13313
+ "customProperties": []
13314
+ }
13315
+ },
13316
+ "api": {
13317
+ "props": {
13318
+ "ariaLabel": {
13319
+ "type": "string | null",
13320
+ "required": false
13321
+ },
13322
+ "collapseLabel": {
13323
+ "type": "boolean",
13324
+ "required": false
13325
+ },
13326
+ "hasBorder": {
13327
+ "type": "boolean",
13328
+ "required": false
13329
+ },
13330
+ "isInactive": {
13331
+ "type": "boolean",
13332
+ "required": false
13333
+ },
13334
+ "options": {
13335
+ "type": "SelectToggleOption[]",
13336
+ "required": false
13337
+ },
13338
+ "size": {
13339
+ "type": "SelectToggleSize",
13340
+ "required": false
13341
+ },
13342
+ "value": {
13343
+ "type": "string",
13344
+ "required": false
13345
+ },
13346
+ "variant": {
13347
+ "type": "SelectToggleVariant",
13348
+ "required": false
13349
+ },
13350
+ "width": {
13351
+ "type": "ControlWidth",
13352
+ "required": false
13353
+ }
13354
+ },
13355
+ "events": [
13356
+ {
13357
+ "name": "dsChange",
13358
+ "detail": "string"
13359
+ }
13360
+ ],
13361
+ "slots": []
13362
+ },
13363
+ "exports": {
13364
+ "customElement": "ds-select-toggle",
13365
+ "react": "DsSelectToggle",
13366
+ "vue": "DsSelectToggle",
13367
+ "angular": "DsSelectToggle"
13368
+ },
13369
+ "dependencies": [
13370
+ "@ds-mo/ui",
13371
+ "@ds-mo/tokens",
13372
+ "@ds-mo/icons"
13373
+ ],
13374
+ "componentDependencies": [
13375
+ "icon",
13376
+ "text"
13377
+ ]
13378
+ },
13058
13379
  {
13059
13380
  "id": "component:ds-setting-row-checkbox",
13060
13381
  "tag": "ds-setting-row-checkbox",
@@ -14268,7 +14589,8 @@
14268
14589
  "Horizontal Slider fills the width supplied by its parent; the parent chooses an appropriate readable track length.",
14269
14590
  "Vertical Slider owns a token-based default length that may be overridden with --ds-slider-vertical-length in layout-specific compositions.",
14270
14591
  "Use md in ordinary forms and sm or xs only when the surrounding control density uses the same recipe.",
14271
- "Track thickness scales with density. The unfilled track has a neutral border, the filled range uses brand color, and the thumb uses the primary surface with subtle elevation.",
14592
+ "Track thickness scales with density. The half-rounded unfilled track uses a faint-neutral background and tertiary border, and the filled range uses brand color. The round thumb layers a track-sized bold-brand orb with a tertiary inset border over a larger transparent, blurred, medium-elevation circle.",
14593
+ "Edge alignment places the inner orb edge at each full-width rail endpoint while the transparent outer circle overhangs; center alignment places the orb center at inset rail endpoints.",
14272
14594
  "Horizontal value direction is left-to-right; the design system does not author RTL-specific component behavior."
14273
14595
  ],
14274
14596
  "frameworkCaveats": {
@@ -14676,7 +14998,7 @@
14676
14998
  "Activation updates checked immediately and emits dsChange with the new boolean value.",
14677
14999
  "The initial checked value is the form-reset baseline; unchecked switches submit nothing unless uncheckedValue is provided.",
14678
15000
  "Sizes are lg 40×24 with a 16px thumb and 4px body inset, md 32×20 with a 12px thumb and 4px inset, sm 24×16 with a 10px thumb and 3px inset, and xs 20×12 with an 8px thumb and 2px inset.",
14679
- "Unchecked uses a transparent track with a density-specific tertiary-foreground inset stroke and a solid tertiary-foreground thumb without a border. Checked uses a brand track and primary-background thumb with no strokes.",
15001
+ "Unchecked uses a faint-neutral track with a density-specific tertiary-border inset stroke and a primary-background thumb with medium elevation. Checked uses a brand track with the same default tertiary-border inset stroke and elevated primary-background thumb.",
14680
15002
  "Presentation mode removes switch semantics, focus, interaction, and form submission while retaining the checked visual."
14681
15003
  ],
14682
15004
  "responsiveBehavior": [
@@ -14834,6 +15156,7 @@
14834
15156
  "A tab set needs concise labels, icons, or icon-label content with optional supplemental notification dots."
14835
15157
  ],
14836
15158
  "avoidWhen": [
15159
+ "The group needs an outset shell around full-height control-sized tabs for local panel navigation; use NavigationTabGroup instead.",
14837
15160
  "The choices navigate application routes; use PanelNav or BarNav instead.",
14838
15161
  "The choices belong in a vertical panel or card side rail; use PanelSubNav instead.",
14839
15162
  "The choices are temporary commands or contextual options; use Menu instead.",
@@ -14841,6 +15164,11 @@
14841
15164
  "No enabled tab can remain selected while enabled choices exist."
14842
15165
  ],
14843
15166
  "alternatives": [
15167
+ {
15168
+ "when": "Local panel tabs need a roomy navigation shell rather than compact control-height chrome.",
15169
+ "component": "component:ds-navigation-tab-group",
15170
+ "reason": "NavigationTabGroup preserves tab behavior while giving selected tabs the full control-density height and an elevated primary surface."
15171
+ },
14844
15172
  {
14845
15173
  "when": "Local views need persistent vertical side-rail navigation.",
14846
15174
  "component": "component:ds-panel-sub-nav",
@@ -14979,7 +15307,7 @@
14979
15307
  "required": false
14980
15308
  },
14981
15309
  "presentation": {
14982
- "type": "'segmented' | 'tabs'",
15310
+ "type": "'segmented' | 'tabs' | 'navigation'",
14983
15311
  "required": false
14984
15312
  },
14985
15313
  "size": {
@@ -15029,16 +15357,17 @@
15029
15357
  "tag": "ds-table",
15030
15358
  "name": "table",
15031
15359
  "title": "Table",
15032
- "summary": "Semantic, controlled data table with durable visual primitives for cell geometry, wrapping multiple-Tag cells, grouping, sorting, multi-selection, sticky overflow, incremental loading, top-level pagination, and optional row virtualization.",
15360
+ "summary": "Semantic, controlled data table with contained or edge-to-edge chrome, durable visual primitives for cell geometry, wrapping multiple-Tag cells, grouping, sorting, multi-selection, sticky overflow, incremental loading, top-level pagination, and optional row virtualization.",
15033
15361
  "intentStatus": "complete",
15034
15362
  "intent": {
15035
15363
  "audience": "general",
15036
15364
  "status": "stable",
15037
- "summary": "Semantic, controlled data table with durable visual primitives for cell geometry, wrapping multiple-Tag cells, grouping, sorting, multi-selection, sticky overflow, incremental loading, top-level pagination, and optional row virtualization.",
15365
+ "summary": "Semantic, controlled data table with contained or edge-to-edge chrome, durable visual primitives for cell geometry, wrapping multiple-Tag cells, grouping, sorting, multi-selection, sticky overflow, incremental loading, top-level pagination, and optional row virtualization.",
15038
15366
  "useWhen": [
15039
15367
  "A structured dataset needs native row and column relationships, optional one-level grouping, or comparable values across records.",
15040
15368
  "An application needs controlled sorting, loaded-row selection, infinite loading, pagination, virtual row recycling, or opted-in table-owned data-mode and column controls while retaining ownership of the data query, catalog, and persistence.",
15041
- "A product table needs a token-backed recipe whose individual header, group, row, cell, selection, state, and load-more layers remain easy to restyle."
15369
+ "A product table needs a token-backed recipe whose individual header, group, row, cell, selection, state, and load-more layers remain easy to restyle.",
15370
+ "A full-bleed page needs edge-to-edge toolbar and footer surfaces around an inset data frame with a tertiary outer border while other tables retain the contained composition."
15042
15371
  ],
15043
15372
  "avoidWhen": [
15044
15373
  "Content is primarily editorial prose; use semantic product-owned markup with the prose recipe instead.",
@@ -15068,8 +15397,9 @@
15068
15397
  ],
15069
15398
  "accessibility": [
15070
15399
  "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 Customize 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.",
15071
- "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.",
15072
- "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.",
15400
+ "The data-mode switcher is the shared Menu of the table's supported infinite, pagination, and virtual modes. It uses an Ellipses trigger. When the column customizer is also present, a decorative vertical divider separates the two controls. The optional caption-trailing slot follows table-owned caption actions for application-owned presentation controls; the application supplies its own divider when needed. 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.",
15401
+ "When alternateView is enabled, the alternate-view slot replaces the table frame body while the shared caption and footer remain mounted. The application owns the replacement content's accessible name, filtering, and interaction. Do not render a hidden duplicate semantic table behind that content.",
15402
+ "The column customizer is the shared Menu surface of composite preference rows. Data columns can be shown, hidden, left-pinned, and reordered. Visibility and pin state are independent, so hidden pinned columns retain their pin state. A tertiary divider separates the visibility switch from an unbordered Pin toggle. Pinned and unpinned sections constrain drag reorder to their own partition; a single pinned row keeps its drag handle visible but inactive in quaternary foreground. Action columns and the selection checkbox remain system-managed and never appear in the menu. Escape and outside click restore focus to the trigger. Persistence stays in the application.",
15073
15403
  "Sorting controls remain buttons inside column headers and expose the table's one controlled member-row sort through aria-sort. ds-data-sort in the toolbar trailing cluster is the matching menu of Data and Order 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; ds-data-group controls the grouping data point and ascending or descending group-section order while the application supplies the resulting groups. 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.",
15074
15404
  "Selection controls expose checkbox semantics and explicit row names; select-all affects selectable loaded rows only and preserves selected identities outside the loaded window. In virtual mode the supplied in-memory rows are that loaded set, including rows whose DOM is recycled. 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.",
15075
15405
  "Interactive rows are focusable as native rows, activate with Enter or Space, and do not steal activation from their nested selection, action, overflow-menu, or primary-text link controls. When an application-owned details surface navigates between records, scrollRowIntoView reveals the newly associated row with nearest scrolling while preserving focus in that surface. It resolves false when the identity is absent from the supplied, expanded table model so the application can first load data, change its controlled page, or expand its group.",
@@ -15083,9 +15413,9 @@
15083
15413
  "Cell presentation moves the complete content stack for deliberate middle or bottom alignment; the default remains first-track alignment. Semantic highlight borders require an accessible explanation, and flags require labels. Presentation metadata never changes the cell value or the shared text, icon, tag and action track anatomy.",
15084
15414
  "Report merges name ordered row and column identities. Only a complete contiguous non-overlapping rectangle is accepted, and invalid definitions leave original values visible. Selection checkboxes are never merged. Merges cannot cross pin or elastic-spacer boundaries, and grouped or editable grids do not merge. Cross-row merges require non-windowed reports; column-only merges can use virtual rows. Applications recompute spans with their final data order and retain covered values.",
15085
15415
  "Editing has two opt-in ungrouped modes for scalar values. Edit mode keeps normal table semantics and reveals a floating pencil on cell hover or keyboard focus; touch keeps the pencil visible. Grid mode adds per-cell hover/press feedback, keyboard focus and controlled rectangular ranges. Arrows and Home/End skip read-only cells; Shift+click or Shift+arrows extends the range without selecting read-only cells or opening an editor. A single click, Enter, F2 or typing opens the grid editor, while edit mode requires the pencil. Both modes share validation and controlled change events: Enter or Tab proposes a change; Escape or leaving the editor cancels. Tab advances to the next editable cell or pencil. Read-only content is muted without fading dividers, and those cells cannot receive cell selection or hover feedback. Native controls retain their own keyboard behavior. Plain TSV grid paste is bounded and rejected atomically for invalid, disabled, out-of-range or read-only destinations. Applications accept or reject proposed edits, own persistence and domain validation, and replace controlled data. Row checkbox selection remains independent of cell selection.",
15086
- "Columns, rows, groups, grouping, sorting, selected row IDs, collapsed group IDs, highlightTerms, highlightFieldIds, hiddenFieldIds, fieldOrder, dataMode, pagination, displayedCount, totalCount, and incremental-loading state are controlled inputs. Events communicate intent and never mutate those inputs. The optional header is one composable table-local surface: the component owns its 48px chrome, 8px inset on every side, and sticky placement while the application owns the leading slot's internal layout, controls, labels, filtering behavior, and action handling. highlightTerms only marks matching table-owned text and never filters rows, changes query semantics, or highlights Tag labels. highlightFieldIds optionally narrows that marking to matching column IDs or compound header-segment sort keys. Opting into dataModeSwitcher and columnCustomizer adds their trailing Menu triggers and requires caption visibility. When both are present, Customize precedes a decorative divider and the data-mode trigger remains the final action. The Customize trigger keeps one stable label and neutral resting foreground whether or not hiddenFieldIds or fieldOrder differ from the catalog default; the configured state remains visible inside the Menu. The table closes one trailing Menu before opening the other. The footer retains its compact-bar composition: application-owned leading status sits left while a controlled result summary or Pagination aligns right, before any trailing action. Content-sized tables remain natural for sparse or fixed-count results. height bounds the complete header, frame, and footer composition. fitViewport reserves the compact-state composition height in the nearest vertical scrollport while growing the visible table into that reservation as surrounding page chrome collapses.",
15416
+ "Columns, rows, groups, grouping, sorting, selected row IDs, collapsed group IDs, highlightTerms, highlightFieldIds, hiddenFieldIds, fieldOrder, pinnedFieldIds, dataMode, pagination, displayedCount, totalCount, and incremental-loading state are controlled inputs. Events communicate intent and never mutate those inputs. The optional header is one composable table-local surface: the component owns its 48px chrome, 8px inset on every side, and sticky placement while the application owns the leading slot's internal layout, controls, labels, filtering behavior, and action handling. highlightTerms only marks matching table-owned text and never filters rows, changes query semantics, or highlights Tag labels. highlightFieldIds optionally narrows that marking to matching column IDs or compound header-segment sort keys. Opting into dataModeSwitcher and columnCustomizer adds their trailing Menu triggers and requires caption visibility. When both are present, Customize precedes a decorative divider and the data-mode trigger remains the final action. The Customize trigger keeps one stable label and neutral resting foreground whether or not column configuration differs from the catalog default; the configured state remains visible inside the Menu. The table closes one trailing Menu before opening the other. The footer retains its compact-bar composition: application-owned leading status sits left while a controlled result summary or Pagination aligns right, before any trailing action. Content-sized tables remain natural for sparse or fixed-count results. height bounds the complete header, frame, and footer composition. fitViewport reserves the compact-state composition height in the nearest vertical scrollport while growing the visible table into that reservation as surrounding page chrome collapses.",
15087
15417
  "Grouping supports one level. The application supplies groups in a fixed product-defined order and supplies ordered member rows independently. Group section headers show an emphasized text-body-medium label at the start and plain secondary loaded progress at the trailing edge beside the disclosure. A 20px tertiary divider centered on the label track marks the action-column boundary between the count and disclosure. The loaded value comes from the supplied member rows and the total comes from totalCount. A localized countLabel total phrase remains available for the complete assistive progress announcement. Virtual mode shows totals only, for example 166, because there is no loaded window. A collapsed section with no supplied member rows uses that same total-only copy so collapse does not advertise a zero loaded window, including 0 when no total is known. An expanded empty section still shows loaded progress, for example 0 of 166. Optional accessories occupy a second 24px track under the label, middle-dot separated, at most four items. An accessory with help uses the shared dotted underline and a bottom-start ds-tooltip from that copy; explicit line breaks create an unbulleted list. Without accessories the section stays the single-track row height; with accessories it matches a two-track body row, with the checkbox, trailing count, divider, and disclosure kept on the label track. An optional hero accessory sits before the label. The first supported hero is a safety-score fill. Its one-track presentation uses the default ds-score at sm and aligns to the label track on either row height. Setting hero tracks to 2 creates or spans the two-track header, renders the default ds-score at lg, and centers it across the label and accessory tracks. In selectable tables the two-track score starts at the selection-column boundary; selectionMode none omits that lane and uses the regular group-content start inset. A score hero does not use group intent coloring. Hero presentation does not change the 40 or 64 row-height contract beyond the explicitly requested second track. Groups without intent use the secondary background surface. 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. Internal sections keep their separators; a collapsed or empty section header yields its separator only when it is the table's final rendered item. The complete section header is the expand/collapse target and paints hover and press on that viewport-width surface. The section separator stays on the dedicated trailing-edge rule so the interaction wash cannot replace it. Trailing loaded progress sits on the label track beside a visually neutral icon-only ButtonUnfilled. The centered 20px tertiary divider at the action-column boundary separates the count from the 24px md double-inset disclosure. The disclosure keeps its accessible name and does not paint its own hover or press wash, showing ChevronUp while expanded and ChevronDown while collapsed. While any group is 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. With stickyHeader enabled, each contained section uses its one real section row as a native sticky header inside its real row-group boundary. The browser therefore owns pinning, push-off, scrolling, and resize layout in one pass without a duplicated lane, active-section state, transforms, or scroll-time geometry. Shared grid tracks retain exact header and member-cell alignment. The section surface also stays pinned to the visible horizontal scrollport and spans the smaller of the visible viewport or table width. Virtual grouped tables flatten headers and members into that same scrollport; expanding a section never introduces an inner scroller.",
15088
- "When columnCustomizer is false, columns render in catalog order. When it is true, columns remains the catalog: hiddenFieldIds and fieldOrder control visibility and data-column sequence, action columns stay last, cannot be hidden, and remain absent from the customizer Menu, and dsFieldsConfigChange reports the next hidden ids and data-column order without mutating those inputs. The customizer Menu live-applies show/hide and data-column reorder. The table does not persist preferences.",
15418
+ "When columnCustomizer is false, columns render in catalog order. When it is true, columns remains the catalog: hiddenFieldIds, fieldOrder, and pinnedFieldIds control visibility, partitioned data-column sequence, and user-managed sticky-start columns. Fixed sticky columns remain system-managed. User-pinned columns require a resolved fixed width, append to the pinned block when pinned, and become the first unpinned column when released. Action columns stay last, cannot be hidden or user-pinned, and remain absent from the customizer. dsFieldsConfigChange reports all three next values without mutating inputs. The table does not persist preferences.",
15089
15419
  "An active member sort toggles only between ascending and descending; activating a different sortable label moves the one sorting state to that key. Applications may still clear the controlled sort state explicitly. Grouping does not introduce another interactive direction.",
15090
15420
  "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.",
15091
15421
  "Initial loading defaults to ten row-shaped skeletons and preserves row dividers, column dividers, selection lanes, and sticky boundaries. A selectable table renders a checkbox-sized control skeleton in its selection lane so loading geometry matches the real checkbox instead of a generic icon. Each column may declare representative text, multiline text, image, Tag, icon, icon-and-text, action, or intentionally blank loading geometry; the table applies the matching resolved-cell padding and track anatomy so the placeholder row has the same height and rhythm as its data row. Columns without a declaration use one text line, while action columns infer an icon action placeholder. chromeLoading replaces opted-in table-owned caption controls with non-interactive control skeletons in the same slots and at the same dimensions, without changing dataMode or the surrounding caption geometry. Empty and initial error replace only the body with ds-empty-state, using Inbox or ErrorTriangle plus the table heading and body copy. In height-bounded and maxHeight tables that region fills the remaining viewport below the column header; content-sized tables keep a minimum empty-region height. Empty, initial error, load-more, retry, loading-more, and terminal bands remain fixed to the visible table width while data columns scroll horizontally beneath them. Incremental loading retains existing rows and supports automatic sentinel, manual load-more, retry, and terminal states. When grouping is active, each expanded group owns its load band at the end of its member rows; internal group load bands keep their bottom divider, while a terminal group load band yields it to the table edge or footer. The global bottom-of-table loader is not rendered.",
@@ -15103,8 +15433,8 @@
15103
15433
  ],
15104
15434
  "responsiveBehavior": [
15105
15435
  "Editable cells compose the shared borderless controls with cell-owned interaction and focus chrome. Only the active cell mounts a field. Single-select choices complete the edit immediately; multiline fields reserve Enter for a newline and use Ctrl/Command+Enter to commit. Date and time fields keep their picker keyboard behavior and emit canonical scalar values. Drafts stay local until a controlled change is proposed.",
15106
- "Horizontal scrolling is the default. Opted-in cards reuse the same native table in a narrow-container layout: a record is one card with vertically stacked labeled fields, inset separators aligned to the content origin, and space between labels and values. One row-owned interaction surface covers the card. Actions and selection sit together at the top-right, separated by a short divider. The content region owns card gutters and gaps; the toolbar and footer remain separate edge-to-edge surfaces. Page owners remove their outer table inset at the responsive breakpoint. Column headers remain available to assistive technology but are visually hidden and contain no interactive controls in card mode. Row selection and action controls preserve focus across resizing instead of mounting a duplicate mobile tree. Merged reports and grid interaction retain table layout. Card compositions do not use the duplicated document-flow sticky header.",
15107
- "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 Customize 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.",
15436
+ "Horizontal scrolling is the default. Opted-in cards reuse the same native table below the 768px browser viewport breakpoint: a record is one card with vertically stacked labeled fields, inset separators aligned to the content origin, and space between labels and values. A narrow table on a desktop viewport remains a table. One row-owned interaction surface covers the card. Actions and selection sit together at the top-right, separated by a short divider. The content region owns card gutters and gaps; the toolbar and footer remain separate edge-to-edge surfaces. The edge-to-edge chrome layout removes its desktop frame inset and outer border while cards provide their own gutters. Column headers remain available to assistive technology but are visually hidden and contain no interactive controls in card mode. Row selection and action controls preserve focus across resizing instead of mounting a duplicate mobile tree. Merged reports and grid interaction retain table layout. Card compositions do not use the duplicated document-flow sticky header.",
15437
+ "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 Customize menu button below 900px and keeps its neutral resting foreground regardless of the controlled column configuration. Contained chrome is the default. Edge-to-edge chrome keeps the caption and footer flush to the host, gives the footer a tertiary divider painted outside its content box, and places the data frame in a transparent, token-backed 16px inset with a tertiary outer border so the owning page surface remains visible. 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.",
15108
15438
  "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.",
15109
15439
  "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.",
15110
15440
  "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.",
@@ -15115,12 +15445,12 @@
15115
15445
  ],
15116
15446
  "frameworkCaveats": {
15117
15447
  "customElements": [
15118
- "Assign columns, rows, groups, grouping, sort, selectedRowIds, collapsedGroupIds, highlightTerms, highlightFieldIds, hiddenFieldIds, fieldOrder, pagination, displayedCount, and totalCount through JavaScript properties rather than HTML attribute strings.",
15448
+ "Assign columns, rows, groups, grouping, sort, selectedRowIds, collapsedGroupIds, highlightTerms, highlightFieldIds, hiddenFieldIds, fieldOrder, pinnedFieldIds, pagination, displayedCount, and totalCount through JavaScript properties rather than HTML attribute strings.",
15119
15449
  "dataMode=virtual recycles row DOM over the supplied in-memory rows or groups and requires height, maxHeight, or fitViewport. It does not fetch or paginate.",
15120
15450
  "When an action cell supplies items, the table opens one shared ds-menu from the Ellipses trigger; dsCellAction fires for the selected command, not for opening or closing the menu.",
15121
- "When columnCustomizer is enabled, the Table trigger opens the same shared ds-menu of reorderable switch rows; toggling a switch or reordering a row emits dsFieldsConfigChange and does not close the menu.",
15451
+ "When columnCustomizer is enabled, the Table trigger opens the same shared ds-menu of reorderable visibility rows with independent pin toggles; changing visibility, pinning, or partition-local order emits dsFieldsConfigChange and does not close the menu.",
15122
15452
  "Overflowing text tracks present one shared ds-tooltip with the omitted value. Unlimited wrapping tracks and disabled rows never show it. The tooltip is not linked with aria-describedby because the full string remains in the cell.",
15123
- "Replace controlled property values in response to dsSortChange, dsGroupCollapseChange, dsSelectionChange, dsLoadMore, dsGroupLoadMore, dsPaginationChange, and dsFieldsConfigChange; route dsRowActivate in the application owner. When columnCustomizer is enabled, keep columns as the full catalog and replace hiddenFieldIds and fieldOrder from that event."
15453
+ "Replace controlled property values in response to dsSortChange, dsGroupCollapseChange, dsSelectionChange, dsLoadMore, dsGroupLoadMore, dsPaginationChange, and dsFieldsConfigChange; route dsRowActivate in the application owner. When columnCustomizer is enabled, keep columns as the full catalog and replace hiddenFieldIds, fieldOrder, and pinnedFieldIds from that event."
15124
15454
  ],
15125
15455
  "react": [
15126
15456
  "Pass new array and state-object references when the controlled data or query state changes.",
@@ -15193,6 +15523,11 @@
15193
15523
  "source": "src/wc/styles/table.css",
15194
15524
  "reason": "Public table recipe customization; preserve semantic table and scroll behavior."
15195
15525
  },
15526
+ {
15527
+ "name": "--ds-table-frame-inset",
15528
+ "source": "src/wc/styles/table.css",
15529
+ "reason": "Controls the data-frame inset in the edge-to-edge chrome layout."
15530
+ },
15196
15531
  {
15197
15532
  "name": "--ds-table-inline-scroll-max-offset",
15198
15533
  "source": "src/wc/styles/table.css",
@@ -15253,6 +15588,10 @@
15253
15588
  },
15254
15589
  "api": {
15255
15590
  "props": {
15591
+ "alternateView": {
15592
+ "type": "boolean",
15593
+ "required": false
15594
+ },
15256
15595
  "caption": {
15257
15596
  "type": "string",
15258
15597
  "required": true
@@ -15273,6 +15612,10 @@
15273
15612
  "type": "TableCellSpan[]",
15274
15613
  "required": false
15275
15614
  },
15615
+ "chromeLayout": {
15616
+ "type": "TableChromeLayout",
15617
+ "required": false
15618
+ },
15276
15619
  "chromeLoading": {
15277
15620
  "type": "boolean",
15278
15621
  "required": false
@@ -15457,6 +15800,10 @@
15457
15800
  "type": "string",
15458
15801
  "required": false
15459
15802
  },
15803
+ "pinnedFieldIds": {
15804
+ "type": "string[]",
15805
+ "required": false
15806
+ },
15460
15807
  "responsiveLayout": {
15461
15808
  "type": "'scroll' | 'cards'",
15462
15809
  "required": false