@vuetify/nightly 4.0.0-dev-20230422.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 (468) hide show
  1. package/CHANGELOG.md +11 -2
  2. package/dist/_component-variables-labs.sass +1 -0
  3. package/dist/json/attributes.json +274 -198
  4. package/dist/json/importMap-labs.json +4 -0
  5. package/dist/json/importMap.json +60 -60
  6. package/dist/json/tags.json +25 -1
  7. package/dist/json/web-types.json +624 -344
  8. package/dist/vuetify-labs.css +110 -86
  9. package/dist/vuetify-labs.d.ts +5976 -8072
  10. package/dist/vuetify-labs.esm.js +1499 -1093
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +1498 -1092
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.css +21 -22
  15. package/dist/vuetify.d.ts +5999 -7524
  16. package/dist/vuetify.esm.js +1255 -1066
  17. package/dist/vuetify.esm.js.map +1 -1
  18. package/dist/vuetify.js +1254 -1065
  19. package/dist/vuetify.js.map +1 -1
  20. package/dist/vuetify.min.css +2 -2
  21. package/dist/vuetify.min.js +744 -739
  22. package/dist/vuetify.min.js.map +1 -1
  23. package/lib/blueprints/index.d.ts +1 -1
  24. package/lib/blueprints/md1.d.ts +1 -1
  25. package/lib/blueprints/md2.d.ts +1 -1
  26. package/lib/blueprints/md3.d.ts +1 -1
  27. package/lib/components/VAlert/VAlert.mjs +6 -4
  28. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  29. package/lib/components/VAlert/index.d.ts +57 -55
  30. package/lib/components/VApp/VApp.mjs +4 -2
  31. package/lib/components/VApp/VApp.mjs.map +1 -1
  32. package/lib/components/VApp/index.d.ts +22 -13
  33. package/lib/components/VAppBar/VAppBar.mjs +3 -3
  34. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  35. package/lib/components/VAppBar/VAppBarNavIcon.mjs +7 -4
  36. package/lib/components/VAppBar/VAppBarNavIcon.mjs.map +1 -1
  37. package/lib/components/VAppBar/index.d.ts +87 -92
  38. package/lib/components/VAutocomplete/VAutocomplete.mjs +2 -1
  39. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  40. package/lib/components/VAutocomplete/index.d.ts +225 -403
  41. package/lib/components/VAvatar/VAvatar.mjs +4 -2
  42. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  43. package/lib/components/VAvatar/index.d.ts +23 -14
  44. package/lib/components/VBadge/VBadge.mjs +6 -5
  45. package/lib/components/VBadge/VBadge.mjs.map +1 -1
  46. package/lib/components/VBadge/index.d.ts +27 -22
  47. package/lib/components/VBanner/VBanner.mjs +6 -4
  48. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  49. package/lib/components/VBanner/VBannerActions.mjs +5 -2
  50. package/lib/components/VBanner/VBannerActions.mjs.map +1 -1
  51. package/lib/components/VBanner/index.d.ts +92 -66
  52. package/lib/components/VBottomNavigation/VBottomNavigation.mjs +4 -2
  53. package/lib/components/VBottomNavigation/VBottomNavigation.mjs.map +1 -1
  54. package/lib/components/VBottomNavigation/index.d.ts +22 -13
  55. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +35 -18
  56. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  57. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs +6 -3
  58. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs.map +1 -1
  59. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs +4 -2
  60. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs.map +1 -1
  61. package/lib/components/VBreadcrumbs/index.d.ts +134 -93
  62. package/lib/components/VBtn/VBtn.mjs +5 -3
  63. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  64. package/lib/components/VBtn/index.d.ts +33 -36
  65. package/lib/components/VBtnGroup/VBtnGroup.mjs +4 -1
  66. package/lib/components/VBtnGroup/VBtnGroup.mjs.map +1 -1
  67. package/lib/components/VBtnGroup/index.d.ts +22 -13
  68. package/lib/components/VBtnToggle/VBtnToggle.mjs +4 -2
  69. package/lib/components/VBtnToggle/VBtnToggle.mjs.map +1 -1
  70. package/lib/components/VBtnToggle/index.d.ts +30 -21
  71. package/lib/components/VCard/VCard.mjs +5 -3
  72. package/lib/components/VCard/VCard.mjs.map +1 -1
  73. package/lib/components/VCard/VCardActions.mjs +7 -4
  74. package/lib/components/VCard/VCardActions.mjs.map +1 -1
  75. package/lib/components/VCard/VCardItem.mjs +5 -2
  76. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  77. package/lib/components/VCard/index.d.ts +250 -141
  78. package/lib/components/VCarousel/VCarousel.mjs +3 -3
  79. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  80. package/lib/components/VCarousel/VCarouselItem.mjs +6 -3
  81. package/lib/components/VCarousel/VCarouselItem.mjs.map +1 -1
  82. package/lib/components/VCarousel/index.d.ts +78 -141
  83. package/lib/components/VCheckbox/VCheckbox.mjs +3 -2
  84. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  85. package/lib/components/VCheckbox/VCheckboxBtn.mjs +2 -1
  86. package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
  87. package/lib/components/VCheckbox/index.d.ts +69 -103
  88. package/lib/components/VChip/VChip.mjs +7 -8
  89. package/lib/components/VChip/VChip.mjs.map +1 -1
  90. package/lib/components/VChip/index.d.ts +27 -30
  91. package/lib/components/VChipGroup/VChipGroup.mjs +4 -1
  92. package/lib/components/VChipGroup/VChipGroup.mjs.map +1 -1
  93. package/lib/components/VChipGroup/index.d.ts +22 -13
  94. package/lib/components/VCode/index.d.ts +30 -17
  95. package/lib/components/VColorPicker/VColorPicker.mjs +3 -3
  96. package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
  97. package/lib/components/VColorPicker/VColorPickerCanvas.mjs +5 -2
  98. package/lib/components/VColorPicker/VColorPickerCanvas.mjs.map +1 -1
  99. package/lib/components/VColorPicker/VColorPickerEdit.mjs +6 -3
  100. package/lib/components/VColorPicker/VColorPickerEdit.mjs.map +1 -1
  101. package/lib/components/VColorPicker/VColorPickerPreview.mjs +6 -3
  102. package/lib/components/VColorPicker/VColorPickerPreview.mjs.map +1 -1
  103. package/lib/components/VColorPicker/VColorPickerSwatches.mjs +7 -5
  104. package/lib/components/VColorPicker/VColorPickerSwatches.mjs.map +1 -1
  105. package/lib/components/VColorPicker/index.d.ts +34 -1
  106. package/lib/components/VCombobox/VCombobox.mjs +2 -1
  107. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  108. package/lib/components/VCombobox/index.d.ts +225 -403
  109. package/lib/components/VCounter/VCounter.mjs +4 -1
  110. package/lib/components/VCounter/VCounter.mjs.map +1 -1
  111. package/lib/components/VCounter/index.d.ts +22 -145
  112. package/lib/components/VDefaultsProvider/index.d.ts +0 -12
  113. package/lib/components/VDialog/VDialog.mjs +4 -3
  114. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  115. package/lib/components/VDialog/index.d.ts +104 -282
  116. package/lib/components/VDivider/VDivider.mjs +4 -2
  117. package/lib/components/VDivider/VDivider.mjs.map +1 -1
  118. package/lib/components/VDivider/index.d.ts +22 -13
  119. package/lib/components/VExpansionPanel/VExpansionPanel.mjs +4 -2
  120. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  121. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs +4 -1
  122. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs.map +1 -1
  123. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +4 -2
  124. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  125. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +4 -1
  126. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  127. package/lib/components/VExpansionPanel/index.d.ts +109 -81
  128. package/lib/components/VField/VField.css +0 -1
  129. package/lib/components/VField/VField.mjs +9 -6
  130. package/lib/components/VField/VField.mjs.map +1 -1
  131. package/lib/components/VField/VField.sass +0 -1
  132. package/lib/components/VField/VFieldLabel.mjs +6 -3
  133. package/lib/components/VField/VFieldLabel.mjs.map +1 -1
  134. package/lib/components/VField/index.d.ts +119 -70
  135. package/lib/components/VFileInput/VFileInput.mjs +2 -1
  136. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  137. package/lib/components/VFileInput/index.d.ts +99 -150
  138. package/lib/components/VFooter/VFooter.mjs +4 -2
  139. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  140. package/lib/components/VFooter/index.d.ts +22 -13
  141. package/lib/components/VForm/VForm.mjs +5 -2
  142. package/lib/components/VForm/VForm.mjs.map +1 -1
  143. package/lib/components/VForm/index.d.ts +30 -17
  144. package/lib/components/VGrid/VCol.mjs +4 -1
  145. package/lib/components/VGrid/VCol.mjs.map +1 -1
  146. package/lib/components/VGrid/VContainer.mjs +4 -1
  147. package/lib/components/VGrid/VContainer.mjs.map +1 -1
  148. package/lib/components/VGrid/VRow.mjs +4 -1
  149. package/lib/components/VGrid/VRow.mjs.map +1 -1
  150. package/lib/components/VGrid/index.d.ts +104 -60
  151. package/lib/components/VHover/index.d.ts +20 -44
  152. package/lib/components/VIcon/VIcon.mjs +4 -2
  153. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  154. package/lib/components/VIcon/index.d.ts +23 -26
  155. package/lib/components/VImg/VImg.mjs +5 -3
  156. package/lib/components/VImg/VImg.mjs.map +1 -1
  157. package/lib/components/VImg/index.d.ts +26 -29
  158. package/lib/components/VInput/VInput.mjs +4 -1
  159. package/lib/components/VInput/VInput.mjs.map +1 -1
  160. package/lib/components/VInput/index.d.ts +31 -34
  161. package/lib/components/VItemGroup/VItemGroup.mjs +4 -1
  162. package/lib/components/VItemGroup/VItemGroup.mjs.map +1 -1
  163. package/lib/components/VItemGroup/index.d.ts +30 -33
  164. package/lib/components/VKbd/index.d.ts +30 -17
  165. package/lib/components/VLabel/VLabel.mjs +4 -1
  166. package/lib/components/VLabel/VLabel.mjs.map +1 -1
  167. package/lib/components/VLabel/index.d.ts +22 -13
  168. package/lib/components/VLayout/VLayout.mjs +8 -4
  169. package/lib/components/VLayout/VLayout.mjs.map +1 -1
  170. package/lib/components/VLayout/VLayoutItem.mjs +4 -2
  171. package/lib/components/VLayout/VLayoutItem.mjs.map +1 -1
  172. package/lib/components/VLayout/index.d.ts +44 -26
  173. package/lib/components/VLazy/VLazy.mjs +4 -2
  174. package/lib/components/VLazy/VLazy.mjs.map +1 -1
  175. package/lib/components/VLazy/index.d.ts +22 -13
  176. package/lib/components/VList/VList.mjs +7 -24
  177. package/lib/components/VList/VList.mjs.map +1 -1
  178. package/lib/components/VList/VListChildren.mjs.map +1 -1
  179. package/lib/components/VList/VListGroup.mjs +5 -2
  180. package/lib/components/VList/VListGroup.mjs.map +1 -1
  181. package/lib/components/VList/VListItem.mjs +4 -2
  182. package/lib/components/VList/VListItem.mjs.map +1 -1
  183. package/lib/components/VList/VListItemAction.mjs +4 -1
  184. package/lib/components/VList/VListItemAction.mjs.map +1 -1
  185. package/lib/components/VList/VListItemMedia.mjs +4 -1
  186. package/lib/components/VList/VListItemMedia.mjs.map +1 -1
  187. package/lib/components/VList/VListSubheader.mjs +5 -3
  188. package/lib/components/VList/VListSubheader.mjs.map +1 -1
  189. package/lib/components/VList/index.d.ts +932 -826
  190. package/lib/components/VLocaleProvider/VLocaleProvider.mjs +5 -2
  191. package/lib/components/VLocaleProvider/VLocaleProvider.mjs.map +1 -1
  192. package/lib/components/VLocaleProvider/index.d.ts +30 -17
  193. package/lib/components/VMain/VMain.mjs +4 -2
  194. package/lib/components/VMain/VMain.mjs.map +1 -1
  195. package/lib/components/VMain/index.d.ts +30 -17
  196. package/lib/components/VMenu/VMenu.mjs +2 -1
  197. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  198. package/lib/components/VMenu/index.d.ts +104 -282
  199. package/lib/components/VMessages/VMessages.mjs +4 -2
  200. package/lib/components/VMessages/VMessages.mjs.map +1 -1
  201. package/lib/components/VMessages/index.d.ts +22 -145
  202. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +4 -2
  203. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  204. package/lib/components/VNavigationDrawer/index.d.ts +26 -29
  205. package/lib/components/VNoSsr/VNoSsr.mjs.map +1 -1
  206. package/lib/components/VNoSsr/index.d.ts +3 -13
  207. package/lib/components/VOverlay/VOverlay.mjs +5 -3
  208. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  209. package/lib/components/VOverlay/index.d.ts +38 -45
  210. package/lib/components/VPagination/VPagination.mjs +4 -1
  211. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  212. package/lib/components/VPagination/index.d.ts +23 -30
  213. package/lib/components/VParallax/VParallax.mjs +5 -2
  214. package/lib/components/VParallax/VParallax.mjs.map +1 -1
  215. package/lib/components/VParallax/index.d.ts +34 -33
  216. package/lib/components/VProgressCircular/VProgressCircular.mjs +4 -2
  217. package/lib/components/VProgressCircular/VProgressCircular.mjs.map +1 -1
  218. package/lib/components/VProgressCircular/index.d.ts +22 -13
  219. package/lib/components/VProgressLinear/VProgressLinear.mjs +6 -4
  220. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  221. package/lib/components/VProgressLinear/index.d.ts +42 -45
  222. package/lib/components/VRadio/VRadio.mjs +2 -1
  223. package/lib/components/VRadio/VRadio.mjs.map +1 -1
  224. package/lib/components/VRadio/index.d.ts +27 -38
  225. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -1
  226. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  227. package/lib/components/VRadioGroup/index.d.ts +39 -62
  228. package/lib/components/VRangeSlider/VRangeSlider.mjs +2 -1
  229. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  230. package/lib/components/VRangeSlider/index.d.ts +27 -38
  231. package/lib/components/VRating/VRating.mjs +4 -1
  232. package/lib/components/VRating/VRating.mjs.map +1 -1
  233. package/lib/components/VRating/index.d.ts +23 -18
  234. package/lib/components/VResponsive/VResponsive.mjs +4 -2
  235. package/lib/components/VResponsive/VResponsive.mjs.map +1 -1
  236. package/lib/components/VResponsive/index.d.ts +43 -31
  237. package/lib/components/VSelect/VSelect.mjs +2 -1
  238. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  239. package/lib/components/VSelect/index.d.ts +194 -552
  240. package/lib/components/VSelectionControl/VSelectionControl.mjs +6 -2
  241. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  242. package/lib/components/VSelectionControl/index.d.ts +76 -46
  243. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +4 -1
  244. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  245. package/lib/components/VSelectionControlGroup/index.d.ts +23 -14
  246. package/lib/components/VSheet/VSheet.mjs +4 -2
  247. package/lib/components/VSheet/VSheet.mjs.map +1 -1
  248. package/lib/components/VSheet/index.d.ts +22 -13
  249. package/lib/components/VSlideGroup/VSlideGroup.mjs +6 -3
  250. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  251. package/lib/components/VSlideGroup/index.d.ts +59 -90
  252. package/lib/components/VSlider/VSlider.mjs +2 -1
  253. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  254. package/lib/components/VSlider/VSliderThumb.mjs +6 -4
  255. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  256. package/lib/components/VSlider/VSliderTrack.mjs +6 -4
  257. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  258. package/lib/components/VSlider/index.d.ts +27 -38
  259. package/lib/components/VSnackbar/VSnackbar.mjs +2 -1
  260. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  261. package/lib/components/VSnackbar/index.d.ts +92 -142
  262. package/lib/components/VSwitch/VSwitch.mjs +2 -1
  263. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  264. package/lib/components/VSwitch/index.d.ts +39 -66
  265. package/lib/components/VSystemBar/VSystemBar.mjs +4 -2
  266. package/lib/components/VSystemBar/VSystemBar.mjs.map +1 -1
  267. package/lib/components/VSystemBar/index.d.ts +22 -13
  268. package/lib/components/VTable/VTable.mjs +4 -1
  269. package/lib/components/VTable/VTable.mjs.map +1 -1
  270. package/lib/components/VTable/index.d.ts +26 -29
  271. package/lib/components/VTabs/VTab.mjs +2 -2
  272. package/lib/components/VTabs/VTab.mjs.map +1 -1
  273. package/lib/components/VTabs/VTabs.mjs +2 -2
  274. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  275. package/lib/components/VTabs/index.d.ts +45 -27
  276. package/lib/components/VTextField/VTextField.mjs +2 -1
  277. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  278. package/lib/components/VTextField/index.d.ts +208 -269
  279. package/lib/components/VTextarea/VTextarea.mjs +2 -1
  280. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  281. package/lib/components/VTextarea/index.d.ts +79 -122
  282. package/lib/components/VThemeProvider/VThemeProvider.mjs +6 -3
  283. package/lib/components/VThemeProvider/VThemeProvider.mjs.map +1 -1
  284. package/lib/components/VThemeProvider/index.d.ts +22 -13
  285. package/lib/components/VTimeline/VTimeline.mjs +5 -3
  286. package/lib/components/VTimeline/VTimeline.mjs.map +1 -1
  287. package/lib/components/VTimeline/VTimelineDivider.mjs +4 -1
  288. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  289. package/lib/components/VTimeline/VTimelineItem.mjs +8 -6
  290. package/lib/components/VTimeline/VTimelineItem.mjs.map +1 -1
  291. package/lib/components/VTimeline/index.d.ts +67 -57
  292. package/lib/components/VToolbar/VToolbar.mjs +4 -2
  293. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  294. package/lib/components/VToolbar/VToolbarItems.mjs +9 -4
  295. package/lib/components/VToolbar/VToolbarItems.mjs.map +1 -1
  296. package/lib/components/VToolbar/VToolbarTitle.mjs +5 -2
  297. package/lib/components/VToolbar/VToolbarTitle.mjs.map +1 -1
  298. package/lib/components/VToolbar/index.d.ts +74 -71
  299. package/lib/components/VTooltip/VTooltip.mjs +2 -1
  300. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  301. package/lib/components/VTooltip/index.d.ts +104 -150
  302. package/lib/components/VValidation/index.d.ts +0 -12
  303. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +21 -23
  304. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  305. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs +5 -2
  306. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -1
  307. package/lib/components/VVirtualScroll/index.d.ts +70 -30
  308. package/lib/components/VWindow/VWindow.mjs +4 -1
  309. package/lib/components/VWindow/VWindow.mjs.map +1 -1
  310. package/lib/components/VWindow/VWindowItem.mjs +4 -1
  311. package/lib/components/VWindow/VWindowItem.mjs.map +1 -1
  312. package/lib/components/VWindow/index.d.ts +61 -79
  313. package/lib/components/index.d.ts +5229 -6754
  314. package/lib/components/transitions/index.d.ts +0 -192
  315. package/lib/composables/component.mjs +11 -0
  316. package/lib/composables/component.mjs.map +1 -0
  317. package/lib/composables/defaults.mjs +51 -5
  318. package/lib/composables/defaults.mjs.map +1 -1
  319. package/lib/composables/icons.mjs +15 -4
  320. package/lib/composables/icons.mjs.map +1 -1
  321. package/lib/composables/index.mjs +1 -1
  322. package/lib/composables/index.mjs.map +1 -1
  323. package/lib/composables/intersectionObserver.mjs +2 -2
  324. package/lib/composables/intersectionObserver.mjs.map +1 -1
  325. package/lib/composables/loader.mjs.map +1 -1
  326. package/lib/entry-bundler.mjs +1 -1
  327. package/lib/framework.mjs +2 -2
  328. package/lib/framework.mjs.map +1 -1
  329. package/lib/iconsets/fa-svg.d.ts +1 -1
  330. package/lib/iconsets/fa.d.ts +1 -1
  331. package/lib/iconsets/fa4.d.ts +1 -1
  332. package/lib/iconsets/md.d.ts +1 -1
  333. package/lib/iconsets/mdi-svg.d.ts +1 -1
  334. package/lib/iconsets/mdi.d.ts +1 -1
  335. package/lib/index.d.ts +24 -24
  336. package/lib/labs/VDataTable/VDataTable.mjs +1 -1
  337. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  338. package/lib/labs/VDataTable/VDataTableHeaders.mjs +34 -20
  339. package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
  340. package/lib/labs/VDataTable/VDataTableRow.mjs +2 -4
  341. package/lib/labs/VDataTable/VDataTableRow.mjs.map +1 -1
  342. package/lib/labs/VDataTable/VDataTableRows.mjs +2 -2
  343. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  344. package/lib/labs/VDataTable/VDataTableServer.mjs +1 -1
  345. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  346. package/lib/labs/VDataTable/index.d.ts +61 -933
  347. package/lib/labs/VInfiniteScroll/VInfiniteScroll.css +26 -0
  348. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs +215 -0
  349. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -0
  350. package/lib/labs/VInfiniteScroll/VInfiniteScroll.sass +25 -0
  351. package/lib/labs/VInfiniteScroll/_variables.scss +3 -0
  352. package/lib/labs/VInfiniteScroll/index.d.ts +321 -0
  353. package/lib/labs/VInfiniteScroll/index.mjs +2 -0
  354. package/lib/labs/VInfiniteScroll/index.mjs.map +1 -0
  355. package/lib/labs/VSkeletonLoader/index.d.ts +0 -12
  356. package/lib/labs/components.d.ts +398 -969
  357. package/lib/labs/components.mjs +1 -0
  358. package/lib/labs/components.mjs.map +1 -1
  359. package/lib/labs/date/DateAdapter.mjs +2 -0
  360. package/lib/labs/date/DateAdapter.mjs.map +1 -0
  361. package/lib/labs/date/adapters/vuetify.d.ts +52 -0
  362. package/lib/{adapters → labs/date/adapters}/vuetify.mjs +2 -2
  363. package/lib/labs/date/adapters/vuetify.mjs.map +1 -0
  364. package/lib/{composables → labs/date}/date.mjs +3 -3
  365. package/lib/labs/date/date.mjs.map +1 -0
  366. package/lib/labs/date/index.d.ts +40 -0
  367. package/lib/labs/date/index.mjs +2 -0
  368. package/lib/labs/date/index.mjs.map +1 -0
  369. package/lib/labs/index.mjs +3 -2
  370. package/lib/labs/index.mjs.map +1 -1
  371. package/lib/locale/af.mjs +5 -1
  372. package/lib/locale/af.mjs.map +1 -1
  373. package/lib/locale/ar.mjs +5 -1
  374. package/lib/locale/ar.mjs.map +1 -1
  375. package/lib/locale/az.mjs +5 -1
  376. package/lib/locale/az.mjs.map +1 -1
  377. package/lib/locale/bg.mjs +5 -1
  378. package/lib/locale/bg.mjs.map +1 -1
  379. package/lib/locale/ca.mjs +5 -1
  380. package/lib/locale/ca.mjs.map +1 -1
  381. package/lib/locale/ckb.mjs +5 -1
  382. package/lib/locale/ckb.mjs.map +1 -1
  383. package/lib/locale/cs.mjs +5 -1
  384. package/lib/locale/cs.mjs.map +1 -1
  385. package/lib/locale/da.mjs +5 -1
  386. package/lib/locale/da.mjs.map +1 -1
  387. package/lib/locale/de.mjs +5 -1
  388. package/lib/locale/de.mjs.map +1 -1
  389. package/lib/locale/el.mjs +5 -1
  390. package/lib/locale/el.mjs.map +1 -1
  391. package/lib/locale/en.mjs +5 -1
  392. package/lib/locale/en.mjs.map +1 -1
  393. package/lib/locale/es.mjs +5 -1
  394. package/lib/locale/es.mjs.map +1 -1
  395. package/lib/locale/et.mjs +5 -1
  396. package/lib/locale/et.mjs.map +1 -1
  397. package/lib/locale/fa.mjs +5 -1
  398. package/lib/locale/fa.mjs.map +1 -1
  399. package/lib/locale/fi.mjs +5 -1
  400. package/lib/locale/fi.mjs.map +1 -1
  401. package/lib/locale/fr.mjs +5 -1
  402. package/lib/locale/fr.mjs.map +1 -1
  403. package/lib/locale/he.mjs +5 -1
  404. package/lib/locale/he.mjs.map +1 -1
  405. package/lib/locale/hr.mjs +5 -1
  406. package/lib/locale/hr.mjs.map +1 -1
  407. package/lib/locale/hu.mjs +5 -1
  408. package/lib/locale/hu.mjs.map +1 -1
  409. package/lib/locale/id.mjs +5 -1
  410. package/lib/locale/id.mjs.map +1 -1
  411. package/lib/locale/index.d.ts +168 -0
  412. package/lib/locale/it.mjs +5 -1
  413. package/lib/locale/it.mjs.map +1 -1
  414. package/lib/locale/ja.mjs +5 -1
  415. package/lib/locale/ja.mjs.map +1 -1
  416. package/lib/locale/ko.mjs +5 -1
  417. package/lib/locale/ko.mjs.map +1 -1
  418. package/lib/locale/lt.mjs +5 -1
  419. package/lib/locale/lt.mjs.map +1 -1
  420. package/lib/locale/lv.mjs +5 -1
  421. package/lib/locale/lv.mjs.map +1 -1
  422. package/lib/locale/nl.mjs +5 -1
  423. package/lib/locale/nl.mjs.map +1 -1
  424. package/lib/locale/no.mjs +5 -1
  425. package/lib/locale/no.mjs.map +1 -1
  426. package/lib/locale/pl.mjs +5 -1
  427. package/lib/locale/pl.mjs.map +1 -1
  428. package/lib/locale/pt.mjs +5 -1
  429. package/lib/locale/pt.mjs.map +1 -1
  430. package/lib/locale/ro.mjs +5 -1
  431. package/lib/locale/ro.mjs.map +1 -1
  432. package/lib/locale/ru.mjs +5 -1
  433. package/lib/locale/ru.mjs.map +1 -1
  434. package/lib/locale/sk.mjs +5 -1
  435. package/lib/locale/sk.mjs.map +1 -1
  436. package/lib/locale/sl.mjs +5 -1
  437. package/lib/locale/sl.mjs.map +1 -1
  438. package/lib/locale/sr-Cyrl.mjs +5 -1
  439. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  440. package/lib/locale/sr-Latn.mjs +5 -1
  441. package/lib/locale/sr-Latn.mjs.map +1 -1
  442. package/lib/locale/sv.mjs +5 -1
  443. package/lib/locale/sv.mjs.map +1 -1
  444. package/lib/locale/th.mjs +5 -1
  445. package/lib/locale/th.mjs.map +1 -1
  446. package/lib/locale/tr.mjs +5 -1
  447. package/lib/locale/tr.mjs.map +1 -1
  448. package/lib/locale/uk.mjs +5 -1
  449. package/lib/locale/uk.mjs.map +1 -1
  450. package/lib/locale/vi.mjs +5 -1
  451. package/lib/locale/vi.mjs.map +1 -1
  452. package/lib/locale/zh-Hans.mjs +5 -1
  453. package/lib/locale/zh-Hans.mjs.map +1 -1
  454. package/lib/locale/zh-Hant.mjs +5 -1
  455. package/lib/locale/zh-Hant.mjs.map +1 -1
  456. package/lib/util/createSimpleFunctional.mjs +9 -4
  457. package/lib/util/createSimpleFunctional.mjs.map +1 -1
  458. package/lib/util/defineComponent.mjs +11 -43
  459. package/lib/util/defineComponent.mjs.map +1 -1
  460. package/lib/util/helpers.mjs +28 -2
  461. package/lib/util/helpers.mjs.map +1 -1
  462. package/lib/util/index.mjs +1 -0
  463. package/lib/util/index.mjs.map +1 -1
  464. package/package.json +2 -1
  465. package/lib/adapters/date-adapter.mjs +0 -2
  466. package/lib/adapters/date-adapter.mjs.map +0 -1
  467. package/lib/adapters/vuetify.mjs.map +0 -1
  468. package/lib/composables/date.mjs.map +0 -1
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v4.0.0-dev-20230422.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
  }
