@vonage/vivid 5.24.0 → 5.25.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 (331) hide show
  1. package/README.md +1 -1
  2. package/avatar/index.cjs +10 -10
  3. package/avatar/index.js +4 -3
  4. package/breadcrumb-item/index.cjs +9 -5
  5. package/breadcrumb-item/index.js +11 -6
  6. package/bundled/affix.cjs +1 -1
  7. package/bundled/affix.js +1 -1
  8. package/bundled/definition10.cjs +2 -1
  9. package/bundled/definition10.js +3 -2
  10. package/bundled/definition11.cjs +4 -4
  11. package/bundled/definition11.js +4 -3
  12. package/bundled/definition12.cjs +1 -1
  13. package/bundled/definition12.js +1 -0
  14. package/bundled/definition15.cjs +5 -5
  15. package/bundled/definition15.js +4 -3
  16. package/bundled/definition17.cjs +7 -7
  17. package/bundled/definition17.js +22 -109
  18. package/bundled/definition18.cjs +3 -3
  19. package/bundled/definition18.js +9 -31
  20. package/bundled/definition19.cjs +19 -19
  21. package/bundled/definition19.js +3 -2
  22. package/bundled/definition21.cjs +8 -8
  23. package/bundled/definition21.js +5 -4
  24. package/bundled/definition22.cjs +2 -2
  25. package/bundled/definition22.js +2 -2
  26. package/bundled/definition24.cjs +4 -4
  27. package/bundled/definition24.js +4 -3
  28. package/bundled/definition25.cjs +3 -3
  29. package/bundled/definition25.js +32 -28
  30. package/bundled/definition3.cjs +5 -5
  31. package/bundled/definition3.js +10 -40
  32. package/bundled/definition4.cjs +6 -6
  33. package/bundled/definition4.js +4 -3
  34. package/bundled/definition6.cjs +11 -11
  35. package/bundled/definition6.js +4 -3
  36. package/bundled/definition9.cjs +12 -6
  37. package/bundled/definition9.js +66 -43
  38. package/bundled/extractOptions.cjs +1 -1
  39. package/bundled/extractOptions.js +2 -2
  40. package/bundled/icon.cjs +1 -0
  41. package/bundled/icon.js +34 -0
  42. package/bundled/listbox.cjs +1 -1
  43. package/bundled/listbox.js +5 -2
  44. package/bundled/mixins.cjs +8 -8
  45. package/bundled/mixins.js +4 -3
  46. package/bundled/optgroup.cjs +1 -0
  47. package/bundled/optgroup.js +27 -0
  48. package/bundled/option.cjs +1 -0
  49. package/bundled/option.js +93 -0
  50. package/bundled/vivid-element.cjs +1 -1
  51. package/bundled/vivid-element.js +1 -1
  52. package/card/index.cjs +22 -22
  53. package/card/index.js +4 -3
  54. package/color-picker/index.cjs +18 -18
  55. package/color-picker/index.js +4 -3
  56. package/combobox/index.cjs +7 -7
  57. package/combobox/index.js +4 -2
  58. package/custom-elements.json +4159 -3847
  59. package/data-grid/index.cjs +24 -24
  60. package/data-grid/index.js +4 -3
  61. package/dial-pad/index.cjs +21 -21
  62. package/dial-pad/index.js +4 -3
  63. package/dialog/index.cjs +14 -14
  64. package/dialog/index.js +4 -3
  65. package/empty-state/index.cjs +3 -3
  66. package/empty-state/index.js +4 -3
  67. package/file-picker/index.cjs +7 -7
  68. package/file-picker/index.js +4 -3
  69. package/icon/definition.cjs +2 -1
  70. package/icon/definition.js +2 -1
  71. package/index.cjs +148 -141
  72. package/index.js +41 -37
  73. package/lib/accordion-item/accordion-item.d.ts +1 -0
  74. package/lib/combobox/combobox.d.ts +1 -1
  75. package/lib/components.d.ts +1 -0
  76. package/lib/dial-pad/dial-pad.d.ts +0 -1
  77. package/lib/listbox/definition.d.ts +3 -0
  78. package/lib/listbox/index.d.ts +1 -0
  79. package/lib/listbox/listbox.d.ts +1302 -0
  80. package/lib/listbox/listbox.template.d.ts +3 -0
  81. package/lib/listbox/variations.browser-spec.d.ts +1 -0
  82. package/lib/menu/menu.d.ts +0 -1
  83. package/lib/number-field/number-field.d.ts +0 -1
  84. package/lib/rich-text-editor/rte/features/base.d.ts +1 -0
  85. package/lib/rich-text-editor/rte/utils/default-textblock.d.ts +2 -2
  86. package/lib/tag-name-map.d.ts +2 -1
  87. package/lib/text-field/text-field.d.ts +1 -0
  88. package/lib/toggletip/toggletip.d.ts +1 -0
  89. package/lib/tooltip/tooltip.d.ts +1 -0
  90. package/listbox/definition.cjs +5 -0
  91. package/listbox/definition.js +2 -0
  92. package/listbox/index.cjs +11 -0
  93. package/listbox/index.js +540 -0
  94. package/nav/definition.cjs +1 -1
  95. package/nav/definition.js +1 -1
  96. package/nav-disclosure/definition.cjs +1 -1
  97. package/nav-disclosure/definition.js +1 -1
  98. package/nav-disclosure/index.cjs +4 -4
  99. package/nav-disclosure/index.js +4 -3
  100. package/nav-item/definition.cjs +1 -1
  101. package/nav-item/definition.js +1 -1
  102. package/note/definition.cjs +1 -1
  103. package/note/definition.js +1 -1
  104. package/number-field/definition.cjs +1 -1
  105. package/number-field/definition.js +1 -1
  106. package/optgroup/definition.cjs +2 -1
  107. package/optgroup/definition.js +2 -1
  108. package/option/definition.cjs +2 -1
  109. package/option/definition.js +2 -1
  110. package/package.json +8 -7
  111. package/pagination/definition.cjs +1 -1
  112. package/pagination/definition.js +1 -1
  113. package/platform-switch/definition.cjs +1 -1
  114. package/platform-switch/definition.js +1 -1
  115. package/popover/definition.cjs +1 -1
  116. package/popover/definition.js +1 -1
  117. package/popover/index.cjs +5 -5
  118. package/popover/index.js +4 -3
  119. package/progress/definition.cjs +1 -1
  120. package/progress/definition.js +1 -1
  121. package/radio/definition.cjs +1 -1
  122. package/radio/definition.js +1 -1
  123. package/radio-group/definition.cjs +1 -1
  124. package/radio-group/definition.js +1 -1
  125. package/range-slider/definition.cjs +1 -1
  126. package/range-slider/definition.js +1 -1
  127. package/rich-text-editor/definition.cjs +1 -1
  128. package/rich-text-editor/definition.js +1 -1
  129. package/rich-text-editor/index.cjs +13 -13
  130. package/rich-text-editor/index.js +22 -19
  131. package/rich-text-view/definition.cjs +1 -1
  132. package/rich-text-view/definition.js +1 -1
  133. package/searchable-select/definition.cjs +1 -1
  134. package/searchable-select/definition.js +1 -1
  135. package/searchable-select/index.cjs +23 -23
  136. package/searchable-select/index.js +10 -7
  137. package/select/definition.cjs +1 -1
  138. package/select/definition.js +1 -1
  139. package/selectable-box/definition.cjs +1 -1
  140. package/selectable-box/definition.js +1 -1
  141. package/shared/listbox/commands.d.ts +17 -0
  142. package/shared/listbox/move.d.ts +6 -0
  143. package/shared/listbox/options.d.ts +12 -0
  144. package/shared/listbox/selection.d.ts +28 -0
  145. package/shared/listbox/state.d.ts +26 -0
  146. package/shared/listbox/typeahead.d.ts +8 -0
  147. package/shared/listbox/with-options-filter.d.ts +440 -0
  148. package/shared/listbox/with-options.d.ts +862 -0
  149. package/side-drawer/definition.cjs +1 -1
  150. package/side-drawer/definition.js +1 -1
  151. package/simple-color-picker/definition.cjs +1 -1
  152. package/simple-color-picker/definition.js +1 -1
  153. package/simple-color-picker/index.cjs +6 -6
  154. package/simple-color-picker/index.js +4 -3
  155. package/split-button/definition.cjs +1 -1
  156. package/split-button/definition.js +1 -1
  157. package/status/definition.cjs +1 -1
  158. package/status/definition.js +1 -1
  159. package/switch/definition.cjs +1 -1
  160. package/switch/definition.js +1 -1
  161. package/tab/definition.cjs +1 -1
  162. package/tab/definition.js +1 -1
  163. package/tab-panel/definition.cjs +1 -1
  164. package/tab-panel/definition.js +1 -1
  165. package/table/definition.cjs +1 -1
  166. package/table/definition.js +1 -1
  167. package/table/index.cjs +13 -13
  168. package/table/index.js +4 -3
  169. package/tabs/definition.cjs +1 -1
  170. package/tabs/definition.js +1 -1
  171. package/tag/definition.cjs +1 -1
  172. package/tag/definition.js +1 -1
  173. package/tag/index.cjs +11 -11
  174. package/tag/index.js +4 -3
  175. package/tag-group/definition.cjs +1 -1
  176. package/tag-group/definition.js +1 -1
  177. package/text-area/definition.cjs +1 -1
  178. package/text-area/definition.js +1 -1
  179. package/time-picker/definition.cjs +1 -1
  180. package/time-picker/definition.js +1 -1
  181. package/tree-item/definition.cjs +1 -1
  182. package/tree-item/definition.js +1 -1
  183. package/tree-view/definition.cjs +1 -1
  184. package/tree-view/definition.js +1 -1
  185. package/unbundled/affix.cjs +2 -2
  186. package/unbundled/affix.js +1 -1
  187. package/unbundled/base-progress.cjs +1 -1
  188. package/unbundled/base-progress.js +1 -1
  189. package/unbundled/button.cjs +2 -2
  190. package/unbundled/button.js +2 -2
  191. package/unbundled/definition.cjs +2 -65
  192. package/unbundled/definition.js +4 -61
  193. package/unbundled/definition11.cjs +4 -3
  194. package/unbundled/definition11.js +3 -2
  195. package/unbundled/definition12.cjs +3 -2
  196. package/unbundled/definition12.js +3 -2
  197. package/unbundled/definition14.cjs +2 -1
  198. package/unbundled/definition14.js +2 -1
  199. package/unbundled/definition17.cjs +9 -4
  200. package/unbundled/definition17.js +9 -4
  201. package/unbundled/definition2.cjs +7 -2
  202. package/unbundled/definition2.js +8 -3
  203. package/unbundled/definition21.cjs +2 -1
  204. package/unbundled/definition21.js +2 -1
  205. package/unbundled/definition23.cjs +2 -1
  206. package/unbundled/definition23.js +2 -1
  207. package/unbundled/definition24.cjs +6 -4
  208. package/unbundled/definition24.js +6 -4
  209. package/unbundled/definition25.cjs +2 -1
  210. package/unbundled/definition25.js +2 -1
  211. package/unbundled/definition26.cjs +7 -4
  212. package/unbundled/definition26.js +7 -4
  213. package/unbundled/definition27.cjs +39 -5
  214. package/unbundled/definition27.js +40 -6
  215. package/unbundled/definition28.cjs +4 -3
  216. package/unbundled/definition28.js +4 -3
  217. package/unbundled/definition29.cjs +5 -168
  218. package/unbundled/definition29.js +11 -162
  219. package/unbundled/definition30.cjs +2 -63
  220. package/unbundled/definition30.js +5 -54
  221. package/unbundled/definition31.cjs +5 -3
  222. package/unbundled/definition31.js +5 -3
  223. package/unbundled/definition32.cjs +2 -1
  224. package/unbundled/definition32.js +2 -1
  225. package/unbundled/definition35.cjs +2 -1
  226. package/unbundled/definition35.js +2 -1
  227. package/unbundled/definition37.cjs +1 -1
  228. package/unbundled/definition37.js +1 -1
  229. package/unbundled/definition39.cjs +1 -1
  230. package/unbundled/definition39.js +1 -1
  231. package/unbundled/definition40.cjs +4 -2
  232. package/unbundled/definition40.js +4 -2
  233. package/unbundled/definition41.cjs +11 -6
  234. package/unbundled/definition41.js +11 -6
  235. package/unbundled/definition42.cjs +5 -4
  236. package/unbundled/definition42.js +5 -4
  237. package/unbundled/definition44.cjs +3 -2
  238. package/unbundled/definition44.js +3 -2
  239. package/unbundled/definition45.cjs +2 -2
  240. package/unbundled/definition45.js +2 -2
  241. package/unbundled/definition49.cjs +583 -79
  242. package/unbundled/definition49.js +579 -76
  243. package/unbundled/definition50.cjs +71 -33
  244. package/unbundled/definition50.js +67 -29
  245. package/unbundled/definition51.cjs +54 -23
  246. package/unbundled/definition51.js +52 -18
  247. package/unbundled/definition52.cjs +23 -39
  248. package/unbundled/definition52.js +17 -36
  249. package/unbundled/definition53.cjs +29 -314
  250. package/unbundled/definition53.js +27 -312
  251. package/unbundled/definition54.cjs +302 -195
  252. package/unbundled/definition54.js +298 -191
  253. package/unbundled/definition55.cjs +210 -40
  254. package/unbundled/definition55.js +206 -36
  255. package/unbundled/definition56.cjs +42 -266
  256. package/unbundled/definition56.js +38 -262
  257. package/unbundled/definition57.cjs +270 -50
  258. package/unbundled/definition57.js +267 -46
  259. package/unbundled/definition58.cjs +48 -146
  260. package/unbundled/definition58.js +47 -143
  261. package/unbundled/definition59.cjs +127 -225
  262. package/unbundled/definition59.js +122 -223
  263. package/unbundled/definition6.cjs +2 -1
  264. package/unbundled/definition6.js +2 -1
  265. package/unbundled/definition60.cjs +199 -418
  266. package/unbundled/definition60.js +196 -415
  267. package/unbundled/definition61.cjs +442 -3738
  268. package/unbundled/definition61.js +432 -3565
  269. package/unbundled/definition62.cjs +3717 -730
  270. package/unbundled/definition62.js +3544 -720
  271. package/unbundled/definition63.cjs +770 -97
  272. package/unbundled/definition63.js +767 -94
  273. package/unbundled/definition64.cjs +100 -999
  274. package/unbundled/definition64.js +98 -994
  275. package/unbundled/definition65.cjs +991 -93
  276. package/unbundled/definition65.js +985 -90
  277. package/unbundled/definition66.cjs +109 -73
  278. package/unbundled/definition66.js +105 -63
  279. package/unbundled/definition67.cjs +69 -155
  280. package/unbundled/definition67.js +60 -152
  281. package/unbundled/definition68.cjs +155 -119
  282. package/unbundled/definition68.js +151 -115
  283. package/unbundled/definition69.cjs +124 -49
  284. package/unbundled/definition69.js +120 -45
  285. package/unbundled/definition70.cjs +51 -85
  286. package/unbundled/definition70.js +50 -81
  287. package/unbundled/definition71.cjs +91 -19
  288. package/unbundled/definition71.js +86 -14
  289. package/unbundled/definition72.cjs +20 -87
  290. package/unbundled/definition72.js +14 -84
  291. package/unbundled/definition73.cjs +77 -294
  292. package/unbundled/definition73.js +72 -217
  293. package/unbundled/definition74.cjs +289 -311
  294. package/unbundled/definition74.js +219 -306
  295. package/unbundled/definition75.cjs +326 -26
  296. package/unbundled/definition75.js +317 -23
  297. package/unbundled/definition76.cjs +27 -122
  298. package/unbundled/definition76.js +22 -118
  299. package/unbundled/definition77.cjs +105 -232
  300. package/unbundled/definition77.js +101 -228
  301. package/unbundled/definition78.cjs +259 -26
  302. package/unbundled/definition78.js +249 -23
  303. package/unbundled/definition79.cjs +29 -148
  304. package/unbundled/definition79.js +27 -133
  305. package/unbundled/definition80.cjs +118 -173
  306. package/unbundled/definition80.js +109 -169
  307. package/unbundled/definition81.cjs +181 -477
  308. package/unbundled/definition81.js +176 -471
  309. package/unbundled/definition82.cjs +517 -0
  310. package/unbundled/definition82.js +497 -0
  311. package/unbundled/extractOptions.cjs +5 -5
  312. package/unbundled/extractOptions.js +2 -2
  313. package/unbundled/icon.cjs +67 -0
  314. package/unbundled/icon.js +61 -0
  315. package/unbundled/linkable.cjs +1 -1
  316. package/unbundled/linkable.js +1 -1
  317. package/unbundled/listbox.cjs +8 -3
  318. package/unbundled/listbox.js +7 -2
  319. package/unbundled/mixins.cjs +2 -1
  320. package/unbundled/mixins.js +2 -1
  321. package/unbundled/optgroup.cjs +66 -0
  322. package/unbundled/optgroup.js +54 -0
  323. package/unbundled/option.cjs +176 -0
  324. package/unbundled/option.js +164 -0
  325. package/unbundled/time-selection-picker.template.cjs +1 -1
  326. package/unbundled/time-selection-picker.template.js +1 -1
  327. package/unbundled/vivid-element.cjs +1 -1
  328. package/unbundled/vivid-element.js +1 -1
  329. package/video-player/definition.cjs +1 -1
  330. package/video-player/definition.js +1 -1
  331. package/vivid.api.json +336 -193
