@vuetify/nightly 4.0.0-dev-20230422.0 → 4.0.0-dev-20230427.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/CHANGELOG.md +11 -2
  2. package/dist/_component-variables-labs.sass +1 -0
  3. package/dist/json/attributes.json +274 -198
  4. package/dist/json/importMap-labs.json +4 -0
  5. package/dist/json/importMap.json +60 -60
  6. package/dist/json/tags.json +25 -1
  7. package/dist/json/web-types.json +624 -344
  8. package/dist/vuetify-labs.css +110 -86
  9. package/dist/vuetify-labs.d.ts +5976 -8072
  10. package/dist/vuetify-labs.esm.js +1499 -1093
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +1498 -1092
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.css +21 -22
  15. package/dist/vuetify.d.ts +5999 -7524
  16. package/dist/vuetify.esm.js +1255 -1066
  17. package/dist/vuetify.esm.js.map +1 -1
  18. package/dist/vuetify.js +1254 -1065
  19. package/dist/vuetify.js.map +1 -1
  20. package/dist/vuetify.min.css +2 -2
  21. package/dist/vuetify.min.js +744 -739
  22. package/dist/vuetify.min.js.map +1 -1
  23. package/lib/blueprints/index.d.ts +1 -1
  24. package/lib/blueprints/md1.d.ts +1 -1
  25. package/lib/blueprints/md2.d.ts +1 -1
  26. package/lib/blueprints/md3.d.ts +1 -1
  27. package/lib/components/VAlert/VAlert.mjs +6 -4
  28. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  29. package/lib/components/VAlert/index.d.ts +57 -55
  30. package/lib/components/VApp/VApp.mjs +4 -2
  31. package/lib/components/VApp/VApp.mjs.map +1 -1
  32. package/lib/components/VApp/index.d.ts +22 -13
  33. package/lib/components/VAppBar/VAppBar.mjs +3 -3
  34. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  35. package/lib/components/VAppBar/VAppBarNavIcon.mjs +7 -4
  36. package/lib/components/VAppBar/VAppBarNavIcon.mjs.map +1 -1
  37. package/lib/components/VAppBar/index.d.ts +87 -92
  38. package/lib/components/VAutocomplete/VAutocomplete.mjs +2 -1
  39. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  40. package/lib/components/VAutocomplete/index.d.ts +225 -403
  41. package/lib/components/VAvatar/VAvatar.mjs +4 -2
  42. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  43. package/lib/components/VAvatar/index.d.ts +23 -14
  44. package/lib/components/VBadge/VBadge.mjs +6 -5
  45. package/lib/components/VBadge/VBadge.mjs.map +1 -1
  46. package/lib/components/VBadge/index.d.ts +27 -22
  47. package/lib/components/VBanner/VBanner.mjs +6 -4
  48. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  49. package/lib/components/VBanner/VBannerActions.mjs +5 -2
  50. package/lib/components/VBanner/VBannerActions.mjs.map +1 -1
  51. package/lib/components/VBanner/index.d.ts +92 -66
  52. package/lib/components/VBottomNavigation/VBottomNavigation.mjs +4 -2
  53. package/lib/components/VBottomNavigation/VBottomNavigation.mjs.map +1 -1
  54. package/lib/components/VBottomNavigation/index.d.ts +22 -13
  55. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +35 -18
  56. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  57. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs +6 -3
  58. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs.map +1 -1
  59. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs +4 -2
  60. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs.map +1 -1
  61. package/lib/components/VBreadcrumbs/index.d.ts +134 -93
  62. package/lib/components/VBtn/VBtn.mjs +5 -3
  63. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  64. package/lib/components/VBtn/index.d.ts +33 -36
  65. package/lib/components/VBtnGroup/VBtnGroup.mjs +4 -1
  66. package/lib/components/VBtnGroup/VBtnGroup.mjs.map +1 -1
  67. package/lib/components/VBtnGroup/index.d.ts +22 -13
  68. package/lib/components/VBtnToggle/VBtnToggle.mjs +4 -2
  69. package/lib/components/VBtnToggle/VBtnToggle.mjs.map +1 -1
  70. package/lib/components/VBtnToggle/index.d.ts +30 -21
  71. package/lib/components/VCard/VCard.mjs +5 -3
  72. package/lib/components/VCard/VCard.mjs.map +1 -1
  73. package/lib/components/VCard/VCardActions.mjs +7 -4
  74. package/lib/components/VCard/VCardActions.mjs.map +1 -1
  75. package/lib/components/VCard/VCardItem.mjs +5 -2
  76. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  77. package/lib/components/VCard/index.d.ts +250 -141
  78. package/lib/components/VCarousel/VCarousel.mjs +3 -3
  79. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  80. package/lib/components/VCarousel/VCarouselItem.mjs +6 -3
  81. package/lib/components/VCarousel/VCarouselItem.mjs.map +1 -1
  82. package/lib/components/VCarousel/index.d.ts +78 -141
  83. package/lib/components/VCheckbox/VCheckbox.mjs +3 -2
  84. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  85. package/lib/components/VCheckbox/VCheckboxBtn.mjs +2 -1
  86. package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
  87. package/lib/components/VCheckbox/index.d.ts +69 -103
  88. package/lib/components/VChip/VChip.mjs +7 -8
  89. package/lib/components/VChip/VChip.mjs.map +1 -1
  90. package/lib/components/VChip/index.d.ts +27 -30
  91. package/lib/components/VChipGroup/VChipGroup.mjs +4 -1
  92. package/lib/components/VChipGroup/VChipGroup.mjs.map +1 -1
  93. package/lib/components/VChipGroup/index.d.ts +22 -13
  94. package/lib/components/VCode/index.d.ts +30 -17
  95. package/lib/components/VColorPicker/VColorPicker.mjs +3 -3
  96. package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
  97. package/lib/components/VColorPicker/VColorPickerCanvas.mjs +5 -2
  98. package/lib/components/VColorPicker/VColorPickerCanvas.mjs.map +1 -1
  99. package/lib/components/VColorPicker/VColorPickerEdit.mjs +6 -3
  100. package/lib/components/VColorPicker/VColorPickerEdit.mjs.map +1 -1
  101. package/lib/components/VColorPicker/VColorPickerPreview.mjs +6 -3
  102. package/lib/components/VColorPicker/VColorPickerPreview.mjs.map +1 -1
  103. package/lib/components/VColorPicker/VColorPickerSwatches.mjs +7 -5
  104. package/lib/components/VColorPicker/VColorPickerSwatches.mjs.map +1 -1
  105. package/lib/components/VColorPicker/index.d.ts +34 -1
  106. package/lib/components/VCombobox/VCombobox.mjs +2 -1
  107. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  108. package/lib/components/VCombobox/index.d.ts +225 -403
  109. package/lib/components/VCounter/VCounter.mjs +4 -1
  110. package/lib/components/VCounter/VCounter.mjs.map +1 -1
  111. package/lib/components/VCounter/index.d.ts +22 -145
  112. package/lib/components/VDefaultsProvider/index.d.ts +0 -12
  113. package/lib/components/VDialog/VDialog.mjs +4 -3
  114. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  115. package/lib/components/VDialog/index.d.ts +104 -282
  116. package/lib/components/VDivider/VDivider.mjs +4 -2
  117. package/lib/components/VDivider/VDivider.mjs.map +1 -1
  118. package/lib/components/VDivider/index.d.ts +22 -13
  119. package/lib/components/VExpansionPanel/VExpansionPanel.mjs +4 -2
  120. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  121. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs +4 -1
  122. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs.map +1 -1
  123. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +4 -2
  124. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  125. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +4 -1
  126. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  127. package/lib/components/VExpansionPanel/index.d.ts +109 -81
  128. package/lib/components/VField/VField.css +0 -1
  129. package/lib/components/VField/VField.mjs +9 -6
  130. package/lib/components/VField/VField.mjs.map +1 -1
  131. package/lib/components/VField/VField.sass +0 -1
  132. package/lib/components/VField/VFieldLabel.mjs +6 -3
  133. package/lib/components/VField/VFieldLabel.mjs.map +1 -1
  134. package/lib/components/VField/index.d.ts +119 -70
  135. package/lib/components/VFileInput/VFileInput.mjs +2 -1
  136. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  137. package/lib/components/VFileInput/index.d.ts +99 -150
  138. package/lib/components/VFooter/VFooter.mjs +4 -2
  139. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  140. package/lib/components/VFooter/index.d.ts +22 -13
  141. package/lib/components/VForm/VForm.mjs +5 -2
  142. package/lib/components/VForm/VForm.mjs.map +1 -1
  143. package/lib/components/VForm/index.d.ts +30 -17
  144. package/lib/components/VGrid/VCol.mjs +4 -1
  145. package/lib/components/VGrid/VCol.mjs.map +1 -1
  146. package/lib/components/VGrid/VContainer.mjs +4 -1
  147. package/lib/components/VGrid/VContainer.mjs.map +1 -1
  148. package/lib/components/VGrid/VRow.mjs +4 -1
  149. package/lib/components/VGrid/VRow.mjs.map +1 -1
  150. package/lib/components/VGrid/index.d.ts +104 -60
  151. package/lib/components/VHover/index.d.ts +20 -44
  152. package/lib/components/VIcon/VIcon.mjs +4 -2
  153. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  154. package/lib/components/VIcon/index.d.ts +23 -26
  155. package/lib/components/VImg/VImg.mjs +5 -3
  156. package/lib/components/VImg/VImg.mjs.map +1 -1
  157. package/lib/components/VImg/index.d.ts +26 -29
  158. package/lib/components/VInput/VInput.mjs +4 -1
  159. package/lib/components/VInput/VInput.mjs.map +1 -1
  160. package/lib/components/VInput/index.d.ts +31 -34
  161. package/lib/components/VItemGroup/VItemGroup.mjs +4 -1
  162. package/lib/components/VItemGroup/VItemGroup.mjs.map +1 -1
  163. package/lib/components/VItemGroup/index.d.ts +30 -33
  164. package/lib/components/VKbd/index.d.ts +30 -17
  165. package/lib/components/VLabel/VLabel.mjs +4 -1
  166. package/lib/components/VLabel/VLabel.mjs.map +1 -1
  167. package/lib/components/VLabel/index.d.ts +22 -13
  168. package/lib/components/VLayout/VLayout.mjs +8 -4
  169. package/lib/components/VLayout/VLayout.mjs.map +1 -1
  170. package/lib/components/VLayout/VLayoutItem.mjs +4 -2
  171. package/lib/components/VLayout/VLayoutItem.mjs.map +1 -1
  172. package/lib/components/VLayout/index.d.ts +44 -26
  173. package/lib/components/VLazy/VLazy.mjs +4 -2
  174. package/lib/components/VLazy/VLazy.mjs.map +1 -1
  175. package/lib/components/VLazy/index.d.ts +22 -13
  176. package/lib/components/VList/VList.mjs +7 -24
  177. package/lib/components/VList/VList.mjs.map +1 -1
  178. package/lib/components/VList/VListChildren.mjs.map +1 -1
  179. package/lib/components/VList/VListGroup.mjs +5 -2
  180. package/lib/components/VList/VListGroup.mjs.map +1 -1
  181. package/lib/components/VList/VListItem.mjs +4 -2
  182. package/lib/components/VList/VListItem.mjs.map +1 -1
  183. package/lib/components/VList/VListItemAction.mjs +4 -1
  184. package/lib/components/VList/VListItemAction.mjs.map +1 -1
  185. package/lib/components/VList/VListItemMedia.mjs +4 -1
  186. package/lib/components/VList/VListItemMedia.mjs.map +1 -1
  187. package/lib/components/VList/VListSubheader.mjs +5 -3
  188. package/lib/components/VList/VListSubheader.mjs.map +1 -1
  189. package/lib/components/VList/index.d.ts +932 -826
  190. package/lib/components/VLocaleProvider/VLocaleProvider.mjs +5 -2
  191. package/lib/components/VLocaleProvider/VLocaleProvider.mjs.map +1 -1
  192. package/lib/components/VLocaleProvider/index.d.ts +30 -17
  193. package/lib/components/VMain/VMain.mjs +4 -2
  194. package/lib/components/VMain/VMain.mjs.map +1 -1
  195. package/lib/components/VMain/index.d.ts +30 -17
  196. package/lib/components/VMenu/VMenu.mjs +2 -1
  197. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  198. package/lib/components/VMenu/index.d.ts +104 -282
  199. package/lib/components/VMessages/VMessages.mjs +4 -2
  200. package/lib/components/VMessages/VMessages.mjs.map +1 -1
  201. package/lib/components/VMessages/index.d.ts +22 -145
  202. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +4 -2
  203. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  204. package/lib/components/VNavigationDrawer/index.d.ts +26 -29
  205. package/lib/components/VNoSsr/VNoSsr.mjs.map +1 -1
  206. package/lib/components/VNoSsr/index.d.ts +3 -13
  207. package/lib/components/VOverlay/VOverlay.mjs +5 -3
  208. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  209. package/lib/components/VOverlay/index.d.ts +38 -45
  210. package/lib/components/VPagination/VPagination.mjs +4 -1
  211. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  212. package/lib/components/VPagination/index.d.ts +23 -30
  213. package/lib/components/VParallax/VParallax.mjs +5 -2
  214. package/lib/components/VParallax/VParallax.mjs.map +1 -1
  215. package/lib/components/VParallax/index.d.ts +34 -33
  216. package/lib/components/VProgressCircular/VProgressCircular.mjs +4 -2
  217. package/lib/components/VProgressCircular/VProgressCircular.mjs.map +1 -1
  218. package/lib/components/VProgressCircular/index.d.ts +22 -13
  219. package/lib/components/VProgressLinear/VProgressLinear.mjs +6 -4
  220. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  221. package/lib/components/VProgressLinear/index.d.ts +42 -45
  222. package/lib/components/VRadio/VRadio.mjs +2 -1
  223. package/lib/components/VRadio/VRadio.mjs.map +1 -1
  224. package/lib/components/VRadio/index.d.ts +27 -38
  225. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -1
  226. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  227. package/lib/components/VRadioGroup/index.d.ts +39 -62
  228. package/lib/components/VRangeSlider/VRangeSlider.mjs +2 -1
  229. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  230. package/lib/components/VRangeSlider/index.d.ts +27 -38
  231. package/lib/components/VRating/VRating.mjs +4 -1
  232. package/lib/components/VRating/VRating.mjs.map +1 -1
  233. package/lib/components/VRating/index.d.ts +23 -18
  234. package/lib/components/VResponsive/VResponsive.mjs +4 -2
  235. package/lib/components/VResponsive/VResponsive.mjs.map +1 -1
  236. package/lib/components/VResponsive/index.d.ts +43 -31
  237. package/lib/components/VSelect/VSelect.mjs +2 -1
  238. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  239. package/lib/components/VSelect/index.d.ts +194 -552
  240. package/lib/components/VSelectionControl/VSelectionControl.mjs +6 -2
  241. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  242. package/lib/components/VSelectionControl/index.d.ts +76 -46
  243. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +4 -1
  244. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  245. package/lib/components/VSelectionControlGroup/index.d.ts +23 -14
  246. package/lib/components/VSheet/VSheet.mjs +4 -2
  247. package/lib/components/VSheet/VSheet.mjs.map +1 -1
  248. package/lib/components/VSheet/index.d.ts +22 -13
  249. package/lib/components/VSlideGroup/VSlideGroup.mjs +6 -3
  250. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  251. package/lib/components/VSlideGroup/index.d.ts +59 -90
  252. package/lib/components/VSlider/VSlider.mjs +2 -1
  253. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  254. package/lib/components/VSlider/VSliderThumb.mjs +6 -4
  255. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  256. package/lib/components/VSlider/VSliderTrack.mjs +6 -4
  257. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  258. package/lib/components/VSlider/index.d.ts +27 -38
  259. package/lib/components/VSnackbar/VSnackbar.mjs +2 -1
  260. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  261. package/lib/components/VSnackbar/index.d.ts +92 -142
  262. package/lib/components/VSwitch/VSwitch.mjs +2 -1
  263. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  264. package/lib/components/VSwitch/index.d.ts +39 -66
  265. package/lib/components/VSystemBar/VSystemBar.mjs +4 -2
  266. package/lib/components/VSystemBar/VSystemBar.mjs.map +1 -1
  267. package/lib/components/VSystemBar/index.d.ts +22 -13
  268. package/lib/components/VTable/VTable.mjs +4 -1
  269. package/lib/components/VTable/VTable.mjs.map +1 -1
  270. package/lib/components/VTable/index.d.ts +26 -29
  271. package/lib/components/VTabs/VTab.mjs +2 -2
  272. package/lib/components/VTabs/VTab.mjs.map +1 -1
  273. package/lib/components/VTabs/VTabs.mjs +2 -2
  274. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  275. package/lib/components/VTabs/index.d.ts +45 -27
  276. package/lib/components/VTextField/VTextField.mjs +2 -1
  277. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  278. package/lib/components/VTextField/index.d.ts +208 -269
  279. package/lib/components/VTextarea/VTextarea.mjs +2 -1
  280. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  281. package/lib/components/VTextarea/index.d.ts +79 -122
  282. package/lib/components/VThemeProvider/VThemeProvider.mjs +6 -3
  283. package/lib/components/VThemeProvider/VThemeProvider.mjs.map +1 -1
  284. package/lib/components/VThemeProvider/index.d.ts +22 -13
  285. package/lib/components/VTimeline/VTimeline.mjs +5 -3
  286. package/lib/components/VTimeline/VTimeline.mjs.map +1 -1
  287. package/lib/components/VTimeline/VTimelineDivider.mjs +4 -1
  288. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  289. package/lib/components/VTimeline/VTimelineItem.mjs +8 -6
  290. package/lib/components/VTimeline/VTimelineItem.mjs.map +1 -1
  291. package/lib/components/VTimeline/index.d.ts +67 -57
  292. package/lib/components/VToolbar/VToolbar.mjs +4 -2
  293. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  294. package/lib/components/VToolbar/VToolbarItems.mjs +9 -4
  295. package/lib/components/VToolbar/VToolbarItems.mjs.map +1 -1
  296. package/lib/components/VToolbar/VToolbarTitle.mjs +5 -2
  297. package/lib/components/VToolbar/VToolbarTitle.mjs.map +1 -1
  298. package/lib/components/VToolbar/index.d.ts +74 -71
  299. package/lib/components/VTooltip/VTooltip.mjs +2 -1
  300. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  301. package/lib/components/VTooltip/index.d.ts +104 -150
  302. package/lib/components/VValidation/index.d.ts +0 -12
  303. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +21 -23
  304. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  305. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs +5 -2
  306. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -1
  307. package/lib/components/VVirtualScroll/index.d.ts +70 -30
  308. package/lib/components/VWindow/VWindow.mjs +4 -1
  309. package/lib/components/VWindow/VWindow.mjs.map +1 -1
  310. package/lib/components/VWindow/VWindowItem.mjs +4 -1
  311. package/lib/components/VWindow/VWindowItem.mjs.map +1 -1
  312. package/lib/components/VWindow/index.d.ts +61 -79
  313. package/lib/components/index.d.ts +5229 -6754
  314. package/lib/components/transitions/index.d.ts +0 -192
  315. package/lib/composables/component.mjs +11 -0
  316. package/lib/composables/component.mjs.map +1 -0
  317. package/lib/composables/defaults.mjs +51 -5
  318. package/lib/composables/defaults.mjs.map +1 -1
  319. package/lib/composables/icons.mjs +15 -4
  320. package/lib/composables/icons.mjs.map +1 -1
  321. package/lib/composables/index.mjs +1 -1
  322. package/lib/composables/index.mjs.map +1 -1
  323. package/lib/composables/intersectionObserver.mjs +2 -2
  324. package/lib/composables/intersectionObserver.mjs.map +1 -1
  325. package/lib/composables/loader.mjs.map +1 -1
  326. package/lib/entry-bundler.mjs +1 -1
  327. package/lib/framework.mjs +2 -2
  328. package/lib/framework.mjs.map +1 -1
  329. package/lib/iconsets/fa-svg.d.ts +1 -1
  330. package/lib/iconsets/fa.d.ts +1 -1
  331. package/lib/iconsets/fa4.d.ts +1 -1
  332. package/lib/iconsets/md.d.ts +1 -1
  333. package/lib/iconsets/mdi-svg.d.ts +1 -1
  334. package/lib/iconsets/mdi.d.ts +1 -1
  335. package/lib/index.d.ts +24 -24
  336. package/lib/labs/VDataTable/VDataTable.mjs +1 -1
  337. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  338. package/lib/labs/VDataTable/VDataTableHeaders.mjs +34 -20
  339. package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
  340. package/lib/labs/VDataTable/VDataTableRow.mjs +2 -4
  341. package/lib/labs/VDataTable/VDataTableRow.mjs.map +1 -1
  342. package/lib/labs/VDataTable/VDataTableRows.mjs +2 -2
  343. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  344. package/lib/labs/VDataTable/VDataTableServer.mjs +1 -1
  345. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  346. package/lib/labs/VDataTable/index.d.ts +61 -933
  347. package/lib/labs/VInfiniteScroll/VInfiniteScroll.css +26 -0
  348. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs +215 -0
  349. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -0
  350. package/lib/labs/VInfiniteScroll/VInfiniteScroll.sass +25 -0
  351. package/lib/labs/VInfiniteScroll/_variables.scss +3 -0
  352. package/lib/labs/VInfiniteScroll/index.d.ts +321 -0
  353. package/lib/labs/VInfiniteScroll/index.mjs +2 -0
  354. package/lib/labs/VInfiniteScroll/index.mjs.map +1 -0
  355. package/lib/labs/VSkeletonLoader/index.d.ts +0 -12
  356. package/lib/labs/components.d.ts +398 -969
  357. package/lib/labs/components.mjs +1 -0
  358. package/lib/labs/components.mjs.map +1 -1
  359. package/lib/labs/date/DateAdapter.mjs +2 -0
  360. package/lib/labs/date/DateAdapter.mjs.map +1 -0
  361. package/lib/labs/date/adapters/vuetify.d.ts +52 -0
  362. package/lib/{adapters → labs/date/adapters}/vuetify.mjs +2 -2
  363. package/lib/labs/date/adapters/vuetify.mjs.map +1 -0
  364. package/lib/{composables → labs/date}/date.mjs +3 -3
  365. package/lib/labs/date/date.mjs.map +1 -0
  366. package/lib/labs/date/index.d.ts +40 -0
  367. package/lib/labs/date/index.mjs +2 -0
  368. package/lib/labs/date/index.mjs.map +1 -0
  369. package/lib/labs/index.mjs +3 -2
  370. package/lib/labs/index.mjs.map +1 -1
  371. package/lib/locale/af.mjs +5 -1
  372. package/lib/locale/af.mjs.map +1 -1
  373. package/lib/locale/ar.mjs +5 -1
  374. package/lib/locale/ar.mjs.map +1 -1
  375. package/lib/locale/az.mjs +5 -1
  376. package/lib/locale/az.mjs.map +1 -1
  377. package/lib/locale/bg.mjs +5 -1
  378. package/lib/locale/bg.mjs.map +1 -1
  379. package/lib/locale/ca.mjs +5 -1
  380. package/lib/locale/ca.mjs.map +1 -1
  381. package/lib/locale/ckb.mjs +5 -1
  382. package/lib/locale/ckb.mjs.map +1 -1
  383. package/lib/locale/cs.mjs +5 -1
  384. package/lib/locale/cs.mjs.map +1 -1
  385. package/lib/locale/da.mjs +5 -1
  386. package/lib/locale/da.mjs.map +1 -1
  387. package/lib/locale/de.mjs +5 -1
  388. package/lib/locale/de.mjs.map +1 -1
  389. package/lib/locale/el.mjs +5 -1
  390. package/lib/locale/el.mjs.map +1 -1
  391. package/lib/locale/en.mjs +5 -1
  392. package/lib/locale/en.mjs.map +1 -1
  393. package/lib/locale/es.mjs +5 -1
  394. package/lib/locale/es.mjs.map +1 -1
  395. package/lib/locale/et.mjs +5 -1
  396. package/lib/locale/et.mjs.map +1 -1
  397. package/lib/locale/fa.mjs +5 -1
  398. package/lib/locale/fa.mjs.map +1 -1
  399. package/lib/locale/fi.mjs +5 -1
  400. package/lib/locale/fi.mjs.map +1 -1
  401. package/lib/locale/fr.mjs +5 -1
  402. package/lib/locale/fr.mjs.map +1 -1
  403. package/lib/locale/he.mjs +5 -1
  404. package/lib/locale/he.mjs.map +1 -1
  405. package/lib/locale/hr.mjs +5 -1
  406. package/lib/locale/hr.mjs.map +1 -1
  407. package/lib/locale/hu.mjs +5 -1
  408. package/lib/locale/hu.mjs.map +1 -1
  409. package/lib/locale/id.mjs +5 -1
  410. package/lib/locale/id.mjs.map +1 -1
  411. package/lib/locale/index.d.ts +168 -0
  412. package/lib/locale/it.mjs +5 -1
  413. package/lib/locale/it.mjs.map +1 -1
  414. package/lib/locale/ja.mjs +5 -1
  415. package/lib/locale/ja.mjs.map +1 -1
  416. package/lib/locale/ko.mjs +5 -1
  417. package/lib/locale/ko.mjs.map +1 -1
  418. package/lib/locale/lt.mjs +5 -1
  419. package/lib/locale/lt.mjs.map +1 -1
  420. package/lib/locale/lv.mjs +5 -1
  421. package/lib/locale/lv.mjs.map +1 -1
  422. package/lib/locale/nl.mjs +5 -1
  423. package/lib/locale/nl.mjs.map +1 -1
  424. package/lib/locale/no.mjs +5 -1
  425. package/lib/locale/no.mjs.map +1 -1
  426. package/lib/locale/pl.mjs +5 -1
  427. package/lib/locale/pl.mjs.map +1 -1
  428. package/lib/locale/pt.mjs +5 -1
  429. package/lib/locale/pt.mjs.map +1 -1
  430. package/lib/locale/ro.mjs +5 -1
  431. package/lib/locale/ro.mjs.map +1 -1
  432. package/lib/locale/ru.mjs +5 -1
  433. package/lib/locale/ru.mjs.map +1 -1
  434. package/lib/locale/sk.mjs +5 -1
  435. package/lib/locale/sk.mjs.map +1 -1
  436. package/lib/locale/sl.mjs +5 -1
  437. package/lib/locale/sl.mjs.map +1 -1
  438. package/lib/locale/sr-Cyrl.mjs +5 -1
  439. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  440. package/lib/locale/sr-Latn.mjs +5 -1
  441. package/lib/locale/sr-Latn.mjs.map +1 -1
  442. package/lib/locale/sv.mjs +5 -1
  443. package/lib/locale/sv.mjs.map +1 -1
  444. package/lib/locale/th.mjs +5 -1
  445. package/lib/locale/th.mjs.map +1 -1
  446. package/lib/locale/tr.mjs +5 -1
  447. package/lib/locale/tr.mjs.map +1 -1
  448. package/lib/locale/uk.mjs +5 -1
  449. package/lib/locale/uk.mjs.map +1 -1
  450. package/lib/locale/vi.mjs +5 -1
  451. package/lib/locale/vi.mjs.map +1 -1
  452. package/lib/locale/zh-Hans.mjs +5 -1
  453. package/lib/locale/zh-Hans.mjs.map +1 -1
  454. package/lib/locale/zh-Hant.mjs +5 -1
  455. package/lib/locale/zh-Hant.mjs.map +1 -1
  456. package/lib/util/createSimpleFunctional.mjs +9 -4
  457. package/lib/util/createSimpleFunctional.mjs.map +1 -1
  458. package/lib/util/defineComponent.mjs +11 -43
  459. package/lib/util/defineComponent.mjs.map +1 -1
  460. package/lib/util/helpers.mjs +28 -2
  461. package/lib/util/helpers.mjs.map +1 -1
  462. package/lib/util/index.mjs +1 -0
  463. package/lib/util/index.mjs.map +1 -1
  464. package/package.json +2 -1
  465. package/lib/adapters/date-adapter.mjs +0 -2
  466. package/lib/adapters/date-adapter.mjs.map +0 -1
  467. package/lib/adapters/vuetify.mjs.map +0 -1
  468. package/lib/composables/date.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v4.0.0-dev-20230422.0
