@ds-mo/ui 15.3.0 → 15.4.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 (430) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +506 -31
  4. package/dist/angular/ds-checkbox-group.d.ts +12 -0
  5. package/dist/angular/ds-checkbox-group.js +38 -0
  6. package/dist/angular/ds-checkbox.d.ts +1 -1
  7. package/dist/angular/ds-checkbox.js +3 -3
  8. package/dist/angular/ds-inline-banner-settings.d.ts +12 -0
  9. package/dist/angular/ds-inline-banner-settings.js +38 -0
  10. package/dist/angular/ds-radio.d.ts +1 -1
  11. package/dist/angular/ds-radio.js +3 -3
  12. package/dist/angular/ds-setting-row-checkbox.d.ts +12 -0
  13. package/dist/angular/ds-setting-row-checkbox.js +38 -0
  14. package/dist/angular/ds-setting-row-radio.d.ts +12 -0
  15. package/dist/angular/ds-setting-row-radio.js +38 -0
  16. package/dist/angular/ds-setting-row-toggle.d.ts +18 -0
  17. package/dist/angular/{ds-setting-row.js → ds-setting-row-toggle.js} +12 -12
  18. package/dist/angular/index.d.ts +1 -1
  19. package/dist/angular/index.js +5 -1
  20. package/dist/angular/proxies.d.ts +5 -1
  21. package/dist/angular/proxies.js +5 -1
  22. package/dist/components/ds-agent-activity.js +1 -1
  23. package/dist/components/ds-agent-questionnaire.js +1 -1
  24. package/dist/components/ds-agent-response.js +1 -1
  25. package/dist/components/ds-agent-response.js.map +1 -1
  26. package/dist/components/ds-agent-source-list.js +1 -1
  27. package/dist/components/ds-agent-tool-call.js +1 -1
  28. package/dist/components/ds-attachment-list.js +1 -1
  29. package/dist/components/ds-badge.js +1 -1
  30. package/dist/components/ds-banner.js +1 -1
  31. package/dist/components/ds-bar-action.js +1 -1
  32. package/dist/components/ds-bar-nav.js +1 -1
  33. package/dist/components/ds-bar-page-title.js +1 -1
  34. package/dist/components/ds-bar-title.js +1 -1
  35. package/dist/components/ds-bar-workflow.js +1 -1
  36. package/dist/components/ds-breadcrumb.js +1 -1
  37. package/dist/components/ds-button-filled.js +1 -1
  38. package/dist/components/ds-button-inverted.js +1 -1
  39. package/dist/components/ds-button-inverted.js.map +1 -1
  40. package/dist/components/ds-button-unfilled.js +1 -1
  41. package/dist/components/ds-calendar.js +1 -1
  42. package/dist/components/ds-card-action-center.js +1 -1
  43. package/dist/components/ds-card-action-center.js.map +1 -1
  44. package/dist/components/ds-card-chart.js +1 -1
  45. package/dist/components/ds-card-navigation.js +1 -1
  46. package/dist/components/ds-card-navigation.js.map +1 -1
  47. package/dist/components/ds-card-overview.js +1 -1
  48. package/dist/components/ds-card-overview.js.map +1 -1
  49. package/dist/components/ds-card-setting.js +1 -1
  50. package/dist/components/ds-card-setting.js.map +1 -1
  51. package/dist/components/ds-card-settings-scope.js +1 -1
  52. package/dist/components/ds-card-settings-scope.js.map +1 -1
  53. package/dist/components/ds-chart-legend.js +1 -1
  54. package/dist/components/ds-chart-legend.js.map +1 -1
  55. package/dist/components/ds-chart.js +1 -1
  56. package/dist/components/{ds-setting-row.d.ts → ds-checkbox-group.d.ts} +4 -4
  57. package/dist/components/ds-checkbox-group.js +2 -0
  58. package/dist/components/ds-checkbox-group.js.map +1 -0
  59. package/dist/components/ds-checkbox.js +1 -1
  60. package/dist/components/ds-chip.js +1 -1
  61. package/dist/components/ds-code-block.js +1 -1
  62. package/dist/components/ds-conversation-list-item.js +1 -1
  63. package/dist/components/ds-conversation-list-item.js.map +1 -1
  64. package/dist/components/ds-conversation-list-section.js +1 -1
  65. package/dist/components/ds-conversation-list.js +1 -1
  66. package/dist/components/ds-data-customize.js +1 -1
  67. package/dist/components/ds-data-filter.js +1 -1
  68. package/dist/components/ds-data-group.js +1 -1
  69. package/dist/components/ds-data-preferences.js +1 -1
  70. package/dist/components/ds-data-saved-views.js +1 -1
  71. package/dist/components/ds-data-search.js +1 -1
  72. package/dist/components/ds-data-search.js.map +1 -1
  73. package/dist/components/ds-data-sort.js +1 -1
  74. package/dist/components/ds-data-toolbar.js +1 -1
  75. package/dist/components/ds-divider.js +1 -1
  76. package/dist/components/ds-empty-state.js +1 -1
  77. package/dist/components/ds-field.js +1 -1
  78. package/dist/components/ds-filter-menu.js +1 -1
  79. package/dist/components/ds-inline-banner-settings.d.ts +11 -0
  80. package/dist/components/ds-inline-banner-settings.js +2 -0
  81. package/dist/components/ds-inline-banner-settings.js.map +1 -0
  82. package/dist/components/ds-input-date.js +1 -1
  83. package/dist/components/ds-input-date.js.map +1 -1
  84. package/dist/components/ds-input-time.js +1 -1
  85. package/dist/components/ds-input-time.js.map +1 -1
  86. package/dist/components/ds-input.js +1 -1
  87. package/dist/components/ds-map-cluster-marker.js +1 -1
  88. package/dist/components/ds-map-entity-marker.js +1 -1
  89. package/dist/components/ds-markdown.js +1 -1
  90. package/dist/components/ds-menu.js +1 -1
  91. package/dist/components/ds-message-actions.js +1 -1
  92. package/dist/components/ds-message-bubble.js +1 -1
  93. package/dist/components/ds-message-bubble.js.map +1 -1
  94. package/dist/components/ds-message-composer.js +1 -1
  95. package/dist/components/ds-message-composer.js.map +1 -1
  96. package/dist/components/ds-message-scroller.js +1 -1
  97. package/dist/components/ds-message.js +1 -1
  98. package/dist/components/ds-mobile-bar-nav.js +1 -1
  99. package/dist/components/ds-mobile-header.js +1 -1
  100. package/dist/components/ds-mobile-section-switcher.js +1 -1
  101. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  102. package/dist/components/ds-modal.js +1 -1
  103. package/dist/components/ds-pagination.js +1 -1
  104. package/dist/components/ds-panel-nav.js +1 -1
  105. package/dist/components/ds-panel-sub-nav.js +1 -1
  106. package/dist/components/ds-panel-sub-nav.js.map +1 -1
  107. package/dist/components/ds-panel-tool-header.js +1 -1
  108. package/dist/components/ds-panel-tool-search.js +1 -1
  109. package/dist/components/ds-panel-tool-search.js.map +1 -1
  110. package/dist/components/ds-panel-tools.js +1 -1
  111. package/dist/components/ds-paper-texture.js +1 -1
  112. package/dist/components/ds-radio-tile.js +1 -1
  113. package/dist/components/ds-radio-tile.js.map +1 -1
  114. package/dist/components/ds-radio.js +1 -1
  115. package/dist/components/ds-score.js +1 -1
  116. package/dist/components/ds-scroll-overlay.js +1 -1
  117. package/dist/components/ds-scroll-overlay.js.map +1 -1
  118. package/dist/components/ds-select.js +1 -1
  119. package/dist/components/ds-setting-row-checkbox.d.ts +11 -0
  120. package/dist/components/ds-setting-row-checkbox.js +2 -0
  121. package/dist/components/ds-setting-row-checkbox.js.map +1 -0
  122. package/dist/components/ds-setting-row-radio.d.ts +11 -0
  123. package/dist/components/ds-setting-row-radio.js +2 -0
  124. package/dist/components/ds-setting-row-radio.js.map +1 -0
  125. package/dist/components/ds-setting-row-toggle.d.ts +11 -0
  126. package/dist/components/ds-setting-row-toggle.js +2 -0
  127. package/dist/components/ds-setting-row-toggle.js.map +1 -0
  128. package/dist/components/ds-shell-app.js +1 -1
  129. package/dist/components/ds-shell-app.js.map +1 -1
  130. package/dist/components/ds-shell-page.js +1 -1
  131. package/dist/components/ds-shell-tools.js +1 -1
  132. package/dist/components/ds-skeleton.js +1 -1
  133. package/dist/components/ds-slider.js +1 -1
  134. package/dist/components/ds-swatch-picker.js +1 -1
  135. package/dist/components/ds-switch.js +1 -1
  136. package/dist/components/ds-tab-group.js +1 -1
  137. package/dist/components/ds-table.js +1 -1
  138. package/dist/components/ds-table.js.map +1 -1
  139. package/dist/components/ds-tag.js +1 -1
  140. package/dist/components/ds-text.js +1 -1
  141. package/dist/components/ds-textarea.js +1 -1
  142. package/dist/components/ds-textarea.js.map +1 -1
  143. package/dist/components/ds-time-picker.js +1 -1
  144. package/dist/components/ds-toast.js +1 -1
  145. package/dist/components/ds-tooltip-chart.js +1 -1
  146. package/dist/components/ds-tooltip.js +1 -1
  147. package/dist/components/ds-typing-indicator.js +1 -1
  148. package/dist/components/p-7TVdPhGR.js +2 -0
  149. package/dist/components/{p-DHapI2sf.js.map → p-7TVdPhGR.js.map} +1 -1
  150. package/dist/components/{p-7V1AhetH.js → p-B0BQCVkq.js} +2 -2
  151. package/dist/components/{p-Co5MiPNa.js → p-B0EpvBDs.js} +2 -2
  152. package/dist/components/{p-DFkw6wrS.js → p-B39iJO8F.js} +2 -2
  153. package/dist/components/p-B9TM6FqC.js +2 -0
  154. package/dist/components/{p-p_MwknM3.js.map → p-B9TM6FqC.js.map} +1 -1
  155. package/dist/components/{p-AmT4GlhM.js → p-B9y6azEw.js} +2 -2
  156. package/dist/components/p-BDdlJZyL.js +2 -0
  157. package/dist/components/{p-cuZva5tl.js.map → p-BDdlJZyL.js.map} +1 -1
  158. package/dist/components/{p-CrL9wxZg.js → p-BERXvOCf.js} +2 -2
  159. package/dist/components/{p-AM_ht6Im.js → p-BFHpU-uU.js} +2 -2
  160. package/dist/components/{p-B-HOVYoH.js → p-BQspV5U7.js} +2 -2
  161. package/dist/components/p-BWSIw8AQ.js +2 -0
  162. package/dist/components/p-BWSIw8AQ.js.map +1 -0
  163. package/dist/components/p-BhjqYTiY.js +2 -0
  164. package/dist/components/p-BhjqYTiY.js.map +1 -0
  165. package/dist/components/{p-C_gJD8l3.js → p-Bk3poU91.js} +2 -2
  166. package/dist/components/{p-Gb-vTuXr.js → p-BnuNaXR2.js} +2 -2
  167. package/dist/components/p-BwdnVqAY.js +2 -0
  168. package/dist/components/{p-BHI4LcGK.js.map → p-BwdnVqAY.js.map} +1 -1
  169. package/dist/components/p-C4huuwed.js +2 -0
  170. package/dist/components/{p-tJaC01aE.js.map → p-C4huuwed.js.map} +1 -1
  171. package/dist/components/{p-BsM37Prt.js → p-C8V4lkVy.js} +2 -2
  172. package/dist/components/p-CJ1NnOEW.js +2 -0
  173. package/dist/components/p-CJ1NnOEW.js.map +1 -0
  174. package/dist/components/p-CPamUzaj.js +2 -0
  175. package/dist/components/{p-BSuMDPaV.js.map → p-CPamUzaj.js.map} +1 -1
  176. package/dist/components/{p-BU1B6NW8.js → p-CUDocY23.js} +2 -2
  177. package/dist/components/{p-BU1B6NW8.js.map → p-CUDocY23.js.map} +1 -1
  178. package/dist/components/p-CX6ZxUQT.js +2 -0
  179. package/dist/components/p-CX6ZxUQT.js.map +1 -0
  180. package/dist/components/{p-C-c8SJ00.js → p-CZNZTcYS.js} +2 -2
  181. package/dist/components/{p-DQPzqcYR.js → p-CbCN9ew9.js} +2 -2
  182. package/dist/components/p-CeXf9-X3.js.map +1 -1
  183. package/dist/components/p-Cgn-BORA.js +2 -0
  184. package/dist/components/p-Cgn-BORA.js.map +1 -0
  185. package/dist/components/{p-CzQ_JF6A.js → p-Co1rUdOR.js} +2 -2
  186. package/dist/components/p-Co1rUdOR.js.map +1 -0
  187. package/dist/components/{p-D0KD-Nr_.js → p-CwdRaJER.js} +2 -2
  188. package/dist/components/p-D6FRqNhN.js +2 -0
  189. package/dist/components/p-D6FRqNhN.js.map +1 -0
  190. package/dist/components/{p-Cihjy4WY.js → p-D8OWhnID.js} +2 -2
  191. package/dist/components/p-DCyJ3_PL.js +2 -0
  192. package/dist/components/{p-fYZK3zqM.js.map → p-DCyJ3_PL.js.map} +1 -1
  193. package/dist/components/{p-BXSHN1OK.js → p-DIQiHX0q.js} +2 -2
  194. package/dist/components/{p-z8L-YMi3.js → p-DJDbskZf.js} +2 -2
  195. package/dist/components/p-DRdoGSGX.js +2 -0
  196. package/dist/components/{p-DWmYCOKz.js.map → p-DRdoGSGX.js.map} +1 -1
  197. package/dist/components/{p-Bm3KWMe4.js → p-DSZPO06T.js} +2 -2
  198. package/dist/components/{p-C3-dcROG.js → p-DSmDyI2o.js} +2 -2
  199. package/dist/components/{p-DcrdyDRw.js → p-DVEx-Xg9.js} +2 -2
  200. package/dist/components/{p-Bu4OmhKK.js → p-DXk1eml1.js} +2 -2
  201. package/dist/components/{p-B7QEpaMe.js → p-DYQa1DVF.js} +2 -2
  202. package/dist/components/p-DYQa1DVF.js.map +1 -0
  203. package/dist/components/p-DYsE6HLk.js +2 -0
  204. package/dist/components/p-DYsE6HLk.js.map +1 -0
  205. package/dist/components/p-DebLYW7A.js +2 -0
  206. package/dist/components/p-DebLYW7A.js.map +1 -0
  207. package/dist/components/{p-Bh1Fx0aW.js → p-DmSnHVW6.js} +2 -2
  208. package/dist/components/p-Dnt5xUBD.js +2 -0
  209. package/dist/components/{p-C4VeD49U.js.map → p-Dnt5xUBD.js.map} +1 -1
  210. package/dist/components/p-Doa2blZT.js +2 -0
  211. package/dist/components/{p-CztB8Pbq.js.map → p-Doa2blZT.js.map} +1 -1
  212. package/dist/components/{p-CCpJT31M.js → p-Dyqd-cub.js} +2 -2
  213. package/dist/components/{p-CCpJT31M.js.map → p-Dyqd-cub.js.map} +1 -1
  214. package/dist/components/p-DzvTC27M.js +2 -0
  215. package/dist/components/p-DzvTC27M.js.map +1 -0
  216. package/dist/components/p-JBki_jyY.js +2 -0
  217. package/dist/components/{p-BugKaVWc.js.map → p-JBki_jyY.js.map} +1 -1
  218. package/dist/components/p-MOJmB6vX.js +2 -0
  219. package/dist/components/{p-iGNHXFZA.js.map → p-MOJmB6vX.js.map} +1 -1
  220. package/dist/components/{p-BYJtvRQm.js → p-UJMEz8_O.js} +2 -2
  221. package/dist/components/{p-Bo7GxFBh.js → p-_IqSPt5V.js} +2 -2
  222. package/dist/components/p-g0jsfEXz.js +2 -0
  223. package/dist/components/{p-Fkkd3gMB.js.map → p-g0jsfEXz.js.map} +1 -1
  224. package/dist/components/{p-lADW-TI8.js → p-pp1IQN4Z.js} +2 -2
  225. package/dist/docs/components.json +701 -13
  226. package/dist/lib/shell/index.js +1 -1
  227. package/dist/lib/shell/index.js.map +1 -1
  228. package/dist/lint/index.js +1 -1
  229. package/dist/mcp-data/registry/agent-activity.json +1 -1
  230. package/dist/mcp-data/registry/agent-questionnaire.json +1 -1
  231. package/dist/mcp-data/registry/agent-response.json +2 -2
  232. package/dist/mcp-data/registry/agent-source-list.json +1 -1
  233. package/dist/mcp-data/registry/agent-tool-call.json +1 -1
  234. package/dist/mcp-data/registry/attachment-list.json +1 -1
  235. package/dist/mcp-data/registry/avatar.json +1 -1
  236. package/dist/mcp-data/registry/badge.json +1 -1
  237. package/dist/mcp-data/registry/banner.json +1 -1
  238. package/dist/mcp-data/registry/bar-action.json +1 -1
  239. package/dist/mcp-data/registry/bar-nav.json +4 -4
  240. package/dist/mcp-data/registry/bar-page-title.json +3 -3
  241. package/dist/mcp-data/registry/bar-title.json +3 -3
  242. package/dist/mcp-data/registry/bar-workflow.json +1 -1
  243. package/dist/mcp-data/registry/breadcrumb.json +1 -1
  244. package/dist/mcp-data/registry/button-filled.json +1 -1
  245. package/dist/mcp-data/registry/button-inverted.json +1 -1
  246. package/dist/mcp-data/registry/button-unfilled.json +8 -8
  247. package/dist/mcp-data/registry/calendar.json +1 -1
  248. package/dist/mcp-data/registry/card-action-center.json +1 -1
  249. package/dist/mcp-data/registry/card-chart.json +1 -1
  250. package/dist/mcp-data/registry/card-navigation.json +1 -1
  251. package/dist/mcp-data/registry/card-overview.json +1 -1
  252. package/dist/mcp-data/registry/card-setting.json +22 -8
  253. package/dist/mcp-data/registry/card-settings-scope.json +1 -1
  254. package/dist/mcp-data/registry/chart-legend.json +1 -1
  255. package/dist/mcp-data/registry/chart.json +1 -1
  256. package/dist/mcp-data/registry/checkbox-group.json +246 -0
  257. package/dist/mcp-data/registry/checkbox.json +25 -5
  258. package/dist/mcp-data/registry/chip.json +1 -1
  259. package/dist/mcp-data/registry/code-block.json +1 -1
  260. package/dist/mcp-data/registry/conversation-list-item.json +1 -1
  261. package/dist/mcp-data/registry/conversation-list-section.json +1 -1
  262. package/dist/mcp-data/registry/conversation-list.json +1 -1
  263. package/dist/mcp-data/registry/data-customize.json +1 -1
  264. package/dist/mcp-data/registry/data-filter.json +1 -1
  265. package/dist/mcp-data/registry/data-group.json +1 -1
  266. package/dist/mcp-data/registry/data-preferences.json +1 -1
  267. package/dist/mcp-data/registry/data-saved-views.json +1 -1
  268. package/dist/mcp-data/registry/data-search.json +1 -1
  269. package/dist/mcp-data/registry/data-sort.json +1 -1
  270. package/dist/mcp-data/registry/data-toolbar.json +1 -1
  271. package/dist/mcp-data/registry/divider.json +1 -1
  272. package/dist/mcp-data/registry/empty-state.json +1 -1
  273. package/dist/mcp-data/registry/field.json +1 -1
  274. package/dist/mcp-data/registry/filter-menu.json +1 -1
  275. package/dist/mcp-data/registry/icon.json +1 -1
  276. package/dist/mcp-data/registry/inline-banner-settings.json +175 -0
  277. package/dist/mcp-data/registry/input-date.json +1 -1
  278. package/dist/mcp-data/registry/input-time.json +1 -1
  279. package/dist/mcp-data/registry/input.json +1 -1
  280. package/dist/mcp-data/registry/loader.json +1 -1
  281. package/dist/mcp-data/registry/map-cluster-marker.json +1 -1
  282. package/dist/mcp-data/registry/map-entity-marker.json +1 -1
  283. package/dist/mcp-data/registry/markdown.json +1 -1
  284. package/dist/mcp-data/registry/menu.json +1 -1
  285. package/dist/mcp-data/registry/message-actions.json +1 -1
  286. package/dist/mcp-data/registry/message-bubble.json +4 -4
  287. package/dist/mcp-data/registry/message-composer.json +6 -6
  288. package/dist/mcp-data/registry/message-scroller.json +1 -1
  289. package/dist/mcp-data/registry/message.json +2 -2
  290. package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
  291. package/dist/mcp-data/registry/mobile-header.json +1 -1
  292. package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
  293. package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
  294. package/dist/mcp-data/registry/modal.json +1 -1
  295. package/dist/mcp-data/registry/pagination.json +1 -1
  296. package/dist/mcp-data/registry/panel-nav.json +3 -3
  297. package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
  298. package/dist/mcp-data/registry/panel-tool-header.json +3 -3
  299. package/dist/mcp-data/registry/panel-tool-search.json +2 -2
  300. package/dist/mcp-data/registry/panel-tools.json +3 -3
  301. package/dist/mcp-data/registry/paper-texture.json +1 -1
  302. package/dist/mcp-data/registry/radio-tile.json +5 -4
  303. package/dist/mcp-data/registry/radio.json +50 -8
  304. package/dist/mcp-data/registry/registry.json +518 -31
  305. package/dist/mcp-data/registry/score.json +1 -1
  306. package/dist/mcp-data/registry/scroll-overlay.json +1 -1
  307. package/dist/mcp-data/registry/select.json +1 -1
  308. package/dist/mcp-data/registry/setting-row-checkbox.json +197 -0
  309. package/dist/mcp-data/registry/setting-row-radio.json +196 -0
  310. package/dist/mcp-data/registry/{setting-row.json → setting-row-toggle.json} +45 -25
  311. package/dist/mcp-data/registry/shell-app.json +3 -3
  312. package/dist/mcp-data/registry/shell-page.json +1 -1
  313. package/dist/mcp-data/registry/shell-tools.json +1 -1
  314. package/dist/mcp-data/registry/skeleton.json +1 -1
  315. package/dist/mcp-data/registry/slider.json +1 -1
  316. package/dist/mcp-data/registry/swatch-picker.json +1 -1
  317. package/dist/mcp-data/registry/switch.json +3 -3
  318. package/dist/mcp-data/registry/tab-group.json +1 -1
  319. package/dist/mcp-data/registry/table.json +1 -1
  320. package/dist/mcp-data/registry/tag.json +1 -1
  321. package/dist/mcp-data/registry/text.json +1 -1
  322. package/dist/mcp-data/registry/textarea.json +1 -1
  323. package/dist/mcp-data/registry/time-picker.json +1 -1
  324. package/dist/mcp-data/registry/toast.json +1 -1
  325. package/dist/mcp-data/registry/tooltip-chart.json +1 -1
  326. package/dist/mcp-data/registry/tooltip.json +1 -1
  327. package/dist/mcp-data/registry/typing-indicator.json +1 -1
  328. package/dist/react/components.d.ts +5 -1
  329. package/dist/react/components.js +5 -1
  330. package/dist/react/ds-checkbox-group.d.ts +9 -0
  331. package/dist/react/ds-checkbox-group.js +12 -0
  332. package/dist/react/ds-inline-banner-settings.d.ts +9 -0
  333. package/dist/react/ds-inline-banner-settings.js +12 -0
  334. package/dist/react/ds-setting-row-checkbox.d.ts +9 -0
  335. package/dist/react/ds-setting-row-checkbox.js +12 -0
  336. package/dist/react/ds-setting-row-radio.d.ts +9 -0
  337. package/dist/react/ds-setting-row-radio.js +12 -0
  338. package/dist/react/ds-setting-row-toggle.d.ts +12 -0
  339. package/dist/react/ds-setting-row-toggle.js +12 -0
  340. package/dist/types/components/BarPageTitle/BarPageTitle.d.ts +2 -0
  341. package/dist/types/components/BarTitle/bar-title-action-chrome.d.ts +4 -0
  342. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +5 -2
  343. package/dist/types/components/CardSetting/CardSetting.d.ts +12 -2
  344. package/dist/types/components/Checkbox/Checkbox.d.ts +2 -0
  345. package/dist/types/components/CheckboxGroup/CheckboxGroup.d.ts +20 -0
  346. package/dist/types/components/InlineBannerSettings/InlineBannerSettings.d.ts +6 -0
  347. package/dist/types/components/Radio/Radio.d.ts +8 -0
  348. package/dist/types/components/SettingRowCheckbox/SettingRowCheckbox.d.ts +19 -0
  349. package/dist/types/components/SettingRowRadio/SettingRowRadio.d.ts +19 -0
  350. package/dist/types/components/{SettingRow/SettingRow.d.ts → SettingRowToggle/SettingRowToggle.d.ts} +5 -2
  351. package/dist/types/components/Switch/Switch.d.ts +7 -0
  352. package/dist/types/components.d.ts +290 -20
  353. package/dist/vue/components.d.ts +5 -1
  354. package/dist/vue/components.js +5 -1
  355. package/dist/vue/{ds-setting-row.d.ts → ds-checkbox-group.d.ts} +1 -1
  356. package/dist/vue/ds-checkbox-group.js +12 -0
  357. package/dist/vue/ds-checkbox.js +1 -0
  358. package/dist/vue/ds-inline-banner-settings.d.ts +3 -0
  359. package/dist/vue/ds-inline-banner-settings.js +8 -0
  360. package/dist/vue/ds-radio.js +2 -0
  361. package/dist/vue/ds-setting-row-checkbox.d.ts +3 -0
  362. package/dist/vue/ds-setting-row-checkbox.js +11 -0
  363. package/dist/vue/ds-setting-row-radio.d.ts +3 -0
  364. package/dist/vue/ds-setting-row-radio.js +11 -0
  365. package/dist/vue/ds-setting-row-toggle.d.ts +3 -0
  366. package/dist/vue/ds-setting-row-toggle.js +15 -0
  367. package/package.json +3 -3
  368. package/dist/angular/ds-setting-row.d.ts +0 -18
  369. package/dist/components/ds-setting-row.js +0 -2
  370. package/dist/components/ds-setting-row.js.map +0 -1
  371. package/dist/components/p-3bsypMrY.js +0 -2
  372. package/dist/components/p-3bsypMrY.js.map +0 -1
  373. package/dist/components/p-B7QEpaMe.js.map +0 -1
  374. package/dist/components/p-B7bXN-vf.js +0 -2
  375. package/dist/components/p-B7bXN-vf.js.map +0 -1
  376. package/dist/components/p-BHI4LcGK.js +0 -2
  377. package/dist/components/p-BSuMDPaV.js +0 -2
  378. package/dist/components/p-BVwg5XVz.js +0 -2
  379. package/dist/components/p-BVwg5XVz.js.map +0 -1
  380. package/dist/components/p-BugKaVWc.js +0 -2
  381. package/dist/components/p-C4VeD49U.js +0 -2
  382. package/dist/components/p-CI7c9kp-.js +0 -2
  383. package/dist/components/p-CI7c9kp-.js.map +0 -1
  384. package/dist/components/p-CJD0kLeV.js +0 -2
  385. package/dist/components/p-CJD0kLeV.js.map +0 -1
  386. package/dist/components/p-Cc3ZUQlJ.js +0 -2
  387. package/dist/components/p-Cc3ZUQlJ.js.map +0 -1
  388. package/dist/components/p-CzQ_JF6A.js.map +0 -1
  389. package/dist/components/p-CztB8Pbq.js +0 -2
  390. package/dist/components/p-DCLRAH5i.js +0 -2
  391. package/dist/components/p-DCLRAH5i.js.map +0 -1
  392. package/dist/components/p-DHapI2sf.js +0 -2
  393. package/dist/components/p-DWmYCOKz.js +0 -2
  394. package/dist/components/p-DX2RyZba.js +0 -2
  395. package/dist/components/p-DX2RyZba.js.map +0 -1
  396. package/dist/components/p-Dcn1eDVt.js +0 -2
  397. package/dist/components/p-Dcn1eDVt.js.map +0 -1
  398. package/dist/components/p-Fkkd3gMB.js +0 -2
  399. package/dist/components/p-cuZva5tl.js +0 -2
  400. package/dist/components/p-fYZK3zqM.js +0 -2
  401. package/dist/components/p-iGNHXFZA.js +0 -2
  402. package/dist/components/p-p_MwknM3.js +0 -2
  403. package/dist/components/p-tJaC01aE.js +0 -2
  404. package/dist/react/ds-setting-row.d.ts +0 -12
  405. package/dist/react/ds-setting-row.js +0 -12
  406. package/dist/vue/ds-setting-row.js +0 -14
  407. /package/dist/components/{p-7V1AhetH.js.map → p-B0BQCVkq.js.map} +0 -0
  408. /package/dist/components/{p-Co5MiPNa.js.map → p-B0EpvBDs.js.map} +0 -0
  409. /package/dist/components/{p-DFkw6wrS.js.map → p-B39iJO8F.js.map} +0 -0
  410. /package/dist/components/{p-AmT4GlhM.js.map → p-B9y6azEw.js.map} +0 -0
  411. /package/dist/components/{p-CrL9wxZg.js.map → p-BERXvOCf.js.map} +0 -0
  412. /package/dist/components/{p-AM_ht6Im.js.map → p-BFHpU-uU.js.map} +0 -0
  413. /package/dist/components/{p-B-HOVYoH.js.map → p-BQspV5U7.js.map} +0 -0
  414. /package/dist/components/{p-C_gJD8l3.js.map → p-Bk3poU91.js.map} +0 -0
  415. /package/dist/components/{p-Gb-vTuXr.js.map → p-BnuNaXR2.js.map} +0 -0
  416. /package/dist/components/{p-BsM37Prt.js.map → p-C8V4lkVy.js.map} +0 -0
  417. /package/dist/components/{p-C-c8SJ00.js.map → p-CZNZTcYS.js.map} +0 -0
  418. /package/dist/components/{p-DQPzqcYR.js.map → p-CbCN9ew9.js.map} +0 -0
  419. /package/dist/components/{p-D0KD-Nr_.js.map → p-CwdRaJER.js.map} +0 -0
  420. /package/dist/components/{p-Cihjy4WY.js.map → p-D8OWhnID.js.map} +0 -0
  421. /package/dist/components/{p-BXSHN1OK.js.map → p-DIQiHX0q.js.map} +0 -0
  422. /package/dist/components/{p-z8L-YMi3.js.map → p-DJDbskZf.js.map} +0 -0
  423. /package/dist/components/{p-Bm3KWMe4.js.map → p-DSZPO06T.js.map} +0 -0
  424. /package/dist/components/{p-C3-dcROG.js.map → p-DSmDyI2o.js.map} +0 -0
  425. /package/dist/components/{p-DcrdyDRw.js.map → p-DVEx-Xg9.js.map} +0 -0
  426. /package/dist/components/{p-Bu4OmhKK.js.map → p-DXk1eml1.js.map} +0 -0
  427. /package/dist/components/{p-Bh1Fx0aW.js.map → p-DmSnHVW6.js.map} +0 -0
  428. /package/dist/components/{p-BYJtvRQm.js.map → p-UJMEz8_O.js.map} +0 -0
  429. /package/dist/components/{p-Bo7GxFBh.js.map → p-_IqSPt5V.js.map} +0 -0
  430. /package/dist/components/{p-lADW-TI8.js.map → p-pp1IQN4Z.js.map} +0 -0