@@ -1091,15 +1108,19 @@
1091
1108
  tag: {
1092
1109
  type: String,
1093
1110
  default: tag
1094
- }
1111
+ },
1112
+ ...makeComponentProps()
1095
1113
  },
1096
1114
  setup(props, _ref) {
1097
1115
  let {
1098
1116
  slots
1099
1117
  } = _ref;
1100
- return () => vue.h(props.tag, {
1101
- class: klass
1102
- }, slots.default?.());
1118
+ return () => {
1119
+ return vue.h(props.tag, {
1120
+ class: [klass, props.class],
1121
+ style: props.style
1122
+ }, slots.default?.());
1123
+ };
1103
1124
  }
1104
1125
  });
1105
1126
  }
@@ -1132,6 +1153,34 @@
1132
1153
  const deceleratedEasing = 'cubic-bezier(0.0, 0, 0.2, 1)'; // Entering
1133
1154
  const acceleratedEasing = 'cubic-bezier(0.4, 0, 1, 1)'; // Leaving
1134
1155
 
1156
+ // Utilities
1157
+ function getCurrentInstance(name, message) {
1158
+ const vm = vue.getCurrentInstance();
1159
+ if (!vm) {
1160
+ throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
1161
+ }
1162
+ return vm;
1163
+ }
1164
+ function getCurrentInstanceName() {
1165
+ let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
1166
+ const vm = getCurrentInstance(name).type;
1167
+ return toKebabCase(vm?.aliasName || vm?.name);
1168
+ }
1169
+ let _uid = 0;
1170
+ let _map = new WeakMap();
1171
+ function getUid() {
1172
+ const vm = getCurrentInstance('getUid');
1173
+ if (_map.has(vm)) return _map.get(vm);else {
1174
+ const uid = _uid++;
1175
+ _map.set(vm, uid);
1176
+ return uid;
1177
+ }
1178
+ }
1179
+ getUid.reset = () => {
1180
+ _uid = 0;
1181
+ _map = new WeakMap();
1182
+ };
1183
+
1135
1184
  function getScrollParent(el) {
1136
1185
  while (el) {
1137
1186
  if (hasScrollbar(el)) return el;
@@ -1155,6 +1204,16 @@
1155
1204
  return style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1156
1205
  }
1157
1206
 
1207
+ function injectSelf(key) {
1208
+ const {
1209
+ provides
1210
+ } = getCurrentInstance('injectSelf');
1211
+ if (provides && key in provides) {
1212
+ // TS doesn't allow symbol as index type
1213
+ return provides[key];
1214
+ }
1215
+ }
1216
+
1158
1217
  function isFixedPosition(el) {
1159
1218
  while (el) {
1160
1219
  if (window.getComputedStyle(el).position === 'fixed') {
@@ -1935,7 +1994,11 @@
1935
1994
  item: 'Rating {0} of {1}'
1936
1995
  }
1937
1996
  },
1938
- loading: 'Loading...'
1997
+ loading: 'Loading...',
1998
+ infiniteScroll: {
1999
+ loadMore: 'Load more',
2000
+ empty: 'No more'
2001
+ }
1939
2002
  };
1940
2003
 
1941
2004
  const LANG_PREFIX = '$vuetify.';
@@ -2133,6 +2196,7 @@
2133
2196
  const VApp = genericComponent()({
2134
2197
  name: 'VApp',
2135
2198
  props: {
2199
+ ...makeComponentProps(),
2136
2200
  ...makeLayoutProps({
2137
2201
  fullHeight: true
2138
2202
  }),
@@ -2155,8 +2219,8 @@
2155
2219
  } = useRtl();
2156
2220
  useRender(() => vue.createVNode("div", {
2157
2221
  "ref": layoutRef,
2158
- "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value],
2159
- "style": layoutStyles.value
2222
+ "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value, props.class],
2223
+ "style": [layoutStyles.value, props.style]
2160
2224
  }, [vue.createVNode("div", {
2161
2225
  "class": "v-application__wrap"
2162
2226
  }, [slots.default?.()])]));
@@ -2581,6 +2645,7 @@
2581
2645
  props: {
2582
2646
  aspectRatio: [String, Number],
2583
2647
  contentClass: String,
2648
+ ...makeComponentProps(),
2584
2649
  ...makeDimensionProps()
2585
2650
  },
2586
2651
  setup(props, _ref) {
@@ -2594,8 +2659,8 @@
2594
2659
  dimensionStyles
2595
2660
  } = useDimension(props);
2596
2661
  useRender(() => vue.createVNode("div", {
2597
- "class": "v-responsive",
2598
- "style": dimensionStyles.value
2662
+ "class": ['v-responsive', props.class],
2663
+ "style": [dimensionStyles.value, props.style]
2599
2664
  }, [vue.createVNode("div", {
2600
2665
  "class": "v-responsive__sizer",
2601
2666
  "style": aspectStyles.value
@@ -2713,6 +2778,7 @@
2713
2778
  },
2714
2779
  srcset: String,
2715
2780
  width: [String, Number],
2781
+ ...makeComponentProps(),
2716
2782
  ...makeTransitionProps()
2717
2783
  },
2718
2784
  emits: {
@@ -2900,10 +2966,10 @@
2900
2966
  useRender(() => vue.withDirectives(vue.createVNode(VResponsive, {
2901
2967
  "class": ['v-img', {
2902
2968
  'v-img--booting': !isBooted.value
2903
- }],
2904
- "style": {
2969
+ }, props.class],
2970
+ "style": [{
2905
2971
  width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width)
2906
- },
2972
+ }, props.style],
2907
2973
  "aspectRatio": aspectRatio.value,
2908
2974
  "aria-label": props.alt,
2909
2975
  "role": props.alt ? 'img' : undefined
@@ -2938,10 +3004,9 @@
2938
3004
  }
2939
3005
  }, 'tag');
2940
3006
 
2941
- // Types
2942
-
2943
3007
  const makeVToolbarTitleProps = propsFactory({
2944
3008
  text: String,
3009
+ ...makeComponentProps(),
2945
3010
  ...makeTagProps()
2946
3011
  }, 'v-toolbar-title');
2947
3012
  const VToolbarTitle = genericComponent()({
@@ -2954,7 +3019,8 @@
2954
3019
  useRender(() => {
2955
3020
  const hasText = !!(slots.default || slots.text || props.text);
2956
3021
  return vue.createVNode(props.tag, {
2957
- "class": "v-toolbar-title"
3022
+ "class": ['v-toolbar-title', props.class],
3023
+ "style": props.style
2958
3024
  }, {
2959
3025
  default: () => [hasText && vue.createVNode("div", {
2960
3026
  "class": "v-toolbar-title__placeholder"
@@ -3135,6 +3201,7 @@
3135
3201
  image: String,
3136
3202
  title: String,
3137
3203
  ...makeBorderProps(),
3204
+ ...makeComponentProps(),
3138
3205
  ...makeElevationProps(),
3139
3206
  ...makeRoundedProps(),
3140
3207
  ...makeTagProps({
@@ -3185,8 +3252,8 @@
3185
3252
  'v-toolbar--flat': props.flat,
3186
3253
  'v-toolbar--floating': props.floating,
3187
3254
  [`v-toolbar--density-${props.density}`]: true
3188
- }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value],
3189
- "style": [backgroundColorStyles.value]
3255
+ }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value, props.class],
3256
+ "style": [backgroundColorStyles.value, props.style]
3190
3257
  }, {
3191
3258
  default: () => [hasImage && vue.createVNode("div", {
3192
3259
  "key": "image",
@@ -3471,13 +3538,13 @@
3471
3538
  "ref": vToolbarRef,
3472
3539
  "class": ['v-app-bar', {
3473
3540
  'v-app-bar--bottom': props.location === 'bottom'
3474
- }],
3475
- "style": {
3541
+ }, props.class],
3542
+ "style": [{
3476
3543
  ...layoutItemStyles.value,
3477
3544
  '--v-toolbar-image-opacity': opacity.value,
3478
3545
  height: undefined,
3479
3546
  ...ssrBootStyles.value
3480
- }
3547
+ }, props.style]
3481
3548
  }, toolbarProps, {
3482
3549
  "collapse": isCollapsed.value,
3483
3550
  "flat": isFlat.value
@@ -3564,6 +3631,7 @@
3564
3631
  const makeVBtnGroupProps = propsFactory({
3565
3632
  divided: Boolean,
3566
3633
  ...makeBorderProps(),
3634
+ ...makeComponentProps(),
3567
3635
  ...makeDensityProps(),
3568
3636
  ...makeElevationProps(),
3569
3637
  ...makeRoundedProps(),
@@ -3606,7 +3674,8 @@
3606
3674
  return vue.createVNode(props.tag, {
3607
3675
  "class": ['v-btn-group', {
3608
3676
  'v-btn-group--divided': props.divided
3609
- }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value]
3677
+ }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
3678
+ "style": props.style
3610
3679
  }, slots);
3611
3680
  });
3612
3681
  }
@@ -3839,8 +3908,10 @@
3839
3908
  useRender(() => {
3840
3909
  const [btnGroupProps] = VBtnGroup.filterProps(props);
3841
3910
  return vue.createVNode(VBtnGroup, vue.mergeProps({
3842
- "class": "v-btn-toggle"
3843
- }, btnGroupProps), {
3911
+ "class": ['v-btn-toggle', props.class]
3912
+ }, btnGroupProps, {
3913
+ "style": props.style
3914
+ }), {
3844
3915
  default: () => [slots.default?.({
3845
3916
  isSelected,
3846
3917
  next,
@@ -3911,7 +3982,7 @@
3911
3982
 
3912
3983
  // Types
3913
3984
 
3914
- const IconValue = [String, Function, Object];
3985
+ const IconValue = [String, Function, Object, Array];
3915
3986
  const IconSymbol = Symbol.for('vuetify:icons');
3916
3987
  const makeIconProps = propsFactory({
3917
3988
  icon: {
@@ -3931,8 +4002,9 @@
3931
4002
  slots
3932
4003
  } = _ref;
3933
4004
  return () => {
4005
+ const Icon = props.icon;
3934
4006
  return vue.createVNode(props.tag, null, {
3935
- default: () => [props.icon ? vue.createVNode(props.icon, null, null) : slots.default?.()]
4007
+ default: () => [props.icon ? vue.createVNode(Icon, null, null) : slots.default?.()]
3936
4008
  });
3937
4009
  };
3938
4010
  }
@@ -3955,7 +4027,12 @@
3955
4027
  "viewBox": "0 0 24 24",
3956
4028
  "role": "img",
3957
4029
  "aria-hidden": "true"
3958
- }, [vue.createVNode("path", {
4030
+ }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? vue.createVNode("path", {
4031
+ "d": path[0],
4032
+ "fill-opacity": path[1]
4033
+ }, null) : vue.createVNode("path", {
4034
+ "d": path
4035
+ }, null)) : vue.createVNode("path", {
3959
4036
  "d": props.icon
3960
4037
  }, null)])]
3961
4038
  });
@@ -4020,7 +4097,12 @@
4020
4097
  }
4021
4098
  }
4022
4099
  if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
4023
- if (typeof icon !== 'string') {
4100
+ if (Array.isArray(icon)) {
4101
+ return {
4102
+ component: VSvgIcon,
4103
+ icon
4104
+ };
4105
+ } else if (typeof icon !== 'string') {
4024
4106
  return {
4025
4107
  component: VComponentIcon,
4026
4108
  icon
@@ -4077,6 +4159,7 @@
4077
4159
  start: Boolean,
4078
4160
  end: Boolean,
4079
4161
  icon: IconValue,
4162
+ ...makeComponentProps(),
4080
4163
  ...makeSizeProps(),
4081
4164
  ...makeTagProps({
4082
4165
  tag: 'i'
@@ -4119,12 +4202,12 @@
4119
4202
  'v-icon--clickable': !!attrs.onClick,
4120
4203
  'v-icon--start': props.start,
4121
4204
  'v-icon--end': props.end
4122
- }],
4205
+ }, props.class],
4123
4206
  "style": [!sizeClasses.value ? {
4124
4207
  fontSize: convertToUnit(props.size),
4125
4208
  height: convertToUnit(props.size),
4126
4209
  width: convertToUnit(props.size)
4127
- } : undefined, textColorStyles.value],
4210
+ } : undefined, textColorStyles.value, props.style],
4128
4211
  "role": attrs.onClick ? 'button' : undefined,
4129
4212
  "aria-hidden": !attrs.onClick
4130
4213
  }, {
@@ -4135,14 +4218,14 @@
4135
4218
  });
4136
4219
 
4137
4220
  // Utilities
4138
- function useIntersectionObserver(callback) {
4221
+ function useIntersectionObserver(callback, options) {
4139
4222
  const intersectionRef = vue.ref();
4140
4223
  const isIntersecting = vue.ref(false);
4141
4224
  if (SUPPORTS_INTERSECTION) {
4142
4225
  const observer = new IntersectionObserver(entries => {
4143
4226
  callback?.(entries, observer);
4144
4227
  isIntersecting.value = !!entries.find(entry => entry.isIntersecting);
4145
- });
4228
+ }, options);
4146
4229
  vue.onBeforeUnmount(() => {
4147
4230
  observer.disconnect();
4148
4231
  });
@@ -4182,6 +4265,7 @@
4182
4265
  type: [Number, String],
4183
4266
  default: 4
4184
4267
  },
4268
+ ...makeComponentProps(),
4185
4269
  ...makeSizeProps(),
4186
4270
  ...makeTagProps({
4187
4271
  tag: 'div'
@@ -4237,8 +4321,8 @@
4237
4321
  'v-progress-circular--indeterminate': !!props.indeterminate,
4238
4322
  'v-progress-circular--visible': isIntersecting.value,
4239
4323
  'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink'
4240
- }, themeClasses.value, sizeClasses.value, textColorClasses.value],
4241
- "style": [sizeStyles.value, textColorStyles.value],
4324
+ }, themeClasses.value, sizeClasses.value, textColorClasses.value, props.class],
4325
+ "style": [sizeStyles.value, textColorStyles.value, props.style],
4242
4326
  "role": "progressbar",
4243
4327
  "aria-valuemin": "0",
4244
4328
  "aria-valuemax": "100",
@@ -4657,6 +4741,7 @@
4657
4741
  stream: Boolean,
4658
4742
  striped: Boolean,
4659
4743
  roundedBar: Boolean,
4744
+ ...makeComponentProps(),
4660
4745
  ...makeLocationProps({
4661
4746
  location: 'top'
4662
4747
  }),
@@ -4728,14 +4813,14 @@
4728
4813
  'v-progress-linear--rounded': props.rounded,
4729
4814
  'v-progress-linear--rounded-bar': props.roundedBar,
4730
4815
  'v-progress-linear--striped': props.striped
4731
- }, roundedClasses.value, themeClasses.value],
4732
- "style": {
4816
+ }, roundedClasses.value, themeClasses.value, props.class],
4817
+ "style": [{
4733
4818
  bottom: props.location === 'bottom' ? 0 : undefined,
4734
4819
  top: props.location === 'top' ? 0 : undefined,
4735
4820
  height: props.active ? convertToUnit(height.value) : 0,
4736
4821
  '--v-progress-linear-height': convertToUnit(height.value),
4737
4822
  ...locationStyles.value
4738
- },
4823
+ }, props.style],
4739
4824
  "role": "progressbar",
4740
4825
  "aria-hidden": props.active ? 'false' : 'true',
4741
4826
  "aria-valuemin": "0",
@@ -4946,7 +5031,7 @@
4946
5031
  },
4947
5032
  text: String,
4948
5033
  ...makeBorderProps(),
4949
- ...makeRoundedProps(),
5034
+ ...makeComponentProps(),
4950
5035
  ...makeDensityProps(),
4951
5036
  ...makeDimensionProps(),
4952
5037
  ...makeElevationProps(),
@@ -4954,6 +5039,7 @@
4954
5039
  ...makeLoaderProps(),
4955
5040
  ...makeLocationProps(),
4956
5041
  ...makePositionProps(),
5042
+ ...makeRoundedProps(),
4957
5043
  ...makeRouterProps(),
4958
5044
  ...makeSizeProps(),
4959
5045
  ...makeTagProps({
@@ -5051,8 +5137,8 @@
5051
5137
  'v-btn--icon': !!props.icon,
5052
5138
  'v-btn--loading': props.loading,
5053
5139
  'v-btn--stacked': props.stacked
5054
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
5055
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value],
5140
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
5141
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value, props.style],
5056
5142
  "disabled": isDisabled.value || undefined,
5057
5143
  "href": link.href.value,
5058
5144
  "onClick": e => {
@@ -5129,15 +5215,17 @@
5129
5215
  icon: {
5130
5216
  type: IconValue,
5131
5217
  default: '$menu'
5132
- }
5218
+ },
5219
+ ...makeComponentProps()
5133
5220
  },
