@vuetify/nightly 4.0.0-dev-20230426.0 → 4.0.0-dev-20230511.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 (399) hide show
  1. package/CHANGELOG.md +22 -15
  2. package/dist/json/attributes.json +949 -729
  3. package/dist/json/importMap-labs.json +4 -4
  4. package/dist/json/importMap.json +12 -12
  5. package/dist/json/tags.json +57 -2
  6. package/dist/json/web-types.json +1966 -1440
  7. package/dist/vuetify-labs.css +1504 -1493
  8. package/dist/vuetify-labs.d.ts +6175 -8100
  9. package/dist/vuetify-labs.esm.js +1462 -1230
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +1461 -1229
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +51 -40
  14. package/dist/vuetify.d.ts +6327 -7380
  15. package/dist/vuetify.esm.js +1401 -1194
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +1400 -1193
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +805 -805
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/blueprints/{index.d.ts → index.d.mts} +6 -2
  23. package/lib/blueprints/{md1.d.ts → md1.d.mts} +6 -2
  24. package/lib/blueprints/{md2.d.ts → md2.d.mts} +6 -2
  25. package/lib/blueprints/{md3.d.ts → md3.d.mts} +6 -2
  26. package/lib/components/VAlert/VAlert.mjs +6 -4
  27. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  28. package/lib/components/VAlert/{index.d.ts → index.d.mts} +57 -55
  29. package/lib/components/VApp/VApp.mjs +4 -2
  30. package/lib/components/VApp/VApp.mjs.map +1 -1
  31. package/lib/components/VApp/{index.d.ts → index.d.mts} +22 -13
  32. package/lib/components/VAppBar/VAppBar.mjs +10 -14
  33. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  34. package/lib/components/VAppBar/VAppBarNavIcon.mjs +10 -13
  35. package/lib/components/VAppBar/VAppBarNavIcon.mjs.map +1 -1
  36. package/lib/components/VAppBar/{index.d.ts → index.d.mts} +479 -118
  37. package/lib/components/VAutocomplete/VAutocomplete.css +1 -1
  38. package/lib/components/VAutocomplete/VAutocomplete.mjs +11 -3
  39. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  40. package/lib/components/VAutocomplete/VAutocomplete.sass +1 -1
  41. package/lib/components/VAutocomplete/{index.d.ts → index.d.mts} +231 -409
  42. package/lib/components/VAvatar/VAvatar.mjs +4 -2
  43. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  44. package/lib/components/VAvatar/{index.d.ts → index.d.mts} +23 -14
  45. package/lib/components/VBadge/VBadge.mjs +6 -5
  46. package/lib/components/VBadge/VBadge.mjs.map +1 -1
  47. package/lib/components/VBadge/{index.d.ts → index.d.mts} +27 -22
  48. package/lib/components/VBanner/VBanner.mjs +6 -4
  49. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  50. package/lib/components/VBanner/VBannerActions.mjs +5 -2
  51. package/lib/components/VBanner/VBannerActions.mjs.map +1 -1
  52. package/lib/components/VBanner/{index.d.ts → index.d.mts} +92 -66
  53. package/lib/components/VBottomNavigation/VBottomNavigation.mjs +4 -2
  54. package/lib/components/VBottomNavigation/VBottomNavigation.mjs.map +1 -1
  55. package/lib/components/VBottomNavigation/{index.d.ts → index.d.mts} +22 -13
  56. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +35 -18
  57. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  58. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs +6 -3
  59. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs.map +1 -1
  60. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs +4 -2
  61. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs.map +1 -1
  62. package/lib/components/VBreadcrumbs/{index.d.ts → index.d.mts} +134 -93
  63. package/lib/components/VBtn/VBtn.mjs +12 -9
  64. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  65. package/lib/components/VBtn/{index.d.ts → index.d.mts} +33 -36
  66. package/lib/components/VBtnGroup/VBtnGroup.mjs +4 -1
  67. package/lib/components/VBtnGroup/VBtnGroup.mjs.map +1 -1
  68. package/lib/components/VBtnGroup/{index.d.ts → index.d.mts} +22 -13
  69. package/lib/components/VBtnToggle/VBtnToggle.mjs +4 -2
  70. package/lib/components/VBtnToggle/VBtnToggle.mjs.map +1 -1
  71. package/lib/components/VBtnToggle/{index.d.ts → index.d.mts} +30 -21
  72. package/lib/components/VCard/VCard.mjs +5 -3
  73. package/lib/components/VCard/VCard.mjs.map +1 -1
  74. package/lib/components/VCard/VCardActions.mjs +7 -4
  75. package/lib/components/VCard/VCardActions.mjs.map +1 -1
  76. package/lib/components/VCard/VCardItem.mjs +5 -2
  77. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  78. package/lib/components/VCard/{index.d.ts → index.d.mts} +250 -141
  79. package/lib/components/VCarousel/VCarousel.mjs +3 -3
  80. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  81. package/lib/components/VCarousel/VCarouselItem.mjs +6 -3
  82. package/lib/components/VCarousel/VCarouselItem.mjs.map +1 -1
  83. package/lib/components/VCarousel/{index.d.ts → index.d.mts} +78 -141
  84. package/lib/components/VCheckbox/VCheckbox.mjs +3 -2
  85. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  86. package/lib/components/VCheckbox/VCheckboxBtn.mjs +2 -2
  87. package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
  88. package/lib/components/VCheckbox/{index.d.ts → index.d.mts} +75 -109
  89. package/lib/components/VChip/VChip.mjs +7 -8
  90. package/lib/components/VChip/VChip.mjs.map +1 -1
  91. package/lib/components/VChip/{index.d.ts → index.d.mts} +27 -30
  92. package/lib/components/VChipGroup/VChipGroup.mjs +4 -1
  93. package/lib/components/VChipGroup/VChipGroup.mjs.map +1 -1
  94. package/lib/components/VChipGroup/{index.d.ts → index.d.mts} +22 -13
  95. package/lib/components/VCode/{index.d.ts → index.d.mts} +30 -17
  96. package/lib/components/VColorPicker/VColorPicker.mjs +12 -7
  97. package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
  98. package/lib/components/VColorPicker/VColorPickerCanvas.mjs +5 -2
  99. package/lib/components/VColorPicker/VColorPickerCanvas.mjs.map +1 -1
  100. package/lib/components/VColorPicker/VColorPickerEdit.mjs +6 -3
  101. package/lib/components/VColorPicker/VColorPickerEdit.mjs.map +1 -1
  102. package/lib/components/VColorPicker/VColorPickerPreview.mjs +6 -3
  103. package/lib/components/VColorPicker/VColorPickerPreview.mjs.map +1 -1
  104. package/lib/components/VColorPicker/VColorPickerSwatches.mjs +12 -9
  105. package/lib/components/VColorPicker/VColorPickerSwatches.mjs.map +1 -1
  106. package/lib/components/VColorPicker/{index.d.ts → index.d.mts} +131 -32
  107. package/lib/components/VColorPicker/util/index.mjs +2 -22
  108. package/lib/components/VColorPicker/util/index.mjs.map +1 -1
  109. package/lib/components/VCombobox/VCombobox.mjs +11 -3
  110. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  111. package/lib/components/VCombobox/{index.d.ts → index.d.mts} +231 -409
  112. package/lib/components/VCounter/VCounter.mjs +4 -1
  113. package/lib/components/VCounter/VCounter.mjs.map +1 -1
  114. package/lib/components/VCounter/{index.d.ts → index.d.mts} +22 -145
  115. package/lib/components/VDefaultsProvider/{index.d.ts → index.d.mts} +0 -12
  116. package/lib/components/VDialog/VDialog.mjs +4 -3
  117. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  118. package/lib/components/VDialog/{index.d.ts → index.d.mts} +104 -282
  119. package/lib/components/VDivider/VDivider.mjs +4 -2
  120. package/lib/components/VDivider/VDivider.mjs.map +1 -1
  121. package/lib/components/VDivider/{index.d.ts → index.d.mts} +22 -13
  122. package/lib/components/VExpansionPanel/VExpansionPanel.mjs +4 -2
  123. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  124. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs +4 -1
  125. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs.map +1 -1
  126. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +4 -2
  127. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  128. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +4 -1
  129. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  130. package/lib/components/VExpansionPanel/{index.d.ts → index.d.mts} +109 -81
  131. package/lib/components/VField/VField.css +0 -1
  132. package/lib/components/VField/VField.mjs +9 -6
  133. package/lib/components/VField/VField.mjs.map +1 -1
  134. package/lib/components/VField/VField.sass +0 -1
  135. package/lib/components/VField/VFieldLabel.mjs +6 -3
  136. package/lib/components/VField/VFieldLabel.mjs.map +1 -1
  137. package/lib/components/VField/{index.d.ts → index.d.mts} +125 -76
  138. package/lib/components/VFileInput/VFileInput.mjs +4 -2
  139. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  140. package/lib/components/VFileInput/{index.d.ts → index.d.mts} +114 -165
  141. package/lib/components/VFooter/VFooter.mjs +4 -2
  142. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  143. package/lib/components/VFooter/{index.d.ts → index.d.mts} +22 -13
  144. package/lib/components/VForm/VForm.mjs +5 -2
  145. package/lib/components/VForm/VForm.mjs.map +1 -1
  146. package/lib/components/VForm/{index.d.ts → index.d.mts} +30 -17
  147. package/lib/components/VGrid/VCol.mjs +4 -1
  148. package/lib/components/VGrid/VCol.mjs.map +1 -1
  149. package/lib/components/VGrid/VContainer.mjs +4 -1
  150. package/lib/components/VGrid/VContainer.mjs.map +1 -1
  151. package/lib/components/VGrid/VRow.mjs +4 -1
  152. package/lib/components/VGrid/VRow.mjs.map +1 -1
  153. package/lib/components/VGrid/{index.d.ts → index.d.mts} +104 -60
  154. package/lib/components/VHover/{index.d.ts → index.d.mts} +20 -44
  155. package/lib/components/VIcon/VIcon.mjs +4 -2
  156. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  157. package/lib/components/VIcon/{index.d.ts → index.d.mts} +23 -26
  158. package/lib/components/VImg/VImg.css +2 -4
  159. package/lib/components/VImg/VImg.mjs +27 -24
  160. package/lib/components/VImg/VImg.mjs.map +1 -1
  161. package/lib/components/VImg/VImg.sass +4 -3
  162. package/lib/components/VImg/{index.d.ts → index.d.mts} +73 -31
  163. package/lib/components/VInput/VInput.mjs +4 -1
  164. package/lib/components/VInput/VInput.mjs.map +1 -1
  165. package/lib/components/VInput/{index.d.ts → index.d.mts} +37 -40
  166. package/lib/components/VItemGroup/VItemGroup.mjs +4 -1
  167. package/lib/components/VItemGroup/VItemGroup.mjs.map +1 -1
  168. package/lib/components/VItemGroup/{index.d.ts → index.d.mts} +30 -33
  169. package/lib/components/VKbd/{index.d.ts → index.d.mts} +30 -17
  170. package/lib/components/VLabel/VLabel.mjs +4 -1
  171. package/lib/components/VLabel/VLabel.mjs.map +1 -1
  172. package/lib/components/VLabel/{index.d.ts → index.d.mts} +22 -13
  173. package/lib/components/VLayout/VLayout.mjs +8 -4
  174. package/lib/components/VLayout/VLayout.mjs.map +1 -1
  175. package/lib/components/VLayout/VLayoutItem.mjs +4 -2
  176. package/lib/components/VLayout/VLayoutItem.mjs.map +1 -1
  177. package/lib/components/VLayout/{index.d.ts → index.d.mts} +44 -26
  178. package/lib/components/VLazy/VLazy.mjs +4 -2
  179. package/lib/components/VLazy/VLazy.mjs.map +1 -1
  180. package/lib/components/VLazy/{index.d.ts → index.d.mts} +22 -13
  181. package/lib/components/VList/VList.mjs +12 -24
  182. package/lib/components/VList/VList.mjs.map +1 -1
  183. package/lib/components/VList/VListChildren.mjs.map +1 -1
  184. package/lib/components/VList/VListGroup.mjs +8 -2
  185. package/lib/components/VList/VListGroup.mjs.map +1 -1
  186. package/lib/components/VList/VListItem.mjs +12 -5
  187. package/lib/components/VList/VListItem.mjs.map +1 -1
  188. package/lib/components/VList/VListItemAction.mjs +4 -1
  189. package/lib/components/VList/VListItemAction.mjs.map +1 -1
  190. package/lib/components/VList/VListItemMedia.mjs +4 -1
  191. package/lib/components/VList/VListItemMedia.mjs.map +1 -1
  192. package/lib/components/VList/VListSubheader.mjs +5 -3
  193. package/lib/components/VList/VListSubheader.mjs.map +1 -1
  194. package/lib/components/VList/{index.d.ts → index.d.mts} +950 -826
  195. package/lib/components/VLocaleProvider/VLocaleProvider.mjs +5 -2
  196. package/lib/components/VLocaleProvider/VLocaleProvider.mjs.map +1 -1
  197. package/lib/components/VLocaleProvider/{index.d.ts → index.d.mts} +30 -17
  198. package/lib/components/VMain/VMain.mjs +4 -2
  199. package/lib/components/VMain/VMain.mjs.map +1 -1
  200. package/lib/components/VMain/{index.d.ts → index.d.mts} +30 -17
  201. package/lib/components/VMenu/VMenu.mjs +2 -1
  202. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  203. package/lib/components/VMenu/{index.d.ts → index.d.mts} +104 -282
  204. package/lib/components/VMessages/VMessages.mjs +4 -2
  205. package/lib/components/VMessages/VMessages.mjs.map +1 -1
  206. package/lib/components/VMessages/{index.d.ts → index.d.mts} +22 -145
  207. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +5 -10
  208. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  209. package/lib/components/VNavigationDrawer/{index.d.ts → index.d.mts} +26 -29
  210. package/lib/components/VNoSsr/VNoSsr.mjs.map +1 -1
  211. package/lib/components/VNoSsr/index.d.mts +8 -0
  212. package/lib/components/VOverlay/VOverlay.mjs +5 -3
  213. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  214. package/lib/components/VOverlay/{index.d.ts → index.d.mts} +38 -45
  215. package/lib/components/VPagination/VPagination.mjs +4 -1
  216. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  217. package/lib/components/VPagination/{index.d.ts → index.d.mts} +23 -30
  218. package/lib/components/VParallax/VParallax.mjs +5 -2
  219. package/lib/components/VParallax/VParallax.mjs.map +1 -1
  220. package/lib/components/VParallax/{index.d.ts → index.d.mts} +34 -33
  221. package/lib/components/VProgressCircular/VProgressCircular.mjs +4 -2
  222. package/lib/components/VProgressCircular/VProgressCircular.mjs.map +1 -1
  223. package/lib/components/VProgressCircular/{index.d.ts → index.d.mts} +22 -13
  224. package/lib/components/VProgressLinear/VProgressLinear.mjs +6 -4
  225. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  226. package/lib/components/VProgressLinear/{index.d.ts → index.d.mts} +42 -45
  227. package/lib/components/VRadio/VRadio.mjs +2 -1
  228. package/lib/components/VRadio/VRadio.mjs.map +1 -1
  229. package/lib/components/VRadio/{index.d.ts → index.d.mts} +27 -38
  230. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -1
  231. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  232. package/lib/components/VRadioGroup/{index.d.ts → index.d.mts} +45 -68
  233. package/lib/components/VRangeSlider/VRangeSlider.mjs +2 -1
  234. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  235. package/lib/components/VRangeSlider/{index.d.ts → index.d.mts} +33 -44
  236. package/lib/components/VRating/VRating.mjs +4 -1
  237. package/lib/components/VRating/VRating.mjs.map +1 -1
  238. package/lib/components/VRating/{index.d.ts → index.d.mts} +23 -18
  239. package/lib/components/VResponsive/VResponsive.css +13 -5
  240. package/lib/components/VResponsive/VResponsive.mjs +14 -8
  241. package/lib/components/VResponsive/VResponsive.mjs.map +1 -1
  242. package/lib/components/VResponsive/VResponsive.sass +12 -4
  243. package/lib/components/VResponsive/{index.d.ts → index.d.mts} +52 -31
  244. package/lib/components/VSelect/VSelect.mjs +11 -3
  245. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  246. package/lib/components/VSelect/{index.d.ts → index.d.mts} +200 -558
  247. package/lib/components/VSelectionControl/VSelectionControl.mjs +6 -2
  248. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  249. package/lib/components/VSelectionControl/{index.d.ts → index.d.mts} +76 -46
  250. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +4 -1
  251. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  252. package/lib/components/VSelectionControlGroup/{index.d.ts → index.d.mts} +23 -14
  253. package/lib/components/VSheet/VSheet.css +6 -0
  254. package/lib/components/VSheet/VSheet.mjs +4 -2
  255. package/lib/components/VSheet/VSheet.mjs.map +1 -1
  256. package/lib/components/VSheet/_variables.scss +1 -1
  257. package/lib/components/VSheet/{index.d.ts → index.d.mts} +22 -13
  258. package/lib/components/VSlideGroup/VSlideGroup.mjs +6 -3
  259. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  260. package/lib/components/VSlideGroup/{index.d.ts → index.d.mts} +59 -90
  261. package/lib/components/VSlider/VSlider.mjs +2 -1
  262. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  263. package/lib/components/VSlider/VSliderThumb.mjs +6 -4
  264. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  265. package/lib/components/VSlider/VSliderTrack.mjs +6 -4
  266. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  267. package/lib/components/VSlider/{index.d.ts → index.d.mts} +33 -44
  268. package/lib/components/VSnackbar/VSnackbar.mjs +2 -1
  269. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  270. package/lib/components/VSnackbar/{index.d.ts → index.d.mts} +92 -142
  271. package/lib/components/VSwitch/VSwitch.mjs +2 -1
  272. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  273. package/lib/components/VSwitch/{index.d.ts → index.d.mts} +45 -72
  274. package/lib/components/VSystemBar/VSystemBar.mjs +4 -2
  275. package/lib/components/VSystemBar/VSystemBar.mjs.map +1 -1
  276. package/lib/components/VSystemBar/{index.d.ts → index.d.mts} +22 -13
  277. package/lib/components/VTable/VTable.mjs +4 -1
  278. package/lib/components/VTable/VTable.mjs.map +1 -1
  279. package/lib/components/VTable/{index.d.ts → index.d.mts} +26 -29
  280. package/lib/components/VTabs/VTab.mjs +2 -2
  281. package/lib/components/VTabs/VTab.mjs.map +1 -1
  282. package/lib/components/VTabs/VTabs.mjs +2 -2
  283. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  284. package/lib/components/VTabs/{index.d.ts → index.d.mts} +45 -27
  285. package/lib/components/VTextField/VTextField.mjs +3 -2
  286. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  287. package/lib/components/VTextField/{index.d.ts → index.d.mts} +232 -293
  288. package/lib/components/VTextarea/VTextarea.mjs +3 -2
  289. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  290. package/lib/components/VTextarea/{index.d.ts → index.d.mts} +94 -137
  291. package/lib/components/VThemeProvider/VThemeProvider.mjs +6 -3
  292. package/lib/components/VThemeProvider/VThemeProvider.mjs.map +1 -1
  293. package/lib/components/VThemeProvider/{index.d.ts → index.d.mts} +22 -13
  294. package/lib/components/VTimeline/VTimeline.mjs +5 -3
  295. package/lib/components/VTimeline/VTimeline.mjs.map +1 -1
  296. package/lib/components/VTimeline/VTimelineDivider.mjs +4 -1
  297. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  298. package/lib/components/VTimeline/VTimelineItem.mjs +8 -6
  299. package/lib/components/VTimeline/VTimelineItem.mjs.map +1 -1
  300. package/lib/components/VTimeline/{index.d.ts → index.d.mts} +67 -57
  301. package/lib/components/VToolbar/VToolbar.mjs +4 -2
  302. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  303. package/lib/components/VToolbar/VToolbarItems.mjs +9 -4
  304. package/lib/components/VToolbar/VToolbarItems.mjs.map +1 -1
  305. package/lib/components/VToolbar/VToolbarTitle.mjs +5 -2
  306. package/lib/components/VToolbar/VToolbarTitle.mjs.map +1 -1
  307. package/lib/components/VToolbar/{index.d.ts → index.d.mts} +74 -71
  308. package/lib/components/VTooltip/VTooltip.mjs +2 -1
  309. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  310. package/lib/components/VTooltip/{index.d.ts → index.d.mts} +104 -150
  311. package/lib/components/VValidation/{index.d.ts → index.d.mts} +6 -18
  312. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +21 -23
  313. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  314. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs +5 -2
  315. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -1
  316. package/lib/components/VVirtualScroll/{index.d.ts → index.d.mts} +70 -30
  317. package/lib/components/VWindow/VWindow.mjs +4 -1
  318. package/lib/components/VWindow/VWindow.mjs.map +1 -1
  319. package/lib/components/VWindow/VWindowItem.mjs +4 -1
  320. package/lib/components/VWindow/VWindowItem.mjs.map +1 -1
  321. package/lib/components/VWindow/{index.d.ts → index.d.mts} +61 -79
  322. package/lib/components/{index.d.ts → index.d.mts} +6475 -7529
  323. package/lib/components/transitions/{index.d.ts → index.d.mts} +0 -192
  324. package/lib/composables/component.mjs +11 -0
  325. package/lib/composables/component.mjs.map +1 -0
  326. package/lib/composables/defaults.mjs +63 -5
  327. package/lib/composables/defaults.mjs.map +1 -1
  328. package/lib/composables/display.mjs +6 -6
  329. package/lib/composables/display.mjs.map +1 -1
  330. package/lib/composables/focus.mjs.map +1 -1
  331. package/lib/composables/icons.mjs +15 -4
  332. package/lib/composables/icons.mjs.map +1 -1
  333. package/lib/composables/index.mjs +1 -1
  334. package/lib/composables/index.mjs.map +1 -1
  335. package/lib/composables/loader.mjs.map +1 -1
  336. package/lib/composables/scroll.mjs +18 -19
  337. package/lib/composables/scroll.mjs.map +1 -1
  338. package/lib/entry-bundler.mjs +1 -1
  339. package/lib/framework.mjs +2 -2
  340. package/lib/framework.mjs.map +1 -1
  341. package/lib/iconsets/{fa-svg.d.ts → fa-svg.d.mts} +1 -1
  342. package/lib/iconsets/{fa.d.ts → fa.d.mts} +1 -1
  343. package/lib/iconsets/{fa4.d.ts → fa4.d.mts} +1 -1
  344. package/lib/iconsets/{md.d.ts → md.d.mts} +1 -1
  345. package/lib/iconsets/{mdi-svg.d.ts → mdi-svg.d.mts} +1 -1
  346. package/lib/iconsets/{mdi.d.ts → mdi.d.mts} +1 -1
  347. package/lib/{index.d.ts → index.d.mts} +13 -12
  348. package/lib/labs/VDataTable/VDataTable.mjs +12 -3
  349. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  350. package/lib/labs/VDataTable/VDataTableHeaders.mjs +34 -20
  351. package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
  352. package/lib/labs/VDataTable/VDataTableRow.mjs +2 -4
  353. package/lib/labs/VDataTable/VDataTableRow.mjs.map +1 -1
  354. package/lib/labs/VDataTable/VDataTableRows.mjs +2 -2
  355. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  356. package/lib/labs/VDataTable/VDataTableServer.mjs +1 -6
  357. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  358. package/lib/labs/VDataTable/VDataTableVirtual.mjs +7 -2
  359. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  360. package/lib/labs/VDataTable/composables/paginate.mjs +6 -1
  361. package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -1
  362. package/lib/labs/VDataTable/{index.d.ts → index.d.mts} +113 -943
  363. package/lib/labs/VInfiniteScroll/{index.d.ts → index.d.mts} +8 -36
  364. package/lib/labs/VSkeletonLoader/{index.d.ts → index.d.mts} +0 -12
  365. package/lib/labs/{components.d.ts → components.d.mts} +161 -1031
  366. package/lib/labs/date/DateAdapter.mjs +2 -0
  367. package/lib/labs/date/DateAdapter.mjs.map +1 -0
  368. package/lib/labs/date/adapters/vuetify.d.mts +52 -0
  369. package/lib/{adapters → labs/date/adapters}/vuetify.mjs +2 -2
  370. package/lib/labs/date/adapters/vuetify.mjs.map +1 -0
  371. package/lib/{composables → labs/date}/date.mjs +3 -3
  372. package/lib/labs/date/date.mjs.map +1 -0
  373. package/lib/labs/date/index.d.mts +40 -0
  374. package/lib/labs/date/index.mjs +2 -0
  375. package/lib/labs/date/index.mjs.map +1 -0
  376. package/lib/labs/index.mjs +3 -2
  377. package/lib/labs/index.mjs.map +1 -1
  378. package/lib/util/colorUtils.mjs +68 -3
  379. package/lib/util/colorUtils.mjs.map +1 -1
  380. package/lib/util/console.mjs +12 -81
  381. package/lib/util/console.mjs.map +1 -1
  382. package/lib/util/createSimpleFunctional.mjs +9 -4
  383. package/lib/util/createSimpleFunctional.mjs.map +1 -1
  384. package/lib/util/defineComponent.mjs +11 -43
  385. package/lib/util/defineComponent.mjs.map +1 -1
  386. package/lib/util/helpers.mjs +31 -2
  387. package/lib/util/helpers.mjs.map +1 -1
  388. package/lib/util/index.mjs +1 -0
  389. package/lib/util/index.mjs.map +1 -1
  390. package/package.json +11 -6
  391. package/lib/adapters/date-adapter.mjs +0 -2
  392. package/lib/adapters/date-adapter.mjs.map +0 -1
  393. package/lib/adapters/vuetify.mjs.map +0 -1
  394. package/lib/components/VNoSsr/index.d.ts +0 -18
  395. package/lib/composables/date.mjs.map +0 -1
  396. /package/lib/directives/{index.d.ts → index.d.mts} +0 -0
  397. /package/lib/locale/adapters/{vue-i18n.d.ts → vue-i18n.d.mts} +0 -0
  398. /package/lib/locale/adapters/{vuetify.d.ts → vuetify.d.mts} +0 -0
  399. /package/lib/locale/{index.d.ts → index.d.mts} +0 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v4.0.0-dev-20230426.0
2
+ * Vuetify v4.0.0-dev-20230511.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -171,11 +171,14 @@
171
171
  function keys(o) {
172
172
  return Object.keys(o);
173
173
  }
174
- function pick(obj, paths) {
174
+ function has(obj, key) {
175
+ return key.every(k => obj.hasOwnProperty(k));
176
+ }
177
+ function pick(obj, paths, exclude) {
175
178
  const found = Object.create(null);
176
179
  const rest = Object.create(null);
177
180
  for (const key in obj) {
178
- if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key)) {
181
+ if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key) && !exclude?.some(path => path === key)) {
179
182
  found[key] = obj[key];
180
183
  } else {
181
184
  rest[key] = obj[key];
@@ -360,6 +363,32 @@
360
363
  handler(...args);
361
364
  }
362
365
  }
