@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
  */
@@ -207,6 +207,10 @@
207
207
  let max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
208
208
  return Math.max(min, Math.min(max, value));
209
209
  }
210
+ function getDecimals(value) {
211
+ const trimmedStr = value.toString().trim();
212
+ return trimmedStr.includes('.') ? trimmedStr.length - trimmedStr.indexOf('.') - 1 : 0;
213
+ }
210
214
  function padEnd(str, length) {
211
215
  let char = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '0';
212
216
  return str + char.repeat(Math.max(0, length - str.length));
@@ -489,7 +493,14 @@
489
493
  if (typeof el.animate === 'undefined') return {
490
494
  finished: Promise.resolve()
491
495
  };
492
- const animation = el.animate(keyframes, options);
496
+ let animation;
497
+ try {
498
+ animation = el.animate(keyframes, options);
499
+ } catch (err) {
500
+ return {
501
+ finished: Promise.resolve()
502
+ };
503
+ }
493
504
  if (typeof animation.finished === 'undefined') {
494
505
  animation.finished = new Promise(resolve => {
495
506
  animation.onfinish = () => {
@@ -784,11 +795,12 @@
784
795
  b,
785
796
  a
786
797
  } = _ref2;
787
- return `#${[toHex(r), toHex(g), toHex(b), a !== undefined ? toHex(Math.round(a * 255)) : 'FF'].join('')}`;
798
+ return `#${[toHex(r), toHex(g), toHex(b), a !== undefined ? toHex(Math.round(a * 255)) : ''].join('')}`;
788
799
  }
789
800
  function HexToRGB(hex) {
801
+ hex = parseHex(hex);
790
802
  let [r, g, b, a] = chunk(hex, 2).map(c => parseInt(c, 16));
791
- a = a === undefined ? a : Math.round(a / 255 * 100) / 100;
803
+ a = a === undefined ? a : a / 255;
792
804
  return {
793
805
  r,
794
806
  g,
@@ -811,9 +823,7 @@
811
823
  if (hex.length === 3 || hex.length === 4) {
812
824
  hex = hex.split('').map(x => x + x).join('');
813
825
  }
814
- if (hex.length === 6) {
815
- hex = padEnd(hex, 8, 'F');
816
- } else {
826
+ if (hex.length !== 6) {
817
827
  hex = padEnd(padEnd(hex, 6), 8, 'F');
818
828
  }
819
829
  return hex;
@@ -954,6 +964,8 @@
954
964
  const injectedDefaults = useDefaults();
955
965
  const providedDefaults = vue.ref(defaults);
956
966
  const newDefaults = vue.computed(() => {
967
+ const disabled = vue.unref(options?.disabled);
968
+ if (disabled) return injectedDefaults.value;
957
969
  const scoped = vue.unref(options?.scoped);
958
970
  const reset = vue.unref(options?.reset);
959
971
  const root = vue.unref(options?.root);
@@ -964,7 +976,9 @@
964
976
  if (reset || root) {
965
977
  const len = Number(reset || Infinity);
966
978
  for (let i = 0; i <= len; i++) {
967
- if (!properties.prev) break;
979
+ if (!properties || !('prev' in properties)) {
980
+ break;
981
+ }
968
982
  properties = properties.prev;
969
983
  }
970
984
  return properties;
@@ -1006,15 +1020,22 @@
1006
1020
  function propIsDefined(vnode, prop) {
1007
1021
  return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
1008
1022
  }
1009
- const defineComponent = function defineComponent(options) {
1023
+
1024
+ // No props
1025
+
1026
+ // Implementation
1027
+ function defineComponent(options) {
1010
1028
  options._setup = options._setup ?? options.setup;
1011
1029
  if (!options.name) {
1012
1030
  consoleWarn('The component is missing an explicit name, unable to generate default prop value');
1013
1031
  return options;
1014
1032
  }
1015
1033
  if (options._setup) {
1016
- options.props = options.props ?? {};
1017
- options.props = propsFactory(options.props, toKebabCase(options.name))();
1034
+ options.props = propsFactory(options.props ?? {}, toKebabCase(options.name))();
1035
+ const propKeys = Object.keys(options.props);
1036
+ options.filterProps = function filterProps(props) {
1037
+ return pick(props, propKeys);
1038
+ };
1018
1039
  options.props._as = String;
1019
1040
  options.setup = function setup(props, ctx) {
1020
1041
  const defaults = useDefaults();
@@ -1025,10 +1046,11 @@
1025
1046
  const componentDefaults = vue.computed(() => defaults.value[props._as ?? options.name]);
1026
1047
  const _props = new Proxy(props, {
1027
1048
  get(target, prop) {
1049
+ const propValue = Reflect.get(target, prop);
1028
1050
  if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1029
- return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? target[prop];
1051
+ return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? propValue;
1030
1052
  }
1031
- return Reflect.get(target, prop);
1053
+ return propValue;
1032
1054
  }
1033
1055
  });
1034
1056
  const _subcomponentDefaults = vue.shallowRef();
@@ -1053,7 +1075,7 @@
1053
1075
  };
1054
1076
  }
1055
1077
  return options;
1056
- };
1078
+ }
1057
1079
  // Implementation
1058
1080
  function genericComponent() {
1059
1081
  let exposeDefaults = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
@@ -1674,17 +1696,9 @@
1674
1696
  if (current.value.dark) {
1675
1697
  createCssClass(lines, ':root', ['color-scheme: dark']);
1676
1698
  }
1699
+ createCssClass(lines, ':root', genCssVariables(current.value));
1677
1700
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
1678
- const {
1679
- variables,
1680
- dark
1681
- } = theme;
1682
- createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${dark ? 'dark' : 'normal'}`, ...genCssVariables(theme), ...Object.keys(variables).map(key => {
1683
- const value = variables[key];
1684
- const color = typeof value === 'string' && value.startsWith('#') ? parseColor$1(value) : undefined;
1685
- const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
1686
- return `--v-${key}: ${rgb ?? value}`;
1687
- })]);
1701
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)]);
1688
1702
  }
1689
1703
  const bgLines = [];
1690
1704
  const fgLines = [];
@@ -1701,22 +1715,30 @@
1701
1715
  lines.push(...bgLines, ...fgLines);
1702
1716
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
1703
1717
  });
1718
+ function getHead() {
1719
+ return {
1720
+ style: [{
1721
+ children: styles.value,
1722
+ id: 'vuetify-theme-stylesheet',
1723
+ nonce: parsedOptions.cspNonce || false
1724
+ }]
1725
+ };
1726
+ }
1704
1727
  function install(app) {
1705
1728
  const head = app._context.provides.usehead;
1706
1729
  if (head) {
1707
- head.addHeadObjs(vue.computed(() => {
1708
- const style = {
1709
- children: styles.value,
1710
- type: 'text/css',
1711
- id: 'vuetify-theme-stylesheet'
1712
- };
1713
- if (parsedOptions.cspNonce) style.nonce = parsedOptions.cspNonce;
1714
- return {
1715
- style: [style]
1716
- };
1717
- }));
1718
- if (IN_BROWSER) {
1719
- vue.watchEffect(() => head.updateDOM());
1730
+ if (head.push) {
1731
+ const entry = head.push(getHead);
1732
+ vue.watch(styles, () => {
1733
+ entry.patch(getHead);
1734
+ });
1735
+ } else {
1736
+ if (IN_BROWSER) {
1737
+ head.addHeadObjs(vue.computed(getHead));
1738
+ vue.watchEffect(() => head.updateDOM());
1739
+ } else {
1740
+ head.addHeadObjs(getHead());
1741
+ }
1720
1742
  }
1721
1743
  } else {
1722
1744
  let styleEl = IN_BROWSER ? document.getElementById('vuetify-theme-stylesheet') : null;
@@ -1789,6 +1811,11 @@
1789
1811
  variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
1790
1812
  }
1791
1813
  }
1814
+ for (const [key, value] of Object.entries(theme.variables)) {
1815
+ const color = typeof value === 'string' && value.startsWith('#') ? parseColor$1(value) : undefined;
1816
+ const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
1817
+ variables.push(`--v-${key}: ${rgb ?? value}`);
1818
+ }
1792
1819
  return variables;
1793
1820
  }
1794
1821
 
@@ -1818,7 +1845,7 @@
1818
1845
  });
1819
1846
  const model = vue.computed({
1820
1847
  get() {
1821
- return transformIn(vue.toRaw(isControlled.value ? props[prop] : internal.value));
1848
+ return transformIn(isControlled.value ? props[prop] : internal.value);
1822
1849
  },
1823
1850
  set(internalValue) {
1824
1851
  const newValue = transformOut(internalValue);
@@ -2018,7 +2045,7 @@
2018
2045
  en: false,
2019
2046
  es: false,
2020
2047
  et: false,
2021
- fa: false,
2048
+ fa: true,
2022
2049
  fi: false,
2023
2050
  fr: false,
2024
2051
  hr: false,
@@ -2151,6 +2178,7 @@
2151
2178
  name: 'VDefaultsProvider',
2152
2179
  props: {
2153
2180
  defaults: Object,
2181
+ disabled: Boolean,
2154
2182
  reset: [Number, String],
2155
2183
  root: Boolean,
2156
2184
  scoped: Boolean
@@ -2161,6 +2189,7 @@
2161
2189
  } = _ref;
2162
2190
  const {
2163
2191
  defaults,
2192
+ disabled,
2164
2193
  reset,
2165
2194
  root,
2166
2195
  scoped
@@ -2168,7 +2197,8 @@
2168
2197
  provideDefaults(defaults, {
2169
2198
  reset,
2170
2199
  root,
2171
- scoped
2200
+ scoped,
2201
+ disabled
2172
2202
  });
2173
2203
  return () => slots.default?.();
2174
2204
  }
@@ -2179,7 +2209,7 @@
2179
2209
  // Types
2180
2210
 
2181
2211
  function createCssTransition(name) {
2182
- let origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top center 0';
2212
+ let origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'center center';
2183
2213
  let mode = arguments.length > 2 ? arguments[2] : undefined;
2184
2214
  return genericComponent()({
2185
2215
  name,
@@ -2790,7 +2820,7 @@
2790
2820
  "class": ['v-img__img', containClasses.value],
2791
2821
  "src": normalisedSrc.value.src,
2792
2822
  "srcset": normalisedSrc.value.srcset,
2793
- "alt": "",
2823
+ "alt": props.alt,
2794
2824
  "sizes": props.sizes,
2795
2825
  "ref": image,
2796
2826
  "onLoad": onLoad,
@@ -2812,7 +2842,7 @@
2812
2842
  default: () => [normalisedSrc.value.lazySrc && state.value !== 'loaded' && vue.createVNode("img", {
2813
2843
  "class": ['v-img__img', 'v-img__img--preload', containClasses.value],
2814
2844
  "src": normalisedSrc.value.lazySrc,
2815
- "alt": ""
2845
+ "alt": props.alt
2816
2846
  }, null)]
2817
2847
  });
2818
2848
  const __placeholder = () => {
@@ -3154,16 +3184,20 @@
3154
3184
  default: () => [hasImage && vue.createVNode("div", {
3155
3185
  "key": "image",
3156
3186
  "class": "v-toolbar__image"
3157
- }, [vue.createVNode(VDefaultsProvider, {
3187
+ }, [!slots.image ? vue.createVNode(VImg, {
3188
+ "key": "image-img",
3189
+ "cover": true,
3190
+ "src": props.image
3191
+ }, null) : vue.createVNode(VDefaultsProvider, {
3192
+ "key": "image-defaults",
3193
+ "disabled": !props.image,
3158
3194
  "defaults": {
3159
3195
  VImg: {
3160
3196
  cover: true,
3161
3197
  src: props.image
3162
3198
  }
3163
3199
  }
3164
- }, {
3165
- default: () => [slots.image ? slots.image?.() : vue.createVNode(VImg, null, null)]
3166
- })]), vue.createVNode(VDefaultsProvider, {
3200
+ }, slots.image)]), vue.createVNode(VDefaultsProvider, {
3167
3201
  "defaults": {
3168
3202
  VTabs: {
3169
3203
  height: convertToUnit(contentHeight.value)
@@ -3209,8 +3243,24 @@
3209
3243
  };
3210
3244
  }
3211
3245
  });
3212
- function filterToolbarProps(props) {
3213
- return pick(props, Object.keys(VToolbar?.props ?? {}));
3246
+
3247
+ // Utilities
3248
+
3249
+ // Composables
3250
+ function useSsrBoot() {
3251
+ const isBooted = vue.ref(false);
3252
+ vue.onMounted(() => {
3253
+ window.requestAnimationFrame(() => {
3254
+ isBooted.value = true;
3255
+ });
3256
+ });
3257
+ const ssrBootStyles = vue.computed(() => !isBooted.value ? {
3258
+ transition: 'none !important'
3259
+ } : undefined);
3260
+ return {
3261
+ ssrBootStyles,
3262
+ isBooted: vue.readonly(isBooted)
3263
+ };
3214
3264
  }
3215
3265
 
3216
3266
  // Types
@@ -3255,6 +3305,9 @@
3255
3305
  const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0;
3256
3306
  return height + extensionHeight;
3257
3307
  });
3308
+ const {
3309
+ ssrBootStyles
3310
+ } = useSsrBoot();
3258
3311
  const {
3259
3312
  layoutItemStyles
3260
3313
  } = useLayoutItem({
@@ -3267,7 +3320,7 @@
3267
3320
  absolute: vue.toRef(props, 'absolute')
3268
3321
  });
3269
3322
  useRender(() => {
3270
- const [toolbarProps] = filterToolbarProps(props);
3323
+ const [toolbarProps] = VToolbar.filterProps(props);
3271
3324
  return vue.createVNode(VToolbar, vue.mergeProps({
3272
3325
  "ref": vToolbarRef,
3273
3326
  "class": ['v-app-bar', {
@@ -3275,7 +3328,8 @@
3275
3328
  }],
3276
3329
  "style": {
3277
3330
  ...layoutItemStyles.value,
3278
- height: undefined
3331
+ height: undefined,
3332
+ ...ssrBootStyles.value
3279
3333
  }
3280
3334
  }, toolbarProps), slots);
3281
3335
  });
@@ -3357,8 +3411,6 @@
3357
3411
  };
3358
3412
  }
3359
3413
 
3360
- // Types
3361
-
3362
3414
  const makeVBtnGroupProps = propsFactory({
3363
3415
  divided: Boolean,
3364
3416
  ...makeBorderProps(),
@@ -3409,9 +3461,6 @@
3409
3461
  });
3410
3462
  }
3411
3463
  });
3412
- function filterVBtnGroupProps(props) {
3413
- return pick(props, Object.keys(VBtnGroup.props));
3414
- }
3415
3464
 
3416
3465
  // Composables
3417
3466
 
@@ -3638,7 +3687,7 @@
3638
3687
  selected
3639
3688
  } = useGroup(props, VBtnToggleSymbol);
3640
3689
  useRender(() => {
3641
- const [btnGroupProps] = filterVBtnGroupProps(props);
3690
+ const [btnGroupProps] = VBtnGroup.filterProps(props);
3642
3691
  return vue.createVNode(VBtnGroup, vue.mergeProps({
3643
3692
  "class": "v-btn-toggle"
3644
3693
  }, btnGroupProps), {
@@ -4726,49 +4775,50 @@
4726
4775
 
4727
4776
  // Types
4728
4777
 
4778
+ const makeVBtnProps = propsFactory({
4779
+ active: {
4780
+ type: Boolean,
4781
+ default: undefined
4782
+ },
4783
+ symbol: {
4784
+ type: null,
4785
+ default: VBtnToggleSymbol
4786
+ },
4787
+ flat: Boolean,
4788
+ icon: [Boolean, String, Function, Object],
4789
+ prependIcon: IconValue,
4790
+ appendIcon: IconValue,
4791
+ block: Boolean,
4792
+ stacked: Boolean,
4793
+ ripple: {
4794
+ type: Boolean,
4795
+ default: true
4796
+ },
4797
+ ...makeBorderProps(),
4798
+ ...makeRoundedProps(),
4799
+ ...makeDensityProps(),
4800
+ ...makeDimensionProps(),
4801
+ ...makeElevationProps(),
4802
+ ...makeGroupItemProps(),
4803
+ ...makeLoaderProps(),
4804
+ ...makeLocationProps(),
4805
+ ...makePositionProps(),
4806
+ ...makeRouterProps(),
4807
+ ...makeSizeProps(),
4808
+ ...makeTagProps({
4809
+ tag: 'button'
4810
+ }),
4811
+ ...makeThemeProps(),
4812
+ ...makeVariantProps({
4813
+ variant: 'elevated'
4814
+ })
4815
+ }, 'VBtn');
4729
4816
  const VBtn = genericComponent()({
4730
4817
  name: 'VBtn',
4731
4818
  directives: {
4732
4819
  Ripple
4733
4820
  },
4734
- props: {
4735
- active: {
4736
- type: Boolean,
4737
- default: undefined
4738
- },
4739
- symbol: {
4740
- type: null,
4741
- default: VBtnToggleSymbol
4742
- },
4743
- flat: Boolean,
4744
- icon: [Boolean, String, Function, Object],
4745
- prependIcon: IconValue,
4746
- appendIcon: IconValue,
4747
- block: Boolean,
4748
- stacked: Boolean,
4749
- ripple: {
4750
- type: Boolean,
4751
- default: true
4752
- },
4753
- ...makeBorderProps(),
4754
- ...makeRoundedProps(),
4755
- ...makeDensityProps(),
4756
- ...makeDimensionProps(),
4757
- ...makeElevationProps(),
4758
- ...makeGroupItemProps(),
4759
- ...makeLoaderProps(),
4760
- ...makeLocationProps(),
4761
- ...makePositionProps(),
4762
- ...makeRouterProps(),
4763
- ...makeSizeProps(),
4764
- ...makeTagProps({
4765
- tag: 'button'
4766
- }),
4767
- ...makeThemeProps(),
4768
- ...makeVariantProps({
4769
- variant: 'elevated'
4770
- })
4771
- },
4821
+ props: makeVBtnProps(),
4772
4822
  emits: {
4773
4823
  'group:selected': val => true
4774
4824
  },
@@ -4861,43 +4911,49 @@
4861
4911
  },
4862
4912
  "value": valueAttr.value
4863
4913
  }, {
4864
- default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && vue.createVNode(VDefaultsProvider, {
4914
+ default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && vue.createVNode("span", {
4865
4915
  "key": "prepend",
4916
+ "class": "v-btn__prepend"
4917
+ }, [!slots.prepend ? vue.createVNode(VIcon, {
4918
+ "key": "prepend-icon",
4919
+ "icon": props.prependIcon
4920
+ }, null) : vue.createVNode(VDefaultsProvider, {
4921
+ "key": "prepend-defaults",
4922
+ "disabled": !props.prependIcon,
4866
4923
  "defaults": {
4867
4924
  VIcon: {
4868
4925
  icon: props.prependIcon
4869
4926
  }
4870
4927
  }
4871
- }, {
4872
- default: () => [vue.createVNode("span", {
4873
- "class": "v-btn__prepend"
4874
- }, [slots.prepend?.() ?? vue.createVNode(VIcon, null, null)])]
4875
- }), vue.createVNode("span", {
4928
+ }, slots.prepend)]), vue.createVNode("span", {
4876
4929
  "class": "v-btn__content",
4877
4930
  "data-no-activator": ""
4878
- }, [vue.createVNode(VDefaultsProvider, {
4879
- "key": "content",
4931
+ }, [!slots.default && hasIcon ? vue.createVNode(VIcon, {
4932
+ "key": "content-icon",
4933
+ "icon": props.icon
4934
+ }, null) : vue.createVNode(VDefaultsProvider, {
4935
+ "key": "content-defaults",
4936
+ "disabled": !hasIcon,
4880
4937
  "defaults": {
4881
4938
  VIcon: {
4882
- icon: hasIcon ? props.icon : undefined
4939
+ icon: props.icon
4883
4940
  }
4884
4941
  }
4885
- }, {
4886
- default: () => [slots.default?.() ?? (hasIcon && vue.createVNode(VIcon, {
4887
- "key": "icon"
4888
- }, null))]
4889
- })]), !props.icon && hasAppend && vue.createVNode(VDefaultsProvider, {
4942
+ }, slots.default)]), !props.icon && hasAppend && vue.createVNode("span", {
4890
4943
  "key": "append",
4944
+ "class": "v-btn__append"
4945
+ }, [!slots.append ? vue.createVNode(VIcon, {
4946
+ "key": "append-icon",
4947
+ "icon": props.appendIcon
4948
+ }, null) : vue.createVNode(VDefaultsProvider, {
4949
+ "key": "append-defaults",
4950
+ "disabled": !props.appendIcon,
4891
4951
  "defaults": {
4892
4952
  VIcon: {
4893
4953
  icon: props.appendIcon
4894
4954
  }
4895
4955
  }
4896
- }, {
4897
- default: () => [vue.createVNode("span", {
4898
- "class": "v-btn__append"
4899
- }, [slots.append?.() ?? vue.createVNode(VIcon, null, null)])]
4900
- }), !!props.loading && vue.createVNode("span", {
4956
+ }, slots.append)]), !!props.loading && vue.createVNode("span", {
4901
4957
  "key": "loader",
4902
4958
  "class": "v-btn__loader"
4903
4959
  }, [slots.loader?.() ?? vue.createVNode(VProgressCircular, {
@@ -5026,10 +5082,12 @@
5026
5082
  })
5027
5083
  },
5028
5084
  emits: {
5085
+ 'click:close': e => true,
5029
5086
  'update:modelValue': value => true
5030
5087
  },
5031
5088
  setup(props, _ref) {
5032
5089
  let {
5090
+ emit,
5033
5091
  slots
5034
5092
  } = _ref;
5035
5093
  const isActive = useProxiedModel(props, 'modelValue');
@@ -5079,6 +5137,7 @@
5079
5137
  'aria-label': t(props.closeLabel),
5080
5138
  onClick(e) {
5081
5139
  isActive.value = false;
5140
+ emit('click:close', e);
5082
5141
  }
5083
5142
  }));
5084
5143
  return () => {
@@ -5100,8 +5159,17 @@
5100
5159
  "key": "border",
5101
5160
  "class": ['v-alert__border', textColorClasses.value],
5102
5161
  "style": textColorStyles.value
5103
- }, null), hasPrepend && vue.createVNode(VDefaultsProvider, {
5162
+ }, null), hasPrepend && vue.createVNode("div", {
5104
5163
  "key": "prepend",
5164
+ "class": "v-alert__prepend"
5165
+ }, [!slots.prepend ? vue.createVNode(VIcon, {
5166
+ "key": "prepend-icon",
5167
+ "density": props.density,
5168
+ "icon": icon.value,
5169
+ "size": props.prominent ? 44 : 28
5170
+ }, null) : vue.createVNode(VDefaultsProvider, {
5171
+ "key": "prepend-defaults",
5172
+ "disabled": !icon.value,
5105
5173
  "defaults": {
5106
5174
  VIcon: {
5107
5175
  density: props.density,
@@ -5109,21 +5177,25 @@
5109
5177
  size: props.prominent ? 44 : 28
5110
5178
  }
5111
5179
  }
5112
- }, {
5113
- default: () => [vue.createVNode("div", {
5114
- "class": "v-alert__prepend"
5115
- }, [slots.prepend ? slots.prepend() : icon.value && vue.createVNode(VIcon, null, null)])]
5116
- }), vue.createVNode("div", {
5180
+ }, slots.prepend)]), vue.createVNode("div", {
5117
5181
  "class": "v-alert__content"
5118
5182
  }, [hasTitle && vue.createVNode(VAlertTitle, {
5119
5183
  "key": "title"
5120
5184
  }, {
5121
- default: () => [slots.title ? slots.title() : props.title]
5122
- }), hasText && (slots.text ? slots.text() : props.text), slots.default?.()]), slots.append && vue.createVNode("div", {
5185
+ default: () => [slots.title?.() ?? props.title]
5186
+ }), hasText && (slots.text?.() ?? props.text), slots.default?.()]), slots.append && vue.createVNode("div", {
5123
5187
  "key": "append",
5124
5188
  "class": "v-alert__append"
5125
- }, [slots.append()]), hasClose && vue.createVNode(VDefaultsProvider, {
5189
+ }, [slots.append()]), hasClose && vue.createVNode("div", {
5126
5190
  "key": "close",
5191
+ "class": "v-alert__close"
5192
+ }, [!slots.close ? vue.createVNode(VBtn, vue.mergeProps({
5193
+ "key": "close-btn",
5194
+ "icon": props.closeIcon,
5195
+ "size": "x-small",
5196
+ "variant": "text"
5197
+ }, closeProps.value), null) : vue.createVNode(VDefaultsProvider, {
5198
+ "key": "close-defaults",
5127
5199
  "defaults": {
5128
5200
  VBtn: {
5129
5201
  icon: props.closeIcon,
@@ -5132,12 +5204,10 @@
5132
5204
  }
5133
5205
  }
5134
5206
  }, {
5135
- default: () => [vue.createVNode("div", {
5136
- "class": "v-alert__close"
5137
- }, [slots.close?.({
5207
+ default: () => [slots.close?.({
5138
5208
  props: closeProps.value
5139
- }) ?? vue.createVNode(VBtn, closeProps.value, null)])]
5140
- })]
5209
+ })]
5210
+ })])]
5141
5211
  });
5142
5212
  };
5143
5213
  }
@@ -6100,7 +6170,13 @@
6100
6170
  });
6101
6171
  }
6102
6172
  function onInput(e) {
6103
- model.value = e.target.value;
6173
+ const el = e.target;
6174
+ const caretPosition = [el.selectionStart, el.selectionEnd];
6175
+ model.value = el.value;
6176
+ vue.nextTick(() => {
6177
+ el.selectionStart = caretPosition[0];
6178
+ el.selectionEnd = caretPosition[1];
6179
+ });
6104
6180
  }
6105
6181
  useRender(() => {
6106
6182
  const hasCounter = !!(slots.counter || props.counter || props.counterValue);
@@ -6147,6 +6223,7 @@
6147
6223
  "id": id.value,
6148
6224
  "active": isActive.value || isDirty.value,
6149
6225
  "dirty": isDirty.value || props.dirty,
6226
+ "disabled": isDisabled.value,
6150
6227
  "focused": isFocused.value,
6151
6228
  "error": isValid.value === false
6152
6229
  }), {
@@ -6199,9 +6276,6 @@
6199
6276
  return forwardRefs({}, vInputRef, vFieldRef, inputRef);
6200
6277
  }
6201
6278
  });
6202
- function filterVTextFieldProps(props) {
6203
- return pick(props, Object.keys(VTextField.props));
6204
- }
6205
6279
 
6206
6280
  // Types
6207
6281
 
@@ -6459,11 +6533,6 @@
6459
6533
  };
6460
6534
  }
6461
6535
  });
6462
- function filterControlProps(props) {
6463
- return pick(props, Object.keys(VSelectionControl.props));
6464
- }
6465
-
6466
- // Types
6467
6536
 
6468
6537
  const makeVCheckboxBtnProps = propsFactory({
6469
6538
  indeterminate: Boolean,
@@ -6513,9 +6582,6 @@
6513
6582
  return {};
6514
6583
  }
6515
6584
  });
6516
- function filterCheckboxBtnProps(props) {
6517
- return pick(props, Object.keys(VCheckboxBtn.props));
6518
- }
6519
6585
 
6520
6586
  // Types
6521
6587
 
@@ -6544,7 +6610,7 @@
6544
6610
  useRender(() => {
6545
6611
  const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
6546
6612
  const [inputProps, _1] = filterInputProps(props);
6547
- const [checkboxProps, _2] = filterCheckboxBtnProps(props);
6613
+ const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6548
6614
  return vue.createVNode(VInput, vue.mergeProps({
6549
6615
  "class": "v-checkbox"
6550
6616
  }, inputAttrs, inputProps, {
@@ -6801,10 +6867,13 @@
6801
6867
  const link = useLink(props, attrs);
6802
6868
  const isLink = vue.computed(() => props.link !== false && link.isLink.value);
6803
6869
  const isClickable = vue.computed(() => !props.disabled && props.link !== false && (!!group || props.link || link.isClickable.value));
6804
- function onCloseClick(e) {
6805
- isActive.value = false;
6806
- emit('click:close', e);
6807
- }
6870
+ const closeProps = vue.computed(() => ({
6871
+ 'aria-label': t(props.closeLabel),
6872
+ onClick(e) {
6873
+ isActive.value = false;
6874
+ emit('click:close', e);
6875
+ }
6876
+ }));
6808
6877
  function onClick(e) {
6809
6878
  emit('click', e);
6810
6879
  if (!isClickable.value) return;
@@ -6819,10 +6888,12 @@
6819
6888
  }
6820
6889
  return () => {
6821
6890
  const Tag = link.isLink.value ? 'a' : props.tag;
6822
- const hasAppend = !!(slots.append || props.appendIcon || props.appendAvatar);
6891
+ const hasAppendMedia = !!(props.appendIcon || props.appendAvatar);
6892
+ const hasAppend = !!(hasAppendMedia || slots.append);
6823
6893
  const hasClose = !!(slots.close || props.closable);
6824
6894
  const hasFilter = !!(slots.filter || props.filter) && group;
6825
- const hasPrepend = !!(slots.prepend || props.prependIcon || props.prependAvatar);
6895
+ const hasPrependMedia = !!(props.prependIcon || props.prependAvatar);
6896
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
6826
6897
  const hasColor = !group || group.isSelected.value;
6827
6898
  return isActive.value && vue.withDirectives(vue.createVNode(Tag, {
6828
6899
  "class": ['v-chip', {
@@ -6840,77 +6911,94 @@
6840
6911
  "onClick": onClick,
6841
6912
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
6842
6913
  }, {
6843
- default: () => [genOverlays(isClickable.value, 'v-chip'), hasFilter && vue.createVNode(VDefaultsProvider, {
6844
- "key": "filter",
6845
- "defaults": {
6846
- VIcon: {
6847
- icon: props.filterIcon
6848
- }
6849
- }
6914
+ default: () => [genOverlays(isClickable.value, 'v-chip'), hasFilter && vue.createVNode(VExpandXTransition, {
6915
+ "key": "filter"
6850
6916
  }, {
6851
- default: () => [vue.createVNode(VExpandXTransition, null, {
6852
- default: () => [vue.withDirectives(vue.createVNode("div", {
6853
- "class": "v-chip__filter"
6854
- }, [slots.filter ? slots.filter() : vue.createVNode(VIcon, null, null)]), [[vue.vShow, group.isSelected.value]])]
6855
- })]
6856
- }), hasPrepend && vue.createVNode(VDefaultsProvider, {
6917
+ default: () => [vue.withDirectives(vue.createVNode("div", {
6918
+ "class": "v-chip__filter"
6919
+ }, [!slots.filter ? vue.createVNode(VIcon, {
6920
+ "key": "filter-icon",
6921
+ "icon": props.filterIcon
6922
+ }, null) : vue.withDirectives(vue.createVNode(VDefaultsProvider, {
6923
+ "key": "filter-defaults",
6924
+ "disabled": !props.filterIcon,
6925
+ "defaults": {
6926
+ VIcon: {
6927
+ icon: props.filterIcon
6928
+ }
6929
+ }
6930
+ }, null), [[vue.resolveDirective("slot"), slots.filter, "default"]])]), [[vue.vShow, group.isSelected.value]])]
6931
+ }), hasPrepend && vue.createVNode("div", {
6857
6932
  "key": "prepend",
6933
+ "class": "v-chip__prepend"
6934
+ }, [!slots.prepend ? vue.createVNode(vue.Fragment, null, [props.prependIcon && vue.createVNode(VIcon, {
6935
+ "key": "prepend-icon",
6936
+ "icon": props.prependIcon,
6937
+ "start": true
6938
+ }, null), props.prependAvatar && vue.createVNode(VAvatar, {
6939
+ "key": "prepend-avatar",
6940
+ "image": props.prependAvatar,
6941
+ "start": true
6942
+ }, null)]) : vue.createVNode(VDefaultsProvider, {
6943
+ "key": "prepend-defaults",
6944
+ "disabled": !hasPrependMedia,
6858
6945
  "defaults": {
6859
6946
  VAvatar: {
6860
- image: props.prependAvatar
6947
+ image: props.prependAvatar,
6948
+ start: true
6861
6949
  },
6862
6950
  VIcon: {
6863
- icon: props.prependIcon
6951
+ icon: props.prependIcon,
6952
+ start: true
6864
6953
  }
6865
6954
  }
6866
- }, {
6867
- default: () => [slots.prepend ? vue.createVNode("div", {
6868
- "class": "v-chip__prepend"
6869
- }, [slots.prepend()]) : props.prependAvatar ? vue.createVNode(VAvatar, {
6870
- "start": true
6871
- }, null) : props.prependIcon ? vue.createVNode(VIcon, {
6872
- "start": true
6873
- }, null) : undefined]
6874
- }), slots.default?.({
6955
+ }, slots.prepend)]), slots.default?.({
6875
6956
  isSelected: group?.isSelected.value,
6876
6957
  selectedClass: group?.selectedClass.value,
6877
6958
  select: group?.select,
6878
6959
  toggle: group?.toggle,
6879
6960
  value: group?.value.value,
6880
6961
  disabled: props.disabled
6881
- }) ?? props.text, hasAppend && vue.createVNode(VDefaultsProvider, {
6962
+ }) ?? props.text, hasAppend && vue.createVNode("div", {
6882
6963
  "key": "append",
6964
+ "class": "v-chip__append"
6965
+ }, [!slots.append ? vue.createVNode(vue.Fragment, null, [props.appendIcon && vue.createVNode(VIcon, {
6966
+ "key": "append-icon",
6967
+ "end": true,
6968
+ "icon": props.appendIcon
6969
+ }, null), props.appendAvatar && vue.createVNode(VAvatar, {
6970
+ "key": "append-avatar",
6971
+ "end": true,
6972
+ "image": props.appendAvatar
6973
+ }, null)]) : vue.createVNode(VDefaultsProvider, {
6974
+ "key": "append-defaults",
6975
+ "disabled": !hasAppendMedia,
6883
6976
  "defaults": {
6884
6977
  VAvatar: {
6978
+ end: true,
6885
6979
  image: props.appendAvatar
6886
6980
  },
6887
6981
  VIcon: {
6982
+ end: true,
6888
6983
  icon: props.appendIcon
6889
6984
  }
6890
6985
  }
6891
- }, {
6892
- default: () => [slots.append ? vue.createVNode("div", {
6893
- "class": "v-chip__append"
6894
- }, [slots.append()]) : props.appendAvatar ? vue.createVNode(VAvatar, {
6895
- "end": true
6896
- }, null) : props.appendIcon ? vue.createVNode(VIcon, {
6897
- "end": true
6898
- }, null) : undefined]
6899
- }), hasClose && vue.createVNode(VDefaultsProvider, {
6986
+ }, slots.append)]), hasClose && vue.createVNode("div", vue.mergeProps({
6900
6987
  "key": "close",
6988
+ "class": "v-chip__close"
6989
+ }, closeProps.value), [!slots.close ? vue.createVNode(VIcon, {
6990
+ "key": "close-icon",
6991
+ "icon": props.closeIcon,
6992
+ "size": "x-small"
6993
+ }, null) : vue.createVNode(VDefaultsProvider, {
6994
+ "key": "close-defaults",
6901
6995
  "defaults": {
6902
6996
  VIcon: {
6903
6997
  icon: props.closeIcon,
6904
6998
  size: 'x-small'
6905
6999
  }
6906
7000
  }
6907
- }, {
6908
- default: () => [vue.createVNode("div", {
6909
- "class": "v-chip__close",
6910
- "aria-label": t(props.closeLabel),
6911
- "onClick": onCloseClick
6912
- }, [slots.close ? slots.close() : vue.createVNode(VIcon, null, null)])]
6913
- })]
7001
+ }, slots.close)])]
6914
7002
  }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple, null]]);
6915
7003
  };
6916
7004
  }
@@ -7051,7 +7139,6 @@
7051
7139
  };
7052
7140
 
7053
7141
  /* eslint-disable sonarjs/no-identical-functions */
7054
-
7055
7142
  const independentSelectStrategy = mandatory => {
7056
7143
  const strategy = {
7057
7144
  select: _ref => {
@@ -7060,6 +7147,8 @@
7060
7147
  value,
7061
7148
  selected
7062
7149
  } = _ref;
7150
+ id = vue.toRaw(id);
7151
+
7063
7152
  // When mandatory and we're trying to deselect when id
7064
7153
  // is the only currently selected item then do nothing
7065
7154
  if (mandatory && !value) {
@@ -7104,6 +7193,7 @@
7104
7193
  id,
7105
7194
  ...rest
7106
7195
  } = _ref3;
7196
+ id = vue.toRaw(id);
7107
7197
  const singleSelected = selected.has(id) ? new Map([[id, selected.get(id)]]) : new Map();
7108
7198
  return parentStrategy.select({
7109
7199
  ...rest,
@@ -7134,6 +7224,7 @@
7134
7224
  children,
7135
7225
  ...rest
7136
7226
  } = _ref4;
7227
+ id = vue.toRaw(id);
7137
7228
  if (children.has(id)) return selected;
7138
7229
  return parentStrategy.select({
7139
7230
  id,
@@ -7157,6 +7248,7 @@
7157
7248
  children,
7158
7249
  ...rest
7159
7250
  } = _ref5;
7251
+ id = vue.toRaw(id);
7160
7252
  if (children.has(id)) return selected;
7161
7253
  return parentStrategy.select({
7162
7254
  id,
@@ -7180,6 +7272,7 @@
7180
7272
  children,
7181
7273
  parents
7182
7274
  } = _ref6;
7275
+ id = vue.toRaw(id);
7183
7276
  const original = new Map(selected);
7184
7277
  const items = [id];
7185
7278
  while (items.length) {
@@ -7401,7 +7494,7 @@
7401
7494
  isOpen: vue.computed(() => parent.root.opened.value.has(computedId.value)),
7402
7495
  parent: vue.computed(() => parent.root.parents.value.get(computedId.value)),
7403
7496
  select: (selected, e) => parent.root.select(computedId.value, selected, e),
7404
- isSelected: vue.computed(() => parent.root.selected.value.get(computedId.value) === 'on'),
7497
+ isSelected: vue.computed(() => parent.root.selected.value.get(vue.toRaw(computedId.value)) === 'on'),
7405
7498
  isIndeterminate: vue.computed(() => parent.root.selected.value.get(computedId.value) === 'indeterminate'),
7406
7499
  isLeaf: vue.computed(() => !parent.root.children.value.get(computedId.value)),
7407
7500
  isGroupActivator: parent.isGroupActivator
@@ -7421,8 +7514,6 @@
7421
7514
  });
7422
7515
  };
7423
7516
 
7424
- // Types
7425
-
7426
7517
  const VListGroupActivator = defineComponent({
7427
7518
  name: 'VListGroupActivator',
7428
7519
  setup(_, _ref) {
@@ -7515,9 +7606,6 @@
7515
7606
  return {};
7516
7607
  }
7517
7608
  });
7518
- function filterListGroupProps(props) {
7519
- return pick(props, Object.keys(VListGroup.props));
7520
- }
7521
7609
 
7522
7610
  const VListItemSubtitle = createSimpleFunctional('v-list-item-subtitle');
7523
7611
 
@@ -7655,8 +7743,10 @@
7655
7743
  const hasColor = !list || isSelected.value || isActive.value;
7656
7744
  const hasTitle = slots.title || props.title;
7657
7745
  const hasSubtitle = slots.subtitle || props.subtitle;
7658
- const hasAppend = !!(slots.append || props.appendAvatar || props.appendIcon);
7659
- const hasPrepend = !!(slots.prepend || props.prependAvatar || props.prependIcon);
7746
+ const hasAppendMedia = !!(props.appendAvatar || props.appendIcon);
7747
+ const hasAppend = !!(hasAppendMedia || slots.append);
7748
+ const hasPrependMedia = !!(props.prependAvatar || props.prependIcon);
7749
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
7660
7750
  list?.updateHasPrepend(hasPrepend);
7661
7751
  return vue.withDirectives(vue.createVNode(Tag, {
7662
7752
  "class": ['v-list-item', {
@@ -7676,7 +7766,7 @@
7676
7766
  default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && vue.createVNode("div", {
7677
7767
  "key": "prepend",
7678
7768
  "class": "v-list-item__prepend"
7679
- }, [props.prependAvatar && vue.createVNode(VAvatar, {
7769
+ }, [!slots.prepend ? vue.createVNode(vue.Fragment, null, [props.prependAvatar && vue.createVNode(VAvatar, {
7680
7770
  "key": "prepend-avatar",
7681
7771
  "density": props.density,
7682
7772
  "image": props.prependAvatar
@@ -7684,8 +7774,9 @@
7684
7774
  "key": "prepend-icon",
7685
7775
  "density": props.density,
7686
7776
  "icon": props.prependIcon
7687
- }, null), slots.prepend && vue.createVNode(VDefaultsProvider, {
7688
- "key": "prepend",
7777
+ }, null)]) : vue.createVNode(VDefaultsProvider, {
7778
+ "key": "prepend-defaults",
7779
+ "disabled": !hasPrependMedia,
7689
7780
  "defaults": {
7690
7781
  VAvatar: {
7691
7782
  density: props.density,
@@ -7700,7 +7791,7 @@
7700
7791
  }
7701
7792
  }
7702
7793
  }, {
7703
- default: () => [slots.prepend(slotProps.value)]
7794
+ default: () => [slots.prepend?.(slotProps.value)]
7704
7795
  })]), vue.createVNode("div", {
7705
7796
  "class": "v-list-item__content",
7706
7797
  "data-no-activator": ""
@@ -7719,8 +7810,17 @@
7719
7810
  }), slots.default?.(slotProps.value)]), hasAppend && vue.createVNode("div", {
7720
7811
  "key": "append",
7721
7812
  "class": "v-list-item__append"
7722
- }, [slots.append && vue.createVNode(VDefaultsProvider, {
7723
- "key": "append",
7813
+ }, [!slots.append ? vue.createVNode(vue.Fragment, null, [props.appendIcon && vue.createVNode(VIcon, {
7814
+ "key": "append-icon",
7815
+ "density": props.density,
7816
+ "icon": props.appendIcon
7817
+ }, null), props.appendAvatar && vue.createVNode(VAvatar, {
7818
+ "key": "append-avatar",
7819
+ "density": props.density,
7820
+ "image": props.appendAvatar
7821
+ }, null)]) : vue.createVNode(VDefaultsProvider, {
7822
+ "key": "append-defaults",
7823
+ "disabled": !hasAppendMedia,
7724
7824
  "defaults": {
7725
7825
  VAvatar: {
7726
7826
  density: props.density,
@@ -7735,16 +7835,8 @@
7735
7835
  }
7736
7836
  }
7737
7837
  }, {
7738
- default: () => [slots.append(slotProps.value)]
7739
- }), props.appendIcon && vue.createVNode(VIcon, {
7740
- "key": "append-icon",
7741
- "density": props.density,
7742
- "icon": props.appendIcon
7743
- }, null), props.appendAvatar && vue.createVNode(VAvatar, {
7744
- "key": "append-avatar",
7745
- "density": props.density,
7746
- "image": props.appendAvatar
7747
- }, null)])]
7838
+ default: () => [slots.append?.(slotProps.value)]
7839
+ })])]
7748
7840
  }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple]]);
7749
7841
  });
7750
7842
  return {};
@@ -7841,7 +7933,7 @@
7841
7933
  item
7842
7934
  }) : undefined
7843
7935
  };
7844
- const [listGroupProps, _1] = filterListGroupProps(itemProps);
7936
+ const [listGroupProps, _1] = VListGroup.filterProps(itemProps);
7845
7937
  return children ? vue.createVNode(VListGroup, vue.mergeProps({
7846
7938
  "value": itemProps?.value
7847
7939
  }, listGroupProps), {
@@ -8963,7 +9055,7 @@
8963
9055
  if (!(data.isActive.value && props.scrollStrategy)) return;
8964
9056
  scope = vue.effectScope();
8965
9057
  await vue.nextTick();
8966
- scope.run(() => {
9058
+ scope.active && scope.run(() => {
8967
9059
  if (typeof props.scrollStrategy === 'function') {
8968
9060
  props.scrollStrategy(data, props, scope);
8969
9061
  } else {
@@ -9044,7 +9136,7 @@
9044
9136
  });
9045
9137
  });
9046
9138
  vue.onScopeDispose(() => {
9047
- cancelIdleCallback(ric);
9139
+ typeof cancelIdleCallback !== 'undefined' && cancelIdleCallback(ric);
9048
9140
  cancelAnimationFrame(raf);
9049
9141
  });
9050
9142
  }
@@ -9068,6 +9160,8 @@
9068
9160
 
9069
9161
  // Types
9070
9162
 
9163
+ const breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl']; // no xs
9164
+
9071
9165
  const DisplaySymbol = Symbol.for('vuetify:display');
9072
9166
  const defaultDisplayOptions = {
9073
9167
  mobileBreakpoint: 'lg',
@@ -9090,8 +9184,8 @@
9090
9184
  function getClientHeight(isHydrate) {
9091
9185
  return IN_BROWSER && !isHydrate ? window.innerHeight : 0;
9092
9186
  }
9093
- function getPlatform() {
9094
- const userAgent = IN_BROWSER ? window.navigator.userAgent : 'ssr';
9187
+ function getPlatform(isHydrate) {
9188
+ const userAgent = IN_BROWSER && !isHydrate ? window.navigator.userAgent : 'ssr';
9095
9189
  function match(regexp) {
9096
9190
  return Boolean(userAgent.match(regexp));
9097
9191
  }
@@ -9106,7 +9200,6 @@
9106
9200
  const win = match(/win/i);
9107
9201
  const mac = match(/mac/i);
9108
9202
  const linux = match(/linux/i);
9109
- const ssr = match(/ssr/i);
9110
9203
  return {
9111
9204
  android,
9112
9205
  ios,
@@ -9120,7 +9213,7 @@
9120
9213
  mac,
9121
9214
  linux,
9122
9215
  touch: SUPPORTS_TOUCH,
9123
- ssr
9216
+ ssr: userAgent === 'ssr'
9124
9217
  };
9125
9218
  }
9126
9219
  function createDisplay(options, ssr) {
@@ -9129,13 +9222,17 @@
9129
9222
  mobileBreakpoint
9130
9223
  } = parseDisplayOptions(options);
9131
9224
  const height = vue.ref(getClientHeight(ssr));
9132
- const platform = getPlatform();
9225
+ const platform = vue.shallowRef(getPlatform(ssr));
9133
9226
  const state = vue.reactive({});
9134
9227
  const width = vue.ref(getClientWidth(ssr));
9135
- function update() {
9228
+ function updateSize() {
9136
9229
  height.value = getClientHeight();
9137
9230
  width.value = getClientWidth();
9138
9231
  }
9232
+ function update() {
9233
+ updateSize();
9234
+ platform.value = getPlatform();
9235
+ }
9139
9236
 
9140
9237
  // eslint-disable-next-line max-statements
9141
9238
  vue.watchEffect(() => {
@@ -9147,7 +9244,7 @@
9147
9244
  const xxl = width.value >= thresholds.xxl;
9148
9245
  const name = xs ? 'xs' : sm ? 'sm' : md ? 'md' : lg ? 'lg' : xl ? 'xl' : 'xxl';
9149
9246
  const breakpointValue = typeof mobileBreakpoint === 'number' ? mobileBreakpoint : thresholds[mobileBreakpoint];
9150
- const mobile = !platform.ssr ? width.value < breakpointValue : platform.android || platform.ios || platform.opera;
9247
+ const mobile = width.value < breakpointValue;
9151
9248
  state.xs = xs;
9152
9249
  state.sm = sm;
9153
9250
  state.md = md;
@@ -9167,11 +9264,11 @@
9167
9264
  state.width = width.value;
9168
9265
  state.mobile = mobile;
9169
9266
  state.mobileBreakpoint = mobileBreakpoint;
9170
- state.platform = platform;
9267
+ state.platform = platform.value;
9171
9268
  state.thresholds = thresholds;
9172
9269
  });
9173
9270
  if (IN_BROWSER) {
9174
- window.addEventListener('resize', update, {
9271
+ window.addEventListener('resize', updateSize, {
9175
9272
  passive: true
9176
9273
  });
9177
9274
  }
@@ -9236,7 +9333,7 @@
9236
9333
  parent?.activeChildren.add(vm.uid);
9237
9334
  vue.onScopeDispose(() => {
9238
9335
  if (createStackEntry) {
9239
- const idx = globalStack.findIndex(v => v[0] === vm.uid);
9336
+ const idx = vue.toRaw(globalStack).findIndex(v => v[0] === vm.uid);
9240
9337
  globalStack.splice(idx, 1);
9241
9338
  }
9242
9339
  parent?.activeChildren.delete(vm.uid);
@@ -9620,9 +9717,6 @@
9620
9717
  };
9621
9718
  }
9622
9719
  });
9623
- function filterVOverlayProps(props) {
9624
- return pick(props, Object.keys(VOverlay.props));
9625
- }
9626
9720
 
9627
9721
  // Types
9628
9722
 
@@ -9659,17 +9753,17 @@
9659
9753
  const id = vue.computed(() => props.id || `v-menu-${uid}`);
9660
9754
  const overlay = vue.ref();
9661
9755
  const parent = vue.inject(VMenuSymbol, null);
9662
- let openChildren = 0;
9756
+ const openChildren = vue.ref(0);
9663
9757
  vue.provide(VMenuSymbol, {
9664
9758
  register() {
9665
- ++openChildren;
9759
+ ++openChildren.value;
9666
9760
  },
9667
9761
  unregister() {
9668
- --openChildren;
9762
+ --openChildren.value;
9669
9763
  },
9670
9764
  closeParents() {
9671
9765
  setTimeout(() => {
9672
- if (!openChildren) {
9766
+ if (!openChildren.value) {
9673
9767
  isActive.value = false;
9674
9768
  parent?.closeParents();
9675
9769
  }
@@ -9688,7 +9782,7 @@
9688
9782
  'aria-owns': id.value
9689
9783
  }, props.activatorProps));
9690
9784
  useRender(() => {
9691
- const [overlayProps] = filterVOverlayProps(props);
9785
+ const [overlayProps] = VOverlay.filterProps(props);
9692
9786
  return vue.createVNode(VOverlay, vue.mergeProps({
9693
9787
  "ref": overlay,
9694
9788
  "class": ['v-menu']
@@ -9713,7 +9807,8 @@
9713
9807
  });
9714
9808
  });
9715
9809
  return forwardRefs({
9716
- id
9810
+ id,
9811
+ ΨopenChildren: openChildren
9717
9812
  }, overlay);
9718
9813
  }
9719
9814
  });
@@ -9773,7 +9868,15 @@
9773
9868
  t
9774
9869
  } = useLocale();
9775
9870
  const vTextFieldRef = vue.ref();
9776
- const menu = useProxiedModel(props, 'menu');
9871
+ const vMenuRef = vue.ref();
9872
+ const _menu = useProxiedModel(props, 'menu');
9873
+ const menu = vue.computed({
9874
+ get: () => _menu.value,
9875
+ set: v => {
9876
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
9877
+ _menu.value = v;
9878
+ }
9879
+ });
9777
9880
  const {
9778
9881
  items,
9779
9882
  transformIn,
@@ -9855,7 +9958,7 @@
9855
9958
  useRender(() => {
9856
9959
  const hasChips = !!(props.chips || slots.chip);
9857
9960
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
9858
- const [textFieldProps] = filterVTextFieldProps(props);
9961
+ const [textFieldProps] = VTextField.filterProps(props);
9859
9962
  return vue.createVNode(VTextField, vue.mergeProps({
9860
9963
  "ref": vTextFieldRef
9861
9964
  }, textFieldProps, {
@@ -9880,6 +9983,7 @@
9880
9983
  }), {
9881
9984
  ...slots,
9882
9985
  default: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(VMenu, vue.mergeProps({
9986
+ "ref": vMenuRef,
9883
9987
  "modelValue": menu.value,
9884
9988
  "onUpdate:modelValue": $event => menu.value = $event,
9885
9989
  "activator": "parent",
@@ -9940,7 +10044,13 @@
9940
10044
  return vue.createVNode("div", {
9941
10045
  "key": item.value,
9942
10046
  "class": "v-select__selection"
9943
- }, [hasChips ? vue.createVNode(VDefaultsProvider, {
10047
+ }, [hasChips ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
10048
+ "key": "chip",
10049
+ "closable": props.closableChips,
10050
+ "size": "small",
10051
+ "text": item.title
10052
+ }, slotProps), null) : vue.createVNode(VDefaultsProvider, {
10053
+ "key": "chip-defaults",
9944
10054
  "defaults": {
9945
10055
  VChip: {
9946
10056
  closable: props.closableChips,
@@ -9949,15 +10059,15 @@
9949
10059
  }
9950
10060
  }
9951
10061
  }, {
9952
- default: () => [slots.chip ? slots.chip({
10062
+ default: () => [slots.chip?.({
9953
10063
  item,
9954
10064
  index,
9955
10065
  props: slotProps
9956
- }) : vue.createVNode(VChip, slotProps, null)]
9957
- }) : slots.selection ? slots.selection({
10066
+ })]
10067
+ }) : slots.selection?.({
9958
10068
  item,
9959
10069
  index
9960
- }) : vue.createVNode("span", {
10070
+ }) ?? vue.createVNode("span", {
9961
10071
  "class": "v-select__selection-text"
9962
10072
  }, [item.title, props.multiple && index < selections.value.length - 1 && vue.createVNode("span", {
9963
10073
  "class": "v-select__selection-comma"
@@ -10118,7 +10228,15 @@
10118
10228
  const vTextFieldRef = vue.ref();
10119
10229
  const isFocused = vue.ref(false);
10120
10230
  const isPristine = vue.ref(true);
10121
- const menu = useProxiedModel(props, 'menu');
10231
+ const vMenuRef = vue.ref();
10232
+ const _menu = useProxiedModel(props, 'menu');
10233
+ const menu = vue.computed({
10234
+ get: () => _menu.value,
10235
+ set: v => {
10236
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
10237
+ _menu.value = v;
10238
+ }
10239
+ });
10122
10240
  const {
10123
10241
  items,
10124
10242
  transformIn,
@@ -10233,7 +10351,7 @@
10233
10351
  useRender(() => {
10234
10352
  const hasChips = !!(props.chips || slots.chip);
10235
10353
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
10236
- const [textFieldProps] = filterVTextFieldProps(props);
10354
+ const [textFieldProps] = VTextField.filterProps(props);
10237
10355
  return vue.createVNode(VTextField, vue.mergeProps({
10238
10356
  "ref": vTextFieldRef
10239
10357
  }, textFieldProps, {
@@ -10260,6 +10378,7 @@
10260
10378
  }), {
10261
10379
  ...slots,
10262
10380
  default: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(VMenu, vue.mergeProps({
10381
+ "ref": vMenuRef,
10263
10382
  "modelValue": menu.value,
10264
10383
  "onUpdate:modelValue": $event => menu.value = $event,
10265
10384
  "activator": "parent",
@@ -10320,7 +10439,13 @@
10320
10439
  return vue.createVNode("div", {
10321
10440
  "key": item.value,
10322
10441
  "class": "v-autocomplete__selection"
10323
- }, [hasChips ? vue.createVNode(VDefaultsProvider, {
10442
+ }, [hasChips ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
10443
+ "key": "chip",
10444
+ "closable": props.closableChips,
10445
+ "size": "small",
10446
+ "text": item.title
10447
+ }, slotProps), null) : vue.createVNode(VDefaultsProvider, {
10448
+ "key": "chip-defaults",
10324
10449
  "defaults": {
10325
10450
  VChip: {
10326
10451
  closable: props.closableChips,
@@ -10329,15 +10454,15 @@
10329
10454
  }
10330
10455
  }
10331
10456
  }, {
10332
- default: () => [slots.chip ? slots.chip({
10457
+ default: () => [slots.chip?.({
10333
10458
  item,
10334
10459
  index,
10335
10460
  props: slotProps
10336
- }) : vue.createVNode(VChip, slotProps, null)]
10337
- }) : slots.selection ? slots.selection({
10461
+ })]
10462
+ }) : slots.selection?.({
10338
10463
  item,
10339
10464
  index
10340
- }) : vue.createVNode("span", {
10465
+ }) ?? vue.createVNode("span", {
10341
10466
  "class": "v-autocomplete__selection-text"
10342
10467
  }, [item.title, props.multiple && index < selections.value.length - 1 && vue.createVNode("span", {
10343
10468
  "class": "v-autocomplete__selection-comma"
@@ -10538,7 +10663,8 @@
10538
10663
  });
10539
10664
  useRender(() => {
10540
10665
  const hasText = !!(props.text || slots.text);
10541
- const hasPrepend = !!(slots.prepend || props.avatar || props.icon);
10666
+ const hasPrependMedia = !!(props.avatar || props.icon);
10667
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
10542
10668
  return vue.createVNode(props.tag, {
10543
10669
  "class": ['v-banner', {
10544
10670
  'v-banner--stacked': props.stacked || mobile.value,
@@ -10548,8 +10674,18 @@
10548
10674
  "style": [dimensionStyles.value, locationStyles.value],
10549
10675
  "role": "banner"
10550
10676
  }, {
10551
- default: () => [hasPrepend && vue.createVNode(VDefaultsProvider, {
10677
+ default: () => [hasPrepend && vue.createVNode("div", {
10552
10678
  "key": "prepend",
10679
+ "class": "v-banner__prepend"
10680
+ }, [!slots.prepend ? vue.createVNode(VAvatar, {
10681
+ "key": "prepend-avatar",
10682
+ "color": color.value,
10683
+ "density": density.value,
10684
+ "icon": props.icon,
10685
+ "image": props.avatar
10686
+ }, null) : vue.createVNode(VDefaultsProvider, {
10687
+ "key": "prepend-defaults",
10688
+ "disabled": !hasPrependMedia,
10553
10689
  "defaults": {
10554
10690
  VAvatar: {
10555
10691
  color: color.value,
@@ -10558,19 +10694,15 @@
10558
10694
  image: props.avatar
10559
10695
  }
10560
10696
  }
10561
- }, {
10562
- default: () => [vue.createVNode("div", {
10563
- "class": "v-banner__prepend"
10564
- }, [slots.prepend ? slots.prepend() : (props.avatar || props.icon) && vue.createVNode(VAvatar, null, null)])]
10565
- }), vue.createVNode("div", {
10697
+ }, slots.prepend)]), vue.createVNode("div", {
10566
10698
  "class": "v-banner__content"
10567
10699
  }, [hasText && vue.createVNode(VBannerText, {
10568
10700
  "key": "text"
10569
10701
  }, {
10570
- default: () => [slots.text ? slots.text() : props.text]
10571
- }), slots.default?.()]), slots.actions && vue.createVNode(VBannerActions, null, {
10572
- default: () => [slots.actions()]
10573
- })]
10702
+ default: () => [slots.text?.() ?? props.text]
10703
+ }), slots.default?.()]), slots.actions && vue.createVNode(VBannerActions, {
10704
+ "key": "actions"
10705
+ }, slots.actions)]
10574
10706
  });
10575
10707
  });
10576
10708
  }
@@ -10636,6 +10768,9 @@
10636
10768
  const {
10637
10769
  roundedClasses
10638
10770
  } = useRounded(props);
10771
+ const {
10772
+ ssrBootStyles
10773
+ } = useSsrBoot();
10639
10774
  const height = vue.computed(() => Number(props.height) - (props.density === 'comfortable' ? 8 : 0) - (props.density === 'compact' ? 16 : 0));
10640
10775
  const isActive = vue.toRef(props, 'active');
10641
10776
  const {
@@ -10670,7 +10805,7 @@
10670
10805
  "style": [backgroundColorStyles.value, layoutItemStyles.value, {
10671
10806
  height: convertToUnit(height.value),
10672
10807
  transform: `translateY(${convertToUnit(!isActive.value ? 100 : 0, '%')})`
10673
- }]
10808
+ }, ssrBootStyles.value]
10674
10809
  }, {
10675
10810
  default: () => [slots.default && vue.createVNode("div", {
10676
10811
  "class": "v-bottom-navigation__content"
@@ -10800,19 +10935,23 @@
10800
10935
  "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
10801
10936
  "style": backgroundColorStyles.value
10802
10937
  }, {
10803
- default: () => [hasPrepend && vue.createVNode(VDefaultsProvider, {
10938
+ default: () => [hasPrepend && vue.createVNode("div", {
10804
10939
  "key": "prepend",
10940
+ "class": "v-breadcrumbs__prepend"
10941
+ }, [!slots.prepend ? vue.createVNode(VIcon, {
10942
+ "key": "prepend-icon",
10943
+ "start": true,
10944
+ "icon": props.icon
10945
+ }, null) : vue.createVNode(VDefaultsProvider, {
10946
+ "key": "prepend-defaults",
10947
+ "disabled": !props.icon,
10805
10948
  "defaults": {
10806
10949
  VIcon: {
10807
10950
  icon: props.icon,
10808
10951
  start: true
10809
10952
  }
10810
10953
  }
10811
- }, {
10812
- default: () => [vue.createVNode("div", {
10813
- "class": "v-breadcrumbs__prepend"
10814
- }, [slots.prepend ? slots.prepend() : props.icon && vue.createVNode(VIcon, null, null)])]
10815
- }), props.items.map((item, index, array) => vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
10954
+ }, slots.prepend)]), props.items.map((item, index, array) => vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
10816
10955
  "key": index,
10817
10956
  "disabled": index >= array.length - 1
10818
10957
  }, typeof item === 'string' ? {
@@ -10876,30 +11015,33 @@
10876
11015
  slots
10877
11016
  } = _ref;
10878
11017
  useRender(() => {
10879
- const hasPrepend = !!(props.prependAvatar || props.prependIcon || slots.prepend);
10880
- const hasAppend = !!(props.appendAvatar || props.appendIcon || slots.append);
11018
+ const hasPrependMedia = !!(props.prependAvatar || props.prependIcon);
11019
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
11020
+ const hasAppendMedia = !!(props.appendAvatar || props.appendIcon);
11021
+ const hasAppend = !!(hasAppendMedia || slots.append);
10881
11022
  const hasTitle = !!(props.title || slots.title);
10882
11023
  const hasSubtitle = !!(props.subtitle || slots.subtitle);
10883
11024
  return vue.createVNode("div", {
10884
11025
  "class": "v-card-item"
10885
- }, [hasPrepend && vue.createVNode(VDefaultsProvider, {
11026
+ }, [hasPrepend && vue.createVNode("div", {
10886
11027
  "key": "prepend",
11028
+ "class": "v-card-item__prepend"
11029
+ }, [!slots.prepend ? hasPrependMedia && vue.createVNode(VAvatar, {
11030
+ "key": "prepend-avatar",
11031
+ "density": props.density,
11032
+ "icon": props.prependIcon,
11033
+ "image": props.prependAvatar
11034
+ }, null) : vue.createVNode(VDefaultsProvider, {
11035
+ "key": "prepend-defaults",
11036
+ "disabled": !hasPrependMedia,
10887
11037
  "defaults": {
10888
11038
  VAvatar: {
10889
11039
  density: props.density,
10890
11040
  icon: props.prependIcon,
10891
11041
  image: props.prependAvatar
10892
- },
10893
- VIcon: {
10894
- density: props.density,
10895
- icon: props.prependIcon
10896
11042
  }
10897
11043
  }
10898
- }, {
10899
- default: () => [vue.createVNode("div", {
10900
- "class": "v-card-item__prepend"
10901
- }, [slots.prepend?.() ?? vue.createVNode(VAvatar, null, null)])]
10902
- }), vue.createVNode("div", {
11044
+ }, slots.prepend)]), vue.createVNode("div", {
10903
11045
  "class": "v-card-item__content"
10904
11046
  }, [hasTitle && vue.createVNode(VCardTitle, {
10905
11047
  "key": "title"
@@ -10909,24 +11051,25 @@
10909
11051
  "key": "subtitle"
10910
11052
  }, {
10911
11053
  default: () => [slots.subtitle?.() ?? props.subtitle]
10912
- }), slots.default?.()]), hasAppend && vue.createVNode(VDefaultsProvider, {
11054
+ }), slots.default?.()]), hasAppend && vue.createVNode("div", {
10913
11055
  "key": "append",
11056
+ "class": "v-card-item__append"
11057
+ }, [!slots.append ? hasAppendMedia && vue.createVNode(VAvatar, {
11058
+ "key": "append-avatar",
11059
+ "density": props.density,
11060
+ "icon": props.appendIcon,
11061
+ "image": props.appendAvatar
11062
+ }, null) : vue.createVNode(VDefaultsProvider, {
11063
+ "key": "append-defaults",
11064
+ "disabled": !hasAppendMedia,
10914
11065
  "defaults": {
10915
11066
  VAvatar: {
10916
11067
  density: props.density,
10917
11068
  icon: props.appendIcon,
10918
11069
  image: props.appendAvatar
10919
- },
10920
- VIcon: {
10921
- density: props.density,
10922
- icon: props.appendIcon
10923
11070
  }
10924
11071
  }
10925
- }, {
10926
- default: () => [vue.createVNode("div", {
10927
- "class": "v-card-item__append"
10928
- }, [slots.append?.() ?? vue.createVNode(VAvatar, null, null)])]
10929
- })]);
11072
+ }, slots.append)])]);
10930
11073
  });
10931
11074
  return {};
10932
11075
  }
@@ -11038,19 +11181,23 @@
11038
11181
  "onClick": isClickable.value && link.navigate,
11039
11182
  "tabindex": props.disabled ? -1 : undefined
11040
11183
  }, {
11041
- default: () => [hasImage && vue.createVNode(VDefaultsProvider, {
11184
+ default: () => [hasImage && vue.createVNode("div", {
11042
11185
  "key": "image",
11186
+ "class": "v-card__image"
11187
+ }, [!slots.image ? vue.createVNode(VImg, {
11188
+ "key": "image-img",
11189
+ "cover": true,
11190
+ "src": props.image
11191
+ }, null) : vue.createVNode(VDefaultsProvider, {
11192
+ "key": "image-defaults",
11193
+ "disabled": !props.image,
11043
11194
  "defaults": {
11044
11195
  VImg: {
11045
11196
  cover: true,
11046
11197
  src: props.image
11047
11198
  }
11048
11199
  }
11049
- }, {
11050
- default: () => [vue.createVNode("div", {
11051
- "class": "v-card__image"
11052
- }, [slots.image?.() ?? vue.createVNode(VImg, null, null)])]
11053
- }), vue.createVNode(LoaderSlot, {
11200
+ }, slots.image)]), vue.createVNode(LoaderSlot, {
11054
11201
  "name": "v-card",
11055
11202
  "active": !!props.loading,
11056
11203
  "color": typeof props.loading === 'boolean' ? undefined : props.loading
@@ -11360,25 +11507,6 @@
11360
11507
  }
11361
11508
  });
11362
11509
 
11363
- // Utilities
11364
-
11365
- // Composables
11366
- function useSsrBoot() {
11367
- const isBooted = vue.ref(false);
11368
- vue.onMounted(() => {
11369
- window.requestAnimationFrame(() => {
11370
- isBooted.value = true;
11371
- });
11372
- });
11373
- const ssrBootStyles = vue.computed(() => !isBooted.value ? {
11374
- transition: 'none !important'
11375
- } : undefined);
11376
- return {
11377
- ssrBootStyles,
11378
- isBooted: vue.readonly(isBooted)
11379
- };
11380
- }
11381
-
11382
11510
  const VWindowItem = genericComponent()({
11383
11511
  name: 'VWindowItem',
11384
11512
  directives: {
@@ -11677,6 +11805,19 @@
11677
11805
  };
11678
11806
  });
11679
11807
  const canvasRef = vue.ref();
11808
+ const canvasWidth = vue.ref(parseFloat(props.width));
11809
+ const canvasHeight = vue.ref(parseFloat(props.height));
11810
+ const {
11811
+ resizeRef
11812
+ } = useResizeObserver(entries => {
11813
+ if (!resizeRef.value?.offsetParent) return;
11814
+ const {
11815
+ width,
11816
+ height
11817
+ } = entries[0].contentRect;
11818
+ canvasWidth.value = width;
11819
+ canvasHeight.value = height;
11820
+ });
11680
11821
  function updateDotPosition(x, y, rect) {
11681
11822
  const {
11682
11823
  left,
@@ -11721,18 +11862,14 @@
11721
11862
  return;
11722
11863
  }
11723
11864
  if (!canvasRef.value) return;
11724
- const {
11725
- width,
11726
- height
11727
- } = canvasRef.value.getBoundingClientRect();
11728
11865
  const {
11729
11866
  x,
11730
11867
  y
11731
11868
  } = dotPosition.value;
11732
11869
  emit('update:color', {
11733
11870
  h: props.color?.h ?? 0,
11734
- s: clamp(x, 0, width) / width,
11735
- v: 1 - clamp(y, 0, height) / height,
11871
+ s: clamp(x, 0, canvasWidth.value) / canvasWidth.value,
11872
+ v: 1 - clamp(y, 0, canvasHeight.value) / canvasHeight.value,
11736
11873
  a: props.color?.a ?? 1
11737
11874
  });
11738
11875
  });
@@ -11755,16 +11892,27 @@
11755
11892
  vue.watch(() => props.color?.h, updateCanvas, {
11756
11893
  immediate: true
11757
11894
  });
11895
+ vue.watch(() => [canvasWidth.value, canvasHeight.value], (newVal, oldVal) => {
11896
+ updateCanvas();
11897
+ dotPosition.value = {
11898
+ x: dotPosition.value.x * newVal[0] / oldVal[0],
11899
+ y: dotPosition.value.y * newVal[1] / oldVal[1]
11900
+ };
11901
+ }, {
11902
+ flush: 'post'
11903
+ });
11758
11904
  vue.watch(() => props.color, () => {
11759
11905
  if (isInteracting.value) {
11760
11906
  isInteracting.value = false;
11761
11907
  return;
11762
11908
  }
11763
- if (!props.color) return;
11764
11909
  isOutsideUpdate.value = true;
11765
- dotPosition.value = {
11766
- x: props.color.s * parseInt(props.width, 10),
11767
- y: (1 - props.color.v) * parseInt(props.height, 10)
11910
+ dotPosition.value = props.color ? {
11911
+ x: props.color.s * canvasWidth.value,
11912
+ y: (1 - props.color.v) * canvasHeight.value
11913
+ } : {
11914
+ x: 0,
11915
+ y: 0
11768
11916
  };
11769
11917
  }, {
11770
11918
  deep: true,
@@ -11772,19 +11920,16 @@
11772
11920
  });
11773
11921
  vue.onMounted(() => updateCanvas());
11774
11922
  useRender(() => vue.createVNode("div", {
11923
+ "ref": resizeRef,
11775
11924
  "class": "v-color-picker-canvas",
11776
- "style": {
11777
- width: convertToUnit(props.width),
11778
- height: convertToUnit(props.height)
11779
- },
11780
11925
  "onClick": handleClick,
11781
11926
  "onMousedown": handleMouseDown,
11782
11927
  "onTouchstart": handleMouseDown
11783
11928
  }, [vue.createVNode("canvas", {
11784
11929
  "ref": canvasRef,
11785
- "width": props.width,
11786
- "height": props.height
11787
- }, null), vue.createVNode("div", {
11930
+ "width": canvasWidth.value,
11931
+ "height": canvasHeight.value
11932
+ }, null), props.color && vue.createVNode("div", {
11788
11933
  "class": ['v-color-picker-canvas__dot', {
11789
11934
  'v-color-picker-canvas__dot--disabled': props.disabled
11790
11935
  }],
@@ -11817,10 +11962,7 @@
11817
11962
  hsva = color;
11818
11963
  }
11819
11964
  }
11820
- return hsva != null ? {
11821
- ...hsva,
11822
- a: hsva.a ?? 1
11823
- } : null;
11965
+ return hsva;
11824
11966
  }
11825
11967
  function stripAlpha(color, stripAlpha) {
11826
11968
  if (stripAlpha) {
@@ -11840,7 +11982,7 @@
11840
11982
  if (typeof input === 'object') {
11841
11983
  let converted;
11842
11984
  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;
11843
- return stripAlpha(converted, !has(input, ['a']));
11985
+ return stripAlpha(converted, !has(input, ['a']) && color.a === 1);
11844
11986
  }
11845
11987
  return color;
11846
11988
  }
@@ -12031,7 +12173,7 @@
12031
12173
  const inputs = vue.computed(() => {
12032
12174
  const mode = enabledModes.value.find(m => m.name === props.mode);
12033
12175
  if (!mode) return [];
12034
- const color = props.color ? mode.to(props.color) : {};
12176
+ const color = props.color ? mode.to(props.color) : null;
12035
12177
  return mode.inputs?.map(_ref3 => {
12036
12178
  let {
12037
12179
  getValue,
@@ -12042,11 +12184,11 @@
12042
12184
  ...mode.inputProps,
12043
12185
  ...inputProps,
12044
12186
  disabled: props.disabled,
12045
- value: getValue(color),
12187
+ value: color && getValue(color),
12046
12188
  onChange: e => {
12047
12189
  const target = e.target;
12048
12190
  if (!target) return;
12049
- emit('update:color', mode.from(getColor(color, target.value)));
12191
+ emit('update:color', mode.from(getColor(color ?? nullColor, target.value)));
12050
12192
  }
12051
12193
  };
12052
12194
  });
@@ -12157,10 +12299,7 @@
12157
12299
  const min = vue.computed(() => parseFloat(props.min));
12158
12300
  const max = vue.computed(() => parseFloat(props.max));
12159
12301
  const step = vue.computed(() => props.step > 0 ? parseFloat(props.step) : 0);
12160
- const decimals = vue.computed(() => {
12161
- const trimmedStep = step.value.toString().trim();
12162
- return trimmedStep.includes('.') ? trimmedStep.length - trimmedStep.indexOf('.') - 1 : 0;
12163
- });
12302
+ const decimals = vue.computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
12164
12303
  const thumbSize = vue.computed(() => parseInt(props.thumbSize, 10));
12165
12304
  const tickSize = vue.computed(() => parseInt(props.tickSize, 10));
12166
12305
  const trackSize = vue.computed(() => parseInt(props.trackSize, 10));
@@ -12259,7 +12398,9 @@
12259
12398
  const percentage = (val - min.value) / (max.value - min.value) * 100;
12260
12399
  return clamp(isNaN(percentage) ? 0 : percentage, 0, 100);
12261
12400
  };
12401
+ const showTicks = vue.toRef(props, 'showTicks');
12262
12402
  const parsedTicks = vue.computed(() => {
12403
+ if (!showTicks.value) return [];
12263
12404
  if (!props.ticks) {
12264
12405
  return numTicks.value !== Infinity ? createRange(numTicks.value + 1).map(t => {
12265
12406
  const value = min.value + t * step.value;
@@ -12308,7 +12449,7 @@
12308
12449
  readonly: vue.toRef(props, 'readonly'),
12309
12450
  rounded: vue.toRef(props, 'rounded'),
12310
12451
  roundValue,
12311
- showTicks: vue.toRef(props, 'showTicks'),
12452
+ showTicks,
12312
12453
  startOffset,
12313
12454
  step,
12314
12455
  thumbSize,
@@ -12530,6 +12671,7 @@
12530
12671
  };
12531
12672
  });
12532
12673
  const computedTicks = vue.computed(() => {
12674
+ if (!showTicks.value) return [];
12533
12675
  const ticks = vertical.value ? parsedTicks.value.slice().reverse() : parsedTicks.value;
12534
12676
  return ticks.map((tick, index) => {
12535
12677
  const directionProperty = vertical.value ? 'bottom' : 'margin-inline-start';
@@ -12745,12 +12887,12 @@
12745
12887
  "hideDetails": true
12746
12888
  }, null), !props.hideAlpha && vue.createVNode(VSlider, {
12747
12889
  "class": "v-color-picker-preview__track v-color-picker-preview__alpha",
12748
- "modelValue": props.color?.a,
12890
+ "modelValue": props.color?.a ?? 1,
12749
12891
  "onUpdate:modelValue": a => emit('update:color', {
12750
12892
  ...(props.color ?? nullColor),
12751
12893
  a
12752
12894
  }),
12753
- "step": 0,
12895
+ "step": 1 / 256,
12754
12896
  "min": 0,
12755
12897
  "max": 1,
12756
12898
  "disabled": props.disabled,
@@ -13135,18 +13277,21 @@
13135
13277
  }
13136
13278
  });
13137
13279
 
13280
+ const makeVSheetProps = propsFactory({
13281
+ color: String,
13282
+ ...makeBorderProps(),
13283
+ ...makeDimensionProps(),
13284
+ ...makeElevationProps(),
13285
+ ...makeLocationProps(),
13286
+ ...makePositionProps(),
13287
+ ...makeRoundedProps(),
13288
+ ...makeTagProps(),
13289
+ ...makeThemeProps()
13290
+ }, 'v-sheet');
13138
13291
  const VSheet = genericComponent()({
13139
13292
  name: 'VSheet',
13140
13293
  props: {
13141
- color: String,
13142
- ...makeBorderProps(),
13143
- ...makeDimensionProps(),
13144
- ...makeElevationProps(),
13145
- ...makeLocationProps(),
13146
- ...makePositionProps(),
13147
- ...makeRoundedProps(),
13148
- ...makeTagProps(),
13149
- ...makeThemeProps()
13294
+ ...makeVSheetProps()
13150
13295
  },
13151
13296
  setup(props, _ref) {
13152
13297
  let {
@@ -13177,10 +13322,11 @@
13177
13322
  const {
13178
13323
  roundedClasses
13179
13324
  } = useRounded(props);
13180
- return () => vue.createVNode(props.tag, {
13325
+ useRender(() => vue.createVNode(props.tag, {
13181
13326
  "class": ['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value],
13182
13327
  "style": [backgroundColorStyles.value, dimensionStyles.value, locationStyles.value]
13183
- }, slots);
13328
+ }, slots));
13329
+ return {};
13184
13330
  }
13185
13331
  });
13186
13332
 
@@ -13257,6 +13403,13 @@
13257
13403
  vue.onMounted(() => {
13258
13404
  if (!props.modes.includes(mode.value)) mode.value = props.modes[0];
13259
13405
  });
13406
+ provideDefaults({
13407
+ VSlider: {
13408
+ color: undefined,
13409
+ trackColor: undefined,
13410
+ trackFillColor: undefined
13411
+ }
13412
+ });
13260
13413
  useRender(() => vue.createVNode(VSheet, {
13261
13414
  "rounded": props.rounded,
13262
13415
  "elevation": props.elevation,
@@ -13357,7 +13510,15 @@
13357
13510
  const vTextFieldRef = vue.ref();
13358
13511
  const isFocused = vue.ref(false);
13359
13512
  const isPristine = vue.ref(true);
13360
- const menu = useProxiedModel(props, 'menu');
13513
+ const vMenuRef = vue.ref();
13514
+ const _menu = useProxiedModel(props, 'menu');
13515
+ const menu = vue.computed({
13516
+ get: () => _menu.value,
13517
+ set: v => {
13518
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
13519
+ _menu.value = v;
13520
+ }
13521
+ });
13361
13522
  const selectionIndex = vue.ref(-1);
13362
13523
  const color = vue.computed(() => vTextFieldRef.value?.color);
13363
13524
  const {
@@ -13540,7 +13701,7 @@
13540
13701
  useRender(() => {
13541
13702
  const hasChips = !!(props.chips || slots.chip);
13542
13703
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
13543
- const [textFieldProps] = filterVTextFieldProps(props);
13704
+ const [textFieldProps] = VTextField.filterProps(props);
13544
13705
  return vue.createVNode(VTextField, vue.mergeProps({
13545
13706
  "ref": vTextFieldRef
13546
13707
  }, textFieldProps, {
@@ -13566,6 +13727,7 @@
13566
13727
  }), {
13567
13728
  ...slots,
13568
13729
  default: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(VMenu, vue.mergeProps({
13730
+ "ref": vMenuRef,
13569
13731
  "modelValue": menu.value,
13570
13732
  "onUpdate:modelValue": $event => menu.value = $event,
13571
13733
  "activator": "parent",
@@ -13627,7 +13789,13 @@
13627
13789
  "key": item.value,
13628
13790
  "class": ['v-combobox__selection', index === selectionIndex.value && ['v-combobox__selection--selected', textColorClasses.value]],
13629
13791
  "style": index === selectionIndex.value ? textColorStyles.value : {}
13630
- }, [hasChips ? vue.createVNode(VDefaultsProvider, {
13792
+ }, [hasChips ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
13793
+ "key": "chip",
13794
+ "closable": props.closableChips,
13795
+ "size": "small",
13796
+ "text": item.title
13797
+ }, slotProps), null) : vue.createVNode(VDefaultsProvider, {
13798
+ "key": "chip-defaults",
13631
13799
  "defaults": {
13632
13800
  VChip: {
13633
13801
  closable: props.closableChips,
@@ -13636,15 +13804,15 @@
13636
13804
  }
13637
13805
  }
13638
13806
  }, {
13639
- default: () => [slots.chip ? slots.chip({
13807
+ default: () => [slots.chip?.({
13640
13808
  item,
13641
13809
  index,
13642
13810
  props: slotProps
13643
- }) : vue.createVNode(VChip, slotProps, null)]
13644
- }) : slots.selection ? slots.selection({
13811
+ })]
13812
+ }) : slots.selection?.({
13645
13813
  item,
13646
13814
  index
13647
- }) : vue.createVNode("span", {
13815
+ }) ?? vue.createVNode("span", {
13648
13816
  "class": "v-combobox__selection-text"
13649
13817
  }, [item.title, props.multiple && index < selections.value.length - 1 && vue.createVNode("span", {
13650
13818
  "class": "v-combobox__selection-comma"
@@ -13741,7 +13909,7 @@
13741
13909
  'aria-expanded': String(isActive.value)
13742
13910
  }, props.activatorProps));
13743
13911
  useRender(() => {
13744
- const [overlayProps] = filterVOverlayProps(props);
13912
+ const [overlayProps] = VOverlay.filterProps(props);
13745
13913
  return vue.createVNode(VOverlay, vue.mergeProps({
13746
13914
  "ref": overlay,
13747
13915
  "class": ['v-dialog', {
@@ -14145,6 +14313,7 @@
14145
14313
  "id": id.value,
14146
14314
  "active": isDirty.value || isFocused.value,
14147
14315
  "dirty": isDirty.value,
14316
+ "disabled": isDisabled.value,
14148
14317
  "focused": isFocused.value,
14149
14318
  "error": isValid.value === false
14150
14319
  }), {
@@ -14344,10 +14513,8 @@
14344
14513
 
14345
14514
  // Types
14346
14515
 
14347
- const breakpoints$1 = ['sm', 'md', 'lg', 'xl', 'xxl']; // no xs
14348
-
14349
14516
  const breakpointProps = (() => {
14350
- return breakpoints$1.reduce((props, val) => {
14517
+ return breakpoints.reduce((props, val) => {
14351
14518
  props[val] = {
14352
14519
  type: [Boolean, String, Number],
14353
14520
  default: false
@@ -14356,8 +14523,9 @@
14356
14523
  }, {});
14357
14524
  })();
14358
14525
  const offsetProps = (() => {
14359
- return breakpoints$1.reduce((props, val) => {
14360
- props['offset' + vue.capitalize(val)] = {
14526
+ return breakpoints.reduce((props, val) => {
14527
+ const offsetKey = 'offset' + vue.capitalize(val);
14528
+ props[offsetKey] = {
14361
14529
  type: [String, Number],
14362
14530
  default: null
14363
14531
  };
@@ -14365,8 +14533,9 @@
14365
14533
  }, {});
14366
14534
  })();
14367
14535
  const orderProps = (() => {
14368
- return breakpoints$1.reduce((props, val) => {
14369
- props['order' + vue.capitalize(val)] = {
14536
+ return breakpoints.reduce((props, val) => {
14537
+ const orderKey = 'order' + vue.capitalize(val);
14538
+ props[orderKey] = {
14370
14539
  type: [String, Number],
14371
14540
  default: null
14372
14541
  };
@@ -14464,13 +14633,12 @@
14464
14633
 
14465
14634
  // Types
14466
14635
 
14467
- const breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl']; // no xs
14468
-
14469
14636
  const ALIGNMENT = ['start', 'end', 'center'];
14470
14637
  const SPACE = ['space-between', 'space-around', 'space-evenly'];
14471
14638
  function makeRowProps(prefix, def) {
14472
14639
  return breakpoints.reduce((props, val) => {
14473
- props[prefix + vue.capitalize(val)] = def();
14640
+ const prefixKey = prefix + vue.capitalize(val);
14641
+ props[prefixKey] = def();
14474
14642
  return props;
14475
14643
  }, {});
14476
14644
  }
@@ -14800,7 +14968,10 @@
14800
14968
  }, {
14801
14969
  default: () => [slots.default?.()]
14802
14970
  })]
14803
- }), [[vue.resolveDirective("intersect"), onIntersect, props.options]]));
14971
+ }), [[vue.resolveDirective("intersect"), {
14972
+ handler: onIntersect,
14973
+ options: props.options
14974
+ }, null]]));
14804
14975
  return {};
14805
14976
  }
14806
14977
  });
@@ -15777,9 +15948,9 @@
15777
15948
  frame = requestAnimationFrame(() => {
15778
15949
  const el = (root.value?.$el).querySelector('.v-img__img');
15779
15950
  if (!el) return;
15780
- const scrollHeight = scrollParent.clientHeight ?? document.documentElement.clientHeight;
15781
- const scrollPos = scrollParent.scrollTop ?? window.scrollY;
15782
- const top = intersectionRef.value.offsetTop;
15951
+ const scrollHeight = scrollParent instanceof Document ? document.documentElement.clientHeight : scrollParent.clientHeight;
15952
+ const scrollPos = scrollParent instanceof Document ? window.scrollY : scrollParent.scrollTop;
15953
+ const top = intersectionRef.value.getBoundingClientRect().top + scrollPos;
15783
15954
  const height = contentRect.value.height;
15784
15955
  const center = top + (height - scrollHeight) / 2;
15785
15956
  const translate = floor((scrollPos - center) * scale.value);
@@ -15861,10 +16032,7 @@
15861
16032
  useRender(() => {
15862
16033
  const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
15863
16034
  const [inputProps, _1] = filterInputProps(props);
15864
- const [controlProps, _2] = filterControlProps({
15865
- ...props,
15866
- multiple: false
15867
- });
16035
+ const [controlProps, _2] = VSelectionControl.filterProps(props);
15868
16036
  const label = slots.label ? slots.label({
15869
16037
  label: props.label,
15870
16038
  props: {
@@ -15899,7 +16067,8 @@
15899
16067
  "type": props.type,
15900
16068
  "disabled": isDisabled.value,
15901
16069
  "readonly": isReadonly.value,
15902
- "aria-labelledby": label ? id.value : undefined
16070
+ "aria-labelledby": label ? id.value : undefined,
16071
+ "multiple": false
15903
16072
  }, controlAttrs, {
15904
16073
  "modelValue": model.value,
15905
16074
  "onUpdate:modelValue": $event => model.value = $event
@@ -16164,9 +16333,6 @@
16164
16333
  const range = vue.computed(() => createRange(Number(props.length), 1));
16165
16334
  const increments = vue.computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]));
16166
16335
  const hoverIndex = vue.ref(-1);
16167
- const focusIndex = vue.ref(-1);
16168
- const firstRef = vue.ref();
16169
- let isClicking = false;
16170
16336
  const itemState = vue.computed(() => increments.value.map(value => {
16171
16337
  const isHovering = props.hover && hoverIndex.value > -1;
16172
16338
  const isFilled = normalizedValue.value >= value;
@@ -16189,16 +16355,6 @@
16189
16355
  function onMouseleave() {
16190
16356
  hoverIndex.value = -1;
16191
16357
  }
16192
- function onFocus() {
16193
- if (value === 0 && normalizedValue.value === 0) {
16194
- firstRef.value?.focus();
16195
- } else {
16196
- focusIndex.value = value;
16197
- }
16198
- }
16199
- function onBlur() {
16200
- if (!isClicking) focusIndex.value = -1;
16201
- }
16202
16358
  function onClick() {
16203
16359
  if (props.disabled || props.readonly) return;
16204
16360
  rating.value = normalizedValue.value === value && props.clearable ? 0 : value;
@@ -16206,17 +16362,9 @@
16206
16362
  return {
16207
16363
  onMouseenter: props.hover ? onMouseenter : undefined,
16208
16364
  onMouseleave: props.hover ? onMouseleave : undefined,
16209
- onFocus,
16210
- onBlur,
16211
16365
  onClick
16212
16366
  };
16213
16367
  }));
16214
- function onMousedown() {
16215
- isClicking = true;
16216
- }
16217
- function onMouseup() {
16218
- isClicking = false;
16219
- }
16220
16368
  const name = vue.computed(() => props.name ?? `v-rating-${getUid()}`);
16221
16369
  function VRatingItem(_ref2) {
16222
16370
  let {
@@ -16227,8 +16375,6 @@
16227
16375
  const {
16228
16376
  onMouseenter,
16229
16377
  onMouseleave,
16230
- onFocus,
16231
- onBlur,
16232
16378
  onClick
16233
16379
  } = eventState.value[index + 1];
16234
16380
  const id = `${name.value}-${String(value).replace('.', '-')}`;
@@ -16239,7 +16385,6 @@
16239
16385
  icon: itemState.value[index]?.icon,
16240
16386
  ripple: props.ripple,
16241
16387
  size: props.size,
16242
- tag: 'span',
16243
16388
  variant: 'plain'
16244
16389
  };
16245
16390
  return vue.createVNode(vue.Fragment, null, [vue.createVNode("label", {
@@ -16248,17 +16393,17 @@
16248
16393
  'v-rating__item--half': props.halfIncrements && value % 1 > 0,
16249
16394
  'v-rating__item--full': props.halfIncrements && value % 1 === 0
16250
16395
  },
16251
- "onMousedown": onMousedown,
16252
- "onMouseup": onMouseup,
16253
16396
  "onMouseenter": onMouseenter,
16254
- "onMouseleave": onMouseleave
16397
+ "onMouseleave": onMouseleave,
16398
+ "onClick": onClick
16255
16399
  }, [vue.createVNode("span", {
16256
16400
  "class": "v-rating__hidden"
16257
16401
  }, [t(props.itemAriaLabel, value, props.length)]), !showStar ? undefined : slots.item ? slots.item({
16258
16402
  ...itemState.value[index],
16259
16403
  props: btnProps,
16260
16404
  value,
16261
- index
16405
+ index,
16406
+ rating: normalizedValue.value
16262
16407
  }) : vue.createVNode(VBtn, btnProps, null)]), vue.createVNode("input", {
16263
16408
  "class": "v-rating__hidden",
16264
16409
  "name": name.value,
@@ -16266,10 +16411,7 @@
16266
16411
  "type": "radio",
16267
16412
  "value": value,
16268
16413
  "checked": normalizedValue.value === value,
16269
- "onClick": onClick,
16270
- "onFocus": onFocus,
16271
- "onBlur": onBlur,
16272
- "ref": index === 0 ? firstRef : undefined,
16414
+ "tabindex": -1,
16273
16415
  "readonly": props.readonly,
16274
16416
  "disabled": props.disabled
16275
16417
  }, null)]);
@@ -16298,9 +16440,7 @@
16298
16440
  index: i,
16299
16441
  label: props.itemLabels?.[i]
16300
16442
  }) : undefined, vue.createVNode("div", {
16301
- "class": ['v-rating__item', {
16302
- 'v-rating__item--focused': Math.ceil(focusIndex.value) === value
16303
- }]
16443
+ "class": "v-rating__item"
16304
16444
  }, [props.halfIncrements ? vue.createVNode(vue.Fragment, null, [vue.createVNode(VRatingItem, {
16305
16445
  "value": value - 0.5,
16306
16446
  "index": i * 2
@@ -16769,7 +16909,7 @@
16769
16909
  window.clearTimeout(activeTimeout);
16770
16910
  }
16771
16911
  useRender(() => {
16772
- const [overlayProps] = filterVOverlayProps(props);
16912
+ const [overlayProps] = VOverlay.filterProps(props);
16773
16913
  return vue.createVNode(VOverlay, vue.mergeProps({
16774
16914
  "ref": overlay,
16775
16915
  "class": ['v-snackbar', {
@@ -16781,19 +16921,18 @@
16781
16921
  "modelValue": isActive.value,
16782
16922
  "onUpdate:modelValue": $event => isActive.value = $event,
16783
16923
  "contentProps": vue.mergeProps({
16784
- style: locationStyles.value
16924
+ class: ['v-snackbar__wrapper', themeClasses.value, colorClasses.value, roundedClasses.value, variantClasses.value],
16925
+ style: [locationStyles.value, colorStyles.value],
16926
+ onPointerenter,
16927
+ onPointerleave: startTimeout
16785
16928
  }, overlayProps.contentProps),
16786
16929
  "persistent": true,
16787
16930
  "noClickAnimation": true,
16788
16931
  "scrim": false,
16789
- "scrollStrategy": "none"
16932
+ "scrollStrategy": "none",
16933
+ "_disableGlobalStack": true
16790
16934
  }, scopeId), {
16791
- default: () => [vue.createVNode("div", {
16792
- "class": ['v-snackbar__wrapper', themeClasses.value, colorClasses.value, roundedClasses.value, variantClasses.value],
16793
- "style": [colorStyles.value],
16794
- "onPointerenter": onPointerenter,
16795
- "onPointerleave": startTimeout
16796
- }, [genOverlays(false, 'v-snackbar'), slots.default && vue.createVNode("div", {
16935
+ default: () => [genOverlays(false, 'v-snackbar'), slots.default && vue.createVNode("div", {
16797
16936
  "class": "v-snackbar__content",
16798
16937
  "role": "status",
16799
16938
  "aria-live": "polite"
@@ -16808,7 +16947,7 @@
16808
16947
  default: () => [vue.createVNode("div", {
16809
16948
  "class": "v-snackbar__actions"
16810
16949
  }, [slots.actions()])]
16811
- })])],
16950
+ })],
16812
16951
  activator: slots.activator
16813
16952
  });
16814
16953
  });
@@ -16865,7 +17004,7 @@
16865
17004
  useRender(() => {
16866
17005
  const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
16867
17006
  const [inputProps, _1] = filterInputProps(props);
16868
- const [controlProps, _2] = filterControlProps(props);
17007
+ const [controlProps, _2] = VSelectionControl.filterProps(props);
16869
17008
  const control = vue.ref();
16870
17009
  function onClick() {
16871
17010
  control.value?.input?.click();
@@ -16967,6 +17106,9 @@
16967
17106
  const {
16968
17107
  roundedClasses
16969
17108
  } = useRounded(props);
17109
+ const {
17110
+ ssrBootStyles
17111
+ } = useSsrBoot();
16970
17112
  const height = vue.computed(() => props.height ?? (props.window ? 32 : 24));
16971
17113
  const {
16972
17114
  layoutItemStyles
@@ -16983,7 +17125,7 @@
16983
17125
  "class": ['v-system-bar', {
16984
17126
  'v-system-bar--window': props.window
16985
17127
  }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value],
16986
- "style": [backgroundColorStyles.value, layoutItemStyles.value]
17128
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value]
16987
17129
  }, slots));
16988
17130
  return {};
16989
17131
  }
@@ -16995,28 +17137,17 @@
16995
17137
  name: 'VTab',
16996
17138
  props: {
16997
17139
  fixed: Boolean,
16998
- icon: [Boolean, String, Function, Object],
16999
- prependIcon: IconValue,
17000
- appendIcon: IconValue,
17001
- stacked: Boolean,
17002
17140
  title: String,
17003
- ripple: {
17004
- type: Boolean,
17005
- default: true
17006
- },
17007
- color: String,
17008
17141
  sliderColor: String,
17009
17142
  hideSlider: Boolean,
17010
17143
  direction: {
17011
17144
  type: String,
17012
17145
  default: 'horizontal'
17013
17146
  },
17014
- ...makeTagProps(),
17015
- ...makeRouterProps(),
17016
- ...makeGroupItemProps({
17017
- selectedClass: 'v-tab--selected'
17018
- }),
17019
- ...makeThemeProps()
17147
+ ...omit(makeVBtnProps({
17148
+ selectedClass: 'v-tab--selected',
17149
+ variant: 'text'
17150
+ }), ['active', 'block', 'flat', 'location', 'position', 'symbol'])
17020
17151
  },
17021
17152
  setup(props, _ref) {
17022
17153
  let {
@@ -17066,7 +17197,7 @@
17066
17197
  }
17067
17198
  }
17068
17199
  useRender(() => {
17069
- const [btnProps] = pick(props, ['href', 'to', 'replace', 'icon', 'stacked', 'prependIcon', 'appendIcon', 'ripple', 'theme', 'disabled', 'selectedClass', 'value', 'color']);
17200
+ const [btnProps] = VBtn.filterProps(props);
17070
17201
  return vue.createVNode(VBtn, vue.mergeProps({
17071
17202
  "_as": "VTab",
17072
17203
  "symbol": VTabsSymbol,
@@ -17078,7 +17209,6 @@
17078
17209
  "active": false,
17079
17210
  "block": props.fixed,
17080
17211
  "maxWidth": props.fixed ? 300 : undefined,
17081
- "variant": "text",
17082
17212
  "rounded": 0
17083
17213
  }, btnProps, attrs, {
17084
17214
  "onGroup:selected": updateSlider
@@ -17323,7 +17453,13 @@
17323
17453
  });
17324
17454
  }
17325
17455
  function onInput(e) {
17326
- model.value = e.target.value;
17456
+ const el = e.target;
17457
+ const caretPosition = [el.selectionStart, el.selectionEnd];
17458
+ model.value = el.value;
17459
+ vue.nextTick(() => {
17460
+ el.selectionStart = caretPosition[0];
17461
+ el.selectionEnd = caretPosition[1];
17462
+ });
17327
17463
  }
17328
17464
  const sizerRef = vue.ref();
17329
17465
  function calculateInputHeight() {
@@ -17407,6 +17543,7 @@
17407
17543
  }, fieldProps, {
17408
17544
  "active": isActive.value || isDirty.value,
17409
17545
  "dirty": isDirty.value || props.dirty,
17546
+ "disabled": isDisabled.value,
17410
17547
  "focused": isFocused.value,
17411
17548
  "error": isValid.value === false
17412
17549
  }), {
@@ -17609,13 +17746,6 @@
17609
17746
  backgroundColorClasses: lineColorClasses,
17610
17747
  backgroundColorStyles: lineColorStyles
17611
17748
  } = useBackgroundColor(vue.toRef(props, 'lineColor'));
17612
- provideDefaults({
17613
- VIcon: {
17614
- color: vue.toRef(props, 'iconColor'),
17615
- icon: vue.toRef(props, 'icon'),
17616
- size: vue.toRef(props, 'size')
17617
- }
17618
- });
17619
17749
  useRender(() => vue.createVNode("div", {
17620
17750
  "class": ['v-timeline-divider', {
17621
17751
  'v-timeline-divider--fill-dot': props.fillDot
@@ -17630,7 +17760,22 @@
17630
17760
  }, [vue.createVNode("div", {
17631
17761
  "class": ['v-timeline-divider__inner-dot', backgroundColorClasses.value, roundedClasses.value],
17632
17762
  "style": backgroundColorStyles.value
17633
- }, [slots.default?.() ?? (props.icon ? vue.createVNode(VIcon, null, null) : undefined)])]), vue.createVNode("div", {
17763
+ }, [!slots.default ? vue.createVNode(VIcon, {
17764
+ "key": "icon",
17765
+ "color": props.iconColor,
17766
+ "icon": props.icon,
17767
+ "size": props.size
17768
+ }, null) : vue.createVNode(VDefaultsProvider, {
17769
+ "key": "icon-defaults",
17770
+ "disabled": !props.icon,
17771
+ "defaults": {
17772
+ VIcon: {
17773
+ color: props.iconColor,
17774
+ icon: props.icon,
17775
+ size: props.size
17776
+ }
17777
+ }
17778
+ }, slots.default)])]), vue.createVNode("div", {
17634
17779
  "class": ['v-timeline-divider__after', lineColorClasses.value],
17635
17780
  "style": lineColorStyles.value
17636
17781
  }, null)]));
@@ -17716,6 +17861,7 @@
17716
17861
  closeOnBack: false,
17717
17862
  location: 'end',
17718
17863
  locationStrategy: 'connected',
17864
+ eager: true,
17719
17865
  minWidth: 0,
17720
17866
  offset: 10,
17721
17867
  openOnClick: false,
@@ -17724,7 +17870,7 @@
17724
17870
  scrim: false,
17725
17871
  scrollStrategy: 'reposition',
17726
17872
  transition: false
17727
- }), ['absolute', 'persistent', 'eager'])
17873
+ }), ['absolute', 'persistent'])
17728
17874
  },
17729
17875
  emits: {
17730
17876
  'update:modelValue': value => true
@@ -17754,7 +17900,7 @@
17754
17900
  'aria-describedby': id.value
17755
17901
  }, props.activatorProps));
17756
17902
  useRender(() => {
17757
- const [overlayProps] = filterVOverlayProps(props);
17903
+ const [overlayProps] = VOverlay.filterProps(props);
17758
17904
  return vue.createVNode(VOverlay, vue.mergeProps({
17759
17905
  "ref": overlay,
17760
17906
  "class": ['v-tooltip'],
@@ -17768,7 +17914,6 @@
17768
17914
  "origin": origin.value,
17769
17915
  "persistent": true,
17770
17916
  "role": "tooltip",
17771
- "eager": true,
17772
17917
  "activatorProps": activatorProps.value,
17773
17918
  "_disableGlobalStack": true
17774
17919
  }, scopeId), {
@@ -18001,7 +18146,7 @@
18001
18146
  }
18002
18147
  }, 'v-data-table-select');
18003
18148
  const VDataTableSelectionSymbol = Symbol.for('vuetify:data-table-selection');
18004
- function createSelection(props, allItems) {
18149
+ function provideSelection(props, allItems) {
18005
18150
  const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {
18006
18151
  return new Set(v);
18007
18152
  }, v => {
@@ -18061,13 +18206,28 @@
18061
18206
  const VDataTableSortSymbol = Symbol.for('vuetify:data-table-sort');
18062
18207
  function createSort(props) {
18063
18208
  const sortBy = useProxiedModel(props, 'sortBy');
18209
+ const mustSort = vue.toRef(props, 'mustSort');
18210
+ const multiSort = vue.toRef(props, 'multiSort');
18211
+ return {
18212
+ sortBy,
18213
+ mustSort,
18214
+ multiSort
18215
+ };
18216
+ }
18217
+ function provideSort(options) {
18218
+ const {
18219
+ sortBy,
18220
+ mustSort,
18221
+ multiSort,
18222
+ page
18223
+ } = options;
18064
18224
  const toggleSort = key => {
18065
18225
  let newSortBy = sortBy.value.map(x => ({
18066
18226
  ...x
18067
18227
  })) ?? [];
18068
18228
  const item = newSortBy.find(x => x.key === key);
18069
18229
  if (!item) {
18070
- if (props.multiSort) newSortBy = [...newSortBy, {
18230
+ if (multiSort.value) newSortBy = [...newSortBy, {
18071
18231
  key,
18072
18232
  order: 'asc'
18073
18233
  }];else newSortBy = [{
@@ -18075,7 +18235,7 @@
18075
18235
  order: 'asc'
18076
18236
  }];
18077
18237
  } else if (item.order === 'desc') {
18078
- if (props.mustSort) {
18238
+ if (mustSort.value) {
18079
18239
  item.order = 'asc';
18080
18240
  } else {
18081
18241
  newSortBy = newSortBy.filter(x => x.key !== key);
@@ -18084,6 +18244,7 @@
18084
18244
  item.order = 'desc';
18085
18245
  }
18086
18246
  sortBy.value = newSortBy;
18247
+ if (page) page.value = 1;
18087
18248
  };
18088
18249
  const data = {
18089
18250
  sortBy,
@@ -18286,9 +18447,6 @@
18286
18447
  });
18287
18448
 
18288
18449
  // Utilities
18289
-
18290
- // Types
18291
-
18292
18450
  const makeDataTableGroupProps = propsFactory({
18293
18451
  groupBy: {
18294
18452
  type: Array,
@@ -18296,7 +18454,17 @@
18296
18454
  }
18297
18455
  }, 'data-table-group');
18298
18456
  const VDataTableGroupSymbol = Symbol.for('vuetify:data-table-group');
18299
- function createGroupBy(props, groupBy, sortBy) {
18457
+ function createGroupBy(props) {
18458
+ const groupBy = useProxiedModel(props, 'groupBy');
18459
+ return {
18460
+ groupBy
18461
+ };
18462
+ }
18463
+ function provideGroupBy(options) {
18464
+ const {
18465
+ groupBy,
18466
+ sortBy
18467
+ } = options;
18300
18468
  const opened = vue.ref(new Set());
18301
18469
  const sortByWithGroups = vue.computed(() => {
18302
18470
  return groupBy.value.map(val => ({
@@ -18506,7 +18674,7 @@
18506
18674
  }
18507
18675
  }, 'v-data-table-expand');
18508
18676
  const VDataTableExpandedKey = Symbol.for('vuetify:datatable:expanded');
18509
- function createExpanded(props) {
18677
+ function provideExpanded(props) {
18510
18678
  const expandOnClick = vue.toRef(props, 'expandOnClick');
18511
18679
  const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {
18512
18680
  return new Set(v);
@@ -18549,7 +18717,9 @@
18549
18717
  const VDataTableRow = defineComponent({
18550
18718
  name: 'VDataTableRow',
18551
18719
  props: {
18552
- item: Object
18720
+ index: Number,
18721
+ item: Object,
18722
+ onClick: Function
18553
18723
  },
18554
18724
  setup(props, _ref) {
18555
18725
  let {
@@ -18567,7 +18737,10 @@
18567
18737
  columns
18568
18738
  } = useHeaders();
18569
18739
  useRender(() => vue.createVNode("tr", {
18570
- "class": ['v-data-table__tr']
18740
+ "class": ['v-data-table__tr', {
18741
+ 'v-data-table__tr--clickable': !!props.onClick
18742
+ }],
18743
+ "onClick": props.onClick
18571
18744
  }, [!columns.value.length && vue.createVNode(VDataTableColumn, {
18572
18745
  "key": "no-data"
18573
18746
  }, slots), props.item && columns.value.map((column, i) => vue.createVNode(VDataTableColumn, {
@@ -18582,6 +18755,7 @@
18582
18755
  const item = props.item;
18583
18756
  const slotName = `item.${column.key}`;
18584
18757
  const slotProps = {
18758
+ index: props.index,
18585
18759
  item: props.item,
18586
18760
  columns: columns.value,
18587
18761
  isSelected,
@@ -18685,7 +18859,7 @@
18685
18859
  "item": item
18686
18860
  }, slots);
18687
18861
  }
18688
- return vue.createVNode(vue.Fragment, null, [slots.item ? slots.item({
18862
+ const slotProps = {
18689
18863
  index,
18690
18864
  item,
18691
18865
  columns: columns.value,
@@ -18693,21 +18867,20 @@
18693
18867
  toggleExpand,
18694
18868
  isSelected,
18695
18869
  toggleSelect
18696
- }) : vue.createVNode(VDataTableRow, {
18870
+ };
18871
+ return vue.createVNode(vue.Fragment, null, [slots.item ? slots.item(slotProps) : vue.createVNode(VDataTableRow, {
18697
18872
  "key": `item_${item.value}`,
18698
18873
  "onClick": event => {
18699
18874
  if (expandOnClick.value) {
18700
- toggleExpand(item.value);
18875
+ toggleExpand(item);
18701
18876
  }
18702
18877
  emit('click:row', event, {
18703
18878
  item
18704
18879
  });
18705
18880
  },
18881
+ "index": index,
18706
18882
  "item": item
18707
- }, slots), isExpanded(item) && slots['expanded-row']?.({
18708
- item,
18709
- columns: columns.value
18710
- })]);
18883
+ }, slots), isExpanded(item) && slots['expanded-row']?.(slotProps)]);
18711
18884
  })]));
18712
18885
  return {};
18713
18886
  }
@@ -18728,10 +18901,20 @@
18728
18901
  }
18729
18902
  }, 'v-data-table-paginate');
18730
18903
  const VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');
18731
- function createPagination(props, items) {
18904
+ function createPagination(props) {
18732
18905
  const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1));
18733
18906
  const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10));
18734
- const itemsLength = vue.computed(() => +(props.itemsLength ?? items.value.length));
18907
+ return {
18908
+ page,
18909
+ itemsPerPage
18910
+ };
18911
+ }
18912
+ function providePagination(options) {
18913
+ const {
18914
+ page,
18915
+ itemsPerPage,
18916
+ itemsLength
18917
+ } = options;
18735
18918
  const startIndex = vue.computed(() => {
18736
18919
  if (itemsPerPage.value === -1) return 0;
18737
18920
  return itemsPerPage.value * (page.value - 1);
@@ -18744,13 +18927,18 @@
18744
18927
  if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;
18745
18928
  return Math.ceil(itemsLength.value / itemsPerPage.value);
18746
18929
  });
18930
+ function setItemsPerPage(value) {
18931
+ itemsPerPage.value = value;
18932
+ page.value = 1;
18933
+ }
18747
18934
  const data = {
18748
18935
  page,
18749
18936
  itemsPerPage,
18937
+ itemsLength,
18750
18938
  startIndex,
18751
18939
  stopIndex,
18752
18940
  pageCount,
18753
- itemsLength
18941
+ setItemsPerPage
18754
18942
  };
18755
18943
  vue.provide(VDataTablePaginationSymbol, data);
18756
18944
  return data;
@@ -18760,7 +18948,13 @@
18760
18948
  if (!data) throw new Error('Missing pagination!');
18761
18949
  return data;
18762
18950
  }
18763
- function usePaginatedItems(items, startIndex, stopIndex, itemsPerPage) {
18951
+ function usePaginatedItems(options) {
18952
+ const {
18953
+ items,
18954
+ startIndex,
18955
+ stopIndex,
18956
+ itemsPerPage
18957
+ } = options;
18764
18958
  const paginatedItems = vue.computed(() => {
18765
18959
  if (itemsPerPage.value <= 0) return items.value;
18766
18960
  return items.value.slice(startIndex.value, stopIndex.value);
@@ -18849,7 +19043,8 @@
18849
19043
  startIndex,
18850
19044
  stopIndex,
18851
19045
  itemsLength,
18852
- itemsPerPage
19046
+ itemsPerPage,
19047
+ setItemsPerPage
18853
19048
  } = usePagination();
18854
19049
  const itemsPerPageOptions = vue.computed(() => props.itemsPerPageOptions.map(option => ({
18855
19050
  ...option,
@@ -18862,7 +19057,7 @@
18862
19057
  }, [vue.createVNode("span", null, [t(props.itemsPerPageText)]), vue.createVNode(VSelect, {
18863
19058
  "items": itemsPerPageOptions.value,
18864
19059
  "modelValue": itemsPerPage.value,
18865
- "onUpdate:modelValue": v => itemsPerPage.value = Number(v),
19060
+ "onUpdate:modelValue": v => setItemsPerPage(Number(v)),
18866
19061
  "density": "compact",
18867
19062
  "variant": "outlined",
18868
19063
  "hide-details": true
@@ -18940,7 +19135,8 @@
18940
19135
  page,
18941
19136
  itemsPerPage,
18942
19137
  sortBy,
18943
- groupBy
19138
+ groupBy,
19139
+ search
18944
19140
  } = _ref;
18945
19141
  const vm = getCurrentInstance('VDataTable');
18946
19142
  const options = vue.computed(() => ({
@@ -18950,15 +19146,8 @@
18950
19146
  groupBy: groupBy.value
18951
19147
  }));
18952
19148
 
18953
- // Reset page when sorting changes
18954
- vue.watch(sortBy, () => {
18955
- page.value = 1;
18956
- }, {
18957
- deep: true
18958
- });
18959
-
18960
- // Reset page when items-per-page changes
18961
- vue.watch(itemsPerPage, () => {
19149
+ // Reset page when searching
19150
+ vue.watch(() => search?.value, () => {
18962
19151
  page.value = 1;
18963
19152
  });
18964
19153
  let oldOptions = null;
@@ -19014,7 +19203,18 @@
19014
19203
  emit,
19015
19204
  slots
19016
19205
  } = _ref;
19017
- const groupBy = useProxiedModel(props, 'groupBy');
19206
+ const {
19207
+ groupBy
19208
+ } = createGroupBy(props);
19209
+ const {
19210
+ sortBy,
19211
+ multiSort,
19212
+ mustSort
19213
+ } = createSort(props);
19214
+ const {
19215
+ page,
19216
+ itemsPerPage
19217
+ } = createPagination(props);
19018
19218
  const {
19019
19219
  columns
19020
19220
  } = createHeaders(props, {
@@ -19026,42 +19226,58 @@
19026
19226
  items
19027
19227
  } = useDataTableItems(props, columns);
19028
19228
  const filterKeys = vue.computed(() => columns.value.map(c => 'columns.' + c.key));
19229
+ const search = vue.toRef(props, 'search');
19029
19230
  const {
19030
19231
  filteredItems
19031
- } = useFilter(props, items, vue.toRef(props, 'search'), {
19232
+ } = useFilter(props, items, search, {
19032
19233
  filterKeys
19033
19234
  });
19034
- const {
19035
- sortBy
19036
- } = createSort(props);
19235
+ provideSort({
19236
+ sortBy,
19237
+ multiSort,
19238
+ mustSort,
19239
+ page
19240
+ });
19037
19241
  const {
19038
19242
  sortByWithGroups,
19039
19243
  opened,
19040
19244
  extractRows
19041
- } = createGroupBy(props, groupBy, sortBy);
19245
+ } = provideGroupBy({
19246
+ groupBy,
19247
+ sortBy
19248
+ });
19042
19249
  const {
19043
19250
  sortedItems
19044
19251
  } = useSortedItems(filteredItems, sortByWithGroups, columns);
19045
19252
  const {
19046
19253
  flatItems
19047
19254
  } = useGroupedItems(sortedItems, groupBy, opened);
19255
+ const itemsLength = vue.computed(() => flatItems.value.length);
19048
19256
  const {
19049
- page,
19050
- itemsPerPage,
19051
19257
  startIndex,
19052
19258
  stopIndex
19053
- } = createPagination(props, flatItems);
19259
+ } = providePagination({
19260
+ page,
19261
+ itemsPerPage,
19262
+ itemsLength
19263
+ });
19054
19264
  const {
19055
19265
  paginatedItems
19056
- } = usePaginatedItems(flatItems, startIndex, stopIndex, itemsPerPage);
19266
+ } = usePaginatedItems({
19267
+ items: flatItems,
19268
+ startIndex,
19269
+ stopIndex,
19270
+ itemsPerPage
19271
+ });
19057
19272
  const paginatedItemsWithoutGroups = vue.computed(() => extractRows(paginatedItems.value));
19058
- createSelection(props, paginatedItemsWithoutGroups);
19059
- createExpanded(props);
19273
+ provideSelection(props, paginatedItemsWithoutGroups);
19274
+ provideExpanded(props);
19060
19275
  useOptions({
19061
19276
  page,
19062
19277
  itemsPerPage,
19063
19278
  sortBy,
19064
- groupBy
19279
+ groupBy,
19280
+ search
19065
19281
  });
19066
19282
  provideDefaults({
19067
19283
  VDataTableRows: {
@@ -19203,7 +19419,14 @@
19203
19419
  emit,
19204
19420
  slots
19205
19421
  } = _ref;
19206
- const groupBy = useProxiedModel(props, 'groupBy');
19422
+ const {
19423
+ groupBy
19424
+ } = createGroupBy(props);
19425
+ const {
19426
+ sortBy,
19427
+ multiSort,
19428
+ mustSort
19429
+ } = createSort(props);
19207
19430
  const {
19208
19431
  columns
19209
19432
  } = createHeaders(props, {
@@ -19215,19 +19438,25 @@
19215
19438
  items
19216
19439
  } = useDataTableItems(props, columns);
19217
19440
  const filterKeys = vue.computed(() => columns.value.map(c => 'columns.' + c.key));
19441
+ const search = vue.toRef(props, 'search');
19218
19442
  const {
19219
19443
  filteredItems
19220
- } = useFilter(props, items, vue.toRef(props, 'search'), {
19444
+ } = useFilter(props, items, search, {
19221
19445
  filterKeys
19222
19446
  });
19223
- const {
19224
- sortBy
19225
- } = createSort(props);
19447
+ provideSort({
19448
+ sortBy,
19449
+ multiSort,
19450
+ mustSort
19451
+ });
19226
19452
  const {
19227
19453
  sortByWithGroups,
19228
19454
  opened,
19229
19455
  extractRows
19230
- } = createGroupBy(props, groupBy, sortBy);
19456
+ } = provideGroupBy({
19457
+ groupBy,
19458
+ sortBy
19459
+ });
19231
19460
  const {
19232
19461
  sortedItems
19233
19462
  } = useSortedItems(filteredItems, sortByWithGroups, columns);
@@ -19235,8 +19464,8 @@
19235
19464
  flatItems
19236
19465
  } = useGroupedItems(sortedItems, groupBy, opened);
19237
19466
  const allRows = vue.computed(() => extractRows(flatItems.value));
19238
- createSelection(props, allRows);
19239
- createExpanded(props);
19467
+ provideSelection(props, allRows);
19468
+ provideExpanded(props);
19240
19469
  const {
19241
19470
  containerRef,
19242
19471
  paddingTop,
@@ -19253,7 +19482,8 @@
19253
19482
  sortBy,
19254
19483
  page: vue.ref(1),
19255
19484
  itemsPerPage: vue.ref(-1),
19256
- groupBy
19485
+ groupBy,
19486
+ search
19257
19487
  });
19258
19488
  provideDefaults({
19259
19489
  VDataTableRows: {
@@ -19322,7 +19552,10 @@
19322
19552
  type: String,
19323
19553
  default: '$vuetify.dataIterator.loadingText'
19324
19554
  },
19325
- itemsLength: [Number, String],
19555
+ itemsLength: {
19556
+ type: [Number, String],
19557
+ required: true
19558
+ },
19326
19559
  ...makeVDataTableProps(),
19327
19560
  ...makeDataTableExpandProps(),
19328
19561
  ...makeDataTableHeaderProps(),
@@ -19347,8 +19580,20 @@
19347
19580
  emit,
19348
19581
  slots
19349
19582
  } = _ref;
19350
- const groupBy = useProxiedModel(props, 'groupBy');
19351
- createExpanded(props);
19583
+ const {
19584
+ groupBy
19585
+ } = createGroupBy(props);
19586
+ const {
19587
+ sortBy,
19588
+ multiSort,
19589
+ mustSort
19590
+ } = createSort(props);
19591
+ const {
19592
+ page,
19593
+ itemsPerPage
19594
+ } = createPagination(props);
19595
+ const itemsLength = vue.computed(() => parseInt(props.itemsLength, 10));
19596
+ provideExpanded(props);
19352
19597
  const {
19353
19598
  columns
19354
19599
  } = createHeaders(props, {
@@ -19360,20 +19605,28 @@
19360
19605
  items
19361
19606
  } = useDataTableItems(props, columns);
19362
19607
  const {
19363
- sortBy,
19364
19608
  toggleSort
19365
- } = createSort(props);
19609
+ } = provideSort({
19610
+ sortBy,
19611
+ multiSort,
19612
+ mustSort,
19613
+ page
19614
+ });
19366
19615
  const {
19367
19616
  opened
19368
- } = createGroupBy(props, groupBy, sortBy);
19369
- const {
19617
+ } = provideGroupBy({
19618
+ groupBy,
19619
+ sortBy
19620
+ });
19621
+ providePagination({
19370
19622
  page,
19371
- itemsPerPage
19372
- } = createPagination(props, items);
19623
+ itemsPerPage,
19624
+ itemsLength
19625
+ });
19373
19626
  const {
19374
19627
  flatItems
19375
19628
  } = useGroupedItems(items, groupBy, opened);
19376
- createSelection(props, items);
19629
+ provideSelection(props, items);
19377
19630
  useOptions({
19378
19631
  page,
19379
19632
  itemsPerPage,
@@ -19408,7 +19661,7 @@
19408
19661
  "sticky": props.fixedHeader,
19409
19662
  "loading": props.loading,
19410
19663
  "color": props.color
19411
- }, null)]), slots.thead?.(), vue.createVNode("tbody", {
19664
+ }, slots)]), slots.thead?.(), vue.createVNode("tbody", {
19412
19665
  "class": "v-data-table__tbody",
19413
19666
  "role": "rowgroup"
19414
19667
  }, [slots.body ? slots.body() : vue.createVNode(VDataTableRows, {
@@ -19493,13 +19746,15 @@
19493
19746
  resizeRef.value = rootEl.value;
19494
19747
  });
19495
19748
  const display = useDisplay();
19496
- const sizes = createRange(props.items.length).map(() => itemHeight.value);
19749
+ const sizeMap = new Map();
19750
+ let sizes = createRange(props.items.length).map(() => itemHeight.value);
19497
19751
  const visibleItems = vue.computed(() => {
19498
19752
  return props.visibleItems ? parseInt(props.visibleItems, 10) : Math.max(12, Math.ceil((contentRect.value?.height ?? display.height.value) / itemHeight.value * 1.7 + 1));
19499
19753
  });
19500
19754
  function handleItemResize(index, height) {
19501
19755
  itemHeight.value = Math.max(itemHeight.value, height);
19502
19756
  sizes[index] = height;
19757
+ sizeMap.set(props.items[index], height);
19503
19758
  }
19504
19759
  function calculateOffset(index) {
19505
19760
  return sizes.slice(0, index).reduce((curr, value) => curr + (value || itemHeight.value), 0);
@@ -19529,9 +19784,9 @@
19529
19784
  const midPointIndex = calculateMidPointIndex(scrollTop + height / 2);
19530
19785
  const buffer = Math.round(visibleItems.value / 3);
19531
19786
  if (direction === UP && midPointIndex <= first.value + buffer * 2 - 1) {
19532
- first.value = Math.max(midPointIndex - buffer, 0);
19787
+ first.value = clamp(midPointIndex - buffer, 0, props.items.length);
19533
19788
  } else if (direction === DOWN && midPointIndex >= first.value + buffer * 2 - 1) {
19534
- first.value = Math.min(Math.max(0, midPointIndex - buffer), props.items.length - visibleItems.value);
19789
+ first.value = clamp(midPointIndex - buffer, 0, props.items.length - visibleItems.value);
19535
19790
  }
19536
19791
  lastScrollTop = rootEl.value.scrollTop;
19537
19792
  }
@@ -19553,6 +19808,17 @@
19553
19808
  itemHeight.value = sizes.slice(first.value, last.value).reduce((curr, height) => curr + height, 0) / visibleItems.value;
19554
19809
  }
19555
19810
  });
19811
+ vue.watch(() => props.items.length, () => {
19812
+ sizes = createRange(props.items.length).map(() => itemHeight.value);
19813
+ sizeMap.forEach((height, item) => {
19814
+ const index = props.items.indexOf(item);
19815
+ if (index === -1) {
19816
+ sizeMap.delete(item);
19817
+ } else {
19818
+ sizes[index] = height;
19819
+ }
19820
+ });
19821
+ });
19556
19822
  useRender(() => vue.createVNode("div", {
19557
19823
  "ref": rootEl,
19558
19824
  "class": "v-virtual-scroll",
@@ -19931,7 +20197,7 @@
19931
20197
  locale
19932
20198
  };
19933
20199
  }
19934
- const version$1 = "3.2.0-dev-20230214.0";
20200
+ const version$1 = "3.2.0-dev-20230322.0";
19935
20201
  createVuetify$1.version = version$1;
19936
20202
 
19937
20203
  // Vue's inject() can only be used in setup
@@ -19943,7 +20209,7 @@
19943
20209
  }
19944
20210
  }
19945
20211
 
19946
- const version = "3.2.0-dev-20230214.0";
20212
+ const version = "3.2.0-dev-20230322.0";
19947
20213
 
19948
20214
  const createVuetify = function () {
19949
20215
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};