@vonage/vivid 5.18.0 → 5.20.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 (776) hide show
  1. package/accordion/definition.cjs +1 -2
  2. package/accordion/definition.js +1 -2
  3. package/accordion/index.cjs +2 -2
  4. package/accordion/index.js +3 -4
  5. package/accordion-item/definition.cjs +1 -2
  6. package/accordion-item/definition.js +1 -2
  7. package/accordion-item/index.cjs +1 -1
  8. package/accordion-item/index.js +0 -2
  9. package/action-group/definition.cjs +1 -1
  10. package/action-group/definition.js +1 -1
  11. package/action-group/index.cjs +4 -4
  12. package/action-group/index.js +7 -7
  13. package/alert/definition.cjs +0 -1
  14. package/alert/definition.js +0 -1
  15. package/alert/index.cjs +5 -5
  16. package/alert/index.js +20 -21
  17. package/audio-player/definition.cjs +0 -1
  18. package/audio-player/definition.js +0 -1
  19. package/audio-player/index.cjs +13 -13
  20. package/audio-player/index.js +75 -76
  21. package/avatar/definition.cjs +0 -1
  22. package/avatar/definition.js +0 -1
  23. package/avatar/index.cjs +8 -8
  24. package/avatar/index.js +21 -22
  25. package/badge/definition.cjs +0 -1
  26. package/badge/definition.js +0 -1
  27. package/badge/index.cjs +1 -1
  28. package/badge/index.js +0 -2
  29. package/banner/definition.cjs +0 -1
  30. package/banner/definition.js +0 -1
  31. package/banner/index.cjs +6 -6
  32. package/banner/index.js +20 -21
  33. package/breadcrumb/index.cjs +2 -2
  34. package/breadcrumb/index.js +4 -4
  35. package/breadcrumb-item/definition.cjs +0 -1
  36. package/breadcrumb-item/definition.js +0 -1
  37. package/breadcrumb-item/index.cjs +5 -5
  38. package/breadcrumb-item/index.js +7 -8
  39. package/bundled/affix.cjs +2 -2
  40. package/bundled/affix.js +11 -11
  41. package/bundled/anchored.cjs +1 -1
  42. package/bundled/anchored.js +6 -6
  43. package/bundled/aria-binding-directive.cjs +1 -0
  44. package/bundled/aria-binding-directive.js +101 -0
  45. package/bundled/base-color-picker.cjs +3 -3
  46. package/bundled/base-color-picker.js +5 -5
  47. package/bundled/base-progress.cjs +1 -1
  48. package/bundled/base-progress.js +3 -3
  49. package/bundled/breadcrumb-item.cjs +1 -1
  50. package/bundled/breadcrumb-item.js +1 -1
  51. package/bundled/button.cjs +1 -1
  52. package/bundled/button.js +1 -1
  53. package/bundled/calendar-event.cjs +1 -1
  54. package/bundled/calendar-event.js +5 -5
  55. package/bundled/calendar-picker.template.cjs +23 -24
  56. package/bundled/calendar-picker.template.js +29 -30
  57. package/bundled/char-count.cjs +2 -2
  58. package/bundled/char-count.js +10 -10
  59. package/bundled/children.cjs +1 -1
  60. package/bundled/children.js +7 -9
  61. package/bundled/decorate.js +1 -1
  62. package/bundled/definition.cjs +1 -1
  63. package/bundled/definition.js +2 -2
  64. package/bundled/definition10.cjs +3 -3
  65. package/bundled/definition10.js +19 -19
  66. package/bundled/definition11.cjs +2 -2
  67. package/bundled/definition11.js +8 -8
  68. package/bundled/definition12.cjs +15 -16
  69. package/bundled/definition12.js +28 -28
  70. package/bundled/definition13.cjs +3 -3
  71. package/bundled/definition13.js +6 -6
  72. package/bundled/definition14.cjs +2 -2
  73. package/bundled/definition14.js +3 -3
  74. package/bundled/definition15.cjs +7 -8
  75. package/bundled/definition15.js +18 -18
  76. package/bundled/definition16.cjs +3 -3
  77. package/bundled/definition16.js +22 -22
  78. package/bundled/definition17.cjs +7 -7
  79. package/bundled/definition17.js +12 -12
  80. package/bundled/definition18.cjs +18 -18
  81. package/bundled/definition18.js +33 -33
  82. package/bundled/definition19.cjs +2 -2
  83. package/bundled/definition19.js +3 -3
  84. package/bundled/definition2.cjs +10 -9
  85. package/bundled/definition2.js +27 -27
  86. package/bundled/definition20.cjs +19 -14
  87. package/bundled/definition20.js +53 -42
  88. package/bundled/definition21.cjs +9 -9
  89. package/bundled/definition21.js +31 -31
  90. package/bundled/definition22.cjs +3 -3
  91. package/bundled/definition22.js +8 -8
  92. package/bundled/definition23.cjs +4 -4
  93. package/bundled/definition23.js +9 -9
  94. package/bundled/definition24.cjs +8 -8
  95. package/bundled/definition24.js +23 -23
  96. package/bundled/definition3.cjs +1 -1
  97. package/bundled/definition3.js +33 -33
  98. package/bundled/definition4.cjs +9 -9
  99. package/bundled/definition4.js +20 -20
  100. package/bundled/definition5.cjs +5 -5
  101. package/bundled/definition5.js +9 -9
  102. package/bundled/definition6.cjs +7 -7
  103. package/bundled/definition6.js +27 -27
  104. package/bundled/definition7.cjs +2 -2
  105. package/bundled/definition7.js +4 -4
  106. package/bundled/definition8.cjs +4 -4
  107. package/bundled/definition8.js +15 -15
  108. package/bundled/definition9.cjs +10 -6
  109. package/bundled/definition9.js +54 -40
  110. package/bundled/delegates-aria.cjs +1 -1
  111. package/bundled/delegates-aria.js +23 -51
  112. package/bundled/divider.cjs +1 -1
  113. package/bundled/divider.js +1 -1
  114. package/bundled/form-associated.cjs +1 -1
  115. package/bundled/form-associated.js +1 -1
  116. package/bundled/form-element.cjs +1 -1
  117. package/bundled/form-element.js +8 -6
  118. package/bundled/host-semantics.cjs +1 -1
  119. package/bundled/host-semantics.js +11 -39
  120. package/bundled/kbd-shortcut.cjs +1 -0
  121. package/bundled/kbd-shortcut.js +14 -0
  122. package/bundled/linkable.cjs +2 -2
  123. package/bundled/linkable.js +5 -5
  124. package/bundled/listbox.cjs +1 -1
  125. package/bundled/listbox.js +13 -13
  126. package/bundled/localized.cjs +1 -1
  127. package/bundled/localized.js +7 -6
  128. package/bundled/mixins.cjs +16 -16
  129. package/bundled/mixins.js +39 -105
  130. package/bundled/picker-field.template.cjs +6 -6
  131. package/bundled/picker-field.template.js +33 -32
  132. package/bundled/platform.cjs +1 -0
  133. package/bundled/platform.js +9 -0
  134. package/bundled/ref.cjs +1 -1
  135. package/bundled/ref.js +2 -2
  136. package/bundled/render-in-light-dom.cjs +1 -0
  137. package/bundled/render-in-light-dom.js +57 -0
  138. package/bundled/repeat.cjs +1 -1
  139. package/bundled/repeat.js +129 -119
  140. package/bundled/slider.template.cjs +7 -7
  141. package/bundled/slider.template.js +13 -13
  142. package/bundled/slottable-request.cjs +1 -1
  143. package/bundled/slottable-request.js +1 -1
  144. package/bundled/slotted.cjs +1 -1
  145. package/bundled/slotted.js +2 -2
  146. package/bundled/text-field.cjs +1 -1
  147. package/bundled/text-field.js +1 -1
  148. package/bundled/time-selection-picker.template.cjs +4 -4
  149. package/bundled/time-selection-picker.template.js +23 -23
  150. package/bundled/vivid-element.cjs +3 -3
  151. package/bundled/vivid-element.js +634 -556
  152. package/bundled/when.cjs +1 -1
  153. package/bundled/when.js +2 -2
  154. package/bundled/with-contextual-help.cjs +1 -1
  155. package/bundled/with-contextual-help.js +1 -1
  156. package/bundled/with-error-text.cjs +1 -1
  157. package/bundled/with-error-text.js +1 -1
  158. package/bundled/with-success-text.cjs +1 -1
  159. package/bundled/with-success-text.js +1 -1
  160. package/button/definition.cjs +0 -1
  161. package/button/definition.js +0 -1
  162. package/button/index.cjs +1 -1
  163. package/button/index.js +0 -2
  164. package/calendar/index.cjs +8 -8
  165. package/calendar/index.js +9 -9
  166. package/calendar-event/index.cjs +6 -6
  167. package/calendar-event/index.js +8 -8
  168. package/card/definition.cjs +0 -1
  169. package/card/definition.js +0 -1
  170. package/card/index.cjs +24 -25
  171. package/card/index.js +42 -44
  172. package/checkbox/definition.cjs +0 -1
  173. package/checkbox/definition.js +0 -1
  174. package/checkbox/index.cjs +1 -1
  175. package/checkbox/index.js +0 -2
  176. package/color-picker/definition.cjs +0 -1
  177. package/color-picker/definition.js +0 -1
  178. package/color-picker/index.cjs +29 -29
  179. package/color-picker/index.js +114 -114
  180. package/combobox/definition.cjs +0 -1
  181. package/combobox/definition.js +0 -1
  182. package/combobox/index.cjs +13 -13
  183. package/combobox/index.js +31 -32
  184. package/contextual-help/definition.cjs +0 -1
  185. package/contextual-help/definition.js +0 -1
  186. package/contextual-help/index.cjs +1 -1
  187. package/contextual-help/index.js +0 -2
  188. package/country/definition.cjs +0 -1
  189. package/country/definition.js +0 -1
  190. package/country/index.cjs +1 -1
  191. package/country/index.js +0 -2
  192. package/country-group/definition.cjs +0 -1
  193. package/country-group/definition.js +0 -1
  194. package/country-group/index.cjs +4 -4
  195. package/country-group/index.js +30 -30
  196. package/custom-elements.json +3831 -3147
  197. package/data-grid/definition.cjs +0 -1
  198. package/data-grid/definition.js +0 -1
  199. package/data-grid/index.cjs +34 -34
  200. package/data-grid/index.js +96 -98
  201. package/date-picker/definition.cjs +1 -2
  202. package/date-picker/definition.js +1 -2
  203. package/date-picker/index.cjs +1 -1
  204. package/date-picker/index.js +2 -3
  205. package/date-range-picker/definition.cjs +1 -2
  206. package/date-range-picker/definition.js +1 -2
  207. package/date-range-picker/index.cjs +1 -1
  208. package/date-range-picker/index.js +6 -7
  209. package/date-time-picker/definition.cjs +1 -2
  210. package/date-time-picker/definition.js +1 -2
  211. package/date-time-picker/index.cjs +2 -2
  212. package/date-time-picker/index.js +4 -5
  213. package/dial-pad/definition.cjs +1 -2
  214. package/dial-pad/definition.js +1 -2
  215. package/dial-pad/index.cjs +8 -8
  216. package/dial-pad/index.js +13 -14
  217. package/dialog/definition.cjs +1 -2
  218. package/dialog/definition.js +1 -2
  219. package/dialog/index.cjs +18 -16
  220. package/dialog/index.js +39 -35
  221. package/divider/definition.cjs +1 -1
  222. package/divider/definition.js +1 -1
  223. package/divider/index.cjs +1 -1
  224. package/divider/index.js +0 -1
  225. package/elevation/index.cjs +1 -1
  226. package/elevation/index.js +0 -1
  227. package/empty-state/definition.cjs +1 -2
  228. package/empty-state/definition.js +1 -2
  229. package/empty-state/index.cjs +5 -5
  230. package/empty-state/index.js +11 -12
  231. package/fab/definition.cjs +1 -2
  232. package/fab/definition.js +1 -2
  233. package/fab/index.cjs +3 -3
  234. package/fab/index.js +9 -10
  235. package/file-picker/definition.cjs +1 -2
  236. package/file-picker/definition.js +1 -2
  237. package/file-picker/index.cjs +10 -11
  238. package/file-picker/index.js +29 -31
  239. package/flag/definition.cjs +0 -1
  240. package/flag/definition.js +0 -1
  241. package/flag/index.cjs +3 -3
  242. package/flag/index.js +11 -11
  243. package/header/definition.cjs +1 -1
  244. package/header/definition.js +1 -1
  245. package/header/index.cjs +5 -5
  246. package/header/index.js +11 -11
  247. package/icon/definition.cjs +1 -2
  248. package/icon/definition.js +1 -2
  249. package/icon/index.cjs +1 -1
  250. package/icon/index.js +0 -2
  251. package/index.cjs +184 -173
  252. package/index.js +52 -50
  253. package/kbd-key/definition.cjs +5 -0
  254. package/kbd-key/definition.js +2 -0
  255. package/kbd-key/index.cjs +5 -0
  256. package/kbd-key/index.js +65 -0
  257. package/kbd-shortcut/definition.cjs +5 -0
  258. package/kbd-shortcut/definition.js +2 -0
  259. package/kbd-shortcut/index.cjs +3 -0
  260. package/kbd-shortcut/index.js +27 -0
  261. package/layout/definition.cjs +1 -1
  262. package/layout/definition.js +1 -1
  263. package/layout/index.cjs +2 -2
  264. package/layout/index.js +3 -3
  265. package/lib/accordion-item/accordion-item.d.ts +18 -1
  266. package/lib/action-group/action-group.d.ts +18 -1
  267. package/lib/alert/alert.d.ts +36 -2
  268. package/lib/audio-player/audio-player.d.ts +18 -1
  269. package/lib/avatar/avatar.d.ts +19 -2
  270. package/lib/badge/badge.d.ts +18 -1
  271. package/lib/banner/banner.d.ts +54 -3
  272. package/lib/breadcrumb/breadcrumb.d.ts +18 -1
  273. package/lib/breadcrumb-item/breadcrumb-item.d.ts +19 -2
  274. package/lib/button/button.d.ts +55 -4
  275. package/lib/calendar-event/calendar-event.d.ts +18 -1
  276. package/lib/card/card.d.ts +19 -2
  277. package/lib/checkbox/checkbox.d.ts +107 -5
  278. package/lib/color-picker/color-picker.d.ts +126 -7
  279. package/lib/combobox/combobox.d.ts +124 -5
  280. package/lib/components.d.ts +4 -1
  281. package/lib/country-group/country-group.d.ts +36 -2
  282. package/lib/data-grid/data-grid-cell.d.ts +36 -2
  283. package/lib/data-grid/data-grid-row.d.ts +18 -1
  284. package/lib/date-picker/date-picker.d.ts +140 -4
  285. package/lib/date-range-picker/date-range-picker.d.ts +70 -2
  286. package/lib/date-time-picker/date-time-picker.d.ts +140 -4
  287. package/lib/dial-pad/dial-pad.d.ts +18 -1
  288. package/lib/dialog/dialog.d.ts +36 -2
  289. package/lib/divider/divider.d.ts +18 -1
  290. package/lib/fab/fab.d.ts +18 -1
  291. package/lib/file-picker/file-picker.d.ts +124 -5
  292. package/lib/header/header.d.ts +18 -1
  293. package/lib/icon/icon.template.d.ts +1 -2
  294. package/lib/kbd-key/definition.d.ts +4 -0
  295. package/lib/kbd-key/index.d.ts +1 -0
  296. package/lib/kbd-key/kbd-key.d.ts +18 -0
  297. package/lib/kbd-key/kbd-key.template.d.ts +4 -0
  298. package/lib/kbd-shortcut/definition.d.ts +3 -0
  299. package/lib/kbd-shortcut/index.d.ts +1 -0
  300. package/lib/kbd-shortcut/kbd-shortcut.d.ts +4 -0
  301. package/lib/kbd-shortcut/kbd-shortcut.template.d.ts +4 -0
  302. package/lib/menu/menu.d.ts +35 -1
  303. package/lib/menu-item/menu-item.d.ts +463 -2
  304. package/lib/nav/nav.d.ts +18 -1
  305. package/lib/nav-disclosure/nav-disclosure.d.ts +36 -2
  306. package/lib/nav-item/nav-item.d.ts +37 -3
  307. package/lib/note/note.d.ts +18 -1
  308. package/lib/number-field/number-field.d.ts +160 -7
  309. package/lib/option/option.d.ts +36 -2
  310. package/lib/pagination/pagination.d.ts +18 -1
  311. package/lib/platform-switch/definition.d.ts +3 -0
  312. package/lib/platform-switch/index.d.ts +1 -0
  313. package/lib/platform-switch/platform-switch.d.ts +4 -0
  314. package/lib/platform-switch/platform-switch.template.d.ts +4 -0
  315. package/lib/popover/popover.d.ts +36 -2
  316. package/lib/progress/progress.d.ts +18 -1
  317. package/lib/progress-ring/progress-ring.d.ts +18 -1
  318. package/lib/radio/radio.d.ts +53 -2
  319. package/lib/radio-group/radio-group.d.ts +18 -1
  320. package/lib/range-slider/range-slider.d.ts +52 -1
  321. package/lib/rich-text-editor/locale.d.ts +1 -0
  322. package/lib/rich-text-editor/popover.d.ts +1 -0
  323. package/lib/rich-text-editor/rich-text-editor.d.ts +17 -0
  324. package/lib/rich-text-editor/rte/utils/ui.d.ts +3 -1
  325. package/lib/searchable-select/option-tag.d.ts +18 -1
  326. package/lib/searchable-select/searchable-select.d.ts +160 -7
  327. package/lib/select/select.d.ts +160 -7
  328. package/lib/selectable-box/selectable-box.d.ts +18 -1
  329. package/lib/simple-color-picker/simple-color-picker.d.ts +35 -1
  330. package/lib/slider/slider.d.ts +53 -2
  331. package/lib/split-button/split-button.d.ts +54 -3
  332. package/lib/status/status.d.ts +18 -1
  333. package/lib/switch/switch.d.ts +36 -2
  334. package/lib/tab/tab.d.ts +54 -3
  335. package/lib/tab-panel/tab-panel.d.ts +18 -1
  336. package/lib/table/table-cell.d.ts +18 -1
  337. package/lib/table/table-header-cell.d.ts +18 -1
  338. package/lib/table/table-row.d.ts +18 -1
  339. package/lib/table/table-sorting-button.d.ts +18 -1
  340. package/lib/tag/tag.d.ts +54 -3
  341. package/lib/tag-group/tag-group.d.ts +18 -1
  342. package/lib/tag-name-map.d.ts +4 -1
  343. package/lib/text-area/text-area.d.ts +142 -6
  344. package/lib/text-field/text-field.d.ts +160 -7
  345. package/lib/time-picker/time-picker.d.ts +70 -2
  346. package/lib/toggletip/toggletip.d.ts +35 -1
  347. package/lib/tooltip/tooltip.d.ts +444 -0
  348. package/lib/tree-item/tree-item.d.ts +36 -2
  349. package/lib/tree-view/tree-view.d.ts +18 -1
  350. package/lib/video-player/video-player.d.ts +18 -1
  351. package/locales/de-DE.cjs +2 -1
  352. package/locales/de-DE.js +1 -0
  353. package/locales/en-GB.cjs +2 -1
  354. package/locales/en-GB.js +1 -0
  355. package/locales/en-US.cjs +2 -1
  356. package/locales/en-US.js +1 -0
  357. package/locales/ja-JP.cjs +2 -1
  358. package/locales/ja-JP.js +1 -0
  359. package/locales/zh-CN.cjs +2 -1
  360. package/locales/zh-CN.js +1 -0
  361. package/menu/definition.cjs +0 -1
  362. package/menu/definition.js +0 -1
  363. package/menu/index.cjs +1 -1
  364. package/menu/index.js +0 -2
  365. package/menu-item/definition.cjs +0 -1
  366. package/menu-item/definition.js +0 -1
  367. package/menu-item/index.cjs +1 -1
  368. package/menu-item/index.js +0 -2
  369. package/nav/definition.cjs +1 -1
  370. package/nav/definition.js +1 -1
  371. package/nav/index.cjs +2 -2
  372. package/nav/index.js +2 -2
  373. package/nav-disclosure/definition.cjs +1 -2
  374. package/nav-disclosure/definition.js +1 -2
  375. package/nav-disclosure/index.cjs +4 -5
  376. package/nav-disclosure/index.js +18 -19
  377. package/nav-item/definition.cjs +1 -2
  378. package/nav-item/definition.js +1 -2
  379. package/nav-item/index.cjs +2 -2
  380. package/nav-item/index.js +8 -9
  381. package/note/definition.cjs +1 -2
  382. package/note/definition.js +1 -2
  383. package/note/index.cjs +2 -2
  384. package/note/index.js +7 -8
  385. package/number-field/definition.cjs +1 -2
  386. package/number-field/definition.js +1 -2
  387. package/number-field/index.cjs +8 -9
  388. package/number-field/index.js +24 -26
  389. package/option/definition.cjs +0 -1
  390. package/option/definition.js +0 -1
  391. package/option/index.cjs +1 -1
  392. package/option/index.js +0 -2
  393. package/package.json +23 -23
  394. package/pagination/definition.cjs +1 -2
  395. package/pagination/definition.js +1 -2
  396. package/pagination/index.cjs +9 -9
  397. package/pagination/index.js +18 -19
  398. package/platform-switch/definition.cjs +5 -0
  399. package/platform-switch/definition.js +2 -0
  400. package/platform-switch/index.cjs +1 -0
  401. package/platform-switch/index.js +28 -0
  402. package/popover/definition.cjs +1 -2
  403. package/popover/definition.js +1 -2
  404. package/popover/index.cjs +8 -8
  405. package/popover/index.js +33 -34
  406. package/popup/definition.cjs +0 -1
  407. package/popup/definition.js +0 -1
  408. package/popup/index.cjs +1 -1
  409. package/popup/index.js +0 -2
  410. package/progress/definition.cjs +1 -1
  411. package/progress/definition.js +1 -1
  412. package/progress/index.cjs +5 -5
  413. package/progress/index.js +9 -9
  414. package/progress-ring/definition.cjs +1 -1
  415. package/progress-ring/definition.js +1 -1
  416. package/progress-ring/index.cjs +1 -1
  417. package/progress-ring/index.js +0 -1
  418. package/radio/definition.cjs +1 -1
  419. package/radio/definition.js +1 -1
  420. package/radio/index.cjs +1 -1
  421. package/radio/index.js +0 -1
  422. package/radio-group/definition.cjs +1 -2
  423. package/radio-group/definition.js +1 -2
  424. package/radio-group/index.cjs +6 -9
  425. package/radio-group/index.js +26 -26
  426. package/range-slider/definition.cjs +1 -2
  427. package/range-slider/definition.js +1 -2
  428. package/range-slider/index.cjs +5 -5
  429. package/range-slider/index.js +58 -59
  430. package/rich-text-editor/definition.cjs +1 -2
  431. package/rich-text-editor/definition.js +1 -2
  432. package/rich-text-editor/index.cjs +12 -10
  433. package/rich-text-editor/index.js +2080 -1988
  434. package/rich-text-view/definition.cjs +1 -1
  435. package/rich-text-view/definition.js +1 -1
  436. package/rich-text-view/index.cjs +1 -1
  437. package/rich-text-view/index.js +3 -3
  438. package/searchable-select/definition.cjs +1 -2
  439. package/searchable-select/definition.js +1 -2
  440. package/searchable-select/index.cjs +39 -41
  441. package/searchable-select/index.js +127 -126
  442. package/select/definition.cjs +1 -2
  443. package/select/definition.js +1 -2
  444. package/select/index.cjs +1 -1
  445. package/select/index.js +0 -2
  446. package/selectable-box/definition.cjs +1 -2
  447. package/selectable-box/definition.js +1 -2
  448. package/selectable-box/index.cjs +9 -9
  449. package/selectable-box/index.js +20 -21
  450. package/shared/aria/aria-binding-directive.d.ts +21 -0
  451. package/shared/aria/aria-change-subscription.d.ts +1 -0
  452. package/shared/aria/aria-mixin.d.ts +21 -3
  453. package/shared/aria/delegates-aria.d.ts +19 -2
  454. package/shared/aria/host-semantics.d.ts +19 -2
  455. package/shared/aria/idrefs-controller.d.ts +17 -0
  456. package/shared/color-picker/base-color-picker.d.ts +18 -1
  457. package/shared/feedback/feedback-message.d.ts +18 -1
  458. package/shared/feedback/mixins.d.ts +36 -2
  459. package/shared/foundation/button/button.d.ts +35 -1
  460. package/shared/foundation/form-associated/form-associated.d.ts +35 -1
  461. package/shared/foundation/vivid-element/vivid-element.d.ts +375 -0
  462. package/shared/framework/reactive-controller.d.ts +373 -0
  463. package/shared/patterns/affix.d.ts +36 -2
  464. package/shared/patterns/anchored.d.ts +34 -0
  465. package/shared/patterns/char-count/char-count.d.ts +18 -1
  466. package/shared/patterns/form-elements/form-element.d.ts +17 -0
  467. package/shared/patterns/form-elements/with-contextual-help.d.ts +18 -1
  468. package/shared/patterns/form-elements/with-error-text.d.ts +18 -1
  469. package/shared/patterns/form-elements/with-success-text.d.ts +18 -1
  470. package/shared/patterns/index.d.ts +1 -0
  471. package/shared/patterns/kbd-shortcut.d.ts +431 -0
  472. package/shared/patterns/linkable.d.ts +19 -2
  473. package/shared/patterns/localized.d.ts +35 -1
  474. package/shared/patterns/trapped-focus.d.ts +18 -1
  475. package/shared/picker-field/mixins/calendar-picker.d.ts +35 -1
  476. package/shared/picker-field/mixins/calendar-picker.template.d.ts +35 -1
  477. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +18 -1
  478. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +35 -1
  479. package/shared/picker-field/mixins/single-date-picker.d.ts +35 -1
  480. package/shared/picker-field/mixins/single-value-picker.d.ts +35 -1
  481. package/shared/picker-field/mixins/time-selection-picker.d.ts +35 -1
  482. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +70 -2
  483. package/shared/picker-field/picker-field.d.ts +124 -5
  484. package/shared/templating/render-in-light-dom.d.ts +7 -20
  485. package/shared/utils/platform.d.ts +1 -0
  486. package/side-drawer/definition.cjs +1 -1
  487. package/side-drawer/definition.js +1 -1
  488. package/side-drawer/index.cjs +3 -3
  489. package/side-drawer/index.js +4 -4
  490. package/simple-color-picker/definition.cjs +1 -2
  491. package/simple-color-picker/definition.js +1 -2
  492. package/simple-color-picker/index.cjs +2 -2
  493. package/simple-color-picker/index.js +19 -20
  494. package/slider/definition.cjs +0 -1
  495. package/slider/definition.js +0 -1
  496. package/slider/index.cjs +1 -1
  497. package/slider/index.js +0 -2
  498. package/split-button/definition.cjs +1 -2
  499. package/split-button/definition.js +1 -2
  500. package/split-button/index.cjs +6 -7
  501. package/split-button/index.js +15 -16
  502. package/status/definition.cjs +1 -2
  503. package/status/definition.js +1 -2
  504. package/status/index.cjs +4 -4
  505. package/status/index.js +11 -12
  506. package/styles/core/all.css +24 -2
  507. package/styles/core/typography.css +24 -2
  508. package/styles/fonts/spezia-variable.css +6 -0
  509. package/styles/tokens/theme-dark.css +2 -0
  510. package/styles/tokens/theme-light.css +2 -0
  511. package/switch/definition.cjs +1 -2
  512. package/switch/definition.js +1 -2
  513. package/switch/index.cjs +5 -5
  514. package/switch/index.js +8 -9
  515. package/tab/definition.cjs +1 -2
  516. package/tab/definition.js +1 -2
  517. package/tab/index.cjs +1 -1
  518. package/tab/index.js +0 -2
  519. package/tab-panel/definition.cjs +1 -1
  520. package/tab-panel/definition.js +1 -1
  521. package/tab-panel/index.cjs +1 -1
  522. package/tab-panel/index.js +0 -1
  523. package/table/definition.cjs +1 -2
  524. package/table/definition.js +1 -2
  525. package/table/index.cjs +9 -9
  526. package/table/index.js +24 -25
  527. package/tabs/definition.cjs +1 -2
  528. package/tabs/definition.js +1 -2
  529. package/tabs/index.cjs +8 -8
  530. package/tabs/index.js +34 -35
  531. package/tag/definition.cjs +1 -2
  532. package/tag/definition.js +1 -2
  533. package/tag/index.cjs +11 -11
  534. package/tag/index.js +21 -22
  535. package/tag-group/definition.cjs +1 -1
  536. package/tag-group/definition.js +1 -1
  537. package/tag-group/index.cjs +4 -4
  538. package/tag-group/index.js +6 -6
  539. package/text-area/definition.cjs +1 -2
  540. package/text-area/definition.js +1 -2
  541. package/text-area/index.cjs +8 -9
  542. package/text-area/index.js +29 -31
  543. package/text-field/definition.cjs +0 -1
  544. package/text-field/definition.js +0 -1
  545. package/text-field/index.cjs +1 -1
  546. package/text-field/index.js +0 -2
  547. package/time-picker/definition.cjs +1 -2
  548. package/time-picker/definition.js +1 -2
  549. package/time-picker/index.cjs +1 -1
  550. package/time-picker/index.js +2 -3
  551. package/toggletip/definition.cjs +0 -1
  552. package/toggletip/definition.js +0 -1
  553. package/toggletip/index.cjs +1 -1
  554. package/toggletip/index.js +0 -2
  555. package/tooltip/definition.cjs +0 -1
  556. package/tooltip/definition.js +0 -1
  557. package/tooltip/index.cjs +1 -1
  558. package/tooltip/index.js +0 -2
  559. package/tree-item/definition.cjs +1 -2
  560. package/tree-item/definition.js +1 -2
  561. package/tree-item/index.cjs +1 -1
  562. package/tree-item/index.js +0 -2
  563. package/tree-view/definition.cjs +1 -2
  564. package/tree-view/definition.js +1 -2
  565. package/tree-view/index.cjs +4 -4
  566. package/tree-view/index.js +10 -10
  567. package/unbundled/affix.cjs +1 -1
  568. package/unbundled/affix.js +1 -1
  569. package/unbundled/aria-binding-directive.cjs +152 -0
  570. package/unbundled/aria-binding-directive.js +140 -0
  571. package/unbundled/calendar-picker.template.cjs +9 -11
  572. package/unbundled/calendar-picker.template.js +9 -11
  573. package/unbundled/char-count.cjs +3 -2
  574. package/unbundled/char-count.js +3 -2
  575. package/unbundled/decorate.cjs +1 -1
  576. package/unbundled/decorate.js +1 -1
  577. package/unbundled/definition.cjs +91 -17
  578. package/unbundled/definition.js +88 -14
  579. package/unbundled/definition10.cjs +5 -4
  580. package/unbundled/definition10.js +6 -5
  581. package/unbundled/definition11.cjs +14 -10
  582. package/unbundled/definition11.js +15 -11
  583. package/unbundled/definition12.cjs +17 -4
  584. package/unbundled/definition12.js +19 -6
  585. package/unbundled/definition13.cjs +7 -6
  586. package/unbundled/definition13.js +8 -7
  587. package/unbundled/definition14.cjs +67 -58
  588. package/unbundled/definition14.js +68 -59
  589. package/unbundled/definition15.cjs +1 -1
  590. package/unbundled/definition15.js +2 -2
  591. package/unbundled/definition16.cjs +1 -1
  592. package/unbundled/definition16.js +2 -2
  593. package/unbundled/definition17.cjs +11 -9
  594. package/unbundled/definition17.js +12 -10
  595. package/unbundled/definition18.cjs +1 -1
  596. package/unbundled/definition18.js +2 -2
  597. package/unbundled/definition19.js +1 -1
  598. package/unbundled/definition2.cjs +96 -75
  599. package/unbundled/definition2.js +94 -73
  600. package/unbundled/definition20.js +1 -1
  601. package/unbundled/definition21.js +1 -1
  602. package/unbundled/definition22.cjs +2 -3
  603. package/unbundled/definition22.js +3 -4
  604. package/unbundled/definition23.cjs +4 -4
  605. package/unbundled/definition23.js +6 -6
  606. package/unbundled/definition24.cjs +17 -13
  607. package/unbundled/definition24.js +18 -14
  608. package/unbundled/definition25.cjs +1 -1
  609. package/unbundled/definition25.js +2 -2
  610. package/unbundled/definition26.cjs +24 -8
  611. package/unbundled/definition26.js +23 -7
  612. package/unbundled/definition27.cjs +39 -22
  613. package/unbundled/definition27.js +41 -24
  614. package/unbundled/definition28.cjs +10 -7
  615. package/unbundled/definition28.js +12 -9
  616. package/unbundled/definition29.cjs +1 -1
  617. package/unbundled/definition29.js +2 -2
  618. package/unbundled/definition3.cjs +154 -95
  619. package/unbundled/definition3.js +146 -93
  620. package/unbundled/definition30.cjs +5 -3
  621. package/unbundled/definition30.js +7 -5
  622. package/unbundled/definition31.cjs +1 -1
  623. package/unbundled/definition31.js +2 -2
  624. package/unbundled/definition32.cjs +30 -23
  625. package/unbundled/definition32.js +31 -24
  626. package/unbundled/definition33.cjs +5 -3
  627. package/unbundled/definition33.js +6 -4
  628. package/unbundled/definition34.cjs +303 -113
  629. package/unbundled/definition34.js +302 -112
  630. package/unbundled/definition35.cjs +26 -326
  631. package/unbundled/definition35.js +24 -247
  632. package/unbundled/definition36.cjs +131 -25
  633. package/unbundled/definition36.js +124 -23
  634. package/unbundled/definition37.cjs +326 -51
  635. package/unbundled/definition37.js +324 -49
  636. package/unbundled/definition38.cjs +137 -316
  637. package/unbundled/definition38.js +135 -314
  638. package/unbundled/definition39.cjs +337 -173
  639. package/unbundled/definition39.js +334 -170
  640. package/unbundled/definition4.cjs +34 -153
  641. package/unbundled/definition4.js +25 -145
  642. package/unbundled/definition40.cjs +234 -339
  643. package/unbundled/definition40.js +230 -335
  644. package/unbundled/definition41.cjs +48 -266
  645. package/unbundled/definition41.js +44 -262
  646. package/unbundled/definition42.cjs +68 -49
  647. package/unbundled/definition42.js +65 -46
  648. package/unbundled/definition43.cjs +424 -56
  649. package/unbundled/definition43.js +422 -54
  650. package/unbundled/definition44.cjs +45 -427
  651. package/unbundled/definition44.js +42 -424
  652. package/unbundled/definition45.cjs +45 -54
  653. package/unbundled/definition45.js +42 -51
  654. package/unbundled/definition46.cjs +178 -30
  655. package/unbundled/definition46.js +175 -26
  656. package/unbundled/definition47.cjs +29 -93
  657. package/unbundled/definition47.js +25 -90
  658. package/unbundled/definition48.cjs +76 -36
  659. package/unbundled/definition48.js +73 -33
  660. package/unbundled/definition49.cjs +56 -23
  661. package/unbundled/definition49.js +54 -18
  662. package/unbundled/definition5.cjs +56 -38
  663. package/unbundled/definition5.js +52 -28
  664. package/unbundled/definition50.cjs +23 -40
  665. package/unbundled/definition50.js +18 -38
  666. package/unbundled/definition51.cjs +30 -338
  667. package/unbundled/definition51.js +30 -338
  668. package/unbundled/definition52.cjs +317 -187
  669. package/unbundled/definition52.js +314 -184
  670. package/unbundled/definition53.cjs +194 -285
  671. package/unbundled/definition53.js +189 -280
  672. package/unbundled/definition54.cjs +47 -54
  673. package/unbundled/definition54.js +44 -50
  674. package/unbundled/definition55.cjs +279 -131
  675. package/unbundled/definition55.js +277 -128
  676. package/unbundled/definition56.cjs +50 -261
  677. package/unbundled/definition56.js +48 -260
  678. package/unbundled/definition57.cjs +128 -449
  679. package/unbundled/definition57.js +126 -448
  680. package/unbundled/definition58.cjs +235 -3596
  681. package/unbundled/definition58.js +231 -3429
  682. package/unbundled/definition59.cjs +419 -729
  683. package/unbundled/definition59.js +417 -727
  684. package/unbundled/definition6.cjs +18 -64
  685. package/unbundled/definition6.js +15 -60
  686. package/unbundled/definition60.cjs +3666 -106
  687. package/unbundled/definition60.js +3498 -101
  688. package/unbundled/definition61.cjs +625 -873
  689. package/unbundled/definition61.js +619 -867
  690. package/unbundled/definition62.cjs +106 -108
  691. package/unbundled/definition62.js +103 -105
  692. package/unbundled/definition63.cjs +1045 -71
  693. package/unbundled/definition63.js +1041 -66
  694. package/unbundled/definition64.cjs +105 -170
  695. package/unbundled/definition64.js +102 -167
  696. package/unbundled/definition65.cjs +70 -113
  697. package/unbundled/definition65.js +66 -110
  698. package/unbundled/definition66.cjs +185 -54
  699. package/unbundled/definition66.js +182 -51
  700. package/unbundled/definition67.cjs +110 -77
  701. package/unbundled/definition67.js +111 -77
  702. package/unbundled/definition68.cjs +58 -21
  703. package/unbundled/definition68.js +56 -16
  704. package/unbundled/definition69.cjs +82 -75
  705. package/unbundled/definition69.js +81 -75
  706. package/unbundled/definition7.cjs +2 -2
  707. package/unbundled/definition7.js +3 -3
  708. package/unbundled/definition70.cjs +19 -344
  709. package/unbundled/definition70.js +15 -336
  710. package/unbundled/definition71.cjs +88 -26
  711. package/unbundled/definition71.js +86 -23
  712. package/unbundled/definition72.cjs +309 -118
  713. package/unbundled/definition72.js +234 -115
  714. package/unbundled/definition73.cjs +293 -217
  715. package/unbundled/definition73.js +287 -218
  716. package/unbundled/definition74.cjs +39 -30
  717. package/unbundled/definition74.js +29 -28
  718. package/unbundled/definition75.cjs +106 -121
  719. package/unbundled/definition75.js +104 -113
  720. package/unbundled/definition76.cjs +260 -178
  721. package/unbundled/definition76.js +258 -175
  722. package/unbundled/definition77.cjs +29 -514
  723. package/unbundled/definition77.js +27 -503
  724. package/unbundled/definition78.cjs +171 -0
  725. package/unbundled/definition78.js +147 -0
  726. package/unbundled/definition79.cjs +233 -0
  727. package/unbundled/definition79.js +214 -0
  728. package/unbundled/definition8.js +1 -1
  729. package/unbundled/definition80.cjs +533 -0
  730. package/unbundled/definition80.js +513 -0
  731. package/unbundled/definition9.cjs +10 -8
  732. package/unbundled/definition9.js +11 -9
  733. package/unbundled/delegates-aria.cjs +19 -60
  734. package/unbundled/delegates-aria.js +20 -60
  735. package/unbundled/divider.cjs +6 -0
  736. package/unbundled/divider.js +6 -0
  737. package/unbundled/form-element.cjs +7 -5
  738. package/unbundled/form-element.js +7 -5
  739. package/unbundled/host-semantics.cjs +11 -45
  740. package/unbundled/host-semantics.js +11 -44
  741. package/unbundled/kbd-shortcut.cjs +26 -0
  742. package/unbundled/kbd-shortcut.js +20 -0
  743. package/unbundled/mixins.cjs +7 -77
  744. package/unbundled/mixins.js +6 -64
  745. package/unbundled/picker-field.template.cjs +20 -15
  746. package/unbundled/picker-field.template.js +20 -15
  747. package/unbundled/platform.cjs +17 -0
  748. package/unbundled/platform.js +12 -0
  749. package/unbundled/randomId.cjs +47 -0
  750. package/unbundled/randomId.js +35 -0
  751. package/unbundled/text-field.cjs +1 -1
  752. package/unbundled/text-field.js +1 -1
  753. package/unbundled/time-selection-picker.template.cjs +4 -3
  754. package/unbundled/time-selection-picker.template.js +5 -4
  755. package/unbundled/vivid-element.cjs +91 -9
  756. package/unbundled/vivid-element.js +66 -8
  757. package/video-player/definition.cjs +1 -1
  758. package/video-player/definition.js +1 -1
  759. package/video-player/index.cjs +24 -24
  760. package/video-player/index.js +3087 -3010
  761. package/visually-hidden/definition.cjs +1 -1
  762. package/visually-hidden/definition.js +1 -1
  763. package/visually-hidden/index.cjs +1 -1
  764. package/visually-hidden/index.js +0 -1
  765. package/vivid.api.json +605 -7
  766. package/bundled/attribute-binding-behaviour.cjs +0 -1
  767. package/bundled/attribute-binding-behaviour.js +0 -18
  768. package/bundled/normalize.cjs +0 -1
  769. package/bundled/normalize.js +0 -7
  770. package/bundled/strings.cjs +0 -1
  771. package/bundled/strings.js +0 -7
  772. package/shared/aria/delegate-aria-behavior.d.ts +0 -23
  773. package/shared/aria/host-semantics-behavior.d.ts +0 -19
  774. package/shared/templating/attribute-binding-behaviour.d.ts +0 -14
  775. package/unbundled/attribute-binding-behaviour.cjs +0 -37
  776. package/unbundled/attribute-binding-behaviour.js +0 -31
