@vonage/vivid 5.23.1 → 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 (522) hide show
  1. package/README.md +1 -1
  2. package/accordion/index.cjs +1 -1
  3. package/accordion/index.js +1 -1
  4. package/accordion-item/index.cjs +1 -1
  5. package/accordion-item/index.js +1 -1
  6. package/audio-player/index.cjs +2 -2
  7. package/audio-player/index.js +3 -3
  8. package/avatar/index.cjs +10 -10
  9. package/avatar/index.js +4 -3
  10. package/badge/index.cjs +1 -1
  11. package/badge/index.js +1 -1
  12. package/breadcrumb-item/index.cjs +9 -5
  13. package/breadcrumb-item/index.js +11 -6
  14. package/bundled/affix.cjs +1 -1
  15. package/bundled/affix.js +1 -1
  16. package/bundled/definition10.cjs +2 -1
  17. package/bundled/definition10.js +3 -2
  18. package/bundled/definition11.cjs +4 -4
  19. package/bundled/definition11.js +4 -3
  20. package/bundled/definition12.cjs +1 -1
  21. package/bundled/definition12.js +1 -0
  22. package/bundled/definition15.cjs +8 -7
  23. package/bundled/definition15.js +27 -24
  24. package/bundled/definition17.cjs +7 -7
  25. package/bundled/definition17.js +22 -109
  26. package/bundled/definition18.cjs +12 -83
  27. package/bundled/definition18.js +20 -426
  28. package/bundled/definition19.cjs +87 -7
  29. package/bundled/definition19.js +433 -16
  30. package/bundled/definition20.cjs +7 -37
  31. package/bundled/definition20.js +17 -172
  32. package/bundled/definition21.cjs +35 -27
  33. package/bundled/definition21.js +155 -154
  34. package/bundled/definition22.cjs +29 -6
  35. package/bundled/definition22.js +172 -20
  36. package/bundled/definition23.cjs +6 -12
  37. package/bundled/definition23.js +17 -32
  38. package/bundled/definition24.cjs +12 -39
  39. package/bundled/definition24.js +33 -67
  40. package/bundled/definition25.cjs +44 -0
  41. package/bundled/definition25.js +81 -0
  42. package/bundled/definition3.cjs +5 -5
  43. package/bundled/definition3.js +10 -40
  44. package/bundled/definition4.cjs +6 -6
  45. package/bundled/definition4.js +4 -3
  46. package/bundled/definition6.cjs +11 -11
  47. package/bundled/definition6.js +4 -3
  48. package/bundled/definition9.cjs +12 -6
  49. package/bundled/definition9.js +66 -43
  50. package/bundled/extractOptions.cjs +1 -0
  51. package/bundled/extractOptions.js +11 -0
  52. package/bundled/icon.cjs +1 -0
  53. package/bundled/icon.js +34 -0
  54. package/bundled/listbox.cjs +1 -1
  55. package/bundled/listbox.js +28 -12
  56. package/bundled/mixins.cjs +8 -8
  57. package/bundled/mixins.js +4 -3
  58. package/bundled/optgroup.cjs +1 -0
  59. package/bundled/optgroup.js +27 -0
  60. package/bundled/option.cjs +1 -0
  61. package/bundled/option.js +93 -0
  62. package/bundled/render-in-light-dom.cjs +1 -1
  63. package/bundled/render-in-light-dom.js +16 -19
  64. package/bundled/vivid-element.cjs +1 -1
  65. package/bundled/vivid-element.js +9 -1
  66. package/card/index.cjs +22 -22
  67. package/card/index.js +4 -3
  68. package/color-picker/index.cjs +18 -18
  69. package/color-picker/index.js +4 -3
  70. package/combobox/definition.cjs +1 -1
  71. package/combobox/definition.js +1 -1
  72. package/combobox/index.cjs +7 -7
  73. package/combobox/index.js +31 -21
  74. package/country/definition.cjs +1 -1
  75. package/country/definition.js +1 -1
  76. package/country/index.cjs +1 -1
  77. package/country/index.js +1 -1
  78. package/country-group/definition.cjs +1 -1
  79. package/country-group/definition.js +1 -1
  80. package/country-group/index.cjs +1 -1
  81. package/country-group/index.js +2 -2
  82. package/custom-elements.json +8438 -7866
  83. package/data-grid/definition.cjs +1 -1
  84. package/data-grid/definition.js +1 -1
  85. package/data-grid/index.cjs +26 -26
  86. package/data-grid/index.js +9 -8
  87. package/date-picker/definition.cjs +1 -1
  88. package/date-picker/definition.js +1 -1
  89. package/date-picker/index.cjs +1 -1
  90. package/date-picker/index.js +1 -1
  91. package/date-range-picker/definition.cjs +1 -1
  92. package/date-range-picker/definition.js +1 -1
  93. package/date-range-picker/index.cjs +1 -1
  94. package/date-range-picker/index.js +1 -1
  95. package/date-time-picker/definition.cjs +1 -1
  96. package/date-time-picker/definition.js +1 -1
  97. package/date-time-picker/index.cjs +1 -1
  98. package/date-time-picker/index.js +1 -1
  99. package/dial-pad/definition.cjs +1 -1
  100. package/dial-pad/definition.js +1 -1
  101. package/dial-pad/index.cjs +7 -7
  102. package/dial-pad/index.js +124 -54
  103. package/dialog/definition.cjs +1 -1
  104. package/dialog/definition.js +1 -1
  105. package/dialog/index.cjs +14 -14
  106. package/dialog/index.js +4 -3
  107. package/divider/definition.cjs +1 -1
  108. package/divider/definition.js +1 -1
  109. package/divider/index.cjs +1 -1
  110. package/divider/index.js +1 -1
  111. package/empty-state/definition.cjs +1 -1
  112. package/empty-state/definition.js +1 -1
  113. package/empty-state/index.cjs +3 -3
  114. package/empty-state/index.js +4 -3
  115. package/fab/definition.cjs +1 -1
  116. package/fab/definition.js +1 -1
  117. package/file-picker/definition.cjs +1 -1
  118. package/file-picker/definition.js +1 -1
  119. package/file-picker/index.cjs +7 -7
  120. package/file-picker/index.js +4 -3
  121. package/flag/definition.cjs +1 -1
  122. package/flag/definition.js +1 -1
  123. package/header/definition.cjs +1 -1
  124. package/header/definition.js +1 -1
  125. package/header/index.cjs +3 -3
  126. package/header/index.js +3 -3
  127. package/icon/definition.cjs +2 -1
  128. package/icon/definition.js +2 -1
  129. package/index.cjs +209 -198
  130. package/index.js +59 -54
  131. package/kbd-key/definition.cjs +1 -1
  132. package/kbd-key/definition.js +1 -1
  133. package/kbd-shortcut/definition.cjs +1 -1
  134. package/kbd-shortcut/definition.js +1 -1
  135. package/layout/definition.cjs +1 -1
  136. package/layout/definition.js +1 -1
  137. package/lib/accordion-item/accordion-item.d.ts +3 -1
  138. package/lib/action-group/action-group.d.ts +1 -1
  139. package/lib/alert/alert.d.ts +2 -2
  140. package/lib/audio-player/audio-player.d.ts +1 -1
  141. package/lib/avatar/avatar.d.ts +1 -1
  142. package/lib/badge/badge.d.ts +1 -1
  143. package/lib/banner/banner.d.ts +3 -3
  144. package/lib/breadcrumb/breadcrumb.d.ts +1 -1
  145. package/lib/breadcrumb-item/breadcrumb-item.d.ts +1 -1
  146. package/lib/button/button.d.ts +3 -3
  147. package/lib/calendar-event/calendar-event.d.ts +1 -1
  148. package/lib/card/card.d.ts +1 -1
  149. package/lib/checkbox/checkbox.d.ts +6 -6
  150. package/lib/color-picker/color-picker.d.ts +7 -7
  151. package/lib/combobox/combobox.d.ts +8 -8
  152. package/lib/components.d.ts +2 -0
  153. package/lib/country-group/country-group.d.ts +2 -2
  154. package/lib/data-grid/data-grid-cell.d.ts +4 -3
  155. package/lib/data-grid/data-grid-row.d.ts +3 -2
  156. package/lib/data-grid/data-grid.options.d.ts +5 -0
  157. package/lib/date-picker/date-picker.d.ts +8 -8
  158. package/lib/date-range-picker/date-range-picker.d.ts +4 -4
  159. package/lib/date-time-picker/date-time-picker.d.ts +8 -8
  160. package/lib/dial-pad/dial-pad.d.ts +2 -2
  161. package/lib/dialog/dialog.d.ts +2 -2
  162. package/lib/divider/divider.d.ts +1 -1
  163. package/lib/fab/fab.d.ts +1 -1
  164. package/lib/file-picker/file-picker.d.ts +7 -7
  165. package/lib/header/header.d.ts +1 -1
  166. package/lib/listbox/definition.d.ts +3 -0
  167. package/lib/listbox/index.d.ts +1 -0
  168. package/lib/listbox/listbox.d.ts +1302 -0
  169. package/lib/listbox/listbox.template.d.ts +3 -0
  170. package/lib/listbox/variations.browser-spec.d.ts +1 -0
  171. package/lib/menu/menu.d.ts +2 -3
  172. package/lib/menu-item/menu-item.d.ts +3 -3
  173. package/lib/nav/nav.d.ts +1 -1
  174. package/lib/nav-disclosure/nav-disclosure.d.ts +2 -2
  175. package/lib/nav-item/nav-item.d.ts +2 -2
  176. package/lib/note/note.d.ts +1 -1
  177. package/lib/number-field/number-field.d.ts +9 -10
  178. package/lib/optgroup/definition.d.ts +3 -0
  179. package/lib/optgroup/index.d.ts +1 -0
  180. package/lib/optgroup/optgroup.d.ts +430 -0
  181. package/lib/optgroup/optgroup.template.d.ts +2 -0
  182. package/lib/optgroup/variations.browser-spec.d.ts +1 -0
  183. package/lib/option/option.d.ts +2 -2
  184. package/lib/pagination/pagination.d.ts +1 -1
  185. package/lib/popover/popover.d.ts +2 -2
  186. package/lib/progress/progress.d.ts +1 -1
  187. package/lib/progress-ring/progress-ring.d.ts +1 -1
  188. package/lib/radio/radio.d.ts +3 -3
  189. package/lib/radio-group/radio-group.d.ts +1 -1
  190. package/lib/range-slider/range-slider.d.ts +3 -3
  191. package/lib/rich-text-editor/rich-text-editor.d.ts +1 -1
  192. package/lib/rich-text-editor/rte/features/base.d.ts +1 -0
  193. package/lib/rich-text-editor/rte/utils/default-textblock.d.ts +2 -2
  194. package/lib/searchable-select/option-tag.d.ts +1 -1
  195. package/lib/searchable-select/searchable-select.d.ts +47 -47
  196. package/lib/select/select.d.ts +9 -9
  197. package/lib/selectable-box/selectable-box.d.ts +1 -1
  198. package/lib/simple-color-picker/simple-color-picker.d.ts +2 -2
  199. package/lib/slider/slider.d.ts +3 -3
  200. package/lib/split-button/split-button.d.ts +3 -3
  201. package/lib/status/status.d.ts +1 -1
  202. package/lib/switch/switch.d.ts +2 -2
  203. package/lib/tab/tab.d.ts +3 -3
  204. package/lib/tab-panel/tab-panel.d.ts +1 -1
  205. package/lib/table/table-cell.d.ts +1 -1
  206. package/lib/table/table-header-cell.d.ts +1 -1
  207. package/lib/table/table-row.d.ts +1 -1
  208. package/lib/table/table-sorting-button.d.ts +1 -1
  209. package/lib/tag/tag.d.ts +3 -3
  210. package/lib/tag-group/tag-group.d.ts +1 -1
  211. package/lib/tag-name-map.d.ts +3 -1
  212. package/lib/text-area/text-area.d.ts +8 -8
  213. package/lib/text-field/text-field.d.ts +10 -9
  214. package/lib/time-picker/time-picker.d.ts +4 -4
  215. package/lib/toggletip/toggletip.d.ts +3 -2
  216. package/lib/tooltip/tooltip.d.ts +3 -2
  217. package/lib/tree-item/tree-item.d.ts +2 -2
  218. package/lib/tree-view/tree-view.d.ts +1 -1
  219. package/lib/video-player/video-player.d.ts +1 -1
  220. package/listbox/definition.cjs +5 -0
  221. package/listbox/definition.js +2 -0
  222. package/listbox/index.cjs +11 -0
  223. package/listbox/index.js +540 -0
  224. package/menu/index.cjs +1 -1
  225. package/menu/index.js +1 -1
  226. package/menu-item/index.cjs +1 -1
  227. package/menu-item/index.js +1 -1
  228. package/nav/definition.cjs +1 -1
  229. package/nav/definition.js +1 -1
  230. package/nav-disclosure/definition.cjs +1 -1
  231. package/nav-disclosure/definition.js +1 -1
  232. package/nav-disclosure/index.cjs +4 -4
  233. package/nav-disclosure/index.js +4 -3
  234. package/nav-item/definition.cjs +1 -1
  235. package/nav-item/definition.js +1 -1
  236. package/note/definition.cjs +1 -1
  237. package/note/definition.js +1 -1
  238. package/number-field/definition.cjs +1 -1
  239. package/number-field/definition.js +1 -1
  240. package/number-field/index.cjs +1 -1
  241. package/number-field/index.js +1 -1
  242. package/optgroup/definition.cjs +6 -0
  243. package/optgroup/definition.js +3 -0
  244. package/optgroup/index.cjs +1 -0
  245. package/optgroup/index.js +4 -0
  246. package/option/definition.cjs +2 -1
  247. package/option/definition.js +2 -1
  248. package/package.json +9 -8
  249. package/pagination/definition.cjs +1 -1
  250. package/pagination/definition.js +1 -1
  251. package/platform-switch/definition.cjs +1 -1
  252. package/platform-switch/definition.js +1 -1
  253. package/popover/definition.cjs +1 -1
  254. package/popover/definition.js +1 -1
  255. package/popover/index.cjs +5 -5
  256. package/popover/index.js +4 -3
  257. package/progress/definition.cjs +1 -1
  258. package/progress/definition.js +1 -1
  259. package/radio/definition.cjs +1 -1
  260. package/radio/definition.js +1 -1
  261. package/radio-group/definition.cjs +1 -1
  262. package/radio-group/definition.js +1 -1
  263. package/range-slider/definition.cjs +1 -1
  264. package/range-slider/definition.js +1 -1
  265. package/rich-text-editor/definition.cjs +1 -1
  266. package/rich-text-editor/definition.js +1 -1
  267. package/rich-text-editor/index.cjs +13 -13
  268. package/rich-text-editor/index.js +26 -23
  269. package/rich-text-view/definition.cjs +1 -1
  270. package/rich-text-view/definition.js +1 -1
  271. package/searchable-select/definition.cjs +1 -1
  272. package/searchable-select/definition.js +1 -1
  273. package/searchable-select/index.cjs +23 -23
  274. package/searchable-select/index.js +67 -49
  275. package/select/definition.cjs +1 -1
  276. package/select/definition.js +1 -1
  277. package/select/index.cjs +1 -1
  278. package/select/index.js +1 -1
  279. package/selectable-box/definition.cjs +1 -1
  280. package/selectable-box/definition.js +1 -1
  281. package/shared/aria/delegates-aria.d.ts +1 -1
  282. package/shared/aria/host-semantics.d.ts +1 -1
  283. package/shared/color-picker/base-color-picker.d.ts +1 -1
  284. package/shared/feedback/feedback-message.d.ts +1 -1
  285. package/shared/feedback/mixins.d.ts +2 -2
  286. package/shared/foundation/button/button.d.ts +2 -2
  287. package/shared/foundation/form-associated/form-associated.d.ts +2 -2
  288. package/shared/foundation/listbox/extractOptions.d.ts +2 -0
  289. package/shared/foundation/listbox/listbox.d.ts +2 -0
  290. package/shared/listbox/commands.d.ts +17 -0
  291. package/shared/listbox/move.d.ts +6 -0
  292. package/shared/listbox/options.d.ts +12 -0
  293. package/shared/listbox/selection.d.ts +28 -0
  294. package/shared/listbox/state.d.ts +26 -0
  295. package/shared/listbox/typeahead.d.ts +8 -0
  296. package/shared/listbox/with-options-filter.d.ts +440 -0
  297. package/shared/listbox/with-options.d.ts +862 -0
  298. package/shared/patterns/affix.d.ts +2 -2
  299. package/shared/patterns/anchored.d.ts +2 -2
  300. package/shared/patterns/char-count/char-count.d.ts +1 -1
  301. package/shared/patterns/form-elements/form-element.d.ts +1 -1
  302. package/shared/patterns/form-elements/with-contextual-help.d.ts +1 -1
  303. package/shared/patterns/form-elements/with-error-text.d.ts +1 -1
  304. package/shared/patterns/form-elements/with-success-text.d.ts +1 -1
  305. package/shared/patterns/kbd-shortcut.d.ts +1 -1
  306. package/shared/patterns/linkable.d.ts +1 -1
  307. package/shared/patterns/localized.d.ts +2 -2
  308. package/shared/patterns/trapped-focus.d.ts +1 -1
  309. package/shared/picker-field/mixins/calendar-picker.d.ts +2 -2
  310. package/shared/picker-field/mixins/calendar-picker.template.d.ts +2 -2
  311. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +1 -1
  312. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +2 -2
  313. package/shared/picker-field/mixins/single-date-picker.d.ts +2 -2
  314. package/shared/picker-field/mixins/single-value-picker.d.ts +2 -2
  315. package/shared/picker-field/mixins/time-selection-picker.d.ts +2 -2
  316. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +4 -4
  317. package/shared/picker-field/picker-field.d.ts +7 -7
  318. package/side-drawer/definition.cjs +1 -1
  319. package/side-drawer/definition.js +1 -1
  320. package/simple-color-picker/definition.cjs +1 -1
  321. package/simple-color-picker/definition.js +1 -1
  322. package/simple-color-picker/index.cjs +6 -6
  323. package/simple-color-picker/index.js +4 -3
  324. package/split-button/definition.cjs +1 -1
  325. package/split-button/definition.js +1 -1
  326. package/split-button/index.cjs +1 -0
  327. package/split-button/index.js +1 -0
  328. package/status/definition.cjs +1 -1
  329. package/status/definition.js +1 -1
  330. package/switch/definition.cjs +1 -1
  331. package/switch/definition.js +1 -1
  332. package/switch/index.cjs +6 -5
  333. package/switch/index.js +16 -14
  334. package/tab/definition.cjs +1 -1
  335. package/tab/definition.js +1 -1
  336. package/tab-panel/definition.cjs +1 -1
  337. package/tab-panel/definition.js +1 -1
  338. package/table/definition.cjs +1 -1
  339. package/table/definition.js +1 -1
  340. package/table/index.cjs +13 -13
  341. package/table/index.js +4 -3
  342. package/tabs/definition.cjs +1 -1
  343. package/tabs/definition.js +1 -1
  344. package/tag/definition.cjs +1 -1
  345. package/tag/definition.js +1 -1
  346. package/tag/index.cjs +11 -11
  347. package/tag/index.js +4 -3
  348. package/tag-group/definition.cjs +1 -1
  349. package/tag-group/definition.js +1 -1
  350. package/text-area/definition.cjs +1 -1
  351. package/text-area/definition.js +1 -1
  352. package/time-picker/definition.cjs +1 -1
  353. package/time-picker/definition.js +1 -1
  354. package/tree-item/definition.cjs +1 -1
  355. package/tree-item/definition.js +1 -1
  356. package/tree-view/definition.cjs +1 -1
  357. package/tree-view/definition.js +1 -1
  358. package/unbundled/affix.cjs +2 -2
  359. package/unbundled/affix.js +1 -1
  360. package/unbundled/base-progress.cjs +1 -1
  361. package/unbundled/base-progress.js +1 -1
  362. package/unbundled/button.cjs +2 -2
  363. package/unbundled/button.js +2 -2
  364. package/unbundled/definition.cjs +2 -65
  365. package/unbundled/definition.js +4 -61
  366. package/unbundled/definition11.cjs +4 -3
  367. package/unbundled/definition11.js +3 -2
  368. package/unbundled/definition12.cjs +3 -2
  369. package/unbundled/definition12.js +3 -2
  370. package/unbundled/definition13.cjs +1 -1
  371. package/unbundled/definition13.js +1 -1
  372. package/unbundled/definition14.cjs +2 -1
  373. package/unbundled/definition14.js +2 -1
  374. package/unbundled/definition17.cjs +9 -4
  375. package/unbundled/definition17.js +9 -4
  376. package/unbundled/definition2.cjs +14 -3
  377. package/unbundled/definition2.js +15 -4
  378. package/unbundled/definition21.cjs +2 -1
  379. package/unbundled/definition21.js +2 -1
  380. package/unbundled/definition23.cjs +3 -1
  381. package/unbundled/definition23.js +4 -2
  382. package/unbundled/definition24.cjs +6 -4
  383. package/unbundled/definition24.js +6 -4
  384. package/unbundled/definition25.cjs +2 -1
  385. package/unbundled/definition25.js +2 -1
  386. package/unbundled/definition26.cjs +7 -4
  387. package/unbundled/definition26.js +7 -4
  388. package/unbundled/definition27.cjs +39 -5
  389. package/unbundled/definition27.js +40 -6
  390. package/unbundled/definition28.cjs +4 -3
  391. package/unbundled/definition28.js +4 -3
  392. package/unbundled/definition29.cjs +5 -168
  393. package/unbundled/definition29.js +11 -162
  394. package/unbundled/definition30.cjs +26 -506
  395. package/unbundled/definition30.js +24 -498
  396. package/unbundled/definition31.cjs +503 -39
  397. package/unbundled/definition31.js +501 -37
  398. package/unbundled/definition32.cjs +39 -239
  399. package/unbundled/definition32.js +36 -236
  400. package/unbundled/definition33.cjs +236 -74
  401. package/unbundled/definition33.js +233 -71
  402. package/unbundled/definition34.cjs +74 -1968
  403. package/unbundled/definition34.js +70 -1940
  404. package/unbundled/definition35.cjs +1993 -26
  405. package/unbundled/definition35.js +1965 -27
  406. package/unbundled/definition36.cjs +26 -111
  407. package/unbundled/definition36.js +23 -103
  408. package/unbundled/definition37.cjs +53 -294
  409. package/unbundled/definition37.js +50 -291
  410. package/unbundled/definition38.cjs +282 -132
  411. package/unbundled/definition38.js +279 -129
  412. package/unbundled/definition39.cjs +165 -339
  413. package/unbundled/definition39.js +163 -337
  414. package/unbundled/definition40.cjs +395 -227
  415. package/unbundled/definition40.js +393 -225
  416. package/unbundled/definition41.cjs +269 -47
  417. package/unbundled/definition41.js +264 -42
  418. package/unbundled/definition42.cjs +48 -67
  419. package/unbundled/definition42.js +45 -64
  420. package/unbundled/definition43.cjs +56 -383
  421. package/unbundled/definition43.js +55 -382
  422. package/unbundled/definition44.cjs +387 -44
  423. package/unbundled/definition44.js +383 -40
  424. package/unbundled/definition45.cjs +53 -45
  425. package/unbundled/definition45.js +49 -41
  426. package/unbundled/definition46.cjs +40 -164
  427. package/unbundled/definition46.js +36 -160
  428. package/unbundled/definition47.cjs +171 -31
  429. package/unbundled/definition47.js +168 -22
  430. package/unbundled/definition48.cjs +30 -89
  431. package/unbundled/definition48.js +22 -87
  432. package/unbundled/definition49.cjs +589 -48
  433. package/unbundled/definition49.js +587 -47
  434. package/unbundled/definition50.cjs +90 -21
  435. package/unbundled/definition50.js +88 -16
  436. package/unbundled/definition51.cjs +47 -32
  437. package/unbundled/definition51.js +44 -29
  438. package/unbundled/definition52.cjs +22 -323
  439. package/unbundled/definition52.js +16 -320
  440. package/unbundled/definition53.cjs +33 -212
  441. package/unbundled/definition53.js +29 -208
  442. package/unbundled/definition54.cjs +318 -41
  443. package/unbundled/definition54.js +314 -37
  444. package/unbundled/definition55.cjs +199 -253
  445. package/unbundled/definition55.js +193 -247
  446. package/unbundled/definition56.cjs +45 -53
  447. package/unbundled/definition56.js +42 -49
  448. package/unbundled/definition57.cjs +255 -133
  449. package/unbundled/definition57.js +253 -128
  450. package/unbundled/definition58.cjs +49 -245
  451. package/unbundled/definition58.js +47 -244
  452. package/unbundled/definition59.cjs +127 -444
  453. package/unbundled/definition59.js +124 -444
  454. package/unbundled/definition6.cjs +2 -1
  455. package/unbundled/definition6.js +2 -1
  456. package/unbundled/definition60.cjs +230 -3746
  457. package/unbundled/definition60.js +223 -3576
  458. package/unbundled/definition61.cjs +427 -739
  459. package/unbundled/definition61.js +425 -737
  460. package/unbundled/definition62.cjs +3762 -103
  461. package/unbundled/definition62.js +3593 -97
  462. package/unbundled/definition63.cjs +678 -886
  463. package/unbundled/definition63.js +672 -877
  464. package/unbundled/definition64.cjs +104 -108
  465. package/unbundled/definition64.js +100 -104
  466. package/unbundled/definition65.cjs +999 -65
  467. package/unbundled/definition65.js +995 -58
  468. package/unbundled/definition66.cjs +105 -155
  469. package/unbundled/definition66.js +101 -151
  470. package/unbundled/definition67.cjs +71 -121
  471. package/unbundled/definition67.js +63 -119
  472. package/unbundled/definition68.cjs +162 -51
  473. package/unbundled/definition68.js +158 -47
  474. package/unbundled/definition69.cjs +117 -75
  475. package/unbundled/definition69.js +116 -71
  476. package/unbundled/definition70.cjs +59 -21
  477. package/unbundled/definition70.js +56 -15
  478. package/unbundled/definition71.cjs +80 -75
  479. package/unbundled/definition71.js +76 -74
  480. package/unbundled/definition72.cjs +20 -305
  481. package/unbundled/definition72.js +14 -230
  482. package/unbundled/definition73.cjs +75 -315
  483. package/unbundled/definition73.js +74 -307
  484. package/unbundled/definition74.cjs +308 -30
  485. package/unbundled/definition74.js +231 -24
  486. package/unbundled/definition75.cjs +314 -109
  487. package/unbundled/definition75.js +304 -106
  488. package/unbundled/definition76.cjs +26 -250
  489. package/unbundled/definition76.js +21 -246
  490. package/unbundled/definition77.cjs +133 -27
  491. package/unbundled/definition77.js +124 -25
  492. package/unbundled/definition78.cjs +230 -116
  493. package/unbundled/definition78.js +227 -107
  494. package/unbundled/definition79.cjs +28 -203
  495. package/unbundled/definition79.js +26 -193
  496. package/unbundled/definition80.cjs +126 -477
  497. package/unbundled/definition80.js +118 -473
  498. package/unbundled/definition81.cjs +221 -0
  499. package/unbundled/definition81.js +202 -0
  500. package/unbundled/definition82.cjs +517 -0
  501. package/unbundled/definition82.js +497 -0
  502. package/unbundled/extractOptions.cjs +21 -0
  503. package/unbundled/extractOptions.js +16 -0
  504. package/unbundled/icon.cjs +67 -0
  505. package/unbundled/icon.js +61 -0
  506. package/unbundled/linkable.cjs +1 -1
  507. package/unbundled/linkable.js +1 -1
  508. package/unbundled/listbox.cjs +29 -7
  509. package/unbundled/listbox.js +29 -7
  510. package/unbundled/mixins.cjs +2 -1
  511. package/unbundled/mixins.js +2 -1
  512. package/unbundled/optgroup.cjs +66 -0
  513. package/unbundled/optgroup.js +54 -0
  514. package/unbundled/option.cjs +176 -0
  515. package/unbundled/option.js +164 -0
  516. package/unbundled/time-selection-picker.template.cjs +1 -1
  517. package/unbundled/time-selection-picker.template.js +1 -1
  518. package/unbundled/vivid-element.cjs +10 -1
  519. package/unbundled/vivid-element.js +10 -1
  520. package/video-player/definition.cjs +1 -1
  521. package/video-player/definition.js +1 -1
  522. package/vivid.api.json +568 -231
