vuetify 3.1.16 → 3.2.1

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 +16 -12
  5. package/dist/json/tags.json +45 -2
  6. package/dist/json/web-types.json +851 -329
  7. package/dist/vuetify-labs.css +663 -440
  8. package/dist/vuetify-labs.d.ts +5905 -7618
  9. package/dist/vuetify-labs.esm.js +1635 -649
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +1634 -647
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +265 -58
  14. package/dist/vuetify.d.ts +6509 -7498
  15. package/dist/vuetify.esm.js +1375 -423
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +1374 -421
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +800 -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 +63 -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 +45 -5
  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,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.1.16
2
+ * Vuetify v3.2.1
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -171,11 +171,11 @@
171
171
  function keys(o) {
172
172
  return Object.keys(o);
173
173
  }
174
- function pick(obj, paths) {
174
+ function pick(obj, paths, exclude) {
175
175
  const found = Object.create(null);
176
176
  const rest = Object.create(null);
177
177
  for (const key in obj) {
178
- if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key)) {
178
+ if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key) && !exclude?.some(path => path === key)) {
179
179
  found[key] = obj[key];
180
180
  } else {
181
181
  rest[key] = obj[key];
@@ -886,44 +886,6 @@
886
886
  return (light + 0.05) / (dark + 0.05);
887
887
  }
888
888
 