@@ -1,118 +1,622 @@
1
- require("./chunk.cjs");
1
+ const require_chunk = require("./chunk.cjs");
2
2
  const require_vivid_element = require("./vivid-element.cjs");
3
- const require_definition = require("./definition.cjs");
4
3
  const require_decorate = require("./decorate.cjs");
5
- const require_affix = require("./affix.cjs");
6
- const require_delegates_aria = require("./delegates-aria.cjs");
4
+ const require_host_semantics = require("./host-semantics.cjs");
5
+ const require_option = require("./option.cjs");
6
+ const require_optgroup = require("./optgroup.cjs");
7
+ const require_extractOptions = require("./extractOptions.cjs");
7
8
  let _microsoft_fast_element = require("@microsoft/fast-element");
8
9
  let _microsoft_fast_web_utilities = require("@microsoft/fast-web-utilities");
9
- //#region src/lib/nav-disclosure/nav-disclosure.scss?inline
10
- var nav_disclosure_default = ".control.connotation-cta{--_connotation-color-primary:var(--vvd-nav-disclosure-cta-primary,var(--vvd-color-cta-500));--_connotation-color-primary-text:var(--vvd-nav-disclosure-cta-primary-text,var(--vvd-color-canvas));--_connotation-color-primary-increment:var(--vvd-nav-disclosure-cta-primary-increment,var(--vvd-color-cta-600));--_connotation-color-contrast:var(--vvd-nav-disclosure-cta-contrast,var(--vvd-color-cta-800));--_connotation-color-fierce:var(--vvd-nav-disclosure-cta-fierce,var(--vvd-color-cta-700));--_connotation-color-fierce-primary:var(--vvd-nav-disclosure-cta-fierce-primary,var(--vvd-color-cta-700));--_connotation-color-faint:var(--vvd-nav-disclosure-cta-faint,var(--vvd-color-cta-50));--_connotation-color-firm:var(--vvd-nav-disclosure-cta-firm,var(--vvd-color-cta-600));--_connotation-color-soft:var(--vvd-nav-disclosure-cta-soft,var(--vvd-color-cta-100))}.control:not(.connotation-cta){--_connotation-color-primary:var(--vvd-nav-disclosure-accent-primary,var(--vvd-color-canvas-text));--_connotation-color-primary-text:var(--vvd-nav-disclosure-accent-primary-text,var(--vvd-color-canvas));--_connotation-color-primary-increment:var(--vvd-nav-disclosure-accent-primary-increment,var(--vvd-color-neutral-800));--_connotation-color-contrast:var(--vvd-nav-disclosure-accent-contrast,var(--vvd-color-neutral-800));--_connotation-color-fierce:var(--vvd-nav-disclosure-accent-fierce,var(--vvd-color-neutral-700));--_connotation-color-fierce-primary:var(--vvd-nav-disclosure-accent-fierce-primary,var(--vvd-color-canvas-text));--_connotation-color-faint:var(--vvd-nav-disclosure-accent-faint,var(--vvd-color-neutral-50));--_connotation-color-firm:var(--vvd-nav-disclosure-accent-firm,var(--vvd-color-canvas-text));--_connotation-color-soft:var(--vvd-nav-disclosure-accent-soft,var(--vvd-color-neutral-100))}.control,.control.appearance-ghost-light{--_appearance-color-text:var(--_connotation-color-firm);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}@media (hover:hover){.control:hover:where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text:var(--_connotation-color-firm);--_appearance-color-fill:var(--_connotation-color-faint);--_appearance-color-outline:transparent}.control:hover:where(:not(.disabled,:disabled,.readonly)).appearance-ghost-light{--_appearance-color-text:var(--_connotation-color-fierce-primary);--_appearance-color-fill:color-mix(in sRGB, var(--_connotation-color-primary), transparent 90%);--_appearance-color-outline:transparent}}.control.hover:where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text:var(--_connotation-color-firm);--_appearance-color-fill:var(--_connotation-color-faint);--_appearance-color-outline:transparent}.control.hover:where(:not(.disabled,:disabled,.readonly)).appearance-ghost-light{--_appearance-color-text:var(--_connotation-color-fierce-primary);--_appearance-color-fill:color-mix(in sRGB, var(--_connotation-color-primary), transparent 90%);--_appearance-color-outline:transparent}.control:active:where(:not(.disabled,:disabled)){--_appearance-color-text:var(--_connotation-color-firm);--_appearance-color-fill:var(--_connotation-color-soft);--_appearance-color-outline:transparent}.control:active:where(:not(.disabled,:disabled)).appearance-ghost-light{--_appearance-color-text:var(--_connotation-color-fierce-primary);--_appearance-color-fill:color-mix(in sRGB, var(--_connotation-color-primary), transparent 80%);--_appearance-color-outline:transparent}.control.active:where(:not(.disabled,:disabled)){--_appearance-color-text:var(--_connotation-color-firm);--_appearance-color-fill:var(--_connotation-color-soft);--_appearance-color-outline:transparent}.control.active:where(:not(.disabled,:disabled)).appearance-ghost-light{--_appearance-color-text:var(--_connotation-color-fierce-primary);--_appearance-color-fill:color-mix(in sRGB, var(--_connotation-color-primary), transparent 80%);--_appearance-color-outline:transparent}.control.selected:where(:not(.disabled,:disabled)){--_appearance-color-text:var(--_connotation-color-primary-text);--_appearance-color-fill:var(--_connotation-color-primary);--_appearance-color-outline:transparent}.control.selected:where(:not(.disabled,:disabled)).appearance-ghost-light{--_appearance-color-text:var(--_connotation-color-primary-text);--_appearance-color-fill:color-mix(in sRGB, var(--_connotation-color-firm), transparent 10%);--_appearance-color-outline:transparent}@media (hover:hover){.control.selected:hover:where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text:var(--_connotation-color-primary-text);--_appearance-color-fill:var(--_connotation-color-primary-increment);--_appearance-color-outline:transparent}.control.selected:hover:where(:not(.disabled,:disabled,.readonly)).appearance-ghost-light{--_appearance-color-text:var(--_connotation-color-primary-text);--_appearance-color-fill:color-mix(in sRGB, var(--_connotation-color-fierce-primary), transparent 20%);--_appearance-color-outline:transparent}}.control.selected.hover:where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text:var(--_connotation-color-primary-text);--_appearance-color-fill:var(--_connotation-color-primary-increment);--_appearance-color-outline:transparent}.control.selected.hover:where(:not(.disabled,:disabled,.readonly)).appearance-ghost-light{--_appearance-color-text:var(--_connotation-color-primary-text);--_appearance-color-fill:color-mix(in sRGB, var(--_connotation-color-fierce-primary), transparent 20%);--_appearance-color-outline:transparent}.control{box-sizing:border-box;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);cursor:pointer;font:var(--vvd-typography-base);hyphens:auto;inline-size:100%;min-block-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2)));vertical-align:middle;border-radius:8px;align-items:center;gap:12px;padding-block:10px;padding-inline:16px;text-decoration:none;display:flex}.control.current-closed{color:var(--_appearance-color-text)}@supports not (color:color-mix(in srgb, var(--one-color), var(--second-color))){.control.current-closed{background-color:var(--_connotation-color-primary)}}.control:not(.current-closed){color:var(--vvd-color-canvas-text);--focus-stroke-gap-color:transparent}.control:focus-visible{box-shadow:0 0 0 4px color-mix(in sRGB, var(--focus-stroke-color,var(--vvd-color-cta-500)), transparent 85%), inset 0 0 0 3px var(--focus-stroke-gap-color,currentColor);outline:1px solid var(--focus-stroke-color,var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset,0px))}.control{user-select:none}.control .toggleIcon{margin-inline-start:auto}slot[name=icon]{font-size:20px;line-height:1}.content{border-inline-start:1px solid var(--vvd-color-neutral-200);flex-direction:column;gap:4px;margin-block:4px;margin-inline-start:20px;padding-inline-start:12px;display:flex}details>summary{list-style:none}details>summary::-webkit-details-marker{display:none}";
10
+ let scroll_into_view_if_needed = require("scroll-into-view-if-needed");
11
+ scroll_into_view_if_needed = require_chunk.__toESM(scroll_into_view_if_needed, 1);
12
+ //#region src/shared/listbox/with-options-filter.ts
13
+ function applyFilter(allOptions, allElements, optionFilter, searchText) {
14
+ const newFilteredOptions = [];
15
+ for (const option of allOptions) {
16
+ option._vvdSearchText = searchText;
17
+ const matches = !searchText || optionFilter(option, searchText);
18
+ option._isNotMatching = !matches;
19
+ if (!option.hidden && !option.disabled && matches) newFilteredOptions.push(option);
20
+ }
21
+ for (const el of allElements) if (require_optgroup.isOptgroup(el)) {
22
+ const hasVisibleOption = Array.from(el.children).some((child) => require_option.isListboxOption(child) && !child._isNotMatching && !child.hidden);
23
+ el.style.display = hasVisibleOption ? "" : "none";
24
+ }
25
+ return newFilteredOptions;
26
+ }
27
+ var WithOptionsFilter = (Base) => {
28
+ class WithOptionsElement extends Base {
29
+ constructor(..._args) {
30
+ super(..._args);
31
+ this.searchText = "";
32
+ this._filteredOptions = [];
33
+ }
34
+ /** @internal */
35
+ _slottedOptionsChanged() {
36
+ super._slottedOptionsChanged();
37
+ this._updateFilter();
38
+ }
39
+ /** @internal */
40
+ searchTextChanged() {
41
+ this._updateFilter();
42
+ }
43
+ /** @internal */
44
+ optionFilterChanged() {
45
+ this._updateFilter();
46
+ }
47
+ /** @internal */
48
+ _updateFilter() {
49
+ this._filteredOptions = applyFilter(this._slottedOptions, this._slottedElements, this.optionFilter ?? ((option, searchText) => option.text.toLowerCase().includes(searchText.toLowerCase())), this.searchText);
50
+ }
51
+ }
52
+ require_decorate.__decorate([(0, _microsoft_fast_element.attr)({
53
+ attribute: "search-text",
54
+ mode: "fromView"
55
+ })], WithOptionsElement.prototype, "searchText", void 0);
56
+ require_decorate.__decorate([_microsoft_fast_element.observable], WithOptionsElement.prototype, "optionFilter", void 0);
57
+ require_decorate.__decorate([_microsoft_fast_element.observable], WithOptionsElement.prototype, "_filteredOptions", void 0);
58
+ return WithOptionsElement;
59
+ };
60
+ //#endregion
61
+ //#region src/shared/listbox/with-options.ts
62
+ /** A mixin for elements that accept slotted options */
63
+ var WithOptions = (Base) => {
64
+ class WithOptionsElement extends Base {
65
+ constructor(..._args) {
66
+ super(..._args);
67
+ this._slottedElements = [];
68
+ this.#onOptgroupChange = () => {
69
+ this._slottedElementsChanged();
70
+ };
71
+ this._slottedOptions = [];
72
+ }
73
+ /** @internal */
74
+ _slottedElementsChanged() {
75
+ this._slottedOptions = require_extractOptions.extractOptions(this._slottedElements);
76
+ }
77
+ #onOptgroupChange;
78
+ connectedCallback() {
79
+ super.connectedCallback();
80
+ this.addEventListener("optgroup-change", this.#onOptgroupChange);
81
+ }
82
+ disconnectedCallback() {
83
+ super.disconnectedCallback();
84
+ this.removeEventListener("optgroup-change", this.#onOptgroupChange);
85
+ }
86
+ /** @internal */
87
+ _slottedOptionsChanged() {
88
+ for (const option of this._slottedOptions) if (!option.id) option.id = (0, _microsoft_fast_web_utilities.uniqueId)("option-");
89
+ }
90
+ }
91
+ require_decorate.__decorate([_microsoft_fast_element.observable], WithOptionsElement.prototype, "_slottedElements", void 0);
92
+ require_decorate.__decorate([_microsoft_fast_element.observable], WithOptionsElement.prototype, "_slottedOptions", void 0);
93
+ return WithOptionsElement;
94
+ };
95
+ var optionsTemplate = _microsoft_fast_element.html`<slot
96
+ ${(0, _microsoft_fast_element.slotted)({
97
+ filter: ((n) => require_option.isListboxOption(n) || require_optgroup.isOptgroup(n)),
98
+ flatten: true,
99
+ property: "_slottedElements"
100
+ })}
101
+ >
102
+ </slot>`;
103
+ //#endregion
104
+ //#region src/shared/listbox/selection.ts
105
+ var modifierKeys = (e) => {
106
+ const modKey = e.ctrlKey || e.metaKey;
107
+ return e.shiftKey && modKey ? "ShiftMod" : e.shiftKey ? "Shift" : modKey ? "Mod" : null;
108
+ };
109
+ var selectionForMove = (state, ctx, move, mods) => {
110
+ if (move.amount === "step" && mods === "Mod") return null;
111
+ if (ctx.selectionMode === "multiple") {
112
+ if (move.amount === "step" && mods === "Shift") return {
113
+ action: {
114
+ type: "extend-from-anchor",
115
+ anchorIndex: state.rangeAnchorIndex ?? state.activeIndex
116
+ },
117
+ replaceExisting: false
118
+ };
119
+ if (move.amount === "limit" && mods === "ShiftMod") return {
120
+ action: { type: "select-from-current" },
121
+ replaceExisting: false
122
+ };
123
+ }
124
+ if (ctx.selectionBehavior === "replace") return {
125
+ action: { type: "select" },
126
+ replaceExisting: true
127
+ };
128
+ return null;
129
+ };
130
+ /** How the selection should change when an option is triggered (by pressing Space or clicking) */
131
+ var selectionForTrigger = (ctx, mods) => {
132
+ if (mods === "Shift") return {
133
+ action: { type: "select-from-most-recent" },
134
+ replaceExisting: ctx.selectionBehavior === "replace"
135
+ };
136
+ if (mods === "Mod") return {
137
+ action: { type: "toggle" },
138
+ replaceExisting: false
139
+ };
140
+ if (ctx.selectionBehavior === "replace") return {
141
+ action: { type: "select" },
142
+ replaceExisting: true
143
+ };
144
+ return {
145
+ action: { type: "toggle" },
146
+ replaceExisting: false
147
+ };
148
+ };
149
+ function addRange(baseValues, ctx, fromIdx, toIdx) {
150
+ const baseSet = new Set(baseValues);
151
+ const [from, to] = [fromIdx, toIdx].sort((a, b) => a - b);
152
+ const newValues = [...baseValues];
153
+ for (let i = from; i <= to; i++) {
154
+ const v = ctx.selectable.optionValue(i);
155
+ if (!baseSet.has(v)) newValues.push(v);
156
+ }
157
+ return newValues;
158
+ }
159
+ function updateAnchoredRange(baseValues, ctx, anchorIdx, targetIdx, prevTargetIdx) {
160
+ const baseSet = new Set(baseValues);
161
+ const [from, , to] = [
162
+ anchorIdx,
163
+ targetIdx,
164
+ prevTargetIdx
165
+ ].sort((a, b) => a - b);
166
+ let newValues = [...baseValues];
167
+ for (let i = from; i <= to; i++) {
168
+ const v = ctx.selectable.optionValue(i);
169
+ if (i < anchorIdx && i < targetIdx || i > anchorIdx && i > targetIdx) {
170
+ if (baseSet.has(v)) newValues = newValues.filter((val) => val !== v);
171
+ } else if (!baseSet.has(v)) newValues.push(v);
172
+ }
173
+ return newValues;
174
+ }
175
+ function mostRecentlySelectedIndex(state, ctx) {
176
+ const values = state.values;
177
+ for (let i = values.length - 1; i >= 0; i--) {
178
+ const index = ctx.selectable.optionIndex(values[i]);
179
+ if (index !== null) return index;
180
+ }
181
+ return null;
182
+ }
183
+ function applyAction(state, ctx, command) {
184
+ const newState = (v) => {
185
+ return {
186
+ ...state,
187
+ values: v.values ?? state.values,
188
+ activeIndex: v.activeIndex ?? state.activeIndex,
189
+ rangeAnchorIndex: v.rangeAnchorIndex ?? null
190
+ };
191
+ };
192
+ if (command.type !== "action") return newState({});
193
+ const prevValues = state.values;
194
+ const { targetIndex, selection } = command;
195
+ const enforceRestrictions = (newValues) => {
196
+ if (ctx.selectionMode === "single" && newValues.length > 1) return [newValues[newValues.length - 1]];
197
+ if (ctx.requiredSelection !== "none") {
198
+ if (newValues.length === 0) return prevValues;
199
+ if (ctx.requiredSelection === "selectable") {
200
+ if (!newValues.some((v) => ctx.selectable.optionIndex(v) !== null)) return prevValues;
201
+ }
202
+ }
203
+ return newValues;
204
+ };
205
+ const targetValue = ctx.selectable.optionValue(targetIndex);
206
+ const baseValues = selection?.replaceExisting ? [] : prevValues;
207
+ switch (selection?.action.type) {
208
+ case void 0: return newState({ activeIndex: targetIndex });
209
+ case "select": return newState({
210
+ activeIndex: targetIndex,
211
+ values: enforceRestrictions(prevValues.includes(targetValue) ? prevValues : [...baseValues, targetValue])
212
+ });
213
+ case "toggle": return newState({
214
+ activeIndex: targetIndex,
215
+ values: enforceRestrictions(prevValues.includes(targetValue) ? baseValues.filter((v) => v !== targetValue) : [...baseValues, targetValue])
216
+ });
217
+ case "select-from-current": return newState({
218
+ activeIndex: targetIndex,
219
+ values: enforceRestrictions(addRange(baseValues, ctx, state.activeIndex, targetIndex))
220
+ });
221
+ case "select-from-most-recent": return newState({
222
+ activeIndex: targetIndex,
223
+ values: enforceRestrictions(addRange(baseValues, ctx, mostRecentlySelectedIndex(state, ctx) ?? 0, targetIndex))
224
+ });
225
+ case "extend-from-anchor": return newState({
226
+ values: enforceRestrictions(updateAnchoredRange(baseValues, ctx, selection.action.anchorIndex, targetIndex, state.activeIndex)),
227
+ activeIndex: targetIndex,
228
+ rangeAnchorIndex: selection.action.anchorIndex
229
+ });
230
+ }
231
+ }
232
+ //#endregion
233
+ //#region src/shared/listbox/typeahead.ts
234
+ var TypeaheadTimeout = 2e3;
235
+ function typeaheadFromKey(state, _ctx, key, now) {
236
+ const typeahead = state.typeahead && state.typeahead.lastInputMs > now - TypeaheadTimeout ? state.typeahead : null;
237
+ return key.length === 1 && !(key === _microsoft_fast_web_utilities.keySpace && !typeahead) ? {
238
+ buffer: (typeahead?.buffer ?? "") + key,
239
+ lastInputMs: now
240
+ } : null;
241
+ }
242
+ function applyTypeahead(state, ctx, command) {
243
+ if (command.type !== "typeahead") return {
244
+ ...state,
245
+ typeahead: null
246
+ };
247
+ const typeahead = command.typeahead;
248
+ for (let candidateIdx = (state.activeIndex + 1) % ctx.selectable.numOptions; candidateIdx !== state.activeIndex; candidateIdx = (candidateIdx + 1) % ctx.selectable.numOptions) if (ctx.selectable.optionText(candidateIdx).toLowerCase().startsWith(typeahead.buffer.toLowerCase())) return {
249
+ ...applyAction(state, ctx, {
250
+ type: "action",
251
+ targetIndex: candidateIdx,
252
+ selection: command.selection
253
+ }),
254
+ typeahead
255
+ };
256
+ return {
257
+ ...state,
258
+ typeahead
259
+ };
260
+ }
261
+ //#endregion
262
+ //#region src/shared/listbox/options.ts
263
+ var optionsInterface = (options) => ({
264
+ numOptions: options.length,
265
+ optionValue: (index) => options[index].value,
266
+ optionText: (index) => options[index].text,
267
+ optionIndex: (value) => {
268
+ const index = options.findIndex((o) => o.value === value);
269
+ return index === -1 ? null : index;
270
+ },
271
+ isEq: (newOptions) => options === newOptions
272
+ });
273
+ function initialValues(ctx, allOptions, providedValues) {
274
+ const selectedValues = allOptions.filter((option) => option.selected || providedValues.includes(option.value)).map((o) => o.value);
275
+ const maxSelected = ctx.selectionMode === "single" ? 1 : Infinity;
276
+ return ensureRequiredSelection(ctx, selectedValues.slice(0, maxSelected), maxSelected);
277
+ }
278
+ //#endregion
279
+ //#region src/shared/listbox/state.ts
280
+ function isUIState(state) {
281
+ return "activeIndex" in state;
282
+ }
283
+ function applyContextChange(state, newCtx, requestedValues) {
284
+ const validValues = requestedValues.filter((v) => newCtx.all.optionIndex(v) !== null);
285
+ const maxSelected = newCtx.selectionMode === "single" ? 1 : Infinity;
286
+ let values = validValues.slice(0, maxSelected);
287
+ values = ensureRequiredSelection(newCtx, values, maxSelected);
288
+ return {
289
+ ...state,
290
+ values
291
+ };
292
+ }
293
+ /**
294
+ * Applies the `requiredSelection` restriction to a set of values, selecting a selectable option if needed.
295
+ * @internal
296
+ */
297
+ function ensureRequiredSelection(ctx, values, maxSelected) {
298
+ if (ctx.requiredSelection === "none" || ctx.selectable.numOptions === 0) return values;
299
+ if (values.length === 0) return [ctx.selectable.optionValue(0)];
300
+ if (ctx.requiredSelection === "selectable") {
301
+ if (!values.some((v) => ctx.selectable.optionIndex(v) !== null)) return maxSelected === 1 ? [ctx.selectable.optionValue(0)] : [...values, ctx.selectable.optionValue(0)];
302
+ }
303
+ return values;
304
+ }
305
+ function initialState(ctx, providedOptions, providedValues) {
306
+ const values = initialValues(ctx, providedOptions, providedValues);
307
+ if (ctx.selectable.numOptions === 0) return valuesOnlyState(values);
308
+ let activeIndex = 0;
309
+ for (const candidate of values) {
310
+ const index = ctx.selectable.optionIndex(candidate);
311
+ if (index !== null) {
312
+ activeIndex = index;
313
+ break;
314
+ }
315
+ }
316
+ return {
317
+ values,
318
+ activeIndex,
319
+ typeahead: null,
320
+ rangeAnchorIndex: null
321
+ };
322
+ }
323
+ function valuesOnlyState(values) {
324
+ return { values };
325
+ }
326
+ //#endregion
327
+ //#region src/shared/listbox/move.ts
328
+ function moveFromKey(key) {
329
+ switch (key) {
330
+ case "Home": return {
331
+ direction: "backward",
332
+ amount: "limit"
333
+ };
334
+ case "End": return {
335
+ direction: "forward",
336
+ amount: "limit"
337
+ };
338
+ case "PageUp": return {
339
+ direction: "backward",
340
+ amount: "page"
341
+ };
342
+ case "PageDown": return {
343
+ direction: "forward",
344
+ amount: "page"
345
+ };
346
+ case "ArrowUp": return {
347
+ direction: "backward",
348
+ amount: "step"
349
+ };
350
+ case "ArrowDown": return {
351
+ direction: "forward",
352
+ amount: "step"
353
+ };
354
+ }
355
+ return null;
356
+ }
357
+ function moveIndex(index, numItems, pageSize, move) {
358
+ const limits = {
359
+ backward: 0,
360
+ forward: numItems - 1
361
+ };
362
+ const dirs = {
363
+ backward: -1,
364
+ forward: 1
365
+ };
366
+ const amounts = {
367
+ step: 1,
368
+ page: pageSize
369
+ };
370
+ switch (move.amount) {
371
+ case "limit": return limits[move.direction];
372
+ case "page":
373
+ case "step": return Math.min(limits.forward, Math.max(limits.backward, index + dirs[move.direction] * amounts[move.amount]));
374
+ }
375
+ }
11
376
  //#endregion
12
- //#region src/lib/nav-disclosure/nav-disclosure.ts
377
+ //#region src/shared/listbox/commands.ts
378
+ var PageSize = 10;
379
+ function commandFromKey(state, ctx, e, now) {
380
+ if (!isUIState(state)) return null;
381
+ const typeahead = typeaheadFromKey(state, ctx, e.key, now);
382
+ if (typeahead) return {
383
+ type: "typeahead",
384
+ typeahead,
385
+ selection: ctx.selectionBehavior === "replace" ? {
386
+ action: { type: "select" },
387
+ replaceExisting: true
388
+ } : null
389
+ };
390
+ const move = moveFromKey(e.key);
391
+ if (move) return {
392
+ type: "action",
393
+ targetIndex: moveIndex(state.activeIndex, ctx.selectable.numOptions, PageSize, move),
394
+ selection: selectionForMove(state, ctx, move, modifierKeys(e))
395
+ };
396
+ if (e.key === " ") return {
397
+ type: "action",
398
+ targetIndex: state.activeIndex,
399
+ selection: selectionForTrigger(ctx, modifierKeys(e))
400
+ };
401
+ return null;
402
+ }
403
+ function commandFromClick(_state, ctx, e, targetIndex) {
404
+ return {
405
+ type: "action",
406
+ targetIndex,
407
+ selection: selectionForTrigger(ctx, modifierKeys(e))
408
+ };
409
+ }
410
+ function apply(state, context, command) {
411
+ state = applyTypeahead(state, context, command);
412
+ state = applyAction(state, context, command);
413
+ return state;
414
+ }
415
+ //#endregion
416
+ //#region src/lib/listbox/listbox.ts
417
+ var deepEqual = (a, b) => JSON.stringify(a) === JSON.stringify(b);
13
418
  /**
14
419
  * @public
15
- * @component nav-disclosure
16
- * @slot - Default slot.
17
- * @slot meta - A slot to add additional content to the nav disclosure.
18
- * @slot icon - The preferred way to add an icon to the component.
19
- * @event {CustomEvent<undefined>} toggle - Event emitted when the nav disclosure is toggled.
20
- * @testSelector byLabel byLabel
21
- * @testAction expand toggleNavDisclosure true
22
- * @testAction collapse toggleNavDisclosure false
23
- * @testQuery current navCurrent true
24
- * @testQuery !current navCurrent false
25
- * @testQuery open open true
26
- * @testQuery closed open false
27
- * @testRef summary shadow summary
420
+ * @component listbox
421
+ * @slot - Holds the available options.
422
+ * @slot no-matches - Message that appears when no options match the search query.
423
+ * @event {CustomEvent<undefined>} change - Fired when the selected options change.
424
+ * @vueModel modelValue value change `event.currentTarget.value`
425
+ * @vueModel values values change `event.currentTarget.values`
28
426
  */
29
- var NavDisclosure = class extends require_affix.AffixIcon(require_delegates_aria.DelegatesAria(require_vivid_element.VividElement)) {
427
+ var Listbox = class extends WithOptionsFilter(WithOptions(require_host_semantics.HostSemantics(require_vivid_element.VividElement))) {
30
428
  constructor(..._args) {
31
429
  super(..._args);
32
- this.open = false;
33
- this.current = false;
34
- this.#onToggle = () => {
35
- this.open = this.details.open;
36
- this.$emit("toggle", void 0, { bubbles: false });
430
+ this.selectionMode = "single";
431
+ this.selectionBehavior = "toggle";
432
+ this.requiredSelection = "none";
433
+ this._activeDescendantId = null;
434
+ this.values = [];
435
+ this._state = valuesOnlyState([]);
436
+ this._ctx = {
437
+ selectionMode: "single",
438
+ selectionBehavior: "toggle",
439
+ requiredSelection: "none",
440
+ selectable: optionsInterface([]),
441
+ all: optionsInterface([])
442
+ };
443
+ this._externalChangeQueued = false;
444
+ }
445
+ /** @internal */
446
+ selectionModeChanged() {
447
+ this._registerExternalChange();
448
+ }
449
+ /** @internal */
450
+ selectionBehaviorChanged() {
451
+ this._registerExternalChange();
452
+ }
453
+ /** @internal */
454
+ requiredSelectionChanged() {
455
+ this._registerExternalChange();
456
+ }
457
+ /** @internal */
458
+ _filteredOptionsChanged() {
459
+ this._registerExternalChange();
460
+ }
461
+ /** @internal */
462
+ valuesChanged() {
463
+ if (this._state && !deepEqual(this._state.values, this.values)) this._registerExternalChange();
464
+ }
465
+ /** The first selected option value, or `null` if no option is selected. In single-selection mode, this can be used as an alternative to `values`. */
466
+ get value() {
467
+ return this.values[0] ?? null;
468
+ }
469
+ set value(value) {
470
+ this.values = value === null ? [] : [value];
471
+ }
472
+ /**
473
+ * Use a microtask to batch multiple synchronous changes. Otherwise, we may update the state based on half-applied changes.
474
+ * @internal
475
+ */
476
+ _registerExternalChange() {
477
+ if (!this._externalChangeQueued) {
478
+ this._externalChangeQueued = true;
479
+ queueMicrotask(() => this._applyPendingExternalChanges());
480
+ }
481
+ }
482
+ /**
483
+ * React to external changes of props or options
484
+ * @internal
485
+ */
486
+ _applyPendingExternalChanges() {
487
+ this._externalChangeQueued = false;
488
+ if (!this._ctx.all.isEq(this._slottedOptions) || !this._ctx.selectable.isEq(this._filteredOptions)) {
489
+ this._initializeState();
490
+ return;
491
+ }
492
+ const newCtx = {
493
+ ...this._ctx,
494
+ selectionMode: this.selectionMode,
495
+ selectionBehavior: this.selectionBehavior,
496
+ requiredSelection: this.requiredSelection
37
497
  };
498
+ this._ctx = newCtx;
499
+ this._applyNewState(applyContextChange(this._state, newCtx, this.values));
38
500
  }
39
501
  /** @internal */
40
- connectedCallback() {
41
- super.connectedCallback();
42
- this.details.addEventListener("toggle", this.#onToggle);
43
- this.details.open = this.open;
502
+ _initializeState() {
503
+ this._ctx = {
504
+ selectionMode: this.selectionMode,
505
+ selectionBehavior: this.selectionBehavior,
506
+ requiredSelection: this.requiredSelection,
507
+ selectable: optionsInterface(this._filteredOptions),
508
+ all: optionsInterface(this._slottedOptions)
509
+ };
510
+ if (!this._slottedOptions?.length) {
511
+ this._state = valuesOnlyState([]);
512
+ this._activeDescendantId = null;
513
+ return;
514
+ }
515
+ this._applyNewState(initialState(this._ctx, this._slottedOptions, this.values));
44
516
  }
45
517
  /** @internal */
46
- disconnectedCallback() {
47
- super.disconnectedCallback();
48
- this.details.removeEventListener("toggle", this.#onToggle);
518
+ _applyNewState(toState) {
519
+ if (isUIState(toState)) {
520
+ const activeOption = this._filteredOptions[toState.activeIndex];
521
+ this._activeDescendantId = activeOption.id;
522
+ (0, scroll_into_view_if_needed.default)(activeOption, {
523
+ block: "nearest",
524
+ scrollMode: "if-needed"
525
+ });
526
+ } else this._activeDescendantId = null;
527
+ const valuesChanged = !deepEqual(this.values, toState.values);
528
+ this._state = toState;
529
+ this.values = [...toState.values];
530
+ this._updateSlottedOptions();
531
+ if (valuesChanged) this.$emit("change", void 0, {
532
+ bubbles: false,
533
+ composed: false
534
+ });
535
+ }
536
+ /** @internal */
537
+ _updateSlottedOptions() {
538
+ for (const option of this._slottedOptions) {
539
+ option.selected = this.values.includes(option.value);
540
+ option._highlighted = Boolean(this._activeDescendantId && option.id === this._activeDescendantId);
541
+ }
542
+ }
543
+ /** @internal */
544
+ _onKeydown(e) {
545
+ const command = commandFromKey(this._state, this._ctx, e, Date.now());
546
+ if (command) {
547
+ this._applyNewState(apply(this._state, this._ctx, command));
548
+ return false;
549
+ }
550
+ return true;
551
+ }
552
+ /** @internal */
553
+ _onClick(e) {
554
+ const clickedOnOption = e.target.closest(`[data-vvd-component=option]`);
555
+ const targetIndex = clickedOnOption ? this._filteredOptions.indexOf(clickedOnOption) : -1;
556
+ if (targetIndex === -1) return true;
557
+ const state = this._state;
558
+ this._applyNewState(apply(state, this._ctx, commandFromClick(state, this._ctx, e, targetIndex)));
559
+ return false;
49
560
  }
50
- #onToggle;
51
561
  };
52
- require_decorate.__decorate([_microsoft_fast_element.attr], NavDisclosure.prototype, "label", void 0);
53
- require_decorate.__decorate([_microsoft_fast_element.attr], NavDisclosure.prototype, "appearance", void 0);
54
- require_decorate.__decorate([_microsoft_fast_element.attr], NavDisclosure.prototype, "connotation", void 0);
55
- require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "boolean" })], NavDisclosure.prototype, "open", void 0);
56
- require_decorate.__decorate([require_vivid_element.replaces({
57
- deprecatedPropertyName: "ariaCurrent",
58
- fromDeprecated: (v) => Boolean(v),
59
- toDeprecated: (v) => v ? "true" : null
60
- }), (0, _microsoft_fast_element.attr)({
61
- attribute: "current",
62
- mode: "boolean"
63
- })], NavDisclosure.prototype, "current", void 0);
562
+ require_decorate.__decorate([(0, _microsoft_fast_element.attr)({
563
+ attribute: "selection-mode",
564
+ mode: "fromView"
565
+ })], Listbox.prototype, "selectionMode", void 0);
566
+ require_decorate.__decorate([(0, _microsoft_fast_element.attr)({
567
+ attribute: "selection-behavior",
568
+ mode: "fromView"
569
+ })], Listbox.prototype, "selectionBehavior", void 0);
570
+ require_decorate.__decorate([(0, _microsoft_fast_element.attr)({
571
+ attribute: "required-selection",
572
+ mode: "fromView"
573
+ })], Listbox.prototype, "requiredSelection", void 0);
574
+ require_decorate.__decorate([_microsoft_fast_element.observable], Listbox.prototype, "_activeDescendantId", void 0);
575
+ require_decorate.__decorate([_microsoft_fast_element.observable], Listbox.prototype, "values", void 0);
576
+ //#endregion
577
+ //#region src/lib/listbox/listbox.scss?inline
578
+ var listbox_default = ":host{outline:none;flex-direction:column;gap:2px;display:flex}:host(:not(:focus-visible)){--_suppressable-focus-shadow:none;--_suppressable-focus-outline:none;--_suppressable-focus-outline-offset:0}";
64
579
  //#endregion
65
- //#region src/lib/nav-disclosure/nav-disclosure.template.ts
66
- var NavDisclosureTemplate = (context) => {
67
- const affixIconTemplate = require_affix.affixIconTemplateFactory(context);
68
- const iconTag = context.tagFor(require_definition.Icon);
69
- return _microsoft_fast_element.html`<details class="base" ${(0, _microsoft_fast_element.ref)("details")} ?open=${(x) => x.open}>
70
- <summary class="${(x) => (0, _microsoft_fast_web_utilities.classNames)("control", [`appearance-${x.appearance}`, Boolean(x.appearance)], [`connotation-${x.connotation}`, Boolean(x.connotation)], ["current-closed selected", x.current && !x.open])}"
71
- ${require_delegates_aria.delegateAria({
72
- role: "button",
73
- ariaExpanded: (x) => x.open,
74
- ariaCurrent: (x) => x.open ? null : x.current || x.ariaCurrent ? "true" : null,
75
- ariaControls: "disclosure-content"
580
+ //#region src/lib/listbox/listbox.template.ts
581
+ var listboxTemplate = (_context) => {
582
+ return _microsoft_fast_element.html`<template
583
+ tabindex="0"
584
+ ${require_host_semantics.applyHostSemantics({
585
+ role: "listbox",
586
+ ariaMultiSelectable: (x) => x.selectionMode === "multiple" ? "true" : void 0
76
587
  })}
77
- >
78
- ${(x) => affixIconTemplate(x.icon, require_affix.IconWrapper.Slot)}
79
- ${(x) => x.label}
80
- <slot name="meta"></slot>
81
- <${iconTag} class="toggleIcon" name=${(x) => x.open ? "chevron-up-line" : "chevron-down-line"}
82
- aria-hidden="true"></${iconTag}>
83
- </summary>
84
- <div class="content" id="disclosure-content">
85
- <slot></slot>
86
- </div>
87
- </details>
88
- `;
588
+ aria-activedescendant="${(x) => x._activeDescendantId}"
589
+ @click="${(x, c) => x._onClick(c.event)}"
590
+ @keydown="${(x, c) => x._onKeydown(c.event)}"
591
+ >${optionsTemplate}${(0, _microsoft_fast_element.when)((x) => x.searchText !== "" && x._filteredOptions.length === 0, _microsoft_fast_element.html`<slot name="no-matches"></slot>`)}</template
592
+ >`;
89
593
  };
90
594
  //#endregion
91
- //#region src/lib/nav-disclosure/definition.ts
595
+ //#region src/lib/listbox/definition.ts
92
596
  /** @internal */
93
- var navDisclosureDefinition = require_vivid_element.defineVividComponent("nav-disclosure", NavDisclosure, NavDisclosureTemplate, [require_definition.iconDefinition], { styles: nav_disclosure_default });
597
+ var listboxDefinition = require_vivid_element.defineVividComponent("listbox", Listbox, listboxTemplate, [], { styles: listbox_default });
94
598
  /**
95
- * Registers the nav-disclosure elements with the design system.
599
+ * Registers the listbox elements with the design system.
96
600
  *
97
601
  * @param prefix - the prefix to use for the component name
98
602
  */
99
- var registerNavDisclosure = require_vivid_element.createRegisterFunction(navDisclosureDefinition);
603
+ var registerListbox = require_vivid_element.createRegisterFunction(listboxDefinition);
100
604
  //#endregion
101
- Object.defineProperty(exports, "NavDisclosure", {
605
+ Object.defineProperty(exports, "Listbox", {
102
606
  enumerable: true,
103
607
  get: function() {
104
- return NavDisclosure;
608
+ return Listbox;
105
609
  }
106
610
  });
107
- Object.defineProperty(exports, "navDisclosureDefinition", {
611
+ Object.defineProperty(exports, "listboxDefinition", {
108
612
  enumerable: true,
109
613
  get: function() {
110
- return navDisclosureDefinition;
614
+ return listboxDefinition;
111
615
  }
112
616
  });
113
- Object.defineProperty(exports, "registerNavDisclosure", {
617
+ Object.defineProperty(exports, "registerListbox", {
114
618
  enumerable: true,
115
619
  get: function() {
116
- return registerNavDisclosure;
620
+ return registerListbox;
117
621
  }
118
622
  });