vuetify 3.6.0-alpha.2 → 3.6.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 (377) hide show
  1. package/dist/_component-variables-labs.sass +2 -1
  2. package/dist/json/attributes.json +731 -63
  3. package/dist/json/importMap-labs.json +32 -20
  4. package/dist/json/importMap.json +138 -138
  5. package/dist/json/tags.json +184 -2
  6. package/dist/json/web-types.json +13002 -10923
  7. package/dist/vuetify-labs.css +2039 -1927
  8. package/dist/vuetify-labs.d.ts +3575 -1079
  9. package/dist/vuetify-labs.esm.js +1047 -390
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +1046 -389
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +3026 -2941
  14. package/dist/vuetify.d.ts +927 -306
  15. package/dist/vuetify.esm.js +625 -363
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +624 -362
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +728 -714
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/components/VAlert/VAlert.sass +128 -127
  23. package/lib/components/VApp/VApp.sass +15 -13
  24. package/lib/components/VAppBar/VAppBar.sass +9 -8
  25. package/lib/components/VAppBar/index.d.mts +10 -0
  26. package/lib/components/VAutocomplete/VAutocomplete.mjs +8 -10
  27. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  28. package/lib/components/VAutocomplete/VAutocomplete.sass +94 -93
  29. package/lib/components/VAutocomplete/index.d.mts +36 -0
  30. package/lib/components/VAvatar/VAvatar.sass +26 -25
  31. package/lib/components/VBadge/VBadge.sass +61 -60
  32. package/lib/components/VBanner/VBanner.css +1 -1
  33. package/lib/components/VBanner/VBanner.sass +92 -91
  34. package/lib/components/VBanner/index.d.mts +15 -0
  35. package/lib/components/VBottomNavigation/VBottomNavigation.sass +50 -49
  36. package/lib/components/VBottomSheet/VBottomSheet.sass +28 -26
  37. package/lib/components/VBottomSheet/index.d.mts +14 -0
  38. package/lib/components/VBreadcrumbs/VBreadcrumbs.css +1 -1
  39. package/lib/components/VBreadcrumbs/VBreadcrumbs.sass +41 -40
  40. package/lib/components/VBtn/VBtn.css +3 -0
  41. package/lib/components/VBtn/VBtn.mjs +3 -1
  42. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  43. package/lib/components/VBtn/VBtn.sass +204 -200
  44. package/lib/components/VBtn/index.d.mts +10 -0
  45. package/lib/components/VBtnGroup/VBtnGroup.sass +47 -46
  46. package/lib/components/VBtnToggle/VBtnToggle.sass +4 -3
  47. package/lib/components/VBtnToggle/index.d.mts +1 -0
  48. package/lib/components/VCard/VCard.css +3 -3
  49. package/lib/components/VCard/VCard.sass +181 -180
  50. package/lib/components/VCarousel/VCarousel.sass +50 -49
  51. package/lib/components/VCarousel/VCarouselItem.mjs +1 -1
  52. package/lib/components/VCarousel/VCarouselItem.mjs.map +1 -1
  53. package/lib/components/VCarousel/index.d.mts +1 -0
  54. package/lib/components/VCheckbox/VCheckbox.sass +6 -5
  55. package/lib/components/VChip/VChip.css +1 -1
  56. package/lib/components/VChip/VChip.sass +78 -76
  57. package/lib/components/VChipGroup/VChipGroup.sass +20 -18
  58. package/lib/components/VChipGroup/index.d.mts +16 -0
  59. package/lib/components/VCode/VCode.sass +10 -8
  60. package/lib/components/VColorPicker/VColorPicker.sass +18 -17
  61. package/lib/components/VColorPicker/VColorPickerCanvas.sass +21 -20
  62. package/lib/components/VColorPicker/VColorPickerEdit.sass +24 -23
  63. package/lib/components/VColorPicker/VColorPickerPreview.sass +54 -53
  64. package/lib/components/VColorPicker/VColorPickerSwatches.sass +29 -28
  65. package/lib/components/VCombobox/VCombobox.mjs +8 -10
  66. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  67. package/lib/components/VCombobox/VCombobox.sass +94 -93
  68. package/lib/components/VCombobox/index.d.mts +36 -0
  69. package/lib/components/VCounter/VCounter.sass +7 -5
  70. package/lib/components/VDataIterator/index.d.mts +2 -0
  71. package/lib/components/VDataTable/VDataTable.css +36 -1
  72. package/lib/components/VDataTable/VDataTable.sass +137 -103
  73. package/lib/components/VDataTable/VDataTableFooter.css +5 -9
  74. package/lib/components/VDataTable/VDataTableFooter.sass +26 -25
  75. package/lib/components/VDataTable/VDataTableHeaders.mjs +66 -7
  76. package/lib/components/VDataTable/VDataTableHeaders.mjs.map +1 -1
  77. package/lib/components/VDataTable/VDataTableRow.mjs +45 -10
  78. package/lib/components/VDataTable/VDataTableRow.mjs.map +1 -1
  79. package/lib/components/VDataTable/VDataTableRows.mjs +8 -2
  80. package/lib/components/VDataTable/VDataTableRows.mjs.map +1 -1
  81. package/lib/components/VDataTable/_variables.scss +9 -3
  82. package/lib/components/VDataTable/index.d.mts +263 -217
  83. package/lib/components/VDataTable/types.mjs.map +1 -1
  84. package/lib/components/VDatePicker/VDatePicker.mjs +12 -2
  85. package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
  86. package/lib/components/VDatePicker/VDatePicker.sass +6 -5
  87. package/lib/components/VDatePicker/VDatePickerControls.sass +56 -55
  88. package/lib/components/VDatePicker/VDatePickerHeader.sass +58 -56
  89. package/lib/components/VDatePicker/VDatePickerMonth.sass +53 -51
  90. package/lib/components/VDatePicker/VDatePickerMonths.sass +18 -16
  91. package/lib/components/VDatePicker/VDatePickerYears.sass +14 -12
  92. package/lib/components/VDialog/VDialog.css +7 -3
  93. package/lib/components/VDialog/VDialog.mjs +6 -2
  94. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  95. package/lib/components/VDialog/VDialog.sass +71 -68
  96. package/lib/components/VDialog/__test__/VDialog.spec.cy.mjs +39 -0
  97. package/lib/components/VDialog/__test__/VDialog.spec.cy.mjs.map +1 -0
  98. package/lib/components/VDialog/_variables.scss +4 -3
  99. package/lib/components/VDialog/index.d.mts +60 -10
  100. package/lib/components/VDivider/VDivider.sass +49 -48
  101. package/lib/components/VExpansionPanel/VExpansionPanel.sass +172 -171
  102. package/lib/components/VField/VField.sass +451 -450
  103. package/lib/components/VFileInput/VFileInput.mjs +1 -1
  104. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  105. package/lib/components/VFileInput/VFileInput.sass +30 -31
  106. package/lib/components/VFileInput/index.d.mts +17 -5
  107. package/lib/components/VFooter/VFooter.sass +17 -16
  108. package/lib/components/VGrid/VGrid.sass +42 -40
  109. package/lib/components/VIcon/VIcon.sass +34 -32
  110. package/lib/components/VImg/VImg.sass +24 -23
  111. package/lib/components/VInfiniteScroll/VInfiniteScroll.sass +21 -19
  112. package/lib/components/VInput/VInput.mjs +6 -1
  113. package/lib/components/VInput/VInput.mjs.map +1 -1
  114. package/lib/components/VInput/VInput.sass +103 -102
  115. package/lib/components/VInput/index.d.mts +6 -0
  116. package/lib/components/VItemGroup/VItemGroup.sass +7 -5
  117. package/lib/components/VKbd/VKbd.sass +10 -9
  118. package/lib/components/VLabel/VLabel.sass +14 -13
  119. package/lib/components/VLayout/VLayout.mjs +6 -1
  120. package/lib/components/VLayout/VLayout.mjs.map +1 -1
  121. package/lib/components/VLayout/VLayout.sass +10 -7
  122. package/lib/components/VLayout/VLayoutItem.sass +7 -5
  123. package/lib/components/VLayout/index.d.mts +36 -0
  124. package/lib/components/VList/VList.mjs +2 -1
  125. package/lib/components/VList/VList.mjs.map +1 -1
  126. package/lib/components/VList/VList.sass +81 -80
  127. package/lib/components/VList/VListItem.css +1 -1
  128. package/lib/components/VList/VListItem.sass +260 -259
  129. package/lib/components/VLocaleProvider/VLocaleProvider.sass +5 -2
  130. package/lib/components/VMain/VMain.sass +22 -21
  131. package/lib/components/VMenu/VMenu.sass +14 -13
  132. package/lib/components/VMenu/index.d.mts +56 -0
  133. package/lib/components/VMessages/VMessages.sass +16 -15
  134. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +4 -0
  135. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +14 -5
  136. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  137. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +90 -84
  138. package/lib/components/VNavigationDrawer/index.d.mts +24 -0
  139. package/lib/components/VNavigationDrawer/touch.mjs +16 -2
  140. package/lib/components/VNavigationDrawer/touch.mjs.map +1 -1
  141. package/lib/components/VOtpInput/VOtpInput.sass +51 -50
  142. package/lib/components/VOverlay/VOverlay.mjs +2 -2
  143. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  144. package/lib/components/VOverlay/VOverlay.sass +57 -55
  145. package/lib/components/VOverlay/index.d.mts +27 -13
  146. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  147. package/lib/components/VPagination/VPagination.sass +14 -12
  148. package/lib/components/VParallax/VParallax.sass +8 -5
  149. package/lib/components/VProgressCircular/VProgressCircular.sass +85 -83
  150. package/lib/components/VProgressLinear/VProgressLinear.mjs +11 -1
  151. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  152. package/lib/components/VProgressLinear/VProgressLinear.sass +170 -169
  153. package/lib/components/VProgressLinear/index.d.mts +21 -0
  154. package/lib/components/VRadioGroup/VRadioGroup.sass +12 -10
  155. package/lib/components/VRangeSlider/index.d.mts +6 -0
  156. package/lib/components/VRating/VRating.sass +46 -44
  157. package/lib/components/VResponsive/VResponsive.sass +21 -19
  158. package/lib/components/VSelect/VSelect.mjs +5 -1
  159. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  160. package/lib/components/VSelect/VSelect.sass +50 -49
  161. package/lib/components/VSelect/index.d.mts +36 -0
  162. package/lib/components/VSelectionControl/VSelectionControl.sass +87 -86
  163. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.sass +9 -7
  164. package/lib/components/VSheet/VSheet.sass +10 -9
  165. package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +174 -173
  166. package/lib/components/VSlideGroup/VSlideGroup.css +14 -1
  167. package/lib/components/VSlideGroup/VSlideGroup.mjs +110 -93
  168. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  169. package/lib/components/VSlideGroup/VSlideGroup.sass +54 -40
  170. package/lib/components/VSlideGroup/helpers.mjs +48 -28
  171. package/lib/components/VSlideGroup/helpers.mjs.map +1 -1
  172. package/lib/components/VSlideGroup/index.d.mts +16 -0
  173. package/lib/components/VSlider/VSlider.sass +49 -48
  174. package/lib/components/VSlider/VSliderThumb.sass +129 -128
  175. package/lib/components/VSlider/VSliderTrack.sass +120 -119
  176. package/lib/components/VSlider/index.d.mts +6 -0
  177. package/lib/components/VSnackbar/VSnackbar.css +18 -1
  178. package/lib/components/VSnackbar/VSnackbar.mjs +34 -9
  179. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  180. package/lib/components/VSnackbar/VSnackbar.sass +103 -83
  181. package/lib/components/VSnackbar/index.d.mts +42 -0
  182. package/lib/components/VStepper/VStepper.sass +37 -36
  183. package/lib/components/VStepper/VStepperItem.sass +69 -67
  184. package/lib/components/VSwitch/VSwitch.css +14 -2
  185. package/lib/components/VSwitch/VSwitch.sass +119 -112
  186. package/lib/components/VSystemBar/VSystemBar.css +1 -1
  187. package/lib/components/VSystemBar/VSystemBar.sass +24 -23
  188. package/lib/components/VTable/VTable.sass +140 -139
  189. package/lib/components/VTabs/VTab.sass +27 -25
  190. package/lib/components/VTabs/VTabs.sass +38 -37
  191. package/lib/components/VTabs/index.d.mts +49 -6
  192. package/lib/components/VTextField/VTextField.sass +58 -56
  193. package/lib/components/VTextField/index.d.mts +15 -3
  194. package/lib/components/VTextarea/VTextarea.sass +43 -42
  195. package/lib/components/VTextarea/index.d.mts +15 -3
  196. package/lib/components/VThemeProvider/VThemeProvider.sass +6 -3
  197. package/lib/components/VTimeline/VTimeline.sass +308 -307
  198. package/lib/components/VToolbar/VToolbar.sass +90 -89
  199. package/lib/components/VTooltip/VTooltip.sass +23 -21
  200. package/lib/components/VTooltip/index.d.mts +56 -0
  201. package/lib/components/VVirtualScroll/VVirtualScroll.sass +10 -7
  202. package/lib/components/VWindow/VWindow.css +1 -0
  203. package/lib/components/VWindow/VWindow.sass +74 -70
  204. package/lib/components/VWindow/index.d.mts +1 -0
  205. package/lib/components/index.d.mts +870 -253
  206. package/lib/composables/directiveComponent.mjs +4 -2
  207. package/lib/composables/directiveComponent.mjs.map +1 -1
  208. package/lib/composables/display.mjs +5 -0
  209. package/lib/composables/display.mjs.map +1 -1
  210. package/lib/composables/goto.mjs +40 -3
  211. package/lib/composables/goto.mjs.map +1 -1
  212. package/lib/composables/group.mjs +10 -1
  213. package/lib/composables/group.mjs.map +1 -1
  214. package/lib/composables/layout.mjs +3 -1
  215. package/lib/composables/layout.mjs.map +1 -1
  216. package/lib/directives/ripple/VRipple.sass +35 -33
  217. package/lib/entry-bundler.mjs +1 -1
  218. package/lib/entry-bundler.mjs.map +1 -1
  219. package/lib/framework.mjs +1 -1
  220. package/lib/framework.mjs.map +1 -1
  221. package/lib/index.d.mts +58 -54
  222. package/lib/labs/VCalendar/VCalendar.sass +160 -158
  223. package/lib/labs/VCalendar/VCalendarDay.sass +26 -23
  224. package/lib/labs/VCalendar/VCalendarHeader.sass +12 -10
  225. package/lib/labs/VCalendar/VCalendarInterval.sass +36 -34
  226. package/lib/labs/VCalendar/VCalendarIntervalEvent.sass +9 -6
  227. package/lib/labs/VCalendar/VCalendarMonthDay.sass +59 -57
  228. package/lib/labs/VDateInput/VDateInput.mjs +129 -0
  229. package/lib/labs/VDateInput/VDateInput.mjs.map +1 -0
  230. package/lib/labs/VDateInput/index.d.mts +1068 -0
  231. package/lib/labs/VDateInput/index.mjs +2 -0
  232. package/lib/labs/VDateInput/index.mjs.map +1 -0
  233. package/lib/labs/VEmptyState/VEmptyState.css +3 -3
  234. package/lib/labs/VEmptyState/VEmptyState.sass +59 -57
  235. package/lib/labs/VFab/VFab.css +1 -0
  236. package/lib/labs/VFab/VFab.mjs +3 -2
  237. package/lib/labs/VFab/VFab.mjs.map +1 -1
  238. package/lib/labs/VFab/VFab.sass +62 -60
  239. package/lib/labs/VFab/index.d.mts +19 -0
  240. package/lib/labs/VNumberInput/VNumberInput.mjs +79 -24
  241. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  242. package/lib/labs/VNumberInput/VNumberInput.sass +42 -40
  243. package/lib/labs/VNumberInput/index.d.mts +56 -29
  244. package/lib/labs/VPicker/VPicker.sass +49 -48
  245. package/lib/labs/VPullToRefresh/VPullToRefresh.css +27 -0
  246. package/lib/labs/VPullToRefresh/VPullToRefresh.mjs +117 -0
  247. package/lib/labs/VPullToRefresh/VPullToRefresh.mjs.map +1 -0
  248. package/lib/labs/VPullToRefresh/VPullToRefresh.sass +23 -0
  249. package/lib/labs/VPullToRefresh/index.d.mts +189 -0
  250. package/lib/labs/VPullToRefresh/index.mjs +2 -0
  251. package/lib/labs/VPullToRefresh/index.mjs.map +1 -0
  252. package/lib/labs/VSnackbarQueue/VSnackbarQueue.mjs +112 -0
  253. package/lib/labs/VSnackbarQueue/VSnackbarQueue.mjs.map +1 -0
  254. package/lib/labs/VSnackbarQueue/index.d.mts +2763 -0
  255. package/lib/labs/VSnackbarQueue/index.mjs +2 -0
  256. package/lib/labs/VSnackbarQueue/index.mjs.map +1 -0
  257. package/lib/labs/VSpeedDial/VSpeedDial.mjs +8 -2
  258. package/lib/labs/VSpeedDial/VSpeedDial.mjs.map +1 -1
  259. package/lib/labs/VSpeedDial/VSpeedDial.sass +23 -20
  260. package/lib/labs/VSpeedDial/index.d.mts +28 -2
  261. package/lib/labs/VTimePicker/VTimePicker.sass +9 -8
  262. package/lib/labs/VTimePicker/VTimePickerClock.mjs +1 -3
  263. package/lib/labs/VTimePicker/VTimePickerClock.mjs.map +1 -1
  264. package/lib/labs/VTimePicker/VTimePickerClock.sass +114 -113
  265. package/lib/labs/VTimePicker/VTimePickerControls.sass +90 -90
  266. package/lib/labs/VTimePicker/_variables.scss +1 -1
  267. package/lib/labs/VTimePicker/index.d.mts +6 -13
  268. package/lib/labs/VTreeview/VTreeviewItem.sass +14 -12
  269. package/lib/labs/VTreeview/{variables.scss → _variables.scss} +0 -2
  270. package/lib/labs/components.d.mts +5587 -1641
  271. package/lib/labs/components.mjs +3 -0
  272. package/lib/labs/components.mjs.map +1 -1
  273. package/lib/locale/af.mjs +1 -0
  274. package/lib/locale/af.mjs.map +1 -1
  275. package/lib/locale/ar.mjs +1 -0
  276. package/lib/locale/ar.mjs.map +1 -1
  277. package/lib/locale/az.mjs +1 -0
  278. package/lib/locale/az.mjs.map +1 -1
  279. package/lib/locale/bg.mjs +1 -0
  280. package/lib/locale/bg.mjs.map +1 -1
  281. package/lib/locale/ca.mjs +1 -0
  282. package/lib/locale/ca.mjs.map +1 -1
  283. package/lib/locale/ckb.mjs +1 -0
  284. package/lib/locale/ckb.mjs.map +1 -1
  285. package/lib/locale/cs.mjs +1 -0
  286. package/lib/locale/cs.mjs.map +1 -1
  287. package/lib/locale/da.mjs +1 -0
  288. package/lib/locale/da.mjs.map +1 -1
  289. package/lib/locale/de.mjs +1 -0
  290. package/lib/locale/de.mjs.map +1 -1
  291. package/lib/locale/el.mjs +1 -0
  292. package/lib/locale/el.mjs.map +1 -1
  293. package/lib/locale/en.mjs +1 -0
  294. package/lib/locale/en.mjs.map +1 -1
  295. package/lib/locale/es.mjs +1 -0
  296. package/lib/locale/es.mjs.map +1 -1
  297. package/lib/locale/et.mjs +1 -0
  298. package/lib/locale/et.mjs.map +1 -1
  299. package/lib/locale/fa.mjs +1 -0
  300. package/lib/locale/fa.mjs.map +1 -1
  301. package/lib/locale/fi.mjs +1 -0
  302. package/lib/locale/fi.mjs.map +1 -1
  303. package/lib/locale/fr.mjs +1 -0
  304. package/lib/locale/fr.mjs.map +1 -1
  305. package/lib/locale/he.mjs +1 -0
  306. package/lib/locale/he.mjs.map +1 -1
  307. package/lib/locale/hr.mjs +1 -0
  308. package/lib/locale/hr.mjs.map +1 -1
  309. package/lib/locale/hu.mjs +1 -0
  310. package/lib/locale/hu.mjs.map +1 -1
  311. package/lib/locale/id.mjs +1 -0
  312. package/lib/locale/id.mjs.map +1 -1
  313. package/lib/locale/index.d.mts +43 -0
  314. package/lib/locale/it.mjs +1 -0
  315. package/lib/locale/it.mjs.map +1 -1
  316. package/lib/locale/ja.mjs +1 -0
  317. package/lib/locale/ja.mjs.map +1 -1
  318. package/lib/locale/km.mjs +1 -0
  319. package/lib/locale/km.mjs.map +1 -1
  320. package/lib/locale/ko.mjs +9 -8
  321. package/lib/locale/ko.mjs.map +1 -1
  322. package/lib/locale/lt.mjs +1 -0
  323. package/lib/locale/lt.mjs.map +1 -1
  324. package/lib/locale/lv.mjs +1 -0
  325. package/lib/locale/lv.mjs.map +1 -1
  326. package/lib/locale/nl.mjs +1 -0
  327. package/lib/locale/nl.mjs.map +1 -1
  328. package/lib/locale/no.mjs +1 -0
  329. package/lib/locale/no.mjs.map +1 -1
  330. package/lib/locale/pl.mjs +1 -0
  331. package/lib/locale/pl.mjs.map +1 -1
  332. package/lib/locale/pt.mjs +1 -0
  333. package/lib/locale/pt.mjs.map +1 -1
  334. package/lib/locale/ro.mjs +1 -0
  335. package/lib/locale/ro.mjs.map +1 -1
  336. package/lib/locale/ru.mjs +1 -0
  337. package/lib/locale/ru.mjs.map +1 -1
  338. package/lib/locale/sk.mjs +1 -0
  339. package/lib/locale/sk.mjs.map +1 -1
  340. package/lib/locale/sl.mjs +1 -0
  341. package/lib/locale/sl.mjs.map +1 -1
  342. package/lib/locale/sr-Cyrl.mjs +1 -0
  343. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  344. package/lib/locale/sr-Latn.mjs +1 -0
  345. package/lib/locale/sr-Latn.mjs.map +1 -1
  346. package/lib/locale/sv.mjs +1 -0
  347. package/lib/locale/sv.mjs.map +1 -1
  348. package/lib/locale/th.mjs +1 -0
  349. package/lib/locale/th.mjs.map +1 -1
  350. package/lib/locale/tr.mjs +1 -0
  351. package/lib/locale/tr.mjs.map +1 -1
  352. package/lib/locale/uk.mjs +1 -0
  353. package/lib/locale/uk.mjs.map +1 -1
  354. package/lib/locale/vi.mjs +1 -0
  355. package/lib/locale/vi.mjs.map +1 -1
  356. package/lib/locale/zh-Hans.mjs +1 -0
  357. package/lib/locale/zh-Hans.mjs.map +1 -1
  358. package/lib/locale/zh-Hant.mjs +1 -0
  359. package/lib/locale/zh-Hant.mjs.map +1 -1
  360. package/lib/styles/elements/_blockquote.sass +6 -4
  361. package/lib/styles/elements/_global.sass +20 -18
  362. package/lib/styles/generic/_animations.scss +13 -9
  363. package/lib/styles/generic/_colors.scss +36 -35
  364. package/lib/styles/generic/_index.scss +1 -0
  365. package/lib/styles/generic/_layers.scss +7 -0
  366. package/lib/styles/generic/_reset.scss +235 -232
  367. package/lib/styles/generic/_rtl.scss +10 -6
  368. package/lib/styles/generic/_transitions.scss +244 -241
  369. package/lib/styles/main.css +78 -78
  370. package/lib/styles/settings/_variables.scss +22 -14
  371. package/lib/styles/tools/_index.sass +1 -0
  372. package/lib/styles/tools/_layer.scss +11 -0
  373. package/lib/styles/utilities/_display.sass +7 -5
  374. package/lib/styles/utilities/_elevation.scss +8 -6
  375. package/lib/styles/utilities/_index.sass +28 -29
  376. package/lib/styles/utilities/_screenreaders.sass +13 -11
  377. package/package.json +2 -2
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.6.0-alpha.2
2
+ * Vuetify v3.6.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, shallowRef, readonly, unref, warn, ref, provide, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, createVNode, mergeProps, onBeforeUnmount, watch, nextTick, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, Suspense, TransitionGroup, Transition, isRef, toRef, onBeforeMount, withDirectives, resolveDirective, vShow, onMounted, Text, resolveDynamicComponent, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, toDisplayString, vModelText, resolveComponent, render } from 'vue';
7
+ import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, shallowRef, readonly, unref, warn, ref, provide, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, createVNode, mergeProps, onBeforeUnmount, watch, nextTick, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, Suspense, TransitionGroup, Transition, isRef, toRef, onBeforeMount, withDirectives, resolveDirective, vShow, onMounted, onUpdated, Text, resolveDynamicComponent, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, toDisplayString, vModelText, resolveComponent, render } from 'vue';
8
8
 
