@vonage/vivid 5.23.1 → 5.24.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 (406) hide show
  1. package/accordion/index.cjs +1 -1
  2. package/accordion/index.js +1 -1
  3. package/accordion-item/index.cjs +1 -1
  4. package/accordion-item/index.js +1 -1
  5. package/audio-player/index.cjs +2 -2
  6. package/audio-player/index.js +3 -3
  7. package/badge/index.cjs +1 -1
  8. package/badge/index.js +1 -1
  9. package/bundled/definition15.cjs +8 -7
  10. package/bundled/definition15.js +26 -24
  11. package/bundled/definition17.cjs +2 -2
  12. package/bundled/definition17.js +2 -2
  13. package/bundled/definition18.cjs +12 -83
  14. package/bundled/definition18.js +35 -419
  15. package/bundled/definition19.cjs +87 -7
  16. package/bundled/definition19.js +432 -16
  17. package/bundled/definition20.cjs +7 -37
  18. package/bundled/definition20.js +17 -172
  19. package/bundled/definition21.cjs +35 -27
  20. package/bundled/definition21.js +154 -154
  21. package/bundled/definition22.cjs +29 -6
  22. package/bundled/definition22.js +172 -20
  23. package/bundled/definition23.cjs +6 -12
  24. package/bundled/definition23.js +17 -32
  25. package/bundled/definition24.cjs +12 -39
  26. package/bundled/definition24.js +32 -67
  27. package/bundled/definition25.cjs +44 -0
  28. package/bundled/definition25.js +77 -0
  29. package/bundled/extractOptions.cjs +1 -0
  30. package/bundled/extractOptions.js +11 -0
  31. package/bundled/listbox.cjs +1 -1
  32. package/bundled/listbox.js +24 -11
  33. package/bundled/render-in-light-dom.cjs +1 -1
  34. package/bundled/render-in-light-dom.js +16 -19
  35. package/bundled/vivid-element.cjs +1 -1
  36. package/bundled/vivid-element.js +9 -1
  37. package/combobox/definition.cjs +1 -1
  38. package/combobox/definition.js +1 -1
  39. package/combobox/index.cjs +7 -7
  40. package/combobox/index.js +29 -21
  41. package/country/definition.cjs +1 -1
  42. package/country/definition.js +1 -1
  43. package/country/index.cjs +1 -1
  44. package/country/index.js +1 -1
  45. package/country-group/definition.cjs +1 -1
  46. package/country-group/definition.js +1 -1
  47. package/country-group/index.cjs +1 -1
  48. package/country-group/index.js +2 -2
  49. package/custom-elements.json +3102 -2842
  50. package/data-grid/definition.cjs +1 -1
  51. package/data-grid/definition.js +1 -1
  52. package/data-grid/index.cjs +4 -4
  53. package/data-grid/index.js +5 -5
  54. package/date-picker/definition.cjs +1 -1
  55. package/date-picker/definition.js +1 -1
  56. package/date-picker/index.cjs +1 -1
  57. package/date-picker/index.js +1 -1
  58. package/date-range-picker/definition.cjs +1 -1
  59. package/date-range-picker/definition.js +1 -1
  60. package/date-range-picker/index.cjs +1 -1
  61. package/date-range-picker/index.js +1 -1
  62. package/date-time-picker/definition.cjs +1 -1
  63. package/date-time-picker/definition.js +1 -1
  64. package/date-time-picker/index.cjs +1 -1
  65. package/date-time-picker/index.js +1 -1
  66. package/dial-pad/definition.cjs +1 -1
  67. package/dial-pad/definition.js +1 -1
  68. package/dial-pad/index.cjs +24 -24
  69. package/dial-pad/index.js +120 -51
  70. package/dialog/definition.cjs +1 -1
  71. package/dialog/definition.js +1 -1
  72. package/divider/definition.cjs +1 -1
  73. package/divider/definition.js +1 -1
  74. package/divider/index.cjs +1 -1
  75. package/divider/index.js +1 -1
  76. package/empty-state/definition.cjs +1 -1
  77. package/empty-state/definition.js +1 -1
  78. package/fab/definition.cjs +1 -1
  79. package/fab/definition.js +1 -1
  80. package/file-picker/definition.cjs +1 -1
  81. package/file-picker/definition.js +1 -1
  82. package/flag/definition.cjs +1 -1
  83. package/flag/definition.js +1 -1
  84. package/header/definition.cjs +1 -1
  85. package/header/definition.js +1 -1
  86. package/header/index.cjs +3 -3
  87. package/header/index.js +3 -3
  88. package/index.cjs +200 -196
  89. package/index.js +53 -52
  90. package/kbd-key/definition.cjs +1 -1
  91. package/kbd-key/definition.js +1 -1
  92. package/kbd-shortcut/definition.cjs +1 -1
  93. package/kbd-shortcut/definition.js +1 -1
  94. package/layout/definition.cjs +1 -1
  95. package/layout/definition.js +1 -1
  96. package/lib/accordion-item/accordion-item.d.ts +2 -1
  97. package/lib/action-group/action-group.d.ts +1 -1
  98. package/lib/alert/alert.d.ts +2 -2
  99. package/lib/audio-player/audio-player.d.ts +1 -1
  100. package/lib/avatar/avatar.d.ts +1 -1
  101. package/lib/badge/badge.d.ts +1 -1
  102. package/lib/banner/banner.d.ts +3 -3
  103. package/lib/breadcrumb/breadcrumb.d.ts +1 -1
  104. package/lib/breadcrumb-item/breadcrumb-item.d.ts +1 -1
  105. package/lib/button/button.d.ts +3 -3
  106. package/lib/calendar-event/calendar-event.d.ts +1 -1
  107. package/lib/card/card.d.ts +1 -1
  108. package/lib/checkbox/checkbox.d.ts +6 -6
  109. package/lib/color-picker/color-picker.d.ts +7 -7
  110. package/lib/combobox/combobox.d.ts +7 -7
  111. package/lib/components.d.ts +1 -0
  112. package/lib/country-group/country-group.d.ts +2 -2
  113. package/lib/data-grid/data-grid-cell.d.ts +4 -3
  114. package/lib/data-grid/data-grid-row.d.ts +3 -2
  115. package/lib/data-grid/data-grid.options.d.ts +5 -0
  116. package/lib/date-picker/date-picker.d.ts +8 -8
  117. package/lib/date-range-picker/date-range-picker.d.ts +4 -4
  118. package/lib/date-time-picker/date-time-picker.d.ts +8 -8
  119. package/lib/dial-pad/dial-pad.d.ts +2 -1
  120. package/lib/dialog/dialog.d.ts +2 -2
  121. package/lib/divider/divider.d.ts +1 -1
  122. package/lib/fab/fab.d.ts +1 -1
  123. package/lib/file-picker/file-picker.d.ts +7 -7
  124. package/lib/header/header.d.ts +1 -1
  125. package/lib/menu/menu.d.ts +2 -2
  126. package/lib/menu-item/menu-item.d.ts +3 -3
  127. package/lib/nav/nav.d.ts +1 -1
  128. package/lib/nav-disclosure/nav-disclosure.d.ts +2 -2
  129. package/lib/nav-item/nav-item.d.ts +2 -2
  130. package/lib/note/note.d.ts +1 -1
  131. package/lib/number-field/number-field.d.ts +9 -9
  132. package/lib/optgroup/definition.d.ts +3 -0
  133. package/lib/optgroup/index.d.ts +1 -0
  134. package/lib/optgroup/optgroup.d.ts +430 -0
  135. package/lib/optgroup/optgroup.template.d.ts +2 -0
  136. package/lib/optgroup/variations.browser-spec.d.ts +1 -0
  137. package/lib/option/option.d.ts +2 -2
  138. package/lib/pagination/pagination.d.ts +1 -1
  139. package/lib/popover/popover.d.ts +2 -2
  140. package/lib/progress/progress.d.ts +1 -1
  141. package/lib/progress-ring/progress-ring.d.ts +1 -1
  142. package/lib/radio/radio.d.ts +3 -3
  143. package/lib/radio-group/radio-group.d.ts +1 -1
  144. package/lib/range-slider/range-slider.d.ts +3 -3
  145. package/lib/rich-text-editor/rich-text-editor.d.ts +1 -1
  146. package/lib/searchable-select/option-tag.d.ts +1 -1
  147. package/lib/searchable-select/searchable-select.d.ts +47 -47
  148. package/lib/select/select.d.ts +9 -9
  149. package/lib/selectable-box/selectable-box.d.ts +1 -1
  150. package/lib/simple-color-picker/simple-color-picker.d.ts +2 -2
  151. package/lib/slider/slider.d.ts +3 -3
  152. package/lib/split-button/split-button.d.ts +3 -3
  153. package/lib/status/status.d.ts +1 -1
  154. package/lib/switch/switch.d.ts +2 -2
  155. package/lib/tab/tab.d.ts +3 -3
  156. package/lib/tab-panel/tab-panel.d.ts +1 -1
  157. package/lib/table/table-cell.d.ts +1 -1
  158. package/lib/table/table-header-cell.d.ts +1 -1
  159. package/lib/table/table-row.d.ts +1 -1
  160. package/lib/table/table-sorting-button.d.ts +1 -1
  161. package/lib/tag/tag.d.ts +3 -3
  162. package/lib/tag-group/tag-group.d.ts +1 -1
  163. package/lib/tag-name-map.d.ts +2 -1
  164. package/lib/text-area/text-area.d.ts +8 -8
  165. package/lib/text-field/text-field.d.ts +9 -9
  166. package/lib/time-picker/time-picker.d.ts +4 -4
  167. package/lib/toggletip/toggletip.d.ts +2 -2
  168. package/lib/tooltip/tooltip.d.ts +2 -2
  169. package/lib/tree-item/tree-item.d.ts +2 -2
  170. package/lib/tree-view/tree-view.d.ts +1 -1
  171. package/lib/video-player/video-player.d.ts +1 -1
  172. package/menu/index.cjs +1 -1
  173. package/menu/index.js +1 -1
  174. package/menu-item/index.cjs +1 -1
  175. package/menu-item/index.js +1 -1
  176. package/nav/definition.cjs +1 -1
  177. package/nav/definition.js +1 -1
  178. package/nav-disclosure/definition.cjs +1 -1
  179. package/nav-disclosure/definition.js +1 -1
  180. package/nav-item/definition.cjs +1 -1
  181. package/nav-item/definition.js +1 -1
  182. package/note/definition.cjs +1 -1
  183. package/note/definition.js +1 -1
  184. package/number-field/definition.cjs +1 -1
  185. package/number-field/definition.js +1 -1
  186. package/number-field/index.cjs +1 -1
  187. package/number-field/index.js +1 -1
  188. package/optgroup/definition.cjs +5 -0
  189. package/optgroup/definition.js +2 -0
  190. package/optgroup/index.cjs +1 -0
  191. package/optgroup/index.js +4 -0
  192. package/package.json +6 -6
  193. package/pagination/definition.cjs +1 -1
  194. package/pagination/definition.js +1 -1
  195. package/platform-switch/definition.cjs +1 -1
  196. package/platform-switch/definition.js +1 -1
  197. package/popover/definition.cjs +1 -1
  198. package/popover/definition.js +1 -1
  199. package/progress/definition.cjs +1 -1
  200. package/progress/definition.js +1 -1
  201. package/radio/definition.cjs +1 -1
  202. package/radio/definition.js +1 -1
  203. package/radio-group/definition.cjs +1 -1
  204. package/radio-group/definition.js +1 -1
  205. package/range-slider/definition.cjs +1 -1
  206. package/range-slider/definition.js +1 -1
  207. package/rich-text-editor/definition.cjs +1 -1
  208. package/rich-text-editor/definition.js +1 -1
  209. package/rich-text-editor/index.cjs +1 -1
  210. package/rich-text-editor/index.js +4 -4
  211. package/rich-text-view/definition.cjs +1 -1
  212. package/rich-text-view/definition.js +1 -1
  213. package/searchable-select/definition.cjs +1 -1
  214. package/searchable-select/definition.js +1 -1
  215. package/searchable-select/index.cjs +19 -19
  216. package/searchable-select/index.js +60 -45
  217. package/select/definition.cjs +1 -1
  218. package/select/definition.js +1 -1
  219. package/select/index.cjs +1 -1
  220. package/select/index.js +1 -1
  221. package/selectable-box/definition.cjs +1 -1
  222. package/selectable-box/definition.js +1 -1
  223. package/shared/aria/delegates-aria.d.ts +1 -1
  224. package/shared/aria/host-semantics.d.ts +1 -1
  225. package/shared/color-picker/base-color-picker.d.ts +1 -1
  226. package/shared/feedback/feedback-message.d.ts +1 -1
  227. package/shared/feedback/mixins.d.ts +2 -2
  228. package/shared/foundation/button/button.d.ts +2 -2
  229. package/shared/foundation/form-associated/form-associated.d.ts +2 -2
  230. package/shared/foundation/listbox/extractOptions.d.ts +2 -0
  231. package/shared/foundation/listbox/listbox.d.ts +2 -0
  232. package/shared/patterns/affix.d.ts +2 -2
  233. package/shared/patterns/anchored.d.ts +2 -2
  234. package/shared/patterns/char-count/char-count.d.ts +1 -1
  235. package/shared/patterns/form-elements/form-element.d.ts +1 -1
  236. package/shared/patterns/form-elements/with-contextual-help.d.ts +1 -1
  237. package/shared/patterns/form-elements/with-error-text.d.ts +1 -1
  238. package/shared/patterns/form-elements/with-success-text.d.ts +1 -1
  239. package/shared/patterns/kbd-shortcut.d.ts +1 -1
  240. package/shared/patterns/linkable.d.ts +1 -1
  241. package/shared/patterns/localized.d.ts +2 -2
  242. package/shared/patterns/trapped-focus.d.ts +1 -1
  243. package/shared/picker-field/mixins/calendar-picker.d.ts +2 -2
  244. package/shared/picker-field/mixins/calendar-picker.template.d.ts +2 -2
  245. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +1 -1
  246. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +2 -2
  247. package/shared/picker-field/mixins/single-date-picker.d.ts +2 -2
  248. package/shared/picker-field/mixins/single-value-picker.d.ts +2 -2
  249. package/shared/picker-field/mixins/time-selection-picker.d.ts +2 -2
  250. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +4 -4
  251. package/shared/picker-field/picker-field.d.ts +7 -7
  252. package/side-drawer/definition.cjs +1 -1
  253. package/side-drawer/definition.js +1 -1
  254. package/simple-color-picker/definition.cjs +1 -1
  255. package/simple-color-picker/definition.js +1 -1
  256. package/split-button/definition.cjs +1 -1
  257. package/split-button/definition.js +1 -1
  258. package/split-button/index.cjs +1 -0
  259. package/split-button/index.js +1 -0
  260. package/status/definition.cjs +1 -1
  261. package/status/definition.js +1 -1
  262. package/switch/definition.cjs +1 -1
  263. package/switch/definition.js +1 -1
  264. package/switch/index.cjs +6 -5
  265. package/switch/index.js +16 -14
  266. package/tab/definition.cjs +1 -1
  267. package/tab/definition.js +1 -1
  268. package/tab-panel/definition.cjs +1 -1
  269. package/tab-panel/definition.js +1 -1
  270. package/table/definition.cjs +1 -1
  271. package/table/definition.js +1 -1
  272. package/tabs/definition.cjs +1 -1
  273. package/tabs/definition.js +1 -1
  274. package/tag/definition.cjs +1 -1
  275. package/tag/definition.js +1 -1
  276. package/tag-group/definition.cjs +1 -1
  277. package/tag-group/definition.js +1 -1
  278. package/text-area/definition.cjs +1 -1
  279. package/text-area/definition.js +1 -1
  280. package/time-picker/definition.cjs +1 -1
  281. package/time-picker/definition.js +1 -1
  282. package/tree-item/definition.cjs +1 -1
  283. package/tree-item/definition.js +1 -1
  284. package/tree-view/definition.cjs +1 -1
  285. package/tree-view/definition.js +1 -1
  286. package/unbundled/definition13.cjs +1 -1
  287. package/unbundled/definition13.js +1 -1
  288. package/unbundled/definition2.cjs +9 -3
  289. package/unbundled/definition2.js +9 -3
  290. package/unbundled/definition23.cjs +1 -0
  291. package/unbundled/definition23.js +2 -1
  292. package/unbundled/definition29.cjs +2 -2
  293. package/unbundled/definition29.js +2 -2
  294. package/unbundled/definition30.cjs +65 -484
  295. package/unbundled/definition30.js +57 -482
  296. package/unbundled/definition31.cjs +501 -39
  297. package/unbundled/definition31.js +499 -37
  298. package/unbundled/definition32.cjs +38 -239
  299. package/unbundled/definition32.js +35 -236
  300. package/unbundled/definition33.cjs +236 -74
  301. package/unbundled/definition33.js +233 -71
  302. package/unbundled/definition34.cjs +74 -1968
  303. package/unbundled/definition34.js +70 -1940
  304. package/unbundled/definition35.cjs +1992 -26
  305. package/unbundled/definition35.js +1964 -27
  306. package/unbundled/definition36.cjs +26 -111
  307. package/unbundled/definition36.js +23 -103
  308. package/unbundled/definition37.cjs +53 -294
  309. package/unbundled/definition37.js +50 -291
  310. package/unbundled/definition38.cjs +282 -132
  311. package/unbundled/definition38.js +279 -129
  312. package/unbundled/definition39.cjs +165 -339
  313. package/unbundled/definition39.js +163 -337
  314. package/unbundled/definition40.cjs +394 -228
  315. package/unbundled/definition40.js +391 -225
  316. package/unbundled/definition41.cjs +263 -46
  317. package/unbundled/definition41.js +258 -41
  318. package/unbundled/definition42.cjs +47 -67
  319. package/unbundled/definition42.js +45 -65
  320. package/unbundled/definition43.cjs +56 -383
  321. package/unbundled/definition43.js +55 -382
  322. package/unbundled/definition44.cjs +386 -44
  323. package/unbundled/definition44.js +382 -40
  324. package/unbundled/definition45.cjs +53 -45
  325. package/unbundled/definition45.js +49 -41
  326. package/unbundled/definition46.cjs +40 -164
  327. package/unbundled/definition46.js +36 -160
  328. package/unbundled/definition47.cjs +171 -31
  329. package/unbundled/definition47.js +168 -22
  330. package/unbundled/definition48.cjs +30 -89
  331. package/unbundled/definition48.js +22 -87
  332. package/unbundled/definition49.cjs +70 -33
  333. package/unbundled/definition49.js +67 -30
  334. package/unbundled/definition50.cjs +54 -23
  335. package/unbundled/definition50.js +52 -18
  336. package/unbundled/definition51.cjs +23 -39
  337. package/unbundled/definition51.js +17 -36
  338. package/unbundled/definition52.cjs +29 -314
  339. package/unbundled/definition52.js +27 -312
  340. package/unbundled/definition53.cjs +301 -195
  341. package/unbundled/definition53.js +297 -191
  342. package/unbundled/definition54.cjs +210 -40
  343. package/unbundled/definition54.js +206 -36
  344. package/unbundled/definition55.cjs +42 -266
  345. package/unbundled/definition55.js +38 -262
  346. package/unbundled/definition56.cjs +266 -50
  347. package/unbundled/definition56.js +263 -46
  348. package/unbundled/definition57.cjs +48 -146
  349. package/unbundled/definition57.js +47 -143
  350. package/unbundled/definition58.cjs +127 -225
  351. package/unbundled/definition58.js +122 -223
  352. package/unbundled/definition59.cjs +199 -418
  353. package/unbundled/definition59.js +196 -415
  354. package/unbundled/definition60.cjs +441 -3738
  355. package/unbundled/definition60.js +431 -3565
  356. package/unbundled/definition61.cjs +3712 -728
  357. package/unbundled/definition61.js +3538 -717
  358. package/unbundled/definition62.cjs +769 -97
  359. package/unbundled/definition62.js +766 -94
  360. package/unbundled/definition63.cjs +100 -981
  361. package/unbundled/definition63.js +98 -976
  362. package/unbundled/definition64.cjs +988 -93
  363. package/unbundled/definition64.js +982 -90
  364. package/unbundled/definition65.cjs +109 -73
  365. package/unbundled/definition65.js +105 -63
  366. package/unbundled/definition66.cjs +69 -155
  367. package/unbundled/definition66.js +60 -152
  368. package/unbundled/definition67.cjs +154 -118
  369. package/unbundled/definition67.js +151 -115
  370. package/unbundled/definition68.cjs +124 -49
  371. package/unbundled/definition68.js +120 -45
  372. package/unbundled/definition69.cjs +51 -84
  373. package/unbundled/definition69.js +50 -80
  374. package/unbundled/definition70.cjs +91 -19
  375. package/unbundled/definition70.js +86 -14
  376. package/unbundled/definition71.cjs +20 -87
  377. package/unbundled/definition71.js +14 -84
  378. package/unbundled/definition72.cjs +76 -294
  379. package/unbundled/definition72.js +71 -217
  380. package/unbundled/definition73.cjs +288 -311
  381. package/unbundled/definition73.js +218 -306
  382. package/unbundled/definition74.cjs +326 -26
  383. package/unbundled/definition74.js +317 -23
  384. package/unbundled/definition75.cjs +27 -122
  385. package/unbundled/definition75.js +22 -118
  386. package/unbundled/definition76.cjs +103 -232
  387. package/unbundled/definition76.js +99 -228
  388. package/unbundled/definition77.cjs +259 -26
  389. package/unbundled/definition77.js +249 -23
  390. package/unbundled/definition78.cjs +29 -148
  391. package/unbundled/definition78.js +27 -133
  392. package/unbundled/definition79.cjs +117 -173
  393. package/unbundled/definition79.js +108 -169
  394. package/unbundled/definition80.cjs +181 -477
  395. package/unbundled/definition80.js +176 -471
  396. package/unbundled/definition81.cjs +517 -0
  397. package/unbundled/definition81.js +497 -0
  398. package/unbundled/extractOptions.cjs +21 -0
  399. package/unbundled/extractOptions.js +16 -0
  400. package/unbundled/listbox.cjs +23 -6
  401. package/unbundled/listbox.js +23 -6
  402. package/unbundled/vivid-element.cjs +10 -1
  403. package/unbundled/vivid-element.js +10 -1
  404. package/video-player/definition.cjs +1 -1
  405. package/video-player/definition.js +1 -1
  406. package/vivid.api.json +194 -0
