@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
@@ -12,7 +12,7 @@
12
12
  "themeSetup": "Set data-theme=\"dark\" on <html> for dark mode. Light is default.",
13
13
  "peerDependencies": {
14
14
  "required": [
15
- "@ds-mo/tokens ^6.6.1",
15
+ "@ds-mo/tokens ^6.7.0",
16
16
  "@ds-mo/icons ^8.1.1"
17
17
  ],
18
18
  "optional": [],
@@ -6062,9 +6062,9 @@
6062
6062
  "Borderless toolbar compositions omit resting control borders while retaining focus and interaction feedback.",
6063
6063
  "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.",
6064
6064
  "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.",
6065
- "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.",
6065
+ "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.",
6066
6066
  "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.",
6067
- "Both catalog modes emit dsFieldsConfigChange with hiddenFieldIds and fieldOrder, so a consumer that never reorders can ignore fieldOrder and keep using hiddenFieldIds."
6067
+ "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."
6068
6068
  ],
6069
6069
  "accessibility": [
6070
6070
  "An icon-only Preferences trigger opens a named dialog. TabGroup owns section keyboard navigation; Escape and outside activation dismiss, returning focus to the trigger."
@@ -6176,6 +6176,10 @@
6176
6176
  "type": "FilterMenuMatchModes",
6177
6177
  "required": false
6178
6178
  },