@@ -258,7 +258,7 @@
258
258
  },
259
259
  "peerDependencies": {
260
260
  "required": [
261
- "@ds-mo/tokens ^6.5.2",
261
+ "@ds-mo/tokens ^6.6.1",
262
262
  "@ds-mo/icons ^8.1.1"
263
263
  ],
264
264
  "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
@@ -166,7 +166,7 @@
166
166
  },
167
167
  "peerDependencies": {
168
168
  "required": [
169
- "@ds-mo/tokens ^6.5.2",
169
+ "@ds-mo/tokens ^6.6.1",
170
170
  "@ds-mo/icons ^8.1.1"
171
171
  ],
172
172
  "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
@@ -1089,7 +1089,7 @@
1089
1089
  "complexPropertyNote": "Assign these non-primitive values as JavaScript properties: boundary, options, sections.",
1090
1090
  "peerDependencies": {
1091
1091
  "required": [
1092
- "@ds-mo/tokens ^6.5.2",
1092
+ "@ds-mo/tokens ^6.6.1",
1093
1093
  "@ds-mo/icons ^8.1.1"
1094
1094
  ],
1095
1095
  "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
@@ -0,0 +1,197 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "setting-row-checkbox",
4
+ "title": "SettingRowCheckbox",
5
+ "description": "Padded settings-row composition for an editable Checkbox group and its non-interactive saved-value readout.",
6
+ "type": "registry:ui",
7
+ "meta": {
8
+ "library": "@ds-mo/ui",
9
+ "distribution": "npm",
10
+ "storybook": "https://zainadeel.github.io/compomo/?path=/story/setting-row-checkbox",
11
+ "source": "src/wc/components/SettingRowCheckbox/SettingRowCheckbox.tsx",
12
+ "intentStatus": "complete",
13
+ "intent": {
14
+ "audience": "general",
15
+ "status": "experimental",
16
+ "summary": "Padded settings-row composition for an editable Checkbox group and its non-interactive saved-value readout.",
17
+ "useWhen": [
18
+ "A settings card needs an independent multi-select Checkbox group as one padded row item.",
19
+ "The same settings card needs to display the saved selected values without interactive checkbox controls in view mode."
20
+ ],
21
+ "avoidWhen": [
22
+ "The Checkbox group is not part of a settings-row surface; compose ds-checkbox-group directly.",
23
+ "Exactly one option may be selected; use component:ds-setting-row-radio.",
24
+ "The setting is a single immediate on/off choice; use component:ds-setting-row-toggle."
25
+ ],
26
+ "commonlyComposedWith": [
27
+ "component:ds-card-setting",
28
+ "component:ds-checkbox-group",
29
+ "component:ds-checkbox"
30
+ ],
31
+ "accessibility": [
32
+ "Pass the settings heading as the row label. Do not pass CheckboxGroup's form label; the row owns the visible heading and points the slotted group at it with aria-labelledby.",
33
+ "Keep each Checkbox's label, checked state, name, value, and dsChange owned by the application. Leave the Checkbox group slotted in view and edit; the row hides it in view.",
34
+ "Do not add a second interaction layer to the row; each Checkbox owns its own focus and activation while settings usage keeps hasInteractionFill false.",
35
+ "View presentation exposes readable label, saved selected-value copy, and optional supporting copy without checkbox semantics, checkbox controls, or a focus target."
36
+ ],
37
+ "states": [
38
+ "The row is a neutral padded composition; selected, focus, mixed, and inactive states belong to the slotted Checkboxes without a choice-list hover or pressed wash.",
39
+ "The owning application handles dsChange on each Checkbox and supplies valueLabel by joining the currently selected option labels.",
40
+ "Heading, saved-value choice, and slotted Checkbox group stay mounted. presentation reflects on the host so view/edit is CSS visibility only; do not swap Host children or ngIf the group.",
41
+ "View presentation hides the slotted Checkbox group with ::slotted host CSS and shows the saved selected values plus optional consequence copy. Omit description on the row and on each Checkbox when there is no supporting copy; view then shows only the selected-value labels. The group stays in the tree."
42
+ ],
43
+ "responsiveBehavior": [
44
+ "The row never exceeds its parent width; the slotted Checkbox group keeps option copy in the flexible column and wraps descriptions when needed."
45
+ ],
46
+ "references": [
47
+ {
48
+ "label": "Settings mock",
49
+ "path": "src/wc/components/SettingRowCheckbox/SettingRowCheckbox.stories.ts"
50
+ }
51
+ ],
52
+ "styling": {
53
+ "rationale": "The row uses the shared settings-row inline inset so view and edit copy share the same 16px origin, and zeros host padding-block because the heading, choice, and checkbox options already own vertical spacing. The heading is row-owned CSS, not CheckboxGroup's form label or control section-heading recipe. Checkbox owns option geometry.",
54
+ "protected": [
55
+ {
56
+ "properties": [
57
+ "padding"
58
+ ],
59
+ "reason": "Keep space-200 inline inset in view and edit, with no extra host padding-block.",
60
+ "props": []
61
+ }
62
+ ],
63
+ "customProperties": []
64
+ }
65
+ },
66
+ "api": {
67
+ "props": {
68
+ "description": {
69
+ "type": "string",
70
+ "resolvedType": "string | undefined",
71
+ "attribute": "description",
72
+ "required": false,
73
+ "mutable": false,
74
+ "description": "Optional consequence or supporting copy for the saved selection."
75
+ },
76
+ "label": {
77
+ "type": "string",
78
+ "resolvedType": "string | undefined",
79
+ "attribute": "label",
80
+ "required": false,
81
+ "mutable": false,
82
+ "description": "Settings heading shown in both presentations. Not CheckboxGroup's form label."
83
+ },
84
+ "presentation": {
85
+ "type": "SettingRowCheckboxPresentation",
86
+ "resolvedType": "\"edit\" | \"view\"",
87
+ "attribute": "presentation",
88
+ "default": "'edit'",
89
+ "required": false,
90
+ "mutable": false,
91
+ "description": "Interactive Checkbox group or non-interactive saved-value readout."
92
+ },
93
+ "valueLabel": {
94
+ "type": "string",
95
+ "resolvedType": "string | undefined",
96
+ "attribute": "value-label",
97
+ "required": false,
98
+ "mutable": false,
99
+ "description": "Saved selected-value labels shown in view presentation."
100
+ }
101
+ },
102
+ "events": [],
103
+ "methods": [],
104
+ "slots": []
105
+ },
106
+ "props": {
107
+ "description": {
108
+ "type": "string",
109
+ "resolvedType": "string | undefined",
110
+ "attribute": "description",
111
+ "required": false,
112
+ "mutable": false,
113
+ "description": "Optional consequence or supporting copy for the saved selection."
114
+ },
115
+ "label": {
116
+ "type": "string",
117
+ "resolvedType": "string | undefined",
118
+ "attribute": "label",
119
+ "required": false,
120
+ "mutable": false,
121
+ "description": "Settings heading shown in both presentations. Not CheckboxGroup's form label."
122
+ },
123
+ "presentation": {
124
+ "type": "SettingRowCheckboxPresentation",
125
+ "resolvedType": "\"edit\" | \"view\"",
126
+ "attribute": "presentation",
127
+ "default": "'edit'",
128
+ "required": false,
129
+ "mutable": false,
130
+ "description": "Interactive Checkbox group or non-interactive saved-value readout."
131
+ },
132
+ "valueLabel": {
133
+ "type": "string",
134
+ "resolvedType": "string | undefined",
135
+ "attribute": "value-label",
136
+ "required": false,
137
+ "mutable": false,
138
+ "description": "Saved selected-value labels shown in view presentation."
139
+ }
140
+ },
141
+ "events": [],
142
+ "methods": [],
143
+ "slots": [],
144
+ "exports": {
145
+ "customElement": "ds-setting-row-checkbox",
146
+ "react": "DsSettingRowCheckbox",
147
+ "vue": "DsSettingRowCheckbox",
148
+ "angular": "DsSettingRowCheckbox"
149
+ },
150
+ "consumption": {
151
+ "install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
152
+ "cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
153
+ "customElements": {
154
+ "import": "import '@ds-mo/ui/dist/components/ds-setting-row-checkbox.js';",
155
+ "example": "<ds-setting-row-checkbox></ds-setting-row-checkbox>"
156
+ },
157
+ "react": {
158
+ "import": "import { DsSettingRowCheckbox } from '@ds-mo/ui/react';",
159
+ "example": "<DsSettingRowCheckbox />"
160
+ },
161
+ "vue": {
162
+ "import": "import { DsSettingRowCheckbox } from '@ds-mo/ui/vue';",
163
+ "example": "<DsSettingRowCheckbox />"
164
+ },
165
+ "angular": {
166
+ "import": "import { DsSettingRowCheckbox } from '@ds-mo/ui/angular/ds-setting-row-checkbox';",
167
+ "example": "<ds-setting-row-checkbox></ds-setting-row-checkbox>"
168
+ },
169
+ "peerDependencies": {
170
+ "required": [
171
+ "@ds-mo/tokens ^6.6.1",
172
+ "@ds-mo/icons ^8.1.1"
173
+ ],
174
+ "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
175
+ }
176
+ }
177
+ },
178
+ "dependencies": [
179
+ "@ds-mo/ui",
180
+ "@ds-mo/tokens"
181
+ ],
182
+ "registryDependencies": [
183
+ "text"
184
+ ],
185
+ "files": [
186
+ {
187
+ "path": "src/wc/components/SettingRowCheckbox/SettingRowCheckbox.css",
188
+ "content": "@import '../../utils/settings-row.css';\n\n:host {\n display: flex;\n flex-direction: column;\n min-width: 0;\n gap: var(--dimension-space-050);\n overflow-wrap: anywhere;\n /* Heading, choice, and checkbox options already own block padding. */\n padding-block: 0;\n}\n\n/* Light-DOM slotted groups do not receive this component's scoped child class.\n Target them with ::slotted so view/edit visibility actually applies. */\n:host ::slotted(ds-checkbox-group) {\n min-width: 0;\n width: 100%;\n}\n\n:host([presentation='view']) ::slotted(ds-checkbox-group) {\n display: none !important;\n}\n\n:host([presentation='edit']) .setting-row-checkbox__choice {\n display: none;\n}\n\nds-text.setting-row-checkbox__heading {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n height: var(--dimension-size-400);\n min-width: 0;\n padding: 0;\n}\n\n.setting-row-checkbox__choice {\n display: grid;\n gap: var(--dimension-space-025);\n min-width: 0;\n padding-block: var(--dimension-space-075);\n}\n",
189
+ "type": "registry:ui"
190
+ },
191
+ {
192
+ "path": "src/wc/components/SettingRowCheckbox/SettingRowCheckbox.tsx",
193
+ "content": "import { Component, Element, h, Host, Prop } from '@stencil/core';\nimport { CONTROL_SUPPORTING_TEXT_VARIANT, CONTROL_TEXT_VARIANT } from '../../utils';\n\nexport type SettingRowCheckboxPresentation = 'edit' | 'view';\n\ntype SettingsCheckboxGroup = HTMLElement & {\n label: string;\n ariaLabel: string | null;\n ariaLabelledby?: string;\n};\n\nlet settingRowCheckboxHeadingId = 0;\n\n/** Padded settings-row composition for a Checkbox group. */\n@Component({\n tag: 'ds-setting-row-checkbox',\n styleUrl: 'SettingRowCheckbox.css',\n scoped: true,\n})\nexport class SettingRowCheckbox {\n @Element() el!: HTMLElement;\n\n /** Interactive Checkbox group or non-interactive saved-value readout. */\n @Prop({ reflect: true }) presentation: SettingRowCheckboxPresentation = 'edit';\n /** Settings heading shown in both presentations. Not CheckboxGroup's form label. */\n @Prop() label?: string;\n /** Saved selected-value labels shown in view presentation. */\n @Prop() valueLabel?: string;\n /** Optional consequence or supporting copy for the saved selection. */\n @Prop() description?: string;\n\n private readonly headingId = `ds-setting-row-checkbox-heading-${++settingRowCheckboxHeadingId}`;\n\n componentWillLoad() {\n this.syncSlottedCheckboxGroup();\n }\n\n componentDidLoad() {\n this.syncSlottedCheckboxGroup();\n }\n\n private syncSlottedCheckboxGroup = () => {\n for (const group of this.el.querySelectorAll<SettingsCheckboxGroup>('ds-checkbox-group')) {\n group.label = '';\n if (this.label) {\n group.ariaLabelledby = this.headingId;\n group.ariaLabel = null;\n }\n }\n };\n\n render() {\n return (\n <Host>\n <ds-text\n key=\"setting-row-checkbox-heading\"\n class=\"setting-row-checkbox__heading\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT.md}\n emphasis\n textId={this.label ? this.headingId : undefined}\n >\n {this.label}\n </ds-text>\n <div key=\"setting-row-checkbox-choice\" class=\"setting-row-checkbox__choice\">\n {this.valueLabel ? (\n <ds-text key=\"setting-row-checkbox-value\" as=\"span\" variant={CONTROL_TEXT_VARIANT.md}>\n {this.valueLabel}\n </ds-text>\n ) : null}\n {this.description?.trim() ? (\n <ds-text\n key=\"setting-row-checkbox-description\"\n as=\"span\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT.md}\n color=\"secondary\"\n >\n {this.description}\n </ds-text>\n ) : null}\n </div>\n <slot onSlotchange={this.syncSlottedCheckboxGroup} />\n </Host>\n );\n }\n}\n",
194
+ "type": "registry:ui"
195
+ }
196
+ ]
197
+ }
@@ -0,0 +1,196 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "setting-row-radio",
4
+ "title": "SettingRowRadio",
5
+ "description": "Padded settings-row composition for an editable Radio group and its non-interactive saved-value readout.",
6
+ "type": "registry:ui",
7
+ "meta": {
8
+ "library": "@ds-mo/ui",
9
+ "distribution": "npm",
10
+ "storybook": "https://zainadeel.github.io/compomo/?path=/story/setting-row-radio",
11
+ "source": "src/wc/components/SettingRowRadio/SettingRowRadio.tsx",
12
+ "intentStatus": "complete",
13
+ "intent": {
14
+ "audience": "general",
15
+ "status": "experimental",
16
+ "summary": "Padded settings-row composition for an editable Radio group and its non-interactive saved-value readout.",
17
+ "useWhen": [
18
+ "A settings card needs a mutually exclusive Radio group as one padded row item.",
19
+ "The same settings card needs to display the saved option without an interactive control in view mode."
20
+ ],
21
+ "avoidWhen": [
22
+ "The Radio group is not part of a settings-row surface; compose ds-radio directly.",
23
+ "The setting allows more than one option to be selected; use component:ds-setting-row-checkbox.",
24
+ "The setting is a single immediate on/off choice; use component:ds-setting-row-toggle."
25
+ ],
26
+ "commonlyComposedWith": [
27
+ "component:ds-card-setting",
28
+ "component:ds-radio"
29
+ ],
30
+ "accessibility": [
31
+ "Pass the settings heading as the row label. Do not pass Radio groupLabel; the row owns the visible heading and points the slotted radiogroup at it with aria-labelledby.",
32
+ "Keep the Radio group's options, value, required state, and selection event owned by the application. Leave the Radio slotted in view and edit; the row hides it in view.",
33
+ "Do not add a second interaction layer to the row; Radio owns option focus and keyboard selection while settings usage keeps hasInteractionFill false.",
34
+ "View presentation exposes readable label, saved value, and optional supporting copy without radio semantics, a radio toggle, or a focus target."
35
+ ],
36
+ "states": [
37
+ "The row is a neutral padded composition; selected, focus, and inactive states belong to the slotted Radio without a choice-list hover or pressed wash.",
38
+ "The owning application handles dsChange and updates the slotted Radio value.",
39
+ "Heading, saved-value choice, and slotted Radio stay mounted. presentation reflects on the host so view/edit is CSS visibility only; do not swap Host children or ngIf the Radio.",
40
+ "View presentation hides the slotted Radio with ::slotted host CSS and shows the saved option label plus optional consequence copy. The Radio stays in the tree."
41
+ ],
42
+ "responsiveBehavior": [
43
+ "The row never exceeds its parent width; the slotted Radio keeps its option copy in the flexible column and wraps descriptions when needed."
44
+ ],
45
+ "references": [
46
+ {
47
+ "label": "Settings mock",
48
+ "path": "src/wc/components/SettingRowRadio/SettingRowRadio.stories.ts"
49
+ }
50
+ ],
51
+ "styling": {
52
+ "rationale": "The row uses the shared settings-row inline inset so view and edit copy share the same 16px origin, and zeros host padding-block because the heading, choice, and radio options already own vertical spacing. The heading is row-owned CSS, not Radio's form group-label or control section-heading recipe. Radio owns option geometry.",
53
+ "protected": [
54
+ {
55
+ "properties": [
56
+ "padding"
57
+ ],
58
+ "reason": "Keep space-200 inline inset in view and edit, with no extra host padding-block.",
59
+ "props": []
60
+ }
61
+ ],
62
+ "customProperties": []
63
+ }
64
+ },
65
+ "api": {
66
+ "props": {
67
+ "description": {
68
+ "type": "string",
69
+ "resolvedType": "string | undefined",
70
+ "attribute": "description",
71
+ "required": false,
72
+ "mutable": false,
73
+ "description": "Optional consequence or supporting copy for the saved option."
74
+ },
75
+ "label": {
76
+ "type": "string",
77
+ "resolvedType": "string | undefined",
78
+ "attribute": "label",
79
+ "required": false,
80
+ "mutable": false,
81
+ "description": "Settings heading shown in both presentations. Not Radio's form groupLabel."
82
+ },
83
+ "presentation": {
84
+ "type": "SettingRowRadioPresentation",
85
+ "resolvedType": "\"edit\" | \"view\"",
86
+ "attribute": "presentation",
87
+ "default": "'edit'",
88
+ "required": false,
89
+ "mutable": false,
90
+ "description": "Interactive Radio group or non-interactive saved-value readout."
91
+ },
92
+ "valueLabel": {
93
+ "type": "string",
94
+ "resolvedType": "string | undefined",
95
+ "attribute": "value-label",
96
+ "required": false,
97
+ "mutable": false,
98
+ "description": "Saved option label shown in view presentation."
99
+ }
100
+ },
101
+ "events": [],
102
+ "methods": [],
103
+ "slots": []
104
+ },
105
+ "props": {
106
+ "description": {
107
+ "type": "string",
108
+ "resolvedType": "string | undefined",
109
+ "attribute": "description",
110
+ "required": false,
111
+ "mutable": false,
112
+ "description": "Optional consequence or supporting copy for the saved option."
113
+ },
114
+ "label": {
115
+ "type": "string",
116
+ "resolvedType": "string | undefined",
117
+ "attribute": "label",
118
+ "required": false,
119
+ "mutable": false,
120
+ "description": "Settings heading shown in both presentations. Not Radio's form groupLabel."
121
+ },
122
+ "presentation": {
123
+ "type": "SettingRowRadioPresentation",
124
+ "resolvedType": "\"edit\" | \"view\"",
125
+ "attribute": "presentation",
126
+ "default": "'edit'",
127
+ "required": false,
128
+ "mutable": false,
129
+ "description": "Interactive Radio group or non-interactive saved-value readout."
130
+ },
131
+ "valueLabel": {
132
+ "type": "string",
133
+ "resolvedType": "string | undefined",
134
+ "attribute": "value-label",
135
+ "required": false,
136
+ "mutable": false,
137
+ "description": "Saved option label shown in view presentation."
138
+ }
139
+ },
140
+ "events": [],
141
+ "methods": [],
142
+ "slots": [],
143
+ "exports": {
144
+ "customElement": "ds-setting-row-radio",
145
+ "react": "DsSettingRowRadio",
146
+ "vue": "DsSettingRowRadio",
147
+ "angular": "DsSettingRowRadio"
148
+ },
149
+ "consumption": {
150
+ "install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
151
+ "cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
152
+ "customElements": {
153
+ "import": "import '@ds-mo/ui/dist/components/ds-setting-row-radio.js';",
154
+ "example": "<ds-setting-row-radio></ds-setting-row-radio>"
155
+ },
156
+ "react": {
157
+ "import": "import { DsSettingRowRadio } from '@ds-mo/ui/react';",
158
+ "example": "<DsSettingRowRadio />"
159
+ },
160
+ "vue": {
161
+ "import": "import { DsSettingRowRadio } from '@ds-mo/ui/vue';",
162
+ "example": "<DsSettingRowRadio />"
163
+ },
164
+ "angular": {
165
+ "import": "import { DsSettingRowRadio } from '@ds-mo/ui/angular/ds-setting-row-radio';",
166
+ "example": "<ds-setting-row-radio></ds-setting-row-radio>"
167
+ },
168
+ "peerDependencies": {
169
+ "required": [
170
+ "@ds-mo/tokens ^6.6.1",
171
+ "@ds-mo/icons ^8.1.1"
172
+ ],
173
+ "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
174
+ }
175
+ }
176
+ },
177
+ "dependencies": [
178
+ "@ds-mo/ui",
179
+ "@ds-mo/tokens"
180
+ ],
181
+ "registryDependencies": [
182
+ "text"
183
+ ],
184
+ "files": [
185
+ {
186
+ "path": "src/wc/components/SettingRowRadio/SettingRowRadio.css",
187
+ "content": "@import '../../utils/settings-row.css';\n\n:host {\n display: flex;\n flex-direction: column;\n min-width: 0;\n gap: var(--dimension-space-050);\n overflow-wrap: anywhere;\n /* Heading, choice, and radio options already own block padding. */\n padding-block: 0;\n}\n\n/* Light-DOM slotted radios do not receive this component's scoped child class.\n Target them with ::slotted so view/edit visibility actually applies. */\n:host ::slotted(ds-radio) {\n min-width: 0;\n width: 100%;\n}\n\n:host([presentation='view']) ::slotted(ds-radio) {\n display: none !important;\n}\n\n:host([presentation='edit']) .setting-row-radio__choice {\n display: none;\n}\n\nds-text.setting-row-radio__heading {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n height: var(--dimension-size-400);\n min-width: 0;\n padding: 0;\n}\n\n.setting-row-radio__choice {\n display: grid;\n gap: var(--dimension-space-025);\n min-width: 0;\n padding-block: var(--dimension-space-075);\n}\n",
188
+ "type": "registry:ui"
189
+ },
190
+ {
191
+ "path": "src/wc/components/SettingRowRadio/SettingRowRadio.tsx",
192
+ "content": "import { Component, Element, h, Host, Prop } from '@stencil/core';\nimport { CONTROL_SUPPORTING_TEXT_VARIANT, CONTROL_TEXT_VARIANT } from '../../utils';\n\nexport type SettingRowRadioPresentation = 'edit' | 'view';\n\ntype SettingsRadio = HTMLElement & {\n groupLabel: string;\n ariaLabel: string | null;\n ariaLabelledby?: string;\n};\n\nlet settingRowRadioHeadingId = 0;\n\n/** Padded settings-row composition for a Radio group. */\n@Component({\n tag: 'ds-setting-row-radio',\n styleUrl: 'SettingRowRadio.css',\n scoped: true,\n})\nexport class SettingRowRadio {\n @Element() el!: HTMLElement;\n\n /** Interactive Radio group or non-interactive saved-value readout. */\n @Prop({ reflect: true }) presentation: SettingRowRadioPresentation = 'edit';\n /** Settings heading shown in both presentations. Not Radio's form groupLabel. */\n @Prop() label?: string;\n /** Saved option label shown in view presentation. */\n @Prop() valueLabel?: string;\n /** Optional consequence or supporting copy for the saved option. */\n @Prop() description?: string;\n\n private readonly headingId = `ds-setting-row-radio-heading-${++settingRowRadioHeadingId}`;\n\n componentWillLoad() {\n this.syncSlottedRadio();\n }\n\n componentDidLoad() {\n this.syncSlottedRadio();\n }\n\n private syncSlottedRadio = () => {\n for (const radio of this.el.querySelectorAll<SettingsRadio>('ds-radio')) {\n radio.groupLabel = '';\n if (this.label) {\n radio.ariaLabelledby = this.headingId;\n radio.ariaLabel = null;\n }\n }\n };\n\n render() {\n return (\n <Host>\n <ds-text\n key=\"setting-row-radio-heading\"\n class=\"setting-row-radio__heading\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT.md}\n emphasis\n textId={this.label ? this.headingId : undefined}\n >\n {this.label}\n </ds-text>\n <div key=\"setting-row-radio-choice\" class=\"setting-row-radio__choice\">\n {this.valueLabel ? (\n <ds-text key=\"setting-row-radio-value\" as=\"span\" variant={CONTROL_TEXT_VARIANT.md}>\n {this.valueLabel}\n </ds-text>\n ) : null}\n {this.description ? (\n <ds-text\n key=\"setting-row-radio-description\"\n as=\"span\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT.md}\n color=\"secondary\"\n >\n {this.description}\n </ds-text>\n ) : null}\n </div>\n <slot onSlotchange={this.syncSlottedRadio} />\n </Host>\n );\n }\n}\n",
193
+ "type": "registry:ui"
194
+ }
195
+ ]
196
+ }
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
- "name": "setting-row",
4
- "title": "SettingRow",
3
+ "name": "setting-row-toggle",
4
+ "title": "SettingRowToggle",
5
5
  "description": "Two-column immediate binary setting with descriptive copy and an accessible switch.",