2
+ * Vuetify v4.0.0-dev-20230427.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -171,11 +171,11 @@
171
171
  function keys(o) {
172
172
  return Object.keys(o);
173
173
  }
174
- function pick(obj, paths) {
174
+ function pick(obj, paths, exclude) {
175
175
  const found = Object.create(null);
176
176
  const rest = Object.create(null);
177
177
  for (const key in obj) {
178
- if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key)) {
178
+ if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key) && !exclude?.some(path => path === key)) {
179
179
  found[key] = obj[key];
180
180
  } else {
181
181
  rest[key] = obj[key];
@@ -360,6 +360,32 @@
360
360
  handler(...args);
361
361
  }
362
362
  }
363
+ function focusableChildren(el) {
364
+ const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', '[tabindex]'].map(s => `${s}:not([tabindex="-1"]):not([disabled])`).join(', ');
365
+ return [...el.querySelectorAll(targets)];
366
+ }
367
+ function focusChild(el, location) {
368
+ const focusable = focusableChildren(el);
369
+ const idx = focusable.indexOf(document.activeElement);
370
+ if (!location) {
371
+ if (!el.contains(document.activeElement)) {
372
+ focusable[0]?.focus();
373
+ }
374
+ } else if (location === 'first') {
375
+ focusable[0]?.focus();
376
+ } else if (location === 'last') {
377
+ focusable.at(-1)?.focus();
378
+ } else {
379
+ let _el;
380
+ let idxx = idx;
381
+ const inc = location === 'next' ? 1 : -1;
382
+ do {
383
+ idxx += inc;
384
+ _el = focusable[idxx];
385
+ } while ((!_el || _el.offsetParent == null) && idxx < focusable.length && idxx >= 0);
386
+ if (_el) _el.focus();else focusChild(el, location === 'next' ? 'first' : 'last');
387
+ }
388
+ }
363
389
 
364
390
  const block = ['top', 'bottom'];
365
391
  const inline = ['start', 'end', 'left', 'right'];
@@ -860,44 +886,6 @@
860
886
  return (light + 0.05) / (dark + 0.05);
861
887
  }
862
888
 
