@ds-mo/ui 14.35.0 → 15.0.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 (577) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +5733 -4656
  4. package/dist/angular/ds-button-inverted.d.ts +17 -0
  5. package/dist/angular/ds-button-inverted.js +46 -0
  6. package/dist/angular/ds-calendar.d.ts +15 -0
  7. package/dist/angular/ds-calendar.js +43 -0
  8. package/dist/angular/ds-conversation-list.d.ts +1 -1
  9. package/dist/angular/ds-conversation-list.js +3 -4
  10. package/dist/angular/ds-data-customize.d.ts +18 -0
  11. package/dist/angular/ds-data-customize.js +46 -0
  12. package/dist/angular/ds-data-filter.d.ts +50 -0
  13. package/dist/angular/{ds-table-filter.js → ds-data-filter.js} +10 -10
  14. package/dist/angular/ds-data-group.d.ts +29 -0
  15. package/dist/angular/{ds-table-group.js → ds-data-group.js} +10 -10
  16. package/dist/angular/ds-data-preferences.d.ts +39 -0
  17. package/dist/angular/{ds-table-preferences.js → ds-data-preferences.js} +15 -15
  18. package/dist/angular/ds-data-saved-views.d.ts +49 -0
  19. package/dist/angular/{ds-table-saved-views.js → ds-data-saved-views.js} +10 -10
  20. package/dist/angular/ds-data-search.d.ts +20 -0
  21. package/dist/angular/{ds-table-search.js → ds-data-search.js} +12 -12
  22. package/dist/angular/ds-data-sort.d.ts +16 -0
  23. package/dist/angular/{ds-table-sort.js → ds-data-sort.js} +12 -12
  24. package/dist/angular/ds-data-toolbar.d.ts +12 -0
  25. package/dist/angular/{ds-table-toolbar.js → ds-data-toolbar.js} +10 -10
  26. package/dist/angular/ds-field.d.ts +1 -1
  27. package/dist/angular/ds-field.js +1 -1
  28. package/dist/angular/ds-input-date.d.ts +15 -0
  29. package/dist/angular/ds-input-date.js +43 -0
  30. package/dist/angular/ds-input-time.d.ts +15 -0
  31. package/dist/angular/ds-input-time.js +43 -0
  32. package/dist/angular/ds-input.d.ts +1 -1
  33. package/dist/angular/ds-input.js +3 -3
  34. package/dist/angular/ds-select.d.ts +1 -1
  35. package/dist/angular/ds-select.js +3 -3
  36. package/dist/angular/ds-table.d.ts +7 -7
  37. package/dist/angular/ds-table.js +6 -6
  38. package/dist/angular/ds-time-picker.d.ts +15 -0
  39. package/dist/angular/ds-time-picker.js +43 -0
  40. package/dist/angular/index.d.ts +1 -1
  41. package/dist/angular/index.js +13 -7
  42. package/dist/angular/proxies.d.ts +13 -7
  43. package/dist/angular/proxies.js +13 -7
  44. package/dist/angular/text-value-accessor.d.ts +1 -1
  45. package/dist/angular/text-value-accessor.js +2 -2
  46. package/dist/components/ds-agent-activity.js +1 -1
  47. package/dist/components/ds-agent-questionnaire.js +1 -1
  48. package/dist/components/ds-agent-response.js +1 -1
  49. package/dist/components/ds-agent-source-list.js +1 -1
  50. package/dist/components/ds-agent-tool-call.js +1 -1
  51. package/dist/components/ds-attachment-list.js +1 -1
  52. package/dist/components/ds-avatar.js +1 -1
  53. package/dist/components/ds-badge.js +1 -1
  54. package/dist/components/ds-banner.js +1 -1
  55. package/dist/components/ds-bar-action.js +1 -1
  56. package/dist/components/ds-bar-nav.js +1 -1
  57. package/dist/components/ds-bar-page-title.js +1 -1
  58. package/dist/components/ds-bar-title.js +1 -1
  59. package/dist/components/ds-bar-workflow.js +1 -1
  60. package/dist/components/ds-breadcrumb.js +1 -1
  61. package/dist/components/ds-button-filled.js +1 -1
  62. package/dist/components/ds-button-inverted.d.ts +11 -0
  63. package/dist/components/ds-button-inverted.js +2 -0
  64. package/dist/components/ds-button-inverted.js.map +1 -0
  65. package/dist/components/ds-button-unfilled.js +1 -1
  66. package/dist/components/{ds-table-search.d.ts → ds-calendar.d.ts} +4 -4
  67. package/dist/components/ds-calendar.js +2 -0
  68. package/dist/components/ds-card-action-center.js +1 -1
  69. package/dist/components/ds-card-chart.js +1 -1
  70. package/dist/components/ds-card-navigation.js +1 -1
  71. package/dist/components/ds-card-navigation.js.map +1 -1
  72. package/dist/components/ds-card-overview.js +1 -1
  73. package/dist/components/ds-card-setting.js +1 -1
  74. package/dist/components/ds-card-settings-scope.js +1 -1
  75. package/dist/components/ds-card-settings-scope.js.map +1 -1
  76. package/dist/components/ds-chart-legend.js +1 -1
  77. package/dist/components/ds-chart.js +1 -1
  78. package/dist/components/ds-checkbox.js +1 -1
  79. package/dist/components/ds-chip.js +1 -1
  80. package/dist/components/ds-code-block.js +1 -1
  81. package/dist/components/ds-conversation-list-item.js +1 -1
  82. package/dist/components/ds-conversation-list-item.js.map +1 -1
  83. package/dist/components/ds-conversation-list-section.js +1 -1
  84. package/dist/components/ds-conversation-list.js +1 -1
  85. package/dist/components/ds-conversation-list.js.map +1 -1
  86. package/dist/components/ds-data-customize.d.ts +11 -0
  87. package/dist/components/ds-data-customize.js +2 -0
  88. package/dist/components/ds-data-customize.js.map +1 -0
  89. package/dist/components/{ds-table-group.d.ts → ds-data-filter.d.ts} +4 -4
  90. package/dist/components/ds-data-filter.js +2 -0
  91. package/dist/components/ds-data-filter.js.map +1 -0
  92. package/dist/components/{ds-table-sort.d.ts → ds-data-group.d.ts} +4 -4
  93. package/dist/components/ds-data-group.js +2 -0
  94. package/dist/components/ds-data-group.js.map +1 -0
  95. package/dist/components/{ds-table-saved-views.d.ts → ds-data-preferences.d.ts} +4 -4
  96. package/dist/components/ds-data-preferences.js +2 -0
  97. package/dist/components/ds-data-preferences.js.map +1 -0
  98. package/dist/components/ds-data-saved-views.d.ts +11 -0
  99. package/dist/components/ds-data-saved-views.js +2 -0
  100. package/dist/components/ds-data-saved-views.js.map +1 -0
  101. package/dist/components/ds-data-search.d.ts +11 -0
  102. package/dist/components/ds-data-search.js +2 -0
  103. package/dist/components/ds-data-search.js.map +1 -0
  104. package/dist/components/ds-data-sort.d.ts +11 -0
  105. package/dist/components/ds-data-sort.js +2 -0
  106. package/dist/components/ds-data-sort.js.map +1 -0
  107. package/dist/components/{ds-table-filter.d.ts → ds-data-toolbar.d.ts} +4 -4
  108. package/dist/components/ds-data-toolbar.js +2 -0
  109. package/dist/components/ds-data-toolbar.js.map +1 -0
  110. package/dist/components/ds-divider.js +1 -1
  111. package/dist/components/ds-empty-state.js +1 -1
  112. package/dist/components/ds-field.js +1 -1
  113. package/dist/components/ds-filter-menu.js +1 -1
  114. package/dist/components/ds-icon.js +1 -1
  115. package/dist/components/ds-input-date.d.ts +11 -0
  116. package/dist/components/ds-input-date.js +2 -0
  117. package/dist/components/ds-input-date.js.map +1 -0
  118. package/dist/components/ds-input-time.d.ts +11 -0
  119. package/dist/components/ds-input-time.js +2 -0
  120. package/dist/components/ds-input-time.js.map +1 -0
  121. package/dist/components/ds-input.js +1 -1
  122. package/dist/components/ds-markdown.js +1 -1
  123. package/dist/components/ds-menu.js +1 -1
  124. package/dist/components/ds-message-actions.js +1 -1
  125. package/dist/components/ds-message-bubble.js +1 -1
  126. package/dist/components/ds-message-bubble.js.map +1 -1
  127. package/dist/components/ds-message-composer.js +1 -1
  128. package/dist/components/ds-message-composer.js.map +1 -1
  129. package/dist/components/ds-message-scroller.js +1 -1
  130. package/dist/components/ds-message.js +1 -1
  131. package/dist/components/ds-mobile-bar-nav.js +1 -1
  132. package/dist/components/ds-mobile-header.js +1 -1
  133. package/dist/components/ds-mobile-section-switcher.js +1 -1
  134. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  135. package/dist/components/ds-modal.js +1 -1
  136. package/dist/components/ds-pagination.js +1 -1
  137. package/dist/components/ds-panel-nav.js +1 -1
  138. package/dist/components/ds-panel-sub-nav.js +1 -1
  139. package/dist/components/ds-panel-tool-header.js +1 -1
  140. package/dist/components/ds-panel-tool-search.js +1 -1
  141. package/dist/components/ds-panel-tools.js +1 -1
  142. package/dist/components/ds-paper-texture.js +1 -1
  143. package/dist/components/ds-radio.js +1 -1
  144. package/dist/components/ds-score.js +1 -1
  145. package/dist/components/ds-scroll-overlay.js +1 -1
  146. package/dist/components/ds-select.js +1 -1
  147. package/dist/components/ds-shell-app.js +1 -1
  148. package/dist/components/ds-shell-page.js +1 -1
  149. package/dist/components/ds-shell-tools.js +1 -1
  150. package/dist/components/ds-skeleton.js +1 -1
  151. package/dist/components/ds-slider.js +1 -1
  152. package/dist/components/ds-slider.js.map +1 -1
  153. package/dist/components/ds-swatch-picker.js +1 -1
  154. package/dist/components/ds-switch.js +1 -1
  155. package/dist/components/ds-tab-group.js +1 -1
  156. package/dist/components/ds-table.js +1 -1
  157. package/dist/components/ds-table.js.map +1 -1
  158. package/dist/components/ds-tag.js +1 -1
  159. package/dist/components/ds-text.js +1 -1
  160. package/dist/components/ds-textarea.js +1 -1
  161. package/dist/components/ds-textarea.js.map +1 -1
  162. package/dist/components/ds-time-picker.d.ts +11 -0
  163. package/dist/components/ds-time-picker.js +2 -0
  164. package/dist/components/ds-time-picker.js.map +1 -0
  165. package/dist/components/ds-toast.js +1 -1
  166. package/dist/components/ds-tooltip-chart.js +1 -1
  167. package/dist/components/ds-tooltip.js +1 -1
  168. package/dist/components/ds-typing-indicator.js +1 -1
  169. package/dist/components/index.d.ts +5 -5
  170. package/dist/components/p-0FYD2bev.js +2 -0
  171. package/dist/components/p-0FYD2bev.js.map +1 -0
  172. package/dist/components/p-0qY_HDId.js +2 -0
  173. package/dist/components/{p-D_u8WhlU.js.map → p-0qY_HDId.js.map} +1 -1
  174. package/dist/components/{p-BQsVI_vO.js → p-5URekSny.js} +2 -2
  175. package/dist/components/{p-eo_pmPqp.js → p-7V1AhetH.js} +2 -2
  176. package/dist/components/{p-yZRXPHDe.js → p-8yBdCXCn.js} +2 -2
  177. package/dist/components/p-BKZdqJQB.js +2 -0
  178. package/dist/components/p-BKZdqJQB.js.map +1 -0
  179. package/dist/components/p-BYrBU_U9.js +2 -0
  180. package/dist/components/p-BYrBU_U9.js.map +1 -0
  181. package/dist/components/{p-D44g2Kw1.js → p-BciTtTwx.js} +2 -2
  182. package/dist/components/p-BciTtTwx.js.map +1 -0
  183. package/dist/components/{p-CZOiTaNa.js → p-BeNa6tw5.js} +2 -2
  184. package/dist/components/{p-CZOiTaNa.js.map → p-BeNa6tw5.js.map} +1 -1
  185. package/dist/components/p-BgQMEHRa.js +2 -0
  186. package/dist/components/{p-CwqFJMvP.js.map → p-BgQMEHRa.js.map} +1 -1
  187. package/dist/components/{p-BQaO7cg_.js → p-BhJXmuRA.js} +2 -2
  188. package/dist/components/{p-n68x-ZKp.js → p-Bm7rqs3C.js} +2 -2
  189. package/dist/components/{p-DdspY23v.js → p-Bn8I7iw6.js} +2 -2
  190. package/dist/components/{p-BnWxbhFP.js → p-Bpd6YCo4.js} +2 -2
  191. package/dist/components/{p-B-9fdIWv.js → p-C-3YqeTb.js} +2 -2
  192. package/dist/components/{p-umAf0fBn.js → p-CD4DZPy_.js} +2 -2
  193. package/dist/components/p-CElUM-xU.js +2 -0
  194. package/dist/components/p-CElUM-xU.js.map +1 -0
  195. package/dist/components/{p-CuwopElg.js → p-CGidq1iC.js} +2 -2
  196. package/dist/components/p-CNxvnQ6A.js +2 -0
  197. package/dist/components/p-CNxvnQ6A.js.map +1 -0
  198. package/dist/components/{p-CI7VfYC3.js → p-CUcUHwI3.js} +2 -2
  199. package/dist/components/p-CYzFfFcH.js +2 -0
  200. package/dist/components/{p-BINSI_KF.js.map → p-CYzFfFcH.js.map} +1 -1
  201. package/dist/components/{p-Dhw_W8nk.js → p-Cc3ZUQlJ.js} +2 -2
  202. package/dist/components/p-Cc3ZUQlJ.js.map +1 -0
  203. package/dist/components/p-CdgOLWX9.js +2 -0
  204. package/dist/components/p-CdgOLWX9.js.map +1 -0
  205. package/dist/components/{p-BcdHgPi5.js → p-CeXf9-X3.js} +2 -2
  206. package/dist/components/{p-CSnsz3Eb.js → p-CiH4GG6r.js} +2 -2
  207. package/dist/components/{p-y06IxxoN.js → p-CiJ1WR11.js} +2 -2
  208. package/dist/components/p-CmexIVnE.js +2 -0
  209. package/dist/components/{p-N5SHSVo2.js.map → p-CmexIVnE.js.map} +1 -1
  210. package/dist/components/{p-BmFeeR4q.js → p-CqW2eyiF.js} +2 -2
  211. package/dist/components/{p-CzbsTZt7.js → p-Cxr0IQjC.js} +2 -2
  212. package/dist/components/{p-CqlBlv55.js → p-CzIpquvw.js} +2 -2
  213. package/dist/components/{p-DC69DgAR.js → p-D0y7Sja6.js} +2 -2
  214. package/dist/components/{p-Cwz9TPVS.js → p-D1vQGJzc.js} +2 -2
  215. package/dist/components/{p-Cwz9TPVS.js.map → p-D1vQGJzc.js.map} +1 -1
  216. package/dist/components/{p-C7CZ9pnP.js → p-D6Wl3dRO.js} +2 -2
  217. package/dist/components/{p-BPhbwXOv.js → p-D922f6Tb.js} +2 -2
  218. package/dist/components/{p-beRFLHbB.js → p-DHICPS4n.js} +2 -2
  219. package/dist/components/{p-omPm8_vx.js → p-DOAybCp0.js} +2 -2
  220. package/dist/components/{p-DEGNrPLe.js → p-DVINzOoK.js} +2 -2
  221. package/dist/components/{p-DEGNrPLe.js.map → p-DVINzOoK.js.map} +1 -1
  222. package/dist/components/p-DVOjjuXc.js +2 -0
  223. package/dist/components/p-DVOjjuXc.js.map +1 -0
  224. package/dist/components/p-Di5FH7eh.js +2 -0
  225. package/dist/components/p-Di5FH7eh.js.map +1 -0
  226. package/dist/components/p-DjkUFlDW.js +2 -0
  227. package/dist/components/p-DjkUFlDW.js.map +1 -0
  228. package/dist/components/{p-BnzsBNUY.js → p-Dn9QHL4O.js} +2 -2
  229. package/dist/components/{p-DGzn4k4h.js → p-Do2FJd1y.js} +2 -2
  230. package/dist/components/{p-DTDLlinw.js → p-DpoTwJAR.js} +2 -2
  231. package/dist/components/{p-Dk-8Ju0Q.js → p-Dpr2y6_S.js} +2 -2
  232. package/dist/components/{p-Dk-8Ju0Q.js.map → p-Dpr2y6_S.js.map} +1 -1
  233. package/dist/components/p-Dw9sE6Iw.js +2 -0
  234. package/dist/components/p-Dw9sE6Iw.js.map +1 -0
  235. package/dist/components/{p-CLGtPE0K.js → p-DwbcNDJF.js} +2 -2
  236. package/dist/components/p-Dzndkdx5.js +2 -0
  237. package/dist/components/{p-xHGqrz_p.js.map → p-Dzndkdx5.js.map} +1 -1
  238. package/dist/components/{p-C8ek-1SP.js → p-E5W27Fu_.js} +2 -2
  239. package/dist/components/{p-mpk_Mm8_.js → p-FIBCluwV.js} +2 -2
  240. package/dist/components/{p-DQQFN2sw.js → p-IEq_06J0.js} +2 -2
  241. package/dist/components/{p-DQQFN2sw.js.map → p-IEq_06J0.js.map} +1 -1
  242. package/dist/components/{p-CE540WZ7.js → p-MG4lcN0D.js} +2 -2
  243. package/dist/components/p-Nc76seSq.js +2 -0
  244. package/dist/components/p-Nc76seSq.js.map +1 -0
  245. package/dist/components/{p-DtLQIMsa.js → p-ZhP2tVmM.js} +2 -2
  246. package/dist/components/p-aD5cw_m2.js +2 -0
  247. package/dist/components/p-aD5cw_m2.js.map +1 -0
  248. package/dist/components/p-etifxiDc.js +2 -0
  249. package/dist/components/{p-beCz9OnD.js.map → p-etifxiDc.js.map} +1 -1
  250. package/dist/components/p-kDZ0sEII.js +2 -0
  251. package/dist/components/p-kDZ0sEII.js.map +1 -0
  252. package/dist/components/{p-BPlWEidl.js → p-ljbw3UMZ.js} +2 -2
  253. package/dist/components/{p-DZ58Sg5a.js → p-vfCu7XSc.js} +2 -2
  254. package/dist/components/p-vfCu7XSc.js.map +1 -0
  255. package/dist/components/{p-DFjIBS5B.js → p-xdmJCPCg.js} +2 -2
  256. package/dist/components/{p-CAxDdYjh.js → p-xtGGIZmU.js} +2 -2
  257. package/dist/docs/components.json +18102 -14568
  258. package/dist/lib/components/Icon/flag-icon-catalog.d.ts +2 -0
  259. package/dist/lib/components/Icon/icon-cache.d.ts +36 -4
  260. package/dist/lib/components/Icon/map-icon-catalog.d.ts +2 -0
  261. package/dist/lib/shell/index.js +2 -2
  262. package/dist/lib/shell/index.js.map +1 -1
  263. package/dist/lib/utils/button-render.d.ts +1 -1
  264. package/dist/lib/utils/clock-time.d.ts +22 -0
  265. package/dist/lib/utils/date-filter-value.d.ts +4 -0
  266. package/dist/lib/utils/index.d.ts +3 -1
  267. package/dist/lib/utils/index.js +201 -5
  268. package/dist/lib/utils/index.js.map +4 -4
  269. package/dist/mcp-data/registry/agent-activity.json +2 -2
  270. package/dist/mcp-data/registry/agent-questionnaire.json +2 -2
  271. package/dist/mcp-data/registry/agent-response.json +1 -1
  272. package/dist/mcp-data/registry/agent-source-list.json +1 -1
  273. package/dist/mcp-data/registry/agent-tool-call.json +2 -2
  274. package/dist/mcp-data/registry/attachment-list.json +1 -1
  275. package/dist/mcp-data/registry/avatar.json +1 -1
  276. package/dist/mcp-data/registry/badge.json +1 -1
  277. package/dist/mcp-data/registry/banner.json +1 -1
  278. package/dist/mcp-data/registry/bar-action.json +1 -1
  279. package/dist/mcp-data/registry/bar-nav.json +1 -1
  280. package/dist/mcp-data/registry/bar-page-title.json +1 -1
  281. package/dist/mcp-data/registry/bar-title.json +3 -3
  282. package/dist/mcp-data/registry/bar-workflow.json +1 -1
  283. package/dist/mcp-data/registry/breadcrumb.json +1 -1
  284. package/dist/mcp-data/registry/button-filled.json +1 -1
  285. package/dist/mcp-data/registry/button-inverted.json +580 -0
  286. package/dist/mcp-data/registry/button-unfilled.json +1 -1
  287. package/dist/mcp-data/registry/calendar.json +273 -0
  288. package/dist/mcp-data/registry/card-action-center.json +1 -1
  289. package/dist/mcp-data/registry/card-chart.json +1 -1
  290. package/dist/mcp-data/registry/card-navigation.json +5 -3
  291. package/dist/mcp-data/registry/card-overview.json +1 -1
  292. package/dist/mcp-data/registry/card-setting.json +1 -1
  293. package/dist/mcp-data/registry/card-settings-scope.json +1 -1
  294. package/dist/mcp-data/registry/chart-legend.json +1 -1
  295. package/dist/mcp-data/registry/chart.json +1 -1
  296. package/dist/mcp-data/registry/checkbox.json +1 -1
  297. package/dist/mcp-data/registry/chip.json +1 -1
  298. package/dist/mcp-data/registry/code-block.json +1 -1
  299. package/dist/mcp-data/registry/conversation-list-item.json +1 -1
  300. package/dist/mcp-data/registry/conversation-list-section.json +1 -1
  301. package/dist/mcp-data/registry/conversation-list.json +10 -32
  302. package/dist/mcp-data/registry/data-customize.json +374 -0
  303. package/dist/mcp-data/registry/{table-filter.json → data-filter.json} +33 -33
  304. package/dist/mcp-data/registry/data-group.json +358 -0
  305. package/dist/mcp-data/registry/data-preferences.json +566 -0
  306. package/dist/mcp-data/registry/data-saved-views.json +433 -0
  307. package/dist/mcp-data/registry/data-search.json +367 -0
  308. package/dist/mcp-data/registry/data-sort.json +254 -0
  309. package/dist/mcp-data/registry/data-toolbar.json +181 -0
  310. package/dist/mcp-data/registry/divider.json +1 -1
  311. package/dist/mcp-data/registry/empty-state.json +1 -1
  312. package/dist/mcp-data/registry/field.json +20 -15
  313. package/dist/mcp-data/registry/filter-menu.json +7 -11
  314. package/dist/mcp-data/registry/icon.json +13 -7
  315. package/dist/mcp-data/registry/input-date.json +516 -0
  316. package/dist/mcp-data/registry/input-time.json +535 -0
  317. package/dist/mcp-data/registry/input.json +57 -9
  318. package/dist/mcp-data/registry/loader.json +1 -1
  319. package/dist/mcp-data/registry/markdown.json +1 -1
  320. package/dist/mcp-data/registry/menu.json +3 -3
  321. package/dist/mcp-data/registry/message-actions.json +1 -1
  322. package/dist/mcp-data/registry/message-bubble.json +1 -1
  323. package/dist/mcp-data/registry/message-composer.json +2 -2
  324. package/dist/mcp-data/registry/message-scroller.json +1 -1
  325. package/dist/mcp-data/registry/message.json +1 -1
  326. package/dist/mcp-data/registry/mobile-bar-nav.json +2 -2
  327. package/dist/mcp-data/registry/mobile-header.json +1 -1
  328. package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
  329. package/dist/mcp-data/registry/mobile-sheet-nav.json +2 -2
  330. package/dist/mcp-data/registry/modal.json +1 -1
  331. package/dist/mcp-data/registry/pagination.json +1 -1
  332. package/dist/mcp-data/registry/panel-nav.json +1 -1
  333. package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
  334. package/dist/mcp-data/registry/panel-tool-header.json +1 -1
  335. package/dist/mcp-data/registry/panel-tool-search.json +1 -1
  336. package/dist/mcp-data/registry/panel-tools.json +3 -3
  337. package/dist/mcp-data/registry/paper-texture.json +1 -1
  338. package/dist/mcp-data/registry/radio.json +1 -1
  339. package/dist/mcp-data/registry/registry.json +5911 -4816
  340. package/dist/mcp-data/registry/score.json +1 -1
  341. package/dist/mcp-data/registry/scroll-overlay.json +1 -1
  342. package/dist/mcp-data/registry/select.json +64 -8
  343. package/dist/mcp-data/registry/shell-app.json +1 -1
  344. package/dist/mcp-data/registry/shell-page.json +1 -1
  345. package/dist/mcp-data/registry/shell-tools.json +1 -1
  346. package/dist/mcp-data/registry/skeleton.json +1 -1
  347. package/dist/mcp-data/registry/slider.json +1 -1
  348. package/dist/mcp-data/registry/swatch-picker.json +1 -1
  349. package/dist/mcp-data/registry/switch.json +1 -1
  350. package/dist/mcp-data/registry/tab-group.json +1 -1
  351. package/dist/mcp-data/registry/table.json +71 -71
  352. package/dist/mcp-data/registry/tag.json +1 -1
  353. package/dist/mcp-data/registry/text.json +1 -1
  354. package/dist/mcp-data/registry/textarea.json +3 -3
  355. package/dist/mcp-data/registry/time-picker.json +259 -0
  356. package/dist/mcp-data/registry/toast.json +1 -1
  357. package/dist/mcp-data/registry/tooltip-chart.json +1 -1
  358. package/dist/mcp-data/registry/tooltip.json +1 -1
  359. package/dist/mcp-data/registry/typing-indicator.json +1 -1
  360. package/dist/react/components.d.ts +13 -7
  361. package/dist/react/components.js +13 -7
  362. package/dist/react/ds-button-inverted.d.ts +13 -0
  363. package/dist/react/ds-button-inverted.js +15 -0
  364. package/dist/react/ds-calendar.d.ts +12 -0
  365. package/dist/react/ds-calendar.js +12 -0
  366. package/dist/react/ds-data-customize.d.ts +13 -0
  367. package/dist/react/ds-data-customize.js +15 -0
  368. package/dist/react/ds-data-filter.d.ts +18 -0
  369. package/dist/react/{ds-table-filter.js → ds-data-filter.js} +5 -5
  370. package/dist/react/ds-data-group.d.ts +14 -0
  371. package/dist/react/{ds-table-group.js → ds-data-group.js} +5 -5
  372. package/dist/react/ds-data-preferences.d.ts +21 -0
  373. package/dist/react/{ds-table-preferences.js → ds-data-preferences.js} +6 -6
  374. package/dist/react/ds-data-saved-views.d.ts +17 -0
  375. package/dist/react/{ds-table-saved-views.js → ds-data-saved-views.js} +5 -5
  376. package/dist/react/ds-data-search.d.ts +14 -0
  377. package/dist/react/{ds-table-search.js → ds-data-search.js} +5 -5
  378. package/dist/react/ds-data-sort.d.ts +12 -0
  379. package/dist/react/ds-data-sort.js +12 -0
  380. package/dist/react/{ds-table-toolbar.d.ts → ds-data-toolbar.d.ts} +3 -3
  381. package/dist/react/ds-data-toolbar.js +12 -0
  382. package/dist/react/ds-field.d.ts +1 -1
  383. package/dist/react/ds-input-date.d.ts +12 -0
  384. package/dist/react/ds-input-date.js +12 -0
  385. package/dist/react/ds-input-time.d.ts +12 -0
  386. package/dist/react/ds-input-time.js +12 -0
  387. package/dist/react/ds-table.d.ts +3 -3
  388. package/dist/react/ds-table.js +1 -1
  389. package/dist/react/ds-time-picker.d.ts +12 -0
  390. package/dist/react/ds-time-picker.js +12 -0
  391. package/dist/styles/table.css +11 -11
  392. package/dist/types/components/BarTitle/BarTitle.d.ts +1 -0
  393. package/dist/types/components/BarTitle/bar-title-action-chrome.d.ts +2 -0
  394. package/dist/types/components/ButtonInverted/ButtonInverted.d.ts +83 -0
  395. package/dist/types/components/ButtonInverted/index.d.ts +2 -0
  396. package/dist/types/components/Calendar/Calendar.d.ts +32 -0
  397. package/dist/types/components/Calendar/calendar-grid.d.ts +19 -0
  398. package/dist/types/components/ConversationList/ConversationList.d.ts +0 -7
  399. package/dist/types/components/DataCustomize/DataCustomize.d.ts +67 -0
  400. package/dist/types/components/{TableFilter/TableFilter.d.ts → DataFilter/DataFilter.d.ts} +2 -2
  401. package/dist/types/components/{TableGroup/TableGroup.d.ts → DataGroup/DataGroup.d.ts} +8 -8
  402. package/dist/types/components/{TablePreferences/TablePreferences.d.ts → DataPreferences/DataPreferences.d.ts} +29 -13
  403. package/dist/types/components/{TableSavedViews/TableSavedViews.d.ts → DataSavedViews/DataSavedViews.d.ts} +10 -10
  404. package/dist/types/components/DataSavedViews/data-saved-views-types.d.ts +24 -0
  405. package/dist/types/components/DataSavedViews/index.d.ts +2 -0
  406. package/dist/types/components/{TableSearch/TableSearch.d.ts → DataSearch/DataSearch.d.ts} +6 -6
  407. package/dist/types/components/{TableSearch/table-search-model.d.ts → DataSearch/data-search-model.d.ts} +6 -6
  408. package/dist/types/components/{TableSearch/table-search-types.d.ts → DataSearch/data-search-types.d.ts} +3 -3
  409. package/dist/types/components/{TableSort/TableSort.d.ts → DataSort/DataSort.d.ts} +7 -6
  410. package/dist/types/components/DataSort/data-sort-menu.d.ts +15 -0
  411. package/dist/types/components/{TableToolbar/TableToolbar.d.ts → DataToolbar/DataToolbar.d.ts} +3 -3
  412. package/dist/types/components/Field/Field.d.ts +7 -2
  413. package/dist/types/components/FilterMenu/FilterMenu.d.ts +0 -10
  414. package/dist/types/components/Icon/icon-cache.d.ts +36 -4
  415. package/dist/types/components/Icon/map-icon-catalog.d.ts +3 -0
  416. package/dist/types/components/Input/Input.d.ts +10 -0
  417. package/dist/types/components/InputDate/InputDate.d.ts +78 -0
  418. package/dist/types/components/InputTime/InputTime.d.ts +80 -0
  419. package/dist/types/components/PanelTools/PanelTools.d.ts +1 -1
  420. package/dist/types/components/Select/Select.d.ts +8 -1
  421. package/dist/types/components/Table/Table.d.ts +9 -9
  422. package/dist/types/components/Table/index.d.ts +1 -1
  423. package/dist/types/components/Table/table-action-menu.d.ts +1 -1
  424. package/dist/types/components/Table/table-body-renderer.d.ts +2 -2
  425. package/dist/types/components/Table/table-column-customizer.d.ts +9 -9
  426. package/dist/types/components/Table/table-group-load-controller.d.ts +2 -2
  427. package/dist/types/components/Table/table-model.d.ts +7 -7
  428. package/dist/types/components/Table/table-render-model.d.ts +3 -3
  429. package/dist/types/components/Table/table-types.d.ts +17 -36
  430. package/dist/types/components/Table/table-virtual-model.d.ts +2 -2
  431. package/dist/types/components/TimePicker/TimePicker.d.ts +33 -0
  432. package/dist/types/components.d.ts +5461 -4433
  433. package/dist/types/utils/button-render.d.ts +1 -1
  434. package/dist/types/utils/clock-time.d.ts +23 -0
  435. package/dist/types/utils/data-field.d.ts +38 -0
  436. package/dist/types/utils/date-filter-value.d.ts +4 -0
  437. package/dist/types/utils/index.d.ts +3 -1
  438. package/dist/types/utils/list-customizer.d.ts +38 -0
  439. package/dist/types/utils/table-caption-compact.d.ts +1 -1
  440. package/dist/vue/components.d.ts +13 -7
  441. package/dist/vue/components.js +13 -7
  442. package/dist/vue/ds-button-inverted.d.ts +3 -0
  443. package/dist/vue/ds-button-inverted.js +33 -0
  444. package/dist/vue/{ds-table-sort.d.ts → ds-calendar.d.ts} +1 -1
  445. package/dist/vue/ds-calendar.js +16 -0
  446. package/dist/vue/ds-conversation-list.js +1 -3
  447. package/dist/vue/ds-data-customize.d.ts +3 -0
  448. package/dist/vue/ds-data-customize.js +23 -0
  449. package/dist/vue/{ds-table-group.d.ts → ds-data-filter.d.ts} +1 -1
  450. package/dist/vue/{ds-table-filter.js → ds-data-filter.js} +2 -2
  451. package/dist/vue/{ds-table-filter.d.ts → ds-data-group.d.ts} +1 -1
  452. package/dist/vue/{ds-table-group.js → ds-data-group.js} +2 -2
  453. package/dist/vue/{ds-table-saved-views.d.ts → ds-data-preferences.d.ts} +1 -1
  454. package/dist/vue/{ds-table-preferences.js → ds-data-preferences.js} +10 -7
  455. package/dist/vue/ds-data-saved-views.d.ts +3 -0
  456. package/dist/vue/{ds-table-saved-views.js → ds-data-saved-views.js} +2 -2
  457. package/dist/vue/{ds-table-search.d.ts → ds-data-search.d.ts} +1 -1
  458. package/dist/vue/{ds-table-search.js → ds-data-search.js} +3 -3
  459. package/dist/vue/ds-data-sort.d.ts +3 -0
  460. package/dist/vue/{ds-table-sort.js → ds-data-sort.js} +3 -3
  461. package/dist/vue/ds-data-toolbar.d.ts +3 -0
  462. package/dist/vue/ds-data-toolbar.js +9 -0
  463. package/dist/vue/{ds-table-preferences.d.ts → ds-input-date.d.ts} +1 -1
  464. package/dist/vue/ds-input-date.js +31 -0
  465. package/dist/vue/ds-input-time.d.ts +3 -0
  466. package/dist/vue/ds-input-time.js +32 -0
  467. package/dist/vue/ds-input.js +2 -0
  468. package/dist/vue/ds-select.js +3 -0
  469. package/dist/vue/ds-table.js +4 -4
  470. package/dist/vue/ds-time-picker.d.ts +3 -0
  471. package/dist/vue/ds-time-picker.js +16 -0
  472. package/package.json +3 -3
  473. package/dist/angular/ds-table-filter.d.ts +0 -50
  474. package/dist/angular/ds-table-group.d.ts +0 -29
  475. package/dist/angular/ds-table-preferences.d.ts +0 -39
  476. package/dist/angular/ds-table-saved-views.d.ts +0 -49
  477. package/dist/angular/ds-table-search.d.ts +0 -20
  478. package/dist/angular/ds-table-sort.d.ts +0 -16
  479. package/dist/angular/ds-table-toolbar.d.ts +0 -12
  480. package/dist/components/ds-table-filter.js +0 -2
  481. package/dist/components/ds-table-filter.js.map +0 -1
  482. package/dist/components/ds-table-group.js +0 -2
  483. package/dist/components/ds-table-preferences.d.ts +0 -11
  484. package/dist/components/ds-table-preferences.js +0 -2
  485. package/dist/components/ds-table-preferences.js.map +0 -1
  486. package/dist/components/ds-table-saved-views.js +0 -2
  487. package/dist/components/ds-table-saved-views.js.map +0 -1
  488. package/dist/components/ds-table-search.js +0 -2
  489. package/dist/components/ds-table-search.js.map +0 -1
  490. package/dist/components/ds-table-sort.js +0 -2
  491. package/dist/components/ds-table-sort.js.map +0 -1
  492. package/dist/components/ds-table-toolbar.d.ts +0 -11
  493. package/dist/components/ds-table-toolbar.js +0 -2
  494. package/dist/components/ds-table-toolbar.js.map +0 -1
  495. package/dist/components/p-BINSI_KF.js +0 -2
  496. package/dist/components/p-BbfBvMRR.js +0 -2
  497. package/dist/components/p-BbfBvMRR.js.map +0 -1
  498. package/dist/components/p-C1_3CVma.js +0 -2
  499. package/dist/components/p-C1_3CVma.js.map +0 -1
  500. package/dist/components/p-CKarsuR2.js +0 -2
  501. package/dist/components/p-CKarsuR2.js.map +0 -1
  502. package/dist/components/p-Cea7rROU.js +0 -2
  503. package/dist/components/p-Cea7rROU.js.map +0 -1
  504. package/dist/components/p-Cmj04E5Q.js +0 -2
  505. package/dist/components/p-Cmj04E5Q.js.map +0 -1
  506. package/dist/components/p-Cq_Qpe_C.js +0 -2
  507. package/dist/components/p-Cq_Qpe_C.js.map +0 -1
  508. package/dist/components/p-CwqFJMvP.js +0 -2
  509. package/dist/components/p-D44g2Kw1.js.map +0 -1
  510. package/dist/components/p-DZ58Sg5a.js.map +0 -1
  511. package/dist/components/p-D_u8WhlU.js +0 -2
  512. package/dist/components/p-Dhw_W8nk.js.map +0 -1
  513. package/dist/components/p-FPZbS19l.js +0 -2
  514. package/dist/components/p-FPZbS19l.js.map +0 -1
  515. package/dist/components/p-KBrC9IG4.js +0 -2
  516. package/dist/components/p-KBrC9IG4.js.map +0 -1
  517. package/dist/components/p-N5SHSVo2.js +0 -2
  518. package/dist/components/p-QjkufCcn.js +0 -2
  519. package/dist/components/p-QjkufCcn.js.map +0 -1
  520. package/dist/components/p-UAIxh67Q.js +0 -2
  521. package/dist/components/p-UAIxh67Q.js.map +0 -1
  522. package/dist/components/p-beCz9OnD.js +0 -2
  523. package/dist/components/p-xHGqrz_p.js +0 -2
  524. package/dist/mcp-data/registry/table-group.json +0 -358
  525. package/dist/mcp-data/registry/table-preferences.json +0 -511
  526. package/dist/mcp-data/registry/table-saved-views.json +0 -431
  527. package/dist/mcp-data/registry/table-search.json +0 -366
  528. package/dist/mcp-data/registry/table-sort.json +0 -253
  529. package/dist/mcp-data/registry/table-toolbar.json +0 -180
  530. package/dist/react/ds-table-filter.d.ts +0 -18
  531. package/dist/react/ds-table-group.d.ts +0 -14
  532. package/dist/react/ds-table-preferences.d.ts +0 -21
  533. package/dist/react/ds-table-saved-views.d.ts +0 -17
  534. package/dist/react/ds-table-search.d.ts +0 -14
  535. package/dist/react/ds-table-sort.d.ts +0 -12
  536. package/dist/react/ds-table-sort.js +0 -12
  537. package/dist/react/ds-table-toolbar.js +0 -12
  538. package/dist/types/components/FilterMenu/filter-menu-calendar.d.ts +0 -13
  539. package/dist/types/components/TableSavedViews/index.d.ts +0 -2
  540. package/dist/types/components/TableSavedViews/table-saved-views-types.d.ts +0 -24
  541. package/dist/types/components/TableSort/table-sort-menu.d.ts +0 -15
  542. package/dist/vue/ds-table-toolbar.d.ts +0 -3
  543. package/dist/vue/ds-table-toolbar.js +0 -9
  544. /package/dist/components/{ds-table-group.js.map → ds-calendar.js.map} +0 -0
  545. /package/dist/components/{p-BQsVI_vO.js.map → p-5URekSny.js.map} +0 -0
  546. /package/dist/components/{p-eo_pmPqp.js.map → p-7V1AhetH.js.map} +0 -0
  547. /package/dist/components/{p-yZRXPHDe.js.map → p-8yBdCXCn.js.map} +0 -0
  548. /package/dist/components/{p-BQaO7cg_.js.map → p-BhJXmuRA.js.map} +0 -0
  549. /package/dist/components/{p-n68x-ZKp.js.map → p-Bm7rqs3C.js.map} +0 -0
  550. /package/dist/components/{p-DdspY23v.js.map → p-Bn8I7iw6.js.map} +0 -0
  551. /package/dist/components/{p-BnWxbhFP.js.map → p-Bpd6YCo4.js.map} +0 -0
  552. /package/dist/components/{p-B-9fdIWv.js.map → p-C-3YqeTb.js.map} +0 -0
  553. /package/dist/components/{p-umAf0fBn.js.map → p-CD4DZPy_.js.map} +0 -0
  554. /package/dist/components/{p-CuwopElg.js.map → p-CGidq1iC.js.map} +0 -0
  555. /package/dist/components/{p-CI7VfYC3.js.map → p-CUcUHwI3.js.map} +0 -0
  556. /package/dist/components/{p-BcdHgPi5.js.map → p-CeXf9-X3.js.map} +0 -0
  557. /package/dist/components/{p-CSnsz3Eb.js.map → p-CiH4GG6r.js.map} +0 -0
  558. /package/dist/components/{p-y06IxxoN.js.map → p-CiJ1WR11.js.map} +0 -0
  559. /package/dist/components/{p-BmFeeR4q.js.map → p-CqW2eyiF.js.map} +0 -0
  560. /package/dist/components/{p-CzbsTZt7.js.map → p-Cxr0IQjC.js.map} +0 -0
  561. /package/dist/components/{p-CqlBlv55.js.map → p-CzIpquvw.js.map} +0 -0
  562. /package/dist/components/{p-DC69DgAR.js.map → p-D0y7Sja6.js.map} +0 -0
  563. /package/dist/components/{p-C7CZ9pnP.js.map → p-D6Wl3dRO.js.map} +0 -0
  564. /package/dist/components/{p-BPhbwXOv.js.map → p-D922f6Tb.js.map} +0 -0
  565. /package/dist/components/{p-beRFLHbB.js.map → p-DHICPS4n.js.map} +0 -0
  566. /package/dist/components/{p-omPm8_vx.js.map → p-DOAybCp0.js.map} +0 -0
  567. /package/dist/components/{p-BnzsBNUY.js.map → p-Dn9QHL4O.js.map} +0 -0
  568. /package/dist/components/{p-DGzn4k4h.js.map → p-Do2FJd1y.js.map} +0 -0
  569. /package/dist/components/{p-DTDLlinw.js.map → p-DpoTwJAR.js.map} +0 -0
  570. /package/dist/components/{p-CLGtPE0K.js.map → p-DwbcNDJF.js.map} +0 -0
  571. /package/dist/components/{p-C8ek-1SP.js.map → p-E5W27Fu_.js.map} +0 -0
  572. /package/dist/components/{p-mpk_Mm8_.js.map → p-FIBCluwV.js.map} +0 -0
  573. /package/dist/components/{p-CE540WZ7.js.map → p-MG4lcN0D.js.map} +0 -0
  574. /package/dist/components/{p-DtLQIMsa.js.map → p-ZhP2tVmM.js.map} +0 -0
  575. /package/dist/components/{p-BPlWEidl.js.map → p-ljbw3UMZ.js.map} +0 -0
  576. /package/dist/components/{p-DFjIBS5B.js.map → p-xdmJCPCg.js.map} +0 -0
  577. /package/dist/components/{p-CAxDdYjh.js.map → p-xtGGIZmU.js.map} +0 -0
