@vonage/vivid 4.16.2 → 4.18.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 (447) hide show
  1. package/custom-elements.json +8857 -5894
  2. package/date-time-picker/index.cjs +5 -0
  3. package/date-time-picker/index.js +3 -0
  4. package/dial-pad/index.cjs +1 -1
  5. package/dial-pad/index.js +1 -1
  6. package/dialog/index.cjs +1 -1
  7. package/dialog/index.js +1 -1
  8. package/divider/index.cjs +1 -1
  9. package/divider/index.js +1 -1
  10. package/elevation/index.cjs +1 -1
  11. package/elevation/index.js +1 -1
  12. package/empty-state/index.cjs +1 -1
  13. package/empty-state/index.js +1 -1
  14. package/fab/index.cjs +1 -1
  15. package/fab/index.js +1 -1
  16. package/file-picker/index.cjs +1 -1
  17. package/file-picker/index.js +1 -1
  18. package/header/index.cjs +1 -1
  19. package/header/index.js +1 -1
  20. package/icon/index.cjs +1 -1
  21. package/icon/index.js +1 -1
  22. package/index.cjs +198 -87
  23. package/index.js +66 -60
  24. package/layout/index.cjs +1 -1
  25. package/layout/index.js +1 -1
  26. package/lib/accordion/definition.d.ts +2 -0
  27. package/lib/accordion-item/definition.d.ts +2 -0
  28. package/lib/action-group/action-group.d.ts +449 -3
  29. package/lib/action-group/definition.d.ts +2 -0
  30. package/lib/alert/definition.d.ts +2 -0
  31. package/lib/audio-player/definition.d.ts +2 -0
  32. package/lib/avatar/definition.d.ts +2 -0
  33. package/lib/badge/definition.d.ts +2 -0
  34. package/lib/banner/banner.d.ts +449 -3
  35. package/lib/banner/definition.d.ts +2 -0
  36. package/lib/breadcrumb/definition.d.ts +2 -0
  37. package/lib/breadcrumb-item/breadcrumb-item.d.ts +449 -1
  38. package/lib/breadcrumb-item/definition.d.ts +2 -0
  39. package/lib/button/definition.d.ts +2 -0
  40. package/lib/calendar/calendar.d.ts +2 -0
  41. package/lib/calendar/definition.d.ts +2 -0
  42. package/lib/calendar-event/definition.d.ts +2 -0
  43. package/lib/card/definition.d.ts +2 -0
  44. package/lib/checkbox/checkbox.d.ts +449 -4
  45. package/lib/checkbox/definition.d.ts +2 -0
  46. package/lib/combobox/definition.d.ts +2 -0
  47. package/lib/components.d.ts +2 -0
  48. package/lib/data-grid/definition.d.ts +4 -0
  49. package/lib/date-picker/date-picker.d.ts +2182 -4
  50. package/lib/date-picker/date-picker.template.d.ts +2 -0
  51. package/lib/date-picker/definition.d.ts +2 -0
  52. package/lib/date-range-picker/date-range-picker.d.ts +1110 -4
  53. package/lib/date-range-picker/date-range-picker.template.d.ts +2 -0
  54. package/lib/date-range-picker/definition.d.ts +2 -0
  55. package/lib/date-time-picker/date-time-picker.d.ts +2175 -0
  56. package/lib/date-time-picker/date-time-picker.template.d.ts +2 -0
  57. package/lib/date-time-picker/definition.d.ts +1 -0
  58. package/lib/date-time-picker/locale.d.ts +9 -0
  59. package/lib/dial-pad/definition.d.ts +2 -0
  60. package/lib/dialog/definition.d.ts +2 -0
  61. package/lib/dialog/dialog.d.ts +449 -2
  62. package/lib/divider/definition.d.ts +2 -0
  63. package/lib/divider/divider.d.ts +448 -1
  64. package/lib/empty-state/definition.d.ts +2 -0
  65. package/lib/enums.d.ts +6 -0
  66. package/lib/fab/definition.d.ts +2 -0
  67. package/lib/file-picker/definition.d.ts +2 -0
  68. package/lib/header/definition.d.ts +2 -0
  69. package/lib/icon/definition.d.ts +2 -0
  70. package/lib/layout/definition.d.ts +2 -0
  71. package/lib/menu/definition.d.ts +2 -0
  72. package/lib/menu/menu.d.ts +900 -5
  73. package/lib/menu-item/definition.d.ts +2 -0
  74. package/lib/nav/definition.d.ts +2 -0
  75. package/lib/nav-disclosure/definition.d.ts +2 -0
  76. package/lib/nav-disclosure/nav-disclosure.d.ts +449 -2
  77. package/lib/nav-item/definition.d.ts +2 -0
  78. package/lib/note/definition.d.ts +2 -0
  79. package/lib/number-field/definition.d.ts +2 -0
  80. package/lib/number-field/number-field.d.ts +450 -3
  81. package/lib/option/definition.d.ts +2 -0
  82. package/lib/option/option.d.ts +1 -11
  83. package/lib/pagination/definition.d.ts +2 -0
  84. package/lib/popup/definition.d.ts +0 -1
  85. package/lib/popup/popup.d.ts +25 -0
  86. package/lib/progress/definition.d.ts +2 -0
  87. package/lib/progress/progress.d.ts +449 -2
  88. package/lib/progress-ring/definition.d.ts +2 -0
  89. package/lib/progress-ring/progress-ring.d.ts +449 -2
  90. package/lib/radio/definition.d.ts +2 -0
  91. package/lib/radio-group/definition.d.ts +2 -0
  92. package/lib/range-slider/definition.d.ts +2 -0
  93. package/lib/rich-text-editor/definition.d.ts +2 -0
  94. package/lib/rich-text-editor/facades/prose-mirror-vivid.schema.d.ts +2 -0
  95. package/lib/rich-text-editor/facades/vivid-prose-mirror.facade.d.ts +8 -0
  96. package/lib/rich-text-editor/rich-text-editor.d.ts +16 -0
  97. package/lib/rich-text-editor/rich-text-editor.template.d.ts +4 -0
  98. package/lib/searchable-select/definition.d.ts +2 -0
  99. package/lib/select/definition.d.ts +2 -0
  100. package/lib/select/select.d.ts +1 -5
  101. package/lib/selectable-box/definition.d.ts +2 -0
  102. package/lib/selectable-box/selectable-box.d.ts +449 -2
  103. package/lib/side-drawer/definition.d.ts +2 -0
  104. package/lib/slider/definition.d.ts +2 -0
  105. package/lib/slider/slider.d.ts +449 -3
  106. package/lib/split-button/definition.d.ts +2 -0
  107. package/lib/split-button/split-button.d.ts +449 -3
  108. package/lib/switch/definition.d.ts +2 -0
  109. package/lib/switch/switch.d.ts +449 -2
  110. package/lib/tab/definition.d.ts +2 -0
  111. package/lib/tab-panel/definition.d.ts +2 -0
  112. package/lib/tabs/definition.d.ts +2 -0
  113. package/lib/tag/definition.d.ts +2 -0
  114. package/lib/tag-group/definition.d.ts +2 -0
  115. package/lib/tag-group/tag-group.d.ts +449 -2
  116. package/lib/text-anchor/text-anchor.d.ts +449 -1
  117. package/lib/text-area/definition.d.ts +2 -0
  118. package/lib/text-area/text-area.d.ts +450 -3
  119. package/lib/text-field/definition.d.ts +2 -0
  120. package/lib/text-field/text-field.d.ts +450 -7
  121. package/lib/time-picker/definition.d.ts +2 -0
  122. package/lib/time-picker/locale.d.ts +0 -2
  123. package/lib/time-picker/time-picker.d.ts +1053 -9
  124. package/lib/time-picker/time-picker.template.d.ts +2 -2
  125. package/lib/toggletip/definition.d.ts +2 -0
  126. package/lib/toggletip/toggletip.d.ts +454 -4
  127. package/lib/tooltip/definition.d.ts +2 -0
  128. package/lib/tooltip/tooltip.d.ts +454 -4
  129. package/lib/tree-item/definition.d.ts +2 -0
  130. package/lib/tree-view/definition.d.ts +2 -0
  131. package/lib/video-player/definition.d.ts +2 -0
  132. package/locales/de-DE.cjs +29 -5
  133. package/locales/de-DE.js +29 -5
  134. package/locales/en-GB.cjs +29 -5
  135. package/locales/en-GB.js +29 -5
  136. package/locales/en-US.cjs +29 -5
  137. package/locales/en-US.js +29 -5
  138. package/locales/ja-JP.cjs +29 -5
  139. package/locales/ja-JP.js +29 -5
  140. package/locales/zh-CN.cjs +29 -5
  141. package/locales/zh-CN.js +29 -5
  142. package/menu/index.cjs +1 -1
  143. package/menu/index.js +1 -1
  144. package/menu-item/index.cjs +1 -1
  145. package/menu-item/index.js +1 -1
  146. package/nav/index.cjs +1 -1
  147. package/nav/index.js +1 -1
  148. package/nav-disclosure/index.cjs +1 -1
  149. package/nav-disclosure/index.js +1 -1
  150. package/nav-item/index.cjs +1 -1
  151. package/nav-item/index.js +1 -1
  152. package/note/index.cjs +1 -1
  153. package/note/index.js +1 -1
  154. package/number-field/index.cjs +1 -1
  155. package/number-field/index.js +1 -1
  156. package/option/index.cjs +1 -1
  157. package/option/index.js +1 -1
  158. package/package.json +7 -2
  159. package/pagination/index.cjs +1 -1
  160. package/pagination/index.js +1 -1
  161. package/popup/index.cjs +1 -1
  162. package/popup/index.js +1 -1
  163. package/progress/index.cjs +1 -1
  164. package/progress/index.js +1 -1
  165. package/progress-ring/index.cjs +1 -1
  166. package/progress-ring/index.js +1 -1
  167. package/radio/index.cjs +1 -1
  168. package/radio/index.js +1 -1
  169. package/radio-group/index.cjs +1 -1
  170. package/radio-group/index.js +1 -1
  171. package/range-slider/index.cjs +1 -1
  172. package/range-slider/index.js +1 -1
  173. package/rich-text-editor/index.cjs +5 -0
  174. package/rich-text-editor/index.js +3 -0
  175. package/searchable-select/index.cjs +1 -1
  176. package/searchable-select/index.js +1 -1
  177. package/select/index.cjs +1 -1
  178. package/select/index.js +1 -1
  179. package/selectable-box/index.cjs +1 -1
  180. package/selectable-box/index.js +1 -1
  181. package/shared/Reflector.cjs +71 -0
  182. package/shared/Reflector.js +69 -0
  183. package/shared/affix.cjs +2 -4
  184. package/shared/affix.js +3 -5
  185. package/shared/anchor.cjs +0 -10
  186. package/shared/anchor.js +0 -10
  187. package/shared/anchored.cjs +12 -9
  188. package/shared/anchored.js +13 -10
  189. package/shared/aria/delegates-aria.d.ts +454 -0
  190. package/shared/base-progress.js +1 -1
  191. package/shared/breadcrumb-item.cjs +2 -1
  192. package/shared/breadcrumb-item.js +2 -1
  193. package/shared/button.cjs +2 -13
  194. package/shared/button.js +2 -13
  195. package/shared/{presentationDate.cjs → calendar-picker.template.cjs} +681 -853
  196. package/shared/{presentationDate.js → calendar-picker.template.js} +673 -848
  197. package/shared/datetime/dateTimeStr.d.ts +6 -0
  198. package/shared/datetime/presentationDate.d.ts +4 -0
  199. package/shared/{date-picker/calendar → datetime}/presentationDateRange.d.ts +3 -3
  200. package/shared/datetime/presentationDateTime.d.ts +4 -0
  201. package/{lib/time-picker/time → shared/datetime}/time.d.ts +1 -0
  202. package/shared/definition.cjs +1 -1
  203. package/shared/definition.js +2 -2
  204. package/shared/definition10.cjs +1 -0
  205. package/shared/definition10.js +2 -2
  206. package/shared/definition11.cjs +9 -12
  207. package/shared/definition11.js +10 -13
  208. package/shared/definition12.cjs +1 -1
  209. package/shared/definition12.js +2 -2
  210. package/shared/definition13.cjs +15 -2
  211. package/shared/definition13.js +16 -4
  212. package/shared/definition14.cjs +4 -3
  213. package/shared/definition14.js +5 -5
  214. package/shared/definition15.cjs +4 -11
  215. package/shared/definition15.js +5 -12
  216. package/shared/definition16.cjs +44 -48
  217. package/shared/definition16.js +32 -36
  218. package/shared/definition17.cjs +4 -1
  219. package/shared/definition17.js +3 -3
  220. package/shared/definition18.cjs +59 -94
  221. package/shared/definition18.js +58 -93
  222. package/shared/definition19.cjs +79 -43
  223. package/shared/definition19.js +60 -24
  224. package/shared/definition2.cjs +1 -0
  225. package/shared/definition2.js +2 -2
  226. package/shared/definition20.cjs +253 -219
  227. package/shared/definition20.js +254 -220
  228. package/shared/definition21.cjs +201 -286
  229. package/shared/definition21.js +199 -285
  230. package/shared/definition22.cjs +302 -31
  231. package/shared/definition22.js +301 -30
  232. package/shared/definition23.cjs +37 -57
  233. package/shared/definition23.js +36 -57
  234. package/shared/definition24.cjs +50 -69
  235. package/shared/definition24.js +49 -69
  236. package/shared/definition25.cjs +75 -2475
  237. package/shared/definition25.js +74 -2475
  238. package/shared/definition26.cjs +2480 -49
  239. package/shared/definition26.js +2480 -49
  240. package/shared/definition27.cjs +53 -271
  241. package/shared/definition27.js +52 -269
  242. package/shared/definition28.cjs +271 -47
  243. package/shared/definition28.js +269 -47
  244. package/shared/definition29.cjs +37 -772
  245. package/shared/definition29.js +36 -767
  246. package/shared/definition3.cjs +3 -9
  247. package/shared/definition3.js +4 -11
  248. package/shared/definition30.cjs +739 -56
  249. package/shared/definition30.js +733 -56
  250. package/shared/definition31.cjs +93 -21
  251. package/shared/definition31.js +92 -21
  252. package/shared/definition32.cjs +28 -9
  253. package/shared/definition32.js +27 -9
  254. package/shared/definition33.cjs +10 -51
  255. package/shared/definition33.js +9 -51
  256. package/shared/definition34.cjs +31 -412
  257. package/shared/definition34.js +31 -413
  258. package/shared/definition35.cjs +423 -53
  259. package/shared/definition35.js +424 -54
  260. package/shared/definition36.cjs +53 -215
  261. package/shared/definition36.js +53 -215
  262. package/shared/definition37.cjs +202 -72
  263. package/shared/definition37.js +201 -71
  264. package/shared/definition38.cjs +54 -48
  265. package/shared/definition38.js +53 -48
  266. package/shared/definition39.cjs +57 -262
  267. package/shared/definition39.js +56 -262
  268. package/shared/definition4.cjs +4 -3
  269. package/shared/definition4.js +5 -5
  270. package/shared/definition40.cjs +220 -148
  271. package/shared/definition40.js +220 -148
  272. package/shared/definition41.cjs +144 -568
  273. package/shared/definition41.js +144 -569
  274. package/shared/definition42.cjs +476 -967
  275. package/shared/definition42.js +477 -969
  276. package/shared/definition43.cjs +13508 -851
  277. package/shared/definition43.js +13508 -851
  278. package/shared/definition44.cjs +1111 -103
  279. package/shared/definition44.js +1112 -103
  280. package/shared/definition45.cjs +849 -80
  281. package/shared/definition45.js +849 -80
  282. package/shared/definition46.cjs +108 -464
  283. package/shared/definition46.js +107 -463
  284. package/shared/definition47.cjs +96 -118
  285. package/shared/definition47.js +95 -118
  286. package/shared/definition48.cjs +430 -82
  287. package/shared/definition48.js +430 -83
  288. package/shared/definition49.cjs +135 -15
  289. package/shared/definition49.js +134 -15
  290. package/shared/definition5.cjs +5 -4
  291. package/shared/definition5.js +6 -6
  292. package/shared/definition50.cjs +109 -85
  293. package/shared/definition50.js +108 -85
  294. package/shared/definition51.cjs +14 -519
  295. package/shared/definition51.js +13 -519
  296. package/shared/definition52.cjs +96 -23
  297. package/shared/definition52.js +95 -23
  298. package/shared/definition53.cjs +480 -99
  299. package/shared/definition53.js +479 -99
  300. package/shared/definition54.cjs +24 -296
  301. package/shared/definition54.js +23 -296
  302. package/shared/definition55.cjs +126 -69
  303. package/shared/definition55.js +125 -69
  304. package/shared/definition56.cjs +186 -775
  305. package/shared/definition56.js +187 -776
  306. package/shared/definition57.cjs +511 -107
  307. package/shared/definition57.js +511 -107
  308. package/shared/definition58.cjs +27 -128
  309. package/shared/definition58.js +27 -128
  310. package/shared/definition59.cjs +106 -162
  311. package/shared/definition59.js +105 -160
  312. package/shared/definition6.cjs +3 -2
  313. package/shared/definition6.js +4 -4
  314. package/shared/definition60.cjs +81 -252
  315. package/shared/definition60.js +80 -252
  316. package/shared/definition61.cjs +156 -70156
  317. package/shared/definition61.js +154 -70156
  318. package/shared/definition62.cjs +271 -29
  319. package/shared/definition62.js +270 -28
  320. package/shared/definition63.cjs +69236 -2018
  321. package/shared/definition63.js +69235 -2016
  322. package/shared/definition64.cjs +55 -0
  323. package/shared/definition64.js +51 -0
  324. package/shared/definition65.cjs +2195 -0
  325. package/shared/definition65.js +2190 -0
  326. package/shared/definition7.cjs +3 -2
  327. package/shared/definition7.js +4 -4
  328. package/shared/definition8.cjs +5 -10
  329. package/shared/definition8.js +6 -12
  330. package/shared/definition9.cjs +2 -2
  331. package/shared/definition9.js +3 -3
  332. package/shared/delegates-aria.cjs +69 -0
  333. package/shared/delegates-aria.js +67 -0
  334. package/shared/enums.cjs +8 -0
  335. package/shared/enums.js +8 -1
  336. package/shared/form-elements.cjs +8 -8
  337. package/shared/form-elements.js +9 -9
  338. package/shared/foundation/anchor/anchor.d.ts +0 -8
  339. package/shared/foundation/button/button.d.ts +449 -7
  340. package/shared/foundation/listbox/listbox.d.ts +0 -9
  341. package/shared/foundation/vivid-element/vivid-element.d.ts +1 -0
  342. package/shared/listbox.cjs +4 -30
  343. package/shared/listbox.js +4 -30
  344. package/shared/localization/Locale.d.ts +6 -2
  345. package/shared/option.cjs +1 -38
  346. package/shared/option.js +1 -38
  347. package/shared/patterns/anchored.d.ts +891 -10
  348. package/shared/patterns/trapped-focus.d.ts +2 -0
  349. package/shared/picker-field/locale.d.ts +4 -0
  350. package/shared/picker-field/mixins/calendar-picker.d.ts +558 -0
  351. package/shared/{date-picker/locale.d.ts → picker-field/mixins/calendar-picker.locale.d.ts} +1 -3
  352. package/shared/picker-field/mixins/calendar-picker.template.d.ts +555 -0
  353. package/shared/picker-field/mixins/calendar-segments/calendarGrid.d.ts +17 -0
  354. package/shared/{date-picker/calendar → picker-field/mixins/calendar-segments}/monthPickerGrid.d.ts +3 -3
  355. package/shared/picker-field/mixins/inline-time-picker/columns.d.ts +13 -0
  356. package/shared/picker-field/mixins/inline-time-picker/definition.d.ts +1 -0
  357. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +15 -0
  358. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.template.d.ts +5 -0
  359. package/{lib/time-picker/time/picker.d.ts → shared/picker-field/mixins/inline-time-picker/picker-option.d.ts} +1 -1
  360. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +1110 -0
  361. package/shared/picker-field/mixins/single-date-picker.d.ts +1626 -0
  362. package/shared/picker-field/mixins/single-value-picker.d.ts +518 -0
  363. package/shared/picker-field/mixins/time-selection-picker.d.ts +1053 -0
  364. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +1050 -0
  365. package/shared/picker-field/picker-field.d.ts +11 -0
  366. package/shared/picker-field/picker-field.form-associated.d.ts +11 -0
  367. package/shared/picker-field/picker-field.template.d.ts +7 -0
  368. package/shared/picker-field.template.cjs +315 -0
  369. package/shared/picker-field.template.js +310 -0
  370. package/shared/single-date-picker.cjs +46 -0
  371. package/shared/single-date-picker.js +44 -0
  372. package/shared/single-value-picker.cjs +77 -0
  373. package/shared/single-value-picker.js +75 -0
  374. package/shared/slider.template.cjs +6 -6
  375. package/shared/slider.template.js +6 -6
  376. package/shared/text-anchor.cjs +2 -1
  377. package/shared/text-anchor.js +2 -1
  378. package/shared/text-anchor.template.cjs +5 -7
  379. package/shared/text-anchor.template.js +5 -7
  380. package/shared/time-selection-picker.template.cjs +776 -0
  381. package/shared/time-selection-picker.template.js +767 -0
  382. package/shared/utils/mixins.d.ts +3 -0
  383. package/shared/vivid-element.cjs +3 -0
  384. package/shared/vivid-element.js +4 -1
  385. package/side-drawer/index.cjs +1 -1
  386. package/side-drawer/index.js +1 -1
  387. package/slider/index.cjs +1 -1
  388. package/slider/index.js +1 -1
  389. package/split-button/index.cjs +1 -1
  390. package/split-button/index.js +1 -1
  391. package/styles/core/all.css +1 -1
  392. package/styles/core/theme.css +1 -1
  393. package/styles/core/typography.css +1 -1
  394. package/styles/tokens/theme-dark.css +4 -4
  395. package/styles/tokens/theme-light.css +4 -4
  396. package/styles/tokens/vivid-2-compat.css +1 -1
  397. package/switch/index.cjs +1 -1
  398. package/switch/index.js +1 -1
  399. package/tab/index.cjs +1 -1
  400. package/tab/index.js +1 -1
  401. package/tab-panel/index.cjs +1 -1
  402. package/tab-panel/index.js +1 -1
  403. package/tabs/index.cjs +1 -1
  404. package/tabs/index.js +1 -1
  405. package/tag/index.cjs +1 -1
  406. package/tag/index.js +1 -1
  407. package/tag-group/index.cjs +1 -1
  408. package/tag-group/index.js +1 -1
  409. package/text-anchor/index.cjs +1 -1
  410. package/text-anchor/index.js +2 -2
  411. package/text-area/index.cjs +1 -1
  412. package/text-area/index.js +1 -1
  413. package/text-field/index.cjs +1 -1
  414. package/text-field/index.js +1 -1
  415. package/time-picker/index.cjs +1 -1
  416. package/time-picker/index.js +1 -1
  417. package/toggletip/index.cjs +1 -1
  418. package/toggletip/index.js +1 -1
  419. package/tooltip/index.cjs +1 -1
  420. package/tooltip/index.js +1 -1
  421. package/tree-item/index.cjs +1 -1
  422. package/tree-item/index.js +1 -1
  423. package/tree-view/index.cjs +1 -1
  424. package/tree-view/index.js +1 -1
  425. package/video-player/index.cjs +1 -1
  426. package/video-player/index.js +1 -1
  427. package/vivid.api.json +21748 -1
  428. package/lib/time-picker/time-picker.form-associated.d.ts +0 -11
  429. package/shared/aria-global.cjs +0 -93
  430. package/shared/aria-global.js +0 -91
  431. package/shared/date-picker/calendar/calendarGrid.d.ts +0 -17
  432. package/shared/date-picker/calendar/presentationDate.d.ts +0 -4
  433. package/shared/date-picker/date-picker-base.d.ts +0 -21
  434. package/shared/date-picker/date-picker-base.form-associated.d.ts +0 -11
  435. package/shared/date-picker/date-picker-base.template.d.ts +0 -3
  436. package/shared/foundation/patterns/aria-global.d.ts +0 -21
  437. package/shared/foundation/patterns/index.d.ts +0 -1
  438. package/shared/text-field2.cjs +0 -575
  439. package/shared/text-field2.js +0 -572
  440. package/shared/trapped-focus.cjs +0 -29
  441. package/shared/trapped-focus.js +0 -27
  442. /package/shared/{date-picker/calendar → datetime}/dateRange.d.ts +0 -0
  443. /package/shared/{date-picker/calendar → datetime}/dateStr.d.ts +0 -0
  444. /package/shared/{date-picker/calendar → datetime}/month.d.ts +0 -0
  445. /package/{lib/time-picker/time → shared/datetime}/presentationTime.d.ts +0 -0
  446. /package/shared/{date-picker/calendar → datetime}/year.d.ts +0 -0
  447. /package/shared/{date-picker/calendar → picker-field/mixins/calendar-segments}/segment.d.ts +0 -0
