@ds-mo/ui 15.2.0 → 15.3.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 (403) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +3 -3
  3. package/dist/agent.json +446 -65
  4. package/dist/angular/ds-card-setting.d.ts +1 -1
  5. package/dist/angular/ds-card-setting.js +3 -3
  6. package/dist/angular/ds-input-time.d.ts +1 -1
  7. package/dist/angular/ds-input-time.js +3 -3
  8. package/dist/angular/ds-input.d.ts +5 -1
  9. package/dist/angular/ds-input.js +10 -4
  10. package/dist/angular/ds-map-entity-marker.d.ts +1 -1
  11. package/dist/angular/ds-map-entity-marker.js +3 -3
  12. package/dist/angular/ds-radio-tile.d.ts +15 -0
  13. package/dist/angular/ds-radio-tile.js +43 -0
  14. package/dist/angular/ds-setting-row.d.ts +18 -0
  15. package/dist/angular/ds-setting-row.js +42 -0
  16. package/dist/angular/ds-slider.d.ts +1 -1
  17. package/dist/angular/ds-slider.js +3 -3
  18. package/dist/angular/ds-textarea.d.ts +1 -1
  19. package/dist/angular/ds-textarea.js +3 -3
  20. package/dist/angular/ds-time-picker.d.ts +1 -1
  21. package/dist/angular/ds-time-picker.js +3 -3
  22. package/dist/angular/index.d.ts +1 -1
  23. package/dist/angular/index.js +2 -0
  24. package/dist/angular/number-value-accessor.d.ts +9 -0
  25. package/dist/angular/number-value-accessor.js +39 -0
  26. package/dist/angular/proxies.d.ts +2 -0
  27. package/dist/angular/proxies.js +2 -0
  28. package/dist/angular/radio-value-accessor.d.ts +1 -1
  29. package/dist/angular/radio-value-accessor.js +2 -2
  30. package/dist/angular/select-value-accessor.d.ts +1 -1
  31. package/dist/angular/select-value-accessor.js +2 -2
  32. package/dist/angular/text-value-accessor.d.ts +1 -1
  33. package/dist/angular/text-value-accessor.js +2 -2
  34. package/dist/components/ds-agent-activity.js +1 -1
  35. package/dist/components/ds-agent-questionnaire.js +1 -1
  36. package/dist/components/ds-agent-response.js +1 -1
  37. package/dist/components/ds-agent-source-list.js +1 -1
  38. package/dist/components/ds-agent-tool-call.js +1 -1
  39. package/dist/components/ds-attachment-list.js +1 -1
  40. package/dist/components/ds-badge.js +1 -1
  41. package/dist/components/ds-banner.js +1 -1
  42. package/dist/components/ds-bar-action.js +1 -1
  43. package/dist/components/ds-bar-nav.js +1 -1
  44. package/dist/components/ds-bar-page-title.js +1 -1
  45. package/dist/components/ds-bar-title.js +1 -1
  46. package/dist/components/ds-bar-workflow.js +1 -1
  47. package/dist/components/ds-breadcrumb.js +1 -1
  48. package/dist/components/ds-button-filled.js +1 -1
  49. package/dist/components/ds-button-inverted.js +1 -1
  50. package/dist/components/ds-button-unfilled.js +1 -1
  51. package/dist/components/ds-calendar.js +1 -1
  52. package/dist/components/ds-card-action-center.js +1 -1
  53. package/dist/components/ds-card-chart.js +1 -1
  54. package/dist/components/ds-card-navigation.js +1 -1
  55. package/dist/components/ds-card-overview.js +1 -1
  56. package/dist/components/ds-card-setting.js +1 -1
  57. package/dist/components/ds-card-setting.js.map +1 -1
  58. package/dist/components/ds-card-settings-scope.js +1 -1
  59. package/dist/components/ds-chart-legend.js +1 -1
  60. package/dist/components/ds-chart.js +1 -1
  61. package/dist/components/ds-checkbox.js +1 -1
  62. package/dist/components/ds-chip.js +1 -1
  63. package/dist/components/ds-code-block.js +1 -1
  64. package/dist/components/ds-conversation-list-item.js +1 -1
  65. package/dist/components/ds-conversation-list-section.js +1 -1
  66. package/dist/components/ds-conversation-list.js +1 -1
  67. package/dist/components/ds-data-customize.js +1 -1
  68. package/dist/components/ds-data-customize.js.map +1 -1
  69. package/dist/components/ds-data-filter.js +1 -1
  70. package/dist/components/ds-data-filter.js.map +1 -1
  71. package/dist/components/ds-data-group.js +1 -1
  72. package/dist/components/ds-data-preferences.js +1 -1
  73. package/dist/components/ds-data-preferences.js.map +1 -1
  74. package/dist/components/ds-data-saved-views.js +1 -1
  75. package/dist/components/ds-data-saved-views.js.map +1 -1
  76. package/dist/components/ds-data-search.js +1 -1
  77. package/dist/components/ds-data-search.js.map +1 -1
  78. package/dist/components/ds-data-sort.js +1 -1
  79. package/dist/components/ds-data-toolbar.js +1 -1
  80. package/dist/components/ds-empty-state.js +1 -1
  81. package/dist/components/ds-field.js +1 -1
  82. package/dist/components/ds-filter-menu.js +1 -1
  83. package/dist/components/ds-input-date.js +1 -1
  84. package/dist/components/ds-input-date.js.map +1 -1
  85. package/dist/components/ds-input-time.js +1 -1
  86. package/dist/components/ds-input-time.js.map +1 -1
  87. package/dist/components/ds-input.js +1 -1
  88. package/dist/components/ds-map-cluster-marker.js +1 -1
  89. package/dist/components/ds-map-entity-marker.js +1 -1
  90. package/dist/components/ds-map-entity-marker.js.map +1 -1
  91. package/dist/components/ds-markdown.js +1 -1
  92. package/dist/components/ds-menu.js +1 -1
  93. package/dist/components/ds-message-actions.js +1 -1
  94. package/dist/components/ds-message-bubble.js +1 -1
  95. package/dist/components/ds-message-bubble.js.map +1 -1
  96. package/dist/components/ds-message-composer.js +1 -1
  97. package/dist/components/ds-message-scroller.js +1 -1
  98. package/dist/components/ds-message.js +1 -1
  99. package/dist/components/ds-mobile-bar-nav.js +1 -1
  100. package/dist/components/ds-mobile-header.js +1 -1
  101. package/dist/components/ds-mobile-section-switcher.js +1 -1
  102. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  103. package/dist/components/ds-modal.js +1 -1
  104. package/dist/components/ds-pagination.js +1 -1
  105. package/dist/components/ds-panel-nav.js +1 -1
  106. package/dist/components/ds-panel-sub-nav.js +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.d.ts +11 -0
  113. package/dist/components/ds-radio-tile.js +2 -0
  114. package/dist/components/ds-radio-tile.js.map +1 -0
  115. package/dist/components/ds-radio.js +1 -1
  116. package/dist/components/ds-score.js +1 -1
  117. package/dist/components/ds-scroll-overlay.js +1 -1
  118. package/dist/components/ds-scroll-overlay.js.map +1 -1
  119. package/dist/components/ds-select.js +1 -1
  120. package/dist/components/ds-setting-row.d.ts +11 -0
  121. package/dist/components/ds-setting-row.js +2 -0
  122. package/dist/components/ds-setting-row.js.map +1 -0
  123. package/dist/components/ds-shell-app.js +1 -1
  124. package/dist/components/ds-shell-page.js +1 -1
  125. package/dist/components/ds-shell-tools.js +1 -1
  126. package/dist/components/ds-skeleton.js +1 -1
  127. package/dist/components/ds-slider.js +1 -1
  128. package/dist/components/ds-slider.js.map +1 -1
  129. package/dist/components/ds-swatch-picker.js +1 -1
  130. package/dist/components/ds-switch.js +1 -1
  131. package/dist/components/ds-tab-group.js +1 -1
  132. package/dist/components/ds-table.js +1 -1
  133. package/dist/components/ds-table.js.map +1 -1
  134. package/dist/components/ds-tag.js +1 -1
  135. package/dist/components/ds-text.js +1 -1
  136. package/dist/components/ds-textarea.js +1 -1
  137. package/dist/components/ds-textarea.js.map +1 -1
  138. package/dist/components/ds-time-picker.js +1 -1
  139. package/dist/components/ds-toast.js +1 -1
  140. package/dist/components/ds-tooltip-chart.js +1 -1
  141. package/dist/components/ds-tooltip.js +1 -1
  142. package/dist/components/ds-typing-indicator.js +1 -1
  143. package/dist/components/{p-Br5e83Fr.js → p-3bsypMrY.js} +2 -2
  144. package/dist/components/{p-xhn1cZgU.js → p-AM_ht6Im.js} +2 -2
  145. package/dist/components/{p-B6qQaYkB.js → p-AmT4GlhM.js} +2 -2
  146. package/dist/components/{p-CuWPWC3t.js → p-B-HOVYoH.js} +2 -2
  147. package/dist/components/{p-p0FVyEFa.js → p-B7QEpaMe.js} +2 -2
  148. package/dist/components/{p-BX506yEW.js → p-B7bXN-vf.js} +2 -2
  149. package/dist/components/p-BHI4LcGK.js +2 -0
  150. package/dist/components/p-BHI4LcGK.js.map +1 -0
  151. package/dist/components/{p-CNZ6-kWd.js → p-BSuMDPaV.js} +2 -2
  152. package/dist/components/{p-Dqfc6Nvd.js → p-BU1B6NW8.js} +2 -2
  153. package/dist/components/{p-ZYWnJaye.js → p-BVwg5XVz.js} +2 -2
  154. package/dist/components/{p-C_Ma6Xa-.js → p-BXSHN1OK.js} +2 -2
  155. package/dist/components/{p-ER5M085B.js → p-BYJtvRQm.js} +2 -2
  156. package/dist/components/{p-DFO5lV_A.js → p-Bh1Fx0aW.js} +2 -2
  157. package/dist/components/{p-C1gaWjOm.js → p-Bm3KWMe4.js} +2 -2
  158. package/dist/components/{p-CR-Jjdcn.js → p-Bo7GxFBh.js} +2 -2
  159. package/dist/components/{p-BtnTQp4K.js → p-BsM37Prt.js} +2 -2
  160. package/dist/components/p-Bu4OmhKK.js +2 -0
  161. package/dist/components/{p-Dlp1HqgS.js.map → p-Bu4OmhKK.js.map} +1 -1
  162. package/dist/components/{p-C0JkLR83.js → p-BugKaVWc.js} +2 -2
  163. package/dist/components/p-C-c8SJ00.js +2 -0
  164. package/dist/components/p-C-c8SJ00.js.map +1 -0
  165. package/dist/components/{p-uADksYMl.js → p-C3-dcROG.js} +2 -2
  166. package/dist/components/p-C4VeD49U.js +2 -0
  167. package/dist/components/{p-BR5OC2PX.js.map → p-C4VeD49U.js.map} +1 -1
  168. package/dist/components/{p-DsLXlxt3.js → p-CCpJT31M.js} +2 -2
  169. package/dist/components/p-CCpJT31M.js.map +1 -0
  170. package/dist/components/{p-D7K1ZHML.js → p-CI7c9kp-.js} +2 -2
  171. package/dist/components/{p-mV4vSjSK.js → p-CJD0kLeV.js} +2 -2
  172. package/dist/components/{p-BOhefRMt.js → p-C_gJD8l3.js} +2 -2
  173. package/dist/components/{p-ZwRLjD5M.js → p-Cihjy4WY.js} +2 -2
  174. package/dist/components/p-Co5MiPNa.js +2 -0
  175. package/dist/components/{p-lamoJZE4.js.map → p-Co5MiPNa.js.map} +1 -1
  176. package/dist/components/{p-5SVmAjXY.js → p-CrL9wxZg.js} +2 -2
  177. package/dist/components/{p-CGidq1iC.js → p-CuwopElg.js} +2 -2
  178. package/dist/components/p-CwUXroLs.js +2 -0
  179. package/dist/components/{p-etg-Uk1u.js.map → p-CwUXroLs.js.map} +1 -1
  180. package/dist/components/{p-mux14tWZ.js → p-CzQ_JF6A.js} +2 -2
  181. package/dist/components/{p-BLuqpHvp.js → p-CztB8Pbq.js} +2 -2
  182. package/dist/components/{p-Cn6AfzeF.js → p-D0KD-Nr_.js} +2 -2
  183. package/dist/components/{p-D5HxZrMA.js → p-DCLRAH5i.js} +2 -2
  184. package/dist/components/{p-Cu8o2rOz.js → p-DFkw6wrS.js} +2 -2
  185. package/dist/components/{p-YrnU2fM7.js → p-DHapI2sf.js} +2 -2
  186. package/dist/components/p-DQPzqcYR.js +2 -0
  187. package/dist/components/p-DQPzqcYR.js.map +1 -0
  188. package/dist/components/{p-CTGgXIXM.js → p-DWmYCOKz.js} +2 -2
  189. package/dist/components/p-DX2RyZba.js +2 -0
  190. package/dist/components/{p-mxZoWfnS.js.map → p-DX2RyZba.js.map} +1 -1
  191. package/dist/components/{p-vfCu7XSc.js → p-DZ58Sg5a.js} +2 -2
  192. package/dist/components/{p-C6Aavz9h.js → p-Dcn1eDVt.js} +2 -2
  193. package/dist/components/{p-UY63jmrO.js → p-DcrdyDRw.js} +2 -2
  194. package/dist/components/p-DhKvqh5G.js +2 -0
  195. package/dist/components/p-DhKvqh5G.js.map +1 -0
  196. package/dist/components/p-Fkkd3gMB.js +2 -0
  197. package/dist/components/{p-BfF4RZdp.js.map → p-Fkkd3gMB.js.map} +1 -1
  198. package/dist/components/{p-QWukusRL.js → p-Gb-vTuXr.js} +2 -2
  199. package/dist/components/p-TVkFIMXz.js +2 -0
  200. package/dist/components/p-TVkFIMXz.js.map +1 -0
  201. package/dist/components/p-cuZva5tl.js +2 -0
  202. package/dist/components/{p-CZ7hxDy_.js.map → p-cuZva5tl.js.map} +1 -1
  203. package/dist/components/p-fYZK3zqM.js +2 -0
  204. package/dist/components/{p-BZ_e69zx.js.map → p-fYZK3zqM.js.map} +1 -1
  205. package/dist/components/{p-BzYW1IqO.js → p-iGNHXFZA.js} +2 -2
  206. package/dist/components/{p-BLSSaVWm.js → p-lADW-TI8.js} +2 -2
  207. package/dist/components/{p-BJJh-Bf7.js → p-p_MwknM3.js} +2 -2
  208. package/dist/components/{p-CRk0TjQv.js → p-tJaC01aE.js} +2 -2
  209. package/dist/components/{p-B3CZvMXs.js → p-z8L-YMi3.js} +2 -2
  210. package/dist/docs/components.json +1472 -94
  211. package/dist/framework/angular.d.ts +1 -0
  212. package/dist/framework/angular.js +1 -0
  213. package/dist/lint/index.js +1 -1
  214. package/dist/mcp-data/registry/agent-activity.json +2 -2
  215. package/dist/mcp-data/registry/agent-questionnaire.json +2 -2
  216. package/dist/mcp-data/registry/agent-response.json +2 -2
  217. package/dist/mcp-data/registry/agent-source-list.json +2 -2
  218. package/dist/mcp-data/registry/agent-tool-call.json +2 -2
  219. package/dist/mcp-data/registry/attachment-list.json +2 -2
  220. package/dist/mcp-data/registry/avatar.json +2 -2
  221. package/dist/mcp-data/registry/badge.json +2 -2
  222. package/dist/mcp-data/registry/banner.json +2 -2
  223. package/dist/mcp-data/registry/bar-action.json +2 -2
  224. package/dist/mcp-data/registry/bar-nav.json +2 -2
  225. package/dist/mcp-data/registry/bar-page-title.json +2 -2
  226. package/dist/mcp-data/registry/bar-title.json +2 -2
  227. package/dist/mcp-data/registry/bar-workflow.json +2 -2
  228. package/dist/mcp-data/registry/breadcrumb.json +2 -2
  229. package/dist/mcp-data/registry/button-filled.json +2 -2
  230. package/dist/mcp-data/registry/button-inverted.json +2 -2
  231. package/dist/mcp-data/registry/button-unfilled.json +2 -2
  232. package/dist/mcp-data/registry/calendar.json +2 -2
  233. package/dist/mcp-data/registry/card-action-center.json +2 -2
  234. package/dist/mcp-data/registry/card-chart.json +2 -2
  235. package/dist/mcp-data/registry/card-navigation.json +2 -2
  236. package/dist/mcp-data/registry/card-overview.json +2 -2
  237. package/dist/mcp-data/registry/card-setting.json +36 -15
  238. package/dist/mcp-data/registry/card-settings-scope.json +2 -2
  239. package/dist/mcp-data/registry/chart-legend.json +2 -2
  240. package/dist/mcp-data/registry/chart.json +2 -2
  241. package/dist/mcp-data/registry/checkbox.json +2 -2
  242. package/dist/mcp-data/registry/chip.json +2 -2
  243. package/dist/mcp-data/registry/code-block.json +2 -2
  244. package/dist/mcp-data/registry/conversation-list-item.json +2 -2
  245. package/dist/mcp-data/registry/conversation-list-section.json +2 -2
  246. package/dist/mcp-data/registry/conversation-list.json +2 -2
  247. package/dist/mcp-data/registry/data-customize.json +3 -3
  248. package/dist/mcp-data/registry/data-filter.json +2 -2
  249. package/dist/mcp-data/registry/data-group.json +2 -2
  250. package/dist/mcp-data/registry/data-preferences.json +2 -2
  251. package/dist/mcp-data/registry/data-saved-views.json +2 -2
  252. package/dist/mcp-data/registry/data-search.json +2 -2
  253. package/dist/mcp-data/registry/data-sort.json +2 -2
  254. package/dist/mcp-data/registry/data-toolbar.json +2 -2
  255. package/dist/mcp-data/registry/divider.json +2 -2
  256. package/dist/mcp-data/registry/empty-state.json +27 -14
  257. package/dist/mcp-data/registry/field.json +6 -5
  258. package/dist/mcp-data/registry/filter-menu.json +2 -2
  259. package/dist/mcp-data/registry/icon.json +2 -2
  260. package/dist/mcp-data/registry/input-date.json +2 -2
  261. package/dist/mcp-data/registry/input-time.json +26 -7
  262. package/dist/mcp-data/registry/input.json +265 -15
  263. package/dist/mcp-data/registry/loader.json +2 -2
  264. package/dist/mcp-data/registry/map-cluster-marker.json +3 -3
  265. package/dist/mcp-data/registry/map-entity-marker.json +56 -56
  266. package/dist/mcp-data/registry/markdown.json +2 -2
  267. package/dist/mcp-data/registry/menu.json +2 -2
  268. package/dist/mcp-data/registry/message-actions.json +2 -2
  269. package/dist/mcp-data/registry/message-bubble.json +2 -2
  270. package/dist/mcp-data/registry/message-composer.json +2 -2
  271. package/dist/mcp-data/registry/message-scroller.json +2 -2
  272. package/dist/mcp-data/registry/message.json +2 -2
  273. package/dist/mcp-data/registry/mobile-bar-nav.json +2 -2
  274. package/dist/mcp-data/registry/mobile-header.json +2 -2
  275. package/dist/mcp-data/registry/mobile-section-switcher.json +2 -2
  276. package/dist/mcp-data/registry/mobile-sheet-nav.json +2 -2
  277. package/dist/mcp-data/registry/modal.json +2 -2
  278. package/dist/mcp-data/registry/pagination.json +2 -2
  279. package/dist/mcp-data/registry/panel-nav.json +2 -2
  280. package/dist/mcp-data/registry/panel-sub-nav.json +2 -2
  281. package/dist/mcp-data/registry/panel-tool-header.json +2 -2
  282. package/dist/mcp-data/registry/panel-tool-search.json +2 -2
  283. package/dist/mcp-data/registry/panel-tools.json +2 -2
  284. package/dist/mcp-data/registry/paper-texture.json +2 -2
  285. package/dist/mcp-data/registry/radio-tile.json +398 -0
  286. package/dist/mcp-data/registry/radio.json +2 -2
  287. package/dist/mcp-data/registry/registry.json +453 -66
  288. package/dist/mcp-data/registry/score.json +2 -2
  289. package/dist/mcp-data/registry/scroll-overlay.json +2 -2
  290. package/dist/mcp-data/registry/select.json +2 -2
  291. package/dist/mcp-data/registry/setting-row.json +213 -0
  292. package/dist/mcp-data/registry/shell-app.json +2 -2
  293. package/dist/mcp-data/registry/shell-page.json +2 -2
  294. package/dist/mcp-data/registry/shell-tools.json +2 -2
  295. package/dist/mcp-data/registry/skeleton.json +2 -2
  296. package/dist/mcp-data/registry/slider.json +32 -12
  297. package/dist/mcp-data/registry/swatch-picker.json +2 -2
  298. package/dist/mcp-data/registry/switch.json +2 -2
  299. package/dist/mcp-data/registry/tab-group.json +2 -2
  300. package/dist/mcp-data/registry/table.json +5 -5
  301. package/dist/mcp-data/registry/tag.json +2 -2
  302. package/dist/mcp-data/registry/text.json +2 -2
  303. package/dist/mcp-data/registry/textarea.json +72 -5
  304. package/dist/mcp-data/registry/time-picker.json +28 -9
  305. package/dist/mcp-data/registry/toast.json +2 -2
  306. package/dist/mcp-data/registry/tooltip-chart.json +2 -2
  307. package/dist/mcp-data/registry/tooltip.json +2 -2
  308. package/dist/mcp-data/registry/typing-indicator.json +2 -2
  309. package/dist/react/components.d.ts +2 -0
  310. package/dist/react/components.js +2 -0
  311. package/dist/react/ds-input.d.ts +2 -0
  312. package/dist/react/ds-input.js +2 -0
  313. package/dist/react/ds-radio-tile.d.ts +12 -0
  314. package/dist/react/ds-radio-tile.js +12 -0
  315. package/dist/react/ds-setting-row.d.ts +12 -0
  316. package/dist/react/ds-setting-row.js +12 -0
  317. package/dist/types/components/CardSetting/CardSetting.d.ts +5 -3
  318. package/dist/types/components/CardSetting/index.d.ts +1 -1
  319. package/dist/types/components/EmptyState/EmptyState.d.ts +3 -0
  320. package/dist/types/components/Field/Field.d.ts +4 -0
  321. package/dist/types/components/Input/Input.d.ts +50 -1
  322. package/dist/types/components/InputTime/InputTime.d.ts +3 -0
  323. package/dist/types/components/MapEntityMarker/MapEntityMarker.d.ts +5 -5
  324. package/dist/types/components/RadioTile/RadioTile.d.ts +40 -0
  325. package/dist/types/components/RadioTile/index.d.ts +2 -0
  326. package/dist/types/components/SettingRow/SettingRow.d.ts +18 -0
  327. package/dist/types/components/Slider/Slider.d.ts +8 -1
  328. package/dist/types/components/Slider/index.d.ts +1 -1
  329. package/dist/types/components/Textarea/Textarea.d.ts +12 -0
  330. package/dist/types/components/TimePicker/TimePicker.d.ts +4 -0
  331. package/dist/types/components.d.ts +456 -35
  332. package/dist/types/utils/text-constraints.d.ts +20 -0
  333. package/dist/vue/components.d.ts +2 -0
  334. package/dist/vue/components.js +2 -0
  335. package/dist/vue/ds-card-setting.js +1 -0
  336. package/dist/vue/ds-input-time.js +1 -0
  337. package/dist/vue/ds-input.js +17 -0
  338. package/dist/vue/ds-map-entity-marker.js +2 -2
  339. package/dist/vue/ds-radio-tile.d.ts +3 -0
  340. package/dist/vue/ds-radio-tile.js +24 -0
  341. package/dist/vue/ds-setting-row.d.ts +3 -0
  342. package/dist/vue/ds-setting-row.js +14 -0
  343. package/dist/vue/ds-slider.d.ts +1 -1
  344. package/dist/vue/ds-slider.js +2 -1
  345. package/dist/vue/ds-textarea.js +4 -0
  346. package/dist/vue/ds-time-picker.js +1 -0
  347. package/package.json +5 -5
  348. package/dist/components/p-BCnzbfma.js +0 -2
  349. package/dist/components/p-BCnzbfma.js.map +0 -1
  350. package/dist/components/p-BR5OC2PX.js +0 -2
  351. package/dist/components/p-BZ_e69zx.js +0 -2
  352. package/dist/components/p-BfF4RZdp.js +0 -2
  353. package/dist/components/p-Bv9rSkp0.js +0 -2
  354. package/dist/components/p-Bv9rSkp0.js.map +0 -1
  355. package/dist/components/p-C6zycbhC.js +0 -2
  356. package/dist/components/p-C6zycbhC.js.map +0 -1
  357. package/dist/components/p-CZ7hxDy_.js +0 -2
  358. package/dist/components/p-Dlp1HqgS.js +0 -2
  359. package/dist/components/p-DsLXlxt3.js.map +0 -1
  360. package/dist/components/p-etg-Uk1u.js +0 -2
  361. package/dist/components/p-lamoJZE4.js +0 -2
  362. package/dist/components/p-mxZoWfnS.js +0 -2
  363. package/dist/components/p-xtGGIZmU.js +0 -2
  364. package/dist/components/p-xtGGIZmU.js.map +0 -1
  365. /package/dist/components/{p-Br5e83Fr.js.map → p-3bsypMrY.js.map} +0 -0
  366. /package/dist/components/{p-xhn1cZgU.js.map → p-AM_ht6Im.js.map} +0 -0
  367. /package/dist/components/{p-B6qQaYkB.js.map → p-AmT4GlhM.js.map} +0 -0
  368. /package/dist/components/{p-CuWPWC3t.js.map → p-B-HOVYoH.js.map} +0 -0
  369. /package/dist/components/{p-p0FVyEFa.js.map → p-B7QEpaMe.js.map} +0 -0
  370. /package/dist/components/{p-BX506yEW.js.map → p-B7bXN-vf.js.map} +0 -0
  371. /package/dist/components/{p-CNZ6-kWd.js.map → p-BSuMDPaV.js.map} +0 -0
  372. /package/dist/components/{p-Dqfc6Nvd.js.map → p-BU1B6NW8.js.map} +0 -0
  373. /package/dist/components/{p-ZYWnJaye.js.map → p-BVwg5XVz.js.map} +0 -0
  374. /package/dist/components/{p-C_Ma6Xa-.js.map → p-BXSHN1OK.js.map} +0 -0
  375. /package/dist/components/{p-ER5M085B.js.map → p-BYJtvRQm.js.map} +0 -0
  376. /package/dist/components/{p-DFO5lV_A.js.map → p-Bh1Fx0aW.js.map} +0 -0
  377. /package/dist/components/{p-C1gaWjOm.js.map → p-Bm3KWMe4.js.map} +0 -0
  378. /package/dist/components/{p-CR-Jjdcn.js.map → p-Bo7GxFBh.js.map} +0 -0
  379. /package/dist/components/{p-BtnTQp4K.js.map → p-BsM37Prt.js.map} +0 -0
  380. /package/dist/components/{p-C0JkLR83.js.map → p-BugKaVWc.js.map} +0 -0
  381. /package/dist/components/{p-uADksYMl.js.map → p-C3-dcROG.js.map} +0 -0
  382. /package/dist/components/{p-D7K1ZHML.js.map → p-CI7c9kp-.js.map} +0 -0
  383. /package/dist/components/{p-mV4vSjSK.js.map → p-CJD0kLeV.js.map} +0 -0
  384. /package/dist/components/{p-BOhefRMt.js.map → p-C_gJD8l3.js.map} +0 -0
  385. /package/dist/components/{p-ZwRLjD5M.js.map → p-Cihjy4WY.js.map} +0 -0
  386. /package/dist/components/{p-5SVmAjXY.js.map → p-CrL9wxZg.js.map} +0 -0
  387. /package/dist/components/{p-CGidq1iC.js.map → p-CuwopElg.js.map} +0 -0
  388. /package/dist/components/{p-mux14tWZ.js.map → p-CzQ_JF6A.js.map} +0 -0
  389. /package/dist/components/{p-BLuqpHvp.js.map → p-CztB8Pbq.js.map} +0 -0
  390. /package/dist/components/{p-Cn6AfzeF.js.map → p-D0KD-Nr_.js.map} +0 -0
  391. /package/dist/components/{p-D5HxZrMA.js.map → p-DCLRAH5i.js.map} +0 -0
  392. /package/dist/components/{p-Cu8o2rOz.js.map → p-DFkw6wrS.js.map} +0 -0
  393. /package/dist/components/{p-YrnU2fM7.js.map → p-DHapI2sf.js.map} +0 -0
  394. /package/dist/components/{p-CTGgXIXM.js.map → p-DWmYCOKz.js.map} +0 -0
  395. /package/dist/components/{p-vfCu7XSc.js.map → p-DZ58Sg5a.js.map} +0 -0
  396. /package/dist/components/{p-C6Aavz9h.js.map → p-Dcn1eDVt.js.map} +0 -0
  397. /package/dist/components/{p-UY63jmrO.js.map → p-DcrdyDRw.js.map} +0 -0
  398. /package/dist/components/{p-QWukusRL.js.map → p-Gb-vTuXr.js.map} +0 -0
  399. /package/dist/components/{p-BzYW1IqO.js.map → p-iGNHXFZA.js.map} +0 -0
  400. /package/dist/components/{p-BLSSaVWm.js.map → p-lADW-TI8.js.map} +0 -0
  401. /package/dist/components/{p-BJJh-Bf7.js.map → p-p_MwknM3.js.map} +0 -0
  402. /package/dist/components/{p-CRk0TjQv.js.map → p-tJaC01aE.js.map} +0 -0
  403. /package/dist/components/{p-B3CZvMXs.js.map → p-z8L-YMi3.js.map} +0 -0