@@ -1,81 +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_linkable = require("./linkable.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-item/nav-item.scss?inline
10
- var nav_item_default = ".control{box-sizing:border-box;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);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;text-decoration:none;display:inline-flex}.control.current{color:var(--_appearance-color-text)}@supports not (color:color-mix(in srgb, var(--one-color), var(--second-color))){.control.current{background-color:var(--_connotation-color-primary)}}.control.current:focus-visible{outline:none;position:relative}.control.current:focus-visible:after{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));border-radius:var(--focus-border-radius,inherit);block-size:calc(100% + var(--focus-block-size-addition,4px));content:\"\";inline-size:calc(100% + var(--focus-block-size-addition,4px));display:block;position:absolute;inset-block-start:50%;inset-inline-start:50%;transform:translate(-50%,-50%)}.control.connotation-cta{--_connotation-color-primary:var(--vvd-nav-item-cta-primary,var(--vvd-color-cta-500));--_connotation-color-primary-text:var(--vvd-nav-item-cta-primary-text,var(--vvd-color-canvas));--_connotation-color-primary-increment:var(--vvd-nav-item-cta-primary-increment,var(--vvd-color-cta-600));--_connotation-color-contrast:var(--vvd-nav-item-cta-contrast,var(--vvd-color-cta-800));--_connotation-color-fierce:var(--vvd-nav-item-cta-fierce,var(--vvd-color-cta-700));--_connotation-color-fierce-primary:var(--vvd-nav-item-cta-fierce-primary,var(--vvd-color-cta-700));--_connotation-color-faint:var(--vvd-nav-item-cta-faint,var(--vvd-color-cta-50));--_connotation-color-firm:var(--vvd-nav-item-cta-firm,var(--vvd-color-cta-600));--_connotation-color-soft:var(--vvd-nav-item-cta-soft,var(--vvd-color-cta-100))}.control:not(.connotation-cta){--_connotation-color-primary:var(--vvd-nav-item-accent-primary,var(--vvd-color-canvas-text));--_connotation-color-primary-text:var(--vvd-nav-item-accent-primary-text,var(--vvd-color-canvas));--_connotation-color-primary-increment:var(--vvd-nav-item-accent-primary-increment,var(--vvd-color-neutral-800));--_connotation-color-contrast:var(--vvd-nav-item-accent-contrast,var(--vvd-color-neutral-800));--_connotation-color-fierce:var(--vvd-nav-item-accent-fierce,var(--vvd-color-neutral-700));--_connotation-color-fierce-primary:var(--vvd-nav-item-accent-fierce-primary,var(--vvd-color-canvas-text));--_connotation-color-faint:var(--vvd-nav-item-accent-faint,var(--vvd-color-neutral-50));--_connotation-color-firm:var(--vvd-nav-item-accent-firm,var(--vvd-color-canvas-text));--_connotation-color-soft:var(--vvd-nav-item-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.icon-only{block-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2)));inline-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2)));place-content:center;display:flex;position:relative}.control.icon-only slot[name=meta]{display:block;position:absolute;inset-block-start:calc((calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) - 20px) / 2);inset-inline-end:calc((calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) - 20px) / 2);transform:translate(50%,-50%)}.control:not(.icon-only){padding-block:10px;padding-inline:16px}.control:not(.current){color:var(--vvd-color-canvas-text);--focus-stroke-gap-color:transparent}.control:not(.current):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))}:host(:dir(rtl)) .icon-only slot[name=meta]{transform:translate(-50%,-50%)}slot[name=icon]{font-size:20px;line-height:1}";
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>`;
11
103
  //#endregion
12
- //#region src/lib/nav-item/nav-item.ts
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
+ }
376
+ //#endregion
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
- * Based largely on the {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a | <a> element }.
15
- *
16
419
  * @public
17
- * @component nav-item
18
- * @slot meta - A slot to add additional content to the nav item.
19
- * @slot icon - The preferred way to add an icon to the component.
20
- * @testSelector byLabel byLabel
21
- * @testAction click click #control
22
- * @testQuery current navCurrent true
23
- * @testQuery !current navCurrent false
24
- * @testRef control shadow .control
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`
25
426
  */
26
- var NavItem = class extends require_affix.AffixIcon(require_linkable.Linkable(require_vivid_element.VividElement)) {
427
+ var Listbox = class extends WithOptionsFilter(WithOptions(require_host_semantics.HostSemantics(require_vivid_element.VividElement))) {
27
428
  constructor(..._args) {
28
429
  super(..._args);
29
- this.current = 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
497
+ };
498
+ this._ctx = newCtx;
499
+ this._applyNewState(applyContextChange(this._state, newCtx, this.values));
500
+ }
501
+ /** @internal */
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));
516
+ }
517
+ /** @internal */
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;
30
560
  }