366
+ function focusableChildren(el) {
367
+ const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', '[tabindex]'].map(s => `${s}:not([tabindex="-1"]):not([disabled])`).join(', ');
368
+ return [...el.querySelectorAll(targets)];
369
+ }
370
+ function focusChild(el, location) {
371
+ const focusable = focusableChildren(el);
372
+ const idx = focusable.indexOf(document.activeElement);
373
+ if (!location) {
374
+ if (!el.contains(document.activeElement)) {
375
+ focusable[0]?.focus();
376
+ }
377
+ } else if (location === 'first') {
378
+ focusable[0]?.focus();
379
+ } else if (location === 'last') {
380
+ focusable.at(-1)?.focus();
381
+ } else {
382
+ let _el;
383
+ let idxx = idx;
384
+ const inc = location === 'next' ? 1 : -1;
385
+ do {
386
+ idxx += inc;
387
+ _el = focusable[idxx];
388
+ } while ((!_el || _el.offsetParent == null) && idxx < focusable.length && idxx >= 0);
389
+ if (_el) _el.focus();else focusChild(el, location === 'next' ? 'first' : 'last');
390
+ }
391
+ }
363
392
 
364
393
  const block = ['top', 'bottom'];
365
394
  const inline = ['start', 'end', 'left', 'right'];
@@ -512,79 +541,15 @@
512
541
  }
513
542
 
514
543
  /* eslint-disable no-console */
515
- // import Vuetify from '../framework'
516
-
517
- function createMessage(message, vm, parent) {
518
- // if (Vuetify.config.silent) return
519
-
520
- if (parent) {
521
- vm = {
522
- __isVue: true,
523
- $parent: parent,
524
- $options: vm
525
- };
526
- }
527
- if (vm) {
528
- // Only show each message once per instance
529
- vm.$_alreadyWarned = vm.$_alreadyWarned || [];
530
- if (vm.$_alreadyWarned.includes(message)) return;
531
- vm.$_alreadyWarned.push(message);
532
- }
533
- return `[Vuetify] ${message}` + (vm ? generateComponentTrace(vm) : '');
534
- }
535
- function consoleWarn(message, vm, parent) {
536
- const newMessage = createMessage(message, vm, parent);
537
- newMessage != null && console.warn(newMessage);
544
+ function consoleWarn(message) {
545
+ vue.warn(`Vuetify: ${message}`);
538
546
  }
539
- function consoleError(message, vm, parent) {
540
- const newMessage = createMessage(message, vm, parent);
541
- newMessage != null && console.error(newMessage);
547
+ function consoleError(message) {
548
+ vue.warn(`Vuetify error: ${message}`);
542
549
  }
543
-
544
- /**
545
- * Shamelessly stolen from vuejs/vue/blob/dev/src/core/util/debug.js
546
- */
547
-
548
- const classifyRE = /(?:^|[-_])(\w)/g;
549
- const classify = str => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');
550
- function formatComponentName(vm, includeFile) {
551
- if (vm.$root === vm) {
552
- return '<Root>';
553
- }
554
- const options = typeof vm === 'function' && vm.cid != null ? vm.options : vm.__isVue ? vm.$options || vm.constructor.options : vm || {};
555
- let name = options.name || options._componentTag;
556
- const file = options.__file;
557
- if (!name && file) {
558
- const match = file.match(/([^/\\]+)\.vue$/);
559
- name = match?.[1];
560
- }
561
- return (name ? `<${classify(name)}>` : `<Anonymous>`) + (file && includeFile !== false ? ` at ${file}` : '');
562
- }
563
- function generateComponentTrace(vm) {
564
- if (vm.__isVue && vm.$parent) {
565
- const tree = [];
566
- let currentRecursiveSequence = 0;
567
- while (vm) {
568
- if (tree.length > 0) {
569
- const last = tree[tree.length - 1];
570
- if (last.constructor === vm.constructor) {
571
- currentRecursiveSequence++;
572
- vm = vm.$parent;
573
- continue;
574
- } else if (currentRecursiveSequence > 0) {
575
- tree[tree.length - 1] = [last, currentRecursiveSequence];
576
- currentRecursiveSequence = 0;
577
- }
578
- }
579
- tree.push(vm);
580
- vm = vm.$parent;
581
- }
582
- return '\n\nfound in\n\n' + tree.map((vm, i) => `${i === 0 ? '---> ' : ' '.repeat(5 + i * 2)}${Array.isArray(vm)
583
- // eslint-disable-next-line sonarjs/no-nested-template-literals
584
- ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)` : formatComponentName(vm)}`).join('\n');
585
- } else {
586
- return `\n\n(found in ${formatComponentName(vm)})`;
587
- }
550
+ function deprecate(original, replacement) {
551
+ replacement = Array.isArray(replacement) ? replacement.slice(0, -1).map(s => `'${s}'`).join(', ') + ` or '${replacement.at(-1)}'` : `'${replacement}'`;
552
+ vue.warn(`[Vuetify UPGRADE] '${original}' is deprecated, use ${replacement} instead.`);
588
553
  }
589
554
 
590
555
  // For converting XYZ to sRGB
@@ -658,7 +623,46 @@
658
623
  function isCssColor(color) {
659
624
  return !!color && /^(#|var\(--|(rgb|hsl)a?\()/.test(color);
660
625
  }
661
- function parseColor$1(color) {
626
+ const cssColorRe = /^(?<fn>(?:rgb|hsl)a?)\((?<values>.+)\)/;
627
+ const mappers = {
628
+ rgb: (r, g, b, a) => ({
629
+ r,
630
+ g,
631
+ b,
632
+ a
633
+ }),
634
+ rgba: (r, g, b, a) => ({
635
+ r,
636
+ g,
637
+ b,
638
+ a
639
+ }),
640
+ hsl: (h, s, l, a) => HSLtoRGB({
641
+ h,
642
+ s,
643
+ l,
644
+ a
645
+ }),
646
+ hsla: (h, s, l, a) => HSLtoRGB({
647
+ h,
648
+ s,
649
+ l,
650
+ a
651
+ }),
652
+ hsv: (h, s, v, a) => HSVtoRGB({
653
+ h,
654
+ s,
655
+ v,
656
+ a
657
+ }),
658
+ hsva: (h, s, v, a) => HSVtoRGB({
659
+ h,
660
+ s,
661
+ v,
662
+ a
663
+ })
664
+ };
665
+ function parseColor(color) {
662
666
  if (typeof color === 'number') {
663
667
  if (isNaN(color) || color < 0 || color > 0xFFFFFF) {
664
668
  // int can't have opacity
@@ -669,6 +673,22 @@
669
673
  g: (color & 0xFF00) >> 8,
670
674
  b: color & 0xFF
671
675
  };
676
+ } else if (typeof color === 'string' && cssColorRe.test(color)) {
677
+ const {
678
+ groups
679
+ } = color.match(cssColorRe);
680
+ const {
681
+ fn,
682
+ values
683
+ } = groups;
684
+ const realValues = values.split(/,\s*/).map(v => {
685
+ if (v.endsWith('%') && ['hsl', 'hsla', 'hsv', 'hsva'].includes(fn)) {
686
+ return parseFloat(v) / 100;
687
+ } else {
688
+ return parseFloat(v);
689
+ }
690
+ });
691
+ return mappers[fn](...realValues);
672
692
  } else if (typeof color === 'string') {
673
693
  let hex = color.startsWith('#') ? color.slice(1) : color;
674
694
  if ([3, 4].includes(hex.length)) {
@@ -681,9 +701,16 @@
681
701
  consoleWarn(`'${color}' is not a valid hex(a) color`);
682
702
  }
683
703
  return HexToRGB(hex);
684
- } else {
685
- throw new TypeError(`Colors can only be numbers or strings, recieved ${color == null ? color : color.constructor.name} instead`);
704
+ } else if (typeof color === 'object') {
705
+ if (has(color, ['r', 'g', 'b'])) {
706
+ return color;
707
+ } else if (has(color, ['h', 's', 'l'])) {
708
+ return HSVtoRGB(HSLtoHSV(color));
709
+ } else if (has(color, ['h', 's', 'v'])) {
710
+ return HSVtoRGB(color);
711
+ }
686
712
  }
713
+ throw new TypeError(`Invalid color: ${color == null ? color : String(color) || color.constructor.name}\nExpected #hex, #hexa, rgb(), rgba(), hsl(), hsla(), object or number`);
687
714
  }
688
715
 
689
716
  /** Converts HSVA to RGBA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV */
@@ -706,6 +733,9 @@
706
733
  a
707
734
  };
708
735
  }
736
+ function HSLtoRGB(hsla) {
737
+ return HSVtoRGB(HSLtoHSV(hsla));
738
+ }
709
739
 
710
740
  /** Converts RGBA to HSVA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV */
711
741
  function RGBtoHSV(rgba) {
@@ -844,7 +874,7 @@
844
874
  * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef
845
875
  */
846
876
  function getLuma(color) {
847
- const rgb = parseColor$1(color);
877
+ const rgb = parseColor(color);
848
878
  return toXYZ$1(rgb)[1];
849
879
  }
850
880
 
@@ -860,44 +890,6 @@
860
890
  return (light + 0.05) / (dark + 0.05);
861
891
  }
862
892
 
863
- // Utilities
864
- function getCurrentInstance(name, message) {
865
- const vm = vue.getCurrentInstance();
866
- if (!vm) {
867
- throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
868
- }
869
- return vm;
870
- }
871
- function getCurrentInstanceName() {
872
- let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
873
- const vm = getCurrentInstance(name).type;
874
- return toKebabCase(vm?.aliasName || vm?.name);
875
- }
876
- let _uid = 0;
877
- let _map = new WeakMap();
878
- function getUid() {
879
- const vm = getCurrentInstance('getUid');
880
- if (_map.has(vm)) return _map.get(vm);else {
881
- const uid = _uid++;
882
- _map.set(vm, uid);
883
- return uid;
884
- }
885
- }
886
- getUid.reset = () => {
887
- _uid = 0;
888
- _map = new WeakMap();
889
- };
890
-
891
- function injectSelf(key) {
892
- const {
893
- provides
894
- } = getCurrentInstance('injectSelf');
895
- if (provides && key in provides) {
896
- // TS doesn't allow symbol as index type
897
- return provides[key];
898
- }
899
- }
900
-
901
893
  /**
902
894
  * Creates a factory function for props definitions.
903
895
  * This is used to define props in a composable then override
@@ -951,17 +943,54 @@
951
943
 
952
944
  // Types
953
945
 
946
+ // Composables
947
+ const makeComponentProps = propsFactory({
948
+ class: [String, Array],
949
+ style: {
950
+ type: [String, Array, Object],
951
+ default: null
952
+ }
953
+ }, 'component');
954
+
955
+ function useToggleScope(source, fn) {
956
+ let scope;
957
+ function start() {
958
+ scope = vue.effectScope();
959
+ scope.run(() => fn.length ? fn(() => {
960
+ scope?.stop();
961
+ start();
962
+ }) : fn());
963
+ }
964
+ vue.watch(source, active => {
965
+ if (active && !scope) {
966
+ start();
967
+ } else if (!active) {
968
+ scope?.stop();
969
+ scope = undefined;
970
+ }
971
+ }, {
972
+ immediate: true
973
+ });
974
+ vue.onScopeDispose(() => {
975
+ scope?.stop();
976
+ });
977
+ }
978
+
979
+ // Composables
980
+
981
+ // Types
982
+
954
983
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
955
984
  function createDefaults(options) {
956
985
  return vue.ref(options);
957
986
  }
958
- function useDefaults() {
987
+ function injectDefaults() {
959
988
  const defaults = vue.inject(DefaultsSymbol);
960
989
  if (!defaults) throw new Error('[Vuetify] Could not find defaults instance');
961
990
  return defaults;
962
991
  }
963
992
  function provideDefaults(defaults, options) {
964
- const injectedDefaults = useDefaults();
993
+ const injectedDefaults = injectDefaults();
965
994
  const providedDefaults = vue.ref(defaults);
966
995
  const newDefaults = vue.computed(() => {
967
996
  const disabled = vue.unref(options?.disabled);
@@ -988,41 +1017,68 @@
988
1017
  vue.provide(DefaultsSymbol, newDefaults);
989
1018
  return newDefaults;
990
1019
  }
991
-
992
- function useToggleScope(source, fn) {
993
- let scope;
994
- function start() {
995
- scope = vue.effectScope();
996
- scope.run(() => fn.length ? fn(() => {
997
- scope?.stop();
998
- start();
999
- }) : fn());
1000
- }
1001
- vue.watch(source, active => {
1002
- if (active && !scope) {
1003
- start();
1004
- } else if (!active) {
1005
- scope?.stop();
1006
- scope = undefined;
1020
+ function propIsDefined(vnode, prop) {
1021
+ return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1022
+ }
1023
+ function internalUseDefaults() {
1024
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1025
+ let name = arguments.length > 1 ? arguments[1] : undefined;
1026
+ let defaults = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : injectDefaults();
1027
+ const vm = getCurrentInstance('useDefaults');
1028
+ name = name ?? vm.type.name ?? vm.type.__name;
1029
+ if (!name) {
1030
+ throw new Error('[Vuetify] Could not determine component name');
1031
+ }
1032
+ const componentDefaults = vue.computed(() => defaults.value?.[props._as ?? name]);
1033
+ const _props = new Proxy(props, {
1034
+ get(target, prop) {
1035
+ const propValue = Reflect.get(target, prop);
1036
+ if (prop === 'class' || prop === 'style') {
1037
+ return [componentDefaults.value?.[prop], propValue].filter(v => v != null);
1038
+ } else if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1039
+ return componentDefaults.value?.[prop] ?? defaults.value?.global?.[prop] ?? propValue;
1040
+ }
1041
+ return propValue;
1007
1042
  }
1008
- }, {
1009
- immediate: true
1010
1043
  });
1011
- vue.onScopeDispose(() => {
1012
- scope?.stop();
1044
+ const _subcomponentDefaults = vue.shallowRef();
1045
+ vue.watchEffect(() => {
1046
+ if (componentDefaults.value) {
1047
+ const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1048
+ let [key] = _ref;
1049
+ return key.startsWith(key[0].toUpperCase());
1050
+ });
1051
+ if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1052
+ }
1013
1053
  });
1054
+ function provideSubDefaults() {
1055
+ // If subcomponent defaults are provided, override any
1056
+ // subcomponents provided by the component's setup function.
1057
+ // This uses injectSelf so must be done after the original setup to work.
1058
+ useToggleScope(_subcomponentDefaults, () => {
1059
+ provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1060
+ });
1061
+ }
1062
+ return {
1063
+ props: _props,
1064
+ provideSubDefaults
1065
+ };
1066
+ }
1067
+ function useDefaults() {
1068
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1069
+ let name = arguments.length > 1 ? arguments[1] : undefined;
1070
+ const {
1071
+ props: _props,
1072
+ provideSubDefaults
1073
+ } = internalUseDefaults(props, name);
1074
+ provideSubDefaults();
1075
+ return _props;
1014
1076
  }
1015
1077
 
1016
1078
  // Utils
1017
1079
 
1018
1080
  // Types
1019
1081
 
1020
- function propIsDefined(vnode, prop) {
1021
- return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1022
- }
1023
-
1024
- // No props
1025
-
1026
1082
  // Implementation
1027
1083
  function defineComponent(options) {
1028
1084
  options._setup = options._setup ?? options.setup;
@@ -1034,43 +1090,20 @@
1034
1090
  options.props = propsFactory(options.props ?? {}, toKebabCase(options.name))();
1035
1091
  const propKeys = Object.keys(options.props);
1036
1092
  options.filterProps = function filterProps(props) {
1037
- return pick(props, propKeys);
1093
+ return pick(props, propKeys, ['class', 'style']);
1038
1094
  };
1039
1095
  options.props._as = String;
1040
1096
  options.setup = function setup(props, ctx) {
1041
- const defaults = useDefaults();
1097
+ const defaults = injectDefaults();
1042
1098
 
1043
1099
  // Skip props proxy if defaults are not provided
1044
1100
  if (!defaults.value) return options._setup(props, ctx);
1045
- const vm = vue.getCurrentInstance();
1046
- const componentDefaults = vue.computed(() => defaults.value[props._as ?? options.name]);
1047
- const _props = new Proxy(props, {
1048
- get(target, prop) {
1049
- const propValue = Reflect.get(target, prop);
1050
- if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1051
- return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? propValue;
1052
- }
1053
- return propValue;
1054
- }
1055
- });
1056
- const _subcomponentDefaults = vue.shallowRef();
1057
- vue.watchEffect(() => {
1058
- if (componentDefaults.value) {
1059
- const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1060
- let [key] = _ref;
1061
- return key.startsWith(key[0].toUpperCase());
1062
- });
1063
- if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1064
- }
1065
- });
1101
+ const {
1102
+ props: _props,
1103
+ provideSubDefaults
1104
+ } = internalUseDefaults(props, props._as ?? options.name, defaults);
1066
1105
  const setupBindings = options._setup(_props, ctx);
1067
-
1068
- // If subcomponent defaults are provided, override any
1069
- // subcomponents provided by the component's setup function.
1070
- // This uses injectSelf so must be done after the original setup to work.
1071
- useToggleScope(_subcomponentDefaults, () => {
1072
- provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1073
- });
1106
+ provideSubDefaults();
1074
1107
  return setupBindings;
1075
1108
  };
1076
1109
  }
@@ -1095,15 +1128,19 @@
1095
1128
  tag: {
1096
1129
  type: String,
1097
1130
  default: tag
1098
- }
1131
+ },
1132
+ ...makeComponentProps()
1099
1133
  },
1100
1134
  setup(props, _ref) {
1101
1135
  let {
1102
1136
  slots
1103
1137
  } = _ref;
1104
- return () => vue.h(props.tag, {
1105
- class: klass
1106
- }, slots.default?.());
1138
+ return () => {
1139
+ return vue.h(props.tag, {
1140
+ class: [klass, props.class],
1141
+ style: props.style
1142
+ }, slots.default?.());
1143
+ };
1107
1144
  }
1108
1145
  });
1109
1146
  }
@@ -1136,6 +1173,34 @@
1136
1173
  const deceleratedEasing = 'cubic-bezier(0.0, 0, 0.2, 1)'; // Entering
1137
1174
  const acceleratedEasing = 'cubic-bezier(0.4, 0, 1, 1)'; // Leaving
1138
1175
 
1176
+ // Utilities
1177
+ function getCurrentInstance(name, message) {
1178
+ const vm = vue.getCurrentInstance();
1179
+ if (!vm) {
1180
+ throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
1181
+ }
1182
+ return vm;
1183
+ }
1184
+ function getCurrentInstanceName() {
1185
+ let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
1186
+ const vm = getCurrentInstance(name).type;
1187
+ return toKebabCase(vm?.aliasName || vm?.name);
1188
+ }
1189
+ let _uid = 0;
1190
+ let _map = new WeakMap();
1191
+ function getUid() {
1192
+ const vm = getCurrentInstance('getUid');
1193
+ if (_map.has(vm)) return _map.get(vm);else {
1194
+ const uid = _uid++;
1195
+ _map.set(vm, uid);
1196
+ return uid;
1197
+ }
1198
+ }
1199
+ getUid.reset = () => {
1200
+ _uid = 0;
1201
+ _map = new WeakMap();
1202
+ };
1203
+
1139
1204
  function getScrollParent(el) {
1140
1205
  while (el) {
1141
1206
  if (hasScrollbar(el)) return el;
@@ -1159,6 +1224,16 @@
1159
1224
  return style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1160
1225
  }
1161
1226
 
1227
+ function injectSelf(key) {
1228
+ const {
1229
+ provides
1230
+ } = getCurrentInstance('injectSelf');
1231
+ if (provides && key in provides) {
1232
+ // TS doesn't allow symbol as index type
1233
+ return provides[key];
1234
+ }
1235
+ }
1236
+
1162
1237
  function isFixedPosition(el) {
1163
1238
  while (el) {
1164
1239
  if (window.getComputedStyle(el).position === 'fixed') {
@@ -1663,7 +1738,7 @@
1663
1738
  for (const variation of ['lighten', 'darken']) {
1664
1739
  const fn = variation === 'lighten' ? lighten : darken;
1665
1740
  for (const amount of createRange(parsedOptions.variations[variation], 1)) {
1666
- theme.colors[`${name}-${variation}-${amount}`] = RGBtoHex(fn(parseColor$1(color), amount));
1741
+ theme.colors[`${name}-${variation}-${amount}`] = RGBtoHex(fn(parseColor(color), amount));
1667
1742
  }
1668
1743
  }
1669
1744
  }
@@ -1671,9 +1746,9 @@
1671
1746
  for (const color of Object.keys(theme.colors)) {
1672
1747
  if (/^on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue;
1673
1748
  const onColor = `on-${color}`;
1674
- const colorVal = parseColor$1(theme.colors[color]);
1675
- const blackContrast = Math.abs(APCAcontrast(parseColor$1(0), colorVal));
1676
- const whiteContrast = Math.abs(APCAcontrast(parseColor$1(0xffffff), colorVal));
1749
+ const colorVal = parseColor(theme.colors[color]);
1750
+ const blackContrast = Math.abs(APCAcontrast(parseColor(0), colorVal));
1751
+ const whiteContrast = Math.abs(APCAcontrast(parseColor(0xffffff), colorVal));
1677
1752
 
1678
1753
  // TODO: warn about poor color selections
1679
1754
  // const contrastAsText = Math.abs(APCAcontrast(colorVal, colorToInt(theme.colors.background)))
@@ -1805,14 +1880,14 @@
1805
1880
  const darkOverlay = theme.dark ? 1 : 2;
1806
1881
  const variables = [];
1807
1882
  for (const [key, value] of Object.entries(theme.colors)) {
1808
- const rgb = parseColor$1(value);
1883
+ const rgb = parseColor(value);
1809
1884
  variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
1810
1885
  if (!key.startsWith('on-')) {
1811
1886
  variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
1812
1887
  }
1813
1888
  }
1814
1889
  for (const [key, value] of Object.entries(theme.variables)) {
1815
- const color = typeof value === 'string' && value.startsWith('#') ? parseColor$1(value) : undefined;
1890
+ const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
1816
1891
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
1817
1892
  variables.push(`--v-${key}: ${rgb ?? value}`);
1818
1893
  }
@@ -2141,6 +2216,7 @@
2141
2216
  const VApp = genericComponent()({
2142
2217
  name: 'VApp',
2143
2218
  props: {
2219
+ ...makeComponentProps(),
2144
2220
  ...makeLayoutProps({
2145
2221
  fullHeight: true
2146
2222
  }),
@@ -2163,8 +2239,8 @@
2163
2239
  } = useRtl();
2164
2240
  useRender(() => vue.createVNode("div", {
2165
2241
  "ref": layoutRef,
2166
- "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value],
2167
- "style": layoutStyles.value
2242
+ "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value, props.class],
2243
+ "style": [layoutStyles.value, props.style]
2168
2244
  }, [vue.createVNode("div", {
2169
2245
  "class": "v-application__wrap"
2170
2246
  }, [slots.default?.()])]));
@@ -2584,13 +2660,16 @@
2584
2660
  })
2585
2661
  };
2586
2662
  }
2663
+ const makeVResponsiveProps = propsFactory({
2664
+ aspectRatio: [String, Number],
2665
+ contentClass: String,
2666
+ inline: Boolean,
2667
+ ...makeComponentProps(),
2668
+ ...makeDimensionProps()
2669
+ }, 'v-responsive');
2587
2670
  const VResponsive = genericComponent()({
2588
2671
  name: 'VResponsive',
2589
- props: {
2590
- aspectRatio: [String, Number],
2591
- contentClass: String,
2592
- ...makeDimensionProps()
2593
- },
2672
+ props: makeVResponsiveProps(),
2594
2673
  setup(props, _ref) {
2595
2674
  let {
2596
2675
  slots
@@ -2602,8 +2681,10 @@
2602
2681
  dimensionStyles
2603
2682
  } = useDimension(props);
2604
2683
  useRender(() => vue.createVNode("div", {
2605
- "class": "v-responsive",
2606
- "style": dimensionStyles.value
2684
+ "class": ['v-responsive', {
2685
+ 'v-responsive--inline': props.inline
2686
+ }, props.class],
2687
+ "style": [dimensionStyles.value, props.style]
2607
2688
  }, [vue.createVNode("div", {
2608
2689
  "class": "v-responsive__sizer",
2609
2690
  "style": aspectStyles.value
@@ -2698,7 +2779,6 @@
2698
2779
  intersect: Intersect
2699
2780
  },
2700
2781
  props: {
2701
- aspectRatio: [String, Number],
2702
2782
  alt: String,
2703
2783
  cover: Boolean,
2704
2784
  eager: Boolean,
@@ -2720,7 +2800,8 @@
2720
2800
  default: ''
2721
2801
  },
2722
2802
  srcset: String,
2723
- width: [String, Number],
2803
+ ...makeVResponsiveProps(),
2804
+ ...makeComponentProps(),
2724
2805
  ...makeTransitionProps()
2725
2806
  },
2726
2807
  emits: {
@@ -2905,25 +2986,27 @@
2905
2986
  }
2906
2987
  });
2907
2988
  }
2908
- useRender(() => vue.withDirectives(vue.createVNode(VResponsive, {
2909
- "class": ['v-img', {
2910
- 'v-img--booting': !isBooted.value
2911
- }],
2912
- "style": {
2913
- width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width)
2914
- },
2915
- "aspectRatio": aspectRatio.value,
2916
- "aria-label": props.alt,
2917
- "role": props.alt ? 'img' : undefined
2918
- }, {
2919
- additional: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(__image, null, null), vue.createVNode(__preloadImage, null, null), vue.createVNode(__gradient, null, null), vue.createVNode(__placeholder, null, null), vue.createVNode(__error, null, null)]),
2920
- default: slots.default
2921
- }), [[vue.resolveDirective("intersect"), {
2922
- handler: init,
2923
- options: props.options
2924
- }, null, {
2925
- once: true
2926
- }]]));
2989
+ useRender(() => {
2990
+ const [responsiveProps] = VResponsive.filterProps(props);
2991
+ return vue.withDirectives(vue.createVNode(VResponsive, vue.mergeProps({
2992
+ "class": ['v-img', {
2993
+ 'v-img--booting': !isBooted.value
2994
+ }, props.class],
2995
+ "style": props.style
2996
+ }, responsiveProps, {
2997
+ "aspectRatio": aspectRatio.value,
2998
+ "aria-label": props.alt,
2999
+ "role": props.alt ? 'img' : undefined
3000
+ }), {
3001
+ additional: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(__image, null, null), vue.createVNode(__preloadImage, null, null), vue.createVNode(__gradient, null, null), vue.createVNode(__placeholder, null, null), vue.createVNode(__error, null, null)]),
3002
+ default: slots.default
3003
+ }), [[vue.resolveDirective("intersect"), {
3004
+ handler: init,
3005
+ options: props.options
3006
+ }, null, {
3007
+ once: true
3008
+ }]]);
3009
+ });
2927
3010
  return {
2928
3011
  currentSrc,
2929
3012
  image,
@@ -2946,10 +3029,9 @@
2946
3029
  }
2947
3030
  }, 'tag');
2948
3031
 
2949
- // Types
2950
-
2951
3032
  const makeVToolbarTitleProps = propsFactory({
2952
3033
  text: String,
3034
+ ...makeComponentProps(),
2953
3035
  ...makeTagProps()
2954
3036
  }, 'v-toolbar-title');
2955
3037
  const VToolbarTitle = genericComponent()({
@@ -2962,7 +3044,8 @@
2962
3044
  useRender(() => {
2963
3045
  const hasText = !!(slots.default || slots.text || props.text);
2964
3046
  return vue.createVNode(props.tag, {
2965
- "class": "v-toolbar-title"
3047
+ "class": ['v-toolbar-title', props.class],
3048
+ "style": props.style
2966
3049
  }, {
2967
3050
  default: () => [hasText && vue.createVNode("div", {
2968
3051
  "class": "v-toolbar-title__placeholder"
@@ -3143,6 +3226,7 @@
3143
3226
  image: String,
3144
3227
  title: String,
3145
3228
  ...makeBorderProps(),
3229
+ ...makeComponentProps(),
3146
3230
  ...makeElevationProps(),
3147
3231
  ...makeRoundedProps(),
3148
3232
  ...makeTagProps({
@@ -3193,8 +3277,8 @@
3193
3277
  'v-toolbar--flat': props.flat,
3194
3278
  'v-toolbar--floating': props.floating,
3195
3279
  [`v-toolbar--density-${props.density}`]: true
3196
- }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value],
3197
- "style": [backgroundColorStyles.value]
3280
+ }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value, props.class],
3281
+ "style": [backgroundColorStyles.value, props.style]
3198
3282
  }, {
3199
3283
  default: () => [hasImage && vue.createVNode("div", {
3200
3284
  "key": "image",
@@ -3269,14 +3353,13 @@
3269
3353
  type: String
3270
3354
  },
3271
3355
  scrollThreshold: {
3272
- type: [String, Number]
3356
+ type: [String, Number],
3357
+ default: 300
3273
3358
  }
3274
3359
  }, 'scroll');
3275
3360
  function useScroll(props) {
3276
3361
  let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3277
3362
  const {
3278
- thresholdMetCallback,
3279
- scrollThreshold,
3280
3363
  canScroll
3281
3364
  } = args;
3282
3365
  let previousScroll = 0;
@@ -3286,8 +3369,16 @@
3286
3369
  const currentThreshold = vue.ref(0);
3287
3370
  const isScrollActive = vue.ref(false);
3288
3371
  const isScrollingUp = vue.ref(false);
3289
- const computedScrollThreshold = vue.computed(() => {
3290
- return Number(props.scrollThreshold ?? scrollThreshold ?? 300);
3372
+ const scrollThreshold = vue.computed(() => {
3373
+ return Number(props.scrollThreshold);
3374
+ });
3375
+
3376
+ /**
3377
+ * 1: at top
3378
+ * 0: at threshold
3379
+ */
3380
+ const scrollRatio = vue.computed(() => {
3381
+ return clamp((scrollThreshold.value - currentScroll.value) / scrollThreshold.value || 0);
3291
3382
  });
3292
3383
  const onScroll = () => {
3293
3384
  const targetEl = target.value;
@@ -3295,7 +3386,7 @@
3295
3386
  previousScroll = currentScroll.value;
3296
3387
  currentScroll.value = 'window' in targetEl ? targetEl.pageYOffset : targetEl.scrollTop;
3297
3388
  isScrollingUp.value = currentScroll.value < previousScroll;
3298
- currentThreshold.value = Math.abs(currentScroll.value - computedScrollThreshold.value);
3389
+ currentThreshold.value = Math.abs(currentScroll.value - scrollThreshold.value);
3299
3390
  };
3300
3391
  vue.watch(isScrollingUp, () => {
3301
3392
  savedScroll.value = savedScroll.value || currentScroll.value;
@@ -3307,7 +3398,7 @@
3307
3398
  vue.watch(() => props.scrollTarget, scrollTarget => {
3308
3399
  const newTarget = scrollTarget ? document.querySelector(scrollTarget) : window;
3309
3400
  if (!newTarget) {
3310
- consoleWarn(`Unable to locate element with identifier ${scrollTarget}`, vue.getCurrentInstance());
3401
+ consoleWarn(`Unable to locate element with identifier ${scrollTarget}`);
3311
3402
  return;
3312
3403
  }
3313
3404
  if (newTarget === target.value) return;
@@ -3323,15 +3414,6 @@
3323
3414
  vue.onBeforeUnmount(() => {
3324
3415
  target.value?.removeEventListener('scroll', onScroll);
3325
3416
  });
3326
- thresholdMetCallback && vue.watch(() => Math.abs(currentScroll.value - savedScroll.value) > computedScrollThreshold.value, thresholdMet => {
3327
- thresholdMet && thresholdMetCallback({
3328
- currentThreshold: currentThreshold.value,
3329
- isScrollingUp: isScrollingUp.value,
3330
- savedScroll
3331
- });
3332
- }, {
3333
- immediate: true
3334
- });
3335
3417
 
3336
3418
  // Do we need this? If yes - seems that
3337
3419
  // there's no need to expose onScroll
@@ -3339,10 +3421,11 @@
3339
3421
  immediate: true
3340
3422
  });
3341
3423
  return {
3342
- computedScrollThreshold,
3424
+ scrollThreshold,
3343
3425
  currentScroll,
3344
3426
  currentThreshold,
3345
3427
  isScrollActive,
3428
+ scrollRatio,
3346
3429
  // required only for testing
3347
3430
  // probably can be removed
3348
3431
  // later (2 chars chlng)
@@ -3425,15 +3508,14 @@
3425
3508
  });
3426
3509
  const {
3427
3510
  currentScroll,
3428
- currentThreshold,
3429
- computedScrollThreshold,
3430
- isScrollingUp
3511
+ scrollThreshold,
3512
+ isScrollingUp,
3513
+ scrollRatio
3431
3514
  } = useScroll(props, {
3432
3515
  canScroll
3433
3516
  });
3434
- const isCollapsed = vue.computed(() => props.collapse || scrollBehavior.value.collapse && (scrollBehavior.value.inverted ? currentScroll.value < 1 : currentScroll.value > 0));
3435
- const isFlat = vue.computed(() => props.flat || scrollBehavior.value.elevate && currentScroll.value === (scrollBehavior.value.inverted ? 1 : 0));
3436
- const scrollRatio = vue.computed(() => Math.min((currentThreshold.value - currentScroll.value) / currentThreshold.value || 1, 1));
3517
+ const isCollapsed = vue.computed(() => props.collapse || scrollBehavior.value.collapse && (scrollBehavior.value.inverted ? scrollRatio.value > 0 : scrollRatio.value === 0));
3518
+ const isFlat = vue.computed(() => props.flat || scrollBehavior.value.elevate && (scrollBehavior.value.inverted ? currentScroll.value > 0 : currentScroll.value === 0));
3437
3519
  const opacity = vue.computed(() => scrollBehavior.value.fadeImage ? scrollBehavior.value.inverted ? 1 - scrollRatio.value : scrollRatio.value : undefined);
3438
3520
  const height = vue.computed(() => {
3439
3521
  if (scrollBehavior.value.hide && scrollBehavior.value.inverted) return 0;
@@ -3442,15 +3524,12 @@
3442
3524
  return height + extensionHeight;
3443
3525
  });
3444
3526
  function setActive() {
3445
- const val = currentScroll.value;
3446
3527
  if (scrollBehavior.value.hide) {
3447
3528
  if (scrollBehavior.value.inverted) {
3448
- isActive.value = val > computedScrollThreshold.value;
3529
+ isActive.value = currentScroll.value > scrollThreshold.value;
3449
3530
  } else {
3450
- isActive.value = isScrollingUp.value || val < computedScrollThreshold.value;
3531
+ isActive.value = isScrollingUp.value || currentScroll.value < scrollThreshold.value;
3451
3532
  }
3452
- } else if (scrollBehavior.value.inverted) {
3453
- isActive.value = currentScroll.value === 0;
3454
3533
  } else {
3455
3534
  isActive.value = true;
3456
3535
  }
@@ -3479,13 +3558,13 @@
3479
3558
  "ref": vToolbarRef,
3480
3559
  "class": ['v-app-bar', {
3481
3560
  'v-app-bar--bottom': props.location === 'bottom'
3482
- }],
3483
- "style": {
3561
+ }, props.class],
3562
+ "style": [{
3484
3563
  ...layoutItemStyles.value,
3485
3564
  '--v-toolbar-image-opacity': opacity.value,
3486
3565
  height: undefined,
3487
3566
  ...ssrBootStyles.value
3488
- }
3567
+ }, props.style]
3489
3568
  }, toolbarProps, {
3490
3569
  "collapse": isCollapsed.value,
3491
3570
  "flat": isFlat.value
@@ -3572,6 +3651,7 @@
3572
3651
  const makeVBtnGroupProps = propsFactory({
3573
3652
  divided: Boolean,
3574
3653
  ...makeBorderProps(),
3654
+ ...makeComponentProps(),
3575
3655
  ...makeDensityProps(),
3576
3656
  ...makeElevationProps(),
3577
3657
  ...makeRoundedProps(),
@@ -3614,7 +3694,8 @@
3614
3694
  return vue.createVNode(props.tag, {
3615
3695
  "class": ['v-btn-group', {
3616
3696
  'v-btn-group--divided': props.divided
3617
- }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value]
3697
+ }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
3698
+ "style": props.style
3618
3699
  }, slots);
3619
3700
  });