@@ -1,819 +1,509 @@
1
- import { o as defineVividComponent, s as createRegisterFunction } from "./vivid-element.js";
2
- import { t as iconDefinition } from "./definition2.js";
1
+ import { d as createRegisterFunction, t as VividElement, u as defineVividComponent } from "./vivid-element.js";
3
2
  import { t as __decorate } from "./decorate.js";
4
- import { a as affixIconTemplateFactory, i as IconWrapper, n as AffixIconWithTrailing } from "./affix.js";
5
3
  import { n as FormAssociated } from "./form-associated.js";
6
4
  import { t as FormElement } from "./form-element.js";
7
- import { t as WithSuccessText } from "./with-success-text.js";
8
- import { t as WithErrorText } from "./with-error-text.js";
9
- import { t as WithContextualHelp } from "./with-contextual-help.js";
10
5
  import { t as Localized } from "./localized.js";
11
- import { i as Button, r as chevronTemplateFactory, t as buttonDefinition } from "./definition7.js";
12
- import { t as handleEscapeKeyAndStopPropogation } from "./dialog.js";
13
- import { i as Popup, t as popupDefinition } from "./definition10.js";
14
- import { n as applyHostSemantics, t as HostSemantics } from "./host-semantics.js";
15
- import { a as feedbackMessageDefinition, n as WithLightDOMFeedback } from "./mixins.js";
16
- import { r as ListboxOption, t as listboxOptionDefinition } from "./definition29.js";
17
- import { t as Listbox } from "./listbox.js";
18
- import { Observable, Updates, attr, html, observable, ref, slotted, volatile, when } from "@microsoft/fast-element";
19
- import { classNames, inRange, keyArrowDown, keyArrowUp, keyEnd, keyEnter, keyEscape, keyHome, keySpace, keyTab, uniqueId } from "@microsoft/fast-web-utilities";
20
- //#region src/lib/select/select.scss?inline
21
- 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;transition:transform .2s;display:flex;transform:rotate(0)}: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-400);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-300);--_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-300);--_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(:not([multiple]):focus-visible) ::slotted([data-vvd-component=option][current-selected]){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));--focus-stroke-gap-color:transparent;border-radius:8px}: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))}";
6
+ import { i as Popup, r as PlacementStrategy, t as popupDefinition } from "./definition10.js";
7
+ import { n as keyArrowRight$1, t as keyArrowLeft$1 } from "./key-codes.js";
8
+ import { a as defaultToOneConverter, i as lerp, n as getMarkersTemplate, o as roundToStepValue, r as inverseLerp } from "./slider.template.js";
9
+ import { attr, html, nullableNumberConverter, observable, ref, when } from "@microsoft/fast-element";
10
+ import { Orientation, classNames, keyArrowDown, keyArrowUp, keyEnd, keyHome, limit } from "@microsoft/fast-web-utilities";
11
+ //#region src/lib/range-slider/range-slider.scss?inline
12
+ var range_slider_default = ":host{display:inline-block}:host(:not([orientation=vertical])){inline-size:100%}:host([orientation=vertical]){block-size:100%;min-block-size:calc(var(--_thumb-interaction-indicator-size) * 5)}:host([disabled]){cursor:not-allowed}.control.connotation-cta{--_connotation-color-primary:var(--vvd-slider-cta-primary,var(--vvd-color-cta-500))}.control:not(.connotation-cta){--_connotation-color-primary:var(--vvd-slider-accent-primary,var(--vvd-color-canvas-text))}.control{--_appearance-color-text:var(--_connotation-color-primary-text);--_appearance-color-fill:var(--_connotation-color-primary);--_appearance-color-outline:transparent;--_thumb-size:12px;--_thumb-interaction-indicator-size:36px;--_track-start-inset-inline-start:0;--_track-start-inset-block-start:0;cursor:pointer;user-select:none;outline:none}.control .positioning-region{position:relative}.control .track{background:var(--_track-background-color);border-radius:4px;position:absolute}.control .track-start{border-radius:inherit;background:var(--_track-start-background-color);block-size:100%;position:absolute;inset-inline-start:var(--_track-start-inset-inline-start)}.control.horizontal{block-size:var(--_thumb-interaction-indicator-size);inline-size:calc(100% - var(--_thumb-size));min-inline-size:var(--_thumb-size);margin-inline-start:calc(var(--_thumb-size) / 2)}.control.horizontal .track{top:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);block-size:2px;left:0;right:0}:host([markers]) .control.horizontal .track-start{--_track-start-inset-inline-start:1px;border-top-left-radius:0;border-bottom-left-radius:0}.control.horizontal .track .mark{block-size:6px;inline-size:100%;position:absolute;inset-block-start:-2px;inset-inline-start:0}.control.vertical{margin-top:calc(var(--_thumb-interaction-indicator-size) / 2);block-size:calc(100% - var(--_thumb-interaction-indicator-size));inline-size:var(--_thumb-interaction-indicator-size);min-block-size:var(--_thumb-interaction-indicator-size)}.control.vertical .positioning-region{block-size:100%}.control.vertical .track{left:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);block-size:100%;inline-size:2px}.control.vertical .track .mark{block-size:100%;inline-size:6px;position:absolute;inset-block-start:0;inset-inline-start:-2px}.control.vertical .track-start{block-size:auto;inline-size:100%;inset-block-start:var(--_track-start-inset-block-start)}:host([markers]) .control.vertical .track-start{--_track-start-inset-block-start:1px;border-radius:0}.control.disabled{--_track-background-color:var(--vvd-color-neutral-100);--_track-start-background-color:var(--vvd-color-neutral-300);pointer-events:none}.control:not(.disabled){--_track-background-color:var(--vvd-color-neutral-300);--_track-start-background-color:var(--_appearance-color-fill)}.control:not(.disabled) .mark{color:var(--vvd-color-neutral-950)}.control.disabled .mark{color:var(--_track-start-background-color)}.thumb-container{block-size:var(--_thumb-interaction-indicator-size);cursor:inherit;inline-size:var(--_thumb-interaction-indicator-size);touch-action:none;border-radius:50%;outline:none;position:absolute}.thumb-container.focus-visible{box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,var(--vvd-color-cta-500)), transparent 85%), inset 0 0 0 3px var(--focus-stroke-gap-color,currentColor);outline:1px solid var(--focus-stroke-color,var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset,0px));--focus-stroke-gap-color:transparent;--_thumb-interaction-indicator-alpha:.05;border-radius:50%}.control.horizontal .thumb-container{transform:translateX(calc(var(--_thumb-interaction-indicator-size) / 2))}.control.vertical .thumb-container{transform:translateY(calc(var(--_thumb-interaction-indicator-size) / 2))}@media (hover:hover){.control:not(.disabled) .thumb-container:hover{--_thumb-interaction-indicator-alpha:.12}}.control:not(.disabled) .thumb-container:active{--_thumb-interaction-indicator-alpha:.25}.thumb-container:before{border-radius:inherit;background-color:var(--_track-start-background-color);block-size:var(--_thumb-interaction-indicator-size);content:\"\";inline-size:var(--_thumb-interaction-indicator-size);opacity:var(--_thumb-interaction-indicator-alpha,0);transition:opacity .2s ease-out;display:block;position:absolute}.thumb-container:after{border-radius:inherit;background-color:var(--_track-start-background-color);block-size:var(--_thumb-size);content:\"\";inline-size:var(--_thumb-size);inset:calc((var(--_thumb-interaction-indicator-size) - var(--_thumb-size)) / 2);display:block;position:absolute}.popup{pointer-events:none}.tooltip{width:auto;color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base-bold);padding:8px 12px}:host([internal-part]) .thumb-container{opacity:0;transition:opacity .2s}:host([internal-part]) .control.horizontal .track{block-size:4px;top:16px;overflow:hidden}:host([internal-part]) .control:focus .thumb-container{opacity:1}@media (hover:hover){:host([internal-part]) .control:hover .thumb-container{opacity:1}}.control,:host([markers]) .control.horizontal .track-start,:host([markers]) .control.vertical .track-start{--_track-start-inset-inline-start:auto;--_track-start-inset-block-start:auto}";
22
13
  //#endregion