@@ -385,7 +385,7 @@
385
385
  "peerDependencies": {
386
386
  "required": [
387
387
  "@ds-mo/tokens ^6.5.1",
388
- "@ds-mo/icons ^7.0.0"
388
+ "@ds-mo/icons ^8.1.0"
389
389
  ],
390
390
  "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
391
391
  }
@@ -340,7 +340,7 @@
340
340
  "peerDependencies": {
341
341
  "required": [
342
342
  "@ds-mo/tokens ^6.5.1",
343
- "@ds-mo/icons ^7.0.0"
343
+ "@ds-mo/icons ^8.1.0"
344
344
  ],
345
345
  "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
346
346
  }
@@ -52,7 +52,7 @@
52
52
  "The default four visible rows can be changed with rows; rows is clamped to at least one.",
53
53
  "Vertical resizing is enabled by default and can be disabled when the surrounding layout owns the field height.",
54
54
  "Size changes typography and inset spacing without changing the authored row count.",
55
- "Border, focus, error, placeholder, inactive, hover, and pressed treatments follow the same shared recipes as Input."
55
+ "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."
56
56
  ],
57
57
  "responsiveBehavior": [
58
58
  "Textarea fills its parent by default and follows the width supplied by Field or the form layout.",
@@ -572,7 +572,7 @@
572
572
  "peerDependencies": {
573
573
  "required": [
574
574
  "@ds-mo/tokens ^6.5.1",
575
- "@ds-mo/icons ^7.0.0"
575
+ "@ds-mo/icons ^8.1.0"
576
576
  ],
577
577
  "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
578
578
  }
@@ -593,7 +593,7 @@
593
593
  },