@@ -1,141 +1,813 @@
1
1
  require("./chunk.cjs");
2
2
  const require_vivid_element = require("./vivid-element.cjs");
3
+ const require_definition = require("./definition.cjs");
3
4
  const require_decorate = require("./decorate.cjs");
4
- const require_slottable_request = require("./slottable-request.cjs");
5
+ const require_affix = require("./affix.cjs");
6
+ const require_form_associated = require("./form-associated.cjs");
7
+ const require_localized = require("./localized.cjs");
8
+ const require_definition$1 = require("./definition6.cjs");
9
+ const require_dialog = require("./dialog.cjs");
10
+ const require_definition$2 = require("./definition9.cjs");
11
+ const require_host_semantics = require("./host-semantics.cjs");
12
+ const require_mixins = require("./mixins.cjs");
13
+ const require_form_element = require("./form-element.cjs");
14
+ const require_with_error_text = require("./with-error-text.cjs");
15
+ const require_with_success_text = require("./with-success-text.cjs");
16
+ const require_with_contextual_help = require("./with-contextual-help.cjs");
17
+ const require_definition$3 = require("./definition29.cjs");
18
+ const require_definition$4 = require("./definition30.cjs");
19
+ const require_listbox = require("./listbox.cjs");
5
20
  let _microsoft_fast_element = require("@microsoft/fast-element");
