@vuetify/nightly 4.0.0-dev-20230426.0 → 4.0.0-dev-20230427.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 (370) hide show
  1. package/CHANGELOG.md +10 -2
  2. package/dist/json/attributes.json +218 -194
  3. package/dist/json/importMap.json +12 -12
  4. package/dist/json/tags.json +7 -1
  5. package/dist/json/web-types.json +379 -326
  6. package/dist/vuetify-labs.css +1361 -1362
  7. package/dist/vuetify-labs.d.ts +5791 -8230
  8. package/dist/vuetify-labs.esm.js +1286 -1090
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +1285 -1089
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +29 -30
  13. package/dist/vuetify.d.ts +5991 -7516
  14. package/dist/vuetify.esm.js +1248 -1063
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +1247 -1062
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +743 -738
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/blueprints/index.d.ts +1 -1
  22. package/lib/blueprints/md1.d.ts +1 -1
  23. package/lib/blueprints/md2.d.ts +1 -1
  24. package/lib/blueprints/md3.d.ts +1 -1
  25. package/lib/components/VAlert/VAlert.mjs +6 -4
  26. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  27. package/lib/components/VAlert/index.d.ts +57 -55
  28. package/lib/components/VApp/VApp.mjs +4 -2
  29. package/lib/components/VApp/VApp.mjs.map +1 -1
  30. package/lib/components/VApp/index.d.ts +22 -13
  31. package/lib/components/VAppBar/VAppBar.mjs +3 -3
  32. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  33. package/lib/components/VAppBar/VAppBarNavIcon.mjs +7 -4
  34. package/lib/components/VAppBar/VAppBarNavIcon.mjs.map +1 -1
  35. package/lib/components/VAppBar/index.d.ts +87 -92
  36. package/lib/components/VAutocomplete/VAutocomplete.mjs +2 -1
  37. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  38. package/lib/components/VAutocomplete/index.d.ts +225 -403
  39. package/lib/components/VAvatar/VAvatar.mjs +4 -2
  40. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  41. package/lib/components/VAvatar/index.d.ts +23 -14
  42. package/lib/components/VBadge/VBadge.mjs +6 -5
  43. package/lib/components/VBadge/VBadge.mjs.map +1 -1
  44. package/lib/components/VBadge/index.d.ts +27 -22
  45. package/lib/components/VBanner/VBanner.mjs +6 -4
  46. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  47. package/lib/components/VBanner/VBannerActions.mjs +5 -2
  48. package/lib/components/VBanner/VBannerActions.mjs.map +1 -1
  49. package/lib/components/VBanner/index.d.ts +92 -66
  50. package/lib/components/VBottomNavigation/VBottomNavigation.mjs +4 -2
  51. package/lib/components/VBottomNavigation/VBottomNavigation.mjs.map +1 -1
  52. package/lib/components/VBottomNavigation/index.d.ts +22 -13
  53. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +35 -18
  54. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  55. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs +6 -3
  56. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs.map +1 -1
  57. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs +4 -2
  58. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs.map +1 -1
  59. package/lib/components/VBreadcrumbs/index.d.ts +134 -93
  60. package/lib/components/VBtn/VBtn.mjs +5 -3
  61. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  62. package/lib/components/VBtn/index.d.ts +33 -36
  63. package/lib/components/VBtnGroup/VBtnGroup.mjs +4 -1
  64. package/lib/components/VBtnGroup/VBtnGroup.mjs.map +1 -1
  65. package/lib/components/VBtnGroup/index.d.ts +22 -13
  66. package/lib/components/VBtnToggle/VBtnToggle.mjs +4 -2
  67. package/lib/components/VBtnToggle/VBtnToggle.mjs.map +1 -1
  68. package/lib/components/VBtnToggle/index.d.ts +30 -21
  69. package/lib/components/VCard/VCard.mjs +5 -3
  70. package/lib/components/VCard/VCard.mjs.map +1 -1
  71. package/lib/components/VCard/VCardActions.mjs +7 -4
  72. package/lib/components/VCard/VCardActions.mjs.map +1 -1
  73. package/lib/components/VCard/VCardItem.mjs +5 -2
  74. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  75. package/lib/components/VCard/index.d.ts +250 -141
  76. package/lib/components/VCarousel/VCarousel.mjs +3 -3
  77. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  78. package/lib/components/VCarousel/VCarouselItem.mjs +6 -3
  79. package/lib/components/VCarousel/VCarouselItem.mjs.map +1 -1
  80. package/lib/components/VCarousel/index.d.ts +78 -141
  81. package/lib/components/VCheckbox/VCheckbox.mjs +3 -2
  82. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  83. package/lib/components/VCheckbox/VCheckboxBtn.mjs +2 -1
  84. package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
  85. package/lib/components/VCheckbox/index.d.ts +69 -103
  86. package/lib/components/VChip/VChip.mjs +7 -8
  87. package/lib/components/VChip/VChip.mjs.map +1 -1
  88. package/lib/components/VChip/index.d.ts +27 -30
  89. package/lib/components/VChipGroup/VChipGroup.mjs +4 -1
  90. package/lib/components/VChipGroup/VChipGroup.mjs.map +1 -1
  91. package/lib/components/VChipGroup/index.d.ts +22 -13
  92. package/lib/components/VCode/index.d.ts +30 -17
  93. package/lib/components/VColorPicker/VColorPicker.mjs +3 -3
  94. package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
  95. package/lib/components/VColorPicker/VColorPickerCanvas.mjs +5 -2
  96. package/lib/components/VColorPicker/VColorPickerCanvas.mjs.map +1 -1
  97. package/lib/components/VColorPicker/VColorPickerEdit.mjs +6 -3
  98. package/lib/components/VColorPicker/VColorPickerEdit.mjs.map +1 -1
  99. package/lib/components/VColorPicker/VColorPickerPreview.mjs +6 -3
  100. package/lib/components/VColorPicker/VColorPickerPreview.mjs.map +1 -1
  101. package/lib/components/VColorPicker/VColorPickerSwatches.mjs +7 -5
  102. package/lib/components/VColorPicker/VColorPickerSwatches.mjs.map +1 -1
  103. package/lib/components/VColorPicker/index.d.ts +34 -1
  104. package/lib/components/VCombobox/VCombobox.mjs +2 -1
  105. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  106. package/lib/components/VCombobox/index.d.ts +225 -403
  107. package/lib/components/VCounter/VCounter.mjs +4 -1
  108. package/lib/components/VCounter/VCounter.mjs.map +1 -1
  109. package/lib/components/VCounter/index.d.ts +22 -145
  110. package/lib/components/VDefaultsProvider/index.d.ts +0 -12
  111. package/lib/components/VDialog/VDialog.mjs +4 -3
  112. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  113. package/lib/components/VDialog/index.d.ts +104 -282
  114. package/lib/components/VDivider/VDivider.mjs +4 -2
  115. package/lib/components/VDivider/VDivider.mjs.map +1 -1
  116. package/lib/components/VDivider/index.d.ts +22 -13
  117. package/lib/components/VExpansionPanel/VExpansionPanel.mjs +4 -2
  118. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  119. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs +4 -1
  120. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs.map +1 -1
  121. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +4 -2
  122. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  123. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +4 -1
  124. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  125. package/lib/components/VExpansionPanel/index.d.ts +109 -81
  126. package/lib/components/VField/VField.css +0 -1
  127. package/lib/components/VField/VField.mjs +9 -6
  128. package/lib/components/VField/VField.mjs.map +1 -1
  129. package/lib/components/VField/VField.sass +0 -1
  130. package/lib/components/VField/VFieldLabel.mjs +6 -3
  131. package/lib/components/VField/VFieldLabel.mjs.map +1 -1
  132. package/lib/components/VField/index.d.ts +119 -70
  133. package/lib/components/VFileInput/VFileInput.mjs +2 -1
  134. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  135. package/lib/components/VFileInput/index.d.ts +99 -150
  136. package/lib/components/VFooter/VFooter.mjs +4 -2
  137. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  138. package/lib/components/VFooter/index.d.ts +22 -13
  139. package/lib/components/VForm/VForm.mjs +5 -2
  140. package/lib/components/VForm/VForm.mjs.map +1 -1
  141. package/lib/components/VForm/index.d.ts +30 -17
  142. package/lib/components/VGrid/VCol.mjs +4 -1
  143. package/lib/components/VGrid/VCol.mjs.map +1 -1
  144. package/lib/components/VGrid/VContainer.mjs +4 -1
  145. package/lib/components/VGrid/VContainer.mjs.map +1 -1
  146. package/lib/components/VGrid/VRow.mjs +4 -1
  147. package/lib/components/VGrid/VRow.mjs.map +1 -1
  148. package/lib/components/VGrid/index.d.ts +104 -60
  149. package/lib/components/VHover/index.d.ts +20 -44
  150. package/lib/components/VIcon/VIcon.mjs +4 -2
  151. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  152. package/lib/components/VIcon/index.d.ts +23 -26
  153. package/lib/components/VImg/VImg.mjs +5 -3
  154. package/lib/components/VImg/VImg.mjs.map +1 -1
  155. package/lib/components/VImg/index.d.ts +26 -29
  156. package/lib/components/VInput/VInput.mjs +4 -1
  157. package/lib/components/VInput/VInput.mjs.map +1 -1
  158. package/lib/components/VInput/index.d.ts +31 -34
  159. package/lib/components/VItemGroup/VItemGroup.mjs +4 -1
  160. package/lib/components/VItemGroup/VItemGroup.mjs.map +1 -1
  161. package/lib/components/VItemGroup/index.d.ts +30 -33
  162. package/lib/components/VKbd/index.d.ts +30 -17
  163. package/lib/components/VLabel/VLabel.mjs +4 -1
  164. package/lib/components/VLabel/VLabel.mjs.map +1 -1
  165. package/lib/components/VLabel/index.d.ts +22 -13
  166. package/lib/components/VLayout/VLayout.mjs +8 -4
  167. package/lib/components/VLayout/VLayout.mjs.map +1 -1
  168. package/lib/components/VLayout/VLayoutItem.mjs +4 -2
  169. package/lib/components/VLayout/VLayoutItem.mjs.map +1 -1
  170. package/lib/components/VLayout/index.d.ts +44 -26
  171. package/lib/components/VLazy/VLazy.mjs +4 -2
  172. package/lib/components/VLazy/VLazy.mjs.map +1 -1
  173. package/lib/components/VLazy/index.d.ts +22 -13
  174. package/lib/components/VList/VList.mjs +7 -24
  175. package/lib/components/VList/VList.mjs.map +1 -1
  176. package/lib/components/VList/VListChildren.mjs.map +1 -1
  177. package/lib/components/VList/VListGroup.mjs +5 -2
  178. package/lib/components/VList/VListGroup.mjs.map +1 -1
  179. package/lib/components/VList/VListItem.mjs +4 -2
  180. package/lib/components/VList/VListItem.mjs.map +1 -1
  181. package/lib/components/VList/VListItemAction.mjs +4 -1
  182. package/lib/components/VList/VListItemAction.mjs.map +1 -1
  183. package/lib/components/VList/VListItemMedia.mjs +4 -1
  184. package/lib/components/VList/VListItemMedia.mjs.map +1 -1
  185. package/lib/components/VList/VListSubheader.mjs +5 -3
  186. package/lib/components/VList/VListSubheader.mjs.map +1 -1
  187. package/lib/components/VList/index.d.ts +932 -826
  188. package/lib/components/VLocaleProvider/VLocaleProvider.mjs +5 -2
  189. package/lib/components/VLocaleProvider/VLocaleProvider.mjs.map +1 -1
  190. package/lib/components/VLocaleProvider/index.d.ts +30 -17
  191. package/lib/components/VMain/VMain.mjs +4 -2
  192. package/lib/components/VMain/VMain.mjs.map +1 -1
  193. package/lib/components/VMain/index.d.ts +30 -17
  194. package/lib/components/VMenu/VMenu.mjs +2 -1
  195. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  196. package/lib/components/VMenu/index.d.ts +104 -282
  197. package/lib/components/VMessages/VMessages.mjs +4 -2
  198. package/lib/components/VMessages/VMessages.mjs.map +1 -1
  199. package/lib/components/VMessages/index.d.ts +22 -145
  200. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +4 -2
  201. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  202. package/lib/components/VNavigationDrawer/index.d.ts +26 -29
  203. package/lib/components/VNoSsr/VNoSsr.mjs.map +1 -1
  204. package/lib/components/VNoSsr/index.d.ts +3 -13
  205. package/lib/components/VOverlay/VOverlay.mjs +5 -3
  206. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  207. package/lib/components/VOverlay/index.d.ts +38 -45
  208. package/lib/components/VPagination/VPagination.mjs +4 -1
  209. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  210. package/lib/components/VPagination/index.d.ts +23 -30
  211. package/lib/components/VParallax/VParallax.mjs +5 -2
  212. package/lib/components/VParallax/VParallax.mjs.map +1 -1
  213. package/lib/components/VParallax/index.d.ts +34 -33
  214. package/lib/components/VProgressCircular/VProgressCircular.mjs +4 -2
  215. package/lib/components/VProgressCircular/VProgressCircular.mjs.map +1 -1
  216. package/lib/components/VProgressCircular/index.d.ts +22 -13
  217. package/lib/components/VProgressLinear/VProgressLinear.mjs +6 -4
  218. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  219. package/lib/components/VProgressLinear/index.d.ts +42 -45
  220. package/lib/components/VRadio/VRadio.mjs +2 -1
  221. package/lib/components/VRadio/VRadio.mjs.map +1 -1
  222. package/lib/components/VRadio/index.d.ts +27 -38
  223. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -1
  224. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  225. package/lib/components/VRadioGroup/index.d.ts +39 -62
  226. package/lib/components/VRangeSlider/VRangeSlider.mjs +2 -1
  227. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  228. package/lib/components/VRangeSlider/index.d.ts +27 -38
  229. package/lib/components/VRating/VRating.mjs +4 -1
  230. package/lib/components/VRating/VRating.mjs.map +1 -1
  231. package/lib/components/VRating/index.d.ts +23 -18
  232. package/lib/components/VResponsive/VResponsive.mjs +4 -2
  233. package/lib/components/VResponsive/VResponsive.mjs.map +1 -1
  234. package/lib/components/VResponsive/index.d.ts +43 -31
  235. package/lib/components/VSelect/VSelect.mjs +2 -1
  236. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  237. package/lib/components/VSelect/index.d.ts +194 -552
  238. package/lib/components/VSelectionControl/VSelectionControl.mjs +6 -2
  239. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  240. package/lib/components/VSelectionControl/index.d.ts +76 -46
  241. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +4 -1
  242. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  243. package/lib/components/VSelectionControlGroup/index.d.ts +23 -14
  244. package/lib/components/VSheet/VSheet.mjs +4 -2
  245. package/lib/components/VSheet/VSheet.mjs.map +1 -1
  246. package/lib/components/VSheet/index.d.ts +22 -13
  247. package/lib/components/VSlideGroup/VSlideGroup.mjs +6 -3
  248. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  249. package/lib/components/VSlideGroup/index.d.ts +59 -90
  250. package/lib/components/VSlider/VSlider.mjs +2 -1
  251. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  252. package/lib/components/VSlider/VSliderThumb.mjs +6 -4
  253. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  254. package/lib/components/VSlider/VSliderTrack.mjs +6 -4
  255. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  256. package/lib/components/VSlider/index.d.ts +27 -38
  257. package/lib/components/VSnackbar/VSnackbar.mjs +2 -1
  258. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  259. package/lib/components/VSnackbar/index.d.ts +92 -142
  260. package/lib/components/VSwitch/VSwitch.mjs +2 -1
  261. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  262. package/lib/components/VSwitch/index.d.ts +39 -66
  263. package/lib/components/VSystemBar/VSystemBar.mjs +4 -2
  264. package/lib/components/VSystemBar/VSystemBar.mjs.map +1 -1
  265. package/lib/components/VSystemBar/index.d.ts +22 -13
  266. package/lib/components/VTable/VTable.mjs +4 -1
  267. package/lib/components/VTable/VTable.mjs.map +1 -1
  268. package/lib/components/VTable/index.d.ts +26 -29
  269. package/lib/components/VTabs/VTab.mjs +2 -2
  270. package/lib/components/VTabs/VTab.mjs.map +1 -1
  271. package/lib/components/VTabs/VTabs.mjs +2 -2
  272. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  273. package/lib/components/VTabs/index.d.ts +45 -27
  274. package/lib/components/VTextField/VTextField.mjs +2 -1
  275. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  276. package/lib/components/VTextField/index.d.ts +208 -269
  277. package/lib/components/VTextarea/VTextarea.mjs +2 -1
  278. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  279. package/lib/components/VTextarea/index.d.ts +79 -122
  280. package/lib/components/VThemeProvider/VThemeProvider.mjs +6 -3
  281. package/lib/components/VThemeProvider/VThemeProvider.mjs.map +1 -1
  282. package/lib/components/VThemeProvider/index.d.ts +22 -13
  283. package/lib/components/VTimeline/VTimeline.mjs +5 -3
  284. package/lib/components/VTimeline/VTimeline.mjs.map +1 -1
  285. package/lib/components/VTimeline/VTimelineDivider.mjs +4 -1
  286. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  287. package/lib/components/VTimeline/VTimelineItem.mjs +8 -6
  288. package/lib/components/VTimeline/VTimelineItem.mjs.map +1 -1
  289. package/lib/components/VTimeline/index.d.ts +67 -57
  290. package/lib/components/VToolbar/VToolbar.mjs +4 -2
  291. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  292. package/lib/components/VToolbar/VToolbarItems.mjs +9 -4
  293. package/lib/components/VToolbar/VToolbarItems.mjs.map +1 -1
  294. package/lib/components/VToolbar/VToolbarTitle.mjs +5 -2
  295. package/lib/components/VToolbar/VToolbarTitle.mjs.map +1 -1
  296. package/lib/components/VToolbar/index.d.ts +74 -71
  297. package/lib/components/VTooltip/VTooltip.mjs +2 -1
  298. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  299. package/lib/components/VTooltip/index.d.ts +104 -150
  300. package/lib/components/VValidation/index.d.ts +0 -12
  301. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +21 -23
  302. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  303. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs +5 -2
  304. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -1
  305. package/lib/components/VVirtualScroll/index.d.ts +70 -30
  306. package/lib/components/VWindow/VWindow.mjs +4 -1
  307. package/lib/components/VWindow/VWindow.mjs.map +1 -1
  308. package/lib/components/VWindow/VWindowItem.mjs +4 -1
  309. package/lib/components/VWindow/VWindowItem.mjs.map +1 -1
  310. package/lib/components/VWindow/index.d.ts +61 -79
  311. package/lib/components/index.d.ts +5229 -6754
  312. package/lib/components/transitions/index.d.ts +0 -192
  313. package/lib/composables/component.mjs +11 -0
  314. package/lib/composables/component.mjs.map +1 -0
  315. package/lib/composables/defaults.mjs +51 -5
  316. package/lib/composables/defaults.mjs.map +1 -1
  317. package/lib/composables/icons.mjs +15 -4
  318. package/lib/composables/icons.mjs.map +1 -1
  319. package/lib/composables/index.mjs +1 -1
  320. package/lib/composables/index.mjs.map +1 -1
  321. package/lib/composables/loader.mjs.map +1 -1
  322. package/lib/entry-bundler.mjs +1 -1
  323. package/lib/framework.mjs +2 -2
  324. package/lib/framework.mjs.map +1 -1
  325. package/lib/iconsets/fa-svg.d.ts +1 -1
  326. package/lib/iconsets/fa.d.ts +1 -1
  327. package/lib/iconsets/fa4.d.ts +1 -1
  328. package/lib/iconsets/md.d.ts +1 -1
  329. package/lib/iconsets/mdi-svg.d.ts +1 -1
  330. package/lib/iconsets/mdi.d.ts +1 -1
  331. package/lib/index.d.ts +11 -11
  332. package/lib/labs/VDataTable/VDataTable.mjs +1 -1
  333. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  334. package/lib/labs/VDataTable/VDataTableHeaders.mjs +34 -20
  335. package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
  336. package/lib/labs/VDataTable/VDataTableRow.mjs +2 -4
  337. package/lib/labs/VDataTable/VDataTableRow.mjs.map +1 -1
  338. package/lib/labs/VDataTable/VDataTableRows.mjs +2 -2
  339. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  340. package/lib/labs/VDataTable/VDataTableServer.mjs +1 -1
  341. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  342. package/lib/labs/VDataTable/index.d.ts +61 -933
  343. package/lib/labs/VInfiniteScroll/index.d.ts +8 -36
  344. package/lib/labs/VSkeletonLoader/index.d.ts +0 -12
  345. package/lib/labs/components.d.ts +115 -1027
  346. package/lib/labs/date/DateAdapter.mjs +2 -0
  347. package/lib/labs/date/DateAdapter.mjs.map +1 -0
  348. package/lib/labs/date/adapters/vuetify.d.ts +52 -0
  349. package/lib/{adapters → labs/date/adapters}/vuetify.mjs +2 -2
  350. package/lib/labs/date/adapters/vuetify.mjs.map +1 -0
  351. package/lib/{composables → labs/date}/date.mjs +3 -3
  352. package/lib/labs/date/date.mjs.map +1 -0
  353. package/lib/labs/date/index.d.ts +40 -0
  354. package/lib/labs/date/index.mjs +2 -0
  355. package/lib/labs/date/index.mjs.map +1 -0
  356. package/lib/labs/index.mjs +3 -2
  357. package/lib/labs/index.mjs.map +1 -1
  358. package/lib/util/createSimpleFunctional.mjs +9 -4
  359. package/lib/util/createSimpleFunctional.mjs.map +1 -1
  360. package/lib/util/defineComponent.mjs +11 -43
  361. package/lib/util/defineComponent.mjs.map +1 -1
  362. package/lib/util/helpers.mjs +28 -2
  363. package/lib/util/helpers.mjs.map +1 -1
  364. package/lib/util/index.mjs +1 -0
  365. package/lib/util/index.mjs.map +1 -1
  366. package/package.json +2 -1
  367. package/lib/adapters/date-adapter.mjs +0 -2
  368. package/lib/adapters/date-adapter.mjs.map +0 -1
  369. package/lib/adapters/vuetify.mjs.map +0 -1
  370. package/lib/composables/date.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v4.0.0-dev-20230426.0
2
+ * Vuetify v4.0.0-dev-20230427.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -171,11 +171,11 @@
171
171
  function keys(o) {
172
172
  return Object.keys(o);
173
173
  }
174
- function pick(obj, paths) {
174
+ function pick(obj, paths, exclude) {
175
175
  const found = Object.create(null);
176
176
  const rest = Object.create(null);
177
177
  for (const key in obj) {
178
- if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key)) {
178
+ if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key) && !exclude?.some(path => path === key)) {
179
179
  found[key] = obj[key];
180
180
  } else {
181
181
  rest[key] = obj[key];
@@ -360,6 +360,32 @@
360
360
  handler(...args);
361
361
  }