863
- // Utilities
864
- function getCurrentInstance(name, message) {
865
- const vm = vue.getCurrentInstance();
866
- if (!vm) {
867
- throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
868
- }
869
- return vm;
870
- }
871
- function getCurrentInstanceName() {
872
- let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
873
- const vm = getCurrentInstance(name).type;
874
- return toKebabCase(vm?.aliasName || vm?.name);
875
- }
876
- let _uid = 0;
877
- let _map = new WeakMap();
878
- function getUid() {
879
- const vm = getCurrentInstance('getUid');
880
- if (_map.has(vm)) return _map.get(vm);else {
881
- const uid = _uid++;
882
- _map.set(vm, uid);
883
- return uid;
884
- }
885
- }
886
- getUid.reset = () => {
887
- _uid = 0;
888
- _map = new WeakMap();
889
- };
890
-
891
- function injectSelf(key) {
892
- const {
893
- provides
894
- } = getCurrentInstance('injectSelf');
895
- if (provides && key in provides) {
896
- // TS doesn't allow symbol as index type
897
- return provides[key];
898
- }
899
- }
900
-
901
889
  /**
902
890
  * Creates a factory function for props definitions.
903
891
  * This is used to define props in a composable then override
@@ -951,17 +939,54 @@
951
939
 
952
940
  // Types
953
941
 
942
+ // Composables
943
+ const makeComponentProps = propsFactory({
944
+ class: [String, Array],
945
+ style: {
946
+ type: [String, Array, Object],
947
+ default: null
948
+ }
949
+ }, 'component');
950
+
951
+ function useToggleScope(source, fn) {
952
+ let scope;
953
+ function start() {
954
+ scope = vue.effectScope();
955
+ scope.run(() => fn.length ? fn(() => {
956
+ scope?.stop();
957
+ start();
958
+ }) : fn());
959
+ }
960
+ vue.watch(source, active => {
961
+ if (active && !scope) {
962
+ start();
963
+ } else if (!active) {
964
+ scope?.stop();
965
+ scope = undefined;
966
+ }
967
+ }, {
968
+ immediate: true
969
+ });
970
+ vue.onScopeDispose(() => {
971
+ scope?.stop();
972
+ });
973
+ }
974
+
975
+ // Composables
976
+
977
+ // Types
978
+
954
979
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
955
980
  function createDefaults(options) {
956
981
  return vue.ref(options);
957
982
  }
958
- function useDefaults() {
983
+ function injectDefaults() {
959
984
  const defaults = vue.inject(DefaultsSymbol);
960
985
  if (!defaults) throw new Error('[Vuetify] Could not find defaults instance');
961
986
  return defaults;
962
987
  }
963
988
  function provideDefaults(defaults, options) {
964
- const injectedDefaults = useDefaults();
989
+ const injectedDefaults = injectDefaults();
965
990
  const providedDefaults = vue.ref(defaults);
966
991
  const newDefaults = vue.computed(() => {
967
992
  const disabled = vue.unref(options?.disabled);
@@ -988,41 +1013,56 @@
988
1013
  vue.provide(DefaultsSymbol, newDefaults);
989
1014
  return newDefaults;
990
1015
  }
991
-
992
- function useToggleScope(source, fn) {
993
- let scope;
994
- function start() {
995
- scope = vue.effectScope();
996
- scope.run(() => fn.length ? fn(() => {
997
- scope?.stop();
998
- start();
999
- }) : fn());
1000
- }
1001
- vue.watch(source, active => {
1002
- if (active && !scope) {
1003
- start();
1004
- } else if (!active) {
1005
- scope?.stop();
1006
- scope = undefined;
1016
+ function propIsDefined(vnode, prop) {
1017
+ return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1018
+ }
1019
+ function useDefaults(props, name) {
1020
+ let defaults = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : injectDefaults();
1021
+ const vm = getCurrentInstance('useDefaults');
1022
+ name = name ?? vm.type.name ?? vm.type.__name;
1023
+ if (!name) {
1024
+ throw new Error('[Vuetify] Could not determine component name');
1025
+ }
1026
+ const componentDefaults = vue.computed(() => defaults.value[props._as ?? name]);
1027
+ const _props = new Proxy(props, {
1028
+ get(target, prop) {
1029
+ const propValue = Reflect.get(target, prop);
1030
+ if (prop === 'class' || prop === 'style') {
1031
+ return [componentDefaults.value?.[prop], propValue].filter(v => v != null);
1032
+ } else if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1033
+ return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? propValue;
1034
+ }
1035
+ return propValue;
1007
1036
  }
1008
- }, {
1009
- immediate: true
1010
1037
  });
1011
- vue.onScopeDispose(() => {
1012
- scope?.stop();
1038
+ const _subcomponentDefaults = vue.shallowRef();
1039
+ vue.watchEffect(() => {
1040
+ if (componentDefaults.value) {
1041
+ const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1042
+ let [key] = _ref;
1043
+ return key.startsWith(key[0].toUpperCase());
1044
+ });
1045
+ if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1046
+ }
1013
1047
  });
1048
+ function provideSubDefaults() {
1049
+ // If subcomponent defaults are provided, override any
1050
+ // subcomponents provided by the component's setup function.
1051
+ // This uses injectSelf so must be done after the original setup to work.
1052
+ useToggleScope(_subcomponentDefaults, () => {
1053
+ provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1054
+ });
1055
+ }
1056
+ return {
1057
+ props: _props,
1058
+ provideSubDefaults
1059
+ };
1014
1060
  }
1015
1061
 
1016
1062
  // Utils
1017
1063
 
1018
1064
  // Types
1019
1065
 
1020
- function propIsDefined(vnode, prop) {
1021
- return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1022
- }
1023
-
1024
- // No props
1025
-
1026
1066
  // Implementation
1027
1067
  function defineComponent(options) {
1028
1068
  options._setup = options._setup ?? options.setup;
@@ -1034,43 +1074,20 @@
1034
1074
  options.props = propsFactory(options.props ?? {}, toKebabCase(options.name))();
1035
1075
  const propKeys = Object.keys(options.props);
1036
1076
  options.filterProps = function filterProps(props) {
1037
- return pick(props, propKeys);
1077
+ return pick(props, propKeys, ['class', 'style']);
1038
1078
  };
1039
1079
  options.props._as = String;
1040
1080
  options.setup = function setup(props, ctx) {
1041
- const defaults = useDefaults();
1081
+ const defaults = injectDefaults();
1042
1082
 
1043
1083
  // Skip props proxy if defaults are not provided
1044
1084
  if (!defaults.value) return options._setup(props, ctx);
1045
- const vm = vue.getCurrentInstance();
1046
- const componentDefaults = vue.computed(() => defaults.value[props._as ?? options.name]);
1047
- const _props = new Proxy(props, {
1048
- get(target, prop) {
1049
- const propValue = Reflect.get(target, prop);
1050
- if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1051
- return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? propValue;
1052
- }
1053
- return propValue;
1054
- }
1055
- });
1056
- const _subcomponentDefaults = vue.shallowRef();
1057
- vue.watchEffect(() => {
1058
- if (componentDefaults.value) {
1059
- const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1060
- let [key] = _ref;
1061
- return key.startsWith(key[0].toUpperCase());
1062
- });
1063
- if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1064
- }
1065
- });
1085
+ const {
1086
+ props: _props,
1087
+ provideSubDefaults
1088
+ } = useDefaults(props, props._as ?? options.name, defaults);
1066
1089
  const setupBindings = options._setup(_props, ctx);
1067
-
1068
- // If subcomponent defaults are provided, override any
1069
- // subcomponents provided by the component's setup function.
1070
- // This uses injectSelf so must be done after the original setup to work.
1071
- useToggleScope(_subcomponentDefaults, () => {
1072
- provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1073
- });
1090
+ provideSubDefaults();
1074
1091
  return setupBindings;
1075
1092
  };
1076
1093
  }
@@ -1095,15 +1112,19 @@
1095
1112
  tag: {
1096
1113
  type: String,
1097
1114
  default: tag
1098
- }
1115
+ },
1116
+ ...makeComponentProps()
1099
1117
  },
1100
1118
  setup(props, _ref) {
1101
1119
  let {
1102
1120
  slots
1103
1121
  } = _ref;
1104
- return () => vue.h(props.tag, {
1105
- class: klass
1106
- }, slots.default?.());
1122
+ return () => {
1123
+ return vue.h(props.tag, {
1124
+ class: [klass, props.class],
1125
+ style: props.style
1126
+ }, slots.default?.());
1127
+ };
1107
1128
  }
1108
1129
  });
1109
1130
  }
@@ -1136,6 +1157,34 @@
1136
1157
  const deceleratedEasing = 'cubic-bezier(0.0, 0, 0.2, 1)'; // Entering
1137
1158
  const acceleratedEasing = 'cubic-bezier(0.4, 0, 1, 1)'; // Leaving
1138
1159
 
1160
+ // Utilities
1161
+ function getCurrentInstance(name, message) {
1162
+ const vm = vue.getCurrentInstance();
1163
+ if (!vm) {
1164
+ throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
1165
+ }
1166
+ return vm;
1167
+ }
1168
+ function getCurrentInstanceName() {
1169
+ let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
1170
+ const vm = getCurrentInstance(name).type;
1171
+ return toKebabCase(vm?.aliasName || vm?.name);
1172
+ }
1173
+ let _uid = 0;
1174
+ let _map = new WeakMap();
1175
+ function getUid() {
1176
+ const vm = getCurrentInstance('getUid');
1177
+ if (_map.has(vm)) return _map.get(vm);else {
1178
+ const uid = _uid++;
1179
+ _map.set(vm, uid);
1180
+ return uid;
1181
+ }
1182
+ }
1183
+ getUid.reset = () => {
1184
+ _uid = 0;
1185
+ _map = new WeakMap();
1186
+ };
1187
+
1139
1188
  function getScrollParent(el) {
1140
1189
  while (el) {
1141
1190
  if (hasScrollbar(el)) return el;
@@ -1159,6 +1208,16 @@
1159
1208
  return style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1160
1209
  }
1161
1210
 
1211
+ function injectSelf(key) {
1212
+ const {
1213
+ provides
1214
+ } = getCurrentInstance('injectSelf');
1215
+ if (provides && key in provides) {
1216
+ // TS doesn't allow symbol as index type
1217
+ return provides[key];
1218
+ }
1219
+ }
1220
+
1162
1221
  function isFixedPosition(el) {
1163
1222
  while (el) {
1164
1223
  if (window.getComputedStyle(el).position === 'fixed') {
@@ -1939,7 +1998,11 @@
1939
1998
  item: 'Rating {0} of {1}'
1940
1999
  }
1941
2000
  },
1942
- loading: 'Loading...'
2001
+ loading: 'Loading...',
2002
+ infiniteScroll: {
2003
+ loadMore: 'Load more',
2004
+ empty: 'No more'
2005
+ }
1943
2006
  };
1944
2007
 
1945
2008
  const LANG_PREFIX = '$vuetify.';
@@ -2137,6 +2200,7 @@
2137
2200
  const VApp = genericComponent()({
2138
2201
  name: 'VApp',
2139
2202
  props: {
2203
+ ...makeComponentProps(),
2140
2204
  ...makeLayoutProps({
2141
2205
  fullHeight: true
2142
2206
  }),
@@ -2159,8 +2223,8 @@
2159
2223
  } = useRtl();
2160
2224
  useRender(() => vue.createVNode("div", {
2161
2225
  "ref": layoutRef,
2162
- "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value],
2163
- "style": layoutStyles.value
2226
+ "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value, props.class],
2227
+ "style": [layoutStyles.value, props.style]
2164
2228
  }, [vue.createVNode("div", {
2165
2229
  "class": "v-application__wrap"
2166
2230
  }, [slots.default?.()])]));
@@ -2585,6 +2649,7 @@
2585
2649
  props: {
2586
2650
  aspectRatio: [String, Number],
2587
2651
  contentClass: String,
2652
+ ...makeComponentProps(),
2588
2653
  ...makeDimensionProps()
2589
2654
  },
2590
2655
  setup(props, _ref) {
@@ -2598,8 +2663,8 @@
2598
2663
  dimensionStyles
2599
2664
  } = useDimension(props);
2600
2665
  useRender(() => vue.createVNode("div", {
2601
- "class": "v-responsive",
2602
- "style": dimensionStyles.value
2666
+ "class": ['v-responsive', props.class],
2667
+ "style": [dimensionStyles.value, props.style]
2603
2668
  }, [vue.createVNode("div", {
2604
2669
  "class": "v-responsive__sizer",
2605
2670
  "style": aspectStyles.value
@@ -2717,6 +2782,7 @@
2717
2782
  },
2718
2783
  srcset: String,
2719
2784
  width: [String, Number],
2785
+ ...makeComponentProps(),
2720
2786
  ...makeTransitionProps()
2721
2787
  },
2722
2788
  emits: {
@@ -2904,10 +2970,10 @@
2904
2970
  useRender(() => vue.withDirectives(vue.createVNode(VResponsive, {
2905
2971
  "class": ['v-img', {
2906
2972
  'v-img--booting': !isBooted.value
2907
- }],
2908
- "style": {
2973
+ }, props.class],
2974
+ "style": [{
2909
2975
  width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width)
2910
- },
2976
+ }, props.style],
2911
2977
  "aspectRatio": aspectRatio.value,
2912
2978
  "aria-label": props.alt,
2913
2979
  "role": props.alt ? 'img' : undefined
@@ -2942,10 +3008,9 @@
2942
3008
  }
2943
3009
  }, 'tag');
2944
3010
 
2945
- // Types
2946
-
2947
3011
  const makeVToolbarTitleProps = propsFactory({
2948
3012
  text: String,
3013
+ ...makeComponentProps(),
2949
3014
  ...makeTagProps()
2950
3015
  }, 'v-toolbar-title');
2951
3016
  const VToolbarTitle = genericComponent()({
@@ -2958,7 +3023,8 @@
2958
3023
  useRender(() => {
2959
3024
  const hasText = !!(slots.default || slots.text || props.text);
2960
3025
  return vue.createVNode(props.tag, {
2961
- "class": "v-toolbar-title"
3026
+ "class": ['v-toolbar-title', props.class],
3027
+ "style": props.style
2962
3028
  }, {
2963
3029
  default: () => [hasText && vue.createVNode("div", {
2964
3030
  "class": "v-toolbar-title__placeholder"
@@ -3139,6 +3205,7 @@
3139
3205
  image: String,
3140
3206
  title: String,
3141
3207
  ...makeBorderProps(),
3208
+ ...makeComponentProps(),
3142
3209
  ...makeElevationProps(),
3143
3210
  ...makeRoundedProps(),
3144
3211
  ...makeTagProps({
@@ -3189,8 +3256,8 @@
3189
3256
  'v-toolbar--flat': props.flat,
3190
3257
  'v-toolbar--floating': props.floating,
3191
3258
  [`v-toolbar--density-${props.density}`]: true
3192
- }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value],
3193
- "style": [backgroundColorStyles.value]
3259
+ }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value, props.class],
3260
+ "style": [backgroundColorStyles.value, props.style]
3194
3261
  }, {
3195
3262
  default: () => [hasImage && vue.createVNode("div", {
3196
3263
  "key": "image",
@@ -3475,13 +3542,13 @@
3475
3542
  "ref": vToolbarRef,
3476
3543
  "class": ['v-app-bar', {
3477
3544
  'v-app-bar--bottom': props.location === 'bottom'
3478
- }],
3479
- "style": {
3545
+ }, props.class],
3546
+ "style": [{
3480
3547
  ...layoutItemStyles.value,
3481
3548
  '--v-toolbar-image-opacity': opacity.value,
3482
3549
  height: undefined,
3483
3550
  ...ssrBootStyles.value
3484
- }
3551
+ }, props.style]
3485
3552
  }, toolbarProps, {
3486
3553
  "collapse": isCollapsed.value,
3487
3554
  "flat": isFlat.value
@@ -3568,6 +3635,7 @@
3568
3635
  const makeVBtnGroupProps = propsFactory({
3569
3636
  divided: Boolean,
3570
3637
  ...makeBorderProps(),
3638
+ ...makeComponentProps(),
3571
3639
  ...makeDensityProps(),
3572
3640
  ...makeElevationProps(),
3573
3641
  ...makeRoundedProps(),
@@ -3610,7 +3678,8 @@
3610
3678
  return vue.createVNode(props.tag, {
3611
3679
  "class": ['v-btn-group', {
3612
3680
  'v-btn-group--divided': props.divided
3613
- }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value]
3681
+ }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
3682
+ "style": props.style
3614
3683
  }, slots);
3615
3684
  });
3616
3685
  }
@@ -3843,8 +3912,10 @@
3843
3912
  useRender(() => {
3844
3913
  const [btnGroupProps] = VBtnGroup.filterProps(props);
3845
3914
  return vue.createVNode(VBtnGroup, vue.mergeProps({
3846
- "class": "v-btn-toggle"
3847
- }, btnGroupProps), {
3915
+ "class": ['v-btn-toggle', props.class]
3916
+ }, btnGroupProps, {
3917
+ "style": props.style
3918
+ }), {
3848
3919
  default: () => [slots.default?.({
3849
3920
  isSelected,
3850
3921
  next,
@@ -3915,7 +3986,7 @@
3915
3986
 
3916
3987
  // Types
3917
3988
 
3918
- const IconValue = [String, Function, Object];
3989
+ const IconValue = [String, Function, Object, Array];
3919
3990
  const IconSymbol = Symbol.for('vuetify:icons');
3920
3991
  const makeIconProps = propsFactory({
3921
3992
  icon: {
@@ -3935,8 +4006,9 @@
3935
4006
  slots
3936
4007
  } = _ref;
3937
4008
  return () => {
4009
+ const Icon = props.icon;
3938
4010
  return vue.createVNode(props.tag, null, {
3939
- default: () => [props.icon ? vue.createVNode(props.icon, null, null) : slots.default?.()]
4011
+ default: () => [props.icon ? vue.createVNode(Icon, null, null) : slots.default?.()]
3940
4012
  });
3941
4013
  };
3942
4014
  }
@@ -3959,7 +4031,12 @@
3959
4031
  "viewBox": "0 0 24 24",
3960
4032
  "role": "img",
3961
4033
  "aria-hidden": "true"
3962
- }, [vue.createVNode("path", {
4034
+ }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? vue.createVNode("path", {
4035
+ "d": path[0],
4036
+ "fill-opacity": path[1]
4037
+ }, null) : vue.createVNode("path", {
4038
+ "d": path
4039
+ }, null)) : vue.createVNode("path", {
3963
4040
  "d": props.icon
3964
4041
  }, null)])]
3965
4042
  });
@@ -4024,7 +4101,12 @@
4024
4101
  }
4025
4102
  }
4026
4103
  if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
4027
- if (typeof icon !== 'string') {
4104
+ if (Array.isArray(icon)) {
4105
+ return {
4106
+ component: VSvgIcon,
4107
+ icon
4108
+ };
4109
+ } else if (typeof icon !== 'string') {
4028
4110
  return {
4029
4111
  component: VComponentIcon,
4030
4112
  icon
@@ -4081,6 +4163,7 @@
4081
4163
  start: Boolean,
4082
4164
  end: Boolean,
4083
4165
  icon: IconValue,
4166
+ ...makeComponentProps(),
4084
4167
  ...makeSizeProps(),
4085
4168
  ...makeTagProps({
4086
4169
  tag: 'i'
@@ -4123,12 +4206,12 @@
4123
4206
  'v-icon--clickable': !!attrs.onClick,
4124
4207
  'v-icon--start': props.start,
4125
4208
  'v-icon--end': props.end
4126
- }],
4209
+ }, props.class],
4127
4210
  "style": [!sizeClasses.value ? {
4128
4211
  fontSize: convertToUnit(props.size),
4129
4212
  height: convertToUnit(props.size),
4130
4213
  width: convertToUnit(props.size)
4131
- } : undefined, textColorStyles.value],
4214
+ } : undefined, textColorStyles.value, props.style],
4132
4215
  "role": attrs.onClick ? 'button' : undefined,
4133
4216
  "aria-hidden": !attrs.onClick
4134
4217
  }, {
@@ -4139,14 +4222,14 @@
4139
4222
  });
4140
4223
 
4141
4224
  // Utilities
4142
- function useIntersectionObserver(callback) {
4225
+ function useIntersectionObserver(callback, options) {
4143
4226
  const intersectionRef = vue.ref();
4144
4227
  const isIntersecting = vue.ref(false);
4145
4228
  if (SUPPORTS_INTERSECTION) {
4146
4229
  const observer = new IntersectionObserver(entries => {
4147
4230
  callback?.(entries, observer);
4148
4231
  isIntersecting.value = !!entries.find(entry => entry.isIntersecting);
4149
- });
4232
+ }, options);
4150
4233
  vue.onBeforeUnmount(() => {
4151
4234
  observer.disconnect();
4152
4235
  });
@@ -4186,6 +4269,7 @@
4186
4269
  type: [Number, String],
4187
4270
  default: 4
4188
4271
  },
4272
+ ...makeComponentProps(),
4189
4273
  ...makeSizeProps(),
4190
4274
  ...makeTagProps({
4191
4275
  tag: 'div'
@@ -4241,8 +4325,8 @@
4241
4325
  'v-progress-circular--indeterminate': !!props.indeterminate,
4242
4326
  'v-progress-circular--visible': isIntersecting.value,
4243
4327
  'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink'
4244
- }, themeClasses.value, sizeClasses.value, textColorClasses.value],
4245
- "style": [sizeStyles.value, textColorStyles.value],
4328
+ }, themeClasses.value, sizeClasses.value, textColorClasses.value, props.class],
4329
+ "style": [sizeStyles.value, textColorStyles.value, props.style],
4246
4330
  "role": "progressbar",
4247
4331
  "aria-valuemin": "0",
4248
4332
  "aria-valuemax": "100",
@@ -4661,6 +4745,7 @@
4661
4745
  stream: Boolean,
4662
4746
  striped: Boolean,
4663
4747
  roundedBar: Boolean,
4748
+ ...makeComponentProps(),
4664
4749
  ...makeLocationProps({
4665
4750
  location: 'top'
4666
4751
  }),
@@ -4732,14 +4817,14 @@
4732
4817
  'v-progress-linear--rounded': props.rounded,
4733
4818
  'v-progress-linear--rounded-bar': props.roundedBar,
4734
4819
  'v-progress-linear--striped': props.striped
4735
- }, roundedClasses.value, themeClasses.value],
4736
- "style": {
4820
+ }, roundedClasses.value, themeClasses.value, props.class],
4821
+ "style": [{
4737
4822
  bottom: props.location === 'bottom' ? 0 : undefined,
4738
4823
  top: props.location === 'top' ? 0 : undefined,
4739
4824
  height: props.active ? convertToUnit(height.value) : 0,
4740
4825
  '--v-progress-linear-height': convertToUnit(height.value),
4741
4826
  ...locationStyles.value
4742
- },
4827
+ }, props.style],
4743
4828
  "role": "progressbar",
4744
4829
  "aria-hidden": props.active ? 'false' : 'true',
4745
4830
  "aria-valuemin": "0",
@@ -4950,7 +5035,7 @@
4950
5035
  },
4951
5036
  text: String,
4952
5037
  ...makeBorderProps(),
4953
- ...makeRoundedProps(),
5038
+ ...makeComponentProps(),
4954
5039
  ...makeDensityProps(),
4955
5040
  ...makeDimensionProps(),
4956
5041
  ...makeElevationProps(),
@@ -4958,6 +5043,7 @@
4958
5043
  ...makeLoaderProps(),
4959
5044
  ...makeLocationProps(),
4960
5045
  ...makePositionProps(),
5046
+ ...makeRoundedProps(),
4961
5047
  ...makeRouterProps(),
4962
5048
  ...makeSizeProps(),
4963
5049
  ...makeTagProps({
@@ -5055,8 +5141,8 @@
5055
5141
  'v-btn--icon': !!props.icon,
5056
5142
  'v-btn--loading': props.loading,
5057
5143
  'v-btn--stacked': props.stacked
5058
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
5059
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value],
5144
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
5145
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value, props.style],
5060
5146
  "disabled": isDisabled.value || undefined,
5061
5147
  "href": link.href.value,
5062
5148
  "onClick": e => {
@@ -5133,15 +5219,17 @@
5133
5219
  icon: {
5134
5220
  type: IconValue,
5135
5221
  default: '$menu'
5136
- }
5222
+ },
5223
+ ...makeComponentProps()
5137
5224
  },
5138
5225
  setup(props, _ref) {
5139
5226
  let {
5140
5227
  slots
5141
5228
  } = _ref;
5142
5229
  useRender(() => vue.createVNode(VBtn, {
5143
- "class": "v-app-bar-nav-icon",
5144
- "icon": props.icon
5230
+ "class": ['v-app-bar-nav-icon', props.class],
5231
+ "icon": props.icon,
5232
+ "style": props.style
5145
5233
  }, slots));
5146
5234
  return {};
5147
5235
  }
@@ -5149,9 +5237,12 @@
5149
5237
 
5150
5238
  const VToolbarItems = genericComponent()({
5151
5239
  name: 'VToolbarItems',
5152
- props: makeVariantProps({
5153
- variant: 'text'
5154
- }),
5240
+ props: {
5241
+ ...makeComponentProps(),
5242
+ ...makeVariantProps({
5243
+ variant: 'text'
5244
+ })
5245
+ },
5155
5246
  setup(props, _ref) {
5156
5247
  let {
5157
5248
  slots
@@ -5164,7 +5255,8 @@
5164
5255
  }
5165
5256
  });
5166
5257
  useRender(() => vue.createVNode("div", {
5167
- "class": "v-toolbar-items"
5258
+ "class": ['v-toolbar-items', props.class],
5259
+ "style": props.style
5168
5260
  }, [slots.default?.()]));
5169
5261
  return {};
5170
5262
  }
@@ -5226,6 +5318,7 @@
5226
5318
  type: String,
5227
5319
  validator: val => allowedTypes.includes(val)
5228
5320
  },
5321
+ ...makeComponentProps(),
5229
5322
  ...makeDensityProps(),
5230
5323
  ...makeDimensionProps(),
5231
5324
  ...makeElevationProps(),
@@ -5308,8 +5401,8 @@
5308
5401
  [`v-alert--border-${props.border === true ? 'start' : props.border}`]: true
5309
5402
  }, {
5310
5403
  'v-alert--prominent': props.prominent
5311
- }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
5312
- "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
5404
+ }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
5405
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
5313
5406
  "role": "alert"
5314
5407
  }, {
5315
5408
  default: () => [genOverlays(false, 'v-alert'), props.border && vue.createVNode("div", {
@@ -5403,6 +5496,7 @@
5403
5496
  props: {
5404
5497
  text: String,
5405
5498
  clickable: Boolean,
5499
+ ...makeComponentProps(),
5406
5500
  ...makeThemeProps()
5407
5501
  },
5408
5502
  setup(props, _ref) {
@@ -5412,7 +5506,8 @@
5412
5506
  useRender(() => vue.createVNode("label", {
5413
5507
  "class": ['v-label', {
5414
5508
  'v-label--clickable': props.clickable
5415
- }]
5509
+ }, props.class],
5510
+ "style": props.style
5416
5511
  }, [props.text, slots.default?.()]));
5417
5512
  return {};
5418
5513
  }
@@ -5421,7 +5516,8 @@
5421
5516
  const VFieldLabel = genericComponent()({
5422
5517
  name: 'VFieldLabel',
5423
5518
  props: {
5424
- floating: Boolean
5519
+ floating: Boolean,
5520
+ ...makeComponentProps()
5425
5521
  },
5426
5522
  setup(props, _ref) {
5427
5523
  let {
@@ -5430,7 +5526,8 @@
5430
5526
  useRender(() => vue.createVNode(VLabel, {
5431
5527
  "class": ['v-field-label', {
5432
5528
  'v-field-label--floating': props.floating
5433
- }],
5529
+ }, props.class],
5530
+ "style": props.style,
5434
5531
  "aria-hidden": props.floating || undefined
5435
5532
  }, slots));
5436
5533
  return {};
@@ -5481,6 +5578,7 @@
5481
5578
  },
5482
5579
  active: Boolean,
5483
5580
  color: String,
5581
+ baseColor: String,
5484
5582
  dirty: Boolean,
5485
5583
  disabled: Boolean,
5486
5584
  error: Boolean,
@@ -5498,9 +5596,10 @@
5498
5596
  'onClick:clear': EventProp(),
5499
5597
  'onClick:appendInner': EventProp(),
5500
5598
  'onClick:prependInner': EventProp(),
5501
- ...makeThemeProps(),
5599
+ ...makeComponentProps(),
5502
5600
  ...makeLoaderProps(),
5503
- ...makeRoundedProps()
5601
+ ...makeRoundedProps(),
5602
+ ...makeThemeProps()
5504
5603
  }, 'v-field');
5505
5604
  const VField = genericComponent()({
5506
5605
  name: 'VField',
@@ -5554,7 +5653,7 @@
5554
5653
  textColorClasses,
5555
5654
  textColorStyles
5556
5655
  } = useTextColor(vue.computed(() => {
5557
- return isActive.value && isFocused.value && !props.error && !props.disabled ? props.color : undefined;
5656
+ return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : props.baseColor;
5558
5657
  }));
5559
5658
  vue.watch(isActive, val => {
5560
5659
  if (hasLabel.value) {
@@ -5631,8 +5730,8 @@
5631
5730
  'v-field--single-line': props.singleLine,
5632
5731
  'v-field--no-label': !label,
5633
5732
  [`v-field--variant-${props.variant}`]: true
5634
- }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value],
5635
- "style": [backgroundColorStyles.value, textColorStyles.value],
5733
+ }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, props.class],
5734
+ "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
5636
5735
  "onClick": onClick
5637
5736
  }, attrs), [vue.createVNode("div", {
5638
5737
  "class": "v-field__overlay"
@@ -5720,7 +5819,7 @@
5720
5819
  });
5721
5820
  // TODO: this is kinda slow, might be better to implicitly inherit props instead
5722
5821
  function filterFieldProps(attrs) {
5723
- const keys = Object.keys(VField.props).filter(k => !isOn(k));
5822
+ const keys = Object.keys(VField.props).filter(k => !isOn(k) && k !== 'class' && k !== 'style');
5724
5823
  return pick(attrs, keys);
5725
5824
  }
5726
5825
 
@@ -5735,6 +5834,7 @@
5735
5834
  type: [Array, String],
5736
5835
  default: () => []
5737
5836
  },
5837
+ ...makeComponentProps(),
5738
5838
  ...makeTransitionProps({
5739
5839
  transition: {
5740
5840
  component: VSlideYTransition,
@@ -5755,8 +5855,8 @@
5755
5855
  useRender(() => vue.createVNode(MaybeTransition, {
5756
5856
  "transition": props.transition,
5757
5857
  "tag": "div",
5758
- "class": ['v-messages', textColorClasses.value],
5759
- "style": textColorStyles.value,
5858
+ "class": ['v-messages', textColorClasses.value, props.class],
5859
+ "style": [textColorStyles.value, props.style],
5760
5860
  "role": "alert",
5761
5861
  "aria-live": "polite"
5762
5862
  }, {
@@ -6052,6 +6152,7 @@
6052
6152
  },
6053
6153
  'onClick:prepend': EventProp(),
6054
6154
  'onClick:append': EventProp(),
6155
+ ...makeComponentProps(),
6055
6156
  ...makeDensityProps(),
6056
6157
  ...makeValidationProps()
6057
6158
  }, 'v-input');
@@ -6119,7 +6220,8 @@
6119
6220
  const hasMessages = messages.value.length > 0;
6120
6221
  const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details);
6121
6222
  return vue.createVNode("div", {
6122
- "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value]
6223
+ "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value, props.class],
6224
+ "style": props.style
6123
6225
  }, [hasPrepend && vue.createVNode("div", {
6124
6226
  "key": "prepend",
6125
6227
  "class": "v-input__prepend"
@@ -6162,6 +6264,7 @@
6162
6264
  type: [Number, String],
6163
6265
  default: 0
6164
6266
  },
6267
+ ...makeComponentProps(),
6165
6268
  ...makeTransitionProps({
6166
6269
  transition: {
6167
6270
  component: VSlideYTransition
@@ -6179,7 +6282,8 @@
6179
6282
  "transition": props.transition
6180
6283
  }, {
6181
6284
  default: () => [vue.withDirectives(vue.createVNode("div", {
6182
- "class": "v-counter"
6285
+ "class": ['v-counter', props.class],
6286
+ "style": props.style
6183
6287
  }, [slots.default ? slots.default({
6184
6288
  counter: counter.value,
6185
6289
  max: props.max,
@@ -6382,7 +6486,8 @@
6382
6486
  'v-text-field--prefixed': props.prefix,
6383
6487
  'v-text-field--suffixed': props.suffix,
6384
6488
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
6385
- }]
6489
+ }, props.class],
6490
+ "style": props.style
6386
6491
  }, rootAttrs, inputProps, {
6387
6492
  "focused": isFocused.value
6388
6493
  }), {
@@ -6498,6 +6603,7 @@
6498
6603
  type: String,
6499
6604
  default: 'VSelectionControl'
6500
6605
  },
6606
+ ...makeComponentProps(),
6501
6607
  ...makeSelectionControlGroupProps()
6502
6608
  },
6503
6609
  emits: {
@@ -6545,7 +6651,8 @@
6545
6651
  useRender(() => vue.createVNode("div", {
6546
6652
  "class": ['v-selection-control-group', {
6547
6653
  'v-selection-control-group--inline': props.inline
6548
- }],
6654
+ }, props.class],
6655
+ "style": props.style,
6549
6656
  "role": props.type === 'radio' ? 'radiogroup' : undefined
6550
6657
  }, [slots.default?.()]));
6551
6658
  return {};
@@ -6559,6 +6666,7 @@
6559
6666
  trueValue: null,
6560
6667
  falseValue: null,
6561
6668
  value: null,
6669
+ ...makeComponentProps(),
6562
6670
  ...makeSelectionControlGroupProps()
6563
6671
  }, 'v-selection-control');
6564
6672
  function useSelectionControl(props) {
@@ -6673,8 +6781,10 @@
6673
6781
  'v-selection-control--focused': isFocused.value,
6674
6782
  'v-selection-control--focus-visible': isFocusVisible.value,
6675
6783
  'v-selection-control--inline': props.inline
6676
- }, densityClasses.value]
6677
- }, rootAttrs), [vue.createVNode("div", {
6784
+ }, densityClasses.value, props.class]
6785
+ }, rootAttrs, {
6786
+ "style": props.style
6787
+ }), [vue.createVNode("div", {
6678
6788
  "class": ['v-selection-control__wrapper', textColorClasses.value],
6679
6789
  "style": textColorStyles.value
6680
6790
  }, [slots.default?.(), vue.withDirectives(vue.createVNode("div", {
@@ -6756,7 +6866,8 @@
6756
6866
  useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
6757
6867
  "modelValue": model.value,
6758
6868
  "onUpdate:modelValue": [$event => model.value = $event, onChange],
6759
- "class": "v-checkbox-btn",
6869
+ "class": ['v-checkbox-btn', props.class],
6870
+ "style": props.style,
6760
6871
  "type": "checkbox",
6761
6872
  "inline": true,
6762
6873
  "falseIcon": falseIcon.value,
@@ -6796,10 +6907,11 @@
6796
6907
  const [inputProps, _1] = VInput.filterProps(props);
6797
6908
  const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6798
6909
  return vue.createVNode(VInput, vue.mergeProps({
6799
- "class": "v-checkbox"
6910
+ "class": ['v-checkbox', props.class]
6800
6911
  }, inputAttrs, inputProps, {
6801
6912
  "id": id.value,
6802
- "focused": isFocused.value
6913
+ "focused": isFocused.value,
6914
+ "style": props.style
6803
6915
  }), {
6804
6916
  ...slots,
6805
6917
  default: _ref2 => {
@@ -6830,6 +6942,7 @@
6830
6942
  end: Boolean,
6831
6943
  icon: IconValue,
6832
6944
  image: String,
6945
+ ...makeComponentProps(),
6833
6946
  ...makeDensityProps(),
6834
6947
  ...makeRoundedProps(),
6835
6948
  ...makeSizeProps(),
@@ -6868,8 +6981,8 @@
6868
6981
  "class": ['v-avatar', {
6869
6982
  'v-avatar--start': props.start,
6870
6983
  'v-avatar--end': props.end
6871
- }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
6872
- "style": [colorStyles.value, sizeStyles.value]
6984
+ }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6985
+ "style": [colorStyles.value, sizeStyles.value, props.style]
6873
6986
  }, {
6874
6987
  default: () => [props.image ? vue.createVNode(VImg, {
6875
6988
  "key": "image",
@@ -6897,6 +7010,7 @@
6897
7010
  type: Function,
6898
7011
  default: deepEqual
6899
7012
  },
7013
+ ...makeComponentProps(),
6900
7014
  ...makeGroupProps({
6901
7015
  selectedClass: 'v-chip--selected'
6902
7016
  }),
@@ -6934,7 +7048,8 @@
6934
7048
  useRender(() => vue.createVNode(props.tag, {
6935
7049
  "class": ['v-chip-group', {
6936
7050
  'v-chip-group--column': props.column
6937
- }, themeClasses.value]
7051
+ }, themeClasses.value, props.class],
7052
+ "style": props.style
6938
7053
  }, {
6939
7054
  default: () => [slots.default?.({
6940
7055
  isSelected,
@@ -6948,8 +7063,6 @@
6948
7063
  }
6949
7064
  });
6950
7065
 
6951
- // Types
6952
-
6953
7066
  const VChip = genericComponent()({
6954
7067
  name: 'VChip',
6955
7068
  directives: {
@@ -6994,6 +7107,7 @@
6994
7107
  onClick: EventProp(),
6995
7108
  onClickOnce: EventProp(),
6996
7109
  ...makeBorderProps(),
7110
+ ...makeComponentProps(),
6997
7111
  ...makeDensityProps(),
6998
7112
  ...makeElevationProps(),
6999
7113
  ...makeGroupItemProps(),
@@ -7086,8 +7200,8 @@
7086
7200
  'v-chip--link': isClickable.value,
7087
7201
  'v-chip--filter': hasFilter,
7088
7202
  'v-chip--pill': props.pill
7089
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value],
7090
- "style": [hasColor ? colorStyles.value : undefined],
7203
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value, props.class],
7204
+ "style": [hasColor ? colorStyles.value : undefined, props.style],
7091
7205
  "disabled": props.disabled || undefined,
7092
7206
  "draggable": props.draggable,
7093
7207
  "href": link.href.value,
@@ -7196,6 +7310,7 @@
7196
7310
  length: [Number, String],
7197
7311
  thickness: [Number, String],
7198
7312
  vertical: Boolean,
7313
+ ...makeComponentProps(),
7199
7314
  ...makeThemeProps()
7200
7315
  },
7201
7316
  setup(props, _ref) {
@@ -7224,8 +7339,8 @@
7224
7339
  'v-divider': true,
7225
7340
  'v-divider--inset': props.inset,
7226
7341
  'v-divider--vertical': props.vertical
7227
- }, themeClasses.value, textColorClasses.value],
7228
- "style": [dividerStyles.value, textColorStyles.value],
7342
+ }, themeClasses.value, textColorClasses.value, props.class],
7343
+ "style": [dividerStyles.value, textColorStyles.value, props.style],
7229
7344
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
7230
7345
  "role": `${attrs.role || 'separator'}`
7231
7346
  }, null));
@@ -7724,6 +7839,7 @@
7724
7839
  fluid: Boolean,
7725
7840
  subgroup: Boolean,
7726
7841
  value: null,
7842
+ ...makeComponentProps(),
7727
7843
  ...makeTagProps()
7728
7844
  }, 'v-list-group');
7729
7845
  const VListGroup = genericComponent()({
@@ -7772,7 +7888,8 @@
7772
7888
  'v-list-group--fluid': props.fluid,
7773
7889
  'v-list-group--subgroup': props.subgroup,
7774
7890
  'v-list-group--open': isOpen.value
7775
- }]
7891
+ }, props.class],
7892
+ "style": props.style
7776
7893
  }, {
7777
7894
  default: () => [slots.activator && vue.createVNode(VDefaultsProvider, {
7778
7895
  "defaults": activatorDefaults.value
@@ -7839,6 +7956,7 @@
7839
7956
  onClick: EventProp(),
7840
7957
  onClickOnce: EventProp(),
7841
7958
  ...makeBorderProps(),
7959
+ ...makeComponentProps(),
7842
7960
  ...makeDensityProps(),
7843
7961
  ...makeDimensionProps(),
7844
7962
  ...makeElevationProps(),
@@ -7949,8 +8067,8 @@
7949
8067
  'v-list-item--nav': props.nav,
7950
8068
  'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,
7951
8069
  [`${props.activeClass}`]: props.activeClass && isActive.value
7952
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value],
7953
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value],
8070
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
8071
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, props.style],
7954
8072
  "href": link.href.value,
7955
8073
  "tabindex": isClickable.value ? 0 : undefined,
7956
8074
  "onClick": onClick,
@@ -8043,6 +8161,7 @@
8043
8161
  inset: Boolean,
8044
8162
  sticky: Boolean,
8045
8163
  title: String,
8164
+ ...makeComponentProps(),
8046
8165
  ...makeTagProps()
8047
8166
  },
8048
8167
  setup(props, _ref) {
@@ -8059,10 +8178,10 @@
8059
8178
  "class": ['v-list-subheader', {
8060
8179
  'v-list-subheader--inset': props.inset,
8061
8180
  'v-list-subheader--sticky': props.sticky
8062
- }, textColorClasses.value],
8063
- "style": {
8181
+ }, textColorClasses.value, props.class],
8182
+ "style": [{
8064
8183
  textColorStyles
8065
- }
8184
+ }, props.style]
8066
8185
  }, {
8067
8186
  default: () => [hasText && vue.createVNode("div", {
8068
8187
  "class": "v-list-subheader__text"
@@ -8282,6 +8401,7 @@
8282
8401
  openStrategy: 'list'
8283
8402
  }),
8284
8403
  ...makeBorderProps(),
8404
+ ...makeComponentProps(),
8285
8405
  ...makeDensityProps(),
8286
8406
  ...makeDimensionProps(),
8287
8407
  ...makeElevationProps(),
@@ -8383,27 +8503,8 @@
8383
8503
  e.preventDefault();
8384
8504
  }
8385
8505
  function focus(location) {
8386
- if (!contentRef.value) return;
8387
- const targets = ['button', '[href]', 'input', 'select', 'textarea', '[tabindex]'].map(s => `${s}:not([tabindex="-1"])`).join(', ');
8388
- const focusable = [...contentRef.value.querySelectorAll(targets)].filter(el => !el.hasAttribute('disabled'));
8389
- const idx = focusable.indexOf(document.activeElement);
8390
- if (!location) {
8391
- if (!contentRef.value.contains(document.activeElement)) {
8392
- focusable[0]?.focus();
8393
- }
8394
- } else if (location === 'first') {
8395
- focusable[0]?.focus();
8396
- } else if (location === 'last') {
8397
- focusable.at(-1)?.focus();
8398
- } else {
8399
- let el;
8400
- let idxx = idx;
8401
- const inc = location === 'next' ? 1 : -1;
8402
- do {
8403
- idxx += inc;
8404
- el = focusable[idxx];
8405
- } while ((!el || el.offsetParent == null) && idxx < focusable.length && idxx >= 0);
8406
- if (el) el.focus();else focus(location === 'next' ? 'first' : 'last');
8506
+ if (contentRef.value) {
8507
+ return focusChild(contentRef.value, location);
8407
8508
  }
8408
8509
  }
8409
8510
  useRender(() => {
@@ -8412,8 +8513,8 @@
8412
8513
  "class": ['v-list', {
8413
8514
  'v-list--disabled': props.disabled,
8414
8515
  'v-list--nav': props.nav
8415
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value],
8416
- "style": [backgroundColorStyles.value, dimensionStyles.value],
8516
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class],
8517
+ "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
8417
8518
  "role": "listbox",
8418
8519
  "aria-activedescendant": undefined,
8419
8520
  "onFocusin": onFocusin,
@@ -8441,6 +8542,7 @@
8441
8542
  props: {
8442
8543
  start: Boolean,
8443
8544
  end: Boolean,
8545
+ ...makeComponentProps(),
8444
8546
  ...makeTagProps()
8445
8547
  },
8446
8548
  setup(props, _ref) {
@@ -8451,7 +8553,8 @@
8451
8553
  "class": ['v-list-item-action', {
8452
8554
  'v-list-item-action--start': props.start,
8453
8555
  'v-list-item-action--end': props.end
8454
- }]
8556
+ }, props.class],
8557
+ "style": props.style
8455
8558
  }, slots));
8456
8559
  return {};
8457
8560
  }
@@ -8462,6 +8565,7 @@
8462
8565
  props: {
8463
8566
  start: Boolean,
8464
8567
  end: Boolean,
8568
+ ...makeComponentProps(),
8465
8569
  ...makeTagProps()
8466
8570
  },
8467
8571
  setup(props, _ref) {
@@ -8473,7 +8577,8 @@
8473
8577
  "class": ['v-list-item-media', {
8474
8578
  'v-list-item-media--start': props.start,
8475
8579
  'v-list-item-media--end': props.end
8476
- }]
8580
+ }, props.class],
8581
+ "style": props.style
8477
8582
  }, slots);
8478
8583
  });
8479
8584
  return {};
@@ -9714,6 +9819,7 @@
9714
9819
  default: 2000
9715
9820
  },
9716
9821
  ...makeActivatorProps(),
9822
+ ...makeComponentProps(),
9717
9823
  ...makeDimensionProps(),
9718
9824
  ...makeLazyProps(),
9719
9825
  ...makeLocationStrategyProps(),
@@ -9881,10 +9987,10 @@
9881
9987
  'v-overlay--absolute': props.absolute || props.contained,
9882
9988
  'v-overlay--active': isActive.value,
9883
9989
  'v-overlay--contained': props.contained
9884
- }, themeClasses.value, rtlClasses.value],
9990
+ }, themeClasses.value, rtlClasses.value, props.class],
9885
9991
  "style": [stackStyles.value, {
9886
9992
  top: convertToUnit(top.value)
9887
- }],
9993
+ }, props.style],
9888
9994
  "ref": root
9889
9995
  }, scopeId, attrs), [vue.createVNode(Scrim, vue.mergeProps({
9890
9996
  "color": scrimColor,
@@ -9990,7 +10096,8 @@
9990
10096
  const [overlayProps] = VOverlay.filterProps(props);
9991
10097
  return vue.createVNode(VOverlay, vue.mergeProps({
9992
10098
  "ref": overlay,
9993
- "class": ['v-menu']
10099
+ "class": ['v-menu', props.class],
10100
+ "style": props.style
9994
10101
  }, overlayProps, {
9995
10102
  "modelValue": isActive.value,
9996
10103
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -10209,7 +10316,8 @@
10209
10316
  'v-select--chips': !!props.chips,
10210
10317
  [`v-select--${props.multiple ? 'multiple' : 'single'}`]: true,
10211
10318
  'v-select--selected': model.value.length
10212
- }],
10319
+ }, props.class],
10320
+ "style": props.style,
10213
10321
  "appendInnerIcon": props.menuIcon,
10214
10322
  "readonly": true,
10215
10323
  "placeholder": placeholder,
@@ -10652,7 +10760,8 @@
10652
10760
  'v-autocomplete--selecting-index': selectionIndex.value > -1,
10653
10761
  [`v-autocomplete--${props.multiple ? 'multiple' : 'single'}`]: true,
10654
10762
  'v-autocomplete--selection-slot': !!slots.selection
10655
- }],
10763
+ }, props.class],
10764
+ "style": props.style,
10656
10765
  "appendInnerIcon": props.menuIcon,
10657
10766
  "readonly": props.readonly,
10658
10767
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -10766,8 +10875,6 @@
10766
10875
  }
10767
10876
  });
10768
10877
 
10769
- // Types
10770
-
10771
10878
  const VBadge = genericComponent()({
10772
10879
  name: 'VBadge',
10773
10880
  inheritAttrs: false,
@@ -10791,6 +10898,7 @@
10791
10898
  offsetX: [Number, String],
10792
10899
  offsetY: [Number, String],
10793
10900
  textColor: String,
10901
+ ...makeComponentProps(),
10794
10902
  ...makeLocationProps({
10795
10903
  location: 'top end'
10796
10904
  }),
@@ -10835,8 +10943,10 @@
10835
10943
  'v-badge--dot': props.dot,
10836
10944
  'v-badge--floating': props.floating,
10837
10945
  'v-badge--inline': props.inline
10838
- }]
10839
- }, attrs), {
10946
+ }, props.class]
10947
+ }, attrs, {
10948
+ "style": props.style
10949
+ }), {
10840
10950
  default: () => [vue.createVNode("div", {
10841
10951
  "class": "v-badge__wrapper"
10842
10952
  }, [ctx.slots.default?.(), vue.createVNode(MaybeTransition, {
@@ -10863,7 +10973,8 @@
10863
10973
  name: 'VBannerActions',
10864
10974
  props: {
10865
10975
  color: String,
10866
- density: String
10976
+ density: String,
10977
+ ...makeComponentProps()
10867
10978
  },
10868
10979
  setup(props, _ref) {
10869
10980
  let {
@@ -10877,7 +10988,8 @@
10877
10988
  }
10878
10989
  });
10879
10990
  useRender(() => vue.createVNode("div", {
10880
- "class": "v-banner-actions"
10991
+ "class": ['v-banner-actions', props.class],
10992
+ "style": props.style
10881
10993
  }, [slots.default?.()]));
10882
10994
  return {};
10883
10995
  }
@@ -10898,6 +11010,7 @@
10898
11010
  sticky: Boolean,
10899
11011
  text: String,
10900
11012
  ...makeBorderProps(),
11013
+ ...makeComponentProps(),
10901
11014
  ...makeDensityProps(),
10902
11015
  ...makeDimensionProps(),
10903
11016
  ...makeElevationProps(),
@@ -10955,8 +11068,8 @@
10955
11068
  'v-banner--stacked': props.stacked || mobile.value,
10956
11069
  'v-banner--sticky': props.sticky,
10957
11070
  [`v-banner--${props.lines}-line`]: !!props.lines
10958
- }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value],
10959
- "style": [dimensionStyles.value, locationStyles.value],
11071
+ }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11072
+ "style": [dimensionStyles.value, locationStyles.value, props.style],
10960
11073
  "role": "banner"
10961
11074
  }, {
10962
11075
  default: () => [hasPrepend && vue.createVNode("div", {
@@ -11012,6 +11125,7 @@
11012
11125
  default: true
11013
11126
  },
11014
11127
  ...makeBorderProps(),
11128
+ ...makeComponentProps(),
11015
11129
  ...makeDensityProps(),
11016
11130
  ...makeElevationProps(),
11017
11131
  ...makeRoundedProps(),
@@ -11086,11 +11200,11 @@
11086
11200
  'v-bottom-navigation--active': isActive.value,
11087
11201
  'v-bottom-navigation--grow': props.grow,
11088
11202
  'v-bottom-navigation--shift': props.mode === 'shift'
11089
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value],
11203
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
11090
11204
  "style": [backgroundColorStyles.value, layoutItemStyles.value, {
11091
11205
  height: convertToUnit(height.value),
11092
11206
  transform: `translateY(${convertToUnit(!isActive.value ? 100 : 0, '%')})`
11093
- }, ssrBootStyles.value]
11207
+ }, ssrBootStyles.value, props.style]
11094
11208
  }, {
11095
11209
  default: () => [slots.default && vue.createVNode("div", {
11096
11210
  "class": "v-bottom-navigation__content"
@@ -11104,14 +11218,16 @@
11104
11218
  const VBreadcrumbsDivider = genericComponent()({
11105
11219
  name: 'VBreadcrumbsDivider',
11106
11220
  props: {
11107
- divider: [Number, String]
11221
+ divider: [Number, String],
11222
+ ...makeComponentProps()
11108
11223
  },
11109
11224
  setup(props, _ref) {
11110
11225
  let {
11111
11226
  slots
11112
11227
  } = _ref;
11113
11228
  useRender(() => vue.createVNode("li", {
11114
- "class": "v-breadcrumbs-divider"
11229
+ "class": ['v-breadcrumbs-divider', props.class],
11230
+ "style": props.style
11115
11231
  }, [slots?.default?.() ?? props.divider]));
11116
11232
  return {};
11117
11233
  }
@@ -11126,6 +11242,7 @@
11126
11242
  color: String,
11127
11243
  disabled: Boolean,
11128
11244
  title: String,
11245
+ ...makeComponentProps(),
11129
11246
  ...makeRouterProps(),
11130
11247
  ...makeTagProps({
11131
11248
  tag: 'li'
@@ -11151,8 +11268,8 @@
11151
11268
  'v-breadcrumbs-item--disabled': props.disabled,
11152
11269
  'v-breadcrumbs-item--link': link.isLink.value,
11153
11270
  [`${props.activeClass}`]: isActive.value && props.activeClass
11154
- }, textColorClasses.value],
11155
- "style": [textColorStyles.value],
11271
+ }, textColorClasses.value, props.class],
11272
+ "style": [textColorStyles.value, props.style],
11156
11273
  "href": link.href.value,
11157
11274
  "aria-current": isActive.value ? 'page' : undefined,
11158
11275
  "onClick": link.navigate
@@ -11183,6 +11300,7 @@
11183
11300
  type: Array,
11184
11301
  default: () => []
11185
11302
  },
11303
+ ...makeComponentProps(),
11186
11304
  ...makeDensityProps(),
11187
11305
  ...makeRoundedProps(),
11188
11306
  ...makeTagProps({
@@ -11214,11 +11332,22 @@
11214
11332
  disabled: vue.toRef(props, 'disabled')
11215
11333
  }
11216
11334
  });
11335
+ const items = vue.computed(() => props.items.map(item => {
11336
+ return typeof item === 'string' ? {
11337
+ item: {
11338
+ title: item
11339
+ },
11340
+ raw: item
11341
+ } : {
11342
+ item,
11343
+ raw: item
11344
+ };
11345
+ }));
11217
11346
  useRender(() => {
11218
11347
  const hasPrepend = !!(slots.prepend || props.icon);
11219
11348
  return vue.createVNode(props.tag, {
11220
- "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
11221
- "style": backgroundColorStyles.value
11349
+ "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value, props.class],
11350
+ "style": [backgroundColorStyles.value, props.style]
11222
11351
  }, {
11223
11352
  default: () => [hasPrepend && vue.createVNode("div", {
11224
11353
  "key": "prepend",
@@ -11236,33 +11365,36 @@
11236
11365
  start: true
11237
11366
  }
11238
11367
  }
11239
- }, slots.prepend)]), props.items.map((item, index, array) => vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
11240
- "key": index,
11241
- "disabled": index >= array.length - 1
11242
- }, typeof item === 'string' ? {
11243
- title: item
11244
- } : item), {
11245
- default: slots.title ? () => slots.title?.({
11246
- item,
11247
- index
11248
- }) : undefined
11249
- }), index < array.length - 1 && vue.createVNode(VBreadcrumbsDivider, null, {
11250
- default: slots.divider ? () => slots.divider?.({
11368
+ }, slots.prepend)]), items.value.map((_ref2, index, array) => {
11369
+ let {
11251
11370
  item,
11252
- index
11253
- }) : undefined
11254
- })])), slots.default?.()]
11371
+ raw
11372
+ } = _ref2;
11373
+ return vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
11374
+ "key": item.title,
11375
+ "disabled": index >= array.length - 1
11376
+ }, item), {
11377
+ default: slots.title ? () => slots.title?.({
11378
+ item: raw,
11379
+ index
11380
+ }) : undefined
11381
+ }), index < array.length - 1 && vue.createVNode(VBreadcrumbsDivider, null, {
11382
+ default: slots.divider ? () => slots.divider?.({
11383
+ item: raw,
11384
+ index
11385
+ }) : undefined
11386
+ })]);
11387
+ }), slots.default?.()]
11255
11388
  });
11256
11389
  });
11257
11390
  return {};
11258
11391
  }
11259
11392
  });
11260
11393
 
11261
- // Types
11262
-
11263
- const VCardActions = defineComponent({
11394
+ const VCardActions = genericComponent()({
11264
11395
  name: 'VCardActions',
11265
- setup(_, _ref) {
11396
+ props: makeComponentProps(),
11397
+ setup(props, _ref) {
11266
11398
  let {
11267
11399
  slots
11268
11400
  } = _ref;
@@ -11272,7 +11404,8 @@
11272
11404
  }
11273
11405
  });
11274
11406
  useRender(() => vue.createVNode("div", {
11275
- "class": "v-card-actions"
11407
+ "class": ['v-card-actions', props.class],
11408
+ "style": props.style
11276
11409
  }, [slots.default?.()]));
11277
11410
  return {};
11278
11411
  }
@@ -11282,8 +11415,6 @@
11282
11415
 
11283
11416
  const VCardTitle = createSimpleFunctional('v-card-title');
11284
11417
 
11285
- // Types
11286
-
11287
11418
  const VCardItem = genericComponent()({
11288
11419
  name: 'VCardItem',
11289
11420
  props: {
@@ -11293,6 +11424,7 @@
11293
11424
  prependIcon: IconValue,
11294
11425
  subtitle: String,
11295
11426
  title: String,
11427
+ ...makeComponentProps(),
11296
11428
  ...makeDensityProps()
11297
11429
  },
11298
11430
  setup(props, _ref) {
@@ -11307,7 +11439,8 @@
11307
11439
  const hasTitle = !!(props.title || slots.title);
11308
11440
  const hasSubtitle = !!(props.subtitle || slots.subtitle);
11309
11441
  return vue.createVNode("div", {
11310
- "class": "v-card-item"
11442
+ "class": ['v-card-item', props.class],
11443
+ "style": props.style
11311
11444
  }, [hasPrepend && vue.createVNode("div", {
11312
11445
  "key": "prepend",
11313
11446
  "class": "v-card-item__prepend"
@@ -11389,8 +11522,8 @@
11389
11522
  subtitle: String,
11390
11523
  text: String,
11391
11524
  title: String,
11392
- ...makeThemeProps(),
11393
11525
  ...makeBorderProps(),
11526
+ ...makeComponentProps(),
11394
11527
  ...makeDensityProps(),
11395
11528
  ...makeDimensionProps(),
11396
11529
  ...makeElevationProps(),
@@ -11400,6 +11533,7 @@
11400
11533
  ...makeRoundedProps(),
11401
11534
  ...makeRouterProps(),
11402
11535
  ...makeTagProps(),
11536
+ ...makeThemeProps(),
11403
11537
  ...makeVariantProps({
11404
11538
  variant: 'elevated'
11405
11539
  })
@@ -11460,8 +11594,8 @@
11460
11594
  'v-card--flat': props.flat,
11461
11595
  'v-card--hover': props.hover && !(props.disabled || props.flat),
11462
11596
  'v-card--link': isClickable.value
11463
- }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
11464
- "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
11597
+ }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
11598
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
11465
11599
  "href": link.href.value,
11466
11600
  "onClick": isClickable.value && link.navigate,
11467
11601
  "tabindex": props.disabled ? -1 : undefined
@@ -11657,6 +11791,7 @@
11657
11791
  mandatory: {
11658
11792
  default: 'force'
11659
11793
  },
11794
+ ...makeComponentProps(),
11660
11795
  ...makeTagProps(),
11661
11796
  ...makeThemeProps()
11662
11797
  }, 'v-window');
@@ -11772,7 +11907,8 @@
11772
11907
  "ref": rootRef,
11773
11908
  "class": ['v-window', {
11774
11909
  'v-window--show-arrows-on-hover': props.showArrows === 'hover'
11775
- }, themeClasses.value]
11910
+ }, themeClasses.value, props.class],
11911
+ "style": props.style
11776
11912
  }, {
11777
11913
  default: () => [vue.createVNode("div", {
11778
11914
  "class": "v-window__container",
@@ -11857,10 +11993,10 @@
11857
11993
  "class": ['v-carousel', {
11858
11994
  'v-carousel--hide-delimiter-background': props.hideDelimiterBackground,
11859
11995
  'v-carousel--vertical-delimiters': props.verticalDelimiters
11860
- }],
11861
- "style": {
11996
+ }, props.class],
11997
+ "style": [{
11862
11998
  height: convertToUnit(props.height)
11863
- },
11999
+ }, props.style],
11864
12000
  "continuous": true,
11865
12001
  "mandatory": "force",
11866
12002
  "showArrows": props.showArrows
@@ -11926,6 +12062,7 @@
11926
12062
  type: [Boolean, String],
11927
12063
  default: undefined
11928
12064
  },
12065
+ ...makeComponentProps(),
11929
12066
  ...makeGroupItemProps(),
11930
12067
  ...makeLazyProps()
11931
12068
  },
@@ -12012,7 +12149,8 @@
12012
12149
  "disabled": !isBooted.value
12013
12150
  }, {
12014
12151
  default: () => [vue.withDirectives(vue.createVNode("div", {
12015
- "class": ['v-window-item', groupItem.selectedClass.value]
12152
+ "class": ['v-window-item', groupItem.selectedClass.value, props.class],
12153
+ "style": props.style
12016
12154
  }, [hasContent.value && slots.default?.()]), [[vue.vShow, groupItem.isSelected.value]])]
12017
12155
  }));
12018
12156
  return {};
@@ -12025,7 +12163,8 @@
12025
12163
  name: 'VCarouselItem',
12026
12164
  inheritAttrs: false,
12027
12165
  props: {
12028
- value: null
12166
+ value: null,
12167
+ ...makeComponentProps()
12029
12168
  },
12030
12169
  setup(props, _ref) {
12031
12170
  let {
@@ -12033,7 +12172,8 @@
12033
12172
  attrs
12034
12173
  } = _ref;
12035
12174
  useRender(() => vue.createVNode(VWindowItem, {
12036
- "class": "v-carousel-item",
12175
+ "class": ['v-carousel-item', props.class],
12176
+ "style": props.style,
12037
12177
  "value": props.value
12038
12178
  }, {
12039
12179
  default: () => [vue.createVNode(VImg, attrs, slots)]
@@ -12046,6 +12186,7 @@
12046
12186
  const makeVSheetProps = propsFactory({
12047
12187
  color: String,
12048
12188
  ...makeBorderProps(),
12189
+ ...makeComponentProps(),
12049
12190
  ...makeDimensionProps(),
12050
12191
  ...makeElevationProps(),
12051
12192
  ...makeLocationProps(),
@@ -12089,8 +12230,8 @@
12089
12230
  roundedClasses
12090
12231
  } = useRounded(props);
12091
12232
  useRender(() => vue.createVNode(props.tag, {
12092
- "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value],
12093
- "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value]
12233
+ "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, props.class],
12234
+ "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value, props.style]
12094
12235
  }, slots));
12095
12236
  return {};
12096
12237
  }
@@ -12116,7 +12257,8 @@
12116
12257
  width: {
12117
12258
  type: [Number, String],
12118
12259
  default: 300
12119
- }
12260
+ },
12261
+ ...makeComponentProps()
12120
12262
  },
12121
12263
  emits: {
12122
12264
  'update:color': color => true,
@@ -12261,7 +12403,8 @@
12261
12403
  vue.onMounted(() => updateCanvas());
12262
12404
  useRender(() => vue.createVNode("div", {
12263
12405
  "ref": resizeRef,
12264
- "class": "v-color-picker-canvas",
12406
+ "class": ['v-color-picker-canvas', props.class],
12407
+ "style": props.style,
12265
12408
  "onClick": handleClick,
12266
12409
  "onMousedown": handleMouseDown,
12267
12410
  "onTouchstart": handleMouseDown
@@ -12494,7 +12637,8 @@
12494
12637
  type: Array,
12495
12638
  default: () => Object.keys(modes),
12496
12639
  validator: v => Array.isArray(v) && v.every(m => Object.keys(modes).includes(m))
12497
- }
12640
+ },
12641
+ ...makeComponentProps()
12498
12642
  },
12499
12643
  emits: {
12500
12644
  'update:color': color => true,
@@ -12534,7 +12678,8 @@
12534
12678
  });
12535
12679
  });
12536
12680
  useRender(() => vue.createVNode("div", {
12537
- "class": "v-color-picker-edit"
12681
+ "class": ['v-color-picker-edit', props.class],
12682
+ "style": props.style
12538
12683
  }, [inputs.value?.map(props => vue.createVNode(VColorPickerInput, props, null)), enabledModes.value.length > 1 && vue.createVNode(VBtn, {
12539
12684
  "icon": "$unfold",
12540
12685
  "size": "x-small",
@@ -12853,7 +12998,8 @@
12853
12998
  ripple: {
12854
12999
  type: Boolean,
12855
13000
  default: true
12856
- }
13001
+ },
13002
+ ...makeComponentProps()
12857
13003
  },
12858
13004
  emits: {
12859
13005
  'update:modelValue': v => true
@@ -12931,11 +13077,11 @@
12931
13077
  "class": ['v-slider-thumb', {
12932
13078
  'v-slider-thumb--focused': props.focused,
12933
13079
  'v-slider-thumb--pressed': props.focused && mousePressed.value
12934
- }],
12935
- "style": {
13080
+ }, props.class],
13081
+ "style": [{
12936
13082
  '--v-slider-thumb-position': positionPercentage,
12937
13083
  '--v-slider-thumb-size': convertToUnit(thumbSize.value)
12938
- },
13084
+ }, props.style],
12939
13085
  "role": "slider",
12940
13086
  "tabindex": disabled.value ? -1 : 0,
12941
13087
  "aria-valuemin": props.min,
@@ -12981,7 +13127,8 @@
12981
13127
  stop: {
12982
13128
  type: Number,
12983
13129
  required: true
12984
- }
13130
+ },
13131
+ ...makeComponentProps()
12985
13132
  },
12986
13133
  emits: {},
12987
13134
  setup(props, _ref) {
@@ -13056,12 +13203,12 @@
13056
13203
  });
13057
13204
  useRender(() => {
13058
13205
  return vue.createVNode("div", {
13059
- "class": ['v-slider-track', roundedClasses.value],
13060
- "style": {
13206
+ "class": ['v-slider-track', roundedClasses.value, props.class],
13207
+ "style": [{
13061
13208
  '--v-slider-track-size': convertToUnit(trackSize.value),
13062
13209
  '--v-slider-tick-size': convertToUnit(tickSize.value),
13063
13210
  direction: !vertical.value ? horizontalDirection.value : undefined
13064
- }
13211
+ }, props.style]
13065
13212
  }, [vue.createVNode("div", {
13066
13213
  "class": ['v-slider-track__background', trackColorClasses.value, {
13067
13214
  'v-slider-track__background--opacity': !!color.value || !trackFillColor.value
@@ -13164,7 +13311,8 @@
13164
13311
  'v-slider--focused': isFocused.value,
13165
13312
  'v-slider--pressed': mousePressed.value,
13166
13313
  'v-slider--disabled': props.disabled
13167
- }]
13314
+ }, props.class],
13315
+ "style": props.style
13168
13316
  }, inputProps, {
13169
13317
  "focused": isFocused.value
13170
13318
  }), {
@@ -13227,7 +13375,8 @@
13227
13375
  type: Object
13228
13376
  },
13229
13377
  disabled: Boolean,
13230
- hideAlpha: Boolean
13378
+ hideAlpha: Boolean,
13379
+ ...makeComponentProps()
13231
13380
  },
13232
13381
  emits: {
13233
13382
  'update:color': color => true
@@ -13239,7 +13388,8 @@
13239
13388
  useRender(() => vue.createVNode("div", {
13240
13389
  "class": ['v-color-picker-preview', {
13241
13390
  'v-color-picker-preview--hide-alpha': props.hideAlpha
13242
- }]
13391
+ }, props.class],
13392
+ "style": props.style
13243
13393
  }, [vue.createVNode("div", {
13244
13394
  "class": "v-color-picker-preview__dot"
13245
13395
  }, [vue.createVNode("div", {
@@ -13620,7 +13770,8 @@
13620
13770
  },
13621
13771
  disabled: Boolean,
13622
13772
  color: Object,
13623
- maxHeight: [Number, String]
13773
+ maxHeight: [Number, String],
13774
+ ...makeComponentProps()
13624
13775
  },
13625
13776
  emits: {
13626
13777
  'update:color': color => true
@@ -13630,10 +13781,10 @@
13630
13781
  emit
13631
13782
  } = _ref;
13632
13783
  useRender(() => vue.createVNode("div", {
13633
- "class": "v-color-picker-swatches",
13634
- "style": {
13784
+ "class": ['v-color-picker-swatches', props.class],
13785
+ "style": [{
13635
13786
  maxHeight: convertToUnit(props.maxHeight)
13636
- }
13787
+ }, props.style]
13637
13788
  }, [vue.createVNode("div", null, [props.swatches.map(swatch => vue.createVNode("div", {
13638
13789
  "class": "v-color-picker-swatches__swatch"
13639
13790
  }, [swatch.map(color => {
@@ -13737,13 +13888,13 @@
13737
13888
  "rounded": props.rounded,
13738
13889
  "elevation": props.elevation,
13739
13890
  "theme": props.theme,
13740
- "class": ['v-color-picker'],
13741
- "style": {
13891
+ "class": ['v-color-picker', props.class],
13892
+ "style": [{
13742
13893
  '--v-color-picker-color-hsv': HSVtoCSS({
13743
13894
  ...(currentColor.value ?? nullColor),
13744
13895
  a: 1
13745
13896
  })
13746
- }
13897
+ }, props.style]
13747
13898
  }, sheetProps, {
13748
13899
  "maxWidth": props.width
13749
13900
  }), {
@@ -14054,7 +14205,8 @@
14054
14205
  'v-combobox--chips': !!props.chips,
14055
14206
  'v-combobox--selecting-index': selectionIndex.value > -1,
14056
14207
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
14057
- }],
14208
+ }, props.class],
14209
+ "style": props.style,
14058
14210
  "appendInnerIcon": props.items.length ? props.menuIcon : undefined,
14059
14211
  "readonly": props.readonly,
14060
14212
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -14211,7 +14363,7 @@
14211
14363
  ![document, overlay.value.contentEl].includes(after) &&
14212
14364
  // It isn't inside the dialog body
14213
14365
  !overlay.value.contentEl.contains(after)) {
14214
- 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"]'));
14366
+ const focusable = focusableChildren(overlay.value.contentEl);
14215
14367
  if (!focusable.length) return;
14216
14368
  const firstElement = focusable[0];
14217
14369
  const lastElement = focusable[focusable.length - 1];
@@ -14252,7 +14404,8 @@
14252
14404
  "class": ['v-dialog', {
14253
14405
  'v-dialog--fullscreen': props.fullscreen,
14254
14406
  'v-dialog--scrollable': props.scrollable
14255
- }]
14407
+ }, props.class],
14408
+ "style": props.style
14256
14409
  }, overlayProps, {
14257
14410
  "modelValue": isActive.value,
14258
14411
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -14291,6 +14444,7 @@
14291
14444
  validator: v => allowedVariants.includes(v)
14292
14445
  },
14293
14446
  readonly: Boolean,
14447
+ ...makeComponentProps(),
14294
14448
  ...makeGroupProps(),
14295
14449
  ...makeTagProps(),
14296
14450
  ...makeThemeProps()
@@ -14316,7 +14470,8 @@
14316
14470
  }
14317
14471
  });
14318
14472
  useRender(() => vue.createVNode(props.tag, {
14319
- "class": ['v-expansion-panels', themeClasses.value, variantClass.value]
14473
+ "class": ['v-expansion-panels', themeClasses.value, variantClass.value, props.class],
14474
+ "style": props.style
14320
14475
  }, slots));
14321
14476
  return {};
14322
14477
  }
@@ -14345,6 +14500,7 @@
14345
14500
  Ripple
14346
14501
  },
14347
14502
  props: {
14503
+ ...makeComponentProps(),
14348
14504
  ...makeVExpansionPanelTitleProps()
14349
14505
  },
14350
14506
  setup(props, _ref) {
@@ -14367,8 +14523,8 @@
14367
14523
  useRender(() => vue.withDirectives(vue.createVNode("button", {
14368
14524
  "class": ['v-expansion-panel-title', {
14369
14525
  'v-expansion-panel-title--active': expansionPanel.isSelected.value
14370
- }, backgroundColorClasses.value],
14371
- "style": backgroundColorStyles.value,
14526
+ }, backgroundColorClasses.value, props.class],
14527
+ "style": [backgroundColorStyles.value, props.style],
14372
14528
  "type": "button",
14373
14529
  "tabindex": expansionPanel.disabled.value ? -1 : undefined,
14374
14530
  "disabled": expansionPanel.disabled.value,
@@ -14388,6 +14544,7 @@
14388
14544
  const VExpansionPanelText = genericComponent()({
14389
14545
  name: 'VExpansionPanelText',
14390
14546
  props: {
14547
+ ...makeComponentProps(),
14391
14548
  ...makeLazyProps()
14392
14549
  },
14393
14550
  setup(props, _ref) {
@@ -14404,7 +14561,8 @@
14404
14561
  "onAfterLeave": onAfterLeave
14405
14562
  }, {
14406
14563
  default: () => [vue.withDirectives(vue.createVNode("div", {
14407
- "class": "v-expansion-panel-text"
14564
+ "class": ['v-expansion-panel-text', props.class],
14565
+ "style": props.style
14408
14566
  }, [slots.default && hasContent.value && vue.createVNode("div", {
14409
14567
  "class": "v-expansion-panel-text__wrapper"
14410
14568
  }, [slots.default?.()])]), [[vue.vShow, expansionPanel.isSelected.value]])]
@@ -14419,6 +14577,7 @@
14419
14577
  title: String,
14420
14578
  text: String,
14421
14579
  bgColor: String,
14580
+ ...makeComponentProps(),
14422
14581
  ...makeElevationProps(),
14423
14582
  ...makeGroupItemProps(),
14424
14583
  ...makeLazyProps(),
@@ -14467,8 +14626,8 @@
14467
14626
  'v-expansion-panel--before-active': isBeforeSelected.value,
14468
14627
  'v-expansion-panel--after-active': isAfterSelected.value,
14469
14628
  'v-expansion-panel--disabled': isDisabled.value
14470
- }, roundedClasses.value, backgroundColorClasses.value],
14471
- "style": backgroundColorStyles.value,
14629
+ }, roundedClasses.value, backgroundColorClasses.value, props.class],
14630
+ "style": [backgroundColorStyles.value, props.style],
14472
14631
  "aria-expanded": groupItem.isSelected.value
14473
14632
  }, {
14474
14633
  default: () => [vue.createVNode("div", {
@@ -14618,7 +14777,8 @@
14618
14777
  "ref": vInputRef,
14619
14778
  "modelValue": model.value,
14620
14779
  "onUpdate:modelValue": $event => model.value = $event,
14621
- "class": "v-file-input",
14780
+ "class": ['v-file-input', props.class],
14781
+ "style": props.style,
14622
14782
  "onClick:prepend": onClickPrepend
14623
14783
  }, rootAttrs, inputProps, {
14624
14784
  "focused": isFocused.value
@@ -14710,6 +14870,7 @@
14710
14870
  default: 'auto'
14711
14871
  },
14712
14872
  ...makeBorderProps(),
14873
+ ...makeComponentProps(),
14713
14874
  ...makeElevationProps(),
14714
14875
  ...makeLayoutItemProps(),
14715
14876
  ...makeRoundedProps(),
@@ -14759,8 +14920,8 @@
14759
14920
  });
14760
14921
  useRender(() => vue.createVNode(props.tag, {
14761
14922
  "ref": resizeRef,
14762
- "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
14763
- "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined]
14923
+ "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
14924
+ "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined, props.style]
14764
14925
  }, slots));
14765
14926
  return {};
14766
14927
  }
@@ -14771,6 +14932,7 @@
14771
14932
  const VForm = genericComponent()({
14772
14933
  name: 'VForm',
14773
14934
  props: {
14935
+ ...makeComponentProps(),
14774
14936
  ...makeFormProps()
14775
14937
  },
14776
14938
  emits: {
@@ -14809,7 +14971,8 @@
14809
14971
  }
14810
14972
  useRender(() => vue.createVNode("form", {
14811
14973
  "ref": formRef,
14812
- "class": "v-form",
14974
+ "class": ['v-form', props.class],
14975
+ "style": props.style,
14813
14976
  "novalidate": true,
14814
14977
  "onReset": onReset,
14815
14978
  "onSubmit": onSubmit
@@ -14825,6 +14988,7 @@
14825
14988
  type: Boolean,
14826
14989
  default: false
14827
14990
  },
14991
+ ...makeComponentProps(),
14828
14992
  ...makeTagProps()
14829
14993
  },
14830
14994
  setup(props, _ref) {
@@ -14834,7 +14998,8 @@
14834
14998
  useRender(() => vue.createVNode(props.tag, {
14835
14999
  "class": ['v-container', {
14836
15000
  'v-container--fluid': props.fluid
14837
- }]
15001
+ }, props.class],
15002
+ "style": props.style
14838
15003
  }, slots));
14839
15004
  return {};
14840
15005
  }
@@ -14925,6 +15090,7 @@
14925
15090
  default: null,
14926
15091
  validator: str => ALIGN_SELF_VALUES.includes(str)
14927
15092
  },
15093
+ ...makeComponentProps(),
14928
15094
  ...makeTagProps()
14929
15095
  },
14930
15096
  setup(props, _ref) {
@@ -14955,7 +15121,8 @@
14955
15121
  return classList;
14956
15122
  });
14957
15123
  return () => vue.h(props.tag, {
14958
- class: classes.value
15124
+ class: [classes.value, props.class],
15125
+ style: props.style
14959
15126
  }, slots.default?.());
14960
15127
  }
14961
15128
  });
@@ -15041,6 +15208,7 @@
15041
15208
  validator: alignContentValidator
15042
15209
  },
15043
15210
  ...alignContentProps,
15211
+ ...makeComponentProps(),
15044
15212
  ...makeTagProps()
15045
15213
  },
15046
15214
  setup(props, _ref) {
@@ -15069,7 +15237,8 @@
15069
15237
  return classList;
15070
15238
  });
15071
15239
  return () => vue.h(props.tag, {
15072
- class: ['v-row', classes.value]
15240
+ class: ['v-row', classes.value, props.class],
15241
+ style: props.style
15073
15242
  }, slots.default?.());
15074
15243
  }
15075
15244
  });
@@ -15113,6 +15282,7 @@
15113
15282
  const VItemGroup = genericComponent()({
15114
15283
  name: 'VItemGroup',
15115
15284
  props: {
15285
+ ...makeComponentProps(),
15116
15286
  ...makeGroupProps({
15117
15287
  selectedClass: 'v-item--selected'
15118
15288
  }),
@@ -15137,7 +15307,8 @@
15137
15307
  selected
15138
15308
  } = useGroup(props, VItemGroupSymbol);
15139
15309
  return () => vue.createVNode(props.tag, {
15140
- "class": ['v-item-group', themeClasses.value]
15310
+ "class": ['v-item-group', themeClasses.value, props.class],
15311
+ "style": props.style
15141
15312
  }, {
15142
15313
  default: () => [slots.default?.({
15143
15314
  isSelected,
@@ -15187,7 +15358,10 @@
15187
15358
 
15188
15359
  const VLayout = genericComponent()({
15189
15360
  name: 'VLayout',
15190
- props: makeLayoutProps(),
15361
+ props: {
15362
+ ...makeComponentProps(),
15363
+ ...makeLayoutProps()
15364
+ },
15191
15365
  setup(props, _ref) {
15192
15366
  let {
15193
15367
  slots
@@ -15201,8 +15375,8 @@
15201
15375
  } = createLayout(props);
15202
15376
  useRender(() => vue.createVNode("div", {
15203
15377
  "ref": layoutRef,
15204
- "class": layoutClasses.value,
15205
- "style": layoutStyles.value
15378
+ "class": [layoutClasses.value, props.class],
15379
+ "style": [layoutStyles.value, props.style]
15206
15380
  }, [slots.default?.()]));
15207
15381
  return {
15208
15382
  getLayoutItem,
@@ -15225,6 +15399,7 @@
15225
15399
  default: 300
15226
15400
  },
15227
15401
  modelValue: Boolean,
15402
+ ...makeComponentProps(),
15228
15403
  ...makeLayoutItemProps()
15229
15404
  },
15230
15405
  setup(props, _ref) {
@@ -15243,8 +15418,8 @@
15243
15418
  absolute: vue.toRef(props, 'absolute')
15244
15419
  });
15245
15420
  return () => vue.createVNode("div", {
15246
- "class": ['v-layout-item'],
15247
- "style": layoutItemStyles.value
15421
+ "class": ['v-layout-item', props.class],
15422
+ "style": [layoutItemStyles.value, props.style]
15248
15423
  }, [slots.default?.()]);
15249
15424
  }
15250
15425
  });
@@ -15268,6 +15443,7 @@
15268
15443
  threshold: undefined
15269
15444
  })
15270
15445
  },
15446
+ ...makeComponentProps(),
15271
15447
  ...makeDimensionProps(),
15272
15448
  ...makeTagProps(),
15273
15449
  ...makeTransitionProps({
@@ -15290,8 +15466,8 @@
15290
15466
  isActive.value = isIntersecting;
15291
15467
  }
15292
15468
  useRender(() => vue.withDirectives(vue.createVNode(props.tag, {
15293
- "class": "v-lazy",
15294
- "style": dimensionStyles.value
15469
+ "class": ['v-lazy', props.class],
15470
+ "style": [dimensionStyles.value, props.style]
15295
15471
  }, {
15296
15472
  default: () => [isActive.value && vue.createVNode(MaybeTransition, {
15297
15473
  "transition": props.transition,
@@ -15316,7 +15492,8 @@
15316
15492
  rtl: {
15317
15493
  type: Boolean,
15318
15494
  default: undefined
15319
- }
15495
+ },
15496
+ ...makeComponentProps()
15320
15497
  },
15321
15498
  setup(props, _ref) {
15322
15499
  let {
@@ -15326,7 +15503,8 @@
15326
15503
  rtlClasses
15327
15504
  } = provideLocale(props);
15328
15505
  useRender(() => vue.createVNode("div", {
15329
- "class": ['v-locale-provider', rtlClasses.value]
15506
+ "class": ['v-locale-provider', rtlClasses.value, props.class],
15507
+ "style": props.style
15330
15508
  }, [slots.default?.()]));
15331
15509
  return {};
15332
15510
  }
@@ -15336,6 +15514,7 @@
15336
15514
  name: 'VMain',
15337
15515
  props: {
15338
15516
  scrollable: Boolean,
15517
+ ...makeComponentProps(),
15339
15518
  ...makeTagProps({
15340
15519
  tag: 'main'
15341
15520
  })
@@ -15353,8 +15532,8 @@
15353
15532
  useRender(() => vue.createVNode(props.tag, {
15354
15533
  "class": ['v-main', {
15355
15534
  'v-main--scrollable': props.scrollable
15356
- }],
15357
- "style": [mainStyles.value, ssrBootStyles.value]
15535
+ }, props.class],
15536
+ "style": [mainStyles.value, ssrBootStyles.value, props.style]
15358
15537
  }, {
15359
15538
  default: () => [props.scrollable ? vue.createVNode("div", {
15360
15539
  "class": "v-main__scroller"
@@ -15364,593 +15543,167 @@
15364
15543
  }
15365
15544
  });
15366
15545
 
15367
- // Utilities
15368
-
15369
- // Types
15370
-
15371
- function getWeekArray(date) {
15372
- let currentWeek = [];
15373
- const weeks = [];
15374
- const firstDayOfMonth = startOfMonth(date);
15375
- const lastDayOfMonth = endOfMonth(date);
15376
- for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
15377
- currentWeek.push(null);
15546
+ function useSticky(_ref) {
15547
+ let {
15548
+ rootEl,
15549
+ isSticky,
15550
+ layoutItemStyles
15551
+ } = _ref;
15552
+ const isStuck = vue.ref(false);
15553
+ const stuckPosition = vue.ref(0);
15554
+ const stickyStyles = vue.computed(() => {
15555
+ const side = typeof isStuck.value === 'boolean' ? 'top' : isStuck.value;
15556
+ return [isSticky.value ? {
15557
+ top: 'auto',
15558
+ bottom: 'auto',
15559
+ height: undefined
15560
+ } : undefined, isStuck.value ? {
15561
+ [side]: convertToUnit(stuckPosition.value)
15562
+ } : {
15563
+ top: layoutItemStyles.value.top
15564
+ }];
15565
+ });
15566
+ vue.onMounted(() => {
15567
+ vue.watch(isSticky, val => {
15568
+ if (val) {
15569
+ window.addEventListener('scroll', onScroll, {
15570
+ passive: true
15571
+ });
15572
+ } else {
15573
+ window.removeEventListener('scroll', onScroll);
15574
+ }
15575
+ }, {
15576
+ immediate: true
15577
+ });
15578
+ });
15579
+ vue.onBeforeUnmount(() => {
15580
+ document.removeEventListener('scroll', onScroll);
15581
+ });
15582
+ let lastScrollTop = 0;
15583
+ function onScroll() {
15584
+ const direction = lastScrollTop > window.scrollY ? 'up' : 'down';
15585
+ const rect = rootEl.value.getBoundingClientRect();
15586
+ const layoutTop = parseFloat(layoutItemStyles.value.top ?? 0);
15587
+ const top = window.scrollY - Math.max(0, stuckPosition.value - layoutTop);
15588
+ const bottom = rect.height + Math.max(stuckPosition.value, layoutTop) - window.scrollY - window.innerHeight;
15589
+ if (rect.height < window.innerHeight - layoutTop) {
15590
+ isStuck.value = 'top';
15591
+ stuckPosition.value = layoutTop;
15592
+ } else if (direction === 'up' && isStuck.value === 'bottom' || direction === 'down' && isStuck.value === 'top') {
15593
+ stuckPosition.value = window.scrollY + rect.top;
15594
+ isStuck.value = true;
15595
+ } else if (direction === 'down' && bottom <= 0) {
15596
+ stuckPosition.value = 0;
15597
+ isStuck.value = 'bottom';
15598
+ } else if (direction === 'up' && top <= 0) {
15599
+ stuckPosition.value = rect.top + top;
15600
+ isStuck.value = 'top';
15601
+ }
15602
+ lastScrollTop = window.scrollY;
15378
15603
  }
15379
- for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
15380
- const day = new Date(date.getFullYear(), date.getMonth(), i);
15604
+ return {
15605
+ isStuck,
15606
+ stickyStyles
15607
+ };
15608
+ }
15381
15609
 
15382
- // Add the day to the current week
15383
- currentWeek.push(day);
15610
+ const HORIZON = 100; // ms
15611
+ const HISTORY = 20; // number of samples to keep
15384
15612
 
15385
- // If the current week has 7 days, add it to the weeks array and start a new week
15386
- if (currentWeek.length === 7) {
15387
- weeks.push(currentWeek);
15388
- currentWeek = [];
15613
+ /** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */
15614
+ function kineticEnergyToVelocity(work) {
15615
+ const sqrt2 = 1.41421356237;
15616
+ return (work < 0 ? -1.0 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;
15617
+ }
15618
+
15619
+ /**
15620
+ * Returns pointer velocity in px/s
15621
+ */
15622
+ function calculateImpulseVelocity(samples) {
15623
+ // The input should be in reversed time order (most recent sample at index i=0)
15624
+ if (samples.length < 2) {
15625
+ // if 0 or 1 points, velocity is zero
15626
+ return 0;
15627
+ }
15628
+ // if (samples[1].t > samples[0].t) {
15629
+ // // Algorithm will still work, but not perfectly
15630
+ // consoleWarn('Samples provided to calculateImpulseVelocity in the wrong order')
15631
+ // }
15632
+ if (samples.length === 2) {
15633
+ // if 2 points, basic linear calculation
15634
+ if (samples[1].t === samples[0].t) {
15635
+ // consoleWarn(`Events have identical time stamps t=${samples[0].t}, setting velocity = 0`)
15636
+ return 0;
15389
15637
  }
15638
+ return (samples[1].d - samples[0].d) / (samples[1].t - samples[0].t);
15390
15639
  }
15391
- for (let i = currentWeek.length; i < 7; i++) {
15392
- currentWeek.push(null);
15640
+ // Guaranteed to have at least 3 points here
15641
+ // start with the oldest sample and go forward in time
15642
+ let work = 0;
15643
+ for (let i = samples.length - 1; i > 0; i--) {
15644
+ if (samples[i].t === samples[i - 1].t) {
15645
+ // consoleWarn(`Events have identical time stamps t=${samples[i].t}, skipping sample`)
15646
+ continue;
15647
+ }
15648
+ const vprev = kineticEnergyToVelocity(work); // v[i-1]
15649
+ const vcurr = (samples[i].d - samples[i - 1].d) / (samples[i].t - samples[i - 1].t); // v[i]
15650
+ work += (vcurr - vprev) * Math.abs(vcurr);
15651
+ if (i === samples.length - 1) {
15652
+ work *= 0.5;
15653
+ }
15393
15654
  }
15394
- weeks.push(currentWeek);
15395
- return weeks;
15396
- }
15397
- function startOfMonth(date) {
15398
- return new Date(date.getFullYear(), date.getMonth(), 1);
15399
- }
15400
- function endOfMonth(date) {
15401
- return new Date(date.getFullYear(), date.getMonth() + 1, 0);
15655
+ return kineticEnergyToVelocity(work) * 1000;
15402
15656
  }
15403
- function date(value) {
15404
- if (value == null) return null;
15405
- if (value instanceof Date) return value;
15406
- if (typeof value === 'string') {
15407
- const parsed = Date.parse(value);
15408
- if (!isNaN(parsed)) return new Date(parsed);
15657
+ function useVelocity() {
15658
+ const touches = {};
15659
+ function addMovement(e) {
15660
+ Array.from(e.changedTouches).forEach(touch => {
15661
+ const samples = touches[touch.identifier] ?? (touches[touch.identifier] = new CircularBuffer(HISTORY));
15662
+ samples.push([e.timeStamp, touch]);
15663
+ });
15409
15664
  }
15410
- return null;
15411
- }
15412
- const firstDay = {
15413
- '001': 1,
15414
- AD: 1,
15415
- AE: 6,
15416
- AF: 6,
15417
- AG: 0,
15418
- AI: 1,
15419
- AL: 1,
15420
- AM: 1,
15421
- AN: 1,
15422
- AR: 1,
15423
- AS: 0,
15424
- AT: 1,
15425
- AU: 0,
15426
- AX: 1,
15427
- AZ: 1,
15428
- BA: 1,
15429
- BD: 0,
15430
- BE: 1,
15431
- BG: 1,
15432
- BH: 6,
15433
- BM: 1,
15434
- BN: 1,
15435
- BR: 0,
15436
- BS: 0,
15437
- BT: 0,
15438
- BW: 0,
15439
- BY: 1,
15440
- BZ: 0,
15441
- CA: 0,
15442
- CH: 1,
15443
- CL: 1,
15444
- CM: 1,
15445
- CN: 0,
15446
- CO: 0,
15447
- CR: 1,
15448
- CY: 1,
15449
- CZ: 1,
15450
- DE: 1,
15451
- DJ: 6,
15452
- DK: 1,
15453
- DM: 0,
15454
- DO: 0,
15455
- DZ: 6,
15456
- EC: 1,
15457
- EE: 1,
15458
- EG: 6,
15459
- ES: 1,
15460
- ET: 0,
15461
- FI: 1,
15462
- FJ: 1,
15463
- FO: 1,
15464
- FR: 1,
15465
- GB: 1,
15466
- 'GB-alt-variant': 0,
15467
- GE: 1,
15468
- GF: 1,
15469
- GP: 1,
15470
- GR: 1,
15471
- GT: 0,
15472
- GU: 0,
15473
- HK: 0,
15474
- HN: 0,
15475
- HR: 1,
15476
- HU: 1,
15477
- ID: 0,
15478
- IE: 1,
15479
- IL: 0,
15480
- IN: 0,
15481
- IQ: 6,
15482
- IR: 6,
15483
- IS: 1,
15484
- IT: 1,
15485
- JM: 0,
15486
- JO: 6,
15487
- JP: 0,
15488
- KE: 0,
15489
- KG: 1,
15490
- KH: 0,
15491
- KR: 0,
15492
- KW: 6,
15493
- KZ: 1,
15494
- LA: 0,
15495
- LB: 1,
15496
- LI: 1,
15497
- LK: 1,
15498
- LT: 1,
15499
- LU: 1,
15500
- LV: 1,
15501
- LY: 6,
15502
- MC: 1,
15503
- MD: 1,
15504
- ME: 1,
15505
- MH: 0,
15506
- MK: 1,
15507
- MM: 0,
15508
- MN: 1,
15509
- MO: 0,
15510
- MQ: 1,
15511
- MT: 0,
15512
- MV: 5,
15513
- MX: 0,
15514
- MY: 1,
15515
- MZ: 0,
15516
- NI: 0,
15517
- NL: 1,
15518
- NO: 1,
15519
- NP: 0,
15520
- NZ: 1,
15521
- OM: 6,
15522
- PA: 0,
15523
- PE: 0,
15524
- PH: 0,
15525
- PK: 0,
15526
- PL: 1,
15527
- PR: 0,
15528
- PT: 0,
15529
- PY: 0,
15530
- QA: 6,
15531
- RE: 1,
15532
- RO: 1,
15533
- RS: 1,
15534
- RU: 1,
15535
- SA: 0,
15536
- SD: 6,
15537
- SE: 1,
15538
- SG: 0,
15539
- SI: 1,
15540
- SK: 1,
15541
- SM: 1,
15542
- SV: 0,
15543
- SY: 6,
15544
- TH: 0,
15545
- TJ: 1,
15546
- TM: 1,
15547
- TR: 1,
15548
- TT: 0,
15549
- TW: 0,
15550
- UA: 1,
15551
- UM: 0,
15552
- US: 0,
15553
- UY: 1,
15554
- UZ: 1,
15555
- VA: 1,
15556
- VE: 0,
15557
- VI: 0,
15558
- VN: 1,
15559
- WS: 0,
15560
- XK: 1,
15561
- YE: 0,
15562
- ZA: 0,
15563
- ZW: 0
15564
- };
15565
- const sundayJanuarySecond2000 = new Date(2000, 0, 2);
15566
- function getWeekdays(locale) {
15567
- const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
15568
- return createRange(7).map(i => {
15569
- const weekday = new Date(sundayJanuarySecond2000);
15570
- weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
15571
- return new Intl.DateTimeFormat(locale, {
15572
- weekday: 'long'
15573
- }).format(weekday);
15574
- });
15575
- }
15576
- function format(value, formatString, locale) {
15577
- const date = new Date(value);
15578
- let options = {};
15579
- switch (formatString) {
15580
- case 'fullDateWithWeekday':
15581
- options = {
15582
- weekday: 'long',
15583
- day: 'numeric',
15584
- month: 'long',
15585
- year: 'numeric'
15586
- };
15587
- break;
15588
- case 'normalDateWithWeekday':
15589
- options = {
15590
- weekday: 'short',
15591
- day: 'numeric',
15592
- month: 'short',
15593
- year: 'numeric'
15594
- };
15595
- break;
15596
- case 'keyboardDate':
15597
- options = {};
15598
- break;
15599
- case 'monthAndDate':
15600
- options = {
15601
- month: 'long',
15602
- day: 'numeric'
15603
- };
15604
- break;
15605
- case 'monthAndYear':
15606
- options = {
15607
- month: 'long',
15608
- year: 'numeric'
15609
- };
15610
- break;
15611
- default:
15612
- options = {
15613
- timeZone: 'UTC',
15614
- timeZoneName: 'short'
15615
- };
15616
- }
15617
- return new Intl.DateTimeFormat(locale, options).format(date);
15618
- }
15619
- function addDays(date, amount) {
15620
- const d = new Date(date);
15621
- d.setDate(d.getDate() + amount);
15622
- return d;
15623
- }
15624
- function addMonths(date, amount) {
15625
- const d = new Date(date);
15626
- d.setMonth(d.getMonth() + amount);
15627
- return d;
15628
- }
15629
- function getYear(date) {
15630
- return date.getFullYear();
15631
- }
15632
- function getMonth(date) {
15633
- return date.getMonth();
15634
- }
15635
- function startOfYear(date) {
15636
- return new Date(date.getFullYear(), 0, 1);
15637
- }
15638
- function endOfYear(date) {
15639
- return new Date(date.getFullYear(), 11, 31);
15640
- }
15641
- function getMondayOfFirstWeekOfYear(year) {
15642
- return new Date(year, 0, 1);
15643
- }
15644
-
15645
- // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
15646
- function getWeek(date) {
15647
- let year = date.getFullYear();
15648
- let d1w1 = getMondayOfFirstWeekOfYear(year);
15649
- if (date < d1w1) {
15650
- year = year - 1;
15651
- d1w1 = getMondayOfFirstWeekOfYear(year);
15652
- } else {
15653
- const tv = getMondayOfFirstWeekOfYear(year + 1);
15654
- if (date >= tv) {
15655
- year = year + 1;
15656
- d1w1 = tv;
15657
- }
15658
- }
15659
- const diffTime = Math.abs(date.getTime() - d1w1.getTime());
15660
- const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
15661
- return Math.floor(diffDays / 7) + 1;
15662
- }
15663
- function isWithinRange(date, range) {
15664
- return isAfter(date, range[0]) && isBefore(date, range[1]);
15665
- }
15666
- function isValid(date) {
15667
- const d = new Date(date);
15668
- return d instanceof Date && !isNaN(d.getTime());
15669
- }
15670
- function isAfter(date, comparing) {
15671
- return date.getTime() > comparing.getTime();
15672
- }
15673
- function isBefore(date, comparing) {
15674
- return date.getTime() < comparing.getTime();
15675
- }
15676
- function isEqual(date, comparing) {
15677
- return date.getTime() === comparing.getTime();
15678
- }
15679
- function isSameDay(date, comparing) {
15680
- return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
15681
- }
15682
- function isSameMonth(date, comparing) {
15683
- return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
15684
- }
15685
- function getDiff(date, comparing, unit) {
15686
- const d = new Date(date);
15687
- const c = new Date(comparing);
15688
- if (unit === 'month') {
15689
- return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
15690
- }
15691
- return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
15692
- }
15693
- function setYear(date, year) {
15694
- const d = new Date(date);
15695
- d.setFullYear(year);
15696
- return d;
15697
- }
15698
- class VuetifyDateAdapter {
15699
- constructor() {
15700
- let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
15701
- this.locale = locale;
15702
- }
15703
- date(value) {
15704
- return date(value);
15705
- }
15706
- addDays(date, amount) {
15707
- return addDays(date, amount);
15708
- }
15709
- addMonths(date, amount) {
15710
- return addMonths(date, amount);
15711
- }
15712
- getWeekArray(date) {
15713
- return getWeekArray(date);
15714
- }
15715
- startOfMonth(date) {
15716
- return startOfMonth(date);
15717
- }
15718
- endOfMonth(date) {
15719
- return endOfMonth(date);
15720
- }
15721
- format(date, formatString) {
15722
- return format(date, formatString, this.locale);
15723
- }
15724
- isEqual(date, comparing) {
15725
- return isEqual(date, comparing);
15726
- }
15727
- isValid(date) {
15728
- return isValid(date);
15729
- }
15730
- isWithinRange(date, range) {
15731
- return isWithinRange(date, range);
15732
- }
15733
- isAfter(date, comparing) {
15734
- return isAfter(date, comparing);
15735
- }
15736
- isSameDay(date, comparing) {
15737
- return isSameDay(date, comparing);
15738
- }
15739
- isSameMonth(date, comparing) {
15740
- return isSameMonth(date, comparing);
15741
- }
15742
- setYear(date, year) {
15743
- return setYear(date, year);
15744
- }
15745
- getDiff(date, comparing, unit) {
15746
- return getDiff(date, comparing, unit);
15747
- }
15748
- getWeek(date) {
15749
- return getWeek(date);
15750
- }
15751
- getWeekdays() {
15752
- return getWeekdays(this.locale);
15753
- }
15754
- getYear(date) {
15755
- return getYear(date);
15756
- }
15757
- getMonth(date) {
15758
- return getMonth(date);
15759
- }
15760
- startOfYear(date) {
15761
- return startOfYear(date);
15762
- }
15763
- endOfYear(date) {
15764
- return endOfYear(date);
15765
- }
15766
- }
15767
-
15768
- // Composables
15769
-
15770
- // Types
15771
-
15772
- const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
15773
- function createDate(options) {
15774
- return options ?? {
15775
- adapter: VuetifyDateAdapter
15776
- };
15777
- }
15778
- function useDate(props) {
15779
- const date = vue.inject(DateAdapterSymbol);
15780
- const locale = useLocale();
15781
- if (!date) throw new Error('[Vuetify] Could not find injected date');
15782
-
15783
- // eslint-disable-next-line new-cap
15784
- const instance = new date.adapter(locale.current.value);
15785
- vue.watch(locale.current, val => {
15786
- instance.locale = val;
15787
- }, {
15788
- immediate: true
15789
- });
15790
- return instance;
15791
- }
15792
-
15793
- function useSticky(_ref) {
15794
- let {
15795
- rootEl,
15796
- isSticky,
15797
- layoutItemStyles
15798
- } = _ref;
15799
- const isStuck = vue.ref(false);
15800
- const stuckPosition = vue.ref(0);
15801
- const stickyStyles = vue.computed(() => {
15802
- const side = typeof isStuck.value === 'boolean' ? 'top' : isStuck.value;
15803
- return [isSticky.value ? {
15804
- top: 'auto',
15805
- bottom: 'auto',
15806
- height: undefined
15807
- } : undefined, isStuck.value ? {
15808
- [side]: convertToUnit(stuckPosition.value)
15809
- } : {
15810
- top: layoutItemStyles.value.top
15811
- }];
15812
- });
15813
- vue.onMounted(() => {
15814
- vue.watch(isSticky, val => {
15815
- if (val) {
15816
- window.addEventListener('scroll', onScroll, {
15817
- passive: true
15818
- });
15819
- } else {
15820
- window.removeEventListener('scroll', onScroll);
15821
- }
15822
- }, {
15823
- immediate: true
15824
- });
15825
- });
15826
- vue.onBeforeUnmount(() => {
15827
- document.removeEventListener('scroll', onScroll);
15828
- });
15829
- let lastScrollTop = 0;
15830
- function onScroll() {
15831
- const direction = lastScrollTop > window.scrollY ? 'up' : 'down';
15832
- const rect = rootEl.value.getBoundingClientRect();
15833
- const layoutTop = parseFloat(layoutItemStyles.value.top ?? 0);
15834
- const top = window.scrollY - Math.max(0, stuckPosition.value - layoutTop);
15835
- const bottom = rect.height + Math.max(stuckPosition.value, layoutTop) - window.scrollY - window.innerHeight;
15836
- if (rect.height < window.innerHeight - layoutTop) {
15837
- isStuck.value = 'top';
15838
- stuckPosition.value = layoutTop;
15839
- } else if (direction === 'up' && isStuck.value === 'bottom' || direction === 'down' && isStuck.value === 'top') {
15840
- stuckPosition.value = window.scrollY + rect.top;
15841
- isStuck.value = true;
15842
- } else if (direction === 'down' && bottom <= 0) {
15843
- stuckPosition.value = 0;
15844
- isStuck.value = 'bottom';
15845
- } else if (direction === 'up' && top <= 0) {
15846
- stuckPosition.value = rect.top + top;
15847
- isStuck.value = 'top';
15848
- }
15849
- lastScrollTop = window.scrollY;
15850
- }
15851
- return {
15852
- isStuck,
15853
- stickyStyles
15854
- };
15855
- }
15856
-
15857
- const HORIZON = 100; // ms
15858
- const HISTORY = 20; // number of samples to keep
15859
-
15860
- /** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */
15861
- function kineticEnergyToVelocity(work) {
15862
- const sqrt2 = 1.41421356237;
15863
- return (work < 0 ? -1.0 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;
15864
- }
15865
-
15866
- /**
15867
- * Returns pointer velocity in px/s
15868
- */
15869
- function calculateImpulseVelocity(samples) {
15870
- // The input should be in reversed time order (most recent sample at index i=0)
15871
- if (samples.length < 2) {
15872
- // if 0 or 1 points, velocity is zero
15873
- return 0;
15874
- }
15875
- // if (samples[1].t > samples[0].t) {
15876
- // // Algorithm will still work, but not perfectly
15877
- // consoleWarn('Samples provided to calculateImpulseVelocity in the wrong order')
15878
- // }
15879
- if (samples.length === 2) {
15880
- // if 2 points, basic linear calculation
15881
- if (samples[1].t === samples[0].t) {
15882
- // consoleWarn(`Events have identical time stamps t=${samples[0].t}, setting velocity = 0`)
15883
- return 0;
15884
- }
15885
- return (samples[1].d - samples[0].d) / (samples[1].t - samples[0].t);
15886
- }
15887
- // Guaranteed to have at least 3 points here
15888
- // start with the oldest sample and go forward in time
15889
- let work = 0;
15890
- for (let i = samples.length - 1; i > 0; i--) {
15891
- if (samples[i].t === samples[i - 1].t) {
15892
- // consoleWarn(`Events have identical time stamps t=${samples[i].t}, skipping sample`)
15893
- continue;
15894
- }
15895
- const vprev = kineticEnergyToVelocity(work); // v[i-1]
15896
- const vcurr = (samples[i].d - samples[i - 1].d) / (samples[i].t - samples[i - 1].t); // v[i]
15897
- work += (vcurr - vprev) * Math.abs(vcurr);
15898
- if (i === samples.length - 1) {
15899
- work *= 0.5;
15900
- }
15901
- }
15902
- return kineticEnergyToVelocity(work) * 1000;
15903
- }
15904
- function useVelocity() {
15905
- const touches = {};
15906
- function addMovement(e) {
15907
- Array.from(e.changedTouches).forEach(touch => {
15908
- const samples = touches[touch.identifier] ?? (touches[touch.identifier] = new CircularBuffer(HISTORY));
15909
- samples.push([e.timeStamp, touch]);
15910
- });
15911
- }
15912
- function endTouch(e) {
15913
- Array.from(e.changedTouches).forEach(touch => {
15914
- delete touches[touch.identifier];
15915
- });
15916
- }
15917
- function getVelocity(id) {
15918
- const samples = touches[id]?.values().reverse();
15919
- if (!samples) {
15920
- throw new Error(`No samples for touch id ${id}`);
15921
- }
15922
- const newest = samples[0];
15923
- const x = [];
15924
- const y = [];
15925
- for (const val of samples) {
15926
- if (newest[0] - val[0] > HORIZON) break;
15927
- x.push({
15928
- t: val[0],
15929
- d: val[1].clientX
15930
- });
15931
- y.push({
15932
- t: val[0],
15933
- d: val[1].clientY
15934
- });
15935
- }
15936
- return {
15937
- x: calculateImpulseVelocity(x),
15938
- y: calculateImpulseVelocity(y),
15939
- get direction() {
15940
- const {
15941
- x,
15942
- y
15943
- } = this;
15944
- const [absX, absY] = [Math.abs(x), Math.abs(y)];
15945
- return absX > absY && x >= 0 ? 'right' : absX > absY && x <= 0 ? 'left' : absY > absX && y >= 0 ? 'down' : absY > absX && y <= 0 ? 'up' : oops$1();
15946
- }
15947
- };
15948
- }
15949
- return {
15950
- addMovement,
15951
- endTouch,
15952
- getVelocity
15953
- };
15665
+ function endTouch(e) {
15666
+ Array.from(e.changedTouches).forEach(touch => {
15667
+ delete touches[touch.identifier];
15668
+ });
15669
+ }
15670
+ function getVelocity(id) {
15671
+ const samples = touches[id]?.values().reverse();
15672
+ if (!samples) {
15673
+ throw new Error(`No samples for touch id ${id}`);
15674
+ }
15675
+ const newest = samples[0];
15676
+ const x = [];
15677
+ const y = [];
15678
+ for (const val of samples) {
15679
+ if (newest[0] - val[0] > HORIZON) break;
15680
+ x.push({
15681
+ t: val[0],
15682
+ d: val[1].clientX
15683
+ });
15684
+ y.push({
15685
+ t: val[0],
15686
+ d: val[1].clientY
15687
+ });
15688
+ }
15689
+ return {
15690
+ x: calculateImpulseVelocity(x),
15691
+ y: calculateImpulseVelocity(y),
15692
+ get direction() {
15693
+ const {
15694
+ x,
15695
+ y
15696
+ } = this;
15697
+ const [absX, absY] = [Math.abs(x), Math.abs(y)];
15698
+ return absX > absY && x >= 0 ? 'right' : absX > absY && x <= 0 ? 'left' : absY > absX && y >= 0 ? 'down' : absY > absX && y <= 0 ? 'up' : oops$1();
15699
+ }
15700
+ };
15701
+ }
15702
+ return {
15703
+ addMovement,
15704
+ endTouch,
15705
+ getVelocity
15706
+ };
15954
15707
  }
15955
15708
  function oops$1() {
15956
15709
  throw new Error();
@@ -16126,6 +15879,7 @@
16126
15879
  },
16127
15880
  sticky: Boolean,
16128
15881
  ...makeBorderProps(),
15882
+ ...makeComponentProps(),
16129
15883
  ...makeElevationProps(),
16130
15884
  ...makeLayoutItemProps(),
16131
15885
  ...makeRoundedProps(),
@@ -16277,8 +16031,8 @@
16277
16031
  'v-navigation-drawer--temporary': isTemporary.value,
16278
16032
  'v-navigation-drawer--active': isActive.value,
16279
16033
  'v-navigation-drawer--sticky': isSticky.value
16280
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
16281
- "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value]
16034
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
16035
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
16282
16036
  }, attrs), {
16283
16037
  default: () => [hasImage && vue.createVNode("div", {
16284
16038
  "key": "image",
@@ -16407,6 +16161,7 @@
16407
16161
  },
16408
16162
  showFirstLastPage: Boolean,
16409
16163
  ...makeBorderProps(),
16164
+ ...makeComponentProps(),
16410
16165
  ...makeDensityProps(),
16411
16166
  ...makeElevationProps(),
16412
16167
  ...makeRoundedProps(),
@@ -16603,7 +16358,8 @@
16603
16358
  }
16604
16359
  useRender(() => vue.createVNode(props.tag, {
16605
16360
  "ref": resizeRef,
16606
- "class": ['v-pagination', themeClasses.value],
16361
+ "class": ['v-pagination', themeClasses.value, props.class],
16362
+ "style": props.style,
16607
16363
  "role": "navigation",
16608
16364
  "aria-label": t(props.ariaLabel),
16609
16365
  "onKeydown": onKeydown,
@@ -16662,7 +16418,8 @@
16662
16418
  scale: {
16663
16419
  type: [Number, String],
16664
16420
  default: 0.5
16665
- }
16421
+ },
16422
+ ...makeComponentProps()
16666
16423
  },
16667
16424
  setup(props, _ref) {
16668
16425
  let {
@@ -16724,7 +16481,8 @@
16724
16481
  useRender(() => vue.createVNode(VImg, {
16725
16482
  "class": ['v-parallax', {
16726
16483
  'v-parallax--active': isIntersecting.value
16727
- }],
16484
+ }, props.class],
16485
+ "style": props.style,
16728
16486
  "ref": root,
16729
16487
  "cover": true,
16730
16488
  "onLoadstart": onScroll,
@@ -16749,7 +16507,8 @@
16749
16507
  slots
16750
16508
  } = _ref;
16751
16509
  useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
16752
- "class": "v-radio",
16510
+ "class": ['v-radio', props.class],
16511
+ "style": props.style,
16753
16512
  "type": "radio"
16754
16513
  }), slots));
16755
16514
  return {};
@@ -16803,7 +16562,8 @@
16803
16562
  }
16804
16563
  }) : props.label;
16805
16564
  return vue.createVNode(VInput, vue.mergeProps({
16806
- "class": "v-radio-group"
16565
+ "class": ['v-radio-group', props.class],
16566
+ "style": props.style
16807
16567
  }, inputAttrs, inputProps, {
16808
16568
  "modelValue": model.value,
16809
16569
  "onUpdate:modelValue": $event => model.value = $event,
@@ -16941,7 +16701,8 @@
16941
16701
  'v-slider--focused': isFocused.value,
16942
16702
  'v-slider--pressed': mousePressed.value,
16943
16703
  'v-slider--disabled': props.disabled
16944
- }],
16704
+ }, props.class],
16705
+ "style": props.style,
16945
16706
  "ref": inputRef
