@vuetify/nightly 4.0.0-dev-20230426.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 (370) hide show
  1. package/CHANGELOG.md +10 -2
  2. package/dist/json/attributes.json +218 -194
  3. package/dist/json/importMap.json +12 -12
  4. package/dist/json/tags.json +7 -1
  5. package/dist/json/web-types.json +379 -326
  6. package/dist/vuetify-labs.css +1361 -1362
  7. package/dist/vuetify-labs.d.ts +5791 -8230
  8. package/dist/vuetify-labs.esm.js +1286 -1090
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +1285 -1089
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +29 -30
  13. package/dist/vuetify.d.ts +5991 -7516
  14. package/dist/vuetify.esm.js +1248 -1063
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +1247 -1062
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +743 -738
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/blueprints/index.d.ts +1 -1
  22. package/lib/blueprints/md1.d.ts +1 -1
  23. package/lib/blueprints/md2.d.ts +1 -1
  24. package/lib/blueprints/md3.d.ts +1 -1
  25. package/lib/components/VAlert/VAlert.mjs +6 -4
  26. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  27. package/lib/components/VAlert/index.d.ts +57 -55
  28. package/lib/components/VApp/VApp.mjs +4 -2
  29. package/lib/components/VApp/VApp.mjs.map +1 -1
  30. package/lib/components/VApp/index.d.ts +22 -13
  31. package/lib/components/VAppBar/VAppBar.mjs +3 -3
  32. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  33. package/lib/components/VAppBar/VAppBarNavIcon.mjs +7 -4
  34. package/lib/components/VAppBar/VAppBarNavIcon.mjs.map +1 -1
  35. package/lib/components/VAppBar/index.d.ts +87 -92
  36. package/lib/components/VAutocomplete/VAutocomplete.mjs +2 -1
  37. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  38. package/lib/components/VAutocomplete/index.d.ts +225 -403
  39. package/lib/components/VAvatar/VAvatar.mjs +4 -2
  40. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  41. package/lib/components/VAvatar/index.d.ts +23 -14
  42. package/lib/components/VBadge/VBadge.mjs +6 -5
  43. package/lib/components/VBadge/VBadge.mjs.map +1 -1
  44. package/lib/components/VBadge/index.d.ts +27 -22
  45. package/lib/components/VBanner/VBanner.mjs +6 -4
  46. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  47. package/lib/components/VBanner/VBannerActions.mjs +5 -2
  48. package/lib/components/VBanner/VBannerActions.mjs.map +1 -1
  49. package/lib/components/VBanner/index.d.ts +92 -66
  50. package/lib/components/VBottomNavigation/VBottomNavigation.mjs +4 -2
  51. package/lib/components/VBottomNavigation/VBottomNavigation.mjs.map +1 -1
  52. package/lib/components/VBottomNavigation/index.d.ts +22 -13
  53. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +35 -18
  54. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  55. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs +6 -3
  56. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs.map +1 -1
  57. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs +4 -2
  58. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs.map +1 -1
  59. package/lib/components/VBreadcrumbs/index.d.ts +134 -93
  60. package/lib/components/VBtn/VBtn.mjs +5 -3
  61. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  62. package/lib/components/VBtn/index.d.ts +33 -36
  63. package/lib/components/VBtnGroup/VBtnGroup.mjs +4 -1
  64. package/lib/components/VBtnGroup/VBtnGroup.mjs.map +1 -1
  65. package/lib/components/VBtnGroup/index.d.ts +22 -13
  66. package/lib/components/VBtnToggle/VBtnToggle.mjs +4 -2
  67. package/lib/components/VBtnToggle/VBtnToggle.mjs.map +1 -1
  68. package/lib/components/VBtnToggle/index.d.ts +30 -21
  69. package/lib/components/VCard/VCard.mjs +5 -3
  70. package/lib/components/VCard/VCard.mjs.map +1 -1
  71. package/lib/components/VCard/VCardActions.mjs +7 -4
  72. package/lib/components/VCard/VCardActions.mjs.map +1 -1
  73. package/lib/components/VCard/VCardItem.mjs +5 -2
  74. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  75. package/lib/components/VCard/index.d.ts +250 -141
  76. package/lib/components/VCarousel/VCarousel.mjs +3 -3
  77. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  78. package/lib/components/VCarousel/VCarouselItem.mjs +6 -3
  79. package/lib/components/VCarousel/VCarouselItem.mjs.map +1 -1
  80. package/lib/components/VCarousel/index.d.ts +78 -141
  81. package/lib/components/VCheckbox/VCheckbox.mjs +3 -2
  82. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  83. package/lib/components/VCheckbox/VCheckboxBtn.mjs +2 -1
  84. package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
  85. package/lib/components/VCheckbox/index.d.ts +69 -103
  86. package/lib/components/VChip/VChip.mjs +7 -8
  87. package/lib/components/VChip/VChip.mjs.map +1 -1
  88. package/lib/components/VChip/index.d.ts +27 -30
  89. package/lib/components/VChipGroup/VChipGroup.mjs +4 -1
  90. package/lib/components/VChipGroup/VChipGroup.mjs.map +1 -1
  91. package/lib/components/VChipGroup/index.d.ts +22 -13
  92. package/lib/components/VCode/index.d.ts +30 -17
  93. package/lib/components/VColorPicker/VColorPicker.mjs +3 -3
  94. package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
  95. package/lib/components/VColorPicker/VColorPickerCanvas.mjs +5 -2
  96. package/lib/components/VColorPicker/VColorPickerCanvas.mjs.map +1 -1
  97. package/lib/components/VColorPicker/VColorPickerEdit.mjs +6 -3
  98. package/lib/components/VColorPicker/VColorPickerEdit.mjs.map +1 -1
  99. package/lib/components/VColorPicker/VColorPickerPreview.mjs +6 -3
  100. package/lib/components/VColorPicker/VColorPickerPreview.mjs.map +1 -1
  101. package/lib/components/VColorPicker/VColorPickerSwatches.mjs +7 -5
  102. package/lib/components/VColorPicker/VColorPickerSwatches.mjs.map +1 -1
  103. package/lib/components/VColorPicker/index.d.ts +34 -1
  104. package/lib/components/VCombobox/VCombobox.mjs +2 -1
  105. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  106. package/lib/components/VCombobox/index.d.ts +225 -403
  107. package/lib/components/VCounter/VCounter.mjs +4 -1
  108. package/lib/components/VCounter/VCounter.mjs.map +1 -1
  109. package/lib/components/VCounter/index.d.ts +22 -145
  110. package/lib/components/VDefaultsProvider/index.d.ts +0 -12
  111. package/lib/components/VDialog/VDialog.mjs +4 -3
  112. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  113. package/lib/components/VDialog/index.d.ts +104 -282
  114. package/lib/components/VDivider/VDivider.mjs +4 -2
  115. package/lib/components/VDivider/VDivider.mjs.map +1 -1
  116. package/lib/components/VDivider/index.d.ts +22 -13
  117. package/lib/components/VExpansionPanel/VExpansionPanel.mjs +4 -2
  118. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  119. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs +4 -1
  120. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs.map +1 -1
  121. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +4 -2
  122. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  123. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +4 -1
  124. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  125. package/lib/components/VExpansionPanel/index.d.ts +109 -81
  126. package/lib/components/VField/VField.css +0 -1
  127. package/lib/components/VField/VField.mjs +9 -6
  128. package/lib/components/VField/VField.mjs.map +1 -1
  129. package/lib/components/VField/VField.sass +0 -1
  130. package/lib/components/VField/VFieldLabel.mjs +6 -3
  131. package/lib/components/VField/VFieldLabel.mjs.map +1 -1
  132. package/lib/components/VField/index.d.ts +119 -70
  133. package/lib/components/VFileInput/VFileInput.mjs +2 -1
  134. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  135. package/lib/components/VFileInput/index.d.ts +99 -150
  136. package/lib/components/VFooter/VFooter.mjs +4 -2
  137. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  138. package/lib/components/VFooter/index.d.ts +22 -13
  139. package/lib/components/VForm/VForm.mjs +5 -2
  140. package/lib/components/VForm/VForm.mjs.map +1 -1
  141. package/lib/components/VForm/index.d.ts +30 -17
  142. package/lib/components/VGrid/VCol.mjs +4 -1
  143. package/lib/components/VGrid/VCol.mjs.map +1 -1
  144. package/lib/components/VGrid/VContainer.mjs +4 -1
  145. package/lib/components/VGrid/VContainer.mjs.map +1 -1
  146. package/lib/components/VGrid/VRow.mjs +4 -1
  147. package/lib/components/VGrid/VRow.mjs.map +1 -1
  148. package/lib/components/VGrid/index.d.ts +104 -60
  149. package/lib/components/VHover/index.d.ts +20 -44
  150. package/lib/components/VIcon/VIcon.mjs +4 -2
  151. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  152. package/lib/components/VIcon/index.d.ts +23 -26
  153. package/lib/components/VImg/VImg.mjs +5 -3
  154. package/lib/components/VImg/VImg.mjs.map +1 -1
  155. package/lib/components/VImg/index.d.ts +26 -29
  156. package/lib/components/VInput/VInput.mjs +4 -1
  157. package/lib/components/VInput/VInput.mjs.map +1 -1
  158. package/lib/components/VInput/index.d.ts +31 -34
  159. package/lib/components/VItemGroup/VItemGroup.mjs +4 -1
  160. package/lib/components/VItemGroup/VItemGroup.mjs.map +1 -1
  161. package/lib/components/VItemGroup/index.d.ts +30 -33
  162. package/lib/components/VKbd/index.d.ts +30 -17
  163. package/lib/components/VLabel/VLabel.mjs +4 -1
  164. package/lib/components/VLabel/VLabel.mjs.map +1 -1
  165. package/lib/components/VLabel/index.d.ts +22 -13
  166. package/lib/components/VLayout/VLayout.mjs +8 -4
  167. package/lib/components/VLayout/VLayout.mjs.map +1 -1
  168. package/lib/components/VLayout/VLayoutItem.mjs +4 -2
  169. package/lib/components/VLayout/VLayoutItem.mjs.map +1 -1
  170. package/lib/components/VLayout/index.d.ts +44 -26
  171. package/lib/components/VLazy/VLazy.mjs +4 -2
  172. package/lib/components/VLazy/VLazy.mjs.map +1 -1
  173. package/lib/components/VLazy/index.d.ts +22 -13
  174. package/lib/components/VList/VList.mjs +7 -24
  175. package/lib/components/VList/VList.mjs.map +1 -1
  176. package/lib/components/VList/VListChildren.mjs.map +1 -1
  177. package/lib/components/VList/VListGroup.mjs +5 -2
  178. package/lib/components/VList/VListGroup.mjs.map +1 -1
  179. package/lib/components/VList/VListItem.mjs +4 -2
  180. package/lib/components/VList/VListItem.mjs.map +1 -1
  181. package/lib/components/VList/VListItemAction.mjs +4 -1
  182. package/lib/components/VList/VListItemAction.mjs.map +1 -1
  183. package/lib/components/VList/VListItemMedia.mjs +4 -1
  184. package/lib/components/VList/VListItemMedia.mjs.map +1 -1
  185. package/lib/components/VList/VListSubheader.mjs +5 -3
  186. package/lib/components/VList/VListSubheader.mjs.map +1 -1
  187. package/lib/components/VList/index.d.ts +932 -826
  188. package/lib/components/VLocaleProvider/VLocaleProvider.mjs +5 -2
  189. package/lib/components/VLocaleProvider/VLocaleProvider.mjs.map +1 -1
  190. package/lib/components/VLocaleProvider/index.d.ts +30 -17
  191. package/lib/components/VMain/VMain.mjs +4 -2
  192. package/lib/components/VMain/VMain.mjs.map +1 -1
  193. package/lib/components/VMain/index.d.ts +30 -17
  194. package/lib/components/VMenu/VMenu.mjs +2 -1
  195. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  196. package/lib/components/VMenu/index.d.ts +104 -282
  197. package/lib/components/VMessages/VMessages.mjs +4 -2
  198. package/lib/components/VMessages/VMessages.mjs.map +1 -1
  199. package/lib/components/VMessages/index.d.ts +22 -145
  200. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +4 -2
  201. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  202. package/lib/components/VNavigationDrawer/index.d.ts +26 -29
  203. package/lib/components/VNoSsr/VNoSsr.mjs.map +1 -1
  204. package/lib/components/VNoSsr/index.d.ts +3 -13
  205. package/lib/components/VOverlay/VOverlay.mjs +5 -3
  206. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  207. package/lib/components/VOverlay/index.d.ts +38 -45
  208. package/lib/components/VPagination/VPagination.mjs +4 -1
  209. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  210. package/lib/components/VPagination/index.d.ts +23 -30
  211. package/lib/components/VParallax/VParallax.mjs +5 -2
  212. package/lib/components/VParallax/VParallax.mjs.map +1 -1
  213. package/lib/components/VParallax/index.d.ts +34 -33
  214. package/lib/components/VProgressCircular/VProgressCircular.mjs +4 -2
  215. package/lib/components/VProgressCircular/VProgressCircular.mjs.map +1 -1
  216. package/lib/components/VProgressCircular/index.d.ts +22 -13
  217. package/lib/components/VProgressLinear/VProgressLinear.mjs +6 -4
  218. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  219. package/lib/components/VProgressLinear/index.d.ts +42 -45
  220. package/lib/components/VRadio/VRadio.mjs +2 -1
  221. package/lib/components/VRadio/VRadio.mjs.map +1 -1
  222. package/lib/components/VRadio/index.d.ts +27 -38
  223. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -1
  224. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  225. package/lib/components/VRadioGroup/index.d.ts +39 -62
  226. package/lib/components/VRangeSlider/VRangeSlider.mjs +2 -1
  227. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  228. package/lib/components/VRangeSlider/index.d.ts +27 -38
  229. package/lib/components/VRating/VRating.mjs +4 -1
  230. package/lib/components/VRating/VRating.mjs.map +1 -1
  231. package/lib/components/VRating/index.d.ts +23 -18
  232. package/lib/components/VResponsive/VResponsive.mjs +4 -2
  233. package/lib/components/VResponsive/VResponsive.mjs.map +1 -1
  234. package/lib/components/VResponsive/index.d.ts +43 -31
  235. package/lib/components/VSelect/VSelect.mjs +2 -1
  236. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  237. package/lib/components/VSelect/index.d.ts +194 -552
  238. package/lib/components/VSelectionControl/VSelectionControl.mjs +6 -2
  239. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  240. package/lib/components/VSelectionControl/index.d.ts +76 -46
  241. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +4 -1
  242. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  243. package/lib/components/VSelectionControlGroup/index.d.ts +23 -14
  244. package/lib/components/VSheet/VSheet.mjs +4 -2
  245. package/lib/components/VSheet/VSheet.mjs.map +1 -1
  246. package/lib/components/VSheet/index.d.ts +22 -13
  247. package/lib/components/VSlideGroup/VSlideGroup.mjs +6 -3
  248. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  249. package/lib/components/VSlideGroup/index.d.ts +59 -90
  250. package/lib/components/VSlider/VSlider.mjs +2 -1
  251. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  252. package/lib/components/VSlider/VSliderThumb.mjs +6 -4
  253. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  254. package/lib/components/VSlider/VSliderTrack.mjs +6 -4
  255. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  256. package/lib/components/VSlider/index.d.ts +27 -38
  257. package/lib/components/VSnackbar/VSnackbar.mjs +2 -1
  258. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  259. package/lib/components/VSnackbar/index.d.ts +92 -142
  260. package/lib/components/VSwitch/VSwitch.mjs +2 -1
  261. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  262. package/lib/components/VSwitch/index.d.ts +39 -66
  263. package/lib/components/VSystemBar/VSystemBar.mjs +4 -2
  264. package/lib/components/VSystemBar/VSystemBar.mjs.map +1 -1
  265. package/lib/components/VSystemBar/index.d.ts +22 -13
  266. package/lib/components/VTable/VTable.mjs +4 -1
  267. package/lib/components/VTable/VTable.mjs.map +1 -1
  268. package/lib/components/VTable/index.d.ts +26 -29
  269. package/lib/components/VTabs/VTab.mjs +2 -2
  270. package/lib/components/VTabs/VTab.mjs.map +1 -1
  271. package/lib/components/VTabs/VTabs.mjs +2 -2
  272. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  273. package/lib/components/VTabs/index.d.ts +45 -27
  274. package/lib/components/VTextField/VTextField.mjs +2 -1
  275. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  276. package/lib/components/VTextField/index.d.ts +208 -269
  277. package/lib/components/VTextarea/VTextarea.mjs +2 -1
  278. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  279. package/lib/components/VTextarea/index.d.ts +79 -122
  280. package/lib/components/VThemeProvider/VThemeProvider.mjs +6 -3
  281. package/lib/components/VThemeProvider/VThemeProvider.mjs.map +1 -1
  282. package/lib/components/VThemeProvider/index.d.ts +22 -13
  283. package/lib/components/VTimeline/VTimeline.mjs +5 -3
  284. package/lib/components/VTimeline/VTimeline.mjs.map +1 -1
  285. package/lib/components/VTimeline/VTimelineDivider.mjs +4 -1
  286. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  287. package/lib/components/VTimeline/VTimelineItem.mjs +8 -6
  288. package/lib/components/VTimeline/VTimelineItem.mjs.map +1 -1
  289. package/lib/components/VTimeline/index.d.ts +67 -57
  290. package/lib/components/VToolbar/VToolbar.mjs +4 -2
  291. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  292. package/lib/components/VToolbar/VToolbarItems.mjs +9 -4
  293. package/lib/components/VToolbar/VToolbarItems.mjs.map +1 -1
  294. package/lib/components/VToolbar/VToolbarTitle.mjs +5 -2
  295. package/lib/components/VToolbar/VToolbarTitle.mjs.map +1 -1
  296. package/lib/components/VToolbar/index.d.ts +74 -71
  297. package/lib/components/VTooltip/VTooltip.mjs +2 -1
  298. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  299. package/lib/components/VTooltip/index.d.ts +104 -150
  300. package/lib/components/VValidation/index.d.ts +0 -12
  301. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +21 -23
  302. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  303. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs +5 -2
  304. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -1
  305. package/lib/components/VVirtualScroll/index.d.ts +70 -30
  306. package/lib/components/VWindow/VWindow.mjs +4 -1
  307. package/lib/components/VWindow/VWindow.mjs.map +1 -1
  308. package/lib/components/VWindow/VWindowItem.mjs +4 -1
  309. package/lib/components/VWindow/VWindowItem.mjs.map +1 -1
  310. package/lib/components/VWindow/index.d.ts +61 -79
  311. package/lib/components/index.d.ts +5229 -6754
  312. package/lib/components/transitions/index.d.ts +0 -192
  313. package/lib/composables/component.mjs +11 -0
  314. package/lib/composables/component.mjs.map +1 -0
  315. package/lib/composables/defaults.mjs +51 -5
  316. package/lib/composables/defaults.mjs.map +1 -1
  317. package/lib/composables/icons.mjs +15 -4
  318. package/lib/composables/icons.mjs.map +1 -1
  319. package/lib/composables/index.mjs +1 -1
  320. package/lib/composables/index.mjs.map +1 -1
  321. package/lib/composables/loader.mjs.map +1 -1
  322. package/lib/entry-bundler.mjs +1 -1
  323. package/lib/framework.mjs +2 -2
  324. package/lib/framework.mjs.map +1 -1
  325. package/lib/iconsets/fa-svg.d.ts +1 -1
  326. package/lib/iconsets/fa.d.ts +1 -1
  327. package/lib/iconsets/fa4.d.ts +1 -1
  328. package/lib/iconsets/md.d.ts +1 -1
  329. package/lib/iconsets/mdi-svg.d.ts +1 -1
  330. package/lib/iconsets/mdi.d.ts +1 -1
  331. package/lib/index.d.ts +11 -11
  332. package/lib/labs/VDataTable/VDataTable.mjs +1 -1
  333. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  334. package/lib/labs/VDataTable/VDataTableHeaders.mjs +34 -20
  335. package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
  336. package/lib/labs/VDataTable/VDataTableRow.mjs +2 -4
  337. package/lib/labs/VDataTable/VDataTableRow.mjs.map +1 -1
  338. package/lib/labs/VDataTable/VDataTableRows.mjs +2 -2
  339. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  340. package/lib/labs/VDataTable/VDataTableServer.mjs +1 -1
  341. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  342. package/lib/labs/VDataTable/index.d.ts +61 -933
  343. package/lib/labs/VInfiniteScroll/index.d.ts +8 -36
  344. package/lib/labs/VSkeletonLoader/index.d.ts +0 -12
  345. package/lib/labs/components.d.ts +115 -1027
  346. package/lib/labs/date/DateAdapter.mjs +2 -0
  347. package/lib/labs/date/DateAdapter.mjs.map +1 -0
  348. package/lib/labs/date/adapters/vuetify.d.ts +52 -0
  349. package/lib/{adapters → labs/date/adapters}/vuetify.mjs +2 -2
  350. package/lib/labs/date/adapters/vuetify.mjs.map +1 -0
  351. package/lib/{composables → labs/date}/date.mjs +3 -3
  352. package/lib/labs/date/date.mjs.map +1 -0
  353. package/lib/labs/date/index.d.ts +40 -0
  354. package/lib/labs/date/index.mjs +2 -0
  355. package/lib/labs/date/index.mjs.map +1 -0
  356. package/lib/labs/index.mjs +3 -2
  357. package/lib/labs/index.mjs.map +1 -1
  358. package/lib/util/createSimpleFunctional.mjs +9 -4
  359. package/lib/util/createSimpleFunctional.mjs.map +1 -1
  360. package/lib/util/defineComponent.mjs +11 -43
  361. package/lib/util/defineComponent.mjs.map +1 -1
  362. package/lib/util/helpers.mjs +28 -2
  363. package/lib/util/helpers.mjs.map +1 -1
  364. package/lib/util/index.mjs +1 -0
  365. package/lib/util/index.mjs.map +1 -1
  366. package/package.json +2 -1
  367. package/lib/adapters/date-adapter.mjs +0 -2
  368. package/lib/adapters/date-adapter.mjs.map +0 -1
  369. package/lib/adapters/vuetify.mjs.map +0 -1
  370. package/lib/composables/date.mjs.map +0 -1
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v4.0.0-dev-20230426.0
2
+ * Vuetify v4.0.0-dev-20230427.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { ref, onBeforeUnmount, watch, readonly, reactive, computed, watchEffect, toRefs, capitalize, getCurrentInstance as getCurrentInstance$1, unref, provide, inject as inject$1, onScopeDispose, effectScope, shallowRef, defineComponent as defineComponent$1, camelize, h, onDeactivated, onActivated, onMounted, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, Fragment, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, cloneVNode, warn, toHandlers, Teleport, createTextVNode, onBeforeUpdate, vModelText, onUpdated, withModifiers } from 'vue';
7
+ import { ref, onBeforeUnmount, watch, readonly, reactive, computed, watchEffect, toRefs, capitalize, onScopeDispose, effectScope, shallowRef, inject as inject$1, unref, provide, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onDeactivated, onActivated, onMounted, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, Fragment, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, cloneVNode, warn, toHandlers, Teleport, createTextVNode, onBeforeUpdate, vModelText, onUpdated, withModifiers } from 'vue';
8
8
 