23
- //#region src/lib/select/select.ts
14
+ //#region src/lib/range-slider/range-slider.ts
15
+ var Direction$1 = {
16
+ Increment: 1,
17
+ Decrement: -1
18
+ };
24
19
  /**
20
+ * Base class for range-slider
21
+ *
22
+ * @component range-slider
25
23
  * @public
26
- * @component select
27
- * @slot - Default slot.
28
- * @slot icon - The preferred way to add an icon to the select control.
29
- * @slot meta - Slot to add meta content to the select control.
30
- * @slot helper-text - Describes how to use the select. Alternative to the `helper-text` attribute.
31
- * @event {CustomEvent<undefined>} input - Fires a custom 'input' event when the value updates
32
- * @event {CustomEvent<HTMLElement>} change - Fires a custom 'change' event when the value updates
33
- * @vueModel modelValue value input,@lazy:change `event.currentTarget.value`
34
- * @testAction selectOptionByValue selectOptionByValue
35
- * @testAction selectOptionByText selectOptionByText
24
+ * @event {CustomEvent<undefined>} input:start - Event emitted when the start value changes
25
+ * @event {CustomEvent<undefined>} input:end - Event emitted when the end value changes
26
+ * @event {CustomEvent<undefined>} input - Event emitted when either the start or end value changes.
27
+ * @event {CustomEvent<undefined>} change - Event emitted when either the start or end value changes.
28
+ * @vueModel start start input:start `event.currentTarget.start`
29
+ * @vueModel end end input:end `event.currentTarget.end`
30
+ * @vueModel startAsNumber startAsNumber input:start `event.currentTarget.startAsNumber`
31
+ * @vueModel endAsNumber endAsNumber input:end `event.currentTarget.endAsNumber`
32
+ * @testSelector byLabel byLabel
33
+ * @testAction slideStartTo slideTo #track #startThumb
34
+ * @testAction slideEndTo slideTo #track #endThumb
35
+ * @testQuery range rangeAsNumber
36
+ * @testRef track shadow .control
37
+ * @testRef startThumb shadow #start-thumb
38
+ * @testRef endThumb shadow #end-thumb
36
39
  */