6
6
  "type": "registry:ui",
7
7
  "meta": {
8
8
  "library": "@ds-mo/ui",
9
9
  "distribution": "npm",
10
- "storybook": "https://zainadeel.github.io/compomo/?path=/story/setting-row",
11
- "source": "src/wc/components/SettingRow/SettingRow.tsx",
10
+ "storybook": "https://zainadeel.github.io/compomo/?path=/story/setting-row-toggle",
11
+ "source": "src/wc/components/SettingRowToggle/SettingRowToggle.tsx",
12
12
  "intentStatus": "complete",
13
13
  "intent": {
14
14
  "audience": "general",
@@ -32,7 +32,9 @@
32
32
  ],
33
33
  "states": [
34
34
  "The application accepts or rejects change requests by updating the controlled checked value and owns persistence and errors.",
35
- "Name the enabled setting consistently; the label must not change when the switch is toggled."
35
+ "Name the enabled setting consistently; the label must not change when the switch is toggled.",
36
+ "Non-emphasis rows without supporting copy use ds-text color secondary (foreground-secondary) on the title. Non-emphasis rows with description keep a primary title.",
37
+ "Supporting copy is text-body-small in every variant."
36
38
  ],
37
39
  "responsiveBehavior": [
38
40
  "The copy wraps while the switch keeps its natural size in the trailing column, including at narrow widths."
@@ -40,18 +42,18 @@
40
42
  "references": [
41
43
  {
42
44
  "label": "Usage states",
43
- "path": "src/wc/components/SettingRow/SettingRow.stories.ts"
45
+ "path": "src/wc/components/SettingRowToggle/SettingRowToggle.stories.ts"
44
46
  }
45
47
  ],
46
48
  "styling": {
47
- "rationale": "The row owns copy/control spacing; its parent owns the section surface and width.",
49
+ "rationale": "The row uses the shared settings-row inset; copy/control columns and the parent section surface stay component-owned.",
48
50
  "protected": [
49
51
  {
50
52
  "properties": [
51
53
  "padding",
52
54
  "gap"
53
55
  ],
54
- "reason": "Preserve the shared settings-row spacing recipe.",
56
+ "reason": "Preserve the shared settings-row inset (space-100 block, space-200 inline) and copy-to-control gap.",
55
57
  "props": []
56
58
  }
57
59
  ],
@@ -93,6 +95,15 @@
93
95
  "required": true,
94
96
  "mutable": false,
95
97
  "description": "Name of the enabled setting."
98
+ },
99
+ "variant": {
100
+ "type": "SettingRowToggleVariant",
101
+ "resolvedType": "\"emphasis\" | \"non-emphasis\"",
102
+ "attribute": "variant",
103
+ "default": "'emphasis'",
104
+ "required": false,
105
+ "mutable": false,
106
+ "description": "Typography recipe for the setting copy."
96
107
  }
97
108
  },
98
109
  "events": [
@@ -142,6 +153,15 @@
142
153
  "required": true,
143
154
  "mutable": false,
144
155
  "description": "Name of the enabled setting."
156
+ },
157
+ "variant": {
158
+ "type": "SettingRowToggleVariant",
159
+ "resolvedType": "\"emphasis\" | \"non-emphasis\"",
160
+ "attribute": "variant",
161
+ "default": "'emphasis'",
162
+ "required": false,
163
+ "mutable": false,
164
+ "description": "Typography recipe for the setting copy."
145
165
  }
146
166
  },