3620
3701
  }
@@ -3847,8 +3928,10 @@
3847
3928
  useRender(() => {
3848
3929
  const [btnGroupProps] = VBtnGroup.filterProps(props);
3849
3930
  return vue.createVNode(VBtnGroup, vue.mergeProps({
3850
- "class": "v-btn-toggle"
3851
- }, btnGroupProps), {
3931
+ "class": ['v-btn-toggle', props.class]
3932
+ }, btnGroupProps, {
3933
+ "style": props.style
3934
+ }), {
3852
3935
  default: () => [slots.default?.({
3853
3936
  isSelected,
3854
3937
  next,
@@ -3919,7 +4002,7 @@
3919
4002
 
3920
4003
  // Types
3921
4004
 
3922
- const IconValue = [String, Function, Object];
4005
+ const IconValue = [String, Function, Object, Array];
3923
4006
  const IconSymbol = Symbol.for('vuetify:icons');
3924
4007
  const makeIconProps = propsFactory({
3925
4008
  icon: {
@@ -3939,8 +4022,9 @@
3939
4022
  slots
3940
4023
  } = _ref;
3941
4024
  return () => {
4025
+ const Icon = props.icon;
3942
4026
  return vue.createVNode(props.tag, null, {
3943
- default: () => [props.icon ? vue.createVNode(props.icon, null, null) : slots.default?.()]
4027
+ default: () => [props.icon ? vue.createVNode(Icon, null, null) : slots.default?.()]
3944
4028
  });
3945
4029
  };
3946
4030
  }
@@ -3963,7 +4047,12 @@
3963
4047
  "viewBox": "0 0 24 24",
3964
4048
  "role": "img",
3965
4049
  "aria-hidden": "true"
3966
- }, [vue.createVNode("path", {
4050
+ }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? vue.createVNode("path", {
4051
+ "d": path[0],
4052
+ "fill-opacity": path[1]
4053
+ }, null) : vue.createVNode("path", {
4054
+ "d": path
4055
+ }, null)) : vue.createVNode("path", {
3967
4056
  "d": props.icon
3968
4057
  }, null)])]
3969
4058
  });
@@ -4028,7 +4117,12 @@
4028
4117
  }
4029
4118
  }
4030
4119
  if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
4031
- if (typeof icon !== 'string') {
4120
+ if (Array.isArray(icon)) {
4121
+ return {
4122
+ component: VSvgIcon,
4123
+ icon
4124
+ };
4125
+ } else if (typeof icon !== 'string') {
4032
4126
  return {
4033
4127
  component: VComponentIcon,
4034
4128
  icon
@@ -4085,6 +4179,7 @@
4085
4179
  start: Boolean,
4086
4180
  end: Boolean,
4087
4181
  icon: IconValue,
4182
+ ...makeComponentProps(),
4088
4183
  ...makeSizeProps(),
4089
4184
  ...makeTagProps({
4090
4185
  tag: 'i'
@@ -4127,12 +4222,12 @@
4127
4222
  'v-icon--clickable': !!attrs.onClick,
4128
4223
  'v-icon--start': props.start,
4129
4224
  'v-icon--end': props.end
4130
- }],
4225
+ }, props.class],
4131
4226
  "style": [!sizeClasses.value ? {
4132
4227
  fontSize: convertToUnit(props.size),
4133
4228
  height: convertToUnit(props.size),
4134
4229
  width: convertToUnit(props.size)
4135
- } : undefined, textColorStyles.value],
4230
+ } : undefined, textColorStyles.value, props.style],
4136
4231
  "role": attrs.onClick ? 'button' : undefined,
4137
4232
  "aria-hidden": !attrs.onClick
4138
4233
  }, {
@@ -4190,6 +4285,7 @@
4190
4285
  type: [Number, String],
4191
4286
  default: 4
4192
4287
  },
4288
+ ...makeComponentProps(),
4193
4289
  ...makeSizeProps(),
4194
4290
  ...makeTagProps({
4195
4291
  tag: 'div'
@@ -4245,8 +4341,8 @@
4245
4341
  'v-progress-circular--indeterminate': !!props.indeterminate,
4246
4342
  'v-progress-circular--visible': isIntersecting.value,
4247
4343
  'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink'
4248
- }, themeClasses.value, sizeClasses.value, textColorClasses.value],
4249
- "style": [sizeStyles.value, textColorStyles.value],
4344
+ }, themeClasses.value, sizeClasses.value, textColorClasses.value, props.class],
4345
+ "style": [sizeStyles.value, textColorStyles.value, props.style],
4250
4346
  "role": "progressbar",
4251
4347
  "aria-valuemin": "0",
4252
4348
  "aria-valuemax": "100",
@@ -4665,6 +4761,7 @@
4665
4761
  stream: Boolean,
4666
4762
  striped: Boolean,
4667
4763
  roundedBar: Boolean,
4764
+ ...makeComponentProps(),
4668
4765
  ...makeLocationProps({
4669
4766
  location: 'top'
4670
4767
  }),
@@ -4736,14 +4833,14 @@
4736
4833
  'v-progress-linear--rounded': props.rounded,
4737
4834
  'v-progress-linear--rounded-bar': props.roundedBar,
4738
4835
  'v-progress-linear--striped': props.striped
4739
- }, roundedClasses.value, themeClasses.value],
4740
- "style": {
4836
+ }, roundedClasses.value, themeClasses.value, props.class],
4837
+ "style": [{
4741
4838
  bottom: props.location === 'bottom' ? 0 : undefined,
4742
4839
  top: props.location === 'top' ? 0 : undefined,
4743
4840
  height: props.active ? convertToUnit(height.value) : 0,
4744
4841
  '--v-progress-linear-height': convertToUnit(height.value),
4745
4842
  ...locationStyles.value
4746
- },
4843
+ }, props.style],
4747
4844
  "role": "progressbar",
4748
4845
  "aria-hidden": props.active ? 'false' : 'true',
4749
4846
  "aria-valuemin": "0",
@@ -4954,7 +5051,7 @@
4954
5051
  },
4955
5052
  text: String,
4956
5053
  ...makeBorderProps(),
4957
- ...makeRoundedProps(),
5054
+ ...makeComponentProps(),
4958
5055
  ...makeDensityProps(),
4959
5056
  ...makeDimensionProps(),
4960
5057
  ...makeElevationProps(),
@@ -4962,6 +5059,7 @@
4962
5059
  ...makeLoaderProps(),
4963
5060
  ...makeLocationProps(),
4964
5061
  ...makePositionProps(),
5062
+ ...makeRoundedProps(),
4965
5063
  ...makeRouterProps(),
4966
5064
  ...makeSizeProps(),
4967
5065
  ...makeTagProps({
@@ -4971,7 +5069,7 @@
4971
5069
  ...makeVariantProps({
4972
5070
  variant: 'elevated'
4973
5071
  })
4974
- }, 'VBtn');
5072
+ }, 'v-btn');
4975
5073
  const VBtn = genericComponent()({
4976
5074
  name: 'VBtn',
4977
5075
  directives: {
@@ -5041,6 +5139,11 @@
5041
5139
  if (props.value === undefined) return undefined;
5042
5140
  return Object(props.value) === props.value ? JSON.stringify(props.value, null, 0) : props.value;
5043
5141
  });
5142
+ function onClick(e) {
5143
+ if (isDisabled.value) return;
5144
+ link.navigate?.(e);
5145
+ group?.toggle();
5146
+ }
5044
5147
  useSelectLink(link, group?.select);
5045
5148
  useRender(() => {
5046
5149
  const Tag = link.isLink.value ? 'a' : props.tag;
@@ -5059,15 +5162,11 @@
5059
5162
  'v-btn--icon': !!props.icon,
5060
5163
  'v-btn--loading': props.loading,
5061
5164
  'v-btn--stacked': props.stacked
5062
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
5063
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value],
5165
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
5166
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value, props.style],
5064
5167
  "disabled": isDisabled.value || undefined,
5065
5168
  "href": link.href.value,
5066
- "onClick": e => {
5067
- if (isDisabled.value) return;
5068
- link.navigate?.(e);
5069
- group?.toggle();
5070
- },
5169
+ "onClick": onClick,
5071
5170
  "value": valueAttr.value
5072
5171
  }, {
5073
5172
  default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && vue.createVNode("span", {
@@ -5133,29 +5232,29 @@
5133
5232
 
5134
5233
  const VAppBarNavIcon = genericComponent()({
5135
5234
  name: 'VAppBarNavIcon',
5136
- props: {
5137
- icon: {
5138
- type: IconValue,
5139
- default: '$menu'
5140
- }
5141
- },
5235
+ props: makeVBtnProps({
5236
+ icon: '$menu',
5237
+ variant: 'text'
5238
+ }),
5142
5239
  setup(props, _ref) {
5143
5240
  let {
5144
5241
  slots
5145
5242
  } = _ref;
5146
- useRender(() => vue.createVNode(VBtn, {
5147
- "class": "v-app-bar-nav-icon",
5148
- "icon": props.icon
5149
- }, slots));
5243
+ useRender(() => vue.createVNode(VBtn, vue.mergeProps(props, {
5244
+ "class": ['v-app-bar-nav-icon']
5245
+ }), slots));
5150
5246
  return {};
5151
5247
  }
5152
5248
  });
5153
5249
 
5154
5250
  const VToolbarItems = genericComponent()({
5155
5251
  name: 'VToolbarItems',
5156
- props: makeVariantProps({
5157
- variant: 'text'
5158
- }),
5252
+ props: {
5253
+ ...makeComponentProps(),
5254
+ ...makeVariantProps({
5255
+ variant: 'text'
5256
+ })
5257
+ },
5159
5258
  setup(props, _ref) {
5160
5259
  let {
5161
5260
  slots
@@ -5168,7 +5267,8 @@
5168
5267
  }
5169
5268
  });
5170
5269
  useRender(() => vue.createVNode("div", {
5171
- "class": "v-toolbar-items"
5270
+ "class": ['v-toolbar-items', props.class],
5271
+ "style": props.style
5172
5272
  }, [slots.default?.()]));
5173
5273
  return {};
5174
5274
  }
@@ -5230,6 +5330,7 @@
5230
5330
  type: String,
5231
5331
  validator: val => allowedTypes.includes(val)
5232
5332
  },
5333
+ ...makeComponentProps(),
5233
5334
  ...makeDensityProps(),
5234
5335
  ...makeDimensionProps(),
5235
5336
  ...makeElevationProps(),
@@ -5312,8 +5413,8 @@
5312
5413
  [`v-alert--border-${props.border === true ? 'start' : props.border}`]: true
5313
5414
  }, {
5314
5415
  'v-alert--prominent': props.prominent
5315
- }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
5316
- "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
5416
+ }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
5417
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
5317
5418
  "role": "alert"
5318
5419
  }, {
5319
5420
  default: () => [genOverlays(false, 'v-alert'), props.border && vue.createVNode("div", {
@@ -5407,6 +5508,7 @@
5407
5508
  props: {
5408
5509
  text: String,
5409
5510
  clickable: Boolean,
5511
+ ...makeComponentProps(),
5410
5512
  ...makeThemeProps()
5411
5513
  },
5412
5514
  setup(props, _ref) {
@@ -5416,7 +5518,8 @@
5416
5518
  useRender(() => vue.createVNode("label", {
5417
5519
  "class": ['v-label', {
5418
5520
  'v-label--clickable': props.clickable
5419
- }]
5521
+ }, props.class],
5522
+ "style": props.style
5420
5523
  }, [props.text, slots.default?.()]));
5421
5524
  return {};
5422
5525
  }
@@ -5425,7 +5528,8 @@
5425
5528
  const VFieldLabel = genericComponent()({
5426
5529
  name: 'VFieldLabel',
5427
5530
  props: {
5428
- floating: Boolean
5531
+ floating: Boolean,
5532
+ ...makeComponentProps()
5429
5533
  },
5430
5534
  setup(props, _ref) {
5431
5535
  let {
@@ -5434,7 +5538,8 @@
5434
5538
  useRender(() => vue.createVNode(VLabel, {
5435
5539
  "class": ['v-field-label', {
5436
5540
  'v-field-label--floating': props.floating
5437
- }],
5541
+ }, props.class],
5542
+ "style": props.style,
5438
5543
  "aria-hidden": props.floating || undefined
5439
5544
  }, slots));
5440
5545
  return {};
@@ -5485,6 +5590,7 @@
5485
5590
  },
5486
5591
  active: Boolean,
5487
5592
  color: String,
5593
+ baseColor: String,
5488
5594
  dirty: Boolean,
5489
5595
  disabled: Boolean,
5490
5596
  error: Boolean,
@@ -5502,9 +5608,10 @@
5502
5608
  'onClick:clear': EventProp(),
5503
5609
  'onClick:appendInner': EventProp(),
5504
5610
  'onClick:prependInner': EventProp(),
5505
- ...makeThemeProps(),
5611
+ ...makeComponentProps(),
5506
5612
  ...makeLoaderProps(),
5507
- ...makeRoundedProps()
5613
+ ...makeRoundedProps(),
5614
+ ...makeThemeProps()
5508
5615
  }, 'v-field');
5509
5616
  const VField = genericComponent()({
5510
5617
  name: 'VField',
@@ -5558,7 +5665,7 @@
5558
5665
  textColorClasses,
5559
5666
  textColorStyles
5560
5667
  } = useTextColor(vue.computed(() => {
5561
- return isActive.value && isFocused.value && !props.error && !props.disabled ? props.color : undefined;
5668
+ return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : props.baseColor;
5562
5669
  }));
5563
5670
  vue.watch(isActive, val => {
5564
5671
  if (hasLabel.value) {
@@ -5635,8 +5742,8 @@
5635
5742
  'v-field--single-line': props.singleLine,
5636
5743
  'v-field--no-label': !label,
5637
5744
  [`v-field--variant-${props.variant}`]: true
5638
- }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value],
5639
- "style": [backgroundColorStyles.value, textColorStyles.value],
5745
+ }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, props.class],
5746
+ "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
5640
5747
  "onClick": onClick
5641
5748
  }, attrs), [vue.createVNode("div", {
5642
5749
  "class": "v-field__overlay"
@@ -5724,7 +5831,7 @@
5724
5831
  });
5725
5832
  // TODO: this is kinda slow, might be better to implicitly inherit props instead
5726
5833
  function filterFieldProps(attrs) {
5727
- const keys = Object.keys(VField.props).filter(k => !isOn(k));
5834
+ const keys = Object.keys(VField.props).filter(k => !isOn(k) && k !== 'class' && k !== 'style');
5728
5835
  return pick(attrs, keys);
5729
5836
  }
5730
5837
 
@@ -5739,6 +5846,7 @@
5739
5846
  type: [Array, String],
5740
5847
  default: () => []
5741
5848
  },
