@ds-mo/ui 15.3.0 → 15.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +506 -31
  4. package/dist/angular/ds-checkbox-group.d.ts +12 -0
  5. package/dist/angular/ds-checkbox-group.js +38 -0
  6. package/dist/angular/ds-checkbox.d.ts +1 -1
  7. package/dist/angular/ds-checkbox.js +3 -3
  8. package/dist/angular/ds-inline-banner-settings.d.ts +12 -0
  9. package/dist/angular/ds-inline-banner-settings.js +38 -0
  10. package/dist/angular/ds-radio.d.ts +1 -1
  11. package/dist/angular/ds-radio.js +3 -3
  12. package/dist/angular/ds-setting-row-checkbox.d.ts +12 -0
  13. package/dist/angular/ds-setting-row-checkbox.js +38 -0
  14. package/dist/angular/ds-setting-row-radio.d.ts +12 -0
  15. package/dist/angular/ds-setting-row-radio.js +38 -0
  16. package/dist/angular/ds-setting-row-toggle.d.ts +18 -0
  17. package/dist/angular/{ds-setting-row.js → ds-setting-row-toggle.js} +12 -12
  18. package/dist/angular/index.d.ts +1 -1
  19. package/dist/angular/index.js +5 -1
  20. package/dist/angular/proxies.d.ts +5 -1
  21. package/dist/angular/proxies.js +5 -1
  22. package/dist/components/ds-agent-activity.js +1 -1
  23. package/dist/components/ds-agent-questionnaire.js +1 -1
  24. package/dist/components/ds-agent-response.js +1 -1
  25. package/dist/components/ds-agent-response.js.map +1 -1
  26. package/dist/components/ds-agent-source-list.js +1 -1
  27. package/dist/components/ds-agent-tool-call.js +1 -1
  28. package/dist/components/ds-attachment-list.js +1 -1
  29. package/dist/components/ds-badge.js +1 -1
  30. package/dist/components/ds-banner.js +1 -1
  31. package/dist/components/ds-bar-action.js +1 -1
  32. package/dist/components/ds-bar-nav.js +1 -1
  33. package/dist/components/ds-bar-page-title.js +1 -1
  34. package/dist/components/ds-bar-title.js +1 -1
  35. package/dist/components/ds-bar-workflow.js +1 -1
  36. package/dist/components/ds-breadcrumb.js +1 -1
  37. package/dist/components/ds-button-filled.js +1 -1
  38. package/dist/components/ds-button-inverted.js +1 -1
  39. package/dist/components/ds-button-inverted.js.map +1 -1
  40. package/dist/components/ds-button-unfilled.js +1 -1
  41. package/dist/components/ds-calendar.js +1 -1
  42. package/dist/components/ds-card-action-center.js +1 -1
  43. package/dist/components/ds-card-action-center.js.map +1 -1
  44. package/dist/components/ds-card-chart.js +1 -1
  45. package/dist/components/ds-card-navigation.js +1 -1
  46. package/dist/components/ds-card-navigation.js.map +1 -1
  47. package/dist/components/ds-card-overview.js +1 -1
  48. package/dist/components/ds-card-overview.js.map +1 -1
  49. package/dist/components/ds-card-setting.js +1 -1
  50. package/dist/components/ds-card-setting.js.map +1 -1
  51. package/dist/components/ds-card-settings-scope.js +1 -1
  52. package/dist/components/ds-card-settings-scope.js.map +1 -1
  53. package/dist/components/ds-chart-legend.js +1 -1
  54. package/dist/components/ds-chart-legend.js.map +1 -1
  55. package/dist/components/ds-chart.js +1 -1
  56. package/dist/components/{ds-setting-row.d.ts → ds-checkbox-group.d.ts} +4 -4
  57. package/dist/components/ds-checkbox-group.js +2 -0
  58. package/dist/components/ds-checkbox-group.js.map +1 -0
  59. package/dist/components/ds-checkbox.js +1 -1
  60. package/dist/components/ds-chip.js +1 -1
  61. package/dist/components/ds-code-block.js +1 -1
  62. package/dist/components/ds-conversation-list-item.js +1 -1
  63. package/dist/components/ds-conversation-list-item.js.map +1 -1
  64. package/dist/components/ds-conversation-list-section.js +1 -1
  65. package/dist/components/ds-conversation-list.js +1 -1
  66. package/dist/components/ds-data-customize.js +1 -1
  67. package/dist/components/ds-data-filter.js +1 -1
  68. package/dist/components/ds-data-group.js +1 -1
  69. package/dist/components/ds-data-preferences.js +1 -1
  70. package/dist/components/ds-data-saved-views.js +1 -1
  71. package/dist/components/ds-data-search.js +1 -1
  72. package/dist/components/ds-data-search.js.map +1 -1
  73. package/dist/components/ds-data-sort.js +1 -1
  74. package/dist/components/ds-data-toolbar.js +1 -1
  75. package/dist/components/ds-divider.js +1 -1
  76. package/dist/components/ds-empty-state.js +1 -1
  77. package/dist/components/ds-field.js +1 -1
  78. package/dist/components/ds-filter-menu.js +1 -1
  79. package/dist/components/ds-inline-banner-settings.d.ts +11 -0
  80. package/dist/components/ds-inline-banner-settings.js +2 -0
  81. package/dist/components/ds-inline-banner-settings.js.map +1 -0
  82. package/dist/components/ds-input-date.js +1 -1
  83. package/dist/components/ds-input-date.js.map +1 -1
  84. package/dist/components/ds-input-time.js +1 -1
  85. package/dist/components/ds-input-time.js.map +1 -1
  86. package/dist/components/ds-input.js +1 -1
  87. package/dist/components/ds-map-cluster-marker.js +1 -1
  88. package/dist/components/ds-map-entity-marker.js +1 -1
  89. package/dist/components/ds-markdown.js +1 -1
  90. package/dist/components/ds-menu.js +1 -1
  91. package/dist/components/ds-message-actions.js +1 -1
  92. package/dist/components/ds-message-bubble.js +1 -1
  93. package/dist/components/ds-message-bubble.js.map +1 -1
  94. package/dist/components/ds-message-composer.js +1 -1
  95. package/dist/components/ds-message-composer.js.map +1 -1
  96. package/dist/components/ds-message-scroller.js +1 -1
  97. package/dist/components/ds-message.js +1 -1
  98. package/dist/components/ds-mobile-bar-nav.js +1 -1
  99. package/dist/components/ds-mobile-header.js +1 -1
  100. package/dist/components/ds-mobile-section-switcher.js +1 -1
  101. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  102. package/dist/components/ds-modal.js +1 -1
  103. package/dist/components/ds-pagination.js +1 -1
  104. package/dist/components/ds-panel-nav.js +1 -1
  105. package/dist/components/ds-panel-sub-nav.js +1 -1
  106. package/dist/components/ds-panel-sub-nav.js.map +1 -1
  107. package/dist/components/ds-panel-tool-header.js +1 -1
  108. package/dist/components/ds-panel-tool-search.js +1 -1
  109. package/dist/components/ds-panel-tool-search.js.map +1 -1
  110. package/dist/components/ds-panel-tools.js +1 -1
  111. package/dist/components/ds-paper-texture.js +1 -1
  112. package/dist/components/ds-radio-tile.js +1 -1
  113. package/dist/components/ds-radio-tile.js.map +1 -1
  114. package/dist/components/ds-radio.js +1 -1
  115. package/dist/components/ds-score.js +1 -1
  116. package/dist/components/ds-scroll-overlay.js +1 -1
  117. package/dist/components/ds-scroll-overlay.js.map +1 -1
  118. package/dist/components/ds-select.js +1 -1
  119. package/dist/components/ds-setting-row-checkbox.d.ts +11 -0
  120. package/dist/components/ds-setting-row-checkbox.js +2 -0
  121. package/dist/components/ds-setting-row-checkbox.js.map +1 -0
  122. package/dist/components/ds-setting-row-radio.d.ts +11 -0
  123. package/dist/components/ds-setting-row-radio.js +2 -0
  124. package/dist/components/ds-setting-row-radio.js.map +1 -0
  125. package/dist/components/ds-setting-row-toggle.d.ts +11 -0
  126. package/dist/components/ds-setting-row-toggle.js +2 -0
  127. package/dist/components/ds-setting-row-toggle.js.map +1 -0
  128. package/dist/components/ds-shell-app.js +1 -1
  129. package/dist/components/ds-shell-app.js.map +1 -1
  130. package/dist/components/ds-shell-page.js +1 -1
  131. package/dist/components/ds-shell-tools.js +1 -1
  132. package/dist/components/ds-skeleton.js +1 -1
  133. package/dist/components/ds-slider.js +1 -1
  134. package/dist/components/ds-swatch-picker.js +1 -1
  135. package/dist/components/ds-switch.js +1 -1
  136. package/dist/components/ds-tab-group.js +1 -1
  137. package/dist/components/ds-table.js +1 -1
  138. package/dist/components/ds-table.js.map +1 -1
  139. package/dist/components/ds-tag.js +1 -1
  140. package/dist/components/ds-text.js +1 -1
  141. package/dist/components/ds-textarea.js +1 -1
  142. package/dist/components/ds-textarea.js.map +1 -1
  143. package/dist/components/ds-time-picker.js +1 -1
  144. package/dist/components/ds-toast.js +1 -1
  145. package/dist/components/ds-tooltip-chart.js +1 -1
  146. package/dist/components/ds-tooltip.js +1 -1
  147. package/dist/components/ds-typing-indicator.js +1 -1
  148. package/dist/components/p-7TVdPhGR.js +2 -0
  149. package/dist/components/{p-DHapI2sf.js.map → p-7TVdPhGR.js.map} +1 -1
  150. package/dist/components/{p-7V1AhetH.js → p-B0BQCVkq.js} +2 -2
  151. package/dist/components/{p-Co5MiPNa.js → p-B0EpvBDs.js} +2 -2
  152. package/dist/components/{p-DFkw6wrS.js → p-B39iJO8F.js} +2 -2
  153. package/dist/components/p-B9TM6FqC.js +2 -0
  154. package/dist/components/{p-p_MwknM3.js.map → p-B9TM6FqC.js.map} +1 -1
  155. package/dist/components/{p-AmT4GlhM.js → p-B9y6azEw.js} +2 -2
  156. package/dist/components/p-BDdlJZyL.js +2 -0
  157. package/dist/components/{p-cuZva5tl.js.map → p-BDdlJZyL.js.map} +1 -1
  158. package/dist/components/{p-CrL9wxZg.js → p-BERXvOCf.js} +2 -2
  159. package/dist/components/{p-AM_ht6Im.js → p-BFHpU-uU.js} +2 -2
  160. package/dist/components/{p-B-HOVYoH.js → p-BQspV5U7.js} +2 -2
  161. package/dist/components/p-BWSIw8AQ.js +2 -0
  162. package/dist/components/p-BWSIw8AQ.js.map +1 -0
  163. package/dist/components/p-BhjqYTiY.js +2 -0
  164. package/dist/components/p-BhjqYTiY.js.map +1 -0
  165. package/dist/components/{p-C_gJD8l3.js → p-Bk3poU91.js} +2 -2
  166. package/dist/components/{p-Gb-vTuXr.js → p-BnuNaXR2.js} +2 -2
  167. package/dist/components/p-BwdnVqAY.js +2 -0
  168. package/dist/components/{p-BHI4LcGK.js.map → p-BwdnVqAY.js.map} +1 -1
  169. package/dist/components/p-C4huuwed.js +2 -0
  170. package/dist/components/{p-tJaC01aE.js.map → p-C4huuwed.js.map} +1 -1
  171. package/dist/components/{p-BsM37Prt.js → p-C8V4lkVy.js} +2 -2
  172. package/dist/components/p-CJ1NnOEW.js +2 -0
  173. package/dist/components/p-CJ1NnOEW.js.map +1 -0
  174. package/dist/components/p-CPamUzaj.js +2 -0
  175. package/dist/components/{p-BSuMDPaV.js.map → p-CPamUzaj.js.map} +1 -1
  176. package/dist/components/{p-BU1B6NW8.js → p-CUDocY23.js} +2 -2
  177. package/dist/components/{p-BU1B6NW8.js.map → p-CUDocY23.js.map} +1 -1
  178. package/dist/components/p-CX6ZxUQT.js +2 -0
  179. package/dist/components/p-CX6ZxUQT.js.map +1 -0
  180. package/dist/components/{p-C-c8SJ00.js → p-CZNZTcYS.js} +2 -2
  181. package/dist/components/{p-DQPzqcYR.js → p-CbCN9ew9.js} +2 -2
  182. package/dist/components/p-CeXf9-X3.js.map +1 -1
  183. package/dist/components/p-Cgn-BORA.js +2 -0
  184. package/dist/components/p-Cgn-BORA.js.map +1 -0
  185. package/dist/components/{p-CzQ_JF6A.js → p-Co1rUdOR.js} +2 -2
  186. package/dist/components/p-Co1rUdOR.js.map +1 -0
  187. package/dist/components/{p-D0KD-Nr_.js → p-CwdRaJER.js} +2 -2
  188. package/dist/components/p-D6FRqNhN.js +2 -0
  189. package/dist/components/p-D6FRqNhN.js.map +1 -0
  190. package/dist/components/{p-Cihjy4WY.js → p-D8OWhnID.js} +2 -2
  191. package/dist/components/p-DCyJ3_PL.js +2 -0
  192. package/dist/components/{p-fYZK3zqM.js.map → p-DCyJ3_PL.js.map} +1 -1
  193. package/dist/components/{p-BXSHN1OK.js → p-DIQiHX0q.js} +2 -2
  194. package/dist/components/{p-z8L-YMi3.js → p-DJDbskZf.js} +2 -2
  195. package/dist/components/p-DRdoGSGX.js +2 -0
  196. package/dist/components/{p-DWmYCOKz.js.map → p-DRdoGSGX.js.map} +1 -1
  197. package/dist/components/{p-Bm3KWMe4.js → p-DSZPO06T.js} +2 -2
  198. package/dist/components/{p-C3-dcROG.js → p-DSmDyI2o.js} +2 -2
  199. package/dist/components/{p-DcrdyDRw.js → p-DVEx-Xg9.js} +2 -2
  200. package/dist/components/{p-Bu4OmhKK.js → p-DXk1eml1.js} +2 -2
  201. package/dist/components/{p-B7QEpaMe.js → p-DYQa1DVF.js} +2 -2
  202. package/dist/components/p-DYQa1DVF.js.map +1 -0
  203. package/dist/components/p-DYsE6HLk.js +2 -0
  204. package/dist/components/p-DYsE6HLk.js.map +1 -0
  205. package/dist/components/p-DebLYW7A.js +2 -0
  206. package/dist/components/p-DebLYW7A.js.map +1 -0
  207. package/dist/components/{p-Bh1Fx0aW.js → p-DmSnHVW6.js} +2 -2
  208. package/dist/components/p-Dnt5xUBD.js +2 -0
  209. package/dist/components/{p-C4VeD49U.js.map → p-Dnt5xUBD.js.map} +1 -1
  210. package/dist/components/p-Doa2blZT.js +2 -0
  211. package/dist/components/{p-CztB8Pbq.js.map → p-Doa2blZT.js.map} +1 -1
  212. package/dist/components/{p-CCpJT31M.js → p-Dyqd-cub.js} +2 -2
  213. package/dist/components/{p-CCpJT31M.js.map → p-Dyqd-cub.js.map} +1 -1
  214. package/dist/components/p-DzvTC27M.js +2 -0
  215. package/dist/components/p-DzvTC27M.js.map +1 -0
  216. package/dist/components/p-JBki_jyY.js +2 -0
  217. package/dist/components/{p-BugKaVWc.js.map → p-JBki_jyY.js.map} +1 -1
  218. package/dist/components/p-MOJmB6vX.js +2 -0
  219. package/dist/components/{p-iGNHXFZA.js.map → p-MOJmB6vX.js.map} +1 -1
  220. package/dist/components/{p-BYJtvRQm.js → p-UJMEz8_O.js} +2 -2
  221. package/dist/components/{p-Bo7GxFBh.js → p-_IqSPt5V.js} +2 -2
  222. package/dist/components/p-g0jsfEXz.js +2 -0
  223. package/dist/components/{p-Fkkd3gMB.js.map → p-g0jsfEXz.js.map} +1 -1
  224. package/dist/components/{p-lADW-TI8.js → p-pp1IQN4Z.js} +2 -2
  225. package/dist/docs/components.json +701 -13
  226. package/dist/lib/shell/index.js +1 -1
  227. package/dist/lib/shell/index.js.map +1 -1
  228. package/dist/lint/index.js +1 -1
  229. package/dist/mcp-data/registry/agent-activity.json +1 -1
  230. package/dist/mcp-data/registry/agent-questionnaire.json +1 -1
  231. package/dist/mcp-data/registry/agent-response.json +2 -2
  232. package/dist/mcp-data/registry/agent-source-list.json +1 -1
  233. package/dist/mcp-data/registry/agent-tool-call.json +1 -1
  234. package/dist/mcp-data/registry/attachment-list.json +1 -1
  235. package/dist/mcp-data/registry/avatar.json +1 -1
  236. package/dist/mcp-data/registry/badge.json +1 -1
  237. package/dist/mcp-data/registry/banner.json +1 -1
  238. package/dist/mcp-data/registry/bar-action.json +1 -1
  239. package/dist/mcp-data/registry/bar-nav.json +4 -4
  240. package/dist/mcp-data/registry/bar-page-title.json +3 -3
  241. package/dist/mcp-data/registry/bar-title.json +3 -3
  242. package/dist/mcp-data/registry/bar-workflow.json +1 -1
  243. package/dist/mcp-data/registry/breadcrumb.json +1 -1
  244. package/dist/mcp-data/registry/button-filled.json +1 -1
  245. package/dist/mcp-data/registry/button-inverted.json +1 -1
  246. package/dist/mcp-data/registry/button-unfilled.json +8 -8
  247. package/dist/mcp-data/registry/calendar.json +1 -1
  248. package/dist/mcp-data/registry/card-action-center.json +1 -1
  249. package/dist/mcp-data/registry/card-chart.json +1 -1
  250. package/dist/mcp-data/registry/card-navigation.json +1 -1
  251. package/dist/mcp-data/registry/card-overview.json +1 -1
  252. package/dist/mcp-data/registry/card-setting.json +22 -8
  253. package/dist/mcp-data/registry/card-settings-scope.json +1 -1
  254. package/dist/mcp-data/registry/chart-legend.json +1 -1
  255. package/dist/mcp-data/registry/chart.json +1 -1
  256. package/dist/mcp-data/registry/checkbox-group.json +246 -0
  257. package/dist/mcp-data/registry/checkbox.json +25 -5
  258. package/dist/mcp-data/registry/chip.json +1 -1
  259. package/dist/mcp-data/registry/code-block.json +1 -1
  260. package/dist/mcp-data/registry/conversation-list-item.json +1 -1
  261. package/dist/mcp-data/registry/conversation-list-section.json +1 -1
  262. package/dist/mcp-data/registry/conversation-list.json +1 -1
  263. package/dist/mcp-data/registry/data-customize.json +1 -1
  264. package/dist/mcp-data/registry/data-filter.json +1 -1
  265. package/dist/mcp-data/registry/data-group.json +1 -1
  266. package/dist/mcp-data/registry/data-preferences.json +1 -1
  267. package/dist/mcp-data/registry/data-saved-views.json +1 -1
  268. package/dist/mcp-data/registry/data-search.json +1 -1
  269. package/dist/mcp-data/registry/data-sort.json +1 -1
  270. package/dist/mcp-data/registry/data-toolbar.json +1 -1
  271. package/dist/mcp-data/registry/divider.json +1 -1
  272. package/dist/mcp-data/registry/empty-state.json +1 -1
  273. package/dist/mcp-data/registry/field.json +1 -1
  274. package/dist/mcp-data/registry/filter-menu.json +1 -1
  275. package/dist/mcp-data/registry/icon.json +1 -1
  276. package/dist/mcp-data/registry/inline-banner-settings.json +175 -0
  277. package/dist/mcp-data/registry/input-date.json +1 -1
  278. package/dist/mcp-data/registry/input-time.json +1 -1
  279. package/dist/mcp-data/registry/input.json +1 -1
  280. package/dist/mcp-data/registry/loader.json +1 -1
  281. package/dist/mcp-data/registry/map-cluster-marker.json +1 -1
  282. package/dist/mcp-data/registry/map-entity-marker.json +1 -1
  283. package/dist/mcp-data/registry/markdown.json +1 -1
  284. package/dist/mcp-data/registry/menu.json +1 -1
  285. package/dist/mcp-data/registry/message-actions.json +1 -1
  286. package/dist/mcp-data/registry/message-bubble.json +4 -4
  287. package/dist/mcp-data/registry/message-composer.json +6 -6
  288. package/dist/mcp-data/registry/message-scroller.json +1 -1
  289. package/dist/mcp-data/registry/message.json +2 -2
  290. package/dist/mcp-data/registry/mobile-bar-nav.json +1 -1
  291. package/dist/mcp-data/registry/mobile-header.json +1 -1
  292. package/dist/mcp-data/registry/mobile-section-switcher.json +1 -1
  293. package/dist/mcp-data/registry/mobile-sheet-nav.json +1 -1
  294. package/dist/mcp-data/registry/modal.json +1 -1
  295. package/dist/mcp-data/registry/pagination.json +1 -1
  296. package/dist/mcp-data/registry/panel-nav.json +3 -3
  297. package/dist/mcp-data/registry/panel-sub-nav.json +1 -1
  298. package/dist/mcp-data/registry/panel-tool-header.json +3 -3
  299. package/dist/mcp-data/registry/panel-tool-search.json +2 -2
  300. package/dist/mcp-data/registry/panel-tools.json +3 -3
  301. package/dist/mcp-data/registry/paper-texture.json +1 -1
  302. package/dist/mcp-data/registry/radio-tile.json +5 -4
  303. package/dist/mcp-data/registry/radio.json +50 -8
  304. package/dist/mcp-data/registry/registry.json +518 -31
  305. package/dist/mcp-data/registry/score.json +1 -1
  306. package/dist/mcp-data/registry/scroll-overlay.json +1 -1
  307. package/dist/mcp-data/registry/select.json +1 -1
  308. package/dist/mcp-data/registry/setting-row-checkbox.json +197 -0
  309. package/dist/mcp-data/registry/setting-row-radio.json +196 -0
  310. package/dist/mcp-data/registry/{setting-row.json → setting-row-toggle.json} +45 -25
  311. package/dist/mcp-data/registry/shell-app.json +3 -3
  312. package/dist/mcp-data/registry/shell-page.json +1 -1
  313. package/dist/mcp-data/registry/shell-tools.json +1 -1
  314. package/dist/mcp-data/registry/skeleton.json +1 -1
  315. package/dist/mcp-data/registry/slider.json +1 -1
  316. package/dist/mcp-data/registry/swatch-picker.json +1 -1
  317. package/dist/mcp-data/registry/switch.json +3 -3
  318. package/dist/mcp-data/registry/tab-group.json +1 -1
  319. package/dist/mcp-data/registry/table.json +1 -1
  320. package/dist/mcp-data/registry/tag.json +1 -1
  321. package/dist/mcp-data/registry/text.json +1 -1
  322. package/dist/mcp-data/registry/textarea.json +1 -1
  323. package/dist/mcp-data/registry/time-picker.json +1 -1
  324. package/dist/mcp-data/registry/toast.json +1 -1
  325. package/dist/mcp-data/registry/tooltip-chart.json +1 -1
  326. package/dist/mcp-data/registry/tooltip.json +1 -1
  327. package/dist/mcp-data/registry/typing-indicator.json +1 -1
  328. package/dist/react/components.d.ts +5 -1
  329. package/dist/react/components.js +5 -1
  330. package/dist/react/ds-checkbox-group.d.ts +9 -0
  331. package/dist/react/ds-checkbox-group.js +12 -0
  332. package/dist/react/ds-inline-banner-settings.d.ts +9 -0
  333. package/dist/react/ds-inline-banner-settings.js +12 -0
  334. package/dist/react/ds-setting-row-checkbox.d.ts +9 -0
  335. package/dist/react/ds-setting-row-checkbox.js +12 -0
  336. package/dist/react/ds-setting-row-radio.d.ts +9 -0
  337. package/dist/react/ds-setting-row-radio.js +12 -0
  338. package/dist/react/ds-setting-row-toggle.d.ts +12 -0
  339. package/dist/react/ds-setting-row-toggle.js +12 -0
  340. package/dist/types/components/BarPageTitle/BarPageTitle.d.ts +2 -0
  341. package/dist/types/components/BarTitle/bar-title-action-chrome.d.ts +4 -0
  342. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +5 -2
  343. package/dist/types/components/CardSetting/CardSetting.d.ts +12 -2
  344. package/dist/types/components/Checkbox/Checkbox.d.ts +2 -0
  345. package/dist/types/components/CheckboxGroup/CheckboxGroup.d.ts +20 -0
  346. package/dist/types/components/InlineBannerSettings/InlineBannerSettings.d.ts +6 -0
  347. package/dist/types/components/Radio/Radio.d.ts +8 -0
  348. package/dist/types/components/SettingRowCheckbox/SettingRowCheckbox.d.ts +19 -0
  349. package/dist/types/components/SettingRowRadio/SettingRowRadio.d.ts +19 -0
  350. package/dist/types/components/{SettingRow/SettingRow.d.ts → SettingRowToggle/SettingRowToggle.d.ts} +5 -2
  351. package/dist/types/components/Switch/Switch.d.ts +7 -0
  352. package/dist/types/components.d.ts +290 -20
  353. package/dist/vue/components.d.ts +5 -1
  354. package/dist/vue/components.js +5 -1
  355. package/dist/vue/{ds-setting-row.d.ts → ds-checkbox-group.d.ts} +1 -1
  356. package/dist/vue/ds-checkbox-group.js +12 -0
  357. package/dist/vue/ds-checkbox.js +1 -0
  358. package/dist/vue/ds-inline-banner-settings.d.ts +3 -0
  359. package/dist/vue/ds-inline-banner-settings.js +8 -0
  360. package/dist/vue/ds-radio.js +2 -0
  361. package/dist/vue/ds-setting-row-checkbox.d.ts +3 -0
  362. package/dist/vue/ds-setting-row-checkbox.js +11 -0
  363. package/dist/vue/ds-setting-row-radio.d.ts +3 -0
  364. package/dist/vue/ds-setting-row-radio.js +11 -0
  365. package/dist/vue/ds-setting-row-toggle.d.ts +3 -0
  366. package/dist/vue/ds-setting-row-toggle.js +15 -0
  367. package/package.json +3 -3
  368. package/dist/angular/ds-setting-row.d.ts +0 -18
  369. package/dist/components/ds-setting-row.js +0 -2
  370. package/dist/components/ds-setting-row.js.map +0 -1
  371. package/dist/components/p-3bsypMrY.js +0 -2
  372. package/dist/components/p-3bsypMrY.js.map +0 -1
  373. package/dist/components/p-B7QEpaMe.js.map +0 -1
  374. package/dist/components/p-B7bXN-vf.js +0 -2
  375. package/dist/components/p-B7bXN-vf.js.map +0 -1
  376. package/dist/components/p-BHI4LcGK.js +0 -2
  377. package/dist/components/p-BSuMDPaV.js +0 -2
  378. package/dist/components/p-BVwg5XVz.js +0 -2
  379. package/dist/components/p-BVwg5XVz.js.map +0 -1
  380. package/dist/components/p-BugKaVWc.js +0 -2
  381. package/dist/components/p-C4VeD49U.js +0 -2
  382. package/dist/components/p-CI7c9kp-.js +0 -2
  383. package/dist/components/p-CI7c9kp-.js.map +0 -1
  384. package/dist/components/p-CJD0kLeV.js +0 -2
  385. package/dist/components/p-CJD0kLeV.js.map +0 -1
  386. package/dist/components/p-Cc3ZUQlJ.js +0 -2
  387. package/dist/components/p-Cc3ZUQlJ.js.map +0 -1
  388. package/dist/components/p-CzQ_JF6A.js.map +0 -1
  389. package/dist/components/p-CztB8Pbq.js +0 -2
  390. package/dist/components/p-DCLRAH5i.js +0 -2
  391. package/dist/components/p-DCLRAH5i.js.map +0 -1
  392. package/dist/components/p-DHapI2sf.js +0 -2
  393. package/dist/components/p-DWmYCOKz.js +0 -2
  394. package/dist/components/p-DX2RyZba.js +0 -2
  395. package/dist/components/p-DX2RyZba.js.map +0 -1
  396. package/dist/components/p-Dcn1eDVt.js +0 -2
  397. package/dist/components/p-Dcn1eDVt.js.map +0 -1
  398. package/dist/components/p-Fkkd3gMB.js +0 -2
  399. package/dist/components/p-cuZva5tl.js +0 -2
  400. package/dist/components/p-fYZK3zqM.js +0 -2
  401. package/dist/components/p-iGNHXFZA.js +0 -2
  402. package/dist/components/p-p_MwknM3.js +0 -2
  403. package/dist/components/p-tJaC01aE.js +0 -2
  404. package/dist/react/ds-setting-row.d.ts +0 -12
  405. package/dist/react/ds-setting-row.js +0 -12
  406. package/dist/vue/ds-setting-row.js +0 -14
  407. /package/dist/components/{p-7V1AhetH.js.map → p-B0BQCVkq.js.map} +0 -0
  408. /package/dist/components/{p-Co5MiPNa.js.map → p-B0EpvBDs.js.map} +0 -0
  409. /package/dist/components/{p-DFkw6wrS.js.map → p-B39iJO8F.js.map} +0 -0
  410. /package/dist/components/{p-AmT4GlhM.js.map → p-B9y6azEw.js.map} +0 -0
  411. /package/dist/components/{p-CrL9wxZg.js.map → p-BERXvOCf.js.map} +0 -0
  412. /package/dist/components/{p-AM_ht6Im.js.map → p-BFHpU-uU.js.map} +0 -0
  413. /package/dist/components/{p-B-HOVYoH.js.map → p-BQspV5U7.js.map} +0 -0
  414. /package/dist/components/{p-C_gJD8l3.js.map → p-Bk3poU91.js.map} +0 -0
  415. /package/dist/components/{p-Gb-vTuXr.js.map → p-BnuNaXR2.js.map} +0 -0
  416. /package/dist/components/{p-BsM37Prt.js.map → p-C8V4lkVy.js.map} +0 -0
  417. /package/dist/components/{p-C-c8SJ00.js.map → p-CZNZTcYS.js.map} +0 -0
  418. /package/dist/components/{p-DQPzqcYR.js.map → p-CbCN9ew9.js.map} +0 -0
  419. /package/dist/components/{p-D0KD-Nr_.js.map → p-CwdRaJER.js.map} +0 -0
  420. /package/dist/components/{p-Cihjy4WY.js.map → p-D8OWhnID.js.map} +0 -0
  421. /package/dist/components/{p-BXSHN1OK.js.map → p-DIQiHX0q.js.map} +0 -0
  422. /package/dist/components/{p-z8L-YMi3.js.map → p-DJDbskZf.js.map} +0 -0
  423. /package/dist/components/{p-Bm3KWMe4.js.map → p-DSZPO06T.js.map} +0 -0
  424. /package/dist/components/{p-C3-dcROG.js.map → p-DSmDyI2o.js.map} +0 -0
  425. /package/dist/components/{p-DcrdyDRw.js.map → p-DVEx-Xg9.js.map} +0 -0
  426. /package/dist/components/{p-Bu4OmhKK.js.map → p-DXk1eml1.js.map} +0 -0
  427. /package/dist/components/{p-Bh1Fx0aW.js.map → p-DmSnHVW6.js.map} +0 -0
  428. /package/dist/components/{p-BYJtvRQm.js.map → p-UJMEz8_O.js.map} +0 -0
  429. /package/dist/components/{p-Bo7GxFBh.js.map → p-_IqSPt5V.js.map} +0 -0
  430. /package/dist/components/{p-lADW-TI8.js.map → p-pp1IQN4Z.js.map} +0 -0
