vuetify 3.1.16 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. package/dist/_component-variables-labs.sass +1 -0
  2. package/dist/json/attributes.json +331 -179
  3. package/dist/json/importMap-labs.json +4 -4
  4. package/dist/json/importMap.json +8 -4
  5. package/dist/json/tags.json +45 -2
  6. package/dist/json/web-types.json +851 -329
  7. package/dist/vuetify-labs.css +844 -621
  8. package/dist/vuetify-labs.d.ts +5908 -7618
  9. package/dist/vuetify-labs.esm.js +1628 -652
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +1627 -650
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +272 -65
  14. package/dist/vuetify.d.ts +6192 -7178
  15. package/dist/vuetify.esm.js +1365 -423
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +1364 -421
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +798 -728
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/blueprints/index.d.ts +35 -1
  23. package/lib/blueprints/md1.d.ts +35 -1
  24. package/lib/blueprints/md2.d.ts +35 -1
  25. package/lib/blueprints/md3.d.ts +35 -1
  26. package/lib/components/VAlert/VAlert.mjs +6 -4
  27. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  28. package/lib/components/VAlert/index.d.ts +57 -55
  29. package/lib/components/VApp/VApp.mjs +4 -2
  30. package/lib/components/VApp/VApp.mjs.map +1 -1
  31. package/lib/components/VApp/index.d.ts +22 -13
  32. package/lib/components/VAppBar/VAppBar.mjs +65 -13
  33. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  34. package/lib/components/VAppBar/VAppBarNavIcon.mjs +7 -4
  35. package/lib/components/VAppBar/VAppBarNavIcon.mjs.map +1 -1
  36. package/lib/components/VAppBar/index.d.ts +113 -92
  37. package/lib/components/VAutocomplete/VAutocomplete.mjs +2 -1
  38. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  39. package/lib/components/VAutocomplete/index.d.ts +276 -418
  40. package/lib/components/VAvatar/VAvatar.mjs +4 -2
  41. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  42. package/lib/components/VAvatar/index.d.ts +23 -14
  43. package/lib/components/VBadge/VBadge.mjs +6 -5
  44. package/lib/components/VBadge/VBadge.mjs.map +1 -1
  45. package/lib/components/VBadge/index.d.ts +27 -22
  46. package/lib/components/VBanner/VBanner.mjs +6 -4
  47. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  48. package/lib/components/VBanner/VBannerActions.mjs +5 -2
  49. package/lib/components/VBanner/VBannerActions.mjs.map +1 -1
  50. package/lib/components/VBanner/index.d.ts +92 -66
  51. package/lib/components/VBottomNavigation/VBottomNavigation.mjs +4 -2
  52. package/lib/components/VBottomNavigation/VBottomNavigation.mjs.map +1 -1
  53. package/lib/components/VBottomNavigation/index.d.ts +22 -13
  54. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +4 -2
  55. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  56. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs +6 -3
  57. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs.map +1 -1
  58. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs +4 -2
  59. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs.map +1 -1
  60. package/lib/components/VBreadcrumbs/index.d.ts +132 -91
  61. package/lib/components/VBtn/VBtn.mjs +9 -4
  62. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  63. package/lib/components/VBtn/_mixins.scss +1 -1
  64. package/lib/components/VBtn/index.d.ts +39 -36
  65. package/lib/components/VBtnGroup/VBtnGroup.mjs +4 -1
  66. package/lib/components/VBtnGroup/VBtnGroup.mjs.map +1 -1
  67. package/lib/components/VBtnGroup/index.d.ts +22 -13
  68. package/lib/components/VBtnToggle/VBtnToggle.mjs +4 -2
  69. package/lib/components/VBtnToggle/VBtnToggle.mjs.map +1 -1
  70. package/lib/components/VBtnToggle/index.d.ts +30 -21
  71. package/lib/components/VCard/VCard.mjs +5 -3
  72. package/lib/components/VCard/VCard.mjs.map +1 -1
  73. package/lib/components/VCard/VCardActions.mjs +7 -4
  74. package/lib/components/VCard/VCardActions.mjs.map +1 -1
  75. package/lib/components/VCard/VCardItem.mjs +5 -2
  76. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  77. package/lib/components/VCard/index.d.ts +250 -141
  78. package/lib/components/VCarousel/VCarousel.mjs +3 -3
  79. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  80. package/lib/components/VCarousel/VCarouselItem.mjs +6 -3
  81. package/lib/components/VCarousel/VCarouselItem.mjs.map +1 -1
  82. package/lib/components/VCarousel/index.d.ts +78 -141
  83. package/lib/components/VCheckbox/VCheckbox.mjs +3 -2
  84. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  85. package/lib/components/VCheckbox/VCheckboxBtn.mjs +2 -1
  86. package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
  87. package/lib/components/VCheckbox/index.d.ts +75 -109
  88. package/lib/components/VChip/VChip.mjs +7 -8
  89. package/lib/components/VChip/VChip.mjs.map +1 -1
  90. package/lib/components/VChip/index.d.ts +27 -30
  91. package/lib/components/VChipGroup/VChipGroup.mjs +4 -1
  92. package/lib/components/VChipGroup/VChipGroup.mjs.map +1 -1
  93. package/lib/components/VChipGroup/index.d.ts +22 -13
  94. package/lib/components/VCode/index.d.ts +30 -17
  95. package/lib/components/VColorPicker/VColorPicker.mjs +3 -3
  96. package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
  97. package/lib/components/VColorPicker/VColorPickerCanvas.mjs +5 -2
  98. package/lib/components/VColorPicker/VColorPickerCanvas.mjs.map +1 -1
  99. package/lib/components/VColorPicker/VColorPickerEdit.mjs +6 -3
  100. package/lib/components/VColorPicker/VColorPickerEdit.mjs.map +1 -1
  101. package/lib/components/VColorPicker/VColorPickerPreview.mjs +6 -3
  102. package/lib/components/VColorPicker/VColorPickerPreview.mjs.map +1 -1
  103. package/lib/components/VColorPicker/VColorPickerSwatches.mjs +7 -5
  104. package/lib/components/VColorPicker/VColorPickerSwatches.mjs.map +1 -1
  105. package/lib/components/VColorPicker/index.d.ts +34 -1
  106. package/lib/components/VCombobox/VCombobox.mjs +2 -1
  107. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  108. package/lib/components/VCombobox/index.d.ts +276 -418
  109. package/lib/components/VCounter/VCounter.mjs +4 -1
  110. package/lib/components/VCounter/VCounter.mjs.map +1 -1
  111. package/lib/components/VCounter/index.d.ts +22 -145
  112. package/lib/components/VDefaultsProvider/index.d.ts +0 -12
  113. package/lib/components/VDialog/VDialog.mjs +2 -1
  114. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  115. package/lib/components/VDialog/index.d.ts +104 -282
  116. package/lib/components/VDivider/VDivider.mjs +4 -2
  117. package/lib/components/VDivider/VDivider.mjs.map +1 -1
  118. package/lib/components/VDivider/index.d.ts +22 -13
  119. package/lib/components/VExpansionPanel/VExpansionPanel.mjs +4 -2
  120. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  121. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs +4 -1
  122. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs.map +1 -1
  123. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +4 -2
  124. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  125. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +4 -1
  126. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  127. package/lib/components/VExpansionPanel/index.d.ts +109 -81
  128. package/lib/components/VField/VField.css +59 -11
  129. package/lib/components/VField/VField.mjs +18 -8
  130. package/lib/components/VField/VField.mjs.map +1 -1
  131. package/lib/components/VField/VField.sass +57 -5
  132. package/lib/components/VField/VFieldLabel.mjs +6 -3
  133. package/lib/components/VField/VFieldLabel.mjs.map +1 -1
  134. package/lib/components/VField/_variables.scss +4 -0
  135. package/lib/components/VField/index.d.ts +169 -84
  136. package/lib/components/VFileInput/VFileInput.mjs +2 -1
  137. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  138. package/lib/components/VFileInput/index.d.ts +147 -174
  139. package/lib/components/VFooter/VFooter.mjs +4 -2
  140. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  141. package/lib/components/VFooter/index.d.ts +22 -13
  142. package/lib/components/VForm/VForm.mjs +5 -2
  143. package/lib/components/VForm/VForm.mjs.map +1 -1
  144. package/lib/components/VForm/index.d.ts +30 -17
  145. package/lib/components/VGrid/VCol.mjs +4 -1
  146. package/lib/components/VGrid/VCol.mjs.map +1 -1
  147. package/lib/components/VGrid/VContainer.mjs +4 -1
  148. package/lib/components/VGrid/VContainer.mjs.map +1 -1
  149. package/lib/components/VGrid/VRow.mjs +4 -1
  150. package/lib/components/VGrid/VRow.mjs.map +1 -1
  151. package/lib/components/VGrid/index.d.ts +104 -60
  152. package/lib/components/VHover/index.d.ts +20 -44
  153. package/lib/components/VIcon/VIcon.mjs +4 -2
  154. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  155. package/lib/components/VIcon/index.d.ts +23 -26
  156. package/lib/components/VImg/VImg.mjs +5 -3
  157. package/lib/components/VImg/VImg.mjs.map +1 -1
  158. package/lib/components/VImg/index.d.ts +26 -29
  159. package/lib/components/VInput/VInput.mjs +4 -1
  160. package/lib/components/VInput/VInput.mjs.map +1 -1
  161. package/lib/components/VInput/index.d.ts +37 -40
  162. package/lib/components/VItemGroup/VItemGroup.mjs +4 -1
  163. package/lib/components/VItemGroup/VItemGroup.mjs.map +1 -1
  164. package/lib/components/VItemGroup/index.d.ts +30 -33
  165. package/lib/components/VKbd/index.d.ts +30 -17
  166. package/lib/components/VLabel/VLabel.mjs +4 -1
  167. package/lib/components/VLabel/VLabel.mjs.map +1 -1
  168. package/lib/components/VLabel/index.d.ts +22 -13
  169. package/lib/components/VLayout/VLayout.mjs +8 -4
  170. package/lib/components/VLayout/VLayout.mjs.map +1 -1
  171. package/lib/components/VLayout/VLayoutItem.mjs +4 -2
  172. package/lib/components/VLayout/VLayoutItem.mjs.map +1 -1
  173. package/lib/components/VLayout/index.d.ts +44 -26
  174. package/lib/components/VLazy/VLazy.mjs +4 -2
  175. package/lib/components/VLazy/VLazy.mjs.map +1 -1
  176. package/lib/components/VLazy/index.d.ts +22 -13
  177. package/lib/components/VList/VList.mjs +4 -2
  178. package/lib/components/VList/VList.mjs.map +1 -1
  179. package/lib/components/VList/VListChildren.mjs.map +1 -1
  180. package/lib/components/VList/VListGroup.mjs +5 -2
  181. package/lib/components/VList/VListGroup.mjs.map +1 -1
  182. package/lib/components/VList/VListItem.mjs +4 -2
  183. package/lib/components/VList/VListItem.mjs.map +1 -1
  184. package/lib/components/VList/VListItemAction.mjs +4 -1
  185. package/lib/components/VList/VListItemAction.mjs.map +1 -1
  186. package/lib/components/VList/VListItemMedia.mjs +4 -1
  187. package/lib/components/VList/VListItemMedia.mjs.map +1 -1
  188. package/lib/components/VList/VListSubheader.mjs +5 -3
  189. package/lib/components/VList/VListSubheader.mjs.map +1 -1
  190. package/lib/components/VList/index.d.ts +932 -826
  191. package/lib/components/VLocaleProvider/VLocaleProvider.mjs +5 -2
  192. package/lib/components/VLocaleProvider/VLocaleProvider.mjs.map +1 -1
  193. package/lib/components/VLocaleProvider/index.d.ts +30 -17
  194. package/lib/components/VMain/VMain.mjs +4 -2
  195. package/lib/components/VMain/VMain.mjs.map +1 -1
  196. package/lib/components/VMain/index.d.ts +30 -17
  197. package/lib/components/VMenu/VMenu.mjs +2 -1
  198. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  199. package/lib/components/VMenu/index.d.ts +104 -282
  200. package/lib/components/VMessages/VMessages.mjs +4 -2
  201. package/lib/components/VMessages/VMessages.mjs.map +1 -1
  202. package/lib/components/VMessages/index.d.ts +22 -145
  203. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +4 -2
  204. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  205. package/lib/components/VNavigationDrawer/index.d.ts +26 -29
  206. package/lib/components/VNoSsr/VNoSsr.mjs.map +1 -1
  207. package/lib/components/VNoSsr/index.d.ts +3 -13
  208. package/lib/components/VOverlay/VOverlay.mjs +5 -3
  209. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  210. package/lib/components/VOverlay/index.d.ts +38 -45
  211. package/lib/components/VPagination/VPagination.mjs +4 -1
  212. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  213. package/lib/components/VPagination/index.d.ts +23 -30
  214. package/lib/components/VParallax/VParallax.mjs +5 -2
  215. package/lib/components/VParallax/VParallax.mjs.map +1 -1
  216. package/lib/components/VParallax/index.d.ts +34 -33
  217. package/lib/components/VProgressCircular/VProgressCircular.mjs +4 -2
  218. package/lib/components/VProgressCircular/VProgressCircular.mjs.map +1 -1
  219. package/lib/components/VProgressCircular/index.d.ts +22 -13
  220. package/lib/components/VProgressLinear/VProgressLinear.mjs +6 -4
  221. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  222. package/lib/components/VProgressLinear/index.d.ts +42 -45
  223. package/lib/components/VRadio/VRadio.mjs +2 -1
  224. package/lib/components/VRadio/VRadio.mjs.map +1 -1
  225. package/lib/components/VRadio/index.d.ts +27 -38
  226. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -1
  227. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  228. package/lib/components/VRadioGroup/index.d.ts +45 -68
  229. package/lib/components/VRangeSlider/VRangeSlider.mjs +33 -21
  230. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  231. package/lib/components/VRangeSlider/index.d.ts +50 -49
  232. package/lib/components/VRating/VRating.css +0 -4
  233. package/lib/components/VRating/VRating.mjs +10 -36
  234. package/lib/components/VRating/VRating.mjs.map +1 -1
  235. package/lib/components/VRating/VRating.sass +0 -5
  236. package/lib/components/VRating/index.d.ts +24 -18
  237. package/lib/components/VResponsive/VResponsive.mjs +4 -2
  238. package/lib/components/VResponsive/VResponsive.mjs.map +1 -1
  239. package/lib/components/VResponsive/index.d.ts +43 -31
  240. package/lib/components/VSelect/VSelect.mjs +2 -1
  241. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  242. package/lib/components/VSelect/index.d.ts +245 -567
  243. package/lib/components/VSelectionControl/VSelectionControl.mjs +6 -2
  244. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  245. package/lib/components/VSelectionControl/index.d.ts +76 -46
  246. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +4 -1
  247. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  248. package/lib/components/VSelectionControlGroup/index.d.ts +23 -14
  249. package/lib/components/VSheet/VSheet.mjs +4 -2
  250. package/lib/components/VSheet/VSheet.mjs.map +1 -1
  251. package/lib/components/VSheet/index.d.ts +22 -13
  252. package/lib/components/VSlideGroup/VSlideGroup.mjs +4 -1
  253. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  254. package/lib/components/VSlideGroup/index.d.ts +59 -90
  255. package/lib/components/VSlider/VSlider.mjs +33 -14
  256. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  257. package/lib/components/VSlider/VSliderThumb.mjs +6 -4
  258. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  259. package/lib/components/VSlider/VSliderTrack.mjs +6 -4
  260. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  261. package/lib/components/VSlider/index.d.ts +50 -49
  262. package/lib/components/VSlider/slider.mjs +43 -23
  263. package/lib/components/VSlider/slider.mjs.map +1 -1
  264. package/lib/components/VSnackbar/VSnackbar.mjs +2 -1
  265. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  266. package/lib/components/VSnackbar/index.d.ts +92 -142
  267. package/lib/components/VSwitch/VSwitch.mjs +2 -1
  268. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  269. package/lib/components/VSwitch/index.d.ts +45 -72
  270. package/lib/components/VSystemBar/VSystemBar.mjs +4 -2
  271. package/lib/components/VSystemBar/VSystemBar.mjs.map +1 -1
  272. package/lib/components/VSystemBar/index.d.ts +22 -13
  273. package/lib/components/VTable/VTable.mjs +4 -1
  274. package/lib/components/VTable/VTable.mjs.map +1 -1
  275. package/lib/components/VTable/index.d.ts +26 -29
  276. package/lib/components/VTabs/VTab.mjs +3 -4
  277. package/lib/components/VTabs/VTab.mjs.map +1 -1
  278. package/lib/components/VTabs/VTabs.mjs +2 -2
  279. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  280. package/lib/components/VTabs/index.d.ts +51 -33
  281. package/lib/components/VTextField/VTextField.mjs +2 -1
  282. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  283. package/lib/components/VTextField/index.d.ts +337 -317
  284. package/lib/components/VTextarea/VTextarea.mjs +2 -1
  285. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  286. package/lib/components/VTextarea/index.d.ts +127 -146
  287. package/lib/components/VThemeProvider/VThemeProvider.mjs +6 -3
  288. package/lib/components/VThemeProvider/VThemeProvider.mjs.map +1 -1
  289. package/lib/components/VThemeProvider/index.d.ts +22 -13
  290. package/lib/components/VTimeline/VTimeline.mjs +5 -3
  291. package/lib/components/VTimeline/VTimeline.mjs.map +1 -1
  292. package/lib/components/VTimeline/VTimelineDivider.mjs +4 -1
  293. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  294. package/lib/components/VTimeline/VTimelineItem.mjs +8 -6
  295. package/lib/components/VTimeline/VTimelineItem.mjs.map +1 -1
  296. package/lib/components/VTimeline/index.d.ts +67 -57
  297. package/lib/components/VToolbar/VToolbar.css +3 -1
  298. package/lib/components/VToolbar/VToolbar.mjs +4 -2
  299. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  300. package/lib/components/VToolbar/VToolbar.sass +3 -1
  301. package/lib/components/VToolbar/VToolbarItems.mjs +9 -4
  302. package/lib/components/VToolbar/VToolbarItems.mjs.map +1 -1
  303. package/lib/components/VToolbar/VToolbarTitle.mjs +5 -2
  304. package/lib/components/VToolbar/VToolbarTitle.mjs.map +1 -1
  305. package/lib/components/VToolbar/index.d.ts +74 -71
  306. package/lib/components/VTooltip/VTooltip.mjs +4 -3
  307. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  308. package/lib/components/VTooltip/index.d.ts +119 -150
  309. package/lib/components/VValidation/index.d.ts +6 -18
  310. package/lib/{labs → components}/VVirtualScroll/VVirtualScroll.mjs +21 -23
  311. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -0
  312. package/lib/{labs → components}/VVirtualScroll/VVirtualScrollItem.mjs +5 -2
  313. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -0
  314. package/lib/{labs → components}/VVirtualScroll/index.d.ts +70 -30
  315. package/lib/components/VVirtualScroll/index.mjs.map +1 -0
  316. package/lib/components/VWindow/VWindow.mjs +4 -1
  317. package/lib/components/VWindow/VWindow.mjs.map +1 -1
  318. package/lib/components/VWindow/VWindowItem.mjs +4 -1
  319. package/lib/components/VWindow/VWindowItem.mjs.map +1 -1
  320. package/lib/components/VWindow/index.d.ts +61 -79
  321. package/lib/components/index.d.ts +5832 -6863
  322. package/lib/components/index.mjs +2 -1
  323. package/lib/components/index.mjs.map +1 -1
  324. package/lib/components/transitions/index.d.ts +0 -192
  325. package/lib/composables/component.mjs +11 -0
  326. package/lib/composables/component.mjs.map +1 -0
  327. package/lib/composables/defaults.mjs +53 -5
  328. package/lib/composables/defaults.mjs.map +1 -1
  329. package/lib/composables/focus.mjs.map +1 -1
  330. package/lib/composables/icons.mjs +15 -4
  331. package/lib/composables/icons.mjs.map +1 -1
  332. package/lib/composables/index.mjs +1 -0
  333. package/lib/composables/index.mjs.map +1 -1
  334. package/lib/composables/intersectionObserver.mjs +2 -2
  335. package/lib/composables/intersectionObserver.mjs.map +1 -1
  336. package/lib/composables/loader.mjs.map +1 -1
  337. package/lib/composables/scroll.mjs +3 -0
  338. package/lib/composables/scroll.mjs.map +1 -1
  339. package/lib/entry-bundler.mjs +1 -1
  340. package/lib/entry-bundler.mjs.map +1 -1
  341. package/lib/framework.mjs +8 -3
  342. package/lib/framework.mjs.map +1 -1
  343. package/lib/iconsets/fa-svg.d.ts +1 -1
  344. package/lib/iconsets/fa.d.ts +1 -1
  345. package/lib/iconsets/fa4.d.ts +1 -1
  346. package/lib/iconsets/md.d.ts +1 -1
  347. package/lib/iconsets/mdi-svg.d.ts +1 -1
  348. package/lib/iconsets/mdi.d.ts +1 -1
  349. package/lib/index.d.ts +46 -3
  350. package/lib/labs/VDataTable/index.d.ts +61 -933
  351. package/lib/labs/VInfiniteScroll/VInfiniteScroll.css +26 -0
  352. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs +215 -0
  353. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -0
  354. package/lib/labs/VInfiniteScroll/VInfiniteScroll.sass +25 -0
  355. package/lib/labs/VInfiniteScroll/_variables.scss +3 -0
  356. package/lib/labs/VInfiniteScroll/index.d.ts +321 -0
  357. package/lib/labs/VInfiniteScroll/index.mjs +2 -0
  358. package/lib/labs/VInfiniteScroll/index.mjs.map +1 -0
  359. package/lib/labs/VSkeletonLoader/index.d.ts +0 -12
  360. package/lib/labs/components.d.ts +377 -1097
  361. package/lib/labs/components.mjs +1 -1
  362. package/lib/labs/components.mjs.map +1 -1
  363. package/lib/labs/date/DateAdapter.mjs +2 -0
  364. package/lib/labs/date/DateAdapter.mjs.map +1 -0
  365. package/lib/labs/date/adapters/vuetify.d.ts +52 -0
  366. package/lib/labs/date/adapters/vuetify.mjs +399 -0
  367. package/lib/labs/date/adapters/vuetify.mjs.map +1 -0
  368. package/lib/labs/date/date.mjs +39 -0
  369. package/lib/labs/date/date.mjs.map +1 -0
  370. package/lib/labs/date/index.d.ts +40 -0
  371. package/lib/labs/date/index.mjs +2 -0
  372. package/lib/labs/date/index.mjs.map +1 -0
  373. package/lib/labs/index.mjs +3 -2
  374. package/lib/labs/index.mjs.map +1 -1
  375. package/lib/locale/af.mjs +5 -1
  376. package/lib/locale/af.mjs.map +1 -1
  377. package/lib/locale/ar.mjs +5 -1
  378. package/lib/locale/ar.mjs.map +1 -1
  379. package/lib/locale/az.mjs +5 -1
  380. package/lib/locale/az.mjs.map +1 -1
  381. package/lib/locale/bg.mjs +5 -1
  382. package/lib/locale/bg.mjs.map +1 -1
  383. package/lib/locale/ca.mjs +5 -1
  384. package/lib/locale/ca.mjs.map +1 -1
  385. package/lib/locale/ckb.mjs +5 -1
  386. package/lib/locale/ckb.mjs.map +1 -1
  387. package/lib/locale/cs.mjs +5 -1
  388. package/lib/locale/cs.mjs.map +1 -1
  389. package/lib/locale/da.mjs +5 -1
  390. package/lib/locale/da.mjs.map +1 -1
  391. package/lib/locale/de.mjs +5 -1
  392. package/lib/locale/de.mjs.map +1 -1
  393. package/lib/locale/el.mjs +5 -1
  394. package/lib/locale/el.mjs.map +1 -1
  395. package/lib/locale/en.mjs +5 -1
  396. package/lib/locale/en.mjs.map +1 -1
  397. package/lib/locale/es.mjs +5 -1
  398. package/lib/locale/es.mjs.map +1 -1
  399. package/lib/locale/et.mjs +5 -1
  400. package/lib/locale/et.mjs.map +1 -1
  401. package/lib/locale/fa.mjs +5 -1
  402. package/lib/locale/fa.mjs.map +1 -1
  403. package/lib/locale/fi.mjs +5 -1
  404. package/lib/locale/fi.mjs.map +1 -1
  405. package/lib/locale/fr.mjs +5 -1
  406. package/lib/locale/fr.mjs.map +1 -1
  407. package/lib/locale/he.mjs +5 -1
  408. package/lib/locale/he.mjs.map +1 -1
  409. package/lib/locale/hr.mjs +5 -1
  410. package/lib/locale/hr.mjs.map +1 -1
  411. package/lib/locale/hu.mjs +5 -1
  412. package/lib/locale/hu.mjs.map +1 -1
  413. package/lib/locale/id.mjs +5 -1
  414. package/lib/locale/id.mjs.map +1 -1
  415. package/lib/locale/index.d.ts +168 -0
  416. package/lib/locale/it.mjs +5 -1
  417. package/lib/locale/it.mjs.map +1 -1
  418. package/lib/locale/ja.mjs +5 -1
  419. package/lib/locale/ja.mjs.map +1 -1
  420. package/lib/locale/ko.mjs +5 -1
  421. package/lib/locale/ko.mjs.map +1 -1
  422. package/lib/locale/lt.mjs +5 -1
  423. package/lib/locale/lt.mjs.map +1 -1
  424. package/lib/locale/lv.mjs +5 -1
  425. package/lib/locale/lv.mjs.map +1 -1
  426. package/lib/locale/nl.mjs +5 -1
  427. package/lib/locale/nl.mjs.map +1 -1
  428. package/lib/locale/no.mjs +5 -1
  429. package/lib/locale/no.mjs.map +1 -1
  430. package/lib/locale/pl.mjs +5 -1
  431. package/lib/locale/pl.mjs.map +1 -1
  432. package/lib/locale/pt.mjs +5 -1
  433. package/lib/locale/pt.mjs.map +1 -1
  434. package/lib/locale/ro.mjs +5 -1
  435. package/lib/locale/ro.mjs.map +1 -1
  436. package/lib/locale/ru.mjs +5 -1
  437. package/lib/locale/ru.mjs.map +1 -1
  438. package/lib/locale/sk.mjs +5 -1
  439. package/lib/locale/sk.mjs.map +1 -1
  440. package/lib/locale/sl.mjs +5 -1
  441. package/lib/locale/sl.mjs.map +1 -1
  442. package/lib/locale/sr-Cyrl.mjs +5 -1
  443. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  444. package/lib/locale/sr-Latn.mjs +5 -1
  445. package/lib/locale/sr-Latn.mjs.map +1 -1
  446. package/lib/locale/sv.mjs +5 -1
  447. package/lib/locale/sv.mjs.map +1 -1
  448. package/lib/locale/th.mjs +5 -1
  449. package/lib/locale/th.mjs.map +1 -1
  450. package/lib/locale/tr.mjs +5 -1
  451. package/lib/locale/tr.mjs.map +1 -1
  452. package/lib/locale/uk.mjs +5 -1
  453. package/lib/locale/uk.mjs.map +1 -1
  454. package/lib/locale/vi.mjs +5 -1
  455. package/lib/locale/vi.mjs.map +1 -1
  456. package/lib/locale/zh-Hans.mjs +5 -1
  457. package/lib/locale/zh-Hans.mjs.map +1 -1
  458. package/lib/locale/zh-Hant.mjs +5 -1
  459. package/lib/locale/zh-Hant.mjs.map +1 -1
  460. package/lib/styles/main.css +152 -0
  461. package/lib/styles/settings/_utilities.scss +11 -1
  462. package/lib/util/createSimpleFunctional.mjs +9 -4
  463. package/lib/util/createSimpleFunctional.mjs.map +1 -1
  464. package/lib/util/defineComponent.mjs +11 -43
  465. package/lib/util/defineComponent.mjs.map +1 -1
  466. package/lib/util/helpers.mjs +6 -2
  467. package/lib/util/helpers.mjs.map +1 -1
  468. package/lib/util/index.mjs +1 -0
  469. package/lib/util/index.mjs.map +1 -1
  470. package/package.json +3 -2
  471. package/lib/labs/VVirtualScroll/VVirtualScroll.mjs.map +0 -1
  472. package/lib/labs/VVirtualScroll/VVirtualScrollItem.mjs.map +0 -1
  473. package/lib/labs/VVirtualScroll/index.mjs.map +0 -1
  474. /package/lib/{labs → components}/VVirtualScroll/VVirtualScroll.css +0 -0
  475. /package/lib/{labs → components}/VVirtualScroll/VVirtualScroll.sass +0 -0
  476. /package/lib/{labs → components}/VVirtualScroll/index.mjs +0 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.1.16