5849
+ ...makeComponentProps(),
5742
5850
  ...makeTransitionProps({
5743
5851
  transition: {
5744
5852
  component: VSlideYTransition,
@@ -5759,8 +5867,8 @@
5759
5867
  useRender(() => vue.createVNode(MaybeTransition, {
5760
5868
  "transition": props.transition,
5761
5869
  "tag": "div",
5762
- "class": ['v-messages', textColorClasses.value],
5763
- "style": textColorStyles.value,
5870
+ "class": ['v-messages', textColorClasses.value, props.class],
5871
+ "style": [textColorStyles.value, props.style],
5764
5872
  "role": "alert",
5765
5873
  "aria-live": "polite"
5766
5874
  }, {
@@ -6056,6 +6164,7 @@
6056
6164
  },
6057
6165
  'onClick:prepend': EventProp(),
6058
6166
  'onClick:append': EventProp(),
6167
+ ...makeComponentProps(),
6059
6168
  ...makeDensityProps(),
6060
6169
  ...makeValidationProps()
6061
6170
  }, 'v-input');
@@ -6123,7 +6232,8 @@
6123
6232
  const hasMessages = messages.value.length > 0;
6124
6233
  const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details);
6125
6234
  return vue.createVNode("div", {
6126
- "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value]
6235
+ "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value, props.class],
6236
+ "style": props.style
6127
6237
  }, [hasPrepend && vue.createVNode("div", {
6128
6238
  "key": "prepend",
6129
6239
  "class": "v-input__prepend"
@@ -6166,6 +6276,7 @@
6166
6276
  type: [Number, String],
6167
6277
  default: 0
6168
6278
  },
6279
+ ...makeComponentProps(),
6169
6280
  ...makeTransitionProps({
6170
6281
  transition: {
6171
6282
  component: VSlideYTransition
@@ -6183,7 +6294,8 @@
6183
6294
  "transition": props.transition
6184
6295
  }, {
6185
6296
  default: () => [vue.withDirectives(vue.createVNode("div", {
6186
- "class": "v-counter"
6297
+ "class": ['v-counter', props.class],
6298
+ "style": props.style
6187
6299
  }, [slots.default ? slots.default({
6188
6300
  counter: counter.value,
6189
6301
  max: props.max,
@@ -6333,7 +6445,7 @@
6333
6445
  const vInputRef = vue.ref();
6334
6446
  const vFieldRef = vue.ref();
6335
6447
  const inputRef = vue.ref();
6336
- const isActive = vue.computed(() => activeTypes.includes(props.type) || props.persistentPlaceholder || isFocused.value);
6448
+ const isActive = vue.computed(() => activeTypes.includes(props.type) || props.persistentPlaceholder || isFocused.value || props.active);
6337
6449
  function onFocus() {
6338
6450
  if (inputRef.value !== document.activeElement) {
6339
6451
  inputRef.value?.focus();
@@ -6386,7 +6498,8 @@
6386
6498
  'v-text-field--prefixed': props.prefix,
6387
6499
  'v-text-field--suffixed': props.suffix,
6388
6500
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
6389
- }]
6501
+ }, props.class],
6502
+ "style": props.style
6390
6503
  }, rootAttrs, inputProps, {
6391
6504
  "focused": isFocused.value
6392
6505
  }), {
@@ -6502,6 +6615,7 @@
6502
6615
  type: String,
6503
6616
  default: 'VSelectionControl'
6504
6617
  },
6618
+ ...makeComponentProps(),
6505
6619
  ...makeSelectionControlGroupProps()
6506
6620
  },
6507
6621
  emits: {
@@ -6549,7 +6663,8 @@
6549
6663
  useRender(() => vue.createVNode("div", {
6550
6664
  "class": ['v-selection-control-group', {
6551
6665
  'v-selection-control-group--inline': props.inline
6552
- }],
6666
+ }, props.class],
6667
+ "style": props.style,
6553
6668
  "role": props.type === 'radio' ? 'radiogroup' : undefined
6554
6669
  }, [slots.default?.()]));
6555
6670
  return {};
@@ -6563,6 +6678,7 @@
6563
6678
  trueValue: null,
6564
6679
  falseValue: null,
6565
6680
  value: null,
6681
+ ...makeComponentProps(),
6566
6682
  ...makeSelectionControlGroupProps()
6567
6683
  }, 'v-selection-control');
6568
6684
  function useSelectionControl(props) {
@@ -6677,8 +6793,10 @@
6677
6793
  'v-selection-control--focused': isFocused.value,
6678
6794
  'v-selection-control--focus-visible': isFocusVisible.value,
6679
6795
  'v-selection-control--inline': props.inline
6680
- }, densityClasses.value]
6681
- }, rootAttrs), [vue.createVNode("div", {
6796
+ }, densityClasses.value, props.class]
6797
+ }, rootAttrs, {
6798
+ "style": props.style
6799
+ }), [vue.createVNode("div", {
6682
6800
  "class": ['v-selection-control__wrapper', textColorClasses.value],
6683
6801
  "style": textColorStyles.value
6684
6802
  }, [slots.default?.(), vue.withDirectives(vue.createVNode("div", {
@@ -6760,9 +6878,9 @@
6760
6878
  useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
6761
6879
  "modelValue": model.value,
6762
6880
  "onUpdate:modelValue": [$event => model.value = $event, onChange],
6763
- "class": "v-checkbox-btn",
6881
+ "class": ['v-checkbox-btn', props.class],
6882
+ "style": props.style,
6764
6883
  "type": "checkbox",
6765
- "inline": true,
6766
6884
  "falseIcon": falseIcon.value,
6767
6885
  "trueIcon": trueIcon.value,
6768
6886
  "aria-checked": props.indeterminate ? 'mixed' : undefined
@@ -6800,10 +6918,11 @@
6800
6918
  const [inputProps, _1] = VInput.filterProps(props);
6801
6919
  const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6802
6920
  return vue.createVNode(VInput, vue.mergeProps({
6803
- "class": "v-checkbox"
6921
+ "class": ['v-checkbox', props.class]
6804
6922
  }, inputAttrs, inputProps, {
6805
6923
  "id": id.value,
6806
- "focused": isFocused.value
6924
+ "focused": isFocused.value,
6925
+ "style": props.style
6807
6926
  }), {
6808
6927
  ...slots,
6809
6928
  default: _ref2 => {
@@ -6834,6 +6953,7 @@
6834
6953
  end: Boolean,
6835
6954
  icon: IconValue,
6836
6955
  image: String,
6956
+ ...makeComponentProps(),
6837
6957
  ...makeDensityProps(),
6838
6958
  ...makeRoundedProps(),
6839
6959
  ...makeSizeProps(),
@@ -6872,8 +6992,8 @@
6872
6992
  "class": ['v-avatar', {
6873
6993
  'v-avatar--start': props.start,
6874
6994
  'v-avatar--end': props.end
6875
- }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value],
6876
- "style": [colorStyles.value, sizeStyles.value]
6995
+ }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6996
+ "style": [colorStyles.value, sizeStyles.value, props.style]
6877
6997
  }, {
6878
6998
  default: () => [props.image ? vue.createVNode(VImg, {
6879
6999
  "key": "image",
@@ -6901,6 +7021,7 @@
6901
7021
  type: Function,
6902
7022
  default: deepEqual
6903
7023
  },
7024
+ ...makeComponentProps(),
6904
7025
  ...makeGroupProps({
6905
7026
  selectedClass: 'v-chip--selected'
6906
7027
  }),
@@ -6938,7 +7059,8 @@
6938
7059
  useRender(() => vue.createVNode(props.tag, {
6939
7060
  "class": ['v-chip-group', {
6940
7061
  'v-chip-group--column': props.column
6941
- }, themeClasses.value]
7062
+ }, themeClasses.value, props.class],
7063
+ "style": props.style
6942
7064
  }, {
6943
7065
  default: () => [slots.default?.({
6944
7066
  isSelected,
@@ -6952,8 +7074,6 @@
6952
7074
  }
6953
7075
  });
6954
7076
 
6955
- // Types
6956
-
6957
7077
  const VChip = genericComponent()({
6958
7078
  name: 'VChip',
6959
7079
  directives: {
@@ -6998,6 +7118,7 @@
6998
7118
  onClick: EventProp(),
6999
7119
  onClickOnce: EventProp(),
7000
7120
  ...makeBorderProps(),
7121
+ ...makeComponentProps(),
7001
7122
  ...makeDensityProps(),
7002
7123
  ...makeElevationProps(),
7003
7124
  ...makeGroupItemProps(),
@@ -7090,8 +7211,8 @@
7090
7211
  'v-chip--link': isClickable.value,
7091
7212
  'v-chip--filter': hasFilter,
7092
7213
  'v-chip--pill': props.pill
7093
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value],
7094
- "style": [hasColor ? colorStyles.value : undefined],
7214
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value, props.class],
7215
+ "style": [hasColor ? colorStyles.value : undefined, props.style],
7095
7216
  "disabled": props.disabled || undefined,
7096
7217
  "draggable": props.draggable,
7097
7218
  "href": link.href.value,
@@ -7200,6 +7321,7 @@
7200
7321
  length: [Number, String],
7201
7322
  thickness: [Number, String],
7202
7323
  vertical: Boolean,
7324
+ ...makeComponentProps(),
7203
7325
  ...makeThemeProps()
7204
7326
  },
7205
7327
  setup(props, _ref) {
@@ -7228,8 +7350,8 @@
7228
7350
  'v-divider': true,
7229
7351
  'v-divider--inset': props.inset,
7230
7352
  'v-divider--vertical': props.vertical
7231
- }, themeClasses.value, textColorClasses.value],
7232
- "style": [dividerStyles.value, textColorStyles.value],
7353
+ }, themeClasses.value, textColorClasses.value, props.class],
7354
+ "style": [dividerStyles.value, textColorStyles.value, props.style],
7233
7355
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
7234
7356
  "role": `${attrs.role || 'separator'}`
7235
7357
  }, null));
@@ -7713,7 +7835,9 @@
7713
7835
  }
7714
7836
  });
7715
7837
  const makeVListGroupProps = propsFactory({
7838
+ /* @deprecated */
7716
7839
  activeColor: String,
7840
+ baseColor: String,
7717
7841
  color: String,
7718
7842
  collapseIcon: {
7719
7843
  type: IconValue,
@@ -7728,6 +7852,7 @@
7728
7852
  fluid: Boolean,
7729
7853
  subgroup: Boolean,
7730
7854
  value: null,
7855
+ ...makeComponentProps(),
7731
7856
  ...makeTagProps()
7732
7857
  }, 'v-list-group');
7733
7858
  const VListGroup = genericComponent()({
@@ -7763,6 +7888,7 @@
7763
7888
  VListItem: {
7764
7889
  active: isOpen.value,
7765
7890
  activeColor: props.activeColor,
7891
+ baseColor: props.baseColor,
7766
7892
  color: props.color,
7767
7893
  prependIcon: props.prependIcon || props.subgroup && toggleIcon.value,
7768
7894
  appendIcon: props.appendIcon || !props.subgroup && toggleIcon.value,
@@ -7776,7 +7902,8 @@
7776
7902
  'v-list-group--fluid': props.fluid,
7777
7903
  'v-list-group--subgroup': props.subgroup,
7778
7904
  'v-list-group--open': isOpen.value
7779
- }]
7905
+ }, props.class],
7906
+ "style": props.style
7780
7907
  }, {
7781
7908
  default: () => [slots.activator && vue.createVNode(VDefaultsProvider, {
7782
7909
  "defaults": activatorDefaults.value
@@ -7821,9 +7948,11 @@
7821
7948
  default: undefined
7822
7949
  },
7823
7950
  activeClass: String,
7951
+ /* @deprecated */
7824
7952
  activeColor: String,
7825
7953
  appendAvatar: String,
7826
7954
  appendIcon: IconValue,
7955
+ baseColor: String,
7827
7956
  disabled: Boolean,
7828
7957
  lines: String,
7829
7958
  link: {
@@ -7843,6 +7972,7 @@
7843
7972
  onClick: EventProp(),
7844
7973
  onClickOnce: EventProp(),
7845
7974
  ...makeBorderProps(),
7975
+ ...makeComponentProps(),
7846
7976
  ...makeDensityProps(),
7847
7977
  ...makeDimensionProps(),
7848
7978
  ...makeElevationProps(),
@@ -7879,8 +8009,9 @@
7879
8009
  const isLink = vue.computed(() => props.link !== false && link.isLink.value);
7880
8010
  const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || props.value != null && !!list));
7881
8011
  const roundedProps = vue.computed(() => props.rounded || props.nav);
8012
+ const color = vue.computed(() => props.color ?? props.activeColor);
7882
8013
  const variantProps = vue.computed(() => ({
7883
- color: isActive.value ? props.activeColor ?? props.color : props.color,
8014
+ color: isActive.value ? color.value ?? props.baseColor : props.baseColor,
7884
8015
  variant: props.variant
7885
8016
  }));
7886
8017
  vue.watch(() => link.isActive?.value, val => {
@@ -7937,7 +8068,6 @@
7937
8068
  }
7938
8069
  useRender(() => {
7939
8070
  const Tag = isLink.value ? 'a' : props.tag;
7940
- const hasColor = !list || isSelected.value || isActive.value;
7941
8071
  const hasTitle = slots.title || props.title;
7942
8072
  const hasSubtitle = slots.subtitle || props.subtitle;
7943
8073
  const hasAppendMedia = !!(props.appendAvatar || props.appendIcon);
@@ -7945,6 +8075,9 @@
7945
8075
  const hasPrependMedia = !!(props.prependAvatar || props.prependIcon);
7946
8076
  const hasPrepend = !!(hasPrependMedia || slots.prepend);
7947
8077
  list?.updateHasPrepend(hasPrepend);
8078
+ if (props.activeColor) {
8079
+ deprecate('active-color', ['color', 'base-color']);
8080
+ }
7948
8081
  return vue.withDirectives(vue.createVNode(Tag, {
7949
8082
  "class": ['v-list-item', {
7950
8083
  'v-list-item--active': isActive.value,
@@ -7953,8 +8086,8 @@
7953
8086
  'v-list-item--nav': props.nav,
7954
8087
  'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,
7955
8088
  [`${props.activeClass}`]: props.activeClass && isActive.value
7956
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value],
7957
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value],
8089
+ }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
8090
+ "style": [colorStyles.value, dimensionStyles.value, props.style],
7958
8091
  "href": link.href.value,
7959
8092
  "tabindex": isClickable.value ? 0 : undefined,
7960
8093
  "onClick": onClick,
@@ -8047,6 +8180,7 @@
8047
8180
  inset: Boolean,
8048
8181
  sticky: Boolean,
8049
8182
  title: String,
8183
+ ...makeComponentProps(),
8050
8184
  ...makeTagProps()
8051
8185
  },
8052
8186
  setup(props, _ref) {
@@ -8063,10 +8197,10 @@
8063
8197
  "class": ['v-list-subheader', {
8064
8198
  'v-list-subheader--inset': props.inset,
8065
8199
  'v-list-subheader--sticky': props.sticky
8066
- }, textColorClasses.value],
8067
- "style": {
8200
+ }, textColorClasses.value, props.class],
8201
+ "style": [{
8068
8202
  textColorStyles
8069
- }
8203
+ }, props.style]
8070
8204
  }, {
8071
8205
  default: () => [hasText && vue.createVNode("div", {
8072
8206
  "class": "v-list-subheader__text"
@@ -8272,6 +8406,8 @@
8272
8406
  const VList = genericComponent()({
8273
8407
  name: 'VList',
8274
8408
  props: {
8409
+ baseColor: String,
8410
+ /* @deprecated */
8275
8411
  activeColor: String,
8276
8412
  activeClass: String,
8277
8413
  bgColor: String,
@@ -8286,6 +8422,7 @@
8286
8422
  openStrategy: 'list'
8287
8423
  }),
8288
8424
  ...makeBorderProps(),
8425
+ ...makeComponentProps(),
8289
8426
  ...makeDensityProps(),
8290
8427
  ...makeDimensionProps(),
8291
8428
  ...makeElevationProps(),
@@ -8342,16 +8479,19 @@
8342
8479
  } = useNested(props);
8343
8480
  const lineClasses = vue.computed(() => props.lines ? `v-list--${props.lines}-line` : undefined);
8344
8481
  const activeColor = vue.toRef(props, 'activeColor');
8482
+ const baseColor = vue.toRef(props, 'baseColor');
8345
8483
  const color = vue.toRef(props, 'color');
8346
8484
  createList();
8347
8485
  provideDefaults({
8348
8486
  VListGroup: {
8349
8487
  activeColor,
8488
+ baseColor,
8350
8489
  color
8351
8490
  },
8352
8491
  VListItem: {
8353
8492
  activeClass: vue.toRef(props, 'activeClass'),
8354
8493
  activeColor,
8494
+ baseColor,
8355
8495
  color,
8356
8496
  density: vue.toRef(props, 'density'),
8357
8497
  disabled: vue.toRef(props, 'disabled'),
@@ -8387,27 +8527,8 @@
8387
8527
  e.preventDefault();
8388
8528
  }
8389
8529
  function focus(location) {
8390
- if (!contentRef.value) return;
8391
- const targets = ['button', '[href]', 'input', 'select', 'textarea', '[tabindex]'].map(s => `${s}:not([tabindex="-1"])`).join(', ');
8392
- const focusable = [...contentRef.value.querySelectorAll(targets)].filter(el => !el.hasAttribute('disabled'));
8393
- const idx = focusable.indexOf(document.activeElement);
8394
- if (!location) {
8395
- if (!contentRef.value.contains(document.activeElement)) {
8396
- focusable[0]?.focus();
8397
- }
8398
- } else if (location === 'first') {
8399
- focusable[0]?.focus();
8400
- } else if (location === 'last') {
8401
- focusable.at(-1)?.focus();
8402
- } else {
8403
- let el;
8404
- let idxx = idx;
8405
- const inc = location === 'next' ? 1 : -1;
8406
- do {
8407
- idxx += inc;
8408
- el = focusable[idxx];
8409
- } while ((!el || el.offsetParent == null) && idxx < focusable.length && idxx >= 0);
8410
- if (el) el.focus();else focus(location === 'next' ? 'first' : 'last');
8530
+ if (contentRef.value) {
8531
+ return focusChild(contentRef.value, location);
8411
8532
  }
8412
8533
  }
8413
8534
  useRender(() => {
@@ -8416,8 +8537,8 @@
8416
8537
  "class": ['v-list', {
8417
8538
  'v-list--disabled': props.disabled,
8418
8539
  'v-list--nav': props.nav
8419
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value],
8420
- "style": [backgroundColorStyles.value, dimensionStyles.value],
8540
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class],
8541
+ "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
8421
8542
  "role": "listbox",
8422
8543
  "aria-activedescendant": undefined,
8423
8544
  "onFocusin": onFocusin,
@@ -8445,6 +8566,7 @@
8445
8566
  props: {
8446
8567
  start: Boolean,
8447
8568
  end: Boolean,
8569
+ ...makeComponentProps(),
8448
8570
  ...makeTagProps()
8449
8571
  },
8450
8572
  setup(props, _ref) {
@@ -8455,7 +8577,8 @@
8455
8577
  "class": ['v-list-item-action', {
8456
8578
  'v-list-item-action--start': props.start,
8457
8579
  'v-list-item-action--end': props.end
8458
- }]
8580
+ }, props.class],
8581
+ "style": props.style
8459
8582
  }, slots));
8460
8583
  return {};
8461
8584
  }
@@ -8466,6 +8589,7 @@
8466
8589
  props: {
8467
8590
  start: Boolean,
8468
8591
  end: Boolean,
8592
+ ...makeComponentProps(),
8469
8593
  ...makeTagProps()
8470
8594
  },
8471
8595
  setup(props, _ref) {
@@ -8477,7 +8601,8 @@
8477
8601
  "class": ['v-list-item-media', {
8478
8602
  'v-list-item-media--start': props.start,
8479
8603
  'v-list-item-media--end': props.end
8480
- }]
8604
+ }, props.class],
8605
+ "style": props.style
8481
8606
  }, slots);
8482
8607
  });
8483
8608
  return {};
@@ -9387,14 +9512,14 @@
9387
9512
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultDisplayOptions;
9388
9513
  return mergeDeep(defaultDisplayOptions, options);
9389
9514
  };
9390
- function getClientWidth(isHydrate) {
9391
- return IN_BROWSER && !isHydrate ? window.innerWidth : 0;
9515
+ function getClientWidth(ssr) {
9516
+ return IN_BROWSER && !ssr ? window.innerWidth : typeof ssr === 'object' && ssr.clientWidth || 0;
9392
9517
  }
9393
- function getClientHeight(isHydrate) {
9394
- return IN_BROWSER && !isHydrate ? window.innerHeight : 0;
9518
+ function getClientHeight(ssr) {
9519
+ return IN_BROWSER && !ssr ? window.innerHeight : typeof ssr === 'object' && ssr.clientHeight || 0;
9395
9520
  }
9396
- function getPlatform(isHydrate) {
9397
- const userAgent = IN_BROWSER && !isHydrate ? window.navigator.userAgent : 'ssr';
9521
+ function getPlatform(ssr) {
9522
+ const userAgent = IN_BROWSER && !ssr ? window.navigator.userAgent : 'ssr';
9398
9523
  function match(regexp) {
9399
9524
  return Boolean(userAgent.match(regexp));
9400
9525
  }
@@ -9718,6 +9843,7 @@
9718
9843
  default: 2000
9719
9844
  },
9720
9845
  ...makeActivatorProps(),
9846
+ ...makeComponentProps(),
9721
9847
  ...makeDimensionProps(),
9722
9848
  ...makeLazyProps(),
9723
9849
  ...makeLocationStrategyProps(),
@@ -9885,10 +10011,10 @@
9885
10011
  'v-overlay--absolute': props.absolute || props.contained,
9886
10012
  'v-overlay--active': isActive.value,
9887
10013
  'v-overlay--contained': props.contained
9888
- }, themeClasses.value, rtlClasses.value],
10014
+ }, themeClasses.value, rtlClasses.value, props.class],
9889
10015
  "style": [stackStyles.value, {
9890
10016
  top: convertToUnit(top.value)
9891
- }],
10017
+ }, props.style],
9892
10018
  "ref": root
9893
10019
  }, scopeId, attrs), [vue.createVNode(Scrim, vue.mergeProps({
9894
10020
  "color": scrimColor,
@@ -9994,7 +10120,8 @@
9994
10120
  const [overlayProps] = VOverlay.filterProps(props);
9995
10121
  return vue.createVNode(VOverlay, vue.mergeProps({
9996
10122
  "ref": overlay,
9997
- "class": ['v-menu']
10123
+ "class": ['v-menu', props.class],
10124
+ "style": props.style
9998
10125
  }, overlayProps, {
9999
10126
  "modelValue": isActive.value,
10000
10127
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -10213,7 +10340,8 @@
10213
10340
  'v-select--chips': !!props.chips,
10214
10341
  [`v-select--${props.multiple ? 'multiple' : 'single'}`]: true,
10215
10342
  'v-select--selected': model.value.length
10216
- }],
10343
+ }, props.class],
10344
+ "style": props.style,
10217
10345
  "appendInnerIcon": props.menuIcon,
10218
10346
  "readonly": true,
10219
10347
  "placeholder": placeholder,
@@ -10264,11 +10392,13 @@
10264
10392
  let {
10265
10393
  isSelected
10266
10394
  } = _ref2;
10267
- return props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
10395
+ return vue.createVNode(vue.Fragment, null, [props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
10268
10396
  "modelValue": isSelected,
10269
10397
  "ripple": false,
10270
10398
  "tabindex": "-1"
10271
- }, null) : undefined;
10399
+ }, null) : undefined, item.props.prependIcon && vue.createVNode(VIcon, {
10400
+ "icon": item.props.prependIcon
10401
+ }, null)]);
10272
10402
  }
10273
10403
  });
10274
10404
  }), slots['append-item']?.()]
@@ -10281,6 +10411,10 @@
10281
10411
  }
10282
10412
  const slotProps = {
10283
10413
  'onClick:close': onChipClose,
10414
+ onMousedown(e) {
10415
+ e.preventDefault();
10416
+ e.stopPropagation();
10417
+ },
10284
10418
  modelValue: true,
10285
10419
  'onUpdate:modelValue': undefined
10286
10420
  };
@@ -10656,7 +10790,8 @@
10656
10790
  'v-autocomplete--selecting-index': selectionIndex.value > -1,
10657
10791
  [`v-autocomplete--${props.multiple ? 'multiple' : 'single'}`]: true,
10658
10792
  'v-autocomplete--selection-slot': !!slots.selection
10659
- }],
10793
+ }, props.class],
10794
+ "style": props.style,
10660
10795
  "appendInnerIcon": props.menuIcon,
10661
10796
  "readonly": props.readonly,
10662
10797
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -10702,11 +10837,13 @@
10702
10837
  let {
10703
10838
  isSelected
10704
10839
  } = _ref2;
10705
- return props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
10840
+ return vue.createVNode(vue.Fragment, null, [props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
10706
10841
  "modelValue": isSelected,
10707
10842
  "ripple": false,
10708
10843
  "tabindex": "-1"
10709
- }, null) : undefined;
10844
+ }, null) : undefined, item.props.prependIcon && vue.createVNode(VIcon, {
10845
+ "icon": item.props.prependIcon
10846
+ }, null)]);
10710
10847
  },
10711
10848
  title: () => {
10712
10849
  return isPristine.value ? item.title : highlightResult$1(item.title, getMatches(item)?.title, search.value?.length ?? 0);
@@ -10721,6 +10858,10 @@
10721
10858
  }
10722
10859
  const slotProps = {
10723
10860
  'onClick:close': onChipClose,
10861
+ onMousedown(e) {
10862
+ e.preventDefault();
10863
+ e.stopPropagation();
10864
+ },
10724
10865
  modelValue: true,
10725
10866
  'onUpdate:modelValue': undefined
10726
10867
  };
@@ -10770,8 +10911,6 @@
10770
10911
  }
10771
10912
  });
10772
10913
 
10773
- // Types
10774
-
10775
10914
  const VBadge = genericComponent()({
10776
10915
  name: 'VBadge',
10777
10916
  inheritAttrs: false,
@@ -10795,6 +10934,7 @@
10795
10934
  offsetX: [Number, String],
10796
10935
  offsetY: [Number, String],
10797
10936
  textColor: String,
10937
+ ...makeComponentProps(),
10798
10938
  ...makeLocationProps({
10799
10939
  location: 'top end'
10800
10940
  }),
@@ -10839,8 +10979,10 @@
10839
10979
  'v-badge--dot': props.dot,
10840
10980
  'v-badge--floating': props.floating,
10841
10981
  'v-badge--inline': props.inline
10842
- }]
10843
- }, attrs), {
10982
+ }, props.class]
10983
+ }, attrs, {
10984
+ "style": props.style
10985
+ }), {
10844
10986
  default: () => [vue.createVNode("div", {
10845
10987
  "class": "v-badge__wrapper"
10846
10988
  }, [ctx.slots.default?.(), vue.createVNode(MaybeTransition, {
@@ -10867,7 +11009,8 @@
10867
11009
  name: 'VBannerActions',
10868
11010
  props: {
10869
11011
  color: String,
10870
- density: String
11012
+ density: String,
11013
+ ...makeComponentProps()
10871
11014
  },
10872
11015
  setup(props, _ref) {
10873
11016
  let {
@@ -10881,7 +11024,8 @@
10881
11024
  }
10882
11025
  });
10883
11026
  useRender(() => vue.createVNode("div", {
10884
- "class": "v-banner-actions"
11027
+ "class": ['v-banner-actions', props.class],
11028
+ "style": props.style
10885
11029
  }, [slots.default?.()]));
10886
11030
  return {};
10887
11031
  }
@@ -10902,6 +11046,7 @@
10902
11046
  sticky: Boolean,
10903
11047
  text: String,
10904
11048
  ...makeBorderProps(),
11049
+ ...makeComponentProps(),
10905
11050
  ...makeDensityProps(),
10906
11051
  ...makeDimensionProps(),
10907
11052
  ...makeElevationProps(),
@@ -10959,8 +11104,8 @@
10959
11104
  'v-banner--stacked': props.stacked || mobile.value,
10960
11105
  'v-banner--sticky': props.sticky,
10961
11106
  [`v-banner--${props.lines}-line`]: !!props.lines
10962
- }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value],
10963
- "style": [dimensionStyles.value, locationStyles.value],
11107
+ }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11108
+ "style": [dimensionStyles.value, locationStyles.value, props.style],
10964
11109
  "role": "banner"
10965
11110
  }, {
10966
11111
  default: () => [hasPrepend && vue.createVNode("div", {
@@ -11016,6 +11161,7 @@
11016
11161
  default: true
11017
11162
  },
11018
11163
  ...makeBorderProps(),
11164
+ ...makeComponentProps(),
11019
11165
  ...makeDensityProps(),
11020
11166
  ...makeElevationProps(),
11021
11167
  ...makeRoundedProps(),
@@ -11090,11 +11236,11 @@
11090
11236
  'v-bottom-navigation--active': isActive.value,
11091
11237
  'v-bottom-navigation--grow': props.grow,
11092
11238
  'v-bottom-navigation--shift': props.mode === 'shift'
11093
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value],
11239
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
11094
11240
  "style": [backgroundColorStyles.value, layoutItemStyles.value, {
11095
11241
  height: convertToUnit(height.value),
11096
11242
  transform: `translateY(${convertToUnit(!isActive.value ? 100 : 0, '%')})`
11097
- }, ssrBootStyles.value]
11243
+ }, ssrBootStyles.value, props.style]
11098
11244
  }, {
11099
11245
  default: () => [slots.default && vue.createVNode("div", {
11100
11246
  "class": "v-bottom-navigation__content"
@@ -11108,14 +11254,16 @@
11108
11254
  const VBreadcrumbsDivider = genericComponent()({
11109
11255
  name: 'VBreadcrumbsDivider',
11110
11256
  props: {
11111
- divider: [Number, String]
11257
+ divider: [Number, String],
11258
+ ...makeComponentProps()
11112
11259
  },
11113
11260
  setup(props, _ref) {
11114
11261
  let {
11115
11262
  slots
11116
11263
  } = _ref;
11117
11264
  useRender(() => vue.createVNode("li", {
11118
- "class": "v-breadcrumbs-divider"
11265
+ "class": ['v-breadcrumbs-divider', props.class],
11266
+ "style": props.style
11119
11267
  }, [slots?.default?.() ?? props.divider]));
11120
11268
  return {};
11121
11269
  }
@@ -11130,6 +11278,7 @@
11130
11278
  color: String,
11131
11279
  disabled: Boolean,
11132
11280
  title: String,
11281
+ ...makeComponentProps(),
11133
11282
  ...makeRouterProps(),
11134
11283
  ...makeTagProps({
11135
11284
  tag: 'li'
@@ -11155,8 +11304,8 @@
11155
11304
  'v-breadcrumbs-item--disabled': props.disabled,
11156
11305
  'v-breadcrumbs-item--link': link.isLink.value,
11157
11306
  [`${props.activeClass}`]: isActive.value && props.activeClass
11158
- }, textColorClasses.value],
11159
- "style": [textColorStyles.value],
11307
+ }, textColorClasses.value, props.class],
11308
+ "style": [textColorStyles.value, props.style],
11160
11309
  "href": link.href.value,
11161
11310
  "aria-current": isActive.value ? 'page' : undefined,
11162
11311
  "onClick": link.navigate
@@ -11187,6 +11336,7 @@
11187
11336
  type: Array,
11188
11337
  default: () => []
11189
11338
  },
11339
+ ...makeComponentProps(),
11190
11340
  ...makeDensityProps(),
11191
11341
  ...makeRoundedProps(),
11192
11342
  ...makeTagProps({
@@ -11218,11 +11368,22 @@
11218
11368
  disabled: vue.toRef(props, 'disabled')
11219
11369
  }
11220
11370
  });
11371
+ const items = vue.computed(() => props.items.map(item => {
11372
+ return typeof item === 'string' ? {
11373
+ item: {
11374
+ title: item
11375
+ },
11376
+ raw: item
11377
+ } : {
11378
+ item,
11379
+ raw: item
11380
+ };
11381
+ }));
11221
11382
  useRender(() => {
11222
11383
  const hasPrepend = !!(slots.prepend || props.icon);
11223
11384
  return vue.createVNode(props.tag, {
11224
- "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
11225
- "style": backgroundColorStyles.value
11385
+ "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value, props.class],
11386
+ "style": [backgroundColorStyles.value, props.style]
11226
11387
  }, {
11227
11388
  default: () => [hasPrepend && vue.createVNode("div", {
11228
11389
  "key": "prepend",
@@ -11240,33 +11401,36 @@
11240
11401
  start: true
11241
11402
  }
11242
11403
  }
11243
- }, slots.prepend)]), props.items.map((item, index, array) => vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
11244
- "key": index,
11245
- "disabled": index >= array.length - 1
11246
- }, typeof item === 'string' ? {
11247
- title: item
11248
- } : item), {
11249
- default: slots.title ? () => slots.title?.({
11250
- item,
11251
- index
11252
- }) : undefined
11253
- }), index < array.length - 1 && vue.createVNode(VBreadcrumbsDivider, null, {
11254
- default: slots.divider ? () => slots.divider?.({
11404
+ }, slots.prepend)]), items.value.map((_ref2, index, array) => {
11405
+ let {
11255
11406
  item,
11256
- index
11257
- }) : undefined
11258
- })])), slots.default?.()]
11407
+ raw
11408
+ } = _ref2;
11409
+ return vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
11410
+ "key": item.title,
11411
+ "disabled": index >= array.length - 1
11412
+ }, item), {
11413
+ default: slots.title ? () => slots.title?.({
11414
+ item: raw,
11415
+ index
11416
+ }) : undefined
11417
+ }), index < array.length - 1 && vue.createVNode(VBreadcrumbsDivider, null, {
11418
+ default: slots.divider ? () => slots.divider?.({
11419
+ item: raw,
11420
+ index
11421
+ }) : undefined
11422
+ })]);
11423
+ }), slots.default?.()]
11259
11424
  });
