vuetify 3.1.15 → 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 (486) hide show
  1. package/dist/_component-variables-labs.sass +1 -0
  2. package/dist/json/attributes.json +368 -216
  3. package/dist/json/importMap-labs.json +4 -4
  4. package/dist/json/importMap.json +72 -68
  5. package/dist/json/tags.json +45 -2
  6. package/dist/json/web-types.json +898 -376
  7. package/dist/vuetify-labs.css +577 -355
  8. package/dist/vuetify-labs.d.ts +5910 -7620
  9. package/dist/vuetify-labs.esm.js +1702 -693
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +1701 -691
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +266 -60
  14. package/dist/vuetify.d.ts +6218 -7204
  15. package/dist/vuetify.esm.js +1425 -461
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +1424 -459
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +819 -746
  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 +35 -18
  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 +134 -93
  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 +4 -3
  114. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  115. package/lib/components/VDialog/index.d.ts +104 -282
  116. package/lib/components/VDivider/VDivider.mjs +4 -2
  117. package/lib/components/VDivider/VDivider.mjs.map +1 -1
  118. package/lib/components/VDivider/index.d.ts +22 -13
  119. package/lib/components/VExpansionPanel/VExpansionPanel.mjs +4 -2
  120. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  121. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs +4 -1
  122. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs.map +1 -1
  123. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +4 -2
  124. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  125. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +4 -1
  126. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  127. package/lib/components/VExpansionPanel/index.d.ts +109 -81
  128. package/lib/components/VField/VField.css +59 -12
  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 -6
  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 +7 -24
  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 +6 -3
  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 +5834 -6865
  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 +65 -22
  350. package/lib/labs/VDataTable/VDataTable.mjs +1 -1
  351. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  352. package/lib/labs/VDataTable/VDataTableHeaders.mjs +34 -20
  353. package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
  354. package/lib/labs/VDataTable/VDataTableRow.mjs +2 -4
  355. package/lib/labs/VDataTable/VDataTableRow.mjs.map +1 -1
  356. package/lib/labs/VDataTable/VDataTableRows.mjs +2 -2
  357. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  358. package/lib/labs/VDataTable/VDataTableServer.mjs +1 -1
  359. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  360. package/lib/labs/VDataTable/index.d.ts +61 -933
  361. package/lib/labs/VInfiniteScroll/VInfiniteScroll.css +26 -0
  362. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs +215 -0
  363. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -0
  364. package/lib/labs/VInfiniteScroll/VInfiniteScroll.sass +25 -0
  365. package/lib/labs/VInfiniteScroll/_variables.scss +3 -0
  366. package/lib/labs/VInfiniteScroll/index.d.ts +321 -0
  367. package/lib/labs/VInfiniteScroll/index.mjs +2 -0
  368. package/lib/labs/VInfiniteScroll/index.mjs.map +1 -0
  369. package/lib/labs/VSkeletonLoader/index.d.ts +0 -12
  370. package/lib/labs/components.d.ts +377 -1097
  371. package/lib/labs/components.mjs +1 -1
  372. package/lib/labs/components.mjs.map +1 -1
  373. package/lib/labs/date/DateAdapter.mjs +2 -0
  374. package/lib/labs/date/DateAdapter.mjs.map +1 -0
  375. package/lib/labs/date/adapters/vuetify.d.ts +52 -0
  376. package/lib/labs/date/adapters/vuetify.mjs +399 -0
  377. package/lib/labs/date/adapters/vuetify.mjs.map +1 -0
  378. package/lib/labs/date/date.mjs +39 -0
  379. package/lib/labs/date/date.mjs.map +1 -0
  380. package/lib/labs/date/index.d.ts +40 -0
  381. package/lib/labs/date/index.mjs +2 -0
  382. package/lib/labs/date/index.mjs.map +1 -0
  383. package/lib/labs/index.mjs +3 -2
  384. package/lib/labs/index.mjs.map +1 -1
  385. package/lib/locale/af.mjs +5 -1
  386. package/lib/locale/af.mjs.map +1 -1
  387. package/lib/locale/ar.mjs +5 -1
  388. package/lib/locale/ar.mjs.map +1 -1
  389. package/lib/locale/az.mjs +5 -1
  390. package/lib/locale/az.mjs.map +1 -1
  391. package/lib/locale/bg.mjs +5 -1
  392. package/lib/locale/bg.mjs.map +1 -1
  393. package/lib/locale/ca.mjs +5 -1
  394. package/lib/locale/ca.mjs.map +1 -1
  395. package/lib/locale/ckb.mjs +5 -1
  396. package/lib/locale/ckb.mjs.map +1 -1
  397. package/lib/locale/cs.mjs +5 -1
  398. package/lib/locale/cs.mjs.map +1 -1
  399. package/lib/locale/da.mjs +5 -1
  400. package/lib/locale/da.mjs.map +1 -1
  401. package/lib/locale/de.mjs +5 -1
  402. package/lib/locale/de.mjs.map +1 -1
  403. package/lib/locale/el.mjs +5 -1
  404. package/lib/locale/el.mjs.map +1 -1
  405. package/lib/locale/en.mjs +5 -1
  406. package/lib/locale/en.mjs.map +1 -1
  407. package/lib/locale/es.mjs +5 -1
  408. package/lib/locale/es.mjs.map +1 -1
  409. package/lib/locale/et.mjs +5 -1
  410. package/lib/locale/et.mjs.map +1 -1
  411. package/lib/locale/fa.mjs +5 -1
  412. package/lib/locale/fa.mjs.map +1 -1
  413. package/lib/locale/fi.mjs +5 -1
  414. package/lib/locale/fi.mjs.map +1 -1
  415. package/lib/locale/fr.mjs +5 -1
  416. package/lib/locale/fr.mjs.map +1 -1
  417. package/lib/locale/he.mjs +5 -1
  418. package/lib/locale/he.mjs.map +1 -1
  419. package/lib/locale/hr.mjs +5 -1
  420. package/lib/locale/hr.mjs.map +1 -1
  421. package/lib/locale/hu.mjs +5 -1
  422. package/lib/locale/hu.mjs.map +1 -1
  423. package/lib/locale/id.mjs +5 -1
  424. package/lib/locale/id.mjs.map +1 -1
  425. package/lib/locale/index.d.ts +168 -0
  426. package/lib/locale/it.mjs +5 -1
  427. package/lib/locale/it.mjs.map +1 -1
  428. package/lib/locale/ja.mjs +5 -1
  429. package/lib/locale/ja.mjs.map +1 -1
  430. package/lib/locale/ko.mjs +5 -1
  431. package/lib/locale/ko.mjs.map +1 -1
  432. package/lib/locale/lt.mjs +5 -1
  433. package/lib/locale/lt.mjs.map +1 -1
  434. package/lib/locale/lv.mjs +5 -1
  435. package/lib/locale/lv.mjs.map +1 -1
  436. package/lib/locale/nl.mjs +5 -1
  437. package/lib/locale/nl.mjs.map +1 -1
  438. package/lib/locale/no.mjs +5 -1
  439. package/lib/locale/no.mjs.map +1 -1
  440. package/lib/locale/pl.mjs +5 -1
  441. package/lib/locale/pl.mjs.map +1 -1
  442. package/lib/locale/pt.mjs +5 -1
  443. package/lib/locale/pt.mjs.map +1 -1
  444. package/lib/locale/ro.mjs +5 -1
  445. package/lib/locale/ro.mjs.map +1 -1
  446. package/lib/locale/ru.mjs +5 -1
  447. package/lib/locale/ru.mjs.map +1 -1
  448. package/lib/locale/sk.mjs +5 -1
  449. package/lib/locale/sk.mjs.map +1 -1
  450. package/lib/locale/sl.mjs +5 -1
  451. package/lib/locale/sl.mjs.map +1 -1
  452. package/lib/locale/sr-Cyrl.mjs +5 -1
  453. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  454. package/lib/locale/sr-Latn.mjs +5 -1
  455. package/lib/locale/sr-Latn.mjs.map +1 -1
  456. package/lib/locale/sv.mjs +5 -1
  457. package/lib/locale/sv.mjs.map +1 -1
  458. package/lib/locale/th.mjs +5 -1
  459. package/lib/locale/th.mjs.map +1 -1
  460. package/lib/locale/tr.mjs +5 -1
  461. package/lib/locale/tr.mjs.map +1 -1
  462. package/lib/locale/uk.mjs +5 -1
  463. package/lib/locale/uk.mjs.map +1 -1
  464. package/lib/locale/vi.mjs +5 -1
  465. package/lib/locale/vi.mjs.map +1 -1
  466. package/lib/locale/zh-Hans.mjs +5 -1
  467. package/lib/locale/zh-Hans.mjs.map +1 -1
  468. package/lib/locale/zh-Hant.mjs +5 -1
  469. package/lib/locale/zh-Hant.mjs.map +1 -1
  470. package/lib/styles/main.css +152 -0
  471. package/lib/styles/settings/_utilities.scss +11 -1
  472. package/lib/util/createSimpleFunctional.mjs +9 -4
  473. package/lib/util/createSimpleFunctional.mjs.map +1 -1
  474. package/lib/util/defineComponent.mjs +11 -43
  475. package/lib/util/defineComponent.mjs.map +1 -1
  476. package/lib/util/helpers.mjs +32 -2
  477. package/lib/util/helpers.mjs.map +1 -1
  478. package/lib/util/index.mjs +1 -0
  479. package/lib/util/index.mjs.map +1 -1
  480. package/package.json +4 -3
  481. package/lib/labs/VVirtualScroll/VVirtualScroll.mjs.map +0 -1
  482. package/lib/labs/VVirtualScroll/VVirtualScrollItem.mjs.map +0 -1
  483. package/lib/labs/VVirtualScroll/index.mjs.map +0 -1
  484. /package/lib/{labs → components}/VVirtualScroll/VVirtualScroll.css +0 -0
  485. /package/lib/{labs → components}/VVirtualScroll/VVirtualScroll.sass +0 -0
  486. /package/lib/{labs → components}/VVirtualScroll/index.mjs +0 -0
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.1.15
2
+ * Vuetify v3.2.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { ref, onBeforeUnmount, watch, readonly, reactive, computed, watchEffect, toRefs, capitalize, getCurrentInstance as getCurrentInstance$1, unref, provide, inject as inject$1, onScopeDispose, effectScope, shallowRef, defineComponent as defineComponent$1, camelize, h, onDeactivated, onActivated, onMounted, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, Fragment, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, cloneVNode, warn, toHandlers, Teleport, createTextVNode, onBeforeUpdate, vModelText, withModifiers, onUpdated } from 'vue';
7
+ import { ref, onBeforeUnmount, watch, readonly, reactive, computed, watchEffect, toRefs, capitalize, onScopeDispose, effectScope, shallowRef, inject as inject$1, unref, provide, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onDeactivated, onActivated, onMounted, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, Fragment, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, cloneVNode, warn, toHandlers, Teleport, createTextVNode, onBeforeUpdate, vModelText, onUpdated, withModifiers } from 'vue';
8
8
 
9
9
  const IN_BROWSER = typeof window !== 'undefined';