5134
5221
  setup(props, _ref) {
5135
5222
  let {
5136
5223
  slots
5137
5224
  } = _ref;
5138
5225
  useRender(() => vue.createVNode(VBtn, {
5139
- "class": "v-app-bar-nav-icon",
5140
- "icon": props.icon
5226
+ "class": ['v-app-bar-nav-icon', props.class],
5227
+ "icon": props.icon,
5228
+ "style": props.style
5141
5229
  }, slots));
5142
5230
  return {};
5143
5231
  }
@@ -5145,9 +5233,12 @@
5145
5233
 
5146
5234
  const VToolbarItems = genericComponent()({
5147
5235
  name: 'VToolbarItems',
5148
- props: makeVariantProps({
5149
- variant: 'text'
5150
- }),
5236
+ props: {
5237
+ ...makeComponentProps(),
5238
+ ...makeVariantProps({
5239
+ variant: 'text'
5240
+ })
5241
+ },
5151
5242
  setup(props, _ref) {
5152
5243
  let {
5153
5244
  slots
@@ -5160,7 +5251,8 @@
5160
5251
  }
5161
5252
  });
5162
5253
  useRender(() => vue.createVNode("div", {
5163
- "class": "v-toolbar-items"
5254
+ "class": ['v-toolbar-items', props.class],
5255
+ "style": props.style
5164
5256
  }, [slots.default?.()]));
5165
5257
  return {};
5166
5258
  }
@@ -5222,6 +5314,7 @@
5222
5314
  type: String,
5223
5315
  validator: val => allowedTypes.includes(val)
5224
5316
  },
5317
+ ...makeComponentProps(),
5225
5318
  ...makeDensityProps(),
5226
5319
  ...makeDimensionProps(),
5227
5320
  ...makeElevationProps(),
@@ -5304,8 +5397,8 @@
5304
5397
  [`v-alert--border-${props.border === true ? 'start' : props.border}`]: true
5305
5398
  }, {
5306
5399
  'v-alert--prominent': props.prominent
5307
- }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
5308
- "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
5400
+ }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
5401
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
5309
5402
  "role": "alert"
5310
5403
  }, {
5311
5404
  default: () => [genOverlays(false, 'v-alert'), props.border && vue.createVNode("div", {
@@ -5399,6 +5492,7 @@
5399
5492
  props: {
5400
5493
  text: String,
5401
5494
  clickable: Boolean,
5495
+ ...makeComponentProps(),
5402
5496
  ...makeThemeProps()
5403
5497
  },
5404
5498
  setup(props, _ref) {
@@ -5408,7 +5502,8 @@
5408
5502
  useRender(() => vue.createVNode("label", {
5409
5503
  "class": ['v-label', {
5410
5504
  'v-label--clickable': props.clickable
5411
- }]
5505
+ }, props.class],
5506
+ "style": props.style
5412
5507
  }, [props.text, slots.default?.()]));
5413
5508
  return {};
5414
5509
  }
@@ -5417,7 +5512,8 @@
5417
5512
  const VFieldLabel = genericComponent()({
5418
5513
  name: 'VFieldLabel',
5419
5514
  props: {
5420
- floating: Boolean
5515
+ floating: Boolean,
5516
+ ...makeComponentProps()
5421
5517
  },
5422
5518
  setup(props, _ref) {
5423
5519
  let {
@@ -5426,7 +5522,8 @@
5426
5522
  useRender(() => vue.createVNode(VLabel, {
5427
5523
  "class": ['v-field-label', {
5428
5524
  'v-field-label--floating': props.floating
5429
- }],
5525
+ }, props.class],
5526
+ "style": props.style,
5430
5527
  "aria-hidden": props.floating || undefined
5431
5528
  }, slots));
5432
5529
  return {};
@@ -5477,6 +5574,7 @@
5477
5574
  },
5478
5575
  active: Boolean,
5479
5576
  color: String,
5577
+ baseColor: String,
5480
5578
  dirty: Boolean,
5481
5579
  disabled: Boolean,
5482
5580
  error: Boolean,
@@ -5494,9 +5592,10 @@
5494
5592
  'onClick:clear': EventProp(),
5495
5593
  'onClick:appendInner': EventProp(),
5496
5594
  'onClick:prependInner': EventProp(),
5497
- ...makeThemeProps(),
5595
+ ...makeComponentProps(),
5498
5596
  ...makeLoaderProps(),
5499
- ...makeRoundedProps()
5597
+ ...makeRoundedProps(),
5598
+ ...makeThemeProps()
5500
5599
  }, 'v-field');
5501
5600
  const VField = genericComponent()({
5502
5601
  name: 'VField',
@@ -5550,7 +5649,7 @@
5550
5649
  textColorClasses,
5551
5650
  textColorStyles
5552
5651
  } = useTextColor(vue.computed(() => {
5553
- return isActive.value && isFocused.value && !props.error && !props.disabled ? props.color : undefined;
5652
+ return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : props.baseColor;
5554
5653
  }));
5555
5654
  vue.watch(isActive, val => {
5556
5655
  if (hasLabel.value) {
@@ -5627,8 +5726,8 @@
5627
5726
  'v-field--single-line': props.singleLine,
5628
5727
  'v-field--no-label': !label,
5629
5728
  [`v-field--variant-${props.variant}`]: true
5630
- }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value],
5631
- "style": [backgroundColorStyles.value, textColorStyles.value],
5729
+ }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, props.class],
5730
+ "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
5632
5731
  "onClick": onClick
5633
5732
  }, attrs), [vue.createVNode("div", {
5634
5733
  "class": "v-field__overlay"
@@ -5716,7 +5815,7 @@
5716
5815
  });
5717
5816
  // TODO: this is kinda slow, might be better to implicitly inherit props instead
5718
5817
  function filterFieldProps(attrs) {
5719
- const keys = Object.keys(VField.props).filter(k => !isOn(k));
5818
+ const keys = Object.keys(VField.props).filter(k => !isOn(k) && k !== 'class' && k !== 'style');
5720
5819
  return pick(attrs, keys);
5721
5820
  }
5722
5821
 
@@ -5731,6 +5830,7 @@
5731
5830
  type: [Array, String],
5732
5831
  default: () => []
5733
5832
  },
5833
+ ...makeComponentProps(),
5734
5834
  ...makeTransitionProps({
5735
5835
  transition: {
5736
5836
  component: VSlideYTransition,
@@ -5751,8 +5851,8 @@
5751
5851
  useRender(() => vue.createVNode(MaybeTransition, {
5752
5852
  "transition": props.transition,
5753
5853
  "tag": "div",
5754
- "class": ['v-messages', textColorClasses.value],
5755
- "style": textColorStyles.value,
5854
+ "class": ['v-messages', textColorClasses.value, props.class],
5855
+ "style": [textColorStyles.value, props.style],
5756
5856
  "role": "alert",
5757
5857
  "aria-live": "polite"
5758
5858
  }, {
@@ -6048,6 +6148,7 @@
6048
6148
  },
6049
6149
  'onClick:prepend': EventProp(),
6050
6150
  'onClick:append': EventProp(),
6151
+ ...makeComponentProps(),
6051
6152
  ...makeDensityProps(),
6052
6153
  ...makeValidationProps()
6053
6154
  }, 'v-input');
@@ -6115,7 +6216,8 @@
6115
6216
  const hasMessages = messages.value.length > 0;
6116
6217
  const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details);
6117
6218
  return vue.createVNode("div", {
6118
- "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value]
6219
+ "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value, props.class],
6220
+ "style": props.style
6119
6221
  }, [hasPrepend && vue.createVNode("div", {
6120
6222
  "key": "prepend",
6121
6223
  "class": "v-input__prepend"
@@ -6158,6 +6260,7 @@
6158
6260
  type: [Number, String],
6159
6261
  default: 0
6160
6262
  },
6263
+ ...makeComponentProps(),
6161
6264
  ...makeTransitionProps({
6162
6265
  transition: {
6163
6266
  component: VSlideYTransition
@@ -6175,7 +6278,8 @@
6175
6278
  "transition": props.transition
6176
6279
  }, {
6177
6280
  default: () => [vue.withDirectives(vue.createVNode("div", {
6178
- "class": "v-counter"
6281
+ "class": ['v-counter', props.class],
6282
+ "style": props.style
6179
6283
  }, [slots.default ? slots.default({
6180
6284
  counter: counter.value,
6181
6285
  max: props.max,
@@ -6378,7 +6482,8 @@
6378
6482
  'v-text-field--prefixed': props.prefix,
6379
6483
  'v-text-field--suffixed': props.suffix,
6380
6484
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
6381
- }]
6485
+ }, props.class],
6486
+ "style": props.style
6382
6487
  }, rootAttrs, inputProps, {
6383
6488
  "focused": isFocused.value
6384
6489
  }), {
@@ -6494,6 +6599,7 @@
6494
6599
  type: String,
6495
6600
  default: 'VSelectionControl'
6496
6601
  },
6602
+ ...makeComponentProps(),
6497
6603
  ...makeSelectionControlGroupProps()
6498
6604
  },
6499
6605
  emits: {
@@ -6541,7 +6647,8 @@
6541
6647
  useRender(() => vue.createVNode("div", {
6542
6648
  "class": ['v-selection-control-group', {
6543
6649
  'v-selection-control-group--inline': props.inline
6544
- }],
6650
+ }, props.class],
6651
+ "style": props.style,
6545
6652
  "role": props.type === 'radio' ? 'radiogroup' : undefined
6546
6653
  }, [slots.default?.()]));
6547
6654
  return {};
@@ -6555,6 +6662,7 @@
6555
6662
  trueValue: null,
6556
6663
  falseValue: null,
6557
6664
  value: null,
6665
+ ...makeComponentProps(),
6558
6666
  ...makeSelectionControlGroupProps()
6559
6667
  }, 'v-selection-control');
6560
6668
  function useSelectionControl(props) {
@@ -6669,8 +6777,10 @@
6669
6777
  'v-selection-control--focused': isFocused.value,
6670
6778
  'v-selection-control--focus-visible': isFocusVisible.value,
6671
6779
  'v-selection-control--inline': props.inline
6672
- }, densityClasses.value]
6673
- }, rootAttrs), [vue.createVNode("div", {
6780
+ }, densityClasses.value, props.class]
6781
+ }, rootAttrs, {
6782
+ "style": props.style
6783
+ }), [vue.createVNode("div", {
6674
6784
  "class": ['v-selection-control__wrapper', textColorClasses.value],
6675
6785
  "style": textColorStyles.value
6676
6786
  }, [slots.default?.(), vue.withDirectives(vue.createVNode("div", {
@@ -6752,7 +6862,8 @@
6752
6862
  useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
6753
6863
  "modelValue": model.value,
6754
6864
  "onUpdate:modelValue": [$event => model.value = $event, onChange],
6755
- "class": "v-checkbox-btn",
6865
+ "class": ['v-checkbox-btn', props.class],
6866
+ "style": props.style,
6756
6867
  "type": "checkbox",
6757
6868
  "inline": true,
6758
6869
  "falseIcon": falseIcon.value,
@@ -6792,10 +6903,11 @@
6792
6903
  const [inputProps, _1] = VInput.filterProps(props);
6793
6904
  const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6794
6905
  return vue.createVNode(VInput, vue.mergeProps({
6795
- "class": "v-checkbox"
6906
+ "class": ['v-checkbox', props.class]
6796
6907
  }, inputAttrs, inputProps, {
6797
6908
  "id": id.value,
6798
- "focused": isFocused.value
6909
+ "focused": isFocused.value,
6910
+ "style": props.style
6799
6911
  }), {
6800
6912
  ...slots,
6801
6913
  default: _ref2 => {
@@ -6826,6 +6938,7 @@
6826
6938
  end: Boolean,
6827
6939
  icon: IconValue,
6828
6940
  image: String,
6941
+ ...makeComponentProps(),
6829
6942
  ...makeDensityProps(),
6830
6943
  ...makeRoundedProps(),
6831
6944
  ...makeSizeProps(),
@@ -6864,8 +6977,8 @@
6864
6977
  "class": ['v-avatar', {
6865
6978
  'v-avatar--start': props.start,
6866
6979
  'v-avatar--end': props.end
6867
- }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
6868
- "style": [colorStyles.value, sizeStyles.value]
6980
+ }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6981
+ "style": [colorStyles.value, sizeStyles.value, props.style]
6869
6982
  }, {
6870
6983
  default: () => [props.image ? vue.createVNode(VImg, {
6871
6984
  "key": "image",
@@ -6893,6 +7006,7 @@
6893
7006
  type: Function,
6894
7007
  default: deepEqual
6895
7008
  },
7009
+ ...makeComponentProps(),
6896
7010
  ...makeGroupProps({
6897
7011
  selectedClass: 'v-chip--selected'
6898
7012
  }),
@@ -6930,7 +7044,8 @@
6930
7044
  useRender(() => vue.createVNode(props.tag, {
6931
7045
  "class": ['v-chip-group', {
6932
7046
  'v-chip-group--column': props.column
6933
- }, themeClasses.value]
7047
+ }, themeClasses.value, props.class],
7048
+ "style": props.style
6934
7049
  }, {
6935
7050
  default: () => [slots.default?.({
6936
7051
  isSelected,
@@ -6944,8 +7059,6 @@
6944
7059
  }
6945
7060
  });
6946
7061
 
6947
- // Types
6948
-
6949
7062
  const VChip = genericComponent()({
6950
7063
  name: 'VChip',
6951
7064
  directives: {
@@ -6990,6 +7103,7 @@
6990
7103
  onClick: EventProp(),
6991
7104
  onClickOnce: EventProp(),
6992
7105
  ...makeBorderProps(),
7106
+ ...makeComponentProps(),
6993
7107
  ...makeDensityProps(),
6994
7108
  ...makeElevationProps(),
6995
7109
  ...makeGroupItemProps(),
@@ -7082,8 +7196,8 @@
7082
7196
  'v-chip--link': isClickable.value,
7083
7197
  'v-chip--filter': hasFilter,
7084
7198
  'v-chip--pill': props.pill
7085
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value],
7086
- "style": [hasColor ? colorStyles.value : undefined],
7199
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value, props.class],
7200
+ "style": [hasColor ? colorStyles.value : undefined, props.style],
7087
7201
  "disabled": props.disabled || undefined,
7088
7202
  "draggable": props.draggable,
7089
7203
  "href": link.href.value,
@@ -7192,6 +7306,7 @@
7192
7306
  length: [Number, String],
7193
7307
  thickness: [Number, String],
7194
7308
  vertical: Boolean,
7309
+ ...makeComponentProps(),
7195
7310
  ...makeThemeProps()
7196
7311
  },
7197
7312
  setup(props, _ref) {
@@ -7220,8 +7335,8 @@
7220
7335
  'v-divider': true,
7221
7336
  'v-divider--inset': props.inset,
7222
7337
  'v-divider--vertical': props.vertical
7223
- }, themeClasses.value, textColorClasses.value],
7224
- "style": [dividerStyles.value, textColorStyles.value],
7338
+ }, themeClasses.value, textColorClasses.value, props.class],
7339
+ "style": [dividerStyles.value, textColorStyles.value, props.style],
7225
7340
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
7226
7341
  "role": `${attrs.role || 'separator'}`
7227
7342
  }, null));
@@ -7720,6 +7835,7 @@
7720
7835
  fluid: Boolean,
7721
7836
  subgroup: Boolean,
7722
7837
  value: null,
7838
+ ...makeComponentProps(),
7723
7839
  ...makeTagProps()
7724
7840
  }, 'v-list-group');
7725
7841
  const VListGroup = genericComponent()({
@@ -7768,7 +7884,8 @@
7768
7884
  'v-list-group--fluid': props.fluid,
7769
7885
  'v-list-group--subgroup': props.subgroup,
7770
7886
  'v-list-group--open': isOpen.value
7771
- }]
7887
+ }, props.class],
7888
+ "style": props.style
7772
7889
  }, {
7773
7890
  default: () => [slots.activator && vue.createVNode(VDefaultsProvider, {
7774
7891
  "defaults": activatorDefaults.value
@@ -7835,6 +7952,7 @@
7835
7952
  onClick: EventProp(),
7836
7953
  onClickOnce: EventProp(),
7837
7954
  ...makeBorderProps(),
7955
+ ...makeComponentProps(),
7838
7956
  ...makeDensityProps(),
7839
7957
  ...makeDimensionProps(),
7840
7958
  ...makeElevationProps(),
@@ -7945,8 +8063,8 @@
7945
8063
  'v-list-item--nav': props.nav,
7946
8064
  'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,
7947
8065
  [`${props.activeClass}`]: props.activeClass && isActive.value
7948
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value],
7949
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value],
8066
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
8067
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, props.style],
7950
8068
  "href": link.href.value,
7951
8069
  "tabindex": isClickable.value ? 0 : undefined,
7952
8070
  "onClick": onClick,
@@ -8039,6 +8157,7 @@
8039
8157
  inset: Boolean,
8040
8158
  sticky: Boolean,
8041
8159
  title: String,
8160
+ ...makeComponentProps(),
8042
8161
  ...makeTagProps()
8043
8162
  },
8044
8163
  setup(props, _ref) {
@@ -8055,10 +8174,10 @@
8055
8174
  "class": ['v-list-subheader', {
8056
8175
  'v-list-subheader--inset': props.inset,
8057
8176
  'v-list-subheader--sticky': props.sticky
8058
- }, textColorClasses.value],
8059
- "style": {
8177
+ }, textColorClasses.value, props.class],
8178
+ "style": [{
8060
8179
  textColorStyles
8061
- }
8180
+ }, props.style]
8062
8181
  }, {
8063
8182
  default: () => [hasText && vue.createVNode("div", {
8064
8183
  "class": "v-list-subheader__text"
@@ -8278,6 +8397,7 @@
8278
8397
  openStrategy: 'list'
8279
8398
  }),
8280
8399
  ...makeBorderProps(),
8400
+ ...makeComponentProps(),
8281
8401
  ...makeDensityProps(),
8282
8402
  ...makeDimensionProps(),
8283
8403
  ...makeElevationProps(),
@@ -8379,27 +8499,8 @@
8379
8499
  e.preventDefault();
8380
8500
  }
8381
8501
  function focus(location) {
8382
- if (!contentRef.value) return;
8383
- const targets = ['button', '[href]', 'input', 'select', 'textarea', '[tabindex]'].map(s => `${s}:not([tabindex="-1"])`).join(', ');
8384
- const focusable = [...contentRef.value.querySelectorAll(targets)].filter(el => !el.hasAttribute('disabled'));
8385
- const idx = focusable.indexOf(document.activeElement);
8386
- if (!location) {
8387
- if (!contentRef.value.contains(document.activeElement)) {
8388
- focusable[0]?.focus();
8389
- }
8390
- } else if (location === 'first') {
8391
- focusable[0]?.focus();
8392
- } else if (location === 'last') {
8393
- focusable.at(-1)?.focus();
8394
- } else {
8395
- let el;
8396
- let idxx = idx;
8397
- const inc = location === 'next' ? 1 : -1;
8398
- do {
8399
- idxx += inc;
8400
- el = focusable[idxx];
8401
- } while ((!el || el.offsetParent == null) && idxx < focusable.length && idxx >= 0);
8402
- if (el) el.focus();else focus(location === 'next' ? 'first' : 'last');
8502
+ if (contentRef.value) {
8503
+ return focusChild(contentRef.value, location);
8403
8504
  }
8404
8505
  }
8405
8506
  useRender(() => {
@@ -8408,8 +8509,8 @@
8408
8509
  "class": ['v-list', {
8409
8510
  'v-list--disabled': props.disabled,
8410
8511
  'v-list--nav': props.nav
8411
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value],
8412
- "style": [backgroundColorStyles.value, dimensionStyles.value],
8512
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class],
8513
+ "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
8413
8514
  "role": "listbox",
8414
8515
  "aria-activedescendant": undefined,
8415
8516
  "onFocusin": onFocusin,
@@ -8437,6 +8538,7 @@
8437
8538
  props: {
8438
8539
  start: Boolean,
8439
8540
  end: Boolean,
8541
+ ...makeComponentProps(),
8440
8542
  ...makeTagProps()
8441
8543
  },
8442
8544
  setup(props, _ref) {
@@ -8447,7 +8549,8 @@
8447
8549
  "class": ['v-list-item-action', {
8448
8550
  'v-list-item-action--start': props.start,
8449
8551
  'v-list-item-action--end': props.end
8450
- }]
8552
+ }, props.class],
8553
+ "style": props.style
8451
8554
  }, slots));
