@ds-mo/ui 14.35.0 → 14.36.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 (326) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +1105 -187
  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-field.d.ts +1 -1
  9. package/dist/angular/ds-field.js +1 -1
  10. package/dist/angular/ds-input-date.d.ts +15 -0
  11. package/dist/angular/ds-input-date.js +43 -0
  12. package/dist/angular/ds-input-time.d.ts +15 -0
  13. package/dist/angular/ds-input-time.js +43 -0
  14. package/dist/angular/ds-input.d.ts +1 -1
  15. package/dist/angular/ds-input.js +3 -3
  16. package/dist/angular/ds-select.d.ts +1 -1
  17. package/dist/angular/ds-select.js +3 -3
  18. package/dist/angular/ds-time-picker.d.ts +15 -0
  19. package/dist/angular/ds-time-picker.js +43 -0
  20. package/dist/angular/index.d.ts +1 -1
  21. package/dist/angular/index.js +5 -0
  22. package/dist/angular/proxies.d.ts +5 -0
  23. package/dist/angular/proxies.js +5 -0
  24. package/dist/angular/text-value-accessor.d.ts +1 -1
  25. package/dist/angular/text-value-accessor.js +2 -2
  26. package/dist/components/ds-agent-activity.js +1 -1
  27. package/dist/components/ds-agent-questionnaire.js +1 -1
  28. package/dist/components/ds-agent-response.js +1 -1
  29. package/dist/components/ds-agent-source-list.js +1 -1
  30. package/dist/components/ds-agent-tool-call.js +1 -1
  31. package/dist/components/ds-attachment-list.js +1 -1
  32. package/dist/components/ds-badge.js +1 -1
  33. package/dist/components/ds-banner.js +1 -1
  34. package/dist/components/ds-bar-action.js +1 -1
  35. package/dist/components/ds-bar-nav.js +1 -1
  36. package/dist/components/ds-bar-page-title.js +1 -1
  37. package/dist/components/ds-bar-title.js +1 -1
  38. package/dist/components/ds-bar-workflow.js +1 -1
  39. package/dist/components/ds-breadcrumb.js +1 -1
  40. package/dist/components/ds-button-filled.js +1 -1
  41. package/dist/components/ds-button-inverted.d.ts +11 -0
  42. package/dist/components/ds-button-inverted.js +2 -0
  43. package/dist/components/ds-button-inverted.js.map +1 -0
  44. package/dist/components/ds-button-unfilled.js +1 -1
  45. package/dist/components/ds-calendar.d.ts +11 -0
  46. package/dist/components/ds-calendar.js +2 -0
  47. package/dist/components/ds-calendar.js.map +1 -0
  48. package/dist/components/ds-card-action-center.js +1 -1
  49. package/dist/components/ds-card-chart.js +1 -1
  50. package/dist/components/ds-card-navigation.js +1 -1
  51. package/dist/components/ds-card-navigation.js.map +1 -1
  52. package/dist/components/ds-card-overview.js +1 -1
  53. package/dist/components/ds-card-setting.js +1 -1
  54. package/dist/components/ds-card-settings-scope.js +1 -1
  55. package/dist/components/ds-card-settings-scope.js.map +1 -1
  56. package/dist/components/ds-chart-legend.js +1 -1
  57. package/dist/components/ds-chart.js +1 -1
  58. package/dist/components/ds-checkbox.js +1 -1
  59. package/dist/components/ds-chip.js +1 -1
  60. package/dist/components/ds-code-block.js +1 -1
  61. package/dist/components/ds-conversation-list-item.js +1 -1
  62. package/dist/components/ds-conversation-list-item.js.map +1 -1
  63. package/dist/components/ds-conversation-list-section.js +1 -1
  64. package/dist/components/ds-conversation-list.js +1 -1
  65. package/dist/components/ds-divider.js +1 -1
  66. package/dist/components/ds-empty-state.js +1 -1
  67. package/dist/components/ds-field.js +1 -1
  68. package/dist/components/ds-filter-menu.js +1 -1
  69. package/dist/components/ds-input-date.d.ts +11 -0
  70. package/dist/components/ds-input-date.js +2 -0
  71. package/dist/components/ds-input-date.js.map +1 -0
  72. package/dist/components/ds-input-time.d.ts +11 -0
  73. package/dist/components/ds-input-time.js +2 -0
  74. package/dist/components/ds-input-time.js.map +1 -0
  75. package/dist/components/ds-input.js +1 -1
  76. package/dist/components/ds-markdown.js +1 -1
  77. package/dist/components/ds-menu.js +1 -1
  78. package/dist/components/ds-message-actions.js +1 -1
  79. package/dist/components/ds-message-bubble.js +1 -1
  80. package/dist/components/ds-message-bubble.js.map +1 -1
  81. package/dist/components/ds-message-composer.js +1 -1
  82. package/dist/components/ds-message-scroller.js +1 -1
  83. package/dist/components/ds-message.js +1 -1
  84. package/dist/components/ds-mobile-bar-nav.js +1 -1
  85. package/dist/components/ds-mobile-header.js +1 -1
  86. package/dist/components/ds-mobile-section-switcher.js +1 -1
  87. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  88. package/dist/components/ds-modal.js +1 -1
  89. package/dist/components/ds-pagination.js +1 -1
  90. package/dist/components/ds-panel-nav.js +1 -1
  91. package/dist/components/ds-panel-sub-nav.js +1 -1
  92. package/dist/components/ds-panel-tool-header.js +1 -1
  93. package/dist/components/ds-panel-tool-search.js +1 -1
  94. package/dist/components/ds-panel-tools.js +1 -1
  95. package/dist/components/ds-paper-texture.js +1 -1
  96. package/dist/components/ds-radio.js +1 -1
  97. package/dist/components/ds-score.js +1 -1
  98. package/dist/components/ds-scroll-overlay.js +1 -1
  99. package/dist/components/ds-select.js +1 -1
  100. package/dist/components/ds-shell-app.js +1 -1
  101. package/dist/components/ds-shell-page.js +1 -1
  102. package/dist/components/ds-shell-tools.js +1 -1
  103. package/dist/components/ds-skeleton.js +1 -1
  104. package/dist/components/ds-slider.js +1 -1
  105. package/dist/components/ds-slider.js.map +1 -1
  106. package/dist/components/ds-swatch-picker.js +1 -1
  107. package/dist/components/ds-switch.js +1 -1
  108. package/dist/components/ds-tab-group.js +1 -1
  109. package/dist/components/ds-table-filter.js +1 -1
  110. package/dist/components/ds-table-filter.js.map +1 -1
  111. package/dist/components/ds-table-group.js +1 -1
  112. package/dist/components/ds-table-preferences.js +1 -1
  113. package/dist/components/ds-table-preferences.js.map +1 -1
  114. package/dist/components/ds-table-saved-views.js +1 -1
  115. package/dist/components/ds-table-saved-views.js.map +1 -1
  116. package/dist/components/ds-table-search.js +1 -1
  117. package/dist/components/ds-table-search.js.map +1 -1
  118. package/dist/components/ds-table-sort.js +1 -1
  119. package/dist/components/ds-table-sort.js.map +1 -1
  120. package/dist/components/ds-table-toolbar.js +1 -1
  121. package/dist/components/ds-table.js +1 -1
  122. package/dist/components/ds-tag.js +1 -1
  123. package/dist/components/ds-text.js +1 -1
  124. package/dist/components/ds-textarea.js +1 -1
  125. package/dist/components/ds-textarea.js.map +1 -1
  126. package/dist/components/ds-time-picker.d.ts +11 -0
  127. package/dist/components/ds-time-picker.js +2 -0
  128. package/dist/components/ds-time-picker.js.map +1 -0
  129. package/dist/components/ds-toast.js +1 -1
  130. package/dist/components/ds-tooltip-chart.js +1 -1
  131. package/dist/components/ds-tooltip.js +1 -1
  132. package/dist/components/ds-typing-indicator.js +1 -1
  133. package/dist/components/{p-CI7VfYC3.js → p-2GVGhrh0.js} +2 -2
  134. package/dist/components/p-7O-2D29W.js +2 -0
  135. package/dist/components/p-7O-2D29W.js.map +1 -0
  136. package/dist/components/{p-CE540WZ7.js → p-8oRkhvjy.js} +2 -2
  137. package/dist/components/p-B27_chI7.js +2 -0
  138. package/dist/components/p-B27_chI7.js.map +1 -0
  139. package/dist/components/{p-xHGqrz_p.js → p-BOhpMUwO.js} +2 -2
  140. package/dist/components/{p-DdspY23v.js → p-BV5T1hzN.js} +2 -2
  141. package/dist/components/{p-DTDLlinw.js → p-BWfzaSc3.js} +2 -2
  142. package/dist/components/{p-CLGtPE0K.js → p-BgLI9JoT.js} +2 -2
  143. package/dist/components/{p-DGzn4k4h.js → p-C-dHtQMi.js} +2 -2
  144. package/dist/components/p-C0CE2v5D.js +2 -0
  145. package/dist/components/{p-yZRXPHDe.js → p-C2JnoaWI.js} +2 -2
  146. package/dist/components/{p-umAf0fBn.js → p-C4m8y9ki.js} +2 -2
  147. package/dist/components/{p-CAxDdYjh.js → p-CDJ2Ntcq.js} +2 -2
  148. package/dist/components/{p-DQQFN2sw.js → p-CMQUuGvl.js} +2 -2
  149. package/dist/components/{p-BQaO7cg_.js → p-CQ5RwY2C.js} +2 -2
  150. package/dist/components/p-CQIh2yRP.js +2 -0
  151. package/dist/components/{p-C1_3CVma.js.map → p-CQIh2yRP.js.map} +1 -1
  152. package/dist/components/{p-DEGNrPLe.js → p-CWPT3aOB.js} +2 -2
  153. package/dist/components/p-CWog26I_.js +2 -0
  154. package/dist/components/p-CWog26I_.js.map +1 -0
  155. package/dist/components/{p-beRFLHbB.js → p-CaNCGKEJ.js} +2 -2
  156. package/dist/components/p-CbSUyv5B.js +2 -0
  157. package/dist/components/{p-BINSI_KF.js.map → p-CbSUyv5B.js.map} +1 -1
  158. package/dist/components/{p-Dhw_W8nk.js → p-Cc3ZUQlJ.js} +2 -2
  159. package/dist/components/p-Cc3ZUQlJ.js.map +1 -0
  160. package/dist/components/{p-DFjIBS5B.js → p-Ce4zy8q1.js} +2 -2
  161. package/dist/components/{p-BcdHgPi5.js → p-CeXf9-X3.js} +2 -2
  162. package/dist/components/{p-omPm8_vx.js → p-Cga6Ex0E.js} +2 -2
  163. package/dist/components/{p-y06IxxoN.js → p-Cl9phSf0.js} +2 -2
  164. package/dist/components/{p-Dk-8Ju0Q.js → p-ClJhuG5Y.js} +2 -2
  165. package/dist/components/{p-BmFeeR4q.js → p-CqW2eyiF.js} +2 -2
  166. package/dist/components/p-Cus1Sigh.js +2 -0
  167. package/dist/components/{p-N5SHSVo2.js.map → p-Cus1Sigh.js.map} +1 -1
  168. package/dist/components/{p-CzbsTZt7.js → p-Cxr0IQjC.js} +2 -2
  169. package/dist/components/{p-CwqFJMvP.js → p-D7yBIPB6.js} +2 -2
  170. package/dist/components/p-D8rpKod8.js +2 -0
  171. package/dist/components/p-D8rpKod8.js.map +1 -0
  172. package/dist/components/{p-DtLQIMsa.js → p-DBwa1OXP.js} +2 -2
  173. package/dist/components/{p-BQsVI_vO.js → p-DK9Ex3aY.js} +2 -2
  174. package/dist/components/{p-CqlBlv55.js → p-DLXXGgmf.js} +2 -2
  175. package/dist/components/{p-BnzsBNUY.js → p-DVd1TIxi.js} +2 -2
  176. package/dist/components/p-DZ58Sg5a.js.map +1 -1
  177. package/dist/components/{p-CZOiTaNa.js → p-DgG9W9N4.js} +2 -2
  178. package/dist/components/{p-mpk_Mm8_.js → p-DkfM55x8.js} +2 -2
  179. package/dist/components/p-DkikNSSO.js +2 -0
  180. package/dist/components/p-DkikNSSO.js.map +1 -0
  181. package/dist/components/{p-C7CZ9pnP.js → p-Dryt3COt.js} +2 -2
  182. package/dist/components/{p-eo_pmPqp.js → p-Ds51RgCi.js} +2 -2
  183. package/dist/components/p-DtkLtKY0.js +2 -0
  184. package/dist/components/p-DtkLtKY0.js.map +1 -0
  185. package/dist/components/{p-C8ek-1SP.js → p-DvzI2A_M.js} +2 -2
  186. package/dist/components/p-J5x-QtlD.js +2 -0
  187. package/dist/components/{p-beCz9OnD.js.map → p-J5x-QtlD.js.map} +1 -1
  188. package/dist/components/{p-CSnsz3Eb.js → p-Jaqdfw4E.js} +2 -2
  189. package/dist/components/p-MQ36mEgn.js +2 -0
  190. package/dist/components/{p-UAIxh67Q.js.map → p-MQ36mEgn.js.map} +1 -1
  191. package/dist/components/{p-BnWxbhFP.js → p-PmcUwTQ_.js} +2 -2
  192. package/dist/components/p-TjXGRPik.js +2 -0
  193. package/dist/components/{p-B-9fdIWv.js.map → p-TjXGRPik.js.map} +1 -1
  194. package/dist/components/{p-Cq_Qpe_C.js → p-bM3LH3kc.js} +2 -2
  195. package/dist/components/{p-BPhbwXOv.js → p-ji09W9el.js} +2 -2
  196. package/dist/components/{p-n68x-ZKp.js → p-neWTRxmf.js} +2 -2
  197. package/dist/components/{p-BPlWEidl.js → p-rYePOPbJ.js} +2 -2
  198. package/dist/components/{p-D44g2Kw1.js → p-su6y4hLK.js} +2 -2
  199. package/dist/components/p-su6y4hLK.js.map +1 -0
  200. package/dist/components/{p-DC69DgAR.js → p-tNQ0YulU.js} +2 -2
  201. package/dist/components/{p-Cwz9TPVS.js → p-x1wf38q3.js} +2 -2
  202. package/dist/docs/components.json +6485 -3451
  203. package/dist/lib/utils/button-render.d.ts +1 -1
  204. package/dist/lib/utils/clock-time.d.ts +22 -0
  205. package/dist/lib/utils/date-filter-value.d.ts +4 -0
  206. package/dist/lib/utils/index.d.ts +3 -1
  207. package/dist/lib/utils/index.js +133 -0
  208. package/dist/lib/utils/index.js.map +4 -4
  209. package/dist/mcp-data/registry/bar-title.json +2 -2
  210. package/dist/mcp-data/registry/button-inverted.json +580 -0
  211. package/dist/mcp-data/registry/calendar.json +273 -0
  212. package/dist/mcp-data/registry/card-navigation.json +4 -2
  213. package/dist/mcp-data/registry/field.json +19 -14
  214. package/dist/mcp-data/registry/filter-menu.json +6 -10
  215. package/dist/mcp-data/registry/input-date.json +516 -0
  216. package/dist/mcp-data/registry/input-time.json +535 -0
  217. package/dist/mcp-data/registry/input.json +56 -8
  218. package/dist/mcp-data/registry/registry.json +1118 -185
  219. package/dist/mcp-data/registry/select.json +63 -7
  220. package/dist/mcp-data/registry/table-saved-views.json +6 -4
  221. package/dist/mcp-data/registry/textarea.json +2 -2
  222. package/dist/mcp-data/registry/time-picker.json +259 -0
  223. package/dist/react/components.d.ts +5 -0
  224. package/dist/react/components.js +5 -0
  225. package/dist/react/ds-button-inverted.d.ts +13 -0
  226. package/dist/react/ds-button-inverted.js +15 -0
  227. package/dist/react/ds-calendar.d.ts +12 -0
  228. package/dist/react/ds-calendar.js +12 -0
  229. package/dist/react/ds-field.d.ts +1 -1
  230. package/dist/react/ds-input-date.d.ts +12 -0
  231. package/dist/react/ds-input-date.js +12 -0
  232. package/dist/react/ds-input-time.d.ts +12 -0
  233. package/dist/react/ds-input-time.js +12 -0
  234. package/dist/react/ds-time-picker.d.ts +12 -0
  235. package/dist/react/ds-time-picker.js +12 -0
  236. package/dist/types/components/BarTitle/BarTitle.d.ts +1 -0
  237. package/dist/types/components/BarTitle/bar-title-action-chrome.d.ts +2 -0
  238. package/dist/types/components/ButtonInverted/ButtonInverted.d.ts +83 -0
  239. package/dist/types/components/ButtonInverted/index.d.ts +2 -0
  240. package/dist/types/components/Calendar/Calendar.d.ts +32 -0
  241. package/dist/types/components/Calendar/calendar-grid.d.ts +19 -0
  242. package/dist/types/components/Field/Field.d.ts +7 -2
  243. package/dist/types/components/FilterMenu/FilterMenu.d.ts +0 -10
  244. package/dist/types/components/Input/Input.d.ts +10 -0
  245. package/dist/types/components/InputDate/InputDate.d.ts +78 -0
  246. package/dist/types/components/InputTime/InputTime.d.ts +80 -0
  247. package/dist/types/components/Select/Select.d.ts +8 -1
  248. package/dist/types/components/TimePicker/TimePicker.d.ts +33 -0
  249. package/dist/types/components.d.ts +858 -27
  250. package/dist/types/utils/button-render.d.ts +1 -1
  251. package/dist/types/utils/clock-time.d.ts +23 -0
  252. package/dist/types/utils/date-filter-value.d.ts +4 -0
  253. package/dist/types/utils/index.d.ts +3 -1
  254. package/dist/vue/components.d.ts +5 -0
  255. package/dist/vue/components.js +5 -0
  256. package/dist/vue/ds-button-inverted.d.ts +3 -0
  257. package/dist/vue/ds-button-inverted.js +33 -0
  258. package/dist/vue/ds-calendar.d.ts +3 -0
  259. package/dist/vue/ds-calendar.js +16 -0
  260. package/dist/vue/ds-input-date.d.ts +3 -0
  261. package/dist/vue/ds-input-date.js +31 -0
  262. package/dist/vue/ds-input-time.d.ts +3 -0
  263. package/dist/vue/ds-input-time.js +32 -0
  264. package/dist/vue/ds-input.js +2 -0
  265. package/dist/vue/ds-select.js +3 -0
  266. package/dist/vue/ds-time-picker.d.ts +3 -0
  267. package/dist/vue/ds-time-picker.js +16 -0
  268. package/package.json +1 -1
  269. package/dist/components/p-B-9fdIWv.js +0 -2
  270. package/dist/components/p-BINSI_KF.js +0 -2
  271. package/dist/components/p-BbfBvMRR.js +0 -2
  272. package/dist/components/p-BbfBvMRR.js.map +0 -1
  273. package/dist/components/p-C1_3CVma.js +0 -2
  274. package/dist/components/p-Cmj04E5Q.js +0 -2
  275. package/dist/components/p-Cmj04E5Q.js.map +0 -1
  276. package/dist/components/p-D44g2Kw1.js.map +0 -1
  277. package/dist/components/p-D_u8WhlU.js +0 -2
  278. package/dist/components/p-Dhw_W8nk.js.map +0 -1
  279. package/dist/components/p-FPZbS19l.js +0 -2
  280. package/dist/components/p-FPZbS19l.js.map +0 -1
  281. package/dist/components/p-N5SHSVo2.js +0 -2
  282. package/dist/components/p-QjkufCcn.js +0 -2
  283. package/dist/components/p-QjkufCcn.js.map +0 -1
  284. package/dist/components/p-UAIxh67Q.js +0 -2
  285. package/dist/components/p-beCz9OnD.js +0 -2
  286. package/dist/types/components/FilterMenu/filter-menu-calendar.d.ts +0 -13
  287. /package/dist/components/{p-CI7VfYC3.js.map → p-2GVGhrh0.js.map} +0 -0
  288. /package/dist/components/{p-CE540WZ7.js.map → p-8oRkhvjy.js.map} +0 -0
  289. /package/dist/components/{p-xHGqrz_p.js.map → p-BOhpMUwO.js.map} +0 -0
  290. /package/dist/components/{p-DdspY23v.js.map → p-BV5T1hzN.js.map} +0 -0
  291. /package/dist/components/{p-DTDLlinw.js.map → p-BWfzaSc3.js.map} +0 -0
  292. /package/dist/components/{p-CLGtPE0K.js.map → p-BgLI9JoT.js.map} +0 -0
  293. /package/dist/components/{p-DGzn4k4h.js.map → p-C-dHtQMi.js.map} +0 -0
  294. /package/dist/components/{p-D_u8WhlU.js.map → p-C0CE2v5D.js.map} +0 -0
  295. /package/dist/components/{p-yZRXPHDe.js.map → p-C2JnoaWI.js.map} +0 -0
  296. /package/dist/components/{p-umAf0fBn.js.map → p-C4m8y9ki.js.map} +0 -0
  297. /package/dist/components/{p-CAxDdYjh.js.map → p-CDJ2Ntcq.js.map} +0 -0
  298. /package/dist/components/{p-DQQFN2sw.js.map → p-CMQUuGvl.js.map} +0 -0
  299. /package/dist/components/{p-BQaO7cg_.js.map → p-CQ5RwY2C.js.map} +0 -0
  300. /package/dist/components/{p-DEGNrPLe.js.map → p-CWPT3aOB.js.map} +0 -0
  301. /package/dist/components/{p-beRFLHbB.js.map → p-CaNCGKEJ.js.map} +0 -0
  302. /package/dist/components/{p-DFjIBS5B.js.map → p-Ce4zy8q1.js.map} +0 -0
  303. /package/dist/components/{p-BcdHgPi5.js.map → p-CeXf9-X3.js.map} +0 -0
  304. /package/dist/components/{p-omPm8_vx.js.map → p-Cga6Ex0E.js.map} +0 -0
  305. /package/dist/components/{p-y06IxxoN.js.map → p-Cl9phSf0.js.map} +0 -0
  306. /package/dist/components/{p-Dk-8Ju0Q.js.map → p-ClJhuG5Y.js.map} +0 -0
  307. /package/dist/components/{p-BmFeeR4q.js.map → p-CqW2eyiF.js.map} +0 -0
  308. /package/dist/components/{p-CzbsTZt7.js.map → p-Cxr0IQjC.js.map} +0 -0
  309. /package/dist/components/{p-CwqFJMvP.js.map → p-D7yBIPB6.js.map} +0 -0
  310. /package/dist/components/{p-DtLQIMsa.js.map → p-DBwa1OXP.js.map} +0 -0
  311. /package/dist/components/{p-BQsVI_vO.js.map → p-DK9Ex3aY.js.map} +0 -0
  312. /package/dist/components/{p-CqlBlv55.js.map → p-DLXXGgmf.js.map} +0 -0
  313. /package/dist/components/{p-BnzsBNUY.js.map → p-DVd1TIxi.js.map} +0 -0
  314. /package/dist/components/{p-CZOiTaNa.js.map → p-DgG9W9N4.js.map} +0 -0
  315. /package/dist/components/{p-mpk_Mm8_.js.map → p-DkfM55x8.js.map} +0 -0
  316. /package/dist/components/{p-C7CZ9pnP.js.map → p-Dryt3COt.js.map} +0 -0
  317. /package/dist/components/{p-eo_pmPqp.js.map → p-Ds51RgCi.js.map} +0 -0
  318. /package/dist/components/{p-C8ek-1SP.js.map → p-DvzI2A_M.js.map} +0 -0
  319. /package/dist/components/{p-CSnsz3Eb.js.map → p-Jaqdfw4E.js.map} +0 -0
  320. /package/dist/components/{p-BnWxbhFP.js.map → p-PmcUwTQ_.js.map} +0 -0
  321. /package/dist/components/{p-Cq_Qpe_C.js.map → p-bM3LH3kc.js.map} +0 -0
  322. /package/dist/components/{p-BPhbwXOv.js.map → p-ji09W9el.js.map} +0 -0
  323. /package/dist/components/{p-n68x-ZKp.js.map → p-neWTRxmf.js.map} +0 -0
  324. /package/dist/components/{p-BPlWEidl.js.map → p-rYePOPbJ.js.map} +0 -0
  325. /package/dist/components/{p-DC69DgAR.js.map → p-tNQ0YulU.js.map} +0 -0
  326. /package/dist/components/{p-Cwz9TPVS.js.map → p-x1wf38q3.js.map} +0 -0