2
+ * Vuetify v3.2.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -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,58 @@
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 useDefaults() {
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
+ };
1040
1062
  }
1041
1063
 
1042
1064
  // Utils
1043
1065
 
1044
1066
  // Types
1045
1067
 
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
1068
  // Implementation
1053
1069
  function defineComponent(options) {
1054
1070
  options._setup = options._setup ?? options.setup;
@@ -1060,43 +1076,20 @@
1060
1076
  options.props = propsFactory(options.props ?? {}, toKebabCase(options.name))();
1061
1077
  const propKeys = Object.keys(options.props);
1062
1078
  options.filterProps = function filterProps(props) {
1063
- return pick(props, propKeys);
1079
+ return pick(props, propKeys, ['class', 'style']);
1064
1080
  };
1065
1081
  options.props._as = String;
1066
1082
  options.setup = function setup(props, ctx) {
1067
- const defaults = useDefaults();
1083
+ const defaults = injectDefaults();
1068
1084
 
1069
1085
  // Skip props proxy if defaults are not provided
1070
1086
  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
- });
1087
+ const {
1088
+ props: _props,
1089
+ provideSubDefaults
1090
+ } = useDefaults(props, props._as ?? options.name, defaults);
1092
1091
  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
- });
1092
+ provideSubDefaults();
1100
1093
  return setupBindings;
1101
1094
  };
1102
1095
  }
@@ -1121,15 +1114,19 @@
1121
1114
  tag: {
1122
1115
  type: String,
1123
1116
  default: tag
1124
- }
1117
+ },
1118
+ ...makeComponentProps()
1125
1119
  },
1126
1120
  setup(props, _ref) {
1127
1121
  let {
1128
1122
  slots
1129
1123
  } = _ref;
1130
- return () => vue.h(props.tag, {
1131
- class: klass
1132
- }, slots.default?.());
1124
+ return () => {
1125
+ return vue.h(props.tag, {
1126
+ class: [klass, props.class],
1127
+ style: props.style
1128
+ }, slots.default?.());
1129
+ };
1133
1130
  }
1134
1131
  });
1135
1132
  }
@@ -1162,6 +1159,34 @@
1162
1159
  const deceleratedEasing = 'cubic-bezier(0.0, 0, 0.2, 1)'; // Entering
1163
1160
  const acceleratedEasing = 'cubic-bezier(0.4, 0, 1, 1)'; // Leaving
1164
1161
 
1162
+ // Utilities
1163
+ function getCurrentInstance(name, message) {
1164
+ const vm = vue.getCurrentInstance();
1165
+ if (!vm) {
1166
+ throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
1167
+ }
1168
+ return vm;
1169
+ }
1170
+ function getCurrentInstanceName() {
1171
+ let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
1172
+ const vm = getCurrentInstance(name).type;
1173
+ return toKebabCase(vm?.aliasName || vm?.name);
1174
+ }
1175
+ let _uid = 0;
1176
+ let _map = new WeakMap();
1177
+ function getUid() {
1178
+ const vm = getCurrentInstance('getUid');
1179
+ if (_map.has(vm)) return _map.get(vm);else {
1180
+ const uid = _uid++;
1181
+ _map.set(vm, uid);
1182
+ return uid;
1183
+ }
1184
+ }
1185
+ getUid.reset = () => {
1186
+ _uid = 0;
1187
+ _map = new WeakMap();
1188
+ };
1189
+
1165
1190
  function getScrollParent(el) {
1166
1191
  while (el) {
1167
1192
  if (hasScrollbar(el)) return el;
@@ -1185,6 +1210,16 @@
1185
1210
  return style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1186
1211
  }
1187
1212
 
1213
+ function injectSelf(key) {
1214
+ const {
1215
+ provides
1216
+ } = getCurrentInstance('injectSelf');
1217
+ if (provides && key in provides) {
1218
+ // TS doesn't allow symbol as index type
1219
+ return provides[key];
1220
+ }
1221
+ }
1222
+
1188
1223
  function isFixedPosition(el) {
1189
1224
  while (el) {
1190
1225
  if (window.getComputedStyle(el).position === 'fixed') {
@@ -1965,7 +2000,11 @@
1965
2000
  item: 'Rating {0} of {1}'
1966
2001
  }
1967
2002
  },
1968
- loading: 'Loading...'
2003
+ loading: 'Loading...',
2004
+ infiniteScroll: {
2005
+ loadMore: 'Load more',
2006
+ empty: 'No more'
2007
+ }
1969
2008
  };
1970
2009
 
1971
2010
  const LANG_PREFIX = '$vuetify.';
@@ -2163,6 +2202,7 @@
2163
2202
  const VApp = genericComponent()({
2164
2203
  name: 'VApp',
2165
2204
  props: {
2205
+ ...makeComponentProps(),
2166
2206
  ...makeLayoutProps({
2167
2207
  fullHeight: true
2168
2208
  }),
@@ -2185,8 +2225,8 @@
2185
2225
  } = useRtl();
2186
2226
  useRender(() => vue.createVNode("div", {
2187
2227
  "ref": layoutRef,
2188
- "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value],
2189
- "style": layoutStyles.value
2228
+ "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value, props.class],
2229
+ "style": [layoutStyles.value, props.style]
2190
2230
  }, [vue.createVNode("div", {
2191
2231
  "class": "v-application__wrap"
2192
2232
  }, [slots.default?.()])]));
@@ -2611,6 +2651,7 @@
2611
2651
  props: {
2612
2652
  aspectRatio: [String, Number],
2613
2653
  contentClass: String,
2654
+ ...makeComponentProps(),
2614
2655
  ...makeDimensionProps()
2615
2656
  },
2616
2657
  setup(props, _ref) {
@@ -2624,8 +2665,8 @@
2624
2665
  dimensionStyles
2625
2666
  } = useDimension(props);
2626
2667
  useRender(() => vue.createVNode("div", {
2627
- "class": "v-responsive",
2628
- "style": dimensionStyles.value
2668
+ "class": ['v-responsive', props.class],
2669
+ "style": [dimensionStyles.value, props.style]
2629
2670
  }, [vue.createVNode("div", {
2630
2671
  "class": "v-responsive__sizer",
2631
2672
  "style": aspectStyles.value
@@ -2743,6 +2784,7 @@
2743
2784
  },
2744
2785
  srcset: String,
2745
2786
  width: [String, Number],
2787
+ ...makeComponentProps(),
2746
2788
  ...makeTransitionProps()
2747
2789
  },
2748
2790
  emits: {
@@ -2930,10 +2972,10 @@
2930
2972
  useRender(() => vue.withDirectives(vue.createVNode(VResponsive, {
2931
2973
  "class": ['v-img', {
2932
2974
  'v-img--booting': !isBooted.value
2933
- }],
2934
- "style": {
2975
+ }, props.class],
2976
+ "style": [{
2935
2977
  width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width)
2936
- },
2978
+ }, props.style],
2937
2979
  "aspectRatio": aspectRatio.value,
2938
2980
  "aria-label": props.alt,
2939
2981
  "role": props.alt ? 'img' : undefined
@@ -2968,10 +3010,9 @@
2968
3010
  }
2969
3011
  }, 'tag');
2970
3012
 
2971
- // Types
2972
-
2973
3013
  const makeVToolbarTitleProps = propsFactory({
2974
3014
  text: String,
3015
+ ...makeComponentProps(),
2975
3016
  ...makeTagProps()
2976
3017
  }, 'v-toolbar-title');
2977
3018
  const VToolbarTitle = genericComponent()({
@@ -2984,7 +3025,8 @@
2984
3025
  useRender(() => {
2985
3026
  const hasText = !!(slots.default || slots.text || props.text);
2986
3027
  return vue.createVNode(props.tag, {
2987
- "class": "v-toolbar-title"
3028
+ "class": ['v-toolbar-title', props.class],
3029
+ "style": props.style
2988
3030
  }, {
2989
3031
  default: () => [hasText && vue.createVNode("div", {
2990
3032
  "class": "v-toolbar-title__placeholder"
@@ -3165,6 +3207,7 @@
3165
3207
  image: String,
3166
3208
  title: String,
3167
3209
  ...makeBorderProps(),
3210
+ ...makeComponentProps(),
3168
3211
  ...makeElevationProps(),
3169
3212
  ...makeRoundedProps(),
3170
3213
  ...makeTagProps({
@@ -3215,8 +3258,8 @@
3215
3258
  'v-toolbar--flat': props.flat,
3216
3259
  'v-toolbar--floating': props.floating,
3217
3260
  [`v-toolbar--density-${props.density}`]: true
3218
- }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value],
3219
- "style": [backgroundColorStyles.value]
3261
+ }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value, props.class],
3262
+ "style": [backgroundColorStyles.value, props.style]
3220
3263
  }, {
3221
3264
  default: () => [hasImage && vue.createVNode("div", {
3222
3265
  "key": "image",
@@ -3283,6 +3326,98 @@
3283
3326
 
3284
3327
  // Utilities
3285
3328
 
3329
+ // Types
3330
+
3331
+ // Composables
3332
+ const makeScrollProps = propsFactory({
3333
+ scrollTarget: {
3334
+ type: String
3335
+ },
3336
+ scrollThreshold: {
3337
+ type: [String, Number]
3338
+ }
3339
+ }, 'scroll');
3340
+ function useScroll(props) {
3341
+ let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3342
+ const {
3343
+ thresholdMetCallback,
3344
+ scrollThreshold,
3345
+ canScroll
3346
+ } = args;
3347
+ let previousScroll = 0;
3348
+ const target = vue.ref(null);
3349
+ const currentScroll = vue.ref(0);
3350
+ const savedScroll = vue.ref(0);
3351
+ const currentThreshold = vue.ref(0);
3352
+ const isScrollActive = vue.ref(false);
3353
+ const isScrollingUp = vue.ref(false);
3354
+ const computedScrollThreshold = vue.computed(() => {
3355
+ return Number(props.scrollThreshold ?? scrollThreshold ?? 300);
3356
+ });
3357
+ const onScroll = () => {
3358
+ const targetEl = target.value;
3359
+ if (!targetEl || canScroll && !canScroll.value) return;
3360
+ previousScroll = currentScroll.value;
3361
+ currentScroll.value = 'window' in targetEl ? targetEl.pageYOffset : targetEl.scrollTop;
3362
+ isScrollingUp.value = currentScroll.value < previousScroll;
3363
+ currentThreshold.value = Math.abs(currentScroll.value - computedScrollThreshold.value);
3364
+ };
3365
+ vue.watch(isScrollingUp, () => {
3366
+ savedScroll.value = savedScroll.value || currentScroll.value;
3367
+ });
3368
+ vue.watch(isScrollActive, () => {
3369
+ savedScroll.value = 0;
3370
+ });
3371
+ vue.onMounted(() => {
3372
+ vue.watch(() => props.scrollTarget, scrollTarget => {
3373
+ const newTarget = scrollTarget ? document.querySelector(scrollTarget) : window;
3374
+ if (!newTarget) {
3375
+ consoleWarn(`Unable to locate element with identifier ${scrollTarget}`, vue.getCurrentInstance());
3376
+ return;
3377
+ }
3378
+ if (newTarget === target.value) return;
3379
+ target.value?.removeEventListener('scroll', onScroll);
3380
+ target.value = newTarget;
3381
+ target.value.addEventListener('scroll', onScroll, {
3382
+ passive: true
3383
+ });
3384
+ }, {
3385
+ immediate: true
3386
+ });
3387
+ });
3388
+ vue.onBeforeUnmount(() => {
3389
+ target.value?.removeEventListener('scroll', onScroll);
3390
+ });
3391
+ thresholdMetCallback && vue.watch(() => Math.abs(currentScroll.value - savedScroll.value) > computedScrollThreshold.value, thresholdMet => {
3392
+ thresholdMet && thresholdMetCallback({
3393
+ currentThreshold: currentThreshold.value,
3394
+ isScrollingUp: isScrollingUp.value,
3395
+ savedScroll
3396
+ });
3397
+ }, {
3398
+ immediate: true
3399
+ });
3400
+
3401
+ // Do we need this? If yes - seems that
3402
+ // there's no need to expose onScroll
3403
+ canScroll && vue.watch(canScroll, onScroll, {
3404
+ immediate: true
3405
+ });
3406
+ return {
3407
+ computedScrollThreshold,
3408
+ currentScroll,
3409
+ currentThreshold,
3410
+ isScrollActive,
3411
+ // required only for testing
3412
+ // probably can be removed
3413
+ // later (2 chars chlng)
3414
+ isScrollingUp,
3415
+ savedScroll
3416
+ };
3417
+ }
3418
+
3419
+ // Utilities
3420
+
3286
3421
  // Composables
3287
3422
  function useSsrBoot() {
3288
3423
  const isBooted = vue.ref(false);
@@ -3305,13 +3440,7 @@
3305
3440
  const VAppBar = genericComponent()({
3306
3441
  name: 'VAppBar',
3307
3442
  props: {
3308
- // TODO: Implement scrolling techniques
3309
- // hideOnScroll: Boolean
3310
- // invertedScroll: Boolean
3311
- // collapseOnScroll: Boolean
3312
- // elevateOnScroll: Boolean
3313
- // shrinkOnScroll: Boolean
3314
- // fadeImageOnScroll: Boolean
3443
+ scrollBehavior: String,
3315
3444
  modelValue: {
3316
3445
  type: Boolean,
3317
3446
  default: true
@@ -3323,6 +3452,7 @@
3323
3452
  },
3324
3453
  ...makeVToolbarProps(),
3325
3454
  ...makeLayoutItemProps(),
3455
+ ...makeScrollProps(),
3326
3456
  height: {
3327
3457
  type: [Number, String],
3328
3458
  default: 64
@@ -3337,11 +3467,63 @@
3337
3467
  } = _ref;
3338
3468
  const vToolbarRef = vue.ref();
3339
3469
  const isActive = useProxiedModel(props, 'modelValue');
3470
+ const scrollBehavior = vue.computed(() => {
3471
+ const behavior = new Set(props.scrollBehavior?.split(' ') ?? []);
3472
+ return {
3473
+ hide: behavior.has('hide'),
3474
+ // fullyHide: behavior.has('fully-hide'),
3475
+ inverted: behavior.has('inverted'),
3476
+ collapse: behavior.has('collapse'),
3477
+ elevate: behavior.has('elevate'),
3478
+ fadeImage: behavior.has('fade-image')
3479
+ // shrink: behavior.has('shrink'),
3480
+ };
3481
+ });
3482
+
3483
+ const canScroll = vue.computed(() => {
3484
+ const behavior = scrollBehavior.value;
3485
+ return behavior.hide ||
3486
+ // behavior.fullyHide ||
3487
+ behavior.inverted || behavior.collapse || behavior.elevate || behavior.fadeImage ||
3488
+ // behavior.shrink ||
3489
+ !isActive.value;
3490
+ });
3491
+ const {
3492
+ currentScroll,
3493
+ currentThreshold,
3494
+ computedScrollThreshold,
3495
+ isScrollingUp
3496
+ } = useScroll(props, {
3497
+ canScroll
3498
+ });
3499
+ const isCollapsed = vue.computed(() => props.collapse || scrollBehavior.value.collapse && (scrollBehavior.value.inverted ? currentScroll.value < 1 : currentScroll.value > 0));
3500
+ const isFlat = vue.computed(() => props.flat || scrollBehavior.value.elevate && currentScroll.value === (scrollBehavior.value.inverted ? 1 : 0));
3501
+ const scrollRatio = vue.computed(() => Math.min((currentThreshold.value - currentScroll.value) / currentThreshold.value || 1, 1));
3502
+ const opacity = vue.computed(() => scrollBehavior.value.fadeImage ? scrollBehavior.value.inverted ? 1 - scrollRatio.value : scrollRatio.value : undefined);
3340
3503
  const height = vue.computed(() => {
3504
+ if (scrollBehavior.value.hide && scrollBehavior.value.inverted) return 0;
3341
3505
  const height = vToolbarRef.value?.contentHeight ?? 0;
3342
3506
  const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0;
3343
3507
  return height + extensionHeight;
3344
3508
  });
3509
+ function setActive() {
3510
+ const val = currentScroll.value;
3511
+ if (scrollBehavior.value.hide) {
3512
+ if (scrollBehavior.value.inverted) {
3513
+ isActive.value = val > computedScrollThreshold.value;
3514
+ } else {
3515
+ isActive.value = isScrollingUp.value || val < computedScrollThreshold.value;
3516
+ }
3517
+ } else if (scrollBehavior.value.inverted) {
3518
+ isActive.value = currentScroll.value === 0;
3519
+ } else {
3520
+ isActive.value = true;
3521
+ }
3522
+ }
3523
+ vue.watch(currentScroll, setActive, {
3524
+ immediate: true
3525
+ });
3526
+ vue.watch(scrollBehavior, setActive);
3345
3527
  const {
3346
3528
  ssrBootStyles
3347
3529
  } = useSsrBoot();
@@ -3352,7 +3534,7 @@
3352
3534
  order: vue.computed(() => parseInt(props.order, 10)),
3353
3535
  position: vue.toRef(props, 'location'),
3354
3536
  layoutSize: height,
3355
- elementSize: height,
3537
+ elementSize: vue.ref(undefined),
3356
3538
  active: isActive,
3357
3539
  absolute: vue.toRef(props, 'absolute')
3358
3540
  });
@@ -3362,13 +3544,17 @@
3362
3544
  "ref": vToolbarRef,
3363
3545
  "class": ['v-app-bar', {
3364
3546
  'v-app-bar--bottom': props.location === 'bottom'
3365
- }],
3366
- "style": {
3547
+ }, props.class],
3548
+ "style": [{
3367
3549
  ...layoutItemStyles.value,
3550
+ '--v-toolbar-image-opacity': opacity.value,
3368
3551
  height: undefined,
3369
3552
  ...ssrBootStyles.value
3370
- }
3371
- }, toolbarProps), slots);
3553
+ }, props.style]
3554
+ }, toolbarProps, {
3555
+ "collapse": isCollapsed.value,
3556
+ "flat": isFlat.value
3557
+ }), slots);
3372
3558
  });
3373
3559
  return {};
3374
3560
  }
@@ -3451,6 +3637,7 @@
3451
3637
  const makeVBtnGroupProps = propsFactory({
3452
3638
  divided: Boolean,
3453
3639
  ...makeBorderProps(),
3640
+ ...makeComponentProps(),
3454
3641
  ...makeDensityProps(),
3455
3642
  ...makeElevationProps(),
3456
3643
  ...makeRoundedProps(),
@@ -3493,7 +3680,8 @@
3493
3680
  return vue.createVNode(props.tag, {
3494
3681
  "class": ['v-btn-group', {
3495
3682
  'v-btn-group--divided': props.divided
3496
- }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value]
3683
+ }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
3684
+ "style": props.style
3497
3685
  }, slots);
3498
3686
  });
3499
3687
  }
@@ -3726,8 +3914,10 @@
3726
3914
  useRender(() => {
3727
3915
  const [btnGroupProps] = VBtnGroup.filterProps(props);
3728
3916
  return vue.createVNode(VBtnGroup, vue.mergeProps({
3729
- "class": "v-btn-toggle"
3730
- }, btnGroupProps), {
3917
+ "class": ['v-btn-toggle', props.class]
3918
+ }, btnGroupProps, {
3919
+ "style": props.style
3920
+ }), {
3731
3921
  default: () => [slots.default?.({
3732
3922
  isSelected,
3733
3923
  next,
@@ -3798,7 +3988,7 @@
3798
3988
 
3799
3989
  // Types
3800
3990
 
3801
- const IconValue = [String, Function, Object];
3991
+ const IconValue = [String, Function, Object, Array];
3802
3992
  const IconSymbol = Symbol.for('vuetify:icons');
3803
3993
  const makeIconProps = propsFactory({
3804
3994
  icon: {
@@ -3818,8 +4008,9 @@
3818
4008
  slots
3819
4009
  } = _ref;
3820
4010
  return () => {
4011
+ const Icon = props.icon;
3821
4012
  return vue.createVNode(props.tag, null, {
3822
- default: () => [props.icon ? vue.createVNode(props.icon, null, null) : slots.default?.()]
4013
+ default: () => [props.icon ? vue.createVNode(Icon, null, null) : slots.default?.()]
3823
4014
  });
3824
4015
  };
3825
4016
  }
@@ -3842,7 +4033,12 @@
3842
4033
  "viewBox": "0 0 24 24",
3843
4034
  "role": "img",
3844
4035
  "aria-hidden": "true"
3845
- }, [vue.createVNode("path", {
4036
+ }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? vue.createVNode("path", {
4037
+ "d": path[0],
4038
+ "fill-opacity": path[1]
4039
+ }, null) : vue.createVNode("path", {
4040
+ "d": path
4041
+ }, null)) : vue.createVNode("path", {
3846
4042
  "d": props.icon
3847
4043
  }, null)])]
3848
4044
  });
@@ -3907,7 +4103,12 @@
3907
4103
  }
3908
4104
  }
3909
4105
  if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
3910
- if (typeof icon !== 'string') {
4106
+ if (Array.isArray(icon)) {
4107
+ return {
4108
+ component: VSvgIcon,
4109
+ icon
4110
+ };
4111
+ } else if (typeof icon !== 'string') {
3911
4112
  return {
3912
4113
  component: VComponentIcon,
3913
4114
  icon
@@ -3964,6 +4165,7 @@
3964
4165
  start: Boolean,
3965
4166
  end: Boolean,
3966
4167
  icon: IconValue,
4168
+ ...makeComponentProps(),
3967
4169
  ...makeSizeProps(),
3968
4170
  ...makeTagProps({
3969
4171
  tag: 'i'
@@ -4006,12 +4208,12 @@
4006
4208
  'v-icon--clickable': !!attrs.onClick,
4007
4209
  'v-icon--start': props.start,
4008
4210
  'v-icon--end': props.end
4009
- }],
4211
+ }, props.class],
4010
4212
  "style": [!sizeClasses.value ? {
4011
4213
  fontSize: convertToUnit(props.size),
4012
4214
  height: convertToUnit(props.size),
4013
4215
  width: convertToUnit(props.size)
4014
- } : undefined, textColorStyles.value],
4216
+ } : undefined, textColorStyles.value, props.style],
4015
4217
  "role": attrs.onClick ? 'button' : undefined,
4016
4218
  "aria-hidden": !attrs.onClick
4017
4219
  }, {
@@ -4022,14 +4224,14 @@
4022
4224
  });
4023
4225
 
4024
4226
  // Utilities
4025
- function useIntersectionObserver(callback) {
4227
+ function useIntersectionObserver(callback, options) {
4026
4228
  const intersectionRef = vue.ref();
4027
4229
  const isIntersecting = vue.ref(false);
4028
4230
  if (SUPPORTS_INTERSECTION) {
4029
4231
  const observer = new IntersectionObserver(entries => {
4030
4232
  callback?.(entries, observer);
4031
4233
  isIntersecting.value = !!entries.find(entry => entry.isIntersecting);
4032
- });
4234
+ }, options);
4033
4235
  vue.onBeforeUnmount(() => {
4034
4236
  observer.disconnect();
4035
4237
  });
@@ -4069,6 +4271,7 @@
4069
4271
  type: [Number, String],
4070
4272
  default: 4
4071
4273
  },
4274
+ ...makeComponentProps(),
4072
4275
  ...makeSizeProps(),
4073
4276
  ...makeTagProps({
4074
4277
  tag: 'div'
@@ -4124,8 +4327,8 @@
4124
4327
  'v-progress-circular--indeterminate': !!props.indeterminate,
4125
4328
  'v-progress-circular--visible': isIntersecting.value,
4126
4329
  'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink'
4127
- }, themeClasses.value, sizeClasses.value, textColorClasses.value],
4128
- "style": [sizeStyles.value, textColorStyles.value],
4330
+ }, themeClasses.value, sizeClasses.value, textColorClasses.value, props.class],
4331
+ "style": [sizeStyles.value, textColorStyles.value, props.style],
4129
4332
  "role": "progressbar",