10
10
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
@@ -167,11 +167,11 @@ const keyValues = Object.freeze({
167
167
  function keys(o) {
168
168
  return Object.keys(o);
169
169
  }
170
- function pick(obj, paths) {
170
+ function pick(obj, paths, exclude) {
171
171
  const found = Object.create(null);
172
172
  const rest = Object.create(null);
173
173
  for (const key in obj) {
174
- if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key)) {
174
+ if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key) && !exclude?.some(path => path === key)) {
175
175
  found[key] = obj[key];
176
176
  } else {
177
177
  rest[key] = obj[key];
@@ -356,6 +356,32 @@ function callEvent(handler) {
356
356
  handler(...args);
357
357
  }
358
358
  }
359
+ function focusableChildren(el) {
360
+ const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', '[tabindex]'].map(s => `${s}:not([tabindex="-1"]):not([disabled])`).join(', ');
361
+ return [...el.querySelectorAll(targets)];
362
+ }
363
+ function focusChild(el, location) {
364
+ const focusable = focusableChildren(el);
365
+ const idx = focusable.indexOf(document.activeElement);
366
+ if (!location) {
367
+ if (!el.contains(document.activeElement)) {
368
+ focusable[0]?.focus();
369
+ }
370
+ } else if (location === 'first') {
371
+ focusable[0]?.focus();
372
+ } else if (location === 'last') {
373
+ focusable.at(-1)?.focus();
374
+ } else {
375
+ let _el;
376
+ let idxx = idx;
377
+ const inc = location === 'next' ? 1 : -1;
378
+ do {
379
+ idxx += inc;
380
+ _el = focusable[idxx];
381
+ } while ((!_el || _el.offsetParent == null) && idxx < focusable.length && idxx >= 0);
382
+ if (_el) _el.focus();else focusChild(el, location === 'next' ? 'first' : 'last');
383
+ }
384
+ }
359
385
 
360
386
  const block = ['top', 'bottom'];
361
387
  const inline = ['start', 'end', 'left', 'right'];
@@ -856,44 +882,6 @@ function getContrast(first, second) {
856
882
  return (light + 0.05) / (dark + 0.05);
857
883
  }
858
884
 
859
- // Utilities
860
- function getCurrentInstance(name, message) {
861
- const vm = getCurrentInstance$1();
862
- if (!vm) {
863
- throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
864
- }
865
- return vm;
866
- }
867
- function getCurrentInstanceName() {
868
- let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
869
- const vm = getCurrentInstance(name).type;
870
- return toKebabCase(vm?.aliasName || vm?.name);
871
- }
872
- let _uid = 0;
873
- let _map = new WeakMap();
874
- function getUid() {
875
- const vm = getCurrentInstance('getUid');
876
- if (_map.has(vm)) return _map.get(vm);else {
877
- const uid = _uid++;
878
- _map.set(vm, uid);
879
- return uid;
880
- }
881
- }
882
- getUid.reset = () => {
883
- _uid = 0;
884
- _map = new WeakMap();
885
- };
886
-
887
- function injectSelf(key) {
888
- const {
889
- provides
890
- } = getCurrentInstance('injectSelf');
891
- if (provides && key in provides) {
892
- // TS doesn't allow symbol as index type
893
- return provides[key];
894
- }
895
- }
896
-
897
885
  /**
898
886
  * Creates a factory function for props definitions.
899
887
  * This is used to define props in a composable then override
@@ -947,17 +935,54 @@ function propsFactory(props, source) {
947
935
 
948
936
  // Types
949
937
 
938
+ // Composables
939
+ const makeComponentProps = propsFactory({
940
+ class: [String, Array],
941
+ style: {
942
+ type: [String, Array, Object],
943
+ default: null
944
+ }
945
+ }, 'component');
946
+
947
+ function useToggleScope(source, fn) {
948
+ let scope;
949
+ function start() {
950
+ scope = effectScope();
951
+ scope.run(() => fn.length ? fn(() => {
952
+ scope?.stop();
953
+ start();
954
+ }) : fn());
955
+ }
956
+ watch(source, active => {
957
+ if (active && !scope) {
958
+ start();
959
+ } else if (!active) {
960
+ scope?.stop();
961
+ scope = undefined;
962
+ }
963
+ }, {
964
+ immediate: true
965
+ });
966
+ onScopeDispose(() => {
967
+ scope?.stop();
968
+ });
969
+ }
970
+
971
+ // Composables
972
+
973
+ // Types
974
+
950
975
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
951
976
  function createDefaults(options) {
952
977
  return ref(options);
953
978
  }
954
- function useDefaults() {
979
+ function injectDefaults() {
955
980
  const defaults = inject$1(DefaultsSymbol);
956
981
  if (!defaults) throw new Error('[Vuetify] Could not find defaults instance');
957
982
  return defaults;
958
983
  }
959
984
  function provideDefaults(defaults, options) {
960
- const injectedDefaults = useDefaults();
985
+ const injectedDefaults = injectDefaults();
961
986
  const providedDefaults = ref(defaults);
962
987
  const newDefaults = computed(() => {
963
988
  const disabled = unref(options?.disabled);
@@ -984,41 +1009,58 @@ function provideDefaults(defaults, options) {
984
1009
  provide(DefaultsSymbol, newDefaults);
985
1010
  return newDefaults;
986
1011
  }
987
-
988
- function useToggleScope(source, fn) {
989
- let scope;
990
- function start() {
991
- scope = effectScope();
992
- scope.run(() => fn.length ? fn(() => {
993
- scope?.stop();
994
- start();
995
- }) : fn());
996
- }
997
- watch(source, active => {
998
- if (active && !scope) {
999
- start();
1000
- } else if (!active) {
1001
- scope?.stop();
1002
- scope = undefined;
1012
+ function propIsDefined(vnode, prop) {
1013
+ return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1014
+ }
1015
+ function useDefaults() {
1016
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1017
+ let name = arguments.length > 1 ? arguments[1] : undefined;
1018
+ let defaults = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : injectDefaults();
1019
+ const vm = getCurrentInstance('useDefaults');
1020
+ name = name ?? vm.type.name ?? vm.type.__name;
1021
+ if (!name) {
1022
+ throw new Error('[Vuetify] Could not determine component name');
1023
+ }
1024
+ const componentDefaults = computed(() => defaults.value?.[props._as ?? name]);
1025
+ const _props = new Proxy(props, {
1026
+ get(target, prop) {
1027
+ const propValue = Reflect.get(target, prop);
1028
+ if (prop === 'class' || prop === 'style') {
1029
+ return [componentDefaults.value?.[prop], propValue].filter(v => v != null);
1030
+ } else if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1031
+ return componentDefaults.value?.[prop] ?? defaults.value?.global?.[prop] ?? propValue;
1032
+ }
1033
+ return propValue;
1003
1034
  }
1004
- }, {
1005
- immediate: true
1006
1035
  });
1007
- onScopeDispose(() => {
1008
- scope?.stop();
1036
+ const _subcomponentDefaults = shallowRef();
1037
+ watchEffect(() => {
1038
+ if (componentDefaults.value) {
1039
+ const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1040
+ let [key] = _ref;
1041
+ return key.startsWith(key[0].toUpperCase());
1042
+ });
1043
+ if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1044
+ }
1009
1045
  });
1046
+ function provideSubDefaults() {
1047
+ // If subcomponent defaults are provided, override any
1048
+ // subcomponents provided by the component's setup function.
1049
+ // This uses injectSelf so must be done after the original setup to work.
1050
+ useToggleScope(_subcomponentDefaults, () => {
1051
+ provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1052
+ });
1053
+ }
1054
+ return {
1055
+ props: _props,
1056
+ provideSubDefaults
1057
+ };
1010
1058
  }
1011
1059
 
1012
1060
  // Utils
1013
1061
 
1014
1062
  // Types
1015
1063
 
1016
- function propIsDefined(vnode, prop) {
1017
- return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1018
- }
1019
-
1020
- // No props
1021
-
1022
1064
  // Implementation
1023
1065
  function defineComponent(options) {
1024
1066
  options._setup = options._setup ?? options.setup;
@@ -1030,43 +1072,20 @@ function defineComponent(options) {
1030
1072
  options.props = propsFactory(options.props ?? {}, toKebabCase(options.name))();
1031
1073
  const propKeys = Object.keys(options.props);
1032
1074
  options.filterProps = function filterProps(props) {
1033
- return pick(props, propKeys);
1075
+ return pick(props, propKeys, ['class', 'style']);
1034
1076
  };
1035
1077
  options.props._as = String;
1036
1078
  options.setup = function setup(props, ctx) {
1037
- const defaults = useDefaults();
1079
+ const defaults = injectDefaults();
1038
1080
 
1039
1081
  // Skip props proxy if defaults are not provided
1040
1082
  if (!defaults.value) return options._setup(props, ctx);
1041
- const vm = getCurrentInstance$1();
1042
- const componentDefaults = computed(() => defaults.value[props._as ?? options.name]);
1043
- const _props = new Proxy(props, {
1044
- get(target, prop) {
1045
- const propValue = Reflect.get(target, prop);
1046
- if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1047
- return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? propValue;
1048
- }
1049
- return propValue;
1050
- }
1051
- });
1052
- const _subcomponentDefaults = shallowRef();
1053
- watchEffect(() => {
1054
- if (componentDefaults.value) {
1055
- const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1056
- let [key] = _ref;
1057
- return key.startsWith(key[0].toUpperCase());
1058
- });
1059
- if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1060
- }
1061
- });
1083
+ const {
1084
+ props: _props,
1085
+ provideSubDefaults
1086
+ } = useDefaults(props, props._as ?? options.name, defaults);
1062
1087
  const setupBindings = options._setup(_props, ctx);
1063
-
1064
- // If subcomponent defaults are provided, override any
1065
- // subcomponents provided by the component's setup function.
1066
- // This uses injectSelf so must be done after the original setup to work.
1067
- useToggleScope(_subcomponentDefaults, () => {
1068
- provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1069
- });
1088
+ provideSubDefaults();
1070
1089
  return setupBindings;
1071
1090
  };
1072
1091
  }
@@ -1091,15 +1110,19 @@ function createSimpleFunctional(klass) {
1091
1110
  tag: {
1092
1111
  type: String,
1093
1112
  default: tag
1094
- }
1113
+ },
1114
+ ...makeComponentProps()
1095
1115
  },
1096
1116
  setup(props, _ref) {
1097
1117
  let {
1098
1118
  slots
1099
1119
  } = _ref;
1100
- return () => h(props.tag, {
1101
- class: klass
1102
- }, slots.default?.());
1120
+ return () => {
1121
+ return h(props.tag, {
1122
+ class: [klass, props.class],
1123
+ style: props.style
1124
+ }, slots.default?.());
1125
+ };
1103
1126
  }
1104
1127
  });
1105
1128
  }
@@ -1132,6 +1155,34 @@ const standardEasing = 'cubic-bezier(0.4, 0, 0.2, 1)';
1132
1155
  const deceleratedEasing = 'cubic-bezier(0.0, 0, 0.2, 1)'; // Entering
1133
1156
  const acceleratedEasing = 'cubic-bezier(0.4, 0, 1, 1)'; // Leaving
1134
1157
 
1158
+ // Utilities
1159
+ function getCurrentInstance(name, message) {
1160
+ const vm = getCurrentInstance$1();
1161
+ if (!vm) {
1162
+ throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
1163
+ }
1164
+ return vm;
1165
+ }
1166
+ function getCurrentInstanceName() {
1167
+ let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
1168
+ const vm = getCurrentInstance(name).type;
1169
+ return toKebabCase(vm?.aliasName || vm?.name);
1170
+ }
1171
+ let _uid = 0;
1172
+ let _map = new WeakMap();
1173
+ function getUid() {
1174
+ const vm = getCurrentInstance('getUid');
1175
+ if (_map.has(vm)) return _map.get(vm);else {
1176
+ const uid = _uid++;
1177
+ _map.set(vm, uid);
1178
+ return uid;
1179
+ }
1180
+ }
1181
+ getUid.reset = () => {
1182
+ _uid = 0;
1183
+ _map = new WeakMap();
1184
+ };
1185
+
1135
1186
  function getScrollParent(el) {
1136
1187
  while (el) {
1137
1188
  if (hasScrollbar(el)) return el;
@@ -1155,6 +1206,16 @@ function hasScrollbar(el) {
1155
1206
  return style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1156
1207
  }
1157
1208
 
1209
+ function injectSelf(key) {
1210
+ const {
1211
+ provides
1212
+ } = getCurrentInstance('injectSelf');
1213
+ if (provides && key in provides) {
1214
+ // TS doesn't allow symbol as index type
1215
+ return provides[key];
1216
+ }
1217
+ }
1218
+
1158
1219
  function isFixedPosition(el) {
1159
1220
  while (el) {
1160
1221
  if (window.getComputedStyle(el).position === 'fixed') {
@@ -1935,7 +1996,11 @@ var en = {
1935
1996
  item: 'Rating {0} of {1}'
1936
1997
  }
1937
1998
  },
1938
- loading: 'Loading...'
1999
+ loading: 'Loading...',
2000
+ infiniteScroll: {
2001
+ loadMore: 'Load more',
2002
+ empty: 'No more'
2003
+ }
1939
2004
  };
1940
2005
 
1941
2006
  const LANG_PREFIX = '$vuetify.';
@@ -2133,6 +2198,7 @@ function useRtl() {
2133
2198
  const VApp = genericComponent()({
2134
2199
  name: 'VApp',
2135
2200
  props: {
2201
+ ...makeComponentProps(),
2136
2202
  ...makeLayoutProps({
2137
2203
  fullHeight: true
2138
2204
  }),
@@ -2155,8 +2221,8 @@ const VApp = genericComponent()({
2155
2221
  } = useRtl();
2156
2222
  useRender(() => createVNode("div", {
2157
2223
  "ref": layoutRef,
2158
- "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value],
2159
- "style": layoutStyles.value
2224
+ "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value, props.class],
2225
+ "style": [layoutStyles.value, props.style]
2160
2226
  }, [createVNode("div", {
2161
2227
  "class": "v-application__wrap"
2162
2228
  }, [slots.default?.()])]));
@@ -2581,6 +2647,7 @@ const VResponsive = genericComponent()({
2581
2647
  props: {
2582
2648
  aspectRatio: [String, Number],
2583
2649
  contentClass: String,
2650
+ ...makeComponentProps(),
2584
2651
  ...makeDimensionProps()
2585
2652
  },
2586
2653
  setup(props, _ref) {
@@ -2594,8 +2661,8 @@ const VResponsive = genericComponent()({
2594
2661
  dimensionStyles
2595
2662
  } = useDimension(props);
2596
2663
  useRender(() => createVNode("div", {
2597
- "class": "v-responsive",
2598
- "style": dimensionStyles.value
2664
+ "class": ['v-responsive', props.class],
2665
+ "style": [dimensionStyles.value, props.style]
2599
2666
  }, [createVNode("div", {
2600
2667
  "class": "v-responsive__sizer",
2601
2668
  "style": aspectStyles.value
@@ -2713,6 +2780,7 @@ const VImg = genericComponent()({
2713
2780
  },
2714
2781
  srcset: String,
2715
2782
  width: [String, Number],
2783
+ ...makeComponentProps(),
2716
2784
  ...makeTransitionProps()
2717
2785
  },
2718
2786
  emits: {
@@ -2900,10 +2968,10 @@ const VImg = genericComponent()({
2900
2968
  useRender(() => withDirectives(createVNode(VResponsive, {
2901
2969
  "class": ['v-img', {
2902
2970
  'v-img--booting': !isBooted.value
2903
- }],
2904
- "style": {
2971
+ }, props.class],
2972
+ "style": [{
2905
2973
  width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width)
2906
- },
2974
+ }, props.style],
2907
2975
  "aspectRatio": aspectRatio.value,
2908
2976
  "aria-label": props.alt,
2909
2977
  "role": props.alt ? 'img' : undefined
@@ -2938,10 +3006,9 @@ const makeTagProps = propsFactory({
2938
3006
  }
2939
3007
  }, 'tag');
2940
3008
 
2941
- // Types
2942
-
2943
3009
  const makeVToolbarTitleProps = propsFactory({
2944
3010
  text: String,
3011
+ ...makeComponentProps(),
2945
3012
  ...makeTagProps()
2946
3013
  }, 'v-toolbar-title');
2947
3014
  const VToolbarTitle = genericComponent()({
@@ -2954,7 +3021,8 @@ const VToolbarTitle = genericComponent()({
2954
3021
  useRender(() => {
2955
3022
  const hasText = !!(slots.default || slots.text || props.text);
2956
3023
  return createVNode(props.tag, {
2957
- "class": "v-toolbar-title"
3024
+ "class": ['v-toolbar-title', props.class],
3025
+ "style": props.style
2958
3026
  }, {
2959
3027
  default: () => [hasText && createVNode("div", {
2960
3028
  "class": "v-toolbar-title__placeholder"
@@ -3135,6 +3203,7 @@ const makeVToolbarProps = propsFactory({
3135
3203
  image: String,
3136
3204
  title: String,
3137
3205
  ...makeBorderProps(),
3206
+ ...makeComponentProps(),
3138
3207
  ...makeElevationProps(),
3139
3208
  ...makeRoundedProps(),
3140
3209
  ...makeTagProps({
@@ -3185,8 +3254,8 @@ const VToolbar = genericComponent()({
3185
3254
  'v-toolbar--flat': props.flat,
3186
3255
  'v-toolbar--floating': props.floating,
3187
3256
  [`v-toolbar--density-${props.density}`]: true
3188
- }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value],
3189
- "style": [backgroundColorStyles.value]
3257
+ }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value, props.class],
3258
+ "style": [backgroundColorStyles.value, props.style]
3190
3259
  }, {
3191
3260
  default: () => [hasImage && createVNode("div", {
3192
3261
  "key": "image",
@@ -3253,6 +3322,98 @@ const VToolbar = genericComponent()({
3253
3322
 
3254
3323
  // Utilities
3255
3324
 
3325
+ // Types
3326
+
3327
+ // Composables
3328
+ const makeScrollProps = propsFactory({
3329
+ scrollTarget: {
3330
+ type: String
3331
+ },
3332
+ scrollThreshold: {
3333
+ type: [String, Number]
3334
+ }
3335
+ }, 'scroll');
3336
+ function useScroll(props) {
3337
+ let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3338
+ const {
3339
+ thresholdMetCallback,
3340
+ scrollThreshold,
3341
+ canScroll
3342
+ } = args;
3343
+ let previousScroll = 0;
3344
+ const target = ref(null);
3345
+ const currentScroll = ref(0);
3346
+ const savedScroll = ref(0);
3347
+ const currentThreshold = ref(0);
3348
+ const isScrollActive = ref(false);
3349
+ const isScrollingUp = ref(false);
3350
+ const computedScrollThreshold = computed(() => {
3351
+ return Number(props.scrollThreshold ?? scrollThreshold ?? 300);
3352
+ });
3353
+ const onScroll = () => {
3354
+ const targetEl = target.value;
3355
+ if (!targetEl || canScroll && !canScroll.value) return;
3356
+ previousScroll = currentScroll.value;
3357
+ currentScroll.value = 'window' in targetEl ? targetEl.pageYOffset : targetEl.scrollTop;
3358
+ isScrollingUp.value = currentScroll.value < previousScroll;
3359
+ currentThreshold.value = Math.abs(currentScroll.value - computedScrollThreshold.value);
3360
+ };
3361
+ watch(isScrollingUp, () => {
3362
+ savedScroll.value = savedScroll.value || currentScroll.value;
3363
+ });
3364
+ watch(isScrollActive, () => {
3365
+ savedScroll.value = 0;
3366
+ });
3367
+ onMounted(() => {
3368
+ watch(() => props.scrollTarget, scrollTarget => {
3369
+ const newTarget = scrollTarget ? document.querySelector(scrollTarget) : window;
3370
+ if (!newTarget) {
3371
+ consoleWarn(`Unable to locate element with identifier ${scrollTarget}`, getCurrentInstance$1());
3372
+ return;
3373
+ }
3374
+ if (newTarget === target.value) return;
3375
+ target.value?.removeEventListener('scroll', onScroll);
3376
+ target.value = newTarget;
3377
+ target.value.addEventListener('scroll', onScroll, {
3378
+ passive: true
3379
+ });
3380
+ }, {
3381
+ immediate: true
3382
+ });
3383
+ });
3384
+ onBeforeUnmount(() => {
3385
+ target.value?.removeEventListener('scroll', onScroll);
3386
+ });
3387
+ thresholdMetCallback && watch(() => Math.abs(currentScroll.value - savedScroll.value) > computedScrollThreshold.value, thresholdMet => {
3388
+ thresholdMet && thresholdMetCallback({
3389
+ currentThreshold: currentThreshold.value,
3390
+ isScrollingUp: isScrollingUp.value,
3391
+ savedScroll
3392
+ });
3393
+ }, {
3394
+ immediate: true
3395
+ });
3396
+
3397
+ // Do we need this? If yes - seems that
3398
+ // there's no need to expose onScroll
3399
+ canScroll && watch(canScroll, onScroll, {
3400
+ immediate: true
3401
+ });
3402
+ return {
3403
+ computedScrollThreshold,
3404
+ currentScroll,
3405
+ currentThreshold,
3406
+ isScrollActive,
3407
+ // required only for testing
3408
+ // probably can be removed
3409
+ // later (2 chars chlng)
3410
+ isScrollingUp,
3411
+ savedScroll
3412
+ };
3413
+ }
3414
+
3415
+ // Utilities
3416
+
3256
3417
  // Composables
3257
3418
  function useSsrBoot() {
3258
3419
  const isBooted = ref(false);
@@ -3275,13 +3436,7 @@ function useSsrBoot() {
3275
3436
  const VAppBar = genericComponent()({
3276
3437
  name: 'VAppBar',
3277
3438
  props: {
3278
- // TODO: Implement scrolling techniques
3279
- // hideOnScroll: Boolean
3280
- // invertedScroll: Boolean
3281
- // collapseOnScroll: Boolean
3282
- // elevateOnScroll: Boolean
3283
- // shrinkOnScroll: Boolean
3284
- // fadeImageOnScroll: Boolean
3439
+ scrollBehavior: String,
3285
3440
  modelValue: {
3286
3441
  type: Boolean,
3287
3442
  default: true
@@ -3293,6 +3448,7 @@ const VAppBar = genericComponent()({
3293
3448
  },
3294
3449
  ...makeVToolbarProps(),
3295
3450
  ...makeLayoutItemProps(),
3451
+ ...makeScrollProps(),
3296
3452
  height: {
3297
3453
  type: [Number, String],
3298
3454
  default: 64
@@ -3307,11 +3463,63 @@ const VAppBar = genericComponent()({
3307
3463
  } = _ref;
3308
3464
  const vToolbarRef = ref();
3309
3465
  const isActive = useProxiedModel(props, 'modelValue');
3466
+ const scrollBehavior = computed(() => {
3467
+ const behavior = new Set(props.scrollBehavior?.split(' ') ?? []);
3468
+ return {
3469
+ hide: behavior.has('hide'),
3470
+ // fullyHide: behavior.has('fully-hide'),
3471
+ inverted: behavior.has('inverted'),
3472
+ collapse: behavior.has('collapse'),
3473
+ elevate: behavior.has('elevate'),
3474
+ fadeImage: behavior.has('fade-image')
3475
+ // shrink: behavior.has('shrink'),
3476
+ };
3477
+ });
3478
+
3479
+ const canScroll = computed(() => {
3480
+ const behavior = scrollBehavior.value;
3481
+ return behavior.hide ||
3482
+ // behavior.fullyHide ||
3483
+ behavior.inverted || behavior.collapse || behavior.elevate || behavior.fadeImage ||
3484
+ // behavior.shrink ||
3485
+ !isActive.value;
3486
+ });
3487
+ const {
3488
+ currentScroll,
3489
+ currentThreshold,
3490
+ computedScrollThreshold,
3491
+ isScrollingUp
3492
+ } = useScroll(props, {
3493
+ canScroll
3494
+ });
3495
+ const isCollapsed = computed(() => props.collapse || scrollBehavior.value.collapse && (scrollBehavior.value.inverted ? currentScroll.value < 1 : currentScroll.value > 0));
3496
+ const isFlat = computed(() => props.flat || scrollBehavior.value.elevate && currentScroll.value === (scrollBehavior.value.inverted ? 1 : 0));
3497
+ const scrollRatio = computed(() => Math.min((currentThreshold.value - currentScroll.value) / currentThreshold.value || 1, 1));
3498
+ const opacity = computed(() => scrollBehavior.value.fadeImage ? scrollBehavior.value.inverted ? 1 - scrollRatio.value : scrollRatio.value : undefined);
3310
3499
  const height = computed(() => {
3500
+ if (scrollBehavior.value.hide && scrollBehavior.value.inverted) return 0;
3311
3501
  const height = vToolbarRef.value?.contentHeight ?? 0;
3312
3502
  const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0;
3313
3503
  return height + extensionHeight;
3314
3504
  });
3505
+ function setActive() {
3506
+ const val = currentScroll.value;
3507
+ if (scrollBehavior.value.hide) {
3508
+ if (scrollBehavior.value.inverted) {
3509
+ isActive.value = val > computedScrollThreshold.value;
3510
+ } else {
3511
+ isActive.value = isScrollingUp.value || val < computedScrollThreshold.value;
3512
+ }
3513
+ } else if (scrollBehavior.value.inverted) {
3514
+ isActive.value = currentScroll.value === 0;
3515
+ } else {
3516
+ isActive.value = true;
3517
+ }
3518
+ }
3519
+ watch(currentScroll, setActive, {
3520
+ immediate: true
3521
+ });
3522
+ watch(scrollBehavior, setActive);
3315
3523
  const {
3316
3524
  ssrBootStyles
3317
3525
  } = useSsrBoot();
@@ -3322,7 +3530,7 @@ const VAppBar = genericComponent()({
3322
3530
  order: computed(() => parseInt(props.order, 10)),
3323
3531
  position: toRef(props, 'location'),
3324
3532
  layoutSize: height,
3325
- elementSize: height,
3533
+ elementSize: ref(undefined),
3326
3534
  active: isActive,
3327
3535
  absolute: toRef(props, 'absolute')
3328
3536
  });
@@ -3332,13 +3540,17 @@ const VAppBar = genericComponent()({
3332
3540
  "ref": vToolbarRef,
3333
3541
  "class": ['v-app-bar', {
3334
3542
  'v-app-bar--bottom': props.location === 'bottom'
3335
- }],
3336
- "style": {
3543
+ }, props.class],
3544
+ "style": [{
3337
3545
  ...layoutItemStyles.value,
3546
+ '--v-toolbar-image-opacity': opacity.value,
3338
3547
  height: undefined,
3339
3548
  ...ssrBootStyles.value
3340
- }
3341
- }, toolbarProps), slots);
3549
+ }, props.style]
3550
+ }, toolbarProps, {
3551
+ "collapse": isCollapsed.value,
3552
+ "flat": isFlat.value
3553
+ }), slots);
3342
3554
  });
3343
3555
  return {};
3344
3556
  }
@@ -3421,6 +3633,7 @@ function useVariant(props) {
3421
3633
  const makeVBtnGroupProps = propsFactory({
3422
3634
  divided: Boolean,
3423
3635
  ...makeBorderProps(),
3636
+ ...makeComponentProps(),
3424
3637
  ...makeDensityProps(),
3425
3638
  ...makeElevationProps(),
3426
3639
  ...makeRoundedProps(),
@@ -3463,7 +3676,8 @@ const VBtnGroup = genericComponent()({
3463
3676
  return createVNode(props.tag, {
3464
3677
  "class": ['v-btn-group', {
3465
3678
  'v-btn-group--divided': props.divided
3466
- }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value]
3679
+ }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
3680
+ "style": props.style
3467
3681
  }, slots);
3468
3682
  });
3469
3683
  }
@@ -3696,8 +3910,10 @@ const VBtnToggle = genericComponent()({
3696
3910
  useRender(() => {
3697
3911
  const [btnGroupProps] = VBtnGroup.filterProps(props);
3698
3912
  return createVNode(VBtnGroup, mergeProps({
3699
- "class": "v-btn-toggle"
3700
- }, btnGroupProps), {
3913
+ "class": ['v-btn-toggle', props.class]
3914
+ }, btnGroupProps, {
3915
+ "style": props.style
3916
+ }), {
3701
3917
  default: () => [slots.default?.({
3702
3918
  isSelected,
3703
3919
  next,
@@ -3768,7 +3984,7 @@ const mdi = {
3768
3984
 
3769
3985
  // Types
3770
3986
 
3771
- const IconValue = [String, Function, Object];
3987
+ const IconValue = [String, Function, Object, Array];
3772
3988
  const IconSymbol = Symbol.for('vuetify:icons');
3773
3989
  const makeIconProps = propsFactory({
3774
3990
  icon: {
@@ -3788,8 +4004,9 @@ const VComponentIcon = genericComponent()({
3788
4004
  slots
3789
4005
  } = _ref;
3790
4006
  return () => {
4007
+ const Icon = props.icon;
3791
4008
  return createVNode(props.tag, null, {
3792
- default: () => [props.icon ? createVNode(props.icon, null, null) : slots.default?.()]
4009
+ default: () => [props.icon ? createVNode(Icon, null, null) : slots.default?.()]
3793
4010
  });
3794
4011
  };
3795
4012
  }
@@ -3812,7 +4029,12 @@ const VSvgIcon = defineComponent({
3812
4029
  "viewBox": "0 0 24 24",
3813
4030
  "role": "img",
3814
4031
  "aria-hidden": "true"
3815
- }, [createVNode("path", {
4032
+ }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? createVNode("path", {
4033
+ "d": path[0],
4034
+ "fill-opacity": path[1]
4035
+ }, null) : createVNode("path", {
4036
+ "d": path
4037
+ }, null)) : createVNode("path", {
3816
4038
  "d": props.icon
3817
4039
  }, null)])]
3818
4040
  });
@@ -3877,7 +4099,12 @@ const useIcon = props => {
3877
4099
  }
3878
4100
  }
3879
4101
  if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
3880
- if (typeof icon !== 'string') {
4102
+ if (Array.isArray(icon)) {
4103
+ return {
4104
+ component: VSvgIcon,
4105
+ icon
4106
+ };
4107
+ } else if (typeof icon !== 'string') {
3881
4108
  return {
3882
4109
  component: VComponentIcon,
3883
4110
  icon
@@ -3934,6 +4161,7 @@ const makeVIconProps = propsFactory({
3934
4161
  start: Boolean,
3935
4162
  end: Boolean,
3936
4163
  icon: IconValue,
4164
+ ...makeComponentProps(),
3937
4165
  ...makeSizeProps(),
3938
4166
  ...makeTagProps({
3939
4167
  tag: 'i'
@@ -3976,12 +4204,12 @@ const VIcon = genericComponent()({
3976
4204
  'v-icon--clickable': !!attrs.onClick,
3977
4205
  'v-icon--start': props.start,
3978
4206
  'v-icon--end': props.end
3979
- }],
4207
+ }, props.class],
3980
4208
  "style": [!sizeClasses.value ? {
3981
4209
  fontSize: convertToUnit(props.size),
3982
4210
  height: convertToUnit(props.size),
3983
4211
  width: convertToUnit(props.size)
3984
- } : undefined, textColorStyles.value],
4212
+ } : undefined, textColorStyles.value, props.style],
3985
4213
  "role": attrs.onClick ? 'button' : undefined,
3986
4214
  "aria-hidden": !attrs.onClick
3987
4215
  }, {
@@ -3992,14 +4220,14 @@ const VIcon = genericComponent()({
3992
4220
  });
3993
4221
 
3994
4222
  // Utilities
3995
- function useIntersectionObserver(callback) {
4223
+ function useIntersectionObserver(callback, options) {
3996
4224
  const intersectionRef = ref();
3997
4225
  const isIntersecting = ref(false);
3998
4226
  if (SUPPORTS_INTERSECTION) {
3999
4227
  const observer = new IntersectionObserver(entries => {
4000
4228
  callback?.(entries, observer);
4001
4229
  isIntersecting.value = !!entries.find(entry => entry.isIntersecting);
4002
- });
4230
+ }, options);
4003
4231
  onBeforeUnmount(() => {
4004
4232
  observer.disconnect();
4005
4233
  });
@@ -4039,6 +4267,7 @@ const VProgressCircular = genericComponent()({
4039
4267
  type: [Number, String],
4040
4268
  default: 4
4041
4269
  },
4270
+ ...makeComponentProps(),
4042
4271
  ...makeSizeProps(),
4043
4272
  ...makeTagProps({
4044
4273
  tag: 'div'
@@ -4094,8 +4323,8 @@ const VProgressCircular = genericComponent()({
4094
4323
  'v-progress-circular--indeterminate': !!props.indeterminate,
4095
4324
  'v-progress-circular--visible': isIntersecting.value,
4096
4325
  'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink'
4097
- }, themeClasses.value, sizeClasses.value, textColorClasses.value],
4098
- "style": [sizeStyles.value, textColorStyles.value],
4326
+ }, themeClasses.value, sizeClasses.value, textColorClasses.value, props.class],
4327
+ "style": [sizeStyles.value, textColorStyles.value, props.style],
4099
4328
  "role": "progressbar",
4100
4329
  "aria-valuemin": "0",
4101
4330
  "aria-valuemax": "100",
@@ -4514,6 +4743,7 @@ const VProgressLinear = genericComponent()({
4514
4743
  stream: Boolean,
4515
4744
  striped: Boolean,
4516
4745
  roundedBar: Boolean,
4746
+ ...makeComponentProps(),
4517
4747
  ...makeLocationProps({
4518
4748
  location: 'top'
4519
4749
  }),
@@ -4585,14 +4815,14 @@ const VProgressLinear = genericComponent()({
4585
4815
  'v-progress-linear--rounded': props.rounded,
4586
4816
  'v-progress-linear--rounded-bar': props.roundedBar,
4587
4817
  'v-progress-linear--striped': props.striped
4588
- }, roundedClasses.value, themeClasses.value],
4589
- "style": {
4818
+ }, roundedClasses.value, themeClasses.value, props.class],
4819
+ "style": [{
4590
4820
  bottom: props.location === 'bottom' ? 0 : undefined,
4591
4821
  top: props.location === 'top' ? 0 : undefined,
4592
4822
  height: props.active ? convertToUnit(height.value) : 0,
4593
4823
  '--v-progress-linear-height': convertToUnit(height.value),
4594
4824
  ...locationStyles.value
4595
- },
4825
+ }, props.style],
4596
4826
  "role": "progressbar",
4597
4827
  "aria-hidden": props.active ? 'false' : 'true',
4598
4828
  "aria-valuemin": "0",
@@ -4801,8 +5031,9 @@ const makeVBtnProps = propsFactory({
4801
5031
  type: Boolean,
4802
5032
  default: true
4803
5033
  },
5034
+ text: String,
4804
5035
  ...makeBorderProps(),
4805
- ...makeRoundedProps(),
5036
+ ...makeComponentProps(),
4806
5037
  ...makeDensityProps(),
4807
5038
  ...makeDimensionProps(),
4808
5039
  ...makeElevationProps(),
@@ -4810,6 +5041,7 @@ const makeVBtnProps = propsFactory({
4810
5041
  ...makeLoaderProps(),
4811
5042
  ...makeLocationProps(),
4812
5043
  ...makePositionProps(),
5044
+ ...makeRoundedProps(),
4813
5045
  ...makeRouterProps(),
4814
5046
  ...makeSizeProps(),
4815
5047
  ...makeTagProps({
@@ -4907,8 +5139,8 @@ const VBtn = genericComponent()({
4907
5139
  'v-btn--icon': !!props.icon,
4908
5140
  'v-btn--loading': props.loading,
4909
5141
  'v-btn--stacked': props.stacked
4910
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
4911
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value],
5142
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
5143
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value, props.style],
4912
5144
  "disabled": isDisabled.value || undefined,
4913
5145
  "href": link.href.value,
4914
5146
  "onClick": e => {
@@ -4946,7 +5178,9 @@ const VBtn = genericComponent()({
4946
5178
  icon: props.icon
4947
5179
  }
4948
5180
  }
4949
- }, slots.default)]), !props.icon && hasAppend && createVNode("span", {
5181
+ }, {
5182
+ default: () => [slots.default?.() ?? props.text]
5183
+ })]), !props.icon && hasAppend && createVNode("span", {
4950
5184
  "key": "append",
4951
5185
  "class": "v-btn__append"
4952
5186
  }, [!slots.append ? createVNode(VIcon, {
@@ -4983,15 +5217,17 @@ const VAppBarNavIcon = genericComponent()({
4983
5217
  icon: {
4984
5218
  type: IconValue,
4985
5219
  default: '$menu'
4986
- }
5220
+ },
5221
+ ...makeComponentProps()
4987
5222
  },
4988
5223
  setup(props, _ref) {
4989
5224
  let {
4990
5225
  slots
4991
5226
  } = _ref;
4992
5227
  useRender(() => createVNode(VBtn, {
4993
- "class": "v-app-bar-nav-icon",
4994
- "icon": props.icon
5228
+ "class": ['v-app-bar-nav-icon', props.class],
5229
+ "icon": props.icon,
5230
+ "style": props.style
4995
5231
  }, slots));
4996
5232
  return {};
4997
5233
  }
@@ -4999,9 +5235,12 @@ const VAppBarNavIcon = genericComponent()({
4999
5235
 
5000
5236
  const VToolbarItems = genericComponent()({
5001
5237
  name: 'VToolbarItems',
5002
- props: makeVariantProps({
5003
- variant: 'text'
5004
- }),
5238
+ props: {
5239
+ ...makeComponentProps(),
5240
+ ...makeVariantProps({
5241
+ variant: 'text'
5242
+ })
5243
+ },
5005
5244
  setup(props, _ref) {
5006
5245
  let {
5007
5246
  slots
@@ -5014,7 +5253,8 @@ const VToolbarItems = genericComponent()({
5014
5253
  }
5015
5254
  });
5016
5255
  useRender(() => createVNode("div", {
5017
- "class": "v-toolbar-items"
5256
+ "class": ['v-toolbar-items', props.class],
5257
+ "style": props.style
5018
5258
  }, [slots.default?.()]));
5019
5259
  return {};
5020
5260
  }
@@ -5076,6 +5316,7 @@ const VAlert = genericComponent()({
5076
5316
  type: String,
5077
5317
  validator: val => allowedTypes.includes(val)
5078
5318
  },
5319
+ ...makeComponentProps(),
5079
5320
  ...makeDensityProps(),
5080
5321
  ...makeDimensionProps(),
5081
5322
  ...makeElevationProps(),
@@ -5158,8 +5399,8 @@ const VAlert = genericComponent()({
5158
5399
  [`v-alert--border-${props.border === true ? 'start' : props.border}`]: true
5159
5400
  }, {
5160
5401
  'v-alert--prominent': props.prominent
5161
- }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
5162
- "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
5402
+ }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
5403
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
5163
5404
  "role": "alert"
5164
5405
  }, {
5165
5406
  default: () => [genOverlays(false, 'v-alert'), props.border && createVNode("div", {
@@ -5253,6 +5494,7 @@ const VLabel = genericComponent()({
5253
5494
  props: {
5254
5495
  text: String,
5255
5496
  clickable: Boolean,
5497
+ ...makeComponentProps(),
5256
5498
  ...makeThemeProps()
5257
5499
  },
5258
5500
  setup(props, _ref) {
@@ -5262,7 +5504,8 @@ const VLabel = genericComponent()({
5262
5504
  useRender(() => createVNode("label", {
5263
5505
  "class": ['v-label', {
5264
5506
  'v-label--clickable': props.clickable
5265
- }]
5507
+ }, props.class],
5508
+ "style": props.style
5266
5509
  }, [props.text, slots.default?.()]));
5267
5510
  return {};
5268
5511
  }
@@ -5271,7 +5514,8 @@ const VLabel = genericComponent()({
5271
5514
  const VFieldLabel = genericComponent()({
5272
5515
  name: 'VFieldLabel',
5273
5516
  props: {
5274
- floating: Boolean
5517
+ floating: Boolean,
5518
+ ...makeComponentProps()
5275
5519
  },
5276
5520
  setup(props, _ref) {
5277
5521
  let {
@@ -5280,7 +5524,8 @@ const VFieldLabel = genericComponent()({
5280
5524
  useRender(() => createVNode(VLabel, {
5281
5525
  "class": ['v-field-label', {
5282
5526
  'v-field-label--floating': props.floating
5283
- }],
5527
+ }, props.class],
5528
+ "style": props.style,
5284
5529
  "aria-hidden": props.floating || undefined
5285
5530
  }, slots));
5286
5531
  return {};
@@ -5320,7 +5565,7 @@ function useFocus(props) {
5320
5565
 
5321
5566
  // Types
5322
5567
 
5323
- const allowedVariants$1 = ['underlined', 'outlined', 'filled', 'solo', 'plain'];
5568
+ const allowedVariants$1 = ['underlined', 'outlined', 'filled', 'solo', 'solo-inverted', 'solo-filled', 'plain'];
5324
5569
  const makeVFieldProps = propsFactory({
5325
5570
  appendInnerIcon: IconValue,
5326
5571
  bgColor: String,
@@ -5331,9 +5576,11 @@ const makeVFieldProps = propsFactory({
5331
5576
  },
5332
5577
  active: Boolean,
5333
5578
  color: String,
5579
+ baseColor: String,
5334
5580
  dirty: Boolean,
5335
5581
  disabled: Boolean,
5336
5582
  error: Boolean,
5583
+ flat: Boolean,
5337
5584
  label: String,
5338
5585
  persistentClear: Boolean,
5339
5586
  prependInnerIcon: IconValue,
@@ -5347,8 +5594,10 @@ const makeVFieldProps = propsFactory({
5347
5594
  'onClick:clear': EventProp(),
5348
5595
  'onClick:appendInner': EventProp(),
5349
5596
  'onClick:prependInner': EventProp(),
5350
- ...makeThemeProps(),
5351
- ...makeLoaderProps()
5597
+ ...makeComponentProps(),
5598
+ ...makeLoaderProps(),
5599
+ ...makeRoundedProps(),
5600
+ ...makeThemeProps()
5352
5601
  }, 'v-field');
5353
5602
  const VField = genericComponent()({
5354
5603
  name: 'VField',
@@ -5383,7 +5632,10 @@ const VField = genericComponent()({
5383
5632
  const {
5384
5633
  InputIcon
5385
5634
  } = useInputIcon(props);
5386
- const isActive = computed(() => props.dirty || props.active);
5635
+ const {
5636
+ roundedClasses
5637
+ } = useRounded(props);
5638
+ const isActive = computed(() => props.dirty || props.active);
5387
5639
  const hasLabel = computed(() => !props.singleLine && !!(props.label || slots.label));
5388
5640
  const uid = getUid();
5389
5641
  const id = computed(() => props.id || `input-${uid}`);
@@ -5399,7 +5651,7 @@ const VField = genericComponent()({
5399
5651
  textColorClasses,
5400
5652
  textColorStyles
5401
5653
  } = useTextColor(computed(() => {
5402
- return isActive.value && isFocused.value && !props.error && !props.disabled ? props.color : undefined;
5654
+ return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : props.baseColor;
5403
5655
  }));
5404
5656
  watch(isActive, val => {
5405
5657
  if (hasLabel.value) {
@@ -5468,6 +5720,7 @@ const VField = genericComponent()({
5468
5720
  'v-field--disabled': props.disabled,
5469
5721
  'v-field--dirty': props.dirty,
5470
5722
  'v-field--error': props.error,
5723
+ 'v-field--flat': props.flat,
5471
5724
  'v-field--has-background': !!props.bgColor,
5472
5725
  'v-field--persistent-clear': props.persistentClear,
5473
5726
  'v-field--prepended': hasPrepend,
@@ -5475,8 +5728,8 @@ const VField = genericComponent()({
5475
5728
  'v-field--single-line': props.singleLine,
5476
5729
  'v-field--no-label': !label,
5477
5730
  [`v-field--variant-${props.variant}`]: true
5478
- }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value],
5479
- "style": [backgroundColorStyles.value, textColorStyles.value],
5731
+ }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, props.class],
5732
+ "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
5480
5733
  "onClick": onClick
5481
5734
  }, attrs), [createVNode("div", {
5482
5735
  "class": "v-field__overlay"
@@ -5495,7 +5748,7 @@ const VField = genericComponent()({
5495
5748
  }, null), slots['prepend-inner']?.(slotProps.value)]), createVNode("div", {
5496
5749
  "class": "v-field__field",
5497
5750
  "data-no-activator": ""
5498
- }, [['solo', 'filled'].includes(props.variant) && hasLabel.value && createVNode(VFieldLabel, {
5751
+ }, [['filled', 'solo', 'solo-inverted', 'solo-filled'].includes(props.variant) && hasLabel.value && createVNode(VFieldLabel, {
5499
5752
  "key": "floating-label",
5500
5753
  "ref": floatingLabelRef,
5501
5754
  "class": [textColorClasses.value],
@@ -5564,7 +5817,7 @@ const VField = genericComponent()({
5564
5817
  });
5565
5818
  // TODO: this is kinda slow, might be better to implicitly inherit props instead
5566
5819
  function filterFieldProps(attrs) {
5567
- const keys = Object.keys(VField.props).filter(k => !isOn(k));
5820
+ const keys = Object.keys(VField.props).filter(k => !isOn(k) && k !== 'class' && k !== 'style');
5568
5821
  return pick(attrs, keys);
5569
5822
  }
5570
5823
 
@@ -5579,6 +5832,7 @@ const VMessages = genericComponent()({
5579
5832
  type: [Array, String],
5580
5833
  default: () => []
5581
5834
  },
5835
+ ...makeComponentProps(),
5582
5836
  ...makeTransitionProps({
5583
5837
  transition: {
5584
5838
  component: VSlideYTransition,
@@ -5599,8 +5853,8 @@ const VMessages = genericComponent()({
5599
5853
  useRender(() => createVNode(MaybeTransition, {
5600
5854
  "transition": props.transition,
5601
5855
  "tag": "div",
5602
- "class": ['v-messages', textColorClasses.value],
5603
- "style": textColorStyles.value,
5856
+ "class": ['v-messages', textColorClasses.value, props.class],
5857
+ "style": [textColorStyles.value, props.style],
5604
5858
  "role": "alert",
5605
5859
  "aria-live": "polite"
5606
5860
  }, {
@@ -5896,6 +6150,7 @@ const makeVInputProps = propsFactory({
5896
6150
  },
5897
6151
  'onClick:prepend': EventProp(),
5898
6152
  'onClick:append': EventProp(),
6153
+ ...makeComponentProps(),
5899
6154
  ...makeDensityProps(),
5900
6155
  ...makeValidationProps()
5901
6156
  }, 'v-input');
@@ -5963,7 +6218,8 @@ const VInput = genericComponent()({
5963
6218
  const hasMessages = messages.value.length > 0;
5964
6219
  const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details);
5965
6220
  return createVNode("div", {
5966
- "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value]
6221
+ "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value, props.class],
6222
+ "style": props.style
5967
6223
  }, [hasPrepend && createVNode("div", {
5968
6224
  "key": "prepend",
5969
6225
  "class": "v-input__prepend"
@@ -6006,6 +6262,7 @@ const VCounter = genericComponent()({
6006
6262
  type: [Number, String],
6007
6263
  default: 0
6008
6264
  },
6265
+ ...makeComponentProps(),
6009
6266
  ...makeTransitionProps({
6010
6267
  transition: {
6011
6268
  component: VSlideYTransition
@@ -6023,7 +6280,8 @@ const VCounter = genericComponent()({
6023
6280
  "transition": props.transition
6024
6281
  }, {
6025
6282
  default: () => [withDirectives(createVNode("div", {
6026
- "class": "v-counter"
6283
+ "class": ['v-counter', props.class],
6284
+ "style": props.style
6027
6285
  }, [slots.default ? slots.default({
6028
6286
  counter: counter.value,
6029
6287
  max: props.max,
@@ -6226,7 +6484,8 @@ const VTextField = genericComponent()({
6226
6484
  'v-text-field--prefixed': props.prefix,
6227
6485
  'v-text-field--suffixed': props.suffix,
6228
6486
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
6229
- }]
6487
+ }, props.class],
6488
+ "style": props.style
6230
6489
  }, rootAttrs, inputProps, {
6231
6490
  "focused": isFocused.value
6232
6491
  }), {
@@ -6342,6 +6601,7 @@ const VSelectionControlGroup = genericComponent()({
6342
6601
  type: String,
6343
6602
  default: 'VSelectionControl'
6344
6603
  },
6604
+ ...makeComponentProps(),
6345
6605
  ...makeSelectionControlGroupProps()
6346
6606
  },
6347
6607
  emits: {
@@ -6389,7 +6649,8 @@ const VSelectionControlGroup = genericComponent()({
6389
6649
  useRender(() => createVNode("div", {
6390
6650
  "class": ['v-selection-control-group', {
6391
6651
  'v-selection-control-group--inline': props.inline
6392
- }],
6652
+ }, props.class],
6653
+ "style": props.style,
6393
6654
  "role": props.type === 'radio' ? 'radiogroup' : undefined
6394
6655
  }, [slots.default?.()]));
6395
6656
  return {};
@@ -6403,6 +6664,7 @@ const makeSelectionControlProps = propsFactory({
6403
6664
  trueValue: null,
6404
6665
  falseValue: null,
6405
6666
  value: null,
6667
+ ...makeComponentProps(),
6406
6668
  ...makeSelectionControlGroupProps()
6407
6669
  }, 'v-selection-control');
6408
6670
  function useSelectionControl(props) {
@@ -6517,8 +6779,10 @@ const VSelectionControl = genericComponent()({
6517
6779
  'v-selection-control--focused': isFocused.value,
6518
6780
  'v-selection-control--focus-visible': isFocusVisible.value,
6519
6781
  'v-selection-control--inline': props.inline
6520
- }, densityClasses.value]
6521
- }, rootAttrs), [createVNode("div", {
6782
+ }, densityClasses.value, props.class]
6783
+ }, rootAttrs, {
6784
+ "style": props.style
6785
+ }), [createVNode("div", {
6522
6786
  "class": ['v-selection-control__wrapper', textColorClasses.value],
6523
6787
  "style": textColorStyles.value
6524
6788
  }, [slots.default?.(), withDirectives(createVNode("div", {
@@ -6600,7 +6864,8 @@ const VCheckboxBtn = genericComponent()({
6600
6864
  useRender(() => createVNode(VSelectionControl, mergeProps(props, {
6601
6865
  "modelValue": model.value,
6602
6866
  "onUpdate:modelValue": [$event => model.value = $event, onChange],
6603
- "class": "v-checkbox-btn",
6867
+ "class": ['v-checkbox-btn', props.class],
6868
+ "style": props.style,
6604
6869
  "type": "checkbox",
6605
6870
  "inline": true,
6606
6871
  "falseIcon": falseIcon.value,
@@ -6640,10 +6905,11 @@ const VCheckbox = genericComponent()({
6640
6905
  const [inputProps, _1] = VInput.filterProps(props);
6641
6906
  const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6642
6907
  return createVNode(VInput, mergeProps({
6643
- "class": "v-checkbox"
6908
+ "class": ['v-checkbox', props.class]
6644
6909
  }, inputAttrs, inputProps, {
6645
6910
  "id": id.value,
6646
- "focused": isFocused.value
6911
+ "focused": isFocused.value,
6912
+ "style": props.style
6647
6913
  }), {
6648
6914
  ...slots,
6649
6915
  default: _ref2 => {
@@ -6674,6 +6940,7 @@ const makeVAvatarProps = propsFactory({
6674
6940
  end: Boolean,
6675
6941
  icon: IconValue,
6676
6942
  image: String,
6943
+ ...makeComponentProps(),
6677
6944
  ...makeDensityProps(),
6678
6945
  ...makeRoundedProps(),
6679
6946
  ...makeSizeProps(),
@@ -6712,8 +6979,8 @@ const VAvatar = genericComponent()({
6712
6979
  "class": ['v-avatar', {
6713
6980
  'v-avatar--start': props.start,
6714
6981
  'v-avatar--end': props.end
6715
- }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
6716
- "style": [colorStyles.value, sizeStyles.value]
6982
+ }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6983
+ "style": [colorStyles.value, sizeStyles.value, props.style]
6717
6984
  }, {
6718
6985
  default: () => [props.image ? createVNode(VImg, {
6719
6986
  "key": "image",
@@ -6741,6 +7008,7 @@ const VChipGroup = genericComponent()({
6741
7008
  type: Function,
6742
7009
  default: deepEqual
6743
7010
  },
7011
+ ...makeComponentProps(),
6744
7012
  ...makeGroupProps({
6745
7013
  selectedClass: 'v-chip--selected'
6746
7014
  }),
@@ -6778,7 +7046,8 @@ const VChipGroup = genericComponent()({
6778
7046
  useRender(() => createVNode(props.tag, {
6779
7047
  "class": ['v-chip-group', {
6780
7048
  'v-chip-group--column': props.column
6781
- }, themeClasses.value]
7049
+ }, themeClasses.value, props.class],
7050
+ "style": props.style
6782
7051
  }, {
6783
7052
  default: () => [slots.default?.({
6784
7053
  isSelected,
@@ -6792,8 +7061,6 @@ const VChipGroup = genericComponent()({
6792
7061
  }
6793
7062
  });
6794
7063
 
6795
- // Types
6796
-
6797
7064
  const VChip = genericComponent()({
6798
7065
  name: 'VChip',
6799
7066
  directives: {
@@ -6838,6 +7105,7 @@ const VChip = genericComponent()({
6838
7105
  onClick: EventProp(),
6839
7106
  onClickOnce: EventProp(),
6840
7107
  ...makeBorderProps(),
7108
+ ...makeComponentProps(),
6841
7109
  ...makeDensityProps(),
6842
7110
  ...makeElevationProps(),
6843
7111
  ...makeGroupItemProps(),
@@ -6930,8 +7198,8 @@ const VChip = genericComponent()({
6930
7198
  'v-chip--link': isClickable.value,
6931
7199
  'v-chip--filter': hasFilter,
6932
7200
  'v-chip--pill': props.pill
6933
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value],
6934
- "style": [hasColor ? colorStyles.value : undefined],
7201
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value, props.class],
7202
+ "style": [hasColor ? colorStyles.value : undefined, props.style],
6935
7203
  "disabled": props.disabled || undefined,
6936
7204
  "draggable": props.draggable,
6937
7205
  "href": link.href.value,
@@ -7040,6 +7308,7 @@ const VDivider = genericComponent()({
7040
7308
  length: [Number, String],
7041
7309
  thickness: [Number, String],
7042
7310
  vertical: Boolean,
7311
+ ...makeComponentProps(),
7043
7312
  ...makeThemeProps()
7044
7313
  },
7045
7314
  setup(props, _ref) {
@@ -7068,8 +7337,8 @@ const VDivider = genericComponent()({
7068
7337
  'v-divider': true,
7069
7338
  'v-divider--inset': props.inset,
7070
7339
  'v-divider--vertical': props.vertical
7071
- }, themeClasses.value, textColorClasses.value],
7072
- "style": [dividerStyles.value, textColorStyles.value],
7340
+ }, themeClasses.value, textColorClasses.value, props.class],
7341
+ "style": [dividerStyles.value, textColorStyles.value, props.style],
7073
7342
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
7074
7343
  "role": `${attrs.role || 'separator'}`
7075
7344
  }, null));
@@ -7568,6 +7837,7 @@ const makeVListGroupProps = propsFactory({
7568
7837
  fluid: Boolean,
7569
7838
  subgroup: Boolean,
7570
7839
  value: null,
7840
+ ...makeComponentProps(),
7571
7841
  ...makeTagProps()
7572
7842
  }, 'v-list-group');
7573
7843
  const VListGroup = genericComponent()({
@@ -7616,7 +7886,8 @@ const VListGroup = genericComponent()({
7616
7886
  'v-list-group--fluid': props.fluid,
7617
7887
  'v-list-group--subgroup': props.subgroup,
7618
7888
  'v-list-group--open': isOpen.value
7619
- }]
7889
+ }, props.class],
7890
+ "style": props.style
7620
7891
  }, {
7621
7892
  default: () => [slots.activator && createVNode(VDefaultsProvider, {
7622
7893
  "defaults": activatorDefaults.value
@@ -7683,6 +7954,7 @@ const VListItem = genericComponent()({
7683
7954
  onClick: EventProp(),
7684
7955
  onClickOnce: EventProp(),
7685
7956
  ...makeBorderProps(),
7957
+ ...makeComponentProps(),
7686
7958
  ...makeDensityProps(),
7687
7959
  ...makeDimensionProps(),
7688
7960
  ...makeElevationProps(),
@@ -7793,8 +8065,8 @@ const VListItem = genericComponent()({
7793
8065
  'v-list-item--nav': props.nav,
7794
8066
  'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,
7795
8067
  [`${props.activeClass}`]: props.activeClass && isActive.value
7796
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value],
7797
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value],
8068
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
8069
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, props.style],
7798
8070
  "href": link.href.value,
7799
8071
  "tabindex": isClickable.value ? 0 : undefined,
7800
8072
  "onClick": onClick,
@@ -7887,6 +8159,7 @@ const VListSubheader = genericComponent()({
7887
8159
  inset: Boolean,
7888
8160
  sticky: Boolean,
7889
8161
  title: String,
8162
+ ...makeComponentProps(),
7890
8163
  ...makeTagProps()
7891
8164
  },
7892
8165
  setup(props, _ref) {
@@ -7903,10 +8176,10 @@ const VListSubheader = genericComponent()({
7903
8176
  "class": ['v-list-subheader', {
7904
8177
  'v-list-subheader--inset': props.inset,
7905
8178
  'v-list-subheader--sticky': props.sticky
7906
- }, textColorClasses.value],
7907
- "style": {
8179
+ }, textColorClasses.value, props.class],
8180
+ "style": [{
7908
8181
  textColorStyles
7909
- }
8182
+ }, props.style]
7910
8183
  }, {
7911
8184
  default: () => [hasText && createVNode("div", {
7912
8185
  "class": "v-list-subheader__text"
@@ -8126,6 +8399,7 @@ const VList = genericComponent()({
8126
8399
  openStrategy: 'list'
8127
8400
  }),
8128
8401
  ...makeBorderProps(),
8402
+ ...makeComponentProps(),
8129
8403
  ...makeDensityProps(),
8130
8404
  ...makeDimensionProps(),
8131
8405
  ...makeElevationProps(),
@@ -8227,27 +8501,8 @@ const VList = genericComponent()({
8227
8501
  e.preventDefault();
8228
8502
  }
8229
8503
  function focus(location) {
8230
- if (!contentRef.value) return;
8231
- const targets = ['button', '[href]', 'input', 'select', 'textarea', '[tabindex]'].map(s => `${s}:not([tabindex="-1"])`).join(', ');
8232
- const focusable = [...contentRef.value.querySelectorAll(targets)].filter(el => !el.hasAttribute('disabled'));
8233
- const idx = focusable.indexOf(document.activeElement);
8234
- if (!location) {
8235
- if (!contentRef.value.contains(document.activeElement)) {
8236
- focusable[0]?.focus();
8237
- }
8238
- } else if (location === 'first') {
8239
- focusable[0]?.focus();
8240
- } else if (location === 'last') {
8241
- focusable.at(-1)?.focus();
8242
- } else {
8243
- let el;
8244
- let idxx = idx;
8245
- const inc = location === 'next' ? 1 : -1;
8246
- do {
8247
- idxx += inc;
8248
- el = focusable[idxx];
8249
- } while ((!el || el.offsetParent == null) && idxx < focusable.length && idxx >= 0);
8250
- if (el) el.focus();else focus(location === 'next' ? 'first' : 'last');
8504
+ if (contentRef.value) {
8505
+ return focusChild(contentRef.value, location);
8251
8506
  }
8252
8507
  }
8253
8508
  useRender(() => {
@@ -8256,8 +8511,8 @@ const VList = genericComponent()({
8256
8511
  "class": ['v-list', {
8257
8512
  'v-list--disabled': props.disabled,
8258
8513
  'v-list--nav': props.nav
8259
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value],
8260
- "style": [backgroundColorStyles.value, dimensionStyles.value],
8514
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class],
8515
+ "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
8261
8516
  "role": "listbox",
8262
8517
  "aria-activedescendant": undefined,
8263
8518
  "onFocusin": onFocusin,
@@ -8285,6 +8540,7 @@ const VListItemAction = genericComponent()({
8285
8540
  props: {
8286
8541
  start: Boolean,
8287
8542
  end: Boolean,
8543
+ ...makeComponentProps(),
8288
8544
  ...makeTagProps()
8289
8545
  },
8290
8546
  setup(props, _ref) {
@@ -8295,7 +8551,8 @@ const VListItemAction = genericComponent()({
8295
8551
  "class": ['v-list-item-action', {
8296
8552
  'v-list-item-action--start': props.start,
8297
8553
  'v-list-item-action--end': props.end
8298
- }]
8554
+ }, props.class],
8555
+ "style": props.style
8299
8556
  }, slots));
8300
8557
  return {};
8301
8558
  }
@@ -8306,6 +8563,7 @@ const VListItemMedia = genericComponent()({
8306
8563
  props: {
8307
8564
  start: Boolean,
8308
8565
  end: Boolean,
8566
+ ...makeComponentProps(),
8309
8567
  ...makeTagProps()
8310
8568
  },
8311
8569
  setup(props, _ref) {
@@ -8317,7 +8575,8 @@ const VListItemMedia = genericComponent()({
8317
8575
  "class": ['v-list-item-media', {
8318
8576
  'v-list-item-media--start': props.start,
8319
8577
  'v-list-item-media--end': props.end
8320
- }]
8578
+ }, props.class],
8579
+ "style": props.style
8321
8580
  }, slots);
8322
8581
  });
8323
8582
  return {};
@@ -9558,6 +9817,7 @@ const makeVOverlayProps = propsFactory({
9558
9817
  default: 2000
9559
9818
  },
9560
9819
  ...makeActivatorProps(),
9820
+ ...makeComponentProps(),
9561
9821
  ...makeDimensionProps(),
9562
9822
  ...makeLazyProps(),
9563
9823
  ...makeLocationStrategyProps(),
@@ -9725,10 +9985,10 @@ const VOverlay = genericComponent()({
9725
9985
  'v-overlay--absolute': props.absolute || props.contained,
9726
9986
  'v-overlay--active': isActive.value,
9727
9987
  'v-overlay--contained': props.contained
9728
- }, themeClasses.value, rtlClasses.value],
9988
+ }, themeClasses.value, rtlClasses.value, props.class],
9729
9989
  "style": [stackStyles.value, {
9730
9990
  top: convertToUnit(top.value)
9731
- }],
9991
+ }, props.style],
9732
9992
  "ref": root
9733
9993
  }, scopeId, attrs), [createVNode(Scrim, mergeProps({
9734
9994
  "color": scrimColor,
@@ -9834,7 +10094,8 @@ const VMenu = genericComponent()({
9834
10094
  const [overlayProps] = VOverlay.filterProps(props);
9835
10095
  return createVNode(VOverlay, mergeProps({
9836
10096
  "ref": overlay,
9837
- "class": ['v-menu']
10097
+ "class": ['v-menu', props.class],
10098
+ "style": props.style
9838
10099
  }, overlayProps, {
9839
10100
  "modelValue": isActive.value,
9840
10101
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -10053,7 +10314,8 @@ const VSelect = genericComponent()({
10053
10314
  'v-select--chips': !!props.chips,
10054
10315
  [`v-select--${props.multiple ? 'multiple' : 'single'}`]: true,
10055
10316
  'v-select--selected': model.value.length
10056
- }],
10317
+ }, props.class],
10318
+ "style": props.style,
10057
10319
  "appendInnerIcon": props.menuIcon,
10058
10320
  "readonly": true,
10059
10321
  "placeholder": placeholder,
@@ -10496,7 +10758,8 @@ const VAutocomplete = genericComponent()({
10496
10758
  'v-autocomplete--selecting-index': selectionIndex.value > -1,
10497
10759
  [`v-autocomplete--${props.multiple ? 'multiple' : 'single'}`]: true,
10498
10760
  'v-autocomplete--selection-slot': !!slots.selection
10499
- }],
10761
+ }, props.class],
10762
+ "style": props.style,
10500
10763
  "appendInnerIcon": props.menuIcon,
10501
10764
  "readonly": props.readonly,
10502
10765
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -10610,8 +10873,6 @@ const VAutocomplete = genericComponent()({
10610
10873
  }
10611
10874
  });
10612
10875
 
10613
- // Types
10614
-
10615
10876
  const VBadge = genericComponent()({
10616
10877
  name: 'VBadge',
10617
10878
  inheritAttrs: false,
@@ -10635,6 +10896,7 @@ const VBadge = genericComponent()({
10635
10896
  offsetX: [Number, String],
10636
10897
  offsetY: [Number, String],
10637
10898
  textColor: String,
10899
+ ...makeComponentProps(),
10638
10900
  ...makeLocationProps({
10639
10901
  location: 'top end'
10640
10902
  }),
@@ -10679,8 +10941,10 @@ const VBadge = genericComponent()({
10679
10941
  'v-badge--dot': props.dot,
10680
10942
  'v-badge--floating': props.floating,
10681
10943
  'v-badge--inline': props.inline
10682
- }]
10683
- }, attrs), {
10944
+ }, props.class]
10945
+ }, attrs, {
10946
+ "style": props.style
10947
+ }), {
10684
10948
  default: () => [createVNode("div", {
10685
10949
  "class": "v-badge__wrapper"
10686
10950
  }, [ctx.slots.default?.(), createVNode(MaybeTransition, {
@@ -10707,7 +10971,8 @@ const VBannerActions = genericComponent()({
10707
10971
  name: 'VBannerActions',
10708
10972
  props: {
10709
10973
  color: String,
10710
- density: String
10974
+ density: String,
10975
+ ...makeComponentProps()
10711
10976
  },
10712
10977
  setup(props, _ref) {
10713
10978
  let {
@@ -10721,7 +10986,8 @@ const VBannerActions = genericComponent()({
10721
10986
  }
10722
10987
  });
10723
10988
  useRender(() => createVNode("div", {
10724
- "class": "v-banner-actions"
10989
+ "class": ['v-banner-actions', props.class],
10990
+ "style": props.style
10725
10991
  }, [slots.default?.()]));
10726
10992
  return {};
10727
10993
  }
@@ -10742,6 +11008,7 @@ const VBanner = genericComponent()({
10742
11008
  sticky: Boolean,
10743
11009
  text: String,
10744
11010
  ...makeBorderProps(),
11011
+ ...makeComponentProps(),
10745
11012
  ...makeDensityProps(),
10746
11013
  ...makeDimensionProps(),
10747
11014
  ...makeElevationProps(),
@@ -10799,8 +11066,8 @@ const VBanner = genericComponent()({
10799
11066
  'v-banner--stacked': props.stacked || mobile.value,
10800
11067
  'v-banner--sticky': props.sticky,
10801
11068
  [`v-banner--${props.lines}-line`]: !!props.lines
10802
- }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value],
10803
- "style": [dimensionStyles.value, locationStyles.value],
11069
+ }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11070
+ "style": [dimensionStyles.value, locationStyles.value, props.style],
10804
11071
  "role": "banner"
10805
11072
  }, {
10806
11073
  default: () => [hasPrepend && createVNode("div", {
@@ -10856,6 +11123,7 @@ const VBottomNavigation = genericComponent()({
10856
11123
  default: true
10857
11124
  },
10858
11125
  ...makeBorderProps(),
11126
+ ...makeComponentProps(),
10859
11127
  ...makeDensityProps(),
10860
11128
  ...makeElevationProps(),
10861
11129
  ...makeRoundedProps(),
@@ -10930,11 +11198,11 @@ const VBottomNavigation = genericComponent()({
10930
11198
  'v-bottom-navigation--active': isActive.value,
10931
11199
  'v-bottom-navigation--grow': props.grow,
10932
11200
  'v-bottom-navigation--shift': props.mode === 'shift'
10933
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value],
11201
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
10934
11202
  "style": [backgroundColorStyles.value, layoutItemStyles.value, {
10935
11203
  height: convertToUnit(height.value),
10936
11204
  transform: `translateY(${convertToUnit(!isActive.value ? 100 : 0, '%')})`
10937
- }, ssrBootStyles.value]
11205
+ }, ssrBootStyles.value, props.style]
10938
11206
  }, {
10939
11207
  default: () => [slots.default && createVNode("div", {
10940
11208
  "class": "v-bottom-navigation__content"
@@ -10948,14 +11216,16 @@ const VBottomNavigation = genericComponent()({
10948
11216
  const VBreadcrumbsDivider = genericComponent()({
10949
11217
  name: 'VBreadcrumbsDivider',
10950
11218
  props: {
10951
- divider: [Number, String]
11219
+ divider: [Number, String],
11220
+ ...makeComponentProps()
10952
11221
  },
10953
11222
  setup(props, _ref) {
10954
11223
  let {
10955
11224
  slots
10956
11225
  } = _ref;
10957
11226
  useRender(() => createVNode("li", {
10958
- "class": "v-breadcrumbs-divider"
11227
+ "class": ['v-breadcrumbs-divider', props.class],
11228
+ "style": props.style
10959
11229
  }, [slots?.default?.() ?? props.divider]));
10960
11230
  return {};
10961
11231
  }
@@ -10970,6 +11240,7 @@ const VBreadcrumbsItem = genericComponent()({
10970
11240
  color: String,
10971
11241
  disabled: Boolean,
10972
11242
  title: String,
11243
+ ...makeComponentProps(),
10973
11244
  ...makeRouterProps(),
10974
11245
  ...makeTagProps({
10975
11246
  tag: 'li'
@@ -10995,8 +11266,8 @@ const VBreadcrumbsItem = genericComponent()({
10995
11266
  'v-breadcrumbs-item--disabled': props.disabled,
10996
11267
  'v-breadcrumbs-item--link': link.isLink.value,
10997
11268
  [`${props.activeClass}`]: isActive.value && props.activeClass
10998
- }, textColorClasses.value],
10999
- "style": [textColorStyles.value],
11269
+ }, textColorClasses.value, props.class],
11270
+ "style": [textColorStyles.value, props.style],
11000
11271
  "href": link.href.value,
11001
11272
  "aria-current": isActive.value ? 'page' : undefined,
11002
11273
  "onClick": link.navigate
@@ -11027,6 +11298,7 @@ const VBreadcrumbs = genericComponent()({
11027
11298
  type: Array,
11028
11299
  default: () => []
11029
11300
  },
11301
+ ...makeComponentProps(),
11030
11302
  ...makeDensityProps(),
11031
11303
  ...makeRoundedProps(),
11032
11304
  ...makeTagProps({
@@ -11058,11 +11330,22 @@ const VBreadcrumbs = genericComponent()({
11058
11330
  disabled: toRef(props, 'disabled')
11059
11331
  }
11060
11332
  });
11333
+ const items = computed(() => props.items.map(item => {
11334
+ return typeof item === 'string' ? {
11335
+ item: {
11336
+ title: item
11337
+ },
11338
+ raw: item
11339
+ } : {
11340
+ item,
11341
+ raw: item
11342
+ };
11343
+ }));
11061
11344
  useRender(() => {
11062
11345
  const hasPrepend = !!(slots.prepend || props.icon);
11063
11346
  return createVNode(props.tag, {
11064
- "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
11065
- "style": backgroundColorStyles.value
11347
+ "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value, props.class],
11348
+ "style": [backgroundColorStyles.value, props.style]
11066
11349
  }, {
11067
11350
  default: () => [hasPrepend && createVNode("div", {
11068
11351
  "key": "prepend",
@@ -11080,33 +11363,36 @@ const VBreadcrumbs = genericComponent()({
11080
11363
  start: true
11081
11364
  }
11082
11365
  }
11083
- }, slots.prepend)]), props.items.map((item, index, array) => createVNode(Fragment, null, [createVNode(VBreadcrumbsItem, mergeProps({
11084
- "key": index,
11085
- "disabled": index >= array.length - 1
11086
- }, typeof item === 'string' ? {
11087
- title: item
11088
- } : item), {
11089
- default: slots.title ? () => slots.title?.({
11090
- item,
11091
- index
11092
- }) : undefined
11093
- }), index < array.length - 1 && createVNode(VBreadcrumbsDivider, null, {
11094
- default: slots.divider ? () => slots.divider?.({
11366
+ }, slots.prepend)]), items.value.map((_ref2, index, array) => {
11367
+ let {
11095
11368
  item,
11096
- index
11097
- }) : undefined
11098
- })])), slots.default?.()]
11369
+ raw
11370
+ } = _ref2;
11371
+ return createVNode(Fragment, null, [createVNode(VBreadcrumbsItem, mergeProps({
11372
+ "key": item.title,
11373
+ "disabled": index >= array.length - 1
11374
+ }, item), {
11375
+ default: slots.title ? () => slots.title?.({
11376
+ item: raw,
11377
+ index
11378
+ }) : undefined
11379
+ }), index < array.length - 1 && createVNode(VBreadcrumbsDivider, null, {
11380
+ default: slots.divider ? () => slots.divider?.({
11381
+ item: raw,
11382
+ index
11383
+ }) : undefined
11384
+ })]);
11385
+ }), slots.default?.()]
11099
11386
  });
11100
11387
  });
11101
11388
  return {};
11102
11389
  }
11103
11390
  });
11104
11391
 
11105
- // Types
11106
-
11107
- const VCardActions = defineComponent({
11392
+ const VCardActions = genericComponent()({
11108
11393
  name: 'VCardActions',
11109
- setup(_, _ref) {
11394
+ props: makeComponentProps(),
11395
+ setup(props, _ref) {
11110
11396
  let {
11111
11397
  slots
11112
11398
  } = _ref;
@@ -11116,7 +11402,8 @@ const VCardActions = defineComponent({
11116
11402
  }
11117
11403
  });
11118
11404
  useRender(() => createVNode("div", {
11119
- "class": "v-card-actions"
11405
+ "class": ['v-card-actions', props.class],
11406
+ "style": props.style
11120
11407
  }, [slots.default?.()]));
11121
11408
  return {};
11122
11409
  }
@@ -11126,8 +11413,6 @@ const VCardSubtitle = createSimpleFunctional('v-card-subtitle');
11126
11413
 
11127
11414
  const VCardTitle = createSimpleFunctional('v-card-title');
11128
11415
 
11129
- // Types
11130
-
11131
11416
  const VCardItem = genericComponent()({
11132
11417
  name: 'VCardItem',
11133
11418
  props: {
@@ -11137,6 +11422,7 @@ const VCardItem = genericComponent()({
11137
11422
  prependIcon: IconValue,
11138
11423
  subtitle: String,
11139
11424
  title: String,
11425
+ ...makeComponentProps(),
11140
11426
  ...makeDensityProps()
11141
11427
  },
11142
11428
  setup(props, _ref) {
@@ -11151,7 +11437,8 @@ const VCardItem = genericComponent()({
11151
11437
  const hasTitle = !!(props.title || slots.title);
11152
11438
  const hasSubtitle = !!(props.subtitle || slots.subtitle);
11153
11439
  return createVNode("div", {
11154
- "class": "v-card-item"
11440
+ "class": ['v-card-item', props.class],
11441
+ "style": props.style
11155
11442
  }, [hasPrepend && createVNode("div", {
11156
11443
  "key": "prepend",
11157
11444
  "class": "v-card-item__prepend"
@@ -11233,8 +11520,8 @@ const VCard = genericComponent()({
11233
11520
  subtitle: String,
11234
11521
  text: String,
11235
11522
  title: String,
11236
- ...makeThemeProps(),
11237
11523
  ...makeBorderProps(),
11524
+ ...makeComponentProps(),
11238
11525
  ...makeDensityProps(),
11239
11526
  ...makeDimensionProps(),
11240
11527
  ...makeElevationProps(),
@@ -11244,6 +11531,7 @@ const VCard = genericComponent()({
11244
11531
  ...makeRoundedProps(),
11245
11532
  ...makeRouterProps(),
11246
11533
  ...makeTagProps(),
11534
+ ...makeThemeProps(),
11247
11535
  ...makeVariantProps({
11248
11536
  variant: 'elevated'
11249
11537
  })
@@ -11304,8 +11592,8 @@ const VCard = genericComponent()({
11304
11592
  'v-card--flat': props.flat,
11305
11593
  'v-card--hover': props.hover && !(props.disabled || props.flat),
11306
11594
  'v-card--link': isClickable.value
11307
- }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
11308
- "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
11595
+ }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
11596
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
11309
11597
  "href": link.href.value,
11310
11598
  "onClick": isClickable.value && link.navigate,
11311
11599
  "tabindex": props.disabled ? -1 : undefined
@@ -11501,6 +11789,7 @@ const makeVWindowProps = propsFactory({
11501
11789
  mandatory: {
11502
11790
  default: 'force'
11503
11791
  },
11792
+ ...makeComponentProps(),
11504
11793
  ...makeTagProps(),
11505
11794
  ...makeThemeProps()
11506
11795
  }, 'v-window');
@@ -11616,7 +11905,8 @@ const VWindow = genericComponent()({
11616
11905
  "ref": rootRef,
11617
11906
  "class": ['v-window', {
11618
11907
  'v-window--show-arrows-on-hover': props.showArrows === 'hover'
11619
- }, themeClasses.value]
11908
+ }, themeClasses.value, props.class],
11909
+ "style": props.style
11620
11910
  }, {
11621
11911
  default: () => [createVNode("div", {
11622
11912
  "class": "v-window__container",
@@ -11701,10 +11991,10 @@ const VCarousel = genericComponent()({
11701
11991
  "class": ['v-carousel', {
11702
11992
  'v-carousel--hide-delimiter-background': props.hideDelimiterBackground,
11703
11993
  'v-carousel--vertical-delimiters': props.verticalDelimiters
11704
- }],
11705
- "style": {
11994
+ }, props.class],
11995
+ "style": [{
11706
11996
  height: convertToUnit(props.height)
11707
- },
11997
+ }, props.style],
11708
11998
  "continuous": true,
11709
11999
  "mandatory": "force",
11710
12000
  "showArrows": props.showArrows
@@ -11770,6 +12060,7 @@ const VWindowItem = genericComponent()({
11770
12060
  type: [Boolean, String],
11771
12061
  default: undefined
11772
12062
  },
12063
+ ...makeComponentProps(),
11773
12064
  ...makeGroupItemProps(),
11774
12065
  ...makeLazyProps()
11775
12066
  },
@@ -11856,7 +12147,8 @@ const VWindowItem = genericComponent()({
11856
12147
  "disabled": !isBooted.value
11857
12148
  }, {
11858
12149
  default: () => [withDirectives(createVNode("div", {
11859
- "class": ['v-window-item', groupItem.selectedClass.value]
12150
+ "class": ['v-window-item', groupItem.selectedClass.value, props.class],
12151
+ "style": props.style
11860
12152
  }, [hasContent.value && slots.default?.()]), [[vShow, groupItem.isSelected.value]])]
11861
12153
  }));
11862
12154
  return {};
@@ -11869,7 +12161,8 @@ const VCarouselItem = genericComponent()({
11869
12161
  name: 'VCarouselItem',
11870
12162
  inheritAttrs: false,
11871
12163
  props: {
11872
- value: null
12164
+ value: null,
12165
+ ...makeComponentProps()
11873
12166
  },
11874
12167
  setup(props, _ref) {
11875
12168
  let {
@@ -11877,7 +12170,8 @@ const VCarouselItem = genericComponent()({
11877
12170
  attrs
11878
12171
  } = _ref;
11879
12172
  useRender(() => createVNode(VWindowItem, {
11880
- "class": "v-carousel-item",
12173
+ "class": ['v-carousel-item', props.class],
12174
+ "style": props.style,
11881
12175
  "value": props.value
11882
12176
  }, {
11883
12177
  default: () => [createVNode(VImg, attrs, slots)]
@@ -11890,6 +12184,7 @@ const VCode = createSimpleFunctional('v-code');
11890
12184
  const makeVSheetProps = propsFactory({
11891
12185
  color: String,
11892
12186
  ...makeBorderProps(),
12187
+ ...makeComponentProps(),
11893
12188
  ...makeDimensionProps(),
11894
12189
  ...makeElevationProps(),
11895
12190
  ...makeLocationProps(),
@@ -11933,8 +12228,8 @@ const VSheet = genericComponent()({
11933
12228
  roundedClasses
11934
12229
  } = useRounded(props);
11935
12230
  useRender(() => createVNode(props.tag, {
11936
- "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value],
11937
- "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value]
12231
+ "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, props.class],
12232
+ "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value, props.style]
11938
12233
  }, slots));
11939
12234
  return {};
11940
12235
  }
@@ -11960,7 +12255,8 @@ const VColorPickerCanvas = defineComponent({
11960
12255
  width: {
11961
12256
  type: [Number, String],
11962
12257
  default: 300
11963
- }
12258
+ },
12259
+ ...makeComponentProps()
11964
12260
  },
11965
12261
  emits: {
11966
12262
  'update:color': color => true,
@@ -12105,7 +12401,8 @@ const VColorPickerCanvas = defineComponent({
12105
12401
  onMounted(() => updateCanvas());
12106
12402
  useRender(() => createVNode("div", {
12107
12403
  "ref": resizeRef,
12108
- "class": "v-color-picker-canvas",
12404
+ "class": ['v-color-picker-canvas', props.class],
12405
+ "style": props.style,
12109
12406
  "onClick": handleClick,
12110
12407
  "onMousedown": handleMouseDown,
12111
12408
  "onTouchstart": handleMouseDown
@@ -12338,7 +12635,8 @@ const VColorPickerEdit = defineComponent({
12338
12635
  type: Array,
12339
12636
  default: () => Object.keys(modes),
12340
12637
  validator: v => Array.isArray(v) && v.every(m => Object.keys(modes).includes(m))
12341
- }
12638
+ },
12639
+ ...makeComponentProps()
12342
12640
  },
12343
12641
  emits: {
12344
12642
  'update:color': color => true,
@@ -12378,7 +12676,8 @@ const VColorPickerEdit = defineComponent({
12378
12676
  });
12379
12677
  });
12380
12678
  useRender(() => createVNode("div", {
12381
- "class": "v-color-picker-edit"
12679
+ "class": ['v-color-picker-edit', props.class],
12680
+ "style": props.style
12382
12681
  }, [inputs.value?.map(props => createVNode(VColorPickerInput, props, null)), enabledModes.value.length > 1 && createVNode(VBtn, {
12383
12682
  "icon": "$unfold",
12384
12683
  "size": "x-small",
@@ -12462,11 +12761,33 @@ const makeSliderProps = propsFactory({
12462
12761
  elevation: 2
12463
12762
  })
12464
12763
  }, 'slider');
12764
+ const useSteps = props => {
12765
+ const min = computed(() => parseFloat(props.min));
12766
+ const max = computed(() => parseFloat(props.max));
12767
+ const step = computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
12768
+ const decimals = computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
12769
+ function roundValue(value) {
12770
+ if (step.value <= 0) return value;
12771
+ const clamped = clamp(value, min.value, max.value);
12772
+ const offset = min.value % step.value;
12773
+ const newValue = Math.round((clamped - offset) / step.value) * step.value + offset;
12774
+ return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value));
12775
+ }
12776
+ return {
12777
+ min,
12778
+ max,
12779
+ step,
12780
+ decimals,
12781
+ roundValue
12782
+ };
12783
+ };
12465
12784
  const useSlider = _ref => {
12466
12785
  let {
12467
12786
  props,
12468
- handleSliderMouseUp,
12469
- handleMouseMove,
12787
+ steps,
12788
+ onSliderStart,
12789
+ onSliderMove,
12790
+ onSliderEnd,
12470
12791
  getActiveThumb
12471
12792
  } = _ref;
12472
12793
  const {
@@ -12480,10 +12801,13 @@ const useSlider = _ref => {
12480
12801
  }
12481
12802
  return hd;
12482
12803
  });
12483
- const min = computed(() => parseFloat(props.min));
12484
- const max = computed(() => parseFloat(props.max));
12485
- const step = computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
12486
- const decimals = computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
12804
+ const {
12805
+ min,
12806
+ max,
12807
+ step,
12808
+ decimals,
12809
+ roundValue
12810
+ } = steps;
12487
12811
  const thumbSize = computed(() => parseInt(props.thumbSize, 10));
12488
12812
  const tickSize = computed(() => parseInt(props.tickSize, 10));
12489
12813
  const trackSize = computed(() => parseInt(props.trackSize, 10));
@@ -12497,13 +12821,6 @@ const useSlider = _ref => {
12497
12821
  const startOffset = ref(0);
12498
12822
  const trackContainerRef = ref();
12499
12823
  const activeThumbRef = ref();
12500
- function roundValue(value) {
12501
- if (step.value <= 0) return value;
12502
- const clamped = clamp(value, min.value, max.value);
12503
- const offset = min.value % step.value;
12504
- const newValue = Math.round((clamped - offset) / step.value) * step.value + offset;
12505
- return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value));
12506
- }
12507
12824
  function parseMouseMove(e) {
12508
12825
  const vertical = props.direction === 'vertical';
12509
12826
  const start = vertical ? 'top' : 'left';
@@ -12520,14 +12837,11 @@ const useSlider = _ref => {
12520
12837
  if (vertical || horizontalDirection.value === 'rtl') clickPos = 1 - clickPos;
12521
12838
  return roundValue(min.value + clickPos * (max.value - min.value));
12522
12839
  }
12523
- let thumbMoved = false;
12524
12840
  const handleStop = e => {
12525
- if (!thumbMoved) {
12526
- startOffset.value = 0;
12527
- handleSliderMouseUp(parseMouseMove(e));
12528
- }
12841
+ onSliderEnd({
12842
+ value: parseMouseMove(e)
12843
+ });
12529
12844
  mousePressed.value = false;
12530
- thumbMoved = false;
12531
12845
  startOffset.value = 0;
12532
12846
  };
12533
12847
  const handleStart = e => {
@@ -12536,20 +12850,25 @@ const useSlider = _ref => {
12536
12850
  activeThumbRef.value.focus();
12537
12851
  mousePressed.value = true;
12538
12852
  if (activeThumbRef.value.contains(e.target)) {
12539
- thumbMoved = true;
12540
12853
  startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
12541
12854
  } else {
12542
12855
  startOffset.value = 0;
12543
- handleMouseMove(parseMouseMove(e));
12856
+ onSliderMove({
12857
+ value: parseMouseMove(e)
12858
+ });
12544
12859
  }
12860
+ onSliderStart({
12861
+ value: parseMouseMove(e)
12862
+ });
12545
12863
  };
12546
12864
  const moveListenerOptions = {
12547
12865
  passive: true,
12548
12866
  capture: true
12549
12867
  };
12550
12868
  function onMouseMove(e) {
12551
- thumbMoved = true;
12552
- handleMouseMove(parseMouseMove(e));
12869
+ onSliderMove({
12870
+ value: parseMouseMove(e)
12871
+ });
12553
12872
  }
12554
12873
  function onSliderMouseUp(e) {
12555
12874
  e.stopPropagation();
@@ -12677,7 +12996,8 @@ const VSliderThumb = genericComponent()({
12677
12996
  ripple: {
12678
12997
  type: Boolean,
12679
12998
  default: true
12680
- }
12999
+ },
13000
+ ...makeComponentProps()
12681
13001
  },
12682
13002
  emits: {
12683
13003
  'update:modelValue': v => true
@@ -12755,11 +13075,11 @@ const VSliderThumb = genericComponent()({
12755
13075
  "class": ['v-slider-thumb', {
12756
13076
  'v-slider-thumb--focused': props.focused,
12757
13077
  'v-slider-thumb--pressed': props.focused && mousePressed.value
12758
- }],
12759
- "style": {
13078
+ }, props.class],
13079
+ "style": [{
12760
13080
  '--v-slider-thumb-position': positionPercentage,
12761
13081
  '--v-slider-thumb-size': convertToUnit(thumbSize.value)
12762
- },
13082
+ }, props.style],
12763
13083
  "role": "slider",
12764
13084
  "tabindex": disabled.value ? -1 : 0,
12765
13085
  "aria-valuemin": props.min,
@@ -12805,7 +13125,8 @@ const VSliderTrack = genericComponent()({
12805
13125
  stop: {
12806
13126
  type: Number,
12807
13127
  required: true
12808
- }
13128
+ },
13129
+ ...makeComponentProps()
12809
13130
  },
12810
13131
  emits: {},
12811
13132
  setup(props, _ref) {
@@ -12880,12 +13201,12 @@ const VSliderTrack = genericComponent()({
12880
13201
  });
12881
13202
  useRender(() => {
12882
13203
  return createVNode("div", {
12883
- "class": ['v-slider-track', roundedClasses.value],
12884
- "style": {
13204
+ "class": ['v-slider-track', roundedClasses.value, props.class],
13205
+ "style": [{
12885
13206
  '--v-slider-track-size': convertToUnit(trackSize.value),
12886
13207
  '--v-slider-tick-size': convertToUnit(tickSize.value),
12887
13208
  direction: !vertical.value ? horizontalDirection.value : undefined
12888
- }
13209
+ }, props.style]
12889
13210
  }, [createVNode("div", {
12890
13211
  "class": ['v-slider-track__background', trackColorClasses.value, {
12891
13212
  'v-slider-track__background--opacity': !!color.value || !trackFillColor.value
@@ -12925,13 +13246,21 @@ const VSlider = genericComponent()({
12925
13246
  },
12926
13247
  emits: {
12927
13248
  'update:focused': value => true,
12928
- 'update:modelValue': v => true
13249
+ 'update:modelValue': v => true,
13250
+ start: value => true,
13251
+ end: value => true
12929
13252
  },
12930
13253
  setup(props, _ref) {
12931
13254
  let {
12932
- slots
13255
+ slots,
13256
+ emit
12933
13257
  } = _ref;
12934
13258
  const thumbContainerRef = ref();
13259
+ const steps = useSteps(props);
13260
+ const model = useProxiedModel(props, 'modelValue', undefined, v => {
13261
+ const value = typeof v === 'string' ? parseFloat(v) : v == null ? steps.min.value : v;
13262
+ return steps.roundValue(value);
13263
+ });
12935
13264
  const {
12936
13265
  min,
12937
13266
  max,
@@ -12945,16 +13274,26 @@ const VSlider = genericComponent()({
12945
13274
  readonly
12946
13275
  } = useSlider({
12947
13276
  props,
12948
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
12949
- handleSliderMouseUp: newValue => model.value = roundValue(newValue),
12950
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
12951
- handleMouseMove: newValue => model.value = roundValue(newValue),
13277
+ steps,
13278
+ onSliderStart: () => {
13279
+ emit('start', model.value);
13280
+ },
13281
+ onSliderEnd: _ref2 => {
13282
+ let {
13283
+ value
13284
+ } = _ref2;
13285
+ const roundedValue = roundValue(value);
13286
+ model.value = roundedValue;
13287
+ emit('end', roundedValue);
13288
+ },
13289
+ onSliderMove: _ref3 => {
13290
+ let {
13291
+ value
13292
+ } = _ref3;
13293
+ return model.value = roundValue(value);
13294
+ },
12952
13295
  getActiveThumb: () => thumbContainerRef.value?.$el
12953
13296
  });
12954
- const model = useProxiedModel(props, 'modelValue', undefined, v => {
12955
- const value = typeof v === 'string' ? parseFloat(v) : v == null ? min.value : v;
12956
- return roundValue(value);
12957
- });
12958
13297
  const {
12959
13298
  isFocused,
12960
13299
  focus,
@@ -12970,7 +13309,8 @@ const VSlider = genericComponent()({
12970
13309
  'v-slider--focused': isFocused.value,
12971
13310
  'v-slider--pressed': mousePressed.value,
12972
13311
  'v-slider--disabled': props.disabled
12973
- }]
13312
+ }, props.class],
13313
+ "style": props.style
12974
13314
  }, inputProps, {
12975
13315
  "focused": isFocused.value
12976
13316
  }), {
@@ -12980,11 +13320,11 @@ const VSlider = genericComponent()({
12980
13320
  "class": "v-slider__label",
12981
13321
  "text": props.label
12982
13322
  }, null) : undefined, slots.prepend?.(slotProps)]) : undefined,
12983
- default: _ref2 => {
13323
+ default: _ref4 => {
12984
13324
  let {
12985
13325
  id,
12986
13326
  messagesId
12987
- } = _ref2;
13327
+ } = _ref4;
12988
13328
  return createVNode("div", {
12989
13329
  "class": "v-slider__container",
12990
13330
  "onMousedown": !readonly.value ? onSliderMousedown : undefined,
@@ -13033,7 +13373,8 @@ const VColorPickerPreview = defineComponent({
13033
13373
  type: Object
13034
13374
  },
13035
13375
  disabled: Boolean,
13036
- hideAlpha: Boolean
13376
+ hideAlpha: Boolean,
13377
+ ...makeComponentProps()
13037
13378
  },
13038
13379
  emits: {
13039
13380
  'update:color': color => true
@@ -13045,7 +13386,8 @@ const VColorPickerPreview = defineComponent({
13045
13386
  useRender(() => createVNode("div", {
13046
13387
  "class": ['v-color-picker-preview', {
13047
13388
  'v-color-picker-preview--hide-alpha': props.hideAlpha
13048
- }]
13389
+ }, props.class],
13390
+ "style": props.style
13049
13391
  }, [createVNode("div", {
13050
13392
  "class": "v-color-picker-preview__dot"
13051
13393
  }, [createVNode("div", {
@@ -13426,7 +13768,8 @@ const VColorPickerSwatches = defineComponent({
13426
13768
  },
13427
13769
  disabled: Boolean,
13428
13770
  color: Object,
13429
- maxHeight: [Number, String]
13771
+ maxHeight: [Number, String],
13772
+ ...makeComponentProps()
13430
13773
  },
13431
13774
  emits: {
13432
13775
  'update:color': color => true
@@ -13436,10 +13779,10 @@ const VColorPickerSwatches = defineComponent({
13436
13779
  emit
13437
13780
  } = _ref;
13438
13781
  useRender(() => createVNode("div", {
13439
- "class": "v-color-picker-swatches",
13440
- "style": {
13782
+ "class": ['v-color-picker-swatches', props.class],
13783
+ "style": [{
13441
13784
  maxHeight: convertToUnit(props.maxHeight)
13442
- }
13785
+ }, props.style]
13443
13786
  }, [createVNode("div", null, [props.swatches.map(swatch => createVNode("div", {
13444
13787
  "class": "v-color-picker-swatches__swatch"
13445
13788
  }, [swatch.map(color => {
@@ -13543,13 +13886,13 @@ const VColorPicker = defineComponent({
13543
13886
  "rounded": props.rounded,
13544
13887
  "elevation": props.elevation,
13545
13888
  "theme": props.theme,
13546
- "class": ['v-color-picker'],
13547
- "style": {
13889
+ "class": ['v-color-picker', props.class],
13890
+ "style": [{
13548
13891
  '--v-color-picker-color-hsv': HSVtoCSS({
13549
13892
  ...(currentColor.value ?? nullColor),
13550
13893
  a: 1
13551
13894
  })
13552
- }
13895
+ }, props.style]
13553
13896
  }, sheetProps, {
13554
13897
  "maxWidth": props.width
13555
13898
  }), {
@@ -13860,7 +14203,8 @@ const VCombobox = genericComponent()({
13860
14203
  'v-combobox--chips': !!props.chips,
13861
14204
  'v-combobox--selecting-index': selectionIndex.value > -1,
13862
14205
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
13863
- }],
14206
+ }, props.class],
14207
+ "style": props.style,
13864
14208
  "appendInnerIcon": props.items.length ? props.menuIcon : undefined,
13865
14209
  "readonly": props.readonly,
13866
14210
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -14017,7 +14361,7 @@ const VDialog = genericComponent()({
14017
14361
  ![document, overlay.value.contentEl].includes(after) &&
14018
14362
  // It isn't inside the dialog body
14019
14363
  !overlay.value.contentEl.contains(after)) {
14020
- const focusable = [...overlay.value.contentEl.querySelectorAll('button, [href], input:not([type="hidden"]), select, textarea, [tabindex]:not([tabindex="-1"])')].filter(el => !el.hasAttribute('disabled') && !el.matches('[tabindex="-1"]'));
14364
+ const focusable = focusableChildren(overlay.value.contentEl);
14021
14365
  if (!focusable.length) return;
14022
14366
  const firstElement = focusable[0];
14023
14367
  const lastElement = focusable[focusable.length - 1];
@@ -14058,7 +14402,8 @@ const VDialog = genericComponent()({
14058
14402
  "class": ['v-dialog', {
14059
14403
  'v-dialog--fullscreen': props.fullscreen,
14060
14404
  'v-dialog--scrollable': props.scrollable
14061
- }]
14405
+ }, props.class],
14406
+ "style": props.style
14062
14407
  }, overlayProps, {
14063
14408
  "modelValue": isActive.value,
14064
14409
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -14097,6 +14442,7 @@ const VExpansionPanels = genericComponent()({
14097
14442
  validator: v => allowedVariants.includes(v)
14098
14443
  },
14099
14444
  readonly: Boolean,
14445
+ ...makeComponentProps(),
14100
14446
  ...makeGroupProps(),
14101
14447
  ...makeTagProps(),
14102
14448
  ...makeThemeProps()
@@ -14122,7 +14468,8 @@ const VExpansionPanels = genericComponent()({
14122
14468
  }
14123
14469
  });
14124
14470
  useRender(() => createVNode(props.tag, {
14125
- "class": ['v-expansion-panels', themeClasses.value, variantClass.value]
14471
+ "class": ['v-expansion-panels', themeClasses.value, variantClass.value, props.class],
14472
+ "style": props.style
14126
14473
  }, slots));
14127
14474
  return {};
14128
14475
  }
@@ -14151,6 +14498,7 @@ const VExpansionPanelTitle = genericComponent()({
14151
14498
  Ripple
14152
14499
  },
14153
14500
  props: {
14501
+ ...makeComponentProps(),
14154
14502
  ...makeVExpansionPanelTitleProps()
14155
14503
  },
14156
14504
  setup(props, _ref) {
@@ -14173,8 +14521,8 @@ const VExpansionPanelTitle = genericComponent()({
14173
14521
  useRender(() => withDirectives(createVNode("button", {
14174
14522
  "class": ['v-expansion-panel-title', {
14175
14523
  'v-expansion-panel-title--active': expansionPanel.isSelected.value
14176
- }, backgroundColorClasses.value],
14177
- "style": backgroundColorStyles.value,
14524
+ }, backgroundColorClasses.value, props.class],
14525
+ "style": [backgroundColorStyles.value, props.style],
14178
14526
  "type": "button",
14179
14527
  "tabindex": expansionPanel.disabled.value ? -1 : undefined,
14180
14528
  "disabled": expansionPanel.disabled.value,
@@ -14194,6 +14542,7 @@ const VExpansionPanelTitle = genericComponent()({
14194
14542
  const VExpansionPanelText = genericComponent()({
14195
14543
  name: 'VExpansionPanelText',
14196
14544
  props: {
14545
+ ...makeComponentProps(),
14197
14546
  ...makeLazyProps()
14198
14547
  },
14199
14548
  setup(props, _ref) {
@@ -14210,7 +14559,8 @@ const VExpansionPanelText = genericComponent()({
14210
14559
  "onAfterLeave": onAfterLeave
14211
14560
  }, {
14212
14561
  default: () => [withDirectives(createVNode("div", {
14213
- "class": "v-expansion-panel-text"
14562
+ "class": ['v-expansion-panel-text', props.class],
14563
+ "style": props.style
14214
14564
  }, [slots.default && hasContent.value && createVNode("div", {
14215
14565
  "class": "v-expansion-panel-text__wrapper"
14216
14566
  }, [slots.default?.()])]), [[vShow, expansionPanel.isSelected.value]])]
@@ -14225,6 +14575,7 @@ const VExpansionPanel = genericComponent()({
14225
14575
  title: String,
14226
14576
  text: String,
14227
14577
  bgColor: String,
14578
+ ...makeComponentProps(),
14228
14579
  ...makeElevationProps(),
14229
14580
  ...makeGroupItemProps(),
14230
14581
  ...makeLazyProps(),
@@ -14273,8 +14624,8 @@ const VExpansionPanel = genericComponent()({
14273
14624
  'v-expansion-panel--before-active': isBeforeSelected.value,
14274
14625
  'v-expansion-panel--after-active': isAfterSelected.value,
14275
14626
  'v-expansion-panel--disabled': isDisabled.value
14276
- }, roundedClasses.value, backgroundColorClasses.value],
14277
- "style": backgroundColorStyles.value,
14627
+ }, roundedClasses.value, backgroundColorClasses.value, props.class],
14628
+ "style": [backgroundColorStyles.value, props.style],
14278
14629
  "aria-expanded": groupItem.isSelected.value
14279
14630
  }, {
14280
14631
  default: () => [createVNode("div", {
@@ -14424,7 +14775,8 @@ const VFileInput = genericComponent()({
14424
14775
  "ref": vInputRef,
14425
14776
  "modelValue": model.value,
14426
14777
  "onUpdate:modelValue": $event => model.value = $event,
14427
- "class": "v-file-input",
14778
+ "class": ['v-file-input', props.class],
14779
+ "style": props.style,
14428
14780
  "onClick:prepend": onClickPrepend
14429
14781
  }, rootAttrs, inputProps, {
14430
14782
  "focused": isFocused.value
@@ -14516,6 +14868,7 @@ const VFooter = genericComponent()({
14516
14868
  default: 'auto'
14517
14869
  },
14518
14870
  ...makeBorderProps(),
14871
+ ...makeComponentProps(),
14519
14872
  ...makeElevationProps(),
14520
14873
  ...makeLayoutItemProps(),
14521
14874
  ...makeRoundedProps(),
@@ -14565,8 +14918,8 @@ const VFooter = genericComponent()({
14565
14918
  });
14566
14919
  useRender(() => createVNode(props.tag, {
14567
14920
  "ref": resizeRef,
14568
- "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
14569
- "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined]
14921
+ "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
14922
+ "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined, props.style]
14570
14923
  }, slots));
14571
14924
  return {};
14572
14925
  }
@@ -14577,6 +14930,7 @@ const VFooter = genericComponent()({
14577
14930
  const VForm = genericComponent()({
14578
14931
  name: 'VForm',
14579
14932
  props: {
14933
+ ...makeComponentProps(),
14580
14934
  ...makeFormProps()
14581
14935
  },
14582
14936
  emits: {
@@ -14615,7 +14969,8 @@ const VForm = genericComponent()({
14615
14969
  }
14616
14970
  useRender(() => createVNode("form", {
14617
14971
  "ref": formRef,
14618
- "class": "v-form",
14972
+ "class": ['v-form', props.class],
14973
+ "style": props.style,
14619
14974
  "novalidate": true,
14620
14975
  "onReset": onReset,
14621
14976
  "onSubmit": onSubmit
@@ -14631,6 +14986,7 @@ const VContainer = genericComponent()({
14631
14986
  type: Boolean,
14632
14987
  default: false
14633
14988
  },
14989
+ ...makeComponentProps(),
14634
14990
  ...makeTagProps()
14635
14991
  },
14636
14992
  setup(props, _ref) {
@@ -14640,7 +14996,8 @@ const VContainer = genericComponent()({
14640
14996
  useRender(() => createVNode(props.tag, {
14641
14997
  "class": ['v-container', {
14642
14998
  'v-container--fluid': props.fluid
14643
- }]
14999
+ }, props.class],
15000
+ "style": props.style
14644
15001
  }, slots));
14645
15002
  return {};
14646
15003
  }
@@ -14731,6 +15088,7 @@ const VCol = genericComponent()({
14731
15088
  default: null,
14732
15089
  validator: str => ALIGN_SELF_VALUES.includes(str)
14733
15090
  },
15091
+ ...makeComponentProps(),
14734
15092
  ...makeTagProps()
14735
15093
  },
14736
15094
  setup(props, _ref) {
@@ -14761,7 +15119,8 @@ const VCol = genericComponent()({
14761
15119
  return classList;
14762
15120
  });
14763
15121
  return () => h(props.tag, {
14764
- class: classes.value
15122
+ class: [classes.value, props.class],
15123
+ style: props.style
14765
15124
  }, slots.default?.());
14766
15125
  }
14767
15126
  });
@@ -14847,6 +15206,7 @@ const VRow = genericComponent()({
14847
15206
  validator: alignContentValidator
14848
15207
  },
14849
15208
  ...alignContentProps,
15209
+ ...makeComponentProps(),
14850
15210
  ...makeTagProps()
14851
15211
  },
14852
15212
  setup(props, _ref) {
@@ -14875,7 +15235,8 @@ const VRow = genericComponent()({
14875
15235
  return classList;
14876
15236
  });
14877
15237
  return () => h(props.tag, {
14878
- class: ['v-row', classes.value]
15238
+ class: ['v-row', classes.value, props.class],
15239
+ style: props.style
14879
15240
  }, slots.default?.());
14880
15241
  }
14881
15242
  });
@@ -14919,6 +15280,7 @@ const VItemGroupSymbol = Symbol.for('vuetify:v-item-group');
14919
15280
  const VItemGroup = genericComponent()({
14920
15281
  name: 'VItemGroup',
14921
15282
  props: {
15283
+ ...makeComponentProps(),
14922
15284
  ...makeGroupProps({
14923
15285
  selectedClass: 'v-item--selected'
14924
15286
  }),
@@ -14943,7 +15305,8 @@ const VItemGroup = genericComponent()({
14943
15305
  selected
14944
15306
  } = useGroup(props, VItemGroupSymbol);
14945
15307
  return () => createVNode(props.tag, {
14946
- "class": ['v-item-group', themeClasses.value]
15308
+ "class": ['v-item-group', themeClasses.value, props.class],
15309
+ "style": props.style
14947
15310
  }, {
14948
15311
  default: () => [slots.default?.({
14949
15312
  isSelected,
@@ -14993,7 +15356,10 @@ const VKbd = createSimpleFunctional('v-kbd');
14993
15356
 
14994
15357
  const VLayout = genericComponent()({
14995
15358
  name: 'VLayout',
14996
- props: makeLayoutProps(),
15359
+ props: {
15360
+ ...makeComponentProps(),
15361
+ ...makeLayoutProps()
15362
+ },
14997
15363
  setup(props, _ref) {
14998
15364
  let {
14999
15365
  slots
@@ -15007,8 +15373,8 @@ const VLayout = genericComponent()({
15007
15373
  } = createLayout(props);
15008
15374
  useRender(() => createVNode("div", {
15009
15375
  "ref": layoutRef,
15010
- "class": layoutClasses.value,
15011
- "style": layoutStyles.value
15376
+ "class": [layoutClasses.value, props.class],
15377
+ "style": [layoutStyles.value, props.style]
15012
15378
  }, [slots.default?.()]));
15013
15379
  return {
15014
15380
  getLayoutItem,
@@ -15031,6 +15397,7 @@ const VLayoutItem = genericComponent()({
15031
15397
  default: 300
15032
15398
  },
15033
15399
  modelValue: Boolean,
15400
+ ...makeComponentProps(),
15034
15401
  ...makeLayoutItemProps()
15035
15402
  },
15036
15403
  setup(props, _ref) {
@@ -15049,8 +15416,8 @@ const VLayoutItem = genericComponent()({
15049
15416
  absolute: toRef(props, 'absolute')
15050
15417
  });
15051
15418
  return () => createVNode("div", {
15052
- "class": ['v-layout-item'],
15053
- "style": layoutItemStyles.value
15419
+ "class": ['v-layout-item', props.class],
15420
+ "style": [layoutItemStyles.value, props.style]
15054
15421
  }, [slots.default?.()]);
15055
15422
  }
15056
15423
  });
@@ -15074,6 +15441,7 @@ const VLazy = genericComponent()({
15074
15441
  threshold: undefined
15075
15442
  })
15076
15443
  },
15444
+ ...makeComponentProps(),
15077
15445
  ...makeDimensionProps(),
15078
15446
  ...makeTagProps(),
15079
15447
  ...makeTransitionProps({
@@ -15096,8 +15464,8 @@ const VLazy = genericComponent()({
15096
15464
  isActive.value = isIntersecting;
15097
15465
  }
15098
15466
  useRender(() => withDirectives(createVNode(props.tag, {
15099
- "class": "v-lazy",
15100
- "style": dimensionStyles.value
15467
+ "class": ['v-lazy', props.class],
15468
+ "style": [dimensionStyles.value, props.style]
15101
15469
  }, {
15102
15470
  default: () => [isActive.value && createVNode(MaybeTransition, {
15103
15471
  "transition": props.transition,
@@ -15122,7 +15490,8 @@ const VLocaleProvider = genericComponent()({
15122
15490
  rtl: {
15123
15491
  type: Boolean,
15124
15492
  default: undefined
15125
- }
15493
+ },
15494
+ ...makeComponentProps()
15126
15495
  },
15127
15496
  setup(props, _ref) {
15128
15497
  let {
@@ -15132,7 +15501,8 @@ const VLocaleProvider = genericComponent()({
15132
15501
  rtlClasses
15133
15502
  } = provideLocale(props);
15134
15503
  useRender(() => createVNode("div", {
15135
- "class": ['v-locale-provider', rtlClasses.value]
15504
+ "class": ['v-locale-provider', rtlClasses.value, props.class],
15505
+ "style": props.style
15136
15506
  }, [slots.default?.()]));
15137
15507
  return {};
15138
15508
  }
@@ -15142,6 +15512,7 @@ const VMain = genericComponent()({
15142
15512
  name: 'VMain',
15143
15513
  props: {
15144
15514
  scrollable: Boolean,
15515
+ ...makeComponentProps(),
15145
15516
  ...makeTagProps({
15146
15517
  tag: 'main'
15147
15518
  })
@@ -15159,8 +15530,8 @@ const VMain = genericComponent()({
15159
15530
  useRender(() => createVNode(props.tag, {
15160
15531
  "class": ['v-main', {
15161
15532
  'v-main--scrollable': props.scrollable
15162
- }],
15163
- "style": [mainStyles.value, ssrBootStyles.value]
15533
+ }, props.class],
15534
+ "style": [mainStyles.value, ssrBootStyles.value, props.style]
15164
15535
  }, {
15165
15536
  default: () => [props.scrollable ? createVNode("div", {
15166
15537
  "class": "v-main__scroller"
@@ -15506,6 +15877,7 @@ const VNavigationDrawer = genericComponent()({
15506
15877
  },
15507
15878
  sticky: Boolean,
15508
15879
  ...makeBorderProps(),
15880
+ ...makeComponentProps(),
15509
15881
  ...makeElevationProps(),
15510
15882
  ...makeLayoutItemProps(),
15511
15883
  ...makeRoundedProps(),
@@ -15657,8 +16029,8 @@ const VNavigationDrawer = genericComponent()({
15657
16029
  'v-navigation-drawer--temporary': isTemporary.value,
15658
16030
  'v-navigation-drawer--active': isActive.value,
15659
16031
  'v-navigation-drawer--sticky': isSticky.value
15660
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
15661
- "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value]
16032
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
16033
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
15662
16034
  }, attrs), {
15663
16035
  default: () => [hasImage && createVNode("div", {
15664
16036
  "key": "image",
@@ -15787,6 +16159,7 @@ const VPagination = genericComponent()({
15787
16159
  },
15788
16160
  showFirstLastPage: Boolean,
15789
16161
  ...makeBorderProps(),
16162
+ ...makeComponentProps(),
15790
16163
  ...makeDensityProps(),
15791
16164
  ...makeElevationProps(),
15792
16165
  ...makeRoundedProps(),
@@ -15983,7 +16356,8 @@ const VPagination = genericComponent()({
15983
16356
  }
15984
16357
  useRender(() => createVNode(props.tag, {
15985
16358
  "ref": resizeRef,
15986
- "class": ['v-pagination', themeClasses.value],
16359
+ "class": ['v-pagination', themeClasses.value, props.class],
16360
+ "style": props.style,
15987
16361
  "role": "navigation",
15988
16362
  "aria-label": t(props.ariaLabel),
15989
16363
  "onKeydown": onKeydown,
@@ -16042,7 +16416,8 @@ const VParallax = genericComponent()({
16042
16416
  scale: {
16043
16417
  type: [Number, String],
16044
16418
  default: 0.5
16045
- }
16419
+ },
16420
+ ...makeComponentProps()
16046
16421
  },
16047
16422
  setup(props, _ref) {
16048
16423
  let {
@@ -16104,7 +16479,8 @@ const VParallax = genericComponent()({
16104
16479
  useRender(() => createVNode(VImg, {
16105
16480
  "class": ['v-parallax', {
16106
16481
  'v-parallax--active': isIntersecting.value
16107
- }],
16482
+ }, props.class],
16483
+ "style": props.style,
16108
16484
  "ref": root,
16109
16485
  "cover": true,
16110
16486
  "onLoadstart": onScroll,
@@ -16129,7 +16505,8 @@ const VRadio = genericComponent()({
16129
16505
  slots
16130
16506
  } = _ref;
16131
16507
  useRender(() => createVNode(VSelectionControl, mergeProps(props, {
16132
- "class": "v-radio",
16508
+ "class": ['v-radio', props.class],
16509
+ "style": props.style,
16133
16510
  "type": "radio"
16134
16511
  }), slots));
16135
16512
  return {};
@@ -16183,7 +16560,8 @@ const VRadioGroup = genericComponent()({
16183
16560
  }
16184
16561
  }) : props.label;
16185
16562
  return createVNode(VInput, mergeProps({
16186
- "class": "v-radio-group"
16563
+ "class": ['v-radio-group', props.class],
16564
+ "style": props.style
16187
16565
  }, inputAttrs, inputProps, {
16188
16566
  "modelValue": model.value,
16189
16567
  "onUpdate:modelValue": $event => model.value = $event,
@@ -16239,11 +16617,14 @@ const VRangeSlider = genericComponent()({
16239
16617
  },
16240
16618
  emits: {
16241
16619
  'update:focused': value => true,
16242
- 'update:modelValue': value => true
16620
+ 'update:modelValue': value => true,
16621
+ end: value => true,
16622
+ start: value => true
16243
16623
  },
16244
16624
  setup(props, _ref) {
16245
16625
  let {
16246
- slots
16626
+ slots,
16627
+ emit
16247
16628
  } = _ref;
16248
16629
  const startThumbRef = ref();
16249
16630
  const stopThumbRef = ref();
@@ -16256,6 +16637,11 @@ const VRangeSlider = genericComponent()({
16256
16637
  const b = Math.abs(stopOffset);
16257
16638
  return a < b || a === b && startOffset < 0 ? startThumbRef.value.$el : stopThumbRef.value.$el;
16258
16639
  }
16640
+ const steps = useSteps(props);
16641
+ const model = useProxiedModel(props, 'modelValue', undefined, arr => {
16642
+ if (!arr?.length) return [0, 0];
16643
+ return arr.map(value => steps.roundValue(value));
16644
+ });
16259
16645
  const {
16260
16646
  activeThumbRef,
16261
16647
  hasLabels,
@@ -16265,34 +16651,37 @@ const VRangeSlider = genericComponent()({
16265
16651
  onSliderMousedown,
16266
16652
  onSliderTouchstart,
16267
16653
  position,
16268
- roundValue,
16269
16654
  trackContainerRef
16270
16655
  } = useSlider({
16271
- /* eslint-disable @typescript-eslint/no-use-before-define */
16272
16656
  props,
16273
- handleSliderMouseUp: newValue => {
16274
- model.value = activeThumbRef.value === startThumbRef.value?.$el ? [newValue, model.value[1]] : [model.value[0], newValue];
16657
+ steps,
16658
+ onSliderStart: () => {
16659
+ emit('start', model.value);
16660
+ },
16661
+ onSliderEnd: _ref2 => {
16662
+ let {
16663
+ value
16664
+ } = _ref2;
16665
+ const newValue = activeThumbRef.value === startThumbRef.value?.$el ? [value, model.value[1]] : [model.value[0], value];
16666
+ model.value = newValue;
16667
+ emit('end', newValue);
16275
16668
  },
16276
- handleMouseMove: newValue => {
16669
+ onSliderMove: _ref3 => {
16670
+ let {
16671
+ value
16672
+ } = _ref3;
16277
16673
  const [start, stop] = model.value;
16278
16674
  if (!props.strict && start === stop && start !== min.value) {
16279
- activeThumbRef.value = newValue > start ? stopThumbRef.value?.$el : startThumbRef.value?.$el;
16675
+ activeThumbRef.value = value > start ? stopThumbRef.value?.$el : startThumbRef.value?.$el;
16280
16676
  activeThumbRef.value?.focus();
16281
16677
  }
16282
16678
  if (activeThumbRef.value === startThumbRef.value?.$el) {
16283
- model.value = [Math.min(newValue, stop), stop];
16679
+ model.value = [Math.min(value, stop), stop];
16284
16680
  } else {
16285
- model.value = [start, Math.max(start, newValue)];
16681
+ model.value = [start, Math.max(start, value)];
16286
16682
  }
16287
16683
  },
16288
16684
  getActiveThumb
16289
- /* eslint-enable @typescript-eslint/no-use-before-define */
16290
- });
16291
-
16292
- const model = useProxiedModel(props, 'modelValue', undefined, arr => {
16293
- // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
16294
- if (!arr || !arr.length) return [0, 0];
16295
- return arr.map(value => roundValue(value));
16296
16685
  });
16297
16686
  const {
16298
16687
  isFocused,
@@ -16310,7 +16699,8 @@ const VRangeSlider = genericComponent()({
16310
16699
  'v-slider--focused': isFocused.value,
16311
16700
  'v-slider--pressed': mousePressed.value,
16312
16701
  'v-slider--disabled': props.disabled
16313
- }],
16702
+ }, props.class],
16703
+ "style": props.style,
16314
16704
  "ref": inputRef
16315
16705
  }, inputProps, {
16316
16706
  "focused": isFocused.value
@@ -16320,11 +16710,11 @@ const VRangeSlider = genericComponent()({
16320
16710
  "class": "v-slider__label",
16321
16711
  "text": props.label
16322
16712
  }, null) : undefined, slots.prepend?.(slotProps)]) : undefined,