16946
16707
  }, inputProps, {
16947
16708
  "focused": isFocused.value
@@ -17084,6 +16845,7 @@
17084
16845
  validator: v => ['top', 'bottom'].includes(v)
17085
16846
  },
17086
16847
  ripple: Boolean,
16848
+ ...makeComponentProps(),
17087
16849
  ...makeDensityProps(),
17088
16850
  ...makeSizeProps(),
17089
16851
  ...makeTagProps(),
@@ -17201,7 +16963,8 @@
17201
16963
  "class": ['v-rating', {
17202
16964
  'v-rating--hover': props.hover,
17203
16965
  'v-rating--readonly': props.readonly
17204
- }, themeClasses.value]
16966
+ }, themeClasses.value, props.class],
16967
+ "style": props.style
17205
16968
  }, {
17206
16969
  default: () => [vue.createVNode(VRatingItem, {
17207
16970
  "value": 0,
@@ -17301,6 +17064,7 @@
17301
17064
  type: [Boolean, String],
17302
17065
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
17303
17066
  },
17067
+ ...makeComponentProps(),
17304
17068
  ...makeTagProps(),
17305
17069
  ...makeGroupProps({
17306
17070
  selectedClass: 'v-slide-group-item--active'
@@ -17464,7 +17228,7 @@
17464
17228
  function focus(location) {
17465
17229
  if (!contentRef.value) return;
17466
17230
  if (!location) {
17467
- const focusable = [...contentRef.value.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')].filter(el => !el.hasAttribute('disabled'));
17231
+ const focusable = focusableChildren(contentRef.value);
17468
17232
  focusable[0]?.focus();
17469
17233
  } else if (location === 'next') {
17470
17234
  const el = contentRef.value.querySelector(':focus')?.nextElementSibling;
@@ -17541,7 +17305,8 @@
17541
17305
  'v-slide-group--vertical': !isHorizontal.value,
17542
17306
  'v-slide-group--has-affixes': hasAffixes.value,
17543
17307
  'v-slide-group--is-overflowing': isOverflowing.value
17544
- }],
17308
+ }, props.class],
17309
+ "style": props.style,
17545
17310
  "tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
17546
17311
  "onFocus": onFocus
17547
17312
  }, {
@@ -17691,7 +17456,8 @@
17691
17456
  'v-snackbar--active': isActive.value,
17692
17457
  'v-snackbar--multi-line': props.multiLine && !props.vertical,
17693
17458
  'v-snackbar--vertical': props.vertical
17694
- }, positionClasses.value]
17459
+ }, positionClasses.value, props.class],
17460
+ "style": props.style
17695
17461
  }, overlayProps, {
17696
17462
  "modelValue": isActive.value,
17697
17463
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -17791,7 +17557,8 @@
17791
17557
  'v-switch--inset': props.inset
17792
17558
  }, {
17793
17559
  'v-switch--indeterminate': indeterminate.value
17794
- }, loaderClasses.value]
17560
+ }, loaderClasses.value, props.class],
17561
+ "style": props.style
17795
17562
  }, inputAttrs, inputProps, {
17796
17563
  "id": id.value,
17797
17564
  "focused": isFocused.value
@@ -17860,6 +17627,7 @@
17860
17627
  color: String,
17861
17628
  height: [Number, String],
17862
17629
  window: Boolean,
17630
+ ...makeComponentProps(),
17863
17631
  ...makeElevationProps(),
17864
17632
  ...makeLayoutItemProps(),
17865
17633
  ...makeRoundedProps(),
@@ -17901,8 +17669,8 @@
17901
17669
  useRender(() => vue.createVNode(props.tag, {
17902
17670
  "class": ['v-system-bar', {
17903
17671
  'v-system-bar--window': props.window
17904
- }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value],
17905
- "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value]
17672
+ }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value, props.class],
17673
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, props.style]
17906
17674
  }, slots));