4130
4333
  "aria-valuemin": "0",
4131
4334
  "aria-valuemax": "100",
@@ -4544,6 +4747,7 @@
4544
4747
  stream: Boolean,
4545
4748
  striped: Boolean,
4546
4749
  roundedBar: Boolean,
4750
+ ...makeComponentProps(),
4547
4751
  ...makeLocationProps({
4548
4752
  location: 'top'
4549
4753
  }),
@@ -4615,14 +4819,14 @@
4615
4819
  'v-progress-linear--rounded': props.rounded,
4616
4820
  'v-progress-linear--rounded-bar': props.roundedBar,
4617
4821
  'v-progress-linear--striped': props.striped
4618
- }, roundedClasses.value, themeClasses.value],
4619
- "style": {
4822
+ }, roundedClasses.value, themeClasses.value, props.class],
4823
+ "style": [{
4620
4824
  bottom: props.location === 'bottom' ? 0 : undefined,
4621
4825
  top: props.location === 'top' ? 0 : undefined,
4622
4826
  height: props.active ? convertToUnit(height.value) : 0,
4623
4827
  '--v-progress-linear-height': convertToUnit(height.value),
4624
4828
  ...locationStyles.value
4625
- },
4829
+ }, props.style],
4626
4830
  "role": "progressbar",
4627
4831
  "aria-hidden": props.active ? 'false' : 'true',
4628
4832
  "aria-valuemin": "0",
@@ -4831,8 +5035,9 @@
4831
5035
  type: Boolean,
4832
5036
  default: true
4833
5037
  },
5038
+ text: String,
4834
5039
  ...makeBorderProps(),
4835
- ...makeRoundedProps(),
5040
+ ...makeComponentProps(),
4836
5041
  ...makeDensityProps(),
4837
5042
  ...makeDimensionProps(),
4838
5043
  ...makeElevationProps(),
@@ -4840,6 +5045,7 @@
4840
5045
  ...makeLoaderProps(),
4841
5046
  ...makeLocationProps(),
4842
5047
  ...makePositionProps(),
5048
+ ...makeRoundedProps(),
4843
5049
  ...makeRouterProps(),
4844
5050
  ...makeSizeProps(),
4845
5051
  ...makeTagProps({
@@ -4937,8 +5143,8 @@
4937
5143
  'v-btn--icon': !!props.icon,
4938
5144
  'v-btn--loading': props.loading,
4939
5145
  '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],
5146
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
5147
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value, props.style],
4942
5148
  "disabled": isDisabled.value || undefined,
4943
5149
  "href": link.href.value,
4944
5150
  "onClick": e => {
@@ -4976,7 +5182,9 @@
4976
5182
  icon: props.icon
4977
5183
  }
4978
5184
  }
4979
- }, slots.default)]), !props.icon && hasAppend && vue.createVNode("span", {
5185
+ }, {
5186
+ default: () => [slots.default?.() ?? props.text]
5187
+ })]), !props.icon && hasAppend && vue.createVNode("span", {
4980
5188
  "key": "append",
4981
5189
  "class": "v-btn__append"
4982
5190
  }, [!slots.append ? vue.createVNode(VIcon, {
@@ -5013,15 +5221,17 @@
5013
5221
  icon: {
5014
5222
  type: IconValue,
5015
5223
  default: '$menu'
5016
- }
5224
+ },
5225
+ ...makeComponentProps()
5017
5226
  },
5018
5227
  setup(props, _ref) {
5019
5228
  let {
5020
5229
  slots
5021
5230
  } = _ref;
5022
5231
  useRender(() => vue.createVNode(VBtn, {
5023
- "class": "v-app-bar-nav-icon",
5024
- "icon": props.icon
5232
+ "class": ['v-app-bar-nav-icon', props.class],
5233
+ "icon": props.icon,
5234
+ "style": props.style
5025
5235
  }, slots));
5026
5236
  return {};
5027
5237
  }
@@ -5029,9 +5239,12 @@
5029
5239
 
5030
5240
  const VToolbarItems = genericComponent()({
5031
5241
  name: 'VToolbarItems',
5032
- props: makeVariantProps({
5033
- variant: 'text'
5034
- }),
5242
+ props: {
5243
+ ...makeComponentProps(),
5244
+ ...makeVariantProps({
5245
+ variant: 'text'
5246
+ })
5247
+ },
5035
5248
  setup(props, _ref) {
5036
5249
  let {
5037
5250
  slots
@@ -5044,7 +5257,8 @@
5044
5257
  }
5045
5258
  });
5046
5259
  useRender(() => vue.createVNode("div", {
5047
- "class": "v-toolbar-items"
5260
+ "class": ['v-toolbar-items', props.class],
5261
+ "style": props.style
5048
5262
  }, [slots.default?.()]));
5049
5263
  return {};
5050
5264
  }
@@ -5106,6 +5320,7 @@
5106
5320
  type: String,
5107
5321
  validator: val => allowedTypes.includes(val)
5108
5322
  },
5323
+ ...makeComponentProps(),
5109
5324
  ...makeDensityProps(),
5110
5325
  ...makeDimensionProps(),
5111
5326
  ...makeElevationProps(),
@@ -5188,8 +5403,8 @@
5188
5403
  [`v-alert--border-${props.border === true ? 'start' : props.border}`]: true
5189
5404
  }, {
5190
5405
  '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],
5406
+ }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
5407
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
5193
5408
  "role": "alert"