889
- // Utilities
890
- function getCurrentInstance(name, message) {
891
- const vm = vue.getCurrentInstance();
892
- if (!vm) {
893
- throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
894
- }
895
- return vm;
896
- }
897
- function getCurrentInstanceName() {
898
- let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
899
- const vm = getCurrentInstance(name).type;
900
- return toKebabCase(vm?.aliasName || vm?.name);
901
- }
902
- let _uid = 0;
903
- let _map = new WeakMap();
904
- function getUid() {
905
- const vm = getCurrentInstance('getUid');
906
- if (_map.has(vm)) return _map.get(vm);else {
907
- const uid = _uid++;
908
- _map.set(vm, uid);
909
- return uid;
910
- }
911
- }
912
- getUid.reset = () => {
913
- _uid = 0;
914
- _map = new WeakMap();
915
- };
916
-
917
- function injectSelf(key) {
918
- const {
919
- provides
920
- } = getCurrentInstance('injectSelf');
921
- if (provides && key in provides) {
922
- // TS doesn't allow symbol as index type
923
- return provides[key];
924
- }
925
- }
926
-
927
889
  /**
928
890
  * Creates a factory function for props definitions.
929
891
  * This is used to define props in a composable then override
@@ -977,17 +939,54 @@
977
939
 
978
940
  // Types
979
941
 
942
+ // Composables
943
+ const makeComponentProps = propsFactory({
944
+ class: [String, Array],
945
+ style: {
946
+ type: [String, Array, Object],
947
+ default: null
948
+ }
949
+ }, 'component');
950
+
951
+ function useToggleScope(source, fn) {
952
+ let scope;
953
+ function start() {
954
+ scope = vue.effectScope();
955
+ scope.run(() => fn.length ? fn(() => {
956
+ scope?.stop();
957
+ start();
958
+ }) : fn());
959
+ }
960
+ vue.watch(source, active => {
961
+ if (active && !scope) {
962
+ start();
963
+ } else if (!active) {
964
+ scope?.stop();
965
+ scope = undefined;
966
+ }
967
+ }, {
968
+ immediate: true
969
+ });
970
+ vue.onScopeDispose(() => {
971
+ scope?.stop();
972
+ });
973
+ }
974
+
975
+ // Composables
976
+
977
+ // Types
978
+
980
979
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
981
980
  function createDefaults(options) {
982
981
  return vue.ref(options);
983
982
  }
984
- function useDefaults() {
983
+ function injectDefaults() {
985
984
  const defaults = vue.inject(DefaultsSymbol);
986
985
  if (!defaults) throw new Error('[Vuetify] Could not find defaults instance');
987
986
  return defaults;
988
987
  }
989
988
  function provideDefaults(defaults, options) {
990
- const injectedDefaults = useDefaults();
989
+ const injectedDefaults = injectDefaults();
991
990
  const providedDefaults = vue.ref(defaults);
992
991
  const newDefaults = vue.computed(() => {
993
992
  const disabled = vue.unref(options?.disabled);
@@ -1014,41 +1013,68 @@
1014
1013
  vue.provide(DefaultsSymbol, newDefaults);
1015
1014
  return newDefaults;
1016
1015
  }
1017
-
1018
- function useToggleScope(source, fn) {
1019
- let scope;
1020
- function start() {
1021
- scope = vue.effectScope();
1022
- scope.run(() => fn.length ? fn(() => {
1023
- scope?.stop();
1024
- start();
1025
- }) : fn());
1026
- }
1027
- vue.watch(source, active => {
1028
- if (active && !scope) {
1029
- start();
1030
- } else if (!active) {
1031
- scope?.stop();
1032
- scope = undefined;
1016
+ function propIsDefined(vnode, prop) {
1017
+ return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1018
+ }
1019
+ function internalUseDefaults() {
1020
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1021
+ let name = arguments.length > 1 ? arguments[1] : undefined;
1022
+ let defaults = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : injectDefaults();
1023
+ const vm = getCurrentInstance('useDefaults');
1024
+ name = name ?? vm.type.name ?? vm.type.__name;
1025
+ if (!name) {
1026
+ throw new Error('[Vuetify] Could not determine component name');
1027
+ }
1028
+ const componentDefaults = vue.computed(() => defaults.value?.[props._as ?? name]);
1029
+ const _props = new Proxy(props, {
1030
+ get(target, prop) {
1031
+ const propValue = Reflect.get(target, prop);
1032
+ if (prop === 'class' || prop === 'style') {
1033
+ return [componentDefaults.value?.[prop], propValue].filter(v => v != null);
1034
+ } else if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1035
+ return componentDefaults.value?.[prop] ?? defaults.value?.global?.[prop] ?? propValue;
1036
+ }
1037
+ return propValue;
1033
1038
  }
1034
- }, {
1035
- immediate: true
1036
1039
  });
1037
- vue.onScopeDispose(() => {
1038
- scope?.stop();
1040
+ const _subcomponentDefaults = vue.shallowRef();
1041
+ vue.watchEffect(() => {
1042
+ if (componentDefaults.value) {
1043
+ const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1044
+ let [key] = _ref;
1045
+ return key.startsWith(key[0].toUpperCase());
1046
+ });
1047
+ if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1048
+ }
1039
1049
  });
1050
+ function provideSubDefaults() {
1051
+ // If subcomponent defaults are provided, override any
1052
+ // subcomponents provided by the component's setup function.
1053
+ // This uses injectSelf so must be done after the original setup to work.
1054
+ useToggleScope(_subcomponentDefaults, () => {
1055
+ provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1056
+ });
1057
+ }
1058
+ return {
1059
+ props: _props,
1060
+ provideSubDefaults
1061
+ };
1062
+ }
1063
+ function useDefaults() {
1064
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1065
+ let name = arguments.length > 1 ? arguments[1] : undefined;
1066
+ const {
1067
+ props: _props,
1068
+ provideSubDefaults
1069
+ } = internalUseDefaults(props, name);
1070
+ provideSubDefaults();
1071
+ return _props;
1040
1072
  }
1041
1073
 
1042
1074
  // Utils
1043
1075
 
1044
1076
  // Types
1045
1077
 
1046
- function propIsDefined(vnode, prop) {
1047
- return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1048
- }
1049
-
1050
- // No props
1051
-
1052
1078
  // Implementation
1053
1079
  function defineComponent(options) {
1054
1080
  options._setup = options._setup ?? options.setup;
@@ -1060,43 +1086,20 @@
1060
1086
  options.props = propsFactory(options.props ?? {}, toKebabCase(options.name))();
1061
1087
  const propKeys = Object.keys(options.props);
1062
1088
  options.filterProps = function filterProps(props) {
1063
- return pick(props, propKeys);
1089
+ return pick(props, propKeys, ['class', 'style']);
1064
1090
  };
1065
1091
  options.props._as = String;
1066
1092
  options.setup = function setup(props, ctx) {
1067
- const defaults = useDefaults();
1093
+ const defaults = injectDefaults();
1068
1094
 
1069
1095
  // Skip props proxy if defaults are not provided
1070
1096
  if (!defaults.value) return options._setup(props, ctx);
1071
- const vm = vue.getCurrentInstance();
1072
- const componentDefaults = vue.computed(() => defaults.value[props._as ?? options.name]);
1073
- const _props = new Proxy(props, {
1074
- get(target, prop) {
1075
- const propValue = Reflect.get(target, prop);
1076
- if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1077
- return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? propValue;
1078
- }
1079
- return propValue;
1080
- }
1081
- });
1082
- const _subcomponentDefaults = vue.shallowRef();
1083
- vue.watchEffect(() => {
1084
- if (componentDefaults.value) {
1085
- const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1086
- let [key] = _ref;
1087
- return key.startsWith(key[0].toUpperCase());
1088
- });
1089
- if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1090
- }
1091
- });
1097
+ const {
1098
+ props: _props,
1099
+ provideSubDefaults
1100
+ } = internalUseDefaults(props, props._as ?? options.name, defaults);
1092
1101
  const setupBindings = options._setup(_props, ctx);
1093
-
1094
- // If subcomponent defaults are provided, override any
1095
- // subcomponents provided by the component's setup function.
1096
- // This uses injectSelf so must be done after the original setup to work.
1097
- useToggleScope(_subcomponentDefaults, () => {
1098
- provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1099
- });
1102
+ provideSubDefaults();
1100
1103
  return setupBindings;
1101
1104
  };
1102
1105
  }
@@ -1121,15 +1124,19 @@
1121
1124
  tag: {
1122
1125
  type: String,
1123
1126
  default: tag
1124
- }
1127
+ },
1128
+ ...makeComponentProps()
1125
1129
  },
1126
1130
  setup(props, _ref) {
1127
1131
  let {
1128
1132
  slots
1129
1133
  } = _ref;
1130
- return () => vue.h(props.tag, {
1131
- class: klass
1132
- }, slots.default?.());
1134
+ return () => {
1135
+ return vue.h(props.tag, {
1136
+ class: [klass, props.class],
1137
+ style: props.style
1138
+ }, slots.default?.());
1139
+ };
1133
1140
  }
1134
1141
  });
1135
1142
  }
@@ -1162,6 +1169,34 @@
1162
1169
  const deceleratedEasing = 'cubic-bezier(0.0, 0, 0.2, 1)'; // Entering
1163
1170
  const acceleratedEasing = 'cubic-bezier(0.4, 0, 1, 1)'; // Leaving
1164
1171
 
1172
+ // Utilities
1173
+ function getCurrentInstance(name, message) {
1174
+ const vm = vue.getCurrentInstance();
1175
+ if (!vm) {
1176
+ throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
1177
+ }
1178
+ return vm;
1179
+ }
1180
+ function getCurrentInstanceName() {
1181
+ let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
1182
+ const vm = getCurrentInstance(name).type;
1183
+ return toKebabCase(vm?.aliasName || vm?.name);
1184
+ }
1185
+ let _uid = 0;
1186
+ let _map = new WeakMap();
1187
+ function getUid() {
1188
+ const vm = getCurrentInstance('getUid');
1189
+ if (_map.has(vm)) return _map.get(vm);else {
1190
+ const uid = _uid++;
1191
+ _map.set(vm, uid);
1192
+ return uid;
1193
+ }
1194
+ }
1195
+ getUid.reset = () => {
1196
+ _uid = 0;
1197
+ _map = new WeakMap();
1198
+ };
1199
+
1165
1200
  function getScrollParent(el) {
1166
1201
  while (el) {
1167
1202
  if (hasScrollbar(el)) return el;
@@ -1185,6 +1220,16 @@
1185
1220
  return style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1186
1221
  }
1187
1222
 
1223
+ function injectSelf(key) {
1224
+ const {
1225
+ provides
1226
+ } = getCurrentInstance('injectSelf');
1227
+ if (provides && key in provides) {
1228
+ // TS doesn't allow symbol as index type
1229
+ return provides[key];
1230
+ }
1231
+ }
1232
+
1188
1233
  function isFixedPosition(el) {
1189
1234
  while (el) {
1190
1235
  if (window.getComputedStyle(el).position === 'fixed') {
@@ -1965,7 +2010,11 @@
1965
2010
  item: 'Rating {0} of {1}'
1966
2011
  }
1967
2012
  },
1968
- loading: 'Loading...'
2013
+ loading: 'Loading...',
2014
+ infiniteScroll: {
2015
+ loadMore: 'Load more',
2016
+ empty: 'No more'
2017
+ }
1969
2018
  };
1970
2019
 
1971
2020
  const LANG_PREFIX = '$vuetify.';
@@ -2163,6 +2212,7 @@
2163
2212
  const VApp = genericComponent()({
2164
2213
  name: 'VApp',
2165
2214
  props: {
2215
+ ...makeComponentProps(),
2166
2216
  ...makeLayoutProps({
2167
2217
  fullHeight: true
2168
2218
  }),
@@ -2185,8 +2235,8 @@
2185
2235
  } = useRtl();
2186
2236
  useRender(() => vue.createVNode("div", {
2187
2237
  "ref": layoutRef,
2188
- "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value],
2189
- "style": layoutStyles.value
2238
+ "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value, props.class],
2239
+ "style": [layoutStyles.value, props.style]
2190
2240
  }, [vue.createVNode("div", {
2191
2241
  "class": "v-application__wrap"
2192
2242
  }, [slots.default?.()])]));
@@ -2611,6 +2661,7 @@
2611
2661
  props: {
2612
2662
  aspectRatio: [String, Number],
2613
2663
  contentClass: String,
2664
+ ...makeComponentProps(),
2614
2665
  ...makeDimensionProps()
2615
2666
  },
2616
2667
  setup(props, _ref) {
@@ -2624,8 +2675,8 @@
2624
2675
  dimensionStyles
2625
2676
  } = useDimension(props);
2626
2677
  useRender(() => vue.createVNode("div", {
2627
- "class": "v-responsive",
2628
- "style": dimensionStyles.value
2678
+ "class": ['v-responsive', props.class],
2679
+ "style": [dimensionStyles.value, props.style]
2629
2680
  }, [vue.createVNode("div", {
2630
2681
  "class": "v-responsive__sizer",
2631
2682
  "style": aspectStyles.value
@@ -2743,6 +2794,7 @@
2743
2794
  },
2744
2795
  srcset: String,
2745
2796
  width: [String, Number],
2797
+ ...makeComponentProps(),
2746
2798
  ...makeTransitionProps()
2747
2799
  },
2748
2800
  emits: {
@@ -2930,10 +2982,10 @@
2930
2982
  useRender(() => vue.withDirectives(vue.createVNode(VResponsive, {
2931
2983
  "class": ['v-img', {
2932
2984
  'v-img--booting': !isBooted.value
2933
- }],
2934
- "style": {
2985
+ }, props.class],
2986
+ "style": [{
2935
2987
  width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width)
2936
- },
2988
+ }, props.style],
2937
2989
  "aspectRatio": aspectRatio.value,
2938
2990
  "aria-label": props.alt,
2939
2991
  "role": props.alt ? 'img' : undefined
@@ -2968,10 +3020,9 @@
2968
3020
  }
2969
3021
  }, 'tag');
2970
3022
 
2971
- // Types
2972
-
2973
3023
  const makeVToolbarTitleProps = propsFactory({
2974
3024
  text: String,
3025
+ ...makeComponentProps(),
2975
3026
  ...makeTagProps()
2976
3027
  }, 'v-toolbar-title');
2977
3028
  const VToolbarTitle = genericComponent()({
@@ -2984,7 +3035,8 @@
2984
3035
  useRender(() => {
2985
3036
  const hasText = !!(slots.default || slots.text || props.text);
2986
3037
  return vue.createVNode(props.tag, {
2987
- "class": "v-toolbar-title"
3038
+ "class": ['v-toolbar-title', props.class],
3039
+ "style": props.style
2988
3040
  }, {
2989
3041
  default: () => [hasText && vue.createVNode("div", {
2990
3042
  "class": "v-toolbar-title__placeholder"
@@ -3165,6 +3217,7 @@
3165
3217
  image: String,
3166
3218
  title: String,
3167
3219
  ...makeBorderProps(),
3220
+ ...makeComponentProps(),
3168
3221
  ...makeElevationProps(),
3169
3222
  ...makeRoundedProps(),
3170
3223
  ...makeTagProps({
@@ -3215,8 +3268,8 @@
3215
3268
  'v-toolbar--flat': props.flat,
3216
3269
  'v-toolbar--floating': props.floating,
3217
3270
  [`v-toolbar--density-${props.density}`]: true
3218
- }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value],
3219
- "style": [backgroundColorStyles.value]
3271
+ }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value, props.class],
3272
+ "style": [backgroundColorStyles.value, props.style]
3220
3273
  }, {
3221
3274
  default: () => [hasImage && vue.createVNode("div", {
3222
3275
  "key": "image",
@@ -3283,6 +3336,98 @@
3283
3336
 
3284
3337
  // Utilities
3285
3338
 
3339
+ // Types
3340
+
3341
+ // Composables
3342
+ const makeScrollProps = propsFactory({
3343
+ scrollTarget: {
3344
+ type: String
3345
+ },
3346
+ scrollThreshold: {
3347
+ type: [String, Number]
3348
+ }
3349
+ }, 'scroll');
3350
+ function useScroll(props) {
3351
+ let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3352
+ const {
3353
+ thresholdMetCallback,
3354
+ scrollThreshold,
3355
+ canScroll
3356
+ } = args;
3357
+ let previousScroll = 0;
3358
+ const target = vue.ref(null);
3359
+ const currentScroll = vue.ref(0);
3360
+ const savedScroll = vue.ref(0);
3361
+ const currentThreshold = vue.ref(0);
3362
+ const isScrollActive = vue.ref(false);
3363
+ const isScrollingUp = vue.ref(false);
3364
+ const computedScrollThreshold = vue.computed(() => {
3365
+ return Number(props.scrollThreshold ?? scrollThreshold ?? 300);
3366
+ });
3367
+ const onScroll = () => {
3368
+ const targetEl = target.value;
3369
+ if (!targetEl || canScroll && !canScroll.value) return;
3370
+ previousScroll = currentScroll.value;
3371
+ currentScroll.value = 'window' in targetEl ? targetEl.pageYOffset : targetEl.scrollTop;
3372
+ isScrollingUp.value = currentScroll.value < previousScroll;
3373
+ currentThreshold.value = Math.abs(currentScroll.value - computedScrollThreshold.value);
3374
+ };
3375
+ vue.watch(isScrollingUp, () => {
3376
+ savedScroll.value = savedScroll.value || currentScroll.value;
3377
+ });
3378
+ vue.watch(isScrollActive, () => {
3379
+ savedScroll.value = 0;
3380
+ });
3381
+ vue.onMounted(() => {
3382
+ vue.watch(() => props.scrollTarget, scrollTarget => {
3383
+ const newTarget = scrollTarget ? document.querySelector(scrollTarget) : window;
3384
+ if (!newTarget) {
3385
+ consoleWarn(`Unable to locate element with identifier ${scrollTarget}`, vue.getCurrentInstance());
3386
+ return;
3387
+ }
3388
+ if (newTarget === target.value) return;
3389
+ target.value?.removeEventListener('scroll', onScroll);
3390
+ target.value = newTarget;
3391
+ target.value.addEventListener('scroll', onScroll, {
3392
+ passive: true
3393
+ });
3394
+ }, {
3395
+ immediate: true
3396
+ });
3397
+ });
3398
+ vue.onBeforeUnmount(() => {
3399
+ target.value?.removeEventListener('scroll', onScroll);
3400
+ });
3401
+ thresholdMetCallback && vue.watch(() => Math.abs(currentScroll.value - savedScroll.value) > computedScrollThreshold.value, thresholdMet => {
3402
+ thresholdMet && thresholdMetCallback({
3403
+ currentThreshold: currentThreshold.value,
3404
+ isScrollingUp: isScrollingUp.value,
3405
+ savedScroll
3406
+ });
3407
+ }, {
3408
+ immediate: true
3409
+ });
3410
+
3411
+ // Do we need this? If yes - seems that
3412
+ // there's no need to expose onScroll
3413
+ canScroll && vue.watch(canScroll, onScroll, {
3414
+ immediate: true
3415
+ });
3416
+ return {
3417
+ computedScrollThreshold,
3418
+ currentScroll,
3419
+ currentThreshold,
3420
+ isScrollActive,
3421
+ // required only for testing
3422
+ // probably can be removed
3423
+ // later (2 chars chlng)
3424
+ isScrollingUp,
3425
+ savedScroll
3426
+ };
3427
+ }
3428
+
3429
+ // Utilities
3430
+
3286
3431
  // Composables
3287
3432
  function useSsrBoot() {
3288
3433
  const isBooted = vue.ref(false);
@@ -3305,13 +3450,7 @@
3305
3450
  const VAppBar = genericComponent()({
3306
3451
  name: 'VAppBar',
3307
3452
  props: {
3308
- // TODO: Implement scrolling techniques
3309
- // hideOnScroll: Boolean
3310
- // invertedScroll: Boolean
3311
- // collapseOnScroll: Boolean
3312
- // elevateOnScroll: Boolean
3313
- // shrinkOnScroll: Boolean
3314
- // fadeImageOnScroll: Boolean
3453
+ scrollBehavior: String,
3315
3454
  modelValue: {
3316
3455
  type: Boolean,
3317
3456
  default: true
@@ -3323,6 +3462,7 @@
3323
3462
  },
3324
3463
  ...makeVToolbarProps(),
3325
3464
  ...makeLayoutItemProps(),
3465
+ ...makeScrollProps(),
3326
3466
  height: {
3327
3467
  type: [Number, String],
3328
3468
  default: 64
@@ -3337,11 +3477,63 @@
3337
3477
  } = _ref;
3338
3478
  const vToolbarRef = vue.ref();
3339
3479
  const isActive = useProxiedModel(props, 'modelValue');
3480
+ const scrollBehavior = vue.computed(() => {
3481
+ const behavior = new Set(props.scrollBehavior?.split(' ') ?? []);
3482
+ return {
3483
+ hide: behavior.has('hide'),
3484
+ // fullyHide: behavior.has('fully-hide'),
3485
+ inverted: behavior.has('inverted'),
3486
+ collapse: behavior.has('collapse'),
3487
+ elevate: behavior.has('elevate'),
3488
+ fadeImage: behavior.has('fade-image')
3489
+ // shrink: behavior.has('shrink'),
3490
+ };
3491
+ });
3492
+
3493
+ const canScroll = vue.computed(() => {
3494
+ const behavior = scrollBehavior.value;
3495
+ return behavior.hide ||
3496
+ // behavior.fullyHide ||
3497
+ behavior.inverted || behavior.collapse || behavior.elevate || behavior.fadeImage ||
3498
+ // behavior.shrink ||
3499
+ !isActive.value;
3500
+ });
3501
+ const {
3502
+ currentScroll,
3503
+ currentThreshold,
3504
+ computedScrollThreshold,
3505
+ isScrollingUp
3506
+ } = useScroll(props, {
3507
+ canScroll
3508
+ });
3509
+ const isCollapsed = vue.computed(() => props.collapse || scrollBehavior.value.collapse && (scrollBehavior.value.inverted ? currentScroll.value < 1 : currentScroll.value > 0));
3510
+ const isFlat = vue.computed(() => props.flat || scrollBehavior.value.elevate && currentScroll.value === (scrollBehavior.value.inverted ? 1 : 0));
3511
+ const scrollRatio = vue.computed(() => Math.min((currentThreshold.value - currentScroll.value) / currentThreshold.value || 1, 1));
3512
+ const opacity = vue.computed(() => scrollBehavior.value.fadeImage ? scrollBehavior.value.inverted ? 1 - scrollRatio.value : scrollRatio.value : undefined);
3340
3513
  const height = vue.computed(() => {
3514
+ if (scrollBehavior.value.hide && scrollBehavior.value.inverted) return 0;
3341
3515
  const height = vToolbarRef.value?.contentHeight ?? 0;
3342
3516
  const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0;
3343
3517
  return height + extensionHeight;
3344
3518
  });
3519
+ function setActive() {
3520
+ const val = currentScroll.value;
3521
+ if (scrollBehavior.value.hide) {
3522
+ if (scrollBehavior.value.inverted) {
3523
+ isActive.value = val > computedScrollThreshold.value;
3524
+ } else {
3525
+ isActive.value = isScrollingUp.value || val < computedScrollThreshold.value;
3526
+ }
3527
+ } else if (scrollBehavior.value.inverted) {
3528
+ isActive.value = currentScroll.value === 0;
3529
+ } else {
3530
+ isActive.value = true;
3531
+ }
3532
+ }
3533
+ vue.watch(currentScroll, setActive, {
3534
+ immediate: true
3535
+ });
3536
+ vue.watch(scrollBehavior, setActive);
3345
3537
  const {
3346
3538
  ssrBootStyles
3347
3539
  } = useSsrBoot();
@@ -3352,7 +3544,7 @@
3352
3544
  order: vue.computed(() => parseInt(props.order, 10)),
3353
3545
  position: vue.toRef(props, 'location'),
3354
3546
  layoutSize: height,
3355
- elementSize: height,
3547
+ elementSize: vue.ref(undefined),
3356
3548
  active: isActive,
3357
3549
  absolute: vue.toRef(props, 'absolute')
3358
3550
  });
@@ -3362,13 +3554,17 @@
3362
3554
  "ref": vToolbarRef,
3363
3555
  "class": ['v-app-bar', {
3364
3556
  'v-app-bar--bottom': props.location === 'bottom'
3365
- }],
3366
- "style": {
3557
+ }, props.class],
3558
+ "style": [{
3367
3559
  ...layoutItemStyles.value,
3560
+ '--v-toolbar-image-opacity': opacity.value,
3368
3561
  height: undefined,
3369
3562
  ...ssrBootStyles.value
3370
- }
3371
- }, toolbarProps), slots);
3563
+ }, props.style]
3564
+ }, toolbarProps, {
3565
+ "collapse": isCollapsed.value,
3566
+ "flat": isFlat.value
3567
+ }), slots);
3372
3568
  });
3373
3569
  return {};
3374
3570
  }
@@ -3451,6 +3647,7 @@
3451
3647
  const makeVBtnGroupProps = propsFactory({
3452
3648
  divided: Boolean,
3453
3649
  ...makeBorderProps(),
3650
+ ...makeComponentProps(),
3454
3651
  ...makeDensityProps(),
3455
3652
  ...makeElevationProps(),
3456
3653
  ...makeRoundedProps(),
@@ -3493,7 +3690,8 @@
3493
3690
  return vue.createVNode(props.tag, {
3494
3691
  "class": ['v-btn-group', {
3495
3692
  'v-btn-group--divided': props.divided
3496
- }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value]
3693
+ }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
3694
+ "style": props.style
3497
3695
  }, slots);
3498
3696
  });
3499
3697
  }
@@ -3726,8 +3924,10 @@
3726
3924
  useRender(() => {
3727
3925
  const [btnGroupProps] = VBtnGroup.filterProps(props);
3728
3926
  return vue.createVNode(VBtnGroup, vue.mergeProps({
3729
- "class": "v-btn-toggle"
3730
- }, btnGroupProps), {
3927
+ "class": ['v-btn-toggle', props.class]
3928
+ }, btnGroupProps, {
3929
+ "style": props.style
3930
+ }), {
3731
3931
  default: () => [slots.default?.({
3732
3932
  isSelected,
3733
3933
  next,
@@ -3798,7 +3998,7 @@
3798
3998
 
3799
3999
  // Types
3800
4000
 
3801
- const IconValue = [String, Function, Object];
4001
+ const IconValue = [String, Function, Object, Array];
3802
4002
  const IconSymbol = Symbol.for('vuetify:icons');
3803
4003
  const makeIconProps = propsFactory({
3804
4004
  icon: {
@@ -3818,8 +4018,9 @@
3818
4018
  slots
3819
4019
  } = _ref;
3820
4020
  return () => {
4021
+ const Icon = props.icon;
3821
4022
  return vue.createVNode(props.tag, null, {
3822
- default: () => [props.icon ? vue.createVNode(props.icon, null, null) : slots.default?.()]
4023
+ default: () => [props.icon ? vue.createVNode(Icon, null, null) : slots.default?.()]
3823
4024
  });
3824
4025
  };
3825
4026
  }
@@ -3842,7 +4043,12 @@
3842
4043
  "viewBox": "0 0 24 24",
3843
4044
  "role": "img",
3844
4045
  "aria-hidden": "true"
3845
- }, [vue.createVNode("path", {
4046
+ }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? vue.createVNode("path", {
4047
+ "d": path[0],
4048
+ "fill-opacity": path[1]
4049
+ }, null) : vue.createVNode("path", {
4050
+ "d": path
4051
+ }, null)) : vue.createVNode("path", {
3846
4052
  "d": props.icon
3847
4053
  }, null)])]
3848
4054
  });
@@ -3907,7 +4113,12 @@
3907
4113
  }
3908
4114
  }
3909
4115
  if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
3910
- if (typeof icon !== 'string') {
4116
+ if (Array.isArray(icon)) {
4117
+ return {
4118
+ component: VSvgIcon,
4119
+ icon
4120
+ };
4121
+ } else if (typeof icon !== 'string') {
3911
4122
  return {
3912
4123
  component: VComponentIcon,
3913
4124
  icon
@@ -3964,6 +4175,7 @@
3964
4175
  start: Boolean,
3965
4176
  end: Boolean,
3966
4177
  icon: IconValue,
4178
+ ...makeComponentProps(),
3967
4179
  ...makeSizeProps(),
3968
4180
  ...makeTagProps({
3969
4181
  tag: 'i'
@@ -4006,12 +4218,12 @@
4006
4218
  'v-icon--clickable': !!attrs.onClick,
4007
4219
  'v-icon--start': props.start,
4008
4220
  'v-icon--end': props.end
4009
- }],
4221
+ }, props.class],
4010
4222
  "style": [!sizeClasses.value ? {
4011
4223
  fontSize: convertToUnit(props.size),
4012
4224
  height: convertToUnit(props.size),
4013
4225
  width: convertToUnit(props.size)
4014
- } : undefined, textColorStyles.value],
4226
+ } : undefined, textColorStyles.value, props.style],
4015
4227
  "role": attrs.onClick ? 'button' : undefined,
4016
4228
  "aria-hidden": !attrs.onClick
4017
4229
  }, {
@@ -4022,14 +4234,14 @@
4022
4234
  });
4023
4235
 
4024
4236
  // Utilities
4025
- function useIntersectionObserver(callback) {
4237
+ function useIntersectionObserver(callback, options) {
4026
4238
  const intersectionRef = vue.ref();
4027
4239
  const isIntersecting = vue.ref(false);
4028
4240
  if (SUPPORTS_INTERSECTION) {
4029
4241
  const observer = new IntersectionObserver(entries => {
4030
4242
  callback?.(entries, observer);
4031
4243
  isIntersecting.value = !!entries.find(entry => entry.isIntersecting);
4032
- });
4244
+ }, options);
4033
4245
  vue.onBeforeUnmount(() => {
4034
4246
  observer.disconnect();
4035
4247
  });
@@ -4069,6 +4281,7 @@
4069
4281
  type: [Number, String],
4070
4282
  default: 4
4071
4283
  },
4284
+ ...makeComponentProps(),
4072
4285
  ...makeSizeProps(),
4073
4286
  ...makeTagProps({
4074
4287
  tag: 'div'
@@ -4124,8 +4337,8 @@
4124
4337
  'v-progress-circular--indeterminate': !!props.indeterminate,
4125
4338
  'v-progress-circular--visible': isIntersecting.value,
4126
4339
  'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink'
4127
- }, themeClasses.value, sizeClasses.value, textColorClasses.value],
4128
- "style": [sizeStyles.value, textColorStyles.value],
4340
+ }, themeClasses.value, sizeClasses.value, textColorClasses.value, props.class],
4341
+ "style": [sizeStyles.value, textColorStyles.value, props.style],
4129
4342
  "role": "progressbar",
4130
4343
  "aria-valuemin": "0",
4131
4344
  "aria-valuemax": "100",
@@ -4544,6 +4757,7 @@
4544
4757
  stream: Boolean,
4545
4758
  striped: Boolean,
4546
4759
  roundedBar: Boolean,
4760
+ ...makeComponentProps(),
4547
4761
  ...makeLocationProps({
4548
4762
  location: 'top'
4549
4763
  }),
@@ -4615,14 +4829,14 @@
4615
4829
  'v-progress-linear--rounded': props.rounded,
4616
4830
  'v-progress-linear--rounded-bar': props.roundedBar,
4617
4831
  'v-progress-linear--striped': props.striped
4618
- }, roundedClasses.value, themeClasses.value],
4619
- "style": {
4832
+ }, roundedClasses.value, themeClasses.value, props.class],
4833
+ "style": [{
4620
4834
  bottom: props.location === 'bottom' ? 0 : undefined,
4621
4835
  top: props.location === 'top' ? 0 : undefined,
4622
4836
  height: props.active ? convertToUnit(height.value) : 0,
4623
4837
  '--v-progress-linear-height': convertToUnit(height.value),
4624
4838
  ...locationStyles.value
4625
- },
4839
+ }, props.style],
4626
4840
  "role": "progressbar",
4627
4841
  "aria-hidden": props.active ? 'false' : 'true',
4628
4842
  "aria-valuemin": "0",
@@ -4831,8 +5045,9 @@
4831
5045
  type: Boolean,
4832
5046
  default: true
4833
5047
  },
5048
+ text: String,
4834
5049
  ...makeBorderProps(),
4835
- ...makeRoundedProps(),
5050
+ ...makeComponentProps(),
4836
5051
  ...makeDensityProps(),
4837
5052
  ...makeDimensionProps(),
4838
5053
  ...makeElevationProps(),
@@ -4840,6 +5055,7 @@
4840
5055
  ...makeLoaderProps(),
4841
5056
  ...makeLocationProps(),
4842
5057
  ...makePositionProps(),
5058
+ ...makeRoundedProps(),
4843
5059
  ...makeRouterProps(),
4844
5060
  ...makeSizeProps(),
4845
5061
  ...makeTagProps({
@@ -4937,8 +5153,8 @@
4937
5153
  'v-btn--icon': !!props.icon,
4938
5154
  'v-btn--loading': props.loading,
4939
5155
  'v-btn--stacked': props.stacked
4940
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
4941
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value],
5156
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
5157
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value, props.style],
4942
5158
  "disabled": isDisabled.value || undefined,
4943
5159
  "href": link.href.value,
4944
5160
  "onClick": e => {
@@ -4976,7 +5192,9 @@
4976
5192
  icon: props.icon
4977
5193
  }
4978
5194
  }
4979
- }, slots.default)]), !props.icon && hasAppend && vue.createVNode("span", {
5195
+ }, {
5196
+ default: () => [slots.default?.() ?? props.text]
5197
+ })]), !props.icon && hasAppend && vue.createVNode("span", {
4980
5198
  "key": "append",
4981
5199
  "class": "v-btn__append"
4982
5200
  }, [!slots.append ? vue.createVNode(VIcon, {
@@ -5013,15 +5231,17 @@
5013
5231
  icon: {
5014
5232
  type: IconValue,
5015
5233
  default: '$menu'
5016
- }
5234
+ },
5235
+ ...makeComponentProps()
5017
5236
  },
5018
5237
  setup(props, _ref) {
5019
5238
  let {
5020
5239
  slots
5021
5240
  } = _ref;
5022
5241
  useRender(() => vue.createVNode(VBtn, {
5023
- "class": "v-app-bar-nav-icon",
5024
- "icon": props.icon
5242
+ "class": ['v-app-bar-nav-icon', props.class],
5243
+ "icon": props.icon,
5244
+ "style": props.style
5025
5245
  }, slots));
5026
5246
  return {};
5027
5247
  }
@@ -5029,9 +5249,12 @@
5029
5249
 
5030
5250
  const VToolbarItems = genericComponent()({
5031
5251
  name: 'VToolbarItems',
5032
- props: makeVariantProps({
5033
- variant: 'text'
5034
- }),
5252
+ props: {
5253
+ ...makeComponentProps(),
5254
+ ...makeVariantProps({
5255
+ variant: 'text'
5256
+ })
5257
+ },
5035
5258
  setup(props, _ref) {
5036
5259
  let {
5037
5260
  slots
@@ -5044,7 +5267,8 @@
5044
5267
  }
5045
5268
  });
5046
5269
  useRender(() => vue.createVNode("div", {
5047
- "class": "v-toolbar-items"
5270
+ "class": ['v-toolbar-items', props.class],
5271
+ "style": props.style
5048
5272
  }, [slots.default?.()]));
5049
5273
  return {};
5050
5274
  }
@@ -5106,6 +5330,7 @@
5106
5330
  type: String,
5107
5331
  validator: val => allowedTypes.includes(val)
5108
5332
  },
5333
+ ...makeComponentProps(),
5109
5334
  ...makeDensityProps(),
5110
5335
  ...makeDimensionProps(),
5111
5336
  ...makeElevationProps(),
@@ -5188,8 +5413,8 @@
5188
5413
  [`v-alert--border-${props.border === true ? 'start' : props.border}`]: true
5189
5414
  }, {
5190
5415
  'v-alert--prominent': props.prominent
5191
- }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
5192
- "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
5416
+ }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
5417
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
5193
5418
  "role": "alert"
5194
5419
  }, {
5195
5420
  default: () => [genOverlays(false, 'v-alert'), props.border && vue.createVNode("div", {
@@ -5283,6 +5508,7 @@
5283
5508
  props: {
5284
5509
  text: String,
5285
5510
  clickable: Boolean,
5511
+ ...makeComponentProps(),
5286
5512
  ...makeThemeProps()
5287
5513
  },
5288
5514
  setup(props, _ref) {
@@ -5292,7 +5518,8 @@
5292
5518
  useRender(() => vue.createVNode("label", {
5293
5519
  "class": ['v-label', {
5294
5520
  'v-label--clickable': props.clickable
5295
- }]
5521
+ }, props.class],
5522
+ "style": props.style
5296
5523
  }, [props.text, slots.default?.()]));
5297
5524
  return {};
5298
5525
  }
@@ -5301,7 +5528,8 @@
5301
5528
  const VFieldLabel = genericComponent()({
5302
5529
  name: 'VFieldLabel',
5303
5530
  props: {
5304
- floating: Boolean
5531
+ floating: Boolean,
5532
+ ...makeComponentProps()
5305
5533
  },
5306
5534
  setup(props, _ref) {
5307
5535
  let {
@@ -5310,7 +5538,8 @@
5310
5538
  useRender(() => vue.createVNode(VLabel, {
5311
5539
  "class": ['v-field-label', {
5312
5540
  'v-field-label--floating': props.floating
5313
- }],
5541
+ }, props.class],
5542
+ "style": props.style,
5314
5543
  "aria-hidden": props.floating || undefined
5315
5544
  }, slots));
5316
5545
  return {};
@@ -5350,7 +5579,7 @@
5350
5579
 
5351
5580
  // Types
5352
5581
 
5353
- const allowedVariants$1 = ['underlined', 'outlined', 'filled', 'solo', 'plain'];
5582
+ const allowedVariants$1 = ['underlined', 'outlined', 'filled', 'solo', 'solo-inverted', 'solo-filled', 'plain'];
5354
5583
  const makeVFieldProps = propsFactory({
5355
5584
  appendInnerIcon: IconValue,
5356
5585
  bgColor: String,
@@ -5361,9 +5590,11 @@
5361
5590
  },
5362
5591
  active: Boolean,
5363
5592
  color: String,
5593
+ baseColor: String,
5364
5594
  dirty: Boolean,
5365
5595
  disabled: Boolean,
5366
5596
  error: Boolean,
5597
+ flat: Boolean,
5367
5598
  label: String,
5368
5599
  persistentClear: Boolean,
5369
5600
  prependInnerIcon: IconValue,
@@ -5377,8 +5608,10 @@
5377
5608
  'onClick:clear': EventProp(),
5378
5609
  'onClick:appendInner': EventProp(),
5379
5610
  'onClick:prependInner': EventProp(),
5380
- ...makeThemeProps(),
5381
- ...makeLoaderProps()
5611
+ ...makeComponentProps(),
5612
+ ...makeLoaderProps(),
5613
+ ...makeRoundedProps(),
5614
+ ...makeThemeProps()
5382
5615
  }, 'v-field');
5383
5616
  const VField = genericComponent()({
5384
5617
  name: 'VField',
@@ -5413,6 +5646,9 @@
5413
5646
  const {
5414
5647
  InputIcon
5415
5648
  } = useInputIcon(props);
5649
+ const {
5650
+ roundedClasses
5651
+ } = useRounded(props);
5416
5652
  const isActive = vue.computed(() => props.dirty || props.active);
5417
5653
  const hasLabel = vue.computed(() => !props.singleLine && !!(props.label || slots.label));
5418
5654
  const uid = getUid();
@@ -5429,7 +5665,7 @@
5429
5665
  textColorClasses,
5430
5666
  textColorStyles
5431
5667
  } = useTextColor(vue.computed(() => {
5432
- return isActive.value && isFocused.value && !props.error && !props.disabled ? props.color : undefined;
5668
+ return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : props.baseColor;
5433
5669
  }));
5434
5670
  vue.watch(isActive, val => {
5435
5671
  if (hasLabel.value) {
@@ -5498,6 +5734,7 @@
5498
5734
  'v-field--disabled': props.disabled,
5499
5735
  'v-field--dirty': props.dirty,
5500
5736
  'v-field--error': props.error,
5737
+ 'v-field--flat': props.flat,
5501
5738
  'v-field--has-background': !!props.bgColor,
5502
5739
  'v-field--persistent-clear': props.persistentClear,
5503
5740
  'v-field--prepended': hasPrepend,
@@ -5505,8 +5742,8 @@
5505
5742
  'v-field--single-line': props.singleLine,
5506
5743
  'v-field--no-label': !label,
5507
5744
  [`v-field--variant-${props.variant}`]: true
5508
- }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value],
5509
- "style": [backgroundColorStyles.value, textColorStyles.value],
5745
+ }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, props.class],
5746
+ "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
5510
5747
  "onClick": onClick
5511
5748
  }, attrs), [vue.createVNode("div", {
5512
5749
  "class": "v-field__overlay"
@@ -5525,7 +5762,7 @@
5525
5762
  }, null), slots['prepend-inner']?.(slotProps.value)]), vue.createVNode("div", {
5526
5763
  "class": "v-field__field",
5527
5764
  "data-no-activator": ""
5528
- }, [['solo', 'filled'].includes(props.variant) && hasLabel.value && vue.createVNode(VFieldLabel, {
5765
+ }, [['filled', 'solo', 'solo-inverted', 'solo-filled'].includes(props.variant) && hasLabel.value && vue.createVNode(VFieldLabel, {
5529
5766
  "key": "floating-label",
5530
5767
  "ref": floatingLabelRef,
5531
5768
  "class": [textColorClasses.value],
@@ -5594,7 +5831,7 @@
5594
5831
  });
5595
5832
  // TODO: this is kinda slow, might be better to implicitly inherit props instead
5596
5833
  function filterFieldProps(attrs) {
5597
- const keys = Object.keys(VField.props).filter(k => !isOn(k));
5834
+ const keys = Object.keys(VField.props).filter(k => !isOn(k) && k !== 'class' && k !== 'style');
5598
5835
  return pick(attrs, keys);
5599
5836
  }
5600
5837
 
@@ -5609,6 +5846,7 @@
5609
5846
  type: [Array, String],
5610
5847
  default: () => []
5611
5848
  },
5849
+ ...makeComponentProps(),
5612
5850
  ...makeTransitionProps({
5613
5851
  transition: {
5614
5852
  component: VSlideYTransition,
@@ -5629,8 +5867,8 @@
5629
5867
  useRender(() => vue.createVNode(MaybeTransition, {
5630
5868
  "transition": props.transition,
5631
5869
  "tag": "div",
5632
- "class": ['v-messages', textColorClasses.value],
5633
- "style": textColorStyles.value,
5870
+ "class": ['v-messages', textColorClasses.value, props.class],
5871
+ "style": [textColorStyles.value, props.style],
5634
5872
  "role": "alert",
5635
5873
  "aria-live": "polite"
5636
5874
  }, {
@@ -5926,6 +6164,7 @@
5926
6164
  },
5927
6165
  'onClick:prepend': EventProp(),
5928
6166
  'onClick:append': EventProp(),
6167
+ ...makeComponentProps(),
5929
6168
  ...makeDensityProps(),
5930
6169
  ...makeValidationProps()
5931
6170
  }, 'v-input');
@@ -5993,7 +6232,8 @@
5993
6232
  const hasMessages = messages.value.length > 0;
5994
6233
  const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details);
5995
6234
  return vue.createVNode("div", {
5996
- "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value]
6235
+ "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value, props.class],
6236
+ "style": props.style
5997
6237
  }, [hasPrepend && vue.createVNode("div", {
5998
6238
  "key": "prepend",
5999
6239
  "class": "v-input__prepend"
@@ -6036,6 +6276,7 @@
6036
6276
  type: [Number, String],
6037
6277
  default: 0
6038
6278
  },
6279
+ ...makeComponentProps(),
6039
6280
  ...makeTransitionProps({
6040
6281
  transition: {
6041
6282
  component: VSlideYTransition
@@ -6053,7 +6294,8 @@
6053
6294
  "transition": props.transition
6054
6295
  }, {
6055
6296
  default: () => [vue.withDirectives(vue.createVNode("div", {
6056
- "class": "v-counter"
6297
+ "class": ['v-counter', props.class],
6298
+ "style": props.style
6057
6299
  }, [slots.default ? slots.default({
6058
6300
  counter: counter.value,
6059
6301
  max: props.max,
@@ -6256,7 +6498,8 @@
6256
6498
  'v-text-field--prefixed': props.prefix,
6257
6499
  'v-text-field--suffixed': props.suffix,
6258
6500
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
6259
- }]
6501
+ }, props.class],
6502
+ "style": props.style
6260
6503
  }, rootAttrs, inputProps, {
6261
6504
  "focused": isFocused.value
6262
6505
  }), {
@@ -6372,6 +6615,7 @@
6372
6615
  type: String,
6373
6616
  default: 'VSelectionControl'
6374
6617
  },
6618
+ ...makeComponentProps(),
6375
6619
  ...makeSelectionControlGroupProps()
6376
6620
  },
6377
6621
  emits: {
@@ -6419,7 +6663,8 @@
6419
6663
  useRender(() => vue.createVNode("div", {
6420
6664
  "class": ['v-selection-control-group', {
6421
6665
  'v-selection-control-group--inline': props.inline
6422
- }],
6666
+ }, props.class],
6667
+ "style": props.style,
6423
6668
  "role": props.type === 'radio' ? 'radiogroup' : undefined
6424
6669
  }, [slots.default?.()]));
6425
6670
  return {};
@@ -6433,6 +6678,7 @@
6433
6678
  trueValue: null,
6434
6679
  falseValue: null,
6435
6680
  value: null,
6681
+ ...makeComponentProps(),
6436
6682
  ...makeSelectionControlGroupProps()
6437
6683
  }, 'v-selection-control');
6438
6684
  function useSelectionControl(props) {
@@ -6547,8 +6793,10 @@
6547
6793
  'v-selection-control--focused': isFocused.value,
6548
6794
  'v-selection-control--focus-visible': isFocusVisible.value,
6549
6795
  'v-selection-control--inline': props.inline
6550
- }, densityClasses.value]
6551
- }, rootAttrs), [vue.createVNode("div", {
6796
+ }, densityClasses.value, props.class]
6797
+ }, rootAttrs, {
6798
+ "style": props.style
6799
+ }), [vue.createVNode("div", {
6552
6800
  "class": ['v-selection-control__wrapper', textColorClasses.value],
6553
6801
  "style": textColorStyles.value
6554
6802
  }, [slots.default?.(), vue.withDirectives(vue.createVNode("div", {
@@ -6630,7 +6878,8 @@
6630
6878
  useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
6631
6879
  "modelValue": model.value,
6632
6880
  "onUpdate:modelValue": [$event => model.value = $event, onChange],
6633
- "class": "v-checkbox-btn",
6881
+ "class": ['v-checkbox-btn', props.class],
6882
+ "style": props.style,
6634
6883
  "type": "checkbox",
6635
6884
  "inline": true,
6636
6885
  "falseIcon": falseIcon.value,
@@ -6670,10 +6919,11 @@
6670
6919
  const [inputProps, _1] = VInput.filterProps(props);
6671
6920
  const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6672
6921
  return vue.createVNode(VInput, vue.mergeProps({
6673
- "class": "v-checkbox"
6922
+ "class": ['v-checkbox', props.class]
6674
6923
  }, inputAttrs, inputProps, {
6675
6924
  "id": id.value,
6676
- "focused": isFocused.value
6925
+ "focused": isFocused.value,
6926
+ "style": props.style
6677
6927
  }), {
6678
6928
  ...slots,
6679
6929
  default: _ref2 => {
@@ -6704,6 +6954,7 @@
6704
6954
  end: Boolean,
6705
6955
  icon: IconValue,
6706
6956
  image: String,
6957
+ ...makeComponentProps(),
6707
6958
  ...makeDensityProps(),
6708
6959
  ...makeRoundedProps(),
6709
6960
  ...makeSizeProps(),
@@ -6742,8 +6993,8 @@
6742
6993
  "class": ['v-avatar', {
6743
6994
  'v-avatar--start': props.start,
6744
6995
  'v-avatar--end': props.end
6745
- }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
6746
- "style": [colorStyles.value, sizeStyles.value]
6996
+ }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6997
+ "style": [colorStyles.value, sizeStyles.value, props.style]
6747
6998
  }, {
6748
6999
  default: () => [props.image ? vue.createVNode(VImg, {
6749
7000
  "key": "image",
@@ -6771,6 +7022,7 @@
6771
7022
  type: Function,
6772
7023
  default: deepEqual
6773
7024
  },
7025
+ ...makeComponentProps(),
6774
7026
  ...makeGroupProps({
6775
7027
  selectedClass: 'v-chip--selected'
6776
7028
  }),
@@ -6808,7 +7060,8 @@
6808
7060
  useRender(() => vue.createVNode(props.tag, {
6809
7061
  "class": ['v-chip-group', {
6810
7062
  'v-chip-group--column': props.column
6811
- }, themeClasses.value]
7063
+ }, themeClasses.value, props.class],
7064
+ "style": props.style
6812
7065
  }, {
6813
7066
  default: () => [slots.default?.({
6814
7067
  isSelected,
@@ -6822,8 +7075,6 @@
6822
7075
  }
6823
7076
  });
6824
7077
 
6825
- // Types
6826
-
6827
7078
  const VChip = genericComponent()({
6828
7079
  name: 'VChip',
6829
7080
  directives: {
@@ -6868,6 +7119,7 @@
6868
7119
  onClick: EventProp(),
6869
7120
  onClickOnce: EventProp(),
6870
7121
  ...makeBorderProps(),
7122
+ ...makeComponentProps(),
6871
7123
  ...makeDensityProps(),
6872
7124
  ...makeElevationProps(),
6873
7125
  ...makeGroupItemProps(),
@@ -6960,8 +7212,8 @@
6960
7212
  'v-chip--link': isClickable.value,
6961
7213
  'v-chip--filter': hasFilter,
6962
7214
  'v-chip--pill': props.pill
6963
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value],
6964
- "style": [hasColor ? colorStyles.value : undefined],
7215
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value, props.class],
7216
+ "style": [hasColor ? colorStyles.value : undefined, props.style],
6965
7217
  "disabled": props.disabled || undefined,
6966
7218
  "draggable": props.draggable,
6967
7219
  "href": link.href.value,
@@ -7070,6 +7322,7 @@
7070
7322
  length: [Number, String],
7071
7323
  thickness: [Number, String],
7072
7324
  vertical: Boolean,
7325
+ ...makeComponentProps(),
7073
7326
  ...makeThemeProps()
7074
7327
  },
7075
7328
  setup(props, _ref) {
@@ -7098,8 +7351,8 @@
7098
7351
  'v-divider': true,
7099
7352
  'v-divider--inset': props.inset,
7100
7353
  'v-divider--vertical': props.vertical
7101
- }, themeClasses.value, textColorClasses.value],
7102
- "style": [dividerStyles.value, textColorStyles.value],
7354
+ }, themeClasses.value, textColorClasses.value, props.class],
7355
+ "style": [dividerStyles.value, textColorStyles.value, props.style],
7103
7356
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
7104
7357
  "role": `${attrs.role || 'separator'}`
7105
7358
  }, null));
@@ -7598,6 +7851,7 @@
7598
7851
  fluid: Boolean,
7599
7852
  subgroup: Boolean,
7600
7853
  value: null,
7854
+ ...makeComponentProps(),
7601
7855
  ...makeTagProps()
7602
7856
  }, 'v-list-group');
7603
7857
  const VListGroup = genericComponent()({
@@ -7646,7 +7900,8 @@
7646
7900
  'v-list-group--fluid': props.fluid,
7647
7901
  'v-list-group--subgroup': props.subgroup,
7648
7902
  'v-list-group--open': isOpen.value
7649
- }]
7903
+ }, props.class],
7904
+ "style": props.style
7650
7905
  }, {
7651
7906
  default: () => [slots.activator && vue.createVNode(VDefaultsProvider, {
7652
7907
  "defaults": activatorDefaults.value
@@ -7713,6 +7968,7 @@
7713
7968
  onClick: EventProp(),
7714
7969
  onClickOnce: EventProp(),
7715
7970
  ...makeBorderProps(),
7971
+ ...makeComponentProps(),
7716
7972
  ...makeDensityProps(),
7717
7973
  ...makeDimensionProps(),
7718
7974
  ...makeElevationProps(),
@@ -7823,8 +8079,8 @@
7823
8079
  'v-list-item--nav': props.nav,
7824
8080
  'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,
7825
8081
  [`${props.activeClass}`]: props.activeClass && isActive.value
7826
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value],
7827
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value],
8082
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
8083
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, props.style],
7828
8084
  "href": link.href.value,
7829
8085
  "tabindex": isClickable.value ? 0 : undefined,
7830
8086
  "onClick": onClick,
@@ -7917,6 +8173,7 @@
7917
8173
  inset: Boolean,
7918
8174
  sticky: Boolean,
7919
8175
  title: String,
8176
+ ...makeComponentProps(),
7920
8177
  ...makeTagProps()
7921
8178
  },
7922
8179
  setup(props, _ref) {
@@ -7933,10 +8190,10 @@
7933
8190
  "class": ['v-list-subheader', {
7934
8191
  'v-list-subheader--inset': props.inset,
7935
8192
  'v-list-subheader--sticky': props.sticky
7936
- }, textColorClasses.value],
7937
- "style": {
8193
+ }, textColorClasses.value, props.class],
8194
+ "style": [{
7938
8195
  textColorStyles
7939
- }
8196
+ }, props.style]
7940
8197
  }, {
7941
8198
  default: () => [hasText && vue.createVNode("div", {
7942
8199
  "class": "v-list-subheader__text"
@@ -8156,6 +8413,7 @@
8156
8413
  openStrategy: 'list'
8157
8414
  }),
8158
8415
  ...makeBorderProps(),
8416
+ ...makeComponentProps(),
8159
8417
  ...makeDensityProps(),
8160
8418
  ...makeDimensionProps(),
8161
8419
  ...makeElevationProps(),
@@ -8267,8 +8525,8 @@
8267
8525
  "class": ['v-list', {
8268
8526
  'v-list--disabled': props.disabled,
8269
8527
  'v-list--nav': props.nav
8270
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value],
8271
- "style": [backgroundColorStyles.value, dimensionStyles.value],
8528
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class],
8529
+ "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
8272
8530
  "role": "listbox",
8273
8531
  "aria-activedescendant": undefined,
8274
8532
  "onFocusin": onFocusin,
@@ -8296,6 +8554,7 @@
8296
8554
  props: {
8297
8555
  start: Boolean,
8298
8556
  end: Boolean,
8557
+ ...makeComponentProps(),
8299
8558
  ...makeTagProps()
8300
8559
  },
8301
8560
  setup(props, _ref) {
@@ -8306,7 +8565,8 @@
8306
8565
  "class": ['v-list-item-action', {
8307
8566
  'v-list-item-action--start': props.start,
8308
8567
  'v-list-item-action--end': props.end
8309
- }]
8568
+ }, props.class],
8569
+ "style": props.style
8310
8570
  }, slots));
8311
8571
  return {};
8312
8572
  }
@@ -8317,6 +8577,7 @@
8317
8577
  props: {
8318
8578
  start: Boolean,
8319
8579
  end: Boolean,
8580
+ ...makeComponentProps(),
8320
8581
  ...makeTagProps()
8321
8582
  },
8322
8583
  setup(props, _ref) {
@@ -8328,7 +8589,8 @@
8328
8589
  "class": ['v-list-item-media', {
8329
8590
  'v-list-item-media--start': props.start,
8330
8591
  'v-list-item-media--end': props.end
8331
- }]
8592
+ }, props.class],
8593
+ "style": props.style
8332
8594
  }, slots);
8333
8595
  });
8334
8596
  return {};
@@ -9569,6 +9831,7 @@
9569
9831
  default: 2000
9570
9832
  },
9571
9833
  ...makeActivatorProps(),
9834
+ ...makeComponentProps(),
9572
9835
  ...makeDimensionProps(),
9573
9836
  ...makeLazyProps(),
9574
9837
  ...makeLocationStrategyProps(),
@@ -9736,10 +9999,10 @@
9736
9999
  'v-overlay--absolute': props.absolute || props.contained,
9737
10000
  'v-overlay--active': isActive.value,
9738
10001
  'v-overlay--contained': props.contained
9739
- }, themeClasses.value, rtlClasses.value],
10002
+ }, themeClasses.value, rtlClasses.value, props.class],
9740
10003
  "style": [stackStyles.value, {
9741
10004
  top: convertToUnit(top.value)
9742
- }],
10005
+ }, props.style],
9743
10006
  "ref": root
9744
10007
  }, scopeId, attrs), [vue.createVNode(Scrim, vue.mergeProps({
9745
10008
  "color": scrimColor,
@@ -9845,7 +10108,8 @@
9845
10108
  const [overlayProps] = VOverlay.filterProps(props);
9846
10109
  return vue.createVNode(VOverlay, vue.mergeProps({
9847
10110
  "ref": overlay,
9848
- "class": ['v-menu']
10111
+ "class": ['v-menu', props.class],
10112
+ "style": props.style
9849
10113
  }, overlayProps, {
9850
10114
  "modelValue": isActive.value,
9851
10115
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -10064,7 +10328,8 @@
10064
10328
  'v-select--chips': !!props.chips,
10065
10329
  [`v-select--${props.multiple ? 'multiple' : 'single'}`]: true,
10066
10330
  'v-select--selected': model.value.length
10067
- }],
10331
+ }, props.class],
10332
+ "style": props.style,
10068
10333
  "appendInnerIcon": props.menuIcon,
10069
10334
  "readonly": true,
10070
10335
  "placeholder": placeholder,
@@ -10507,7 +10772,8 @@
10507
10772
  'v-autocomplete--selecting-index': selectionIndex.value > -1,
10508
10773
  [`v-autocomplete--${props.multiple ? 'multiple' : 'single'}`]: true,
10509
10774
  'v-autocomplete--selection-slot': !!slots.selection
10510
- }],
10775
+ }, props.class],
10776
+ "style": props.style,
10511
10777
  "appendInnerIcon": props.menuIcon,
10512
10778
  "readonly": props.readonly,
10513
10779
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -10621,8 +10887,6 @@
10621
10887
  }
10622
10888
  });
10623
10889
 
10624
- // Types
10625
-
10626
10890
  const VBadge = genericComponent()({
10627
10891
  name: 'VBadge',
10628
10892
  inheritAttrs: false,
@@ -10646,6 +10910,7 @@
10646
10910
  offsetX: [Number, String],
10647
10911
  offsetY: [Number, String],
10648
10912
  textColor: String,
10913
+ ...makeComponentProps(),
10649
10914
  ...makeLocationProps({
10650
10915
  location: 'top end'
10651
10916
  }),
@@ -10690,8 +10955,10 @@
10690
10955
  'v-badge--dot': props.dot,
10691
10956
  'v-badge--floating': props.floating,
10692
10957
  'v-badge--inline': props.inline
10693
- }]
10694
- }, attrs), {
10958
+ }, props.class]
10959
+ }, attrs, {
10960
+ "style": props.style
10961
+ }), {
10695
10962
  default: () => [vue.createVNode("div", {
10696
10963
  "class": "v-badge__wrapper"
10697
10964
  }, [ctx.slots.default?.(), vue.createVNode(MaybeTransition, {
@@ -10718,7 +10985,8 @@
10718
10985
  name: 'VBannerActions',
10719
10986
  props: {
10720
10987
  color: String,
10721
- density: String
10988
+ density: String,
10989
+ ...makeComponentProps()
10722
10990
  },
10723
10991
  setup(props, _ref) {
10724
10992
  let {
@@ -10732,7 +11000,8 @@
10732
11000
  }
10733
11001
  });
10734
11002
  useRender(() => vue.createVNode("div", {
10735
- "class": "v-banner-actions"
11003
+ "class": ['v-banner-actions', props.class],
11004
+ "style": props.style
10736
11005
  }, [slots.default?.()]));
10737
11006
  return {};
10738
11007
  }
@@ -10753,6 +11022,7 @@
10753
11022
  sticky: Boolean,
10754
11023
  text: String,
10755
11024
  ...makeBorderProps(),
11025
+ ...makeComponentProps(),
10756
11026
  ...makeDensityProps(),
10757
11027
  ...makeDimensionProps(),
10758
11028
  ...makeElevationProps(),
@@ -10810,8 +11080,8 @@
10810
11080
  'v-banner--stacked': props.stacked || mobile.value,
10811
11081
  'v-banner--sticky': props.sticky,
10812
11082
  [`v-banner--${props.lines}-line`]: !!props.lines
10813
- }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value],
10814
- "style": [dimensionStyles.value, locationStyles.value],
11083
+ }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11084
+ "style": [dimensionStyles.value, locationStyles.value, props.style],
10815
11085
  "role": "banner"
10816
11086
  }, {
10817
11087
  default: () => [hasPrepend && vue.createVNode("div", {
@@ -10867,6 +11137,7 @@
10867
11137
  default: true
10868
11138
  },
10869
11139
  ...makeBorderProps(),
11140
+ ...makeComponentProps(),
10870
11141
  ...makeDensityProps(),
10871
11142
  ...makeElevationProps(),
10872
11143
  ...makeRoundedProps(),
@@ -10941,11 +11212,11 @@
10941
11212
  'v-bottom-navigation--active': isActive.value,
10942
11213
  'v-bottom-navigation--grow': props.grow,
10943
11214
  'v-bottom-navigation--shift': props.mode === 'shift'
10944
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value],
11215
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
10945
11216
  "style": [backgroundColorStyles.value, layoutItemStyles.value, {
10946
11217
  height: convertToUnit(height.value),
10947
11218
  transform: `translateY(${convertToUnit(!isActive.value ? 100 : 0, '%')})`
10948
- }, ssrBootStyles.value]
11219
+ }, ssrBootStyles.value, props.style]
10949
11220
  }, {
10950
11221
  default: () => [slots.default && vue.createVNode("div", {
10951
11222
  "class": "v-bottom-navigation__content"
@@ -10959,14 +11230,16 @@
10959
11230
  const VBreadcrumbsDivider = genericComponent()({
10960
11231
  name: 'VBreadcrumbsDivider',
10961
11232
  props: {
10962
- divider: [Number, String]
11233
+ divider: [Number, String],
11234
+ ...makeComponentProps()
10963
11235
  },
10964
11236
  setup(props, _ref) {
10965
11237
  let {
10966
11238
  slots
10967
11239
  } = _ref;
10968
11240
  useRender(() => vue.createVNode("li", {
10969
- "class": "v-breadcrumbs-divider"
11241
+ "class": ['v-breadcrumbs-divider', props.class],
11242
+ "style": props.style
10970
11243
  }, [slots?.default?.() ?? props.divider]));
10971
11244
  return {};
10972
11245
  }
@@ -10981,6 +11254,7 @@
10981
11254
  color: String,
10982
11255
  disabled: Boolean,
10983
11256
  title: String,
11257
+ ...makeComponentProps(),
10984
11258
  ...makeRouterProps(),
10985
11259
  ...makeTagProps({
10986
11260
  tag: 'li'
@@ -11006,8 +11280,8 @@
11006
11280
  'v-breadcrumbs-item--disabled': props.disabled,
11007
11281
  'v-breadcrumbs-item--link': link.isLink.value,
11008
11282
  [`${props.activeClass}`]: isActive.value && props.activeClass
11009
- }, textColorClasses.value],
11010
- "style": [textColorStyles.value],
11283
+ }, textColorClasses.value, props.class],
11284
+ "style": [textColorStyles.value, props.style],
11011
11285
  "href": link.href.value,
11012
11286
  "aria-current": isActive.value ? 'page' : undefined,
11013
11287
  "onClick": link.navigate
@@ -11038,6 +11312,7 @@
11038
11312
  type: Array,
11039
11313
  default: () => []
11040
11314
  },
11315
+ ...makeComponentProps(),
11041
11316
  ...makeDensityProps(),
11042
11317
  ...makeRoundedProps(),
11043
11318
  ...makeTagProps({
@@ -11083,8 +11358,8 @@
11083
11358
  useRender(() => {
11084
11359
  const hasPrepend = !!(slots.prepend || props.icon);
11085
11360
  return vue.createVNode(props.tag, {
11086
- "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
11087
- "style": backgroundColorStyles.value
11361
+ "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value, props.class],
11362
+ "style": [backgroundColorStyles.value, props.style]
11088
11363
  }, {
11089
11364
  default: () => [hasPrepend && vue.createVNode("div", {
11090
11365
  "key": "prepend",
@@ -11128,11 +11403,10 @@
11128
11403
  }
11129
11404
  });
11130
11405
 
11131
- // Types
11132
-
11133
- const VCardActions = defineComponent({
11406
+ const VCardActions = genericComponent()({
11134
11407
  name: 'VCardActions',
11135
- setup(_, _ref) {
11408
+ props: makeComponentProps(),
11409
+ setup(props, _ref) {
11136
11410
  let {
11137
11411
  slots
11138
11412
  } = _ref;
@@ -11142,7 +11416,8 @@
11142
11416
  }
11143
11417
  });
11144
11418
  useRender(() => vue.createVNode("div", {
11145
- "class": "v-card-actions"
11419
+ "class": ['v-card-actions', props.class],
11420
+ "style": props.style
11146
11421
  }, [slots.default?.()]));
11147
11422
  return {};
11148
11423
  }
@@ -11152,8 +11427,6 @@
11152
11427
 
11153
11428
  const VCardTitle = createSimpleFunctional('v-card-title');
11154
11429
 
11155
- // Types
11156
-
11157
11430
  const VCardItem = genericComponent()({
11158
11431
  name: 'VCardItem',
11159
11432
  props: {
@@ -11163,6 +11436,7 @@
11163
11436
  prependIcon: IconValue,
11164
11437
  subtitle: String,
11165
11438
  title: String,
11439
+ ...makeComponentProps(),
11166
11440
  ...makeDensityProps()
11167
11441
  },
11168
11442
  setup(props, _ref) {
@@ -11177,7 +11451,8 @@
11177
11451
  const hasTitle = !!(props.title || slots.title);
11178
11452
  const hasSubtitle = !!(props.subtitle || slots.subtitle);
11179
11453
  return vue.createVNode("div", {
11180
- "class": "v-card-item"
11454
+ "class": ['v-card-item', props.class],
11455
+ "style": props.style
11181
11456
  }, [hasPrepend && vue.createVNode("div", {
11182
11457
  "key": "prepend",
11183
11458
  "class": "v-card-item__prepend"
@@ -11259,8 +11534,8 @@
11259
11534
  subtitle: String,
11260
11535
  text: String,
11261
11536
  title: String,
11262
- ...makeThemeProps(),
11263
11537
  ...makeBorderProps(),
11538
+ ...makeComponentProps(),
11264
11539
  ...makeDensityProps(),
11265
11540
  ...makeDimensionProps(),
11266
11541
  ...makeElevationProps(),
@@ -11270,6 +11545,7 @@
11270
11545
  ...makeRoundedProps(),
11271
11546
  ...makeRouterProps(),
11272
11547
  ...makeTagProps(),
11548
+ ...makeThemeProps(),
11273
11549
  ...makeVariantProps({
11274
11550
  variant: 'elevated'
11275
11551
  })
@@ -11330,8 +11606,8 @@
11330
11606
  'v-card--flat': props.flat,
11331
11607
  'v-card--hover': props.hover && !(props.disabled || props.flat),
11332
11608
  'v-card--link': isClickable.value
11333
- }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
11334
- "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
11609
+ }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
11610
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
11335
11611
  "href": link.href.value,
11336
11612
  "onClick": isClickable.value && link.navigate,
11337
11613
  "tabindex": props.disabled ? -1 : undefined
@@ -11527,6 +11803,7 @@
11527
11803
  mandatory: {
11528
11804
  default: 'force'
11529
11805
  },
11806
+ ...makeComponentProps(),
11530
11807
  ...makeTagProps(),
11531
11808
  ...makeThemeProps()
11532
11809
  }, 'v-window');
@@ -11642,7 +11919,8 @@
11642
11919
  "ref": rootRef,
11643
11920
  "class": ['v-window', {
11644
11921
  'v-window--show-arrows-on-hover': props.showArrows === 'hover'
11645
- }, themeClasses.value]
11922
+ }, themeClasses.value, props.class],
11923
+ "style": props.style
11646
11924
  }, {
11647
11925
  default: () => [vue.createVNode("div", {
11648
11926
  "class": "v-window__container",
@@ -11727,10 +12005,10 @@
11727
12005
  "class": ['v-carousel', {
11728
12006
  'v-carousel--hide-delimiter-background': props.hideDelimiterBackground,
11729
12007
  'v-carousel--vertical-delimiters': props.verticalDelimiters
11730
- }],
11731
- "style": {
12008
+ }, props.class],
12009
+ "style": [{
11732
12010
  height: convertToUnit(props.height)
11733
- },
12011
+ }, props.style],
11734
12012
  "continuous": true,
11735
12013
  "mandatory": "force",
11736
12014
  "showArrows": props.showArrows
@@ -11796,6 +12074,7 @@
11796
12074
  type: [Boolean, String],
11797
12075
  default: undefined
11798
12076
  },
12077
+ ...makeComponentProps(),
11799
12078
  ...makeGroupItemProps(),
11800
12079
  ...makeLazyProps()
11801
12080
  },
@@ -11882,7 +12161,8 @@
11882
12161
  "disabled": !isBooted.value
11883
12162
  }, {
11884
12163
  default: () => [vue.withDirectives(vue.createVNode("div", {
11885
- "class": ['v-window-item', groupItem.selectedClass.value]
12164
+ "class": ['v-window-item', groupItem.selectedClass.value, props.class],
12165
+ "style": props.style
11886
12166
  }, [hasContent.value && slots.default?.()]), [[vue.vShow, groupItem.isSelected.value]])]
11887
12167
  }));
11888
12168
  return {};
@@ -11895,7 +12175,8 @@
11895
12175
  name: 'VCarouselItem',
11896
12176
  inheritAttrs: false,
11897
12177
  props: {
11898
- value: null
12178
+ value: null,
12179
+ ...makeComponentProps()
11899
12180
  },
11900
12181
  setup(props, _ref) {
11901
12182
  let {
@@ -11903,7 +12184,8 @@
11903
12184
  attrs
11904
12185
  } = _ref;
11905
12186
  useRender(() => vue.createVNode(VWindowItem, {
11906
- "class": "v-carousel-item",
12187
+ "class": ['v-carousel-item', props.class],
12188
+ "style": props.style,
11907
12189
  "value": props.value
11908
12190
  }, {
11909
12191
  default: () => [vue.createVNode(VImg, attrs, slots)]
@@ -11916,6 +12198,7 @@
11916
12198
  const makeVSheetProps = propsFactory({
11917
12199
  color: String,
11918
12200
  ...makeBorderProps(),
12201
+ ...makeComponentProps(),
11919
12202
  ...makeDimensionProps(),
11920
12203
  ...makeElevationProps(),
11921
12204
  ...makeLocationProps(),
@@ -11959,8 +12242,8 @@
11959
12242
  roundedClasses
11960
12243
  } = useRounded(props);
11961
12244
  useRender(() => vue.createVNode(props.tag, {
11962
- "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value],
11963
- "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value]
12245
+ "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, props.class],
12246
+ "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value, props.style]
11964
12247
  }, slots));
11965
12248
  return {};
11966
12249
  }
@@ -11986,7 +12269,8 @@
11986
12269
  width: {
11987
12270
  type: [Number, String],
11988
12271
  default: 300
11989
- }
12272
+ },
12273
+ ...makeComponentProps()
11990
12274
  },
11991
12275
  emits: {
11992
12276
  'update:color': color => true,
@@ -12131,7 +12415,8 @@
12131
12415
  vue.onMounted(() => updateCanvas());
12132
12416
  useRender(() => vue.createVNode("div", {
12133
12417
  "ref": resizeRef,
12134
- "class": "v-color-picker-canvas",
12418
+ "class": ['v-color-picker-canvas', props.class],
12419
+ "style": props.style,
12135
12420
  "onClick": handleClick,
12136
12421
  "onMousedown": handleMouseDown,
12137
12422
  "onTouchstart": handleMouseDown
@@ -12364,7 +12649,8 @@
12364
12649
  type: Array,
12365
12650
  default: () => Object.keys(modes),
12366
12651
  validator: v => Array.isArray(v) && v.every(m => Object.keys(modes).includes(m))
12367
- }
12652
+ },
12653
+ ...makeComponentProps()
12368
12654
  },
12369
12655
  emits: {
12370
12656
  'update:color': color => true,
@@ -12404,7 +12690,8 @@
12404
12690
  });
12405
12691
  });
12406
12692
  useRender(() => vue.createVNode("div", {
12407
- "class": "v-color-picker-edit"
12693
+ "class": ['v-color-picker-edit', props.class],
12694
+ "style": props.style
12408
12695
  }, [inputs.value?.map(props => vue.createVNode(VColorPickerInput, props, null)), enabledModes.value.length > 1 && vue.createVNode(VBtn, {
12409
12696
  "icon": "$unfold",
12410
12697
  "size": "x-small",
@@ -12488,11 +12775,33 @@
12488
12775
  elevation: 2
12489
12776
  })
12490
12777
  }, 'slider');
12778
+ const useSteps = props => {
12779
+ const min = vue.computed(() => parseFloat(props.min));
12780
+ const max = vue.computed(() => parseFloat(props.max));
12781
+ const step = vue.computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
12782
+ const decimals = vue.computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
12783
+ function roundValue(value) {
12784
+ if (step.value <= 0) return value;
12785
+ const clamped = clamp(value, min.value, max.value);
12786
+ const offset = min.value % step.value;
12787
+ const newValue = Math.round((clamped - offset) / step.value) * step.value + offset;
12788
+ return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value));
12789
+ }
12790
+ return {
12791
+ min,
12792
+ max,
12793
+ step,
12794
+ decimals,
12795
+ roundValue
12796
+ };
12797
+ };
12491
12798
  const useSlider = _ref => {
12492
12799
  let {
12493
12800
  props,
12494
- handleSliderMouseUp,
12495
- handleMouseMove,
12801
+ steps,
12802
+ onSliderStart,
12803
+ onSliderMove,
12804
+ onSliderEnd,
12496
12805
  getActiveThumb
12497
12806
  } = _ref;
12498
12807
  const {
@@ -12506,10 +12815,13 @@
12506
12815
  }
12507
12816
  return hd;
12508
12817
  });
12509
- const min = vue.computed(() => parseFloat(props.min));
12510
- const max = vue.computed(() => parseFloat(props.max));
12511
- const step = vue.computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
12512
- const decimals = vue.computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
12818
+ const {
12819
+ min,
12820
+ max,
12821
+ step,
12822
+ decimals,
12823
+ roundValue
12824
+ } = steps;
12513
12825
  const thumbSize = vue.computed(() => parseInt(props.thumbSize, 10));
12514
12826
  const tickSize = vue.computed(() => parseInt(props.tickSize, 10));
12515
12827
  const trackSize = vue.computed(() => parseInt(props.trackSize, 10));
@@ -12523,13 +12835,6 @@
12523
12835
  const startOffset = vue.ref(0);
12524
12836
  const trackContainerRef = vue.ref();
12525
12837
  const activeThumbRef = vue.ref();
12526
- function roundValue(value) {
12527
- if (step.value <= 0) return value;
12528
- const clamped = clamp(value, min.value, max.value);
12529
- const offset = min.value % step.value;
12530
- const newValue = Math.round((clamped - offset) / step.value) * step.value + offset;
12531
- return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value));
12532
- }
12533
12838
  function parseMouseMove(e) {
12534
12839
  const vertical = props.direction === 'vertical';
12535
12840
  const start = vertical ? 'top' : 'left';
@@ -12546,14 +12851,11 @@
12546
12851
  if (vertical || horizontalDirection.value === 'rtl') clickPos = 1 - clickPos;
12547
12852
  return roundValue(min.value + clickPos * (max.value - min.value));
12548
12853
  }
12549
- let thumbMoved = false;
12550
12854
  const handleStop = e => {
12551
- if (!thumbMoved) {
12552
- startOffset.value = 0;
12553
- handleSliderMouseUp(parseMouseMove(e));
12554
- }
12855
+ onSliderEnd({
12856
+ value: parseMouseMove(e)
12857
+ });
12555
12858
  mousePressed.value = false;
12556
- thumbMoved = false;
12557
12859
  startOffset.value = 0;
12558
12860
  };
12559
12861
  const handleStart = e => {
@@ -12562,20 +12864,25 @@
12562
12864
  activeThumbRef.value.focus();
12563
12865
  mousePressed.value = true;
12564
12866
  if (activeThumbRef.value.contains(e.target)) {
12565
- thumbMoved = true;
12566
12867
  startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
12567
12868
  } else {
12568
12869
  startOffset.value = 0;
12569
- handleMouseMove(parseMouseMove(e));
12870
+ onSliderMove({
12871
+ value: parseMouseMove(e)
12872
+ });
12570
12873
  }
12874
+ onSliderStart({
12875
+ value: parseMouseMove(e)
12876
+ });
12571
12877
  };
12572
12878
  const moveListenerOptions = {
12573
12879
  passive: true,
12574
12880
  capture: true
12575
12881
  };
12576
12882
  function onMouseMove(e) {
12577
- thumbMoved = true;
12578
- handleMouseMove(parseMouseMove(e));
12883
+ onSliderMove({
12884
+ value: parseMouseMove(e)
12885
+ });
12579
12886
  }
12580
12887
  function onSliderMouseUp(e) {
12581
12888
  e.stopPropagation();
@@ -12703,7 +13010,8 @@
12703
13010
  ripple: {
12704
13011
  type: Boolean,
12705
13012
  default: true
12706
- }
13013
+ },
13014
+ ...makeComponentProps()
12707
13015
  },
12708
13016
  emits: {
12709
13017
  'update:modelValue': v => true
@@ -12781,11 +13089,11 @@
12781
13089
  "class": ['v-slider-thumb', {
12782
13090
  'v-slider-thumb--focused': props.focused,
12783
13091
  'v-slider-thumb--pressed': props.focused && mousePressed.value
12784
- }],
12785
- "style": {
13092
+ }, props.class],
13093
+ "style": [{
12786
13094
  '--v-slider-thumb-position': positionPercentage,
12787
13095
  '--v-slider-thumb-size': convertToUnit(thumbSize.value)
12788
- },
13096
+ }, props.style],
12789
13097
  "role": "slider",
12790
13098
  "tabindex": disabled.value ? -1 : 0,
12791
13099
  "aria-valuemin": props.min,
@@ -12831,7 +13139,8 @@
12831
13139
  stop: {
12832
13140
  type: Number,
12833
13141
  required: true
12834
- }
13142
+ },
13143
+ ...makeComponentProps()
12835
13144
  },
12836
13145
  emits: {},
12837
13146
  setup(props, _ref) {
@@ -12906,12 +13215,12 @@
12906
13215
  });
12907
13216
  useRender(() => {
12908
13217
  return vue.createVNode("div", {
12909
- "class": ['v-slider-track', roundedClasses.value],
12910
- "style": {
13218
+ "class": ['v-slider-track', roundedClasses.value, props.class],
13219
+ "style": [{
12911
13220
  '--v-slider-track-size': convertToUnit(trackSize.value),
12912
13221
  '--v-slider-tick-size': convertToUnit(tickSize.value),
12913
13222
  direction: !vertical.value ? horizontalDirection.value : undefined
12914
- }
13223
+ }, props.style]
12915
13224
  }, [vue.createVNode("div", {
12916
13225
  "class": ['v-slider-track__background', trackColorClasses.value, {
12917
13226
  'v-slider-track__background--opacity': !!color.value || !trackFillColor.value
@@ -12951,13 +13260,21 @@
12951
13260
  },
12952
13261
  emits: {
12953
13262
  'update:focused': value => true,
12954
- 'update:modelValue': v => true
13263
+ 'update:modelValue': v => true,
13264
+ start: value => true,
13265
+ end: value => true
12955
13266
  },
12956
13267
  setup(props, _ref) {
12957
13268
  let {
12958
- slots
13269
+ slots,
13270
+ emit
12959
13271
  } = _ref;
12960
13272
  const thumbContainerRef = vue.ref();
13273
+ const steps = useSteps(props);
13274
+ const model = useProxiedModel(props, 'modelValue', undefined, v => {
13275
+ const value = typeof v === 'string' ? parseFloat(v) : v == null ? steps.min.value : v;
13276
+ return steps.roundValue(value);
13277
+ });
12961
13278
  const {
12962
13279
  min,
12963
13280
  max,
@@ -12971,16 +13288,26 @@
12971
13288
  readonly
12972
13289
  } = useSlider({
12973
13290
  props,
12974
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
12975
- handleSliderMouseUp: newValue => model.value = roundValue(newValue),
12976
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
12977
- handleMouseMove: newValue => model.value = roundValue(newValue),
13291
+ steps,
13292
+ onSliderStart: () => {
13293
+ emit('start', model.value);
13294
+ },
13295
+ onSliderEnd: _ref2 => {
13296
+ let {
13297
+ value
13298
+ } = _ref2;
13299
+ const roundedValue = roundValue(value);
13300
+ model.value = roundedValue;
13301
+ emit('end', roundedValue);
13302
+ },
13303
+ onSliderMove: _ref3 => {
13304
+ let {
13305
+ value
13306
+ } = _ref3;
13307
+ return model.value = roundValue(value);
13308
+ },
12978
13309
  getActiveThumb: () => thumbContainerRef.value?.$el
12979
13310
  });
12980
- const model = useProxiedModel(props, 'modelValue', undefined, v => {
12981
- const value = typeof v === 'string' ? parseFloat(v) : v == null ? min.value : v;
12982
- return roundValue(value);
12983
- });
12984
13311
  const {
12985
13312
  isFocused,
12986
13313
  focus,
@@ -12996,7 +13323,8 @@
12996
13323
  'v-slider--focused': isFocused.value,
12997
13324
  'v-slider--pressed': mousePressed.value,
12998
13325
  'v-slider--disabled': props.disabled
12999
- }]
13326
+ }, props.class],
13327
+ "style": props.style
13000
13328
  }, inputProps, {
13001
13329
  "focused": isFocused.value
13002
13330
  }), {
@@ -13006,11 +13334,11 @@
13006
13334
  "class": "v-slider__label",
13007
13335
  "text": props.label
13008
13336
  }, null) : undefined, slots.prepend?.(slotProps)]) : undefined,
13009
- default: _ref2 => {
13337
+ default: _ref4 => {
13010
13338
  let {
13011
13339
  id,
13012
13340
  messagesId
13013
- } = _ref2;
13341
+ } = _ref4;
13014
13342
  return vue.createVNode("div", {
13015
13343
  "class": "v-slider__container",
13016
13344
  "onMousedown": !readonly.value ? onSliderMousedown : undefined,
@@ -13059,7 +13387,8 @@
13059
13387
  type: Object
13060
13388
  },
13061
13389
  disabled: Boolean,
13062
- hideAlpha: Boolean
13390
+ hideAlpha: Boolean,
13391
+ ...makeComponentProps()
13063
13392
  },
13064
13393
  emits: {
13065
13394
  'update:color': color => true
@@ -13071,7 +13400,8 @@
13071
13400
  useRender(() => vue.createVNode("div", {
13072
13401
  "class": ['v-color-picker-preview', {
13073
13402
  'v-color-picker-preview--hide-alpha': props.hideAlpha
13074
- }]
13403
+ }, props.class],
13404
+ "style": props.style
13075
13405
  }, [vue.createVNode("div", {
13076
13406
  "class": "v-color-picker-preview__dot"
13077
13407
  }, [vue.createVNode("div", {
@@ -13452,7 +13782,8 @@
13452
13782
  },
13453
13783
  disabled: Boolean,
13454
13784
  color: Object,
13455
- maxHeight: [Number, String]
13785
+ maxHeight: [Number, String],
13786
+ ...makeComponentProps()
13456
13787
  },
13457
13788
  emits: {
13458
13789
  'update:color': color => true
@@ -13462,10 +13793,10 @@
13462
13793
  emit
13463
13794
  } = _ref;
13464
13795
  useRender(() => vue.createVNode("div", {
13465
- "class": "v-color-picker-swatches",
13466
- "style": {
13796
+ "class": ['v-color-picker-swatches', props.class],
13797
+ "style": [{
13467
13798
  maxHeight: convertToUnit(props.maxHeight)
13468
- }
13799
+ }, props.style]
13469
13800
  }, [vue.createVNode("div", null, [props.swatches.map(swatch => vue.createVNode("div", {
13470
13801
  "class": "v-color-picker-swatches__swatch"
13471
13802
  }, [swatch.map(color => {
@@ -13569,13 +13900,13 @@
13569
13900
  "rounded": props.rounded,
13570
13901
  "elevation": props.elevation,
13571
13902
  "theme": props.theme,
13572
- "class": ['v-color-picker'],
13573
- "style": {
13903
+ "class": ['v-color-picker', props.class],
13904
+ "style": [{
13574
13905
  '--v-color-picker-color-hsv': HSVtoCSS({
13575
13906
  ...(currentColor.value ?? nullColor),
13576
13907
  a: 1
13577
13908
  })
13578
- }
13909
+ }, props.style]
13579
13910
  }, sheetProps, {
13580
13911
  "maxWidth": props.width
13581
13912
  }), {
@@ -13886,7 +14217,8 @@
13886
14217
  'v-combobox--chips': !!props.chips,
13887
14218
  'v-combobox--selecting-index': selectionIndex.value > -1,
13888
14219
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
13889
- }],
14220
+ }, props.class],
14221
+ "style": props.style,
13890
14222
  "appendInnerIcon": props.items.length ? props.menuIcon : undefined,
13891
14223
  "readonly": props.readonly,
13892
14224
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -14084,7 +14416,8 @@
14084
14416
  "class": ['v-dialog', {
14085
14417
  'v-dialog--fullscreen': props.fullscreen,
14086
14418
  'v-dialog--scrollable': props.scrollable
14087
- }]
14419
+ }, props.class],
14420
+ "style": props.style
14088
14421
  }, overlayProps, {
14089
14422
  "modelValue": isActive.value,
14090
14423
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -14123,6 +14456,7 @@
14123
14456
  validator: v => allowedVariants.includes(v)
14124
14457
  },
14125
14458
  readonly: Boolean,
14459
+ ...makeComponentProps(),
14126
14460
  ...makeGroupProps(),
14127
14461
  ...makeTagProps(),
14128
14462
  ...makeThemeProps()
@@ -14148,7 +14482,8 @@
14148
14482
  }
14149
14483
  });
14150
14484
  useRender(() => vue.createVNode(props.tag, {
14151
- "class": ['v-expansion-panels', themeClasses.value, variantClass.value]
14485
+ "class": ['v-expansion-panels', themeClasses.value, variantClass.value, props.class],
14486
+ "style": props.style
14152
14487
  }, slots));
14153
14488
  return {};
14154
14489
  }
@@ -14177,6 +14512,7 @@
14177
14512
  Ripple
14178
14513
  },
14179
14514
  props: {
14515
+ ...makeComponentProps(),
14180
14516
  ...makeVExpansionPanelTitleProps()
14181
14517
  },
14182
14518
  setup(props, _ref) {
@@ -14199,8 +14535,8 @@
14199
14535
  useRender(() => vue.withDirectives(vue.createVNode("button", {
14200
14536
  "class": ['v-expansion-panel-title', {
14201
14537
  'v-expansion-panel-title--active': expansionPanel.isSelected.value
14202
- }, backgroundColorClasses.value],
14203
- "style": backgroundColorStyles.value,
14538
+ }, backgroundColorClasses.value, props.class],
14539
+ "style": [backgroundColorStyles.value, props.style],
14204
14540
  "type": "button",
14205
14541
  "tabindex": expansionPanel.disabled.value ? -1 : undefined,
14206
14542
  "disabled": expansionPanel.disabled.value,
@@ -14220,6 +14556,7 @@
14220
14556
  const VExpansionPanelText = genericComponent()({
14221
14557
  name: 'VExpansionPanelText',
14222
14558
  props: {
14559
+ ...makeComponentProps(),
14223
14560
  ...makeLazyProps()
14224
14561
  },
14225
14562
  setup(props, _ref) {
@@ -14236,7 +14573,8 @@
14236
14573
  "onAfterLeave": onAfterLeave
14237
14574
  }, {
14238
14575
  default: () => [vue.withDirectives(vue.createVNode("div", {
14239
- "class": "v-expansion-panel-text"
14576
+ "class": ['v-expansion-panel-text', props.class],
14577
+ "style": props.style
14240
14578
  }, [slots.default && hasContent.value && vue.createVNode("div", {
14241
14579
  "class": "v-expansion-panel-text__wrapper"
14242
14580
  }, [slots.default?.()])]), [[vue.vShow, expansionPanel.isSelected.value]])]
@@ -14251,6 +14589,7 @@
14251
14589
  title: String,
14252
14590
  text: String,
14253
14591
  bgColor: String,
14592
+ ...makeComponentProps(),
14254
14593
  ...makeElevationProps(),
14255
14594
  ...makeGroupItemProps(),
14256
14595
  ...makeLazyProps(),
@@ -14299,8 +14638,8 @@
14299
14638
  'v-expansion-panel--before-active': isBeforeSelected.value,
14300
14639
  'v-expansion-panel--after-active': isAfterSelected.value,
14301
14640
  'v-expansion-panel--disabled': isDisabled.value
14302
- }, roundedClasses.value, backgroundColorClasses.value],
14303
- "style": backgroundColorStyles.value,
14641
+ }, roundedClasses.value, backgroundColorClasses.value, props.class],
14642
+ "style": [backgroundColorStyles.value, props.style],
14304
14643
  "aria-expanded": groupItem.isSelected.value
14305
14644
  }, {
14306
14645
  default: () => [vue.createVNode("div", {
@@ -14450,7 +14789,8 @@
14450
14789
  "ref": vInputRef,
14451
14790
  "modelValue": model.value,
14452
14791
  "onUpdate:modelValue": $event => model.value = $event,
14453
- "class": "v-file-input",
14792
+ "class": ['v-file-input', props.class],
14793
+ "style": props.style,
14454
14794
  "onClick:prepend": onClickPrepend
14455
14795
  }, rootAttrs, inputProps, {
14456
14796
  "focused": isFocused.value
@@ -14542,6 +14882,7 @@
14542
14882
  default: 'auto'
14543
14883
  },
14544
14884
  ...makeBorderProps(),
14885
+ ...makeComponentProps(),
14545
14886
  ...makeElevationProps(),
14546
14887
  ...makeLayoutItemProps(),
14547
14888
  ...makeRoundedProps(),
@@ -14591,8 +14932,8 @@
14591
14932
  });
14592
14933
  useRender(() => vue.createVNode(props.tag, {
14593
14934
  "ref": resizeRef,
14594
- "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
14595
- "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined]
14935
+ "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
14936
+ "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined, props.style]
14596
14937
  }, slots));
14597
14938
  return {};
14598
14939
  }
@@ -14603,6 +14944,7 @@
14603
14944
  const VForm = genericComponent()({
14604
14945
  name: 'VForm',
14605
14946
  props: {
14947
+ ...makeComponentProps(),
14606
14948
  ...makeFormProps()
14607
14949
  },
14608
14950
  emits: {
@@ -14641,7 +14983,8 @@
14641
14983
  }
14642
14984
  useRender(() => vue.createVNode("form", {
14643
14985
  "ref": formRef,
14644
- "class": "v-form",
14986
+ "class": ['v-form', props.class],
14987
+ "style": props.style,
14645
14988
  "novalidate": true,
14646
14989
  "onReset": onReset,
14647
14990
  "onSubmit": onSubmit
@@ -14657,6 +15000,7 @@
14657
15000
  type: Boolean,
14658
15001
  default: false
14659
15002
  },
15003
+ ...makeComponentProps(),
14660
15004
  ...makeTagProps()
14661
15005
  },
14662
15006
  setup(props, _ref) {
@@ -14666,7 +15010,8 @@
14666
15010
  useRender(() => vue.createVNode(props.tag, {
14667
15011
  "class": ['v-container', {
14668
15012
  'v-container--fluid': props.fluid
14669
- }]
15013
+ }, props.class],
15014
+ "style": props.style
14670
15015
  }, slots));
14671
15016
  return {};
14672
15017
  }
@@ -14757,6 +15102,7 @@
14757
15102
  default: null,
14758
15103
  validator: str => ALIGN_SELF_VALUES.includes(str)
14759
15104
  },
15105
+ ...makeComponentProps(),
14760
15106
  ...makeTagProps()
14761
15107
  },
14762
15108
  setup(props, _ref) {
@@ -14787,7 +15133,8 @@
14787
15133
  return classList;
14788
15134
  });
14789
15135
  return () => vue.h(props.tag, {
14790
- class: classes.value
15136
+ class: [classes.value, props.class],
15137
+ style: props.style
14791
15138
  }, slots.default?.());
14792
15139
  }
14793
15140
  });
@@ -14873,6 +15220,7 @@
14873
15220
  validator: alignContentValidator
14874
15221
  },
14875
15222
  ...alignContentProps,
15223
+ ...makeComponentProps(),
14876
15224
  ...makeTagProps()
14877
15225
  },
14878
15226
  setup(props, _ref) {
@@ -14901,7 +15249,8 @@
14901
15249
  return classList;
14902
15250
  });
14903
15251
  return () => vue.h(props.tag, {
14904
- class: ['v-row', classes.value]
15252
+ class: ['v-row', classes.value, props.class],
15253
+ style: props.style
14905
15254
  }, slots.default?.());
14906
15255
  }
14907
15256
  });
@@ -14945,6 +15294,7 @@
14945
15294
  const VItemGroup = genericComponent()({
14946
15295
  name: 'VItemGroup',
14947
15296
  props: {
15297
+ ...makeComponentProps(),
14948
15298
  ...makeGroupProps({
14949
15299
  selectedClass: 'v-item--selected'
14950
15300
  }),
@@ -14969,7 +15319,8 @@
14969
15319
  selected
14970
15320
  } = useGroup(props, VItemGroupSymbol);
14971
15321
  return () => vue.createVNode(props.tag, {
14972
- "class": ['v-item-group', themeClasses.value]
15322
+ "class": ['v-item-group', themeClasses.value, props.class],
15323
+ "style": props.style
14973
15324
  }, {
14974
15325
  default: () => [slots.default?.({
14975
15326
  isSelected,
@@ -15019,7 +15370,10 @@
15019
15370
 
15020
15371
  const VLayout = genericComponent()({
15021
15372
  name: 'VLayout',
15022
- props: makeLayoutProps(),
15373
+ props: {
15374
+ ...makeComponentProps(),
15375
+ ...makeLayoutProps()
15376
+ },
15023
15377
  setup(props, _ref) {
15024
15378
  let {
15025
15379
  slots
@@ -15033,8 +15387,8 @@
15033
15387
  } = createLayout(props);
15034
15388
  useRender(() => vue.createVNode("div", {
15035
15389
  "ref": layoutRef,
15036
- "class": layoutClasses.value,
15037
- "style": layoutStyles.value
15390
+ "class": [layoutClasses.value, props.class],
15391
+ "style": [layoutStyles.value, props.style]
15038
15392
  }, [slots.default?.()]));
15039
15393
  return {
15040
15394
  getLayoutItem,
@@ -15057,6 +15411,7 @@
15057
15411
  default: 300
15058
15412
  },
15059
15413
  modelValue: Boolean,
15414
+ ...makeComponentProps(),
15060
15415
  ...makeLayoutItemProps()
15061
15416
  },
15062
15417
  setup(props, _ref) {
@@ -15075,8 +15430,8 @@
15075
15430
  absolute: vue.toRef(props, 'absolute')
15076
15431
  });
15077
15432
  return () => vue.createVNode("div", {
15078
- "class": ['v-layout-item'],
15079
- "style": layoutItemStyles.value
15433
+ "class": ['v-layout-item', props.class],
15434
+ "style": [layoutItemStyles.value, props.style]
15080
15435
  }, [slots.default?.()]);
15081
15436
  }
15082
15437
  });
@@ -15100,6 +15455,7 @@
15100
15455
  threshold: undefined
15101
15456
  })
15102
15457
  },
15458
+ ...makeComponentProps(),
15103
15459
  ...makeDimensionProps(),
15104
15460
  ...makeTagProps(),
15105
15461
  ...makeTransitionProps({
@@ -15122,8 +15478,8 @@
15122
15478
  isActive.value = isIntersecting;
15123
15479
  }
15124
15480
  useRender(() => vue.withDirectives(vue.createVNode(props.tag, {
15125
- "class": "v-lazy",
15126
- "style": dimensionStyles.value
15481
+ "class": ['v-lazy', props.class],
15482
+ "style": [dimensionStyles.value, props.style]
15127
15483
  }, {
15128
15484
  default: () => [isActive.value && vue.createVNode(MaybeTransition, {
15129
15485
  "transition": props.transition,
@@ -15148,7 +15504,8 @@
15148
15504
  rtl: {
15149
15505
  type: Boolean,
15150
15506
  default: undefined
15151
- }
15507
+ },
15508
+ ...makeComponentProps()
15152
15509
  },
15153
15510
  setup(props, _ref) {
15154
15511
  let {
@@ -15158,7 +15515,8 @@
15158
15515
  rtlClasses
15159
15516
  } = provideLocale(props);
15160
15517
  useRender(() => vue.createVNode("div", {
15161
- "class": ['v-locale-provider', rtlClasses.value]
15518
+ "class": ['v-locale-provider', rtlClasses.value, props.class],
15519
+ "style": props.style
15162
15520
  }, [slots.default?.()]));
15163
15521
  return {};
15164
15522
  }
@@ -15168,6 +15526,7 @@
15168
15526
  name: 'VMain',
15169
15527
  props: {
15170
15528
  scrollable: Boolean,
15529
+ ...makeComponentProps(),
15171
15530
  ...makeTagProps({
15172
15531
  tag: 'main'
15173
15532
  })
@@ -15185,8 +15544,8 @@
15185
15544
  useRender(() => vue.createVNode(props.tag, {
15186
15545
  "class": ['v-main', {
15187
15546
  'v-main--scrollable': props.scrollable
15188
- }],
15189
- "style": [mainStyles.value, ssrBootStyles.value]
15547
+ }, props.class],
15548
+ "style": [mainStyles.value, ssrBootStyles.value, props.style]
15190
15549
  }, {
15191
15550
  default: () => [props.scrollable ? vue.createVNode("div", {
15192
15551
  "class": "v-main__scroller"
@@ -15532,6 +15891,7 @@
15532
15891
  },
15533
15892
  sticky: Boolean,
15534
15893
  ...makeBorderProps(),
15894
+ ...makeComponentProps(),
15535
15895
  ...makeElevationProps(),
15536
15896
  ...makeLayoutItemProps(),
15537
15897
  ...makeRoundedProps(),
@@ -15683,8 +16043,8 @@
15683
16043
  'v-navigation-drawer--temporary': isTemporary.value,
15684
16044
  'v-navigation-drawer--active': isActive.value,
15685
16045
  'v-navigation-drawer--sticky': isSticky.value
15686
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
15687
- "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value]
16046
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
16047
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
15688
16048
  }, attrs), {
15689
16049
  default: () => [hasImage && vue.createVNode("div", {
15690
16050
  "key": "image",
@@ -15813,6 +16173,7 @@
15813
16173
  },
15814
16174
  showFirstLastPage: Boolean,
15815
16175
  ...makeBorderProps(),
16176
+ ...makeComponentProps(),
15816
16177
  ...makeDensityProps(),
15817
16178
  ...makeElevationProps(),
15818
16179
  ...makeRoundedProps(),
@@ -16009,7 +16370,8 @@
16009
16370
  }
16010
16371
  useRender(() => vue.createVNode(props.tag, {
16011
16372
  "ref": resizeRef,
16012
- "class": ['v-pagination', themeClasses.value],
16373
+ "class": ['v-pagination', themeClasses.value, props.class],
16374
+ "style": props.style,
16013
16375
  "role": "navigation",
16014
16376
  "aria-label": t(props.ariaLabel),
16015
16377
  "onKeydown": onKeydown,
@@ -16068,7 +16430,8 @@
16068
16430
  scale: {
16069
16431
  type: [Number, String],
16070
16432
  default: 0.5
16071
- }
16433
+ },
16434
+ ...makeComponentProps()
16072
16435
  },
16073
16436
  setup(props, _ref) {
16074
16437
  let {
@@ -16130,7 +16493,8 @@
16130
16493
  useRender(() => vue.createVNode(VImg, {
16131
16494
  "class": ['v-parallax', {
16132
16495
  'v-parallax--active': isIntersecting.value
16133
- }],
16496
+ }, props.class],
16497
+ "style": props.style,
16134
16498
  "ref": root,
16135
16499
  "cover": true,
16136
16500
  "onLoadstart": onScroll,
@@ -16155,7 +16519,8 @@
16155
16519
  slots
16156
16520
  } = _ref;
16157
16521
  useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
16158
- "class": "v-radio",
16522
+ "class": ['v-radio', props.class],
16523
+ "style": props.style,
16159
16524
  "type": "radio"
16160
16525
  }), slots));
16161
16526
  return {};
@@ -16209,7 +16574,8 @@
16209
16574
  }
16210
16575
  }) : props.label;
16211
16576
  return vue.createVNode(VInput, vue.mergeProps({
16212
- "class": "v-radio-group"
16577
+ "class": ['v-radio-group', props.class],
16578
+ "style": props.style
16213
16579
  }, inputAttrs, inputProps, {
16214
16580
  "modelValue": model.value,
16215
16581
  "onUpdate:modelValue": $event => model.value = $event,
@@ -16265,11 +16631,14 @@
16265
16631
  },
16266
16632
  emits: {
16267
16633
  'update:focused': value => true,
16268
- 'update:modelValue': value => true
16634
+ 'update:modelValue': value => true,
16635
+ end: value => true,
16636
+ start: value => true
16269
16637
  },
16270
16638
  setup(props, _ref) {
16271
16639
  let {
16272
- slots
16640
+ slots,
16641
+ emit
16273
16642
  } = _ref;
16274
16643
  const startThumbRef = vue.ref();
16275
16644
  const stopThumbRef = vue.ref();
@@ -16282,6 +16651,11 @@
16282
16651
  const b = Math.abs(stopOffset);
16283
16652
  return a < b || a === b && startOffset < 0 ? startThumbRef.value.$el : stopThumbRef.value.$el;
16284
16653
  }
16654
+ const steps = useSteps(props);
16655
+ const model = useProxiedModel(props, 'modelValue', undefined, arr => {
16656
+ if (!arr?.length) return [0, 0];
16657
+ return arr.map(value => steps.roundValue(value));
16658
+ });
16285
16659
  const {
16286
16660
  activeThumbRef,
16287
16661
  hasLabels,
@@ -16291,34 +16665,37 @@
16291
16665
  onSliderMousedown,
16292
16666
  onSliderTouchstart,
16293
16667
  position,
16294
- roundValue,
16295
16668
  trackContainerRef
16296
16669
  } = useSlider({
16297
- /* eslint-disable @typescript-eslint/no-use-before-define */
16298
16670
  props,