9
9
  const IN_BROWSER = typeof window !== 'undefined';
10
10
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
@@ -2219,10 +2219,12 @@ function createLayout(props) {
2219
2219
  const isHorizontal = position.value === 'left' || position.value === 'right';
2220
2220
  const isOppositeHorizontal = position.value === 'right';
2221
2221
  const isOppositeVertical = position.value === 'bottom';
2222
+ const size = elementSize.value ?? layoutSize.value;
2223
+ const unit = size === 0 ? '%' : 'px';
2222
2224
  const styles = {
2223
2225
  [position.value]: 0,
2224
2226
  zIndex: zIndex.value,
2225
- transform: `translate${isHorizontal ? 'X' : 'Y'}(${(active.value ? 0 : -(elementSize.value ?? layoutSize.value)) * (isOppositeHorizontal || isOppositeVertical ? -1 : 1)}px)`,
2227
+ transform: `translate${isHorizontal ? 'X' : 'Y'}(${(active.value ? 0 : -(size === 0 ? 100 : size)) * (isOppositeHorizontal || isOppositeVertical ? -1 : 1)}${unit})`,
2226
2228
  position: absolute.value || rootZIndex.value !== ROOT_ZINDEX ? 'absolute' : 'fixed',
2227
2229
  ...(transitionsEnabled.value ? undefined : {
2228
2230
  transition: 'none'
@@ -2362,6 +2364,7 @@ var en = {
2362
2364
  badge: 'Badge',
2363
2365
  open: 'Open',
2364
2366
  close: 'Close',
2367
+ dismiss: 'Dismiss',
2365
2368
  confirmEdit: {
2366
2369
  ok: 'OK',
2367
2370
  cancel: 'Cancel'
@@ -4592,6 +4595,7 @@ function useGroup(props, injectKey) {
4592
4595
  const index = children.indexOf(vm);
4593
4596
  if (unref(unwrapped.value) == null) {
4594
4597
  unwrapped.value = index;
4598
+ unwrapped.useIndexAsValue = true;
4595
4599
  }
4596
4600
  if (index > -1) {
4597
4601
  items.splice(index, 0, unwrapped);
@@ -4624,6 +4628,14 @@ function useGroup(props, injectKey) {
4624
4628
  onBeforeUnmount(() => {
4625
4629
  isUnmounted = true;
4626
4630
  });
4631
+ onUpdated(() => {
4632
+ // #19655 update the items that use the index as the value.
4633
+ for (let i = 0; i < items.length; i++) {
4634
+ if (items[i].useIndexAsValue) {
4635
+ items[i].value = i;
4636
+ }
4637
+ }
4638
+ });
4627
4639
  function select(id, value) {
4628
4640
  const item = items.find(item => item.id === id);
4629
4641
  if (value && item?.disabled) return;
@@ -5006,6 +5018,65 @@ const VProgressCircular = genericComponent()({
5006
5018
  }
5007
5019
  });
5008
5020
 
5021
+ // Composables
5022
+
5023
+ // Types
5024
+
5025
+ const oppositeMap = {
5026
+ center: 'center',
5027
+ top: 'bottom',
5028
+ bottom: 'top',
5029
+ left: 'right',
5030
+ right: 'left'
5031
+ };
5032
+ const makeLocationProps = propsFactory({
5033
+ location: String
5034
+ }, 'location');
5035
+ function useLocation(props) {
5036
+ let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
5037
+ let offset = arguments.length > 2 ? arguments[2] : undefined;
5038
+ const {
5039
+ isRtl
5040
+ } = useRtl();
5041
+ const locationStyles = computed(() => {
5042
+ if (!props.location) return {};
5043
+ const {
5044
+ side,
5045
+ align
5046
+ } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
5047
+ function getOffset(side) {
5048
+ return offset ? offset(side) : 0;
5049
+ }
5050
+ const styles = {};
5051
+ if (side !== 'center') {
5052
+ if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
5053
+ }
5054
+ if (align !== 'center') {
5055
+ if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
5056
+ } else {
5057
+ if (side === 'center') styles.top = styles.left = '50%';else {
5058
+ styles[{
5059
+ top: 'left',
5060
+ bottom: 'left',
5061
+ left: 'top',
5062
+ right: 'top'
5063
+ }[side]] = '50%';
5064
+ }
5065
+ styles.transform = {
5066
+ top: 'translateX(-50%)',
5067
+ bottom: 'translateX(-50%)',
5068
+ left: 'translateY(-50%)',
5069
+ right: 'translateY(-50%)',
5070
+ center: 'translate(-50%, -50%)'
5071
+ }[side];
5072
+ }
5073
+ return styles;
5074
+ });
5075
+ return {
5076
+ locationStyles
5077
+ };
5078
+ }
5079
+
5009
5080
  const makeVProgressLinearProps = propsFactory({
5010
5081
  absolute: Boolean,
5011
5082
  active: {
@@ -5041,6 +5112,9 @@ const makeVProgressLinearProps = propsFactory({
5041
5112
  striped: Boolean,
5042
5113
  roundedBar: Boolean,
5043
5114
  ...makeComponentProps(),
5115
+ ...makeLocationProps({
5116
+ location: 'top'
5117
+ }),
5044
5118
  ...makeRoundedProps(),
5045
5119
  ...makeTagProps(),
5046
5120
  ...makeThemeProps()
@@ -5063,6 +5137,9 @@ const VProgressLinear = genericComponent()({
5063
5137
  const {
5064
5138
  themeClasses
5065
5139
  } = provideTheme(props);
5140
+ const {
5141
+ locationStyles
5142
+ } = useLocation(props);
5066
5143
  const {
5067
5144
  textColorClasses,
5068
5145
  textColorStyles
@@ -5113,8 +5190,11 @@ const VProgressLinear = genericComponent()({
5113
5190
  'v-progress-linear--striped': props.striped
5114
5191
  }, roundedClasses.value, themeClasses.value, rtlClasses.value, props.class],
5115
5192
  "style": [{
5193
+ bottom: props.location === 'bottom' ? 0 : undefined,
5194
+ top: props.location === 'top' ? 0 : undefined,
5116
5195
  height: props.active ? convertToUnit(height.value) : 0,
5117
- '--v-progress-linear-height': convertToUnit(height.value)
5196
+ '--v-progress-linear-height': convertToUnit(height.value),
5197
+ ...(props.absolute ? locationStyles.value : {})
5118
5198
  }, props.style],
5119
5199
  "role": "progressbar",
5120
5200
  "aria-hidden": props.active ? 'false' : 'true',
@@ -5206,65 +5286,6 @@ function LoaderSlot(props, _ref) {
5206
5286
  }, null)]);
5207
5287
  }
5208
5288
 
5209
- // Composables
5210
-
5211
- // Types
5212
-
5213
- const oppositeMap = {
5214
- center: 'center',
5215
- top: 'bottom',
5216
- bottom: 'top',
5217
- left: 'right',
5218
- right: 'left'
5219
- };
5220
- const makeLocationProps = propsFactory({
5221
- location: String
5222
- }, 'location');
5223
- function useLocation(props) {
5224
- let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
5225
- let offset = arguments.length > 2 ? arguments[2] : undefined;
5226
- const {
5227
- isRtl
5228
- } = useRtl();
5229
- const locationStyles = computed(() => {
5230
- if (!props.location) return {};
5231
- const {
5232
- side,
5233
- align
5234
- } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
5235
- function getOffset(side) {
5236
- return offset ? offset(side) : 0;
5237
- }
5238
- const styles = {};
5239
- if (side !== 'center') {
5240
- if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
5241
- }
5242
- if (align !== 'center') {
5243
- if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
5244
- } else {
5245
- if (side === 'center') styles.top = styles.left = '50%';else {
5246
- styles[{
5247
- top: 'left',
5248
- bottom: 'left',
5249
- left: 'top',
5250
- right: 'top'
5251
- }[side]] = '50%';
5252
- }
5253
- styles.transform = {
5254
- top: 'translateX(-50%)',
5255
- bottom: 'translateX(-50%)',
5256
- left: 'translateY(-50%)',
5257
- right: 'translateY(-50%)',
5258
- center: 'translate(-50%, -50%)'
5259
- }[side];
5260
- }
5261
- return styles;
5262
- });
5263
- return {
5264
- locationStyles
5265
- };
5266
- }
5267
-
5268
5289
  // Utilities
5269
5290
 
5270
5291
  // Types
@@ -5692,6 +5713,7 @@ const makeVBtnProps = propsFactory({
5692
5713
  prependIcon: IconValue,
5693
5714
  appendIcon: IconValue,
5694
5715
  block: Boolean,
5716
+ readonly: Boolean,
5695
5717
  slim: Boolean,
5696
5718
  stacked: Boolean,
5697
5719
  ripple: {
@@ -5813,6 +5835,7 @@ const VBtn = genericComponent()({
5813
5835
  'v-btn--flat': props.flat,
5814
5836
  'v-btn--icon': !!props.icon,
5815
5837
  'v-btn--loading': props.loading,
5838
+ 'v-btn--readonly': props.readonly,
5816
5839
  'v-btn--slim': props.slim,
5817
5840
  'v-btn--stacked': props.stacked
5818
5841
  }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
@@ -5820,7 +5843,7 @@ const VBtn = genericComponent()({
5820
5843
  "aria-busy": props.loading ? true : undefined,
5821
5844
  "disabled": isDisabled.value || undefined,
5822
5845
  "href": link.href.value,
5823
- "tabindex": props.loading ? -1 : undefined,
5846
+ "tabindex": props.loading || props.readonly ? -1 : undefined,
5824
5847
  "onClick": onClick,
5825
5848
  "value": valueAttr.value
5826
5849
  }, {
@@ -6991,6 +7014,7 @@ const makeVInputProps = propsFactory({
6991
7014
  ...makeComponentProps(),
6992
7015
  ...makeDensityProps(),
6993
7016
  ...only(makeDimensionProps(), ['maxWidth', 'minWidth', 'width']),
7017
+ ...makeThemeProps(),
6994
7018
  ...makeValidationProps()
6995
7019
  }, 'VInput');
6996
7020
  const VInput = genericComponent()({
@@ -7013,6 +7037,9 @@ const VInput = genericComponent()({
7013
7037
  const {
7014
7038
  dimensionStyles
7015
7039
  } = useDimension(props);
7040
+ const {
7041
+ themeClasses
7042
+ } = provideTheme(props);
7016
7043
  const {
7017
7044
  rtlClasses
7018
7045
  } = useRtl();
@@ -7066,7 +7093,7 @@ const VInput = genericComponent()({
7066
7093
  "class": ['v-input', `v-input--${props.direction}`, {
7067
7094
  'v-input--center-affix': props.centerAffix,
7068
7095
  'v-input--hide-spin-buttons': props.hideSpinButtons
7069
- }, densityClasses.value, rtlClasses.value, validationClasses.value, props.class],
7096
+ }, densityClasses.value, themeClasses.value, rtlClasses.value, validationClasses.value, props.class],
7070
7097
  "style": [dimensionStyles.value, props.style]
7071
7098
  }, [hasPrepend && createVNode("div", {
7072
7099
  "key": "prepend",
@@ -7293,6 +7320,10 @@ function createDisplay(options, ssr) {
7293
7320
  };
7294
7321
  }
7295
7322
  const makeDisplayProps = propsFactory({
7323
+ mobile: {
7324
+ type: Boolean,
7325
+ default: null
7326
+ },
7296
7327
  mobileBreakpoint: [Number, String]
7297
7328
  }, 'display');
7298
7329
  function useDisplay() {
@@ -7301,6 +7332,7 @@ function useDisplay() {
7301
7332
  const display = inject$1(DisplaySymbol);
7302
7333
  if (!display) throw new Error('Could not find Vuetify display injection');
7303
7334
  const mobile = computed(() => {
7335
+ if (props.mobile != null) return props.mobile;
7304
7336
  if (!props.mobileBreakpoint) return display.mobile.value;
7305
7337
  const breakpointValue = typeof props.mobileBreakpoint === 'number' ? props.mobileBreakpoint : display.thresholds.value[props.mobileBreakpoint];
7306
7338
  return display.width.value < breakpointValue;
@@ -7318,45 +7350,205 @@ function useDisplay() {
7318
7350
  };
7319
7351
  }
7320
7352
 
7321
- function bias(val) {
7322
- const c = 0.501;
7323
- const x = Math.abs(val);
7324
- return Math.sign(val) * (x / ((1 / c - 2) * (1 - x) + 1));
7353
+ // Utilities
7354
+
7355
+ // Types
7356
+
7357
+ const GoToSymbol = Symbol.for('vuetify:goto');
7358
+ function genDefaults() {
7359
+ return {
7360
+ container: undefined,
7361
+ duration: 300,
7362
+ layout: false,
7363
+ offset: 0,
7364
+ easing: 'easeInOutCubic',
7365
+ patterns: {
7366
+ linear: t => t,
7367
+ easeInQuad: t => t ** 2,
7368
+ easeOutQuad: t => t * (2 - t),
7369
+ easeInOutQuad: t => t < 0.5 ? 2 * t ** 2 : -1 + (4 - 2 * t) * t,
7370
+ easeInCubic: t => t ** 3,
7371
+ easeOutCubic: t => --t ** 3 + 1,
7372
+ easeInOutCubic: t => t < 0.5 ? 4 * t ** 3 : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,
7373
+ easeInQuart: t => t ** 4,
7374
+ easeOutQuart: t => 1 - --t ** 4,
7375
+ easeInOutQuart: t => t < 0.5 ? 8 * t ** 4 : 1 - 8 * --t ** 4,
7376
+ easeInQuint: t => t ** 5,
7377
+ easeOutQuint: t => 1 + --t ** 5,
7378
+ easeInOutQuint: t => t < 0.5 ? 16 * t ** 5 : 1 + 16 * --t ** 5
7379
+ }
7380
+ };
7381
+ }
7382
+ function getContainer(el) {
7383
+ return getTarget$1(el) ?? (document.scrollingElement || document.body);
7384
+ }
7385
+ function getTarget$1(el) {
7386
+ return typeof el === 'string' ? document.querySelector(el) : refElement(el);
7387
+ }
7388
+ function getOffset$2(target, horizontal, rtl) {
7389
+ if (typeof target === 'number') return horizontal && rtl ? -target : target;
7390
+ let el = getTarget$1(target);
7391
+ let totalOffset = 0;
7392
+ while (el) {
7393
+ totalOffset += horizontal ? el.offsetLeft : el.offsetTop;
7394
+ el = el.offsetParent;
7395
+ }
7396
+ return totalOffset;
7397
+ }
7398
+ function createGoTo(options, locale) {
7399
+ return {
7400
+ rtl: locale.isRtl,
7401
+ options: mergeDeep(genDefaults(), options)
7402
+ };
7403
+ }
7404
+ async function scrollTo(_target, _options, horizontal, goTo) {
7405
+ const property = horizontal ? 'scrollLeft' : 'scrollTop';
7406
+ const options = mergeDeep(goTo?.options ?? genDefaults(), _options);
7407
+ const rtl = goTo?.rtl.value;
7408
+ const target = (typeof _target === 'number' ? _target : getTarget$1(_target)) ?? 0;
7409
+ const container = options.container === 'parent' && target instanceof HTMLElement ? target.parentElement : getContainer(options.container);
7410
+ const ease = typeof options.easing === 'function' ? options.easing : options.patterns[options.easing];
7411
+ if (!ease) throw new TypeError(`Easing function "${options.easing}" not found.`);
7412
+ let targetLocation;
7413
+ if (typeof target === 'number') {
7414
+ targetLocation = getOffset$2(target, horizontal, rtl);
7415
+ } else {
7416
+ targetLocation = getOffset$2(target, horizontal, rtl) - getOffset$2(container, horizontal, rtl);
7417
+ if (options.layout) {
7418
+ const styles = window.getComputedStyle(target);
7419
+ const layoutOffset = styles.getPropertyValue('--v-layout-top');
7420
+ if (layoutOffset) targetLocation -= parseInt(layoutOffset, 10);
7421
+ }
7422
+ }
7423
+ targetLocation += options.offset;
7424
+ targetLocation = clampTarget(container, targetLocation, !!rtl, !!horizontal);
7425
+ const startLocation = container[property] ?? 0;
7426
+ if (targetLocation === startLocation) return Promise.resolve(targetLocation);
7427
+ const startTime = performance.now();
7428
+ return new Promise(resolve => requestAnimationFrame(function step(currentTime) {
7429
+ const timeElapsed = currentTime - startTime;
7430
+ const progress = timeElapsed / options.duration;
7431
+ const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(clamp(progress, 0, 1)));
7432
+ container[property] = location;
7433
+
7434
+ // Allow for some jitter if target time has elapsed
7435
+ if (progress >= 1 && Math.abs(location - container[property]) < 10) {
7436
+ return resolve(targetLocation);
7437
+ } else if (progress > 2) {
7438
+ // The target might not be reachable
7439
+ consoleWarn('Scroll target is not reachable');
7440
+ return resolve(container[property]);
7441
+ }
7442
+ requestAnimationFrame(step);
7443
+ }));
7444
+ }
7445
+ function useGoTo() {
7446
+ let _options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7447
+ const goToInstance = inject$1(GoToSymbol);
7448
+ const {
7449
+ isRtl
7450
+ } = useRtl();
7451
+ if (!goToInstance) throw new Error('[Vuetify] Could not find injected goto instance');
7452
+ const goTo = {
7453
+ ...goToInstance,
7454
+ // can be set via VLocaleProvider
7455
+ rtl: computed(() => goToInstance.rtl.value || isRtl.value)
7456
+ };
7457
+ async function go(target, options) {
7458
+ return scrollTo(target, mergeDeep(_options, options), false, goTo);
7459
+ }
7460
+ go.horizontal = async (target, options) => {
7461
+ return scrollTo(target, mergeDeep(_options, options), true, goTo);
7462
+ };
7463
+ return go;
7464
+ }
7465
+
7466
+ /**
7467
+ * Clamp target value to achieve a smooth scroll animation
7468
+ * when the value goes outside the scroll container size
7469
+ */
7470
+ function clampTarget(container, value, rtl, horizontal) {
7471
+ const {
7472
+ scrollWidth,
7473
+ scrollHeight
7474
+ } = container;
7475
+ const [containerWidth, containerHeight] = container === document.scrollingElement ? [window.innerWidth, window.innerHeight] : [container.offsetWidth, container.offsetHeight];
7476
+ let min;
7477
+ let max;
7478
+ if (horizontal) {
7479
+ if (rtl) {
7480
+ min = -(scrollWidth - containerWidth);
7481
+ max = 0;
7482
+ } else {
7483
+ min = 0;
7484
+ max = scrollWidth - containerWidth;
7485
+ }
7486
+ } else {
7487
+ min = 0;
7488
+ max = scrollHeight + -containerHeight;
7489
+ }
7490
+ return Math.max(Math.min(value, max), min);
7325
7491
  }
7326
- function calculateUpdatedOffset(_ref) {
7492
+
7493
+ function calculateUpdatedTarget(_ref) {
7327
7494
  let {
7328
7495
  selectedElement,
7329
- containerSize,
7330
- contentSize,
7496
+ containerElement,
7331
7497
  isRtl,
7332
- currentScrollOffset,
7333
7498
  isHorizontal
7334
7499
  } = _ref;
7335
- const clientSize = isHorizontal ? selectedElement.clientWidth : selectedElement.clientHeight;
7336
- const offsetStart = isHorizontal ? selectedElement.offsetLeft : selectedElement.offsetTop;
7337
- const adjustedOffsetStart = isRtl && isHorizontal ? contentSize - offsetStart - clientSize : offsetStart;
7338
- const totalSize = containerSize + currentScrollOffset;
7339
- const itemOffset = clientSize + adjustedOffsetStart;
7340
- const additionalOffset = clientSize * 0.4;
7341
- if (adjustedOffsetStart <= currentScrollOffset) {
7342
- currentScrollOffset = Math.max(adjustedOffsetStart - additionalOffset, 0);
7343
- } else if (totalSize <= itemOffset) {
7344
- currentScrollOffset = Math.min(currentScrollOffset - (totalSize - itemOffset - additionalOffset), contentSize - containerSize);
7345
- }
7346
- return currentScrollOffset;
7347
- }
7348
- function calculateCenteredOffset(_ref2) {
7500
+ const containerSize = getOffsetSize(isHorizontal, containerElement);
7501
+ const scrollPosition = getScrollPosition(isHorizontal, isRtl, containerElement);
7502
+ const childrenSize = getOffsetSize(isHorizontal, selectedElement);
7503
+ const childrenStartPosition = getOffsetPosition(isHorizontal, selectedElement);
7504
+ const additionalOffset = childrenSize * 0.4;
7505
+ if (scrollPosition > childrenStartPosition) {
7506
+ return childrenStartPosition - additionalOffset;
7507
+ } else if (scrollPosition + containerSize < childrenStartPosition + childrenSize) {
7508
+ return childrenStartPosition - containerSize + childrenSize + additionalOffset;
7509
+ }
7510
+ return scrollPosition;
7511
+ }
7512
+ function calculateCenteredTarget(_ref2) {
7349
7513
  let {
7350
7514
  selectedElement,
7351
- containerSize,
7352
- contentSize,
7353
- isRtl,
7515
+ containerElement,
7354
7516
  isHorizontal
7355
7517
  } = _ref2;
7356
- const clientSize = isHorizontal ? selectedElement.clientWidth : selectedElement.clientHeight;
7357
- const offsetStart = isHorizontal ? selectedElement.offsetLeft : selectedElement.offsetTop;
7358
- const offsetCentered = isRtl && isHorizontal ? contentSize - offsetStart - clientSize / 2 - containerSize / 2 : offsetStart + clientSize / 2 - containerSize / 2;
7359
- return Math.min(contentSize - containerSize, Math.max(0, offsetCentered));
7518
+ const containerOffsetSize = getOffsetSize(isHorizontal, containerElement);
7519
+ const childrenOffsetPosition = getOffsetPosition(isHorizontal, selectedElement);
7520
+ const childrenOffsetSize = getOffsetSize(isHorizontal, selectedElement);
7521
+ return childrenOffsetPosition - containerOffsetSize / 2 + childrenOffsetSize / 2;
7522
+ }
7523
+ function getScrollSize(isHorizontal, element) {
7524
+ const key = isHorizontal ? 'scrollWidth' : 'scrollHeight';
7525
+ return element?.[key] || 0;
7526
+ }
7527
+ function getClientSize(isHorizontal, element) {
7528
+ const key = isHorizontal ? 'clientWidth' : 'clientHeight';
7529
+ return element?.[key] || 0;
7530
+ }
7531
+ function getScrollPosition(isHorizontal, rtl, element) {
7532
+ if (!element) {
7533
+ return 0;
7534
+ }
7535
+ const {
7536
+ scrollLeft,
7537
+ offsetWidth,
7538
+ scrollWidth
7539
+ } = element;
7540
+ if (isHorizontal) {
7541
+ return rtl ? scrollWidth - offsetWidth + scrollLeft : scrollLeft;
7542
+ }
7543
+ return element.scrollTop;
7544
+ }
7545
+ function getOffsetSize(isHorizontal, element) {
7546
+ const key = isHorizontal ? 'offsetWidth' : 'offsetHeight';
7547
+ return element?.[key] || 0;
7548
+ }
7549
+ function getOffsetPosition(isHorizontal, element) {
7550
+ const key = isHorizontal ? 'offsetLeft' : 'offsetTop';
7551
+ return element?.[key] || 0;
7360
7552
  }
7361
7553
 
7362
7554
  // Types
@@ -7422,6 +7614,14 @@ const VSlideGroup = genericComponent()({
7422
7614
  resizeRef: contentRef,
7423
7615
  contentRect
7424
7616
  } = useResizeObserver();
7617
+ const goTo = useGoTo();
7618
+ const goToOptions = computed(() => {
7619
+ return {
7620
+ container: containerRef.value,
7621
+ duration: 200,
7622
+ easing: 'easeOutQuart'
7623
+ };
7624
+ });
7425
7625
  const firstSelectedIndex = computed(() => {
7426
7626
  if (!group.selected.value.length) return -1;
7427
7627
  return group.items.value.findIndex(item => item.id === group.selected.value[0]);
@@ -7444,60 +7644,58 @@ const VSlideGroup = genericComponent()({
7444
7644
  if (firstSelectedIndex.value >= 0 && contentRef.value) {
7445
7645
  // TODO: Is this too naive? Should we store element references in group composable?
7446
7646
  const selectedElement = contentRef.value.children[lastSelectedIndex.value];
7447
- if (firstSelectedIndex.value === 0 || !isOverflowing.value) {
7448
- scrollOffset.value = 0;
7449
- } else if (props.centerActive) {
7450
- scrollOffset.value = calculateCenteredOffset({
7451
- selectedElement,
7452
- containerSize: containerSize.value,
7453
- contentSize: contentSize.value,
7454
- isRtl: isRtl.value,
7455
- isHorizontal: isHorizontal.value
7456
- });
7457
- } else if (isOverflowing.value) {
7458
- scrollOffset.value = calculateUpdatedOffset({
7459
- selectedElement,
7460
- containerSize: containerSize.value,
7461
- contentSize: contentSize.value,
7462
- isRtl: isRtl.value,
7463
- currentScrollOffset: scrollOffset.value,
7464
- isHorizontal: isHorizontal.value
7465
- });
7466
- }
7647
+ scrollToChildren(selectedElement, props.centerActive);
7467
7648
  }
7468
7649
  });
7469
7650
  });
7470
7651
  }
7471
- const disableTransition = shallowRef(false);
7472
- let startTouch = 0;
7473
- let startOffset = 0;
7474
- function onTouchstart(e) {
7475
- const sizeProperty = isHorizontal.value ? 'clientX' : 'clientY';
7476
- const sign = isRtl.value && isHorizontal.value ? -1 : 1;
7477
- startOffset = sign * scrollOffset.value;
7478
- startTouch = e.touches[0][sizeProperty];
7479
- disableTransition.value = true;
7480
- }
7481
- function onTouchmove(e) {
7482
- if (!isOverflowing.value) return;
7483
- const sizeProperty = isHorizontal.value ? 'clientX' : 'clientY';
7484
- const sign = isRtl.value && isHorizontal.value ? -1 : 1;
7485
- scrollOffset.value = sign * (startOffset + startTouch - e.touches[0][sizeProperty]);
7486
- }
7487
- function onTouchend(e) {
7488
- const maxScrollOffset = contentSize.value - containerSize.value;
7489
- if (scrollOffset.value < 0 || !isOverflowing.value) {
7490
- scrollOffset.value = 0;
7491
- } else if (scrollOffset.value >= maxScrollOffset) {
7492
- scrollOffset.value = maxScrollOffset;
7493
- }
7494
- disableTransition.value = false;
7652
+ const isFocused = shallowRef(false);
7653
+ function scrollToChildren(children, center) {
7654
+ let target = 0;
7655
+ if (center) {
7656
+ target = calculateCenteredTarget({
7657
+ containerElement: containerRef.value,
7658
+ isHorizontal: isHorizontal.value,
7659
+ selectedElement: children
7660
+ });
7661
+ } else {
7662
+ target = calculateUpdatedTarget({
7663
+ containerElement: containerRef.value,
7664
+ isHorizontal: isHorizontal.value,
7665
+ isRtl: isRtl.value,
7666
+ selectedElement: children
7667
+ });
7668
+ }
7669
+ scrollToPosition(target);
7670
+ }
7671
+ function scrollToPosition(newPosition) {
7672
+ if (!IN_BROWSER || !containerRef.value) return;
7673
+ const offsetSize = getOffsetSize(isHorizontal.value, containerRef.value);
7674
+ const scrollPosition = getScrollPosition(isHorizontal.value, isRtl.value, containerRef.value);
7675
+ const scrollSize = getScrollSize(isHorizontal.value, containerRef.value);
7676
+ if (scrollSize <= offsetSize ||
7677
+ // Prevent scrolling by only a couple of pixels, which doesn't look smooth
7678
+ Math.abs(newPosition - scrollPosition) < 16) return;
7679
+ if (isHorizontal.value && isRtl.value && containerRef.value) {
7680
+ const {
7681
+ scrollWidth,
7682
+ offsetWidth: containerWidth
7683
+ } = containerRef.value;
7684
+ newPosition = scrollWidth - containerWidth - newPosition;
7685
+ }
7686
+ if (isHorizontal.value) {
7687
+ goTo.horizontal(newPosition, goToOptions.value);
7688
+ } else {
7689
+ goTo(newPosition, goToOptions.value);
7690
+ }
7495
7691
  }
7496
- function onScroll() {
7497
- if (!containerRef.value) return;
7498
- containerRef.value[isHorizontal.value ? 'scrollLeft' : 'scrollTop'] = 0;
7692
+ function onScroll(e) {
7693
+ const {
7694
+ scrollTop,
7695
+ scrollLeft
7696
+ } = e.target;
7697
+ scrollOffset.value = isHorizontal.value ? scrollLeft : scrollTop;
7499
7698
  }
7500
- const isFocused = shallowRef(false);
7501
7699
  function onFocusin(e) {
7502
7700
  isFocused.value = true;
7503
7701
  if (!isOverflowing.value || !contentRef.value) return;
@@ -7507,14 +7705,7 @@ const VSlideGroup = genericComponent()({
7507
7705
  for (const el of e.composedPath()) {
7508
7706
  for (const item of contentRef.value.children) {
7509
7707
  if (item === el) {
7510
- scrollOffset.value = calculateUpdatedOffset({
7511
- selectedElement: item,
7512
- containerSize: containerSize.value,
7513
- contentSize: contentSize.value,
7514
- isRtl: isRtl.value,
7515
- currentScrollOffset: scrollOffset.value,
7516
- isHorizontal: isHorizontal.value
7517
- });
7708
+ scrollToChildren(item);
7518
7709
  return;
7519
7710
  }
7520
7711
  }
@@ -7523,66 +7714,79 @@ const VSlideGroup = genericComponent()({
7523
7714
  function onFocusout(e) {
7524
7715
  isFocused.value = false;
7525
7716
  }
7717
+
7718
+ // Affix clicks produce onFocus that we have to ignore to avoid extra scrollToChildren
7719
+ let ignoreFocusEvent = false;
7526
7720
  function onFocus(e) {
7527
- if (!isFocused.value && !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget))) focus();
7721
+ if (!ignoreFocusEvent && !isFocused.value && !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget))) focus();
7722
+ ignoreFocusEvent = false;
7723
+ }
7724
+ function onFocusAffixes() {
7725
+ ignoreFocusEvent = true;
7528
7726
  }
7529
7727
  function onKeydown(e) {
7530
7728
  if (!contentRef.value) return;
7729
+ function toFocus(location) {
7730
+ e.preventDefault();
7731
+ focus(location);
7732
+ }
7531
7733
  if (isHorizontal.value) {
7532
7734
  if (e.key === 'ArrowRight') {
7533
- focus(isRtl.value ? 'prev' : 'next');
7735
+ toFocus(isRtl.value ? 'prev' : 'next');
7534
7736
  } else if (e.key === 'ArrowLeft') {
7535
- focus(isRtl.value ? 'next' : 'prev');
7737
+ toFocus(isRtl.value ? 'next' : 'prev');
7536
7738
  }
7537
7739
  } else {
7538
7740
  if (e.key === 'ArrowDown') {
7539
- focus('next');
7741
+ toFocus('next');
7540
7742
  } else if (e.key === 'ArrowUp') {
7541
- focus('prev');
7743
+ toFocus('prev');
7542
7744
  }
7543
7745
  }
7544
7746
  if (e.key === 'Home') {
7545
- focus('first');
7747
+ toFocus('first');
7546
7748
  } else if (e.key === 'End') {
7547
- focus('last');
7749
+ toFocus('last');
7548
7750
  }
7549
7751
  }
7550
7752
  function focus(location) {
7551
7753
  if (!contentRef.value) return;
7754
+ let el;
7552
7755
  if (!location) {
7553
7756
  const focusable = focusableChildren(contentRef.value);
7554
- focusable[0]?.focus();
7757
+ el = focusable[0];
7555
7758
  } else if (location === 'next') {
7556
- const el = contentRef.value.querySelector(':focus')?.nextElementSibling;
7557
- if (el) el.focus();else focus('first');
7759
+ el = contentRef.value.querySelector(':focus')?.nextElementSibling;
7760
+ if (!el) return focus('first');
7558
7761
  } else if (location === 'prev') {
7559
- const el = contentRef.value.querySelector(':focus')?.previousElementSibling;
7560
- if (el) el.focus();else focus('last');
7762
+ el = contentRef.value.querySelector(':focus')?.previousElementSibling;
7763
+ if (!el) return focus('last');
7561
7764
  } else if (location === 'first') {
7562
- contentRef.value.firstElementChild?.focus();
7765
+ el = contentRef.value.firstElementChild;
7563
7766
  } else if (location === 'last') {
7564
- contentRef.value.lastElementChild?.focus();
7767
+ el = contentRef.value.lastElementChild;
7768
+ }
7769
+ if (el) {
7770
+ el.focus({
7771
+ preventScroll: true
7772
+ });
7565
7773
  }
7566
7774
  }
7567
7775
  function scrollTo(location) {
7568
- const newAbsoluteOffset = scrollOffset.value + (location === 'prev' ? -1 : 1) * containerSize.value;
7569
- scrollOffset.value = clamp(newAbsoluteOffset, 0, contentSize.value - containerSize.value);
7570
- }
7571
- const contentStyles = computed(() => {
7572
- // This adds friction when scrolling the 'wrong' way when at max offset
7573
- let scrollAmount = scrollOffset.value > contentSize.value - containerSize.value ? -(contentSize.value - containerSize.value) + bias(contentSize.value - containerSize.value - scrollOffset.value) : -scrollOffset.value;
7776
+ const direction = isHorizontal.value && isRtl.value ? -1 : 1;
7777
+ const offsetStep = (location === 'prev' ? -direction : direction) * containerSize.value;
7778
+ let newPosition = scrollOffset.value + offsetStep;
7574
7779
 
7575
- // This adds friction when scrolling the 'wrong' way when at min offset
7576
- if (scrollOffset.value <= 0) {
7577
- scrollAmount = bias(-scrollOffset.value);
7780
+ // TODO: improve it
7781
+ if (isHorizontal.value && isRtl.value && containerRef.value) {
7782
+ const {
7783
+ scrollWidth,
7784
+ offsetWidth: containerWidth
7785
+ } = containerRef.value;
7786
+ newPosition += scrollWidth - containerWidth;
7578
7787
  }
7579
- const sign = isRtl.value && isHorizontal.value ? -1 : 1;
7580
- return {
7581
- transform: `translate${isHorizontal.value ? 'X' : 'Y'}(${sign * scrollAmount}px)`,
7582
- transition: disableTransition.value ? 'none' : '',
7583
- willChange: disableTransition.value ? 'transform' : ''
7584
- };
7585
- });
7788
+ scrollToPosition(newPosition);
7789
+ }
7586
7790
  const slotProps = computed(() => ({
7587
7791
  next: group.next,
7588
7792
  prev: group.prev,
@@ -7616,11 +7820,17 @@ const VSlideGroup = genericComponent()({
7616
7820
  }
7617
7821
  });
7618
7822
  const hasPrev = computed(() => {
7619
- return Math.abs(scrollOffset.value) > 0;
7823
+ // 1 pixel in reserve, may be lost after rounding
7824
+ return Math.abs(scrollOffset.value) > 1;
7620
7825
  });
7621
7826
  const hasNext = computed(() => {
7622
- // Check one scroll ahead to know the width of right-most item
7623
- return contentSize.value > Math.abs(scrollOffset.value) + containerSize.value;
7827
+ if (!containerRef.value) return false;
7828
+ const scrollSize = getScrollSize(isHorizontal.value, containerRef.value);
7829
+ const clientSize = getClientSize(isHorizontal.value, containerRef.value);
7830
+ const scrollSizeMax = scrollSize - clientSize;
7831
+
7832
+ // 1 pixel in reserve, may be lost after rounding
7833
+ return scrollSizeMax - Math.abs(scrollOffset.value) > 1;
7624
7834
  });
7625
7835
  useRender(() => createVNode(props.tag, {
7626
7836
  "class": ['v-slide-group', {
@@ -7637,6 +7847,7 @@ const VSlideGroup = genericComponent()({
7637
7847
  "class": ['v-slide-group__prev', {
7638
7848
  'v-slide-group__prev--disabled': !hasPrev.value
7639
7849
  }],
7850
+ "onMousedown": onFocusAffixes,
7640
7851
  "onClick": () => hasPrev.value && scrollTo('prev')
7641
7852
  }, [slots.prev?.(slotProps.value) ?? createVNode(VFadeTransition, null, {
7642
7853
  default: () => [createVNode(VIcon, {
@@ -7650,10 +7861,6 @@ const VSlideGroup = genericComponent()({
7650
7861
  }, [createVNode("div", {
7651
7862
  "ref": contentRef,
7652
7863
  "class": "v-slide-group__content",
7653
- "style": contentStyles.value,
7654
- "onTouchstartPassive": onTouchstart,
7655
- "onTouchmovePassive": onTouchmove,
7656
- "onTouchendPassive": onTouchend,
7657
7864
  "onFocusin": onFocusin,
7658
7865
  "onFocusout": onFocusout,
7659
7866
  "onKeydown": onKeydown
@@ -7662,6 +7869,7 @@ const VSlideGroup = genericComponent()({
7662
7869
  "class": ['v-slide-group__next', {
7663
7870
  'v-slide-group__next--disabled': !hasNext.value
7664
7871
  }],
7872
+ "onMousedown": onFocusAffixes,
7665
7873
  "onClick": () => hasNext.value && scrollTo('next')
7666
7874
  }, [slots.next?.(slotProps.value) ?? createVNode(VFadeTransition, null, {
7667
7875
  default: () => [createVNode(VIcon, {
@@ -9456,7 +9664,8 @@ const VList = genericComponent()({
9456
9664
  if (!isFocused.value && !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget))) focus();
9457
9665
  }
9458
9666
  function onKeydown(e) {
9459
- if (!contentRef.value) return;
9667
+ const target = e.target;
9668
+ if (!contentRef.value || ['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
9460
9669
  if (e.key === 'ArrowDown') {
9461
9670
  focus('next');
9462
9671
  } else if (e.key === 'ArrowUp') {
@@ -9576,7 +9785,7 @@ function elementToViewport(point, offset) {
9576
9785
  }
9577
9786
 
9578
9787
  /** Get the difference between two points */
9579
- function getOffset$2(a, b) {
9788
+ function getOffset$1(a, b) {
9580
9789
  return {
9581
9790
  x: a.x - b.x,
9582
9791
  y: a.y - b.y
@@ -9823,7 +10032,7 @@ function connectedLocationStrategy(data, props, contentStyles) {
9823
10032
  let {
9824
10033
  x,
9825
10034
  y
9826
- } = getOffset$2(targetPoint, contentPoint);
10035
+ } = getOffset$1(targetPoint, contentPoint);
9827
10036
  switch (_placement.anchor.side) {
9828
10037
  case 'top':
9829
10038
  y -= offset.value[0];
@@ -10361,7 +10570,7 @@ function useActivator(props, _ref) {
10361
10570
  const target = computed(() => {
10362
10571
  if (props.target === 'cursor' && cursorTarget.value) return cursorTarget.value;
10363
10572
  if (targetRef.value) return refElement(targetRef.value);
10364
- return getTarget$1(props.target, vm) || activatorEl.value;
10573
+ return getTarget(props.target, vm) || activatorEl.value;
10365
10574
  });
10366
10575
  const targetEl = computed(() => {
10367
10576
  return Array.isArray(target.value) ? undefined : target.value;
@@ -10433,14 +10642,14 @@ function _useActivator(props, vm, _ref2) {
10433
10642
  }
10434
10643
  function getActivator() {
10435
10644
  let selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : props.activator;
10436
- const activator = getTarget$1(selector, vm);
10645
+ const activator = getTarget(selector, vm);
10437
10646
 
10438
10647
  // The activator should only be a valid element (Ignore comments and text nodes)
10439
10648
  activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : undefined;
10440
10649
  return activatorEl.value;
10441
10650
  }
10442
10651
  }
10443
- function getTarget$1(selector, vm) {
10652
+ function getTarget(selector, vm) {
10444
10653
  if (!selector) return;
10445
10654
  let target;
10446
10655
  if (selector === 'parent') {
@@ -10893,9 +11102,9 @@ const VOverlay = genericComponent()({
10893
11102
  }
10894
11103
  useRender(() => createVNode(Fragment, null, [slots.activator?.({
10895
11104
  isActive: isActive.value,
11105
+ targetRef,
10896
11106
  props: mergeProps({
10897
- ref: activatorRef,
10898
- targetRef
11107
+ ref: activatorRef
10899
11108
  }, activatorEvents.value, props.activatorProps)
10900
11109
  }), isMounted.value && hasContent.value && createVNode(Teleport, {
10901
11110
  "disabled": !teleportTarget.value,
@@ -12374,6 +12583,10 @@ const VSelect = genericComponent()({
12374
12583
  const item = items.value.find(item => item.title.toLowerCase().startsWith(keyboardLookupPrefix));
12375
12584
  if (item !== undefined) {
12376
12585
  model.value = [item];
12586
+ const index = displayItems.value.indexOf(item);
12587
+ IN_BROWSER && window.requestAnimationFrame(() => {
12588
+ index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
12589
+ });
12377
12590
  }
12378
12591
  }
12379
12592
 
@@ -12422,7 +12635,7 @@ const VSelect = genericComponent()({
12422
12635
  vTextFieldRef.value.value = '';
12423
12636
  }
12424
12637
  }
12425
- watch([menu, model], () => {
12638
+ watch(menu, () => {
12426
12639
  if (!props.hideSelected && menu.value && model.value.length) {
12427
12640
  const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
12428
12641
  IN_BROWSER && window.requestAnimationFrame(() => {
@@ -12876,16 +13089,14 @@ const VAutocomplete = genericComponent()({
12876
13089
  listRef.value?.focus('next');
12877
13090
  }
12878
13091
  if (['Backspace', 'Delete'].includes(e.key)) {
12879
- if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
12880
- if (selectionIndex.value < 0) {
12881
- if (e.key === 'Backspace' && !search.value) {
12882
- selectionIndex.value = length - 1;
12883
- }
12884
- return;
13092
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0 && !search.value) return select(model.value[0], false);
13093
+ if (~selectionIndex.value) {
13094
+ const originalSelectionIndex = selectionIndex.value;
13095
+ select(model.value[selectionIndex.value], false);
13096
+ selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
13097
+ } else if (e.key === 'Backspace' && !search.value) {
13098
+ selectionIndex.value = length - 1;
12885
13099
  }
12886
- const originalSelectionIndex = selectionIndex.value;
12887
- select(model.value[selectionIndex.value], false);
12888
- selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
12889
13100
  }
12890
13101
  if (!props.multiple) return;
12891
13102
  if (e.key === 'ArrowLeft') {
@@ -12933,7 +13144,7 @@ const VAutocomplete = genericComponent()({
12933
13144
  listHasFocus.value = false;
12934
13145
  }
12935
13146
  function onUpdateModelValue(v) {
12936
- if (v == null || v === '' && !props.multiple) model.value = [];
13147
+ if (v == null || v === '' && !props.multiple && !hasSelectionSlot.value) model.value = [];
12937
13148
  }
12938
13149
  const isSelecting = shallowRef(false);
12939
13150
 
@@ -13573,12 +13784,12 @@ const VDialog = genericComponent()({
13573
13784
  name: 'VDialog',
13574
13785
  props: makeVDialogProps(),
13575
13786
  emits: {
13576
- 'click:outside': e => true,
13577
13787
  'update:modelValue': value => true,
13578
13788
  afterLeave: () => true
13579
13789
  },
13580
13790
  setup(props, _ref) {
13581
13791
  let {
13792
+ emit,
13582
13793
  slots
13583
13794
  } = _ref;
13584
13795
  const isActive = useProxiedModel(props, 'modelValue');
@@ -13621,6 +13832,9 @@ const VDialog = genericComponent()({
13621
13832
  });
13622
13833
  }
13623
13834
  }
13835
+ function onAfterLeave() {
13836
+ emit('afterLeave');
13837
+ }
13624
13838
  watch(isActive, async val => {
13625
13839
  if (!val) {
13626
13840
  await nextTick();
@@ -13652,7 +13866,8 @@ const VDialog = genericComponent()({
13652
13866
  "activatorProps": activatorProps,
13653
13867
  "contentProps": contentProps,
13654
13868
  "role": "dialog",
13655
- "onAfterEnter": onAfterEnter
13869
+ "onAfterEnter": onAfterEnter,
13870
+ "onAfterLeave": onAfterLeave
13656
13871
  }, scopeId), {
13657
13872
  activator: slots.activator,
13658
13873
  default: function () {
@@ -14740,7 +14955,7 @@ const VCarouselItem = genericComponent()({
14740
14955
  const imgProps = VImg.filterProps(props);
14741
14956
  const windowItemProps = VWindowItem.filterProps(props);
14742
14957
  return createVNode(VWindowItem, mergeProps({
14743
- "class": "v-carousel-item"
14958
+ "class": ['v-carousel-item', props.class]
14744
14959
  }, windowItemProps), {
14745
14960
  default: () => [createVNode(VImg, mergeProps(attrs, imgProps), slots)]
14746
14961
  });
@@ -15189,7 +15404,7 @@ const VColorPickerEdit = defineComponent({
15189
15404
  // Types
15190
15405
 
15191
15406
  const VSliderSymbol = Symbol.for('vuetify:v-slider');
15192
- function getOffset$1(e, el, direction) {
15407
+ function getOffset(e, el, direction) {
15193
15408
  const vertical = direction === 'vertical';
15194
15409
  const rect = el.getBoundingClientRect();
15195
15410
  const touch = 'touches' in e ? e.touches[0] : e;
@@ -15348,7 +15563,7 @@ const useSlider = _ref => {
15348
15563
  activeThumbRef.value.focus();
15349
15564
  mousePressed.value = true;
15350
15565
  if (activeThumbRef.value.contains(e.target)) {
15351
- startOffset.value = getOffset$1(e, activeThumbRef.value, props.direction);
15566
+ startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
15352
15567
  } else {
15353
15568
  startOffset.value = 0;
15354
15569
  onSliderMove({
@@ -16745,16 +16960,14 @@ const VCombobox = genericComponent()({
16745
16960
  if (hasSelectionSlot.value) _search.value = '';
16746
16961
  }
16747
16962
  if (['Backspace', 'Delete'].includes(e.key)) {
16748
- if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
16749
- if (selectionIndex.value < 0) {
16750
- if (e.key === 'Backspace' && !search.value) {
16751
- selectionIndex.value = length - 1;
16752
- }
16753
- return;
16963
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0 && !search.value) return select(model.value[0], false);
16964
+ if (~selectionIndex.value) {
16965
+ const originalSelectionIndex = selectionIndex.value;
16966
+ select(model.value[selectionIndex.value], false);
16967
+ selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
16968
+ } else if (e.key === 'Backspace' && !search.value) {
16969
+ selectionIndex.value = length - 1;
16754
16970
  }
16755
- const originalSelectionIndex = selectionIndex.value;
16756
- select(model.value[selectionIndex.value], false);
16757
- selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
16758
16971
  }
16759
16972
  if (!props.multiple) return;
16760
16973
  if (e.key === 'ArrowLeft') {
@@ -16823,7 +17036,7 @@ const VCombobox = genericComponent()({
16823
17036
  listHasFocus.value = false;
16824
17037
  }
16825
17038
  function onUpdateModelValue(v) {
16826
- if (v == null || v === '' && !props.multiple) model.value = [];
17039
+ if (v == null || v === '' && !props.multiple && !hasSelectionSlot.value) model.value = [];
16827
17040
  }
16828
17041
  watch(isFocused, (val, oldVal) => {
16829
17042
  if (val || val === oldVal) return;
@@ -18395,110 +18608,6 @@ function getWeek(adapter, value) {
18395
18608
  return Math.floor(diffDays / 7) + 1;
18396
18609
  }
18397
18610
 
18398
- // Utilities
18399
-
18400
- // Types
18401
-
18402
- const GoToSymbol = Symbol.for('vuetify:goto');
18403
- function genDefaults() {
18404
- return {
18405
- container: undefined,
18406
- duration: 300,
18407
- layout: false,
18408
- offset: 0,
18409
- easing: 'easeInOutCubic',
18410
- patterns: {
18411
- linear: t => t,
18412
- easeInQuad: t => t ** 2,
18413
- easeOutQuad: t => t * (2 - t),
18414
- easeInOutQuad: t => t < 0.5 ? 2 * t ** 2 : -1 + (4 - 2 * t) * t,
18415
- easeInCubic: t => t ** 3,
18416
- easeOutCubic: t => --t ** 3 + 1,
18417
- easeInOutCubic: t => t < 0.5 ? 4 * t ** 3 : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,
18418
- easeInQuart: t => t ** 4,
18419
- easeOutQuart: t => 1 - --t ** 4,
18420
- easeInOutQuart: t => t < 0.5 ? 8 * t ** 4 : 1 - 8 * --t ** 4,
18421
- easeInQuint: t => t ** 5,
18422
- easeOutQuint: t => 1 + --t ** 5,
18423
- easeInOutQuint: t => t < 0.5 ? 16 * t ** 5 : 1 + 16 * --t ** 5
18424
- }
18425
- };
18426
- }
18427
- function getContainer(el) {
18428
- return getTarget(el) ?? (document.scrollingElement || document.body);
18429
- }
18430
- function getTarget(el) {
18431
- return typeof el === 'string' ? document.querySelector(el) : refElement(el);
18432
- }
18433
- function getOffset(target, horizontal, rtl) {
18434
- if (typeof target === 'number') return horizontal && rtl ? -target : target;
18435
- let el = getTarget(target);
18436
- let totalOffset = 0;
18437
- while (el) {
18438
- totalOffset += horizontal ? el.offsetLeft : el.offsetTop;
18439
- el = el.offsetParent;
18440
- }
18441
- return totalOffset;
18442
- }
18443
- function createGoTo(options, locale) {
18444
- return {
18445
- rtl: locale.isRtl,
18446
- options: mergeDeep(genDefaults(), options)
18447
- };
18448
- }
18449
- async function scrollTo(_target, _options, horizontal, goTo) {
18450
- const property = horizontal ? 'scrollLeft' : 'scrollTop';
18451
- const options = mergeDeep(goTo?.options ?? genDefaults(), _options);
18452
- const rtl = goTo?.rtl.value;
18453
- const target = (typeof _target === 'number' ? _target : getTarget(_target)) ?? 0;
18454
- const container = options.container === 'parent' && target instanceof HTMLElement ? target.parentElement : getContainer(options.container);
18455
- const ease = typeof options.easing === 'function' ? options.easing : options.patterns[options.easing];
18456
- if (!ease) throw new TypeError(`Easing function "${options.easing}" not found.`);
18457
- let targetLocation;
18458
- if (typeof target === 'number') {
18459
- targetLocation = getOffset(target, horizontal, rtl);
18460
- } else {
18461
- targetLocation = getOffset(target, horizontal, rtl) - getOffset(container, horizontal, rtl);
18462
- if (options.layout) {
18463
- const styles = window.getComputedStyle(target);
18464
- const layoutOffset = styles.getPropertyValue('--v-layout-top');
18465
- if (layoutOffset) targetLocation -= parseInt(layoutOffset, 10);
18466
- }
18467
- }
18468
- targetLocation += options.offset;
18469
- const startLocation = container[property] ?? 0;
18470
- if (targetLocation === startLocation) return Promise.resolve(targetLocation);
18471
- const startTime = performance.now();
18472
- return new Promise(resolve => requestAnimationFrame(function step(currentTime) {
18473
- const timeElapsed = currentTime - startTime;
18474
- const progress = timeElapsed / options.duration;
18475
- const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(clamp(progress, 0, 1)));
18476
- container[property] = location;
18477
-
18478
- // Allow for some jitter if target time has elapsed
18479
- if (progress >= 1 && Math.abs(location - container[property]) < 10) {
18480
- return resolve(targetLocation);
18481
- } else if (progress > 2) {
18482
- // The target might not be reachable
18483
- consoleWarn('Scroll target is not reachable');
18484
- return resolve(container[property]);
18485
- }
18486
- requestAnimationFrame(step);
18487
- }));
18488
- }
18489
- function useGoTo() {
18490
- let _options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
18491
- const goTo = inject$1(GoToSymbol);
18492
- if (!goTo) throw new Error('[Vuetify] Could not find injected goto instance');
18493
- async function go(target, options) {
18494
- return scrollTo(target, mergeDeep(_options, options), false, goTo);
18495
- }
18496
- go.horizontal = async (target, options) => {
18497
- return scrollTo(target, mergeDeep(_options, options), true, goTo);
18498
- };
18499
- return go;
18500
- }
18501
-
18502
18611
  // Composables
18503
18612
 
18504
18613
  // Types
@@ -19649,6 +19758,7 @@ const makeVDataTableHeadersProps = propsFactory({
19649
19758
  headerProps: {
19650
19759
  type: Object
19651
19760
  },
19761
+ ...makeDisplayProps(),
19652
19762
  ...makeLoaderProps()
19653
19763
  }, 'VDataTableHeaders');
19654
19764
  const VDataTableHeaders = genericComponent()({
@@ -19658,6 +19768,9 @@ const VDataTableHeaders = genericComponent()({
19658
19768
  let {
19659
19769
  slots
19660
19770
  } = _ref;
19771
+ const {
19772
+ t
19773
+ } = useLocale();
19661
19774
  const {
19662
19775
  toggleSort,
19663
19776
  sortBy,
@@ -19693,6 +19806,10 @@ const VDataTableHeaders = genericComponent()({
19693
19806
  backgroundColorClasses,
19694
19807
  backgroundColorStyles
19695
19808
  } = useBackgroundColor(props, 'color');
19809
+ const {
19810
+ displayClasses,
19811
+ mobile
19812
+ } = useDisplay(props);
19696
19813
  const slotProps = computed(() => ({
19697
19814
  headers: headers.value,
19698
19815
  columns: columns.value,
@@ -19704,6 +19821,9 @@ const VDataTableHeaders = genericComponent()({
19704
19821
  selectAll,
19705
19822
  getSortIcon
19706
19823
  }));
19824
+ const headerCellClasses = computed(() => ['v-data-table__th', {
19825
+ 'v-data-table__th--sticky': props.sticky
19826
+ }, displayClasses.value, loaderClasses.value]);
19707
19827
  const VDataTableHeaderCell = _ref2 => {
19708
19828
  let {
19709
19829
  column,
@@ -19715,12 +19835,11 @@ const VDataTableHeaders = genericComponent()({
19715
19835
  return createVNode(VDataTableColumn, mergeProps({
19716
19836
  "tag": "th",
19717
19837
  "align": column.align,
19718
- "class": ['v-data-table__th', {
19838
+ "class": [{
19719
19839
  'v-data-table__th--sortable': column.sortable,
19720
19840
  'v-data-table__th--sorted': isSorted(column),
19721
- 'v-data-table__th--fixed': column.fixed,
19722
- 'v-data-table__th--sticky': props.sticky
19723
- }, loaderClasses.value],
19841
+ 'v-data-table__th--fixed': column.fixed
19842
+ }, ...headerCellClasses.value],
19724
19843
  "style": {
19725
19844
  width: convertToUnit(column.width),
19726
19845
  minWidth: convertToUnit(column.minWidth),
@@ -19769,8 +19888,53 @@ const VDataTableHeaders = genericComponent()({
19769
19888
  }
19770
19889
  });
19771
19890
  };
19891
+ const VDataTableMobileHeaderCell = () => {
19892
+ const headerProps = mergeProps(props.headerProps ?? {} ?? {});
19893
+ const displayItems = computed(() => {
19894
+ return columns.value.filter(column => column?.sortable);
19895
+ });
19896
+ const appendIcon = computed(() => {
19897
+ return allSelected.value ? '$checkboxOn' : someSelected.value ? '$checkboxIndeterminate' : '$checkboxOff';
19898
+ });
19899
+ return createVNode(VDataTableColumn, mergeProps({
19900
+ "tag": "th",
19901
+ "class": [...headerCellClasses.value],
19902
+ "colspan": headers.value.length + 1
19903
+ }, headerProps), {
19904
+ default: () => [createVNode("div", {
19905
+ "class": "v-data-table-header__content"
19906
+ }, [createVNode(VSelect, {
19907
+ "chips": true,
19908
+ "class": "v-data-table__td-sort-select",
19909
+ "clearable": true,
19910
+ "density": "default",
19911
+ "items": displayItems.value,
19912
+ "label": t('$vuetify.dataTable.sortBy'),
19913
+ "multiple": props.multiSort,
19914
+ "variant": "underlined",
19915
+ "onClick:clear": () => sortBy.value = [],
19916
+ "appendIcon": appendIcon.value,
19917
+ "onClick:append": () => selectAll(!allSelected.value)
19918
+ }, {
19919
+ ...slots,
19920
+ chip: props => createVNode(VChip, {
19921
+ "onClick": props.item.raw?.sortable ? () => toggleSort(props.item.raw) : undefined,
19922
+ "onMousedown": e => {
19923
+ e.preventDefault();
19924
+ e.stopPropagation();
19925
+ }
19926
+ }, {
19927
+ default: () => [props.item.title, createVNode(VIcon, {
19928
+ "class": ['v-data-table__td-sort-icon', isSorted(props.item.raw) && 'v-data-table__td-sort-icon-active'],
19929
+ "icon": getSortIcon(props.item.raw),
19930
+ "size": "small"
19931
+ }, null)]
19932
+ })
19933
+ })])]
19934
+ });
19935
+ };
19772
19936
  useRender(() => {
19773
- return createVNode(Fragment, null, [slots.headers ? slots.headers(slotProps.value) : headers.value.map((row, y) => createVNode("tr", null, [row.map((column, x) => createVNode(VDataTableHeaderCell, {
19937
+ return mobile.value ? createVNode("tr", null, [createVNode(VDataTableMobileHeaderCell, null, null)]) : createVNode(Fragment, null, [slots.headers ? slots.headers(slotProps.value) : headers.value.map((row, y) => createVNode("tr", null, [row.map((column, x) => createVNode(VDataTableHeaderCell, {
19774
19938
  "column": column,
19775
19939
  "x": x,
19776
19940
  "y": y
@@ -19878,7 +20042,8 @@ const makeVDataTableRowProps = propsFactory({
19878
20042
  cellProps: [Object, Function],
19879
20043
  onClick: EventProp(),
19880
20044
  onContextmenu: EventProp(),
19881
- onDblclick: EventProp()
20045
+ onDblclick: EventProp(),
20046
+ ...makeDisplayProps()
19882
20047
  }, 'VDataTableRow');
19883
20048
  const VDataTableRow = genericComponent()({
19884
20049
  name: 'VDataTableRow',
@@ -19887,27 +20052,40 @@ const VDataTableRow = genericComponent()({
19887
20052
  let {
19888
20053
  slots
19889
20054
  } = _ref;
20055
+ const {
20056
+ displayClasses,
20057
+ mobile
20058
+ } = useDisplay(props, 'v-data-table__tr');
19890
20059
  const {
19891
20060
  isSelected,
19892
- toggleSelect
20061
+ toggleSelect,
20062
+ someSelected,
20063
+ allSelected,
20064
+ selectAll
19893
20065
  } = useSelection();
19894
20066
  const {
19895
20067
  isExpanded,
19896
20068
  toggleExpand
19897
20069
  } = useExpanded();
20070
+ const {
20071
+ toggleSort,
20072
+ sortBy,
20073
+ isSorted
20074
+ } = useSort();
19898
20075
  const {
19899
20076
  columns
19900
20077
  } = useHeaders();
19901
20078
  useRender(() => createVNode("tr", {
19902
20079
  "class": ['v-data-table__tr', {
19903
20080
  'v-data-table__tr--clickable': !!(props.onClick || props.onContextmenu || props.onDblclick)
19904
- }],
20081
+ }, displayClasses.value],
19905
20082
  "onClick": props.onClick,
19906
20083
  "onContextmenu": props.onContextmenu,
19907
20084
  "onDblclick": props.onDblclick
19908
20085
  }, [props.item && columns.value.map((column, i) => {
19909
20086
  const item = props.item;
19910
20087
  const slotName = `item.${column.key}`;
20088
+ const headerSlotName = `header.${column.key}`;
19911
20089
  const slotProps = {
19912
20090
  index: props.index,
19913
20091
  item: item.raw,
@@ -19919,6 +20097,16 @@ const VDataTableRow = genericComponent()({
19919
20097
  isExpanded,
19920
20098
  toggleExpand
19921
20099
  };
20100
+ const columnSlotProps = {
20101
+ column,
20102
+ selectAll,
20103
+ isSorted,
20104
+ toggleSort,
20105
+ sortBy: sortBy.value,
20106
+ someSelected: someSelected.value,
20107
+ allSelected: allSelected.value,
20108
+ getSortIcon: () => ''
20109
+ };
19922
20110
  const cellProps = typeof props.cellProps === 'function' ? props.cellProps({
19923
20111
  index: slotProps.index,
19924
20112
  item: slotProps.item,
@@ -19934,16 +20122,20 @@ const VDataTableRow = genericComponent()({
19934
20122
  }) : column.cellProps;
19935
20123
  return createVNode(VDataTableColumn, mergeProps({
19936
20124
  "align": column.align,
20125
+ "class": {
20126
+ 'v-data-table__td--expanded-row': column.key === 'data-table-expand',
20127
+ 'v-data-table__td--select-row': column.key === 'data-table-select'
20128
+ },
19937
20129
  "fixed": column.fixed,
19938
20130
  "fixedOffset": column.fixedOffset,
19939
20131
  "lastFixed": column.lastFixed,
20132
+ "maxWidth": !mobile.value ? column.maxWidth : undefined,
19940
20133
  "noPadding": column.key === 'data-table-select' || column.key === 'data-table-expand',
19941
- "width": column.width,
19942
- "maxWidth": column.maxWidth,
19943
- "nowrap": column.nowrap
20134
+ "nowrap": column.nowrap,
20135
+ "width": !mobile.value ? column.width : undefined
19944
20136
  }, cellProps, columnCellProps), {
19945
20137
  default: () => {
19946
- if (slots[slotName]) return slots[slotName](slotProps);
20138
+ if (slots[slotName] && !mobile.value) return slots[slotName]?.(slotProps);
19947
20139
  if (column.key === 'data-table-select') {
19948
20140
  return slots['item.data-table-select']?.(slotProps) ?? createVNode(VCheckboxBtn, {
19949
20141
  "disabled": !item.selectable,
@@ -19959,7 +20151,12 @@ const VDataTableRow = genericComponent()({
19959
20151
  "onClick": withModifiers(() => toggleExpand(item), ['stop'])
19960
20152
  }, null);
19961
20153
  }
19962
- return toDisplayString(slotProps.value);
20154
+ const displayValue = toDisplayString(slotProps.value);
20155
+ return !mobile.value ? displayValue : createVNode(Fragment, null, [createVNode("div", {
20156
+ "class": "v-data-table__td-title"
20157
+ }, [slots[headerSlotName]?.(columnSlotProps) ?? column.title]), createVNode("div", {
20158
+ "class": "v-data-table__td-value"
20159
+ }, [slots[slotName]?.(slotProps) ?? displayValue])]);
19963
20160
  }
19964
20161
  });
19965
20162
  })]));
@@ -19984,7 +20181,8 @@ const makeVDataTableRowsProps = propsFactory({
19984
20181
  default: '$vuetify.noDataText'
19985
20182
  },
19986
20183
  rowProps: [Object, Function],
19987
- cellProps: [Object, Function]
20184
+ cellProps: [Object, Function],
20185
+ ...makeDisplayProps()
19988
20186
  }, 'VDataTableRows');
19989
20187
  const VDataTableRows = genericComponent()({
19990
20188
  name: 'VDataTableRows',
@@ -20014,6 +20212,9 @@ const VDataTableRows = genericComponent()({
20014
20212
  const {
20015
20213
  t
20016
20214
  } = useLocale();
20215
+ const {
20216
+ mobile
20217
+ } = useDisplay(props);
20017
20218
  useRender(() => {
20018
20219
  if (props.loading && (!props.items.length || slots.loading)) {
20019
20220
  return createVNode("tr", {
@@ -20068,7 +20269,8 @@ const VDataTableRows = genericComponent()({
20068
20269
  } : undefined,
20069
20270
  index,
20070
20271
  item,
20071
- cellProps: props.cellProps
20272
+ cellProps: props.cellProps,
20273
+ mobile: mobile.value
20072
20274
  }, getPrefixedEventHandlers(attrs, ':row', () => slotProps), typeof props.rowProps === 'function' ? props.rowProps({
20073
20275
  item: slotProps.item,
20074
20276
  index: slotProps.index,
@@ -21895,8 +22097,18 @@ const VDatePicker = genericComponent()({
21895
22097
  emit('update:year', value);
21896
22098
  }
21897
22099
  watch(model, (val, oldVal) => {
21898
- const before = adapter.date(wrapInArray(val)[0]);
21899
- const after = adapter.date(wrapInArray(oldVal)[0]);
22100
+ const before = adapter.date(wrapInArray(oldVal)[oldVal.length - 1]);
22101
+ const after = adapter.date(wrapInArray(val)[val.length - 1]);
22102
+ const newMonth = adapter.getMonth(after);
22103
+ const newYear = adapter.getYear(after);
22104
+ if (newMonth !== month.value) {
22105
+ month.value = newMonth;
22106
+ onUpdateMonth(month.value);
22107
+ }
22108
+ if (newYear !== year.value) {
22109
+ year.value = newYear;
22110
+ onUpdateYear(year.value);
22111
+ }
21900
22112
  isReversing.value = adapter.isBefore(before, after);
21901
22113
  });
21902
22114
  useRender(() => {
@@ -22239,7 +22451,7 @@ const makeVFileInputProps = propsFactory({
22239
22451
  }),
22240
22452
  modelValue: {
22241
22453
  type: [Array, Object],
22242
- default: () => [],
22454
+ default: props => props.multiple ? [] : null,
22243
22455
  validator: val => {
22244
22456
  return wrapInArray(val).every(v => v != null && typeof v === 'object');
22245
22457
  }
@@ -22898,6 +23110,7 @@ const VKbd = createSimpleFunctional('v-kbd');
22898
23110
 
22899
23111
  const makeVLayoutProps = propsFactory({
22900
23112
  ...makeComponentProps(),
23113
+ ...makeDimensionProps(),
22901
23114
  ...makeLayoutProps()
22902
23115
  }, 'VLayout');
22903
23116
  const VLayout = genericComponent()({
@@ -22914,10 +23127,13 @@ const VLayout = genericComponent()({
22914
23127
  items,
22915
23128
  layoutRef
22916
23129
  } = createLayout(props);
23130
+ const {
23131
+ dimensionStyles
23132
+ } = useDimension(props);
22917
23133
  useRender(() => createVNode("div", {
22918
23134
  "ref": layoutRef,
22919
23135
  "class": [layoutClasses.value, props.class],
22920
- "style": [layoutStyles.value, props.style]
23136
+ "style": [dimensionStyles.value, layoutStyles.value, props.style]
22921
23137
  }, [createVNode(Suspense, null, {
22922
23138
  default: () => [createVNode(Fragment, null, [slots.default?.()])]
22923
23139
  })]));
@@ -23280,6 +23496,7 @@ function oops$1() {
23280
23496
 
23281
23497
  function useTouch(_ref) {
23282
23498
  let {
23499
+ el,
23283
23500
  isActive,
23284
23501
  isTemporary,
23285
23502
  width,
@@ -23329,10 +23546,10 @@ function useTouch(_ref) {
23329
23546
  const inTouchZone = position.value === 'left' ? touchX < touchZone : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone : position.value === 'top' ? touchY < touchZone : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone : oops();
23330
23547
  const inElement = isActive.value && (position.value === 'left' ? touchX < width.value : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value : position.value === 'top' ? touchY < width.value : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value : oops());
23331
23548
  if (inTouchZone || inElement || isActive.value && isTemporary.value) {
23332
- maybeDragging = true;
23333
23549
  start = [touchX, touchY];
23334
23550
  offset.value = getOffset(isHorizontal.value ? touchX : touchY, isActive.value);
23335
23551
  dragProgress.value = getProgress(isHorizontal.value ? touchX : touchY);
23552
+ maybeDragging = offset.value > -20 && offset.value < 80;
23336
23553
  endTouch(e);
23337
23554
  addMovement(e);
23338
23555
  }
@@ -23392,6 +23609,18 @@ function useTouch(_ref) {
23392
23609
  transition: 'none'
23393
23610
  } : undefined;
23394
23611
  });
23612
+ useToggleScope(isDragging, () => {
23613
+ const transform = el.value?.style.transform ?? null;
23614
+ const transition = el.value?.style.transition ?? null;
23615
+ watchEffect(() => {
23616
+ el.value?.style.setProperty('transform', dragStyles.value?.transform || 'none');
23617
+ el.value?.style.setProperty('transition', dragStyles.value?.transition || null);
23618
+ });
23619
+ onScopeDispose(() => {
23620
+ el.value?.style.setProperty('transform', transform);
23621
+ el.value?.style.setProperty('transition', transition);
23622
+ });
23623
+ });
23395
23624
  return {
23396
23625
  isDragging,
23397
23626
  dragProgress,
@@ -23430,6 +23659,7 @@ const makeVNavigationDrawerProps = propsFactory({
23430
23659
  },
23431
23660
  image: String,
23432
23661
  temporary: Boolean,
23662
+ persistent: Boolean,
23433
23663
  touchless: Boolean,
23434
23664
  width: {
23435
23665
  type: [Number, String],
@@ -23511,6 +23741,7 @@ const VNavigationDrawer = genericComponent()({
23511
23741
  const location = computed(() => {
23512
23742
  return toPhysical(props.location, isRtl.value);
23513
23743
  });
23744
+ const isPersistent = computed(() => props.persistent);
23514
23745
  const isTemporary = computed(() => !props.permanent && (mobile.value || props.temporary));
23515
23746
  const isSticky = computed(() => props.sticky && !isTemporary.value && location.value !== 'bottom');
23516
23747
  useToggleScope(() => props.expandOnHover && props.rail != null, () => {
@@ -23530,9 +23761,9 @@ const VNavigationDrawer = genericComponent()({
23530
23761
  }
23531
23762
  const {
23532
23763
  isDragging,
23533
- dragProgress,
23534
- dragStyles
23764
+ dragProgress
23535
23765
  } = useTouch({
23766
+ el: rootEl,
23536
23767
  isActive,
23537
23768
  isTemporary,
23538
23769
  width,
@@ -23543,6 +23774,7 @@ const VNavigationDrawer = genericComponent()({
23543
23774
  const size = isTemporary.value ? 0 : props.rail && props.expandOnHover ? Number(props.railWidth) : width.value;
23544
23775
  return isDragging.value ? size * dragProgress.value : size;
23545
23776
  });
23777
+ const elementSize = computed(() => ['top', 'bottom'].includes(props.location) ? 0 : width.value);
23546
23778
  const {
23547
23779
  layoutItemStyles,
23548
23780
  layoutItemScrimStyles,
@@ -23552,7 +23784,7 @@ const VNavigationDrawer = genericComponent()({
23552
23784
  order: computed(() => parseInt(props.order, 10)),
23553
23785
  position: location,
23554
23786
  layoutSize,
23555
- elementSize: width,
23787
+ elementSize,
23556
23788
  active: computed(() => isActive.value || isDragging.value),
23557
23789
  disableTransitions: computed(() => isDragging.value),
23558
23790
  absolute: computed(() =>
@@ -23594,10 +23826,13 @@ const VNavigationDrawer = genericComponent()({
23594
23826
  'v-navigation-drawer--is-hovering': isHovering.value,
23595
23827
  'v-navigation-drawer--rail': props.rail,
23596
23828
  'v-navigation-drawer--temporary': isTemporary.value,
23829
+ 'v-navigation-drawer--persistent': isPersistent.value,
23597
23830
  'v-navigation-drawer--active': isActive.value,
23598
23831
  'v-navigation-drawer--sticky': isSticky.value
23599
23832
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, displayClasses.value, elevationClasses.value, roundedClasses.value, props.class],
23600
- "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
23833
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, stickyStyles.value, props.style, ['top', 'bottom'].includes(location.value) ? {
23834
+ height: 'auto'
23835
+ } : {}]
23601
23836
  }, scopeId, attrs), {
23602
23837
  default: () => [hasImage && createVNode("div", {
23603
23838
  "key": "image",
@@ -23632,7 +23867,10 @@ const VNavigationDrawer = genericComponent()({
23632
23867
  default: () => [isTemporary.value && (isDragging.value || isActive.value) && !!props.scrim && createVNode("div", mergeProps({
23633
23868
  "class": ['v-navigation-drawer__scrim', scrimColor.backgroundColorClasses.value],
23634
23869
  "style": [scrimStyles.value, scrimColor.backgroundColorStyles.value],
23635
- "onClick": () => isActive.value = false
23870
+ "onClick": () => {
23871
+ if (isPersistent.value) return;
23872
+ isActive.value = false;
23873
+ }
23636
23874
  }, scopeId), null)]
23637
23875
  })]);
23638
23876
  });
@@ -24113,8 +24351,8 @@ const VRangeSlider = genericComponent()({
24113
24351
  } = useRtl();
24114
24352
  function getActiveThumb(e) {
24115
24353
  if (!startThumbRef.value || !stopThumbRef.value) return;
24116
- const startOffset = getOffset$1(e, startThumbRef.value.$el, props.direction);
24117
- const stopOffset = getOffset$1(e, stopThumbRef.value.$el, props.direction);
24354
+ const startOffset = getOffset(e, startThumbRef.value.$el, props.direction);
24355
+ const stopOffset = getOffset(e, stopThumbRef.value.$el, props.direction);
24118
24356
  const a = Math.abs(startOffset);
24119
24357
  const b = Math.abs(stopOffset);
24120
24358
  return a < b || a === b && startOffset < 0 ? startThumbRef.value.$el : stopThumbRef.value.$el;
@@ -24709,9 +24947,6 @@ const VSnackbar = genericComponent()({
24709
24947
  slots
24710
24948
  } = _ref;
24711
24949
  const isActive = useProxiedModel(props, 'modelValue');
24712
- const {
24713
- locationStyles
24714
- } = useLocation(props);
24715
24950
  const {
24716
24951
  positionClasses
24717
24952
  } = usePosition(props);
@@ -24733,6 +24968,15 @@ const VSnackbar = genericComponent()({
24733
24968
  const overlay = ref();
24734
24969
  const timerRef = ref();
24735
24970
  const isHovering = shallowRef(false);
24971
+ const startY = shallowRef(0);
24972
+ const mainStyles = ref();
24973
+ const hasLayout = inject$1(VuetifyLayoutKey, undefined);
24974
+ useToggleScope(() => !!hasLayout, () => {
24975
+ const layout = useLayout();
24976
+ watchEffect(() => {
24977
+ mainStyles.value = layout.mainStyles.value;
24978
+ });
24979
+ });
24736
24980
  watch(isActive, startTimeout);
24737
24981
  watch(() => props.timeout, startTimeout);
24738
24982
  onMounted(() => {
@@ -24762,6 +25006,20 @@ const VSnackbar = genericComponent()({
24762
25006
  isHovering.value = false;
24763
25007
  startTimeout();
24764
25008
  }
25009
+ function onTouchstart(event) {
25010
+ startY.value = event.touches[0].clientY;
25011
+ }
25012
+ function onTouchend(event) {
25013
+ if (Math.abs(startY.value - event.changedTouches[0].clientY) > 50) {
25014
+ isActive.value = false;
25015
+ }
25016
+ }
25017
+ const locationClasses = computed(() => {
25018
+ return props.location.split(' ').reduce((acc, loc) => {
25019
+ acc[`v-snackbar--${loc}`] = true;
25020
+ return acc;
25021
+ }, {});
25022
+ });
24765
25023
  useRender(() => {
24766
25024
  const overlayProps = VOverlay.filterProps(props);
24767
25025
  const hasContent = !!(slots.default || slots.text || props.text);
@@ -24772,14 +25030,14 @@ const VSnackbar = genericComponent()({
24772
25030
  'v-snackbar--multi-line': props.multiLine && !props.vertical,
24773
25031
  'v-snackbar--timer': !!props.timer,
24774
25032
  'v-snackbar--vertical': props.vertical
24775
- }, positionClasses.value, props.class],
24776
- "style": props.style
25033
+ }, locationClasses.value, positionClasses.value, props.class],
25034
+ "style": [mainStyles.value, props.style]
24777
25035
  }, overlayProps, {
24778
25036
  "modelValue": isActive.value,
24779
25037
  "onUpdate:modelValue": $event => isActive.value = $event,
24780
25038
  "contentProps": mergeProps({
24781
25039
  class: ['v-snackbar__wrapper', themeClasses.value, colorClasses.value, roundedClasses.value, variantClasses.value],
24782
- style: [locationStyles.value, colorStyles.value],
25040
+ style: [colorStyles.value],
24783
25041
  onPointerenter,
24784
25042
  onPointerleave
24785
25043
  }, overlayProps.contentProps),
@@ -24787,7 +25045,9 @@ const VSnackbar = genericComponent()({
24787
25045
  "noClickAnimation": true,
24788
25046
  "scrim": false,
24789
25047
  "scrollStrategy": "none",
24790
- "_disableGlobalStack": true
25048
+ "_disableGlobalStack": true,
25049
+ "onTouchstartPassive": onTouchstart,
25050
+ "onTouchend": onTouchend
24791
25051
  }, scopeId), {
24792
25052
  default: () => [genOverlays(false, 'v-snackbar'), props.timer && !isHovering.value && createVNode("div", {
24793
25053
  "key": "timer",
@@ -26663,7 +26923,7 @@ function useDirectiveComponent(component, props) {
26663
26923
  function mountComponent(component, props) {
26664
26924
  return function (el, binding, vnode) {
26665
26925
  const _props = typeof props === 'function' ? props(binding) : props;
26666
- const text = binding.value?.text ?? binding.value;
26926
+ const text = binding.value?.text ?? binding.value ?? _props?.text;
26667
26927
  const value = isObject(binding.value) ? binding.value : {};
26668
26928
 
26669
26929
  // Get the children from the props or directive value, or the element's children
@@ -26672,7 +26932,9 @@ function mountComponent(component, props) {
26672
26932
  // If vnode.ctx is the same as the instance, then we're bound to a plain element
26673
26933
  // and need to find the nearest parent component instance to inherit provides from
26674
26934
  const provides = (vnode.ctx === binding.instance.$ ? findComponentParent(vnode, binding.instance.$)?.provides : vnode.ctx?.provides) ?? binding.instance.$.provides;
26675
- const node = h(component, mergeProps(_props, value), children);
26935
+ const node = h(component, mergeProps(_props, value), {
26936
+ default: () => children
26937
+ });
26676
26938
  node.appContext = Object.assign(Object.create(null), binding.instance.$.appContext, {
26677
26939
  provides
26678
26940
  });
@@ -26831,7 +27093,7 @@ function createVuetify$1() {
26831
27093
  goTo
26832
27094
  };
26833
27095
  }
26834
- const version$1 = "3.6.0-alpha.2";
27096
+ const version$1 = "3.6.0";
26835
27097
  createVuetify$1.version = version$1;
26836
27098
 
26837
27099
  // Vue's inject() can only be used in setup
@@ -26856,7 +27118,7 @@ const createVuetify = function () {
26856
27118
  ...options
26857
27119
  });
26858
27120
  };
26859
- const version = "3.6.0-alpha.2";
27121
+ const version = "3.6.0";
26860
27122
  createVuetify.version = version;
26861
27123
 
26862
27124
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };