@vonage/vivid 5.19.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 (648) hide show
  1. package/accordion/definition.cjs +1 -1
  2. package/accordion/definition.js +1 -1
  3. package/accordion/index.cjs +2 -2
  4. package/accordion/index.js +2 -2
  5. package/accordion-item/definition.cjs +1 -1
  6. package/accordion-item/definition.js +1 -1
  7. package/action-group/definition.cjs +1 -1
  8. package/action-group/definition.js +1 -1
  9. package/action-group/index.cjs +2 -2
  10. package/action-group/index.js +2 -2
  11. package/alert/index.cjs +5 -5
  12. package/alert/index.js +8 -8
  13. package/audio-player/index.cjs +10 -10
  14. package/audio-player/index.js +28 -28
  15. package/avatar/index.cjs +7 -7
  16. package/avatar/index.js +14 -14
  17. package/banner/index.cjs +5 -5
  18. package/banner/index.js +9 -9
  19. package/breadcrumb/index.cjs +2 -2
  20. package/breadcrumb/index.js +3 -3
  21. package/breadcrumb-item/index.cjs +5 -5
  22. package/breadcrumb-item/index.js +1 -1
  23. package/bundled/affix.cjs +2 -2
  24. package/bundled/affix.js +11 -11
  25. package/bundled/anchored.cjs +1 -1
  26. package/bundled/anchored.js +6 -6
  27. package/bundled/aria-binding-directive.cjs +1 -1
  28. package/bundled/aria-binding-directive.js +88 -16
  29. package/bundled/base-color-picker.cjs +3 -3
  30. package/bundled/base-color-picker.js +5 -5
  31. package/bundled/base-progress.cjs +1 -1
  32. package/bundled/base-progress.js +3 -3
  33. package/bundled/breadcrumb-item.cjs +1 -1
  34. package/bundled/breadcrumb-item.js +3 -3
  35. package/bundled/button.cjs +1 -1
  36. package/bundled/button.js +3 -3
  37. package/bundled/calendar-event.cjs +1 -1
  38. package/bundled/calendar-event.js +4 -4
  39. package/bundled/calendar-picker.template.cjs +23 -24
  40. package/bundled/calendar-picker.template.js +35 -36
  41. package/bundled/char-count.cjs +2 -2
  42. package/bundled/char-count.js +8 -8
  43. package/bundled/children.cjs +1 -1
  44. package/bundled/children.js +11 -13
  45. package/bundled/definition.cjs +1 -1
  46. package/bundled/definition.js +2 -2
  47. package/bundled/definition10.cjs +3 -3
  48. package/bundled/definition10.js +5 -5
  49. package/bundled/definition11.cjs +2 -2
  50. package/bundled/definition11.js +7 -7
  51. package/bundled/definition12.cjs +15 -16
  52. package/bundled/definition12.js +22 -22
  53. package/bundled/definition13.cjs +3 -3
  54. package/bundled/definition13.js +5 -5
  55. package/bundled/definition14.cjs +2 -2
  56. package/bundled/definition14.js +2 -2
  57. package/bundled/definition15.cjs +7 -8
  58. package/bundled/definition15.js +14 -14
  59. package/bundled/definition16.cjs +3 -3
  60. package/bundled/definition16.js +8 -8
  61. package/bundled/definition17.cjs +7 -7
  62. package/bundled/definition17.js +13 -13
  63. package/bundled/definition18.cjs +18 -18
  64. package/bundled/definition18.js +36 -36
  65. package/bundled/definition19.cjs +2 -2
  66. package/bundled/definition19.js +1 -1
  67. package/bundled/definition2.cjs +10 -9
  68. package/bundled/definition2.js +24 -24
  69. package/bundled/definition20.cjs +19 -14
  70. package/bundled/definition20.js +51 -39
  71. package/bundled/definition21.cjs +6 -6
  72. package/bundled/definition21.js +18 -18
  73. package/bundled/definition22.cjs +3 -3
  74. package/bundled/definition22.js +7 -7
  75. package/bundled/definition23.cjs +4 -4
  76. package/bundled/definition23.js +8 -8
  77. package/bundled/definition24.cjs +8 -8
  78. package/bundled/definition24.js +17 -17
  79. package/bundled/definition3.cjs +1 -1
  80. package/bundled/definition3.js +5 -5
  81. package/bundled/definition4.cjs +9 -9
  82. package/bundled/definition4.js +16 -16
  83. package/bundled/definition5.cjs +4 -4
  84. package/bundled/definition5.js +5 -5
  85. package/bundled/definition6.cjs +6 -6
  86. package/bundled/definition6.js +21 -21
  87. package/bundled/definition7.cjs +2 -2
  88. package/bundled/definition7.js +4 -4
  89. package/bundled/definition8.cjs +4 -4
  90. package/bundled/definition8.js +7 -7
  91. package/bundled/definition9.cjs +10 -6
  92. package/bundled/definition9.js +48 -34
  93. package/bundled/delegates-aria.cjs +1 -1
  94. package/bundled/delegates-aria.js +20 -9
  95. package/bundled/divider.cjs +1 -1
  96. package/bundled/divider.js +3 -3
  97. package/bundled/form-associated.cjs +1 -1
  98. package/bundled/form-associated.js +6 -6
  99. package/bundled/form-element.cjs +1 -1
  100. package/bundled/form-element.js +1 -1
  101. package/bundled/host-semantics.cjs +1 -1
  102. package/bundled/host-semantics.js +2 -1
  103. package/bundled/kbd-shortcut.cjs +1 -0
  104. package/bundled/kbd-shortcut.js +14 -0
  105. package/bundled/linkable.cjs +2 -2
  106. package/bundled/linkable.js +5 -5
  107. package/bundled/listbox.cjs +1 -1
  108. package/bundled/listbox.js +4 -4
  109. package/bundled/localized.cjs +1 -1
  110. package/bundled/localized.js +3 -2
  111. package/bundled/mixins.cjs +16 -16
  112. package/bundled/mixins.js +39 -105
  113. package/bundled/picker-field.template.cjs +6 -6
  114. package/bundled/picker-field.template.js +15 -15
  115. package/bundled/platform.cjs +1 -0
  116. package/bundled/platform.js +9 -0
  117. package/bundled/ref.cjs +1 -1
  118. package/bundled/ref.js +2 -2
  119. package/bundled/render-in-light-dom.cjs +1 -0
  120. package/bundled/render-in-light-dom.js +57 -0
  121. package/bundled/repeat.cjs +1 -1
  122. package/bundled/repeat.js +117 -107
  123. package/bundled/slider.template.cjs +3 -3
  124. package/bundled/slider.template.js +1 -1
  125. package/bundled/slotted.cjs +1 -1
  126. package/bundled/slotted.js +2 -2
  127. package/bundled/time-selection-picker.template.cjs +4 -4
  128. package/bundled/time-selection-picker.template.js +18 -18
  129. package/bundled/vivid-element.cjs +3 -3
  130. package/bundled/vivid-element.js +626 -550
  131. package/bundled/when.cjs +1 -1
  132. package/bundled/when.js +2 -2
  133. package/bundled/with-contextual-help.cjs +1 -1
  134. package/bundled/with-contextual-help.js +1 -1
  135. package/bundled/with-error-text.cjs +1 -1
  136. package/bundled/with-error-text.js +1 -1
  137. package/bundled/with-success-text.cjs +1 -1
  138. package/bundled/with-success-text.js +1 -1
  139. package/calendar/index.cjs +8 -8
  140. package/calendar/index.js +9 -9
  141. package/calendar-event/index.cjs +4 -4
  142. package/calendar-event/index.js +1 -1
  143. package/card/index.cjs +24 -25
  144. package/card/index.js +29 -30
  145. package/color-picker/index.cjs +26 -26
  146. package/color-picker/index.js +90 -90
  147. package/combobox/index.cjs +13 -13
  148. package/combobox/index.js +22 -22
  149. package/country-group/index.cjs +4 -4
  150. package/country-group/index.js +3 -3
  151. package/custom-elements.json +940 -112
  152. package/data-grid/index.cjs +34 -34
  153. package/data-grid/index.js +37 -38
  154. package/date-picker/definition.cjs +1 -1
  155. package/date-picker/definition.js +1 -1
  156. package/date-picker/index.cjs +1 -1
  157. package/date-picker/index.js +2 -2
  158. package/date-range-picker/definition.cjs +1 -1
  159. package/date-range-picker/definition.js +1 -1
  160. package/date-range-picker/index.cjs +1 -1
  161. package/date-range-picker/index.js +4 -4
  162. package/date-time-picker/definition.cjs +1 -1
  163. package/date-time-picker/definition.js +1 -1
  164. package/date-time-picker/index.cjs +2 -2
  165. package/date-time-picker/index.js +6 -6
  166. package/dial-pad/definition.cjs +1 -1
  167. package/dial-pad/definition.js +1 -1
  168. package/dial-pad/index.cjs +8 -8
  169. package/dial-pad/index.js +15 -15
  170. package/dialog/definition.cjs +1 -1
  171. package/dialog/definition.js +1 -1
  172. package/dialog/index.cjs +16 -17
  173. package/dialog/index.js +29 -27
  174. package/divider/definition.cjs +1 -1
  175. package/divider/definition.js +1 -1
  176. package/empty-state/definition.cjs +1 -1
  177. package/empty-state/definition.js +1 -1
  178. package/empty-state/index.cjs +5 -5
  179. package/empty-state/index.js +9 -9
  180. package/fab/definition.cjs +1 -1
  181. package/fab/definition.js +1 -1
  182. package/fab/index.cjs +2 -2
  183. package/fab/index.js +6 -6
  184. package/file-picker/definition.cjs +1 -1
  185. package/file-picker/definition.js +1 -1
  186. package/file-picker/index.cjs +9 -10
  187. package/file-picker/index.js +21 -22
  188. package/flag/index.cjs +3 -3
  189. package/flag/index.js +7 -7
  190. package/header/definition.cjs +1 -1
  191. package/header/definition.js +1 -1
  192. package/header/index.cjs +2 -2
  193. package/header/index.js +8 -8
  194. package/icon/definition.cjs +1 -1
  195. package/icon/definition.js +1 -1
  196. package/index.cjs +184 -172
  197. package/index.js +52 -49
  198. package/kbd-key/definition.cjs +5 -0
  199. package/kbd-key/definition.js +2 -0
  200. package/kbd-key/index.cjs +5 -0
  201. package/kbd-key/index.js +65 -0
  202. package/kbd-shortcut/definition.cjs +5 -0
  203. package/kbd-shortcut/definition.js +2 -0
  204. package/kbd-shortcut/index.cjs +3 -0
  205. package/kbd-shortcut/index.js +27 -0
  206. package/layout/definition.cjs +1 -1
  207. package/layout/definition.js +1 -1
  208. package/layout/index.cjs +2 -2
  209. package/layout/index.js +2 -2
  210. package/lib/accordion-item/accordion-item.d.ts +18 -1
  211. package/lib/action-group/action-group.d.ts +18 -1
  212. package/lib/alert/alert.d.ts +36 -2
  213. package/lib/audio-player/audio-player.d.ts +18 -1
  214. package/lib/avatar/avatar.d.ts +18 -1
  215. package/lib/badge/badge.d.ts +18 -1
  216. package/lib/banner/banner.d.ts +54 -3
  217. package/lib/breadcrumb/breadcrumb.d.ts +18 -1
  218. package/lib/breadcrumb-item/breadcrumb-item.d.ts +18 -1
  219. package/lib/button/button.d.ts +54 -3
  220. package/lib/calendar-event/calendar-event.d.ts +18 -1
  221. package/lib/card/card.d.ts +18 -1
  222. package/lib/checkbox/checkbox.d.ts +107 -5
  223. package/lib/color-picker/color-picker.d.ts +126 -7
  224. package/lib/combobox/combobox.d.ts +124 -5
  225. package/lib/components.d.ts +4 -1
  226. package/lib/country-group/country-group.d.ts +36 -2
  227. package/lib/data-grid/data-grid-cell.d.ts +36 -2
  228. package/lib/data-grid/data-grid-row.d.ts +18 -1
  229. package/lib/date-picker/date-picker.d.ts +140 -4
  230. package/lib/date-range-picker/date-range-picker.d.ts +70 -2
  231. package/lib/date-time-picker/date-time-picker.d.ts +140 -4
  232. package/lib/dial-pad/dial-pad.d.ts +18 -1
  233. package/lib/dialog/dialog.d.ts +36 -2
  234. package/lib/divider/divider.d.ts +18 -1
  235. package/lib/fab/fab.d.ts +18 -1
  236. package/lib/file-picker/file-picker.d.ts +124 -5
  237. package/lib/header/header.d.ts +18 -1
  238. package/lib/icon/icon.template.d.ts +1 -2
  239. package/lib/kbd-key/definition.d.ts +4 -0
  240. package/lib/kbd-key/index.d.ts +1 -0
  241. package/lib/kbd-key/kbd-key.d.ts +18 -0
  242. package/lib/kbd-key/kbd-key.template.d.ts +4 -0
  243. package/lib/kbd-shortcut/definition.d.ts +3 -0
  244. package/lib/kbd-shortcut/index.d.ts +1 -0
  245. package/lib/kbd-shortcut/kbd-shortcut.d.ts +4 -0
  246. package/lib/kbd-shortcut/kbd-shortcut.template.d.ts +4 -0
  247. package/lib/menu/menu.d.ts +35 -1
  248. package/lib/menu-item/menu-item.d.ts +463 -2
  249. package/lib/nav/nav.d.ts +18 -1
  250. package/lib/nav-disclosure/nav-disclosure.d.ts +36 -2
  251. package/lib/nav-item/nav-item.d.ts +36 -2
  252. package/lib/note/note.d.ts +18 -1
  253. package/lib/number-field/number-field.d.ts +160 -7
  254. package/lib/option/option.d.ts +36 -2
  255. package/lib/pagination/pagination.d.ts +18 -1
  256. package/lib/platform-switch/definition.d.ts +3 -0
  257. package/lib/platform-switch/index.d.ts +1 -0
  258. package/lib/platform-switch/platform-switch.d.ts +4 -0
  259. package/lib/platform-switch/platform-switch.template.d.ts +4 -0
  260. package/lib/popover/popover.d.ts +36 -2
  261. package/lib/progress/progress.d.ts +18 -1
  262. package/lib/progress-ring/progress-ring.d.ts +18 -1
  263. package/lib/radio/radio.d.ts +53 -2
  264. package/lib/radio-group/radio-group.d.ts +18 -1
  265. package/lib/range-slider/range-slider.d.ts +52 -1
  266. package/lib/rich-text-editor/locale.d.ts +1 -0
  267. package/lib/rich-text-editor/popover.d.ts +1 -0
  268. package/lib/rich-text-editor/rich-text-editor.d.ts +17 -0
  269. package/lib/rich-text-editor/rte/utils/ui.d.ts +1 -0
  270. package/lib/searchable-select/option-tag.d.ts +18 -1
  271. package/lib/searchable-select/searchable-select.d.ts +160 -7
  272. package/lib/select/select.d.ts +160 -7
  273. package/lib/selectable-box/selectable-box.d.ts +18 -1
  274. package/lib/simple-color-picker/simple-color-picker.d.ts +35 -1
  275. package/lib/slider/slider.d.ts +53 -2
  276. package/lib/split-button/split-button.d.ts +54 -3
  277. package/lib/status/status.d.ts +18 -1
  278. package/lib/switch/switch.d.ts +36 -2
  279. package/lib/tab/tab.d.ts +54 -3
  280. package/lib/tab-panel/tab-panel.d.ts +18 -1
  281. package/lib/table/table-cell.d.ts +18 -1
  282. package/lib/table/table-header-cell.d.ts +18 -1
  283. package/lib/table/table-row.d.ts +18 -1
  284. package/lib/table/table-sorting-button.d.ts +18 -1
  285. package/lib/tag/tag.d.ts +54 -3
  286. package/lib/tag-group/tag-group.d.ts +18 -1
  287. package/lib/tag-name-map.d.ts +4 -1
  288. package/lib/text-area/text-area.d.ts +142 -6
  289. package/lib/text-field/text-field.d.ts +160 -7
  290. package/lib/time-picker/time-picker.d.ts +70 -2
  291. package/lib/toggletip/toggletip.d.ts +35 -1
  292. package/lib/tooltip/tooltip.d.ts +444 -0
  293. package/lib/tree-item/tree-item.d.ts +36 -2
  294. package/lib/tree-view/tree-view.d.ts +18 -1
  295. package/lib/video-player/video-player.d.ts +18 -1
  296. package/locales/de-DE.cjs +1 -0
  297. package/locales/de-DE.js +1 -0
  298. package/locales/en-GB.cjs +1 -0
  299. package/locales/en-GB.js +1 -0
  300. package/locales/en-US.cjs +1 -0
  301. package/locales/en-US.js +1 -0
  302. package/locales/ja-JP.cjs +1 -0
  303. package/locales/ja-JP.js +1 -0
  304. package/locales/zh-CN.cjs +1 -0
  305. package/locales/zh-CN.js +1 -0
  306. package/nav/definition.cjs +1 -1
  307. package/nav/definition.js +1 -1
  308. package/nav/index.cjs +2 -2
  309. package/nav/index.js +2 -2
  310. package/nav-disclosure/definition.cjs +1 -1
  311. package/nav-disclosure/definition.js +1 -1
  312. package/nav-disclosure/index.cjs +3 -4
  313. package/nav-disclosure/index.js +11 -11
  314. package/nav-item/definition.cjs +1 -1
  315. package/nav-item/definition.js +1 -1
  316. package/nav-item/index.cjs +2 -2
  317. package/nav-item/index.js +6 -6
  318. package/note/definition.cjs +1 -1
  319. package/note/definition.js +1 -1
  320. package/note/index.cjs +2 -2
  321. package/note/index.js +7 -7
  322. package/number-field/definition.cjs +1 -1
  323. package/number-field/definition.js +1 -1
  324. package/number-field/index.cjs +8 -9
  325. package/number-field/index.js +16 -17
  326. package/package.json +8 -8
  327. package/pagination/definition.cjs +1 -1
  328. package/pagination/definition.js +1 -1
  329. package/pagination/index.cjs +9 -9
  330. package/pagination/index.js +16 -16
  331. package/platform-switch/definition.cjs +5 -0
  332. package/platform-switch/definition.js +2 -0
  333. package/platform-switch/index.cjs +1 -0
  334. package/platform-switch/index.js +28 -0
  335. package/popover/definition.cjs +1 -1
  336. package/popover/definition.js +1 -1
  337. package/popover/index.cjs +6 -6
  338. package/popover/index.js +12 -12
  339. package/progress/definition.cjs +1 -1
  340. package/progress/definition.js +1 -1
  341. package/progress/index.cjs +4 -4
  342. package/progress/index.js +5 -5
  343. package/progress-ring/definition.cjs +1 -1
  344. package/progress-ring/definition.js +1 -1
  345. package/radio/definition.cjs +1 -1
  346. package/radio/definition.js +1 -1
  347. package/radio-group/definition.cjs +1 -1
  348. package/radio-group/definition.js +1 -1
  349. package/radio-group/index.cjs +5 -8
  350. package/radio-group/index.js +16 -16
  351. package/range-slider/definition.cjs +1 -1
  352. package/range-slider/definition.js +1 -1
  353. package/range-slider/index.cjs +5 -5
  354. package/range-slider/index.js +9 -9
  355. package/rich-text-editor/definition.cjs +1 -1
  356. package/rich-text-editor/definition.js +1 -1
  357. package/rich-text-editor/index.cjs +8 -6
  358. package/rich-text-editor/index.js +101 -78
  359. package/rich-text-view/definition.cjs +1 -1
  360. package/rich-text-view/definition.js +1 -1
  361. package/rich-text-view/index.cjs +1 -1
  362. package/rich-text-view/index.js +3 -3
  363. package/searchable-select/definition.cjs +1 -1
  364. package/searchable-select/definition.js +1 -1
  365. package/searchable-select/index.cjs +38 -40
  366. package/searchable-select/index.js +64 -64
  367. package/select/definition.cjs +1 -1
  368. package/select/definition.js +1 -1
  369. package/selectable-box/definition.cjs +1 -1
  370. package/selectable-box/definition.js +1 -1
  371. package/selectable-box/index.cjs +4 -4
  372. package/selectable-box/index.js +13 -13
  373. package/shared/aria/aria-binding-directive.d.ts +4 -4
  374. package/shared/aria/aria-mixin.d.ts +21 -3
  375. package/shared/aria/delegates-aria.d.ts +18 -1
  376. package/shared/aria/host-semantics.d.ts +18 -1
  377. package/shared/aria/idrefs-controller.d.ts +17 -0
  378. package/shared/color-picker/base-color-picker.d.ts +18 -1
  379. package/shared/feedback/feedback-message.d.ts +18 -1
  380. package/shared/feedback/mixins.d.ts +36 -2
  381. package/shared/foundation/button/button.d.ts +35 -1
  382. package/shared/foundation/form-associated/form-associated.d.ts +35 -1
  383. package/shared/foundation/vivid-element/vivid-element.d.ts +375 -0
  384. package/shared/framework/reactive-controller.d.ts +373 -0
  385. package/shared/patterns/affix.d.ts +36 -2
  386. package/shared/patterns/anchored.d.ts +34 -0
  387. package/shared/patterns/char-count/char-count.d.ts +18 -1
  388. package/shared/patterns/form-elements/form-element.d.ts +17 -0
  389. package/shared/patterns/form-elements/with-contextual-help.d.ts +18 -1
  390. package/shared/patterns/form-elements/with-error-text.d.ts +18 -1
  391. package/shared/patterns/form-elements/with-success-text.d.ts +18 -1
  392. package/shared/patterns/index.d.ts +1 -0
  393. package/shared/patterns/kbd-shortcut.d.ts +431 -0
  394. package/shared/patterns/linkable.d.ts +18 -1
  395. package/shared/patterns/localized.d.ts +35 -1
  396. package/shared/patterns/trapped-focus.d.ts +18 -1
  397. package/shared/picker-field/mixins/calendar-picker.d.ts +35 -1
  398. package/shared/picker-field/mixins/calendar-picker.template.d.ts +35 -1
  399. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +18 -1
  400. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +35 -1
  401. package/shared/picker-field/mixins/single-date-picker.d.ts +35 -1
  402. package/shared/picker-field/mixins/single-value-picker.d.ts +35 -1
  403. package/shared/picker-field/mixins/time-selection-picker.d.ts +35 -1
  404. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +70 -2
  405. package/shared/picker-field/picker-field.d.ts +124 -5
  406. package/shared/templating/render-in-light-dom.d.ts +7 -20
  407. package/shared/utils/platform.d.ts +1 -0
  408. package/side-drawer/definition.cjs +1 -1
  409. package/side-drawer/definition.js +1 -1
  410. package/side-drawer/index.cjs +3 -3
  411. package/side-drawer/index.js +3 -3
  412. package/simple-color-picker/definition.cjs +1 -1
  413. package/simple-color-picker/definition.js +1 -1
  414. package/simple-color-picker/index.cjs +2 -2
  415. package/simple-color-picker/index.js +6 -6
  416. package/split-button/definition.cjs +1 -1
  417. package/split-button/definition.js +1 -1
  418. package/split-button/index.cjs +5 -6
  419. package/split-button/index.js +8 -8
  420. package/status/definition.cjs +1 -1
  421. package/status/definition.js +1 -1
  422. package/status/index.cjs +4 -4
  423. package/status/index.js +9 -9
  424. package/styles/core/all.css +24 -2
  425. package/styles/core/typography.css +24 -2
  426. package/styles/fonts/spezia-variable.css +6 -0
  427. package/styles/tokens/theme-dark.css +2 -0
  428. package/styles/tokens/theme-light.css +2 -0
  429. package/switch/definition.cjs +1 -1
  430. package/switch/definition.js +1 -1
  431. package/switch/index.cjs +3 -3
  432. package/switch/index.js +4 -4
  433. package/tab/definition.cjs +1 -1
  434. package/tab/definition.js +1 -1
  435. package/tab-panel/definition.cjs +1 -1
  436. package/tab-panel/definition.js +1 -1
  437. package/table/definition.cjs +1 -1
  438. package/table/definition.js +1 -1
  439. package/table/index.cjs +9 -9
  440. package/table/index.js +19 -19
  441. package/tabs/definition.cjs +1 -1
  442. package/tabs/definition.js +1 -1
  443. package/tabs/index.cjs +8 -8
  444. package/tabs/index.js +14 -14
  445. package/tag/definition.cjs +1 -1
  446. package/tag/definition.js +1 -1
  447. package/tag/index.cjs +8 -8
  448. package/tag/index.js +11 -11
  449. package/tag-group/definition.cjs +1 -1
  450. package/tag-group/definition.js +1 -1
  451. package/tag-group/index.cjs +2 -2
  452. package/tag-group/index.js +2 -2
  453. package/text-area/definition.cjs +1 -1
  454. package/text-area/definition.js +1 -1
  455. package/text-area/index.cjs +8 -9
  456. package/text-area/index.js +25 -26
  457. package/time-picker/definition.cjs +1 -1
  458. package/time-picker/definition.js +1 -1
  459. package/time-picker/index.cjs +1 -1
  460. package/time-picker/index.js +1 -1
  461. package/tree-item/definition.cjs +1 -1
  462. package/tree-item/definition.js +1 -1
  463. package/tree-view/definition.cjs +1 -1
  464. package/tree-view/definition.js +1 -1
  465. package/tree-view/index.cjs +4 -4
  466. package/tree-view/index.js +7 -7
  467. package/unbundled/affix.cjs +1 -1
  468. package/unbundled/affix.js +1 -1
  469. package/unbundled/aria-binding-directive.cjs +112 -2
  470. package/unbundled/aria-binding-directive.js +108 -4
  471. package/unbundled/calendar-picker.template.cjs +8 -10
  472. package/unbundled/calendar-picker.template.js +8 -10
  473. package/unbundled/char-count.cjs +1 -1
  474. package/unbundled/char-count.js +1 -1
  475. package/unbundled/definition.cjs +91 -17
  476. package/unbundled/definition.js +88 -14
  477. package/unbundled/definition10.js +1 -1
  478. package/unbundled/definition11.js +1 -1
  479. package/unbundled/definition12.cjs +15 -2
  480. package/unbundled/definition12.js +17 -4
  481. package/unbundled/definition13.js +1 -1
  482. package/unbundled/definition14.js +1 -1
  483. package/unbundled/definition15.cjs +1 -1
  484. package/unbundled/definition15.js +2 -2
  485. package/unbundled/definition16.cjs +1 -1
  486. package/unbundled/definition16.js +2 -2
  487. package/unbundled/definition17.cjs +1 -1
  488. package/unbundled/definition17.js +2 -2
  489. package/unbundled/definition18.cjs +1 -1
  490. package/unbundled/definition18.js +2 -2
  491. package/unbundled/definition19.js +1 -1
  492. package/unbundled/definition2.cjs +96 -77
  493. package/unbundled/definition2.js +94 -75
  494. package/unbundled/definition20.js +1 -1
  495. package/unbundled/definition21.js +1 -1
  496. package/unbundled/definition22.cjs +2 -3
  497. package/unbundled/definition22.js +3 -4
  498. package/unbundled/definition23.cjs +3 -3
  499. package/unbundled/definition23.js +5 -5
  500. package/unbundled/definition24.js +1 -1
  501. package/unbundled/definition25.cjs +1 -1
  502. package/unbundled/definition25.js +2 -2
  503. package/unbundled/definition26.cjs +8 -8
  504. package/unbundled/definition26.js +6 -6
  505. package/unbundled/definition27.cjs +26 -12
  506. package/unbundled/definition27.js +28 -14
  507. package/unbundled/definition28.cjs +1 -1
  508. package/unbundled/definition28.js +3 -3
  509. package/unbundled/definition29.cjs +1 -1
  510. package/unbundled/definition29.js +2 -2
  511. package/unbundled/definition3.cjs +154 -95
  512. package/unbundled/definition3.js +146 -93
  513. package/unbundled/definition30.cjs +1 -1
  514. package/unbundled/definition30.js +3 -3
  515. package/unbundled/definition31.cjs +1 -1
  516. package/unbundled/definition31.js +2 -2
  517. package/unbundled/definition32.js +1 -1
  518. package/unbundled/definition33.cjs +1 -1
  519. package/unbundled/definition33.js +2 -2
  520. package/unbundled/definition34.cjs +103 -65
  521. package/unbundled/definition34.js +102 -64
  522. package/unbundled/definition35.cjs +26 -326
  523. package/unbundled/definition35.js +24 -247
  524. package/unbundled/definition36.cjs +131 -25
  525. package/unbundled/definition36.js +124 -23
  526. package/unbundled/definition37.cjs +326 -51
  527. package/unbundled/definition37.js +324 -49
  528. package/unbundled/definition38.cjs +137 -317
  529. package/unbundled/definition38.js +135 -315
  530. package/unbundled/definition39.cjs +337 -173
  531. package/unbundled/definition39.js +334 -170
  532. package/unbundled/definition4.cjs +34 -159
  533. package/unbundled/definition4.js +25 -151
  534. package/unbundled/definition40.cjs +234 -339
  535. package/unbundled/definition40.js +230 -335
  536. package/unbundled/definition41.cjs +48 -271
  537. package/unbundled/definition41.js +44 -267
  538. package/unbundled/definition42.cjs +68 -49
  539. package/unbundled/definition42.js +65 -46
  540. package/unbundled/definition43.cjs +424 -56
  541. package/unbundled/definition43.js +422 -54
  542. package/unbundled/definition44.cjs +45 -428
  543. package/unbundled/definition44.js +42 -425
  544. package/unbundled/definition45.cjs +45 -54
  545. package/unbundled/definition45.js +42 -51
  546. package/unbundled/definition46.cjs +178 -30
  547. package/unbundled/definition46.js +175 -26
  548. package/unbundled/definition47.cjs +29 -94
  549. package/unbundled/definition47.js +25 -91
  550. package/unbundled/definition48.cjs +76 -36
  551. package/unbundled/definition48.js +73 -33
  552. package/unbundled/definition49.cjs +56 -23
  553. package/unbundled/definition49.js +54 -18
  554. package/unbundled/definition5.cjs +56 -38
  555. package/unbundled/definition5.js +52 -28
  556. package/unbundled/definition50.cjs +23 -40
  557. package/unbundled/definition50.js +18 -38
  558. package/unbundled/definition51.cjs +30 -338
  559. package/unbundled/definition51.js +30 -338
  560. package/unbundled/definition52.cjs +317 -187
  561. package/unbundled/definition52.js +314 -184
  562. package/unbundled/definition53.cjs +194 -289
  563. package/unbundled/definition53.js +189 -284
  564. package/unbundled/definition54.cjs +47 -54
  565. package/unbundled/definition54.js +44 -50
  566. package/unbundled/definition55.cjs +279 -133
  567. package/unbundled/definition55.js +277 -130
  568. package/unbundled/definition56.cjs +50 -262
  569. package/unbundled/definition56.js +48 -261
  570. package/unbundled/definition57.cjs +128 -460
  571. package/unbundled/definition57.js +126 -459
  572. package/unbundled/definition58.cjs +235 -3604
  573. package/unbundled/definition58.js +231 -3437
  574. package/unbundled/definition59.cjs +419 -729
  575. package/unbundled/definition59.js +417 -727
  576. package/unbundled/definition6.cjs +18 -64
  577. package/unbundled/definition6.js +15 -60
  578. package/unbundled/definition60.cjs +3666 -106
  579. package/unbundled/definition60.js +3498 -101
  580. package/unbundled/definition61.cjs +625 -878
  581. package/unbundled/definition61.js +619 -872
  582. package/unbundled/definition62.cjs +106 -108
  583. package/unbundled/definition62.js +103 -105
  584. package/unbundled/definition63.cjs +1045 -71
  585. package/unbundled/definition63.js +1041 -66
  586. package/unbundled/definition64.cjs +105 -173
  587. package/unbundled/definition64.js +102 -170
  588. package/unbundled/definition65.cjs +70 -113
  589. package/unbundled/definition65.js +66 -110
  590. package/unbundled/definition66.cjs +185 -54
  591. package/unbundled/definition66.js +182 -51
  592. package/unbundled/definition67.cjs +110 -77
  593. package/unbundled/definition67.js +111 -77
  594. package/unbundled/definition68.cjs +58 -21
  595. package/unbundled/definition68.js +56 -16
  596. package/unbundled/definition69.cjs +82 -75
  597. package/unbundled/definition69.js +81 -75
  598. package/unbundled/definition7.cjs +2 -2
  599. package/unbundled/definition7.js +3 -3
  600. package/unbundled/definition70.cjs +19 -349
  601. package/unbundled/definition70.js +15 -341
  602. package/unbundled/definition71.cjs +88 -26
  603. package/unbundled/definition71.js +86 -23
  604. package/unbundled/definition72.cjs +309 -119
  605. package/unbundled/definition72.js +234 -116
  606. package/unbundled/definition73.cjs +293 -229
  607. package/unbundled/definition73.js +287 -230
  608. package/unbundled/definition74.cjs +39 -30
  609. package/unbundled/definition74.js +29 -28
  610. package/unbundled/definition75.cjs +106 -121
  611. package/unbundled/definition75.js +104 -113
  612. package/unbundled/definition76.cjs +260 -179
  613. package/unbundled/definition76.js +258 -176
  614. package/unbundled/definition77.cjs +29 -514
  615. package/unbundled/definition77.js +27 -503
  616. package/unbundled/definition78.cjs +171 -0
  617. package/unbundled/definition78.js +147 -0
  618. package/unbundled/definition79.cjs +233 -0
  619. package/unbundled/definition79.js +214 -0
  620. package/unbundled/definition8.js +1 -1
  621. package/unbundled/definition80.cjs +533 -0
  622. package/unbundled/definition80.js +513 -0
  623. package/unbundled/definition9.cjs +1 -1
  624. package/unbundled/definition9.js +2 -2
  625. package/unbundled/delegates-aria.cjs +15 -1
  626. package/unbundled/delegates-aria.js +17 -3
  627. package/unbundled/host-semantics.cjs +2 -1
  628. package/unbundled/host-semantics.js +2 -1
  629. package/unbundled/kbd-shortcut.cjs +26 -0
  630. package/unbundled/kbd-shortcut.js +20 -0
  631. package/unbundled/mixins.cjs +7 -77
  632. package/unbundled/mixins.js +6 -64
  633. package/unbundled/platform.cjs +17 -0
  634. package/unbundled/platform.js +12 -0
  635. package/unbundled/randomId.cjs +47 -0
  636. package/unbundled/randomId.js +35 -0
  637. package/unbundled/time-selection-picker.template.js +1 -1
  638. package/unbundled/vivid-element.cjs +82 -9
  639. package/unbundled/vivid-element.js +63 -8
  640. package/video-player/definition.cjs +1 -1
  641. package/video-player/definition.js +1 -1
  642. package/video-player/index.cjs +3 -3
  643. package/video-player/index.js +5 -5
  644. package/visually-hidden/definition.cjs +1 -1
  645. package/visually-hidden/definition.js +1 -1
  646. package/vivid.api.json +604 -6
  647. package/bundled/normalize.cjs +0 -1
  648. package/bundled/normalize.js +0 -7
