@vuetify/nightly 3.2.0-dev-20230214.0 → 3.2.0-dev-20230322.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 (336) hide show
  1. package/CHANGELOG.md +5 -17
  2. package/dist/json/attributes.json +243 -59
  3. package/dist/json/tags.json +48 -2
  4. package/dist/json/web-types.json +1648 -279
  5. package/dist/vuetify-labs.css +666 -482
  6. package/dist/vuetify-labs.d.ts +59419 -13475
  7. package/dist/vuetify-labs.esm.js +797 -531
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +797 -531
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +524 -355
  12. package/dist/vuetify.d.ts +55670 -14368
  13. package/dist/vuetify.esm.js +607 -462
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +607 -462
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +793 -793
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/blueprints/index.d.ts +6 -9
  21. package/lib/blueprints/md1.d.ts +6 -9
  22. package/lib/blueprints/md2.d.ts +6 -9
  23. package/lib/blueprints/md3.d.ts +6 -9
  24. package/lib/blueprints/md3.mjs +6 -0
  25. package/lib/blueprints/md3.mjs.map +1 -1
  26. package/lib/components/VAlert/VAlert.css +1 -1
  27. package/lib/components/VAlert/VAlert.mjs +29 -15
  28. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  29. package/lib/components/VAlert/_variables.scss +1 -1
  30. package/lib/components/VAlert/index.d.ts +515 -65
  31. package/lib/components/VApp/VApp.css +1 -0
  32. package/lib/components/VApp/VApp.sass +1 -0
  33. package/lib/components/VApp/index.d.ts +161 -17
  34. package/lib/components/VAppBar/VAppBar.mjs +9 -4
  35. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  36. package/lib/components/VAppBar/index.d.ts +624 -82
  37. package/lib/components/VAutocomplete/VAutocomplete.mjs +23 -8
  38. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  39. package/lib/components/VAutocomplete/index.d.ts +1744 -113
  40. package/lib/components/VAvatar/index.d.ts +207 -25
  41. package/lib/components/VBadge/index.d.ts +286 -36
  42. package/lib/components/VBanner/VBanner.mjs +19 -12
  43. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  44. package/lib/components/VBanner/index.d.ts +485 -67
  45. package/lib/components/VBottomNavigation/VBottomNavigation.mjs +6 -2
  46. package/lib/components/VBottomNavigation/VBottomNavigation.mjs.map +1 -1
  47. package/lib/components/VBottomNavigation/index.d.ts +323 -36
  48. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +11 -7
  49. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  50. package/lib/components/VBreadcrumbs/index.d.ts +346 -42
  51. package/lib/components/VBtn/VBtn.css +0 -5
  52. package/lib/components/VBtn/VBtn.mjs +65 -58
  53. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  54. package/lib/components/VBtn/VBtn.sass +0 -7
  55. package/lib/components/VBtn/_variables.scss +0 -2
  56. package/lib/components/VBtn/index.d.ts +454 -59
  57. package/lib/components/VBtnGroup/VBtnGroup.mjs +1 -7
  58. package/lib/components/VBtnGroup/VBtnGroup.mjs.map +1 -1
  59. package/lib/components/VBtnGroup/index.d.ts +187 -22
  60. package/lib/components/VBtnToggle/VBtnToggle.mjs +2 -2
  61. package/lib/components/VBtnToggle/VBtnToggle.mjs.map +1 -1
  62. package/lib/components/VBtnToggle/index.d.ts +248 -32
  63. package/lib/components/VCard/VCard.mjs +10 -6
  64. package/lib/components/VCard/VCard.mjs.map +1 -1
  65. package/lib/components/VCard/VCardItem.mjs +27 -23
  66. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  67. package/lib/components/VCard/index.d.ts +958 -132
  68. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  69. package/lib/components/VCarousel/index.d.ts +585 -87
  70. package/lib/components/VCheckbox/VCheckbox.mjs +2 -2
  71. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  72. package/lib/components/VCheckbox/VCheckboxBtn.mjs +1 -4
  73. package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
  74. package/lib/components/VCheckbox/index.d.ts +841 -119
  75. package/lib/components/VChip/VChip.css +110 -90
  76. package/lib/components/VChip/VChip.mjs +70 -48
  77. package/lib/components/VChip/VChip.mjs.map +1 -1
  78. package/lib/components/VChip/_mixins.scss +27 -23
  79. package/lib/components/VChip/index.d.ts +476 -66
  80. package/lib/components/VChipGroup/VChipGroup.mjs.map +1 -1
  81. package/lib/components/VChipGroup/index.d.ts +229 -28
  82. package/lib/components/VCode/index.d.ts +112 -13
  83. package/lib/components/VColorPicker/VColorPicker.mjs +9 -1
  84. package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
  85. package/lib/components/VColorPicker/VColorPickerCanvas.css +2 -1
  86. package/lib/components/VColorPicker/VColorPickerCanvas.mjs +36 -18
  87. package/lib/components/VColorPicker/VColorPickerCanvas.mjs.map +1 -1
  88. package/lib/components/VColorPicker/VColorPickerCanvas.sass +2 -1
  89. package/lib/components/VColorPicker/VColorPickerEdit.mjs +4 -4
  90. package/lib/components/VColorPicker/VColorPickerEdit.mjs.map +1 -1
  91. package/lib/components/VColorPicker/VColorPickerPreview.mjs +2 -2
  92. package/lib/components/VColorPicker/VColorPickerPreview.mjs.map +1 -1
  93. package/lib/components/VColorPicker/VColorPickerSwatches.mjs.map +1 -1
  94. package/lib/components/VColorPicker/index.d.ts +284 -20
  95. package/lib/components/VColorPicker/util/index.mjs +2 -5
  96. package/lib/components/VColorPicker/util/index.mjs.map +1 -1
  97. package/lib/components/VCombobox/VCombobox.mjs +23 -8
  98. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  99. package/lib/components/VCombobox/index.d.ts +1756 -113
  100. package/lib/components/VCounter/index.d.ts +1909 -78
  101. package/lib/components/VDefaultsProvider/VDefaultsProvider.mjs +4 -1
  102. package/lib/components/VDefaultsProvider/VDefaultsProvider.mjs.map +1 -1
  103. package/lib/components/VDefaultsProvider/index.d.ts +136 -18
  104. package/lib/components/VDialog/VDialog.css +31 -24
  105. package/lib/components/VDialog/VDialog.mjs +2 -2
  106. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  107. package/lib/components/VDialog/VDialog.sass +19 -12
  108. package/lib/components/VDialog/index.d.ts +2403 -124
  109. package/lib/components/VDivider/VDivider.mjs.map +1 -1
  110. package/lib/components/VDivider/index.d.ts +132 -19
  111. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  112. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs.map +1 -1
  113. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  114. package/lib/components/VExpansionPanel/index.d.ts +741 -104
  115. package/lib/components/VField/VField.mjs.map +1 -1
  116. package/lib/components/VField/index.d.ts +179 -23
  117. package/lib/components/VFileInput/VFileInput.mjs +1 -0
  118. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  119. package/lib/components/VFileInput/index.d.ts +1069 -93
  120. package/lib/components/VFooter/VFooter.css +2 -0
  121. package/lib/components/VFooter/VFooter.sass +2 -0
  122. package/lib/components/VFooter/_variables.scss +2 -0
  123. package/lib/components/VFooter/index.d.ts +206 -25
  124. package/lib/components/VForm/index.d.ts +207 -20
  125. package/lib/components/VGrid/VCol.mjs +6 -5
  126. package/lib/components/VGrid/VCol.mjs.map +1 -1
  127. package/lib/components/VGrid/VRow.mjs +4 -4
  128. package/lib/components/VGrid/VRow.mjs.map +1 -1
  129. package/lib/components/VGrid/index.d.ts +745 -64
  130. package/lib/components/VHover/index.d.ts +188 -29
  131. package/lib/components/VIcon/index.d.ts +500 -44
  132. package/lib/components/VImg/VImg.mjs +2 -2
  133. package/lib/components/VImg/VImg.mjs.map +1 -1
  134. package/lib/components/VImg/index.d.ts +281 -40
  135. package/lib/components/VInput/VInput.mjs.map +1 -1
  136. package/lib/components/VInput/index.d.ts +321 -47
  137. package/lib/components/VItemGroup/VItemGroup.mjs.map +1 -1
  138. package/lib/components/VItemGroup/index.d.ts +313 -45
  139. package/lib/components/VKbd/VKbd.css +1 -0
  140. package/lib/components/VKbd/VKbd.sass +1 -0
  141. package/lib/components/VKbd/_variables.scss +1 -0
  142. package/lib/components/VKbd/index.d.ts +112 -13
  143. package/lib/components/VLabel/index.d.ts +115 -16
  144. package/lib/components/VLayout/index.d.ts +302 -35
  145. package/lib/components/VLazy/VLazy.mjs +4 -1
  146. package/lib/components/VLazy/VLazy.mjs.map +1 -1
  147. package/lib/components/VLazy/index.d.ts +222 -27
  148. package/lib/components/VList/VListChildren.mjs +2 -2
  149. package/lib/components/VList/VListChildren.mjs.map +1 -1
  150. package/lib/components/VList/VListGroup.mjs +1 -4
  151. package/lib/components/VList/VListGroup.mjs.map +1 -1
  152. package/lib/components/VList/VListItem.mjs +23 -19
  153. package/lib/components/VList/VListItem.mjs.map +1 -1
  154. package/lib/components/VList/VListSubheader.mjs.map +1 -1
  155. package/lib/components/VList/index.d.ts +1500 -191
  156. package/lib/components/VLocaleProvider/index.d.ts +123 -16
  157. package/lib/components/VMain/index.d.ts +121 -14
  158. package/lib/components/VMenu/VMenu.css +4 -4
  159. package/lib/components/VMenu/VMenu.mjs +8 -7
  160. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  161. package/lib/components/VMenu/VMenu.sass +1 -1
  162. package/lib/components/VMenu/index.d.ts +2411 -121
  163. package/lib/components/VMessages/VMessages.mjs.map +1 -1
  164. package/lib/components/VMessages/index.d.ts +1934 -87
  165. package/lib/components/VNavigationDrawer/index.d.ts +382 -47
  166. package/lib/components/VNoSsr/index.d.ts +6 -0
  167. package/lib/components/VOverlay/VOverlay.css +2 -2
  168. package/lib/components/VOverlay/VOverlay.mjs +1 -4
  169. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  170. package/lib/components/VOverlay/VOverlay.sass +1 -1
  171. package/lib/components/VOverlay/_variables.scss +1 -1
  172. package/lib/components/VOverlay/index.d.ts +527 -75
  173. package/lib/components/VOverlay/scrollStrategies.mjs +2 -2
  174. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  175. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  176. package/lib/components/VPagination/index.d.ts +504 -56
  177. package/lib/components/VParallax/VParallax.mjs +3 -3
  178. package/lib/components/VParallax/VParallax.mjs.map +1 -1
  179. package/lib/components/VParallax/index.d.ts +144 -19
  180. package/lib/components/VProgressCircular/VProgressCircular.mjs.map +1 -1
  181. package/lib/components/VProgressCircular/index.d.ts +189 -22
  182. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  183. package/lib/components/VProgressLinear/index.d.ts +325 -42
  184. package/lib/components/VRadio/index.d.ts +318 -46
  185. package/lib/components/VRadioGroup/VRadioGroup.mjs +4 -6
  186. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  187. package/lib/components/VRadioGroup/index.d.ts +468 -66
  188. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  189. package/lib/components/VRangeSlider/index.d.ts +530 -66
  190. package/lib/components/VRating/VRating.css +0 -4
  191. package/lib/components/VRating/VRating.mjs +6 -35
  192. package/lib/components/VRating/VRating.mjs.map +1 -1
  193. package/lib/components/VRating/VRating.sass +0 -5
  194. package/lib/components/VRating/index.d.ts +309 -38
  195. package/lib/components/VResponsive/index.d.ts +144 -21
  196. package/lib/components/VSelect/VSelect.mjs +23 -8
  197. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  198. package/lib/components/VSelect/index.d.ts +3150 -247
  199. package/lib/components/VSelectionControl/VSelectionControl.mjs +1 -4
  200. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  201. package/lib/components/VSelectionControl/index.d.ts +90 -10
  202. package/lib/components/VSelectionControlGroup/index.d.ts +245 -35
  203. package/lib/components/VSheet/VSheet.mjs +16 -12
  204. package/lib/components/VSheet/VSheet.mjs.map +1 -1
  205. package/lib/components/VSheet/index.d.ts +196 -27
  206. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  207. package/lib/components/VSlideGroup/index.d.ts +488 -70
  208. package/lib/components/VSlider/VSliderTrack.mjs +1 -0
  209. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  210. package/lib/components/VSlider/index.d.ts +523 -65
  211. package/lib/components/VSlider/slider.mjs +5 -6
  212. package/lib/components/VSlider/slider.mjs.map +1 -1
  213. package/lib/components/VSnackbar/VSnackbar.css +2 -9
  214. package/lib/components/VSnackbar/VSnackbar.mjs +10 -11
  215. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  216. package/lib/components/VSnackbar/VSnackbar.sass +3 -10
  217. package/lib/components/VSnackbar/index.d.ts +1255 -74
  218. package/lib/components/VSwitch/VSwitch.mjs +2 -2
  219. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  220. package/lib/components/VSwitch/index.d.ts +503 -75
  221. package/lib/components/VSystemBar/VSystemBar.css +5 -1
  222. package/lib/components/VSystemBar/VSystemBar.mjs +6 -2
  223. package/lib/components/VSystemBar/VSystemBar.mjs.map +1 -1
  224. package/lib/components/VSystemBar/VSystemBar.sass +5 -1
  225. package/lib/components/VSystemBar/_variables.scss +4 -1
  226. package/lib/components/VSystemBar/index.d.ts +186 -23
  227. package/lib/components/VTable/VTable.mjs.map +1 -1
  228. package/lib/components/VTable/index.d.ts +193 -26
  229. package/lib/components/VTabs/VTab.mjs +7 -23
  230. package/lib/components/VTabs/VTab.mjs.map +1 -1
  231. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  232. package/lib/components/VTabs/index.d.ts +628 -64
  233. package/lib/components/VTextField/VTextField.mjs +9 -5
  234. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  235. package/lib/components/VTextField/index.d.ts +1447 -101
  236. package/lib/components/VTextarea/VTextarea.mjs +8 -1
  237. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  238. package/lib/components/VTextarea/index.d.ts +1043 -93
  239. package/lib/components/VThemeProvider/index.d.ts +127 -16
  240. package/lib/components/VTimeline/VTimelineDivider.mjs +18 -10
  241. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  242. package/lib/components/VTimeline/VTimelineItem.mjs.map +1 -1
  243. package/lib/components/VTimeline/index.d.ts +446 -60
  244. package/lib/components/VToolbar/VToolbar.mjs +10 -9
  245. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  246. package/lib/components/VToolbar/VToolbarTitle.mjs.map +1 -1
  247. package/lib/components/VToolbar/index.d.ts +552 -73
  248. package/lib/components/VTooltip/VTooltip.css +3 -3
  249. package/lib/components/VTooltip/VTooltip.mjs +4 -4
  250. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  251. package/lib/components/VTooltip/VTooltip.sass +1 -1
  252. package/lib/components/VTooltip/index.d.ts +1315 -73
  253. package/lib/components/VValidation/index.d.ts +204 -27
  254. package/lib/components/VWindow/index.d.ts +541 -75
  255. package/lib/components/index.d.ts +55694 -14389
  256. package/lib/components/transitions/createTransition.mjs +1 -1
  257. package/lib/components/transitions/createTransition.mjs.map +1 -1
  258. package/lib/components/transitions/index.d.ts +2144 -259
  259. package/lib/composables/defaults.mjs +5 -1
  260. package/lib/composables/defaults.mjs.map +1 -1
  261. package/lib/composables/display.mjs +15 -10
  262. package/lib/composables/display.mjs.map +1 -1
  263. package/lib/composables/form.mjs.map +1 -1
  264. package/lib/composables/loader.mjs.map +1 -1
  265. package/lib/composables/nested/nested.mjs +2 -2
  266. package/lib/composables/nested/nested.mjs.map +1 -1
  267. package/lib/composables/nested/selectStrategies.mjs +7 -1
  268. package/lib/composables/nested/selectStrategies.mjs.map +1 -1
  269. package/lib/composables/proxiedModel.mjs +1 -1
  270. package/lib/composables/proxiedModel.mjs.map +1 -1
  271. package/lib/composables/resizeObserver.mjs.map +1 -1
  272. package/lib/composables/stack.mjs +2 -2
  273. package/lib/composables/stack.mjs.map +1 -1
  274. package/lib/composables/theme.mjs +28 -23
  275. package/lib/composables/theme.mjs.map +1 -1
  276. package/lib/composables/variant.mjs.map +1 -1
  277. package/lib/entry-bundler.mjs +1 -1
  278. package/lib/framework.mjs +1 -1
  279. package/lib/index.d.ts +6 -9
  280. package/lib/labs/VDataTable/VDataTable.css +15 -0
  281. package/lib/labs/VDataTable/VDataTable.mjs +45 -19
  282. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  283. package/lib/labs/VDataTable/VDataTable.sass +9 -0
  284. package/lib/labs/VDataTable/VDataTableFooter.mjs +3 -2
  285. package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -1
  286. package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
  287. package/lib/labs/VDataTable/VDataTableRow.mjs +8 -2
  288. package/lib/labs/VDataTable/VDataTableRow.mjs.map +1 -1
  289. package/lib/labs/VDataTable/VDataTableRows.mjs +6 -7
  290. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  291. package/lib/labs/VDataTable/VDataTableServer.mjs +41 -19
  292. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  293. package/lib/labs/VDataTable/VDataTableVirtual.mjs +27 -14
  294. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  295. package/lib/labs/VDataTable/composables/expand.mjs +1 -1
  296. package/lib/labs/VDataTable/composables/expand.mjs.map +1 -1
  297. package/lib/labs/VDataTable/composables/group.mjs +12 -1
  298. package/lib/labs/VDataTable/composables/group.mjs.map +1 -1
  299. package/lib/labs/VDataTable/composables/options.mjs +4 -10
  300. package/lib/labs/VDataTable/composables/options.mjs.map +1 -1
  301. package/lib/labs/VDataTable/composables/paginate.mjs +25 -4
  302. package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -1
  303. package/lib/labs/VDataTable/composables/select.mjs +1 -1
  304. package/lib/labs/VDataTable/composables/select.mjs.map +1 -1
  305. package/lib/labs/VDataTable/composables/sort.mjs +19 -3
  306. package/lib/labs/VDataTable/composables/sort.mjs.map +1 -1
  307. package/lib/labs/VDataTable/index.d.ts +4934 -317
  308. package/lib/labs/VVirtualScroll/VVirtualScroll.mjs +18 -5
  309. package/lib/labs/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  310. package/lib/labs/VVirtualScroll/index.d.ts +41 -7
  311. package/lib/labs/components.d.ts +4970 -324
  312. package/lib/locale/adapters/vue-i18n.d.ts +1 -1
  313. package/lib/locale/adapters/vue-i18n.mjs +1 -1
  314. package/lib/locale/adapters/vue-i18n.mjs.map +1 -1
  315. package/lib/locale/index.mjs +1 -1
  316. package/lib/locale/index.mjs.map +1 -1
  317. package/lib/styles/elements/_global.sass +0 -4
  318. package/lib/styles/generic/_index.scss +0 -1
  319. package/lib/styles/generic/_transitions.scss +111 -9
  320. package/lib/styles/main.css +316 -167
  321. package/lib/styles/settings/_utilities.scss +7 -0
  322. package/lib/styles/tools/_sheet.sass +3 -6
  323. package/lib/styles/utilities/_display.sass +6 -5
  324. package/lib/styles/utilities/_elevation.scss +13 -0
  325. package/lib/styles/utilities/_index.sass +3 -2
  326. package/lib/styles/utilities/_screenreaders.sass +13 -11
  327. package/lib/util/animation.mjs +8 -1
  328. package/lib/util/animation.mjs.map +1 -1
  329. package/lib/util/colorUtils.mjs +4 -5
  330. package/lib/util/colorUtils.mjs.map +1 -1
  331. package/lib/util/defineComponent.mjs +15 -7
  332. package/lib/util/defineComponent.mjs.map +1 -1
  333. package/lib/util/helpers.mjs +4 -0
  334. package/lib/util/helpers.mjs.map +1 -1
  335. package/package.json +15 -7
  336. package/lib/styles/generic/_elevation.scss +0 -10
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.2.0-dev-20230214.0
2
+ * Vuetify v3.2.0-dev-20230322.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -203,6 +203,10 @@ function clamp(value) {
203
203
  let max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
204
204
  return Math.max(min, Math.min(max, value));
205
205
  }