594
594
  {
595
595
  "path": "src/wc/components/Textarea/Textarea.tsx",
596
- "content": "import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport {\n controlWidthClass,\n CONTROL_TEXT_VARIANT,\n DEFAULT_REQUIRED_MESSAGE,\n restoreStringFormState,\n setFormControlValue,\n setRequiredValidity,\n type ControlWidth,\n} from '../../utils';\n\nexport type TextareaSize = 'lg' | 'md' | 'sm' | 'xs';\nexport type TextareaWidth = ControlWidth;\nexport type TextareaResize = 'vertical' | 'none';\n\nlet idCounter = 0;\n\n@Component({\n tag: 'ds-textarea',\n styleUrl: 'Textarea.css',\n scoped: true,\n formAssociated: true,\n})\nexport class Textarea {\n @Element() el!: HTMLElement;\n @AttachInternals() internals!: ElementInternals;\n\n private generatedId = `ds-textarea-${++idCounter}`;\n private errorId = `${this.generatedId}-error`;\n\n @Prop({ mutable: true }) value: string = '';\n @Prop({ reflect: true }) name: string | undefined;\n @Prop({ reflect: true }) form: string | undefined;\n @Prop({ reflect: true }) disabled: boolean = false;\n /** Keeps the value focusable and submittable while preventing edits. */\n @Prop({ reflect: true }) readOnly: boolean = false;\n @Prop({ reflect: true }) required: boolean = false;\n @Prop() requiredMessage: string = DEFAULT_REQUIRED_MESSAGE;\n @Prop() placeholder: string | undefined;\n /** Visible text rows before the field scrolls. */\n @Prop() rows: number = 4;\n /** Whether the user can resize the field vertically. */\n @Prop() resize: TextareaResize = 'vertical';\n /** Native browser autofill hint. */\n @Prop({ attribute: 'autocomplete' }) autoComplete: string | undefined;\n /** Preferred virtual keyboard without changing the value semantics. */\n @Prop({ attribute: 'inputmode' }) inputMode: string = '';\n /** Preferred virtual-keyboard action label. */\n @Prop({ attribute: 'enterkeyhint' }) enterKeyHint: string = '';\n /** Whether the browser should check spelling and grammar. */\n @Prop({ attribute: 'spellcheck' }) spellCheck: boolean = true;\n /** Control density for typography and inset spacing. */\n @Prop() size: TextareaSize = 'md';\n /** Width fit — fill the parent (default) or hug the available content. */\n @Prop() width: TextareaWidth = 'fill';\n /** Show the standard inset border, including focused and invalid strokes. */\n @Prop() hasBorder: boolean = true;\n /** Show the standard hover and pressed fill when the field is not embedded in interactive chrome. */\n @Prop() hasInteractionFill: boolean = true;\n @Prop() isInactive: boolean = false;\n @Prop() autoFocus: boolean = false;\n @Prop() error: boolean = false;\n @Prop() errorMessage: string | undefined;\n /** Associates the internal textarea with an external <label>. */\n @Prop() inputId: string | undefined;\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n @Prop({ attribute: 'aria-labelledby' }) ariaLabelledby: string | undefined;\n @Prop({ attribute: 'aria-describedby' }) ariaDescribedby: string | undefined;\n\n @Event() dsChange!: EventEmitter<string>;\n\n private initialValue = '';\n private textareaEl?: HTMLTextAreaElement;\n @State() private formDisabled = false;\n @State() private focused = false;\n @State() private touched = false;\n\n componentWillLoad() {\n this.initialValue = this.value;\n this.syncFormValue();\n }\n\n @Watch('value')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('required')\n syncFormValue() {\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n setFormControlValue(this.internals, this.value, { inactive });\n const missing = this.required && !inactive && this.value.length === 0;\n setRequiredValidity(this.internals, missing, this.requiredMessage);\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.value = this.initialValue;\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n this.value = restoreStringFormState(state);\n }\n\n @Method()\n async setFocus() {\n this.textareaEl?.focus();\n }\n\n private handleInput = (event: Event) => {\n this.value = (event.target as HTMLTextAreaElement).value;\n this.dsChange.emit(this.value);\n };\n\n private handleFocus = () => {\n this.focused = true;\n };\n\n private handleBlur = () => {\n this.focused = false;\n this.touched = true;\n };\n\n render() {\n const inputId = this.inputId ?? this.generatedId;\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n const filled = this.value.length > 0;\n const dirty = this.value !== this.initialValue;\n const showError = this.error && Boolean(this.errorMessage);\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const rows = Number.isFinite(this.rows) ? Math.max(1, Math.floor(this.rows)) : 4;\n const describedBy =\n [this.ariaDescribedby, showError ? this.errorId : undefined].filter(Boolean).join(' ') ||\n undefined;\n\n return (\n <Host\n class={{\n 'textarea-host': true,\n 'ds-field-stack': true,\n 'ds-control-inactive': inactive,\n [`ds-control--${this.size}`]: true,\n ...controlWidthClass(this.width),\n }}\n data-disabled={inactive ? '' : undefined}\n data-readonly={this.readOnly ? '' : undefined}\n data-required={this.required ? '' : undefined}\n data-invalid={this.error ? '' : undefined}\n data-filled={filled ? '' : undefined}\n data-focused={this.focused ? '' : undefined}\n data-dirty={dirty ? '' : undefined}\n data-touched={this.touched ? '' : undefined}\n >\n <div\n class={{\n 'textarea-control': true,\n 'textarea-control--resizable': this.resize === 'vertical',\n 'textarea-control--bordered': this.hasBorder,\n 'textarea-control--error': this.hasBorder && this.error,\n 'ds-interaction-fill': this.hasInteractionFill,\n [`ds-control--${this.size}`]: true,\n }}\n >\n <textarea\n ref={element => {\n this.textareaEl = element;\n }}\n id={inputId}\n value={this.value}\n placeholder={this.placeholder}\n rows={rows}\n disabled={inactive}\n readOnly={this.readOnly}\n required={this.required}\n autoFocus={this.autoFocus}\n autoComplete={this.autoComplete}\n inputMode={this.inputMode || undefined}\n enterKeyHint={this.enterKeyHint || undefined}\n spellcheck={this.spellCheck}\n class={`native-textarea native-textarea--resize-${this.resize} ds-text--${textVariant.replace('text-', '')} ds-text--regular ds-interaction-fill__content`}\n aria-label={this.ariaLabel}\n aria-labelledby={this.ariaLabelledby}\n aria-describedby={describedBy}\n aria-invalid={this.error ? 'true' : undefined}\n onInput={this.handleInput}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n </div>\n {showError && (\n <ds-text\n class=\"error-text\"\n as=\"div\"\n variant=\"text-body-small\"\n color=\"negative\"\n textId={this.errorId}\n role=\"alert\"\n >\n {this.errorMessage}\n </ds-text>\n )}\n </Host>\n );\n }\n}\n",
596
+ "content": "import {\n AttachInternals,\n Component,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport {\n controlWidthClass,\n CONTROL_TEXT_VARIANT,\n DEFAULT_REQUIRED_MESSAGE,\n restoreStringFormState,\n setFormControlValue,\n setRequiredValidity,\n type ControlWidth,\n} from '../../utils';\n\nexport type TextareaSize = 'lg' | 'md' | 'sm' | 'xs';\nexport type TextareaWidth = ControlWidth;\nexport type TextareaResize = 'vertical' | 'none';\n\nlet idCounter = 0;\n\n@Component({\n tag: 'ds-textarea',\n styleUrl: 'Textarea.css',\n scoped: true,\n formAssociated: true,\n})\nexport class Textarea {\n @Element() el!: HTMLElement;\n @AttachInternals() internals!: ElementInternals;\n\n private generatedId = `ds-textarea-${++idCounter}`;\n private errorId = `${this.generatedId}-error`;\n\n @Prop({ mutable: true }) value: string = '';\n @Prop({ reflect: true }) name: string | undefined;\n @Prop({ reflect: true }) form: string | undefined;\n @Prop({ reflect: true }) disabled: boolean = false;\n /** Keeps the value focusable and submittable while preventing edits. */\n @Prop({ reflect: true }) readOnly: boolean = false;\n @Prop({ reflect: true }) required: boolean = false;\n @Prop() requiredMessage: string = DEFAULT_REQUIRED_MESSAGE;\n @Prop() placeholder: string | undefined;\n /** Visible text rows before the field scrolls. */\n @Prop() rows: number = 4;\n /** Whether the user can resize the field vertically. */\n @Prop() resize: TextareaResize = 'vertical';\n /** Native browser autofill hint. */\n @Prop({ attribute: 'autocomplete' }) autoComplete: string | undefined;\n /** Preferred virtual keyboard without changing the value semantics. */\n @Prop({ attribute: 'inputmode' }) inputMode: string = '';\n /** Preferred virtual-keyboard action label. */\n @Prop({ attribute: 'enterkeyhint' }) enterKeyHint: string = '';\n /** Whether the browser should check spelling and grammar. */\n @Prop({ attribute: 'spellcheck' }) spellCheck: boolean = true;\n /** Control density for typography and inset spacing. */\n @Prop() size: TextareaSize = 'md';\n /** Width fit — fill the parent (default) or hug the available content. */\n @Prop() width: TextareaWidth = 'fill';\n /** Show the standard inset border, including focused and invalid strokes. */\n @Prop() hasBorder: boolean = true;\n /** Show the standard hover and pressed fill when the field is not embedded in interactive chrome. */\n @Prop() hasInteractionFill: boolean = true;\n @Prop() isInactive: boolean = false;\n @Prop() autoFocus: boolean = false;\n @Prop() error: boolean = false;\n @Prop() errorMessage: string | undefined;\n /** Associates the internal textarea with an external <label>. */\n @Prop() inputId: string | undefined;\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n @Prop({ attribute: 'aria-labelledby' }) ariaLabelledby: string | undefined;\n @Prop({ attribute: 'aria-describedby' }) ariaDescribedby: string | undefined;\n\n @Event() dsChange!: EventEmitter<string>;\n\n private initialValue = '';\n private textareaEl?: HTMLTextAreaElement;\n @State() private formDisabled = false;\n @State() private focused = false;\n @State() private touched = false;\n\n componentWillLoad() {\n this.initialValue = this.value;\n this.syncFormValue();\n }\n\n @Watch('value')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('required')\n syncFormValue() {\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n setFormControlValue(this.internals, this.value, { inactive });\n const missing = this.required && !inactive && this.value.length === 0;\n setRequiredValidity(this.internals, missing, this.requiredMessage);\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.value = this.initialValue;\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n this.value = restoreStringFormState(state);\n }\n\n @Method()\n async setFocus() {\n this.textareaEl?.focus();\n }\n\n private handleInput = (event: Event) => {\n this.value = (event.target as HTMLTextAreaElement).value;\n this.dsChange.emit(this.value);\n };\n\n private handleFocus = () => {\n this.focused = true;\n };\n\n private handleBlur = () => {\n this.focused = false;\n this.touched = true;\n };\n\n render() {\n const inputId = this.inputId ?? this.generatedId;\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n const filled = this.value.length > 0;\n const dirty = this.value !== this.initialValue;\n const showError = this.error && Boolean(this.errorMessage);\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const rows = Number.isFinite(this.rows) ? Math.max(1, Math.floor(this.rows)) : 4;\n const describedBy =\n [this.ariaDescribedby, showError ? this.errorId : undefined].filter(Boolean).join(' ') ||\n undefined;\n\n return (\n <Host\n class={{\n 'textarea-host': true,\n 'ds-field-stack': true,\n 'ds-field-stack--supporting-inset': !this.hasBorder,\n 'ds-control-inactive': inactive,\n [`ds-control--${this.size}`]: true,\n ...controlWidthClass(this.width),\n }}\n data-disabled={inactive ? '' : undefined}\n data-readonly={this.readOnly ? '' : undefined}\n data-required={this.required ? '' : undefined}\n data-invalid={this.error ? '' : undefined}\n data-filled={filled ? '' : undefined}\n data-focused={this.focused ? '' : undefined}\n data-dirty={dirty ? '' : undefined}\n data-touched={this.touched ? '' : undefined}\n >\n <div\n class={{\n 'textarea-control': true,\n 'textarea-control--resizable': this.resize === 'vertical',\n 'textarea-control--bordered': this.hasBorder,\n 'textarea-control--error': this.hasBorder && this.error,\n 'ds-interaction-fill': this.hasInteractionFill,\n [`ds-control--${this.size}`]: true,\n }}\n >\n <textarea\n ref={element => {\n this.textareaEl = element;\n }}\n id={inputId}\n value={this.value}\n placeholder={this.placeholder}\n rows={rows}\n disabled={inactive}\n readOnly={this.readOnly}\n required={this.required}\n autoFocus={this.autoFocus}\n autoComplete={this.autoComplete}\n inputMode={this.inputMode || undefined}\n enterKeyHint={this.enterKeyHint || undefined}\n spellcheck={this.spellCheck}\n class={`native-textarea native-textarea--resize-${this.resize} ds-text--${textVariant.replace('text-', '')} ds-text--regular ds-interaction-fill__content`}\n aria-label={this.ariaLabel}\n aria-labelledby={this.ariaLabelledby}\n aria-describedby={describedBy}\n aria-invalid={this.error ? 'true' : undefined}\n onInput={this.handleInput}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n </div>\n {showError && (\n <ds-text\n class=\"error-text\"\n as=\"div\"\n variant=\"text-body-small\"\n color=\"negative\"\n textId={this.errorId}\n role=\"alert\"\n >\n {this.errorMessage}\n </ds-text>\n )}\n </Host>\n );\n }\n}\n",
597
597
  "type": "registry:ui"
598
598
  }