5194
5409
  }, {
5195
5410
  default: () => [genOverlays(false, 'v-alert'), props.border && vue.createVNode("div", {
@@ -5283,6 +5498,7 @@
5283
5498
  props: {
5284
5499
  text: String,
5285
5500
  clickable: Boolean,
5501
+ ...makeComponentProps(),
5286
5502
  ...makeThemeProps()
5287
5503
  },
5288
5504
  setup(props, _ref) {
@@ -5292,7 +5508,8 @@
5292
5508
  useRender(() => vue.createVNode("label", {
5293
5509
  "class": ['v-label', {
5294
5510
  'v-label--clickable': props.clickable
5295
- }]
5511
+ }, props.class],
5512
+ "style": props.style
5296
5513
  }, [props.text, slots.default?.()]));
5297
5514
  return {};
5298
5515
  }
@@ -5301,7 +5518,8 @@
5301
5518
  const VFieldLabel = genericComponent()({
5302
5519
  name: 'VFieldLabel',
5303
5520
  props: {
5304
- floating: Boolean
5521
+ floating: Boolean,
5522
+ ...makeComponentProps()
5305
5523
  },
5306
5524
  setup(props, _ref) {
5307
5525
  let {
@@ -5310,7 +5528,8 @@
5310
5528
  useRender(() => vue.createVNode(VLabel, {
5311
5529
  "class": ['v-field-label', {
5312
5530
  'v-field-label--floating': props.floating
5313
- }],
5531
+ }, props.class],
5532
+ "style": props.style,
5314
5533
  "aria-hidden": props.floating || undefined
5315
5534
  }, slots));
5316
5535
  return {};
@@ -5350,7 +5569,7 @@
5350
5569
 
5351
5570
  // Types
5352
5571
 
5353
- const allowedVariants$1 = ['underlined', 'outlined', 'filled', 'solo', 'plain'];
5572
+ const allowedVariants$1 = ['underlined', 'outlined', 'filled', 'solo', 'solo-inverted', 'solo-filled', 'plain'];
5354
5573
  const makeVFieldProps = propsFactory({
5355
5574
  appendInnerIcon: IconValue,
5356
5575
  bgColor: String,
@@ -5361,9 +5580,11 @@
5361
5580
  },
5362
5581
  active: Boolean,
5363
5582
  color: String,
5583
+ baseColor: String,
5364
5584
  dirty: Boolean,
5365
5585
  disabled: Boolean,
5366
5586
  error: Boolean,
5587
+ flat: Boolean,
5367
5588
  label: String,
5368
5589
  persistentClear: Boolean,
5369
5590
  prependInnerIcon: IconValue,
@@ -5377,8 +5598,10 @@
5377
5598
  'onClick:clear': EventProp(),
5378
5599
  'onClick:appendInner': EventProp(),
5379
5600
  'onClick:prependInner': EventProp(),
5380
- ...makeThemeProps(),
5381
- ...makeLoaderProps()
5601
+ ...makeComponentProps(),
5602
+ ...makeLoaderProps(),
5603
+ ...makeRoundedProps(),
5604
+ ...makeThemeProps()
5382
5605
  }, 'v-field');
5383
5606
  const VField = genericComponent()({
5384
5607
  name: 'VField',
@@ -5413,6 +5636,9 @@
5413
5636
  const {
5414
5637
  InputIcon
5415
5638
  } = useInputIcon(props);
5639
+ const {
5640
+ roundedClasses
5641
+ } = useRounded(props);
5416
5642
  const isActive = vue.computed(() => props.dirty || props.active);
5417
5643
  const hasLabel = vue.computed(() => !props.singleLine && !!(props.label || slots.label));
5418
5644
  const uid = getUid();
@@ -5429,7 +5655,7 @@
5429
5655
  textColorClasses,
5430
5656
  textColorStyles
5431
5657
  } = useTextColor(vue.computed(() => {
5432
- return isActive.value && isFocused.value && !props.error && !props.disabled ? props.color : undefined;
5658
+ return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : props.baseColor;
5433
5659
  }));
5434
5660
  vue.watch(isActive, val => {
5435
5661
  if (hasLabel.value) {
@@ -5498,6 +5724,7 @@
5498
5724
  'v-field--disabled': props.disabled,
5499
5725
  'v-field--dirty': props.dirty,
5500
5726
  'v-field--error': props.error,
5727
+ 'v-field--flat': props.flat,
5501
5728
  'v-field--has-background': !!props.bgColor,
5502
5729
  'v-field--persistent-clear': props.persistentClear,
5503
5730
  'v-field--prepended': hasPrepend,
@@ -5505,8 +5732,8 @@
5505
5732
  'v-field--single-line': props.singleLine,
5506
5733
  'v-field--no-label': !label,
5507
5734
  [`v-field--variant-${props.variant}`]: true
5508
- }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value],
5509
- "style": [backgroundColorStyles.value, textColorStyles.value],
5735
+ }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, props.class],
5736
+ "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
5510
5737
  "onClick": onClick
5511
5738
  }, attrs), [vue.createVNode("div", {
5512
5739
  "class": "v-field__overlay"
@@ -5525,7 +5752,7 @@
5525
5752
  }, null), slots['prepend-inner']?.(slotProps.value)]), vue.createVNode("div", {
5526
5753
  "class": "v-field__field",
5527
5754
  "data-no-activator": ""
5528
- }, [['solo', 'filled'].includes(props.variant) && hasLabel.value && vue.createVNode(VFieldLabel, {
5755
+ }, [['filled', 'solo', 'solo-inverted', 'solo-filled'].includes(props.variant) && hasLabel.value && vue.createVNode(VFieldLabel, {
5529
5756
  "key": "floating-label",
5530
5757
  "ref": floatingLabelRef,
5531
5758
  "class": [textColorClasses.value],
@@ -5594,7 +5821,7 @@
5594
5821
  });
5595
5822
  // TODO: this is kinda slow, might be better to implicitly inherit props instead
5596
5823
  function filterFieldProps(attrs) {
5597
- const keys = Object.keys(VField.props).filter(k => !isOn(k));
5824
+ const keys = Object.keys(VField.props).filter(k => !isOn(k) && k !== 'class' && k !== 'style');
5598
5825
  return pick(attrs, keys);
5599
5826
  }
5600
5827
 
@@ -5609,6 +5836,7 @@
5609
5836
  type: [Array, String],
5610
5837
  default: () => []
5611
5838
  },
5839
+ ...makeComponentProps(),
5612
5840
  ...makeTransitionProps({
5613
5841
  transition: {
5614
5842
  component: VSlideYTransition,
@@ -5629,8 +5857,8 @@
5629
5857
  useRender(() => vue.createVNode(MaybeTransition, {
5630
5858
  "transition": props.transition,
5631
5859
  "tag": "div",
5632
- "class": ['v-messages', textColorClasses.value],
5633
- "style": textColorStyles.value,
5860
+ "class": ['v-messages', textColorClasses.value, props.class],
5861
+ "style": [textColorStyles.value, props.style],
5634
5862
  "role": "alert",
5635
5863
  "aria-live": "polite"
5636
5864
  }, {
@@ -5926,6 +6154,7 @@
5926
6154
  },
5927
6155
  'onClick:prepend': EventProp(),
5928
6156
  'onClick:append': EventProp(),
6157
+ ...makeComponentProps(),
5929
6158
  ...makeDensityProps(),
5930
6159
  ...makeValidationProps()
5931
6160
  }, 'v-input');
@@ -5993,7 +6222,8 @@
5993
6222
  const hasMessages = messages.value.length > 0;
5994
6223
  const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details);
5995
6224
  return vue.createVNode("div", {
5996
- "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value]
6225
+ "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value, props.class],
6226
+ "style": props.style
5997
6227
  }, [hasPrepend && vue.createVNode("div", {
5998
6228
  "key": "prepend",
5999
6229
  "class": "v-input__prepend"
@@ -6036,6 +6266,7 @@
6036
6266
  type: [Number, String],
6037
6267
  default: 0
6038
6268
  },
6269
+ ...makeComponentProps(),
6039
6270
  ...makeTransitionProps({
6040
6271
  transition: {
6041
6272
  component: VSlideYTransition
@@ -6053,7 +6284,8 @@
6053
6284
  "transition": props.transition
6054
6285
  }, {
6055
6286
  default: () => [vue.withDirectives(vue.createVNode("div", {
6056
- "class": "v-counter"
6287
+ "class": ['v-counter', props.class],
6288
+ "style": props.style
6057
6289
  }, [slots.default ? slots.default({
6058
6290
  counter: counter.value,
6059
6291
  max: props.max,
@@ -6256,7 +6488,8 @@
6256
6488
  'v-text-field--prefixed': props.prefix,
6257
6489
  'v-text-field--suffixed': props.suffix,
6258
6490
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
6259
- }]
6491
+ }, props.class],
6492
+ "style": props.style
6260
6493
  }, rootAttrs, inputProps, {
6261
6494
  "focused": isFocused.value
6262
6495
  }), {
@@ -6372,6 +6605,7 @@
6372
6605
  type: String,
6373
6606
  default: 'VSelectionControl'
6374
6607
  },
6608
+ ...makeComponentProps(),
6375
6609
  ...makeSelectionControlGroupProps()
6376
6610
  },
6377
6611
  emits: {
@@ -6419,7 +6653,8 @@
6419
6653
  useRender(() => vue.createVNode("div", {
6420
6654
  "class": ['v-selection-control-group', {
6421
6655
  'v-selection-control-group--inline': props.inline
6422
- }],
6656
+ }, props.class],
6657
+ "style": props.style,
6423
6658
  "role": props.type === 'radio' ? 'radiogroup' : undefined
6424
6659
  }, [slots.default?.()]));
6425
6660
  return {};
@@ -6433,6 +6668,7 @@
6433
6668
  trueValue: null,
6434
6669
  falseValue: null,
6435
6670
  value: null,
6671
+ ...makeComponentProps(),
6436
6672
  ...makeSelectionControlGroupProps()
6437
6673
  }, 'v-selection-control');
6438
6674
  function useSelectionControl(props) {
@@ -6547,8 +6783,10 @@
6547
6783
  'v-selection-control--focused': isFocused.value,
6548
6784
  'v-selection-control--focus-visible': isFocusVisible.value,
6549
6785
  'v-selection-control--inline': props.inline
6550
- }, densityClasses.value]
6551
- }, rootAttrs), [vue.createVNode("div", {
6786
+ }, densityClasses.value, props.class]
6787
+ }, rootAttrs, {
6788
+ "style": props.style
6789
+ }), [vue.createVNode("div", {
6552
6790
  "class": ['v-selection-control__wrapper', textColorClasses.value],
6553
6791
  "style": textColorStyles.value
6554
6792
  }, [slots.default?.(), vue.withDirectives(vue.createVNode("div", {
@@ -6630,7 +6868,8 @@
6630
6868
  useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
6631
6869
  "modelValue": model.value,
6632
6870
  "onUpdate:modelValue": [$event => model.value = $event, onChange],
6633
- "class": "v-checkbox-btn",
6871
+ "class": ['v-checkbox-btn', props.class],
6872
+ "style": props.style,
6634
6873
  "type": "checkbox",
6635
6874
  "inline": true,
6636
6875
  "falseIcon": falseIcon.value,
@@ -6670,10 +6909,11 @@
6670
6909
  const [inputProps, _1] = VInput.filterProps(props);
6671
6910
  const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6672
6911
  return vue.createVNode(VInput, vue.mergeProps({
6673
- "class": "v-checkbox"
6912
+ "class": ['v-checkbox', props.class]
6674
6913
  }, inputAttrs, inputProps, {
6675
6914
  "id": id.value,
6676
- "focused": isFocused.value
6915
+ "focused": isFocused.value,
6916
+ "style": props.style
6677
6917
  }), {
6678
6918
  ...slots,
6679
6919
  default: _ref2 => {
@@ -6704,6 +6944,7 @@
6704
6944
  end: Boolean,
6705
6945
  icon: IconValue,
6706
6946
  image: String,
6947
+ ...makeComponentProps(),
6707
6948
  ...makeDensityProps(),
6708
6949
  ...makeRoundedProps(),
6709
6950
  ...makeSizeProps(),
@@ -6742,8 +6983,8 @@
6742
6983
  "class": ['v-avatar', {
6743
6984
  'v-avatar--start': props.start,
6744
6985
  'v-avatar--end': props.end
6745
- }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
6746
- "style": [colorStyles.value, sizeStyles.value]
6986
+ }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6987
+ "style": [colorStyles.value, sizeStyles.value, props.style]
6747
6988
  }, {
6748
6989
  default: () => [props.image ? vue.createVNode(VImg, {
6749
6990
  "key": "image",
@@ -6771,6 +7012,7 @@
6771
7012
  type: Function,
6772
7013
  default: deepEqual
6773
7014
  },
7015
+ ...makeComponentProps(),
6774
7016
  ...makeGroupProps({
6775
7017
  selectedClass: 'v-chip--selected'
6776
7018
  }),
@@ -6808,7 +7050,8 @@
6808
7050
  useRender(() => vue.createVNode(props.tag, {
6809
7051
  "class": ['v-chip-group', {
6810
7052
  'v-chip-group--column': props.column
6811
- }, themeClasses.value]
7053
+ }, themeClasses.value, props.class],
7054
+ "style": props.style
6812
7055
  }, {
6813
7056
  default: () => [slots.default?.({
6814
7057
  isSelected,
@@ -6822,8 +7065,6 @@
6822
7065
  }
6823
7066
  });
6824
7067
 
6825
- // Types
6826
-
6827
7068
  const VChip = genericComponent()({
6828
7069
  name: 'VChip',
6829
7070
  directives: {
@@ -6868,6 +7109,7 @@
6868
7109
  onClick: EventProp(),
6869
7110
  onClickOnce: EventProp(),
6870
7111
  ...makeBorderProps(),
7112
+ ...makeComponentProps(),
6871
7113
  ...makeDensityProps(),
6872
7114
  ...makeElevationProps(),
6873
7115
  ...makeGroupItemProps(),
@@ -6960,8 +7202,8 @@
6960
7202
  'v-chip--link': isClickable.value,
6961
7203
  'v-chip--filter': hasFilter,
6962
7204
  '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],
7205
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value, props.class],
7206
+ "style": [hasColor ? colorStyles.value : undefined, props.style],
6965
7207
  "disabled": props.disabled || undefined,
6966
7208
  "draggable": props.draggable,
6967
7209
  "href": link.href.value,
@@ -7070,6 +7312,7 @@
7070
7312
  length: [Number, String],
7071
7313
  thickness: [Number, String],
7072
7314
  vertical: Boolean,
7315
+ ...makeComponentProps(),
7073
7316
  ...makeThemeProps()
7074
7317
  },
7075
7318
  setup(props, _ref) {
@@ -7098,8 +7341,8 @@
7098
7341
  'v-divider': true,
7099
7342
  'v-divider--inset': props.inset,
7100
7343
  'v-divider--vertical': props.vertical
7101
- }, themeClasses.value, textColorClasses.value],
7102
- "style": [dividerStyles.value, textColorStyles.value],
7344
+ }, themeClasses.value, textColorClasses.value, props.class],
7345
+ "style": [dividerStyles.value, textColorStyles.value, props.style],
7103
7346
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
7104
7347
  "role": `${attrs.role || 'separator'}`
7105
7348
  }, null));
@@ -7598,6 +7841,7 @@
7598
7841
  fluid: Boolean,
7599
7842
  subgroup: Boolean,
7600
7843
  value: null,
7844
+ ...makeComponentProps(),
7601
7845
  ...makeTagProps()
7602
7846
  }, 'v-list-group');
7603
7847
  const VListGroup = genericComponent()({
@@ -7646,7 +7890,8 @@
7646
7890
  'v-list-group--fluid': props.fluid,
7647
7891
  'v-list-group--subgroup': props.subgroup,
7648
7892
  'v-list-group--open': isOpen.value
7649
- }]
7893
+ }, props.class],
7894
+ "style": props.style
7650
7895
  }, {
7651
7896
  default: () => [slots.activator && vue.createVNode(VDefaultsProvider, {
7652
7897
  "defaults": activatorDefaults.value
@@ -7713,6 +7958,7 @@
7713
7958
  onClick: EventProp(),
7714
7959
  onClickOnce: EventProp(),
7715
7960
  ...makeBorderProps(),
7961
+ ...makeComponentProps(),
7716
7962
  ...makeDensityProps(),
7717
7963
  ...makeDimensionProps(),
7718
7964
  ...makeElevationProps(),
@@ -7823,8 +8069,8 @@
7823
8069
  'v-list-item--nav': props.nav,
7824
8070
  'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,
7825
8071
  [`${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],
8072
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
8073
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, props.style],
7828
8074
  "href": link.href.value,
7829
8075
  "tabindex": isClickable.value ? 0 : undefined,
7830
8076
  "onClick": onClick,
@@ -7917,6 +8163,7 @@
7917
8163
  inset: Boolean,
7918
8164
  sticky: Boolean,
7919
8165
  title: String,
8166
+ ...makeComponentProps(),
7920
8167
  ...makeTagProps()
7921
8168
  },
7922
8169
  setup(props, _ref) {
@@ -7933,10 +8180,10 @@
7933
8180
  "class": ['v-list-subheader', {
7934
8181
  'v-list-subheader--inset': props.inset,
7935
8182
  'v-list-subheader--sticky': props.sticky
7936
- }, textColorClasses.value],
7937
- "style": {
8183
+ }, textColorClasses.value, props.class],
8184
+ "style": [{
7938
8185
  textColorStyles
7939
- }
8186
+ }, props.style]
7940
8187
  }, {
7941
8188
  default: () => [hasText && vue.createVNode("div", {
7942
8189
  "class": "v-list-subheader__text"
@@ -8156,6 +8403,7 @@
8156
8403
  openStrategy: 'list'
8157
8404
  }),
8158
8405
  ...makeBorderProps(),
8406
+ ...makeComponentProps(),
8159
8407
  ...makeDensityProps(),
8160
8408
  ...makeDimensionProps(),
8161
8409
  ...makeElevationProps(),
@@ -8267,8 +8515,8 @@
8267
8515
  "class": ['v-list', {
8268
8516
  'v-list--disabled': props.disabled,
8269
8517
  '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],
8518
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class],
8519
+ "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
8272
8520
  "role": "listbox",
8273
8521
  "aria-activedescendant": undefined,
8274
8522
  "onFocusin": onFocusin,
@@ -8296,6 +8544,7 @@
8296
8544
  props: {
8297
8545
  start: Boolean,
8298
8546
  end: Boolean,
8547
+ ...makeComponentProps(),
8299
8548
  ...makeTagProps()
8300
8549
  },
8301
8550
  setup(props, _ref) {
@@ -8306,7 +8555,8 @@
8306
8555
  "class": ['v-list-item-action', {
8307
8556
  'v-list-item-action--start': props.start,
8308
8557
  'v-list-item-action--end': props.end
8309
- }]
8558
+ }, props.class],
8559
+ "style": props.style
8310
8560
  }, slots));
8311
8561
  return {};
8312
8562
  }
@@ -8317,6 +8567,7 @@
8317
8567
  props: {
8318
8568
  start: Boolean,
8319
8569
  end: Boolean,
8570
+ ...makeComponentProps(),
8320
8571
  ...makeTagProps()
8321
8572
  },
8322
8573
  setup(props, _ref) {
@@ -8328,7 +8579,8 @@
8328
8579
  "class": ['v-list-item-media', {
8329
8580
  'v-list-item-media--start': props.start,
8330
8581
  'v-list-item-media--end': props.end
8331
- }]
8582
+ }, props.class],
8583
+ "style": props.style
8332
8584
  }, slots);
8333
8585
  });
8334
8586
  return {};
@@ -9569,6 +9821,7 @@
9569
9821
  default: 2000
9570
9822
  },
9571
9823
  ...makeActivatorProps(),
9824
+ ...makeComponentProps(),
9572
9825
  ...makeDimensionProps(),
9573
9826
  ...makeLazyProps(),
9574
9827
  ...makeLocationStrategyProps(),
@@ -9736,10 +9989,10 @@
9736
9989
  'v-overlay--absolute': props.absolute || props.contained,
9737
9990
  'v-overlay--active': isActive.value,
9738
9991
  'v-overlay--contained': props.contained
9739
- }, themeClasses.value, rtlClasses.value],
9992
+ }, themeClasses.value, rtlClasses.value, props.class],
9740
9993
  "style": [stackStyles.value, {
9741
9994
  top: convertToUnit(top.value)
9742
- }],
9995
+ }, props.style],
9743
9996
  "ref": root
9744
9997
  }, scopeId, attrs), [vue.createVNode(Scrim, vue.mergeProps({
9745
9998
  "color": scrimColor,
@@ -9845,7 +10098,8 @@
9845
10098
  const [overlayProps] = VOverlay.filterProps(props);
9846
10099
  return vue.createVNode(VOverlay, vue.mergeProps({
9847
10100
  "ref": overlay,
9848
- "class": ['v-menu']
10101
+ "class": ['v-menu', props.class],
10102
+ "style": props.style
9849
10103
  }, overlayProps, {
9850
10104
  "modelValue": isActive.value,
9851
10105
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -10064,7 +10318,8 @@
10064
10318
  'v-select--chips': !!props.chips,
10065
10319
  [`v-select--${props.multiple ? 'multiple' : 'single'}`]: true,
10066
10320
  'v-select--selected': model.value.length
10067
- }],
10321
+ }, props.class],
10322
+ "style": props.style,
10068
10323
  "appendInnerIcon": props.menuIcon,
10069
10324
  "readonly": true,
10070
10325
  "placeholder": placeholder,
@@ -10507,7 +10762,8 @@
10507
10762
  'v-autocomplete--selecting-index': selectionIndex.value > -1,
10508
10763
  [`v-autocomplete--${props.multiple ? 'multiple' : 'single'}`]: true,
10509
10764
  'v-autocomplete--selection-slot': !!slots.selection
10510
- }],
10765
+ }, props.class],
10766
+ "style": props.style,
10511
10767
  "appendInnerIcon": props.menuIcon,
10512
10768
  "readonly": props.readonly,
10513
10769
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -10621,8 +10877,6 @@
10621
10877
  }
10622
10878
  });
10623
10879
 
10624
- // Types
10625
-
10626
10880
  const VBadge = genericComponent()({
10627
10881
  name: 'VBadge',
10628
10882
  inheritAttrs: false,
@@ -10646,6 +10900,7 @@
10646
10900
  offsetX: [Number, String],
10647
10901
  offsetY: [Number, String],
10648
10902
  textColor: String,
10903
+ ...makeComponentProps(),
10649
10904
  ...makeLocationProps({
10650
10905
  location: 'top end'
10651
10906
  }),
@@ -10690,8 +10945,10 @@
10690
10945
  'v-badge--dot': props.dot,
10691
10946
  'v-badge--floating': props.floating,
10692
10947
  'v-badge--inline': props.inline
10693
- }]
10694
- }, attrs), {
10948
+ }, props.class]
10949
+ }, attrs, {
10950
+ "style": props.style
10951
+ }), {
10695
10952
  default: () => [vue.createVNode("div", {
10696
10953
  "class": "v-badge__wrapper"
10697
10954
  }, [ctx.slots.default?.(), vue.createVNode(MaybeTransition, {
@@ -10718,7 +10975,8 @@
10718
10975
  name: 'VBannerActions',
10719
10976
  props: {
10720
10977
  color: String,
10721
- density: String
10978
+ density: String,
10979
+ ...makeComponentProps()
10722
10980
  },
10723
10981
  setup(props, _ref) {
10724
10982
  let {
@@ -10732,7 +10990,8 @@
10732
10990
  }
10733
10991
  });
10734
10992
  useRender(() => vue.createVNode("div", {
10735
- "class": "v-banner-actions"
10993
+ "class": ['v-banner-actions', props.class],
10994
+ "style": props.style
10736
10995
  }, [slots.default?.()]));
10737
10996
  return {};
10738
10997
  }
@@ -10753,6 +11012,7 @@
10753
11012
  sticky: Boolean,
10754
11013
  text: String,
10755
11014
  ...makeBorderProps(),
11015
+ ...makeComponentProps(),
10756
11016
  ...makeDensityProps(),
10757
11017
  ...makeDimensionProps(),
10758
11018
  ...makeElevationProps(),
@@ -10810,8 +11070,8 @@
10810
11070
  'v-banner--stacked': props.stacked || mobile.value,
10811
11071
  'v-banner--sticky': props.sticky,
10812
11072
  [`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],
11073
+ }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11074
+ "style": [dimensionStyles.value, locationStyles.value, props.style],
10815
11075
  "role": "banner"
10816
11076
  }, {
10817
11077
  default: () => [hasPrepend && vue.createVNode("div", {
@@ -10867,6 +11127,7 @@
10867
11127
  default: true
10868
11128
  },
10869
11129
  ...makeBorderProps(),
11130
+ ...makeComponentProps(),
10870
11131
  ...makeDensityProps(),
10871
11132
  ...makeElevationProps(),
10872
11133
  ...makeRoundedProps(),
@@ -10941,11 +11202,11 @@
10941
11202
  'v-bottom-navigation--active': isActive.value,
10942
11203
  'v-bottom-navigation--grow': props.grow,
10943
11204
  'v-bottom-navigation--shift': props.mode === 'shift'
10944
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value],
11205
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
10945
11206
  "style": [backgroundColorStyles.value, layoutItemStyles.value, {
10946
11207
  height: convertToUnit(height.value),
10947
11208
  transform: `translateY(${convertToUnit(!isActive.value ? 100 : 0, '%')})`
10948
- }, ssrBootStyles.value]
11209
+ }, ssrBootStyles.value, props.style]
10949
11210
  }, {
10950
11211
  default: () => [slots.default && vue.createVNode("div", {
10951
11212
  "class": "v-bottom-navigation__content"
@@ -10959,14 +11220,16 @@
10959
11220
  const VBreadcrumbsDivider = genericComponent()({
10960
11221
  name: 'VBreadcrumbsDivider',
10961
11222
  props: {
10962
- divider: [Number, String]
11223
+ divider: [Number, String],
11224
+ ...makeComponentProps()
10963
11225
  },
10964
11226
  setup(props, _ref) {
10965
11227
  let {
10966
11228
  slots
10967
11229
  } = _ref;
10968
11230
  useRender(() => vue.createVNode("li", {
10969
- "class": "v-breadcrumbs-divider"
11231
+ "class": ['v-breadcrumbs-divider', props.class],
11232
+ "style": props.style
10970
11233
  }, [slots?.default?.() ?? props.divider]));
10971
11234
  return {};
10972
11235
  }
@@ -10981,6 +11244,7 @@
10981
11244
  color: String,
10982
11245
  disabled: Boolean,
10983
11246
  title: String,
11247
+ ...makeComponentProps(),
10984
11248
  ...makeRouterProps(),
10985
11249
  ...makeTagProps({
10986
11250
  tag: 'li'
@@ -11006,8 +11270,8 @@
11006
11270
  'v-breadcrumbs-item--disabled': props.disabled,
11007
11271
  'v-breadcrumbs-item--link': link.isLink.value,
11008
11272
  [`${props.activeClass}`]: isActive.value && props.activeClass
11009
- }, textColorClasses.value],
11010
- "style": [textColorStyles.value],
11273
+ }, textColorClasses.value, props.class],
11274
+ "style": [textColorStyles.value, props.style],
11011
11275
  "href": link.href.value,
11012
11276
  "aria-current": isActive.value ? 'page' : undefined,
11013
11277
  "onClick": link.navigate
@@ -11038,6 +11302,7 @@
11038
11302
  type: Array,
11039
11303
  default: () => []
11040
11304
  },
11305
+ ...makeComponentProps(),
11041
11306
  ...makeDensityProps(),
11042
11307
  ...makeRoundedProps(),
11043
11308
  ...makeTagProps({
@@ -11083,8 +11348,8 @@
11083
11348
  useRender(() => {
11084
11349
  const hasPrepend = !!(slots.prepend || props.icon);
11085
11350
  return vue.createVNode(props.tag, {
11086
- "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
11087
- "style": backgroundColorStyles.value
11351
+ "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value, props.class],
11352
+ "style": [backgroundColorStyles.value, props.style]
11088
11353
  }, {
11089
11354
  default: () => [hasPrepend && vue.createVNode("div", {
11090
11355
  "key": "prepend",
@@ -11128,11 +11393,10 @@
11128
11393
  }
11129
11394
  });
11130
11395
 
11131
- // Types
11132
-
11133
- const VCardActions = defineComponent({
11396
+ const VCardActions = genericComponent()({
11134
11397
  name: 'VCardActions',
11135
- setup(_, _ref) {
11398
+ props: makeComponentProps(),
11399
+ setup(props, _ref) {
11136
11400
  let {
11137
11401
  slots
11138
11402
  } = _ref;
@@ -11142,7 +11406,8 @@
11142
11406
  }
11143
11407
  });
11144
11408
  useRender(() => vue.createVNode("div", {
11145
- "class": "v-card-actions"
11409
+ "class": ['v-card-actions', props.class],
11410
+ "style": props.style
11146
11411
  }, [slots.default?.()]));
11147
11412
  return {};
11148
11413
  }
@@ -11152,8 +11417,6 @@
11152
11417
 
11153
11418
  const VCardTitle = createSimpleFunctional('v-card-title');
11154
11419
 
11155
- // Types
11156
-
11157
11420
  const VCardItem = genericComponent()({
11158
11421
  name: 'VCardItem',
11159
11422
  props: {
@@ -11163,6 +11426,7 @@
11163
11426
  prependIcon: IconValue,
11164
11427
  subtitle: String,
11165
11428
  title: String,
11429
+ ...makeComponentProps(),
11166
11430
  ...makeDensityProps()
11167
11431
  },
11168
11432
  setup(props, _ref) {
@@ -11177,7 +11441,8 @@
11177
11441
  const hasTitle = !!(props.title || slots.title);
11178
11442
  const hasSubtitle = !!(props.subtitle || slots.subtitle);
11179
11443
  return vue.createVNode("div", {
11180
- "class": "v-card-item"
11444
+ "class": ['v-card-item', props.class],
11445
+ "style": props.style
11181
11446
  }, [hasPrepend && vue.createVNode("div", {
11182
11447
  "key": "prepend",
11183
11448
  "class": "v-card-item__prepend"
@@ -11259,8 +11524,8 @@
11259
11524
  subtitle: String,
11260
11525
  text: String,
11261
11526
  title: String,
11262
- ...makeThemeProps(),
11263
11527
  ...makeBorderProps(),
11528
+ ...makeComponentProps(),
11264
11529
  ...makeDensityProps(),
11265
11530
  ...makeDimensionProps(),
11266
11531
  ...makeElevationProps(),
@@ -11270,6 +11535,7 @@
11270
11535
  ...makeRoundedProps(),
11271
11536
  ...makeRouterProps(),
11272
11537
  ...makeTagProps(),
11538
+ ...makeThemeProps(),
11273
11539
  ...makeVariantProps({
11274
11540
  variant: 'elevated'
11275
11541
  })
@@ -11330,8 +11596,8 @@
11330
11596
  'v-card--flat': props.flat,
11331
11597
  'v-card--hover': props.hover && !(props.disabled || props.flat),
11332
11598
  '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],
11599
+ }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
11600
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
11335
11601
  "href": link.href.value,
11336
11602
  "onClick": isClickable.value && link.navigate,
11337
11603
  "tabindex": props.disabled ? -1 : undefined
@@ -11527,6 +11793,7 @@
11527
11793
  mandatory: {
11528
11794
  default: 'force'
11529
11795
  },
11796
+ ...makeComponentProps(),
11530
11797
  ...makeTagProps(),
11531
11798
  ...makeThemeProps()
11532
11799
  }, 'v-window');
@@ -11642,7 +11909,8 @@
11642
11909
  "ref": rootRef,
11643
11910
  "class": ['v-window', {
11644
11911
  'v-window--show-arrows-on-hover': props.showArrows === 'hover'
11645
- }, themeClasses.value]
11912
+ }, themeClasses.value, props.class],
11913
+ "style": props.style
11646
11914
  }, {
11647
11915
  default: () => [vue.createVNode("div", {
11648
11916
  "class": "v-window__container",
@@ -11727,10 +11995,10 @@
11727
11995
  "class": ['v-carousel', {
11728
11996
  'v-carousel--hide-delimiter-background': props.hideDelimiterBackground,
11729
11997
  'v-carousel--vertical-delimiters': props.verticalDelimiters
11730
- }],
11731
- "style": {
11998
+ }, props.class],
11999
+ "style": [{
11732
12000
  height: convertToUnit(props.height)
11733
- },
12001
+ }, props.style],
11734
12002
  "continuous": true,
11735
12003
  "mandatory": "force",
11736
12004
  "showArrows": props.showArrows
@@ -11796,6 +12064,7 @@
11796
12064
  type: [Boolean, String],
11797
12065
  default: undefined
11798
12066
  },
12067
+ ...makeComponentProps(),
11799
12068
  ...makeGroupItemProps(),
11800
12069
  ...makeLazyProps()
11801
12070
  },
@@ -11882,7 +12151,8 @@
11882
12151
  "disabled": !isBooted.value
11883
12152
  }, {
11884
12153
  default: () => [vue.withDirectives(vue.createVNode("div", {
11885
- "class": ['v-window-item', groupItem.selectedClass.value]
12154
+ "class": ['v-window-item', groupItem.selectedClass.value, props.class],
12155
+ "style": props.style
11886
12156
  }, [hasContent.value && slots.default?.()]), [[vue.vShow, groupItem.isSelected.value]])]
11887
12157
  }));
11888
12158
  return {};
@@ -11895,7 +12165,8 @@
11895
12165
  name: 'VCarouselItem',
11896
12166
  inheritAttrs: false,
11897
12167
  props: {
11898
- value: null
12168
+ value: null,
12169
+ ...makeComponentProps()
11899
12170
  },
11900
12171
  setup(props, _ref) {
11901
12172
  let {
@@ -11903,7 +12174,8 @@
11903
12174
  attrs
11904
12175
  } = _ref;
11905
12176
  useRender(() => vue.createVNode(VWindowItem, {
11906
- "class": "v-carousel-item",
12177
+ "class": ['v-carousel-item', props.class],
12178
+ "style": props.style,
11907
12179
  "value": props.value
11908
12180
  }, {
11909
12181
  default: () => [vue.createVNode(VImg, attrs, slots)]
@@ -11916,6 +12188,7 @@
11916
12188
  const makeVSheetProps = propsFactory({
11917
12189
  color: String,
11918
12190
  ...makeBorderProps(),
12191
+ ...makeComponentProps(),
11919
12192
  ...makeDimensionProps(),
11920
12193
  ...makeElevationProps(),
11921
12194
  ...makeLocationProps(),
@@ -11959,8 +12232,8 @@
11959
12232
  roundedClasses
11960
12233
  } = useRounded(props);
11961
12234
  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]
12235
+ "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, props.class],
12236
+ "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value, props.style]
11964
12237
  }, slots));
11965
12238
  return {};
11966
12239
  }
@@ -11986,7 +12259,8 @@
11986
12259
  width: {
11987
12260
  type: [Number, String],
11988
12261
  default: 300
11989
- }
12262
+ },
12263
+ ...makeComponentProps()
11990
12264
  },
11991
12265
  emits: {
11992
12266
  'update:color': color => true,
@@ -12131,7 +12405,8 @@
12131
12405
  vue.onMounted(() => updateCanvas());
12132
12406
  useRender(() => vue.createVNode("div", {
12133
12407
  "ref": resizeRef,
12134
- "class": "v-color-picker-canvas",
12408
+ "class": ['v-color-picker-canvas', props.class],
12409
+ "style": props.style,
12135
12410
  "onClick": handleClick,
12136
12411
  "onMousedown": handleMouseDown,
12137
12412
  "onTouchstart": handleMouseDown
@@ -12364,7 +12639,8 @@
12364
12639
  type: Array,
12365
12640
  default: () => Object.keys(modes),
12366
12641
  validator: v => Array.isArray(v) && v.every(m => Object.keys(modes).includes(m))
12367
- }
12642
+ },
12643
+ ...makeComponentProps()
12368
12644
  },
12369
12645
  emits: {
12370
12646
  'update:color': color => true,
@@ -12404,7 +12680,8 @@
12404
12680
  });
12405
12681
  });
12406
12682
  useRender(() => vue.createVNode("div", {
12407
- "class": "v-color-picker-edit"
12683
+ "class": ['v-color-picker-edit', props.class],
12684
+ "style": props.style
12408
12685
  }, [inputs.value?.map(props => vue.createVNode(VColorPickerInput, props, null)), enabledModes.value.length > 1 && vue.createVNode(VBtn, {
12409
12686
  "icon": "$unfold",
12410
12687
  "size": "x-small",
@@ -12488,11 +12765,33 @@
12488
12765
  elevation: 2
12489
12766
  })
12490
12767
  }, 'slider');
12768
+ const useSteps = props => {
12769
+ const min = vue.computed(() => parseFloat(props.min));
12770
+ const max = vue.computed(() => parseFloat(props.max));
12771
+ const step = vue.computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
12772
+ const decimals = vue.computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
12773
+ function roundValue(value) {
12774
+ if (step.value <= 0) return value;
12775
+ const clamped = clamp(value, min.value, max.value);
12776
+ const offset = min.value % step.value;
12777
+ const newValue = Math.round((clamped - offset) / step.value) * step.value + offset;
12778
+ return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value));
12779
+ }
12780
+ return {
12781
+ min,
12782
+ max,
12783
+ step,
12784
+ decimals,
12785
+ roundValue
12786
+ };
12787
+ };
12491
12788
  const useSlider = _ref => {
12492
12789
  let {
12493
12790
  props,
12494
- handleSliderMouseUp,
12495
- handleMouseMove,
12791
+ steps,
12792
+ onSliderStart,
12793
+ onSliderMove,
12794
+ onSliderEnd,
12496
12795
  getActiveThumb
12497
12796
  } = _ref;
12498
12797
  const {
@@ -12506,10 +12805,13 @@
12506
12805
  }
12507
12806
  return hd;
12508
12807
  });
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)));
12808
+ const {
12809
+ min,
12810
+ max,
12811
+ step,
12812
+ decimals,
12813
+ roundValue
12814
+ } = steps;
12513
12815
  const thumbSize = vue.computed(() => parseInt(props.thumbSize, 10));
12514
12816
  const tickSize = vue.computed(() => parseInt(props.tickSize, 10));
12515
12817
  const trackSize = vue.computed(() => parseInt(props.trackSize, 10));
@@ -12523,13 +12825,6 @@
12523
12825
  const startOffset = vue.ref(0);
12524
12826
  const trackContainerRef = vue.ref();
12525
12827
  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
12828
  function parseMouseMove(e) {
12534
12829
  const vertical = props.direction === 'vertical';
12535
12830
  const start = vertical ? 'top' : 'left';
@@ -12546,14 +12841,11 @@
12546
12841
  if (vertical || horizontalDirection.value === 'rtl') clickPos = 1 - clickPos;
12547
12842
  return roundValue(min.value + clickPos * (max.value - min.value));
12548
12843
  }
12549
- let thumbMoved = false;
12550
12844
  const handleStop = e => {
12551
- if (!thumbMoved) {
12552
- startOffset.value = 0;
12553
- handleSliderMouseUp(parseMouseMove(e));
12554
- }
12845
+ onSliderEnd({
12846
+ value: parseMouseMove(e)
12847
+ });
12555
12848
  mousePressed.value = false;
12556
- thumbMoved = false;
12557
12849
  startOffset.value = 0;
12558
12850
  };
12559
12851
  const handleStart = e => {
@@ -12562,20 +12854,25 @@
12562
12854
  activeThumbRef.value.focus();
12563
12855
  mousePressed.value = true;
12564
12856
  if (activeThumbRef.value.contains(e.target)) {
12565
- thumbMoved = true;
12566
12857
  startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
12567
12858
  } else {
12568
12859
  startOffset.value = 0;
12569
- handleMouseMove(parseMouseMove(e));
12860
+ onSliderMove({
12861
+ value: parseMouseMove(e)
12862
+ });
12570
12863
  }
12864
+ onSliderStart({
12865
+ value: parseMouseMove(e)
12866
+ });
12571
12867
  };
12572
12868
  const moveListenerOptions = {
12573
12869
  passive: true,
12574
12870
  capture: true
12575
12871
  };
12576
12872
  function onMouseMove(e) {
12577
- thumbMoved = true;
12578
- handleMouseMove(parseMouseMove(e));
12873
+ onSliderMove({
12874
+ value: parseMouseMove(e)
12875
+ });
12579
12876
  }
12580
12877
  function onSliderMouseUp(e) {
12581
12878
  e.stopPropagation();
@@ -12703,7 +13000,8 @@
12703
13000
  ripple: {
12704
13001
  type: Boolean,
12705
13002
  default: true
12706
- }
13003
+ },
13004
+ ...makeComponentProps()
12707
13005
  },
12708
13006
  emits: {
12709
13007
  'update:modelValue': v => true
@@ -12781,11 +13079,11 @@
12781
13079
  "class": ['v-slider-thumb', {
12782
13080
  'v-slider-thumb--focused': props.focused,
12783
13081
  'v-slider-thumb--pressed': props.focused && mousePressed.value
12784
- }],
12785
- "style": {
13082
+ }, props.class],
13083
+ "style": [{
12786
13084
  '--v-slider-thumb-position': positionPercentage,
12787
13085
  '--v-slider-thumb-size': convertToUnit(thumbSize.value)
12788
- },
13086
+ }, props.style],
12789
13087
  "role": "slider",
12790
13088
  "tabindex": disabled.value ? -1 : 0,
12791
13089
  "aria-valuemin": props.min,
@@ -12831,7 +13129,8 @@
12831
13129
  stop: {
12832
13130
  type: Number,
12833
13131
  required: true
12834
- }
13132
+ },
13133
+ ...makeComponentProps()
12835
13134
  },
12836
13135
  emits: {},
12837
13136
  setup(props, _ref) {
@@ -12906,12 +13205,12 @@
12906
13205
  });
12907
13206
  useRender(() => {
12908
13207
  return vue.createVNode("div", {
12909
- "class": ['v-slider-track', roundedClasses.value],
12910
- "style": {
13208
+ "class": ['v-slider-track', roundedClasses.value, props.class],
13209
+ "style": [{
12911
13210
  '--v-slider-track-size': convertToUnit(trackSize.value),
12912
13211
  '--v-slider-tick-size': convertToUnit(tickSize.value),
12913
13212
  direction: !vertical.value ? horizontalDirection.value : undefined
12914
- }
13213
+ }, props.style]
12915
13214
  }, [vue.createVNode("div", {
12916
13215
  "class": ['v-slider-track__background', trackColorClasses.value, {
12917
13216
  'v-slider-track__background--opacity': !!color.value || !trackFillColor.value
@@ -12951,13 +13250,21 @@
12951
13250
  },
12952
13251
  emits: {
12953
13252
  'update:focused': value => true,
12954
- 'update:modelValue': v => true
13253
+ 'update:modelValue': v => true,
13254
+ start: value => true,
13255
+ end: value => true
12955
13256
  },
12956
13257
  setup(props, _ref) {
12957
13258
  let {
12958
- slots
13259
+ slots,
13260
+ emit
12959
13261
  } = _ref;
12960
13262
  const thumbContainerRef = vue.ref();
13263
+ const steps = useSteps(props);
13264
+ const model = useProxiedModel(props, 'modelValue', undefined, v => {
13265
+ const value = typeof v === 'string' ? parseFloat(v) : v == null ? steps.min.value : v;
13266
+ return steps.roundValue(value);
13267
+ });
12961
13268
  const {
12962
13269
  min,
12963
13270
  max,
@@ -12971,16 +13278,26 @@
12971
13278
  readonly
12972
13279
  } = useSlider({
12973
13280
  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),
13281
+ steps,
13282
+ onSliderStart: () => {
13283
+ emit('start', model.value);
13284
+ },
13285
+ onSliderEnd: _ref2 => {
13286
+ let {
13287
+ value
13288
+ } = _ref2;
13289
+ const roundedValue = roundValue(value);
13290
+ model.value = roundedValue;
13291
+ emit('end', roundedValue);
13292
+ },
13293
+ onSliderMove: _ref3 => {
13294
+ let {
13295
+ value
13296
+ } = _ref3;
13297
+ return model.value = roundValue(value);
13298
+ },
12978
13299
  getActiveThumb: () => thumbContainerRef.value?.$el
12979
13300
  });
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
13301
  const {
12985
13302
  isFocused,
12986
13303
  focus,
@@ -12996,7 +13313,8 @@
12996
13313
  'v-slider--focused': isFocused.value,
12997
13314
  'v-slider--pressed': mousePressed.value,
12998
13315
  'v-slider--disabled': props.disabled
12999
- }]
13316
+ }, props.class],
13317
+ "style": props.style
13000
13318
  }, inputProps, {
13001
13319
  "focused": isFocused.value
13002
13320
  }), {
@@ -13006,11 +13324,11 @@
13006
13324
  "class": "v-slider__label",
13007
13325
  "text": props.label
13008
13326
  }, null) : undefined, slots.prepend?.(slotProps)]) : undefined,
13009
- default: _ref2 => {
13327
+ default: _ref4 => {
13010
13328
  let {
13011
13329
  id,
13012
13330
  messagesId
13013
- } = _ref2;
13331
+ } = _ref4;
13014
13332
  return vue.createVNode("div", {
13015
13333
  "class": "v-slider__container",
13016
13334
  "onMousedown": !readonly.value ? onSliderMousedown : undefined,
@@ -13059,7 +13377,8 @@
13059
13377
  type: Object
13060
13378
  },
13061
13379
  disabled: Boolean,
13062
- hideAlpha: Boolean
13380
+ hideAlpha: Boolean,
13381
+ ...makeComponentProps()
13063
13382
  },
13064
13383
  emits: {
13065
13384
  'update:color': color => true
@@ -13071,7 +13390,8 @@
13071
13390
  useRender(() => vue.createVNode("div", {
13072
13391
  "class": ['v-color-picker-preview', {
13073
13392
  'v-color-picker-preview--hide-alpha': props.hideAlpha
13074
- }]
13393
+ }, props.class],
13394
+ "style": props.style
13075
13395
  }, [vue.createVNode("div", {
13076
13396
  "class": "v-color-picker-preview__dot"
13077
13397
  }, [vue.createVNode("div", {
@@ -13452,7 +13772,8 @@
13452
13772
  },
13453
13773
  disabled: Boolean,
13454
13774
  color: Object,
13455
- maxHeight: [Number, String]
13775
+ maxHeight: [Number, String],
13776
+ ...makeComponentProps()
13456
13777
  },
13457
13778
  emits: {
13458
13779
  'update:color': color => true
@@ -13462,10 +13783,10 @@
13462
13783
  emit
13463
13784
  } = _ref;
13464
13785
  useRender(() => vue.createVNode("div", {
13465
- "class": "v-color-picker-swatches",
13466
- "style": {
13786
+ "class": ['v-color-picker-swatches', props.class],
13787
+ "style": [{
13467
13788
  maxHeight: convertToUnit(props.maxHeight)
13468
- }
13789
+ }, props.style]
13469
13790
  }, [vue.createVNode("div", null, [props.swatches.map(swatch => vue.createVNode("div", {
13470
13791
  "class": "v-color-picker-swatches__swatch"
13471
13792
  }, [swatch.map(color => {
@@ -13569,13 +13890,13 @@
13569
13890
  "rounded": props.rounded,
13570
13891
  "elevation": props.elevation,
13571
13892
  "theme": props.theme,
13572
- "class": ['v-color-picker'],
13573
- "style": {
13893
+ "class": ['v-color-picker', props.class],
13894
+ "style": [{
13574
13895
  '--v-color-picker-color-hsv': HSVtoCSS({
13575
13896
  ...(currentColor.value ?? nullColor),
13576
13897
  a: 1
13577
13898
  })
13578
- }
13899
+ }, props.style]
13579
13900
  }, sheetProps, {
13580
13901
  "maxWidth": props.width
13581
13902
  }), {
@@ -13886,7 +14207,8 @@
13886
14207
  'v-combobox--chips': !!props.chips,
13887
14208
  'v-combobox--selecting-index': selectionIndex.value > -1,
13888
14209
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
13889
- }],
14210
+ }, props.class],
14211
+ "style": props.style,
13890
14212
  "appendInnerIcon": props.items.length ? props.menuIcon : undefined,
13891
14213
  "readonly": props.readonly,
13892
14214
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -14084,7 +14406,8 @@
14084
14406
  "class": ['v-dialog', {
14085
14407
  'v-dialog--fullscreen': props.fullscreen,
14086
14408
  'v-dialog--scrollable': props.scrollable
14087
- }]
14409
+ }, props.class],
14410
+ "style": props.style
14088
14411
  }, overlayProps, {
14089
14412
  "modelValue": isActive.value,
14090
14413
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -14123,6 +14446,7 @@
14123
14446
  validator: v => allowedVariants.includes(v)
14124
14447
  },
14125
14448
  readonly: Boolean,
14449
+ ...makeComponentProps(),
14126
14450
  ...makeGroupProps(),
14127
14451
  ...makeTagProps(),
14128
14452
  ...makeThemeProps()
@@ -14148,7 +14472,8 @@
14148
14472
  }
14149
14473
  });
14150
14474
  useRender(() => vue.createVNode(props.tag, {
14151
- "class": ['v-expansion-panels', themeClasses.value, variantClass.value]
14475
+ "class": ['v-expansion-panels', themeClasses.value, variantClass.value, props.class],
14476
+ "style": props.style
14152
14477
  }, slots));
14153
14478
  return {};
14154
14479
  }
@@ -14177,6 +14502,7 @@
14177
14502
  Ripple
14178
14503
  },
14179
14504
  props: {
14505
+ ...makeComponentProps(),
14180
14506
  ...makeVExpansionPanelTitleProps()
14181
14507
  },
14182
14508
  setup(props, _ref) {
@@ -14199,8 +14525,8 @@
14199
14525
  useRender(() => vue.withDirectives(vue.createVNode("button", {
14200
14526
  "class": ['v-expansion-panel-title', {
14201
14527
  'v-expansion-panel-title--active': expansionPanel.isSelected.value
14202
- }, backgroundColorClasses.value],
14203
- "style": backgroundColorStyles.value,
14528
+ }, backgroundColorClasses.value, props.class],
14529
+ "style": [backgroundColorStyles.value, props.style],
14204
14530
  "type": "button",
14205
14531
  "tabindex": expansionPanel.disabled.value ? -1 : undefined,
14206
14532
  "disabled": expansionPanel.disabled.value,
@@ -14220,6 +14546,7 @@
14220
14546
  const VExpansionPanelText = genericComponent()({
14221
14547
  name: 'VExpansionPanelText',
14222
14548
  props: {
14549
+ ...makeComponentProps(),
14223
14550
  ...makeLazyProps()
14224
14551
  },
14225
14552
  setup(props, _ref) {
@@ -14236,7 +14563,8 @@
14236
14563
  "onAfterLeave": onAfterLeave
14237
14564
  }, {
14238
14565
  default: () => [vue.withDirectives(vue.createVNode("div", {
14239
- "class": "v-expansion-panel-text"
14566
+ "class": ['v-expansion-panel-text', props.class],
14567
+ "style": props.style
14240
14568
  }, [slots.default && hasContent.value && vue.createVNode("div", {
14241
14569
  "class": "v-expansion-panel-text__wrapper"
14242
14570
  }, [slots.default?.()])]), [[vue.vShow, expansionPanel.isSelected.value]])]
@@ -14251,6 +14579,7 @@
14251
14579
  title: String,
14252
14580
  text: String,
14253
14581
  bgColor: String,
14582
+ ...makeComponentProps(),
14254
14583
  ...makeElevationProps(),
14255
14584
  ...makeGroupItemProps(),
14256
14585
  ...makeLazyProps(),
@@ -14299,8 +14628,8 @@
14299
14628
  'v-expansion-panel--before-active': isBeforeSelected.value,
14300
14629
  'v-expansion-panel--after-active': isAfterSelected.value,
14301
14630
  'v-expansion-panel--disabled': isDisabled.value
14302
- }, roundedClasses.value, backgroundColorClasses.value],
14303
- "style": backgroundColorStyles.value,
14631
+ }, roundedClasses.value, backgroundColorClasses.value, props.class],
14632
+ "style": [backgroundColorStyles.value, props.style],
14304
14633
  "aria-expanded": groupItem.isSelected.value
14305
14634
  }, {
14306
14635
  default: () => [vue.createVNode("div", {
@@ -14450,7 +14779,8 @@
14450
14779
  "ref": vInputRef,
14451
14780
  "modelValue": model.value,
14452
14781
  "onUpdate:modelValue": $event => model.value = $event,
14453
- "class": "v-file-input",
14782
+ "class": ['v-file-input', props.class],
14783
+ "style": props.style,
14454
14784
  "onClick:prepend": onClickPrepend
14455
14785
  }, rootAttrs, inputProps, {
14456
14786
  "focused": isFocused.value
@@ -14542,6 +14872,7 @@
14542
14872
  default: 'auto'
14543
14873
  },
14544
14874
  ...makeBorderProps(),
14875
+ ...makeComponentProps(),
14545
14876
  ...makeElevationProps(),
14546
14877
  ...makeLayoutItemProps(),
14547
14878
  ...makeRoundedProps(),
@@ -14591,8 +14922,8 @@
14591
14922
  });
14592
14923
  useRender(() => vue.createVNode(props.tag, {
14593
14924
  "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]
14925
+ "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
14926
+ "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined, props.style]
14596
14927
  }, slots));
14597
14928
  return {};
14598
14929
  }
@@ -14603,6 +14934,7 @@
14603
14934
  const VForm = genericComponent()({
14604
14935
  name: 'VForm',
14605
14936
  props: {
14937
+ ...makeComponentProps(),
14606
14938
  ...makeFormProps()
14607
14939
  },
14608
14940
  emits: {
@@ -14641,7 +14973,8 @@
14641
14973
  }
14642
14974
  useRender(() => vue.createVNode("form", {
14643
14975
  "ref": formRef,
14644
- "class": "v-form",
14976
+ "class": ['v-form', props.class],
14977
+ "style": props.style,
14645
14978
  "novalidate": true,
14646
14979
  "onReset": onReset,
14647
14980
  "onSubmit": onSubmit
@@ -14657,6 +14990,7 @@
14657
14990
  type: Boolean,
14658
14991
  default: false
14659
14992
  },
14993
+ ...makeComponentProps(),
14660
14994
  ...makeTagProps()
14661
14995
  },
14662
14996
  setup(props, _ref) {
@@ -14666,7 +15000,8 @@
14666
15000
  useRender(() => vue.createVNode(props.tag, {
14667
15001
  "class": ['v-container', {
14668
15002
  'v-container--fluid': props.fluid
14669
- }]
15003
+ }, props.class],
15004
+ "style": props.style
14670
15005
  }, slots));
14671
15006
  return {};
14672
15007
  }
@@ -14757,6 +15092,7 @@
14757
15092
  default: null,
14758
15093
  validator: str => ALIGN_SELF_VALUES.includes(str)
14759
15094
  },
15095
+ ...makeComponentProps(),
14760
15096
  ...makeTagProps()
14761
15097
  },
14762
15098
  setup(props, _ref) {
@@ -14787,7 +15123,8 @@
14787
15123
  return classList;
14788
15124
  });
14789
15125
  return () => vue.h(props.tag, {
14790
- class: classes.value
15126
+ class: [classes.value, props.class],
15127
+ style: props.style
14791
15128
  }, slots.default?.());
14792
15129
  }