@@ -12,8 +12,8 @@
12
12
  "themeSetup": "Set data-theme=\"dark\" on <html> for dark mode. Light is default.",
13
13
  "peerDependencies": {
14
14
  "required": [
15
- "@ds-mo/tokens ^6.5.1",
16
- "@ds-mo/icons ^8.1.0"
15
+ "@ds-mo/tokens ^6.5.2",
16
+ "@ds-mo/icons ^8.1.1"
17
17
  ],
18
18
  "optional": [],
19
19
  "frameworks": "None required for Custom Elements; generated React, Vue, and Angular adapters are included."
@@ -3923,7 +3923,7 @@
3923
3923
  {
3924
3924
  "name": "card-setting",
3925
3925
  "title": "CardSetting",
3926
- "description": "Persistent settings-section surface with a heading, controlled view/edit chrome, fixed edit-save-cancel actions, and application-owned body content.",
3926
+ "description": "Persistent settings-section surface with a heading, optional controlled edit chrome, and application-owned body content.",
3927
3927
  "type": "registry:ui",
3928
3928
  "meta": {
3929
3929
  "library": "@ds-mo/ui",
@@ -3934,17 +3934,17 @@
3934
3934
  "intent": {
3935
3935
  "audience": "general",
3936
3936
  "status": "stable",
3937
- "summary": "Persistent settings-section surface with a heading, controlled view/edit chrome, fixed edit-save-cancel actions, and application-owned body content.",
3937
+ "summary": "Persistent settings-section surface with a heading, optional controlled edit chrome, and application-owned body content.",
3938
3938
  "useWhen": [
3939
3939
  "A settings page needs a persistent section that switches between read-only and editable content.",
3940
3940
  "The parent can control one active editing section and owns validation, persistence, cancellation, and body content.",
3941
- "The section uses the standard Pencil, Save, and Cancel header workflow."
3941
+ "The section uses the standard Pencil, Save, and Cancel header workflow.",
3942
+ "Settings apply immediately through their own controls and share the standard section surface without edit, save, or cancel actions."
3942
3943
  ],
3943
3944
  "avoidWhen": [
3944
3945
  "The surface contains a chart, legend, metric visualization, or other data-visualization composition.",
3945
3946
  "The content is a general-purpose read-only card with no settings edit workflow.",
3946
3947
  "The task must block the rest of the interface or requires confirmation in a modal.",
3947
- "Several sections must remain editable at the same time.",
3948
3948
  "The header requires custom actions beyond the fixed edit-save-cancel workflow."
3949
3949
  ],
3950
3950
  "alternatives": [
@@ -3969,7 +3969,8 @@
3969
3969
  "component:ds-input",
3970
3970
  "component:ds-select",
3971
3971
  "component:ds-switch",
3972
- "component:ds-text"
3972
+ "component:ds-text",
3973
+ "component:ds-setting-row"
3973
3974
  ],
3974
3975
  "accessibility": [
3975
3976
  "Provide a concise heading that identifies the settings section; CardSetting renders it as an h2.",
@@ -3986,10 +3987,11 @@
3986
3987
  "When another section requests edit, the parent keeps one active section and resolves any dirty current section before switching.",
3987
3988
  "The parent owns read-only versus editable body composition, dirty state, validation, persistence, loading, success, and error consequences.",
3988
3989
  "A save request keeps the section editing while validation or persistence is pending; the parent exits only after success.",
3989
- "A cancel request does not persist changes; the parent restores its chosen value snapshot and exits editing."
3990
+ "A cancel request does not persist changes; the parent restores its chosen value snapshot and exits editing.",
3991
+ "The immediate variant keeps the resting card surface and omits header actions even if editing is supplied. The application applies and persists each control change independently."
3990
3992
  ],
3991
3993
  "responsiveBehavior": [
3992
- "Choose sm, md, or lg from the parent layout; each width uses its matching token-based minimum height.",
3994
+ "Choose sm, md, or lg from the parent layout. Editable cards use the matching minimum height; immediate cards fit their content.",
3993
3995
  "The surface never exceeds its parent width, while the parent owns wrapping, columns, stacking, and breakpoint changes.",
3994
3996
  "At narrow widths, keep the fixed header actions visible and let application-owned body layouts collapse before allowing horizontal overflow."
3995
3997
  ],
@@ -4042,9 +4044,10 @@
4042
4044
  "width",
4043
4045
  "min-height"
4044
4046
  ],
4045
- "reason": "Card width selects the component geometry; use cardWidth and let the parent constrain available space.",
4047
+ "reason": "Card width selects the component geometry; immediate cards fit their content. Let the parent constrain available space.",
4046
4048
  "props": [
4047
- "cardWidth"
4049
+ "cardWidth",
4050
+ "variant"
4048
4051
  ]
4049
4052
  }
4050
4053
  ],
@@ -4075,6 +4078,10 @@
4075
4078
  "saveLabel": {
4076
4079
  "type": "string",
4077
4080
  "required": false
4081
+ },
4082
+ "variant": {
4083
+ "type": "CardSettingVariant",
4084
+ "required": false
4078
4085
  }
4079
4086
  },
