@ds-mo/ui 15.5.0 → 15.6.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 (256) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +48 -23
  4. package/dist/angular/ds-data-preferences.d.ts +1 -1
  5. package/dist/angular/ds-data-preferences.js +3 -3
  6. package/dist/angular/ds-menu.d.ts +7 -1
  7. package/dist/angular/ds-menu.js +5 -2
  8. package/dist/angular/ds-table.d.ts +1 -1
  9. package/dist/angular/ds-table.js +3 -3
  10. package/dist/components/THIRD-PARTY-NOTICES +1 -1
  11. package/dist/components/bundled-dependencies.json +1 -1
  12. package/dist/components/ds-agent-questionnaire.js +1 -1
  13. package/dist/components/ds-agent-response.js +1 -1
  14. package/dist/components/ds-banner.js +1 -1
  15. package/dist/components/ds-bar-nav.js +1 -1
  16. package/dist/components/ds-bar-page-title.js +1 -1
  17. package/dist/components/ds-bar-title.js +1 -1
  18. package/dist/components/ds-bar-workflow.js +1 -1
  19. package/dist/components/ds-button-filled.js +1 -1
  20. package/dist/components/ds-button-unfilled.js +1 -1
  21. package/dist/components/ds-calendar.js +1 -1
  22. package/dist/components/ds-card-chart.js +1 -1
  23. package/dist/components/ds-card-overview.js +1 -1
  24. package/dist/components/ds-card-setting.js +1 -1
  25. package/dist/components/ds-code-block.js +1 -1
  26. package/dist/components/ds-data-customize.js +1 -1
  27. package/dist/components/ds-data-filter.js +1 -1
  28. package/dist/components/ds-data-group.js +1 -1
  29. package/dist/components/ds-data-preferences.js +1 -1
  30. package/dist/components/ds-data-preferences.js.map +1 -1
  31. package/dist/components/ds-data-saved-views.js +1 -1
  32. package/dist/components/ds-data-search.js +1 -1
  33. package/dist/components/ds-data-search.js.map +1 -1
  34. package/dist/components/ds-data-sort.js +1 -1
  35. package/dist/components/ds-filter-menu.js +1 -1
  36. package/dist/components/ds-input-date.js +1 -1
  37. package/dist/components/ds-input-time.js +1 -1
  38. package/dist/components/ds-input.js +1 -1
  39. package/dist/components/ds-map-entity-marker.js +1 -1
  40. package/dist/components/ds-map-entity-marker.js.map +1 -1
  41. package/dist/components/ds-markdown.js +1 -1
  42. package/dist/components/ds-menu.js +1 -1
  43. package/dist/components/ds-message-actions.js +1 -1
  44. package/dist/components/ds-message-composer.js +1 -1
  45. package/dist/components/ds-message-scroller.js +1 -1
  46. package/dist/components/ds-mobile-header.js +1 -1
  47. package/dist/components/ds-mobile-section-switcher.js +1 -1
  48. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  49. package/dist/components/ds-modal.js +1 -1
  50. package/dist/components/ds-pagination.js +1 -1
  51. package/dist/components/ds-panel-nav.js +1 -1
  52. package/dist/components/ds-panel-tool-header.js +1 -1
  53. package/dist/components/ds-panel-tool-search.js +1 -1
  54. package/dist/components/ds-panel-tools.js +1 -1
  55. package/dist/components/ds-select.js +1 -1
  56. package/dist/components/ds-shell-app.js +1 -1
  57. package/dist/components/ds-shell-tools.js +1 -1
  58. package/dist/components/ds-table.js +1 -1
  59. package/dist/components/ds-table.js.map +1 -1
  60. package/dist/components/ds-toast.js +1 -1
  61. package/dist/components/ds-toast.js.map +1 -1
  62. package/dist/components/ds-tooltip.js +1 -1
  63. package/dist/components/{p-BO5URdZF.js → p-B-pkoIX9.js} +2 -2
  64. package/dist/components/{p--STJbKuN.js → p-B3o9zn3Y.js} +2 -2
  65. package/dist/components/p-BR9Pjp15.js +2 -0
  66. package/dist/components/{p-Bq_ypMSy.js.map → p-BR9Pjp15.js.map} +1 -1
  67. package/dist/components/{p-rmPIcWED.js → p-BZY40-pE.js} +2 -2
  68. package/dist/components/{p-D-J7GgjY.js → p-BqipGGua.js} +2 -2
  69. package/dist/components/{p-D-J7GgjY.js.map → p-BqipGGua.js.map} +1 -1
  70. package/dist/components/{p-PtxCwf5S.js → p-C6kUn-vb.js} +2 -2
  71. package/dist/components/p-CElsKlxj.js +2 -0
  72. package/dist/components/{p-C1oczmAc.js.map → p-CElsKlxj.js.map} +1 -1
  73. package/dist/components/p-CIMyD_6H.js +2 -0
  74. package/dist/components/{p-C5BBIDVm.js.map → p-CIMyD_6H.js.map} +1 -1
  75. package/dist/components/{p-BcpIK9S6.js → p-CSxwWcwW.js} +2 -2
  76. package/dist/components/p-CUYLGe5d.js +2 -0
  77. package/dist/components/{p-D9_iDlkT.js.map → p-CUYLGe5d.js.map} +1 -1
  78. package/dist/components/{p-wRhYxngW.js → p-CaFXrn_8.js} +2 -2
  79. package/dist/components/{p-BYeG0b5N.js → p-DObhRLBa.js} +2 -2
  80. package/dist/components/{p-C_9VGgPf.js → p-DP07JCed.js} +2 -2
  81. package/dist/components/{p-Dg6hnCc2.js → p-DVsGfz7J.js} +2 -2
  82. package/dist/components/{p-Dg6hnCc2.js.map → p-DVsGfz7J.js.map} +1 -1
  83. package/dist/components/p-DYGllrVT.js +2 -0
  84. package/dist/components/{p-DEYCF-oJ.js.map → p-DYGllrVT.js.map} +1 -1
  85. package/dist/components/{p-BGSG6xIS.js → p-DYtVsnDS.js} +2 -2
  86. package/dist/components/p-DbW8S5qe.js +2 -0
  87. package/dist/components/p-DbW8S5qe.js.map +1 -0
  88. package/dist/components/p-DcxY_pdJ.js +2 -0
  89. package/dist/components/{p-CA3iQ1ME.js.map → p-DcxY_pdJ.js.map} +1 -1
  90. package/dist/components/{p-B6TX55c5.js → p-DdFeWC-e.js} +2 -2
  91. package/dist/components/p-DlCLfwP4.js +2 -0
  92. package/dist/components/p-DuCfCvPs.js +2 -0
  93. package/dist/components/p-DuCfCvPs.js.map +1 -0
  94. package/dist/components/{p-BYrBU_U9.js → p-HMDczkQf.js} +2 -2
  95. package/dist/components/p-HfZ1gI2q.js +2 -0
  96. package/dist/components/{p-jp7hwRtC.js.map → p-HfZ1gI2q.js.map} +1 -1
  97. package/dist/components/{p-DR_8IPn9.js → p-KA8srEed.js} +2 -2
  98. package/dist/components/{p-CXGjCWSh.js → p-OJ5WeR05.js} +2 -2
  99. package/dist/components/p-Ouk6FCxc.js +2 -0
  100. package/dist/components/{p-PzYJqN8B.js.map → p-Ouk6FCxc.js.map} +1 -1
  101. package/dist/components/p-leZFu-cd.js +2 -0
  102. package/dist/components/{p-DPFg5d4_.js.map → p-leZFu-cd.js.map} +1 -1
  103. package/dist/components/{p-DjbT9kKm.js → p-wXKIVUTn.js} +2 -2
  104. package/dist/components/p-xMBaOeKa.js +2 -0
  105. package/dist/components/p-xMBaOeKa.js.map +1 -0
  106. package/dist/docs/components.json +208 -30
  107. package/dist/lint/index.js +1 -1
  108. package/dist/mcp-data/registry/agent-activity.json +1 -1
  109. package/dist/mcp-data/registry/agent-questionnaire.json +1 -1
  110. package/dist/mcp-data/registry/agent-response.json +1 -1
  111. package/dist/mcp-data/registry/agent-source-list.json +1 -1
  112. package/dist/mcp-data/registry/agent-tool-call.json +1 -1
  113. package/dist/mcp-data/registry/attachment-list.json +1 -1
  114. package/dist/mcp-data/registry/avatar.json +1 -1
  115. package/dist/mcp-data/registry/badge.json +1 -1
  116. package/dist/mcp-data/registry/banner.json +1 -1
  117. package/dist/mcp-data/registry/bar-action.json +1 -1
  118. package/dist/mcp-data/registry/bar-nav.json +1 -1
  119. package/dist/mcp-data/registry/bar-page-title.json +1 -1
  120. package/dist/mcp-data/registry/bar-title.json +1 -1
  121. package/dist/mcp-data/registry/bar-workflow.json +1 -1
  122. package/dist/mcp-data/registry/breadcrumb.json +1 -1
  123. package/dist/mcp-data/registry/button-filled.json +2 -2
  124. package/dist/mcp-data/registry/button-inverted.json +1 -1
  125. package/dist/mcp-data/registry/button-unfilled.json +1 -1
  126. package/dist/mcp-data/registry/calendar.json +1 -1
  127. package/dist/mcp-data/registry/card-action-center.json +1 -1
  128. package/dist/mcp-data/registry/card-chart.json +1 -1
  129. package/dist/mcp-data/registry/card-navigation.json +1 -1
  130. package/dist/mcp-data/registry/card-overview.json +1 -1
  131. package/dist/mcp-data/registry/card-setting.json +1 -1
  132. package/dist/mcp-data/registry/card-settings-scope.json +1 -1
  133. package/dist/mcp-data/registry/chart-legend.json +1 -1
  134. package/dist/mcp-data/registry/chart.json +1 -1
  135. package/dist/mcp-data/registry/checkbox-group.json +1 -1
  136. package/dist/mcp-data/registry/checkbox.json +1 -1
  137. package/dist/mcp-data/registry/chip.json +1 -1
  138. package/dist/mcp-data/registry/code-block.json +1 -1
  139. package/dist/mcp-data/registry/conversation-list-item.json +1 -1
  140. package/dist/mcp-data/registry/conversation-list-section.json +1 -1
  141. package/dist/mcp-data/registry/conversation-list.json +1 -1
  142. package/dist/mcp-data/registry/data-customize.json +1 -1
  143. package/dist/mcp-data/registry/data-filter.json +1 -1
  144. package/dist/mcp-data/registry/data-group.json +1 -1
  145. package/dist/mcp-data/registry/data-preferences.json +22 -6
  146. package/dist/mcp-data/registry/data-saved-views.json +1 -1
  147. package/dist/mcp-data/registry/data-search.json +1 -1
  148. package/dist/mcp-data/registry/data-sort.json +1 -1
  149. package/dist/mcp-data/registry/data-toolbar.json +1 -1
  150. package/dist/mcp-data/registry/divider.json +1 -1
  151. package/dist/mcp-data/registry/empty-state.json +1 -1
  152. package/dist/mcp-data/registry/field.json +1 -1
  153. package/dist/mcp-data/registry/filter-menu.json +1 -1
  154. package/dist/mcp-data/registry/icon.json +1 -1
  155. package/dist/mcp-data/registry/inline-banner-settings.json +1 -1
  156. package/dist/mcp-data/registry/input-date.json +1 -1
  157. package/dist/mcp-data/registry/input-time.json +1 -1
  158. package/dist/mcp-data/registry/input.json +1 -1
  159. package/dist/mcp-data/registry/loader.json +1 -1
  160. package/dist/mcp-data/registry/map-cluster-marker.json +1 -1
  161. package/dist/mcp-data/registry/map-entity-marker.json +6 -6
  162. package/dist/mcp-data/registry/markdown.json +1 -1
  163. package/dist/mcp-data/registry/menu.json +31 -12
  164. package/dist/mcp-data/registry/message-actions.json +1 -1
  165. package/dist/mcp-data/registry/message-bubble.json +1 -1
  166. package/dist/mcp-data/registry/message-composer.json +1 -1
  167. package/dist/mcp-data/registry/message-scroller.json +1 -1
  168. package/dist/mcp-data/registry/message.json +1 -1
  169. package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
  170. package/dist/mcp-data/registry/mobile-header.json +1 -1
  171. package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
  172. package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
  173. package/dist/mcp-data/registry/modal.json +1 -1
  174. package/dist/mcp-data/registry/pagination.json +1 -1
  175. package/dist/mcp-data/registry/panel-nav.json +1 -1
  176. package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
  177. package/dist/mcp-data/registry/panel-tool-header.json +1 -1
  178. package/dist/mcp-data/registry/panel-tool-search.json +1 -1
  179. package/dist/mcp-data/registry/panel-tools.json +1 -1
  180. package/dist/mcp-data/registry/paper-texture.json +1 -1
  181. package/dist/mcp-data/registry/radio-tile.json +1 -1
  182. package/dist/mcp-data/registry/radio.json +1 -1
  183. package/dist/mcp-data/registry/registry.json +48 -23
  184. package/dist/mcp-data/registry/score.json +1 -1
  185. package/dist/mcp-data/registry/scroll-overlay.json +1 -1
  186. package/dist/mcp-data/registry/select.json +1 -1
  187. package/dist/mcp-data/registry/setting-row-checkbox.json +1 -1
  188. package/dist/mcp-data/registry/setting-row-radio.json +1 -1
  189. package/dist/mcp-data/registry/setting-row-toggle.json +1 -1
  190. package/dist/mcp-data/registry/shell-app.json +1 -1
  191. package/dist/mcp-data/registry/shell-page.json +1 -1
  192. package/dist/mcp-data/registry/shell-tools.json +1 -1
  193. package/dist/mcp-data/registry/skeleton.json +1 -1
  194. package/dist/mcp-data/registry/slider.json +1 -1
  195. package/dist/mcp-data/registry/swatch-picker.json +1 -1
  196. package/dist/mcp-data/registry/switch.json +1 -1
  197. package/dist/mcp-data/registry/tab-group.json +1 -1
  198. package/dist/mcp-data/registry/table.json +59 -19
  199. package/dist/mcp-data/registry/tag.json +1 -1
  200. package/dist/mcp-data/registry/text.json +1 -1
  201. package/dist/mcp-data/registry/textarea.json +1 -1
  202. package/dist/mcp-data/registry/time-picker.json +1 -1
  203. package/dist/mcp-data/registry/toast.json +1 -1
  204. package/dist/mcp-data/registry/tooltip-chart.json +1 -1
  205. package/dist/mcp-data/registry/tooltip.json +1 -1
  206. package/dist/mcp-data/registry/typing-indicator.json +1 -1
  207. package/dist/react/ds-menu.d.ts +2 -1
  208. package/dist/react/ds-menu.js +1 -0
  209. package/dist/styles/table.css +41 -0
  210. package/dist/types/components/DataPreferences/DataPreferences.d.ts +3 -0
  211. package/dist/types/components/MapEntityMarker/MapEntityMarker.d.ts +1 -1
  212. package/dist/types/components/Menu/Menu.d.ts +5 -1
  213. package/dist/types/components/Menu/menu-types.d.ts +36 -0
  214. package/dist/types/components/Table/Table.d.ts +11 -2
  215. package/dist/types/components/Table/index.d.ts +1 -1
  216. package/dist/types/components/Table/table-column-customizer.d.ts +23 -4
  217. package/dist/types/components/Table/table-layout-controller.d.ts +2 -1
  218. package/dist/types/components/Table/table-types.d.ts +3 -1
  219. package/dist/types/components.d.ts +44 -8
  220. package/dist/vue/ds-data-preferences.js +1 -0
  221. package/dist/vue/ds-menu.js +2 -0
  222. package/dist/vue/ds-table.js +2 -0
  223. package/package.json +3 -3
  224. package/dist/components/p-Bq_ypMSy.js +0 -2
  225. package/dist/components/p-C1oczmAc.js +0 -2
  226. package/dist/components/p-C5BBIDVm.js +0 -2
  227. package/dist/components/p-CA3iQ1ME.js +0 -2
  228. package/dist/components/p-CE6MaXBg.js +0 -2
  229. package/dist/components/p-CE6MaXBg.js.map +0 -1
  230. package/dist/components/p-D9_iDlkT.js +0 -2
  231. package/dist/components/p-DEYCF-oJ.js +0 -2
  232. package/dist/components/p-DPFg5d4_.js +0 -2
  233. package/dist/components/p-DvGrsLgt.js +0 -2
  234. package/dist/components/p-DvGrsLgt.js.map +0 -1
  235. package/dist/components/p-PzYJqN8B.js +0 -2
  236. package/dist/components/p-aD5cw_m2.js +0 -2
  237. package/dist/components/p-aD5cw_m2.js.map +0 -1
  238. package/dist/components/p-jp7hwRtC.js +0 -2
  239. package/dist/components/p-kDZ0sEII.js +0 -2
  240. package/dist/components/p-t2Ebn8si.js +0 -2
  241. package/dist/components/p-t2Ebn8si.js.map +0 -1
  242. /package/dist/components/{p-BO5URdZF.js.map → p-B-pkoIX9.js.map} +0 -0
  243. /package/dist/components/{p--STJbKuN.js.map → p-B3o9zn3Y.js.map} +0 -0
  244. /package/dist/components/{p-rmPIcWED.js.map → p-BZY40-pE.js.map} +0 -0
  245. /package/dist/components/{p-PtxCwf5S.js.map → p-C6kUn-vb.js.map} +0 -0
  246. /package/dist/components/{p-BcpIK9S6.js.map → p-CSxwWcwW.js.map} +0 -0
  247. /package/dist/components/{p-wRhYxngW.js.map → p-CaFXrn_8.js.map} +0 -0
  248. /package/dist/components/{p-BYeG0b5N.js.map → p-DObhRLBa.js.map} +0 -0
  249. /package/dist/components/{p-C_9VGgPf.js.map → p-DP07JCed.js.map} +0 -0
  250. /package/dist/components/{p-BGSG6xIS.js.map → p-DYtVsnDS.js.map} +0 -0
  251. /package/dist/components/{p-B6TX55c5.js.map → p-DdFeWC-e.js.map} +0 -0
  252. /package/dist/components/{p-kDZ0sEII.js.map → p-DlCLfwP4.js.map} +0 -0
  253. /package/dist/components/{p-BYrBU_U9.js.map → p-HMDczkQf.js.map} +0 -0
  254. /package/dist/components/{p-DR_8IPn9.js.map → p-KA8srEed.js.map} +0 -0
  255. /package/dist/components/{p-CXGjCWSh.js.map → p-OJ5WeR05.js.map} +0 -0
  256. /package/dist/components/{p-DjbT9kKm.js.map → p-wXKIVUTn.js.map} +0 -0