16299
- handleSliderMouseUp: newValue => {
16300
- model.value = activeThumbRef.value === startThumbRef.value?.$el ? [newValue, model.value[1]] : [model.value[0], newValue];
16671
+ steps,
16672
+ onSliderStart: () => {
16673
+ emit('start', model.value);
16674
+ },
16675
+ onSliderEnd: _ref2 => {
16676
+ let {
16677
+ value
16678
+ } = _ref2;
16679
+ const newValue = activeThumbRef.value === startThumbRef.value?.$el ? [value, model.value[1]] : [model.value[0], value];
16680
+ model.value = newValue;
16681
+ emit('end', newValue);
16301
16682
  },
16302
- handleMouseMove: newValue => {
16683
+ onSliderMove: _ref3 => {
16684
+ let {
16685
+ value
16686
+ } = _ref3;
16303
16687
  const [start, stop] = model.value;
16304
16688
  if (!props.strict && start === stop && start !== min.value) {
16305
- activeThumbRef.value = newValue > start ? stopThumbRef.value?.$el : startThumbRef.value?.$el;
16689
+ activeThumbRef.value = value > start ? stopThumbRef.value?.$el : startThumbRef.value?.$el;
16306
16690
  activeThumbRef.value?.focus();
16307
16691
  }
16308
16692
  if (activeThumbRef.value === startThumbRef.value?.$el) {
16309
- model.value = [Math.min(newValue, stop), stop];
16693
+ model.value = [Math.min(value, stop), stop];
16310
16694
  } else {
16311
- model.value = [start, Math.max(start, newValue)];
16695
+ model.value = [start, Math.max(start, value)];
16312
16696
  }
16313
16697
  },
16314
16698
  getActiveThumb
16315
- /* eslint-enable @typescript-eslint/no-use-before-define */
16316
- });
16317
-
16318
- const model = useProxiedModel(props, 'modelValue', undefined, arr => {
16319
- // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
16320
- if (!arr || !arr.length) return [0, 0];
16321
- return arr.map(value => roundValue(value));
16322
16699
  });