37
- var Select = class extends WithLightDOMFeedback(WithContextualHelp(WithErrorText(WithSuccessText(Localized(FormElement(HostSemantics(AffixIconWithTrailing(FormAssociated(Listbox))))))))) {
40
+ var RangeSlider = class extends Localized(FormElement(FormAssociated(VividElement))) {
38
41
  constructor(..._args) {
39
42
  super(..._args);
40
- this.proxy = document.createElement("select");
41
- this.activeIndex = -1;
42
- this.rangeStartIndex = -1;
43
- this.open = false;
44
- this.listboxId = uniqueId("listbox-");
45
- this.maxHeight = 0;
46
- this.fixedDropdown = false;
47
- this._feedbackWrapper = null;
48
- this._isResetting = false;
49
- this.clearable = false;
50
- this._isClearButtonFocused = false;
51
- }
52
- /**
53
- * Returns the last checked option.
54
- *
55
- * @internal
56
- */
57
- get activeOption() {
58
- return this.options[this.activeIndex];
59
- }
60
- /**
61
- * Returns the list of checked options.
62
- *
63
- * @internal
64
- */
65
- get checkedOptions() {
66
- return this.options.filter((o) => o.checked);
67
- }
68
- /**
69
- * Returns the index of the first selected option.
70
- *
71
- * @internal
72
- */
73
- get firstSelectedOptionIndex() {
74
- return this.options.indexOf(this.firstSelectedOption);
75
- }
76
- /**
77
- * Updates the `ariaActiveDescendant` property when the active index changes.
78
- *
79
- * @internal
80
- */
81
- activeIndexChanged(_, next) {
82
- this._activeDescendant = this.options[next]?.id ?? "";
83
- this.focusAndScrollOptionIntoView();
84
- }
85
- /**
86
- * Toggles the checked state for the currently active option.
87
- *
88
- * @remarks
89
- * Multiple-selection mode only.
90
- *
91
- * @internal
92
- */
93
- checkActiveIndex() {
94
- const activeItem = this.activeOption;
95
- /* v8 ignore else -- @preserve */
96
- if (activeItem) activeItem.checked = true;
97
- }
98
- /**
99
- * Sets the active index to the first option and marks it as checked.
100
- *
101
- * @remarks
102
- * Multi-selection mode only.
103
- *
104
- * @param preserveChecked - mark all options unchecked before changing the active index
105
- *
106
- * @internal
107
- */
108
- checkFirstOption(preserveChecked) {
109
- const firstSelectableIndex = this.getNextSelectableIndex(0);
110
- if (firstSelectableIndex === -1) return;
111
- if (preserveChecked) {
112
- if (this.rangeStartIndex === -1) this.rangeStartIndex = this.activeIndex;
113
- this.options.forEach((o, i) => {
114
- o.checked = inRange(i, firstSelectableIndex, this.rangeStartIndex + 1) && !o.disabled;
115
- });
116
- } else this.uncheckAllOptions();
117
- this.activeIndex = firstSelectableIndex;
118
- this.checkActiveIndex();
119
- }
120
- /**
121
- * Decrements the active index and sets the matching option as checked.
122
- *
123
- * @remarks
124
- * Multi-selection mode only.
125
- *
126
- * @param preserveChecked - mark all options unchecked before changing the active index
127
- *
128
- * @internal
129
- */
130
- checkLastOption(preserveChecked) {
131
- const lastSelectableIndex = this.getPreviousSelectableIndex(this.length - 1);
132
- if (lastSelectableIndex === -1) return;
133
- if (preserveChecked) {
134
- if (this.rangeStartIndex === -1) this.rangeStartIndex = this.activeIndex;
135
- this.options.forEach((o, i) => {
136
- o.checked = inRange(i, this.rangeStartIndex, lastSelectableIndex + 1) && !o.disabled;
137
- });
138
- } else this.uncheckAllOptions();
139
- this.activeIndex = lastSelectableIndex;
140
- this.checkActiveIndex();
141
- }
142
- /**
143
- * Increments the active index and marks the matching option as checked.
144
- *
145
- * @remarks
146
- * Multiple-selection mode only.
147
- *
148
- * @param preserveChecked - mark all options unchecked before changing the active index
149
- *
150
- * @internal
151
- */
152
- checkNextOption(preserveChecked) {
153
- const nextIndex = this.getNextSelectableIndex(this.activeIndex + 1);
154
- if (nextIndex === -1) return;
155
- if (preserveChecked) {
156
- if (this.rangeStartIndex === -1) this.rangeStartIndex = this.activeIndex;
157
- this.options.forEach((o, i) => {
158
- o.checked = inRange(i, this.rangeStartIndex, nextIndex + 1) && !o.disabled;
159
- });
160
- } else this.uncheckAllOptions();
161
- this.activeIndex = nextIndex;
162
- this.checkActiveIndex();
163
- }
164
- /**
165
- * Decrements the active index and marks the matching option as checked.
166
- *
167
- * @remarks
168
- * Multiple-selection mode only.
169
- *
170
- * @param preserveChecked - mark all options unchecked before changing the active index
171
- *
172
- * @internal
173
- */
174
- checkPreviousOption(preserveChecked) {
175
- const previousIndex = this.getPreviousSelectableIndex(this.activeIndex - 1);
176
- if (previousIndex === -1) return;
177
- if (preserveChecked) {
178
- if (this.rangeStartIndex === -1) this.rangeStartIndex = this.activeIndex;
179
- if (this.checkedOptions.length === 1) this.rangeStartIndex += 1;
180
- this.options.forEach((o, i) => {
181
- o.checked = inRange(i, previousIndex, this.rangeStartIndex + 1) && !o.disabled;
182
- });
183
- } else this.uncheckAllOptions();
184
- this.activeIndex = previousIndex;
185
- this.checkActiveIndex();
43
+ this.#isInternalValueUpdate = false;
44
+ this.start = "";
45
+ this.end = "";
46
+ this.min = 0;
47
+ this.max = 10;
48
+ this.step = 1;
49
+ this.orientation = Orientation.horizontal;
50
+ this.ariaStartLabel = null;
51
+ this.ariaEndLabel = null;
52
+ this.markers = false;
53
+ this.pin = false;
54
+ this.valueTextFormatter = (value) => parseFloat(value).toLocaleString(this.locale.lang);
55
+ this.proxy = document.createElement("input");
56
+ this._trackEl = null;
57
+ this._startThumbEl = null;
58
+ this._endThumbEl = null;
59
+ this._draggingThumb = false;
60
+ this._visiblyFocusedThumb = null;
61
+ this._hoveredThumb = null;
62
+ this._startThumbCss = "";
63
+ this._endThumbCss = "";
64
+ this._selectedRangeCss = "";
65
+ this.#isNonVisibleFocus = false;
66
+ this.#onThumbFocus = (e) => {
67
+ if (!this.#isNonVisibleFocus) this._visiblyFocusedThumb = this.#getThumbIdFromEvent(e);
68
+ this.#isNonVisibleFocus = false;
69
+ };
70
+ this.#onThumbBlur = () => {
71
+ this._visiblyFocusedThumb = null;
72
+ };
73
+ this.#onVisibilityChange = () => {
74
+ if (document.hidden && (this.shadowRoot.activeElement === this._startThumbEl || this.shadowRoot.activeElement === this._endThumbEl)) this.#isNonVisibleFocus = true;
75
+ };
76
+ this.#onMouseOver = (e) => {
77
+ this._hoveredThumb = this.#getThumbIdFromEvent(e);
78
+ };
79
+ this.#onMouseOut = () => {
80
+ this._hoveredThumb = null;
81
+ };
82
+ this.#onThumbMousedown = (event) => {
83
+ if (this.disabled || event.defaultPrevented) return;
84
+ let target = event.target;
85
+ if (target === this._endThumbEl && this.startAsNumber === this.max && this.endAsNumber === this.max) target = this._startThumbEl;
86
+ this.#focusThumbNonVisibly(target);
87
+ this._draggingThumb = this.#getThumbId(target);
88
+ this.#registerDragHandlers();
89
+ };
90
+ this.#onThumbKeydown = (e) => {
91
+ const thumb = this.#getThumbIdFromEvent(e);
92
+ this._visiblyFocusedThumb = thumb;
93
+ if (e.key === keyHome) {
94
+ e.preventDefault();
95
+ this.#updateValues({ [thumb]: `${this.#thumbConstraints[thumb].min}` });
96
+ } else if (e.key === keyEnd) {
97
+ e.preventDefault();
98
+ this.#updateValues({ [thumb]: `${this.#thumbConstraints[thumb].max}` });
99
+ } else {
100
+ if (e.shiftKey) return;
101
+ switch (e.key) {
102
+ case keyArrowRight$1:
103
+ case keyArrowDown:
104
+ e.preventDefault();
105
+ this.#applyStep(thumb, Direction$1.Increment);
106
+ break;
107
+ case keyArrowLeft$1:
108
+ case keyArrowUp:
109
+ e.preventDefault();
110
+ this.#applyStep(thumb, Direction$1.Decrement);
111
+ break;
112
+ }
113
+ }
114
+ };
115
+ this.#onDragMove = (e) => {
116
+ if (this.disabled || e.defaultPrevented || !this._draggingThumb) return;
117
+ const sourceEvent = "TouchEvent" in window && e instanceof TouchEvent ? e.touches[0] : e;
118
+ const value = this.#calculateValueFromMouseEvent(sourceEvent);
119
+ this.#updateValues({ [this._draggingThumb]: `${this.#roundToNearestStep(this._draggingThumb, value)}` });
120
+ };
121
+ this.#onDragEnd = () => {
122
+ this._draggingThumb = false;
123
+ this.#unregisterDragListeners();
124
+ };
125
+ }
126
+ #isInternalValueUpdate;
127
+ /**
128
+ * @internal
129
+ */
130
+ startChanged() {
131
+ this.currentStart = this.start;
132
+ if (!this.#isInternalValueUpdate) {
133
+ this.dirtyValue = true;
134
+ this.#updateFormValue();
135
+ }
136
+ if (this.$fastController.isConnected) this.#updateThumbPositions();
186
137
  }