@@ -1,127 +1,896 @@
1
1
  'use strict';
2
2
 
3
+ const definition = require('./definition65.cjs');
4
+ const definition$2 = require('./definition28.cjs');
5
+ const definition$3 = require('./definition36.cjs');
3
6
  const vividElement = require('./vivid-element.cjs');
7
+ const applyMixinsWithObservables = require('./applyMixinsWithObservables.cjs');
8
+ const listbox = require('./listbox.cjs');
9
+ const formAssociated = require('./form-associated.cjs');
10
+ const numbers = require('./numbers.cjs');
11
+ const strings = require('./strings.cjs');
12
+ const keyCodes = require('./key-codes.cjs');
13
+ const formElements = require('./form-elements.cjs');
14
+ const affix = require('./affix.cjs');
15
+ const option = require('./option.cjs');
16
+ const definition$1 = require('./definition11.cjs');
4
17
  const index = require('./index.cjs');
18
+ const ref = require('./ref.cjs');
5
19
  const when = require('./when.cjs');
20
+ const slotted = require('./slotted.cjs');
6
21
  const classNames = require('./class-names.cjs');
7
22
 
23
+ const styles = ".chevron{display:flex;flex-shrink:0;font:var(--vvd-typography-base-extended);transform:rotate(0);transition:transform .2s}:host([aria-expanded=true]) .chevron,:host([open]) .chevron{transform:rotate(180deg)}:host(:focus-visible){outline:none}:host{display:inline-flex;flex-direction:column;gap:4px;--_low-ink-color: var(--vvd-color-neutral-600);--focus-stroke-gap-color: transparent}:host([disabled]){--_low-ink-color: var(--vvd-color-neutral-400);cursor:not-allowed}.label{color:var(--vvd-color-canvas-text);contain:inline-size;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(--_connotation-color-intermediate)}.control.appearance-ghost{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.control:where(.hover,: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(--_connotation-color-fierce)}.control:where(.hover,: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:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-100);--_appearance-color-outline: var(--vvd-color-neutral-300)}.control:where(.disabled,:disabled).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.control:where(.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:where(.readonly):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-600);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.control:where(.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:where(.error):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: transparent}.control:where(.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:where(.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))}.control{border-radius:var(--_select-control-border-radius);block-size:var(--_select-block-size);padding-inline:var(--_select-padding-inline)}.control{--_select-icon-size: 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(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))*.4) ;display:flex;align-items:center;justify-content:space-between;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);gap:8px;transition:box-shadow .2s,background-color .2s}.control.size-condensed{--_select-icon-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))*.4) ;--_select-block-size: calc(1px*(32 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_select-padding-inline: calc(1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2))/2) }.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}:host(:focus-visible) .control{box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px))}.listbox{display:flex;max-height:var(--select-height, 408px);flex-direction:column;padding:4px;gap:2px;overflow-y:auto}:host([multiple]:focus-visible) .listbox{box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px));border-radius:8px}.selected-value{display:flex;overflow:hidden;flex-grow:1;align-items:center;column-gap:12px;white-space:nowrap}.selected-value .text{overflow:hidden;max-inline-size:100%;text-overflow:ellipsis}.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}";
24
+
25
+ class _Select extends listbox.Listbox {
26
+ }
27
+ class FormAssociatedSelect extends formAssociated.FormAssociated(_Select) {
28
+ constructor() {
29
+ super(...arguments);
30
+ this.proxy = document.createElement("select");
31
+ }
32
+ }
33
+
8
34
  var __defProp = Object.defineProperty;