16323
16700
  const {
16324
16701
  isFocused,
@@ -16336,7 +16713,8 @@
16336
16713
  'v-slider--focused': isFocused.value,
16337
16714
  'v-slider--pressed': mousePressed.value,
16338
16715
  'v-slider--disabled': props.disabled
16339
- }],
16716
+ }, props.class],
16717
+ "style": props.style,
16340
16718
  "ref": inputRef
16341
16719
  }, inputProps, {
16342
16720
  "focused": isFocused.value
@@ -16346,11 +16724,11 @@
16346
16724
  "class": "v-slider__label",
16347
16725
  "text": props.label
16348
16726
  }, null) : undefined, slots.prepend?.(slotProps)]) : undefined,
16349
- default: _ref2 => {
16727
+ default: _ref4 => {
16350
16728
  let {
16351
16729
  id,
16352
16730
  messagesId
16353
- } = _ref2;
16731
+ } = _ref4;
16354
16732
  return vue.createVNode("div", {
16355
16733
  "class": "v-slider__container",
16356
16734
  "onMousedown": onSliderMousedown,
@@ -16479,6 +16857,7 @@
16479
16857
  validator: v => ['top', 'bottom'].includes(v)
16480
16858
  },
16481
16859
  ripple: Boolean,
16860
+ ...makeComponentProps(),
16482
16861
  ...makeDensityProps(),
16483
16862
  ...makeSizeProps(),
16484
16863
  ...makeTagProps(),
@@ -16502,9 +16881,6 @@
16502
16881
  const range = vue.computed(() => createRange(Number(props.length), 1));
16503
16882
  const increments = vue.computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]));