147
167
  "events": [
@@ -157,33 +177,33 @@
157
177
  "methods": [],
158
178
  "slots": [],
159
179
  "exports": {
160
- "customElement": "ds-setting-row",
161
- "react": "DsSettingRow",
162
- "vue": "DsSettingRow",
163
- "angular": "DsSettingRow"
180
+ "customElement": "ds-setting-row-toggle",
181
+ "react": "DsSettingRowToggle",
182
+ "vue": "DsSettingRowToggle",
183
+ "angular": "DsSettingRowToggle"
164
184
  },
165
185
  "consumption": {
166
186
  "install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
167
187
  "cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
168
188
  "customElements": {
169
- "import": "import '@ds-mo/ui/dist/components/ds-setting-row.js';",
170
- "example": "<ds-setting-row></ds-setting-row>"
189
+ "import": "import '@ds-mo/ui/dist/components/ds-setting-row-toggle.js';",
190
+ "example": "<ds-setting-row-toggle></ds-setting-row-toggle>"
171
191
  },
172
192
  "react": {
173
- "import": "import { DsSettingRow } from '@ds-mo/ui/react';",
174
- "example": "<DsSettingRow />"
193
+ "import": "import { DsSettingRowToggle } from '@ds-mo/ui/react';",
194
+ "example": "<DsSettingRowToggle />"
175
195
  },
176
196
  "vue": {
177
- "import": "import { DsSettingRow } from '@ds-mo/ui/vue';",
178
- "example": "<DsSettingRow />"
197
+ "import": "import { DsSettingRowToggle } from '@ds-mo/ui/vue';",
198
+ "example": "<DsSettingRowToggle />"
179
199
  },
180
200
  "angular": {
181
- "import": "import { DsSettingRow } from '@ds-mo/ui/angular/ds-setting-row';",
182
- "example": "<ds-setting-row></ds-setting-row>"
201
+ "import": "import { DsSettingRowToggle } from '@ds-mo/ui/angular/ds-setting-row-toggle';",
202
+ "example": "<ds-setting-row-toggle></ds-setting-row-toggle>"
183
203
  },
184
204
  "peerDependencies": {
185
205
  "required": [
186
- "@ds-mo/tokens ^6.5.2",
206
+ "@ds-mo/tokens ^6.6.1",
187
207
  "@ds-mo/icons ^8.1.1"
188
208
  ],
189
209
  "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
@@ -200,13 +220,13 @@
200
220
  ],
201
221
  "files": [
202
222
  {
203
- "path": "src/wc/components/SettingRow/SettingRow.css",
204
- "content": ":host {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n box-sizing: border-box;\n min-width: 0;\n padding: var(--dimension-space-100) var(--dimension-space-200);\n gap: var(--dimension-space-200);\n}\n\n.setting-row__copy {\n display: flex;\n flex-direction: column;\n min-width: 0;\n gap: var(--dimension-space-050);\n overflow-wrap: anywhere;\n -webkit-user-select: none;\n user-select: none;\n}\n",
223
+ "path": "src/wc/components/SettingRowToggle/SettingRowToggle.css",
224
+ "content": "@import '../../utils/settings-row.css';\n\n:host {\n display: grid;\n grid-template-columns: minmax(0, 1fr) auto;\n align-items: start;\n gap: var(--dimension-space-200);\n}\n\n.setting-row-toggle__copy {\n display: flex;\n flex-direction: column;\n min-width: 0;\n gap: var(--dimension-space-050);\n overflow-wrap: anywhere;\n -webkit-user-select: none;\n user-select: none;\n}\n",
205
225
  "type": "registry:ui"
206
226
  },
207
227
  {
208
- "path": "src/wc/components/SettingRow/SettingRow.tsx",
209
- "content": "import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\n\nlet settingRowSequence = 0;\n\n/** A labeled binary setting that applies immediately through its application owner. */\n@Component({\n tag: 'ds-setting-row',\n styleUrl: 'SettingRow.css',\n scoped: true,\n})\nexport class SettingRow {\n /** Name of the enabled setting. */\n @Prop() label!: string;\n /** Supporting copy explaining the setting and its alternative. */\n @Prop() description?: string;\n /** Controlled enabled state. */\n @Prop() checked = false;\n /** Prevent changes while the setting is unavailable. */\n @Prop() disabled = false;\n\n /** Requests the next value; the application owns acceptance and persistence. */\n @Event() dsChange!: EventEmitter<boolean>;\n\n private readonly rowId = `ds-setting-row-${++settingRowSequence}`;\n\n private handleChange = (event: CustomEvent<boolean>) => {\n event.stopPropagation();\n // Keep the composed switch controlled until the owner accepts this request.\n (event.target as HTMLDsSwitchElement).checked = this.checked;\n this.dsChange.emit(event.detail);\n };\n\n render() {\n return (\n <Host>\n <div class=\"setting-row__copy\">\n <ds-text\n textId={`${this.rowId}-label`}\n variant=\"text-body-medium\"\n color=\"primary\"\n emphasis\n >\n {this.label}\n </ds-text>\n {this.description && (\n <ds-text\n textId={`${this.rowId}-description`}\n variant=\"text-body-medium\"\n color=\"secondary\"\n >\n {this.description}\n </ds-text>\n )}\n </div>\n <ds-switch\n checked={this.checked}\n disabled={this.disabled}\n aria-labelledby={`${this.rowId}-label`}\n aria-describedby={this.description ? `${this.rowId}-description` : undefined}\n onDsChange={this.handleChange}\n />\n </Host>\n );\n }\n}\n",
228
+ "path": "src/wc/components/SettingRowToggle/SettingRowToggle.tsx",
229
+ "content": "import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\nimport { CONTROL_SUPPORTING_TEXT_VARIANT } from '../../utils';\n\nlet settingRowToggleSequence = 0;\n\nexport type SettingRowToggleVariant = 'emphasis' | 'non-emphasis';\n\n/** A labeled binary setting that applies immediately through its application owner. */\n@Component({\n tag: 'ds-setting-row-toggle',\n styleUrl: 'SettingRowToggle.css',\n scoped: true,\n})\nexport class SettingRowToggle {\n /** Name of the enabled setting. */\n @Prop() label!: string;\n /** Supporting copy explaining the setting and its alternative. */\n @Prop() description?: string;\n /** Controlled enabled state. */\n @Prop() checked = false;\n /** Prevent changes while the setting is unavailable. */\n @Prop() disabled = false;\n /** Typography recipe for the setting copy. */\n @Prop() variant: SettingRowToggleVariant = 'emphasis';\n\n /** Requests the next value; the application owns acceptance and persistence. */\n @Event() dsChange!: EventEmitter<boolean>;\n\n private readonly rowId = `ds-setting-row-toggle-${++settingRowToggleSequence}`;\n\n private handleChange = (event: CustomEvent<boolean>) => {\n event.stopPropagation();\n // Keep the composed switch controlled until the owner accepts this request.\n (event.target as HTMLDsSwitchElement).checked = this.checked;\n this.dsChange.emit(event.detail);\n };\n\n render() {\n const hasDescription = Boolean(this.description?.trim());\n const titleColor = this.variant === 'non-emphasis' && !hasDescription ? 'secondary' : 'primary';\n\n return (\n <Host>\n <div class=\"setting-row-toggle__copy\">\n <ds-text\n textId={`${this.rowId}-label`}\n variant=\"text-body-medium\"\n color={titleColor}\n emphasis={this.variant === 'emphasis'}\n >\n {this.label}\n </ds-text>\n {hasDescription && (\n <ds-text\n textId={`${this.rowId}-description`}\n variant={CONTROL_SUPPORTING_TEXT_VARIANT.md}\n color=\"secondary\"\n >\n {this.description}\n </ds-text>\n )}\n </div>\n <ds-switch\n checked={this.checked}\n disabled={this.disabled}\n aria-labelledby={`${this.rowId}-label`}\n aria-describedby={hasDescription ? `${this.rowId}-description` : undefined}\n onDsChange={this.handleChange}\n />\n </Host>\n );\n }\n}\n",
210
230
  "type": "registry:ui"
211
231
  }
212
232
  ]