362
362
  }
363
+ function focusableChildren(el) {
364
+ const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', '[tabindex]'].map(s => `${s}:not([tabindex="-1"]):not([disabled])`).join(', ');
365
+ return [...el.querySelectorAll(targets)];
366
+ }
367
+ function focusChild(el, location) {
368
+ const focusable = focusableChildren(el);
369
+ const idx = focusable.indexOf(document.activeElement);
370
+ if (!location) {
371
+ if (!el.contains(document.activeElement)) {
372
+ focusable[0]?.focus();
373
+ }
374
+ } else if (location === 'first') {
375
+ focusable[0]?.focus();
376
+ } else if (location === 'last') {
377
+ focusable.at(-1)?.focus();
378
+ } else {
379
+ let _el;
380
+ let idxx = idx;
381
+ const inc = location === 'next' ? 1 : -1;
382
+ do {
383
+ idxx += inc;
384
+ _el = focusable[idxx];
385
+ } while ((!_el || _el.offsetParent == null) && idxx < focusable.length && idxx >= 0);
386
+ if (_el) _el.focus();else focusChild(el, location === 'next' ? 'first' : 'last');
387
+ }
388
+ }
363
389
 
364
390
  const block = ['top', 'bottom'];
365
391
  const inline = ['start', 'end', 'left', 'right'];
@@ -860,44 +886,6 @@
860
886
  return (light + 0.05) / (dark + 0.05);
861
887
  }
862
888
 
