vectis-ui 0.8.0 → 0.9.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 (432) hide show
  1. package/README.md +68 -334
  2. package/dist/components/VAccordion/VAccordionItem.d.ts +4 -6
  3. package/dist/components/VAccordion/VAccordionItem.js.map +1 -1
  4. package/dist/components/VAccordion/VAccordionItem.vue_vue_type_script_setup_true_lang.js +21 -19
  5. package/dist/components/VAccordion/VAccordionItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  6. package/dist/components/VAccordion/context.d.ts +6 -1
  7. package/dist/components/VAccordion/context.js.map +1 -1
  8. package/dist/components/VAvatar/VAvatar.css +1 -1
  9. package/dist/components/VAvatar/VAvatar.d.ts +5 -3
  10. package/dist/components/VAvatar/VAvatar.js.map +1 -1
  11. package/dist/components/VAvatar/VAvatar.vue_vue_type_script_setup_true_lang.js +53 -39
  12. package/dist/components/VAvatar/VAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  13. package/dist/components/VAvatar/VAvatarGroup.d.ts +12 -3
  14. package/dist/components/VAvatar/VAvatarGroup.js.map +1 -1
  15. package/dist/components/VAvatar/VAvatarGroup.vue_vue_type_script_setup_true_lang.js +27 -20
  16. package/dist/components/VAvatar/VAvatarGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  17. package/dist/components/VAvatar/context.d.ts +2 -2
  18. package/dist/components/VAvatar/context.js.map +1 -1
  19. package/dist/components/VBadge/VBadge.css +1 -1
  20. package/dist/components/VBadge/VBadge.d.ts +8 -4
  21. package/dist/components/VBadge/VBadge.js.map +1 -1
  22. package/dist/components/VBadge/VBadge.vue_vue_type_script_setup_true_lang.js +6 -3
  23. package/dist/components/VBadge/VBadge.vue_vue_type_script_setup_true_lang.js.map +1 -1
  24. package/dist/components/VBreadcrumb/VBreadcrumb.d.ts +5 -4
  25. package/dist/components/VBreadcrumb/VBreadcrumb.js.map +1 -1
  26. package/dist/components/VBreadcrumb/VBreadcrumb.vue_vue_type_script_setup_true_lang.js +8 -3
  27. package/dist/components/VBreadcrumb/VBreadcrumb.vue_vue_type_script_setup_true_lang.js.map +1 -1
  28. package/dist/components/VButton/VButton.css +1 -1
  29. package/dist/components/VButton/VButton.d.ts +4 -1
  30. package/dist/components/VButton/VButton.js.map +1 -1
  31. package/dist/components/VButton/VButton.vue_vue_type_script_setup_true_lang.js +8 -7
  32. package/dist/components/VButton/VButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/components/VButton/VButtonGroup.js.map +1 -1
  34. package/dist/components/VButton/VButtonGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  35. package/dist/components/VCalendar/VCalendar.css +1 -1
  36. package/dist/components/VCalendar/VCalendar.d.ts +15 -6
  37. package/dist/components/VCalendar/VCalendar.js.map +1 -1
  38. package/dist/components/VCalendar/VCalendar.vue_vue_type_script_setup_true_lang.js +144 -126
  39. package/dist/components/VCalendar/VCalendar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  40. package/dist/components/VCalendar/VCalendarEvent.css +1 -1
  41. package/dist/components/VCalendar/VCalendarEvent.d.ts +1 -1
  42. package/dist/components/VCalendar/VCalendarEvent.js.map +1 -1
  43. package/dist/components/VCalendar/VCalendarEvent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  44. package/dist/components/VCalendar/VCalendarMonth.css +1 -1
  45. package/dist/components/VCalendar/VCalendarMonth.d.ts +1 -1
  46. package/dist/components/VCalendar/VCalendarMonth.js.map +1 -1
  47. package/dist/components/VCalendar/VCalendarMonth.vue_vue_type_script_setup_true_lang.js +99 -90
  48. package/dist/components/VCalendar/VCalendarMonth.vue_vue_type_script_setup_true_lang.js.map +1 -1
  49. package/dist/components/VCalendar/VCalendarTimeGrid.css +1 -1
  50. package/dist/components/VCalendar/VCalendarTimeGrid.d.ts +3 -3
  51. package/dist/components/VCalendar/VCalendarTimeGrid.js.map +1 -1
  52. package/dist/components/VCalendar/VCalendarTimeGrid.vue_vue_type_script_setup_true_lang.js +256 -246
  53. package/dist/components/VCalendar/VCalendarTimeGrid.vue_vue_type_script_setup_true_lang.js.map +1 -1
  54. package/dist/components/VCalendar/VCalendarYear.css +1 -1
  55. package/dist/components/VCalendar/VCalendarYear.d.ts +8 -1
  56. package/dist/components/VCalendar/VCalendarYear.js.map +1 -1
  57. package/dist/components/VCalendar/VCalendarYear.vue_vue_type_script_setup_true_lang.js +39 -32
  58. package/dist/components/VCalendar/VCalendarYear.vue_vue_type_script_setup_true_lang.js.map +1 -1
  59. package/dist/components/VCalendar/color.d.ts +1 -1
  60. package/dist/components/VCalendar/color.js.map +1 -1
  61. package/dist/components/VCalendar/edgeStep.d.ts +3 -3
  62. package/dist/components/VCalendar/edgeStep.js +5 -0
  63. package/dist/components/VCalendar/edgeStep.js.map +1 -1
  64. package/dist/components/VCalendar/gesture.d.ts +10 -9
  65. package/dist/components/VCalendar/gesture.js +60 -45
  66. package/dist/components/VCalendar/gesture.js.map +1 -1
  67. package/dist/components/VCalendar/keyboard.d.ts +22 -5
  68. package/dist/components/VCalendar/keyboard.js +17 -16
  69. package/dist/components/VCalendar/keyboard.js.map +1 -1
  70. package/dist/components/VCalendar/layout.d.ts +47 -37
  71. package/dist/components/VCalendar/layout.js +47 -37
  72. package/dist/components/VCalendar/layout.js.map +1 -1
  73. package/dist/components/VCalendar/timeGrid.d.ts +4 -4
  74. package/dist/components/VCalendar/timeGrid.js +6 -6
  75. package/dist/components/VCalendar/timeGrid.js.map +1 -1
  76. package/dist/components/VCalendar/types.d.ts +5 -5
  77. package/dist/components/VCarousel/VCarousel.css +1 -1
  78. package/dist/components/VCarousel/VCarousel.d.ts +59 -38
  79. package/dist/components/VCarousel/VCarousel.js.map +1 -1
  80. package/dist/components/VCarousel/VCarousel.vue_vue_type_script_setup_true_lang.js +161 -132
  81. package/dist/components/VCarousel/VCarousel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  82. package/dist/components/VCarousel/VCarouselItem.d.ts +1 -1
  83. package/dist/components/VCarousel/VCarouselItem.js.map +1 -1
  84. package/dist/components/VCarousel/VCarouselItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  85. package/dist/components/VCarousel/context.d.ts +1 -1
  86. package/dist/components/VCarousel/context.js.map +1 -1
  87. package/dist/components/VCheckbox/VCheckbox.css +1 -1
  88. package/dist/components/VCheckbox/VCheckbox.d.ts +2 -2
  89. package/dist/components/VCheckbox/VCheckbox.js.map +1 -1
  90. package/dist/components/VCheckbox/VCheckbox.vue_vue_type_script_setup_true_lang.js +10 -8
  91. package/dist/components/VCheckbox/VCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  92. package/dist/components/VChip/VChip.css +1 -1
  93. package/dist/components/VChip/VChip.d.ts +7 -2
  94. package/dist/components/VChip/VChip.js.map +1 -1
  95. package/dist/components/VChip/VChip.vue_vue_type_script_setup_true_lang.js +69 -55
  96. package/dist/components/VChip/VChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  97. package/dist/components/VCombobox/VCombobox.css +1 -1
  98. package/dist/components/VCombobox/VCombobox.d.ts +50 -36
  99. package/dist/components/VCombobox/VCombobox.js.map +1 -1
  100. package/dist/components/VCombobox/VCombobox.vue_vue_type_script_setup_true_lang.js +167 -161
  101. package/dist/components/VCombobox/VCombobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  102. package/dist/components/VCombobox/VComboboxGroup.css +1 -1
  103. package/dist/components/VCombobox/VComboboxGroup.js.map +1 -1
  104. package/dist/components/VCombobox/VComboboxGroup.vue_vue_type_script_setup_true_lang.js +1 -1
  105. package/dist/components/VCombobox/VComboboxGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  106. package/dist/components/VCombobox/infiniteScroll.d.ts +12 -3
  107. package/dist/components/VCombobox/infiniteScroll.js +18 -12
  108. package/dist/components/VCombobox/infiniteScroll.js.map +1 -1
  109. package/dist/components/VDataTable/VDataTable.css +1 -1
  110. package/dist/components/VDataTable/VDataTable.d.ts +55 -24
  111. package/dist/components/VDataTable/VDataTable.js.map +1 -1
  112. package/dist/components/VDataTable/VDataTable.vue_vue_type_script_setup_true_lang.js +192 -155
  113. package/dist/components/VDataTable/VDataTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  114. package/dist/components/VDateInput/VDateInput.css +1 -1
  115. package/dist/components/VDateInput/VDateInput.d.ts +15 -12
  116. package/dist/components/VDateInput/VDateInput.js.map +1 -1
  117. package/dist/components/VDateInput/VDateInput.vue_vue_type_script_setup_true_lang.js +180 -160
  118. package/dist/components/VDateInput/VDateInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  119. package/dist/components/VDateInput/mask.d.ts +95 -0
  120. package/dist/components/VDateInput/mask.js +118 -0
  121. package/dist/components/VDateInput/mask.js.map +1 -0
  122. package/dist/components/VDatePicker/VDatePicker.css +1 -1
  123. package/dist/components/VDatePicker/VDatePicker.d.ts +6 -5
  124. package/dist/components/VDatePicker/VDatePicker.js.map +1 -1
  125. package/dist/components/VDatePicker/VDatePicker.vue_vue_type_script_setup_true_lang.js +204 -173
  126. package/dist/components/VDatePicker/VDatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  127. package/dist/components/VDatePicker/keyboard.d.ts +3 -3
  128. package/dist/components/VDatePicker/keyboard.js.map +1 -1
  129. package/dist/components/VDatePicker/names.d.ts +34 -0
  130. package/dist/components/VDatePicker/names.js +42 -0
  131. package/dist/components/VDatePicker/names.js.map +1 -0
  132. package/dist/components/VDialog/VDialog.css +1 -1
  133. package/dist/components/VDialog/VDialog.d.ts +2 -2
  134. package/dist/components/VDialog/VDialog.js.map +1 -1
  135. package/dist/components/VDialog/VDialog.vue_vue_type_script_setup_true_lang.js +63 -41
  136. package/dist/components/VDialog/VDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  137. package/dist/components/VFileInput/VFileInput.d.ts +38 -25
  138. package/dist/components/VFileInput/VFileInput.js.map +1 -1
  139. package/dist/components/VFileInput/VFileInput.vue_vue_type_script_setup_true_lang.js +74 -71
  140. package/dist/components/VFileInput/VFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  141. package/dist/components/VFileInput/truncate.d.ts +4 -4
  142. package/dist/components/VFileInput/truncate.js.map +1 -1
  143. package/dist/components/VFilePicker/VFilePicker.css +1 -1
  144. package/dist/components/VFilePicker/VFilePicker.d.ts +54 -37
  145. package/dist/components/VFilePicker/VFilePicker.js.map +1 -1
  146. package/dist/components/VFilePicker/VFilePicker.vue_vue_type_script_setup_true_lang.js +152 -135
  147. package/dist/components/VFilePicker/VFilePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  148. package/dist/components/VFilePicker/fileKind.d.ts +2 -2
  149. package/dist/components/VFilePicker/fileKind.js.map +1 -1
  150. package/dist/components/VHotkeys/VHotkeys.css +1 -1
  151. package/dist/components/VHotkeys/VHotkeys.d.ts +10 -8
  152. package/dist/components/VHotkeys/VHotkeys.js.map +1 -1
  153. package/dist/components/VHotkeys/VHotkeys.vue_vue_type_script_setup_true_lang.js +22 -20
  154. package/dist/components/VHotkeys/VHotkeys.vue_vue_type_script_setup_true_lang.js.map +1 -1
  155. package/dist/components/VHotkeys/platform.d.ts +9 -7
  156. package/dist/components/VHotkeys/platform.js +41 -30
  157. package/dist/components/VHotkeys/platform.js.map +1 -1
  158. package/dist/components/VIcon/VIcon.css +1 -1
  159. package/dist/components/VIcon/VIcon.d.ts +6 -6
  160. package/dist/components/VIcon/VIcon.js.map +1 -1
  161. package/dist/components/VIcon/VIcon.vue_vue_type_script_setup_true_lang.js.map +1 -1
  162. package/dist/components/VIcon/iconProps.d.ts +4 -4
  163. package/dist/components/VIcon/iconProps.js.map +1 -1
  164. package/dist/components/VIcon/icons/index.d.ts +1 -1
  165. package/dist/components/VIcon/icons/index.js.map +1 -1
  166. package/dist/components/VIcon/icons/names.d.ts +1 -1
  167. package/dist/components/VIcon/icons/names.js.map +1 -1
  168. package/dist/components/VIcon/resolver.d.ts +3 -3
  169. package/dist/components/VIcon/resolver.js +23 -20
  170. package/dist/components/VIcon/resolver.js.map +1 -1
  171. package/dist/components/VIcon/types.d.ts +4 -4
  172. package/dist/components/VIconButton/VIconButton.d.ts +4 -4
  173. package/dist/components/VIconButton/VIconButton.js.map +1 -1
  174. package/dist/components/VIconButton/VIconButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  175. package/dist/components/VInput/VInput.d.ts +16 -8
  176. package/dist/components/VInput/VInput.js.map +1 -1
  177. package/dist/components/VInput/VInput.vue_vue_type_script_setup_true_lang.js +22 -16
  178. package/dist/components/VInput/VInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  179. package/dist/components/VInput/VInputGroup.css +1 -1
  180. package/dist/components/VInput/VInputGroup.js.map +1 -1
  181. package/dist/components/VInput/VInputGroup.vue_vue_type_script_setup_true_lang.js +43 -28
  182. package/dist/components/VInput/VInputGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  183. package/dist/components/VInputOTP/VInputOTP.css +1 -1
  184. package/dist/components/VInputOTP/VInputOTP.d.ts +3 -3
  185. package/dist/components/VInputOTP/VInputOTP.js.map +1 -1
  186. package/dist/components/VInputOTP/VInputOTP.vue_vue_type_script_setup_true_lang.js +152 -85
  187. package/dist/components/VInputOTP/VInputOTP.vue_vue_type_script_setup_true_lang.js.map +1 -1
  188. package/dist/components/VMenu/VMenu.d.ts +4 -4
  189. package/dist/components/VMenu/VMenu.js.map +1 -1
  190. package/dist/components/VMenu/VMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
  191. package/dist/components/VMenu/VMenuGroup.css +1 -1
  192. package/dist/components/VMenu/VMenuGroup.js.map +1 -1
  193. package/dist/components/VMenu/VMenuGroup.vue_vue_type_script_setup_true_lang.js +18 -11
  194. package/dist/components/VMenu/VMenuGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  195. package/dist/components/VMenu/VMenuItem.css +1 -1
  196. package/dist/components/VMenu/VMenuItem.d.ts +6 -6
  197. package/dist/components/VMenu/VMenuItem.js.map +1 -1
  198. package/dist/components/VMenu/VMenuItem.vue_vue_type_script_setup_true_lang.js +83 -69
  199. package/dist/components/VMenu/VMenuItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  200. package/dist/components/VMenu/VMenuPanel.css +1 -1
  201. package/dist/components/VMenu/VMenuPanel.d.ts +2 -2
  202. package/dist/components/VMenu/VMenuPanel.js.map +1 -1
  203. package/dist/components/VMenu/VMenuPanel.vue_vue_type_script_setup_true_lang.js +56 -55
  204. package/dist/components/VMenu/VMenuPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  205. package/dist/components/VMenu/context.d.ts +2 -2
  206. package/dist/components/VMenu/context.js.map +1 -1
  207. package/dist/components/VPagination/VPagination.css +1 -1
  208. package/dist/components/VPagination/VPagination.d.ts +22 -9
  209. package/dist/components/VPagination/VPagination.js.map +1 -1
  210. package/dist/components/VPagination/VPagination.vue_vue_type_script_setup_true_lang.js +67 -57
  211. package/dist/components/VPagination/VPagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  212. package/dist/components/VPopover/VPopover.css +1 -1
  213. package/dist/components/VPopover/VPopover.d.ts +1 -1
  214. package/dist/components/VPopover/VPopover.js.map +1 -1
  215. package/dist/components/VPopover/VPopover.vue_vue_type_script_setup_true_lang.js.map +1 -1
  216. package/dist/components/VProgressCircular/VProgressCircular.css +1 -1
  217. package/dist/components/VProgressCircular/VProgressCircular.d.ts +12 -7
  218. package/dist/components/VProgressCircular/VProgressCircular.js.map +1 -1
  219. package/dist/components/VProgressCircular/VProgressCircular.vue_vue_type_script_setup_true_lang.js.map +1 -1
  220. package/dist/components/VProgressLinear/VProgressLinear.css +1 -1
  221. package/dist/components/VProgressLinear/VProgressLinear.d.ts +15 -10
  222. package/dist/components/VProgressLinear/VProgressLinear.js.map +1 -1
  223. package/dist/components/VProgressLinear/VProgressLinear.vue_vue_type_script_setup_true_lang.js.map +1 -1
  224. package/dist/components/VRadio/VRadio.css +1 -1
  225. package/dist/components/VRadio/VRadio.js.map +1 -1
  226. package/dist/components/VRadio/VRadio.vue_vue_type_script_setup_true_lang.js +3 -3
  227. package/dist/components/VRadio/VRadio.vue_vue_type_script_setup_true_lang.js.map +1 -1
  228. package/dist/components/VSeparator/VSeparator.d.ts +1 -1
  229. package/dist/components/VSeparator/VSeparator.js.map +1 -1
  230. package/dist/components/VSeparator/VSeparator.vue_vue_type_script_setup_true_lang.js.map +1 -1
  231. package/dist/components/VSideNavigation/VSideNavigation.d.ts +2 -2
  232. package/dist/components/VSideNavigation/VSideNavigation.js.map +1 -1
  233. package/dist/components/VSideNavigation/VSideNavigation.vue_vue_type_script_setup_true_lang.js +1 -1
  234. package/dist/components/VSideNavigation/VSideNavigation.vue_vue_type_script_setup_true_lang.js.map +1 -1
  235. package/dist/components/VSideNavigation/VSideNavigationGroup.css +1 -1
  236. package/dist/components/VSideNavigation/VSideNavigationGroup.js.map +1 -1
  237. package/dist/components/VSideNavigation/VSideNavigationGroup.vue_vue_type_script_setup_true_lang.js +1 -1
  238. package/dist/components/VSideNavigation/VSideNavigationGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
  239. package/dist/components/VSideNavigation/VSideNavigationItem.css +1 -1
  240. package/dist/components/VSideNavigation/VSideNavigationItem.d.ts +12 -13
  241. package/dist/components/VSideNavigation/VSideNavigationItem.js.map +1 -1
  242. package/dist/components/VSideNavigation/VSideNavigationItem.vue_vue_type_script_setup_true_lang.js +87 -68
  243. package/dist/components/VSideNavigation/VSideNavigationItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  244. package/dist/components/VSkeletonLoader/VSkeletonLoader.css +1 -1
  245. package/dist/components/VSkeletonLoader/VSkeletonLoader.d.ts +10 -7
  246. package/dist/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
  247. package/dist/components/VSkeletonLoader/VSkeletonLoader.vue_vue_type_script_setup_true_lang.js +5 -5
  248. package/dist/components/VSkeletonLoader/VSkeletonLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  249. package/dist/components/VSlider/VSlider.css +1 -1
  250. package/dist/components/VSlider/VSlider.d.ts +21 -7
  251. package/dist/components/VSlider/VSlider.js.map +1 -1
  252. package/dist/components/VSlider/VSlider.vue_vue_type_script_setup_true_lang.js +159 -140
  253. package/dist/components/VSlider/VSlider.vue_vue_type_script_setup_true_lang.js.map +1 -1
  254. package/dist/components/VSnackbar/VSnackbar.css +1 -1
  255. package/dist/components/VSnackbar/VSnackbar.d.ts +4 -4
  256. package/dist/components/VSnackbar/VSnackbar.js.map +1 -1
  257. package/dist/components/VSnackbar/VSnackbar.vue_vue_type_script_setup_true_lang.js +85 -59
  258. package/dist/components/VSnackbar/VSnackbar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  259. package/dist/components/VSnackbar/state.d.ts +7 -7
  260. package/dist/components/VSnackbar/state.js +13 -11
  261. package/dist/components/VSnackbar/state.js.map +1 -1
  262. package/dist/components/VSpinner/VSpinner.css +1 -1
  263. package/dist/components/VSpinner/VSpinner.js.map +1 -1
  264. package/dist/components/VSpinner/VSpinner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  265. package/dist/components/VSwitch/VSwitch.css +1 -1
  266. package/dist/components/VSwitch/VSwitch.d.ts +1 -1
  267. package/dist/components/VSwitch/VSwitch.js.map +1 -1
  268. package/dist/components/VSwitch/VSwitch.vue_vue_type_script_setup_true_lang.js +4 -4
  269. package/dist/components/VSwitch/VSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  270. package/dist/components/VTabs/VTab.css +1 -1
  271. package/dist/components/VTabs/VTab.d.ts +4 -0
  272. package/dist/components/VTabs/VTab.js.map +1 -1
  273. package/dist/components/VTabs/VTab.vue_vue_type_script_setup_true_lang.js +9 -8
  274. package/dist/components/VTabs/VTab.vue_vue_type_script_setup_true_lang.js.map +1 -1
  275. package/dist/components/VTabs/VTabs.css +1 -1
  276. package/dist/components/VTabs/VTabs.d.ts +17 -7
  277. package/dist/components/VTabs/VTabs.js.map +1 -1
  278. package/dist/components/VTabs/VTabs.vue_vue_type_script_setup_true_lang.js +84 -77
  279. package/dist/components/VTabs/VTabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
  280. package/dist/components/VTextarea/VTextarea.d.ts +8 -8
  281. package/dist/components/VTextarea/VTextarea.js.map +1 -1
  282. package/dist/components/VTextarea/VTextarea.vue_vue_type_script_setup_true_lang.js +71 -69
  283. package/dist/components/VTextarea/VTextarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  284. package/dist/components/VTimeInput/VTimeInput.css +1 -1
  285. package/dist/components/VTimeInput/VTimeInput.d.ts +21 -12
  286. package/dist/components/VTimeInput/VTimeInput.js.map +1 -1
  287. package/dist/components/VTimeInput/VTimeInput.vue_vue_type_script_setup_true_lang.js +230 -206
  288. package/dist/components/VTimeInput/VTimeInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  289. package/dist/components/VTimeInput/search.d.ts +17 -2
  290. package/dist/components/VTimeInput/search.js +19 -9
  291. package/dist/components/VTimeInput/search.js.map +1 -1
  292. package/dist/components/VTimePicker/VTimePicker.css +1 -1
  293. package/dist/components/VTimePicker/VTimePicker.d.ts +8 -7
  294. package/dist/components/VTimePicker/VTimePicker.js.map +1 -1
  295. package/dist/components/VTimePicker/VTimePicker.vue_vue_type_script_setup_true_lang.js +128 -106
  296. package/dist/components/VTimePicker/VTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  297. package/dist/components/VTimePicker/limits.d.ts +11 -4
  298. package/dist/components/VTimePicker/limits.js +3 -2
  299. package/dist/components/VTimePicker/limits.js.map +1 -1
  300. package/dist/components/VToast/VToast.css +1 -1
  301. package/dist/components/VToast/VToast.js.map +1 -1
  302. package/dist/components/VToast/VToast.vue_vue_type_script_setup_true_lang.js +33 -37
  303. package/dist/components/VToast/VToast.vue_vue_type_script_setup_true_lang.js.map +1 -1
  304. package/dist/components/VToast/VToaster.js.map +1 -1
  305. package/dist/components/VToast/VToaster.vue_vue_type_script_setup_true_lang.js +91 -61
  306. package/dist/components/VToast/VToaster.vue_vue_type_script_setup_true_lang.js.map +1 -1
  307. package/dist/components/VToast/state.d.ts +8 -6
  308. package/dist/components/VToast/state.js +15 -13
  309. package/dist/components/VToast/state.js.map +1 -1
  310. package/dist/components/VToggle/VToggle.css +1 -1
  311. package/dist/components/VToggle/VToggle.d.ts +9 -4
  312. package/dist/components/VToggle/VToggle.js.map +1 -1
  313. package/dist/components/VToggle/VToggle.vue_vue_type_script_setup_true_lang.js +2 -1
  314. package/dist/components/VToggle/VToggle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  315. package/dist/components/VToggle/VToggleItem.d.ts +4 -0
  316. package/dist/components/VToggle/VToggleItem.js.map +1 -1
  317. package/dist/components/VToggle/VToggleItem.vue_vue_type_script_setup_true_lang.js +5 -5
  318. package/dist/components/VToggle/VToggleItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  319. package/dist/components/VTooltip/VTooltip.css +1 -1
  320. package/dist/components/VTooltip/VTooltip.d.ts +17 -10
  321. package/dist/components/VTooltip/VTooltip.js.map +1 -1
  322. package/dist/components/VTooltip/VTooltip.vue_vue_type_script_setup_true_lang.js +46 -26
  323. package/dist/components/VTooltip/VTooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  324. package/dist/components/VTypography/VTypography.css +1 -1
  325. package/dist/components/VTypography/VTypography.d.ts +6 -4
  326. package/dist/components/VTypography/VTypography.js.map +1 -1
  327. package/dist/components/VTypography/VTypography.vue_vue_type_script_setup_true_lang.js.map +1 -1
  328. package/dist/composables/useAriaLabel.js +1 -1
  329. package/dist/composables/useAriaLabel.js.map +1 -1
  330. package/dist/composables/useClearable.d.ts +2 -2
  331. package/dist/composables/useClearable.js.map +1 -1
  332. package/dist/composables/useDetailsOpen.d.ts +3 -3
  333. package/dist/composables/useDetailsOpen.js +14 -12
  334. package/dist/composables/useDetailsOpen.js.map +1 -1
  335. package/dist/composables/useFieldIds.d.ts +2 -1
  336. package/dist/composables/useFieldIds.js +6 -5
  337. package/dist/composables/useFieldIds.js.map +1 -1
  338. package/dist/composables/useFieldPanel.d.ts +2 -2
  339. package/dist/composables/useFieldPanel.js +47 -37
  340. package/dist/composables/useFieldPanel.js.map +1 -1
  341. package/dist/composables/useFileDrop.js +3 -3
  342. package/dist/composables/useFileDrop.js.map +1 -1
  343. package/dist/composables/useFileField.d.ts +1 -1
  344. package/dist/composables/useFileField.js +62 -41
  345. package/dist/composables/useFileField.js.map +1 -1
  346. package/dist/composables/useIconClickHandlers.d.ts +3 -3
  347. package/dist/composables/useIconClickHandlers.js +14 -13
  348. package/dist/composables/useIconClickHandlers.js.map +1 -1
  349. package/dist/composables/useInertLink.js +12 -10
  350. package/dist/composables/useInertLink.js.map +1 -1
  351. package/dist/composables/useLiveAnnouncer.d.ts +5 -0
  352. package/dist/composables/useLiveAnnouncer.js +23 -0
  353. package/dist/composables/useLiveAnnouncer.js.map +1 -0
  354. package/dist/composables/useMaskedField.d.ts +5 -5
  355. package/dist/composables/useMaskedField.js.map +1 -1
  356. package/dist/composables/usePopover.d.ts +3 -3
  357. package/dist/composables/usePopover.js +6 -4
  358. package/dist/composables/usePopover.js.map +1 -1
  359. package/dist/composables/useProgressValue.js +11 -2
  360. package/dist/composables/useProgressValue.js.map +1 -1
  361. package/dist/composables/useRootAttrs.d.ts +1 -1
  362. package/dist/composables/useRootAttrs.js.map +1 -1
  363. package/dist/composables/useSlotNodes.d.ts +18 -0
  364. package/dist/composables/useSlotNodes.js +13 -0
  365. package/dist/composables/useSlotNodes.js.map +1 -0
  366. package/dist/composables/useTextLimit.d.ts +2 -1
  367. package/dist/composables/useTextLimit.js +2 -2
  368. package/dist/composables/useTextLimit.js.map +1 -1
  369. package/dist/composables/useTimer.d.ts +5 -0
  370. package/dist/composables/useTimer.js +22 -11
  371. package/dist/composables/useTimer.js.map +1 -1
  372. package/dist/i18n/en.js +1 -1
  373. package/dist/i18n/en.js.map +1 -1
  374. package/dist/i18n/fr.js +14 -14
  375. package/dist/i18n/fr.js.map +1 -1
  376. package/dist/i18n/state.d.ts +7 -7
  377. package/dist/i18n/state.js +37 -28
  378. package/dist/i18n/state.js.map +1 -1
  379. package/dist/i18n/types.d.ts +12 -12
  380. package/dist/icons.d.ts +2 -2
  381. package/dist/index.d.ts +12 -11
  382. package/dist/styles.css +1 -1
  383. package/dist/tokens/css.d.ts +1 -1
  384. package/dist/tokens/css.js.map +1 -1
  385. package/dist/tokens/index.d.ts +6 -0
  386. package/dist/tokens/semantic.d.ts +6 -0
  387. package/dist/tokens/semantic.js +66 -60
  388. package/dist/tokens/semantic.js.map +1 -1
  389. package/dist/tokens/themes/dark.js +3 -3
  390. package/dist/tokens/themes/dark.js.map +1 -1
  391. package/dist/tokens.json +130 -66
  392. package/dist/types.d.ts +1 -1
  393. package/dist/utils/arrowNav.d.ts +4 -1
  394. package/dist/utils/arrowNav.js +7 -7
  395. package/dist/utils/arrowNav.js.map +1 -1
  396. package/dist/utils/chip.d.ts +1 -1
  397. package/dist/utils/chip.js.map +1 -1
  398. package/dist/utils/clock.d.ts +113 -0
  399. package/dist/utils/clock.js +84 -0
  400. package/dist/utils/clock.js.map +1 -0
  401. package/dist/utils/css.d.ts +6 -4
  402. package/dist/utils/css.js +2 -2
  403. package/dist/utils/css.js.map +1 -1
  404. package/dist/utils/date.d.ts +7 -102
  405. package/dist/utils/date.js +33 -160
  406. package/dist/utils/date.js.map +1 -1
  407. package/dist/utils/direction.d.ts +1 -1
  408. package/dist/utils/direction.js.map +1 -1
  409. package/dist/utils/env.d.ts +12 -3
  410. package/dist/utils/env.js +6 -0
  411. package/dist/utils/env.js.map +1 -0
  412. package/dist/utils/file.d.ts +3 -3
  413. package/dist/utils/file.js +1 -1
  414. package/dist/utils/file.js.map +1 -1
  415. package/dist/utils/focus.d.ts +1 -1
  416. package/dist/utils/focus.js.map +1 -1
  417. package/dist/utils/hostWarns.d.ts +1 -1
  418. package/dist/utils/hostWarns.js.map +1 -1
  419. package/dist/utils/ids.d.ts +1 -1
  420. package/dist/utils/ids.js.map +1 -1
  421. package/dist/utils/matcher.d.ts +2 -2
  422. package/dist/utils/matcher.js.map +1 -1
  423. package/dist/utils/memo.d.ts +1 -1
  424. package/dist/utils/memo.js.map +1 -1
  425. package/dist/utils/text.d.ts +3 -3
  426. package/dist/utils/text.js.map +1 -1
  427. package/dist/utils/time.d.ts +2 -101
  428. package/dist/utils/time.js +22 -98
  429. package/dist/utils/time.js.map +1 -1
  430. package/dist/utils/vnode.d.ts +5 -3
  431. package/dist/utils/vnode.js.map +1 -1
  432. package/package.json +2 -2