17907
17675
  return {};
17908
17676
  }
@@ -17975,10 +17743,10 @@
17975
17743
  useRender(() => {
17976
17744
  const [btnProps] = VBtn.filterProps(props);
17977
17745
  return vue.createVNode(VBtn, vue.mergeProps({
17978
- "_as": "VTab",
17979
17746
  "symbol": VTabsSymbol,
17980
17747
  "ref": rootEl,
17981
- "class": ['v-tab'],
17748
+ "class": ['v-tab', props.class],
17749
+ "style": props.style,
17982
17750
  "tabindex": isSelected.value ? 0 : -1,
17983
17751
  "role": "tab",
17984
17752
  "aria-selected": String(isSelected.value),
@@ -18073,10 +17841,10 @@
18073
17841
  'v-tabs--fixed-tabs': props.fixedTabs,
18074
17842
  'v-tabs--grow': props.grow,
18075
17843
  'v-tabs--stacked': props.stacked
18076
- }, densityClasses.value, backgroundColorClasses.value],
17844
+ }, densityClasses.value, backgroundColorClasses.value, props.class],
18077
17845
  "style": [{
18078
17846
  '--v-tabs-height': convertToUnit(props.height)
18079
- }, backgroundColorStyles.value],
17847
+ }, backgroundColorStyles.value, props.style],
18080
17848
  "role": "tablist",