187
138
  /**
188
139
  * @internal
189
140
  */
190
- focusAndScrollOptionIntoView() {
191
- super.focusAndScrollOptionIntoView(this.activeOption);
141
+ initialStartChanged(_, newValue) {
142
+ if (newValue && !this.dirtyValue) {
143
+ this.start = newValue;
144
+ this.dirtyValue = false;
145
+ }
192
146
  }
193
147
  /**
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
148
  * @internal
200
149
  */
201
- focusinHandler(e) {
202
- if (!this.multiple) return super.focusinHandler(e);
203
- /* v8 ignore else -- @preserve */
204
- if (!this.shouldSkipFocus && e.target === e.currentTarget) {
205
- this.uncheckAllOptions();
206
- if (this.activeIndex === -1) this.activeIndex = this.firstSelectedOptionIndex !== -1 ? this.firstSelectedOptionIndex : 0;
207
- this.checkActiveIndex();
208
- this.setSelectedOptions();
209
- this.focusAndScrollOptionIntoView();
210
- }
211
- this.shouldSkipFocus = false;
150
+ currentStartChanged() {
151
+ this.start = this.currentStart;
212
152
  }
213
153
  /**
214
- * Sets an option as selected and gives it focus.
154
+ * The start property, typed as a number.
215
155
  *
216
156
  * @public
217
157
  */
218
- setSelectedOptions() {
219
- if (!this.multiple) {
220
- super.setSelectedOptions();
221
- return;
222
- }
223
- /* v8 ignore else -- @preserve */
224
- if (this.$fastController.isConnected && this.options) {
225
- this.selectedOptions = this.options.filter((o) => o.selected);
226
- this.focusAndScrollOptionIntoView();
227
- }
158
+ get startAsNumber() {
159
+ return parseFloat(this.start);
228
160
  }
229
- /**
230
- * Toggles the selected state of the provided options. If any provided items
231
- * are in an unselected state, all items are set to selected. If every
232
- * provided item is selected, they are all unselected.
233
- *
234
- * @internal
235
- */
236
- toggleSelectedForAllCheckedOptions() {
237
- const enabledCheckedOptions = this.checkedOptions.filter((o) => !o.disabled);
238
- const force = !enabledCheckedOptions.every((o) => o.selected);
239
- enabledCheckedOptions.forEach((o) => o.selected = force);
240
- this.selectedIndex = this.options.indexOf(enabledCheckedOptions[enabledCheckedOptions.length - 1]);
241
- this.setSelectedOptions();
242
- this.updateValue(true);
161
+ set startAsNumber(next) {
162
+ this.start = next.toString();
243
163
  }
244
164
  /**
245
165
  * @internal
246
166
  */
247
- typeaheadBufferChanged(prev, next) {
248
- if (!this.multiple) {
249
- super.typeaheadBufferChanged(prev, next);
250
- return;
251
- }
252
- /* v8 ignore if -- @preserve */
253
- if (this.$fastController.isConnected) {
254
- const typeaheadMatches = this.getTypeaheadMatches();
255
- const activeIndex = this.options.indexOf(typeaheadMatches[0]);
256
- if (activeIndex > -1) {
257
- this.activeIndex = activeIndex;
258
- this.uncheckAllOptions();
259
- this.checkActiveIndex();
260
- }
261
- this.typeaheadExpired = false;
167
+ endChanged() {
168
+ this.currentEnd = this.end;
169
+ if (!this.#isInternalValueUpdate) {
170
+ this.dirtyValue = true;
171
+ this.#updateFormValue();
262
172
  }
173
+ if (this.$fastController.isConnected) this.#updateThumbPositions();
263
174
  }
264
175
  /**
265
- * Unchecks all options.
266
- *
267
- * @remarks
268
- * Multiple-selection mode only.
269
- *
270
- * @param preserveChecked - reset the rangeStartIndex
271
- *
272
- * @internal
273
- */
274
- uncheckAllOptions(preserveChecked = false) {
275
- this.options.forEach((o) => o.checked = false);
276
- /* v8 ignore else -- @preserve */
277
- if (!preserveChecked) this.rangeStartIndex = -1;
278
- }
279
- /**
280
- * Sets focus when the open property changes.
281
- *
282
176
  * @internal
283
177
  */
284
- openChanged(prev, next) {
285
- if (!this.collapsible) return;
286
- if (this.open) {
287
- this.focusAndScrollOptionIntoView();
288
- this.indexWhenOpened = this.selectedIndex;
289
- Updates.enqueue(() => this.focus());
290
- return;
178
+ initialEndChanged(_, newValue) {
179
+ if (newValue && !this.dirtyValue) {
180
+ this.end = newValue;
181
+ this.dirtyValue = false;
291
182
  }
292
- const didClose = prev === true && next === false;
293
- const selectionChangedWhileOpen = this.indexWhenOpened !== this.selectedIndex;
294
- if (didClose && selectionChangedWhileOpen) this.updateValue(true);
295
183
  }
296
184
  /**
297
- * The component is collapsible when in single-selection mode.
298
- *
299
185
  * @internal
300
186
  */
301
- get collapsible() {
302
- return !this.multiple;
187
+ currentEndChanged() {
188
+ this.end = this.currentEnd;
303
189
  }
304
190
  /**
305
- * @internal
306
- */
307
- valueChanged(prev, next) {
308
- const nextSelectedIndex = this.options.findIndex((el) => el.value === next);
309
- const validNextSelectedIndex = this._validSelectedIndex(nextSelectedIndex);
310
- const nextValue = this.options[validNextSelectedIndex]?.value ?? "";
311
- if (this.selectedIndex !== validNextSelectedIndex) this.selectedIndex = validNextSelectedIndex;
312
- if (next !== nextValue) return;
313
- super.valueChanged(prev, next);
314
- this.updateDisplayValue();
315
- }
316
- /**
317
- * Sets the value and display value to match the first selected option.
318
- *
319
- * @param shouldEmit - if true, the input and change events will be emitted
191
+ * The end property, typed as a number.
320
192
  *
321
- * @internal
193
+ * @public
322
194
  */
323
- updateValue(shouldEmit) {
324
- if (this.$fastController.isConnected) this.value = this.firstSelectedOption?.value ?? "";
325
- if (shouldEmit) {
195
+ get endAsNumber() {
196
+ return parseFloat(this.end);
197
+ }
198
+ set endAsNumber(next) {
199
+ this.end = next.toString();
200
+ }
201
+ #updateValues({ start, end }, emitEvents = true) {
202
+ if (start === this.start) start = void 0;
203
+ if (end === this.end) end = void 0;
204
+ if (start === void 0 && end === void 0) return;
205
+ this.#isInternalValueUpdate = true;
206
+ if (start !== void 0) this.start = start;
207
+ if (end !== void 0) this.end = end;
208
+ this.#isInternalValueUpdate = false;
209
+ if (emitEvents) {
210
+ if (start !== void 0) this.$emit("input:start");
211
+ if (end !== void 0) this.$emit("input:end");
326
212
  this.$emit("input");
327
- this.$emit("change", this, {
328
- bubbles: true,
329
- composed: void 0
330
- });
213
+ this.$emit("change");
214
+ this.dirtyValue = true;
331
215
  }
216
+ this.#updateFormValue();
332
217
  }
333
- /**
334
- * Updates the proxy value when the selected index changes.
335
- *
336
- * @param prev - the previous selected index
337
- * @param next - the next selected index
338
- *
339
- * @internal
340
- */
341
- selectedIndexChanged(prev, next) {
342
- super.selectedIndexChanged(prev, next);
343
- this.updateValue();
218
+ #applyStep(thumb, direction) {
219
+ this.#updateValues({ [thumb]: this.#roundToNearestStep(thumb, Number(this[thumb]) + direction * this.step).toString() });
344
220
  }
345
221
  /**
346
- * Handle opening and closing the listbox when the select is clicked.
347
- *
348
- * @param e - the mouse event
349
222
  * @internal
350
223
  */
351
- clickHandler(e) {
352
- if (this.disabled || this._isFromContextualHelp(e)) return;
353
- const clickedOption = e.target.closest(`option,[role=option],[data-vvd-component=option]`);
354
- if (clickedOption && clickedOption.disabled) return;
355
- if (this.multiple) {
356
- this.uncheckAllOptions();
357
- this.activeIndex = this.options.indexOf(clickedOption);
358
- this.checkActiveIndex();
359
- this.toggleSelectedForAllCheckedOptions();
360
- } else super.clickHandler(e);
361
- if (this.collapsible) this.open = !this.open;
362
- return true;
224
+ orientationChanged() {
225
+ if (this.$fastController.isConnected) this.#updateThumbPositions();
363
226
  }
364
227
  /**
365
- * Handles focus state when the element or its children lose focus.
366
- *
367
- * @param e - The focus event
368
228
  * @internal
369
229
  */
370
- focusoutHandler(e) {
371
- if (this.multiple) this.uncheckAllOptions();
372
- if (!this.open) return true;
373
- const focusTarget = e.relatedTarget;
374
- if (this.isSameNode(focusTarget)) {
375
- this.focus();
376
- return;
377
- }
378
- /* v8 ignore else -- @preserve */
379
- if (!this.options.includes(focusTarget)) {
380
- this.open = false;
381
- if (this.indexWhenOpened !== this.selectedIndex) this.updateValue(true);
230
+ nameChanged(previous, next) {
231
+ super.nameChanged(previous, next);
232
+ this.#updateFormValue();
233
+ }
234
+ #updateFormValue() {
235
+ if (!this.name) this.setFormValue(null);
236
+ else {
237
+ const formData = new FormData();
238
+ formData.append(this.name, this.start);
239
+ formData.append(this.name, this.end);
240
+ this.setFormValue(formData);
382
241
  }
383
242
  }
384
- /**
385
- * Updates the value when an option's value changes.
386
- *
387
- * @param source - the source object
388
- * @param propertyName - the property to evaluate
389
- *
390
- * @internal
391
- */
392
- handleChange(source, propertyName) {
393
- super.handleChange(source, propertyName);
394
- if (propertyName === "value") this.updateValue();
243
+ formResetCallback() {
244
+ this.#updateValues({
245
+ start: this.initialStart ?? this.min.toString(),
246
+ end: this.initialEnd ?? this.max.toString()
247
+ });
248
+ super.formResetCallback();
249
+ }
250
+ get #thumbs() {
251
+ return {
252
+ start: this._startThumbEl,
253
+ end: this._endThumbEl
254
+ };
255
+ }
256
+ get #thumbConstraints() {
257
+ return {
258
+ start: {
259
+ min: this.min,
260
+ max: this.endAsNumber
261
+ },
262
+ end: {
263
+ min: this.startAsNumber,
264
+ max: this.max
265
+ }
266
+ };
395
267
  }
396
- /**
397
- * Prevents focus when a scrollbar is clicked.
398
- *
399
- * @param e - the mouse event object
400
- *
401
- * @internal
402
- */
403
- mousedownHandler(e) {
404
- if (e.offsetX >= 0 && e.offsetX <= this.listbox.scrollWidth) return super.mousedownHandler(e);
405
- return this.collapsible;
268
+ #getThumbId(thumb) {
269
+ return thumb === this._startThumbEl ? "start" : "end";
406
270
  }
407
- /**
408
- * @internal
409
- */
410
- multipleChanged(_, next) {
411
- this.options.forEach((o) => {
412
- o.checked = next ? false : void 0;
413
- });
414
- this.setSelectedOptions();
415
- /* v8 ignore if -- @preserve */
416
- if (this.proxy) this.proxy.multiple = next;
271
+ #getThumbIdFromEvent(e) {
272
+ return this.#getThumbId(e.target);
417
273
  }
418
- /**
419
- * Updates the selectedness of each option when the list of selected options changes.
420
- *
421
- * @param prev - the previous list of selected options
422
- * @param next - the current list of selected options
423
- *
424
- * @internal
425
- */
426
- selectedOptionsChanged(prev, next) {
427
- super.selectedOptionsChanged(prev, next);
428
- this.options.forEach((o, i) => {
429
- const proxyOption = this.proxy.options.item(i);
430
- if (proxyOption) proxyOption.selected = o.selected;
431
- });
274
+ #updateThumbPositions() {
275
+ const startOffsetPct = this.#thumbTrackEndOffset(this.startAsNumber);
276
+ const endOffsetPct = this.#thumbTrackEndOffset(this.endAsNumber);
277
+ const [dirProp, dimProp] = this.orientation === Orientation.horizontal ? ["right", "width"] : ["bottom", "height"];
278
+ const transition = `transition: ${this._draggingThumb ? "none" : "all 0.2s ease"};`;
279
+ this._startThumbCss = `${dirProp}: ${startOffsetPct}%; ${transition}`;
280
+ this._endThumbCss = `${dirProp}: ${endOffsetPct}%; ${transition}`;
281
+ this._selectedRangeCss = `${dirProp}: ${endOffsetPct}%; ${dimProp}: ${startOffsetPct - endOffsetPct}%; ${transition}`;
432
282
  }
433
- /**
434
- * Resets and fills the proxy to match the component's options.
435
- *
436
- * @internal
437
- */
438
- setProxyOptions() {
439
- /* v8 ignore else -- @preserve */
440
- if (this.proxy instanceof HTMLSelectElement && this.options) {
441
- this.proxy.length = 0;
442
- this.options.forEach((option) => {
443
- const proxyOption = option.proxy || (option instanceof HTMLOptionElement ? option.cloneNode() : null);
444
- if (proxyOption) this.proxy.options.add(proxyOption);
445
- });
446
- }
283
+ #thumbTrackEndOffset(value) {
284
+ return (1 - inverseLerp(this.min, this.max, value)) * 100;
447
285
  }
448
- /**
449
- * Handles keydown actions when the select is in multiple selection mode.
450
- *
451
- * @internal
452
- */
453
- multipleKeydownHandler(e) {
454
- if (this.disabled) return;
455
- const { key, shiftKey } = e;
456
- this.shouldSkipFocus = false;
457
- switch (key) {
458
- case keyHome:
459
- this.checkFirstOption(shiftKey);
460
- return;
461
- case keyArrowDown:
462
- this.checkNextOption(shiftKey);
463
- return;
464
- case keyArrowUp:
465
- this.checkPreviousOption(shiftKey);
466
- return;
467
- case keyEnd:
468
- this.checkLastOption(shiftKey);
469
- return;
470
- case keyTab:
471
- this.focusAndScrollOptionIntoView();
472
- return;
473
- case keyEscape:
474
- this.uncheckAllOptions();
475
- this.checkActiveIndex();
476
- return;
477
- case keySpace:
478
- e.preventDefault();
479
- /* v8 ignore else -- @preserve */
480
- if (this.typeaheadExpired) {
481
- this.toggleSelectedForAllCheckedOptions();
482
- return;
483
- }
484
- default:
485
- /* v8 ignore else -- @preserve */
486
- if (key.length === 1) this.handleTypeAhead(`${key}`);
487
- return;
488
- }
286
+ #calculateValueFromMouseEvent(e) {
287
+ const trackClientRect = this._trackEl.getBoundingClientRect();
288
+ const [minPos, maxPos, valuePos] = this.orientation === Orientation.horizontal ? [
289
+ this._trackEl.clientLeft,
290
+ this._trackEl.clientWidth,
291
+ e.pageX - document.documentElement.scrollLeft - this.getBoundingClientRect().left
292
+ ] : [
293
+ trackClientRect.top,
294
+ trackClientRect.bottom,
295
+ e.pageY - document.documentElement.scrollTop
296
+ ];
297
+ return lerp(this.min, this.max, inverseLerp(minPos, maxPos, valuePos));
298
+ }
299
+ #roundToNearestStep(thumb, value) {
300
+ return limit(this.#thumbConstraints[thumb].min, this.#thumbConstraints[thumb].max, roundToStepValue(value - this.min, this.step) + this.min);
301
+ }
302
+ #isNonVisibleFocus;
303
+ #focusThumbNonVisibly(thumb) {
304
+ this.#isNonVisibleFocus = true;
305
+ thumb.focus();
306
+ this.#isNonVisibleFocus = false;
489
307
  }
490
308
  /**
491
- * Handle keyboard interaction for the select.
492
- *
493
- * @param e - the keyboard event
494
309
  * @internal
495
310
  */
496
- keydownHandler(e) {
497
- const selectedIndexBefore = this.selectedIndex;
498
- if (this.multiple) this.multipleKeydownHandler(e);
499
- else super.keydownHandler(e);
500
- switch (e.key) {
501
- case keySpace:
502
- e.preventDefault();
503
- if (this.collapsible && this.typeaheadExpired) this.open = !this.open;
504
- break;
505
- case keyHome:
506
- case keyEnd:
507
- e.preventDefault();
508
- break;
509
- case keyEnter:
510
- e.preventDefault();
511
- this.open = !this.open;
512
- break;
513
- case keyEscape:
514
- if (this.collapsible && this.open) {
515
- e.preventDefault();
516
- this.open = false;
517
- }
518
- break;
519
- case keyTab:
520
- if (this.collapsible && this.open) {
521
- e.preventDefault();
522
- this.open = false;
523
- }
524
- return true;
525
- }
526
- if (this.collapsible && !this.open && this.selectedIndex !== selectedIndexBefore) this.updateValue(true);
527
- return !(e.key === keyArrowDown || e.key === keyArrowUp);
311
+ _isThumbPopupOpen(thumb) {
312
+ return this._visiblyFocusedThumb === thumb || this._hoveredThumb === thumb || this._draggingThumb === thumb;
528
313
  }
529
314
  connectedCallback() {
530
315
  super.connectedCallback();
531
- this.addEventListener("focusout", this.focusoutHandler);
532
- this.addEventListener("contentchange", this.updateDisplayValue);
316
+ this.#updateValues({
317
+ start: this.start || this.initialStart || this.min.toString(),
318
+ end: this.end || this.initialEnd || this.max.toString()
319
+ }, false);
320
+ this.#registerThumbListeners();
321
+ this.#updateThumbPositions();
322
+ document.addEventListener("visibilitychange", this.#onVisibilityChange);
533
323
  }
534
324
  disconnectedCallback() {
535
- this.removeEventListener("focusout", this.focusoutHandler);
536
- this.removeEventListener("contentchange", this.updateDisplayValue);
537
325
  super.disconnectedCallback();
538
- }
539
- /**
540
- *
541
- * @internal
542
- */
543
- updateDisplayValue() {
544
- if (this.collapsible) Observable.notify(this, "displayValue");
545
- }
546
- get displayValue() {
547
- Observable.track(this, "displayValue");
548
- return this.firstSelectedOption?.getAttribute("label") ?? this.firstSelectedOption?.text ?? this.placeholder ?? "";
549
- }
550
- _newDefaultSelectedIndex(prev, next, currentSelectIndex) {
551
- const defaultSelectedIndex = super._newDefaultSelectedIndex(prev, next, currentSelectIndex);
552
- if (defaultSelectedIndex === null && currentSelectIndex === -1 && !this.placeholder) {
553
- const firstSelectableIndex = this.getNextSelectableIndex(0);
554
- if (firstSelectableIndex !== -1) return firstSelectableIndex;
326
+ this.#unregisterThumbListeners();
327
+ this.#unregisterDragListeners();
328
+ document.removeEventListener("visibilitychange", this.#onVisibilityChange);
329
+ }
330
+ #registerThumbListeners() {
331
+ for (const thumb of ["start", "end"]) {
332
+ this.#thumbs[thumb].addEventListener("keydown", this.#onThumbKeydown);
333
+ this.#thumbs[thumb].addEventListener("mousedown", this.#onThumbMousedown, { passive: true });
334
+ this.#thumbs[thumb].addEventListener("touchstart", this.#onThumbMousedown, { passive: true });
335
+ this.#thumbs[thumb].addEventListener("mouseover", this.#onMouseOver, { passive: true });
336
+ this.#thumbs[thumb].addEventListener("mouseout", this.#onMouseOut, { passive: true });
337
+ this.#thumbs[thumb].addEventListener("focus", this.#onThumbFocus);
338
+ this.#thumbs[thumb].addEventListener("blur", this.#onThumbBlur);
555
339
  }
556
- return defaultSelectedIndex;
557
- }
558
- _isDefaultSelected(option) {
559
- return super._isDefaultSelected(option) || option.value === this.initialValue || !this._isResetting && option.value === this.value;
560
340
  }
561
- slottedOptionsChanged(prev, next) {
562
- this.options.forEach((o) => {
563
- Observable.getNotifier(o).unsubscribe(this, "value");
564
- });
565
- super.slottedOptionsChanged(prev, next);
566
- this.options.forEach((o) => {
567
- Observable.getNotifier(o).subscribe(this, "value");
568
- });
569
- this.setProxyOptions();
570
- this.updateValue();
571
- const scale = this.getAttribute("scale") || this.scale;
572
- next.forEach((element) => {
573
- if (scale) {
574
- element.setAttribute("scale", scale);
575
- element.scale = scale;
576
- }
577
- });
578
- this.proxy.value = this.value;
579
- this.validate();
580
- }
581
- formResetCallback() {
582
- this.setProxyOptions();
583
- this._isResetting = true;
584
- this.selectedIndex = this._newDefaultSelectedIndex([], this.options, -1) ?? -1;
585
- this._isResetting = false;
586
- }
587
- /**
588
- * @internal
589
- */
590
- get _shouldShowClearButton() {
591
- if (!this.clearable) return false;
592
- if (this.multiple) return this.selectedOptions?.length > 0;
593
- return this.value !== "";
594
- }
595
- /**
596
- * @internal
597
- */
598
- _onClearButtonFocus() {
599
- this._isClearButtonFocused = true;
600
- this.activeIndex = -1;
601
- this.uncheckAllOptions();
602
- }
603
- /**
604
- * @internal
605
- */
606
- _onClearButtonBlur() {
607
- this._isClearButtonFocused = false;
608
- }
609
- /**
610
- * @internal
611
- */
612
- get _shouldShowLabelWrapper() {
613
- return Boolean(this.label || this._hasContextualHelp || this.multiple && this._shouldShowClearButton);
341
+ #unregisterThumbListeners() {
342
+ for (const thumb of ["start", "end"]) {
343
+ this.#thumbs[thumb].removeEventListener("keydown", this.#onThumbKeydown);
344
+ this.#thumbs[thumb].removeEventListener("mousedown", this.#onThumbMousedown);
345
+ this.#thumbs[thumb].removeEventListener("touchstart", this.#onThumbMousedown);
346
+ this.#thumbs[thumb].removeEventListener("mouseover", this.#onMouseOver);
347
+ this.#thumbs[thumb].removeEventListener("mouseout", this.#onMouseOut);
348
+ this.#thumbs[thumb].removeEventListener("focus", this.#onThumbFocus);
349
+ this.#thumbs[thumb].removeEventListener("blur", this.#onThumbBlur);
350
+ }
614
351
  }
615
352
  /**
616
353
  * @internal
617
354
  */
618
- _onClearButtonClick() {
619
- if (this.multiple) this.selectedOptions?.forEach((o) => {
620
- /* v8 ignore else -- @preserve */
621
- if (!o.disabled) o.selected = false;
622
- });
623
- else this.selectedIndex = -1;
624
- this.updateValue(true);
625
- }
355
+ _onMouseDown(e) {
356
+ if (this.disabled || this._draggingThumb) return;
357
+ const value = this.#calculateValueFromMouseEvent(e);
358
+ const startDistance = Math.abs(value - Number(this.start));
359
+ const endDistance = Math.abs(value - Number(this.end));
360
+ const thumb = startDistance < endDistance || startDistance === endDistance && value < Number(this.start) ? "start" : "end";
361
+ this.#updateValues({ [thumb]: `${this.#roundToNearestStep(thumb, value)}` });
362
+ this._draggingThumb = thumb;
363
+ this.#focusThumbNonVisibly(this.#thumbs[thumb]);
364
+ this.#registerDragHandlers();
365
+ }
366
+ #onThumbFocus;
367
+ #onThumbBlur;
368
+ #onVisibilityChange;
369
+ #onMouseOver;
370
+ #onMouseOut;
371
+ #onThumbMousedown;
372
+ #onThumbKeydown;
373
+ #registerDragHandlers() {
374
+ window.addEventListener("mousemove", this.#onDragMove, { passive: true });
375
+ window.addEventListener("touchmove", this.#onDragMove, { passive: true });
376
+ window.addEventListener("mouseup", this.#onDragEnd);
377
+ window.addEventListener("touchend", this.#onDragEnd);
378
+ window.document.addEventListener("mouseleave", this.#onDragEnd);
379
+ }
380
+ #unregisterDragListeners() {
381
+ window.removeEventListener("mouseup", this.#onDragEnd);
382
+ window.document.removeEventListener("mouseleave", this.#onDragEnd);
383
+ window.removeEventListener("mousemove", this.#onDragMove);
384
+ window.removeEventListener("touchmove", this.#onDragMove);
385
+ window.removeEventListener("touchend", this.#onDragEnd);
386
+ }
387
+ #onDragMove;
388
+ #onDragEnd;
626
389
  };
627
- __decorate([observable], Select.prototype, "activeIndex", void 0);
628
- __decorate([attr({ mode: "boolean" })], Select.prototype, "multiple", void 0);
390
+ __decorate([observable], RangeSlider.prototype, "start", void 0);
629
391
  __decorate([attr({
630
- attribute: "open",
631
- mode: "boolean"
632
- })], Select.prototype, "open", void 0);
633
- __decorate([volatile], Select.prototype, "collapsible", null);
634
- __decorate([observable], Select.prototype, "control", void 0);
635
- __decorate([observable], Select.prototype, "maxHeight", void 0);
636
- __decorate([observable], Select.prototype, "_anchor", void 0);
637
- __decorate([attr()], Select.prototype, "scale", void 0);
638
- __decorate([attr], Select.prototype, "appearance", void 0);
639
- __decorate([attr], Select.prototype, "shape", void 0);
392
+ mode: "fromView",
393
+ attribute: "start"
394
+ })], RangeSlider.prototype, "initialStart", void 0);
395
+ __decorate([attr({ attribute: "current-start" })], RangeSlider.prototype, "currentStart", void 0);
396
+ __decorate([observable], RangeSlider.prototype, "end", void 0);
640
397
  __decorate([attr({
641
- mode: "boolean",
642
- attribute: "fixed-dropdown"
643
- })], Select.prototype, "fixedDropdown", void 0);
644
- __decorate([attr], Select.prototype, "placeholder", void 0);
645
- __decorate([observable], Select.prototype, "_feedbackWrapper", void 0);
646
- __decorate([observable], Select.prototype, "metaSlottedContent", void 0);
647
- __decorate([attr({ mode: "boolean" })], Select.prototype, "clearable", void 0);
648
- __decorate([observable], Select.prototype, "_isClearButtonFocused", void 0);
398
+ mode: "fromView",
399
+ attribute: "end"
400
+ })], RangeSlider.prototype, "initialEnd", void 0);
401
+ __decorate([attr({ attribute: "current-end" })], RangeSlider.prototype, "currentEnd", void 0);
402
+ __decorate([attr({ converter: nullableNumberConverter })], RangeSlider.prototype, "min", void 0);
403
+ __decorate([attr({ converter: nullableNumberConverter })], RangeSlider.prototype, "max", void 0);
404
+ __decorate([attr({ converter: defaultToOneConverter })], RangeSlider.prototype, "step", void 0);
405
+ __decorate([attr], RangeSlider.prototype, "orientation", void 0);
406
+ __decorate([attr({ attribute: "aria-start-label" })], RangeSlider.prototype, "ariaStartLabel", void 0);
407
+ __decorate([attr({ attribute: "aria-end-label" })], RangeSlider.prototype, "ariaEndLabel", void 0);
408
+ __decorate([attr({ mode: "boolean" })], RangeSlider.prototype, "markers", void 0);
409
+ __decorate([attr], RangeSlider.prototype, "connotation", void 0);
410
+ __decorate([attr({ mode: "boolean" })], RangeSlider.prototype, "pin", void 0);
411
+ __decorate([observable], RangeSlider.prototype, "valueTextFormatter", void 0);
412
+ __decorate([observable], RangeSlider.prototype, "_draggingThumb", void 0);
413
+ __decorate([observable], RangeSlider.prototype, "_visiblyFocusedThumb", void 0);
414
+ __decorate([observable], RangeSlider.prototype, "_hoveredThumb", void 0);
415
+ __decorate([observable], RangeSlider.prototype, "_startThumbCss", void 0);
416
+ __decorate([observable], RangeSlider.prototype, "_endThumbCss", void 0);
417
+ __decorate([observable], RangeSlider.prototype, "_selectedRangeCss", void 0);
649
418
  //#endregion
650
- //#region src/lib/select/select.template.ts
651
- var getStateClasses = ({ shape, disabled, appearance, metaSlottedContent, errorValidationMessage, successText, placeholder, value, scale, _activeDescendant, open }) => classNames(["has-activedescendant", Boolean(_activeDescendant) && open], ["disabled", disabled], [`appearance-${appearance}`, Boolean(appearance)], [`shape-${shape}`, Boolean(shape)], ["has-meta", Boolean(metaSlottedContent?.length)], ["error", Boolean(errorValidationMessage)], ["success", !!successText], ["shows-placeholder", Boolean(placeholder) && !value], [`size-${scale}`, Boolean(scale)]);
652
- function renderLabel() {
653
- return html` <label
654
- for="${(x) => x.multiple ? null : "control"}"
655
- class="label"
656
- id="label"
657
- >
658
- ${(x) => x.label}
659
- </label>`;
660
- }
661
- function renderPlaceholder(context) {
662
- const optionTag = context.tagFor(ListboxOption);
663
- return html`
664
- <${optionTag} text="${(x) => x.placeholder}" hidden disabled>
665
- </${optionTag}>`;
666
- }
667
- function renderClearButton(context) {
668
- const buttonTag = context.tagFor(Button);
669
- return html`
670
- <${buttonTag}
671
- aria-label="${(x) => x.locale.select.clearButtonLabel}"
672
- aria-hidden="${(x) => x._isClearButtonFocused ? "false" : "true"}"
673
- @click="${(x, c) => {
674
- x._onClearButtonClick();
675
- c.event.stopPropagation();
676
- }}"
677
- @mousedown="${() => false}"
678
- @keydown="${(x, c) => {
679
- /* v8 ignore next -- @preserve */
680
- if (c.event.key === "Tab") x._onClearButtonBlur();
681
- c.event.stopPropagation();
682
- return true;
683
- }}"
684
- @focusin="${(x, c) => {
685
- c.event.stopPropagation();
686
- x._onClearButtonFocus();
687
- }}"
688
- @focusout="${(x) => x._onClearButtonBlur()}"
689
- ?disabled="${(x) => x.disabled}"
690
- :shape="${(x) => x.shape}"
691
- size="super-condensed"
692
- icon="close-line"
693
- appearance="ghost-light"
694
- class="clear-button"
695
- tabindex="0"
696
- ></${buttonTag}>
697
- `;
698
- }
699
- function selectValue(context) {
700
- const affixIconTemplate = affixIconTemplateFactory(context);
701
- const chevronTemplate = chevronTemplateFactory(context);
702
- return html` <div
703
- class="control ${getStateClasses}"
704
- ${ref("_anchor")}
705
- id="control"
706
- ?disabled="${(x) => x.disabled}"
707
- >
708
- <div class="selected-value">
709
- ${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)}
710
- <span class="text">${(x) => x.displayValue}</span>
711
- <slot name="meta" ${slotted("metaSlottedContent")}></slot>
712
- </div>
713
- ${when((x) => x._shouldShowClearButton, renderClearButton(context))}
714
- ${chevronTemplate}
715
- </div>`;
716
- }
717
- function setFixedDropdownVarWidth(x) {
718
- return x.open && x.fixedDropdown ? `--_select-fixed-width: ${Math.round(x.getBoundingClientRect().width)}px` : null;
719
- }
720
- /**
721
- * @param context - element definition context
722
- */
723
- function renderControl(context) {
419
+ //#region src/lib/range-slider/range-slider.template.ts
420
+ var getClasses = ({ disabled, connotation }) => classNames("control", ["disabled", Boolean(disabled)], [`connotation-${connotation}`, Boolean(connotation)]);
421
+ var getThumbClassesFor = (thumb) => ({ _visiblyFocusedThumb }) => classNames("thumb-container", ["focus-visible", _visiblyFocusedThumb === thumb]);
422
+ var RangeSliderTemplate = (context) => {
724
423
  const popupTag = context.tagFor(Popup);
725
- return html`
726
- <div class="label-wrapper" ?hidden=${(x) => !x._shouldShowLabelWrapper}>
727
- ${when((x) => x.label, renderLabel())}
728
- ${when((x) => x.multiple && x._shouldShowClearButton, renderClearButton(context))}
729
- <slot name="contextual-help" ${slotted("_contextualHelpSlottedContent")}></slot>
730
- </div>
731
- <div class="control-wrapper">
732
- ${when((x) => !x.multiple, selectValue(context))}
733
- <${popupTag} class="popup"
734
- style="${setFixedDropdownVarWidth}"
735
- ?open="${(x) => x.collapsible ? x.open : true}"
736
- :anchor="${(x) => x._anchor}"
737
- placement="bottom-start"
738
- strategy="${(x) => x.fixedDropdown ? null : "absolute"}">
739
- <div class="listbox"
740
- id="${(x) => x.listboxId}"
741
- role="listbox"
742
- aria-multiselectable="${(x) => x.multiple}"
743
- aria-label="${(x) => x.multiple && !x.label && x.ariaLabel ? x.ariaLabel : null}"
744
- aria-labelledby="${(x) => x.multiple && x.label ? "label" : null}"
745
- ?disabled="${(x) => x.disabled}"
746
- ?hidden="${(x) => x.collapsible ? !x.open : false}"
747
- ${ref("listbox")}>
748
- ${when((x) => x.placeholder, renderPlaceholder(context))}
749
- <slot
750
- ${slotted({
751
- filter: Listbox.slottedOptionFilter,
752
- flatten: true,
753
- property: "slottedOptions"
754
- })}>
755
- </slot>
756
- </div>
757
- </${popupTag}>
758
- </div>
759
- `;
760
- }
761
- /**
762
- * Ignore events that originate from feedback, e.g. a click on link
763
- */
764
- function ifNotFromFeedback(handler) {
765
- return (x, c) => {
766
- if (!c.event.composedPath().includes(x._feedbackWrapper)) return handler(x, c.event);
767
- return true;
768
- };
769
- }
770
- var SelectTemplate = (context) => {
771
- return html`
772
- <template
773
- ${applyHostSemantics({
774
- role: "combobox",
775
- ariaLabel: (x) => x.ariaLabel ?? x.label,
776
- ariaHasPopup: (x) => x.collapsible ? "listbox" : "false",
777
- ariaExpanded: (x) => x.open,
778
- ariaDisabled: (x) => x.disabled
779
- })}
780
- aria-controls="${(x) => x.listboxId}"
781
- aria-activedescendant="${(x) => x.open ? x._activeDescendant : null}"
782
- aria-describedby="${(x) => x._feedbackDescribedBy}"
783
- tabindex="${(x) => !x.disabled ? "0" : null}"
784
- @click="${ifNotFromFeedback((x, e) => x.clickHandler(e))}"
785
- @focusin="${ifNotFromFeedback((x, e) => x.focusinHandler(e))}"
786
- @focusout="${ifNotFromFeedback((x, e) => x.focusoutHandler(e))}"
787
- @keydown="${ifNotFromFeedback((x, e) => {
788
- x.open && handleEscapeKeyAndStopPropogation(e);
789
- return x.keydownHandler(e);
790
- })}"
791
- @mousedown="${ifNotFromFeedback((x, e) => x.mousedownHandler(e))}"
792
- >
793
- ${renderControl(context)}
794
- <div class="feedback-wrapper" ${ref("_feedbackWrapper")}>
795
- ${(x) => x._getFeedbackTemplate(context)}
424
+ return html` <template
425
+ @mousedown="${(x, c) => x._onMouseDown(c.event)}"
426
+ >
427
+ <div class="${getClasses} ${(x) => x.orientation}">
428
+ <div class="positioning-region">
429
+ <div ${ref("_trackEl")} class="track">
430
+ <div class="track-start" style="${(x) => x._selectedRangeCss}"></div>
431
+ ${when((x) => x.markers, html`${(x) => getMarkersTemplate(x.orientation === Orientation.horizontal, Math.floor((x.max - x.min) / x.step))}`)}
432
+ </div>
433
+ <div
434
+ id="start-thumb"
435
+ ${ref("_startThumbEl")}
436
+ class="${getThumbClassesFor("start")}"
437
+ style="${(x) => x._startThumbCss}"
438
+ role="slider"
439
+ tabindex="${(x) => x.disabled ? null : 0}"
440
+ aria-label="${(x) => x.ariaStartLabel || x.locale.rangeSlider.startThumbLabel}"
441
+ aria-valuetext="${(x) => x.valueTextFormatter(x.start)}"
442
+ aria-valuenow="${(x) => x.start}"
443
+ aria-valuemin="${(x) => x.min}"
444
+ aria-valuemax="${(x) => x.end}"
445
+ aria-disabled="${(x) => x.disabled}"
446
+ aria-orientation="${(x) => x.orientation}"
447
+ ></div>
448
+ ${when((x) => x.pin, html`<${popupTag}
449
+ class="popup"
450
+ arrow
451
+ alternate
452
+ :anchor="${(x) => x._startThumbEl}"
453
+ :open=${(x) => x._isThumbPopupOpen("start")}
454
+ :placementStrategy=${(x) => x.orientation === Orientation.horizontal ? PlacementStrategy.AutoPlacementHorizontal : PlacementStrategy.AutoPlacementVertical}
455
+ animation-frame
456
+ exportparts="vvd-theme-alternate"
457
+ aria-hidden="true"
458
+ >
459
+ <div class="tooltip">${(x) => x.valueTextFormatter(x.start)}</div>
460
+ </${popupTag}>`)}
461
+ <div
462
+ id="end-thumb"
463
+ ${ref("_endThumbEl")}
464
+ class="${getThumbClassesFor("end")}"
465
+ style="${(x) => x._endThumbCss}"
466
+ role="slider"
467
+ tabindex="${(x) => x.disabled ? null : 0}"
468
+ aria-label="${(x) => x.ariaEndLabel || x.locale.rangeSlider.endThumbLabel}"
469
+ aria-valuetext="${(x) => x.valueTextFormatter(x.end)}"
470
+ aria-valuenow="${(x) => x.end}"
471
+ aria-valuemin="${(x) => x.start}"
472
+ aria-valuemax="${(x) => x.max}"
473
+ aria-disabled="${(x) => x.disabled}"
474
+ aria-orientation="${(x) => x.orientation}"
475
+ ></div>
476
+ ${when((x) => x.pin, html`<${popupTag}
477
+ class="popup"
478
+ arrow
479
+ alternate
480
+ :anchor="${(x) => x._endThumbEl}"
481
+ :open=${(x) => x._isThumbPopupOpen("end")}
482
+ :placementStrategy=${(x) => x.orientation === Orientation.horizontal ? PlacementStrategy.AutoPlacementHorizontal : PlacementStrategy.AutoPlacementVertical}
483
+ animation-frame
484
+ exportparts="vvd-theme-alternate"
485
+ aria-hidden="true"
486
+ >
487
+ <div class="tooltip">${(x) => x.valueTextFormatter(x.end)}</div>
488
+ </${popupTag}>`)}
796
489
  </div>
797
- </template>
798
- `;
490
+ </div>
491
+ </template>`;
799
492
  };
800
493
  //#endregion
801
- //#region src/lib/select/definition.ts
494
+ //#region src/lib/range-slider/definition.ts
802
495
  /**
803
496
  * @internal
804
497
  */
805
- var selectDefinition = defineVividComponent("select", Select, SelectTemplate, [
806
- popupDefinition,
807
- iconDefinition,
808
- listboxOptionDefinition,
809
- buttonDefinition,
810
- feedbackMessageDefinition
811
- ], { styles: select_default });
498
+ var rangeSliderDefinition = defineVividComponent("range-slider", RangeSlider, RangeSliderTemplate, [popupDefinition], {
499
+ styles: range_slider_default,
500
+ shadowOptions: { delegatesFocus: true }
501
+ });
812
502
  /**
813
- * Registers the select elements with the design system.
503
+ * Registers the range-slider element with the design system.
814
504
  *
815
505
  * @param prefix - the prefix to use for the component name
816
506
  */
817
- var registerSelect = createRegisterFunction(selectDefinition);
507
+ var registerRangeSlider = createRegisterFunction(rangeSliderDefinition);
818
508
  //#endregion
819
- export { selectDefinition as n, Select as r, registerSelect as t };
509
+ export { registerRangeSlider as n, RangeSlider as r, rangeSliderDefinition as t };