31
561
  };
32
- require_decorate.__decorate([_microsoft_fast_element.attr], NavItem.prototype, "text", void 0);
33
- require_decorate.__decorate([_microsoft_fast_element.attr], NavItem.prototype, "connotation", void 0);
34
- require_decorate.__decorate([_microsoft_fast_element.attr], NavItem.prototype, "appearance", void 0);
35
- require_decorate.__decorate([require_vivid_element.replaces({
36
- deprecatedPropertyName: "ariaCurrent",
37
- fromDeprecated: (v) => Boolean(v),
38
- toDeprecated: (v) => v ? "page" : null
39
- }), (0, _microsoft_fast_element.attr)({
40
- attribute: "current",
41
- mode: "boolean"
42
- })], NavItem.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);
43
576
  //#endregion
44
- //#region src/lib/nav-item/nav-item.template.ts
45
- var NavItemTemplate = (context) => {
46
- const affixIconTemplate = require_affix.affixIconTemplateFactory(context);
47
- return _microsoft_fast_element.html`${(x) => x._renderLinkElement(_microsoft_fast_element.html`${(x) => affixIconTemplate(x.icon, require_affix.IconWrapper.Slot)}
48
- ${(x) => x.text} <slot name="meta"></slot>`, (x) => (0, _microsoft_fast_web_utilities.classNames)("control", ["icon-only", !x.text], [`connotation-${x.connotation}`, Boolean(x.connotation)], [`appearance-${x.appearance}`, Boolean(x.appearance)], ["current selected", x.current]))}`;
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}";
579
+ //#endregion
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
587
+ })}
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
+ >`;
49
593
  };
50
594
  //#endregion
51
- //#region src/lib/nav-item/definition.ts
595
+ //#region src/lib/listbox/definition.ts
52
596
  /** @internal */
53
- var navItemDefinition = require_vivid_element.defineVividComponent("nav-item", NavItem, NavItemTemplate, [require_definition.iconDefinition], {
54
- styles: nav_item_default,
55
- shadowOptions: { delegatesFocus: true }
56
- });
597
+ var listboxDefinition = require_vivid_element.defineVividComponent("listbox", Listbox, listboxTemplate, [], { styles: listbox_default });
57
598
  /**
58
- * Registers the nav-item elements with the design system.
599
+ * Registers the listbox elements with the design system.
59
600
  *
60
601
  * @param prefix - the prefix to use for the component name
61
602
  */
62
- var registerNavItem = require_vivid_element.createRegisterFunction(navItemDefinition);
603
+ var registerListbox = require_vivid_element.createRegisterFunction(listboxDefinition);
63
604
  //#endregion
64
- Object.defineProperty(exports, "NavItem", {
605
+ Object.defineProperty(exports, "Listbox", {
65
606
  enumerable: true,
66
607
  get: function() {
67
- return NavItem;
608
+ return Listbox;
68
609
  }
69
610
  });
70
- Object.defineProperty(exports, "navItemDefinition", {
611
+ Object.defineProperty(exports, "listboxDefinition", {
71
612
  enumerable: true,
72
613
  get: function() {
73
- return navItemDefinition;
614
+ return listboxDefinition;
74
615
  }
75
616
  });
76
- Object.defineProperty(exports, "registerNavItem", {
617
+ Object.defineProperty(exports, "registerListbox", {
77
618
  enumerable: true,
78
619
  get: function() {
79
- return registerNavItem;
620
+ return registerListbox;
80
621
  }
81
622
  });