@ds-mo/ui 14.31.3 → 14.32.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +15 -5
  3. package/dist/agent.json +233 -28
  4. package/dist/angular/ds-bar-page-title.d.ts +28 -0
  5. package/dist/angular/ds-bar-page-title.js +48 -0
  6. package/dist/angular/ds-card-settings-scope.d.ts +1 -1
  7. package/dist/angular/ds-card-settings-scope.js +3 -3
  8. package/dist/angular/index.d.ts +1 -1
  9. package/dist/angular/index.js +1 -0
  10. package/dist/angular/proxies.d.ts +1 -0
  11. package/dist/angular/proxies.js +1 -0
  12. package/dist/components/ds-agent-questionnaire.js +1 -1
  13. package/dist/components/ds-agent-response.js +1 -1
  14. package/dist/components/ds-avatar.js +1 -1
  15. package/dist/components/ds-avatar.js.map +1 -1
  16. package/dist/components/ds-banner.js +1 -1
  17. package/dist/components/ds-banner.js.map +1 -1
  18. package/dist/components/ds-bar-action.js +1 -1
  19. package/dist/components/ds-bar-action.js.map +1 -1
  20. package/dist/components/ds-bar-nav.js +1 -1
  21. package/dist/components/ds-bar-page-title.d.ts +11 -0
  22. package/dist/components/ds-bar-page-title.js +2 -0
  23. package/dist/components/ds-bar-page-title.js.map +1 -0
  24. package/dist/components/ds-bar-title.js +1 -1
  25. package/dist/components/ds-bar-workflow.js +1 -1
  26. package/dist/components/ds-bar-workflow.js.map +1 -1
  27. package/dist/components/ds-button-filled.js +1 -1
  28. package/dist/components/ds-button-unfilled.js +1 -1
  29. package/dist/components/ds-card-chart.js +1 -1
  30. package/dist/components/ds-card-chart.js.map +1 -1
  31. package/dist/components/ds-card-navigation.js +1 -1
  32. package/dist/components/ds-card-navigation.js.map +1 -1
  33. package/dist/components/ds-card-overview.js +1 -1
  34. package/dist/components/ds-card-overview.js.map +1 -1
  35. package/dist/components/ds-card-setting.js +1 -1
  36. package/dist/components/ds-card-setting.js.map +1 -1
  37. package/dist/components/ds-card-settings-scope.js +1 -1
  38. package/dist/components/ds-card-settings-scope.js.map +1 -1
  39. package/dist/components/ds-chart-legend.js +1 -1
  40. package/dist/components/ds-chart-legend.js.map +1 -1
  41. package/dist/components/ds-chart.js +1 -1
  42. package/dist/components/ds-checkbox.js +1 -1
  43. package/dist/components/ds-chip.js +1 -1
  44. package/dist/components/ds-code-block.js +1 -1
  45. package/dist/components/ds-conversation-list-item.js +1 -1
  46. package/dist/components/ds-conversation-list-item.js.map +1 -1
  47. package/dist/components/ds-conversation-list-section.js +1 -1
  48. package/dist/components/ds-empty-state.js +1 -1
  49. package/dist/components/ds-field.js +1 -1
  50. package/dist/components/ds-filter-menu.js +1 -1
  51. package/dist/components/ds-input.js +1 -1
  52. package/dist/components/ds-markdown.js +1 -1
  53. package/dist/components/ds-menu.js +1 -1
  54. package/dist/components/ds-message-actions.js +1 -1
  55. package/dist/components/ds-message-composer.js +1 -1
  56. package/dist/components/ds-message-scroller.js +1 -1
  57. package/dist/components/ds-message.js +1 -1
  58. package/dist/components/ds-mobile-bar-nav.js +1 -1
  59. package/dist/components/ds-mobile-header.js +1 -1
  60. package/dist/components/ds-mobile-section-switcher.js +1 -1
  61. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  62. package/dist/components/ds-modal.js +1 -1
  63. package/dist/components/ds-pagination.js +1 -1
  64. package/dist/components/ds-panel-nav.js +1 -1
  65. package/dist/components/ds-panel-sub-nav.js +1 -1
  66. package/dist/components/ds-panel-sub-nav.js.map +1 -1
  67. package/dist/components/ds-panel-tool-header.js +1 -1
  68. package/dist/components/ds-panel-tool-search.js +1 -1
  69. package/dist/components/ds-panel-tool-search.js.map +1 -1
  70. package/dist/components/ds-panel-tools.js +1 -1
  71. package/dist/components/ds-paper-texture.js +1 -1
  72. package/dist/components/ds-radio.js +1 -1
  73. package/dist/components/ds-score.js +1 -1
  74. package/dist/components/ds-select.js +1 -1
  75. package/dist/components/ds-shell-app.js +1 -1
  76. package/dist/components/ds-shell-app.js.map +1 -1
  77. package/dist/components/ds-shell-page.js +1 -1
  78. package/dist/components/ds-shell-tools.js +1 -1
  79. package/dist/components/ds-skeleton.js +1 -1
  80. package/dist/components/ds-swatch-picker.js +1 -1
  81. package/dist/components/ds-tab-group.js +1 -1
  82. package/dist/components/ds-table-filter.js +1 -1
  83. package/dist/components/ds-table-group.js +1 -1
  84. package/dist/components/ds-table-group.js.map +1 -1
  85. package/dist/components/ds-table-saved-views.js +1 -1
  86. package/dist/components/ds-table-search.js +1 -1
  87. package/dist/components/ds-table-search.js.map +1 -1
  88. package/dist/components/ds-table-sort.js +1 -1
  89. package/dist/components/ds-table-sort.js.map +1 -1
  90. package/dist/components/ds-table-toolbar.js +1 -1
  91. package/dist/components/ds-table.js +1 -1
  92. package/dist/components/ds-table.js.map +1 -1
  93. package/dist/components/ds-tag.js +1 -1
  94. package/dist/components/ds-textarea.js +1 -1
  95. package/dist/components/ds-textarea.js.map +1 -1
  96. package/dist/components/ds-toast.js +1 -1
  97. package/dist/components/ds-toast.js.map +1 -1
  98. package/dist/components/ds-tooltip-chart.js +1 -1
  99. package/dist/components/ds-tooltip.js +1 -1
  100. package/dist/components/ds-typing-indicator.js +1 -1
  101. package/dist/components/p--VKxPUoV.js +2 -0
  102. package/dist/components/p--VKxPUoV.js.map +1 -0
  103. package/dist/components/p-14sMoeTr.js +2 -0
  104. package/dist/components/p-14sMoeTr.js.map +1 -0
  105. package/dist/components/p-9rzbZP-F.js +2 -0
  106. package/dist/components/p-9rzbZP-F.js.map +1 -0
  107. package/dist/components/p-B5W_r4vV.js +2 -0
  108. package/dist/components/p-B5W_r4vV.js.map +1 -0
  109. package/dist/components/{p-DjF2m7bf.js → p-B8ZonS3S.js} +2 -2
  110. package/dist/components/{p-BrW77sNB.js → p-B9WwU5vu.js} +2 -2
  111. package/dist/components/p-BCRPg1Xs.js +2 -0
  112. package/dist/components/p-BCRPg1Xs.js.map +1 -0
  113. package/dist/components/{p-KV3_5Cgo.js → p-BFd18avA.js} +2 -2
  114. package/dist/components/{p-DLDFPn9F.js → p-BGGIEmQj.js} +2 -2
  115. package/dist/components/p-BG_n-zQT.js +2 -0
  116. package/dist/components/p-BG_n-zQT.js.map +1 -0
  117. package/dist/components/p-BINlT3xz.js +2 -0
  118. package/dist/components/p-BINlT3xz.js.map +1 -0
  119. package/dist/components/p-BPTqn5zL.js +2 -0
  120. package/dist/components/p-BPTqn5zL.js.map +1 -0
  121. package/dist/components/p-BnWxbhFP.js +2 -0
  122. package/dist/components/p-BnWxbhFP.js.map +1 -0
  123. package/dist/components/{p-DhibZEq-.js → p-BonnrRtE.js} +2 -2
  124. package/dist/components/p-BxduVc5g.js +2 -0
  125. package/dist/components/p-BxduVc5g.js.map +1 -0
  126. package/dist/components/p-CD9AbaHQ.js +2 -0
  127. package/dist/components/p-CD9AbaHQ.js.map +1 -0
  128. package/dist/components/p-CN3roaMg.js +2 -0
  129. package/dist/components/p-CN3roaMg.js.map +1 -0
  130. package/dist/components/p-CR7G2BI6.js +2 -0
  131. package/dist/components/p-CR7G2BI6.js.map +1 -0
  132. package/dist/components/p-CakRq92x.js +2 -0
  133. package/dist/components/p-CakRq92x.js.map +1 -0
  134. package/dist/components/p-CumGY3uN.js +2 -0
  135. package/dist/components/p-CumGY3uN.js.map +1 -0
  136. package/dist/components/p-D59xX7JN.js +2 -0
  137. package/dist/components/p-D59xX7JN.js.map +1 -0
  138. package/dist/components/p-DFWJmuaR.js +2 -0
  139. package/dist/components/p-DFWJmuaR.js.map +1 -0
  140. package/dist/components/p-DGQUm3WL.js +2 -0
  141. package/dist/components/p-DGQUm3WL.js.map +1 -0
  142. package/dist/components/{p-DmTnBu5r.js → p-DJHshyyC.js} +2 -2
  143. package/dist/components/{p-BtUYEMwA.js → p-DPPM5T7q.js} +2 -2
  144. package/dist/components/p-DVRL3oem.js +2 -0
  145. package/dist/components/p-DVRL3oem.js.map +1 -0
  146. package/dist/components/p-DceM6xWR.js +2 -0
  147. package/dist/components/p-DceM6xWR.js.map +1 -0
  148. package/dist/components/p-Dhw_W8nk.js +2 -0
  149. package/dist/components/p-Dhw_W8nk.js.map +1 -0
  150. package/dist/components/{p-pkGqqLm-.js → p-DwxKwC5i.js} +2 -2
  151. package/dist/components/{p-DnhDgPJv.js → p-DzHXk0IG.js} +2 -2
  152. package/dist/components/p-OHT7lQVt.js +2 -0
  153. package/dist/components/p-OHT7lQVt.js.map +1 -0
  154. package/dist/components/{p-ln3dJxQT.js → p-P60MGUqZ.js} +2 -2
  155. package/dist/components/{p-Bu-gu0mN.js → p-UxIgD24y.js} +2 -2
  156. package/dist/components/{p-BiIDQ5RW.js → p-YFrD62Ml.js} +2 -2
  157. package/dist/components/p-gR6G5azA.js +2 -0
  158. package/dist/components/p-gR6G5azA.js.map +1 -0
  159. package/dist/components/{p-ehZFKett.js → p-oFbI_M5B.js} +2 -2
  160. package/dist/components/p-r5td84fg.js +2 -0
  161. package/dist/components/p-r5td84fg.js.map +1 -0
  162. package/dist/components/p-skVhQk9d.js +2 -0
  163. package/dist/components/p-skVhQk9d.js.map +1 -0
  164. package/dist/components/p-z7Zj26BA.js +2 -0
  165. package/dist/components/p-z7Zj26BA.js.map +1 -0
  166. package/dist/components/{p-YDUM8xDg.js → p-zunBF381.js} +2 -2
  167. package/dist/docs/components.json +584 -38
  168. package/dist/mcp-data/registry/avatar.json +1 -1
  169. package/dist/mcp-data/registry/banner.json +1 -1
  170. package/dist/mcp-data/registry/bar-action.json +5 -5
  171. package/dist/mcp-data/registry/bar-nav.json +1 -1
  172. package/dist/mcp-data/registry/bar-page-title.json +433 -0
  173. package/dist/mcp-data/registry/bar-title.json +21 -5
  174. package/dist/mcp-data/registry/bar-workflow.json +1 -1
  175. package/dist/mcp-data/registry/button-filled.json +1 -1
  176. package/dist/mcp-data/registry/button-unfilled.json +1 -1
  177. package/dist/mcp-data/registry/card-chart.json +1 -1
  178. package/dist/mcp-data/registry/card-navigation.json +1 -1
  179. package/dist/mcp-data/registry/card-overview.json +1 -1
  180. package/dist/mcp-data/registry/card-setting.json +1 -1
  181. package/dist/mcp-data/registry/card-settings-scope.json +23 -5
  182. package/dist/mcp-data/registry/chart-legend.json +1 -1
  183. package/dist/mcp-data/registry/checkbox.json +1 -1
  184. package/dist/mcp-data/registry/chip.json +3 -2
  185. package/dist/mcp-data/registry/conversation-list-item.json +1 -1
  186. package/dist/mcp-data/registry/filter-menu.json +1 -1
  187. package/dist/mcp-data/registry/input.json +1 -1
  188. package/dist/mcp-data/registry/menu.json +1 -1
  189. package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
  190. package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
  191. package/dist/mcp-data/registry/modal.json +1 -1
  192. package/dist/mcp-data/registry/pagination.json +10 -10
  193. package/dist/mcp-data/registry/panel-nav.json +1 -1
  194. package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
  195. package/dist/mcp-data/registry/panel-tool-header.json +1 -1
  196. package/dist/mcp-data/registry/panel-tool-search.json +1 -1
  197. package/dist/mcp-data/registry/panel-tools.json +4 -2
  198. package/dist/mcp-data/registry/radio.json +1 -1
  199. package/dist/mcp-data/registry/registry.json +235 -27
  200. package/dist/mcp-data/registry/select.json +1 -1
  201. package/dist/mcp-data/registry/shell-app.json +9 -7
  202. package/dist/mcp-data/registry/skeleton.json +1 -1
  203. package/dist/mcp-data/registry/tab-group.json +1 -1
  204. package/dist/mcp-data/registry/table-group.json +1 -1
  205. package/dist/mcp-data/registry/table-search.json +1 -1
  206. package/dist/mcp-data/registry/table-sort.json +4 -4
  207. package/dist/mcp-data/registry/table.json +5 -5
  208. package/dist/mcp-data/registry/tag.json +1 -1
  209. package/dist/mcp-data/registry/textarea.json +1 -1
  210. package/dist/mcp-data/registry/toast.json +1 -1
  211. package/dist/mcp-data/registry/tooltip-chart.json +1 -1
  212. package/dist/mcp-data/registry/tooltip.json +1 -1
  213. package/dist/react/components.d.ts +1 -0
  214. package/dist/react/components.js +1 -0
  215. package/dist/react/ds-bar-page-title.d.ts +14 -0
  216. package/dist/react/ds-bar-page-title.js +16 -0
  217. package/dist/styles/table.css +13 -2
  218. package/dist/types/components/BarPageTitle/BarPageTitle.d.ts +124 -0
  219. package/dist/types/components/BarPageTitle/index.d.ts +2 -0
  220. package/dist/types/components/BarTitle/BarTitle.d.ts +1 -7
  221. package/dist/types/components/BarTitle/bar-title-action-chrome.d.ts +76 -0
  222. package/dist/types/components/BarTitle/bar-title-actions.d.ts +1 -0
  223. package/dist/types/components/BarTitle/bar-title-sections.d.ts +11 -0
  224. package/dist/types/components/CardSettingsScope/CardSettingsScope.d.ts +3 -1
  225. package/dist/types/components/ShellApp/ShellApp.d.ts +1 -0
  226. package/dist/types/components.d.ts +181 -4
  227. package/dist/vue/components.d.ts +1 -0
  228. package/dist/vue/components.js +1 -0
  229. package/dist/vue/ds-bar-page-title.d.ts +3 -0
  230. package/dist/vue/ds-bar-page-title.js +26 -0
  231. package/dist/vue/ds-card-settings-scope.js +1 -0
  232. package/package.json +1 -1
  233. package/dist/components/p-B4ZrhWSH.js +0 -2
  234. package/dist/components/p-B4ZrhWSH.js.map +0 -1
  235. package/dist/components/p-BTsFFzfR.js +0 -2
  236. package/dist/components/p-BTsFFzfR.js.map +0 -1
  237. package/dist/components/p-BpSPAlOx.js +0 -2
  238. package/dist/components/p-BpSPAlOx.js.map +0 -1
  239. package/dist/components/p-C-MaZPyA.js +0 -2
  240. package/dist/components/p-C-MaZPyA.js.map +0 -1
  241. package/dist/components/p-CB5-uIY2.js +0 -2
  242. package/dist/components/p-CB5-uIY2.js.map +0 -1
  243. package/dist/components/p-CG4Fp3SY.js +0 -2
  244. package/dist/components/p-CG4Fp3SY.js.map +0 -1
  245. package/dist/components/p-CHCsDvJK.js +0 -2
  246. package/dist/components/p-CHCsDvJK.js.map +0 -1
  247. package/dist/components/p-CImwNex7.js +0 -2
  248. package/dist/components/p-CImwNex7.js.map +0 -1
  249. package/dist/components/p-CNZwk176.js +0 -2
  250. package/dist/components/p-CNZwk176.js.map +0 -1
  251. package/dist/components/p-CSZlbQ8_.js +0 -2
  252. package/dist/components/p-CSZlbQ8_.js.map +0 -1
  253. package/dist/components/p-CVNYRTEH.js +0 -2
  254. package/dist/components/p-CVNYRTEH.js.map +0 -1
  255. package/dist/components/p-D3sJXjcg.js +0 -2
  256. package/dist/components/p-D3sJXjcg.js.map +0 -1
  257. package/dist/components/p-DFOhxUQP.js +0 -2
  258. package/dist/components/p-DFOhxUQP.js.map +0 -1
  259. package/dist/components/p-DI7qbahC.js +0 -2
  260. package/dist/components/p-DI7qbahC.js.map +0 -1
  261. package/dist/components/p-DP75OhfU.js +0 -2
  262. package/dist/components/p-DP75OhfU.js.map +0 -1
  263. package/dist/components/p-DR1jV6Q5.js +0 -2
  264. package/dist/components/p-DR1jV6Q5.js.map +0 -1
  265. package/dist/components/p-DuJuqbcg.js +0 -2
  266. package/dist/components/p-DuJuqbcg.js.map +0 -1
  267. package/dist/components/p-E3RCUE7a.js +0 -2
  268. package/dist/components/p-E3RCUE7a.js.map +0 -1
  269. package/dist/components/p-JuKGR7Ay.js +0 -2
  270. package/dist/components/p-JuKGR7Ay.js.map +0 -1
  271. package/dist/components/p-MuZ6B9gu.js +0 -2
  272. package/dist/components/p-MuZ6B9gu.js.map +0 -1
  273. package/dist/components/p-Ui0Ir5li.js +0 -2
  274. package/dist/components/p-Ui0Ir5li.js.map +0 -1
  275. package/dist/components/p-eAX_M_QY.js +0 -2
  276. package/dist/components/p-eAX_M_QY.js.map +0 -1
  277. package/dist/components/p-eaCtnww1.js +0 -2
  278. package/dist/components/p-eaCtnww1.js.map +0 -1
  279. /package/dist/components/{p-DjF2m7bf.js.map → p-B8ZonS3S.js.map} +0 -0
  280. /package/dist/components/{p-BrW77sNB.js.map → p-B9WwU5vu.js.map} +0 -0
  281. /package/dist/components/{p-KV3_5Cgo.js.map → p-BFd18avA.js.map} +0 -0
  282. /package/dist/components/{p-DLDFPn9F.js.map → p-BGGIEmQj.js.map} +0 -0
  283. /package/dist/components/{p-DhibZEq-.js.map → p-BonnrRtE.js.map} +0 -0
  284. /package/dist/components/{p-DmTnBu5r.js.map → p-DJHshyyC.js.map} +0 -0
  285. /package/dist/components/{p-BtUYEMwA.js.map → p-DPPM5T7q.js.map} +0 -0
  286. /package/dist/components/{p-pkGqqLm-.js.map → p-DwxKwC5i.js.map} +0 -0
  287. /package/dist/components/{p-DnhDgPJv.js.map → p-DzHXk0IG.js.map} +0 -0
  288. /package/dist/components/{p-ln3dJxQT.js.map → p-P60MGUqZ.js.map} +0 -0
  289. /package/dist/components/{p-Bu-gu0mN.js.map → p-UxIgD24y.js.map} +0 -0
  290. /package/dist/components/{p-BiIDQ5RW.js.map → p-YFrD62Ml.js.map} +0 -0
  291. /package/dist/components/{p-ehZFKett.js.map → p-oFbI_M5B.js.map} +0 -0
  292. /package/dist/components/{p-YDUM8xDg.js.map → p-zunBF381.js.map} +0 -0