6
- let prosemirror_model = require("prosemirror-model");
7
- //#region src/lib/rich-text-view/rich-text-view.scss?inline
8
- var rich_text_view_default = ":host{display:contents}.content{overflow-wrap:break-word;white-space:break-spaces;display:contents}";
21
+ let _microsoft_fast_web_utilities = require("@microsoft/fast-web-utilities");
22
+ //#region src/lib/select/select.scss?inline
23
+ var select_default = ".label-wrapper{align-items:center;gap:var(--label-wrapper-gap,4px);flex-direction:row;display:flex}.label-wrapper[hidden]{display:none}.label:not(slot),.label::slotted(label){flex:0 auto}.chevron{font:var(--vvd-typography-base-extended);flex-shrink:0;display:flex;transform:rotate(0)}@media (prefers-reduced-motion:no-preference){.chevron{transition:transform .2s}}:host([data-expanded=true]) .chevron,:host([open]) .chevron{transform:rotate(180deg)}:host(:focus-visible){outline:none}:host{--_low-ink-color:var(--vvd-color-neutral-600);--focus-stroke-gap-color:transparent;flex-direction:column;gap:4px;display:inline-flex}:host([disabled]){--_low-ink-color:var(--vvd-color-neutral-600);cursor:not-allowed}.label{color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base)}.control{--_appearance-color-text:var(--vvd-color-canvas-text);--_appearance-color-fill:var(--vvd-color-canvas);--_appearance-color-outline:var(--vvd-color-neutral-500)}.control.appearance-ghost{--_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(--vvd-color-canvas-text);--_appearance-color-fill:var(--vvd-color-canvas);--_appearance-color-outline:var(--vvd-color-neutral-700)}.control:hover:where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_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-color-text:var(--vvd-color-canvas-text);--_appearance-color-fill:var(--vvd-color-canvas);--_appearance-color-outline:var(--vvd-color-neutral-700)}.control.hover:where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_appearance-color-text:var(--_connotation-color-firm);--_appearance-color-fill:var(--_connotation-color-faint);--_appearance-color-outline:transparent}.control:disabled{--_appearance-color-text:var(--vvd-color-neutral-600);--_appearance-color-fill:var(--vvd-color-neutral-100);--_appearance-color-outline:var(--vvd-color-neutral-300)}.control:disabled.appearance-ghost{--_appearance-color-text:var(--vvd-color-neutral-300);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}.control.disabled{--_appearance-color-text:var(--vvd-color-neutral-600);--_appearance-color-fill:var(--vvd-color-neutral-100);--_appearance-color-outline:var(--vvd-color-neutral-300)}.control.disabled.appearance-ghost{--_appearance-color-text:var(--vvd-color-neutral-300);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}.control.readonly:where(:not(.disabled,:disabled)){--_appearance-color-text:var(--vvd-color-canvas-text);--_appearance-color-fill:var(--vvd-color-neutral-200);--_appearance-color-outline:var(--vvd-color-neutral-400)}.control.readonly:where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text:var(--vvd-color-neutral-600);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}.control.error:where(:not(.disabled,:disabled)){--_appearance-color-text:notset;--_appearance-color-fill:var(--vvd-color-alert-50);--_appearance-color-outline:var(--vvd-color-alert-500)}.control.error:where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text:notset;--_appearance-color-fill:var(--vvd-color-alert-50);--_appearance-color-outline:transparent}.control.success:where(:not(.disabled,:disabled)){--_appearance-color-text:notset;--_appearance-color-fill:var(--vvd-color-success-50);--_appearance-color-outline:var(--vvd-color-success-500)}.control.success:where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text:notset;--_appearance-color-fill:var(--vvd-color-success-50);--_appearance-color-outline:transparent}.control{--_connotation-color-primary:var(--vvd-select-accent-primary,var(--vvd-color-canvas-text));--_connotation-color-primary-text:var(--vvd-select-accent-primary-text,var(--vvd-color-canvas));--_connotation-color-primary-increment:var(--vvd-select-accent-primary-increment,var(--vvd-color-neutral-800));--_connotation-color-intermediate:var(--vvd-select-accent-intermediate,var(--vvd-color-neutral-500));--_connotation-color-faint:var(--vvd-select-accent-faint,var(--vvd-color-neutral-50));--_connotation-color-soft:var(--vvd-select-accent-soft,var(--vvd-color-neutral-100));--_connotation-color-firm:var(--vvd-select-accent-firm,var(--vvd-color-canvas-text));--_connotation-color-fierce:var(--vvd-select-accent-fierce,var(--vvd-color-neutral-700));border-radius:var(--_select-control-border-radius);block-size:var(--_select-block-size);padding-inline:var(--_select-padding-inline);--_select-icon-size:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) / 2);--_select-block-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2)));--_select-padding-inline:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) / 2.5);background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base);justify-content:space-between;align-items:center;gap:8px;transition:box-shadow .2s,background-color .2s;display:flex}.control.size-condensed{--_select-icon-size:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) / 2.5);--_select-block-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 8));--_select-padding-inline:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 16)) / 2)}.control.size-condensed:not(.shape-pill){--_select-control-border-radius:4px}.control-wrapper{position:relative}.control:not(.disabled){cursor:pointer}.control.disabled{pointer-events:none}.control:not(.shape-pill){--_select-control-border-radius:8px}.control.shape-pill{--_select-control-border-radius:24px}.listbox{max-height:var(--select-height,408px);flex-direction:column;gap:2px;padding:4px;display:flex;overflow-y:auto}:host([multiple]:focus-visible) .listbox{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:8px}.selected-value{white-space:nowrap;flex-grow:1;align-items:center;column-gap:12px;display:flex;overflow:hidden}.selected-value .text{text-overflow:ellipsis;max-inline-size:100%;overflow:hidden}.control.shows-placeholder .selected-value .text{color:var(--vvd-color-neutral-600)}.selected-value slot[name=icon]{flex:0 0 var(--_select-icon-size);font-size:var(--_select-icon-size);line-height:1}.control.has-meta .selected-value{padding-inline-end:8px}.feedback-wrapper{display:contents}::part(popup-base){inline-size:max-content;min-inline-size:var(--_select-fixed-width,100%)}:host([multiple]) ::part(popup-base){position:static}@supports selector(:has(*)){:host(:focus-within) .control:not(.has-activedescendant,:has(.clear-button:focus)){--focus-stroke-gap-color:transparent;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))}}@supports not selector(:has(*)){:host(:focus-within) .control:not(.has-activedescendant){--focus-stroke-gap-color:transparent;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([multiple]),:host(:not(:focus-visible)){--_suppressable-focus-shadow:none;--_suppressable-focus-outline:none;--_suppressable-focus-outline-offset:0}:host([multiple]) .clear-button{margin-inline-start:auto}:host([multiple][clearable]) .label-wrapper{min-block-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 16))}";
9
24
  //#endregion