599
599
  ]
@@ -0,0 +1,259 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
3
+ "name": "time-picker",
4
+ "title": "TimePicker",
5
+ "description": "Bounded 12-hour clock lists for choosing hour, minute, and AM/PM, reused by form time fields.",
6
+ "type": "registry:ui",
7
+ "meta": {
8
+ "library": "@ds-mo/ui",
9
+ "distribution": "npm",
10
+ "storybook": "https://zainadeel.github.io/compomo/?path=/story/time-picker",
11
+ "source": "src/wc/components/TimePicker/TimePicker.tsx",
12
+ "intentStatus": "complete",
13
+ "intent": {
14
+ "audience": "general",
15
+ "status": "stable",
16
+ "summary": "Bounded 12-hour clock lists for choosing hour, minute, and AM/PM, reused by form time fields.",
17
+ "useWhen": [
18
+ "A user picks a clock time from hour, minute, and AM/PM lists.",
19
+ "A time field needs 32px clock tiles that match calendar day geometry and the shared choice-list selected treatment."
20
+ ],
21
+ "avoidWhen": [
22
+ "The user types a time without opening a picker; the owning field keeps that editable value.",
23
+ "The value is a calendar date rather than a clock time.",
24
+ "The user chooses from a finite set of named schedule options rather than an exact time."
25
+ ],
26
+ "alternatives": [
27
+ {
28
+ "when": "The time is a form field that can be typed or picked.",
29
+ "component": "component:ds-input-time",
30
+ "reason": "InputTime owns the editable field, form association, and the time-picker popup."
31
+ },
32
+ {
33
+ "when": "The value is a calendar date.",
34
+ "component": "component:ds-calendar",
35
+ "reason": "Calendar owns the month grid for single dates and ranges."
36
+ }
37
+ ],
38
+ "commonlyComposedWith": [
39
+ "component:ds-input-time",
40
+ "component:ds-text"
41
+ ],
42
+ "accessibility": [
43
+ "Hour, minute, and AM/PM are separate labelled listboxes without visible column headings. Each list keeps one tab stop on the selected option.",
44
+ "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.",
45
+ "Inactive pickers disable every option. Optional min and max times disable combinations outside that inclusive bound."
46
+ ],
47
+ "states": [
48
+ "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.",
49
+ "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.",
50
+ "An empty value highlights 12:00 AM so the lists have a resting selection without inventing a second empty state."
51
+ ],
52
+ "responsiveBehavior": [
53
+ "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."
54
+ ],
55
+ "frameworkCaveats": {
56
+ "customElements": [
57
+ "Listen for dsChange. The detail is the clock time string HH:MM."
58
+ ],
59
+ "react": [
60
+ "Use DsTimePicker, bind value, and handle onDsChange."
61
+ ]
62
+ },
63
+ "references": [
64
+ {
65
+ "label": "Storybook examples",
66
+ "path": "src/wc/components/TimePicker/TimePicker.stories.ts"
67
+ }
68
+ ]
69
+ },
70
+ "api": {
71
+ "props": {
72
+ "autoFocus": {
73
+ "type": "boolean",
74
+ "resolvedType": "boolean",
75
+ "attribute": "auto-focus",
76
+ "default": "false",
77
+ "required": false,
78
+ "mutable": false,
79
+ "description": "Move keyboard focus into the hour list after the picker is rendered."
80
+ },
81
+ "isInactive": {
82
+ "type": "boolean",
83
+ "resolvedType": "boolean",
84
+ "attribute": "is-inactive",
85
+ "default": "false",
86
+ "required": false,
87
+ "mutable": false
88
+ },
89
+ "max": {
90
+ "type": "string | undefined",
91
+ "resolvedType": "string | undefined",
92
+ "attribute": "max",
93
+ "required": false,
94
+ "mutable": false
95
+ },
96
+ "min": {
97
+ "type": "string | undefined",
98
+ "resolvedType": "string | undefined",
99
+ "attribute": "min",
100
+ "required": false,
101
+ "mutable": false
102
+ },
103
+ "step": {
104
+ "type": "string | number",
105
+ "resolvedType": "number | string",
106
+ "attribute": "step",
107
+ "default": "60",
108
+ "required": false,
109
+ "mutable": false,
110
+ "description": "Native time step in seconds. Defaults to minutes (`60`)."
111
+ },
112
+ "value": {
113
+ "type": "string",
114
+ "resolvedType": "string",
115
+ "attribute": "value",
116
+ "default": "''",
117
+ "required": false,
118
+ "mutable": false,
119
+ "description": "Clock value as `HH:MM`."
120
+ }
121
+ },
122
+ "events": [
123
+ {
124
+ "name": "dsChange",
125
+ "detail": "string",
126
+ "bubbles": true,
127
+ "cancelable": true,
128
+ "composed": true
129
+ }
130
+ ],
131
+ "methods": [
132
+ {
133
+ "name": "setFocus",
134
+ "signature": "setFocus() => Promise<void>"
135
+ }
136
+ ],
137
+ "slots": []
138
+ },
139
+ "props": {
140
+ "autoFocus": {
141
+ "type": "boolean",
142
+ "resolvedType": "boolean",
143
+ "attribute": "auto-focus",
144
+ "default": "false",
145
+ "required": false,
146
+ "mutable": false,
147
+ "description": "Move keyboard focus into the hour list after the picker is rendered."
148
+ },
149
+ "isInactive": {
150
+ "type": "boolean",
151
+ "resolvedType": "boolean",
152
+ "attribute": "is-inactive",
153
+ "default": "false",
154
+ "required": false,
155
+ "mutable": false
156
+ },
157
+ "max": {
158
+ "type": "string | undefined",
159
+ "resolvedType": "string | undefined",
160
+ "attribute": "max",
161
+ "required": false,
162
+ "mutable": false
163
+ },
164
+ "min": {
165
+ "type": "string | undefined",
166
+ "resolvedType": "string | undefined",
167
+ "attribute": "min",
168
+ "required": false,
169
+ "mutable": false
170
+ },
171
+ "step": {
172
+ "type": "string | number",
173
+ "resolvedType": "number | string",
174
+ "attribute": "step",
175
+ "default": "60",
176
+ "required": false,
177
+ "mutable": false,
178
+ "description": "Native time step in seconds. Defaults to minutes (`60`)."
179
+ },
180
+ "value": {
181
+ "type": "string",
182
+ "resolvedType": "string",
183
+ "attribute": "value",
184
+ "default": "''",
185
+ "required": false,
186
+ "mutable": false,
187
+ "description": "Clock value as `HH:MM`."
188
+ }
189
+ },
190
+ "events": [
191
+ {
192
+ "name": "dsChange",
193
+ "detail": "string",
194
+ "bubbles": true,
195
+ "cancelable": true,
196
+ "composed": true
197
+ }
198
+ ],
199
+ "methods": [
200
+ {
201
+ "name": "setFocus",
202
+ "signature": "setFocus() => Promise<void>"
203
+ }
204
+ ],
205
+ "slots": [],
206
+ "exports": {
207
+ "customElement": "ds-time-picker",
208
+ "react": "DsTimePicker",
209
+ "vue": "DsTimePicker",
210
+ "angular": "DsTimePicker"
211
+ },
212
+ "consumption": {
213
+ "install": "npm install @ds-mo/ui @ds-mo/tokens @ds-mo/icons",
214
+ "cssSetup": "import '@ds-mo/tokens';\nimport '@ds-mo/tokens/reset';\nimport '@ds-mo/tokens/globals';",
215
+ "customElements": {
216
+ "import": "import '@ds-mo/ui/dist/components/ds-time-picker.js';",
217
+ "example": "<ds-time-picker></ds-time-picker>"
218
+ },
219
+ "react": {
220
+ "import": "import { DsTimePicker } from '@ds-mo/ui/react';",
221
+ "example": "<DsTimePicker />"
222
+ },
223
+ "vue": {
224
+ "import": "import { DsTimePicker } from '@ds-mo/ui/vue';",
225
+ "example": "<DsTimePicker />"
226
+ },
227
+ "angular": {
228
+ "import": "import { DsTimePicker } from '@ds-mo/ui/angular/ds-time-picker';",
229
+ "example": "<ds-time-picker></ds-time-picker>"
230
+ },
231
+ "peerDependencies": {
232
+ "required": [
233
+ "@ds-mo/tokens ^6.5.1",
234
+ "@ds-mo/icons ^8.1.0"
235
+ ],
236
+ "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
237
+ }
238
+ }
239
+ },
240
+ "dependencies": [
241
+ "@ds-mo/ui",
242
+ "@ds-mo/tokens"
243
+ ],
244
+ "registryDependencies": [
245
+ "text"
246
+ ],
247
+ "files": [
248
+ {
249
+ "path": "src/wc/components/TimePicker/TimePicker.css",
250
+ "content": "@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n display: flex;\n min-height: 0;\n flex-direction: column;\n}\n\n.time-picker {\n display: grid;\n grid-template-columns: repeat(3, minmax(var(--dimension-size-400), 1fr));\n column-gap: var(--dimension-space-050);\n min-width: calc(\n (var(--dimension-size-400) * 3) + (var(--dimension-space-050) * 2) +\n (var(--ds-time-picker-padding, var(--dimension-space-100)) * 2)\n );\n padding: var(--ds-time-picker-padding, var(--dimension-space-100));\n}\n\n.time-picker__column {\n display: flex;\n min-width: 0;\n flex-direction: column;\n}\n\n.time-picker__list {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-050);\n max-height: calc((var(--dimension-size-400) * 7) + (var(--dimension-space-050) * 6));\n overflow-x: hidden;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n\n.time-picker-tile {\n appearance: none;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n min-width: 0;\n width: 100%;\n height: var(--dimension-size-400);\n padding: 0;\n border: 0;\n border-radius: var(--dimension-radius-025);\n background: transparent;\n color: var(--color-foreground-primary);\n cursor: default;\n}\n\n.time-picker-tile:disabled {\n cursor: not-allowed;\n}\n",
251
+ "type": "registry:ui"
252
+ },
253
+ {
254
+ "path": "src/wc/components/TimePicker/TimePicker.tsx",
255
+ "content": "import {\n Component,\n Element,\n Event,\n EventEmitter,\n Method,\n Prop,\n Watch,\n h,\n Host,\n} from '@stencil/core';\nimport {\n CLOCK_HOURS,\n CLOCK_PERIODS,\n clockMinuteStep,\n clockMinutes,\n isClockTimeStepAligned,\n isClockTimeOutOfRange,\n joinClockTime,\n splitClockTime,\n stepBoundedIndex,\n type ClockPeriod,\n type ClockTimeParts,\n} from '../../utils';\n\ntype TimePickerColumn = 'hour' | 'minute' | 'period';\n\n@Component({\n tag: 'ds-time-picker',\n styleUrl: 'TimePicker.css',\n scoped: true,\n})\nexport class TimePicker {\n @Element() el!: HTMLElement;\n\n /** Clock value as `HH:MM`. */\n @Prop() value: string = '';\n @Prop() min: string | undefined;\n @Prop() max: string | undefined;\n /** Native time step in seconds. Defaults to minutes (`60`). */\n @Prop() step: string | number = 60;\n @Prop() isInactive: boolean = false;\n /** Move keyboard focus into the hour list after the picker is rendered. */\n @Prop() autoFocus: boolean = false;\n\n @Event() dsChange!: EventEmitter<string>;\n\n componentDidLoad() {\n this.scrollSelectedIntoView();\n if (this.autoFocus) void this.setFocus();\n }\n\n @Watch('value')\n onValueChange() {\n this.scrollSelectedIntoView();\n }\n\n @Method()\n async setFocus() {\n this.focusColumn('hour', CLOCK_HOURS);\n }\n\n private parts(): ClockTimeParts {\n return splitClockTime(this.value) ?? { hour12: 12, minute: 0, period: 'AM' };\n }\n\n private minutes(): number[] {\n const minimum = this.min ? splitClockTime(this.min) : null;\n return clockMinutes(clockMinuteStep(this.step), minimum?.minute ?? 0);\n }\n\n private isDisabledTime(iso: string): boolean {\n if (this.isInactive) return true;\n return (\n isClockTimeOutOfRange(iso, this.min, this.max) ||\n !isClockTimeStepAligned(iso, this.step, this.min)\n );\n }\n\n private optionParts(\n column: TimePickerColumn,\n value: number | ClockPeriod\n ): Partial<ClockTimeParts> {\n return column === 'hour'\n ? { hour12: value as number }\n : column === 'minute'\n ? { minute: value as number }\n : { period: value as ClockPeriod };\n }\n\n private isDisabledPart(column: TimePickerColumn, next: Partial<ClockTimeParts>): boolean {\n if (this.isInactive) return true;\n\n const current = { ...this.parts(), ...next };\n const hours: ReadonlyArray<number> = column === 'hour' ? [current.hour12] : CLOCK_HOURS;\n const minutes: ReadonlyArray<number> = column === 'minute' ? [current.minute] : this.minutes();\n const periods: ReadonlyArray<ClockPeriod> =\n column === 'period' ? [current.period] : CLOCK_PERIODS;\n\n return !hours.some(hour =>\n minutes.some(minute =>\n periods.some(\n period => !this.isDisabledTime(joinClockTime({ hour12: hour, minute, period }))\n )\n )\n );\n }\n\n private orderedValues<T>(current: T, values: ReadonlyArray<T>): T[] {\n return [current, ...values.filter(value => value !== current)];\n }\n\n private commit(column: TimePickerColumn, next: Partial<ClockTimeParts>) {\n const current = { ...this.parts(), ...next };\n const hours =\n column === 'hour' ? [current.hour12] : this.orderedValues(current.hour12, CLOCK_HOURS);\n const minutes =\n column === 'minute' ? [current.minute] : this.orderedValues(current.minute, this.minutes());\n const periods =\n column === 'period' ? [current.period] : this.orderedValues(current.period, CLOCK_PERIODS);\n\n for (const hour of hours) {\n for (const minute of minutes) {\n for (const period of periods) {\n const iso = joinClockTime({ hour12: hour, minute, period });\n if (!this.isDisabledTime(iso)) {\n this.dsChange.emit(iso);\n return;\n }\n }\n }\n }\n }\n\n private optionEl(column: TimePickerColumn, value: number | ClockPeriod): HTMLElement | null {\n return this.el.querySelector<HTMLElement>(`[data-${column}-option=\"${value}\"]`);\n }\n\n private scrollSelectedIntoView() {\n const parts = this.parts();\n this.optionEl('hour', parts.hour12)?.scrollIntoView({ block: 'nearest' });\n this.optionEl('minute', parts.minute)?.scrollIntoView({ block: 'nearest' });\n this.optionEl('period', parts.period)?.scrollIntoView({ block: 'nearest' });\n }\n\n private focusOption(column: TimePickerColumn, value: number | ClockPeriod) {\n requestAnimationFrame(() => {\n this.optionEl(column, value)?.focus();\n });\n }\n\n private focusValue(\n column: TimePickerColumn,\n values: ReadonlyArray<number | ClockPeriod>\n ): number | ClockPeriod | undefined {\n const current = this.parts();\n const currentValue =\n column === 'hour' ? current.hour12 : column === 'minute' ? current.minute : current.period;\n if (!this.isDisabledPart(column, this.optionParts(column, currentValue))) return currentValue;\n return values.find(value => !this.isDisabledPart(column, this.optionParts(column, value)));\n }\n\n private focusColumn(column: TimePickerColumn, values: ReadonlyArray<number | ClockPeriod>): void {\n const value = this.focusValue(column, values);\n if (value !== undefined) this.optionEl(column, value)?.focus();\n }\n\n private handleColumnKeyDown = (\n event: KeyboardEvent,\n column: TimePickerColumn,\n values: ReadonlyArray<number | ClockPeriod>,\n current: number | ClockPeriod\n ) => {\n const columns: TimePickerColumn[] = ['hour', 'minute', 'period'];\n const columnIndex = columns.indexOf(column);\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n const nextColumn =\n columns[stepBoundedIndex(columnIndex, event.key === 'ArrowLeft' ? -1 : 1, columns.length)];\n if (!nextColumn || nextColumn === column) {\n event.preventDefault();\n return;\n }\n event.preventDefault();\n const nextValues =\n nextColumn === 'hour'\n ? CLOCK_HOURS\n : nextColumn === 'minute'\n ? this.minutes()\n : CLOCK_PERIODS;\n const nextValue = this.focusValue(nextColumn, nextValues);\n if (nextValue !== undefined) this.focusOption(nextColumn, nextValue);\n return;\n }\n\n let offset: number | null = null;\n if (event.key === 'ArrowUp') offset = -1;\n else if (event.key === 'ArrowDown') offset = 1;\n else if (event.key === 'Home' || event.key === 'End') offset = 0;\n if (offset === null) return;\n event.preventDefault();\n let next: number | ClockPeriod | undefined;\n if (event.key === 'Home') {\n next = values.find(value => !this.isDisabledPart(column, this.optionParts(column, value)));\n } else if (event.key === 'End') {\n for (let index = values.length - 1; index >= 0; index -= 1) {\n const value = values[index];\n if (value !== undefined && !this.isDisabledPart(column, this.optionParts(column, value))) {\n next = value;\n break;\n }\n }\n } else {\n const direction = offset;\n let index = values.indexOf(current);\n if (index < 0) index = direction > 0 ? -1 : values.length;\n for (\n let candidate = index + direction;\n candidate >= 0 && candidate < values.length;\n candidate += direction\n ) {\n const value = values[candidate];\n if (value !== undefined && !this.isDisabledPart(column, this.optionParts(column, value))) {\n next = value;\n break;\n }\n }\n }\n if (next === undefined) return;\n this.focusOption(column, next);\n };\n\n private renderTile(\n column: TimePickerColumn,\n value: number | ClockPeriod,\n selected: boolean,\n focused: boolean,\n label: string,\n values: ReadonlyArray<number | ClockPeriod>\n ) {\n const next = this.optionParts(column, value);\n const disabled = this.isDisabledPart(column, next);\n return (\n <button\n type=\"button\"\n role=\"option\"\n data-hour-option={column === 'hour' ? String(value) : undefined}\n data-minute-option={column === 'minute' ? String(value) : undefined}\n data-period-option={column === 'period' ? String(value) : undefined}\n class={{\n 'time-picker-tile': true,\n 'time-picker-tile--selected': selected,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': !disabled,\n 'ds-interaction-fill--selected': selected && !disabled,\n }}\n disabled={disabled}\n aria-selected={selected ? 'true' : 'false'}\n tabIndex={focused ? 0 : -1}\n onClick={() => this.commit(column, next)}\n onKeyDown={event => this.handleColumnKeyDown(event, column, values, value)}\n >\n <ds-text\n class=\"ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-medium\"\n color={selected ? 'primary' : 'secondary'}\n >\n {label}\n </ds-text>\n </button>\n );\n }\n\n render() {\n const parts = this.parts();\n const minutes = this.minutes();\n const minuteValues = minutes.includes(parts.minute)\n ? minutes\n : [...minutes, parts.minute].sort((a, b) => a - b);\n const hourFocus = this.focusValue('hour', CLOCK_HOURS);\n const minuteFocus = this.focusValue('minute', minuteValues);\n const periodFocus = this.focusValue('period', CLOCK_PERIODS);\n\n return (\n <Host>\n <div class=\"time-picker\" role=\"group\" aria-label=\"Choose time\">\n <div class=\"time-picker__column\">\n <div class=\"time-picker__list\" role=\"listbox\" aria-label=\"Hour\">\n {CLOCK_HOURS.map(hour =>\n this.renderTile(\n 'hour',\n hour,\n hour === parts.hour12,\n hour === hourFocus,\n String(hour),\n CLOCK_HOURS\n )\n )}\n </div>\n </div>\n <div class=\"time-picker__column\">\n <div class=\"time-picker__list\" role=\"listbox\" aria-label=\"Minute\">\n {minuteValues.map(minute =>\n this.renderTile(\n 'minute',\n minute,\n minute === parts.minute,\n minute === minuteFocus,\n String(minute).padStart(2, '0'),\n minuteValues\n )\n )}\n </div>\n </div>\n <div class=\"time-picker__column\">\n <div class=\"time-picker__list\" role=\"listbox\" aria-label=\"AM/PM\">\n {CLOCK_PERIODS.map(period =>\n this.renderTile(\n 'period',\n period,\n period === parts.period,\n period === periodFocus,\n period,\n CLOCK_PERIODS\n )\n )}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n",
256
+ "type": "registry:ui"
257
+ }
258
+ ]
259
+ }
@@ -313,7 +313,7 @@
313
313
  "peerDependencies": {
314
314
  "required": [
315
315
  "@ds-mo/tokens ^6.5.1",
316
- "@ds-mo/icons ^7.0.0"
316
+ "@ds-mo/icons ^8.1.0"
317
317
  ],
318
318
  "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
319
319
  }