8452
8555
  return {};
8453
8556
  }
@@ -8458,6 +8561,7 @@
8458
8561
  props: {
8459
8562
  start: Boolean,
8460
8563
  end: Boolean,
8564
+ ...makeComponentProps(),
8461
8565
  ...makeTagProps()
8462
8566
  },
8463
8567
  setup(props, _ref) {
@@ -8469,7 +8573,8 @@
8469
8573
  "class": ['v-list-item-media', {
8470
8574
  'v-list-item-media--start': props.start,
8471
8575
  'v-list-item-media--end': props.end
8472
- }]
8576
+ }, props.class],
8577
+ "style": props.style
8473
8578
  }, slots);
8474
8579
  });
8475
8580
  return {};
@@ -9710,6 +9815,7 @@
9710
9815
  default: 2000
9711
9816
  },
9712
9817
  ...makeActivatorProps(),
9818
+ ...makeComponentProps(),
9713
9819
  ...makeDimensionProps(),
9714
9820
  ...makeLazyProps(),
9715
9821
  ...makeLocationStrategyProps(),
@@ -9877,10 +9983,10 @@
9877
9983
  'v-overlay--absolute': props.absolute || props.contained,
9878
9984
  'v-overlay--active': isActive.value,
9879
9985
  'v-overlay--contained': props.contained
9880
- }, themeClasses.value, rtlClasses.value],
9986
+ }, themeClasses.value, rtlClasses.value, props.class],
9881
9987
  "style": [stackStyles.value, {
9882
9988
  top: convertToUnit(top.value)
9883
- }],
9989
+ }, props.style],
9884
9990
  "ref": root
9885
9991
  }, scopeId, attrs), [vue.createVNode(Scrim, vue.mergeProps({
9886
9992
  "color": scrimColor,
@@ -9986,7 +10092,8 @@
9986
10092
  const [overlayProps] = VOverlay.filterProps(props);
9987
10093
  return vue.createVNode(VOverlay, vue.mergeProps({
9988
10094
  "ref": overlay,
9989
- "class": ['v-menu']
10095
+ "class": ['v-menu', props.class],
10096
+ "style": props.style
9990
10097
  }, overlayProps, {
9991
10098
  "modelValue": isActive.value,
9992
10099
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -10205,7 +10312,8 @@
10205
10312
  'v-select--chips': !!props.chips,
10206
10313
  [`v-select--${props.multiple ? 'multiple' : 'single'}`]: true,
10207
10314
  'v-select--selected': model.value.length
10208
- }],
10315
+ }, props.class],
10316
+ "style": props.style,
10209
10317
  "appendInnerIcon": props.menuIcon,
10210
10318
  "readonly": true,
10211
10319
  "placeholder": placeholder,
@@ -10648,7 +10756,8 @@
10648
10756
  'v-autocomplete--selecting-index': selectionIndex.value > -1,
10649
10757
  [`v-autocomplete--${props.multiple ? 'multiple' : 'single'}`]: true,
10650
10758
  'v-autocomplete--selection-slot': !!slots.selection
10651
- }],
10759
+ }, props.class],
10760
+ "style": props.style,
10652
10761
  "appendInnerIcon": props.menuIcon,
10653
10762
  "readonly": props.readonly,
10654
10763
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -10762,8 +10871,6 @@
10762
10871
  }
10763
10872
  });
10764
10873
 
10765
- // Types
10766
-
10767
10874
  const VBadge = genericComponent()({
10768
10875
  name: 'VBadge',
10769
10876
  inheritAttrs: false,
@@ -10787,6 +10894,7 @@
10787
10894
  offsetX: [Number, String],
10788
10895
  offsetY: [Number, String],
10789
10896
  textColor: String,
10897
+ ...makeComponentProps(),
10790
10898
  ...makeLocationProps({
10791
10899
  location: 'top end'
10792
10900
  }),
@@ -10831,8 +10939,10 @@
10831
10939
  'v-badge--dot': props.dot,
10832
10940
  'v-badge--floating': props.floating,
10833
10941
  'v-badge--inline': props.inline
10834
- }]
10835
- }, attrs), {
10942
+ }, props.class]
10943
+ }, attrs, {
10944
+ "style": props.style
10945
+ }), {
10836
10946
  default: () => [vue.createVNode("div", {
10837
10947
  "class": "v-badge__wrapper"
10838
10948
  }, [ctx.slots.default?.(), vue.createVNode(MaybeTransition, {
@@ -10859,7 +10969,8 @@
10859
10969
  name: 'VBannerActions',
10860
10970
  props: {
10861
10971
  color: String,
10862
- density: String
10972
+ density: String,
10973
+ ...makeComponentProps()
10863
10974
  },
10864
10975
  setup(props, _ref) {
10865
10976
  let {
@@ -10873,7 +10984,8 @@
10873
10984
  }
10874
10985
  });
10875
10986
  useRender(() => vue.createVNode("div", {
10876
- "class": "v-banner-actions"
10987
+ "class": ['v-banner-actions', props.class],
10988
+ "style": props.style
10877
10989
  }, [slots.default?.()]));
10878
10990
  return {};
10879
10991
  }
@@ -10894,6 +11006,7 @@
10894
11006
  sticky: Boolean,
10895
11007
  text: String,
10896
11008
  ...makeBorderProps(),
11009
+ ...makeComponentProps(),
10897
11010
  ...makeDensityProps(),
10898
11011
  ...makeDimensionProps(),
10899
11012
  ...makeElevationProps(),
@@ -10951,8 +11064,8 @@
10951
11064
  'v-banner--stacked': props.stacked || mobile.value,
10952
11065
  'v-banner--sticky': props.sticky,
10953
11066
  [`v-banner--${props.lines}-line`]: !!props.lines
10954
- }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value],
10955
- "style": [dimensionStyles.value, locationStyles.value],
11067
+ }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11068
+ "style": [dimensionStyles.value, locationStyles.value, props.style],
10956
11069
  "role": "banner"
10957
11070
  }, {
10958
11071
  default: () => [hasPrepend && vue.createVNode("div", {
@@ -11008,6 +11121,7 @@
11008
11121
  default: true
11009
11122
  },
11010
11123
  ...makeBorderProps(),
11124
+ ...makeComponentProps(),
11011
11125
  ...makeDensityProps(),
11012
11126
  ...makeElevationProps(),
11013
11127
  ...makeRoundedProps(),
@@ -11082,11 +11196,11 @@
11082
11196
  'v-bottom-navigation--active': isActive.value,
11083
11197
  'v-bottom-navigation--grow': props.grow,
11084
11198
  'v-bottom-navigation--shift': props.mode === 'shift'
11085
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value],
11199
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
11086
11200
  "style": [backgroundColorStyles.value, layoutItemStyles.value, {
11087
11201
  height: convertToUnit(height.value),
11088
11202
  transform: `translateY(${convertToUnit(!isActive.value ? 100 : 0, '%')})`
11089
- }, ssrBootStyles.value]
11203
+ }, ssrBootStyles.value, props.style]
11090
11204
  }, {
11091
11205
  default: () => [slots.default && vue.createVNode("div", {
11092
11206
  "class": "v-bottom-navigation__content"
@@ -11100,14 +11214,16 @@
11100
11214
  const VBreadcrumbsDivider = genericComponent()({
11101
11215
  name: 'VBreadcrumbsDivider',
11102
11216
  props: {
11103
- divider: [Number, String]
11217
+ divider: [Number, String],
11218
+ ...makeComponentProps()
11104
11219
  },
11105
11220
  setup(props, _ref) {
11106
11221
  let {
11107
11222
  slots
11108
11223
  } = _ref;
11109
11224
  useRender(() => vue.createVNode("li", {
11110
- "class": "v-breadcrumbs-divider"
11225
+ "class": ['v-breadcrumbs-divider', props.class],
11226
+ "style": props.style
11111
11227
  }, [slots?.default?.() ?? props.divider]));
11112
11228
  return {};
11113
11229
  }
@@ -11122,6 +11238,7 @@
11122
11238
  color: String,
11123
11239
  disabled: Boolean,
11124
11240
  title: String,
11241
+ ...makeComponentProps(),
11125
11242
  ...makeRouterProps(),
11126
11243
  ...makeTagProps({
11127
11244
  tag: 'li'
@@ -11147,8 +11264,8 @@
11147
11264
  'v-breadcrumbs-item--disabled': props.disabled,
11148
11265
  'v-breadcrumbs-item--link': link.isLink.value,
11149
11266
  [`${props.activeClass}`]: isActive.value && props.activeClass
11150
- }, textColorClasses.value],
11151
- "style": [textColorStyles.value],
11267
+ }, textColorClasses.value, props.class],
11268
+ "style": [textColorStyles.value, props.style],
11152
11269
  "href": link.href.value,
11153
11270
  "aria-current": isActive.value ? 'page' : undefined,
11154
11271
  "onClick": link.navigate
@@ -11179,6 +11296,7 @@
11179
11296
  type: Array,
11180
11297
  default: () => []
11181
11298
  },
11299
+ ...makeComponentProps(),
11182
11300
  ...makeDensityProps(),
11183
11301
  ...makeRoundedProps(),
11184
11302
  ...makeTagProps({
@@ -11210,11 +11328,22 @@
11210
11328
  disabled: vue.toRef(props, 'disabled')
11211
11329
  }
11212
11330
  });
11331
+ const items = vue.computed(() => props.items.map(item => {
11332
+ return typeof item === 'string' ? {
11333
+ item: {
11334
+ title: item
11335
+ },
11336
+ raw: item
11337
+ } : {
11338
+ item,
11339
+ raw: item
11340
+ };
11341
+ }));
11213
11342
  useRender(() => {
11214
11343
  const hasPrepend = !!(slots.prepend || props.icon);
11215
11344
  return vue.createVNode(props.tag, {
11216
- "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
11217
- "style": backgroundColorStyles.value
11345
+ "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value, props.class],
11346
+ "style": [backgroundColorStyles.value, props.style]
11218
11347
  }, {
11219
11348
  default: () => [hasPrepend && vue.createVNode("div", {
11220
11349
  "key": "prepend",
@@ -11232,33 +11361,36 @@
11232
11361
  start: true
11233
11362
  }
11234
11363
  }
11235
- }, slots.prepend)]), props.items.map((item, index, array) => vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
11236
- "key": index,
11237
- "disabled": index >= array.length - 1
11238
- }, typeof item === 'string' ? {
11239
- title: item
11240
- } : item), {
11241
- default: slots.title ? () => slots.title?.({
11242
- item,
11243
- index
11244
- }) : undefined
11245
- }), index < array.length - 1 && vue.createVNode(VBreadcrumbsDivider, null, {
11246
- default: slots.divider ? () => slots.divider?.({
11364
+ }, slots.prepend)]), items.value.map((_ref2, index, array) => {
11365
+ let {
11247
11366
  item,
11248
- index
11249
- }) : undefined
11250
- })])), slots.default?.()]
11367
+ raw
11368
+ } = _ref2;
11369
+ return vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
11370
+ "key": item.title,
11371
+ "disabled": index >= array.length - 1
11372
+ }, item), {
11373
+ default: slots.title ? () => slots.title?.({
11374
+ item: raw,
11375
+ index
11376
+ }) : undefined
11377
+ }), index < array.length - 1 && vue.createVNode(VBreadcrumbsDivider, null, {
11378
+ default: slots.divider ? () => slots.divider?.({
11379
+ item: raw,
11380
+ index
11381
+ }) : undefined
11382
+ })]);
11383
+ }), slots.default?.()]
11251
11384
  });
11252
11385
  });
11253
11386
  return {};
11254
11387
  }
11255
11388
  });
11256
11389
 
11257
- // Types
11258
-
11259
- const VCardActions = defineComponent({
11390
+ const VCardActions = genericComponent()({
11260
11391
  name: 'VCardActions',
11261
- setup(_, _ref) {
11392
+ props: makeComponentProps(),
11393
+ setup(props, _ref) {
11262
11394
  let {
11263
11395
  slots
11264
11396
  } = _ref;
@@ -11268,7 +11400,8 @@
11268
11400
  }
11269
11401
  });
11270
11402
  useRender(() => vue.createVNode("div", {
11271
- "class": "v-card-actions"
11403
+ "class": ['v-card-actions', props.class],
11404
+ "style": props.style
11272
11405
  }, [slots.default?.()]));
11273
11406
  return {};
11274
11407
  }
@@ -11278,8 +11411,6 @@
11278
11411
 
11279
11412
  const VCardTitle = createSimpleFunctional('v-card-title');
11280
11413
 
11281
- // Types
11282
-
11283
11414
  const VCardItem = genericComponent()({
11284
11415
  name: 'VCardItem',
11285
11416
  props: {
@@ -11289,6 +11420,7 @@
11289
11420
  prependIcon: IconValue,
11290
11421
  subtitle: String,
11291
11422
  title: String,
11423
+ ...makeComponentProps(),
11292
11424
  ...makeDensityProps()
11293
11425
  },
11294
11426
  setup(props, _ref) {
@@ -11303,7 +11435,8 @@
11303
11435
  const hasTitle = !!(props.title || slots.title);
11304
11436
  const hasSubtitle = !!(props.subtitle || slots.subtitle);
11305
11437
  return vue.createVNode("div", {
11306
- "class": "v-card-item"
11438
+ "class": ['v-card-item', props.class],
11439
+ "style": props.style
11307
11440
  }, [hasPrepend && vue.createVNode("div", {
11308
11441
  "key": "prepend",
11309
11442
  "class": "v-card-item__prepend"
@@ -11385,8 +11518,8 @@
11385
11518
  subtitle: String,
11386
11519
  text: String,
11387
11520
  title: String,
11388
- ...makeThemeProps(),
11389
11521
  ...makeBorderProps(),
11522
+ ...makeComponentProps(),
11390
11523
  ...makeDensityProps(),
11391
11524
  ...makeDimensionProps(),
11392
11525
  ...makeElevationProps(),
@@ -11396,6 +11529,7 @@
11396
11529
  ...makeRoundedProps(),
11397
11530
  ...makeRouterProps(),
11398
11531
  ...makeTagProps(),
11532
+ ...makeThemeProps(),
11399
11533
  ...makeVariantProps({
11400
11534
  variant: 'elevated'
11401
11535
  })
@@ -11456,8 +11590,8 @@
11456
11590
  'v-card--flat': props.flat,
11457
11591
  'v-card--hover': props.hover && !(props.disabled || props.flat),
11458
11592
  'v-card--link': isClickable.value
11459
- }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
11460
- "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
11593
+ }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
11594
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
11461
11595
  "href": link.href.value,
11462
11596
  "onClick": isClickable.value && link.navigate,
11463
11597
  "tabindex": props.disabled ? -1 : undefined
@@ -11653,6 +11787,7 @@
11653
11787
  mandatory: {
11654
11788
  default: 'force'
11655
11789
  },
11790
+ ...makeComponentProps(),
11656
11791
  ...makeTagProps(),
11657
11792
  ...makeThemeProps()
11658
11793
  }, 'v-window');
@@ -11768,7 +11903,8 @@
11768
11903
  "ref": rootRef,
11769
11904
  "class": ['v-window', {
11770
11905
  'v-window--show-arrows-on-hover': props.showArrows === 'hover'
11771
- }, themeClasses.value]
11906
+ }, themeClasses.value, props.class],
11907
+ "style": props.style
11772
11908
  }, {
11773
11909
  default: () => [vue.createVNode("div", {
11774
11910
  "class": "v-window__container",
@@ -11853,10 +11989,10 @@
11853
11989
  "class": ['v-carousel', {
11854
11990
  'v-carousel--hide-delimiter-background': props.hideDelimiterBackground,
11855
11991
  'v-carousel--vertical-delimiters': props.verticalDelimiters
11856
- }],
11857
- "style": {
11992
+ }, props.class],
11993
+ "style": [{
11858
11994
  height: convertToUnit(props.height)
11859
- },
11995
+ }, props.style],
11860
11996
  "continuous": true,
11861
11997
  "mandatory": "force",
11862
11998
  "showArrows": props.showArrows
@@ -11922,6 +12058,7 @@
11922
12058
  type: [Boolean, String],
11923
12059
  default: undefined
11924
12060
  },
12061
+ ...makeComponentProps(),
11925
12062
  ...makeGroupItemProps(),
11926
12063
  ...makeLazyProps()
11927
12064
  },
@@ -12008,7 +12145,8 @@
12008
12145
  "disabled": !isBooted.value
12009
12146
  }, {
12010
12147
  default: () => [vue.withDirectives(vue.createVNode("div", {
12011
- "class": ['v-window-item', groupItem.selectedClass.value]
12148
+ "class": ['v-window-item', groupItem.selectedClass.value, props.class],
12149
+ "style": props.style
12012
12150
  }, [hasContent.value && slots.default?.()]), [[vue.vShow, groupItem.isSelected.value]])]
12013
12151
  }));
12014
12152
  return {};
@@ -12021,7 +12159,8 @@
12021
12159
  name: 'VCarouselItem',
12022
12160
  inheritAttrs: false,
12023
12161
  props: {
12024
- value: null
12162
+ value: null,
12163
+ ...makeComponentProps()
12025
12164
  },
12026
12165
  setup(props, _ref) {
12027
12166
  let {
@@ -12029,7 +12168,8 @@
12029
12168
  attrs
12030
12169
  } = _ref;
12031
12170
  useRender(() => vue.createVNode(VWindowItem, {
12032
- "class": "v-carousel-item",
12171
+ "class": ['v-carousel-item', props.class],
12172
+ "style": props.style,
12033
12173
  "value": props.value
12034
12174
  }, {
12035
12175
  default: () => [vue.createVNode(VImg, attrs, slots)]
@@ -12042,6 +12182,7 @@
12042
12182
  const makeVSheetProps = propsFactory({
12043
12183
  color: String,
12044
12184
  ...makeBorderProps(),
12185
+ ...makeComponentProps(),
12045
12186
  ...makeDimensionProps(),
12046
12187
  ...makeElevationProps(),
12047
12188
  ...makeLocationProps(),
@@ -12085,8 +12226,8 @@
12085
12226
  roundedClasses
12086
12227
  } = useRounded(props);
12087
12228
  useRender(() => vue.createVNode(props.tag, {
12088
- "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value],
12089
- "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value]
12229
+ "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, props.class],
12230
+ "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value, props.style]
12090
12231
  }, slots));
12091
12232
  return {};
12092
12233
  }
@@ -12112,7 +12253,8 @@
12112
12253
  width: {
12113
12254
  type: [Number, String],
12114
12255
  default: 300
12115
- }
12256
+ },
12257
+ ...makeComponentProps()
12116
12258
  },
12117
12259
  emits: {
12118
12260
  'update:color': color => true,
@@ -12257,7 +12399,8 @@
12257
12399
  vue.onMounted(() => updateCanvas());
12258
12400
  useRender(() => vue.createVNode("div", {
12259
12401
  "ref": resizeRef,
12260
- "class": "v-color-picker-canvas",
12402
+ "class": ['v-color-picker-canvas', props.class],
12403
+ "style": props.style,
12261
12404
  "onClick": handleClick,
12262
12405
  "onMousedown": handleMouseDown,
12263
12406
  "onTouchstart": handleMouseDown
@@ -12490,7 +12633,8 @@
12490
12633
  type: Array,
12491
12634
  default: () => Object.keys(modes),
12492
12635
  validator: v => Array.isArray(v) && v.every(m => Object.keys(modes).includes(m))
12493
- }
12636
+ },
12637
+ ...makeComponentProps()
12494
12638
  },
12495
12639
  emits: {
12496
12640
  'update:color': color => true,
@@ -12530,7 +12674,8 @@
12530
12674
  });
12531
12675
  });
12532
12676
  useRender(() => vue.createVNode("div", {
12533
- "class": "v-color-picker-edit"
12677
+ "class": ['v-color-picker-edit', props.class],
12678
+ "style": props.style
12534
12679
  }, [inputs.value?.map(props => vue.createVNode(VColorPickerInput, props, null)), enabledModes.value.length > 1 && vue.createVNode(VBtn, {
12535
12680
  "icon": "$unfold",
12536
12681
  "size": "x-small",
@@ -12849,7 +12994,8 @@
12849
12994
  ripple: {
12850
12995
  type: Boolean,
12851
12996
  default: true
12852
- }
12997
+ },
12998
+ ...makeComponentProps()
12853
12999
  },
12854
13000
  emits: {
12855
13001
  'update:modelValue': v => true
@@ -12927,11 +13073,11 @@
12927
13073
  "class": ['v-slider-thumb', {
12928
13074
  'v-slider-thumb--focused': props.focused,
12929
13075
  'v-slider-thumb--pressed': props.focused && mousePressed.value
12930
- }],
12931
- "style": {
13076
+ }, props.class],
13077
+ "style": [{
12932
13078
  '--v-slider-thumb-position': positionPercentage,
12933
13079
  '--v-slider-thumb-size': convertToUnit(thumbSize.value)
12934
- },
13080
+ }, props.style],
12935
13081
  "role": "slider",
12936
13082
  "tabindex": disabled.value ? -1 : 0,
12937
13083
  "aria-valuemin": props.min,
@@ -12977,7 +13123,8 @@
12977
13123
  stop: {
12978
13124
  type: Number,
12979
13125
  required: true
12980
- }
13126
+ },
13127
+ ...makeComponentProps()
12981
13128
  },