18081
17849
  "symbol": VTabsSymbol
18082
17850
  }), {
@@ -18096,6 +17864,7 @@
18096
17864
  fixedFooter: Boolean,
18097
17865
  height: [Number, String],
18098
17866
  hover: Boolean,
17867
+ ...makeComponentProps(),
18099
17868
  ...makeDensityProps(),
18100
17869
  ...makeTagProps(),
18101
17870
  ...makeThemeProps()
@@ -18118,7 +17887,8 @@
18118
17887
  'v-table--has-top': !!slots.top,
18119
17888
  'v-table--has-bottom': !!slots.bottom,
18120
17889
  'v-table--hover': props.hover
18121
- }, themeClasses.value, densityClasses.value]
17890
+ }, themeClasses.value, densityClasses.value, props.class],
17891
+ "style": props.style
18122
17892
  }, {
18123
17893
  default: () => [slots.top?.(), slots.default ? vue.createVNode("div", {
18124
17894
  "class": "v-table__wrapper",
@@ -18283,7 +18053,8 @@
18283
18053
  'v-textarea--auto-grow': props.autoGrow,
18284
18054
  'v-textarea--no-resize': props.noResize || props.autoGrow,
18285
18055
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
18286
- }]
18056
+ }, props.class],
18057
+ "style": props.style
18287
18058
  }, rootAttrs, inputProps, {
18288
18059
  "focused": isFocused.value
18289
18060
  }), {
@@ -18367,6 +18138,7 @@
18367
18138
  name: 'VThemeProvider',
18368
18139
  props: {
18369
18140
  withBackground: Boolean,
18141
+ ...makeComponentProps(),
18370
18142
  ...makeThemeProps(),
18371
18143
  ...makeTagProps()
18372
18144
  },
@@ -18380,7 +18152,8 @@
18380
18152
  return () => {
18381
18153
  if (!props.withBackground) return slots.default?.();
18382
18154
  return vue.createVNode(props.tag, {
18383
- "class": ['v-theme-provider', themeClasses.value]
18155
+ "class": ['v-theme-provider', themeClasses.value, props.class],
18156
+ "style": props.style
18384
18157
  }, {
18385
18158
  default: () => [slots.default?.()]
18386
18159
  });
@@ -18425,6 +18198,7 @@
18425
18198
  type: String,
18426
18199
  validator: v => ['start', 'end', 'both'].includes(v)
18427
18200
  },
18201
+ ...makeComponentProps(),
18428
18202
  ...makeDensityProps(),
18429
18203
  ...makeTagProps(),
18430
18204
  ...makeThemeProps()
@@ -18468,10 +18242,10 @@
18468
18242
  useRender(() => vue.createVNode(props.tag, {
18469
18243
  "class": ['v-timeline', `v-timeline--${props.direction}`, `v-timeline--align-${props.align}`, `v-timeline--justify-${props.justify}`, truncateClasses.value, {
18470
18244
  'v-timeline--inset-line': !!props.lineInset
18471
- }, themeClasses.value, densityClasses.value, sideClasses.value],
18472
- "style": {
18245
+ }, themeClasses.value, densityClasses.value, sideClasses.value, props.class],
18246
+ "style": [{
18473
18247
  '--v-timeline-line-thickness': convertToUnit(props.lineThickness)
18474
- }
18248
+ }, props.style]
18475
18249
  }, slots));