@@ -232,7 +232,7 @@
232
232
  "peerDependencies": {
233
233
  "required": [
234
234
  "@ds-mo/tokens ^6.5.1",
235
- "@ds-mo/icons ^7.0.0"
235
+ "@ds-mo/icons ^8.1.0"
236
236
  ],
237
237
  "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
238
238
  }
@@ -362,7 +362,7 @@
362
362
  "peerDependencies": {
363
363
  "required": [
364
364
  "@ds-mo/tokens ^6.5.1",
365
- "@ds-mo/icons ^7.0.0"
365
+ "@ds-mo/icons ^8.1.0"
366
366
  ],
367
367
  "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
368
368
  }
@@ -104,7 +104,7 @@
104
104
  "peerDependencies": {
105
105
  "required": [
106
106
  "@ds-mo/tokens ^6.5.1",
107
- "@ds-mo/icons ^7.0.0"
107
+ "@ds-mo/icons ^8.1.0"
108
108
  ],
109
109
  "frameworks": "Custom Elements; React 18/19 wrappers; Vue 3 wrappers; Angular 19-22 standalone adapters."
110
110
  }
@@ -18,7 +18,9 @@ export { DsBarTitle } from "./ds-bar-title.js";
18
18
  export { DsBarWorkflow } from "./ds-bar-workflow.js";