12982
13129
  emits: {},
12983
13130
  setup(props, _ref) {
@@ -13052,12 +13199,12 @@
13052
13199
  });
13053
13200
  useRender(() => {
13054
13201
  return vue.createVNode("div", {
13055
- "class": ['v-slider-track', roundedClasses.value],
13056
- "style": {
13202
+ "class": ['v-slider-track', roundedClasses.value, props.class],
13203
+ "style": [{
13057
13204
  '--v-slider-track-size': convertToUnit(trackSize.value),
13058
13205
  '--v-slider-tick-size': convertToUnit(tickSize.value),
13059
13206
  direction: !vertical.value ? horizontalDirection.value : undefined
13060
- }
13207
+ }, props.style]
13061
13208
  }, [vue.createVNode("div", {
13062
13209
  "class": ['v-slider-track__background', trackColorClasses.value, {
13063
13210
  'v-slider-track__background--opacity': !!color.value || !trackFillColor.value
@@ -13160,7 +13307,8 @@
13160
13307
  'v-slider--focused': isFocused.value,
13161
13308
  'v-slider--pressed': mousePressed.value,
13162
13309
  'v-slider--disabled': props.disabled
13163
- }]
13310
+ }, props.class],
13311
+ "style": props.style
13164
13312
  }, inputProps, {
13165
13313
  "focused": isFocused.value
13166
13314
  }), {
@@ -13223,7 +13371,8 @@
13223
13371
  type: Object
13224
13372
  },
13225
13373
  disabled: Boolean,
13226
- hideAlpha: Boolean
13374
+ hideAlpha: Boolean,
13375
+ ...makeComponentProps()
13227
13376
  },
13228
13377
  emits: {
13229
13378
  'update:color': color => true
@@ -13235,7 +13384,8 @@
13235
13384
  useRender(() => vue.createVNode("div", {
13236
13385
  "class": ['v-color-picker-preview', {
13237
13386
  'v-color-picker-preview--hide-alpha': props.hideAlpha
13238
- }]
13387
+ }, props.class],
13388
+ "style": props.style
13239
13389
  }, [vue.createVNode("div", {
13240
13390
  "class": "v-color-picker-preview__dot"
13241
13391
  }, [vue.createVNode("div", {
@@ -13616,7 +13766,8 @@
13616
13766
  },
13617
13767
  disabled: Boolean,
13618
13768
  color: Object,
13619
- maxHeight: [Number, String]
13769
+ maxHeight: [Number, String],
13770
+ ...makeComponentProps()
13620
13771
  },
13621
13772
  emits: {
13622
13773
  'update:color': color => true
@@ -13626,10 +13777,10 @@
13626
13777
  emit
13627
13778
  } = _ref;
13628
13779
  useRender(() => vue.createVNode("div", {
13629
- "class": "v-color-picker-swatches",
13630
- "style": {
13780
+ "class": ['v-color-picker-swatches', props.class],
13781
+ "style": [{
13631
13782
  maxHeight: convertToUnit(props.maxHeight)
13632
- }
13783
+ }, props.style]
13633
13784
  }, [vue.createVNode("div", null, [props.swatches.map(swatch => vue.createVNode("div", {
13634
13785
  "class": "v-color-picker-swatches__swatch"
13635
13786
  }, [swatch.map(color => {
@@ -13733,13 +13884,13 @@
13733
13884
  "rounded": props.rounded,
13734
13885
  "elevation": props.elevation,
13735
13886
  "theme": props.theme,
13736
- "class": ['v-color-picker'],
13737
- "style": {
13887
+ "class": ['v-color-picker', props.class],
13888
+ "style": [{
13738
13889
  '--v-color-picker-color-hsv': HSVtoCSS({
13739
13890
  ...(currentColor.value ?? nullColor),
13740
13891
  a: 1
13741
13892
  })
13742
- }
13893
+ }, props.style]
13743
13894
  }, sheetProps, {
13744
13895
  "maxWidth": props.width
13745
13896
  }), {
@@ -14050,7 +14201,8 @@
14050
14201
  'v-combobox--chips': !!props.chips,
14051
14202
  'v-combobox--selecting-index': selectionIndex.value > -1,
14052
14203
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
14053
- }],
14204
+ }, props.class],
14205
+ "style": props.style,
14054
14206
  "appendInnerIcon": props.items.length ? props.menuIcon : undefined,
14055
14207
  "readonly": props.readonly,
14056
14208
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -14207,7 +14359,7 @@
14207
14359
  ![document, overlay.value.contentEl].includes(after) &&
14208
14360
  // It isn't inside the dialog body
14209
14361
  !overlay.value.contentEl.contains(after)) {
14210
- 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"]'));
14362
+ const focusable = focusableChildren(overlay.value.contentEl);
14211
14363
  if (!focusable.length) return;
14212
14364
  const firstElement = focusable[0];
14213
14365
  const lastElement = focusable[focusable.length - 1];
@@ -14248,7 +14400,8 @@
14248
14400
  "class": ['v-dialog', {
14249
14401
  'v-dialog--fullscreen': props.fullscreen,
14250
14402
  'v-dialog--scrollable': props.scrollable
14251
- }]
14403
+ }, props.class],
14404
+ "style": props.style
14252
14405
  }, overlayProps, {
14253
14406
  "modelValue": isActive.value,
14254
14407
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -14287,6 +14440,7 @@
14287
14440
  validator: v => allowedVariants.includes(v)
14288
14441
  },
14289
14442
  readonly: Boolean,
14443
+ ...makeComponentProps(),
14290
14444
  ...makeGroupProps(),
14291
14445
  ...makeTagProps(),
14292
14446
  ...makeThemeProps()
@@ -14312,7 +14466,8 @@
14312
14466
  }
14313
14467
  });
14314
14468
  useRender(() => vue.createVNode(props.tag, {
14315
- "class": ['v-expansion-panels', themeClasses.value, variantClass.value]
14469
+ "class": ['v-expansion-panels', themeClasses.value, variantClass.value, props.class],
14470
+ "style": props.style
14316
14471
  }, slots));
14317
14472
  return {};
14318
14473
  }
@@ -14341,6 +14496,7 @@
14341
14496
  Ripple
14342
14497
  },
14343
14498
  props: {
14499
+ ...makeComponentProps(),
14344
14500
  ...makeVExpansionPanelTitleProps()
14345
14501
  },
14346
14502
  setup(props, _ref) {
@@ -14363,8 +14519,8 @@
14363
14519
  useRender(() => vue.withDirectives(vue.createVNode("button", {
14364
14520
  "class": ['v-expansion-panel-title', {
14365
14521
  'v-expansion-panel-title--active': expansionPanel.isSelected.value
14366
- }, backgroundColorClasses.value],
14367
- "style": backgroundColorStyles.value,
14522
+ }, backgroundColorClasses.value, props.class],
14523
+ "style": [backgroundColorStyles.value, props.style],
14368
14524
  "type": "button",
14369
14525
  "tabindex": expansionPanel.disabled.value ? -1 : undefined,
14370
14526
  "disabled": expansionPanel.disabled.value,
@@ -14384,6 +14540,7 @@
14384
14540
  const VExpansionPanelText = genericComponent()({
14385
14541
  name: 'VExpansionPanelText',
14386
14542
  props: {
14543
+ ...makeComponentProps(),
14387
14544
  ...makeLazyProps()
14388
14545
  },
14389
14546
  setup(props, _ref) {
@@ -14400,7 +14557,8 @@
14400
14557
  "onAfterLeave": onAfterLeave
14401
14558
  }, {
14402
14559
  default: () => [vue.withDirectives(vue.createVNode("div", {
14403
- "class": "v-expansion-panel-text"
14560
+ "class": ['v-expansion-panel-text', props.class],
14561
+ "style": props.style
14404
14562
  }, [slots.default && hasContent.value && vue.createVNode("div", {
14405
14563
  "class": "v-expansion-panel-text__wrapper"
14406
14564
  }, [slots.default?.()])]), [[vue.vShow, expansionPanel.isSelected.value]])]
@@ -14415,6 +14573,7 @@
14415
14573
  title: String,
14416
14574
  text: String,
14417
14575
  bgColor: String,
14576
+ ...makeComponentProps(),
14418
14577
  ...makeElevationProps(),
14419
14578
  ...makeGroupItemProps(),
14420
14579
  ...makeLazyProps(),
@@ -14463,8 +14622,8 @@
14463
14622
  'v-expansion-panel--before-active': isBeforeSelected.value,
14464
14623
  'v-expansion-panel--after-active': isAfterSelected.value,
14465
14624
  'v-expansion-panel--disabled': isDisabled.value
14466
- }, roundedClasses.value, backgroundColorClasses.value],
14467
- "style": backgroundColorStyles.value,
14625
+ }, roundedClasses.value, backgroundColorClasses.value, props.class],
14626
+ "style": [backgroundColorStyles.value, props.style],
14468
14627
  "aria-expanded": groupItem.isSelected.value
14469
14628
  }, {
14470
14629
  default: () => [vue.createVNode("div", {
@@ -14614,7 +14773,8 @@
14614
14773
  "ref": vInputRef,
14615
14774
  "modelValue": model.value,
14616
14775
  "onUpdate:modelValue": $event => model.value = $event,
14617
- "class": "v-file-input",
14776
+ "class": ['v-file-input', props.class],
14777
+ "style": props.style,
14618
14778
  "onClick:prepend": onClickPrepend
14619
14779
  }, rootAttrs, inputProps, {
14620
14780
  "focused": isFocused.value
@@ -14706,6 +14866,7 @@
14706
14866
  default: 'auto'
14707
14867
  },
14708
14868
  ...makeBorderProps(),
14869
+ ...makeComponentProps(),
14709
14870
  ...makeElevationProps(),
14710
14871
  ...makeLayoutItemProps(),
14711
14872
  ...makeRoundedProps(),
@@ -14755,8 +14916,8 @@
14755
14916
  });
14756
14917
  useRender(() => vue.createVNode(props.tag, {
14757
14918
  "ref": resizeRef,
14758
- "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
14759
- "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined]
14919
+ "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
14920
+ "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined, props.style]
14760
14921
  }, slots));
14761
14922
  return {};
14762
14923
  }
@@ -14767,6 +14928,7 @@
14767
14928
  const VForm = genericComponent()({
14768
14929
  name: 'VForm',
14769
14930
  props: {
14931
+ ...makeComponentProps(),
14770
14932
  ...makeFormProps()
14771
14933
  },
14772
14934
  emits: {
@@ -14805,7 +14967,8 @@
14805
14967
  }
14806
14968
  useRender(() => vue.createVNode("form", {
14807
14969
  "ref": formRef,
14808
- "class": "v-form",
14970
+ "class": ['v-form', props.class],
14971
+ "style": props.style,
14809
14972
  "novalidate": true,
14810
14973
  "onReset": onReset,
14811
14974
  "onSubmit": onSubmit
@@ -14821,6 +14984,7 @@
14821
14984
  type: Boolean,
14822
14985
  default: false
14823
14986
  },
14987
+ ...makeComponentProps(),
14824
14988
  ...makeTagProps()
14825
14989
  },
14826
14990
  setup(props, _ref) {
@@ -14830,7 +14994,8 @@
14830
14994
  useRender(() => vue.createVNode(props.tag, {
14831
14995
  "class": ['v-container', {
14832
14996
  'v-container--fluid': props.fluid
14833
- }]
14997
+ }, props.class],
14998
+ "style": props.style
14834
14999
  }, slots));
14835
15000
  return {};
14836
15001
  }
@@ -14921,6 +15086,7 @@
14921
15086
  default: null,
14922
15087
  validator: str => ALIGN_SELF_VALUES.includes(str)
14923
15088
  },
15089
+ ...makeComponentProps(),
14924
15090
  ...makeTagProps()
14925
15091
  },
14926
15092
  setup(props, _ref) {
@@ -14951,7 +15117,8 @@
14951
15117
  return classList;
14952
15118
  });
14953
15119
  return () => vue.h(props.tag, {
14954
- class: classes.value
15120
+ class: [classes.value, props.class],
15121
+ style: props.style
14955
15122
  }, slots.default?.());
14956
15123
  }
14957
15124
  });
@@ -15037,6 +15204,7 @@
15037
15204
  validator: alignContentValidator
15038
15205
  },
15039
15206
  ...alignContentProps,
15207
+ ...makeComponentProps(),
15040
15208
  ...makeTagProps()
15041
15209
  },
15042
15210
  setup(props, _ref) {
@@ -15065,7 +15233,8 @@
15065
15233
  return classList;
15066
15234
  });
15067
15235
  return () => vue.h(props.tag, {
15068
- class: ['v-row', classes.value]
15236
+ class: ['v-row', classes.value, props.class],
15237
+ style: props.style
15069
15238
  }, slots.default?.());
15070
15239
  }
15071
15240
  });