16323
- default: _ref2 => {
16713
+ default: _ref4 => {
16324
16714
  let {
16325
16715
  id,
16326
16716
  messagesId
16327
- } = _ref2;
16717
+ } = _ref4;
16328
16718
  return createVNode("div", {
16329
16719
  "class": "v-slider__container",
16330
16720
  "onMousedown": onSliderMousedown,
@@ -16453,6 +16843,7 @@ const VRating = genericComponent()({
16453
16843
  validator: v => ['top', 'bottom'].includes(v)
16454
16844
  },
16455
16845
  ripple: Boolean,
16846
+ ...makeComponentProps(),
16456
16847
  ...makeDensityProps(),
16457
16848
  ...makeSizeProps(),
16458
16849
  ...makeTagProps(),
@@ -16476,9 +16867,6 @@ const VRating = genericComponent()({
16476
16867
  const range = computed(() => createRange(Number(props.length), 1));
16477
16868
  const increments = computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]));
16478
16869
  const hoverIndex = ref(-1);
16479
- const focusIndex = ref(-1);
16480
- const firstRef = ref();
16481
- let isClicking = false;
16482
16870
  const itemState = computed(() => increments.value.map(value => {
16483
16871
  const isHovering = props.hover && hoverIndex.value > -1;
16484
16872
  const isFilled = normalizedValue.value >= value;
@@ -16501,16 +16889,6 @@ const VRating = genericComponent()({
16501
16889
  function onMouseleave() {
16502
16890
  hoverIndex.value = -1;
16503
16891
  }
16504
- function onFocus() {
16505
- if (value === 0 && normalizedValue.value === 0) {
16506
- firstRef.value?.focus();
16507
- } else {
16508
- focusIndex.value = value;
16509
- }
16510
- }
16511
- function onBlur() {
16512
- if (!isClicking) focusIndex.value = -1;
16513
- }
16514
16892
  function onClick() {
16515
16893
  if (props.disabled || props.readonly) return;
16516
16894
  rating.value = normalizedValue.value === value && props.clearable ? 0 : value;
@@ -16518,17 +16896,9 @@ const VRating = genericComponent()({
16518
16896
  return {
16519
16897
  onMouseenter: props.hover ? onMouseenter : undefined,
16520
16898
  onMouseleave: props.hover ? onMouseleave : undefined,
16521
- onFocus,
16522
- onBlur,
16523
16899
  onClick
16524
16900
  };
16525
16901
  }));
16526
- function onMousedown() {
16527
- isClicking = true;
16528
- }
16529
- function onMouseup() {
16530
- isClicking = false;
16531
- }
16532
16902
  const name = computed(() => props.name ?? `v-rating-${getUid()}`);
16533
16903
  function VRatingItem(_ref2) {
16534
16904
  let {
@@ -16539,8 +16909,6 @@ const VRating = genericComponent()({
16539
16909
  const {
16540
16910
  onMouseenter,
16541
16911
  onMouseleave,
16542
- onFocus,
16543
- onBlur,
16544
16912
  onClick
16545
16913
  } = eventState.value[index + 1];
16546
16914
  const id = `${name.value}-${String(value).replace('.', '-')}`;
@@ -16551,7 +16919,6 @@ const VRating = genericComponent()({
16551
16919
  icon: itemState.value[index]?.icon,
16552
16920
  ripple: props.ripple,
16553
16921
  size: props.size,
16554
- tag: 'span',
16555
16922
  variant: 'plain'
16556
16923
  };
16557
16924
  return createVNode(Fragment, null, [createVNode("label", {
@@ -16560,17 +16927,17 @@ const VRating = genericComponent()({
16560
16927
  'v-rating__item--half': props.halfIncrements && value % 1 > 0,
16561
16928
  'v-rating__item--full': props.halfIncrements && value % 1 === 0
16562
16929
  },
16563
- "onMousedown": onMousedown,
16564
- "onMouseup": onMouseup,
16565
16930
  "onMouseenter": onMouseenter,
16566
- "onMouseleave": onMouseleave
16931
+ "onMouseleave": onMouseleave,
16932
+ "onClick": onClick
16567
16933
  }, [createVNode("span", {
16568
16934
  "class": "v-rating__hidden"
16569
16935
  }, [t(props.itemAriaLabel, value, props.length)]), !showStar ? undefined : slots.item ? slots.item({
16570
16936
  ...itemState.value[index],
16571
16937
  props: btnProps,
16572
16938
  value,
16573
- index
16939
+ index,
16940
+ rating: normalizedValue.value
16574
16941
  }) : createVNode(VBtn, btnProps, null)]), createVNode("input", {
16575
16942
  "class": "v-rating__hidden",
16576
16943
  "name": name.value,
@@ -16578,10 +16945,7 @@ const VRating = genericComponent()({
16578
16945
  "type": "radio",
16579
16946
  "value": value,
16580
16947
  "checked": normalizedValue.value === value,
16581
- "onClick": onClick,
16582
- "onFocus": onFocus,
16583
- "onBlur": onBlur,
16584
- "ref": index === 0 ? firstRef : undefined,
16948
+ "tabindex": -1,
16585
16949
  "readonly": props.readonly,
16586
16950
  "disabled": props.disabled
16587
16951
  }, null)]);
@@ -16597,7 +16961,8 @@ const VRating = genericComponent()({
16597
16961
  "class": ['v-rating', {
16598
16962
  'v-rating--hover': props.hover,
16599
16963
  'v-rating--readonly': props.readonly
16600
- }, themeClasses.value]
16964
+ }, themeClasses.value, props.class],
16965
+ "style": props.style
16601
16966
  }, {
16602
16967
  default: () => [createVNode(VRatingItem, {
16603
16968
  "value": 0,
@@ -16610,9 +16975,7 @@ const VRating = genericComponent()({
16610
16975
  index: i,
16611
16976
  label: props.itemLabels?.[i]
16612
16977
  }) : undefined, createVNode("div", {
16613
- "class": ['v-rating__item', {
16614
- 'v-rating__item--focused': Math.ceil(focusIndex.value) === value
16615
- }]
16978
+ "class": "v-rating__item"
16616
16979
  }, [props.halfIncrements ? createVNode(Fragment, null, [createVNode(VRatingItem, {
16617
16980
  "value": value - 0.5,
16618
16981
  "index": i * 2
@@ -16699,6 +17062,7 @@ const makeVSlideGroupProps = propsFactory({
16699
17062
  type: [Boolean, String],
16700
17063
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
16701
17064
  },
17065
+ ...makeComponentProps(),
16702
17066
  ...makeTagProps(),
16703
17067
  ...makeGroupProps({
16704
17068
  selectedClass: 'v-slide-group-item--active'
@@ -16862,7 +17226,7 @@ const VSlideGroup = genericComponent()({
16862
17226
  function focus(location) {
16863
17227
  if (!contentRef.value) return;
16864
17228
  if (!location) {
16865
- const focusable = [...contentRef.value.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')].filter(el => !el.hasAttribute('disabled'));
17229
+ const focusable = focusableChildren(contentRef.value);
16866
17230
  focusable[0]?.focus();
16867
17231
  } else if (location === 'next') {
16868
17232
  const el = contentRef.value.querySelector(':focus')?.nextElementSibling;
@@ -16939,7 +17303,8 @@ const VSlideGroup = genericComponent()({
16939
17303
  'v-slide-group--vertical': !isHorizontal.value,
16940
17304
  'v-slide-group--has-affixes': hasAffixes.value,
16941
17305
  'v-slide-group--is-overflowing': isOverflowing.value
16942
- }],
17306
+ }, props.class],
17307
+ "style": props.style,
16943
17308
  "tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
16944
17309
  "onFocus": onFocus
16945
17310
  }, {
@@ -17089,7 +17454,8 @@ const VSnackbar = genericComponent()({
17089
17454
  'v-snackbar--active': isActive.value,
17090
17455
  'v-snackbar--multi-line': props.multiLine && !props.vertical,
17091
17456
  'v-snackbar--vertical': props.vertical
17092
- }, positionClasses.value]
17457
+ }, positionClasses.value, props.class],
17458
+ "style": props.style
17093
17459
  }, overlayProps, {
17094
17460
  "modelValue": isActive.value,
17095
17461
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -17189,7 +17555,8 @@ const VSwitch = genericComponent()({
17189
17555
  'v-switch--inset': props.inset
17190
17556
  }, {
17191
17557
  'v-switch--indeterminate': indeterminate.value
17192
- }, loaderClasses.value]
17558
+ }, loaderClasses.value, props.class],
17559
+ "style": props.style
17193
17560
  }, inputAttrs, inputProps, {
17194
17561
  "id": id.value,
17195
17562
  "focused": isFocused.value
@@ -17258,6 +17625,7 @@ const VSystemBar = genericComponent()({
17258
17625
  color: String,
17259
17626
  height: [Number, String],
17260
17627
  window: Boolean,
17628
+ ...makeComponentProps(),
17261
17629
  ...makeElevationProps(),
17262
17630
  ...makeLayoutItemProps(),
17263
17631
  ...makeRoundedProps(),
@@ -17299,8 +17667,8 @@ const VSystemBar = genericComponent()({
17299
17667
  useRender(() => createVNode(props.tag, {
17300
17668
  "class": ['v-system-bar', {
17301
17669
  'v-system-bar--window': props.window
17302
- }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value],
17303
- "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value]
17670
+ }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value, props.class],
17671
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, props.style]
17304
17672
  }, slots));
17305
17673
  return {};
17306
17674
  }
@@ -17312,7 +17680,6 @@ const VTab = genericComponent()({
17312
17680
  name: 'VTab',
17313
17681
  props: {
17314
17682
  fixed: Boolean,
17315
- title: String,
17316
17683
  sliderColor: String,
17317
17684
  hideSlider: Boolean,
17318
17685
  direction: {
@@ -17374,10 +17741,10 @@ const VTab = genericComponent()({
17374
17741
  useRender(() => {
17375
17742
  const [btnProps] = VBtn.filterProps(props);
17376
17743
  return createVNode(VBtn, mergeProps({
17377
- "_as": "VTab",
17378
17744
  "symbol": VTabsSymbol,
17379
17745
  "ref": rootEl,
17380
- "class": ['v-tab'],
17746
+ "class": ['v-tab', props.class],
17747
+ "style": props.style,
17381
17748
  "tabindex": isSelected.value ? 0 : -1,
17382
17749
  "role": "tab",
17383
17750
  "aria-selected": String(isSelected.value),
@@ -17388,7 +17755,7 @@ const VTab = genericComponent()({
17388
17755
  }, btnProps, attrs, {
17389
17756
  "onGroup:selected": updateSlider
17390
17757
  }), {
17391
- default: () => [slots.default ? slots.default() : props.title, !props.hideSlider && createVNode("div", {
17758
+ default: () => [slots.default?.() ?? props.text, !props.hideSlider && createVNode("div", {
17392
17759
  "ref": sliderEl,
17393
17760
  "class": ['v-tab__slider', sliderColorClasses.value],
17394
17761
  "style": sliderColorStyles.value
@@ -17472,10 +17839,10 @@ const VTabs = genericComponent()({
17472
17839
  'v-tabs--fixed-tabs': props.fixedTabs,
17473
17840
  'v-tabs--grow': props.grow,
17474
17841
  'v-tabs--stacked': props.stacked
17475
- }, densityClasses.value, backgroundColorClasses.value],
17842
+ }, densityClasses.value, backgroundColorClasses.value, props.class],
17476
17843
  "style": [{
17477
17844
  '--v-tabs-height': convertToUnit(props.height)
17478
- }, backgroundColorStyles.value],
17845
+ }, backgroundColorStyles.value, props.style],
17479
17846
  "role": "tablist",
17480
17847
  "symbol": VTabsSymbol
17481
17848
  }), {
@@ -17495,6 +17862,7 @@ const VTable = genericComponent()({
17495
17862
  fixedFooter: Boolean,
17496
17863
  height: [Number, String],
17497
17864
  hover: Boolean,
17865
+ ...makeComponentProps(),
17498
17866
  ...makeDensityProps(),
17499
17867
  ...makeTagProps(),
17500
17868
  ...makeThemeProps()
@@ -17517,7 +17885,8 @@ const VTable = genericComponent()({
17517
17885
  'v-table--has-top': !!slots.top,
17518
17886
  'v-table--has-bottom': !!slots.bottom,
17519
17887
  'v-table--hover': props.hover
17520
- }, themeClasses.value, densityClasses.value]
17888
+ }, themeClasses.value, densityClasses.value, props.class],
17889
+ "style": props.style
17521
17890
  }, {
17522
17891
  default: () => [slots.top?.(), slots.default ? createVNode("div", {
17523
17892
  "class": "v-table__wrapper",
@@ -17682,7 +18051,8 @@ const VTextarea = genericComponent()({
17682
18051
  'v-textarea--auto-grow': props.autoGrow,
17683
18052
  'v-textarea--no-resize': props.noResize || props.autoGrow,
17684
18053
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
17685
- }]
18054
+ }, props.class],
18055
+ "style": props.style
17686
18056
  }, rootAttrs, inputProps, {
17687
18057
  "focused": isFocused.value
17688
18058
  }), {
@@ -17766,6 +18136,7 @@ const VThemeProvider = genericComponent()({
17766
18136
  name: 'VThemeProvider',
17767
18137
  props: {
17768
18138
  withBackground: Boolean,
18139
+ ...makeComponentProps(),
17769
18140
  ...makeThemeProps(),
17770
18141
  ...makeTagProps()
17771
18142
  },
@@ -17779,7 +18150,8 @@ const VThemeProvider = genericComponent()({
17779
18150
  return () => {
17780
18151
  if (!props.withBackground) return slots.default?.();
17781
18152
  return createVNode(props.tag, {
17782
- "class": ['v-theme-provider', themeClasses.value]
18153
+ "class": ['v-theme-provider', themeClasses.value, props.class],
18154
+ "style": props.style
17783
18155
  }, {
17784
18156
  default: () => [slots.default?.()]
17785
18157
  });
@@ -17824,6 +18196,7 @@ const VTimeline = genericComponent()({
17824
18196
  type: String,
17825
18197
  validator: v => ['start', 'end', 'both'].includes(v)
17826
18198
  },
18199
+ ...makeComponentProps(),
17827
18200
  ...makeDensityProps(),
17828
18201
  ...makeTagProps(),
17829
18202
  ...makeThemeProps()
@@ -17867,10 +18240,10 @@ const VTimeline = genericComponent()({
17867
18240
  useRender(() => createVNode(props.tag, {
17868
18241
  "class": ['v-timeline', `v-timeline--${props.direction}`, `v-timeline--align-${props.align}`, `v-timeline--justify-${props.justify}`, truncateClasses.value, {
17869
18242
  'v-timeline--inset-line': !!props.lineInset
17870
- }, themeClasses.value, densityClasses.value, sideClasses.value],
17871
- "style": {
18243
+ }, themeClasses.value, densityClasses.value, sideClasses.value, props.class],
18244
+ "style": [{
17872
18245
  '--v-timeline-line-thickness': convertToUnit(props.lineThickness)
17873
- }
18246
+ }, props.style]
17874
18247
  }, slots));
17875
18248
  return {};
17876
18249
  }
@@ -17885,6 +18258,7 @@ const VTimelineDivider = genericComponent()({
17885
18258
  icon: IconValue,
17886
18259
  iconColor: String,
17887
18260
  lineColor: String,
18261
+ ...makeComponentProps(),
17888
18262
  ...makeRoundedProps(),
17889
18263
  ...makeSizeProps(),
17890
18264
  ...makeElevationProps()
@@ -17914,7 +18288,8 @@ const VTimelineDivider = genericComponent()({
17914
18288
  useRender(() => createVNode("div", {
17915
18289
  "class": ['v-timeline-divider', {
17916
18290
  'v-timeline-divider--fill-dot': props.fillDot
17917
- }]
18291
+ }, props.class],
18292
+ "style": props.style
17918
18293
  }, [createVNode("div", {
17919
18294
  "class": ['v-timeline-divider__before', lineColorClasses.value],
17920
18295
  "style": lineColorStyles.value
@@ -17964,11 +18339,12 @@ const VTimelineItem = genericComponent()({
17964
18339
  icon: IconValue,
17965
18340
  iconColor: String,
17966
18341
  lineInset: [Number, String],
17967
- ...makeRoundedProps(),
18342
+ ...makeComponentProps(),
18343
+ ...makeDimensionProps(),
17968
18344
  ...makeElevationProps(),
18345
+ ...makeRoundedProps(),
17969
18346
  ...makeSizeProps(),
17970
- ...makeTagProps(),
17971
- ...makeDimensionProps()
18347
+ ...makeTagProps()
17972
18348
  },
17973
18349
  setup(props, _ref) {
17974
18350
  let {
@@ -17988,11 +18364,11 @@ const VTimelineItem = genericComponent()({
17988
18364
  useRender(() => createVNode("div", {
17989
18365
  "class": ['v-timeline-item', {
17990
18366
  'v-timeline-item--fill-dot': props.fillDot
17991
- }],
17992
- "style": {
18367
+ }, props.class],
18368
+ "style": [{
17993
18369
  '--v-timeline-dot-size': convertToUnit(dotSize.value),
17994
18370
  '--v-timeline-line-inset': props.lineInset ? `calc(var(--v-timeline-dot-size) / 2 + ${convertToUnit(props.lineInset)})` : convertToUnit(0)
17995
- }
18371
+ }, props.style]
17996
18372
  }, [createVNode("div", {
17997
18373
  "class": "v-timeline-item__body",
17998
18374
  "style": dimensionStyles.value
@@ -18026,6 +18402,7 @@ const VTooltip = genericComponent()({
18026
18402
  closeOnBack: false,
18027
18403
  location: 'end',
18028
18404
  locationStrategy: 'connected',
18405
+ eager: true,
18029
18406
  minWidth: 0,
18030
18407
  offset: 10,
18031
18408
  openOnClick: false,
@@ -18034,7 +18411,7 @@ const VTooltip = genericComponent()({
18034
18411
  scrim: false,
18035
18412
  scrollStrategy: 'reposition',
18036
18413
  transition: false
18037
- }), ['absolute', 'persistent', 'eager'])
18414
+ }), ['absolute', 'persistent'])
18038
18415
  },
18039
18416
  emits: {
18040
18417
  'update:modelValue': value => true
@@ -18067,7 +18444,8 @@ const VTooltip = genericComponent()({
18067
18444
  const [overlayProps] = VOverlay.filterProps(props);
18068
18445
  return createVNode(VOverlay, mergeProps({
18069
18446
  "ref": overlay,
18070
- "class": ['v-tooltip'],
18447
+ "class": ['v-tooltip', props.class],
18448
+ "style": props.style,
18071
18449
  "id": id.value
18072
18450
  }, overlayProps, {
18073
18451
  "modelValue": isActive.value,
@@ -18078,7 +18456,6 @@ const VTooltip = genericComponent()({
18078
18456
  "origin": origin.value,
18079
18457
  "persistent": true,
18080
18458
  "role": "tooltip",
18081
- "eager": true,
18082
18459
  "activatorProps": activatorProps.value,
18083
18460
  "_disableGlobalStack": true
18084
18461
  }, scopeId), {
@@ -18113,40 +18490,210 @@ const VValidation = genericComponent()({
18113
18490
  }
18114
18491
  });
18115
18492
 
18116
- const VDataTableColumn = defineFunctionalComponent({
18117
- align: {
18118
- type: String,
18119
- default: 'start'
18493
+ const VVirtualScrollItem = genericComponent()({
18494
+ name: 'VVirtualScrollItem',
18495
+ props: {
18496
+ dynamicHeight: Boolean,
18497
+ ...makeComponentProps()
18120
18498
  },
18121
- fixed: Boolean,
18122
- fixedOffset: [Number, String],
18123
- height: [Number, String],
18124
- lastFixed: Boolean,
18125
- noPadding: Boolean,
18126
- tag: String,
18127
- width: [Number, String]
18128
- }, (props, _ref) => {
18129
- let {
18130
- slots,
18131
- attrs
18132
- } = _ref;
18133
- const Tag = props.tag ?? 'td';
18134
- return createVNode(Tag, mergeProps({
18135
- "class": ['v-data-table__td', {
18136
- 'v-data-table-column--fixed': props.fixed,
18137
- 'v-data-table-column--last-fixed': props.lastFixed,
18138
- 'v-data-table-column--no-padding': props.noPadding
18139
- }, `v-data-table-column--align-${props.align}`],
18140
- "style": {
18141
- height: convertToUnit(props.height),
18142
- width: convertToUnit(props.width),
18143
- left: convertToUnit(props.fixedOffset || null)
18499
+ emits: {
18500
+ 'update:height': height => true
18501
+ },
18502
+ setup(props, _ref) {
18503
+ let {
18504
+ emit,
18505
+ slots
18506
+ } = _ref;
18507
+ const {
18508
+ resizeRef,
18509
+ contentRect
18510
+ } = useResizeObserver();
18511
+ useToggleScope(() => props.dynamicHeight, () => {
18512
+ watch(() => contentRect.value?.height, height => {
18513
+ if (height != null) emit('update:height', height);
18514
+ });
18515
+ });
18516
+ function updateHeight() {
18517
+ if (props.dynamicHeight && contentRect.value) {
18518
+ emit('update:height', contentRect.value.height);
18519
+ }
18144
18520
  }
18145
- }, attrs), {
18146
- default: () => [slots.default?.()]
18147
- });
18148
- });
18149
-
18521
+ onUpdated(updateHeight);
18522
+ useRender(() => createVNode("div", {
18523
+ "ref": props.dynamicHeight ? resizeRef : undefined,
18524
+ "class": ['v-virtual-scroll__item', props.class],
18525
+ "style": props.style
18526
+ }, [slots.default?.()]));
18527
+ }
18528
+ });
18529
+
18530
+ // Types
18531
+
18532
+ const UP$1 = -1;
18533
+ const DOWN$1 = 1;
18534
+ const VVirtualScroll = genericComponent()({
18535
+ name: 'VVirtualScroll',
18536
+ props: {
18537
+ items: {
18538
+ type: Array,
18539
+ default: () => []
18540
+ },
18541
+ itemHeight: [Number, String],
18542
+ ...makeComponentProps(),
18543
+ ...makeDimensionProps()
18544
+ },
18545
+ setup(props, _ref) {
18546
+ let {
18547
+ slots
18548
+ } = _ref;
18549
+ const first = ref(0);
18550
+ const baseItemHeight = ref(props.itemHeight);
18551
+ const itemHeight = computed({
18552
+ get: () => parseInt(baseItemHeight.value ?? 0, 10),
18553
+ set(val) {
18554
+ baseItemHeight.value = val;
18555
+ }
18556
+ });
18557
+ const rootEl = ref();
18558
+ const {
18559
+ resizeRef,
18560
+ contentRect
18561
+ } = useResizeObserver();
18562
+ watchEffect(() => {
18563
+ resizeRef.value = rootEl.value;
18564
+ });
18565
+ const display = useDisplay();
18566
+ const sizeMap = new Map();
18567
+ let sizes = createRange(props.items.length).map(() => itemHeight.value);
18568
+ const visibleItems = computed(() => {
18569
+ return Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
18570
+ });
18571
+ function handleItemResize(index, height) {
18572
+ itemHeight.value = Math.max(itemHeight.value, height);
18573
+ sizes[index] = height;
18574
+ sizeMap.set(props.items[index], height);
18575
+ }
18576
+ function calculateOffset(index) {
18577
+ return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0);
18578
+ }
18579
+ function calculateMidPointIndex(scrollTop) {
18580
+ const end = props.items.length;
18581
+ let middle = 0;
18582
+ let middleOffset = 0;
18583
+ while (middleOffset < scrollTop && middle < end) {
18584
+ middleOffset += sizes[middle++] || itemHeight.value;
18585
+ }
18586
+ return middle - 1;
18587
+ }
18588
+ let lastScrollTop = 0;
18589
+ function handleScroll() {
18590
+ if (!rootEl.value || !contentRect.value) return;
18591
+ const height = contentRect.value.height;
18592
+ const scrollTop = rootEl.value.scrollTop;
18593
+ const direction = scrollTop < lastScrollTop ? UP$1 : DOWN$1;
18594
+ const midPointIndex = calculateMidPointIndex(scrollTop + height / 2);
18595
+ const buffer = Math.round(visibleItems.value / 3);
18596
+ if (direction === UP$1 && midPointIndex <= first.value + buffer * 2 - 1) {
18597
+ first.value = clamp(midPointIndex - buffer, 0, props.items.length);
18598
+ } else if (direction === DOWN$1 && midPointIndex >= first.value + buffer * 2 - 1) {
18599
+ first.value = clamp(midPointIndex - buffer, 0, props.items.length - visibleItems.value);
18600
+ }
18601
+ lastScrollTop = rootEl.value.scrollTop;
18602
+ }
18603
+ function scrollToIndex(index) {
18604
+ if (!rootEl.value) return;
18605
+ const offset = calculateOffset(index);
18606
+ rootEl.value.scrollTop = offset;
18607
+ }
18608
+ const items = computed(() => props.items.map((item, index) => ({
18609
+ raw: item,
18610
+ index
18611
+ })));
18612
+ const last = computed(() => Math.min(props.items.length, first.value + visibleItems.value));
18613
+ const computedItems = computed(() => items.value.slice(first.value, last.value));
18614
+ const paddingTop = computed(() => calculateOffset(first.value));
18615
+ const paddingBottom = computed(() => calculateOffset(props.items.length) - calculateOffset(last.value));
18616
+ const {
18617
+ dimensionStyles
18618
+ } = useDimension(props);
18619
+ onMounted(() => {
18620
+ if (!itemHeight.value) {
18621
+ // If itemHeight prop is not set, then calculate an estimated height from the average of inital items
18622
+ itemHeight.value = sizes.slice(first.value, last.value).reduce((curr, height) => curr + height, 0) / visibleItems.value;
18623
+ }
18624
+ });
18625
+ watch(() => props.items.length, () => {
18626
+ sizes = createRange(props.items.length).map(() => itemHeight.value);
18627
+ sizeMap.forEach((height, item) => {
18628
+ const index = props.items.indexOf(item);
18629
+ if (index === -1) {
18630
+ sizeMap.delete(item);
18631
+ } else {
18632
+ sizes[index] = height;
18633
+ }
18634
+ });
18635
+ });
18636
+ useRender(() => createVNode("div", {
18637
+ "ref": rootEl,
18638
+ "class": ['v-virtual-scroll', props.class],
18639
+ "onScroll": handleScroll,
18640
+ "style": [dimensionStyles.value, props.style]
18641
+ }, [createVNode("div", {
18642
+ "class": "v-virtual-scroll__container",
18643
+ "style": {
18644
+ paddingTop: convertToUnit(paddingTop.value),
18645
+ paddingBottom: convertToUnit(paddingBottom.value)
18646
+ }
18647
+ }, [computedItems.value.map(item => createVNode(VVirtualScrollItem, {
18648
+ "key": item.index,
18649
+ "dynamicHeight": !props.itemHeight,
18650
+ "onUpdate:height": height => handleItemResize(item.index, height)
18651
+ }, {
18652
+ default: () => [slots.default?.({
18653
+ item: item.raw,
18654
+ index: item.index
18655
+ })]
18656
+ }))])]));
18657
+ return {
18658
+ scrollToIndex
18659
+ };
18660
+ }
18661
+ });
18662
+
18663
+ const VDataTableColumn = defineFunctionalComponent({
18664
+ align: {
18665
+ type: String,
18666
+ default: 'start'
18667
+ },
18668
+ fixed: Boolean,
18669
+ fixedOffset: [Number, String],
18670
+ height: [Number, String],
18671
+ lastFixed: Boolean,
18672
+ noPadding: Boolean,
18673
+ tag: String,
18674
+ width: [Number, String]
18675
+ }, (props, _ref) => {
18676
+ let {
18677
+ slots,
18678
+ attrs
18679
+ } = _ref;
18680
+ const Tag = props.tag ?? 'td';
18681
+ return createVNode(Tag, mergeProps({
18682
+ "class": ['v-data-table__td', {
18683
+ 'v-data-table-column--fixed': props.fixed,
18684
+ 'v-data-table-column--last-fixed': props.lastFixed,
18685
+ 'v-data-table-column--no-padding': props.noPadding
18686
+ }, `v-data-table-column--align-${props.align}`],
18687
+ "style": {
18688
+ height: convertToUnit(props.height),
18689
+ width: convertToUnit(props.width),
18690
+ left: convertToUnit(props.fixedOffset || null)
18691
+ }
18692
+ }, attrs), {
18693
+ default: () => [slots.default?.()]
18694
+ });
18695
+ });
18696
+
18150
18697
  // Utilities
18151
18698
 
18152
18699
  // Types
@@ -18538,6 +19085,17 @@ const VDataTableHeaders = genericComponent()({
18538
19085
  backgroundColorClasses,
18539
19086
  backgroundColorStyles
18540
19087
  } = useBackgroundColor(props, 'color');
19088
+ const slotProps = computed(() => ({
19089
+ headers: headers.value,
19090
+ columns: columns.value,
19091
+ toggleSort,
19092
+ sortBy: sortBy.value,
19093
+ someSelected: someSelected.value,
19094
+ allSelected: allSelected.value,
19095
+ selectAll,
19096
+ getSortIcon,
19097
+ getFixedStyles
19098
+ }));
18541
19099
  const VDataTableHeaderCell = _ref2 => {
18542
19100
  let {
18543
19101
  column,
@@ -18565,14 +19123,14 @@ const VDataTableHeaders = genericComponent()({
18565
19123
  "noPadding": noPadding
18566
19124
  }, {
18567
19125
  default: () => {
18568
- const slotName = `column.${column.key}`;
18569
- const slotProps = {
19126
+ const columnSlotName = `column.${column.key}`;
19127
+ const columnSlotProps = {
18570
19128
  column,
18571
19129
  selectAll
18572
19130
  };
18573
- if (slots[slotName]) return slots[slotName](slotProps);
19131
+ if (slots[columnSlotName]) return slots[columnSlotName](columnSlotProps);
18574
19132
  if (column.key === 'data-table-select') {
18575
- return slots['column.data-table-select']?.(slotProps) ?? createVNode(VCheckboxBtn, {
19133
+ return slots['column.data-table-select']?.(columnSlotProps) ?? createVNode(VCheckboxBtn, {
18576
19134
  "modelValue": allSelected.value,
18577
19135
  "indeterminate": someSelected.value && !allSelected.value,
18578
19136
  "onUpdate:modelValue": selectAll
@@ -18592,22 +19150,24 @@ const VDataTableHeaders = genericComponent()({
18592
19150
  }
18593
19151
  });
18594
19152
  };
18595
- useRender(() => createVNode(Fragment, null, [headers.value.map((row, y) => createVNode("tr", null, [row.map((column, x) => createVNode(VDataTableHeaderCell, {
18596
- "column": column,
18597
- "x": x,
18598
- "y": y
18599
- }, null))])), props.loading && createVNode("tr", {
18600
- "class": "v-data-table__progress"
18601
- }, [createVNode("th", {
18602
- "colspan": columns.value.length
18603
- }, [createVNode(LoaderSlot, {
18604
- "name": "v-data-table-headers",
18605
- "active": true,
18606
- "color": typeof props.loading === 'boolean' ? undefined : props.loading,
18607
- "indeterminate": true
18608
- }, {
18609
- default: slots.loader
18610
- })])])]));
19153
+ useRender(() => {
19154
+ return createVNode(Fragment, null, [slots.headers ? slots.headers(slotProps.value) : headers.value.map((row, y) => createVNode("tr", null, [row.map((column, x) => createVNode(VDataTableHeaderCell, {
19155
+ "column": column,
19156
+ "x": x,
19157
+ "y": y
19158
+ }, null))])), props.loading && createVNode("tr", {
19159
+ "class": "v-data-table__progress"
19160
+ }, [createVNode("th", {
19161
+ "colspan": columns.value.length
19162
+ }, [createVNode(LoaderSlot, {
19163
+ "name": "v-data-table-headers",
19164
+ "active": true,
19165
+ "color": typeof props.loading === 'boolean' ? undefined : props.loading,
19166
+ "indeterminate": true
19167
+ }, {
19168
+ default: slots.loader
19169
+ })])])]);
19170
+ });
18611
19171
  }
18612
19172
  });
18613
19173
 
@@ -18906,9 +19466,7 @@ const VDataTableRow = defineComponent({
18906
19466
  'v-data-table__tr--clickable': !!props.onClick
18907
19467
  }],
18908
19468
  "onClick": props.onClick
18909
- }, [!columns.value.length && createVNode(VDataTableColumn, {
18910
- "key": "no-data"
18911
- }, slots), props.item && columns.value.map((column, i) => createVNode(VDataTableColumn, {
19469
+ }, [props.item && columns.value.map((column, i) => createVNode(VDataTableColumn, {
18912
19470
  "align": column.align,
18913
19471
  "fixed": column.fixed,
18914
19472
  "fixedOffset": column.fixedOffset,
@@ -18998,13 +19556,13 @@ const VDataTableRows = genericComponent()({
18998
19556
  useRender(() => {
18999
19557
  if (props.loading && slots.loading) {
19000
19558
  return createVNode("tr", {
19001
- "class": "v-data-table-rows-no-data",
19559
+ "class": "v-data-table-rows-loading",
19002
19560
  "key": "loading"
19003
19561
  }, [createVNode("td", {
19004
19562
  "colspan": columns.value.length
19005
19563
  }, [slots.loading()])]);
19006
19564
  }
19007
- if (!props.loading && !props.items.length && !props.hideNoData && slots['no-data']) {
19565
+ if (!props.loading && !props.items.length && !props.hideNoData) {
19008
19566
  return createVNode("tr", {
19009
19567
  "class": "v-data-table-rows-no-data",
19010
19568
  "key": "no-data"
@@ -19483,7 +20041,7 @@ const VDataTable = genericComponent()({
19483
20041
  top: slots.top,
19484
20042
  default: slots.default ?? (() => createVNode(Fragment, null, [slots.colgroup?.({
19485
20043
  columns
19486
- }), createVNode("thead", null, [slots.headers ? slots.headers() : createVNode(VDataTableHeaders, {
20044
+ }), createVNode("thead", null, [createVNode(VDataTableHeaders, {
19487
20045
  "sticky": props.fixedHeader,
19488
20046
  "multiSort": props.multiSort
19489
20047
  }, slots)]), slots.thead?.(), createVNode("tbody", null, [slots.body ? slots.body() : createVNode(VDataTableRows, {
@@ -19512,8 +20070,8 @@ const makeDataTableVirtualProps = propsFactory({
19512
20070
  default: 52
19513
20071
  }
19514
20072
  }, 'virtual');
19515
- const UP$1 = -1;
19516
- const DOWN$1 = 1;
20073
+ const UP = -1;
20074
+ const DOWN = 1;
19517
20075
 
19518
20076
  // TODO: Replace this with composable from v-virtual-scroll
19519
20077
  function useVirtual(props, items) {
@@ -19551,12 +20109,12 @@ function useVirtual(props, items) {
19551
20109
  isScrolling.value = false;
19552
20110
  }, 100);
19553
20111
  const scrollTop = containerRef.value.scrollTop;
19554
- const direction = scrollTop < lastScrollTop ? UP$1 : DOWN$1;
20112
+ const direction = scrollTop < lastScrollTop ? UP : DOWN;
19555
20113
  const midPointIndex = calculateMidPointIndex(scrollTop);
19556
20114
  const buffer = Math.round(visibleItems.value / 3);
19557
- if (direction === UP$1 && midPointIndex <= startIndex.value) {
20115
+ if (direction === UP && midPointIndex <= startIndex.value) {
19558
20116
  startIndex.value = Math.max(midPointIndex - buffer, 0);
19559
- } else if (direction === DOWN$1 && midPointIndex >= startIndex.value + buffer * 2) {
20117
+ } else if (direction === DOWN && midPointIndex >= startIndex.value + buffer * 2) {
19560
20118
  startIndex.value = Math.min(Math.max(0, midPointIndex - buffer), items.value.length - visibleItems.value);
19561
20119
  }
19562
20120
  lastScrollTop = containerRef.value.scrollTop;
@@ -19849,7 +20407,7 @@ const VDataTableServer = genericComponent()({
19849
20407
  }), createVNode("thead", {
19850
20408
  "class": "v-data-table__thead",
19851
20409
  "role": "rowgroup"
19852
- }, [slots.headers ? slots.headers() : createVNode(VDataTableHeaders, {
20410
+ }, [createVNode(VDataTableHeaders, {
19853
20411
  "sticky": props.fixedHeader,
19854
20412
  "loading": props.loading,
19855
20413
  "color": props.color
@@ -19869,6 +20427,211 @@ const VDataTableServer = genericComponent()({
19869
20427
 
19870
20428
  // Types
19871
20429
 
20430
+ const VInfiniteScrollIntersect = defineComponent({
20431
+ name: 'VInfiniteScrollIntersect',
20432
+ props: {
20433
+ side: {
20434
+ type: String,
20435
+ required: true
20436
+ },
20437
+ rootRef: null,
20438
+ rootMargin: String
20439
+ },
20440
+ emits: {
20441
+ intersect: side => true
20442
+ },
20443
+ setup(props, _ref) {
20444
+ let {
20445
+ emit
20446
+ } = _ref;
20447
+ const {
20448
+ intersectionRef,
20449
+ isIntersecting
20450
+ } = useIntersectionObserver(entries => {}, props.rootMargin ? {
20451
+ root: props.rootRef,
20452
+ rootMargin: props.rootMargin
20453
+ } : undefined);
20454
+ watch(isIntersecting, async val => {
20455
+ if (val) emit('intersect', props.side);
20456
+ });
20457
+ useRender(() => createVNode("div", {
20458
+ "class": "v-infinite-scroll-intersect",
20459
+ "ref": intersectionRef
20460
+ }, [createTextVNode("\xA0")]));
20461
+ return {};
20462
+ }
20463
+ });
20464
+ const VInfiniteScroll = genericComponent()({
20465
+ name: 'VInfiniteScroll',
20466
+ props: {
20467
+ color: String,
20468
+ direction: {
20469
+ type: String,
20470
+ default: 'vertical',
20471
+ validator: v => ['vertical', 'horizontal'].includes(v)
20472
+ },
20473
+ side: {
20474
+ type: String,
20475
+ default: 'end',
20476
+ validator: v => ['start', 'end', 'both'].includes(v)
20477
+ },
20478
+ mode: {
20479
+ type: String,
20480
+ default: 'intersect',
20481
+ validator: v => ['intersect', 'manual'].includes(v)
20482
+ },
20483
+ margin: [Number, String],
20484
+ loadMoreText: {
20485
+ type: String,
20486
+ default: '$vuetify.infiniteScroll.loadMore'
20487
+ },
20488
+ emptyText: {
20489
+ type: String,
20490
+ default: '$vuetify.infiniteScroll.empty'
20491
+ },
20492
+ ...makeDimensionProps()
20493
+ },
20494
+ emits: {
20495
+ load: options => true
20496
+ },
20497
+ setup(props, _ref2) {
20498
+ let {
20499
+ slots,
20500
+ emit
20501
+ } = _ref2;
20502
+ const rootEl = ref();
20503
+ const startStatus = ref('ok');
20504
+ const endStatus = ref('ok');
20505
+ const margin = computed(() => convertToUnit(props.margin));
20506
+ function setScrollAmount(amount) {
20507
+ if (!rootEl.value) return;
20508
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
20509
+ rootEl.value[property] = amount;
20510
+ }
20511
+ function getScrollAmount() {
20512
+ if (!rootEl.value) return 0;
20513
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
20514
+ return rootEl.value[property];
20515
+ }
20516
+ function getScrollSize() {
20517
+ if (!rootEl.value) return 0;
20518
+ const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth';
20519
+ return rootEl.value[property];
20520
+ }
20521
+ function getContainerSize() {
20522
+ if (!rootEl.value) return 0;
20523
+ const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth';
20524
+ return rootEl.value[property];
20525
+ }
20526
+ onMounted(() => {
20527
+ if (!rootEl.value) return;
20528
+ if (props.side === 'start') {
20529
+ setScrollAmount(getScrollSize());
20530
+ } else if (props.side === 'both') {
20531
+ setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2);
20532
+ }
20533
+ });
20534
+ function setStatus(side, status) {
20535
+ if (side === 'start') {
20536
+ startStatus.value = status;
20537
+ } else if (side === 'end') {
20538
+ endStatus.value = status;
20539
+ }
20540
+ }
20541
+ function getStatus(side) {
20542
+ return side === 'start' ? startStatus.value : endStatus.value;
20543
+ }
20544
+ let previousScrollSize = 0;
20545
+ function handleIntersect(side) {
20546
+ const status = getStatus(side);
20547
+ if (!rootEl.value || status === 'loading') return;
20548
+ previousScrollSize = getScrollSize();
20549
+ setStatus(side, 'loading');
20550
+ function done(status) {
20551
+ setStatus(side, status);
20552
+ nextTick(() => {
20553
+ if (status === 'ok' && side === 'start') {
20554
+ setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
20555
+ }
20556
+ });
20557
+ }
20558
+ emit('load', {
20559
+ side,
20560
+ done
20561
+ });
20562
+ }
20563
+ const {
20564
+ t
20565
+ } = useLocale();
20566
+ function renderSide(side, status) {
20567
+ if (props.side !== side && props.side !== 'both') return;
20568
+ const onClick = () => handleIntersect(side);
20569
+ const slotProps = {
20570
+ side,
20571
+ props: {
20572
+ onClick,
20573
+ color: props.color
20574
+ }
20575
+ };
20576
+ if (status === 'error') return slots.error?.(slotProps);
20577
+ if (status === 'empty') return slots.empty?.(slotProps) ?? createVNode("div", null, [t(props.emptyText)]);
20578
+ if (props.mode === 'manual') {
20579
+ if (status === 'loading') {
20580
+ return slots.loading?.(slotProps) ?? createVNode(VProgressCircular, {
20581
+ "indeterminate": true,
20582
+ "color": props.color
20583
+ }, null);
20584
+ }
20585
+ return slots['load-more']?.(slotProps) ?? createVNode(VBtn, {
20586
+ "variant": "outlined",
20587
+ "color": props.color,
20588
+ "onClick": onClick
20589
+ }, {
20590
+ default: () => [t(props.loadMoreText)]
20591
+ });
20592
+ }
20593
+ return slots.loading?.(slotProps) ?? createVNode(VProgressCircular, {
20594
+ "indeterminate": true,
20595
+ "color": props.color
20596
+ }, null);
20597
+ }
20598
+ const {
20599
+ dimensionStyles
20600
+ } = useDimension(props);
20601
+ useRender(() => {
20602
+ const hasStartIntersect = props.side === 'start' || props.side === 'both';
20603
+ const hasEndIntersect = props.side === 'end' || props.side === 'both';
20604
+ const intersectMode = props.mode === 'intersect';
20605
+ return createVNode("div", {
20606
+ "ref": rootEl,
20607
+ "class": ['v-infinite-scroll', `v-infinite-scroll--${props.direction}`, {
20608
+ 'v-infinite-scroll--start': hasStartIntersect,
20609
+ 'v-infinite-scroll--end': hasEndIntersect
20610
+ }],
20611
+ "style": dimensionStyles.value
20612
+ }, [createVNode("div", {
20613
+ "class": "v-infinite-scroll__side"
20614
+ }, [renderSide('start', startStatus.value)]), rootEl.value && hasStartIntersect && intersectMode && createVNode(VInfiniteScrollIntersect, {
20615
+ "key": "start",
20616
+ "side": "start",
20617
+ "onIntersect": handleIntersect,
20618
+ "rootRef": rootEl.value,
20619
+ "rootMargin": margin.value
20620
+ }, null), slots.default?.(), rootEl.value && hasEndIntersect && intersectMode && createVNode(VInfiniteScrollIntersect, {
20621
+ "key": "end",
20622
+ "side": "end",
20623
+ "onIntersect": handleIntersect,
20624
+ "rootRef": rootEl.value,
20625
+ "rootMargin": margin.value
20626
+ }, null), createVNode("div", {
20627
+ "class": "v-infinite-scroll__side"
20628
+ }, [renderSide('end', endStatus.value)])]);
20629
+ });
20630
+ }
20631
+ });
20632
+
20633
+ // Types
20634
+
19872
20635
  const rootTypes = {
19873
20636
  actions: 'button@2',
19874
20637
  article: 'heading, paragraph',
@@ -19999,177 +20762,6 @@ const VSkeletonLoader = genericComponent()({
19999
20762
  }
20000
20763
  });
20001
20764
 
20002
- const VVirtualScrollItem = genericComponent()({
20003
- name: 'VVirtualScrollItem',
20004
- props: {
20005
- dynamicHeight: Boolean
20006
- },
20007
- emits: {
20008
- 'update:height': height => true
20009
- },
20010
- setup(props, _ref) {
20011
- let {
20012
- emit,
20013
- slots
20014
- } = _ref;
20015
- const {
20016
- resizeRef,
20017
- contentRect
20018
- } = useResizeObserver();
20019
- useToggleScope(() => props.dynamicHeight, () => {
20020
- watch(() => contentRect.value?.height, height => {
20021
- if (height != null) emit('update:height', height);
20022
- });
20023
- });
20024
- function updateHeight() {
20025
- if (props.dynamicHeight && contentRect.value) {
20026
- emit('update:height', contentRect.value.height);
20027
- }
20028
- }
20029
- onUpdated(updateHeight);
20030
- useRender(() => createVNode("div", {
20031
- "ref": props.dynamicHeight ? resizeRef : undefined,
20032
- "class": "v-virtual-scroll__item"
20033
- }, [slots.default?.()]));
20034
- }
20035
- });
20036
-
20037
- // Types
20038
-
20039
- const UP = -1;
20040
- const DOWN = 1;
20041
- const VVirtualScroll = genericComponent()({
20042
- name: 'VVirtualScroll',
20043
- props: {
20044
- items: {
20045
- type: Array,
20046
- default: () => []
20047
- },
20048
- itemHeight: [Number, String],
20049
- visibleItems: [Number, String],
20050
- ...makeDimensionProps()
20051
- },
20052
- setup(props, _ref) {
20053
- let {
20054
- slots
20055
- } = _ref;
20056
- const first = ref(0);
20057
- const baseItemHeight = ref(props.itemHeight);
20058
- const itemHeight = computed({
20059
- get: () => parseInt(baseItemHeight.value ?? 0, 10),
20060
- set(val) {
20061
- baseItemHeight.value = val;
20062
- }
20063
- });
20064
- const rootEl = ref();
20065
- const {
20066
- resizeRef,
20067
- contentRect
20068
- } = useResizeObserver();
20069
- watchEffect(() => {
20070
- resizeRef.value = rootEl.value;
20071
- });
20072
- const display = useDisplay();
20073
- const sizeMap = new Map();
20074
- let sizes = createRange(props.items.length).map(() => itemHeight.value);
20075
- const visibleItems = computed(() => {
20076
- return props.visibleItems ? parseInt(props.visibleItems, 10) : Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
20077
- });
20078
- function handleItemResize(index, height) {
20079
- itemHeight.value = Math.max(itemHeight.value, height);
20080
- sizes[index] = height;
20081
- sizeMap.set(props.items[index], height);
20082
- }
20083
- function calculateOffset(index) {
20084
- return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0);
20085
- }
20086
- function calculateMidPointIndex(scrollTop) {
20087
- let start = 0;
20088
- let end = props.items.length;
20089
- while (start <= end) {
20090
- const middle = start + Math.floor((end - start) / 2);
20091
- const middleOffset = calculateOffset(middle);
20092
- if (middleOffset === scrollTop) {
20093
- return middle;
20094
- } else if (middleOffset < scrollTop) {
20095
- start = middle + 1;
20096
- } else if (middleOffset > scrollTop) {
20097
- end = middle - 1;
20098
- }
20099
- }
20100
- return start;
20101
- }
20102
- let lastScrollTop = 0;
20103
- function handleScroll() {
20104
- if (!rootEl.value || !contentRect.value) return;
20105
- const height = contentRect.value.height;
20106
- const scrollTop = rootEl.value.scrollTop;
20107
- const direction = scrollTop < lastScrollTop ? UP : DOWN;
20108
- const midPointIndex = calculateMidPointIndex(scrollTop + height / 2);
20109
- const buffer = Math.round(visibleItems.value / 3);
20110
- if (direction === UP && midPointIndex <= first.value + buffer * 2 - 1) {
20111
- first.value = clamp(midPointIndex - buffer, 0, props.items.length);
20112
- } else if (direction === DOWN && midPointIndex >= first.value + buffer * 2 - 1) {
20113
- first.value = clamp(midPointIndex - buffer, 0, props.items.length - visibleItems.value);
20114
- }
20115
- lastScrollTop = rootEl.value.scrollTop;
20116
- }
20117
- function scrollToIndex(index) {
20118
- if (!rootEl.value) return;
20119
- const offset = calculateOffset(index);
20120
- rootEl.value.scrollTop = offset;
20121
- }
20122
- const last = computed(() => Math.min(props.items.length, first.value + visibleItems.value));
20123
- const computedItems = computed(() => props.items.slice(first.value, last.value));
20124
- const paddingTop = computed(() => calculateOffset(first.value));
20125
- const paddingBottom = computed(() => calculateOffset(props.items.length) - calculateOffset(last.value));
20126
- const {
20127
- dimensionStyles
20128
- } = useDimension(props);
20129
- onMounted(() => {
20130
- if (!itemHeight.value) {
20131
- // If itemHeight prop is not set, then calculate an estimated height from the average of inital items
20132
- itemHeight.value = sizes.slice(first.value, last.value).reduce((curr, height) => curr + height, 0) / visibleItems.value;
20133
- }
20134
- });
20135
- watch(() => props.items.length, () => {
20136
- sizes = createRange(props.items.length).map(() => itemHeight.value);
20137
- sizeMap.forEach((height, item) => {
20138
- const index = props.items.indexOf(item);
20139
- if (index === -1) {
20140
- sizeMap.delete(item);
20141
- } else {
20142
- sizes[index] = height;
20143
- }
20144
- });
20145
- });
20146
- useRender(() => createVNode("div", {
20147
- "ref": rootEl,
20148
- "class": "v-virtual-scroll",
20149
- "onScroll": handleScroll,
20150
- "style": dimensionStyles.value
20151
- }, [createVNode("div", {
20152
- "class": "v-virtual-scroll__container",
20153
- "style": {
20154
- paddingTop: convertToUnit(paddingTop.value),
20155
- paddingBottom: convertToUnit(paddingBottom.value)
20156
- }
20157
- }, [computedItems.value.map((item, index) => createVNode(VVirtualScrollItem, {
20158
- "key": index,
20159
- "dynamicHeight": !props.itemHeight,
20160
- "onUpdate:height": height => handleItemResize(index + first.value, height)
20161
- }, {
20162
- default: () => [slots.default?.({
20163
- item,
20164
- index: index + first.value
20165
- })]
20166
- }))])]));
20167
- return {
20168
- scrollToIndex
20169
- };
20170
- }
20171
- });
20172
-
20173
20765
  var components = /*#__PURE__*/Object.freeze({
20174
20766
  __proto__: null,
20175
20767
  VAlert: VAlert,
@@ -20239,6 +20831,7 @@ var components = /*#__PURE__*/Object.freeze({
20239
20831
  VHover: VHover,
20240
20832
  VIcon: VIcon,
20241
20833
  VImg: VImg,
20834
+ VInfiniteScroll: VInfiniteScroll,
20242
20835
  VInput: VInput,
20243
20836
  VItem: VItem,
20244
20837
  VItemGroup: VItemGroup,
@@ -20441,6 +21034,418 @@ var directives = /*#__PURE__*/Object.freeze({
20441
21034
  Touch: Touch
20442
21035
  });
20443
21036
 
21037
+ // Utilities
21038
+
21039
+ // Types
21040
+
21041
+ function getWeekArray(date) {
21042
+ let currentWeek = [];
21043
+ const weeks = [];
21044
+ const firstDayOfMonth = startOfMonth(date);
21045
+ const lastDayOfMonth = endOfMonth(date);
21046
+ for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
21047
+ currentWeek.push(null);
21048
+ }
21049
+ for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
21050
+ const day = new Date(date.getFullYear(), date.getMonth(), i);
21051
+
21052
+ // Add the day to the current week
21053
+ currentWeek.push(day);
21054
+
21055
+ // If the current week has 7 days, add it to the weeks array and start a new week
21056
+ if (currentWeek.length === 7) {
21057
+ weeks.push(currentWeek);
21058
+ currentWeek = [];
21059
+ }
21060
+ }
21061
+ for (let i = currentWeek.length; i < 7; i++) {
21062
+ currentWeek.push(null);
21063
+ }
21064
+ weeks.push(currentWeek);
21065
+ return weeks;
21066
+ }
21067
+ function startOfMonth(date) {
21068
+ return new Date(date.getFullYear(), date.getMonth(), 1);
21069
+ }
21070
+ function endOfMonth(date) {
21071
+ return new Date(date.getFullYear(), date.getMonth() + 1, 0);
21072
+ }
21073
+ function date(value) {
21074
+ if (value == null) return null;
21075
+ if (value instanceof Date) return value;
21076
+ if (typeof value === 'string') {
21077
+ const parsed = Date.parse(value);
21078
+ if (!isNaN(parsed)) return new Date(parsed);
21079
+ }
21080
+ return null;
21081
+ }
21082
+ const firstDay = {
21083
+ '001': 1,
21084
+ AD: 1,
21085
+ AE: 6,
21086
+ AF: 6,
21087
+ AG: 0,
21088
+ AI: 1,
21089
+ AL: 1,
21090
+ AM: 1,
21091
+ AN: 1,
21092
+ AR: 1,
21093
+ AS: 0,
21094
+ AT: 1,
21095
+ AU: 0,
21096
+ AX: 1,
21097
+ AZ: 1,
21098
+ BA: 1,
21099
+ BD: 0,
21100
+ BE: 1,
21101
+ BG: 1,
21102
+ BH: 6,
21103
+ BM: 1,
21104
+ BN: 1,
21105
+ BR: 0,
21106
+ BS: 0,
21107
+ BT: 0,
21108
+ BW: 0,
21109
+ BY: 1,
21110
+ BZ: 0,
21111
+ CA: 0,
21112
+ CH: 1,
21113
+ CL: 1,
21114
+ CM: 1,
21115
+ CN: 0,
21116
+ CO: 0,
21117
+ CR: 1,
21118
+ CY: 1,
21119
+ CZ: 1,
21120
+ DE: 1,
21121
+ DJ: 6,
21122
+ DK: 1,
21123
+ DM: 0,
21124
+ DO: 0,
21125
+ DZ: 6,
21126
+ EC: 1,
21127
+ EE: 1,
21128
+ EG: 6,
21129
+ ES: 1,
21130
+ ET: 0,
21131
+ FI: 1,
21132
+ FJ: 1,
21133
+ FO: 1,
21134
+ FR: 1,
21135
+ GB: 1,
21136
+ 'GB-alt-variant': 0,
21137
+ GE: 1,
21138
+ GF: 1,
21139
+ GP: 1,
21140
+ GR: 1,
21141
+ GT: 0,
21142
+ GU: 0,
21143
+ HK: 0,
21144
+ HN: 0,
21145
+ HR: 1,
21146
+ HU: 1,
21147
+ ID: 0,
21148
+ IE: 1,
21149
+ IL: 0,
21150
+ IN: 0,
21151
+ IQ: 6,
21152
+ IR: 6,
21153
+ IS: 1,
21154
+ IT: 1,
21155
+ JM: 0,
21156
+ JO: 6,
21157
+ JP: 0,
21158
+ KE: 0,
21159
+ KG: 1,
21160
+ KH: 0,
21161
+ KR: 0,
21162
+ KW: 6,
21163
+ KZ: 1,
21164
+ LA: 0,
21165
+ LB: 1,
21166
+ LI: 1,
21167
+ LK: 1,
21168
+ LT: 1,
21169
+ LU: 1,
21170
+ LV: 1,
21171
+ LY: 6,
21172
+ MC: 1,
21173
+ MD: 1,
21174
+ ME: 1,
21175
+ MH: 0,
21176
+ MK: 1,
21177
+ MM: 0,
21178
+ MN: 1,
21179
+ MO: 0,
21180
+ MQ: 1,
21181
+ MT: 0,
21182
+ MV: 5,
21183
+ MX: 0,
21184
+ MY: 1,
21185
+ MZ: 0,
21186
+ NI: 0,
21187
+ NL: 1,
21188
+ NO: 1,
21189
+ NP: 0,
21190
+ NZ: 1,
21191
+ OM: 6,
21192
+ PA: 0,
21193
+ PE: 0,
21194
+ PH: 0,
21195
+ PK: 0,
21196
+ PL: 1,
21197
+ PR: 0,
21198
+ PT: 0,
21199
+ PY: 0,
21200
+ QA: 6,
21201
+ RE: 1,
21202
+ RO: 1,
21203
+ RS: 1,
21204
+ RU: 1,
21205
+ SA: 0,
21206
+ SD: 6,
21207
+ SE: 1,
21208
+ SG: 0,
21209
+ SI: 1,
21210
+ SK: 1,
21211
+ SM: 1,
21212
+ SV: 0,
21213
+ SY: 6,
21214
+ TH: 0,
21215
+ TJ: 1,
21216
+ TM: 1,
21217
+ TR: 1,
21218
+ TT: 0,
21219
+ TW: 0,
21220
+ UA: 1,
21221
+ UM: 0,
21222
+ US: 0,
21223
+ UY: 1,
21224
+ UZ: 1,
21225
+ VA: 1,
21226
+ VE: 0,
21227
+ VI: 0,
21228
+ VN: 1,
21229
+ WS: 0,
21230
+ XK: 1,
21231
+ YE: 0,
21232
+ ZA: 0,
21233
+ ZW: 0
21234
+ };
21235
+ const sundayJanuarySecond2000 = new Date(2000, 0, 2);
21236
+ function getWeekdays(locale) {
21237
+ const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
21238
+ return createRange(7).map(i => {
21239
+ const weekday = new Date(sundayJanuarySecond2000);
21240
+ weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
21241
+ return new Intl.DateTimeFormat(locale, {
21242
+ weekday: 'long'
21243
+ }).format(weekday);
21244
+ });
21245
+ }
21246
+ function format(value, formatString, locale) {
21247
+ const date = new Date(value);
21248
+ let options = {};
21249
+ switch (formatString) {
21250
+ case 'fullDateWithWeekday':
21251
+ options = {
21252
+ weekday: 'long',
21253
+ day: 'numeric',
21254
+ month: 'long',
21255
+ year: 'numeric'
21256
+ };
21257
+ break;
21258
+ case 'normalDateWithWeekday':
21259
+ options = {
21260
+ weekday: 'short',
21261
+ day: 'numeric',
21262
+ month: 'short',
21263
+ year: 'numeric'
21264
+ };
21265
+ break;
21266
+ case 'keyboardDate':
21267
+ options = {};
21268
+ break;
21269
+ case 'monthAndDate':
21270
+ options = {
21271
+ month: 'long',
21272
+ day: 'numeric'
21273
+ };
21274
+ break;
21275
+ case 'monthAndYear':
21276
+ options = {
21277
+ month: 'long',
21278
+ year: 'numeric'
21279
+ };
21280
+ break;
21281
+ default:
21282
+ options = {
21283
+ timeZone: 'UTC',
21284
+ timeZoneName: 'short'
21285
+ };
21286
+ }
21287
+ return new Intl.DateTimeFormat(locale, options).format(date);
21288
+ }
21289
+ function addDays(date, amount) {
21290
+ const d = new Date(date);
21291
+ d.setDate(d.getDate() + amount);
21292
+ return d;
21293
+ }
21294
+ function addMonths(date, amount) {
21295
+ const d = new Date(date);
21296
+ d.setMonth(d.getMonth() + amount);
21297
+ return d;
21298
+ }
21299
+ function getYear(date) {
21300
+ return date.getFullYear();
21301
+ }
21302
+ function getMonth(date) {
21303
+ return date.getMonth();
21304
+ }
21305
+ function startOfYear(date) {
21306
+ return new Date(date.getFullYear(), 0, 1);
21307
+ }
21308
+ function endOfYear(date) {
21309
+ return new Date(date.getFullYear(), 11, 31);
21310
+ }
21311
+ function getMondayOfFirstWeekOfYear(year) {
21312
+ return new Date(year, 0, 1);
21313
+ }
21314
+
21315
+ // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
21316
+ function getWeek(date) {
21317
+ let year = date.getFullYear();
21318
+ let d1w1 = getMondayOfFirstWeekOfYear(year);
21319
+ if (date < d1w1) {
21320
+ year = year - 1;
21321
+ d1w1 = getMondayOfFirstWeekOfYear(year);
21322
+ } else {
21323
+ const tv = getMondayOfFirstWeekOfYear(year + 1);
21324
+ if (date >= tv) {
21325
+ year = year + 1;
21326
+ d1w1 = tv;
21327
+ }
21328
+ }
21329
+ const diffTime = Math.abs(date.getTime() - d1w1.getTime());
21330
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
21331
+ return Math.floor(diffDays / 7) + 1;
21332
+ }
21333
+ function isWithinRange(date, range) {
21334
+ return isAfter(date, range[0]) && isBefore(date, range[1]);
21335
+ }
21336
+ function isValid(date) {
21337
+ const d = new Date(date);
21338
+ return d instanceof Date && !isNaN(d.getTime());
21339
+ }
21340
+ function isAfter(date, comparing) {
21341
+ return date.getTime() > comparing.getTime();
21342
+ }
21343
+ function isBefore(date, comparing) {
21344
+ return date.getTime() < comparing.getTime();
21345
+ }
21346
+ function isEqual(date, comparing) {
21347
+ return date.getTime() === comparing.getTime();
21348
+ }
21349
+ function isSameDay(date, comparing) {
21350
+ return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21351
+ }
21352
+ function isSameMonth(date, comparing) {
21353
+ return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21354
+ }
21355
+ function getDiff(date, comparing, unit) {
21356
+ const d = new Date(date);
21357
+ const c = new Date(comparing);
21358
+ if (unit === 'month') {
21359
+ return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
21360
+ }
21361
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
21362
+ }
21363
+ function setYear(date, year) {
21364
+ const d = new Date(date);
21365
+ d.setFullYear(year);
21366
+ return d;
21367
+ }
21368
+ class VuetifyDateAdapter {
21369
+ constructor() {
21370
+ let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
21371
+ this.locale = locale;
21372
+ }
21373
+ date(value) {
21374
+ return date(value);
21375
+ }
21376
+ addDays(date, amount) {
21377
+ return addDays(date, amount);
21378
+ }
21379
+ addMonths(date, amount) {
21380
+ return addMonths(date, amount);
21381
+ }
21382
+ getWeekArray(date) {
21383
+ return getWeekArray(date);
21384
+ }
21385
+ startOfMonth(date) {
21386
+ return startOfMonth(date);
21387
+ }
21388
+ endOfMonth(date) {
21389
+ return endOfMonth(date);
21390
+ }
21391
+ format(date, formatString) {
21392
+ return format(date, formatString, this.locale);
21393
+ }
21394
+ isEqual(date, comparing) {
21395
+ return isEqual(date, comparing);
21396
+ }
21397
+ isValid(date) {
21398
+ return isValid(date);
21399
+ }
21400
+ isWithinRange(date, range) {
21401
+ return isWithinRange(date, range);
21402
+ }
21403
+ isAfter(date, comparing) {
21404
+ return isAfter(date, comparing);
21405
+ }
21406
+ isSameDay(date, comparing) {
21407
+ return isSameDay(date, comparing);
21408
+ }
21409
+ isSameMonth(date, comparing) {
21410
+ return isSameMonth(date, comparing);
21411
+ }
21412
+ setYear(date, year) {
21413
+ return setYear(date, year);
21414
+ }
21415
+ getDiff(date, comparing, unit) {
21416
+ return getDiff(date, comparing, unit);
21417
+ }
21418
+ getWeek(date) {
21419
+ return getWeek(date);
21420
+ }
21421
+ getWeekdays() {
21422
+ return getWeekdays(this.locale);
21423
+ }
21424
+ getYear(date) {
21425
+ return getYear(date);
21426
+ }
21427
+ getMonth(date) {
21428
+ return getMonth(date);
21429
+ }
21430
+ startOfYear(date) {
21431
+ return startOfYear(date);
21432
+ }
21433
+ endOfYear(date) {
21434
+ return endOfYear(date);
21435
+ }
21436
+ }
21437
+
21438
+ // Composables
21439
+
21440
+ // Types
21441
+
21442
+ const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
21443
+ function createDate(options) {
21444
+ return options ?? {
21445
+ adapter: VuetifyDateAdapter
21446
+ };
21447
+ }
21448
+
20444
21449
  // Composables
20445
21450
  function createVuetify$1() {
20446
21451
  let vuetify = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -20459,6 +21464,7 @@ function createVuetify$1() {
20459
21464
  const theme = createTheme(options.theme);
20460
21465
  const icons = createIcons(options.icons);
20461
21466
  const locale = createLocale(options.locale);
21467
+ const date = createDate(options.date);
20462
21468
  const install = app => {
20463
21469
  for (const key in directives) {
20464
21470
  app.directive(key, directives[key]);
@@ -20479,6 +21485,7 @@ function createVuetify$1() {
20479
21485
  app.provide(ThemeSymbol, theme);
20480
21486
  app.provide(IconSymbol, icons);
20481
21487
  app.provide(LocaleSymbol, locale);
21488
+ app.provide(DateAdapterSymbol, date);
20482
21489
  if (IN_BROWSER && options.ssr) {
20483
21490
  if (app.$nuxt) {
20484
21491
  app.$nuxt.hook('app:suspense:resolve', () => {
@@ -20506,7 +21513,8 @@ function createVuetify$1() {
20506
21513
  display: inject.call(this, DisplaySymbol),
20507
21514
  theme: inject.call(this, ThemeSymbol),
20508
21515
  icons: inject.call(this, IconSymbol),
20509
- locale: inject.call(this, LocaleSymbol)
21516
+ locale: inject.call(this, LocaleSymbol),
21517
+ date: inject.call(this, DateAdapterSymbol)
20510
21518
  });
20511
21519
  }
20512
21520
  }
@@ -20519,10 +21527,11 @@ function createVuetify$1() {
20519
21527
  display,
20520
21528
  theme,
20521
21529
  icons,
20522
- locale
21530
+ locale,
21531
+ date
20523
21532
  };
20524
21533
  }
20525
- const version$1 = "3.1.15";
21534
+ const version$1 = "3.2.0";
20526
21535
  createVuetify$1.version = version$1;
20527
21536
 
20528
21537
  // Vue's inject() can only be used in setup
@@ -20534,7 +21543,7 @@ function inject(key) {
20534
21543
  }
20535
21544
  }
20536
21545
 
20537
- const version = "3.1.15";
21546
+ const version = "3.2.0";
20538
21547
 
20539
21548
  const createVuetify = function () {
20540
21549
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -20545,5 +21554,5 @@ const createVuetify = function () {
20545
21554
  });
20546
21555
  };
20547
21556
 
20548
- export { components, createVuetify, directives, useDisplay, useLayout, useLocale, useRtl, useTheme, version };
21557
+ export { components, createVuetify, directives, useDefaults, useDisplay, useLayout, useLocale, useRtl, useTheme, version };
20549
21558
  //# sourceMappingURL=vuetify-labs.esm.js.map