14793
15130
  });
@@ -14873,6 +15210,7 @@
14873
15210
  validator: alignContentValidator
14874
15211
  },
14875
15212
  ...alignContentProps,
15213
+ ...makeComponentProps(),
14876
15214
  ...makeTagProps()
14877
15215
  },
14878
15216
  setup(props, _ref) {
@@ -14901,7 +15239,8 @@
14901
15239
  return classList;
14902
15240
  });
14903
15241
  return () => vue.h(props.tag, {
14904
- class: ['v-row', classes.value]
15242
+ class: ['v-row', classes.value, props.class],
15243
+ style: props.style
14905
15244
  }, slots.default?.());
14906
15245
  }
14907
15246
  });
@@ -14945,6 +15284,7 @@
14945
15284
  const VItemGroup = genericComponent()({
14946
15285
  name: 'VItemGroup',
14947
15286
  props: {
15287
+ ...makeComponentProps(),
14948
15288
  ...makeGroupProps({
14949
15289
  selectedClass: 'v-item--selected'
14950
15290
  }),
@@ -14969,7 +15309,8 @@
14969
15309
  selected
14970
15310
  } = useGroup(props, VItemGroupSymbol);
14971
15311
  return () => vue.createVNode(props.tag, {
14972
- "class": ['v-item-group', themeClasses.value]
15312
+ "class": ['v-item-group', themeClasses.value, props.class],
15313
+ "style": props.style
14973
15314
  }, {
14974
15315
  default: () => [slots.default?.({
14975
15316
  isSelected,
@@ -15019,7 +15360,10 @@
15019
15360
 
15020
15361
  const VLayout = genericComponent()({
15021
15362
  name: 'VLayout',
15022
- props: makeLayoutProps(),
15363
+ props: {
15364
+ ...makeComponentProps(),
15365
+ ...makeLayoutProps()
15366
+ },
15023
15367
  setup(props, _ref) {
15024
15368
  let {
15025
15369
  slots
@@ -15033,8 +15377,8 @@
15033
15377
  } = createLayout(props);
15034
15378
  useRender(() => vue.createVNode("div", {
15035
15379
  "ref": layoutRef,
15036
- "class": layoutClasses.value,
15037
- "style": layoutStyles.value
15380
+ "class": [layoutClasses.value, props.class],
15381
+ "style": [layoutStyles.value, props.style]
15038
15382
  }, [slots.default?.()]));
15039
15383
  return {
15040
15384
  getLayoutItem,
@@ -15057,6 +15401,7 @@
15057
15401
  default: 300
15058
15402
  },
15059
15403
  modelValue: Boolean,
15404
+ ...makeComponentProps(),
15060
15405
  ...makeLayoutItemProps()
15061
15406
  },
15062
15407
  setup(props, _ref) {
@@ -15075,8 +15420,8 @@
15075
15420
  absolute: vue.toRef(props, 'absolute')
15076
15421
  });
15077
15422
  return () => vue.createVNode("div", {
15078
- "class": ['v-layout-item'],
15079
- "style": layoutItemStyles.value
15423
+ "class": ['v-layout-item', props.class],
15424
+ "style": [layoutItemStyles.value, props.style]
15080
15425
  }, [slots.default?.()]);
15081
15426
  }
15082
15427
  });
@@ -15100,6 +15445,7 @@
15100
15445
  threshold: undefined
15101
15446
  })
15102
15447
  },
15448
+ ...makeComponentProps(),
15103
15449
  ...makeDimensionProps(),
15104
15450
  ...makeTagProps(),
15105
15451
  ...makeTransitionProps({
@@ -15122,8 +15468,8 @@
15122
15468
  isActive.value = isIntersecting;
15123
15469
  }
15124
15470
  useRender(() => vue.withDirectives(vue.createVNode(props.tag, {
15125
- "class": "v-lazy",
15126
- "style": dimensionStyles.value
15471
+ "class": ['v-lazy', props.class],
15472
+ "style": [dimensionStyles.value, props.style]
15127
15473
  }, {
15128
15474
  default: () => [isActive.value && vue.createVNode(MaybeTransition, {
15129
15475
  "transition": props.transition,
@@ -15148,7 +15494,8 @@
15148
15494
  rtl: {
15149
15495
  type: Boolean,
15150
15496
  default: undefined
15151
- }
15497
+ },
15498
+ ...makeComponentProps()
15152
15499
  },
15153
15500
  setup(props, _ref) {
15154
15501
  let {
@@ -15158,7 +15505,8 @@
15158
15505
  rtlClasses
15159
15506
  } = provideLocale(props);
15160
15507
  useRender(() => vue.createVNode("div", {
15161
- "class": ['v-locale-provider', rtlClasses.value]
15508
+ "class": ['v-locale-provider', rtlClasses.value, props.class],
15509
+ "style": props.style
15162
15510
  }, [slots.default?.()]));
15163
15511
  return {};
15164
15512
  }
@@ -15168,6 +15516,7 @@
15168
15516
  name: 'VMain',
15169
15517
  props: {
15170
15518
  scrollable: Boolean,
15519
+ ...makeComponentProps(),
15171
15520
  ...makeTagProps({
15172
15521
  tag: 'main'
15173
15522
  })
@@ -15185,8 +15534,8 @@
15185
15534
  useRender(() => vue.createVNode(props.tag, {
15186
15535
  "class": ['v-main', {
15187
15536
  'v-main--scrollable': props.scrollable
15188
- }],
15189
- "style": [mainStyles.value, ssrBootStyles.value]
15537
+ }, props.class],
15538
+ "style": [mainStyles.value, ssrBootStyles.value, props.style]
15190
15539
  }, {
15191
15540
  default: () => [props.scrollable ? vue.createVNode("div", {
15192
15541
  "class": "v-main__scroller"
@@ -15532,6 +15881,7 @@
15532
15881
  },
15533
15882
  sticky: Boolean,
15534
15883
  ...makeBorderProps(),
15884
+ ...makeComponentProps(),
15535
15885
  ...makeElevationProps(),
15536
15886
  ...makeLayoutItemProps(),
15537
15887
  ...makeRoundedProps(),
@@ -15683,8 +16033,8 @@
15683
16033
  'v-navigation-drawer--temporary': isTemporary.value,
15684
16034
  'v-navigation-drawer--active': isActive.value,
15685
16035
  '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]
16036
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
16037
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
15688
16038
  }, attrs), {
15689
16039
  default: () => [hasImage && vue.createVNode("div", {
15690
16040
  "key": "image",
@@ -15813,6 +16163,7 @@
15813
16163
  },
15814
16164
  showFirstLastPage: Boolean,
15815
16165
  ...makeBorderProps(),
16166
+ ...makeComponentProps(),
15816
16167
  ...makeDensityProps(),
15817
16168
  ...makeElevationProps(),
15818
16169
  ...makeRoundedProps(),
@@ -16009,7 +16360,8 @@
16009
16360
  }
16010
16361
  useRender(() => vue.createVNode(props.tag, {
16011
16362
  "ref": resizeRef,
16012
- "class": ['v-pagination', themeClasses.value],
16363
+ "class": ['v-pagination', themeClasses.value, props.class],
16364
+ "style": props.style,
16013
16365
  "role": "navigation",
16014
16366
  "aria-label": t(props.ariaLabel),
16015
16367
  "onKeydown": onKeydown,
@@ -16068,7 +16420,8 @@
16068
16420
  scale: {
16069
16421
  type: [Number, String],
16070
16422
  default: 0.5
16071
- }
16423
+ },
16424
+ ...makeComponentProps()
16072
16425
  },
16073
16426
  setup(props, _ref) {
16074
16427
  let {
@@ -16130,7 +16483,8 @@
16130
16483
  useRender(() => vue.createVNode(VImg, {
16131
16484
  "class": ['v-parallax', {
16132
16485
  'v-parallax--active': isIntersecting.value
16133
- }],
16486
+ }, props.class],
16487
+ "style": props.style,
16134
16488
  "ref": root,
16135
16489
  "cover": true,
16136
16490
  "onLoadstart": onScroll,
@@ -16155,7 +16509,8 @@
16155
16509
  slots
16156
16510
  } = _ref;
16157
16511
  useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
16158
- "class": "v-radio",
16512
+ "class": ['v-radio', props.class],
16513
+ "style": props.style,
16159
16514
  "type": "radio"
16160
16515
  }), slots));
16161
16516
  return {};
@@ -16209,7 +16564,8 @@
16209
16564
  }
16210
16565
  }) : props.label;
16211
16566
  return vue.createVNode(VInput, vue.mergeProps({
16212
- "class": "v-radio-group"
16567
+ "class": ['v-radio-group', props.class],
16568
+ "style": props.style
16213
16569
  }, inputAttrs, inputProps, {
16214
16570
  "modelValue": model.value,
16215
16571
  "onUpdate:modelValue": $event => model.value = $event,
@@ -16265,11 +16621,14 @@
16265
16621
  },
16266
16622
  emits: {
16267
16623
  'update:focused': value => true,
16268
- 'update:modelValue': value => true
16624
+ 'update:modelValue': value => true,
16625
+ end: value => true,
16626
+ start: value => true
16269
16627
  },
16270
16628
  setup(props, _ref) {
16271
16629
  let {
16272
- slots
16630
+ slots,
16631
+ emit
16273
16632
  } = _ref;
16274
16633
  const startThumbRef = vue.ref();
16275
16634
  const stopThumbRef = vue.ref();
@@ -16282,6 +16641,11 @@
16282
16641
  const b = Math.abs(stopOffset);
16283
16642
  return a < b || a === b && startOffset < 0 ? startThumbRef.value.$el : stopThumbRef.value.$el;
16284
16643
  }
16644
+ const steps = useSteps(props);
16645
+ const model = useProxiedModel(props, 'modelValue', undefined, arr => {
16646
+ if (!arr?.length) return [0, 0];
16647
+ return arr.map(value => steps.roundValue(value));
16648
+ });
16285
16649
  const {
16286
16650
  activeThumbRef,
16287
16651
  hasLabels,
@@ -16291,34 +16655,37 @@
16291
16655
  onSliderMousedown,
16292
16656
  onSliderTouchstart,
16293
16657
  position,
16294
- roundValue,
16295
16658
  trackContainerRef
16296
16659
  } = useSlider({
16297
- /* eslint-disable @typescript-eslint/no-use-before-define */
16298
16660
  props,
16299
- handleSliderMouseUp: newValue => {
16300
- model.value = activeThumbRef.value === startThumbRef.value?.$el ? [newValue, model.value[1]] : [model.value[0], newValue];
16661
+ steps,
16662
+ onSliderStart: () => {
16663
+ emit('start', model.value);
16664
+ },
16665
+ onSliderEnd: _ref2 => {
16666
+ let {
16667
+ value
16668
+ } = _ref2;
16669
+ const newValue = activeThumbRef.value === startThumbRef.value?.$el ? [value, model.value[1]] : [model.value[0], value];
16670
+ model.value = newValue;
16671
+ emit('end', newValue);
16301
16672
  },
16302
- handleMouseMove: newValue => {
16673
+ onSliderMove: _ref3 => {
16674
+ let {
16675
+ value
16676
+ } = _ref3;
16303
16677
  const [start, stop] = model.value;
16304
16678
  if (!props.strict && start === stop && start !== min.value) {
16305
- activeThumbRef.value = newValue > start ? stopThumbRef.value?.$el : startThumbRef.value?.$el;
16679
+ activeThumbRef.value = value > start ? stopThumbRef.value?.$el : startThumbRef.value?.$el;
16306
16680
  activeThumbRef.value?.focus();
16307
16681
  }
16308
16682
  if (activeThumbRef.value === startThumbRef.value?.$el) {
16309
- model.value = [Math.min(newValue, stop), stop];
16683
+ model.value = [Math.min(value, stop), stop];
16310
16684
  } else {
16311
- model.value = [start, Math.max(start, newValue)];
16685
+ model.value = [start, Math.max(start, value)];
16312
16686
  }
16313
16687
  },
16314
16688
  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
16689
  });
16323
16690
  const {
16324
16691
  isFocused,
@@ -16336,7 +16703,8 @@
16336
16703
  'v-slider--focused': isFocused.value,
16337
16704
  'v-slider--pressed': mousePressed.value,
16338
16705
  'v-slider--disabled': props.disabled
16339
- }],
16706
+ }, props.class],
16707
+ "style": props.style,
16340
16708
  "ref": inputRef
16341
16709
  }, inputProps, {
16342
16710
  "focused": isFocused.value
@@ -16346,11 +16714,11 @@
16346
16714
  "class": "v-slider__label",
16347
16715
  "text": props.label
16348
16716
  }, null) : undefined, slots.prepend?.(slotProps)]) : undefined,
16349
- default: _ref2 => {
16717
+ default: _ref4 => {
16350
16718
  let {
16351
16719
  id,
16352
16720
  messagesId
16353
- } = _ref2;
16721
+ } = _ref4;
16354
16722
  return vue.createVNode("div", {
16355
16723
  "class": "v-slider__container",
16356
16724
  "onMousedown": onSliderMousedown,
@@ -16479,6 +16847,7 @@
16479
16847
  validator: v => ['top', 'bottom'].includes(v)
16480
16848
  },
16481
16849
  ripple: Boolean,
16850
+ ...makeComponentProps(),
16482
16851
  ...makeDensityProps(),
16483
16852
  ...makeSizeProps(),
16484
16853
  ...makeTagProps(),
@@ -16502,9 +16871,6 @@
16502
16871
  const range = vue.computed(() => createRange(Number(props.length), 1));
16503
16872
  const increments = vue.computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]));
16504
16873
  const hoverIndex = vue.ref(-1);
16505
- const focusIndex = vue.ref(-1);
16506
- const firstRef = vue.ref();
16507
- let isClicking = false;
16508
16874
  const itemState = vue.computed(() => increments.value.map(value => {
16509
16875
  const isHovering = props.hover && hoverIndex.value > -1;
16510
16876
  const isFilled = normalizedValue.value >= value;
@@ -16527,16 +16893,6 @@
16527
16893
  function onMouseleave() {
16528
16894
  hoverIndex.value = -1;
16529
16895
  }
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
16896
  function onClick() {
16541
16897
  if (props.disabled || props.readonly) return;
16542
16898
  rating.value = normalizedValue.value === value && props.clearable ? 0 : value;
@@ -16544,17 +16900,9 @@
16544
16900
  return {
16545
16901
  onMouseenter: props.hover ? onMouseenter : undefined,
16546
16902
  onMouseleave: props.hover ? onMouseleave : undefined,
16547
- onFocus,
16548
- onBlur,
16549
16903
  onClick
16550
16904
  };
16551
16905
  }));
16552
- function onMousedown() {
16553
- isClicking = true;
16554
- }
16555
- function onMouseup() {
16556
- isClicking = false;
16557
- }
16558
16906
  const name = vue.computed(() => props.name ?? `v-rating-${getUid()}`);
16559
16907
  function VRatingItem(_ref2) {
16560
16908
  let {
@@ -16565,8 +16913,6 @@
16565
16913
  const {
16566
16914
  onMouseenter,
16567
16915
  onMouseleave,
16568
- onFocus,
16569
- onBlur,
16570
16916
  onClick
16571
16917
  } = eventState.value[index + 1];
16572
16918
  const id = `${name.value}-${String(value).replace('.', '-')}`;
@@ -16577,7 +16923,6 @@
16577
16923
  icon: itemState.value[index]?.icon,
16578
16924
  ripple: props.ripple,
16579
16925
  size: props.size,
16580
- tag: 'span',
16581
16926
  variant: 'plain'
16582
16927
  };
16583
16928
  return vue.createVNode(vue.Fragment, null, [vue.createVNode("label", {
@@ -16586,17 +16931,17 @@
16586
16931
  'v-rating__item--half': props.halfIncrements && value % 1 > 0,
16587
16932
  'v-rating__item--full': props.halfIncrements && value % 1 === 0
16588
16933
  },
16589
- "onMousedown": onMousedown,
16590
- "onMouseup": onMouseup,
16591
16934
  "onMouseenter": onMouseenter,
16592
- "onMouseleave": onMouseleave
16935
+ "onMouseleave": onMouseleave,
16936
+ "onClick": onClick
16593
16937
  }, [vue.createVNode("span", {
16594
16938
  "class": "v-rating__hidden"
16595
16939
  }, [t(props.itemAriaLabel, value, props.length)]), !showStar ? undefined : slots.item ? slots.item({
16596
16940
  ...itemState.value[index],
16597
16941
  props: btnProps,
16598
16942
  value,
16599
- index
16943
+ index,
16944
+ rating: normalizedValue.value
16600
16945
  }) : vue.createVNode(VBtn, btnProps, null)]), vue.createVNode("input", {
16601
16946
  "class": "v-rating__hidden",
16602
16947
  "name": name.value,
@@ -16604,10 +16949,7 @@
16604
16949
  "type": "radio",
16605
16950
  "value": value,
16606
16951
  "checked": normalizedValue.value === value,
16607
- "onClick": onClick,
16608
- "onFocus": onFocus,
16609
- "onBlur": onBlur,
16610
- "ref": index === 0 ? firstRef : undefined,
16952
+ "tabindex": -1,
16611
16953
  "readonly": props.readonly,
16612
16954
  "disabled": props.disabled
16613
16955
  }, null)]);
@@ -16623,7 +16965,8 @@
16623
16965
  "class": ['v-rating', {
16624
16966
  'v-rating--hover': props.hover,
16625
16967
  'v-rating--readonly': props.readonly
16626
- }, themeClasses.value]
16968
+ }, themeClasses.value, props.class],
16969
+ "style": props.style
16627
16970
  }, {
16628
16971
  default: () => [vue.createVNode(VRatingItem, {
16629
16972
  "value": 0,
@@ -16636,9 +16979,7 @@
16636
16979
  index: i,
16637
16980
  label: props.itemLabels?.[i]
16638
16981
  }) : undefined, vue.createVNode("div", {
16639
- "class": ['v-rating__item', {
16640
- 'v-rating__item--focused': Math.ceil(focusIndex.value) === value
16641
- }]
16982
+ "class": "v-rating__item"
16642
16983
  }, [props.halfIncrements ? vue.createVNode(vue.Fragment, null, [vue.createVNode(VRatingItem, {
16643
16984
  "value": value - 0.5,
16644
16985
  "index": i * 2
@@ -16725,6 +17066,7 @@
16725
17066
  type: [Boolean, String],
16726
17067
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
16727
17068
  },
17069
+ ...makeComponentProps(),
16728
17070
  ...makeTagProps(),
16729
17071
  ...makeGroupProps({
16730
17072
  selectedClass: 'v-slide-group-item--active'
@@ -16965,7 +17307,8 @@
16965
17307
  'v-slide-group--vertical': !isHorizontal.value,
16966
17308
  'v-slide-group--has-affixes': hasAffixes.value,
16967
17309
  'v-slide-group--is-overflowing': isOverflowing.value
16968
- }],
17310
+ }, props.class],
17311
+ "style": props.style,
16969
17312
  "tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
16970
17313
  "onFocus": onFocus
16971
17314
  }, {
@@ -17115,7 +17458,8 @@
17115
17458
  'v-snackbar--active': isActive.value,
17116
17459
  'v-snackbar--multi-line': props.multiLine && !props.vertical,
17117
17460
  'v-snackbar--vertical': props.vertical
17118
- }, positionClasses.value]
17461
+ }, positionClasses.value, props.class],
17462
+ "style": props.style
17119
17463
  }, overlayProps, {
17120
17464
  "modelValue": isActive.value,
17121
17465
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -17215,7 +17559,8 @@
17215
17559
  'v-switch--inset': props.inset
17216
17560
  }, {
17217
17561
  'v-switch--indeterminate': indeterminate.value
17218
- }, loaderClasses.value]
17562
+ }, loaderClasses.value, props.class],
17563
+ "style": props.style
17219
17564
  }, inputAttrs, inputProps, {
17220
17565
  "id": id.value,
17221
17566
  "focused": isFocused.value
@@ -17284,6 +17629,7 @@
17284
17629
  color: String,
17285
17630
  height: [Number, String],
17286
17631
  window: Boolean,
17632
+ ...makeComponentProps(),
17287
17633
  ...makeElevationProps(),
17288
17634
  ...makeLayoutItemProps(),
17289
17635
  ...makeRoundedProps(),
@@ -17325,8 +17671,8 @@
17325
17671
  useRender(() => vue.createVNode(props.tag, {
17326
17672
  "class": ['v-system-bar', {
17327
17673
  'v-system-bar--window': props.window
17328
- }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value],
17329
- "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value]
17674
+ }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value, props.class],
17675
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, props.style]
17330
17676
  }, slots));
17331
17677
  return {};
17332
17678
  }
@@ -17338,7 +17684,6 @@
17338
17684
  name: 'VTab',