19
19
  export { DsBreadcrumb } from "./ds-breadcrumb.js";
20
20
  export { DsButtonFilled } from "./ds-button-filled.js";
21
+ export { DsButtonInverted } from "./ds-button-inverted.js";
21
22
  export { DsButtonUnfilled } from "./ds-button-unfilled.js";
23
+ export { DsCalendar } from "./ds-calendar.js";
22
24
  export { DsCardActionCenter } from "./ds-card-action-center.js";
23
25
  export { DsCardChart } from "./ds-card-chart.js";
24
26
  export { DsCardNavigation } from "./ds-card-navigation.js";
@@ -33,11 +35,21 @@ export { DsCodeBlock } from "./ds-code-block.js";
33
35
  export { DsConversationListItem } from "./ds-conversation-list-item.js";
34
36
  export { DsConversationListSection } from "./ds-conversation-list-section.js";
35
37
  export { DsConversationList } from "./ds-conversation-list.js";
38
+ export { DsDataCustomize } from "./ds-data-customize.js";
39
+ export { DsDataFilter } from "./ds-data-filter.js";
40
+ export { DsDataGroup } from "./ds-data-group.js";
41
+ export { DsDataPreferences } from "./ds-data-preferences.js";
42
+ export { DsDataSavedViews } from "./ds-data-saved-views.js";
43
+ export { DsDataSearch } from "./ds-data-search.js";
44
+ export { DsDataSort } from "./ds-data-sort.js";
45
+ export { DsDataToolbar } from "./ds-data-toolbar.js";
36
46
  export { DsDivider } from "./ds-divider.js";