@@ -0,0 +1,2 @@
1
+ import{h as t,p as i,H as s,c as e,a as n,t as o}from"./index.js";import{A as r,r as d,d as a}from"./p-DbW8S5qe.js";import{A as c}from"./p-CwUXroLs.js";import{a as l,C as u}from"./p-CuwopElg.js";import{l as p,t as h}from"./p-TVkFIMXz.js";import{d as f}from"./p-CwdRaJER.js";import{d as g}from"./p-BqipGGua.js";import{d as m}from"./p-DfMTDFcE.js";import{d as v}from"./p-D_iZPukF.js";import{d as b}from"./p-pPtjNRqC.js";import{d as x}from"./p-0XTyQNRG.js";import{d as y}from"./p-D8OWhnID.js";import{D as w}from"./p-DOUk4KoT.js";import{r as k}from"./p-ioGH5SoA.js";import{a as _,s as z,b as C,r as F}from"./p-DGVZhrMd.js";import{T as S}from"./p-CeXf9-X3.js";import{c as V}from"./p-DuFm-ieS.js";const D=({size:i="md",heading:s,ariaLabel:e,className:n},o)=>t("div",{class:`ds-choice-list ds-chrome-column ds-chrome-space--sm ${n??""}`.trim(),role:"listbox","aria-label":e},s?t("ds-text",{class:`ds-choice-section__header ds-control-section-heading ds-control--${i}`,as:"div",variant:l[i],color:"primary",emphasis:true,"aria-hidden":"true"},s):null,o);const L=({size:i="md",hasFocusBoundary:s=true,hasInteractionFill:e=true,value:n,placeholder:o,ariaLabel:r,controls:d,activeDescendant:a,disabled:c=false,inputRef:l,clearLabel:u,onValueChange:p,onClear:h,onKeyDown:f})=>t("div",{class:{"select-search":true,"select-search--without-focus-boundary":!s}},t("ds-input",{class:"select-search__control",ref:t=>l(t??null),type:"search",size:i,width:"fill",value:n,placeholder:o,icon:"MagnifyingGlass",clearLabel:u,isInactive:c,hasBorder:false,hasInteractionFill:e,ariaLabel:r??o,ariaControls:d,ariaActiveDescendant:a,onKeyDown:f,onDsChange:t=>{t.stopPropagation();p(t.detail)},onDsClear:t=>{t.stopPropagation();h?.()}}));const T=({size:i="md",clearLabel:s,summary:e,compactSummary:n,useCompactSummary:o=false,contentRef:r,summaryMeasureRef:d,clearRef:a,onClear:c})=>t("div",{class:"ds-choice-footer"},t("div",{ref:t=>r?.(t??null),class:`ds-choice-footer__content ds-control--${i}`},e&&[t("ds-text",{key:"summary",class:"ds-choice-footer__summary",as:"span",variant:u[i],color:"secondary"},o?n??e:e),t("ds-text",{key:"summary-measure",ref:t=>d?.(t??null),class:"ds-choice-footer__summary-measure",as:"span",variant:u[i],color:"secondary","aria-hidden":"true"},e)],t("button",{ref:t=>a?.(t??null),type:"button",class:"ds-choice-footer__clear ds-text-action ds-focus-ring",onClick:c},t("ds-text",{as:"span",variant:u[i],color:"inherit"},s))));const I=({size:i="md",label:s,onAction:e})=>t("div",{class:"ds-choice-footer"},t("div",{class:`ds-choice-footer__content ds-control--${i}`},t("button",{type:"button",class:"ds-choice-footer__action ds-text-action ds-focus-ring",onClick:e},t("ds-text",{as:"span",variant:u[i],color:"inherit"},s))));const M=({size:i="md",id:s,option:e,selected:n,active:o,focusRingVisible:r,usesSubtext:d,leading:a,supporting:c,action:p,actionOpen:h=false,popupRole:f="listbox",tabIndex:g,onFocus:m,onKeyDown:v,onHover:b,onSelect:x})=>{const y=f==="grid";return t("div",{id:y?s:undefined,role:y?"row":undefined,"aria-selected":y?String(n):undefined,"aria-disabled":y&&e.isInactive?"true":undefined,class:{"select-option-row":true,"select-option-row--has-action":!!p,"select-option-row--action-open":h,"select-option-row--keyboard-active":!!p&&o&&r}},t("div",{id:y?undefined:s,class:{"select-option":true,"ds-choice-item":true,"ds-control-frame":true,[`ds-control--${i}`]:true,"ds-focus-ring-inset":true,"ds-focus-ring--visible":o&&r,"ds-interaction-fill":!e.isInactive,"ds-interaction-fill--selected":n&&!e.isInactive,"ds-control-inactive":!!e.isInactive,"select-option--active":o},role:y?"gridcell":"option",tabIndex:g,"aria-selected":y?undefined:String(n),"aria-disabled":!y&&e.isInactive?"true":undefined,onMouseDown:t=>t.preventDefault(),onFocus:m,onKeyDown:v,onMouseMove:()=>{if(!e.isInactive)b()},onClick:x},a,t("div",{class:"ds-choice-item__content ds-interaction-fill__content"},t("ds-text",{class:"ds-choice-item__label ds-control-label-box",as:"span",variant:u[i],color:n?"primary":"secondary"},e.label),c??(d?t("ds-text",{class:"ds-choice-item__subtext ds-control-label-box",as:"span",variant:l[i],color:"secondary"},e.subtext?.trim()||"—"):null))),p&&t("div",{class:"select-option-row__action ds-control-elevation ds-control-elevation--md ds-control-elevation--press-scale",role:y?"gridcell":undefined},p))};const $=()=>`.sc-ds-input-h,.sc-ds-input:where(.ds-table),.sc-ds-input:where(.tooltip-popup),.sc-ds-input:where(.ds-radius){--ds-radius-control:var(--dimension-radius-025);--ds-radius-card:var(--dimension-radius-050);--ds-radius-modal:var(--dimension-radius-050);--ds-radius-menu:var(--dimension-radius-075);--ds-radius-tooltip-control:var(--dimension-radius-025);--ds-radius-tooltip-menu:var(--dimension-radius-075);--ds-radius-table:var(--dimension-radius-050)}@media (forced-colors: active){.sc-ds-input:root,.sc-ds-input-h,.ds-forced-colors-scope.sc-ds-input{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.sc-ds-input-h{--ds-focus-ring-width:var(--dimension-stroke-width-025, 2px);--ds-focus-ring-offset:var(--dimension-space-025, 2px);--ds-focus-ring-color:var(--color-interaction-focus)}.ds-focus-ring.sc-ds-input-h,.ds-focus-ring.sc-ds-input,.ds-focus-ring-inset.sc-ds-input-h,.ds-focus-ring-inset.sc-ds-input{outline:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.ds-focus-ring.sc-ds-input-h:focus-visible,.ds-focus-ring.sc-ds-input:focus-visible{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring.ds-focus-ring--visible.sc-ds-input-h,.ds-focus-ring.ds-focus-ring--visible.sc-ds-input{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring-inset.sc-ds-input-h:focus-visible,.ds-focus-ring-inset.sc-ds-input:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-input-h:focus-visible::after,.ds-focus-ring-inset.sc-ds-input:focus-visible::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-input-h,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-input{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-input-h::after,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-input::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}@media (forced-colors: active){.sc-ds-input-h{--ds-focus-ring-color:var(--ds-forced-color-selected)}}@media (forced-colors: active){.sc-ds-input:root,.sc-ds-input-h,.ds-forced-colors-scope.sc-ds-input{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}@media (forced-colors: active){.sc-ds-input:root,.sc-ds-input-h,.ds-forced-colors-scope.sc-ds-input{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.ds-interaction-fill.sc-ds-input-h,.ds-interaction-fill.sc-ds-input{position:var(--ds-interaction-position, relative);z-index:var(--ds-interaction-z-index, 0);cursor:default;--ds-interaction-hover:var(--color-interaction-hover);--ds-interaction-pressed:var(--color-interaction-pressed);--ds-interaction-active:var(--color-interaction-active-brand);--ds-interaction-border-width:0px;--ds-interaction-border-color:transparent;--ds-interaction-divider-width:0px;--ds-interaction-divider-color:transparent;--ds-interaction-divider-inline-start-width:0px;--ds-interaction-divider-inline-start-color:transparent;--ds-interaction-divider-inline-end-width:0px;--ds-interaction-divider-inline-end-color:transparent}.ds-interaction-fill.sc-ds-input-h::before,.ds-interaction-fill.sc-ds-input::before,.ds-interaction-fill.sc-ds-input-h::after,.ds-interaction-fill.sc-ds-input::after{content:'';position:absolute;inset:0;border-radius:inherit;background:transparent;pointer-events:none;cursor:inherit;transition:none}.ds-interaction-fill.sc-ds-input-h::before,.ds-interaction-fill.sc-ds-input::before{z-index:1}.ds-interaction-fill.sc-ds-input-h::after,.ds-interaction-fill.sc-ds-input::after{z-index:3;box-shadow:inset 0 calc(-1 * var(--ds-interaction-divider-width)) 0 var(--ds-interaction-divider-color), inset var(--ds-interaction-divider-inline-start-width) 0 0 var(--ds-interaction-divider-inline-start-color), inset calc(-1 * var(--ds-interaction-divider-inline-end-width)) 0 0 var(--ds-interaction-divider-inline-end-color), inset 0 0 0 var(--ds-interaction-border-width) var(--ds-interaction-border-color)}.ds-interaction-fill--bordered.sc-ds-input-h,.ds-interaction-fill--bordered.sc-ds-input{--ds-interaction-border-width:var(--dimension-stroke-width-012);--ds-interaction-border-color:var(--color-border-secondary)}.ds-interaction-fill--selected.sc-ds-input-h::before,.ds-interaction-fill--selected.sc-ds-input::before{background:var(--ds-interaction-active)}.ds-interaction-fill--selected.sc-ds-input-h,.ds-interaction-fill--selected.sc-ds-input{--ds-interaction-dot-ring:var(--ds-interaction-active)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill.sc-ds-input-h:hover:not(:disabled)::after,.ds-interaction-fill.sc-ds-input:hover:not(:disabled)::after{background:var(--ds-interaction-hover)}}.ds-interaction-fill.sc-ds-input-h:active:not(:disabled)::after,.ds-interaction-fill.sc-ds-input:active:not(:disabled)::after{background:var(--ds-interaction-pressed)}.ds-interaction-fill--grouped.sc-ds-input-h::after,.ds-interaction-fill--grouped.sc-ds-input::after,.ds-interaction-fill--grouped.sc-ds-input-h:active:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-input:active:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill--grouped.sc-ds-input-h:hover:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-input:hover:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}}.ds-interaction-fill--grouped.sc-ds-input-h,.ds-interaction-fill--grouped.sc-ds-input{--ds-interaction-divider-width:var(--ds-interaction-group-divider-width, 0px);--ds-interaction-divider-color:var(--ds-interaction-group-divider-color, transparent);--ds-interaction-divider-inline-start-width:var( --ds-interaction-group-divider-inline-start-width, 0px );--ds-interaction-divider-inline-start-color:var( --ds-interaction-group-divider-inline-start-color, transparent );--ds-interaction-divider-inline-end-width:var( --ds-interaction-group-divider-inline-end-width, 0px );--ds-interaction-divider-inline-end-color:var( --ds-interaction-group-divider-inline-end-color, transparent )}.ds-interaction-fill.sc-ds-input-h>.ds-interaction-fill__content.sc-ds-input,.ds-interaction-fill.sc-ds-input>.ds-interaction-fill__content.sc-ds-input,.ds-interaction-fill__content.sc-ds-input{position:relative;z-index:2;cursor:inherit}.ds-interaction-fill--on-faint.sc-ds-input-h,.ds-interaction-fill--on-faint.sc-ds-input{--ds-interaction-active:var(--color-interaction-active)}.ds-interaction-fill--on-medium.sc-ds-input-h,.ds-interaction-fill--on-medium.sc-ds-input{--ds-interaction-hover:var(--color-interaction-on-medium-background-hover);--ds-interaction-pressed:var(--color-interaction-on-medium-background-pressed);--ds-interaction-active:var(--color-interaction-on-medium-background-active);--ds-focus-ring-color:var(--color-interaction-on-medium-background-focus)}.ds-interaction-fill--on-bold.sc-ds-input-h,.ds-interaction-fill--on-bold.sc-ds-input{--ds-interaction-hover:var(--color-interaction-on-bold-background-hover);--ds-interaction-pressed:var(--color-interaction-on-bold-background-pressed);--ds-interaction-active:var(--color-interaction-on-bold-background-active);--ds-focus-ring-color:var(--color-interaction-on-bold-background-focus)}.ds-interaction-fill--on-strong.sc-ds-input-h,.ds-interaction-fill--on-strong.sc-ds-input{--ds-interaction-hover:var(--color-interaction-on-strong-background-hover);--ds-interaction-pressed:var(--color-interaction-on-strong-background-pressed);--ds-interaction-active:var(--color-interaction-on-strong-background-active);--ds-focus-ring-color:var(--color-interaction-on-strong-background-focus)}.ds-interaction-fill--on-translucent.sc-ds-input-h,.ds-interaction-fill--on-translucent.sc-ds-input{--ds-interaction-hover:var(--color-translucent-interaction-hover);--ds-interaction-pressed:var(--color-translucent-interaction-pressed);--ds-interaction-active:var(--color-translucent-interaction-active-brand);--ds-focus-ring-color:var(--color-translucent-interaction-focus)}.ds-interaction-fill--on-inverted.sc-ds-input-h,.ds-interaction-fill--on-inverted.sc-ds-input{--ds-interaction-hover:var(--color-inverted-interaction-hover);--ds-interaction-pressed:var(--color-inverted-interaction-pressed);--ds-interaction-active:var(--color-inverted-interaction-active-brand);--ds-focus-ring-color:var(--color-inverted-interaction-focus)}.ds-interaction-fill--on-media.sc-ds-input-h,.ds-interaction-fill--on-media.sc-ds-input{--ds-interaction-hover:var(--color-media-interaction-hover);--ds-interaction-pressed:var(--color-media-interaction-pressed);--ds-interaction-active:var(--color-media-interaction-active);--ds-focus-ring-color:var(--color-media-interaction-focus)}.ds-interaction-fill--on-always-dark.sc-ds-input-h,.ds-interaction-fill--on-always-dark.sc-ds-input{--ds-interaction-hover:var(--color-always-dark-interaction-hover);--ds-interaction-pressed:var(--color-always-dark-interaction-pressed);--ds-interaction-active:var(--color-always-dark-interaction-active-brand);--ds-focus-ring-color:var(--color-always-dark-interaction-focus)}.ds-interaction-fill--on-chrome.sc-ds-input-h,.ds-interaction-fill--on-chrome.sc-ds-input{--ds-interaction-hover:var(--color-chrome-interaction-hover);--ds-interaction-pressed:var(--color-chrome-interaction-pressed);--ds-interaction-active:var(--color-chrome-interaction-active);--ds-focus-ring-color:var(--color-chrome-interaction-focus)}.ds-interaction-fill--on-navigation.sc-ds-input-h,.ds-interaction-fill--on-navigation.sc-ds-input{--ds-interaction-hover:var(--color-navigation-interaction-hover);--ds-interaction-pressed:var(--color-navigation-interaction-pressed);--ds-interaction-active:var(--color-navigation-interaction-active);--ds-focus-ring-color:var(--color-navigation-interaction-focus)}.ds-interaction-fill.ds-interaction-fill--surface-open.sc-ds-input-h:not(:disabled)::after,.ds-interaction-fill.ds-interaction-fill--surface-open.sc-ds-input:not(:disabled)::after{background:var(--ds-interaction-pressed)}@media (forced-colors: active){.ds-interaction-fill.sc-ds-input-h::after,.ds-interaction-fill.sc-ds-input::after{box-shadow:none;outline:var(--ds-interaction-border-width) solid var(--ds-forced-color-control-boundary);outline-offset:calc(-1 * var(--ds-interaction-border-width))}.ds-interaction-fill--surface-open.sc-ds-input-h:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill--surface-open.sc-ds-input:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after{outline:var(--dimension-stroke-width-025) dashed var(--ds-forced-color-control-boundary);outline-offset:calc(-1 * var(--dimension-stroke-width-025))}.ds-interaction-fill--selected.sc-ds-input-h::before,.ds-interaction-fill--selected.sc-ds-input::before{background:transparent;outline:var(--dimension-stroke-width-025) solid var(--ds-forced-color-selected);outline-offset:calc(-1 * var(--dimension-stroke-width-025))}}@media (forced-colors: active) and (hover: hover) and (pointer: fine){.ds-interaction-fill.sc-ds-input-h:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill.sc-ds-input:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after{outline-color:var(--ds-forced-color-selected);outline-width:var(--dimension-stroke-width-012)}}@media (forced-colors: active){.sc-ds-input:root,.sc-ds-input-h,.ds-forced-colors-scope.sc-ds-input{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.ds-control-inactive.sc-ds-input-h,.ds-control-inactive.sc-ds-input{opacity:var(--effect-opacity-medium);pointer-events:none;cursor:not-allowed}@media (forced-colors: active){.ds-control-inactive.sc-ds-input-h,.ds-control-inactive.sc-ds-input{color:var(--ds-forced-color-disabled);opacity:1}}.ds-control--lg.sc-ds-input,.ds-control--lg.sc-ds-input-h,.ds-control--md.sc-ds-input-h,.ds-control--md.sc-ds-input,.ds-control--sm.sc-ds-input-h,.ds-control--sm.sc-ds-input,.ds-control--xs.sc-ds-input-h,.ds-control--xs.sc-ds-input{--ds-control-radius:var(--ds-radius-control)}.ds-control--lg.sc-ds-input-h,.ds-control--lg.sc-ds-input{--ds-control-height:var(--dimension-size-500);--ds-control-icon:var(--dimension-iconography-lg);--ds-control-padding-inline:var(--dimension-space-100);--ds-control-label-inset:var(--dimension-space-050);--ds-control-gap:var(--dimension-space-050)}.ds-control--md.sc-ds-input-h,.ds-control--md.sc-ds-input{--ds-control-height:var(--dimension-size-400);--ds-control-icon:var(--dimension-iconography-md);--ds-control-padding-inline:var(--dimension-space-075);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-050)}.ds-control--sm.sc-ds-input-h,.ds-control--sm.sc-ds-input{--ds-control-height:var(--dimension-size-300);--ds-control-icon:var(--dimension-iconography-sm);--ds-control-padding-inline:var(--dimension-space-050);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-025)}.ds-control--xs.sc-ds-input-h,.ds-control--xs.sc-ds-input{--ds-control-height:var(--dimension-size-200);--ds-control-icon:var(--dimension-iconography-xs);--ds-control-padding-inline:var(--dimension-space-025);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:0}.ds-chrome-space--sm.sc-ds-input-h,.ds-chrome-space--sm.sc-ds-input{--ds-chrome-padding:var(--dimension-space-050);--ds-chrome-gap:var(--dimension-space-050)}.ds-chrome-space--md.sc-ds-input-h,.ds-chrome-space--md.sc-ds-input{--ds-chrome-padding:var(--dimension-space-100);--ds-chrome-gap:var(--dimension-space-100)}.ds-chrome-space--lg.sc-ds-input-h,.ds-chrome-space--lg.sc-ds-input{--ds-chrome-padding:var(--dimension-space-200);--ds-chrome-gap:var(--dimension-space-200)}.ds-chrome-row.sc-ds-input-h,.ds-chrome-row.sc-ds-input,.ds-chrome-column.sc-ds-input-h,.ds-chrome-column.sc-ds-input,.ds-chrome-grid.sc-ds-input-h,.ds-chrome-grid.sc-ds-input{display:flex;box-sizing:border-box;gap:var(--ds-chrome-gap, var(--dimension-space-100));padding:var(--ds-chrome-padding, var(--dimension-space-100))}.ds-chrome-row.sc-ds-input-h,.ds-chrome-row.sc-ds-input{flex-direction:row;align-items:center}.ds-chrome-column.sc-ds-input-h,.ds-chrome-column.sc-ds-input{flex-direction:column}.ds-chrome-grid.sc-ds-input-h,.ds-chrome-grid.sc-ds-input{display:grid;align-items:center}.ds-control-frame.sc-ds-input{display:inline-flex;align-items:center;box-sizing:border-box;height:var(--ds-control-height, var(--dimension-size-400));padding-inline:var(--ds-control-padding-inline, var(--dimension-space-075));gap:var(--ds-control-gap, var(--dimension-space-050));border-radius:var(--ds-control-radius, var(--dimension-radius-025))}.ds-control-section-heading.sc-ds-input{display:flex;align-items:center;box-sizing:border-box;height:var(--ds-control-height, var(--dimension-size-400));padding-inline:calc( var(--ds-control-padding-inline, var(--dimension-space-075)) + var(--ds-control-label-inset, var(--dimension-space-025)) )}.ds-control-icon-box.sc-ds-input{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ds-control-icon, var(--dimension-iconography-md));height:var(--ds-control-icon, var(--dimension-iconography-md))}.ds-control-label-box.sc-ds-input{min-width:0;padding-inline:var(--ds-control-label-inset, var(--dimension-space-025))}.ds-control-label-dot.sc-ds-input{position:relative;padding-inline-end:calc( var(--ds-control-label-inset, var(--dimension-space-025)) + var(--ds-control-gap, var(--dimension-space-050)) )}.ds-control-label-dot__badge.sc-ds-input{position:absolute;inset-block-start:0;inset-inline-end:0;pointer-events:none}.ds-empty-region.sc-ds-input{display:flex;flex:1 1 auto;align-items:center;justify-content:center;box-sizing:border-box;min-width:0;min-height:0}.ds-empty-region--padded.sc-ds-input{padding:var(--dimension-space-200)}.sc-ds-input:where(.ds-text-decoration,.ds-text-action).sc-ds-input{text-decoration-color:var(--ds-text-decoration-color, var(--color-foreground-tertiary));text-decoration-thickness:var(--ds-text-decoration-thickness, var(--dimension-stroke-width-012));text-underline-offset:var(--ds-text-decoration-offset, var(--dimension-space-025))}.ds-text-action.sc-ds-input{--ds-text-action-foreground:var(--color-foreground-bold-brand);--ds-text-decoration-color:var(--ds-text-action-foreground);color:var(--ds-text-action-foreground);text-decoration-line:none}.ds-text-action--on-medium.sc-ds-input{--ds-text-action-foreground:var(--color-foreground-on-medium-background-primary);--ds-text-decoration-color:var(--color-foreground-on-medium-background-secondary);text-decoration-line:underline}.ds-text-action--on-strong.sc-ds-input{--ds-text-action-foreground:var(--color-foreground-on-strong-background-primary);--ds-text-decoration-color:var(--color-foreground-on-strong-background-secondary);text-decoration-line:underline}.ds-text-action--on-bold.sc-ds-input{--ds-text-action-foreground:var(--color-foreground-on-bold-background-primary);--ds-text-decoration-color:var(--color-foreground-on-bold-background-secondary);text-decoration-line:underline}@media (hover: hover) and (pointer: fine){.ds-text-action.sc-ds-input:hover{text-decoration-line:underline}}@media (forced-colors: active){.ds-text-action.sc-ds-input{text-decoration-line:underline;text-decoration-color:currentcolor}}.ds-choice-popup.sc-ds-input{box-sizing:border-box;display:flex;flex-direction:column;min-width:var(--ds-choice-popup-min-inline-size, var(--dimension-menu-width-xs));max-width:min(var(--dimension-panel-width-lg), calc(100vw - var(--dimension-space-200)));max-height:calc(100vh - var(--dimension-space-200));overflow:hidden;inset:auto;margin:0;padding:0;border:0;background-color:var(--color-background-primary);border-radius:var(--ds-radius-menu);box-shadow:var(--effect-shadow-elevated-floating);color:var(--color-foreground-secondary);animation:dsChoiceFadeIn var(--effect-motion-short-2) forwards;backface-visibility:hidden;will-change:transform;text-align:start}.ds-choice-popup.sc-ds-input::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;box-shadow:var(--effect-highlight-elevated-floating)}.ds-choice-popup--closing.sc-ds-input{animation:dsChoiceFadeOut var(--effect-motion-short-2) forwards}@keyframes dsChoiceFadeIn{from{opacity:0;transform:inherit scale(0.97)}to{opacity:1}}@keyframes dsChoiceFadeOut{from{opacity:1}to{opacity:0}}@media (prefers-reduced-motion: reduce){.ds-choice-popup.sc-ds-input{animation:none;opacity:1}.ds-choice-popup--closing.sc-ds-input{opacity:0}}@media (forced-colors: active){.ds-choice-popup.sc-ds-input{outline:var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);outline-offset:calc(-1 * var(--dimension-stroke-width-012))}.ds-choice-popup.sc-ds-input::after{box-shadow:none}}.ds-choice-list.sc-ds-input{display:flex;flex-direction:column;min-height:0;overflow-y:auto;overscroll-behavior:contain}.ds-choice-section--divided.sc-ds-input{border-bottom:var(--dimension-stroke-width-015) solid var(--color-border-tertiary)}ds-text.ds-choice-section__header.sc-ds-input{text-align:start;-webkit-user-select:none;user-select:none}.ds-choice-section--headed-after-first.sc-ds-input{margin-block-start:var(--dimension-space-050)}.select-option-row.sc-ds-input{display:flex;flex-direction:column;min-width:0}.ds-choice-item.sc-ds-input{width:100%;border:none;border-radius:var(--ds-control-radius, var(--dimension-radius-025));background:transparent;cursor:default;-webkit-user-select:none;user-select:none;text-align:left;color:inherit}.ds-choice-item.sc-ds-input:has(.ds-choice-item__subtext){height:auto;min-height:var(--ds-control-height, var(--dimension-size-400));padding-block:var(--ds-control-padding-inline, var(--dimension-space-075));align-items:flex-start}.ds-choice-item.ds-control--xs.sc-ds-input:has(.ds-choice-item__subtext){padding-block:0}.ds-choice-item__content.sc-ds-input{display:flex;flex:1;flex-direction:column;gap:var(--dimension-space-025);min-width:0}ds-text.ds-choice-item__label.sc-ds-input{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}ds-text.ds-choice-item__subtext.sc-ds-input{display:-webkit-box;overflow:hidden;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.ds-choice-item__icon.sc-ds-input,.ds-choice-item__suffix.sc-ds-input{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ds-control-icon, var(--dimension-iconography-md));height:var(--ds-control-icon, var(--dimension-iconography-md));pointer-events:none}.ds-choice-item.ds-interaction-fill--selected.sc-ds-input .ds-choice-item__icon.sc-ds-input{color:var(--color-foreground-primary)}.ds-choice-item__tag.sc-ds-input{flex-shrink:0;pointer-events:none}.ds-choice-empty.sc-ds-input,.ds-choice-loading.sc-ds-input{min-height:var(--dimension-size-600);padding:var(--dimension-space-100)}.ds-choice-footer.sc-ds-input{position:relative;box-sizing:border-box;padding-block:var(--dimension-space-050)}.ds-choice-footer.sc-ds-input::before{content:'';position:absolute;inset:0 0 auto;height:var(--dimension-stroke-width-012);background-color:var(--color-border-tertiary);pointer-events:none}.ds-choice-footer__content.sc-ds-input{display:flex;align-items:center;justify-content:space-between;column-gap:var(--dimension-space-050);box-sizing:border-box;height:var(--ds-control-height, var(--dimension-size-400))}.ds-choice-footer__summary.sc-ds-input,.ds-choice-footer__summary-measure.sc-ds-input,.ds-choice-footer__clear.sc-ds-input ds-text.sc-ds-input,.ds-choice-footer__action.sc-ds-input ds-text.sc-ds-input{padding-inline:calc( var(--dimension-space-050) + var(--ds-control-padding-inline, var(--dimension-space-075)) + var(--ds-control-label-inset, var(--dimension-space-025)) )}.ds-choice-footer__summary.sc-ds-input,.ds-choice-footer__summary-measure.sc-ds-input,.ds-choice-footer__clear.sc-ds-input,.ds-choice-footer__action.sc-ds-input{white-space:nowrap}.ds-choice-footer__summary-measure.sc-ds-input{position:absolute;visibility:hidden;pointer-events:none}.ds-choice-footer__clear.sc-ds-input,.ds-choice-footer__action.sc-ds-input{appearance:none;display:inline-flex;align-items:center;padding:0;border:0;border-radius:var(--dimension-radius-025);background:transparent;cursor:default}@media (forced-colors: active){.ds-choice-section--divided.sc-ds-input{border-bottom-color:var(--ds-forced-color-content)}.ds-choice-footer.sc-ds-input::before{background-color:var(--ds-forced-color-content)}}.ds-control-frame.sc-ds-input{display:inline-flex;align-items:center;box-sizing:border-box;height:var(--ds-control-height, var(--dimension-size-400));padding-inline:var(--ds-control-padding-inline, var(--dimension-space-075));gap:var(--ds-control-gap, var(--dimension-space-050));border-radius:var(--ds-control-radius, var(--dimension-radius-025))}.ds-control-section-heading.sc-ds-input{display:flex;align-items:center;box-sizing:border-box;height:var(--ds-control-height, var(--dimension-size-400));padding-inline:calc( var(--ds-control-padding-inline, var(--dimension-space-075)) + var(--ds-control-label-inset, var(--dimension-space-025)) )}.ds-control-icon-box.sc-ds-input{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ds-control-icon, var(--dimension-iconography-md));height:var(--ds-control-icon, var(--dimension-iconography-md))}.ds-control-label-box.sc-ds-input{min-width:0;padding-inline:var(--ds-control-label-inset, var(--dimension-space-025))}.ds-control-label-dot.sc-ds-input{position:relative;padding-inline-end:calc( var(--ds-control-label-inset, var(--dimension-space-025)) + var(--ds-control-gap, var(--dimension-space-050)) )}.ds-control-label-dot__badge.sc-ds-input{position:absolute;inset-block-start:0;inset-inline-end:0;pointer-events:none}.text-field-support.sc-ds-input{display:flex;align-items:baseline;gap:var(--dimension-space-100);width:100%}.text-field-support.sc-ds-input>.sc-ds-input:first-child:not(.text-field-count){flex:1;min-width:0}.text-field-count.sc-ds-input{flex:none;white-space:nowrap}.ds-control-width--hug.sc-ds-input-h,.ds-control-width--hug.sc-ds-input{width:fit-content;max-width:100%;flex:0 0 auto}.ds-control-width--fill.sc-ds-input-h,.ds-control-width--fill.sc-ds-input{width:100%;min-width:0;flex:1 1 auto;align-self:stretch}.ds-field-stack.sc-ds-input-h,.ds-field-stack.sc-ds-input{display:flex;flex-direction:column;gap:var(--dimension-space-050)}.ds-field-stack.ds-field-stack--supporting-inset.sc-ds-input-h .error-text.sc-ds-input,.ds-field-stack.ds-field-stack--supporting-inset.sc-ds-input .error-text.sc-ds-input,.ds-field-stack.ds-field-stack--supporting-inset.sc-ds-input .field__description.sc-ds-input,.ds-field-stack.ds-field-stack--supporting-inset.sc-ds-input .field__error.sc-ds-input{padding-inline:calc( var(--ds-control-padding-inline, var(--dimension-space-075)) + var(--ds-control-label-inset, var(--dimension-space-025)) )}.ds-text--display-medium.sc-ds-input-h,.ds-text--display-medium.sc-ds-input{font-size:var(--typography-fontsize-3xl);line-height:var(--typography-lineheight-3xl)}.ds-text--display-small.sc-ds-input-h,.ds-text--display-small.sc-ds-input{font-size:var(--typography-fontsize-2xl);line-height:var(--typography-lineheight-2xl)}.ds-text--title-large.sc-ds-input-h,.ds-text--title-large.sc-ds-input{font-size:var(--typography-fontsize-xl);line-height:var(--typography-lineheight-xl)}.ds-text--title-medium.sc-ds-input-h,.ds-text--title-medium.sc-ds-input{font-size:var(--typography-fontsize-lg);line-height:var(--typography-lineheight-lg)}.ds-text--title-small.sc-ds-input-h,.ds-text--title-small.sc-ds-input{font-size:var(--typography-fontsize-md);line-height:var(--typography-lineheight-md)}.ds-text--body-large.sc-ds-input-h,.ds-text--body-large.sc-ds-input{font-size:var(--typography-fontsize-lg);line-height:var(--typography-lineheight-lg)}.ds-text--body-medium.sc-ds-input-h,.ds-text--body-medium.sc-ds-input{font-size:var(--typography-fontsize-md);line-height:var(--typography-lineheight-md)}.ds-text--body-small.sc-ds-input-h,.ds-text--body-small.sc-ds-input{font-size:var(--typography-fontsize-sm);line-height:var(--typography-lineheight-sm)}.ds-text--caption.sc-ds-input-h,.ds-text--caption.sc-ds-input{font-size:var(--typography-fontsize-xs);line-height:var(--typography-lineheight-xs);text-transform:uppercase}.ds-text--display-medium.ds-text--emphasis.sc-ds-input-h,.ds-text--display-small.ds-text--emphasis.sc-ds-input-h,.ds-text--display-medium.ds-text--emphasis.sc-ds-input,.ds-text--display-small.ds-text--emphasis.sc-ds-input{font-weight:var(--typography-weight-bold);letter-spacing:var(--typography-letterspacing-negative-double)}.ds-text--display-medium.ds-text--regular.sc-ds-input-h,.ds-text--display-small.ds-text--regular.sc-ds-input-h,.ds-text--display-medium.ds-text--regular.sc-ds-input,.ds-text--display-small.ds-text--regular.sc-ds-input{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--title-large.ds-text--emphasis.sc-ds-input-h,.ds-text--title-large.ds-text--emphasis.sc-ds-input{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-negative-double)}.ds-text--title-large.ds-text--regular.sc-ds-input-h,.ds-text--title-large.ds-text--regular.sc-ds-input{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--title-medium.ds-text--emphasis.sc-ds-input-h,.ds-text--title-small.ds-text--emphasis.sc-ds-input-h,.ds-text--title-medium.ds-text--emphasis.sc-ds-input,.ds-text--title-small.ds-text--emphasis.sc-ds-input{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--title-medium.ds-text--regular.sc-ds-input-h,.ds-text--title-small.ds-text--regular.sc-ds-input-h,.ds-text--title-medium.ds-text--regular.sc-ds-input,.ds-text--title-small.ds-text--regular.sc-ds-input{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative-half)}.ds-text--body-large.ds-text--emphasis.sc-ds-input-h,.ds-text--body-medium.ds-text--emphasis.sc-ds-input-h,.ds-text--body-large.ds-text--emphasis.sc-ds-input,.ds-text--body-medium.ds-text--emphasis.sc-ds-input{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative)}.ds-text--body-large.ds-text--regular.sc-ds-input-h,.ds-text--body-medium.ds-text--regular.sc-ds-input-h,.ds-text--body-large.ds-text--regular.sc-ds-input,.ds-text--body-medium.ds-text--regular.sc-ds-input{font-weight:var(--typography-weight-regular);letter-spacing:var(--typography-letterspacing-negative-half)}.ds-text--body-small.ds-text--emphasis.sc-ds-input-h,.ds-text--body-small.ds-text--emphasis.sc-ds-input{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-negative-half)}.ds-text--body-small.ds-text--regular.sc-ds-input-h,.ds-text--body-small.ds-text--regular.sc-ds-input{font-weight:var(--typography-weight-regular);letter-spacing:var(--typography-letterspacing-none)}.ds-text--caption.ds-text--emphasis.sc-ds-input-h,.ds-text--caption.ds-text--emphasis.sc-ds-input{font-weight:var(--typography-weight-semibold);letter-spacing:var(--typography-letterspacing-positive)}.ds-text--caption.ds-text--regular.sc-ds-input-h,.ds-text--caption.ds-text--regular.sc-ds-input{font-weight:var(--typography-weight-medium);letter-spacing:var(--typography-letterspacing-positive)}.input-host.sc-ds-input-h{display:inline-flex;--ds-input-fg:var(--color-foreground-primary);--ds-input-placeholder:var(--color-foreground-secondary);--ds-input-placeholder-active:var(--color-foreground-quaternary);--ds-input-adornment-fg:var(--color-foreground-secondary);--ds-input-border:var(--color-border-secondary)}.ds-control-width--fill.sc-ds-input-h,.ds-control-width--fill.sc-ds-input-h .input-control.sc-ds-input{width:100%}.input-control.sc-ds-input{overflow:hidden;background:transparent;border:none;border-radius:var(--ds-control-radius, var(--dimension-radius-025));color:var(--ds-input-fg)}.input-control--bordered.sc-ds-input{--ds-interaction-border-width:var(--dimension-stroke-width-012);--ds-interaction-border-color:var(--ds-input-border)}.input-control--error.sc-ds-input{--ds-interaction-border-width:var(--dimension-stroke-width-018);--ds-interaction-border-color:var(--color-border-bold-negative)}.input-control--bordered.sc-ds-input:focus-within:not(.input-control--error){--ds-interaction-border-width:var(--dimension-stroke-width-018);--ds-interaction-border-color:var(--color-border-bold-brand)}.ds-control-inactive.sc-ds-input-h .input-control.sc-ds-input::after{background:transparent}.native-input.sc-ds-input{position:relative;z-index:2;flex:1 1 auto;min-width:0;height:100%;background:transparent;border:none;border-radius:inherit;outline:none;color:var(--ds-input-fg);font-family:inherit;text-overflow:ellipsis;-webkit-appearance:none;appearance:none}.native-input--align-start.sc-ds-input{text-align:start}.native-input--align-end.sc-ds-input{text-align:end}.native-input[type='number'].sc-ds-input{-moz-appearance:textfield}.native-input[type='number'].sc-ds-input::-webkit-inner-spin-button,.native-input[type='number'].sc-ds-input::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.input-control--stepper.input-control--align-start.sc-ds-input{padding-inline-end:var(--dimension-space-025)}.input-control--stepper.input-control--align-end.sc-ds-input{padding-inline-start:var(--dimension-space-025)}.input-control__number-stepper.sc-ds-input{position:relative;z-index:2;display:inline-flex;align-items:center;flex-shrink:0;gap:var(--dimension-space-025)}.ds-control-inactive.sc-ds-input-h .input-control__number-step.sc-ds-input{--effect-opacity-medium:1}.native-input.sc-ds-input:disabled{cursor:not-allowed}.native-input.sc-ds-input:read-only:not(:disabled){cursor:default}.native-input.sc-ds-input::placeholder{color:var(--ds-input-placeholder)}.native-input.sc-ds-input:focus::placeholder{color:var(--ds-input-placeholder-active)}.native-input[type='search'].sc-ds-input::-webkit-search-cancel-button,.native-input[type='search'].sc-ds-input::-webkit-search-decoration{display:none}.input-control__prefix.sc-ds-input,.input-control__prefix-text.sc-ds-input,.input-control__suffix.sc-ds-input{position:relative;z-index:2;color:var(--ds-input-adornment-fg)}.input-control__prefix-text.sc-ds-input,.input-control__suffix.sc-ds-input{display:inline-flex;align-items:center;flex-shrink:0;white-space:nowrap}.input-control__prefix-text--control.sc-ds-input,.input-control__suffix--control.sc-ds-input{align-self:stretch;min-width:0;white-space:normal;gap:var(--dimension-space-025)}.input-control__prefix-text--empty.sc-ds-input,.input-control__suffix--empty.sc-ds-input{display:none}.input-control--prefix-control.sc-ds-input{padding-inline-start:var(--dimension-space-025)}.input-control--suffix-control.sc-ds-input{padding-inline-end:var(--dimension-space-025)}.input-control__adornment-divider.sc-ds-input{position:relative;z-index:2;pointer-events:none}.input-control__prefix-text--control.sc-ds-input .input-control__adornment-divider.sc-ds-input{margin-inline-end:calc(var(--ds-control-padding-inline) - var(--ds-control-gap))}.input-control__suffix--control.sc-ds-input .input-control__adornment-divider.sc-ds-input{margin-inline-start:calc(var(--ds-control-padding-inline) - var(--ds-control-gap))}.input-control.sc-ds-input>.input-control__clear.sc-ds-input{position:relative;z-index:2;flex-shrink:0;align-self:center}.input-control.ds-control--lg.sc-ds-input:has(.input-control__clear),.input-control.ds-control--md.sc-ds-input:has(.input-control__clear),.input-control.ds-control--sm.sc-ds-input:has(.input-control__clear){padding-right:var(--dimension-space-050)}.input-control.ds-control--xs.sc-ds-input:has(.input-control__clear){padding-right:0}.input-control.sc-ds-input>.input-control__trailing-action.sc-ds-input{position:relative;z-index:2;flex-shrink:0;align-self:center}.ds-control-inactive.sc-ds-input-h .input-control.sc-ds-input>.input-control__trailing-action.sc-ds-input{--effect-opacity-medium:1}.input-control.sc-ds-input:has(.input-control__trailing-action){padding-inline-end:var(--dimension-space-025)}.error-text.sc-ds-input{width:100%}@media (forced-colors: active){.input-control--bordered.sc-ds-input:focus-within:not(.input-control--error)::after{outline-color:var(--ds-forced-color-selected)}.input-control--error.sc-ds-input::after{outline-style:dashed}}.input-control--tokenized.sc-ds-input .native-input.sc-ds-input{box-sizing:border-box;padding-block:0}.input-control--has-tokens.sc-ds-input{--ds-input-token-inset:var(--dimension-space-050);height:auto;min-height:var(--ds-control-height);flex-wrap:wrap;padding:var(--ds-input-token-inset);row-gap:var(--dimension-space-050)}.input-control--has-tokens.ds-control--lg.sc-ds-input{--ds-input-token-inset:var(--dimension-space-100)}.input-control--has-tokens.ds-control--xs.sc-ds-input{--ds-input-token-inset:var(--dimension-space-025)}.input-control--has-tokens.sc-ds-input .native-input.sc-ds-input{flex:1 1 var(--dimension-size-800);width:0;min-width:min(var(--dimension-size-800), 100%);height:calc(var(--ds-control-height) - var(--ds-input-token-inset) * 2)}.input-token.sc-ds-input{position:relative;z-index:2;max-width:100%}.input-suggestions__list.sc-ds-input{overflow:auto;max-height:calc(var(--dimension-size-base) * 20);padding:var(--dimension-space-050)}`;const j="ds-select, ds-button-unfilled, ds-button-filled";function B(t){return t.matches(j)||Boolean(t.querySelector(j))}const E={lg:"lg",md:"md",sm:"sm",xs:"xs"};const R={lg:"md",md:"sm",sm:"xs",xs:"xs"};let q=0;const A=i(class i extends s{constructor(t){super();if(t!==false){this.__registerHost()}this.dsChange=e(this,"dsChange",7);this.dsTokensChange=e(this,"dsTokensChange",7);this.dsSuggestionSelect=e(this,"dsSuggestionSelect",7);this.dsClear=e(this,"dsClear",7);this.internals=this.attachInternals();this.generatedId=`ds-input-${++q}`;this.errorId=`${this.generatedId}-error`;this.value="";this.disabled=false;this.readOnly=false;this.required=false;this.requiredMessage=w;this.clearLabel="Clear";this.showPasswordLabel="Show password";this.hidePasswordLabel="Hide password";this.lengthBehavior="error";this.showCharacterCount=true;this.suggestions=[];this.tokenized=false;this.tokens=[];this.removeTokenLabel="Remove {label}";this.type="text";this.showStepper=true;this.incrementLabel="Increase value";this.decrementLabel="Decrease value";this.textAlign="start";this.inputMode="";this.enterKeyHint="";this.size="md";this.width="fill";this.hasBorder=true;this.hasInteractionFill=true;this.isInactive=false;this.autoFocus=false;this.error=false;this.ariaLabel=null;this.constraintMessage="";this.submitted=false;this.suggestionsOpen=false;this.activeSuggestion=-1;this.suggestionPosition={x:0,y:0};this.suggestionsReady=false;this.initialTokens=[];this.suggestionPlacement=new r({getAnchor:()=>this.controlEl??null,getPopup:()=>this.el.querySelector(".input-suggestions"),getOwnerDocument:()=>this.el.ownerDocument,measure:(t,i)=>{if(!this.suggestionsOpen)return null;const s=k(S.space050,S.space050);return{anchorRect:t.getBoundingClientRect(),popupWidth:i.offsetWidth,popupHeight:i.offsetHeight,side:"bottom",align:"start",sideOffsetPx:s,alignOffsetPx:0,viewportPadPx:s,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,collisionRect:d(t)}},apply:({x:t,y:i})=>{this.suggestionPosition={x:t,y:i}},onReady:()=>{this.suggestionsReady=true},topLayer:true,observeResize:true,liveUpdate:"frame"});this.suggestionInteraction=new c({getAnchor:()=>this.controlEl??null,getPopup:()=>this.el.querySelector(".input-suggestions"),getOwnerDocument:()=>this.el.ownerDocument,onOutsideActivation:()=>this.closeSuggestions()});this.initialValue="";this.formDisabled=false;this.hasPrefix=false;this.hasPrefixControl=false;this.hasSuffix=false;this.hasSuffixControl=false;this.focused=false;this.touched=false;this.passwordRevealed=false;this.restorePasswordFocus=false;this.handleInput=t=>{this.value=t.target.value;this.dsChange.emit(this.value);this.activeSuggestion=-1;this.openSuggestions()};this.handleFocus=()=>{this.focused=true};this.handleBlur=()=>{this.focused=false;this.touched=true;this.closeSuggestions()};this.handleClear=()=>{this.value="";if(this.isTokenized){this.tokens=[];this.dsTokensChange.emit([])}this.closeSuggestions();this.dsChange.emit("");this.dsClear.emit();this.inputEl?.focus()};this.handleTogglePassword=()=>{this.passwordRevealed=!this.passwordRevealed;this.restorePasswordFocus=true};this.handleTextKeyDown=t=>{if(t.isComposing||this.readOnly||this.disabled||this.isInactive||this.formDisabled)return;if((t.key==="ArrowDown"||t.key==="ArrowUp")&&this.filteredSuggestions.length){t.preventDefault();this.openSuggestions();const i=this.filteredSuggestions.length;this.activeSuggestion=this.activeSuggestion<0?t.key==="ArrowDown"?0:i-1:Math.max(0,Math.min(i-1,this.activeSuggestion+(t.key==="ArrowDown"?1:-1)));requestAnimationFrame((()=>this.el.querySelector(`#${this.generatedId}-suggestion-${this.activeSuggestion}`)?.scrollIntoView({block:"nearest"})))}else if(t.key==="Escape"&&this.suggestionsOpen){t.preventDefault();t.stopPropagation();this.closeSuggestions()}else if(t.key==="Enter"&&this.suggestionsOpen&&this.activeSuggestion>=0){t.preventDefault();this.selectSuggestion(this.filteredSuggestions[this.activeSuggestion])}else if(this.isTokenized&&(t.key==="Enter"||t.key===",")&&this.value.trim()){t.preventDefault();this.addTokens(this.value)}else if(this.isTokenized&&t.key==="Backspace"&&!this.value&&this.tokens.length){t.preventDefault();this.removeToken(this.tokens.length-1)}else if(t.key==="Tab")this.closeSuggestions()};this.handlePaste=t=>{if(!this.isTokenized||this.readOnly||this.disabled||this.isInactive||this.formDisabled)return;const i=t.clipboardData?.getData("text")??"";if(!/[,\r\n]/.test(i))return;t.preventDefault();const s=this.inputEl?.selectionStart??this.value.length;const e=this.inputEl?.selectionEnd??s;this.addTokens(this.value.slice(0,s)+i+this.value.slice(e))};this.handleNumericStep=t=>{const i=this.inputEl;if(!i||i.disabled||i.readOnly||this.numericStepDisabled(t))return;const s=i.value;if(t>0)i.stepUp();else i.stepDown();i.focus({preventScroll:true});if(i.value===s)return;this.value=i.value;this.dsChange.emit(this.value)}}get managedByField(){return Boolean(this.el.closest("ds-field"))}get visibleConstraintMessage(){return this.touched||this.submitted||this.maxLength!==undefined&&this.value.length>this.maxLength?this.constraintMessage:""}get hasCounter(){return this.showCharacterCount&&p(this.maxLength)!==undefined&&this.type!=="number"}get supportsTextFeatures(){return this.type==="text"||this.type==="search"}get isTokenized(){return this.tokenized&&this.supportsTextFeatures}get filteredSuggestions(){if(!this.supportsTextFeatures)return[];const t=this.value.trim().toLocaleLowerCase();return[...new Set(this.suggestions)].filter((i=>i.toLocaleLowerCase().includes(t)&&(!this.isTokenized||!this.tokens.includes(i))))}componentWillLoad(){this.value=String(this.value??"");this.tokens=Array.isArray(this.tokens)?this.tokens:[];this.initialValue=this.value;this.initialTokens=[...this.tokens];this.syncAdornmentSlots();this.syncFormValue()}disconnectedCallback(){this.closeSuggestions()}componentDidRender(){this.syncAdornmentSlots();if(this.suggestionsOpen)this.suggestionPlacement.schedule();if(!this.restorePasswordFocus)return;this.restorePasswordFocus=false;this.inputEl?.focus({preventScroll:true})}onTypeChange(){if(this.type!=="password")this.passwordRevealed=false}syncAdornmentSlots(){const t=[...this.el.querySelectorAll('[slot="prefix"]')];const i=[...this.el.querySelectorAll('[slot="suffix"]')];const s=t.length>0;const e=t.some(B);const n=i.length>0;const o=i.some(B);if(s!==this.hasPrefix)this.hasPrefix=s;if(e!==this.hasPrefixControl)this.hasPrefixControl=e;if(n!==this.hasSuffix)this.hasSuffix=n;if(o!==this.hasSuffixControl)this.hasSuffixControl=o}syncFormValue(){if(typeof this.value!=="string"){this.value=String(this.value??"")}if(!Array.isArray(this.tokens))this.tokens=[];const t=this.isInactive||this.disabled||this.formDisabled;if(this.isTokenized)_(this.internals,this.name,this.tokens,{inactive:t});else z(this.internals,this.value,{inactive:t});let i=t||this.readOnly?{flags:{},message:""}:h({...this.textConstraints(),required:this.required&&!this.isTokenized});if(this.isTokenized&&!t&&!this.readOnly){const t=this.tokens.map((t=>h({...this.textConstraints(),value:t,required:false}))).find((t=>t.message));if(t)i=t;else if(this.required&&this.tokens.length===0)i={flags:{valueMissing:true},message:this.requiredMessage};else if(this.value.trim()&&!i.message)i={flags:{customError:true},message:"Press Enter to add this value."}}if(t||this.readOnly)this.closeSuggestions();this.constraintMessage=i.message;this.internals.setValidity(i.flags,i.message)}textConstraints(){return{value:this.value,type:this.type,required:this.required,requiredMessage:this.requiredMessage,minLength:this.minLength,maxLength:this.maxLength,pattern:this.pattern,patternMessage:this.patternMessage,min:this.min,max:this.max,step:this.step}}formDisabledCallback(t){this.formDisabled=t;this.syncFormValue()}formResetCallback(){this.value=this.initialValue;this.tokens=[...this.initialTokens];this.closeSuggestions();this.touched=false;this.submitted=false;this.passwordRevealed=false}formStateRestoreCallback(t){if(this.isTokenized)this.tokens=C(t);else this.value=F(t)}async setFocus(){this.inputEl?.focus()}onSuggestionsChanged(){this.activeSuggestion=-1;if(this.focused&&this.value)this.openSuggestions()}openSuggestions(){if(this.disabled||this.formDisabled||this.isInactive||this.readOnly||!this.filteredSuggestions.length){this.closeSuggestions();return}if(this.suggestionsOpen)return;this.suggestionsReady=false;this.suggestionsOpen=true;this.suggestionInteraction.connect();this.suggestionPlacement.observe();this.suggestionPlacement.schedule()}closeSuggestions(){this.suggestionPlacement.unobserve();this.suggestionInteraction.disconnect();const t=this.el.querySelector(".input-suggestions");if(t?.matches(":popover-open"))t.hidePopover();this.suggestionsOpen=false;this.activeSuggestion=-1}addTokens(t){if(this.readOnly||this.disabled||this.isInactive||this.formDisabled)return;const i=t.split(/[,\n\r]+/).map((t=>{const i=t.trim();const s=p(this.maxLength);return this.lengthBehavior==="restrict"&&s!==undefined?i.slice(0,s):i})).filter(Boolean);if(!i.length)return;this.tokens=[...new Set([...this.tokens,...i])];this.value="";this.dsTokensChange.emit([...this.tokens]);this.dsChange.emit("");this.closeSuggestions()}removeToken(t){if(this.readOnly||this.disabled||this.isInactive||this.formDisabled)return;this.tokens=this.tokens.filter(((i,s)=>t!==s));this.dsTokensChange.emit([...this.tokens]);this.inputEl?.focus()}selectSuggestion(t){if(this.isTokenized)this.addTokens(t);else{const i=p(this.maxLength);this.value=this.lengthBehavior==="restrict"&&i!==undefined?t.slice(0,i):t;this.dsChange.emit(this.value)}this.dsSuggestionSelect.emit(t);this.closeSuggestions();this.inputEl?.focus()}numericStepDisabled(t){if(this.value.trim()==="")return false;const i=Number(this.value);if(!Number.isFinite(i))return false;if(t>0&&this.max!==undefined)return i>=this.max;if(t<0&&this.min!==undefined)return i<=this.min;return false}renderNumericStepper(i){const s=i||this.readOnly||this.numericStepDisabled(1);const e=i||this.readOnly||this.numericStepDisabled(-1);return t("span",{class:"input-control__number-stepper"},t("ds-button-unfilled",{class:"input-control__number-step input-control__number-step--increment",variant:"icon",size:this.size,icon:"Plus",hasBorder:false,isInset:true,isInactive:s,ariaLabel:this.incrementLabel,onDsClick:()=>this.handleNumericStep(1)}),t("ds-divider",{orientation:"vertical",length:"var(--ds-control-icon)"}),t("ds-button-unfilled",{class:"input-control__number-step input-control__number-step--decrement",variant:"icon",size:this.size,icon:"Minus",hasBorder:false,isInset:true,isInactive:e,ariaLabel:this.decrementLabel,onDsClick:()=>this.handleNumericStep(-1)}))}render(){const i=this.inputId??this.generatedId;const s=this.isInactive||this.disabled||this.formDisabled;const e=this.value.length>0||this.isTokenized&&this.tokens.length>0;const o=this.value!==this.initialValue||this.isTokenized&&JSON.stringify(this.tokens)!==JSON.stringify(this.initialTokens);const r=this.type==="search"&&e&&!s&&!this.readOnly;const d=this.type==="password";const a=d&&this.passwordRevealed?"text":this.type;const c=this.error&&this.errorMessage?this.errorMessage:this.visibleConstraintMessage;const l=this.error||Boolean(this.visibleConstraintMessage);const f=Boolean(c)&&!this.managedByField;const g=this.hasCounter&&!this.managedByField;const m=u[this.size];const v=E[this.size];const b=this.type==="number";const x=b&&this.showStepper;const y=this.autoComplete??(this.type==="search"?"off":undefined);const w=this.type==="search"||this.type==="password";const k=[this.ariaDescribedby,f?this.errorId:undefined,g?`${this.generatedId}-count`:undefined].filter(Boolean).join(" ")||undefined;return t(n,{key:"a289da28020a81d39c33e1f738d0538002420c41",class:{"input-host":true,"ds-field-stack":true,"ds-field-stack--supporting-inset":!this.hasBorder,"ds-control-inactive":s,[`ds-control--${this.size}`]:true,...V(this.width)},"data-disabled":s?"":undefined,"data-readonly":this.readOnly?"":undefined,"data-required":this.required?"":undefined,"data-invalid":l?"":undefined,"data-constraint-message":this.visibleConstraintMessage||undefined,"data-character-count":this.hasCounter?String(this.value.length):undefined,"data-character-limit":this.hasCounter?String(p(this.maxLength)):undefined,onInvalid:()=>{this.submitted=true},"data-filled":e?"":undefined,"data-focused":this.focused?"":undefined,"data-dirty":o?"":undefined,"data-touched":this.touched?"":undefined},t("div",{key:"5b3b3a74aa372dce3291fb3478d516ae0ad64e59",ref:t=>{this.controlEl=t},class:{"input-control--tokenized":this.isTokenized,"input-control--has-tokens":this.isTokenized&&this.tokens.length>0,"input-control":true,"input-control--number":b,"input-control--stepper":x,"input-control--align-start":this.textAlign==="start","input-control--align-end":this.textAlign==="end","ds-control-frame":true,"input-control--bordered":this.hasBorder,"input-control--error":this.hasBorder&&l,"input-control--prefix-control":this.hasPrefixControl,"input-control--suffix-control":this.hasSuffixControl,"ds-interaction-fill":this.hasInteractionFill,[`ds-control--${this.size}`]:true}},x&&this.textAlign==="end"&&this.renderNumericStepper(s),this.icon&&t("span",{key:"433514fb636002369781aa9b3e8fdca36e7a08c7",class:"input-control__prefix ds-control-icon-box ds-interaction-fill__content","aria-hidden":"true"},t("ds-icon",{key:"705f7c4f5535f6d05e9980a43ebd46a19e53b403",name:this.icon,size:v,color:"inherit"})),t("span",{key:"a3a8a22165551aae4f4dec43073109ef7d89bfb7",class:{"input-control__prefix-text":true,"ds-control-label-box":!this.hasPrefixControl,"ds-interaction-fill__content":true,"input-control__prefix-text--control":this.hasPrefixControl,"input-control__prefix-text--empty":!this.hasPrefix}},t("slot",{key:"7e96dd1c2059d8a2658fd1739eb4a6cfebcd0770",name:"prefix",onSlotchange:()=>this.syncAdornmentSlots()}),this.hasPrefixControl&&t("ds-divider",{key:"c9a2d2ca92767a34214d364e74be26aa01a5b063",class:"input-control__adornment-divider",orientation:"vertical",length:"var(--ds-control-icon)"})),this.isTokenized&&this.tokens.map(((i,e)=>t("ds-chip",{key:`${e}-${i}`,class:"input-token",label:i,size:this.size==="lg"?"md":this.size,isInset:true,insetDepth:"double",isInactive:s||this.readOnly,removeLabel:this.removeTokenLabel,state:h({...this.textConstraints(),value:i,required:false}).message?"error":"default",onDsRemove:t=>{t.stopPropagation();this.removeToken(e)}}))),t("input",{key:"a6f55db9a54c3a19c59dff3aaa3b04d0e0a1d275",ref:t=>{this.inputEl=t},type:a,id:i,value:this.value,placeholder:this.placeholder,min:b?this.min:undefined,max:b?this.max:undefined,step:b?this.step:undefined,disabled:s,readOnly:this.readOnly,required:this.required&&!this.isTokenized,minLength:p(this.minLength),maxLength:this.lengthBehavior==="restrict"?p(this.maxLength):undefined,pattern:this.pattern,autoFocus:this.autoFocus,autoComplete:y,autoCapitalize:w?"none":undefined,autoCorrect:w?"off":undefined,spellcheck:w?false:undefined,inputMode:this.inputMode||undefined,enterKeyHint:this.enterKeyHint||undefined,class:`native-input native-input--align-${this.textAlign} ds-control-label-box ds-text--${m.replace("text-","")} ds-text--regular ds-interaction-fill__content`,"aria-label":this.ariaLabel,"aria-labelledby":this.ariaLabelledby,"aria-describedby":k,role:this.suggestions.length&&this.supportsTextFeatures?"combobox":undefined,"aria-autocomplete":this.suggestions.length&&this.supportsTextFeatures?"list":undefined,"aria-expanded":this.suggestions.length&&this.supportsTextFeatures?String(this.suggestionsOpen):undefined,"aria-controls":this.suggestionsOpen?`${this.generatedId}-suggestions`:this.ariaControls,"aria-activedescendant":this.suggestionsOpen&&this.activeSuggestion>=0?`${this.generatedId}-suggestion-${this.activeSuggestion}`:this.ariaActiveDescendant,"aria-invalid":l?"true":undefined,onInput:this.handleInput,onKeyDown:this.handleTextKeyDown,onPaste:this.handlePaste,onFocus:this.handleFocus,onBlur:this.handleBlur}),t("span",{key:"281adb0ecb3e3cb712a6fdbe675ff44e8b447f7c",class:{"input-control__suffix":true,"ds-control-label-box":!this.hasSuffixControl,"input-control__suffix--control":this.hasSuffixControl,"input-control__suffix--empty":!this.hasSuffix}},this.hasSuffixControl&&t("ds-divider",{key:"d90c77f06d2faee9b1d66a71a005d2f4c723eb99",class:"input-control__adornment-divider",orientation:"vertical",length:"var(--ds-control-icon)"}),t("slot",{key:"3087131096f8f35aa62b1398c9d52abfce213646",name:"suffix",onSlotchange:()=>this.syncAdornmentSlots()})),r&&t("ds-button-unfilled",{key:"128bb0ab00de4089a8935eeacbbc692d8d6b0b90",class:"input-control__clear",variant:"icon",size:R[this.size],icon:"CrossCircle",hasBorder:false,rounded:true,ariaLabel:this.clearLabel,onDsClick:this.handleClear}),d&&t("ds-button-unfilled",{key:"54f7903ba10ec02f6834e8ff921a19103d5ef161",class:"input-control__trailing-action",variant:"icon",size:this.size,icon:this.passwordRevealed?"EyeStrikethrough":"Eye",hasBorder:false,isInset:true,isInactive:s,ariaLabel:this.passwordRevealed?this.hidePasswordLabel:this.showPasswordLabel,onDsClick:this.handleTogglePassword}),x&&this.textAlign==="start"&&this.renderNumericStepper(s)),this.suggestionsOpen&&t("div",{key:"2faefcf2ae6aaafd491a44b143a0a6edc15bcfde",popover:"manual",class:"input-suggestions ds-choice-popup",style:{position:"fixed",left:`${this.suggestionPosition.x}px`,top:`${this.suggestionPosition.y}px`,width:`${this.controlEl?.getBoundingClientRect().width??0}px`,visibility:this.suggestionsReady?"visible":"hidden"},onMouseDown:t=>t.preventDefault()},t("div",{key:"4ae8d642d471cd6a9a6e31ba3516e80cffbcceaf",class:"input-suggestions__list ds-choice-list",id:`${this.generatedId}-suggestions`,role:"listbox","aria-label":"Suggestions"},this.filteredSuggestions.map(((i,s)=>t(M,{size:this.size,id:`${this.generatedId}-suggestion-${s}`,option:{label:i,value:i},selected:false,active:s===this.activeSuggestion,focusRingVisible:false,usesSubtext:false,tabIndex:-1,onHover:()=>{this.activeSuggestion=s},onSelect:()=>this.selectSuggestion(i)}))))),(f||g)&&t("div",{key:"d2e3600cde0a68d033f0a25218cf00e8dcbf577e",class:"text-field-support"},f&&t("ds-text",{key:"63b41f7a96f4ff5f43dbd8423cb2700c2d452949",class:"error-text",as:"div",variant:"text-body-small",color:"negative",textId:this.errorId,role:"alert"},c),g&&t("ds-text",{key:"25553f42c16d5f1292a78d7314dc4b37b15fce1b",as:"span",class:"text-field-count",variant:"text-body-small",color:l?"negative":"secondary",textId:`${this.generatedId}-count`},this.value.length,"/",p(this.maxLength))))}static get formAssociated(){return true}get el(){return this}static get watchers(){return{type:[{onTypeChange:0},{syncFormValue:0}],tokens:[{syncFormValue:0}],tokenized:[{syncFormValue:0}],name:[{syncFormValue:0}],value:[{syncFormValue:0}],disabled:[{syncFormValue:0}],isInactive:[{syncFormValue:0}],required:[{syncFormValue:0}],readOnly:[{syncFormValue:0}],minLength:[{syncFormValue:0}],maxLength:[{syncFormValue:0}],requiredMessage:[{syncFormValue:0}],pattern:[{syncFormValue:0}],patternMessage:[{syncFormValue:0}],min:[{syncFormValue:0}],max:[{syncFormValue:0}],step:[{syncFormValue:0}],suggestions:[{onSuggestionsChanged:0}]}}static get style(){return $()}},[326,"ds-input",{value:[1025],name:[513],form:[513],disabled:[516],readOnly:[516,"read-only"],required:[516],requiredMessage:[1,"required-message"],clearLabel:[1,"clear-label"],showPasswordLabel:[1,"show-password-label"],hidePasswordLabel:[1,"hide-password-label"],minLength:[2,"min-length"],maxLength:[2,"max-length"],lengthBehavior:[1,"length-behavior"],showCharacterCount:[4,"show-character-count"],pattern:[1],patternMessage:[1,"pattern-message"],suggestions:[16],tokenized:[516],tokens:[1040],removeTokenLabel:[1,"remove-token-label"],placeholder:[1],type:[1],min:[2],max:[2],step:[2],showStepper:[4,"show-stepper"],incrementLabel:[1,"increment-label"],decrementLabel:[1,"decrement-label"],textAlign:[1,"text-align"],autoComplete:[1,"autocomplete"],inputMode:[1,"inputmode"],enterKeyHint:[1,"enterkeyhint"],size:[1],width:[1],hasBorder:[4,"has-border"],hasInteractionFill:[4,"has-interaction-fill"],icon:[1],isInactive:[4,"is-inactive"],autoFocus:[4,"auto-focus"],error:[4],errorMessage:[1,"error-message"],inputId:[1,"input-id"],ariaLabel:[1,"aria-label"],ariaLabelledby:[1,"aria-labelledby"],ariaDescribedby:[1,"aria-describedby"],ariaControls:[1,"aria-controls"],ariaActiveDescendant:[1,"aria-activedescendant"],constraintMessage:[32],submitted:[32],suggestionsOpen:[32],activeSuggestion:[32],suggestionPosition:[32],suggestionsReady:[32],formDisabled:[32],hasPrefix:[32],hasPrefixControl:[32],hasSuffix:[32],hasSuffixControl:[32],focused:[32],touched:[32],passwordRevealed:[32],setFocus:[64]},undefined,{type:[{onTypeChange:0},{syncFormValue:0}],tokens:[{syncFormValue:0}],tokenized:[{syncFormValue:0}],name:[{syncFormValue:0}],value:[{syncFormValue:0}],disabled:[{syncFormValue:0}],isInactive:[{syncFormValue:0}],required:[{syncFormValue:0}],readOnly:[{syncFormValue:0}],minLength:[{syncFormValue:0}],maxLength:[{syncFormValue:0}],requiredMessage:[{syncFormValue:0}],pattern:[{syncFormValue:0}],patternMessage:[{syncFormValue:0}],min:[{syncFormValue:0}],max:[{syncFormValue:0}],step:[{syncFormValue:0}],suggestions:[{onSuggestionsChanged:0}]}]);function O(){if(typeof customElements==="undefined"){return}const t=["ds-input","ds-badge","ds-button-unfilled","ds-chip","ds-divider","ds-icon","ds-input","ds-loader","ds-text","ds-tooltip"];t.forEach((t=>{switch(t){case"ds-input":if(!customElements.get(o(t))){customElements.define(o(t),A)}break;case"ds-badge":if(!customElements.get(o(t))){f()}break;case"ds-button-unfilled":if(!customElements.get(o(t))){g()}break;case"ds-chip":if(!customElements.get(o(t))){m()}break;case"ds-divider":if(!customElements.get(o(t))){v()}break;case"ds-icon":if(!customElements.get(o(t))){b()}break;case"ds-input":if(!customElements.get(o(t))){O()}break;case"ds-loader":if(!customElements.get(o(t))){x()}break;case"ds-text":if(!customElements.get(o(t))){y()}break;case"ds-tooltip":if(!customElements.get(o(t))){a()}break}}))}O();export{M as C,A as I,L as a,D as b,I as c,O as d,T as e};
2
+ //# sourceMappingURL=p-DYGllrVT.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ChoiceListSection","size","heading","ariaLabel","className","children","h","class","trim","role","as","variant","CONTROL_SUPPORTING_TEXT_VARIANT","color","emphasis","ChoiceSearch","hasFocusBoundary","hasInteractionFill","value","placeholder","controls","activeDescendant","disabled","inputRef","clearLabel","onValueChange","onClear","onKeyDown","ref","element","type","width","icon","isInactive","hasBorder","ariaControls","ariaActiveDescendant","onDsChange","event","stopPropagation","detail","onDsClear","ChoiceFooter","summary","compactSummary","useCompactSummary","contentRef","summaryMeasureRef","clearRef","key","CONTROL_TEXT_VARIANT","onClick","ChoiceActionFooter","label","onAction","ChoiceOptionRow","id","option","selected","active","focusRingVisible","usesSubtext","leading","supporting","action","actionOpen","popupRole","tabIndex","onFocus","onHover","onSelect","grid","undefined","String","onMouseDown","preventDefault","onMouseMove","subtext","inputCss","CONTROL_ADORNMENT","isControlAdornment","matches","Boolean","querySelector","ICON_SIZE","lg","md","sm","xs","CLEAR_BUTTON_SIZE","idCounter","Input","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","generatedId","errorId","readOnly","required","requiredMessage","DEFAULT_REQUIRED_MESSAGE","showPasswordLabel","hidePasswordLabel","lengthBehavior","showCharacterCount","suggestions","tokenized","tokens","removeTokenLabel","showStepper","incrementLabel","decrementLabel","textAlign","inputMode","enterKeyHint","autoFocus","error","constraintMessage","submitted","suggestionsOpen","activeSuggestion","suggestionPosition","x","y","suggestionsReady","initialTokens","suggestionPlacement","AnchoredPositionController","getAnchor","controlEl","getPopup","el","getOwnerDocument","ownerDocument","measure","anchor","popup","gap","resolveCssLengthPx","TOKEN_DEFAULTS","space050","anchorRect","getBoundingClientRect","popupWidth","offsetWidth","popupHeight","offsetHeight","side","align","sideOffsetPx","alignOffsetPx","viewportPadPx","viewportWidth","window","innerWidth","viewportHeight","innerHeight","collisionRect","resolveAnchoredOverlayBoundaryRect","apply","onReady","topLayer","observeResize","liveUpdate","suggestionInteraction","AnchoredOverlayInteractionController","onOutsideActivation","closeSuggestions","initialValue","formDisabled","hasPrefix","hasPrefixControl","hasSuffix","hasSuffixControl","focused","touched","passwordRevealed","restorePasswordFocus","handleInput","e","target","dsChange","emit","openSuggestions","handleFocus","handleBlur","handleClear","isTokenized","dsTokensChange","dsClear","inputEl","focus","handleTogglePassword","handleTextKeyDown","isComposing","filteredSuggestions","length","Math","max","min","requestAnimationFrame","scrollIntoView","block","selectSuggestion","addTokens","removeToken","handlePaste","pasted","clipboardData","getData","test","start","selectionStart","end","selectionEnd","slice","handleNumericStep","direction","input","numericStepDisabled","previous","stepUp","stepDown","preventScroll","managedByField","closest","visibleConstraintMessage","maxLength","hasCounter","lengthLimit","supportsTextFeatures","query","toLocaleLowerCase","Set","filter","includes","componentWillLoad","Array","isArray","syncAdornmentSlots","syncFormValue","disconnectedCallback","componentDidRender","schedule","onTypeChange","prefixNodes","querySelectorAll","suffixNodes","some","inactive","setRepeatedFormControlValue","internals","name","setFormControlValue","validity","flags","message","textConstraintValidity","textConstraints","invalidToken","map","find","result","valueMissing","customError","setValidity","minLength","pattern","patternMessage","step","formDisabledCallback","formResetCallback","formStateRestoreCallback","state","restoreStringArrayFormState","restoreStringFormState","setFocus","onSuggestionsChanged","connect","observe","unobserve","disconnect","hidePopover","text","values","split","trimmed","index","_","tokenIndex","dsSuggestionSelect","Number","isFinite","renderNumericStepper","incrementDisabled","decrementDisabled","isInset","onDsClick","orientation","render","inputId","filled","dirty","JSON","stringify","showClear","showPasswordToggle","nativeType","errorMessage","invalid","showError","showCounter","textVariant","iconSize","numeric","showNumericStepper","resolvedAutoComplete","autoComplete","suppressBrowserChrome","describedBy","ariaDescribedby","join","Host","controlWidthClass","onInvalid","onSlotchange","token","insetDepth","removeLabel","onDsRemove","autoCapitalize","autoCorrect","spellcheck","replace","ariaLabelledby","onInput","onPaste","onBlur","rounded","popover","style","position","left","top","visibility","textId"],"sources":["src/wc/utils/choice-list-parts.tsx","src/wc/components/Input/Input.css?tag=ds-input&encapsulation=scoped","src/wc/components/Input/Input.tsx"],"sourcesContent":["import { FunctionalComponent, h, VNode } from '@stencil/core';\nimport type { ChoiceOption } from './choice-list';\nimport {\n CONTROL_SUPPORTING_TEXT_VARIANT,\n CONTROL_TEXT_VARIANT,\n type ControlSize,\n} from './control-text';\n\ninterface ChoiceListSectionProps {\n size?: ControlSize;\n heading?: string;\n ariaLabel: string;\n className?: string;\n}\n\n/** Shared listbox anatomy used when an owning surface composes choice lists directly. */\nexport const ChoiceListSection: FunctionalComponent<ChoiceListSectionProps> = (\n { size = 'md', heading, ariaLabel, className },\n children\n) => (\n <div\n class={`ds-choice-list ds-chrome-column ds-chrome-space--sm ${className ?? ''}`.trim()}\n role=\"listbox\"\n aria-label={ariaLabel}\n >\n {heading ? (\n <ds-text\n class={`ds-choice-section__header ds-control-section-heading ds-control--${size}`}\n as=\"div\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT[size]}\n color=\"primary\"\n emphasis\n aria-hidden=\"true\"\n >\n {heading}\n </ds-text>\n ) : null}\n {children}\n </div>\n);\n\ninterface ChoiceSearchProps {\n size?: ControlSize;\n hasFocusBoundary?: boolean;\n hasInteractionFill?: boolean;\n value: string;\n placeholder: string;\n ariaLabel?: string;\n controls?: string;\n activeDescendant?: string;\n disabled?: boolean;\n inputRef: (element: HTMLDsInputElement | null) => void;\n clearLabel: string;\n onValueChange: (value: string) => void;\n onClear?: () => void;\n onKeyDown: (event: KeyboardEvent) => void;\n}\n\nexport const ChoiceSearch: FunctionalComponent<ChoiceSearchProps> = ({\n size = 'md',\n hasFocusBoundary = true,\n hasInteractionFill = true,\n value,\n placeholder,\n ariaLabel,\n controls,\n activeDescendant,\n disabled = false,\n inputRef,\n clearLabel,\n onValueChange,\n onClear,\n onKeyDown,\n}) => {\n return (\n <div\n class={{\n 'select-search': true,\n 'select-search--without-focus-boundary': !hasFocusBoundary,\n }}\n >\n <ds-input\n class=\"select-search__control\"\n ref={element => inputRef((element as HTMLDsInputElement) ?? null)}\n type=\"search\"\n size={size}\n width=\"fill\"\n value={value}\n placeholder={placeholder}\n icon=\"MagnifyingGlass\"\n clearLabel={clearLabel}\n isInactive={disabled}\n hasBorder={false}\n hasInteractionFill={hasInteractionFill}\n ariaLabel={ariaLabel ?? placeholder}\n ariaControls={controls}\n ariaActiveDescendant={activeDescendant}\n onKeyDown={onKeyDown}\n onDsChange={(event: CustomEvent<string>) => {\n event.stopPropagation();\n onValueChange(event.detail);\n }}\n onDsClear={(event: CustomEvent<void>) => {\n event.stopPropagation();\n onClear?.();\n }}\n />\n </div>\n );\n};\n\ninterface ChoiceFooterProps {\n size?: ControlSize;\n clearLabel: string;\n summary?: string;\n compactSummary?: string;\n useCompactSummary?: boolean;\n contentRef?: (element: HTMLDivElement | null) => void;\n summaryMeasureRef?: (element: HTMLElement | null) => void;\n clearRef?: (element: HTMLButtonElement | null) => void;\n onClear: (event: MouseEvent) => void;\n}\n\nexport const ChoiceFooter: FunctionalComponent<ChoiceFooterProps> = ({\n size = 'md',\n clearLabel,\n summary,\n compactSummary,\n useCompactSummary = false,\n contentRef,\n summaryMeasureRef,\n clearRef,\n onClear,\n}) => (\n <div class=\"ds-choice-footer\">\n <div\n ref={element => contentRef?.((element as HTMLDivElement) ?? null)}\n class={`ds-choice-footer__content ds-control--${size}`}\n >\n {summary && [\n <ds-text\n key=\"summary\"\n class=\"ds-choice-footer__summary\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT[size]}\n color=\"secondary\"\n >\n {useCompactSummary ? (compactSummary ?? summary) : summary}\n </ds-text>,\n <ds-text\n key=\"summary-measure\"\n ref={element => summaryMeasureRef?.((element as HTMLElement) ?? null)}\n class=\"ds-choice-footer__summary-measure\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT[size]}\n color=\"secondary\"\n aria-hidden=\"true\"\n >\n {summary}\n </ds-text>,\n ]}\n <button\n ref={element => clearRef?.((element as HTMLButtonElement) ?? null)}\n type=\"button\"\n class=\"ds-choice-footer__clear ds-text-action ds-focus-ring\"\n onClick={onClear}\n >\n <ds-text as=\"span\" variant={CONTROL_TEXT_VARIANT[size]} color=\"inherit\">\n {clearLabel}\n </ds-text>\n </button>\n </div>\n </div>\n);\n\ninterface ChoiceActionFooterProps {\n size?: ControlSize;\n label: string;\n onAction: (event: MouseEvent) => void;\n}\n\nexport const ChoiceActionFooter: FunctionalComponent<ChoiceActionFooterProps> = ({\n size = 'md',\n label,\n onAction,\n}) => (\n <div class=\"ds-choice-footer\">\n <div class={`ds-choice-footer__content ds-control--${size}`}>\n <button\n type=\"button\"\n class=\"ds-choice-footer__action ds-text-action ds-focus-ring\"\n onClick={onAction}\n >\n <ds-text as=\"span\" variant={CONTROL_TEXT_VARIANT[size]} color=\"inherit\">\n {label}\n </ds-text>\n </button>\n </div>\n </div>\n);\n\ninterface ChoiceOptionRowProps {\n size?: ControlSize;\n id: string;\n option: ChoiceOption;\n selected: boolean;\n active: boolean;\n focusRingVisible: boolean;\n usesSubtext: boolean;\n leading?: VNode;\n supporting?: VNode;\n action?: VNode;\n actionOpen?: boolean;\n popupRole?: 'listbox' | 'grid';\n tabIndex?: number;\n onFocus?: () => void;\n onKeyDown?: (event: KeyboardEvent) => void;\n onHover: () => void;\n onSelect: () => void;\n}\n\nexport const ChoiceOptionRow: FunctionalComponent<ChoiceOptionRowProps> = ({\n size = 'md',\n id,\n option,\n selected,\n active,\n focusRingVisible,\n usesSubtext,\n leading,\n supporting,\n action,\n actionOpen = false,\n popupRole = 'listbox',\n tabIndex,\n onFocus,\n onKeyDown,\n onHover,\n onSelect,\n}) => {\n const grid = popupRole === 'grid';\n return (\n <div\n id={grid ? id : undefined}\n role={grid ? 'row' : undefined}\n aria-selected={grid ? String(selected) : undefined}\n aria-disabled={grid && option.isInactive ? 'true' : undefined}\n class={{\n 'select-option-row': true,\n 'select-option-row--has-action': !!action,\n 'select-option-row--action-open': actionOpen,\n 'select-option-row--keyboard-active': !!action && active && focusRingVisible,\n }}\n >\n <div\n id={grid ? undefined : id}\n class={{\n 'select-option': true,\n 'ds-choice-item': true,\n 'ds-control-frame': true,\n [`ds-control--${size}`]: true,\n 'ds-focus-ring-inset': true,\n 'ds-focus-ring--visible': active && focusRingVisible,\n 'ds-interaction-fill': !option.isInactive,\n 'ds-interaction-fill--selected': selected && !option.isInactive,\n 'ds-control-inactive': !!option.isInactive,\n 'select-option--active': active,\n }}\n role={grid ? 'gridcell' : 'option'}\n tabIndex={tabIndex}\n aria-selected={grid ? undefined : String(selected)}\n aria-disabled={!grid && option.isInactive ? 'true' : undefined}\n onMouseDown={event => event.preventDefault()}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n onMouseMove={() => {\n if (!option.isInactive) onHover();\n }}\n onClick={onSelect}\n >\n {leading}\n <div class=\"ds-choice-item__content ds-interaction-fill__content\">\n <ds-text\n class=\"ds-choice-item__label ds-control-label-box\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT[size]}\n color={selected ? 'primary' : 'secondary'}\n >\n {option.label}\n </ds-text>\n {supporting ??\n (usesSubtext ? (\n <ds-text\n class=\"ds-choice-item__subtext ds-control-label-box\"\n as=\"span\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT[size]}\n color=\"secondary\"\n >\n {option.subtext?.trim() || '—'}\n </ds-text>\n ) : null)}\n </div>\n </div>\n {action && (\n <div\n class=\"select-option-row__action ds-control-elevation ds-control-elevation--md ds-control-elevation--press-scale\"\n role={grid ? 'gridcell' : undefined}\n >\n {action}\n </div>\n )}\n </div>\n );\n};\n","@import '../../utils/radius.css';\n@import '../../utils/choice-list.css';\n@import '../../utils/control-parts.css';\n@import '../../utils/text-field-support.css';\n@import '../../utils/control-width.css';\n@import '../../utils/field-stack.css';\n@import '../../utils/typography.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}\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/* Native arrows stay hidden whether optional inset actions are shown or not. */\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--stepper.input-control--align-start {\n padding-inline-end: var(--dimension-space-025);\n}\n\n.input-control--stepper.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: inline-flex;\n align-items: center;\n flex-shrink: 0;\n gap: var(--dimension-space-025);\n}\n\n:host(.ds-control-inactive) .input-control__number-step {\n --effect-opacity-medium: 1;\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--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\n.input-control--tokenized .native-input {\n box-sizing: border-box;\n padding-block: 0;\n}\n\n.input-control--has-tokens {\n --ds-input-token-inset: var(--dimension-space-050);\n\n height: auto;\n min-height: var(--ds-control-height);\n flex-wrap: wrap;\n padding: var(--ds-input-token-inset);\n row-gap: var(--dimension-space-050);\n}\n\n/* Chip stops at md; xs retains the shared single-inset fallback. */\n.input-control--has-tokens.ds-control--lg {\n --ds-input-token-inset: var(--dimension-space-100);\n}\n.input-control--has-tokens.ds-control--xs {\n --ds-input-token-inset: var(--dimension-space-025);\n}\n\n.input-control--has-tokens .native-input {\n flex: 1 1 var(--dimension-size-800);\n width: 0;\n min-width: min(var(--dimension-size-800), 100%);\n height: calc(var(--ds-control-height) - var(--ds-input-token-inset) * 2);\n}\n.input-token {\n position: relative;\n z-index: 2;\n max-width: 100%;\n}\n.input-suggestions__list {\n overflow: auto;\n max-height: calc(var(--dimension-size-base) * 20);\n padding: var(--dimension-space-050);\n}\n","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 restoreStringArrayFormState,\n setRepeatedFormControlValue,\n resolveCssLengthPx,\n TOKEN_DEFAULTS,\n setFormControlValue,\n type ControlWidth,\n} from '../../utils';\n\nimport { AnchoredPositionController } from '../../utils/anchored-position-controller';\nimport { AnchoredOverlayInteractionController } from '../../utils/anchored-overlay-interaction-controller';\nimport { resolveAnchoredOverlayBoundaryRect } from '../../utils/anchored-overlay-boundary';\nimport { ChoiceOptionRow } from '../../utils/choice-list-parts';\nimport { lengthLimit, textConstraintValidity } from '../../utils/text-constraints';\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 /** Minimum non-empty text length, in native UTF-16 code units. */\n @Prop() minLength: number | undefined;\n /** Maximum text length. A visible counter accompanies this constraint by default. */\n @Prop() maxLength: number | undefined;\n /** Error preserves extra text; restrict uses the browser's hard input limit. */\n @Prop() lengthBehavior: 'error' | 'restrict' = 'error';\n @Prop() showCharacterCount: boolean = true;\n /** Native whole-value regular expression for text-like input types. */\n @Prop() pattern: string | undefined;\n @Prop() patternMessage: string | undefined;\n /** Optional local suggestions; free text always remains valid. Used with text/search fields. */\n @Prop() suggestions: string[] = [];\n /** Free-text tokens entered with Enter/comma and removable chips. Used with text/search fields. */\n @Prop({ reflect: true }) tokenized: boolean = false;\n /** Committed values; value remains the editable draft when tokenized. */\n @Prop({ mutable: true }) tokens: string[] = [];\n @Prop() removeTokenLabel: string = 'Remove {label}';\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 /** Show inset increment/decrement actions for number fields. Native numeric editing remains available when hidden. */\n @Prop() showStepper: boolean = true;\n @Prop() incrementLabel: string = 'Increase value';\n @Prop() decrementLabel: string = 'Decrease value';\n /** Align the editable value; number steppers sit on the opposite 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() dsTokensChange!: EventEmitter<string[]>;\n @Event() dsSuggestionSelect!: EventEmitter<string>;\n @Event() dsClear!: EventEmitter<void>;\n\n @State() private constraintMessage = '';\n @State() private submitted = false;\n private get managedByField(): boolean {\n return Boolean(this.el.closest('ds-field'));\n }\n private get visibleConstraintMessage(): string {\n return this.touched ||\n this.submitted ||\n (this.maxLength !== undefined && this.value.length > this.maxLength)\n ? this.constraintMessage\n : '';\n }\n private get hasCounter(): boolean {\n return (\n this.showCharacterCount && lengthLimit(this.maxLength) !== undefined && this.type !== 'number'\n );\n }\n\n @State() private suggestionsOpen = false;\n @State() private activeSuggestion = -1;\n @State() private suggestionPosition = { x: 0, y: 0 };\n @State() private suggestionsReady = false;\n private controlEl?: HTMLElement;\n private initialTokens: string[] = [];\n private get supportsTextFeatures(): boolean {\n return this.type === 'text' || this.type === 'search';\n }\n private get isTokenized(): boolean {\n return this.tokenized && this.supportsTextFeatures;\n }\n private get filteredSuggestions(): string[] {\n if (!this.supportsTextFeatures) return [];\n const query = this.value.trim().toLocaleLowerCase();\n return [...new Set(this.suggestions)].filter(\n value =>\n value.toLocaleLowerCase().includes(query) &&\n (!this.isTokenized || !this.tokens.includes(value))\n );\n }\n private readonly suggestionPlacement = new AnchoredPositionController({\n getAnchor: () => this.controlEl ?? null,\n getPopup: () => this.el.querySelector<HTMLElement>('.input-suggestions'),\n getOwnerDocument: () => this.el.ownerDocument,\n measure: (anchor, popup) => {\n if (!this.suggestionsOpen) return null;\n const gap = resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n return {\n anchorRect: anchor.getBoundingClientRect(),\n popupWidth: popup.offsetWidth,\n popupHeight: popup.offsetHeight,\n side: 'bottom',\n align: 'start',\n sideOffsetPx: gap,\n alignOffsetPx: 0,\n viewportPadPx: gap,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n collisionRect: resolveAnchoredOverlayBoundaryRect(anchor),\n };\n },\n apply: ({ x, y }) => {\n this.suggestionPosition = { x, y };\n },\n onReady: () => {\n this.suggestionsReady = true;\n },\n topLayer: true,\n observeResize: true,\n liveUpdate: 'frame',\n });\n private readonly suggestionInteraction = new AnchoredOverlayInteractionController({\n getAnchor: () => this.controlEl ?? null,\n getPopup: () => this.el.querySelector<HTMLElement>('.input-suggestions'),\n getOwnerDocument: () => this.el.ownerDocument,\n onOutsideActivation: () => this.closeSuggestions(),\n });\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.value = String(this.value ?? '');\n this.tokens = Array.isArray(this.tokens) ? this.tokens : [];\n this.initialValue = this.value;\n this.initialTokens = [...this.tokens];\n this.syncAdornmentSlots();\n this.syncFormValue();\n }\n\n disconnectedCallback() {\n this.closeSuggestions();\n }\n\n componentDidRender() {\n this.syncAdornmentSlots();\n if (this.suggestionsOpen) this.suggestionPlacement.schedule();\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('tokens')\n @Watch('tokenized')\n @Watch('name')\n @Watch('value')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('required')\n @Watch('readOnly')\n @Watch('minLength')\n @Watch('maxLength')\n @Watch('requiredMessage')\n @Watch('pattern')\n @Watch('patternMessage')\n @Watch('type')\n @Watch('min')\n @Watch('max')\n @Watch('step')\n syncFormValue() {\n if (typeof this.value !== 'string') {\n this.value = String(this.value ?? '');\n }\n if (!Array.isArray(this.tokens)) this.tokens = [];\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n if (this.isTokenized)\n setRepeatedFormControlValue(this.internals, this.name, this.tokens, { inactive });\n else setFormControlValue(this.internals, this.value, { inactive });\n let validity =\n inactive || this.readOnly\n ? { flags: {}, message: '' }\n : textConstraintValidity({\n ...this.textConstraints(),\n required: this.required && !this.isTokenized,\n });\n if (this.isTokenized && !inactive && !this.readOnly) {\n const invalidToken = this.tokens\n .map(value => textConstraintValidity({ ...this.textConstraints(), value, required: false }))\n .find(result => result.message);\n if (invalidToken) validity = invalidToken;\n else if (this.required && this.tokens.length === 0)\n validity = { flags: { valueMissing: true }, message: this.requiredMessage };\n else if (this.value.trim() && !validity.message)\n validity = { flags: { customError: true }, message: 'Press Enter to add this value.' };\n }\n if (inactive || this.readOnly) this.closeSuggestions();\n this.constraintMessage = validity.message;\n this.internals.setValidity(validity.flags, validity.message);\n }\n\n private textConstraints() {\n return {\n value: this.value,\n type: this.type,\n required: this.required,\n requiredMessage: this.requiredMessage,\n minLength: this.minLength,\n maxLength: this.maxLength,\n pattern: this.pattern,\n patternMessage: this.patternMessage,\n min: this.min,\n max: this.max,\n step: this.step,\n };\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.value = this.initialValue;\n this.tokens = [...this.initialTokens];\n this.closeSuggestions();\n this.touched = false;\n this.submitted = false;\n this.passwordRevealed = false;\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n if (this.isTokenized) this.tokens = restoreStringArrayFormState(state);\n else 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 this.activeSuggestion = -1;\n this.openSuggestions();\n };\n\n private handleFocus = () => {\n this.focused = true;\n };\n\n private handleBlur = () => {\n this.focused = false;\n this.touched = true;\n this.closeSuggestions();\n };\n\n private handleClear = () => {\n this.value = '';\n if (this.isTokenized) {\n this.tokens = [];\n this.dsTokensChange.emit([]);\n }\n this.closeSuggestions();\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 @Watch('suggestions')\n onSuggestionsChanged() {\n this.activeSuggestion = -1;\n if (this.focused && this.value) this.openSuggestions();\n }\n\n private openSuggestions() {\n if (\n this.disabled ||\n this.formDisabled ||\n this.isInactive ||\n this.readOnly ||\n !this.filteredSuggestions.length\n ) {\n this.closeSuggestions();\n return;\n }\n if (this.suggestionsOpen) return;\n this.suggestionsReady = false;\n this.suggestionsOpen = true;\n this.suggestionInteraction.connect();\n this.suggestionPlacement.observe();\n this.suggestionPlacement.schedule();\n }\n private closeSuggestions() {\n this.suggestionPlacement.unobserve();\n this.suggestionInteraction.disconnect();\n const popup = this.el.querySelector<HTMLElement>('.input-suggestions');\n if (popup?.matches(':popover-open')) popup.hidePopover();\n this.suggestionsOpen = false;\n this.activeSuggestion = -1;\n }\n private addTokens(text: string) {\n if (this.readOnly || this.disabled || this.isInactive || this.formDisabled) return;\n const values = text\n .split(/[,\\n\\r]+/)\n .map(value => {\n const trimmed = value.trim();\n const max = lengthLimit(this.maxLength);\n return this.lengthBehavior === 'restrict' && max !== undefined\n ? trimmed.slice(0, max)\n : trimmed;\n })\n .filter(Boolean);\n if (!values.length) return;\n this.tokens = [...new Set([...this.tokens, ...values])];\n this.value = '';\n this.dsTokensChange.emit([...this.tokens]);\n this.dsChange.emit('');\n this.closeSuggestions();\n }\n private removeToken(index: number) {\n if (this.readOnly || this.disabled || this.isInactive || this.formDisabled) return;\n this.tokens = this.tokens.filter((_, tokenIndex) => index !== tokenIndex);\n this.dsTokensChange.emit([...this.tokens]);\n this.inputEl?.focus();\n }\n private selectSuggestion(value: string) {\n if (this.isTokenized) this.addTokens(value);\n else {\n const max = lengthLimit(this.maxLength);\n this.value =\n this.lengthBehavior === 'restrict' && max !== undefined ? value.slice(0, max) : value;\n this.dsChange.emit(this.value);\n }\n this.dsSuggestionSelect.emit(value);\n this.closeSuggestions();\n this.inputEl?.focus();\n }\n private handleTextKeyDown = (event: KeyboardEvent) => {\n if (event.isComposing || this.readOnly || this.disabled || this.isInactive || this.formDisabled)\n return;\n if ((event.key === 'ArrowDown' || event.key === 'ArrowUp') && this.filteredSuggestions.length) {\n event.preventDefault();\n this.openSuggestions();\n const length = this.filteredSuggestions.length;\n this.activeSuggestion =\n this.activeSuggestion < 0\n ? event.key === 'ArrowDown'\n ? 0\n : length - 1\n : Math.max(\n 0,\n Math.min(length - 1, this.activeSuggestion + (event.key === 'ArrowDown' ? 1 : -1))\n );\n requestAnimationFrame(() =>\n this.el\n .querySelector(`#${this.generatedId}-suggestion-${this.activeSuggestion}`)\n ?.scrollIntoView({ block: 'nearest' })\n );\n } else if (event.key === 'Escape' && this.suggestionsOpen) {\n event.preventDefault();\n event.stopPropagation();\n this.closeSuggestions();\n } else if (event.key === 'Enter' && this.suggestionsOpen && this.activeSuggestion >= 0) {\n event.preventDefault();\n this.selectSuggestion(this.filteredSuggestions[this.activeSuggestion]);\n } else if (\n this.isTokenized &&\n (event.key === 'Enter' || event.key === ',') &&\n this.value.trim()\n ) {\n event.preventDefault();\n this.addTokens(this.value);\n } else if (this.isTokenized && event.key === 'Backspace' && !this.value && this.tokens.length) {\n event.preventDefault();\n this.removeToken(this.tokens.length - 1);\n } else if (event.key === 'Tab') this.closeSuggestions();\n };\n private handlePaste = (event: ClipboardEvent) => {\n if (!this.isTokenized || this.readOnly || this.disabled || this.isInactive || this.formDisabled)\n return;\n const pasted = event.clipboardData?.getData('text') ?? '';\n if (!/[,\\r\\n]/.test(pasted)) return;\n event.preventDefault();\n const start = this.inputEl?.selectionStart ?? this.value.length;\n const end = this.inputEl?.selectionEnd ?? start;\n this.addTokens(this.value.slice(0, start) + pasted + this.value.slice(end));\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 <ds-button-unfilled\n class=\"input-control__number-step input-control__number-step--increment\"\n variant=\"icon\"\n size={this.size}\n icon=\"Plus\"\n hasBorder={false}\n isInset\n isInactive={incrementDisabled}\n ariaLabel={this.incrementLabel}\n onDsClick={() => this.handleNumericStep(1)}\n />\n <ds-divider orientation=\"vertical\" length=\"var(--ds-control-icon)\" />\n <ds-button-unfilled\n class=\"input-control__number-step input-control__number-step--decrement\"\n variant=\"icon\"\n size={this.size}\n icon=\"Minus\"\n hasBorder={false}\n isInset\n isInactive={decrementDisabled}\n ariaLabel={this.decrementLabel}\n onDsClick={() => this.handleNumericStep(-1)}\n />\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 || (this.isTokenized && this.tokens.length > 0);\n const dirty =\n this.value !== this.initialValue ||\n (this.isTokenized && JSON.stringify(this.tokens) !== JSON.stringify(this.initialTokens));\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 message =\n this.error && this.errorMessage ? this.errorMessage : this.visibleConstraintMessage;\n const invalid = this.error || Boolean(this.visibleConstraintMessage);\n const showError = Boolean(message) && !this.managedByField;\n const showCounter = this.hasCounter && !this.managedByField;\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n const numeric = this.type === 'number';\n const showNumericStepper = numeric && this.showStepper;\n const resolvedAutoComplete = this.autoComplete ?? (this.type === 'search' ? 'off' : undefined);\n const suppressBrowserChrome = this.type === 'search' || this.type === 'password';\n\n const describedBy =\n [\n this.ariaDescribedby,\n showError ? this.errorId : undefined,\n showCounter ? `${this.generatedId}-count` : undefined,\n ]\n .filter(Boolean)\n .join(' ') || 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={invalid ? '' : undefined}\n data-constraint-message={this.visibleConstraintMessage || undefined}\n data-character-count={this.hasCounter ? String(this.value.length) : undefined}\n data-character-limit={this.hasCounter ? String(lengthLimit(this.maxLength)) : undefined}\n onInvalid={() => {\n this.submitted = true;\n }}\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 ref={element => {\n this.controlEl = element;\n }}\n class={{\n 'input-control--tokenized': this.isTokenized,\n 'input-control--has-tokens': this.isTokenized && this.tokens.length > 0,\n 'input-control': true,\n 'input-control--number': numeric,\n 'input-control--stepper': showNumericStepper,\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 && invalid,\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 {showNumericStepper && 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 {this.isTokenized &&\n this.tokens.map((token, index) => (\n <ds-chip\n key={`${index}-${token}`}\n class=\"input-token\"\n label={token}\n size={this.size === 'lg' ? 'md' : this.size}\n isInset\n insetDepth=\"double\"\n isInactive={inactive || this.readOnly}\n removeLabel={this.removeTokenLabel}\n state={\n textConstraintValidity({\n ...this.textConstraints(),\n value: token,\n required: false,\n }).message\n ? 'error'\n : 'default'\n }\n onDsRemove={event => {\n event.stopPropagation();\n this.removeToken(index);\n }}\n />\n ))}\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 && !this.isTokenized}\n minLength={lengthLimit(this.minLength)}\n maxLength={this.lengthBehavior === 'restrict' ? lengthLimit(this.maxLength) : undefined}\n pattern={this.pattern}\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 role={this.suggestions.length && this.supportsTextFeatures ? 'combobox' : undefined}\n aria-autocomplete={\n this.suggestions.length && this.supportsTextFeatures ? 'list' : undefined\n }\n aria-expanded={\n this.suggestions.length && this.supportsTextFeatures\n ? String(this.suggestionsOpen)\n : undefined\n }\n aria-controls={\n this.suggestionsOpen ? `${this.generatedId}-suggestions` : this.ariaControls\n }\n aria-activedescendant={\n this.suggestionsOpen && this.activeSuggestion >= 0\n ? `${this.generatedId}-suggestion-${this.activeSuggestion}`\n : this.ariaActiveDescendant\n }\n aria-invalid={invalid ? 'true' : undefined}\n onInput={this.handleInput}\n onKeyDown={this.handleTextKeyDown}\n onPaste={this.handlePaste}\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 ? 'EyeStrikethrough' : 'Eye'}\n hasBorder={false}\n isInset\n isInactive={inactive}\n ariaLabel={this.passwordRevealed ? this.hidePasswordLabel : this.showPasswordLabel}\n onDsClick={this.handleTogglePassword}\n />\n )}\n {showNumericStepper && this.textAlign === 'start' && this.renderNumericStepper(inactive)}\n </div>\n {this.suggestionsOpen && (\n <div\n popover=\"manual\"\n class=\"input-suggestions ds-choice-popup\"\n style={{\n position: 'fixed',\n left: `${this.suggestionPosition.x}px`,\n top: `${this.suggestionPosition.y}px`,\n width: `${this.controlEl?.getBoundingClientRect().width ?? 0}px`,\n visibility: this.suggestionsReady ? 'visible' : 'hidden',\n }}\n onMouseDown={event => event.preventDefault()}\n >\n <div\n class=\"input-suggestions__list ds-choice-list\"\n id={`${this.generatedId}-suggestions`}\n role=\"listbox\"\n aria-label=\"Suggestions\"\n >\n {this.filteredSuggestions.map((value, index) => (\n <ChoiceOptionRow\n size={this.size}\n id={`${this.generatedId}-suggestion-${index}`}\n option={{ label: value, value }}\n selected={false}\n active={index === this.activeSuggestion}\n focusRingVisible={false}\n usesSubtext={false}\n tabIndex={-1}\n onHover={() => {\n this.activeSuggestion = index;\n }}\n onSelect={() => this.selectSuggestion(value)}\n />\n ))}\n </div>\n </div>\n )}\n {(showError || showCounter) && (\n <div class=\"text-field-support\">\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 {message}\n </ds-text>\n )}\n {showCounter && (\n <ds-text\n as=\"span\"\n class=\"text-field-count\"\n variant=\"text-body-small\"\n color={invalid ? 'negative' : 'secondary'}\n textId={`${this.generatedId}-count`}\n >\n {this.value.length}/{lengthLimit(this.maxLength)}\n </ds-text>\n )}\n </div>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["ChoiceListSection","size","heading","ariaLabel","className","children","h","class","trim","role","as","variant","CONTROL_SUPPORTING_TEXT_VARIANT","color","emphasis","ChoiceSearch","hasFocusBoundary","hasInteractionFill","value","placeholder","controls","activeDescendant","disabled","inputRef","clearLabel","onValueChange","onClear","onKeyDown","ref","element","type","width","icon","isInactive","hasBorder","ariaControls","ariaActiveDescendant","onDsChange","event","stopPropagation","detail","onDsClear","ChoiceFooter","summary","compactSummary","useCompactSummary","contentRef","summaryMeasureRef","clearRef","key","CONTROL_TEXT_VARIANT","onClick","ChoiceActionFooter","label","onAction","ChoiceOptionRow","id","option","selected","active","focusRingVisible","usesSubtext","leading","supporting","action","actionOpen","popupRole","tabIndex","onFocus","onHover","onSelect","grid","undefined","String","onMouseDown","preventDefault","onMouseMove","subtext","inputCss","CONTROL_ADORNMENT","isControlAdornment","matches","Boolean","querySelector","ICON_SIZE","lg","md","sm","xs","CLEAR_BUTTON_SIZE","idCounter","Input","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","generatedId","errorId","readOnly","required","requiredMessage","DEFAULT_REQUIRED_MESSAGE","showPasswordLabel","hidePasswordLabel","lengthBehavior","showCharacterCount","suggestions","tokenized","tokens","removeTokenLabel","showStepper","incrementLabel","decrementLabel","textAlign","inputMode","enterKeyHint","autoFocus","error","constraintMessage","submitted","suggestionsOpen","activeSuggestion","suggestionPosition","x","y","suggestionsReady","initialTokens","suggestionPlacement","AnchoredPositionController","getAnchor","controlEl","getPopup","el","getOwnerDocument","ownerDocument","measure","anchor","popup","gap","resolveCssLengthPx","TOKEN_DEFAULTS","space050","anchorRect","getBoundingClientRect","popupWidth","offsetWidth","popupHeight","offsetHeight","side","align","sideOffsetPx","alignOffsetPx","viewportPadPx","viewportWidth","window","innerWidth","viewportHeight","innerHeight","collisionRect","resolveAnchoredOverlayBoundaryRect","apply","onReady","topLayer","observeResize","liveUpdate","suggestionInteraction","AnchoredOverlayInteractionController","onOutsideActivation","closeSuggestions","initialValue","formDisabled","hasPrefix","hasPrefixControl","hasSuffix","hasSuffixControl","focused","touched","passwordRevealed","restorePasswordFocus","handleInput","e","target","dsChange","emit","openSuggestions","handleFocus","handleBlur","handleClear","isTokenized","dsTokensChange","dsClear","inputEl","focus","handleTogglePassword","handleTextKeyDown","isComposing","filteredSuggestions","length","Math","max","min","requestAnimationFrame","scrollIntoView","block","selectSuggestion","addTokens","removeToken","handlePaste","pasted","clipboardData","getData","test","start","selectionStart","end","selectionEnd","slice","handleNumericStep","direction","input","numericStepDisabled","previous","stepUp","stepDown","preventScroll","managedByField","closest","visibleConstraintMessage","maxLength","hasCounter","lengthLimit","supportsTextFeatures","query","toLocaleLowerCase","Set","filter","includes","componentWillLoad","Array","isArray","syncAdornmentSlots","syncFormValue","disconnectedCallback","componentDidRender","schedule","onTypeChange","prefixNodes","querySelectorAll","suffixNodes","some","inactive","setRepeatedFormControlValue","internals","name","setFormControlValue","validity","flags","message","textConstraintValidity","textConstraints","invalidToken","map","find","result","valueMissing","customError","setValidity","minLength","pattern","patternMessage","step","formDisabledCallback","formResetCallback","formStateRestoreCallback","state","restoreStringArrayFormState","restoreStringFormState","setFocus","onSuggestionsChanged","connect","observe","unobserve","disconnect","hidePopover","text","values","split","trimmed","index","_","tokenIndex","dsSuggestionSelect","Number","isFinite","renderNumericStepper","incrementDisabled","decrementDisabled","isInset","onDsClick","orientation","render","inputId","filled","dirty","JSON","stringify","showClear","showPasswordToggle","nativeType","errorMessage","invalid","showError","showCounter","textVariant","iconSize","numeric","showNumericStepper","resolvedAutoComplete","autoComplete","suppressBrowserChrome","describedBy","ariaDescribedby","join","Host","controlWidthClass","onInvalid","onSlotchange","token","insetDepth","removeLabel","onDsRemove","autoCapitalize","autoCorrect","spellcheck","replace","ariaLabelledby","onInput","onPaste","onBlur","rounded","popover","style","position","left","top","visibility","textId"],"sources":["src/wc/utils/choice-list-parts.tsx","src/wc/components/Input/Input.css?tag=ds-input&encapsulation=scoped","src/wc/components/Input/Input.tsx"],"sourcesContent":["import { FunctionalComponent, h, VNode } from '@stencil/core';\nimport type { ChoiceOption } from './choice-list';\nimport {\n CONTROL_SUPPORTING_TEXT_VARIANT,\n CONTROL_TEXT_VARIANT,\n type ControlSize,\n} from './control-text';\n\ninterface ChoiceListSectionProps {\n size?: ControlSize;\n heading?: string;\n ariaLabel: string;\n className?: string;\n}\n\n/** Shared listbox anatomy used when an owning surface composes choice lists directly. */\nexport const ChoiceListSection: FunctionalComponent<ChoiceListSectionProps> = (\n { size = 'md', heading, ariaLabel, className },\n children\n) => (\n <div\n class={`ds-choice-list ds-chrome-column ds-chrome-space--sm ${className ?? ''}`.trim()}\n role=\"listbox\"\n aria-label={ariaLabel}\n >\n {heading ? (\n <ds-text\n class={`ds-choice-section__header ds-control-section-heading ds-control--${size}`}\n as=\"div\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT[size]}\n color=\"primary\"\n emphasis\n aria-hidden=\"true\"\n >\n {heading}\n </ds-text>\n ) : null}\n {children}\n </div>\n);\n\ninterface ChoiceSearchProps {\n size?: ControlSize;\n hasFocusBoundary?: boolean;\n hasInteractionFill?: boolean;\n value: string;\n placeholder: string;\n ariaLabel?: string;\n controls?: string;\n activeDescendant?: string;\n disabled?: boolean;\n inputRef: (element: HTMLDsInputElement | null) => void;\n clearLabel: string;\n onValueChange: (value: string) => void;\n onClear?: () => void;\n onKeyDown: (event: KeyboardEvent) => void;\n}\n\nexport const ChoiceSearch: FunctionalComponent<ChoiceSearchProps> = ({\n size = 'md',\n hasFocusBoundary = true,\n hasInteractionFill = true,\n value,\n placeholder,\n ariaLabel,\n controls,\n activeDescendant,\n disabled = false,\n inputRef,\n clearLabel,\n onValueChange,\n onClear,\n onKeyDown,\n}) => {\n return (\n <div\n class={{\n 'select-search': true,\n 'select-search--without-focus-boundary': !hasFocusBoundary,\n }}\n >\n <ds-input\n class=\"select-search__control\"\n ref={element => inputRef((element as HTMLDsInputElement) ?? null)}\n type=\"search\"\n size={size}\n width=\"fill\"\n value={value}\n placeholder={placeholder}\n icon=\"MagnifyingGlass\"\n clearLabel={clearLabel}\n isInactive={disabled}\n hasBorder={false}\n hasInteractionFill={hasInteractionFill}\n ariaLabel={ariaLabel ?? placeholder}\n ariaControls={controls}\n ariaActiveDescendant={activeDescendant}\n onKeyDown={onKeyDown}\n onDsChange={(event: CustomEvent<string>) => {\n event.stopPropagation();\n onValueChange(event.detail);\n }}\n onDsClear={(event: CustomEvent<void>) => {\n event.stopPropagation();\n onClear?.();\n }}\n />\n </div>\n );\n};\n\ninterface ChoiceFooterProps {\n size?: ControlSize;\n clearLabel: string;\n summary?: string;\n compactSummary?: string;\n useCompactSummary?: boolean;\n contentRef?: (element: HTMLDivElement | null) => void;\n summaryMeasureRef?: (element: HTMLElement | null) => void;\n clearRef?: (element: HTMLButtonElement | null) => void;\n onClear: (event: MouseEvent) => void;\n}\n\nexport const ChoiceFooter: FunctionalComponent<ChoiceFooterProps> = ({\n size = 'md',\n clearLabel,\n summary,\n compactSummary,\n useCompactSummary = false,\n contentRef,\n summaryMeasureRef,\n clearRef,\n onClear,\n}) => (\n <div class=\"ds-choice-footer\">\n <div\n ref={element => contentRef?.((element as HTMLDivElement) ?? null)}\n class={`ds-choice-footer__content ds-control--${size}`}\n >\n {summary && [\n <ds-text\n key=\"summary\"\n class=\"ds-choice-footer__summary\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT[size]}\n color=\"secondary\"\n >\n {useCompactSummary ? (compactSummary ?? summary) : summary}\n </ds-text>,\n <ds-text\n key=\"summary-measure\"\n ref={element => summaryMeasureRef?.((element as HTMLElement) ?? null)}\n class=\"ds-choice-footer__summary-measure\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT[size]}\n color=\"secondary\"\n aria-hidden=\"true\"\n >\n {summary}\n </ds-text>,\n ]}\n <button\n ref={element => clearRef?.((element as HTMLButtonElement) ?? null)}\n type=\"button\"\n class=\"ds-choice-footer__clear ds-text-action ds-focus-ring\"\n onClick={onClear}\n >\n <ds-text as=\"span\" variant={CONTROL_TEXT_VARIANT[size]} color=\"inherit\">\n {clearLabel}\n </ds-text>\n </button>\n </div>\n </div>\n);\n\ninterface ChoiceActionFooterProps {\n size?: ControlSize;\n label: string;\n onAction: (event: MouseEvent) => void;\n}\n\nexport const ChoiceActionFooter: FunctionalComponent<ChoiceActionFooterProps> = ({\n size = 'md',\n label,\n onAction,\n}) => (\n <div class=\"ds-choice-footer\">\n <div class={`ds-choice-footer__content ds-control--${size}`}>\n <button\n type=\"button\"\n class=\"ds-choice-footer__action ds-text-action ds-focus-ring\"\n onClick={onAction}\n >\n <ds-text as=\"span\" variant={CONTROL_TEXT_VARIANT[size]} color=\"inherit\">\n {label}\n </ds-text>\n </button>\n </div>\n </div>\n);\n\ninterface ChoiceOptionRowProps {\n size?: ControlSize;\n id: string;\n option: ChoiceOption;\n selected: boolean;\n active: boolean;\n focusRingVisible: boolean;\n usesSubtext: boolean;\n leading?: VNode;\n supporting?: VNode;\n action?: VNode;\n actionOpen?: boolean;\n popupRole?: 'listbox' | 'grid';\n tabIndex?: number;\n onFocus?: () => void;\n onKeyDown?: (event: KeyboardEvent) => void;\n onHover: () => void;\n onSelect: () => void;\n}\n\nexport const ChoiceOptionRow: FunctionalComponent<ChoiceOptionRowProps> = ({\n size = 'md',\n id,\n option,\n selected,\n active,\n focusRingVisible,\n usesSubtext,\n leading,\n supporting,\n action,\n actionOpen = false,\n popupRole = 'listbox',\n tabIndex,\n onFocus,\n onKeyDown,\n onHover,\n onSelect,\n}) => {\n const grid = popupRole === 'grid';\n return (\n <div\n id={grid ? id : undefined}\n role={grid ? 'row' : undefined}\n aria-selected={grid ? String(selected) : undefined}\n aria-disabled={grid && option.isInactive ? 'true' : undefined}\n class={{\n 'select-option-row': true,\n 'select-option-row--has-action': !!action,\n 'select-option-row--action-open': actionOpen,\n 'select-option-row--keyboard-active': !!action && active && focusRingVisible,\n }}\n >\n <div\n id={grid ? undefined : id}\n class={{\n 'select-option': true,\n 'ds-choice-item': true,\n 'ds-control-frame': true,\n [`ds-control--${size}`]: true,\n 'ds-focus-ring-inset': true,\n 'ds-focus-ring--visible': active && focusRingVisible,\n 'ds-interaction-fill': !option.isInactive,\n 'ds-interaction-fill--selected': selected && !option.isInactive,\n 'ds-control-inactive': !!option.isInactive,\n 'select-option--active': active,\n }}\n role={grid ? 'gridcell' : 'option'}\n tabIndex={tabIndex}\n aria-selected={grid ? undefined : String(selected)}\n aria-disabled={!grid && option.isInactive ? 'true' : undefined}\n onMouseDown={event => event.preventDefault()}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n onMouseMove={() => {\n if (!option.isInactive) onHover();\n }}\n onClick={onSelect}\n >\n {leading}\n <div class=\"ds-choice-item__content ds-interaction-fill__content\">\n <ds-text\n class=\"ds-choice-item__label ds-control-label-box\"\n as=\"span\"\n variant={CONTROL_TEXT_VARIANT[size]}\n color={selected ? 'primary' : 'secondary'}\n >\n {option.label}\n </ds-text>\n {supporting ??\n (usesSubtext ? (\n <ds-text\n class=\"ds-choice-item__subtext ds-control-label-box\"\n as=\"span\"\n variant={CONTROL_SUPPORTING_TEXT_VARIANT[size]}\n color=\"secondary\"\n >\n {option.subtext?.trim() || '—'}\n </ds-text>\n ) : null)}\n </div>\n </div>\n {action && (\n <div\n class=\"select-option-row__action ds-control-elevation ds-control-elevation--md ds-control-elevation--press-scale\"\n role={grid ? 'gridcell' : undefined}\n >\n {action}\n </div>\n )}\n </div>\n );\n};\n","@import '../../utils/radius.css';\n@import '../../utils/choice-list.css';\n@import '../../utils/control-parts.css';\n@import '../../utils/text-field-support.css';\n@import '../../utils/control-width.css';\n@import '../../utils/field-stack.css';\n@import '../../utils/typography.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}\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/* Native arrows stay hidden whether optional inset actions are shown or not. */\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--stepper.input-control--align-start {\n padding-inline-end: var(--dimension-space-025);\n}\n\n.input-control--stepper.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: inline-flex;\n align-items: center;\n flex-shrink: 0;\n gap: var(--dimension-space-025);\n}\n\n:host(.ds-control-inactive) .input-control__number-step {\n --effect-opacity-medium: 1;\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--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\n.input-control--tokenized .native-input {\n box-sizing: border-box;\n padding-block: 0;\n}\n\n.input-control--has-tokens {\n --ds-input-token-inset: var(--dimension-space-050);\n\n height: auto;\n min-height: var(--ds-control-height);\n flex-wrap: wrap;\n padding: var(--ds-input-token-inset);\n row-gap: var(--dimension-space-050);\n}\n\n/* Chip stops at md; xs retains the shared single-inset fallback. */\n.input-control--has-tokens.ds-control--lg {\n --ds-input-token-inset: var(--dimension-space-100);\n}\n.input-control--has-tokens.ds-control--xs {\n --ds-input-token-inset: var(--dimension-space-025);\n}\n\n.input-control--has-tokens .native-input {\n flex: 1 1 var(--dimension-size-800);\n width: 0;\n min-width: min(var(--dimension-size-800), 100%);\n height: calc(var(--ds-control-height) - var(--ds-input-token-inset) * 2);\n}\n.input-token {\n position: relative;\n z-index: 2;\n max-width: 100%;\n}\n.input-suggestions__list {\n overflow: auto;\n max-height: calc(var(--dimension-size-base) * 20);\n padding: var(--dimension-space-050);\n}\n","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 restoreStringArrayFormState,\n setRepeatedFormControlValue,\n resolveCssLengthPx,\n TOKEN_DEFAULTS,\n setFormControlValue,\n type ControlWidth,\n} from '../../utils';\n\nimport { AnchoredPositionController } from '../../utils/anchored-position-controller';\nimport { AnchoredOverlayInteractionController } from '../../utils/anchored-overlay-interaction-controller';\nimport { resolveAnchoredOverlayBoundaryRect } from '../../utils/anchored-overlay-boundary';\nimport { ChoiceOptionRow } from '../../utils/choice-list-parts';\nimport { lengthLimit, textConstraintValidity } from '../../utils/text-constraints';\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 /** Minimum non-empty text length, in native UTF-16 code units. */\n @Prop() minLength: number | undefined;\n /** Maximum text length. A visible counter accompanies this constraint by default. */\n @Prop() maxLength: number | undefined;\n /** Error preserves extra text; restrict uses the browser's hard input limit. */\n @Prop() lengthBehavior: 'error' | 'restrict' = 'error';\n @Prop() showCharacterCount: boolean = true;\n /** Native whole-value regular expression for text-like input types. */\n @Prop() pattern: string | undefined;\n @Prop() patternMessage: string | undefined;\n /** Optional local suggestions; free text always remains valid. Used with text/search fields. */\n @Prop() suggestions: string[] = [];\n /** Free-text tokens entered with Enter/comma and removable chips. Used with text/search fields. */\n @Prop({ reflect: true }) tokenized: boolean = false;\n /** Committed values; value remains the editable draft when tokenized. */\n @Prop({ mutable: true }) tokens: string[] = [];\n @Prop() removeTokenLabel: string = 'Remove {label}';\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 /** Show inset increment/decrement actions for number fields. Native numeric editing remains available when hidden. */\n @Prop() showStepper: boolean = true;\n @Prop() incrementLabel: string = 'Increase value';\n @Prop() decrementLabel: string = 'Decrease value';\n /** Align the editable value; number steppers sit on the opposite 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() dsTokensChange!: EventEmitter<string[]>;\n @Event() dsSuggestionSelect!: EventEmitter<string>;\n @Event() dsClear!: EventEmitter<void>;\n\n @State() private constraintMessage = '';\n @State() private submitted = false;\n private get managedByField(): boolean {\n return Boolean(this.el.closest('ds-field'));\n }\n private get visibleConstraintMessage(): string {\n return this.touched ||\n this.submitted ||\n (this.maxLength !== undefined && this.value.length > this.maxLength)\n ? this.constraintMessage\n : '';\n }\n private get hasCounter(): boolean {\n return (\n this.showCharacterCount && lengthLimit(this.maxLength) !== undefined && this.type !== 'number'\n );\n }\n\n @State() private suggestionsOpen = false;\n @State() private activeSuggestion = -1;\n @State() private suggestionPosition = { x: 0, y: 0 };\n @State() private suggestionsReady = false;\n private controlEl?: HTMLElement;\n private initialTokens: string[] = [];\n private get supportsTextFeatures(): boolean {\n return this.type === 'text' || this.type === 'search';\n }\n private get isTokenized(): boolean {\n return this.tokenized && this.supportsTextFeatures;\n }\n private get filteredSuggestions(): string[] {\n if (!this.supportsTextFeatures) return [];\n const query = this.value.trim().toLocaleLowerCase();\n return [...new Set(this.suggestions)].filter(\n value =>\n value.toLocaleLowerCase().includes(query) &&\n (!this.isTokenized || !this.tokens.includes(value))\n );\n }\n private readonly suggestionPlacement = new AnchoredPositionController({\n getAnchor: () => this.controlEl ?? null,\n getPopup: () => this.el.querySelector<HTMLElement>('.input-suggestions'),\n getOwnerDocument: () => this.el.ownerDocument,\n measure: (anchor, popup) => {\n if (!this.suggestionsOpen) return null;\n const gap = resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n return {\n anchorRect: anchor.getBoundingClientRect(),\n popupWidth: popup.offsetWidth,\n popupHeight: popup.offsetHeight,\n side: 'bottom',\n align: 'start',\n sideOffsetPx: gap,\n alignOffsetPx: 0,\n viewportPadPx: gap,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n collisionRect: resolveAnchoredOverlayBoundaryRect(anchor),\n };\n },\n apply: ({ x, y }) => {\n this.suggestionPosition = { x, y };\n },\n onReady: () => {\n this.suggestionsReady = true;\n },\n topLayer: true,\n observeResize: true,\n liveUpdate: 'frame',\n });\n private readonly suggestionInteraction = new AnchoredOverlayInteractionController({\n getAnchor: () => this.controlEl ?? null,\n getPopup: () => this.el.querySelector<HTMLElement>('.input-suggestions'),\n getOwnerDocument: () => this.el.ownerDocument,\n onOutsideActivation: () => this.closeSuggestions(),\n });\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.value = String(this.value ?? '');\n this.tokens = Array.isArray(this.tokens) ? this.tokens : [];\n this.initialValue = this.value;\n this.initialTokens = [...this.tokens];\n this.syncAdornmentSlots();\n this.syncFormValue();\n }\n\n disconnectedCallback() {\n this.closeSuggestions();\n }\n\n componentDidRender() {\n this.syncAdornmentSlots();\n if (this.suggestionsOpen) this.suggestionPlacement.schedule();\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('tokens')\n @Watch('tokenized')\n @Watch('name')\n @Watch('value')\n @Watch('disabled')\n @Watch('isInactive')\n @Watch('required')\n @Watch('readOnly')\n @Watch('minLength')\n @Watch('maxLength')\n @Watch('requiredMessage')\n @Watch('pattern')\n @Watch('patternMessage')\n @Watch('type')\n @Watch('min')\n @Watch('max')\n @Watch('step')\n syncFormValue() {\n if (typeof this.value !== 'string') {\n this.value = String(this.value ?? '');\n }\n if (!Array.isArray(this.tokens)) this.tokens = [];\n const inactive = this.isInactive || this.disabled || this.formDisabled;\n if (this.isTokenized)\n setRepeatedFormControlValue(this.internals, this.name, this.tokens, { inactive });\n else setFormControlValue(this.internals, this.value, { inactive });\n let validity =\n inactive || this.readOnly\n ? { flags: {}, message: '' }\n : textConstraintValidity({\n ...this.textConstraints(),\n required: this.required && !this.isTokenized,\n });\n if (this.isTokenized && !inactive && !this.readOnly) {\n const invalidToken = this.tokens\n .map(value => textConstraintValidity({ ...this.textConstraints(), value, required: false }))\n .find(result => result.message);\n if (invalidToken) validity = invalidToken;\n else if (this.required && this.tokens.length === 0)\n validity = { flags: { valueMissing: true }, message: this.requiredMessage };\n else if (this.value.trim() && !validity.message)\n validity = { flags: { customError: true }, message: 'Press Enter to add this value.' };\n }\n if (inactive || this.readOnly) this.closeSuggestions();\n this.constraintMessage = validity.message;\n this.internals.setValidity(validity.flags, validity.message);\n }\n\n private textConstraints() {\n return {\n value: this.value,\n type: this.type,\n required: this.required,\n requiredMessage: this.requiredMessage,\n minLength: this.minLength,\n maxLength: this.maxLength,\n pattern: this.pattern,\n patternMessage: this.patternMessage,\n min: this.min,\n max: this.max,\n step: this.step,\n };\n }\n\n formDisabledCallback(disabled: boolean) {\n this.formDisabled = disabled;\n this.syncFormValue();\n }\n\n formResetCallback() {\n this.value = this.initialValue;\n this.tokens = [...this.initialTokens];\n this.closeSuggestions();\n this.touched = false;\n this.submitted = false;\n this.passwordRevealed = false;\n }\n\n formStateRestoreCallback(state: string | File | FormData | null) {\n if (this.isTokenized) this.tokens = restoreStringArrayFormState(state);\n else 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 this.activeSuggestion = -1;\n this.openSuggestions();\n };\n\n private handleFocus = () => {\n this.focused = true;\n };\n\n private handleBlur = () => {\n this.focused = false;\n this.touched = true;\n this.closeSuggestions();\n };\n\n private handleClear = () => {\n this.value = '';\n if (this.isTokenized) {\n this.tokens = [];\n this.dsTokensChange.emit([]);\n }\n this.closeSuggestions();\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 @Watch('suggestions')\n onSuggestionsChanged() {\n this.activeSuggestion = -1;\n if (this.focused && this.value) this.openSuggestions();\n }\n\n private openSuggestions() {\n if (\n this.disabled ||\n this.formDisabled ||\n this.isInactive ||\n this.readOnly ||\n !this.filteredSuggestions.length\n ) {\n this.closeSuggestions();\n return;\n }\n if (this.suggestionsOpen) return;\n this.suggestionsReady = false;\n this.suggestionsOpen = true;\n this.suggestionInteraction.connect();\n this.suggestionPlacement.observe();\n this.suggestionPlacement.schedule();\n }\n private closeSuggestions() {\n this.suggestionPlacement.unobserve();\n this.suggestionInteraction.disconnect();\n const popup = this.el.querySelector<HTMLElement>('.input-suggestions');\n if (popup?.matches(':popover-open')) popup.hidePopover();\n this.suggestionsOpen = false;\n this.activeSuggestion = -1;\n }\n private addTokens(text: string) {\n if (this.readOnly || this.disabled || this.isInactive || this.formDisabled) return;\n const values = text\n .split(/[,\\n\\r]+/)\n .map(value => {\n const trimmed = value.trim();\n const max = lengthLimit(this.maxLength);\n return this.lengthBehavior === 'restrict' && max !== undefined\n ? trimmed.slice(0, max)\n : trimmed;\n })\n .filter(Boolean);\n if (!values.length) return;\n this.tokens = [...new Set([...this.tokens, ...values])];\n this.value = '';\n this.dsTokensChange.emit([...this.tokens]);\n this.dsChange.emit('');\n this.closeSuggestions();\n }\n private removeToken(index: number) {\n if (this.readOnly || this.disabled || this.isInactive || this.formDisabled) return;\n this.tokens = this.tokens.filter((_, tokenIndex) => index !== tokenIndex);\n this.dsTokensChange.emit([...this.tokens]);\n this.inputEl?.focus();\n }\n private selectSuggestion(value: string) {\n if (this.isTokenized) this.addTokens(value);\n else {\n const max = lengthLimit(this.maxLength);\n this.value =\n this.lengthBehavior === 'restrict' && max !== undefined ? value.slice(0, max) : value;\n this.dsChange.emit(this.value);\n }\n this.dsSuggestionSelect.emit(value);\n this.closeSuggestions();\n this.inputEl?.focus();\n }\n private handleTextKeyDown = (event: KeyboardEvent) => {\n if (event.isComposing || this.readOnly || this.disabled || this.isInactive || this.formDisabled)\n return;\n if ((event.key === 'ArrowDown' || event.key === 'ArrowUp') && this.filteredSuggestions.length) {\n event.preventDefault();\n this.openSuggestions();\n const length = this.filteredSuggestions.length;\n this.activeSuggestion =\n this.activeSuggestion < 0\n ? event.key === 'ArrowDown'\n ? 0\n : length - 1\n : Math.max(\n 0,\n Math.min(length - 1, this.activeSuggestion + (event.key === 'ArrowDown' ? 1 : -1))\n );\n requestAnimationFrame(() =>\n this.el\n .querySelector(`#${this.generatedId}-suggestion-${this.activeSuggestion}`)\n ?.scrollIntoView({ block: 'nearest' })\n );\n } else if (event.key === 'Escape' && this.suggestionsOpen) {\n event.preventDefault();\n event.stopPropagation();\n this.closeSuggestions();\n } else if (event.key === 'Enter' && this.suggestionsOpen && this.activeSuggestion >= 0) {\n event.preventDefault();\n this.selectSuggestion(this.filteredSuggestions[this.activeSuggestion]);\n } else if (\n this.isTokenized &&\n (event.key === 'Enter' || event.key === ',') &&\n this.value.trim()\n ) {\n event.preventDefault();\n this.addTokens(this.value);\n } else if (this.isTokenized && event.key === 'Backspace' && !this.value && this.tokens.length) {\n event.preventDefault();\n this.removeToken(this.tokens.length - 1);\n } else if (event.key === 'Tab') this.closeSuggestions();\n };\n private handlePaste = (event: ClipboardEvent) => {\n if (!this.isTokenized || this.readOnly || this.disabled || this.isInactive || this.formDisabled)\n return;\n const pasted = event.clipboardData?.getData('text') ?? '';\n if (!/[,\\r\\n]/.test(pasted)) return;\n event.preventDefault();\n const start = this.inputEl?.selectionStart ?? this.value.length;\n const end = this.inputEl?.selectionEnd ?? start;\n this.addTokens(this.value.slice(0, start) + pasted + this.value.slice(end));\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 <ds-button-unfilled\n class=\"input-control__number-step input-control__number-step--increment\"\n variant=\"icon\"\n size={this.size}\n icon=\"Plus\"\n hasBorder={false}\n isInset\n isInactive={incrementDisabled}\n ariaLabel={this.incrementLabel}\n onDsClick={() => this.handleNumericStep(1)}\n />\n <ds-divider orientation=\"vertical\" length=\"var(--ds-control-icon)\" />\n <ds-button-unfilled\n class=\"input-control__number-step input-control__number-step--decrement\"\n variant=\"icon\"\n size={this.size}\n icon=\"Minus\"\n hasBorder={false}\n isInset\n isInactive={decrementDisabled}\n ariaLabel={this.decrementLabel}\n onDsClick={() => this.handleNumericStep(-1)}\n />\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 || (this.isTokenized && this.tokens.length > 0);\n const dirty =\n this.value !== this.initialValue ||\n (this.isTokenized && JSON.stringify(this.tokens) !== JSON.stringify(this.initialTokens));\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 message =\n this.error && this.errorMessage ? this.errorMessage : this.visibleConstraintMessage;\n const invalid = this.error || Boolean(this.visibleConstraintMessage);\n const showError = Boolean(message) && !this.managedByField;\n const showCounter = this.hasCounter && !this.managedByField;\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const iconSize = ICON_SIZE[this.size];\n const numeric = this.type === 'number';\n const showNumericStepper = numeric && this.showStepper;\n const resolvedAutoComplete = this.autoComplete ?? (this.type === 'search' ? 'off' : undefined);\n const suppressBrowserChrome = this.type === 'search' || this.type === 'password';\n\n const describedBy =\n [\n this.ariaDescribedby,\n showError ? this.errorId : undefined,\n showCounter ? `${this.generatedId}-count` : undefined,\n ]\n .filter(Boolean)\n .join(' ') || 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={invalid ? '' : undefined}\n data-constraint-message={this.visibleConstraintMessage || undefined}\n data-character-count={this.hasCounter ? String(this.value.length) : undefined}\n data-character-limit={this.hasCounter ? String(lengthLimit(this.maxLength)) : undefined}\n onInvalid={() => {\n this.submitted = true;\n }}\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 ref={element => {\n this.controlEl = element;\n }}\n class={{\n 'input-control--tokenized': this.isTokenized,\n 'input-control--has-tokens': this.isTokenized && this.tokens.length > 0,\n 'input-control': true,\n 'input-control--number': numeric,\n 'input-control--stepper': showNumericStepper,\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 && invalid,\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 {showNumericStepper && 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 {this.isTokenized &&\n this.tokens.map((token, index) => (\n <ds-chip\n key={`${index}-${token}`}\n class=\"input-token\"\n label={token}\n size={this.size === 'lg' ? 'md' : this.size}\n isInset\n insetDepth=\"double\"\n isInactive={inactive || this.readOnly}\n removeLabel={this.removeTokenLabel}\n state={\n textConstraintValidity({\n ...this.textConstraints(),\n value: token,\n required: false,\n }).message\n ? 'error'\n : 'default'\n }\n onDsRemove={event => {\n event.stopPropagation();\n this.removeToken(index);\n }}\n />\n ))}\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 && !this.isTokenized}\n minLength={lengthLimit(this.minLength)}\n maxLength={this.lengthBehavior === 'restrict' ? lengthLimit(this.maxLength) : undefined}\n pattern={this.pattern}\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 role={this.suggestions.length && this.supportsTextFeatures ? 'combobox' : undefined}\n aria-autocomplete={\n this.suggestions.length && this.supportsTextFeatures ? 'list' : undefined\n }\n aria-expanded={\n this.suggestions.length && this.supportsTextFeatures\n ? String(this.suggestionsOpen)\n : undefined\n }\n aria-controls={\n this.suggestionsOpen ? `${this.generatedId}-suggestions` : this.ariaControls\n }\n aria-activedescendant={\n this.suggestionsOpen && this.activeSuggestion >= 0\n ? `${this.generatedId}-suggestion-${this.activeSuggestion}`\n : this.ariaActiveDescendant\n }\n aria-invalid={invalid ? 'true' : undefined}\n onInput={this.handleInput}\n onKeyDown={this.handleTextKeyDown}\n onPaste={this.handlePaste}\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 ? 'EyeStrikethrough' : 'Eye'}\n hasBorder={false}\n isInset\n isInactive={inactive}\n ariaLabel={this.passwordRevealed ? this.hidePasswordLabel : this.showPasswordLabel}\n onDsClick={this.handleTogglePassword}\n />\n )}\n {showNumericStepper && this.textAlign === 'start' && this.renderNumericStepper(inactive)}\n </div>\n {this.suggestionsOpen && (\n <div\n popover=\"manual\"\n class=\"input-suggestions ds-choice-popup\"\n style={{\n position: 'fixed',\n left: `${this.suggestionPosition.x}px`,\n top: `${this.suggestionPosition.y}px`,\n width: `${this.controlEl?.getBoundingClientRect().width ?? 0}px`,\n visibility: this.suggestionsReady ? 'visible' : 'hidden',\n }}\n onMouseDown={event => event.preventDefault()}\n >\n <div\n class=\"input-suggestions__list ds-choice-list\"\n id={`${this.generatedId}-suggestions`}\n role=\"listbox\"\n aria-label=\"Suggestions\"\n >\n {this.filteredSuggestions.map((value, index) => (\n <ChoiceOptionRow\n size={this.size}\n id={`${this.generatedId}-suggestion-${index}`}\n option={{ label: value, value }}\n selected={false}\n active={index === this.activeSuggestion}\n focusRingVisible={false}\n usesSubtext={false}\n tabIndex={-1}\n onHover={() => {\n this.activeSuggestion = index;\n }}\n onSelect={() => this.selectSuggestion(value)}\n />\n ))}\n </div>\n </div>\n )}\n {(showError || showCounter) && (\n <div class=\"text-field-support\">\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 {message}\n </ds-text>\n )}\n {showCounter && (\n <ds-text\n as=\"span\"\n class=\"text-field-count\"\n variant=\"text-body-small\"\n color={invalid ? 'negative' : 'secondary'}\n textId={`${this.generatedId}-count`}\n >\n {this.value.length}/{lengthLimit(this.maxLength)}\n </ds-text>\n )}\n </div>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}