vuetify 3.1.16 → 3.2.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 (476) hide show
  1. package/dist/_component-variables-labs.sass +1 -0
  2. package/dist/json/attributes.json +331 -179
  3. package/dist/json/importMap-labs.json +4 -4
  4. package/dist/json/importMap.json +8 -4
  5. package/dist/json/tags.json +45 -2
  6. package/dist/json/web-types.json +851 -329
  7. package/dist/vuetify-labs.css +844 -621
  8. package/dist/vuetify-labs.d.ts +5908 -7618
  9. package/dist/vuetify-labs.esm.js +1628 -652
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +1627 -650
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +272 -65
  14. package/dist/vuetify.d.ts +6192 -7178
  15. package/dist/vuetify.esm.js +1365 -423
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +1364 -421
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +798 -728
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/blueprints/index.d.ts +35 -1
  23. package/lib/blueprints/md1.d.ts +35 -1
  24. package/lib/blueprints/md2.d.ts +35 -1
  25. package/lib/blueprints/md3.d.ts +35 -1
  26. package/lib/components/VAlert/VAlert.mjs +6 -4
  27. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  28. package/lib/components/VAlert/index.d.ts +57 -55
  29. package/lib/components/VApp/VApp.mjs +4 -2
  30. package/lib/components/VApp/VApp.mjs.map +1 -1
  31. package/lib/components/VApp/index.d.ts +22 -13
  32. package/lib/components/VAppBar/VAppBar.mjs +65 -13
  33. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  34. package/lib/components/VAppBar/VAppBarNavIcon.mjs +7 -4
  35. package/lib/components/VAppBar/VAppBarNavIcon.mjs.map +1 -1
  36. package/lib/components/VAppBar/index.d.ts +113 -92
  37. package/lib/components/VAutocomplete/VAutocomplete.mjs +2 -1
  38. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  39. package/lib/components/VAutocomplete/index.d.ts +276 -418
  40. package/lib/components/VAvatar/VAvatar.mjs +4 -2
  41. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  42. package/lib/components/VAvatar/index.d.ts +23 -14
  43. package/lib/components/VBadge/VBadge.mjs +6 -5
  44. package/lib/components/VBadge/VBadge.mjs.map +1 -1
  45. package/lib/components/VBadge/index.d.ts +27 -22
  46. package/lib/components/VBanner/VBanner.mjs +6 -4
  47. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  48. package/lib/components/VBanner/VBannerActions.mjs +5 -2
  49. package/lib/components/VBanner/VBannerActions.mjs.map +1 -1
  50. package/lib/components/VBanner/index.d.ts +92 -66
  51. package/lib/components/VBottomNavigation/VBottomNavigation.mjs +4 -2
  52. package/lib/components/VBottomNavigation/VBottomNavigation.mjs.map +1 -1
  53. package/lib/components/VBottomNavigation/index.d.ts +22 -13
  54. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +4 -2
  55. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  56. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs +6 -3
  57. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs.map +1 -1
  58. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs +4 -2
  59. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs.map +1 -1
  60. package/lib/components/VBreadcrumbs/index.d.ts +132 -91
  61. package/lib/components/VBtn/VBtn.mjs +9 -4
  62. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  63. package/lib/components/VBtn/_mixins.scss +1 -1
  64. package/lib/components/VBtn/index.d.ts +39 -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 +75 -109
  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 +276 -418
  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 +2 -1
  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 +59 -11
  129. package/lib/components/VField/VField.mjs +18 -8
  130. package/lib/components/VField/VField.mjs.map +1 -1
  131. package/lib/components/VField/VField.sass +57 -5
  132. package/lib/components/VField/VFieldLabel.mjs +6 -3
  133. package/lib/components/VField/VFieldLabel.mjs.map +1 -1
  134. package/lib/components/VField/_variables.scss +4 -0
  135. package/lib/components/VField/index.d.ts +169 -84
  136. package/lib/components/VFileInput/VFileInput.mjs +2 -1
  137. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  138. package/lib/components/VFileInput/index.d.ts +147 -174
  139. package/lib/components/VFooter/VFooter.mjs +4 -2
  140. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  141. package/lib/components/VFooter/index.d.ts +22 -13
  142. package/lib/components/VForm/VForm.mjs +5 -2
  143. package/lib/components/VForm/VForm.mjs.map +1 -1
  144. package/lib/components/VForm/index.d.ts +30 -17
  145. package/lib/components/VGrid/VCol.mjs +4 -1
  146. package/lib/components/VGrid/VCol.mjs.map +1 -1
  147. package/lib/components/VGrid/VContainer.mjs +4 -1
  148. package/lib/components/VGrid/VContainer.mjs.map +1 -1
  149. package/lib/components/VGrid/VRow.mjs +4 -1
  150. package/lib/components/VGrid/VRow.mjs.map +1 -1
  151. package/lib/components/VGrid/index.d.ts +104 -60
  152. package/lib/components/VHover/index.d.ts +20 -44
  153. package/lib/components/VIcon/VIcon.mjs +4 -2
  154. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  155. package/lib/components/VIcon/index.d.ts +23 -26
  156. package/lib/components/VImg/VImg.mjs +5 -3
  157. package/lib/components/VImg/VImg.mjs.map +1 -1
  158. package/lib/components/VImg/index.d.ts +26 -29
  159. package/lib/components/VInput/VInput.mjs +4 -1
  160. package/lib/components/VInput/VInput.mjs.map +1 -1
  161. package/lib/components/VInput/index.d.ts +37 -40
  162. package/lib/components/VItemGroup/VItemGroup.mjs +4 -1
  163. package/lib/components/VItemGroup/VItemGroup.mjs.map +1 -1
  164. package/lib/components/VItemGroup/index.d.ts +30 -33
  165. package/lib/components/VKbd/index.d.ts +30 -17
  166. package/lib/components/VLabel/VLabel.mjs +4 -1
  167. package/lib/components/VLabel/VLabel.mjs.map +1 -1
  168. package/lib/components/VLabel/index.d.ts +22 -13
  169. package/lib/components/VLayout/VLayout.mjs +8 -4
  170. package/lib/components/VLayout/VLayout.mjs.map +1 -1
  171. package/lib/components/VLayout/VLayoutItem.mjs +4 -2
  172. package/lib/components/VLayout/VLayoutItem.mjs.map +1 -1
  173. package/lib/components/VLayout/index.d.ts +44 -26
  174. package/lib/components/VLazy/VLazy.mjs +4 -2
  175. package/lib/components/VLazy/VLazy.mjs.map +1 -1
  176. package/lib/components/VLazy/index.d.ts +22 -13
  177. package/lib/components/VList/VList.mjs +4 -2
  178. package/lib/components/VList/VList.mjs.map +1 -1
  179. package/lib/components/VList/VListChildren.mjs.map +1 -1
  180. package/lib/components/VList/VListGroup.mjs +5 -2
  181. package/lib/components/VList/VListGroup.mjs.map +1 -1
  182. package/lib/components/VList/VListItem.mjs +4 -2
  183. package/lib/components/VList/VListItem.mjs.map +1 -1
  184. package/lib/components/VList/VListItemAction.mjs +4 -1
  185. package/lib/components/VList/VListItemAction.mjs.map +1 -1
  186. package/lib/components/VList/VListItemMedia.mjs +4 -1
  187. package/lib/components/VList/VListItemMedia.mjs.map +1 -1
  188. package/lib/components/VList/VListSubheader.mjs +5 -3
  189. package/lib/components/VList/VListSubheader.mjs.map +1 -1
  190. package/lib/components/VList/index.d.ts +932 -826
  191. package/lib/components/VLocaleProvider/VLocaleProvider.mjs +5 -2
  192. package/lib/components/VLocaleProvider/VLocaleProvider.mjs.map +1 -1
  193. package/lib/components/VLocaleProvider/index.d.ts +30 -17
  194. package/lib/components/VMain/VMain.mjs +4 -2
  195. package/lib/components/VMain/VMain.mjs.map +1 -1
  196. package/lib/components/VMain/index.d.ts +30 -17
  197. package/lib/components/VMenu/VMenu.mjs +2 -1
  198. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  199. package/lib/components/VMenu/index.d.ts +104 -282
  200. package/lib/components/VMessages/VMessages.mjs +4 -2
  201. package/lib/components/VMessages/VMessages.mjs.map +1 -1
  202. package/lib/components/VMessages/index.d.ts +22 -145
  203. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +4 -2
  204. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  205. package/lib/components/VNavigationDrawer/index.d.ts +26 -29
  206. package/lib/components/VNoSsr/VNoSsr.mjs.map +1 -1
  207. package/lib/components/VNoSsr/index.d.ts +3 -13
  208. package/lib/components/VOverlay/VOverlay.mjs +5 -3
  209. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  210. package/lib/components/VOverlay/index.d.ts +38 -45
  211. package/lib/components/VPagination/VPagination.mjs +4 -1
  212. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  213. package/lib/components/VPagination/index.d.ts +23 -30
  214. package/lib/components/VParallax/VParallax.mjs +5 -2
  215. package/lib/components/VParallax/VParallax.mjs.map +1 -1
  216. package/lib/components/VParallax/index.d.ts +34 -33
  217. package/lib/components/VProgressCircular/VProgressCircular.mjs +4 -2
  218. package/lib/components/VProgressCircular/VProgressCircular.mjs.map +1 -1
  219. package/lib/components/VProgressCircular/index.d.ts +22 -13
  220. package/lib/components/VProgressLinear/VProgressLinear.mjs +6 -4
  221. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  222. package/lib/components/VProgressLinear/index.d.ts +42 -45
  223. package/lib/components/VRadio/VRadio.mjs +2 -1
  224. package/lib/components/VRadio/VRadio.mjs.map +1 -1
  225. package/lib/components/VRadio/index.d.ts +27 -38
  226. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -1
  227. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  228. package/lib/components/VRadioGroup/index.d.ts +45 -68
  229. package/lib/components/VRangeSlider/VRangeSlider.mjs +33 -21
  230. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  231. package/lib/components/VRangeSlider/index.d.ts +50 -49
  232. package/lib/components/VRating/VRating.css +0 -4
  233. package/lib/components/VRating/VRating.mjs +10 -36
  234. package/lib/components/VRating/VRating.mjs.map +1 -1
  235. package/lib/components/VRating/VRating.sass +0 -5
  236. package/lib/components/VRating/index.d.ts +24 -18
  237. package/lib/components/VResponsive/VResponsive.mjs +4 -2
  238. package/lib/components/VResponsive/VResponsive.mjs.map +1 -1
  239. package/lib/components/VResponsive/index.d.ts +43 -31
  240. package/lib/components/VSelect/VSelect.mjs +2 -1
  241. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  242. package/lib/components/VSelect/index.d.ts +245 -567
  243. package/lib/components/VSelectionControl/VSelectionControl.mjs +6 -2
  244. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  245. package/lib/components/VSelectionControl/index.d.ts +76 -46
  246. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +4 -1
  247. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  248. package/lib/components/VSelectionControlGroup/index.d.ts +23 -14
  249. package/lib/components/VSheet/VSheet.mjs +4 -2
  250. package/lib/components/VSheet/VSheet.mjs.map +1 -1
  251. package/lib/components/VSheet/index.d.ts +22 -13
  252. package/lib/components/VSlideGroup/VSlideGroup.mjs +4 -1
  253. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  254. package/lib/components/VSlideGroup/index.d.ts +59 -90
  255. package/lib/components/VSlider/VSlider.mjs +33 -14
  256. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  257. package/lib/components/VSlider/VSliderThumb.mjs +6 -4
  258. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  259. package/lib/components/VSlider/VSliderTrack.mjs +6 -4
  260. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  261. package/lib/components/VSlider/index.d.ts +50 -49
  262. package/lib/components/VSlider/slider.mjs +43 -23
  263. package/lib/components/VSlider/slider.mjs.map +1 -1
  264. package/lib/components/VSnackbar/VSnackbar.mjs +2 -1
  265. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  266. package/lib/components/VSnackbar/index.d.ts +92 -142
  267. package/lib/components/VSwitch/VSwitch.mjs +2 -1
  268. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  269. package/lib/components/VSwitch/index.d.ts +45 -72
  270. package/lib/components/VSystemBar/VSystemBar.mjs +4 -2
  271. package/lib/components/VSystemBar/VSystemBar.mjs.map +1 -1
  272. package/lib/components/VSystemBar/index.d.ts +22 -13
  273. package/lib/components/VTable/VTable.mjs +4 -1
  274. package/lib/components/VTable/VTable.mjs.map +1 -1
  275. package/lib/components/VTable/index.d.ts +26 -29
  276. package/lib/components/VTabs/VTab.mjs +3 -4
  277. package/lib/components/VTabs/VTab.mjs.map +1 -1
  278. package/lib/components/VTabs/VTabs.mjs +2 -2
  279. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  280. package/lib/components/VTabs/index.d.ts +51 -33
  281. package/lib/components/VTextField/VTextField.mjs +2 -1
  282. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  283. package/lib/components/VTextField/index.d.ts +337 -317
  284. package/lib/components/VTextarea/VTextarea.mjs +2 -1
  285. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  286. package/lib/components/VTextarea/index.d.ts +127 -146
  287. package/lib/components/VThemeProvider/VThemeProvider.mjs +6 -3
  288. package/lib/components/VThemeProvider/VThemeProvider.mjs.map +1 -1
  289. package/lib/components/VThemeProvider/index.d.ts +22 -13
  290. package/lib/components/VTimeline/VTimeline.mjs +5 -3
  291. package/lib/components/VTimeline/VTimeline.mjs.map +1 -1
  292. package/lib/components/VTimeline/VTimelineDivider.mjs +4 -1
  293. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  294. package/lib/components/VTimeline/VTimelineItem.mjs +8 -6
  295. package/lib/components/VTimeline/VTimelineItem.mjs.map +1 -1
  296. package/lib/components/VTimeline/index.d.ts +67 -57
  297. package/lib/components/VToolbar/VToolbar.css +3 -1
  298. package/lib/components/VToolbar/VToolbar.mjs +4 -2
  299. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  300. package/lib/components/VToolbar/VToolbar.sass +3 -1
  301. package/lib/components/VToolbar/VToolbarItems.mjs +9 -4
  302. package/lib/components/VToolbar/VToolbarItems.mjs.map +1 -1
  303. package/lib/components/VToolbar/VToolbarTitle.mjs +5 -2
  304. package/lib/components/VToolbar/VToolbarTitle.mjs.map +1 -1
  305. package/lib/components/VToolbar/index.d.ts +74 -71
  306. package/lib/components/VTooltip/VTooltip.mjs +4 -3
  307. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  308. package/lib/components/VTooltip/index.d.ts +119 -150
  309. package/lib/components/VValidation/index.d.ts +6 -18
  310. package/lib/{labs → components}/VVirtualScroll/VVirtualScroll.mjs +21 -23
  311. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -0
  312. package/lib/{labs → components}/VVirtualScroll/VVirtualScrollItem.mjs +5 -2
  313. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -0
  314. package/lib/{labs → components}/VVirtualScroll/index.d.ts +70 -30
  315. package/lib/components/VVirtualScroll/index.mjs.map +1 -0
  316. package/lib/components/VWindow/VWindow.mjs +4 -1
  317. package/lib/components/VWindow/VWindow.mjs.map +1 -1
  318. package/lib/components/VWindow/VWindowItem.mjs +4 -1
  319. package/lib/components/VWindow/VWindowItem.mjs.map +1 -1
  320. package/lib/components/VWindow/index.d.ts +61 -79
  321. package/lib/components/index.d.ts +5832 -6863
  322. package/lib/components/index.mjs +2 -1
  323. package/lib/components/index.mjs.map +1 -1
  324. package/lib/components/transitions/index.d.ts +0 -192
  325. package/lib/composables/component.mjs +11 -0
  326. package/lib/composables/component.mjs.map +1 -0
  327. package/lib/composables/defaults.mjs +53 -5
  328. package/lib/composables/defaults.mjs.map +1 -1
  329. package/lib/composables/focus.mjs.map +1 -1
  330. package/lib/composables/icons.mjs +15 -4
  331. package/lib/composables/icons.mjs.map +1 -1
  332. package/lib/composables/index.mjs +1 -0
  333. package/lib/composables/index.mjs.map +1 -1
  334. package/lib/composables/intersectionObserver.mjs +2 -2
  335. package/lib/composables/intersectionObserver.mjs.map +1 -1
  336. package/lib/composables/loader.mjs.map +1 -1
  337. package/lib/composables/scroll.mjs +3 -0
  338. package/lib/composables/scroll.mjs.map +1 -1
  339. package/lib/entry-bundler.mjs +1 -1
  340. package/lib/entry-bundler.mjs.map +1 -1
  341. package/lib/framework.mjs +8 -3
  342. package/lib/framework.mjs.map +1 -1
  343. package/lib/iconsets/fa-svg.d.ts +1 -1
  344. package/lib/iconsets/fa.d.ts +1 -1
  345. package/lib/iconsets/fa4.d.ts +1 -1
  346. package/lib/iconsets/md.d.ts +1 -1
  347. package/lib/iconsets/mdi-svg.d.ts +1 -1
  348. package/lib/iconsets/mdi.d.ts +1 -1
  349. package/lib/index.d.ts +46 -3
  350. package/lib/labs/VDataTable/index.d.ts +61 -933
  351. package/lib/labs/VInfiniteScroll/VInfiniteScroll.css +26 -0
  352. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs +215 -0
  353. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -0
  354. package/lib/labs/VInfiniteScroll/VInfiniteScroll.sass +25 -0
  355. package/lib/labs/VInfiniteScroll/_variables.scss +3 -0
  356. package/lib/labs/VInfiniteScroll/index.d.ts +321 -0
  357. package/lib/labs/VInfiniteScroll/index.mjs +2 -0
  358. package/lib/labs/VInfiniteScroll/index.mjs.map +1 -0
  359. package/lib/labs/VSkeletonLoader/index.d.ts +0 -12
  360. package/lib/labs/components.d.ts +377 -1097
  361. package/lib/labs/components.mjs +1 -1
  362. package/lib/labs/components.mjs.map +1 -1
  363. package/lib/labs/date/DateAdapter.mjs +2 -0
  364. package/lib/labs/date/DateAdapter.mjs.map +1 -0
  365. package/lib/labs/date/adapters/vuetify.d.ts +52 -0
  366. package/lib/labs/date/adapters/vuetify.mjs +399 -0
  367. package/lib/labs/date/adapters/vuetify.mjs.map +1 -0
  368. package/lib/labs/date/date.mjs +39 -0
  369. package/lib/labs/date/date.mjs.map +1 -0
  370. package/lib/labs/date/index.d.ts +40 -0
  371. package/lib/labs/date/index.mjs +2 -0
  372. package/lib/labs/date/index.mjs.map +1 -0
  373. package/lib/labs/index.mjs +3 -2
  374. package/lib/labs/index.mjs.map +1 -1
  375. package/lib/locale/af.mjs +5 -1
  376. package/lib/locale/af.mjs.map +1 -1
  377. package/lib/locale/ar.mjs +5 -1
  378. package/lib/locale/ar.mjs.map +1 -1
  379. package/lib/locale/az.mjs +5 -1
  380. package/lib/locale/az.mjs.map +1 -1
  381. package/lib/locale/bg.mjs +5 -1
  382. package/lib/locale/bg.mjs.map +1 -1
  383. package/lib/locale/ca.mjs +5 -1
  384. package/lib/locale/ca.mjs.map +1 -1
  385. package/lib/locale/ckb.mjs +5 -1
  386. package/lib/locale/ckb.mjs.map +1 -1
  387. package/lib/locale/cs.mjs +5 -1
  388. package/lib/locale/cs.mjs.map +1 -1
  389. package/lib/locale/da.mjs +5 -1
  390. package/lib/locale/da.mjs.map +1 -1
  391. package/lib/locale/de.mjs +5 -1
  392. package/lib/locale/de.mjs.map +1 -1
  393. package/lib/locale/el.mjs +5 -1
  394. package/lib/locale/el.mjs.map +1 -1
  395. package/lib/locale/en.mjs +5 -1
  396. package/lib/locale/en.mjs.map +1 -1
  397. package/lib/locale/es.mjs +5 -1
  398. package/lib/locale/es.mjs.map +1 -1
  399. package/lib/locale/et.mjs +5 -1
  400. package/lib/locale/et.mjs.map +1 -1
  401. package/lib/locale/fa.mjs +5 -1
  402. package/lib/locale/fa.mjs.map +1 -1
  403. package/lib/locale/fi.mjs +5 -1
  404. package/lib/locale/fi.mjs.map +1 -1
  405. package/lib/locale/fr.mjs +5 -1
  406. package/lib/locale/fr.mjs.map +1 -1
  407. package/lib/locale/he.mjs +5 -1
  408. package/lib/locale/he.mjs.map +1 -1
  409. package/lib/locale/hr.mjs +5 -1
  410. package/lib/locale/hr.mjs.map +1 -1
  411. package/lib/locale/hu.mjs +5 -1
  412. package/lib/locale/hu.mjs.map +1 -1
  413. package/lib/locale/id.mjs +5 -1
  414. package/lib/locale/id.mjs.map +1 -1
  415. package/lib/locale/index.d.ts +168 -0
  416. package/lib/locale/it.mjs +5 -1
  417. package/lib/locale/it.mjs.map +1 -1
  418. package/lib/locale/ja.mjs +5 -1
  419. package/lib/locale/ja.mjs.map +1 -1
  420. package/lib/locale/ko.mjs +5 -1
  421. package/lib/locale/ko.mjs.map +1 -1
  422. package/lib/locale/lt.mjs +5 -1
  423. package/lib/locale/lt.mjs.map +1 -1
  424. package/lib/locale/lv.mjs +5 -1
  425. package/lib/locale/lv.mjs.map +1 -1
  426. package/lib/locale/nl.mjs +5 -1
  427. package/lib/locale/nl.mjs.map +1 -1
  428. package/lib/locale/no.mjs +5 -1
  429. package/lib/locale/no.mjs.map +1 -1
  430. package/lib/locale/pl.mjs +5 -1
  431. package/lib/locale/pl.mjs.map +1 -1
  432. package/lib/locale/pt.mjs +5 -1
  433. package/lib/locale/pt.mjs.map +1 -1
  434. package/lib/locale/ro.mjs +5 -1
  435. package/lib/locale/ro.mjs.map +1 -1
  436. package/lib/locale/ru.mjs +5 -1
  437. package/lib/locale/ru.mjs.map +1 -1
  438. package/lib/locale/sk.mjs +5 -1
  439. package/lib/locale/sk.mjs.map +1 -1
  440. package/lib/locale/sl.mjs +5 -1
  441. package/lib/locale/sl.mjs.map +1 -1
  442. package/lib/locale/sr-Cyrl.mjs +5 -1
  443. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  444. package/lib/locale/sr-Latn.mjs +5 -1
  445. package/lib/locale/sr-Latn.mjs.map +1 -1
  446. package/lib/locale/sv.mjs +5 -1
  447. package/lib/locale/sv.mjs.map +1 -1
  448. package/lib/locale/th.mjs +5 -1
  449. package/lib/locale/th.mjs.map +1 -1
  450. package/lib/locale/tr.mjs +5 -1
  451. package/lib/locale/tr.mjs.map +1 -1
  452. package/lib/locale/uk.mjs +5 -1
  453. package/lib/locale/uk.mjs.map +1 -1
  454. package/lib/locale/vi.mjs +5 -1
  455. package/lib/locale/vi.mjs.map +1 -1
  456. package/lib/locale/zh-Hans.mjs +5 -1
  457. package/lib/locale/zh-Hans.mjs.map +1 -1
  458. package/lib/locale/zh-Hant.mjs +5 -1
  459. package/lib/locale/zh-Hant.mjs.map +1 -1
  460. package/lib/styles/main.css +152 -0
  461. package/lib/styles/settings/_utilities.scss +11 -1
  462. package/lib/util/createSimpleFunctional.mjs +9 -4
  463. package/lib/util/createSimpleFunctional.mjs.map +1 -1
  464. package/lib/util/defineComponent.mjs +11 -43
  465. package/lib/util/defineComponent.mjs.map +1 -1
  466. package/lib/util/helpers.mjs +6 -2
  467. package/lib/util/helpers.mjs.map +1 -1
  468. package/lib/util/index.mjs +1 -0
  469. package/lib/util/index.mjs.map +1 -1
  470. package/package.json +3 -2
  471. package/lib/labs/VVirtualScroll/VVirtualScroll.mjs.map +0 -1
  472. package/lib/labs/VVirtualScroll/VVirtualScrollItem.mjs.map +0 -1
  473. package/lib/labs/VVirtualScroll/index.mjs.map +0 -1
  474. /package/lib/{labs → components}/VVirtualScroll/VVirtualScroll.css +0 -0
  475. /package/lib/{labs → components}/VVirtualScroll/VVirtualScroll.sass +0 -0
  476. /package/lib/{labs → components}/VVirtualScroll/index.mjs +0 -0
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.1.16
2
+ * Vuetify v3.2.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { ref, onBeforeUnmount, watch, readonly, reactive, computed, watchEffect, toRefs, capitalize, getCurrentInstance as getCurrentInstance$1, unref, provide, inject as inject$1, onScopeDispose, effectScope, shallowRef, defineComponent as defineComponent$1, camelize, h, onDeactivated, onActivated, onMounted, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, Fragment, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, cloneVNode, warn, toHandlers, Teleport, createTextVNode, onBeforeUpdate, vModelText, withModifiers, onUpdated } from 'vue';
7
+ import { ref, onBeforeUnmount, watch, readonly, reactive, computed, watchEffect, toRefs, capitalize, onScopeDispose, effectScope, shallowRef, inject as inject$1, unref, provide, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onDeactivated, onActivated, onMounted, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, Fragment, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, cloneVNode, warn, toHandlers, Teleport, createTextVNode, onBeforeUpdate, vModelText, onUpdated, withModifiers } from 'vue';
8
8
 