11260
11425
  });
11261
11426
  return {};
11262
11427
  }
11263
11428
  });
11264
11429
 
11265
- // Types
11266
-
11267
- const VCardActions = defineComponent({
11430
+ const VCardActions = genericComponent()({
11268
11431
  name: 'VCardActions',
11269
- setup(_, _ref) {
11432
+ props: makeComponentProps(),
11433
+ setup(props, _ref) {
11270
11434
  let {
11271
11435
  slots
11272
11436
  } = _ref;
@@ -11276,7 +11440,8 @@
11276
11440
  }
11277
11441
  });
11278
11442
  useRender(() => vue.createVNode("div", {
11279
- "class": "v-card-actions"
11443
+ "class": ['v-card-actions', props.class],
11444
+ "style": props.style
11280
11445
  }, [slots.default?.()]));
11281
11446
  return {};
11282
11447
  }
@@ -11286,8 +11451,6 @@
11286
11451
 
11287
11452
  const VCardTitle = createSimpleFunctional('v-card-title');
11288
11453
 
11289
- // Types
11290
-
11291
11454
  const VCardItem = genericComponent()({
11292
11455
  name: 'VCardItem',
11293
11456
  props: {
@@ -11297,6 +11460,7 @@
11297
11460
  prependIcon: IconValue,
11298
11461
  subtitle: String,
11299
11462
  title: String,
11463
+ ...makeComponentProps(),
11300
11464
  ...makeDensityProps()
11301
11465
  },
11302
11466
  setup(props, _ref) {
@@ -11311,7 +11475,8 @@
11311
11475
  const hasTitle = !!(props.title || slots.title);
11312
11476
  const hasSubtitle = !!(props.subtitle || slots.subtitle);
11313
11477
  return vue.createVNode("div", {
11314
- "class": "v-card-item"
11478
+ "class": ['v-card-item', props.class],
11479
+ "style": props.style
11315
11480
  }, [hasPrepend && vue.createVNode("div", {
11316
11481
  "key": "prepend",
11317
11482
  "class": "v-card-item__prepend"
@@ -11393,8 +11558,8 @@
11393
11558
  subtitle: String,
11394
11559
  text: String,
11395
11560
  title: String,
11396
- ...makeThemeProps(),
11397
11561
  ...makeBorderProps(),
11562
+ ...makeComponentProps(),
11398
11563
  ...makeDensityProps(),
11399
11564
  ...makeDimensionProps(),
11400
11565
  ...makeElevationProps(),
@@ -11404,6 +11569,7 @@
11404
11569
  ...makeRoundedProps(),
11405
11570
  ...makeRouterProps(),
11406
11571
  ...makeTagProps(),
11572
+ ...makeThemeProps(),
11407
11573
  ...makeVariantProps({
11408
11574
  variant: 'elevated'
11409
11575
  })
@@ -11464,8 +11630,8 @@
11464
11630
  'v-card--flat': props.flat,
11465
11631
  'v-card--hover': props.hover && !(props.disabled || props.flat),
11466
11632
  'v-card--link': isClickable.value
11467
- }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
11468
- "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
11633
+ }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class],
11634
+ "style": [colorStyles.value, dimensionStyles.value, locationStyles.value, props.style],
11469
11635
  "href": link.href.value,
11470
11636
  "onClick": isClickable.value && link.navigate,
11471
11637
  "tabindex": props.disabled ? -1 : undefined
@@ -11661,6 +11827,7 @@
11661
11827
  mandatory: {
11662
11828
  default: 'force'
11663
11829
  },
11830
+ ...makeComponentProps(),
11664
11831
  ...makeTagProps(),
11665
11832
  ...makeThemeProps()
11666
11833
  }, 'v-window');
@@ -11776,7 +11943,8 @@
11776
11943
  "ref": rootRef,
11777
11944
  "class": ['v-window', {
11778
11945
  'v-window--show-arrows-on-hover': props.showArrows === 'hover'
11779
- }, themeClasses.value]
11946
+ }, themeClasses.value, props.class],
11947
+ "style": props.style
11780
11948
  }, {
11781
11949
  default: () => [vue.createVNode("div", {
11782
11950
  "class": "v-window__container",
@@ -11861,10 +12029,10 @@
11861
12029
  "class": ['v-carousel', {
11862
12030
  'v-carousel--hide-delimiter-background': props.hideDelimiterBackground,
11863
12031
  'v-carousel--vertical-delimiters': props.verticalDelimiters
11864
- }],
11865
- "style": {
12032
+ }, props.class],
12033
+ "style": [{
11866
12034
  height: convertToUnit(props.height)
11867
- },
12035
+ }, props.style],
11868
12036
  "continuous": true,
11869
12037
  "mandatory": "force",
11870
12038
  "showArrows": props.showArrows
@@ -11930,6 +12098,7 @@
11930
12098
  type: [Boolean, String],
11931
12099
  default: undefined
11932
12100
  },
12101
+ ...makeComponentProps(),
11933
12102
  ...makeGroupItemProps(),
11934
12103
  ...makeLazyProps()
11935
12104
  },
@@ -12016,7 +12185,8 @@
12016
12185
  "disabled": !isBooted.value
12017
12186
  }, {
12018
12187
  default: () => [vue.withDirectives(vue.createVNode("div", {
12019
- "class": ['v-window-item', groupItem.selectedClass.value]
12188
+ "class": ['v-window-item', groupItem.selectedClass.value, props.class],
12189
+ "style": props.style
12020
12190
  }, [hasContent.value && slots.default?.()]), [[vue.vShow, groupItem.isSelected.value]])]
12021
12191
  }));
12022
12192
  return {};
@@ -12029,7 +12199,8 @@
12029
12199
  name: 'VCarouselItem',
12030
12200
  inheritAttrs: false,
12031
12201
  props: {
12032
- value: null
12202
+ value: null,
12203
+ ...makeComponentProps()
12033
12204
  },