@@ -15109,6 +15278,7 @@
15109
15278
  const VItemGroup = genericComponent()({
15110
15279
  name: 'VItemGroup',
15111
15280
  props: {
15281
+ ...makeComponentProps(),
15112
15282
  ...makeGroupProps({
15113
15283
  selectedClass: 'v-item--selected'
15114
15284
  }),
@@ -15133,7 +15303,8 @@
15133
15303
  selected
15134
15304
  } = useGroup(props, VItemGroupSymbol);
15135
15305
  return () => vue.createVNode(props.tag, {
15136
- "class": ['v-item-group', themeClasses.value]
15306
+ "class": ['v-item-group', themeClasses.value, props.class],
15307
+ "style": props.style
15137
15308
  }, {
15138
15309
  default: () => [slots.default?.({
15139
15310
  isSelected,
@@ -15183,7 +15354,10 @@
15183
15354
 
15184
15355
  const VLayout = genericComponent()({
15185
15356
  name: 'VLayout',
15186
- props: makeLayoutProps(),
15357
+ props: {
15358
+ ...makeComponentProps(),
15359
+ ...makeLayoutProps()
15360
+ },
15187
15361
  setup(props, _ref) {
15188
15362
  let {
15189
15363
  slots
@@ -15197,8 +15371,8 @@
15197
15371
  } = createLayout(props);
15198
15372
  useRender(() => vue.createVNode("div", {
15199
15373
  "ref": layoutRef,
15200
- "class": layoutClasses.value,
15201
- "style": layoutStyles.value
15374
+ "class": [layoutClasses.value, props.class],
15375
+ "style": [layoutStyles.value, props.style]
15202
15376
  }, [slots.default?.()]));
15203
15377
  return {
15204
15378
  getLayoutItem,
@@ -15221,6 +15395,7 @@
15221
15395
  default: 300
15222
15396
  },
15223
15397
  modelValue: Boolean,
15398
+ ...makeComponentProps(),
15224
15399
  ...makeLayoutItemProps()
15225
15400
  },
15226
15401
  setup(props, _ref) {
@@ -15239,8 +15414,8 @@
15239
15414
  absolute: vue.toRef(props, 'absolute')
15240
15415
  });
15241
15416
  return () => vue.createVNode("div", {
15242
- "class": ['v-layout-item'],
15243
- "style": layoutItemStyles.value
15417
+ "class": ['v-layout-item', props.class],
15418
+ "style": [layoutItemStyles.value, props.style]
15244
15419
  }, [slots.default?.()]);
15245
15420
  }
15246
15421
  });
@@ -15264,6 +15439,7 @@
15264
15439
  threshold: undefined
15265
15440
  })
15266
15441
  },
15442
+ ...makeComponentProps(),
15267
15443
  ...makeDimensionProps(),
15268
15444
  ...makeTagProps(),
15269
15445
  ...makeTransitionProps({
@@ -15286,8 +15462,8 @@
15286
15462
  isActive.value = isIntersecting;
15287
15463
  }
15288
15464
  useRender(() => vue.withDirectives(vue.createVNode(props.tag, {
15289
- "class": "v-lazy",
15290
- "style": dimensionStyles.value
15465
+ "class": ['v-lazy', props.class],
15466
+ "style": [dimensionStyles.value, props.style]
15291
15467
  }, {
15292
15468
  default: () => [isActive.value && vue.createVNode(MaybeTransition, {
15293
15469
  "transition": props.transition,
@@ -15312,7 +15488,8 @@
15312
15488
  rtl: {
15313
15489
  type: Boolean,
15314
15490
  default: undefined
15315
- }
15491
+ },
15492
+ ...makeComponentProps()
15316
15493
  },
15317
15494
  setup(props, _ref) {
15318
15495
  let {
@@ -15322,7 +15499,8 @@
15322
15499
  rtlClasses
15323
15500
  } = provideLocale(props);
15324
15501
  useRender(() => vue.createVNode("div", {
15325
- "class": ['v-locale-provider', rtlClasses.value]
15502
+ "class": ['v-locale-provider', rtlClasses.value, props.class],
15503
+ "style": props.style
15326
15504
  }, [slots.default?.()]));
15327
15505
  return {};
15328
15506
  }
@@ -15332,6 +15510,7 @@
15332
15510
  name: 'VMain',
15333
15511
  props: {
15334
15512
  scrollable: Boolean,
15513
+ ...makeComponentProps(),
15335
15514
  ...makeTagProps({
15336
15515
  tag: 'main'
15337
15516
  })
@@ -15349,8 +15528,8 @@
15349
15528
  useRender(() => vue.createVNode(props.tag, {
15350
15529
  "class": ['v-main', {
15351
15530
  'v-main--scrollable': props.scrollable
15352
- }],
15353
- "style": [mainStyles.value, ssrBootStyles.value]
15531
+ }, props.class],
15532
+ "style": [mainStyles.value, ssrBootStyles.value, props.style]
15354
15533
  }, {
15355
15534
  default: () => [props.scrollable ? vue.createVNode("div", {
15356
15535
  "class": "v-main__scroller"
@@ -15360,593 +15539,167 @@
15360
15539
  }
15361
15540
  });
15362
15541
 
15363
- // Utilities
15364
-
15365
- // Types
15366
-
15367
- function getWeekArray(date) {
15368
- let currentWeek = [];
15369
- const weeks = [];
15370
- const firstDayOfMonth = startOfMonth(date);
15371
- const lastDayOfMonth = endOfMonth(date);
15372
- for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
15373
- currentWeek.push(null);
15542
+ function useSticky(_ref) {
15543
+ let {
15544
+ rootEl,
15545
+ isSticky,
15546
+ layoutItemStyles
15547
+ } = _ref;
15548
+ const isStuck = vue.ref(false);
15549
+ const stuckPosition = vue.ref(0);
15550
+ const stickyStyles = vue.computed(() => {
15551
+ const side = typeof isStuck.value === 'boolean' ? 'top' : isStuck.value;
15552
+ return [isSticky.value ? {
15553
+ top: 'auto',
15554
+ bottom: 'auto',
15555
+ height: undefined
15556
+ } : undefined, isStuck.value ? {
15557
+ [side]: convertToUnit(stuckPosition.value)
15558
+ } : {
15559
+ top: layoutItemStyles.value.top
15560
+ }];
15561
+ });
15562
+ vue.onMounted(() => {
15563
+ vue.watch(isSticky, val => {
15564
+ if (val) {
15565
+ window.addEventListener('scroll', onScroll, {
15566
+ passive: true
15567
+ });
15568
+ } else {
15569
+ window.removeEventListener('scroll', onScroll);
15570
+ }
15571
+ }, {
15572
+ immediate: true
15573
+ });
15574
+ });
15575
+ vue.onBeforeUnmount(() => {
15576
+ document.removeEventListener('scroll', onScroll);
15577
+ });
15578
+ let lastScrollTop = 0;
15579
+ function onScroll() {
15580
+ const direction = lastScrollTop > window.scrollY ? 'up' : 'down';
15581
+ const rect = rootEl.value.getBoundingClientRect();
15582
+ const layoutTop = parseFloat(layoutItemStyles.value.top ?? 0);
15583
+ const top = window.scrollY - Math.max(0, stuckPosition.value - layoutTop);
15584
+ const bottom = rect.height + Math.max(stuckPosition.value, layoutTop) - window.scrollY - window.innerHeight;
15585
+ if (rect.height < window.innerHeight - layoutTop) {
15586
+ isStuck.value = 'top';
15587
+ stuckPosition.value = layoutTop;
15588
+ } else if (direction === 'up' && isStuck.value === 'bottom' || direction === 'down' && isStuck.value === 'top') {
15589
+ stuckPosition.value = window.scrollY + rect.top;
15590
+ isStuck.value = true;
15591
+ } else if (direction === 'down' && bottom <= 0) {
15592
+ stuckPosition.value = 0;
15593
+ isStuck.value = 'bottom';
15594
+ } else if (direction === 'up' && top <= 0) {
15595
+ stuckPosition.value = rect.top + top;
15596
+ isStuck.value = 'top';
15597
+ }
15598
+ lastScrollTop = window.scrollY;
15374
15599
  }
15375
- for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
15376
- const day = new Date(date.getFullYear(), date.getMonth(), i);
15600
+ return {
15601
+ isStuck,
15602
+ stickyStyles
15603
+ };
15604
+ }
15377
15605
 
15378
- // Add the day to the current week
15379
- currentWeek.push(day);
15606
+ const HORIZON = 100; // ms
15607
+ const HISTORY = 20; // number of samples to keep
15380
15608
 
15381
- // If the current week has 7 days, add it to the weeks array and start a new week
15382
- if (currentWeek.length === 7) {
15383
- weeks.push(currentWeek);
15384
- currentWeek = [];
15609
+ /** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */
15610
+ function kineticEnergyToVelocity(work) {
15611
+ const sqrt2 = 1.41421356237;
15612
+ return (work < 0 ? -1.0 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;
15613
+ }
15614
+
15615
+ /**
15616
+ * Returns pointer velocity in px/s
15617
+ */
15618
+ function calculateImpulseVelocity(samples) {
15619
+ // The input should be in reversed time order (most recent sample at index i=0)
15620
+ if (samples.length < 2) {
15621
+ // if 0 or 1 points, velocity is zero
15622
+ return 0;
15623
+ }
15624
+ // if (samples[1].t > samples[0].t) {
15625
+ // // Algorithm will still work, but not perfectly
15626
+ // consoleWarn('Samples provided to calculateImpulseVelocity in the wrong order')
15627
+ // }
15628
+ if (samples.length === 2) {
15629
+ // if 2 points, basic linear calculation
15630
+ if (samples[1].t === samples[0].t) {
15631
+ // consoleWarn(`Events have identical time stamps t=${samples[0].t}, setting velocity = 0`)
15632
+ return 0;
15385
15633
  }
15634
+ return (samples[1].d - samples[0].d) / (samples[1].t - samples[0].t);
15386
15635
  }
15387
- for (let i = currentWeek.length; i < 7; i++) {
15388
- currentWeek.push(null);
15636
+ // Guaranteed to have at least 3 points here
15637
+ // start with the oldest sample and go forward in time
15638
+ let work = 0;
15639
+ for (let i = samples.length - 1; i > 0; i--) {
15640
+ if (samples[i].t === samples[i - 1].t) {
15641
+ // consoleWarn(`Events have identical time stamps t=${samples[i].t}, skipping sample`)
15642
+ continue;
15643
+ }
15644
+ const vprev = kineticEnergyToVelocity(work); // v[i-1]
15645
+ const vcurr = (samples[i].d - samples[i - 1].d) / (samples[i].t - samples[i - 1].t); // v[i]
15646
+ work += (vcurr - vprev) * Math.abs(vcurr);
15647
+ if (i === samples.length - 1) {
15648
+ work *= 0.5;
15649
+ }
15389
15650
  }
15390
- weeks.push(currentWeek);
15391
- return weeks;
15392
- }
15393
- function startOfMonth(date) {
15394
- return new Date(date.getFullYear(), date.getMonth(), 1);
15395
- }
15396
- function endOfMonth(date) {
15397
- return new Date(date.getFullYear(), date.getMonth() + 1, 0);
15651
+ return kineticEnergyToVelocity(work) * 1000;
15398
15652
  }
15399
- function date(value) {
15400
- if (value == null) return null;
15401
- if (value instanceof Date) return value;
15402
- if (typeof value === 'string') {
15403
- const parsed = Date.parse(value);
15404
- if (!isNaN(parsed)) return new Date(parsed);
15653
+ function useVelocity() {
15654
+ const touches = {};
15655
+ function addMovement(e) {
15656
+ Array.from(e.changedTouches).forEach(touch => {
15657
+ const samples = touches[touch.identifier] ?? (touches[touch.identifier] = new CircularBuffer(HISTORY));
15658
+ samples.push([e.timeStamp, touch]);
15659
+ });
15405
15660
  }
15406
- return null;
15407
- }
15408
- const firstDay = {
15409
- '001': 1,
15410
- AD: 1,
15411
- AE: 6,
15412
- AF: 6,
15413
- AG: 0,
15414
- AI: 1,
15415
- AL: 1,
15416
- AM: 1,
15417
- AN: 1,
15418
- AR: 1,
15419
- AS: 0,
15420
- AT: 1,
15421
- AU: 0,
15422
- AX: 1,
15423
- AZ: 1,
15424
- BA: 1,
15425
- BD: 0,
15426
- BE: 1,
15427
- BG: 1,
15428
- BH: 6,
15429
- BM: 1,
15430
- BN: 1,
15431
- BR: 0,
15432
- BS: 0,
15433
- BT: 0,
15434
- BW: 0,
15435
- BY: 1,
15436
- BZ: 0,
15437
- CA: 0,
15438
- CH: 1,
15439
- CL: 1,
15440
- CM: 1,
15441
- CN: 0,
15442
- CO: 0,
15443
- CR: 1,
15444
- CY: 1,
15445
- CZ: 1,
15446
- DE: 1,
15447
- DJ: 6,
15448
- DK: 1,
15449
- DM: 0,
15450
- DO: 0,
15451
- DZ: 6,
15452
- EC: 1,
15453
- EE: 1,
15454
- EG: 6,
15455
- ES: 1,
15456
- ET: 0,
15457
- FI: 1,
15458
- FJ: 1,
15459
- FO: 1,
15460
- FR: 1,
15461
- GB: 1,
15462
- 'GB-alt-variant': 0,
15463
- GE: 1,
15464
- GF: 1,
15465
- GP: 1,
15466
- GR: 1,
15467
- GT: 0,
15468
- GU: 0,
15469
- HK: 0,
15470
- HN: 0,
15471
- HR: 1,
15472
- HU: 1,
15473
- ID: 0,
15474
- IE: 1,
15475
- IL: 0,
15476
- IN: 0,
15477
- IQ: 6,
15478
- IR: 6,
15479
- IS: 1,
15480
- IT: 1,
15481
- JM: 0,
15482
- JO: 6,
15483
- JP: 0,
15484
- KE: 0,
15485
- KG: 1,
15486
- KH: 0,
15487
- KR: 0,
15488
- KW: 6,
15489
- KZ: 1,
15490
- LA: 0,
15491
- LB: 1,
15492
- LI: 1,
15493
- LK: 1,
15494
- LT: 1,
15495
- LU: 1,
15496
- LV: 1,
15497
- LY: 6,
15498
- MC: 1,
15499
- MD: 1,
15500
- ME: 1,
15501
- MH: 0,
15502
- MK: 1,
15503
- MM: 0,
15504
- MN: 1,
15505
- MO: 0,
15506
- MQ: 1,
15507
- MT: 0,
15508
- MV: 5,
15509
- MX: 0,
15510
- MY: 1,
15511
- MZ: 0,
15512
- NI: 0,
15513
- NL: 1,
15514
- NO: 1,
15515
- NP: 0,
15516
- NZ: 1,
15517
- OM: 6,
15518
- PA: 0,
15519
- PE: 0,
15520
- PH: 0,
15521
- PK: 0,
15522
- PL: 1,
15523
- PR: 0,
15524
- PT: 0,
15525
- PY: 0,
15526
- QA: 6,
15527
- RE: 1,
15528
- RO: 1,
15529
- RS: 1,
15530
- RU: 1,
15531
- SA: 0,
15532
- SD: 6,
15533
- SE: 1,
15534
- SG: 0,
15535
- SI: 1,
15536
- SK: 1,
15537
- SM: 1,
15538
- SV: 0,
15539
- SY: 6,
15540
- TH: 0,
15541
- TJ: 1,
15542
- TM: 1,
15543
- TR: 1,
15544
- TT: 0,
15545
- TW: 0,
15546
- UA: 1,
15547
- UM: 0,
15548
- US: 0,
15549
- UY: 1,
15550
- UZ: 1,
15551
- VA: 1,
15552
- VE: 0,
15553
- VI: 0,
15554
- VN: 1,
15555
- WS: 0,
15556
- XK: 1,
15557
- YE: 0,
15558
- ZA: 0,
15559
- ZW: 0
15560
- };
15561
- const sundayJanuarySecond2000 = new Date(2000, 0, 2);
15562
- function getWeekdays(locale) {
15563
- const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
15564
- return createRange(7).map(i => {
15565
- const weekday = new Date(sundayJanuarySecond2000);
15566
- weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
15567
- return new Intl.DateTimeFormat(locale, {
15568
- weekday: 'long'
15569
- }).format(weekday);
15570
- });
15571
- }
15572
- function format(value, formatString, locale) {
15573
- const date = new Date(value);
15574
- let options = {};
15575
- switch (formatString) {
15576
- case 'fullDateWithWeekday':
15577
- options = {
15578
- weekday: 'long',
15579
- day: 'numeric',
15580
- month: 'long',
15581
- year: 'numeric'
15582
- };
15583
- break;
15584
- case 'normalDateWithWeekday':
15585
- options = {
15586
- weekday: 'short',
15587
- day: 'numeric',
15588
- month: 'short',
15589
- year: 'numeric'
15590
- };
15591
- break;
15592
- case 'keyboardDate':
15593
- options = {};
15594
- break;
15595
- case 'monthAndDate':
15596
- options = {
15597
- month: 'long',
15598
- day: 'numeric'
15599
- };
15600
- break;
15601
- case 'monthAndYear':
15602
- options = {
15603
- month: 'long',
15604
- year: 'numeric'
15605
- };
15606
- break;
15607
- default:
15608
- options = {
15609
- timeZone: 'UTC',
15610
- timeZoneName: 'short'
15611
- };
15612
- }
15613
- return new Intl.DateTimeFormat(locale, options).format(date);
15614
- }
15615
- function addDays(date, amount) {
15616
- const d = new Date(date);
15617
- d.setDate(d.getDate() + amount);
15618
- return d;
15619
- }
15620
- function addMonths(date, amount) {
15621
- const d = new Date(date);
15622
- d.setMonth(d.getMonth() + amount);
15623
- return d;
15624
- }
15625
- function getYear(date) {
15626
- return date.getFullYear();
15627
- }
15628
- function getMonth(date) {
15629
- return date.getMonth();
15630
- }
15631
- function startOfYear(date) {
15632
- return new Date(date.getFullYear(), 0, 1);
15633
- }
15634
- function endOfYear(date) {
15635
- return new Date(date.getFullYear(), 11, 31);
15636
- }
15637
- function getMondayOfFirstWeekOfYear(year) {
15638
- return new Date(year, 0, 1);
15639
- }
15640
-
15641
- // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
15642
- function getWeek(date) {
15643
- let year = date.getFullYear();
15644
- let d1w1 = getMondayOfFirstWeekOfYear(year);
15645
- if (date < d1w1) {
15646
- year = year - 1;
15647
- d1w1 = getMondayOfFirstWeekOfYear(year);
15648
- } else {
15649
- const tv = getMondayOfFirstWeekOfYear(year + 1);
15650
- if (date >= tv) {
15651
- year = year + 1;
15652
- d1w1 = tv;
15653
- }
15654
- }
15655
- const diffTime = Math.abs(date.getTime() - d1w1.getTime());
15656
- const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
15657
- return Math.floor(diffDays / 7) + 1;
15658
- }
15659
- function isWithinRange(date, range) {
15660
- return isAfter(date, range[0]) && isBefore(date, range[1]);
15661
- }
15662
- function isValid(date) {
15663
- const d = new Date(date);
15664
- return d instanceof Date && !isNaN(d.getTime());
15665
- }
15666
- function isAfter(date, comparing) {
15667
- return date.getTime() > comparing.getTime();
15668
- }
15669
- function isBefore(date, comparing) {
15670
- return date.getTime() < comparing.getTime();
15671
- }
15672
- function isEqual(date, comparing) {
15673
- return date.getTime() === comparing.getTime();
15674
- }
15675
- function isSameDay(date, comparing) {
15676
- return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
15677
- }
15678
- function isSameMonth(date, comparing) {
15679
- return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
15680
- }
15681
- function getDiff(date, comparing, unit) {
15682
- const d = new Date(date);
15683
- const c = new Date(comparing);
15684
- if (unit === 'month') {
15685
- return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
15686
- }
15687
- return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
15688
- }
15689
- function setYear(date, year) {
15690
- const d = new Date(date);
15691
- d.setFullYear(year);
15692
- return d;
15693
- }
15694
- class VuetifyDateAdapter {
15695
- constructor() {
15696
- let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
15697
- this.locale = locale;
15698
- }
15699
- date(value) {
15700
- return date(value);
15701
- }
15702
- addDays(date, amount) {
15703
- return addDays(date, amount);
15704
- }
15705
- addMonths(date, amount) {
15706
- return addMonths(date, amount);
15707
- }
15708
- getWeekArray(date) {
15709
- return getWeekArray(date);
15710
- }
15711
- startOfMonth(date) {
15712
- return startOfMonth(date);
15713
- }
15714
- endOfMonth(date) {
15715
- return endOfMonth(date);
15716
- }
15717
- format(date, formatString) {
15718
- return format(date, formatString, this.locale);
15719
- }
15720
- isEqual(date, comparing) {
15721
- return isEqual(date, comparing);
15722
- }
15723
- isValid(date) {
15724
- return isValid(date);
15725
- }
15726
- isWithinRange(date, range) {
15727
- return isWithinRange(date, range);
15728
- }
15729
- isAfter(date, comparing) {
15730
- return isAfter(date, comparing);
15731
- }
15732
- isSameDay(date, comparing) {
15733
- return isSameDay(date, comparing);
15734
- }
15735
- isSameMonth(date, comparing) {
15736
- return isSameMonth(date, comparing);
15737
- }
15738
- setYear(date, year) {
15739
- return setYear(date, year);
15740
- }
15741
- getDiff(date, comparing, unit) {
15742
- return getDiff(date, comparing, unit);
15743
- }
15744
- getWeek(date) {
15745
- return getWeek(date);
15746
- }
15747
- getWeekdays() {
15748
- return getWeekdays(this.locale);
15749
- }
15750
- getYear(date) {
15751
- return getYear(date);
15752
- }
15753
- getMonth(date) {
15754
- return getMonth(date);
15755
- }
15756
- startOfYear(date) {
15757
- return startOfYear(date);
15758
- }
15759
- endOfYear(date) {
15760
- return endOfYear(date);
15761
- }
15762
- }
15763
-
15764
- // Composables
15765
-
15766
- // Types
15767
-
15768
- const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
15769
- function createDate(options) {
15770
- return options ?? {
15771
- adapter: VuetifyDateAdapter
15772
- };
15773
- }
15774
- function useDate(props) {
15775
- const date = vue.inject(DateAdapterSymbol);
15776
- const locale = useLocale();
15777
- if (!date) throw new Error('[Vuetify] Could not find injected date');
15778
-
15779
- // eslint-disable-next-line new-cap
15780
- const instance = new date.adapter(locale.current.value);
15781
- vue.watch(locale.current, val => {
15782
- instance.locale = val;
15783
- }, {
15784
- immediate: true
15785
- });
15786
- return instance;
15787
- }
15788
-
15789
- function useSticky(_ref) {
15790
- let {
15791
- rootEl,
15792
- isSticky,
15793
- layoutItemStyles
15794
- } = _ref;
15795
- const isStuck = vue.ref(false);
15796
- const stuckPosition = vue.ref(0);
15797
- const stickyStyles = vue.computed(() => {
15798
- const side = typeof isStuck.value === 'boolean' ? 'top' : isStuck.value;
15799
- return [isSticky.value ? {
15800
- top: 'auto',
15801
- bottom: 'auto',
15802
- height: undefined
15803
- } : undefined, isStuck.value ? {
15804
- [side]: convertToUnit(stuckPosition.value)
15805
- } : {
15806
- top: layoutItemStyles.value.top
15807
- }];
15808
- });
15809
- vue.onMounted(() => {
15810
- vue.watch(isSticky, val => {
15811
- if (val) {
15812
- window.addEventListener('scroll', onScroll, {
15813
- passive: true
15814
- });
15815
- } else {
15816
- window.removeEventListener('scroll', onScroll);
15817
- }
15818
- }, {
15819
- immediate: true
15820
- });
15821
- });
15822
- vue.onBeforeUnmount(() => {
15823
- document.removeEventListener('scroll', onScroll);
15824
- });
15825
- let lastScrollTop = 0;
15826
- function onScroll() {
15827
- const direction = lastScrollTop > window.scrollY ? 'up' : 'down';
15828
- const rect = rootEl.value.getBoundingClientRect();
15829
- const layoutTop = parseFloat(layoutItemStyles.value.top ?? 0);
15830
- const top = window.scrollY - Math.max(0, stuckPosition.value - layoutTop);
15831
- const bottom = rect.height + Math.max(stuckPosition.value, layoutTop) - window.scrollY - window.innerHeight;
15832
- if (rect.height < window.innerHeight - layoutTop) {
15833
- isStuck.value = 'top';
15834
- stuckPosition.value = layoutTop;
15835
- } else if (direction === 'up' && isStuck.value === 'bottom' || direction === 'down' && isStuck.value === 'top') {
15836
- stuckPosition.value = window.scrollY + rect.top;
15837
- isStuck.value = true;
15838
- } else if (direction === 'down' && bottom <= 0) {
15839
- stuckPosition.value = 0;
15840
- isStuck.value = 'bottom';
15841
- } else if (direction === 'up' && top <= 0) {
15842
- stuckPosition.value = rect.top + top;
15843
- isStuck.value = 'top';
15844
- }
15845
- lastScrollTop = window.scrollY;
15846
- }
15847
- return {
15848
- isStuck,
15849
- stickyStyles
15850
- };
15851
- }
15852
-
15853
- const HORIZON = 100; // ms
15854
- const HISTORY = 20; // number of samples to keep
15855
-
15856
- /** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */
15857
- function kineticEnergyToVelocity(work) {
15858
- const sqrt2 = 1.41421356237;
15859
- return (work < 0 ? -1.0 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;
15860
- }
15861
-
15862
- /**
15863
- * Returns pointer velocity in px/s
15864
- */
15865
- function calculateImpulseVelocity(samples) {
15866
- // The input should be in reversed time order (most recent sample at index i=0)
15867
- if (samples.length < 2) {
15868
- // if 0 or 1 points, velocity is zero
15869
- return 0;
15870
- }
15871
- // if (samples[1].t > samples[0].t) {
15872
- // // Algorithm will still work, but not perfectly
15873
- // consoleWarn('Samples provided to calculateImpulseVelocity in the wrong order')
15874
- // }
15875
- if (samples.length === 2) {
15876
- // if 2 points, basic linear calculation
15877
- if (samples[1].t === samples[0].t) {
15878
- // consoleWarn(`Events have identical time stamps t=${samples[0].t}, setting velocity = 0`)
15879
- return 0;
15880
- }
15881
- return (samples[1].d - samples[0].d) / (samples[1].t - samples[0].t);
15882
- }
15883
- // Guaranteed to have at least 3 points here
15884
- // start with the oldest sample and go forward in time
15885
- let work = 0;
15886
- for (let i = samples.length - 1; i > 0; i--) {
15887
- if (samples[i].t === samples[i - 1].t) {
15888
- // consoleWarn(`Events have identical time stamps t=${samples[i].t}, skipping sample`)
15889
- continue;
15890
- }
15891
- const vprev = kineticEnergyToVelocity(work); // v[i-1]
15892
- const vcurr = (samples[i].d - samples[i - 1].d) / (samples[i].t - samples[i - 1].t); // v[i]
15893
- work += (vcurr - vprev) * Math.abs(vcurr);
15894
- if (i === samples.length - 1) {
15895
- work *= 0.5;
15896
- }
15897
- }
15898
- return kineticEnergyToVelocity(work) * 1000;
15899
- }
15900
- function useVelocity() {
15901
- const touches = {};
15902
- function addMovement(e) {
15903
- Array.from(e.changedTouches).forEach(touch => {
15904
- const samples = touches[touch.identifier] ?? (touches[touch.identifier] = new CircularBuffer(HISTORY));
15905
- samples.push([e.timeStamp, touch]);
15906
- });
15907
- }
15908
- function endTouch(e) {
15909
- Array.from(e.changedTouches).forEach(touch => {
15910
- delete touches[touch.identifier];
15911
- });
15912
- }
15913
- function getVelocity(id) {
15914
- const samples = touches[id]?.values().reverse();
15915
- if (!samples) {
15916
- throw new Error(`No samples for touch id ${id}`);
15917
- }
15918
- const newest = samples[0];
15919
- const x = [];
15920
- const y = [];
15921
- for (const val of samples) {
15922
- if (newest[0] - val[0] > HORIZON) break;
15923
- x.push({
15924
- t: val[0],
15925
- d: val[1].clientX
15926
- });
15927
- y.push({
15928
- t: val[0],
15929
- d: val[1].clientY
15930
- });
15931
- }
15932
- return {
15933
- x: calculateImpulseVelocity(x),
15934
- y: calculateImpulseVelocity(y),
15935
- get direction() {
15936
- const {
15937
- x,
15938
- y
15939
- } = this;
15940
- const [absX, absY] = [Math.abs(x), Math.abs(y)];
15941
- return absX > absY && x >= 0 ? 'right' : absX > absY && x <= 0 ? 'left' : absY > absX && y >= 0 ? 'down' : absY > absX && y <= 0 ? 'up' : oops$1();
15942
- }
15943
- };
15944
- }
15945
- return {
15946
- addMovement,
15947
- endTouch,
15948
- getVelocity
15949
- };
15661
+ function endTouch(e) {
15662
+ Array.from(e.changedTouches).forEach(touch => {
15663
+ delete touches[touch.identifier];
15664
+ });
15665
+ }
15666
+ function getVelocity(id) {
15667
+ const samples = touches[id]?.values().reverse();
15668
+ if (!samples) {
15669
+ throw new Error(`No samples for touch id ${id}`);
15670
+ }
15671
+ const newest = samples[0];
15672
+ const x = [];
15673
+ const y = [];
15674
+ for (const val of samples) {
15675
+ if (newest[0] - val[0] > HORIZON) break;
15676
+ x.push({
15677
+ t: val[0],
15678
+ d: val[1].clientX
15679
+ });
15680
+ y.push({
15681
+ t: val[0],
15682
+ d: val[1].clientY
15683
+ });
15684
+ }
15685
+ return {
15686
+ x: calculateImpulseVelocity(x),
15687
+ y: calculateImpulseVelocity(y),
15688
+ get direction() {
15689
+ const {
15690
+ x,
15691
+ y
15692
+ } = this;
15693
+ const [absX, absY] = [Math.abs(x), Math.abs(y)];
15694
+ return absX > absY && x >= 0 ? 'right' : absX > absY && x <= 0 ? 'left' : absY > absX && y >= 0 ? 'down' : absY > absX && y <= 0 ? 'up' : oops$1();
15695
+ }
15696
+ };
15697
+ }
15698
+ return {
15699
+ addMovement,
15700
+ endTouch,
15701
+ getVelocity
15702
+ };
15950
15703
  }
15951
15704
  function oops$1() {
15952
15705
  throw new Error();
@@ -16122,6 +15875,7 @@
16122
15875
  },
16123
15876
  sticky: Boolean,
16124
15877
  ...makeBorderProps(),
15878
+ ...makeComponentProps(),
16125
15879
  ...makeElevationProps(),
16126
15880
  ...makeLayoutItemProps(),
16127
15881
  ...makeRoundedProps(),
@@ -16273,8 +16027,8 @@
16273
16027
  'v-navigation-drawer--temporary': isTemporary.value,
16274
16028
  'v-navigation-drawer--active': isActive.value,
16275
16029
  'v-navigation-drawer--sticky': isSticky.value
16276
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
16277
- "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value]
16030
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
16031
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
16278
16032
  }, attrs), {
16279
16033
  default: () => [hasImage && vue.createVNode("div", {
16280
16034
  "key": "image",
@@ -16403,6 +16157,7 @@
16403
16157
  },
16404
16158
  showFirstLastPage: Boolean,
16405
16159
  ...makeBorderProps(),
16160
+ ...makeComponentProps(),
16406
16161
  ...makeDensityProps(),
16407
16162
  ...makeElevationProps(),
16408
16163
  ...makeRoundedProps(),
@@ -16599,7 +16354,8 @@
16599
16354
  }
16600
16355
  useRender(() => vue.createVNode(props.tag, {
16601
16356
  "ref": resizeRef,
16602
- "class": ['v-pagination', themeClasses.value],
16357
+ "class": ['v-pagination', themeClasses.value, props.class],
16358
+ "style": props.style,
16603
16359
  "role": "navigation",
16604
16360
  "aria-label": t(props.ariaLabel),
16605
16361
  "onKeydown": onKeydown,
@@ -16658,7 +16414,8 @@
16658
16414
  scale: {
16659
16415
  type: [Number, String],
16660
16416
  default: 0.5
16661
- }
16417
+ },
16418
+ ...makeComponentProps()
16662
16419
  },
16663
16420
  setup(props, _ref) {
16664
16421
  let {
@@ -16720,7 +16477,8 @@
16720
16477
  useRender(() => vue.createVNode(VImg, {
16721
16478
  "class": ['v-parallax', {
16722
16479
  'v-parallax--active': isIntersecting.value
16723
- }],
16480
+ }, props.class],
16481
+ "style": props.style,
16724
16482
  "ref": root,
16725
16483
  "cover": true,
16726
16484
  "onLoadstart": onScroll,
@@ -16745,7 +16503,8 @@
16745
16503
  slots
16746
16504
  } = _ref;
16747
16505
  useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
16748
- "class": "v-radio",
16506
+ "class": ['v-radio', props.class],
16507
+ "style": props.style,
16749
16508
  "type": "radio"
16750
16509
  }), slots));
16751
16510
  return {};
@@ -16799,7 +16558,8 @@
16799
16558
  }
16800
16559
  }) : props.label;
16801
16560
  return vue.createVNode(VInput, vue.mergeProps({
16802
- "class": "v-radio-group"
16561
+ "class": ['v-radio-group', props.class],
16562
+ "style": props.style
16803
16563
  }, inputAttrs, inputProps, {
16804
16564
  "modelValue": model.value,
16805
16565
  "onUpdate:modelValue": $event => model.value = $event,
@@ -16937,7 +16697,8 @@
16937
16697
  'v-slider--focused': isFocused.value,
16938
16698
  'v-slider--pressed': mousePressed.value,
16939
16699
  'v-slider--disabled': props.disabled
16940
- }],
16700
+ }, props.class],
16701
+ "style": props.style,
16941
16702
  "ref": inputRef
16942
16703
  }, inputProps, {
16943
16704
  "focused": isFocused.value
@@ -17080,6 +16841,7 @@
17080
16841
  validator: v => ['top', 'bottom'].includes(v)
17081
16842
  },
17082
16843
  ripple: Boolean,
16844
+ ...makeComponentProps(),
17083
16845
  ...makeDensityProps(),
17084
16846
  ...makeSizeProps(),
17085
16847
  ...makeTagProps(),
@@ -17197,7 +16959,8 @@
17197
16959
  "class": ['v-rating', {
17198
16960
  'v-rating--hover': props.hover,
17199
16961
  'v-rating--readonly': props.readonly
17200
- }, themeClasses.value]
16962
+ }, themeClasses.value, props.class],
16963
+ "style": props.style
17201
16964
  }, {
17202
16965
  default: () => [vue.createVNode(VRatingItem, {
17203
16966
  "value": 0,
@@ -17297,6 +17060,7 @@
17297
17060
  type: [Boolean, String],
17298
17061
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
17299
17062
  },
17063
+ ...makeComponentProps(),
17300
17064
  ...makeTagProps(),
17301
17065
  ...makeGroupProps({
17302
17066
  selectedClass: 'v-slide-group-item--active'
@@ -17460,7 +17224,7 @@
17460
17224
  function focus(location) {
17461
17225
  if (!contentRef.value) return;
17462
17226
  if (!location) {
17463
- const focusable = [...contentRef.value.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')].filter(el => !el.hasAttribute('disabled'));
17227
+ const focusable = focusableChildren(contentRef.value);
17464
17228
  focusable[0]?.focus();
17465
17229
  } else if (location === 'next') {
17466
17230
  const el = contentRef.value.querySelector(':focus')?.nextElementSibling;
@@ -17537,7 +17301,8 @@
17537
17301
  'v-slide-group--vertical': !isHorizontal.value,
17538
17302
  'v-slide-group--has-affixes': hasAffixes.value,
17539
17303
  'v-slide-group--is-overflowing': isOverflowing.value
17540
- }],
17304
+ }, props.class],
17305
+ "style": props.style,
17541
17306
  "tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
17542
17307
  "onFocus": onFocus
17543
17308
  }, {
@@ -17687,7 +17452,8 @@
17687
17452
  'v-snackbar--active': isActive.value,
17688
17453
  'v-snackbar--multi-line': props.multiLine && !props.vertical,
17689
17454
  'v-snackbar--vertical': props.vertical
17690
- }, positionClasses.value]
17455
+ }, positionClasses.value, props.class],
17456
+ "style": props.style
17691
17457
  }, overlayProps, {
17692
17458
  "modelValue": isActive.value,
17693
17459
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -17787,7 +17553,8 @@
17787
17553
  'v-switch--inset': props.inset
17788
17554
  }, {
17789
17555
  'v-switch--indeterminate': indeterminate.value
17790
- }, loaderClasses.value]
17556
+ }, loaderClasses.value, props.class],
17557
+ "style": props.style
17791
17558
  }, inputAttrs, inputProps, {
17792
17559
  "id": id.value,
17793
17560
  "focused": isFocused.value
@@ -17856,6 +17623,7 @@
17856
17623
  color: String,
17857
17624
  height: [Number, String],
17858
17625
  window: Boolean,
17626
+ ...makeComponentProps(),
17859
17627
  ...makeElevationProps(),
17860
17628
  ...makeLayoutItemProps(),
17861
17629
  ...makeRoundedProps(),
@@ -17897,8 +17665,8 @@
17897
17665
  useRender(() => vue.createVNode(props.tag, {
17898
17666
  "class": ['v-system-bar', {
17899
17667
  'v-system-bar--window': props.window
17900
- }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value],
17901
- "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value]
17668
+ }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value, props.class],
17669
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, props.style]
17902
17670
  }, slots));
17903
17671
  return {};
17904
17672
  }