@@ -22,7 +22,8 @@
22
22
  "avoidWhen": [
23
23
  "The user chooses from a finite set of known values.",
24
24
  "The user must enter multiple paragraphs or formatted content.",
25
- "The value is adjusted primarily by dragging within a numeric range."
25
+ "The value is adjusted primarily by dragging within a numeric range.",
26
+ "The value is a calendar date or a clock time."
26
27
  ],
27
28
  "alternatives": [
28
29
  {
@@ -30,6 +31,16 @@
30
31
  "component": "component:ds-select",
31
32
  "reason": "Select exposes the available values and owns listbox selection behavior."
32
33
  },
34
+ {
35
+ "when": "The value is a calendar date.",
36
+ "component": "component:ds-input-date",
37
+ "reason": "InputDate owns calendar date form values, shared Input density, and the Calendar picker."
38
+ },
39
+ {
40
+ "when": "The value is a clock time.",
41
+ "component": "component:ds-input-time",
42
+ "reason": "InputTime owns clock time form values, shared Input density, and the TimePicker."
43
+ },
33
44
  {
34
45
  "when": "The value is an immediate on/off setting.",
35
46
  "component": "component:ds-switch",
@@ -44,25 +55,29 @@
44
55
  "commonlyComposedWith": [
45
56
  "component:ds-field",
46
57
  "component:ds-icon",
47
- "component:ds-text"
58
+ "component:ds-text",
59
+ "component:ds-select"
48
60
  ],
49
61
  "accessibility": [
50
62
  "Provide a persistent visible label through the owning field or an external native label; placeholder text is guidance and must not be the field's only label.",
51
63
  "Choose the native input type that matches the value so browsers and assistive technology can provide appropriate semantics and keyboards.",
52
64
  "Error text is associated with the native input and announced as an alert when the invalid state is rendered.",
53
65
  "Read-only fields remain focusable and submittable while preventing edits; inactive or disabled fields leave the tab order and are omitted from form submission.",
66
+ "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.",
54
67
  "Number stepper actions are pointer affordances hidden from the accessibility tree; the native spinbutton remains the single keyboard and assistive-technology control.",
55
- "Suffix content must not carry information that is otherwise absent from the field's visible label, value, or description."
68
+ "Prefix and suffix content must not carry information that is otherwise absent from the field's visible label, value, or description.",
69
+ "A nested prefix or suffix Select is a separate control from the editable value and must have its own accessible name."
56
70
  ],
57
71
  "states": [
58
72
  "Every size applies one complete control-density recipe across frame height, inline padding, icon zones, text-container inset, gap, and radius; supporting error content follows the shared 4px field flow.",
59
- "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. Set hasBorder to false only in chrome that supplies enough surrounding structure; set hasInteractionFill to false when that containing chrome also owns hover and pressed feedback.",
73
+ "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. Set hasBorder to false only in chrome that supplies enough surrounding structure; supporting error copy then insets to the field's text origin rather than the resting border box. Set hasInteractionFill to false when that containing chrome also owns hover and pressed feedback.",
60
74
  "Placeholder text is secondary at rest and quaternary while the editable field is focused because it becomes decorative once typing begins. Single-line placeholder and entered value text truncate with an ellipsis when the field is narrower than its content.",
61
- "Entered values use the parent surface's primary foreground; prefix icons, suffix content, and resting placeholder text use its secondary foreground.",
75
+ "Entered values use the parent surface's primary foreground; prefix icons, prefix text, suffix content, and resting placeholder text use its secondary foreground.",
62
76
  "Search fields show a standard borderless CrossCircle icon action only while they contain a value. Clearing emits the empty value and restores focus to the native field.",
77
+ "Password fields show a standard inset Eye action at the field's density. EyeDisabled replaces it while the value is visible. The action stays available on read-only fields and is inactive with the field.",
63
78
  "Search fields disable browser autocomplete history, automatic capitalization, autocorrection, and spellchecking by default so browser-owned suggestions do not compete with product-owned results. Consumers can explicitly provide autoComplete when a different native history behavior is required.",
64
79
  "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.",
65
- "The suffix slot is for compact units or decorations. The optional leading icon is decorative and does not replace the field label.",
80
+ "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.",
66
81
  "Use autoComplete, inputMode, and enterKeyHint to provide browser and virtual-keyboard hints without changing the value's semantic type.",
67
82
  "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.",
68
83
  "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.",
@@ -221,6 +236,14 @@
221
236
  "mutable": false,
222
237
  "description": "Show the standard hover and pressed fill when the field is not embedded in interactive chrome."
223
238
  },
239
+ "hidePasswordLabel": {
240
+ "type": "string",
241
+ "resolvedType": "string",
242
+ "attribute": "hide-password-label",
243
+ "default": "'Hide password'",
244
+ "required": false,
245
+ "mutable": false
246
+ },
224
247
  "icon": {
225
248
  "type": "string | undefined",
226
249
  "resolvedType": "string | undefined",
@@ -309,6 +332,14 @@
309
332
  "required": false,
310
333
  "mutable": false
311
334
  },
335
+ "showPasswordLabel": {
336
+ "type": "string",
337
+ "resolvedType": "string",
338
+ "attribute": "show-password-label",
339
+ "default": "'Show password'",
340
+ "required": false,
341
+ "mutable": false
342
+ },
312
343
  "size": {
313
344
  "type": "InputSize",
314
345
  "resolvedType": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
@@ -505,6 +536,14 @@
505
536
  "mutable": false,
506
537
  "description": "Show the standard hover and pressed fill when the field is not embedded in interactive chrome."
507
538
  },
539
+ "hidePasswordLabel": {
540
+ "type": "string",
541
+ "resolvedType": "string",
542
+ "attribute": "hide-password-label",
543
+ "default": "'Hide password'",
544
+ "required": false,
545
+ "mutable": false
546
+ },
508
547
  "icon": {
509
548
  "type": "string | undefined",
510
549
  "resolvedType": "string | undefined",
@@ -593,6 +632,14 @@
593
632
  "required": false,
594
633
  "mutable": false
595
634
  },
635
+ "showPasswordLabel": {
636
+ "type": "string",
637
+ "resolvedType": "string",
638
+ "attribute": "show-password-label",
639
+ "default": "'Show password'",
640
+ "required": false,
641
+ "mutable": false
642
+ },
596
643
  "size": {
597
644
  "type": "InputSize",
598
645
  "resolvedType": "\"lg\" | \"md\" | \"sm\" | \"xs\"",
@@ -709,18 +756,19 @@
709
756
  ],
710
757
  "registryDependencies": [
711
758
  "button-unfilled",
759
+ "divider",
712
760
  "icon",
713
761
  "text"
714
762
  ],
715
763
  "files": [
716
764
  {
717
765
  "path": "src/wc/components/Input/Input.css",
718
- "content": "@import '../../utils/interaction-fill.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/control-inactive.css';\n@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/control-parts.css';\n@import '../../utils/control-width.css';\n@import '../../utils/field-stack.css';\n@import '../../utils/typography.css';\n@import '../../utils/forced-colors.css';\n\n:host(.input-host) {\n display: inline-flex;\n --ds-input-fg: var(--color-foreground-primary);\n --ds-input-placeholder: var(--color-foreground-secondary);\n --ds-input-placeholder-active: var(--color-foreground-quaternary);\n --ds-input-adornment-fg: var(--color-foreground-secondary);\n --ds-input-border: var(--color-border-secondary);\n --ds-input-stepper-fg: var(--color-foreground-secondary);\n}\n\n:host(.ds-control-width--fill),\n:host(.ds-control-width--fill) .input-control {\n width: 100%;\n}\n\n.input-control {\n overflow: hidden;\n background: transparent;\n border: none;\n border-radius: var(--ds-control-radius, var(--dimension-radius-025));\n color: var(--ds-input-fg);\n}\n\n.input-control--bordered {\n --ds-interaction-border-width: var(--dimension-stroke-width-012);\n --ds-interaction-border-color: var(--ds-input-border);\n}\n\n.input-control--error {\n --ds-interaction-border-width: var(--dimension-stroke-width-018);\n --ds-interaction-border-color: var(--color-border-bold-negative);\n}\n\n.input-control--bordered:focus-within:not(.input-control--error) {\n --ds-interaction-border-width: var(--dimension-stroke-width-018);\n --ds-interaction-border-color: var(--color-border-bold-brand);\n}\n\n:host(.ds-control-inactive) .input-control::after {\n background: transparent;\n}\n\n.native-input {\n position: relative;\n z-index: 2;\n flex: 1 1 auto;\n min-width: 0;\n height: 100%;\n background: transparent;\n border: none;\n border-radius: inherit;\n outline: none;\n color: var(--ds-input-fg);\n font-family: inherit;\n text-overflow: ellipsis;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.native-input--align-start {\n text-align: start;\n}\n\n.native-input--align-end {\n text-align: end;\n}\n\n/* Replace engine-specific number arrows with one density-aware inset stepper. */\n.native-input[type='number'] {\n -moz-appearance: textfield;\n}\n\n.native-input[type='number']::-webkit-inner-spin-button,\n.native-input[type='number']::-webkit-outer-spin-button {\n margin: 0;\n -webkit-appearance: none;\n}\n\n.input-control--number.input-control--align-start {\n padding-inline-end: var(--dimension-space-025);\n}\n\n.input-control--number.input-control--align-end {\n padding-inline-start: var(--dimension-space-025);\n}\n\n.input-control__number-stepper {\n position: relative;\n z-index: 2;\n display: grid;\n grid-template-rows: repeat(2, minmax(0, 1fr));\n flex: 0 0 var(--ds-control-icon);\n width: var(--ds-control-icon);\n height: calc(var(--ds-control-height) - var(--dimension-space-050));\n overflow: hidden;\n border-radius: var(--ds-control-radius, var(--dimension-radius-025));\n color: var(--ds-input-stepper-fg);\n}\n\n.input-control__number-step {\n all: unset;\n position: relative;\n z-index: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n color: inherit;\n cursor: default;\n}\n\n.input-control__number-step--increment {\n border-radius: var(--ds-control-radius, var(--dimension-radius-025))\n var(--ds-control-radius, var(--dimension-radius-025)) 0 0;\n}\n\n.input-control__number-step--decrement {\n border-radius: 0 0 var(--ds-control-radius, var(--dimension-radius-025))\n var(--ds-control-radius, var(--dimension-radius-025));\n}\n\n.input-control__number-step:disabled {\n color: var(--color-foreground-quaternary);\n}\n\n.input-control__number-step-icon {\n flex-shrink: 0;\n}\n\n.native-input:disabled {\n cursor: not-allowed;\n}\n\n.native-input:read-only:not(:disabled) {\n cursor: default;\n}\n\n.native-input::placeholder {\n color: var(--ds-input-placeholder);\n}\n\n.native-input:focus::placeholder {\n color: var(--ds-input-placeholder-active);\n}\n\n.native-input[type='search']::-webkit-search-cancel-button,\n.native-input[type='search']::-webkit-search-decoration {\n display: none;\n}\n\n.input-control__prefix,\n.input-control__suffix {\n position: relative;\n z-index: 2;\n color: var(--ds-input-adornment-fg);\n}\n\n.input-control__suffix--empty {\n display: none;\n}\n\n/* The input frame owns the nested clear action's cross-axis alignment. */\n.input-control > .input-control__clear {\n position: relative;\n z-index: 2;\n flex-shrink: 0;\n align-self: center;\n}\n\n.input-control.ds-control--lg:has(.input-control__clear),\n.input-control.ds-control--md:has(.input-control__clear),\n.input-control.ds-control--sm:has(.input-control__clear) {\n padding-right: var(--dimension-space-050);\n}\n\n.input-control.ds-control--xs:has(.input-control__clear) {\n padding-right: 0;\n}\n\n.error-text {\n width: 100%;\n}\n\n@media (forced-colors: active) {\n .input-control__number-step:disabled {\n color: var(--ds-forced-color-disabled);\n }\n\n .input-control--bordered:focus-within:not(.input-control--error)::after {\n outline-color: var(--ds-forced-color-selected);\n }\n\n .input-control--error::after {\n outline-style: dashed;\n }\n}\n",
766
+ "content": "@import '../../utils/interaction-fill.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/control-inactive.css';\n@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/control-parts.css';\n@import '../../utils/control-width.css';\n@import '../../utils/field-stack.css';\n@import '../../utils/typography.css';\n@import '../../utils/forced-colors.css';\n\n:host(.input-host) {\n display: inline-flex;\n --ds-input-fg: var(--color-foreground-primary);\n --ds-input-placeholder: var(--color-foreground-secondary);\n --ds-input-placeholder-active: var(--color-foreground-quaternary);\n --ds-input-adornment-fg: var(--color-foreground-secondary);\n --ds-input-border: var(--color-border-secondary);\n --ds-input-stepper-fg: var(--color-foreground-secondary);\n}\n\n:host(.ds-control-width--fill),\n:host(.ds-control-width--fill) .input-control {\n width: 100%;\n}\n\n.input-control {\n overflow: hidden;\n background: transparent;\n border: none;\n border-radius: var(--ds-control-radius, var(--dimension-radius-025));\n color: var(--ds-input-fg);\n}\n\n.input-control--bordered {\n --ds-interaction-border-width: var(--dimension-stroke-width-012);\n --ds-interaction-border-color: var(--ds-input-border);\n}\n\n.input-control--error {\n --ds-interaction-border-width: var(--dimension-stroke-width-018);\n --ds-interaction-border-color: var(--color-border-bold-negative);\n}\n\n.input-control--bordered:focus-within:not(.input-control--error) {\n --ds-interaction-border-width: var(--dimension-stroke-width-018);\n --ds-interaction-border-color: var(--color-border-bold-brand);\n}\n\n:host(.ds-control-inactive) .input-control::after {\n background: transparent;\n}\n\n.native-input {\n position: relative;\n z-index: 2;\n flex: 1 1 auto;\n min-width: 0;\n height: 100%;\n background: transparent;\n border: none;\n border-radius: inherit;\n outline: none;\n color: var(--ds-input-fg);\n font-family: inherit;\n text-overflow: ellipsis;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.native-input--align-start {\n text-align: start;\n}\n\n.native-input--align-end {\n text-align: end;\n}\n\n/* Replace engine-specific number arrows with one density-aware inset stepper. */\n.native-input[type='number'] {\n -moz-appearance: textfield;\n}\n\n.native-input[type='number']::-webkit-inner-spin-button,\n.native-input[type='number']::-webkit-outer-spin-button {\n margin: 0;\n -webkit-appearance: none;\n}\n\n.input-control--number.input-control--align-start {\n padding-inline-end: var(--dimension-space-025);\n}\n\n.input-control--number.input-control--align-end {\n padding-inline-start: var(--dimension-space-025);\n}\n\n.input-control__number-stepper {\n position: relative;\n z-index: 2;\n display: grid;\n grid-template-rows: repeat(2, minmax(0, 1fr));\n flex: 0 0 var(--ds-control-icon);\n width: var(--ds-control-icon);\n height: calc(var(--ds-control-height) - var(--dimension-space-050));\n overflow: hidden;\n border-radius: var(--ds-control-radius, var(--dimension-radius-025));\n color: var(--ds-input-stepper-fg);\n}\n\n.input-control__number-step {\n all: unset;\n position: relative;\n z-index: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n color: inherit;\n cursor: default;\n}\n\n.input-control__number-step--increment {\n border-radius: var(--ds-control-radius, var(--dimension-radius-025))\n var(--ds-control-radius, var(--dimension-radius-025)) 0 0;\n}\n\n.input-control__number-step--decrement {\n border-radius: 0 0 var(--ds-control-radius, var(--dimension-radius-025))\n var(--ds-control-radius, var(--dimension-radius-025));\n}\n\n.input-control__number-step:disabled {\n color: var(--color-foreground-quaternary);\n}\n\n.input-control__number-step-icon {\n flex-shrink: 0;\n}\n\n.native-input:disabled {\n cursor: not-allowed;\n}\n\n.native-input:read-only:not(:disabled) {\n cursor: default;\n}\n\n.native-input::placeholder {\n color: var(--ds-input-placeholder);\n}\n\n.native-input:focus::placeholder {\n color: var(--ds-input-placeholder-active);\n}\n\n.native-input[type='search']::-webkit-search-cancel-button,\n.native-input[type='search']::-webkit-search-decoration {\n display: none;\n}\n\n.input-control__prefix,\n.input-control__prefix-text,\n.input-control__suffix {\n position: relative;\n z-index: 2;\n color: var(--ds-input-adornment-fg);\n}\n\n.input-control__prefix-text,\n.input-control__suffix {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n white-space: nowrap;\n}\n\n.input-control__prefix-text--control,\n.input-control__suffix--control {\n align-self: stretch;\n min-width: 0;\n white-space: normal;\n gap: var(--dimension-space-025);\n}\n\n.input-control__prefix-text--empty,\n.input-control__suffix--empty {\n display: none;\n}\n\n/* Nested inset controls keep 2px on the outer edge, matching trailing actions. */\n.input-control--prefix-control {\n padding-inline-start: var(--dimension-space-025);\n}\n\n.input-control--suffix-control {\n padding-inline-end: var(--dimension-space-025);\n}\n\n.input-control__adornment-divider {\n position: relative;\n z-index: 2;\n pointer-events: none;\n}\n\n/*\n * Select side stays on the 2px inset remainder. Value side matches a\n * non-prefixed field's inline padding from its border.\n */\n.input-control__prefix-text--control .input-control__adornment-divider {\n margin-inline-end: calc(var(--ds-control-padding-inline) - var(--ds-control-gap));\n}\n\n.input-control__suffix--control .input-control__adornment-divider {\n margin-inline-start: calc(var(--ds-control-padding-inline) - var(--ds-control-gap));\n}\n\n/* The input frame owns the nested clear action's cross-axis alignment. */\n.input-control > .input-control__clear {\n position: relative;\n z-index: 2;\n flex-shrink: 0;\n align-self: center;\n}\n\n.input-control.ds-control--lg:has(.input-control__clear),\n.input-control.ds-control--md:has(.input-control__clear),\n.input-control.ds-control--sm:has(.input-control__clear) {\n padding-right: var(--dimension-space-050);\n}\n\n.input-control.ds-control--xs:has(.input-control__clear) {\n padding-right: 0;\n}\n\n/* Same-size inset trailing action as date/time: 2px remaining on the end edges. */\n.input-control > .input-control__trailing-action {\n position: relative;\n z-index: 2;\n flex-shrink: 0;\n align-self: center;\n}\n\n:host(.ds-control-inactive) .input-control > .input-control__trailing-action {\n --effect-opacity-medium: 1;\n}\n\n.input-control:has(.input-control__trailing-action) {\n padding-inline-end: var(--dimension-space-025);\n}\n\n.error-text {\n width: 100%;\n}\n\n@media (forced-colors: active) {\n .input-control__number-step:disabled {\n color: var(--ds-forced-color-disabled);\n }\n\n .input-control--bordered:focus-within:not(.input-control--error)::after {\n outline-color: var(--ds-forced-color-selected);\n }\n\n .input-control--error::after {\n outline-style: dashed;\n }\n}\n",
719
767
  "type": "registry:ui"
720
768
  },
721
769
  {
722
770
  "path": "src/wc/components/Input/Input.tsx",
723
- "content": "import {\n AttachInternals,\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Method,\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 InputType = 'text' | 'email' | 'tel' | 'url' | 'search' | 'password' | 'number';\nexport type InputSize = 'lg' | 'md' | 'sm' | 'xs';\nexport type InputWidth = ControlWidth;\nexport type InputTextAlign = 'start' | 'end';\n\nconst ICON_SIZE: Record<InputSize, 'lg' | 'md' | 'sm' | 'xs'> = {\n lg: 'lg',\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\nconst CLEAR_BUTTON_SIZE: Record<InputSize, 'md' | 'sm' | 'xs'> = {\n lg: 'md',\n md: 'sm',\n sm: 'xs',\n xs: 'xs',\n};\n\nlet idCounter = 0;\n\n@Component({\n tag: 'ds-input',\n styleUrl: 'Input.css',\n scoped: true,\n formAssociated: true,\n})\nexport class Input {\n @Element() el!: HTMLElement;\n @AttachInternals() internals!: ElementInternals;\n\n private generatedId = `ds-input-${++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() clearLabel: string = 'Clear';\n @Prop() placeholder: string | undefined;\n @Prop() type: InputType = 'text';\n /** Minimum accepted value when type is number. */\n @Prop() min: number | undefined;\n /** Maximum accepted value when type is number. */\n @Prop() max: number | undefined;\n /** Numeric increment used by native stepping and constraint validation. */\n @Prop() step: number | undefined;\n /** Align the editable value; number steppers follow the same inline edge. */\n @Prop() textAlign: InputTextAlign = 'start';\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 /** Control density. */\n @Prop() size: InputSize = 'md';\n /** Width fit — fill the parent (default) or hug the available content. */\n @Prop() width: InputWidth = '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 /** Optional leading icon name. */\n @Prop() icon: string | undefined;\n @Prop() isInactive: boolean = false;\n @Prop() autoFocus: boolean = false;\n @Prop() error: boolean = false;\n @Prop() errorMessage: string | undefined;\n /** Associates the internal input 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 /** Identifies the results or popup controlled by the editable field. */\n @Prop({ attribute: 'aria-controls' }) ariaControls: string | undefined;\n /** Identifies the active descendant while focus remains in the editable field. */\n @Prop({ attribute: 'aria-activedescendant' }) ariaActiveDescendant: string | undefined;\n\n @Event() dsChange!: EventEmitter<string>;\n @Event() dsClear!: EventEmitter<void>;\n\n private initialValue = '';\n private inputEl?: HTMLInputElement;\n @State() private formDisabled = false;\n @State() private hasSuffix = false;\n @State() private focused = false;\n @State() private touched = false;\n\n componentWillLoad() {\n this.initialValue = this.value;\n this.hasSuffix = Boolean(this.el.querySelector('[slot=\"suffix\"]'));\n this.syncFormValue();\n }\n\n componentDidRender() {\n const hasSuffix = Boolean(this.el.querySelector('[slot=\"suffix\"]'));\n if (hasSuffix !== this.hasSuffix) this.hasSuffix = hasSuffix;\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.inputEl?.focus();\n }\n\n private handleInput = (e: Event) => {\n this.value = (e.target as HTMLInputElement).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 private handleClear = () => {\n this.value = '';\n this.dsChange.emit('');\n this.dsClear.emit();\n this.inputEl?.focus();\n };\n\n private numericStepDisabled(direction: 1 | -1): boolean {\n if (this.value.trim() === '') return false;\n const value = Number(this.value);\n if (!Number.isFinite(value)) return false;\n if (direction > 0 && this.max !== undefined) return value >= this.max;\n if (direction < 0 && this.min !== undefined) return value <= this.min;\n return false;\n }\n\n private handleNumericStep = (direction: 1 | -1) => {\n const input = this.inputEl;\n if (!input || input.disabled || input.readOnly || this.numericStepDisabled(direction)) return;\n\n const previous = input.value;\n if (direction > 0) input.stepUp();\n else input.stepDown();\n input.focus({ preventScroll: true });\n if (input.value === previous) return;\n\n this.value = input.value;\n this.dsChange.emit(this.value);\n };\n\n private renderNumericStepper(inactive: boolean) {\n const incrementDisabled = inactive || this.readOnly || this.numericStepDisabled(1);\n const decrementDisabled = inactive || this.readOnly || this.numericStepDisabled(-1);\n\n return (\n <span class=\"input-control__number-stepper\">\n <button\n type=\"button\"\n class=\"input-control__number-step input-control__number-step--increment ds-focus-ring-inset ds-interaction-fill\"\n disabled={incrementDisabled}\n tabIndex={-1}\n aria-hidden=\"true\"\n onClick={() => this.handleNumericStep(1)}\n >\n <ds-icon\n class=\"input-control__number-step-icon ds-interaction-fill__content\"\n name=\"ChevronUp\"\n size=\"xs\"\n color=\"inherit\"\n />\n </button>\n <button\n type=\"button\"\n class=\"input-control__number-step input-control__number-step--decrement ds-focus-ring-inset ds-interaction-fill\"\n disabled={decrementDisabled}\n tabIndex={-1}\n aria-hidden=\"true\"\n onClick={() => this.handleNumericStep(-1)}\n >\n <ds-icon\n class=\"input-control__number-step-icon ds-interaction-fill__content\"\n name=\"ChevronDown\"\n size=\"xs\"\n color=\"inherit\"\n />\n </button>\n </span>\n );\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 showClear = this.type === 'search' && filled && !inactive && !this.readOnly;\n const showError = this.error && Boolean(this.errorMessage);\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n const numeric = this.type === 'number';\n const resolvedAutoComplete = this.autoComplete ?? (this.type === 'search' ? 'off' : undefined);\n\n const describedBy =\n [this.ariaDescribedby, showError ? this.errorId : undefined].filter(Boolean).join(' ') ||\n undefined;\n\n return (\n <Host\n class={{\n 'input-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 'input-control': true,\n 'input-control--number': numeric,\n 'input-control--align-start': this.textAlign === 'start',\n 'input-control--align-end': this.textAlign === 'end',\n 'ds-control-frame': true,\n 'input-control--bordered': this.hasBorder,\n 'input-control--error': this.hasBorder && this.error,\n 'ds-interaction-fill': this.hasInteractionFill,\n [`ds-control--${this.size}`]: true,\n }}\n >\n {numeric && this.textAlign === 'end' && this.renderNumericStepper(inactive)}\n {this.icon && (\n <span\n class=\"input-control__prefix ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-icon name={this.icon} size={iconSize} color=\"inherit\" />\n </span>\n )}\n <input\n ref={element => {\n this.inputEl = element;\n }}\n type={this.type}\n id={inputId}\n value={this.value}\n placeholder={this.placeholder}\n min={numeric ? this.min : undefined}\n max={numeric ? this.max : undefined}\n step={numeric ? this.step : undefined}\n disabled={inactive}\n readOnly={this.readOnly}\n required={this.required}\n autoFocus={this.autoFocus}\n autoComplete={resolvedAutoComplete}\n autoCapitalize={this.type === 'search' ? 'none' : undefined}\n autoCorrect={this.type === 'search' ? 'off' : undefined}\n spellcheck={this.type === 'search' ? false : undefined}\n inputMode={this.inputMode || undefined}\n enterKeyHint={this.enterKeyHint || undefined}\n class={`native-input native-input--align-${this.textAlign} ds-control-label-box 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-controls={this.ariaControls}\n aria-activedescendant={this.ariaActiveDescendant}\n aria-invalid={this.error ? 'true' : undefined}\n onInput={this.handleInput}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n <span\n class={{\n 'input-control__suffix': true,\n 'ds-control-icon-box': true,\n 'input-control__suffix--empty': !this.hasSuffix,\n }}\n >\n <slot name=\"suffix\" />\n </span>\n {showClear && (\n <ds-button-unfilled\n class=\"input-control__clear\"\n variant=\"icon\"\n size={CLEAR_BUTTON_SIZE[this.size]}\n icon=\"CrossCircle\"\n hasBorder={false}\n rounded\n ariaLabel={this.clearLabel}\n onDsClick={this.handleClear}\n />\n )}\n {numeric && this.textAlign === 'start' && this.renderNumericStepper(inactive)}\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",
771
+ "content": "import {\n AttachInternals,\n Component,\n Prop,\n State,\n Event,\n EventEmitter,\n Element,\n Method,\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 InputType = 'text' | 'email' | 'tel' | 'url' | 'search' | 'password' | 'number';\nexport type InputSize = 'lg' | 'md' | 'sm' | 'xs';\nexport type InputWidth = ControlWidth;\nexport type InputTextAlign = 'start' | 'end';\n\nconst CONTROL_ADORNMENT = 'ds-select, ds-button-unfilled, ds-button-filled';\n\nfunction isControlAdornment(element: Element): boolean {\n return element.matches(CONTROL_ADORNMENT) || Boolean(element.querySelector(CONTROL_ADORNMENT));\n}\n\nconst ICON_SIZE: Record<InputSize, 'lg' | 'md' | 'sm' | 'xs'> = {\n lg: 'lg',\n md: 'md',\n sm: 'sm',\n xs: 'xs',\n};\n\nconst CLEAR_BUTTON_SIZE: Record<InputSize, 'md' | 'sm' | 'xs'> = {\n lg: 'md',\n md: 'sm',\n sm: 'xs',\n xs: 'xs',\n};\n\nlet idCounter = 0;\n\n@Component({\n tag: 'ds-input',\n styleUrl: 'Input.css',\n scoped: true,\n formAssociated: true,\n})\nexport class Input {\n @Element() el!: HTMLElement;\n @AttachInternals() internals!: ElementInternals;\n\n private generatedId = `ds-input-${++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() clearLabel: string = 'Clear';\n @Prop() showPasswordLabel: string = 'Show password';\n @Prop() hidePasswordLabel: string = 'Hide password';\n @Prop() placeholder: string | undefined;\n @Prop() type: InputType = 'text';\n /** Minimum accepted value when type is number. */\n @Prop() min: number | undefined;\n /** Maximum accepted value when type is number. */\n @Prop() max: number | undefined;\n /** Numeric increment used by native stepping and constraint validation. */\n @Prop() step: number | undefined;\n /** Align the editable value; number steppers follow the same inline edge. */\n @Prop() textAlign: InputTextAlign = 'start';\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 /** Control density. */\n @Prop() size: InputSize = 'md';\n /** Width fit — fill the parent (default) or hug the available content. */\n @Prop() width: InputWidth = '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 /** Optional leading icon name. */\n @Prop() icon: string | undefined;\n @Prop() isInactive: boolean = false;\n @Prop() autoFocus: boolean = false;\n @Prop() error: boolean = false;\n @Prop() errorMessage: string | undefined;\n /** Associates the internal input 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 /** Identifies the results or popup controlled by the editable field. */\n @Prop({ attribute: 'aria-controls' }) ariaControls: string | undefined;\n /** Identifies the active descendant while focus remains in the editable field. */\n @Prop({ attribute: 'aria-activedescendant' }) ariaActiveDescendant: string | undefined;\n\n @Event() dsChange!: EventEmitter<string>;\n @Event() dsClear!: EventEmitter<void>;\n\n private initialValue = '';\n private inputEl?: HTMLInputElement;\n @State() private formDisabled = false;\n @State() private hasPrefix = false;\n @State() private hasPrefixControl = false;\n @State() private hasSuffix = false;\n @State() private hasSuffixControl = false;\n @State() private focused = false;\n @State() private touched = false;\n @State() private passwordRevealed = false;\n private restorePasswordFocus = false;\n\n componentWillLoad() {\n this.initialValue = this.value;\n this.syncAdornmentSlots();\n this.syncFormValue();\n }\n\n componentDidRender() {\n this.syncAdornmentSlots();\n if (!this.restorePasswordFocus) return;\n this.restorePasswordFocus = false;\n this.inputEl?.focus({ preventScroll: true });\n }\n\n @Watch('type')\n onTypeChange() {\n if (this.type !== 'password') this.passwordRevealed = false;\n }\n\n private syncAdornmentSlots() {\n const prefixNodes = [...this.el.querySelectorAll('[slot=\"prefix\"]')];\n const suffixNodes = [...this.el.querySelectorAll('[slot=\"suffix\"]')];\n const hasPrefix = prefixNodes.length > 0;\n const hasPrefixControl = prefixNodes.some(isControlAdornment);\n const hasSuffix = suffixNodes.length > 0;\n const hasSuffixControl = suffixNodes.some(isControlAdornment);\n if (hasPrefix !== this.hasPrefix) this.hasPrefix = hasPrefix;\n if (hasPrefixControl !== this.hasPrefixControl) this.hasPrefixControl = hasPrefixControl;\n if (hasSuffix !== this.hasSuffix) this.hasSuffix = hasSuffix;\n if (hasSuffixControl !== this.hasSuffixControl) this.hasSuffixControl = hasSuffixControl;\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 this.passwordRevealed = false;\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n this.value = restoreStringFormState(state);\n }\n\n @Method()\n async setFocus() {\n this.inputEl?.focus();\n }\n\n private handleInput = (e: Event) => {\n this.value = (e.target as HTMLInputElement).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 private handleClear = () => {\n this.value = '';\n this.dsChange.emit('');\n this.dsClear.emit();\n this.inputEl?.focus();\n };\n\n private handleTogglePassword = () => {\n this.passwordRevealed = !this.passwordRevealed;\n this.restorePasswordFocus = true;\n };\n\n private numericStepDisabled(direction: 1 | -1): boolean {\n if (this.value.trim() === '') return false;\n const value = Number(this.value);\n if (!Number.isFinite(value)) return false;\n if (direction > 0 && this.max !== undefined) return value >= this.max;\n if (direction < 0 && this.min !== undefined) return value <= this.min;\n return false;\n }\n\n private handleNumericStep = (direction: 1 | -1) => {\n const input = this.inputEl;\n if (!input || input.disabled || input.readOnly || this.numericStepDisabled(direction)) return;\n\n const previous = input.value;\n if (direction > 0) input.stepUp();\n else input.stepDown();\n input.focus({ preventScroll: true });\n if (input.value === previous) return;\n\n this.value = input.value;\n this.dsChange.emit(this.value);\n };\n\n private renderNumericStepper(inactive: boolean) {\n const incrementDisabled = inactive || this.readOnly || this.numericStepDisabled(1);\n const decrementDisabled = inactive || this.readOnly || this.numericStepDisabled(-1);\n\n return (\n <span class=\"input-control__number-stepper\">\n <button\n type=\"button\"\n class=\"input-control__number-step input-control__number-step--increment ds-focus-ring-inset ds-interaction-fill\"\n disabled={incrementDisabled}\n tabIndex={-1}\n aria-hidden=\"true\"\n onClick={() => this.handleNumericStep(1)}\n >\n <ds-icon\n class=\"input-control__number-step-icon ds-interaction-fill__content\"\n name=\"ChevronUp\"\n size=\"xs\"\n color=\"inherit\"\n />\n </button>\n <button\n type=\"button\"\n class=\"input-control__number-step input-control__number-step--decrement ds-focus-ring-inset ds-interaction-fill\"\n disabled={decrementDisabled}\n tabIndex={-1}\n aria-hidden=\"true\"\n onClick={() => this.handleNumericStep(-1)}\n >\n <ds-icon\n class=\"input-control__number-step-icon ds-interaction-fill__content\"\n name=\"ChevronDown\"\n size=\"xs\"\n color=\"inherit\"\n />\n </button>\n </span>\n );\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 showClear = this.type === 'search' && filled && !inactive && !this.readOnly;\n const showPasswordToggle = this.type === 'password';\n const nativeType = showPasswordToggle && this.passwordRevealed ? 'text' : this.type;\n const showError = this.error && Boolean(this.errorMessage);\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n const numeric = this.type === 'number';\n const resolvedAutoComplete = this.autoComplete ?? (this.type === 'search' ? 'off' : undefined);\n const suppressBrowserChrome = this.type === 'search' || this.type === 'password';\n\n const describedBy =\n [this.ariaDescribedby, showError ? this.errorId : undefined].filter(Boolean).join(' ') ||\n undefined;\n\n return (\n <Host\n class={{\n 'input-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 'input-control': true,\n 'input-control--number': numeric,\n 'input-control--align-start': this.textAlign === 'start',\n 'input-control--align-end': this.textAlign === 'end',\n 'ds-control-frame': true,\n 'input-control--bordered': this.hasBorder,\n 'input-control--error': this.hasBorder && this.error,\n 'input-control--prefix-control': this.hasPrefixControl,\n 'input-control--suffix-control': this.hasSuffixControl,\n 'ds-interaction-fill': this.hasInteractionFill,\n [`ds-control--${this.size}`]: true,\n }}\n >\n {numeric && this.textAlign === 'end' && this.renderNumericStepper(inactive)}\n {this.icon && (\n <span\n class=\"input-control__prefix ds-control-icon-box ds-interaction-fill__content\"\n aria-hidden=\"true\"\n >\n <ds-icon name={this.icon} size={iconSize} color=\"inherit\" />\n </span>\n )}\n <span\n class={{\n 'input-control__prefix-text': true,\n 'ds-control-label-box': !this.hasPrefixControl,\n 'ds-interaction-fill__content': true,\n 'input-control__prefix-text--control': this.hasPrefixControl,\n 'input-control__prefix-text--empty': !this.hasPrefix,\n }}\n >\n <slot name=\"prefix\" onSlotchange={() => this.syncAdornmentSlots()} />\n {this.hasPrefixControl && (\n <ds-divider\n class=\"input-control__adornment-divider\"\n orientation=\"vertical\"\n length=\"var(--ds-control-icon)\"\n />\n )}\n </span>\n <input\n ref={element => {\n this.inputEl = element;\n }}\n type={nativeType}\n id={inputId}\n value={this.value}\n placeholder={this.placeholder}\n min={numeric ? this.min : undefined}\n max={numeric ? this.max : undefined}\n step={numeric ? this.step : undefined}\n disabled={inactive}\n readOnly={this.readOnly}\n required={this.required}\n autoFocus={this.autoFocus}\n autoComplete={resolvedAutoComplete}\n autoCapitalize={suppressBrowserChrome ? 'none' : undefined}\n autoCorrect={suppressBrowserChrome ? 'off' : undefined}\n spellcheck={suppressBrowserChrome ? false : undefined}\n inputMode={this.inputMode || undefined}\n enterKeyHint={this.enterKeyHint || undefined}\n class={`native-input native-input--align-${this.textAlign} ds-control-label-box 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-controls={this.ariaControls}\n aria-activedescendant={this.ariaActiveDescendant}\n aria-invalid={this.error ? 'true' : undefined}\n onInput={this.handleInput}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n <span\n class={{\n 'input-control__suffix': true,\n 'ds-control-label-box': !this.hasSuffixControl,\n 'input-control__suffix--control': this.hasSuffixControl,\n 'input-control__suffix--empty': !this.hasSuffix,\n }}\n >\n {this.hasSuffixControl && (\n <ds-divider\n class=\"input-control__adornment-divider\"\n orientation=\"vertical\"\n length=\"var(--ds-control-icon)\"\n />\n )}\n <slot name=\"suffix\" onSlotchange={() => this.syncAdornmentSlots()} />\n </span>\n {showClear && (\n <ds-button-unfilled\n class=\"input-control__clear\"\n variant=\"icon\"\n size={CLEAR_BUTTON_SIZE[this.size]}\n icon=\"CrossCircle\"\n hasBorder={false}\n rounded\n ariaLabel={this.clearLabel}\n onDsClick={this.handleClear}\n />\n )}\n {showPasswordToggle && (\n <ds-button-unfilled\n class=\"input-control__trailing-action\"\n variant=\"icon\"\n size={this.size}\n icon={this.passwordRevealed ? 'EyeDisabled' : 'Eye'}\n hasBorder={false}\n isInset\n isInactive={inactive}\n ariaLabel={this.passwordRevealed ? this.hidePasswordLabel : this.showPasswordLabel}\n onDsClick={this.handleTogglePassword}\n />\n )}\n {numeric && this.textAlign === 'start' && this.renderNumericStepper(inactive)}\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",
724
772
  "type": "registry:ui"
725
773
  }
726
774
  ]