863
- // Utilities
864
- function getCurrentInstance(name, message) {
865
- const vm = vue.getCurrentInstance();
866
- if (!vm) {
867
- throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
868
- }
869
- return vm;
870
- }
871
- function getCurrentInstanceName() {
872
- let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
873
- const vm = getCurrentInstance(name).type;
874
- return toKebabCase(vm?.aliasName || vm?.name);
875
- }
876
- let _uid = 0;
877
- let _map = new WeakMap();
878
- function getUid() {
879
- const vm = getCurrentInstance('getUid');
880
- if (_map.has(vm)) return _map.get(vm);else {
881
- const uid = _uid++;
882
- _map.set(vm, uid);
883
- return uid;
884
- }
885
- }
886
- getUid.reset = () => {
887
- _uid = 0;
888
- _map = new WeakMap();
889
- };
890
-
891
- function injectSelf(key) {
892
- const {
893
- provides
894
- } = getCurrentInstance('injectSelf');
895
- if (provides && key in provides) {
896
- // TS doesn't allow symbol as index type
897
- return provides[key];
898
- }
899
- }
900
-
901
889
  /**
902
890
  * Creates a factory function for props definitions.
903
891
  * This is used to define props in a composable then override
@@ -951,17 +939,54 @@
951
939
 
952
940
  // Types
953
941
 
942
+ // Composables
943
+ const makeComponentProps = propsFactory({
944
+ class: [String, Array],
945
+ style: {
946
+ type: [String, Array, Object],
947
+ default: null
948
+ }
949
+ }, 'component');
950
+
951
+ function useToggleScope(source, fn) {
952
+ let scope;
953
+ function start() {
954
+ scope = vue.effectScope();
955
+ scope.run(() => fn.length ? fn(() => {
956
+ scope?.stop();
957
+ start();
958
+ }) : fn());
959
+ }
960
+ vue.watch(source, active => {
961
+ if (active && !scope) {
962
+ start();
963
+ } else if (!active) {
964
+ scope?.stop();
965
+ scope = undefined;
966
+ }
967
+ }, {
968
+ immediate: true
969
+ });
970
+ vue.onScopeDispose(() => {
971
+ scope?.stop();
972
+ });
973
+ }
974
+
975
+ // Composables
976
+
977
+ // Types
978
+
954
979
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
955
980
  function createDefaults(options) {
956
981
  return vue.ref(options);
957
982
  }
958
- function useDefaults() {
983
+ function injectDefaults() {
959
984
  const defaults = vue.inject(DefaultsSymbol);
960
985
  if (!defaults) throw new Error('[Vuetify] Could not find defaults instance');
961
986
  return defaults;
962
987
  }
963
988
  function provideDefaults(defaults, options) {
964
- const injectedDefaults = useDefaults();
989
+ const injectedDefaults = injectDefaults();
965
990
  const providedDefaults = vue.ref(defaults);
966
991
  const newDefaults = vue.computed(() => {
967
992
  const disabled = vue.unref(options?.disabled);
@@ -988,41 +1013,56 @@
988
1013
  vue.provide(DefaultsSymbol, newDefaults);
989
1014
  return newDefaults;
990
1015
  }
991
-
992
- function useToggleScope(source, fn) {
993
- let scope;
994
- function start() {
995
- scope = vue.effectScope();
996
- scope.run(() => fn.length ? fn(() => {
997
- scope?.stop();
998
- start();
999
- }) : fn());
1000
- }
1001
- vue.watch(source, active => {
1002
- if (active && !scope) {
1003
- start();
1004
- } else if (!active) {
1005
- scope?.stop();
1006
- scope = undefined;
1016
+ function propIsDefined(vnode, prop) {
1017
+ return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1018
+ }
1019
+ function useDefaults(props, name) {
1020
+ let defaults = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : injectDefaults();
1021
+ const vm = getCurrentInstance('useDefaults');
1022
+ name = name ?? vm.type.name ?? vm.type.__name;
1023
+ if (!name) {
1024
+ throw new Error('[Vuetify] Could not determine component name');
1025
+ }
1026
+ const componentDefaults = vue.computed(() => defaults.value[props._as ?? name]);
1027
+ const _props = new Proxy(props, {
1028
+ get(target, prop) {
1029
+ const propValue = Reflect.get(target, prop);
1030
+ if (prop === 'class' || prop === 'style') {
1031
+ return [componentDefaults.value?.[prop], propValue].filter(v => v != null);
1032
+ } else if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1033
+ return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? propValue;
1034
+ }
1035
+ return propValue;
1007
1036
  }
1008
- }, {
1009
- immediate: true
1010
1037
  });
1011
- vue.onScopeDispose(() => {
1012
- scope?.stop();
1038
+ const _subcomponentDefaults = vue.shallowRef();
1039
+ vue.watchEffect(() => {
1040
+ if (componentDefaults.value) {
1041
+ const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1042
+ let [key] = _ref;
1043
+ return key.startsWith(key[0].toUpperCase());
1044
+ });
1045
+ if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1046
+ }
1013
1047
  });
1048
+ function provideSubDefaults() {
1049
+ // If subcomponent defaults are provided, override any
1050
+ // subcomponents provided by the component's setup function.
1051
+ // This uses injectSelf so must be done after the original setup to work.
1052
+ useToggleScope(_subcomponentDefaults, () => {
1053
+ provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1054
+ });
1055
+ }
1056
+ return {
1057
+ props: _props,
1058
+ provideSubDefaults
1059
+ };
1014
1060
  }
1015
1061
 
1016
1062
  // Utils
1017
1063
 
1018
1064
  // Types
1019
1065
 
1020
- function propIsDefined(vnode, prop) {
1021
- return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1022
- }
1023
-
1024
- // No props
1025
-
1026
1066
  // Implementation
1027
1067
  function defineComponent(options) {
1028
1068
  options._setup = options._setup ?? options.setup;
@@ -1034,43 +1074,20 @@
1034
1074
  options.props = propsFactory(options.props ?? {}, toKebabCase(options.name))();
1035
1075
  const propKeys = Object.keys(options.props);
1036
1076
  options.filterProps = function filterProps(props) {
1037
- return pick(props, propKeys);
1077
+ return pick(props, propKeys, ['class', 'style']);
1038
1078
  };
1039
1079
  options.props._as = String;
1040
1080
  options.setup = function setup(props, ctx) {
1041
- const defaults = useDefaults();
1081
+ const defaults = injectDefaults();
1042
1082
 
1043
1083
  // Skip props proxy if defaults are not provided
1044
1084
  if (!defaults.value) return options._setup(props, ctx);
1045
- const vm = vue.getCurrentInstance();
1046
- const componentDefaults = vue.computed(() => defaults.value[props._as ?? options.name]);
1047
- const _props = new Proxy(props, {
1048
- get(target, prop) {
1049
- const propValue = Reflect.get(target, prop);
1050
- if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1051
- return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? propValue;
1052
- }
1053
- return propValue;
1054
- }
1055
- });
1056
- const _subcomponentDefaults = vue.shallowRef();
1057
- vue.watchEffect(() => {
1058
- if (componentDefaults.value) {
1059
- const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1060
- let [key] = _ref;
1061
- return key.startsWith(key[0].toUpperCase());
1062
- });
1063
- if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1064
- }
1065
- });
1085
+ const {
1086
+ props: _props,
1087
+ provideSubDefaults
1088
+ } = useDefaults(props, props._as ?? options.name, defaults);
1066
1089
  const setupBindings = options._setup(_props, ctx);
1067
-
1068
- // If subcomponent defaults are provided, override any
1069
- // subcomponents provided by the component's setup function.
1070
- // This uses injectSelf so must be done after the original setup to work.
1071
- useToggleScope(_subcomponentDefaults, () => {
1072
- provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1073
- });
1090
+ provideSubDefaults();
1074
1091
  return setupBindings;
1075
1092
  };
1076
1093
  }
@@ -1095,15 +1112,19 @@
1095
1112
  tag: {
1096
1113
  type: String,
1097
1114
  default: tag
1098
- }
1115
+ },
1116
+ ...makeComponentProps()
1099
1117
  },
1100
1118
  setup(props, _ref) {
1101
1119
  let {
1102
1120
  slots
1103
1121
  } = _ref;
1104
- return () => vue.h(props.tag, {
1105
- class: klass
1106
- }, slots.default?.());
1122
+ return () => {
1123
+ return vue.h(props.tag, {
1124
+ class: [klass, props.class],
1125
+ style: props.style
1126
+ }, slots.default?.());
1127
+ };
1107
1128
  }
1108
1129
  });
1109
1130
  }
@@ -1136,6 +1157,34 @@
1136
1157
  const deceleratedEasing = 'cubic-bezier(0.0, 0, 0.2, 1)'; // Entering
1137
1158
  const acceleratedEasing = 'cubic-bezier(0.4, 0, 1, 1)'; // Leaving
1138
1159
 
1160
+ // Utilities
1161
+ function getCurrentInstance(name, message) {
1162
+ const vm = vue.getCurrentInstance();
1163
+ if (!vm) {
1164
+ throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
1165
+ }
1166
+ return vm;
1167
+ }
1168
+ function getCurrentInstanceName() {
1169
+ let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
1170
+ const vm = getCurrentInstance(name).type;
1171
+ return toKebabCase(vm?.aliasName || vm?.name);
1172
+ }
1173
+ let _uid = 0;
1174
+ let _map = new WeakMap();
1175
+ function getUid() {
1176
+ const vm = getCurrentInstance('getUid');
1177
+ if (_map.has(vm)) return _map.get(vm);else {
1178
+ const uid = _uid++;
1179
+ _map.set(vm, uid);
1180
+ return uid;
1181
+ }
1182
+ }
1183
+ getUid.reset = () => {
1184
+ _uid = 0;
1185
+ _map = new WeakMap();
1186
+ };
1187
+
1139
1188
  function getScrollParent(el) {
1140
1189
  while (el) {
1141
1190
  if (hasScrollbar(el)) return el;
@@ -1159,6 +1208,16 @@
1159
1208
  return style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1160
1209
  }
1161
1210
 
1211
+ function injectSelf(key) {
1212
+ const {
1213
+ provides
1214
+ } = getCurrentInstance('injectSelf');
1215
+ if (provides && key in provides) {
1216
+ // TS doesn't allow symbol as index type
1217
+ return provides[key];
1218
+ }
1219
+ }
1220
+
1162
1221
  function isFixedPosition(el) {
1163
1222
  while (el) {
1164
1223
  if (window.getComputedStyle(el).position === 'fixed') {
@@ -2141,6 +2200,7 @@
2141
2200
  const VApp = genericComponent()({
2142
2201
  name: 'VApp',
2143
2202
  props: {
2203
+ ...makeComponentProps(),
2144
2204
  ...makeLayoutProps({
2145
2205
  fullHeight: true
2146
2206
  }),
@@ -2163,8 +2223,8 @@
2163
2223
  } = useRtl();
2164
2224
  useRender(() => vue.createVNode("div", {
2165
2225
  "ref": layoutRef,
2166
- "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value],
2167
- "style": layoutStyles.value
2226
+ "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value, props.class],
2227
+ "style": [layoutStyles.value, props.style]
2168
2228
  }, [vue.createVNode("div", {
2169
2229
  "class": "v-application__wrap"
2170
2230
  }, [slots.default?.()])]));
@@ -2589,6 +2649,7 @@
2589
2649
  props: {
2590
2650
  aspectRatio: [String, Number],
2591
2651
  contentClass: String,
2652
+ ...makeComponentProps(),
2592
2653
  ...makeDimensionProps()
2593
2654
  },
2594
2655
  setup(props, _ref) {
@@ -2602,8 +2663,8 @@
2602
2663
  dimensionStyles
2603
2664
  } = useDimension(props);
2604
2665
  useRender(() => vue.createVNode("div", {
2605
- "class": "v-responsive",
2606
- "style": dimensionStyles.value
2666
+ "class": ['v-responsive', props.class],
2667
+ "style": [dimensionStyles.value, props.style]
2607
2668
  }, [vue.createVNode("div", {
2608
2669
  "class": "v-responsive__sizer",
2609
2670
  "style": aspectStyles.value
@@ -2721,6 +2782,7 @@
2721
2782
  },
2722
2783
  srcset: String,
2723
2784
  width: [String, Number],
2785
+ ...makeComponentProps(),
2724
2786
  ...makeTransitionProps()
2725
2787
  },
2726
2788
  emits: {
@@ -2908,10 +2970,10 @@
2908
2970
  useRender(() => vue.withDirectives(vue.createVNode(VResponsive, {
2909
2971
  "class": ['v-img', {
2910
2972
  'v-img--booting': !isBooted.value
2911
- }],
2912
- "style": {
2973
+ }, props.class],
2974
+ "style": [{
2913
2975
  width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width)
2914
- },
2976
+ }, props.style],
2915
2977
  "aspectRatio": aspectRatio.value,
2916
2978
  "aria-label": props.alt,
2917
2979
  "role": props.alt ? 'img' : undefined
@@ -2946,10 +3008,9 @@
2946
3008
  }
2947
3009
  }, 'tag');
2948
3010
 
2949
- // Types
2950
-
2951
3011
  const makeVToolbarTitleProps = propsFactory({
2952
3012
  text: String,
3013
+ ...makeComponentProps(),
2953
3014
  ...makeTagProps()
2954
3015
  }, 'v-toolbar-title');
2955
3016
  const VToolbarTitle = genericComponent()({
@@ -2962,7 +3023,8 @@
2962
3023
  useRender(() => {
2963
3024
  const hasText = !!(slots.default || slots.text || props.text);
2964
3025
  return vue.createVNode(props.tag, {
2965
- "class": "v-toolbar-title"
3026
+ "class": ['v-toolbar-title', props.class],
3027
+ "style": props.style
2966
3028
  }, {
2967
3029
  default: () => [hasText && vue.createVNode("div", {
2968
3030
  "class": "v-toolbar-title__placeholder"
@@ -3143,6 +3205,7 @@
3143
3205
  image: String,
3144
3206
  title: String,
3145
3207
  ...makeBorderProps(),
3208
+ ...makeComponentProps(),
3146
3209
  ...makeElevationProps(),
3147
3210
  ...makeRoundedProps(),
3148
3211
  ...makeTagProps({
@@ -3193,8 +3256,8 @@
3193
3256
  'v-toolbar--flat': props.flat,
3194
3257
  'v-toolbar--floating': props.floating,
3195
3258
  [`v-toolbar--density-${props.density}`]: true
3196
- }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value],
3197
- "style": [backgroundColorStyles.value]
3259
+ }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value, props.class],
3260
+ "style": [backgroundColorStyles.value, props.style]
3198
3261
  }, {
3199
3262
  default: () => [hasImage && vue.createVNode("div", {
3200
3263
  "key": "image",
@@ -3479,13 +3542,13 @@
3479
3542
  "ref": vToolbarRef,
3480
3543
  "class": ['v-app-bar', {
3481
3544
  'v-app-bar--bottom': props.location === 'bottom'
3482
- }],
3483
- "style": {
3545
+ }, props.class],
3546
+ "style": [{
3484
3547
  ...layoutItemStyles.value,
3485
3548
  '--v-toolbar-image-opacity': opacity.value,
3486
3549
  height: undefined,
3487
3550
  ...ssrBootStyles.value
3488
- }
3551
+ }, props.style]
3489
3552
  }, toolbarProps, {
3490
3553
  "collapse": isCollapsed.value,
3491
3554
  "flat": isFlat.value
@@ -3572,6 +3635,7 @@
3572
3635
  const makeVBtnGroupProps = propsFactory({
3573
3636
  divided: Boolean,
3574
3637
  ...makeBorderProps(),
3638
+ ...makeComponentProps(),
3575
3639
  ...makeDensityProps(),
3576
3640
  ...makeElevationProps(),
3577
3641
  ...makeRoundedProps(),
@@ -3614,7 +3678,8 @@
3614
3678
  return vue.createVNode(props.tag, {
3615
3679
  "class": ['v-btn-group', {
3616
3680
  'v-btn-group--divided': props.divided
3617
- }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value]
3681
+ }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
3682
+ "style": props.style
3618
3683
  }, slots);
3619
3684
  });
3620
3685
  }
@@ -3847,8 +3912,10 @@
3847
3912
  useRender(() => {
3848
3913
  const [btnGroupProps] = VBtnGroup.filterProps(props);
3849
3914
  return vue.createVNode(VBtnGroup, vue.mergeProps({
3850
- "class": "v-btn-toggle"
3851
- }, btnGroupProps), {
3915
+ "class": ['v-btn-toggle', props.class]
3916
+ }, btnGroupProps, {
3917
+ "style": props.style
3918
+ }), {
3852
3919
  default: () => [slots.default?.({
3853
3920
  isSelected,
3854
3921
  next,
@@ -3919,7 +3986,7 @@
3919
3986
 
3920
3987
  // Types
3921
3988
 
3922
- const IconValue = [String, Function, Object];
3989
+ const IconValue = [String, Function, Object, Array];
3923
3990
  const IconSymbol = Symbol.for('vuetify:icons');
3924
3991
  const makeIconProps = propsFactory({
3925
3992
  icon: {
@@ -3939,8 +4006,9 @@
3939
4006
  slots
3940
4007
  } = _ref;
3941
4008
  return () => {
4009
+ const Icon = props.icon;
3942
4010
  return vue.createVNode(props.tag, null, {
3943
- default: () => [props.icon ? vue.createVNode(props.icon, null, null) : slots.default?.()]
4011
+ default: () => [props.icon ? vue.createVNode(Icon, null, null) : slots.default?.()]
3944
4012
  });
3945
4013
  };
3946
4014
  }
@@ -3963,7 +4031,12 @@
3963
4031
  "viewBox": "0 0 24 24",
3964
4032
  "role": "img",
3965
4033
  "aria-hidden": "true"
3966
- }, [vue.createVNode("path", {
4034
+ }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? vue.createVNode("path", {
4035
+ "d": path[0],
4036
+ "fill-opacity": path[1]
4037
+ }, null) : vue.createVNode("path", {
4038
+ "d": path
4039
+ }, null)) : vue.createVNode("path", {
3967
4040
  "d": props.icon
3968
4041
  }, null)])]
3969
4042
  });
@@ -4028,7 +4101,12 @@
4028
4101
  }
4029
4102
  }
4030
4103
  if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
4031
- if (typeof icon !== 'string') {
4104
+ if (Array.isArray(icon)) {
4105
+ return {
4106
+ component: VSvgIcon,
4107
+ icon
4108
+ };
4109
+ } else if (typeof icon !== 'string') {
4032
4110
  return {
4033
4111
  component: VComponentIcon,
4034
4112
  icon
@@ -4085,6 +4163,7 @@
4085
4163
  start: Boolean,
4086
4164
  end: Boolean,
4087
4165
  icon: IconValue,
4166
+ ...makeComponentProps(),
4088
4167
  ...makeSizeProps(),
4089
4168
  ...makeTagProps({
4090
4169
  tag: 'i'
@@ -4127,12 +4206,12 @@
4127
4206
  'v-icon--clickable': !!attrs.onClick,
4128
4207
  'v-icon--start': props.start,
4129
4208
  'v-icon--end': props.end
4130
- }],
4209
+ }, props.class],
4131
4210
  "style": [!sizeClasses.value ? {
4132
4211
  fontSize: convertToUnit(props.size),
4133
4212
  height: convertToUnit(props.size),
4134
4213
  width: convertToUnit(props.size)
4135
- } : undefined, textColorStyles.value],
4214
+ } : undefined, textColorStyles.value, props.style],
4136
4215
  "role": attrs.onClick ? 'button' : undefined,
4137
4216
  "aria-hidden": !attrs.onClick
4138
4217
  }, {
@@ -4190,6 +4269,7 @@
4190
4269
  type: [Number, String],
4191
4270
  default: 4
4192
4271
  },
4272
+ ...makeComponentProps(),
4193
4273
  ...makeSizeProps(),
4194
4274
  ...makeTagProps({
4195
4275
  tag: 'div'
@@ -4245,8 +4325,8 @@
4245
4325
  'v-progress-circular--indeterminate': !!props.indeterminate,
4246
4326
  'v-progress-circular--visible': isIntersecting.value,
4247
4327
  'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink'
4248
- }, themeClasses.value, sizeClasses.value, textColorClasses.value],
4249
- "style": [sizeStyles.value, textColorStyles.value],
4328
+ }, themeClasses.value, sizeClasses.value, textColorClasses.value, props.class],
4329
+ "style": [sizeStyles.value, textColorStyles.value, props.style],
4250
4330
  "role": "progressbar",
4251
4331
  "aria-valuemin": "0",
4252
4332
  "aria-valuemax": "100",
@@ -4665,6 +4745,7 @@
4665
4745
  stream: Boolean,
4666
4746
  striped: Boolean,
4667
4747
  roundedBar: Boolean,
4748
+ ...makeComponentProps(),
4668
4749
  ...makeLocationProps({
4669
4750
  location: 'top'
4670
4751
  }),
@@ -4736,14 +4817,14 @@
4736
4817
  'v-progress-linear--rounded': props.rounded,
4737
4818
  'v-progress-linear--rounded-bar': props.roundedBar,
4738
4819
  'v-progress-linear--striped': props.striped
4739
- }, roundedClasses.value, themeClasses.value],
4740
- "style": {
4820
+ }, roundedClasses.value, themeClasses.value, props.class],
4821
+ "style": [{
4741
4822
  bottom: props.location === 'bottom' ? 0 : undefined,
4742
4823
  top: props.location === 'top' ? 0 : undefined,
4743
4824
  height: props.active ? convertToUnit(height.value) : 0,
4744
4825
  '--v-progress-linear-height': convertToUnit(height.value),
4745
4826
  ...locationStyles.value
4746
- },
4827
+ }, props.style],
4747
4828
  "role": "progressbar",
4748
4829
  "aria-hidden": props.active ? 'false' : 'true',
4749
4830
  "aria-valuemin": "0",
@@ -4954,7 +5035,7 @@
4954
5035
  },
4955
5036
  text: String,
4956
5037
  ...makeBorderProps(),
4957
- ...makeRoundedProps(),
5038
+ ...makeComponentProps(),
4958
5039
  ...makeDensityProps(),
4959
5040
  ...makeDimensionProps(),
4960
5041
  ...makeElevationProps(),
@@ -4962,6 +5043,7 @@
4962
5043
  ...makeLoaderProps(),
4963
5044
  ...makeLocationProps(),
4964
5045
  ...makePositionProps(),
5046
+ ...makeRoundedProps(),
4965
5047
  ...makeRouterProps(),
4966
5048
  ...makeSizeProps(),
4967
5049
  ...makeTagProps({
@@ -5059,8 +5141,8 @@
5059
5141
  'v-btn--icon': !!props.icon,
5060
5142
  'v-btn--loading': props.loading,
5061
5143
  'v-btn--stacked': props.stacked
5062
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
5063
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value],
5144
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
5145
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value, props.style],
5064
5146
  "disabled": isDisabled.value || undefined,
5065
5147
  "href": link.href.value,
5066
5148
  "onClick": e => {
@@ -5137,15 +5219,17 @@
5137
5219
  icon: {
5138
5220
  type: IconValue,
5139
5221
  default: '$menu'
5140
- }
5222
+ },
5223
+ ...makeComponentProps()
5141
5224
  },
5142
5225
  setup(props, _ref) {
5143
5226
  let {
5144
5227
  slots
5145
5228
  } = _ref;
5146
5229
  useRender(() => vue.createVNode(VBtn, {
5147
- "class": "v-app-bar-nav-icon",
5148
- "icon": props.icon
5230
+ "class": ['v-app-bar-nav-icon', props.class],
5231
+ "icon": props.icon,
5232
+ "style": props.style
5149
5233
  }, slots));
5150
5234
  return {};
5151
5235
  }
@@ -5153,9 +5237,12 @@
5153
5237
 
5154
5238
  const VToolbarItems = genericComponent()({
5155
5239
  name: 'VToolbarItems',
5156
- props: makeVariantProps({
5157
- variant: 'text'
5158
- }),
5240
+ props: {
5241
+ ...makeComponentProps(),
5242
+ ...makeVariantProps({
5243
+ variant: 'text'
5244
+ })
5245
+ },
5159
5246
  setup(props, _ref) {
5160
5247
  let {
5161
5248
  slots
@@ -5168,7 +5255,8 @@
5168
5255
  }
5169
5256
  });
5170
5257
  useRender(() => vue.createVNode("div", {
5171
- "class": "v-toolbar-items"
5258
+ "class": ['v-toolbar-items', props.class],
5259
+ "style": props.style
5172
5260
  }, [slots.default?.()]));
5173
5261
  return {};
5174
5262
  }
@@ -5230,6 +5318,7 @@
5230
5318
  type: String,
5231
5319
  validator: val => allowedTypes.includes(val)
5232
5320
  },
5321
+ ...makeComponentProps(),
5233
5322
  ...makeDensityProps(),
5234
5323
  ...makeDimensionProps(),
5235
5324
  ...makeElevationProps(),
@@ -5312,8 +5401,8 @@
5312
5401
  [`v-alert--border-${props.border === true ? 'start' : props.border}`]: true
5313
5402
  }, {
5314
5403
  'v-alert--prominent': props.prominent
5315
- }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
5316
- "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
5404
+ }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
5405
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
5317
5406
  "role": "alert"
5318
5407
  }, {
5319
5408
  default: () => [genOverlays(false, 'v-alert'), props.border && vue.createVNode("div", {
@@ -5407,6 +5496,7 @@
5407
5496
  props: {
5408
5497
  text: String,
5409
5498
  clickable: Boolean,
5499
+ ...makeComponentProps(),
5410
5500
  ...makeThemeProps()
5411
5501
  },
5412
5502
  setup(props, _ref) {
@@ -5416,7 +5506,8 @@
5416
5506
  useRender(() => vue.createVNode("label", {
5417
5507
  "class": ['v-label', {
5418
5508
  'v-label--clickable': props.clickable
5419
- }]
5509
+ }, props.class],
5510
+ "style": props.style
5420
5511
  }, [props.text, slots.default?.()]));
5421
5512
  return {};
5422
5513
  }
@@ -5425,7 +5516,8 @@
5425
5516
  const VFieldLabel = genericComponent()({
5426
5517
  name: 'VFieldLabel',
5427
5518
  props: {
5428
- floating: Boolean
5519
+ floating: Boolean,
5520
+ ...makeComponentProps()
5429
5521
  },
5430
5522
  setup(props, _ref) {
5431
5523
  let {
@@ -5434,7 +5526,8 @@
5434
5526
  useRender(() => vue.createVNode(VLabel, {
5435
5527
  "class": ['v-field-label', {
5436
5528
  'v-field-label--floating': props.floating
5437
- }],
5529
+ }, props.class],
5530
+ "style": props.style,
5438
5531
  "aria-hidden": props.floating || undefined
5439
5532
  }, slots));
5440
5533
  return {};
@@ -5485,6 +5578,7 @@
5485
5578
  },
5486
5579
  active: Boolean,
5487
5580
  color: String,
5581
+ baseColor: String,
5488
5582
  dirty: Boolean,
5489
5583
  disabled: Boolean,
5490
5584
  error: Boolean,
@@ -5502,9 +5596,10 @@
5502
5596
  'onClick:clear': EventProp(),
5503
5597
  'onClick:appendInner': EventProp(),
5504
5598
  'onClick:prependInner': EventProp(),
5505
- ...makeThemeProps(),
5599
+ ...makeComponentProps(),
5506
5600
  ...makeLoaderProps(),
5507
- ...makeRoundedProps()
5601
+ ...makeRoundedProps(),
5602
+ ...makeThemeProps()
5508
5603
  }, 'v-field');
5509
5604
  const VField = genericComponent()({
5510
5605
  name: 'VField',
@@ -5558,7 +5653,7 @@
5558
5653
  textColorClasses,
5559
5654
  textColorStyles
5560
5655
  } = useTextColor(vue.computed(() => {
5561
- return isActive.value && isFocused.value && !props.error && !props.disabled ? props.color : undefined;
5656
+ return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : props.baseColor;
5562
5657
  }));
5563
5658
  vue.watch(isActive, val => {
5564
5659
  if (hasLabel.value) {
@@ -5635,8 +5730,8 @@
5635
5730
  'v-field--single-line': props.singleLine,
5636
5731
  'v-field--no-label': !label,
5637
5732
  [`v-field--variant-${props.variant}`]: true
5638
- }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value],
5639
- "style": [backgroundColorStyles.value, textColorStyles.value],
5733
+ }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, props.class],
5734
+ "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
5640
5735
  "onClick": onClick
5641
5736
  }, attrs), [vue.createVNode("div", {
5642
5737
  "class": "v-field__overlay"
@@ -5724,7 +5819,7 @@
5724
5819
  });
5725
5820
  // TODO: this is kinda slow, might be better to implicitly inherit props instead
5726
5821
  function filterFieldProps(attrs) {
5727
- const keys = Object.keys(VField.props).filter(k => !isOn(k));
5822
+ const keys = Object.keys(VField.props).filter(k => !isOn(k) && k !== 'class' && k !== 'style');
5728
5823
  return pick(attrs, keys);
5729
5824
  }
5730
5825
 
@@ -5739,6 +5834,7 @@
5739
5834
  type: [Array, String],
5740
5835
  default: () => []
5741
5836
  },
5837
+ ...makeComponentProps(),
5742
5838
  ...makeTransitionProps({
5743
5839
  transition: {
5744
5840
  component: VSlideYTransition,
@@ -5759,8 +5855,8 @@
5759
5855
  useRender(() => vue.createVNode(MaybeTransition, {
5760
5856
  "transition": props.transition,
5761
5857
  "tag": "div",
5762
- "class": ['v-messages', textColorClasses.value],
5763
- "style": textColorStyles.value,
5858
+ "class": ['v-messages', textColorClasses.value, props.class],
5859
+ "style": [textColorStyles.value, props.style],
5764
5860
  "role": "alert",
5765
5861
  "aria-live": "polite"
5766
5862
  }, {
@@ -6056,6 +6152,7 @@
6056
6152
  },
6057
6153
  'onClick:prepend': EventProp(),
6058
6154
  'onClick:append': EventProp(),
6155
+ ...makeComponentProps(),
6059
6156
  ...makeDensityProps(),
6060
6157
  ...makeValidationProps()
6061
6158
  }, 'v-input');
@@ -6123,7 +6220,8 @@
6123
6220
  const hasMessages = messages.value.length > 0;
6124
6221
  const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details);
6125
6222
  return vue.createVNode("div", {
6126
- "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value]
6223
+ "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value, props.class],
6224
+ "style": props.style
6127
6225
  }, [hasPrepend && vue.createVNode("div", {
6128
6226
  "key": "prepend",
6129
6227
  "class": "v-input__prepend"
@@ -6166,6 +6264,7 @@
6166
6264
  type: [Number, String],
6167
6265
  default: 0
6168
6266
  },
6267
+ ...makeComponentProps(),
6169
6268
  ...makeTransitionProps({
6170
6269
  transition: {
6171
6270
  component: VSlideYTransition
@@ -6183,7 +6282,8 @@
6183
6282
  "transition": props.transition
6184
6283
  }, {
6185
6284
  default: () => [vue.withDirectives(vue.createVNode("div", {
6186
- "class": "v-counter"
6285
+ "class": ['v-counter', props.class],
6286
+ "style": props.style
6187
6287
  }, [slots.default ? slots.default({
6188
6288
  counter: counter.value,
6189
6289
  max: props.max,
@@ -6386,7 +6486,8 @@
6386
6486
  'v-text-field--prefixed': props.prefix,
6387
6487
  'v-text-field--suffixed': props.suffix,
6388
6488
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
6389
- }]
6489
+ }, props.class],
6490
+ "style": props.style
6390
6491
  }, rootAttrs, inputProps, {
6391
6492
  "focused": isFocused.value
6392
6493
  }), {
@@ -6502,6 +6603,7 @@
6502
6603
  type: String,
6503
6604
  default: 'VSelectionControl'
6504
6605
  },
6606
+ ...makeComponentProps(),
6505
6607
  ...makeSelectionControlGroupProps()
6506
6608
  },
6507
6609
  emits: {
@@ -6549,7 +6651,8 @@
6549
6651
  useRender(() => vue.createVNode("div", {
6550
6652
  "class": ['v-selection-control-group', {
6551
6653
  'v-selection-control-group--inline': props.inline
6552
- }],
6654
+ }, props.class],
6655
+ "style": props.style,
6553
6656
  "role": props.type === 'radio' ? 'radiogroup' : undefined
6554
6657
  }, [slots.default?.()]));
6555
6658
  return {};
@@ -6563,6 +6666,7 @@
6563
6666
  trueValue: null,
6564
6667
  falseValue: null,
6565
6668
  value: null,
6669
+ ...makeComponentProps(),
6566
6670
  ...makeSelectionControlGroupProps()
6567
6671
  }, 'v-selection-control');
6568
6672
  function useSelectionControl(props) {
@@ -6677,8 +6781,10 @@
6677
6781
  'v-selection-control--focused': isFocused.value,
6678
6782
  'v-selection-control--focus-visible': isFocusVisible.value,
6679
6783
  'v-selection-control--inline': props.inline
6680
- }, densityClasses.value]
6681
- }, rootAttrs), [vue.createVNode("div", {
6784
+ }, densityClasses.value, props.class]
6785
+ }, rootAttrs, {
6786
+ "style": props.style
6787
+ }), [vue.createVNode("div", {
6682
6788
  "class": ['v-selection-control__wrapper', textColorClasses.value],
6683
6789
  "style": textColorStyles.value
6684
6790
  }, [slots.default?.(), vue.withDirectives(vue.createVNode("div", {
@@ -6760,7 +6866,8 @@
6760
6866
  useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
6761
6867
  "modelValue": model.value,
6762
6868
  "onUpdate:modelValue": [$event => model.value = $event, onChange],
6763
- "class": "v-checkbox-btn",
6869
+ "class": ['v-checkbox-btn', props.class],
6870
+ "style": props.style,
6764
6871
  "type": "checkbox",
6765
6872
  "inline": true,
6766
6873
  "falseIcon": falseIcon.value,
@@ -6800,10 +6907,11 @@
6800
6907
  const [inputProps, _1] = VInput.filterProps(props);
6801
6908
  const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6802
6909
  return vue.createVNode(VInput, vue.mergeProps({
6803
- "class": "v-checkbox"
6910
+ "class": ['v-checkbox', props.class]
6804
6911
  }, inputAttrs, inputProps, {
6805
6912
  "id": id.value,
6806
- "focused": isFocused.value
6913
+ "focused": isFocused.value,
6914
+ "style": props.style
6807
6915
  }), {
6808
6916
  ...slots,
6809
6917
  default: _ref2 => {
@@ -6834,6 +6942,7 @@
6834
6942
  end: Boolean,
6835
6943
  icon: IconValue,
6836
6944
  image: String,
6945
+ ...makeComponentProps(),
6837
6946
  ...makeDensityProps(),
6838
6947
  ...makeRoundedProps(),
6839
6948
  ...makeSizeProps(),
@@ -6872,8 +6981,8 @@
6872
6981
  "class": ['v-avatar', {
6873
6982
  'v-avatar--start': props.start,
6874
6983
  'v-avatar--end': props.end
6875
- }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
6876
- "style": [colorStyles.value, sizeStyles.value]
6984
+ }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6985
+ "style": [colorStyles.value, sizeStyles.value, props.style]
6877
6986
  }, {
6878
6987
  default: () => [props.image ? vue.createVNode(VImg, {
6879
6988
  "key": "image",
@@ -6901,6 +7010,7 @@
6901
7010
  type: Function,
6902
7011
  default: deepEqual
6903
7012
  },
7013
+ ...makeComponentProps(),
6904
7014
  ...makeGroupProps({
6905
7015
  selectedClass: 'v-chip--selected'
6906
7016
  }),
@@ -6938,7 +7048,8 @@
6938
7048
  useRender(() => vue.createVNode(props.tag, {
6939
7049
  "class": ['v-chip-group', {
6940
7050
  'v-chip-group--column': props.column
6941
- }, themeClasses.value]
7051
+ }, themeClasses.value, props.class],
7052
+ "style": props.style
6942
7053
  }, {
6943
7054
  default: () => [slots.default?.({
6944
7055
  isSelected,
@@ -6952,8 +7063,6 @@
6952
7063
  }
6953
7064
  });
6954
7065
 
6955
- // Types
6956
-
6957
7066
  const VChip = genericComponent()({
6958
7067
  name: 'VChip',
6959
7068
  directives: {
@@ -6998,6 +7107,7 @@
6998
7107
  onClick: EventProp(),
6999
7108
  onClickOnce: EventProp(),
7000
7109
  ...makeBorderProps(),
7110
+ ...makeComponentProps(),
7001
7111
  ...makeDensityProps(),
7002
7112
  ...makeElevationProps(),
7003
7113
  ...makeGroupItemProps(),
@@ -7090,8 +7200,8 @@
7090
7200
  'v-chip--link': isClickable.value,
7091
7201
  'v-chip--filter': hasFilter,
7092
7202
  'v-chip--pill': props.pill
7093
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value],
7094
- "style": [hasColor ? colorStyles.value : undefined],
7203
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value, props.class],
7204
+ "style": [hasColor ? colorStyles.value : undefined, props.style],
7095
7205
  "disabled": props.disabled || undefined,
7096
7206
  "draggable": props.draggable,
7097
7207
  "href": link.href.value,
@@ -7200,6 +7310,7 @@
7200
7310
  length: [Number, String],
7201
7311
  thickness: [Number, String],
7202
7312
  vertical: Boolean,
7313
+ ...makeComponentProps(),
7203
7314
  ...makeThemeProps()
7204
7315
  },
7205
7316
  setup(props, _ref) {
@@ -7228,8 +7339,8 @@
7228
7339
  'v-divider': true,
7229
7340
  'v-divider--inset': props.inset,
7230
7341
  'v-divider--vertical': props.vertical
7231
- }, themeClasses.value, textColorClasses.value],
7232
- "style": [dividerStyles.value, textColorStyles.value],
7342
+ }, themeClasses.value, textColorClasses.value, props.class],
7343
+ "style": [dividerStyles.value, textColorStyles.value, props.style],
7233
7344
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
7234
7345
  "role": `${attrs.role || 'separator'}`
7235
7346
  }, null));
@@ -7728,6 +7839,7 @@
7728
7839
  fluid: Boolean,
7729
7840
  subgroup: Boolean,
7730
7841
  value: null,
7842
+ ...makeComponentProps(),
7731
7843
  ...makeTagProps()
7732
7844
  }, 'v-list-group');
7733
7845
  const VListGroup = genericComponent()({
@@ -7776,7 +7888,8 @@
7776
7888
  'v-list-group--fluid': props.fluid,
7777
7889
  'v-list-group--subgroup': props.subgroup,
7778
7890
  'v-list-group--open': isOpen.value
7779
- }]
7891
+ }, props.class],
7892
+ "style": props.style
7780
7893
  }, {
7781
7894
  default: () => [slots.activator && vue.createVNode(VDefaultsProvider, {
7782
7895
  "defaults": activatorDefaults.value
@@ -7843,6 +7956,7 @@
7843
7956
  onClick: EventProp(),
7844
7957
  onClickOnce: EventProp(),
7845
7958
  ...makeBorderProps(),
7959
+ ...makeComponentProps(),
7846
7960
  ...makeDensityProps(),
7847
7961
  ...makeDimensionProps(),
7848
7962
  ...makeElevationProps(),
@@ -7953,8 +8067,8 @@
7953
8067
  'v-list-item--nav': props.nav,
7954
8068
  'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,
7955
8069
  [`${props.activeClass}`]: props.activeClass && isActive.value
7956
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value],
7957
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value],
8070
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
8071
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, props.style],
7958
8072
  "href": link.href.value,
7959
8073
  "tabindex": isClickable.value ? 0 : undefined,
7960
8074
  "onClick": onClick,
@@ -8047,6 +8161,7 @@
8047
8161
  inset: Boolean,
8048
8162
  sticky: Boolean,
8049
8163
  title: String,
8164
+ ...makeComponentProps(),
8050
8165
  ...makeTagProps()
8051
8166
  },
8052
8167
  setup(props, _ref) {
@@ -8063,10 +8178,10 @@
8063
8178
  "class": ['v-list-subheader', {
8064
8179
  'v-list-subheader--inset': props.inset,
8065
8180
  'v-list-subheader--sticky': props.sticky
8066
- }, textColorClasses.value],
8067
- "style": {
8181
+ }, textColorClasses.value, props.class],
8182
+ "style": [{
8068
8183
  textColorStyles
8069
- }
8184
+ }, props.style]
8070
8185
  }, {
8071
8186
  default: () => [hasText && vue.createVNode("div", {
8072
8187
  "class": "v-list-subheader__text"
@@ -8286,6 +8401,7 @@
8286
8401
  openStrategy: 'list'
8287
8402
  }),
8288
8403
  ...makeBorderProps(),
8404
+ ...makeComponentProps(),
8289
8405
  ...makeDensityProps(),
8290
8406
  ...makeDimensionProps(),
8291
8407
  ...makeElevationProps(),
@@ -8387,27 +8503,8 @@
8387
8503
  e.preventDefault();
8388
8504
  }
8389
8505
  function focus(location) {
8390
- if (!contentRef.value) return;
8391
- const targets = ['button', '[href]', 'input', 'select', 'textarea', '[tabindex]'].map(s => `${s}:not([tabindex="-1"])`).join(', ');
8392
- const focusable = [...contentRef.value.querySelectorAll(targets)].filter(el => !el.hasAttribute('disabled'));
8393
- const idx = focusable.indexOf(document.activeElement);
8394
- if (!location) {
8395
- if (!contentRef.value.contains(document.activeElement)) {
8396
- focusable[0]?.focus();
8397
- }
8398
- } else if (location === 'first') {
8399
- focusable[0]?.focus();
8400
- } else if (location === 'last') {
8401
- focusable.at(-1)?.focus();
8402
- } else {
8403
- let el;
8404
- let idxx = idx;
8405
- const inc = location === 'next' ? 1 : -1;
8406
- do {
8407
- idxx += inc;
8408
- el = focusable[idxx];
8409
- } while ((!el || el.offsetParent == null) && idxx < focusable.length && idxx >= 0);
8410
- if (el) el.focus();else focus(location === 'next' ? 'first' : 'last');
8506
+ if (contentRef.value) {
8507
+ return focusChild(contentRef.value, location);
8411
8508
  }
8412
8509
  }
8413
8510
  useRender(() => {
@@ -8416,8 +8513,8 @@
8416
8513
  "class": ['v-list', {
8417
8514
  'v-list--disabled': props.disabled,
8418
8515
  'v-list--nav': props.nav
8419
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value],
8420
- "style": [backgroundColorStyles.value, dimensionStyles.value],
8516
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class],
8517
+ "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
8421
8518
  "role": "listbox",
8422
8519
  "aria-activedescendant": undefined,
8423
8520
  "onFocusin": onFocusin,
@@ -8445,6 +8542,7 @@
8445
8542
  props: {
8446
8543
  start: Boolean,
8447
8544
  end: Boolean,
8545
+ ...makeComponentProps(),
8448
8546
  ...makeTagProps()
8449
8547
  },
8450
8548
  setup(props, _ref) {
@@ -8455,7 +8553,8 @@
8455
8553
  "class": ['v-list-item-action', {
8456
8554
  'v-list-item-action--start': props.start,
8457
8555
  'v-list-item-action--end': props.end
8458
- }]
8556
+ }, props.class],
8557
+ "style": props.style
8459
8558
  }, slots));
8460
8559
  return {};
8461
8560
  }
@@ -8466,6 +8565,7 @@
8466
8565
  props: {
8467
8566
  start: Boolean,
8468
8567
  end: Boolean,
8568
+ ...makeComponentProps(),
8469
8569
  ...makeTagProps()
8470
8570
  },
8471
8571
  setup(props, _ref) {
@@ -8477,7 +8577,8 @@
8477
8577
  "class": ['v-list-item-media', {
8478
8578
  'v-list-item-media--start': props.start,
8479
8579
  'v-list-item-media--end': props.end
8480
- }]
8580
+ }, props.class],
8581
+ "style": props.style
8481
8582
  }, slots);
8482
8583
  });
8483
8584
  return {};
@@ -9718,6 +9819,7 @@
9718
9819
  default: 2000
9719
9820
  },
9720
9821
  ...makeActivatorProps(),
9822
+ ...makeComponentProps(),
9721
9823
  ...makeDimensionProps(),
9722
9824
  ...makeLazyProps(),
9723
9825
  ...makeLocationStrategyProps(),
@@ -9885,10 +9987,10 @@
9885
9987
  'v-overlay--absolute': props.absolute || props.contained,
9886
9988
  'v-overlay--active': isActive.value,
9887
9989
  'v-overlay--contained': props.contained
9888
- }, themeClasses.value, rtlClasses.value],
9990
+ }, themeClasses.value, rtlClasses.value, props.class],
9889
9991
  "style": [stackStyles.value, {
9890
9992
  top: convertToUnit(top.value)
9891
- }],
9993
+ }, props.style],
9892
9994
  "ref": root
9893
9995
  }, scopeId, attrs), [vue.createVNode(Scrim, vue.mergeProps({
9894
9996
  "color": scrimColor,
@@ -9994,7 +10096,8 @@
9994
10096
  const [overlayProps] = VOverlay.filterProps(props);
9995
10097
  return vue.createVNode(VOverlay, vue.mergeProps({
9996
10098
  "ref": overlay,
9997
- "class": ['v-menu']
10099
+ "class": ['v-menu', props.class],
10100
+ "style": props.style
9998
10101
  }, overlayProps, {
9999
10102
  "modelValue": isActive.value,
10000
10103
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -10213,7 +10316,8 @@
10213
10316
  'v-select--chips': !!props.chips,
10214
10317
  [`v-select--${props.multiple ? 'multiple' : 'single'}`]: true,
10215
10318
  'v-select--selected': model.value.length
10216
- }],
10319
+ }, props.class],
10320
+ "style": props.style,
10217
10321
  "appendInnerIcon": props.menuIcon,
10218
10322
  "readonly": true,
10219
10323
  "placeholder": placeholder,
@@ -10656,7 +10760,8 @@
10656
10760
  'v-autocomplete--selecting-index': selectionIndex.value > -1,
10657
10761
  [`v-autocomplete--${props.multiple ? 'multiple' : 'single'}`]: true,
10658
10762
  'v-autocomplete--selection-slot': !!slots.selection
10659
- }],
10763
+ }, props.class],
10764
+ "style": props.style,
10660
10765
  "appendInnerIcon": props.menuIcon,
10661
10766
  "readonly": props.readonly,
10662
10767
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -10770,8 +10875,6 @@
10770
10875
  }
10771
10876
  });
10772
10877
 
10773
- // Types
10774
-
10775
10878
  const VBadge = genericComponent()({
10776
10879
  name: 'VBadge',
10777
10880
  inheritAttrs: false,
@@ -10795,6 +10898,7 @@
10795
10898
  offsetX: [Number, String],
10796
10899
  offsetY: [Number, String],
10797
10900
  textColor: String,
10901
+ ...makeComponentProps(),
10798
10902
  ...makeLocationProps({
10799
10903
  location: 'top end'
10800
10904
  }),
@@ -10839,8 +10943,10 @@
10839
10943
  'v-badge--dot': props.dot,
10840
10944
  'v-badge--floating': props.floating,
10841
10945
  'v-badge--inline': props.inline
10842
- }]
10843
- }, attrs), {
10946
+ }, props.class]
10947
+ }, attrs, {
10948
+ "style": props.style
10949
+ }), {
10844
10950
  default: () => [vue.createVNode("div", {
10845
10951
  "class": "v-badge__wrapper"
10846
10952
  }, [ctx.slots.default?.(), vue.createVNode(MaybeTransition, {
@@ -10867,7 +10973,8 @@
10867
10973
  name: 'VBannerActions',
10868
10974
  props: {
10869
10975
  color: String,
10870
- density: String
10976
+ density: String,
10977
+ ...makeComponentProps()
10871
10978
  },
10872
10979
  setup(props, _ref) {
10873
10980
  let {
@@ -10881,7 +10988,8 @@
10881
10988
  }
10882
10989
  });
10883
10990
  useRender(() => vue.createVNode("div", {
10884
- "class": "v-banner-actions"
10991
+ "class": ['v-banner-actions', props.class],
10992
+ "style": props.style
10885
10993
  }, [slots.default?.()]));
10886
10994
  return {};
10887
10995
  }
@@ -10902,6 +11010,7 @@
10902
11010
  sticky: Boolean,
10903
11011
  text: String,
10904
11012
  ...makeBorderProps(),
11013
+ ...makeComponentProps(),
10905
11014
  ...makeDensityProps(),
10906
11015
  ...makeDimensionProps(),
10907
11016
  ...makeElevationProps(),
@@ -10959,8 +11068,8 @@
10959
11068
  'v-banner--stacked': props.stacked || mobile.value,
10960
11069
  'v-banner--sticky': props.sticky,
10961
11070
  [`v-banner--${props.lines}-line`]: !!props.lines
10962
- }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value],
10963
- "style": [dimensionStyles.value, locationStyles.value],
11071
+ }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11072
+ "style": [dimensionStyles.value, locationStyles.value, props.style],
10964
11073
  "role": "banner"
10965
11074
  }, {
10966
11075
  default: () => [hasPrepend && vue.createVNode("div", {
@@ -11016,6 +11125,7 @@
11016
11125
  default: true
11017
11126
  },
11018
11127
  ...makeBorderProps(),
11128
+ ...makeComponentProps(),
11019
11129
  ...makeDensityProps(),
11020
11130
  ...makeElevationProps(),
11021
11131
  ...makeRoundedProps(),
@@ -11090,11 +11200,11 @@
11090
11200
  'v-bottom-navigation--active': isActive.value,
11091
11201
  'v-bottom-navigation--grow': props.grow,
11092
11202
  'v-bottom-navigation--shift': props.mode === 'shift'
11093
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value],
11203
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
11094
11204
  "style": [backgroundColorStyles.value, layoutItemStyles.value, {
11095
11205
  height: convertToUnit(height.value),
11096
11206
  transform: `translateY(${convertToUnit(!isActive.value ? 100 : 0, '%')})`
11097
- }, ssrBootStyles.value]
11207
+ }, ssrBootStyles.value, props.style]
11098
11208
  }, {
11099
11209
  default: () => [slots.default && vue.createVNode("div", {
11100
11210
  "class": "v-bottom-navigation__content"
@@ -11108,14 +11218,16 @@
11108
11218
  const VBreadcrumbsDivider = genericComponent()({
11109
11219
  name: 'VBreadcrumbsDivider',
11110
11220
  props: {
11111
- divider: [Number, String]
11221
+ divider: [Number, String],
11222
+ ...makeComponentProps()
11112
11223
  },
11113
11224
  setup(props, _ref) {
11114
11225
  let {
11115
11226
  slots
11116
11227
  } = _ref;
11117
11228
  useRender(() => vue.createVNode("li", {
11118
- "class": "v-breadcrumbs-divider"
11229
+ "class": ['v-breadcrumbs-divider', props.class],
11230
+ "style": props.style
11119
11231
  }, [slots?.default?.() ?? props.divider]));
11120
11232
  return {};
11121
11233
  }
@@ -11130,6 +11242,7 @@
11130
11242
  color: String,
11131
11243
  disabled: Boolean,
11132
11244
  title: String,
11245
+ ...makeComponentProps(),
11133
11246
  ...makeRouterProps(),
11134
11247
  ...makeTagProps({
11135
11248
  tag: 'li'
@@ -11155,8 +11268,8 @@
11155
11268
  'v-breadcrumbs-item--disabled': props.disabled,
11156
11269
  'v-breadcrumbs-item--link': link.isLink.value,
11157
11270
  [`${props.activeClass}`]: isActive.value && props.activeClass
11158
- }, textColorClasses.value],
11159
- "style": [textColorStyles.value],
11271
+ }, textColorClasses.value, props.class],
11272
+ "style": [textColorStyles.value, props.style],
11160
11273
  "href": link.href.value,
11161
11274
  "aria-current": isActive.value ? 'page' : undefined,
11162
11275
  "onClick": link.navigate
@@ -11187,6 +11300,7 @@
11187
11300
  type: Array,
11188
11301
  default: () => []
11189
11302
  },
11303
+ ...makeComponentProps(),
11190
11304
  ...makeDensityProps(),
11191
11305
  ...makeRoundedProps(),
11192
11306
  ...makeTagProps({
@@ -11218,11 +11332,22 @@
11218
11332
  disabled: vue.toRef(props, 'disabled')
11219
11333
  }
11220
11334
  });
11335
+ const items = vue.computed(() => props.items.map(item => {
11336
+ return typeof item === 'string' ? {
11337
+ item: {
11338
+ title: item
11339
+ },
11340
+ raw: item
11341
+ } : {
11342
+ item,
11343
+ raw: item
11344
+ };
11345
+ }));
11221
11346
  useRender(() => {
11222
11347
  const hasPrepend = !!(slots.prepend || props.icon);
11223
11348
  return vue.createVNode(props.tag, {
11224
- "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
11225
- "style": backgroundColorStyles.value
11349
+ "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value, props.class],
11350
+ "style": [backgroundColorStyles.value, props.style]
11226
11351
  }, {
11227
11352
  default: () => [hasPrepend && vue.createVNode("div", {
11228
11353
  "key": "prepend",
@@ -11240,33 +11365,36 @@
11240
11365
  start: true
11241
11366
  }
11242
11367
  }
11243
- }, slots.prepend)]), props.items.map((item, index, array) => vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
11244
- "key": index,
11245
- "disabled": index >= array.length - 1
11246
- }, typeof item === 'string' ? {
11247
- title: item
11248
- } : item), {
11249
- default: slots.title ? () => slots.title?.({
11250
- item,
11251
- index
11252
- }) : undefined
11253
- }), index < array.length - 1 && vue.createVNode(VBreadcrumbsDivider, null, {
11254
- default: slots.divider ? () => slots.divider?.({
11368
+ }, slots.prepend)]), items.value.map((_ref2, index, array) => {
11369
+ let {
11255
11370
  item,
11256
- index
11257
- }) : undefined
11258
- })])), slots.default?.()]
11371
+ raw
11372
+ } = _ref2;
11373
+ return vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
11374
+ "key": item.title,
11375
+ "disabled": index >= array.length - 1
11376
+ }, item), {
11377
+ default: slots.title ? () => slots.title?.({
11378
+ item: raw,
11379
+ index
11380
+ }) : undefined
11381
+ }), index < array.length - 1 && vue.createVNode(VBreadcrumbsDivider, null, {
11382
+ default: slots.divider ? () => slots.divider?.({
11383
+ item: raw,
11384
+ index
11385
+ }) : undefined
11386
+ })]);
11387
+ }), slots.default?.()]
11259
11388
  });
11260
11389
  });
11261
11390
  return {};
11262
11391
  }
11263
11392
  });
11264
11393
 
11265
- // Types
11266
-
11267
- const VCardActions = defineComponent({
11394
+ const VCardActions = genericComponent()({
11268
11395
  name: 'VCardActions',
11269
- setup(_, _ref) {
11396
+ props: makeComponentProps(),
11397
+ setup(props, _ref) {
11270
11398
  let {
11271
11399
  slots
11272
11400
  } = _ref;
@@ -11276,7 +11404,8 @@
11276
11404
  }
11277
11405
  });
11278
11406
  useRender(() => vue.createVNode("div", {
11279
- "class": "v-card-actions"
11407
+ "class": ['v-card-actions', props.class],
11408
+ "style": props.style
11280
11409
  }, [slots.default?.()]));
11281
11410
  return {};
11282
11411
  }
@@ -11286,8 +11415,6 @@
11286
11415
 
11287
11416
  const VCardTitle = createSimpleFunctional('v-card-title');
11288
11417
 
11289
- // Types
11290
-
11291
11418
  const VCardItem = genericComponent()({
11292
11419
  name: 'VCardItem',
11293
11420
  props: {
@@ -11297,6 +11424,7 @@
11297
11424
  prependIcon: IconValue,
11298
11425
  subtitle: String,
11299
11426
  title: String,
11427
+ ...makeComponentProps(),
11300
11428
  ...makeDensityProps()
11301
11429
  },
11302
11430
  setup(props, _ref) {
@@ -11311,7 +11439,8 @@
11311
11439
  const hasTitle = !!(props.title || slots.title);
11312
11440
  const hasSubtitle = !!(props.subtitle || slots.subtitle);
11313
11441
  return vue.createVNode("div", {
11314
- "class": "v-card-item"
11442
+ "class": ['v-card-item', props.class],
11443
+ "style": props.style
11315
11444
  }, [hasPrepend && vue.createVNode("div", {
11316
11445
  "key": "prepend",
11317
11446
  "class": "v-card-item__prepend"
@@ -11393,8 +11522,8 @@
11393
11522
  subtitle: String,
11394
11523
  text: String,
11395
11524
  title: String,
11396
- ...makeThemeProps(),
11397
11525
  ...makeBorderProps(),
11526
+ ...makeComponentProps(),
11398
11527
  ...makeDensityProps(),
11399
11528
  ...makeDimensionProps(),
11400
11529
  ...makeElevationProps(),
@@ -11404,6 +11533,7 @@
11404
11533
  ...makeRoundedProps(),
11405
11534
  ...makeRouterProps(),
11406
11535
  ...makeTagProps(),
11536
+ ...makeThemeProps(),
11407
11537
  ...makeVariantProps({
11408
11538
  variant: 'elevated'
11409
11539
  })
@@ -11464,8 +11594,8 @@
11464
11594
  'v-card--flat': props.flat,
11465
11595
  'v-card--hover': props.hover && !(props.disabled || props.flat),
11466
11596
  'v-card--link': isClickable.value
11467
- }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
11468
- "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
11597
+ }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
11598
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
11469
11599
  "href": link.href.value,
11470
11600
  "onClick": isClickable.value && link.navigate,
11471
11601
  "tabindex": props.disabled ? -1 : undefined
@@ -11661,6 +11791,7 @@
11661
11791
  mandatory: {
11662
11792
  default: 'force'
11663
11793
  },
11794
+ ...makeComponentProps(),
11664
11795
  ...makeTagProps(),
11665
11796
  ...makeThemeProps()
11666
11797
  }, 'v-window');
@@ -11776,7 +11907,8 @@
11776
11907
  "ref": rootRef,
11777
11908
  "class": ['v-window', {
11778
11909
  'v-window--show-arrows-on-hover': props.showArrows === 'hover'
11779
- }, themeClasses.value]
11910
+ }, themeClasses.value, props.class],
11911
+ "style": props.style
11780
11912
  }, {
11781
11913
  default: () => [vue.createVNode("div", {
11782
11914
  "class": "v-window__container",
@@ -11861,10 +11993,10 @@
11861
11993
  "class": ['v-carousel', {
11862
11994
  'v-carousel--hide-delimiter-background': props.hideDelimiterBackground,
11863
11995
  'v-carousel--vertical-delimiters': props.verticalDelimiters
11864
- }],
11865
- "style": {
11996
+ }, props.class],
11997
+ "style": [{
11866
11998
  height: convertToUnit(props.height)
11867
- },
11999
+ }, props.style],
11868
12000
  "continuous": true,
11869
12001
  "mandatory": "force",
11870
12002
  "showArrows": props.showArrows
@@ -11930,6 +12062,7 @@
11930
12062
  type: [Boolean, String],
11931
12063
  default: undefined
11932
12064
  },
12065
+ ...makeComponentProps(),
11933
12066
  ...makeGroupItemProps(),
11934
12067
  ...makeLazyProps()
11935
12068
  },
@@ -12016,7 +12149,8 @@
12016
12149
  "disabled": !isBooted.value
12017
12150
  }, {
12018
12151
  default: () => [vue.withDirectives(vue.createVNode("div", {
12019
- "class": ['v-window-item', groupItem.selectedClass.value]
12152
+ "class": ['v-window-item', groupItem.selectedClass.value, props.class],
12153
+ "style": props.style
12020
12154
  }, [hasContent.value && slots.default?.()]), [[vue.vShow, groupItem.isSelected.value]])]
12021
12155
  }));
12022
12156
  return {};
@@ -12029,7 +12163,8 @@
12029
12163
  name: 'VCarouselItem',
12030
12164
  inheritAttrs: false,
12031
12165
  props: {
12032
- value: null
12166
+ value: null,
12167
+ ...makeComponentProps()
12033
12168
  },
12034
12169
  setup(props, _ref) {
12035
12170
  let {
@@ -12037,7 +12172,8 @@
12037
12172
  attrs
12038
12173
  } = _ref;
12039
12174
  useRender(() => vue.createVNode(VWindowItem, {
12040
- "class": "v-carousel-item",
12175
+ "class": ['v-carousel-item', props.class],
12176
+ "style": props.style,
12041
12177
  "value": props.value
12042
12178
  }, {
12043
12179
  default: () => [vue.createVNode(VImg, attrs, slots)]
@@ -12050,6 +12186,7 @@
12050
12186
  const makeVSheetProps = propsFactory({
12051
12187
  color: String,
12052
12188
  ...makeBorderProps(),
12189
+ ...makeComponentProps(),
12053
12190
  ...makeDimensionProps(),
12054
12191
  ...makeElevationProps(),
12055
12192
  ...makeLocationProps(),
@@ -12093,8 +12230,8 @@
12093
12230
  roundedClasses
12094
12231
  } = useRounded(props);
12095
12232
  useRender(() => vue.createVNode(props.tag, {
12096
- "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value],
12097
- "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value]
12233
+ "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, props.class],
12234
+ "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value, props.style]
12098
12235
  }, slots));
12099
12236
  return {};
12100
12237
  }
@@ -12120,7 +12257,8 @@
12120
12257
  width: {
12121
12258
  type: [Number, String],
12122
12259
  default: 300
12123
- }
12260
+ },
12261
+ ...makeComponentProps()
12124
12262
  },
12125
12263
  emits: {
12126
12264
  'update:color': color => true,
@@ -12265,7 +12403,8 @@
12265
12403
  vue.onMounted(() => updateCanvas());
12266
12404
  useRender(() => vue.createVNode("div", {
12267
12405
  "ref": resizeRef,
12268
- "class": "v-color-picker-canvas",
12406
+ "class": ['v-color-picker-canvas', props.class],
12407
+ "style": props.style,
12269
12408
  "onClick": handleClick,
12270
12409
  "onMousedown": handleMouseDown,
12271
12410
  "onTouchstart": handleMouseDown
@@ -12498,7 +12637,8 @@
12498
12637
  type: Array,
12499
12638
  default: () => Object.keys(modes),
12500
12639
  validator: v => Array.isArray(v) && v.every(m => Object.keys(modes).includes(m))
12501
- }
12640
+ },
12641
+ ...makeComponentProps()
12502
12642
  },
12503
12643
  emits: {
12504
12644
  'update:color': color => true,
@@ -12538,7 +12678,8 @@
12538
12678
  });
12539
12679
  });
12540
12680
  useRender(() => vue.createVNode("div", {
12541
- "class": "v-color-picker-edit"
12681
+ "class": ['v-color-picker-edit', props.class],
12682
+ "style": props.style
12542
12683
  }, [inputs.value?.map(props => vue.createVNode(VColorPickerInput, props, null)), enabledModes.value.length > 1 && vue.createVNode(VBtn, {
12543
12684
  "icon": "$unfold",
12544
12685
  "size": "x-small",
@@ -12857,7 +12998,8 @@
12857
12998
  ripple: {
12858
12999
  type: Boolean,
12859
13000
  default: true
12860
- }
13001
+ },
13002
+ ...makeComponentProps()
12861
13003
  },
12862
13004
  emits: {
12863
13005
  'update:modelValue': v => true
@@ -12935,11 +13077,11 @@
12935
13077
  "class": ['v-slider-thumb', {
12936
13078
  'v-slider-thumb--focused': props.focused,
12937
13079
  'v-slider-thumb--pressed': props.focused && mousePressed.value
12938
- }],
12939
- "style": {
13080
+ }, props.class],
13081
+ "style": [{
12940
13082
  '--v-slider-thumb-position': positionPercentage,
12941
13083
  '--v-slider-thumb-size': convertToUnit(thumbSize.value)
12942
- },
13084
+ }, props.style],
12943
13085
  "role": "slider",
12944
13086
  "tabindex": disabled.value ? -1 : 0,
12945
13087
  "aria-valuemin": props.min,
@@ -12985,7 +13127,8 @@
12985
13127
  stop: {
12986
13128
  type: Number,
12987
13129
  required: true
12988
- }
13130
+ },
13131
+ ...makeComponentProps()
12989
13132
  },
12990
13133
  emits: {},
12991
13134
  setup(props, _ref) {
@@ -13060,12 +13203,12 @@
13060
13203
  });
13061
13204
  useRender(() => {
13062
13205
  return vue.createVNode("div", {
13063
- "class": ['v-slider-track', roundedClasses.value],
13064
- "style": {
13206
+ "class": ['v-slider-track', roundedClasses.value, props.class],
13207
+ "style": [{
13065
13208
  '--v-slider-track-size': convertToUnit(trackSize.value),
13066
13209
  '--v-slider-tick-size': convertToUnit(tickSize.value),
13067
13210
  direction: !vertical.value ? horizontalDirection.value : undefined
13068
- }
13211
+ }, props.style]
13069
13212
  }, [vue.createVNode("div", {
13070
13213
  "class": ['v-slider-track__background', trackColorClasses.value, {
13071
13214
  'v-slider-track__background--opacity': !!color.value || !trackFillColor.value
@@ -13168,7 +13311,8 @@
13168
13311
  'v-slider--focused': isFocused.value,
13169
13312
  'v-slider--pressed': mousePressed.value,
13170
13313
  'v-slider--disabled': props.disabled
13171
- }]
13314
+ }, props.class],
13315
+ "style": props.style
13172
13316
  }, inputProps, {
13173
13317
  "focused": isFocused.value
13174
13318
  }), {
@@ -13231,7 +13375,8 @@
13231
13375
  type: Object
13232
13376
  },
13233
13377
  disabled: Boolean,
13234
- hideAlpha: Boolean
13378
+ hideAlpha: Boolean,
13379
+ ...makeComponentProps()
13235
13380
  },
13236
13381
  emits: {
13237
13382
  'update:color': color => true
@@ -13243,7 +13388,8 @@
13243
13388
  useRender(() => vue.createVNode("div", {
13244
13389
  "class": ['v-color-picker-preview', {
13245
13390
  'v-color-picker-preview--hide-alpha': props.hideAlpha
13246
- }]
13391
+ }, props.class],
13392
+ "style": props.style
13247
13393
  }, [vue.createVNode("div", {
13248
13394
  "class": "v-color-picker-preview__dot"
13249
13395
  }, [vue.createVNode("div", {
@@ -13624,7 +13770,8 @@
13624
13770
  },
13625
13771
  disabled: Boolean,
13626
13772
  color: Object,
13627
- maxHeight: [Number, String]
13773
+ maxHeight: [Number, String],
13774
+ ...makeComponentProps()
13628
13775
  },
13629
13776
  emits: {
13630
13777
  'update:color': color => true
@@ -13634,10 +13781,10 @@
13634
13781
  emit
13635
13782
  } = _ref;
13636
13783
  useRender(() => vue.createVNode("div", {
13637
- "class": "v-color-picker-swatches",
13638
- "style": {
13784
+ "class": ['v-color-picker-swatches', props.class],
13785
+ "style": [{
13639
13786
  maxHeight: convertToUnit(props.maxHeight)
13640
- }
13787
+ }, props.style]
13641
13788
  }, [vue.createVNode("div", null, [props.swatches.map(swatch => vue.createVNode("div", {
13642
13789
  "class": "v-color-picker-swatches__swatch"
13643
13790
  }, [swatch.map(color => {
@@ -13741,13 +13888,13 @@
13741
13888
  "rounded": props.rounded,
13742
13889
  "elevation": props.elevation,
13743
13890
  "theme": props.theme,
13744
- "class": ['v-color-picker'],
13745
- "style": {
13891
+ "class": ['v-color-picker', props.class],
13892
+ "style": [{
13746
13893
  '--v-color-picker-color-hsv': HSVtoCSS({
13747
13894
  ...(currentColor.value ?? nullColor),
13748
13895
  a: 1
13749
13896
  })
13750
- }
13897
+ }, props.style]
13751
13898
  }, sheetProps, {
13752
13899
  "maxWidth": props.width
13753
13900
  }), {
@@ -14058,7 +14205,8 @@
14058
14205
  'v-combobox--chips': !!props.chips,
14059
14206
  'v-combobox--selecting-index': selectionIndex.value > -1,
14060
14207
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
14061
- }],
14208
+ }, props.class],
14209
+ "style": props.style,
14062
14210
  "appendInnerIcon": props.items.length ? props.menuIcon : undefined,
14063
14211
  "readonly": props.readonly,
14064
14212
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -14215,7 +14363,7 @@
14215
14363
  ![document, overlay.value.contentEl].includes(after) &&
14216
14364
  // It isn't inside the dialog body
14217
14365
  !overlay.value.contentEl.contains(after)) {
14218
- const focusable = [...overlay.value.contentEl.querySelectorAll('button, [href], input:not([type="hidden"]), select, textarea, [tabindex]:not([tabindex="-1"])')].filter(el => !el.hasAttribute('disabled') && !el.matches('[tabindex="-1"]'));
14366
+ const focusable = focusableChildren(overlay.value.contentEl);
14219
14367
  if (!focusable.length) return;
14220
14368
  const firstElement = focusable[0];
14221
14369
  const lastElement = focusable[focusable.length - 1];
@@ -14256,7 +14404,8 @@
14256
14404
  "class": ['v-dialog', {
14257
14405
  'v-dialog--fullscreen': props.fullscreen,
14258
14406
  'v-dialog--scrollable': props.scrollable
14259
- }]
14407
+ }, props.class],
14408
+ "style": props.style
14260
14409
  }, overlayProps, {
14261
14410
  "modelValue": isActive.value,
14262
14411
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -14295,6 +14444,7 @@
14295
14444
  validator: v => allowedVariants.includes(v)
14296
14445
  },
14297
14446
  readonly: Boolean,
14447
+ ...makeComponentProps(),
14298
14448
  ...makeGroupProps(),
14299
14449
  ...makeTagProps(),
14300
14450
  ...makeThemeProps()
@@ -14320,7 +14470,8 @@
14320
14470
  }
14321
14471
  });
14322
14472
  useRender(() => vue.createVNode(props.tag, {
14323
- "class": ['v-expansion-panels', themeClasses.value, variantClass.value]
14473
+ "class": ['v-expansion-panels', themeClasses.value, variantClass.value, props.class],
14474
+ "style": props.style
14324
14475
  }, slots));
14325
14476
  return {};
14326
14477
  }
@@ -14349,6 +14500,7 @@
14349
14500
  Ripple
14350
14501
  },
14351
14502
  props: {
14503
+ ...makeComponentProps(),
14352
14504
  ...makeVExpansionPanelTitleProps()
14353
14505
  },
14354
14506
  setup(props, _ref) {
@@ -14371,8 +14523,8 @@
14371
14523
  useRender(() => vue.withDirectives(vue.createVNode("button", {
14372
14524
  "class": ['v-expansion-panel-title', {
14373
14525
  'v-expansion-panel-title--active': expansionPanel.isSelected.value
14374
- }, backgroundColorClasses.value],
14375
- "style": backgroundColorStyles.value,
14526
+ }, backgroundColorClasses.value, props.class],
14527
+ "style": [backgroundColorStyles.value, props.style],
14376
14528
  "type": "button",
14377
14529
  "tabindex": expansionPanel.disabled.value ? -1 : undefined,
14378
14530
  "disabled": expansionPanel.disabled.value,
@@ -14392,6 +14544,7 @@
14392
14544
  const VExpansionPanelText = genericComponent()({
14393
14545
  name: 'VExpansionPanelText',
14394
14546
  props: {
14547
+ ...makeComponentProps(),
14395
14548
  ...makeLazyProps()
14396
14549
  },
14397
14550
  setup(props, _ref) {
@@ -14408,7 +14561,8 @@
14408
14561
  "onAfterLeave": onAfterLeave
14409
14562
  }, {
14410
14563
  default: () => [vue.withDirectives(vue.createVNode("div", {
14411
- "class": "v-expansion-panel-text"
14564
+ "class": ['v-expansion-panel-text', props.class],
14565
+ "style": props.style
14412
14566
  }, [slots.default && hasContent.value && vue.createVNode("div", {
14413
14567
  "class": "v-expansion-panel-text__wrapper"
14414
14568
  }, [slots.default?.()])]), [[vue.vShow, expansionPanel.isSelected.value]])]
@@ -14423,6 +14577,7 @@
14423
14577
  title: String,
14424
14578
  text: String,
14425
14579
  bgColor: String,
14580
+ ...makeComponentProps(),
14426
14581
  ...makeElevationProps(),
14427
14582
  ...makeGroupItemProps(),
14428
14583
  ...makeLazyProps(),
@@ -14471,8 +14626,8 @@
14471
14626
  'v-expansion-panel--before-active': isBeforeSelected.value,
14472
14627
  'v-expansion-panel--after-active': isAfterSelected.value,
14473
14628
  'v-expansion-panel--disabled': isDisabled.value
14474
- }, roundedClasses.value, backgroundColorClasses.value],
14475
- "style": backgroundColorStyles.value,
14629
+ }, roundedClasses.value, backgroundColorClasses.value, props.class],
14630
+ "style": [backgroundColorStyles.value, props.style],
14476
14631
  "aria-expanded": groupItem.isSelected.value
14477
14632
  }, {
14478
14633
  default: () => [vue.createVNode("div", {
@@ -14622,7 +14777,8 @@
14622
14777
  "ref": vInputRef,
14623
14778
  "modelValue": model.value,
14624
14779
  "onUpdate:modelValue": $event => model.value = $event,
14625
- "class": "v-file-input",
14780
+ "class": ['v-file-input', props.class],
14781
+ "style": props.style,
14626
14782
  "onClick:prepend": onClickPrepend
14627
14783
  }, rootAttrs, inputProps, {
14628
14784
  "focused": isFocused.value
@@ -14714,6 +14870,7 @@
14714
14870
  default: 'auto'
14715
14871
  },
14716
14872
  ...makeBorderProps(),
14873
+ ...makeComponentProps(),
14717
14874
  ...makeElevationProps(),
14718
14875
  ...makeLayoutItemProps(),
14719
14876
  ...makeRoundedProps(),
@@ -14763,8 +14920,8 @@
14763
14920
  });
14764
14921
  useRender(() => vue.createVNode(props.tag, {
14765
14922
  "ref": resizeRef,
14766
- "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
14767
- "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined]
14923
+ "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
14924
+ "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined, props.style]
14768
14925
  }, slots));
14769
14926
  return {};
14770
14927
  }
@@ -14775,6 +14932,7 @@
14775
14932
  const VForm = genericComponent()({
14776
14933
  name: 'VForm',
14777
14934
  props: {
14935
+ ...makeComponentProps(),
14778
14936
  ...makeFormProps()
14779
14937
  },
14780
14938
  emits: {
@@ -14813,7 +14971,8 @@
14813
14971
  }
14814
14972
  useRender(() => vue.createVNode("form", {
14815
14973
  "ref": formRef,
14816
- "class": "v-form",
14974
+ "class": ['v-form', props.class],
14975
+ "style": props.style,
14817
14976
  "novalidate": true,
14818
14977
  "onReset": onReset,
14819
14978
  "onSubmit": onSubmit
@@ -14829,6 +14988,7 @@
14829
14988
  type: Boolean,
14830
14989
  default: false
14831
14990
  },
14991
+ ...makeComponentProps(),
14832
14992
  ...makeTagProps()
14833
14993
  },
14834
14994
  setup(props, _ref) {
@@ -14838,7 +14998,8 @@
14838
14998
  useRender(() => vue.createVNode(props.tag, {
14839
14999
  "class": ['v-container', {
14840
15000
  'v-container--fluid': props.fluid
14841
- }]
15001
+ }, props.class],
15002
+ "style": props.style
14842
15003
  }, slots));
14843
15004
  return {};
14844
15005
  }
@@ -14929,6 +15090,7 @@
14929
15090
  default: null,
14930
15091
  validator: str => ALIGN_SELF_VALUES.includes(str)
14931
15092
  },
15093
+ ...makeComponentProps(),
14932
15094
  ...makeTagProps()
14933
15095
  },
14934
15096
  setup(props, _ref) {
@@ -14959,7 +15121,8 @@
14959
15121
  return classList;
14960
15122
  });
14961
15123
  return () => vue.h(props.tag, {
14962
- class: classes.value
15124
+ class: [classes.value, props.class],
15125
+ style: props.style
14963
15126
  }, slots.default?.());
14964
15127
  }
14965
15128
  });
@@ -15045,6 +15208,7 @@
15045
15208
  validator: alignContentValidator
15046
15209
  },
15047
15210
  ...alignContentProps,
15211
+ ...makeComponentProps(),
15048
15212
  ...makeTagProps()
15049
15213
  },
15050
15214
  setup(props, _ref) {
@@ -15073,7 +15237,8 @@
15073
15237
  return classList;
15074
15238
  });
15075
15239
  return () => vue.h(props.tag, {
15076
- class: ['v-row', classes.value]
15240
+ class: ['v-row', classes.value, props.class],
15241
+ style: props.style
15077
15242
  }, slots.default?.());
15078
15243
  }
15079
15244
  });
@@ -15117,6 +15282,7 @@
15117
15282
  const VItemGroup = genericComponent()({
15118
15283
  name: 'VItemGroup',
15119
15284
  props: {
15285
+ ...makeComponentProps(),
15120
15286
  ...makeGroupProps({
15121
15287
  selectedClass: 'v-item--selected'
15122
15288
  }),
@@ -15141,7 +15307,8 @@
15141
15307
  selected
15142
15308
  } = useGroup(props, VItemGroupSymbol);
15143
15309
  return () => vue.createVNode(props.tag, {
15144
- "class": ['v-item-group', themeClasses.value]
15310
+ "class": ['v-item-group', themeClasses.value, props.class],
15311
+ "style": props.style
15145
15312
  }, {
15146
15313
  default: () => [slots.default?.({
15147
15314
  isSelected,
@@ -15191,7 +15358,10 @@
15191
15358
 
15192
15359
  const VLayout = genericComponent()({
15193
15360
  name: 'VLayout',
15194
- props: makeLayoutProps(),
15361
+ props: {
15362
+ ...makeComponentProps(),
15363
+ ...makeLayoutProps()
15364
+ },
15195
15365
  setup(props, _ref) {
15196
15366
  let {
15197
15367
  slots
@@ -15205,8 +15375,8 @@
15205
15375
  } = createLayout(props);
15206
15376
  useRender(() => vue.createVNode("div", {
15207
15377
  "ref": layoutRef,
15208
- "class": layoutClasses.value,
15209
- "style": layoutStyles.value
15378
+ "class": [layoutClasses.value, props.class],
15379
+ "style": [layoutStyles.value, props.style]
15210
15380
  }, [slots.default?.()]));
15211
15381
  return {
15212
15382
  getLayoutItem,
@@ -15229,6 +15399,7 @@
15229
15399
  default: 300
15230
15400
  },
15231
15401
  modelValue: Boolean,
15402
+ ...makeComponentProps(),
15232
15403
  ...makeLayoutItemProps()
15233
15404
  },
15234
15405
  setup(props, _ref) {
@@ -15247,8 +15418,8 @@
15247
15418
  absolute: vue.toRef(props, 'absolute')
15248
15419
  });
15249
15420
  return () => vue.createVNode("div", {
15250
- "class": ['v-layout-item'],
15251
- "style": layoutItemStyles.value
15421
+ "class": ['v-layout-item', props.class],
15422
+ "style": [layoutItemStyles.value, props.style]
15252
15423
  }, [slots.default?.()]);
15253
15424
  }
15254
15425
  });
@@ -15272,6 +15443,7 @@
15272
15443
  threshold: undefined
15273
15444
  })
15274
15445
  },
15446
+ ...makeComponentProps(),
15275
15447
  ...makeDimensionProps(),
15276
15448
  ...makeTagProps(),
15277
15449
  ...makeTransitionProps({
@@ -15294,8 +15466,8 @@
15294
15466
  isActive.value = isIntersecting;
15295
15467
  }
15296
15468
  useRender(() => vue.withDirectives(vue.createVNode(props.tag, {
15297
- "class": "v-lazy",
15298
- "style": dimensionStyles.value
15469
+ "class": ['v-lazy', props.class],
15470
+ "style": [dimensionStyles.value, props.style]
15299
15471
  }, {
15300
15472
  default: () => [isActive.value && vue.createVNode(MaybeTransition, {
15301
15473
  "transition": props.transition,
@@ -15320,7 +15492,8 @@
15320
15492
  rtl: {
15321
15493
  type: Boolean,
15322
15494
  default: undefined
15323
- }
15495
+ },
15496
+ ...makeComponentProps()
15324
15497
  },
15325
15498
  setup(props, _ref) {
15326
15499
  let {
@@ -15330,7 +15503,8 @@
15330
15503
  rtlClasses
15331
15504
  } = provideLocale(props);
15332
15505
  useRender(() => vue.createVNode("div", {
15333
- "class": ['v-locale-provider', rtlClasses.value]
15506
+ "class": ['v-locale-provider', rtlClasses.value, props.class],
15507
+ "style": props.style
15334
15508
  }, [slots.default?.()]));
15335
15509
  return {};
15336
15510
  }
@@ -15340,6 +15514,7 @@
15340
15514
  name: 'VMain',
15341
15515
  props: {
15342
15516
  scrollable: Boolean,
15517
+ ...makeComponentProps(),
15343
15518
  ...makeTagProps({
15344
15519
  tag: 'main'
15345
15520
  })
@@ -15357,8 +15532,8 @@
15357
15532
  useRender(() => vue.createVNode(props.tag, {
15358
15533
  "class": ['v-main', {
15359
15534
  'v-main--scrollable': props.scrollable
15360
- }],
15361
- "style": [mainStyles.value, ssrBootStyles.value]
15535
+ }, props.class],
15536
+ "style": [mainStyles.value, ssrBootStyles.value, props.style]
15362
15537
  }, {
15363
15538
  default: () => [props.scrollable ? vue.createVNode("div", {
15364
15539
  "class": "v-main__scroller"
@@ -15368,593 +15543,167 @@
15368
15543
  }
15369
15544
  });
15370
15545
 
15371
- // Utilities
15372
-
15373
- // Types
15374
-
15375
- function getWeekArray(date) {
15376
- let currentWeek = [];
15377
- const weeks = [];
15378
- const firstDayOfMonth = startOfMonth(date);
15379
- const lastDayOfMonth = endOfMonth(date);
15380
- for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
15381
- currentWeek.push(null);
15546
+ function useSticky(_ref) {
15547
+ let {
15548
+ rootEl,
15549
+ isSticky,
15550
+ layoutItemStyles
15551
+ } = _ref;
15552
+ const isStuck = vue.ref(false);
15553
+ const stuckPosition = vue.ref(0);
15554
+ const stickyStyles = vue.computed(() => {
15555
+ const side = typeof isStuck.value === 'boolean' ? 'top' : isStuck.value;
15556
+ return [isSticky.value ? {
15557
+ top: 'auto',
15558
+ bottom: 'auto',
15559
+ height: undefined
15560
+ } : undefined, isStuck.value ? {
15561
+ [side]: convertToUnit(stuckPosition.value)
15562
+ } : {
15563
+ top: layoutItemStyles.value.top
15564
+ }];
15565
+ });
15566
+ vue.onMounted(() => {
15567
+ vue.watch(isSticky, val => {
15568
+ if (val) {
15569
+ window.addEventListener('scroll', onScroll, {
15570
+ passive: true
15571
+ });
15572
+ } else {
15573
+ window.removeEventListener('scroll', onScroll);
15574
+ }
15575
+ }, {
15576
+ immediate: true
15577
+ });
15578
+ });
15579
+ vue.onBeforeUnmount(() => {
15580
+ document.removeEventListener('scroll', onScroll);
15581
+ });
15582
+ let lastScrollTop = 0;
15583
+ function onScroll() {
15584
+ const direction = lastScrollTop > window.scrollY ? 'up' : 'down';
15585
+ const rect = rootEl.value.getBoundingClientRect();
15586
+ const layoutTop = parseFloat(layoutItemStyles.value.top ?? 0);
15587
+ const top = window.scrollY - Math.max(0, stuckPosition.value - layoutTop);
15588
+ const bottom = rect.height + Math.max(stuckPosition.value, layoutTop) - window.scrollY - window.innerHeight;
15589
+ if (rect.height < window.innerHeight - layoutTop) {
15590
+ isStuck.value = 'top';
15591
+ stuckPosition.value = layoutTop;
15592
+ } else if (direction === 'up' && isStuck.value === 'bottom' || direction === 'down' && isStuck.value === 'top') {
15593
+ stuckPosition.value = window.scrollY + rect.top;
15594
+ isStuck.value = true;
15595
+ } else if (direction === 'down' && bottom <= 0) {
15596
+ stuckPosition.value = 0;
15597
+ isStuck.value = 'bottom';
15598
+ } else if (direction === 'up' && top <= 0) {
15599
+ stuckPosition.value = rect.top + top;
15600
+ isStuck.value = 'top';
15601
+ }
15602
+ lastScrollTop = window.scrollY;
15382
15603
  }
15383
- for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
15384
- const day = new Date(date.getFullYear(), date.getMonth(), i);
15604
+ return {
15605
+ isStuck,
15606
+ stickyStyles
15607
+ };
15608
+ }
15385
15609
 
15386
- // Add the day to the current week
15387
- currentWeek.push(day);
15610
+ const HORIZON = 100; // ms
15611
+ const HISTORY = 20; // number of samples to keep
15388
15612
 
15389
- // If the current week has 7 days, add it to the weeks array and start a new week
15390
- if (currentWeek.length === 7) {
15391
- weeks.push(currentWeek);
15392
- currentWeek = [];
15613
+ /** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */
15614
+ function kineticEnergyToVelocity(work) {
15615
+ const sqrt2 = 1.41421356237;
15616
+ return (work < 0 ? -1.0 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;
15617
+ }
15618
+
15619
+ /**
15620
+ * Returns pointer velocity in px/s
15621
+ */
15622
+ function calculateImpulseVelocity(samples) {
15623
+ // The input should be in reversed time order (most recent sample at index i=0)
15624
+ if (samples.length < 2) {
15625
+ // if 0 or 1 points, velocity is zero
15626
+ return 0;
15627
+ }
15628
+ // if (samples[1].t > samples[0].t) {
15629
+ // // Algorithm will still work, but not perfectly
15630
+ // consoleWarn('Samples provided to calculateImpulseVelocity in the wrong order')
15631
+ // }
15632
+ if (samples.length === 2) {
15633
+ // if 2 points, basic linear calculation
15634
+ if (samples[1].t === samples[0].t) {
15635
+ // consoleWarn(`Events have identical time stamps t=${samples[0].t}, setting velocity = 0`)
15636
+ return 0;
15393
15637
  }
15638
+ return (samples[1].d - samples[0].d) / (samples[1].t - samples[0].t);
15394
15639
  }
15395
- for (let i = currentWeek.length; i < 7; i++) {
15396
- currentWeek.push(null);
15640
+ // Guaranteed to have at least 3 points here
15641
+ // start with the oldest sample and go forward in time
15642
+ let work = 0;
15643
+ for (let i = samples.length - 1; i > 0; i--) {
15644
+ if (samples[i].t === samples[i - 1].t) {
15645
+ // consoleWarn(`Events have identical time stamps t=${samples[i].t}, skipping sample`)
15646
+ continue;
15647
+ }
15648
+ const vprev = kineticEnergyToVelocity(work); // v[i-1]
15649
+ const vcurr = (samples[i].d - samples[i - 1].d) / (samples[i].t - samples[i - 1].t); // v[i]
15650
+ work += (vcurr - vprev) * Math.abs(vcurr);
15651
+ if (i === samples.length - 1) {
15652
+ work *= 0.5;
15653
+ }
15397
15654
  }
15398
- weeks.push(currentWeek);
15399
- return weeks;
15400
- }
15401
- function startOfMonth(date) {
15402
- return new Date(date.getFullYear(), date.getMonth(), 1);
15403
- }
15404
- function endOfMonth(date) {
15405
- return new Date(date.getFullYear(), date.getMonth() + 1, 0);
15655
+ return kineticEnergyToVelocity(work) * 1000;
15406
15656
  }
15407
- function date(value) {
15408
- if (value == null) return null;
15409
- if (value instanceof Date) return value;
15410
- if (typeof value === 'string') {
15411
- const parsed = Date.parse(value);
15412
- if (!isNaN(parsed)) return new Date(parsed);
15657
+ function useVelocity() {
15658
+ const touches = {};
15659
+ function addMovement(e) {
15660
+ Array.from(e.changedTouches).forEach(touch => {
15661
+ const samples = touches[touch.identifier] ?? (touches[touch.identifier] = new CircularBuffer(HISTORY));
15662
+ samples.push([e.timeStamp, touch]);
15663
+ });
15413
15664
  }
15414
- return null;
15415
- }
15416
- const firstDay = {
15417
- '001': 1,
15418
- AD: 1,
15419
- AE: 6,
15420
- AF: 6,
15421
- AG: 0,
15422
- AI: 1,
15423
- AL: 1,
15424
- AM: 1,
15425
- AN: 1,
15426
- AR: 1,
15427
- AS: 0,
15428
- AT: 1,
15429
- AU: 0,
15430
- AX: 1,
15431
- AZ: 1,
15432
- BA: 1,
15433
- BD: 0,
15434
- BE: 1,
15435
- BG: 1,
15436
- BH: 6,
15437
- BM: 1,
15438
- BN: 1,
15439
- BR: 0,
15440
- BS: 0,
15441
- BT: 0,
15442
- BW: 0,
15443
- BY: 1,
15444
- BZ: 0,
15445
- CA: 0,
15446
- CH: 1,
15447
- CL: 1,
15448
- CM: 1,
15449
- CN: 0,
15450
- CO: 0,
15451
- CR: 1,
15452
- CY: 1,
15453
- CZ: 1,
15454
- DE: 1,
15455
- DJ: 6,
15456
- DK: 1,
15457
- DM: 0,
15458
- DO: 0,
15459
- DZ: 6,
15460
- EC: 1,
15461
- EE: 1,
15462
- EG: 6,
15463
- ES: 1,
15464
- ET: 0,
15465
- FI: 1,
15466
- FJ: 1,
15467
- FO: 1,
15468
- FR: 1,
15469
- GB: 1,
15470
- 'GB-alt-variant': 0,
15471
- GE: 1,
15472
- GF: 1,
15473
- GP: 1,
15474
- GR: 1,
15475
- GT: 0,
15476
- GU: 0,
15477
- HK: 0,
15478
- HN: 0,
15479
- HR: 1,
15480
- HU: 1,
15481
- ID: 0,
15482
- IE: 1,
15483
- IL: 0,
15484
- IN: 0,
15485
- IQ: 6,
15486
- IR: 6,
15487
- IS: 1,
15488
- IT: 1,
15489
- JM: 0,
15490
- JO: 6,
15491
- JP: 0,
15492
- KE: 0,
15493
- KG: 1,
15494
- KH: 0,
15495
- KR: 0,
15496
- KW: 6,
15497
- KZ: 1,
15498
- LA: 0,
15499
- LB: 1,
15500
- LI: 1,
15501
- LK: 1,
15502
- LT: 1,
15503
- LU: 1,
15504
- LV: 1,
15505
- LY: 6,
15506
- MC: 1,
15507
- MD: 1,
15508
- ME: 1,
15509
- MH: 0,
15510
- MK: 1,
15511
- MM: 0,
15512
- MN: 1,
15513
- MO: 0,
15514
- MQ: 1,
15515
- MT: 0,
15516
- MV: 5,
15517
- MX: 0,
15518
- MY: 1,
15519
- MZ: 0,
15520
- NI: 0,
15521
- NL: 1,
15522
- NO: 1,
15523
- NP: 0,
15524
- NZ: 1,
15525
- OM: 6,
15526
- PA: 0,
15527
- PE: 0,
15528
- PH: 0,
15529
- PK: 0,
15530
- PL: 1,
15531
- PR: 0,
15532
- PT: 0,
15533
- PY: 0,
15534
- QA: 6,
15535
- RE: 1,
15536
- RO: 1,
15537
- RS: 1,
15538
- RU: 1,
15539
- SA: 0,
15540
- SD: 6,
15541
- SE: 1,
15542
- SG: 0,
15543
- SI: 1,
15544
- SK: 1,
15545
- SM: 1,
15546
- SV: 0,
15547
- SY: 6,
15548
- TH: 0,
15549
- TJ: 1,
15550
- TM: 1,
15551
- TR: 1,
15552
- TT: 0,
15553
- TW: 0,
15554
- UA: 1,
15555
- UM: 0,
15556
- US: 0,
15557
- UY: 1,
15558
- UZ: 1,
15559
- VA: 1,
15560
- VE: 0,
15561
- VI: 0,
15562
- VN: 1,
15563
- WS: 0,
15564
- XK: 1,
15565
- YE: 0,
15566
- ZA: 0,
15567
- ZW: 0
15568
- };
15569
- const sundayJanuarySecond2000 = new Date(2000, 0, 2);
15570
- function getWeekdays(locale) {
15571
- const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
15572
- return createRange(7).map(i => {
15573
- const weekday = new Date(sundayJanuarySecond2000);
15574
- weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
15575
- return new Intl.DateTimeFormat(locale, {
15576
- weekday: 'long'
15577
- }).format(weekday);
15578
- });
15579
- }
15580
- function format(value, formatString, locale) {
15581
- const date = new Date(value);
15582
- let options = {};
15583
- switch (formatString) {
15584
- case 'fullDateWithWeekday':
15585
- options = {
15586
- weekday: 'long',
15587
- day: 'numeric',
15588
- month: 'long',
15589
- year: 'numeric'
15590
- };
15591
- break;
15592
- case 'normalDateWithWeekday':
15593
- options = {
15594
- weekday: 'short',
15595
- day: 'numeric',
15596
- month: 'short',
15597
- year: 'numeric'
15598
- };
15599
- break;
15600
- case 'keyboardDate':
15601
- options = {};
15602
- break;
15603
- case 'monthAndDate':
15604
- options = {
15605
- month: 'long',
15606
- day: 'numeric'
15607
- };
15608
- break;
15609
- case 'monthAndYear':
15610
- options = {
15611
- month: 'long',
15612
- year: 'numeric'
15613
- };
15614
- break;
15615
- default:
15616
- options = {
15617
- timeZone: 'UTC',
15618
- timeZoneName: 'short'
15619
- };
15620
- }
15621
- return new Intl.DateTimeFormat(locale, options).format(date);
15622
- }
15623
- function addDays(date, amount) {
15624
- const d = new Date(date);
15625
- d.setDate(d.getDate() + amount);
15626
- return d;
15627
- }
15628
- function addMonths(date, amount) {
15629
- const d = new Date(date);
15630
- d.setMonth(d.getMonth() + amount);
15631
- return d;
15632
- }
15633
- function getYear(date) {
15634
- return date.getFullYear();
15635
- }
15636
- function getMonth(date) {
15637
- return date.getMonth();
15638
- }
15639
- function startOfYear(date) {
15640
- return new Date(date.getFullYear(), 0, 1);
15641
- }
15642
- function endOfYear(date) {
15643
- return new Date(date.getFullYear(), 11, 31);
15644
- }
15645
- function getMondayOfFirstWeekOfYear(year) {
15646
- return new Date(year, 0, 1);
15647
- }
15648
-
15649
- // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
15650
- function getWeek(date) {
15651
- let year = date.getFullYear();
15652
- let d1w1 = getMondayOfFirstWeekOfYear(year);
15653
- if (date < d1w1) {
15654
- year = year - 1;
15655
- d1w1 = getMondayOfFirstWeekOfYear(year);
15656
- } else {
15657
- const tv = getMondayOfFirstWeekOfYear(year + 1);
15658
- if (date >= tv) {
15659
- year = year + 1;
15660
- d1w1 = tv;
15661
- }
15662
- }
15663
- const diffTime = Math.abs(date.getTime() - d1w1.getTime());
15664
- const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
15665
- return Math.floor(diffDays / 7) + 1;
15666
- }
15667
- function isWithinRange(date, range) {
15668
- return isAfter(date, range[0]) && isBefore(date, range[1]);
15669
- }
15670
- function isValid(date) {
15671
- const d = new Date(date);
15672
- return d instanceof Date && !isNaN(d.getTime());
15673
- }
15674
- function isAfter(date, comparing) {
15675
- return date.getTime() > comparing.getTime();
15676
- }
15677
- function isBefore(date, comparing) {
15678
- return date.getTime() < comparing.getTime();
15679
- }
15680
- function isEqual(date, comparing) {
15681
- return date.getTime() === comparing.getTime();
15682
- }
15683
- function isSameDay(date, comparing) {
15684
- return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
15685
- }
15686
- function isSameMonth(date, comparing) {
15687
- return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
15688
- }
15689
- function getDiff(date, comparing, unit) {
15690
- const d = new Date(date);
15691
- const c = new Date(comparing);
15692
- if (unit === 'month') {
15693
- return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
15694
- }
15695
- return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
15696
- }
15697
- function setYear(date, year) {
15698
- const d = new Date(date);
15699
- d.setFullYear(year);
15700
- return d;
15701
- }
15702
- class VuetifyDateAdapter {
15703
- constructor() {
15704
- let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
15705
- this.locale = locale;
15706
- }
15707
- date(value) {
15708
- return date(value);
15709
- }
15710
- addDays(date, amount) {
15711
- return addDays(date, amount);
15712
- }
15713
- addMonths(date, amount) {
15714
- return addMonths(date, amount);
15715
- }
15716
- getWeekArray(date) {
15717
- return getWeekArray(date);
15718
- }
15719
- startOfMonth(date) {
15720
- return startOfMonth(date);
15721
- }
15722
- endOfMonth(date) {
15723
- return endOfMonth(date);
15724
- }
15725
- format(date, formatString) {
15726
- return format(date, formatString, this.locale);
15727
- }
15728
- isEqual(date, comparing) {
15729
- return isEqual(date, comparing);
15730
- }
15731
- isValid(date) {
15732
- return isValid(date);
15733
- }
15734
- isWithinRange(date, range) {
15735
- return isWithinRange(date, range);
15736
- }
15737
- isAfter(date, comparing) {
15738
- return isAfter(date, comparing);
15739
- }
15740
- isSameDay(date, comparing) {
15741
- return isSameDay(date, comparing);
15742
- }
15743
- isSameMonth(date, comparing) {
15744
- return isSameMonth(date, comparing);
15745
- }
15746
- setYear(date, year) {
15747
- return setYear(date, year);
15748
- }
15749
- getDiff(date, comparing, unit) {
15750
- return getDiff(date, comparing, unit);
15751
- }
15752
- getWeek(date) {
15753
- return getWeek(date);
15754
- }
15755
- getWeekdays() {
15756
- return getWeekdays(this.locale);
15757
- }
15758
- getYear(date) {
15759
- return getYear(date);
15760
- }
15761
- getMonth(date) {
15762
- return getMonth(date);
15763
- }
15764
- startOfYear(date) {
15765
- return startOfYear(date);
15766
- }
15767
- endOfYear(date) {
15768
- return endOfYear(date);
15769
- }
15770
- }
15771
-
15772
- // Composables
15773
-
15774
- // Types
15775
-
15776
- const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
15777
- function createDate(options) {
15778
- return options ?? {
15779
- adapter: VuetifyDateAdapter
15780
- };
15781
- }
15782
- function useDate(props) {
15783
- const date = vue.inject(DateAdapterSymbol);
15784
- const locale = useLocale();
15785
- if (!date) throw new Error('[Vuetify] Could not find injected date');
15786
-
15787
- // eslint-disable-next-line new-cap
15788
- const instance = new date.adapter(locale.current.value);
15789
- vue.watch(locale.current, val => {
15790
- instance.locale = val;
15791
- }, {
15792
- immediate: true
15793
- });
15794
- return instance;
15795
- }
15796
-
15797
- function useSticky(_ref) {
15798
- let {
15799
- rootEl,
15800
- isSticky,
15801
- layoutItemStyles
15802
- } = _ref;
15803
- const isStuck = vue.ref(false);
15804
- const stuckPosition = vue.ref(0);
15805
- const stickyStyles = vue.computed(() => {
15806
- const side = typeof isStuck.value === 'boolean' ? 'top' : isStuck.value;
15807
- return [isSticky.value ? {
15808
- top: 'auto',
15809
- bottom: 'auto',
15810
- height: undefined
15811
- } : undefined, isStuck.value ? {
15812
- [side]: convertToUnit(stuckPosition.value)
15813
- } : {
15814
- top: layoutItemStyles.value.top
15815
- }];
15816
- });
15817
- vue.onMounted(() => {
15818
- vue.watch(isSticky, val => {
15819
- if (val) {
15820
- window.addEventListener('scroll', onScroll, {
15821
- passive: true
15822
- });
15823
- } else {
15824
- window.removeEventListener('scroll', onScroll);
15825
- }
15826
- }, {
15827
- immediate: true
15828
- });
15829
- });
15830
- vue.onBeforeUnmount(() => {
15831
- document.removeEventListener('scroll', onScroll);
15832
- });
15833
- let lastScrollTop = 0;
15834
- function onScroll() {
15835
- const direction = lastScrollTop > window.scrollY ? 'up' : 'down';
15836
- const rect = rootEl.value.getBoundingClientRect();
15837
- const layoutTop = parseFloat(layoutItemStyles.value.top ?? 0);
15838
- const top = window.scrollY - Math.max(0, stuckPosition.value - layoutTop);
15839
- const bottom = rect.height + Math.max(stuckPosition.value, layoutTop) - window.scrollY - window.innerHeight;
15840
- if (rect.height < window.innerHeight - layoutTop) {
15841
- isStuck.value = 'top';
15842
- stuckPosition.value = layoutTop;
15843
- } else if (direction === 'up' && isStuck.value === 'bottom' || direction === 'down' && isStuck.value === 'top') {
15844
- stuckPosition.value = window.scrollY + rect.top;
15845
- isStuck.value = true;
15846
- } else if (direction === 'down' && bottom <= 0) {
15847
- stuckPosition.value = 0;
15848
- isStuck.value = 'bottom';
15849
- } else if (direction === 'up' && top <= 0) {
15850
- stuckPosition.value = rect.top + top;
15851
- isStuck.value = 'top';
15852
- }
15853
- lastScrollTop = window.scrollY;
15854
- }
15855
- return {
15856
- isStuck,
15857
- stickyStyles
15858
- };
15859
- }
15860
-
15861
- const HORIZON = 100; // ms
15862
- const HISTORY = 20; // number of samples to keep
15863
-
15864
- /** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */
15865
- function kineticEnergyToVelocity(work) {
15866
- const sqrt2 = 1.41421356237;
15867
- return (work < 0 ? -1.0 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;
15868
- }
15869
-
15870
- /**
15871
- * Returns pointer velocity in px/s
15872
- */
15873
- function calculateImpulseVelocity(samples) {
15874
- // The input should be in reversed time order (most recent sample at index i=0)
15875
- if (samples.length < 2) {
15876
- // if 0 or 1 points, velocity is zero
15877
- return 0;
15878
- }
15879
- // if (samples[1].t > samples[0].t) {
15880
- // // Algorithm will still work, but not perfectly
15881
- // consoleWarn('Samples provided to calculateImpulseVelocity in the wrong order')
15882
- // }
15883
- if (samples.length === 2) {
15884
- // if 2 points, basic linear calculation
15885
- if (samples[1].t === samples[0].t) {
15886
- // consoleWarn(`Events have identical time stamps t=${samples[0].t}, setting velocity = 0`)
15887
- return 0;
15888
- }
15889
- return (samples[1].d - samples[0].d) / (samples[1].t - samples[0].t);
15890
- }
15891
- // Guaranteed to have at least 3 points here
15892
- // start with the oldest sample and go forward in time
15893
- let work = 0;
15894
- for (let i = samples.length - 1; i > 0; i--) {
15895
- if (samples[i].t === samples[i - 1].t) {
15896
- // consoleWarn(`Events have identical time stamps t=${samples[i].t}, skipping sample`)
15897
- continue;
15898
- }
15899
- const vprev = kineticEnergyToVelocity(work); // v[i-1]
15900
- const vcurr = (samples[i].d - samples[i - 1].d) / (samples[i].t - samples[i - 1].t); // v[i]
15901
- work += (vcurr - vprev) * Math.abs(vcurr);
15902
- if (i === samples.length - 1) {
15903
- work *= 0.5;
15904
- }
15905
- }
15906
- return kineticEnergyToVelocity(work) * 1000;
15907
- }
15908
- function useVelocity() {
15909
- const touches = {};
15910
- function addMovement(e) {
15911
- Array.from(e.changedTouches).forEach(touch => {
15912
- const samples = touches[touch.identifier] ?? (touches[touch.identifier] = new CircularBuffer(HISTORY));
15913
- samples.push([e.timeStamp, touch]);
15914
- });
15915
- }
15916
- function endTouch(e) {
15917
- Array.from(e.changedTouches).forEach(touch => {
15918
- delete touches[touch.identifier];
15919
- });
15920
- }
15921
- function getVelocity(id) {
15922
- const samples = touches[id]?.values().reverse();
15923
- if (!samples) {
15924
- throw new Error(`No samples for touch id ${id}`);
15925
- }
15926
- const newest = samples[0];
15927
- const x = [];
15928
- const y = [];
15929
- for (const val of samples) {
15930
- if (newest[0] - val[0] > HORIZON) break;
15931
- x.push({
15932
- t: val[0],
15933
- d: val[1].clientX
15934
- });
15935
- y.push({
15936
- t: val[0],
15937
- d: val[1].clientY
15938
- });
15939
- }
15940
- return {
15941
- x: calculateImpulseVelocity(x),
15942
- y: calculateImpulseVelocity(y),
15943
- get direction() {
15944
- const {
15945
- x,
15946
- y
15947
- } = this;
15948
- const [absX, absY] = [Math.abs(x), Math.abs(y)];
15949
- return absX > absY && x >= 0 ? 'right' : absX > absY && x <= 0 ? 'left' : absY > absX && y >= 0 ? 'down' : absY > absX && y <= 0 ? 'up' : oops$1();
15950
- }
15951
- };
15952
- }
15953
- return {
15954
- addMovement,
15955
- endTouch,
15956
- getVelocity
15957
- };
15665
+ function endTouch(e) {
15666
+ Array.from(e.changedTouches).forEach(touch => {
15667
+ delete touches[touch.identifier];
15668
+ });
15669
+ }
15670
+ function getVelocity(id) {
15671
+ const samples = touches[id]?.values().reverse();
15672
+ if (!samples) {
15673
+ throw new Error(`No samples for touch id ${id}`);
15674
+ }
15675
+ const newest = samples[0];
15676
+ const x = [];
15677
+ const y = [];
15678
+ for (const val of samples) {
15679
+ if (newest[0] - val[0] > HORIZON) break;
15680
+ x.push({
15681
+ t: val[0],
15682
+ d: val[1].clientX
15683
+ });
15684
+ y.push({
15685
+ t: val[0],
15686
+ d: val[1].clientY
15687
+ });
15688
+ }
15689
+ return {
15690
+ x: calculateImpulseVelocity(x),
15691
+ y: calculateImpulseVelocity(y),
15692
+ get direction() {
15693
+ const {
15694
+ x,
15695
+ y
15696
+ } = this;
15697
+ const [absX, absY] = [Math.abs(x), Math.abs(y)];
15698
+ return absX > absY && x >= 0 ? 'right' : absX > absY && x <= 0 ? 'left' : absY > absX && y >= 0 ? 'down' : absY > absX && y <= 0 ? 'up' : oops$1();
15699
+ }
15700
+ };
15701
+ }
15702
+ return {
15703
+ addMovement,
15704
+ endTouch,
15705
+ getVelocity
15706
+ };
15958
15707
  }
15959
15708
  function oops$1() {
15960
15709
  throw new Error();
@@ -16130,6 +15879,7 @@
16130
15879
  },
16131
15880
  sticky: Boolean,
16132
15881
  ...makeBorderProps(),
15882
+ ...makeComponentProps(),
16133
15883
  ...makeElevationProps(),
16134
15884
  ...makeLayoutItemProps(),
16135
15885
  ...makeRoundedProps(),
@@ -16281,8 +16031,8 @@
16281
16031
  'v-navigation-drawer--temporary': isTemporary.value,
16282
16032
  'v-navigation-drawer--active': isActive.value,
16283
16033
  'v-navigation-drawer--sticky': isSticky.value
16284
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
16285
- "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value]
16034
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
16035
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
16286
16036
  }, attrs), {
16287
16037
  default: () => [hasImage && vue.createVNode("div", {
16288
16038
  "key": "image",
@@ -16411,6 +16161,7 @@
16411
16161
  },
16412
16162
  showFirstLastPage: Boolean,
16413
16163
  ...makeBorderProps(),
16164
+ ...makeComponentProps(),
16414
16165
  ...makeDensityProps(),
16415
16166
  ...makeElevationProps(),
16416
16167
  ...makeRoundedProps(),
@@ -16607,7 +16358,8 @@
16607
16358
  }
16608
16359
  useRender(() => vue.createVNode(props.tag, {
16609
16360
  "ref": resizeRef,
16610
- "class": ['v-pagination', themeClasses.value],
16361
+ "class": ['v-pagination', themeClasses.value, props.class],
16362
+ "style": props.style,
16611
16363
  "role": "navigation",
16612
16364
  "aria-label": t(props.ariaLabel),
16613
16365
  "onKeydown": onKeydown,
@@ -16666,7 +16418,8 @@
16666
16418
  scale: {
16667
16419
  type: [Number, String],
16668
16420
  default: 0.5
16669
- }
16421
+ },
16422
+ ...makeComponentProps()
16670
16423
  },
16671
16424
  setup(props, _ref) {
16672
16425
  let {
@@ -16728,7 +16481,8 @@
16728
16481
  useRender(() => vue.createVNode(VImg, {
16729
16482
  "class": ['v-parallax', {
16730
16483
  'v-parallax--active': isIntersecting.value
16731
- }],
16484
+ }, props.class],
16485
+ "style": props.style,
16732
16486
  "ref": root,
16733
16487
  "cover": true,
16734
16488
  "onLoadstart": onScroll,
@@ -16753,7 +16507,8 @@
16753
16507
  slots
16754
16508
  } = _ref;
16755
16509
  useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
16756
- "class": "v-radio",
16510
+ "class": ['v-radio', props.class],
16511
+ "style": props.style,
16757
16512
  "type": "radio"
16758
16513
  }), slots));
16759
16514
  return {};
@@ -16807,7 +16562,8 @@
16807
16562
  }
16808
16563
  }) : props.label;
16809
16564
  return vue.createVNode(VInput, vue.mergeProps({
16810
- "class": "v-radio-group"
16565
+ "class": ['v-radio-group', props.class],
16566
+ "style": props.style
16811
16567
  }, inputAttrs, inputProps, {
16812
16568
  "modelValue": model.value,
16813
16569
  "onUpdate:modelValue": $event => model.value = $event,
@@ -16945,7 +16701,8 @@
16945
16701
  'v-slider--focused': isFocused.value,
16946
16702
  'v-slider--pressed': mousePressed.value,
16947
16703
  'v-slider--disabled': props.disabled
16948
- }],
16704
+ }, props.class],
16705
+ "style": props.style,
16949
16706
  "ref": inputRef