9
9
  const IN_BROWSER = typeof window !== 'undefined';
10
10
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
@@ -167,11 +167,11 @@ const keyValues = Object.freeze({
167
167
  function keys(o) {
168
168
  return Object.keys(o);
169
169
  }
170
- function pick(obj, paths) {
170
+ function pick(obj, paths, exclude) {
171
171
  const found = Object.create(null);
172
172
  const rest = Object.create(null);
173
173
  for (const key in obj) {
174
- if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key)) {
174
+ if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key) && !exclude?.some(path => path === key)) {
175
175
  found[key] = obj[key];
176
176
  } else {
177
177
  rest[key] = obj[key];
@@ -882,44 +882,6 @@ function getContrast(first, second) {
882
882
  return (light + 0.05) / (dark + 0.05);
883
883
  }
884
884
 
885
- // Utilities
886
- function getCurrentInstance(name, message) {
887
- const vm = getCurrentInstance$1();
888
- if (!vm) {
889
- throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
890
- }
891
- return vm;
892
- }
893
- function getCurrentInstanceName() {
894
- let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
895
- const vm = getCurrentInstance(name).type;
896
- return toKebabCase(vm?.aliasName || vm?.name);
897
- }
898
- let _uid = 0;
899
- let _map = new WeakMap();
900
- function getUid() {
901
- const vm = getCurrentInstance('getUid');
902
- if (_map.has(vm)) return _map.get(vm);else {
903
- const uid = _uid++;
904
- _map.set(vm, uid);
905
- return uid;
906
- }
907
- }
908
- getUid.reset = () => {
909
- _uid = 0;
910
- _map = new WeakMap();
911
- };
912
-
913
- function injectSelf(key) {
914
- const {
915
- provides
916
- } = getCurrentInstance('injectSelf');
917
- if (provides && key in provides) {
918
- // TS doesn't allow symbol as index type
919
- return provides[key];
920
- }
921
- }
922
-
923
885
  /**
924
886
  * Creates a factory function for props definitions.
925
887
  * This is used to define props in a composable then override
@@ -973,17 +935,54 @@ function propsFactory(props, source) {
973
935
 
974
936
  // Types
975
937
 
938
+ // Composables
939
+ const makeComponentProps = propsFactory({
940
+ class: [String, Array],
941
+ style: {
942
+ type: [String, Array, Object],
943
+ default: null
944
+ }
945
+ }, 'component');
946
+
947
+ function useToggleScope(source, fn) {
948
+ let scope;
949
+ function start() {
950
+ scope = effectScope();
951
+ scope.run(() => fn.length ? fn(() => {
952
+ scope?.stop();
953
+ start();
954
+ }) : fn());
955
+ }
956
+ watch(source, active => {
957
+ if (active && !scope) {
958
+ start();
959
+ } else if (!active) {
960
+ scope?.stop();
961
+ scope = undefined;
962
+ }
963
+ }, {
964
+ immediate: true
965
+ });
966
+ onScopeDispose(() => {
967
+ scope?.stop();
968
+ });
969
+ }
970
+
971
+ // Composables
972
+
973
+ // Types
974
+
976
975
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
977
976
  function createDefaults(options) {
978
977
  return ref(options);
979
978
  }
980
- function useDefaults() {
979
+ function injectDefaults() {
981
980
  const defaults = inject$1(DefaultsSymbol);
982
981
  if (!defaults) throw new Error('[Vuetify] Could not find defaults instance');
983
982
  return defaults;
984
983
  }
985
984
  function provideDefaults(defaults, options) {
986
- const injectedDefaults = useDefaults();
985
+ const injectedDefaults = injectDefaults();
987
986
  const providedDefaults = ref(defaults);
988
987
  const newDefaults = computed(() => {
989
988
  const disabled = unref(options?.disabled);
@@ -1010,41 +1009,58 @@ function provideDefaults(defaults, options) {
1010
1009
  provide(DefaultsSymbol, newDefaults);
1011
1010
  return newDefaults;
1012
1011
  }
1013
-
1014
- function useToggleScope(source, fn) {
1015
- let scope;
1016
- function start() {
1017
- scope = effectScope();
1018
- scope.run(() => fn.length ? fn(() => {
1019
- scope?.stop();
1020
- start();
1021
- }) : fn());
1022
- }
1023
- watch(source, active => {
1024
- if (active && !scope) {
1025
- start();
1026
- } else if (!active) {
1027
- scope?.stop();
1028
- scope = undefined;
1012
+ function propIsDefined(vnode, prop) {
1013
+ return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1014
+ }
1015
+ function useDefaults() {
1016
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1017
+ let name = arguments.length > 1 ? arguments[1] : undefined;
1018
+ let defaults = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : injectDefaults();
1019
+ const vm = getCurrentInstance('useDefaults');
1020
+ name = name ?? vm.type.name ?? vm.type.__name;
1021
+ if (!name) {
1022
+ throw new Error('[Vuetify] Could not determine component name');
1023
+ }
1024
+ const componentDefaults = computed(() => defaults.value?.[props._as ?? name]);
1025
+ const _props = new Proxy(props, {
1026
+ get(target, prop) {
1027
+ const propValue = Reflect.get(target, prop);
1028
+ if (prop === 'class' || prop === 'style') {
1029
+ return [componentDefaults.value?.[prop], propValue].filter(v => v != null);
1030
+ } else if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1031
+ return componentDefaults.value?.[prop] ?? defaults.value?.global?.[prop] ?? propValue;
1032
+ }
1033
+ return propValue;
1029
1034
  }
1030
- }, {
1031
- immediate: true
1032
1035
  });
1033
- onScopeDispose(() => {
1034
- scope?.stop();
1036
+ const _subcomponentDefaults = shallowRef();
1037
+ watchEffect(() => {
1038
+ if (componentDefaults.value) {
1039
+ const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1040
+ let [key] = _ref;
1041
+ return key.startsWith(key[0].toUpperCase());
1042
+ });
1043
+ if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1044
+ }
1035
1045
  });
1046
+ function provideSubDefaults() {
1047
+ // If subcomponent defaults are provided, override any
1048
+ // subcomponents provided by the component's setup function.
1049
+ // This uses injectSelf so must be done after the original setup to work.
1050
+ useToggleScope(_subcomponentDefaults, () => {
1051
+ provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1052
+ });
1053
+ }
1054
+ return {
1055
+ props: _props,
1056
+ provideSubDefaults
1057
+ };
1036
1058
  }
1037
1059
 
1038
1060
  // Utils
1039
1061
 
1040
1062
  // Types
1041
1063
 
1042
- function propIsDefined(vnode, prop) {
1043
- return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1044
- }
1045
-
1046
- // No props
1047
-
1048
1064
  // Implementation
1049
1065
  function defineComponent(options) {
1050
1066
  options._setup = options._setup ?? options.setup;
@@ -1056,43 +1072,20 @@ function defineComponent(options) {
1056
1072
  options.props = propsFactory(options.props ?? {}, toKebabCase(options.name))();
1057
1073
  const propKeys = Object.keys(options.props);
1058
1074
  options.filterProps = function filterProps(props) {
1059
- return pick(props, propKeys);
1075
+ return pick(props, propKeys, ['class', 'style']);
1060
1076
  };
1061
1077
  options.props._as = String;
1062
1078
  options.setup = function setup(props, ctx) {
1063
- const defaults = useDefaults();
1079
+ const defaults = injectDefaults();
1064
1080
 
1065
1081
  // Skip props proxy if defaults are not provided
1066
1082
  if (!defaults.value) return options._setup(props, ctx);
1067
- const vm = getCurrentInstance$1();
1068
- const componentDefaults = computed(() => defaults.value[props._as ?? options.name]);
1069
- const _props = new Proxy(props, {
1070
- get(target, prop) {
1071
- const propValue = Reflect.get(target, prop);
1072
- if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1073
- return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? propValue;
1074
- }
1075
- return propValue;
1076
- }
1077
- });
1078
- const _subcomponentDefaults = shallowRef();
1079
- watchEffect(() => {
1080
- if (componentDefaults.value) {
1081
- const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1082
- let [key] = _ref;
1083
- return key.startsWith(key[0].toUpperCase());
1084
- });
1085
- if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1086
- }
1087
- });
1083
+ const {
1084
+ props: _props,
1085
+ provideSubDefaults
1086
+ } = useDefaults(props, props._as ?? options.name, defaults);
1088
1087
  const setupBindings = options._setup(_props, ctx);
1089
-
1090
- // If subcomponent defaults are provided, override any
1091
- // subcomponents provided by the component's setup function.
1092
- // This uses injectSelf so must be done after the original setup to work.
1093
- useToggleScope(_subcomponentDefaults, () => {
1094
- provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1095
- });
1088
+ provideSubDefaults();
1096
1089
  return setupBindings;
1097
1090
  };
1098
1091
  }
@@ -1117,15 +1110,19 @@ function createSimpleFunctional(klass) {
1117
1110
  tag: {
1118
1111
  type: String,
1119
1112
  default: tag
1120
- }
1113
+ },
1114
+ ...makeComponentProps()
1121
1115
  },
1122
1116
  setup(props, _ref) {
1123
1117
  let {
1124
1118
  slots
1125
1119
  } = _ref;
1126
- return () => h(props.tag, {
1127
- class: klass
1128
- }, slots.default?.());
1120
+ return () => {
1121
+ return h(props.tag, {
1122
+ class: [klass, props.class],
1123
+ style: props.style
1124
+ }, slots.default?.());
1125
+ };
1129
1126
  }
1130
1127
  });
1131
1128
  }
@@ -1158,6 +1155,34 @@ const standardEasing = 'cubic-bezier(0.4, 0, 0.2, 1)';
1158
1155
  const deceleratedEasing = 'cubic-bezier(0.0, 0, 0.2, 1)'; // Entering
1159
1156
  const acceleratedEasing = 'cubic-bezier(0.4, 0, 1, 1)'; // Leaving
1160
1157
 
1158
+ // Utilities
1159
+ function getCurrentInstance(name, message) {
1160
+ const vm = getCurrentInstance$1();
1161
+ if (!vm) {
1162
+ throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
1163
+ }
1164
+ return vm;
1165
+ }
1166
+ function getCurrentInstanceName() {
1167
+ let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
1168
+ const vm = getCurrentInstance(name).type;
1169
+ return toKebabCase(vm?.aliasName || vm?.name);
1170
+ }
1171
+ let _uid = 0;
1172
+ let _map = new WeakMap();
1173
+ function getUid() {
1174
+ const vm = getCurrentInstance('getUid');
1175
+ if (_map.has(vm)) return _map.get(vm);else {
1176
+ const uid = _uid++;
1177
+ _map.set(vm, uid);
1178
+ return uid;
1179
+ }
1180
+ }
1181
+ getUid.reset = () => {
1182
+ _uid = 0;
1183
+ _map = new WeakMap();
1184
+ };
1185
+
1161
1186
  function getScrollParent(el) {
1162
1187
  while (el) {
1163
1188
  if (hasScrollbar(el)) return el;
@@ -1181,6 +1206,16 @@ function hasScrollbar(el) {
1181
1206
  return style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1182
1207
  }
1183
1208
 
1209
+ function injectSelf(key) {
1210
+ const {
1211
+ provides
1212
+ } = getCurrentInstance('injectSelf');
1213
+ if (provides && key in provides) {
1214
+ // TS doesn't allow symbol as index type
1215
+ return provides[key];
1216
+ }
1217
+ }
1218
+
1184
1219
  function isFixedPosition(el) {
1185
1220
  while (el) {
1186
1221
  if (window.getComputedStyle(el).position === 'fixed') {
@@ -1961,7 +1996,11 @@ var en = {
1961
1996
  item: 'Rating {0} of {1}'
1962
1997
  }
1963
1998
  },
1964
- loading: 'Loading...'
1999
+ loading: 'Loading...',
2000
+ infiniteScroll: {
2001
+ loadMore: 'Load more',
2002
+ empty: 'No more'
2003
+ }
1965
2004
  };
1966
2005
 
1967
2006
  const LANG_PREFIX = '$vuetify.';
@@ -2159,6 +2198,7 @@ function useRtl() {
2159
2198
  const VApp = genericComponent()({
2160
2199
  name: 'VApp',
2161
2200
  props: {
2201
+ ...makeComponentProps(),
2162
2202
  ...makeLayoutProps({
2163
2203
  fullHeight: true
2164
2204
  }),
@@ -2181,8 +2221,8 @@ const VApp = genericComponent()({
2181
2221
  } = useRtl();
2182
2222
  useRender(() => createVNode("div", {
2183
2223
  "ref": layoutRef,
2184
- "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value],
2185
- "style": layoutStyles.value
2224
+ "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value, props.class],
2225
+ "style": [layoutStyles.value, props.style]
2186
2226
  }, [createVNode("div", {
2187
2227
  "class": "v-application__wrap"
2188
2228
  }, [slots.default?.()])]));
@@ -2607,6 +2647,7 @@ const VResponsive = genericComponent()({
2607
2647
  props: {
2608
2648
  aspectRatio: [String, Number],
2609
2649
  contentClass: String,
2650
+ ...makeComponentProps(),
2610
2651
  ...makeDimensionProps()
2611
2652
  },
2612
2653
  setup(props, _ref) {
@@ -2620,8 +2661,8 @@ const VResponsive = genericComponent()({
2620
2661
  dimensionStyles
2621
2662
  } = useDimension(props);
2622
2663
  useRender(() => createVNode("div", {
2623
- "class": "v-responsive",
2624
- "style": dimensionStyles.value
2664
+ "class": ['v-responsive', props.class],
2665
+ "style": [dimensionStyles.value, props.style]
2625
2666
  }, [createVNode("div", {
2626
2667
  "class": "v-responsive__sizer",
2627
2668
  "style": aspectStyles.value
@@ -2739,6 +2780,7 @@ const VImg = genericComponent()({
2739
2780
  },
2740
2781
  srcset: String,
2741
2782
  width: [String, Number],
2783
+ ...makeComponentProps(),
2742
2784
  ...makeTransitionProps()
2743
2785
  },
2744
2786
  emits: {
@@ -2926,10 +2968,10 @@ const VImg = genericComponent()({
2926
2968
  useRender(() => withDirectives(createVNode(VResponsive, {
2927
2969
  "class": ['v-img', {
2928
2970
  'v-img--booting': !isBooted.value
2929
- }],
2930
- "style": {
2971
+ }, props.class],
2972
+ "style": [{
2931
2973
  width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width)
2932
- },
2974
+ }, props.style],
2933
2975
  "aspectRatio": aspectRatio.value,
2934
2976
  "aria-label": props.alt,
2935
2977
  "role": props.alt ? 'img' : undefined
@@ -2964,10 +3006,9 @@ const makeTagProps = propsFactory({
2964
3006
  }
2965
3007
  }, 'tag');
2966
3008
 
2967
- // Types
2968
-
2969
3009
  const makeVToolbarTitleProps = propsFactory({
2970
3010
  text: String,
3011
+ ...makeComponentProps(),
2971
3012
  ...makeTagProps()
2972
3013
  }, 'v-toolbar-title');
2973
3014
  const VToolbarTitle = genericComponent()({
@@ -2980,7 +3021,8 @@ const VToolbarTitle = genericComponent()({
2980
3021
  useRender(() => {
2981
3022
  const hasText = !!(slots.default || slots.text || props.text);
2982
3023
  return createVNode(props.tag, {
2983
- "class": "v-toolbar-title"
3024
+ "class": ['v-toolbar-title', props.class],
3025
+ "style": props.style
2984
3026
  }, {
2985
3027
  default: () => [hasText && createVNode("div", {
2986
3028
  "class": "v-toolbar-title__placeholder"
@@ -3161,6 +3203,7 @@ const makeVToolbarProps = propsFactory({
3161
3203
  image: String,
3162
3204
  title: String,
3163
3205
  ...makeBorderProps(),
3206
+ ...makeComponentProps(),
3164
3207
  ...makeElevationProps(),
3165
3208
  ...makeRoundedProps(),
3166
3209
  ...makeTagProps({
@@ -3211,8 +3254,8 @@ const VToolbar = genericComponent()({
3211
3254
  'v-toolbar--flat': props.flat,
3212
3255
  'v-toolbar--floating': props.floating,
3213
3256
  [`v-toolbar--density-${props.density}`]: true
3214
- }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value],
3215
- "style": [backgroundColorStyles.value]
3257
+ }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value, props.class],
3258
+ "style": [backgroundColorStyles.value, props.style]
3216
3259
  }, {
3217
3260
  default: () => [hasImage && createVNode("div", {
3218
3261
  "key": "image",
@@ -3279,6 +3322,98 @@ const VToolbar = genericComponent()({
3279
3322
 
3280
3323
  // Utilities
3281
3324
 
3325
+ // Types
3326
+
3327
+ // Composables
3328
+ const makeScrollProps = propsFactory({
3329
+ scrollTarget: {
3330
+ type: String
3331
+ },
3332
+ scrollThreshold: {
3333
+ type: [String, Number]
3334
+ }
3335
+ }, 'scroll');
3336
+ function useScroll(props) {
3337
+ let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3338
+ const {
3339
+ thresholdMetCallback,
3340
+ scrollThreshold,
3341
+ canScroll
3342
+ } = args;
3343
+ let previousScroll = 0;
3344
+ const target = ref(null);
3345
+ const currentScroll = ref(0);
3346
+ const savedScroll = ref(0);
3347
+ const currentThreshold = ref(0);
3348
+ const isScrollActive = ref(false);
3349
+ const isScrollingUp = ref(false);
3350
+ const computedScrollThreshold = computed(() => {
3351
+ return Number(props.scrollThreshold ?? scrollThreshold ?? 300);
3352
+ });
3353
+ const onScroll = () => {
3354
+ const targetEl = target.value;
3355
+ if (!targetEl || canScroll && !canScroll.value) return;
3356
+ previousScroll = currentScroll.value;
3357
+ currentScroll.value = 'window' in targetEl ? targetEl.pageYOffset : targetEl.scrollTop;
3358
+ isScrollingUp.value = currentScroll.value < previousScroll;
3359
+ currentThreshold.value = Math.abs(currentScroll.value - computedScrollThreshold.value);
3360
+ };
3361
+ watch(isScrollingUp, () => {
3362
+ savedScroll.value = savedScroll.value || currentScroll.value;
3363
+ });
3364
+ watch(isScrollActive, () => {
3365
+ savedScroll.value = 0;
3366
+ });
3367
+ onMounted(() => {
3368
+ watch(() => props.scrollTarget, scrollTarget => {
3369
+ const newTarget = scrollTarget ? document.querySelector(scrollTarget) : window;
3370
+ if (!newTarget) {
3371
+ consoleWarn(`Unable to locate element with identifier ${scrollTarget}`, getCurrentInstance$1());
3372
+ return;
3373
+ }
3374
+ if (newTarget === target.value) return;
3375
+ target.value?.removeEventListener('scroll', onScroll);
3376
+ target.value = newTarget;
3377
+ target.value.addEventListener('scroll', onScroll, {
3378
+ passive: true
3379
+ });
3380
+ }, {
3381
+ immediate: true
3382
+ });
3383
+ });
3384
+ onBeforeUnmount(() => {
3385
+ target.value?.removeEventListener('scroll', onScroll);
3386
+ });
3387
+ thresholdMetCallback && watch(() => Math.abs(currentScroll.value - savedScroll.value) > computedScrollThreshold.value, thresholdMet => {
3388
+ thresholdMet && thresholdMetCallback({
3389
+ currentThreshold: currentThreshold.value,
3390
+ isScrollingUp: isScrollingUp.value,
3391
+ savedScroll
3392
+ });
3393
+ }, {
3394
+ immediate: true
3395
+ });
3396
+
3397
+ // Do we need this? If yes - seems that
3398
+ // there's no need to expose onScroll
3399
+ canScroll && watch(canScroll, onScroll, {
3400
+ immediate: true
3401
+ });
3402
+ return {
3403
+ computedScrollThreshold,
3404
+ currentScroll,
3405
+ currentThreshold,
3406
+ isScrollActive,
3407
+ // required only for testing
3408
+ // probably can be removed
3409
+ // later (2 chars chlng)
3410
+ isScrollingUp,
3411
+ savedScroll
3412
+ };
3413
+ }
3414
+
3415
+ // Utilities
3416
+
3282
3417
  // Composables
3283
3418
  function useSsrBoot() {
3284
3419
  const isBooted = ref(false);
@@ -3301,13 +3436,7 @@ function useSsrBoot() {
3301
3436
  const VAppBar = genericComponent()({
3302
3437
  name: 'VAppBar',
3303
3438
  props: {
3304
- // TODO: Implement scrolling techniques
3305
- // hideOnScroll: Boolean
3306
- // invertedScroll: Boolean
3307
- // collapseOnScroll: Boolean
3308
- // elevateOnScroll: Boolean
3309
- // shrinkOnScroll: Boolean
3310
- // fadeImageOnScroll: Boolean
3439
+ scrollBehavior: String,
3311
3440
  modelValue: {
3312
3441
  type: Boolean,
3313
3442
  default: true
@@ -3319,6 +3448,7 @@ const VAppBar = genericComponent()({
3319
3448
  },
3320
3449
  ...makeVToolbarProps(),
3321
3450
  ...makeLayoutItemProps(),
3451
+ ...makeScrollProps(),
3322
3452
  height: {
3323
3453
  type: [Number, String],
3324
3454
  default: 64
@@ -3333,11 +3463,63 @@ const VAppBar = genericComponent()({
3333
3463
  } = _ref;
3334
3464
  const vToolbarRef = ref();
3335
3465
  const isActive = useProxiedModel(props, 'modelValue');
3466
+ const scrollBehavior = computed(() => {
3467
+ const behavior = new Set(props.scrollBehavior?.split(' ') ?? []);
3468
+ return {
3469
+ hide: behavior.has('hide'),
3470
+ // fullyHide: behavior.has('fully-hide'),
3471
+ inverted: behavior.has('inverted'),
3472
+ collapse: behavior.has('collapse'),
3473
+ elevate: behavior.has('elevate'),
3474
+ fadeImage: behavior.has('fade-image')
3475
+ // shrink: behavior.has('shrink'),
3476
+ };
3477
+ });
3478
+
3479
+ const canScroll = computed(() => {
3480
+ const behavior = scrollBehavior.value;
3481
+ return behavior.hide ||
3482
+ // behavior.fullyHide ||
3483
+ behavior.inverted || behavior.collapse || behavior.elevate || behavior.fadeImage ||
3484
+ // behavior.shrink ||
3485
+ !isActive.value;
3486
+ });
3487
+ const {
3488
+ currentScroll,
3489
+ currentThreshold,
3490
+ computedScrollThreshold,
3491
+ isScrollingUp
3492
+ } = useScroll(props, {
3493
+ canScroll
3494
+ });
3495
+ const isCollapsed = computed(() => props.collapse || scrollBehavior.value.collapse && (scrollBehavior.value.inverted ? currentScroll.value < 1 : currentScroll.value > 0));
3496
+ const isFlat = computed(() => props.flat || scrollBehavior.value.elevate && currentScroll.value === (scrollBehavior.value.inverted ? 1 : 0));
3497
+ const scrollRatio = computed(() => Math.min((currentThreshold.value - currentScroll.value) / currentThreshold.value || 1, 1));
3498
+ const opacity = computed(() => scrollBehavior.value.fadeImage ? scrollBehavior.value.inverted ? 1 - scrollRatio.value : scrollRatio.value : undefined);
3336
3499
  const height = computed(() => {
3500
+ if (scrollBehavior.value.hide && scrollBehavior.value.inverted) return 0;
3337
3501
  const height = vToolbarRef.value?.contentHeight ?? 0;
3338
3502
  const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0;
3339
3503
  return height + extensionHeight;
3340
3504
  });
3505
+ function setActive() {
3506
+ const val = currentScroll.value;
3507
+ if (scrollBehavior.value.hide) {
3508
+ if (scrollBehavior.value.inverted) {
3509
+ isActive.value = val > computedScrollThreshold.value;
3510
+ } else {
3511
+ isActive.value = isScrollingUp.value || val < computedScrollThreshold.value;
3512
+ }
3513
+ } else if (scrollBehavior.value.inverted) {
3514
+ isActive.value = currentScroll.value === 0;
3515
+ } else {
3516
+ isActive.value = true;
3517
+ }
3518
+ }
3519
+ watch(currentScroll, setActive, {
3520
+ immediate: true
3521
+ });
3522
+ watch(scrollBehavior, setActive);
3341
3523
  const {
3342
3524
  ssrBootStyles
3343
3525
  } = useSsrBoot();
@@ -3348,7 +3530,7 @@ const VAppBar = genericComponent()({
3348
3530
  order: computed(() => parseInt(props.order, 10)),
3349
3531
  position: toRef(props, 'location'),
3350
3532
  layoutSize: height,
3351
- elementSize: height,
3533
+ elementSize: ref(undefined),
3352
3534
  active: isActive,
3353
3535
  absolute: toRef(props, 'absolute')
3354
3536
  });
@@ -3358,13 +3540,17 @@ const VAppBar = genericComponent()({
3358
3540
  "ref": vToolbarRef,
3359
3541
  "class": ['v-app-bar', {
3360
3542
  'v-app-bar--bottom': props.location === 'bottom'
3361
- }],
3362
- "style": {
3543
+ }, props.class],
3544
+ "style": [{
3363
3545
  ...layoutItemStyles.value,
3546
+ '--v-toolbar-image-opacity': opacity.value,
3364
3547
  height: undefined,
3365
3548
  ...ssrBootStyles.value
3366
- }
3367
- }, toolbarProps), slots);
3549
+ }, props.style]
3550
+ }, toolbarProps, {
3551
+ "collapse": isCollapsed.value,
3552
+ "flat": isFlat.value
3553
+ }), slots);
3368
3554
  });
3369
3555
  return {};
3370
3556
  }
@@ -3447,6 +3633,7 @@ function useVariant(props) {
3447
3633
  const makeVBtnGroupProps = propsFactory({
3448
3634
  divided: Boolean,
3449
3635
  ...makeBorderProps(),
3636
+ ...makeComponentProps(),
3450
3637
  ...makeDensityProps(),
3451
3638
  ...makeElevationProps(),
3452
3639
  ...makeRoundedProps(),
@@ -3489,7 +3676,8 @@ const VBtnGroup = genericComponent()({
3489
3676
  return createVNode(props.tag, {
3490
3677
  "class": ['v-btn-group', {
3491
3678
  'v-btn-group--divided': props.divided
3492
- }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value]
3679
+ }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
3680
+ "style": props.style
3493
3681
  }, slots);
3494
3682
  });
3495
3683
  }
@@ -3722,8 +3910,10 @@ const VBtnToggle = genericComponent()({
3722
3910
  useRender(() => {
3723
3911
  const [btnGroupProps] = VBtnGroup.filterProps(props);
3724
3912
  return createVNode(VBtnGroup, mergeProps({
3725
- "class": "v-btn-toggle"
3726
- }, btnGroupProps), {
3913
+ "class": ['v-btn-toggle', props.class]
3914
+ }, btnGroupProps, {
3915
+ "style": props.style
3916
+ }), {
3727
3917
  default: () => [slots.default?.({
3728
3918
  isSelected,
3729
3919
  next,
@@ -3794,7 +3984,7 @@ const mdi = {
3794
3984
 
3795
3985
  // Types
3796
3986
 
3797
- const IconValue = [String, Function, Object];
3987
+ const IconValue = [String, Function, Object, Array];
3798
3988
  const IconSymbol = Symbol.for('vuetify:icons');
3799
3989
  const makeIconProps = propsFactory({
3800
3990
  icon: {
@@ -3814,8 +4004,9 @@ const VComponentIcon = genericComponent()({
3814
4004
  slots
3815
4005
  } = _ref;
3816
4006
  return () => {
4007
+ const Icon = props.icon;
3817
4008
  return createVNode(props.tag, null, {
3818
- default: () => [props.icon ? createVNode(props.icon, null, null) : slots.default?.()]
4009
+ default: () => [props.icon ? createVNode(Icon, null, null) : slots.default?.()]
3819
4010
  });
3820
4011
  };
3821
4012
  }
@@ -3838,7 +4029,12 @@ const VSvgIcon = defineComponent({
3838
4029
  "viewBox": "0 0 24 24",
3839
4030
  "role": "img",
3840
4031
  "aria-hidden": "true"
3841
- }, [createVNode("path", {
4032
+ }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? createVNode("path", {
4033
+ "d": path[0],
4034
+ "fill-opacity": path[1]
4035
+ }, null) : createVNode("path", {
4036
+ "d": path
4037
+ }, null)) : createVNode("path", {
3842
4038
  "d": props.icon
3843
4039
  }, null)])]
3844
4040
  });
@@ -3903,7 +4099,12 @@ const useIcon = props => {
3903
4099
  }
3904
4100
  }
3905
4101
  if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
3906
- if (typeof icon !== 'string') {
4102
+ if (Array.isArray(icon)) {
4103
+ return {
4104
+ component: VSvgIcon,
4105
+ icon
4106
+ };
4107
+ } else if (typeof icon !== 'string') {
3907
4108
  return {
3908
4109
  component: VComponentIcon,
3909
4110
  icon
@@ -3960,6 +4161,7 @@ const makeVIconProps = propsFactory({
3960
4161
  start: Boolean,
3961
4162
  end: Boolean,
3962
4163
  icon: IconValue,
4164
+ ...makeComponentProps(),
3963
4165
  ...makeSizeProps(),
3964
4166
  ...makeTagProps({
3965
4167
  tag: 'i'
@@ -4002,12 +4204,12 @@ const VIcon = genericComponent()({
4002
4204
  'v-icon--clickable': !!attrs.onClick,
4003
4205
  'v-icon--start': props.start,
4004
4206
  'v-icon--end': props.end
4005
- }],
4207
+ }, props.class],
4006
4208
  "style": [!sizeClasses.value ? {
4007
4209
  fontSize: convertToUnit(props.size),
4008
4210
  height: convertToUnit(props.size),
4009
4211
  width: convertToUnit(props.size)
4010
- } : undefined, textColorStyles.value],
4212
+ } : undefined, textColorStyles.value, props.style],
4011
4213
  "role": attrs.onClick ? 'button' : undefined,
4012
4214
  "aria-hidden": !attrs.onClick
4013
4215
  }, {
@@ -4018,14 +4220,14 @@ const VIcon = genericComponent()({
4018
4220
  });
4019
4221
 
4020
4222
  // Utilities
4021
- function useIntersectionObserver(callback) {
4223
+ function useIntersectionObserver(callback, options) {
4022
4224
  const intersectionRef = ref();
4023
4225
  const isIntersecting = ref(false);
4024
4226
  if (SUPPORTS_INTERSECTION) {
4025
4227
  const observer = new IntersectionObserver(entries => {
4026
4228
  callback?.(entries, observer);
4027
4229
  isIntersecting.value = !!entries.find(entry => entry.isIntersecting);
4028
- });
4230
+ }, options);
4029
4231
  onBeforeUnmount(() => {
4030
4232
  observer.disconnect();
4031
4233
  });
@@ -4065,6 +4267,7 @@ const VProgressCircular = genericComponent()({
4065
4267
  type: [Number, String],
4066
4268
  default: 4
4067
4269
  },
4270
+ ...makeComponentProps(),
4068
4271
  ...makeSizeProps(),
4069
4272
  ...makeTagProps({
4070
4273
  tag: 'div'
@@ -4120,8 +4323,8 @@ const VProgressCircular = genericComponent()({
4120
4323
  'v-progress-circular--indeterminate': !!props.indeterminate,
4121
4324
  'v-progress-circular--visible': isIntersecting.value,
4122
4325
  'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink'
4123
- }, themeClasses.value, sizeClasses.value, textColorClasses.value],
4124
- "style": [sizeStyles.value, textColorStyles.value],
4326
+ }, themeClasses.value, sizeClasses.value, textColorClasses.value, props.class],
4327
+ "style": [sizeStyles.value, textColorStyles.value, props.style],
4125
4328
  "role": "progressbar",
4126
4329
  "aria-valuemin": "0",
4127
4330
  "aria-valuemax": "100",
@@ -4540,6 +4743,7 @@ const VProgressLinear = genericComponent()({
4540
4743
  stream: Boolean,
4541
4744
  striped: Boolean,
4542
4745
  roundedBar: Boolean,
4746
+ ...makeComponentProps(),
4543
4747
  ...makeLocationProps({
4544
4748
  location: 'top'
4545
4749
  }),
@@ -4611,14 +4815,14 @@ const VProgressLinear = genericComponent()({
4611
4815
  'v-progress-linear--rounded': props.rounded,
4612
4816
  'v-progress-linear--rounded-bar': props.roundedBar,
4613
4817
  'v-progress-linear--striped': props.striped
4614
- }, roundedClasses.value, themeClasses.value],
4615
- "style": {
4818
+ }, roundedClasses.value, themeClasses.value, props.class],
4819
+ "style": [{
4616
4820
  bottom: props.location === 'bottom' ? 0 : undefined,
4617
4821
  top: props.location === 'top' ? 0 : undefined,
4618
4822
  height: props.active ? convertToUnit(height.value) : 0,
4619
4823
  '--v-progress-linear-height': convertToUnit(height.value),
4620
4824
  ...locationStyles.value
4621
- },
4825
+ }, props.style],
4622
4826
  "role": "progressbar",
4623
4827
  "aria-hidden": props.active ? 'false' : 'true',
4624
4828
  "aria-valuemin": "0",
@@ -4827,8 +5031,9 @@ const makeVBtnProps = propsFactory({
4827
5031
  type: Boolean,
4828
5032
  default: true
4829
5033
  },
5034
+ text: String,
4830
5035
  ...makeBorderProps(),
4831
- ...makeRoundedProps(),
5036
+ ...makeComponentProps(),
4832
5037
  ...makeDensityProps(),
4833
5038
  ...makeDimensionProps(),
4834
5039
  ...makeElevationProps(),
@@ -4836,6 +5041,7 @@ const makeVBtnProps = propsFactory({
4836
5041
  ...makeLoaderProps(),
4837
5042
  ...makeLocationProps(),
4838
5043
  ...makePositionProps(),
5044
+ ...makeRoundedProps(),
4839
5045
  ...makeRouterProps(),
4840
5046
  ...makeSizeProps(),
4841
5047
  ...makeTagProps({
@@ -4933,8 +5139,8 @@ const VBtn = genericComponent()({
4933
5139
  'v-btn--icon': !!props.icon,
4934
5140
  'v-btn--loading': props.loading,
4935
5141
  'v-btn--stacked': props.stacked
4936
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
4937
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value],
5142
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
5143
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value, props.style],
4938
5144
  "disabled": isDisabled.value || undefined,
4939
5145
  "href": link.href.value,
4940
5146
  "onClick": e => {
@@ -4972,7 +5178,9 @@ const VBtn = genericComponent()({
4972
5178
  icon: props.icon
4973
5179
  }
4974
5180
  }
4975
- }, slots.default)]), !props.icon && hasAppend && createVNode("span", {
5181
+ }, {
5182
+ default: () => [slots.default?.() ?? props.text]
5183
+ })]), !props.icon && hasAppend && createVNode("span", {
4976
5184
  "key": "append",
4977
5185
  "class": "v-btn__append"
4978
5186
  }, [!slots.append ? createVNode(VIcon, {
@@ -5009,15 +5217,17 @@ const VAppBarNavIcon = genericComponent()({
5009
5217
  icon: {
5010
5218
  type: IconValue,
5011
5219
  default: '$menu'
5012
- }
5220
+ },
5221
+ ...makeComponentProps()
5013
5222
  },
5014
5223
  setup(props, _ref) {
5015
5224
  let {
5016
5225
  slots
5017
5226
  } = _ref;
5018
5227
  useRender(() => createVNode(VBtn, {
5019
- "class": "v-app-bar-nav-icon",
5020
- "icon": props.icon
5228
+ "class": ['v-app-bar-nav-icon', props.class],
5229
+ "icon": props.icon,
5230
+ "style": props.style
5021
5231
  }, slots));
5022
5232
  return {};
5023
5233
  }
@@ -5025,9 +5235,12 @@ const VAppBarNavIcon = genericComponent()({
5025
5235
 
5026
5236
  const VToolbarItems = genericComponent()({
5027
5237
  name: 'VToolbarItems',
5028
- props: makeVariantProps({
5029
- variant: 'text'
5030
- }),
5238
+ props: {
5239
+ ...makeComponentProps(),
5240
+ ...makeVariantProps({
5241
+ variant: 'text'
5242
+ })
5243
+ },
5031
5244
  setup(props, _ref) {
5032
5245
  let {
5033
5246
  slots
@@ -5040,7 +5253,8 @@ const VToolbarItems = genericComponent()({
5040
5253
  }
5041
5254
  });
5042
5255
  useRender(() => createVNode("div", {
5043
- "class": "v-toolbar-items"
5256
+ "class": ['v-toolbar-items', props.class],
5257
+ "style": props.style
5044
5258
  }, [slots.default?.()]));
5045
5259
  return {};
5046
5260
  }
@@ -5102,6 +5316,7 @@ const VAlert = genericComponent()({
5102
5316
  type: String,
5103
5317
  validator: val => allowedTypes.includes(val)
5104
5318
  },
5319
+ ...makeComponentProps(),
5105
5320
  ...makeDensityProps(),
5106
5321
  ...makeDimensionProps(),
5107
5322
  ...makeElevationProps(),
@@ -5184,8 +5399,8 @@ const VAlert = genericComponent()({
5184
5399
  [`v-alert--border-${props.border === true ? 'start' : props.border}`]: true
5185
5400
  }, {
5186
5401
  'v-alert--prominent': props.prominent
5187
- }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
5188
- "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
5402
+ }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
5403
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
5189
5404
  "role": "alert"
5190
5405
  }, {
5191
5406
  default: () => [genOverlays(false, 'v-alert'), props.border && createVNode("div", {
@@ -5279,6 +5494,7 @@ const VLabel = genericComponent()({
5279
5494
  props: {
5280
5495
  text: String,
5281
5496
  clickable: Boolean,
5497
+ ...makeComponentProps(),
5282
5498
  ...makeThemeProps()
5283
5499
  },
5284
5500
  setup(props, _ref) {
@@ -5288,7 +5504,8 @@ const VLabel = genericComponent()({
5288
5504
  useRender(() => createVNode("label", {
5289
5505
  "class": ['v-label', {
5290
5506
  'v-label--clickable': props.clickable
5291
- }]
5507
+ }, props.class],
5508
+ "style": props.style
5292
5509
  }, [props.text, slots.default?.()]));
5293
5510
  return {};
5294
5511
  }
@@ -5297,7 +5514,8 @@ const VLabel = genericComponent()({
5297
5514
  const VFieldLabel = genericComponent()({
5298
5515
  name: 'VFieldLabel',
5299
5516
  props: {
5300
- floating: Boolean
5517
+ floating: Boolean,
5518
+ ...makeComponentProps()
5301
5519
  },
5302
5520
  setup(props, _ref) {
5303
5521
  let {
@@ -5306,7 +5524,8 @@ const VFieldLabel = genericComponent()({
5306
5524
  useRender(() => createVNode(VLabel, {
5307
5525
  "class": ['v-field-label', {
5308
5526
  'v-field-label--floating': props.floating
5309
- }],
5527
+ }, props.class],
5528
+ "style": props.style,
5310
5529
  "aria-hidden": props.floating || undefined
5311
5530
  }, slots));
5312
5531
  return {};
@@ -5346,7 +5565,7 @@ function useFocus(props) {
5346
5565
 
5347
5566
  // Types
5348
5567
 
5349
- const allowedVariants$1 = ['underlined', 'outlined', 'filled', 'solo', 'plain'];
5568
+ const allowedVariants$1 = ['underlined', 'outlined', 'filled', 'solo', 'solo-inverted', 'solo-filled', 'plain'];
5350
5569
  const makeVFieldProps = propsFactory({
5351
5570
  appendInnerIcon: IconValue,
5352
5571
  bgColor: String,
@@ -5357,9 +5576,11 @@ const makeVFieldProps = propsFactory({
5357
5576
  },
5358
5577
  active: Boolean,
5359
5578
  color: String,
5579
+ baseColor: String,
5360
5580
  dirty: Boolean,
5361
5581
  disabled: Boolean,
5362
5582
  error: Boolean,
5583
+ flat: Boolean,
5363
5584
  label: String,
5364
5585
  persistentClear: Boolean,
5365
5586
  prependInnerIcon: IconValue,
@@ -5373,8 +5594,10 @@ const makeVFieldProps = propsFactory({
5373
5594
  'onClick:clear': EventProp(),
5374
5595
  'onClick:appendInner': EventProp(),
5375
5596
  'onClick:prependInner': EventProp(),
5376
- ...makeThemeProps(),
5377
- ...makeLoaderProps()
5597
+ ...makeComponentProps(),
5598
+ ...makeLoaderProps(),
5599
+ ...makeRoundedProps(),
5600
+ ...makeThemeProps()
5378
5601
  }, 'v-field');
5379
5602
  const VField = genericComponent()({
5380
5603
  name: 'VField',
@@ -5409,6 +5632,9 @@ const VField = genericComponent()({
5409
5632
  const {
5410
5633
  InputIcon
5411
5634
  } = useInputIcon(props);
5635
+ const {
5636
+ roundedClasses
5637
+ } = useRounded(props);
5412
5638
  const isActive = computed(() => props.dirty || props.active);
5413
5639
  const hasLabel = computed(() => !props.singleLine && !!(props.label || slots.label));
5414
5640
  const uid = getUid();
@@ -5425,7 +5651,7 @@ const VField = genericComponent()({
5425
5651
  textColorClasses,
5426
5652
  textColorStyles
5427
5653
  } = useTextColor(computed(() => {
5428
- return isActive.value && isFocused.value && !props.error && !props.disabled ? props.color : undefined;
5654
+ return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : props.baseColor;
5429
5655
  }));
5430
5656
  watch(isActive, val => {
5431
5657
  if (hasLabel.value) {
@@ -5494,6 +5720,7 @@ const VField = genericComponent()({
5494
5720
  'v-field--disabled': props.disabled,
5495
5721
  'v-field--dirty': props.dirty,
5496
5722
  'v-field--error': props.error,
5723
+ 'v-field--flat': props.flat,
5497
5724
  'v-field--has-background': !!props.bgColor,
5498
5725
  'v-field--persistent-clear': props.persistentClear,
5499
5726
  'v-field--prepended': hasPrepend,
@@ -5501,8 +5728,8 @@ const VField = genericComponent()({
5501
5728
  'v-field--single-line': props.singleLine,
5502
5729
  'v-field--no-label': !label,
5503
5730
  [`v-field--variant-${props.variant}`]: true
5504
- }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value],
5505
- "style": [backgroundColorStyles.value, textColorStyles.value],
5731
+ }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, props.class],
5732
+ "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
5506
5733
  "onClick": onClick
5507
5734
  }, attrs), [createVNode("div", {
5508
5735
  "class": "v-field__overlay"
@@ -5521,7 +5748,7 @@ const VField = genericComponent()({
5521
5748
  }, null), slots['prepend-inner']?.(slotProps.value)]), createVNode("div", {
5522
5749
  "class": "v-field__field",
5523
5750
  "data-no-activator": ""
5524
- }, [['solo', 'filled'].includes(props.variant) && hasLabel.value && createVNode(VFieldLabel, {
5751
+ }, [['filled', 'solo', 'solo-inverted', 'solo-filled'].includes(props.variant) && hasLabel.value && createVNode(VFieldLabel, {
5525
5752
  "key": "floating-label",
5526
5753
  "ref": floatingLabelRef,
5527
5754
  "class": [textColorClasses.value],
@@ -5590,7 +5817,7 @@ const VField = genericComponent()({
5590
5817
  });
5591
5818
  // TODO: this is kinda slow, might be better to implicitly inherit props instead
5592
5819
  function filterFieldProps(attrs) {
5593
- const keys = Object.keys(VField.props).filter(k => !isOn(k));
5820
+ const keys = Object.keys(VField.props).filter(k => !isOn(k) && k !== 'class' && k !== 'style');
5594
5821
  return pick(attrs, keys);
5595
5822
  }
5596
5823
 
@@ -5605,6 +5832,7 @@ const VMessages = genericComponent()({
5605
5832
  type: [Array, String],
5606
5833
  default: () => []
5607
5834
  },
5835
+ ...makeComponentProps(),
5608
5836
  ...makeTransitionProps({
5609
5837
  transition: {
5610
5838
  component: VSlideYTransition,
@@ -5625,8 +5853,8 @@ const VMessages = genericComponent()({
5625
5853
  useRender(() => createVNode(MaybeTransition, {
5626
5854
  "transition": props.transition,
5627
5855
  "tag": "div",
5628
- "class": ['v-messages', textColorClasses.value],
5629
- "style": textColorStyles.value,
5856
+ "class": ['v-messages', textColorClasses.value, props.class],
5857
+ "style": [textColorStyles.value, props.style],
5630
5858
  "role": "alert",
5631
5859
  "aria-live": "polite"
5632
5860
  }, {
@@ -5922,6 +6150,7 @@ const makeVInputProps = propsFactory({
5922
6150
  },
5923
6151
  'onClick:prepend': EventProp(),
5924
6152
  'onClick:append': EventProp(),
6153
+ ...makeComponentProps(),
5925
6154
  ...makeDensityProps(),
5926
6155
  ...makeValidationProps()
5927
6156
  }, 'v-input');
@@ -5989,7 +6218,8 @@ const VInput = genericComponent()({
5989
6218
  const hasMessages = messages.value.length > 0;
5990
6219
  const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details);
5991
6220
  return createVNode("div", {
5992
- "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value]
6221
+ "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value, props.class],
6222
+ "style": props.style
5993
6223
  }, [hasPrepend && createVNode("div", {
5994
6224
  "key": "prepend",
5995
6225
  "class": "v-input__prepend"
@@ -6032,6 +6262,7 @@ const VCounter = genericComponent()({
6032
6262
  type: [Number, String],
6033
6263
  default: 0
6034
6264
  },
6265
+ ...makeComponentProps(),
6035
6266
  ...makeTransitionProps({
6036
6267
  transition: {
6037
6268
  component: VSlideYTransition
@@ -6049,7 +6280,8 @@ const VCounter = genericComponent()({
6049
6280
  "transition": props.transition
6050
6281
  }, {
6051
6282
  default: () => [withDirectives(createVNode("div", {
6052
- "class": "v-counter"
6283
+ "class": ['v-counter', props.class],
6284
+ "style": props.style
6053
6285
  }, [slots.default ? slots.default({
6054
6286
  counter: counter.value,
6055
6287
  max: props.max,
@@ -6252,7 +6484,8 @@ const VTextField = genericComponent()({
6252
6484
  'v-text-field--prefixed': props.prefix,
6253
6485
  'v-text-field--suffixed': props.suffix,
6254
6486
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
6255
- }]
6487
+ }, props.class],
6488
+ "style": props.style
6256
6489
  }, rootAttrs, inputProps, {
6257
6490
  "focused": isFocused.value
6258
6491
  }), {
@@ -6368,6 +6601,7 @@ const VSelectionControlGroup = genericComponent()({
6368
6601
  type: String,
6369
6602
  default: 'VSelectionControl'
6370
6603
  },
6604
+ ...makeComponentProps(),
6371
6605
  ...makeSelectionControlGroupProps()
6372
6606
  },
6373
6607
  emits: {
@@ -6415,7 +6649,8 @@ const VSelectionControlGroup = genericComponent()({
6415
6649
  useRender(() => createVNode("div", {
6416
6650
  "class": ['v-selection-control-group', {
6417
6651
  'v-selection-control-group--inline': props.inline
6418
- }],
6652
+ }, props.class],
6653
+ "style": props.style,
6419
6654
  "role": props.type === 'radio' ? 'radiogroup' : undefined
6420
6655
  }, [slots.default?.()]));
6421
6656
  return {};
@@ -6429,6 +6664,7 @@ const makeSelectionControlProps = propsFactory({
6429
6664
  trueValue: null,
6430
6665
  falseValue: null,
6431
6666
  value: null,
6667
+ ...makeComponentProps(),
6432
6668
  ...makeSelectionControlGroupProps()
6433
6669
  }, 'v-selection-control');
6434
6670
  function useSelectionControl(props) {
@@ -6543,8 +6779,10 @@ const VSelectionControl = genericComponent()({
6543
6779
  'v-selection-control--focused': isFocused.value,
6544
6780
  'v-selection-control--focus-visible': isFocusVisible.value,
6545
6781
  'v-selection-control--inline': props.inline
6546
- }, densityClasses.value]
6547
- }, rootAttrs), [createVNode("div", {
6782
+ }, densityClasses.value, props.class]
6783
+ }, rootAttrs, {
6784
+ "style": props.style
6785
+ }), [createVNode("div", {
6548
6786
  "class": ['v-selection-control__wrapper', textColorClasses.value],
6549
6787
  "style": textColorStyles.value
6550
6788
  }, [slots.default?.(), withDirectives(createVNode("div", {
@@ -6626,7 +6864,8 @@ const VCheckboxBtn = genericComponent()({
6626
6864
  useRender(() => createVNode(VSelectionControl, mergeProps(props, {
6627
6865
  "modelValue": model.value,
6628
6866
  "onUpdate:modelValue": [$event => model.value = $event, onChange],
6629
- "class": "v-checkbox-btn",
6867
+ "class": ['v-checkbox-btn', props.class],
6868
+ "style": props.style,
6630
6869
  "type": "checkbox",
6631
6870
  "inline": true,
6632
6871
  "falseIcon": falseIcon.value,
@@ -6666,10 +6905,11 @@ const VCheckbox = genericComponent()({
6666
6905
  const [inputProps, _1] = VInput.filterProps(props);
6667
6906
  const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6668
6907
  return createVNode(VInput, mergeProps({
6669
- "class": "v-checkbox"
6908
+ "class": ['v-checkbox', props.class]
6670
6909
  }, inputAttrs, inputProps, {
6671
6910
  "id": id.value,
6672
- "focused": isFocused.value
6911
+ "focused": isFocused.value,
6912
+ "style": props.style
6673
6913
  }), {
6674
6914
  ...slots,
6675
6915
  default: _ref2 => {
@@ -6700,6 +6940,7 @@ const makeVAvatarProps = propsFactory({
6700
6940
  end: Boolean,
6701
6941
  icon: IconValue,
6702
6942
  image: String,
6943
+ ...makeComponentProps(),
6703
6944
  ...makeDensityProps(),
6704
6945
  ...makeRoundedProps(),
6705
6946
  ...makeSizeProps(),
@@ -6738,8 +6979,8 @@ const VAvatar = genericComponent()({
6738
6979
  "class": ['v-avatar', {
6739
6980
  'v-avatar--start': props.start,
6740
6981
  'v-avatar--end': props.end
6741
- }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
6742
- "style": [colorStyles.value, sizeStyles.value]
6982
+ }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6983
+ "style": [colorStyles.value, sizeStyles.value, props.style]
6743
6984
  }, {
6744
6985
  default: () => [props.image ? createVNode(VImg, {
6745
6986
  "key": "image",
@@ -6767,6 +7008,7 @@ const VChipGroup = genericComponent()({
6767
7008
  type: Function,
6768
7009
  default: deepEqual
6769
7010
  },
7011
+ ...makeComponentProps(),
6770
7012
  ...makeGroupProps({
6771
7013
  selectedClass: 'v-chip--selected'
6772
7014
  }),
@@ -6804,7 +7046,8 @@ const VChipGroup = genericComponent()({
6804
7046
  useRender(() => createVNode(props.tag, {
6805
7047
  "class": ['v-chip-group', {
6806
7048
  'v-chip-group--column': props.column
6807
- }, themeClasses.value]
7049
+ }, themeClasses.value, props.class],
7050
+ "style": props.style
6808
7051
  }, {
6809
7052
  default: () => [slots.default?.({
6810
7053
  isSelected,
@@ -6818,8 +7061,6 @@ const VChipGroup = genericComponent()({
6818
7061
  }
6819
7062
  });
6820
7063
 
6821
- // Types
6822
-
6823
7064
  const VChip = genericComponent()({
6824
7065
  name: 'VChip',
6825
7066
  directives: {
@@ -6864,6 +7105,7 @@ const VChip = genericComponent()({
6864
7105
  onClick: EventProp(),
6865
7106
  onClickOnce: EventProp(),
6866
7107
  ...makeBorderProps(),
7108
+ ...makeComponentProps(),
6867
7109
  ...makeDensityProps(),
6868
7110
  ...makeElevationProps(),
6869
7111
  ...makeGroupItemProps(),
@@ -6956,8 +7198,8 @@ const VChip = genericComponent()({
6956
7198
  'v-chip--link': isClickable.value,
6957
7199
  'v-chip--filter': hasFilter,
6958
7200
  'v-chip--pill': props.pill
6959
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value],
6960
- "style": [hasColor ? colorStyles.value : undefined],
7201
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value, props.class],
7202
+ "style": [hasColor ? colorStyles.value : undefined, props.style],
6961
7203
  "disabled": props.disabled || undefined,
6962
7204
  "draggable": props.draggable,
6963
7205
  "href": link.href.value,
@@ -7066,6 +7308,7 @@ const VDivider = genericComponent()({
7066
7308
  length: [Number, String],
7067
7309
  thickness: [Number, String],
7068
7310
  vertical: Boolean,
7311
+ ...makeComponentProps(),
7069
7312
  ...makeThemeProps()
7070
7313
  },
7071
7314
  setup(props, _ref) {
@@ -7094,8 +7337,8 @@ const VDivider = genericComponent()({
7094
7337
  'v-divider': true,
7095
7338
  'v-divider--inset': props.inset,
7096
7339
  'v-divider--vertical': props.vertical
7097
- }, themeClasses.value, textColorClasses.value],
7098
- "style": [dividerStyles.value, textColorStyles.value],
7340
+ }, themeClasses.value, textColorClasses.value, props.class],
7341
+ "style": [dividerStyles.value, textColorStyles.value, props.style],
7099
7342
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
7100
7343
  "role": `${attrs.role || 'separator'}`
7101
7344
  }, null));
@@ -7594,6 +7837,7 @@ const makeVListGroupProps = propsFactory({
7594
7837
  fluid: Boolean,
7595
7838
  subgroup: Boolean,
7596
7839
  value: null,
7840
+ ...makeComponentProps(),
7597
7841
  ...makeTagProps()
7598
7842
  }, 'v-list-group');
7599
7843
  const VListGroup = genericComponent()({
@@ -7642,7 +7886,8 @@ const VListGroup = genericComponent()({
7642
7886
  'v-list-group--fluid': props.fluid,
7643
7887
  'v-list-group--subgroup': props.subgroup,
7644
7888
  'v-list-group--open': isOpen.value
7645
- }]
7889
+ }, props.class],
7890
+ "style": props.style
7646
7891
  }, {
7647
7892
  default: () => [slots.activator && createVNode(VDefaultsProvider, {
7648
7893
  "defaults": activatorDefaults.value
@@ -7709,6 +7954,7 @@ const VListItem = genericComponent()({
7709
7954
  onClick: EventProp(),
7710
7955
  onClickOnce: EventProp(),
7711
7956
  ...makeBorderProps(),
7957
+ ...makeComponentProps(),
7712
7958
  ...makeDensityProps(),
7713
7959
  ...makeDimensionProps(),
7714
7960
  ...makeElevationProps(),
@@ -7819,8 +8065,8 @@ const VListItem = genericComponent()({
7819
8065
  'v-list-item--nav': props.nav,
7820
8066
  'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,
7821
8067
  [`${props.activeClass}`]: props.activeClass && isActive.value
7822
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value],
7823
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value],
8068
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
8069
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, props.style],
7824
8070
  "href": link.href.value,
7825
8071
  "tabindex": isClickable.value ? 0 : undefined,
7826
8072
  "onClick": onClick,
@@ -7913,6 +8159,7 @@ const VListSubheader = genericComponent()({
7913
8159
  inset: Boolean,
7914
8160
  sticky: Boolean,
7915
8161
  title: String,
8162
+ ...makeComponentProps(),
7916
8163
  ...makeTagProps()
7917
8164
  },
7918
8165
  setup(props, _ref) {
@@ -7929,10 +8176,10 @@ const VListSubheader = genericComponent()({
7929
8176
  "class": ['v-list-subheader', {
7930
8177
  'v-list-subheader--inset': props.inset,
7931
8178
  'v-list-subheader--sticky': props.sticky
7932
- }, textColorClasses.value],
7933
- "style": {
8179
+ }, textColorClasses.value, props.class],
8180
+ "style": [{
7934
8181
  textColorStyles
7935
- }
8182
+ }, props.style]
7936
8183
  }, {
7937
8184
  default: () => [hasText && createVNode("div", {
7938
8185
  "class": "v-list-subheader__text"
@@ -8152,6 +8399,7 @@ const VList = genericComponent()({
8152
8399
  openStrategy: 'list'
8153
8400
  }),
8154
8401
  ...makeBorderProps(),
8402
+ ...makeComponentProps(),
8155
8403
  ...makeDensityProps(),
8156
8404
  ...makeDimensionProps(),
8157
8405
  ...makeElevationProps(),
@@ -8263,8 +8511,8 @@ const VList = genericComponent()({
8263
8511
  "class": ['v-list', {
8264
8512
  'v-list--disabled': props.disabled,
8265
8513
  'v-list--nav': props.nav
8266
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value],
8267
- "style": [backgroundColorStyles.value, dimensionStyles.value],
8514
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class],
8515
+ "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
8268
8516
  "role": "listbox",
8269
8517
  "aria-activedescendant": undefined,
8270
8518
  "onFocusin": onFocusin,
@@ -8292,6 +8540,7 @@ const VListItemAction = genericComponent()({
8292
8540
  props: {
8293
8541
  start: Boolean,
8294
8542
  end: Boolean,
8543
+ ...makeComponentProps(),
8295
8544
  ...makeTagProps()
8296
8545
  },
8297
8546
  setup(props, _ref) {
@@ -8302,7 +8551,8 @@ const VListItemAction = genericComponent()({
8302
8551
  "class": ['v-list-item-action', {
8303
8552
  'v-list-item-action--start': props.start,
8304
8553
  'v-list-item-action--end': props.end
8305
- }]
8554
+ }, props.class],
8555
+ "style": props.style
8306
8556
  }, slots));
8307
8557
  return {};
8308
8558
  }
@@ -8313,6 +8563,7 @@ const VListItemMedia = genericComponent()({
8313
8563
  props: {
8314
8564
  start: Boolean,
8315
8565
  end: Boolean,
8566
+ ...makeComponentProps(),
8316
8567
  ...makeTagProps()
8317
8568
  },
8318
8569
  setup(props, _ref) {
@@ -8324,7 +8575,8 @@ const VListItemMedia = genericComponent()({
8324
8575
  "class": ['v-list-item-media', {
8325
8576
  'v-list-item-media--start': props.start,
8326
8577
  'v-list-item-media--end': props.end
8327
- }]
8578
+ }, props.class],
8579
+ "style": props.style
8328
8580
  }, slots);
8329
8581
  });
8330
8582
  return {};
@@ -9565,6 +9817,7 @@ const makeVOverlayProps = propsFactory({
9565
9817
  default: 2000
9566
9818
  },
9567
9819
  ...makeActivatorProps(),
9820
+ ...makeComponentProps(),
9568
9821
  ...makeDimensionProps(),
9569
9822
  ...makeLazyProps(),
9570
9823
  ...makeLocationStrategyProps(),
@@ -9732,10 +9985,10 @@ const VOverlay = genericComponent()({
9732
9985
  'v-overlay--absolute': props.absolute || props.contained,
9733
9986
  'v-overlay--active': isActive.value,
9734
9987
  'v-overlay--contained': props.contained
9735
- }, themeClasses.value, rtlClasses.value],
9988
+ }, themeClasses.value, rtlClasses.value, props.class],
9736
9989
  "style": [stackStyles.value, {
9737
9990
  top: convertToUnit(top.value)
9738
- }],
9991
+ }, props.style],
9739
9992
  "ref": root
9740
9993
  }, scopeId, attrs), [createVNode(Scrim, mergeProps({
9741
9994
  "color": scrimColor,
@@ -9841,7 +10094,8 @@ const VMenu = genericComponent()({
9841
10094
  const [overlayProps] = VOverlay.filterProps(props);
9842
10095
  return createVNode(VOverlay, mergeProps({
9843
10096
  "ref": overlay,
9844
- "class": ['v-menu']
10097
+ "class": ['v-menu', props.class],
10098
+ "style": props.style
9845
10099
  }, overlayProps, {
9846
10100
  "modelValue": isActive.value,
9847
10101
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -10060,7 +10314,8 @@ const VSelect = genericComponent()({
10060
10314
  'v-select--chips': !!props.chips,
10061
10315
  [`v-select--${props.multiple ? 'multiple' : 'single'}`]: true,
10062
10316
  'v-select--selected': model.value.length
10063
- }],
10317
+ }, props.class],
10318
+ "style": props.style,
10064
10319
  "appendInnerIcon": props.menuIcon,
10065
10320
  "readonly": true,
10066
10321
  "placeholder": placeholder,
@@ -10503,7 +10758,8 @@ const VAutocomplete = genericComponent()({
10503
10758
  'v-autocomplete--selecting-index': selectionIndex.value > -1,
10504
10759
  [`v-autocomplete--${props.multiple ? 'multiple' : 'single'}`]: true,
10505
10760
  'v-autocomplete--selection-slot': !!slots.selection
10506
- }],
10761
+ }, props.class],
10762
+ "style": props.style,
10507
10763
  "appendInnerIcon": props.menuIcon,
10508
10764
  "readonly": props.readonly,
10509
10765
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -10617,8 +10873,6 @@ const VAutocomplete = genericComponent()({
10617
10873
  }
10618
10874
  });
10619
10875
 
10620
- // Types
10621
-
10622
10876
  const VBadge = genericComponent()({
10623
10877
  name: 'VBadge',
10624
10878
  inheritAttrs: false,
@@ -10642,6 +10896,7 @@ const VBadge = genericComponent()({
10642
10896
  offsetX: [Number, String],
10643
10897
  offsetY: [Number, String],
10644
10898
  textColor: String,
10899
+ ...makeComponentProps(),
10645
10900
  ...makeLocationProps({
10646
10901
  location: 'top end'
10647
10902
  }),
@@ -10686,8 +10941,10 @@ const VBadge = genericComponent()({
10686
10941
  'v-badge--dot': props.dot,
10687
10942
  'v-badge--floating': props.floating,
10688
10943
  'v-badge--inline': props.inline
10689
- }]
10690
- }, attrs), {
10944
+ }, props.class]
10945
+ }, attrs, {
10946
+ "style": props.style
10947
+ }), {
10691
10948
  default: () => [createVNode("div", {
10692
10949
  "class": "v-badge__wrapper"
10693
10950
  }, [ctx.slots.default?.(), createVNode(MaybeTransition, {
@@ -10714,7 +10971,8 @@ const VBannerActions = genericComponent()({
10714
10971
  name: 'VBannerActions',
10715
10972
  props: {
10716
10973
  color: String,
10717
- density: String
10974
+ density: String,
10975
+ ...makeComponentProps()
10718
10976
  },
10719
10977
  setup(props, _ref) {
10720
10978
  let {
@@ -10728,7 +10986,8 @@ const VBannerActions = genericComponent()({
10728
10986
  }
10729
10987
  });
10730
10988
  useRender(() => createVNode("div", {
10731
- "class": "v-banner-actions"
10989
+ "class": ['v-banner-actions', props.class],
10990
+ "style": props.style
10732
10991
  }, [slots.default?.()]));
10733
10992
  return {};
10734
10993
  }
@@ -10749,6 +11008,7 @@ const VBanner = genericComponent()({
10749
11008
  sticky: Boolean,
10750
11009
  text: String,
10751
11010
  ...makeBorderProps(),
11011
+ ...makeComponentProps(),
10752
11012
  ...makeDensityProps(),
10753
11013
  ...makeDimensionProps(),
10754
11014
  ...makeElevationProps(),
@@ -10806,8 +11066,8 @@ const VBanner = genericComponent()({
10806
11066
  'v-banner--stacked': props.stacked || mobile.value,
10807
11067
  'v-banner--sticky': props.sticky,
10808
11068
  [`v-banner--${props.lines}-line`]: !!props.lines
10809
- }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value],
10810
- "style": [dimensionStyles.value, locationStyles.value],
11069
+ }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11070
+ "style": [dimensionStyles.value, locationStyles.value, props.style],
10811
11071
  "role": "banner"
10812
11072
  }, {
10813
11073
  default: () => [hasPrepend && createVNode("div", {
@@ -10863,6 +11123,7 @@ const VBottomNavigation = genericComponent()({
10863
11123
  default: true
10864
11124
  },
10865
11125
  ...makeBorderProps(),
11126
+ ...makeComponentProps(),
10866
11127
  ...makeDensityProps(),
10867
11128
  ...makeElevationProps(),
10868
11129
  ...makeRoundedProps(),
@@ -10937,11 +11198,11 @@ const VBottomNavigation = genericComponent()({
10937
11198
  'v-bottom-navigation--active': isActive.value,
10938
11199
  'v-bottom-navigation--grow': props.grow,
10939
11200
  'v-bottom-navigation--shift': props.mode === 'shift'
10940
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value],
11201
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
10941
11202
  "style": [backgroundColorStyles.value, layoutItemStyles.value, {
10942
11203
  height: convertToUnit(height.value),
10943
11204
  transform: `translateY(${convertToUnit(!isActive.value ? 100 : 0, '%')})`
10944
- }, ssrBootStyles.value]
11205
+ }, ssrBootStyles.value, props.style]
10945
11206
  }, {
10946
11207
  default: () => [slots.default && createVNode("div", {
10947
11208
  "class": "v-bottom-navigation__content"
@@ -10955,14 +11216,16 @@ const VBottomNavigation = genericComponent()({
10955
11216
  const VBreadcrumbsDivider = genericComponent()({
10956
11217
  name: 'VBreadcrumbsDivider',
10957
11218
  props: {
10958
- divider: [Number, String]
11219
+ divider: [Number, String],
11220
+ ...makeComponentProps()
10959
11221
  },
10960
11222
  setup(props, _ref) {
10961
11223
  let {
10962
11224
  slots
10963
11225
  } = _ref;
10964
11226
  useRender(() => createVNode("li", {
10965
- "class": "v-breadcrumbs-divider"
11227
+ "class": ['v-breadcrumbs-divider', props.class],
11228
+ "style": props.style
10966
11229
  }, [slots?.default?.() ?? props.divider]));
10967
11230
  return {};
10968
11231
  }
@@ -10977,6 +11240,7 @@ const VBreadcrumbsItem = genericComponent()({
10977
11240
  color: String,
10978
11241
  disabled: Boolean,
10979
11242
  title: String,
11243
+ ...makeComponentProps(),
10980
11244
  ...makeRouterProps(),
10981
11245
  ...makeTagProps({
10982
11246
  tag: 'li'
@@ -11002,8 +11266,8 @@ const VBreadcrumbsItem = genericComponent()({
11002
11266
  'v-breadcrumbs-item--disabled': props.disabled,
11003
11267
  'v-breadcrumbs-item--link': link.isLink.value,
11004
11268
  [`${props.activeClass}`]: isActive.value && props.activeClass
11005
- }, textColorClasses.value],
11006
- "style": [textColorStyles.value],
11269
+ }, textColorClasses.value, props.class],
11270
+ "style": [textColorStyles.value, props.style],
11007
11271
  "href": link.href.value,
11008
11272
  "aria-current": isActive.value ? 'page' : undefined,
11009
11273
  "onClick": link.navigate
@@ -11034,6 +11298,7 @@ const VBreadcrumbs = genericComponent()({
11034
11298
  type: Array,
11035
11299
  default: () => []
11036
11300
  },
11301
+ ...makeComponentProps(),
11037
11302
  ...makeDensityProps(),
11038
11303
  ...makeRoundedProps(),
11039
11304
  ...makeTagProps({
@@ -11079,8 +11344,8 @@ const VBreadcrumbs = genericComponent()({
11079
11344
  useRender(() => {
11080
11345
  const hasPrepend = !!(slots.prepend || props.icon);
11081
11346
  return createVNode(props.tag, {
11082
- "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
11083
- "style": backgroundColorStyles.value
11347
+ "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value, props.class],
11348
+ "style": [backgroundColorStyles.value, props.style]
11084
11349
  }, {
11085
11350
  default: () => [hasPrepend && createVNode("div", {
11086
11351
  "key": "prepend",
@@ -11124,11 +11389,10 @@ const VBreadcrumbs = genericComponent()({
11124
11389
  }
11125
11390
  });
11126
11391
 
11127
- // Types
11128
-
11129
- const VCardActions = defineComponent({
11392
+ const VCardActions = genericComponent()({
11130
11393
  name: 'VCardActions',
11131
- setup(_, _ref) {
11394
+ props: makeComponentProps(),
11395
+ setup(props, _ref) {
11132
11396
  let {
11133
11397
  slots
11134
11398
  } = _ref;
@@ -11138,7 +11402,8 @@ const VCardActions = defineComponent({
11138
11402
  }
11139
11403
  });
11140
11404
  useRender(() => createVNode("div", {
11141
- "class": "v-card-actions"
11405
+ "class": ['v-card-actions', props.class],
11406
+ "style": props.style
11142
11407
  }, [slots.default?.()]));
11143
11408
  return {};
11144
11409
  }
@@ -11148,8 +11413,6 @@ const VCardSubtitle = createSimpleFunctional('v-card-subtitle');
11148
11413
 
11149
11414
  const VCardTitle = createSimpleFunctional('v-card-title');
11150
11415
 
11151
- // Types
11152
-
11153
11416
  const VCardItem = genericComponent()({
11154
11417
  name: 'VCardItem',
11155
11418
  props: {
@@ -11159,6 +11422,7 @@ const VCardItem = genericComponent()({
11159
11422
  prependIcon: IconValue,
11160
11423
  subtitle: String,
11161
11424
  title: String,
11425
+ ...makeComponentProps(),
11162
11426
  ...makeDensityProps()
11163
11427
  },
11164
11428
  setup(props, _ref) {
@@ -11173,7 +11437,8 @@ const VCardItem = genericComponent()({
11173
11437
  const hasTitle = !!(props.title || slots.title);
11174
11438
  const hasSubtitle = !!(props.subtitle || slots.subtitle);
11175
11439
  return createVNode("div", {
11176
- "class": "v-card-item"
11440
+ "class": ['v-card-item', props.class],
11441
+ "style": props.style
11177
11442
  }, [hasPrepend && createVNode("div", {
11178
11443
  "key": "prepend",
11179
11444
  "class": "v-card-item__prepend"
@@ -11255,8 +11520,8 @@ const VCard = genericComponent()({
11255
11520
  subtitle: String,
11256
11521
  text: String,
11257
11522
  title: String,
11258
- ...makeThemeProps(),
11259
11523
  ...makeBorderProps(),
11524
+ ...makeComponentProps(),
11260
11525
  ...makeDensityProps(),
11261
11526
  ...makeDimensionProps(),
11262
11527
  ...makeElevationProps(),
@@ -11266,6 +11531,7 @@ const VCard = genericComponent()({
11266
11531
  ...makeRoundedProps(),
11267
11532
  ...makeRouterProps(),
11268
11533
  ...makeTagProps(),
11534
+ ...makeThemeProps(),
11269
11535
  ...makeVariantProps({
11270
11536
  variant: 'elevated'
11271
11537
  })
@@ -11326,8 +11592,8 @@ const VCard = genericComponent()({
11326
11592
  'v-card--flat': props.flat,
11327
11593
  'v-card--hover': props.hover && !(props.disabled || props.flat),
11328
11594
  'v-card--link': isClickable.value
11329
- }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
11330
- "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
11595
+ }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
11596
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
11331
11597
  "href": link.href.value,
11332
11598
  "onClick": isClickable.value && link.navigate,
11333
11599
  "tabindex": props.disabled ? -1 : undefined
@@ -11523,6 +11789,7 @@ const makeVWindowProps = propsFactory({
11523
11789
  mandatory: {
11524
11790
  default: 'force'
11525
11791
  },
11792
+ ...makeComponentProps(),
11526
11793
  ...makeTagProps(),
11527
11794
  ...makeThemeProps()
11528
11795
  }, 'v-window');
@@ -11638,7 +11905,8 @@ const VWindow = genericComponent()({
11638
11905
  "ref": rootRef,
11639
11906
  "class": ['v-window', {
11640
11907
  'v-window--show-arrows-on-hover': props.showArrows === 'hover'
11641
- }, themeClasses.value]
11908
+ }, themeClasses.value, props.class],
11909
+ "style": props.style
11642
11910
  }, {
11643
11911
  default: () => [createVNode("div", {
11644
11912
  "class": "v-window__container",
@@ -11723,10 +11991,10 @@ const VCarousel = genericComponent()({
11723
11991
  "class": ['v-carousel', {
11724
11992
  'v-carousel--hide-delimiter-background': props.hideDelimiterBackground,
11725
11993
  'v-carousel--vertical-delimiters': props.verticalDelimiters
11726
- }],
11727
- "style": {
11994
+ }, props.class],
11995
+ "style": [{
11728
11996
  height: convertToUnit(props.height)
11729
- },
11997
+ }, props.style],
11730
11998
  "continuous": true,
11731
11999
  "mandatory": "force",
11732
12000
  "showArrows": props.showArrows
@@ -11792,6 +12060,7 @@ const VWindowItem = genericComponent()({
11792
12060
  type: [Boolean, String],
11793
12061
  default: undefined
11794
12062
  },
12063
+ ...makeComponentProps(),
11795
12064
  ...makeGroupItemProps(),
11796
12065
  ...makeLazyProps()
11797
12066
  },
@@ -11878,7 +12147,8 @@ const VWindowItem = genericComponent()({
11878
12147
  "disabled": !isBooted.value
11879
12148
  }, {
11880
12149
  default: () => [withDirectives(createVNode("div", {
11881
- "class": ['v-window-item', groupItem.selectedClass.value]
12150
+ "class": ['v-window-item', groupItem.selectedClass.value, props.class],
12151
+ "style": props.style
11882
12152
  }, [hasContent.value && slots.default?.()]), [[vShow, groupItem.isSelected.value]])]
11883
12153
  }));
11884
12154
  return {};
@@ -11891,7 +12161,8 @@ const VCarouselItem = genericComponent()({
11891
12161
  name: 'VCarouselItem',
11892
12162
  inheritAttrs: false,
11893
12163
  props: {
11894
- value: null
12164
+ value: null,
12165
+ ...makeComponentProps()
11895
12166
  },
11896
12167
  setup(props, _ref) {
11897
12168
  let {
@@ -11899,7 +12170,8 @@ const VCarouselItem = genericComponent()({
11899
12170
  attrs
11900
12171
  } = _ref;
11901
12172
  useRender(() => createVNode(VWindowItem, {
11902
- "class": "v-carousel-item",
12173
+ "class": ['v-carousel-item', props.class],
12174
+ "style": props.style,
11903
12175
  "value": props.value
11904
12176
  }, {
11905
12177
  default: () => [createVNode(VImg, attrs, slots)]
@@ -11912,6 +12184,7 @@ const VCode = createSimpleFunctional('v-code');
11912
12184
  const makeVSheetProps = propsFactory({
11913
12185
  color: String,
11914
12186
  ...makeBorderProps(),
12187
+ ...makeComponentProps(),
11915
12188
  ...makeDimensionProps(),
11916
12189
  ...makeElevationProps(),
11917
12190
  ...makeLocationProps(),
@@ -11955,8 +12228,8 @@ const VSheet = genericComponent()({
11955
12228
  roundedClasses
11956
12229
  } = useRounded(props);
11957
12230
  useRender(() => createVNode(props.tag, {
11958
- "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value],
11959
- "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value]
12231
+ "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, props.class],
12232
+ "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value, props.style]
11960
12233
  }, slots));
11961
12234
  return {};
11962
12235
  }
@@ -11982,7 +12255,8 @@ const VColorPickerCanvas = defineComponent({
11982
12255
  width: {
11983
12256
  type: [Number, String],
11984
12257
  default: 300
11985
- }
12258
+ },
12259
+ ...makeComponentProps()
11986
12260
  },
11987
12261
  emits: {
11988
12262
  'update:color': color => true,
@@ -12127,7 +12401,8 @@ const VColorPickerCanvas = defineComponent({
12127
12401
  onMounted(() => updateCanvas());
12128
12402
  useRender(() => createVNode("div", {
12129
12403
  "ref": resizeRef,
12130
- "class": "v-color-picker-canvas",
12404
+ "class": ['v-color-picker-canvas', props.class],
12405
+ "style": props.style,
12131
12406
  "onClick": handleClick,
12132
12407
  "onMousedown": handleMouseDown,
12133
12408
  "onTouchstart": handleMouseDown
@@ -12360,7 +12635,8 @@ const VColorPickerEdit = defineComponent({
12360
12635
  type: Array,
12361
12636
  default: () => Object.keys(modes),
12362
12637
  validator: v => Array.isArray(v) && v.every(m => Object.keys(modes).includes(m))
12363
- }
12638
+ },
12639
+ ...makeComponentProps()
12364
12640
  },
12365
12641
  emits: {
12366
12642
  'update:color': color => true,
@@ -12400,7 +12676,8 @@ const VColorPickerEdit = defineComponent({
12400
12676
  });
12401
12677
  });
12402
12678
  useRender(() => createVNode("div", {
12403
- "class": "v-color-picker-edit"
12679
+ "class": ['v-color-picker-edit', props.class],
12680
+ "style": props.style
12404
12681
  }, [inputs.value?.map(props => createVNode(VColorPickerInput, props, null)), enabledModes.value.length > 1 && createVNode(VBtn, {
12405
12682
  "icon": "$unfold",
12406
12683
  "size": "x-small",
@@ -12484,11 +12761,33 @@ const makeSliderProps = propsFactory({
12484
12761
  elevation: 2
12485
12762
  })
12486
12763
  }, 'slider');
12764
+ const useSteps = props => {
12765
+ const min = computed(() => parseFloat(props.min));
12766
+ const max = computed(() => parseFloat(props.max));
12767
+ const step = computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
12768
+ const decimals = computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
12769
+ function roundValue(value) {
12770
+ if (step.value <= 0) return value;
12771
+ const clamped = clamp(value, min.value, max.value);
12772
+ const offset = min.value % step.value;
12773
+ const newValue = Math.round((clamped - offset) / step.value) * step.value + offset;
12774
+ return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value));
12775
+ }
12776
+ return {
12777
+ min,
12778
+ max,
12779
+ step,
12780
+ decimals,
12781
+ roundValue
12782
+ };
12783
+ };
12487
12784
  const useSlider = _ref => {
12488
12785
  let {
12489
12786
  props,
12490
- handleSliderMouseUp,
12491
- handleMouseMove,
12787
+ steps,
12788
+ onSliderStart,
12789
+ onSliderMove,
12790
+ onSliderEnd,
12492
12791
  getActiveThumb
12493
12792
  } = _ref;
12494
12793
  const {
@@ -12502,10 +12801,13 @@ const useSlider = _ref => {
12502
12801
  }
12503
12802
  return hd;
12504
12803
  });
12505
- const min = computed(() => parseFloat(props.min));
12506
- const max = computed(() => parseFloat(props.max));
12507
- const step = computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
12508
- const decimals = computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
12804
+ const {
12805
+ min,
12806
+ max,
12807
+ step,
12808
+ decimals,
12809
+ roundValue
12810
+ } = steps;
12509
12811
  const thumbSize = computed(() => parseInt(props.thumbSize, 10));
12510
12812
  const tickSize = computed(() => parseInt(props.tickSize, 10));
12511
12813
  const trackSize = computed(() => parseInt(props.trackSize, 10));
@@ -12519,13 +12821,6 @@ const useSlider = _ref => {
12519
12821
  const startOffset = ref(0);
12520
12822
  const trackContainerRef = ref();
12521
12823
  const activeThumbRef = ref();
12522
- function roundValue(value) {
12523
- if (step.value <= 0) return value;
12524
- const clamped = clamp(value, min.value, max.value);
12525
- const offset = min.value % step.value;
12526
- const newValue = Math.round((clamped - offset) / step.value) * step.value + offset;
12527
- return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value));
12528
- }
12529
12824
  function parseMouseMove(e) {
12530
12825
  const vertical = props.direction === 'vertical';
12531
12826
  const start = vertical ? 'top' : 'left';
@@ -12542,14 +12837,11 @@ const useSlider = _ref => {
12542
12837
  if (vertical || horizontalDirection.value === 'rtl') clickPos = 1 - clickPos;
12543
12838
  return roundValue(min.value + clickPos * (max.value - min.value));
12544
12839
  }
12545
- let thumbMoved = false;
12546
12840
  const handleStop = e => {
12547
- if (!thumbMoved) {
12548
- startOffset.value = 0;
12549
- handleSliderMouseUp(parseMouseMove(e));
12550
- }
12841
+ onSliderEnd({
12842
+ value: parseMouseMove(e)
12843
+ });
12551
12844
  mousePressed.value = false;
12552
- thumbMoved = false;
12553
12845
  startOffset.value = 0;
12554
12846
  };
12555
12847
  const handleStart = e => {
@@ -12558,20 +12850,25 @@ const useSlider = _ref => {
12558
12850
  activeThumbRef.value.focus();
12559
12851
  mousePressed.value = true;
12560
12852
  if (activeThumbRef.value.contains(e.target)) {
12561
- thumbMoved = true;
12562
12853
  startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
12563
12854
  } else {
12564
12855
  startOffset.value = 0;
12565
- handleMouseMove(parseMouseMove(e));
12856
+ onSliderMove({
12857
+ value: parseMouseMove(e)
12858
+ });
12566
12859
  }
12860
+ onSliderStart({
12861
+ value: parseMouseMove(e)
12862
+ });
12567
12863
  };
12568
12864
  const moveListenerOptions = {
12569
12865
  passive: true,
12570
12866
  capture: true
12571
12867
  };
12572
12868
  function onMouseMove(e) {
12573
- thumbMoved = true;
12574
- handleMouseMove(parseMouseMove(e));
12869
+ onSliderMove({
12870
+ value: parseMouseMove(e)
12871
+ });
12575
12872
  }
12576
12873
  function onSliderMouseUp(e) {
12577
12874
  e.stopPropagation();
@@ -12699,7 +12996,8 @@ const VSliderThumb = genericComponent()({
12699
12996
  ripple: {
12700
12997
  type: Boolean,
12701
12998
  default: true
12702
- }
12999
+ },
13000
+ ...makeComponentProps()
12703
13001
  },
12704
13002
  emits: {
12705
13003
  'update:modelValue': v => true
@@ -12777,11 +13075,11 @@ const VSliderThumb = genericComponent()({
12777
13075
  "class": ['v-slider-thumb', {
12778
13076
  'v-slider-thumb--focused': props.focused,
12779
13077
  'v-slider-thumb--pressed': props.focused && mousePressed.value
12780
- }],
12781
- "style": {
13078
+ }, props.class],
13079
+ "style": [{
12782
13080
  '--v-slider-thumb-position': positionPercentage,
12783
13081
  '--v-slider-thumb-size': convertToUnit(thumbSize.value)
12784
- },
13082
+ }, props.style],
12785
13083
  "role": "slider",
12786
13084
  "tabindex": disabled.value ? -1 : 0,
12787
13085
  "aria-valuemin": props.min,
@@ -12827,7 +13125,8 @@ const VSliderTrack = genericComponent()({
12827
13125
  stop: {
12828
13126
  type: Number,
12829
13127
  required: true
12830
- }
13128
+ },
13129
+ ...makeComponentProps()
12831
13130
  },
12832
13131
  emits: {},
12833
13132
  setup(props, _ref) {
@@ -12902,12 +13201,12 @@ const VSliderTrack = genericComponent()({
12902
13201
  });
12903
13202
  useRender(() => {
12904
13203
  return createVNode("div", {
12905
- "class": ['v-slider-track', roundedClasses.value],
12906
- "style": {
13204
+ "class": ['v-slider-track', roundedClasses.value, props.class],
13205
+ "style": [{
12907
13206
  '--v-slider-track-size': convertToUnit(trackSize.value),
12908
13207
  '--v-slider-tick-size': convertToUnit(tickSize.value),
12909
13208
  direction: !vertical.value ? horizontalDirection.value : undefined
12910
- }
13209
+ }, props.style]
12911
13210
  }, [createVNode("div", {
12912
13211
  "class": ['v-slider-track__background', trackColorClasses.value, {
12913
13212
  'v-slider-track__background--opacity': !!color.value || !trackFillColor.value
@@ -12947,13 +13246,21 @@ const VSlider = genericComponent()({
12947
13246
  },
12948
13247
  emits: {
12949
13248
  'update:focused': value => true,
12950
- 'update:modelValue': v => true
13249
+ 'update:modelValue': v => true,
13250
+ start: value => true,
13251
+ end: value => true
12951
13252
  },
12952
13253
  setup(props, _ref) {
12953
13254
  let {
12954
- slots
13255
+ slots,
13256
+ emit
12955
13257
  } = _ref;
12956
13258
  const thumbContainerRef = ref();
13259
+ const steps = useSteps(props);
13260
+ const model = useProxiedModel(props, 'modelValue', undefined, v => {
13261
+ const value = typeof v === 'string' ? parseFloat(v) : v == null ? steps.min.value : v;
13262
+ return steps.roundValue(value);
13263
+ });
12957
13264
  const {
12958
13265
  min,
12959
13266
  max,
@@ -12967,16 +13274,26 @@ const VSlider = genericComponent()({
12967
13274
  readonly
12968
13275
  } = useSlider({
12969
13276
  props,
12970
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
12971
- handleSliderMouseUp: newValue => model.value = roundValue(newValue),
12972
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
12973
- handleMouseMove: newValue => model.value = roundValue(newValue),
13277
+ steps,
13278
+ onSliderStart: () => {
13279
+ emit('start', model.value);
13280
+ },
13281
+ onSliderEnd: _ref2 => {
13282
+ let {
13283
+ value
13284
+ } = _ref2;
13285
+ const roundedValue = roundValue(value);
13286
+ model.value = roundedValue;
13287
+ emit('end', roundedValue);
13288
+ },
13289
+ onSliderMove: _ref3 => {
13290
+ let {
13291
+ value
13292
+ } = _ref3;
13293
+ return model.value = roundValue(value);
13294
+ },
12974
13295
  getActiveThumb: () => thumbContainerRef.value?.$el
12975
13296
  });
12976
- const model = useProxiedModel(props, 'modelValue', undefined, v => {
12977
- const value = typeof v === 'string' ? parseFloat(v) : v == null ? min.value : v;
12978
- return roundValue(value);
12979
- });
12980
13297
  const {
12981
13298
  isFocused,
12982
13299
  focus,
@@ -12992,7 +13309,8 @@ const VSlider = genericComponent()({
12992
13309
  'v-slider--focused': isFocused.value,
12993
13310
  'v-slider--pressed': mousePressed.value,
12994
13311
  'v-slider--disabled': props.disabled
12995
- }]
13312
+ }, props.class],
13313
+ "style": props.style
12996
13314
  }, inputProps, {
12997
13315
  "focused": isFocused.value
12998
13316
  }), {
@@ -13002,11 +13320,11 @@ const VSlider = genericComponent()({
13002
13320
  "class": "v-slider__label",
13003
13321
  "text": props.label
13004
13322
  }, null) : undefined, slots.prepend?.(slotProps)]) : undefined,
13005
- default: _ref2 => {
13323
+ default: _ref4 => {
13006
13324
  let {
13007
13325
  id,
13008
13326
  messagesId
13009
- } = _ref2;
13327
+ } = _ref4;
13010
13328
  return createVNode("div", {
13011
13329
  "class": "v-slider__container",
13012
13330
  "onMousedown": !readonly.value ? onSliderMousedown : undefined,
@@ -13055,7 +13373,8 @@ const VColorPickerPreview = defineComponent({
13055
13373
  type: Object
13056
13374
  },
13057
13375
  disabled: Boolean,
13058
- hideAlpha: Boolean
13376
+ hideAlpha: Boolean,
13377
+ ...makeComponentProps()
13059
13378
  },
13060
13379
  emits: {
13061
13380
  'update:color': color => true
@@ -13067,7 +13386,8 @@ const VColorPickerPreview = defineComponent({
13067
13386
  useRender(() => createVNode("div", {
13068
13387
  "class": ['v-color-picker-preview', {
13069
13388
  'v-color-picker-preview--hide-alpha': props.hideAlpha
13070
- }]
13389
+ }, props.class],
13390
+ "style": props.style
13071
13391
  }, [createVNode("div", {
13072
13392
  "class": "v-color-picker-preview__dot"
13073
13393
  }, [createVNode("div", {
@@ -13448,7 +13768,8 @@ const VColorPickerSwatches = defineComponent({
13448
13768
  },
13449
13769
  disabled: Boolean,
13450
13770
  color: Object,
13451
- maxHeight: [Number, String]
13771
+ maxHeight: [Number, String],
13772
+ ...makeComponentProps()
13452
13773
  },
13453
13774
  emits: {
13454
13775
  'update:color': color => true
@@ -13458,10 +13779,10 @@ const VColorPickerSwatches = defineComponent({
13458
13779
  emit
13459
13780
  } = _ref;
13460
13781
  useRender(() => createVNode("div", {
13461
- "class": "v-color-picker-swatches",
13462
- "style": {
13782
+ "class": ['v-color-picker-swatches', props.class],
13783
+ "style": [{
13463
13784
  maxHeight: convertToUnit(props.maxHeight)
13464
- }
13785
+ }, props.style]
13465
13786
  }, [createVNode("div", null, [props.swatches.map(swatch => createVNode("div", {
13466
13787
  "class": "v-color-picker-swatches__swatch"
13467
13788
  }, [swatch.map(color => {
@@ -13565,13 +13886,13 @@ const VColorPicker = defineComponent({
13565
13886
  "rounded": props.rounded,
13566
13887
  "elevation": props.elevation,
13567
13888
  "theme": props.theme,
13568
- "class": ['v-color-picker'],
13569
- "style": {
13889
+ "class": ['v-color-picker', props.class],
13890
+ "style": [{
13570
13891
  '--v-color-picker-color-hsv': HSVtoCSS({
13571
13892
  ...(currentColor.value ?? nullColor),
13572
13893
  a: 1
13573
13894
  })
13574
- }
13895
+ }, props.style]
13575
13896
  }, sheetProps, {
13576
13897
  "maxWidth": props.width
13577
13898
  }), {
@@ -13882,7 +14203,8 @@ const VCombobox = genericComponent()({
13882
14203
  'v-combobox--chips': !!props.chips,
13883
14204
  'v-combobox--selecting-index': selectionIndex.value > -1,
13884
14205
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
13885
- }],
14206
+ }, props.class],
14207
+ "style": props.style,
13886
14208
  "appendInnerIcon": props.items.length ? props.menuIcon : undefined,
13887
14209
  "readonly": props.readonly,
13888
14210
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -14080,7 +14402,8 @@ const VDialog = genericComponent()({
14080
14402
  "class": ['v-dialog', {
14081
14403
  'v-dialog--fullscreen': props.fullscreen,
14082
14404
  'v-dialog--scrollable': props.scrollable
14083
- }]
14405
+ }, props.class],
14406
+ "style": props.style
14084
14407
  }, overlayProps, {
14085
14408
  "modelValue": isActive.value,
14086
14409
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -14119,6 +14442,7 @@ const VExpansionPanels = genericComponent()({
14119
14442
  validator: v => allowedVariants.includes(v)
14120
14443
  },
14121
14444
  readonly: Boolean,
14445
+ ...makeComponentProps(),
14122
14446
  ...makeGroupProps(),
14123
14447
  ...makeTagProps(),
14124
14448
  ...makeThemeProps()
@@ -14144,7 +14468,8 @@ const VExpansionPanels = genericComponent()({
14144
14468
  }
14145
14469
  });
14146
14470
  useRender(() => createVNode(props.tag, {
14147
- "class": ['v-expansion-panels', themeClasses.value, variantClass.value]
14471
+ "class": ['v-expansion-panels', themeClasses.value, variantClass.value, props.class],
14472
+ "style": props.style
14148
14473
  }, slots));
14149
14474
  return {};
14150
14475
  }
@@ -14173,6 +14498,7 @@ const VExpansionPanelTitle = genericComponent()({
14173
14498
  Ripple
14174
14499
  },
14175
14500
  props: {
14501
+ ...makeComponentProps(),
14176
14502
  ...makeVExpansionPanelTitleProps()
14177
14503
  },
14178
14504
  setup(props, _ref) {
@@ -14195,8 +14521,8 @@ const VExpansionPanelTitle = genericComponent()({
14195
14521
  useRender(() => withDirectives(createVNode("button", {
14196
14522
  "class": ['v-expansion-panel-title', {
14197
14523
  'v-expansion-panel-title--active': expansionPanel.isSelected.value
14198
- }, backgroundColorClasses.value],
14199
- "style": backgroundColorStyles.value,
14524
+ }, backgroundColorClasses.value, props.class],
14525
+ "style": [backgroundColorStyles.value, props.style],
14200
14526
  "type": "button",
14201
14527
  "tabindex": expansionPanel.disabled.value ? -1 : undefined,
14202
14528
  "disabled": expansionPanel.disabled.value,
@@ -14216,6 +14542,7 @@ const VExpansionPanelTitle = genericComponent()({
14216
14542
  const VExpansionPanelText = genericComponent()({
14217
14543
  name: 'VExpansionPanelText',
14218
14544
  props: {
14545
+ ...makeComponentProps(),
14219
14546
  ...makeLazyProps()
14220
14547
  },
14221
14548
  setup(props, _ref) {
@@ -14232,7 +14559,8 @@ const VExpansionPanelText = genericComponent()({
14232
14559
  "onAfterLeave": onAfterLeave
14233
14560
  }, {
14234
14561
  default: () => [withDirectives(createVNode("div", {
14235
- "class": "v-expansion-panel-text"
14562
+ "class": ['v-expansion-panel-text', props.class],
14563
+ "style": props.style
14236
14564
  }, [slots.default && hasContent.value && createVNode("div", {
14237
14565
  "class": "v-expansion-panel-text__wrapper"
14238
14566
  }, [slots.default?.()])]), [[vShow, expansionPanel.isSelected.value]])]
@@ -14247,6 +14575,7 @@ const VExpansionPanel = genericComponent()({
14247
14575
  title: String,
14248
14576
  text: String,
14249
14577
  bgColor: String,
14578
+ ...makeComponentProps(),
14250
14579
  ...makeElevationProps(),
14251
14580
  ...makeGroupItemProps(),
14252
14581
  ...makeLazyProps(),
@@ -14295,8 +14624,8 @@ const VExpansionPanel = genericComponent()({
14295
14624
  'v-expansion-panel--before-active': isBeforeSelected.value,
14296
14625
  'v-expansion-panel--after-active': isAfterSelected.value,
14297
14626
  'v-expansion-panel--disabled': isDisabled.value
14298
- }, roundedClasses.value, backgroundColorClasses.value],
14299
- "style": backgroundColorStyles.value,
14627
+ }, roundedClasses.value, backgroundColorClasses.value, props.class],
14628
+ "style": [backgroundColorStyles.value, props.style],
14300
14629
  "aria-expanded": groupItem.isSelected.value
14301
14630
  }, {
14302
14631
  default: () => [createVNode("div", {
@@ -14446,7 +14775,8 @@ const VFileInput = genericComponent()({
14446
14775
  "ref": vInputRef,
14447
14776
  "modelValue": model.value,
14448
14777
  "onUpdate:modelValue": $event => model.value = $event,
14449
- "class": "v-file-input",
14778
+ "class": ['v-file-input', props.class],
14779
+ "style": props.style,
14450
14780
  "onClick:prepend": onClickPrepend
14451
14781
  }, rootAttrs, inputProps, {
14452
14782
  "focused": isFocused.value
@@ -14538,6 +14868,7 @@ const VFooter = genericComponent()({
14538
14868
  default: 'auto'
14539
14869
  },
14540
14870
  ...makeBorderProps(),
14871
+ ...makeComponentProps(),
14541
14872
  ...makeElevationProps(),
14542
14873
  ...makeLayoutItemProps(),
14543
14874
  ...makeRoundedProps(),
@@ -14587,8 +14918,8 @@ const VFooter = genericComponent()({
14587
14918
  });
14588
14919
  useRender(() => createVNode(props.tag, {
14589
14920
  "ref": resizeRef,
14590
- "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
14591
- "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined]
14921
+ "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
14922
+ "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined, props.style]
14592
14923
  }, slots));
14593
14924
  return {};
14594
14925
  }
@@ -14599,6 +14930,7 @@ const VFooter = genericComponent()({
14599
14930
  const VForm = genericComponent()({
14600
14931
  name: 'VForm',
14601
14932
  props: {
14933
+ ...makeComponentProps(),
14602
14934
  ...makeFormProps()
14603
14935
  },
14604
14936
  emits: {
@@ -14637,7 +14969,8 @@ const VForm = genericComponent()({
14637
14969
  }
14638
14970
  useRender(() => createVNode("form", {
14639
14971
  "ref": formRef,
14640
- "class": "v-form",
14972
+ "class": ['v-form', props.class],
14973
+ "style": props.style,
14641
14974
  "novalidate": true,
14642
14975
  "onReset": onReset,
14643
14976
  "onSubmit": onSubmit
@@ -14653,6 +14986,7 @@ const VContainer = genericComponent()({
14653
14986
  type: Boolean,
14654
14987
  default: false
14655
14988
  },
14989
+ ...makeComponentProps(),
14656
14990
  ...makeTagProps()
14657
14991
  },
14658
14992
  setup(props, _ref) {
@@ -14662,7 +14996,8 @@ const VContainer = genericComponent()({
14662
14996
  useRender(() => createVNode(props.tag, {
14663
14997
  "class": ['v-container', {
14664
14998
  'v-container--fluid': props.fluid
14665
- }]
14999
+ }, props.class],
15000
+ "style": props.style
14666
15001
  }, slots));
14667
15002
  return {};
14668
15003
  }
@@ -14753,6 +15088,7 @@ const VCol = genericComponent()({
14753
15088
  default: null,
14754
15089
  validator: str => ALIGN_SELF_VALUES.includes(str)
14755
15090
  },
15091
+ ...makeComponentProps(),
14756
15092
  ...makeTagProps()
14757
15093
  },
14758
15094
  setup(props, _ref) {
@@ -14783,7 +15119,8 @@ const VCol = genericComponent()({
14783
15119
  return classList;
14784
15120
  });
14785
15121
  return () => h(props.tag, {
14786
- class: classes.value
15122
+ class: [classes.value, props.class],
15123
+ style: props.style
14787
15124
  }, slots.default?.());
14788
15125
  }
14789
15126
  });
@@ -14869,6 +15206,7 @@ const VRow = genericComponent()({
14869
15206
  validator: alignContentValidator
14870
15207
  },
14871
15208
  ...alignContentProps,
15209
+ ...makeComponentProps(),
14872
15210
  ...makeTagProps()
14873
15211
  },
14874
15212
  setup(props, _ref) {
@@ -14897,7 +15235,8 @@ const VRow = genericComponent()({
14897
15235
  return classList;
14898
15236
  });
14899
15237
  return () => h(props.tag, {
14900
- class: ['v-row', classes.value]
15238
+ class: ['v-row', classes.value, props.class],
15239
+ style: props.style
14901
15240
  }, slots.default?.());
14902
15241
  }
14903
15242
  });
@@ -14941,6 +15280,7 @@ const VItemGroupSymbol = Symbol.for('vuetify:v-item-group');
14941
15280
  const VItemGroup = genericComponent()({
14942
15281
  name: 'VItemGroup',
14943
15282
  props: {
15283
+ ...makeComponentProps(),
14944
15284
  ...makeGroupProps({
14945
15285
  selectedClass: 'v-item--selected'
14946
15286
  }),
@@ -14965,7 +15305,8 @@ const VItemGroup = genericComponent()({
14965
15305
  selected
14966
15306
  } = useGroup(props, VItemGroupSymbol);
14967
15307
  return () => createVNode(props.tag, {
14968
- "class": ['v-item-group', themeClasses.value]
15308
+ "class": ['v-item-group', themeClasses.value, props.class],
15309
+ "style": props.style
14969
15310
  }, {
14970
15311
  default: () => [slots.default?.({
14971
15312
  isSelected,
@@ -15015,7 +15356,10 @@ const VKbd = createSimpleFunctional('v-kbd');
15015
15356
 
15016
15357
  const VLayout = genericComponent()({
15017
15358
  name: 'VLayout',
15018
- props: makeLayoutProps(),
15359
+ props: {
15360
+ ...makeComponentProps(),
15361
+ ...makeLayoutProps()
15362
+ },
15019
15363
  setup(props, _ref) {
15020
15364
  let {
15021
15365
  slots
@@ -15029,8 +15373,8 @@ const VLayout = genericComponent()({
15029
15373
  } = createLayout(props);
15030
15374
  useRender(() => createVNode("div", {
15031
15375
  "ref": layoutRef,
15032
- "class": layoutClasses.value,
15033
- "style": layoutStyles.value
15376
+ "class": [layoutClasses.value, props.class],
15377
+ "style": [layoutStyles.value, props.style]
15034
15378
  }, [slots.default?.()]));
15035
15379
  return {
15036
15380
  getLayoutItem,
@@ -15053,6 +15397,7 @@ const VLayoutItem = genericComponent()({
15053
15397
  default: 300
15054
15398
  },
15055
15399
  modelValue: Boolean,
15400
+ ...makeComponentProps(),
15056
15401
  ...makeLayoutItemProps()
15057
15402
  },
15058
15403
  setup(props, _ref) {
@@ -15071,8 +15416,8 @@ const VLayoutItem = genericComponent()({
15071
15416
  absolute: toRef(props, 'absolute')
15072
15417
  });
15073
15418
  return () => createVNode("div", {
15074
- "class": ['v-layout-item'],
15075
- "style": layoutItemStyles.value
15419
+ "class": ['v-layout-item', props.class],
15420
+ "style": [layoutItemStyles.value, props.style]
15076
15421
  }, [slots.default?.()]);
15077
15422
  }
15078
15423
  });
@@ -15096,6 +15441,7 @@ const VLazy = genericComponent()({
15096
15441
  threshold: undefined
15097
15442
  })
15098
15443
  },
15444
+ ...makeComponentProps(),
15099
15445
  ...makeDimensionProps(),
15100
15446
  ...makeTagProps(),
15101
15447
  ...makeTransitionProps({
@@ -15118,8 +15464,8 @@ const VLazy = genericComponent()({
15118
15464
  isActive.value = isIntersecting;
15119
15465
  }
15120
15466
  useRender(() => withDirectives(createVNode(props.tag, {
15121
- "class": "v-lazy",
15122
- "style": dimensionStyles.value
15467
+ "class": ['v-lazy', props.class],
15468
+ "style": [dimensionStyles.value, props.style]
15123
15469
  }, {
15124
15470
  default: () => [isActive.value && createVNode(MaybeTransition, {
15125
15471
  "transition": props.transition,
@@ -15144,7 +15490,8 @@ const VLocaleProvider = genericComponent()({
15144
15490
  rtl: {
15145
15491
  type: Boolean,
15146
15492
  default: undefined
15147
- }
15493
+ },
15494
+ ...makeComponentProps()
15148
15495
  },
15149
15496
  setup(props, _ref) {
15150
15497
  let {
@@ -15154,7 +15501,8 @@ const VLocaleProvider = genericComponent()({
15154
15501
  rtlClasses
15155
15502
  } = provideLocale(props);
15156
15503
  useRender(() => createVNode("div", {
15157
- "class": ['v-locale-provider', rtlClasses.value]
15504
+ "class": ['v-locale-provider', rtlClasses.value, props.class],
15505
+ "style": props.style
15158
15506
  }, [slots.default?.()]));
15159
15507
  return {};
15160
15508
  }
@@ -15164,6 +15512,7 @@ const VMain = genericComponent()({
15164
15512
  name: 'VMain',
15165
15513
  props: {
15166
15514
  scrollable: Boolean,
15515
+ ...makeComponentProps(),
15167
15516
  ...makeTagProps({
15168
15517
  tag: 'main'
15169
15518
  })
@@ -15181,8 +15530,8 @@ const VMain = genericComponent()({
15181
15530
  useRender(() => createVNode(props.tag, {
15182
15531
  "class": ['v-main', {
15183
15532
  'v-main--scrollable': props.scrollable
15184
- }],
15185
- "style": [mainStyles.value, ssrBootStyles.value]
15533
+ }, props.class],
15534
+ "style": [mainStyles.value, ssrBootStyles.value, props.style]
15186
15535
  }, {
15187
15536
  default: () => [props.scrollable ? createVNode("div", {
15188
15537
  "class": "v-main__scroller"
@@ -15528,6 +15877,7 @@ const VNavigationDrawer = genericComponent()({
15528
15877
  },
15529
15878
  sticky: Boolean,
15530
15879
  ...makeBorderProps(),
15880
+ ...makeComponentProps(),
15531
15881
  ...makeElevationProps(),
15532
15882
  ...makeLayoutItemProps(),
15533
15883
  ...makeRoundedProps(),
@@ -15679,8 +16029,8 @@ const VNavigationDrawer = genericComponent()({
15679
16029
  'v-navigation-drawer--temporary': isTemporary.value,
15680
16030
  'v-navigation-drawer--active': isActive.value,
15681
16031
  'v-navigation-drawer--sticky': isSticky.value
15682
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
15683
- "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value]
16032
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
16033
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
15684
16034
  }, attrs), {
15685
16035
  default: () => [hasImage && createVNode("div", {
15686
16036
  "key": "image",
@@ -15809,6 +16159,7 @@ const VPagination = genericComponent()({
15809
16159
  },
15810
16160
  showFirstLastPage: Boolean,
15811
16161
  ...makeBorderProps(),
16162
+ ...makeComponentProps(),
15812
16163
  ...makeDensityProps(),
15813
16164
  ...makeElevationProps(),
15814
16165
  ...makeRoundedProps(),
@@ -16005,7 +16356,8 @@ const VPagination = genericComponent()({
16005
16356
  }
16006
16357
  useRender(() => createVNode(props.tag, {
16007
16358
  "ref": resizeRef,
16008
- "class": ['v-pagination', themeClasses.value],
16359
+ "class": ['v-pagination', themeClasses.value, props.class],
16360
+ "style": props.style,
16009
16361
  "role": "navigation",
16010
16362
  "aria-label": t(props.ariaLabel),
16011
16363
  "onKeydown": onKeydown,
@@ -16064,7 +16416,8 @@ const VParallax = genericComponent()({
16064
16416
  scale: {
16065
16417
  type: [Number, String],
16066
16418
  default: 0.5
16067
- }
16419
+ },
16420
+ ...makeComponentProps()
16068
16421
  },
16069
16422
  setup(props, _ref) {
16070
16423
  let {
@@ -16126,7 +16479,8 @@ const VParallax = genericComponent()({
16126
16479
  useRender(() => createVNode(VImg, {
16127
16480
  "class": ['v-parallax', {
16128
16481
  'v-parallax--active': isIntersecting.value
16129
- }],
16482
+ }, props.class],
16483
+ "style": props.style,
16130
16484
  "ref": root,
16131
16485
  "cover": true,
16132
16486
  "onLoadstart": onScroll,
@@ -16151,7 +16505,8 @@ const VRadio = genericComponent()({
16151
16505
  slots
16152
16506
  } = _ref;
16153
16507
  useRender(() => createVNode(VSelectionControl, mergeProps(props, {
16154
- "class": "v-radio",
16508
+ "class": ['v-radio', props.class],
16509
+ "style": props.style,
16155
16510
  "type": "radio"
16156
16511
  }), slots));
16157
16512
  return {};
@@ -16205,7 +16560,8 @@ const VRadioGroup = genericComponent()({
16205
16560
  }
16206
16561
  }) : props.label;
16207
16562
  return createVNode(VInput, mergeProps({
16208
- "class": "v-radio-group"
16563
+ "class": ['v-radio-group', props.class],
16564
+ "style": props.style
16209
16565
  }, inputAttrs, inputProps, {
16210
16566
  "modelValue": model.value,
16211
16567
  "onUpdate:modelValue": $event => model.value = $event,
@@ -16261,11 +16617,14 @@ const VRangeSlider = genericComponent()({
16261
16617
  },
16262
16618
  emits: {
16263
16619
  'update:focused': value => true,
16264
- 'update:modelValue': value => true
16620
+ 'update:modelValue': value => true,
16621
+ end: value => true,
16622
+ start: value => true
16265
16623
  },
16266
16624
  setup(props, _ref) {
16267
16625
  let {
16268
- slots
16626
+ slots,
16627
+ emit
16269
16628
  } = _ref;
16270
16629
  const startThumbRef = ref();
16271
16630
  const stopThumbRef = ref();
@@ -16278,6 +16637,11 @@ const VRangeSlider = genericComponent()({
16278
16637
  const b = Math.abs(stopOffset);
16279
16638
  return a < b || a === b && startOffset < 0 ? startThumbRef.value.$el : stopThumbRef.value.$el;
16280
16639
  }
16640
+ const steps = useSteps(props);
16641
+ const model = useProxiedModel(props, 'modelValue', undefined, arr => {
16642
+ if (!arr?.length) return [0, 0];
16643
+ return arr.map(value => steps.roundValue(value));
16644
+ });
16281
16645
  const {
16282
16646
  activeThumbRef,
16283
16647
  hasLabels,
@@ -16287,34 +16651,37 @@ const VRangeSlider = genericComponent()({
16287
16651
  onSliderMousedown,
16288
16652
  onSliderTouchstart,
16289
16653
  position,
16290
- roundValue,
16291
16654
  trackContainerRef
16292
16655
  } = useSlider({
16293
- /* eslint-disable @typescript-eslint/no-use-before-define */
16294
16656
  props,
16295
- handleSliderMouseUp: newValue => {
16296
- model.value = activeThumbRef.value === startThumbRef.value?.$el ? [newValue, model.value[1]] : [model.value[0], newValue];
16657
+ steps,
16658
+ onSliderStart: () => {
16659
+ emit('start', model.value);
16660
+ },
16661
+ onSliderEnd: _ref2 => {
16662
+ let {
16663
+ value
16664
+ } = _ref2;
16665
+ const newValue = activeThumbRef.value === startThumbRef.value?.$el ? [value, model.value[1]] : [model.value[0], value];
16666
+ model.value = newValue;
16667
+ emit('end', newValue);
16297
16668
  },
16298
- handleMouseMove: newValue => {
16669
+ onSliderMove: _ref3 => {
16670
+ let {
16671
+ value
16672
+ } = _ref3;
16299
16673
  const [start, stop] = model.value;
16300
16674
  if (!props.strict && start === stop && start !== min.value) {
16301
- activeThumbRef.value = newValue > start ? stopThumbRef.value?.$el : startThumbRef.value?.$el;
16675
+ activeThumbRef.value = value > start ? stopThumbRef.value?.$el : startThumbRef.value?.$el;
16302
16676
  activeThumbRef.value?.focus();
16303
16677
  }
16304
16678
  if (activeThumbRef.value === startThumbRef.value?.$el) {
16305
- model.value = [Math.min(newValue, stop), stop];
16679
+ model.value = [Math.min(value, stop), stop];
16306
16680
  } else {
16307
- model.value = [start, Math.max(start, newValue)];
16681
+ model.value = [start, Math.max(start, value)];
16308
16682
  }
16309
16683
  },
16310
16684
  getActiveThumb
16311
- /* eslint-enable @typescript-eslint/no-use-before-define */
16312
- });
16313
-
16314
- const model = useProxiedModel(props, 'modelValue', undefined, arr => {
16315
- // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
16316
- if (!arr || !arr.length) return [0, 0];
16317
- return arr.map(value => roundValue(value));
16318
16685
  });
16319
16686
  const {
16320
16687
  isFocused,
@@ -16332,7 +16699,8 @@ const VRangeSlider = genericComponent()({
16332
16699
  'v-slider--focused': isFocused.value,
16333
16700
  'v-slider--pressed': mousePressed.value,
16334
16701
  'v-slider--disabled': props.disabled
16335
- }],
16702
+ }, props.class],
16703
+ "style": props.style,
16336
16704
  "ref": inputRef
16337
16705
  }, inputProps, {
16338
16706
  "focused": isFocused.value
@@ -16342,11 +16710,11 @@ const VRangeSlider = genericComponent()({
16342
16710
  "class": "v-slider__label",
16343
16711
  "text": props.label
16344
16712
  }, null) : undefined, slots.prepend?.(slotProps)]) : undefined,