6179
+ "pinnedFieldIds": {
6180
+ "type": "string[]",
6181
+ "required": false
6182
+ },
6179
6183
  "sort": {
6180
6184
  "type": "DataSortState | null",
6181
6185
  "required": false
@@ -9330,7 +9334,7 @@
9330
9334
  {
9331
9335
  "name": "menu",
9332
9336
  "title": "Menu",
9333
- "description": "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.",
9337
+ "description": "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.",
9334
9338
  "type": "registry:ui",
9335
9339
  "meta": {
9336
9340
  "library": "@ds-mo/ui",
@@ -9341,7 +9345,7 @@
9341
9345
  "intent": {
9342
9346
  "audience": "general",
9343
9347
  "status": "stable",
9344
- "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.",
9348
+ "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.",
9345
9349
  "useWhen": [
9346
9350
  "A trigger reveals a short contextual list of commands or state-changing actions.",
9347
9351
  "Actions need grouping, mutually exclusive selected state, supplemental notification dots or trailing tags, prefix icons, reorderable switch or command rows, or destructive treatment."
@@ -9388,7 +9392,9 @@
9388
9392
  "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.",
9389
9393
  "Use notification dots only as supplemental status and not as the sole indication of important information.",
9390
9394
  "Trailing tags are non-interactive supplemental content; their visible label remains part of the menu item's accessible name.",
9391
- "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.",
9395
+ "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.",
9396
+ "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.",
9397
+ "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.",
9392
9398
  "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."
9393
9399
  ],
9394
9400
  "states": [
@@ -9402,7 +9408,7 @@
9402
9408
  "Use a swatch-picker section for a small curated visual preference and apply dsSwatchSelect immediately without closing the popup.",
9403
9409
  "Ordinary rows, section headings, and supporting text consume the Menu size. At xs, both the primary label and supporting text use caption metrics.",
9404
9410
  "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.",
9405
- "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.",
9411
+ "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.",
9406
9412
  "Embedded mode renders the same controlled content inside a parent-owned surface; the parent owns positioning, initial focus, Escape, Tab exit, and dismissal."
9407
9413
  ],
9408
9414
  "responsiveBehavior": [
@@ -9416,13 +9422,13 @@
9416
9422
  "frameworkCaveats": {
9417
9423
  "customElements": [
9418
9424
  "Assign items, sections, and HTMLElement anchors as properties after the element is defined.",
9419
- "Handle dsReorder by replacing the items or section items with the emitted items array; Menu never mutates order."
9425
+ "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."
9420
9426
  ],
9421
9427
  "react": [
9422
- "Pass arrays and objects as wrapper props and handle generated onDsSelect, onDsReorder, and onDsClose event props."
9428
+ "Pass arrays and objects as wrapper props and handle generated onDsSelect, onDsItemToggle, onDsReorder, and onDsClose event props."
9423
9429
  ],
9424
9430
  "angular": [
9425
- "Use property bindings for arrays, objects, and anchors and event bindings for dsSelect, dsReorder, and dsClose."
9431
+ "Use property bindings for arrays, objects, and anchors and event bindings for dsSelect, dsItemToggle, dsReorder, and dsClose."
9426
9432
  ]
9427
9433
  },
9428
9434
  "references": [
@@ -9548,6 +9554,10 @@
9548
9554
  "name": "dsClose",
9549
9555
  "detail": "void"
9550
9556
  },
9557
+ {
9558
+ "name": "dsItemToggle",
9559
+ "detail": "MenuItemToggleDetail"
9560
+ },
9551
9561
  {
9552
9562
  "name": "dsReorder",
9553
9563
  "detail": "MenuReorderDetail"
@@ -9576,6 +9586,7 @@
9576
9586
  ],
9577
9587
  "registryDependencies": [
9578
9588
  "badge",
9589
+ "button-unfilled",
9579
9590
  "icon",
9580
9591
  "swatch-picker",
9581
9592
  "switch",
@@ -10966,6 +10977,155 @@
10966
10977
  "tooltip"
10967
10978
  ]
10968
10979
  },
10980
+ {
10981
+ "name": "navigation-tab-group",
10982
+ "title": "NavigationTabGroup",
10983
+ "description": "Outset horizontal tab group for switching adjacent local panels on basic application surfaces.",
10984
+ "type": "registry:ui",
10985
+ "meta": {
10986
+ "library": "@ds-mo/ui",
10987
+ "distribution": "npm",
10988
+ "storybook": "https://zainadeel.github.io/compomo/?path=/story/navigation-tab-group",
10989
+ "source": "src/wc/components/NavigationTabGroup/NavigationTabGroup.tsx",
10990
+ "intentStatus": "complete",
10991
+ "intent": {
10992
+ "audience": "general",
10993
+ "status": "experimental",
10994
+ "summary": "Outset horizontal tab group for switching adjacent local panels on basic application surfaces.",
10995
+ "useWhen": [
10996
+ "Adjacent local panels need a prominent navigation row with full control-height selected tabs.",
10997
+ "A horizontal tab row has room for an outset shell rather than needing to align beside compact controls."
10998
+ ],
10999
+ "avoidWhen": [
11000
+ "The tab row must sit inline with ordinary controls; use TabGroup's compact segmented presentation instead.",
11001
+ "The row sits on bold, strong, media, inverted, or other specialized surfaces; this treatment is intended for basic application backgrounds.",
11002
+ "The choices navigate application routes rather than switching local panels; use PanelNav or BarNav."
11003
+ ],
11004
+ "alternatives": [
11005
+ {
11006
+ "when": "A compact selector must align beside other controls or support specialized surface contexts.",
11007
+ "component": "component:ds-tab-group",
11008
+ "reason": "TabGroup provides control-height segmented chrome and surface-aware selection."
11009
+ },
11010
+ {
11011
+ "when": "The choices are application destinations rather than local panels.",
11012
+ "component": "component:ds-panel-nav",
11013
+ "reason": "PanelNav owns application navigation semantics and route selection."
11014
+ }
11015
+ ],
11016
+ "commonlyComposedWith": [
11017
+ "component:ds-text",
11018
+ "component:ds-icon"
11019
+ ],
11020
+ "accessibility": [
11021
+ "Provide an accessible name for the delegated tab list with aria-label or aria-labelledby.",
11022
+ "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.",
11023
+ "Keep the selected local panel synchronized with dsChange and connect each tab to its panel when panels are present."
11024
+ ],
11025
+ "states": [
11026
+ "The parent owns which adjacent panel is visible; user activation updates the mutable selected value and emits dsChange once through the wrapper.",
11027
+ "The selected tab uses the normal control-density height and primary surface with medium elevation inside an outset, padded shell.",
11028
+ "The navigation treatment delegates its tab items, selection, focus, and keyboard behavior to TabGroup rather than maintaining a parallel implementation."
11029
+ ],
11030
+ "responsiveBehavior": [
11031
+ "The group stays on one horizontal row; choose the control density and bounded width to fit the available layout.",
11032
+ "Hug follows content width and fill distributes selectable tabs evenly across a definite parent width."
11033
+ ],
11034
+ "frameworkCaveats": {
11035
+ "customElements": [
11036
+ "Assign tabs as a JavaScript property and keep the selected panel synchronized with dsChange."
11037
+ ],
11038
+ "react": [
11039
+ "Pass tabs as an array through the generated wrapper and handle onDsChange to update the visible panel."
11040
+ ],
11041
+ "vue": [
11042
+ "Use v-model for the selected value and pass tabs as a property-bound array."
11043
+ ],
11044
+ "angular": [
11045
+ "Bind tabs and value as properties and handle dsChange to update the visible panel."
11046
+ ]
11047
+ },
11048
+ "references": [
11049
+ {
11050
+ "label": "Storybook examples",
11051
+ "path": "src/wc/components/NavigationTabGroup/NavigationTabGroup.stories.ts"
11052
+ },
11053
+ {
11054
+ "label": "Rendered behavior and geometry",
11055
+ "path": "tests/e2e/navigation-tab-group.spec.ts"
11056
+ }
11057
+ ],
11058
+ "styling": {
11059
+ "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.",
11060
+ "protected": [
11061
+ {
11062
+ "properties": [
11063
+ "height",
11064
+ "padding",
11065
+ "gap",
11066
+ "border-radius",
11067
+ "background",
11068
+ "border",
11069
+ "box-shadow"
11070
+ ],
11071
+ "reason": "The shell and selected tab form one density-specific navigation recipe; choose size and width instead of restyling nested tabs.",
11072
+ "props": [
11073
+ "size",
11074
+ "width"
11075
+ ]
11076
+ }
11077
+ ],
11078
+ "customProperties": []
11079
+ }
11080
+ },
11081
+ "props": {
11082
+ "ariaLabel": {
11083
+ "type": "string | null",
11084
+ "required": false
11085
+ },
11086
+ "ariaLabelledby": {
11087
+ "type": "string | undefined",
11088
+ "required": false
11089
+ },
11090
+ "size": {
11091
+ "type": "TabGroupSize",
11092
+ "required": false
11093
+ },
11094
+ "tabs": {
11095
+ "type": "TabGroupItem[]",
11096
+ "required": false
11097
+ },
11098
+ "value": {
11099
+ "type": "string",
11100
+ "required": false
11101
+ },
11102
+ "width": {
11103
+ "type": "TabGroupWidth",
11104
+ "required": false
11105
+ }
11106
+ },
11107
+ "events": [
11108
+ {
11109
+ "name": "dsChange",
11110
+ "detail": "string"
11111
+ }
11112
+ ],
11113
+ "slots": [],
11114
+ "exports": {
11115
+ "customElement": "ds-navigation-tab-group",
11116
+ "react": "DsNavigationTabGroup",
11117
+ "vue": "DsNavigationTabGroup",
11118
+ "angular": "DsNavigationTabGroup"
11119
+ }
11120
+ },
11121
+ "dependencies": [
11122
+ "@ds-mo/ui",
11123
+ "@ds-mo/tokens"
11124
+ ],
11125
+ "registryDependencies": [
11126
+ "tab-group"
11127
+ ]
11128
+ },
10969
11129
  {
10970
11130
  "name": "pagination",
10971
11131
  "title": "Pagination",
@@ -13305,6 +13465,173 @@
13305
13465
  "tooltip"
13306
13466
  ]
13307
13467
  },
13468
+ {
13469
+ "name": "select-toggle",
13470
+ "title": "SelectToggle",
13471
+ "description": "Compact cycling choice control with a vertical position indicator.",
13472
+ "type": "registry:ui",
13473
+ "meta": {
13474
+ "library": "@ds-mo/ui",
13475
+ "distribution": "npm",
13476
+ "storybook": "https://zainadeel.github.io/compomo/?path=/story/select-toggle",
13477
+ "source": "src/wc/components/SelectToggle/SelectToggle.tsx",
13478
+ "intentStatus": "complete",
13479
+ "intent": {
13480
+ "audience": "general",
13481
+ "status": "experimental",
13482
+ "summary": "Compact cycling choice control with a vertical position indicator.",
13483
+ "useWhen": [
13484
+ "Two or three local view modes should cycle through one compact button without opening a popup.",
13485
+ "The current choice should update its label and/or icon while a small vertical dot indicator shows its position."
13486
+ ],
13487
+ "avoidWhen": [
13488
+ "The full choice set must remain visible at once; use TabGroup instead.",
13489
+ "The user must inspect or search more than three options; use Select instead.",
13490
+ "The value must participate in native form submission; this initial component is a local cycling control, not a form-associated select."
13491
+ ],
13492
+ "alternatives": [
13493
+ {
13494
+ "when": "Every choice should be visible and individually selectable.",
13495
+ "component": "component:ds-tab-group",
13496
+ "reason": "TabGroup exposes all choices and owns segmented keyboard selection."
13497
+ },
13498
+ {
13499
+ "when": "The option list exceeds three choices or needs a dropdown.",
13500
+ "component": "component:ds-select",
13501
+ "reason": "Select provides a popup and the complete form-select contract."
13502
+ }
13503
+ ],
13504
+ "commonlyComposedWith": [
13505
+ "component:ds-text",
13506
+ "component:ds-icon"
13507
+ ],
13508
+ "accessibility": [
13509
+ "A single native button owns focus and activation by pointer, Enter, or Space; the dots are decorative and hidden from assistive technology.",
13510
+ "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.",
13511
+ "An inactive button is natively disabled. Do not use aria-pressed because this is a multi-choice cycle, not a binary toggle."
13512
+ ],
13513
+ "states": [
13514
+ "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.",
13515
+ "Activation advances to the next choice, wraps after the last, updates the mutable value, and emits dsChange once with the next value.",
13516
+ "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.",
13517
+ "Both treatments use transparent unfilled chrome; hasBorder removes only the inset stroke while preserving control geometry."
13518
+ ],
13519
+ "responsiveBehavior": [
13520
+ "Hug follows the current content; fill uses the parent width and truncates a long label without moving the trailing indicator.",
13521
+ "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.",
13522
+ "Small, medium, and large use shared control-density heights and matching dot-slot geometry."
13523
+ ],
13524
+ "frameworkCaveats": {
13525
+ "customElements": [
13526
+ "Assign options as a JavaScript property and listen for dsChange to observe user cycling."
13527
+ ],
13528
+ "react": [
13529
+ "Pass options as an array and handle onDsChange to observe user cycling."
13530
+ ],
13531
+ "vue": [
13532
+ "Bind options as an array and handle dsChange to update application state."
13533
+ ],
13534
+ "angular": [
13535
+ "Bind options as an array and handle dsChange to update application state."
13536
+ ]
13537
+ },
13538
+ "references": [
13539
+ {
13540
+ "label": "Storybook examples",
13541
+ "path": "src/wc/components/SelectToggle/SelectToggle.stories.ts"
13542
+ },
13543
+ {
13544
+ "label": "Rendered behavior and geometry",
13545
+ "path": "tests/e2e/select-toggle.spec.ts"
13546
+ }
13547
+ ],
13548
+ "styling": {
13549
+ "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.",
13550
+ "protected": [
13551
+ {
13552
+ "properties": [
13553
+ "height",
13554
+ "padding",
13555
+ "gap",
13556
+ "border-radius",
13557
+ "background",
13558
+ "border",
13559
+ "color"
13560
+ ],
13561
+ "reason": "Control density and the indicator slot stay aligned across the supported variants.",
13562
+ "props": [
13563
+ "size",
13564
+ "variant",
13565
+ "width",
13566
+ "hasBorder"
13567
+ ]
13568
+ }
13569
+ ],
13570
+ "customProperties": []
13571
+ }
13572
+ },
13573
+ "props": {
13574
+ "ariaLabel": {
13575
+ "type": "string | null",
13576
+ "required": false
13577
+ },
13578
+ "collapseLabel": {
13579
+ "type": "boolean",
13580
+ "required": false
13581
+ },
13582
+ "hasBorder": {
13583
+ "type": "boolean",
13584
+ "required": false
13585
+ },
13586
+ "isInactive": {
13587
+ "type": "boolean",
13588
+ "required": false
13589
+ },
13590
+ "options": {
13591
+ "type": "SelectToggleOption[]",
13592
+ "required": false
13593
+ },
13594
+ "size": {
13595
+ "type": "SelectToggleSize",
13596
+ "required": false
13597
+ },
13598
+ "value": {
13599
+ "type": "string",
13600
+ "required": false
13601
+ },
13602
+ "variant": {
13603
+ "type": "SelectToggleVariant",
13604
+ "required": false
13605
+ },
13606
+ "width": {
13607
+ "type": "ControlWidth",
13608
+ "required": false
13609
+ }
13610
+ },
13611
+ "events": [
13612
+ {
13613
+ "name": "dsChange",
13614
+ "detail": "string"
13615
+ }
13616
+ ],
13617
+ "slots": [],
13618
+ "exports": {
13619
+ "customElement": "ds-select-toggle",
13620
+ "react": "DsSelectToggle",
13621
+ "vue": "DsSelectToggle",
13622
+ "angular": "DsSelectToggle"
13623
+ }
13624
+ },
13625
+ "dependencies": [
13626
+ "@ds-mo/ui",
13627
+ "@ds-mo/tokens",
13628
+ "@ds-mo/icons"
13629
+ ],
13630
+ "registryDependencies": [
13631
+ "icon",
13632
+ "text"
13633
+ ]
13634
+ },
13308
13635
  {
13309
13636
  "name": "setting-row-checkbox",
13310
13637
  "title": "SettingRowCheckbox",
@@ -14543,7 +14870,8 @@
14543
14870
  "Horizontal Slider fills the width supplied by its parent; the parent chooses an appropriate readable track length.",
14544
14871
  "Vertical Slider owns a token-based default length that may be overridden with --ds-slider-vertical-length in layout-specific compositions.",
14545
14872
  "Use md in ordinary forms and sm or xs only when the surrounding control density uses the same recipe.",
14546
- "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.",
14873
+ "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.",
14874
+ "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.",
14547
14875
  "Horizontal value direction is left-to-right; the design system does not author RTL-specific component behavior."
14548
14876
  ],
14549
14877
  "frameworkCaveats": {
@@ -14957,7 +15285,7 @@
14957
15285
  "Activation updates checked immediately and emits dsChange with the new boolean value.",
14958
15286
  "The initial checked value is the form-reset baseline; unchecked switches submit nothing unless uncheckedValue is provided.",
14959
15287
  "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.",
14960
- "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.",
15288
+ "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.",
14961
15289
  "Presentation mode removes switch semantics, focus, interaction, and form submission while retaining the checked visual."
14962
15290
  ],
14963
15291
  "responsiveBehavior": [
@@ -15118,6 +15446,7 @@
15118
15446
  "A tab set needs concise labels, icons, or icon-label content with optional supplemental notification dots."
15119
15447
  ],
15120
15448
  "avoidWhen": [
15449
+ "The group needs an outset shell around full-height control-sized tabs for local panel navigation; use NavigationTabGroup instead.",
15121
15450
  "The choices navigate application routes; use PanelNav or BarNav instead.",
15122
15451
  "The choices belong in a vertical panel or card side rail; use PanelSubNav instead.",
15123
15452
  "The choices are temporary commands or contextual options; use Menu instead.",
@@ -15125,6 +15454,11 @@
15125
15454
  "No enabled tab can remain selected while enabled choices exist."
15126
15455
  ],
15127
15456
  "alternatives": [
15457
+ {
15458
+ "when": "Local panel tabs need a roomy navigation shell rather than compact control-height chrome.",
15459
+ "component": "component:ds-navigation-tab-group",
15460
+ "reason": "NavigationTabGroup preserves tab behavior while giving selected tabs the full control-density height and an elevated primary surface."
15461
+ },
15128
15462
  {
15129
15463
  "when": "Local views need persistent vertical side-rail navigation.",
15130
15464
  "component": "component:ds-panel-sub-nav",
@@ -15262,7 +15596,7 @@
15262
15596
  "required": false
15263
15597
  },
15264
15598
  "presentation": {
15265
- "type": "'segmented' | 'tabs'",
15599
+ "type": "'segmented' | 'tabs' | 'navigation'",
15266
15600
  "required": false
15267
15601
  },
15268
15602
  "size": {
@@ -15310,7 +15644,7 @@
15310
15644
  {
15311
15645
  "name": "table",
15312
15646
  "title": "Table",
15313
- "description": "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.",
15647
+ "description": "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.",
15314
15648
  "type": "registry:ui",
15315
15649
  "meta": {
15316
15650
  "library": "@ds-mo/ui",
@@ -15321,11 +15655,12 @@
15321
15655
  "intent": {
15322
15656
  "audience": "general",
15323
15657
  "status": "stable",
15324
- "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.",
15658
+ "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.",
15325
15659
  "useWhen": [
15326
15660
  "A structured dataset needs native row and column relationships, optional one-level grouping, or comparable values across records.",
15327
15661
  "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.",
15328
- "A product table needs a token-backed recipe whose individual header, group, row, cell, selection, state, and load-more layers remain easy to restyle."
15662
+ "A product table needs a token-backed recipe whose individual header, group, row, cell, selection, state, and load-more layers remain easy to restyle.",
15663
+ "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."
15329
15664
  ],
15330
15665
  "avoidWhen": [
15331
15666
  "Content is primarily editorial prose; use semantic product-owned markup with the prose recipe instead.",
@@ -15355,8 +15690,9 @@
15355
15690
  ],
15356
15691
  "accessibility": [
15357
15692
  "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.",
15358
- "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.",
15359
- "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.",
15693
+ "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.",
15694
+ "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.",
15695
+ "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.",
15360
15696
  "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.",
15361
15697
  "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.",
15362
15698
  "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.",
@@ -15370,9 +15706,9 @@
15370
15706
  "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.",
15371
15707
  "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.",
15372
15708
  "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.",
15373
- "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.",
15709
+ "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.",
15374
15710
  "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.",
15375
- "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.",
15711
+ "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.",
15376
15712
  "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.",
15377
15713
  "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.",
15378
15714
  "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.",
@@ -15390,8 +15726,8 @@
15390
15726
  ],
15391
15727
  "responsiveBehavior": [
15392
15728
  "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.",
15393
- "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.",
15394
- "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.",
15729
+ "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.",
15730
+ "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.",
15395
15731
  "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.",
15396
15732
  "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.",
15397
15733
  "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.",
@@ -15402,12 +15738,12 @@
15402
15738
  ],
15403
15739
  "frameworkCaveats": {
15404
15740
  "customElements": [
15405
- "Assign columns, rows, groups, grouping, sort, selectedRowIds, collapsedGroupIds, highlightTerms, highlightFieldIds, hiddenFieldIds, fieldOrder, pagination, displayedCount, and totalCount through JavaScript properties rather than HTML attribute strings.",
15741
+ "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.",
15406
15742
  "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.",
15407
15743
  "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.",
15408
- "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.",
15744
+ "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.",
15409
15745
  "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.",
15410
- "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."
15746
+ "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."
15411
15747
  ],
15412
15748
  "react": [
15413
15749
  "Pass new array and state-object references when the controlled data or query state changes.",
@@ -15480,6 +15816,11 @@
15480
15816
  "source": "src/wc/styles/table.css",
15481
15817
  "reason": "Public table recipe customization; preserve semantic table and scroll behavior."
15482
15818
  },
15819
+ {
15820
+ "name": "--ds-table-frame-inset",
15821
+ "source": "src/wc/styles/table.css",
15822
+ "reason": "Controls the data-frame inset in the edge-to-edge chrome layout."
15823
+ },
15483
15824
  {
15484
15825
  "name": "--ds-table-inline-scroll-max-offset",
15485
15826
  "source": "src/wc/styles/table.css",
@@ -15539,6 +15880,10 @@
15539
15880
  }
15540
15881
  },
15541
15882
  "props": {
15883
+ "alternateView": {
15884
+ "type": "boolean",
15885
+ "required": false
15886
+ },
15542
15887
  "caption": {
15543
15888
  "type": "string",
15544
15889
  "required": true
@@ -15559,6 +15904,10 @@
15559
15904
  "type": "TableCellSpan[]",
15560
15905
  "required": false
15561
15906
  },
15907
+ "chromeLayout": {
15908
+ "type": "TableChromeLayout",
15909
+ "required": false
15910
+ },
15562
15911
  "chromeLoading": {
15563
15912
  "type": "boolean",
15564
15913
  "required": false
@@ -15743,6 +16092,10 @@
15743
16092
  "type": "string",
15744
16093
  "required": false
15745
16094
  },
16095
+ "pinnedFieldIds": {
16096
+ "type": "string[]",
16097
+ "required": false
16098
+ },
15746
16099
  "responsiveLayout": {
15747
16100
  "type": "'scroll' | 'cards'",
15748
16101
  "required": false