17339
17685
  props: {
17340
17686
  fixed: Boolean,
17341
- title: String,
17342
17687
  sliderColor: String,
17343
17688
  hideSlider: Boolean,
17344
17689
  direction: {
@@ -17400,10 +17745,10 @@
17400
17745
  useRender(() => {
17401
17746
  const [btnProps] = VBtn.filterProps(props);
17402
17747
  return vue.createVNode(VBtn, vue.mergeProps({
17403
- "_as": "VTab",
17404
17748
  "symbol": VTabsSymbol,
17405
17749
  "ref": rootEl,
17406
- "class": ['v-tab'],
17750
+ "class": ['v-tab', props.class],
17751
+ "style": props.style,
17407
17752
  "tabindex": isSelected.value ? 0 : -1,
17408
17753
  "role": "tab",
17409
17754
  "aria-selected": String(isSelected.value),
@@ -17414,7 +17759,7 @@
17414
17759
  }, btnProps, attrs, {
17415
17760
  "onGroup:selected": updateSlider
17416
17761
  }), {
17417
- default: () => [slots.default ? slots.default() : props.title, !props.hideSlider && vue.createVNode("div", {
17762
+ default: () => [slots.default?.() ?? props.text, !props.hideSlider && vue.createVNode("div", {
17418
17763
  "ref": sliderEl,
17419
17764
  "class": ['v-tab__slider', sliderColorClasses.value],
17420
17765
  "style": sliderColorStyles.value
@@ -17498,10 +17843,10 @@
17498
17843
  'v-tabs--fixed-tabs': props.fixedTabs,
17499
17844
  'v-tabs--grow': props.grow,
17500
17845
  'v-tabs--stacked': props.stacked
17501
- }, densityClasses.value, backgroundColorClasses.value],
17846
+ }, densityClasses.value, backgroundColorClasses.value, props.class],
17502
17847
  "style": [{
17503
17848
  '--v-tabs-height': convertToUnit(props.height)
17504
- }, backgroundColorStyles.value],
17849
+ }, backgroundColorStyles.value, props.style],
17505
17850
  "role": "tablist",
17506
17851
  "symbol": VTabsSymbol
17507
17852
  }), {
@@ -17521,6 +17866,7 @@
17521
17866
  fixedFooter: Boolean,
17522
17867
  height: [Number, String],
17523
17868
  hover: Boolean,
17869
+ ...makeComponentProps(),
17524
17870
  ...makeDensityProps(),
17525
17871
  ...makeTagProps(),
17526
17872
  ...makeThemeProps()
@@ -17543,7 +17889,8 @@
17543
17889
  'v-table--has-top': !!slots.top,
17544
17890
  'v-table--has-bottom': !!slots.bottom,
17545
17891
  'v-table--hover': props.hover
17546
- }, themeClasses.value, densityClasses.value]
17892
+ }, themeClasses.value, densityClasses.value, props.class],
17893
+ "style": props.style
17547
17894
  }, {
17548
17895
  default: () => [slots.top?.(), slots.default ? vue.createVNode("div", {
17549
17896
  "class": "v-table__wrapper",
@@ -17708,7 +18055,8 @@
17708
18055
  'v-textarea--auto-grow': props.autoGrow,
17709
18056
  'v-textarea--no-resize': props.noResize || props.autoGrow,
17710
18057
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
17711
- }]
18058
+ }, props.class],
18059
+ "style": props.style
17712
18060
  }, rootAttrs, inputProps, {
17713
18061
  "focused": isFocused.value
17714
18062
  }), {
@@ -17792,6 +18140,7 @@
17792
18140
  name: 'VThemeProvider',
17793
18141
  props: {
17794
18142
  withBackground: Boolean,
18143
+ ...makeComponentProps(),
17795
18144
  ...makeThemeProps(),
17796
18145
  ...makeTagProps()
17797
18146
  },
@@ -17805,7 +18154,8 @@
17805
18154
  return () => {
17806
18155
  if (!props.withBackground) return slots.default?.();
17807
18156
  return vue.createVNode(props.tag, {
17808
- "class": ['v-theme-provider', themeClasses.value]
18157
+ "class": ['v-theme-provider', themeClasses.value, props.class],
18158
+ "style": props.style
17809
18159
  }, {
17810
18160
  default: () => [slots.default?.()]
17811
18161
  });
@@ -17850,6 +18200,7 @@
17850
18200
  type: String,
17851
18201
  validator: v => ['start', 'end', 'both'].includes(v)
17852
18202
  },
18203
+ ...makeComponentProps(),
17853
18204
  ...makeDensityProps(),
17854
18205
  ...makeTagProps(),
17855
18206
  ...makeThemeProps()
@@ -17893,10 +18244,10 @@
17893
18244
  useRender(() => vue.createVNode(props.tag, {
17894
18245
  "class": ['v-timeline', `v-timeline--${props.direction}`, `v-timeline--align-${props.align}`, `v-timeline--justify-${props.justify}`, truncateClasses.value, {
17895
18246
  'v-timeline--inset-line': !!props.lineInset
17896
- }, themeClasses.value, densityClasses.value, sideClasses.value],
17897
- "style": {
18247
+ }, themeClasses.value, densityClasses.value, sideClasses.value, props.class],
18248
+ "style": [{
17898
18249
  '--v-timeline-line-thickness': convertToUnit(props.lineThickness)
17899
- }
18250
+ }, props.style]
17900
18251
  }, slots));
17901
18252
  return {};
17902
18253
  }
@@ -17911,6 +18262,7 @@
17911
18262
  icon: IconValue,
17912
18263
  iconColor: String,
17913
18264
  lineColor: String,
18265
+ ...makeComponentProps(),
17914
18266
  ...makeRoundedProps(),
17915
18267
  ...makeSizeProps(),
17916
18268
  ...makeElevationProps()
@@ -17940,7 +18292,8 @@
17940
18292
  useRender(() => vue.createVNode("div", {
17941
18293
  "class": ['v-timeline-divider', {
17942
18294
  'v-timeline-divider--fill-dot': props.fillDot
17943
- }]
18295
+ }, props.class],
18296
+ "style": props.style
17944
18297
  }, [vue.createVNode("div", {
17945
18298
  "class": ['v-timeline-divider__before', lineColorClasses.value],
17946
18299
  "style": lineColorStyles.value
@@ -17990,11 +18343,12 @@
17990
18343
  icon: IconValue,
17991
18344
  iconColor: String,
17992
18345
  lineInset: [Number, String],
17993
- ...makeRoundedProps(),
18346
+ ...makeComponentProps(),
18347
+ ...makeDimensionProps(),
17994
18348
  ...makeElevationProps(),
18349
+ ...makeRoundedProps(),
17995
18350
  ...makeSizeProps(),
17996
- ...makeTagProps(),
17997
- ...makeDimensionProps()
18351
+ ...makeTagProps()
17998
18352
  },
17999
18353
  setup(props, _ref) {
18000
18354
  let {
@@ -18014,11 +18368,11 @@
18014
18368
  useRender(() => vue.createVNode("div", {
18015
18369
  "class": ['v-timeline-item', {
18016
18370
  'v-timeline-item--fill-dot': props.fillDot
18017
- }],
18018
- "style": {
18371
+ }, props.class],
18372
+ "style": [{
18019
18373
  '--v-timeline-dot-size': convertToUnit(dotSize.value),
18020
18374
  '--v-timeline-line-inset': props.lineInset ? `calc(var(--v-timeline-dot-size) / 2 + ${convertToUnit(props.lineInset)})` : convertToUnit(0)
18021
- }
18375
+ }, props.style]
18022
18376
  }, [vue.createVNode("div", {
18023
18377
  "class": "v-timeline-item__body",
18024
18378
  "style": dimensionStyles.value
@@ -18052,6 +18406,7 @@
18052
18406
  closeOnBack: false,
18053
18407
  location: 'end',
18054
18408
  locationStrategy: 'connected',
18409
+ eager: true,
18055
18410
  minWidth: 0,
18056
18411
  offset: 10,
18057
18412
  openOnClick: false,
@@ -18060,7 +18415,7 @@
18060
18415
  scrim: false,
18061
18416
  scrollStrategy: 'reposition',
18062
18417
  transition: false
18063
- }), ['absolute', 'persistent', 'eager'])
18418
+ }), ['absolute', 'persistent'])
18064
18419
  },
18065
18420
  emits: {
18066
18421
  'update:modelValue': value => true
@@ -18093,7 +18448,8 @@
18093
18448
  const [overlayProps] = VOverlay.filterProps(props);
18094
18449
  return vue.createVNode(VOverlay, vue.mergeProps({
18095
18450
  "ref": overlay,
18096
- "class": ['v-tooltip'],
18451
+ "class": ['v-tooltip', props.class],
18452
+ "style": props.style,
18097
18453
  "id": id.value
18098
18454
  }, overlayProps, {
18099
18455
  "modelValue": isActive.value,
@@ -18104,7 +18460,6 @@
18104
18460
  "origin": origin.value,
18105
18461
  "persistent": true,
18106
18462
  "role": "tooltip",
18107
- "eager": true,
18108
18463
  "activatorProps": activatorProps.value,
18109
18464
  "_disableGlobalStack": true
18110
18465
  }, scopeId), {
@@ -18139,69 +18494,239 @@
18139
18494
  }
18140
18495
  });
18141
18496
 
18142
- const VDataTableColumn = defineFunctionalComponent({
18143
- align: {
18144
- type: String,
18145
- default: 'start'
18497
+ const VVirtualScrollItem = genericComponent()({
18498
+ name: 'VVirtualScrollItem',
18499
+ props: {
18500
+ dynamicHeight: Boolean,
18501
+ ...makeComponentProps()
18146
18502
  },
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)
18503
+ emits: {
18504
+ 'update:height': height => true
18505
+ },
18506
+ setup(props, _ref) {
18507
+ let {
18508
+ emit,
18509
+ slots
18510
+ } = _ref;
18511
+ const {
18512
+ resizeRef,
18513
+ contentRect
18514
+ } = useResizeObserver();
18515
+ useToggleScope(() => props.dynamicHeight, () => {
18516
+ vue.watch(() => contentRect.value?.height, height => {
18517
+ if (height != null) emit('update:height', height);
18518
+ });
18519
+ });
18520
+ function updateHeight() {
18521
+ if (props.dynamicHeight && contentRect.value) {
18522
+ emit('update:height', contentRect.value.height);
18523
+ }
18170
18524
  }
18171
- }, attrs), {
18172
- default: () => [slots.default?.()]
18173
- });
18525
+ vue.onUpdated(updateHeight);
18526
+ useRender(() => vue.createVNode("div", {
18527
+ "ref": props.dynamicHeight ? resizeRef : undefined,
18528
+ "class": ['v-virtual-scroll__item', props.class],
18529
+ "style": props.style
18530
+ }, [slots.default?.()]));
18531
+ }
18174
18532
  });
18175
18533
 
18176
- // Utilities
18177
-
18178
18534
  // Types
