@vonage/vivid 4.16.2 → 4.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/custom-elements.json +8857 -5894
  2. package/date-time-picker/index.cjs +5 -0
  3. package/date-time-picker/index.js +3 -0
  4. package/dial-pad/index.cjs +1 -1
  5. package/dial-pad/index.js +1 -1
  6. package/dialog/index.cjs +1 -1
  7. package/dialog/index.js +1 -1
  8. package/divider/index.cjs +1 -1
  9. package/divider/index.js +1 -1
  10. package/elevation/index.cjs +1 -1
  11. package/elevation/index.js +1 -1
  12. package/empty-state/index.cjs +1 -1
  13. package/empty-state/index.js +1 -1
  14. package/fab/index.cjs +1 -1
  15. package/fab/index.js +1 -1
  16. package/file-picker/index.cjs +1 -1
  17. package/file-picker/index.js +1 -1
  18. package/header/index.cjs +1 -1
  19. package/header/index.js +1 -1
  20. package/icon/index.cjs +1 -1
  21. package/icon/index.js +1 -1
  22. package/index.cjs +198 -87
  23. package/index.js +66 -60
  24. package/layout/index.cjs +1 -1
  25. package/layout/index.js +1 -1
  26. package/lib/accordion/definition.d.ts +2 -0
  27. package/lib/accordion-item/definition.d.ts +2 -0
  28. package/lib/action-group/action-group.d.ts +449 -3
  29. package/lib/action-group/definition.d.ts +2 -0
  30. package/lib/alert/definition.d.ts +2 -0
  31. package/lib/audio-player/definition.d.ts +2 -0
  32. package/lib/avatar/definition.d.ts +2 -0
  33. package/lib/badge/definition.d.ts +2 -0
  34. package/lib/banner/banner.d.ts +449 -3
  35. package/lib/banner/definition.d.ts +2 -0
  36. package/lib/breadcrumb/definition.d.ts +2 -0
  37. package/lib/breadcrumb-item/breadcrumb-item.d.ts +449 -1
  38. package/lib/breadcrumb-item/definition.d.ts +2 -0
  39. package/lib/button/definition.d.ts +2 -0
  40. package/lib/calendar/calendar.d.ts +2 -0
  41. package/lib/calendar/definition.d.ts +2 -0
  42. package/lib/calendar-event/definition.d.ts +2 -0
  43. package/lib/card/definition.d.ts +2 -0
  44. package/lib/checkbox/checkbox.d.ts +449 -4
  45. package/lib/checkbox/definition.d.ts +2 -0
  46. package/lib/combobox/definition.d.ts +2 -0
  47. package/lib/components.d.ts +2 -0
  48. package/lib/data-grid/definition.d.ts +4 -0
  49. package/lib/date-picker/date-picker.d.ts +2182 -4
  50. package/lib/date-picker/date-picker.template.d.ts +2 -0
  51. package/lib/date-picker/definition.d.ts +2 -0
  52. package/lib/date-range-picker/date-range-picker.d.ts +1110 -4
  53. package/lib/date-range-picker/date-range-picker.template.d.ts +2 -0
  54. package/lib/date-range-picker/definition.d.ts +2 -0
  55. package/lib/date-time-picker/date-time-picker.d.ts +2175 -0
  56. package/lib/date-time-picker/date-time-picker.template.d.ts +2 -0
  57. package/lib/date-time-picker/definition.d.ts +1 -0
  58. package/lib/date-time-picker/locale.d.ts +9 -0
  59. package/lib/dial-pad/definition.d.ts +2 -0
  60. package/lib/dialog/definition.d.ts +2 -0
  61. package/lib/dialog/dialog.d.ts +449 -2
  62. package/lib/divider/definition.d.ts +2 -0
  63. package/lib/divider/divider.d.ts +448 -1
  64. package/lib/empty-state/definition.d.ts +2 -0
  65. package/lib/enums.d.ts +6 -0
  66. package/lib/fab/definition.d.ts +2 -0
  67. package/lib/file-picker/definition.d.ts +2 -0
  68. package/lib/header/definition.d.ts +2 -0
  69. package/lib/icon/definition.d.ts +2 -0
  70. package/lib/layout/definition.d.ts +2 -0
  71. package/lib/menu/definition.d.ts +2 -0
  72. package/lib/menu/menu.d.ts +900 -5
  73. package/lib/menu-item/definition.d.ts +2 -0
  74. package/lib/nav/definition.d.ts +2 -0
  75. package/lib/nav-disclosure/definition.d.ts +2 -0
  76. package/lib/nav-disclosure/nav-disclosure.d.ts +449 -2
  77. package/lib/nav-item/definition.d.ts +2 -0
  78. package/lib/note/definition.d.ts +2 -0
  79. package/lib/number-field/definition.d.ts +2 -0
  80. package/lib/number-field/number-field.d.ts +450 -3
  81. package/lib/option/definition.d.ts +2 -0
  82. package/lib/option/option.d.ts +1 -11
  83. package/lib/pagination/definition.d.ts +2 -0
  84. package/lib/popup/definition.d.ts +0 -1
  85. package/lib/popup/popup.d.ts +25 -0
  86. package/lib/progress/definition.d.ts +2 -0
  87. package/lib/progress/progress.d.ts +449 -2
  88. package/lib/progress-ring/definition.d.ts +2 -0
  89. package/lib/progress-ring/progress-ring.d.ts +449 -2
  90. package/lib/radio/definition.d.ts +2 -0
  91. package/lib/radio-group/definition.d.ts +2 -0
  92. package/lib/range-slider/definition.d.ts +2 -0
  93. package/lib/rich-text-editor/definition.d.ts +2 -0
  94. package/lib/rich-text-editor/facades/prose-mirror-vivid.schema.d.ts +2 -0
  95. package/lib/rich-text-editor/facades/vivid-prose-mirror.facade.d.ts +8 -0
  96. package/lib/rich-text-editor/rich-text-editor.d.ts +16 -0
  97. package/lib/rich-text-editor/rich-text-editor.template.d.ts +4 -0
  98. package/lib/searchable-select/definition.d.ts +2 -0
  99. package/lib/select/definition.d.ts +2 -0
  100. package/lib/select/select.d.ts +1 -5
  101. package/lib/selectable-box/definition.d.ts +2 -0
  102. package/lib/selectable-box/selectable-box.d.ts +449 -2
  103. package/lib/side-drawer/definition.d.ts +2 -0
  104. package/lib/slider/definition.d.ts +2 -0
  105. package/lib/slider/slider.d.ts +449 -3
  106. package/lib/split-button/definition.d.ts +2 -0
  107. package/lib/split-button/split-button.d.ts +449 -3
  108. package/lib/switch/definition.d.ts +2 -0
  109. package/lib/switch/switch.d.ts +449 -2
  110. package/lib/tab/definition.d.ts +2 -0
  111. package/lib/tab-panel/definition.d.ts +2 -0
  112. package/lib/tabs/definition.d.ts +2 -0
  113. package/lib/tag/definition.d.ts +2 -0
  114. package/lib/tag-group/definition.d.ts +2 -0
  115. package/lib/tag-group/tag-group.d.ts +449 -2
  116. package/lib/text-anchor/text-anchor.d.ts +449 -1
  117. package/lib/text-area/definition.d.ts +2 -0
  118. package/lib/text-area/text-area.d.ts +450 -3
  119. package/lib/text-field/definition.d.ts +2 -0
  120. package/lib/text-field/text-field.d.ts +450 -7
  121. package/lib/time-picker/definition.d.ts +2 -0
  122. package/lib/time-picker/locale.d.ts +0 -2
  123. package/lib/time-picker/time-picker.d.ts +1053 -9
  124. package/lib/time-picker/time-picker.template.d.ts +2 -2
  125. package/lib/toggletip/definition.d.ts +2 -0
  126. package/lib/toggletip/toggletip.d.ts +454 -4
  127. package/lib/tooltip/definition.d.ts +2 -0
  128. package/lib/tooltip/tooltip.d.ts +454 -4
  129. package/lib/tree-item/definition.d.ts +2 -0
  130. package/lib/tree-view/definition.d.ts +2 -0
  131. package/lib/video-player/definition.d.ts +2 -0
  132. package/locales/de-DE.cjs +29 -5
  133. package/locales/de-DE.js +29 -5
  134. package/locales/en-GB.cjs +29 -5
  135. package/locales/en-GB.js +29 -5
  136. package/locales/en-US.cjs +29 -5
  137. package/locales/en-US.js +29 -5
  138. package/locales/ja-JP.cjs +29 -5
  139. package/locales/ja-JP.js +29 -5
  140. package/locales/zh-CN.cjs +29 -5
  141. package/locales/zh-CN.js +29 -5
  142. package/menu/index.cjs +1 -1
  143. package/menu/index.js +1 -1
  144. package/menu-item/index.cjs +1 -1
  145. package/menu-item/index.js +1 -1
  146. package/nav/index.cjs +1 -1
  147. package/nav/index.js +1 -1
  148. package/nav-disclosure/index.cjs +1 -1
  149. package/nav-disclosure/index.js +1 -1
  150. package/nav-item/index.cjs +1 -1
  151. package/nav-item/index.js +1 -1
  152. package/note/index.cjs +1 -1
  153. package/note/index.js +1 -1
  154. package/number-field/index.cjs +1 -1
  155. package/number-field/index.js +1 -1
  156. package/option/index.cjs +1 -1
  157. package/option/index.js +1 -1
  158. package/package.json +7 -2
  159. package/pagination/index.cjs +1 -1
  160. package/pagination/index.js +1 -1
  161. package/popup/index.cjs +1 -1
  162. package/popup/index.js +1 -1
  163. package/progress/index.cjs +1 -1
  164. package/progress/index.js +1 -1
  165. package/progress-ring/index.cjs +1 -1
  166. package/progress-ring/index.js +1 -1
  167. package/radio/index.cjs +1 -1
  168. package/radio/index.js +1 -1
  169. package/radio-group/index.cjs +1 -1
  170. package/radio-group/index.js +1 -1
  171. package/range-slider/index.cjs +1 -1
  172. package/range-slider/index.js +1 -1
  173. package/rich-text-editor/index.cjs +5 -0
  174. package/rich-text-editor/index.js +3 -0
  175. package/searchable-select/index.cjs +1 -1
  176. package/searchable-select/index.js +1 -1
  177. package/select/index.cjs +1 -1
  178. package/select/index.js +1 -1
  179. package/selectable-box/index.cjs +1 -1
  180. package/selectable-box/index.js +1 -1
  181. package/shared/Reflector.cjs +71 -0
  182. package/shared/Reflector.js +69 -0
  183. package/shared/affix.cjs +2 -4
  184. package/shared/affix.js +3 -5
  185. package/shared/anchor.cjs +0 -10
  186. package/shared/anchor.js +0 -10
  187. package/shared/anchored.cjs +12 -9
  188. package/shared/anchored.js +13 -10
  189. package/shared/aria/delegates-aria.d.ts +454 -0
  190. package/shared/base-progress.js +1 -1
  191. package/shared/breadcrumb-item.cjs +2 -1
  192. package/shared/breadcrumb-item.js +2 -1
  193. package/shared/button.cjs +2 -13
  194. package/shared/button.js +2 -13
  195. package/shared/{presentationDate.cjs → calendar-picker.template.cjs} +681 -853
  196. package/shared/{presentationDate.js → calendar-picker.template.js} +673 -848
  197. package/shared/datetime/dateTimeStr.d.ts +6 -0
  198. package/shared/datetime/presentationDate.d.ts +4 -0
  199. package/shared/{date-picker/calendar → datetime}/presentationDateRange.d.ts +3 -3
  200. package/shared/datetime/presentationDateTime.d.ts +4 -0
  201. package/{lib/time-picker/time → shared/datetime}/time.d.ts +1 -0
  202. package/shared/definition.cjs +1 -1
  203. package/shared/definition.js +2 -2
  204. package/shared/definition10.cjs +1 -0
  205. package/shared/definition10.js +2 -2
  206. package/shared/definition11.cjs +9 -12
  207. package/shared/definition11.js +10 -13
  208. package/shared/definition12.cjs +1 -1
  209. package/shared/definition12.js +2 -2
  210. package/shared/definition13.cjs +15 -2
  211. package/shared/definition13.js +16 -4
  212. package/shared/definition14.cjs +4 -3
  213. package/shared/definition14.js +5 -5
  214. package/shared/definition15.cjs +4 -11
  215. package/shared/definition15.js +5 -12
  216. package/shared/definition16.cjs +44 -48
  217. package/shared/definition16.js +32 -36
  218. package/shared/definition17.cjs +4 -1
  219. package/shared/definition17.js +3 -3
  220. package/shared/definition18.cjs +59 -94
  221. package/shared/definition18.js +58 -93
  222. package/shared/definition19.cjs +79 -43
  223. package/shared/definition19.js +60 -24
  224. package/shared/definition2.cjs +1 -0
  225. package/shared/definition2.js +2 -2
  226. package/shared/definition20.cjs +253 -219
  227. package/shared/definition20.js +254 -220
  228. package/shared/definition21.cjs +201 -286
  229. package/shared/definition21.js +199 -285
  230. package/shared/definition22.cjs +302 -31
  231. package/shared/definition22.js +301 -30
  232. package/shared/definition23.cjs +37 -57
  233. package/shared/definition23.js +36 -57
  234. package/shared/definition24.cjs +50 -69
  235. package/shared/definition24.js +49 -69
  236. package/shared/definition25.cjs +75 -2475
  237. package/shared/definition25.js +74 -2475
  238. package/shared/definition26.cjs +2480 -49
  239. package/shared/definition26.js +2480 -49
  240. package/shared/definition27.cjs +53 -271
  241. package/shared/definition27.js +52 -269
  242. package/shared/definition28.cjs +271 -47
  243. package/shared/definition28.js +269 -47
  244. package/shared/definition29.cjs +37 -772
  245. package/shared/definition29.js +36 -767
  246. package/shared/definition3.cjs +3 -9
  247. package/shared/definition3.js +4 -11
  248. package/shared/definition30.cjs +739 -56
  249. package/shared/definition30.js +733 -56
  250. package/shared/definition31.cjs +93 -21
  251. package/shared/definition31.js +92 -21
  252. package/shared/definition32.cjs +28 -9
  253. package/shared/definition32.js +27 -9
  254. package/shared/definition33.cjs +10 -51
  255. package/shared/definition33.js +9 -51
  256. package/shared/definition34.cjs +31 -412
  257. package/shared/definition34.js +31 -413
  258. package/shared/definition35.cjs +423 -53
  259. package/shared/definition35.js +424 -54
  260. package/shared/definition36.cjs +53 -215
  261. package/shared/definition36.js +53 -215
  262. package/shared/definition37.cjs +202 -72
  263. package/shared/definition37.js +201 -71
  264. package/shared/definition38.cjs +54 -48
  265. package/shared/definition38.js +53 -48
  266. package/shared/definition39.cjs +57 -262
  267. package/shared/definition39.js +56 -262
  268. package/shared/definition4.cjs +4 -3
  269. package/shared/definition4.js +5 -5
  270. package/shared/definition40.cjs +220 -148
  271. package/shared/definition40.js +220 -148
  272. package/shared/definition41.cjs +144 -568
  273. package/shared/definition41.js +144 -569
  274. package/shared/definition42.cjs +476 -967
  275. package/shared/definition42.js +477 -969
  276. package/shared/definition43.cjs +13508 -851
  277. package/shared/definition43.js +13508 -851
  278. package/shared/definition44.cjs +1111 -103
  279. package/shared/definition44.js +1112 -103
  280. package/shared/definition45.cjs +849 -80
  281. package/shared/definition45.js +849 -80
  282. package/shared/definition46.cjs +108 -464
  283. package/shared/definition46.js +107 -463
  284. package/shared/definition47.cjs +96 -118
  285. package/shared/definition47.js +95 -118
  286. package/shared/definition48.cjs +430 -82
  287. package/shared/definition48.js +430 -83
  288. package/shared/definition49.cjs +135 -15
  289. package/shared/definition49.js +134 -15
  290. package/shared/definition5.cjs +5 -4
  291. package/shared/definition5.js +6 -6
  292. package/shared/definition50.cjs +109 -85
  293. package/shared/definition50.js +108 -85
  294. package/shared/definition51.cjs +14 -519
  295. package/shared/definition51.js +13 -519
  296. package/shared/definition52.cjs +96 -23
  297. package/shared/definition52.js +95 -23
  298. package/shared/definition53.cjs +480 -99
  299. package/shared/definition53.js +479 -99
  300. package/shared/definition54.cjs +24 -296
  301. package/shared/definition54.js +23 -296
  302. package/shared/definition55.cjs +126 -69
  303. package/shared/definition55.js +125 -69
  304. package/shared/definition56.cjs +186 -775
  305. package/shared/definition56.js +187 -776
  306. package/shared/definition57.cjs +511 -107
  307. package/shared/definition57.js +511 -107
  308. package/shared/definition58.cjs +27 -128
  309. package/shared/definition58.js +27 -128
  310. package/shared/definition59.cjs +106 -162
  311. package/shared/definition59.js +105 -160
  312. package/shared/definition6.cjs +3 -2
  313. package/shared/definition6.js +4 -4
  314. package/shared/definition60.cjs +81 -252
  315. package/shared/definition60.js +80 -252
  316. package/shared/definition61.cjs +156 -70156
  317. package/shared/definition61.js +154 -70156
  318. package/shared/definition62.cjs +271 -29
  319. package/shared/definition62.js +270 -28
  320. package/shared/definition63.cjs +69236 -2018
  321. package/shared/definition63.js +69235 -2016
  322. package/shared/definition64.cjs +55 -0
  323. package/shared/definition64.js +51 -0
  324. package/shared/definition65.cjs +2195 -0
  325. package/shared/definition65.js +2190 -0
  326. package/shared/definition7.cjs +3 -2
  327. package/shared/definition7.js +4 -4
  328. package/shared/definition8.cjs +5 -10
  329. package/shared/definition8.js +6 -12
  330. package/shared/definition9.cjs +2 -2
  331. package/shared/definition9.js +3 -3
  332. package/shared/delegates-aria.cjs +69 -0
  333. package/shared/delegates-aria.js +67 -0
  334. package/shared/enums.cjs +8 -0
  335. package/shared/enums.js +8 -1
  336. package/shared/form-elements.cjs +8 -8
  337. package/shared/form-elements.js +9 -9
  338. package/shared/foundation/anchor/anchor.d.ts +0 -8
  339. package/shared/foundation/button/button.d.ts +449 -7
  340. package/shared/foundation/listbox/listbox.d.ts +0 -9
  341. package/shared/foundation/vivid-element/vivid-element.d.ts +1 -0
  342. package/shared/listbox.cjs +4 -30
  343. package/shared/listbox.js +4 -30
  344. package/shared/localization/Locale.d.ts +6 -2
  345. package/shared/option.cjs +1 -38
  346. package/shared/option.js +1 -38
  347. package/shared/patterns/anchored.d.ts +891 -10
  348. package/shared/patterns/trapped-focus.d.ts +2 -0
  349. package/shared/picker-field/locale.d.ts +4 -0
  350. package/shared/picker-field/mixins/calendar-picker.d.ts +558 -0
  351. package/shared/{date-picker/locale.d.ts → picker-field/mixins/calendar-picker.locale.d.ts} +1 -3
  352. package/shared/picker-field/mixins/calendar-picker.template.d.ts +555 -0
  353. package/shared/picker-field/mixins/calendar-segments/calendarGrid.d.ts +17 -0
  354. package/shared/{date-picker/calendar → picker-field/mixins/calendar-segments}/monthPickerGrid.d.ts +3 -3
  355. package/shared/picker-field/mixins/inline-time-picker/columns.d.ts +13 -0
  356. package/shared/picker-field/mixins/inline-time-picker/definition.d.ts +1 -0
  357. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +15 -0
  358. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.template.d.ts +5 -0
  359. package/{lib/time-picker/time/picker.d.ts → shared/picker-field/mixins/inline-time-picker/picker-option.d.ts} +1 -1
  360. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +1110 -0
  361. package/shared/picker-field/mixins/single-date-picker.d.ts +1626 -0
  362. package/shared/picker-field/mixins/single-value-picker.d.ts +518 -0
  363. package/shared/picker-field/mixins/time-selection-picker.d.ts +1053 -0
  364. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +1050 -0
  365. package/shared/picker-field/picker-field.d.ts +11 -0
  366. package/shared/picker-field/picker-field.form-associated.d.ts +11 -0
  367. package/shared/picker-field/picker-field.template.d.ts +7 -0
  368. package/shared/picker-field.template.cjs +315 -0
  369. package/shared/picker-field.template.js +310 -0
  370. package/shared/single-date-picker.cjs +46 -0
  371. package/shared/single-date-picker.js +44 -0
  372. package/shared/single-value-picker.cjs +77 -0
  373. package/shared/single-value-picker.js +75 -0
  374. package/shared/slider.template.cjs +6 -6
  375. package/shared/slider.template.js +6 -6
  376. package/shared/text-anchor.cjs +2 -1
  377. package/shared/text-anchor.js +2 -1
  378. package/shared/text-anchor.template.cjs +5 -7
  379. package/shared/text-anchor.template.js +5 -7
  380. package/shared/time-selection-picker.template.cjs +776 -0
  381. package/shared/time-selection-picker.template.js +767 -0
  382. package/shared/utils/mixins.d.ts +3 -0
  383. package/shared/vivid-element.cjs +3 -0
  384. package/shared/vivid-element.js +4 -1
  385. package/side-drawer/index.cjs +1 -1
  386. package/side-drawer/index.js +1 -1
  387. package/slider/index.cjs +1 -1
  388. package/slider/index.js +1 -1
  389. package/split-button/index.cjs +1 -1
  390. package/split-button/index.js +1 -1
  391. package/styles/core/all.css +1 -1
  392. package/styles/core/theme.css +1 -1
  393. package/styles/core/typography.css +1 -1
  394. package/styles/tokens/theme-dark.css +4 -4
  395. package/styles/tokens/theme-light.css +4 -4
  396. package/styles/tokens/vivid-2-compat.css +1 -1
  397. package/switch/index.cjs +1 -1
  398. package/switch/index.js +1 -1
  399. package/tab/index.cjs +1 -1
  400. package/tab/index.js +1 -1
  401. package/tab-panel/index.cjs +1 -1
  402. package/tab-panel/index.js +1 -1
  403. package/tabs/index.cjs +1 -1
  404. package/tabs/index.js +1 -1
  405. package/tag/index.cjs +1 -1
  406. package/tag/index.js +1 -1
  407. package/tag-group/index.cjs +1 -1
  408. package/tag-group/index.js +1 -1
  409. package/text-anchor/index.cjs +1 -1
  410. package/text-anchor/index.js +2 -2
  411. package/text-area/index.cjs +1 -1
  412. package/text-area/index.js +1 -1
  413. package/text-field/index.cjs +1 -1
  414. package/text-field/index.js +1 -1
  415. package/time-picker/index.cjs +1 -1
  416. package/time-picker/index.js +1 -1
  417. package/toggletip/index.cjs +1 -1
  418. package/toggletip/index.js +1 -1
  419. package/tooltip/index.cjs +1 -1
  420. package/tooltip/index.js +1 -1
  421. package/tree-item/index.cjs +1 -1
  422. package/tree-item/index.js +1 -1
  423. package/tree-view/index.cjs +1 -1
  424. package/tree-view/index.js +1 -1
  425. package/video-player/index.cjs +1 -1
  426. package/video-player/index.js +1 -1
  427. package/vivid.api.json +21748 -1
  428. package/lib/time-picker/time-picker.form-associated.d.ts +0 -11
  429. package/shared/aria-global.cjs +0 -93
  430. package/shared/aria-global.js +0 -91
  431. package/shared/date-picker/calendar/calendarGrid.d.ts +0 -17
  432. package/shared/date-picker/calendar/presentationDate.d.ts +0 -4
  433. package/shared/date-picker/date-picker-base.d.ts +0 -21
  434. package/shared/date-picker/date-picker-base.form-associated.d.ts +0 -11
  435. package/shared/date-picker/date-picker-base.template.d.ts +0 -3
  436. package/shared/foundation/patterns/aria-global.d.ts +0 -21
  437. package/shared/foundation/patterns/index.d.ts +0 -1
  438. package/shared/text-field2.cjs +0 -575
  439. package/shared/text-field2.js +0 -572
  440. package/shared/trapped-focus.cjs +0 -29
  441. package/shared/trapped-focus.js +0 -27
  442. /package/shared/{date-picker/calendar → datetime}/dateRange.d.ts +0 -0
  443. /package/shared/{date-picker/calendar → datetime}/dateStr.d.ts +0 -0
  444. /package/shared/{date-picker/calendar → datetime}/month.d.ts +0 -0
  445. /package/{lib/time-picker/time → shared/datetime}/presentationTime.d.ts +0 -0
  446. /package/shared/{date-picker/calendar → datetime}/year.d.ts +0 -0
  447. /package/shared/{date-picker/calendar → picker-field/mixins/calendar-segments}/segment.d.ts +0 -0