16345
- default: _ref2 => {
16713
+ default: _ref4 => {
16346
16714
  let {
16347
16715
  id,
16348
16716
  messagesId
16349
- } = _ref2;
16717
+ } = _ref4;
16350
16718
  return createVNode("div", {
16351
16719
  "class": "v-slider__container",
16352
16720
  "onMousedown": onSliderMousedown,
@@ -16475,6 +16843,7 @@ const VRating = genericComponent()({
16475
16843
  validator: v => ['top', 'bottom'].includes(v)
16476
16844
  },
16477
16845
  ripple: Boolean,
16846
+ ...makeComponentProps(),
16478
16847
  ...makeDensityProps(),
16479
16848
  ...makeSizeProps(),
16480
16849
  ...makeTagProps(),
@@ -16498,9 +16867,6 @@ const VRating = genericComponent()({
16498
16867
  const range = computed(() => createRange(Number(props.length), 1));
16499
16868
  const increments = computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]));
16500
16869
  const hoverIndex = ref(-1);
16501
- const focusIndex = ref(-1);
16502
- const firstRef = ref();
16503
- let isClicking = false;
16504
16870
  const itemState = computed(() => increments.value.map(value => {
16505
16871
  const isHovering = props.hover && hoverIndex.value > -1;
16506
16872
  const isFilled = normalizedValue.value >= value;
@@ -16523,16 +16889,6 @@ const VRating = genericComponent()({
16523
16889
  function onMouseleave() {
16524
16890
  hoverIndex.value = -1;
16525
16891
  }
16526
- function onFocus() {
16527
- if (value === 0 && normalizedValue.value === 0) {
16528
- firstRef.value?.focus();
16529
- } else {
16530
- focusIndex.value = value;
16531
- }
16532
- }
16533
- function onBlur() {
16534
- if (!isClicking) focusIndex.value = -1;
16535
- }
16536
16892
  function onClick() {
16537
16893
  if (props.disabled || props.readonly) return;
16538
16894
  rating.value = normalizedValue.value === value && props.clearable ? 0 : value;
@@ -16540,17 +16896,9 @@ const VRating = genericComponent()({
16540
16896
  return {
16541
16897
  onMouseenter: props.hover ? onMouseenter : undefined,
16542
16898
  onMouseleave: props.hover ? onMouseleave : undefined,
16543
- onFocus,
16544
- onBlur,
16545
16899
  onClick
16546
16900
  };
16547
16901
  }));
16548
- function onMousedown() {
16549
- isClicking = true;
16550
- }
16551
- function onMouseup() {
16552
- isClicking = false;
16553
- }
16554
16902
  const name = computed(() => props.name ?? `v-rating-${getUid()}`);
16555
16903
  function VRatingItem(_ref2) {
16556
16904
  let {
@@ -16561,8 +16909,6 @@ const VRating = genericComponent()({
16561
16909
  const {
16562
16910
  onMouseenter,
16563
16911
  onMouseleave,
16564
- onFocus,
16565
- onBlur,
16566
16912
  onClick
16567
16913
  } = eventState.value[index + 1];
16568
16914
  const id = `${name.value}-${String(value).replace('.', '-')}`;
@@ -16573,7 +16919,6 @@ const VRating = genericComponent()({
16573
16919
  icon: itemState.value[index]?.icon,
16574
16920
  ripple: props.ripple,
16575
16921
  size: props.size,
16576
- tag: 'span',
16577
16922
  variant: 'plain'
16578
16923
  };
16579
16924
  return createVNode(Fragment, null, [createVNode("label", {
@@ -16582,17 +16927,17 @@ const VRating = genericComponent()({
16582
16927
  'v-rating__item--half': props.halfIncrements && value % 1 > 0,
16583
16928
  'v-rating__item--full': props.halfIncrements && value % 1 === 0
16584
16929
  },
16585
- "onMousedown": onMousedown,
16586
- "onMouseup": onMouseup,
16587
16930
  "onMouseenter": onMouseenter,
16588
- "onMouseleave": onMouseleave
16931
+ "onMouseleave": onMouseleave,
16932
+ "onClick": onClick
16589
16933
  }, [createVNode("span", {
16590
16934
  "class": "v-rating__hidden"
16591
16935
  }, [t(props.itemAriaLabel, value, props.length)]), !showStar ? undefined : slots.item ? slots.item({
16592
16936
  ...itemState.value[index],
16593
16937
  props: btnProps,
16594
16938
  value,
16595
- index
16939
+ index,
16940
+ rating: normalizedValue.value
16596
16941
  }) : createVNode(VBtn, btnProps, null)]), createVNode("input", {
16597
16942
  "class": "v-rating__hidden",
16598
16943
  "name": name.value,
@@ -16600,10 +16945,7 @@ const VRating = genericComponent()({
16600
16945
  "type": "radio",
16601
16946
  "value": value,
16602
16947
  "checked": normalizedValue.value === value,
16603
- "onClick": onClick,
16604
- "onFocus": onFocus,
16605
- "onBlur": onBlur,
16606
- "ref": index === 0 ? firstRef : undefined,
16948
+ "tabindex": -1,
16607
16949
  "readonly": props.readonly,
16608
16950
  "disabled": props.disabled
16609
16951
  }, null)]);
@@ -16619,7 +16961,8 @@ const VRating = genericComponent()({
16619
16961
  "class": ['v-rating', {
16620
16962
  'v-rating--hover': props.hover,
16621
16963
  'v-rating--readonly': props.readonly
16622
- }, themeClasses.value]
16964
+ }, themeClasses.value, props.class],
16965
+ "style": props.style
16623
16966
  }, {
16624
16967
  default: () => [createVNode(VRatingItem, {
16625
16968
  "value": 0,
@@ -16632,9 +16975,7 @@ const VRating = genericComponent()({
16632
16975
  index: i,
16633
16976
  label: props.itemLabels?.[i]
16634
16977
  }) : undefined, createVNode("div", {
16635
- "class": ['v-rating__item', {
16636
- 'v-rating__item--focused': Math.ceil(focusIndex.value) === value
16637
- }]
16978
+ "class": "v-rating__item"
16638
16979
  }, [props.halfIncrements ? createVNode(Fragment, null, [createVNode(VRatingItem, {
16639
16980
  "value": value - 0.5,
16640
16981
  "index": i * 2
@@ -16721,6 +17062,7 @@ const makeVSlideGroupProps = propsFactory({
16721
17062
  type: [Boolean, String],
16722
17063
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
16723
17064
  },
17065
+ ...makeComponentProps(),
16724
17066
  ...makeTagProps(),
16725
17067
  ...makeGroupProps({
16726
17068
  selectedClass: 'v-slide-group-item--active'
@@ -16961,7 +17303,8 @@ const VSlideGroup = genericComponent()({
16961
17303
  'v-slide-group--vertical': !isHorizontal.value,
16962
17304
  'v-slide-group--has-affixes': hasAffixes.value,
16963
17305
  'v-slide-group--is-overflowing': isOverflowing.value
16964
- }],
17306
+ }, props.class],
17307
+ "style": props.style,
16965
17308
  "tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
16966
17309
  "onFocus": onFocus
16967
17310
  }, {
@@ -17111,7 +17454,8 @@ const VSnackbar = genericComponent()({
17111
17454
  'v-snackbar--active': isActive.value,
17112
17455
  'v-snackbar--multi-line': props.multiLine && !props.vertical,
17113
17456
  'v-snackbar--vertical': props.vertical
17114
- }, positionClasses.value]
17457
+ }, positionClasses.value, props.class],
17458
+ "style": props.style
17115
17459
  }, overlayProps, {
17116
17460
  "modelValue": isActive.value,
17117
17461
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -17211,7 +17555,8 @@ const VSwitch = genericComponent()({
17211
17555
  'v-switch--inset': props.inset
17212
17556
  }, {
17213
17557
  'v-switch--indeterminate': indeterminate.value
17214
- }, loaderClasses.value]
17558
+ }, loaderClasses.value, props.class],
17559
+ "style": props.style
17215
17560
  }, inputAttrs, inputProps, {
17216
17561
  "id": id.value,
17217
17562
  "focused": isFocused.value
@@ -17280,6 +17625,7 @@ const VSystemBar = genericComponent()({
17280
17625
  color: String,
17281
17626
  height: [Number, String],
17282
17627
  window: Boolean,
17628
+ ...makeComponentProps(),
17283
17629
  ...makeElevationProps(),
17284
17630
  ...makeLayoutItemProps(),
17285
17631
  ...makeRoundedProps(),
@@ -17321,8 +17667,8 @@ const VSystemBar = genericComponent()({
17321
17667
  useRender(() => createVNode(props.tag, {
17322
17668
  "class": ['v-system-bar', {
17323
17669
  'v-system-bar--window': props.window
17324
- }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value],
17325
- "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value]
17670
+ }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value, props.class],
17671
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, props.style]
17326
17672
  }, slots));
17327
17673
  return {};
17328
17674
  }
@@ -17334,7 +17680,6 @@ const VTab = genericComponent()({
17334
17680
  name: 'VTab',
17335
17681
  props: {
17336
17682
  fixed: Boolean,
17337
- title: String,
17338
17683
  sliderColor: String,
17339
17684
  hideSlider: Boolean,
17340
17685
  direction: {
@@ -17396,10 +17741,10 @@ const VTab = genericComponent()({
17396
17741
  useRender(() => {
17397
17742
  const [btnProps] = VBtn.filterProps(props);
17398
17743
  return createVNode(VBtn, mergeProps({
17399
- "_as": "VTab",
17400
17744
  "symbol": VTabsSymbol,
17401
17745
  "ref": rootEl,
17402
- "class": ['v-tab'],
17746
+ "class": ['v-tab', props.class],
17747
+ "style": props.style,
17403
17748
  "tabindex": isSelected.value ? 0 : -1,
17404
17749
  "role": "tab",
17405
17750
  "aria-selected": String(isSelected.value),
@@ -17410,7 +17755,7 @@ const VTab = genericComponent()({
17410
17755
  }, btnProps, attrs, {
17411
17756
  "onGroup:selected": updateSlider
17412
17757
  }), {
17413
- default: () => [slots.default ? slots.default() : props.title, !props.hideSlider && createVNode("div", {
17758
+ default: () => [slots.default?.() ?? props.text, !props.hideSlider && createVNode("div", {
17414
17759
  "ref": sliderEl,
17415
17760
  "class": ['v-tab__slider', sliderColorClasses.value],
17416
17761
  "style": sliderColorStyles.value
@@ -17494,10 +17839,10 @@ const VTabs = genericComponent()({
17494
17839
  'v-tabs--fixed-tabs': props.fixedTabs,
17495
17840
  'v-tabs--grow': props.grow,
17496
17841
  'v-tabs--stacked': props.stacked
17497
- }, densityClasses.value, backgroundColorClasses.value],
17842
+ }, densityClasses.value, backgroundColorClasses.value, props.class],
17498
17843
  "style": [{
17499
17844
  '--v-tabs-height': convertToUnit(props.height)
17500
- }, backgroundColorStyles.value],
17845
+ }, backgroundColorStyles.value, props.style],
17501
17846
  "role": "tablist",
17502
17847
  "symbol": VTabsSymbol
17503
17848
  }), {
@@ -17517,6 +17862,7 @@ const VTable = genericComponent()({
17517
17862
  fixedFooter: Boolean,
17518
17863
  height: [Number, String],
17519
17864
  hover: Boolean,
17865
+ ...makeComponentProps(),
17520
17866
  ...makeDensityProps(),
17521
17867
  ...makeTagProps(),
17522
17868
  ...makeThemeProps()
@@ -17539,7 +17885,8 @@ const VTable = genericComponent()({
17539
17885
  'v-table--has-top': !!slots.top,
17540
17886
  'v-table--has-bottom': !!slots.bottom,
17541
17887
  'v-table--hover': props.hover
17542
- }, themeClasses.value, densityClasses.value]
17888
+ }, themeClasses.value, densityClasses.value, props.class],
17889
+ "style": props.style
17543
17890
  }, {
17544
17891
  default: () => [slots.top?.(), slots.default ? createVNode("div", {
17545
17892
  "class": "v-table__wrapper",
@@ -17704,7 +18051,8 @@ const VTextarea = genericComponent()({
17704
18051
  'v-textarea--auto-grow': props.autoGrow,
17705
18052
  'v-textarea--no-resize': props.noResize || props.autoGrow,
17706
18053
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
17707
- }]
18054
+ }, props.class],
18055
+ "style": props.style
17708
18056
  }, rootAttrs, inputProps, {
17709
18057
  "focused": isFocused.value
17710
18058
  }), {
@@ -17788,6 +18136,7 @@ const VThemeProvider = genericComponent()({
17788
18136
  name: 'VThemeProvider',
17789
18137
  props: {
17790
18138
  withBackground: Boolean,
18139
+ ...makeComponentProps(),
17791
18140
  ...makeThemeProps(),
17792
18141
  ...makeTagProps()
17793
18142
  },
@@ -17801,7 +18150,8 @@ const VThemeProvider = genericComponent()({
17801
18150
  return () => {
17802
18151
  if (!props.withBackground) return slots.default?.();
17803
18152
  return createVNode(props.tag, {
17804
- "class": ['v-theme-provider', themeClasses.value]
18153
+ "class": ['v-theme-provider', themeClasses.value, props.class],
18154
+ "style": props.style
17805
18155
  }, {
17806
18156
  default: () => [slots.default?.()]
17807
18157
  });
@@ -17846,6 +18196,7 @@ const VTimeline = genericComponent()({
17846
18196
  type: String,
17847
18197
  validator: v => ['start', 'end', 'both'].includes(v)
17848
18198
  },
18199
+ ...makeComponentProps(),
17849
18200
  ...makeDensityProps(),
17850
18201
  ...makeTagProps(),
17851
18202
  ...makeThemeProps()
@@ -17889,10 +18240,10 @@ const VTimeline = genericComponent()({
17889
18240
  useRender(() => createVNode(props.tag, {
17890
18241
  "class": ['v-timeline', `v-timeline--${props.direction}`, `v-timeline--align-${props.align}`, `v-timeline--justify-${props.justify}`, truncateClasses.value, {
17891
18242
  'v-timeline--inset-line': !!props.lineInset
17892
- }, themeClasses.value, densityClasses.value, sideClasses.value],
17893
- "style": {
18243
+ }, themeClasses.value, densityClasses.value, sideClasses.value, props.class],
18244
+ "style": [{
17894
18245
  '--v-timeline-line-thickness': convertToUnit(props.lineThickness)
17895
- }
18246
+ }, props.style]
17896
18247
  }, slots));
17897
18248
  return {};
17898
18249
  }
@@ -17907,6 +18258,7 @@ const VTimelineDivider = genericComponent()({
17907
18258
  icon: IconValue,
17908
18259
  iconColor: String,
17909
18260
  lineColor: String,
18261
+ ...makeComponentProps(),
17910
18262
  ...makeRoundedProps(),
17911
18263
  ...makeSizeProps(),
17912
18264
  ...makeElevationProps()
@@ -17936,7 +18288,8 @@ const VTimelineDivider = genericComponent()({
17936
18288
  useRender(() => createVNode("div", {
17937
18289
  "class": ['v-timeline-divider', {
17938
18290
  'v-timeline-divider--fill-dot': props.fillDot
17939
- }]
18291
+ }, props.class],
18292
+ "style": props.style
17940
18293
  }, [createVNode("div", {
17941
18294
  "class": ['v-timeline-divider__before', lineColorClasses.value],
17942
18295
  "style": lineColorStyles.value
@@ -17986,11 +18339,12 @@ const VTimelineItem = genericComponent()({
17986
18339
  icon: IconValue,
17987
18340
  iconColor: String,
17988
18341
  lineInset: [Number, String],
17989
- ...makeRoundedProps(),
18342
+ ...makeComponentProps(),
18343
+ ...makeDimensionProps(),
17990
18344
  ...makeElevationProps(),
18345
+ ...makeRoundedProps(),
17991
18346
  ...makeSizeProps(),
17992
- ...makeTagProps(),
17993
- ...makeDimensionProps()
18347
+ ...makeTagProps()
17994
18348
  },
17995
18349
  setup(props, _ref) {
17996
18350
  let {
@@ -18010,11 +18364,11 @@ const VTimelineItem = genericComponent()({
18010
18364
  useRender(() => createVNode("div", {
18011
18365
  "class": ['v-timeline-item', {
18012
18366
  'v-timeline-item--fill-dot': props.fillDot
18013
- }],
18014
- "style": {
18367
+ }, props.class],
18368
+ "style": [{
18015
18369
  '--v-timeline-dot-size': convertToUnit(dotSize.value),
18016
18370
  '--v-timeline-line-inset': props.lineInset ? `calc(var(--v-timeline-dot-size) / 2 + ${convertToUnit(props.lineInset)})` : convertToUnit(0)
18017
- }
18371
+ }, props.style]
18018
18372
  }, [createVNode("div", {
18019
18373
  "class": "v-timeline-item__body",
18020
18374
  "style": dimensionStyles.value
@@ -18048,6 +18402,7 @@ const VTooltip = genericComponent()({
18048
18402
  closeOnBack: false,
18049
18403
  location: 'end',
18050
18404
  locationStrategy: 'connected',
18405
+ eager: true,
18051
18406
  minWidth: 0,
18052
18407
  offset: 10,
18053
18408
  openOnClick: false,
@@ -18056,7 +18411,7 @@ const VTooltip = genericComponent()({
18056
18411
  scrim: false,
18057
18412
  scrollStrategy: 'reposition',
18058
18413
  transition: false
18059
- }), ['absolute', 'persistent', 'eager'])
18414
+ }), ['absolute', 'persistent'])
18060
18415
  },
18061
18416
  emits: {
18062
18417
  'update:modelValue': value => true
@@ -18089,7 +18444,8 @@ const VTooltip = genericComponent()({
18089
18444
  const [overlayProps] = VOverlay.filterProps(props);
18090
18445
  return createVNode(VOverlay, mergeProps({
18091
18446
  "ref": overlay,
18092
- "class": ['v-tooltip'],
18447
+ "class": ['v-tooltip', props.class],
18448
+ "style": props.style,
18093
18449
  "id": id.value
18094
18450
  }, overlayProps, {
18095
18451
  "modelValue": isActive.value,
@@ -18100,7 +18456,6 @@ const VTooltip = genericComponent()({
18100
18456
  "origin": origin.value,
18101
18457
  "persistent": true,
18102
18458
  "role": "tooltip",
18103
- "eager": true,
18104
18459
  "activatorProps": activatorProps.value,
18105
18460
  "_disableGlobalStack": true
18106
18461
  }, scopeId), {
@@ -18135,69 +18490,239 @@ const VValidation = genericComponent()({
18135
18490
  }
18136
18491
  });
18137
18492
 
18138
- const VDataTableColumn = defineFunctionalComponent({
18139
- align: {
18140
- type: String,
18141
- default: 'start'
18493
+ const VVirtualScrollItem = genericComponent()({
18494
+ name: 'VVirtualScrollItem',
18495
+ props: {
18496
+ dynamicHeight: Boolean,
18497
+ ...makeComponentProps()
18142
18498
  },
18143
- fixed: Boolean,
18144
- fixedOffset: [Number, String],
18145
- height: [Number, String],
18146
- lastFixed: Boolean,
18147
- noPadding: Boolean,
18148
- tag: String,
18149
- width: [Number, String]
18150
- }, (props, _ref) => {
18151
- let {
18152
- slots,
18153
- attrs
18154
- } = _ref;
18155
- const Tag = props.tag ?? 'td';
18156
- return createVNode(Tag, mergeProps({
18157
- "class": ['v-data-table__td', {
18158
- 'v-data-table-column--fixed': props.fixed,
18159
- 'v-data-table-column--last-fixed': props.lastFixed,
18160
- 'v-data-table-column--no-padding': props.noPadding
18161
- }, `v-data-table-column--align-${props.align}`],
18162
- "style": {
18163
- height: convertToUnit(props.height),
18164
- width: convertToUnit(props.width),
18165
- left: convertToUnit(props.fixedOffset || null)
18499
+ emits: {
18500
+ 'update:height': height => true
18501
+ },
18502
+ setup(props, _ref) {
18503
+ let {
18504
+ emit,
18505
+ slots
18506
+ } = _ref;
18507
+ const {
18508
+ resizeRef,
18509
+ contentRect
18510
+ } = useResizeObserver();
18511
+ useToggleScope(() => props.dynamicHeight, () => {
18512
+ watch(() => contentRect.value?.height, height => {
18513
+ if (height != null) emit('update:height', height);
18514
+ });
18515
+ });
18516
+ function updateHeight() {
18517
+ if (props.dynamicHeight && contentRect.value) {
18518
+ emit('update:height', contentRect.value.height);
18519
+ }
18166
18520
  }
18167
- }, attrs), {
18168
- default: () => [slots.default?.()]
18169
- });
18521
+ onUpdated(updateHeight);
18522
+ useRender(() => createVNode("div", {
18523
+ "ref": props.dynamicHeight ? resizeRef : undefined,
18524
+ "class": ['v-virtual-scroll__item', props.class],
18525
+ "style": props.style
18526
+ }, [slots.default?.()]));
18527
+ }
18170
18528
  });
18171
18529
 
18172
- // Utilities
18173
-
18174
18530
  // Types
18175
18531
 
18176
- const makeDataTableHeaderProps = propsFactory({
18177
- headers: {
18178
- type: Array,
18179
- default: () => []
18180
- }
18181
- }, 'v-data-table-header');
18182
- const VDataTableHeadersSymbol = Symbol.for('vuetify:data-table-headers');
18183
- function createHeaders(props, options) {
18184
- const headers = ref([]);
18185
- const columns = ref([]);
18186
- watch(() => props.headers, () => {
18187
- const wrapped = !props.headers.length ? [] : Array.isArray(props.headers[0]) ? props.headers : [props.headers];
18188
- const flat = wrapped.flatMap((row, index) => row.map(column => ({
18189
- column,
18190
- row: index
18191
- })));
18192
- const rowCount = wrapped.length;
18193
- const defaultHeader = {
18194
- title: '',
18195
- sortable: false
18196
- };
18197
- const defaultActionHeader = {
18198
- ...defaultHeader,
18199
- width: 48
18200
- };
18532
+ const UP$1 = -1;
18533
+ const DOWN$1 = 1;
18534
+ const VVirtualScroll = genericComponent()({
18535
+ name: 'VVirtualScroll',
18536
+ props: {
18537
+ items: {
18538
+ type: Array,
18539
+ default: () => []
18540
+ },
18541
+ itemHeight: [Number, String],
18542
+ ...makeComponentProps(),
18543
+ ...makeDimensionProps()
18544
+ },
18545
+ setup(props, _ref) {
18546
+ let {
18547
+ slots
18548
+ } = _ref;
18549
+ const first = ref(0);
18550
+ const baseItemHeight = ref(props.itemHeight);
18551
+ const itemHeight = computed({
18552
+ get: () => parseInt(baseItemHeight.value ?? 0, 10),
18553
+ set(val) {
18554
+ baseItemHeight.value = val;
18555
+ }
18556
+ });
18557
+ const rootEl = ref();
18558
+ const {
18559
+ resizeRef,
18560
+ contentRect
18561
+ } = useResizeObserver();
18562
+ watchEffect(() => {
18563
+ resizeRef.value = rootEl.value;
18564
+ });
18565
+ const display = useDisplay();
18566
+ const sizeMap = new Map();
18567
+ let sizes = createRange(props.items.length).map(() => itemHeight.value);
18568
+ const visibleItems = computed(() => {
18569
+ return Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
18570
+ });
18571
+ function handleItemResize(index, height) {
18572
+ itemHeight.value = Math.max(itemHeight.value, height);
18573
+ sizes[index] = height;
18574
+ sizeMap.set(props.items[index], height);
18575
+ }
18576
+ function calculateOffset(index) {
18577
+ return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0);
18578
+ }
18579
+ function calculateMidPointIndex(scrollTop) {
18580
+ const end = props.items.length;
18581
+ let middle = 0;
18582
+ let middleOffset = 0;
18583
+ while (middleOffset < scrollTop && middle < end) {
18584
+ middleOffset += sizes[middle++] || itemHeight.value;
18585
+ }
18586
+ return middle - 1;
18587
+ }
18588
+ let lastScrollTop = 0;
18589
+ function handleScroll() {
18590
+ if (!rootEl.value || !contentRect.value) return;
18591
+ const height = contentRect.value.height;
18592
+ const scrollTop = rootEl.value.scrollTop;
18593
+ const direction = scrollTop < lastScrollTop ? UP$1 : DOWN$1;
18594
+ const midPointIndex = calculateMidPointIndex(scrollTop + height / 2);
18595
+ const buffer = Math.round(visibleItems.value / 3);
18596
+ if (direction === UP$1 && midPointIndex <= first.value + buffer * 2 - 1) {
18597
+ first.value = clamp(midPointIndex - buffer, 0, props.items.length);
18598
+ } else if (direction === DOWN$1 && midPointIndex >= first.value + buffer * 2 - 1) {
18599
+ first.value = clamp(midPointIndex - buffer, 0, props.items.length - visibleItems.value);
18600
+ }
18601
+ lastScrollTop = rootEl.value.scrollTop;
18602
+ }
18603
+ function scrollToIndex(index) {
18604
+ if (!rootEl.value) return;
18605
+ const offset = calculateOffset(index);
18606
+ rootEl.value.scrollTop = offset;
18607
+ }
18608
+ const items = computed(() => props.items.map((item, index) => ({
18609
+ raw: item,
18610
+ index
18611
+ })));
18612
+ const last = computed(() => Math.min(props.items.length, first.value + visibleItems.value));
18613
+ const computedItems = computed(() => items.value.slice(first.value, last.value));
18614
+ const paddingTop = computed(() => calculateOffset(first.value));
18615
+ const paddingBottom = computed(() => calculateOffset(props.items.length) - calculateOffset(last.value));
18616
+ const {
18617
+ dimensionStyles
18618
+ } = useDimension(props);
18619
+ onMounted(() => {
18620
+ if (!itemHeight.value) {
18621
+ // If itemHeight prop is not set, then calculate an estimated height from the average of inital items
18622
+ itemHeight.value = sizes.slice(first.value, last.value).reduce((curr, height) => curr + height, 0) / visibleItems.value;
18623
+ }
18624
+ });
18625
+ watch(() => props.items.length, () => {
18626
+ sizes = createRange(props.items.length).map(() => itemHeight.value);
18627
+ sizeMap.forEach((height, item) => {
18628
+ const index = props.items.indexOf(item);
18629
+ if (index === -1) {
18630
+ sizeMap.delete(item);
18631
+ } else {
18632
+ sizes[index] = height;
18633
+ }
18634
+ });
18635
+ });
18636
+ useRender(() => createVNode("div", {
18637
+ "ref": rootEl,
18638
+ "class": ['v-virtual-scroll', props.class],
18639
+ "onScroll": handleScroll,
18640
+ "style": [dimensionStyles.value, props.style]
18641
+ }, [createVNode("div", {
18642
+ "class": "v-virtual-scroll__container",
18643
+ "style": {
18644
+ paddingTop: convertToUnit(paddingTop.value),
18645
+ paddingBottom: convertToUnit(paddingBottom.value)
18646
+ }
18647
+ }, [computedItems.value.map(item => createVNode(VVirtualScrollItem, {
18648
+ "key": item.index,
18649
+ "dynamicHeight": !props.itemHeight,
18650
+ "onUpdate:height": height => handleItemResize(item.index, height)
18651
+ }, {
18652
+ default: () => [slots.default?.({
18653
+ item: item.raw,
18654
+ index: item.index
18655
+ })]
18656
+ }))])]));
18657
+ return {
18658
+ scrollToIndex
18659
+ };
18660
+ }
18661
+ });
18662
+
18663
+ const VDataTableColumn = defineFunctionalComponent({
18664
+ align: {
18665
+ type: String,
18666
+ default: 'start'
18667
+ },
18668
+ fixed: Boolean,
18669
+ fixedOffset: [Number, String],
18670
+ height: [Number, String],
18671
+ lastFixed: Boolean,
18672
+ noPadding: Boolean,
18673
+ tag: String,
18674
+ width: [Number, String]
18675
+ }, (props, _ref) => {
18676
+ let {
18677
+ slots,
18678
+ attrs
18679
+ } = _ref;
18680
+ const Tag = props.tag ?? 'td';
18681
+ return createVNode(Tag, mergeProps({
18682
+ "class": ['v-data-table__td', {
18683
+ 'v-data-table-column--fixed': props.fixed,
18684
+ 'v-data-table-column--last-fixed': props.lastFixed,
18685
+ 'v-data-table-column--no-padding': props.noPadding
18686
+ }, `v-data-table-column--align-${props.align}`],
18687
+ "style": {
18688
+ height: convertToUnit(props.height),
18689
+ width: convertToUnit(props.width),
18690
+ left: convertToUnit(props.fixedOffset || null)
18691
+ }
18692
+ }, attrs), {
18693
+ default: () => [slots.default?.()]
18694
+ });
18695
+ });
18696
+
18697
+ // Utilities
18698
+
18699
+ // Types
18700
+
18701
+ const makeDataTableHeaderProps = propsFactory({
18702
+ headers: {
18703
+ type: Array,
18704
+ default: () => []
18705
+ }
18706
+ }, 'v-data-table-header');
18707
+ const VDataTableHeadersSymbol = Symbol.for('vuetify:data-table-headers');
18708
+ function createHeaders(props, options) {
18709
+ const headers = ref([]);
18710
+ const columns = ref([]);
18711
+ watch(() => props.headers, () => {
18712
+ const wrapped = !props.headers.length ? [] : Array.isArray(props.headers[0]) ? props.headers : [props.headers];
18713
+ const flat = wrapped.flatMap((row, index) => row.map(column => ({
18714
+ column,
18715
+ row: index
18716
+ })));
18717
+ const rowCount = wrapped.length;
18718
+ const defaultHeader = {
18719
+ title: '',
18720
+ sortable: false
18721
+ };
18722
+ const defaultActionHeader = {
18723
+ ...defaultHeader,
18724
+ width: 48
18725
+ };
18201
18726
  if (options?.groupBy?.value.length) {
18202
18727
  const index = flat.findIndex(_ref => {
18203
18728
  let {
@@ -19545,8 +20070,8 @@ const makeDataTableVirtualProps = propsFactory({
19545
20070
  default: 52
19546
20071
  }
19547
20072
  }, 'virtual');
19548
- const UP$1 = -1;
19549
- const DOWN$1 = 1;
20073
+ const UP = -1;
20074
+ const DOWN = 1;
19550
20075
 
19551
20076
  // TODO: Replace this with composable from v-virtual-scroll
19552
20077
  function useVirtual(props, items) {
@@ -19584,12 +20109,12 @@ function useVirtual(props, items) {
19584
20109
  isScrolling.value = false;
19585
20110
  }, 100);
19586
20111
  const scrollTop = containerRef.value.scrollTop;
19587
- const direction = scrollTop < lastScrollTop ? UP$1 : DOWN$1;
20112
+ const direction = scrollTop < lastScrollTop ? UP : DOWN;
19588
20113
  const midPointIndex = calculateMidPointIndex(scrollTop);
19589
20114
  const buffer = Math.round(visibleItems.value / 3);
19590
- if (direction === UP$1 && midPointIndex <= startIndex.value) {
20115
+ if (direction === UP && midPointIndex <= startIndex.value) {
19591
20116
  startIndex.value = Math.max(midPointIndex - buffer, 0);
19592
- } else if (direction === DOWN$1 && midPointIndex >= startIndex.value + buffer * 2) {
20117
+ } else if (direction === DOWN && midPointIndex >= startIndex.value + buffer * 2) {
19593
20118
  startIndex.value = Math.min(Math.max(0, midPointIndex - buffer), items.value.length - visibleItems.value);
19594
20119
  }
19595
20120
  lastScrollTop = containerRef.value.scrollTop;
@@ -19902,6 +20427,211 @@ const VDataTableServer = genericComponent()({
19902
20427
 
19903
20428
  // Types
19904
20429
 
20430
+ const VInfiniteScrollIntersect = defineComponent({
20431
+ name: 'VInfiniteScrollIntersect',
20432
+ props: {
20433
+ side: {
20434
+ type: String,
20435
+ required: true
20436
+ },
20437
+ rootRef: null,
20438
+ rootMargin: String
20439
+ },
20440
+ emits: {
20441
+ intersect: side => true
20442
+ },
20443
+ setup(props, _ref) {
20444
+ let {
20445
+ emit
20446
+ } = _ref;
20447
+ const {
20448
+ intersectionRef,
20449
+ isIntersecting
20450
+ } = useIntersectionObserver(entries => {}, props.rootMargin ? {
20451
+ root: props.rootRef,
20452
+ rootMargin: props.rootMargin
20453
+ } : undefined);
20454
+ watch(isIntersecting, async val => {
20455
+ if (val) emit('intersect', props.side);
20456
+ });
20457
+ useRender(() => createVNode("div", {
20458
+ "class": "v-infinite-scroll-intersect",
20459
+ "ref": intersectionRef
20460
+ }, [createTextVNode("\xA0")]));
20461
+ return {};
20462
+ }
20463
+ });
20464
+ const VInfiniteScroll = genericComponent()({
20465
+ name: 'VInfiniteScroll',
20466
+ props: {
20467
+ color: String,
20468
+ direction: {
20469
+ type: String,
20470
+ default: 'vertical',
20471
+ validator: v => ['vertical', 'horizontal'].includes(v)
20472
+ },
20473
+ side: {
20474
+ type: String,
20475
+ default: 'end',
20476
+ validator: v => ['start', 'end', 'both'].includes(v)
20477
+ },
20478
+ mode: {
20479
+ type: String,
20480
+ default: 'intersect',
20481
+ validator: v => ['intersect', 'manual'].includes(v)
20482
+ },
20483
+ margin: [Number, String],
20484
+ loadMoreText: {
20485
+ type: String,
20486
+ default: '$vuetify.infiniteScroll.loadMore'
20487
+ },
20488
+ emptyText: {
20489
+ type: String,
20490
+ default: '$vuetify.infiniteScroll.empty'
20491
+ },
20492
+ ...makeDimensionProps()
20493
+ },
20494
+ emits: {
20495
+ load: options => true
20496
+ },
20497
+ setup(props, _ref2) {
20498
+ let {
20499
+ slots,
20500
+ emit
20501
+ } = _ref2;
20502
+ const rootEl = ref();
20503
+ const startStatus = ref('ok');
20504
+ const endStatus = ref('ok');
20505
+ const margin = computed(() => convertToUnit(props.margin));
20506
+ function setScrollAmount(amount) {
20507
+ if (!rootEl.value) return;
20508
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
20509
+ rootEl.value[property] = amount;
20510
+ }
20511
+ function getScrollAmount() {
20512
+ if (!rootEl.value) return 0;
20513
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
20514
+ return rootEl.value[property];
20515
+ }
20516
+ function getScrollSize() {
20517
+ if (!rootEl.value) return 0;
20518
+ const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth';
20519
+ return rootEl.value[property];
20520
+ }
20521
+ function getContainerSize() {
20522
+ if (!rootEl.value) return 0;
20523
+ const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth';
20524
+ return rootEl.value[property];
20525
+ }
20526
+ onMounted(() => {
20527
+ if (!rootEl.value) return;
20528
+ if (props.side === 'start') {
20529
+ setScrollAmount(getScrollSize());
20530
+ } else if (props.side === 'both') {
20531
+ setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2);
20532
+ }
20533
+ });
20534
+ function setStatus(side, status) {
20535
+ if (side === 'start') {
20536
+ startStatus.value = status;
20537
+ } else if (side === 'end') {
20538
+ endStatus.value = status;
20539
+ }
20540
+ }
20541
+ function getStatus(side) {
20542
+ return side === 'start' ? startStatus.value : endStatus.value;
20543
+ }
20544
+ let previousScrollSize = 0;
20545
+ function handleIntersect(side) {
20546
+ const status = getStatus(side);
20547
+ if (!rootEl.value || status === 'loading') return;
20548
+ previousScrollSize = getScrollSize();
20549
+ setStatus(side, 'loading');
20550
+ function done(status) {
20551
+ setStatus(side, status);
20552
+ nextTick(() => {
20553
+ if (status === 'ok' && side === 'start') {
20554
+ setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
20555
+ }
20556
+ });
20557
+ }
20558
+ emit('load', {
20559
+ side,
20560
+ done
20561
+ });
20562
+ }
20563
+ const {
20564
+ t
20565
+ } = useLocale();
20566
+ function renderSide(side, status) {
20567
+ if (props.side !== side && props.side !== 'both') return;
20568
+ const onClick = () => handleIntersect(side);
20569
+ const slotProps = {
20570
+ side,
20571
+ props: {
20572
+ onClick,
20573
+ color: props.color
20574
+ }
20575
+ };
20576
+ if (status === 'error') return slots.error?.(slotProps);
20577
+ if (status === 'empty') return slots.empty?.(slotProps) ?? createVNode("div", null, [t(props.emptyText)]);
20578
+ if (props.mode === 'manual') {
20579
+ if (status === 'loading') {
20580
+ return slots.loading?.(slotProps) ?? createVNode(VProgressCircular, {
20581
+ "indeterminate": true,
20582
+ "color": props.color
20583
+ }, null);
20584
+ }
20585
+ return slots['load-more']?.(slotProps) ?? createVNode(VBtn, {
20586
+ "variant": "outlined",
20587
+ "color": props.color,
20588
+ "onClick": onClick
20589
+ }, {
20590
+ default: () => [t(props.loadMoreText)]
20591
+ });
20592
+ }
20593
+ return slots.loading?.(slotProps) ?? createVNode(VProgressCircular, {
20594
+ "indeterminate": true,
20595
+ "color": props.color
20596
+ }, null);
20597
+ }
20598
+ const {
20599
+ dimensionStyles
20600
+ } = useDimension(props);
20601
+ useRender(() => {
20602
+ const hasStartIntersect = props.side === 'start' || props.side === 'both';
20603
+ const hasEndIntersect = props.side === 'end' || props.side === 'both';
20604
+ const intersectMode = props.mode === 'intersect';
20605
+ return createVNode("div", {
20606
+ "ref": rootEl,
20607
+ "class": ['v-infinite-scroll', `v-infinite-scroll--${props.direction}`, {
20608
+ 'v-infinite-scroll--start': hasStartIntersect,
20609
+ 'v-infinite-scroll--end': hasEndIntersect
20610
+ }],
20611
+ "style": dimensionStyles.value
20612
+ }, [createVNode("div", {
20613
+ "class": "v-infinite-scroll__side"
20614
+ }, [renderSide('start', startStatus.value)]), rootEl.value && hasStartIntersect && intersectMode && createVNode(VInfiniteScrollIntersect, {
20615
+ "key": "start",
20616
+ "side": "start",
20617
+ "onIntersect": handleIntersect,
20618
+ "rootRef": rootEl.value,
20619
+ "rootMargin": margin.value
20620
+ }, null), slots.default?.(), rootEl.value && hasEndIntersect && intersectMode && createVNode(VInfiniteScrollIntersect, {
20621
+ "key": "end",
20622
+ "side": "end",
20623
+ "onIntersect": handleIntersect,
20624
+ "rootRef": rootEl.value,
20625
+ "rootMargin": margin.value
20626
+ }, null), createVNode("div", {
20627
+ "class": "v-infinite-scroll__side"
20628
+ }, [renderSide('end', endStatus.value)])]);
20629
+ });
20630
+ }
20631
+ });
20632
+
20633
+ // Types
20634
+
19905
20635
  const rootTypes = {
19906
20636
  actions: 'button@2',
19907
20637
  article: 'heading, paragraph',
@@ -20032,177 +20762,6 @@ const VSkeletonLoader = genericComponent()({
20032
20762
  }
20033
20763
  });
20034
20764
 
20035
- const VVirtualScrollItem = genericComponent()({
20036
- name: 'VVirtualScrollItem',
20037
- props: {
20038
- dynamicHeight: Boolean
20039
- },
20040
- emits: {
20041
- 'update:height': height => true
20042
- },
20043
- setup(props, _ref) {
20044
- let {
20045
- emit,
20046
- slots
20047
- } = _ref;
20048
- const {
20049
- resizeRef,
20050
- contentRect
20051
- } = useResizeObserver();
20052
- useToggleScope(() => props.dynamicHeight, () => {
20053
- watch(() => contentRect.value?.height, height => {
20054
- if (height != null) emit('update:height', height);
20055
- });
20056
- });
20057
- function updateHeight() {
20058
- if (props.dynamicHeight && contentRect.value) {
20059
- emit('update:height', contentRect.value.height);
20060
- }
20061
- }
20062
- onUpdated(updateHeight);
20063
- useRender(() => createVNode("div", {
20064
- "ref": props.dynamicHeight ? resizeRef : undefined,
20065
- "class": "v-virtual-scroll__item"
20066
- }, [slots.default?.()]));
20067
- }
20068
- });
20069
-
20070
- // Types
20071
-
20072
- const UP = -1;
20073
- const DOWN = 1;
20074
- const VVirtualScroll = genericComponent()({
20075
- name: 'VVirtualScroll',
20076
- props: {
20077
- items: {
20078
- type: Array,
20079
- default: () => []
20080
- },
20081
- itemHeight: [Number, String],
20082
- visibleItems: [Number, String],
20083
- ...makeDimensionProps()
20084
- },
20085
- setup(props, _ref) {
20086
- let {
20087
- slots
20088
- } = _ref;
20089
- const first = ref(0);
20090
- const baseItemHeight = ref(props.itemHeight);
20091
- const itemHeight = computed({
20092
- get: () => parseInt(baseItemHeight.value ?? 0, 10),
20093
- set(val) {
20094
- baseItemHeight.value = val;
20095
- }
20096
- });
20097
- const rootEl = ref();
20098
- const {
20099
- resizeRef,
20100
- contentRect
20101
- } = useResizeObserver();
20102
- watchEffect(() => {
20103
- resizeRef.value = rootEl.value;
20104
- });
20105
- const display = useDisplay();
20106
- const sizeMap = new Map();
20107
- let sizes = createRange(props.items.length).map(() => itemHeight.value);
20108
- const visibleItems = computed(() => {
20109
- return props.visibleItems ? parseInt(props.visibleItems, 10) : Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
20110
- });
20111
- function handleItemResize(index, height) {
20112
- itemHeight.value = Math.max(itemHeight.value, height);
20113
- sizes[index] = height;
20114
- sizeMap.set(props.items[index], height);
20115
- }
20116
- function calculateOffset(index) {
20117
- return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0);
20118
- }
20119
- function calculateMidPointIndex(scrollTop) {
20120
- let start = 0;
20121
- let end = props.items.length;
20122
- while (start <= end) {
20123
- const middle = start + Math.floor((end - start) / 2);
20124
- const middleOffset = calculateOffset(middle);
20125
- if (middleOffset === scrollTop) {
20126
- return middle;
20127
- } else if (middleOffset < scrollTop) {
20128
- start = middle + 1;
20129
- } else if (middleOffset > scrollTop) {
20130
- end = middle - 1;
20131
- }
20132
- }
20133
- return start;
20134
- }
20135
- let lastScrollTop = 0;
20136
- function handleScroll() {
20137
- if (!rootEl.value || !contentRect.value) return;
20138
- const height = contentRect.value.height;
20139
- const scrollTop = rootEl.value.scrollTop;
20140
- const direction = scrollTop < lastScrollTop ? UP : DOWN;
20141
- const midPointIndex = calculateMidPointIndex(scrollTop + height / 2);
20142
- const buffer = Math.round(visibleItems.value / 3);
20143
- if (direction === UP && midPointIndex <= first.value + buffer * 2 - 1) {
20144
- first.value = clamp(midPointIndex - buffer, 0, props.items.length);
20145
- } else if (direction === DOWN && midPointIndex >= first.value + buffer * 2 - 1) {
20146
- first.value = clamp(midPointIndex - buffer, 0, props.items.length - visibleItems.value);
20147
- }
20148
- lastScrollTop = rootEl.value.scrollTop;
20149
- }
20150
- function scrollToIndex(index) {
20151
- if (!rootEl.value) return;
20152
- const offset = calculateOffset(index);
20153
- rootEl.value.scrollTop = offset;
20154
- }
20155
- const last = computed(() => Math.min(props.items.length, first.value + visibleItems.value));
20156
- const computedItems = computed(() => props.items.slice(first.value, last.value));
20157
- const paddingTop = computed(() => calculateOffset(first.value));
20158
- const paddingBottom = computed(() => calculateOffset(props.items.length) - calculateOffset(last.value));
20159
- const {
20160
- dimensionStyles
20161
- } = useDimension(props);
20162
- onMounted(() => {
20163
- if (!itemHeight.value) {
20164
- // If itemHeight prop is not set, then calculate an estimated height from the average of inital items
20165
- itemHeight.value = sizes.slice(first.value, last.value).reduce((curr, height) => curr + height, 0) / visibleItems.value;
20166
- }
20167
- });
20168
- watch(() => props.items.length, () => {
20169
- sizes = createRange(props.items.length).map(() => itemHeight.value);
20170
- sizeMap.forEach((height, item) => {
20171
- const index = props.items.indexOf(item);
20172
- if (index === -1) {
20173
- sizeMap.delete(item);
20174
- } else {
20175
- sizes[index] = height;
20176
- }
20177
- });
20178
- });
20179
- useRender(() => createVNode("div", {
20180
- "ref": rootEl,
20181
- "class": "v-virtual-scroll",
20182
- "onScroll": handleScroll,
20183
- "style": dimensionStyles.value
20184
- }, [createVNode("div", {
20185
- "class": "v-virtual-scroll__container",
20186
- "style": {
20187
- paddingTop: convertToUnit(paddingTop.value),
20188
- paddingBottom: convertToUnit(paddingBottom.value)
20189
- }
20190
- }, [computedItems.value.map((item, index) => createVNode(VVirtualScrollItem, {
20191
- "key": index,
20192
- "dynamicHeight": !props.itemHeight,
20193
- "onUpdate:height": height => handleItemResize(index + first.value, height)
20194
- }, {
20195
- default: () => [slots.default?.({
20196
- item,
20197
- index: index + first.value
20198
- })]
20199
- }))])]));
20200
- return {
20201
- scrollToIndex
20202
- };
20203
- }
20204
- });
20205
-
20206
20765
  var components = /*#__PURE__*/Object.freeze({
20207
20766
  __proto__: null,
20208
20767
  VAlert: VAlert,
@@ -20272,6 +20831,7 @@ var components = /*#__PURE__*/Object.freeze({
20272
20831
  VHover: VHover,
20273
20832
  VIcon: VIcon,
20274
20833
  VImg: VImg,
20834
+ VInfiniteScroll: VInfiniteScroll,
20275
20835
  VInput: VInput,
20276
20836
  VItem: VItem,
20277
20837
  VItemGroup: VItemGroup,
@@ -20474,6 +21034,418 @@ var directives = /*#__PURE__*/Object.freeze({
20474
21034
  Touch: Touch
20475
21035
  });
20476
21036
 
21037
+ // Utilities
21038
+
21039
+ // Types
21040
+
21041
+ function getWeekArray(date) {
21042
+ let currentWeek = [];
21043
+ const weeks = [];
21044
+ const firstDayOfMonth = startOfMonth(date);
21045
+ const lastDayOfMonth = endOfMonth(date);
21046
+ for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
21047
+ currentWeek.push(null);
21048
+ }
21049
+ for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
21050
+ const day = new Date(date.getFullYear(), date.getMonth(), i);
21051
+
21052
+ // Add the day to the current week
21053
+ currentWeek.push(day);
21054
+
21055
+ // If the current week has 7 days, add it to the weeks array and start a new week
21056
+ if (currentWeek.length === 7) {
21057
+ weeks.push(currentWeek);
21058
+ currentWeek = [];
21059
+ }
21060
+ }
21061
+ for (let i = currentWeek.length; i < 7; i++) {
21062
+ currentWeek.push(null);
21063
+ }
21064
+ weeks.push(currentWeek);
21065
+ return weeks;
21066
+ }
21067
+ function startOfMonth(date) {
21068
+ return new Date(date.getFullYear(), date.getMonth(), 1);
21069
+ }
21070
+ function endOfMonth(date) {
21071
+ return new Date(date.getFullYear(), date.getMonth() + 1, 0);
21072
+ }
21073
+ function date(value) {
21074
+ if (value == null) return null;
21075
+ if (value instanceof Date) return value;
21076
+ if (typeof value === 'string') {
21077
+ const parsed = Date.parse(value);
21078
+ if (!isNaN(parsed)) return new Date(parsed);
21079
+ }
21080
+ return null;
21081
+ }
21082
+ const firstDay = {
21083
+ '001': 1,
21084
+ AD: 1,
21085
+ AE: 6,
21086
+ AF: 6,
21087
+ AG: 0,
21088
+ AI: 1,
21089
+ AL: 1,
21090
+ AM: 1,
21091
+ AN: 1,
21092
+ AR: 1,
21093
+ AS: 0,
21094
+ AT: 1,
21095
+ AU: 0,
21096
+ AX: 1,
21097
+ AZ: 1,
21098
+ BA: 1,
21099
+ BD: 0,
21100
+ BE: 1,
21101
+ BG: 1,
21102
+ BH: 6,
21103
+ BM: 1,
21104
+ BN: 1,
21105
+ BR: 0,
21106
+ BS: 0,
21107
+ BT: 0,
21108
+ BW: 0,
21109
+ BY: 1,
21110
+ BZ: 0,
21111
+ CA: 0,
21112
+ CH: 1,
21113
+ CL: 1,
21114
+ CM: 1,
21115
+ CN: 0,
21116
+ CO: 0,
21117
+ CR: 1,
21118
+ CY: 1,
21119
+ CZ: 1,
21120
+ DE: 1,
21121
+ DJ: 6,
21122
+ DK: 1,
21123
+ DM: 0,
21124
+ DO: 0,
21125
+ DZ: 6,
21126
+ EC: 1,
21127
+ EE: 1,
21128
+ EG: 6,
21129
+ ES: 1,
21130
+ ET: 0,
21131
+ FI: 1,
21132
+ FJ: 1,
21133
+ FO: 1,
21134
+ FR: 1,
21135
+ GB: 1,
21136
+ 'GB-alt-variant': 0,
21137
+ GE: 1,
21138
+ GF: 1,
21139
+ GP: 1,
21140
+ GR: 1,
21141
+ GT: 0,
21142
+ GU: 0,
21143
+ HK: 0,
21144
+ HN: 0,
21145
+ HR: 1,
21146
+ HU: 1,
21147
+ ID: 0,
21148
+ IE: 1,
21149
+ IL: 0,
21150
+ IN: 0,
21151
+ IQ: 6,
21152
+ IR: 6,
21153
+ IS: 1,
21154
+ IT: 1,
21155
+ JM: 0,
21156
+ JO: 6,
21157
+ JP: 0,
21158
+ KE: 0,
21159
+ KG: 1,
21160
+ KH: 0,
21161
+ KR: 0,
21162
+ KW: 6,
21163
+ KZ: 1,
21164
+ LA: 0,
21165
+ LB: 1,
21166
+ LI: 1,
21167
+ LK: 1,
21168
+ LT: 1,
21169
+ LU: 1,
21170
+ LV: 1,
21171
+ LY: 6,
21172
+ MC: 1,
21173
+ MD: 1,
21174
+ ME: 1,
21175
+ MH: 0,
21176
+ MK: 1,
21177
+ MM: 0,
21178
+ MN: 1,
21179
+ MO: 0,
21180
+ MQ: 1,
21181
+ MT: 0,
21182
+ MV: 5,
21183
+ MX: 0,
21184
+ MY: 1,
21185
+ MZ: 0,
21186
+ NI: 0,
21187
+ NL: 1,
21188
+ NO: 1,
21189
+ NP: 0,
21190
+ NZ: 1,
21191
+ OM: 6,
21192
+ PA: 0,
21193
+ PE: 0,
21194
+ PH: 0,
21195
+ PK: 0,
21196
+ PL: 1,
21197
+ PR: 0,
21198
+ PT: 0,
21199
+ PY: 0,
21200
+ QA: 6,
21201
+ RE: 1,
21202
+ RO: 1,
21203
+ RS: 1,
21204
+ RU: 1,
21205
+ SA: 0,
21206
+ SD: 6,
21207
+ SE: 1,
21208
+ SG: 0,
21209
+ SI: 1,
21210
+ SK: 1,
21211
+ SM: 1,
21212
+ SV: 0,
21213
+ SY: 6,
21214
+ TH: 0,
21215
+ TJ: 1,
21216
+ TM: 1,
21217
+ TR: 1,
21218
+ TT: 0,
21219
+ TW: 0,
21220
+ UA: 1,
21221
+ UM: 0,
21222
+ US: 0,
21223
+ UY: 1,
21224
+ UZ: 1,
21225
+ VA: 1,
21226
+ VE: 0,
21227
+ VI: 0,
21228
+ VN: 1,
21229
+ WS: 0,
21230
+ XK: 1,
21231
+ YE: 0,
21232
+ ZA: 0,
21233
+ ZW: 0
21234
+ };
21235
+ const sundayJanuarySecond2000 = new Date(2000, 0, 2);
21236
+ function getWeekdays(locale) {
21237
+ const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
21238
+ return createRange(7).map(i => {
21239
+ const weekday = new Date(sundayJanuarySecond2000);
21240
+ weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
21241
+ return new Intl.DateTimeFormat(locale, {
21242
+ weekday: 'long'
21243
+ }).format(weekday);
21244
+ });
21245
+ }
21246
+ function format(value, formatString, locale) {
21247
+ const date = new Date(value);
21248
+ let options = {};
21249
+ switch (formatString) {
21250
+ case 'fullDateWithWeekday':
21251
+ options = {
21252
+ weekday: 'long',
21253
+ day: 'numeric',
21254
+ month: 'long',
21255
+ year: 'numeric'
21256
+ };
21257
+ break;
21258
+ case 'normalDateWithWeekday':
21259
+ options = {
21260
+ weekday: 'short',
21261
+ day: 'numeric',
21262
+ month: 'short',
21263
+ year: 'numeric'
21264
+ };
21265
+ break;
21266
+ case 'keyboardDate':
21267
+ options = {};
21268
+ break;
21269
+ case 'monthAndDate':
21270
+ options = {
21271
+ month: 'long',
21272
+ day: 'numeric'
21273
+ };
21274
+ break;
21275
+ case 'monthAndYear':
21276
+ options = {
21277
+ month: 'long',
21278
+ year: 'numeric'
21279
+ };
21280
+ break;
21281
+ default:
21282
+ options = {
21283
+ timeZone: 'UTC',
21284
+ timeZoneName: 'short'
21285
+ };
21286
+ }
21287
+ return new Intl.DateTimeFormat(locale, options).format(date);
21288
+ }
21289
+ function addDays(date, amount) {
21290
+ const d = new Date(date);
21291
+ d.setDate(d.getDate() + amount);
21292
+ return d;
21293
+ }
21294
+ function addMonths(date, amount) {
21295
+ const d = new Date(date);
21296
+ d.setMonth(d.getMonth() + amount);
21297
+ return d;
21298
+ }
21299
+ function getYear(date) {
21300
+ return date.getFullYear();
21301
+ }
21302
+ function getMonth(date) {
21303
+ return date.getMonth();
21304
+ }
21305
+ function startOfYear(date) {
21306
+ return new Date(date.getFullYear(), 0, 1);
21307
+ }
21308
+ function endOfYear(date) {
21309
+ return new Date(date.getFullYear(), 11, 31);
21310
+ }
21311
+ function getMondayOfFirstWeekOfYear(year) {
21312
+ return new Date(year, 0, 1);
21313
+ }
21314
+
21315
+ // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
21316
+ function getWeek(date) {
21317
+ let year = date.getFullYear();
21318
+ let d1w1 = getMondayOfFirstWeekOfYear(year);
21319
+ if (date < d1w1) {
21320
+ year = year - 1;
21321
+ d1w1 = getMondayOfFirstWeekOfYear(year);
21322
+ } else {
21323
+ const tv = getMondayOfFirstWeekOfYear(year + 1);
21324
+ if (date >= tv) {
21325
+ year = year + 1;
21326
+ d1w1 = tv;
21327
+ }
21328
+ }
21329
+ const diffTime = Math.abs(date.getTime() - d1w1.getTime());
21330
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
21331
+ return Math.floor(diffDays / 7) + 1;
21332
+ }
21333
+ function isWithinRange(date, range) {
21334
+ return isAfter(date, range[0]) && isBefore(date, range[1]);
21335
+ }
21336
+ function isValid(date) {
21337
+ const d = new Date(date);
21338
+ return d instanceof Date && !isNaN(d.getTime());
21339
+ }
21340
+ function isAfter(date, comparing) {
21341
+ return date.getTime() > comparing.getTime();
21342
+ }
21343
+ function isBefore(date, comparing) {
21344
+ return date.getTime() < comparing.getTime();
21345
+ }
21346
+ function isEqual(date, comparing) {
21347
+ return date.getTime() === comparing.getTime();
21348
+ }
21349
+ function isSameDay(date, comparing) {
21350
+ return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21351
+ }
21352
+ function isSameMonth(date, comparing) {
21353
+ return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21354
+ }
21355
+ function getDiff(date, comparing, unit) {
21356
+ const d = new Date(date);
21357
+ const c = new Date(comparing);
21358
+ if (unit === 'month') {
21359
+ return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
21360
+ }
21361
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
21362
+ }
21363
+ function setYear(date, year) {
21364
+ const d = new Date(date);
21365
+ d.setFullYear(year);
21366
+ return d;
21367
+ }
21368
+ class VuetifyDateAdapter {
21369
+ constructor() {
21370
+ let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
21371
+ this.locale = locale;
21372
+ }
21373
+ date(value) {
21374
+ return date(value);
21375
+ }
21376
+ addDays(date, amount) {
21377
+ return addDays(date, amount);
21378
+ }
21379
+ addMonths(date, amount) {
21380
+ return addMonths(date, amount);
21381
+ }
21382
+ getWeekArray(date) {
21383
+ return getWeekArray(date);
21384
+ }
21385
+ startOfMonth(date) {
21386
+ return startOfMonth(date);
21387
+ }
21388
+ endOfMonth(date) {
21389
+ return endOfMonth(date);
21390
+ }
21391
+ format(date, formatString) {
21392
+ return format(date, formatString, this.locale);
21393
+ }
21394
+ isEqual(date, comparing) {
21395
+ return isEqual(date, comparing);
21396
+ }
21397
+ isValid(date) {
21398
+ return isValid(date);
21399
+ }
21400
+ isWithinRange(date, range) {
21401
+ return isWithinRange(date, range);
21402
+ }
21403
+ isAfter(date, comparing) {
21404
+ return isAfter(date, comparing);
21405
+ }
21406
+ isSameDay(date, comparing) {
21407
+ return isSameDay(date, comparing);
21408
+ }
21409
+ isSameMonth(date, comparing) {
21410
+ return isSameMonth(date, comparing);
21411
+ }
21412
+ setYear(date, year) {
21413
+ return setYear(date, year);
21414
+ }
21415
+ getDiff(date, comparing, unit) {
21416
+ return getDiff(date, comparing, unit);
21417
+ }
21418
+ getWeek(date) {
21419
+ return getWeek(date);
21420
+ }
21421
+ getWeekdays() {
21422
+ return getWeekdays(this.locale);
21423
+ }
21424
+ getYear(date) {
21425
+ return getYear(date);
21426
+ }
21427
+ getMonth(date) {
21428
+ return getMonth(date);
21429
+ }
21430
+ startOfYear(date) {
21431
+ return startOfYear(date);
21432
+ }
21433
+ endOfYear(date) {
21434
+ return endOfYear(date);
21435
+ }
21436
+ }
21437
+
21438
+ // Composables
21439
+
21440
+ // Types
21441
+
21442
+ const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
21443
+ function createDate(options) {
21444
+ return options ?? {
21445
+ adapter: VuetifyDateAdapter
21446
+ };
21447
+ }
21448
+
20477
21449
  // Composables
20478
21450
  function createVuetify$1() {
20479
21451
  let vuetify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -20492,6 +21464,7 @@ function createVuetify$1() {
20492
21464
  const theme = createTheme(options.theme);
20493
21465
  const icons = createIcons(options.icons);
20494
21466
  const locale = createLocale(options.locale);
21467
+ const date = createDate(options.date);
20495
21468
  const install = app => {
20496
21469
  for (const key in directives) {
20497
21470
  app.directive(key, directives[key]);
@@ -20512,6 +21485,7 @@ function createVuetify$1() {
20512
21485
  app.provide(ThemeSymbol, theme);
20513
21486
  app.provide(IconSymbol, icons);
20514
21487
  app.provide(LocaleSymbol, locale);
21488
+ app.provide(DateAdapterSymbol, date);
20515
21489
  if (IN_BROWSER && options.ssr) {
20516
21490
  if (app.$nuxt) {
20517
21491
  app.$nuxt.hook('app:suspense:resolve', () => {
@@ -20539,7 +21513,8 @@ function createVuetify$1() {
20539
21513
  display: inject.call(this, DisplaySymbol),
20540
21514
  theme: inject.call(this, ThemeSymbol),
20541
21515
  icons: inject.call(this, IconSymbol),
20542
- locale: inject.call(this, LocaleSymbol)
21516
+ locale: inject.call(this, LocaleSymbol),
21517
+ date: inject.call(this, DateAdapterSymbol)
20543
21518
  });
20544
21519
  }
20545
21520
  }
@@ -20552,10 +21527,11 @@ function createVuetify$1() {
20552
21527
  display,
20553
21528
  theme,
20554
21529
  icons,
20555
- locale
21530
+ locale,
21531
+ date
20556
21532
  };
20557
21533
  }
20558
- const version$1 = "3.1.16";
21534
+ const version$1 = "3.2.0";
20559
21535
  createVuetify$1.version = version$1;
20560
21536
 
20561
21537
  // Vue's inject() can only be used in setup
@@ -20567,7 +21543,7 @@ function inject(key) {
20567
21543
  }
20568
21544
  }
20569
21545
 
20570
- const version = "3.1.16";
21546
+ const version = "3.2.0";
20571
21547
 
20572
21548
  const createVuetify = function () {
20573
21549
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -20578,5 +21554,5 @@ const createVuetify = function () {
20578
21554
  });
20579
21555
  };
20580
21556
 
20581
- export { components, createVuetify, directives, useDisplay, useLayout, useLocale, useRtl, useTheme, version };
21557
+ export { components, createVuetify, directives, useDefaults, useDisplay, useLayout, useLocale, useRtl, useTheme, version };
20582
21558
  //# sourceMappingURL=vuetify-labs.esm.js.map