16950
16707
  }, inputProps, {
16951
16708
  "focused": isFocused.value
@@ -17088,6 +16845,7 @@
17088
16845
  validator: v => ['top', 'bottom'].includes(v)
17089
16846
  },
17090
16847
  ripple: Boolean,
16848
+ ...makeComponentProps(),
17091
16849
  ...makeDensityProps(),
17092
16850
  ...makeSizeProps(),
17093
16851
  ...makeTagProps(),
@@ -17205,7 +16963,8 @@
17205
16963
  "class": ['v-rating', {
17206
16964
  'v-rating--hover': props.hover,
17207
16965
  'v-rating--readonly': props.readonly
17208
- }, themeClasses.value]
16966
+ }, themeClasses.value, props.class],
16967
+ "style": props.style
17209
16968
  }, {
17210
16969
  default: () => [vue.createVNode(VRatingItem, {
17211
16970
  "value": 0,
@@ -17305,6 +17064,7 @@
17305
17064
  type: [Boolean, String],
17306
17065
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
17307
17066
  },
17067
+ ...makeComponentProps(),
17308
17068
  ...makeTagProps(),
17309
17069
  ...makeGroupProps({
17310
17070
  selectedClass: 'v-slide-group-item--active'
@@ -17468,7 +17228,7 @@
17468
17228
  function focus(location) {
17469
17229
  if (!contentRef.value) return;
17470
17230
  if (!location) {
17471
- const focusable = [...contentRef.value.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')].filter(el => !el.hasAttribute('disabled'));
17231
+ const focusable = focusableChildren(contentRef.value);
17472
17232
  focusable[0]?.focus();
17473
17233
  } else if (location === 'next') {
17474
17234
  const el = contentRef.value.querySelector(':focus')?.nextElementSibling;
@@ -17545,7 +17305,8 @@
17545
17305
  'v-slide-group--vertical': !isHorizontal.value,
17546
17306
  'v-slide-group--has-affixes': hasAffixes.value,
17547
17307
  'v-slide-group--is-overflowing': isOverflowing.value
17548
- }],
17308
+ }, props.class],
17309
+ "style": props.style,
17549
17310
  "tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
17550
17311
  "onFocus": onFocus
17551
17312
  }, {
@@ -17695,7 +17456,8 @@
17695
17456
  'v-snackbar--active': isActive.value,
17696
17457
  'v-snackbar--multi-line': props.multiLine && !props.vertical,
17697
17458
  'v-snackbar--vertical': props.vertical
17698
- }, positionClasses.value]
17459
+ }, positionClasses.value, props.class],
17460
+ "style": props.style
17699
17461
  }, overlayProps, {
17700
17462
  "modelValue": isActive.value,
17701
17463
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -17795,7 +17557,8 @@
17795
17557
  'v-switch--inset': props.inset
17796
17558
  }, {
17797
17559
  'v-switch--indeterminate': indeterminate.value
17798
- }, loaderClasses.value]
17560
+ }, loaderClasses.value, props.class],
17561
+ "style": props.style
17799
17562
  }, inputAttrs, inputProps, {
17800
17563
  "id": id.value,
17801
17564
  "focused": isFocused.value
@@ -17864,6 +17627,7 @@
17864
17627
  color: String,
17865
17628
  height: [Number, String],
17866
17629
  window: Boolean,
17630
+ ...makeComponentProps(),
17867
17631
  ...makeElevationProps(),
17868
17632
  ...makeLayoutItemProps(),
17869
17633
  ...makeRoundedProps(),
@@ -17905,8 +17669,8 @@
17905
17669
  useRender(() => vue.createVNode(props.tag, {
17906
17670
  "class": ['v-system-bar', {
17907
17671
  'v-system-bar--window': props.window
17908
- }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value],
17909
- "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value]
17672
+ }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value, props.class],
17673
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, props.style]
17910
17674
  }, slots));