@@ -1,11 +1,11 @@
1
1
  import { addDays as e, addMonths as t, compareISO as n, formatDateDisplay as r, parseISO as i } from "../../utils/date.js";
2
- import { monthWeeks as a } from "./layout.js";
3
- import { Fragment as o, computed as s, createCommentVNode as c, createElementBlock as l, createElementVNode as u, createTextVNode as d, defineComponent as f, normalizeClass as p, normalizeStyle as m, openBlock as h, renderList as g, toDisplayString as _ } from "vue";
2
+ import { lastDayOf as a, monthWeeks as o } from "./layout.js";
3
+ import { Fragment as s, computed as c, createCommentVNode as l, createElementBlock as u, createElementVNode as d, createTextVNode as f, defineComponent as p, normalizeClass as m, normalizeStyle as h, openBlock as g, ref as _, renderList as v, toDisplayString as y } from "vue";
4
4
  //#region src/components/VCalendar/VCalendarYear.vue?vue&type=script&setup=true&lang.ts
5
- var v = ["aria-label"], y = ["onClick"], b = {
5
+ var b = ["aria-label"], x = ["disabled", "onClick"], S = {
6
6
  key: 0,
7
7
  class: "v-calendar-year-count"
8
- }, x = ["data-adjacent", "data-busy"], S = /*@__PURE__*/ f({
8
+ }, C = ["data-adjacent", "data-busy"], w = /*@__PURE__*/ p({
9
9
  __name: "VCalendarYear",
10
10
  props: {
11
11
  months: {},
@@ -13,28 +13,29 @@ var v = ["aria-label"], y = ["onClick"], b = {
13
13
  locale: {},
14
14
  weekdays: {},
15
15
  today: {},
16
- label: {}
16
+ label: {},
17
+ disabled: { type: Boolean }
17
18
  },
18
19
  emits: ["month-activate"],
19
- setup(f, { emit: S }) {
20
- let C = f, w = S, T = s(() => {
21
- let r = /* @__PURE__ */ new Set(), a = C.months[0], o = C.months.at(-1);
22
- if (!a || !o) return r;
23
- let s = e(t(o, 1), -1);
24
- for (let t of C.events) {
20
+ setup(p, { expose: w, emit: T }) {
21
+ let E = p, D = T, O = c(() => {
22
+ let r = /* @__PURE__ */ new Set(), o = E.months[0], s = E.months.at(-1);
23
+ if (!o || !s) return r;
24
+ let c = e(t(s, 1), -1);
25
+ for (let t of E.events) {
25
26
  if (!i(t.start) || !i(t.end)) continue;
26
- let o = n(t.start, a) > 0 ? t.start : a, c = n(t.end, s) < 0 ? t.end : s;
27
- for (let t = o; n(t, c) <= 0; t = e(t, 1)) r.add(t);
27
+ let s = n(t.start, o) > 0 ? t.start : o, l = a(t), u = n(l, c) < 0 ? l : c;
28
+ for (let t = s; n(t, u) <= 0; t = e(t, 1)) r.add(t);
28
29
  }
29
30
  return r;
30
- }), E = s(() => C.months.map((e) => a(e, C.weekdays))), D = s(() => {
31
+ }), k = c(() => E.months.map((e) => o(e, E.weekdays))), A = c(() => {
31
32
  let e = /* @__PURE__ */ new Map();
32
- for (let t of E.value) for (let n of t) for (let t of n) e.has(t.iso) || e.set(t.iso, r(t.iso, C.locale, { day: "numeric" }));
33
+ for (let t of k.value) for (let n of t) for (let t of n) e.has(t.iso) || e.set(t.iso, r(t.iso, E.locale, { day: "numeric" }));
33
34
  return e;
34
- }), O = s(() => {
35
- let e = T.value, t = D.value;
36
- return C.months.map((n, i) => {
37
- let a = 0, o = (E.value[i] ?? []).map((n) => n.map((n) => {
35
+ }), j = c(() => {
36
+ let e = O.value, t = A.value;
37
+ return E.months.map((n, i) => {
38
+ let a = 0, o = (k.value[i] ?? []).map((n) => n.map((n) => {
38
39
  let r = n.adjacent === null && e.has(n.iso);
39
40
  return r && a++, {
40
41
  iso: n.iso,
@@ -45,36 +46,42 @@ var v = ["aria-label"], y = ["onClick"], b = {
45
46
  }));
46
47
  return {
47
48
  month: n,
48
- name: r(n, C.locale, { month: "long" }),
49
+ name: r(n, E.locale, { month: "long" }),
49
50
  weeks: o,
50
51
  busyCount: a
51
52
  };
52
53
  });
53
- });
54
- return (e, t) => (h(), l("div", {
54
+ }), M = _(null);
55
+ return w({
56
+ focus: (e) => M.value?.querySelector(".v-calendar-year-title")?.focus(e),
57
+ scrollToMinutes: () => {}
58
+ }), (e, t) => (g(), u("div", {
59
+ ref_key: "rootEl",
60
+ ref: M,
55
61
  class: "v-calendar-year",
56
62
  role: "group",
57
- "aria-label": f.label
58
- }, [(h(!0), l(o, null, g(O.value, (e) => (h(), l("section", {
63
+ "aria-label": p.label
64
+ }, [(g(!0), u(s, null, v(j.value, (e) => (g(), u("section", {
59
65
  key: e.month,
60
66
  class: "v-calendar-year-month"
61
- }, [u("button", {
67
+ }, [d("button", {
62
68
  type: "button",
63
69
  class: "v-calendar-button v-calendar-year-title",
64
- onClick: (t) => w("month-activate", e.month)
65
- }, [d(_(e.name) + " ", 1), e.busyCount > 0 ? (h(), l("span", b, _(e.busyCount), 1)) : c("", !0)], 8, y), u("div", {
70
+ disabled: p.disabled,
71
+ onClick: (t) => D("month-activate", e.month)
72
+ }, [f(y(e.name) + " ", 1), e.busyCount > 0 ? (g(), u("span", S, y(e.busyCount), 1)) : l("", !0)], 8, x), d("div", {
66
73
  class: "v-calendar-year-grid",
67
74
  "aria-hidden": "true",
68
- style: m({ "--calendar-columns": String(f.weekdays.length) })
69
- }, [(h(!0), l(o, null, g(e.weeks, (e, t) => (h(), l(o, { key: t }, [(h(!0), l(o, null, g(e, (e) => (h(), l("span", {
75
+ style: h({ "--calendar-columns": String(p.weekdays.length) })
76
+ }, [(g(!0), u(s, null, v(e.weeks, (e, t) => (g(), u(s, { key: t }, [(g(!0), u(s, null, v(e, (e) => (g(), u("span", {
70
77
  key: e.iso,
71
- class: p(["v-calendar-year-day", { "v-calendar-today": e.iso === f.today }]),
78
+ class: m(["v-calendar-year-day", { "v-calendar-today": e.iso === p.today }]),
72
79
  "data-adjacent": e.adjacent ?? void 0,
73
80
  "data-busy": e.busy ? "" : void 0
74
- }, _(e.number), 11, x))), 128))], 64))), 128))], 4)]))), 128))], 8, v));
81
+ }, y(e.number), 11, C))), 128))], 64))), 128))], 4)]))), 128))], 8, b));
75
82
  }
76
83
  });
77
84
  //#endregion
78
- export { S as default };
85
+ export { w as default };
79
86
 
80
87
  //# sourceMappingURL=VCalendarYear.vue_vue_type_script_setup_true_lang.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VCalendarYear.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/VCalendar/VCalendarYear.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"E extends CalendarEvent\">\n// @a11y @core\n/**\n * The year view: twelve small months, each marking the days that have something on them.\n * Internal to VCalendar, whose documentation covers it.\n *\n * WHY THE DAYS ARE NOT BUTTONS, unlike every other view. A year is 365 days, and making each\n * focusable would put that many stops in the tab order for a view meant to be glanced at.\n * Twelve roving grids would fix the count but leave the arrows unable to cross from one\n * month to the next, which is exactly the movement a year view invites.\n *\n * So it is a SUMMARY and says so: the days are text with the busy ones ringed, and what can\n * be reached and acted on is the MONTH, whose name carries how many of its days are busy.\n * Choosing a day is what the month and day views are for, and the heading is the way through.\n */\nimport { computed } from 'vue'\n\nimport { addDays, addMonths, compareISO, formatDateDisplay, parseISO } from '../../utils/date'\n\nimport { monthWeeks, type MonthCell } from './layout'\nimport type { CalendarEvent } from './types'\n\nexport interface CalendarYearProps<T> {\n /** The first day of each month of the year on show. */\n months: string[]\n events: T[]\n locale: string\n /** Which weekdays are on show, so a mini-month drops the same columns as the others. */\n weekdays: number[]\n today: string | null\n label: string\n}\n\nconst props = defineProps<CalendarYearProps<E>>()\n\nconst emit = defineEmits<{\n /** A month was chosen, and is where the calendar should go next. */\n 'month-activate': [iso: string]\n}>()\n\n/**\n * The days of the year on show that have something on them, worked out once for all twelve.\n *\n * Walked day by day rather than tested against every square: a year holds far more squares\n * than a schedule holds days, so filling a set from the events and asking it one question per\n * square is the cheaper way round. Each walk is CLAMPED to the year on show, the only days a\n * mini-month marks — so an event from another year costs one comparison, and a range running\n * across several years walks only the part of it this year holds.\n */\nconst busyDays = computed(() => {\n const days = new Set<string>()\n const first = props.months[0]\n const lastMonth = props.months.at(-1)\n if (!first || !lastMonth) return days\n const last = addDays(addMonths(lastMonth, 1), -1)\n\n for (const event of props.events) {\n if (!parseISO(event.start) || !parseISO(event.end)) continue\n const from = compareISO(event.start, first) > 0 ? event.start : first\n const to = compareISO(event.end, last) < 0 ? event.end : last\n for (let iso = from; compareISO(iso, to) <= 0; iso = addDays(iso, 1)) days.add(iso)\n }\n return days\n})\n\n/*\n * The twelve grids, built ONCE per change of anchor or weekdays, and their day numbers once per\n * locale: the adjacent days repeat across neighbouring months, and none of it depends on the\n * events. The busy marks are laid over both in `yearMonths` below.\n */\nconst grids = computed(() => props.months.map((month) => monthWeeks(month, props.weekdays)))\n\nconst dayNumbers = computed(() => {\n const map = new Map<string, string>()\n for (const weeks of grids.value) {\n for (const week of weeks) {\n for (const cell of week) {\n if (!map.has(cell.iso))\n map.set(cell.iso, formatDateDisplay(cell.iso, props.locale, { day: 'numeric' }))\n }\n }\n }\n return map\n})\n\n/** One square of a mini-month, with everything the template writes on it already settled. */\ninterface YearDay {\n iso: string\n adjacent: MonthCell['adjacent']\n number: string\n /** Only a day of the month itself is marked: a neighbour's day belongs to its own month. */\n busy: boolean\n}\n\n/**\n * What the template draws, each month with its name, its squares and how many of them are busy.\n *\n * The template reaches a month's count twice, in the `v-if` and in the text beside it, and each\n * square asks whether it is busy: reading them here means the busy set is walked once per\n * render rather than once per square, and the count is never computed twice.\n */\nconst yearMonths = computed(() => {\n const busy = busyDays.value\n const numbers = dayNumbers.value\n return props.months.map((month, index) => {\n let busyCount = 0\n const weeks: YearDay[][] = (grids.value[index] ?? []).map((week) =>\n week.map((cell) => {\n const isBusy = cell.adjacent === null && busy.has(cell.iso)\n if (isBusy) busyCount++\n return {\n iso: cell.iso,\n adjacent: cell.adjacent,\n number: numbers.get(cell.iso) ?? '',\n busy: isBusy,\n }\n }),\n )\n return {\n month,\n name: formatDateDisplay(month, props.locale, { month: 'long' }),\n weeks,\n busyCount,\n }\n })\n})\n</script>\n\n<template>\n <div class=\"v-calendar-year\" role=\"group\" :aria-label=\"label\">\n <section v-for=\"entry in yearMonths\" :key=\"entry.month\" class=\"v-calendar-year-month\">\n <button\n type=\"button\"\n class=\"v-calendar-button v-calendar-year-title\"\n @click=\"emit('month-activate', entry.month)\"\n >\n {{ entry.name }}\n <!-- The count is part of the button's own text, so a month that has something on it\n says so in its accessible name — which is what makes the days below safe to hide\n from the accessibility tree. -->\n <span v-if=\"entry.busyCount > 0\" class=\"v-calendar-year-count\">\n {{ entry.busyCount }}\n </span>\n </button>\n\n <div\n class=\"v-calendar-year-grid\"\n aria-hidden=\"true\"\n :style=\"{ '--calendar-columns': String(weekdays.length) }\"\n >\n <template v-for=\"(week, row) in entry.weeks\" :key=\"row\">\n <span\n v-for=\"day in week\"\n :key=\"day.iso\"\n class=\"v-calendar-year-day\"\n :class=\"{ 'v-calendar-today': day.iso === today }\"\n :data-adjacent=\"day.adjacent ?? undefined\"\n :data-busy=\"day.busy ? '' : undefined\"\n >\n {{ day.number }}\n </span>\n </template>\n </div>\n </section>\n </div>\n</template>\n\n<style>\n@layer vectis.components {\n .v-calendar-year {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr));\n gap: var(--vectis-space-4);\n padding: var(--vectis-space-3);\n }\n\n .v-calendar-year-month {\n display: flex;\n flex-direction: column;\n gap: var(--vectis-space-2);\n }\n\n .v-calendar-year-title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--vectis-space-2);\n padding: var(--vectis-space-1) var(--vectis-space-2);\n border-radius: var(--vectis-radius-interactive);\n color: var(--vectis-color-text);\n font-size: var(--vectis-text-heading-4-size);\n font-weight: var(--vectis-text-heading-4-weight);\n text-align: start;\n text-transform: capitalize;\n }\n\n .v-calendar-year-title:hover {\n background: var(--vectis-color-surface-muted);\n }\n\n .v-calendar-year-count {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: none;\n min-inline-size: var(--vectis-control-size-calendar-year-cell);\n padding-inline: var(--vectis-space-1);\n border-radius: var(--vectis-radius-pill);\n background: var(--vectis-color-accent-surface);\n color: var(--vectis-color-accent-text);\n font-size: var(--vectis-text-caption-size);\n font-weight: var(--vectis-font-weight-medium);\n }\n\n /* As many columns as weekdays on show, set inline by the template exactly as the month\n view does. Written as a literal 7, a calendar showing the working week alone wrapped\n every five-day row of `monthWeeks` onto the next line. */\n .v-calendar-year-grid {\n display: grid;\n grid-template-columns: repeat(var(--calendar-columns), 1fr);\n gap: 1px;\n }\n\n .v-calendar-year-day {\n display: flex;\n align-items: center;\n justify-content: center;\n aspect-ratio: 1;\n min-inline-size: var(--vectis-control-size-calendar-year-cell);\n border-radius: var(--vectis-radius-pill);\n font-size: var(--vectis-text-caption-size);\n }\n\n /*\n * TRAP — both states are written DISJOINT from today rather than below it. Today is very\n * often also busy, and its paint is `.v-calendar-today`, in VCalendar's sheet: at equal\n * specificity the winner between two sheets is whichever the consumer's bundler emitted last,\n * and losing that draw paints today as an ordinary busy day — the one square a reader looks\n * for first, quietly indistinguishable.\n */\n .v-calendar-year-day[data-adjacent]:not(.v-calendar-today) {\n color: var(--vectis-color-text-subtle);\n }\n\n /* A busy day is RINGED rather than dotted: at this size a dot would be about one pixel,\n and it would be drawn as a background, which Windows forced-colors flattens away —\n where a border keeps a colour of its own. The tint is a second, redundant signal for\n anyone the ring alone is too fine for — and the ring alone is what today keeps, being\n painted over the tint. */\n .v-calendar-year-day[data-busy] {\n border: 1px solid var(--vectis-color-accent-border);\n }\n\n .v-calendar-year-day[data-busy]:not(.v-calendar-today) {\n background: var(--vectis-color-accent-surface);\n color: var(--vectis-color-accent-text);\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAiCA,IAAM,IAAQ,GAER,IAAO,GAcP,IAAW,QAAe;GAC9B,IAAM,oBAAO,IAAI,IAAY,GACvB,IAAQ,EAAM,OAAO,IACrB,IAAY,EAAM,OAAO,GAAG,EAAE;GACpC,IAAI,CAAC,KAAS,CAAC,GAAW,OAAO;GACjC,IAAM,IAAO,EAAQ,EAAU,GAAW,CAAC,GAAG,EAAE;GAEhD,KAAK,IAAM,KAAS,EAAM,QAAQ;IAChC,IAAI,CAAC,EAAS,EAAM,KAAK,KAAK,CAAC,EAAS,EAAM,GAAG,GAAG;IACpD,IAAM,IAAO,EAAW,EAAM,OAAO,CAAK,IAAI,IAAI,EAAM,QAAQ,GAC1D,IAAK,EAAW,EAAM,KAAK,CAAI,IAAI,IAAI,EAAM,MAAM;IACzD,KAAK,IAAI,IAAM,GAAM,EAAW,GAAK,CAAE,KAAK,GAAG,IAAM,EAAQ,GAAK,CAAC,GAAG,EAAK,IAAI,CAAG;GACpF;GACA,OAAO;EACT,CAAC,GAOK,IAAQ,QAAe,EAAM,OAAO,KAAK,MAAU,EAAW,GAAO,EAAM,QAAQ,CAAC,CAAC,GAErF,IAAa,QAAe;GAChC,IAAM,oBAAM,IAAI,IAAoB;GACpC,KAAK,IAAM,KAAS,EAAM,OACxB,KAAK,IAAM,KAAQ,GACjB,KAAK,IAAM,KAAQ,GACjB,AAAK,EAAI,IAAI,EAAK,GAAG,KACnB,EAAI,IAAI,EAAK,KAAK,EAAkB,EAAK,KAAK,EAAM,QAAQ,EAAE,KAAK,UAAU,CAAC,CAAC;GAIvF,OAAO;EACT,CAAC,GAkBK,IAAa,QAAe;GAChC,IAAM,IAAO,EAAS,OAChB,IAAU,EAAW;GAC3B,OAAO,EAAM,OAAO,KAAK,GAAO,MAAU;IACxC,IAAI,IAAY,GACV,KAAsB,EAAM,MAAM,MAAU,CAAC,EAAA,CAAG,KAAK,MACzD,EAAK,KAAK,MAAS;KACjB,IAAM,IAAS,EAAK,aAAa,QAAQ,EAAK,IAAI,EAAK,GAAG;KAE1D,OADI,KAAQ,KACL;MACL,KAAK,EAAK;MACV,UAAU,EAAK;MACf,QAAQ,EAAQ,IAAI,EAAK,GAAG,KAAK;MACjC,MAAM;KACR;IACF,CAAC,CACH;IACA,OAAO;KACL;KACA,MAAM,EAAkB,GAAO,EAAM,QAAQ,EAAE,OAAO,OAAO,CAAC;KAC9D;KACA;IACF;GACF,CAAC;EACH,CAAC;yBAIC,EAmCM,OAAA;GAnCD,OAAM;GAAkB,MAAK;GAAS,cAAY,EAAA;cACrD,EAiCU,GAAA,MAAA,EAjCe,EAAA,QAAT,YAAhB,EAiCU,WAAA;GAjC4B,KAAK,EAAM;GAAO,OAAM;MAC5D,EAYS,UAAA;GAXP,MAAK;GACL,OAAM;GACL,UAAK,MAAE,EAAI,kBAAmB,EAAM,KAAK;UAEvC,EAAM,IAAI,IAAG,KAIhB,CAAA,GAAY,EAAM,YAAS,KAAA,EAAA,GAA3B,EAEO,QAFP,GAEO,EADF,EAAM,SAAS,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,GAAA,GAAA,CAAA,GAItB,EAiBM,OAAA;GAhBJ,OAAM;GACN,eAAY;GACX,OAAK,EAAA,EAAA,sBAA0B,OAAO,EAAA,SAAS,MAAM,EAAA,CAAA;cAEtD,EAWW,GAAA,MAAA,EAXqB,EAAM,QAApB,GAAM,wBAA2B,EAAG,GAAA,EAAA,EAAA,EAAA,GACpD,EASO,GAAA,MAAA,EARS,IAAP,YADT,EASO,QAAA;GAPJ,KAAK,EAAI;GACV,OAAK,EAAA,CAAC,uBAAqB,EAAA,oBACG,EAAI,QAAQ,EAAA,MAAK,CAAA,CAAA;GAC9C,iBAAe,EAAI,YAAY,KAAA;GAC/B,aAAW,EAAI,OAAI,KAAQ,KAAA;OAEzB,EAAI,MAAM,GAAA,IAAA,CAAA"}
1
+ {"version":3,"file":"VCalendarYear.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/VCalendar/VCalendarYear.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"E extends CalendarEvent\">\n// @a11y @core\n/**\n * The year view: twelve small months, each marking the days that have something on them.\n * Internal to VCalendar, whose documentation covers it.\n *\n * WHY THE DAYS ARE NOT BUTTONS, unlike every other view. A year is 365 days, and making each\n * focusable would put that many stops in the tab order for a view meant to be glanced at.\n * Twelve roving grids would fix the count but leave the arrows unable to cross from one\n * month to the next, which is exactly the movement a year view invites.\n *\n * So it is a SUMMARY and says so: the days are text with the busy ones ringed, and what can\n * be reached and acted on is the MONTH, whose name carries how many of its days are busy.\n * Choosing a day is what the month and day views are for, and the heading is the way through.\n */\nimport { computed, ref } from 'vue'\n\nimport { addDays, addMonths, compareISO, formatDateDisplay, parseISO } from '../../utils/date'\n\nimport { lastDayOf, monthWeeks, type MonthCell } from './layout'\nimport type { CalendarEvent } from './types'\n\nexport interface CalendarYearProps<T> {\n /** The first day of each month of the year on show. */\n months: string[]\n events: T[]\n locale: string\n /** Which weekdays are on show, so a mini-month drops the same columns as the others. */\n weekdays: number[]\n today: string | null\n label: string\n /** Turns the twelve month headings into disabled buttons, out of the tab order. */\n disabled?: boolean\n}\n\nconst props = defineProps<CalendarYearProps<E>>()\n\nconst emit = defineEmits<{\n /** A month was chosen, and is where the calendar should go next. */\n 'month-activate': [iso: string]\n}>()\n\n/**\n * The days of the year on show that have something on them, worked out once for all twelve.\n *\n * Walked day by day rather than tested against every square: a year holds far more squares\n * than a schedule holds days, so filling a set from the events and asking it one question per\n * square is the cheaper way round. Each walk is CLAMPED to the year on show, the only days a\n * mini-month marks — so an event from another year costs one comparison, and a range running\n * across several years walks only the part of it this year holds.\n */\nconst busyDays = computed(() => {\n const days = new Set<string>()\n const first = props.months[0]\n const lastMonth = props.months.at(-1)\n if (!first || !lastMonth) return days\n const last = addDays(addMonths(lastMonth, 1), -1)\n\n for (const event of props.events) {\n if (!parseISO(event.start) || !parseISO(event.end)) continue\n const from = compareISO(event.start, first) > 0 ? event.start : first\n const end = lastDayOf(event)\n const to = compareISO(end, last) < 0 ? end : last\n for (let iso = from; compareISO(iso, to) <= 0; iso = addDays(iso, 1)) days.add(iso)\n }\n return days\n})\n\n/*\n * The twelve grids, built ONCE per change of anchor or weekdays, and their day numbers once per\n * locale: the adjacent days repeat across neighbouring months, and none of it depends on the\n * events. The busy marks are laid over both in `yearMonths` below.\n */\nconst grids = computed(() => props.months.map((month) => monthWeeks(month, props.weekdays)))\n\nconst dayNumbers = computed(() => {\n const map = new Map<string, string>()\n for (const weeks of grids.value) {\n for (const week of weeks) {\n for (const cell of week) {\n if (!map.has(cell.iso))\n map.set(cell.iso, formatDateDisplay(cell.iso, props.locale, { day: 'numeric' }))\n }\n }\n }\n return map\n})\n\n/** One square of a mini-month, with everything the template writes on it already settled. */\ninterface YearDay {\n iso: string\n adjacent: MonthCell['adjacent']\n number: string\n /** Only a day of the month itself is marked: a neighbour's day belongs to its own month. */\n busy: boolean\n}\n\n/**\n * What the template draws, each month with its name, its squares and how many of them are busy.\n *\n * The template reaches a month's count twice, in the `v-if` and in the text beside it, and each\n * square asks whether it is busy: reading them here means the busy set is walked once per\n * render rather than once per square, and the count is never computed twice.\n */\nconst yearMonths = computed(() => {\n const busy = busyDays.value\n const numbers = dayNumbers.value\n return props.months.map((month, index) => {\n let busyCount = 0\n const weeks: YearDay[][] = (grids.value[index] ?? []).map((week) =>\n week.map((cell) => {\n const isBusy = cell.adjacent === null && busy.has(cell.iso)\n if (isBusy) busyCount++\n return {\n iso: cell.iso,\n adjacent: cell.adjacent,\n number: numbers.get(cell.iso) ?? '',\n busy: isBusy,\n }\n }),\n )\n return {\n month,\n name: formatDateDisplay(month, props.locale, { month: 'long' }),\n weeks,\n busyCount,\n }\n })\n})\n\nconst rootEl = ref<HTMLElement | null>(null)\n\ndefineExpose({\n /** Brings the focus onto the first month, the view's first control. */\n focus: (options?: FocusOptions) =>\n rootEl.value?.querySelector<HTMLButtonElement>('.v-calendar-year-title')?.focus(options),\n /** Nothing to scroll to in a year view. */\n scrollToMinutes: () => {},\n})\n</script>\n\n<template>\n <div ref=\"rootEl\" class=\"v-calendar-year\" role=\"group\" :aria-label=\"label\">\n <section v-for=\"entry in yearMonths\" :key=\"entry.month\" class=\"v-calendar-year-month\">\n <button\n type=\"button\"\n class=\"v-calendar-button v-calendar-year-title\"\n :disabled=\"disabled\"\n @click=\"emit('month-activate', entry.month)\"\n >\n {{ entry.name }}\n <!-- The count is part of the button's own text, so a month that has something on it\n says so in its accessible name — which is what makes the days below safe to hide\n from the accessibility tree. -->\n <span v-if=\"entry.busyCount > 0\" class=\"v-calendar-year-count\">\n {{ entry.busyCount }}\n </span>\n </button>\n\n <div\n class=\"v-calendar-year-grid\"\n aria-hidden=\"true\"\n :style=\"{ '--calendar-columns': String(weekdays.length) }\"\n >\n <template v-for=\"(week, row) in entry.weeks\" :key=\"row\">\n <span\n v-for=\"day in week\"\n :key=\"day.iso\"\n class=\"v-calendar-year-day\"\n :class=\"{ 'v-calendar-today': day.iso === today }\"\n :data-adjacent=\"day.adjacent ?? undefined\"\n :data-busy=\"day.busy ? '' : undefined\"\n >\n {{ day.number }}\n </span>\n </template>\n </div>\n </section>\n </div>\n</template>\n\n<style>\n@layer vectis.components {\n .v-calendar-year {\n display: grid;\n grid-template-columns: repeat(\n auto-fill,\n minmax(var(--vectis-control-size-calendar-year-month), 1fr)\n );\n gap: var(--vectis-space-4);\n padding: var(--vectis-space-3);\n }\n\n .v-calendar-year-month {\n display: flex;\n flex-direction: column;\n gap: var(--vectis-space-2);\n }\n\n .v-calendar-year-title {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--vectis-space-2);\n padding: var(--vectis-space-1) var(--vectis-space-2);\n border-radius: var(--vectis-radius-interactive);\n color: var(--vectis-color-text);\n font-size: var(--vectis-text-heading-4-size);\n font-weight: var(--vectis-text-heading-4-weight);\n text-align: start;\n text-transform: capitalize;\n }\n\n .v-calendar-year-title:hover {\n background: var(--vectis-color-surface-muted);\n }\n\n .v-calendar-year-count {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: none;\n min-inline-size: var(--vectis-control-size-calendar-year-cell);\n padding-inline: var(--vectis-space-1);\n border-radius: var(--vectis-radius-pill);\n background: var(--vectis-color-accent-surface);\n color: var(--vectis-color-accent-text);\n font-size: var(--vectis-text-caption-size);\n font-weight: var(--vectis-font-weight-medium);\n }\n\n /* As many columns as weekdays on show, set inline by the template exactly as the month\n view does. Written as a literal 7, a calendar showing the working week alone wrapped\n every five-day row of `monthWeeks` onto the next line. */\n .v-calendar-year-grid {\n display: grid;\n grid-template-columns: repeat(var(--calendar-columns), 1fr);\n gap: 1px;\n }\n\n .v-calendar-year-day {\n display: flex;\n align-items: center;\n justify-content: center;\n aspect-ratio: 1;\n min-inline-size: var(--vectis-control-size-calendar-year-cell);\n border-radius: var(--vectis-radius-pill);\n font-size: var(--vectis-text-caption-size);\n }\n\n /*\n * TRAP — both states are written DISJOINT from today rather than below it. Today is very\n * often also busy, and its paint is `.v-calendar-today`, in VCalendar's sheet: at equal\n * specificity the winner between two sheets is whichever the consumer's bundler emitted last,\n * and losing that draw paints today as an ordinary busy day — the one square a reader looks\n * for first, quietly indistinguishable.\n */\n .v-calendar-year-day[data-adjacent]:not(.v-calendar-today) {\n color: var(--vectis-color-text-subtle);\n }\n\n /* A busy day is RINGED rather than dotted: at this size a dot would be about one pixel,\n and it would be drawn as a background, which Windows forced-colors flattens away —\n where a border keeps a colour of its own. The tint is a second, redundant signal for\n anyone the ring alone is too fine for — and the ring alone is what today keeps, being\n painted over the tint. */\n .v-calendar-year-day[data-busy] {\n border: 1px solid var(--vectis-color-accent-border);\n }\n\n .v-calendar-year-day[data-busy]:not(.v-calendar-today) {\n background: var(--vectis-color-accent-surface);\n color: var(--vectis-color-accent-text);\n }\n}\n</style>\n"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { CalendarEventId } from './types.js';
3
3
  * A stable hue, 0 to 359, for an event that carries no colour of its own.
4
4
  *
5
5
  * The hash is the usual djb2 walk over the id written out as text, so a numeric id and the
6
- * string of the same digits agree — which matters because an id makes the round trip
6
+ * string of the same digits agree. This matters because an id makes the round trip
7
7
  * through a consumer's JSON and may well come back as the other one.
8
8
  */
9
9
  export declare function hueOf(id: CalendarEventId): number;
@@ -1 +1 @@
1
- {"version":3,"file":"color.js","names":[],"sources":["../../../src/components/VCalendar/color.ts"],"sourcesContent":["// @core\n/**\n * The colour an event is drawn in when it names none.\n *\n * The rule is that the same event is always the same colour, whatever order the list\n * arrives in and whatever a filter has just removed from it — so the colour is derived\n * from the event's id and from nothing else. Deriving it from the position in the array\n * would repaint the whole calendar every time one event was added at the top.\n *\n * Only the HUE is derived. The lightness and the chroma that go with it live in the token\n * layer, one pair per theme, which is what keeps the title's contrast against its card a\n * fixed quantity rather than something that varies around the colour wheel: in OKLCH the\n * L axis is perceptual, so two fixed lightnesses are the same perceived distance apart at\n * every hue. See the `color.event-*` tokens in `tokens/semantic.ts`.\n *\n * Pure, hence deterministic, hence the server and the browser derive the same hue and\n * hydration has nothing to disagree about.\n */\nimport type { CalendarEventId } from './types'\n\n/**\n * Knuth's multiplicative constant — the odd integer nearest to 2³² divided by the golden\n * ratio.\n *\n * TRAP — it is not decoration, and removing it makes the palette collapse without any\n * error to show for it. A plain string hash of `\"1\"`, `\"2\"`, `\"3\"` produces three\n * CONSECUTIVE numbers, so taking them modulo 360 directly would give three hues one degree\n * apart: a calendar whose events are numbered in order would come out entirely one colour.\n * Multiplying first scatters neighbouring hashes across the whole circle, which is exactly\n * what the constant is for.\n */\nconst GOLDEN = 2654435761\n\n/** How many degrees the colour wheel has. */\nconst HUES = 360\n\n/**\n * A stable hue, 0 to 359, for an event that carries no colour of its own.\n *\n * The hash is the usual djb2 walk over the id written out as text, so a numeric id and the\n * string of the same digits agree — which matters because an id makes the round trip\n * through a consumer's JSON and may well come back as the other one.\n */\nexport function hueOf(id: CalendarEventId): number {\n const text = String(id)\n let hash = 5381\n for (let i = 0; i < text.length; i++) {\n // `| 0` keeps the running value a 32-bit integer, so the result cannot depend on how\n // far a double drifts once the multiplications exceed the exactly representable range.\n hash = ((hash << 5) + hash + text.charCodeAt(i)) | 0\n }\n return Math.abs(Math.imul(hash, GOLDEN) >>> 0) % HUES\n}\n"],"mappings":"AA2CA,SAAgB,EAAM,GAA6B;CACjD,IAAM,IAAO,OAAO,CAAE,GAClB,IAAO;CACX,KAAK,IAAI,IAAI,GAAG,IAAI,EAAK,QAAQ,KAG/B,KAAS,KAAQ,KAAK,IAAO,EAAK,WAAW,CAAC,IAAK;CAErD,OAAO,KAAK,IAAI,KAAK,KAAK,GAAM,UAAM,MAAM,CAAC,IAAI;AACnD"}
1
+ {"version":3,"file":"color.js","names":[],"sources":["../../../src/components/VCalendar/color.ts"],"sourcesContent":["// @core\n/**\n * The colour an event is drawn in when it names none.\n *\n * The rule is that the same event is always the same colour, whatever order the list\n * arrives in and whatever a filter has just removed from it — so the colour is derived\n * from the event's id and from nothing else. Deriving it from the position in the array\n * would repaint the whole calendar every time one event was added at the top.\n *\n * Only the HUE is derived. The lightness and the chroma that go with it live in the token\n * layer, one pair per theme, which is what keeps the title's contrast against its card a\n * fixed quantity rather than something that varies around the colour wheel: in OKLCH the\n * L axis is perceptual, so two fixed lightnesses are the same perceived distance apart at\n * every hue. See the `color.event-*` tokens in `tokens/semantic.ts`.\n *\n * Pure, hence deterministic, hence the server and the browser derive the same hue and\n * hydration has nothing to disagree about.\n */\nimport type { CalendarEventId } from './types'\n\n/**\n * Knuth's multiplicative constant — the odd integer nearest to 2³² divided by the golden\n * ratio.\n *\n * TRAP — it is not decoration, and removing it makes the palette collapse without any\n * error to show for it. A plain string hash of `\"1\"`, `\"2\"`, `\"3\"` produces three\n * CONSECUTIVE numbers, so taking them modulo 360 directly would give three hues one degree\n * apart: a calendar whose events are numbered in order would come out entirely one colour.\n * Multiplying first scatters neighbouring hashes across the whole circle, which is exactly\n * what the constant is for.\n */\nconst GOLDEN = 2654435761\n\n/** How many degrees the colour wheel has. */\nconst HUES = 360\n\n/**\n * A stable hue, 0 to 359, for an event that carries no colour of its own.\n *\n * The hash is the usual djb2 walk over the id written out as text, so a numeric id and the\n * string of the same digits agree. This matters because an id makes the round trip\n * through a consumer's JSON and may well come back as the other one.\n */\nexport function hueOf(id: CalendarEventId): number {\n const text = String(id)\n let hash = 5381\n for (let i = 0; i < text.length; i++) {\n // `| 0` keeps the running value a 32-bit integer, so the result cannot depend on how\n // far a double drifts once the multiplications exceed the exactly representable range.\n hash = ((hash << 5) + hash + text.charCodeAt(i)) | 0\n }\n return Math.abs(Math.imul(hash, GOLDEN) >>> 0) % HUES\n}\n"],"mappings":"AA2CA,SAAgB,EAAM,GAA6B;CACjD,IAAM,IAAO,OAAO,CAAE,GAClB,IAAO;CACX,KAAK,IAAI,IAAI,GAAG,IAAI,EAAK,QAAQ,KAG/B,KAAS,KAAQ,KAAK,IAAO,EAAK,WAAW,CAAC,IAAK;CAErD,OAAO,KAAK,IAAI,KAAK,KAAK,GAAM,UAAM,MAAM,CAAC,IAAI;AACnD"}
@@ -5,13 +5,13 @@ import { Ref } from 'vue';
5
5
  * Long enough that aiming at the edge column never pages by accident, short enough that
6
6
  * deliberately holding there does not feel broken. It is a matter of feel rather than of
7
7
  * correctness, so it is tuned by eye and exposed as `edgeStepDelay` for anyone who disagrees
8
- * — which is also why no test pins the number itself.
8
+ *, which is also why no test pins the number itself.
9
9
  */
10
10
  export declare const EDGE_STEP_DELAY = 800;
11
11
  /**
12
12
  * How wide the edge zone is, in pixels.
13
13
  *
14
- * TRAP — this number is the twin of `--vectis-control-size-calendar-edge`, the width of the
14
+ * TRAP: this number is the twin of `--vectis-control-size-calendar-edge`, the width of the
15
15
  * band the stylesheet lights up to show that paging is coming. They describe the same strip:
16
16
  * moving one without the other leaves the calendar paging from somewhere other than where it
17
17
  * said it would, with nothing anywhere to point at it. The same arrangement as
@@ -33,6 +33,6 @@ export interface EdgeStep {
33
33
  }
34
34
  /**
35
35
  * `delay` is a getter rather than a number so a consumer can turn paging off mid-drag by
36
- * binding it to zero — the reactive-prop-as-switch shape VCarousel's `autoplay` uses.
36
+ * binding it to zero: the reactive-prop-as-switch shape VCarousel's `autoplay` uses.
37
37
  */
38
38
  export declare function useEdgeStep(onStep: (direction: EdgeDirection) => void, delay: () => number): EdgeStep;
@@ -12,6 +12,11 @@ function r(r, i) {
12
12
  if (t <= 0) return;
13
13
  o.value = e;
14
14
  let n = () => {
15
+ let t = i();
16
+ if (t <= 0) {
17
+ o.value = null;
18
+ return;
19
+ }
15
20
  r(e), a.start(n, t);
16
21
  };
17
22
  a.start(n, t);
@@ -1 +1 @@
1
- {"version":3,"file":"edgeStep.js","names":[],"sources":["../../../src/components/VCalendar/edgeStep.ts"],"sourcesContent":["// @core\n/**\n * Holding a dragged event against the side of the calendar to turn the page.\n *\n * Without it, moving a meeting to next week means dropping it, navigating, and picking it up\n * again — the drag can only ever reach what is already on screen. With it, resting against an\n * edge shows the previous or next period and the event carries on travelling.\n *\n * WHY IT WAITS. Paging the instant the pointer touched the edge would make the last day of the\n * week unaimable: you would have to approach it from above and stop dead, and the smallest\n * overshoot would throw you into the following week. The delay is what separates \"I am aiming\n * at the edge column\" from \"I want to go further\", and it is the only thing that does.\n *\n * It sits in VCalendar's own folder rather than in `composables/` because VCalendar owns the\n * contract and both of its consumers are inside this component — the same reasoning as\n * `VCombobox/infiniteScroll.ts`, which is likewise a Vue-using module living beside the thing\n * it belongs to.\n */\nimport { readonly, ref, type Ref } from 'vue'\n\nimport { useTimer } from '../../composables/useTimer'\n\n/**\n * How long a dragged event rests against an edge before the calendar pages, in milliseconds.\n *\n * Long enough that aiming at the edge column never pages by accident, short enough that\n * deliberately holding there does not feel broken. It is a matter of feel rather than of\n * correctness, so it is tuned by eye and exposed as `edgeStepDelay` for anyone who disagrees\n * — which is also why no test pins the number itself.\n */\nexport const EDGE_STEP_DELAY = 800\n\n/**\n * How wide the edge zone is, in pixels.\n *\n * TRAP — this number is the twin of `--vectis-control-size-calendar-edge`, the width of the\n * band the stylesheet lights up to show that paging is coming. They describe the same strip:\n * moving one without the other leaves the calendar paging from somewhere other than where it\n * said it would, with nothing anywhere to point at it. The same arrangement as\n * `DIAL_INNER_THRESHOLD` in `utils/time.ts`, and it carries the same warning at both ends.\n */\nexport const EDGE_BAND = 48\n\n/** Which way the calendar is being asked to go: back a period, or on to the next. */\nexport type EdgeDirection = -1 | 1\n\nexport interface EdgeStep {\n /**\n * Told on every pointer move which edge the drag is now against, or nothing when it is\n * back in the middle.\n */\n watchEdge(edge: EdgeDirection | null): void\n /** Drops whatever is armed, without stepping. */\n cancel(): void\n /** The edge currently counting down, for the stylesheet to show. */\n pending: Readonly<Ref<EdgeDirection | null>>\n}\n\n/**\n * `delay` is a getter rather than a number so a consumer can turn paging off mid-drag by\n * binding it to zero — the reactive-prop-as-switch shape VCarousel's `autoplay` uses.\n */\nexport function useEdgeStep(\n onStep: (direction: EdgeDirection) => void,\n delay: () => number,\n): EdgeStep {\n const timer = useTimer()\n const pending = ref<EdgeDirection | null>(null)\n\n function cancel() {\n timer.cancel()\n pending.value = null\n }\n\n function watchEdge(edge: EdgeDirection | null) {\n // Staying on the SAME edge must leave the armed timer alone. Re-arming on every move\n // would mean a pointer trembling by a pixel never reached the delay at all, and the\n // calendar would simply never page for anyone with an unsteady hand.\n if (edge === pending.value) return\n\n cancel()\n if (edge === null) return\n\n /*\n * TRAP — the guard is what stops this recursing, not a convenience. `useTimer` runs a\n * delay of zero or less SYNCHRONOUSLY by design, and the callback below re-arms itself,\n * so arming at zero would call it again and again until the stack gave out. Refusing to\n * arm is also how a consumer switches paging off, so the two are one line.\n */\n const wait = delay()\n if (wait <= 0) return\n\n pending.value = edge\n\n const fire = () => {\n onStep(edge)\n // Re-armed, so holding against the edge keeps paging rather than stopping after one.\n timer.start(fire, wait)\n }\n timer.start(fire, wait)\n }\n\n return { watchEdge, cancel, pending: readonly(pending) }\n}\n"],"mappings":";;;AA8DA,SAAgB,EACd,GACA,GACU;CACV,IAAM,IAAQ,EAAS,GACjB,IAAU,EAA0B,IAAI;CAE9C,SAAS,IAAS;EAEhB,AADA,EAAM,OAAO,GACb,EAAQ,QAAQ;CAClB;CAEA,SAAS,EAAU,GAA4B;EAO7C,IAHI,MAAS,EAAQ,UAErB,EAAO,GACH,MAAS,OAAM;EAQnB,IAAM,IAAO,EAAM;EACnB,IAAI,KAAQ,GAAG;EAEf,EAAQ,QAAQ;EAEhB,IAAM,UAAa;GAGjB,AAFA,EAAO,CAAI,GAEX,EAAM,MAAM,GAAM,CAAI;EACxB;EACA,EAAM,MAAM,GAAM,CAAI;CACxB;CAEA,OAAO;EAAE;EAAW;EAAQ,SAAS,EAAS,CAAO;CAAE;AACzD"}
1
+ {"version":3,"file":"edgeStep.js","names":[],"sources":["../../../src/components/VCalendar/edgeStep.ts"],"sourcesContent":["// @core\n/**\n * Holding a dragged event against the side of the calendar to turn the page.\n *\n * Without it, moving a meeting to next week means dropping it, navigating, and picking it up\n * again — the drag can only ever reach what is already on screen. With it, resting against an\n * edge shows the previous or next period and the event carries on travelling.\n *\n * WHY IT WAITS. Paging the instant the pointer touched the edge would make the last day of the\n * week unaimable: you would have to approach it from above and stop dead, and the smallest\n * overshoot would throw you into the following week. The delay is what separates \"I am aiming\n * at the edge column\" from \"I want to go further\", and it is the only thing that does.\n *\n * It sits in VCalendar's own folder rather than in `composables/` because VCalendar owns the\n * contract and both of its consumers are inside this component — the same reasoning as\n * `VCombobox/infiniteScroll.ts`, which is likewise a Vue-using module living beside the thing\n * it belongs to.\n */\nimport { readonly, ref, type Ref } from 'vue'\n\nimport { useTimer } from '../../composables/useTimer'\n\n/**\n * How long a dragged event rests against an edge before the calendar pages, in milliseconds.\n *\n * Long enough that aiming at the edge column never pages by accident, short enough that\n * deliberately holding there does not feel broken. It is a matter of feel rather than of\n * correctness, so it is tuned by eye and exposed as `edgeStepDelay` for anyone who disagrees\n *, which is also why no test pins the number itself.\n */\nexport const EDGE_STEP_DELAY = 800\n\n/**\n * How wide the edge zone is, in pixels.\n *\n * TRAP: this number is the twin of `--vectis-control-size-calendar-edge`, the width of the\n * band the stylesheet lights up to show that paging is coming. They describe the same strip:\n * moving one without the other leaves the calendar paging from somewhere other than where it\n * said it would, with nothing anywhere to point at it. The same arrangement as\n * `DIAL_INNER_THRESHOLD` in `utils/time.ts`, and it carries the same warning at both ends.\n */\nexport const EDGE_BAND = 48\n\n/** Which way the calendar is being asked to go: back a period, or on to the next. */\nexport type EdgeDirection = -1 | 1\n\nexport interface EdgeStep {\n /**\n * Told on every pointer move which edge the drag is now against, or nothing when it is\n * back in the middle.\n */\n watchEdge(edge: EdgeDirection | null): void\n /** Drops whatever is armed, without stepping. */\n cancel(): void\n /** The edge currently counting down, for the stylesheet to show. */\n pending: Readonly<Ref<EdgeDirection | null>>\n}\n\n/**\n * `delay` is a getter rather than a number so a consumer can turn paging off mid-drag by\n * binding it to zero: the reactive-prop-as-switch shape VCarousel's `autoplay` uses.\n */\nexport function useEdgeStep(\n onStep: (direction: EdgeDirection) => void,\n delay: () => number,\n): EdgeStep {\n const timer = useTimer()\n const pending = ref<EdgeDirection | null>(null)\n\n function cancel() {\n timer.cancel()\n pending.value = null\n }\n\n function watchEdge(edge: EdgeDirection | null) {\n // Staying on the SAME edge must leave the armed timer alone. Re-arming on every move\n // would mean a pointer trembling by a pixel never reached the delay at all, and the\n // calendar would simply never page for anyone with an unsteady hand.\n if (edge === pending.value) return\n\n cancel()\n if (edge === null) return\n\n /*\n * TRAP — the guard is what stops this recursing, not a convenience. `useTimer` runs a\n * delay of zero or less SYNCHRONOUSLY by design, and the callback below re-arms itself,\n * so arming at zero would call it again and again until the stack gave out. Refusing to\n * arm is also how a consumer switches paging off, so the two are one line.\n */\n const wait = delay()\n if (wait <= 0) return\n\n pending.value = edge\n\n const fire = () => {\n // The delay is asked again on every step: bound to zero while the drag is held against\n // the edge, paging stops before the next page rather than after it.\n const next = delay()\n if (next <= 0) {\n pending.value = null\n return\n }\n onStep(edge)\n // Re-armed, so holding against the edge keeps paging rather than stopping after one.\n timer.start(fire, next)\n }\n timer.start(fire, wait)\n }\n\n return { watchEdge, cancel, pending: readonly(pending) }\n}\n"],"mappings":";;;AA8DA,SAAgB,EACd,GACA,GACU;CACV,IAAM,IAAQ,EAAS,GACjB,IAAU,EAA0B,IAAI;CAE9C,SAAS,IAAS;EAEhB,AADA,EAAM,OAAO,GACb,EAAQ,QAAQ;CAClB;CAEA,SAAS,EAAU,GAA4B;EAO7C,IAHI,MAAS,EAAQ,UAErB,EAAO,GACH,MAAS,OAAM;EAQnB,IAAM,IAAO,EAAM;EACnB,IAAI,KAAQ,GAAG;EAEf,EAAQ,QAAQ;EAEhB,IAAM,UAAa;GAGjB,IAAM,IAAO,EAAM;GACnB,IAAI,KAAQ,GAAG;IACb,EAAQ,QAAQ;IAChB;GACF;GAGA,AAFA,EAAO,CAAI,GAEX,EAAM,MAAM,GAAM,CAAI;EACxB;EACA,EAAM,MAAM,GAAM,CAAI;CACxB;CAEA,OAAO;EAAE;EAAW;EAAQ,SAAS,EAAS,CAAO;CAAE;AACzD"}
@@ -19,7 +19,7 @@ export declare const isGhostId: (id: CalendarEventId) => boolean;
19
19
  * The id a card belongs to, read back off the DOM.
20
20
  *
21
21
  * An id may be a NUMBER and an attribute is always text, so a numeric one has to be turned
22
- * back into one — otherwise every card of a numerically-keyed calendar would look up as a
22
+ * back into one: otherwise every card of a numerically-keyed calendar would look up as a
23
23
  * miss and nothing would drag. Which of the two it is, is settled by asking the map that
24
24
  * holds the originals rather than by guessing from the text.
25
25
  */
@@ -28,7 +28,7 @@ export declare function cardIdOf(card: HTMLElement, has: (id: CalendarEventId) =
28
28
  * A grid's measured box as the pure geometry wants it: plain numbers, no element.
29
29
  *
30
30
  * `inlineStart` is the edge the first column starts at, which is the RIGHT one in a
31
- * right-to-left page — which is also why containment never goes through this, see
31
+ * right-to-left page. This is also why containment never goes through this, see
32
32
  * `pointWithin`.
33
33
  */
34
34
  export declare function gridGeometryOf(rect: DOMRect, columns: number, rtl: boolean): GridGeometry;
@@ -47,19 +47,19 @@ export interface GestureBase {
47
47
  originX: number;
48
48
  originY: number;
49
49
  /**
50
- * Where the pointer last was. Two things move the calendar UNDER a still pointer — paging at
51
- * an edge, and auto-scrolling — and each has to work out afresh what the pointer is now over.
50
+ * Where the pointer last was. Two things move the calendar UNDER a still pointer: paging at
51
+ * an edge, and auto-scrolling. Each has to work out afresh what the pointer is now over.
52
52
  */
53
53
  lastX: number;
54
54
  lastY: number;
55
55
  /** Whether it moved past the threshold, which is what separates a drag from a click. */
56
56
  moved: boolean;
57
57
  /**
58
- * Whether the pointer is off the calendar altogether — over the toolbar, or over the page
58
+ * Whether the pointer is off the calendar altogether: over the toolbar, or over the page
59
59
  * beside it. Letting go there abandons the gesture whole and writes nothing.
60
60
  *
61
61
  * A KEYBOARD grab can never set it, and structurally rather than by a guard: `onPointermove`
62
- * is the only writer, and it returns on the id mismatch first — a grab's `pointerId` is null,
62
+ * is the only writer, and it returns on the id mismatch first: a grab's `pointerId` is null,
63
63
  * which no real pointer's id ever equals.
64
64
  */
65
65
  outside: boolean;
@@ -116,7 +116,7 @@ export interface CalendarGestureOptions<E extends CalendarEvent, G extends Gestu
116
116
  onRelease?: () => void;
117
117
  /**
118
118
  * A pointer gesture let go inside the calendar. Returns true when the grid has answered it
119
- * itself — a slot drawn out — and nothing is left to drop.
119
+ * itself, such as a slot drawn out, and nothing is left to drop.
120
120
  */
121
121
  onLetGo?: (state: G) => boolean;
122
122
  /** A gesture that moved, committed: the grid reports the new times. */
@@ -142,11 +142,12 @@ export declare function useCalendarGesture<E extends CalendarEvent, G extends Ge
142
142
  consumeDrag: () => boolean;
143
143
  onPointermove: (event: PointerEvent) => void;
144
144
  onPointerup: (event: PointerEvent) => void;
145
- onPointercancel: () => void;
145
+ onPointercancel: (event: PointerEvent) => void;
146
146
  onPointerleave: (event: PointerEvent) => void;
147
+ onFocusout: (event: FocusEvent) => void;
147
148
  onCardKeydown: (event: KeyboardEvent, card: HTMLElement) => void;
148
149
  refocusCard: (id: CalendarEventId) => void;
149
- focusCell: (id: string, deferred?: boolean) => void;
150
+ focusCell: (id: string, deferred?: boolean, focusOptions?: FocusOptions) => void;
150
151
  idOfCard: (card: HTMLElement) => string | number;
151
152
  cardState: (id: CalendarEventId) => {
152
153
  dragging: boolean;
@@ -42,17 +42,27 @@ function _(u) {
42
42
  }
43
43
  let C = !1;
44
44
  function w() {
45
- C = !1;
45
+ C = !1, y.value && T();
46
46
  }
47
47
  function T() {
48
+ let e = v.value;
49
+ if (e) return v.value = null, u.announce(_.value.calendar.reverted), e;
50
+ }
51
+ function E(e) {
52
+ let t = v.value, n = e.relatedTarget;
53
+ if (!y.value || !t || !n) return;
54
+ let r = n.closest(".v-calendar-event");
55
+ r && r.dataset.eventId === String(t.id) || T();
56
+ }
57
+ function D() {
48
58
  let e = C;
49
59
  return C = !1, e;
50
60
  }
51
- let E = n(u.step, u.edgeStepDelay), D = o(() => E.pending.value === -1 ? "start" : E.pending.value === 1 ? "end" : void 0);
52
- function O() {
53
- E.cancel(), u.onRelease?.();
61
+ let O = n(u.step, u.edgeStepDelay), k = o(() => O.pending.value === -1 ? "start" : O.pending.value === 1 ? "end" : void 0);
62
+ function A() {
63
+ O.cancel(), u.onRelease?.();
54
64
  }
55
- function k(e, t = b()) {
65
+ function j(e, t = b()) {
56
66
  v.value = {
57
67
  ...e,
58
68
  preview: { ...e.origin },
@@ -63,75 +73,79 @@ function _(u) {
63
73
  rtl: t
64
74
  };
65
75
  }
66
- function A(e) {
76
+ function M(e) {
67
77
  try {
68
78
  u.captureEl.value?.setPointerCapture(e);
69
79
  } catch {}
70
80
  }
71
- function j(e) {
81
+ function N(e) {
72
82
  let t = u.measureEl.value?.getBoundingClientRect();
73
83
  t && u.applyPoint(e, t);
74
84
  }
75
- function M(e) {
85
+ function P(e) {
76
86
  let t = v.value;
77
87
  if (!t || t.pointerId !== e.pointerId || (t.lastX = e.clientX, t.lastY = e.clientY, !t.moved && Math.abs(e.clientX - t.originX) < 3 && Math.abs(e.clientY - t.originY) < 3)) return;
78
- t.moved || A(e.pointerId), t.moved = !0;
88
+ t.moved || M(e.pointerId), t.moved = !0;
79
89
  let n = u.rootEl.value?.getBoundingClientRect(), a = u.measureEl.value?.getBoundingClientRect();
80
90
  t.outside = n ? !i({
81
91
  x: t.lastX,
82
92
  y: t.lastY
83
- }, n) : !1, a && (u.applyPoint(t, a), E.watchEdge(r(t.lastX, h(a, u.columns(), t.rtl), 48, t.rtl)), u.onEdges?.(t, n));
93
+ }, n) : !1, a && (u.applyPoint(t, a), O.watchEdge(r(t.lastX, h(a, u.columns(), t.rtl), 48, t.rtl)), u.onEdges?.(t, n));
84
94
  }
85
- function N(e) {
95
+ function F(e) {
86
96
  let t = v.value;
87
- !t || t.pointerId !== e.pointerId || (v.value = null, C = t.moved, O(), !t.outside && (u.onLetGo?.(t) || t.moved && u.onDrop(t)));
97
+ !t || t.pointerId !== e.pointerId || (v.value = null, C = t.moved, A(), !t.outside && (u.onLetGo?.(t) || t.moved && u.onDrop(t)));
88
98
  }
89
- function P() {
90
- v.value = null, O();
99
+ function I(e) {
100
+ v.value?.pointerId === e.pointerId && L();
91
101
  }
92
- function F(e) {
102
+ function L() {
103
+ v.value = null, A();
104
+ }
105
+ function R(e) {
93
106
  let t = v.value;
94
- !t || t.pointerId !== e.pointerId || t.moved || P();
107
+ !t || t.pointerId !== e.pointerId || t.moved || L();
95
108
  }
96
109
  l(u.layout, () => {
97
110
  let e = v.value;
98
- e?.moved && j(e);
111
+ e?.moved && N(e);
99
112
  }, { flush: "post" });
100
- function I(e) {
113
+ function z(e) {
101
114
  s(() => {
102
- let t = u.measureEl.value?.querySelectorAll(".v-calendar-event");
115
+ let t = u.rootEl.value?.querySelectorAll(".v-calendar-event");
103
116
  Array.from(t ?? []).find((t) => t.dataset.eventId === String(e))?.focus();
104
117
  });
105
118
  }
106
- function L(e, t = !1) {
107
- let n = () => document.getElementById(e)?.focus();
108
- t ? s(n) : n();
119
+ function B(e, t = !1, n) {
120
+ let r = () => document.getElementById(e)?.focus(n);
121
+ t ? s(r) : r();
109
122
  }
110
- let R = (e) => m(e, (e) => u.eventOf(e) !== void 0);
111
- function z(e, t) {
112
- let n = u.eventOf(R(t));
123
+ let V = (e) => m(e, (e) => u.eventOf(e) !== void 0);
124
+ function H(e, t) {
125
+ C = !1;
126
+ let n = u.eventOf(V(t));
113
127
  if (!n) return;
114
- let r = y.value && v.value?.id === n.id, i = r ? v.value : null, o = a(e.key, e.shiftKey, r ? "grabbed" : "event", u.slotMinutes(), i?.rtl ?? b());
128
+ let r = y.value && v.value?.id === n.id, i = r ? v.value : null, o = a(e, r ? "grabbed" : "event", u.slotMinutes(), i?.rtl ?? b());
115
129
  if (o) {
116
130
  if (!i) {
117
131
  let t = o.kind === "grab" ? u.grab(n) : null;
118
132
  if (!t) return;
119
- e.preventDefault(), k(t), u.announce(_.value.calendar.grabbed);
133
+ e.preventDefault(), j(t), u.announce(_.value.calendar.grabbed);
120
134
  return;
121
135
  }
122
136
  if (e.preventDefault(), o.kind === "grabMove" || o.kind === "grabResize") {
123
137
  if (!u.onGrabStep(i, o, n)) return;
124
- i.moved = !0, I(i.id);
138
+ i.moved = !0, z(i.id);
125
139
  return;
126
140
  }
127
141
  if (o.kind === "activate") {
128
- v.value = null, i.moved && u.onDrop(i), u.announce(_.value.calendar.dropped), I(i.id);
142
+ v.value = null, i.moved && u.onDrop(i), u.announce(_.value.calendar.dropped), z(i.id);
129
143
  return;
130
144
  }
131
- o.kind === "cancel" && (v.value = null, u.announce(_.value.calendar.reverted), I(i.id));
145
+ o.kind === "cancel" && (T(), z(i.id));
132
146
  }
133
147
  }
134
- function B(e) {
148
+ function U(e) {
135
149
  let t = v.value, n = t !== null && t.id === e;
136
150
  return {
137
151
  dragging: n && t.pointerId !== null && t.moved,
@@ -146,22 +160,23 @@ function _(u) {
146
160
  grabbing: y,
147
161
  ghostEvent: x,
148
162
  withPreview: S,
149
- edgeCue: D,
163
+ edgeCue: k,
150
164
  isRtl: b,
151
- start: k,
152
- reapply: j,
153
- release: O,
165
+ start: j,
166
+ reapply: N,
167
+ release: A,
154
168
  endLastGesture: w,
155
- consumeDrag: T,
156
- onPointermove: M,
157
- onPointerup: N,
158
- onPointercancel: P,
159
- onPointerleave: F,
160
- onCardKeydown: z,
161
- refocusCard: I,
162
- focusCell: L,
163
- idOfCard: R,
164
- cardState: B
169
+ consumeDrag: D,
170
+ onPointermove: P,
171
+ onPointerup: F,
172
+ onPointercancel: I,
173
+ onPointerleave: R,
174
+ onFocusout: E,
175
+ onCardKeydown: H,
176
+ refocusCard: z,
177
+ focusCell: B,
178
+ idOfCard: V,
179
+ cardState: U
165
180
  };
166
181
  }
167
182
  //#endregion