@@ -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":[]}
@@ -0,0 +1,2 @@
1
+ import{p as e,H as i,c as s,h as n,a as o,t}from"./index.js";import{d as a}from"./p-CqW2eyiF.js";import{d as r}from"./p-CwdRaJER.js";import{d}from"./p-D6FRqNhN.js";import{d as c}from"./p-DjkUFlDW.js";import{d as l}from"./p-0XTyQNRG.js";import{d as v}from"./p-DRdoGSGX.js";import{d as h}from"./p-D8OWhnID.js";import{d as m}from"./p-DIQiHX0q.js";const b=()=>`.sc-ds-mobile-sheet-nav-h,.sc-ds-mobile-sheet-nav:where(.ds-table),.sc-ds-mobile-sheet-nav:where(.tooltip-popup),.sc-ds-mobile-sheet-nav: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)}.ds-control--lg.sc-ds-mobile-sheet-nav,.ds-control--lg.sc-ds-mobile-sheet-nav-h,.ds-control--md.sc-ds-mobile-sheet-nav-h,.ds-control--md.sc-ds-mobile-sheet-nav,.ds-control--sm.sc-ds-mobile-sheet-nav-h,.ds-control--sm.sc-ds-mobile-sheet-nav,.ds-control--xs.sc-ds-mobile-sheet-nav-h,.ds-control--xs.sc-ds-mobile-sheet-nav{--ds-control-radius:var(--ds-radius-control)}.ds-control--lg.sc-ds-mobile-sheet-nav-h,.ds-control--lg.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h,.ds-control--md.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h,.ds-control--sm.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h,.ds-control--xs.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h,.ds-chrome-space--sm.sc-ds-mobile-sheet-nav{--ds-chrome-padding:var(--dimension-space-050);--ds-chrome-gap:var(--dimension-space-050)}.ds-chrome-space--md.sc-ds-mobile-sheet-nav-h,.ds-chrome-space--md.sc-ds-mobile-sheet-nav{--ds-chrome-padding:var(--dimension-space-100);--ds-chrome-gap:var(--dimension-space-100)}.ds-chrome-space--lg.sc-ds-mobile-sheet-nav-h,.ds-chrome-space--lg.sc-ds-mobile-sheet-nav{--ds-chrome-padding:var(--dimension-space-200);--ds-chrome-gap:var(--dimension-space-200)}.ds-chrome-row.sc-ds-mobile-sheet-nav-h,.ds-chrome-row.sc-ds-mobile-sheet-nav,.ds-chrome-column.sc-ds-mobile-sheet-nav-h,.ds-chrome-column.sc-ds-mobile-sheet-nav,.ds-chrome-grid.sc-ds-mobile-sheet-nav-h,.ds-chrome-grid.sc-ds-mobile-sheet-nav{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-mobile-sheet-nav-h,.ds-chrome-row.sc-ds-mobile-sheet-nav{flex-direction:row;align-items:center}.ds-chrome-column.sc-ds-mobile-sheet-nav-h,.ds-chrome-column.sc-ds-mobile-sheet-nav{flex-direction:column}.ds-chrome-grid.sc-ds-mobile-sheet-nav-h,.ds-chrome-grid.sc-ds-mobile-sheet-nav{display:grid;align-items:center}@media (forced-colors: active){.sc-ds-mobile-sheet-nav:root,.sc-ds-mobile-sheet-nav-h,.ds-forced-colors-scope.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-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-mobile-sheet-nav-h,.ds-focus-ring.sc-ds-mobile-sheet-nav,.ds-focus-ring-inset.sc-ds-mobile-sheet-nav-h,.ds-focus-ring-inset.sc-ds-mobile-sheet-nav{outline:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.ds-focus-ring.sc-ds-mobile-sheet-nav-h:focus-visible,.ds-focus-ring.sc-ds-mobile-sheet-nav: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-mobile-sheet-nav-h,.ds-focus-ring.ds-focus-ring--visible.sc-ds-mobile-sheet-nav{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-mobile-sheet-nav-h:focus-visible,.ds-focus-ring-inset.sc-ds-mobile-sheet-nav:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-mobile-sheet-nav-h:focus-visible::after,.ds-focus-ring-inset.sc-ds-mobile-sheet-nav: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-mobile-sheet-nav-h,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-mobile-sheet-nav{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-mobile-sheet-nav-h::after,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-mobile-sheet-nav::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-mobile-sheet-nav-h{--ds-focus-ring-color:var(--ds-forced-color-selected)}}@media (forced-colors: active){.sc-ds-mobile-sheet-nav:root,.sc-ds-mobile-sheet-nav-h,.ds-forced-colors-scope.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h,.ds-interaction-fill.sc-ds-mobile-sheet-nav{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-mobile-sheet-nav-h::before,.ds-interaction-fill.sc-ds-mobile-sheet-nav::before,.ds-interaction-fill.sc-ds-mobile-sheet-nav-h::after,.ds-interaction-fill.sc-ds-mobile-sheet-nav::after{content:'';position:absolute;inset:0;border-radius:inherit;background:transparent;pointer-events:none;cursor:inherit;transition:none}.ds-interaction-fill.sc-ds-mobile-sheet-nav-h::before,.ds-interaction-fill.sc-ds-mobile-sheet-nav::before{z-index:1}.ds-interaction-fill.sc-ds-mobile-sheet-nav-h::after,.ds-interaction-fill.sc-ds-mobile-sheet-nav::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-mobile-sheet-nav-h,.ds-interaction-fill--bordered.sc-ds-mobile-sheet-nav{--ds-interaction-border-width:var(--dimension-stroke-width-012);--ds-interaction-border-color:var(--color-border-secondary)}.ds-interaction-fill--selected.sc-ds-mobile-sheet-nav-h::before,.ds-interaction-fill--selected.sc-ds-mobile-sheet-nav::before{background:var(--ds-interaction-active)}.ds-interaction-fill--selected.sc-ds-mobile-sheet-nav-h,.ds-interaction-fill--selected.sc-ds-mobile-sheet-nav{--ds-interaction-dot-ring:var(--ds-interaction-active)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill.sc-ds-mobile-sheet-nav-h:hover:not(:disabled)::after,.ds-interaction-fill.sc-ds-mobile-sheet-nav:hover:not(:disabled)::after{background:var(--ds-interaction-hover)}}.ds-interaction-fill.sc-ds-mobile-sheet-nav-h:active:not(:disabled)::after,.ds-interaction-fill.sc-ds-mobile-sheet-nav:active:not(:disabled)::after{background:var(--ds-interaction-pressed)}.ds-interaction-fill--grouped.sc-ds-mobile-sheet-nav-h::after,.ds-interaction-fill--grouped.sc-ds-mobile-sheet-nav::after,.ds-interaction-fill--grouped.sc-ds-mobile-sheet-nav-h:active:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-mobile-sheet-nav:active:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill--grouped.sc-ds-mobile-sheet-nav-h:hover:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-mobile-sheet-nav:hover:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}}.ds-interaction-fill--grouped.sc-ds-mobile-sheet-nav-h,.ds-interaction-fill--grouped.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h>.ds-interaction-fill__content.sc-ds-mobile-sheet-nav,.ds-interaction-fill.sc-ds-mobile-sheet-nav>.ds-interaction-fill__content.sc-ds-mobile-sheet-nav,.ds-interaction-fill__content.sc-ds-mobile-sheet-nav{position:relative;z-index:2;cursor:inherit}.ds-interaction-fill--on-faint.sc-ds-mobile-sheet-nav-h,.ds-interaction-fill--on-faint.sc-ds-mobile-sheet-nav{--ds-interaction-active:var(--color-interaction-active)}.ds-interaction-fill--on-medium.sc-ds-mobile-sheet-nav-h,.ds-interaction-fill--on-medium.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h,.ds-interaction-fill--on-bold.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h,.ds-interaction-fill--on-strong.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h,.ds-interaction-fill--on-translucent.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h,.ds-interaction-fill--on-inverted.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h,.ds-interaction-fill--on-media.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h,.ds-interaction-fill--on-always-dark.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h,.ds-interaction-fill--on-chrome.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h,.ds-interaction-fill--on-navigation.sc-ds-mobile-sheet-nav{--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-mobile-sheet-nav-h:not(:disabled)::after,.ds-interaction-fill.ds-interaction-fill--surface-open.sc-ds-mobile-sheet-nav:not(:disabled)::after{background:var(--ds-interaction-pressed)}@media (forced-colors: active){.ds-interaction-fill.sc-ds-mobile-sheet-nav-h::after,.ds-interaction-fill.sc-ds-mobile-sheet-nav::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-mobile-sheet-nav-h:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill--surface-open.sc-ds-mobile-sheet-nav: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-mobile-sheet-nav-h::before,.ds-interaction-fill--selected.sc-ds-mobile-sheet-nav::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-mobile-sheet-nav-h:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill.sc-ds-mobile-sheet-nav: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)}}.ds-nav-disclosure.sc-ds-mobile-sheet-nav,.ds-nav-disclosure-divider.sc-ds-mobile-sheet-nav{--ds-nav-disclosure-duration:calc( var(--effect-animation-duration-short-3) * 2 + var(--effect-animation-duration-short-2) );--ds-nav-disclosure-wait:calc( var(--effect-animation-duration-short-3) + var(--effect-animation-duration-short-1) );--ds-nav-disclosure-fade:var(--ds-nav-disclosure-duration);--ds-nav-disclosure-stagger:var(--effect-animation-duration-short-1)}.ds-nav-disclosure.sc-ds-mobile-sheet-nav{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--ds-nav-disclosure-duration) var(--effect-animation-easing-ease-in-out) var(--ds-nav-disclosure-wait)}.ds-nav-disclosure--open.sc-ds-mobile-sheet-nav{grid-template-rows:1fr;transition-delay:var(--effect-animation-duration-instant)}.ds-nav-disclosure.sc-ds-mobile-sheet-nav .ds-nav-disclosure__item.sc-ds-mobile-sheet-nav{opacity:0;pointer-events:none;transition:opacity var(--ds-nav-disclosure-fade) var(--effect-animation-easing-ease-out) calc(var(--ds-nav-disclosure-reverse-index) * var(--ds-nav-disclosure-stagger)), color var(--effect-motion-short-1)}.ds-nav-disclosure--open.sc-ds-mobile-sheet-nav .ds-nav-disclosure__item.sc-ds-mobile-sheet-nav{opacity:1;pointer-events:auto;transition-delay:calc( var(--ds-nav-disclosure-wait) + var(--ds-nav-disclosure-index) * var(--ds-nav-disclosure-stagger) ), var(--effect-animation-duration-instant)}.ds-nav-disclosure-divider.sc-ds-mobile-sheet-nav{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows var(--ds-nav-disclosure-duration) var(--effect-animation-easing-ease-in-out) var(--ds-nav-disclosure-wait), opacity var(--ds-nav-disclosure-duration) var(--effect-animation-easing-ease-out)}.ds-nav-disclosure-divider--open.sc-ds-mobile-sheet-nav{grid-template-rows:1fr;opacity:1;transition-delay:var(--effect-animation-duration-instant), var(--effect-animation-duration-instant)}.ds-nav-disclosure-divider__clip.sc-ds-mobile-sheet-nav{min-height:0;overflow:hidden}@media (prefers-reduced-motion: reduce){.ds-nav-disclosure.sc-ds-mobile-sheet-nav,.ds-nav-disclosure-divider.sc-ds-mobile-sheet-nav,.ds-nav-disclosure.sc-ds-mobile-sheet-nav .ds-nav-disclosure__item.sc-ds-mobile-sheet-nav{transition-duration:var(--effect-animation-duration-instant) !important;transition-delay:var(--effect-animation-duration-instant) !important}}.sc-ds-mobile-sheet-nav-h{display:block;min-width:0;min-height:0;height:100%;background:var(--color-background-primary)}.sc-ds-mobile-sheet-nav-h:not([open]){display:none}.mobile-sheet-nav.sc-ds-mobile-sheet-nav{display:grid;grid-template-rows:auto minmax(0, 1fr);height:100%;min-height:0;background:var(--color-background-primary)}.mobile-sheet-nav__header.sc-ds-mobile-sheet-nav{position:relative;grid-template-columns:minmax(0, 1fr) auto minmax(0, 1fr)}.mobile-sheet-nav__header--expanded-context.sc-ds-mobile-sheet-nav{grid-template-columns:minmax(var(--dimension-size-500), 1fr) minmax(0, 4fr) minmax(var(--dimension-size-500), 1fr)}.mobile-sheet-nav__header--expanded-context.sc-ds-mobile-sheet-nav .mobile-sheet-nav__context.sc-ds-mobile-sheet-nav{width:100%}.mobile-sheet-nav__header.sc-ds-mobile-sheet-nav::after{content:'';position:absolute;inset-inline:0;inset-block-end:0;height:var(--dimension-stroke-width-012);background:var(--color-border-tertiary);pointer-events:none}.mobile-sheet-nav__brand.sc-ds-mobile-sheet-nav{display:flex;align-items:center;justify-content:flex-start;min-width:0}.mobile-sheet-nav__logo.sc-ds-mobile-sheet-nav{display:inline-flex;align-items:center;justify-content:center;width:var(--dimension-size-500);height:var(--dimension-size-500);padding:var(--dimension-space-100);box-sizing:border-box;color:var(--color-foreground-primary)}.mobile-sheet-nav__logo-mark.sc-ds-mobile-sheet-nav{width:var(--dimension-iconography-lg);height:var(--dimension-iconography-lg);flex:0 0 auto}.mobile-sheet-nav__context.sc-ds-mobile-sheet-nav{justify-self:center}.mobile-sheet-nav__actions.sc-ds-mobile-sheet-nav{display:flex;align-items:center;justify-content:flex-end;gap:var(--dimension-space-050);min-width:0}.mobile-sheet-nav__body.sc-ds-mobile-sheet-nav{min-height:0;overflow:auto;overscroll-behavior:contain}.mobile-sheet-nav__sections.sc-ds-mobile-sheet-nav{display:grid;gap:var(--dimension-space-400)}.mobile-sheet-nav__items.sc-ds-mobile-sheet-nav{display:grid;gap:var(--dimension-space-100)}.mobile-sheet-nav__item.sc-ds-mobile-sheet-nav{appearance:none;width:100%;height:var(--ds-control-height);min-height:var(--ds-control-height);padding-inline:var(--ds-control-padding-inline);border:0;border-radius:var(--ds-control-radius);background:transparent;color:var(--color-foreground-secondary);display:flex;align-items:center;justify-content:flex-start;gap:var(--ds-control-gap);cursor:default;text-align:start;box-sizing:border-box}.mobile-sheet-nav__item--selected.sc-ds-mobile-sheet-nav{color:var(--color-foreground-primary)}.mobile-sheet-nav__item-label.sc-ds-mobile-sheet-nav{min-width:0;padding-inline:var(--ds-control-label-inset)}.mobile-sheet-nav__dot.sc-ds-mobile-sheet-nav{margin-inline-start:auto}.mobile-sheet-nav__children.sc-ds-mobile-sheet-nav{display:flex;flex-direction:column;gap:var(--dimension-space-100);min-height:0;overflow:hidden}.mobile-sheet-nav__child.sc-ds-mobile-sheet-nav{flex:0 0 var(--ds-control-height);padding-inline-start:calc( var(--ds-control-padding-inline) + var(--dimension-iconography-lg) + var(--ds-control-gap) )}.mobile-sheet-nav__child.sc-ds-mobile-sheet-nav:first-child{margin-block-start:var(--dimension-space-100)}.mobile-sheet-nav__child.sc-ds-mobile-sheet-nav:disabled{color:var(--color-foreground-tertiary)}.mobile-sheet-nav__parent--muted.sc-ds-mobile-sheet-nav{color:var(--color-foreground-secondary)}.mobile-sheet-nav__divider-line.sc-ds-mobile-sheet-nav{display:block;height:var(--dimension-stroke-width-012);margin-inline:var(--dimension-space-100);background:var(--color-border-tertiary)}.mobile-sheet-nav__divider--before.sc-ds-mobile-sheet-nav .mobile-sheet-nav__divider-line.sc-ds-mobile-sheet-nav{margin-block:var(--dimension-space-050) var(--dimension-space-150)}.mobile-sheet-nav__divider--after.sc-ds-mobile-sheet-nav .mobile-sheet-nav__divider-line.sc-ds-mobile-sheet-nav{margin-block:var(--dimension-space-150) var(--dimension-space-050)}`;const u=[{id:"dashboard",label:"Dashboard",icon:"Dashboard",variant:"icon"},{id:"settings",label:"Settings",icon:"Gear",variant:"icon"}];let f=0;const p=e(class e extends i{constructor(e){super();if(e!==false){this.__registerHost()}this.dsAreaSelect=s(this,"dsAreaSelect",7);this.dsNavChildSelect=s(this,"dsNavChildSelect",7);this.dsBrowseContextChange=s(this,"dsBrowseContextChange",7);this.dsClose=s(this,"dsClose",7);this.open=false;this.browseContext="dashboard";this.dashboardGroups=[];this.settingsGroups=[];this.currentUrl="";this.presentation="flat";this.routeSelectionActive=true;this.navigationLabel="Application navigation";this.dashboardLabel="Dashboard";this.settingsLabel="Settings";this.accountLabel="Account";this.helpLabel="Help & Support";this.showAccount=true;this.expandedParentId="";this.instanceId=f++;this.handleContextChange=e=>{const i=e.detail==="settings"?"settings":"dashboard";if(i===this.browseContext)return;this.dsBrowseContextChange.emit(i)}}get groups(){return this.browseContext==="settings"?this.settingsGroups:this.dashboardGroups}get selection(){return a(this.routeSelectionActive?this.currentUrl:"",this.groups.flatMap((e=>e.items)))}componentWillLoad(){this.syncExpandedParent()}syncExpandedParent(){this.expandedParentId=this.presentation==="nested"?this.selection.parentId:""}handleOpenChange(e){if(!e)return;this.syncExpandedParent();requestAnimationFrame((()=>{const e=this.el.querySelector('[aria-current="page"]');const i=this.el.querySelector(".mobile-sheet-nav__item:not(:disabled)");(e??i)?.focus({preventScroll:true})}))}handleKeyDown(e){if(!this.open||e.key!=="Escape")return;e.preventDefault();this.dsClose.emit()}renderItem(e){const i=e.id===this.selection.parentId;const s=this.presentation==="nested"&&!!e.children?.length;const o=s&&e.id===this.expandedParentId;return n("button",{id:this.parentId(e.id),type:"button",class:{"mobile-sheet-nav__item":true,"mobile-sheet-nav__item--selected":i,"mobile-sheet-nav__parent--muted":this.presentation==="nested"&&this.expandedParentId!==""&&this.expandedParentId!==e.id,"ds-control--lg":true,"ds-focus-ring-inset":true,"ds-interaction-fill":true},"aria-current":i&&!s?"page":undefined,"aria-expanded":s?String(o):undefined,"aria-controls":s?this.childrenId(e.id):undefined,onClick:()=>s?this.expandedParentId=o?"":e.id:this.dsAreaSelect.emit(e.id)},n("ds-icon",{class:"ds-interaction-fill__content",name:e.icon,size:"lg",color:"inherit"}),n("ds-text",{class:"mobile-sheet-nav__item-label ds-interaction-fill__content",as:"span",variant:"text-body-large",emphasis:i,color:"inherit",lineTruncation:1},e.label),e.dot&&n("ds-badge",{class:"mobile-sheet-nav__dot ds-interaction-fill__content",variant:"dot",hasRing:false,label:"","aria-hidden":"true"}))}parentId(e){return`mobile-sheet-${this.instanceId}-${encodeURIComponent(e)}`}childrenId(e){return`${this.parentId(e)}-children`}renderChild(e,i,s){const o=e.id===this.selection.parentId&&i.id===this.selection.childId;return n("button",{type:"button",disabled:i.isInactive,class:{"mobile-sheet-nav__item":true,"mobile-sheet-nav__child":true,"mobile-sheet-nav__item--selected":o,"ds-nav-disclosure__item":true,"ds-control--lg":true,"ds-focus-ring-inset":true,"ds-interaction-fill":true},style:{"--ds-nav-disclosure-index":String(s),"--ds-nav-disclosure-reverse-index":String((e.children?.length??0)-s-1)},"aria-current":o?"page":undefined,onClick:()=>{if(!i.isInactive)this.dsNavChildSelect.emit({parentId:e.id,childId:i.id,href:i.href})},onKeyDown:i=>{if(i.key==="ArrowLeft"){i.preventDefault();this.expandedParentId="";this.el.querySelector(`#${CSS.escape(this.parentId(e.id))}`)?.focus()}}},n("ds-text",{class:"mobile-sheet-nav__item-label ds-interaction-fill__content",as:"span",variant:"text-body-large",emphasis:o,color:"inherit",lineTruncation:1},i.label),i.dot?n("ds-badge",{class:"mobile-sheet-nav__dot ds-interaction-fill__content",variant:"dot",hasRing:false,label:"","aria-hidden":"true"}):null)}renderBranchDivider(e,i){return n("div",{class:{"ds-nav-disclosure-divider":true,"ds-nav-disclosure-divider--open":i,"mobile-sheet-nav__divider":true,[`mobile-sheet-nav__divider--${e}`]:true},"aria-hidden":"true"},n("div",{class:"ds-nav-disclosure-divider__clip"},n("span",{class:"mobile-sheet-nav__divider-line"})))}renderBranch(e,i,s){const o=this.presentation==="nested"&&!!e.children?.length;const t=o&&this.expandedParentId===e.id;return n("div",{key:e.id,class:"mobile-sheet-nav__branch"},o&&i>0?this.renderBranchDivider("before",t):null,this.renderItem(e),this.presentation==="nested"&&e.children?.length?n("div",{class:{"ds-nav-disclosure":true,"ds-nav-disclosure--open":t},inert:!t?true:undefined,"aria-hidden":!t?"true":undefined},n("div",{class:"mobile-sheet-nav__children",id:this.childrenId(e.id),role:"group","aria-labelledby":this.parentId(e.id)},e.children.map(((i,s)=>this.renderChild(e,i,s))))):null,o&&i<s-1?this.renderBranchDivider("after",t):null)}renderLogo(){return n("span",{class:"mobile-sheet-nav__logo","aria-hidden":"true"},n("svg",{class:"mobile-sheet-nav__logo-mark",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",focusable:"false","aria-hidden":"true"},n("path",{d:"M11.1159 4.31537H7.67021L2.53401 13.0703H0V15.6875H4.02716L8.24319 8.49978V15.6846H11.6342L15.8289 8.47829V15.6846H18.7122V4.3125H15.2559L11.1159 11.3648V4.31537Z",fill:"currentColor"})))}renderHeaderDestination(e,i,s){return n("ds-tooltip",{label:s,side:"bottom",size:"sm"},n("ds-button-unfilled",{variant:"icon",size:"lg",icon:i,"aria-label":s,activeFill:false,hasBorder:false,onDsClick:()=>this.dsAreaSelect.emit(e)}))}render(){const e=[{...u[0],label:this.dashboardLabel},{...u[1],label:this.settingsLabel}];return n(o,{key:"bdcce40fa8668ec976e6f9655fd1b1cfc2cedfee","aria-hidden":this.open?undefined:"true",inert:this.open?undefined:true},n("section",{key:"4b172b63030e20e07b34546d917b2111273e67f7",id:"ds-mobile-sheet-nav",class:"mobile-sheet-nav"},n("header",{key:"a2ed8767deac11fd2b076124cd91b324a66e9591",class:{"mobile-sheet-nav__header":true,"mobile-sheet-nav__header--expanded-context":!this.showAccount,"ds-chrome-grid":true,"ds-chrome-space--md":true}},n("div",{key:"13836e14f7f76a06f7a680ed23043102de1ad6fd",class:"mobile-sheet-nav__brand"},this.renderLogo()),n("ds-tab-group",{key:"24957f16068a5a400c182aaf32c51a5d34b6af57",class:"mobile-sheet-nav__context",tabs:e,value:this.browseContext,size:"lg",width:this.showAccount?"hug":"fill","aria-label":"Browse context",onDsChange:this.handleContextChange}),n("div",{key:"99f0159ba12973f4b1aa17bbe2456154e71336ad",class:"mobile-sheet-nav__actions"},this.renderHeaderDestination("help","QuestionCircle",this.helpLabel),this.showAccount?this.renderHeaderDestination("account","PersonCircle",this.accountLabel):null)),n("nav",{key:"479f1c042de1585a314b7a38d01025e9fc765627",class:"mobile-sheet-nav__body ds-chrome-column ds-chrome-space--md","aria-label":this.navigationLabel},n("div",{key:"bd36cce2c2e754afd1c3e03f1493bff0851bb52b",class:"mobile-sheet-nav__sections"},this.groups.filter((e=>e.items.length>0)).map((e=>n("div",{class:"mobile-sheet-nav__items"},e.items.map(((i,s)=>this.renderBranch(i,s,e.items.length))))))))))}get el(){return this}static get watchers(){return{presentation:[{syncExpandedParent:0}],currentUrl:[{syncExpandedParent:0}],browseContext:[{syncExpandedParent:0}],routeSelectionActive:[{syncExpandedParent:0}],open:[{handleOpenChange:0}]}}static get style(){return b()}},[2,"ds-mobile-sheet-nav",{open:[516],browseContext:[1,"browse-context"],dashboardGroups:[16],settingsGroups:[16],currentUrl:[1,"current-url"],presentation:[1],routeSelectionActive:[4,"route-selection-active"],navigationLabel:[1,"navigation-label"],dashboardLabel:[1,"dashboard-label"],settingsLabel:[1,"settings-label"],accountLabel:[1,"account-label"],helpLabel:[1,"help-label"],showAccount:[4,"show-account"],expandedParentId:[32]},[[0,"keydown","handleKeyDown"]],{presentation:[{syncExpandedParent:0}],currentUrl:[{syncExpandedParent:0}],browseContext:[{syncExpandedParent:0}],routeSelectionActive:[{syncExpandedParent:0}],open:[{handleOpenChange:0}]}]);function g(){if(typeof customElements==="undefined"){return}const e=["ds-mobile-sheet-nav","ds-badge","ds-button-unfilled","ds-icon","ds-loader","ds-tab-group","ds-text","ds-tooltip"];e.forEach((e=>{switch(e){case"ds-mobile-sheet-nav":if(!customElements.get(t(e))){customElements.define(t(e),p)}break;case"ds-badge":if(!customElements.get(t(e))){r()}break;case"ds-button-unfilled":if(!customElements.get(t(e))){d()}break;case"ds-icon":if(!customElements.get(t(e))){c()}break;case"ds-loader":if(!customElements.get(t(e))){l()}break;case"ds-tab-group":if(!customElements.get(t(e))){v()}break;case"ds-text":if(!customElements.get(t(e))){h()}break;case"ds-tooltip":if(!customElements.get(t(e))){m()}break}}))}g();export{p as M,g as d};
2
+ //# sourceMappingURL=p-C4huuwed.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["mobileSheetNavCss","CONTEXT_TABS","id","label","icon","variant","nextSheetId","MobileSheetNav","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","open","browseContext","dashboardGroups","settingsGroups","currentUrl","presentation","routeSelectionActive","navigationLabel","dashboardLabel","settingsLabel","accountLabel","helpLabel","showAccount","expandedParentId","instanceId","handleContextChange","event","next","detail","dsBrowseContextChange","emit","groups","selection","derivePanelNavSelectionFromUrl","flatMap","group","items","componentWillLoad","syncExpandedParent","parentId","handleOpenChange","requestAnimationFrame","selected","el","querySelector","first","focus","preventScroll","handleKeyDown","key","preventDefault","dsClose","renderItem","item","disclosure","children","length","expanded","h","type","class","undefined","String","childrenId","onClick","dsAreaSelect","name","size","color","as","emphasis","lineTruncation","dot","hasRing","encodeURIComponent","renderChild","parent","child","index","childId","disabled","isInactive","style","dsNavChildSelect","href","onKeyDown","CSS","escape","renderBranchDivider","position","renderBranch","count","hasChildren","inert","role","map","renderLogo","viewBox","fill","xmlns","focusable","d","renderHeaderDestination","side","activeFill","hasBorder","onDsClick","render","contextTabs","Host","tabs","value","width","onDsChange","filter"],"sources":["src/wc/components/MobileSheetNav/MobileSheetNav.css?tag=ds-mobile-sheet-nav&encapsulation=scoped","src/wc/components/MobileSheetNav/MobileSheetNav.tsx"],"sourcesContent":["@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/chrome-layout.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/nav-disclosure.css';\n\n:host {\n display: block;\n min-width: 0;\n min-height: 0;\n height: 100%;\n background: var(--color-background-primary);\n}\n\n:host(:not([open])) {\n display: none;\n}\n\n.mobile-sheet-nav {\n display: grid;\n grid-template-rows: auto minmax(0, 1fr);\n height: 100%;\n min-height: 0;\n background: var(--color-background-primary);\n}\n\n.mobile-sheet-nav__header {\n position: relative;\n grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);\n}\n\n.mobile-sheet-nav__header--expanded-context {\n grid-template-columns:\n minmax(var(--dimension-size-500), 1fr)\n minmax(0, 4fr)\n minmax(var(--dimension-size-500), 1fr);\n}\n\n.mobile-sheet-nav__header--expanded-context .mobile-sheet-nav__context {\n width: 100%;\n}\n\n.mobile-sheet-nav__header::after {\n content: '';\n position: absolute;\n inset-inline: 0;\n inset-block-end: 0;\n height: var(--dimension-stroke-width-012);\n background: var(--color-border-tertiary);\n pointer-events: none;\n}\n\n.mobile-sheet-nav__brand {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n min-width: 0;\n}\n\n.mobile-sheet-nav__logo {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--dimension-size-500);\n height: var(--dimension-size-500);\n padding: var(--dimension-space-100);\n box-sizing: border-box;\n color: var(--color-foreground-primary);\n}\n\n.mobile-sheet-nav__logo-mark {\n width: var(--dimension-iconography-lg);\n height: var(--dimension-iconography-lg);\n flex: 0 0 auto;\n}\n\n.mobile-sheet-nav__context {\n justify-self: center;\n}\n\n.mobile-sheet-nav__actions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--dimension-space-050);\n min-width: 0;\n}\n\n.mobile-sheet-nav__body {\n min-height: 0;\n overflow: auto;\n overscroll-behavior: contain;\n}\n\n.mobile-sheet-nav__sections {\n display: grid;\n gap: var(--dimension-space-400);\n}\n\n.mobile-sheet-nav__items {\n display: grid;\n gap: var(--dimension-space-100);\n}\n\n.mobile-sheet-nav__item {\n appearance: none;\n width: 100%;\n height: var(--ds-control-height);\n min-height: var(--ds-control-height);\n padding-inline: var(--ds-control-padding-inline);\n border: 0;\n border-radius: var(--ds-control-radius);\n background: transparent;\n color: var(--color-foreground-secondary);\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--ds-control-gap);\n cursor: default;\n text-align: start;\n box-sizing: border-box;\n}\n\n.mobile-sheet-nav__item--selected {\n color: var(--color-foreground-primary);\n}\n\n.mobile-sheet-nav__item-label {\n min-width: 0;\n padding-inline: var(--ds-control-label-inset);\n}\n\n.mobile-sheet-nav__dot {\n margin-inline-start: auto;\n}\n\n.mobile-sheet-nav__children {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-100);\n min-height: 0;\n overflow: hidden;\n}\n\n.mobile-sheet-nav__child {\n flex: 0 0 var(--ds-control-height);\n padding-inline-start: calc(\n var(--ds-control-padding-inline) + var(--dimension-iconography-lg) + var(--ds-control-gap)\n );\n}\n\n.mobile-sheet-nav__child:first-child {\n margin-block-start: var(--dimension-space-100);\n}\n\n.mobile-sheet-nav__child:disabled {\n color: var(--color-foreground-tertiary);\n}\n\n.mobile-sheet-nav__parent--muted {\n color: var(--color-foreground-secondary);\n}\n\n.mobile-sheet-nav__divider-line {\n display: block;\n height: var(--dimension-stroke-width-012);\n margin-inline: var(--dimension-space-100);\n background: var(--color-border-tertiary);\n}\n\n.mobile-sheet-nav__divider--before .mobile-sheet-nav__divider-line {\n margin-block: var(--dimension-space-050) var(--dimension-space-150);\n}\n\n.mobile-sheet-nav__divider--after .mobile-sheet-nav__divider-line {\n margin-block: var(--dimension-space-150) var(--dimension-space-050);\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport type { NavChromeStyle } from '../../shell/nav-chrome';\nimport { derivePanelNavSelectionFromUrl } from '../PanelNav/panel-nav-utils';\nimport type {\n PanelNavChildItem,\n PanelNavChildSelectDetail,\n PanelNavGroup,\n PanelNavItem,\n PanelNavPresentation,\n} from '../PanelNav/panel-nav-types';\n\ntype MobileSheetNavHeaderDestinationId = 'account' | 'help';\n\nconst CONTEXT_TABS = [\n { id: 'dashboard', label: 'Dashboard', icon: 'Dashboard', variant: 'icon' as const },\n { id: 'settings', label: 'Settings', icon: 'Gear', variant: 'icon' as const },\n];\nlet nextSheetId = 0;\n\n@Component({\n tag: 'ds-mobile-sheet-nav',\n styleUrl: 'MobileSheetNav.css',\n scoped: true,\n})\nexport class MobileSheetNav {\n @Element() el!: HTMLElement;\n\n @Prop({ reflect: true }) open: boolean = false;\n @Prop() browseContext: NavChromeStyle = 'dashboard';\n @Prop() dashboardGroups: PanelNavGroup[] = [];\n @Prop() settingsGroups: PanelNavGroup[] = [];\n @Prop() currentUrl: string = '';\n /** Flat area navigation or inline disclosure of each area's child routes. */\n @Prop() presentation: PanelNavPresentation = 'flat';\n /** Whether the router-derived current area owns the active mobile stage. */\n @Prop() routeSelectionActive: boolean = true;\n @Prop() navigationLabel: string = 'Application navigation';\n @Prop() dashboardLabel: string = 'Dashboard';\n @Prop() settingsLabel: string = 'Settings';\n @Prop() accountLabel: string = 'Account';\n @Prop() helpLabel: string = 'Help & Support';\n /** Show the optional Account shortcut in the sheet header. */\n @Prop() showAccount: boolean = true;\n\n @Event() dsAreaSelect!: EventEmitter<string>;\n /** Selecting a child requests routing; expanding its parent never navigates. */\n @Event() dsNavChildSelect!: EventEmitter<PanelNavChildSelectDetail>;\n @Event() dsBrowseContextChange!: EventEmitter<NavChromeStyle>;\n @Event() dsClose!: EventEmitter<void>;\n @State() private expandedParentId = '';\n private readonly instanceId = nextSheetId++;\n\n private get groups(): PanelNavGroup[] {\n return this.browseContext === 'settings' ? this.settingsGroups : this.dashboardGroups;\n }\n\n private get selection() {\n return derivePanelNavSelectionFromUrl(\n this.routeSelectionActive ? this.currentUrl : '',\n this.groups.flatMap(group => group.items)\n );\n }\n\n componentWillLoad() {\n this.syncExpandedParent();\n }\n\n @Watch('presentation')\n @Watch('currentUrl')\n @Watch('browseContext')\n @Watch('routeSelectionActive')\n syncExpandedParent() {\n this.expandedParentId = this.presentation === 'nested' ? this.selection.parentId : '';\n }\n\n @Watch('open')\n handleOpenChange(open: boolean) {\n if (!open) return;\n this.syncExpandedParent();\n requestAnimationFrame(() => {\n const selected = this.el.querySelector<HTMLElement>('[aria-current=\"page\"]');\n const first = this.el.querySelector<HTMLElement>('.mobile-sheet-nav__item:not(:disabled)');\n (selected ?? first)?.focus({ preventScroll: true });\n });\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (!this.open || event.key !== 'Escape') return;\n event.preventDefault();\n this.dsClose.emit();\n }\n\n private handleContextChange = (event: CustomEvent<string>) => {\n const next = event.detail === 'settings' ? 'settings' : 'dashboard';\n if (next === this.browseContext) return;\n this.dsBrowseContextChange.emit(next);\n };\n\n private renderItem(item: PanelNavItem) {\n const selected = item.id === this.selection.parentId;\n const disclosure = this.presentation === 'nested' && !!item.children?.length;\n const expanded = disclosure && item.id === this.expandedParentId;\n return (\n <button\n id={this.parentId(item.id)}\n type=\"button\"\n class={{\n 'mobile-sheet-nav__item': true,\n 'mobile-sheet-nav__item--selected': selected,\n 'mobile-sheet-nav__parent--muted':\n this.presentation === 'nested' &&\n this.expandedParentId !== '' &&\n this.expandedParentId !== item.id,\n 'ds-control--lg': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n }}\n aria-current={selected && !disclosure ? 'page' : undefined}\n aria-expanded={disclosure ? String(expanded) : undefined}\n aria-controls={disclosure ? this.childrenId(item.id) : undefined}\n onClick={() =>\n disclosure\n ? (this.expandedParentId = expanded ? '' : item.id)\n : this.dsAreaSelect.emit(item.id)\n }\n >\n <ds-icon class=\"ds-interaction-fill__content\" name={item.icon} size=\"lg\" color=\"inherit\" />\n <ds-text\n class=\"mobile-sheet-nav__item-label ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-large\"\n emphasis={selected}\n color=\"inherit\"\n lineTruncation={1}\n >\n {item.label}\n </ds-text>\n {item.dot && (\n <ds-badge\n class=\"mobile-sheet-nav__dot ds-interaction-fill__content\"\n variant=\"dot\"\n hasRing={false}\n label=\"\"\n aria-hidden=\"true\"\n />\n )}\n </button>\n );\n }\n\n private parentId(id: string) {\n return `mobile-sheet-${this.instanceId}-${encodeURIComponent(id)}`;\n }\n private childrenId(id: string) {\n return `${this.parentId(id)}-children`;\n }\n\n private renderChild(parent: PanelNavItem, child: PanelNavChildItem, index: number) {\n const selected = parent.id === this.selection.parentId && child.id === this.selection.childId;\n return (\n <button\n type=\"button\"\n disabled={child.isInactive}\n class={{\n 'mobile-sheet-nav__item': true,\n 'mobile-sheet-nav__child': true,\n 'mobile-sheet-nav__item--selected': selected,\n 'ds-nav-disclosure__item': true,\n 'ds-control--lg': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n }}\n style={{\n '--ds-nav-disclosure-index': String(index),\n '--ds-nav-disclosure-reverse-index': String((parent.children?.length ?? 0) - index - 1),\n }}\n aria-current={selected ? 'page' : undefined}\n onClick={() => {\n if (!child.isInactive)\n this.dsNavChildSelect.emit({\n parentId: parent.id,\n childId: child.id,\n href: child.href,\n });\n }}\n onKeyDown={(event: KeyboardEvent) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n this.expandedParentId = '';\n this.el.querySelector<HTMLElement>(`#${CSS.escape(this.parentId(parent.id))}`)?.focus();\n }\n }}\n >\n <ds-text\n class=\"mobile-sheet-nav__item-label ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-large\"\n emphasis={selected}\n color=\"inherit\"\n lineTruncation={1}\n >\n {child.label}\n </ds-text>\n {child.dot ? (\n <ds-badge\n class=\"mobile-sheet-nav__dot ds-interaction-fill__content\"\n variant=\"dot\"\n hasRing={false}\n label=\"\"\n aria-hidden=\"true\"\n />\n ) : null}\n </button>\n );\n }\n\n private renderBranchDivider(position: 'before' | 'after', expanded: boolean) {\n return (\n <div\n class={{\n 'ds-nav-disclosure-divider': true,\n 'ds-nav-disclosure-divider--open': expanded,\n 'mobile-sheet-nav__divider': true,\n [`mobile-sheet-nav__divider--${position}`]: true,\n }}\n aria-hidden=\"true\"\n >\n <div class=\"ds-nav-disclosure-divider__clip\">\n <span class=\"mobile-sheet-nav__divider-line\" />\n </div>\n </div>\n );\n }\n\n private renderBranch(item: PanelNavItem, index: number, count: number) {\n const hasChildren = this.presentation === 'nested' && !!item.children?.length;\n const expanded = hasChildren && this.expandedParentId === item.id;\n return (\n <div key={item.id} class=\"mobile-sheet-nav__branch\">\n {hasChildren && index > 0 ? this.renderBranchDivider('before', expanded) : null}\n {this.renderItem(item)}\n {this.presentation === 'nested' && item.children?.length ? (\n <div\n class={{ 'ds-nav-disclosure': true, 'ds-nav-disclosure--open': expanded }}\n inert={!expanded ? true : undefined}\n aria-hidden={!expanded ? 'true' : undefined}\n >\n <div\n class=\"mobile-sheet-nav__children\"\n id={this.childrenId(item.id)}\n role=\"group\"\n aria-labelledby={this.parentId(item.id)}\n >\n {item.children.map((child, index) => this.renderChild(item, child, index))}\n </div>\n </div>\n ) : null}\n {hasChildren && index < count - 1 ? this.renderBranchDivider('after', expanded) : null}\n </div>\n );\n }\n\n private renderLogo() {\n return (\n <span class=\"mobile-sheet-nav__logo\" aria-hidden=\"true\">\n {/* eslint-disable-next-line compomo/prefer-ds-icon -- Motive brand mark is not part of the IcoMo runtime catalog. */}\n <svg\n class=\"mobile-sheet-nav__logo-mark\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable=\"false\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M11.1159 4.31537H7.67021L2.53401 13.0703H0V15.6875H4.02716L8.24319 8.49978V15.6846H11.6342L15.8289 8.47829V15.6846H18.7122V4.3125H15.2559L11.1159 11.3648V4.31537Z\"\n fill=\"currentColor\"\n />\n </svg>\n </span>\n );\n }\n\n private renderHeaderDestination(\n id: MobileSheetNavHeaderDestinationId,\n icon: string,\n label: string\n ) {\n return (\n <ds-tooltip label={label} side=\"bottom\" size=\"sm\">\n <ds-button-unfilled\n variant=\"icon\"\n size=\"lg\"\n icon={icon}\n aria-label={label}\n activeFill={false}\n hasBorder={false}\n onDsClick={() => this.dsAreaSelect.emit(id)}\n />\n </ds-tooltip>\n );\n }\n\n render() {\n const contextTabs = [\n { ...CONTEXT_TABS[0], label: this.dashboardLabel },\n { ...CONTEXT_TABS[1], label: this.settingsLabel },\n ];\n\n return (\n <Host aria-hidden={this.open ? undefined : 'true'} inert={this.open ? undefined : true}>\n <section id=\"ds-mobile-sheet-nav\" class=\"mobile-sheet-nav\">\n <header\n class={{\n 'mobile-sheet-nav__header': true,\n 'mobile-sheet-nav__header--expanded-context': !this.showAccount,\n 'ds-chrome-grid': true,\n 'ds-chrome-space--md': true,\n }}\n >\n <div class=\"mobile-sheet-nav__brand\">{this.renderLogo()}</div>\n <ds-tab-group\n class=\"mobile-sheet-nav__context\"\n tabs={contextTabs}\n value={this.browseContext}\n size=\"lg\"\n width={this.showAccount ? 'hug' : 'fill'}\n aria-label=\"Browse context\"\n onDsChange={this.handleContextChange}\n />\n <div class=\"mobile-sheet-nav__actions\">\n {this.renderHeaderDestination('help', 'QuestionCircle', this.helpLabel)}\n {this.showAccount\n ? this.renderHeaderDestination('account', 'PersonCircle', this.accountLabel)\n : null}\n </div>\n </header>\n\n <nav\n class=\"mobile-sheet-nav__body ds-chrome-column ds-chrome-space--md\"\n aria-label={this.navigationLabel}\n >\n <div class=\"mobile-sheet-nav__sections\">\n {this.groups\n .filter(group => group.items.length > 0)\n .map(group => (\n <div class=\"mobile-sheet-nav__items\">\n {group.items.map((item, index) =>\n this.renderBranch(item, index, group.items.length)\n )}\n </div>\n ))}\n </div>\n </nav>\n </section>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["mobileSheetNavCss","CONTEXT_TABS","id","label","icon","variant","nextSheetId","MobileSheetNav","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","open","browseContext","dashboardGroups","settingsGroups","currentUrl","presentation","routeSelectionActive","navigationLabel","dashboardLabel","settingsLabel","accountLabel","helpLabel","showAccount","expandedParentId","instanceId","handleContextChange","event","next","detail","dsBrowseContextChange","emit","groups","selection","derivePanelNavSelectionFromUrl","flatMap","group","items","componentWillLoad","syncExpandedParent","parentId","handleOpenChange","requestAnimationFrame","selected","el","querySelector","first","focus","preventScroll","handleKeyDown","key","preventDefault","dsClose","renderItem","item","disclosure","children","length","expanded","h","type","class","undefined","String","childrenId","onClick","dsAreaSelect","name","size","color","as","emphasis","lineTruncation","dot","hasRing","encodeURIComponent","renderChild","parent","child","index","childId","disabled","isInactive","style","dsNavChildSelect","href","onKeyDown","CSS","escape","renderBranchDivider","position","renderBranch","count","hasChildren","inert","role","map","renderLogo","viewBox","fill","xmlns","focusable","d","renderHeaderDestination","side","activeFill","hasBorder","onDsClick","render","contextTabs","Host","tabs","value","width","onDsChange","filter"],"sources":["src/wc/components/MobileSheetNav/MobileSheetNav.css?tag=ds-mobile-sheet-nav&encapsulation=scoped","src/wc/components/MobileSheetNav/MobileSheetNav.tsx"],"sourcesContent":["@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/chrome-layout.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/nav-disclosure.css';\n\n:host {\n display: block;\n min-width: 0;\n min-height: 0;\n height: 100%;\n background: var(--color-background-primary);\n}\n\n:host(:not([open])) {\n display: none;\n}\n\n.mobile-sheet-nav {\n display: grid;\n grid-template-rows: auto minmax(0, 1fr);\n height: 100%;\n min-height: 0;\n background: var(--color-background-primary);\n}\n\n.mobile-sheet-nav__header {\n position: relative;\n grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);\n}\n\n.mobile-sheet-nav__header--expanded-context {\n grid-template-columns:\n minmax(var(--dimension-size-500), 1fr)\n minmax(0, 4fr)\n minmax(var(--dimension-size-500), 1fr);\n}\n\n.mobile-sheet-nav__header--expanded-context .mobile-sheet-nav__context {\n width: 100%;\n}\n\n.mobile-sheet-nav__header::after {\n content: '';\n position: absolute;\n inset-inline: 0;\n inset-block-end: 0;\n height: var(--dimension-stroke-width-012);\n background: var(--color-border-tertiary);\n pointer-events: none;\n}\n\n.mobile-sheet-nav__brand {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n min-width: 0;\n}\n\n.mobile-sheet-nav__logo {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--dimension-size-500);\n height: var(--dimension-size-500);\n padding: var(--dimension-space-100);\n box-sizing: border-box;\n color: var(--color-foreground-primary);\n}\n\n.mobile-sheet-nav__logo-mark {\n width: var(--dimension-iconography-lg);\n height: var(--dimension-iconography-lg);\n flex: 0 0 auto;\n}\n\n.mobile-sheet-nav__context {\n justify-self: center;\n}\n\n.mobile-sheet-nav__actions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--dimension-space-050);\n min-width: 0;\n}\n\n.mobile-sheet-nav__body {\n min-height: 0;\n overflow: auto;\n overscroll-behavior: contain;\n}\n\n.mobile-sheet-nav__sections {\n display: grid;\n gap: var(--dimension-space-400);\n}\n\n.mobile-sheet-nav__items {\n display: grid;\n gap: var(--dimension-space-100);\n}\n\n.mobile-sheet-nav__item {\n appearance: none;\n width: 100%;\n height: var(--ds-control-height);\n min-height: var(--ds-control-height);\n padding-inline: var(--ds-control-padding-inline);\n border: 0;\n border-radius: var(--ds-control-radius);\n background: transparent;\n color: var(--color-foreground-secondary);\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--ds-control-gap);\n cursor: default;\n text-align: start;\n box-sizing: border-box;\n}\n\n.mobile-sheet-nav__item--selected {\n color: var(--color-foreground-primary);\n}\n\n.mobile-sheet-nav__item-label {\n min-width: 0;\n padding-inline: var(--ds-control-label-inset);\n}\n\n.mobile-sheet-nav__dot {\n margin-inline-start: auto;\n}\n\n.mobile-sheet-nav__children {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-100);\n min-height: 0;\n overflow: hidden;\n}\n\n.mobile-sheet-nav__child {\n flex: 0 0 var(--ds-control-height);\n padding-inline-start: calc(\n var(--ds-control-padding-inline) + var(--dimension-iconography-lg) + var(--ds-control-gap)\n );\n}\n\n.mobile-sheet-nav__child:first-child {\n margin-block-start: var(--dimension-space-100);\n}\n\n.mobile-sheet-nav__child:disabled {\n color: var(--color-foreground-tertiary);\n}\n\n.mobile-sheet-nav__parent--muted {\n color: var(--color-foreground-secondary);\n}\n\n.mobile-sheet-nav__divider-line {\n display: block;\n height: var(--dimension-stroke-width-012);\n margin-inline: var(--dimension-space-100);\n background: var(--color-border-tertiary);\n}\n\n.mobile-sheet-nav__divider--before .mobile-sheet-nav__divider-line {\n margin-block: var(--dimension-space-050) var(--dimension-space-150);\n}\n\n.mobile-sheet-nav__divider--after .mobile-sheet-nav__divider-line {\n margin-block: var(--dimension-space-150) var(--dimension-space-050);\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport type { NavChromeStyle } from '../../shell/nav-chrome';\nimport { derivePanelNavSelectionFromUrl } from '../PanelNav/panel-nav-utils';\nimport type {\n PanelNavChildItem,\n PanelNavChildSelectDetail,\n PanelNavGroup,\n PanelNavItem,\n PanelNavPresentation,\n} from '../PanelNav/panel-nav-types';\n\ntype MobileSheetNavHeaderDestinationId = 'account' | 'help';\n\nconst CONTEXT_TABS = [\n { id: 'dashboard', label: 'Dashboard', icon: 'Dashboard', variant: 'icon' as const },\n { id: 'settings', label: 'Settings', icon: 'Gear', variant: 'icon' as const },\n];\nlet nextSheetId = 0;\n\n@Component({\n tag: 'ds-mobile-sheet-nav',\n styleUrl: 'MobileSheetNav.css',\n scoped: true,\n})\nexport class MobileSheetNav {\n @Element() el!: HTMLElement;\n\n @Prop({ reflect: true }) open: boolean = false;\n @Prop() browseContext: NavChromeStyle = 'dashboard';\n @Prop() dashboardGroups: PanelNavGroup[] = [];\n @Prop() settingsGroups: PanelNavGroup[] = [];\n @Prop() currentUrl: string = '';\n /** Flat area navigation or inline disclosure of each area's child routes. */\n @Prop() presentation: PanelNavPresentation = 'flat';\n /** Whether the router-derived current area owns the active mobile stage. */\n @Prop() routeSelectionActive: boolean = true;\n @Prop() navigationLabel: string = 'Application navigation';\n @Prop() dashboardLabel: string = 'Dashboard';\n @Prop() settingsLabel: string = 'Settings';\n @Prop() accountLabel: string = 'Account';\n @Prop() helpLabel: string = 'Help & Support';\n /** Show the optional Account shortcut in the sheet header. */\n @Prop() showAccount: boolean = true;\n\n @Event() dsAreaSelect!: EventEmitter<string>;\n /** Selecting a child requests routing; expanding its parent never navigates. */\n @Event() dsNavChildSelect!: EventEmitter<PanelNavChildSelectDetail>;\n @Event() dsBrowseContextChange!: EventEmitter<NavChromeStyle>;\n @Event() dsClose!: EventEmitter<void>;\n @State() private expandedParentId = '';\n private readonly instanceId = nextSheetId++;\n\n private get groups(): PanelNavGroup[] {\n return this.browseContext === 'settings' ? this.settingsGroups : this.dashboardGroups;\n }\n\n private get selection() {\n return derivePanelNavSelectionFromUrl(\n this.routeSelectionActive ? this.currentUrl : '',\n this.groups.flatMap(group => group.items)\n );\n }\n\n componentWillLoad() {\n this.syncExpandedParent();\n }\n\n @Watch('presentation')\n @Watch('currentUrl')\n @Watch('browseContext')\n @Watch('routeSelectionActive')\n syncExpandedParent() {\n this.expandedParentId = this.presentation === 'nested' ? this.selection.parentId : '';\n }\n\n @Watch('open')\n handleOpenChange(open: boolean) {\n if (!open) return;\n this.syncExpandedParent();\n requestAnimationFrame(() => {\n const selected = this.el.querySelector<HTMLElement>('[aria-current=\"page\"]');\n const first = this.el.querySelector<HTMLElement>('.mobile-sheet-nav__item:not(:disabled)');\n (selected ?? first)?.focus({ preventScroll: true });\n });\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (!this.open || event.key !== 'Escape') return;\n event.preventDefault();\n this.dsClose.emit();\n }\n\n private handleContextChange = (event: CustomEvent<string>) => {\n const next = event.detail === 'settings' ? 'settings' : 'dashboard';\n if (next === this.browseContext) return;\n this.dsBrowseContextChange.emit(next);\n };\n\n private renderItem(item: PanelNavItem) {\n const selected = item.id === this.selection.parentId;\n const disclosure = this.presentation === 'nested' && !!item.children?.length;\n const expanded = disclosure && item.id === this.expandedParentId;\n return (\n <button\n id={this.parentId(item.id)}\n type=\"button\"\n class={{\n 'mobile-sheet-nav__item': true,\n 'mobile-sheet-nav__item--selected': selected,\n 'mobile-sheet-nav__parent--muted':\n this.presentation === 'nested' &&\n this.expandedParentId !== '' &&\n this.expandedParentId !== item.id,\n 'ds-control--lg': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n }}\n aria-current={selected && !disclosure ? 'page' : undefined}\n aria-expanded={disclosure ? String(expanded) : undefined}\n aria-controls={disclosure ? this.childrenId(item.id) : undefined}\n onClick={() =>\n disclosure\n ? (this.expandedParentId = expanded ? '' : item.id)\n : this.dsAreaSelect.emit(item.id)\n }\n >\n <ds-icon class=\"ds-interaction-fill__content\" name={item.icon} size=\"lg\" color=\"inherit\" />\n <ds-text\n class=\"mobile-sheet-nav__item-label ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-large\"\n emphasis={selected}\n color=\"inherit\"\n lineTruncation={1}\n >\n {item.label}\n </ds-text>\n {item.dot && (\n <ds-badge\n class=\"mobile-sheet-nav__dot ds-interaction-fill__content\"\n variant=\"dot\"\n hasRing={false}\n label=\"\"\n aria-hidden=\"true\"\n />\n )}\n </button>\n );\n }\n\n private parentId(id: string) {\n return `mobile-sheet-${this.instanceId}-${encodeURIComponent(id)}`;\n }\n private childrenId(id: string) {\n return `${this.parentId(id)}-children`;\n }\n\n private renderChild(parent: PanelNavItem, child: PanelNavChildItem, index: number) {\n const selected = parent.id === this.selection.parentId && child.id === this.selection.childId;\n return (\n <button\n type=\"button\"\n disabled={child.isInactive}\n class={{\n 'mobile-sheet-nav__item': true,\n 'mobile-sheet-nav__child': true,\n 'mobile-sheet-nav__item--selected': selected,\n 'ds-nav-disclosure__item': true,\n 'ds-control--lg': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n }}\n style={{\n '--ds-nav-disclosure-index': String(index),\n '--ds-nav-disclosure-reverse-index': String((parent.children?.length ?? 0) - index - 1),\n }}\n aria-current={selected ? 'page' : undefined}\n onClick={() => {\n if (!child.isInactive)\n this.dsNavChildSelect.emit({\n parentId: parent.id,\n childId: child.id,\n href: child.href,\n });\n }}\n onKeyDown={(event: KeyboardEvent) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n this.expandedParentId = '';\n this.el.querySelector<HTMLElement>(`#${CSS.escape(this.parentId(parent.id))}`)?.focus();\n }\n }}\n >\n <ds-text\n class=\"mobile-sheet-nav__item-label ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-large\"\n emphasis={selected}\n color=\"inherit\"\n lineTruncation={1}\n >\n {child.label}\n </ds-text>\n {child.dot ? (\n <ds-badge\n class=\"mobile-sheet-nav__dot ds-interaction-fill__content\"\n variant=\"dot\"\n hasRing={false}\n label=\"\"\n aria-hidden=\"true\"\n />\n ) : null}\n </button>\n );\n }\n\n private renderBranchDivider(position: 'before' | 'after', expanded: boolean) {\n return (\n <div\n class={{\n 'ds-nav-disclosure-divider': true,\n 'ds-nav-disclosure-divider--open': expanded,\n 'mobile-sheet-nav__divider': true,\n [`mobile-sheet-nav__divider--${position}`]: true,\n }}\n aria-hidden=\"true\"\n >\n <div class=\"ds-nav-disclosure-divider__clip\">\n <span class=\"mobile-sheet-nav__divider-line\" />\n </div>\n </div>\n );\n }\n\n private renderBranch(item: PanelNavItem, index: number, count: number) {\n const hasChildren = this.presentation === 'nested' && !!item.children?.length;\n const expanded = hasChildren && this.expandedParentId === item.id;\n return (\n <div key={item.id} class=\"mobile-sheet-nav__branch\">\n {hasChildren && index > 0 ? this.renderBranchDivider('before', expanded) : null}\n {this.renderItem(item)}\n {this.presentation === 'nested' && item.children?.length ? (\n <div\n class={{ 'ds-nav-disclosure': true, 'ds-nav-disclosure--open': expanded }}\n inert={!expanded ? true : undefined}\n aria-hidden={!expanded ? 'true' : undefined}\n >\n <div\n class=\"mobile-sheet-nav__children\"\n id={this.childrenId(item.id)}\n role=\"group\"\n aria-labelledby={this.parentId(item.id)}\n >\n {item.children.map((child, index) => this.renderChild(item, child, index))}\n </div>\n </div>\n ) : null}\n {hasChildren && index < count - 1 ? this.renderBranchDivider('after', expanded) : null}\n </div>\n );\n }\n\n private renderLogo() {\n return (\n <span class=\"mobile-sheet-nav__logo\" aria-hidden=\"true\">\n {/* eslint-disable-next-line compomo/prefer-ds-icon -- Motive brand mark is not part of the IcoMo runtime catalog. */}\n <svg\n class=\"mobile-sheet-nav__logo-mark\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable=\"false\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M11.1159 4.31537H7.67021L2.53401 13.0703H0V15.6875H4.02716L8.24319 8.49978V15.6846H11.6342L15.8289 8.47829V15.6846H18.7122V4.3125H15.2559L11.1159 11.3648V4.31537Z\"\n fill=\"currentColor\"\n />\n </svg>\n </span>\n );\n }\n\n private renderHeaderDestination(\n id: MobileSheetNavHeaderDestinationId,\n icon: string,\n label: string\n ) {\n return (\n <ds-tooltip label={label} side=\"bottom\" size=\"sm\">\n <ds-button-unfilled\n variant=\"icon\"\n size=\"lg\"\n icon={icon}\n aria-label={label}\n activeFill={false}\n hasBorder={false}\n onDsClick={() => this.dsAreaSelect.emit(id)}\n />\n </ds-tooltip>\n );\n }\n\n render() {\n const contextTabs = [\n { ...CONTEXT_TABS[0], label: this.dashboardLabel },\n { ...CONTEXT_TABS[1], label: this.settingsLabel },\n ];\n\n return (\n <Host aria-hidden={this.open ? undefined : 'true'} inert={this.open ? undefined : true}>\n <section id=\"ds-mobile-sheet-nav\" class=\"mobile-sheet-nav\">\n <header\n class={{\n 'mobile-sheet-nav__header': true,\n 'mobile-sheet-nav__header--expanded-context': !this.showAccount,\n 'ds-chrome-grid': true,\n 'ds-chrome-space--md': true,\n }}\n >\n <div class=\"mobile-sheet-nav__brand\">{this.renderLogo()}</div>\n <ds-tab-group\n class=\"mobile-sheet-nav__context\"\n tabs={contextTabs}\n value={this.browseContext}\n size=\"lg\"\n width={this.showAccount ? 'hug' : 'fill'}\n aria-label=\"Browse context\"\n onDsChange={this.handleContextChange}\n />\n <div class=\"mobile-sheet-nav__actions\">\n {this.renderHeaderDestination('help', 'QuestionCircle', this.helpLabel)}\n {this.showAccount\n ? this.renderHeaderDestination('account', 'PersonCircle', this.accountLabel)\n : null}\n </div>\n </header>\n\n <nav\n class=\"mobile-sheet-nav__body ds-chrome-column ds-chrome-space--md\"\n aria-label={this.navigationLabel}\n >\n <div class=\"mobile-sheet-nav__sections\">\n {this.groups\n .filter(group => group.items.length > 0)\n .map(group => (\n <div class=\"mobile-sheet-nav__items\">\n {group.items.map((item, index) =>\n this.renderBranch(item, index, group.items.length)\n )}\n </div>\n ))}\n </div>\n </nav>\n </section>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}