@@ -17971,10 +17739,10 @@
17971
17739
  useRender(() => {
17972
17740
  const [btnProps] = VBtn.filterProps(props);
17973
17741
  return vue.createVNode(VBtn, vue.mergeProps({
17974
- "_as": "VTab",
17975
17742
  "symbol": VTabsSymbol,
17976
17743
  "ref": rootEl,
17977
- "class": ['v-tab'],
17744
+ "class": ['v-tab', props.class],
17745
+ "style": props.style,
17978
17746
  "tabindex": isSelected.value ? 0 : -1,
17979
17747
  "role": "tab",
17980
17748
  "aria-selected": String(isSelected.value),
@@ -18069,10 +17837,10 @@
18069
17837
  'v-tabs--fixed-tabs': props.fixedTabs,
18070
17838
  'v-tabs--grow': props.grow,
18071
17839
  'v-tabs--stacked': props.stacked
18072
- }, densityClasses.value, backgroundColorClasses.value],
17840
+ }, densityClasses.value, backgroundColorClasses.value, props.class],
18073
17841
  "style": [{
18074
17842
  '--v-tabs-height': convertToUnit(props.height)
18075
- }, backgroundColorStyles.value],
17843
+ }, backgroundColorStyles.value, props.style],
18076
17844
  "role": "tablist",
18077
17845
  "symbol": VTabsSymbol
18078
17846
  }), {
@@ -18092,6 +17860,7 @@
18092
17860
  fixedFooter: Boolean,
18093
17861
  height: [Number, String],
18094
17862
  hover: Boolean,
17863
+ ...makeComponentProps(),
18095
17864
  ...makeDensityProps(),
18096
17865
  ...makeTagProps(),
18097
17866
  ...makeThemeProps()
@@ -18114,7 +17883,8 @@
18114
17883
  'v-table--has-top': !!slots.top,
18115
17884
  'v-table--has-bottom': !!slots.bottom,
18116
17885
  'v-table--hover': props.hover
18117
- }, themeClasses.value, densityClasses.value]
17886
+ }, themeClasses.value, densityClasses.value, props.class],
17887
+ "style": props.style
18118
17888
  }, {
18119
17889
  default: () => [slots.top?.(), slots.default ? vue.createVNode("div", {
18120
17890
  "class": "v-table__wrapper",
@@ -18279,7 +18049,8 @@
18279
18049
  'v-textarea--auto-grow': props.autoGrow,
18280
18050
  'v-textarea--no-resize': props.noResize || props.autoGrow,
18281
18051
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
18282
- }]
18052
+ }, props.class],
18053
+ "style": props.style
18283
18054
  }, rootAttrs, inputProps, {
18284
18055
  "focused": isFocused.value
18285
18056
  }), {
@@ -18363,6 +18134,7 @@
18363
18134
  name: 'VThemeProvider',
18364
18135
  props: {
18365
18136
  withBackground: Boolean,
18137
+ ...makeComponentProps(),
18366
18138
  ...makeThemeProps(),
18367
18139
  ...makeTagProps()
18368
18140
  },
@@ -18376,7 +18148,8 @@
18376
18148
  return () => {
18377
18149
  if (!props.withBackground) return slots.default?.();
18378
18150
  return vue.createVNode(props.tag, {
18379
- "class": ['v-theme-provider', themeClasses.value]
18151
+ "class": ['v-theme-provider', themeClasses.value, props.class],
18152
+ "style": props.style
18380
18153
  }, {
18381
18154
  default: () => [slots.default?.()]
18382
18155
  });
@@ -18421,6 +18194,7 @@
18421
18194
  type: String,
18422
18195
  validator: v => ['start', 'end', 'both'].includes(v)
18423
18196
  },
18197
+ ...makeComponentProps(),
18424
18198
  ...makeDensityProps(),
18425
18199
  ...makeTagProps(),
18426
18200
  ...makeThemeProps()
@@ -18464,10 +18238,10 @@
18464
18238
  useRender(() => vue.createVNode(props.tag, {
18465
18239
  "class": ['v-timeline', `v-timeline--${props.direction}`, `v-timeline--align-${props.align}`, `v-timeline--justify-${props.justify}`, truncateClasses.value, {
18466
18240
  'v-timeline--inset-line': !!props.lineInset
18467
- }, themeClasses.value, densityClasses.value, sideClasses.value],
18468
- "style": {
18241
+ }, themeClasses.value, densityClasses.value, sideClasses.value, props.class],
18242
+ "style": [{
18469
18243
  '--v-timeline-line-thickness': convertToUnit(props.lineThickness)
18470
- }
18244
+ }, props.style]
18471
18245
  }, slots));
18472
18246
  return {};
18473
18247
  }
@@ -18482,6 +18256,7 @@
18482
18256
  icon: IconValue,
18483
18257
  iconColor: String,
18484
18258
  lineColor: String,
18259
+ ...makeComponentProps(),
18485
18260
  ...makeRoundedProps(),
18486
18261
  ...makeSizeProps(),
18487
18262
  ...makeElevationProps()