35
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
36
  var __decorateClass = (decorators, target, key, kind) => {
10
- var result = void 0 ;
37
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
11
38
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
12
39
  if (decorator = decorators[i])
13
- result = (decorator(target, key, result) ) || result;
14
- if (result) __defProp(target, key, result);
40
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
41
+ if (kind && result) __defProp(target, key, result);
15
42
  return result;
16
43
  };
17
- class SideDrawer extends vividElement.VividElement {
44
+ exports.Select = class Select extends FormAssociatedSelect {
18
45
  constructor() {
19
46
  super(...arguments);
20
- this.alternate = false;
21
- this.modal = false;
47
+ this.activeIndex = -1;
48
+ /**
49
+ * The start index when checking a range of options.
50
+ *
51
+ * @internal
52
+ */
53
+ this.rangeStartIndex = -1;
22
54
  this.open = false;
23
- this.trailing = false;
55
+ /**
56
+ * The unique id for the internal listbox element.
57
+ *
58
+ * @internal
59
+ */
60
+ this.listboxId = strings.uniqueId("listbox-");
61
+ this.maxHeight = 0;
62
+ this.fixedDropdown = false;
63
+ this.placeholderOption = null;
64
+ this._feedbackWrapper = null;
65
+ }
66
+ /**
67
+ * Returns the last checked option.
68
+ *
69
+ * @internal
70
+ */
71
+ get activeOption() {
72
+ return this.options[this.activeIndex];
73
+ }
74
+ /**
75
+ * Returns the list of checked options.
76
+ *
77
+ * @internal
78
+ */
79
+ get checkedOptions() {
80
+ return this.options.filter((o) => o.checked);
81
+ }
82
+ /**
83
+ * Returns the index of the first selected option.
84
+ *
85
+ * @internal
86
+ */
87
+ get firstSelectedOptionIndex() {
88
+ return this.options.indexOf(this.firstSelectedOption);
89
+ }
90
+ /**
91
+ * Updates the `ariaActiveDescendant` property when the active index changes.
92
+ *
93
+ * @internal
94
+ */
95
+ activeIndexChanged(_, next) {
96
+ this._activeDescendant = this.options[next]?.id ?? "";
97
+ this.focusAndScrollOptionIntoView();
98
+ }
99
+ /**
100
+ * Toggles the checked state for the currently active option.
101
+ *
102
+ * @remarks
103
+ * Multiple-selection mode only.
104
+ *
105
+ * @internal
106
+ */
107
+ checkActiveIndex() {
108
+ const activeItem = this.activeOption;
109
+ if (activeItem) {
110
+ activeItem.checked = true;
111
+ }
24
112
  }
25
- attributeChangedCallback(name, oldValue, newValue) {
26
- super.attributeChangedCallback(name, oldValue, newValue);
27
- switch (name) {
28
- case "open": {
29
- this.open ? this.#open() : this.#close();
113
+ /**
114
+ * Sets the active index to the first option and marks it as checked.
115
+ *
116
+ * @remarks
117
+ * Multi-selection mode only.
118
+ *
119
+ * @param preserveChecked - mark all options unchecked before changing the active index
120
+ *
121
+ * @internal
122
+ */
123
+ checkFirstOption(preserveChecked) {
124
+ if (preserveChecked) {
125
+ if (this.rangeStartIndex === -1) {
126
+ this.rangeStartIndex = this.activeIndex + 1;
30
127
  }
128
+ this.options.forEach((o, i) => {
129
+ o.checked = numbers.inRange(i, this.rangeStartIndex);
130
+ });
131
+ } else {
132
+ this.uncheckAllOptions();
31
133
  }
134
+ this.activeIndex = 0;
135
+ this.checkActiveIndex();
32
136
  }
33
- #close() {
34
- this.$emit("close", void 0, { bubbles: false });
137
+ /**
138
+ * Decrements the active index and sets the matching option as checked.
139
+ *
140
+ * @remarks
141
+ * Multi-selection mode only.
142
+ *
143
+ * @param preserveChecked - mark all options unchecked before changing the active index
144
+ *
145
+ * @internal
146
+ */
147
+ checkLastOption(preserveChecked) {
148
+ if (preserveChecked) {
149
+ if (this.rangeStartIndex === -1) {
150
+ this.rangeStartIndex = this.activeIndex;
151
+ }
152
+ this.options.forEach((o, i) => {
153
+ o.checked = numbers.inRange(i, this.rangeStartIndex, this.length);
154
+ });
155
+ } else {
156
+ this.uncheckAllOptions();
157
+ }
158
+ this.activeIndex = this.length - 1;
159
+ this.checkActiveIndex();
35
160
  }
36
- #open() {
37
- this.$emit("open", void 0, { bubbles: false });
161
+ /**
162
+ * Increments the active index and marks the matching option as checked.
163
+ *
164
+ * @remarks
165
+ * Multiple-selection mode only.
166
+ *
167
+ * @param preserveChecked - mark all options unchecked before changing the active index
168
+ *
169
+ * @internal
170
+ */
171
+ checkNextOption(preserveChecked) {
172
+ if (preserveChecked) {
173
+ if (this.rangeStartIndex === -1) {
174
+ this.rangeStartIndex = this.activeIndex;
175
+ }
176
+ this.options.forEach((o, i) => {
177
+ o.checked = numbers.inRange(i, this.rangeStartIndex, this.activeIndex + 1);
178
+ });
179
+ } else {
180
+ this.uncheckAllOptions();
181
+ }
182
+ this.activeIndex += this.activeIndex < this.length - 1 ? 1 : 0;
183
+ this.checkActiveIndex();
38
184
  }
39
185
  /**
186
+ * Decrements the active index and marks the matching option as checked.
187
+ *
188
+ * @remarks
189
+ * Multiple-selection mode only.
190
+ *
191
+ * @param preserveChecked - mark all options unchecked before changing the active index
192
+ *
40
193
  * @internal
41
194
  */
42
- _onKeydown(event) {
43
- if (index.handleEscapeKeyAndStopPropogation(event)) {
44
- this._handleCloseRequest();
45
- return void 0;
195
+ checkPreviousOption(preserveChecked) {
196
+ if (preserveChecked) {
197
+ if (this.rangeStartIndex === -1) {
198
+ this.rangeStartIndex = this.activeIndex;
199
+ }
200
+ if (this.checkedOptions.length === 1) {
201
+ this.rangeStartIndex += 1;
202
+ }
203
+ this.options.forEach((o, i) => {
204
+ o.checked = numbers.inRange(i, this.activeIndex, this.rangeStartIndex);
205
+ });
46
206
  } else {
47
- return true;
207
+ this.uncheckAllOptions();
208
+ }
209
+ this.activeIndex -= this.activeIndex > 0 ? 1 : 0;
210
+ this.checkActiveIndex();
211
+ }
212
+ /**
213
+ * @internal
214
+ */
215
+ focusAndScrollOptionIntoView() {
216
+ super.focusAndScrollOptionIntoView(this.activeOption);
217
+ }
218
+ /**
219
+ * In multiple-selection mode:
220
+ * If any options are selected, the first selected option is checked when
221
+ * the listbox receives focus. If no options are selected, the first
222
+ * selectable option is checked.
223
+ *
224
+ * @internal
225
+ */
226
+ focusinHandler(e) {
227
+ if (!this.multiple) {
228
+ return super.focusinHandler(e);
229
+ }
230
+ if (!this.shouldSkipFocus && e.target === e.currentTarget) {
231
+ this.uncheckAllOptions();
232
+ if (this.activeIndex === -1) {
233
+ this.activeIndex = this.firstSelectedOptionIndex !== -1 ? this.firstSelectedOptionIndex : 0;
234
+ }
235
+ this.checkActiveIndex();
236
+ this.setSelectedOptions();
237
+ this.focusAndScrollOptionIntoView();
238
+ }
239
+ this.shouldSkipFocus = false;
240
+ }
241
+ /**
242
+ * Sets an option as selected and gives it focus.
243
+ *
244
+ * @public
245
+ */
246
+ setSelectedOptions() {
247
+ if (!this.multiple) {
248
+ super.setSelectedOptions();
249
+ return;
250
+ }
251
+ if (this.$fastController.isConnected && this.options) {
252
+ this.selectedOptions = this.options.filter((o) => o.selected);
253
+ this.focusAndScrollOptionIntoView();
254
+ }
255
+ }
256
+ /**
257
+ * Toggles the selected state of the provided options. If any provided items
258
+ * are in an unselected state, all items are set to selected. If every
259
+ * provided item is selected, they are all unselected.
260
+ *
261
+ * @internal
262
+ */
263
+ toggleSelectedForAllCheckedOptions() {
264
+ const enabledCheckedOptions = this.checkedOptions.filter(
265
+ (o) => !o.disabled
266
+ );
267
+ const force = !enabledCheckedOptions.every((o) => o.selected);
268
+ enabledCheckedOptions.forEach((o) => o.selected = force);
269
+ this.selectedIndex = this.options.indexOf(
270
+ enabledCheckedOptions[enabledCheckedOptions.length - 1]
271
+ );
272
+ this.setSelectedOptions();
273
+ this.updateValue(true);
274
+ }
275
+ /**
276
+ * @internal
277
+ */
278
+ typeaheadBufferChanged(prev, next) {
279
+ if (!this.multiple) {
280
+ super.typeaheadBufferChanged(prev, next);
281
+ return;
282
+ }
283
+ if (this.$fastController.isConnected) {
284
+ const typeaheadMatches = this.getTypeaheadMatches();
285
+ const activeIndex = this.options.indexOf(typeaheadMatches[0]);
286
+ if (activeIndex > -1) {
287
+ this.activeIndex = activeIndex;
288
+ this.uncheckAllOptions();
289
+ this.checkActiveIndex();
290
+ }
291
+ this.typeaheadExpired = false;
292
+ }
293
+ }
294
+ /**
295
+ * Unchecks all options.
296
+ *
297
+ * @remarks
298
+ * Multiple-selection mode only.
299
+ *
300
+ * @param preserveChecked - reset the rangeStartIndex
301
+ *
302
+ * @internal
303
+ */
304
+ uncheckAllOptions(preserveChecked = false) {
305
+ this.options.forEach((o) => o.checked = false);
306
+ if (!preserveChecked) {
307
+ this.rangeStartIndex = -1;
308
+ }
309
+ }
310
+ /**
311
+ * Sets focus when the open property changes.
312
+ *
313
+ * @internal
314
+ */
315
+ openChanged(prev, next) {
316
+ if (!this.collapsible) {
317
+ return;
318
+ }
319
+ if (this.open) {
320
+ this.focusAndScrollOptionIntoView();
321
+ this.indexWhenOpened = this.selectedIndex;
322
+ vividElement.DOM.queueUpdate(() => this.focus());
323
+ return;
324
+ }
325
+ const didClose = prev === true && next === false;
326
+ const selectionChangedWhileOpen = this.indexWhenOpened !== this.selectedIndex;
327
+ if (didClose && selectionChangedWhileOpen) {
328
+ this.updateValue(true);
329
+ }
330
+ }
331
+ get collapsible() {
332
+ return !this.multiple;
333
+ }
334
+ /**
335
+ * The value property.
336
+ *
337
+ * @public
338
+ */
339
+ get value() {
340
+ vividElement.Observable.track(this, "value");
341
+ return this._value;
342
+ }
343
+ set value(next) {
344
+ const prev = `${this._value}`;
345
+ if (this.length) {
346
+ const selectedIndex = this._options.findIndex((el) => el.value === next);
347
+ const prevSelectedValue = this._options[this.selectedIndex]?.value ?? null;
348
+ const nextSelectedValue = this._options[selectedIndex]?.value ?? null;
349
+ if (selectedIndex === -1 || prevSelectedValue !== nextSelectedValue) {
350
+ next = "";
351
+ this.selectedIndex = selectedIndex;
352
+ }
353
+ next = this.firstSelectedOption?.value ?? next;
354
+ }
355
+ if (prev !== next) {
356
+ this._value = next;
357
+ super.valueChanged(prev, next);
358
+ vividElement.Observable.notify(this, "value");
359
+ this.updateDisplayValue();
48
360
  }
49
361
  }
50
362
  /**
363
+ * Sets the value and display value to match the first selected option.
364
+ *
365
+ * @param shouldEmit - if true, the input and change events will be emitted
366
+ *
51
367
  * @internal
52
368
  */
53
- _handleCloseRequest() {
54
- if (this.$emit("cancel", void 0, {
55
- bubbles: false,
56
- cancelable: true
57
- })) {
369
+ updateValue(shouldEmit) {
370
+ if (this.$fastController.isConnected) {
371
+ this.value = this.firstSelectedOption?.value ?? "";
372
+ }
373
+ if (shouldEmit) {
374
+ this.$emit("input");
375
+ this.$emit("change", this, {
376
+ bubbles: true,
377
+ composed: void 0
378
+ });
379
+ }
380
+ }
381
+ /**
382
+ * Updates the proxy value when the selected index changes.
383
+ *
384
+ * @param prev - the previous selected index
385
+ * @param next - the next selected index
386
+ *
387
+ * @internal
388
+ */
389
+ selectedIndexChanged(prev, next) {
390
+ super.selectedIndexChanged(prev, next);
391
+ this.updateValue();
392
+ }
393
+ /**
394
+ * Handle opening and closing the listbox when the select is clicked.
395
+ *
396
+ * @param e - the mouse event
397
+ * @internal
398
+ */
399
+ clickHandler(e) {
400
+ if (this.disabled) {
401
+ return;
402
+ }
403
+ const clickedOption = e.target.closest(
404
+ `option,[role=option]`
405
+ );
406
+ if (clickedOption && clickedOption.disabled) {
407
+ return;
408
+ }
409
+ if (this.multiple) {
410
+ this.uncheckAllOptions();
411
+ this.activeIndex = this.options.indexOf(clickedOption);
412
+ this.checkActiveIndex();
413
+ this.toggleSelectedForAllCheckedOptions();
414
+ } else {
415
+ super.clickHandler(e);
416
+ }
417
+ if (this.collapsible) {
418
+ this.open = !this.open;
419
+ }
420
+ return true;
421
+ }
422
+ /**
423
+ * Handles focus state when the element or its children lose focus.
424
+ *
425
+ * @param e - The focus event
426
+ * @internal
427
+ */
428
+ focusoutHandler(e) {
429
+ if (this.multiple) {
430
+ this.uncheckAllOptions();
431
+ }
432
+ if (!this.open) {
433
+ return true;
434
+ }
435
+ const focusTarget = e.relatedTarget;
436
+ if (this.isSameNode(focusTarget)) {
437
+ this.focus();
438
+ return;
439
+ }
440
+ if (!this.options.includes(focusTarget)) {
58
441
  this.open = false;
442
+ if (this.indexWhenOpened !== this.selectedIndex) {
443
+ this.updateValue(true);
444
+ }
59
445
  }
60
446
  }
61
- }
447
+ /**
448
+ * Updates the value when an option's value changes.
449
+ *
450
+ * @param source - the source object
451
+ * @param propertyName - the property to evaluate
452
+ *
453
+ * @internal
454
+ */
455
+ handleChange(source, propertyName) {
456
+ super.handleChange(source, propertyName);
457
+ if (propertyName === "value") {
458
+ this.updateValue();
459
+ }
460
+ }
461
+ /**
462
+ * Prevents focus when a scrollbar is clicked.
463
+ *
464
+ * @param e - the mouse event object
465
+ *
466
+ * @internal
467
+ */
468
+ mousedownHandler(e) {
469
+ if (e.offsetX >= 0 && e.offsetX <= this.listbox.scrollWidth) {
470
+ return super.mousedownHandler(e);
471
+ }
472
+ return this.collapsible;
473
+ }
474
+ /**
475
+ * @internal
476
+ */
477
+ multipleChanged(_, next) {
478
+ this.options.forEach((o) => {
479
+ o.checked = next ? false : void 0;
480
+ });
481
+ this.setSelectedOptions();
482
+ if (this.proxy) {
483
+ this.proxy.multiple = next;
484
+ }
485
+ }
486
+ /**
487
+ * Updates the selectedness of each option when the list of selected options changes.
488
+ *
489
+ * @param prev - the previous list of selected options
490
+ * @param next - the current list of selected options
491
+ *
492
+ * @internal
493
+ */
494
+ selectedOptionsChanged(prev, next) {
495
+ super.selectedOptionsChanged(prev, next);
496
+ this.options.forEach((o, i) => {
497
+ const proxyOption = this.proxy.options.item(i);
498
+ if (proxyOption) {
499
+ proxyOption.selected = o.selected;
500
+ }
501
+ });
502
+ }
503
+ /**
504
+ * Resets and fills the proxy to match the component's options.
505
+ *
506
+ * @internal
507
+ */
508
+ setProxyOptions() {
509
+ if (this.proxy instanceof HTMLSelectElement && this.options) {
510
+ this.proxy.length = 0;
511
+ this.options.forEach((option) => {
512
+ const proxyOption = option.proxy || (option instanceof HTMLOptionElement ? option.cloneNode() : null);
513
+ if (proxyOption) {
514
+ this.proxy.options.add(proxyOption);
515
+ }
516
+ });
517
+ }
518
+ }
519
+ /**
520
+ * Handles keydown actions when the select is in multiple selection mode.
521
+ *
522
+ * @internal
523
+ */
524
+ multipleKeydownHandler(e) {
525
+ if (this.disabled) {
526
+ return;
527
+ }
528
+ const { key, shiftKey } = e;
529
+ this.shouldSkipFocus = false;
530
+ switch (key) {
531
+ case keyCodes.keyHome: {
532
+ this.checkFirstOption(shiftKey);
533
+ return;
534
+ }
535
+ case keyCodes.keyArrowDown: {
536
+ this.checkNextOption(shiftKey);
537
+ return;
538
+ }
539
+ case keyCodes.keyArrowUp: {
540
+ this.checkPreviousOption(shiftKey);
541
+ return;
542
+ }
543
+ case keyCodes.keyEnd: {
544
+ this.checkLastOption(shiftKey);
545
+ return;
546
+ }
547
+ case keyCodes.keyTab: {
548
+ this.focusAndScrollOptionIntoView();
549
+ return;
550
+ }
551
+ case keyCodes.keyEscape: {
552
+ this.uncheckAllOptions();
553
+ this.checkActiveIndex();
554
+ return;
555
+ }
556
+ case keyCodes.keySpace: {
557
+ e.preventDefault();
558
+ if (this.typeaheadExpired) {
559
+ this.toggleSelectedForAllCheckedOptions();
560
+ return;
561
+ }
562
+ }
563
+ default: {
564
+ if (key.length === 1) {
565
+ this.handleTypeAhead(`${key}`);
566
+ }
567
+ return;
568
+ }
569
+ }
570
+ }
571
+ /**
572
+ * Handle keyboard interaction for the select.
573
+ *
574
+ * @param e - the keyboard event
575
+ * @internal
576
+ */
577
+ keydownHandler(e) {
578
+ const selectedIndexBefore = this.selectedIndex;
579
+ if (this.multiple) {
580
+ this.multipleKeydownHandler(e);
581
+ } else {
582
+ super.keydownHandler(e);
583
+ }
584
+ const key = e.key;
585
+ switch (key) {
586
+ case keyCodes.keySpace: {
587
+ e.preventDefault();
588
+ if (this.collapsible && this.typeaheadExpired) {
589
+ this.open = !this.open;
590
+ }
591
+ break;
592
+ }
593
+ case keyCodes.keyHome:
594
+ case keyCodes.keyEnd: {
595
+ e.preventDefault();
596
+ break;
597
+ }
598
+ case keyCodes.keyEnter: {
599
+ e.preventDefault();
600
+ this.open = !this.open;
601
+ break;
602
+ }
603
+ case keyCodes.keyEscape: {
604
+ if (this.collapsible && this.open) {
605
+ e.preventDefault();
606
+ this.open = false;
607
+ }
608
+ break;
609
+ }
610
+ case keyCodes.keyTab: {
611
+ if (this.collapsible && this.open) {
612
+ e.preventDefault();
613
+ this.open = false;
614
+ }
615
+ return true;
616
+ }
617
+ }
618
+ if (this.collapsible && !this.open && this.selectedIndex !== selectedIndexBefore) {
619
+ this.updateValue(true);
620
+ }
621
+ return !(e.key === keyCodes.keyArrowDown || e.key === keyCodes.keyArrowUp);
622
+ }
623
+ connectedCallback() {
624
+ super.connectedCallback();
625
+ this.addEventListener("focusout", this.focusoutHandler);
626
+ this.addEventListener("contentchange", this.updateDisplayValue);
627
+ }
628
+ disconnectedCallback() {
629
+ this.removeEventListener("focusout", this.focusoutHandler);
630
+ this.removeEventListener("contentchange", this.updateDisplayValue);
631
+ super.disconnectedCallback();
632
+ }
633
+ /**
634
+ *
635
+ * @internal
636
+ */
637
+ updateDisplayValue() {
638
+ if (this.collapsible) {
639
+ vividElement.Observable.notify(this, "displayValue");
640
+ }
641
+ }
642
+ labelChanged() {
643
+ if (!this.ariaLabel) {
644
+ this.ariaLabel = this.label;
645
+ }
646
+ }
647
+ get displayValue() {
648
+ vividElement.Observable.track(this, "displayValue");
649
+ return this.firstSelectedOption?.getAttribute("label") ?? this.firstSelectedOption?.text ?? this.placeholder ?? "";
650
+ }
651
+ setDefaultSelectedOption() {
652
+ const options = Array.from(this.children).filter(
653
+ listbox.Listbox.slottedOptionFilter
654
+ );
655
+ const selectedIndex = options.findIndex(
656
+ (el) => el.hasAttribute("selected") || el.selected || el.value === this.value
657
+ );
658
+ if (selectedIndex === -1 && !this.placeholderOption) {
659
+ this.selectedIndex = 0;
660
+ return;
661
+ }
662
+ if (selectedIndex !== -1 || this.placeholder !== "") {
663
+ this.selectedIndex = selectedIndex;
664
+ return;
665
+ }
666
+ }
667
+ /*
668
+ * @internal
669
+ */
670
+ slottedOptionsChanged(prev, next) {
671
+ this.options.forEach((o) => {
672
+ const notifier = vividElement.Observable.getNotifier(o);
673
+ notifier.unsubscribe(this, "value");
674
+ });
675
+ super.slottedOptionsChanged(prev, next);
676
+ this.options.forEach((o) => {
677
+ const notifier = vividElement.Observable.getNotifier(o);
678
+ notifier.subscribe(this, "value");
679
+ });
680
+ this.setProxyOptions();
681
+ this.updateValue();
682
+ const scale = this.getAttribute("scale") || this.scale;
683
+ next.forEach((element) => {
684
+ if (scale) {
685
+ element.setAttribute("scale", scale);
686
+ element.scale = scale;
687
+ }
688
+ });
689
+ this.proxy.value = this.value;
690
+ this.validate();
691
+ }
692
+ formResetCallback() {
693
+ this.setProxyOptions();
694
+ super.setDefaultSelectedOption();
695
+ if (this.selectedIndex === -1) {
696
+ this.selectedIndex = 0;
697
+ }
698
+ if (this.placeholder) {
699
+ this.selectedIndex = -1;
700
+ }
701
+ }
702
+ };
62
703
  __decorateClass([
63
- vividElement.attr({
64
- mode: "boolean"
65
- })
66
- ], SideDrawer.prototype, "alternate");
704
+ vividElement.observable
705
+ ], exports.Select.prototype, "activeIndex", 2);
706
+ // @ts-expect-error Type is incorrectly non-optional
67
707
  __decorateClass([
68
- vividElement.attr({
69
- mode: "boolean"
70
- })
71
- ], SideDrawer.prototype, "modal");
708
+ vividElement.attr({ mode: "boolean" })
709
+ ], exports.Select.prototype, "multiple", 2);
72
710
  __decorateClass([
73
- vividElement.attr({
74
- mode: "boolean"
75
- })
76
- ], SideDrawer.prototype, "open");
711
+ vividElement.attr({ attribute: "open", mode: "boolean" })
712
+ ], exports.Select.prototype, "open", 2);
77
713
  __decorateClass([
78
- vividElement.attr({
79
- mode: "boolean"
80
- })
81
- ], SideDrawer.prototype, "trailing");
82
-
83
- const styles = ":host{display:block}.side-drawer-app-content{block-size:100%}.control{--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}.control{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.control ::-webkit-scrollbar{width:4px}.control ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.control ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-thumb-color)}.control{position:fixed;z-index:1;background-color:var(--vvd-color-canvas);color:var(--vvd-color-canvas-text);inline-size:280px;inset-block:0;overflow-y:auto}.control[part~=vvd-theme-alternate]{background-color:var(--vvd-color-canvas);color:var(--vvd-color-canvas-text);color-scheme:var(--vvd-color-scheme)}.control.trailing{inset-inline-end:0}.control:not(.open).trailing{transform:translate(100%)}.control:not(.open):not(.trailing){transform:translate(-100%)}.control.open:not(.modal).trailing+.side-drawer-app-content{margin-inline-end:var(--side-drawer-app-content-offset, 280px)}.control.open:not(.modal):not(.trailing)+.side-drawer-app-content{margin-inline-start:var(--side-drawer-app-content-offset, 280px)}@media (prefers-reduced-motion: no-preference){.control{transition:transform .2s cubic-bezier(.4,0,.2,1)}}.scrim{background-color:var(--vvd-color-canvas-text, currentColor);opacity:.5;position:fixed;inset:0}.scrim:not(.open){display:none}";
714
+ vividElement.volatile
715
+ ], exports.Select.prototype, "collapsible", 1);
716
+ __decorateClass([
717
+ vividElement.observable
718
+ ], exports.Select.prototype, "control", 2);
719
+ __decorateClass([
720
+ vividElement.observable
721
+ ], exports.Select.prototype, "maxHeight", 2);
722
+ __decorateClass([
723
+ vividElement.observable
724
+ ], exports.Select.prototype, "_anchor", 2);
725
+ __decorateClass([
726
+ vividElement.attr()
727
+ ], exports.Select.prototype, "scale", 2);
728
+ __decorateClass([
729
+ vividElement.attr
730
+ ], exports.Select.prototype, "appearance", 2);
731
+ __decorateClass([
732
+ vividElement.attr
733
+ ], exports.Select.prototype, "shape", 2);
734
+ __decorateClass([
735
+ vividElement.attr({ mode: "boolean", attribute: "fixed-dropdown" })
736
+ ], exports.Select.prototype, "fixedDropdown", 2);
737
+ __decorateClass([
738
+ vividElement.attr
739
+ ], exports.Select.prototype, "placeholder", 2);
740
+ __decorateClass([
741
+ vividElement.observable
742
+ ], exports.Select.prototype, "placeholderOption", 2);
743
+ __decorateClass([
744
+ vividElement.observable
745
+ ], exports.Select.prototype, "_feedbackWrapper", 2);
746
+ __decorateClass([
747
+ vividElement.observable
748
+ ], exports.Select.prototype, "metaSlottedContent", 2);
749
+ exports.Select = __decorateClass([
750
+ formElements.errorText,
751
+ formElements.formElements
752
+ ], exports.Select);
753
+ applyMixinsWithObservables.applyMixinsWithObservables(
754
+ exports.Select,
755
+ affix.AffixIconWithTrailing,
756
+ formElements.FormElementHelperText,
757
+ formElements.FormElementSuccessText
758
+ );
84
759
 