@@ -0,0 +1,776 @@
1
+ 'use strict';
2
+
3
+ const vividElement = require('./vivid-element.cjs');
4
+ const pickerField_template = require('./picker-field.template.cjs');
5
+ const singleValuePicker = require('./single-value-picker.cjs');
6
+ const formElements = require('./form-elements.cjs');
7
+ const applyMixinsWithObservables = require('./applyMixinsWithObservables.cjs');
8
+ const scrollIntoView = require('./scrollIntoView.cjs');
9
+ const when = require('./when.cjs');
10
+ const repeat = require('./repeat.cjs');
11
+ const classNames = require('./class-names.cjs');
12
+ const localized = require('./localized.cjs');
13
+ const ref = require('./ref.cjs');
14
+
15
+ const isValidTimeStr = (timeStr) => {
16
+ const parts = timeStr.split(":");
17
+ if (parts.length !== 3) {
18
+ return false;
19
+ }
20
+ const [hours, minutes, seconds] = parts;
21
+ if (hours.length !== 2 || minutes.length !== 2 || seconds.length !== 2) {
22
+ return false;
23
+ }
24
+ const hoursNum = parseInt(hours, 10);
25
+ const minutesNum = parseInt(minutes, 10);
26
+ const secondsNum = parseInt(seconds, 10);
27
+ if (isNaN(hoursNum) || isNaN(minutesNum) || isNaN(secondsNum)) {
28
+ return false;
29
+ }
30
+ if (hoursNum < 0 || hoursNum > 23) {
31
+ return false;
32
+ }
33
+ if (minutesNum < 0 || minutesNum > 59) {
34
+ return false;
35
+ }
36
+ if (secondsNum < 0 || secondsNum > 59) {
37
+ return false;
38
+ }
39
+ return true;
40
+ };
41
+ const parseTimePart = (partStr) => Number.parseInt(partStr, 10);
42
+ const formatTimePart = (part) => part.toString().padStart(2, "0");
43
+ const parseTimeStr = (timeStr) => {
44
+ const [hoursStr, minutesStr, secondsStr] = timeStr.split(":");
45
+ const hours = parseTimePart(hoursStr);
46
+ const minutes = parseTimePart(minutesStr);
47
+ const seconds = parseTimePart(secondsStr);
48
+ return {
49
+ hourStr: hoursStr,
50
+ hours,
51
+ minuteStr: minutesStr,
52
+ minutes,
53
+ secondStr: secondsStr,
54
+ seconds,
55
+ meridiem: hours < 12 ? "AM" : "PM"
56
+ };
57
+ };
58
+ const compareTimeStr = (a, b) => a > b ? 1 : a < b ? -1 : 0;
59
+ const hoursAs12hClock = (hour) => hour % 12 || 12;
60
+
61
+ const fallsIntoMeridiem = (meridiem, hour) => meridiem === "AM" && hour < 12 || meridiem === "PM" && hour >= 12;
62
+ const getHoursOptions = (min, max, forMeridiem) => {
63
+ const result = [];
64
+ const minHour = min ? parseTimeStr(min).hours : 0;
65
+ const maxHour = max ? parseTimeStr(max).hours : 23;
66
+ for (let i = minHour; i <= maxHour; i++) {
67
+ if (forMeridiem && !fallsIntoMeridiem(forMeridiem, i)) {
68
+ continue;
69
+ }
70
+ result.push({
71
+ value: formatTimePart(i),
72
+ label: formatTimePart(forMeridiem ? hoursAs12hClock(i) : i)
73
+ });
74
+ }
75
+ return result;
76
+ };
77
+ const getMinutesOptions = (step, value, min, max) => {
78
+ const result = [];
79
+ let minMinute = 0;
80
+ let maxMinute = 59;
81
+ if (min) {
82
+ const { hourStr: minHourStr, minutes: minMinutes } = parseTimeStr(min);
83
+ if (value && parseTimeStr(value).hourStr === minHourStr) {
84
+ minMinute = minMinutes;
85
+ }
86
+ }
87
+ if (max) {
88
+ const { hourStr: maxHourStr, minutes: maxMinutes } = parseTimeStr(max);
89
+ if (value && parseTimeStr(value).hourStr === maxHourStr) {
90
+ maxMinute = maxMinutes;
91
+ }
92
+ }
93
+ for (let i = minMinute; i <= maxMinute; i += Math.max(1, step ?? 1)) {
94
+ const minutes = formatTimePart(i);
95
+ result.push({
96
+ value: minutes,
97
+ label: minutes
98
+ });
99
+ }
100
+ return result;
101
+ };
102
+ const getSecondsOptions = (step, value, min, max) => {
103
+ const result = [];
104
+ let minSecond = 0;
105
+ let maxSecond = 59;
106
+ if (min) {
107
+ const minTime = parseTimeStr(min);
108
+ if (value && (parseTimeStr(value).hourStr === minTime.hourStr && parseTimeStr(value).minuteStr) === minTime.minuteStr) {
109
+ minSecond = minTime.seconds;
110
+ }
111
+ }
112
+ if (max) {
113
+ const maxTime = parseTimeStr(max);
114
+ if (value && (parseTimeStr(value).hourStr === maxTime.hourStr && parseTimeStr(value).minuteStr) === maxTime.minuteStr) {
115
+ maxSecond = maxTime.seconds;
116
+ }
117
+ }
118
+ for (let i = minSecond; i <= maxSecond; i += Math.max(1, step)) {
119
+ const seconds = formatTimePart(i);
120
+ result.push({
121
+ value: seconds,
122
+ label: seconds
123
+ });
124
+ }
125
+ return result;
126
+ };
127
+ const getMeridiesOptions = (min, max) => {
128
+ const result = [];
129
+ const hideAM = min ? parseTimeStr(min).meridiem === "PM" : false;
130
+ if (!hideAM) {
131
+ result.push({
132
+ value: "AM",
133
+ label: "AM"
134
+ });
135
+ }
136
+ const hidePM = max ? parseTimeStr(max).meridiem === "AM" : false;
137
+ if (!hidePM) {
138
+ result.push({
139
+ value: "PM",
140
+ label: "PM"
141
+ });
142
+ }
143
+ return result;
144
+ };
145
+
146
+ const HoursColumn = {
147
+ id: "hours",
148
+ getLabel: (x) => x.locale.timePicker.hoursLabel,
149
+ getOptions: (x) => getHoursOptions(
150
+ x.min,
151
+ x.max,
152
+ x.clock === "12h" ? MeridiesColumn.getSelectedOptionValue(x) ?? MeridiesColumn.getOptions(x)[0].value : void 0
153
+ ),
154
+ getSelectedOptionValue: (x) => x.value ? parseTimeStr(x.value).hourStr : void 0,
155
+ updatedValue: (x, optionValue) => {
156
+ if (x.value) {
157
+ const { minuteStr, secondStr } = parseTimeStr(x.value);
158
+ return `${optionValue}:${minuteStr}:${secondStr}`;
159
+ } else {
160
+ return `${optionValue}:00:00`;
161
+ }
162
+ }
163
+ };
164
+ const MinutesColumn = {
165
+ id: "minutes",
166
+ getLabel: (x) => x.locale.timePicker.minutesLabel,
167
+ getOptions: (x) => getMinutesOptions(x.minutesStep, x.value, x.min, x.max),
168
+ getSelectedOptionValue: (x) => x.value ? parseTimeStr(x.value).minuteStr : void 0,
169
+ updatedValue: (x, optionValue) => {
170
+ if (x.value) {
171
+ const { hourStr, secondStr } = parseTimeStr(x.value);
172
+ return `${hourStr}:${optionValue}:${secondStr}`;
173
+ } else {
174
+ return `00:${optionValue}:00`;
175
+ }
176
+ }
177
+ };
178
+ const SecondsColumn = {
179
+ id: "seconds",
180
+ getLabel: (x) => x.locale.timePicker.secondsLabel,
181
+ getOptions: (x) => getSecondsOptions(x.secondsStep, x.value, x.min, x.max),
182
+ getSelectedOptionValue: (x) => x.value ? parseTimeStr(x.value).secondStr : void 0,
183
+ updatedValue: (x, optionValue) => {
184
+ if (x.value) {
185
+ const { hourStr, minuteStr } = parseTimeStr(x.value);
186
+ return `${hourStr}:${minuteStr}:${optionValue}`;
187
+ } else {
188
+ return `00:00:${optionValue}`;
189
+ }
190
+ }
191
+ };
192
+ const MeridiesColumn = {
193
+ id: "meridies",
194
+ getLabel: (x) => x.locale.timePicker.meridiesLabel,
195
+ getOptions: (x) => getMeridiesOptions(x.min, x.max),
196
+ getSelectedOptionValue: (x) => x.value ? parseTimeStr(x.value).meridiem : void 0,
197
+ updatedValue: (x, optionValue) => {
198
+ if (x.value) {
199
+ const { hours, minuteStr, secondStr } = parseTimeStr(x.value);
200
+ let adjustedHours = hours;
201
+ if (optionValue === "AM" && hours >= 12) {
202
+ adjustedHours -= 12;
203
+ } else if (optionValue === "PM" && hours < 12) {
204
+ adjustedHours += 12;
205
+ }
206
+ return `${formatTimePart(adjustedHours)}:${minuteStr}:${secondStr}`;
207
+ } else {
208
+ if (optionValue === "AM") {
209
+ return "00:00:00";
210
+ } else {
211
+ return "12:00:00";
212
+ }
213
+ }
214
+ }
215
+ };
216
+
217
+ const shouldDisplaySecondsPicker = (x) => x.secondsStep !== void 0;
218
+ const shouldDisplay12hClock = (x) => x.clock === "12h";
219
+ const onPickerOptionClick = (x, column, optionValue) => {
220
+ emitChange(x, column.updatedValue(x, optionValue));
221
+ scrollToOption(x, column.id, optionValue, "start");
222
+ const nextPickerEl = x.shadowRoot.querySelector(
223
+ `#${column.id} + .picker`
224
+ );
225
+ if (nextPickerEl) {
226
+ nextPickerEl.focus();
227
+ } else {
228
+ x.$emit("last-column-selected", void 0, {
229
+ bubbles: false
230
+ });
231
+ }
232
+ };
233
+ const onPickerKeyDown = (x, column, event) => {
234
+ const options = column.getOptions(x);
235
+ const selectedValue = column.getSelectedOptionValue(x);
236
+ const offset = {
237
+ ArrowUp: -1,
238
+ ArrowDown: 1
239
+ }[event.key];
240
+ if (offset) {
241
+ event.preventDefault();
242
+ const index = options.findIndex((h) => h.value === selectedValue);
243
+ const newRawIndex = index === -1 ? 0 : index + offset;
244
+ const newIndex = (newRawIndex + options.length) % options.length;
245
+ const newValue = options[newIndex].value;
246
+ emitChange(x, column.updatedValue(x, newValue));
247
+ scrollToOption(x, column.id, newValue, "nearest");
248
+ }
249
+ return true;
250
+ };
251
+ const scrollToOption = (x, picker, optionValue, position) => {
252
+ const element = x.shadowRoot.querySelector(
253
+ `#${picker}-${optionValue}`
254
+ );
255
+ if (!element) {
256
+ return;
257
+ }
258
+ scrollIntoView.scrollIntoView(element, element.parentElement, position);
259
+ };
260
+ const onBaseKeyDown = (x, event) => {
261
+ if (event.key === "Tab") {
262
+ const focusableElements = x.shadowRoot.querySelectorAll(".picker");
263
+ const terminalElement = event.shiftKey ? focusableElements[0] : focusableElements[focusableElements.length - 1];
264
+ if (x.shadowRoot.activeElement !== terminalElement) {
265
+ pickerField_template.TrappedFocus.ignoreEvent(event);
266
+ }
267
+ }
268
+ return true;
269
+ };
270
+ const emitChange = (x, time) => {
271
+ x.$emit("change", time, { bubbles: false, composed: false });
272
+ };
273
+ const renderPicker = (column) => {
274
+ return vividElement.html`<ul
275
+ id="${column.id}"
276
+ class="picker"
277
+ role="listbox"
278
+ tabindex="0"
279
+ aria-label="${column.getLabel}"
280
+ aria-activedescendant="${(x) => column.getSelectedOptionValue(x) ? `${column.id}-${column.getSelectedOptionValue(x)}` : void 0}"
281
+ @keydown="${(x, c) => onPickerKeyDown(x, column, c.event)}"
282
+ >
283
+ ${repeat.repeat(
284
+ (x) => column.getOptions(x),
285
+ vividElement.html`<li
286
+ id="${(x) => `${column.id}-${x.value}`}"
287
+ class="${(x, c) => classNames.classNames("option", [
288
+ "selected",
289
+ column.getSelectedOptionValue(c.parent) === x.value
290
+ ])}"
291
+ aria-selected="${(x, c) => column.getSelectedOptionValue(c.parent) === x.value}"
292
+ role="option"
293
+ @click="${(x, c) => onPickerOptionClick(c.parent, column, x.value)}"
294
+ >
295
+ ${(x) => x.label}
296
+ </li>`
297
+ )}
298
+ </ul>`;
299
+ };
300
+ const InlineTimePickerTemplate = () => {
301
+ return vividElement.html`<div
302
+ class="time-pickers"
303
+ @keydown="${(x, { event }) => onBaseKeyDown(x, event)}"
304
+ >
305
+ ${renderPicker(HoursColumn)} ${renderPicker(MinutesColumn)}
306
+ ${when.when(shouldDisplaySecondsPicker, renderPicker(SecondsColumn))}
307
+ ${when.when(shouldDisplay12hClock, renderPicker(MeridiesColumn))}
308
+ </div>`;
309
+ };
310
+
311
+ var __defProp$2 = Object.defineProperty;
312
+ var __decorateClass$2 = (decorators, target, key, kind) => {
313
+ var result = void 0 ;
314
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
315
+ if (decorator = decorators[i])
316
+ result = (decorator(target, key, result) ) || result;
317
+ if (result) __defProp$2(target, key, result);
318
+ return result;
319
+ };
320
+ class InlineTimePicker extends vividElement.VividElement {
321
+ constructor() {
322
+ super(...arguments);
323
+ this.minutesStep = 1;
324
+ this.clock = "24h";
325
+ }
326
+ valueChanged(_, newValue) {
327
+ if (newValue !== void 0 && !isValidTimeStr(newValue)) {
328
+ this.value = void 0;
329
+ }
330
+ }
331
+ scrollSelectedOptionsToTop() {
332
+ if (HoursColumn.getSelectedOptionValue(this)) {
333
+ scrollToOption(
334
+ this,
335
+ "hours",
336
+ HoursColumn.getSelectedOptionValue(this),
337
+ "start"
338
+ );
339
+ }
340
+ if (MinutesColumn.getSelectedOptionValue(this)) {
341
+ scrollToOption(
342
+ this,
343
+ "minutes",
344
+ MinutesColumn.getSelectedOptionValue(this),
345
+ "start"
346
+ );
347
+ }
348
+ if (shouldDisplaySecondsPicker(this) && SecondsColumn.getSelectedOptionValue(this)) {
349
+ scrollToOption(
350
+ this,
351
+ "seconds",
352
+ SecondsColumn.getSelectedOptionValue(this),
353
+ "start"
354
+ );
355
+ }
356
+ if (shouldDisplay12hClock(this) && MeridiesColumn.getSelectedOptionValue(this)) {
357
+ scrollToOption(
358
+ this,
359
+ "meridies",
360
+ MeridiesColumn.getSelectedOptionValue(this),
361
+ "start"
362
+ );
363
+ }
364
+ }
365
+ focus(options) {
366
+ const firstFocusableElement = this.shadowRoot.querySelector(
367
+ ".picker"
368
+ );
369
+ firstFocusableElement.focus(options);
370
+ }
371
+ }
372
+ __decorateClass$2([
373
+ vividElement.observable
374
+ ], InlineTimePicker.prototype, "value");
375
+ __decorateClass$2([
376
+ vividElement.observable
377
+ ], InlineTimePicker.prototype, "minutesStep");
378
+ __decorateClass$2([
379
+ vividElement.observable
380
+ ], InlineTimePicker.prototype, "secondsStep");
381
+ __decorateClass$2([
382
+ vividElement.observable
383
+ ], InlineTimePicker.prototype, "clock");
384
+ __decorateClass$2([
385
+ vividElement.observable
386
+ ], InlineTimePicker.prototype, "min");
387
+ __decorateClass$2([
388
+ vividElement.observable
389
+ ], InlineTimePicker.prototype, "max");
390
+ applyMixinsWithObservables.applyMixinsWithObservables(InlineTimePicker, localized.Localized);
391
+
392
+ const styles = ":host{display:inline-block}.time-pickers{display:flex;overflow:hidden;justify-content:center;padding:4px;block-size:calc(28px * var(--_inline-time-picker-num-options-visible) + 4px * (var(--_inline-time-picker-num-options-visible) - 1));gap:4px}.time-pickers .picker{position:relative;display:flex;overflow:hidden;flex-direction:column;padding:0;border-radius:4px;margin:0;gap:4px;inline-size:50px;list-style:none}.time-pickers .picker:hover{overflow-y:auto}.time-pickers .picker:after{display:block;flex-shrink:0;block-size:calc(28px * (var(--_inline-time-picker-num-options-visible) - 1) + 4px * (var(--_inline-time-picker-num-options-visible) - 1 - 1));content:\"\"}.time-pickers .picker:focus-visible{--focus-stroke-gap-color: transparent;--focus-inset: -2px;box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px))}.time-pickers .option{--_connotation-color-primary: var(--vvd-time-picker-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-firm: var(--vvd-time-picker-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-time-picker-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-time-picker-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-dim: var(--vvd-time-picker-accent-dim, var(--vvd-color-neutral-200));--_connotation-color-pale: var(--vvd-time-picker-accent-pale, var(--vvd-color-neutral-300))}.time-pickers .option{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.time-pickers .option:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.time-pickers .option:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.time-pickers .option:where(.selected):where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: transparent}.time-pickers .option{display:flex;flex-shrink:0;align-items:center;justify-content:center;border-radius:4px;background-color:var(--_appearance-color-fill);block-size:28px;color:var(--_appearance-color-text);cursor:pointer;font:var(--vvd-typography-base);inline-size:50px}";
393
+
394
+ const inlineTimePickerDefinition = vividElement.defineVividComponent(
395
+ "inline-time-picker",
396
+ InlineTimePicker,
397
+ InlineTimePickerTemplate,
398
+ [],
399
+ {
400
+ styles,
401
+ shadowOptions: {
402
+ delegatesFocus: true
403
+ }
404
+ }
405
+ );
406
+
407
+ const formatPresentationTime = (timeStr, includeSeconds, use12HourClock) => {
408
+ const time = parseTimeStr(timeStr);
409
+ const hoursStr = formatTimePart(
410
+ use12HourClock ? hoursAs12hClock(time.hours) : time.hours
411
+ );
412
+ let result = `${hoursStr}:${time.minuteStr}`;
413
+ if (includeSeconds) {
414
+ result += `:${time.secondStr}`;
415
+ }
416
+ if (use12HourClock) {
417
+ result += ` ${time.meridiem}`;
418
+ }
419
+ return result;
420
+ };
421
+ const isDigit = (char) => char >= "0" && char <= "9";
422
+ const parsePresentationTime = (input, use12HourClock) => {
423
+ const cleanedInput = input.toLowerCase();
424
+ const numerals = [];
425
+ let meridiem;
426
+ for (let i = 0; i < cleanedInput.length; i++) {
427
+ const char = cleanedInput[i];
428
+ if (char === "a" && cleanedInput[i + 1] === "m") {
429
+ i++;
430
+ meridiem = "AM";
431
+ }
432
+ if (char === "p" && cleanedInput[i + 1] === "m") {
433
+ i++;
434
+ meridiem = "PM";
435
+ }
436
+ if (isDigit(char)) {
437
+ let numeral = char;
438
+ while (isDigit(cleanedInput[i + 1])) {
439
+ i++;
440
+ numeral += cleanedInput[i];
441
+ }
442
+ numerals.push(Number.parseInt(numeral, 10));
443
+ }
444
+ }
445
+ if (numerals.length === 0 || numerals.length > 3) {
446
+ throw new Error("Invalid time format");
447
+ }
448
+ if (meridiem && (numerals[0] < 1 || numerals[0] > 12)) {
449
+ throw new Error("Invalid time format");
450
+ }
451
+ if (meridiem || use12HourClock) {
452
+ if (numerals[0] === 12) {
453
+ numerals[0] = 0;
454
+ }
455
+ }
456
+ if (meridiem === "PM") {
457
+ numerals[0] = numerals[0] + 12;
458
+ }
459
+ const [hours, minutes = 0, seconds = 0] = numerals;
460
+ if (hours > 23 || minutes > 59 || seconds > 59) {
461
+ throw new Error("Invalid value");
462
+ }
463
+ return [hours, minutes, seconds].map(formatTimePart).join(":");
464
+ };
465
+
466
+ var __defProp$1 = Object.defineProperty;
467
+ var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
468
+ var __decorateClass$1 = (decorators, target, key, kind) => {
469
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1(target, key) : target;
470
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
471
+ if (decorator = decorators[i])
472
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
473
+ if (kind && result) __defProp$1(target, key, result);
474
+ return result;
475
+ };
476
+ const TimeSelectionPicker = (Base) => {
477
+ class TimeSelectionPickerElement extends Base {
478
+ constructor() {
479
+ super(...arguments);
480
+ this.minutesStep = null;
481
+ this.secondsStep = null;
482
+ // Reformat the presentation value when the clock changes
483
+ this.#clockChangeHandler = {
484
+ handleChange: () => {
485
+ if (this.value) {
486
+ this._presentationValue = this._toPresentationValue(this.value);
487
+ }
488
+ }
489
+ };
490
+ }
491
+ // --- Core ---
492
+ /**
493
+ * @internal
494
+ */
495
+ get _displaySeconds() {
496
+ return this.secondsStep !== null;
497
+ }
498
+ get _use12hClock() {
499
+ return this.clock ? this.clock === "12h" : this.locale.timePicker.defaultTo12HourClock;
500
+ }
501
+ /**
502
+ * @internal
503
+ */
504
+ get _timePlaceholder() {
505
+ let format = "hh:mm";
506
+ if (this._displaySeconds) {
507
+ format += ":ss";
508
+ }
509
+ if (this._use12hClock) {
510
+ format += " aa";
511
+ }
512
+ return format;
513
+ }
514
+ #clockChangeHandler;
515
+ #clockChangeObserver;
516
+ #startObservingClockChanges() {
517
+ this.#clockChangeObserver = vividElement.Observable.binding(
518
+ () => this._use12hClock,
519
+ this.#clockChangeHandler
520
+ );
521
+ this.#clockChangeObserver.observe(this, vividElement.defaultExecutionContext);
522
+ }
523
+ #stopObservingClockChanges() {
524
+ this.#clockChangeObserver.disconnect();
525
+ }
526
+ /**
527
+ * @internal
528
+ */
529
+ connectedCallback() {
530
+ super.connectedCallback();
531
+ this.#startObservingClockChanges();
532
+ }
533
+ /**
534
+ * @internal
535
+ */
536
+ disconnectedCallback() {
537
+ super.disconnectedCallback();
538
+ this.#stopObservingClockChanges();
539
+ }
540
+ // --- Picker button ---
541
+ /**
542
+ * @internal
543
+ */
544
+ _onPickerButtonClick() {
545
+ super._onPickerButtonClick();
546
+ if (this._popupOpen) {
547
+ vividElement.DOM.processUpdates();
548
+ this._inlineTimePickerEl.scrollSelectedOptionsToTop();
549
+ }
550
+ }
551
+ // --- Inline time picker ---
552
+ /**
553
+ * @internal
554
+ */
555
+ _onInlineTimePickerChange(event) {
556
+ this._updateValueDueToUserInteraction(
557
+ this._withUpdatedTime(event.detail)
558
+ );
559
+ }
560
+ /**
561
+ * @internal
562
+ */
563
+ _onInlineTimePickerLastColumnSelected() {
564
+ this._closePopup();
565
+ }
566
+ }
567
+ __decorateClass$1([
568
+ vividElement.attr({ attribute: "minutes-step", converter: vividElement.nullableNumberConverter })
569
+ ], TimeSelectionPickerElement.prototype, "minutesStep", 2);
570
+ __decorateClass$1([
571
+ vividElement.attr({ attribute: "seconds-step", converter: vividElement.nullableNumberConverter })
572
+ ], TimeSelectionPickerElement.prototype, "secondsStep", 2);
573
+ __decorateClass$1([
574
+ vividElement.attr
575
+ ], TimeSelectionPickerElement.prototype, "clock", 2);
576
+ __decorateClass$1([
577
+ vividElement.volatile
578
+ ], TimeSelectionPickerElement.prototype, "_use12hClock", 1);
579
+ return TimeSelectionPickerElement;
580
+ };
581
+
582
+ var __defProp = Object.defineProperty;
583
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
584
+ var __decorateClass = (decorators, target, key, kind) => {
585
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
586
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
587
+ if (decorator = decorators[i])
588
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
589
+ if (kind && result) __defProp(target, key, result);
590
+ return result;
591
+ };
592
+ const ValidTimeFilter = {
593
+ fromView: (value) => {
594
+ if (value && isValidTimeStr(value)) {
595
+ return value;
596
+ }
597
+ return "";
598
+ },
599
+ toView(value) {
600
+ return value;
601
+ }
602
+ };
603
+ exports.TimePicker = class TimePicker extends TimeSelectionPicker(
604
+ singleValuePicker.SingleValuePicker(pickerField_template.PickerField)
605
+ ) {
606
+ // --- Core ---
607
+ constructor() {
608
+ super();
609
+ /**
610
+ * @internal
611
+ */
612
+ this._isValidValue = isValidTimeStr;
613
+ this.min = "";
614
+ this.max = "";
615
+ this.proxy.type = "time";
616
+ this.proxy.step = "1";
617
+ }
618
+ /**
619
+ * @internal
620
+ */
621
+ _toPresentationValue(value) {
622
+ return formatPresentationTime(
623
+ value,
624
+ this._displaySeconds,
625
+ this._use12hClock
626
+ );
627
+ }
628
+ /**
629
+ * @internal
630
+ */
631
+ _parsePresentationValue(presentationValue) {
632
+ return parsePresentationTime(presentationValue, this._use12hClock);
633
+ }
634
+ /**
635
+ * @internal
636
+ */
637
+ get _timeValue() {
638
+ return this.value;
639
+ }
640
+ /**
641
+ * @internal
642
+ */
643
+ _withUpdatedTime(timeStr) {
644
+ return timeStr;
645
+ }
646
+ /**
647
+ * @internal
648
+ */
649
+ get _resolvedMinTime() {
650
+ return this.min || null;
651
+ }
652
+ /**
653
+ * @internal
654
+ */
655
+ get _resolvedMaxTime() {
656
+ return this.max || null;
657
+ }
658
+ /**
659
+ * @internal
660
+ */
661
+ minChanged(_, newMin) {
662
+ if (this.proxy instanceof HTMLInputElement) {
663
+ this.proxy.min = newMin;
664
+ this.validate();
665
+ }
666
+ }
667
+ /**
668
+ * @internal
669
+ */
670
+ maxChanged(_, newMax) {
671
+ if (this.proxy instanceof HTMLInputElement) {
672
+ this.proxy.max = newMax;
673
+ this.validate();
674
+ }
675
+ }
676
+ // --- Text field ---
677
+ /**
678
+ * @internal
679
+ */
680
+ get _textFieldPlaceholder() {
681
+ return this._timePlaceholder;
682
+ }
683
+ // --- Picker button ---
684
+ /**
685
+ * @internal
686
+ */
687
+ get _pickerButtonIcon() {
688
+ return "clock-line";
689
+ }
690
+ /**
691
+ * @internal
692
+ */
693
+ get _pickerButtonLabel() {
694
+ if (this.value) {
695
+ return this.locale.timePicker.changeTimeLabel(
696
+ this._toPresentationValue(this.value)
697
+ );
698
+ }
699
+ return this.locale.timePicker.chooseTimeLabel;
700
+ }
701
+ /**
702
+ * @internal
703
+ */
704
+ _onPickerButtonClick() {
705
+ super._onPickerButtonClick();
706
+ if (this._popupOpen) {
707
+ vividElement.DOM.processUpdates();
708
+ this._focusableElsWithinDialog()[0].focus();
709
+ }
710
+ }
711
+ // --- Dialog ---
712
+ /**
713
+ * @internal
714
+ */
715
+ get _dialogLabel() {
716
+ return this.locale.timePicker.chooseTimeLabel;
717
+ }
718
+ /**
719
+ * @internal
720
+ */
721
+ _focusableElsWithinDialog() {
722
+ return this._dialogEl.querySelectorAll(
723
+ "#inline-time-picker, .vwc-button"
724
+ );
725
+ }
726
+ // --- Validation ---
727
+ /**
728
+ * @internal
729
+ */
730
+ _getCustomValidationError() {
731
+ if (this._isPresentationValueInvalid()) {
732
+ return this.locale.timePicker.invalidTimeError;
733
+ }
734
+ return null;
735
+ }
736
+ };
737
+ __decorateClass([
738
+ vividElement.attr({ converter: ValidTimeFilter })
739
+ ], exports.TimePicker.prototype, "min", 2);
740
+ __decorateClass([
741
+ vividElement.attr({ converter: ValidTimeFilter })
742
+ ], exports.TimePicker.prototype, "max", 2);
743
+ exports.TimePicker = __decorateClass([
744
+ formElements.errorText,
745
+ formElements.formElements
746
+ ], exports.TimePicker);
747
+
748
+ const TimeSelectionPickerTemplate = (context, numOptionsVisible) => {
749
+ const inlineTimePickerTag = context.tagFor(InlineTimePicker);
750
+ return vividElement.html`
751
+ <${inlineTimePickerTag}
752
+ id='inline-time-picker'
753
+ ${ref.ref("_inlineTimePickerEl")}
754
+ style="--_inline-time-picker-num-options-visible: ${() => numOptionsVisible}"
755
+ tabindex='1'
756
+ :value='${(x) => x._timeValue || void 0}'
757
+ :clock='${(x) => x._use12hClock ? "12h" : "24h"}'
758
+ :min='${(x) => x._resolvedMinTime || void 0}'
759
+ :max='${(x) => x._resolvedMaxTime || void 0}'
760
+ :minutesStep='${(x) => x.minutesStep ?? 1}'
761
+ :secondsStep='${(x) => x.secondsStep ?? void 0}'
762
+ @change='${(x, c) => x._onInlineTimePickerChange(c.event)}'
763
+ @last-column-selected='${(x) => x._onInlineTimePickerLastColumnSelected()}'
764
+ >
765
+ </${inlineTimePickerTag}>
766
+ `;
767
+ };
768
+
769
+ exports.TimeSelectionPicker = TimeSelectionPicker;
770
+ exports.TimeSelectionPickerTemplate = TimeSelectionPickerTemplate;
771
+ exports.ValidTimeFilter = ValidTimeFilter;
772
+ exports.compareTimeStr = compareTimeStr;
773
+ exports.formatPresentationTime = formatPresentationTime;
774
+ exports.inlineTimePickerDefinition = inlineTimePickerDefinition;
775
+ exports.isValidTimeStr = isValidTimeStr;
776
+ exports.parsePresentationTime = parsePresentationTime;