12034
12205
  setup(props, _ref) {
12035
12206
  let {
@@ -12037,7 +12208,8 @@
12037
12208
  attrs
12038
12209
  } = _ref;
12039
12210
  useRender(() => vue.createVNode(VWindowItem, {
12040
- "class": "v-carousel-item",
12211
+ "class": ['v-carousel-item', props.class],
12212
+ "style": props.style,
12041
12213
  "value": props.value
12042
12214
  }, {
12043
12215
  default: () => [vue.createVNode(VImg, attrs, slots)]
@@ -12050,6 +12222,7 @@
12050
12222
  const makeVSheetProps = propsFactory({
12051
12223
  color: String,
12052
12224
  ...makeBorderProps(),
12225
+ ...makeComponentProps(),
12053
12226
  ...makeDimensionProps(),
12054
12227
  ...makeElevationProps(),
12055
12228
  ...makeLocationProps(),
@@ -12093,8 +12266,8 @@
12093
12266
  roundedClasses
12094
12267
  } = useRounded(props);
12095
12268
  useRender(() => vue.createVNode(props.tag, {
12096
- "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value],
12097
- "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value]
12269
+ "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, props.class],
12270
+ "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value, props.style]
12098
12271
  }, slots));
12099
12272
  return {};
12100
12273
  }
@@ -12120,7 +12293,8 @@
12120
12293
  width: {
12121
12294
  type: [Number, String],
12122
12295
  default: 300
12123
- }
12296
+ },
12297
+ ...makeComponentProps()
12124
12298
  },
12125
12299
  emits: {
12126
12300
  'update:color': color => true,
@@ -12265,7 +12439,8 @@
12265
12439
  vue.onMounted(() => updateCanvas());
12266
12440
  useRender(() => vue.createVNode("div", {
12267
12441
  "ref": resizeRef,
12268
- "class": "v-color-picker-canvas",
12442
+ "class": ['v-color-picker-canvas', props.class],
12443
+ "style": props.style,
12269
12444
  "onClick": handleClick,
12270
12445
  "onMousedown": handleMouseDown,
12271
12446
  "onTouchstart": handleMouseDown
@@ -12287,27 +12462,6 @@
12287
12462
 
12288
12463
  // Types
12289
12464
 
12290
- function has(obj, key) {
12291
- return key.every(k => obj.hasOwnProperty(k));
12292
- }
12293
- function parseColor(color) {
12294
- if (!color) return null;
12295
- let hsva = null;
12296
- if (typeof color === 'string') {
12297
- const hex = parseHex(color);
12298
- hsva = HexToHSV(hex);
12299
- }
12300
- if (typeof color === 'object') {
12301
- if (has(color, ['r', 'g', 'b'])) {
12302
- hsva = RGBtoHSV(color);
12303
- } else if (has(color, ['h', 's', 'l'])) {
12304
- hsva = HSLtoHSV(color);
12305
- } else if (has(color, ['h', 's', 'v'])) {
12306
- hsva = color;
12307
- }
12308
- }
12309
- return hsva;
12310
- }
12311
12465
  function stripAlpha(color, stripAlpha) {
12312
12466
  if (stripAlpha) {
12313
12467
  const {
@@ -12498,7 +12652,8 @@
12498
12652
  type: Array,
12499
12653
  default: () => Object.keys(modes),
12500
12654
  validator: v => Array.isArray(v) && v.every(m => Object.keys(modes).includes(m))
12501
- }
12655
+ },
12656
+ ...makeComponentProps()
12502
12657
  },
12503
12658
  emits: {
12504
12659
  'update:color': color => true,
@@ -12538,7 +12693,8 @@
12538
12693
  });
12539
12694
  });
12540
12695
  useRender(() => vue.createVNode("div", {
12541
- "class": "v-color-picker-edit"
12696
+ "class": ['v-color-picker-edit', props.class],
12697
+ "style": props.style
12542
12698
  }, [inputs.value?.map(props => vue.createVNode(VColorPickerInput, props, null)), enabledModes.value.length > 1 && vue.createVNode(VBtn, {
12543
12699
  "icon": "$unfold",
12544
12700
  "size": "x-small",
@@ -12857,7 +13013,8 @@
12857
13013
  ripple: {
12858
13014
  type: Boolean,
12859
13015
  default: true
12860
- }
13016
+ },
13017
+ ...makeComponentProps()
12861
13018
  },
12862
13019
  emits: {
12863
13020
  'update:modelValue': v => true
@@ -12935,11 +13092,11 @@
12935
13092
  "class": ['v-slider-thumb', {
12936
13093
  'v-slider-thumb--focused': props.focused,
12937
13094
  'v-slider-thumb--pressed': props.focused && mousePressed.value
12938
- }],
12939
- "style": {
13095
+ }, props.class],
13096
+ "style": [{
12940
13097
  '--v-slider-thumb-position': positionPercentage,
12941
13098
  '--v-slider-thumb-size': convertToUnit(thumbSize.value)
12942
- },
13099
+ }, props.style],
12943
13100
  "role": "slider",
12944
13101
  "tabindex": disabled.value ? -1 : 0,
12945
13102
  "aria-valuemin": props.min,
@@ -12985,7 +13142,8 @@
12985
13142
  stop: {
12986
13143
  type: Number,
12987
13144
  required: true
12988
- }
13145
+ },
13146
+ ...makeComponentProps()
12989
13147
  },
12990
13148
  emits: {},
12991
13149
  setup(props, _ref) {
@@ -13060,12 +13218,12 @@
13060
13218
  });
13061
13219
  useRender(() => {
13062
13220
  return vue.createVNode("div", {
13063
- "class": ['v-slider-track', roundedClasses.value],
13064
- "style": {
13221
+ "class": ['v-slider-track', roundedClasses.value, props.class],
13222
+ "style": [{
13065
13223
  '--v-slider-track-size': convertToUnit(trackSize.value),
13066
13224
  '--v-slider-tick-size': convertToUnit(tickSize.value),
13067
13225
  direction: !vertical.value ? horizontalDirection.value : undefined
13068
- }
13226
+ }, props.style]
13069
13227
  }, [vue.createVNode("div", {
13070
13228
  "class": ['v-slider-track__background', trackColorClasses.value, {
13071
13229
  'v-slider-track__background--opacity': !!color.value || !trackFillColor.value
@@ -13168,7 +13326,8 @@
13168
13326
  'v-slider--focused': isFocused.value,
13169
13327
  'v-slider--pressed': mousePressed.value,
13170
13328
  'v-slider--disabled': props.disabled
13171
- }]
13329
+ }, props.class],
13330
+ "style": props.style
13172
13331
  }, inputProps, {
13173
13332
  "focused": isFocused.value
13174
13333
  }), {
@@ -13231,7 +13390,8 @@
13231
13390
  type: Object
13232
13391
  },
13233
13392
  disabled: Boolean,
13234
- hideAlpha: Boolean
13393
+ hideAlpha: Boolean,
13394
+ ...makeComponentProps()
13235
13395
  },
13236
13396
  emits: {
13237
13397
  'update:color': color => true
@@ -13243,7 +13403,8 @@
13243
13403
  useRender(() => vue.createVNode("div", {
13244
13404
  "class": ['v-color-picker-preview', {
13245
13405
  'v-color-picker-preview--hide-alpha': props.hideAlpha
13246
- }]
13406
+ }, props.class],
13407
+ "style": props.style
13247
13408
  }, [vue.createVNode("div", {
13248
13409
  "class": "v-color-picker-preview__dot"
13249
13410
  }, [vue.createVNode("div", {
@@ -13624,7 +13785,8 @@
13624
13785
  },
13625
13786
  disabled: Boolean,
13626
13787
  color: Object,
13627
- maxHeight: [Number, String]
13788
+ maxHeight: [Number, String],
13789
+ ...makeComponentProps()
13628
13790
  },
13629
13791
  emits: {
13630
13792
  'update:color': color => true
@@ -13634,20 +13796,22 @@
13634
13796
  emit
13635
13797
  } = _ref;
13636
13798
  useRender(() => vue.createVNode("div", {
13637
- "class": "v-color-picker-swatches",
13638
- "style": {
13799
+ "class": ['v-color-picker-swatches', props.class],
13800
+ "style": [{
13639
13801
  maxHeight: convertToUnit(props.maxHeight)
13640
- }
13802
+ }, props.style]
13641
13803
  }, [vue.createVNode("div", null, [props.swatches.map(swatch => vue.createVNode("div", {
13642
13804
  "class": "v-color-picker-swatches__swatch"
13643
13805
  }, [swatch.map(color => {
13644
- const hsva = parseColor(color);
13806
+ const rgba = parseColor(color);
13807
+ const hsva = RGBtoHSV(rgba);
13808
+ const background = RGBtoCSS(rgba);
13645
13809
  return vue.createVNode("div", {
13646
13810
  "class": "v-color-picker-swatches__color",
13647
13811
  "onClick": () => hsva && emit('update:color', hsva)
13648
13812
  }, [vue.createVNode("div", {
13649
13813
  "style": {
13650
- background: color
13814
+ background
13651
13815
  }
13652
13816
  }, [props.color && deepEqual(props.color, hsva) ? vue.createVNode(VIcon, {
13653
13817
  "size": "x-small",
@@ -13707,8 +13871,13 @@
13707
13871
  const mode = useProxiedModel(props, 'mode');
13708
13872
  const lastPickedColor = vue.ref(null);
13709
13873
  const currentColor = useProxiedModel(props, 'modelValue', undefined, v => {
13710
- let c = parseColor(v);
13711
- if (!c) return null;
13874
+ let c;
13875
+ try {
13876
+ c = RGBtoHSV(parseColor(v));
13877
+ } catch (err) {
13878
+ consoleWarn(err);
13879
+ return null;
13880
+ }
13712
13881
  if (lastPickedColor.value) {
13713
13882
  c = {
13714
13883
  ...c,
@@ -13741,13 +13910,13 @@
13741
13910
  "rounded": props.rounded,
13742
13911
  "elevation": props.elevation,
13743
13912
  "theme": props.theme,
13744
- "class": ['v-color-picker'],
13745
- "style": {
13913
+ "class": ['v-color-picker', props.class],
13914
+ "style": [{
13746
13915
  '--v-color-picker-color-hsv': HSVtoCSS({
13747
13916
  ...(currentColor.value ?? nullColor),
13748
13917
  a: 1
13749
13918
  })
13750
- }
13919
+ }, props.style]
13751
13920
  }, sheetProps, {
13752
13921
  "maxWidth": props.width
13753
13922
  }), {
@@ -14058,7 +14227,8 @@
14058
14227
  'v-combobox--chips': !!props.chips,
14059
14228
  'v-combobox--selecting-index': selectionIndex.value > -1,
14060
14229
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
14061
- }],
14230
+ }, props.class],
14231
+ "style": props.style,
14062
14232
  "appendInnerIcon": props.items.length ? props.menuIcon : undefined,
14063
14233
  "readonly": props.readonly,
14064
14234
  "placeholder": isDirty ? undefined : props.placeholder,
@@ -14104,11 +14274,13 @@
14104
14274
  let {
14105
14275
  isSelected
14106
14276
  } = _ref2;
14107
- return props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
14277
+ return vue.createVNode(vue.Fragment, null, [props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
14108
14278
  "modelValue": isSelected,
14109
14279
  "ripple": false,
14110
14280
  "tabindex": "-1"
14111
- }, null) : undefined;
14281
+ }, null) : undefined, item.props.prependIcon && vue.createVNode(VIcon, {
14282
+ "icon": item.props.prependIcon
14283
+ }, null)]);
14112
14284
  },
14113
14285
  title: () => {
14114
14286
  return isPristine.value ? item.title : highlightResult(item.title, getMatches(item)?.title, search.value?.length ?? 0);
@@ -14123,6 +14295,10 @@
14123
14295
  }
14124
14296
  const slotProps = {
14125
14297
  'onClick:close': onChipClose,
14298
+ onMousedown(e) {
14299
+ e.preventDefault();
14300
+ e.stopPropagation();
14301
+ },
14126
14302
  modelValue: true,
14127
14303
  'onUpdate:modelValue': undefined
14128
14304
  };
@@ -14215,7 +14391,7 @@
14215
14391
  ![document, overlay.value.contentEl].includes(after) &&
14216
14392
  // It isn't inside the dialog body
14217
14393
  !overlay.value.contentEl.contains(after)) {
14218
- 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"]'));
14394
+ const focusable = focusableChildren(overlay.value.contentEl);
14219
14395
  if (!focusable.length) return;
14220
14396
  const firstElement = focusable[0];
14221
14397
  const lastElement = focusable[focusable.length - 1];
@@ -14256,7 +14432,8 @@
14256
14432
  "class": ['v-dialog', {
14257
14433
  'v-dialog--fullscreen': props.fullscreen,
14258
14434
  'v-dialog--scrollable': props.scrollable
14259
- }]
14435
+ }, props.class],
14436
+ "style": props.style
14260
14437
  }, overlayProps, {
14261
14438
  "modelValue": isActive.value,
14262
14439
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -14295,6 +14472,7 @@
14295
14472
  validator: v => allowedVariants.includes(v)
14296
14473
  },
14297
14474
  readonly: Boolean,
14475
+ ...makeComponentProps(),
14298
14476
  ...makeGroupProps(),
14299
14477
  ...makeTagProps(),
14300
14478
  ...makeThemeProps()
@@ -14320,7 +14498,8 @@
14320
14498
  }
14321
14499
  });
14322
14500
  useRender(() => vue.createVNode(props.tag, {
14323
- "class": ['v-expansion-panels', themeClasses.value, variantClass.value]
14501
+ "class": ['v-expansion-panels', themeClasses.value, variantClass.value, props.class],
14502
+ "style": props.style
14324
14503
  }, slots));
14325
14504
  return {};
14326
14505
  }
@@ -14349,6 +14528,7 @@
14349
14528
  Ripple
14350
14529
  },
14351
14530
  props: {
14531
+ ...makeComponentProps(),
14352
14532
  ...makeVExpansionPanelTitleProps()
14353
14533
  },
14354
14534
  setup(props, _ref) {
@@ -14371,8 +14551,8 @@
14371
14551
  useRender(() => vue.withDirectives(vue.createVNode("button", {
14372
14552
  "class": ['v-expansion-panel-title', {
14373
14553
  'v-expansion-panel-title--active': expansionPanel.isSelected.value
14374
- }, backgroundColorClasses.value],
14375
- "style": backgroundColorStyles.value,
14554
+ }, backgroundColorClasses.value, props.class],
14555
+ "style": [backgroundColorStyles.value, props.style],
14376
14556
  "type": "button",
14377
14557
  "tabindex": expansionPanel.disabled.value ? -1 : undefined,
14378
14558
  "disabled": expansionPanel.disabled.value,
@@ -14392,6 +14572,7 @@
14392
14572
  const VExpansionPanelText = genericComponent()({
14393
14573
  name: 'VExpansionPanelText',
14394
14574
  props: {
14575
+ ...makeComponentProps(),
14395
14576
  ...makeLazyProps()
14396
14577
  },
14397
14578
  setup(props, _ref) {
@@ -14408,7 +14589,8 @@
14408
14589
  "onAfterLeave": onAfterLeave
14409
14590
  }, {
14410
14591
  default: () => [vue.withDirectives(vue.createVNode("div", {
14411
- "class": "v-expansion-panel-text"
14592
+ "class": ['v-expansion-panel-text', props.class],
14593
+ "style": props.style
14412
14594
  }, [slots.default && hasContent.value && vue.createVNode("div", {
14413
14595
  "class": "v-expansion-panel-text__wrapper"
14414
14596
  }, [slots.default?.()])]), [[vue.vShow, expansionPanel.isSelected.value]])]
@@ -14423,6 +14605,7 @@
14423
14605
  title: String,
14424
14606
  text: String,
14425
14607
  bgColor: String,
14608
+ ...makeComponentProps(),
14426
14609
  ...makeElevationProps(),
14427
14610
  ...makeGroupItemProps(),
14428
14611
  ...makeLazyProps(),
@@ -14471,8 +14654,8 @@
14471
14654
  'v-expansion-panel--before-active': isBeforeSelected.value,
14472
14655
  'v-expansion-panel--after-active': isAfterSelected.value,
14473
14656
  'v-expansion-panel--disabled': isDisabled.value
14474
- }, roundedClasses.value, backgroundColorClasses.value],
14475
- "style": backgroundColorStyles.value,
14657
+ }, roundedClasses.value, backgroundColorClasses.value, props.class],
14658
+ "style": [backgroundColorStyles.value, props.style],
14476
14659
  "aria-expanded": groupItem.isSelected.value
14477
14660
  }, {
14478
14661
  default: () => [vue.createVNode("div", {
@@ -14579,6 +14762,7 @@
14579
14762
  const vInputRef = vue.ref();
14580
14763
  const vFieldRef = vue.ref();
14581
14764
  const inputRef = vue.ref();
14765
+ const isActive = vue.computed(() => isFocused.value || props.active);
14582
14766
  function onFocus() {
14583
14767
  if (inputRef.value !== document.activeElement) {
14584
14768
  inputRef.value?.focus();
@@ -14622,7 +14806,8 @@
14622
14806
  "ref": vInputRef,
14623
14807
  "modelValue": model.value,
14624
14808
  "onUpdate:modelValue": $event => model.value = $event,
14625
- "class": "v-file-input",
14809
+ "class": ['v-file-input', props.class],
14810
+ "style": props.style,
14626
14811
  "onClick:prepend": onClickPrepend
14627
14812
  }, rootAttrs, inputProps, {
14628
14813
  "focused": isFocused.value
@@ -14646,7 +14831,7 @@
14646
14831
  "onClick:appendInner": props['onClick:appendInner']
14647
14832
  }, fieldProps, {
14648
14833
  "id": id.value,
14649
- "active": isDirty.value || isFocused.value,
14834
+ "active": isActive.value || isDirty.value,
14650
14835
  "dirty": isDirty.value,
14651
14836
  "disabled": isDisabled.value,
14652
14837
  "focused": isFocused.value,
@@ -14714,6 +14899,7 @@
14714
14899
  default: 'auto'
14715
14900
  },
14716
14901
  ...makeBorderProps(),
14902
+ ...makeComponentProps(),
14717
14903
  ...makeElevationProps(),
14718
14904
  ...makeLayoutItemProps(),
14719
14905
  ...makeRoundedProps(),
@@ -14763,8 +14949,8 @@
14763
14949
  });
14764
14950
  useRender(() => vue.createVNode(props.tag, {
14765
14951
  "ref": resizeRef,
14766
- "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
14767
- "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined]
14952
+ "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
14953
+ "style": [backgroundColorStyles.value, props.app ? layoutItemStyles.value : undefined, props.style]
14768
14954
  }, slots));
14769
14955
  return {};
14770
14956
  }
@@ -14775,6 +14961,7 @@
14775
14961
  const VForm = genericComponent()({
14776
14962
  name: 'VForm',
14777
14963
  props: {
14964
+ ...makeComponentProps(),
14778
14965
  ...makeFormProps()
14779
14966
  },
14780
14967
  emits: {
@@ -14813,7 +15000,8 @@
14813
15000
  }
14814
15001
  useRender(() => vue.createVNode("form", {
14815
15002
  "ref": formRef,
14816
- "class": "v-form",
15003
+ "class": ['v-form', props.class],
15004
+ "style": props.style,
14817
15005
  "novalidate": true,
14818
15006
  "onReset": onReset,
14819
15007
  "onSubmit": onSubmit
@@ -14829,6 +15017,7 @@
14829
15017
  type: Boolean,
14830
15018
  default: false
14831
15019
  },
15020
+ ...makeComponentProps(),
14832
15021
  ...makeTagProps()
14833
15022
  },
14834
15023
  setup(props, _ref) {
@@ -14838,7 +15027,8 @@
14838
15027
  useRender(() => vue.createVNode(props.tag, {
14839
15028
  "class": ['v-container', {
14840
15029
  'v-container--fluid': props.fluid
14841
- }]
15030
+ }, props.class],
15031
+ "style": props.style
14842
15032
  }, slots));
14843
15033
  return {};
14844
15034
  }
@@ -14929,6 +15119,7 @@
14929
15119
  default: null,
14930
15120
  validator: str => ALIGN_SELF_VALUES.includes(str)
14931
15121
  },
15122
+ ...makeComponentProps(),
14932
15123
  ...makeTagProps()
14933
15124
  },
14934
15125
  setup(props, _ref) {
@@ -14959,7 +15150,8 @@
14959
15150
  return classList;
14960
15151
  });
14961
15152
  return () => vue.h(props.tag, {
14962
- class: classes.value
15153
+ class: [classes.value, props.class],
15154
+ style: props.style
14963
15155
  }, slots.default?.());
14964
15156
  }
14965
15157
  });
@@ -15045,6 +15237,7 @@
15045
15237
  validator: alignContentValidator
15046
15238
  },
15047
15239
  ...alignContentProps,
15240
+ ...makeComponentProps(),
15048
15241
  ...makeTagProps()
15049
15242
  },
15050
15243
  setup(props, _ref) {
@@ -15073,7 +15266,8 @@
15073
15266
  return classList;
15074
15267
  });
15075
15268
  return () => vue.h(props.tag, {
15076
- class: ['v-row', classes.value]
15269
+ class: ['v-row', classes.value, props.class],
15270
+ style: props.style
15077
15271
  }, slots.default?.());
15078
15272
  }
15079
15273
  });
@@ -15117,6 +15311,7 @@
15117
15311
  const VItemGroup = genericComponent()({
15118
15312
  name: 'VItemGroup',
15119
15313
  props: {
15314
+ ...makeComponentProps(),
15120
15315
  ...makeGroupProps({
15121
15316
  selectedClass: 'v-item--selected'
15122
15317
  }),
@@ -15141,7 +15336,8 @@
15141
15336
  selected
15142
15337
  } = useGroup(props, VItemGroupSymbol);
15143
15338
  return () => vue.createVNode(props.tag, {
15144
- "class": ['v-item-group', themeClasses.value]
15339
+ "class": ['v-item-group', themeClasses.value, props.class],
15340
+ "style": props.style
15145
15341
  }, {
15146
15342
  default: () => [slots.default?.({
15147
15343
  isSelected,
@@ -15191,7 +15387,10 @@
15191
15387
 
15192
15388
  const VLayout = genericComponent()({
15193
15389
  name: 'VLayout',
15194
- props: makeLayoutProps(),
15390
+ props: {
15391
+ ...makeComponentProps(),
15392
+ ...makeLayoutProps()
15393
+ },
15195
15394
  setup(props, _ref) {
15196
15395
  let {
15197
15396
  slots
@@ -15205,8 +15404,8 @@
15205
15404
  } = createLayout(props);
15206
15405
  useRender(() => vue.createVNode("div", {
15207
15406
  "ref": layoutRef,
15208
- "class": layoutClasses.value,
15209
- "style": layoutStyles.value
15407
+ "class": [layoutClasses.value, props.class],
15408
+ "style": [layoutStyles.value, props.style]
15210
15409
  }, [slots.default?.()]));
15211
15410
  return {
15212
15411
  getLayoutItem,
@@ -15229,6 +15428,7 @@
15229
15428
  default: 300
15230
15429
  },
15231
15430
  modelValue: Boolean,
15431
+ ...makeComponentProps(),
15232
15432
  ...makeLayoutItemProps()
15233
15433
  },
15234
15434
  setup(props, _ref) {
@@ -15247,8 +15447,8 @@
15247
15447
  absolute: vue.toRef(props, 'absolute')
15248
15448
  });
15249
15449
  return () => vue.createVNode("div", {
15250
- "class": ['v-layout-item'],
15251
- "style": layoutItemStyles.value
15450
+ "class": ['v-layout-item', props.class],
15451
+ "style": [layoutItemStyles.value, props.style]
15252
15452
  }, [slots.default?.()]);
15253
15453
  }
15254
15454
  });
@@ -15272,6 +15472,7 @@
15272
15472
  threshold: undefined
15273
15473
  })
15274
15474
  },
15475
+ ...makeComponentProps(),
15275
15476
  ...makeDimensionProps(),
15276
15477
  ...makeTagProps(),
15277
15478
  ...makeTransitionProps({
@@ -15294,8 +15495,8 @@
15294
15495
  isActive.value = isIntersecting;
15295
15496
  }
15296
15497
  useRender(() => vue.withDirectives(vue.createVNode(props.tag, {
15297
- "class": "v-lazy",
15298
- "style": dimensionStyles.value
15498
+ "class": ['v-lazy', props.class],
15499
+ "style": [dimensionStyles.value, props.style]
15299
15500
  }, {
15300
15501
  default: () => [isActive.value && vue.createVNode(MaybeTransition, {
15301
15502
  "transition": props.transition,
@@ -15320,7 +15521,8 @@
15320
15521
  rtl: {
15321
15522
  type: Boolean,
15322
15523
  default: undefined
15323
- }
15524
+ },
15525
+ ...makeComponentProps()
15324
15526
  },
15325
15527
  setup(props, _ref) {
15326
15528
  let {
@@ -15330,7 +15532,8 @@
15330
15532
  rtlClasses
15331
15533
  } = provideLocale(props);
15332
15534
  useRender(() => vue.createVNode("div", {
15333
- "class": ['v-locale-provider', rtlClasses.value]
15535
+ "class": ['v-locale-provider', rtlClasses.value, props.class],
15536
+ "style": props.style
15334
15537
  }, [slots.default?.()]));
15335
15538
  return {};
15336
15539
  }
@@ -15340,6 +15543,7 @@
15340
15543
  name: 'VMain',
15341
15544
  props: {
15342
15545
  scrollable: Boolean,
15546
+ ...makeComponentProps(),
15343
15547
  ...makeTagProps({
15344
15548
  tag: 'main'
15345
15549
  })
@@ -15357,8 +15561,8 @@
15357
15561
  useRender(() => vue.createVNode(props.tag, {
15358
15562
  "class": ['v-main', {
15359
15563
  'v-main--scrollable': props.scrollable
15360
- }],
15361
- "style": [mainStyles.value, ssrBootStyles.value]
15564
+ }, props.class],
15565
+ "style": [mainStyles.value, ssrBootStyles.value, props.style]
15362
15566
  }, {
15363
15567
  default: () => [props.scrollable ? vue.createVNode("div", {
15364
15568
  "class": "v-main__scroller"
@@ -15368,525 +15572,99 @@
15368
15572
  }
15369
15573
  });
15370
15574
 
15371
- // Utilities
15372
-
15373
- // Types
15374
-
15375
- function getWeekArray(date) {
15376
- let currentWeek = [];
15377
- const weeks = [];
15378
- const firstDayOfMonth = startOfMonth(date);
15379
- const lastDayOfMonth = endOfMonth(date);
15380
- for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
15381
- currentWeek.push(null);
15575
+ function useSticky(_ref) {
15576
+ let {
15577
+ rootEl,
15578
+ isSticky,
15579
+ layoutItemStyles
15580
+ } = _ref;
15581
+ const isStuck = vue.ref(false);
15582
+ const stuckPosition = vue.ref(0);
15583
+ const stickyStyles = vue.computed(() => {
15584
+ const side = typeof isStuck.value === 'boolean' ? 'top' : isStuck.value;
15585
+ return [isSticky.value ? {
15586
+ top: 'auto',
15587
+ bottom: 'auto',
15588
+ height: undefined
15589
+ } : undefined, isStuck.value ? {
15590
+ [side]: convertToUnit(stuckPosition.value)
15591
+ } : {
15592
+ top: layoutItemStyles.value.top
15593
+ }];
15594
+ });
15595
+ vue.onMounted(() => {
15596
+ vue.watch(isSticky, val => {
15597
+ if (val) {
15598
+ window.addEventListener('scroll', onScroll, {
15599
+ passive: true
15600
+ });
15601
+ } else {
15602
+ window.removeEventListener('scroll', onScroll);
15603
+ }
15604
+ }, {
15605
+ immediate: true
15606
+ });
15607
+ });
15608
+ vue.onBeforeUnmount(() => {
15609
+ document.removeEventListener('scroll', onScroll);
15610
+ });
15611
+ let lastScrollTop = 0;
15612
+ function onScroll() {
15613
+ const direction = lastScrollTop > window.scrollY ? 'up' : 'down';
15614
+ const rect = rootEl.value.getBoundingClientRect();
15615
+ const layoutTop = parseFloat(layoutItemStyles.value.top ?? 0);
15616
+ const top = window.scrollY - Math.max(0, stuckPosition.value - layoutTop);
15617
+ const bottom = rect.height + Math.max(stuckPosition.value, layoutTop) - window.scrollY - window.innerHeight;
15618
+ if (rect.height < window.innerHeight - layoutTop) {
15619
+ isStuck.value = 'top';
15620
+ stuckPosition.value = layoutTop;
15621
+ } else if (direction === 'up' && isStuck.value === 'bottom' || direction === 'down' && isStuck.value === 'top') {
15622
+ stuckPosition.value = window.scrollY + rect.top;
15623
+ isStuck.value = true;
15624
+ } else if (direction === 'down' && bottom <= 0) {
15625
+ stuckPosition.value = 0;
15626
+ isStuck.value = 'bottom';
15627
+ } else if (direction === 'up' && top <= 0) {
15628
+ stuckPosition.value = rect.top + top;
15629
+ isStuck.value = 'top';
15630
+ }
15631
+ lastScrollTop = window.scrollY;
15382
15632
  }
15383
- for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
15384
- const day = new Date(date.getFullYear(), date.getMonth(), i);
15633
+ return {
15634
+ isStuck,
15635
+ stickyStyles
15636
+ };
15637
+ }
15385
15638
 
15386
- // Add the day to the current week
15387
- currentWeek.push(day);
15639
+ const HORIZON = 100; // ms
15640
+ const HISTORY = 20; // number of samples to keep
15388
15641
 
15389
- // If the current week has 7 days, add it to the weeks array and start a new week
15390
- if (currentWeek.length === 7) {
15391
- weeks.push(currentWeek);
15392
- currentWeek = [];
15393
- }
15642
+ /** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */
15643
+ function kineticEnergyToVelocity(work) {
15644
+ const sqrt2 = 1.41421356237;
15645
+ return (work < 0 ? -1.0 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;
15646
+ }
15647
+
15648
+ /**
15649
+ * Returns pointer velocity in px/s
15650
+ */
15651
+ function calculateImpulseVelocity(samples) {
15652
+ // The input should be in reversed time order (most recent sample at index i=0)
15653
+ if (samples.length < 2) {
15654
+ // if 0 or 1 points, velocity is zero
15655
+ return 0;
15394
15656
  }
15395
- for (let i = currentWeek.length; i < 7; i++) {
15396
- currentWeek.push(null);
15397
- }
15398
- weeks.push(currentWeek);
15399
- return weeks;
15400
- }
15401
- function startOfMonth(date) {
15402
- return new Date(date.getFullYear(), date.getMonth(), 1);
15403
- }
15404
- function endOfMonth(date) {
15405
- return new Date(date.getFullYear(), date.getMonth() + 1, 0);
15406
- }
15407
- function date(value) {
15408
- if (value == null) return null;
15409
- if (value instanceof Date) return value;
15410
- if (typeof value === 'string') {
15411
- const parsed = Date.parse(value);
15412
- if (!isNaN(parsed)) return new Date(parsed);
15413
- }
15414
- return null;
15415
- }
15416
- const firstDay = {
15417
- '001': 1,
15418
- AD: 1,
15419
- AE: 6,
15420
- AF: 6,
15421
- AG: 0,
15422
- AI: 1,
15423
- AL: 1,
15424
- AM: 1,
15425
- AN: 1,
15426
- AR: 1,
15427
- AS: 0,
15428
- AT: 1,
15429
- AU: 0,
15430
- AX: 1,
15431
- AZ: 1,
15432
- BA: 1,
15433
- BD: 0,
15434
- BE: 1,
15435
- BG: 1,
15436
- BH: 6,
15437
- BM: 1,
15438
- BN: 1,
15439
- BR: 0,
15440
- BS: 0,
15441
- BT: 0,
15442
- BW: 0,
15443
- BY: 1,
15444
- BZ: 0,
15445
- CA: 0,
15446
- CH: 1,
15447
- CL: 1,
15448
- CM: 1,
15449
- CN: 0,
15450
- CO: 0,
15451
- CR: 1,
15452
- CY: 1,
15453
- CZ: 1,
15454
- DE: 1,
15455
- DJ: 6,
15456
- DK: 1,
15457
- DM: 0,
15458
- DO: 0,
15459
- DZ: 6,
15460
- EC: 1,
15461
- EE: 1,
15462
- EG: 6,
15463
- ES: 1,
15464
- ET: 0,
15465
- FI: 1,
15466
- FJ: 1,
15467
- FO: 1,
15468
- FR: 1,
15469
- GB: 1,
15470
- 'GB-alt-variant': 0,
15471
- GE: 1,
15472
- GF: 1,
15473
- GP: 1,
15474
- GR: 1,
15475
- GT: 0,
15476
- GU: 0,
15477
- HK: 0,
15478
- HN: 0,
15479
- HR: 1,
15480
- HU: 1,
15481
- ID: 0,
15482
- IE: 1,
15483
- IL: 0,
15484
- IN: 0,
15485
- IQ: 6,
15486
- IR: 6,
15487
- IS: 1,
15488
- IT: 1,
15489
- JM: 0,
15490
- JO: 6,
15491
- JP: 0,
15492
- KE: 0,
15493
- KG: 1,
15494
- KH: 0,
15495
- KR: 0,
15496
- KW: 6,
15497
- KZ: 1,
15498
- LA: 0,
15499
- LB: 1,
15500
- LI: 1,
15501
- LK: 1,
15502
- LT: 1,
15503
- LU: 1,
15504
- LV: 1,
15505
- LY: 6,
15506
- MC: 1,
15507
- MD: 1,
15508
- ME: 1,
15509
- MH: 0,
15510
- MK: 1,
15511
- MM: 0,
15512
- MN: 1,
15513
- MO: 0,
15514
- MQ: 1,
15515
- MT: 0,
15516
- MV: 5,
15517
- MX: 0,
15518
- MY: 1,
15519
- MZ: 0,
15520
- NI: 0,
15521
- NL: 1,
15522
- NO: 1,
15523
- NP: 0,
15524
- NZ: 1,
15525
- OM: 6,
15526
- PA: 0,
15527
- PE: 0,
15528
- PH: 0,
15529
- PK: 0,
15530
- PL: 1,
15531
- PR: 0,
15532
- PT: 0,
15533
- PY: 0,
15534
- QA: 6,
15535
- RE: 1,
15536
- RO: 1,
15537
- RS: 1,
15538
- RU: 1,
15539
- SA: 0,
15540
- SD: 6,
15541
- SE: 1,
15542
- SG: 0,
15543
- SI: 1,
15544
- SK: 1,
15545
- SM: 1,
15546
- SV: 0,
15547
- SY: 6,
15548
- TH: 0,
15549
- TJ: 1,
15550
- TM: 1,
15551
- TR: 1,
15552
- TT: 0,
15553
- TW: 0,
15554
- UA: 1,
15555
- UM: 0,
15556
- US: 0,
15557
- UY: 1,
15558
- UZ: 1,
15559
- VA: 1,
15560
- VE: 0,
15561
- VI: 0,
15562
- VN: 1,
15563
- WS: 0,
15564
- XK: 1,
15565
- YE: 0,
15566
- ZA: 0,
15567
- ZW: 0
15568
- };
15569
- const sundayJanuarySecond2000 = new Date(2000, 0, 2);
15570
- function getWeekdays(locale) {
15571
- const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
15572
- return createRange(7).map(i => {
15573
- const weekday = new Date(sundayJanuarySecond2000);
15574
- weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
15575
- return new Intl.DateTimeFormat(locale, {
15576
- weekday: 'long'
15577
- }).format(weekday);
15578
- });
15579
- }
15580
- function format(value, formatString, locale) {
15581
- const date = new Date(value);
15582
- let options = {};
15583
- switch (formatString) {
15584
- case 'fullDateWithWeekday':
15585
- options = {
15586
- weekday: 'long',
15587
- day: 'numeric',
15588
- month: 'long',
15589
- year: 'numeric'
15590
- };
15591
- break;
15592
- case 'normalDateWithWeekday':
15593
- options = {
15594
- weekday: 'short',
15595
- day: 'numeric',
15596
- month: 'short',
15597
- year: 'numeric'
15598
- };
15599
- break;
15600
- case 'keyboardDate':
15601
- options = {};
15602
- break;
15603
- case 'monthAndDate':
15604
- options = {
15605
- month: 'long',
15606
- day: 'numeric'
15607
- };
15608
- break;
15609
- case 'monthAndYear':
15610
- options = {
15611
- month: 'long',
15612
- year: 'numeric'
15613
- };
15614
- break;
15615
- default:
15616
- options = {
15617
- timeZone: 'UTC',
15618
- timeZoneName: 'short'
15619
- };
15620
- }
15621
- return new Intl.DateTimeFormat(locale, options).format(date);
15622
- }
15623
- function addDays(date, amount) {
15624
- const d = new Date(date);
15625
- d.setDate(d.getDate() + amount);
15626
- return d;
15627
- }
15628
- function addMonths(date, amount) {
15629
- const d = new Date(date);
15630
- d.setMonth(d.getMonth() + amount);
15631
- return d;
15632
- }
15633
- function getYear(date) {
15634
- return date.getFullYear();
15635
- }
15636
- function getMonth(date) {
15637
- return date.getMonth();
15638
- }
15639
- function startOfYear(date) {
15640
- return new Date(date.getFullYear(), 0, 1);
15641
- }
15642
- function endOfYear(date) {
15643
- return new Date(date.getFullYear(), 11, 31);
15644
- }
15645
- function getMondayOfFirstWeekOfYear(year) {
15646
- return new Date(year, 0, 1);
15647
- }
15648
-
15649
- // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
15650
- function getWeek(date) {
15651
- let year = date.getFullYear();
15652
- let d1w1 = getMondayOfFirstWeekOfYear(year);
15653
- if (date < d1w1) {
15654
- year = year - 1;
15655
- d1w1 = getMondayOfFirstWeekOfYear(year);
15656
- } else {
15657
- const tv = getMondayOfFirstWeekOfYear(year + 1);
15658
- if (date >= tv) {
15659
- year = year + 1;
15660
- d1w1 = tv;
15661
- }
15662
- }
15663
- const diffTime = Math.abs(date.getTime() - d1w1.getTime());
15664
- const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
15665
- return Math.floor(diffDays / 7) + 1;
15666
- }
15667
- function isWithinRange(date, range) {
15668
- return isAfter(date, range[0]) && isBefore(date, range[1]);
15669
- }
15670
- function isValid(date) {
15671
- const d = new Date(date);
15672
- return d instanceof Date && !isNaN(d.getTime());
15673
- }
15674
- function isAfter(date, comparing) {
15675
- return date.getTime() > comparing.getTime();
15676
- }
15677
- function isBefore(date, comparing) {
15678
- return date.getTime() < comparing.getTime();
15679
- }
15680
- function isEqual(date, comparing) {
15681
- return date.getTime() === comparing.getTime();
15682
- }
15683
- function isSameDay(date, comparing) {
15684
- return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
15685
- }
15686
- function isSameMonth(date, comparing) {
15687
- return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
15688
- }
15689
- function getDiff(date, comparing, unit) {
15690
- const d = new Date(date);
15691
- const c = new Date(comparing);
15692
- if (unit === 'month') {
15693
- return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
15694
- }
15695
- return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
15696
- }
15697
- function setYear(date, year) {
15698
- const d = new Date(date);
15699
- d.setFullYear(year);
15700
- return d;
15701
- }
15702
- class VuetifyDateAdapter {
15703
- constructor() {
15704
- let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
15705
- this.locale = locale;
15706
- }
15707
- date(value) {
15708
- return date(value);
15709
- }
15710
- addDays(date, amount) {
15711
- return addDays(date, amount);
15712
- }
15713
- addMonths(date, amount) {
15714
- return addMonths(date, amount);
15715
- }
15716
- getWeekArray(date) {
15717
- return getWeekArray(date);
15718
- }
15719
- startOfMonth(date) {
15720
- return startOfMonth(date);
15721
- }
15722
- endOfMonth(date) {
15723
- return endOfMonth(date);
15724
- }
15725
- format(date, formatString) {
15726
- return format(date, formatString, this.locale);
15727
- }
15728
- isEqual(date, comparing) {
15729
- return isEqual(date, comparing);
15730
- }
15731
- isValid(date) {
15732
- return isValid(date);
15733
- }
15734
- isWithinRange(date, range) {
15735
- return isWithinRange(date, range);
15736
- }
15737
- isAfter(date, comparing) {
15738
- return isAfter(date, comparing);
15739
- }
15740
- isSameDay(date, comparing) {
15741
- return isSameDay(date, comparing);
15742
- }
15743
- isSameMonth(date, comparing) {
15744
- return isSameMonth(date, comparing);
15745
- }
15746
- setYear(date, year) {
15747
- return setYear(date, year);
15748
- }
15749
- getDiff(date, comparing, unit) {
15750
- return getDiff(date, comparing, unit);
15751
- }
15752
- getWeek(date) {
15753
- return getWeek(date);
15754
- }
15755
- getWeekdays() {
15756
- return getWeekdays(this.locale);
15757
- }
15758
- getYear(date) {
15759
- return getYear(date);
15760
- }
15761
- getMonth(date) {
15762
- return getMonth(date);
15763
- }
15764
- startOfYear(date) {
15765
- return startOfYear(date);
15766
- }
15767
- endOfYear(date) {
15768
- return endOfYear(date);
15769
- }
15770
- }
15771
-
15772
- // Composables
15773
-
15774
- // Types
15775
-
15776
- const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
15777
- function createDate(options) {
15778
- return options ?? {
15779
- adapter: VuetifyDateAdapter
15780
- };
15781
- }
15782
- function useDate(props) {
15783
- const date = vue.inject(DateAdapterSymbol);
15784
- const locale = useLocale();
15785
- if (!date) throw new Error('[Vuetify] Could not find injected date');
15786
-
15787
- // eslint-disable-next-line new-cap
15788
- const instance = new date.adapter(locale.current.value);
15789
- vue.watch(locale.current, val => {
15790
- instance.locale = val;
15791
- }, {
15792
- immediate: true
15793
- });
15794
- return instance;
15795
- }
15796
-
15797
- function useSticky(_ref) {
15798
- let {
15799
- rootEl,
15800
- isSticky,
15801
- layoutItemStyles
15802
- } = _ref;
15803
- const isStuck = vue.ref(false);
15804
- const stuckPosition = vue.ref(0);
15805
- const stickyStyles = vue.computed(() => {
15806
- const side = typeof isStuck.value === 'boolean' ? 'top' : isStuck.value;
15807
- return [isSticky.value ? {
15808
- top: 'auto',
15809
- bottom: 'auto',
15810
- height: undefined
15811
- } : undefined, isStuck.value ? {
15812
- [side]: convertToUnit(stuckPosition.value)
15813
- } : {
15814
- top: layoutItemStyles.value.top
15815
- }];
15816
- });
15817
- vue.onMounted(() => {
15818
- vue.watch(isSticky, val => {
15819
- if (val) {
15820
- window.addEventListener('scroll', onScroll, {
15821
- passive: true
15822
- });
15823
- } else {
15824
- window.removeEventListener('scroll', onScroll);
15825
- }
15826
- }, {
15827
- immediate: true
15828
- });
15829
- });
15830
- vue.onBeforeUnmount(() => {
15831
- document.removeEventListener('scroll', onScroll);
15832
- });
15833
- let lastScrollTop = 0;
15834
- function onScroll() {
15835
- const direction = lastScrollTop > window.scrollY ? 'up' : 'down';
15836
- const rect = rootEl.value.getBoundingClientRect();
15837
- const layoutTop = parseFloat(layoutItemStyles.value.top ?? 0);
15838
- const top = window.scrollY - Math.max(0, stuckPosition.value - layoutTop);
15839
- const bottom = rect.height + Math.max(stuckPosition.value, layoutTop) - window.scrollY - window.innerHeight;
15840
- if (rect.height < window.innerHeight - layoutTop) {
15841
- isStuck.value = 'top';
15842
- stuckPosition.value = layoutTop;
15843
- } else if (direction === 'up' && isStuck.value === 'bottom' || direction === 'down' && isStuck.value === 'top') {
15844
- stuckPosition.value = window.scrollY + rect.top;
15845
- isStuck.value = true;
15846
- } else if (direction === 'down' && bottom <= 0) {
15847
- stuckPosition.value = 0;
15848
- isStuck.value = 'bottom';
15849
- } else if (direction === 'up' && top <= 0) {
15850
- stuckPosition.value = rect.top + top;
15851
- isStuck.value = 'top';
15852
- }
15853
- lastScrollTop = window.scrollY;
15854
- }
15855
- return {
15856
- isStuck,
15857
- stickyStyles
15858
- };
15859
- }
15860
-
15861
- const HORIZON = 100; // ms
15862
- const HISTORY = 20; // number of samples to keep
15863
-
15864
- /** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */
15865
- function kineticEnergyToVelocity(work) {
15866
- const sqrt2 = 1.41421356237;
15867
- return (work < 0 ? -1.0 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;
15868
- }
15869
-
15870
- /**
15871
- * Returns pointer velocity in px/s
15872
- */
15873
- function calculateImpulseVelocity(samples) {
15874
- // The input should be in reversed time order (most recent sample at index i=0)
15875
- if (samples.length < 2) {
15876
- // if 0 or 1 points, velocity is zero
15877
- return 0;
15878
- }
15879
- // if (samples[1].t > samples[0].t) {
15880
- // // Algorithm will still work, but not perfectly
15881
- // consoleWarn('Samples provided to calculateImpulseVelocity in the wrong order')
15882
- // }
15883
- if (samples.length === 2) {
15884
- // if 2 points, basic linear calculation
15885
- if (samples[1].t === samples[0].t) {
15886
- // consoleWarn(`Events have identical time stamps t=${samples[0].t}, setting velocity = 0`)
15887
- return 0;
15888
- }
15889
- return (samples[1].d - samples[0].d) / (samples[1].t - samples[0].t);
15657
+ // if (samples[1].t > samples[0].t) {
15658
+ // // Algorithm will still work, but not perfectly
15659
+ // consoleWarn('Samples provided to calculateImpulseVelocity in the wrong order')
15660
+ // }
15661
+ if (samples.length === 2) {
15662
+ // if 2 points, basic linear calculation
15663
+ if (samples[1].t === samples[0].t) {
15664
+ // consoleWarn(`Events have identical time stamps t=${samples[0].t}, setting velocity = 0`)
15665
+ return 0;
15666
+ }
15667
+ return (samples[1].d - samples[0].d) / (samples[1].t - samples[0].t);
15890
15668
  }
15891
15669
  // Guaranteed to have at least 3 points here
15892
15670
  // start with the oldest sample and go forward in time
@@ -16130,6 +15908,7 @@
16130
15908
  },
16131
15909
  sticky: Boolean,
16132
15910
  ...makeBorderProps(),
15911
+ ...makeComponentProps(),
16133
15912
  ...makeElevationProps(),
16134
15913
  ...makeLayoutItemProps(),
16135
15914
  ...makeRoundedProps(),
@@ -16218,7 +15997,6 @@
16218
15997
  });
16219
15998
  const {
16220
15999
  layoutItemStyles,
16221
- layoutRect,
16222
16000
  layoutItemScrimStyles
16223
16001
  } = useLayoutItem({
16224
16002
  id: props.name,
@@ -16248,12 +16026,6 @@
16248
16026
  opacity: dragProgress.value * 0.2,
16249
16027
  transition: 'none'
16250
16028
  } : undefined),
16251
- ...(layoutRect.value ? {
16252
- left: convertToUnit(layoutRect.value.left),
16253
- right: convertToUnit(layoutRect.value.right),
16254
- top: convertToUnit(layoutRect.value.top),
16255
- bottom: convertToUnit(layoutRect.value.bottom)
16256
- } : undefined),
16257
16029
  ...layoutItemScrimStyles.value
16258
16030
  }));
16259
16031
  provideDefaults({
@@ -16281,8 +16053,8 @@
16281
16053
  'v-navigation-drawer--temporary': isTemporary.value,
16282
16054
  'v-navigation-drawer--active': isActive.value,
16283
16055
  'v-navigation-drawer--sticky': isSticky.value
16284
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
16285
- "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value]
16056
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
16057
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
16286
16058
  }, attrs), {
16287
16059
  default: () => [hasImage && vue.createVNode("div", {
16288
16060
  "key": "image",
@@ -16411,6 +16183,7 @@
16411
16183
  },
16412
16184
  showFirstLastPage: Boolean,
16413
16185
  ...makeBorderProps(),
16186
+ ...makeComponentProps(),
16414
16187
  ...makeDensityProps(),
16415
16188
  ...makeElevationProps(),
16416
16189
  ...makeRoundedProps(),
@@ -16607,7 +16380,8 @@
16607
16380
  }
16608
16381
  useRender(() => vue.createVNode(props.tag, {
16609
16382
  "ref": resizeRef,
16610
- "class": ['v-pagination', themeClasses.value],
16383
+ "class": ['v-pagination', themeClasses.value, props.class],
16384
+ "style": props.style,
16611
16385
  "role": "navigation",
16612
16386
  "aria-label": t(props.ariaLabel),
16613
16387
  "onKeydown": onKeydown,
@@ -16666,7 +16440,8 @@
16666
16440
  scale: {
16667
16441
  type: [Number, String],
16668
16442
  default: 0.5
16669
- }
16443
+ },
16444
+ ...makeComponentProps()
16670
16445
  },
16671
16446
  setup(props, _ref) {
16672
16447
  let {
@@ -16728,7 +16503,8 @@
16728
16503
  useRender(() => vue.createVNode(VImg, {
16729
16504
  "class": ['v-parallax', {
16730
16505
  'v-parallax--active': isIntersecting.value
16731
- }],
16506
+ }, props.class],
16507
+ "style": props.style,
16732
16508
  "ref": root,
16733
16509
  "cover": true,
16734
16510
  "onLoadstart": onScroll,
@@ -16753,7 +16529,8 @@
16753
16529
  slots
16754
16530
  } = _ref;
16755
16531
  useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
16756
- "class": "v-radio",
16532
+ "class": ['v-radio', props.class],
16533
+ "style": props.style,
16757
16534
  "type": "radio"
16758
16535
  }), slots));
16759
16536
  return {};
@@ -16807,7 +16584,8 @@
16807
16584
  }
16808
16585
  }) : props.label;
16809
16586
  return vue.createVNode(VInput, vue.mergeProps({
16810
- "class": "v-radio-group"
16587
+ "class": ['v-radio-group', props.class],
16588
+ "style": props.style
16811
16589
  }, inputAttrs, inputProps, {
16812
16590
  "modelValue": model.value,
16813
16591
  "onUpdate:modelValue": $event => model.value = $event,
@@ -16945,7 +16723,8 @@
16945
16723
  'v-slider--focused': isFocused.value,
16946
16724
  'v-slider--pressed': mousePressed.value,
16947
16725
  'v-slider--disabled': props.disabled
16948
- }],
16726
+ }, props.class],
16727
+ "style": props.style,
16949
16728
  "ref": inputRef
16950
16729
  }, inputProps, {
16951
16730
  "focused": isFocused.value
@@ -17088,6 +16867,7 @@
17088
16867
  validator: v => ['top', 'bottom'].includes(v)
17089
16868
  },
17090
16869
  ripple: Boolean,
16870
+ ...makeComponentProps(),
17091
16871
  ...makeDensityProps(),
17092
16872
  ...makeSizeProps(),
17093
16873
  ...makeTagProps(),
@@ -17205,7 +16985,8 @@
17205
16985
  "class": ['v-rating', {
17206
16986
  'v-rating--hover': props.hover,
17207
16987
  'v-rating--readonly': props.readonly
17208
- }, themeClasses.value]
16988
+ }, themeClasses.value, props.class],
16989
+ "style": props.style
17209
16990
  }, {
17210
16991
  default: () => [vue.createVNode(VRatingItem, {
17211
16992
  "value": 0,
@@ -17305,6 +17086,7 @@
17305
17086
  type: [Boolean, String],
17306
17087
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
17307
17088
  },
17089
+ ...makeComponentProps(),
17308
17090
  ...makeTagProps(),
17309
17091
  ...makeGroupProps({
17310
17092
  selectedClass: 'v-slide-group-item--active'
@@ -17468,7 +17250,7 @@
17468
17250
  function focus(location) {
17469
17251
  if (!contentRef.value) return;
17470
17252
  if (!location) {
17471
- const focusable = [...contentRef.value.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')].filter(el => !el.hasAttribute('disabled'));
17253
+ const focusable = focusableChildren(contentRef.value);
17472
17254
  focusable[0]?.focus();
17473
17255
  } else if (location === 'next') {
17474
17256
  const el = contentRef.value.querySelector(':focus')?.nextElementSibling;
@@ -17545,7 +17327,8 @@
17545
17327
  'v-slide-group--vertical': !isHorizontal.value,
17546
17328
  'v-slide-group--has-affixes': hasAffixes.value,
17547
17329
  'v-slide-group--is-overflowing': isOverflowing.value
17548
- }],
17330
+ }, props.class],
17331
+ "style": props.style,
17549
17332
  "tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
17550
17333
  "onFocus": onFocus
17551
17334
  }, {
@@ -17695,7 +17478,8 @@
17695
17478
  'v-snackbar--active': isActive.value,
17696
17479
  'v-snackbar--multi-line': props.multiLine && !props.vertical,
17697
17480
  'v-snackbar--vertical': props.vertical
17698
- }, positionClasses.value]
17481
+ }, positionClasses.value, props.class],
17482
+ "style": props.style
17699
17483
  }, overlayProps, {
17700
17484
  "modelValue": isActive.value,
17701
17485
  "onUpdate:modelValue": $event => isActive.value = $event,
@@ -17795,7 +17579,8 @@
17795
17579
  'v-switch--inset': props.inset
17796
17580
  }, {
17797
17581
  'v-switch--indeterminate': indeterminate.value
17798
- }, loaderClasses.value]
17582
+ }, loaderClasses.value, props.class],
17583
+ "style": props.style
17799
17584
  }, inputAttrs, inputProps, {
17800
17585
  "id": id.value,
17801
17586
  "focused": isFocused.value
@@ -17864,6 +17649,7 @@
17864
17649
  color: String,
17865
17650
  height: [Number, String],
17866
17651
  window: Boolean,
17652
+ ...makeComponentProps(),
17867
17653
  ...makeElevationProps(),
17868
17654
  ...makeLayoutItemProps(),
17869
17655
  ...makeRoundedProps(),
@@ -17905,8 +17691,8 @@
17905
17691
  useRender(() => vue.createVNode(props.tag, {
17906
17692
  "class": ['v-system-bar', {
17907
17693
  'v-system-bar--window': props.window
17908
- }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value],
17909
- "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value]
17694
+ }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value, props.class],
17695
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, props.style]
17910
17696
  }, slots));