@@ -1030,9 +1030,9 @@
1030
1030
  "The application updates the selected identities after dsClear, then moves focus to a stable collection control before the empty bar disappears; the bar never mutates selection or guesses a focus target."
1031
1031
  ],
1032
1032
  "states": [
1033
- "The bar is hidden while the selected count is below one and appears as the compact bold-brand elevated surface once at least one item is selected.",
1033
+ "The bar is hidden while the selected count is below one and appears as the compact pill bold-brand elevated surface once at least one item is selected.",
1034
1034
  "Clear reports intent only. The application replaces the controlled selected identities.",
1035
- "Slotted actions stay application-owned. Pass background matching the bold parent surface so those controls remain readable.",
1035
+ "Slotted actions stay application-owned. Use the rounded ButtonFilled or ButtonUnfilled variant on a background matching the bold parent surface so those controls remain readable.",
1036
1036
  "The component-owned visible surface owns medium control-elevation and removes the empty actions lane. Overlay inset, footer clearance, and stacking remain application layout."
1037
1037
  ],
1038
1038
  "responsiveBehavior": [
@@ -1042,7 +1042,7 @@
1042
1042
  "frameworkCaveats": {
1043
1043
  "customElements": [
1044
1044
  "Bind count from the current selected set, replace that set after dsClear, and return focus to a stable collection control.",
1045
- "Project command controls through slot=actions with background matching the bold parent surface."
1045
+ "Project rounded command controls through slot=actions with background matching the bold parent surface."
1046
1046
  ],
1047
1047
  "react": [
1048
1048
  "Pass count from selected row or item state, clear that state from onDsClear, and return focus to a stable collection control.",
@@ -1050,7 +1050,7 @@
1050
1050
  ],
1051
1051
  "angular": [
1052
1052
  "Bind count from the controlled selected identities, handle dsClear in the collection owner, and return focus to a stable collection control.",
1053
- "Project ds-button-unfilled or ds-button-filled into slot=actions with background matching the bold parent surface."
1053
+ "Project the rounded ds-button-unfilled or ds-button-filled variant into slot=actions with background matching the bold parent surface."
1054
1054
  ]
1055
1055
  },
1056
1056
  "references": [
@@ -1268,6 +1268,199 @@
1268
1268
  "text"
1269
1269
  ]
1270
1270
  },