@@ -1,819 +1,509 @@
1
- import { c as createRegisterFunction, s as defineVividComponent } 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-600);cursor:not-allowed}.label{color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base)}.control{--_appearance-color-text:var(--vvd-color-canvas-text);--_appearance-color-fill:var(--vvd-color-canvas);--_appearance-color-outline:var(--vvd-color-neutral-500)}.control.appearance-ghost{--_appearance-color-text:var(--_connotation-color-firm);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}@media (hover:hover){.control:hover:where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text:var(--vvd-color-canvas-text);--_appearance-color-fill:var(--vvd-color-canvas);--_appearance-color-outline:var(--vvd-color-neutral-700)}.control:hover:where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_appearance-color-text:var(--_connotation-color-firm);--_appearance-color-fill:var(--_connotation-color-faint);--_appearance-color-outline:transparent}}.control.hover:where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text:var(--vvd-color-canvas-text);--_appearance-color-fill:var(--vvd-color-canvas);--_appearance-color-outline:var(--vvd-color-neutral-700)}.control.hover:where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_appearance-color-text:var(--_connotation-color-firm);--_appearance-color-fill:var(--_connotation-color-faint);--_appearance-color-outline:transparent}.control:disabled{--_appearance-color-text:var(--vvd-color-neutral-600);--_appearance-color-fill:var(--vvd-color-neutral-100);--_appearance-color-outline:var(--vvd-color-neutral-300)}.control:disabled.appearance-ghost{--_appearance-color-text:var(--vvd-color-neutral-300);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}.control.disabled{--_appearance-color-text:var(--vvd-color-neutral-600);--_appearance-color-fill:var(--vvd-color-neutral-100);--_appearance-color-outline:var(--vvd-color-neutral-300)}.control.disabled.appearance-ghost{--_appearance-color-text:var(--vvd-color-neutral-300);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}.control.readonly:where(:not(.disabled,:disabled)){--_appearance-color-text:var(--vvd-color-canvas-text);--_appearance-color-fill:var(--vvd-color-neutral-200);--_appearance-color-outline:var(--vvd-color-neutral-400)}.control.readonly:where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text:var(--vvd-color-neutral-600);--_appearance-color-fill:transparent;--_appearance-color-outline:transparent}.control.error:where(:not(.disabled,:disabled)){--_appearance-color-text:notSet;--_appearance-color-fill:var(--vvd-color-alert-50);--_appearance-color-outline:var(--vvd-color-alert-500)}.control.error:where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text:notSet;--_appearance-color-fill:var(--vvd-color-alert-50);--_appearance-color-outline:transparent}.control.success:where(:not(.disabled,:disabled)){--_appearance-color-text:notSet;--_appearance-color-fill:var(--vvd-color-success-50);--_appearance-color-outline:var(--vvd-color-success-500)}.control.success:where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text:notSet;--_appearance-color-fill:var(--vvd-color-success-50);--_appearance-color-outline:transparent}.control{--_connotation-color-primary:var(--vvd-select-accent-primary,var(--vvd-color-canvas-text));--_connotation-color-primary-text:var(--vvd-select-accent-primary-text,var(--vvd-color-canvas));--_connotation-color-primary-increment:var(--vvd-select-accent-primary-increment,var(--vvd-color-neutral-800));--_connotation-color-intermediate:var(--vvd-select-accent-intermediate,var(--vvd-color-neutral-500));--_connotation-color-faint:var(--vvd-select-accent-faint,var(--vvd-color-neutral-50));--_connotation-color-soft:var(--vvd-select-accent-soft,var(--vvd-color-neutral-100));--_connotation-color-firm:var(--vvd-select-accent-firm,var(--vvd-color-canvas-text));--_connotation-color-fierce:var(--vvd-select-accent-fierce,var(--vvd-color-neutral-700));border-radius:var(--_select-control-border-radius);block-size:var(--_select-block-size);padding-inline:var(--_select-padding-inline);--_select-icon-size:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) / 2);--_select-block-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2)));--_select-padding-inline:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) / 2.5);background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base);justify-content:space-between;align-items:center;gap:8px;transition:box-shadow .2s,background-color .2s;display:flex}.control.size-condensed{--_select-icon-size:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2))) / 2.5);--_select-block-size:calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 8));--_select-padding-inline:calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density,0), 2) - 16)) / 2)}.control.size-condensed:not(.shape-pill){--_select-control-border-radius:4px}.control-wrapper{position:relative}.control:not(.disabled){cursor:pointer}.control.disabled{pointer-events:none}.control:not(.shape-pill){--_select-control-border-radius:8px}.control.shape-pill{--_select-control-border-radius:24px}.listbox{max-height:var(--select-height,408px);flex-direction:column;gap:2px;padding:4px;display:flex;overflow-y:auto}:host([multiple]:focus-visible) .listbox{box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,var(--vvd-color-cta-500)), transparent 85%), inset 0 0 0 3px var(--focus-stroke-gap-color,currentColor);outline:1px solid var(--focus-stroke-color,var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset,0px));border-radius:8px}.selected-value{white-space:nowrap;flex-grow:1;align-items:center;column-gap:12px;display:flex;overflow:hidden}.selected-value .text{text-overflow:ellipsis;max-inline-size:100%;overflow:hidden}.control.shows-placeholder .selected-value .text{color:var(--vvd-color-neutral-600)}.selected-value slot[name=icon]{flex:0 0 var(--_select-icon-size);font-size:var(--_select-icon-size);line-height:1}.control.has-meta .selected-value{padding-inline-end:8px}.feedback-wrapper{display:contents}::part(popup-base){inline-size:max-content;min-inline-size:var(--_select-fixed-width,100%)}:host([multiple]) ::part(popup-base){position:static}@supports selector(:has(*)){:host(:focus-within) .control:not(.has-activedescendant,:has(.clear-button:focus)){--focus-stroke-gap-color:transparent;box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,var(--vvd-color-cta-500)), transparent 85%), inset 0 0 0 3px var(--focus-stroke-gap-color,currentColor);outline:1px solid var(--focus-stroke-color,var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset,0px))}}@supports not selector(:has(*)){:host(:focus-within) .control:not(.has-activedescendant){--focus-stroke-gap-color:transparent;box-shadow:0 0 0 4px color-mix(in srgb, var(--focus-stroke-color,var(--vvd-color-cta-500)), transparent 85%), inset 0 0 0 3px var(--focus-stroke-gap-color,currentColor);outline:1px solid var(--focus-stroke-color,var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset,0px))}}:host(: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 };