18476
18250
  return {};
18477
18251
  }
@@ -18486,6 +18260,7 @@
18486
18260
  icon: IconValue,
18487
18261
  iconColor: String,
18488
18262
  lineColor: String,
18263
+ ...makeComponentProps(),
18489
18264
  ...makeRoundedProps(),
18490
18265
  ...makeSizeProps(),
18491
18266
  ...makeElevationProps()
@@ -18515,7 +18290,8 @@
18515
18290
  useRender(() => vue.createVNode("div", {
18516
18291
  "class": ['v-timeline-divider', {
18517
18292
  'v-timeline-divider--fill-dot': props.fillDot
18518
- }]
18293
+ }, props.class],
18294
+ "style": props.style
18519
18295
  }, [vue.createVNode("div", {
18520
18296
  "class": ['v-timeline-divider__before', lineColorClasses.value],
18521
18297
  "style": lineColorStyles.value
@@ -18565,11 +18341,12 @@
18565
18341
  icon: IconValue,
18566
18342
  iconColor: String,
18567
18343
  lineInset: [Number, String],
18568
- ...makeRoundedProps(),
18344
+ ...makeComponentProps(),
18345
+ ...makeDimensionProps(),
18569
18346
  ...makeElevationProps(),
18347
+ ...makeRoundedProps(),
18570
18348
  ...makeSizeProps(),
18571
- ...makeTagProps(),
18572
- ...makeDimensionProps()
18349
+ ...makeTagProps()
18573
18350
  },
18574
18351
  setup(props, _ref) {
18575
18352
  let {
@@ -18589,11 +18366,11 @@
18589
18366
  useRender(() => vue.createVNode("div", {
18590
18367
  "class": ['v-timeline-item', {
18591
18368
  'v-timeline-item--fill-dot': props.fillDot
18592
- }],
18593
- "style": {
18369
+ }, props.class],
18370
+ "style": [{
18594
18371
  '--v-timeline-dot-size': convertToUnit(dotSize.value),
18595
18372
  '--v-timeline-line-inset': props.lineInset ? `calc(var(--v-timeline-dot-size) / 2 + ${convertToUnit(props.lineInset)})` : convertToUnit(0)
18596
- }
18373
+ }, props.style]
18597
18374
  }, [vue.createVNode("div", {
18598
18375
  "class": "v-timeline-item__body",
18599
18376
  "style": dimensionStyles.value
@@ -18669,7 +18446,8 @@
18669
18446
  const [overlayProps] = VOverlay.filterProps(props);
18670
18447
  return vue.createVNode(VOverlay, vue.mergeProps({
18671
18448
  "ref": overlay,
18672
- "class": ['v-tooltip'],
18449
+ "class": ['v-tooltip', props.class],
18450
+ "style": props.style,
18673
18451
  "id": id.value
18674
18452
  }, overlayProps, {
18675
18453
  "modelValue": isActive.value,
@@ -18717,7 +18495,8 @@
18717
18495
  const VVirtualScrollItem = genericComponent()({
18718
18496
  name: 'VVirtualScrollItem',
18719
18497
  props: {
18720
- dynamicHeight: Boolean
18498
+ dynamicHeight: Boolean,
18499
+ ...makeComponentProps()
18721
18500
  },
18722
18501
  emits: {
18723
18502
  'update:height': height => true
@@ -18744,7 +18523,8 @@
18744
18523
  vue.onUpdated(updateHeight);
18745
18524
  useRender(() => vue.createVNode("div", {
18746
18525
  "ref": props.dynamicHeight ? resizeRef : undefined,
18747
- "class": "v-virtual-scroll__item"
18526
+ "class": ['v-virtual-scroll__item', props.class],
18527
+ "style": props.style
18748
18528
  }, [slots.default?.()]));
18749
18529
  }
18750
18530
  });
@@ -18761,7 +18541,7 @@
18761
18541
  default: () => []
18762
18542
  },
18763
18543
  itemHeight: [Number, String],
18764
- visibleItems: [Number, String],
18544
+ ...makeComponentProps(),
18765
18545
  ...makeDimensionProps()
18766
18546
  },
18767
18547
  setup(props, _ref) {
@@ -18788,7 +18568,7 @@
18788
18568
  const sizeMap = new Map();
18789
18569
  let sizes = createRange(props.items.length).map(() => itemHeight.value);
18790
18570
  const visibleItems = vue.computed(() => {
18791
- return props.visibleItems ? parseInt(props.visibleItems, 10) : Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
18571
+ return Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
18792
18572
  });
18793
18573
  function handleItemResize(index, height) {
18794
18574
  itemHeight.value = Math.max(itemHeight.value, height);
@@ -18799,20 +18579,13 @@
18799
18579
  return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0);
18800
18580
  }
18801
18581
  function calculateMidPointIndex(scrollTop) {
18802
- let start = 0;
18803
- let end = props.items.length;
18804
- while (start <= end) {
18805
- const middle = start + Math.floor((end - start) / 2);
18806
- const middleOffset = calculateOffset(middle);
18807
- if (middleOffset === scrollTop) {
18808
- return middle;
18809
- } else if (middleOffset < scrollTop) {
18810
- start = middle + 1;
18811
- } else if (middleOffset > scrollTop) {
18812
- end = middle - 1;
18813
- }
18582
+ const end = props.items.length;
18583
+ let middle = 0;
18584
+ let middleOffset = 0;
18585
+ while (middleOffset < scrollTop && middle < end) {
18586
+ middleOffset += sizes[middle++] || itemHeight.value;
18814
18587
  }
18815
- return start;
18588
+ return middle - 1;
18816
18589
  }
18817
18590
  let lastScrollTop = 0;
18818
18591
  function handleScroll() {
@@ -18834,8 +18607,12 @@
18834
18607
  const offset = calculateOffset(index);
18835
18608
  rootEl.value.scrollTop = offset;
18836
18609
  }
18610
+ const items = vue.computed(() => props.items.map((item, index) => ({
18611
+ raw: item,
18612
+ index
18613
+ })));
18837
18614
  const last = vue.computed(() => Math.min(props.items.length, first.value + visibleItems.value));
18838
- const computedItems = vue.computed(() => props.items.slice(first.value, last.value));
18615
+ const computedItems = vue.computed(() => items.value.slice(first.value, last.value));
18839
18616
  const paddingTop = vue.computed(() => calculateOffset(first.value));
18840
18617
  const paddingBottom = vue.computed(() => calculateOffset(props.items.length) - calculateOffset(last.value));
18841
18618
  const {
@@ -18860,23 +18637,23 @@
18860
18637
  });
18861
18638
  useRender(() => vue.createVNode("div", {
18862
18639
  "ref": rootEl,
18863
- "class": "v-virtual-scroll",
18640
+ "class": ['v-virtual-scroll', props.class],
18864
18641
  "onScroll": handleScroll,
18865
- "style": dimensionStyles.value
18642
+ "style": [dimensionStyles.value, props.style]
18866
18643
  }, [vue.createVNode("div", {
18867
18644
  "class": "v-virtual-scroll__container",
18868
18645
  "style": {
18869
18646
  paddingTop: convertToUnit(paddingTop.value),
18870
18647
  paddingBottom: convertToUnit(paddingBottom.value)
18871
18648
  }
18872
- }, [computedItems.value.map((item, index) => vue.createVNode(VVirtualScrollItem, {
18873
- "key": index,
18649
+ }, [computedItems.value.map(item => vue.createVNode(VVirtualScrollItem, {
18650
+ "key": item.index,
18874
18651
  "dynamicHeight": !props.itemHeight,
18875
- "onUpdate:height": height => handleItemResize(index + first.value, height)
18652
+ "onUpdate:height": height => handleItemResize(item.index, height)
18876
18653
  }, {
18877
18654
  default: () => [slots.default?.({
18878
- item,
18879
- index: index + first.value
18655
+ item: item.raw,
18656
+ index: item.index
18880
18657
  })]
18881
18658
  }))])]));
18882
18659
  return {
@@ -19310,6 +19087,17 @@
19310
19087
  backgroundColorClasses,
19311
19088
  backgroundColorStyles
19312
19089
  } = useBackgroundColor(props, 'color');
19090
+ const slotProps = vue.computed(() => ({
19091
+ headers: headers.value,
19092
+ columns: columns.value,
19093
+ toggleSort,
19094
+ sortBy: sortBy.value,
19095
+ someSelected: someSelected.value,
19096
+ allSelected: allSelected.value,
19097
+ selectAll,
19098
+ getSortIcon,
19099
+ getFixedStyles
19100
+ }));
19313
19101
  const VDataTableHeaderCell = _ref2 => {
19314
19102
  let {
19315
19103
  column,
@@ -19337,14 +19125,14 @@
19337
19125
  "noPadding": noPadding
19338
19126
  }, {
19339
19127
  default: () => {
19340
- const slotName = `column.${column.key}`;
19341
- const slotProps = {
19128
+ const columnSlotName = `column.${column.key}`;
19129
+ const columnSlotProps = {
19342
19130
  column,
19343
19131
  selectAll
19344
19132
  };
19345
- if (slots[slotName]) return slots[slotName](slotProps);
19133
+ if (slots[columnSlotName]) return slots[columnSlotName](columnSlotProps);
19346
19134
  if (column.key === 'data-table-select') {
19347
- return slots['column.data-table-select']?.(slotProps) ?? vue.createVNode(VCheckboxBtn, {
19135
+ return slots['column.data-table-select']?.(columnSlotProps) ?? vue.createVNode(VCheckboxBtn, {
19348
19136
  "modelValue": allSelected.value,
19349
19137
  "indeterminate": someSelected.value && !allSelected.value,
19350
19138
  "onUpdate:modelValue": selectAll
@@ -19364,22 +19152,24 @@
19364
19152
  }
19365
19153
  });
19366
19154
  };
19367
- useRender(() => vue.createVNode(vue.Fragment, null, [headers.value.map((row, y) => vue.createVNode("tr", null, [row.map((column, x) => vue.createVNode(VDataTableHeaderCell, {
19368
- "column": column,
19369
- "x": x,
19370
- "y": y
19371
- }, null))])), props.loading && vue.createVNode("tr", {
19372
- "class": "v-data-table__progress"
19373
- }, [vue.createVNode("th", {
19374
- "colspan": columns.value.length
19375
- }, [vue.createVNode(LoaderSlot, {
19376
- "name": "v-data-table-headers",
19377
- "active": true,
19378
- "color": typeof props.loading === 'boolean' ? undefined : props.loading,
19379
- "indeterminate": true
19380
- }, {
19381
- default: slots.loader
19382
- })])])]));
19155
+ useRender(() => {
19156
+ return vue.createVNode(vue.Fragment, null, [slots.headers ? slots.headers(slotProps.value) : headers.value.map((row, y) => vue.createVNode("tr", null, [row.map((column, x) => vue.createVNode(VDataTableHeaderCell, {
19157
+ "column": column,
19158
+ "x": x,
19159
+ "y": y
19160
+ }, null))])), props.loading && vue.createVNode("tr", {
19161
+ "class": "v-data-table__progress"
19162
+ }, [vue.createVNode("th", {
19163
+ "colspan": columns.value.length
19164
+ }, [vue.createVNode(LoaderSlot, {
19165
+ "name": "v-data-table-headers",
19166
+ "active": true,
19167
+ "color": typeof props.loading === 'boolean' ? undefined : props.loading,
19168
+ "indeterminate": true
19169
+ }, {
19170
+ default: slots.loader
19171
+ })])])]);
19172
+ });
19383
19173
  }
19384
19174
  });
19385
19175
 
@@ -19678,9 +19468,7 @@
19678
19468
  'v-data-table__tr--clickable': !!props.onClick
19679
19469
  }],
19680
19470
  "onClick": props.onClick
19681
- }, [!columns.value.length && vue.createVNode(VDataTableColumn, {
19682
- "key": "no-data"
19683
- }, slots), props.item && columns.value.map((column, i) => vue.createVNode(VDataTableColumn, {
19471
+ }, [props.item && columns.value.map((column, i) => vue.createVNode(VDataTableColumn, {
19684
19472
  "align": column.align,
19685
19473
  "fixed": column.fixed,
19686
19474
  "fixedOffset": column.fixedOffset,
@@ -19770,13 +19558,13 @@
19770
19558
  useRender(() => {
19771
19559
  if (props.loading && slots.loading) {
19772
19560
  return vue.createVNode("tr", {
19773
- "class": "v-data-table-rows-no-data",
19561
+ "class": "v-data-table-rows-loading",
19774
19562
  "key": "loading"
19775
19563
  }, [vue.createVNode("td", {
19776
19564
  "colspan": columns.value.length
19777
19565
  }, [slots.loading()])]);
19778
19566
  }
19779
- if (!props.loading && !props.items.length && !props.hideNoData && slots['no-data']) {
19567
+ if (!props.loading && !props.items.length && !props.hideNoData) {
19780
19568
  return vue.createVNode("tr", {
19781
19569
  "class": "v-data-table-rows-no-data",
19782
19570
  "key": "no-data"
@@ -20255,7 +20043,7 @@
20255
20043
  top: slots.top,
20256
20044
  default: slots.default ?? (() => vue.createVNode(vue.Fragment, null, [slots.colgroup?.({
20257
20045
  columns
20258
- }), vue.createVNode("thead", null, [slots.headers ? slots.headers() : vue.createVNode(VDataTableHeaders, {
20046
+ }), vue.createVNode("thead", null, [vue.createVNode(VDataTableHeaders, {
20259
20047
  "sticky": props.fixedHeader,
20260
20048
  "multiSort": props.multiSort
20261
20049
  }, slots)]), slots.thead?.(), vue.createVNode("tbody", null, [slots.body ? slots.body() : vue.createVNode(VDataTableRows, {
@@ -20621,7 +20409,7 @@
20621
20409
  }), vue.createVNode("thead", {
20622
20410
  "class": "v-data-table__thead",
20623
20411
  "role": "rowgroup"
20624
- }, [slots.headers ? slots.headers() : vue.createVNode(VDataTableHeaders, {
20412
+ }, [vue.createVNode(VDataTableHeaders, {
20625
20413
  "sticky": props.fixedHeader,
20626
20414
  "loading": props.loading,
20627
20415
  "color": props.color
@@ -20641,6 +20429,211 @@
20641
20429
 
20642
20430
  // Types
20643
20431
 
20432
+ const VInfiniteScrollIntersect = defineComponent({
20433
+ name: 'VInfiniteScrollIntersect',
20434
+ props: {
20435
+ side: {
20436
+ type: String,
20437
+ required: true
20438
+ },
20439
+ rootRef: null,
20440
+ rootMargin: String
20441
+ },
20442
+ emits: {
20443
+ intersect: side => true
20444
+ },
20445
+ setup(props, _ref) {
20446
+ let {
20447
+ emit
20448
+ } = _ref;
20449
+ const {
20450
+ intersectionRef,
20451
+ isIntersecting
20452
+ } = useIntersectionObserver(entries => {}, props.rootMargin ? {
20453
+ root: props.rootRef,
20454
+ rootMargin: props.rootMargin
20455
+ } : undefined);
20456
+ vue.watch(isIntersecting, async val => {
20457
+ if (val) emit('intersect', props.side);
20458
+ });
20459
+ useRender(() => vue.createVNode("div", {
20460
+ "class": "v-infinite-scroll-intersect",
20461
+ "ref": intersectionRef
20462
+ }, [vue.createTextVNode("\xA0")]));
20463
+ return {};
20464
+ }
20465
+ });
20466
+ const VInfiniteScroll = genericComponent()({
20467
+ name: 'VInfiniteScroll',
20468
+ props: {
20469
+ color: String,
20470
+ direction: {
20471
+ type: String,
20472
+ default: 'vertical',
20473
+ validator: v => ['vertical', 'horizontal'].includes(v)
20474
+ },
20475
+ side: {
20476
+ type: String,
20477
+ default: 'end',
20478
+ validator: v => ['start', 'end', 'both'].includes(v)
20479
+ },
20480
+ mode: {
20481
+ type: String,
20482
+ default: 'intersect',
20483
+ validator: v => ['intersect', 'manual'].includes(v)
20484
+ },
20485
+ margin: [Number, String],
20486
+ loadMoreText: {
20487
+ type: String,
20488
+ default: '$vuetify.infiniteScroll.loadMore'
20489
+ },
20490
+ emptyText: {
20491
+ type: String,
20492
+ default: '$vuetify.infiniteScroll.empty'
20493
+ },
20494
+ ...makeDimensionProps()
20495
+ },
20496
+ emits: {
20497
+ load: options => true
20498
+ },
20499
+ setup(props, _ref2) {
20500
+ let {
20501
+ slots,
20502
+ emit
20503
+ } = _ref2;
20504
+ const rootEl = vue.ref();
20505
+ const startStatus = vue.ref('ok');
20506
+ const endStatus = vue.ref('ok');
20507
+ const margin = vue.computed(() => convertToUnit(props.margin));
20508
+ function setScrollAmount(amount) {
20509
+ if (!rootEl.value) return;
20510
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
20511
+ rootEl.value[property] = amount;
20512
+ }
20513
+ function getScrollAmount() {
20514
+ if (!rootEl.value) return 0;
20515
+ const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft';
20516
+ return rootEl.value[property];
20517
+ }
20518
+ function getScrollSize() {
20519
+ if (!rootEl.value) return 0;
20520
+ const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth';
20521
+ return rootEl.value[property];
20522
+ }
20523
+ function getContainerSize() {
20524
+ if (!rootEl.value) return 0;
20525
+ const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth';
20526
+ return rootEl.value[property];
20527
+ }
20528
+ vue.onMounted(() => {
20529
+ if (!rootEl.value) return;
20530
+ if (props.side === 'start') {
20531
+ setScrollAmount(getScrollSize());
20532
+ } else if (props.side === 'both') {
20533
+ setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2);
20534
+ }
20535
+ });
20536
+ function setStatus(side, status) {
20537
+ if (side === 'start') {
20538
+ startStatus.value = status;
20539
+ } else if (side === 'end') {
20540
+ endStatus.value = status;
20541
+ }
20542
+ }
20543
+ function getStatus(side) {
20544
+ return side === 'start' ? startStatus.value : endStatus.value;
20545
+ }
20546
+ let previousScrollSize = 0;
20547
+ function handleIntersect(side) {
20548
+ const status = getStatus(side);
20549
+ if (!rootEl.value || status === 'loading') return;
20550
+ previousScrollSize = getScrollSize();
20551
+ setStatus(side, 'loading');
20552
+ function done(status) {
20553
+ setStatus(side, status);
20554
+ vue.nextTick(() => {
20555
+ if (status === 'ok' && side === 'start') {
20556
+ setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
20557
+ }
20558
+ });
20559
+ }
20560
+ emit('load', {
20561
+ side,
20562
+ done
20563
+ });
20564
+ }
20565
+ const {
20566
+ t
20567
+ } = useLocale();
20568
+ function renderSide(side, status) {
20569
+ if (props.side !== side && props.side !== 'both') return;
20570
+ const onClick = () => handleIntersect(side);
20571
+ const slotProps = {
20572
+ side,
20573
+ props: {
20574
+ onClick,
20575
+ color: props.color
20576
+ }
20577
+ };
20578
+ if (status === 'error') return slots.error?.(slotProps);
20579
+ if (status === 'empty') return slots.empty?.(slotProps) ?? vue.createVNode("div", null, [t(props.emptyText)]);
20580
+ if (props.mode === 'manual') {
20581
+ if (status === 'loading') {
20582
+ return slots.loading?.(slotProps) ?? vue.createVNode(VProgressCircular, {
20583
+ "indeterminate": true,
20584
+ "color": props.color
20585
+ }, null);
20586
+ }
20587
+ return slots['load-more']?.(slotProps) ?? vue.createVNode(VBtn, {
20588
+ "variant": "outlined",
20589
+ "color": props.color,
20590
+ "onClick": onClick
20591
+ }, {
20592
+ default: () => [t(props.loadMoreText)]
20593
+ });
20594
+ }
20595
+ return slots.loading?.(slotProps) ?? vue.createVNode(VProgressCircular, {
20596
+ "indeterminate": true,
20597
+ "color": props.color
20598
+ }, null);
20599
+ }
20600
+ const {
20601
+ dimensionStyles
20602
+ } = useDimension(props);
20603
+ useRender(() => {
20604
+ const hasStartIntersect = props.side === 'start' || props.side === 'both';
20605
+ const hasEndIntersect = props.side === 'end' || props.side === 'both';
20606
+ const intersectMode = props.mode === 'intersect';
20607
+ return vue.createVNode("div", {
20608
+ "ref": rootEl,
20609
+ "class": ['v-infinite-scroll', `v-infinite-scroll--${props.direction}`, {
20610
+ 'v-infinite-scroll--start': hasStartIntersect,
20611
+ 'v-infinite-scroll--end': hasEndIntersect
20612
+ }],
20613
+ "style": dimensionStyles.value
20614
+ }, [vue.createVNode("div", {
20615
+ "class": "v-infinite-scroll__side"
20616
+ }, [renderSide('start', startStatus.value)]), rootEl.value && hasStartIntersect && intersectMode && vue.createVNode(VInfiniteScrollIntersect, {
20617
+ "key": "start",
20618
+ "side": "start",
20619
+ "onIntersect": handleIntersect,
20620
+ "rootRef": rootEl.value,
20621
+ "rootMargin": margin.value
20622
+ }, null), slots.default?.(), rootEl.value && hasEndIntersect && intersectMode && vue.createVNode(VInfiniteScrollIntersect, {
20623
+ "key": "end",
20624
+ "side": "end",
20625
+ "onIntersect": handleIntersect,
20626
+ "rootRef": rootEl.value,
20627
+ "rootMargin": margin.value
20628
+ }, null), vue.createVNode("div", {
20629
+ "class": "v-infinite-scroll__side"
20630
+ }, [renderSide('end', endStatus.value)])]);
20631
+ });
20632
+ }
20633
+ });
20634
+
20635
+ // Types
20636
+
20644
20637
  const rootTypes = {
20645
20638
  actions: 'button@2',
20646
20639
  article: 'heading, paragraph',
@@ -20840,6 +20833,7 @@
20840
20833
  VHover: VHover,
20841
20834
  VIcon: VIcon,
20842
20835
  VImg: VImg,
20836
+ VInfiniteScroll: VInfiniteScroll,
20843
20837
  VInput: VInput,
20844
20838
  VItem: VItem,
20845
20839
  VItemGroup: VItemGroup,
@@ -20917,130 +20911,542 @@
20917
20911
 
20918
20912
  // Types
20919
20913
 
20920
- function mounted$2(el, binding) {
20921
- const modifiers = binding.modifiers || {};
20922
- const value = binding.value;
20923
- const {
20924
- once,
20925
- immediate,
20926
- ...modifierKeys
20927
- } = modifiers;
20928
- const defaultValue = !Object.keys(modifierKeys).length;
20929
- const {
20930
- handler,
20931
- options
20932
- } = typeof value === 'object' ? value : {
20933
- handler: value,
20934
- options: {
20935
- attributes: modifierKeys?.attr ?? defaultValue,
20936
- characterData: modifierKeys?.char ?? defaultValue,
20937
- childList: modifierKeys?.child ?? defaultValue,
20938
- subtree: modifierKeys?.sub ?? defaultValue
20914
+ function mounted$2(el, binding) {
20915
+ const modifiers = binding.modifiers || {};
20916
+ const value = binding.value;
20917
+ const {
20918
+ once,
20919
+ immediate,
20920
+ ...modifierKeys
20921
+ } = modifiers;
20922
+ const defaultValue = !Object.keys(modifierKeys).length;
20923
+ const {
20924
+ handler,
20925
+ options
20926
+ } = typeof value === 'object' ? value : {
20927
+ handler: value,
20928
+ options: {
20929
+ attributes: modifierKeys?.attr ?? defaultValue,
20930
+ characterData: modifierKeys?.char ?? defaultValue,
20931
+ childList: modifierKeys?.child ?? defaultValue,
20932
+ subtree: modifierKeys?.sub ?? defaultValue
20933
+ }
20934
+ };
20935
+ const observer = new MutationObserver(function () {
20936
+ let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
20937
+ let observer = arguments.length > 1 ? arguments[1] : undefined;
20938
+ handler?.(mutations, observer);
20939
+ if (once) unmounted$2(el, binding);
20940
+ });
20941
+ if (immediate) handler?.([], observer);
20942
+ el._mutate = Object(el._mutate);
20943
+ el._mutate[binding.instance.$.uid] = {
20944
+ observer
20945
+ };
20946
+ observer.observe(el, options);
20947
+ }
20948
+ function unmounted$2(el, binding) {
20949
+ if (!el._mutate?.[binding.instance.$.uid]) return;
20950
+ el._mutate[binding.instance.$.uid].observer.disconnect();
20951
+ delete el._mutate[binding.instance.$.uid];
20952
+ }
20953
+ const Mutate = {
20954
+ mounted: mounted$2,
20955
+ unmounted: unmounted$2
20956
+ };
20957
+
20958
+ function mounted$1(el, binding) {
20959
+ const handler = binding.value;
20960
+ const options = {
20961
+ passive: !binding.modifiers?.active
20962
+ };
20963
+ window.addEventListener('resize', handler, options);
20964
+ el._onResize = Object(el._onResize);
20965
+ el._onResize[binding.instance.$.uid] = {
20966
+ handler,
20967
+ options
20968
+ };
20969
+ if (!binding.modifiers?.quiet) {
20970
+ handler();
20971
+ }
20972
+ }
20973
+ function unmounted$1(el, binding) {
20974
+ if (!el._onResize?.[binding.instance.$.uid]) return;
20975
+ const {
20976
+ handler,
20977
+ options
20978
+ } = el._onResize[binding.instance.$.uid];
20979
+ window.removeEventListener('resize', handler, options);
20980
+ delete el._onResize[binding.instance.$.uid];
20981
+ }
20982
+ const Resize = {
20983
+ mounted: mounted$1,
20984
+ unmounted: unmounted$1
20985
+ };
20986
+
20987
+ function mounted(el, binding) {
20988
+ const {
20989
+ self = false
20990
+ } = binding.modifiers ?? {};
20991
+ const value = binding.value;
20992
+ const options = typeof value === 'object' && value.options || {
20993
+ passive: true
20994
+ };
20995
+ const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler;
20996
+ const target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
20997
+ if (!target) return;
20998
+ target.addEventListener('scroll', handler, options);
20999
+ el._onScroll = Object(el._onScroll);
21000
+ el._onScroll[binding.instance.$.uid] = {
21001
+ handler,
21002
+ options,
21003
+ // Don't reference self
21004
+ target: self ? undefined : target
21005
+ };
21006
+ }
21007
+ function unmounted(el, binding) {
21008
+ if (!el._onScroll?.[binding.instance.$.uid]) return;
21009
+ const {
21010
+ handler,
21011
+ options,
21012
+ target = el
21013
+ } = el._onScroll[binding.instance.$.uid];
21014
+ target.removeEventListener('scroll', handler, options);
21015
+ delete el._onScroll[binding.instance.$.uid];
21016
+ }
21017
+ function updated(el, binding) {
21018
+ if (binding.value === binding.oldValue) return;
21019
+ unmounted(el, binding);
21020
+ mounted(el, binding);
21021
+ }
21022
+ const Scroll = {
21023
+ mounted,
21024
+ unmounted,
21025
+ updated
21026
+ };
21027
+
21028
+ var directives = /*#__PURE__*/Object.freeze({
21029
+ __proto__: null,
21030
+ ClickOutside: ClickOutside,
21031
+ Intersect: Intersect,
21032
+ Mutate: Mutate,
21033
+ Resize: Resize,
21034
+ Ripple: Ripple,
21035
+ Scroll: Scroll,
21036
+ Touch: Touch
21037
+ });
21038
+
21039
+ // Utilities
21040
+
21041
+ // Types
21042
+
21043
+ function getWeekArray(date) {
21044
+ let currentWeek = [];
21045
+ const weeks = [];
21046
+ const firstDayOfMonth = startOfMonth(date);
21047
+ const lastDayOfMonth = endOfMonth(date);
21048
+ for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
21049
+ currentWeek.push(null);
21050
+ }
21051
+ for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
21052
+ const day = new Date(date.getFullYear(), date.getMonth(), i);
21053
+
21054
+ // Add the day to the current week
21055
+ currentWeek.push(day);
21056
+
21057
+ // If the current week has 7 days, add it to the weeks array and start a new week
21058
+ if (currentWeek.length === 7) {
21059
+ weeks.push(currentWeek);
21060
+ currentWeek = [];
20939
21061
  }
20940
- };
20941
- const observer = new MutationObserver(function () {
20942
- let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
20943
- let observer = arguments.length > 1 ? arguments[1] : undefined;
20944
- handler?.(mutations, observer);
20945
- if (once) unmounted$2(el, binding);
21062
+ }
21063
+ for (let i = currentWeek.length; i < 7; i++) {
21064
+ currentWeek.push(null);
21065
+ }
21066
+ weeks.push(currentWeek);
21067
+ return weeks;
21068
+ }
21069
+ function startOfMonth(date) {
21070
+ return new Date(date.getFullYear(), date.getMonth(), 1);
21071
+ }
21072
+ function endOfMonth(date) {
21073
+ return new Date(date.getFullYear(), date.getMonth() + 1, 0);
21074
+ }
21075
+ function date(value) {
21076
+ if (value == null) return null;
21077
+ if (value instanceof Date) return value;
21078
+ if (typeof value === 'string') {
21079
+ const parsed = Date.parse(value);
21080
+ if (!isNaN(parsed)) return new Date(parsed);
21081
+ }
21082
+ return null;
21083
+ }
21084
+ const firstDay = {
21085
+ '001': 1,
21086
+ AD: 1,
21087
+ AE: 6,
21088
+ AF: 6,
21089
+ AG: 0,
21090
+ AI: 1,
21091
+ AL: 1,
21092
+ AM: 1,
21093
+ AN: 1,
21094
+ AR: 1,
21095
+ AS: 0,
21096
+ AT: 1,
21097
+ AU: 0,
21098
+ AX: 1,
21099
+ AZ: 1,
21100
+ BA: 1,
21101
+ BD: 0,
21102
+ BE: 1,
21103
+ BG: 1,
21104
+ BH: 6,
21105
+ BM: 1,
21106
+ BN: 1,
21107
+ BR: 0,
21108
+ BS: 0,
21109
+ BT: 0,
21110
+ BW: 0,
21111
+ BY: 1,
21112
+ BZ: 0,
21113
+ CA: 0,
21114
+ CH: 1,
21115
+ CL: 1,
21116
+ CM: 1,
21117
+ CN: 0,
21118
+ CO: 0,
21119
+ CR: 1,
21120
+ CY: 1,
21121
+ CZ: 1,
21122
+ DE: 1,
21123
+ DJ: 6,
21124
+ DK: 1,
21125
+ DM: 0,
21126
+ DO: 0,
21127
+ DZ: 6,
21128
+ EC: 1,
21129
+ EE: 1,
21130
+ EG: 6,
21131
+ ES: 1,
21132
+ ET: 0,
21133
+ FI: 1,
21134
+ FJ: 1,
21135
+ FO: 1,
21136
+ FR: 1,
21137
+ GB: 1,
21138
+ 'GB-alt-variant': 0,
21139
+ GE: 1,
21140
+ GF: 1,
21141
+ GP: 1,
21142
+ GR: 1,
21143
+ GT: 0,
21144
+ GU: 0,
21145
+ HK: 0,
21146
+ HN: 0,
21147
+ HR: 1,
21148
+ HU: 1,
21149
+ ID: 0,
21150
+ IE: 1,
21151
+ IL: 0,
21152
+ IN: 0,
21153
+ IQ: 6,
21154
+ IR: 6,
21155
+ IS: 1,
21156
+ IT: 1,
21157
+ JM: 0,
21158
+ JO: 6,
21159
+ JP: 0,
21160
+ KE: 0,
21161
+ KG: 1,
21162
+ KH: 0,
21163
+ KR: 0,
21164
+ KW: 6,
21165
+ KZ: 1,
21166
+ LA: 0,
21167
+ LB: 1,
21168
+ LI: 1,
21169
+ LK: 1,
21170
+ LT: 1,
21171
+ LU: 1,
21172
+ LV: 1,
21173
+ LY: 6,
21174
+ MC: 1,
21175
+ MD: 1,
21176
+ ME: 1,
21177
+ MH: 0,
21178
+ MK: 1,
21179
+ MM: 0,
21180
+ MN: 1,
21181
+ MO: 0,
21182
+ MQ: 1,
21183
+ MT: 0,
21184
+ MV: 5,
21185
+ MX: 0,
21186
+ MY: 1,
21187
+ MZ: 0,
21188
+ NI: 0,
21189
+ NL: 1,
21190
+ NO: 1,
21191
+ NP: 0,
21192
+ NZ: 1,
21193
+ OM: 6,
21194
+ PA: 0,
21195
+ PE: 0,
21196
+ PH: 0,
21197
+ PK: 0,
21198
+ PL: 1,
21199
+ PR: 0,
21200
+ PT: 0,
21201
+ PY: 0,
21202
+ QA: 6,
21203
+ RE: 1,
21204
+ RO: 1,
21205
+ RS: 1,
21206
+ RU: 1,
21207
+ SA: 0,
21208
+ SD: 6,
21209
+ SE: 1,
21210
+ SG: 0,
21211
+ SI: 1,
21212
+ SK: 1,
21213
+ SM: 1,
21214
+ SV: 0,
21215
+ SY: 6,
21216
+ TH: 0,
21217
+ TJ: 1,
21218
+ TM: 1,
21219
+ TR: 1,
21220
+ TT: 0,
21221
+ TW: 0,
21222
+ UA: 1,
21223
+ UM: 0,
21224
+ US: 0,
21225
+ UY: 1,
21226
+ UZ: 1,
21227
+ VA: 1,
21228
+ VE: 0,
21229
+ VI: 0,
21230
+ VN: 1,
21231
+ WS: 0,
21232
+ XK: 1,
21233
+ YE: 0,
21234
+ ZA: 0,
21235
+ ZW: 0
21236
+ };
21237
+ const sundayJanuarySecond2000 = new Date(2000, 0, 2);
21238
+ function getWeekdays(locale) {
21239
+ const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
21240
+ return createRange(7).map(i => {
21241
+ const weekday = new Date(sundayJanuarySecond2000);
21242
+ weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
21243
+ return new Intl.DateTimeFormat(locale, {
21244
+ weekday: 'long'
21245
+ }).format(weekday);
20946
21246
  });
20947
- if (immediate) handler?.([], observer);
20948
- el._mutate = Object(el._mutate);
20949
- el._mutate[binding.instance.$.uid] = {
20950
- observer
20951
- };
20952
- observer.observe(el, options);
20953
21247
  }
20954
- function unmounted$2(el, binding) {
20955
- if (!el._mutate?.[binding.instance.$.uid]) return;
20956
- el._mutate[binding.instance.$.uid].observer.disconnect();
20957
- delete el._mutate[binding.instance.$.uid];
21248
+ function format(value, formatString, locale) {
21249
+ const date = new Date(value);
21250
+ let options = {};
21251
+ switch (formatString) {
21252
+ case 'fullDateWithWeekday':
21253
+ options = {
21254
+ weekday: 'long',
21255
+ day: 'numeric',
21256
+ month: 'long',
21257
+ year: 'numeric'
21258
+ };
21259
+ break;
21260
+ case 'normalDateWithWeekday':
21261
+ options = {
21262
+ weekday: 'short',
21263
+ day: 'numeric',
21264
+ month: 'short',
21265
+ year: 'numeric'
21266
+ };
21267
+ break;
21268
+ case 'keyboardDate':
21269
+ options = {};
21270
+ break;
21271
+ case 'monthAndDate':
21272
+ options = {
21273
+ month: 'long',
21274
+ day: 'numeric'
21275
+ };
21276
+ break;
21277
+ case 'monthAndYear':
21278
+ options = {
21279
+ month: 'long',
21280
+ year: 'numeric'
21281
+ };
21282
+ break;
21283
+ default:
21284
+ options = {
21285
+ timeZone: 'UTC',
21286
+ timeZoneName: 'short'
21287
+ };
21288
+ }
21289
+ return new Intl.DateTimeFormat(locale, options).format(date);
21290
+ }
21291
+ function addDays(date, amount) {
21292
+ const d = new Date(date);
21293
+ d.setDate(d.getDate() + amount);
21294
+ return d;
21295
+ }
21296
+ function addMonths(date, amount) {
21297
+ const d = new Date(date);
21298
+ d.setMonth(d.getMonth() + amount);
21299
+ return d;
21300
+ }
21301
+ function getYear(date) {
21302
+ return date.getFullYear();
21303
+ }
21304
+ function getMonth(date) {
21305
+ return date.getMonth();
21306
+ }
21307
+ function startOfYear(date) {
21308
+ return new Date(date.getFullYear(), 0, 1);
21309
+ }
21310
+ function endOfYear(date) {
21311
+ return new Date(date.getFullYear(), 11, 31);
21312
+ }
21313
+ function getMondayOfFirstWeekOfYear(year) {
21314
+ return new Date(year, 0, 1);
20958
21315
  }
20959
- const Mutate = {
20960
- mounted: mounted$2,
20961
- unmounted: unmounted$2
20962
- };
20963
21316
 
20964
- function mounted$1(el, binding) {
20965
- const handler = binding.value;
20966
- const options = {
20967
- passive: !binding.modifiers?.active
20968
- };
20969
- window.addEventListener('resize', handler, options);
20970
- el._onResize = Object(el._onResize);
20971
- el._onResize[binding.instance.$.uid] = {
20972
- handler,
20973
- options
20974
- };
20975
- if (!binding.modifiers?.quiet) {
20976
- handler();
21317
+ // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
21318
+ function getWeek(date) {
21319
+ let year = date.getFullYear();
21320
+ let d1w1 = getMondayOfFirstWeekOfYear(year);
21321
+ if (date < d1w1) {
21322
+ year = year - 1;
21323
+ d1w1 = getMondayOfFirstWeekOfYear(year);
21324
+ } else {
21325
+ const tv = getMondayOfFirstWeekOfYear(year + 1);
21326
+ if (date >= tv) {
21327
+ year = year + 1;
21328
+ d1w1 = tv;
21329
+ }
20977
21330
  }
21331
+ const diffTime = Math.abs(date.getTime() - d1w1.getTime());
21332
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
21333
+ return Math.floor(diffDays / 7) + 1;
20978
21334
  }
20979
- function unmounted$1(el, binding) {
20980
- if (!el._onResize?.[binding.instance.$.uid]) return;
20981
- const {
20982
- handler,
20983
- options
20984
- } = el._onResize[binding.instance.$.uid];
20985
- window.removeEventListener('resize', handler, options);
20986
- delete el._onResize[binding.instance.$.uid];
21335
+ function isWithinRange(date, range) {
21336
+ return isAfter(date, range[0]) && isBefore(date, range[1]);
20987
21337
  }
20988
- const Resize = {
20989
- mounted: mounted$1,
20990
- unmounted: unmounted$1
20991
- };
20992
-
20993
- function mounted(el, binding) {
20994
- const {
20995
- self = false
20996
- } = binding.modifiers ?? {};
20997
- const value = binding.value;
20998
- const options = typeof value === 'object' && value.options || {
20999
- passive: true
21000
- };
21001
- const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler;
21002
- const target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
21003
- if (!target) return;
21004
- target.addEventListener('scroll', handler, options);
21005
- el._onScroll = Object(el._onScroll);
21006
- el._onScroll[binding.instance.$.uid] = {
21007
- handler,
21008
- options,
21009
- // Don't reference self
21010
- target: self ? undefined : target
21011
- };
21338
+ function isValid(date) {
21339
+ const d = new Date(date);
21340
+ return d instanceof Date && !isNaN(d.getTime());
21012
21341
  }
21013
- function unmounted(el, binding) {
21014
- if (!el._onScroll?.[binding.instance.$.uid]) return;
21015
- const {
21016
- handler,
21017
- options,
21018
- target = el
21019
- } = el._onScroll[binding.instance.$.uid];
21020
- target.removeEventListener('scroll', handler, options);
21021
- delete el._onScroll[binding.instance.$.uid];
21342
+ function isAfter(date, comparing) {
21343
+ return date.getTime() > comparing.getTime();
21022
21344
  }
21023
- function updated(el, binding) {
21024
- if (binding.value === binding.oldValue) return;
21025
- unmounted(el, binding);
21026
- mounted(el, binding);
21345
+ function isBefore(date, comparing) {
21346
+ return date.getTime() < comparing.getTime();
21347
+ }
21348
+ function isEqual(date, comparing) {
21349
+ return date.getTime() === comparing.getTime();
21350
+ }
21351
+ function isSameDay(date, comparing) {
21352
+ return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21353
+ }
21354
+ function isSameMonth(date, comparing) {
21355
+ return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21356
+ }
21357
+ function getDiff(date, comparing, unit) {
21358
+ const d = new Date(date);
21359
+ const c = new Date(comparing);
21360
+ if (unit === 'month') {
21361
+ return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
21362
+ }
21363
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
21364
+ }
21365
+ function setYear(date, year) {
21366
+ const d = new Date(date);
21367
+ d.setFullYear(year);
21368
+ return d;
21369
+ }
21370
+ class VuetifyDateAdapter {
21371
+ constructor() {
21372
+ let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
21373
+ this.locale = locale;
21374
+ }
21375
+ date(value) {
21376
+ return date(value);
21377
+ }
21378
+ addDays(date, amount) {
21379
+ return addDays(date, amount);
21380
+ }
21381
+ addMonths(date, amount) {
21382
+ return addMonths(date, amount);
21383
+ }
21384
+ getWeekArray(date) {
21385
+ return getWeekArray(date);
21386
+ }
21387
+ startOfMonth(date) {
21388
+ return startOfMonth(date);
21389
+ }
21390
+ endOfMonth(date) {
21391
+ return endOfMonth(date);
21392
+ }
21393
+ format(date, formatString) {
21394
+ return format(date, formatString, this.locale);
21395
+ }
21396
+ isEqual(date, comparing) {
21397
+ return isEqual(date, comparing);
21398
+ }
21399
+ isValid(date) {
21400
+ return isValid(date);
21401
+ }
21402
+ isWithinRange(date, range) {
21403
+ return isWithinRange(date, range);
21404
+ }
21405
+ isAfter(date, comparing) {
21406
+ return isAfter(date, comparing);
21407
+ }
21408
+ isSameDay(date, comparing) {
21409
+ return isSameDay(date, comparing);
21410
+ }
21411
+ isSameMonth(date, comparing) {
21412
+ return isSameMonth(date, comparing);
21413
+ }
21414
+ setYear(date, year) {
21415
+ return setYear(date, year);
21416
+ }
21417
+ getDiff(date, comparing, unit) {
21418
+ return getDiff(date, comparing, unit);
21419
+ }
21420
+ getWeek(date) {
21421
+ return getWeek(date);
21422
+ }
21423
+ getWeekdays() {
21424
+ return getWeekdays(this.locale);
21425
+ }
21426
+ getYear(date) {
21427
+ return getYear(date);
21428
+ }
21429
+ getMonth(date) {
21430
+ return getMonth(date);
21431
+ }
21432
+ startOfYear(date) {
21433
+ return startOfYear(date);
21434
+ }
21435
+ endOfYear(date) {
21436
+ return endOfYear(date);
21437
+ }
21027
21438
  }
21028
- const Scroll = {
21029
- mounted,
21030
- unmounted,
21031
- updated
21032
- };
21033
21439
 
21034
- var directives = /*#__PURE__*/Object.freeze({
21035
- __proto__: null,
21036
- ClickOutside: ClickOutside,
21037
- Intersect: Intersect,
21038
- Mutate: Mutate,
21039
- Resize: Resize,
21040
- Ripple: Ripple,
21041
- Scroll: Scroll,
21042
- Touch: Touch
21043
- });
21440
+ // Composables
21441
+
21442
+ // Types
21443
+
21444
+ const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
21445
+ function createDate(options) {
21446
+ return options ?? {
21447
+ adapter: VuetifyDateAdapter
21448
+ };
21449
+ }
21044
21450
 
21045
21451
  // Composables
21046
21452
  function createVuetify$1() {
@@ -21127,7 +21533,7 @@
21127
21533
  date
21128
21534
  };
21129
21535
  }
21130
- const version$1 = "4.0.0-dev-20230422.0";
21536
+ const version$1 = "4.0.0-dev-20230427.0";
21131
21537
  createVuetify$1.version = version$1;
21132
21538
 
21133
21539
  // Vue's inject() can only be used in setup
@@ -21139,7 +21545,7 @@
21139
21545
  }
21140
21546
  }
21141
21547
 
21142
- const version = "4.0.0-dev-20230422.0";
21548
+ const version = "4.0.0-dev-20230427.0";
21143
21549
 
21144
21550
  const createVuetify = function () {
21145
21551
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -21153,7 +21559,7 @@
21153
21559
  exports.components = components;
21154
21560
  exports.createVuetify = createVuetify;
21155
21561
  exports.directives = directives;
21156
- exports.useDate = useDate;
21562
+ exports.useDefaults = useDefaults;
21157
21563
  exports.useDisplay = useDisplay;
21158
21564
  exports.useLayout = useLayout;
21159
21565
  exports.useLocale = useLocale;