17911
17697
  return {};
17912
17698
  }
@@ -17979,10 +17765,10 @@
17979
17765
  useRender(() => {
17980
17766
  const [btnProps] = VBtn.filterProps(props);
17981
17767
  return vue.createVNode(VBtn, vue.mergeProps({
17982
- "_as": "VTab",
17983
17768
  "symbol": VTabsSymbol,
17984
17769
  "ref": rootEl,
17985
- "class": ['v-tab'],
17770
+ "class": ['v-tab', props.class],
17771
+ "style": props.style,
17986
17772
  "tabindex": isSelected.value ? 0 : -1,
17987
17773
  "role": "tab",
17988
17774
  "aria-selected": String(isSelected.value),
@@ -18077,10 +17863,10 @@
18077
17863
  'v-tabs--fixed-tabs': props.fixedTabs,
18078
17864
  'v-tabs--grow': props.grow,
18079
17865
  'v-tabs--stacked': props.stacked
18080
- }, densityClasses.value, backgroundColorClasses.value],
17866
+ }, densityClasses.value, backgroundColorClasses.value, props.class],
18081
17867
  "style": [{
18082
17868
  '--v-tabs-height': convertToUnit(props.height)
18083
- }, backgroundColorStyles.value],
17869
+ }, backgroundColorStyles.value, props.style],
18084
17870
  "role": "tablist",
18085
17871
  "symbol": VTabsSymbol
18086
17872
  }), {
@@ -18100,6 +17886,7 @@
18100
17886
  fixedFooter: Boolean,
18101
17887
  height: [Number, String],
18102
17888
  hover: Boolean,
17889
+ ...makeComponentProps(),
18103
17890
  ...makeDensityProps(),
18104
17891
  ...makeTagProps(),
18105
17892
  ...makeThemeProps()
@@ -18122,7 +17909,8 @@
18122
17909
  'v-table--has-top': !!slots.top,
18123
17910
  'v-table--has-bottom': !!slots.bottom,
18124
17911
  'v-table--hover': props.hover
18125
- }, themeClasses.value, densityClasses.value]
17912
+ }, themeClasses.value, densityClasses.value, props.class],
17913
+ "style": props.style
18126
17914
  }, {
18127
17915
  default: () => [slots.top?.(), slots.default ? vue.createVNode("div", {
18128
17916
  "class": "v-table__wrapper",
@@ -18201,7 +17989,7 @@
18201
17989
  const vFieldRef = vue.ref();
18202
17990
  const controlHeight = vue.ref('');
18203
17991
  const textareaRef = vue.ref();
18204
- const isActive = vue.computed(() => isFocused.value || props.persistentPlaceholder);
17992
+ const isActive = vue.computed(() => props.persistentPlaceholder || isFocused.value || props.active);
18205
17993
  function onFocus() {
18206
17994
  if (textareaRef.value !== document.activeElement) {
18207
17995
  textareaRef.value?.focus();
@@ -18287,7 +18075,8 @@
18287
18075
  'v-textarea--auto-grow': props.autoGrow,
18288
18076
  'v-textarea--no-resize': props.noResize || props.autoGrow,
18289
18077
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
18290
- }]
18078
+ }, props.class],
18079
+ "style": props.style
18291
18080
  }, rootAttrs, inputProps, {
18292
18081
  "focused": isFocused.value
18293
18082
  }), {
@@ -18371,6 +18160,7 @@
18371
18160
  name: 'VThemeProvider',
18372
18161
  props: {
18373
18162
  withBackground: Boolean,
18163
+ ...makeComponentProps(),
18374
18164
  ...makeThemeProps(),
18375
18165
  ...makeTagProps()
18376
18166
  },
@@ -18384,7 +18174,8 @@
18384
18174
  return () => {
18385
18175
  if (!props.withBackground) return slots.default?.();
18386
18176
  return vue.createVNode(props.tag, {
18387
- "class": ['v-theme-provider', themeClasses.value]
18177
+ "class": ['v-theme-provider', themeClasses.value, props.class],
18178
+ "style": props.style
18388
18179
  }, {
18389
18180
  default: () => [slots.default?.()]
18390
18181
  });
@@ -18429,6 +18220,7 @@
18429
18220
  type: String,
18430
18221
  validator: v => ['start', 'end', 'both'].includes(v)
18431
18222
  },
18223
+ ...makeComponentProps(),
18432
18224
  ...makeDensityProps(),
18433
18225
  ...makeTagProps(),
18434
18226
  ...makeThemeProps()
@@ -18472,10 +18264,10 @@
18472
18264
  useRender(() => vue.createVNode(props.tag, {
18473
18265
  "class": ['v-timeline', `v-timeline--${props.direction}`, `v-timeline--align-${props.align}`, `v-timeline--justify-${props.justify}`, truncateClasses.value, {
18474
18266
  'v-timeline--inset-line': !!props.lineInset
18475
- }, themeClasses.value, densityClasses.value, sideClasses.value],
18476
- "style": {
18267
+ }, themeClasses.value, densityClasses.value, sideClasses.value, props.class],
18268
+ "style": [{
18477
18269
  '--v-timeline-line-thickness': convertToUnit(props.lineThickness)
18478
- }
18270
+ }, props.style]
18479
18271
  }, slots));
18480
18272
  return {};
18481
18273
  }
@@ -18490,6 +18282,7 @@
18490
18282
  icon: IconValue,
18491
18283
  iconColor: String,
18492
18284
  lineColor: String,
18285
+ ...makeComponentProps(),
18493
18286
  ...makeRoundedProps(),
18494
18287
  ...makeSizeProps(),
18495
18288
  ...makeElevationProps()