17911
17675
  return {};
17912
17676
  }
@@ -17979,10 +17743,10 @@
17979
17743
  useRender(() => {
17980
17744
  const [btnProps] = VBtn.filterProps(props);
17981
17745
  return vue.createVNode(VBtn, vue.mergeProps({
17982
- "_as": "VTab",
17983
17746
  "symbol": VTabsSymbol,
17984
17747
  "ref": rootEl,
17985
- "class": ['v-tab'],
17748
+ "class": ['v-tab', props.class],
17749
+ "style": props.style,
17986
17750
  "tabindex": isSelected.value ? 0 : -1,
17987
17751
  "role": "tab",
17988
17752
  "aria-selected": String(isSelected.value),
@@ -18077,10 +17841,10 @@
18077
17841
  'v-tabs--fixed-tabs': props.fixedTabs,
18078
17842
  'v-tabs--grow': props.grow,
18079
17843
  'v-tabs--stacked': props.stacked
18080
- }, densityClasses.value, backgroundColorClasses.value],
17844
+ }, densityClasses.value, backgroundColorClasses.value, props.class],
18081
17845
  "style": [{
18082
17846
  '--v-tabs-height': convertToUnit(props.height)
18083
- }, backgroundColorStyles.value],
17847
+ }, backgroundColorStyles.value, props.style],
18084
17848
  "role": "tablist",