@@ -18511,7 +18286,8 @@
18511
18286
  useRender(() => vue.createVNode("div", {
18512
18287
  "class": ['v-timeline-divider', {
18513
18288
  'v-timeline-divider--fill-dot': props.fillDot
18514
- }]
18289
+ }, props.class],
18290
+ "style": props.style
18515
18291
  }, [vue.createVNode("div", {
18516
18292
  "class": ['v-timeline-divider__before', lineColorClasses.value],
18517
18293
  "style": lineColorStyles.value
@@ -18561,11 +18337,12 @@
18561
18337
  icon: IconValue,
18562
18338
  iconColor: String,
18563
18339
  lineInset: [Number, String],
18564
- ...makeRoundedProps(),
18340
+ ...makeComponentProps(),
18341
+ ...makeDimensionProps(),
18565
18342
  ...makeElevationProps(),
18343
+ ...makeRoundedProps(),
18566
18344
  ...makeSizeProps(),
18567
- ...makeTagProps(),
18568
- ...makeDimensionProps()
18345
+ ...makeTagProps()
18569
18346
  },
18570
18347
  setup(props, _ref) {
18571
18348
  let {
@@ -18585,11 +18362,11 @@
18585
18362
  useRender(() => vue.createVNode("div", {
18586
18363
  "class": ['v-timeline-item', {
18587
18364
  'v-timeline-item--fill-dot': props.fillDot
18588
- }],
18589
- "style": {
18365
+ }, props.class],
18366
+ "style": [{
18590
18367
  '--v-timeline-dot-size': convertToUnit(dotSize.value),
18591
18368
  '--v-timeline-line-inset': props.lineInset ? `calc(var(--v-timeline-dot-size) / 2 + ${convertToUnit(props.lineInset)})` : convertToUnit(0)
18592
- }
18369
+ }, props.style]
18593
18370
  }, [vue.createVNode("div", {
18594
18371
  "class": "v-timeline-item__body",
18595
18372
  "style": dimensionStyles.value
@@ -18665,7 +18442,8 @@
18665
18442
  const [overlayProps] = VOverlay.filterProps(props);
18666
18443
  return vue.createVNode(VOverlay, vue.mergeProps({
18667
18444
  "ref": overlay,
18668
- "class": ['v-tooltip'],
18445
+ "class": ['v-tooltip', props.class],
18446
+ "style": props.style,
18669
18447
  "id": id.value
18670
18448
  }, overlayProps, {
18671
18449
  "modelValue": isActive.value,
@@ -18713,7 +18491,8 @@
18713
18491
  const VVirtualScrollItem = genericComponent()({
18714
18492
  name: 'VVirtualScrollItem',
18715
18493
  props: {
18716
- dynamicHeight: Boolean
18494
+ dynamicHeight: Boolean,
18495
+ ...makeComponentProps()
18717
18496
  },
18718
18497
  emits: {
18719
18498
  'update:height': height => true
@@ -18740,7 +18519,8 @@
18740
18519
  vue.onUpdated(updateHeight);
18741
18520
  useRender(() => vue.createVNode("div", {
18742
18521
  "ref": props.dynamicHeight ? resizeRef : undefined,
18743
- "class": "v-virtual-scroll__item"
18522
+ "class": ['v-virtual-scroll__item', props.class],
18523
+ "style": props.style
18744
18524
  }, [slots.default?.()]));
18745
18525
  }
18746
18526
  });
@@ -18757,7 +18537,7 @@
18757
18537
  default: () => []
18758
18538
  },
18759
18539
  itemHeight: [Number, String],
18760
- visibleItems: [Number, String],
18540
+ ...makeComponentProps(),
18761
18541
  ...makeDimensionProps()
18762
18542
  },
18763
18543
  setup(props, _ref) {
@@ -18784,7 +18564,7 @@
18784
18564
  const sizeMap = new Map();
18785
18565
  let sizes = createRange(props.items.length).map(() => itemHeight.value);
18786
18566
  const visibleItems = vue.computed(() => {
18787
- return props.visibleItems ? parseInt(props.visibleItems, 10) : Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
18567
+ return Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
18788
18568
  });
18789
18569
  function handleItemResize(index, height) {
18790
18570
  itemHeight.value = Math.max(itemHeight.value, height);
@@ -18795,20 +18575,13 @@
18795
18575
  return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0);
18796
18576
  }
18797
18577
  function calculateMidPointIndex(scrollTop) {
18798
- let start = 0;
18799
- let end = props.items.length;
18800
- while (start <= end) {
18801
- const middle = start + Math.floor((end - start) / 2);
18802
- const middleOffset = calculateOffset(middle);
18803
- if (middleOffset === scrollTop) {
18804
- return middle;
18805
- } else if (middleOffset < scrollTop) {
18806
- start = middle + 1;
18807
- } else if (middleOffset > scrollTop) {
18808
- end = middle - 1;
18809
- }
18578
+ const end = props.items.length;
18579
+ let middle = 0;
18580
+ let middleOffset = 0;
18581
+ while (middleOffset < scrollTop && middle < end) {
18582
+ middleOffset += sizes[middle++] || itemHeight.value;
18810
18583
  }
18811
- return start;
18584
+ return middle - 1;
18812
18585
  }
18813
18586
  let lastScrollTop = 0;
18814
18587
  function handleScroll() {
@@ -18830,8 +18603,12 @@
18830
18603
  const offset = calculateOffset(index);
18831
18604
  rootEl.value.scrollTop = offset;
18832
18605
  }
18606
+ const items = vue.computed(() => props.items.map((item, index) => ({
18607
+ raw: item,
18608
+ index
18609
+ })));
18833
18610
  const last = vue.computed(() => Math.min(props.items.length, first.value + visibleItems.value));
18834
- const computedItems = vue.computed(() => props.items.slice(first.value, last.value));
18611
+ const computedItems = vue.computed(() => items.value.slice(first.value, last.value));
18835
18612
  const paddingTop = vue.computed(() => calculateOffset(first.value));
18836
18613
  const paddingBottom = vue.computed(() => calculateOffset(props.items.length) - calculateOffset(last.value));
18837
18614
  const {
@@ -18856,23 +18633,23 @@
18856
18633
  });
18857
18634
  useRender(() => vue.createVNode("div", {
18858
18635
  "ref": rootEl,
18859
- "class": "v-virtual-scroll",
18636
+ "class": ['v-virtual-scroll', props.class],
18860
18637
  "onScroll": handleScroll,
18861
- "style": dimensionStyles.value
18638
+ "style": [dimensionStyles.value, props.style]
18862
18639
  }, [vue.createVNode("div", {
18863
18640
  "class": "v-virtual-scroll__container",
18864
18641
  "style": {
18865
18642
  paddingTop: convertToUnit(paddingTop.value),
18866
18643
  paddingBottom: convertToUnit(paddingBottom.value)
18867
18644
  }
18868
- }, [computedItems.value.map((item, index) => vue.createVNode(VVirtualScrollItem, {
18869
- "key": index,
18645
+ }, [computedItems.value.map(item => vue.createVNode(VVirtualScrollItem, {
18646
+ "key": item.index,
18870
18647
  "dynamicHeight": !props.itemHeight,
18871
- "onUpdate:height": height => handleItemResize(index + first.value, height)
18648
+ "onUpdate:height": height => handleItemResize(item.index, height)
18872
18649
  }, {
18873
18650
  default: () => [slots.default?.({
18874
- item,
18875
- index: index + first.value
18651
+ item: item.raw,
18652
+ index: item.index
18876
18653
  })]
18877
18654
  }))])]));
18878
18655
  return {
@@ -19020,130 +18797,542 @@
19020
18797
 
19021
18798
  // Types
19022
18799
 
19023
- function mounted$2(el, binding) {
19024
- const modifiers = binding.modifiers || {};
19025
- const value = binding.value;
19026
- const {
19027
- once,
19028
- immediate,
19029
- ...modifierKeys
19030
- } = modifiers;
19031
- const defaultValue = !Object.keys(modifierKeys).length;
19032
- const {
19033
- handler,
19034
- options
19035
- } = typeof value === 'object' ? value : {
19036
- handler: value,
19037
- options: {
19038
- attributes: modifierKeys?.attr ?? defaultValue,
19039
- characterData: modifierKeys?.char ?? defaultValue,
19040
- childList: modifierKeys?.child ?? defaultValue,
19041
- subtree: modifierKeys?.sub ?? defaultValue
18800
+ function mounted$2(el, binding) {
18801
+ const modifiers = binding.modifiers || {};
18802
+ const value = binding.value;
18803
+ const {
18804
+ once,
18805
+ immediate,
18806
+ ...modifierKeys
18807
+ } = modifiers;
18808
+ const defaultValue = !Object.keys(modifierKeys).length;
18809
+ const {
18810
+ handler,
18811
+ options
18812
+ } = typeof value === 'object' ? value : {
18813
+ handler: value,
18814
+ options: {
18815
+ attributes: modifierKeys?.attr ?? defaultValue,
18816
+ characterData: modifierKeys?.char ?? defaultValue,
18817
+ childList: modifierKeys?.child ?? defaultValue,
18818
+ subtree: modifierKeys?.sub ?? defaultValue
18819
+ }
18820
+ };
18821
+ const observer = new MutationObserver(function () {
18822
+ let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
18823
+ let observer = arguments.length > 1 ? arguments[1] : undefined;
18824
+ handler?.(mutations, observer);
18825
+ if (once) unmounted$2(el, binding);
18826
+ });
18827
+ if (immediate) handler?.([], observer);
18828
+ el._mutate = Object(el._mutate);
18829
+ el._mutate[binding.instance.$.uid] = {
18830
+ observer
18831
+ };
18832
+ observer.observe(el, options);
18833
+ }
18834
+ function unmounted$2(el, binding) {
18835
+ if (!el._mutate?.[binding.instance.$.uid]) return;
18836
+ el._mutate[binding.instance.$.uid].observer.disconnect();
18837
+ delete el._mutate[binding.instance.$.uid];
18838
+ }
18839
+ const Mutate = {
18840
+ mounted: mounted$2,
18841
+ unmounted: unmounted$2
18842
+ };
18843
+
18844
+ function mounted$1(el, binding) {
18845
+ const handler = binding.value;
18846
+ const options = {
18847
+ passive: !binding.modifiers?.active
18848
+ };
18849
+ window.addEventListener('resize', handler, options);
18850
+ el._onResize = Object(el._onResize);
18851
+ el._onResize[binding.instance.$.uid] = {
18852
+ handler,
18853
+ options
18854
+ };
18855
+ if (!binding.modifiers?.quiet) {
18856
+ handler();
18857
+ }
18858
+ }
18859
+ function unmounted$1(el, binding) {
18860
+ if (!el._onResize?.[binding.instance.$.uid]) return;
18861
+ const {
18862
+ handler,
18863
+ options
18864
+ } = el._onResize[binding.instance.$.uid];
18865
+ window.removeEventListener('resize', handler, options);
18866
+ delete el._onResize[binding.instance.$.uid];
18867
+ }
18868
+ const Resize = {
18869
+ mounted: mounted$1,
18870
+ unmounted: unmounted$1
18871
+ };
18872
+
18873
+ function mounted(el, binding) {
18874
+ const {
18875
+ self = false
18876
+ } = binding.modifiers ?? {};
18877
+ const value = binding.value;
18878
+ const options = typeof value === 'object' && value.options || {
18879
+ passive: true
18880
+ };
18881
+ const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler;
18882
+ const target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
18883
+ if (!target) return;
18884
+ target.addEventListener('scroll', handler, options);
18885
+ el._onScroll = Object(el._onScroll);
18886
+ el._onScroll[binding.instance.$.uid] = {
18887
+ handler,
18888
+ options,
18889
+ // Don't reference self
18890
+ target: self ? undefined : target
18891
+ };
18892
+ }
18893
+ function unmounted(el, binding) {
18894
+ if (!el._onScroll?.[binding.instance.$.uid]) return;
18895
+ const {
18896
+ handler,
18897
+ options,
18898
+ target = el
18899
+ } = el._onScroll[binding.instance.$.uid];
18900
+ target.removeEventListener('scroll', handler, options);
18901
+ delete el._onScroll[binding.instance.$.uid];
18902
+ }
18903
+ function updated(el, binding) {
18904
+ if (binding.value === binding.oldValue) return;
18905
+ unmounted(el, binding);
18906
+ mounted(el, binding);
18907
+ }
18908
+ const Scroll = {
18909
+ mounted,
18910
+ unmounted,
18911
+ updated
18912
+ };
18913
+
18914
+ var directives = /*#__PURE__*/Object.freeze({
18915
+ __proto__: null,
18916
+ ClickOutside: ClickOutside,
18917
+ Intersect: Intersect,
18918
+ Mutate: Mutate,
18919
+ Resize: Resize,
18920
+ Ripple: Ripple,
18921
+ Scroll: Scroll,
18922
+ Touch: Touch
18923
+ });
18924
+
18925
+ // Utilities
18926
+
18927
+ // Types
18928
+
18929
+ function getWeekArray(date) {
18930
+ let currentWeek = [];
18931
+ const weeks = [];
18932
+ const firstDayOfMonth = startOfMonth(date);
18933
+ const lastDayOfMonth = endOfMonth(date);
18934
+ for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
18935
+ currentWeek.push(null);
18936
+ }
18937
+ for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
18938
+ const day = new Date(date.getFullYear(), date.getMonth(), i);
18939
+
18940
+ // Add the day to the current week
18941
+ currentWeek.push(day);
18942
+
18943
+ // If the current week has 7 days, add it to the weeks array and start a new week
18944
+ if (currentWeek.length === 7) {
18945
+ weeks.push(currentWeek);
18946
+ currentWeek = [];
19042
18947
  }
19043
- };
19044
- const observer = new MutationObserver(function () {
19045
- let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
19046
- let observer = arguments.length > 1 ? arguments[1] : undefined;
19047
- handler?.(mutations, observer);
19048
- if (once) unmounted$2(el, binding);
18948
+ }
18949
+ for (let i = currentWeek.length; i < 7; i++) {
18950
+ currentWeek.push(null);
18951
+ }
18952
+ weeks.push(currentWeek);
18953
+ return weeks;
18954
+ }
18955
+ function startOfMonth(date) {
18956
+ return new Date(date.getFullYear(), date.getMonth(), 1);
18957
+ }
18958
+ function endOfMonth(date) {
18959
+ return new Date(date.getFullYear(), date.getMonth() + 1, 0);
18960
+ }
18961
+ function date(value) {
18962
+ if (value == null) return null;
18963
+ if (value instanceof Date) return value;
18964
+ if (typeof value === 'string') {
18965
+ const parsed = Date.parse(value);
18966
+ if (!isNaN(parsed)) return new Date(parsed);
18967
+ }
18968
+ return null;
18969
+ }
18970
+ const firstDay = {
18971
+ '001': 1,
18972
+ AD: 1,
18973
+ AE: 6,
18974
+ AF: 6,
18975
+ AG: 0,
18976
+ AI: 1,
18977
+ AL: 1,
18978
+ AM: 1,
18979
+ AN: 1,
18980
+ AR: 1,
18981
+ AS: 0,
18982
+ AT: 1,
18983
+ AU: 0,
18984
+ AX: 1,
18985
+ AZ: 1,
18986
+ BA: 1,
18987
+ BD: 0,
18988
+ BE: 1,
18989
+ BG: 1,
18990
+ BH: 6,
18991
+ BM: 1,
18992
+ BN: 1,
18993
+ BR: 0,
18994
+ BS: 0,
18995
+ BT: 0,
18996
+ BW: 0,
18997
+ BY: 1,
18998
+ BZ: 0,
18999
+ CA: 0,
19000
+ CH: 1,
19001
+ CL: 1,
19002
+ CM: 1,
19003
+ CN: 0,
19004
+ CO: 0,
19005
+ CR: 1,
19006
+ CY: 1,
19007
+ CZ: 1,
19008
+ DE: 1,
19009
+ DJ: 6,
19010
+ DK: 1,
19011
+ DM: 0,
19012
+ DO: 0,
19013
+ DZ: 6,
19014
+ EC: 1,
19015
+ EE: 1,
19016
+ EG: 6,
19017
+ ES: 1,
19018
+ ET: 0,
19019
+ FI: 1,
19020
+ FJ: 1,
19021
+ FO: 1,
19022
+ FR: 1,
19023
+ GB: 1,
19024
+ 'GB-alt-variant': 0,
19025
+ GE: 1,
19026
+ GF: 1,
19027
+ GP: 1,
19028
+ GR: 1,
19029
+ GT: 0,
19030
+ GU: 0,
19031
+ HK: 0,
19032
+ HN: 0,
19033
+ HR: 1,
19034
+ HU: 1,
19035
+ ID: 0,
19036
+ IE: 1,
19037
+ IL: 0,
19038
+ IN: 0,
19039
+ IQ: 6,
19040
+ IR: 6,
19041
+ IS: 1,
19042
+ IT: 1,
19043
+ JM: 0,
19044
+ JO: 6,
19045
+ JP: 0,
19046
+ KE: 0,
19047
+ KG: 1,
19048
+ KH: 0,
19049
+ KR: 0,
19050
+ KW: 6,
19051
+ KZ: 1,
19052
+ LA: 0,
19053
+ LB: 1,
19054
+ LI: 1,
19055
+ LK: 1,
19056
+ LT: 1,
19057
+ LU: 1,
19058
+ LV: 1,
19059
+ LY: 6,
19060
+ MC: 1,
19061
+ MD: 1,
19062
+ ME: 1,
19063
+ MH: 0,
19064
+ MK: 1,
19065
+ MM: 0,
19066
+ MN: 1,
19067
+ MO: 0,
19068
+ MQ: 1,
19069
+ MT: 0,
19070
+ MV: 5,
19071
+ MX: 0,
19072
+ MY: 1,
19073
+ MZ: 0,
19074
+ NI: 0,
19075
+ NL: 1,
19076
+ NO: 1,
19077
+ NP: 0,
19078
+ NZ: 1,
19079
+ OM: 6,
19080
+ PA: 0,
19081
+ PE: 0,
19082
+ PH: 0,
19083
+ PK: 0,
19084
+ PL: 1,
19085
+ PR: 0,
19086
+ PT: 0,
19087
+ PY: 0,
19088
+ QA: 6,
19089
+ RE: 1,
19090
+ RO: 1,
19091
+ RS: 1,
19092
+ RU: 1,
19093
+ SA: 0,
19094
+ SD: 6,
19095
+ SE: 1,
19096
+ SG: 0,
19097
+ SI: 1,
19098
+ SK: 1,
19099
+ SM: 1,
19100
+ SV: 0,
19101
+ SY: 6,
19102
+ TH: 0,
19103
+ TJ: 1,
19104
+ TM: 1,
19105
+ TR: 1,
19106
+ TT: 0,
19107
+ TW: 0,
19108
+ UA: 1,
19109
+ UM: 0,
19110
+ US: 0,
19111
+ UY: 1,
19112
+ UZ: 1,
19113
+ VA: 1,
19114
+ VE: 0,
19115
+ VI: 0,
19116
+ VN: 1,
19117
+ WS: 0,
19118
+ XK: 1,
19119
+ YE: 0,
19120
+ ZA: 0,
19121
+ ZW: 0
19122
+ };
19123
+ const sundayJanuarySecond2000 = new Date(2000, 0, 2);
19124
+ function getWeekdays(locale) {
19125
+ const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
19126
+ return createRange(7).map(i => {
19127
+ const weekday = new Date(sundayJanuarySecond2000);
19128
+ weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
19129
+ return new Intl.DateTimeFormat(locale, {
19130
+ weekday: 'long'
19131
+ }).format(weekday);
19049
19132
  });
19050
- if (immediate) handler?.([], observer);
19051
- el._mutate = Object(el._mutate);
19052
- el._mutate[binding.instance.$.uid] = {
19053
- observer
19054
- };
19055
- observer.observe(el, options);
19056
19133
  }
19057
- function unmounted$2(el, binding) {
19058
- if (!el._mutate?.[binding.instance.$.uid]) return;
19059
- el._mutate[binding.instance.$.uid].observer.disconnect();
19060
- delete el._mutate[binding.instance.$.uid];
19134
+ function format(value, formatString, locale) {
19135
+ const date = new Date(value);
19136
+ let options = {};
19137
+ switch (formatString) {
19138
+ case 'fullDateWithWeekday':
19139
+ options = {
19140
+ weekday: 'long',
19141
+ day: 'numeric',
19142
+ month: 'long',
19143
+ year: 'numeric'
19144
+ };
19145
+ break;
19146
+ case 'normalDateWithWeekday':
19147
+ options = {
19148
+ weekday: 'short',
19149
+ day: 'numeric',
19150
+ month: 'short',
19151
+ year: 'numeric'
19152
+ };
19153
+ break;
19154
+ case 'keyboardDate':
19155
+ options = {};
19156
+ break;
19157
+ case 'monthAndDate':
19158
+ options = {
19159
+ month: 'long',
19160
+ day: 'numeric'
19161
+ };
19162
+ break;
19163
+ case 'monthAndYear':
19164
+ options = {
19165
+ month: 'long',
19166
+ year: 'numeric'
19167
+ };
19168
+ break;
19169
+ default:
19170
+ options = {
19171
+ timeZone: 'UTC',
19172
+ timeZoneName: 'short'
19173
+ };
19174
+ }
19175
+ return new Intl.DateTimeFormat(locale, options).format(date);
19176
+ }
19177
+ function addDays(date, amount) {
19178
+ const d = new Date(date);
19179
+ d.setDate(d.getDate() + amount);
19180
+ return d;
19181
+ }
19182
+ function addMonths(date, amount) {
19183
+ const d = new Date(date);
19184
+ d.setMonth(d.getMonth() + amount);
19185
+ return d;
19186
+ }
19187
+ function getYear(date) {
19188
+ return date.getFullYear();
19189
+ }
19190
+ function getMonth(date) {
19191
+ return date.getMonth();
19192
+ }
19193
+ function startOfYear(date) {
19194
+ return new Date(date.getFullYear(), 0, 1);
19195
+ }
19196
+ function endOfYear(date) {
19197
+ return new Date(date.getFullYear(), 11, 31);
19198
+ }
19199
+ function getMondayOfFirstWeekOfYear(year) {
19200
+ return new Date(year, 0, 1);
19061
19201
  }
19062
- const Mutate = {
19063
- mounted: mounted$2,
19064
- unmounted: unmounted$2
19065
- };
19066
19202
 
19067
- function mounted$1(el, binding) {
19068
- const handler = binding.value;
19069
- const options = {
19070
- passive: !binding.modifiers?.active
19071
- };
19072
- window.addEventListener('resize', handler, options);
19073
- el._onResize = Object(el._onResize);
19074
- el._onResize[binding.instance.$.uid] = {
19075
- handler,
19076
- options
19077
- };
19078
- if (!binding.modifiers?.quiet) {
19079
- handler();
19203
+ // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
19204
+ function getWeek(date) {
19205
+ let year = date.getFullYear();
19206
+ let d1w1 = getMondayOfFirstWeekOfYear(year);
19207
+ if (date < d1w1) {
19208
+ year = year - 1;
19209
+ d1w1 = getMondayOfFirstWeekOfYear(year);
19210
+ } else {
19211
+ const tv = getMondayOfFirstWeekOfYear(year + 1);
19212
+ if (date >= tv) {
19213
+ year = year + 1;
19214
+ d1w1 = tv;
19215
+ }
19080
19216
  }
19217
+ const diffTime = Math.abs(date.getTime() - d1w1.getTime());
19218
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
19219
+ return Math.floor(diffDays / 7) + 1;
19081
19220
  }
19082
- function unmounted$1(el, binding) {
19083
- if (!el._onResize?.[binding.instance.$.uid]) return;
19084
- const {
19085
- handler,
19086
- options
19087
- } = el._onResize[binding.instance.$.uid];
19088
- window.removeEventListener('resize', handler, options);
19089
- delete el._onResize[binding.instance.$.uid];
19221
+ function isWithinRange(date, range) {
19222
+ return isAfter(date, range[0]) && isBefore(date, range[1]);
19090
19223
  }
19091
- const Resize = {
19092
- mounted: mounted$1,
19093
- unmounted: unmounted$1
19094
- };
19095
-
19096
- function mounted(el, binding) {
19097
- const {
19098
- self = false
19099
- } = binding.modifiers ?? {};
19100
- const value = binding.value;
19101
- const options = typeof value === 'object' && value.options || {
19102
- passive: true
19103
- };
19104
- const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler;
19105
- const target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
19106
- if (!target) return;
19107
- target.addEventListener('scroll', handler, options);
19108
- el._onScroll = Object(el._onScroll);
19109
- el._onScroll[binding.instance.$.uid] = {
19110
- handler,
19111
- options,
19112
- // Don't reference self
19113
- target: self ? undefined : target
19114
- };
19224
+ function isValid(date) {
19225
+ const d = new Date(date);
19226
+ return d instanceof Date && !isNaN(d.getTime());
19115
19227
  }
19116
- function unmounted(el, binding) {
19117
- if (!el._onScroll?.[binding.instance.$.uid]) return;
19118
- const {
19119
- handler,
19120
- options,
19121
- target = el
19122
- } = el._onScroll[binding.instance.$.uid];
19123
- target.removeEventListener('scroll', handler, options);
19124
- delete el._onScroll[binding.instance.$.uid];
19228
+ function isAfter(date, comparing) {
19229
+ return date.getTime() > comparing.getTime();
19125
19230
  }
19126
- function updated(el, binding) {
19127
- if (binding.value === binding.oldValue) return;
19128
- unmounted(el, binding);
19129
- mounted(el, binding);
19231
+ function isBefore(date, comparing) {
19232
+ return date.getTime() < comparing.getTime();
19233
+ }
19234
+ function isEqual(date, comparing) {
19235
+ return date.getTime() === comparing.getTime();
19236
+ }
19237
+ function isSameDay(date, comparing) {
19238
+ return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
19239
+ }
19240
+ function isSameMonth(date, comparing) {
19241
+ return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
19242
+ }
19243
+ function getDiff(date, comparing, unit) {
19244
+ const d = new Date(date);
19245
+ const c = new Date(comparing);
19246
+ if (unit === 'month') {
19247
+ return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
19248
+ }
19249
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
19250
+ }
19251
+ function setYear(date, year) {
19252
+ const d = new Date(date);
19253
+ d.setFullYear(year);
19254
+ return d;
19255
+ }
19256
+ class VuetifyDateAdapter {
19257
+ constructor() {
19258
+ let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
19259
+ this.locale = locale;
19260
+ }
19261
+ date(value) {
19262
+ return date(value);
19263
+ }
19264
+ addDays(date, amount) {
19265
+ return addDays(date, amount);
19266
+ }
19267
+ addMonths(date, amount) {
19268
+ return addMonths(date, amount);
19269
+ }
19270
+ getWeekArray(date) {
19271
+ return getWeekArray(date);
19272
+ }
19273
+ startOfMonth(date) {
19274
+ return startOfMonth(date);
19275
+ }
19276
+ endOfMonth(date) {
19277
+ return endOfMonth(date);
19278
+ }
19279
+ format(date, formatString) {
19280
+ return format(date, formatString, this.locale);
19281
+ }
19282
+ isEqual(date, comparing) {
19283
+ return isEqual(date, comparing);
19284
+ }
19285
+ isValid(date) {
19286
+ return isValid(date);
19287
+ }
19288
+ isWithinRange(date, range) {
19289
+ return isWithinRange(date, range);
19290
+ }
19291
+ isAfter(date, comparing) {
19292
+ return isAfter(date, comparing);
19293
+ }
19294
+ isSameDay(date, comparing) {
19295
+ return isSameDay(date, comparing);
19296
+ }
19297
+ isSameMonth(date, comparing) {
19298
+ return isSameMonth(date, comparing);
19299
+ }
19300
+ setYear(date, year) {
19301
+ return setYear(date, year);
19302
+ }
19303
+ getDiff(date, comparing, unit) {
19304
+ return getDiff(date, comparing, unit);
19305
+ }
19306
+ getWeek(date) {
19307
+ return getWeek(date);
19308
+ }
19309
+ getWeekdays() {
19310
+ return getWeekdays(this.locale);
19311
+ }
19312
+ getYear(date) {
19313
+ return getYear(date);
19314
+ }
19315
+ getMonth(date) {
19316
+ return getMonth(date);
19317
+ }
19318
+ startOfYear(date) {
19319
+ return startOfYear(date);
19320
+ }
19321
+ endOfYear(date) {
19322
+ return endOfYear(date);
19323
+ }
19130
19324
  }
19131
- const Scroll = {
19132
- mounted,
19133
- unmounted,
19134
- updated
19135
- };
19136
19325
 
19137
- var directives = /*#__PURE__*/Object.freeze({
19138
- __proto__: null,
19139
- ClickOutside: ClickOutside,
19140
- Intersect: Intersect,
19141
- Mutate: Mutate,
19142
- Resize: Resize,
19143
- Ripple: Ripple,
19144
- Scroll: Scroll,
19145
- Touch: Touch
19146
- });
19326
+ // Composables
19327
+
19328
+ // Types
19329
+
19330
+ const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
19331
+ function createDate(options) {
19332
+ return options ?? {
19333
+ adapter: VuetifyDateAdapter
19334
+ };
19335
+ }
19147
19336
 
19148
19337
  // Composables
19149
19338
  function createVuetify$1() {
@@ -19230,7 +19419,7 @@
19230
19419
  date
19231
19420
  };
19232
19421
  }
19233
- const version$1 = "4.0.0-dev-20230422.0";
19422
+ const version$1 = "4.0.0-dev-20230427.0";
19234
19423
  createVuetify$1.version = version$1;
19235
19424
 
19236
19425
  // Vue's inject() can only be used in setup
@@ -19250,13 +19439,13 @@
19250
19439
  ...options
19251
19440
  });
19252
19441
  };
19253
- const version = "4.0.0-dev-20230422.0";
19442
+ const version = "4.0.0-dev-20230427.0";
19254
19443
  createVuetify.version = version;
19255
19444
 
19256
19445
  exports.components = components;
19257
19446
  exports.createVuetify = createVuetify;
19258
19447
  exports.directives = directives;
19259
- exports.useDate = useDate;
19448
+ exports.useDefaults = useDefaults;
19260
19449
  exports.useDisplay = useDisplay;
19261
19450
  exports.useLayout = useLayout;
19262
19451
  exports.useLocale = useLocale;