16504
16883
  const hoverIndex = vue.ref(-1);
16505
- const focusIndex = vue.ref(-1);
16506
- const firstRef = vue.ref();
16507
- let isClicking = false;
16508
16884
  const itemState = vue.computed(() => increments.value.map(value => {
16509
16885
  const isHovering = props.hover && hoverIndex.value > -1;
16510
16886
  const isFilled = normalizedValue.value >= value;
@@ -16527,16 +16903,6 @@
16527
16903
  function onMouseleave() {
16528
16904
  hoverIndex.value = -1;
16529
16905
  }
16530
- function onFocus() {
16531
- if (value === 0 && normalizedValue.value === 0) {
16532
- firstRef.value?.focus();
16533
- } else {
16534
- focusIndex.value = value;
16535
- }
16536
- }
16537
- function onBlur() {
16538
- if (!isClicking) focusIndex.value = -1;
16539
- }
16540
16906
  function onClick() {
16541
16907
  if (props.disabled || props.readonly) return;
16542
16908
  rating.value = normalizedValue.value === value && props.clearable ? 0 : value;
@@ -16544,17 +16910,9 @@
16544
16910
  return {
16545
16911
  onMouseenter: props.hover ? onMouseenter : undefined,
16546
16912
  onMouseleave: props.hover ? onMouseleave : undefined,
16547
- onFocus,
16548
- onBlur,
16549
16913
  onClick
16550
16914
  };
16551
16915
  }));
16552
- function onMousedown() {
16553
- isClicking = true;
16554
- }
16555
- function onMouseup() {
16556
- isClicking = false;
16557
- }
16558
16916
  const name = vue.computed(() => props.name ?? `v-rating-${getUid()}`);
16559
16917
  function VRatingItem(_ref2) {
16560
16918
  let {
@@ -16565,8 +16923,6 @@
16565
16923
  const {
16566
16924
  onMouseenter,
16567
16925
  onMouseleave,
16568
- onFocus,
16569
- onBlur,
16570
16926
  onClick
16571
16927
  } = eventState.value[index + 1];
16572
16928
  const id = `${name.value}-${String(value).replace('.', '-')}`;
@@ -16577,7 +16933,6 @@
16577
16933
  icon: itemState.value[index]?.icon,
16578
16934
  ripple: props.ripple,
16579
16935
  size: props.size,
16580
- tag: 'span',
16581
16936
  variant: 'plain'
16582
16937
  };
16583
16938
  return vue.createVNode(vue.Fragment, null, [vue.createVNode("label", {
@@ -16586,17 +16941,17 @@
16586
16941
  'v-rating__item--half': props.halfIncrements && value % 1 > 0,
16587
16942
  'v-rating__item--full': props.halfIncrements && value % 1 === 0
16588
16943
  },
16589
- "onMousedown": onMousedown,
16590
- "onMouseup": onMouseup,
16591
16944
  "onMouseenter": onMouseenter,
16592
- "onMouseleave": onMouseleave
16945
+ "onMouseleave": onMouseleave,
16946
+ "onClick": onClick
16593
16947
  }, [vue.createVNode("span", {
16594
16948
  "class": "v-rating__hidden"
16595
16949
  }, [t(props.itemAriaLabel, value, props.length)]), !showStar ? undefined : slots.item ? slots.item({
16596
16950
  ...itemState.value[index],
16597
16951
  props: btnProps,
16598
16952
  value,
16599
- index
16953
+ index,
16954
+ rating: normalizedValue.value
16600
16955
  }) : vue.createVNode(VBtn, btnProps, null)]), vue.createVNode("input", {
16601
16956
  "class": "v-rating__hidden",
16602
16957
  "name": name.value,
@@ -16604,10 +16959,7 @@
16604
16959
  "type": "radio",
16605
16960
  "value": value,
16606
16961
  "checked": normalizedValue.value === value,
16607
- "onClick": onClick,
16608
- "onFocus": onFocus,
16609
- "onBlur": onBlur,
16610
- "ref": index === 0 ? firstRef : undefined,
16962
+ "tabindex": -1,
16611
16963
  "readonly": props.readonly,
16612
16964
  "disabled": props.disabled
16613
16965
  }, null)]);
@@ -16623,7 +16975,8 @@
16623
16975
  "class": ['v-rating', {
16624
16976
  'v-rating--hover': props.hover,
16625
16977
  'v-rating--readonly': props.readonly
16626
- }, themeClasses.value]
16978
+ }, themeClasses.value, props.class],
16979
+ "style": props.style
16627
16980
  }, {
16628
16981
  default: () => [vue.createVNode(VRatingItem, {
16629
16982
  "value": 0,
@@ -16636,9 +16989,7 @@
16636
16989
  index: i,
16637
16990
  label: props.itemLabels?.[i]
16638
16991
  }) : undefined, vue.createVNode("div", {
16639
- "class": ['v-rating__item', {
16640
- 'v-rating__item--focused': Math.ceil(focusIndex.value) === value
16641
- }]
16992
+ "class": "v-rating__item"
16642
16993
  }, [props.halfIncrements ? vue.createVNode(vue.Fragment, null, [vue.createVNode(VRatingItem, {
16643
16994
  "value": value - 0.5,
16644
16995
  "index": i * 2
@@ -16725,6 +17076,7 @@
16725
17076
  type: [Boolean, String],
16726
17077
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
16727
17078
  },
17079
+ ...makeComponentProps(),
16728
17080
  ...makeTagProps(),
16729
17081
  ...makeGroupProps({
16730
17082
  selectedClass: 'v-slide-group-item--active'
@@ -16965,7 +17317,8 @@
16965
17317
  'v-slide-group--vertical': !isHorizontal.value,
16966
17318
  'v-slide-group--has-affixes': hasAffixes.value,
16967
17319
  'v-slide-group--is-overflowing': isOverflowing.value
16968
- }],
17320
+ }, props.class],
17321
+ "style": props.style,
16969
17322
  "tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
16970
17323
  "onFocus": onFocus
16971
17324
  }, {
@@ -17115,7 +17468,8 @@
17115
17468
  'v-snackbar--active': isActive.value,
17116
17469
  'v-snackbar--multi-line': props.multiLine && !props.vertical,
17117
17470
  'v-snackbar--vertical': props.vertical
17118
- }, positionClasses.value]
17471
+ }, positionClasses.value, props.class],
17472
+ "style": props.style
17119
17473
  }, overlayProps, {
17120
17474
  "modelValue": isActive.value,
17121
17475
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -17215,7 +17569,8 @@
17215
17569
  'v-switch--inset': props.inset
17216
17570
  }, {
17217
17571
  'v-switch--indeterminate': indeterminate.value
17218
- }, loaderClasses.value]
17572
+ }, loaderClasses.value, props.class],
17573
+ "style": props.style
17219
17574
  }, inputAttrs, inputProps, {
17220
17575
  "id": id.value,
17221
17576
  "focused": isFocused.value
@@ -17284,6 +17639,7 @@
17284
17639
  color: String,
17285
17640
  height: [Number, String],
17286
17641
  window: Boolean,
17642
+ ...makeComponentProps(),
17287
17643
  ...makeElevationProps(),
17288
17644
  ...makeLayoutItemProps(),
17289
17645
  ...makeRoundedProps(),
@@ -17325,8 +17681,8 @@
17325
17681
  useRender(() => vue.createVNode(props.tag, {
17326
17682
  "class": ['v-system-bar', {
17327
17683
  'v-system-bar--window': props.window
17328
- }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value],
17329
- "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value]
17684
+ }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value, props.class],
17685
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, props.style]
17330
17686
  }, slots));