206
+ function getDecimals(value) {
207
+ const trimmedStr = value.toString().trim();
208
+ return trimmedStr.includes('.') ? trimmedStr.length - trimmedStr.indexOf('.') - 1 : 0;
209
+ }
206
210
  function padEnd(str, length) {
207
211
  let char = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '0';
208
212
  return str + char.repeat(Math.max(0, length - str.length));
@@ -485,7 +489,14 @@ function animate(el, keyframes, options) {
485
489
  if (typeof el.animate === 'undefined') return {
486
490
  finished: Promise.resolve()
487
491
  };
488
- const animation = el.animate(keyframes, options);
492
+ let animation;
493
+ try {
494
+ animation = el.animate(keyframes, options);
495
+ } catch (err) {
496
+ return {
497
+ finished: Promise.resolve()
498
+ };
499
+ }
489
500
  if (typeof animation.finished === 'undefined') {
490
501
  animation.finished = new Promise(resolve => {
491
502
  animation.onfinish = () => {
@@ -780,11 +791,12 @@ function RGBtoHex(_ref2) {
780
791
  b,
781
792
  a
782
793
  } = _ref2;
783
- return `#${[toHex(r), toHex(g), toHex(b), a !== undefined ? toHex(Math.round(a * 255)) : 'FF'].join('')}`;
794
+ return `#${[toHex(r), toHex(g), toHex(b), a !== undefined ? toHex(Math.round(a * 255)) : ''].join('')}`;
784
795
  }
785
796
  function HexToRGB(hex) {
797
+ hex = parseHex(hex);
786
798
  let [r, g, b, a] = chunk(hex, 2).map(c => parseInt(c, 16));
787
- a = a === undefined ? a : Math.round(a / 255 * 100) / 100;
799
+ a = a === undefined ? a : a / 255;
788
800
  return {
789
801
  r,
790
802
  g,
@@ -807,9 +819,7 @@ function parseHex(hex) {
807
819
  if (hex.length === 3 || hex.length === 4) {
808
820
  hex = hex.split('').map(x => x + x).join('');
809
821
  }
810
- if (hex.length === 6) {
811
- hex = padEnd(hex, 8, 'F');
812
- } else {
822
+ if (hex.length !== 6) {
813
823
  hex = padEnd(padEnd(hex, 6), 8, 'F');
814
824
  }
815
825
  return hex;
@@ -950,6 +960,8 @@ function provideDefaults(defaults, options) {
950
960
  const injectedDefaults = useDefaults();
951
961
  const providedDefaults = ref(defaults);
952
962
  const newDefaults = computed(() => {
963
+ const disabled = unref(options?.disabled);
964
+ if (disabled) return injectedDefaults.value;
953
965
  const scoped = unref(options?.scoped);
954
966
  const reset = unref(options?.reset);
955
967
  const root = unref(options?.root);
@@ -960,7 +972,9 @@ function provideDefaults(defaults, options) {
960
972
  if (reset || root) {
961
973
  const len = Number(reset || Infinity);
962
974
  for (let i = 0; i <= len; i++) {
963
- if (!properties.prev) break;
975
+ if (!properties || !('prev' in properties)) {
976
+ break;
977
+ }
964
978
  properties = properties.prev;
965
979
  }
966
980
  return properties;
@@ -1002,15 +1016,22 @@ function useToggleScope(source, fn) {
1002
1016
  function propIsDefined(vnode, prop) {
1003
1017
  return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1004
1018
  }
1005
- const defineComponent = function defineComponent(options) {
1019
+
1020
+ // No props
1021
+
1022
+ // Implementation
1023
+ function defineComponent(options) {
1006
1024
  options._setup = options._setup ?? options.setup;
1007
1025
  if (!options.name) {
1008
1026
  consoleWarn('The component is missing an explicit name, unable to generate default prop value');
1009
1027
  return options;
1010
1028
  }
1011
1029
  if (options._setup) {
1012
- options.props = options.props ?? {};
1013
- options.props = propsFactory(options.props, toKebabCase(options.name))();
1030
+ options.props = propsFactory(options.props ?? {}, toKebabCase(options.name))();
1031
+ const propKeys = Object.keys(options.props);
1032
+ options.filterProps = function filterProps(props) {
1033
+ return pick(props, propKeys);
1034
+ };
1014
1035
  options.props._as = String;
1015
1036
  options.setup = function setup(props, ctx) {
1016
1037
  const defaults = useDefaults();
@@ -1021,10 +1042,11 @@ const defineComponent = function defineComponent(options) {
1021
1042
  const componentDefaults = computed(() => defaults.value[props._as ?? options.name]);
1022
1043
  const _props = new Proxy(props, {
1023
1044
  get(target, prop) {
1045
+ const propValue = Reflect.get(target, prop);
1024
1046
  if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1025
- return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? target[prop];
1047
+ return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? propValue;
1026
1048
  }
1027
- return Reflect.get(target, prop);
1049
+ return propValue;
1028
1050
  }
1029
1051
  });
1030
1052
  const _subcomponentDefaults = shallowRef();
@@ -1049,7 +1071,7 @@ const defineComponent = function defineComponent(options) {
1049
1071
  };
1050
1072
  }
1051
1073
  return options;
1052
- };
1074
+ }
1053
1075
  // Implementation
1054
1076
  function genericComponent() {
1055
1077
  let exposeDefaults = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
@@ -1670,17 +1692,9 @@ function createTheme(options) {
1670
1692
  if (current.value.dark) {
1671
1693
  createCssClass(lines, ':root', ['color-scheme: dark']);
1672
1694
  }
1695
+ createCssClass(lines, ':root', genCssVariables(current.value));
1673
1696
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
1674
- const {
1675
- variables,
1676
- dark
1677
- } = theme;
1678
- createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${dark ? 'dark' : 'normal'}`, ...genCssVariables(theme), ...Object.keys(variables).map(key => {
1679
- const value = variables[key];
1680
- const color = typeof value === 'string' && value.startsWith('#') ? parseColor$1(value) : undefined;
1681
- const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
1682
- return `--v-${key}: ${rgb ?? value}`;
1683
- })]);
1697
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)]);
1684
1698
  }
1685
1699
  const bgLines = [];
1686
1700
  const fgLines = [];
@@ -1697,22 +1711,30 @@ function createTheme(options) {
1697
1711
  lines.push(...bgLines, ...fgLines);
1698
1712
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
1699
1713
  });
1714
+ function getHead() {
1715
+ return {
1716
+ style: [{
1717
+ children: styles.value,
1718
+ id: 'vuetify-theme-stylesheet',
1719
+ nonce: parsedOptions.cspNonce || false
1720
+ }]
1721
+ };
1722
+ }
1700
1723
  function install(app) {
1701
1724
  const head = app._context.provides.usehead;
1702
1725
  if (head) {
1703
- head.addHeadObjs(computed(() => {
1704
- const style = {
1705
- children: styles.value,
1706
- type: 'text/css',
1707
- id: 'vuetify-theme-stylesheet'
1708
- };
1709
- if (parsedOptions.cspNonce) style.nonce = parsedOptions.cspNonce;
1710
- return {
1711
- style: [style]
1712
- };
1713
- }));
1714
- if (IN_BROWSER) {
1715
- watchEffect(() => head.updateDOM());
1726
+ if (head.push) {
1727
+ const entry = head.push(getHead);
1728
+ watch(styles, () => {
1729
+ entry.patch(getHead);
1730
+ });
1731
+ } else {
1732
+ if (IN_BROWSER) {
1733
+ head.addHeadObjs(computed(getHead));
1734
+ watchEffect(() => head.updateDOM());
1735
+ } else {
1736
+ head.addHeadObjs(getHead());
1737
+ }
1716
1738
  }
1717
1739
  } else {
1718
1740
  let styleEl = IN_BROWSER ? document.getElementById('vuetify-theme-stylesheet') : null;
@@ -1785,6 +1807,11 @@ function genCssVariables(theme) {
1785
1807
  variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
1786
1808
  }
1787
1809
  }
1810
+ for (const [key, value] of Object.entries(theme.variables)) {
1811
+ const color = typeof value === 'string' && value.startsWith('#') ? parseColor$1(value) : undefined;
1812
+ const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
1813
+ variables.push(`--v-${key}: ${rgb ?? value}`);
1814
+ }
1788
1815
  return variables;
1789
1816
  }
1790
1817
 
@@ -1814,7 +1841,7 @@ function useProxiedModel(props, prop, defaultValue) {
1814
1841
  });
1815
1842
  const model = computed({
1816
1843
  get() {
1817
- return transformIn(toRaw(isControlled.value ? props[prop] : internal.value));
1844
+ return transformIn(isControlled.value ? props[prop] : internal.value);
1818
1845
  },
1819
1846
  set(internalValue) {
1820
1847
  const newValue = transformOut(internalValue);
@@ -2014,7 +2041,7 @@ const defaultRtl = {
2014
2041
  en: false,
2015
2042
  es: false,
2016
2043
  et: false,
2017
- fa: false,
2044
+ fa: true,
2018
2045
  fi: false,
2019
2046
  fr: false,
2020
2047
  hr: false,
@@ -2147,6 +2174,7 @@ const VDefaultsProvider = genericComponent(false)({
2147
2174
  name: 'VDefaultsProvider',
2148
2175
  props: {
2149
2176
  defaults: Object,
2177
+ disabled: Boolean,
2150
2178
  reset: [Number, String],
2151
2179
  root: Boolean,
2152
2180
  scoped: Boolean
@@ -2157,6 +2185,7 @@ const VDefaultsProvider = genericComponent(false)({
2157
2185
  } = _ref;
2158
2186
  const {
2159
2187
  defaults,
2188
+ disabled,
2160
2189
  reset,
2161
2190
  root,
2162
2191
  scoped
@@ -2164,7 +2193,8 @@ const VDefaultsProvider = genericComponent(false)({
2164
2193
  provideDefaults(defaults, {
2165
2194
  reset,
2166
2195
  root,
2167
- scoped
2196
+ scoped,
2197
+ disabled
2168
2198
  });
2169
2199
  return () => slots.default?.();
2170
2200
  }
@@ -2175,7 +2205,7 @@ const VDefaultsProvider = genericComponent(false)({
2175
2205
  // Types
2176
2206
 
2177
2207
  function createCssTransition(name) {
2178
- let origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top center 0';
2208
+ let origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'center center';
2179
2209
  let mode = arguments.length > 2 ? arguments[2] : undefined;
2180
2210
  return genericComponent()({
2181
2211
  name,
@@ -2786,7 +2816,7 @@ const VImg = genericComponent()({
2786
2816
  "class": ['v-img__img', containClasses.value],
2787
2817
  "src": normalisedSrc.value.src,
2788
2818
  "srcset": normalisedSrc.value.srcset,
2789
- "alt": "",
2819
+ "alt": props.alt,
2790
2820
  "sizes": props.sizes,
2791
2821
  "ref": image,
2792
2822
  "onLoad": onLoad,
@@ -2808,7 +2838,7 @@ const VImg = genericComponent()({
2808
2838
  default: () => [normalisedSrc.value.lazySrc && state.value !== 'loaded' && createVNode("img", {
2809
2839
  "class": ['v-img__img', 'v-img__img--preload', containClasses.value],
2810
2840
  "src": normalisedSrc.value.lazySrc,
2811
- "alt": ""
2841
+ "alt": props.alt
2812
2842
  }, null)]
2813
2843
  });
2814
2844
  const __placeholder = () => {
@@ -3150,16 +3180,20 @@ const VToolbar = genericComponent()({
3150
3180
  default: () => [hasImage && createVNode("div", {
3151
3181
  "key": "image",
3152
3182
  "class": "v-toolbar__image"
3153
- }, [createVNode(VDefaultsProvider, {
3183
+ }, [!slots.image ? createVNode(VImg, {
3184
+ "key": "image-img",
3185
+ "cover": true,
3186
+ "src": props.image
3187
+ }, null) : createVNode(VDefaultsProvider, {
3188
+ "key": "image-defaults",
3189
+ "disabled": !props.image,
3154
3190
  "defaults": {
3155
3191
  VImg: {
3156
3192
  cover: true,
3157
3193
  src: props.image
3158
3194
  }
3159
3195
  }
3160
- }, {
3161
- default: () => [slots.image ? slots.image?.() : createVNode(VImg, null, null)]
3162
- })]), createVNode(VDefaultsProvider, {
3196
+ }, slots.image)]), createVNode(VDefaultsProvider, {
3163
3197
  "defaults": {
3164
3198
  VTabs: {
3165
3199
  height: convertToUnit(contentHeight.value)
@@ -3205,8 +3239,24 @@ const VToolbar = genericComponent()({
3205
3239
  };
3206
3240
  }
3207
3241
  });
3208
- function filterToolbarProps(props) {
3209
- return pick(props, Object.keys(VToolbar?.props ?? {}));
3242
+
3243
+ // Utilities
3244
+
3245
+ // Composables
3246
+ function useSsrBoot() {
3247
+ const isBooted = ref(false);
3248
+ onMounted(() => {
3249
+ window.requestAnimationFrame(() => {
3250
+ isBooted.value = true;
3251
+ });
3252
+ });
3253
+ const ssrBootStyles = computed(() => !isBooted.value ? {
3254
+ transition: 'none !important'
3255
+ } : undefined);
3256
+ return {
3257
+ ssrBootStyles,
3258
+ isBooted: readonly(isBooted)
3259
+ };
3210
3260
  }
3211
3261
 
3212
3262
  // Types
@@ -3251,6 +3301,9 @@ const VAppBar = genericComponent()({
3251
3301
  const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0;
3252
3302
  return height + extensionHeight;
3253
3303
  });
3304
+ const {
3305
+ ssrBootStyles
3306
+ } = useSsrBoot();
3254
3307
  const {
3255
3308
  layoutItemStyles
3256
3309
  } = useLayoutItem({
@@ -3263,7 +3316,7 @@ const VAppBar = genericComponent()({
3263
3316
  absolute: toRef(props, 'absolute')
3264
3317
  });
3265
3318
  useRender(() => {
3266
- const [toolbarProps] = filterToolbarProps(props);
3319
+ const [toolbarProps] = VToolbar.filterProps(props);
3267
3320
  return createVNode(VToolbar, mergeProps({
3268
3321
  "ref": vToolbarRef,
3269
3322
  "class": ['v-app-bar', {
@@ -3271,7 +3324,8 @@ const VAppBar = genericComponent()({
3271
3324
  }],
3272
3325
  "style": {
3273
3326
  ...layoutItemStyles.value,
3274
- height: undefined
3327
+ height: undefined,
3328
+ ...ssrBootStyles.value
3275
3329
  }
3276
3330
  }, toolbarProps), slots);
3277
3331
  });
@@ -3353,8 +3407,6 @@ function useVariant(props) {
3353
3407
  };
3354
3408
  }
3355
3409
 
3356
- // Types
3357
-
3358
3410
  const makeVBtnGroupProps = propsFactory({
3359
3411
  divided: Boolean,
3360
3412
  ...makeBorderProps(),
@@ -3405,9 +3457,6 @@ const VBtnGroup = genericComponent()({
3405
3457
  });
3406
3458
  }
3407
3459
  });
3408
- function filterVBtnGroupProps(props) {
3409
- return pick(props, Object.keys(VBtnGroup.props));
3410
- }
3411
3460
 
3412
3461
  // Composables
3413
3462
 
@@ -3634,7 +3683,7 @@ const VBtnToggle = genericComponent()({
3634
3683
  selected
3635
3684
  } = useGroup(props, VBtnToggleSymbol);
3636
3685
  useRender(() => {
3637
- const [btnGroupProps] = filterVBtnGroupProps(props);
3686
+ const [btnGroupProps] = VBtnGroup.filterProps(props);
3638
3687
  return createVNode(VBtnGroup, mergeProps({
3639
3688
  "class": "v-btn-toggle"
3640
3689
  }, btnGroupProps), {
@@ -4722,49 +4771,50 @@ function useSelectLink(link, select) {
4722
4771
 
4723
4772
  // Types
4724
4773
 
4774
+ const makeVBtnProps = propsFactory({
4775
+ active: {
4776
+ type: Boolean,
4777
+ default: undefined
4778
+ },
4779
+ symbol: {
4780
+ type: null,
4781
+ default: VBtnToggleSymbol
4782
+ },
4783
+ flat: Boolean,
4784
+ icon: [Boolean, String, Function, Object],
4785
+ prependIcon: IconValue,
4786
+ appendIcon: IconValue,
4787
+ block: Boolean,
4788
+ stacked: Boolean,
4789
+ ripple: {
4790
+ type: Boolean,
4791
+ default: true
4792
+ },
4793
+ ...makeBorderProps(),
4794
+ ...makeRoundedProps(),
4795
+ ...makeDensityProps(),
4796
+ ...makeDimensionProps(),
4797
+ ...makeElevationProps(),
4798
+ ...makeGroupItemProps(),
4799
+ ...makeLoaderProps(),
4800
+ ...makeLocationProps(),
4801
+ ...makePositionProps(),
4802
+ ...makeRouterProps(),
4803
+ ...makeSizeProps(),
4804
+ ...makeTagProps({
4805
+ tag: 'button'
4806
+ }),
4807
+ ...makeThemeProps(),
4808
+ ...makeVariantProps({
4809
+ variant: 'elevated'
4810
+ })
4811
+ }, 'VBtn');
4725
4812
  const VBtn = genericComponent()({
4726
4813
  name: 'VBtn',
4727
4814
  directives: {
4728
4815
  Ripple
4729
4816
  },
4730
- props: {
4731
- active: {
4732
- type: Boolean,
4733
- default: undefined
4734
- },
4735
- symbol: {
4736
- type: null,
4737
- default: VBtnToggleSymbol
4738
- },
4739
- flat: Boolean,
4740
- icon: [Boolean, String, Function, Object],
4741
- prependIcon: IconValue,
4742
- appendIcon: IconValue,
4743
- block: Boolean,
4744
- stacked: Boolean,
4745
- ripple: {
4746
- type: Boolean,
4747
- default: true
4748
- },
4749
- ...makeBorderProps(),
4750
- ...makeRoundedProps(),
4751
- ...makeDensityProps(),
4752
- ...makeDimensionProps(),
4753
- ...makeElevationProps(),
4754
- ...makeGroupItemProps(),
4755
- ...makeLoaderProps(),
4756
- ...makeLocationProps(),
4757
- ...makePositionProps(),
4758
- ...makeRouterProps(),
4759
- ...makeSizeProps(),
4760
- ...makeTagProps({
4761
- tag: 'button'
4762
- }),
4763
- ...makeThemeProps(),
4764
- ...makeVariantProps({
4765
- variant: 'elevated'
4766
- })
4767
- },
4817
+ props: makeVBtnProps(),
4768
4818
  emits: {
4769
4819
  'group:selected': val => true
4770
4820
  },
@@ -4857,43 +4907,49 @@ const VBtn = genericComponent()({
4857
4907
  },
4858
4908
  "value": valueAttr.value
4859
4909
  }, {
4860
- default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && createVNode(VDefaultsProvider, {
4910
+ default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && createVNode("span", {
4861
4911
  "key": "prepend",
4912
+ "class": "v-btn__prepend"
4913
+ }, [!slots.prepend ? createVNode(VIcon, {
4914
+ "key": "prepend-icon",
4915
+ "icon": props.prependIcon
4916
+ }, null) : createVNode(VDefaultsProvider, {
4917
+ "key": "prepend-defaults",
4918
+ "disabled": !props.prependIcon,
4862
4919
  "defaults": {
4863
4920
  VIcon: {
4864
4921
  icon: props.prependIcon
4865
4922
  }
4866
4923
  }
4867
- }, {
4868
- default: () => [createVNode("span", {
4869
- "class": "v-btn__prepend"
4870
- }, [slots.prepend?.() ?? createVNode(VIcon, null, null)])]
4871
- }), createVNode("span", {
4924
+ }, slots.prepend)]), createVNode("span", {
4872
4925
  "class": "v-btn__content",
4873
4926
  "data-no-activator": ""
4874
- }, [createVNode(VDefaultsProvider, {
4875
- "key": "content",
4927
+ }, [!slots.default && hasIcon ? createVNode(VIcon, {
4928
+ "key": "content-icon",
4929
+ "icon": props.icon
4930
+ }, null) : createVNode(VDefaultsProvider, {
4931
+ "key": "content-defaults",
4932
+ "disabled": !hasIcon,
4876
4933
  "defaults": {
4877
4934
  VIcon: {
4878
- icon: hasIcon ? props.icon : undefined
4935
+ icon: props.icon
4879
4936
  }
4880
4937
  }
4881
- }, {
4882
- default: () => [slots.default?.() ?? (hasIcon && createVNode(VIcon, {
4883
- "key": "icon"
4884
- }, null))]
4885
- })]), !props.icon && hasAppend && createVNode(VDefaultsProvider, {
4938
+ }, slots.default)]), !props.icon && hasAppend && createVNode("span", {
4886
4939
  "key": "append",
4940
+ "class": "v-btn__append"
4941
+ }, [!slots.append ? createVNode(VIcon, {
4942
+ "key": "append-icon",
4943
+ "icon": props.appendIcon
4944
+ }, null) : createVNode(VDefaultsProvider, {
4945
+ "key": "append-defaults",
4946
+ "disabled": !props.appendIcon,
4887
4947
  "defaults": {
4888
4948
  VIcon: {
4889
4949
  icon: props.appendIcon
4890
4950
  }
4891
4951
  }
4892
- }, {
4893
- default: () => [createVNode("span", {
4894
- "class": "v-btn__append"
4895
- }, [slots.append?.() ?? createVNode(VIcon, null, null)])]
4896
- }), !!props.loading && createVNode("span", {
4952
+ }, slots.append)]), !!props.loading && createVNode("span", {
4897
4953
  "key": "loader",
4898
4954
  "class": "v-btn__loader"
4899
4955
  }, [slots.loader?.() ?? createVNode(VProgressCircular, {
@@ -5022,10 +5078,12 @@ const VAlert = genericComponent()({
5022
5078
  })
5023
5079
  },
5024
5080
  emits: {
5081
+ 'click:close': e => true,
5025
5082
  'update:modelValue': value => true
5026
5083
  },
5027
5084
  setup(props, _ref) {
5028
5085
  let {
5086
+ emit,
5029
5087
  slots
5030
5088
  } = _ref;
5031
5089
  const isActive = useProxiedModel(props, 'modelValue');
@@ -5075,6 +5133,7 @@ const VAlert = genericComponent()({
5075
5133
  'aria-label': t(props.closeLabel),
5076
5134
  onClick(e) {
5077
5135
  isActive.value = false;
5136
+ emit('click:close', e);
5078
5137
  }
5079
5138
  }));
5080
5139
  return () => {
@@ -5096,8 +5155,17 @@ const VAlert = genericComponent()({
5096
5155
  "key": "border",
5097
5156
  "class": ['v-alert__border', textColorClasses.value],
5098
5157
  "style": textColorStyles.value
5099
- }, null), hasPrepend && createVNode(VDefaultsProvider, {
5158
+ }, null), hasPrepend && createVNode("div", {
5100
5159
  "key": "prepend",
5160
+ "class": "v-alert__prepend"
5161
+ }, [!slots.prepend ? createVNode(VIcon, {
5162
+ "key": "prepend-icon",
5163
+ "density": props.density,
5164
+ "icon": icon.value,
5165
+ "size": props.prominent ? 44 : 28
5166
+ }, null) : createVNode(VDefaultsProvider, {
5167
+ "key": "prepend-defaults",
5168
+ "disabled": !icon.value,
5101
5169
  "defaults": {
5102
5170
  VIcon: {
5103
5171
  density: props.density,
@@ -5105,21 +5173,25 @@ const VAlert = genericComponent()({
5105
5173
  size: props.prominent ? 44 : 28
5106
5174
  }
5107
5175
  }
5108
- }, {
5109
- default: () => [createVNode("div", {
5110
- "class": "v-alert__prepend"
5111
- }, [slots.prepend ? slots.prepend() : icon.value && createVNode(VIcon, null, null)])]
5112
- }), createVNode("div", {
5176
+ }, slots.prepend)]), createVNode("div", {
5113
5177
  "class": "v-alert__content"
5114
5178
  }, [hasTitle && createVNode(VAlertTitle, {
5115
5179
  "key": "title"
5116
5180
  }, {
5117
- default: () => [slots.title ? slots.title() : props.title]
5118
- }), hasText && (slots.text ? slots.text() : props.text), slots.default?.()]), slots.append && createVNode("div", {
5181
+ default: () => [slots.title?.() ?? props.title]
5182
+ }), hasText && (slots.text?.() ?? props.text), slots.default?.()]), slots.append && createVNode("div", {
5119
5183
  "key": "append",
5120
5184
  "class": "v-alert__append"
5121
- }, [slots.append()]), hasClose && createVNode(VDefaultsProvider, {
5185
+ }, [slots.append()]), hasClose && createVNode("div", {
5122
5186
  "key": "close",
5187
+ "class": "v-alert__close"
5188
+ }, [!slots.close ? createVNode(VBtn, mergeProps({
5189
+ "key": "close-btn",
5190
+ "icon": props.closeIcon,
5191
+ "size": "x-small",
5192
+ "variant": "text"
5193
+ }, closeProps.value), null) : createVNode(VDefaultsProvider, {
5194
+ "key": "close-defaults",
5123
5195
  "defaults": {
5124
5196
  VBtn: {
5125
5197
  icon: props.closeIcon,
@@ -5128,12 +5200,10 @@ const VAlert = genericComponent()({
5128
5200
  }
5129
5201
  }
5130
5202
  }, {
5131
- default: () => [createVNode("div", {
5132
- "class": "v-alert__close"
5133
- }, [slots.close?.({
5203
+ default: () => [slots.close?.({
5134
5204
  props: closeProps.value
5135
- }) ?? createVNode(VBtn, closeProps.value, null)])]
5136
- })]
5205
+ })]
5206
+ })])]
5137
5207
  });
5138
5208
  };
5139
5209
  }
@@ -6096,7 +6166,13 @@ const VTextField = genericComponent()({
6096
6166
  });
6097
6167
  }
6098
6168
  function onInput(e) {
6099
- model.value = e.target.value;
6169
+ const el = e.target;
6170
+ const caretPosition = [el.selectionStart, el.selectionEnd];
6171
+ model.value = el.value;
6172
+ nextTick(() => {
6173
+ el.selectionStart = caretPosition[0];
6174
+ el.selectionEnd = caretPosition[1];
6175
+ });
6100
6176
  }
6101
6177
  useRender(() => {
6102
6178
  const hasCounter = !!(slots.counter || props.counter || props.counterValue);
@@ -6143,6 +6219,7 @@ const VTextField = genericComponent()({
6143
6219
  "id": id.value,
6144
6220
  "active": isActive.value || isDirty.value,
6145
6221
  "dirty": isDirty.value || props.dirty,
6222
+ "disabled": isDisabled.value,
6146
6223
  "focused": isFocused.value,
6147
6224
  "error": isValid.value === false
6148
6225
  }), {
@@ -6195,9 +6272,6 @@ const VTextField = genericComponent()({
6195
6272
  return forwardRefs({}, vInputRef, vFieldRef, inputRef);
6196
6273
  }
6197
6274
  });
6198
- function filterVTextFieldProps(props) {
6199
- return pick(props, Object.keys(VTextField.props));
6200
- }
6201
6275
 
6202
6276
  // Types
6203
6277
 
@@ -6455,11 +6529,6 @@ const VSelectionControl = genericComponent()({
6455
6529
  };
6456
6530
  }
6457
6531
  });
6458
- function filterControlProps(props) {
6459
- return pick(props, Object.keys(VSelectionControl.props));
6460
- }
6461
-
6462
- // Types
6463
6532
 
6464
6533
  const makeVCheckboxBtnProps = propsFactory({
6465
6534
  indeterminate: Boolean,
@@ -6509,9 +6578,6 @@ const VCheckboxBtn = genericComponent()({
6509
6578
  return {};
6510
6579
  }
6511
6580
  });
6512
- function filterCheckboxBtnProps(props) {
6513
- return pick(props, Object.keys(VCheckboxBtn.props));
6514
- }
6515
6581
 
6516
6582
  // Types
6517
6583
 
@@ -6540,7 +6606,7 @@ const VCheckbox = genericComponent()({
6540
6606
  useRender(() => {
6541
6607
  const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
6542
6608
  const [inputProps, _1] = filterInputProps(props);
6543
- const [checkboxProps, _2] = filterCheckboxBtnProps(props);
6609
+ const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6544
6610
  return createVNode(VInput, mergeProps({
6545
6611
  "class": "v-checkbox"
6546
6612
  }, inputAttrs, inputProps, {
@@ -6797,10 +6863,13 @@ const VChip = genericComponent()({
6797
6863
  const link = useLink(props, attrs);
6798
6864
  const isLink = computed(() => props.link !== false && link.isLink.value);
6799
6865
  const isClickable = computed(() => !props.disabled && props.link !== false && (!!group || props.link || link.isClickable.value));
6800
- function onCloseClick(e) {
6801
- isActive.value = false;
6802
- emit('click:close', e);
6803
- }
6866
+ const closeProps = computed(() => ({
6867
+ 'aria-label': t(props.closeLabel),
6868
+ onClick(e) {
6869
+ isActive.value = false;
6870
+ emit('click:close', e);
6871
+ }
6872
+ }));
6804
6873
  function onClick(e) {
6805
6874
  emit('click', e);
6806
6875
  if (!isClickable.value) return;
@@ -6815,10 +6884,12 @@ const VChip = genericComponent()({
6815
6884
  }
6816
6885
  return () => {
6817
6886
  const Tag = link.isLink.value ? 'a' : props.tag;
6818
- const hasAppend = !!(slots.append || props.appendIcon || props.appendAvatar);
6887
+ const hasAppendMedia = !!(props.appendIcon || props.appendAvatar);
6888
+ const hasAppend = !!(hasAppendMedia || slots.append);
6819
6889
  const hasClose = !!(slots.close || props.closable);
6820
6890
  const hasFilter = !!(slots.filter || props.filter) && group;
6821
- const hasPrepend = !!(slots.prepend || props.prependIcon || props.prependAvatar);
6891
+ const hasPrependMedia = !!(props.prependIcon || props.prependAvatar);
6892
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
6822
6893
  const hasColor = !group || group.isSelected.value;
6823
6894
  return isActive.value && withDirectives(createVNode(Tag, {
6824
6895
  "class": ['v-chip', {
@@ -6836,77 +6907,94 @@ const VChip = genericComponent()({
6836
6907
  "onClick": onClick,
6837
6908
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
6838
6909
  }, {
6839
- default: () => [genOverlays(isClickable.value, 'v-chip'), hasFilter && createVNode(VDefaultsProvider, {
6840
- "key": "filter",
6841
- "defaults": {
6842
- VIcon: {
6843
- icon: props.filterIcon
6844
- }
6845
- }
6910
+ default: () => [genOverlays(isClickable.value, 'v-chip'), hasFilter && createVNode(VExpandXTransition, {
6911
+ "key": "filter"
6846
6912
  }, {
6847
- default: () => [createVNode(VExpandXTransition, null, {
6848
- default: () => [withDirectives(createVNode("div", {
6849
- "class": "v-chip__filter"
6850
- }, [slots.filter ? slots.filter() : createVNode(VIcon, null, null)]), [[vShow, group.isSelected.value]])]
6851
- })]
6852
- }), hasPrepend && createVNode(VDefaultsProvider, {
6913
+ default: () => [withDirectives(createVNode("div", {
6914
+ "class": "v-chip__filter"
6915
+ }, [!slots.filter ? createVNode(VIcon, {
6916
+ "key": "filter-icon",
6917
+ "icon": props.filterIcon
6918
+ }, null) : withDirectives(createVNode(VDefaultsProvider, {
6919
+ "key": "filter-defaults",
6920
+ "disabled": !props.filterIcon,
6921
+ "defaults": {
6922
+ VIcon: {
6923
+ icon: props.filterIcon
6924
+ }
6925
+ }
6926
+ }, null), [[resolveDirective("slot"), slots.filter, "default"]])]), [[vShow, group.isSelected.value]])]
6927
+ }), hasPrepend && createVNode("div", {
6853
6928
  "key": "prepend",
6929
+ "class": "v-chip__prepend"
6930
+ }, [!slots.prepend ? createVNode(Fragment, null, [props.prependIcon && createVNode(VIcon, {
6931
+ "key": "prepend-icon",
6932
+ "icon": props.prependIcon,
6933
+ "start": true
6934
+ }, null), props.prependAvatar && createVNode(VAvatar, {
6935
+ "key": "prepend-avatar",
6936
+ "image": props.prependAvatar,
6937
+ "start": true
6938
+ }, null)]) : createVNode(VDefaultsProvider, {
6939
+ "key": "prepend-defaults",
6940
+ "disabled": !hasPrependMedia,
6854
6941
  "defaults": {
6855
6942
  VAvatar: {
6856
- image: props.prependAvatar
6943
+ image: props.prependAvatar,
6944
+ start: true
6857
6945
  },
6858
6946
  VIcon: {
6859
- icon: props.prependIcon
6947
+ icon: props.prependIcon,
6948
+ start: true
6860
6949
  }
6861
6950
  }
6862
- }, {
6863
- default: () => [slots.prepend ? createVNode("div", {
6864
- "class": "v-chip__prepend"
6865
- }, [slots.prepend()]) : props.prependAvatar ? createVNode(VAvatar, {
6866
- "start": true
6867
- }, null) : props.prependIcon ? createVNode(VIcon, {
6868
- "start": true
6869
- }, null) : undefined]
6870
- }), slots.default?.({
6951
+ }, slots.prepend)]), slots.default?.({
6871
6952
  isSelected: group?.isSelected.value,
6872
6953
  selectedClass: group?.selectedClass.value,
6873
6954
  select: group?.select,
6874
6955
  toggle: group?.toggle,
6875
6956
  value: group?.value.value,
6876
6957
  disabled: props.disabled
6877
- }) ?? props.text, hasAppend && createVNode(VDefaultsProvider, {
6958
+ }) ?? props.text, hasAppend && createVNode("div", {
6878
6959
  "key": "append",
6960
+ "class": "v-chip__append"
6961
+ }, [!slots.append ? createVNode(Fragment, null, [props.appendIcon && createVNode(VIcon, {
6962
+ "key": "append-icon",
6963
+ "end": true,
6964
+ "icon": props.appendIcon
6965
+ }, null), props.appendAvatar && createVNode(VAvatar, {
6966
+ "key": "append-avatar",
6967
+ "end": true,
6968
+ "image": props.appendAvatar
6969
+ }, null)]) : createVNode(VDefaultsProvider, {
6970
+ "key": "append-defaults",
6971
+ "disabled": !hasAppendMedia,
6879
6972
  "defaults": {
6880
6973
  VAvatar: {
6974
+ end: true,
6881
6975
  image: props.appendAvatar
6882
6976
  },
6883
6977
  VIcon: {
6978
+ end: true,
6884
6979
  icon: props.appendIcon
6885
6980
  }
6886
6981
  }
6887
- }, {
6888
- default: () => [slots.append ? createVNode("div", {
6889
- "class": "v-chip__append"
6890
- }, [slots.append()]) : props.appendAvatar ? createVNode(VAvatar, {
6891
- "end": true
6892
- }, null) : props.appendIcon ? createVNode(VIcon, {
6893
- "end": true
6894
- }, null) : undefined]
6895
- }), hasClose && createVNode(VDefaultsProvider, {
6982
+ }, slots.append)]), hasClose && createVNode("div", mergeProps({
6896
6983
  "key": "close",
6984
+ "class": "v-chip__close"
6985
+ }, closeProps.value), [!slots.close ? createVNode(VIcon, {
6986
+ "key": "close-icon",
6987
+ "icon": props.closeIcon,
6988
+ "size": "x-small"
6989
+ }, null) : createVNode(VDefaultsProvider, {
6990
+ "key": "close-defaults",
6897
6991
  "defaults": {
6898
6992
  VIcon: {
6899
6993
  icon: props.closeIcon,
6900
6994
  size: 'x-small'
6901
6995
  }
6902
6996
  }
6903
- }, {
6904
- default: () => [createVNode("div", {
6905
- "class": "v-chip__close",
6906
- "aria-label": t(props.closeLabel),
6907
- "onClick": onCloseClick
6908
- }, [slots.close ? slots.close() : createVNode(VIcon, null, null)])]
6909
- })]
6997
+ }, slots.close)])]
6910
6998
  }), [[resolveDirective("ripple"), isClickable.value && props.ripple, null]]);
6911
6999
  };
6912
7000
  }
@@ -7047,7 +7135,6 @@ const listOpenStrategy = {
7047
7135
  };
7048
7136
 
7049
7137
  /* eslint-disable sonarjs/no-identical-functions */
7050
-
7051
7138
  const independentSelectStrategy = mandatory => {
7052
7139
  const strategy = {
7053
7140
  select: _ref => {
@@ -7056,6 +7143,8 @@ const independentSelectStrategy = mandatory => {
7056
7143
  value,
7057
7144
  selected
7058
7145
  } = _ref;
7146
+ id = toRaw(id);
7147
+
7059
7148
  // When mandatory and we're trying to deselect when id
7060
7149
  // is the only currently selected item then do nothing
7061
7150
  if (mandatory && !value) {
@@ -7100,6 +7189,7 @@ const independentSingleSelectStrategy = mandatory => {
7100
7189
  id,
7101
7190
  ...rest
7102
7191
  } = _ref3;
7192
+ id = toRaw(id);
7103
7193
  const singleSelected = selected.has(id) ? new Map([[id, selected.get(id)]]) : new Map();
7104
7194
  return parentStrategy.select({
7105
7195
  ...rest,
@@ -7130,6 +7220,7 @@ const leafSelectStrategy = mandatory => {
7130
7220
  children,
7131
7221
  ...rest
7132
7222
  } = _ref4;
7223
+ id = toRaw(id);
7133
7224
  if (children.has(id)) return selected;
7134
7225
  return parentStrategy.select({
7135
7226
  id,
@@ -7153,6 +7244,7 @@ const leafSingleSelectStrategy = mandatory => {
7153
7244
  children,
7154
7245
  ...rest
7155
7246
  } = _ref5;
7247
+ id = toRaw(id);
7156
7248
  if (children.has(id)) return selected;
7157
7249
  return parentStrategy.select({
7158
7250
  id,
@@ -7176,6 +7268,7 @@ const classicSelectStrategy = mandatory => {
7176
7268
  children,
7177
7269
  parents
7178
7270
  } = _ref6;
7271
+ id = toRaw(id);
7179
7272
  const original = new Map(selected);
7180
7273
  const items = [id];
7181
7274
  while (items.length) {
@@ -7397,7 +7490,7 @@ const useNestedItem = (id, isGroup) => {
7397
7490
  isOpen: computed(() => parent.root.opened.value.has(computedId.value)),
7398
7491
  parent: computed(() => parent.root.parents.value.get(computedId.value)),
7399
7492
  select: (selected, e) => parent.root.select(computedId.value, selected, e),
7400
- isSelected: computed(() => parent.root.selected.value.get(computedId.value) === 'on'),
7493
+ isSelected: computed(() => parent.root.selected.value.get(toRaw(computedId.value)) === 'on'),
7401
7494
  isIndeterminate: computed(() => parent.root.selected.value.get(computedId.value) === 'indeterminate'),
7402
7495
  isLeaf: computed(() => !parent.root.children.value.get(computedId.value)),
7403
7496
  isGroupActivator: parent.isGroupActivator
@@ -7417,8 +7510,6 @@ const useNestedGroupActivator = () => {
7417
7510
  });
7418
7511
  };
7419
7512
 
7420
- // Types
7421
-
7422
7513
  const VListGroupActivator = defineComponent({
7423
7514
  name: 'VListGroupActivator',
7424
7515
  setup(_, _ref) {
@@ -7511,9 +7602,6 @@ const VListGroup = genericComponent()({
7511
7602
  return {};
7512
7603
  }
7513
7604
  });
7514
- function filterListGroupProps(props) {
7515
- return pick(props, Object.keys(VListGroup.props));
7516
- }
7517
7605
 
7518
7606
  const VListItemSubtitle = createSimpleFunctional('v-list-item-subtitle');
7519
7607
 
@@ -7651,8 +7739,10 @@ const VListItem = genericComponent()({
7651
7739
  const hasColor = !list || isSelected.value || isActive.value;
7652
7740
  const hasTitle = slots.title || props.title;
7653
7741
  const hasSubtitle = slots.subtitle || props.subtitle;
7654
- const hasAppend = !!(slots.append || props.appendAvatar || props.appendIcon);
7655
- const hasPrepend = !!(slots.prepend || props.prependAvatar || props.prependIcon);
7742
+ const hasAppendMedia = !!(props.appendAvatar || props.appendIcon);
7743
+ const hasAppend = !!(hasAppendMedia || slots.append);
7744
+ const hasPrependMedia = !!(props.prependAvatar || props.prependIcon);
7745
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
7656
7746
  list?.updateHasPrepend(hasPrepend);
7657
7747
  return withDirectives(createVNode(Tag, {
7658
7748
  "class": ['v-list-item', {
@@ -7672,7 +7762,7 @@ const VListItem = genericComponent()({
7672
7762
  default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && createVNode("div", {
7673
7763
  "key": "prepend",
7674
7764
  "class": "v-list-item__prepend"
7675
- }, [props.prependAvatar && createVNode(VAvatar, {
7765
+ }, [!slots.prepend ? createVNode(Fragment, null, [props.prependAvatar && createVNode(VAvatar, {
7676
7766
  "key": "prepend-avatar",
7677
7767
  "density": props.density,
7678
7768
  "image": props.prependAvatar
@@ -7680,8 +7770,9 @@ const VListItem = genericComponent()({
7680
7770
  "key": "prepend-icon",
7681
7771
  "density": props.density,
7682
7772
  "icon": props.prependIcon
7683
- }, null), slots.prepend && createVNode(VDefaultsProvider, {
7684
- "key": "prepend",
7773
+ }, null)]) : createVNode(VDefaultsProvider, {
7774
+ "key": "prepend-defaults",
7775
+ "disabled": !hasPrependMedia,
7685
7776
  "defaults": {
7686
7777
  VAvatar: {
7687
7778
  density: props.density,
@@ -7696,7 +7787,7 @@ const VListItem = genericComponent()({
7696
7787
  }
7697
7788
  }
7698
7789
  }, {
7699
- default: () => [slots.prepend(slotProps.value)]
7790
+ default: () => [slots.prepend?.(slotProps.value)]
7700
7791
  })]), createVNode("div", {
7701
7792
  "class": "v-list-item__content",
7702
7793
  "data-no-activator": ""
@@ -7715,8 +7806,17 @@ const VListItem = genericComponent()({
7715
7806
  }), slots.default?.(slotProps.value)]), hasAppend && createVNode("div", {
7716
7807
  "key": "append",
7717
7808
  "class": "v-list-item__append"
7718
- }, [slots.append && createVNode(VDefaultsProvider, {
7719
- "key": "append",
7809
+ }, [!slots.append ? createVNode(Fragment, null, [props.appendIcon && createVNode(VIcon, {
7810
+ "key": "append-icon",
7811
+ "density": props.density,
7812
+ "icon": props.appendIcon
7813
+ }, null), props.appendAvatar && createVNode(VAvatar, {
7814
+ "key": "append-avatar",
7815
+ "density": props.density,
7816
+ "image": props.appendAvatar
7817
+ }, null)]) : createVNode(VDefaultsProvider, {
7818
+ "key": "append-defaults",
7819
+ "disabled": !hasAppendMedia,
7720
7820
  "defaults": {
7721
7821
  VAvatar: {
7722
7822
  density: props.density,
@@ -7731,16 +7831,8 @@ const VListItem = genericComponent()({
7731
7831
  }
7732
7832
  }
7733
7833
  }, {
7734
- default: () => [slots.append(slotProps.value)]
7735
- }), props.appendIcon && createVNode(VIcon, {
7736
- "key": "append-icon",
7737
- "density": props.density,
7738
- "icon": props.appendIcon
7739
- }, null), props.appendAvatar && createVNode(VAvatar, {
7740
- "key": "append-avatar",
7741
- "density": props.density,
7742
- "image": props.appendAvatar
7743
- }, null)])]
7834
+ default: () => [slots.append?.(slotProps.value)]
7835
+ })])]
7744
7836
  }), [[resolveDirective("ripple"), isClickable.value && props.ripple]]);
7745
7837
  });
7746
7838
  return {};
@@ -7837,7 +7929,7 @@ const VListChildren = genericComponent()({
7837
7929
  item
7838
7930
  }) : undefined
7839
7931
  };
7840
- const [listGroupProps, _1] = filterListGroupProps(itemProps);
7932
+ const [listGroupProps, _1] = VListGroup.filterProps(itemProps);
7841
7933
  return children ? createVNode(VListGroup, mergeProps({
7842
7934
  "value": itemProps?.value
7843
7935
  }, listGroupProps), {
@@ -8959,7 +9051,7 @@ function useScrollStrategies(props, data) {
8959
9051
  if (!(data.isActive.value && props.scrollStrategy)) return;
8960
9052
  scope = effectScope();
8961
9053
  await nextTick();
8962
- scope.run(() => {
9054
+ scope.active && scope.run(() => {
8963
9055
  if (typeof props.scrollStrategy === 'function') {
8964
9056
  props.scrollStrategy(data, props, scope);
8965
9057
  } else {
@@ -9040,7 +9132,7 @@ function repositionScrollStrategy(data, props, scope) {
9040
9132
  });
9041
9133
  });
9042
9134
  onScopeDispose(() => {
9043
- cancelIdleCallback(ric);
9135
+ typeof cancelIdleCallback !== 'undefined' && cancelIdleCallback(ric);
9044
9136
  cancelAnimationFrame(raf);
9045
9137
  });
9046
9138
  }
@@ -9064,6 +9156,8 @@ function bindScroll(el, onScroll) {
9064
9156
 
9065
9157
  // Types
9066
9158
 
9159
+ const breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl']; // no xs
9160
+
9067
9161
  const DisplaySymbol = Symbol.for('vuetify:display');
9068
9162
  const defaultDisplayOptions = {
9069
9163
  mobileBreakpoint: 'lg',
@@ -9086,8 +9180,8 @@ function getClientWidth(isHydrate) {
9086
9180
  function getClientHeight(isHydrate) {
9087
9181
  return IN_BROWSER && !isHydrate ? window.innerHeight : 0;
9088
9182
  }
9089
- function getPlatform() {
9090
- const userAgent = IN_BROWSER ? window.navigator.userAgent : 'ssr';
9183
+ function getPlatform(isHydrate) {
9184
+ const userAgent = IN_BROWSER && !isHydrate ? window.navigator.userAgent : 'ssr';
9091
9185
  function match(regexp) {
9092
9186
  return Boolean(userAgent.match(regexp));
9093
9187
  }
@@ -9102,7 +9196,6 @@ function getPlatform() {
9102
9196
  const win = match(/win/i);
9103
9197
  const mac = match(/mac/i);
9104
9198
  const linux = match(/linux/i);
9105
- const ssr = match(/ssr/i);
9106
9199
  return {
9107
9200
  android,
9108
9201
  ios,
@@ -9116,7 +9209,7 @@ function getPlatform() {
9116
9209
  mac,
9117
9210
  linux,
9118
9211
  touch: SUPPORTS_TOUCH,
9119
- ssr
9212
+ ssr: userAgent === 'ssr'
9120
9213
  };
9121
9214
  }
9122
9215
  function createDisplay(options, ssr) {
@@ -9125,13 +9218,17 @@ function createDisplay(options, ssr) {
9125
9218
  mobileBreakpoint
9126
9219
  } = parseDisplayOptions(options);
9127
9220
  const height = ref(getClientHeight(ssr));
9128
- const platform = getPlatform();
9221
+ const platform = shallowRef(getPlatform(ssr));
9129
9222
  const state = reactive({});
9130
9223
  const width = ref(getClientWidth(ssr));
9131
- function update() {
9224
+ function updateSize() {
9132
9225
  height.value = getClientHeight();
9133
9226
  width.value = getClientWidth();
9134
9227
  }
9228
+ function update() {
9229
+ updateSize();
9230
+ platform.value = getPlatform();
9231
+ }
9135
9232
 
9136
9233
  // eslint-disable-next-line max-statements
9137
9234
  watchEffect(() => {
@@ -9143,7 +9240,7 @@ function createDisplay(options, ssr) {
9143
9240
  const xxl = width.value >= thresholds.xxl;
9144
9241
  const name = xs ? 'xs' : sm ? 'sm' : md ? 'md' : lg ? 'lg' : xl ? 'xl' : 'xxl';
9145
9242
  const breakpointValue = typeof mobileBreakpoint === 'number' ? mobileBreakpoint : thresholds[mobileBreakpoint];
9146
- const mobile = !platform.ssr ? width.value < breakpointValue : platform.android || platform.ios || platform.opera;
9243
+ const mobile = width.value < breakpointValue;
9147
9244
  state.xs = xs;
9148
9245
  state.sm = sm;
9149
9246
  state.md = md;
@@ -9163,11 +9260,11 @@ function createDisplay(options, ssr) {
9163
9260
  state.width = width.value;
9164
9261
  state.mobile = mobile;
9165
9262
  state.mobileBreakpoint = mobileBreakpoint;
9166
- state.platform = platform;
9263
+ state.platform = platform.value;
9167
9264
  state.thresholds = thresholds;
9168
9265
  });
9169
9266
  if (IN_BROWSER) {
9170
- window.addEventListener('resize', update, {
9267
+ window.addEventListener('resize', updateSize, {
9171
9268
  passive: true
9172
9269
  });
9173
9270
  }
@@ -9232,7 +9329,7 @@ function useStack(isActive, zIndex, disableGlobalStack) {
9232
9329
  parent?.activeChildren.add(vm.uid);
9233
9330
  onScopeDispose(() => {
9234
9331
  if (createStackEntry) {
9235
- const idx = globalStack.findIndex(v => v[0] === vm.uid);
9332
+ const idx = toRaw(globalStack).findIndex(v => v[0] === vm.uid);
9236
9333
  globalStack.splice(idx, 1);
9237
9334
  }
9238
9335
  parent?.activeChildren.delete(vm.uid);
@@ -9616,9 +9713,6 @@ const VOverlay = genericComponent()({
9616
9713
  };
9617
9714
  }
9618
9715
  });
9619
- function filterVOverlayProps(props) {
9620
- return pick(props, Object.keys(VOverlay.props));
9621
- }
9622
9716
 
9623
9717
  // Types
9624
9718
 
@@ -9655,17 +9749,17 @@ const VMenu = genericComponent()({
9655
9749
  const id = computed(() => props.id || `v-menu-${uid}`);
9656
9750
  const overlay = ref();
9657
9751
  const parent = inject$1(VMenuSymbol, null);
9658
- let openChildren = 0;
9752
+ const openChildren = ref(0);
9659
9753
  provide(VMenuSymbol, {
9660
9754
  register() {
9661
- ++openChildren;
9755
+ ++openChildren.value;
9662
9756
  },
9663
9757
  unregister() {
9664
- --openChildren;
9758
+ --openChildren.value;
9665
9759
  },
9666
9760
  closeParents() {
9667
9761
  setTimeout(() => {
9668
- if (!openChildren) {
9762
+ if (!openChildren.value) {
9669
9763
  isActive.value = false;
9670
9764
  parent?.closeParents();
9671
9765
  }
@@ -9684,7 +9778,7 @@ const VMenu = genericComponent()({
9684
9778
  'aria-owns': id.value
9685
9779
  }, props.activatorProps));
9686
9780
  useRender(() => {
9687
- const [overlayProps] = filterVOverlayProps(props);
9781
+ const [overlayProps] = VOverlay.filterProps(props);
9688
9782
  return createVNode(VOverlay, mergeProps({
9689
9783
  "ref": overlay,
9690
9784
  "class": ['v-menu']
@@ -9709,7 +9803,8 @@ const VMenu = genericComponent()({
9709
9803
  });
9710
9804
  });
9711
9805
  return forwardRefs({
9712
- id
9806
+ id,
9807
+ ΨopenChildren: openChildren
9713
9808
  }, overlay);
9714
9809
  }
9715
9810
  });
@@ -9769,7 +9864,15 @@ const VSelect = genericComponent()({
9769
9864
  t
9770
9865
  } = useLocale();
9771
9866
  const vTextFieldRef = ref();
9772
- const menu = useProxiedModel(props, 'menu');
9867
+ const vMenuRef = ref();
9868
+ const _menu = useProxiedModel(props, 'menu');
9869
+ const menu = computed({
9870
+ get: () => _menu.value,
9871
+ set: v => {
9872
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
9873
+ _menu.value = v;
9874
+ }
9875
+ });
9773
9876
  const {
9774
9877
  items,
9775
9878
  transformIn,
@@ -9851,7 +9954,7 @@ const VSelect = genericComponent()({
9851
9954
  useRender(() => {
9852
9955
  const hasChips = !!(props.chips || slots.chip);
9853
9956
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
9854
- const [textFieldProps] = filterVTextFieldProps(props);
9957
+ const [textFieldProps] = VTextField.filterProps(props);
9855
9958
  return createVNode(VTextField, mergeProps({
9856
9959
  "ref": vTextFieldRef
9857
9960
  }, textFieldProps, {
@@ -9876,6 +9979,7 @@ const VSelect = genericComponent()({
9876
9979
  }), {
9877
9980
  ...slots,
9878
9981
  default: () => createVNode(Fragment, null, [createVNode(VMenu, mergeProps({
9982
+ "ref": vMenuRef,
9879
9983
  "modelValue": menu.value,
9880
9984
  "onUpdate:modelValue": $event => menu.value = $event,
9881
9985
  "activator": "parent",
@@ -9936,7 +10040,13 @@ const VSelect = genericComponent()({
9936
10040
  return createVNode("div", {
9937
10041
  "key": item.value,
9938
10042
  "class": "v-select__selection"
9939
- }, [hasChips ? createVNode(VDefaultsProvider, {
10043
+ }, [hasChips ? !slots.chip ? createVNode(VChip, mergeProps({
10044
+ "key": "chip",
10045
+ "closable": props.closableChips,
10046
+ "size": "small",
10047
+ "text": item.title
10048
+ }, slotProps), null) : createVNode(VDefaultsProvider, {
10049
+ "key": "chip-defaults",
9940
10050
  "defaults": {
9941
10051
  VChip: {
9942
10052
  closable: props.closableChips,
@@ -9945,15 +10055,15 @@ const VSelect = genericComponent()({
9945
10055
  }
9946
10056
  }
9947
10057
  }, {
9948
- default: () => [slots.chip ? slots.chip({
10058
+ default: () => [slots.chip?.({
9949
10059
  item,
9950
10060
  index,
9951
10061
  props: slotProps
9952
- }) : createVNode(VChip, slotProps, null)]
9953
- }) : slots.selection ? slots.selection({
10062
+ })]
10063
+ }) : slots.selection?.({
9954
10064
  item,
9955
10065
  index
9956
- }) : createVNode("span", {
10066
+ }) ?? createVNode("span", {
9957
10067
  "class": "v-select__selection-text"
9958
10068
  }, [item.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
9959
10069
  "class": "v-select__selection-comma"
@@ -10114,7 +10224,15 @@ const VAutocomplete = genericComponent()({
10114
10224
  const vTextFieldRef = ref();
10115
10225
  const isFocused = ref(false);
10116
10226
  const isPristine = ref(true);
10117
- const menu = useProxiedModel(props, 'menu');
10227
+ const vMenuRef = ref();
10228
+ const _menu = useProxiedModel(props, 'menu');
10229
+ const menu = computed({
10230
+ get: () => _menu.value,
10231
+ set: v => {
10232
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
10233
+ _menu.value = v;
10234
+ }
10235
+ });
10118
10236
  const {
10119
10237
  items,
10120
10238
  transformIn,
@@ -10229,7 +10347,7 @@ const VAutocomplete = genericComponent()({
10229
10347
  useRender(() => {
10230
10348
  const hasChips = !!(props.chips || slots.chip);
10231
10349
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
10232
- const [textFieldProps] = filterVTextFieldProps(props);
10350
+ const [textFieldProps] = VTextField.filterProps(props);
10233
10351
  return createVNode(VTextField, mergeProps({
10234
10352
  "ref": vTextFieldRef
10235
10353
  }, textFieldProps, {
@@ -10256,6 +10374,7 @@ const VAutocomplete = genericComponent()({
10256
10374
  }), {
10257
10375
  ...slots,
10258
10376
  default: () => createVNode(Fragment, null, [createVNode(VMenu, mergeProps({
10377
+ "ref": vMenuRef,
10259
10378
  "modelValue": menu.value,
10260
10379
  "onUpdate:modelValue": $event => menu.value = $event,
10261
10380
  "activator": "parent",
@@ -10316,7 +10435,13 @@ const VAutocomplete = genericComponent()({
10316
10435
  return createVNode("div", {
10317
10436
  "key": item.value,
10318
10437
  "class": "v-autocomplete__selection"
10319
- }, [hasChips ? createVNode(VDefaultsProvider, {
10438
+ }, [hasChips ? !slots.chip ? createVNode(VChip, mergeProps({
10439
+ "key": "chip",
10440
+ "closable": props.closableChips,
10441
+ "size": "small",
10442
+ "text": item.title
10443
+ }, slotProps), null) : createVNode(VDefaultsProvider, {
10444
+ "key": "chip-defaults",
10320
10445
  "defaults": {
10321
10446
  VChip: {
10322
10447
  closable: props.closableChips,
@@ -10325,15 +10450,15 @@ const VAutocomplete = genericComponent()({
10325
10450
  }
10326
10451
  }
10327
10452
  }, {
10328
- default: () => [slots.chip ? slots.chip({
10453
+ default: () => [slots.chip?.({
10329
10454
  item,
10330
10455
  index,
10331
10456
  props: slotProps
10332
- }) : createVNode(VChip, slotProps, null)]
10333
- }) : slots.selection ? slots.selection({
10457
+ })]
10458
+ }) : slots.selection?.({
10334
10459
  item,
10335
10460
  index
10336
- }) : createVNode("span", {
10461
+ }) ?? createVNode("span", {
10337
10462
  "class": "v-autocomplete__selection-text"
10338
10463
  }, [item.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
10339
10464
  "class": "v-autocomplete__selection-comma"
@@ -10534,7 +10659,8 @@ const VBanner = genericComponent()({
10534
10659
  });
10535
10660
  useRender(() => {
10536
10661
  const hasText = !!(props.text || slots.text);
10537
- const hasPrepend = !!(slots.prepend || props.avatar || props.icon);
10662
+ const hasPrependMedia = !!(props.avatar || props.icon);
10663
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
10538
10664
  return createVNode(props.tag, {
10539
10665
  "class": ['v-banner', {
10540
10666
  'v-banner--stacked': props.stacked || mobile.value,
@@ -10544,8 +10670,18 @@ const VBanner = genericComponent()({
10544
10670
  "style": [dimensionStyles.value, locationStyles.value],
10545
10671
  "role": "banner"
10546
10672
  }, {
10547
- default: () => [hasPrepend && createVNode(VDefaultsProvider, {
10673
+ default: () => [hasPrepend && createVNode("div", {
10548
10674
  "key": "prepend",
10675
+ "class": "v-banner__prepend"
10676
+ }, [!slots.prepend ? createVNode(VAvatar, {
10677
+ "key": "prepend-avatar",
10678
+ "color": color.value,
10679
+ "density": density.value,
10680
+ "icon": props.icon,
10681
+ "image": props.avatar
10682
+ }, null) : createVNode(VDefaultsProvider, {
10683
+ "key": "prepend-defaults",
10684
+ "disabled": !hasPrependMedia,
10549
10685
  "defaults": {
10550
10686
  VAvatar: {
10551
10687
  color: color.value,
@@ -10554,19 +10690,15 @@ const VBanner = genericComponent()({
10554
10690
  image: props.avatar
10555
10691
  }
10556
10692
  }
10557
- }, {
10558
- default: () => [createVNode("div", {
10559
- "class": "v-banner__prepend"
10560
- }, [slots.prepend ? slots.prepend() : (props.avatar || props.icon) && createVNode(VAvatar, null, null)])]
10561
- }), createVNode("div", {
10693
+ }, slots.prepend)]), createVNode("div", {
10562
10694
  "class": "v-banner__content"
10563
10695
  }, [hasText && createVNode(VBannerText, {
10564
10696
  "key": "text"
10565
10697
  }, {
10566
- default: () => [slots.text ? slots.text() : props.text]
10567
- }), slots.default?.()]), slots.actions && createVNode(VBannerActions, null, {
10568
- default: () => [slots.actions()]
10569
- })]
10698
+ default: () => [slots.text?.() ?? props.text]
10699
+ }), slots.default?.()]), slots.actions && createVNode(VBannerActions, {
10700
+ "key": "actions"
10701
+ }, slots.actions)]
10570
10702
  });
10571
10703
  });
10572
10704
  }
@@ -10632,6 +10764,9 @@ const VBottomNavigation = genericComponent()({
10632
10764
  const {
10633
10765
  roundedClasses
10634
10766
  } = useRounded(props);
10767
+ const {
10768
+ ssrBootStyles
10769
+ } = useSsrBoot();
10635
10770
  const height = computed(() => Number(props.height) - (props.density === 'comfortable' ? 8 : 0) - (props.density === 'compact' ? 16 : 0));
10636
10771
  const isActive = toRef(props, 'active');
10637
10772
  const {
@@ -10666,7 +10801,7 @@ const VBottomNavigation = genericComponent()({
10666
10801
  "style": [backgroundColorStyles.value, layoutItemStyles.value, {
10667
10802
  height: convertToUnit(height.value),
10668
10803
  transform: `translateY(${convertToUnit(!isActive.value ? 100 : 0, '%')})`
10669
- }]
10804
+ }, ssrBootStyles.value]
10670
10805
  }, {
10671
10806
  default: () => [slots.default && createVNode("div", {
10672
10807
  "class": "v-bottom-navigation__content"
@@ -10796,19 +10931,23 @@ const VBreadcrumbs = genericComponent()({
10796
10931
  "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
10797
10932
  "style": backgroundColorStyles.value
10798
10933
  }, {
10799
- default: () => [hasPrepend && createVNode(VDefaultsProvider, {
10934
+ default: () => [hasPrepend && createVNode("div", {
10800
10935
  "key": "prepend",
10936
+ "class": "v-breadcrumbs__prepend"
10937
+ }, [!slots.prepend ? createVNode(VIcon, {
10938
+ "key": "prepend-icon",
10939
+ "start": true,
10940
+ "icon": props.icon
10941
+ }, null) : createVNode(VDefaultsProvider, {
10942
+ "key": "prepend-defaults",
10943
+ "disabled": !props.icon,
10801
10944
  "defaults": {
10802
10945
  VIcon: {
10803
10946
  icon: props.icon,
10804
10947
  start: true
10805
10948
  }
10806
10949
  }
10807
- }, {
10808
- default: () => [createVNode("div", {
10809
- "class": "v-breadcrumbs__prepend"
10810
- }, [slots.prepend ? slots.prepend() : props.icon && createVNode(VIcon, null, null)])]
10811
- }), props.items.map((item, index, array) => createVNode(Fragment, null, [createVNode(VBreadcrumbsItem, mergeProps({
10950
+ }, slots.prepend)]), props.items.map((item, index, array) => createVNode(Fragment, null, [createVNode(VBreadcrumbsItem, mergeProps({
10812
10951
  "key": index,
10813
10952
  "disabled": index >= array.length - 1
10814
10953
  }, typeof item === 'string' ? {
@@ -10872,30 +11011,33 @@ const VCardItem = genericComponent()({
10872
11011
  slots
10873
11012
  } = _ref;
10874
11013
  useRender(() => {
10875
- const hasPrepend = !!(props.prependAvatar || props.prependIcon || slots.prepend);
10876
- const hasAppend = !!(props.appendAvatar || props.appendIcon || slots.append);
11014
+ const hasPrependMedia = !!(props.prependAvatar || props.prependIcon);
11015
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
11016
+ const hasAppendMedia = !!(props.appendAvatar || props.appendIcon);
11017
+ const hasAppend = !!(hasAppendMedia || slots.append);
10877
11018
  const hasTitle = !!(props.title || slots.title);
10878
11019
  const hasSubtitle = !!(props.subtitle || slots.subtitle);
10879
11020
  return createVNode("div", {
10880
11021
  "class": "v-card-item"
10881
- }, [hasPrepend && createVNode(VDefaultsProvider, {
11022
+ }, [hasPrepend && createVNode("div", {
10882
11023
  "key": "prepend",
11024
+ "class": "v-card-item__prepend"
11025
+ }, [!slots.prepend ? hasPrependMedia && createVNode(VAvatar, {
11026
+ "key": "prepend-avatar",
11027
+ "density": props.density,
11028
+ "icon": props.prependIcon,
11029
+ "image": props.prependAvatar
11030
+ }, null) : createVNode(VDefaultsProvider, {
11031
+ "key": "prepend-defaults",
11032
+ "disabled": !hasPrependMedia,
10883
11033
  "defaults": {
10884
11034
  VAvatar: {
10885
11035
  density: props.density,
10886
11036
  icon: props.prependIcon,
10887
11037
  image: props.prependAvatar
10888
- },
10889
- VIcon: {
10890
- density: props.density,
10891
- icon: props.prependIcon
10892
11038
  }
10893
11039
  }
10894
- }, {
10895
- default: () => [createVNode("div", {
10896
- "class": "v-card-item__prepend"
10897
- }, [slots.prepend?.() ?? createVNode(VAvatar, null, null)])]
10898
- }), createVNode("div", {
11040
+ }, slots.prepend)]), createVNode("div", {
10899
11041
  "class": "v-card-item__content"
10900
11042
  }, [hasTitle && createVNode(VCardTitle, {
10901
11043
  "key": "title"
@@ -10905,24 +11047,25 @@ const VCardItem = genericComponent()({
10905
11047
  "key": "subtitle"
10906
11048
  }, {
10907
11049
  default: () => [slots.subtitle?.() ?? props.subtitle]
10908
- }), slots.default?.()]), hasAppend && createVNode(VDefaultsProvider, {
11050
+ }), slots.default?.()]), hasAppend && createVNode("div", {
10909
11051
  "key": "append",
11052
+ "class": "v-card-item__append"
11053
+ }, [!slots.append ? hasAppendMedia && createVNode(VAvatar, {
11054
+ "key": "append-avatar",
11055
+ "density": props.density,
11056
+ "icon": props.appendIcon,
11057
+ "image": props.appendAvatar
11058
+ }, null) : createVNode(VDefaultsProvider, {
11059
+ "key": "append-defaults",
11060
+ "disabled": !hasAppendMedia,
10910
11061
  "defaults": {
10911
11062
  VAvatar: {
10912
11063
  density: props.density,
10913
11064
  icon: props.appendIcon,
10914
11065
  image: props.appendAvatar
10915
- },
10916
- VIcon: {
10917
- density: props.density,
10918
- icon: props.appendIcon
10919
11066
  }
10920
11067
  }
10921
- }, {
10922
- default: () => [createVNode("div", {
10923
- "class": "v-card-item__append"
10924
- }, [slots.append?.() ?? createVNode(VAvatar, null, null)])]
10925
- })]);
11068
+ }, slots.append)])]);
10926
11069
  });
10927
11070
  return {};
10928
11071
  }
@@ -11034,19 +11177,23 @@ const VCard = genericComponent()({
11034
11177
  "onClick": isClickable.value && link.navigate,
11035
11178
  "tabindex": props.disabled ? -1 : undefined
11036
11179
  }, {
11037
- default: () => [hasImage && createVNode(VDefaultsProvider, {
11180
+ default: () => [hasImage && createVNode("div", {
11038
11181
  "key": "image",
11182
+ "class": "v-card__image"
11183
+ }, [!slots.image ? createVNode(VImg, {
11184
+ "key": "image-img",
11185
+ "cover": true,
11186
+ "src": props.image
11187
+ }, null) : createVNode(VDefaultsProvider, {
11188
+ "key": "image-defaults",
11189
+ "disabled": !props.image,
11039
11190
  "defaults": {
11040
11191
  VImg: {
11041
11192
  cover: true,
11042
11193
  src: props.image
11043
11194
  }
11044
11195
  }
11045
- }, {
11046
- default: () => [createVNode("div", {
11047
- "class": "v-card__image"
11048
- }, [slots.image?.() ?? createVNode(VImg, null, null)])]
11049
- }), createVNode(LoaderSlot, {
11196
+ }, slots.image)]), createVNode(LoaderSlot, {
11050
11197
  "name": "v-card",
11051
11198
  "active": !!props.loading,
11052
11199
  "color": typeof props.loading === 'boolean' ? undefined : props.loading
@@ -11356,25 +11503,6 @@ const VWindow = genericComponent()({
11356
11503
  }
11357
11504
  });
11358
11505
 
11359
- // Utilities
11360
-
11361
- // Composables
11362
- function useSsrBoot() {
11363
- const isBooted = ref(false);
11364
- onMounted(() => {
11365
- window.requestAnimationFrame(() => {
11366
- isBooted.value = true;
11367
- });
11368
- });
11369
- const ssrBootStyles = computed(() => !isBooted.value ? {
11370
- transition: 'none !important'
11371
- } : undefined);
11372
- return {
11373
- ssrBootStyles,
11374
- isBooted: readonly(isBooted)
11375
- };
11376
- }
11377
-
11378
11506
  const VWindowItem = genericComponent()({
11379
11507
  name: 'VWindowItem',
11380
11508
  directives: {
@@ -11673,6 +11801,19 @@ const VColorPickerCanvas = defineComponent({
11673
11801
  };
11674
11802
  });
11675
11803
  const canvasRef = ref();
11804
+ const canvasWidth = ref(parseFloat(props.width));
11805
+ const canvasHeight = ref(parseFloat(props.height));
11806
+ const {
11807
+ resizeRef
11808
+ } = useResizeObserver(entries => {
11809
+ if (!resizeRef.value?.offsetParent) return;
11810
+ const {
11811
+ width,
11812
+ height
11813
+ } = entries[0].contentRect;
11814
+ canvasWidth.value = width;
11815
+ canvasHeight.value = height;
11816
+ });
11676
11817
  function updateDotPosition(x, y, rect) {
11677
11818
  const {
11678
11819
  left,
@@ -11717,18 +11858,14 @@ const VColorPickerCanvas = defineComponent({
11717
11858
  return;
11718
11859
  }
11719
11860
  if (!canvasRef.value) return;
11720
- const {
11721
- width,
11722
- height
11723
- } = canvasRef.value.getBoundingClientRect();
11724
11861
  const {
11725
11862
  x,
11726
11863
  y
11727
11864
  } = dotPosition.value;
11728
11865
  emit('update:color', {
11729
11866
  h: props.color?.h ?? 0,
11730
- s: clamp(x, 0, width) / width,
11731
- v: 1 - clamp(y, 0, height) / height,
11867
+ s: clamp(x, 0, canvasWidth.value) / canvasWidth.value,
11868
+ v: 1 - clamp(y, 0, canvasHeight.value) / canvasHeight.value,
11732
11869
  a: props.color?.a ?? 1
11733
11870
  });
11734
11871
  });
@@ -11751,16 +11888,27 @@ const VColorPickerCanvas = defineComponent({
11751
11888
  watch(() => props.color?.h, updateCanvas, {
11752
11889
  immediate: true
11753
11890
  });
11891
+ watch(() => [canvasWidth.value, canvasHeight.value], (newVal, oldVal) => {
11892
+ updateCanvas();
11893
+ dotPosition.value = {
11894
+ x: dotPosition.value.x * newVal[0] / oldVal[0],
11895
+ y: dotPosition.value.y * newVal[1] / oldVal[1]
11896
+ };
11897
+ }, {
11898
+ flush: 'post'
11899
+ });
11754
11900
  watch(() => props.color, () => {
11755
11901
  if (isInteracting.value) {
11756
11902
  isInteracting.value = false;
11757
11903
  return;
11758
11904
  }
11759
- if (!props.color) return;
11760
11905
  isOutsideUpdate.value = true;
11761
- dotPosition.value = {
11762
- x: props.color.s * parseInt(props.width, 10),
11763
- y: (1 - props.color.v) * parseInt(props.height, 10)
11906
+ dotPosition.value = props.color ? {
11907
+ x: props.color.s * canvasWidth.value,
11908
+ y: (1 - props.color.v) * canvasHeight.value
11909
+ } : {
11910
+ x: 0,
11911
+ y: 0
11764
11912
  };
11765
11913
  }, {
11766
11914
  deep: true,
@@ -11768,19 +11916,16 @@ const VColorPickerCanvas = defineComponent({
11768
11916
  });
11769
11917
  onMounted(() => updateCanvas());
11770
11918
  useRender(() => createVNode("div", {
11919
+ "ref": resizeRef,
11771
11920
  "class": "v-color-picker-canvas",
11772
- "style": {
11773
- width: convertToUnit(props.width),
11774
- height: convertToUnit(props.height)
11775
- },
11776
11921
  "onClick": handleClick,
11777
11922
  "onMousedown": handleMouseDown,
11778
11923
  "onTouchstart": handleMouseDown
11779
11924
  }, [createVNode("canvas", {
11780
11925
  "ref": canvasRef,
11781
- "width": props.width,
11782
- "height": props.height
11783
- }, null), createVNode("div", {
11926
+ "width": canvasWidth.value,
11927
+ "height": canvasHeight.value
11928
+ }, null), props.color && createVNode("div", {
11784
11929
  "class": ['v-color-picker-canvas__dot', {
11785
11930
  'v-color-picker-canvas__dot--disabled': props.disabled
11786
11931
  }],
@@ -11813,10 +11958,7 @@ function parseColor(color) {
11813
11958
  hsva = color;
11814
11959
  }
11815
11960
  }
11816
- return hsva != null ? {
11817
- ...hsva,
11818
- a: hsva.a ?? 1
11819
- } : null;
11961
+ return hsva;
11820
11962
  }
11821
11963
  function stripAlpha(color, stripAlpha) {
11822
11964
  if (stripAlpha) {
@@ -11836,7 +11978,7 @@ function extractColor(color, input) {
11836
11978
  if (typeof input === 'object') {
11837
11979
  let converted;
11838
11980
  if (has(input, ['r', 'g', 'b'])) converted = HSVtoRGB(color);else if (has(input, ['h', 's', 'l'])) converted = HSVtoHSL(color);else if (has(input, ['h', 's', 'v'])) converted = color;
11839
- return stripAlpha(converted, !has(input, ['a']));
11981
+ return stripAlpha(converted, !has(input, ['a']) && color.a === 1);
11840
11982
  }
11841
11983
  return color;
11842
11984
  }
@@ -12027,7 +12169,7 @@ const VColorPickerEdit = defineComponent({
12027
12169
  const inputs = computed(() => {
12028
12170
  const mode = enabledModes.value.find(m => m.name === props.mode);
12029
12171
  if (!mode) return [];
12030
- const color = props.color ? mode.to(props.color) : {};
12172
+ const color = props.color ? mode.to(props.color) : null;
12031
12173
  return mode.inputs?.map(_ref3 => {
12032
12174
  let {
12033
12175
  getValue,
@@ -12038,11 +12180,11 @@ const VColorPickerEdit = defineComponent({
12038
12180
  ...mode.inputProps,
12039
12181
  ...inputProps,
12040
12182
  disabled: props.disabled,
12041
- value: getValue(color),
12183
+ value: color && getValue(color),
12042
12184
  onChange: e => {
12043
12185
  const target = e.target;
12044
12186
  if (!target) return;
12045
- emit('update:color', mode.from(getColor(color, target.value)));
12187
+ emit('update:color', mode.from(getColor(color ?? nullColor, target.value)));
12046
12188
  }
12047
12189
  };
12048
12190
  });
@@ -12153,10 +12295,7 @@ const useSlider = _ref => {
12153
12295
  const min = computed(() => parseFloat(props.min));
12154
12296
  const max = computed(() => parseFloat(props.max));
12155
12297
  const step = computed(() => props.step > 0 ? parseFloat(props.step) : 0);
12156
- const decimals = computed(() => {
12157
- const trimmedStep = step.value.toString().trim();
12158
- return trimmedStep.includes('.') ? trimmedStep.length - trimmedStep.indexOf('.') - 1 : 0;
12159
- });
12298
+ const decimals = computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
12160
12299
  const thumbSize = computed(() => parseInt(props.thumbSize, 10));
12161
12300
  const tickSize = computed(() => parseInt(props.tickSize, 10));
12162
12301
  const trackSize = computed(() => parseInt(props.trackSize, 10));
@@ -12255,7 +12394,9 @@ const useSlider = _ref => {
12255
12394
  const percentage = (val - min.value) / (max.value - min.value) * 100;
12256
12395
  return clamp(isNaN(percentage) ? 0 : percentage, 0, 100);
12257
12396
  };
12397
+ const showTicks = toRef(props, 'showTicks');
12258
12398
  const parsedTicks = computed(() => {
12399
+ if (!showTicks.value) return [];
12259
12400
  if (!props.ticks) {
12260
12401
  return numTicks.value !== Infinity ? createRange(numTicks.value + 1).map(t => {
12261
12402
  const value = min.value + t * step.value;
@@ -12304,7 +12445,7 @@ const useSlider = _ref => {
12304
12445
  readonly: toRef(props, 'readonly'),
12305
12446
  rounded: toRef(props, 'rounded'),
12306
12447
  roundValue,
12307
- showTicks: toRef(props, 'showTicks'),
12448
+ showTicks,
12308
12449
  startOffset,
12309
12450
  step,
12310
12451
  thumbSize,
@@ -12526,6 +12667,7 @@ const VSliderTrack = genericComponent()({
12526
12667
  };
12527
12668
  });
12528
12669
  const computedTicks = computed(() => {
12670
+ if (!showTicks.value) return [];
12529
12671
  const ticks = vertical.value ? parsedTicks.value.slice().reverse() : parsedTicks.value;
12530
12672
  return ticks.map((tick, index) => {
12531
12673
  const directionProperty = vertical.value ? 'bottom' : 'margin-inline-start';
@@ -12741,12 +12883,12 @@ const VColorPickerPreview = defineComponent({
12741
12883
  "hideDetails": true
12742
12884
  }, null), !props.hideAlpha && createVNode(VSlider, {
12743
12885
  "class": "v-color-picker-preview__track v-color-picker-preview__alpha",
12744
- "modelValue": props.color?.a,
12886
+ "modelValue": props.color?.a ?? 1,
12745
12887
  "onUpdate:modelValue": a => emit('update:color', {
12746
12888
  ...(props.color ?? nullColor),
12747
12889
  a
12748
12890
  }),
12749
- "step": 0,
12891
+ "step": 1 / 256,
12750
12892
  "min": 0,
12751
12893
  "max": 1,
12752
12894
  "disabled": props.disabled,
@@ -13131,18 +13273,21 @@ const VColorPickerSwatches = defineComponent({
13131
13273
  }
13132
13274
  });
13133
13275
 
13276
+ const makeVSheetProps = propsFactory({
13277
+ color: String,
13278
+ ...makeBorderProps(),
13279
+ ...makeDimensionProps(),
13280
+ ...makeElevationProps(),
13281
+ ...makeLocationProps(),
13282
+ ...makePositionProps(),
13283
+ ...makeRoundedProps(),
13284
+ ...makeTagProps(),
13285
+ ...makeThemeProps()
13286
+ }, 'v-sheet');
13134
13287
  const VSheet = genericComponent()({
13135
13288
  name: 'VSheet',
13136
13289
  props: {
13137
- color: String,
13138
- ...makeBorderProps(),
13139
- ...makeDimensionProps(),
13140
- ...makeElevationProps(),
13141
- ...makeLocationProps(),
13142
- ...makePositionProps(),
13143
- ...makeRoundedProps(),
13144
- ...makeTagProps(),
13145
- ...makeThemeProps()
13290
+ ...makeVSheetProps()
13146
13291
  },
13147
13292
  setup(props, _ref) {
13148
13293
  let {
@@ -13173,10 +13318,11 @@ const VSheet = genericComponent()({
13173
13318
  const {
13174
13319
  roundedClasses
13175
13320
  } = useRounded(props);
13176
- return () => createVNode(props.tag, {
13321
+ useRender(() => createVNode(props.tag, {
13177
13322
  "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value],
13178
13323
  "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value]
13179
- }, slots);
13324
+ }, slots));
13325
+ return {};
13180
13326
  }
13181
13327
  });
13182
13328
 
@@ -13253,6 +13399,13 @@ const VColorPicker = defineComponent({
13253
13399
  onMounted(() => {
13254
13400
  if (!props.modes.includes(mode.value)) mode.value = props.modes[0];
13255
13401
  });
13402
+ provideDefaults({
13403
+ VSlider: {
13404
+ color: undefined,
13405
+ trackColor: undefined,
13406
+ trackFillColor: undefined
13407
+ }
13408
+ });
13256
13409
  useRender(() => createVNode(VSheet, {
13257
13410
  "rounded": props.rounded,
13258
13411
  "elevation": props.elevation,
@@ -13353,7 +13506,15 @@ const VCombobox = genericComponent()({
13353
13506
  const vTextFieldRef = ref();
13354
13507
  const isFocused = ref(false);
13355
13508
  const isPristine = ref(true);
13356
- const menu = useProxiedModel(props, 'menu');
13509
+ const vMenuRef = ref();
13510
+ const _menu = useProxiedModel(props, 'menu');
13511
+ const menu = computed({
13512
+ get: () => _menu.value,
13513
+ set: v => {
13514
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
13515
+ _menu.value = v;
13516
+ }
13517
+ });
13357
13518
  const selectionIndex = ref(-1);
13358
13519
  const color = computed(() => vTextFieldRef.value?.color);
13359
13520
  const {
@@ -13536,7 +13697,7 @@ const VCombobox = genericComponent()({
13536
13697
  useRender(() => {
13537
13698
  const hasChips = !!(props.chips || slots.chip);
13538
13699
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
13539
- const [textFieldProps] = filterVTextFieldProps(props);
13700
+ const [textFieldProps] = VTextField.filterProps(props);
13540
13701
  return createVNode(VTextField, mergeProps({
13541
13702
  "ref": vTextFieldRef
13542
13703
  }, textFieldProps, {
@@ -13562,6 +13723,7 @@ const VCombobox = genericComponent()({
13562
13723
  }), {
13563
13724
  ...slots,
13564
13725
  default: () => createVNode(Fragment, null, [createVNode(VMenu, mergeProps({
13726
+ "ref": vMenuRef,
13565
13727
  "modelValue": menu.value,
13566
13728
  "onUpdate:modelValue": $event => menu.value = $event,
13567
13729
  "activator": "parent",
@@ -13623,7 +13785,13 @@ const VCombobox = genericComponent()({
13623
13785
  "key": item.value,
13624
13786
  "class": ['v-combobox__selection', index === selectionIndex.value && ['v-combobox__selection--selected', textColorClasses.value]],
13625
13787
  "style": index === selectionIndex.value ? textColorStyles.value : {}
13626
- }, [hasChips ? createVNode(VDefaultsProvider, {
13788
+ }, [hasChips ? !slots.chip ? createVNode(VChip, mergeProps({
13789
+ "key": "chip",
13790
+ "closable": props.closableChips,
13791
+ "size": "small",
13792
+ "text": item.title
13793
+ }, slotProps), null) : createVNode(VDefaultsProvider, {
13794
+ "key": "chip-defaults",
13627
13795
  "defaults": {
13628
13796
  VChip: {
13629
13797
  closable: props.closableChips,
@@ -13632,15 +13800,15 @@ const VCombobox = genericComponent()({
13632
13800
  }
13633
13801
  }
13634
13802
  }, {
13635
- default: () => [slots.chip ? slots.chip({
13803
+ default: () => [slots.chip?.({
13636
13804
  item,
13637
13805
  index,
13638
13806
  props: slotProps
13639
- }) : createVNode(VChip, slotProps, null)]
13640
- }) : slots.selection ? slots.selection({
13807
+ })]
13808
+ }) : slots.selection?.({
13641
13809
  item,
13642
13810
  index
13643
- }) : createVNode("span", {
13811
+ }) ?? createVNode("span", {
13644
13812
  "class": "v-combobox__selection-text"
13645
13813
  }, [item.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
13646
13814
  "class": "v-combobox__selection-comma"
@@ -13737,7 +13905,7 @@ const VDialog = genericComponent()({
13737
13905
  'aria-expanded': String(isActive.value)
13738
13906
  }, props.activatorProps));
13739
13907
  useRender(() => {
13740
- const [overlayProps] = filterVOverlayProps(props);
13908
+ const [overlayProps] = VOverlay.filterProps(props);
13741
13909
  return createVNode(VOverlay, mergeProps({
13742
13910
  "ref": overlay,
13743
13911
  "class": ['v-dialog', {
@@ -14141,6 +14309,7 @@ const VFileInput = genericComponent()({
14141
14309
  "id": id.value,
14142
14310
  "active": isDirty.value || isFocused.value,
14143
14311
  "dirty": isDirty.value,
14312
+ "disabled": isDisabled.value,
14144
14313
  "focused": isFocused.value,
14145
14314
  "error": isValid.value === false
14146
14315
  }), {
@@ -14340,10 +14509,8 @@ const VContainer = genericComponent()({
14340
14509
 
14341
14510
  // Types
14342
14511
 
14343
- const breakpoints$1 = ['sm', 'md', 'lg', 'xl', 'xxl']; // no xs
14344
-
14345
14512
  const breakpointProps = (() => {
14346
- return breakpoints$1.reduce((props, val) => {
14513
+ return breakpoints.reduce((props, val) => {
14347
14514
  props[val] = {
14348
14515
  type: [Boolean, String, Number],
14349
14516
  default: false
@@ -14352,8 +14519,9 @@ const breakpointProps = (() => {
14352
14519
  }, {});
14353
14520
  })();
14354
14521
  const offsetProps = (() => {
14355
- return breakpoints$1.reduce((props, val) => {
14356
- props['offset' + capitalize(val)] = {
14522
+ return breakpoints.reduce((props, val) => {
14523
+ const offsetKey = 'offset' + capitalize(val);
14524
+ props[offsetKey] = {
14357
14525
  type: [String, Number],
14358
14526
  default: null
14359
14527
  };
@@ -14361,8 +14529,9 @@ const offsetProps = (() => {
14361
14529
  }, {});
14362
14530
  })();
14363
14531
  const orderProps = (() => {
14364
- return breakpoints$1.reduce((props, val) => {
14365
- props['order' + capitalize(val)] = {
14532
+ return breakpoints.reduce((props, val) => {
14533
+ const orderKey = 'order' + capitalize(val);
14534
+ props[orderKey] = {
14366
14535
  type: [String, Number],
14367
14536
  default: null
14368
14537
  };
@@ -14460,13 +14629,12 @@ const VCol = genericComponent()({
14460
14629
 
14461
14630
  // Types
14462
14631
 
14463
- const breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl']; // no xs
14464
-
14465
14632
  const ALIGNMENT = ['start', 'end', 'center'];
14466
14633
  const SPACE = ['space-between', 'space-around', 'space-evenly'];
14467
14634
  function makeRowProps(prefix, def) {
14468
14635
  return breakpoints.reduce((props, val) => {
14469
- props[prefix + capitalize(val)] = def();
14636
+ const prefixKey = prefix + capitalize(val);
14637
+ props[prefixKey] = def();
14470
14638
  return props;
14471
14639
  }, {});
14472
14640
  }
@@ -14796,7 +14964,10 @@ const VLazy = genericComponent()({
14796
14964
  }, {
14797
14965
  default: () => [slots.default?.()]
14798
14966
  })]
14799
- }), [[resolveDirective("intersect"), onIntersect, props.options]]));
14967
+ }), [[resolveDirective("intersect"), {
14968
+ handler: onIntersect,
14969
+ options: props.options
14970
+ }, null]]));
14800
14971
  return {};
14801
14972
  }
14802
14973
  });
@@ -15773,9 +15944,9 @@ const VParallax = genericComponent()({
15773
15944
  frame = requestAnimationFrame(() => {
15774
15945
  const el = (root.value?.$el).querySelector('.v-img__img');
15775
15946
  if (!el) return;
15776
- const scrollHeight = scrollParent.clientHeight ?? document.documentElement.clientHeight;
15777
- const scrollPos = scrollParent.scrollTop ?? window.scrollY;
15778
- const top = intersectionRef.value.offsetTop;
15947
+ const scrollHeight = scrollParent instanceof Document ? document.documentElement.clientHeight : scrollParent.clientHeight;
15948
+ const scrollPos = scrollParent instanceof Document ? window.scrollY : scrollParent.scrollTop;
15949
+ const top = intersectionRef.value.getBoundingClientRect().top + scrollPos;
15779
15950
  const height = contentRect.value.height;
15780
15951
  const center = top + (height - scrollHeight) / 2;
15781
15952
  const translate = floor((scrollPos - center) * scale.value);
@@ -15857,10 +16028,7 @@ const VRadioGroup = genericComponent()({
15857
16028
  useRender(() => {
15858
16029
  const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
15859
16030
  const [inputProps, _1] = filterInputProps(props);
15860
- const [controlProps, _2] = filterControlProps({
15861
- ...props,
15862
- multiple: false
15863
- });
16031
+ const [controlProps, _2] = VSelectionControl.filterProps(props);
15864
16032
  const label = slots.label ? slots.label({
15865
16033
  label: props.label,
15866
16034
  props: {
@@ -15895,7 +16063,8 @@ const VRadioGroup = genericComponent()({
15895
16063
  "type": props.type,
15896
16064
  "disabled": isDisabled.value,
15897
16065
  "readonly": isReadonly.value,
15898
- "aria-labelledby": label ? id.value : undefined
16066
+ "aria-labelledby": label ? id.value : undefined,
16067
+ "multiple": false
15899
16068
  }, controlAttrs, {
15900
16069
  "modelValue": model.value,
15901
16070
  "onUpdate:modelValue": $event => model.value = $event
@@ -16160,9 +16329,6 @@ const VRating = genericComponent()({
16160
16329
  const range = computed(() => createRange(Number(props.length), 1));
16161
16330
  const increments = computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]));
16162
16331
  const hoverIndex = ref(-1);
16163
- const focusIndex = ref(-1);
16164
- const firstRef = ref();
16165
- let isClicking = false;
16166
16332
  const itemState = computed(() => increments.value.map(value => {
16167
16333
  const isHovering = props.hover && hoverIndex.value > -1;
16168
16334
  const isFilled = normalizedValue.value >= value;
@@ -16185,16 +16351,6 @@ const VRating = genericComponent()({
16185
16351
  function onMouseleave() {
16186
16352
  hoverIndex.value = -1;
16187
16353
  }
16188
- function onFocus() {
16189
- if (value === 0 && normalizedValue.value === 0) {
16190
- firstRef.value?.focus();
16191
- } else {
16192
- focusIndex.value = value;
16193
- }
16194
- }
16195
- function onBlur() {
16196
- if (!isClicking) focusIndex.value = -1;
16197
- }
16198
16354
  function onClick() {
16199
16355
  if (props.disabled || props.readonly) return;
16200
16356
  rating.value = normalizedValue.value === value && props.clearable ? 0 : value;
@@ -16202,17 +16358,9 @@ const VRating = genericComponent()({
16202
16358
  return {
16203
16359
  onMouseenter: props.hover ? onMouseenter : undefined,
16204
16360
  onMouseleave: props.hover ? onMouseleave : undefined,
16205
- onFocus,
16206
- onBlur,
16207
16361
  onClick
16208
16362
  };
16209
16363
  }));
16210
- function onMousedown() {
16211
- isClicking = true;
16212
- }
16213
- function onMouseup() {
16214
- isClicking = false;
16215
- }
16216
16364
  const name = computed(() => props.name ?? `v-rating-${getUid()}`);
16217
16365
  function VRatingItem(_ref2) {
16218
16366
  let {
@@ -16223,8 +16371,6 @@ const VRating = genericComponent()({
16223
16371
  const {
16224
16372
  onMouseenter,
16225
16373
  onMouseleave,
16226
- onFocus,
16227
- onBlur,
16228
16374
  onClick
16229
16375
  } = eventState.value[index + 1];
16230
16376
  const id = `${name.value}-${String(value).replace('.', '-')}`;
@@ -16235,7 +16381,6 @@ const VRating = genericComponent()({
16235
16381
  icon: itemState.value[index]?.icon,
16236
16382
  ripple: props.ripple,
16237
16383
  size: props.size,
16238
- tag: 'span',
16239
16384
  variant: 'plain'
16240
16385
  };
16241
16386
  return createVNode(Fragment, null, [createVNode("label", {
@@ -16244,17 +16389,17 @@ const VRating = genericComponent()({
16244
16389
  'v-rating__item--half': props.halfIncrements && value % 1 > 0,
16245
16390
  'v-rating__item--full': props.halfIncrements && value % 1 === 0
16246
16391
  },
16247
- "onMousedown": onMousedown,
16248
- "onMouseup": onMouseup,
16249
16392
  "onMouseenter": onMouseenter,
16250
- "onMouseleave": onMouseleave
16393
+ "onMouseleave": onMouseleave,
16394
+ "onClick": onClick
16251
16395
  }, [createVNode("span", {
16252
16396
  "class": "v-rating__hidden"
16253
16397
  }, [t(props.itemAriaLabel, value, props.length)]), !showStar ? undefined : slots.item ? slots.item({
16254
16398
  ...itemState.value[index],
16255
16399
  props: btnProps,
16256
16400
  value,
16257
- index
16401
+ index,
16402
+ rating: normalizedValue.value
16258
16403
  }) : createVNode(VBtn, btnProps, null)]), createVNode("input", {
16259
16404
  "class": "v-rating__hidden",
16260
16405
  "name": name.value,
@@ -16262,10 +16407,7 @@ const VRating = genericComponent()({
16262
16407
  "type": "radio",
16263
16408
  "value": value,
16264
16409
  "checked": normalizedValue.value === value,
16265
- "onClick": onClick,
16266
- "onFocus": onFocus,
16267
- "onBlur": onBlur,
16268
- "ref": index === 0 ? firstRef : undefined,
16410
+ "tabindex": -1,
16269
16411
  "readonly": props.readonly,
16270
16412
  "disabled": props.disabled
16271
16413
  }, null)]);
@@ -16294,9 +16436,7 @@ const VRating = genericComponent()({
16294
16436
  index: i,
16295
16437
  label: props.itemLabels?.[i]
16296
16438
  }) : undefined, createVNode("div", {
16297
- "class": ['v-rating__item', {
16298
- 'v-rating__item--focused': Math.ceil(focusIndex.value) === value
16299
- }]
16439
+ "class": "v-rating__item"
16300
16440
  }, [props.halfIncrements ? createVNode(Fragment, null, [createVNode(VRatingItem, {
16301
16441
  "value": value - 0.5,
16302
16442
  "index": i * 2
@@ -16765,7 +16905,7 @@ const VSnackbar = genericComponent()({
16765
16905
  window.clearTimeout(activeTimeout);
16766
16906
  }
16767
16907
  useRender(() => {
16768
- const [overlayProps] = filterVOverlayProps(props);
16908
+ const [overlayProps] = VOverlay.filterProps(props);
16769
16909
  return createVNode(VOverlay, mergeProps({
16770
16910
  "ref": overlay,
16771
16911
  "class": ['v-snackbar', {
@@ -16777,19 +16917,18 @@ const VSnackbar = genericComponent()({
16777
16917
  "modelValue": isActive.value,
16778
16918
  "onUpdate:modelValue": $event => isActive.value = $event,
16779
16919
  "contentProps": mergeProps({
16780
- style: locationStyles.value
16920
+ class: ['v-snackbar__wrapper', themeClasses.value, colorClasses.value, roundedClasses.value, variantClasses.value],
16921
+ style: [locationStyles.value, colorStyles.value],
16922
+ onPointerenter,
16923
+ onPointerleave: startTimeout
16781
16924
  }, overlayProps.contentProps),
16782
16925
  "persistent": true,
16783
16926
  "noClickAnimation": true,
16784
16927
  "scrim": false,
16785
- "scrollStrategy": "none"
16928
+ "scrollStrategy": "none",
16929
+ "_disableGlobalStack": true
16786
16930
  }, scopeId), {
16787
- default: () => [createVNode("div", {
16788
- "class": ['v-snackbar__wrapper', themeClasses.value, colorClasses.value, roundedClasses.value, variantClasses.value],
16789
- "style": [colorStyles.value],
16790
- "onPointerenter": onPointerenter,
16791
- "onPointerleave": startTimeout
16792
- }, [genOverlays(false, 'v-snackbar'), slots.default && createVNode("div", {
16931
+ default: () => [genOverlays(false, 'v-snackbar'), slots.default && createVNode("div", {
16793
16932
  "class": "v-snackbar__content",
16794
16933
  "role": "status",
16795
16934
  "aria-live": "polite"
@@ -16804,7 +16943,7 @@ const VSnackbar = genericComponent()({
16804
16943
  default: () => [createVNode("div", {
16805
16944
  "class": "v-snackbar__actions"
16806
16945
  }, [slots.actions()])]
16807
- })])],
16946
+ })],
16808
16947
  activator: slots.activator
16809
16948
  });
16810
16949
  });
@@ -16861,7 +17000,7 @@ const VSwitch = genericComponent()({
16861
17000
  useRender(() => {
16862
17001
  const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
16863
17002
  const [inputProps, _1] = filterInputProps(props);
16864
- const [controlProps, _2] = filterControlProps(props);
17003
+ const [controlProps, _2] = VSelectionControl.filterProps(props);
16865
17004
  const control = ref();
16866
17005
  function onClick() {
16867
17006
  control.value?.input?.click();
@@ -16963,6 +17102,9 @@ const VSystemBar = genericComponent()({
16963
17102
  const {
16964
17103
  roundedClasses
16965
17104
  } = useRounded(props);
17105
+ const {
17106
+ ssrBootStyles
17107
+ } = useSsrBoot();
16966
17108
  const height = computed(() => props.height ?? (props.window ? 32 : 24));
16967
17109
  const {
16968
17110
  layoutItemStyles
@@ -16979,7 +17121,7 @@ const VSystemBar = genericComponent()({
16979
17121
  "class": ['v-system-bar', {
16980
17122
  'v-system-bar--window': props.window
16981
17123
  }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value],
16982
- "style": [backgroundColorStyles.value, layoutItemStyles.value]
17124
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value]
16983
17125
  }, slots));
16984
17126
  return {};
16985
17127
  }
@@ -16991,28 +17133,17 @@ const VTab = genericComponent()({
16991
17133
  name: 'VTab',
16992
17134
  props: {
16993
17135
  fixed: Boolean,
16994
- icon: [Boolean, String, Function, Object],
16995
- prependIcon: IconValue,
16996
- appendIcon: IconValue,
16997
- stacked: Boolean,
16998
17136
  title: String,
16999
- ripple: {
17000
- type: Boolean,
17001
- default: true
17002
- },
17003
- color: String,
17004
17137
  sliderColor: String,
17005
17138
  hideSlider: Boolean,
17006
17139
  direction: {
17007
17140
  type: String,
17008
17141
  default: 'horizontal'
17009
17142
  },
17010
- ...makeTagProps(),
17011
- ...makeRouterProps(),
17012
- ...makeGroupItemProps({
17013
- selectedClass: 'v-tab--selected'
17014
- }),
17015
- ...makeThemeProps()
17143
+ ...omit(makeVBtnProps({
17144
+ selectedClass: 'v-tab--selected',
17145
+ variant: 'text'
17146
+ }), ['active', 'block', 'flat', 'location', 'position', 'symbol'])
17016
17147
  },
17017
17148
  setup(props, _ref) {
17018
17149
  let {
@@ -17062,7 +17193,7 @@ const VTab = genericComponent()({
17062
17193
  }
17063
17194
  }
17064
17195
  useRender(() => {
17065
- const [btnProps] = pick(props, ['href', 'to', 'replace', 'icon', 'stacked', 'prependIcon', 'appendIcon', 'ripple', 'theme', 'disabled', 'selectedClass', 'value', 'color']);
17196
+ const [btnProps] = VBtn.filterProps(props);
17066
17197
  return createVNode(VBtn, mergeProps({
17067
17198
  "_as": "VTab",
17068
17199
  "symbol": VTabsSymbol,
@@ -17074,7 +17205,6 @@ const VTab = genericComponent()({
17074
17205
  "active": false,
17075
17206
  "block": props.fixed,
17076
17207
  "maxWidth": props.fixed ? 300 : undefined,
17077
- "variant": "text",
17078
17208
  "rounded": 0
17079
17209
  }, btnProps, attrs, {
17080
17210
  "onGroup:selected": updateSlider
@@ -17319,7 +17449,13 @@ const VTextarea = genericComponent()({
17319
17449
  });
17320
17450
  }
17321
17451
  function onInput(e) {
17322
- model.value = e.target.value;
17452
+ const el = e.target;
17453
+ const caretPosition = [el.selectionStart, el.selectionEnd];
17454
+ model.value = el.value;
17455
+ nextTick(() => {
17456
+ el.selectionStart = caretPosition[0];
17457
+ el.selectionEnd = caretPosition[1];
17458
+ });
17323
17459
  }
17324
17460
  const sizerRef = ref();
17325
17461
  function calculateInputHeight() {
@@ -17403,6 +17539,7 @@ const VTextarea = genericComponent()({
17403
17539
  }, fieldProps, {
17404
17540
  "active": isActive.value || isDirty.value,
17405
17541
  "dirty": isDirty.value || props.dirty,
17542
+ "disabled": isDisabled.value,
17406
17543
  "focused": isFocused.value,
17407
17544
  "error": isValid.value === false
17408
17545
  }), {
@@ -17605,13 +17742,6 @@ const VTimelineDivider = genericComponent()({
17605
17742
  backgroundColorClasses: lineColorClasses,
17606
17743
  backgroundColorStyles: lineColorStyles
17607
17744
  } = useBackgroundColor(toRef(props, 'lineColor'));
17608
- provideDefaults({
17609
- VIcon: {
17610
- color: toRef(props, 'iconColor'),
17611
- icon: toRef(props, 'icon'),
17612
- size: toRef(props, 'size')
17613
- }
17614
- });
17615
17745
  useRender(() => createVNode("div", {
17616
17746
  "class": ['v-timeline-divider', {
17617
17747
  'v-timeline-divider--fill-dot': props.fillDot
@@ -17626,7 +17756,22 @@ const VTimelineDivider = genericComponent()({
17626
17756
  }, [createVNode("div", {
17627
17757
  "class": ['v-timeline-divider__inner-dot', backgroundColorClasses.value, roundedClasses.value],
17628
17758
  "style": backgroundColorStyles.value
17629
- }, [slots.default?.() ?? (props.icon ? createVNode(VIcon, null, null) : undefined)])]), createVNode("div", {
17759
+ }, [!slots.default ? createVNode(VIcon, {
17760
+ "key": "icon",
17761
+ "color": props.iconColor,
17762
+ "icon": props.icon,
17763
+ "size": props.size
17764
+ }, null) : createVNode(VDefaultsProvider, {
17765
+ "key": "icon-defaults",
17766
+ "disabled": !props.icon,
17767
+ "defaults": {
17768
+ VIcon: {
17769
+ color: props.iconColor,
17770
+ icon: props.icon,
17771
+ size: props.size
17772
+ }
17773
+ }
17774
+ }, slots.default)])]), createVNode("div", {
17630
17775
  "class": ['v-timeline-divider__after', lineColorClasses.value],
17631
17776
  "style": lineColorStyles.value
17632
17777
  }, null)]));
@@ -17712,6 +17857,7 @@ const VTooltip = genericComponent()({
17712
17857
  closeOnBack: false,
17713
17858
  location: 'end',
17714
17859
  locationStrategy: 'connected',
17860
+ eager: true,
17715
17861
  minWidth: 0,
17716
17862
  offset: 10,
17717
17863
  openOnClick: false,
@@ -17720,7 +17866,7 @@ const VTooltip = genericComponent()({
17720
17866
  scrim: false,
17721
17867
  scrollStrategy: 'reposition',
17722
17868
  transition: false
17723
- }), ['absolute', 'persistent', 'eager'])
17869
+ }), ['absolute', 'persistent'])
17724
17870
  },
17725
17871
  emits: {
17726
17872
  'update:modelValue': value => true
@@ -17750,7 +17896,7 @@ const VTooltip = genericComponent()({
17750
17896
  'aria-describedby': id.value
17751
17897
  }, props.activatorProps));
17752
17898
  useRender(() => {
17753
- const [overlayProps] = filterVOverlayProps(props);
17899
+ const [overlayProps] = VOverlay.filterProps(props);
17754
17900
  return createVNode(VOverlay, mergeProps({
17755
17901
  "ref": overlay,
17756
17902
  "class": ['v-tooltip'],
@@ -17764,7 +17910,6 @@ const VTooltip = genericComponent()({
17764
17910
  "origin": origin.value,
17765
17911
  "persistent": true,
17766
17912
  "role": "tooltip",
17767
- "eager": true,
17768
17913
  "activatorProps": activatorProps.value,
17769
17914
  "_disableGlobalStack": true
17770
17915
  }, scopeId), {
@@ -17997,7 +18142,7 @@ const makeDataTableSelectProps = propsFactory({
17997
18142
  }
17998
18143
  }, 'v-data-table-select');
17999
18144
  const VDataTableSelectionSymbol = Symbol.for('vuetify:data-table-selection');
18000
- function createSelection(props, allItems) {
18145
+ function provideSelection(props, allItems) {
18001
18146
  const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {
18002
18147
  return new Set(v);
18003
18148
  }, v => {
@@ -18057,13 +18202,28 @@ const makeDataTableSortProps = propsFactory({
18057
18202
  const VDataTableSortSymbol = Symbol.for('vuetify:data-table-sort');
18058
18203
  function createSort(props) {
18059
18204
  const sortBy = useProxiedModel(props, 'sortBy');
18205
+ const mustSort = toRef(props, 'mustSort');
18206
+ const multiSort = toRef(props, 'multiSort');
18207
+ return {
18208
+ sortBy,
18209
+ mustSort,
18210
+ multiSort
18211
+ };
18212
+ }
18213
+ function provideSort(options) {
18214
+ const {
18215
+ sortBy,
18216
+ mustSort,
18217
+ multiSort,
18218
+ page
18219
+ } = options;
18060
18220
  const toggleSort = key => {
18061
18221
  let newSortBy = sortBy.value.map(x => ({
18062
18222
  ...x
18063
18223
  })) ?? [];
18064
18224
  const item = newSortBy.find(x => x.key === key);
18065
18225
  if (!item) {
18066
- if (props.multiSort) newSortBy = [...newSortBy, {
18226
+ if (multiSort.value) newSortBy = [...newSortBy, {
18067
18227
  key,
18068
18228
  order: 'asc'
18069
18229
  }];else newSortBy = [{
@@ -18071,7 +18231,7 @@ function createSort(props) {
18071
18231
  order: 'asc'
18072
18232
  }];
18073
18233
  } else if (item.order === 'desc') {
18074
- if (props.mustSort) {
18234
+ if (mustSort.value) {
18075
18235
  item.order = 'asc';
18076
18236
  } else {
18077
18237
  newSortBy = newSortBy.filter(x => x.key !== key);
@@ -18080,6 +18240,7 @@ function createSort(props) {
18080
18240
  item.order = 'desc';
18081
18241
  }
18082
18242
  sortBy.value = newSortBy;
18243
+ if (page) page.value = 1;
18083
18244
  };
18084
18245
  const data = {
18085
18246
  sortBy,
@@ -18282,9 +18443,6 @@ const VDataTableHeaders = genericComponent()({
18282
18443
  });
18283
18444
 
18284
18445
  // Utilities
18285
-
18286
- // Types
18287
-
18288
18446
  const makeDataTableGroupProps = propsFactory({
18289
18447
  groupBy: {
18290
18448
  type: Array,
@@ -18292,7 +18450,17 @@ const makeDataTableGroupProps = propsFactory({
18292
18450
  }
18293
18451
  }, 'data-table-group');
18294
18452
  const VDataTableGroupSymbol = Symbol.for('vuetify:data-table-group');
18295
- function createGroupBy(props, groupBy, sortBy) {
18453
+ function createGroupBy(props) {
18454
+ const groupBy = useProxiedModel(props, 'groupBy');
18455
+ return {
18456
+ groupBy
18457
+ };
18458
+ }
18459
+ function provideGroupBy(options) {
18460
+ const {
18461
+ groupBy,
18462
+ sortBy
18463
+ } = options;
18296
18464
  const opened = ref(new Set());
18297
18465
  const sortByWithGroups = computed(() => {
18298
18466
  return groupBy.value.map(val => ({
@@ -18502,7 +18670,7 @@ const makeDataTableExpandProps = propsFactory({
18502
18670
  }
18503
18671
  }, 'v-data-table-expand');
18504
18672
  const VDataTableExpandedKey = Symbol.for('vuetify:datatable:expanded');
18505
- function createExpanded(props) {
18673
+ function provideExpanded(props) {
18506
18674
  const expandOnClick = toRef(props, 'expandOnClick');
18507
18675
  const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {
18508
18676
  return new Set(v);
@@ -18545,7 +18713,9 @@ function useExpanded() {
18545
18713
  const VDataTableRow = defineComponent({
18546
18714
  name: 'VDataTableRow',
18547
18715
  props: {
18548
- item: Object
18716
+ index: Number,
18717
+ item: Object,
18718
+ onClick: Function
18549
18719
  },
18550
18720
  setup(props, _ref) {
18551
18721
  let {
@@ -18563,7 +18733,10 @@ const VDataTableRow = defineComponent({
18563
18733
  columns
18564
18734
  } = useHeaders();
18565
18735
  useRender(() => createVNode("tr", {
18566
- "class": ['v-data-table__tr']
18736
+ "class": ['v-data-table__tr', {
18737
+ 'v-data-table__tr--clickable': !!props.onClick
18738
+ }],
18739
+ "onClick": props.onClick
18567
18740
  }, [!columns.value.length && createVNode(VDataTableColumn, {
18568
18741
  "key": "no-data"
18569
18742
  }, slots), props.item && columns.value.map((column, i) => createVNode(VDataTableColumn, {
@@ -18578,6 +18751,7 @@ const VDataTableRow = defineComponent({
18578
18751
  const item = props.item;
18579
18752
  const slotName = `item.${column.key}`;
18580
18753
  const slotProps = {
18754
+ index: props.index,
18581
18755
  item: props.item,
18582
18756
  columns: columns.value,
18583
18757
  isSelected,
@@ -18681,7 +18855,7 @@ const VDataTableRows = genericComponent()({
18681
18855
  "item": item
18682
18856
  }, slots);
18683
18857
  }
18684
- return createVNode(Fragment, null, [slots.item ? slots.item({
18858
+ const slotProps = {
18685
18859
  index,
18686
18860
  item,
18687
18861
  columns: columns.value,
@@ -18689,21 +18863,20 @@ const VDataTableRows = genericComponent()({
18689
18863
  toggleExpand,
18690
18864
  isSelected,
18691
18865
  toggleSelect
18692
- }) : createVNode(VDataTableRow, {
18866
+ };
18867
+ return createVNode(Fragment, null, [slots.item ? slots.item(slotProps) : createVNode(VDataTableRow, {
18693
18868
  "key": `item_${item.value}`,
18694
18869
  "onClick": event => {
18695
18870
  if (expandOnClick.value) {
18696
- toggleExpand(item.value);
18871
+ toggleExpand(item);
18697
18872
  }
18698
18873
  emit('click:row', event, {
18699
18874
  item
18700
18875
  });
18701
18876
  },
18877
+ "index": index,
18702
18878
  "item": item
18703
- }, slots), isExpanded(item) && slots['expanded-row']?.({
18704
- item,
18705
- columns: columns.value
18706
- })]);
18879
+ }, slots), isExpanded(item) && slots['expanded-row']?.(slotProps)]);
18707
18880
  })]));
18708
18881
  return {};
18709
18882
  }
@@ -18724,10 +18897,20 @@ const makeDataTablePaginateProps = propsFactory({
18724
18897
  }
18725
18898
  }, 'v-data-table-paginate');
18726
18899
  const VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');
18727
- function createPagination(props, items) {
18900
+ function createPagination(props) {
18728
18901
  const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1));
18729
18902
  const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10));
18730
- const itemsLength = computed(() => +(props.itemsLength ?? items.value.length));
18903
+ return {
18904
+ page,
18905
+ itemsPerPage
18906
+ };
18907
+ }
18908
+ function providePagination(options) {
18909
+ const {
18910
+ page,
18911
+ itemsPerPage,
18912
+ itemsLength
18913
+ } = options;
18731
18914
  const startIndex = computed(() => {
18732
18915
  if (itemsPerPage.value === -1) return 0;
18733
18916
  return itemsPerPage.value * (page.value - 1);
@@ -18740,13 +18923,18 @@ function createPagination(props, items) {
18740
18923
  if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;
18741
18924
  return Math.ceil(itemsLength.value / itemsPerPage.value);
18742
18925
  });
18926
+ function setItemsPerPage(value) {
18927
+ itemsPerPage.value = value;
18928
+ page.value = 1;
18929
+ }
18743
18930
  const data = {
18744
18931
  page,
18745
18932
  itemsPerPage,
18933
+ itemsLength,
18746
18934
  startIndex,
18747
18935
  stopIndex,
18748
18936
  pageCount,
18749
- itemsLength
18937
+ setItemsPerPage
18750
18938
  };
18751
18939
  provide(VDataTablePaginationSymbol, data);
18752
18940
  return data;
@@ -18756,7 +18944,13 @@ function usePagination() {
18756
18944
  if (!data) throw new Error('Missing pagination!');
18757
18945
  return data;
18758
18946
  }
18759
- function usePaginatedItems(items, startIndex, stopIndex, itemsPerPage) {
18947
+ function usePaginatedItems(options) {
18948
+ const {
18949
+ items,
18950
+ startIndex,
18951
+ stopIndex,
18952
+ itemsPerPage
18953
+ } = options;
18760
18954
  const paginatedItems = computed(() => {
18761
18955
  if (itemsPerPage.value <= 0) return items.value;
18762
18956
  return items.value.slice(startIndex.value, stopIndex.value);
@@ -18845,7 +19039,8 @@ const VDataTableFooter = genericComponent()({
18845
19039
  startIndex,
18846
19040
  stopIndex,
18847
19041
  itemsLength,
18848
- itemsPerPage
19042
+ itemsPerPage,
19043
+ setItemsPerPage
18849
19044
  } = usePagination();
18850
19045
  const itemsPerPageOptions = computed(() => props.itemsPerPageOptions.map(option => ({
18851
19046
  ...option,
@@ -18858,7 +19053,7 @@ const VDataTableFooter = genericComponent()({
18858
19053
  }, [createVNode("span", null, [t(props.itemsPerPageText)]), createVNode(VSelect, {
18859
19054
  "items": itemsPerPageOptions.value,
18860
19055
  "modelValue": itemsPerPage.value,
18861
- "onUpdate:modelValue": v => itemsPerPage.value = Number(v),
19056
+ "onUpdate:modelValue": v => setItemsPerPage(Number(v)),
18862
19057
  "density": "compact",
18863
19058
  "variant": "outlined",
18864
19059
  "hide-details": true
@@ -18936,7 +19131,8 @@ function useOptions(_ref) {
18936
19131
  page,
18937
19132
  itemsPerPage,
18938
19133
  sortBy,
18939
- groupBy
19134
+ groupBy,
19135
+ search
18940
19136
  } = _ref;
18941
19137
  const vm = getCurrentInstance('VDataTable');
18942
19138
  const options = computed(() => ({
@@ -18946,15 +19142,8 @@ function useOptions(_ref) {
18946
19142
  groupBy: groupBy.value
18947
19143
  }));
18948
19144
 
18949
- // Reset page when sorting changes
18950
- watch(sortBy, () => {
18951
- page.value = 1;
18952
- }, {
18953
- deep: true
18954
- });
18955
-
18956
- // Reset page when items-per-page changes
18957
- watch(itemsPerPage, () => {
19145
+ // Reset page when searching
19146
+ watch(() => search?.value, () => {
18958
19147
  page.value = 1;
18959
19148
  });
18960
19149
  let oldOptions = null;
@@ -19010,7 +19199,18 @@ const VDataTable = genericComponent()({
19010
19199
  emit,
19011
19200
  slots
19012
19201
  } = _ref;
19013
- const groupBy = useProxiedModel(props, 'groupBy');
19202
+ const {
19203
+ groupBy
19204
+ } = createGroupBy(props);
19205
+ const {
19206
+ sortBy,
19207
+ multiSort,
19208
+ mustSort
19209
+ } = createSort(props);
19210
+ const {
19211
+ page,
19212
+ itemsPerPage
19213
+ } = createPagination(props);
19014
19214
  const {
19015
19215
  columns
19016
19216
  } = createHeaders(props, {
@@ -19022,42 +19222,58 @@ const VDataTable = genericComponent()({
19022
19222
  items
19023
19223
  } = useDataTableItems(props, columns);
19024
19224
  const filterKeys = computed(() => columns.value.map(c => 'columns.' + c.key));
19225
+ const search = toRef(props, 'search');
19025
19226
  const {
19026
19227
  filteredItems
19027
- } = useFilter(props, items, toRef(props, 'search'), {
19228
+ } = useFilter(props, items, search, {
19028
19229
  filterKeys
19029
19230
  });
19030
- const {
19031
- sortBy
19032
- } = createSort(props);
19231
+ provideSort({
19232
+ sortBy,
19233
+ multiSort,
19234
+ mustSort,
19235
+ page
19236
+ });
19033
19237
  const {
19034
19238
  sortByWithGroups,
19035
19239
  opened,
19036
19240
  extractRows
19037
- } = createGroupBy(props, groupBy, sortBy);
19241
+ } = provideGroupBy({
19242
+ groupBy,
19243
+ sortBy
19244
+ });
19038
19245
  const {
19039
19246
  sortedItems
19040
19247
  } = useSortedItems(filteredItems, sortByWithGroups, columns);
19041
19248
  const {
19042
19249
  flatItems
19043
19250
  } = useGroupedItems(sortedItems, groupBy, opened);
19251
+ const itemsLength = computed(() => flatItems.value.length);
19044
19252
  const {
19045
- page,
19046
- itemsPerPage,
19047
19253
  startIndex,
19048
19254
  stopIndex
19049
- } = createPagination(props, flatItems);
19255
+ } = providePagination({
19256
+ page,
19257
+ itemsPerPage,
19258
+ itemsLength
19259
+ });
19050
19260
  const {
19051
19261
  paginatedItems
19052
- } = usePaginatedItems(flatItems, startIndex, stopIndex, itemsPerPage);
19262
+ } = usePaginatedItems({
19263
+ items: flatItems,
19264
+ startIndex,
19265
+ stopIndex,
19266
+ itemsPerPage
19267
+ });
19053
19268
  const paginatedItemsWithoutGroups = computed(() => extractRows(paginatedItems.value));
19054
- createSelection(props, paginatedItemsWithoutGroups);
19055
- createExpanded(props);
19269
+ provideSelection(props, paginatedItemsWithoutGroups);
19270
+ provideExpanded(props);
19056
19271
  useOptions({
19057
19272
  page,
19058
19273
  itemsPerPage,
19059
19274
  sortBy,
19060
- groupBy
19275
+ groupBy,
19276
+ search
19061
19277
  });
19062
19278
  provideDefaults({
19063
19279
  VDataTableRows: {
@@ -19199,7 +19415,14 @@ const VDataTableVirtual = genericComponent()({
19199
19415
  emit,
19200
19416
  slots
19201
19417
  } = _ref;
19202
- const groupBy = useProxiedModel(props, 'groupBy');
19418
+ const {
19419
+ groupBy
19420
+ } = createGroupBy(props);
19421
+ const {
19422
+ sortBy,
19423
+ multiSort,
19424
+ mustSort
19425
+ } = createSort(props);
19203
19426
  const {
19204
19427
  columns
19205
19428
  } = createHeaders(props, {
@@ -19211,19 +19434,25 @@ const VDataTableVirtual = genericComponent()({
19211
19434
  items
19212
19435
  } = useDataTableItems(props, columns);
19213
19436
  const filterKeys = computed(() => columns.value.map(c => 'columns.' + c.key));
19437
+ const search = toRef(props, 'search');
19214
19438
  const {
19215
19439
  filteredItems
19216
- } = useFilter(props, items, toRef(props, 'search'), {
19440
+ } = useFilter(props, items, search, {
19217
19441
  filterKeys
19218
19442
  });
19219
- const {
19220
- sortBy
19221
- } = createSort(props);
19443
+ provideSort({
19444
+ sortBy,
19445
+ multiSort,
19446
+ mustSort
19447
+ });
19222
19448
  const {
19223
19449
  sortByWithGroups,
19224
19450
  opened,
19225
19451
  extractRows
19226
- } = createGroupBy(props, groupBy, sortBy);
19452
+ } = provideGroupBy({
19453
+ groupBy,
19454
+ sortBy
19455
+ });
19227
19456
  const {
19228
19457
  sortedItems
19229
19458
  } = useSortedItems(filteredItems, sortByWithGroups, columns);
@@ -19231,8 +19460,8 @@ const VDataTableVirtual = genericComponent()({
19231
19460
  flatItems
19232
19461
  } = useGroupedItems(sortedItems, groupBy, opened);
19233
19462
  const allRows = computed(() => extractRows(flatItems.value));
19234
- createSelection(props, allRows);
19235
- createExpanded(props);
19463
+ provideSelection(props, allRows);
19464
+ provideExpanded(props);
19236
19465
  const {
19237
19466
  containerRef,
19238
19467
  paddingTop,
@@ -19249,7 +19478,8 @@ const VDataTableVirtual = genericComponent()({
19249
19478
  sortBy,
19250
19479
  page: ref(1),
19251
19480
  itemsPerPage: ref(-1),
19252
- groupBy
19481
+ groupBy,
19482
+ search
19253
19483
  });
19254
19484
  provideDefaults({
19255
19485
  VDataTableRows: {
@@ -19318,7 +19548,10 @@ const VDataTableServer = genericComponent()({
19318
19548
  type: String,
19319
19549
  default: '$vuetify.dataIterator.loadingText'
19320
19550
  },
19321
- itemsLength: [Number, String],
19551
+ itemsLength: {
19552
+ type: [Number, String],
19553
+ required: true
19554
+ },
19322
19555
  ...makeVDataTableProps(),
19323
19556
  ...makeDataTableExpandProps(),
19324
19557
  ...makeDataTableHeaderProps(),
@@ -19343,8 +19576,20 @@ const VDataTableServer = genericComponent()({
19343
19576
  emit,
19344
19577
  slots
19345
19578
  } = _ref;
19346
- const groupBy = useProxiedModel(props, 'groupBy');
19347
- createExpanded(props);
19579
+ const {
19580
+ groupBy
19581
+ } = createGroupBy(props);
19582
+ const {
19583
+ sortBy,
19584
+ multiSort,
19585
+ mustSort
19586
+ } = createSort(props);
19587
+ const {
19588
+ page,
19589
+ itemsPerPage
19590
+ } = createPagination(props);
19591
+ const itemsLength = computed(() => parseInt(props.itemsLength, 10));
19592
+ provideExpanded(props);
19348
19593
  const {
19349
19594
  columns
19350
19595
  } = createHeaders(props, {
@@ -19356,20 +19601,28 @@ const VDataTableServer = genericComponent()({
19356
19601
  items
19357
19602
  } = useDataTableItems(props, columns);
19358
19603
  const {
19359
- sortBy,
19360
19604
  toggleSort
19361
- } = createSort(props);
19605
+ } = provideSort({
19606
+ sortBy,
19607
+ multiSort,
19608
+ mustSort,
19609
+ page
19610
+ });
19362
19611
  const {
19363
19612
  opened
19364
- } = createGroupBy(props, groupBy, sortBy);
19365
- const {
19613
+ } = provideGroupBy({
19614
+ groupBy,
19615
+ sortBy
19616
+ });
19617
+ providePagination({
19366
19618
  page,
19367
- itemsPerPage
19368
- } = createPagination(props, items);
19619
+ itemsPerPage,
19620
+ itemsLength
19621
+ });
19369
19622
  const {
19370
19623
  flatItems
19371
19624
  } = useGroupedItems(items, groupBy, opened);
19372
- createSelection(props, items);
19625
+ provideSelection(props, items);
19373
19626
  useOptions({
19374
19627
  page,
19375
19628
  itemsPerPage,
@@ -19404,7 +19657,7 @@ const VDataTableServer = genericComponent()({
19404
19657
  "sticky": props.fixedHeader,
19405
19658
  "loading": props.loading,
19406
19659
  "color": props.color
19407
- }, null)]), slots.thead?.(), createVNode("tbody", {
19660
+ }, slots)]), slots.thead?.(), createVNode("tbody", {
19408
19661
  "class": "v-data-table__tbody",
19409
19662
  "role": "rowgroup"
19410
19663
  }, [slots.body ? slots.body() : createVNode(VDataTableRows, {
@@ -19489,13 +19742,15 @@ const VVirtualScroll = genericComponent()({
19489
19742
  resizeRef.value = rootEl.value;
19490
19743
  });
19491
19744
  const display = useDisplay();
19492
- const sizes = createRange(props.items.length).map(() => itemHeight.value);
19745
+ const sizeMap = new Map();
19746
+ let sizes = createRange(props.items.length).map(() => itemHeight.value);
19493
19747
  const visibleItems = computed(() => {
19494
19748
  return props.visibleItems ? parseInt(props.visibleItems, 10) : Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
19495
19749
  });
19496
19750
  function handleItemResize(index, height) {
19497
19751
  itemHeight.value = Math.max(itemHeight.value, height);
19498
19752
  sizes[index] = height;
19753
+ sizeMap.set(props.items[index], height);
19499
19754
  }
19500
19755
  function calculateOffset(index) {
19501
19756
  return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0);
@@ -19525,9 +19780,9 @@ const VVirtualScroll = genericComponent()({
19525
19780
  const midPointIndex = calculateMidPointIndex(scrollTop + height / 2);
19526
19781
  const buffer = Math.round(visibleItems.value / 3);
19527
19782
  if (direction === UP && midPointIndex <= first.value + buffer * 2 - 1) {
19528
- first.value = Math.max(midPointIndex - buffer, 0);
19783
+ first.value = clamp(midPointIndex - buffer, 0, props.items.length);
19529
19784
  } else if (direction === DOWN && midPointIndex >= first.value + buffer * 2 - 1) {
19530
- first.value = Math.min(Math.max(0, midPointIndex - buffer), props.items.length - visibleItems.value);
19785
+ first.value = clamp(midPointIndex - buffer, 0, props.items.length - visibleItems.value);
19531
19786
  }
19532
19787
  lastScrollTop = rootEl.value.scrollTop;
19533
19788
  }
@@ -19549,6 +19804,17 @@ const VVirtualScroll = genericComponent()({
19549
19804
  itemHeight.value = sizes.slice(first.value, last.value).reduce((curr, height) => curr + height, 0) / visibleItems.value;
19550
19805
  }
19551
19806
  });
19807
+ watch(() => props.items.length, () => {
19808
+ sizes = createRange(props.items.length).map(() => itemHeight.value);
19809
+ sizeMap.forEach((height, item) => {
19810
+ const index = props.items.indexOf(item);
19811
+ if (index === -1) {
19812
+ sizeMap.delete(item);
19813
+ } else {
19814
+ sizes[index] = height;
19815
+ }
19816
+ });
19817
+ });
19552
19818
  useRender(() => createVNode("div", {
19553
19819
  "ref": rootEl,
19554
19820
  "class": "v-virtual-scroll",
@@ -19927,7 +20193,7 @@ function createVuetify$1() {
19927
20193
  locale
19928
20194
  };
19929
20195
  }
19930
- const version$1 = "3.2.0-dev-20230214.0";
20196
+ const version$1 = "3.2.0-dev-20230322.0";
19931
20197
  createVuetify$1.version = version$1;
19932
20198
 
19933
20199
  // Vue's inject() can only be used in setup
@@ -19939,7 +20205,7 @@ function inject(key) {
19939
20205
  }
19940
20206
  }
19941
20207
 
19942
- const version = "3.2.0-dev-20230214.0";
20208
+ const version = "3.2.0-dev-20230322.0";
19943
20209
 
19944
20210
  const createVuetify = function () {
19945
20211
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};