1271
+ {
1272
+ "name": "bar-page-title",
1273
+ "title": "BarPageTitle",
1274
+ "description": "Compact shell-bar page chrome that shows every page-level section as a tab row after the title divider, and replaces that row with the compact section button when the complete set cannot fit.",
1275
+ "type": "registry:ui",
1276
+ "meta": {
1277
+ "library": "@ds-mo/ui",
1278
+ "distribution": "npm",
1279
+ "storybook": "https://zainadeel.github.io/compomo/?path=/story/bar-page-title",
1280
+ "source": "src/wc/components/BarPageTitle/BarPageTitle.tsx",
1281
+ "intentStatus": "complete",
1282
+ "intent": {
1283
+ "audience": "specialized",
1284
+ "status": "experimental",
1285
+ "summary": "Compact shell-bar page chrome that shows every page-level section as a tab row after the title divider, and replaces that row with the compact section button when the complete set cannot fit.",
1286
+ "useWhen": [
1287
+ "Managed ShellApp is in panel section navigation and the routed page has page-level subsections such as People or driver detail.",
1288
+ "The shell bar must keep page identity, Back, and page actions while presenting every page section together or not at all."
1289
+ ],
1290
+ "avoidWhen": [
1291
+ "The chrome is a page-placed header; use BarTitle through ShellPage instead.",
1292
+ "The choices are peer area routes in bar-mode ShellApp; use BarNav instead.",
1293
+ "The choices are nested PanelNav child routes; keep those on PanelNav.",
1294
+ "Local in-page views should remain selectable as tabs inside content; use TabGroup instead."
1295
+ ],
1296
+ "alternatives": [
1297
+ {
1298
+ "when": "The header sits in page content rather than the shell bar.",
1299
+ "component": "component:ds-bar-title",
1300
+ "reason": "BarTitle owns expanded, compact, and constrained page headers, including the compact section button without a tab row."
1301
+ },
1302
+ {
1303
+ "when": "The choices are peer routes of the active PanelNav destination.",
1304
+ "component": "component:ds-bar-nav",
1305
+ "reason": "BarNav owns area-level route sections and partial overflow rather than page subsections."
1306
+ },
1307
+ {
1308
+ "when": "The choices switch local content without changing page sections.",
1309
+ "component": "component:ds-tab-group",
1310
+ "reason": "TabGroup is the local content-view control rather than shell-bar page chrome."
1311
+ }
1312
+ ],
1313
+ "commonlyComposedWith": [
1314
+ "component:ds-shell-app",
1315
+ "component:ds-bar-title",
1316
+ "component:ds-panel-nav",
1317
+ "component:ds-menu",
1318
+ "component:ds-text"
1319
+ ],
1320
+ "patterns": [
1321
+ "pattern:application-shell",
1322
+ "pattern:shell-page"
1323
+ ],
1324
+ "accessibility": [
1325
+ "Provide one concise heading; BarPageTitle renders exactly one h1.",
1326
+ "Give compact Back a destination-specific accessible name and handle dsBack in the route owner.",
1327
+ "Keep value synchronized with the current page section; dsSectionChange returns the selected section id.",
1328
+ "The tab row is a tablist with horizontal roving tabindex. The collapsed control exposes the current section, menu relationship, and expanded state, then restores focus after selection or dismissal.",
1329
+ "Use one filled primary action in the page decision area and keep every top-level action and nested menu-choice id non-empty and unique."
1330
+ ],
1331
+ "states": [
1332
+ "Fewer than two selectable sections render title chrome only: no divider, tabs, or section button.",
1333
+ "Two or more selectable sections default to every tab after the compact title divider.",
1334
+ "When the unconstrained title, divider, and complete tab row cannot sit beside trailing actions, every tab is replaced by the compact section button and menu. BarPageTitle never keeps some tabs visible while overflowing the rest.",
1335
+ "Dividers in sections or actions create separate Menu groups without becoming selectable rows.",
1336
+ "Ordered actions preserve authored order with the same compact visible-action and overflow rules as compact BarTitle.",
1337
+ "showDivider=false removes the bottom seam; showCompactDivider can independently restore or remove that boundary.",
1338
+ "Section, action, split-menu, and overflow triggers retain the shared surface-open wash through exit."
1339
+ ],
1340
+ "responsiveBehavior": [
1341
+ "BarPageTitle is compact-only shell-bar chrome. It does not offer expanded or constrained variants.",
1342
+ "ShellApp owns the managed panel-mode path and feeds pageChrome.subsections through the same section contract as BarTitle.",
1343
+ "Measurement uses a hidden unconstrained probe of Back, heading, divider, and every tab, compared with the width left after trailing actions, plus hysteresis so the control does not flicker at the boundary.",
1344
+ "Mobile continues to use MobileHeader; BarPageTitle is desktop and tablet shell-bar chrome.",
1345
+ "Long headings truncate while Back, tabs or the section button, and action controls retain complete hit targets and accessible names."
1346
+ ],
1347
+ "frameworkCaveats": {
1348
+ "customElements": [
1349
+ "Assign sections, actionItems, primaryAction, and actions as JavaScript properties and replace array or object identities when controlled state changes.",
1350
+ "Handle dsBack, update value after dsSectionChange, and execute product commands from dsAction."
1351
+ ],
1352
+ "react": [
1353
+ "Pass section and ordered action arrays directly to DsBarPageTitle and keep value controlled from route state."
1354
+ ],
1355
+ "angular": [
1356
+ "Bind complex values on the standalone DsBarPageTitle adapter and handle Back, section, and action intent events in the route shell."
1357
+ ]
1358
+ },
1359
+ "references": [
1360
+ {
1361
+ "label": "Storybook",
1362
+ "path": "src/wc/components/BarPageTitle/BarPageTitle.stories.ts"
1363
+ },
1364
+ {
1365
+ "label": "Managed panel-mode shell bar",
1366
+ "path": "src/wc/components/ShellApp/ShellApp.mdx"
1367
+ },
1368
+ {
1369
+ "label": "All-or-nothing resize coverage",
1370
+ "path": "tests/e2e/bar-page-title.spec.ts"
1371
+ },
1372
+ {
1373
+ "label": "Surface ownership and trigger state",
1374
+ "path": "src/docs/SurfaceOwnership.mdx"
1375
+ }
1376
+ ]
1377
+ },
1378
+ "props": {
1379
+ "actionItems": {
1380
+ "type": "BarTitleActionConfigItem[]",
1381
+ "required": false
1382
+ },
1383
+ "actions": {
1384
+ "type": "BarTitleActionItem[]",
1385
+ "required": false
1386
+ },
1387
+ "actionsAriaLabel": {
1388
+ "type": "string",
1389
+ "required": false
1390
+ },
1391
+ "backAriaLabel": {
1392
+ "type": "string",
1393
+ "required": false
1394
+ },
1395
+ "heading": {
1396
+ "type": "string",
1397
+ "required": true
1398
+ },
1399
+ "primaryAction": {
1400
+ "type": "BarTitlePrimaryAction | null",
1401
+ "required": false
1402
+ },
1403
+ "sections": {
1404
+ "type": "BarTitleSectionItem[]",
1405
+ "required": false
1406
+ },
1407
+ "sectionsAriaLabel": {
1408
+ "type": "string",
1409
+ "required": false
1410
+ },
1411
+ "showBack": {
1412
+ "type": "boolean",
1413
+ "required": false
1414
+ },
1415
+ "showCompactDivider": {
1416
+ "type": "boolean",
1417
+ "required": false
1418
+ },
1419
+ "showDivider": {
1420
+ "type": "boolean",
1421
+ "required": false
1422
+ },
1423
+ "value": {
1424
+ "type": "string",
1425
+ "required": false
1426
+ }
1427
+ },
1428
+ "events": [
1429
+ {
1430
+ "name": "dsAction",
1431
+ "detail": "string"
1432
+ },
1433
+ {
1434
+ "name": "dsBack",
1435
+ "detail": "MouseEvent"
1436
+ },
1437
+ {
1438
+ "name": "dsSectionChange",
1439
+ "detail": "string"
1440
+ }
1441
+ ],
1442
+ "slots": [],
1443
+ "exports": {
1444
+ "customElement": "ds-bar-page-title",
1445
+ "react": "DsBarPageTitle",
1446
+ "vue": "DsBarPageTitle",
1447
+ "angular": "DsBarPageTitle"
1448
+ }
1449
+ },
1450
+ "dependencies": [
1451
+ "@ds-mo/ui",
1452
+ "@ds-mo/tokens",
1453
+ "@ds-mo/icons"
1454
+ ],
1455
+ "registryDependencies": [
1456
+ "button-filled",
1457
+ "button-unfilled",
1458
+ "icon",
1459
+ "menu",
1460
+ "text",
1461
+ "tooltip"
1462
+ ]
1463
+ },
1271
1464
  {
1272
1465
  "name": "bar-title",
1273
1466
  "title": "BarTitle",
@@ -1291,12 +1484,18 @@
1291
1484
  ],