17331
17687
  return {};
17332
17688
  }
@@ -17338,7 +17694,6 @@
17338
17694
  name: 'VTab',
17339
17695
  props: {
17340
17696
  fixed: Boolean,
17341
- title: String,
17342
17697
  sliderColor: String,
17343
17698
  hideSlider: Boolean,
17344
17699
  direction: {
@@ -17400,10 +17755,10 @@
17400
17755
  useRender(() => {
17401
17756
  const [btnProps] = VBtn.filterProps(props);
17402
17757
  return vue.createVNode(VBtn, vue.mergeProps({
17403
- "_as": "VTab",
17404
17758
  "symbol": VTabsSymbol,
17405
17759
  "ref": rootEl,
17406
- "class": ['v-tab'],
17760
+ "class": ['v-tab', props.class],
17761
+ "style": props.style,
17407
17762
  "tabindex": isSelected.value ? 0 : -1,
17408
17763
  "role": "tab",
17409
17764
  "aria-selected": String(isSelected.value),
@@ -17414,7 +17769,7 @@
17414
17769
  }, btnProps, attrs, {
17415
17770
  "onGroup:selected": updateSlider
17416
17771
  }), {
17417
- default: () => [slots.default ? slots.default() : props.title, !props.hideSlider && vue.createVNode("div", {
17772
+ default: () => [slots.default?.() ?? props.text, !props.hideSlider && vue.createVNode("div", {
17418
17773
  "ref": sliderEl,
17419
17774
  "class": ['v-tab__slider', sliderColorClasses.value],
17420
17775
  "style": sliderColorStyles.value
@@ -17498,10 +17853,10 @@
17498
17853
  'v-tabs--fixed-tabs': props.fixedTabs,
17499
17854
  'v-tabs--grow': props.grow,
17500
17855
  'v-tabs--stacked': props.stacked
17501
- }, densityClasses.value, backgroundColorClasses.value],
17856
+ }, densityClasses.value, backgroundColorClasses.value, props.class],
17502
17857
  "style": [{
17503
17858
  '--v-tabs-height': convertToUnit(props.height)
17504
- }, backgroundColorStyles.value],
17859
+ }, backgroundColorStyles.value, props.style],
17505
17860
  "role": "tablist",
17506
17861
  "symbol": VTabsSymbol
17507
17862
  }), {
@@ -17521,6 +17876,7 @@
17521
17876
  fixedFooter: Boolean,
17522
17877
  height: [Number, String],
17523
17878
  hover: Boolean,
17879
+ ...makeComponentProps(),
17524
17880
  ...makeDensityProps(),
17525
17881
  ...makeTagProps(),
17526
17882
  ...makeThemeProps()
@@ -17543,7 +17899,8 @@
17543
17899
  'v-table--has-top': !!slots.top,
17544
17900
  'v-table--has-bottom': !!slots.bottom,
17545
17901
  'v-table--hover': props.hover
17546
- }, themeClasses.value, densityClasses.value]
17902
+ }, themeClasses.value, densityClasses.value, props.class],
17903
+ "style": props.style
17547
17904
  }, {
17548
17905
  default: () => [slots.top?.(), slots.default ? vue.createVNode("div", {
17549
17906
  "class": "v-table__wrapper",
@@ -17708,7 +18065,8 @@
17708
18065
  'v-textarea--auto-grow': props.autoGrow,
17709
18066
  'v-textarea--no-resize': props.noResize || props.autoGrow,
17710
18067
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
17711
- }]
18068
+ }, props.class],
18069
+ "style": props.style
17712
18070
  }, rootAttrs, inputProps, {
17713
18071
  "focused": isFocused.value
17714
18072
  }), {
@@ -17792,6 +18150,7 @@
17792
18150
  name: 'VThemeProvider',
17793
18151
  props: {
17794
18152
  withBackground: Boolean,
18153
+ ...makeComponentProps(),
17795
18154
  ...makeThemeProps(),
17796
18155
  ...makeTagProps()
17797
18156
  },
@@ -17805,7 +18164,8 @@
17805
18164
  return () => {
17806
18165
  if (!props.withBackground) return slots.default?.();
17807
18166
  return vue.createVNode(props.tag, {
17808
- "class": ['v-theme-provider', themeClasses.value]
18167
+ "class": ['v-theme-provider', themeClasses.value, props.class],
18168
+ "style": props.style
17809
18169
  }, {
17810
18170
  default: () => [slots.default?.()]
17811
18171
  });
@@ -17850,6 +18210,7 @@
17850
18210
  type: String,
17851
18211
  validator: v => ['start', 'end', 'both'].includes(v)
17852
18212
  },
18213
+ ...makeComponentProps(),
17853
18214
  ...makeDensityProps(),
17854
18215
  ...makeTagProps(),
17855
18216
  ...makeThemeProps()
@@ -17893,10 +18254,10 @@
17893
18254
  useRender(() => vue.createVNode(props.tag, {
17894
18255
  "class": ['v-timeline', `v-timeline--${props.direction}`, `v-timeline--align-${props.align}`, `v-timeline--justify-${props.justify}`, truncateClasses.value, {
17895
18256
  'v-timeline--inset-line': !!props.lineInset
17896
- }, themeClasses.value, densityClasses.value, sideClasses.value],
17897
- "style": {
18257
+ }, themeClasses.value, densityClasses.value, sideClasses.value, props.class],
18258
+ "style": [{
17898
18259
  '--v-timeline-line-thickness': convertToUnit(props.lineThickness)
17899
- }
18260
+ }, props.style]
17900
18261
  }, slots));
17901
18262
  return {};
17902
18263
  }
@@ -17911,6 +18272,7 @@
17911
18272
  icon: IconValue,
17912
18273
  iconColor: String,
17913
18274
  lineColor: String,
18275
+ ...makeComponentProps(),
17914
18276
  ...makeRoundedProps(),
17915
18277
  ...makeSizeProps(),
17916
18278
  ...makeElevationProps()
@@ -17940,7 +18302,8 @@
17940
18302
  useRender(() => vue.createVNode("div", {
17941
18303
  "class": ['v-timeline-divider', {
17942
18304
  'v-timeline-divider--fill-dot': props.fillDot
17943
- }]
18305
+ }, props.class],
18306
+ "style": props.style
17944
18307
  }, [vue.createVNode("div", {
17945
18308
  "class": ['v-timeline-divider__before', lineColorClasses.value],
17946
18309
  "style": lineColorStyles.value
@@ -17990,11 +18353,12 @@
17990
18353
  icon: IconValue,
17991
18354
  iconColor: String,
17992
18355
  lineInset: [Number, String],
17993
- ...makeRoundedProps(),
18356
+ ...makeComponentProps(),
18357
+ ...makeDimensionProps(),
17994
18358
  ...makeElevationProps(),
18359
+ ...makeRoundedProps(),
17995
18360
  ...makeSizeProps(),
17996
- ...makeTagProps(),
17997
- ...makeDimensionProps()
18361
+ ...makeTagProps()
17998
18362
  },
17999
18363
  setup(props, _ref) {
18000
18364
  let {
@@ -18014,11 +18378,11 @@
18014
18378
  useRender(() => vue.createVNode("div", {
18015
18379
  "class": ['v-timeline-item', {
18016
18380
  'v-timeline-item--fill-dot': props.fillDot
18017
- }],
18018
- "style": {
18381
+ }, props.class],
18382
+ "style": [{
18019
18383
  '--v-timeline-dot-size': convertToUnit(dotSize.value),
18020
18384
  '--v-timeline-line-inset': props.lineInset ? `calc(var(--v-timeline-dot-size) / 2 + ${convertToUnit(props.lineInset)})` : convertToUnit(0)
18021
- }
18385
+ }, props.style]
18022
18386
  }, [vue.createVNode("div", {
18023
18387
  "class": "v-timeline-item__body",
18024
18388
  "style": dimensionStyles.value
@@ -18052,6 +18416,7 @@
18052
18416
  closeOnBack: false,
18053
18417
  location: 'end',
18054
18418
  locationStrategy: 'connected',
18419
+ eager: true,
18055
18420
  minWidth: 0,
18056
18421
  offset: 10,
18057
18422
  openOnClick: false,
@@ -18060,7 +18425,7 @@
18060
18425
  scrim: false,
18061
18426
  scrollStrategy: 'reposition',
18062
18427
  transition: false
18063
- }), ['absolute', 'persistent', 'eager'])
18428
+ }), ['absolute', 'persistent'])
18064
18429
  },
18065
18430
  emits: {
18066
18431
  'update:modelValue': value => true
@@ -18093,7 +18458,8 @@
18093
18458
  const [overlayProps] = VOverlay.filterProps(props);
18094
18459
  return vue.createVNode(VOverlay, vue.mergeProps({
18095
18460
  "ref": overlay,
18096
- "class": ['v-tooltip'],
18461
+ "class": ['v-tooltip', props.class],
18462
+ "style": props.style,
18097
18463
  "id": id.value
18098
18464
  }, overlayProps, {
18099
18465
  "modelValue": isActive.value,
@@ -18104,7 +18470,6 @@
18104
18470
  "origin": origin.value,
18105
18471
  "persistent": true,
18106
18472
  "role": "tooltip",
18107
- "eager": true,
18108
18473
  "activatorProps": activatorProps.value,
18109
18474
  "_disableGlobalStack": true
18110
18475
  }, scopeId), {
@@ -18139,66 +18504,236 @@
18139
18504
  }
18140
18505
  });
18141
18506
 