4080
4087
  "events": [
@@ -6856,7 +6863,7 @@
6856
6863
  {
6857
6864
  "name": "empty-state",
6858
6865
  "title": "EmptyState",
6859
- "description": "Centered empty-content message composed as icon plus title plus body, title plus body, or compact body-only content.",
6866
+ "description": "Centered empty-content message with optional consumer-owned recovery actions.",
6860
6867
  "type": "registry:ui",
6861
6868
  "meta": {
6862
6869
  "library": "@ds-mo/ui",
@@ -6867,16 +6874,16 @@
6867
6874
  "intent": {
6868
6875
  "audience": "general",
6869
6876
  "status": "stable",
6870
- "summary": "Centered empty-content message composed as icon plus title plus body, title plus body, or compact body-only content.",
6877
+ "summary": "Centered empty-content message with optional consumer-owned recovery actions.",
6871
6878
  "useWhen": [
6872
6879
  "A bounded content area is in a first-use, no-content, filtered no-results, or no-access state and needs a calm explanatory message tailored to that cause.",
6873
6880
  "A prominent empty region benefits from a decorative icon, visual title, and supporting body copy.",
6874
- "A compact owner such as a Select popup needs only centered body copy."
6881
+ "A compact owner such as a Select popup needs only centered body copy.",
6882
+ "An empty region needs a concise recovery action that helps the user reveal or create content."
6875
6883
  ],
6876
6884
  "avoidWhen": [
6877
6885
  "Content is still loading; use Skeleton for predictable structure or Loader for an indeterminate operation.",
6878
6886
  "The state is an error, warning, or confirmation that needs semantic intent and announcement from the owning workflow.",
6879
- "The state needs a recovery action, link, or other interactive content; the current EmptyState pattern is intentionally message-only.",
6880
6887
  "A decorative illustration, arbitrary rich content, or custom layout is required."
6881
6888
  ],
6882
6889
  "alternatives": [
@@ -6900,20 +6907,23 @@
6900
6907
  "component:ds-table",
6901
6908
  "component:ds-select",
6902
6909
  "component:ds-text",
6903
- "component:ds-icon"
6910
+ "component:ds-icon",
6911
+ "component:ds-button-unfilled"
6904
6912
  ],
6905
6913
  "accessibility": [
6906
6914
  "The optional icon is decorative; the title and body provide all meaning in text.",
6907
6915
  "EmptyState does not create a live region or alert automatically. The owner decides whether a dynamic transition requires announcement.",
6908
6916
  "The visual title does not impose a document heading level because the correct hierarchy belongs to the consuming page or region.",
6909
- "Keep localized body copy concise and sufficient when using the body-only variant."
6917
+ "Keep localized body copy concise and sufficient when using the body-only variant.",
6918
+ "Give recovery controls explicit accessible names and keep their behavior with the owning workflow."
6910
6919
  ],
6911
6920
  "states": [
6912
6921
  "Supported compositions are icon plus title plus body, title plus body, and body only; body copy is present in every supported composition.",
6913
6922
  "The decorative icon renders at xl in the primary foreground with an 8px gap before the text group and only when a title is also provided.",
6914
6923
  "The visual title uses title-small primary text; body uses body-medium secondary text with a 4px title-to-body gap.",
6915
- "All content is centered. The owner supplies container size and surrounding padding; repeated panel and master-detail owners should share one empty-region geometry instead of wrapping each EmptyState differently. Do not compose actions into or immediately alongside the current EmptyState pattern.",
6916
- "First-use, no-content, no-results, and no-access states reuse this primitive with cause-specific localized messages rather than visual variants."
6924
+ "All content is centered. The owner supplies container size and surrounding padding; repeated panel and master-detail owners should share one empty-region geometry instead of wrapping each EmptyState differently.",
6925
+ "First-use, no-content, no-results, and no-access states reuse this primitive with cause-specific localized messages rather than visual variants.",
6926
+ "Recovery actions are optional. The consumer owns the action labels, control choice, and behavior; the component centers them below the message and wraps multiple actions when needed."
6917
6927
  ],
6918
6928
  "responsiveBehavior": [
6919
6929
  "The owner controls available width and height; text wraps naturally while remaining centered.",
@@ -6961,7 +6971,9 @@
6961
6971
  }
6962
6972
  },
6963
6973
  "events": [],
6964
- "slots": [],
6974
+ "slots": [
6975
+ "actions"
6976
+ ],
6965
6977
  "exports": {
6966
6978
  "customElement": "ds-empty-state",
6967
6979
  "react": "DsEmptyState",
@@ -7034,7 +7046,8 @@
7034
7046
  "Field exposes data-focused, data-filled, data-dirty, data-touched, data-invalid, data-disabled, and data-required hooks while the slotted control remains the source of value and interaction behavior.",
7035
7047
  "A rendered error replaces the description; preserve essential guidance in the error message so users retain what they need to correct the field.",
7036
7048
  "Field owns validation presentation but not validation timing; the form decides when to set error and errorMessage.",
7037
- "The label uses primary body-small emphasis, description uses secondary body-small text, and error uses negative body-small text."
7049
+ "The label uses primary body-small emphasis, description uses secondary body-small text, and error uses negative body-small text.",
7050
+ "Input and Textarea contribute constraint messages and character counts to the supporting row. Helper text yields to an error, with the count at the opposite edge; a count alone begins at the text origin."
7038
7051
  ],
7039
7052
  "responsiveBehavior": [
7040
7053
  "Field fills the width supplied by its parent and makes the slotted control fill that field width.",
@@ -7604,7 +7617,7 @@
7604
7617
  {
7605
7618
  "name": "input",
7606
7619
  "title": "Input",
7607
- "description": "Form-associated single-line text and number field for primary and secondary application backgrounds, with native input behavior, four control densities, optional leading and trailing content, search clearing, and validation.",
7620
+ "description": "Form-associated text and number input with constraints, optional free-text suggestions, token entry, and character counts.",
7608
7621
  "type": "registry:ui",
7609
7622
  "meta": {
7610
7623
  "library": "@ds-mo/ui",
@@ -7615,7 +7628,7 @@
7615
7628
  "intent": {
7616
7629
  "audience": "general",
7617
7630
  "status": "stable",
7618
- "summary": "Form-associated single-line text and number field for primary and secondary application backgrounds, with native input behavior, four control densities, optional leading and trailing content, search clearing, and validation.",
7631
+ "summary": "Form-associated text and number input with constraints, optional free-text suggestions, token entry, and character counts.",
7619
7632
  "useWhen": [
7620
7633
  "A user must enter or edit one line of text, an email address, telephone number, URL, search query, password, or exact number.",
7621
7634
  "The value must participate in native, Angular, React, or Vue form state.",
@@ -7666,7 +7679,7 @@
7666
7679
  "Error text is associated with the native input and announced as an alert when the invalid state is rendered.",
7667
7680
  "Read-only fields remain focusable and submittable while preventing edits; inactive or disabled fields leave the tab order and are omitted from form submission.",
7668
7681
  "Password fields keep a named show-or-hide action beside the value. Revealing the value changes only the native input type; the submitted string does not change. The action restores focus to the field after activation.",
7669
- "Number stepper actions are pointer affordances hidden from the accessibility tree; the native spinbutton remains the single keyboard and assistive-technology control.",
7682
+ "Optional number stepper actions are named buttons available to keyboard and assistive-technology users. The native spinbutton also retains arrow-key stepping; activating either button returns focus to the field.",
7670
7683
  "Prefix and suffix content must not carry information that is otherwise absent from the field's visible label, value, or description.",
7671
7684
  "A nested prefix or suffix Select is a separate control from the editable value and must have its own accessible name."
7672
7685
  ],
@@ -7681,10 +7694,13 @@
7681
7694
  "Search fields used with owned result sets forward aria-controls and aria-activedescendant to the native field so keyboard focus can remain in the query while assistive technology tracks the active result.",
7682
7695
  "The prefix and suffix slots host compact leading or trailing units such as a currency code, or a nested same-size inset Select. Text adornments use the control's balanced text inset. Nested Selects match the field density, set isInset, hasBorder false, width hug, and indicator up-down, keep a selected value, set allowClear false so the menu has no clear footer, set neutralTrigger so the selected unit stays on the secondary adornment foreground, and do not carry the field's error message. Configurable prefix and suffix controls are separated from the editable value by a vertical divider at the density icon height. The nested inset keeps its 2px remainder toward the line; the editable value keeps the same inline padding from the line as a non-prefixed field keeps from its border. The optional leading icon is decorative and does not replace the field label. Password, search-clear, and date or time actions stay type-owned trailing buttons rather than suffix-slot content.",
7683
7696
  "Use autoComplete, inputMode, and enterKeyHint to provide browser and virtual-keyboard hints without changing the value's semantic type.",
7684
- "Number fields preserve native spinbutton semantics, keyboard stepping, and min/max constraint behavior while dsChange continues to report the native string value. Two borderless inset chevron actions split the available inner height, disable independently at their numeric bound, and restore focus to the spinbutton after pointer activation.",
7697
+ "Number fields preserve native spinbutton semantics, keyboard stepping, and min/max constraint behavior while dsChange continues to report the native string value. Optional borderless inset Plus and Minus buttons share the field density, appear in that order, disable independently at their numeric bound, and restore focus to the spinbutton after activation. Hide them when direct numeric entry is preferable; browser spinner chrome stays hidden.",
7685
7698
  "textAlign positions the editable value while the numeric stepper stays on the opposite inline edge, keeping the actions clear of the number: start-aligned values use an inline-end stepper and end-aligned values use an inline-start stepper.",
7686
7699
  "The host exposes focused, filled, dirty, touched, invalid, disabled, read-only, and required data attributes for Field integration and diagnostics.",
7687
- "Use Input only on primary or secondary application backgrounds. It intentionally does not expose alternate surface contexts."
7700
+ "Use Input only on primary or secondary application backgrounds. It intentionally does not expose alternate surface contexts.",
7701
+ "Length constraints validate both typed and programmatic values. By default excess text is retained and shown as an error; restrict mode uses a hard input limit. Counters show the draft length and maximum below the field, beside helper or error text when present.",
7702
+ "Suggestions assist free text rather than constrain selection. Arrow keys highlight suggestions, Enter accepts one, and Escape dismisses the popup without changing the value.",
7703
+ "Tokenized text and search fields use removable double-inset chips and commit trimmed, unique values with Enter or comma, accept delimited paste, and remove the last token with Backspace on an empty draft. Committed tokens submit as repeated entries; value remains the draft and must be committed before submission. Length and pattern constraints apply per token."
7688
7704
  ],
7689
7705
  "responsiveBehavior": [
7690
7706
  "Form fields normally fill their parent; use hug width only in a compact toolbar or filter layout with an explicit width constraint.",
@@ -7694,16 +7710,20 @@
7694
7710
  "frameworkCaveats": {
7695
7711
  "customElements": [
7696
7712
  "Listen for dsChange for user edits and dsClear for the search clear action.",
7697
- "Use the form attribute on the host when associating an input rendered outside its owning form."
7713
+ "Use the form attribute on the host when associating an input rendered outside its owning form.",
7714
+ "Bind committed token arrays through tokens and dsTokensChange, separately from the draft value. Assign suggestions as a JavaScript array."
7698
7715
  ],
7699
7716
  "react": [
7700
- "Use DsInput, bind value for controlled application state, and handle onDsChange and onDsClear."
7717
+ "Use DsInput, bind value for controlled application state, and handle onDsChange and onDsClear.",
7718
+ "Bind committed token arrays through tokens and dsTokensChange, separately from the draft value. Assign suggestions as a JavaScript array."
7701
7719
  ],
7702
7720
  "vue": [
7703
- "Use DsInput with v-model for the value, and listen for dsChange and dsClear."
7721
+ "Use DsInput with v-model for the value, and listen for dsChange and dsClear.",
7722
+ "Bind committed token arrays through tokens and dsTokensChange, separately from the draft value. Assign suggestions as a JavaScript array."
7704
7723
  ],
7705
7724
  "angular": [
7706
- "Import DsInput with TextValueAccessor when integrating with Angular Forms."
7725
+ "Use TextValueAccessor for text inputs and NumericValueAccessor for a statically declared type=\"number\" input. Numeric forms receive numbers or null while the component event remains a string.",
7726
+ "For tokenized input bind tokens and dsTokensChange explicitly; value and dsChange represent only the draft. Do not attach a scalar form value accessor to token mode."
7707
7727
  ]
7708
7728
  },
7709
7729
  "references": [
@@ -7797,6 +7817,10 @@
7797
7817
  "type": "string",
7798
7818
  "required": false
7799
7819
  },
7820
+ "decrementLabel": {
7821
+ "type": "string",
7822
+ "required": false
7823
+ },
7800
7824
  "disabled": {
7801
7825
  "type": "boolean",
7802
7826
  "required": false
@@ -7833,6 +7857,10 @@
7833
7857
  "type": "string | undefined",
7834
7858
  "required": false
7835
7859
  },
7860
+ "incrementLabel": {
7861
+ "type": "string",
7862
+ "required": false
7863
+ },
7836
7864
  "inputId": {
7837
7865
  "type": "string | undefined",
7838
7866
  "required": false
@@ -7845,18 +7873,38 @@
7845
7873
  "type": "boolean",
7846
7874
  "required": false
7847
7875
  },
7876
+ "lengthBehavior": {
7877
+ "type": "'error' | 'restrict'",
7878
+ "required": false
7879
+ },
7848
7880
  "max": {
7849
7881
  "type": "number | undefined",
7850
7882
  "required": false
7851
7883
  },
7884
+ "maxLength": {
7885
+ "type": "number | undefined",
7886
+ "required": false
7887
+ },
7852
7888
  "min": {
7853
7889
  "type": "number | undefined",
7854
7890
  "required": false
7855
7891
  },
7892
+ "minLength": {
7893
+ "type": "number | undefined",
7894
+ "required": false
7895
+ },
7856
7896
  "name": {
7857
7897
  "type": "string | undefined",
7858
7898
  "required": false
7859
7899
  },
7900
+ "pattern": {
7901
+ "type": "string | undefined",
7902
+ "required": false
7903
+ },
7904
+ "patternMessage": {
7905
+ "type": "string | undefined",
7906
+ "required": false
7907
+ },
7860
7908
  "placeholder": {
7861
7909
  "type": "string | undefined",
7862
7910
  "required": false
@@ -7865,6 +7913,10 @@
7865
7913
  "type": "boolean",
7866
7914
  "required": false
7867
7915
  },
7916
+ "removeTokenLabel": {
7917
+ "type": "string",
7918
+ "required": false
7919
+ },
7868
7920
  "required": {
7869
7921
  "type": "boolean",
7870
7922
  "required": false
@@ -7873,10 +7925,18 @@
7873
7925
  "type": "string",
7874
7926
  "required": false
7875
7927
  },
7928
+ "showCharacterCount": {
7929
+ "type": "boolean",
7930
+ "required": false
7931
+ },
7876
7932
  "showPasswordLabel": {
7877
7933
  "type": "string",
7878
7934
  "required": false
7879
7935
  },
7936
+ "showStepper": {
7937
+ "type": "boolean",
7938
+ "required": false
7939
+ },
7880
7940
  "size": {
7881
7941
  "type": "InputSize",
7882
7942
  "required": false
@@ -7885,10 +7945,22 @@
7885
7945
  "type": "number | undefined",
7886
7946
  "required": false
7887
7947
  },
7948
+ "suggestions": {
7949
+ "type": "string[]",
7950
+ "required": false
7951
+ },
7888
7952
  "textAlign": {
7889
7953
  "type": "InputTextAlign",
7890
7954
  "required": false
7891
7955
  },
7956
+ "tokenized": {
7957
+ "type": "boolean",
7958
+ "required": false
7959
+ },
7960
+ "tokens": {
7961
+ "type": "string[]",
7962
+ "required": false
7963
+ },
7892
7964
  "type": {
7893
7965
  "type": "InputType",
7894
7966
  "required": false
@@ -7910,6 +7982,14 @@
7910
7982
  {
7911
7983
  "name": "dsClear",
7912
7984
  "detail": "void"
7985
+ },
7986
+ {
7987
+ "name": "dsSuggestionSelect",
7988
+ "detail": "string"
7989
+ },
7990
+ {
7991
+ "name": "dsTokensChange",
7992
+ "detail": "string[]"
7913
7993
  }
7914
7994
  ],
7915
7995
  "slots": [],
@@ -7927,8 +8007,10 @@
7927
8007
  ],
7928
8008
  "registryDependencies": [
7929
8009
  "button-unfilled",
8010
+ "chip",
7930
8011
  "divider",
7931
8012
  "icon",
8013
+ "input",
7932
8014
  "text"
7933
8015
  ]
7934
8016
  },
@@ -8229,7 +8311,7 @@
8229
8311
  {
8230
8312
  "when": "The hour, minute, and AM/PM lists are needed without a form field.",
8231
8313
  "component": "component:ds-time-picker",
8232
- "reason": "TimePicker owns the bounded 12-hour lists and selected-tile treatment."
8314
+ "reason": "TimePicker owns the bounded clock lists and selected-tile treatment."
8233
8315
  },
8234
8316
  {
8235
8317
  "when": "The user chooses from a finite set of named times or cadences.",
@@ -8247,9 +8329,9 @@
8247
8329
  ],
8248
8330
  "accessibility": [
8249
8331
  "Provide a persistent visible label through the owning field or an external native label.",
8250
- "The text field remains the keyboard and assistive-technology value control. Users can type HH:MM, H:MM, or a 12-hour label such as 9:00 AM.",
8332
+ "The text field remains the keyboard and assistive-technology value control. Users can type HH:MM, H:MM, or a 12- or 24-hour label such as 9:00 AM.",
8251
8333
  "The trailing clock button is a named disclosure that opens a non-modal time dialog. It shares the field's density, uses the single inset recipe, and reports expanded state while the picker is open.",
8252
- "Filled values keep HH:MM as the form value. Visible text uses a 12-hour label such as 9:00 AM so the field does not show 24-hour chrome. That label reuses Input's value typography and text-container inset.",
8334
+ "Filled values keep HH:MM as the form value. Visible text uses a 12- or 24-hour label such as 9:00 AM so the field does not show 24-hour chrome. That label reuses Input's value typography and text-container inset.",
8253
8335
  "Error text is associated with the text field and announced as an alert when the invalid state is rendered.",
8254
8336
  "Read-only fields remain focusable and submittable while preventing edits; inactive or disabled fields leave the tab order and are omitted from form submission."
8255
8337
  ],
@@ -8259,7 +8341,8 @@
8259
8341
  "The normal field boundary uses the shared secondary inset border. Focus promotes it to the thicker bold-brand inset stroke, while error uses the thicker bold-negative inset stroke without changing geometry. When hasBorder is false, supporting error copy insets to the field's text origin rather than the resting border box.",
8260
8342
  "The host exposes focused, filled, dirty, touched, invalid, disabled, read-only, and required data attributes for Field integration and diagnostics.",
8261
8343
  "The trailing clock action is an unfilled icon button of the same density as the field, borderless and square, with the single inset recipe so the 4px height reduction insets it equally from the field's top, end, and bottom edges. It does not replace the field label or the submitted time value. Inactive or disabled fields apply that treatment on the host only, so the nested button is not faded a second time.",
8262
- "Activating the clock button opens the shared TimePicker in a choice-popup dialog anchored to the field's end edge, beside the trailing clock action. Choosing hour, minute, or AM/PM commits that part of the time and leaves the dialog open so the other columns can be adjusted. Typing in the field commits a parsed time without requiring the picker. Invalid typed text reverts to the last committed value on blur."
8344
+ "Activating the clock button opens the shared TimePicker in a choice-popup dialog anchored to the field's end edge, beside the trailing clock action. Choosing hour, minute, or AM/PM commits that part of the time and leaves the dialog open so the other columns can be adjusted. Typing in the field commits a parsed time without requiring the picker. Invalid typed text reverts to the last committed value on blur.",
8345
+ "The default twelve-hour presentation includes AM/PM. Twenty-four-hour presentation uses hours 00–23 and omits the period column; both keep HH:MM form values and the same time bounds."
8263
8346
  ],
8264
8347
  "responsiveBehavior": [
8265
8348
  "Form fields normally fill their parent; use hug width only in a compact toolbar or filter layout with an explicit width constraint.",
@@ -8380,6 +8463,10 @@
8380
8463
  "type": "boolean",
8381
8464
  "required": false
8382
8465
  },
8466
+ "hourFormat": {
8467
+ "type": "'12' | '24'",
8468
+ "required": false
8469
+ },
8383
8470
  "inputId": {
8384
8471
  "type": "string | undefined",
8385
8472
  "required": false
@@ -8609,7 +8696,7 @@
8609
8696
  ],
8610
8697
  "alternatives": [
8611
8698
  {
8612
- "when": "One map entity needs operating state, heading, and stale treatment.",
8699
+ "when": "One map entity needs operating state, bearing, and an optional dashed outline.",
8613
8700
  "component": "component:ds-map-entity-marker",
8614
8701
  "reason": "MapEntityMarker owns single-entity marker semantics and geometry."
8615
8702
  },
@@ -8722,7 +8809,7 @@
8722
8809
  {
8723
8810
  "name": "map-entity-marker",
8724
8811
  "title": "MapEntityMarker",
8725
- "description": "Engine-independent map marker button for a vehicle, asset, person, or travel group with operating-state color, heading, stale treatment, and a hover or focus caption.",
8812
+ "description": "Engine-independent map marker button for a vehicle, asset, person, or travel group with operating-state color, bearing, an optional dashed outline, and a hover or focus caption.",
8726
8813
  "type": "registry:ui",
8727
8814
  "meta": {
8728
8815
  "library": "@ds-mo/ui",
@@ -8733,7 +8820,7 @@
8733
8820
  "intent": {
8734
8821
  "audience": "general",
8735
8822
  "status": "experimental",
8736
- "summary": "Engine-independent map marker button for a vehicle, asset, person, or travel group with operating-state color, heading, stale treatment, and a hover or focus caption.",
8823
+ "summary": "Engine-independent map marker button for a vehicle, asset, person, or travel group with operating-state color, bearing, an optional dashed outline, and a hover or focus caption.",
8737
8824
  "useWhen": [
8738
8825
  "An application map needs a consistent interactive marker for one entity.",
8739
8826
  "The map engine can mount a custom element and retain ownership of coordinates, anchoring, and camera behavior."
@@ -8758,14 +8845,14 @@
8758
8845
  "The component renders a native button and label is its accessible action name. Prefer an action-oriented label such as ‘Open vehicle 412’.",
8759
8846
  "Caption is a supplemental visual identifier and is hidden from assistive technology to avoid duplicating label.",
8760
8847
  "Keyboard focus reveals the same caption as hover and uses the shared visible focus ring.",
8761
- "State and stale meaning must be present in nearby map legend or application detail content; do not rely on marker color alone.",
8762
- "The stale outline remains differentiated by a dashed border in forced-colors mode."
8848
+ "Operating-state and outline meaning must be present in nearby map legend or application detail content; do not rely on marker color alone.",
8849
+ "The optional dashed outline remains differentiated by a dashed border in forced-colors mode."
8763
8850
  ],
8764
8851
  "states": [
8765
- "state selects the semantic operating-state color. Use stale as a standalone state only when no last-known operating state is available.",
8766
- "stale adds a dashed outline while preserving state, matching last-known map data.",
8767
- "immobilized always renders the upright MapKey glyph instead of the entity icon so the state is identifiable without interpreting heading.",
8768
- "heading rotates only MapEntityTravelGroup and MapEntityVehicle glyphs and is normalized to a clockwise value from 0 through 359 degrees. Immobilized, asset, person, and other glyphs remain upright.",
8852
+ "Unknown represents unavailable current motion and uses the existing stale-background token. The application resolves stale telemetry to Unknown regardless of previous motion; a known Immobilized state takes precedence.",
8853
+ "The dashed outline is an independent visual option. Unknown is solid unless the owner explicitly requests dashes.",
8854
+ "immobilized always renders the upright MapKey glyph instead of the entity icon so the state is identifiable without interpreting bearing.",
8855
+ "bearing rotates only MapEntityTravelGroup and MapEntityVehicle glyphs and is normalized to a clockwise value from 0 through 359 degrees. Immobilized, asset, person, and other glyphs remain upright.",
8769
8856
  "dimmed is visual de-emphasis only. The map owner decides when selection context should dim peer markers and keeps every marker operable. A dimmed marker returns to full opacity while hovered or keyboard-focused so its revealed caption remains legible.",
8770
8857
  "Activation emits dsClick without changing application selection internally."
8771
8858
  ],
@@ -8779,10 +8866,10 @@
8779
8866
  "Listen for dsClick and keep selected entity, z-index, coordinates, and camera movement in application state."
8780
8867
  ],
8781
8868
  "react": [
8782
- "Pass numeric heading as a property and handle dsClick through the generated event binding."
8869
+ "Pass numeric bearing as a property and handle dsClick through the generated event binding."
8783
8870
  ],
8784
8871
  "angular": [
8785
- "Bind heading as a number and keep map-engine marker lifecycle in the owning map adapter."
8872
+ "Bind bearing as a number and keep map-engine marker lifecycle in the owning map adapter."
8786
8873
  ]
8787
8874
  },
8788
8875
  "references": [
@@ -8806,10 +8893,10 @@
8806
8893
  "color",
8807
8894
  "opacity"
8808
8895
  ],
8809
- "reason": "Marker geometry, operating-state colors, stale distinction, and de-emphasis are one accessible visual recipe.",
8896
+ "reason": "Marker geometry, operating-state colors, outline distinction, and de-emphasis are one accessible visual recipe.",
8810
8897
  "props": [
8811
8898
  "state",
8812
- "stale",
8899
+ "dashed",
8813
8900
  "dimmed"
8814
8901
  ]
8815
8902
  }
@@ -8818,16 +8905,20 @@
8818
8905
  }
8819
8906
  },
8820
8907
  "props": {
8908
+ "bearing": {
8909
+ "type": "number",
8910
+ "required": false
8911
+ },
8821
8912
  "caption": {
8822
8913
  "type": "string",
8823
8914
  "required": false
8824
8915
  },
8825
- "dimmed": {
8916
+ "dashed": {
8826
8917
  "type": "boolean",
8827
8918
  "required": false
8828
8919
  },
8829
- "heading": {
8830
- "type": "number",
8920
+ "dimmed": {
8921
+ "type": "boolean",
8831
8922
  "required": false
8832
8923
  },
8833
8924
  "icon": {
@@ -8838,10 +8929,6 @@
8838
8929
  "type": "string",
8839
8930
  "required": true
8840
8931
  },
8841
- "stale": {
8842
- "type": "boolean",
8843
- "required": false
8844
- },
8845
8932
  "state": {
8846
8933
  "type": "MapEntityMarkerState",
8847
8934
  "required": false
@@ -12089,6 +12176,176 @@
12089
12176
  "text"
12090
12177
  ]
12091
12178
  },
12179
+ {
12180
+ "name": "radio-tile",
12181
+ "title": "RadioTile",
12182
+ "description": "A form-associated group of fully clickable radio tiles with labels and optional descriptions.",
12183
+ "type": "registry:ui",
12184
+ "meta": {
12185
+ "library": "@ds-mo/ui",
12186
+ "distribution": "npm",
12187
+ "storybook": "https://zainadeel.github.io/compomo/?path=/story/radio-tile",
12188
+ "source": "src/wc/components/RadioTile/RadioTile.tsx",
12189
+ "intentStatus": "complete",
12190
+ "intent": {
12191
+ "audience": "general",
12192
+ "status": "experimental",
12193
+ "summary": "A form-associated group of fully clickable radio tiles with labels and optional descriptions.",
12194
+ "useWhen": [
12195
+ "A small set of mutually exclusive choices benefits from descriptive cards and large click targets."
12196
+ ],
12197
+ "avoidWhen": [
12198
+ "The choices are brief and compact; use Radio.",
12199
+ "More than one value may be chosen."
12200
+ ],
12201
+ "alternatives": [
12202
+ {
12203
+ "when": "A user may select zero or multiple independent choices.",
12204
+ "component": "component:ds-checkbox",
12205
+ "reason": "Checkbox communicates independent selection rather than one-of-many choice."
12206
+ },
12207
+ {
12208
+ "when": "A binary setting applies immediately.",
12209
+ "component": "component:ds-switch",
12210
+ "reason": "Switch communicates an immediately applied on/off setting."
12211
+ },
12212
+ {
12213
+ "when": "The option list is long or the available space is constrained.",
12214
+ "component": "component:ds-select",
12215
+ "reason": "Select keeps a larger one-of-many choice set compact."
12216
+ }
12217
+ ],
12218
+ "commonlyComposedWith": [
12219
+ "component:ds-field",
12220
+ "component:ds-text"
12221
+ ],
12222
+ "accessibility": [
12223
+ "Native radio inputs own keyboard selection, focus, and checked semantics; the complete tile activates its input.",
12224
+ "Label the group with Field or an accessible name. Descriptions name each option separately."
12225
+ ],
12226
+ "states": [
12227
+ "Selection is shown by the radio indicator while the tile keeps its neutral border. Error retains the negative border, and keyboard focus keeps the focus-token outline. Inactive options cannot be selected.",
12228
+ "The component owns form values, required validation, reset, and disabled-fieldset behavior."
12229
+ ],
12230
+ "responsiveBehavior": [
12231
+ "Horizontal tiles wrap to available space; use a vertical group when descriptions need more room."
12232
+ ],
12233
+ "frameworkCaveats": {
12234
+ "angular": [
12235
+ "Use the generated radio value accessor with the standalone adapter."
12236
+ ],
12237
+ "vue": [
12238
+ "Bind value with v-model."
12239
+ ]
12240
+ },
12241
+ "references": [
12242
+ {
12243
+ "label": "Storybook review",
12244
+ "path": "src/wc/components/RadioTile/RadioTile.stories.ts"
12245
+ }
12246
+ ],
12247
+ "styling": {
12248
+ "rationale": "Tile anatomy and radio treatment belong to the component; the owner controls group width.",
12249
+ "protected": [
12250
+ {
12251
+ "properties": [
12252
+ "padding",
12253
+ "gap",
12254
+ "border-radius",
12255
+ "background",
12256
+ "border",
12257
+ "box-shadow",
12258
+ "color"
12259
+ ],
12260
+ "reason": "Use the supported group direction and state instead of replacing tile internals.",
12261
+ "props": [
12262
+ "direction"
12263
+ ]
12264
+ }
12265
+ ],
12266
+ "customProperties": []
12267
+ }
12268
+ },
12269
+ "props": {
12270
+ "ariaDescribedby": {
12271
+ "type": "string | undefined",
12272
+ "required": false
12273
+ },
12274
+ "ariaLabel": {
12275
+ "type": "string | null",
12276
+ "required": false
12277
+ },
12278
+ "ariaLabelledby": {
12279
+ "type": "string | undefined",
12280
+ "required": false
12281
+ },
12282
+ "direction": {
12283
+ "type": "'horizontal' | 'vertical'",
12284
+ "required": false
12285
+ },
12286
+ "disabled": {
12287
+ "type": "boolean",
12288
+ "required": false
12289
+ },
12290
+ "error": {
12291
+ "type": "boolean",
12292
+ "required": false
12293
+ },
12294
+ "form": {
12295
+ "type": "string | undefined",
12296
+ "required": false
12297
+ },
12298
+ "inputId": {
12299
+ "type": "string | undefined",
12300
+ "required": false
12301
+ },
12302
+ "isInactive": {
12303
+ "type": "boolean",
12304
+ "required": false
12305
+ },
12306
+ "name": {
12307
+ "type": "string | undefined",
12308
+ "required": false
12309
+ },
12310
+ "options": {
12311
+ "type": "RadioTileOption[]",
12312
+ "required": false
12313
+ },
12314
+ "required": {
12315
+ "type": "boolean",
12316
+ "required": false
12317
+ },
12318
+ "requiredMessage": {
12319
+ "type": "string",
12320
+ "required": false
12321
+ },
12322
+ "value": {
12323
+ "type": "string",
12324
+ "required": false
12325
+ }
12326
+ },
12327
+ "events": [
12328
+ {
12329
+ "name": "dsChange",
12330
+ "detail": "string"
12331
+ }
12332
+ ],
12333
+ "slots": [],
12334
+ "exports": {
12335
+ "customElement": "ds-radio-tile",
12336
+ "react": "DsRadioTile",
12337
+ "vue": "DsRadioTile",
12338
+ "angular": "DsRadioTile"
12339
+ }
12340
+ },
12341
+ "dependencies": [
12342
+ "@ds-mo/ui",
12343
+ "@ds-mo/tokens"
12344
+ ],
12345
+ "registryDependencies": [
12346
+ "text"
12347
+ ]
12348
+ },
12092
12349
  {
12093
12350
  "name": "score",
12094
12351
  "title": "Score",
@@ -12742,6 +12999,106 @@
12742
12999
  "tooltip"
12743
13000
  ]
12744
13001
  },
13002
+ {
13003
+ "name": "setting-row",
13004
+ "title": "SettingRow",
13005
+ "description": "Two-column immediate binary setting with descriptive copy and an accessible switch.",
13006
+ "type": "registry:ui",
13007
+ "meta": {
13008
+ "library": "@ds-mo/ui",
13009
+ "distribution": "npm",
13010
+ "storybook": "https://zainadeel.github.io/compomo/?path=/story/setting-row",
13011
+ "source": "src/wc/components/SettingRow/SettingRow.tsx",
13012
+ "intentStatus": "complete",
13013
+ "intent": {
13014
+ "audience": "general",
13015
+ "status": "experimental",
13016
+ "summary": "Two-column immediate binary setting with descriptive copy and an accessible switch.",
13017
+ "useWhen": [
13018
+ "A settings list pairs a setting name and explanation with one immediate on/off control."
13019
+ ],
13020
+ "avoidWhen": [
13021
+ "The value needs a text input, multiple choices, or an explicit Save workflow."
13022
+ ],
13023
+ "commonlyComposedWith": [
13024
+ "component:ds-card-setting",
13025
+ "component:ds-switch",
13026
+ "component:ds-text"
13027
+ ],
13028
+ "accessibility": [
13029
+ "The visible label names the switch and the optional description supplies its accessible description.",
13030
+ "Switch owns focus, keyboard activation, checked state, and disabled semantics. The row adds no second tab stop.",
13031
+ "For a settings list, the owner supplies list semantics and marks each row as a list item."
13032
+ ],
13033
+ "states": [
13034
+ "The application accepts or rejects change requests by updating the controlled checked value and owns persistence and errors.",
13035
+ "Name the enabled setting consistently; the label must not change when the switch is toggled."
13036
+ ],
13037
+ "responsiveBehavior": [
13038
+ "The copy wraps while the switch keeps its natural size in the trailing column, including at narrow widths."
13039
+ ],
13040
+ "references": [
13041
+ {
13042
+ "label": "Usage states",
13043
+ "path": "src/wc/components/SettingRow/SettingRow.stories.ts"
13044
+ }
13045
+ ],
13046
+ "styling": {
13047
+ "rationale": "The row owns copy/control spacing; its parent owns the section surface and width.",
13048
+ "protected": [
13049
+ {
13050
+ "properties": [
13051
+ "padding",
13052
+ "gap"
13053
+ ],
13054
+ "reason": "Preserve the shared settings-row spacing recipe.",
13055
+ "props": []
13056
+ }
13057
+ ],
13058
+ "customProperties": []
13059
+ }
13060
+ },
13061
+ "props": {
13062
+ "checked": {
13063
+ "type": "boolean",
13064
+ "required": false
13065
+ },
13066
+ "description": {
13067
+ "type": "string",
13068
+ "required": false
13069
+ },
13070
+ "disabled": {
13071
+ "type": "boolean",
13072
+ "required": false
13073
+ },
13074
+ "label": {
13075
+ "type": "string",
13076
+ "required": true
13077
+ }
13078
+ },
13079
+ "events": [
13080
+ {
13081
+ "name": "dsChange",
13082
+ "detail": "boolean"
13083
+ }
13084
+ ],
13085
+ "slots": [],
13086
+ "exports": {
13087
+ "customElement": "ds-setting-row",
13088
+ "react": "DsSettingRow",
13089
+ "vue": "DsSettingRow",
13090
+ "angular": "DsSettingRow"
13091
+ }
13092
+ },
13093
+ "dependencies": [
13094
+ "@ds-mo/ui",
13095
+ "@ds-mo/tokens"
13096
+ ],
13097
+ "registryDependencies": [
13098
+ "switch",
13099
+ "text"
13100
+ ]
13101
+ },
12745
13102
  {
12746
13103
  "name": "shell-app",
12747
13104
  "title": "ShellApp",
@@ -13669,14 +14026,15 @@
13669
14026
  "Assign a two-number array through the JavaScript value property to create a range; values are ordered, clamped, stepped, and prevented from crossing.",
13670
14027
  "minStepsBetweenValues reserves a minimum stepped distance between range thumbs.",
13671
14028
  "The initial normalized value is the native form-reset baseline and range values submit as repeated entries under the same name.",
13672
- "Focused, filled, dirty, touched, dragging, valid, disabled, read-only, and orientation data hooks expose interaction state without changing the value contract."
14029
+ "Focused, filled, dirty, touched, dragging, valid, disabled, read-only, and orientation data hooks expose interaction state without changing the value contract.",
14030
+ "Explicit ticks define the only selectable snap points and may carry labels. Marks sit below a horizontal track, or beside a vertical track, with labels beyond the marks. Horizontal labels center on their marks and shift inward only when they reach the control edges. Without ticks, step=\"any\" permits smooth adjustment; ordinary stepped behavior remains available. Arrow keys traverse adjacent ticks and Home/End reach the available extremes."
13673
14031
  ],
13674
14032
  "responsiveBehavior": [
13675
14033
  "The visible label uses the same primary emphasized text-body-small recipe as Field at every density; the value uses the same primary metric without emphasis.",
13676
14034
  "Horizontal Slider fills the width supplied by its parent; the parent chooses an appropriate readable track length.",
13677
14035
  "Vertical Slider owns a token-based default length that may be overridden with --ds-slider-vertical-length in layout-specific compositions.",
13678
14036
  "Use md in ordinary forms and sm or xs only when the surrounding control density uses the same recipe.",
13679
- "Track thickness scales with density: 8px at md, 6px at sm, and 4px at xs. The unfilled track is transparent with a tertiary-foreground inset outline, the filled range is brand, and the square thumb uses a 2px radius with a 1.5px brand inset ring.",
14037
+ "Track thickness scales with density. The unfilled track has a neutral border, the filled range uses brand color, and the thumb uses the primary surface with subtle elevation.",
13680
14038
  "Horizontal value direction is left-to-right; the design system does not author RTL-specific component behavior."
13681
14039
  ],
13682
14040
  "frameworkCaveats": {
@@ -13688,7 +14046,10 @@
13688
14046
  "Use DsSlider with a number or two-number value array and handle onDsChange and onDsCommit custom events."
13689
14047
  ],
13690
14048
  "angular": [
13691
- "Use DsSlider with property binding for range arrays; the generated number value accessor is appropriate only for a single numeric value."
14049
+ "Use DsSlider with SelectValueAccessor for Angular Forms; it preserves either a number or a two-number array."
14050
+ ],
14051
+ "vue": [
14052
+ "Use v-model for a number or a two-number array. Assign ticks through property binding."
13692
14053
  ]
13693
14054
  },
13694
14055
  "references": [
@@ -13829,13 +14190,17 @@
13829
14190
  "required": false
13830
14191
  },
13831
14192
  "step": {
13832
- "type": "number",
14193
+ "type": "number | 'any'",
13833
14194
  "required": false
13834
14195
  },
13835
14196
  "thumbAlignment": {
13836
14197
  "type": "SliderThumbAlignment",
13837
14198
  "required": false
13838
14199
  },
14200
+ "ticks": {
14201
+ "type": "SliderTick[]",
14202
+ "required": false
14203
+ },
13839
14204
  "value": {
13840
14205
  "type": "SliderValue",
13841
14206
  "required": false
@@ -14480,7 +14845,7 @@
14480
14845
  "pattern:menu-trigger"
14481
14846
  ],
14482
14847
  "accessibility": [
14483
- "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.",
14848
+ "The rendered structure uses a native table, caption, column headers, row groups, and data cells; keep the caption non-empty. The native caption remains visually hidden as the table's accessible name. When caption visibility is enabled, a 48px header bar renders as component chrome outside the data scrollport. It defaults to a presentational caption title that does not duplicate the accessible name. Application-owned labeled controls supplied through the single named header slot replace that fallback and share one horizontal caption overflow row with table-owned actions inside the component-owned 8px inset. Table caption buttons keep pressed interaction paint without physically scaling. When columnCustomizer is enabled, the table adds a trailing Customize control named Customize table. Its label uses regular weight and its resting foreground remains neutral when hidden or reordered columns differ from the catalog default. The control is icon-label at typical widths and the icon-only Customize menu button below 900px, where a tooltip preserves the Customize label. The always-icon-only table-variant control also exposes its label through a tooltip. Otherwise the header slot receives the complete content width.",
14484
14849
  "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.",
14485
14850
  "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.",
14486
14851
  "Sorting controls remain buttons inside column headers and expose the table's one controlled member-row sort through aria-sort. ds-data-sort in the toolbar trailing cluster is the matching menu of Data and Order sections; it emits the same dsSortChange shape so header clicks and menu choices stay in sync. Grouping never adds a second sort indicator or header control; ds-data-group controls the grouping data point and ascending or descending group-section order while the application supplies the resulting groups. Optional column help underlines the header label with the shared dotted decoration and shows ds-tooltip from that label; it does not add a second header control or replace the column name.",
@@ -14512,7 +14877,7 @@
14512
14877
  ],
14513
14878
  "responsiveBehavior": [
14514
14879
  "The table keeps native semantics at narrow widths and scrolls horizontally instead of transforming into cards.",
14515
- "Inside the named ds-table container, caption Search retains its standard maximum width and flexes smaller only when the complete row needs space. Filter, Group, and Sort controls that opt into collapseLabel become icon-only below 900px by omitting their labels and chevrons. Active filtering or grouping promotes the visible icon to primary. Sort keeps resting secondary chrome because its selection lives in the menu and headers. Customize switches to the icon-only Table menu button below 900px and keeps its neutral resting foreground regardless of the controlled column configuration. The caption, frame, and footer remain within the table host at every width. The complete caption row scrolls together only when those compact controls no longer fit, while data columns scroll inside the viewport; table-owned trailing actions never stay pinned over the scrolling toolbar.",
14880
+ "Inside the named ds-table container, caption Search retains its standard maximum width and flexes smaller only when the complete row needs space. Filter, Group, and Sort controls that opt into collapseLabel become icon-only below 900px by omitting their labels and chevrons. Active filtering or grouping promotes the visible icon to primary. Sort keeps resting secondary chrome because its selection lives in the menu and headers. Customize switches to the icon-only Customize menu button below 900px and keeps its neutral resting foreground regardless of the controlled column configuration. The caption, frame, and footer remain within the table host at every width. The complete caption row scrolls together only when those compact controls no longer fit, while data columns scroll inside the viewport; table-owned trailing actions never stay pinned over the scrolling toolbar.",
14516
14881
  "stickyHeader follows the active vertical scroll owner: a maxHeight, height, or fitViewport table keeps its native header and group sections inside one bounded table scrollport, while a document-flow table retains a semantic native header and renders a sticky control header whose columns follow the body's native inline scroll timeline. Consumers set --ds-table-sticky-header-offset when page chrome occupies an unbounded document scrollport edge. When the 48px table header bar is visible, it sticks at that external offset and the column header stacks immediately below it.",
14517
14882
  "fitViewport uses viewportInsetBlockStart and viewportInsetBlockEnd to describe compact surrounding chrome and page gutters relative to the nearest vertical scroll owner. Before the table reaches that compact position, its host reserves the eventual height while the visible composition grows and vertical input remains owned by the outer page. Once settled, the internal table viewport becomes the vertical scroll owner. Bounded grouped tables use browser-native sticky section rows inside real block row-group boundaries, so scroll and resize do not run component JavaScript or trigger reactive section swaps. Document-flow tables retain the synchronized visual lane required by their separate horizontal scrollport.",
14518
14883
  "Without maxHeight the table grows the document and automatic lazy loading observes the browser viewport. Horizontal scrolling chains vertical wheel and trackpad movement to the page instead of trapping it.",
@@ -15455,7 +15820,8 @@
15455
15820
  "The default four visible rows can be changed with rows; rows is clamped to at least one.",
15456
15821
  "Vertical resizing is enabled by default and can be disabled when the surrounding layout owns the field height.",
15457
15822
  "Size changes typography and inset spacing without changing the authored row count.",
15458
- "Border, focus, error, placeholder, inactive, hover, and pressed treatments follow the same shared recipes as Input. When hasBorder is false, supporting error copy insets to the text origin rather than the resting border box."
15823
+ "Border, focus, error, placeholder, inactive, hover, and pressed treatments follow the same shared recipes as Input. When hasBorder is false, supporting error copy insets to the text origin rather than the resting border box.",
15824
+ "Length constraints validate typed and programmatic text. Excess content is retained with an error by default; restrict mode enforces the maximum during editing. A character count appears below the field, right of supporting text or left when no supporting text exists."
15459
15825
  ],
15460
15826
  "responsiveBehavior": [
15461
15827
  "Textarea fills its parent by default and follows the width supplied by Field or the form layout.",
@@ -15583,6 +15949,18 @@
15583
15949
  "type": "boolean",
15584
15950
  "required": false
15585
15951
  },
15952
+ "lengthBehavior": {
15953
+ "type": "'error' | 'restrict'",
15954
+ "required": false
15955
+ },
15956
+ "maxLength": {
15957
+ "type": "number | undefined",
15958
+ "required": false
15959
+ },
15960
+ "minLength": {
15961
+ "type": "number | undefined",
15962
+ "required": false
15963
+ },
15586
15964
  "name": {
15587
15965
  "type": "string | undefined",
15588
15966
  "required": false
@@ -15611,6 +15989,10 @@
15611
15989
  "type": "number",
15612
15990
  "required": false
15613
15991
  },
15992
+ "showCharacterCount": {
15993
+ "type": "boolean",
15994
+ "required": false
15995
+ },
15614
15996
  "size": {
15615
15997
  "type": "TextareaSize",
15616
15998
  "required": false
@@ -15653,7 +16035,7 @@
15653
16035
  {
15654
16036
  "name": "time-picker",
15655
16037
  "title": "TimePicker",
15656
- "description": "Bounded 12-hour clock lists for choosing hour, minute, and AM/PM, reused by form time fields.",
16038
+ "description": "Bounded 12- or 24-hour clock lists for choosing hour, minute, and AM/PM, reused by form time fields.",
15657
16039
  "type": "registry:ui",
15658
16040
  "meta": {
15659
16041
  "library": "@ds-mo/ui",
@@ -15664,7 +16046,7 @@
15664
16046
  "intent": {
15665
16047
  "audience": "general",
15666
16048
  "status": "stable",
15667
- "summary": "Bounded 12-hour clock lists for choosing hour, minute, and AM/PM, reused by form time fields.",
16049
+ "summary": "Bounded 12- or 24-hour clock lists for choosing hour, minute, and AM/PM, reused by form time fields.",
15668
16050
  "useWhen": [
15669
16051
  "A user picks a clock time from hour, minute, and AM/PM lists.",
15670
16052
  "A time field needs 32px clock tiles that match calendar day geometry and the shared choice-list selected treatment."
@@ -15692,13 +16074,14 @@
15692
16074
  ],
15693
16075
  "accessibility": [
15694
16076
  "Hour, minute, and AM/PM are separate labelled listboxes without visible column headings. Each list keeps one tab stop on the selected option.",
15695
- "Arrow keys move to the next or previous option and stop at the first and last values; they do not wrap. Home and End jump to those ends. Left and Right move between columns and stop at Hour and AM/PM.",
16077
+ "Arrow keys move to the next or previous option and stop at the first and last values; they do not wrap. Home and End jump to those ends. Left and Right move between columns and stop at the first and last visible columns.",
15696
16078
  "Inactive pickers disable every option. Optional min and max times disable combinations outside that inclusive bound."
15697
16079
  ],
15698
16080
  "states": [
15699
16081
  "Selected hour, minute, and period tiles use the shared interaction-fill selected wash and primary text. Resting tiles use secondary text on a transparent 32px square.",
15700
- "Lists are finite. Hour runs 1 through 12, minutes follow the step, and AM/PM has two values. Scrolling and keyboard movement stop at those ends instead of looping.",
15701
- "An empty value highlights 12:00 AM so the lists have a resting selection without inventing a second empty state."
16082
+ "Lists are finite. Hours follow the selected clock format, minutes follow the step, and the twelve-hour period list has two values. Scrolling and keyboard movement stop at those ends instead of looping.",
16083
+ "An empty value highlights 12:00 AM so the lists have a resting selection without inventing a second empty state.",
16084
+ "The default twelve-hour presentation includes AM/PM. Twenty-four-hour presentation uses hours 00–23 and omits the period column; both keep HH:MM form values and the same time bounds."
15702
16085
  ],
15703
16086
  "responsiveBehavior": [
15704
16087
  "The three columns fill the width supplied by the owner. Tile size, 4px gaps, and the seven-tile list viewport are owned here; the owner supplies the popup or pane width."
@@ -15736,6 +16119,10 @@
15736
16119
  "type": "boolean",
15737
16120
  "required": false
15738
16121
  },
16122
+ "hourFormat": {
16123
+ "type": "'12' | '24'",
16124
+ "required": false
16125
+ },
15739
16126
  "isInactive": {
15740
16127
  "type": "boolean",
15741
16128
  "required": false