1292
1485
  "avoidWhen": [
1293
1486
  "The title belongs to a PanelTools drawer or fullscreen pane; use PanelToolHeader through PanelTools instead.",
1487
+ "The chrome is the managed panel-mode shell bar; use BarPageTitle.",
1294
1488
  "The choices are primary application destinations or BarNav destinations rather than sections within the current page.",
1295
1489
  "The heading belongs to a card, modal, or other bounded region rather than the page.",
1296
1490
  "Local panels inside page content should remain directly selectable; use TabGroup instead.",
1297
1491
  "Automatic sticky or responsive page orchestration is required; compose BarTitle in ShellPage rather than implementing it in the header."
1298
1492
  ],
1299
1493
  "alternatives": [
1494
+ {
1495
+ "when": "The chrome is the managed panel-mode shell bar with page-level sections.",
1496
+ "component": "component:ds-bar-page-title",
1497
+ "reason": "BarPageTitle owns compact shell-bar identity and all-or-nothing page-section tabs."
1498
+ },
1300
1499
  {
1301
1500
  "when": "A create or edit workflow needs Exit, persistent step navigation, and a final Save or Submit action.",
1302
1501
  "component": "component:ds-bar-workflow",
@@ -1343,13 +1542,13 @@
1343
1542
  "expanded renders the larger heading, optional description, inset divider, and a full-width caption breadcrumb row above the title. The breadcrumb begins after 32px top padding; the following title and right-side actions share one top alignment. Compact renders 48px chrome with the existing icon Back action; constrained uses compact chrome and moves an auto-collapse primary action into overflow.",
1344
1543
  "The one visible ordered action collapses by default in constrained presentation. Use never for an exceptional action whose hierarchy must remain visible; explicit overflow actions never leave the shared menu.",
1345
1544
  "showDivider=false removes the bottom divider when the surrounding page composition supplies the boundary; showCompactDivider can independently restore or remove that boundary in compact and constrained variants.",
1346
- "placement=shell-bar is reserved for ShellApp panel section navigation. It remains compact, omits description and breadcrumb presentation, and preserves applicable Back, section, primary, and overflow controls.",
1545
+ "placement=shell-bar remains compact slotted chrome for advanced ShellApp composition. Managed panel-mode ShellApp uses BarPageTitle instead. It omits description and breadcrumb presentation and preserves applicable Back, section, primary, and overflow controls.",
1347
1546
  "Section, action, split-menu, and overflow triggers automatically retain the shared surface-open wash through exit. The expanded header presentation is layout, not surface ownership, and does not itself acquire a pressed wash."
1348
1547
  ],
1349
1548
  "responsiveBehavior": [
1350
1549
  "BarTitle does not observe viewport, shell, scroll, or container state. Its owner selects an explicit variant.",
1351
1550
  "ShellPage is the standard owner for automatic expanded, compact, and constrained selection.",
1352
- "ShellApp owns shell-bar placement and always selects compact presentation there; mobile continues to use MobileHeader.",
1551
+ "ShellApp owns shell-bar placement for slotted composition and always selects compact presentation there; managed panel mode uses BarPageTitle. Mobile continues to use MobileHeader.",
1353
1552
  "When ShellPage owns BarTitle on a secondary desktop or tablet page, its expanded, compact, and constrained presentations all match that canvas; the separate MobileHeader component remains primary.",
1354
1553
  "Compact titles use the shared compact-header geometry and md control inset so top-level headings align with BarNav and inline Back geometry aligns with PanelToolHeader. Long headings and section labels truncate independently while Back and action controls retain complete hit targets and accessible names.",
1355
1554
  "A never-collapse action remains visible in constrained mode; the title and section label yield space first.",
@@ -2900,7 +3099,7 @@
2900
3099
  "The shared text-action recipe supplies brand foreground, hover underline, and keyboard focus indication."
2901
3100
  ],
2902
3101
  "states": [
2903
- "The application owns the selected area, profile, available choices, permissions, and empty-state copy.",
3102
+ "The application owns the selected area, profile, available choices, permissions, and empty-state copy. Existing complete area-trigger labels remain compatible. Applications that separate the localizable settings noun from the control supply the area-only trigger label and noun together.",
2904
3103
  "The card reports popup requests without changing selection or expanded state.",
2905
3104
  "The surface follows the active theme rather than imposing always-dark colors."
2906
3105
  ],
@@ -2960,6 +3159,10 @@
2960
3159
  "scopeLabel": {
2961
3160
  "type": "string",
2962
3161
  "required": false
3162
+ },
3163
+ "settingsLabel": {
3164
+ "type": "string",
3165
+ "required": false
2963
3166
  }
2964
3167
  },