37
47
  export { DsEmptyState } from "./ds-empty-state.js";
38
48
  export { DsField } from "./ds-field.js";
39
49
  export { DsFilterMenu } from "./ds-filter-menu.js";
40
50
  export { DsIcon } from "./ds-icon.js";
51
+ export { DsInputDate } from "./ds-input-date.js";
52
+ export { DsInputTime } from "./ds-input-time.js";
41
53
  export { DsInput } from "./ds-input.js";
42
54
  export { DsLoader } from "./ds-loader.js";
43
55
  export { DsMarkdown } from "./ds-markdown.js";
@@ -71,17 +83,11 @@ export { DsSlider } from "./ds-slider.js";
71
83
  export { DsSwatchPicker } from "./ds-swatch-picker.js";
72
84
  export { DsSwitch } from "./ds-switch.js";
73
85
  export { DsTabGroup } from "./ds-tab-group.js";
74
- export { DsTableFilter } from "./ds-table-filter.js";
75
- export { DsTableGroup } from "./ds-table-group.js";
76
- export { DsTablePreferences } from "./ds-table-preferences.js";
77
- export { DsTableSavedViews } from "./ds-table-saved-views.js";
78
- export { DsTableSearch } from "./ds-table-search.js";
79
- export { DsTableSort } from "./ds-table-sort.js";
80
- export { DsTableToolbar } from "./ds-table-toolbar.js";
81
86
  export { DsTable } from "./ds-table.js";