18179
18535
 
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 = {
18202
- ...defaultHeader,
18203
- width: 48
18204
- };
18536
+ const UP$1 = -1;
18537
+ const DOWN$1 = 1;
18538
+ const VVirtualScroll = genericComponent()({
18539
+ name: 'VVirtualScroll',
18540
+ props: {
18541
+ items: {
18542
+ type: Array,
18543
+ default: () => []
18544
+ },
18545
+ itemHeight: [Number, String],
18546
+ ...makeComponentProps(),
18547
+ ...makeDimensionProps()
18548
+ },
18549
+ setup(props, _ref) {
18550
+ let {
18551
+ slots
18552
+ } = _ref;
18553
+ const first = vue.ref(0);
18554
+ const baseItemHeight = vue.ref(props.itemHeight);
18555
+ const itemHeight = vue.computed({
18556
+ get: () => parseInt(baseItemHeight.value ?? 0, 10),
18557
+ set(val) {
18558
+ baseItemHeight.value = val;
18559
+ }
18560
+ });
18561
+ const rootEl = vue.ref();
18562
+ const {
18563
+ resizeRef,
18564
+ contentRect
18565
+ } = useResizeObserver();
18566
+ vue.watchEffect(() => {
18567
+ resizeRef.value = rootEl.value;
18568
+ });
18569
+ const display = useDisplay();
18570
+ const sizeMap = new Map();
18571
+ let sizes = createRange(props.items.length).map(() => itemHeight.value);
18572
+ const visibleItems = vue.computed(() => {
18573
+ return Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
18574
+ });
18575
+ function handleItemResize(index, height) {
18576
+ itemHeight.value = Math.max(itemHeight.value, height);
18577
+ sizes[index] = height;
18578
+ sizeMap.set(props.items[index], height);
18579
+ }
18580
+ function calculateOffset(index) {
18581
+ return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0);
18582
+ }
18583
+ function calculateMidPointIndex(scrollTop) {
18584
+ const end = props.items.length;
18585
+ let middle = 0;
18586
+ let middleOffset = 0;
18587
+ while (middleOffset < scrollTop && middle < end) {
18588
+ middleOffset += sizes[middle++] || itemHeight.value;
18589
+ }
18590
+ return middle - 1;
18591
+ }
18592
+ let lastScrollTop = 0;
18593
+ function handleScroll() {
18594
+ if (!rootEl.value || !contentRect.value) return;
18595
+ const height = contentRect.value.height;
18596
+ const scrollTop = rootEl.value.scrollTop;
18597
+ const direction = scrollTop < lastScrollTop ? UP$1 : DOWN$1;
18598
+ const midPointIndex = calculateMidPointIndex(scrollTop + height / 2);
18599
+ const buffer = Math.round(visibleItems.value / 3);
18600
+ if (direction === UP$1 && midPointIndex <= first.value + buffer * 2 - 1) {
18601
+ first.value = clamp(midPointIndex - buffer, 0, props.items.length);
18602
+ } else if (direction === DOWN$1 && midPointIndex >= first.value + buffer * 2 - 1) {
18603
+ first.value = clamp(midPointIndex - buffer, 0, props.items.length - visibleItems.value);
18604
+ }
18605
+ lastScrollTop = rootEl.value.scrollTop;
18606
+ }
18607
+ function scrollToIndex(index) {
18608
+ if (!rootEl.value) return;
18609
+ const offset = calculateOffset(index);
18610
+ rootEl.value.scrollTop = offset;
18611
+ }
18612
+ const items = vue.computed(() => props.items.map((item, index) => ({
18613
+ raw: item,
18614
+ index
18615
+ })));
18616
+ const last = vue.computed(() => Math.min(props.items.length, first.value + visibleItems.value));
18617
+ const computedItems = vue.computed(() => items.value.slice(first.value, last.value));
18618
+ const paddingTop = vue.computed(() => calculateOffset(first.value));
18619
+ const paddingBottom = vue.computed(() => calculateOffset(props.items.length) - calculateOffset(last.value));
18620
+ const {
18621
+ dimensionStyles
18622
+ } = useDimension(props);
18623
+ vue.onMounted(() => {
18624
+ if (!itemHeight.value) {
18625
+ // If itemHeight prop is not set, then calculate an estimated height from the average of inital items
18626
+ itemHeight.value = sizes.slice(first.value, last.value).reduce((curr, height) => curr + height, 0) / visibleItems.value;
18627
+ }
18628
+ });
18629
+ vue.watch(() => props.items.length, () => {
18630
+ sizes = createRange(props.items.length).map(() => itemHeight.value);
18631
+ sizeMap.forEach((height, item) => {
18632
+ const index = props.items.indexOf(item);
18633
+ if (index === -1) {
18634
+ sizeMap.delete(item);
18635
+ } else {
18636
+ sizes[index] = height;
18637
+ }
18638
+ });
18639
+ });
18640
+ useRender(() => vue.createVNode("div", {
18641
+ "ref": rootEl,
18642
+ "class": ['v-virtual-scroll', props.class],
18643
+ "onScroll": handleScroll,
18644
+ "style": [dimensionStyles.value, props.style]
18645
+ }, [vue.createVNode("div", {
18646
+ "class": "v-virtual-scroll__container",
18647
+ "style": {
18648
+ paddingTop: convertToUnit(paddingTop.value),
18649
+ paddingBottom: convertToUnit(paddingBottom.value)
18650
+ }
18651
+ }, [computedItems.value.map(item => vue.createVNode(VVirtualScrollItem, {
18652
+ "key": item.index,
18653
+ "dynamicHeight": !props.itemHeight,
18654
+ "onUpdate:height": height => handleItemResize(item.index, height)
18655
+ }, {
18656
+ default: () => [slots.default?.({
18657
+ item: item.raw,
18658
+ index: item.index
18659
+ })]
18660
+ }))])]));
18661
+ return {
18662
+ scrollToIndex
18663
+ };
18664
+ }
18665
+ });
18666
+
18667
+ const VDataTableColumn = defineFunctionalComponent({
18668
+ align: {
18669
+ type: String,
18670
+ default: 'start'
18671
+ },
18672
+ fixed: Boolean,
18673
+ fixedOffset: [Number, String],
18674
+ height: [Number, String],
18675
+ lastFixed: Boolean,
18676
+ noPadding: Boolean,
18677
+ tag: String,
18678
+ width: [Number, String]
18679
+ }, (props, _ref) => {
18680
+ let {
18681
+ slots,
18682
+ attrs
18683
+ } = _ref;
18684
+ const Tag = props.tag ?? 'td';
18685
+ return vue.createVNode(Tag, vue.mergeProps({
18686
+ "class": ['v-data-table__td', {
18687
+ 'v-data-table-column--fixed': props.fixed,
18688
+ 'v-data-table-column--last-fixed': props.lastFixed,
18689
+ 'v-data-table-column--no-padding': props.noPadding
18690
+ }, `v-data-table-column--align-${props.align}`],
18691
+ "style": {
18692
+ height: convertToUnit(props.height),
18693
+ width: convertToUnit(props.width),
18694
+ left: convertToUnit(props.fixedOffset || null)
18695
+ }
18696
+ }, attrs), {
18697
+ default: () => [slots.default?.()]
18698
+ });
18699
+ });
18700
+
18701
+ // Utilities
18702
+
18703
+ // Types
18704
+
18705
+ const makeDataTableHeaderProps = propsFactory({
18706
+ headers: {
18707
+ type: Array,
18708
+ default: () => []
18709
+ }
18710
+ }, 'v-data-table-header');
18711
+ const VDataTableHeadersSymbol = Symbol.for('vuetify:data-table-headers');
18712
+ function createHeaders(props, options) {
18713
+ const headers = vue.ref([]);
18714
+ const columns = vue.ref([]);
18715
+ vue.watch(() => props.headers, () => {
18716
+ const wrapped = !props.headers.length ? [] : Array.isArray(props.headers[0]) ? props.headers : [props.headers];
18717
+ const flat = wrapped.flatMap((row, index) => row.map(column => ({
18718
+ column,
18719
+ row: index
18720
+ })));
18721
+ const rowCount = wrapped.length;
18722
+ const defaultHeader = {
18723
+ title: '',
18724
+ sortable: false
18725
+ };
18726
+ const defaultActionHeader = {
18727
+ ...defaultHeader,
18728
+ width: 48
18729
+ };
18205
18730
  if (options?.groupBy?.value.length) {
18206
18731
  const index = flat.findIndex(_ref => {
18207
18732
  let {
@@ -19549,8 +20074,8 @@
19549
20074
  default: 52
19550
20075
  }
19551
20076
  }, 'virtual');
19552
- const UP$1 = -1;
19553
- const DOWN$1 = 1;
20077
+ const UP = -1;
20078
+ const DOWN = 1;
19554
20079
 
19555
20080
  // TODO: Replace this with composable from v-virtual-scroll
19556
20081
  function useVirtual(props, items) {
@@ -19588,12 +20113,12 @@
19588
20113
  isScrolling.value = false;
19589
20114
  }, 100);
19590
20115
  const scrollTop = containerRef.value.scrollTop;
19591
- const direction = scrollTop < lastScrollTop ? UP$1 : DOWN$1;
20116
+ const direction = scrollTop < lastScrollTop ? UP : DOWN;
19592
20117
  const midPointIndex = calculateMidPointIndex(scrollTop);
19593
20118
  const buffer = Math.round(visibleItems.value / 3);
19594
- if (direction === UP$1 && midPointIndex <= startIndex.value) {
20119
+ if (direction === UP && midPointIndex <= startIndex.value) {
19595
20120
  startIndex.value = Math.max(midPointIndex - buffer, 0);
19596
- } else if (direction === DOWN$1 && midPointIndex >= startIndex.value + buffer * 2) {
20121
+ } else if (direction === DOWN && midPointIndex >= startIndex.value + buffer * 2) {
19597
20122
  startIndex.value = Math.min(Math.max(0, midPointIndex - buffer), items.value.length - visibleItems.value);
19598
20123
  }
19599
20124
  lastScrollTop = containerRef.value.scrollTop;
@@ -19906,6 +20431,211 @@
19906
20431
 
19907
20432
  // Types
19908
20433
 
20434
+ const VInfiniteScrollIntersect = defineComponent({
20435
+ name: 'VInfiniteScrollIntersect',
20436
+ props: {
20437
+ side: {
20438
+ type: String,
20439
+ required: true
20440
+ },
20441
+ rootRef: null,
20442
+ rootMargin: String
20443
+ },
20444
+ emits: {
20445
+ intersect: side => true
20446
+ },
20447
+ setup(props, _ref) {
20448
+ let {
20449
+ emit
20450
+ } = _ref;
20451
+ const {
20452
+ intersectionRef,
20453
+ isIntersecting
20454
+ } = useIntersectionObserver(entries => {}, props.rootMargin ? {
20455
+ root: props.rootRef,
20456
+ rootMargin: props.rootMargin
20457
+ } : undefined);
20458
+ vue.watch(isIntersecting, async val => {
20459
+ if (val) emit('intersect', props.side);
20460
+ });
20461
+ useRender(() => vue.createVNode("div", {
20462
+ "class": "v-infinite-scroll-intersect",
20463
+ "ref": intersectionRef
20464
+ }, [vue.createTextVNode("\xA0")]));
20465
+ return {};
20466
+ }
20467
+ });
20468
+ const VInfiniteScroll = genericComponent()({
20469
+ name: 'VInfiniteScroll',
20470
+ props: {
20471
+ color: String,
20472
+ direction: {
20473
+ type: String,
20474
+ default: 'vertical',
20475
+ validator: v => ['vertical', 'horizontal'].includes(v)
20476
+ },
20477
+ side: {
20478
+ type: String,
20479
+ default: 'end',
20480
+ validator: v => ['start', 'end', 'both'].includes(v)
20481
+ },
20482
+ mode: {
20483
+ type: String,
20484
+ default: 'intersect',
20485
+ validator: v => ['intersect', 'manual'].includes(v)
20486
+ },
20487
+ margin: [Number, String],
20488
+ loadMoreText: {
20489
+ type: String,
20490
+ default: '$vuetify.infiniteScroll.loadMore'
20491
+ },
20492
+ emptyText: {
20493
+ type: String,
20494
+ default: '$vuetify.infiniteScroll.empty'
20495
+ },
20496
+ ...makeDimensionProps()
20497
+ },
20498
+ emits: {
20499
+ load: options => true
20500
+ },
20501
+ setup(props, _ref2) {
20502
+ let {
20503
+ slots,
20504
+ emit
20505
+ } = _ref2;
20506
+ const rootEl = vue.ref();
20507
+ const startStatus = vue.ref('ok');
20508
+ const endStatus = vue.ref('ok');
20509
+ const margin = vue.computed(() => convertToUnit(props.margin));
20510
+ function setScrollAmount(amount) {
20511
+ if (!rootEl.value) return;
20512
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
20513
+ rootEl.value[property] = amount;
20514
+ }
20515
+ function getScrollAmount() {
20516
+ if (!rootEl.value) return 0;
20517
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
20518
+ return rootEl.value[property];
20519
+ }
20520
+ function getScrollSize() {
20521
+ if (!rootEl.value) return 0;
20522
+ const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth';
20523
+ return rootEl.value[property];
20524
+ }
20525
+ function getContainerSize() {
20526
+ if (!rootEl.value) return 0;
20527
+ const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth';
20528
+ return rootEl.value[property];
20529
+ }
20530
+ vue.onMounted(() => {
20531
+ if (!rootEl.value) return;
20532
+ if (props.side === 'start') {
20533
+ setScrollAmount(getScrollSize());
20534
+ } else if (props.side === 'both') {
20535
+ setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2);
20536
+ }
20537
+ });
20538
+ function setStatus(side, status) {
20539
+ if (side === 'start') {
20540
+ startStatus.value = status;
20541
+ } else if (side === 'end') {
20542
+ endStatus.value = status;
20543
+ }
20544
+ }
20545
+ function getStatus(side) {
20546
+ return side === 'start' ? startStatus.value : endStatus.value;
20547
+ }
20548
+ let previousScrollSize = 0;
20549
+ function handleIntersect(side) {
20550
+ const status = getStatus(side);
20551
+ if (!rootEl.value || status === 'loading') return;
20552
+ previousScrollSize = getScrollSize();
20553
+ setStatus(side, 'loading');
20554
+ function done(status) {
20555
+ setStatus(side, status);
20556
+ vue.nextTick(() => {
20557
+ if (status === 'ok' && side === 'start') {
20558
+ setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
20559
+ }
20560
+ });
20561
+ }
20562
+ emit('load', {
20563
+ side,
20564
+ done
20565
+ });
20566
+ }
20567
+ const {
20568
+ t
20569
+ } = useLocale();
20570
+ function renderSide(side, status) {
20571
+ if (props.side !== side && props.side !== 'both') return;
20572
+ const onClick = () => handleIntersect(side);
20573
+ const slotProps = {
20574
+ side,
20575
+ props: {
20576
+ onClick,
20577
+ color: props.color
20578
+ }
20579
+ };
20580
+ if (status === 'error') return slots.error?.(slotProps);
20581
+ if (status === 'empty') return slots.empty?.(slotProps) ?? vue.createVNode("div", null, [t(props.emptyText)]);
20582
+ if (props.mode === 'manual') {
20583
+ if (status === 'loading') {
20584
+ return slots.loading?.(slotProps) ?? vue.createVNode(VProgressCircular, {
20585
+ "indeterminate": true,
20586
+ "color": props.color
20587
+ }, null);
20588
+ }
20589
+ return slots['load-more']?.(slotProps) ?? vue.createVNode(VBtn, {
20590
+ "variant": "outlined",
20591
+ "color": props.color,
20592
+ "onClick": onClick
20593
+ }, {
20594
+ default: () => [t(props.loadMoreText)]
20595
+ });
20596
+ }
20597
+ return slots.loading?.(slotProps) ?? vue.createVNode(VProgressCircular, {
20598
+ "indeterminate": true,
20599
+ "color": props.color
20600
+ }, null);
20601
+ }
20602
+ const {
20603
+ dimensionStyles
20604
+ } = useDimension(props);
20605
+ useRender(() => {
20606
+ const hasStartIntersect = props.side === 'start' || props.side === 'both';
20607
+ const hasEndIntersect = props.side === 'end' || props.side === 'both';
20608
+ const intersectMode = props.mode === 'intersect';
20609
+ return vue.createVNode("div", {
20610
+ "ref": rootEl,
20611
+ "class": ['v-infinite-scroll', `v-infinite-scroll--${props.direction}`, {
20612
+ 'v-infinite-scroll--start': hasStartIntersect,
20613
+ 'v-infinite-scroll--end': hasEndIntersect
20614
+ }],
20615
+ "style": dimensionStyles.value
20616
+ }, [vue.createVNode("div", {
20617
+ "class": "v-infinite-scroll__side"
20618
+ }, [renderSide('start', startStatus.value)]), rootEl.value && hasStartIntersect && intersectMode && vue.createVNode(VInfiniteScrollIntersect, {
20619
+ "key": "start",
20620
+ "side": "start",
20621
+ "onIntersect": handleIntersect,
20622
+ "rootRef": rootEl.value,
20623
+ "rootMargin": margin.value
20624
+ }, null), slots.default?.(), rootEl.value && hasEndIntersect && intersectMode && vue.createVNode(VInfiniteScrollIntersect, {
20625
+ "key": "end",
20626
+ "side": "end",
20627
+ "onIntersect": handleIntersect,
20628
+ "rootRef": rootEl.value,
20629
+ "rootMargin": margin.value
20630
+ }, null), vue.createVNode("div", {
20631
+ "class": "v-infinite-scroll__side"
20632
+ }, [renderSide('end', endStatus.value)])]);
20633
+ });
20634
+ }
20635
+ });
20636
+
20637
+ // Types
20638
+
19909
20639
  const rootTypes = {
19910
20640
  actions: 'button@2',
19911
20641
  article: 'heading, paragraph',
@@ -20036,177 +20766,6 @@
20036
20766
  }
20037
20767
  });
20038
20768
 
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
20769
  var components = /*#__PURE__*/Object.freeze({
20211
20770
  __proto__: null,
20212
20771
  VAlert: VAlert,
@@ -20276,6 +20835,7 @@
20276
20835
  VHover: VHover,
20277
20836
  VIcon: VIcon,
20278
20837
  VImg: VImg,
20838
+ VInfiniteScroll: VInfiniteScroll,
20279
20839
  VInput: VInput,
20280
20840
  VItem: VItem,
20281
20841
  VItemGroup: VItemGroup,
@@ -20478,6 +21038,418 @@
20478
21038
  Touch: Touch
20479
21039
  });
20480
21040
 
21041
+ // Utilities
21042
+
21043
+ // Types
21044
+
21045
+ function getWeekArray(date) {
21046
+ let currentWeek = [];
21047
+ const weeks = [];
21048
+ const firstDayOfMonth = startOfMonth(date);
21049
+ const lastDayOfMonth = endOfMonth(date);
21050
+ for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
21051
+ currentWeek.push(null);
21052
+ }
21053
+ for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
21054
+ const day = new Date(date.getFullYear(), date.getMonth(), i);
21055
+
21056
+ // Add the day to the current week
21057
+ currentWeek.push(day);
21058
+
21059
+ // If the current week has 7 days, add it to the weeks array and start a new week
21060
+ if (currentWeek.length === 7) {
21061
+ weeks.push(currentWeek);
21062
+ currentWeek = [];
21063
+ }
21064
+ }
21065
+ for (let i = currentWeek.length; i < 7; i++) {
21066
+ currentWeek.push(null);
21067
+ }
21068
+ weeks.push(currentWeek);
21069
+ return weeks;
21070
+ }
21071
+ function startOfMonth(date) {
21072
+ return new Date(date.getFullYear(), date.getMonth(), 1);
21073
+ }
21074
+ function endOfMonth(date) {
21075
+ return new Date(date.getFullYear(), date.getMonth() + 1, 0);
21076
+ }
21077
+ function date(value) {
21078
+ if (value == null) return null;
21079
+ if (value instanceof Date) return value;
21080
+ if (typeof value === 'string') {
21081
+ const parsed = Date.parse(value);
21082
+ if (!isNaN(parsed)) return new Date(parsed);
21083
+ }
21084
+ return null;
21085
+ }
21086
+ const firstDay = {
21087
+ '001': 1,
21088
+ AD: 1,
21089
+ AE: 6,
21090
+ AF: 6,
21091
+ AG: 0,
21092
+ AI: 1,
21093
+ AL: 1,
21094
+ AM: 1,
21095
+ AN: 1,
21096
+ AR: 1,
21097
+ AS: 0,
21098
+ AT: 1,
21099
+ AU: 0,
21100
+ AX: 1,
21101
+ AZ: 1,
21102
+ BA: 1,
21103
+ BD: 0,
21104
+ BE: 1,
21105
+ BG: 1,
21106
+ BH: 6,
21107
+ BM: 1,
21108
+ BN: 1,
21109
+ BR: 0,
21110
+ BS: 0,
21111
+ BT: 0,
21112
+ BW: 0,
21113
+ BY: 1,
21114
+ BZ: 0,
21115
+ CA: 0,
21116
+ CH: 1,
21117
+ CL: 1,
21118
+ CM: 1,
21119
+ CN: 0,
21120
+ CO: 0,
21121
+ CR: 1,
21122
+ CY: 1,
21123
+ CZ: 1,
21124
+ DE: 1,
21125
+ DJ: 6,
21126
+ DK: 1,
21127
+ DM: 0,
21128
+ DO: 0,
21129
+ DZ: 6,
21130
+ EC: 1,
21131
+ EE: 1,
21132
+ EG: 6,
21133
+ ES: 1,
21134
+ ET: 0,
21135
+ FI: 1,
21136
+ FJ: 1,
21137
+ FO: 1,
21138
+ FR: 1,
21139
+ GB: 1,
21140
+ 'GB-alt-variant': 0,
21141
+ GE: 1,
21142
+ GF: 1,
21143
+ GP: 1,
21144
+ GR: 1,
21145
+ GT: 0,
21146
+ GU: 0,
21147
+ HK: 0,
21148
+ HN: 0,
21149
+ HR: 1,
21150
+ HU: 1,
21151
+ ID: 0,
21152
+ IE: 1,
21153
+ IL: 0,
21154
+ IN: 0,
21155
+ IQ: 6,
21156
+ IR: 6,
21157
+ IS: 1,
21158
+ IT: 1,
21159
+ JM: 0,
21160
+ JO: 6,
21161
+ JP: 0,
21162
+ KE: 0,
21163
+ KG: 1,
21164
+ KH: 0,
21165
+ KR: 0,
21166
+ KW: 6,
21167
+ KZ: 1,
21168
+ LA: 0,
21169
+ LB: 1,
21170
+ LI: 1,
21171
+ LK: 1,
21172
+ LT: 1,
21173
+ LU: 1,
21174
+ LV: 1,
21175
+ LY: 6,
21176
+ MC: 1,
21177
+ MD: 1,
21178
+ ME: 1,
21179
+ MH: 0,
21180
+ MK: 1,
21181
+ MM: 0,
21182
+ MN: 1,
21183
+ MO: 0,
21184
+ MQ: 1,
21185
+ MT: 0,
21186
+ MV: 5,
21187
+ MX: 0,
21188
+ MY: 1,
21189
+ MZ: 0,
21190
+ NI: 0,
21191
+ NL: 1,
21192
+ NO: 1,
21193
+ NP: 0,
21194
+ NZ: 1,
21195
+ OM: 6,
21196
+ PA: 0,
21197
+ PE: 0,
21198
+ PH: 0,
21199
+ PK: 0,
21200
+ PL: 1,
21201
+ PR: 0,
21202
+ PT: 0,
21203
+ PY: 0,
21204
+ QA: 6,
21205
+ RE: 1,
21206
+ RO: 1,
21207
+ RS: 1,
21208
+ RU: 1,
21209
+ SA: 0,
21210
+ SD: 6,
21211
+ SE: 1,
21212
+ SG: 0,
21213
+ SI: 1,
21214
+ SK: 1,
21215
+ SM: 1,
21216
+ SV: 0,
21217
+ SY: 6,
21218
+ TH: 0,
21219
+ TJ: 1,
21220
+ TM: 1,
21221
+ TR: 1,
21222
+ TT: 0,
21223
+ TW: 0,
21224
+ UA: 1,
21225
+ UM: 0,
21226
+ US: 0,
21227
+ UY: 1,
21228
+ UZ: 1,
21229
+ VA: 1,
21230
+ VE: 0,
21231
+ VI: 0,
21232
+ VN: 1,
21233
+ WS: 0,
21234
+ XK: 1,
21235
+ YE: 0,
21236
+ ZA: 0,
21237
+ ZW: 0
21238
+ };
21239
+ const sundayJanuarySecond2000 = new Date(2000, 0, 2);
21240
+ function getWeekdays(locale) {
21241
+ const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
21242
+ return createRange(7).map(i => {
21243
+ const weekday = new Date(sundayJanuarySecond2000);
21244
+ weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
21245
+ return new Intl.DateTimeFormat(locale, {
21246
+ weekday: 'long'
21247
+ }).format(weekday);
21248
+ });
21249
+ }
21250
+ function format(value, formatString, locale) {
21251
+ const date = new Date(value);
21252
+ let options = {};
21253
+ switch (formatString) {
21254
+ case 'fullDateWithWeekday':
21255
+ options = {
21256
+ weekday: 'long',
21257
+ day: 'numeric',
21258
+ month: 'long',
21259
+ year: 'numeric'
21260
+ };
21261
+ break;
21262
+ case 'normalDateWithWeekday':
21263
+ options = {
21264
+ weekday: 'short',
21265
+ day: 'numeric',
21266
+ month: 'short',
21267
+ year: 'numeric'
21268
+ };
21269
+ break;
21270
+ case 'keyboardDate':
21271
+ options = {};
21272
+ break;
21273
+ case 'monthAndDate':
21274
+ options = {
21275
+ month: 'long',
21276
+ day: 'numeric'
21277
+ };
21278
+ break;
21279
+ case 'monthAndYear':
21280
+ options = {
21281
+ month: 'long',
21282
+ year: 'numeric'
21283
+ };
21284
+ break;
21285
+ default:
21286
+ options = {
21287
+ timeZone: 'UTC',
21288
+ timeZoneName: 'short'
21289
+ };
21290
+ }
21291
+ return new Intl.DateTimeFormat(locale, options).format(date);
21292
+ }
21293
+ function addDays(date, amount) {
21294
+ const d = new Date(date);
21295
+ d.setDate(d.getDate() + amount);
21296
+ return d;
21297
+ }
21298
+ function addMonths(date, amount) {
21299
+ const d = new Date(date);
21300
+ d.setMonth(d.getMonth() + amount);
21301
+ return d;
21302
+ }
21303
+ function getYear(date) {
21304
+ return date.getFullYear();
21305
+ }
21306
+ function getMonth(date) {
21307
+ return date.getMonth();
21308
+ }
21309
+ function startOfYear(date) {
21310
+ return new Date(date.getFullYear(), 0, 1);
21311
+ }
21312
+ function endOfYear(date) {
21313
+ return new Date(date.getFullYear(), 11, 31);
21314
+ }
21315
+ function getMondayOfFirstWeekOfYear(year) {
21316
+ return new Date(year, 0, 1);
21317
+ }
21318
+
21319
+ // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
21320
+ function getWeek(date) {
21321
+ let year = date.getFullYear();
21322
+ let d1w1 = getMondayOfFirstWeekOfYear(year);
21323
+ if (date < d1w1) {
21324
+ year = year - 1;
21325
+ d1w1 = getMondayOfFirstWeekOfYear(year);
21326
+ } else {
21327
+ const tv = getMondayOfFirstWeekOfYear(year + 1);
21328
+ if (date >= tv) {
21329
+ year = year + 1;
21330
+ d1w1 = tv;
21331
+ }
21332
+ }
21333
+ const diffTime = Math.abs(date.getTime() - d1w1.getTime());
21334
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
21335
+ return Math.floor(diffDays / 7) + 1;
21336
+ }
21337
+ function isWithinRange(date, range) {
21338
+ return isAfter(date, range[0]) && isBefore(date, range[1]);
21339
+ }
21340
+ function isValid(date) {
21341
+ const d = new Date(date);
21342
+ return d instanceof Date && !isNaN(d.getTime());
21343
+ }
21344
+ function isAfter(date, comparing) {
21345
+ return date.getTime() > comparing.getTime();
21346
+ }
21347
+ function isBefore(date, comparing) {
21348
+ return date.getTime() < comparing.getTime();
21349
+ }
21350
+ function isEqual(date, comparing) {
21351
+ return date.getTime() === comparing.getTime();
21352
+ }
21353
+ function isSameDay(date, comparing) {
21354
+ return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21355
+ }
21356
+ function isSameMonth(date, comparing) {
21357
+ return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21358
+ }
21359
+ function getDiff(date, comparing, unit) {
21360
+ const d = new Date(date);
21361
+ const c = new Date(comparing);
21362
+ if (unit === 'month') {
21363
+ return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
21364
+ }
21365
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
21366
+ }
21367
+ function setYear(date, year) {
21368
+ const d = new Date(date);
21369
+ d.setFullYear(year);
21370
+ return d;
21371
+ }
21372
+ class VuetifyDateAdapter {
21373
+ constructor() {
21374
+ let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
21375
+ this.locale = locale;
21376
+ }
21377
+ date(value) {
21378
+ return date(value);
21379
+ }
21380
+ addDays(date, amount) {
21381
+ return addDays(date, amount);
21382
+ }
21383
+ addMonths(date, amount) {
21384
+ return addMonths(date, amount);
21385
+ }
21386
+ getWeekArray(date) {
21387
+ return getWeekArray(date);
21388
+ }
21389
+ startOfMonth(date) {
21390
+ return startOfMonth(date);
21391
+ }
21392
+ endOfMonth(date) {
21393
+ return endOfMonth(date);
21394
+ }
21395
+ format(date, formatString) {
21396
+ return format(date, formatString, this.locale);
21397
+ }
21398
+ isEqual(date, comparing) {
21399
+ return isEqual(date, comparing);
21400
+ }
21401
+ isValid(date) {
21402
+ return isValid(date);
21403
+ }
21404
+ isWithinRange(date, range) {
21405
+ return isWithinRange(date, range);
21406
+ }
21407
+ isAfter(date, comparing) {
21408
+ return isAfter(date, comparing);
21409
+ }
21410
+ isSameDay(date, comparing) {
21411
+ return isSameDay(date, comparing);
21412
+ }
21413
+ isSameMonth(date, comparing) {
21414
+ return isSameMonth(date, comparing);
21415
+ }
21416
+ setYear(date, year) {
21417
+ return setYear(date, year);
21418
+ }
21419
+ getDiff(date, comparing, unit) {
21420
+ return getDiff(date, comparing, unit);
21421
+ }
21422
+ getWeek(date) {
21423
+ return getWeek(date);
21424
+ }
21425
+ getWeekdays() {
21426
+ return getWeekdays(this.locale);
21427
+ }
21428
+ getYear(date) {
21429
+ return getYear(date);
21430
+ }
21431
+ getMonth(date) {
21432
+ return getMonth(date);
21433
+ }
21434
+ startOfYear(date) {
21435
+ return startOfYear(date);
21436
+ }
21437
+ endOfYear(date) {
21438
+ return endOfYear(date);
21439
+ }
21440
+ }
21441
+
21442
+ // Composables
21443
+
21444
+ // Types
21445
+
21446
+ const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
21447
+ function createDate(options) {
21448
+ return options ?? {
21449
+ adapter: VuetifyDateAdapter
21450
+ };
21451
+ }
21452
+
20481
21453
  // Composables
20482
21454
  function createVuetify$1() {
20483
21455
  let vuetify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -20496,6 +21468,7 @@
20496
21468
  const theme = createTheme(options.theme);
20497
21469
  const icons = createIcons(options.icons);
20498
21470
  const locale = createLocale(options.locale);
21471
+ const date = createDate(options.date);
20499
21472
  const install = app => {
20500
21473
  for (const key in directives) {
20501
21474
  app.directive(key, directives[key]);
@@ -20516,6 +21489,7 @@
20516
21489
  app.provide(ThemeSymbol, theme);
20517
21490
  app.provide(IconSymbol, icons);
20518
21491
  app.provide(LocaleSymbol, locale);
21492
+ app.provide(DateAdapterSymbol, date);
20519
21493
  if (IN_BROWSER && options.ssr) {
20520
21494
  if (app.$nuxt) {
20521
21495
  app.$nuxt.hook('app:suspense:resolve', () => {
@@ -20543,7 +21517,8 @@
20543
21517
  display: inject.call(this, DisplaySymbol),
20544
21518
  theme: inject.call(this, ThemeSymbol),
20545
21519
  icons: inject.call(this, IconSymbol),
20546
- locale: inject.call(this, LocaleSymbol)
21520
+ locale: inject.call(this, LocaleSymbol),
21521
+ date: inject.call(this, DateAdapterSymbol)
20547
21522
  });
20548
21523
  }
20549
21524
  }
@@ -20556,10 +21531,11 @@
20556
21531
  display,
20557
21532
  theme,
20558
21533
  icons,
20559
- locale
21534
+ locale,
21535
+ date
20560
21536
  };
20561
21537
  }
20562
- const version$1 = "3.1.16";
21538
+ const version$1 = "3.2.0";
20563
21539
  createVuetify$1.version = version$1;
20564
21540
 
20565
21541
  // Vue's inject() can only be used in setup
@@ -20571,7 +21547,7 @@
20571
21547
  }
20572
21548
  }
20573
21549
 
20574
- const version = "3.1.16";
21550
+ const version = "3.2.0";
20575
21551
 
20576
21552
  const createVuetify = function () {
20577
21553
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -20585,6 +21561,7 @@
20585
21561
  exports.components = components;
20586
21562
  exports.createVuetify = createVuetify;
20587
21563
  exports.directives = directives;
21564
+ exports.useDefaults = useDefaults;
20588
21565
  exports.useDisplay = useDisplay;
20589
21566
  exports.useLayout = useLayout;
20590
21567
  exports.useLocale = useLocale;