2965
3168
  "events": [
@@ -3460,8 +3663,9 @@
3460
3663
  "Semantic state describes the represented value; active does not mean selected or pressed.",
3461
3664
  "The dismiss action is the chip's only interaction, and the parent owns data mutation after dsRemove.",
3462
3665
  "Long labels remain on one line and truncate only when the consuming layout supplies a maximum width; otherwise the chip sizes to its content.",
3666
+ "When the chip is wider than its label, the dismiss control stays on the trailing edge.",
3463
3667
  "Rounded shape is a visual choice and does not change semantics or interaction.",
3464
- "isInset opts into reduced outer geometry only when Chip is nested inside a control of the same density. The dismiss button applies the same inset depth again inside the Chip's already-reduced height, and its trailing padding matches the resulting top and bottom space. The default single inset removes 4px overall; insetDepth double removes 8px overall and falls back to single at xs.",
3668
+ "The dismiss orb is 4px smaller than the chip on every recipe, including single and double inset, with 2px on top, bottom, and the trailing edge. isInset opts into reduced outer geometry only when Chip is nested inside a control of the same density. The default single inset removes 4px overall; insetDepth double removes 8px overall and falls back to single at xs.",
3465
3669
  "Chip is designed only for primary surfaces and has no surface-context API."
3466
3670
  ],