18085
17849
  "symbol": VTabsSymbol
18086
17850
  }), {
@@ -18100,6 +17864,7 @@
18100
17864
  fixedFooter: Boolean,
18101
17865
  height: [Number, String],
18102
17866
  hover: Boolean,
17867
+ ...makeComponentProps(),
18103
17868
  ...makeDensityProps(),
18104
17869
  ...makeTagProps(),
18105
17870
  ...makeThemeProps()
@@ -18122,7 +17887,8 @@
18122
17887
  'v-table--has-top': !!slots.top,
18123
17888
  'v-table--has-bottom': !!slots.bottom,
18124
17889
  'v-table--hover': props.hover
18125
- }, themeClasses.value, densityClasses.value]
17890
+ }, themeClasses.value, densityClasses.value, props.class],
17891
+ "style": props.style
18126
17892
  }, {
18127
17893
  default: () => [slots.top?.(), slots.default ? vue.createVNode("div", {
18128
17894
  "class": "v-table__wrapper",
@@ -18287,7 +18053,8 @@
18287
18053
  'v-textarea--auto-grow': props.autoGrow,
18288
18054
  'v-textarea--no-resize': props.noResize || props.autoGrow,
18289
18055
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
18290
- }]
18056
+ }, props.class],
18057
+ "style": props.style
18291
18058
  }, rootAttrs, inputProps, {
18292
18059
  "focused": isFocused.value
18293
18060
  }), {
@@ -18371,6 +18138,7 @@
18371
18138
  name: 'VThemeProvider',
18372
18139
  props: {
18373
18140
  withBackground: Boolean,
18141
+ ...makeComponentProps(),
18374
18142
  ...makeThemeProps(),
18375
18143
  ...makeTagProps()
18376
18144
  },
@@ -18384,7 +18152,8 @@
18384
18152
  return () => {
18385
18153
  if (!props.withBackground) return slots.default?.();
18386
18154
  return vue.createVNode(props.tag, {
18387
- "class": ['v-theme-provider', themeClasses.value]
18155
+ "class": ['v-theme-provider', themeClasses.value, props.class],
18156
+ "style": props.style
18388
18157
  }, {
18389
18158
  default: () => [slots.default?.()]
18390
18159
  });
@@ -18429,6 +18198,7 @@
18429
18198
  type: String,
18430
18199
  validator: v => ['start', 'end', 'both'].includes(v)
18431
18200
  },
18201
+ ...makeComponentProps(),
18432
18202
  ...makeDensityProps(),
18433
18203
  ...makeTagProps(),
18434
18204
  ...makeThemeProps()
@@ -18472,10 +18242,10 @@
18472
18242
  useRender(() => vue.createVNode(props.tag, {
18473
18243
  "class": ['v-timeline', `v-timeline--${props.direction}`, `v-timeline--align-${props.align}`, `v-timeline--justify-${props.justify}`, truncateClasses.value, {
18474
18244
  'v-timeline--inset-line': !!props.lineInset
18475
- }, themeClasses.value, densityClasses.value, sideClasses.value],
18476
- "style": {
18245
+ }, themeClasses.value, densityClasses.value, sideClasses.value, props.class],
18246
+ "style": [{
18477
18247
  '--v-timeline-line-thickness': convertToUnit(props.lineThickness)
18478
- }
18248
+ }, props.style]
18479
18249
  }, slots));