10
- //#region src/lib/rich-text-view/rich-text-view.ts
25
+ //#region src/lib/select/select.ts
11
26
  /**
12
27
  * @public
13
- * @component rich-text-view
14
- * @dynamicSlot `@vonage/vivid#RteChildSlotProps` child - Used for custom rendered children.
28
+ * @component select
29
+ * @slot - Default slot.
30
+ * @slot icon - The preferred way to add an icon to the select control.
31
+ * @slot meta - Slot to add meta content to the select control.
32
+ * @slot helper-text - Describes how to use the select. Alternative to the `helper-text` attribute.
33
+ * @event {CustomEvent<undefined>} input - Fires a custom 'input' event when the value updates
34
+ * @event {CustomEvent<HTMLElement>} change - Fires a custom 'change' event when the value updates
35
+ * @vueModel modelValue value input,@lazy:change `event.currentTarget.value`
36
+ * @testAction selectOptionByValue selectOptionByValue
37
+ * @testAction selectOptionByText selectOptionByText
15
38
  */
16
- var RichTextView = class extends require_vivid_element.VividElement {
39
+ var Select = class extends require_mixins.WithLightDOMFeedback(require_with_contextual_help.WithContextualHelp(require_with_error_text.WithErrorText(require_with_success_text.WithSuccessText(require_localized.Localized(require_form_element.FormElement(require_host_semantics.HostSemantics(require_affix.AffixIconWithTrailing(require_form_associated.FormAssociated(require_listbox.Listbox))))))))) {
17
40
  constructor(..._args) {
18
41
  super(..._args);
19
- this._slotCounter = 0;
20
- this._slottedChildren = /* @__PURE__ */ new Set();
21
- this._slotRequests = /* @__PURE__ */ new Set();
22
- this._contentElement = null;
42
+ this.proxy = document.createElement("select");
43
+ this.activeIndex = -1;
44
+ this.rangeStartIndex = -1;
45
+ this.open = false;
46
+ this.listboxId = (0, _microsoft_fast_web_utilities.uniqueId)("listbox-");
47
+ this.maxHeight = 0;
48
+ this.fixedDropdown = false;
49
+ this._feedbackWrapper = null;
50
+ this._isResetting = false;
51
+ this.clearable = false;
52
+ this._isClearButtonFocused = false;
53
+ }
54
+ /**
55
+ * Returns the last checked option.
56
+ *
57
+ * @internal
58
+ */
59
+ get activeOption() {
60
+ return this.options[this.activeIndex];
61
+ }
62
+ /**
63
+ * Returns the list of checked options.
64
+ *
65
+ * @internal
66
+ */
67
+ get checkedOptions() {
68
+ return this.options.filter((o) => o.checked);
69
+ }
70
+ /**
71
+ * Returns the index of the first selected option.
72
+ *
73
+ * @internal
74
+ */
75
+ get firstSelectedOptionIndex() {
76
+ return this.options.indexOf(this.firstSelectedOption);
77
+ }
78
+ /**
79
+ * Updates the `ariaActiveDescendant` property when the active index changes.
80
+ *
81
+ * @internal
82
+ */
83
+ activeIndexChanged(_, next) {
84
+ this._activeDescendant = this.options[next]?.id ?? "";
85
+ this.focusAndScrollOptionIntoView();
86
+ }
87
+ /**
88
+ * Toggles the checked state for the currently active option.
89
+ *
90
+ * @remarks
91
+ * Multiple-selection mode only.
92
+ *
93
+ * @internal
94
+ */
95
+ checkActiveIndex() {
96
+ const activeItem = this.activeOption;
97
+ /* v8 ignore else -- @preserve */
98
+ if (activeItem) activeItem.checked = true;
99
+ }
100
+ /**
101
+ * Sets the active index to the first option and marks it as checked.
102
+ *
103
+ * @remarks
104
+ * Multi-selection mode only.
105
+ *
106
+ * @param preserveChecked - mark all options unchecked before changing the active index
107
+ *
108
+ * @internal
109
+ */
110
+ checkFirstOption(preserveChecked) {
111
+ const firstSelectableIndex = this.getNextSelectableIndex(0);
112
+ if (firstSelectableIndex === -1) return;
113
+ if (preserveChecked) {
114
+ if (this.rangeStartIndex === -1) this.rangeStartIndex = this.activeIndex;
115
+ this.options.forEach((o, i) => {
116
+ o.checked = (0, _microsoft_fast_web_utilities.inRange)(i, firstSelectableIndex, this.rangeStartIndex + 1) && !o.disabled;
117
+ });
118
+ } else this.uncheckAllOptions();
119
+ this.activeIndex = firstSelectableIndex;
120
+ this.checkActiveIndex();
121
+ }
122
+ /**
123
+ * Decrements the active index and sets the matching option as checked.
124
+ *
125
+ * @remarks
126
+ * Multi-selection mode only.
127
+ *
128
+ * @param preserveChecked - mark all options unchecked before changing the active index
129
+ *
130
+ * @internal
131
+ */
132
+ checkLastOption(preserveChecked) {
133
+ const lastSelectableIndex = this.getPreviousSelectableIndex(this.length - 1);
134
+ if (lastSelectableIndex === -1) return;
135
+ if (preserveChecked) {
136
+ if (this.rangeStartIndex === -1) this.rangeStartIndex = this.activeIndex;
137
+ this.options.forEach((o, i) => {
138
+ o.checked = (0, _microsoft_fast_web_utilities.inRange)(i, this.rangeStartIndex, lastSelectableIndex + 1) && !o.disabled;
139
+ });
140
+ } else this.uncheckAllOptions();
141
+ this.activeIndex = lastSelectableIndex;
142
+ this.checkActiveIndex();
143
+ }
144
+ /**
145
+ * Increments the active index and marks the matching option as checked.
146
+ *
147
+ * @remarks
148
+ * Multiple-selection mode only.
149
+ *
150
+ * @param preserveChecked - mark all options unchecked before changing the active index
151
+ *
152
+ * @internal
153
+ */
154
+ checkNextOption(preserveChecked) {
155
+ const nextIndex = this.getNextSelectableIndex(this.activeIndex + 1);
156
+ if (nextIndex === -1) return;
157
+ if (preserveChecked) {
158
+ if (this.rangeStartIndex === -1) this.rangeStartIndex = this.activeIndex;
159
+ this.options.forEach((o, i) => {
160
+ o.checked = (0, _microsoft_fast_web_utilities.inRange)(i, this.rangeStartIndex, nextIndex + 1) && !o.disabled;
161
+ });
162
+ } else this.uncheckAllOptions();
163
+ this.activeIndex = nextIndex;
164
+ this.checkActiveIndex();
165
+ }
166
+ /**
167
+ * Decrements the active index and marks the matching option as checked.
168
+ *
169
+ * @remarks
170
+ * Multiple-selection mode only.
171
+ *
172
+ * @param preserveChecked - mark all options unchecked before changing the active index
173
+ *
174
+ * @internal
175
+ */
176
+ checkPreviousOption(preserveChecked) {
177
+ const previousIndex = this.getPreviousSelectableIndex(this.activeIndex - 1);
178
+ if (previousIndex === -1) return;
179
+ if (preserveChecked) {
180
+ if (this.rangeStartIndex === -1) this.rangeStartIndex = this.activeIndex;
181
+ if (this.checkedOptions.length === 1) this.rangeStartIndex += 1;
182
+ this.options.forEach((o, i) => {
183
+ o.checked = (0, _microsoft_fast_web_utilities.inRange)(i, previousIndex, this.rangeStartIndex + 1) && !o.disabled;
184
+ });
185
+ } else this.uncheckAllOptions();
186
+ this.activeIndex = previousIndex;
187
+ this.checkActiveIndex();
23
188
  }
24
189
  /** @internal */
25
- viewChanged(oldView, newView) {
26
- if (oldView) this._removeStyles();
27
- if (newView) this._addStyles(newView);
28
- this._updateView();
29
- }
30
- _addStyles(view) {
31
- const config = view[require_slottable_request.impl].config[require_slottable_request.impl];
32
- this._styles = new _microsoft_fast_element.ElementStyles(require_slottable_request.sortedContributions(config.features.flatMap((f) => f.getStyles())));
33
- this._styles.addStylesTo(this.shadowRoot);
34
- }
35
- _removeStyles() {
36
- if (this._styles) {
37
- this._styles.removeStylesFrom(this.shadowRoot);
38
- this._styles = void 0;
190
+ focusAndScrollOptionIntoView() {
191
+ super.focusAndScrollOptionIntoView(this.activeOption);
192
+ }
193
+ /**
194
+ * In multiple-selection mode:
195
+ * If any options are selected, the first selected option is checked when
196
+ * the listbox receives focus. If no options are selected, the first
197
+ * selectable option is checked.
198
+ *
199
+ * @internal
200
+ */
201
+ focusinHandler(e) {
202
+ if (!this.multiple) {
203
+ super.focusinHandler(e);
204
+ return;
205
+ }
206
+ /* v8 ignore else -- @preserve */
207
+ if (!this.shouldSkipFocus && e.target === e.currentTarget) {
208
+ this.uncheckAllOptions();
209
+ if (this.activeIndex === -1) this.activeIndex = this.firstSelectedOptionIndex !== -1 ? this.firstSelectedOptionIndex : 0;
210
+ this.checkActiveIndex();
211
+ this.setSelectedOptions();
212
+ this.focusAndScrollOptionIntoView();
213
+ }
214
+ this.shouldSkipFocus = false;
215
+ }
216
+ /** Sets an option as selected and gives it focus. */
217
+ setSelectedOptions() {
218
+ if (!this.multiple) {
219
+ super.setSelectedOptions();
220
+ return;
221
+ }
222
+ /* v8 ignore else -- @preserve */
223
+ if (this.$fastController.isConnected && this.options) {
224
+ this.selectedOptions = this.options.filter((o) => o.selected);
225
+ this.focusAndScrollOptionIntoView();
39
226
  }
40
227
  }
41
- _cleanupLightDom() {
42
- for (const el of this._slottedChildren) this.removeChild(el);
43
- for (const slotName of this._slotRequests) require_slottable_request.dispatchSlottableRequest(this, "child", slotName, require_slottable_request.removeSymbol);
44
- this._slottedChildren.clear();
45
- this._slotRequests.clear();
46
- this._slotCounter = 0;
47
- }
48
- _updateView() {
49
- if (!this._contentElement) return;
50
- this._contentElement.innerHTML = "";
51
- this._cleanupLightDom();
52
- if (this.view) this._contentElement.appendChild(this._renderView(this.view));
53
- }
54
- _renderView(rteView) {
55
- const ctx = rteView[require_slottable_request.impl];
56
- if (rteView.type === "node" && rteView.node.type === "doc") rteView = rteView.children;
57
- if (rteView.type === "fragment") {
58
- const frag = document.createDocumentFragment();
59
- for (const child of rteView.content) frag.appendChild(this._renderView(child));
60
- return frag;
228
+ /**
229
+ * Toggles the selected state of the provided options. If any provided items
230
+ * are in an unselected state, all items are set to selected. If every
231
+ * provided item is selected, they are all unselected.
232
+ *
233
+ * @internal
234
+ */
235
+ toggleSelectedForAllCheckedOptions() {
236
+ const enabledCheckedOptions = this.checkedOptions.filter((o) => !o.disabled);
237
+ const force = !enabledCheckedOptions.every((o) => o.selected);
238
+ enabledCheckedOptions.forEach((o) => o.selected = force);
239
+ this.selectedIndex = this.options.indexOf(enabledCheckedOptions[enabledCheckedOptions.length - 1]);
240
+ this.setSelectedOptions();
241
+ this.updateValue(true);
242
+ }
243
+ /** @internal */
244
+ typeaheadBufferChanged(prev, next) {
245
+ if (!this.multiple) {
246
+ super.typeaheadBufferChanged(prev, next);
247
+ return;
61
248
  }
62
- const customRenderedView = ctx.options.renderChildView?.(rteView) ?? false;
63
- if (customRenderedView) return this._handleCustomRender(rteView, customRenderedView);
64
- else return this._renderDefault(rteView);
65
- }
66
- _handleCustomRender(rteView, customResult) {
67
- const slotName = `child-view-${this._slotCounter++}`;
68
- const slot = document.createElement("slot");
69
- slot.setAttribute("name", slotName);
70
- if (customResult === true) {
71
- this._slotRequests.add(slotName);
72
- require_slottable_request.dispatchSlottableRequest(this, "child", slotName, { view: rteView });
73
- } else {
74
- const { dom, contentDom = dom } = customResult;
75
- const nestedView = document.createElement(this.tagName);
76
- nestedView.view = rteView.children;
77
- contentDom.appendChild(nestedView);
78
- dom.setAttribute("slot", slotName);
79
- this.appendChild(dom);
80
- this._slottedChildren.add(dom);
249
+ /* v8 ignore if -- @preserve */
250
+ if (this.$fastController.isConnected) {
251
+ const typeaheadMatches = this.getTypeaheadMatches();
252
+ const activeIndex = this.options.indexOf(typeaheadMatches[0]);
253
+ if (activeIndex > -1) {
254
+ this.activeIndex = activeIndex;
255
+ this.uncheckAllOptions();
256
+ this.checkActiveIndex();
257
+ }
258
+ this.typeaheadExpired = false;
81
259
  }
82
- return slot;
83
- }
84
- _renderDefault(view) {
85
- const schema = view[require_slottable_request.impl].config[require_slottable_request.impl].schema;
86
- if (view.type === "node" && view.node.type === "text") return document.createTextNode(view.node.text);
87
- const item = view.type === "node" ? view.node : view.mark;
88
- const pmItem = view.type === "node" ? prosemirror_model.Node.fromJSON(schema, item) : prosemirror_model.Mark.fromJSON(schema, item);
89
- const spec = pmItem instanceof prosemirror_model.Node ? pmItem.type.spec.toDOM(pmItem) : pmItem.type.spec.toDOM(pmItem, true);
90
- const { dom, contentDOM = dom } = prosemirror_model.DOMSerializer.renderSpec(document, spec);
91
- const childrenRendered = this._renderView(view.children);
92
- contentDOM.appendChild(childrenRendered);
93
- return dom;
260
+ }
261
+ /**
262
+ * Unchecks all options.
263
+ *
264
+ * @remarks
265
+ * Multiple-selection mode only.
266
+ *
267
+ * @param preserveChecked - reset the rangeStartIndex
268
+ *
269
+ * @internal
270
+ */
271
+ uncheckAllOptions(preserveChecked = false) {
272
+ this.options.forEach((o) => o.checked = false);
273
+ /* v8 ignore else -- @preserve */
274
+ if (!preserveChecked) this.rangeStartIndex = -1;
275
+ }
276
+ /**
277
+ * Sets focus when the open property changes.
278
+ *
279
+ * @internal
280
+ */
281
+ openChanged(prev, next) {
282
+ if (!this.collapsible) return;
283
+ if (this.open) {
284
+ this.focusAndScrollOptionIntoView();
285
+ this.indexWhenOpened = this.selectedIndex;
286
+ _microsoft_fast_element.Updates.enqueue(() => this.focus());
287
+ return;
288
+ }
289
+ const didClose = prev && !next;
290
+ const selectionChangedWhileOpen = this.indexWhenOpened !== this.selectedIndex;
291
+ if (didClose && selectionChangedWhileOpen) this.updateValue(true);
292
+ }
293
+ /**
294
+ * The component is collapsible when in single-selection mode.
295
+ *
296
+ * @internal
297
+ */
298
+ get collapsible() {
299
+ return !this.multiple;
300
+ }
301
+ /** @internal */
302
+ valueChanged(prev, next) {
303
+ const nextSelectedIndex = this.options.findIndex((el) => el.value === next);
304
+ const validNextSelectedIndex = this._validSelectedIndex(nextSelectedIndex);
305
+ const nextValue = this.options[validNextSelectedIndex]?.value ?? "";
306
+ if (this.selectedIndex !== validNextSelectedIndex) this.selectedIndex = validNextSelectedIndex;
307
+ if (next !== nextValue) return;
308
+ super.valueChanged(prev, next);
309
+ this.updateDisplayValue();
310
+ }
311
+ /**
312
+ * Sets the value and display value to match the first selected option.
313
+ *
314
+ * @param shouldEmit - if true, the input and change events will be emitted
315
+ *
316
+ * @internal
317
+ */
318
+ updateValue(shouldEmit) {
319
+ if (this.$fastController.isConnected) this.value = this.firstSelectedOption?.value ?? "";
320
+ if (shouldEmit) {
321
+ this.$emit("input");
322
+ this.$emit("change", this, {
323
+ bubbles: true,
324
+ composed: void 0
325
+ });
326
+ }
327
+ }
328
+ /**
329
+ * Updates the proxy value when the selected index changes.
330
+ *
331
+ * @param prev - the previous selected index
332
+ * @param next - the next selected index
333
+ *
334
+ * @internal
335
+ */
336
+ selectedIndexChanged(prev, next) {
337
+ super.selectedIndexChanged(prev, next);
338
+ this.updateValue();
339
+ }
340
+ /**
341
+ * Handle opening and closing the listbox when the select is clicked.
342
+ *
343
+ * @param e - the mouse event
344
+ * @internal
345
+ */
346
+ clickHandler(e) {
347
+ if (this.disabled || this._isFromContextualHelp(e)) return;
348
+ const clickedOption = e.target.closest(`option,[role=option],[data-vvd-component=option]`);
349
+ if (clickedOption && clickedOption.disabled) return;
350
+ if (this.multiple) {
351
+ this.uncheckAllOptions();
352
+ this.activeIndex = this.options.indexOf(clickedOption);
353
+ this.checkActiveIndex();
354
+ this.toggleSelectedForAllCheckedOptions();
355
+ } else super.clickHandler(e);
356
+ if (this.collapsible) this.open = !this.open;
357
+ return true;
358
+ }
359
+ /**
360
+ * Handles focus state when the element or its children lose focus.
361
+ *
362
+ * @param e - The focus event
363
+ * @internal
364
+ */
365
+ focusoutHandler(e) {
366
+ if (this.multiple) this.uncheckAllOptions();
367
+ if (!this.open) return true;
368
+ const focusTarget = e.relatedTarget;
369
+ if (this.isSameNode(focusTarget)) {
370
+ this.focus();
371
+ return;
372
+ }
373
+ /* v8 ignore else -- @preserve */
374
+ if (!this.options.includes(focusTarget)) {
375
+ this.open = false;
376
+ if (this.indexWhenOpened !== this.selectedIndex) this.updateValue(true);
377
+ }
378
+ }
379
+ /**
380
+ * Updates the value when an option's value changes.
381
+ *
382
+ * @param source - the source object
383
+ * @param propertyName - the property to evaluate
384
+ *
385
+ * @internal
386
+ */
387
+ handleChange(source, propertyName) {
388
+ super.handleChange(source, propertyName);
389
+ if (propertyName === "value") this.updateValue();
390
+ }
391
+ /**
392
+ * Prevents focus when a scrollbar is clicked.
393
+ *
394
+ * @param e - the mouse event object
395
+ *
396
+ * @internal
397
+ */
398
+ mousedownHandler(e) {
399
+ if (e.offsetX >= 0 && e.offsetX <= this.listbox.scrollWidth) return super.mousedownHandler(e);
400
+ return this.collapsible;
94
401
  }
95
402
  /** @internal */
403
+ multipleChanged(_, next) {
404
+ this.options.forEach((o) => {
405
+ o.checked = next ? false : void 0;
406
+ });
407
+ this.setSelectedOptions();
408
+ /* v8 ignore if -- @preserve */
409
+ if (this.proxy) this.proxy.multiple = next;
410
+ }
411
+ /**
412
+ * Updates the selectedness of each option when the list of selected options changes.
413
+ *
414
+ * @param prev - the previous list of selected options
415
+ * @param next - the current list of selected options
416
+ *
417
+ * @internal
418
+ */
419
+ selectedOptionsChanged(prev, next) {
420
+ super.selectedOptionsChanged(prev, next);
421
+ this.options.forEach((o, i) => {
422
+ const proxyOption = this.proxy.options.item(i);
423
+ if (proxyOption) proxyOption.selected = o.selected;
424
+ });
425
+ }
426
+ /**
427
+ * Resets and fills the proxy to match the component's options.
428
+ *
429
+ * @internal
430
+ */
431
+ setProxyOptions() {
432
+ /* v8 ignore else -- @preserve */
433
+ if (this.proxy instanceof HTMLSelectElement && this.options) {
434
+ this.proxy.length = 0;
435
+ this.options.forEach((option) => {
436
+ const proxyOption = option.proxy || (option instanceof HTMLOptionElement ? option.cloneNode() : null);
437
+ if (proxyOption) this.proxy.options.add(proxyOption);
438
+ });
439
+ }
440
+ }
441
+ /**
442
+ * Handles keydown actions when the select is in multiple selection mode.
443
+ *
444
+ * @internal
445
+ */
446
+ multipleKeydownHandler(e) {
447
+ if (this.disabled) return;
448
+ const { key, shiftKey } = e;
449
+ this.shouldSkipFocus = false;
450
+ switch (key) {
451
+ case _microsoft_fast_web_utilities.keyHome:
452
+ this.checkFirstOption(shiftKey);
453
+ return;
454
+ case _microsoft_fast_web_utilities.keyArrowDown:
455
+ this.checkNextOption(shiftKey);
456
+ return;
457
+ case _microsoft_fast_web_utilities.keyArrowUp:
458
+ this.checkPreviousOption(shiftKey);
459
+ return;
460
+ case _microsoft_fast_web_utilities.keyEnd:
461
+ this.checkLastOption(shiftKey);
462
+ return;
463
+ case _microsoft_fast_web_utilities.keyTab:
464
+ this.focusAndScrollOptionIntoView();
465
+ return;
466
+ case _microsoft_fast_web_utilities.keyEscape:
467
+ this.uncheckAllOptions();
468
+ this.checkActiveIndex();
469
+ return;
470
+ case _microsoft_fast_web_utilities.keySpace:
471
+ e.preventDefault();
472
+ /* v8 ignore else -- @preserve */
473
+ if (this.typeaheadExpired) {
474
+ this.toggleSelectedForAllCheckedOptions();
475
+ return;
476
+ }
477
+ default:
478
+ /* v8 ignore else -- @preserve */
479
+ if (key.length === 1) this.handleTypeAhead(key);
480
+ return;
481
+ }
482
+ }
483
+ /**
484
+ * Handle keyboard interaction for the select.
485
+ *
486
+ * @param e - the keyboard event
487
+ * @internal
488
+ */
489
+ keydownHandler(e) {
490
+ const selectedIndexBefore = this.selectedIndex;
491
+ if (this.multiple) this.multipleKeydownHandler(e);
492
+ else super.keydownHandler(e);
493
+ switch (e.key) {
494
+ case _microsoft_fast_web_utilities.keySpace:
495
+ e.preventDefault();
496
+ if (this.collapsible && this.typeaheadExpired) this.open = !this.open;
497
+ break;
498
+ case _microsoft_fast_web_utilities.keyHome:
499
+ case _microsoft_fast_web_utilities.keyEnd:
500
+ e.preventDefault();
501
+ break;
502
+ case _microsoft_fast_web_utilities.keyEnter:
503
+ e.preventDefault();
504
+ this.open = !this.open;
505
+ break;
506
+ case _microsoft_fast_web_utilities.keyEscape:
507
+ if (this.collapsible && this.open) {
508
+ e.preventDefault();
509
+ this.open = false;
510
+ }
511
+ break;
512
+ case _microsoft_fast_web_utilities.keyTab:
513
+ if (this.collapsible && this.open) {
514
+ e.preventDefault();
515
+ this.open = false;
516
+ }
517
+ return true;
518
+ }
519
+ if (this.collapsible && !this.open && this.selectedIndex !== selectedIndexBefore) this.updateValue(true);
520
+ return !(e.key === _microsoft_fast_web_utilities.keyArrowDown || e.key === _microsoft_fast_web_utilities.keyArrowUp);
521
+ }
96
522
  connectedCallback() {
97
523
  super.connectedCallback();
98
- this._updateView();
524
+ this.addEventListener("focusout", this.focusoutHandler);
525
+ this.addEventListener("contentchange", this.updateDisplayValue);
99
526
  }
100
- /** @internal */
101
527
  disconnectedCallback() {
528
+ this.removeEventListener("focusout", this.focusoutHandler);
529
+ this.removeEventListener("contentchange", this.updateDisplayValue);
102
530
  super.disconnectedCallback();
103
- this._removeStyles();
104
- this._cleanupLightDom();
531
+ }
532
+ /** @internal */
533
+ updateDisplayValue() {
534
+ if (this.collapsible) _microsoft_fast_element.Observable.notify(this, "displayValue");
535
+ }
536
+ get displayValue() {
537
+ _microsoft_fast_element.Observable.track(this, "displayValue");
538
+ return this.firstSelectedOption?.getAttribute("label") ?? this.firstSelectedOption?.text ?? this.placeholder ?? "";
539
+ }
540
+ _newDefaultSelectedIndex(prev, next, currentSelectIndex) {
541
+ const defaultSelectedIndex = super._newDefaultSelectedIndex(prev, next, currentSelectIndex);
542
+ if (defaultSelectedIndex === null && currentSelectIndex === -1 && !this.placeholder) {
543
+ const firstSelectableIndex = this.getNextSelectableIndex(0);
544
+ if (firstSelectableIndex !== -1) return firstSelectableIndex;
545
+ }
546
+ return defaultSelectedIndex;
547
+ }
548
+ _isDefaultSelected(option) {
549
+ return super._isDefaultSelected(option) || option.value === this.initialValue || !this._isResetting && option.value === this.value;
550
+ }
551
+ slottedOptionsChanged(prev, next) {
552
+ this.options.forEach((o) => {
553
+ _microsoft_fast_element.Observable.getNotifier(o).unsubscribe(this, "value");
554
+ });
555
+ super.slottedOptionsChanged(prev, next);
556
+ this.options.forEach((o) => {
557
+ _microsoft_fast_element.Observable.getNotifier(o).subscribe(this, "value");
558
+ });
559
+ this.setProxyOptions();
560
+ this.updateValue();
561
+ const scale = this.getAttribute("scale") || this.scale;
562
+ next.forEach((element) => {
563
+ if (scale) {
564
+ element.setAttribute("scale", scale);
565
+ element.scale = scale;
566
+ }
567
+ });
568
+ this.proxy.value = this.value;
569
+ this.validate();
570
+ }
571
+ formResetCallback() {
572
+ this.setProxyOptions();
573
+ this._isResetting = true;
574
+ this.selectedIndex = this._newDefaultSelectedIndex([], this.options, -1) ?? -1;
575
+ this._isResetting = false;
576
+ }
577
+ /** @internal */
578
+ get _shouldShowClearButton() {
579
+ if (!this.clearable) return false;
580
+ if (this.multiple) return this.selectedOptions?.length > 0;
581
+ return this.value !== "";
582
+ }
583
+ /** @internal */
584
+ _onClearButtonFocus() {
585
+ this._isClearButtonFocused = true;
586
+ this.activeIndex = -1;
587
+ this.uncheckAllOptions();
588
+ }
589
+ /** @internal */
590
+ _onClearButtonBlur() {
591
+ this._isClearButtonFocused = false;
592
+ }
593
+ /** @internal */
594
+ get _shouldShowLabelWrapper() {
595
+ return Boolean(this.label || this._hasContextualHelp || this.multiple && this._shouldShowClearButton);
596
+ }
597
+ /** @internal */
598
+ _onClearButtonClick() {
599
+ if (this.multiple) this.selectedOptions.forEach((o) => {
600
+ /* v8 ignore else -- @preserve */
601
+ if (!o.disabled) o.selected = false;
602
+ });
603
+ else this.selectedIndex = -1;
604
+ this.updateValue(true);
105
605
  }
106
606
  };
107
- require_decorate.__decorate([_microsoft_fast_element.observable], RichTextView.prototype, "view", void 0);
607
+ require_decorate.__decorate([_microsoft_fast_element.observable], Select.prototype, "activeIndex", void 0);
608
+ require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "boolean" })], Select.prototype, "multiple", void 0);
609
+ require_decorate.__decorate([(0, _microsoft_fast_element.attr)({
610
+ attribute: "open",
611
+ mode: "boolean"
612
+ })], Select.prototype, "open", void 0);
613
+ require_decorate.__decorate([_microsoft_fast_element.volatile], Select.prototype, "collapsible", null);
614
+ require_decorate.__decorate([_microsoft_fast_element.observable], Select.prototype, "control", void 0);
615
+ require_decorate.__decorate([_microsoft_fast_element.observable], Select.prototype, "maxHeight", void 0);
616
+ require_decorate.__decorate([_microsoft_fast_element.observable], Select.prototype, "_anchor", void 0);
617
+ require_decorate.__decorate([(0, _microsoft_fast_element.attr)()], Select.prototype, "scale", void 0);
618
+ require_decorate.__decorate([_microsoft_fast_element.attr], Select.prototype, "appearance", void 0);
619
+ require_decorate.__decorate([_microsoft_fast_element.attr], Select.prototype, "shape", void 0);
620
+ require_decorate.__decorate([(0, _microsoft_fast_element.attr)({
621
+ mode: "boolean",
622
+ attribute: "fixed-dropdown"
623
+ })], Select.prototype, "fixedDropdown", void 0);
624
+ require_decorate.__decorate([_microsoft_fast_element.attr], Select.prototype, "placeholder", void 0);
625
+ require_decorate.__decorate([_microsoft_fast_element.observable], Select.prototype, "_feedbackWrapper", void 0);
626
+ require_decorate.__decorate([_microsoft_fast_element.observable], Select.prototype, "metaSlottedContent", void 0);
627
+ require_decorate.__decorate([(0, _microsoft_fast_element.attr)({ mode: "boolean" })], Select.prototype, "clearable", void 0);
628
+ require_decorate.__decorate([_microsoft_fast_element.observable], Select.prototype, "_isClearButtonFocused", void 0);
108
629
  //#endregion
109
- //#region src/lib/rich-text-view/rich-text-view.template.ts
110
- var RichTextViewTemplate = () => _microsoft_fast_element.html`<div class="content rich-text" ${(0, _microsoft_fast_element.ref)("_contentElement")}></div>`;
630
+ //#region src/lib/select/select.template.ts
631
+ function renderLabel() {
632
+ return _microsoft_fast_element.html` <label
633
+ for="${(x) => x.multiple ? null : "control"}"
634
+ class="label"
635
+ id="label"
636
+ >
637
+ ${(x) => x.label}
638
+ </label>`;
639
+ }
640
+ function renderPlaceholder(context) {
641
+ const optionTag = context.tagFor(require_definition$3.ListboxOption);
642
+ return _microsoft_fast_element.html`
643
+ <${optionTag} text="${(x) => x.placeholder}" hidden disabled>
644
+ </${optionTag}>`;
645
+ }
646
+ function renderClearButton(context) {
647
+ const buttonTag = context.tagFor(require_definition$1.Button);
648
+ return _microsoft_fast_element.html`
649
+ <${buttonTag}
650
+ aria-label="${(x) => x.locale.select.clearButtonLabel}"
651
+ aria-hidden="${(x) => x._isClearButtonFocused ? "false" : "true"}"
652
+ @click="${(x, c) => {
653
+ x._onClearButtonClick();
654
+ c.event.stopPropagation();
655
+ }}"
656
+ @mousedown="${() => false}"
657
+ @keydown="${(x, c) => {
658
+ /* v8 ignore next -- @preserve */
659
+ if (c.event.key === "Tab") x._onClearButtonBlur();
660
+ c.event.stopPropagation();
661
+ return true;
662
+ }}"
663
+ @focusin="${(x, c) => {
664
+ c.event.stopPropagation();
665
+ x._onClearButtonFocus();
666
+ }}"
667
+ @focusout="${(x) => x._onClearButtonBlur()}"
668
+ ?disabled="${(x) => x.disabled}"
669
+ :shape="${(x) => x.shape}"
670
+ size="super-condensed"
671
+ icon="close-line"
672
+ appearance="ghost-light"
673
+ class="clear-button"
674
+ tabindex="0"
675
+ ></${buttonTag}>
676
+ `;
677
+ }
678
+ function selectValue(context) {
679
+ const affixIconTemplate = require_affix.affixIconTemplateFactory(context);
680
+ const chevronTemplate = require_definition$1.chevronTemplateFactory(context);
681
+ return _microsoft_fast_element.html` <div
682
+ class="control ${(x) => (0, _microsoft_fast_web_utilities.classNames)(["has-activedescendant", Boolean(x._activeDescendant) && x.open], ["disabled", x.disabled], [`appearance-${x.appearance}`, Boolean(x.appearance)], [`shape-${x.shape}`, Boolean(x.shape)], ["has-meta", Boolean(x.metaSlottedContent?.length)], ["error", Boolean(x.errorValidationMessage)], ["success", !!x.successText], ["shows-placeholder", Boolean(x.placeholder) && !x.value], [`size-${x.scale}`, Boolean(x.scale)])}"
683
+ ${(0, _microsoft_fast_element.ref)("_anchor")}
684
+ id="control"
685
+ ?disabled="${(x) => x.disabled}"
686
+ >
687
+ <div class="selected-value">
688
+ ${(x) => affixIconTemplate(x.icon, require_affix.IconWrapper.Slot)}
689
+ <span class="text">${(x) => x.displayValue}</span>
690
+ <slot name="meta" ${(0, _microsoft_fast_element.slotted)("metaSlottedContent")}></slot>
691
+ </div>
692
+ ${(0, _microsoft_fast_element.when)((x) => x._shouldShowClearButton, renderClearButton(context))}
693
+ ${chevronTemplate}
694
+ </div>`;
695
+ }
696
+ function setFixedDropdownVarWidth(x) {
697
+ return x.open && x.fixedDropdown ? `--_select-fixed-width: ${Math.round(x.getBoundingClientRect().width)}px` : null;
698
+ }
699
+ /** @param context - element definition context */
700
+ function renderControl(context) {
701
+ const popupTag = context.tagFor(require_definition$2.Popup);
702
+ return _microsoft_fast_element.html`
703
+ <div class="label-wrapper" ?hidden=${(x) => !x._shouldShowLabelWrapper}>
704
+ ${(0, _microsoft_fast_element.when)((x) => x.label, renderLabel())}
705
+ ${(0, _microsoft_fast_element.when)((x) => x.multiple && x._shouldShowClearButton, renderClearButton(context))}
706
+ <slot name="contextual-help" ${(0, _microsoft_fast_element.slotted)("_contextualHelpSlottedContent")}></slot>
707
+ </div>
708
+ <div class="control-wrapper">
709
+ ${(0, _microsoft_fast_element.when)((x) => !x.multiple, selectValue(context))}
710
+ <${popupTag} class="popup"
711
+ style="${setFixedDropdownVarWidth}"
712
+ ?open="${(x) => x.collapsible ? x.open : true}"
713
+ :anchor="${(x) => x._anchor}"
714
+ placement="bottom-start"
715
+ strategy="${(x) => x.fixedDropdown ? null : "absolute"}">
716
+ <div class="listbox"
717
+ id="${(x) => x.listboxId}"
718
+ role="listbox"
719
+ aria-multiselectable="${(x) => x.multiple}"
720
+ aria-label="${(x) => x.multiple && !x.label && x.ariaLabel ? x.ariaLabel : null}"
721
+ aria-labelledby="${(x) => x.multiple && x.label ? "label" : null}"
722
+ ?disabled="${(x) => x.disabled}"
723
+ ?hidden="${(x) => x.collapsible ? !x.open : false}"
724
+ ${(0, _microsoft_fast_element.ref)("listbox")}>
725
+ ${(0, _microsoft_fast_element.when)((x) => x.placeholder, renderPlaceholder(context))}
726
+ <slot
727
+ ${(0, _microsoft_fast_element.slotted)({
728
+ filter: require_listbox.Listbox.slottedOptionFilter,
729
+ flatten: true,
730
+ property: "slottedOptions"
731
+ })}>
732
+ </slot>
733
+ </div>
734
+ </${popupTag}>
735
+ </div>
736
+ `;
737
+ }
738
+ /** Ignore events that originate from feedback, e.g. a click on link */
739
+ function ifNotFromFeedback(handler) {
740
+ return (x, c) => {
741
+ if (!c.event.composedPath().includes(x._feedbackWrapper)) {
742
+ handler(x, c.event);
743
+ return;
744
+ }
745
+ return true;
746
+ };
747
+ }
748
+ var SelectTemplate = (context) => {
749
+ return _microsoft_fast_element.html`
750
+ <template
751
+ ${require_host_semantics.applyHostSemantics({
752
+ role: "combobox",
753
+ ariaLabel: (x) => x.ariaLabel ?? x.label,
754
+ ariaHasPopup: (x) => x.collapsible ? "listbox" : "false",
755
+ ariaExpanded: (x) => x.open,
756
+ ariaDisabled: (x) => x.disabled
757
+ })}
758
+ aria-controls="${(x) => x.listboxId}"
759
+ aria-activedescendant="${(x) => x.open ? x._activeDescendant : null}"
760
+ aria-describedby="${(x) => x._feedbackDescribedBy}"
761
+ tabindex="${(x) => !x.disabled ? "0" : null}"
762
+ @click="${ifNotFromFeedback((x, e) => x.clickHandler(e))}"
763
+ @focusin="${ifNotFromFeedback((x, e) => x.focusinHandler(e))}"
764
+ @focusout="${ifNotFromFeedback((x, e) => x.focusoutHandler(e))}"
765
+ @keydown="${ifNotFromFeedback((x, e) => {
766
+ if (x.open) require_dialog.handleEscapeKeyAndStopPropogation(e);
767
+ return x.keydownHandler(e);
768
+ })}"
769
+ @mousedown="${ifNotFromFeedback((x, e) => x.mousedownHandler(e))}"
770
+ >
771
+ ${renderControl(context)}
772
+ <div class="feedback-wrapper" ${(0, _microsoft_fast_element.ref)("_feedbackWrapper")}>
773
+ ${(x) => x._getFeedbackTemplate(context)}
774
+ </div>
775
+ </template>
776
+ `;
777
+ };
111
778
  //#endregion
112
- //#region src/lib/rich-text-view/definition.ts
113
- var richTextViewDefinition = require_vivid_element.defineVividComponent("rich-text-view", RichTextView, RichTextViewTemplate, [], {
114
- styles: rich_text_view_default,
115
- shadowOptions: { delegatesFocus: true }
116
- });
779
+ //#region src/lib/select/definition.ts
780
+ /** @internal */
781
+ var selectDefinition = require_vivid_element.defineVividComponent("select", Select, SelectTemplate, [
782
+ require_definition$2.popupDefinition,
783
+ require_definition.iconDefinition,
784
+ require_definition$3.listboxOptionDefinition,
785
+ require_definition$4.optgroupDefinition,
786
+ require_definition$1.buttonDefinition,
787
+ require_mixins.feedbackMessageDefinition
788
+ ], { styles: select_default });
117
789
  /**
118
- * Registers the rich-text-view element with the design system.
790
+ * Registers the select elements with the design system.
119
791
  *
120
792
  * @param prefix - the prefix to use for the component name
121
793
  */
122
- var registerRichTextView = require_vivid_element.createRegisterFunction(richTextViewDefinition);
794
+ var registerSelect = require_vivid_element.createRegisterFunction(selectDefinition);
123
795
  //#endregion
124
- Object.defineProperty(exports, "RichTextView", {
796
+ Object.defineProperty(exports, "Select", {
125
797
  enumerable: true,
126
798
  get: function() {
127
- return RichTextView;
799
+ return Select;
128
800
  }
129
801
  });
130
- Object.defineProperty(exports, "registerRichTextView", {
802
+ Object.defineProperty(exports, "registerSelect", {
131
803
  enumerable: true,
132
804
  get: function() {
133
- return registerRichTextView;
805
+ return registerSelect;
134
806
  }
135
807
  });
136
- Object.defineProperty(exports, "richTextViewDefinition", {
808
+ Object.defineProperty(exports, "selectDefinition", {
137
809
  enumerable: true,
138
810
  get: function() {
139
- return richTextViewDefinition;
811
+ return selectDefinition;
140
812
  }
141
813
  });