3467
3671
  "responsiveBehavior": [
@@ -6502,7 +6706,7 @@
6502
6706
  {
6503
6707
  "name": "pagination",
6504
6708
  "title": "Pagination",
6505
- "description": "Controlled fixed or fitted page-size, compact range, adjacent-page navigation, and optional first/last controls for application-owned data windows.",
6709
+ "description": "Controlled fixed or fitted page-size, page position, adjacent-page navigation, and optional first/last controls for application-owned data windows.",
6506
6710
  "type": "registry:ui",
6507
6711
  "meta": {
6508
6712
  "library": "@ds-mo/ui",
@@ -6513,10 +6717,10 @@
6513
6717
  "intent": {
6514
6718
  "audience": "general",
6515
6719
  "status": "stable",
6516
- "summary": "Controlled fixed or fitted page-size, compact range, adjacent-page navigation, and optional first/last controls for application-owned data windows.",
6720
+ "summary": "Controlled fixed or fitted page-size, page position, adjacent-page navigation, and optional first/last controls for application-owned data windows.",
6517
6721
  "useWhen": [
6518
6722
  "A result set is divided into discrete pages and the application owns fetching or slicing each page.",
6519
- "A table or list needs a compact page-size selector, result range, and boundary-aware navigation.",
6723
+ "A table or list needs a compact page-size selector, page position, and boundary-aware navigation.",
6520
6724
  "Direct first-page and last-page navigation is useful enough to opt into alongside the default Previous and Next controls."
6521
6725
  ],
6522
6726
  "avoidWhen": [
@@ -6530,7 +6734,7 @@
6530
6734
  ],
6531
6735
  "accessibility": [
6532
6736
  "The component renders a named navigation region, gives its compact page-size noun a complete accessible label, and gives every icon-only boundary control an explicit page action name.",
6533
- "The visible page-size cluster states the localized noun, selected size, and current-page count of total, for example Rows: [25] 25 of 500. The page position uses compact ‘of’ phrasing, for example 1 of 20. A polite atomic status update retains the complete current range and ‘Page’ phrasing with the localized item noun.",
6737
+ "The visible page-size cluster states the localized noun and selected size, then a vertical divider, then page position, for example Rows: [25] | 1 of 20. A polite atomic status update retains the complete current range and ‘Page’ phrasing with the localized item noun.",
6534
6738
  "Left and Right Arrow request the adjacent page while focus is within pagination navigation controls. The page-size combobox retains its own arrow-key behavior.",
6535
6739
  "Inactive boundary controls and every control during loading remain non-interactive while retaining their accessible names.",
6536
6740
  "showFirstLastButtons adds explicitly named First page and Last page controls; Previous and Next remain present in either mode."
@@ -6538,14 +6742,14 @@
6538
6742
  "states": [
6539
6743
  "pageIndex, numeric effective pageSize, pageSizeMode, totalItems, and pageSizeOptions are controlled inputs. dsChange reports the complete next pagination state, previous index, size, and mode, and whether the request changed the page, page size, or fitted capacity; it never mutates controlled inputs.",
6540
6744
  "Page-size changes request the first page. Out-of-range page indexes and invalid numeric inputs normalize only for presentation; the owner remains authoritative.",
6541
- "Zero results display 0–0 of 0 and Page 1 of 1. A partial final page caps the visible range at totalItems.",
6745
+ "Zero results display Page 1 of 1. A partial final page still derives from totalItems. Assistive status keeps the complete item range.",
6542
6746
  "loading preserves the full pagination surface, applies aria-busy to the navigation region, and prevents page or page-size requests.",
6543
- "fitToPage appends a Fit to page choice. fitPageSize supplies its effective whole-item capacity; the closed trigger says Fit while the range continues to expose the resulting count. fitToPageInactive keeps that choice visible but unavailable when fitting is not meaningful for the current data shape. Pagination does not measure layouts itself.",
6747
+ "fitToPage appends a Fit to page choice. fitPageSize supplies its effective whole-item capacity; the closed trigger says Fit while page position reflects the resulting window. fitToPageInactive keeps that choice visible but unavailable when fitting is not meaningful for the current data shape. Pagination does not measure layouts itself.",
6544
6748
  "showFirstLastButtons defaults to false. Enable it when direct jumps to both result boundaries materially help the workflow."
6545
6749
  ],
6546
6750
  "responsiveBehavior": [
6547
- "The full-width controls remain on one line with noun, selected size, current-page count of total, a vertical divider, page position, Previous and Next, plus optional First and Last navigation.",
6548
- "Inside a ds-table container narrower than 900px, pagination hides the visible current-page count and any opted-in first/last controls while retaining the page-size noun and selector plus Previous, page position, and Next. The complete current range remains available to assistive technology."
6751
+ "The full-width controls remain on one line with noun, selected size, a vertical divider, page position, Previous and Next, plus optional First and Last navigation.",
6752
+ "Inside a ds-table container narrower than 900px, pagination hides any opted-in first/last controls while retaining the page-size noun and selector plus Previous, page position, and Next. The complete current range remains available to assistive technology."
6549
6753
  ],
6550
6754
  "frameworkCaveats": {
6551
6755
  "customElements": [
@@ -7430,6 +7634,8 @@
7430
7634
  "Use isInactive only for a temporarily unavailable visible tool; omit tools the user is not authorized to access.",
7431
7635
  "Rail actions disable physical press scaling so notification-dot halos remain aligned to the shell gradient; hover and pressed washes continue to paint above the dot and halo.",
7432
7636
  "Rail tooltips are shell-owned and position against the viewport so the narrow tools-lane collision boundary cannot clamp them beyond the viewport edge.",
7637
+ "The PanelTools host is the composed-tree overlay collision owner for menus and filter popups inside tool views. Drawer presentation keeps that rectangle on the rail-and-drawer column. Fullscreen presentation uses the fixed fullscreen surface, not the leftover ShellApp tools-lane box, so history-pane and header menus stay next to their triggers.",
7638
+ "ds-menu and ds-filter-menu remain on the native popover top layer. Applications must not set boundary=viewport or position those popups to work around fullscreen collision.",
7433
7639
  "The application owns slotted tool products and data while PanelTools owns rail ordering, drawer selection, open state, motion, and shell events.",
7434
7640
  "Opening and closing clip an already-rendered fixed-width surface. Header and tool content remain fully opaque and retained during width motion; transition completion is accepted only at the measured terminal clip width, after which the closed surface becomes inert and paint-skipped.",
7435
7641
  "Entering and exiting fullscreen snaps without borrowing the drawer open or close animation.",
@@ -8381,6 +8587,7 @@
8381
8587
  "commonlyComposedWith": [
8382
8588
  "component:ds-panel-nav",
8383
8589
  "component:ds-bar-nav",
8590
+ "component:ds-bar-page-title",
8384
8591
  "component:ds-bar-title",
8385
8592
  "component:ds-panel-tools",
8386
8593
  "component:ds-shell-tools",
@@ -8412,7 +8619,7 @@
8412
8619
  "ShellApp renders the lower-level desktop, tablet, and mobile chrome, coordinates layout, gradient alignment, transitions, shortcuts, global surfaces, optional Inbox state, focus restoration, and mobile-stage visibility.",
8413
8620
  "Desktop and tablet PanelNav and PanelTools width motion is one continuous layout transition: the shell bar or title and routed page must follow the same intermediate lane widths without terminal-state snapping, overlapping chrome, transform scaling, or temporary replacement backgrounds.",
8414
8621
  "The application router owns authorization, current URLs, history, and route execution; ShellApp forwards navigation and page intent events without routing.",
8415
- "sectionNavigation is an application-controlled preference: bar keeps route sections in BarNav, while panel renders them as nested PanelNav children and places compact BarTitle in the shell bar.",
8622
+ "sectionNavigation is an application-controlled preference: bar keeps route sections in BarNav, while panel renders them as nested PanelNav children and places BarPageTitle in the shell bar.",
8416
8623
  "Managed ShellApp derives ShellPage desktop header placement from sectionNavigation. Panel mode removes page-local title geometry, restores the standard responsive top gutter, and preserves full-bleed page content without requiring route-specific navigation branches.",
8417
8624
  "Switch sectionNavigation at runtime without replacing routed content or tool owners; the application owns preference storage and defaults new users to bar unless product policy says otherwise.",
8418
8625
  "In panel mode, supply the same route sections as children on their PanelNav parent and handle dsNavChildSelect as structured parent, child, and href navigation intent.",
@@ -8427,7 +8634,7 @@
8427
8634
  "Dashboard represents day-to-day operational work while Settings represents administrative and configuration work; route state selects the context.",
8428
8635
  "Replace navigation and pageChrome together from one completed route state.",
8429
8636
  "When pageChrome.showBack marks a detail depth, mobile chrome combines the page heading and active local subsection in one sheet trigger; peer route tabs remain in desktop BarNav rather than replacing the detail identity.",
8430
- "Route-owned ordered page actions drive both BarTitle and MobileHeader. ShellApp forwards one flat page-action id and owns the derived mobile overflow menu so routes do not duplicate menu state or choices.",
8637
+ "Route-owned ordered page actions drive BarTitle, BarPageTitle, and MobileHeader. ShellApp forwards one flat page-action id and owns the derived mobile overflow menu so routes do not duplicate menu state or choices.",
8431
8638
  "Managed mobile Back and page-action controls use the same large touch density as the mobile navigation header without increasing the shared header height.",
8432
8639
  "Managed ShellApp keeps the selected desktop section-navigation presentation and ShellPage present and owns page header stickiness and the content scroller.",
8433
8640
  "Route-owned pageChrome independently selects ShellPage contentInset, page-header seams, scroll compaction, expanded and compact header-divider visibility, and contentSurface. ShellApp forwards them while resolving whether desktop title geometry is page-local or shell-bar-owned.",
@@ -8438,8 +8645,8 @@
8438
8645
  "ShellApp owns the fixed system breakpoints and resolves desktop at 1200px and wider, tablet from 768px through 1199px, and mobile below 768px.",
8439
8646
  "On desktop, PanelNav defaults expanded, permits user collapse or expansion, and respects the locally persisted desktop preference.",
8440
8647
  "On tablet, ShellApp keeps PanelNav permanently collapsed and prevents user expansion without overwriting the desktop preference.",
8441
- "On desktop and tablet, panel section navigation replaces BarNav with compact BarTitle; collapsed PanelNav exposes child sections through its anchored flyout.",
8442
- "When panel section navigation moves BarTitle into the shell bar, routed content starts at the standard 32px desktop or 16px tablet gutter and ShellPage reports no page-local sticky-header height.",
8648
+ "On desktop and tablet, panel section navigation replaces BarNav with BarPageTitle; collapsed PanelNav exposes child sections through its anchored flyout.",
8649
+ "When panel section navigation moves BarPageTitle into the shell bar, routed content starts at the standard 32px desktop or 16px tablet gutter and ShellPage reports no page-local sticky-header height.",
8443
8650
  "On mobile, ShellApp hides and inerts desktop chrome, uses a solid primary stage, and composes MobileHeader, MobileSheetNav, ShellTools, and the persistent MobileBarNav around the same application-owned content.",
8444
8651
  "The section-navigation preference also selects mobile navigation: bar preserves flat area selection and the header section picker; panel expands child routes inline in MobileSheetNav and combines the page title with any local subsection in one sheet trigger.",
8445
8652
  "Opening MobileSheetNav temporarily overlays the active routed page or global tool; closing it without selecting an area restores that same destination and its nested state. The sheet exposes the router-derived current area only while the routed area owns the mobile stage, so a global tool never leaves an underlying route highlighted.",
@@ -8451,7 +8658,7 @@
8451
8658
  "Mobile global surfaces conceal and inert the routed workspace without unmounting it, preserving nested routes and scroll state.",
8452
8659
  "Managed rail accessories are intentionally omitted below 768px. Applications that need equivalent persistent mobile status provide it through the top banner or status region; ShellApp does not convert rail accessories into mobile tool views.",
8453
8660
  "Keep PanelNav width, BarNav height, PanelTools chrome, and main-content origin stable except during intentional responsive or collapse transitions.",
8454
- "The routed content cell and tools cell expose separate anchored-overlay collision boundaries, so top-layer menus and tooltips remain above local clipping without crossing into neighboring shell lanes. Full-screen modal overlays remain viewport-owned.",
8661
+ "The routed content cell and tools cell expose separate anchored-overlay collision boundaries, so top-layer menus and tooltips remain above local clipping without crossing into neighboring shell lanes. Full-screen modal overlays remain viewport-owned. While PanelTools is fullscreen, the tools-lane marker is omitted so collision follows the fullscreen PanelTools surface (or the viewport fallback) instead of the in-flow drawer-width tools column.",
8455
8662
  "Paper texture chrome is desktop/tablet-only and follows the fixed viewport phase of the shell chrome; mobile remains a solid primary stage.",
8456
8663
  "Managed page-header capacity follows only the fixed shell breakpoint: roomy on desktop and compact on tablet. Opening PanelTools does not compact or constrain BarTitle.",
8457
8664
  "Mobile keeps at most the first eligible ordered icon command visible and moves labeled buttons, menu choices, split actions, and explicit overflow commands into one shell-owned text-only page-actions menu.",
@@ -8625,6 +8832,7 @@
8625
8832
  ],
8626
8833
  "registryDependencies": [
8627
8834
  "bar-nav",
8835
+ "bar-page-title",
8628
8836
  "bar-title",
8629
8837
  "button-filled",
8630
8838
  "button-unfilled",
@@ -9844,13 +10052,13 @@
9844
10052
  "The rendered structure uses a native table, caption, column headers, row groups, and data cells; keep the caption non-empty. The native caption remains visually hidden as the table's accessible name. When caption visibility is enabled, a 48px header bar renders as component chrome outside the data scrollport. It defaults to a presentational caption title that does not duplicate the accessible name. Application-owned labeled controls supplied through the single named header slot replace that fallback and share one horizontal caption overflow row with table-owned actions inside the component-owned 8px inset. Table caption buttons keep pressed interaction paint without physically scaling. When columnCustomizer is enabled, the table adds a trailing Customize control named Customize table. Its label uses regular weight and its resting foreground remains neutral when hidden or reordered columns differ from the catalog default. The control is icon-label at typical widths and the icon-only Table menu button below 900px, where a tooltip preserves the Customize label. The always-icon-only table-variant control also exposes its label through a tooltip. Otherwise the header slot receives the complete content width.",
9845
10053
  "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.",
9846
10054
  "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.",
9847
- "Sorting controls remain buttons inside column headers and expose the table's one controlled member-row sort through aria-sort. ds-table-sort in the toolbar trailing cluster is the matching menu of Data and Direction sections; it emits the same dsSortChange shape so header clicks and menu choices stay in sync. Grouping never adds a second sort indicator or header control; ds-table-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.",
10055
+ "Sorting controls remain buttons inside column headers and expose the table's one controlled member-row sort through aria-sort. ds-table-sort in the toolbar trailing cluster is the matching menu of Data and 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-table-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.",
9848
10056
  "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.",
9849
10057
  "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.",
9850
10058
  "Scrollable table regions become keyboard focusable and named only when overflow exists.",
9851
10059
  "Incremental loading, newly appended row counts, failures, and end-of-results transitions are announced through a polite status region without replacing visible state. In grouped tables, announcements name the independently loading group.",
9852
10060
  "Applications may pass their controlled literal search terms through highlightTerms after applying their own filtering. When TableSearch scopes the query, pass the same selected field identities through highlightFieldIds. A compound column maps its ordered headerSegments to primary, secondary-run, and tertiary-run data points; simple columns map their column ID to every owned text track. With no highlightFieldIds every text track remains eligible. Matching text is rendered with semantic mark elements, so the emphasis is identifiable independently of its faint-brand background and bold-brand foreground. Highlight markup preserves source order, the cell's complete accessible text, and does not create extra announcements.",
9853
- "Static and infinite tables may show an optional result summary footer when displayedCount and totalCount are finite. Virtual mode shows a total-only summary and ignores displayedCount. Pagination mode instead renders a named Pagination control with a compact selected-size total, vertical divider, and page position; range changes are announced independently with complete phrasing. Unmodified Left and Right Arrow request the adjacent page while focus is inside a paginated table or on a containing page scroller that owns it; editable fields, choice controls, sliders, open menus, and modified key combinations retain their own keyboard behavior. A table-owned footer slot can replace summary copy, while footer-leading and footer-trailing remain available in the same compact-bar anatomy. Nested dialog footers are ignored."
10061
+ "Static and infinite tables may show an optional result summary footer when displayedCount and totalCount are finite. Virtual mode shows a total-only summary and ignores displayedCount. Pagination mode instead renders a named Pagination control with a page-size picker, vertical divider, and page position; range changes are announced independently with complete phrasing. Unmodified Left and Right Arrow request the adjacent page while focus is inside a paginated table or on a containing page scroller that owns it; editable fields, choice controls, sliders, open menus, and modified key combinations retain their own keyboard behavior. A table-owned footer slot can replace summary copy, while footer-leading and footer-trailing remain available in the same compact-bar anatomy. Nested dialog footers are ignored."
9854
10062
  ],
9855
10063
  "states": [
9856
10064
  "Columns, rows, groups, grouping, sorting, selected row IDs, collapsed group IDs, highlightTerms, highlightFieldIds, hiddenColumnIds, columnOrder, 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 hiddenColumnIds or columnOrder 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.",
@@ -9863,7 +10071,7 @@
9863
10071
  "When pagination enables Fit to page on a bounded table, the table proposes the number of complete top-level rows that fit below its column header. Grouped tables count group headers only; member rows never affect capacity. Selecting Fit captures that numeric snapshot. A changed fitIdentity requests one fresh snapshot for a new query shape, while viewport resizing alone does not change the active controlled page size.",
9864
10072
  "Rows opt into complete-row activation with interactive and emit dsRowActivate without owning navigation. Selection paints through the shared selected ::before layer; interactive hover and press paint through the shared ::after layer.",
9865
10073
  "Row selection owns the single sticky start lane. One explicitly sized application column can own the sticky end lane, or the start lane when selection is absent. Each sticky boundary owns one fixed divider and a row-clipped directional shadow that paints into the adjacent scrolling columns only while more inline content remains beyond that edge.",
9866
- "Cells accept scalar content, standard primary-and-secondary or dual-primary text primitives, declarative Tag, wrapping multiple-Tag content, icon-only, icon-and-text, 16:9 Image, or ButtonUnfilled Action content, or explicit Empty and Blank absence values. Text objects may declare an optional href (and target) on the primary track only; the table renders a native anchor with the shared brand text-action treatment when the URL is safe, and leaves scalars unlinked. Standard secondary copy defaults to the secondary foreground and may declare a semantic Text color when the application data carries intent; an optional tertiary track uses the same subdued body-small recipe as secondary. Secondary and tertiary may also be a short list of colorable runs, rendered on one line with the table's middle-dot separator. A run may supply help to add the shared dotted underline and a bottom-start Tooltip when compact visible copy summarizes supplementary details; explicit line breaks create a compact unbulleted list without obscuring the current cell's earlier tracks. Dual-primary copy keeps both tracks primary unless explicitly colored and does not gain a tertiary track. Body data cells share 8px outer padding; header and group rows keep their own geometry. Text tracks, including Empty, keep 4px inline padding so copy lines up with column-header labels; Tag and icon-only tracks stay on the 8px cell chrome alone. Icon-and-text cells (`kind: 'icon-text'`) place one md prefix icon beside the same copy stack as a text cell. The icon slot takes 2px padding on every side, then a 2px flex gap before the copy; text-track padding stays on the copy. Omit iconLabel when the glyph is decorative. 20px content (body-medium text, md icon, and the row checkbox) sits in a 24px track so it stays optically aligned with 24px Tag and Action content. Single-track text, selection, tag-only, icon-only, icon-and-text, Action, Empty, Blank, and 1-track Image cells resolve a 40px base contract while two-track cells grow to 64px and three-track cells grow to 88px. Every later track adds 24px, so four tracks resolve to 112px, five to 136px, and the sequence may continue. Tracks stack with no gap. Wrapping primary on a 1-track cell uses that same rhythm: two wrapped lines share the 64px row and three wrapped lines share the 88px row. Wrapping secondary keeps primary on the first track and consumes later tracks: two secondary lines share the 88px row and three secondary lines share a 112px fourth track. Keep the same track count in every row of a table or group when those rows should share one height. Tag cells use the inset Tag recipe: md double-inset is a 24px control for tag-only and tag-with-text, while text-with-tag uses sm single-inset at 20px so the second-track pill sits in the same 24px lane. Multiple-Tag cells use `kind: 'tags'`, a positive `tracks` count, and small single-inset Tags that wrap naturally at the column edge. Each wrap line is a 24px track with no stack gap, matching text. The tallest cell establishes the native row height, so all sibling cells match even at four, five, or more tracks; virtual tables use the declared count as the initial estimate and measure responsive wrapping after paint. Action cells primarily use an icon-only Ellipses treatment, render a 24px small ButtonUnfilled, default to unbordered, and emit row, column, and action identities through dsCellAction. When an action cell declares items, that Ellipses trigger opens the shared ds-menu for commands, dividers, inactive rows, and destructive rows instead of emitting on click; choosing a command emits dsCellAction with that item's actionId. Omit items to keep a single-shot control. Image cells declare tracks 1, 2, or 3 so the 16:9 bordered preview fills that body-row content box (cell height minus 8px padding) and the column hugs the resulting width; omit tracks for the 1-track recipe, and keep image tracks aligned with the other cells in the table or group. Image cells fall back to an accessible placeholder when no source is supplied. Empty means the data applies but has no value and renders an em dash with localized assistive text; Blank means the data is not applicable and renders no content. Nullish values remain backward-compatible Empty values. Stable type, variant, and track-count hooks keep every cell family independently styleable.",
10074
+ "Cells accept scalar content, standard primary-and-secondary or dual-primary text primitives, declarative Tag, wrapping multiple-Tag content, icon-only, icon-and-text, 16:9 Image, or ButtonUnfilled Action content, or explicit Empty and Blank absence values. Text objects may declare an optional href (and target) on the primary track only; the table renders a native anchor with the shared brand text-action treatment when the URL is safe, and leaves scalars unlinked. Standard secondary copy defaults to the secondary foreground and may declare a semantic Text color when the application data carries intent; an optional tertiary track uses the same subdued body-small recipe as secondary. Secondary and tertiary may also be a short list of colorable runs, rendered on one line with the table's middle-dot separator. A run may supply help to add the shared dotted underline and a bottom-start Tooltip when compact visible copy summarizes supplementary details; explicit line breaks create a compact unbulleted list without obscuring the current cell's earlier tracks. Dual-primary copy keeps both tracks primary unless explicitly colored and does not gain a tertiary track. Body data cells share 8px outer padding; header and group rows keep their own geometry. Text tracks, including Empty, keep 4px inline padding so copy lines up with column-header labels; Tag and icon-only tracks stay on the 8px cell chrome alone. Icon-and-text cells (`kind: 'icon-text'`) place one md prefix icon beside the same copy stack as a text cell. The icon slot takes 2px padding on every side, then a 2px flex gap before the copy; text-track padding stays on the copy. Omit iconLabel when the glyph is decorative. 20px content (body-medium text, md icon, and the row checkbox) sits in a 24px track so it stays optically aligned with 24px Tag and Action content. Single-track text, selection, tag-only, icon-only, icon-and-text, Action, Empty, Blank, and 1-track Image cells resolve a 40px base contract while two-track cells grow to 64px and three-track cells grow to 88px. Every later track adds 24px, so four tracks resolve to 112px, five to 136px, and the sequence may continue. Tracks stack with no gap. Wrapping primary on a 1-track cell uses that same rhythm: two wrapped lines share the 64px row and three wrapped lines share the 88px row. Wrapping secondary keeps primary on the first track and consumes later tracks: two secondary lines share the 88px row and three secondary lines share a 112px fourth track. Keep the same track count in every row of a table or group when those rows should share one height. Tag cells use the inset Tag recipe: md double-inset is a 24px control for tag-only and tag-with-text, while text-with-tag uses sm single-inset at 20px so the second-track pill sits in the same 24px lane. Multiple-Tag cells use `kind: 'tags'`, a positive `tracks` count, and small single-inset Tags that wrap naturally at the column edge. Each wrap line is a 24px track with no stack gap, matching text. The tallest cell establishes the native row height, so all sibling cells match even at four, five, or more tracks; virtual tables use the declared count as the initial estimate and measure responsive wrapping after paint. Action cells primarily use an icon-only Ellipses treatment, render a 24px small ButtonUnfilled, default to unbordered, and emit row, column, and action identities through dsCellAction. When an action cell declares items, that Ellipses trigger opens the shared ds-menu for commands, dividers, inactive rows, and destructive rows instead of emitting on click; choosing a command emits dsCellAction with that item's actionId. Omit items to keep a single-shot control. Image cells declare tracks 1, 2, or 3 so the 16:9 preview fills that body-row content box (cell height minus 8px padding) and the column hugs the resulting width; omit tracks for the 1-track recipe, and keep image tracks aligned with the other cells in the table or group. The image is clipped to the 2px preview radius and the tertiary border paints as an inset overlay so it remains visible over image pixels. Image cells fall back to an accessible placeholder when no source is supplied. Empty means the data applies but has no value and renders an em dash with localized assistive text; Blank means the data is not applicable and renders no content. Nullish values remain backward-compatible Empty values. Stable type, variant, and track-count hooks keep every cell family independently styleable.",
9867
10075
  "Score-and-text cells (`kind: score-text`) place the small 24px safety score at the top-right of the cell while the same one-, two-, or three-track copy stack as a standard text cell fills from the start edge. The score is top-aligned with the first text track, adds no inner padding, and defaults its accessible name prefix to Safety score. Score-and-text loading geometry uses the matching small score skeleton and declared copy tracks.",
9868
10076
  "The public @ds-mo/ui/table.css export is the authoritative zero-specificity visual recipe. Override its --ds-table-* properties or target its stable element classes for product-specific styling.",
9869
10077
  "Use surfaceOpenRowId to identify the interactive row associated with a visible detail panel or other contextual surface. The application owns opening, same-row toggling, switching records, and closing; retain the identity through exit motion, then clear it. Move it when panel navigation changes the displayed record. This pressed wash spans sticky and scrolling cells, follows stable row identity through virtualization, and never checks a checkbox or changes selectedRowIds. Group expansion remains an inline disclosure."
@@ -10859,7 +11067,7 @@
10859
11067
  {
10860
11068
  "name": "table-sort",
10861
11069
  "title": "TableSort",
10862
- "description": "Toolbar companion for the table's one controlled member-row sort, with a two-section menu for the sort field and direction that mirrors header sorting.",
11070
+ "description": "Toolbar companion for the table's one controlled member-row sort, with Data and Order menu sections that mirror header sorting.",
10863
11071
  "type": "registry:ui",
10864
11072
  "meta": {
10865
11073
  "library": "@ds-mo/ui",
@@ -10870,7 +11078,7 @@
10870
11078
  "intent": {
10871
11079
  "audience": "general",
10872
11080
  "status": "stable",
10873
- "summary": "Toolbar companion for the table's one controlled member-row sort, with a two-section menu for the sort field and direction that mirrors header sorting.",
11081
+ "summary": "Toolbar companion for the table's one controlled member-row sort, with Data and Order menu sections that mirror header sorting.",
10874
11082
  "useWhen": [
10875
11083
  "A table toolbar needs an explicit Sort control alongside Filter and Group.",
10876
11084
  "Sortable columns or compound header segments should be choosable without relying only on column-header clicks."
@@ -10900,7 +11108,7 @@
10900
11108
  ],
10901
11109
  "accessibility": [
10902
11110
  "The trigger is an icon-label menu button named Sort table unless a product aria-label is supplied. Compact caption widths keep that accessible name after the visible label is omitted.",
10903
- "The start-aligned menu has two sections, Data and Direction. Each section presents one selected row through isSelected; the menu is not a single radio group because field and direction are independent.",
11111
+ "The start-aligned menu has two sections, Data and Order. Each section presents one selected row through isSelected; the menu is not a single radio group because field and direction are independent.",
10904
11112
  "Choosing a row applies immediately and keeps the menu open so the other section can be changed. Escape and outside activation close the menu and restore trigger focus."
10905
11113
  ],
10906
11114
  "states": [
@@ -973,7 +973,7 @@
973
973
  "files": [
974
974
  {
975
975
  "path": "src/wc/components/Select/Select.css",
976
- "content": "@import '../../utils/choice-list.css';\n@import '../../utils/control-parts.css';\n@import '../../utils/control-width.css';\n@import '../../utils/field-stack.css';\n@import '../../utils/search-control.css';\n@import '../../utils/select-trigger.css';\n@import '../../utils/table-caption-control.css';\n@import '../../utils/typography.css';\n@import '../../styles/control-elevation.css';\n\n.wrapper--error {\n --ds-interaction-border-width: var(--dimension-stroke-width-018);\n --ds-interaction-border-color: var(--color-border-bold-negative);\n}\n\n.select-popup {\n color: var(--color-foreground-secondary);\n}\n\n.select-option[aria-selected='true'] .ds-choice-item__icon {\n color: var(--color-foreground-primary);\n}\n\n.select-option-row {\n position: relative;\n isolation: isolate;\n}\n\n.select-option-row__action {\n position: absolute;\n top: 50%;\n right: var(--dimension-space-050);\n z-index: var(--dimension-z-index-floating);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--dimension-radius-half);\n background: var(--color-background-transparent);\n -webkit-backdrop-filter: blur(var(--effect-blur-sm));\n backdrop-filter: blur(var(--effect-blur-sm));\n opacity: 0;\n pointer-events: none;\n transform: translateY(-50%);\n}\n\n.select-option-row:has(:focus-visible) .select-option-row__action,\n.select-option-row--action-open .select-option-row__action,\n.select-option-row--keyboard-active .select-option-row__action {\n opacity: 1;\n pointer-events: auto;\n}\n\n.select-option-row--action-open .select-option::after {\n background: var(--ds-interaction-hover);\n}\n\n.select-option__subtext-actions {\n display: flex;\n align-items: center;\n gap: var(--dimension-space-050);\n min-inline-size: 0;\n color: var(--color-foreground-secondary);\n}\n\n.select-option__subtext-action {\n appearance: none;\n display: inline-flex;\n align-items: center;\n padding: 0;\n border: 0;\n border-radius: var(--dimension-radius-025);\n background: transparent;\n cursor: pointer;\n}\n\n.select-option__subtext-action--negative {\n --ds-text-action-foreground: var(--color-foreground-bold-negative);\n}\n\n.select-option__subtext-action-separator {\n color: var(--color-foreground-tertiary);\n pointer-events: none;\n}\n\n@media (hover: hover) and (pointer: fine) {\n .select-option-row:hover .select-option-row__action {\n opacity: 1;\n pointer-events: auto;\n }\n\n .select-option-row:hover .select-option::after {\n background: var(--ds-interaction-hover);\n }\n}\n\n@media (hover: none) {\n .select-option-row__action {\n opacity: 1;\n pointer-events: auto;\n }\n\n .select-option-row--has-action .ds-choice-item__content {\n padding-inline-end: var(--dimension-size-400);\n }\n}\n\n.error-text {\n width: 100%;\n}\n",
976
+ "content": "@import '../../utils/radius.css';\n@import '../../utils/choice-list.css';\n@import '../../utils/control-parts.css';\n@import '../../utils/control-width.css';\n@import '../../utils/field-stack.css';\n@import '../../utils/search-control.css';\n@import '../../utils/select-trigger.css';\n@import '../../utils/table-caption-control.css';\n@import '../../utils/typography.css';\n@import '../../styles/control-elevation.css';\n\n.wrapper--error {\n --ds-interaction-border-width: var(--dimension-stroke-width-018);\n --ds-interaction-border-color: var(--color-border-bold-negative);\n}\n\n.select-popup {\n color: var(--color-foreground-secondary);\n}\n\n.select-option[aria-selected='true'] .ds-choice-item__icon {\n color: var(--color-foreground-primary);\n}\n\n.select-option-row {\n position: relative;\n isolation: isolate;\n}\n\n.select-option-row__action {\n position: absolute;\n top: 50%;\n right: var(--dimension-space-050);\n z-index: var(--dimension-z-index-floating);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--dimension-radius-half);\n background: var(--color-background-transparent);\n -webkit-backdrop-filter: blur(var(--effect-blur-sm));\n backdrop-filter: blur(var(--effect-blur-sm));\n opacity: 0;\n pointer-events: none;\n transform: translateY(-50%);\n}\n\n.select-option-row:has(:focus-visible) .select-option-row__action,\n.select-option-row--action-open .select-option-row__action,\n.select-option-row--keyboard-active .select-option-row__action {\n opacity: 1;\n pointer-events: auto;\n}\n\n.select-option-row--action-open .select-option::after {\n background: var(--ds-interaction-hover);\n}\n\n.select-option__subtext-actions {\n display: flex;\n align-items: center;\n gap: var(--dimension-space-050);\n min-inline-size: 0;\n color: var(--color-foreground-secondary);\n}\n\n.select-option__subtext-action {\n appearance: none;\n display: inline-flex;\n align-items: center;\n padding: 0;\n border: 0;\n border-radius: var(--dimension-radius-025);\n background: transparent;\n cursor: pointer;\n}\n\n.select-option__subtext-action--negative {\n --ds-text-action-foreground: var(--color-foreground-bold-negative);\n}\n\n.select-option__subtext-action-separator {\n color: var(--color-foreground-tertiary);\n pointer-events: none;\n}\n\n@media (hover: hover) and (pointer: fine) {\n .select-option-row:hover .select-option-row__action {\n opacity: 1;\n pointer-events: auto;\n }\n\n .select-option-row:hover .select-option::after {\n background: var(--ds-interaction-hover);\n }\n}\n\n@media (hover: none) {\n .select-option-row__action {\n opacity: 1;\n pointer-events: auto;\n }\n\n .select-option-row--has-action .ds-choice-item__content {\n padding-inline-end: var(--dimension-size-400);\n }\n}\n\n.error-text {\n width: 100%;\n}\n",
977
977
  "type": "registry:ui"
978
978
  },
979
979
  {