@@ -18519,7 +18312,8 @@
18519
18312
  useRender(() => vue.createVNode("div", {
18520
18313
  "class": ['v-timeline-divider', {
18521
18314
  'v-timeline-divider--fill-dot': props.fillDot
18522
- }]
18315
+ }, props.class],
18316
+ "style": props.style
18523
18317
  }, [vue.createVNode("div", {
18524
18318
  "class": ['v-timeline-divider__before', lineColorClasses.value],
18525
18319
  "style": lineColorStyles.value
@@ -18569,11 +18363,12 @@
18569
18363
  icon: IconValue,
18570
18364
  iconColor: String,
18571
18365
  lineInset: [Number, String],
18572
- ...makeRoundedProps(),
18366
+ ...makeComponentProps(),
18367
+ ...makeDimensionProps(),
18573
18368
  ...makeElevationProps(),
18369
+ ...makeRoundedProps(),
18574
18370
  ...makeSizeProps(),
18575
- ...makeTagProps(),
18576
- ...makeDimensionProps()
18371
+ ...makeTagProps()
18577
18372
  },
18578
18373
  setup(props, _ref) {
18579
18374
  let {
@@ -18593,11 +18388,11 @@
18593
18388
  useRender(() => vue.createVNode("div", {
18594
18389
  "class": ['v-timeline-item', {
18595
18390
  'v-timeline-item--fill-dot': props.fillDot
18596
- }],
18597
- "style": {
18391
+ }, props.class],
18392
+ "style": [{
18598
18393
  '--v-timeline-dot-size': convertToUnit(dotSize.value),
18599
18394
  '--v-timeline-line-inset': props.lineInset ? `calc(var(--v-timeline-dot-size) / 2 + ${convertToUnit(props.lineInset)})` : convertToUnit(0)
18600
- }
18395
+ }, props.style]
18601
18396
  }, [vue.createVNode("div", {
18602
18397
  "class": "v-timeline-item__body",
18603
18398
  "style": dimensionStyles.value
@@ -18673,7 +18468,8 @@
18673
18468
  const [overlayProps] = VOverlay.filterProps(props);
18674
18469
  return vue.createVNode(VOverlay, vue.mergeProps({
18675
18470
  "ref": overlay,
18676
- "class": ['v-tooltip'],
18471
+ "class": ['v-tooltip', props.class],
18472
+ "style": props.style,
18677
18473
  "id": id.value
18678
18474
  }, overlayProps, {
18679
18475
  "modelValue": isActive.value,
@@ -18721,7 +18517,8 @@
18721
18517
  const VVirtualScrollItem = genericComponent()({
18722
18518
  name: 'VVirtualScrollItem',
18723
18519
  props: {
18724
- dynamicHeight: Boolean
18520
+ dynamicHeight: Boolean,
18521
+ ...makeComponentProps()
18725
18522
  },
18726
18523
  emits: {
18727
18524
  'update:height': height => true
@@ -18748,7 +18545,8 @@
18748
18545
  vue.onUpdated(updateHeight);
18749
18546
  useRender(() => vue.createVNode("div", {
18750
18547
  "ref": props.dynamicHeight ? resizeRef : undefined,
18751
- "class": "v-virtual-scroll__item"
18548
+ "class": ['v-virtual-scroll__item', props.class],
18549
+ "style": props.style
18752
18550
  }, [slots.default?.()]));
18753
18551
  }
18754
18552
  });
@@ -18765,7 +18563,7 @@
18765
18563
  default: () => []
18766
18564
  },
18767
18565
  itemHeight: [Number, String],
18768
- visibleItems: [Number, String],
18566
+ ...makeComponentProps(),
18769
18567
  ...makeDimensionProps()
18770
18568
  },
18771
18569
  setup(props, _ref) {
@@ -18792,7 +18590,7 @@
18792
18590
  const sizeMap = new Map();
18793
18591
  let sizes = createRange(props.items.length).map(() => itemHeight.value);
18794
18592
  const visibleItems = vue.computed(() => {
18795
- return props.visibleItems ? parseInt(props.visibleItems, 10) : Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
18593
+ return Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
18796
18594
  });
18797
18595
  function handleItemResize(index, height) {
18798
18596
  itemHeight.value = Math.max(itemHeight.value, height);
@@ -18803,20 +18601,13 @@
18803
18601
  return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0);
18804
18602
  }
18805
18603
  function calculateMidPointIndex(scrollTop) {
18806
- let start = 0;
18807
- let end = props.items.length;
18808
- while (start <= end) {
18809
- const middle = start + Math.floor((end - start) / 2);
18810
- const middleOffset = calculateOffset(middle);
18811
- if (middleOffset === scrollTop) {
18812
- return middle;
18813
- } else if (middleOffset < scrollTop) {
18814
- start = middle + 1;
18815
- } else if (middleOffset > scrollTop) {
18816
- end = middle - 1;
18817
- }
18604
+ const end = props.items.length;
18605
+ let middle = 0;
18606
+ let middleOffset = 0;
18607
+ while (middleOffset < scrollTop && middle < end) {
18608
+ middleOffset += sizes[middle++] || itemHeight.value;
18818
18609
  }
18819
- return start;
18610
+ return middle - 1;
18820
18611
  }
18821
18612
  let lastScrollTop = 0;
18822
18613
  function handleScroll() {
@@ -18838,8 +18629,12 @@
18838
18629
  const offset = calculateOffset(index);
18839
18630
  rootEl.value.scrollTop = offset;
18840
18631
  }
18632
+ const items = vue.computed(() => props.items.map((item, index) => ({
18633
+ raw: item,
18634
+ index
18635
+ })));
18841
18636
  const last = vue.computed(() => Math.min(props.items.length, first.value + visibleItems.value));
18842
- const computedItems = vue.computed(() => props.items.slice(first.value, last.value));
18637
+ const computedItems = vue.computed(() => items.value.slice(first.value, last.value));
18843
18638
  const paddingTop = vue.computed(() => calculateOffset(first.value));
18844
18639
  const paddingBottom = vue.computed(() => calculateOffset(props.items.length) - calculateOffset(last.value));
18845
18640
  const {
@@ -18864,23 +18659,23 @@
18864
18659
  });
18865
18660
  useRender(() => vue.createVNode("div", {
18866
18661
  "ref": rootEl,
18867
- "class": "v-virtual-scroll",
18662
+ "class": ['v-virtual-scroll', props.class],
18868
18663
  "onScroll": handleScroll,
18869
- "style": dimensionStyles.value
18664
+ "style": [dimensionStyles.value, props.style]
18870
18665
  }, [vue.createVNode("div", {
18871
18666
  "class": "v-virtual-scroll__container",
18872
18667
  "style": {
18873
18668
  paddingTop: convertToUnit(paddingTop.value),
18874
18669
  paddingBottom: convertToUnit(paddingBottom.value)
18875
18670
  }
18876
- }, [computedItems.value.map((item, index) => vue.createVNode(VVirtualScrollItem, {
18877
- "key": index,
18671
+ }, [computedItems.value.map(item => vue.createVNode(VVirtualScrollItem, {
18672
+ "key": item.index,
18878
18673
  "dynamicHeight": !props.itemHeight,
18879
- "onUpdate:height": height => handleItemResize(index + first.value, height)
18674
+ "onUpdate:height": height => handleItemResize(item.index, height)
18880
18675
  }, {
18881
18676
  default: () => [slots.default?.({
18882
- item,
18883
- index: index + first.value
18677
+ item: item.raw,
18678
+ index: item.index
18884
18679
  })]
18885
18680
  }))])]));
18886
18681
  return {
@@ -19314,6 +19109,17 @@
19314
19109
  backgroundColorClasses,
19315
19110
  backgroundColorStyles
19316
19111
  } = useBackgroundColor(props, 'color');
19112
+ const slotProps = vue.computed(() => ({
19113
+ headers: headers.value,
19114
+ columns: columns.value,
19115
+ toggleSort,
19116
+ sortBy: sortBy.value,
19117
+ someSelected: someSelected.value,
19118
+ allSelected: allSelected.value,
19119
+ selectAll,
19120
+ getSortIcon,
19121
+ getFixedStyles
19122
+ }));
19317
19123
  const VDataTableHeaderCell = _ref2 => {
19318
19124
  let {
19319
19125
  column,
@@ -19341,14 +19147,14 @@
19341
19147
  "noPadding": noPadding
19342
19148
  }, {
19343
19149
  default: () => {
19344
- const slotName = `column.${column.key}`;
19345
- const slotProps = {
19150
+ const columnSlotName = `column.${column.key}`;
19151
+ const columnSlotProps = {
19346
19152
  column,
19347
19153
  selectAll
19348
19154
  };
19349
- if (slots[slotName]) return slots[slotName](slotProps);
19155
+ if (slots[columnSlotName]) return slots[columnSlotName](columnSlotProps);
19350
19156
  if (column.key === 'data-table-select') {
19351
- return slots['column.data-table-select']?.(slotProps) ?? vue.createVNode(VCheckboxBtn, {
19157
+ return slots['column.data-table-select']?.(columnSlotProps) ?? vue.createVNode(VCheckboxBtn, {
19352
19158
  "modelValue": allSelected.value,
19353
19159
  "indeterminate": someSelected.value && !allSelected.value,
19354
19160
  "onUpdate:modelValue": selectAll
@@ -19368,22 +19174,24 @@
19368
19174
  }
19369
19175
  });
19370
19176
  };
19371
- useRender(() => vue.createVNode(vue.Fragment, null, [headers.value.map((row, y) => vue.createVNode("tr", null, [row.map((column, x) => vue.createVNode(VDataTableHeaderCell, {
19372
- "column": column,
19373
- "x": x,
19374
- "y": y
19375
- }, null))])), props.loading && vue.createVNode("tr", {
19376
- "class": "v-data-table__progress"
19377
- }, [vue.createVNode("th", {
19378
- "colspan": columns.value.length
19379
- }, [vue.createVNode(LoaderSlot, {
19380
- "name": "v-data-table-headers",
19381
- "active": true,
19382
- "color": typeof props.loading === 'boolean' ? undefined : props.loading,
19383
- "indeterminate": true
19384
- }, {
19385
- default: slots.loader
19386
- })])])]));
19177
+ useRender(() => {
19178
+ return vue.createVNode(vue.Fragment, null, [slots.headers ? slots.headers(slotProps.value) : headers.value.map((row, y) => vue.createVNode("tr", null, [row.map((column, x) => vue.createVNode(VDataTableHeaderCell, {
19179
+ "column": column,
19180
+ "x": x,
19181
+ "y": y
19182
+ }, null))])), props.loading && vue.createVNode("tr", {
19183
+ "class": "v-data-table__progress"
19184
+ }, [vue.createVNode("th", {
19185
+ "colspan": columns.value.length
19186
+ }, [vue.createVNode(LoaderSlot, {
19187
+ "name": "v-data-table-headers",
19188
+ "active": true,
19189
+ "color": typeof props.loading === 'boolean' ? undefined : props.loading,
19190
+ "indeterminate": true
19191
+ }, {
19192
+ default: slots.loader
19193
+ })])])]);
19194
+ });
19387
19195
  }
19388
19196
  });
19389
19197
 
@@ -19682,9 +19490,7 @@
19682
19490
  'v-data-table__tr--clickable': !!props.onClick
19683
19491
  }],
19684
19492
  "onClick": props.onClick
19685
- }, [!columns.value.length && vue.createVNode(VDataTableColumn, {
19686
- "key": "no-data"
19687
- }, slots), props.item && columns.value.map((column, i) => vue.createVNode(VDataTableColumn, {
19493
+ }, [props.item && columns.value.map((column, i) => vue.createVNode(VDataTableColumn, {
19688
19494
  "align": column.align,
19689
19495
  "fixed": column.fixed,
19690
19496
  "fixedOffset": column.fixedOffset,
@@ -19774,13 +19580,13 @@
19774
19580
  useRender(() => {
19775
19581
  if (props.loading && slots.loading) {
19776
19582
  return vue.createVNode("tr", {
19777
- "class": "v-data-table-rows-no-data",
19583
+ "class": "v-data-table-rows-loading",
19778
19584
  "key": "loading"
19779
19585
  }, [vue.createVNode("td", {
19780
19586
  "colspan": columns.value.length
19781
19587
  }, [slots.loading()])]);
19782
19588
  }
19783
- if (!props.loading && !props.items.length && !props.hideNoData && slots['no-data']) {
19589
+ if (!props.loading && !props.items.length && !props.hideNoData) {
19784
19590
  return vue.createVNode("tr", {
19785
19591
  "class": "v-data-table-rows-no-data",
19786
19592
  "key": "no-data"
@@ -19874,6 +19680,11 @@
19874
19680
  if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;
19875
19681
  return Math.ceil(itemsLength.value / itemsPerPage.value);
19876
19682
  });
19683
+ vue.watchEffect(() => {
19684
+ if (page.value > pageCount.value) {
19685
+ page.value = pageCount.value;
19686
+ }
19687
+ });
19877
19688
  function setItemsPerPage(value) {
19878
19689
  itemsPerPage.value = value;
19879
19690
  page.value = 1;
@@ -20137,6 +19948,11 @@
20137
19948
  width: [String, Number],
20138
19949
  fixedHeader: Boolean,
20139
19950
  fixedFooter: Boolean,
19951
+ loading: [Boolean, String],
19952
+ loadingText: {
19953
+ type: String,
19954
+ default: '$vuetify.dataIterator.loadingText'
19955
+ },
20140
19956
  'onClick:row': Function,
20141
19957
  search: String
20142
19958
  }, 'v-data-table');
@@ -20244,12 +20060,15 @@
20244
20060
  provideDefaults({
20245
20061
  VDataTableRows: {
20246
20062
  hideNoData: vue.toRef(props, 'hideNoData'),
20247
- noDataText: vue.toRef(props, 'noDataText')
20063
+ noDataText: vue.toRef(props, 'noDataText'),
20064
+ loading: vue.toRef(props, 'loading'),
20065
+ loadingText: vue.toRef(props, 'loadingText')
20248
20066
  }
20249
20067
  });
20250
20068
  useRender(() => vue.createVNode(VTable, {
20251
20069
  "class": ['v-data-table', {
20252
- 'v-data-table--show-select': props.showSelect
20070
+ 'v-data-table--show-select': props.showSelect,
20071
+ 'v-data-table--loading': props.loading
20253
20072
  }],
20254
20073
  "fixedHeader": props.fixedHeader,
20255
20074
  "fixedFooter": props.fixedFooter,
@@ -20259,8 +20078,9 @@
20259
20078
  top: slots.top,
20260
20079
  default: slots.default ?? (() => vue.createVNode(vue.Fragment, null, [slots.colgroup?.({
20261
20080
  columns
20262
- }), vue.createVNode("thead", null, [slots.headers ? slots.headers() : vue.createVNode(VDataTableHeaders, {
20081
+ }), vue.createVNode("thead", null, [vue.createVNode(VDataTableHeaders, {
20263
20082
  "sticky": props.fixedHeader,
20083
+ "loading": props.loading,
20264
20084
  "multiSort": props.multiSort
20265
20085
  }, slots)]), slots.thead?.(), vue.createVNode("tbody", null, [slots.body ? slots.body() : vue.createVNode(VDataTableRows, {
20266
20086
  "items": paginatedItems.value,
@@ -20450,11 +20270,15 @@
20450
20270
  provideDefaults({
20451
20271
  VDataTableRows: {
20452
20272
  hideNoData: vue.toRef(props, 'hideNoData'),
20453
- noDataText: vue.toRef(props, 'noDataText')
20273
+ noDataText: vue.toRef(props, 'noDataText'),
20274
+ loading: vue.toRef(props, 'loading'),
20275
+ loadingText: vue.toRef(props, 'loadingText')
20454
20276
  }
20455
20277
  });
20456
20278
  useRender(() => vue.createVNode(VTable, {
20457
- "class": "v-data-table",
20279
+ "class": ['v-data-table', {
20280
+ 'v-data-table--loading': props.loading
20281
+ }],
20458
20282
  "style": {
20459
20283
  '--v-table-row-height': convertToUnit(itemHeight.value)
20460
20284
  },
@@ -20473,6 +20297,7 @@
20473
20297
  }
20474
20298
  }, [vue.createVNode("table", null, [vue.createVNode("thead", null, [vue.createVNode(VDataTableHeaders, {
20475
20299
  "sticky": props.fixedHeader,
20300
+ "loading": props.loading,
20476
20301
  "multiSort": props.multiSort
20477
20302
  }, slots)]), vue.createVNode("tbody", null, [vue.createVNode("tr", {
20478
20303
  "style": {
@@ -20511,11 +20336,6 @@
20511
20336
  name: 'VDataTableServer',
20512
20337
  props: {
20513
20338
  color: String,
20514
- loading: [Boolean, String],
20515
- loadingText: {
20516
- type: String,
20517
- default: '$vuetify.dataIterator.loadingText'
20518
- },
20519
20339
  itemsLength: {
20520
20340
  type: [Number, String],
20521
20341
  required: true
@@ -20625,7 +20445,7 @@
20625
20445
  }), vue.createVNode("thead", {
20626
20446
  "class": "v-data-table__thead",
20627
20447
  "role": "rowgroup"
20628
- }, [slots.headers ? slots.headers() : vue.createVNode(VDataTableHeaders, {
20448
+ }, [vue.createVNode(VDataTableHeaders, {
20629
20449
  "sticky": props.fixedHeader,
20630
20450
  "loading": props.loading,
20631
20451
  "color": props.color
@@ -21127,130 +20947,542 @@
21127
20947
 
21128
20948
  // Types
21129
20949
 
21130
- function mounted$2(el, binding) {
21131
- const modifiers = binding.modifiers || {};
21132
- const value = binding.value;
21133
- const {
21134
- once,
21135
- immediate,
21136
- ...modifierKeys
21137
- } = modifiers;
21138
- const defaultValue = !Object.keys(modifierKeys).length;
21139
- const {
21140
- handler,
21141
- options
21142
- } = typeof value === 'object' ? value : {
21143
- handler: value,
21144
- options: {
21145
- attributes: modifierKeys?.attr ?? defaultValue,
21146
- characterData: modifierKeys?.char ?? defaultValue,
21147
- childList: modifierKeys?.child ?? defaultValue,
21148
- subtree: modifierKeys?.sub ?? defaultValue
20950
+ function mounted$2(el, binding) {
20951
+ const modifiers = binding.modifiers || {};
20952
+ const value = binding.value;
20953
+ const {
20954
+ once,
20955
+ immediate,
20956
+ ...modifierKeys
20957
+ } = modifiers;
20958
+ const defaultValue = !Object.keys(modifierKeys).length;
20959
+ const {
20960
+ handler,
20961
+ options
20962
+ } = typeof value === 'object' ? value : {
20963
+ handler: value,
20964
+ options: {
20965
+ attributes: modifierKeys?.attr ?? defaultValue,
20966
+ characterData: modifierKeys?.char ?? defaultValue,
20967
+ childList: modifierKeys?.child ?? defaultValue,
20968
+ subtree: modifierKeys?.sub ?? defaultValue
20969
+ }
20970
+ };
20971
+ const observer = new MutationObserver(function () {
20972
+ let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
20973
+ let observer = arguments.length > 1 ? arguments[1] : undefined;
20974
+ handler?.(mutations, observer);
20975
+ if (once) unmounted$2(el, binding);
20976
+ });
20977
+ if (immediate) handler?.([], observer);
20978
+ el._mutate = Object(el._mutate);
20979
+ el._mutate[binding.instance.$.uid] = {
20980
+ observer
20981
+ };
20982
+ observer.observe(el, options);
20983
+ }
20984
+ function unmounted$2(el, binding) {
20985
+ if (!el._mutate?.[binding.instance.$.uid]) return;
20986
+ el._mutate[binding.instance.$.uid].observer.disconnect();
20987
+ delete el._mutate[binding.instance.$.uid];
20988
+ }
20989
+ const Mutate = {
20990
+ mounted: mounted$2,
20991
+ unmounted: unmounted$2
20992
+ };
20993
+
20994
+ function mounted$1(el, binding) {
20995
+ const handler = binding.value;
20996
+ const options = {
20997
+ passive: !binding.modifiers?.active
20998
+ };
20999
+ window.addEventListener('resize', handler, options);
21000
+ el._onResize = Object(el._onResize);
21001
+ el._onResize[binding.instance.$.uid] = {
21002
+ handler,
21003
+ options
21004
+ };
21005
+ if (!binding.modifiers?.quiet) {
21006
+ handler();
21007
+ }
21008
+ }
21009
+ function unmounted$1(el, binding) {
21010
+ if (!el._onResize?.[binding.instance.$.uid]) return;
21011
+ const {
21012
+ handler,
21013
+ options
21014
+ } = el._onResize[binding.instance.$.uid];
21015
+ window.removeEventListener('resize', handler, options);
21016
+ delete el._onResize[binding.instance.$.uid];
21017
+ }
21018
+ const Resize = {
21019
+ mounted: mounted$1,
21020
+ unmounted: unmounted$1
21021
+ };
21022
+
21023
+ function mounted(el, binding) {
21024
+ const {
21025
+ self = false
21026
+ } = binding.modifiers ?? {};
21027
+ const value = binding.value;
21028
+ const options = typeof value === 'object' && value.options || {
21029
+ passive: true
21030
+ };
21031
+ const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler;
21032
+ const target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
21033
+ if (!target) return;
21034
+ target.addEventListener('scroll', handler, options);
21035
+ el._onScroll = Object(el._onScroll);
21036
+ el._onScroll[binding.instance.$.uid] = {
21037
+ handler,
21038
+ options,
21039
+ // Don't reference self
21040
+ target: self ? undefined : target
21041
+ };
21042
+ }
21043
+ function unmounted(el, binding) {
21044
+ if (!el._onScroll?.[binding.instance.$.uid]) return;
21045
+ const {
21046
+ handler,
21047
+ options,
21048
+ target = el
21049
+ } = el._onScroll[binding.instance.$.uid];
21050
+ target.removeEventListener('scroll', handler, options);
21051
+ delete el._onScroll[binding.instance.$.uid];
21052
+ }
21053
+ function updated(el, binding) {
21054
+ if (binding.value === binding.oldValue) return;
21055
+ unmounted(el, binding);
21056
+ mounted(el, binding);
21057
+ }
21058
+ const Scroll = {
21059
+ mounted,
21060
+ unmounted,
21061
+ updated
21062
+ };
21063
+
21064
+ var directives = /*#__PURE__*/Object.freeze({
21065
+ __proto__: null,
21066
+ ClickOutside: ClickOutside,
21067
+ Intersect: Intersect,
21068
+ Mutate: Mutate,
21069
+ Resize: Resize,
21070
+ Ripple: Ripple,
21071
+ Scroll: Scroll,
21072
+ Touch: Touch
21073
+ });
21074
+
21075
+ // Utilities
21076
+
21077
+ // Types
21078
+
21079
+ function getWeekArray(date) {
21080
+ let currentWeek = [];
21081
+ const weeks = [];
21082
+ const firstDayOfMonth = startOfMonth(date);
21083
+ const lastDayOfMonth = endOfMonth(date);
21084
+ for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
21085
+ currentWeek.push(null);
21086
+ }
21087
+ for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
21088
+ const day = new Date(date.getFullYear(), date.getMonth(), i);
21089
+
21090
+ // Add the day to the current week
21091
+ currentWeek.push(day);
21092
+
21093
+ // If the current week has 7 days, add it to the weeks array and start a new week
21094
+ if (currentWeek.length === 7) {
21095
+ weeks.push(currentWeek);
21096
+ currentWeek = [];
21149
21097
  }
21150
- };
21151
- const observer = new MutationObserver(function () {
21152
- let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
21153
- let observer = arguments.length > 1 ? arguments[1] : undefined;
21154
- handler?.(mutations, observer);
21155
- if (once) unmounted$2(el, binding);
21098
+ }
21099
+ for (let i = currentWeek.length; i < 7; i++) {
21100
+ currentWeek.push(null);
21101
+ }
21102
+ weeks.push(currentWeek);
21103
+ return weeks;
21104
+ }
21105
+ function startOfMonth(date) {
21106
+ return new Date(date.getFullYear(), date.getMonth(), 1);
21107
+ }
21108
+ function endOfMonth(date) {
21109
+ return new Date(date.getFullYear(), date.getMonth() + 1, 0);
21110
+ }
21111
+ function date(value) {
21112
+ if (value == null) return null;
21113
+ if (value instanceof Date) return value;
21114
+ if (typeof value === 'string') {
21115
+ const parsed = Date.parse(value);
21116
+ if (!isNaN(parsed)) return new Date(parsed);
21117
+ }
21118
+ return null;
21119
+ }
21120
+ const firstDay = {
21121
+ '001': 1,
21122
+ AD: 1,
21123
+ AE: 6,
21124
+ AF: 6,
21125
+ AG: 0,
21126
+ AI: 1,
21127
+ AL: 1,
21128
+ AM: 1,
21129
+ AN: 1,
21130
+ AR: 1,
21131
+ AS: 0,
21132
+ AT: 1,
21133
+ AU: 0,
21134
+ AX: 1,
21135
+ AZ: 1,
21136
+ BA: 1,
21137
+ BD: 0,
21138
+ BE: 1,
21139
+ BG: 1,
21140
+ BH: 6,
21141
+ BM: 1,
21142
+ BN: 1,
21143
+ BR: 0,
21144
+ BS: 0,
21145
+ BT: 0,
21146
+ BW: 0,
21147
+ BY: 1,
21148
+ BZ: 0,
21149
+ CA: 0,
21150
+ CH: 1,
21151
+ CL: 1,
21152
+ CM: 1,
21153
+ CN: 0,
21154
+ CO: 0,
21155
+ CR: 1,
21156
+ CY: 1,
21157
+ CZ: 1,
21158
+ DE: 1,
21159
+ DJ: 6,
21160
+ DK: 1,
21161
+ DM: 0,
21162
+ DO: 0,
21163
+ DZ: 6,
21164
+ EC: 1,
21165
+ EE: 1,
21166
+ EG: 6,
21167
+ ES: 1,
21168
+ ET: 0,
21169
+ FI: 1,
21170
+ FJ: 1,
21171
+ FO: 1,
21172
+ FR: 1,
21173
+ GB: 1,
21174
+ 'GB-alt-variant': 0,
21175
+ GE: 1,
21176
+ GF: 1,
21177
+ GP: 1,
21178
+ GR: 1,
21179
+ GT: 0,
21180
+ GU: 0,
21181
+ HK: 0,
21182
+ HN: 0,
21183
+ HR: 1,
21184
+ HU: 1,
21185
+ ID: 0,
21186
+ IE: 1,
21187
+ IL: 0,
21188
+ IN: 0,
21189
+ IQ: 6,
21190
+ IR: 6,
21191
+ IS: 1,
21192
+ IT: 1,
21193
+ JM: 0,
21194
+ JO: 6,
21195
+ JP: 0,
21196
+ KE: 0,
21197
+ KG: 1,
21198
+ KH: 0,
21199
+ KR: 0,
21200
+ KW: 6,
21201
+ KZ: 1,
21202
+ LA: 0,
21203
+ LB: 1,
21204
+ LI: 1,
21205
+ LK: 1,
21206
+ LT: 1,
21207
+ LU: 1,
21208
+ LV: 1,
21209
+ LY: 6,
21210
+ MC: 1,
21211
+ MD: 1,
21212
+ ME: 1,
21213
+ MH: 0,
21214
+ MK: 1,
21215
+ MM: 0,
21216
+ MN: 1,
21217
+ MO: 0,
21218
+ MQ: 1,
21219
+ MT: 0,
21220
+ MV: 5,
21221
+ MX: 0,
21222
+ MY: 1,
21223
+ MZ: 0,
21224
+ NI: 0,
21225
+ NL: 1,
21226
+ NO: 1,
21227
+ NP: 0,
21228
+ NZ: 1,
21229
+ OM: 6,
21230
+ PA: 0,
21231
+ PE: 0,
21232
+ PH: 0,
21233
+ PK: 0,
21234
+ PL: 1,
21235
+ PR: 0,
21236
+ PT: 0,
21237
+ PY: 0,
21238
+ QA: 6,
21239
+ RE: 1,
21240
+ RO: 1,
21241
+ RS: 1,
21242
+ RU: 1,
21243
+ SA: 0,
21244
+ SD: 6,
21245
+ SE: 1,
21246
+ SG: 0,
21247
+ SI: 1,
21248
+ SK: 1,
21249
+ SM: 1,
21250
+ SV: 0,
21251
+ SY: 6,
21252
+ TH: 0,
21253
+ TJ: 1,
21254
+ TM: 1,
21255
+ TR: 1,
21256
+ TT: 0,
21257
+ TW: 0,
21258
+ UA: 1,
21259
+ UM: 0,
21260
+ US: 0,
21261
+ UY: 1,
21262
+ UZ: 1,
21263
+ VA: 1,
21264
+ VE: 0,
21265
+ VI: 0,
21266
+ VN: 1,
21267
+ WS: 0,
21268
+ XK: 1,
21269
+ YE: 0,
21270
+ ZA: 0,
21271
+ ZW: 0
21272
+ };
21273
+ const sundayJanuarySecond2000 = new Date(2000, 0, 2);
21274
+ function getWeekdays(locale) {
21275
+ const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
21276
+ return createRange(7).map(i => {
21277
+ const weekday = new Date(sundayJanuarySecond2000);
21278
+ weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
21279
+ return new Intl.DateTimeFormat(locale, {
21280
+ weekday: 'long'
21281
+ }).format(weekday);
21156
21282
  });
21157
- if (immediate) handler?.([], observer);
21158
- el._mutate = Object(el._mutate);
21159
- el._mutate[binding.instance.$.uid] = {
21160
- observer
21161
- };
21162
- observer.observe(el, options);
21163
21283
  }
21164
- function unmounted$2(el, binding) {
21165
- if (!el._mutate?.[binding.instance.$.uid]) return;
21166
- el._mutate[binding.instance.$.uid].observer.disconnect();
21167
- delete el._mutate[binding.instance.$.uid];
21284
+ function format(value, formatString, locale) {
21285
+ const date = new Date(value);
21286
+ let options = {};
21287
+ switch (formatString) {
21288
+ case 'fullDateWithWeekday':
21289
+ options = {
21290
+ weekday: 'long',
21291
+ day: 'numeric',
21292
+ month: 'long',
21293
+ year: 'numeric'
21294
+ };
21295
+ break;
21296
+ case 'normalDateWithWeekday':
21297
+ options = {
21298
+ weekday: 'short',
21299
+ day: 'numeric',
21300
+ month: 'short',
21301
+ year: 'numeric'
21302
+ };
21303
+ break;
21304
+ case 'keyboardDate':
21305
+ options = {};
21306
+ break;
21307
+ case 'monthAndDate':
21308
+ options = {
21309
+ month: 'long',
21310
+ day: 'numeric'
21311
+ };
21312
+ break;
21313
+ case 'monthAndYear':
21314
+ options = {
21315
+ month: 'long',
21316
+ year: 'numeric'
21317
+ };
21318
+ break;
21319
+ default:
21320
+ options = {
21321
+ timeZone: 'UTC',
21322
+ timeZoneName: 'short'
21323
+ };
21324
+ }
21325
+ return new Intl.DateTimeFormat(locale, options).format(date);
21326
+ }
21327
+ function addDays(date, amount) {
21328
+ const d = new Date(date);
21329
+ d.setDate(d.getDate() + amount);
21330
+ return d;
21331
+ }
21332
+ function addMonths(date, amount) {
21333
+ const d = new Date(date);
21334
+ d.setMonth(d.getMonth() + amount);
21335
+ return d;
21336
+ }
21337
+ function getYear(date) {
21338
+ return date.getFullYear();
21339
+ }
21340
+ function getMonth(date) {
21341
+ return date.getMonth();
21342
+ }
21343
+ function startOfYear(date) {
21344
+ return new Date(date.getFullYear(), 0, 1);
21345
+ }
21346
+ function endOfYear(date) {
21347
+ return new Date(date.getFullYear(), 11, 31);
21348
+ }
21349
+ function getMondayOfFirstWeekOfYear(year) {
21350
+ return new Date(year, 0, 1);
21168
21351
  }
21169
- const Mutate = {
21170
- mounted: mounted$2,
21171
- unmounted: unmounted$2
21172
- };
21173
21352
 
21174
- function mounted$1(el, binding) {
21175
- const handler = binding.value;
21176
- const options = {
21177
- passive: !binding.modifiers?.active
21178
- };
21179
- window.addEventListener('resize', handler, options);
21180
- el._onResize = Object(el._onResize);
21181
- el._onResize[binding.instance.$.uid] = {
21182
- handler,
21183
- options
21184
- };
21185
- if (!binding.modifiers?.quiet) {
21186
- handler();
21353
+ // https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
21354
+ function getWeek(date) {
21355
+ let year = date.getFullYear();
21356
+ let d1w1 = getMondayOfFirstWeekOfYear(year);
21357
+ if (date < d1w1) {
21358
+ year = year - 1;
21359
+ d1w1 = getMondayOfFirstWeekOfYear(year);
21360
+ } else {
21361
+ const tv = getMondayOfFirstWeekOfYear(year + 1);
21362
+ if (date >= tv) {
21363
+ year = year + 1;
21364
+ d1w1 = tv;
21365
+ }
21187
21366
  }
21367
+ const diffTime = Math.abs(date.getTime() - d1w1.getTime());
21368
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
21369
+ return Math.floor(diffDays / 7) + 1;
21188
21370
  }
21189
- function unmounted$1(el, binding) {
21190
- if (!el._onResize?.[binding.instance.$.uid]) return;
21191
- const {
21192
- handler,
21193
- options
21194
- } = el._onResize[binding.instance.$.uid];
21195
- window.removeEventListener('resize', handler, options);
21196
- delete el._onResize[binding.instance.$.uid];
21371
+ function isWithinRange(date, range) {
21372
+ return isAfter(date, range[0]) && isBefore(date, range[1]);
21197
21373
  }
21198
- const Resize = {
21199
- mounted: mounted$1,
21200
- unmounted: unmounted$1
21201
- };
21202
-
21203
- function mounted(el, binding) {
21204
- const {
21205
- self = false
21206
- } = binding.modifiers ?? {};
21207
- const value = binding.value;
21208
- const options = typeof value === 'object' && value.options || {
21209
- passive: true
21210
- };
21211
- const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler;
21212
- const target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
21213
- if (!target) return;
21214
- target.addEventListener('scroll', handler, options);
21215
- el._onScroll = Object(el._onScroll);
21216
- el._onScroll[binding.instance.$.uid] = {
21217
- handler,
21218
- options,
21219
- // Don't reference self
21220
- target: self ? undefined : target
21221
- };
21374
+ function isValid(date) {
21375
+ const d = new Date(date);
21376
+ return d instanceof Date && !isNaN(d.getTime());
21222
21377
  }
21223
- function unmounted(el, binding) {
21224
- if (!el._onScroll?.[binding.instance.$.uid]) return;
21225
- const {
21226
- handler,
21227
- options,
21228
- target = el
21229
- } = el._onScroll[binding.instance.$.uid];
21230
- target.removeEventListener('scroll', handler, options);
21231
- delete el._onScroll[binding.instance.$.uid];
21378
+ function isAfter(date, comparing) {
21379
+ return date.getTime() > comparing.getTime();
21232
21380
  }
21233
- function updated(el, binding) {
21234
- if (binding.value === binding.oldValue) return;
21235
- unmounted(el, binding);
21236
- mounted(el, binding);
21381
+ function isBefore(date, comparing) {
21382
+ return date.getTime() < comparing.getTime();
21383
+ }
21384
+ function isEqual(date, comparing) {
21385
+ return date.getTime() === comparing.getTime();
21386
+ }
21387
+ function isSameDay(date, comparing) {
21388
+ return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21389
+ }
21390
+ function isSameMonth(date, comparing) {
21391
+ return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
21392
+ }
21393
+ function getDiff(date, comparing, unit) {
21394
+ const d = new Date(date);
21395
+ const c = new Date(comparing);
21396
+ if (unit === 'month') {
21397
+ return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
21398
+ }
21399
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
21400
+ }
21401
+ function setYear(date, year) {
21402
+ const d = new Date(date);
21403
+ d.setFullYear(year);
21404
+ return d;
21405
+ }
21406
+ class VuetifyDateAdapter {
21407
+ constructor() {
21408
+ let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
21409
+ this.locale = locale;
21410
+ }
21411
+ date(value) {
21412
+ return date(value);
21413
+ }
21414
+ addDays(date, amount) {
21415
+ return addDays(date, amount);
21416
+ }
21417
+ addMonths(date, amount) {
21418
+ return addMonths(date, amount);
21419
+ }
21420
+ getWeekArray(date) {
21421
+ return getWeekArray(date);
21422
+ }
21423
+ startOfMonth(date) {
21424
+ return startOfMonth(date);
21425
+ }
21426
+ endOfMonth(date) {
21427
+ return endOfMonth(date);
21428
+ }
21429
+ format(date, formatString) {
21430
+ return format(date, formatString, this.locale);
21431
+ }
21432
+ isEqual(date, comparing) {
21433
+ return isEqual(date, comparing);
21434
+ }
21435
+ isValid(date) {
21436
+ return isValid(date);
21437
+ }
21438
+ isWithinRange(date, range) {
21439
+ return isWithinRange(date, range);
21440
+ }
21441
+ isAfter(date, comparing) {
21442
+ return isAfter(date, comparing);
21443
+ }
21444
+ isSameDay(date, comparing) {
21445
+ return isSameDay(date, comparing);
21446
+ }
21447
+ isSameMonth(date, comparing) {
21448
+ return isSameMonth(date, comparing);
21449
+ }
21450
+ setYear(date, year) {
21451
+ return setYear(date, year);
21452
+ }
21453
+ getDiff(date, comparing, unit) {
21454
+ return getDiff(date, comparing, unit);
21455
+ }
21456
+ getWeek(date) {
21457
+ return getWeek(date);
21458
+ }
21459
+ getWeekdays() {
21460
+ return getWeekdays(this.locale);
21461
+ }
21462
+ getYear(date) {
21463
+ return getYear(date);
21464
+ }
21465
+ getMonth(date) {
21466
+ return getMonth(date);
21467
+ }
21468
+ startOfYear(date) {
21469
+ return startOfYear(date);
21470
+ }
21471
+ endOfYear(date) {
21472
+ return endOfYear(date);
21473
+ }
21237
21474
  }
21238
- const Scroll = {
21239
- mounted,
21240
- unmounted,
21241
- updated
21242
- };
21243
21475
 
21244
- var directives = /*#__PURE__*/Object.freeze({
21245
- __proto__: null,
21246
- ClickOutside: ClickOutside,
21247
- Intersect: Intersect,
21248
- Mutate: Mutate,
21249
- Resize: Resize,
21250
- Ripple: Ripple,
21251
- Scroll: Scroll,
21252
- Touch: Touch
21253
- });
21476
+ // Composables
21477
+
21478
+ // Types
21479
+
21480
+ const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
21481
+ function createDate(options) {
21482
+ return options ?? {
21483
+ adapter: VuetifyDateAdapter
21484
+ };
21485
+ }
21254
21486
 
21255
21487
  // Composables
21256
21488
  function createVuetify$1() {
@@ -21337,7 +21569,7 @@
21337
21569
  date
21338
21570
  };
21339
21571
  }
21340
- const version$1 = "4.0.0-dev-20230426.0";
21572
+ const version$1 = "4.0.0-dev-20230511.0";
21341
21573
  createVuetify$1.version = version$1;
21342
21574
 
21343
21575
  // Vue's inject() can only be used in setup
@@ -21349,7 +21581,7 @@
21349
21581
  }
21350
21582
  }
21351
21583
 
21352
- const version = "4.0.0-dev-20230426.0";
21584
+ const version = "4.0.0-dev-20230511.0";
21353
21585
 
21354
21586
  const createVuetify = function () {
21355
21587
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
@@ -21363,7 +21595,7 @@
21363
21595
  exports.components = components;
21364
21596
  exports.createVuetify = createVuetify;
21365
21597
  exports.directives = directives;
21366
- exports.useDate = useDate;
21598
+ exports.useDefaults = useDefaults;
21367
21599
  exports.useDisplay = useDisplay;
21368
21600
  exports.useLayout = useLayout;
21369
21601
  exports.useLocale = useLocale;