82
87
  export { DsTag } from "./ds-tag.js";
83
88
  export { DsText } from "./ds-text.js";
84
89
  export { DsTextarea } from "./ds-textarea.js";
90
+ export { DsTimePicker } from "./ds-time-picker.js";
85
91
  export { DsToast } from "./ds-toast.js";
86
92
  export { DsTooltipChart } from "./ds-tooltip-chart.js";
87
93
  export { DsTooltip } from "./ds-tooltip.js";
@@ -19,7 +19,9 @@ export { DsBarTitle } from "./ds-bar-title.js";
19
19
  export { DsBarWorkflow } from "./ds-bar-workflow.js";
20
20
  export { DsBreadcrumb } from "./ds-breadcrumb.js";
21
21
  export { DsButtonFilled } from "./ds-button-filled.js";
22
+ export { DsButtonInverted } from "./ds-button-inverted.js";
22
23
  export { DsButtonUnfilled } from "./ds-button-unfilled.js";
24
+ export { DsCalendar } from "./ds-calendar.js";
23
25
  export { DsCardActionCenter } from "./ds-card-action-center.js";
24
26
  export { DsCardChart } from "./ds-card-chart.js";
25
27
  export { DsCardNavigation } from "./ds-card-navigation.js";
@@ -34,11 +36,21 @@ export { DsCodeBlock } from "./ds-code-block.js";
34
36
  export { DsConversationListItem } from "./ds-conversation-list-item.js";
35
37
  export { DsConversationListSection } from "./ds-conversation-list-section.js";
36
38
  export { DsConversationList } from "./ds-conversation-list.js";
39
+ export { DsDataCustomize } from "./ds-data-customize.js";
40
+ export { DsDataFilter } from "./ds-data-filter.js";
41
+ export { DsDataGroup } from "./ds-data-group.js";
42
+ export { DsDataPreferences } from "./ds-data-preferences.js";
43
+ export { DsDataSavedViews } from "./ds-data-saved-views.js";
44
+ export { DsDataSearch } from "./ds-data-search.js";
45
+ export { DsDataSort } from "./ds-data-sort.js";
46
+ export { DsDataToolbar } from "./ds-data-toolbar.js";
37
47
  export { DsDivider } from "./ds-divider.js";
38
48
  export { DsEmptyState } from "./ds-empty-state.js";
39
49
  export { DsField } from "./ds-field.js";
40
50
  export { DsFilterMenu } from "./ds-filter-menu.js";
41
51
  export { DsIcon } from "./ds-icon.js";
52
+ export { DsInputDate } from "./ds-input-date.js";
53
+ export { DsInputTime } from "./ds-input-time.js";
42
54
  export { DsInput } from "./ds-input.js";
43
55
  export { DsLoader } from "./ds-loader.js";
44
56
  export { DsMarkdown } from "./ds-markdown.js";
@@ -72,17 +84,11 @@ export { DsSlider } from "./ds-slider.js";
72
84
  export { DsSwatchPicker } from "./ds-swatch-picker.js";
73
85
  export { DsSwitch } from "./ds-switch.js";
74
86
  export { DsTabGroup } from "./ds-tab-group.js";
75
- export { DsTableFilter } from "./ds-table-filter.js";
76
- export { DsTableGroup } from "./ds-table-group.js";
77
- export { DsTablePreferences } from "./ds-table-preferences.js";
78
- export { DsTableSavedViews } from "./ds-table-saved-views.js";
79
- export { DsTableSearch } from "./ds-table-search.js";
80
- export { DsTableSort } from "./ds-table-sort.js";
81
- export { DsTableToolbar } from "./ds-table-toolbar.js";
82
87
  export { DsTable } from "./ds-table.js";
83
88
  export { DsTag } from "./ds-tag.js";
84
89
  export { DsText } from "./ds-text.js";
85
90
  export { DsTextarea } from "./ds-textarea.js";
91
+ export { DsTimePicker } from "./ds-time-picker.js";
86
92
  export { DsToast } from "./ds-toast.js";
87
93
  export { DsTooltipChart } from "./ds-tooltip-chart.js";
88
94
  export { DsTooltip } from "./ds-tooltip.js";
@@ -0,0 +1,13 @@
1
+ /**
2
+ * This file was automatically generated by the Stencil React Output Target.
3
+ * Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.
4
+ */
5
+ import type { EventName, StencilReactComponent } from './react-runtime.js';
6
+ import { type DsButtonInvertedCustomEvent } from "@ds-mo/ui";
7
+ import type { Components } from "@ds-mo/ui/dist/components";
8
+ import { DsButtonInverted as DsButtonInvertedElement } from "@ds-mo/ui/dist/components/ds-button-inverted.js";
9
+ export type DsButtonInvertedEvents = {
10
+ onDsClick: EventName<DsButtonInvertedCustomEvent<MouseEvent>>;
11
+ onDsMenuClick: EventName<DsButtonInvertedCustomEvent<MouseEvent>>;
12
+ };
13
+ export declare const DsButtonInverted: StencilReactComponent<DsButtonInvertedElement, DsButtonInvertedEvents, Components.DsButtonInverted>;
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ import { createComponent } from './react-runtime.js';
3
+ import React from 'react';
4
+ import { DsButtonInverted as DsButtonInvertedElement, defineCustomElement as defineDsButtonInverted } from "@ds-mo/ui/dist/components/ds-button-inverted.js";
5
+ export const DsButtonInverted = /*@__PURE__*/ createComponent({
6
+ tagName: 'ds-button-inverted',
7
+ elementClass: DsButtonInvertedElement,
8
+ // @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
9
+ react: React,
10
+ events: {
11
+ onDsClick: 'dsClick',
12
+ onDsMenuClick: 'dsMenuClick'
13
+ },
14
+ defineCustomElement: defineDsButtonInverted
15
+ });
@@ -0,0 +1,12 @@
1
+ /**
2
+ * This file was automatically generated by the Stencil React Output Target.
3
+ * Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.
4
+ */
5
+ import type { EventName, StencilReactComponent } from './react-runtime.js';
6
+ import { type DsCalendarCustomEvent } from "@ds-mo/ui";
7
+ import type { Components } from "@ds-mo/ui/dist/components";
8
+ import { DsCalendar as DsCalendarElement } from "@ds-mo/ui/dist/components/ds-calendar.js";
9
+ export type DsCalendarEvents = {
10
+ onDsChange: EventName<DsCalendarCustomEvent<string>>;
11
+ };
12
+ export declare const DsCalendar: StencilReactComponent<DsCalendarElement, DsCalendarEvents, Components.DsCalendar>;
@@ -0,0 +1,12 @@
1
+ 'use client';
2
+ import { createComponent } from './react-runtime.js';
3
+ import React from 'react';
4
+ import { DsCalendar as DsCalendarElement, defineCustomElement as defineDsCalendar } from "@ds-mo/ui/dist/components/ds-calendar.js";
5
+ export const DsCalendar = /*@__PURE__*/ createComponent({
6
+ tagName: 'ds-calendar',
7
+ elementClass: DsCalendarElement,
8
+ // @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
9
+ react: React,
10
+ events: { onDsChange: 'dsChange' },
11
+ defineCustomElement: defineDsCalendar
12
+ });
@@ -0,0 +1,13 @@
1
+ /**
2
+ * This file was automatically generated by the Stencil React Output Target.
3
+ * Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.
4
+ */
5
+ import type { EventName, StencilReactComponent } from './react-runtime.js';
6
+ import { type DataCustomizeChangeDetail, type DsDataCustomizeCustomEvent } from "@ds-mo/ui";
7
+ import type { Components } from "@ds-mo/ui/dist/components";
8
+ import { DsDataCustomize as DsDataCustomizeElement } from "@ds-mo/ui/dist/components/ds-data-customize.js";
9
+ export type DsDataCustomizeEvents = {
10
+ onDsFieldsConfigChange: EventName<DsDataCustomizeCustomEvent<DataCustomizeChangeDetail>>;
11
+ onDsOptionChange: EventName<DsDataCustomizeCustomEvent<string>>;
12
+ };
13
+ export declare const DsDataCustomize: StencilReactComponent<DsDataCustomizeElement, DsDataCustomizeEvents, Components.DsDataCustomize>;
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ import { createComponent } from './react-runtime.js';
3
+ import React from 'react';
4
+ import { DsDataCustomize as DsDataCustomizeElement, defineCustomElement as defineDsDataCustomize } from "@ds-mo/ui/dist/components/ds-data-customize.js";
5
+ export const DsDataCustomize = /*@__PURE__*/ createComponent({
6
+ tagName: 'ds-data-customize',
7
+ elementClass: DsDataCustomizeElement,
8
+ // @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
9
+ react: React,
10
+ events: {
11
+ onDsFieldsConfigChange: 'dsFieldsConfigChange',
12
+ onDsOptionChange: 'dsOptionChange'
13
+ },
14
+ defineCustomElement: defineDsDataCustomize
15
+ });
@@ -0,0 +1,18 @@
1
+ /**
2
+ * This file was automatically generated by the Stencil React Output Target.
3
+ * Changes to this file may cause incorrect behavior and will be lost if the code is regenerated.
4
+ */
5
+ import type { EventName, StencilReactComponent } from './react-runtime.js';
6
+ import { type DsDataFilterCustomEvent, type FilterMenuChangeDetail, type FilterMenuMatchModeChangeDetail } from "@ds-mo/ui";
7
+ import type { Components } from "@ds-mo/ui/dist/components";
8
+ import { DsDataFilter as DsDataFilterElement } from "@ds-mo/ui/dist/components/ds-data-filter.js";
9
+ export type DsDataFilterEvents = {
10
+ onDsChange: EventName<DsDataFilterCustomEvent<FilterMenuChangeDetail>>;
11
+ onDsClear: EventName<DsDataFilterCustomEvent<void>>;
12
+ onDsMatchModeChange: EventName<DsDataFilterCustomEvent<FilterMenuMatchModeChangeDetail>>;
13
+ onDsActiveFilterChange: EventName<DsDataFilterCustomEvent<string>>;
14
+ onDsClose: EventName<DsDataFilterCustomEvent<void>>;
15
+ onDsOpenChange: EventName<DsDataFilterCustomEvent<boolean>>;
16
+ onDsAfterClose: EventName<DsDataFilterCustomEvent<void>>;
17
+ };
18
+ export declare const DsDataFilter: StencilReactComponent<DsDataFilterElement, DsDataFilterEvents, Components.DsDataFilter>;