18480
18250
  return {};
18481
18251
  }
@@ -18490,6 +18260,7 @@
18490
18260
  icon: IconValue,
18491
18261
  iconColor: String,
18492
18262
  lineColor: String,
18263
+ ...makeComponentProps(),
18493
18264
  ...makeRoundedProps(),
18494
18265
  ...makeSizeProps(),
18495
18266
  ...makeElevationProps()
@@ -18519,7 +18290,8 @@
18519
18290
  useRender(() => vue.createVNode("div", {
18520
18291
  "class": ['v-timeline-divider', {
18521
18292
  'v-timeline-divider--fill-dot': props.fillDot
18522
- }]
18293
+ }, props.class],
18294
+ "style": props.style
18523
18295
  }, [vue.createVNode("div", {
18524
18296
  "class": ['v-timeline-divider__before', lineColorClasses.value],
18525
18297
  "style": lineColorStyles.value
@@ -18569,11 +18341,12 @@
18569
18341
  icon: IconValue,
18570
18342
  iconColor: String,
18571
18343
  lineInset: [Number, String],
18572
- ...makeRoundedProps(),
18344
+ ...makeComponentProps(),
18345
+ ...makeDimensionProps(),
18573
18346
  ...makeElevationProps(),
18347
+ ...makeRoundedProps(),
18574
18348
  ...makeSizeProps(),
18575
- ...makeTagProps(),
18576
- ...makeDimensionProps()
18349
+ ...makeTagProps()
18577
18350
  },
18578
18351
  setup(props, _ref) {
18579
18352
  let {
@@ -18593,11 +18366,11 @@
18593
18366
  useRender(() => vue.createVNode("div", {
18594
18367
  "class": ['v-timeline-item', {
18595
18368
  'v-timeline-item--fill-dot': props.fillDot
18596
- }],
18597
- "style": {
18369
+ }, props.class],
18370
+ "style": [{
18598
18371
  '--v-timeline-dot-size': convertToUnit(dotSize.value),
18599
18372
  '--v-timeline-line-inset': props.lineInset ? `calc(var(--v-timeline-dot-size) / 2 + ${convertToUnit(props.lineInset)})` : convertToUnit(0)
18600
- }
18373
+ }, props.style]
18601
18374
  }, [vue.createVNode("div", {
18602
18375
  "class": "v-timeline-item__body",
18603
18376
  "style": dimensionStyles.value
@@ -18673,7 +18446,8 @@
18673
18446
  const [overlayProps] = VOverlay.filterProps(props);
18674
18447
  return vue.createVNode(VOverlay, vue.mergeProps({
18675
18448
  "ref": overlay,
18676
- "class": ['v-tooltip'],
18449
+ "class": ['v-tooltip', props.class],
18450
+ "style": props.style,
18677
18451
  "id": id.value
18678
18452
  }, overlayProps, {
18679
18453
  "modelValue": isActive.value,
@@ -18721,7 +18495,8 @@
18721
18495
  const VVirtualScrollItem = genericComponent()({
18722
18496
  name: 'VVirtualScrollItem',
18723
18497
  props: {
18724
- dynamicHeight: Boolean
18498
+ dynamicHeight: Boolean,
18499
+ ...makeComponentProps()
18725
18500
  },
18726
18501
  emits: {
18727
18502
  'update:height': height => true
@@ -18748,7 +18523,8 @@
18748
18523
  vue.onUpdated(updateHeight);
18749
18524
  useRender(() => vue.createVNode("div", {
18750
18525
  "ref": props.dynamicHeight ? resizeRef : undefined,
18751
- "class": "v-virtual-scroll__item"
18526
+ "class": ['v-virtual-scroll__item', props.class],
18527
+ "style": props.style
18752
18528
  }, [slots.default?.()]));
18753
18529
  }
18754
18530
  });
@@ -18765,7 +18541,7 @@
18765
18541
  default: () => []
18766
18542
  },
18767
18543
  itemHeight: [Number, String],
18768
- visibleItems: [Number, String],
18544
+ ...makeComponentProps(),
18769
18545
  ...makeDimensionProps()
18770
18546
  },
18771
18547
  setup(props, _ref) {
@@ -18792,7 +18568,7 @@
18792
18568
  const sizeMap = new Map();
18793
18569
  let sizes = createRange(props.items.length).map(() => itemHeight.value);
18794
18570
  const visibleItems = vue.computed(() => {
18795
- return props.visibleItems ? parseInt(props.visibleItems, 10) : Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
18571
+ return Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
18796
18572
  });
18797
18573
  function handleItemResize(index, height) {
18798
18574
  itemHeight.value = Math.max(itemHeight.value, height);
@@ -18803,20 +18579,13 @@
18803
18579
  return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0);
18804
18580
  }
18805
18581
  function calculateMidPointIndex(scrollTop) {
18806
- let start = 0;
18807
- let end = props.items.length;
18808
- while (start <= end) {
18809
- const middle = start + Math.floor((end - start) / 2);
18810
- const middleOffset = calculateOffset(middle);
18811
- if (middleOffset === scrollTop) {
18812
- return middle;
18813
- } else if (middleOffset < scrollTop) {
18814
- start = middle + 1;
18815
- } else if (middleOffset > scrollTop) {
18816
- end = middle - 1;
18817
- }
18582
+ const end = props.items.length;
18583
+ let middle = 0;
18584
+ let middleOffset = 0;
18585
+ while (middleOffset < scrollTop && middle < end) {
18586
+ middleOffset += sizes[middle++] || itemHeight.value;
18818
18587
  }
18819
- return start;
18588
+ return middle - 1;
18820
18589
  }
18821
18590
  let lastScrollTop = 0;
18822
18591
  function handleScroll() {
@@ -18838,8 +18607,12 @@
18838
18607
  const offset = calculateOffset(index);
18839
18608
  rootEl.value.scrollTop = offset;
18840
18609
  }
18610
+ const items = vue.computed(() => props.items.map((item, index) => ({
18611
+ raw: item,
18612
+ index
18613
+ })));
18841
18614
  const last = vue.computed(() => Math.min(props.items.length, first.value + visibleItems.value));
18842
- const computedItems = vue.computed(() => props.items.slice(first.value, last.value));
18615
+ const computedItems = vue.computed(() => items.value.slice(first.value, last.value));
18843
18616
  const paddingTop = vue.computed(() => calculateOffset(first.value));
18844
18617
  const paddingBottom = vue.computed(() => calculateOffset(props.items.length) - calculateOffset(last.value));
18845
18618
  const {
@@ -18864,23 +18637,23 @@
18864
18637
  });
18865
18638
  useRender(() => vue.createVNode("div", {
18866
18639
  "ref": rootEl,
18867
- "class": "v-virtual-scroll",
18640
+ "class": ['v-virtual-scroll', props.class],
18868
18641
  "onScroll": handleScroll,
18869
- "style": dimensionStyles.value
18642
+ "style": [dimensionStyles.value, props.style]
18870
18643
  }, [vue.createVNode("div", {
18871
18644
  "class": "v-virtual-scroll__container",
18872
18645
  "style": {
18873
18646
  paddingTop: convertToUnit(paddingTop.value),
18874
18647
  paddingBottom: convertToUnit(paddingBottom.value)
18875
18648
  }
18876
- }, [computedItems.value.map((item, index) => vue.createVNode(VVirtualScrollItem, {
18877
- "key": index,
18649
+ }, [computedItems.value.map(item => vue.createVNode(VVirtualScrollItem, {
18650
+ "key": item.index,
18878
18651
  "dynamicHeight": !props.itemHeight,
18879
- "onUpdate:height": height => handleItemResize(index + first.value, height)
18652
+ "onUpdate:height": height => handleItemResize(item.index, height)
18880
18653
  }, {
18881
18654
  default: () => [slots.default?.({
18882
- item,
18883
- index: index + first.value
18655
+ item: item.raw,
18656
+ index: item.index
18884
18657
  })]
18885
18658
  }))])]));
18886
18659
  return {
@@ -19314,6 +19087,17 @@
19314
19087
  backgroundColorClasses,
19315
19088
  backgroundColorStyles
19316
19089
  } = useBackgroundColor(props, 'color');
19090
+ const slotProps = vue.computed(() => ({
19091
+ headers: headers.value,
19092
+ columns: columns.value,
19093
+ toggleSort,
19094
+ sortBy: sortBy.value,
19095
+ someSelected: someSelected.value,
19096
+ allSelected: allSelected.value,
19097
+ selectAll,
19098
+ getSortIcon,
19099
+ getFixedStyles
19100
+ }));
19317
19101
  const VDataTableHeaderCell = _ref2 => {
19318
19102
  let {
19319
19103
  column,
@@ -19341,14 +19125,14 @@
19341
19125
  "noPadding": noPadding
19342
19126
  }, {
19343
19127
  default: () => {
19344
- const slotName = `column.${column.key}`;
19345
- const slotProps = {
19128
+ const columnSlotName = `column.${column.key}`;
19129
+ const columnSlotProps = {
19346
19130
  column,
19347
19131
  selectAll
19348
19132
  };
19349
- if (slots[slotName]) return slots[slotName](slotProps);
19133
+ if (slots[columnSlotName]) return slots[columnSlotName](columnSlotProps);
19350
19134
  if (column.key === 'data-table-select') {
19351
- return slots['column.data-table-select']?.(slotProps) ?? vue.createVNode(VCheckboxBtn, {
19135
+ return slots['column.data-table-select']?.(columnSlotProps) ?? vue.createVNode(VCheckboxBtn, {
19352
19136
  "modelValue": allSelected.value,
19353
19137
  "indeterminate": someSelected.value && !allSelected.value,
19354
19138
  "onUpdate:modelValue": selectAll
@@ -19368,22 +19152,24 @@
19368
19152
  }
19369
19153
  });
19370
19154
  };
19371
- useRender(() => vue.createVNode(vue.Fragment, null, [headers.value.map((row, y) => vue.createVNode("tr", null, [row.map((column, x) => vue.createVNode(VDataTableHeaderCell, {
19372
- "column": column,
19373
- "x": x,
19374
- "y": y
19375
- }, null))])), props.loading && vue.createVNode("tr", {
19376
- "class": "v-data-table__progress"
19377
- }, [vue.createVNode("th", {
19378
- "colspan": columns.value.length
19379
- }, [vue.createVNode(LoaderSlot, {
19380
- "name": "v-data-table-headers",
19381
- "active": true,
19382
- "color": typeof props.loading === 'boolean' ? undefined : props.loading,
19383
- "indeterminate": true
19384
- }, {
19385
- default: slots.loader
19386
- })])])]));
19155
+ useRender(() => {
19156
+ return vue.createVNode(vue.Fragment, null, [slots.headers ? slots.headers(slotProps.value) : headers.value.map((row, y) => vue.createVNode("tr", null, [row.map((column, x) => vue.createVNode(VDataTableHeaderCell, {
19157
+ "column": column,
19158
+ "x": x,
19159
+ "y": y
19160
+ }, null))])), props.loading && vue.createVNode("tr", {
19161
+ "class": "v-data-table__progress"
19162
+ }, [vue.createVNode("th", {
19163
+ "colspan": columns.value.length
19164
+ }, [vue.createVNode(LoaderSlot, {
19165
+ "name": "v-data-table-headers",
19166
+ "active": true,
19167
+ "color": typeof props.loading === 'boolean' ? undefined : props.loading,
19168
+ "indeterminate": true
19169
+ }, {
19170
+ default: slots.loader
19171
+ })])])]);
19172
+ });
19387
19173
  }
19388
19174
  });
19389
19175
 
@@ -19682,9 +19468,7 @@
19682
19468
  'v-data-table__tr--clickable': !!props.onClick
19683
19469
  }],
19684
19470
  "onClick": props.onClick
19685
- }, [!columns.value.length && vue.createVNode(VDataTableColumn, {
19686
- "key": "no-data"
19687
- }, slots), props.item && columns.value.map((column, i) => vue.createVNode(VDataTableColumn, {
19471
+ }, [props.item && columns.value.map((column, i) => vue.createVNode(VDataTableColumn, {
19688
19472
  "align": column.align,
19689
19473
  "fixed": column.fixed,
19690
19474
  "fixedOffset": column.fixedOffset,
@@ -19774,13 +19558,13 @@
19774
19558
  useRender(() => {
19775
19559
  if (props.loading && slots.loading) {
19776
19560
  return vue.createVNode("tr", {
19777
- "class": "v-data-table-rows-no-data",
19561
+ "class": "v-data-table-rows-loading",
19778
19562
  "key": "loading"
19779
19563
  }, [vue.createVNode("td", {
19780
19564
  "colspan": columns.value.length
19781
19565
  }, [slots.loading()])]);
19782
19566
  }
19783
- if (!props.loading && !props.items.length && !props.hideNoData && slots['no-data']) {
19567
+ if (!props.loading && !props.items.length && !props.hideNoData) {
19784
19568
  return vue.createVNode("tr", {
19785
19569
  "class": "v-data-table-rows-no-data",
19786
19570
  "key": "no-data"
@@ -20259,7 +20043,7 @@
20259
20043
  top: slots.top,
20260
20044
  default: slots.default ?? (() => vue.createVNode(vue.Fragment, null, [slots.colgroup?.({
20261
20045
  columns
20262
- }), vue.createVNode("thead", null, [slots.headers ? slots.headers() : vue.createVNode(VDataTableHeaders, {
20046
+ }), vue.createVNode("thead", null, [vue.createVNode(VDataTableHeaders, {
20263
20047
  "sticky": props.fixedHeader,
20264
20048
  "multiSort": props.multiSort
20265
20049
  }, slots)]), slots.thead?.(), vue.createVNode("tbody", null, [slots.body ? slots.body() : vue.createVNode(VDataTableRows, {
@@ -20625,7 +20409,7 @@
20625
20409
  }), vue.createVNode("thead", {
20626
20410
  "class": "v-data-table__thead",
20627
20411
  "role": "rowgroup"
20628
- }, [slots.headers ? slots.headers() : vue.createVNode(VDataTableHeaders, {
20412
+ }, [vue.createVNode(VDataTableHeaders, {
20629
20413
  "sticky": props.fixedHeader,
20630
20414
  "loading": props.loading,
20631
20415
  "color": props.color
@@ -21127,130 +20911,542 @@
21127
20911
 
21128
20912
  // Types
21129
20913
 
21130
- function mounted$2(el, binding) {
21131
- const modifiers = binding.modifiers || {};
21132
- const value = binding.value;
21133
- const {
21134
- once,
21135
- immediate,
21136
- ...modifierKeys
21137
- } = modifiers;
21138
- const defaultValue = !Object.keys(modifierKeys).length;
21139
- const {
21140
- handler,
21141
- options
21142
- } = typeof value === 'object' ? value : {
21143
- handler: value,
21144
- options: {
21145
- attributes: modifierKeys?.attr ?? defaultValue,
21146
- characterData: modifierKeys?.char ?? defaultValue,
21147
- childList: modifierKeys?.child ?? defaultValue,
21148
- subtree: modifierKeys?.sub ?? defaultValue
20914
+ function mounted$2(el, binding) {
20915
+ const modifiers = binding.modifiers || {};
20916
+ const value = binding.value;
20917
+ const {
20918
+ once,
20919
+ immediate,
20920
+ ...modifierKeys
20921
+ } = modifiers;
20922
+ const defaultValue = !Object.keys(modifierKeys).length;
20923
+ const {
20924
+ handler,
20925
+ options
20926
+ } = typeof value === 'object' ? value : {
20927
+ handler: value,
20928
+ options: {
20929
+ attributes: modifierKeys?.attr ?? defaultValue,
20930
+ characterData: modifierKeys?.char ?? defaultValue,
20931
+ childList: modifierKeys?.child ?? defaultValue,
20932
+ subtree: modifierKeys?.sub ?? defaultValue
20933
+ }
20934
+ };
20935
+ const observer = new MutationObserver(function () {
20936
+ let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
20937
+ let observer = arguments.length > 1 ? arguments[1] : undefined;
20938
+ handler?.(mutations, observer);
20939
+ if (once) unmounted$2(el, binding);
20940
+ });
20941
+ if (immediate) handler?.([], observer);
20942
+ el._mutate = Object(el._mutate);
20943
+ el._mutate[binding.instance.$.uid] = {
20944
+ observer
20945
+ };
20946
+ observer.observe(el, options);
20947
+ }
20948
+ function unmounted$2(el, binding) {
20949
+ if (!el._mutate?.[binding.instance.$.uid]) return;
20950
+ el._mutate[binding.instance.$.uid].observer.disconnect();
20951
+ delete el._mutate[binding.instance.$.uid];
20952
+ }
20953
+ const Mutate = {
20954
+ mounted: mounted$2,
20955
+ unmounted: unmounted$2
20956
+ };
20957
+
20958
+ function mounted$1(el, binding) {
20959
+ const handler = binding.value;
20960
+ const options = {
20961
+ passive: !binding.modifiers?.active
20962
+ };
20963
+ window.addEventListener('resize', handler, options);
20964
+ el._onResize = Object(el._onResize);
20965
+ el._onResize[binding.instance.$.uid] = {
20966
+ handler,
20967
+ options
20968
+ };
20969
+ if (!binding.modifiers?.quiet) {
20970
+ handler();
20971
+ }
20972
+ }
20973
+ function unmounted$1(el, binding) {
20974
+ if (!el._onResize?.[binding.instance.$.uid]) return;
20975
+ const {
20976
+ handler,
20977
+ options
20978
+ } = el._onResize[binding.instance.$.uid];
20979
+ window.removeEventListener('resize', handler, options);
20980
+ delete el._onResize[binding.instance.$.uid];
20981
+ }
20982
+ const Resize = {
20983
+ mounted: mounted$1,
20984
+ unmounted: unmounted$1
20985
+ };
20986
+
20987
+ function mounted(el, binding) {
20988
+ const {
20989
+ self = false
20990
+ } = binding.modifiers ?? {};
20991
+ const value = binding.value;
20992
+ const options = typeof value === 'object' && value.options || {
20993
+ passive: true
20994
+ };
20995
+ const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler;
20996
+ const target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
20997
+ if (!target) return;
20998
+ target.addEventListener('scroll', handler, options);
20999
+ el._onScroll = Object(el._onScroll);
21000
+ el._onScroll[binding.instance.$.uid] = {
21001
+ handler,
21002
+ options,
21003
+ // Don't reference self
21004
+ target: self ? undefined : target
21005
+ };
21006
+ }
21007
+ function unmounted(el, binding) {
21008
+ if (!el._onScroll?.[binding.instance.$.uid]) return;
21009
+ const {
21010
+ handler,
21011
+ options,
21012
+ target = el
21013
+ } = el._onScroll[binding.instance.$.uid];
21014
+ target.removeEventListener('scroll', handler, options);
21015
+ delete el._onScroll[binding.instance.$.uid];
21016
+ }
21017
+ function updated(el, binding) {
21018
+ if (binding.value === binding.oldValue) return;
21019
+ unmounted(el, binding);
21020
+ mounted(el, binding);
21021
+ }
21022
+ const Scroll = {
21023
+ mounted,
21024
+ unmounted,
21025
+ updated
21026
+ };
21027
+
21028
+ var directives = /*#__PURE__*/Object.freeze({
21029
+ __proto__: null,
21030
+ ClickOutside: ClickOutside,
21031
+ Intersect: Intersect,
21032
+ Mutate: Mutate,
21033
+ Resize: Resize,
21034
+ Ripple: Ripple,
21035
+ Scroll: Scroll,
21036
+ Touch: Touch
21037
+ });
21038
+
21039
+ // Utilities
21040
+
21041
+ // Types
21042
+
21043
+ function getWeekArray(date) {
21044
+ let currentWeek = [];
21045
+ const weeks = [];
21046
+ const firstDayOfMonth = startOfMonth(date);
21047
+ const lastDayOfMonth = endOfMonth(date);
21048
+ for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
21049
+ currentWeek.push(null);
21050
+ }
21051
+ for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
21052
+ const day = new Date(date.getFullYear(), date.getMonth(), i);
21053
+
21054
+ // Add the day to the current week
21055
+ currentWeek.push(day);
21056
+
21057
+ // If the current week has 7 days, add it to the weeks array and start a new week
21058
+ if (currentWeek.length === 7) {
21059
+ weeks.push(currentWeek);
21060
+ currentWeek = [];
21149
21061
  }
21150
- };
21151
- const observer = new MutationObserver(function () {
21152
- let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
21153
- let observer = arguments.length > 1 ? arguments[1] : undefined;
21154
- handler?.(mutations, observer);
21155
- if (once) unmounted$2(el, binding);
21062
+ }
21063
+ for (let i = currentWeek.length; i < 7; i++) {
21064
+ currentWeek.push(null);
21065
+ }
21066
+ weeks.push(currentWeek);
21067
+ return weeks;
21068
+ }
21069
+ function startOfMonth(date) {
21070
+ return new Date(date.getFullYear(), date.getMonth(), 1);
21071
+ }
21072
+ function endOfMonth(date) {
21073
+ return new Date(date.getFullYear(), date.getMonth() + 1, 0);
21074
+ }
21075
+ function date(value) {
21076
+ if (value == null) return null;
21077
+ if (value instanceof Date) return value;
21078
+ if (typeof value === 'string') {
21079
+ const parsed = Date.parse(value);
21080
+ if (!isNaN(parsed)) return new Date(parsed);
21081
+ }
21082
+ return null;
21083
+ }
21084
+ const firstDay = {
21085
+ '001': 1,
21086
+ AD: 1,
21087
+ AE: 6,
21088
+ AF: 6,
21089
+ AG: 0,
21090
+ AI: 1,
21091
+ AL: 1,
21092
+ AM: 1,
21093
+ AN: 1,
21094
+ AR: 1,
21095
+ AS: 0,
21096
+ AT: 1,
21097
+ AU: 0,
21098
+ AX: 1,
21099
+ AZ: 1,
21100
+ BA: 1,
21101
+ BD: 0,
21102
+ BE: 1,
21103
+ BG: 1,
21104
+ BH: 6,
21105
+ BM: 1,
21106
+ BN: 1,
21107
+ BR: 0,
21108
+ BS: 0,
21109
+ BT: 0,
21110
+ BW: 0,
21111
+ BY: 1,
21112
+ BZ: 0,
21113
+ CA: 0,
21114
+ CH: 1,
21115
+ CL: 1,
21116
+ CM: 1,
21117
+ CN: 0,
21118
+ CO: 0,
21119
+ CR: 1,
21120
+ CY: 1,
21121
+ CZ: 1,
21122
+ DE: 1,
21123
+ DJ: 6,
21124
+ DK: 1,
21125
+ DM: 0,
21126
+ DO: 0,
21127
+ DZ: 6,
21128
+ EC: 1,
21129
+ EE: 1,
21130
+ EG: 6,
21131
+ ES: 1,
21132
+ ET: 0,
21133
+ FI: 1,
21134
+ FJ: 1,
21135
+ FO: 1,
21136
+ FR: 1,
21137
+ GB: 1,
21138
+ 'GB-alt-variant': 0,
21139
+ GE: 1,
21140
+ GF: 1,
21141
+ GP: 1,
21142
+ GR: 1,
21143
+ GT: 0,
21144
+ GU: 0,
21145
+ HK: 0,
21146
+ HN: 0,
21147
+ HR: 1,
21148
+ HU: 1,
21149
+ ID: 0,
21150
+ IE: 1,
21151
+ IL: 0,
21152
+ IN: 0,
21153
+ IQ: 6,
21154
+ IR: 6,
21155
+ IS: 1,
21156
+ IT: 1,
21157
+ JM: 0,
21158
+ JO: 6,
21159
+ JP: 0,
21160
+ KE: 0,
21161
+ KG: 1,
21162
+ KH: 0,
21163
+ KR: 0,
21164
+ KW: 6,
21165
+ KZ: 1,
21166
+ LA: 0,
21167
+ LB: 1,
21168
+ LI: 1,
21169
+ LK: 1,
21170
+ LT: 1,
21171
+ LU: 1,
21172
+ LV: 1,
21173
+ LY: 6,
21174
+ MC: 1,
21175
+ MD: 1,
21176
+ ME: 1,
21177
+ MH: 0,
21178
+ MK: 1,
21179
+ MM: 0,
21180
+ MN: 1,
21181
+ MO: 0,
21182
+ MQ: 1,
21183
+ MT: 0,
21184
+ MV: 5,
21185
+ MX: 0,
21186
+ MY: 1,
21187
+ MZ: 0,
21188
+ NI: 0,
21189
+ NL: 1,
21190
+ NO: 1,
21191
+ NP: 0,
21192
+ NZ: 1,
21193
+ OM: 6,
21194
+ PA: 0,
21195
+ PE: 0,
21196
+ PH: 0,
21197
+ PK: 0,
21198
+ PL: 1,
21199
+ PR: 0,
21200
+ PT: 0,
21201
+ PY: 0,
21202
+ QA: 6,
21203
+ RE: 1,
21204
+ RO: 1,
21205
+ RS: 1,
21206
+ RU: 1,
21207
+ SA: 0,
21208
+ SD: 6,
21209
+ SE: 1,
21210
+ SG: 0,
21211
+ SI: 1,
21212
+ SK: 1,
21213
+ SM: 1,
21214
+ SV: 0,
21215
+ SY: 6,
21216
+ TH: 0,
21217
+ TJ: 1,
21218
+ TM: 1,
21219
+ TR: 1,
21220
+ TT: 0,
21221
+ TW: 0,
21222
+ UA: 1,
21223
+ UM: 0,
21224
+ US: 0,
21225
+ UY: 1,
21226
+ UZ: 1,
21227
+ VA: 1,
21228
+ VE: 0,
21229
+ VI: 0,
21230
+ VN: 1,
21231
+ WS: 0,
21232
+ XK: 1,
21233
+ YE: 0,
21234
+ ZA: 0,
21235
+ ZW: 0
21236
+ };
21237
+ const sundayJanuarySecond2000 = new Date(2000, 0, 2);
21238
+ function getWeekdays(locale) {
21239
+ const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
21240
+ return createRange(7).map(i => {
21241
+ const weekday = new Date(sundayJanuarySecond2000);
21242
+ weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
21243
+ return new Intl.DateTimeFormat(locale, {
21244
+ weekday: 'long'
21245
+ }).format(weekday);
21156
21246
  });
21157
- if (immediate) handler?.([], observer);
21158
- el._mutate = Object(el._mutate);
21159
- el._mutate[binding.instance.$.uid] = {
21160
- observer
21161
- };
21162
- observer.observe(el, options);
21163
21247
  }
21164
- function unmounted$2(el, binding) {
21165
- if (!el._mutate?.[binding.instance.$.uid]) return;
21166
- el._mutate[binding.instance.$.uid].observer.disconnect();
21167
- delete el._mutate[binding.instance.$.uid];
21248
+ function format(value, formatString, locale) {
21249
+ const date = new Date(value);
21250
+ let options = {};
21251
+ switch (formatString) {
21252
+ case 'fullDateWithWeekday':
21253
+ options = {
21254
+ weekday: 'long',
21255
+ day: 'numeric',
21256
+ month: 'long',
21257
+ year: 'numeric'
21258
+ };
21259
+ break;
21260
+ case 'normalDateWithWeekday':
21261
+ options = {
21262
+ weekday: 'short',
21263
+ day: 'numeric',
21264
+ month: 'short',
21265
+ year: 'numeric'
21266
+ };
21267
+ break;
21268
+ case 'keyboardDate':
21269
+ options = {};
21270
+ break;
21271
+ case 'monthAndDate':
21272
+ options = {
21273
+ month: 'long',
21274
+ day: 'numeric'
21275
+ };
21276
+ break;
21277
+ case 'monthAndYear':
21278
+ options = {
21279
+ month: 'long',
21280
+ year: 'numeric'
21281
+ };
21282
+ break;
21283
+ default:
21284
+ options = {
21285
+ timeZone: 'UTC',
21286
+ timeZoneName: 'short'
21287
+ };
21288
+ }
21289
+ return new Intl.DateTimeFormat(locale, options).format(date);
21290
+ }
21291
+ function addDays(date, amount) {
21292
+ const d = new Date(date);
21293
+ d.setDate(d.getDate() + amount);
21294
+ return d;
21295
+ }
21296
+ function addMonths(date, amount) {
21297
+ const d = new Date(date);
21298
+ d.setMonth(d.getMonth() + amount);
21299
+ return d;
21300
+ }
21301
+ function getYear(date) {
21302
+ return date.getFullYear();
21303
+ }
21304
+ function getMonth(date) {
21305
+ return date.getMonth();
21306
+ }
21307
+ function startOfYear(date) {
21308
+ return new Date(date.getFullYear(), 0, 1);
21309
+ }
21310
+ function endOfYear(date) {
21311
+ return new Date(date.getFullYear(), 11, 31);
21312
+ }
21313
+ function getMondayOfFirstWeekOfYear(year) {
21314
+ return new Date(year, 0, 1);
21168
21315
  }
21169
- const Mutate = {
21170
- mounted: mounted$2,
21171
- unmounted: unmounted$2
21172
- };
21173
21316
 
21174
- function mounted$1(el, binding) {
21175
- const handler = binding.value;
21176
- const options = {
21177
- passive: !binding.modifiers?.active
21178
- };
21179
- window.addEventListener('resize', handler, options);
21180
- el._onResize = Object(el._onResize);
21181
- el._onResize[binding.instance.$.uid] = {
21182
- handler,
21183
- options
21184
- };
21185
- if (!binding.modifiers?.quiet) {
21186
- handler();
21317
+ // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
21318
+ function getWeek(date) {
21319
+ let year = date.getFullYear();
21320
+ let d1w1 = getMondayOfFirstWeekOfYear(year);
21321
+ if (date < d1w1) {
21322
+ year = year - 1;
21323
+ d1w1 = getMondayOfFirstWeekOfYear(year);
21324
+ } else {
21325
+ const tv = getMondayOfFirstWeekOfYear(year + 1);
21326
+ if (date >= tv) {
21327
+ year = year + 1;
21328
+ d1w1 = tv;
21329
+ }
21187
21330
  }
21331
+ const diffTime = Math.abs(date.getTime() - d1w1.getTime());
21332
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
21333
+ return Math.floor(diffDays / 7) + 1;
21188
21334
  }
21189
- function unmounted$1(el, binding) {
21190
- if (!el._onResize?.[binding.instance.$.uid]) return;
21191
- const {
21192
- handler,
21193
- options
21194
- } = el._onResize[binding.instance.$.uid];
21195
- window.removeEventListener('resize', handler, options);
21196
- delete el._onResize[binding.instance.$.uid];
21335
+ function isWithinRange(date, range) {
21336
+ return isAfter(date, range[0]) && isBefore(date, range[1]);
21197
21337
  }
21198
- const Resize = {
21199
- mounted: mounted$1,
21200
- unmounted: unmounted$1
21201
- };
21202
-
21203
- function mounted(el, binding) {
21204
- const {
21205
- self = false
21206
- } = binding.modifiers ?? {};
21207
- const value = binding.value;
21208
- const options = typeof value === 'object' && value.options || {
21209
- passive: true
21210
- };
21211
- const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler;
21212
- const target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
21213
- if (!target) return;
21214
- target.addEventListener('scroll', handler, options);
21215
- el._onScroll = Object(el._onScroll);
21216
- el._onScroll[binding.instance.$.uid] = {
21217
- handler,
21218
- options,
21219
- // Don't reference self
21220
- target: self ? undefined : target
21221
- };
21338
+ function isValid(date) {
21339
+ const d = new Date(date);
21340
+ return d instanceof Date && !isNaN(d.getTime());
21222
21341
  }
21223
- function unmounted(el, binding) {
21224
- if (!el._onScroll?.[binding.instance.$.uid]) return;
21225
- const {
21226
- handler,
21227
- options,
21228
- target = el
21229
- } = el._onScroll[binding.instance.$.uid];
21230
- target.removeEventListener('scroll', handler, options);
21231
- delete el._onScroll[binding.instance.$.uid];
21342
+ function isAfter(date, comparing) {
21343
+ return date.getTime() > comparing.getTime();
21232
21344
  }
21233
- function updated(el, binding) {
21234
- if (binding.value === binding.oldValue) return;
21235
- unmounted(el, binding);
21236
- mounted(el, binding);
21345
+ function isBefore(date, comparing) {
21346
+ return date.getTime() < comparing.getTime();
21347
+ }
21348
+ function isEqual(date, comparing) {
21349
+ return date.getTime() === comparing.getTime();
21350
+ }
21351
+ function isSameDay(date, comparing) {
21352
+ return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21353
+ }
21354
+ function isSameMonth(date, comparing) {
21355
+ return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21356
+ }
21357
+ function getDiff(date, comparing, unit) {
21358
+ const d = new Date(date);
21359
+ const c = new Date(comparing);
21360
+ if (unit === 'month') {
21361
+ return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
21362
+ }
21363
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
21364
+ }
21365
+ function setYear(date, year) {
21366
+ const d = new Date(date);
21367
+ d.setFullYear(year);
21368
+ return d;
21369
+ }
21370
+ class VuetifyDateAdapter {
21371
+ constructor() {
21372
+ let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
21373
+ this.locale = locale;
21374
+ }
21375
+ date(value) {
21376
+ return date(value);
21377
+ }
21378
+ addDays(date, amount) {
21379
+ return addDays(date, amount);
21380
+ }
21381
+ addMonths(date, amount) {
21382
+ return addMonths(date, amount);
21383
+ }
21384
+ getWeekArray(date) {
21385
+ return getWeekArray(date);
21386
+ }
21387
+ startOfMonth(date) {
21388
+ return startOfMonth(date);
21389
+ }
21390
+ endOfMonth(date) {
21391
+ return endOfMonth(date);
21392
+ }
21393
+ format(date, formatString) {
21394
+ return format(date, formatString, this.locale);
21395
+ }
21396
+ isEqual(date, comparing) {
21397
+ return isEqual(date, comparing);
21398
+ }
21399
+ isValid(date) {
21400
+ return isValid(date);
21401
+ }
21402
+ isWithinRange(date, range) {
21403
+ return isWithinRange(date, range);
21404
+ }
21405
+ isAfter(date, comparing) {
21406
+ return isAfter(date, comparing);
21407
+ }
21408
+ isSameDay(date, comparing) {
21409
+ return isSameDay(date, comparing);
21410
+ }
21411
+ isSameMonth(date, comparing) {
21412
+ return isSameMonth(date, comparing);
21413
+ }
21414
+ setYear(date, year) {
21415
+ return setYear(date, year);
21416
+ }
21417
+ getDiff(date, comparing, unit) {
21418
+ return getDiff(date, comparing, unit);
21419
+ }
21420
+ getWeek(date) {
21421
+ return getWeek(date);
21422
+ }
21423
+ getWeekdays() {
21424
+ return getWeekdays(this.locale);
21425
+ }
21426
+ getYear(date) {
21427
+ return getYear(date);
21428
+ }
21429
+ getMonth(date) {
21430
+ return getMonth(date);
21431
+ }
21432
+ startOfYear(date) {
21433
+ return startOfYear(date);
21434
+ }
21435
+ endOfYear(date) {
21436
+ return endOfYear(date);
21437
+ }
21237
21438
  }
21238
- const Scroll = {
21239
- mounted,
21240
- unmounted,
21241
- updated
21242
- };
21243
21439
 
21244
- var directives = /*#__PURE__*/Object.freeze({
21245
- __proto__: null,
21246
- ClickOutside: ClickOutside,
21247
- Intersect: Intersect,
21248
- Mutate: Mutate,
21249
- Resize: Resize,
21250
- Ripple: Ripple,
21251
- Scroll: Scroll,
21252
- Touch: Touch
21253
- });
21440
+ // Composables
21441
+
21442
+ // Types
21443
+
21444
+ const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
21445
+ function createDate(options) {
21446
+ return options ?? {
21447
+ adapter: VuetifyDateAdapter
21448
+ };
21449
+ }
21254
21450
 
21255
21451
  // Composables
21256
21452
  function createVuetify$1() {
@@ -21337,7 +21533,7 @@
21337
21533
  date
21338
21534
  };
21339
21535
  }
21340
- const version$1 = "4.0.0-dev-20230426.0";
21536
+ const version$1 = "4.0.0-dev-20230427.0";
21341
21537
  createVuetify$1.version = version$1;
21342
21538
 
21343
21539
  // Vue's inject() can only be used in setup
@@ -21349,7 +21545,7 @@
21349
21545
  }
21350
21546
  }
21351
21547
 
21352
- const version = "4.0.0-dev-20230426.0";
21548
+ const version = "4.0.0-dev-20230427.0";
21353
21549
 
21354
21550
  const createVuetify = function () {
21355
21551
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -21363,7 +21559,7 @@
21363
21559
  exports.components = components;
21364
21560
  exports.createVuetify = createVuetify;
21365
21561
  exports.directives = directives;
21366
- exports.useDate = useDate;
21562
+ exports.useDefaults = useDefaults;
21367
21563
  exports.useDisplay = useDisplay;
21368
21564
  exports.useLayout = useLayout;
21369
21565
  exports.useLocale = useLocale;