18142
- const VDataTableColumn = defineFunctionalComponent({
18143
- align: {
18144
- type: String,
18145
- default: 'start'
18507
+ const VVirtualScrollItem = genericComponent()({
18508
+ name: 'VVirtualScrollItem',
18509
+ props: {
18510
+ dynamicHeight: Boolean,
18511
+ ...makeComponentProps()
18146
18512
  },
18147
- fixed: Boolean,
18148
- fixedOffset: [Number, String],
18149
- height: [Number, String],
18150
- lastFixed: Boolean,
18151
- noPadding: Boolean,
18152
- tag: String,
18153
- width: [Number, String]
18154
- }, (props, _ref) => {
18155
- let {
18156
- slots,
18157
- attrs
18158
- } = _ref;
18159
- const Tag = props.tag ?? 'td';
18160
- return vue.createVNode(Tag, vue.mergeProps({
18161
- "class": ['v-data-table__td', {
18162
- 'v-data-table-column--fixed': props.fixed,
18163
- 'v-data-table-column--last-fixed': props.lastFixed,
18164
- 'v-data-table-column--no-padding': props.noPadding
18165
- }, `v-data-table-column--align-${props.align}`],
18166
- "style": {
18167
- height: convertToUnit(props.height),
18168
- width: convertToUnit(props.width),
18169
- left: convertToUnit(props.fixedOffset || null)
18513
+ emits: {
18514
+ 'update:height': height => true
18515
+ },
18516
+ setup(props, _ref) {
18517
+ let {
18518
+ emit,
18519
+ slots
18520
+ } = _ref;
18521
+ const {
18522
+ resizeRef,
18523
+ contentRect
18524
+ } = useResizeObserver();
18525
+ useToggleScope(() => props.dynamicHeight, () => {
18526
+ vue.watch(() => contentRect.value?.height, height => {
18527
+ if (height != null) emit('update:height', height);
18528
+ });
18529
+ });
18530
+ function updateHeight() {
18531
+ if (props.dynamicHeight && contentRect.value) {
18532
+ emit('update:height', contentRect.value.height);
18533
+ }
18170
18534
  }
18171
- }, attrs), {
18172
- default: () => [slots.default?.()]
18173
- });
18535
+ vue.onUpdated(updateHeight);
18536
+ useRender(() => vue.createVNode("div", {
18537
+ "ref": props.dynamicHeight ? resizeRef : undefined,
18538
+ "class": ['v-virtual-scroll__item', props.class],
18539
+ "style": props.style
18540
+ }, [slots.default?.()]));
18541
+ }
18174
18542
  });
18175
18543
 
18176
- // Utilities
18177
-
18178
18544
  // Types
18179
18545
 
18180
- const makeDataTableHeaderProps = propsFactory({
18181
- headers: {
18182
- type: Array,
18183
- default: () => []
18184
- }
18185
- }, 'v-data-table-header');
18186
- const VDataTableHeadersSymbol = Symbol.for('vuetify:data-table-headers');
18187
- function createHeaders(props, options) {
18188
- const headers = vue.ref([]);
18189
- const columns = vue.ref([]);
18190
- vue.watch(() => props.headers, () => {
18191
- const wrapped = !props.headers.length ? [] : Array.isArray(props.headers[0]) ? props.headers : [props.headers];
18192
- const flat = wrapped.flatMap((row, index) => row.map(column => ({
18193
- column,
18194
- row: index
18195
- })));
18196
- const rowCount = wrapped.length;
18197
- const defaultHeader = {
18198
- title: '',
18199
- sortable: false
18200
- };
18201
- const defaultActionHeader = {
18546
+ const UP$1 = -1;
18547
+ const DOWN$1 = 1;
18548
+ const VVirtualScroll = genericComponent()({
18549
+ name: 'VVirtualScroll',
18550
+ props: {
18551
+ items: {
18552
+ type: Array,
18553
+ default: () => []
18554
+ },
18555
+ itemHeight: [Number, String],
18556
+ ...makeComponentProps(),
18557
+ ...makeDimensionProps()
18558
+ },
18559
+ setup(props, _ref) {
18560
+ let {
18561
+ slots
18562
+ } = _ref;
18563
+ const first = vue.ref(0);
18564
+ const baseItemHeight = vue.ref(props.itemHeight);
18565
+ const itemHeight = vue.computed({
18566
+ get: () => parseInt(baseItemHeight.value ?? 0, 10),
18567
+ set(val) {
18568
+ baseItemHeight.value = val;
18569
+ }
18570
+ });
18571
+ const rootEl = vue.ref();
18572
+ const {
18573
+ resizeRef,
18574
+ contentRect
18575
+ } = useResizeObserver();
18576
+ vue.watchEffect(() => {
18577
+ resizeRef.value = rootEl.value;
18578
+ });
18579
+ const display = useDisplay();
18580
+ const sizeMap = new Map();
18581
+ let sizes = createRange(props.items.length).map(() => itemHeight.value);
18582
+ const visibleItems = vue.computed(() => {
18583
+ return Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
18584
+ });
18585
+ function handleItemResize(index, height) {
18586
+ itemHeight.value = Math.max(itemHeight.value, height);
18587
+ sizes[index] = height;
18588
+ sizeMap.set(props.items[index], height);
18589
+ }
18590
+ function calculateOffset(index) {
18591
+ return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0);
18592
+ }
18593
+ function calculateMidPointIndex(scrollTop) {
18594
+ const end = props.items.length;
18595
+ let middle = 0;
18596
+ let middleOffset = 0;
18597
+ while (middleOffset < scrollTop && middle < end) {
18598
+ middleOffset += sizes[middle++] || itemHeight.value;
18599
+ }
18600
+ return middle - 1;
18601
+ }
18602
+ let lastScrollTop = 0;
18603
+ function handleScroll() {
18604
+ if (!rootEl.value || !contentRect.value) return;
18605
+ const height = contentRect.value.height;
18606
+ const scrollTop = rootEl.value.scrollTop;
18607
+ const direction = scrollTop < lastScrollTop ? UP$1 : DOWN$1;
18608
+ const midPointIndex = calculateMidPointIndex(scrollTop + height / 2);
18609
+ const buffer = Math.round(visibleItems.value / 3);
18610
+ if (direction === UP$1 && midPointIndex <= first.value + buffer * 2 - 1) {
18611
+ first.value = clamp(midPointIndex - buffer, 0, props.items.length);
18612
+ } else if (direction === DOWN$1 && midPointIndex >= first.value + buffer * 2 - 1) {
18613
+ first.value = clamp(midPointIndex - buffer, 0, props.items.length - visibleItems.value);
18614
+ }
18615
+ lastScrollTop = rootEl.value.scrollTop;
18616
+ }
18617
+ function scrollToIndex(index) {
18618
+ if (!rootEl.value) return;
18619
+ const offset = calculateOffset(index);
18620
+ rootEl.value.scrollTop = offset;
18621
+ }
18622
+ const items = vue.computed(() => props.items.map((item, index) => ({
18623
+ raw: item,
18624
+ index
18625
+ })));
18626
+ const last = vue.computed(() => Math.min(props.items.length, first.value + visibleItems.value));
18627
+ const computedItems = vue.computed(() => items.value.slice(first.value, last.value));
18628
+ const paddingTop = vue.computed(() => calculateOffset(first.value));
18629
+ const paddingBottom = vue.computed(() => calculateOffset(props.items.length) - calculateOffset(last.value));
18630
+ const {
18631
+ dimensionStyles
18632
+ } = useDimension(props);
18633
+ vue.onMounted(() => {
18634
+ if (!itemHeight.value) {
18635
+ // If itemHeight prop is not set, then calculate an estimated height from the average of inital items
18636
+ itemHeight.value = sizes.slice(first.value, last.value).reduce((curr, height) => curr + height, 0) / visibleItems.value;
18637
+ }
18638
+ });
18639
+ vue.watch(() => props.items.length, () => {
18640
+ sizes = createRange(props.items.length).map(() => itemHeight.value);
18641
+ sizeMap.forEach((height, item) => {
18642
+ const index = props.items.indexOf(item);
18643
+ if (index === -1) {
18644
+ sizeMap.delete(item);
18645
+ } else {
18646
+ sizes[index] = height;
18647
+ }
18648
+ });
18649
+ });
18650
+ useRender(() => vue.createVNode("div", {
18651
+ "ref": rootEl,
18652
+ "class": ['v-virtual-scroll', props.class],
18653
+ "onScroll": handleScroll,
18654
+ "style": [dimensionStyles.value, props.style]
18655
+ }, [vue.createVNode("div", {
18656
+ "class": "v-virtual-scroll__container",
18657
+ "style": {
18658
+ paddingTop: convertToUnit(paddingTop.value),
18659
+ paddingBottom: convertToUnit(paddingBottom.value)
18660
+ }
18661
+ }, [computedItems.value.map(item => vue.createVNode(VVirtualScrollItem, {
18662
+ "key": item.index,
18663
+ "dynamicHeight": !props.itemHeight,
18664
+ "onUpdate:height": height => handleItemResize(item.index, height)
18665
+ }, {
18666
+ default: () => [slots.default?.({
18667
+ item: item.raw,
18668
+ index: item.index
18669
+ })]
18670
+ }))])]));
18671
+ return {
18672
+ scrollToIndex
18673
+ };
18674
+ }
18675
+ });
18676
+
18677
+ const VDataTableColumn = defineFunctionalComponent({
18678
+ align: {
18679
+ type: String,
18680
+ default: 'start'
18681
+ },
18682
+ fixed: Boolean,
18683
+ fixedOffset: [Number, String],
18684
+ height: [Number, String],
18685
+ lastFixed: Boolean,
18686
+ noPadding: Boolean,
18687
+ tag: String,
18688
+ width: [Number, String]
18689
+ }, (props, _ref) => {
18690
+ let {
18691
+ slots,
18692
+ attrs
18693
+ } = _ref;
18694
+ const Tag = props.tag ?? 'td';
18695
+ return vue.createVNode(Tag, vue.mergeProps({
18696
+ "class": ['v-data-table__td', {
18697
+ 'v-data-table-column--fixed': props.fixed,
18698
+ 'v-data-table-column--last-fixed': props.lastFixed,
18699
+ 'v-data-table-column--no-padding': props.noPadding
18700
+ }, `v-data-table-column--align-${props.align}`],
18701
+ "style": {
18702
+ height: convertToUnit(props.height),
18703
+ width: convertToUnit(props.width),
18704
+ left: convertToUnit(props.fixedOffset || null)
18705
+ }
18706
+ }, attrs), {
18707
+ default: () => [slots.default?.()]
18708
+ });
18709
+ });
18710
+
18711
+ // Utilities
18712
+
18713
+ // Types
18714
+
18715
+ const makeDataTableHeaderProps = propsFactory({
18716
+ headers: {
18717
+ type: Array,
18718
+ default: () => []
18719
+ }
18720
+ }, 'v-data-table-header');
18721
+ const VDataTableHeadersSymbol = Symbol.for('vuetify:data-table-headers');
18722
+ function createHeaders(props, options) {
18723
+ const headers = vue.ref([]);
18724
+ const columns = vue.ref([]);
18725
+ vue.watch(() => props.headers, () => {
18726
+ const wrapped = !props.headers.length ? [] : Array.isArray(props.headers[0]) ? props.headers : [props.headers];
18727
+ const flat = wrapped.flatMap((row, index) => row.map(column => ({
18728
+ column,
18729
+ row: index
18730
+ })));
18731
+ const rowCount = wrapped.length;
18732
+ const defaultHeader = {
18733
+ title: '',
18734
+ sortable: false
18735
+ };
18736
+ const defaultActionHeader = {
18202
18737
  ...defaultHeader,
18203
18738
  width: 48
18204
18739
  };
@@ -19549,8 +20084,8 @@
19549
20084
  default: 52
19550
20085
  }
19551
20086
  }, 'virtual');
19552
- const UP$1 = -1;
19553
- const DOWN$1 = 1;
20087
+ const UP = -1;
20088
+ const DOWN = 1;
19554
20089
 
19555
20090
  // TODO: Replace this with composable from v-virtual-scroll
19556
20091
  function useVirtual(props, items) {
@@ -19588,12 +20123,12 @@
19588
20123
  isScrolling.value = false;
19589
20124
  }, 100);
19590
20125
  const scrollTop = containerRef.value.scrollTop;
19591
- const direction = scrollTop < lastScrollTop ? UP$1 : DOWN$1;
20126
+ const direction = scrollTop < lastScrollTop ? UP : DOWN;
19592
20127
  const midPointIndex = calculateMidPointIndex(scrollTop);
19593
20128
  const buffer = Math.round(visibleItems.value / 3);
19594
- if (direction === UP$1 && midPointIndex <= startIndex.value) {
20129
+ if (direction === UP && midPointIndex <= startIndex.value) {
19595
20130
  startIndex.value = Math.max(midPointIndex - buffer, 0);
19596
- } else if (direction === DOWN$1 && midPointIndex >= startIndex.value + buffer * 2) {
20131
+ } else if (direction === DOWN && midPointIndex >= startIndex.value + buffer * 2) {
19597
20132
  startIndex.value = Math.min(Math.max(0, midPointIndex - buffer), items.value.length - visibleItems.value);
19598
20133
  }
19599
20134
  lastScrollTop = containerRef.value.scrollTop;
@@ -19906,6 +20441,211 @@
19906
20441
 
19907
20442
  // Types
19908
20443
 
20444
+ const VInfiniteScrollIntersect = defineComponent({
20445
+ name: 'VInfiniteScrollIntersect',
20446
+ props: {
20447
+ side: {
20448
+ type: String,
20449
+ required: true
20450
+ },
20451
+ rootRef: null,
20452
+ rootMargin: String
20453
+ },
20454
+ emits: {
20455
+ intersect: side => true
20456
+ },
20457
+ setup(props, _ref) {
20458
+ let {
20459
+ emit
20460
+ } = _ref;
20461
+ const {
20462
+ intersectionRef,
20463
+ isIntersecting
20464
+ } = useIntersectionObserver(entries => {}, props.rootMargin ? {
20465
+ root: props.rootRef,
20466
+ rootMargin: props.rootMargin
20467
+ } : undefined);
20468
+ vue.watch(isIntersecting, async val => {
20469
+ if (val) emit('intersect', props.side);
20470
+ });
20471
+ useRender(() => vue.createVNode("div", {
20472
+ "class": "v-infinite-scroll-intersect",
20473
+ "ref": intersectionRef
20474
+ }, [vue.createTextVNode("\xA0")]));
20475
+ return {};
20476
+ }
20477
+ });
20478
+ const VInfiniteScroll = genericComponent()({
20479
+ name: 'VInfiniteScroll',
20480
+ props: {
20481
+ color: String,
20482
+ direction: {
20483
+ type: String,
20484
+ default: 'vertical',
20485
+ validator: v => ['vertical', 'horizontal'].includes(v)
20486
+ },
20487
+ side: {
20488
+ type: String,
20489
+ default: 'end',
20490
+ validator: v => ['start', 'end', 'both'].includes(v)
20491
+ },
20492
+ mode: {
20493
+ type: String,
20494
+ default: 'intersect',
20495
+ validator: v => ['intersect', 'manual'].includes(v)
20496
+ },
20497
+ margin: [Number, String],
20498
+ loadMoreText: {
20499
+ type: String,
20500
+ default: '$vuetify.infiniteScroll.loadMore'
20501
+ },
20502
+ emptyText: {
20503
+ type: String,
20504
+ default: '$vuetify.infiniteScroll.empty'
20505
+ },
20506
+ ...makeDimensionProps()
20507
+ },
20508
+ emits: {
20509
+ load: options => true
20510
+ },
20511
+ setup(props, _ref2) {
20512
+ let {
20513
+ slots,
20514
+ emit
20515
+ } = _ref2;
20516
+ const rootEl = vue.ref();
20517
+ const startStatus = vue.ref('ok');
20518
+ const endStatus = vue.ref('ok');
20519
+ const margin = vue.computed(() => convertToUnit(props.margin));
20520
+ function setScrollAmount(amount) {
20521
+ if (!rootEl.value) return;
20522
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
20523
+ rootEl.value[property] = amount;
20524
+ }
20525
+ function getScrollAmount() {
20526
+ if (!rootEl.value) return 0;
20527
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
20528
+ return rootEl.value[property];
20529
+ }
20530
+ function getScrollSize() {
20531
+ if (!rootEl.value) return 0;
20532
+ const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth';
20533
+ return rootEl.value[property];
20534
+ }
20535
+ function getContainerSize() {
20536
+ if (!rootEl.value) return 0;
20537
+ const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth';
20538
+ return rootEl.value[property];
20539
+ }
20540
+ vue.onMounted(() => {
20541
+ if (!rootEl.value) return;
20542
+ if (props.side === 'start') {
20543
+ setScrollAmount(getScrollSize());
20544
+ } else if (props.side === 'both') {
20545
+ setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2);
20546
+ }
20547
+ });
20548
+ function setStatus(side, status) {
20549
+ if (side === 'start') {
20550
+ startStatus.value = status;
20551
+ } else if (side === 'end') {
20552
+ endStatus.value = status;
20553
+ }
20554
+ }
20555
+ function getStatus(side) {
20556
+ return side === 'start' ? startStatus.value : endStatus.value;
20557
+ }
20558
+ let previousScrollSize = 0;
20559
+ function handleIntersect(side) {
20560
+ const status = getStatus(side);
20561
+ if (!rootEl.value || status === 'loading') return;
20562
+ previousScrollSize = getScrollSize();
20563
+ setStatus(side, 'loading');
20564
+ function done(status) {
20565
+ setStatus(side, status);
20566
+ vue.nextTick(() => {
20567
+ if (status === 'ok' && side === 'start') {
20568
+ setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
20569
+ }
20570
+ });
20571
+ }
20572
+ emit('load', {
20573
+ side,
20574
+ done
20575
+ });
20576
+ }
20577
+ const {
20578
+ t
20579
+ } = useLocale();
20580
+ function renderSide(side, status) {
20581
+ if (props.side !== side && props.side !== 'both') return;
20582
+ const onClick = () => handleIntersect(side);
20583
+ const slotProps = {
20584
+ side,
20585
+ props: {
20586
+ onClick,
20587
+ color: props.color
20588
+ }
20589
+ };
20590
+ if (status === 'error') return slots.error?.(slotProps);
20591
+ if (status === 'empty') return slots.empty?.(slotProps) ?? vue.createVNode("div", null, [t(props.emptyText)]);
20592
+ if (props.mode === 'manual') {
20593
+ if (status === 'loading') {
20594
+ return slots.loading?.(slotProps) ?? vue.createVNode(VProgressCircular, {
20595
+ "indeterminate": true,
20596
+ "color": props.color
20597
+ }, null);
20598
+ }
20599
+ return slots['load-more']?.(slotProps) ?? vue.createVNode(VBtn, {
20600
+ "variant": "outlined",
20601
+ "color": props.color,
20602
+ "onClick": onClick
20603
+ }, {
20604
+ default: () => [t(props.loadMoreText)]
20605
+ });
20606
+ }
20607
+ return slots.loading?.(slotProps) ?? vue.createVNode(VProgressCircular, {
20608
+ "indeterminate": true,
20609
+ "color": props.color
20610
+ }, null);
20611
+ }
20612
+ const {
20613
+ dimensionStyles
20614
+ } = useDimension(props);
20615
+ useRender(() => {
20616
+ const hasStartIntersect = props.side === 'start' || props.side === 'both';
20617
+ const hasEndIntersect = props.side === 'end' || props.side === 'both';
20618
+ const intersectMode = props.mode === 'intersect';
20619
+ return vue.createVNode("div", {
20620
+ "ref": rootEl,
20621
+ "class": ['v-infinite-scroll', `v-infinite-scroll--${props.direction}`, {
20622
+ 'v-infinite-scroll--start': hasStartIntersect,
20623
+ 'v-infinite-scroll--end': hasEndIntersect
20624
+ }],
20625
+ "style": dimensionStyles.value
20626
+ }, [vue.createVNode("div", {
20627
+ "class": "v-infinite-scroll__side"
20628
+ }, [renderSide('start', startStatus.value)]), rootEl.value && hasStartIntersect && intersectMode && vue.createVNode(VInfiniteScrollIntersect, {
20629
+ "key": "start",
20630
+ "side": "start",
20631
+ "onIntersect": handleIntersect,
20632
+ "rootRef": rootEl.value,
20633
+ "rootMargin": margin.value
20634
+ }, null), slots.default?.(), rootEl.value && hasEndIntersect && intersectMode && vue.createVNode(VInfiniteScrollIntersect, {
20635
+ "key": "end",
20636
+ "side": "end",
20637
+ "onIntersect": handleIntersect,
20638
+ "rootRef": rootEl.value,
20639
+ "rootMargin": margin.value
20640
+ }, null), vue.createVNode("div", {
20641
+ "class": "v-infinite-scroll__side"
20642
+ }, [renderSide('end', endStatus.value)])]);
20643
+ });
20644
+ }
20645
+ });
20646
+
20647
+ // Types
20648
+
19909
20649
  const rootTypes = {
19910
20650
  actions: 'button@2',
19911
20651
  article: 'heading, paragraph',
@@ -20036,177 +20776,6 @@
20036
20776
  }
20037
20777
  });
20038
20778
 
20039
- const VVirtualScrollItem = genericComponent()({
20040
- name: 'VVirtualScrollItem',
20041
- props: {
20042
- dynamicHeight: Boolean
20043
- },
20044
- emits: {
20045
- 'update:height': height => true
20046
- },
20047
- setup(props, _ref) {
20048
- let {
20049
- emit,
20050
- slots
20051
- } = _ref;
20052
- const {
20053
- resizeRef,
20054
- contentRect
20055
- } = useResizeObserver();
20056
- useToggleScope(() => props.dynamicHeight, () => {
20057
- vue.watch(() => contentRect.value?.height, height => {
20058
- if (height != null) emit('update:height', height);
20059
- });
20060
- });
20061
- function updateHeight() {
20062
- if (props.dynamicHeight && contentRect.value) {
20063
- emit('update:height', contentRect.value.height);
20064
- }
20065
- }
20066
- vue.onUpdated(updateHeight);
20067
- useRender(() => vue.createVNode("div", {
20068
- "ref": props.dynamicHeight ? resizeRef : undefined,
20069
- "class": "v-virtual-scroll__item"
20070
- }, [slots.default?.()]));
20071
- }
20072
- });
20073
-
20074
- // Types
20075
-
20076
- const UP = -1;
20077
- const DOWN = 1;
20078
- const VVirtualScroll = genericComponent()({
20079
- name: 'VVirtualScroll',
20080
- props: {
20081
- items: {
20082
- type: Array,
20083
- default: () => []
20084
- },
20085
- itemHeight: [Number, String],
20086
- visibleItems: [Number, String],
20087
- ...makeDimensionProps()
20088
- },
20089
- setup(props, _ref) {
20090
- let {
20091
- slots
20092
- } = _ref;
20093
- const first = vue.ref(0);
20094
- const baseItemHeight = vue.ref(props.itemHeight);
20095
- const itemHeight = vue.computed({
20096
- get: () => parseInt(baseItemHeight.value ?? 0, 10),
20097
- set(val) {
20098
- baseItemHeight.value = val;
20099
- }
20100
- });
20101
- const rootEl = vue.ref();
20102
- const {
20103
- resizeRef,
20104
- contentRect
20105
- } = useResizeObserver();
20106
- vue.watchEffect(() => {
20107
- resizeRef.value = rootEl.value;
20108
- });
20109
- const display = useDisplay();
20110
- const sizeMap = new Map();
20111
- let sizes = createRange(props.items.length).map(() => itemHeight.value);
20112
- const visibleItems = vue.computed(() => {
20113
- return props.visibleItems ? parseInt(props.visibleItems, 10) : Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
20114
- });
20115
- function handleItemResize(index, height) {
20116
- itemHeight.value = Math.max(itemHeight.value, height);
20117
- sizes[index] = height;
20118
- sizeMap.set(props.items[index], height);
20119
- }
20120
- function calculateOffset(index) {
20121
- return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0);
20122
- }
20123
- function calculateMidPointIndex(scrollTop) {
20124
- let start = 0;
20125
- let end = props.items.length;
20126
- while (start <= end) {
20127
- const middle = start + Math.floor((end - start) / 2);
20128
- const middleOffset = calculateOffset(middle);
20129
- if (middleOffset === scrollTop) {
20130
- return middle;
20131
- } else if (middleOffset < scrollTop) {
20132
- start = middle + 1;
20133
- } else if (middleOffset > scrollTop) {
20134
- end = middle - 1;
20135
- }
20136
- }
20137
- return start;
20138
- }
20139
- let lastScrollTop = 0;
20140
- function handleScroll() {
20141
- if (!rootEl.value || !contentRect.value) return;
20142
- const height = contentRect.value.height;
20143
- const scrollTop = rootEl.value.scrollTop;
20144
- const direction = scrollTop < lastScrollTop ? UP : DOWN;
20145
- const midPointIndex = calculateMidPointIndex(scrollTop + height / 2);
20146
- const buffer = Math.round(visibleItems.value / 3);
20147
- if (direction === UP && midPointIndex <= first.value + buffer * 2 - 1) {
20148
- first.value = clamp(midPointIndex - buffer, 0, props.items.length);
20149
- } else if (direction === DOWN && midPointIndex >= first.value + buffer * 2 - 1) {
20150
- first.value = clamp(midPointIndex - buffer, 0, props.items.length - visibleItems.value);
20151
- }
20152
- lastScrollTop = rootEl.value.scrollTop;
20153
- }
20154
- function scrollToIndex(index) {
20155
- if (!rootEl.value) return;
20156
- const offset = calculateOffset(index);
20157
- rootEl.value.scrollTop = offset;
20158
- }
20159
- const last = vue.computed(() => Math.min(props.items.length, first.value + visibleItems.value));
20160
- const computedItems = vue.computed(() => props.items.slice(first.value, last.value));
20161
- const paddingTop = vue.computed(() => calculateOffset(first.value));
20162
- const paddingBottom = vue.computed(() => calculateOffset(props.items.length) - calculateOffset(last.value));
20163
- const {
20164
- dimensionStyles
20165
- } = useDimension(props);
20166
- vue.onMounted(() => {
20167
- if (!itemHeight.value) {
20168
- // If itemHeight prop is not set, then calculate an estimated height from the average of inital items
20169
- itemHeight.value = sizes.slice(first.value, last.value).reduce((curr, height) => curr + height, 0) / visibleItems.value;
20170
- }
20171
- });
20172
- vue.watch(() => props.items.length, () => {
20173
- sizes = createRange(props.items.length).map(() => itemHeight.value);
20174
- sizeMap.forEach((height, item) => {
20175
- const index = props.items.indexOf(item);
20176
- if (index === -1) {
20177
- sizeMap.delete(item);
20178
- } else {
20179
- sizes[index] = height;
20180
- }
20181
- });
20182
- });
20183
- useRender(() => vue.createVNode("div", {
20184
- "ref": rootEl,
20185
- "class": "v-virtual-scroll",
20186
- "onScroll": handleScroll,
20187
- "style": dimensionStyles.value
20188
- }, [vue.createVNode("div", {
20189
- "class": "v-virtual-scroll__container",
20190
- "style": {
20191
- paddingTop: convertToUnit(paddingTop.value),
20192
- paddingBottom: convertToUnit(paddingBottom.value)
20193
- }
20194
- }, [computedItems.value.map((item, index) => vue.createVNode(VVirtualScrollItem, {
20195
- "key": index,
20196
- "dynamicHeight": !props.itemHeight,
20197
- "onUpdate:height": height => handleItemResize(index + first.value, height)
20198
- }, {
20199
- default: () => [slots.default?.({
20200
- item,
20201
- index: index + first.value
20202
- })]
20203
- }))])]));
20204
- return {
20205
- scrollToIndex
20206
- };
20207
- }
20208
- });
20209
-
20210
20779
  var components = /*#__PURE__*/Object.freeze({
20211
20780
  __proto__: null,
20212
20781
  VAlert: VAlert,
@@ -20276,6 +20845,7 @@
20276
20845
  VHover: VHover,
20277
20846
  VIcon: VIcon,
20278
20847
  VImg: VImg,
20848
+ VInfiniteScroll: VInfiniteScroll,
20279
20849
  VInput: VInput,
20280
20850
  VItem: VItem,
20281
20851
  VItemGroup: VItemGroup,
@@ -20478,6 +21048,418 @@
20478
21048
  Touch: Touch
20479
21049
  });
20480
21050
 
21051
+ // Utilities
21052
+
21053
+ // Types
21054
+
21055
+ function getWeekArray(date) {
21056
+ let currentWeek = [];
21057
+ const weeks = [];
21058
+ const firstDayOfMonth = startOfMonth(date);
21059
+ const lastDayOfMonth = endOfMonth(date);
21060
+ for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
21061
+ currentWeek.push(null);
21062
+ }
21063
+ for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
21064
+ const day = new Date(date.getFullYear(), date.getMonth(), i);
21065
+
21066
+ // Add the day to the current week
21067
+ currentWeek.push(day);
21068
+
21069
+ // If the current week has 7 days, add it to the weeks array and start a new week
21070
+ if (currentWeek.length === 7) {
21071
+ weeks.push(currentWeek);
21072
+ currentWeek = [];
21073
+ }
21074
+ }
21075
+ for (let i = currentWeek.length; i < 7; i++) {
21076
+ currentWeek.push(null);
21077
+ }
21078
+ weeks.push(currentWeek);
21079
+ return weeks;
21080
+ }
21081
+ function startOfMonth(date) {
21082
+ return new Date(date.getFullYear(), date.getMonth(), 1);
21083
+ }
21084
+ function endOfMonth(date) {
21085
+ return new Date(date.getFullYear(), date.getMonth() + 1, 0);
21086
+ }
21087
+ function date(value) {
21088
+ if (value == null) return null;
21089
+ if (value instanceof Date) return value;
21090
+ if (typeof value === 'string') {
21091
+ const parsed = Date.parse(value);
21092
+ if (!isNaN(parsed)) return new Date(parsed);
21093
+ }
21094
+ return null;
21095
+ }
21096
+ const firstDay = {
21097
+ '001': 1,
21098
+ AD: 1,
21099
+ AE: 6,
21100
+ AF: 6,
21101
+ AG: 0,
21102
+ AI: 1,
21103
+ AL: 1,
21104
+ AM: 1,
21105
+ AN: 1,
21106
+ AR: 1,
21107
+ AS: 0,
21108
+ AT: 1,
21109
+ AU: 0,
21110
+ AX: 1,
21111
+ AZ: 1,
21112
+ BA: 1,
21113
+ BD: 0,
21114
+ BE: 1,
21115
+ BG: 1,
21116
+ BH: 6,
21117
+ BM: 1,
21118
+ BN: 1,
21119
+ BR: 0,
21120
+ BS: 0,
21121
+ BT: 0,
21122
+ BW: 0,
21123
+ BY: 1,
21124
+ BZ: 0,
21125
+ CA: 0,
21126
+ CH: 1,
21127
+ CL: 1,
21128
+ CM: 1,
21129
+ CN: 0,
21130
+ CO: 0,
21131
+ CR: 1,
21132
+ CY: 1,
21133
+ CZ: 1,
21134
+ DE: 1,
21135
+ DJ: 6,
21136
+ DK: 1,
21137
+ DM: 0,
21138
+ DO: 0,
21139
+ DZ: 6,
21140
+ EC: 1,
21141
+ EE: 1,
21142
+ EG: 6,
21143
+ ES: 1,
21144
+ ET: 0,
21145
+ FI: 1,
21146
+ FJ: 1,
21147
+ FO: 1,
21148
+ FR: 1,
21149
+ GB: 1,
21150
+ 'GB-alt-variant': 0,
21151
+ GE: 1,
21152
+ GF: 1,
21153
+ GP: 1,
21154
+ GR: 1,
21155
+ GT: 0,
21156
+ GU: 0,
21157
+ HK: 0,
21158
+ HN: 0,
21159
+ HR: 1,
21160
+ HU: 1,
21161
+ ID: 0,
21162
+ IE: 1,
21163
+ IL: 0,
21164
+ IN: 0,
21165
+ IQ: 6,
21166
+ IR: 6,
21167
+ IS: 1,
21168
+ IT: 1,
21169
+ JM: 0,
21170
+ JO: 6,
21171
+ JP: 0,
21172
+ KE: 0,
21173
+ KG: 1,
21174
+ KH: 0,
21175
+ KR: 0,
21176
+ KW: 6,
21177
+ KZ: 1,
21178
+ LA: 0,
21179
+ LB: 1,
21180
+ LI: 1,
21181
+ LK: 1,
21182
+ LT: 1,
21183
+ LU: 1,
21184
+ LV: 1,
21185
+ LY: 6,
21186
+ MC: 1,
21187
+ MD: 1,
21188
+ ME: 1,
21189
+ MH: 0,
21190
+ MK: 1,
21191
+ MM: 0,
21192
+ MN: 1,
21193
+ MO: 0,
21194
+ MQ: 1,
21195
+ MT: 0,
21196
+ MV: 5,
21197
+ MX: 0,
21198
+ MY: 1,
21199
+ MZ: 0,
21200
+ NI: 0,
21201
+ NL: 1,
21202
+ NO: 1,
21203
+ NP: 0,
21204
+ NZ: 1,
21205
+ OM: 6,
21206
+ PA: 0,
21207
+ PE: 0,
21208
+ PH: 0,
21209
+ PK: 0,
21210
+ PL: 1,
21211
+ PR: 0,
21212
+ PT: 0,
21213
+ PY: 0,
21214
+ QA: 6,
21215
+ RE: 1,
21216
+ RO: 1,
21217
+ RS: 1,
21218
+ RU: 1,
21219
+ SA: 0,
21220
+ SD: 6,
21221
+ SE: 1,
21222
+ SG: 0,
21223
+ SI: 1,
21224
+ SK: 1,
21225
+ SM: 1,
21226
+ SV: 0,
21227
+ SY: 6,
21228
+ TH: 0,
21229
+ TJ: 1,
21230
+ TM: 1,
21231
+ TR: 1,
21232
+ TT: 0,
21233
+ TW: 0,
21234
+ UA: 1,
21235
+ UM: 0,
21236
+ US: 0,
21237
+ UY: 1,
21238
+ UZ: 1,
21239
+ VA: 1,
21240
+ VE: 0,
21241
+ VI: 0,
21242
+ VN: 1,
21243
+ WS: 0,
21244
+ XK: 1,
21245
+ YE: 0,
21246
+ ZA: 0,
21247
+ ZW: 0
21248
+ };
21249
+ const sundayJanuarySecond2000 = new Date(2000, 0, 2);
21250
+ function getWeekdays(locale) {
21251
+ const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
21252
+ return createRange(7).map(i => {
21253
+ const weekday = new Date(sundayJanuarySecond2000);
21254
+ weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
21255
+ return new Intl.DateTimeFormat(locale, {
21256
+ weekday: 'long'
21257
+ }).format(weekday);
21258
+ });
21259
+ }
21260
+ function format(value, formatString, locale) {
21261
+ const date = new Date(value);
21262
+ let options = {};
21263
+ switch (formatString) {
21264
+ case 'fullDateWithWeekday':
21265
+ options = {
21266
+ weekday: 'long',
21267
+ day: 'numeric',
21268
+ month: 'long',
21269
+ year: 'numeric'
21270
+ };
21271
+ break;
21272
+ case 'normalDateWithWeekday':
21273
+ options = {
21274
+ weekday: 'short',
21275
+ day: 'numeric',
21276
+ month: 'short',
21277
+ year: 'numeric'
21278
+ };
21279
+ break;
21280
+ case 'keyboardDate':
21281
+ options = {};
21282
+ break;
21283
+ case 'monthAndDate':
21284
+ options = {
21285
+ month: 'long',
21286
+ day: 'numeric'
21287
+ };
21288
+ break;
21289
+ case 'monthAndYear':
21290
+ options = {
21291
+ month: 'long',
21292
+ year: 'numeric'
21293
+ };
21294
+ break;
21295
+ default:
21296
+ options = {
21297
+ timeZone: 'UTC',
21298
+ timeZoneName: 'short'
21299
+ };
21300
+ }
21301
+ return new Intl.DateTimeFormat(locale, options).format(date);
21302
+ }
21303
+ function addDays(date, amount) {
21304
+ const d = new Date(date);
21305
+ d.setDate(d.getDate() + amount);
21306
+ return d;
21307
+ }
21308
+ function addMonths(date, amount) {
21309
+ const d = new Date(date);
21310
+ d.setMonth(d.getMonth() + amount);
21311
+ return d;
21312
+ }
21313
+ function getYear(date) {
21314
+ return date.getFullYear();
21315
+ }
21316
+ function getMonth(date) {
21317
+ return date.getMonth();
21318
+ }
21319
+ function startOfYear(date) {
21320
+ return new Date(date.getFullYear(), 0, 1);
21321
+ }
21322
+ function endOfYear(date) {
21323
+ return new Date(date.getFullYear(), 11, 31);
21324
+ }
21325
+ function getMondayOfFirstWeekOfYear(year) {
21326
+ return new Date(year, 0, 1);
21327
+ }
21328
+
21329
+ // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
21330
+ function getWeek(date) {
21331
+ let year = date.getFullYear();
21332
+ let d1w1 = getMondayOfFirstWeekOfYear(year);
21333
+ if (date < d1w1) {
21334
+ year = year - 1;
21335
+ d1w1 = getMondayOfFirstWeekOfYear(year);
21336
+ } else {
21337
+ const tv = getMondayOfFirstWeekOfYear(year + 1);
21338
+ if (date >= tv) {
21339
+ year = year + 1;
21340
+ d1w1 = tv;
21341
+ }
21342
+ }
21343
+ const diffTime = Math.abs(date.getTime() - d1w1.getTime());
21344
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
21345
+ return Math.floor(diffDays / 7) + 1;
21346
+ }
21347
+ function isWithinRange(date, range) {
21348
+ return isAfter(date, range[0]) && isBefore(date, range[1]);
21349
+ }
21350
+ function isValid(date) {
21351
+ const d = new Date(date);
21352
+ return d instanceof Date && !isNaN(d.getTime());
21353
+ }
21354
+ function isAfter(date, comparing) {
21355
+ return date.getTime() > comparing.getTime();
21356
+ }
21357
+ function isBefore(date, comparing) {
21358
+ return date.getTime() < comparing.getTime();
21359
+ }
21360
+ function isEqual(date, comparing) {
21361
+ return date.getTime() === comparing.getTime();
21362
+ }
21363
+ function isSameDay(date, comparing) {
21364
+ return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21365
+ }
21366
+ function isSameMonth(date, comparing) {
21367
+ return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21368
+ }
21369
+ function getDiff(date, comparing, unit) {
21370
+ const d = new Date(date);
21371
+ const c = new Date(comparing);
21372
+ if (unit === 'month') {
21373
+ return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
21374
+ }
21375
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
21376
+ }
21377
+ function setYear(date, year) {
21378
+ const d = new Date(date);
21379
+ d.setFullYear(year);
21380
+ return d;
21381
+ }
21382
+ class VuetifyDateAdapter {
21383
+ constructor() {
21384
+ let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
21385
+ this.locale = locale;
21386
+ }
21387
+ date(value) {
21388
+ return date(value);
21389
+ }
21390
+ addDays(date, amount) {
21391
+ return addDays(date, amount);
21392
+ }
21393
+ addMonths(date, amount) {
21394
+ return addMonths(date, amount);
21395
+ }
21396
+ getWeekArray(date) {
21397
+ return getWeekArray(date);
21398
+ }
21399
+ startOfMonth(date) {
21400
+ return startOfMonth(date);
21401
+ }
21402
+ endOfMonth(date) {
21403
+ return endOfMonth(date);
21404
+ }
21405
+ format(date, formatString) {
21406
+ return format(date, formatString, this.locale);
21407
+ }
21408
+ isEqual(date, comparing) {
21409
+ return isEqual(date, comparing);
21410
+ }
21411
+ isValid(date) {
21412
+ return isValid(date);
21413
+ }
21414
+ isWithinRange(date, range) {
21415
+ return isWithinRange(date, range);
21416
+ }
21417
+ isAfter(date, comparing) {
21418
+ return isAfter(date, comparing);
21419
+ }
21420
+ isSameDay(date, comparing) {
21421
+ return isSameDay(date, comparing);
21422
+ }
21423
+ isSameMonth(date, comparing) {
21424
+ return isSameMonth(date, comparing);
21425
+ }
21426
+ setYear(date, year) {
21427
+ return setYear(date, year);
21428
+ }
21429
+ getDiff(date, comparing, unit) {
21430
+ return getDiff(date, comparing, unit);
21431
+ }
21432
+ getWeek(date) {
21433
+ return getWeek(date);
21434
+ }
21435
+ getWeekdays() {
21436
+ return getWeekdays(this.locale);
21437
+ }
21438
+ getYear(date) {
21439
+ return getYear(date);
21440
+ }
21441
+ getMonth(date) {
21442
+ return getMonth(date);
21443
+ }
21444
+ startOfYear(date) {
21445
+ return startOfYear(date);
21446
+ }
21447
+ endOfYear(date) {
21448
+ return endOfYear(date);
21449
+ }
21450
+ }
21451
+
21452
+ // Composables
21453
+
21454
+ // Types
21455
+
21456
+ const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
21457
+ function createDate(options) {
21458
+ return options ?? {
21459
+ adapter: VuetifyDateAdapter
21460
+ };
21461
+ }
21462
+
20481
21463
  // Composables
20482
21464
  function createVuetify$1() {
20483
21465
  let vuetify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -20496,6 +21478,7 @@
20496
21478
  const theme = createTheme(options.theme);
20497
21479
  const icons = createIcons(options.icons);
20498
21480
  const locale = createLocale(options.locale);
21481
+ const date = createDate(options.date);
20499
21482
  const install = app => {
20500
21483
  for (const key in directives) {
20501
21484
  app.directive(key, directives[key]);
@@ -20516,6 +21499,7 @@
20516
21499
  app.provide(ThemeSymbol, theme);
20517
21500
  app.provide(IconSymbol, icons);
20518
21501
  app.provide(LocaleSymbol, locale);
21502
+ app.provide(DateAdapterSymbol, date);
20519
21503
  if (IN_BROWSER && options.ssr) {
20520
21504
  if (app.$nuxt) {
20521
21505
  app.$nuxt.hook('app:suspense:resolve', () => {
@@ -20543,7 +21527,8 @@
20543
21527
  display: inject.call(this, DisplaySymbol),
20544
21528
  theme: inject.call(this, ThemeSymbol),
20545
21529
  icons: inject.call(this, IconSymbol),
20546
- locale: inject.call(this, LocaleSymbol)
21530
+ locale: inject.call(this, LocaleSymbol),
21531
+ date: inject.call(this, DateAdapterSymbol)
20547
21532
  });
20548
21533
  }
20549
21534
  }
@@ -20556,10 +21541,11 @@
20556
21541
  display,
20557
21542
  theme,
20558
21543
  icons,
20559
- locale
21544
+ locale,
21545
+ date
20560
21546
  };
20561
21547
  }
20562
- const version$1 = "3.1.16";
21548
+ const version$1 = "3.2.1";
20563
21549
  createVuetify$1.version = version$1;
20564
21550
 
20565
21551
  // Vue's inject() can only be used in setup
@@ -20571,7 +21557,7 @@
20571
21557
  }
20572
21558
  }
20573
21559
 
20574
- const version = "3.1.16";
21560
+ const version = "3.2.1";
20575
21561
 
20576
21562
  const createVuetify = function () {
20577
21563
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -20585,6 +21571,7 @@
20585
21571
  exports.components = components;
20586
21572
  exports.createVuetify = createVuetify;
20587
21573
  exports.directives = directives;
21574
+ exports.useDefaults = useDefaults;
20588
21575
  exports.useDisplay = useDisplay;
20589
21576
  exports.useLayout = useLayout;
20590
21577
  exports.useLocale = useLocale;