9
9
  const IN_BROWSER = typeof window !== 'undefined';
10
10
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
@@ -167,11 +167,11 @@ const keyValues = Object.freeze({
167
167
  function keys(o) {
168
168
  return Object.keys(o);
169
169
  }
170
- function pick(obj, paths) {
170
+ function pick(obj, paths, exclude) {
171
171
  const found = Object.create(null);
172
172
  const rest = Object.create(null);
173
173
  for (const key in obj) {
174
- if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key)) {
174
+ if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key) && !exclude?.some(path => path === key)) {
175
175
  found[key] = obj[key];
176
176
  } else {
177
177
  rest[key] = obj[key];
@@ -356,6 +356,32 @@ function callEvent(handler) {
356
356
  handler(...args);
357
357
  }
358
358
  }
359
+ function focusableChildren(el) {
360
+ const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', '[tabindex]'].map(s => `${s}:not([tabindex="-1"]):not([disabled])`).join(', ');
361
+ return [...el.querySelectorAll(targets)];
362
+ }
363
+ function focusChild(el, location) {
364
+ const focusable = focusableChildren(el);
365
+ const idx = focusable.indexOf(document.activeElement);
366
+ if (!location) {
367
+ if (!el.contains(document.activeElement)) {
368
+ focusable[0]?.focus();
369
+ }
370
+ } else if (location === 'first') {
371
+ focusable[0]?.focus();
372
+ } else if (location === 'last') {
373
+ focusable.at(-1)?.focus();
374
+ } else {
375
+ let _el;
376
+ let idxx = idx;
377
+ const inc = location === 'next' ? 1 : -1;
378
+ do {
379
+ idxx += inc;
380
+ _el = focusable[idxx];
381
+ } while ((!_el || _el.offsetParent == null) && idxx < focusable.length && idxx >= 0);
382
+ if (_el) _el.focus();else focusChild(el, location === 'next' ? 'first' : 'last');
383
+ }
384
+ }
359
385
 
360
386
  const block = ['top', 'bottom'];
361
387
  const inline = ['start', 'end', 'left', 'right'];
@@ -856,44 +882,6 @@ function getContrast(first, second) {
856
882
  return (light + 0.05) / (dark + 0.05);
857
883
  }
858
884
 
859
- // Utilities
860
- function getCurrentInstance(name, message) {
861
- const vm = getCurrentInstance$1();
862
- if (!vm) {
863
- throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
864
- }
865
- return vm;
866
- }
867
- function getCurrentInstanceName() {
868
- let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
869
- const vm = getCurrentInstance(name).type;
870
- return toKebabCase(vm?.aliasName || vm?.name);
871
- }
872
- let _uid = 0;
873
- let _map = new WeakMap();
874
- function getUid() {
875
- const vm = getCurrentInstance('getUid');
876
- if (_map.has(vm)) return _map.get(vm);else {
877
- const uid = _uid++;
878
- _map.set(vm, uid);
879
- return uid;
880
- }
881
- }
882
- getUid.reset = () => {
883
- _uid = 0;
884
- _map = new WeakMap();
885
- };
886
-
887
- function injectSelf(key) {
888
- const {
889
- provides
890
- } = getCurrentInstance('injectSelf');
891
- if (provides && key in provides) {
892
- // TS doesn't allow symbol as index type
893
- return provides[key];
894
- }
895
- }
896
-
897
885
  /**
898
886
  * Creates a factory function for props definitions.
899
887
  * This is used to define props in a composable then override
@@ -947,17 +935,54 @@ function propsFactory(props, source) {
947
935
 
948
936
  // Types
949
937
 
938
+ // Composables
939
+ const makeComponentProps = propsFactory({
940
+ class: [String, Array],
941
+ style: {
942
+ type: [String, Array, Object],
943
+ default: null
944
+ }
945
+ }, 'component');
946
+
947
+ function useToggleScope(source, fn) {
948
+ let scope;
949
+ function start() {
950
+ scope = effectScope();
951
+ scope.run(() => fn.length ? fn(() => {
952
+ scope?.stop();
953
+ start();
954
+ }) : fn());
955
+ }
956
+ watch(source, active => {
957
+ if (active && !scope) {
958
+ start();
959
+ } else if (!active) {
960
+ scope?.stop();
961
+ scope = undefined;
962
+ }
963
+ }, {
964
+ immediate: true
965
+ });
966
+ onScopeDispose(() => {
967
+ scope?.stop();
968
+ });
969
+ }
970
+
971
+ // Composables
972
+
973
+ // Types
974
+
950
975
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
951
976
  function createDefaults(options) {
952
977
  return ref(options);
953
978
  }
954
- function useDefaults() {
979
+ function injectDefaults() {
955
980
  const defaults = inject$1(DefaultsSymbol);
956
981
  if (!defaults) throw new Error('[Vuetify] Could not find defaults instance');
957
982
  return defaults;
958
983
  }
959
984
  function provideDefaults(defaults, options) {
960
- const injectedDefaults = useDefaults();
985
+ const injectedDefaults = injectDefaults();
961
986
  const providedDefaults = ref(defaults);
962
987
  const newDefaults = computed(() => {
963
988
  const disabled = unref(options?.disabled);
@@ -984,41 +1009,56 @@ function provideDefaults(defaults, options) {
984
1009
  provide(DefaultsSymbol, newDefaults);
985
1010
  return newDefaults;
986
1011
  }
987
-
988
- function useToggleScope(source, fn) {
989
- let scope;
990
- function start() {
991
- scope = effectScope();
992
- scope.run(() => fn.length ? fn(() => {
993
- scope?.stop();
994
- start();
995
- }) : fn());
996
- }
997
- watch(source, active => {
998
- if (active && !scope) {
999
- start();
1000
- } else if (!active) {
1001
- scope?.stop();
1002
- scope = undefined;
1012
+ function propIsDefined(vnode, prop) {
1013
+ return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1014
+ }
1015
+ function useDefaults(props, name) {
1016
+ let defaults = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : injectDefaults();
1017
+ const vm = getCurrentInstance('useDefaults');
1018
+ name = name ?? vm.type.name ?? vm.type.__name;
1019
+ if (!name) {
1020
+ throw new Error('[Vuetify] Could not determine component name');
1021
+ }
1022
+ const componentDefaults = computed(() => defaults.value[props._as ?? name]);
1023
+ const _props = new Proxy(props, {
1024
+ get(target, prop) {
1025
+ const propValue = Reflect.get(target, prop);
1026
+ if (prop === 'class' || prop === 'style') {
1027
+ return [componentDefaults.value?.[prop], propValue].filter(v => v != null);
1028
+ } else if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1029
+ return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? propValue;
1030
+ }
1031
+ return propValue;
1003
1032
  }
1004
- }, {
1005
- immediate: true
1006
1033
  });
1007
- onScopeDispose(() => {
1008
- scope?.stop();
1034
+ const _subcomponentDefaults = shallowRef();
1035
+ watchEffect(() => {
1036
+ if (componentDefaults.value) {
1037
+ const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1038
+ let [key] = _ref;
1039
+ return key.startsWith(key[0].toUpperCase());
1040
+ });
1041
+ if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1042
+ }
1009
1043
  });
1044
+ function provideSubDefaults() {
1045
+ // If subcomponent defaults are provided, override any
1046
+ // subcomponents provided by the component's setup function.
1047
+ // This uses injectSelf so must be done after the original setup to work.
1048
+ useToggleScope(_subcomponentDefaults, () => {
1049
+ provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1050
+ });
1051
+ }
1052
+ return {
1053
+ props: _props,
1054
+ provideSubDefaults
1055
+ };
1010
1056
  }
1011
1057
 
1012
1058
  // Utils
1013
1059
 
1014
1060
  // Types
1015
1061
 
1016
- function propIsDefined(vnode, prop) {
1017
- return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1018
- }
1019
-
1020
- // No props
1021
-
1022
1062
  // Implementation
1023
1063
  function defineComponent(options) {
1024
1064
  options._setup = options._setup ?? options.setup;
@@ -1030,43 +1070,20 @@ function defineComponent(options) {
1030
1070
  options.props = propsFactory(options.props ?? {}, toKebabCase(options.name))();
1031
1071
  const propKeys = Object.keys(options.props);
1032
1072
  options.filterProps = function filterProps(props) {
1033
- return pick(props, propKeys);
1073
+ return pick(props, propKeys, ['class', 'style']);
1034
1074
  };
1035
1075
  options.props._as = String;
1036
1076
  options.setup = function setup(props, ctx) {
1037
- const defaults = useDefaults();
1077
+ const defaults = injectDefaults();
1038
1078
 
1039
1079
  // Skip props proxy if defaults are not provided
1040
1080
  if (!defaults.value) return options._setup(props, ctx);
1041
- const vm = getCurrentInstance$1();
1042
- const componentDefaults = computed(() => defaults.value[props._as ?? options.name]);
1043
- const _props = new Proxy(props, {
1044
- get(target, prop) {
1045
- const propValue = Reflect.get(target, prop);
1046
- if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1047
- return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? propValue;
1048
- }
1049
- return propValue;
1050
- }
1051
- });
1052
- const _subcomponentDefaults = shallowRef();
1053
- watchEffect(() => {
1054
- if (componentDefaults.value) {
1055
- const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1056
- let [key] = _ref;
1057
- return key.startsWith(key[0].toUpperCase());
1058
- });
1059
- if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1060
- }
1061
- });
1081
+ const {
1082
+ props: _props,
1083
+ provideSubDefaults
1084
+ } = useDefaults(props, props._as ?? options.name, defaults);
1062
1085
  const setupBindings = options._setup(_props, ctx);
1063
-
1064
- // If subcomponent defaults are provided, override any
1065
- // subcomponents provided by the component's setup function.
1066
- // This uses injectSelf so must be done after the original setup to work.
1067
- useToggleScope(_subcomponentDefaults, () => {
1068
- provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1069
- });
1086
+ provideSubDefaults();
1070
1087
  return setupBindings;
1071
1088
  };
1072
1089
  }
@@ -1091,15 +1108,19 @@ function createSimpleFunctional(klass) {
1091
1108
  tag: {
1092
1109
  type: String,
1093
1110
  default: tag
1094
- }
1111
+ },
1112
+ ...makeComponentProps()
1095
1113
  },
1096
1114
  setup(props, _ref) {
1097
1115
  let {
1098
1116
  slots
1099
1117
  } = _ref;
1100
- return () => h(props.tag, {
1101
- class: klass
1102
- }, slots.default?.());
1118
+ return () => {
1119
+ return h(props.tag, {
1120
+ class: [klass, props.class],
1121
+ style: props.style
1122
+ }, slots.default?.());
1123
+ };
1103
1124
  }
1104
1125
  });
1105
1126
  }
@@ -1132,6 +1153,34 @@ const standardEasing = 'cubic-bezier(0.4, 0, 0.2, 1)';
1132
1153
  const deceleratedEasing = 'cubic-bezier(0.0, 0, 0.2, 1)'; // Entering
1133
1154
  const acceleratedEasing = 'cubic-bezier(0.4, 0, 1, 1)'; // Leaving
1134
1155
 
1156
+ // Utilities
1157
+ function getCurrentInstance(name, message) {
1158
+ const vm = getCurrentInstance$1();
1159
+ if (!vm) {
1160
+ throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
1161
+ }
1162
+ return vm;
1163
+ }
1164
+ function getCurrentInstanceName() {
1165
+ let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
1166
+ const vm = getCurrentInstance(name).type;
1167
+ return toKebabCase(vm?.aliasName || vm?.name);
1168
+ }
1169
+ let _uid = 0;
1170
+ let _map = new WeakMap();
1171
+ function getUid() {
1172
+ const vm = getCurrentInstance('getUid');
1173
+ if (_map.has(vm)) return _map.get(vm);else {
1174
+ const uid = _uid++;
1175
+ _map.set(vm, uid);
1176
+ return uid;
1177
+ }
1178
+ }
1179
+ getUid.reset = () => {
1180
+ _uid = 0;
1181
+ _map = new WeakMap();
1182
+ };
1183
+
1135
1184
  function getScrollParent(el) {
1136
1185
  while (el) {
1137
1186
  if (hasScrollbar(el)) return el;
@@ -1155,6 +1204,16 @@ function hasScrollbar(el) {
1155
1204
  return style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1156
1205
  }
1157
1206
 
1207
+ function injectSelf(key) {
1208
+ const {
1209
+ provides
1210
+ } = getCurrentInstance('injectSelf');
1211
+ if (provides && key in provides) {
1212
+ // TS doesn't allow symbol as index type
1213
+ return provides[key];
1214
+ }
1215
+ }
1216
+
1158
1217
  function isFixedPosition(el) {
1159
1218
  while (el) {
1160
1219
  if (window.getComputedStyle(el).position === 'fixed') {
@@ -2137,6 +2196,7 @@ function useRtl() {
2137
2196
  const VApp = genericComponent()({
2138
2197
  name: 'VApp',
2139
2198
  props: {
2199
+ ...makeComponentProps(),
2140
2200
  ...makeLayoutProps({
2141
2201
  fullHeight: true
2142
2202
  }),
@@ -2159,8 +2219,8 @@ const VApp = genericComponent()({
2159
2219
  } = useRtl();
2160
2220
  useRender(() => createVNode("div", {
2161
2221
  "ref": layoutRef,
2162
- "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value],
2163
- "style": layoutStyles.value
2222
+ "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value, props.class],
2223
+ "style": [layoutStyles.value, props.style]
2164
2224
  }, [createVNode("div", {
2165
2225
  "class": "v-application__wrap"
2166
2226
  }, [slots.default?.()])]));
@@ -2585,6 +2645,7 @@ const VResponsive = genericComponent()({
2585
2645
  props: {
2586
2646
  aspectRatio: [String, Number],
2587
2647
  contentClass: String,
2648
+ ...makeComponentProps(),
2588
2649
  ...makeDimensionProps()
2589
2650
  },
2590
2651
  setup(props, _ref) {
@@ -2598,8 +2659,8 @@ const VResponsive = genericComponent()({
2598
2659
  dimensionStyles
2599
2660
  } = useDimension(props);
2600
2661
  useRender(() => createVNode("div", {
2601
- "class": "v-responsive",
2602
- "style": dimensionStyles.value
2662
+ "class": ['v-responsive', props.class],
2663
+ "style": [dimensionStyles.value, props.style]
2603
2664
  }, [createVNode("div", {
2604
2665
  "class": "v-responsive__sizer",
2605
2666
  "style": aspectStyles.value
@@ -2717,6 +2778,7 @@ const VImg = genericComponent()({
2717
2778
  },
2718
2779
  srcset: String,
2719
2780
  width: [String, Number],
2781
+ ...makeComponentProps(),
2720
2782
  ...makeTransitionProps()
2721
2783
  },
2722
2784
  emits: {
@@ -2904,10 +2966,10 @@ const VImg = genericComponent()({
2904
2966
  useRender(() => withDirectives(createVNode(VResponsive, {
2905
2967
  "class": ['v-img', {
2906
2968
  'v-img--booting': !isBooted.value
2907
- }],
2908
- "style": {
2969
+ }, props.class],
2970
+ "style": [{
2909
2971
  width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width)
2910
- },
2972
+ }, props.style],
2911
2973
  "aspectRatio": aspectRatio.value,
2912
2974
  "aria-label": props.alt,
2913
2975
  "role": props.alt ? 'img' : undefined
@@ -2942,10 +3004,9 @@ const makeTagProps = propsFactory({
2942
3004
  }
2943
3005
  }, 'tag');
2944
3006
 
2945
- // Types
2946
-
2947
3007
  const makeVToolbarTitleProps = propsFactory({
2948
3008
  text: String,
3009
+ ...makeComponentProps(),
2949
3010
  ...makeTagProps()
2950
3011
  }, 'v-toolbar-title');
2951
3012
  const VToolbarTitle = genericComponent()({
@@ -2958,7 +3019,8 @@ const VToolbarTitle = genericComponent()({
2958
3019
  useRender(() => {
2959
3020
  const hasText = !!(slots.default || slots.text || props.text);
2960
3021
  return createVNode(props.tag, {
2961
- "class": "v-toolbar-title"
3022
+ "class": ['v-toolbar-title', props.class],
3023
+ "style": props.style
2962
3024
  }, {
2963
3025
  default: () => [hasText && createVNode("div", {
2964
3026
  "class": "v-toolbar-title__placeholder"
@@ -3139,6 +3201,7 @@ const makeVToolbarProps = propsFactory({
3139
3201
  image: String,
3140
3202
  title: String,
3141
3203
  ...makeBorderProps(),
3204
+ ...makeComponentProps(),
3142
3205
  ...makeElevationProps(),
3143
3206
  ...makeRoundedProps(),
3144
3207
  ...makeTagProps({
@@ -3189,8 +3252,8 @@ const VToolbar = genericComponent()({
3189
3252
  'v-toolbar--flat': props.flat,
3190
3253
  'v-toolbar--floating': props.floating,
3191
3254
  [`v-toolbar--density-${props.density}`]: true
3192
- }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value],
3193
- "style": [backgroundColorStyles.value]
3255
+ }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value, props.class],
3256
+ "style": [backgroundColorStyles.value, props.style]
3194
3257
  }, {
3195
3258
  default: () => [hasImage && createVNode("div", {
3196
3259
  "key": "image",
@@ -3475,13 +3538,13 @@ const VAppBar = genericComponent()({
3475
3538
  "ref": vToolbarRef,
3476
3539
  "class": ['v-app-bar', {
3477
3540
  'v-app-bar--bottom': props.location === 'bottom'
3478
- }],
3479
- "style": {
3541
+ }, props.class],
3542
+ "style": [{
3480
3543
  ...layoutItemStyles.value,
3481
3544
  '--v-toolbar-image-opacity': opacity.value,
3482
3545
  height: undefined,
3483
3546
  ...ssrBootStyles.value
3484
- }
3547
+ }, props.style]
3485
3548
  }, toolbarProps, {
3486
3549
  "collapse": isCollapsed.value,
3487
3550
  "flat": isFlat.value
@@ -3568,6 +3631,7 @@ function useVariant(props) {
3568
3631
  const makeVBtnGroupProps = propsFactory({
3569
3632
  divided: Boolean,
3570
3633
  ...makeBorderProps(),
3634
+ ...makeComponentProps(),
3571
3635
  ...makeDensityProps(),
3572
3636
  ...makeElevationProps(),
3573
3637
  ...makeRoundedProps(),
@@ -3610,7 +3674,8 @@ const VBtnGroup = genericComponent()({
3610
3674
  return createVNode(props.tag, {
3611
3675
  "class": ['v-btn-group', {
3612
3676
  'v-btn-group--divided': props.divided
3613
- }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value]
3677
+ }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
3678
+ "style": props.style
3614
3679
  }, slots);
3615
3680
  });
3616
3681
  }
@@ -3843,8 +3908,10 @@ const VBtnToggle = genericComponent()({
3843
3908
  useRender(() => {
3844
3909
  const [btnGroupProps] = VBtnGroup.filterProps(props);
3845
3910
  return createVNode(VBtnGroup, mergeProps({
3846
- "class": "v-btn-toggle"
3847
- }, btnGroupProps), {
3911
+ "class": ['v-btn-toggle', props.class]
3912
+ }, btnGroupProps, {
3913
+ "style": props.style
3914
+ }), {
3848
3915
  default: () => [slots.default?.({
3849
3916
  isSelected,
3850
3917
  next,
@@ -3915,7 +3982,7 @@ const mdi = {
3915
3982
 
3916
3983
  // Types
3917
3984
 
3918
- const IconValue = [String, Function, Object];
3985
+ const IconValue = [String, Function, Object, Array];
3919
3986
  const IconSymbol = Symbol.for('vuetify:icons');
3920
3987
  const makeIconProps = propsFactory({
3921
3988
  icon: {
@@ -3935,8 +4002,9 @@ const VComponentIcon = genericComponent()({
3935
4002
  slots
3936
4003
  } = _ref;
3937
4004
  return () => {
4005
+ const Icon = props.icon;
3938
4006
  return createVNode(props.tag, null, {
3939
- default: () => [props.icon ? createVNode(props.icon, null, null) : slots.default?.()]
4007
+ default: () => [props.icon ? createVNode(Icon, null, null) : slots.default?.()]
3940
4008
  });
3941
4009
  };
3942
4010
  }
@@ -3959,7 +4027,12 @@ const VSvgIcon = defineComponent({
3959
4027
  "viewBox": "0 0 24 24",
3960
4028
  "role": "img",
3961
4029
  "aria-hidden": "true"
3962
- }, [createVNode("path", {
4030
+ }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? createVNode("path", {
4031
+ "d": path[0],
4032
+ "fill-opacity": path[1]
4033
+ }, null) : createVNode("path", {
4034
+ "d": path
4035
+ }, null)) : createVNode("path", {
3963
4036
  "d": props.icon
3964
4037
  }, null)])]
3965
4038
  });
@@ -4024,7 +4097,12 @@ const useIcon = props => {
4024
4097
  }
4025
4098
  }
4026
4099
  if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
4027
- if (typeof icon !== 'string') {
4100
+ if (Array.isArray(icon)) {
4101
+ return {
4102
+ component: VSvgIcon,
4103
+ icon
4104
+ };
4105
+ } else if (typeof icon !== 'string') {
4028
4106
  return {
4029
4107
  component: VComponentIcon,
4030
4108
  icon
@@ -4081,6 +4159,7 @@ const makeVIconProps = propsFactory({
4081
4159
  start: Boolean,
4082
4160
  end: Boolean,
4083
4161
  icon: IconValue,
4162
+ ...makeComponentProps(),
4084
4163
  ...makeSizeProps(),
4085
4164
  ...makeTagProps({
4086
4165
  tag: 'i'
@@ -4123,12 +4202,12 @@ const VIcon = genericComponent()({
4123
4202
  'v-icon--clickable': !!attrs.onClick,
4124
4203
  'v-icon--start': props.start,
4125
4204
  'v-icon--end': props.end
4126
- }],
4205
+ }, props.class],
4127
4206
  "style": [!sizeClasses.value ? {
4128
4207
  fontSize: convertToUnit(props.size),
4129
4208
  height: convertToUnit(props.size),
4130
4209
  width: convertToUnit(props.size)
4131
- } : undefined, textColorStyles.value],
4210
+ } : undefined, textColorStyles.value, props.style],
4132
4211
  "role": attrs.onClick ? 'button' : undefined,
4133
4212
  "aria-hidden": !attrs.onClick
4134
4213
  }, {
@@ -4186,6 +4265,7 @@ const VProgressCircular = genericComponent()({
4186
4265
  type: [Number, String],
4187
4266
  default: 4
4188
4267
  },
4268
+ ...makeComponentProps(),
4189
4269
  ...makeSizeProps(),
4190
4270
  ...makeTagProps({
4191
4271
  tag: 'div'
@@ -4241,8 +4321,8 @@ const VProgressCircular = genericComponent()({
4241
4321
  'v-progress-circular--indeterminate': !!props.indeterminate,
4242
4322
  'v-progress-circular--visible': isIntersecting.value,
4243
4323
  'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink'
4244
- }, themeClasses.value, sizeClasses.value, textColorClasses.value],
4245
- "style": [sizeStyles.value, textColorStyles.value],
4324
+ }, themeClasses.value, sizeClasses.value, textColorClasses.value, props.class],
4325
+ "style": [sizeStyles.value, textColorStyles.value, props.style],
4246
4326
  "role": "progressbar",
4247
4327
  "aria-valuemin": "0",
4248
4328
  "aria-valuemax": "100",
@@ -4661,6 +4741,7 @@ const VProgressLinear = genericComponent()({
4661
4741
  stream: Boolean,
4662
4742
  striped: Boolean,
4663
4743
  roundedBar: Boolean,
4744
+ ...makeComponentProps(),
4664
4745
  ...makeLocationProps({
4665
4746
  location: 'top'
4666
4747
  }),
@@ -4732,14 +4813,14 @@ const VProgressLinear = genericComponent()({
4732
4813
  'v-progress-linear--rounded': props.rounded,
4733
4814
  'v-progress-linear--rounded-bar': props.roundedBar,
4734
4815
  'v-progress-linear--striped': props.striped
4735
- }, roundedClasses.value, themeClasses.value],
4736
- "style": {
4816
+ }, roundedClasses.value, themeClasses.value, props.class],
4817
+ "style": [{
4737
4818
  bottom: props.location === 'bottom' ? 0 : undefined,
4738
4819
  top: props.location === 'top' ? 0 : undefined,
4739
4820
  height: props.active ? convertToUnit(height.value) : 0,
4740
4821
  '--v-progress-linear-height': convertToUnit(height.value),
4741
4822
  ...locationStyles.value
4742
- },
4823
+ }, props.style],
4743
4824
  "role": "progressbar",
4744
4825
  "aria-hidden": props.active ? 'false' : 'true',
4745
4826
  "aria-valuemin": "0",
@@ -4950,7 +5031,7 @@ const makeVBtnProps = propsFactory({
4950
5031
  },
4951
5032
  text: String,
4952
5033
  ...makeBorderProps(),
4953
- ...makeRoundedProps(),
5034
+ ...makeComponentProps(),
4954
5035
  ...makeDensityProps(),
4955
5036
  ...makeDimensionProps(),
4956
5037
  ...makeElevationProps(),
@@ -4958,6 +5039,7 @@ const makeVBtnProps = propsFactory({
4958
5039
  ...makeLoaderProps(),
4959
5040
  ...makeLocationProps(),
4960
5041
  ...makePositionProps(),
5042
+ ...makeRoundedProps(),
4961
5043
  ...makeRouterProps(),
4962
5044
  ...makeSizeProps(),
4963
5045
  ...makeTagProps({
@@ -5055,8 +5137,8 @@ const VBtn = genericComponent()({
5055
5137
  'v-btn--icon': !!props.icon,
5056
5138
  'v-btn--loading': props.loading,
5057
5139
  '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],
5140
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
5141
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value, props.style],
5060
5142
  "disabled": isDisabled.value || undefined,
5061
5143
  "href": link.href.value,
5062
5144
  "onClick": e => {
@@ -5133,15 +5215,17 @@ const VAppBarNavIcon = genericComponent()({
5133
5215
  icon: {
5134
5216
  type: IconValue,
5135
5217
  default: '$menu'
5136
- }
5218
+ },
5219
+ ...makeComponentProps()
5137
5220
  },
5138
5221
  setup(props, _ref) {
5139
5222
  let {
5140
5223
  slots
5141
5224
  } = _ref;
5142
5225
  useRender(() => createVNode(VBtn, {
5143
- "class": "v-app-bar-nav-icon",
5144
- "icon": props.icon
5226
+ "class": ['v-app-bar-nav-icon', props.class],
5227
+ "icon": props.icon,
5228
+ "style": props.style
5145
5229
  }, slots));
5146
5230
  return {};
5147
5231
  }
@@ -5149,9 +5233,12 @@ const VAppBarNavIcon = genericComponent()({
5149
5233
 
5150
5234
  const VToolbarItems = genericComponent()({
5151
5235
  name: 'VToolbarItems',
5152
- props: makeVariantProps({
5153
- variant: 'text'
5154
- }),
5236
+ props: {
5237
+ ...makeComponentProps(),
5238
+ ...makeVariantProps({
5239
+ variant: 'text'
5240
+ })
5241
+ },
5155
5242
  setup(props, _ref) {
5156
5243
  let {
5157
5244
  slots
@@ -5164,7 +5251,8 @@ const VToolbarItems = genericComponent()({
5164
5251
  }
5165
5252
  });
5166
5253
  useRender(() => createVNode("div", {
5167
- "class": "v-toolbar-items"
5254
+ "class": ['v-toolbar-items', props.class],
5255
+ "style": props.style
5168
5256
  }, [slots.default?.()]));
5169
5257
  return {};
5170
5258
  }
@@ -5226,6 +5314,7 @@ const VAlert = genericComponent()({
5226
5314
  type: String,
5227
5315
  validator: val => allowedTypes.includes(val)
5228
5316
  },
5317
+ ...makeComponentProps(),
5229
5318
  ...makeDensityProps(),
5230
5319
  ...makeDimensionProps(),
5231
5320
  ...makeElevationProps(),
@@ -5308,8 +5397,8 @@ const VAlert = genericComponent()({
5308
5397
  [`v-alert--border-${props.border === true ? 'start' : props.border}`]: true
5309
5398
  }, {
5310
5399
  '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],
5400
+ }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
5401
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
5313
5402
  "role": "alert"
5314
5403
  }, {
5315
5404
  default: () => [genOverlays(false, 'v-alert'), props.border && createVNode("div", {
@@ -5403,6 +5492,7 @@ const VLabel = genericComponent()({
5403
5492
  props: {
5404
5493
  text: String,
5405
5494
  clickable: Boolean,
5495
+ ...makeComponentProps(),
5406
5496
  ...makeThemeProps()
5407
5497
  },
5408
5498
  setup(props, _ref) {
@@ -5412,7 +5502,8 @@ const VLabel = genericComponent()({
5412
5502
  useRender(() => createVNode("label", {
5413
5503
  "class": ['v-label', {
5414
5504
  'v-label--clickable': props.clickable
5415
- }]
5505
+ }, props.class],
5506
+ "style": props.style
5416
5507
  }, [props.text, slots.default?.()]));
5417
5508
  return {};
5418
5509
  }
@@ -5421,7 +5512,8 @@ const VLabel = genericComponent()({
5421
5512
  const VFieldLabel = genericComponent()({
5422
5513
  name: 'VFieldLabel',
5423
5514
  props: {
5424
- floating: Boolean
5515
+ floating: Boolean,
5516
+ ...makeComponentProps()
5425
5517
  },
5426
5518
  setup(props, _ref) {
5427
5519
  let {
@@ -5430,7 +5522,8 @@ const VFieldLabel = genericComponent()({
5430
5522
  useRender(() => createVNode(VLabel, {
5431
5523
  "class": ['v-field-label', {
5432
5524
  'v-field-label--floating': props.floating
5433
- }],
5525
+ }, props.class],
5526
+ "style": props.style,
5434
5527
  "aria-hidden": props.floating || undefined
5435
5528
  }, slots));
5436
5529
  return {};
@@ -5481,6 +5574,7 @@ const makeVFieldProps = propsFactory({
5481
5574
  },
5482
5575
  active: Boolean,
5483
5576
  color: String,
5577
+ baseColor: String,
5484
5578
  dirty: Boolean,
5485
5579
  disabled: Boolean,
5486
5580
  error: Boolean,
@@ -5498,9 +5592,10 @@ const makeVFieldProps = propsFactory({
5498
5592
  'onClick:clear': EventProp(),
5499
5593
  'onClick:appendInner': EventProp(),
5500
5594
  'onClick:prependInner': EventProp(),
5501
- ...makeThemeProps(),
5595
+ ...makeComponentProps(),
5502
5596
  ...makeLoaderProps(),
5503
- ...makeRoundedProps()
5597
+ ...makeRoundedProps(),
5598
+ ...makeThemeProps()
5504
5599
  }, 'v-field');
5505
5600
  const VField = genericComponent()({
5506
5601
  name: 'VField',
@@ -5554,7 +5649,7 @@ const VField = genericComponent()({
5554
5649
  textColorClasses,
5555
5650
  textColorStyles
5556
5651
  } = useTextColor(computed(() => {
5557
- return isActive.value && isFocused.value && !props.error && !props.disabled ? props.color : undefined;
5652
+ return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : props.baseColor;
5558
5653
  }));
5559
5654
  watch(isActive, val => {
5560
5655
  if (hasLabel.value) {
@@ -5631,8 +5726,8 @@ const VField = genericComponent()({
5631
5726
  'v-field--single-line': props.singleLine,
5632
5727
  'v-field--no-label': !label,
5633
5728
  [`v-field--variant-${props.variant}`]: true
5634
- }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value],
5635
- "style": [backgroundColorStyles.value, textColorStyles.value],
5729
+ }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, props.class],
5730
+ "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
5636
5731
  "onClick": onClick
5637
5732
  }, attrs), [createVNode("div", {
5638
5733
  "class": "v-field__overlay"
@@ -5720,7 +5815,7 @@ const VField = genericComponent()({
5720
5815
  });
5721
5816
  // TODO: this is kinda slow, might be better to implicitly inherit props instead
5722
5817
  function filterFieldProps(attrs) {
5723
- const keys = Object.keys(VField.props).filter(k => !isOn(k));
5818
+ const keys = Object.keys(VField.props).filter(k => !isOn(k) && k !== 'class' && k !== 'style');
5724
5819
  return pick(attrs, keys);
5725
5820
  }
5726
5821
 
@@ -5735,6 +5830,7 @@ const VMessages = genericComponent()({
5735
5830
  type: [Array, String],
5736
5831
  default: () => []
5737
5832
  },
5833
+ ...makeComponentProps(),
5738
5834
  ...makeTransitionProps({
5739
5835
  transition: {
5740
5836
  component: VSlideYTransition,
@@ -5755,8 +5851,8 @@ const VMessages = genericComponent()({
5755
5851
  useRender(() => createVNode(MaybeTransition, {
5756
5852
  "transition": props.transition,
5757
5853
  "tag": "div",
5758
- "class": ['v-messages', textColorClasses.value],
5759
- "style": textColorStyles.value,
5854
+ "class": ['v-messages', textColorClasses.value, props.class],
5855
+ "style": [textColorStyles.value, props.style],
5760
5856
  "role": "alert",
5761
5857
  "aria-live": "polite"
5762
5858
  }, {
@@ -6052,6 +6148,7 @@ const makeVInputProps = propsFactory({
6052
6148
  },
6053
6149
  'onClick:prepend': EventProp(),
6054
6150
  'onClick:append': EventProp(),
6151
+ ...makeComponentProps(),
6055
6152
  ...makeDensityProps(),
6056
6153
  ...makeValidationProps()
6057
6154
  }, 'v-input');
@@ -6119,7 +6216,8 @@ const VInput = genericComponent()({
6119
6216
  const hasMessages = messages.value.length > 0;
6120
6217
  const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details);
6121
6218
  return createVNode("div", {
6122
- "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value]
6219
+ "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value, props.class],
6220
+ "style": props.style
6123
6221
  }, [hasPrepend && createVNode("div", {
6124
6222
  "key": "prepend",
6125
6223
  "class": "v-input__prepend"
@@ -6162,6 +6260,7 @@ const VCounter = genericComponent()({
6162
6260
  type: [Number, String],
6163
6261
  default: 0
6164
6262
  },
6263
+ ...makeComponentProps(),
6165
6264
  ...makeTransitionProps({
6166
6265
  transition: {
6167
6266
  component: VSlideYTransition
@@ -6179,7 +6278,8 @@ const VCounter = genericComponent()({
6179
6278
  "transition": props.transition
6180
6279
  }, {
6181
6280
  default: () => [withDirectives(createVNode("div", {
6182
- "class": "v-counter"
6281
+ "class": ['v-counter', props.class],
6282
+ "style": props.style
6183
6283
  }, [slots.default ? slots.default({
6184
6284
  counter: counter.value,
6185
6285
  max: props.max,
@@ -6382,7 +6482,8 @@ const VTextField = genericComponent()({
6382
6482
  'v-text-field--prefixed': props.prefix,
6383
6483
  'v-text-field--suffixed': props.suffix,
6384
6484
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
6385
- }]
6485
+ }, props.class],
6486
+ "style": props.style
6386
6487
  }, rootAttrs, inputProps, {
6387
6488
  "focused": isFocused.value
6388
6489
  }), {
@@ -6498,6 +6599,7 @@ const VSelectionControlGroup = genericComponent()({
6498
6599
  type: String,
6499
6600
  default: 'VSelectionControl'
6500
6601
  },
6602
+ ...makeComponentProps(),
6501
6603
  ...makeSelectionControlGroupProps()
6502
6604
  },
6503
6605
  emits: {
@@ -6545,7 +6647,8 @@ const VSelectionControlGroup = genericComponent()({
6545
6647
  useRender(() => createVNode("div", {
6546
6648
  "class": ['v-selection-control-group', {
6547
6649
  'v-selection-control-group--inline': props.inline
6548
- }],
6650
+ }, props.class],
6651
+ "style": props.style,
6549
6652
  "role": props.type === 'radio' ? 'radiogroup' : undefined
6550
6653
  }, [slots.default?.()]));
6551
6654
  return {};
@@ -6559,6 +6662,7 @@ const makeSelectionControlProps = propsFactory({
6559
6662
  trueValue: null,
6560
6663
  falseValue: null,
6561
6664
  value: null,
6665
+ ...makeComponentProps(),
6562
6666
  ...makeSelectionControlGroupProps()
6563
6667
  }, 'v-selection-control');
6564
6668
  function useSelectionControl(props) {
@@ -6673,8 +6777,10 @@ const VSelectionControl = genericComponent()({
6673
6777
  'v-selection-control--focused': isFocused.value,
6674
6778
  'v-selection-control--focus-visible': isFocusVisible.value,
6675
6779
  'v-selection-control--inline': props.inline
6676
- }, densityClasses.value]
6677
- }, rootAttrs), [createVNode("div", {
6780
+ }, densityClasses.value, props.class]
6781
+ }, rootAttrs, {
6782
+ "style": props.style
6783
+ }), [createVNode("div", {
6678
6784
  "class": ['v-selection-control__wrapper', textColorClasses.value],
6679
6785
  "style": textColorStyles.value
6680
6786
  }, [slots.default?.(), withDirectives(createVNode("div", {
@@ -6756,7 +6862,8 @@ const VCheckboxBtn = genericComponent()({
6756
6862
  useRender(() => createVNode(VSelectionControl, mergeProps(props, {
6757
6863
  "modelValue": model.value,
6758
6864
  "onUpdate:modelValue": [$event => model.value = $event, onChange],
6759
- "class": "v-checkbox-btn",
6865
+ "class": ['v-checkbox-btn', props.class],
6866
+ "style": props.style,
6760
6867
  "type": "checkbox",
6761
6868
  "inline": true,
6762
6869
  "falseIcon": falseIcon.value,
@@ -6796,10 +6903,11 @@ const VCheckbox = genericComponent()({
6796
6903
  const [inputProps, _1] = VInput.filterProps(props);
6797
6904
  const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6798
6905
  return createVNode(VInput, mergeProps({
6799
- "class": "v-checkbox"
6906
+ "class": ['v-checkbox', props.class]
6800
6907
  }, inputAttrs, inputProps, {
6801
6908
  "id": id.value,
6802
- "focused": isFocused.value
6909
+ "focused": isFocused.value,
6910
+ "style": props.style
6803
6911
  }), {
6804
6912
  ...slots,
6805
6913
  default: _ref2 => {
@@ -6830,6 +6938,7 @@ const makeVAvatarProps = propsFactory({
6830
6938
  end: Boolean,
6831
6939
  icon: IconValue,
6832
6940
  image: String,
6941
+ ...makeComponentProps(),
6833
6942
  ...makeDensityProps(),
6834
6943
  ...makeRoundedProps(),
6835
6944
  ...makeSizeProps(),
@@ -6868,8 +6977,8 @@ const VAvatar = genericComponent()({
6868
6977
  "class": ['v-avatar', {
6869
6978
  'v-avatar--start': props.start,
6870
6979
  'v-avatar--end': props.end
6871
- }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
6872
- "style": [colorStyles.value, sizeStyles.value]
6980
+ }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6981
+ "style": [colorStyles.value, sizeStyles.value, props.style]
6873
6982
  }, {
6874
6983
  default: () => [props.image ? createVNode(VImg, {
6875
6984
  "key": "image",
@@ -6897,6 +7006,7 @@ const VChipGroup = genericComponent()({
6897
7006
  type: Function,
6898
7007
  default: deepEqual
6899
7008
  },
7009
+ ...makeComponentProps(),
6900
7010
  ...makeGroupProps({
6901
7011
  selectedClass: 'v-chip--selected'
6902
7012
  }),
@@ -6934,7 +7044,8 @@ const VChipGroup = genericComponent()({
6934
7044
  useRender(() => createVNode(props.tag, {
6935
7045
  "class": ['v-chip-group', {
6936
7046
  'v-chip-group--column': props.column
6937
- }, themeClasses.value]
7047
+ }, themeClasses.value, props.class],
7048
+ "style": props.style
6938
7049
  }, {
6939
7050
  default: () => [slots.default?.({
6940
7051
  isSelected,
@@ -6948,8 +7059,6 @@ const VChipGroup = genericComponent()({
6948
7059
  }
6949
7060
  });
6950
7061
 
6951
- // Types
6952
-
6953
7062
  const VChip = genericComponent()({
6954
7063
  name: 'VChip',
6955
7064
  directives: {
@@ -6994,6 +7103,7 @@ const VChip = genericComponent()({
6994
7103
  onClick: EventProp(),
6995
7104
  onClickOnce: EventProp(),
6996
7105
  ...makeBorderProps(),
7106
+ ...makeComponentProps(),
6997
7107
  ...makeDensityProps(),
6998
7108
  ...makeElevationProps(),
6999
7109
  ...makeGroupItemProps(),
@@ -7086,8 +7196,8 @@ const VChip = genericComponent()({
7086
7196
  'v-chip--link': isClickable.value,
7087
7197
  'v-chip--filter': hasFilter,
7088
7198
  '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],
7199
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value, props.class],
7200
+ "style": [hasColor ? colorStyles.value : undefined, props.style],
7091
7201
  "disabled": props.disabled || undefined,
7092
7202
  "draggable": props.draggable,
7093
7203
  "href": link.href.value,
@@ -7196,6 +7306,7 @@ const VDivider = genericComponent()({
7196
7306
  length: [Number, String],
7197
7307
  thickness: [Number, String],
7198
7308
  vertical: Boolean,
7309
+ ...makeComponentProps(),
7199
7310
  ...makeThemeProps()
7200
7311
  },
7201
7312
  setup(props, _ref) {
@@ -7224,8 +7335,8 @@ const VDivider = genericComponent()({
7224
7335
  'v-divider': true,
7225
7336
  'v-divider--inset': props.inset,
7226
7337
  'v-divider--vertical': props.vertical
7227
- }, themeClasses.value, textColorClasses.value],
7228
- "style": [dividerStyles.value, textColorStyles.value],
7338
+ }, themeClasses.value, textColorClasses.value, props.class],
7339
+ "style": [dividerStyles.value, textColorStyles.value, props.style],
7229
7340
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
7230
7341
  "role": `${attrs.role || 'separator'}`
7231
7342
  }, null));
@@ -7724,6 +7835,7 @@ const makeVListGroupProps = propsFactory({
7724
7835
  fluid: Boolean,
7725
7836
  subgroup: Boolean,
7726
7837
  value: null,
7838
+ ...makeComponentProps(),
7727
7839
  ...makeTagProps()
7728
7840
  }, 'v-list-group');
7729
7841
  const VListGroup = genericComponent()({
@@ -7772,7 +7884,8 @@ const VListGroup = genericComponent()({
7772
7884
  'v-list-group--fluid': props.fluid,
7773
7885
  'v-list-group--subgroup': props.subgroup,
7774
7886
  'v-list-group--open': isOpen.value
7775
- }]
7887
+ }, props.class],
7888
+ "style": props.style
7776
7889
  }, {
7777
7890
  default: () => [slots.activator && createVNode(VDefaultsProvider, {
7778
7891
  "defaults": activatorDefaults.value
@@ -7839,6 +7952,7 @@ const VListItem = genericComponent()({
7839
7952
  onClick: EventProp(),
7840
7953
  onClickOnce: EventProp(),
7841
7954
  ...makeBorderProps(),
7955
+ ...makeComponentProps(),
7842
7956
  ...makeDensityProps(),
7843
7957
  ...makeDimensionProps(),
7844
7958
  ...makeElevationProps(),
@@ -7949,8 +8063,8 @@ const VListItem = genericComponent()({
7949
8063
  'v-list-item--nav': props.nav,
7950
8064
  'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,
7951
8065
  [`${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],
8066
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
8067
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, props.style],
7954
8068
  "href": link.href.value,
7955
8069
  "tabindex": isClickable.value ? 0 : undefined,
7956
8070
  "onClick": onClick,
@@ -8043,6 +8157,7 @@ const VListSubheader = genericComponent()({
8043
8157
  inset: Boolean,
8044
8158
  sticky: Boolean,
8045
8159
  title: String,
8160
+ ...makeComponentProps(),
8046
8161
  ...makeTagProps()
8047
8162
  },
8048
8163
  setup(props, _ref) {
@@ -8059,10 +8174,10 @@ const VListSubheader = genericComponent()({
8059
8174
  "class": ['v-list-subheader', {
8060
8175
  'v-list-subheader--inset': props.inset,
8061
8176
  'v-list-subheader--sticky': props.sticky
8062
- }, textColorClasses.value],
8063
- "style": {
8177
+ }, textColorClasses.value, props.class],
8178
+ "style": [{
8064
8179
  textColorStyles
8065
- }
8180
+ }, props.style]
8066
8181
  }, {
8067
8182
  default: () => [hasText && createVNode("div", {
8068
8183
  "class": "v-list-subheader__text"
@@ -8282,6 +8397,7 @@ const VList = genericComponent()({
8282
8397
  openStrategy: 'list'
8283
8398
  }),
8284
8399
  ...makeBorderProps(),
8400
+ ...makeComponentProps(),
8285
8401
  ...makeDensityProps(),
8286
8402
  ...makeDimensionProps(),
8287
8403
  ...makeElevationProps(),
@@ -8383,27 +8499,8 @@ const VList = genericComponent()({
8383
8499
  e.preventDefault();
8384
8500
  }
8385
8501
  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');
8502
+ if (contentRef.value) {
8503
+ return focusChild(contentRef.value, location);
8407
8504
  }
8408
8505
  }
8409
8506
  useRender(() => {
@@ -8412,8 +8509,8 @@ const VList = genericComponent()({
8412
8509
  "class": ['v-list', {
8413
8510
  'v-list--disabled': props.disabled,
8414
8511
  '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],
8512
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class],
8513
+ "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
8417
8514
  "role": "listbox",
8418
8515
  "aria-activedescendant": undefined,
8419
8516
  "onFocusin": onFocusin,
@@ -8441,6 +8538,7 @@ const VListItemAction = genericComponent()({
8441
8538
  props: {
8442
8539
  start: Boolean,
8443
8540
  end: Boolean,
8541
+ ...makeComponentProps(),
8444
8542
  ...makeTagProps()
8445
8543
  },
8446
8544
  setup(props, _ref) {
@@ -8451,7 +8549,8 @@ const VListItemAction = genericComponent()({
8451
8549
  "class": ['v-list-item-action', {
8452
8550
  'v-list-item-action--start': props.start,
8453
8551
  'v-list-item-action--end': props.end
8454
- }]
8552
+ }, props.class],
8553
+ "style": props.style
8455
8554
  }, slots));
8456
8555
  return {};
8457
8556
  }
@@ -8462,6 +8561,7 @@ const VListItemMedia = genericComponent()({
8462
8561
  props: {
8463
8562
  start: Boolean,
8464
8563
  end: Boolean,
8564
+ ...makeComponentProps(),
8465
8565
  ...makeTagProps()
8466
8566
  },
8467
8567
  setup(props, _ref) {
@@ -8473,7 +8573,8 @@ const VListItemMedia = genericComponent()({
8473
8573
  "class": ['v-list-item-media', {
8474
8574
  'v-list-item-media--start': props.start,
8475
8575
  'v-list-item-media--end': props.end
8476
- }]
8576
+ }, props.class],
8577
+ "style": props.style
8477
8578
  }, slots);
8478
8579
  });
8479
8580
  return {};
@@ -9714,6 +9815,7 @@ const makeVOverlayProps = propsFactory({
9714
9815
  default: 2000
9715
9816
  },
9716
9817
  ...makeActivatorProps(),
9818
+ ...makeComponentProps(),
9717
9819
  ...makeDimensionProps(),
9718
9820
  ...makeLazyProps(),
9719
9821
  ...makeLocationStrategyProps(),
@@ -9881,10 +9983,10 @@ const VOverlay = genericComponent()({
9881
9983
  'v-overlay--absolute': props.absolute || props.contained,
9882
9984
  'v-overlay--active': isActive.value,
9883
9985
  'v-overlay--contained': props.contained
9884
- }, themeClasses.value, rtlClasses.value],
9986
+ }, themeClasses.value, rtlClasses.value, props.class],
9885
9987
  "style": [stackStyles.value, {
9886
9988
  top: convertToUnit(top.value)
9887
- }],
9989
+ }, props.style],
9888
9990
  "ref": root
9889
9991
  }, scopeId, attrs), [createVNode(Scrim, mergeProps({
9890
9992
  "color": scrimColor,
@@ -9990,7 +10092,8 @@ const VMenu = genericComponent()({
9990
10092
  const [overlayProps] = VOverlay.filterProps(props);
9991
10093
  return createVNode(VOverlay, mergeProps({
9992
10094
  "ref": overlay,
9993
- "class": ['v-menu']
10095
+ "class": ['v-menu', props.class],
10096
+ "style": props.style
9994
10097
  }, overlayProps, {
9995
10098
  "modelValue": isActive.value,
9996
10099
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -10209,7 +10312,8 @@ const VSelect = genericComponent()({
10209
10312
  'v-select--chips': !!props.chips,
10210
10313
  [`v-select--${props.multiple ? 'multiple' : 'single'}`]: true,
10211
10314
  'v-select--selected': model.value.length
10212
- }],
10315
+ }, props.class],
10316
+ "style": props.style,
10213
10317
  "appendInnerIcon": props.menuIcon,
10214
10318
  "readonly": true,
10215
10319
  "placeholder": placeholder,
@@ -10652,7 +10756,8 @@ const VAutocomplete = genericComponent()({
10652
10756
  'v-autocomplete--selecting-index': selectionIndex.value > -1,
10653
10757
  [`v-autocomplete--${props.multiple ? 'multiple' : 'single'}`]: true,
10654
10758
  'v-autocomplete--selection-slot': !!slots.selection
10655
- }],
10759
+ }, props.class],
10760
+ "style": props.style,
10656
10761
  "appendInnerIcon": props.menuIcon,
10657
10762
  "readonly": props.readonly,
10658
10763
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -10766,8 +10871,6 @@ const VAutocomplete = genericComponent()({
10766
10871
  }
10767
10872
  });
10768
10873
 
10769
- // Types
10770
-
10771
10874
  const VBadge = genericComponent()({
10772
10875
  name: 'VBadge',
10773
10876
  inheritAttrs: false,
@@ -10791,6 +10894,7 @@ const VBadge = genericComponent()({
10791
10894
  offsetX: [Number, String],
10792
10895
  offsetY: [Number, String],
10793
10896
  textColor: String,
10897
+ ...makeComponentProps(),
10794
10898
  ...makeLocationProps({
10795
10899
  location: 'top end'
10796
10900
  }),
@@ -10835,8 +10939,10 @@ const VBadge = genericComponent()({
10835
10939
  'v-badge--dot': props.dot,
10836
10940
  'v-badge--floating': props.floating,
10837
10941
  'v-badge--inline': props.inline
10838
- }]
10839
- }, attrs), {
10942
+ }, props.class]
10943
+ }, attrs, {
10944
+ "style": props.style
10945
+ }), {
10840
10946
  default: () => [createVNode("div", {
10841
10947
  "class": "v-badge__wrapper"
10842
10948
  }, [ctx.slots.default?.(), createVNode(MaybeTransition, {
@@ -10863,7 +10969,8 @@ const VBannerActions = genericComponent()({
10863
10969
  name: 'VBannerActions',
10864
10970
  props: {
10865
10971
  color: String,
10866
- density: String
10972
+ density: String,
10973
+ ...makeComponentProps()
10867
10974
  },
10868
10975
  setup(props, _ref) {
10869
10976
  let {
@@ -10877,7 +10984,8 @@ const VBannerActions = genericComponent()({
10877
10984
  }
10878
10985
  });
10879
10986
  useRender(() => createVNode("div", {
10880
- "class": "v-banner-actions"
10987
+ "class": ['v-banner-actions', props.class],
10988
+ "style": props.style
10881
10989
  }, [slots.default?.()]));
10882
10990
  return {};
10883
10991
  }
@@ -10898,6 +11006,7 @@ const VBanner = genericComponent()({
10898
11006
  sticky: Boolean,
10899
11007
  text: String,
10900
11008
  ...makeBorderProps(),
11009
+ ...makeComponentProps(),
10901
11010
  ...makeDensityProps(),
10902
11011
  ...makeDimensionProps(),
10903
11012
  ...makeElevationProps(),
@@ -10955,8 +11064,8 @@ const VBanner = genericComponent()({
10955
11064
  'v-banner--stacked': props.stacked || mobile.value,
10956
11065
  'v-banner--sticky': props.sticky,
10957
11066
  [`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],
11067
+ }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11068
+ "style": [dimensionStyles.value, locationStyles.value, props.style],
10960
11069
  "role": "banner"
10961
11070
  }, {
10962
11071
  default: () => [hasPrepend && createVNode("div", {
@@ -11012,6 +11121,7 @@ const VBottomNavigation = genericComponent()({
11012
11121
  default: true
11013
11122
  },
11014
11123
  ...makeBorderProps(),
11124
+ ...makeComponentProps(),
11015
11125
  ...makeDensityProps(),
11016
11126
  ...makeElevationProps(),
11017
11127
  ...makeRoundedProps(),
@@ -11086,11 +11196,11 @@ const VBottomNavigation = genericComponent()({
11086
11196
  'v-bottom-navigation--active': isActive.value,
11087
11197
  'v-bottom-navigation--grow': props.grow,
11088
11198
  'v-bottom-navigation--shift': props.mode === 'shift'
11089
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value],
11199
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
11090
11200
  "style": [backgroundColorStyles.value, layoutItemStyles.value, {
11091
11201
  height: convertToUnit(height.value),
11092
11202
  transform: `translateY(${convertToUnit(!isActive.value ? 100 : 0, '%')})`
11093
- }, ssrBootStyles.value]
11203
+ }, ssrBootStyles.value, props.style]
11094
11204
  }, {
11095
11205
  default: () => [slots.default && createVNode("div", {
11096
11206
  "class": "v-bottom-navigation__content"
@@ -11104,14 +11214,16 @@ const VBottomNavigation = genericComponent()({
11104
11214
  const VBreadcrumbsDivider = genericComponent()({
11105
11215
  name: 'VBreadcrumbsDivider',
11106
11216
  props: {
11107
- divider: [Number, String]
11217
+ divider: [Number, String],
11218
+ ...makeComponentProps()
11108
11219
  },
11109
11220
  setup(props, _ref) {
11110
11221
  let {
11111
11222
  slots
11112
11223
  } = _ref;
11113
11224
  useRender(() => createVNode("li", {
11114
- "class": "v-breadcrumbs-divider"
11225
+ "class": ['v-breadcrumbs-divider', props.class],
11226
+ "style": props.style
11115
11227
  }, [slots?.default?.() ?? props.divider]));
11116
11228
  return {};
11117
11229
  }
@@ -11126,6 +11238,7 @@ const VBreadcrumbsItem = genericComponent()({
11126
11238
  color: String,
11127
11239
  disabled: Boolean,
11128
11240
  title: String,
11241
+ ...makeComponentProps(),
11129
11242
  ...makeRouterProps(),
11130
11243
  ...makeTagProps({
11131
11244
  tag: 'li'
@@ -11151,8 +11264,8 @@ const VBreadcrumbsItem = genericComponent()({
11151
11264
  'v-breadcrumbs-item--disabled': props.disabled,
11152
11265
  'v-breadcrumbs-item--link': link.isLink.value,
11153
11266
  [`${props.activeClass}`]: isActive.value && props.activeClass
11154
- }, textColorClasses.value],
11155
- "style": [textColorStyles.value],
11267
+ }, textColorClasses.value, props.class],
11268
+ "style": [textColorStyles.value, props.style],
11156
11269
  "href": link.href.value,
11157
11270
  "aria-current": isActive.value ? 'page' : undefined,
11158
11271
  "onClick": link.navigate
@@ -11183,6 +11296,7 @@ const VBreadcrumbs = genericComponent()({
11183
11296
  type: Array,
11184
11297
  default: () => []
11185
11298
  },
11299
+ ...makeComponentProps(),
11186
11300
  ...makeDensityProps(),
11187
11301
  ...makeRoundedProps(),
11188
11302
  ...makeTagProps({
@@ -11214,11 +11328,22 @@ const VBreadcrumbs = genericComponent()({
11214
11328
  disabled: toRef(props, 'disabled')
11215
11329
  }
11216
11330
  });
11331
+ const items = computed(() => props.items.map(item => {
11332
+ return typeof item === 'string' ? {
11333
+ item: {
11334
+ title: item
11335
+ },
11336
+ raw: item
11337
+ } : {
11338
+ item,
11339
+ raw: item
11340
+ };
11341
+ }));
11217
11342
  useRender(() => {
11218
11343
  const hasPrepend = !!(slots.prepend || props.icon);
11219
11344
  return createVNode(props.tag, {
11220
- "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
11221
- "style": backgroundColorStyles.value
11345
+ "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value, props.class],
11346
+ "style": [backgroundColorStyles.value, props.style]
11222
11347
  }, {
11223
11348
  default: () => [hasPrepend && createVNode("div", {
11224
11349
  "key": "prepend",
@@ -11236,33 +11361,36 @@ const VBreadcrumbs = genericComponent()({
11236
11361
  start: true
11237
11362
  }
11238
11363
  }
11239
- }, slots.prepend)]), props.items.map((item, index, array) => createVNode(Fragment, null, [createVNode(VBreadcrumbsItem, 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 && createVNode(VBreadcrumbsDivider, null, {
11250
- default: slots.divider ? () => slots.divider?.({
11364
+ }, slots.prepend)]), items.value.map((_ref2, index, array) => {
11365
+ let {
11251
11366
  item,
11252
- index
11253
- }) : undefined
11254
- })])), slots.default?.()]
11367
+ raw
11368
+ } = _ref2;
11369
+ return createVNode(Fragment, null, [createVNode(VBreadcrumbsItem, mergeProps({
11370
+ "key": item.title,
11371
+ "disabled": index >= array.length - 1
11372
+ }, item), {
11373
+ default: slots.title ? () => slots.title?.({
11374
+ item: raw,
11375
+ index
11376
+ }) : undefined
11377
+ }), index < array.length - 1 && createVNode(VBreadcrumbsDivider, null, {
11378
+ default: slots.divider ? () => slots.divider?.({
11379
+ item: raw,
11380
+ index
11381
+ }) : undefined
11382
+ })]);
11383
+ }), slots.default?.()]
11255
11384
  });
11256
11385
  });
11257
11386
  return {};
11258
11387
  }
11259
11388
  });
11260
11389
 
11261
- // Types
11262
-
11263
- const VCardActions = defineComponent({
11390
+ const VCardActions = genericComponent()({
11264
11391
  name: 'VCardActions',
11265
- setup(_, _ref) {
11392
+ props: makeComponentProps(),
11393
+ setup(props, _ref) {
11266
11394
  let {
11267
11395
  slots
11268
11396
  } = _ref;
@@ -11272,7 +11400,8 @@ const VCardActions = defineComponent({
11272
11400
  }
11273
11401
  });
11274
11402
  useRender(() => createVNode("div", {
11275
- "class": "v-card-actions"
11403
+ "class": ['v-card-actions', props.class],
11404
+ "style": props.style
11276
11405
  }, [slots.default?.()]));
11277
11406
  return {};
11278
11407
  }
@@ -11282,8 +11411,6 @@ const VCardSubtitle = createSimpleFunctional('v-card-subtitle');
11282
11411
 
11283
11412
  const VCardTitle = createSimpleFunctional('v-card-title');
11284
11413
 
11285
- // Types
11286
-
11287
11414
  const VCardItem = genericComponent()({
11288
11415
  name: 'VCardItem',
11289
11416
  props: {
@@ -11293,6 +11420,7 @@ const VCardItem = genericComponent()({
11293
11420
  prependIcon: IconValue,
11294
11421
  subtitle: String,
11295
11422
  title: String,
11423
+ ...makeComponentProps(),
11296
11424
  ...makeDensityProps()
11297
11425
  },
11298
11426
  setup(props, _ref) {
@@ -11307,7 +11435,8 @@ const VCardItem = genericComponent()({
11307
11435
  const hasTitle = !!(props.title || slots.title);
11308
11436
  const hasSubtitle = !!(props.subtitle || slots.subtitle);
11309
11437
  return createVNode("div", {
11310
- "class": "v-card-item"
11438
+ "class": ['v-card-item', props.class],
11439
+ "style": props.style
11311
11440
  }, [hasPrepend && createVNode("div", {
11312
11441
  "key": "prepend",
11313
11442
  "class": "v-card-item__prepend"
@@ -11389,8 +11518,8 @@ const VCard = genericComponent()({
11389
11518
  subtitle: String,
11390
11519
  text: String,
11391
11520
  title: String,
11392
- ...makeThemeProps(),
11393
11521
  ...makeBorderProps(),
11522
+ ...makeComponentProps(),
11394
11523
  ...makeDensityProps(),
11395
11524
  ...makeDimensionProps(),
11396
11525
  ...makeElevationProps(),
@@ -11400,6 +11529,7 @@ const VCard = genericComponent()({
11400
11529
  ...makeRoundedProps(),
11401
11530
  ...makeRouterProps(),
11402
11531
  ...makeTagProps(),
11532
+ ...makeThemeProps(),
11403
11533
  ...makeVariantProps({
11404
11534
  variant: 'elevated'
11405
11535
  })
@@ -11460,8 +11590,8 @@ const VCard = genericComponent()({
11460
11590
  'v-card--flat': props.flat,
11461
11591
  'v-card--hover': props.hover && !(props.disabled || props.flat),
11462
11592
  '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],
11593
+ }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
11594
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
11465
11595
  "href": link.href.value,
11466
11596
  "onClick": isClickable.value && link.navigate,
11467
11597
  "tabindex": props.disabled ? -1 : undefined
@@ -11657,6 +11787,7 @@ const makeVWindowProps = propsFactory({
11657
11787
  mandatory: {
11658
11788
  default: 'force'
11659
11789
  },
11790
+ ...makeComponentProps(),
11660
11791
  ...makeTagProps(),
11661
11792
  ...makeThemeProps()
11662
11793
  }, 'v-window');
@@ -11772,7 +11903,8 @@ const VWindow = genericComponent()({
11772
11903
  "ref": rootRef,
11773
11904
  "class": ['v-window', {
11774
11905
  'v-window--show-arrows-on-hover': props.showArrows === 'hover'
11775
- }, themeClasses.value]
11906
+ }, themeClasses.value, props.class],
11907
+ "style": props.style
11776
11908
  }, {
11777
11909
  default: () => [createVNode("div", {
11778
11910
  "class": "v-window__container",
@@ -11857,10 +11989,10 @@ const VCarousel = genericComponent()({
11857
11989
  "class": ['v-carousel', {
11858
11990
  'v-carousel--hide-delimiter-background': props.hideDelimiterBackground,
11859
11991
  'v-carousel--vertical-delimiters': props.verticalDelimiters
11860
- }],
11861
- "style": {
11992
+ }, props.class],
11993
+ "style": [{
11862
11994
  height: convertToUnit(props.height)
11863
- },
11995
+ }, props.style],
11864
11996
  "continuous": true,
11865
11997
  "mandatory": "force",
11866
11998
  "showArrows": props.showArrows
@@ -11926,6 +12058,7 @@ const VWindowItem = genericComponent()({
11926
12058
  type: [Boolean, String],
11927
12059
  default: undefined
11928
12060
  },
12061
+ ...makeComponentProps(),
11929
12062
  ...makeGroupItemProps(),
11930
12063
  ...makeLazyProps()
11931
12064
  },
@@ -12012,7 +12145,8 @@ const VWindowItem = genericComponent()({
12012
12145
  "disabled": !isBooted.value
12013
12146
  }, {
12014
12147
  default: () => [withDirectives(createVNode("div", {
12015
- "class": ['v-window-item', groupItem.selectedClass.value]
12148
+ "class": ['v-window-item', groupItem.selectedClass.value, props.class],
12149
+ "style": props.style
12016
12150
  }, [hasContent.value && slots.default?.()]), [[vShow, groupItem.isSelected.value]])]
12017
12151
  }));
12018
12152
  return {};
@@ -12025,7 +12159,8 @@ const VCarouselItem = genericComponent()({
12025
12159
  name: 'VCarouselItem',
12026
12160
  inheritAttrs: false,
12027
12161
  props: {
12028
- value: null
12162
+ value: null,
12163
+ ...makeComponentProps()
12029
12164
  },
12030
12165
  setup(props, _ref) {
12031
12166
  let {
@@ -12033,7 +12168,8 @@ const VCarouselItem = genericComponent()({
12033
12168
  attrs
12034
12169
  } = _ref;
12035
12170
  useRender(() => createVNode(VWindowItem, {
12036
- "class": "v-carousel-item",
12171
+ "class": ['v-carousel-item', props.class],
12172
+ "style": props.style,
12037
12173
  "value": props.value
12038
12174
  }, {
12039
12175
  default: () => [createVNode(VImg, attrs, slots)]
@@ -12046,6 +12182,7 @@ const VCode = createSimpleFunctional('v-code');
12046
12182
  const makeVSheetProps = propsFactory({
12047
12183
  color: String,
12048
12184
  ...makeBorderProps(),
12185
+ ...makeComponentProps(),
12049
12186
  ...makeDimensionProps(),
12050
12187
  ...makeElevationProps(),
12051
12188
  ...makeLocationProps(),
@@ -12089,8 +12226,8 @@ const VSheet = genericComponent()({
12089
12226
  roundedClasses
12090
12227
  } = useRounded(props);
12091
12228
  useRender(() => 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]
12229
+ "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, props.class],
12230
+ "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value, props.style]
12094
12231
  }, slots));
12095
12232
  return {};
12096
12233
  }
@@ -12116,7 +12253,8 @@ const VColorPickerCanvas = defineComponent({
12116
12253
  width: {
12117
12254
  type: [Number, String],
12118
12255
  default: 300
12119
- }
12256
+ },
12257
+ ...makeComponentProps()
12120
12258
  },
12121
12259
  emits: {
12122
12260
  'update:color': color => true,
@@ -12261,7 +12399,8 @@ const VColorPickerCanvas = defineComponent({
12261
12399
  onMounted(() => updateCanvas());
12262
12400
  useRender(() => createVNode("div", {
12263
12401
  "ref": resizeRef,
12264
- "class": "v-color-picker-canvas",
12402
+ "class": ['v-color-picker-canvas', props.class],
12403
+ "style": props.style,
12265
12404
  "onClick": handleClick,
12266
12405
  "onMousedown": handleMouseDown,
12267
12406
  "onTouchstart": handleMouseDown
@@ -12494,7 +12633,8 @@ const VColorPickerEdit = defineComponent({
12494
12633
  type: Array,
12495
12634
  default: () => Object.keys(modes),
12496
12635
  validator: v => Array.isArray(v) && v.every(m => Object.keys(modes).includes(m))
12497
- }
12636
+ },
12637
+ ...makeComponentProps()
12498
12638
  },
12499
12639
  emits: {
12500
12640
  'update:color': color => true,
@@ -12534,7 +12674,8 @@ const VColorPickerEdit = defineComponent({
12534
12674
  });
12535
12675
  });
12536
12676
  useRender(() => createVNode("div", {
12537
- "class": "v-color-picker-edit"
12677
+ "class": ['v-color-picker-edit', props.class],
12678
+ "style": props.style
12538
12679
  }, [inputs.value?.map(props => createVNode(VColorPickerInput, props, null)), enabledModes.value.length > 1 && createVNode(VBtn, {
12539
12680
  "icon": "$unfold",
12540
12681
  "size": "x-small",
@@ -12853,7 +12994,8 @@ const VSliderThumb = genericComponent()({
12853
12994
  ripple: {
12854
12995
  type: Boolean,
12855
12996
  default: true
12856
- }
12997
+ },
12998
+ ...makeComponentProps()
12857
12999
  },
12858
13000
  emits: {
12859
13001
  'update:modelValue': v => true
@@ -12931,11 +13073,11 @@ const VSliderThumb = genericComponent()({
12931
13073
  "class": ['v-slider-thumb', {
12932
13074
  'v-slider-thumb--focused': props.focused,
12933
13075
  'v-slider-thumb--pressed': props.focused && mousePressed.value
12934
- }],
12935
- "style": {
13076
+ }, props.class],
13077
+ "style": [{
12936
13078
  '--v-slider-thumb-position': positionPercentage,
12937
13079
  '--v-slider-thumb-size': convertToUnit(thumbSize.value)
12938
- },
13080
+ }, props.style],
12939
13081
  "role": "slider",
12940
13082
  "tabindex": disabled.value ? -1 : 0,
12941
13083
  "aria-valuemin": props.min,
@@ -12981,7 +13123,8 @@ const VSliderTrack = genericComponent()({
12981
13123
  stop: {
12982
13124
  type: Number,
12983
13125
  required: true
12984
- }
13126
+ },
13127
+ ...makeComponentProps()
12985
13128
  },
12986
13129
  emits: {},
12987
13130
  setup(props, _ref) {
@@ -13056,12 +13199,12 @@ const VSliderTrack = genericComponent()({
13056
13199
  });
13057
13200
  useRender(() => {
13058
13201
  return createVNode("div", {
13059
- "class": ['v-slider-track', roundedClasses.value],
13060
- "style": {
13202
+ "class": ['v-slider-track', roundedClasses.value, props.class],
13203
+ "style": [{
13061
13204
  '--v-slider-track-size': convertToUnit(trackSize.value),
13062
13205
  '--v-slider-tick-size': convertToUnit(tickSize.value),
13063
13206
  direction: !vertical.value ? horizontalDirection.value : undefined
13064
- }
13207
+ }, props.style]
13065
13208
  }, [createVNode("div", {
13066
13209
  "class": ['v-slider-track__background', trackColorClasses.value, {
13067
13210
  'v-slider-track__background--opacity': !!color.value || !trackFillColor.value
@@ -13164,7 +13307,8 @@ const VSlider = genericComponent()({
13164
13307
  'v-slider--focused': isFocused.value,
13165
13308
  'v-slider--pressed': mousePressed.value,
13166
13309
  'v-slider--disabled': props.disabled
13167
- }]
13310
+ }, props.class],
13311
+ "style": props.style
13168
13312
  }, inputProps, {
13169
13313
  "focused": isFocused.value
13170
13314
  }), {
@@ -13227,7 +13371,8 @@ const VColorPickerPreview = defineComponent({
13227
13371
  type: Object
13228
13372
  },
13229
13373
  disabled: Boolean,
13230
- hideAlpha: Boolean
13374
+ hideAlpha: Boolean,
13375
+ ...makeComponentProps()
13231
13376
  },
13232
13377
  emits: {
13233
13378
  'update:color': color => true
@@ -13239,7 +13384,8 @@ const VColorPickerPreview = defineComponent({
13239
13384
  useRender(() => createVNode("div", {
13240
13385
  "class": ['v-color-picker-preview', {
13241
13386
  'v-color-picker-preview--hide-alpha': props.hideAlpha
13242
- }]
13387
+ }, props.class],
13388
+ "style": props.style
13243
13389
  }, [createVNode("div", {
13244
13390
  "class": "v-color-picker-preview__dot"
13245
13391
  }, [createVNode("div", {
@@ -13620,7 +13766,8 @@ const VColorPickerSwatches = defineComponent({
13620
13766
  },
13621
13767
  disabled: Boolean,
13622
13768
  color: Object,
13623
- maxHeight: [Number, String]
13769
+ maxHeight: [Number, String],
13770
+ ...makeComponentProps()
13624
13771
  },
13625
13772
  emits: {
13626
13773
  'update:color': color => true
@@ -13630,10 +13777,10 @@ const VColorPickerSwatches = defineComponent({
13630
13777
  emit
13631
13778
  } = _ref;
13632
13779
  useRender(() => createVNode("div", {
13633
- "class": "v-color-picker-swatches",
13634
- "style": {
13780
+ "class": ['v-color-picker-swatches', props.class],
13781
+ "style": [{
13635
13782
  maxHeight: convertToUnit(props.maxHeight)
13636
- }
13783
+ }, props.style]
13637
13784
  }, [createVNode("div", null, [props.swatches.map(swatch => createVNode("div", {
13638
13785
  "class": "v-color-picker-swatches__swatch"
13639
13786
  }, [swatch.map(color => {
@@ -13737,13 +13884,13 @@ const VColorPicker = defineComponent({
13737
13884
  "rounded": props.rounded,
13738
13885
  "elevation": props.elevation,
13739
13886
  "theme": props.theme,
13740
- "class": ['v-color-picker'],
13741
- "style": {
13887
+ "class": ['v-color-picker', props.class],
13888
+ "style": [{
13742
13889
  '--v-color-picker-color-hsv': HSVtoCSS({
13743
13890
  ...(currentColor.value ?? nullColor),
13744
13891
  a: 1
13745
13892
  })
13746
- }
13893
+ }, props.style]
13747
13894
  }, sheetProps, {
13748
13895
  "maxWidth": props.width
13749
13896
  }), {
@@ -14054,7 +14201,8 @@ const VCombobox = genericComponent()({
14054
14201
  'v-combobox--chips': !!props.chips,
14055
14202
  'v-combobox--selecting-index': selectionIndex.value > -1,
14056
14203
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
14057
- }],
14204
+ }, props.class],
14205
+ "style": props.style,
14058
14206
  "appendInnerIcon": props.items.length ? props.menuIcon : undefined,
14059
14207
  "readonly": props.readonly,
14060
14208
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -14211,7 +14359,7 @@ const VDialog = genericComponent()({
14211
14359
  ![document, overlay.value.contentEl].includes(after) &&
14212
14360
  // It isn't inside the dialog body
14213
14361
  !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"]'));
14362
+ const focusable = focusableChildren(overlay.value.contentEl);
14215
14363
  if (!focusable.length) return;
14216
14364
  const firstElement = focusable[0];
14217
14365
  const lastElement = focusable[focusable.length - 1];
@@ -14252,7 +14400,8 @@ const VDialog = genericComponent()({
14252
14400
  "class": ['v-dialog', {
14253
14401
  'v-dialog--fullscreen': props.fullscreen,
14254
14402
  'v-dialog--scrollable': props.scrollable
14255
- }]
14403
+ }, props.class],
14404
+ "style": props.style
14256
14405
  }, overlayProps, {
14257
14406
  "modelValue": isActive.value,
14258
14407
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -14291,6 +14440,7 @@ const VExpansionPanels = genericComponent()({
14291
14440
  validator: v => allowedVariants.includes(v)
14292
14441
  },
14293
14442
  readonly: Boolean,
14443
+ ...makeComponentProps(),
14294
14444
  ...makeGroupProps(),
14295
14445
  ...makeTagProps(),
14296
14446
  ...makeThemeProps()
@@ -14316,7 +14466,8 @@ const VExpansionPanels = genericComponent()({
14316
14466
  }
14317
14467
  });
14318
14468
  useRender(() => createVNode(props.tag, {
14319
- "class": ['v-expansion-panels', themeClasses.value, variantClass.value]
14469
+ "class": ['v-expansion-panels', themeClasses.value, variantClass.value, props.class],
14470
+ "style": props.style
14320
14471
  }, slots));
14321
14472
  return {};
14322
14473
  }
@@ -14345,6 +14496,7 @@ const VExpansionPanelTitle = genericComponent()({
14345
14496
  Ripple
14346
14497
  },
14347
14498
  props: {
14499
+ ...makeComponentProps(),
14348
14500
  ...makeVExpansionPanelTitleProps()
14349
14501
  },
14350
14502
  setup(props, _ref) {
@@ -14367,8 +14519,8 @@ const VExpansionPanelTitle = genericComponent()({
14367
14519
  useRender(() => withDirectives(createVNode("button", {
14368
14520
  "class": ['v-expansion-panel-title', {
14369
14521
  'v-expansion-panel-title--active': expansionPanel.isSelected.value
14370
- }, backgroundColorClasses.value],
14371
- "style": backgroundColorStyles.value,
14522
+ }, backgroundColorClasses.value, props.class],
14523
+ "style": [backgroundColorStyles.value, props.style],
14372
14524
  "type": "button",
14373
14525
  "tabindex": expansionPanel.disabled.value ? -1 : undefined,
14374
14526
  "disabled": expansionPanel.disabled.value,
@@ -14388,6 +14540,7 @@ const VExpansionPanelTitle = genericComponent()({
14388
14540
  const VExpansionPanelText = genericComponent()({
14389
14541
  name: 'VExpansionPanelText',
14390
14542
  props: {
14543
+ ...makeComponentProps(),
14391
14544
  ...makeLazyProps()
14392
14545
  },
14393
14546
  setup(props, _ref) {
@@ -14404,7 +14557,8 @@ const VExpansionPanelText = genericComponent()({
14404
14557
  "onAfterLeave": onAfterLeave
14405
14558
  }, {
14406
14559
  default: () => [withDirectives(createVNode("div", {
14407
- "class": "v-expansion-panel-text"
14560
+ "class": ['v-expansion-panel-text', props.class],
14561
+ "style": props.style
14408
14562
  }, [slots.default && hasContent.value && createVNode("div", {
14409
14563
  "class": "v-expansion-panel-text__wrapper"
14410
14564
  }, [slots.default?.()])]), [[vShow, expansionPanel.isSelected.value]])]
@@ -14419,6 +14573,7 @@ const VExpansionPanel = genericComponent()({
14419
14573
  title: String,
14420
14574
  text: String,
14421
14575
  bgColor: String,
14576
+ ...makeComponentProps(),
14422
14577
  ...makeElevationProps(),
14423
14578
  ...makeGroupItemProps(),
14424
14579
  ...makeLazyProps(),
@@ -14467,8 +14622,8 @@ const VExpansionPanel = genericComponent()({
14467
14622
  'v-expansion-panel--before-active': isBeforeSelected.value,
14468
14623
  'v-expansion-panel--after-active': isAfterSelected.value,
14469
14624
  'v-expansion-panel--disabled': isDisabled.value
14470
- }, roundedClasses.value, backgroundColorClasses.value],
14471
- "style": backgroundColorStyles.value,
14625
+ }, roundedClasses.value, backgroundColorClasses.value, props.class],
14626
+ "style": [backgroundColorStyles.value, props.style],
14472
14627
  "aria-expanded": groupItem.isSelected.value
14473
14628
  }, {
14474
14629
  default: () => [createVNode("div", {
@@ -14618,7 +14773,8 @@ const VFileInput = genericComponent()({
14618
14773
  "ref": vInputRef,
14619
14774
  "modelValue": model.value,
14620
14775
  "onUpdate:modelValue": $event => model.value = $event,
14621
- "class": "v-file-input",
14776
+ "class": ['v-file-input', props.class],
14777
+ "style": props.style,
14622
14778
  "onClick:prepend": onClickPrepend
14623
14779
  }, rootAttrs, inputProps, {
14624
14780
  "focused": isFocused.value
@@ -14710,6 +14866,7 @@ const VFooter = genericComponent()({
14710
14866
  default: 'auto'
14711
14867
  },
14712
14868
  ...makeBorderProps(),
14869
+ ...makeComponentProps(),
14713
14870
  ...makeElevationProps(),
14714
14871
  ...makeLayoutItemProps(),
14715
14872
  ...makeRoundedProps(),
@@ -14759,8 +14916,8 @@ const VFooter = genericComponent()({
14759
14916
  });
14760
14917
  useRender(() => createVNode(props.tag, {
14761
14918
  "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]
14919
+ "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
14920
+ "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined, props.style]
14764
14921
  }, slots));
14765
14922
  return {};
14766
14923
  }
@@ -14771,6 +14928,7 @@ const VFooter = genericComponent()({
14771
14928
  const VForm = genericComponent()({
14772
14929
  name: 'VForm',
14773
14930
  props: {
14931
+ ...makeComponentProps(),
14774
14932
  ...makeFormProps()
14775
14933
  },
14776
14934
  emits: {
@@ -14809,7 +14967,8 @@ const VForm = genericComponent()({
14809
14967
  }
14810
14968
  useRender(() => createVNode("form", {
14811
14969
  "ref": formRef,
14812
- "class": "v-form",
14970
+ "class": ['v-form', props.class],
14971
+ "style": props.style,
14813
14972
  "novalidate": true,
14814
14973
  "onReset": onReset,
14815
14974
  "onSubmit": onSubmit
@@ -14825,6 +14984,7 @@ const VContainer = genericComponent()({
14825
14984
  type: Boolean,
14826
14985
  default: false
14827
14986
  },
14987
+ ...makeComponentProps(),
14828
14988
  ...makeTagProps()
14829
14989
  },
14830
14990
  setup(props, _ref) {
@@ -14834,7 +14994,8 @@ const VContainer = genericComponent()({
14834
14994
  useRender(() => createVNode(props.tag, {
14835
14995
  "class": ['v-container', {
14836
14996
  'v-container--fluid': props.fluid
14837
- }]
14997
+ }, props.class],
14998
+ "style": props.style
14838
14999
  }, slots));
14839
15000
  return {};
14840
15001
  }
@@ -14925,6 +15086,7 @@ const VCol = genericComponent()({
14925
15086
  default: null,
14926
15087
  validator: str => ALIGN_SELF_VALUES.includes(str)
14927
15088
  },
15089
+ ...makeComponentProps(),
14928
15090
  ...makeTagProps()
14929
15091
  },
14930
15092
  setup(props, _ref) {
@@ -14955,7 +15117,8 @@ const VCol = genericComponent()({
14955
15117
  return classList;
14956
15118
  });
14957
15119
  return () => h(props.tag, {
14958
- class: classes.value
15120
+ class: [classes.value, props.class],
15121
+ style: props.style
14959
15122
  }, slots.default?.());
14960
15123
  }
14961
15124
  });
@@ -15041,6 +15204,7 @@ const VRow = genericComponent()({
15041
15204
  validator: alignContentValidator
15042
15205
  },
15043
15206
  ...alignContentProps,
15207
+ ...makeComponentProps(),
15044
15208
  ...makeTagProps()
15045
15209
  },
15046
15210
  setup(props, _ref) {
@@ -15069,7 +15233,8 @@ const VRow = genericComponent()({
15069
15233
  return classList;
15070
15234
  });
15071
15235
  return () => h(props.tag, {
15072
- class: ['v-row', classes.value]
15236
+ class: ['v-row', classes.value, props.class],
15237
+ style: props.style
15073
15238
  }, slots.default?.());
15074
15239
  }
15075
15240
  });
@@ -15113,6 +15278,7 @@ const VItemGroupSymbol = Symbol.for('vuetify:v-item-group');
15113
15278
  const VItemGroup = genericComponent()({
15114
15279
  name: 'VItemGroup',
15115
15280
  props: {
15281
+ ...makeComponentProps(),
15116
15282
  ...makeGroupProps({
15117
15283
  selectedClass: 'v-item--selected'
15118
15284
  }),
@@ -15137,7 +15303,8 @@ const VItemGroup = genericComponent()({
15137
15303
  selected
15138
15304
  } = useGroup(props, VItemGroupSymbol);
15139
15305
  return () => createVNode(props.tag, {
15140
- "class": ['v-item-group', themeClasses.value]
15306
+ "class": ['v-item-group', themeClasses.value, props.class],
15307
+ "style": props.style
15141
15308
  }, {
15142
15309
  default: () => [slots.default?.({
15143
15310
  isSelected,
@@ -15187,7 +15354,10 @@ const VKbd = createSimpleFunctional('v-kbd');
15187
15354
 
15188
15355
  const VLayout = genericComponent()({
15189
15356
  name: 'VLayout',
15190
- props: makeLayoutProps(),
15357
+ props: {
15358
+ ...makeComponentProps(),
15359
+ ...makeLayoutProps()
15360
+ },
15191
15361
  setup(props, _ref) {
15192
15362
  let {
15193
15363
  slots
@@ -15201,8 +15371,8 @@ const VLayout = genericComponent()({
15201
15371
  } = createLayout(props);
15202
15372
  useRender(() => createVNode("div", {
15203
15373
  "ref": layoutRef,
15204
- "class": layoutClasses.value,
15205
- "style": layoutStyles.value
15374
+ "class": [layoutClasses.value, props.class],
15375
+ "style": [layoutStyles.value, props.style]
15206
15376
  }, [slots.default?.()]));
15207
15377
  return {
15208
15378
  getLayoutItem,
@@ -15225,6 +15395,7 @@ const VLayoutItem = genericComponent()({
15225
15395
  default: 300
15226
15396
  },
15227
15397
  modelValue: Boolean,
15398
+ ...makeComponentProps(),
15228
15399
  ...makeLayoutItemProps()
15229
15400
  },
15230
15401
  setup(props, _ref) {
@@ -15243,8 +15414,8 @@ const VLayoutItem = genericComponent()({
15243
15414
  absolute: toRef(props, 'absolute')
15244
15415
  });
15245
15416
  return () => createVNode("div", {
15246
- "class": ['v-layout-item'],
15247
- "style": layoutItemStyles.value
15417
+ "class": ['v-layout-item', props.class],
15418
+ "style": [layoutItemStyles.value, props.style]
15248
15419
  }, [slots.default?.()]);
15249
15420
  }
15250
15421
  });
@@ -15268,6 +15439,7 @@ const VLazy = genericComponent()({
15268
15439
  threshold: undefined
15269
15440
  })
15270
15441
  },
15442
+ ...makeComponentProps(),
15271
15443
  ...makeDimensionProps(),
15272
15444
  ...makeTagProps(),
15273
15445
  ...makeTransitionProps({
@@ -15290,8 +15462,8 @@ const VLazy = genericComponent()({
15290
15462
  isActive.value = isIntersecting;
15291
15463
  }
15292
15464
  useRender(() => withDirectives(createVNode(props.tag, {
15293
- "class": "v-lazy",
15294
- "style": dimensionStyles.value
15465
+ "class": ['v-lazy', props.class],
15466
+ "style": [dimensionStyles.value, props.style]
15295
15467
  }, {
15296
15468
  default: () => [isActive.value && createVNode(MaybeTransition, {
15297
15469
  "transition": props.transition,
@@ -15316,7 +15488,8 @@ const VLocaleProvider = genericComponent()({
15316
15488
  rtl: {
15317
15489
  type: Boolean,
15318
15490
  default: undefined
15319
- }
15491
+ },
15492
+ ...makeComponentProps()
15320
15493
  },
15321
15494
  setup(props, _ref) {
15322
15495
  let {
@@ -15326,7 +15499,8 @@ const VLocaleProvider = genericComponent()({
15326
15499
  rtlClasses
15327
15500
  } = provideLocale(props);
15328
15501
  useRender(() => createVNode("div", {
15329
- "class": ['v-locale-provider', rtlClasses.value]
15502
+ "class": ['v-locale-provider', rtlClasses.value, props.class],
15503
+ "style": props.style
15330
15504
  }, [slots.default?.()]));
15331
15505
  return {};
15332
15506
  }
@@ -15336,6 +15510,7 @@ const VMain = genericComponent()({
15336
15510
  name: 'VMain',
15337
15511
  props: {
15338
15512
  scrollable: Boolean,
15513
+ ...makeComponentProps(),
15339
15514
  ...makeTagProps({
15340
15515
  tag: 'main'
15341
15516
  })
@@ -15353,8 +15528,8 @@ const VMain = genericComponent()({
15353
15528
  useRender(() => createVNode(props.tag, {
15354
15529
  "class": ['v-main', {
15355
15530
  'v-main--scrollable': props.scrollable
15356
- }],
15357
- "style": [mainStyles.value, ssrBootStyles.value]
15531
+ }, props.class],
15532
+ "style": [mainStyles.value, ssrBootStyles.value, props.style]
15358
15533
  }, {
15359
15534
  default: () => [props.scrollable ? createVNode("div", {
15360
15535
  "class": "v-main__scroller"
@@ -15364,593 +15539,167 @@ const VMain = genericComponent()({
15364
15539
  }
15365
15540
  });
15366
15541
 
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);
15542
+ function useSticky(_ref) {
15543
+ let {
15544
+ rootEl,
15545
+ isSticky,
15546
+ layoutItemStyles
15547
+ } = _ref;
15548
+ const isStuck = ref(false);
15549
+ const stuckPosition = ref(0);
15550
+ const stickyStyles = computed(() => {
15551
+ const side = typeof isStuck.value === 'boolean' ? 'top' : isStuck.value;
15552
+ return [isSticky.value ? {
15553
+ top: 'auto',
15554
+ bottom: 'auto',
15555
+ height: undefined
15556
+ } : undefined, isStuck.value ? {
15557
+ [side]: convertToUnit(stuckPosition.value)
15558
+ } : {
15559
+ top: layoutItemStyles.value.top
15560
+ }];
15561
+ });
15562
+ onMounted(() => {
15563
+ watch(isSticky, val => {
15564
+ if (val) {
15565
+ window.addEventListener('scroll', onScroll, {
15566
+ passive: true
15567
+ });
15568
+ } else {
15569
+ window.removeEventListener('scroll', onScroll);
15570
+ }
15571
+ }, {
15572
+ immediate: true
15573
+ });
15574
+ });
15575
+ onBeforeUnmount(() => {
15576
+ document.removeEventListener('scroll', onScroll);
15577
+ });
15578
+ let lastScrollTop = 0;
15579
+ function onScroll() {
15580
+ const direction = lastScrollTop > window.scrollY ? 'up' : 'down';
15581
+ const rect = rootEl.value.getBoundingClientRect();
15582
+ const layoutTop = parseFloat(layoutItemStyles.value.top ?? 0);
15583
+ const top = window.scrollY - Math.max(0, stuckPosition.value - layoutTop);
15584
+ const bottom = rect.height + Math.max(stuckPosition.value, layoutTop) - window.scrollY - window.innerHeight;
15585
+ if (rect.height < window.innerHeight - layoutTop) {
15586
+ isStuck.value = 'top';
15587
+ stuckPosition.value = layoutTop;
15588
+ } else if (direction === 'up' && isStuck.value === 'bottom' || direction === 'down' && isStuck.value === 'top') {
15589
+ stuckPosition.value = window.scrollY + rect.top;
15590
+ isStuck.value = true;
15591
+ } else if (direction === 'down' && bottom <= 0) {
15592
+ stuckPosition.value = 0;
15593
+ isStuck.value = 'bottom';
15594
+ } else if (direction === 'up' && top <= 0) {
15595
+ stuckPosition.value = rect.top + top;
15596
+ isStuck.value = 'top';
15597
+ }
15598
+ lastScrollTop = window.scrollY;
15378
15599
  }
15379
- for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
15380
- const day = new Date(date.getFullYear(), date.getMonth(), i);
15600
+ return {
15601
+ isStuck,
15602
+ stickyStyles
15603
+ };
15604
+ }
15381
15605
 
15382
- // Add the day to the current week
15383
- currentWeek.push(day);
15606
+ const HORIZON = 100; // ms
15607
+ const HISTORY = 20; // number of samples to keep
15384
15608
 
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 = [];
15609
+ /** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */
15610
+ function kineticEnergyToVelocity(work) {
15611
+ const sqrt2 = 1.41421356237;
15612
+ return (work < 0 ? -1.0 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;
15613
+ }
15614
+
15615
+ /**
15616
+ * Returns pointer velocity in px/s
15617
+ */
15618
+ function calculateImpulseVelocity(samples) {
15619
+ // The input should be in reversed time order (most recent sample at index i=0)
15620
+ if (samples.length < 2) {
15621
+ // if 0 or 1 points, velocity is zero
15622
+ return 0;
15623
+ }
15624
+ // if (samples[1].t > samples[0].t) {
15625
+ // // Algorithm will still work, but not perfectly
15626
+ // consoleWarn('Samples provided to calculateImpulseVelocity in the wrong order')
15627
+ // }
15628
+ if (samples.length === 2) {
15629
+ // if 2 points, basic linear calculation
15630
+ if (samples[1].t === samples[0].t) {
15631
+ // consoleWarn(`Events have identical time stamps t=${samples[0].t}, setting velocity = 0`)
15632
+ return 0;
15389
15633
  }
15634
+ return (samples[1].d - samples[0].d) / (samples[1].t - samples[0].t);
15390
15635
  }
15391
- for (let i = currentWeek.length; i < 7; i++) {
15392
- currentWeek.push(null);
15636
+ // Guaranteed to have at least 3 points here
15637
+ // start with the oldest sample and go forward in time
15638
+ let work = 0;
15639
+ for (let i = samples.length - 1; i > 0; i--) {
15640
+ if (samples[i].t === samples[i - 1].t) {
15641
+ // consoleWarn(`Events have identical time stamps t=${samples[i].t}, skipping sample`)
15642
+ continue;
15643
+ }
15644
+ const vprev = kineticEnergyToVelocity(work); // v[i-1]
15645
+ const vcurr = (samples[i].d - samples[i - 1].d) / (samples[i].t - samples[i - 1].t); // v[i]
15646
+ work += (vcurr - vprev) * Math.abs(vcurr);
15647
+ if (i === samples.length - 1) {
15648
+ work *= 0.5;
15649
+ }
15393
15650
  }
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);
15651
+ return kineticEnergyToVelocity(work) * 1000;
15402
15652
  }
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);
15653
+ function useVelocity() {
15654
+ const touches = {};
15655
+ function addMovement(e) {
15656
+ Array.from(e.changedTouches).forEach(touch => {
15657
+ const samples = touches[touch.identifier] ?? (touches[touch.identifier] = new CircularBuffer(HISTORY));
15658
+ samples.push([e.timeStamp, touch]);
15659
+ });
15409
15660
  }
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 = inject$1(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
- 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 = ref(false);
15800
- const stuckPosition = ref(0);
15801
- const stickyStyles = 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
- onMounted(() => {
15814
- 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
- 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
- };
15661
+ function endTouch(e) {
15662
+ Array.from(e.changedTouches).forEach(touch => {
15663
+ delete touches[touch.identifier];
15664
+ });
15665
+ }
15666
+ function getVelocity(id) {
15667
+ const samples = touches[id]?.values().reverse();
15668
+ if (!samples) {
15669
+ throw new Error(`No samples for touch id ${id}`);
15670
+ }
15671
+ const newest = samples[0];
15672
+ const x = [];
15673
+ const y = [];
15674
+ for (const val of samples) {
15675
+ if (newest[0] - val[0] > HORIZON) break;
15676
+ x.push({
15677
+ t: val[0],
15678
+ d: val[1].clientX
15679
+ });
15680
+ y.push({
15681
+ t: val[0],
15682
+ d: val[1].clientY
15683
+ });
15684
+ }
15685
+ return {
15686
+ x: calculateImpulseVelocity(x),
15687
+ y: calculateImpulseVelocity(y),
15688
+ get direction() {
15689
+ const {
15690
+ x,
15691
+ y
15692
+ } = this;
15693
+ const [absX, absY] = [Math.abs(x), Math.abs(y)];
15694
+ return absX > absY && x >= 0 ? 'right' : absX > absY && x <= 0 ? 'left' : absY > absX && y >= 0 ? 'down' : absY > absX && y <= 0 ? 'up' : oops$1();
15695
+ }
15696
+ };
15697
+ }
15698
+ return {
15699
+ addMovement,
15700
+ endTouch,
15701
+ getVelocity
15702
+ };
15954
15703
  }
15955
15704
  function oops$1() {
15956
15705
  throw new Error();
@@ -16126,6 +15875,7 @@ const VNavigationDrawer = genericComponent()({
16126
15875
  },
16127
15876
  sticky: Boolean,
16128
15877
  ...makeBorderProps(),
15878
+ ...makeComponentProps(),
16129
15879
  ...makeElevationProps(),
16130
15880
  ...makeLayoutItemProps(),
16131
15881
  ...makeRoundedProps(),
@@ -16277,8 +16027,8 @@ const VNavigationDrawer = genericComponent()({
16277
16027
  'v-navigation-drawer--temporary': isTemporary.value,
16278
16028
  'v-navigation-drawer--active': isActive.value,
16279
16029
  '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]
16030
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
16031
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
16282
16032
  }, attrs), {
16283
16033
  default: () => [hasImage && createVNode("div", {
16284
16034
  "key": "image",
@@ -16407,6 +16157,7 @@ const VPagination = genericComponent()({
16407
16157
  },
16408
16158
  showFirstLastPage: Boolean,
16409
16159
  ...makeBorderProps(),
16160
+ ...makeComponentProps(),
16410
16161
  ...makeDensityProps(),
16411
16162
  ...makeElevationProps(),
16412
16163
  ...makeRoundedProps(),
@@ -16603,7 +16354,8 @@ const VPagination = genericComponent()({
16603
16354
  }
16604
16355
  useRender(() => createVNode(props.tag, {
16605
16356
  "ref": resizeRef,
16606
- "class": ['v-pagination', themeClasses.value],
16357
+ "class": ['v-pagination', themeClasses.value, props.class],
16358
+ "style": props.style,
16607
16359
  "role": "navigation",
16608
16360
  "aria-label": t(props.ariaLabel),
16609
16361
  "onKeydown": onKeydown,
@@ -16662,7 +16414,8 @@ const VParallax = genericComponent()({
16662
16414
  scale: {
16663
16415
  type: [Number, String],
16664
16416
  default: 0.5
16665
- }
16417
+ },
16418
+ ...makeComponentProps()
16666
16419
  },
16667
16420
  setup(props, _ref) {
16668
16421
  let {
@@ -16724,7 +16477,8 @@ const VParallax = genericComponent()({
16724
16477
  useRender(() => createVNode(VImg, {
16725
16478
  "class": ['v-parallax', {
16726
16479
  'v-parallax--active': isIntersecting.value
16727
- }],
16480
+ }, props.class],
16481
+ "style": props.style,
16728
16482
  "ref": root,
16729
16483
  "cover": true,
16730
16484
  "onLoadstart": onScroll,
@@ -16749,7 +16503,8 @@ const VRadio = genericComponent()({
16749
16503
  slots
16750
16504
  } = _ref;
16751
16505
  useRender(() => createVNode(VSelectionControl, mergeProps(props, {
16752
- "class": "v-radio",
16506
+ "class": ['v-radio', props.class],
16507
+ "style": props.style,
16753
16508
  "type": "radio"
16754
16509
  }), slots));
16755
16510
  return {};
@@ -16803,7 +16558,8 @@ const VRadioGroup = genericComponent()({
16803
16558
  }
16804
16559
  }) : props.label;
16805
16560
  return createVNode(VInput, mergeProps({
16806
- "class": "v-radio-group"
16561
+ "class": ['v-radio-group', props.class],
16562
+ "style": props.style
16807
16563
  }, inputAttrs, inputProps, {
16808
16564
  "modelValue": model.value,
16809
16565
  "onUpdate:modelValue": $event => model.value = $event,
@@ -16941,7 +16697,8 @@ const VRangeSlider = genericComponent()({
16941
16697
  'v-slider--focused': isFocused.value,
16942
16698
  'v-slider--pressed': mousePressed.value,
16943
16699
  'v-slider--disabled': props.disabled
16944
- }],
16700
+ }, props.class],
16701
+ "style": props.style,
16945
16702
  "ref": inputRef
16946
16703
  }, inputProps, {
16947
16704
  "focused": isFocused.value
@@ -17084,6 +16841,7 @@ const VRating = genericComponent()({
17084
16841
  validator: v => ['top', 'bottom'].includes(v)
17085
16842
  },
17086
16843
  ripple: Boolean,
16844
+ ...makeComponentProps(),
17087
16845
  ...makeDensityProps(),
17088
16846
  ...makeSizeProps(),
17089
16847
  ...makeTagProps(),
@@ -17201,7 +16959,8 @@ const VRating = genericComponent()({
17201
16959
  "class": ['v-rating', {
17202
16960
  'v-rating--hover': props.hover,
17203
16961
  'v-rating--readonly': props.readonly
17204
- }, themeClasses.value]
16962
+ }, themeClasses.value, props.class],
16963
+ "style": props.style
17205
16964
  }, {
17206
16965
  default: () => [createVNode(VRatingItem, {
17207
16966
  "value": 0,
@@ -17301,6 +17060,7 @@ const makeVSlideGroupProps = propsFactory({
17301
17060
  type: [Boolean, String],
17302
17061
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
17303
17062
  },
17063
+ ...makeComponentProps(),
17304
17064
  ...makeTagProps(),
17305
17065
  ...makeGroupProps({
17306
17066
  selectedClass: 'v-slide-group-item--active'
@@ -17464,7 +17224,7 @@ const VSlideGroup = genericComponent()({
17464
17224
  function focus(location) {
17465
17225
  if (!contentRef.value) return;
17466
17226
  if (!location) {
17467
- const focusable = [...contentRef.value.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')].filter(el => !el.hasAttribute('disabled'));
17227
+ const focusable = focusableChildren(contentRef.value);
17468
17228
  focusable[0]?.focus();
17469
17229
  } else if (location === 'next') {
17470
17230
  const el = contentRef.value.querySelector(':focus')?.nextElementSibling;
@@ -17541,7 +17301,8 @@ const VSlideGroup = genericComponent()({
17541
17301
  'v-slide-group--vertical': !isHorizontal.value,
17542
17302
  'v-slide-group--has-affixes': hasAffixes.value,
17543
17303
  'v-slide-group--is-overflowing': isOverflowing.value
17544
- }],
17304
+ }, props.class],
17305
+ "style": props.style,
17545
17306
  "tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
17546
17307
  "onFocus": onFocus
17547
17308
  }, {
@@ -17691,7 +17452,8 @@ const VSnackbar = genericComponent()({
17691
17452
  'v-snackbar--active': isActive.value,
17692
17453
  'v-snackbar--multi-line': props.multiLine && !props.vertical,
17693
17454
  'v-snackbar--vertical': props.vertical
17694
- }, positionClasses.value]
17455
+ }, positionClasses.value, props.class],
17456
+ "style": props.style
17695
17457
  }, overlayProps, {
17696
17458
  "modelValue": isActive.value,
17697
17459
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -17791,7 +17553,8 @@ const VSwitch = genericComponent()({
17791
17553
  'v-switch--inset': props.inset
17792
17554
  }, {
17793
17555
  'v-switch--indeterminate': indeterminate.value
17794
- }, loaderClasses.value]
17556
+ }, loaderClasses.value, props.class],
17557
+ "style": props.style
17795
17558
  }, inputAttrs, inputProps, {
17796
17559
  "id": id.value,
17797
17560
  "focused": isFocused.value
@@ -17860,6 +17623,7 @@ const VSystemBar = genericComponent()({
17860
17623
  color: String,
17861
17624
  height: [Number, String],
17862
17625
  window: Boolean,
17626
+ ...makeComponentProps(),
17863
17627
  ...makeElevationProps(),
17864
17628
  ...makeLayoutItemProps(),
17865
17629
  ...makeRoundedProps(),
@@ -17901,8 +17665,8 @@ const VSystemBar = genericComponent()({
17901
17665
  useRender(() => createVNode(props.tag, {
17902
17666
  "class": ['v-system-bar', {
17903
17667
  'v-system-bar--window': props.window
17904
- }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value],
17905
- "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value]
17668
+ }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value, props.class],
17669
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, props.style]
17906
17670
  }, slots));
17907
17671
  return {};
17908
17672
  }
@@ -17975,10 +17739,10 @@ const VTab = genericComponent()({
17975
17739
  useRender(() => {
17976
17740
  const [btnProps] = VBtn.filterProps(props);
17977
17741
  return createVNode(VBtn, mergeProps({
17978
- "_as": "VTab",
17979
17742
  "symbol": VTabsSymbol,
17980
17743
  "ref": rootEl,
17981
- "class": ['v-tab'],
17744
+ "class": ['v-tab', props.class],
17745
+ "style": props.style,
17982
17746
  "tabindex": isSelected.value ? 0 : -1,
17983
17747
  "role": "tab",
17984
17748
  "aria-selected": String(isSelected.value),
@@ -18073,10 +17837,10 @@ const VTabs = genericComponent()({
18073
17837
  'v-tabs--fixed-tabs': props.fixedTabs,
18074
17838
  'v-tabs--grow': props.grow,
18075
17839
  'v-tabs--stacked': props.stacked
18076
- }, densityClasses.value, backgroundColorClasses.value],
17840
+ }, densityClasses.value, backgroundColorClasses.value, props.class],
18077
17841
  "style": [{
18078
17842
  '--v-tabs-height': convertToUnit(props.height)
18079
- }, backgroundColorStyles.value],
17843
+ }, backgroundColorStyles.value, props.style],
18080
17844
  "role": "tablist",
18081
17845
  "symbol": VTabsSymbol
18082
17846
  }), {
@@ -18096,6 +17860,7 @@ const VTable = genericComponent()({
18096
17860
  fixedFooter: Boolean,
18097
17861
  height: [Number, String],
18098
17862
  hover: Boolean,
17863
+ ...makeComponentProps(),
18099
17864
  ...makeDensityProps(),
18100
17865
  ...makeTagProps(),
18101
17866
  ...makeThemeProps()
@@ -18118,7 +17883,8 @@ const VTable = genericComponent()({
18118
17883
  'v-table--has-top': !!slots.top,
18119
17884
  'v-table--has-bottom': !!slots.bottom,
18120
17885
  'v-table--hover': props.hover
18121
- }, themeClasses.value, densityClasses.value]
17886
+ }, themeClasses.value, densityClasses.value, props.class],
17887
+ "style": props.style
18122
17888
  }, {
18123
17889
  default: () => [slots.top?.(), slots.default ? createVNode("div", {
18124
17890
  "class": "v-table__wrapper",
@@ -18283,7 +18049,8 @@ const VTextarea = genericComponent()({
18283
18049
  'v-textarea--auto-grow': props.autoGrow,
18284
18050
  'v-textarea--no-resize': props.noResize || props.autoGrow,
18285
18051
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
18286
- }]
18052
+ }, props.class],
18053
+ "style": props.style
18287
18054
  }, rootAttrs, inputProps, {
18288
18055
  "focused": isFocused.value
18289
18056
  }), {
@@ -18367,6 +18134,7 @@ const VThemeProvider = genericComponent()({
18367
18134
  name: 'VThemeProvider',
18368
18135
  props: {
18369
18136
  withBackground: Boolean,
18137
+ ...makeComponentProps(),
18370
18138
  ...makeThemeProps(),
18371
18139
  ...makeTagProps()
18372
18140
  },
@@ -18380,7 +18148,8 @@ const VThemeProvider = genericComponent()({
18380
18148
  return () => {
18381
18149
  if (!props.withBackground) return slots.default?.();
18382
18150
  return createVNode(props.tag, {
18383
- "class": ['v-theme-provider', themeClasses.value]
18151
+ "class": ['v-theme-provider', themeClasses.value, props.class],
18152
+ "style": props.style
18384
18153
  }, {
18385
18154
  default: () => [slots.default?.()]
18386
18155
  });
@@ -18425,6 +18194,7 @@ const VTimeline = genericComponent()({
18425
18194
  type: String,
18426
18195
  validator: v => ['start', 'end', 'both'].includes(v)
18427
18196
  },
18197
+ ...makeComponentProps(),
18428
18198
  ...makeDensityProps(),
18429
18199
  ...makeTagProps(),
18430
18200
  ...makeThemeProps()
@@ -18468,10 +18238,10 @@ const VTimeline = genericComponent()({
18468
18238
  useRender(() => createVNode(props.tag, {
18469
18239
  "class": ['v-timeline', `v-timeline--${props.direction}`, `v-timeline--align-${props.align}`, `v-timeline--justify-${props.justify}`, truncateClasses.value, {
18470
18240
  'v-timeline--inset-line': !!props.lineInset
18471
- }, themeClasses.value, densityClasses.value, sideClasses.value],
18472
- "style": {
18241
+ }, themeClasses.value, densityClasses.value, sideClasses.value, props.class],
18242
+ "style": [{
18473
18243
  '--v-timeline-line-thickness': convertToUnit(props.lineThickness)
18474
- }
18244
+ }, props.style]
18475
18245
  }, slots));
18476
18246
  return {};
18477
18247
  }
@@ -18486,6 +18256,7 @@ const VTimelineDivider = genericComponent()({
18486
18256
  icon: IconValue,
18487
18257
  iconColor: String,
18488
18258
  lineColor: String,
18259
+ ...makeComponentProps(),
18489
18260
  ...makeRoundedProps(),
18490
18261
  ...makeSizeProps(),
18491
18262
  ...makeElevationProps()
@@ -18515,7 +18286,8 @@ const VTimelineDivider = genericComponent()({
18515
18286
  useRender(() => createVNode("div", {
18516
18287
  "class": ['v-timeline-divider', {
18517
18288
  'v-timeline-divider--fill-dot': props.fillDot
18518
- }]
18289
+ }, props.class],
18290
+ "style": props.style
18519
18291
  }, [createVNode("div", {
18520
18292
  "class": ['v-timeline-divider__before', lineColorClasses.value],
18521
18293
  "style": lineColorStyles.value
@@ -18565,11 +18337,12 @@ const VTimelineItem = genericComponent()({
18565
18337
  icon: IconValue,
18566
18338
  iconColor: String,
18567
18339
  lineInset: [Number, String],
18568
- ...makeRoundedProps(),
18340
+ ...makeComponentProps(),
18341
+ ...makeDimensionProps(),
18569
18342
  ...makeElevationProps(),
18343
+ ...makeRoundedProps(),
18570
18344
  ...makeSizeProps(),
18571
- ...makeTagProps(),
18572
- ...makeDimensionProps()
18345
+ ...makeTagProps()
18573
18346
  },
18574
18347
  setup(props, _ref) {
18575
18348
  let {
@@ -18589,11 +18362,11 @@ const VTimelineItem = genericComponent()({
18589
18362
  useRender(() => createVNode("div", {
18590
18363
  "class": ['v-timeline-item', {
18591
18364
  'v-timeline-item--fill-dot': props.fillDot
18592
- }],
18593
- "style": {
18365
+ }, props.class],
18366
+ "style": [{
18594
18367
  '--v-timeline-dot-size': convertToUnit(dotSize.value),
18595
18368
  '--v-timeline-line-inset': props.lineInset ? `calc(var(--v-timeline-dot-size) / 2 + ${convertToUnit(props.lineInset)})` : convertToUnit(0)
18596
- }
18369
+ }, props.style]
18597
18370
  }, [createVNode("div", {
18598
18371
  "class": "v-timeline-item__body",
18599
18372
  "style": dimensionStyles.value
@@ -18669,7 +18442,8 @@ const VTooltip = genericComponent()({
18669
18442
  const [overlayProps] = VOverlay.filterProps(props);
18670
18443
  return createVNode(VOverlay, mergeProps({
18671
18444
  "ref": overlay,
18672
- "class": ['v-tooltip'],
18445
+ "class": ['v-tooltip', props.class],
18446
+ "style": props.style,
18673
18447
  "id": id.value
18674
18448
  }, overlayProps, {
18675
18449
  "modelValue": isActive.value,
@@ -18717,7 +18491,8 @@ const VValidation = genericComponent()({
18717
18491
  const VVirtualScrollItem = genericComponent()({
18718
18492
  name: 'VVirtualScrollItem',
18719
18493
  props: {
18720
- dynamicHeight: Boolean
18494
+ dynamicHeight: Boolean,
18495
+ ...makeComponentProps()
18721
18496
  },
18722
18497
  emits: {
18723
18498
  'update:height': height => true
@@ -18744,7 +18519,8 @@ const VVirtualScrollItem = genericComponent()({
18744
18519
  onUpdated(updateHeight);
18745
18520
  useRender(() => createVNode("div", {
18746
18521
  "ref": props.dynamicHeight ? resizeRef : undefined,
18747
- "class": "v-virtual-scroll__item"
18522
+ "class": ['v-virtual-scroll__item', props.class],
18523
+ "style": props.style
18748
18524
  }, [slots.default?.()]));
18749
18525
  }
18750
18526
  });
@@ -18761,7 +18537,7 @@ const VVirtualScroll = genericComponent()({
18761
18537
  default: () => []
18762
18538
  },
18763
18539
  itemHeight: [Number, String],
18764
- visibleItems: [Number, String],
18540
+ ...makeComponentProps(),
18765
18541
  ...makeDimensionProps()
18766
18542
  },
18767
18543
  setup(props, _ref) {
@@ -18788,7 +18564,7 @@ const VVirtualScroll = genericComponent()({
18788
18564
  const sizeMap = new Map();
18789
18565
  let sizes = createRange(props.items.length).map(() => itemHeight.value);
18790
18566
  const visibleItems = 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));
18567
+ return Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
18792
18568
  });
18793
18569
  function handleItemResize(index, height) {
18794
18570
  itemHeight.value = Math.max(itemHeight.value, height);
@@ -18799,20 +18575,13 @@ const VVirtualScroll = genericComponent()({
18799
18575
  return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0);
18800
18576
  }
18801
18577
  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
- }
18578
+ const end = props.items.length;
18579
+ let middle = 0;
18580
+ let middleOffset = 0;
18581
+ while (middleOffset < scrollTop && middle < end) {
18582
+ middleOffset += sizes[middle++] || itemHeight.value;
18814
18583
  }
18815
- return start;
18584
+ return middle - 1;
18816
18585
  }
18817
18586
  let lastScrollTop = 0;
18818
18587
  function handleScroll() {
@@ -18834,8 +18603,12 @@ const VVirtualScroll = genericComponent()({
18834
18603
  const offset = calculateOffset(index);
18835
18604
  rootEl.value.scrollTop = offset;
18836
18605
  }
18606
+ const items = computed(() => props.items.map((item, index) => ({
18607
+ raw: item,
18608
+ index
18609
+ })));
18837
18610
  const last = computed(() => Math.min(props.items.length, first.value + visibleItems.value));
18838
- const computedItems = computed(() => props.items.slice(first.value, last.value));
18611
+ const computedItems = computed(() => items.value.slice(first.value, last.value));
18839
18612
  const paddingTop = computed(() => calculateOffset(first.value));
18840
18613
  const paddingBottom = computed(() => calculateOffset(props.items.length) - calculateOffset(last.value));
18841
18614
  const {
@@ -18860,23 +18633,23 @@ const VVirtualScroll = genericComponent()({
18860
18633
  });
18861
18634
  useRender(() => createVNode("div", {
18862
18635
  "ref": rootEl,
18863
- "class": "v-virtual-scroll",
18636
+ "class": ['v-virtual-scroll', props.class],
18864
18637
  "onScroll": handleScroll,
18865
- "style": dimensionStyles.value
18638
+ "style": [dimensionStyles.value, props.style]
18866
18639
  }, [createVNode("div", {
18867
18640
  "class": "v-virtual-scroll__container",
18868
18641
  "style": {
18869
18642
  paddingTop: convertToUnit(paddingTop.value),
18870
18643
  paddingBottom: convertToUnit(paddingBottom.value)
18871
18644
  }
18872
- }, [computedItems.value.map((item, index) => createVNode(VVirtualScrollItem, {
18873
- "key": index,
18645
+ }, [computedItems.value.map(item => createVNode(VVirtualScrollItem, {
18646
+ "key": item.index,
18874
18647
  "dynamicHeight": !props.itemHeight,
18875
- "onUpdate:height": height => handleItemResize(index + first.value, height)
18648
+ "onUpdate:height": height => handleItemResize(item.index, height)
18876
18649
  }, {
18877
18650
  default: () => [slots.default?.({
18878
- item,
18879
- index: index + first.value
18651
+ item: item.raw,
18652
+ index: item.index
18880
18653
  })]
18881
18654
  }))])]));
18882
18655
  return {
@@ -19310,6 +19083,17 @@ const VDataTableHeaders = genericComponent()({
19310
19083
  backgroundColorClasses,
19311
19084
  backgroundColorStyles
19312
19085
  } = useBackgroundColor(props, 'color');
19086
+ const slotProps = computed(() => ({
19087
+ headers: headers.value,
19088
+ columns: columns.value,
19089
+ toggleSort,
19090
+ sortBy: sortBy.value,
19091
+ someSelected: someSelected.value,
19092
+ allSelected: allSelected.value,
19093
+ selectAll,
19094
+ getSortIcon,
19095
+ getFixedStyles
19096
+ }));
19313
19097
  const VDataTableHeaderCell = _ref2 => {
19314
19098
  let {
19315
19099
  column,
@@ -19337,14 +19121,14 @@ const VDataTableHeaders = genericComponent()({
19337
19121
  "noPadding": noPadding
19338
19122
  }, {
19339
19123
  default: () => {
19340
- const slotName = `column.${column.key}`;
19341
- const slotProps = {
19124
+ const columnSlotName = `column.${column.key}`;
19125
+ const columnSlotProps = {
19342
19126
  column,
19343
19127
  selectAll
19344
19128
  };
19345
- if (slots[slotName]) return slots[slotName](slotProps);
19129
+ if (slots[columnSlotName]) return slots[columnSlotName](columnSlotProps);
19346
19130
  if (column.key === 'data-table-select') {
19347
- return slots['column.data-table-select']?.(slotProps) ?? createVNode(VCheckboxBtn, {
19131
+ return slots['column.data-table-select']?.(columnSlotProps) ?? createVNode(VCheckboxBtn, {
19348
19132
  "modelValue": allSelected.value,
19349
19133
  "indeterminate": someSelected.value && !allSelected.value,
19350
19134
  "onUpdate:modelValue": selectAll
@@ -19364,22 +19148,24 @@ const VDataTableHeaders = genericComponent()({
19364
19148
  }
19365
19149
  });
19366
19150
  };
19367
- useRender(() => createVNode(Fragment, null, [headers.value.map((row, y) => createVNode("tr", null, [row.map((column, x) => createVNode(VDataTableHeaderCell, {
19368
- "column": column,
19369
- "x": x,
19370
- "y": y
19371
- }, null))])), props.loading && createVNode("tr", {
19372
- "class": "v-data-table__progress"
19373
- }, [createVNode("th", {
19374
- "colspan": columns.value.length
19375
- }, [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
- })])])]));
19151
+ useRender(() => {
19152
+ return createVNode(Fragment, null, [slots.headers ? slots.headers(slotProps.value) : headers.value.map((row, y) => createVNode("tr", null, [row.map((column, x) => createVNode(VDataTableHeaderCell, {
19153
+ "column": column,
19154
+ "x": x,
19155
+ "y": y
19156
+ }, null))])), props.loading && createVNode("tr", {
19157
+ "class": "v-data-table__progress"
19158
+ }, [createVNode("th", {
19159
+ "colspan": columns.value.length
19160
+ }, [createVNode(LoaderSlot, {
19161
+ "name": "v-data-table-headers",
19162
+ "active": true,
19163
+ "color": typeof props.loading === 'boolean' ? undefined : props.loading,
19164
+ "indeterminate": true
19165
+ }, {
19166
+ default: slots.loader
19167
+ })])])]);
19168
+ });
19383
19169
  }
19384
19170
  });
19385
19171
 
@@ -19678,9 +19464,7 @@ const VDataTableRow = defineComponent({
19678
19464
  'v-data-table__tr--clickable': !!props.onClick
19679
19465
  }],
19680
19466
  "onClick": props.onClick
19681
- }, [!columns.value.length && createVNode(VDataTableColumn, {
19682
- "key": "no-data"
19683
- }, slots), props.item && columns.value.map((column, i) => createVNode(VDataTableColumn, {
19467
+ }, [props.item && columns.value.map((column, i) => createVNode(VDataTableColumn, {
19684
19468
  "align": column.align,
19685
19469
  "fixed": column.fixed,
19686
19470
  "fixedOffset": column.fixedOffset,
@@ -19770,13 +19554,13 @@ const VDataTableRows = genericComponent()({
19770
19554
  useRender(() => {
19771
19555
  if (props.loading && slots.loading) {
19772
19556
  return createVNode("tr", {
19773
- "class": "v-data-table-rows-no-data",
19557
+ "class": "v-data-table-rows-loading",
19774
19558
  "key": "loading"
19775
19559
  }, [createVNode("td", {
19776
19560
  "colspan": columns.value.length
19777
19561
  }, [slots.loading()])]);
19778
19562
  }
19779
- if (!props.loading && !props.items.length && !props.hideNoData && slots['no-data']) {
19563
+ if (!props.loading && !props.items.length && !props.hideNoData) {
19780
19564
  return createVNode("tr", {
19781
19565
  "class": "v-data-table-rows-no-data",
19782
19566
  "key": "no-data"
@@ -20255,7 +20039,7 @@ const VDataTable = genericComponent()({
20255
20039
  top: slots.top,
20256
20040
  default: slots.default ?? (() => createVNode(Fragment, null, [slots.colgroup?.({
20257
20041
  columns
20258
- }), createVNode("thead", null, [slots.headers ? slots.headers() : createVNode(VDataTableHeaders, {
20042
+ }), createVNode("thead", null, [createVNode(VDataTableHeaders, {
20259
20043
  "sticky": props.fixedHeader,
20260
20044
  "multiSort": props.multiSort
20261
20045
  }, slots)]), slots.thead?.(), createVNode("tbody", null, [slots.body ? slots.body() : createVNode(VDataTableRows, {
@@ -20621,7 +20405,7 @@ const VDataTableServer = genericComponent()({
20621
20405
  }), createVNode("thead", {
20622
20406
  "class": "v-data-table__thead",
20623
20407
  "role": "rowgroup"
20624
- }, [slots.headers ? slots.headers() : createVNode(VDataTableHeaders, {
20408
+ }, [createVNode(VDataTableHeaders, {
20625
20409
  "sticky": props.fixedHeader,
20626
20410
  "loading": props.loading,
20627
20411
  "color": props.color
@@ -21123,130 +20907,542 @@ var components = /*#__PURE__*/Object.freeze({
21123
20907
 
21124
20908
  // Types
21125
20909
 
21126
- function mounted$2(el, binding) {
21127
- const modifiers = binding.modifiers || {};
21128
- const value = binding.value;
21129
- const {
21130
- once,
21131
- immediate,
21132
- ...modifierKeys
21133
- } = modifiers;
21134
- const defaultValue = !Object.keys(modifierKeys).length;
21135
- const {
21136
- handler,
21137
- options
21138
- } = typeof value === 'object' ? value : {
21139
- handler: value,
21140
- options: {
21141
- attributes: modifierKeys?.attr ?? defaultValue,
21142
- characterData: modifierKeys?.char ?? defaultValue,
21143
- childList: modifierKeys?.child ?? defaultValue,
21144
- subtree: modifierKeys?.sub ?? defaultValue
20910
+ function mounted$2(el, binding) {
20911
+ const modifiers = binding.modifiers || {};
20912
+ const value = binding.value;
20913
+ const {
20914
+ once,
20915
+ immediate,
20916
+ ...modifierKeys
20917
+ } = modifiers;
20918
+ const defaultValue = !Object.keys(modifierKeys).length;
20919
+ const {
20920
+ handler,
20921
+ options
20922
+ } = typeof value === 'object' ? value : {
20923
+ handler: value,
20924
+ options: {
20925
+ attributes: modifierKeys?.attr ?? defaultValue,
20926
+ characterData: modifierKeys?.char ?? defaultValue,
20927
+ childList: modifierKeys?.child ?? defaultValue,
20928
+ subtree: modifierKeys?.sub ?? defaultValue
20929
+ }
20930
+ };
20931
+ const observer = new MutationObserver(function () {
20932
+ let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
20933
+ let observer = arguments.length > 1 ? arguments[1] : undefined;
20934
+ handler?.(mutations, observer);
20935
+ if (once) unmounted$2(el, binding);
20936
+ });
20937
+ if (immediate) handler?.([], observer);
20938
+ el._mutate = Object(el._mutate);
20939
+ el._mutate[binding.instance.$.uid] = {
20940
+ observer
20941
+ };
20942
+ observer.observe(el, options);
20943
+ }
20944
+ function unmounted$2(el, binding) {
20945
+ if (!el._mutate?.[binding.instance.$.uid]) return;
20946
+ el._mutate[binding.instance.$.uid].observer.disconnect();
20947
+ delete el._mutate[binding.instance.$.uid];
20948
+ }
20949
+ const Mutate = {
20950
+ mounted: mounted$2,
20951
+ unmounted: unmounted$2
20952
+ };
20953
+
20954
+ function mounted$1(el, binding) {
20955
+ const handler = binding.value;
20956
+ const options = {
20957
+ passive: !binding.modifiers?.active
20958
+ };
20959
+ window.addEventListener('resize', handler, options);
20960
+ el._onResize = Object(el._onResize);
20961
+ el._onResize[binding.instance.$.uid] = {
20962
+ handler,
20963
+ options
20964
+ };
20965
+ if (!binding.modifiers?.quiet) {
20966
+ handler();
20967
+ }
20968
+ }
20969
+ function unmounted$1(el, binding) {
20970
+ if (!el._onResize?.[binding.instance.$.uid]) return;
20971
+ const {
20972
+ handler,
20973
+ options
20974
+ } = el._onResize[binding.instance.$.uid];
20975
+ window.removeEventListener('resize', handler, options);
20976
+ delete el._onResize[binding.instance.$.uid];
20977
+ }
20978
+ const Resize = {
20979
+ mounted: mounted$1,
20980
+ unmounted: unmounted$1
20981
+ };
20982
+
20983
+ function mounted(el, binding) {
20984
+ const {
20985
+ self = false
20986
+ } = binding.modifiers ?? {};
20987
+ const value = binding.value;
20988
+ const options = typeof value === 'object' && value.options || {
20989
+ passive: true
20990
+ };
20991
+ const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler;
20992
+ const target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
20993
+ if (!target) return;
20994
+ target.addEventListener('scroll', handler, options);
20995
+ el._onScroll = Object(el._onScroll);
20996
+ el._onScroll[binding.instance.$.uid] = {
20997
+ handler,
20998
+ options,
20999
+ // Don't reference self
21000
+ target: self ? undefined : target
21001
+ };
21002
+ }
21003
+ function unmounted(el, binding) {
21004
+ if (!el._onScroll?.[binding.instance.$.uid]) return;
21005
+ const {
21006
+ handler,
21007
+ options,
21008
+ target = el
21009
+ } = el._onScroll[binding.instance.$.uid];
21010
+ target.removeEventListener('scroll', handler, options);
21011
+ delete el._onScroll[binding.instance.$.uid];
21012
+ }
21013
+ function updated(el, binding) {
21014
+ if (binding.value === binding.oldValue) return;
21015
+ unmounted(el, binding);
21016
+ mounted(el, binding);
21017
+ }
21018
+ const Scroll = {
21019
+ mounted,
21020
+ unmounted,
21021
+ updated
21022
+ };
21023
+
21024
+ var directives = /*#__PURE__*/Object.freeze({
21025
+ __proto__: null,
21026
+ ClickOutside: ClickOutside,
21027
+ Intersect: Intersect,
21028
+ Mutate: Mutate,
21029
+ Resize: Resize,
21030
+ Ripple: Ripple,
21031
+ Scroll: Scroll,
21032
+ Touch: Touch
21033
+ });
21034
+
21035
+ // Utilities
21036
+
21037
+ // Types
21038
+
21039
+ function getWeekArray(date) {
21040
+ let currentWeek = [];
21041
+ const weeks = [];
21042
+ const firstDayOfMonth = startOfMonth(date);
21043
+ const lastDayOfMonth = endOfMonth(date);
21044
+ for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
21045
+ currentWeek.push(null);
21046
+ }
21047
+ for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
21048
+ const day = new Date(date.getFullYear(), date.getMonth(), i);
21049
+
21050
+ // Add the day to the current week
21051
+ currentWeek.push(day);
21052
+
21053
+ // If the current week has 7 days, add it to the weeks array and start a new week
21054
+ if (currentWeek.length === 7) {
21055
+ weeks.push(currentWeek);
21056
+ currentWeek = [];
21145
21057
  }
21146
- };
21147
- const observer = new MutationObserver(function () {
21148
- let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
21149
- let observer = arguments.length > 1 ? arguments[1] : undefined;
21150
- handler?.(mutations, observer);
21151
- if (once) unmounted$2(el, binding);
21058
+ }
21059
+ for (let i = currentWeek.length; i < 7; i++) {
21060
+ currentWeek.push(null);
21061
+ }
21062
+ weeks.push(currentWeek);
21063
+ return weeks;
21064
+ }
21065
+ function startOfMonth(date) {
21066
+ return new Date(date.getFullYear(), date.getMonth(), 1);
21067
+ }
21068
+ function endOfMonth(date) {
21069
+ return new Date(date.getFullYear(), date.getMonth() + 1, 0);
21070
+ }
21071
+ function date(value) {
21072
+ if (value == null) return null;
21073
+ if (value instanceof Date) return value;
21074
+ if (typeof value === 'string') {
21075
+ const parsed = Date.parse(value);
21076
+ if (!isNaN(parsed)) return new Date(parsed);
21077
+ }
21078
+ return null;
21079
+ }
21080
+ const firstDay = {
21081
+ '001': 1,
21082
+ AD: 1,
21083
+ AE: 6,
21084
+ AF: 6,
21085
+ AG: 0,
21086
+ AI: 1,
21087
+ AL: 1,
21088
+ AM: 1,
21089
+ AN: 1,
21090
+ AR: 1,
21091
+ AS: 0,
21092
+ AT: 1,
21093
+ AU: 0,
21094
+ AX: 1,
21095
+ AZ: 1,
21096
+ BA: 1,
21097
+ BD: 0,
21098
+ BE: 1,
21099
+ BG: 1,
21100
+ BH: 6,
21101
+ BM: 1,
21102
+ BN: 1,
21103
+ BR: 0,
21104
+ BS: 0,
21105
+ BT: 0,
21106
+ BW: 0,
21107
+ BY: 1,
21108
+ BZ: 0,
21109
+ CA: 0,
21110
+ CH: 1,
21111
+ CL: 1,
21112
+ CM: 1,
21113
+ CN: 0,
21114
+ CO: 0,
21115
+ CR: 1,
21116
+ CY: 1,
21117
+ CZ: 1,
21118
+ DE: 1,
21119
+ DJ: 6,
21120
+ DK: 1,
21121
+ DM: 0,
21122
+ DO: 0,
21123
+ DZ: 6,
21124
+ EC: 1,
21125
+ EE: 1,
21126
+ EG: 6,
21127
+ ES: 1,
21128
+ ET: 0,
21129
+ FI: 1,
21130
+ FJ: 1,
21131
+ FO: 1,
21132
+ FR: 1,
21133
+ GB: 1,
21134
+ 'GB-alt-variant': 0,
21135
+ GE: 1,
21136
+ GF: 1,
21137
+ GP: 1,
21138
+ GR: 1,
21139
+ GT: 0,
21140
+ GU: 0,
21141
+ HK: 0,
21142
+ HN: 0,
21143
+ HR: 1,
21144
+ HU: 1,
21145
+ ID: 0,
21146
+ IE: 1,
21147
+ IL: 0,
21148
+ IN: 0,
21149
+ IQ: 6,
21150
+ IR: 6,
21151
+ IS: 1,
21152
+ IT: 1,
21153
+ JM: 0,
21154
+ JO: 6,
21155
+ JP: 0,
21156
+ KE: 0,
21157
+ KG: 1,
21158
+ KH: 0,
21159
+ KR: 0,
21160
+ KW: 6,
21161
+ KZ: 1,
21162
+ LA: 0,
21163
+ LB: 1,
21164
+ LI: 1,
21165
+ LK: 1,
21166
+ LT: 1,
21167
+ LU: 1,
21168
+ LV: 1,
21169
+ LY: 6,
21170
+ MC: 1,
21171
+ MD: 1,
21172
+ ME: 1,
21173
+ MH: 0,
21174
+ MK: 1,
21175
+ MM: 0,
21176
+ MN: 1,
21177
+ MO: 0,
21178
+ MQ: 1,
21179
+ MT: 0,
21180
+ MV: 5,
21181
+ MX: 0,
21182
+ MY: 1,
21183
+ MZ: 0,
21184
+ NI: 0,
21185
+ NL: 1,
21186
+ NO: 1,
21187
+ NP: 0,
21188
+ NZ: 1,
21189
+ OM: 6,
21190
+ PA: 0,
21191
+ PE: 0,
21192
+ PH: 0,
21193
+ PK: 0,
21194
+ PL: 1,
21195
+ PR: 0,
21196
+ PT: 0,
21197
+ PY: 0,
21198
+ QA: 6,
21199
+ RE: 1,
21200
+ RO: 1,
21201
+ RS: 1,
21202
+ RU: 1,
21203
+ SA: 0,
21204
+ SD: 6,
21205
+ SE: 1,
21206
+ SG: 0,
21207
+ SI: 1,
21208
+ SK: 1,
21209
+ SM: 1,
21210
+ SV: 0,
21211
+ SY: 6,
21212
+ TH: 0,
21213
+ TJ: 1,
21214
+ TM: 1,
21215
+ TR: 1,
21216
+ TT: 0,
21217
+ TW: 0,
21218
+ UA: 1,
21219
+ UM: 0,
21220
+ US: 0,
21221
+ UY: 1,
21222
+ UZ: 1,
21223
+ VA: 1,
21224
+ VE: 0,
21225
+ VI: 0,
21226
+ VN: 1,
21227
+ WS: 0,
21228
+ XK: 1,
21229
+ YE: 0,
21230
+ ZA: 0,
21231
+ ZW: 0
21232
+ };
21233
+ const sundayJanuarySecond2000 = new Date(2000, 0, 2);
21234
+ function getWeekdays(locale) {
21235
+ const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
21236
+ return createRange(7).map(i => {
21237
+ const weekday = new Date(sundayJanuarySecond2000);
21238
+ weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
21239
+ return new Intl.DateTimeFormat(locale, {
21240
+ weekday: 'long'
21241
+ }).format(weekday);
21152
21242
  });
21153
- if (immediate) handler?.([], observer);
21154
- el._mutate = Object(el._mutate);
21155
- el._mutate[binding.instance.$.uid] = {
21156
- observer
21157
- };
21158
- observer.observe(el, options);
21159
21243
  }
21160
- function unmounted$2(el, binding) {
21161
- if (!el._mutate?.[binding.instance.$.uid]) return;
21162
- el._mutate[binding.instance.$.uid].observer.disconnect();
21163
- delete el._mutate[binding.instance.$.uid];
21244
+ function format(value, formatString, locale) {
21245
+ const date = new Date(value);
21246
+ let options = {};
21247
+ switch (formatString) {
21248
+ case 'fullDateWithWeekday':
21249
+ options = {
21250
+ weekday: 'long',
21251
+ day: 'numeric',
21252
+ month: 'long',
21253
+ year: 'numeric'
21254
+ };
21255
+ break;
21256
+ case 'normalDateWithWeekday':
21257
+ options = {
21258
+ weekday: 'short',
21259
+ day: 'numeric',
21260
+ month: 'short',
21261
+ year: 'numeric'
21262
+ };
21263
+ break;
21264
+ case 'keyboardDate':
21265
+ options = {};
21266
+ break;
21267
+ case 'monthAndDate':
21268
+ options = {
21269
+ month: 'long',
21270
+ day: 'numeric'
21271
+ };
21272
+ break;
21273
+ case 'monthAndYear':
21274
+ options = {
21275
+ month: 'long',
21276
+ year: 'numeric'
21277
+ };
21278
+ break;
21279
+ default:
21280
+ options = {
21281
+ timeZone: 'UTC',
21282
+ timeZoneName: 'short'
21283
+ };
21284
+ }
21285
+ return new Intl.DateTimeFormat(locale, options).format(date);
21286
+ }
21287
+ function addDays(date, amount) {
21288
+ const d = new Date(date);
21289
+ d.setDate(d.getDate() + amount);
21290
+ return d;
21291
+ }
21292
+ function addMonths(date, amount) {
21293
+ const d = new Date(date);
21294
+ d.setMonth(d.getMonth() + amount);
21295
+ return d;
21296
+ }
21297
+ function getYear(date) {
21298
+ return date.getFullYear();
21299
+ }
21300
+ function getMonth(date) {
21301
+ return date.getMonth();
21302
+ }
21303
+ function startOfYear(date) {
21304
+ return new Date(date.getFullYear(), 0, 1);
21305
+ }
21306
+ function endOfYear(date) {
21307
+ return new Date(date.getFullYear(), 11, 31);
21308
+ }
21309
+ function getMondayOfFirstWeekOfYear(year) {
21310
+ return new Date(year, 0, 1);
21164
21311
  }
21165
- const Mutate = {
21166
- mounted: mounted$2,
21167
- unmounted: unmounted$2
21168
- };
21169
21312
 
21170
- function mounted$1(el, binding) {
21171
- const handler = binding.value;
21172
- const options = {
21173
- passive: !binding.modifiers?.active
21174
- };
21175
- window.addEventListener('resize', handler, options);
21176
- el._onResize = Object(el._onResize);
21177
- el._onResize[binding.instance.$.uid] = {
21178
- handler,
21179
- options
21180
- };
21181
- if (!binding.modifiers?.quiet) {
21182
- handler();
21313
+ // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
21314
+ function getWeek(date) {
21315
+ let year = date.getFullYear();
21316
+ let d1w1 = getMondayOfFirstWeekOfYear(year);
21317
+ if (date < d1w1) {
21318
+ year = year - 1;
21319
+ d1w1 = getMondayOfFirstWeekOfYear(year);
21320
+ } else {
21321
+ const tv = getMondayOfFirstWeekOfYear(year + 1);
21322
+ if (date >= tv) {
21323
+ year = year + 1;
21324
+ d1w1 = tv;
21325
+ }
21183
21326
  }
21327
+ const diffTime = Math.abs(date.getTime() - d1w1.getTime());
21328
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
21329
+ return Math.floor(diffDays / 7) + 1;
21184
21330
  }
21185
- function unmounted$1(el, binding) {
21186
- if (!el._onResize?.[binding.instance.$.uid]) return;
21187
- const {
21188
- handler,
21189
- options
21190
- } = el._onResize[binding.instance.$.uid];
21191
- window.removeEventListener('resize', handler, options);
21192
- delete el._onResize[binding.instance.$.uid];
21331
+ function isWithinRange(date, range) {
21332
+ return isAfter(date, range[0]) && isBefore(date, range[1]);
21193
21333
  }
21194
- const Resize = {
21195
- mounted: mounted$1,
21196
- unmounted: unmounted$1
21197
- };
21198
-
21199
- function mounted(el, binding) {
21200
- const {
21201
- self = false
21202
- } = binding.modifiers ?? {};
21203
- const value = binding.value;
21204
- const options = typeof value === 'object' && value.options || {
21205
- passive: true
21206
- };
21207
- const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler;
21208
- const target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
21209
- if (!target) return;
21210
- target.addEventListener('scroll', handler, options);
21211
- el._onScroll = Object(el._onScroll);
21212
- el._onScroll[binding.instance.$.uid] = {
21213
- handler,
21214
- options,
21215
- // Don't reference self
21216
- target: self ? undefined : target
21217
- };
21334
+ function isValid(date) {
21335
+ const d = new Date(date);
21336
+ return d instanceof Date && !isNaN(d.getTime());
21218
21337
  }
21219
- function unmounted(el, binding) {
21220
- if (!el._onScroll?.[binding.instance.$.uid]) return;
21221
- const {
21222
- handler,
21223
- options,
21224
- target = el
21225
- } = el._onScroll[binding.instance.$.uid];
21226
- target.removeEventListener('scroll', handler, options);
21227
- delete el._onScroll[binding.instance.$.uid];
21338
+ function isAfter(date, comparing) {
21339
+ return date.getTime() > comparing.getTime();
21228
21340
  }
21229
- function updated(el, binding) {
21230
- if (binding.value === binding.oldValue) return;
21231
- unmounted(el, binding);
21232
- mounted(el, binding);
21341
+ function isBefore(date, comparing) {
21342
+ return date.getTime() < comparing.getTime();
21343
+ }
21344
+ function isEqual(date, comparing) {
21345
+ return date.getTime() === comparing.getTime();
21346
+ }
21347
+ function isSameDay(date, comparing) {
21348
+ return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21349
+ }
21350
+ function isSameMonth(date, comparing) {
21351
+ return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21352
+ }
21353
+ function getDiff(date, comparing, unit) {
21354
+ const d = new Date(date);
21355
+ const c = new Date(comparing);
21356
+ if (unit === 'month') {
21357
+ return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
21358
+ }
21359
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
21360
+ }
21361
+ function setYear(date, year) {
21362
+ const d = new Date(date);
21363
+ d.setFullYear(year);
21364
+ return d;
21365
+ }
21366
+ class VuetifyDateAdapter {
21367
+ constructor() {
21368
+ let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
21369
+ this.locale = locale;
21370
+ }
21371
+ date(value) {
21372
+ return date(value);
21373
+ }
21374
+ addDays(date, amount) {
21375
+ return addDays(date, amount);
21376
+ }
21377
+ addMonths(date, amount) {
21378
+ return addMonths(date, amount);
21379
+ }
21380
+ getWeekArray(date) {
21381
+ return getWeekArray(date);
21382
+ }
21383
+ startOfMonth(date) {
21384
+ return startOfMonth(date);
21385
+ }
21386
+ endOfMonth(date) {
21387
+ return endOfMonth(date);
21388
+ }
21389
+ format(date, formatString) {
21390
+ return format(date, formatString, this.locale);
21391
+ }
21392
+ isEqual(date, comparing) {
21393
+ return isEqual(date, comparing);
21394
+ }
21395
+ isValid(date) {
21396
+ return isValid(date);
21397
+ }
21398
+ isWithinRange(date, range) {
21399
+ return isWithinRange(date, range);
21400
+ }
21401
+ isAfter(date, comparing) {
21402
+ return isAfter(date, comparing);
21403
+ }
21404
+ isSameDay(date, comparing) {
21405
+ return isSameDay(date, comparing);
21406
+ }
21407
+ isSameMonth(date, comparing) {
21408
+ return isSameMonth(date, comparing);
21409
+ }
21410
+ setYear(date, year) {
21411
+ return setYear(date, year);
21412
+ }
21413
+ getDiff(date, comparing, unit) {
21414
+ return getDiff(date, comparing, unit);
21415
+ }
21416
+ getWeek(date) {
21417
+ return getWeek(date);
21418
+ }
21419
+ getWeekdays() {
21420
+ return getWeekdays(this.locale);
21421
+ }
21422
+ getYear(date) {
21423
+ return getYear(date);
21424
+ }
21425
+ getMonth(date) {
21426
+ return getMonth(date);
21427
+ }
21428
+ startOfYear(date) {
21429
+ return startOfYear(date);
21430
+ }
21431
+ endOfYear(date) {
21432
+ return endOfYear(date);
21433
+ }
21233
21434
  }
21234
- const Scroll = {
21235
- mounted,
21236
- unmounted,
21237
- updated
21238
- };
21239
21435
 
21240
- var directives = /*#__PURE__*/Object.freeze({
21241
- __proto__: null,
21242
- ClickOutside: ClickOutside,
21243
- Intersect: Intersect,
21244
- Mutate: Mutate,
21245
- Resize: Resize,
21246
- Ripple: Ripple,
21247
- Scroll: Scroll,
21248
- Touch: Touch
21249
- });
21436
+ // Composables
21437
+
21438
+ // Types
21439
+
21440
+ const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
21441
+ function createDate(options) {
21442
+ return options ?? {
21443
+ adapter: VuetifyDateAdapter
21444
+ };
21445
+ }
21250
21446
 
21251
21447
  // Composables
21252
21448
  function createVuetify$1() {
@@ -21333,7 +21529,7 @@ function createVuetify$1() {
21333
21529
  date
21334
21530
  };
21335
21531
  }
21336
- const version$1 = "4.0.0-dev-20230426.0";
21532
+ const version$1 = "4.0.0-dev-20230427.0";
21337
21533
  createVuetify$1.version = version$1;
21338
21534
 
21339
21535
  // Vue's inject() can only be used in setup
@@ -21345,7 +21541,7 @@ function inject(key) {
21345
21541
  }
21346
21542
  }
21347
21543
 
21348
- const version = "4.0.0-dev-20230426.0";
21544
+ const version = "4.0.0-dev-20230427.0";
21349
21545
 
21350
21546
  const createVuetify = function () {
21351
21547
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -21356,5 +21552,5 @@ const createVuetify = function () {
21356
21552
  });
21357
21553
  };
21358
21554
 
21359
- export { components, createVuetify, directives, useDate, useDisplay, useLayout, useLocale, useRtl, useTheme, version };
21555
+ export { components, createVuetify, directives, useDefaults, useDisplay, useLayout, useLocale, useRtl, useTheme, version };
21360
21556
  //# sourceMappingURL=vuetify-labs.esm.js.map