85
- const getClasses = ({ modal, open, trailing }) => classNames.classNames(
86
- "control",
87
- ["modal", modal],
88
- ["open", open],
89
- ["trailing", trailing]
760
+ const getStateClasses = ({
761
+ shape,
762
+ disabled,
763
+ appearance,
764
+ metaSlottedContent,
765
+ errorValidationMessage,
766
+ successText,
767
+ placeholder,
768
+ value,
769
+ scale
770
+ }) => classNames.classNames(
771
+ ["disabled", disabled],
772
+ [`appearance-${appearance}`, Boolean(appearance)],
773
+ [`shape-${shape}`, Boolean(shape)],
774
+ ["has-meta", Boolean(metaSlottedContent?.length)],
775
+ ["error", Boolean(errorValidationMessage)],
776
+ ["success", !!successText],
777
+ ["shows-placeholder", Boolean(placeholder) && !value],
778
+ [`size-${scale}`, Boolean(scale)]
90
779
  );
91
- const getScrimClasses = ({ open }) => classNames.classNames("scrim", ["open", open]);
92
- const sideDrawerTemplate = vividElement.html`
93
- <div
94
- class="${getClasses}"
95
- ?inert="${(x) => !x.open}"
96
- part="base ${(x) => x.alternate ? "vvd-theme-alternate" : ""}"
97
- @keydown="${(x, c) => x._onKeydown(c.event)}"
780
+ function renderLabel() {
781
+ return vividElement.html` <label for="control" class="label" id="label">
782
+ ${(x) => x.label}
783
+ </label>`;
784
+ }
785
+ function renderPlaceholder(context) {
786
+ const optionTag = context.tagFor(option.ListboxOption);
787
+ return vividElement.html`
788
+ <${optionTag} ${ref.ref("placeholderOption")}
789
+ text="${(x) => x.placeholder}" hidden disabled>
790
+ </${optionTag}>`;
791
+ }
792
+ function selectValue(context) {
793
+ const affixIconTemplate = affix.affixIconTemplateFactory(context);
794
+ const chevronTemplate = definition$1.chevronTemplateFactory(context);
795
+ return vividElement.html` <div
796
+ class="control ${getStateClasses}"
797
+ ${ref.ref("_anchor")}
798
+ id="control"
799
+ ?disabled="${(x) => x.disabled}"
98
800
  >
99
- <slot></slot>
100
- </div>
101
-
102
- <div class="side-drawer-app-content" ?inert="${(x) => x.open && x.modal}">
103
- <slot name="app-content"></slot>
104
- </div>
105
-
106
- ${when.when(
107
- (x) => x.modal,
108
- vividElement.html`<div
109
- class="${getScrimClasses}"
110
- @click="${(x) => x._handleCloseRequest()}"
111
- ></div>`
112
- )}
113
- `;
801
+ <div class="selected-value">
802
+ ${(x) => affixIconTemplate(x.icon, affix.IconWrapper.Slot)}
803
+ <span class="text">${(x) => x.displayValue}</span>
804
+ <slot name="meta" ${slotted.slotted("metaSlottedContent")}></slot>
805
+ </div>
806
+ ${chevronTemplate}
807
+ </div>`;
808
+ }
809
+ function setFixedDropdownVarWidth(x) {
810
+ return x.open && x.fixedDropdown ? `--_select-fixed-width: ${Math.round(x.getBoundingClientRect().width)}px` : null;
811
+ }
812
+ function renderControl(context) {
813
+ const popupTag = context.tagFor(definition.Popup);
814
+ return vividElement.html`
815
+ ${when.when((x) => x.label, renderLabel())}
816
+ <div class="control-wrapper">
817
+ ${when.when((x) => !x.multiple, selectValue(context))}
818
+ <${popupTag} class="popup"
819
+ style="${setFixedDropdownVarWidth}"
820
+ ?open="${(x) => x.collapsible ? x.open : true}"
821
+ :anchor="${(x) => x._anchor}"
822
+ placement="bottom-start"
823
+ strategy="${(x) => x.fixedDropdown ? null : "absolute"}">
824
+ <div class="listbox"
825
+ id="${(x) => x.listboxId}"
826
+ role="listbox"
827
+ aria-multiselectable="${(x) => x.multiple}"
828
+ ?disabled="${(x) => x.disabled}"
829
+ ?hidden="${(x) => x.collapsible ? !x.open : false}"
830
+ ${ref.ref("listbox")}>
831
+ ${when.when((x) => x.placeholder, renderPlaceholder(context))}
832
+ <slot
833
+ ${slotted.slotted({
834
+ filter: listbox.Listbox.slottedOptionFilter,
835
+ flatten: true,
836
+ property: "slottedOptions"
837
+ })}>
838
+ </slot>
839
+ </div>
840
+ </${popupTag}>
841
+ </div>
842
+ `;
843
+ }
844
+ function ifNotFromFeedback(handler) {
845
+ return (x, c) => {
846
+ if (!c.event.composedPath().includes(x._feedbackWrapper)) {
847
+ return handler(x, c.event);
848
+ }
849
+ return true;
850
+ };
851
+ }
852
+ const SelectTemplate = (context) => {
853
+ return vividElement.html`
854
+ <template
855
+ class="base"
856
+ role="combobox"
857
+ aria-haspopup="${(x) => x.collapsible ? "listbox" : "false"}"
858
+ aria-controls="${(x) => x.listboxId}"
859
+ aria-expanded="${(x) => x.open}"
860
+ aria-disabled="${(x) => x.disabled}"
861
+ aria-activedescendant="${(x) => x._activeDescendant}"
862
+ tabindex="${(x) => !x.disabled ? "0" : null}"
863
+ @click="${ifNotFromFeedback((x, e) => x.clickHandler(e))}"
864
+ @focusin="${ifNotFromFeedback((x, e) => x.focusinHandler(e))}"
865
+ @focusout="${ifNotFromFeedback(
866
+ (x, e) => x.focusoutHandler(e)
867
+ )}"
868
+ @keydown="${ifNotFromFeedback((x, e) => {
869
+ x.open && index.handleEscapeKeyAndStopPropogation(e);
870
+ return x.keydownHandler(e);
871
+ })}"
872
+ @mousedown="${ifNotFromFeedback(
873
+ (x, e) => x.mousedownHandler(e)
874
+ )}"
875
+ >
876
+ ${renderControl(context)}
877
+ <div class="feedback-wrapper" ${ref.ref("_feedbackWrapper")}>
878
+ ${formElements.getFeedbackTemplate(context)}
879
+ </div>
880
+ </template>
881
+ `;
882
+ };
114
883
 
115
- const sideDrawerDefinition = vividElement.defineVividComponent(
116
- "side-drawer",
117
- SideDrawer,
118
- sideDrawerTemplate,
119
- [],
884
+ const selectDefinition = vividElement.defineVividComponent(
885
+ "select",
886
+ exports.Select,
887
+ SelectTemplate,
888
+ [definition.popupDefinition, definition$2.iconDefinition, definition$3.listboxOptionDefinition],
120
889
  {
121
890
  styles
122
891
  }
123
892
  );
124
- const registerSideDrawer = vividElement.createRegisterFunction(sideDrawerDefinition);
893
+ const registerSelect = vividElement.createRegisterFunction(selectDefinition);
125
894
 
126
- exports.registerSideDrawer = registerSideDrawer;
127
- exports.sideDrawerDefinition = sideDrawerDefinition;
895
+ exports.registerSelect = registerSelect;
896
+ exports.selectDefinition = selectDefinition;