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
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
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
  */
@@ -2223,10 +2223,12 @@
2223
2223
  const isHorizontal = position.value === 'left' || position.value === 'right';
2224
2224
  const isOppositeHorizontal = position.value === 'right';
2225
2225
  const isOppositeVertical = position.value === 'bottom';
2226
+ const size = elementSize.value ?? layoutSize.value;
2227
+ const unit = size === 0 ? '%' : 'px';
2226
2228
  const styles = {
2227
2229
  [position.value]: 0,
2228
2230
  zIndex: zIndex.value,
2229
- transform: `translate${isHorizontal ? 'X' : 'Y'}(${(active.value ? 0 : -(elementSize.value ?? layoutSize.value)) * (isOppositeHorizontal || isOppositeVertical ? -1 : 1)}px)`,
2231
+ transform: `translate${isHorizontal ? 'X' : 'Y'}(${(active.value ? 0 : -(size === 0 ? 100 : size)) * (isOppositeHorizontal || isOppositeVertical ? -1 : 1)}${unit})`,
2230
2232
  position: absolute.value || rootZIndex.value !== ROOT_ZINDEX ? 'absolute' : 'fixed',
2231
2233
  ...(transitionsEnabled.value ? undefined : {
2232
2234
  transition: 'none'
@@ -2366,6 +2368,7 @@
2366
2368
  badge: 'Badge',
2367
2369
  open: 'Open',
2368
2370
  close: 'Close',
2371
+ dismiss: 'Dismiss',
2369
2372
  confirmEdit: {
2370
2373
  ok: 'OK',
2371
2374
  cancel: 'Cancel'
@@ -4596,6 +4599,7 @@
4596
4599
  const index = children.indexOf(vm);
4597
4600
  if (vue.unref(unwrapped.value) == null) {
4598
4601
  unwrapped.value = index;
4602
+ unwrapped.useIndexAsValue = true;
4599
4603
  }
4600
4604
  if (index > -1) {
4601
4605
  items.splice(index, 0, unwrapped);
@@ -4628,6 +4632,14 @@
4628
4632
  vue.onBeforeUnmount(() => {
4629
4633
  isUnmounted = true;
4630
4634
  });
4635
+ vue.onUpdated(() => {
4636
+ // #19655 update the items that use the index as the value.
4637
+ for (let i = 0; i < items.length; i++) {
4638
+ if (items[i].useIndexAsValue) {
4639
+ items[i].value = i;
4640
+ }
4641
+ }
4642
+ });
4631
4643
  function select(id, value) {
4632
4644
  const item = items.find(item => item.id === id);
4633
4645
  if (value && item?.disabled) return;
@@ -5010,6 +5022,65 @@
5010
5022
  }
5011
5023
  });
5012
5024
 
5025
+ // Composables
5026
+
5027
+ // Types
5028
+
5029
+ const oppositeMap = {
5030
+ center: 'center',
5031
+ top: 'bottom',
5032
+ bottom: 'top',
5033
+ left: 'right',
5034
+ right: 'left'
5035
+ };
5036
+ const makeLocationProps = propsFactory({
5037
+ location: String
5038
+ }, 'location');
5039
+ function useLocation(props) {
5040
+ let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
5041
+ let offset = arguments.length > 2 ? arguments[2] : undefined;
5042
+ const {
5043
+ isRtl
5044
+ } = useRtl();
5045
+ const locationStyles = vue.computed(() => {
5046
+ if (!props.location) return {};
5047
+ const {
5048
+ side,
5049
+ align
5050
+ } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
5051
+ function getOffset(side) {
5052
+ return offset ? offset(side) : 0;
5053
+ }
5054
+ const styles = {};
5055
+ if (side !== 'center') {
5056
+ if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
5057
+ }
5058
+ if (align !== 'center') {
5059
+ if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
5060
+ } else {
5061
+ if (side === 'center') styles.top = styles.left = '50%';else {
5062
+ styles[{
5063
+ top: 'left',
5064
+ bottom: 'left',
5065
+ left: 'top',
5066
+ right: 'top'
5067
+ }[side]] = '50%';
5068
+ }
5069
+ styles.transform = {
5070
+ top: 'translateX(-50%)',
5071
+ bottom: 'translateX(-50%)',
5072
+ left: 'translateY(-50%)',
5073
+ right: 'translateY(-50%)',
5074
+ center: 'translate(-50%, -50%)'
5075
+ }[side];
5076
+ }
5077
+ return styles;
5078
+ });
5079
+ return {
5080
+ locationStyles
5081
+ };
5082
+ }
5083
+
5013
5084
  const makeVProgressLinearProps = propsFactory({
5014
5085
  absolute: Boolean,
5015
5086
  active: {
@@ -5045,6 +5116,9 @@
5045
5116
  striped: Boolean,
5046
5117
  roundedBar: Boolean,
5047
5118
  ...makeComponentProps(),
5119
+ ...makeLocationProps({
5120
+ location: 'top'
5121
+ }),
5048
5122
  ...makeRoundedProps(),
5049
5123
  ...makeTagProps(),
5050
5124
  ...makeThemeProps()
@@ -5067,6 +5141,9 @@
5067
5141
  const {
5068
5142
  themeClasses
5069
5143
  } = provideTheme(props);
5144
+ const {
5145
+ locationStyles
5146
+ } = useLocation(props);
5070
5147
  const {
5071
5148
  textColorClasses,
5072
5149
  textColorStyles
@@ -5117,8 +5194,11 @@
5117
5194
  'v-progress-linear--striped': props.striped
5118
5195
  }, roundedClasses.value, themeClasses.value, rtlClasses.value, props.class],
5119
5196
  "style": [{
5197
+ bottom: props.location === 'bottom' ? 0 : undefined,
5198
+ top: props.location === 'top' ? 0 : undefined,
5120
5199
  height: props.active ? convertToUnit(height.value) : 0,
5121
- '--v-progress-linear-height': convertToUnit(height.value)
5200
+ '--v-progress-linear-height': convertToUnit(height.value),
5201
+ ...(props.absolute ? locationStyles.value : {})
5122
5202
  }, props.style],
5123
5203
  "role": "progressbar",
5124
5204
  "aria-hidden": props.active ? 'false' : 'true',
@@ -5210,65 +5290,6 @@
5210
5290
  }, null)]);
5211
5291
  }
5212
5292
 
5213
- // Composables
5214
-
5215
- // Types
5216
-
5217
- const oppositeMap = {
5218
- center: 'center',
5219
- top: 'bottom',
5220
- bottom: 'top',
5221
- left: 'right',
5222
- right: 'left'
5223
- };
5224
- const makeLocationProps = propsFactory({
5225
- location: String
5226
- }, 'location');
5227
- function useLocation(props) {
5228
- let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
5229
- let offset = arguments.length > 2 ? arguments[2] : undefined;
5230
- const {
5231
- isRtl
5232
- } = useRtl();
5233
- const locationStyles = vue.computed(() => {
5234
- if (!props.location) return {};
5235
- const {
5236
- side,
5237
- align
5238
- } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
5239
- function getOffset(side) {
5240
- return offset ? offset(side) : 0;
5241
- }
5242
- const styles = {};
5243
- if (side !== 'center') {
5244
- if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
5245
- }
5246
- if (align !== 'center') {
5247
- if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
5248
- } else {
5249
- if (side === 'center') styles.top = styles.left = '50%';else {
5250
- styles[{
5251
- top: 'left',
5252
- bottom: 'left',
5253
- left: 'top',
5254
- right: 'top'
5255
- }[side]] = '50%';
5256
- }
5257
- styles.transform = {
5258
- top: 'translateX(-50%)',
5259
- bottom: 'translateX(-50%)',
5260
- left: 'translateY(-50%)',
5261
- right: 'translateY(-50%)',
5262
- center: 'translate(-50%, -50%)'
5263
- }[side];
5264
- }
5265
- return styles;
5266
- });
5267
- return {
5268
- locationStyles
5269
- };
5270
- }
5271
-
5272
5293
  // Utilities
5273
5294
 
5274
5295
  // Types
@@ -5696,6 +5717,7 @@
5696
5717
  prependIcon: IconValue,
5697
5718
  appendIcon: IconValue,
5698
5719
  block: Boolean,
5720
+ readonly: Boolean,
5699
5721
  slim: Boolean,
5700
5722
  stacked: Boolean,
5701
5723
  ripple: {
@@ -5817,6 +5839,7 @@
5817
5839
  'v-btn--flat': props.flat,
5818
5840
  'v-btn--icon': !!props.icon,
5819
5841
  'v-btn--loading': props.loading,
5842
+ 'v-btn--readonly': props.readonly,
5820
5843
  'v-btn--slim': props.slim,
5821
5844
  'v-btn--stacked': props.stacked
5822
5845
  }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
@@ -5824,7 +5847,7 @@
5824
5847
  "aria-busy": props.loading ? true : undefined,
5825
5848
  "disabled": isDisabled.value || undefined,
5826
5849
  "href": link.href.value,
5827
- "tabindex": props.loading ? -1 : undefined,
5850
+ "tabindex": props.loading || props.readonly ? -1 : undefined,
5828
5851
  "onClick": onClick,
5829
5852
  "value": valueAttr.value
5830
5853
  }, {
@@ -6995,6 +7018,7 @@
6995
7018
  ...makeComponentProps(),
6996
7019
  ...makeDensityProps(),
6997
7020
  ...only(makeDimensionProps(), ['maxWidth', 'minWidth', 'width']),
7021
+ ...makeThemeProps(),
6998
7022
  ...makeValidationProps()
6999
7023
  }, 'VInput');
7000
7024
  const VInput = genericComponent()({
@@ -7017,6 +7041,9 @@
7017
7041
  const {
7018
7042
  dimensionStyles
7019
7043
  } = useDimension(props);
7044
+ const {
7045
+ themeClasses
7046
+ } = provideTheme(props);
7020
7047
  const {
7021
7048
  rtlClasses
7022
7049
  } = useRtl();
@@ -7070,7 +7097,7 @@
7070
7097
  "class": ['v-input', `v-input--${props.direction}`, {
7071
7098
  'v-input--center-affix': props.centerAffix,
7072
7099
  'v-input--hide-spin-buttons': props.hideSpinButtons
7073
- }, densityClasses.value, rtlClasses.value, validationClasses.value, props.class],
7100
+ }, densityClasses.value, themeClasses.value, rtlClasses.value, validationClasses.value, props.class],
7074
7101
  "style": [dimensionStyles.value, props.style]
7075
7102
  }, [hasPrepend && vue.createVNode("div", {
7076
7103
  "key": "prepend",
@@ -7297,6 +7324,10 @@
7297
7324
  };
7298
7325
  }
7299
7326
  const makeDisplayProps = propsFactory({
7327
+ mobile: {
7328
+ type: Boolean,
7329
+ default: null
7330
+ },
7300
7331
  mobileBreakpoint: [Number, String]
7301
7332
  }, 'display');
7302
7333
  function useDisplay() {
@@ -7305,6 +7336,7 @@
7305
7336
  const display = vue.inject(DisplaySymbol);
7306
7337
  if (!display) throw new Error('Could not find Vuetify display injection');
7307
7338
  const mobile = vue.computed(() => {
7339
+ if (props.mobile != null) return props.mobile;
7308
7340
  if (!props.mobileBreakpoint) return display.mobile.value;
7309
7341
  const breakpointValue = typeof props.mobileBreakpoint === 'number' ? props.mobileBreakpoint : display.thresholds.value[props.mobileBreakpoint];
7310
7342
  return display.width.value < breakpointValue;
@@ -7322,45 +7354,205 @@
7322
7354
  };
7323
7355
  }
7324
7356
 
7325
- function bias(val) {
7326
- const c = 0.501;
7327
- const x = Math.abs(val);
7328
- return Math.sign(val) * (x / ((1 / c - 2) * (1 - x) + 1));
7357
+ // Utilities
7358
+
7359
+ // Types
7360
+
7361
+ const GoToSymbol = Symbol.for('vuetify:goto');
7362
+ function genDefaults() {
7363
+ return {
7364
+ container: undefined,
7365
+ duration: 300,
7366
+ layout: false,
7367
+ offset: 0,
7368
+ easing: 'easeInOutCubic',
7369
+ patterns: {
7370
+ linear: t => t,
7371
+ easeInQuad: t => t ** 2,
7372
+ easeOutQuad: t => t * (2 - t),
7373
+ easeInOutQuad: t => t < 0.5 ? 2 * t ** 2 : -1 + (4 - 2 * t) * t,
7374
+ easeInCubic: t => t ** 3,
7375
+ easeOutCubic: t => --t ** 3 + 1,
7376
+ easeInOutCubic: t => t < 0.5 ? 4 * t ** 3 : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,
7377
+ easeInQuart: t => t ** 4,
7378
+ easeOutQuart: t => 1 - --t ** 4,
7379
+ easeInOutQuart: t => t < 0.5 ? 8 * t ** 4 : 1 - 8 * --t ** 4,
7380
+ easeInQuint: t => t ** 5,
7381
+ easeOutQuint: t => 1 + --t ** 5,
7382
+ easeInOutQuint: t => t < 0.5 ? 16 * t ** 5 : 1 + 16 * --t ** 5
7383
+ }
7384
+ };
7385
+ }
7386
+ function getContainer(el) {
7387
+ return getTarget$1(el) ?? (document.scrollingElement || document.body);
7388
+ }
7389
+ function getTarget$1(el) {
7390
+ return typeof el === 'string' ? document.querySelector(el) : refElement(el);
7391
+ }
7392
+ function getOffset$2(target, horizontal, rtl) {
7393
+ if (typeof target === 'number') return horizontal && rtl ? -target : target;
7394
+ let el = getTarget$1(target);
7395
+ let totalOffset = 0;
7396
+ while (el) {
7397
+ totalOffset += horizontal ? el.offsetLeft : el.offsetTop;
7398
+ el = el.offsetParent;
7399
+ }
7400
+ return totalOffset;
7401
+ }
7402
+ function createGoTo(options, locale) {
7403
+ return {
7404
+ rtl: locale.isRtl,
7405
+ options: mergeDeep(genDefaults(), options)
7406
+ };
7407
+ }
7408
+ async function scrollTo(_target, _options, horizontal, goTo) {
7409
+ const property = horizontal ? 'scrollLeft' : 'scrollTop';
7410
+ const options = mergeDeep(goTo?.options ?? genDefaults(), _options);
7411
+ const rtl = goTo?.rtl.value;
7412
+ const target = (typeof _target === 'number' ? _target : getTarget$1(_target)) ?? 0;
7413
+ const container = options.container === 'parent' && target instanceof HTMLElement ? target.parentElement : getContainer(options.container);
7414
+ const ease = typeof options.easing === 'function' ? options.easing : options.patterns[options.easing];
7415
+ if (!ease) throw new TypeError(`Easing function "${options.easing}" not found.`);
7416
+ let targetLocation;
7417
+ if (typeof target === 'number') {
7418
+ targetLocation = getOffset$2(target, horizontal, rtl);
7419
+ } else {
7420
+ targetLocation = getOffset$2(target, horizontal, rtl) - getOffset$2(container, horizontal, rtl);
7421
+ if (options.layout) {
7422
+ const styles = window.getComputedStyle(target);
7423
+ const layoutOffset = styles.getPropertyValue('--v-layout-top');
7424
+ if (layoutOffset) targetLocation -= parseInt(layoutOffset, 10);
7425
+ }
7426
+ }
7427
+ targetLocation += options.offset;
7428
+ targetLocation = clampTarget(container, targetLocation, !!rtl, !!horizontal);
7429
+ const startLocation = container[property] ?? 0;
7430
+ if (targetLocation === startLocation) return Promise.resolve(targetLocation);
7431
+ const startTime = performance.now();
7432
+ return new Promise(resolve => requestAnimationFrame(function step(currentTime) {
7433
+ const timeElapsed = currentTime - startTime;
7434
+ const progress = timeElapsed / options.duration;
7435
+ const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(clamp(progress, 0, 1)));
7436
+ container[property] = location;
7437
+
7438
+ // Allow for some jitter if target time has elapsed
7439
+ if (progress >= 1 && Math.abs(location - container[property]) < 10) {
7440
+ return resolve(targetLocation);
7441
+ } else if (progress > 2) {
7442
+ // The target might not be reachable
7443
+ consoleWarn('Scroll target is not reachable');
7444
+ return resolve(container[property]);
7445
+ }
7446
+ requestAnimationFrame(step);
7447
+ }));
7448
+ }
7449
+ function useGoTo() {
7450
+ let _options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7451
+ const goToInstance = vue.inject(GoToSymbol);
7452
+ const {
7453
+ isRtl
7454
+ } = useRtl();
7455
+ if (!goToInstance) throw new Error('[Vuetify] Could not find injected goto instance');
7456
+ const goTo = {
7457
+ ...goToInstance,
7458
+ // can be set via VLocaleProvider
7459
+ rtl: vue.computed(() => goToInstance.rtl.value || isRtl.value)
7460
+ };
7461
+ async function go(target, options) {
7462
+ return scrollTo(target, mergeDeep(_options, options), false, goTo);
7463
+ }
7464
+ go.horizontal = async (target, options) => {
7465
+ return scrollTo(target, mergeDeep(_options, options), true, goTo);
7466
+ };
7467
+ return go;
7468
+ }
7469
+
7470
+ /**
7471
+ * Clamp target value to achieve a smooth scroll animation
7472
+ * when the value goes outside the scroll container size
7473
+ */
7474
+ function clampTarget(container, value, rtl, horizontal) {
7475
+ const {
7476
+ scrollWidth,
7477
+ scrollHeight
7478
+ } = container;
7479
+ const [containerWidth, containerHeight] = container === document.scrollingElement ? [window.innerWidth, window.innerHeight] : [container.offsetWidth, container.offsetHeight];
7480
+ let min;
7481
+ let max;
7482
+ if (horizontal) {
7483
+ if (rtl) {
7484
+ min = -(scrollWidth - containerWidth);
7485
+ max = 0;
7486
+ } else {
7487
+ min = 0;
7488
+ max = scrollWidth - containerWidth;
7489
+ }
7490
+ } else {
7491
+ min = 0;
7492
+ max = scrollHeight + -containerHeight;
7493
+ }
7494
+ return Math.max(Math.min(value, max), min);
7329
7495
  }
7330
- function calculateUpdatedOffset(_ref) {
7496
+
7497
+ function calculateUpdatedTarget(_ref) {
7331
7498
  let {
7332
7499
  selectedElement,
7333
- containerSize,
7334
- contentSize,
7500
+ containerElement,
7335
7501
  isRtl,
7336
- currentScrollOffset,
7337
7502
  isHorizontal
7338
7503
  } = _ref;
7339
- const clientSize = isHorizontal ? selectedElement.clientWidth : selectedElement.clientHeight;
7340
- const offsetStart = isHorizontal ? selectedElement.offsetLeft : selectedElement.offsetTop;
7341
- const adjustedOffsetStart = isRtl && isHorizontal ? contentSize - offsetStart - clientSize : offsetStart;
7342
- const totalSize = containerSize + currentScrollOffset;
7343
- const itemOffset = clientSize + adjustedOffsetStart;
7344
- const additionalOffset = clientSize * 0.4;
7345
- if (adjustedOffsetStart <= currentScrollOffset) {
7346
- currentScrollOffset = Math.max(adjustedOffsetStart - additionalOffset, 0);
7347
- } else if (totalSize <= itemOffset) {
7348
- currentScrollOffset = Math.min(currentScrollOffset - (totalSize - itemOffset - additionalOffset), contentSize - containerSize);
7349
- }
7350
- return currentScrollOffset;
7351
- }
7352
- function calculateCenteredOffset(_ref2) {
7504
+ const containerSize = getOffsetSize(isHorizontal, containerElement);
7505
+ const scrollPosition = getScrollPosition(isHorizontal, isRtl, containerElement);
7506
+ const childrenSize = getOffsetSize(isHorizontal, selectedElement);
7507
+ const childrenStartPosition = getOffsetPosition(isHorizontal, selectedElement);
7508
+ const additionalOffset = childrenSize * 0.4;
7509
+ if (scrollPosition > childrenStartPosition) {
7510
+ return childrenStartPosition - additionalOffset;
7511
+ } else if (scrollPosition + containerSize < childrenStartPosition + childrenSize) {
7512
+ return childrenStartPosition - containerSize + childrenSize + additionalOffset;
7513
+ }
7514
+ return scrollPosition;
7515
+ }
7516
+ function calculateCenteredTarget(_ref2) {
7353
7517
  let {
7354
7518
  selectedElement,
7355
- containerSize,
7356
- contentSize,
7357
- isRtl,
7519
+ containerElement,
7358
7520
  isHorizontal
7359
7521
  } = _ref2;
7360
- const clientSize = isHorizontal ? selectedElement.clientWidth : selectedElement.clientHeight;
7361
- const offsetStart = isHorizontal ? selectedElement.offsetLeft : selectedElement.offsetTop;
7362
- const offsetCentered = isRtl && isHorizontal ? contentSize - offsetStart - clientSize / 2 - containerSize / 2 : offsetStart + clientSize / 2 - containerSize / 2;
7363
- return Math.min(contentSize - containerSize, Math.max(0, offsetCentered));
7522
+ const containerOffsetSize = getOffsetSize(isHorizontal, containerElement);
7523
+ const childrenOffsetPosition = getOffsetPosition(isHorizontal, selectedElement);
7524
+ const childrenOffsetSize = getOffsetSize(isHorizontal, selectedElement);
7525
+ return childrenOffsetPosition - containerOffsetSize / 2 + childrenOffsetSize / 2;
7526
+ }
7527
+ function getScrollSize(isHorizontal, element) {
7528
+ const key = isHorizontal ? 'scrollWidth' : 'scrollHeight';
7529
+ return element?.[key] || 0;
7530
+ }
7531
+ function getClientSize(isHorizontal, element) {
7532
+ const key = isHorizontal ? 'clientWidth' : 'clientHeight';
7533
+ return element?.[key] || 0;
7534
+ }
7535
+ function getScrollPosition(isHorizontal, rtl, element) {
7536
+ if (!element) {
7537
+ return 0;
7538
+ }
7539
+ const {
7540
+ scrollLeft,
7541
+ offsetWidth,
7542
+ scrollWidth
7543
+ } = element;
7544
+ if (isHorizontal) {
7545
+ return rtl ? scrollWidth - offsetWidth + scrollLeft : scrollLeft;
7546
+ }
7547
+ return element.scrollTop;
7548
+ }
7549
+ function getOffsetSize(isHorizontal, element) {
7550
+ const key = isHorizontal ? 'offsetWidth' : 'offsetHeight';
7551
+ return element?.[key] || 0;
7552
+ }
7553
+ function getOffsetPosition(isHorizontal, element) {
7554
+ const key = isHorizontal ? 'offsetLeft' : 'offsetTop';
7555
+ return element?.[key] || 0;
7364
7556
  }
7365
7557
 
7366
7558
  // Types
@@ -7426,6 +7618,14 @@
7426
7618
  resizeRef: contentRef,
7427
7619
  contentRect
7428
7620
  } = useResizeObserver();
7621
+ const goTo = useGoTo();
7622
+ const goToOptions = vue.computed(() => {
7623
+ return {
7624
+ container: containerRef.value,
7625
+ duration: 200,
7626
+ easing: 'easeOutQuart'
7627
+ };
7628
+ });
7429
7629
  const firstSelectedIndex = vue.computed(() => {
7430
7630
  if (!group.selected.value.length) return -1;
7431
7631
  return group.items.value.findIndex(item => item.id === group.selected.value[0]);
@@ -7448,60 +7648,58 @@
7448
7648
  if (firstSelectedIndex.value >= 0 && contentRef.value) {
7449
7649
  // TODO: Is this too naive? Should we store element references in group composable?
7450
7650
  const selectedElement = contentRef.value.children[lastSelectedIndex.value];
7451
- if (firstSelectedIndex.value === 0 || !isOverflowing.value) {
7452
- scrollOffset.value = 0;
7453
- } else if (props.centerActive) {
7454
- scrollOffset.value = calculateCenteredOffset({
7455
- selectedElement,
7456
- containerSize: containerSize.value,
7457
- contentSize: contentSize.value,
7458
- isRtl: isRtl.value,
7459
- isHorizontal: isHorizontal.value
7460
- });
7461
- } else if (isOverflowing.value) {
7462
- scrollOffset.value = calculateUpdatedOffset({
7463
- selectedElement,
7464
- containerSize: containerSize.value,
7465
- contentSize: contentSize.value,
7466
- isRtl: isRtl.value,
7467
- currentScrollOffset: scrollOffset.value,
7468
- isHorizontal: isHorizontal.value
7469
- });
7470
- }
7651
+ scrollToChildren(selectedElement, props.centerActive);
7471
7652
  }
7472
7653
  });
7473
7654
  });
7474
7655
  }
7475
- const disableTransition = vue.shallowRef(false);
7476
- let startTouch = 0;
7477
- let startOffset = 0;
7478
- function onTouchstart(e) {
7479
- const sizeProperty = isHorizontal.value ? 'clientX' : 'clientY';
7480
- const sign = isRtl.value && isHorizontal.value ? -1 : 1;
7481
- startOffset = sign * scrollOffset.value;
7482
- startTouch = e.touches[0][sizeProperty];
7483
- disableTransition.value = true;
7484
- }
7485
- function onTouchmove(e) {
7486
- if (!isOverflowing.value) return;
7487
- const sizeProperty = isHorizontal.value ? 'clientX' : 'clientY';
7488
- const sign = isRtl.value && isHorizontal.value ? -1 : 1;
7489
- scrollOffset.value = sign * (startOffset + startTouch - e.touches[0][sizeProperty]);
7490
- }
7491
- function onTouchend(e) {
7492
- const maxScrollOffset = contentSize.value - containerSize.value;
7493
- if (scrollOffset.value < 0 || !isOverflowing.value) {
7494
- scrollOffset.value = 0;
7495
- } else if (scrollOffset.value >= maxScrollOffset) {
7496
- scrollOffset.value = maxScrollOffset;
7497
- }
7498
- disableTransition.value = false;
7656
+ const isFocused = vue.shallowRef(false);
7657
+ function scrollToChildren(children, center) {
7658
+ let target = 0;
7659
+ if (center) {
7660
+ target = calculateCenteredTarget({
7661
+ containerElement: containerRef.value,
7662
+ isHorizontal: isHorizontal.value,
7663
+ selectedElement: children
7664
+ });
7665
+ } else {
7666
+ target = calculateUpdatedTarget({
7667
+ containerElement: containerRef.value,
7668
+ isHorizontal: isHorizontal.value,
7669
+ isRtl: isRtl.value,
7670
+ selectedElement: children
7671
+ });
7672
+ }
7673
+ scrollToPosition(target);
7674
+ }
7675
+ function scrollToPosition(newPosition) {
7676
+ if (!IN_BROWSER || !containerRef.value) return;
7677
+ const offsetSize = getOffsetSize(isHorizontal.value, containerRef.value);
7678
+ const scrollPosition = getScrollPosition(isHorizontal.value, isRtl.value, containerRef.value);
7679
+ const scrollSize = getScrollSize(isHorizontal.value, containerRef.value);
7680
+ if (scrollSize <= offsetSize ||
7681
+ // Prevent scrolling by only a couple of pixels, which doesn't look smooth
7682
+ Math.abs(newPosition - scrollPosition) < 16) return;
7683
+ if (isHorizontal.value && isRtl.value && containerRef.value) {
7684
+ const {
7685
+ scrollWidth,
7686
+ offsetWidth: containerWidth
7687
+ } = containerRef.value;
7688
+ newPosition = scrollWidth - containerWidth - newPosition;
7689
+ }
7690
+ if (isHorizontal.value) {
7691
+ goTo.horizontal(newPosition, goToOptions.value);
7692
+ } else {
7693
+ goTo(newPosition, goToOptions.value);
7694
+ }
7499
7695
  }
7500
- function onScroll() {
7501
- if (!containerRef.value) return;
7502
- containerRef.value[isHorizontal.value ? 'scrollLeft' : 'scrollTop'] = 0;
7696
+ function onScroll(e) {
7697
+ const {
7698
+ scrollTop,
7699
+ scrollLeft
7700
+ } = e.target;
7701
+ scrollOffset.value = isHorizontal.value ? scrollLeft : scrollTop;
7503
7702
  }
7504
- const isFocused = vue.shallowRef(false);
7505
7703
  function onFocusin(e) {
7506
7704
  isFocused.value = true;
7507
7705
  if (!isOverflowing.value || !contentRef.value) return;
@@ -7511,14 +7709,7 @@
7511
7709
  for (const el of e.composedPath()) {
7512
7710
  for (const item of contentRef.value.children) {
7513
7711
  if (item === el) {
7514
- scrollOffset.value = calculateUpdatedOffset({
7515
- selectedElement: item,
7516
- containerSize: containerSize.value,
7517
- contentSize: contentSize.value,
7518
- isRtl: isRtl.value,
7519
- currentScrollOffset: scrollOffset.value,
7520
- isHorizontal: isHorizontal.value
7521
- });
7712
+ scrollToChildren(item);
7522
7713
  return;
7523
7714
  }
7524
7715
  }
@@ -7527,66 +7718,79 @@
7527
7718
  function onFocusout(e) {
7528
7719
  isFocused.value = false;
7529
7720
  }
7721
+
7722
+ // Affix clicks produce onFocus that we have to ignore to avoid extra scrollToChildren
7723
+ let ignoreFocusEvent = false;
7530
7724
  function onFocus(e) {
7531
- if (!isFocused.value && !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget))) focus();
7725
+ if (!ignoreFocusEvent && !isFocused.value && !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget))) focus();
7726
+ ignoreFocusEvent = false;
7727
+ }
7728
+ function onFocusAffixes() {
7729
+ ignoreFocusEvent = true;
7532
7730
  }
7533
7731
  function onKeydown(e) {
7534
7732
  if (!contentRef.value) return;
7733
+ function toFocus(location) {
7734
+ e.preventDefault();
7735
+ focus(location);
7736
+ }
7535
7737
  if (isHorizontal.value) {
7536
7738
  if (e.key === 'ArrowRight') {
7537
- focus(isRtl.value ? 'prev' : 'next');
7739
+ toFocus(isRtl.value ? 'prev' : 'next');
7538
7740
  } else if (e.key === 'ArrowLeft') {
7539
- focus(isRtl.value ? 'next' : 'prev');
7741
+ toFocus(isRtl.value ? 'next' : 'prev');
7540
7742
  }
7541
7743
  } else {
7542
7744
  if (e.key === 'ArrowDown') {
7543
- focus('next');
7745
+ toFocus('next');
7544
7746
  } else if (e.key === 'ArrowUp') {
7545
- focus('prev');
7747
+ toFocus('prev');
7546
7748
  }
7547
7749
  }
7548
7750
  if (e.key === 'Home') {
7549
- focus('first');
7751
+ toFocus('first');
7550
7752
  } else if (e.key === 'End') {
7551
- focus('last');
7753
+ toFocus('last');
7552
7754
  }
7553
7755
  }
7554
7756
  function focus(location) {
7555
7757
  if (!contentRef.value) return;
7758
+ let el;
7556
7759
  if (!location) {
7557
7760
  const focusable = focusableChildren(contentRef.value);
7558
- focusable[0]?.focus();
7761
+ el = focusable[0];
7559
7762
  } else if (location === 'next') {
7560
- const el = contentRef.value.querySelector(':focus')?.nextElementSibling;
7561
- if (el) el.focus();else focus('first');
7763
+ el = contentRef.value.querySelector(':focus')?.nextElementSibling;
7764
+ if (!el) return focus('first');
7562
7765
  } else if (location === 'prev') {
7563
- const el = contentRef.value.querySelector(':focus')?.previousElementSibling;
7564
- if (el) el.focus();else focus('last');
7766
+ el = contentRef.value.querySelector(':focus')?.previousElementSibling;
7767
+ if (!el) return focus('last');
7565
7768
  } else if (location === 'first') {
7566
- contentRef.value.firstElementChild?.focus();
7769
+ el = contentRef.value.firstElementChild;
7567
7770
  } else if (location === 'last') {
7568
- contentRef.value.lastElementChild?.focus();
7771
+ el = contentRef.value.lastElementChild;
7772
+ }
7773
+ if (el) {
7774
+ el.focus({
7775
+ preventScroll: true
7776
+ });
7569
7777
  }
7570
7778
  }
7571
7779
  function scrollTo(location) {
7572
- const newAbsoluteOffset = scrollOffset.value + (location === 'prev' ? -1 : 1) * containerSize.value;
7573
- scrollOffset.value = clamp(newAbsoluteOffset, 0, contentSize.value - containerSize.value);
7574
- }
7575
- const contentStyles = vue.computed(() => {
7576
- // This adds friction when scrolling the 'wrong' way when at max offset
7577
- let scrollAmount = scrollOffset.value > contentSize.value - containerSize.value ? -(contentSize.value - containerSize.value) + bias(contentSize.value - containerSize.value - scrollOffset.value) : -scrollOffset.value;
7780
+ const direction = isHorizontal.value && isRtl.value ? -1 : 1;
7781
+ const offsetStep = (location === 'prev' ? -direction : direction) * containerSize.value;
7782
+ let newPosition = scrollOffset.value + offsetStep;
7578
7783
 
7579
- // This adds friction when scrolling the 'wrong' way when at min offset
7580
- if (scrollOffset.value <= 0) {
7581
- scrollAmount = bias(-scrollOffset.value);
7784
+ // TODO: improve it
7785
+ if (isHorizontal.value && isRtl.value && containerRef.value) {
7786
+ const {
7787
+ scrollWidth,
7788
+ offsetWidth: containerWidth
7789
+ } = containerRef.value;
7790
+ newPosition += scrollWidth - containerWidth;
7582
7791
  }
7583
- const sign = isRtl.value && isHorizontal.value ? -1 : 1;
7584
- return {
7585
- transform: `translate${isHorizontal.value ? 'X' : 'Y'}(${sign * scrollAmount}px)`,
7586
- transition: disableTransition.value ? 'none' : '',
7587
- willChange: disableTransition.value ? 'transform' : ''
7588
- };
7589
- });
7792
+ scrollToPosition(newPosition);
7793
+ }
7590
7794
  const slotProps = vue.computed(() => ({
7591
7795
  next: group.next,
7592
7796
  prev: group.prev,
@@ -7620,11 +7824,17 @@
7620
7824
  }
7621
7825
  });
7622
7826
  const hasPrev = vue.computed(() => {
7623
- return Math.abs(scrollOffset.value) > 0;
7827
+ // 1 pixel in reserve, may be lost after rounding
7828
+ return Math.abs(scrollOffset.value) > 1;
7624
7829
  });
7625
7830
  const hasNext = vue.computed(() => {
7626
- // Check one scroll ahead to know the width of right-most item
7627
- return contentSize.value > Math.abs(scrollOffset.value) + containerSize.value;
7831
+ if (!containerRef.value) return false;
7832
+ const scrollSize = getScrollSize(isHorizontal.value, containerRef.value);
7833
+ const clientSize = getClientSize(isHorizontal.value, containerRef.value);
7834
+ const scrollSizeMax = scrollSize - clientSize;
7835
+
7836
+ // 1 pixel in reserve, may be lost after rounding
7837
+ return scrollSizeMax - Math.abs(scrollOffset.value) > 1;
7628
7838
  });
7629
7839
  useRender(() => vue.createVNode(props.tag, {
7630
7840
  "class": ['v-slide-group', {
@@ -7641,6 +7851,7 @@
7641
7851
  "class": ['v-slide-group__prev', {
7642
7852
  'v-slide-group__prev--disabled': !hasPrev.value
7643
7853
  }],
7854
+ "onMousedown": onFocusAffixes,
7644
7855
  "onClick": () => hasPrev.value && scrollTo('prev')
7645
7856
  }, [slots.prev?.(slotProps.value) ?? vue.createVNode(VFadeTransition, null, {
7646
7857
  default: () => [vue.createVNode(VIcon, {
@@ -7654,10 +7865,6 @@
7654
7865
  }, [vue.createVNode("div", {
7655
7866
  "ref": contentRef,
7656
7867
  "class": "v-slide-group__content",
7657
- "style": contentStyles.value,
7658
- "onTouchstartPassive": onTouchstart,
7659
- "onTouchmovePassive": onTouchmove,
7660
- "onTouchendPassive": onTouchend,
7661
7868
  "onFocusin": onFocusin,
7662
7869
  "onFocusout": onFocusout,
7663
7870
  "onKeydown": onKeydown
@@ -7666,6 +7873,7 @@
7666
7873
  "class": ['v-slide-group__next', {
7667
7874
  'v-slide-group__next--disabled': !hasNext.value
7668
7875
  }],
7876
+ "onMousedown": onFocusAffixes,
7669
7877
  "onClick": () => hasNext.value && scrollTo('next')
7670
7878
  }, [slots.next?.(slotProps.value) ?? vue.createVNode(VFadeTransition, null, {
7671
7879
  default: () => [vue.createVNode(VIcon, {
@@ -9460,7 +9668,8 @@
9460
9668
  if (!isFocused.value && !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget))) focus();
9461
9669
  }
9462
9670
  function onKeydown(e) {
9463
- if (!contentRef.value) return;
9671
+ const target = e.target;
9672
+ if (!contentRef.value || ['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
9464
9673
  if (e.key === 'ArrowDown') {
9465
9674
  focus('next');
9466
9675
  } else if (e.key === 'ArrowUp') {
@@ -9580,7 +9789,7 @@
9580
9789
  }
9581
9790
 
9582
9791
  /** Get the difference between two points */
9583
- function getOffset$2(a, b) {
9792
+ function getOffset$1(a, b) {
9584
9793
  return {
9585
9794
  x: a.x - b.x,
9586
9795
  y: a.y - b.y
@@ -9827,7 +10036,7 @@
9827
10036
  let {
9828
10037
  x,
9829
10038
  y
9830
- } = getOffset$2(targetPoint, contentPoint);
10039
+ } = getOffset$1(targetPoint, contentPoint);
9831
10040
  switch (_placement.anchor.side) {
9832
10041
  case 'top':
9833
10042
  y -= offset.value[0];
@@ -10365,7 +10574,7 @@
10365
10574
  const target = vue.computed(() => {
10366
10575
  if (props.target === 'cursor' && cursorTarget.value) return cursorTarget.value;
10367
10576
  if (targetRef.value) return refElement(targetRef.value);
10368
- return getTarget$1(props.target, vm) || activatorEl.value;
10577
+ return getTarget(props.target, vm) || activatorEl.value;
10369
10578
  });
10370
10579
  const targetEl = vue.computed(() => {
10371
10580
  return Array.isArray(target.value) ? undefined : target.value;
@@ -10437,14 +10646,14 @@
10437
10646
  }
10438
10647
  function getActivator() {
10439
10648
  let selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : props.activator;
10440
- const activator = getTarget$1(selector, vm);
10649
+ const activator = getTarget(selector, vm);
10441
10650
 
10442
10651
  // The activator should only be a valid element (Ignore comments and text nodes)
10443
10652
  activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : undefined;
10444
10653
  return activatorEl.value;
10445
10654
  }
10446
10655
  }
10447
- function getTarget$1(selector, vm) {
10656
+ function getTarget(selector, vm) {
10448
10657
  if (!selector) return;
10449
10658
  let target;
10450
10659
  if (selector === 'parent') {
@@ -10897,9 +11106,9 @@
10897
11106
  }
10898
11107
  useRender(() => vue.createVNode(vue.Fragment, null, [slots.activator?.({
10899
11108
  isActive: isActive.value,
11109
+ targetRef,
10900
11110
  props: vue.mergeProps({
10901
- ref: activatorRef,
10902
- targetRef
11111
+ ref: activatorRef
10903
11112
  }, activatorEvents.value, props.activatorProps)
10904
11113
  }), isMounted.value && hasContent.value && vue.createVNode(vue.Teleport, {
10905
11114
  "disabled": !teleportTarget.value,
@@ -12378,6 +12587,10 @@
12378
12587
  const item = items.value.find(item => item.title.toLowerCase().startsWith(keyboardLookupPrefix));
12379
12588
  if (item !== undefined) {
12380
12589
  model.value = [item];
12590
+ const index = displayItems.value.indexOf(item);
12591
+ IN_BROWSER && window.requestAnimationFrame(() => {
12592
+ index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
12593
+ });
12381
12594
  }
12382
12595
  }
12383
12596
 
@@ -12426,7 +12639,7 @@
12426
12639
  vTextFieldRef.value.value = '';
12427
12640
  }
12428
12641
  }
12429
- vue.watch([menu, model], () => {
12642
+ vue.watch(menu, () => {
12430
12643
  if (!props.hideSelected && menu.value && model.value.length) {
12431
12644
  const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
12432
12645
  IN_BROWSER && window.requestAnimationFrame(() => {
@@ -12880,16 +13093,14 @@
12880
13093
  listRef.value?.focus('next');
12881
13094
  }
12882
13095
  if (['Backspace', 'Delete'].includes(e.key)) {
12883
- if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
12884
- if (selectionIndex.value < 0) {
12885
- if (e.key === 'Backspace' && !search.value) {
12886
- selectionIndex.value = length - 1;
12887
- }
12888
- return;
13096
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0 && !search.value) return select(model.value[0], false);
13097
+ if (~selectionIndex.value) {
13098
+ const originalSelectionIndex = selectionIndex.value;
13099
+ select(model.value[selectionIndex.value], false);
13100
+ selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
13101
+ } else if (e.key === 'Backspace' && !search.value) {
13102
+ selectionIndex.value = length - 1;
12889
13103
  }
12890
- const originalSelectionIndex = selectionIndex.value;
12891
- select(model.value[selectionIndex.value], false);
12892
- selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
12893
13104
  }
12894
13105
  if (!props.multiple) return;
12895
13106
  if (e.key === 'ArrowLeft') {
@@ -12937,7 +13148,7 @@
12937
13148
  listHasFocus.value = false;
12938
13149
  }
12939
13150
  function onUpdateModelValue(v) {
12940
- if (v == null || v === '' && !props.multiple) model.value = [];
13151
+ if (v == null || v === '' && !props.multiple && !hasSelectionSlot.value) model.value = [];
12941
13152
  }
12942
13153
  const isSelecting = vue.shallowRef(false);
12943
13154
 
@@ -13577,12 +13788,12 @@
13577
13788
  name: 'VDialog',
13578
13789
  props: makeVDialogProps(),
13579
13790
  emits: {
13580
- 'click:outside': e => true,
13581
13791
  'update:modelValue': value => true,
13582
13792
  afterLeave: () => true
13583
13793
  },
13584
13794
  setup(props, _ref) {
13585
13795
  let {
13796
+ emit,
13586
13797
  slots
13587
13798
  } = _ref;
13588
13799
  const isActive = useProxiedModel(props, 'modelValue');
@@ -13625,6 +13836,9 @@
13625
13836
  });
13626
13837
  }
13627
13838
  }
13839
+ function onAfterLeave() {
13840
+ emit('afterLeave');
13841
+ }
13628
13842
  vue.watch(isActive, async val => {
13629
13843
  if (!val) {
13630
13844
  await vue.nextTick();
@@ -13656,7 +13870,8 @@
13656
13870
  "activatorProps": activatorProps,
13657
13871
  "contentProps": contentProps,
13658
13872
  "role": "dialog",
13659
- "onAfterEnter": onAfterEnter
13873
+ "onAfterEnter": onAfterEnter,
13874
+ "onAfterLeave": onAfterLeave
13660
13875
  }, scopeId), {
13661
13876
  activator: slots.activator,
13662
13877
  default: function () {
@@ -14744,7 +14959,7 @@
14744
14959
  const imgProps = VImg.filterProps(props);
14745
14960
  const windowItemProps = VWindowItem.filterProps(props);
14746
14961
  return vue.createVNode(VWindowItem, vue.mergeProps({
14747
- "class": "v-carousel-item"
14962
+ "class": ['v-carousel-item', props.class]
14748
14963
  }, windowItemProps), {
14749
14964
  default: () => [vue.createVNode(VImg, vue.mergeProps(attrs, imgProps), slots)]
14750
14965
  });
@@ -15193,7 +15408,7 @@
15193
15408
  // Types
15194
15409
 
15195
15410
  const VSliderSymbol = Symbol.for('vuetify:v-slider');
15196
- function getOffset$1(e, el, direction) {
15411
+ function getOffset(e, el, direction) {
15197
15412
  const vertical = direction === 'vertical';
15198
15413
  const rect = el.getBoundingClientRect();
15199
15414
  const touch = 'touches' in e ? e.touches[0] : e;
@@ -15352,7 +15567,7 @@
15352
15567
  activeThumbRef.value.focus();
15353
15568
  mousePressed.value = true;
15354
15569
  if (activeThumbRef.value.contains(e.target)) {
15355
- startOffset.value = getOffset$1(e, activeThumbRef.value, props.direction);
15570
+ startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
15356
15571
  } else {
15357
15572
  startOffset.value = 0;
15358
15573
  onSliderMove({
@@ -16749,16 +16964,14 @@
16749
16964
  if (hasSelectionSlot.value) _search.value = '';
16750
16965
  }
16751
16966
  if (['Backspace', 'Delete'].includes(e.key)) {
16752
- if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
16753
- if (selectionIndex.value < 0) {
16754
- if (e.key === 'Backspace' && !search.value) {
16755
- selectionIndex.value = length - 1;
16756
- }
16757
- return;
16967
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0 && !search.value) return select(model.value[0], false);
16968
+ if (~selectionIndex.value) {
16969
+ const originalSelectionIndex = selectionIndex.value;
16970
+ select(model.value[selectionIndex.value], false);
16971
+ selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
16972
+ } else if (e.key === 'Backspace' && !search.value) {
16973
+ selectionIndex.value = length - 1;
16758
16974
  }
16759
- const originalSelectionIndex = selectionIndex.value;
16760
- select(model.value[selectionIndex.value], false);
16761
- selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
16762
16975
  }
16763
16976
  if (!props.multiple) return;
16764
16977
  if (e.key === 'ArrowLeft') {
@@ -16827,7 +17040,7 @@
16827
17040
  listHasFocus.value = false;
16828
17041
  }
16829
17042
  function onUpdateModelValue(v) {
16830
- if (v == null || v === '' && !props.multiple) model.value = [];
17043
+ if (v == null || v === '' && !props.multiple && !hasSelectionSlot.value) model.value = [];
16831
17044
  }
16832
17045
  vue.watch(isFocused, (val, oldVal) => {
16833
17046
  if (val || val === oldVal) return;
@@ -18399,110 +18612,6 @@
18399
18612
  return Math.floor(diffDays / 7) + 1;
18400
18613
  }
18401
18614
 
18402
- // Utilities
18403
-
18404
- // Types
18405
-
18406
- const GoToSymbol = Symbol.for('vuetify:goto');
18407
- function genDefaults() {
18408
- return {
18409
- container: undefined,
18410
- duration: 300,
18411
- layout: false,
18412
- offset: 0,
18413
- easing: 'easeInOutCubic',
18414
- patterns: {
18415
- linear: t => t,
18416
- easeInQuad: t => t ** 2,
18417
- easeOutQuad: t => t * (2 - t),
18418
- easeInOutQuad: t => t < 0.5 ? 2 * t ** 2 : -1 + (4 - 2 * t) * t,
18419
- easeInCubic: t => t ** 3,
18420
- easeOutCubic: t => --t ** 3 + 1,
18421
- easeInOutCubic: t => t < 0.5 ? 4 * t ** 3 : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,
18422
- easeInQuart: t => t ** 4,
18423
- easeOutQuart: t => 1 - --t ** 4,
18424
- easeInOutQuart: t => t < 0.5 ? 8 * t ** 4 : 1 - 8 * --t ** 4,
18425
- easeInQuint: t => t ** 5,
18426
- easeOutQuint: t => 1 + --t ** 5,
18427
- easeInOutQuint: t => t < 0.5 ? 16 * t ** 5 : 1 + 16 * --t ** 5
18428
- }
18429
- };
18430
- }
18431
- function getContainer(el) {
18432
- return getTarget(el) ?? (document.scrollingElement || document.body);
18433
- }
18434
- function getTarget(el) {
18435
- return typeof el === 'string' ? document.querySelector(el) : refElement(el);
18436
- }
18437
- function getOffset(target, horizontal, rtl) {
18438
- if (typeof target === 'number') return horizontal && rtl ? -target : target;
18439
- let el = getTarget(target);
18440
- let totalOffset = 0;
18441
- while (el) {
18442
- totalOffset += horizontal ? el.offsetLeft : el.offsetTop;
18443
- el = el.offsetParent;
18444
- }
18445
- return totalOffset;
18446
- }
18447
- function createGoTo(options, locale) {
18448
- return {
18449
- rtl: locale.isRtl,
18450
- options: mergeDeep(genDefaults(), options)
18451
- };
18452
- }
18453
- async function scrollTo(_target, _options, horizontal, goTo) {
18454
- const property = horizontal ? 'scrollLeft' : 'scrollTop';
18455
- const options = mergeDeep(goTo?.options ?? genDefaults(), _options);
18456
- const rtl = goTo?.rtl.value;
18457
- const target = (typeof _target === 'number' ? _target : getTarget(_target)) ?? 0;
18458
- const container = options.container === 'parent' && target instanceof HTMLElement ? target.parentElement : getContainer(options.container);
18459
- const ease = typeof options.easing === 'function' ? options.easing : options.patterns[options.easing];
18460
- if (!ease) throw new TypeError(`Easing function "${options.easing}" not found.`);
18461
- let targetLocation;
18462
- if (typeof target === 'number') {
18463
- targetLocation = getOffset(target, horizontal, rtl);
18464
- } else {
18465
- targetLocation = getOffset(target, horizontal, rtl) - getOffset(container, horizontal, rtl);
18466
- if (options.layout) {
18467
- const styles = window.getComputedStyle(target);
18468
- const layoutOffset = styles.getPropertyValue('--v-layout-top');
18469
- if (layoutOffset) targetLocation -= parseInt(layoutOffset, 10);
18470
- }
18471
- }
18472
- targetLocation += options.offset;
18473
- const startLocation = container[property] ?? 0;
18474
- if (targetLocation === startLocation) return Promise.resolve(targetLocation);
18475
- const startTime = performance.now();
18476
- return new Promise(resolve => requestAnimationFrame(function step(currentTime) {
18477
- const timeElapsed = currentTime - startTime;
18478
- const progress = timeElapsed / options.duration;
18479
- const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(clamp(progress, 0, 1)));
18480
- container[property] = location;
18481
-
18482
- // Allow for some jitter if target time has elapsed
18483
- if (progress >= 1 && Math.abs(location - container[property]) < 10) {
18484
- return resolve(targetLocation);
18485
- } else if (progress > 2) {
18486
- // The target might not be reachable
18487
- consoleWarn('Scroll target is not reachable');
18488
- return resolve(container[property]);
18489
- }
18490
- requestAnimationFrame(step);
18491
- }));
18492
- }
18493
- function useGoTo() {
18494
- let _options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
18495
- const goTo = vue.inject(GoToSymbol);
18496
- if (!goTo) throw new Error('[Vuetify] Could not find injected goto instance');
18497
- async function go(target, options) {
18498
- return scrollTo(target, mergeDeep(_options, options), false, goTo);
18499
- }
18500
- go.horizontal = async (target, options) => {
18501
- return scrollTo(target, mergeDeep(_options, options), true, goTo);
18502
- };
18503
- return go;
18504
- }
18505
-
18506
18615
  // Composables
18507
18616
 
18508
18617
  // Types
@@ -19653,6 +19762,7 @@
19653
19762
  headerProps: {
19654
19763
  type: Object
19655
19764
  },
19765
+ ...makeDisplayProps(),
19656
19766
  ...makeLoaderProps()
19657
19767
  }, 'VDataTableHeaders');
19658
19768
  const VDataTableHeaders = genericComponent()({
@@ -19662,6 +19772,9 @@
19662
19772
  let {
19663
19773
  slots
19664
19774
  } = _ref;
19775
+ const {
19776
+ t
19777
+ } = useLocale();
19665
19778
  const {
19666
19779
  toggleSort,
19667
19780
  sortBy,
@@ -19697,6 +19810,10 @@
19697
19810
  backgroundColorClasses,
19698
19811
  backgroundColorStyles
19699
19812
  } = useBackgroundColor(props, 'color');
19813
+ const {
19814
+ displayClasses,
19815
+ mobile
19816
+ } = useDisplay(props);
19700
19817
  const slotProps = vue.computed(() => ({
19701
19818
  headers: headers.value,
19702
19819
  columns: columns.value,
@@ -19708,6 +19825,9 @@
19708
19825
  selectAll,
19709
19826
  getSortIcon
19710
19827
  }));
19828
+ const headerCellClasses = vue.computed(() => ['v-data-table__th', {
19829
+ 'v-data-table__th--sticky': props.sticky
19830
+ }, displayClasses.value, loaderClasses.value]);
19711
19831
  const VDataTableHeaderCell = _ref2 => {
19712
19832
  let {
19713
19833
  column,
@@ -19719,12 +19839,11 @@
19719
19839
  return vue.createVNode(VDataTableColumn, vue.mergeProps({
19720
19840
  "tag": "th",
19721
19841
  "align": column.align,
19722
- "class": ['v-data-table__th', {
19842
+ "class": [{
19723
19843
  'v-data-table__th--sortable': column.sortable,
19724
19844
  'v-data-table__th--sorted': isSorted(column),
19725
- 'v-data-table__th--fixed': column.fixed,
19726
- 'v-data-table__th--sticky': props.sticky
19727
- }, loaderClasses.value],
19845
+ 'v-data-table__th--fixed': column.fixed
19846
+ }, ...headerCellClasses.value],
19728
19847
  "style": {
19729
19848
  width: convertToUnit(column.width),
19730
19849
  minWidth: convertToUnit(column.minWidth),
@@ -19773,8 +19892,53 @@
19773
19892
  }
19774
19893
  });
19775
19894
  };
19895
+ const VDataTableMobileHeaderCell = () => {
19896
+ const headerProps = vue.mergeProps(props.headerProps ?? {} ?? {});
19897
+ const displayItems = vue.computed(() => {
19898
+ return columns.value.filter(column => column?.sortable);
19899
+ });
19900
+ const appendIcon = vue.computed(() => {
19901
+ return allSelected.value ? '$checkboxOn' : someSelected.value ? '$checkboxIndeterminate' : '$checkboxOff';
19902
+ });
19903
+ return vue.createVNode(VDataTableColumn, vue.mergeProps({
19904
+ "tag": "th",
19905
+ "class": [...headerCellClasses.value],
19906
+ "colspan": headers.value.length + 1
19907
+ }, headerProps), {
19908
+ default: () => [vue.createVNode("div", {
19909
+ "class": "v-data-table-header__content"
19910
+ }, [vue.createVNode(VSelect, {
19911
+ "chips": true,
19912
+ "class": "v-data-table__td-sort-select",
19913
+ "clearable": true,
19914
+ "density": "default",
19915
+ "items": displayItems.value,
19916
+ "label": t('$vuetify.dataTable.sortBy'),
19917
+ "multiple": props.multiSort,
19918
+ "variant": "underlined",
19919
+ "onClick:clear": () => sortBy.value = [],
19920
+ "appendIcon": appendIcon.value,
19921
+ "onClick:append": () => selectAll(!allSelected.value)
19922
+ }, {
19923
+ ...slots,
19924
+ chip: props => vue.createVNode(VChip, {
19925
+ "onClick": props.item.raw?.sortable ? () => toggleSort(props.item.raw) : undefined,
19926
+ "onMousedown": e => {
19927
+ e.preventDefault();
19928
+ e.stopPropagation();
19929
+ }
19930
+ }, {
19931
+ default: () => [props.item.title, vue.createVNode(VIcon, {
19932
+ "class": ['v-data-table__td-sort-icon', isSorted(props.item.raw) && 'v-data-table__td-sort-icon-active'],
19933
+ "icon": getSortIcon(props.item.raw),
19934
+ "size": "small"
19935
+ }, null)]
19936
+ })
19937
+ })])]
19938
+ });
19939
+ };
19776
19940
  useRender(() => {
19777
- return vue.createVNode(vue.Fragment, null, [slots.headers ? slots.headers(slotProps.value) : headers.value.map((row, y) => vue.createVNode("tr", null, [row.map((column, x) => vue.createVNode(VDataTableHeaderCell, {
19941
+ return mobile.value ? vue.createVNode("tr", null, [vue.createVNode(VDataTableMobileHeaderCell, null, null)]) : vue.createVNode(vue.Fragment, null, [slots.headers ? slots.headers(slotProps.value) : headers.value.map((row, y) => vue.createVNode("tr", null, [row.map((column, x) => vue.createVNode(VDataTableHeaderCell, {
19778
19942
  "column": column,
19779
19943
  "x": x,
19780
19944
  "y": y
@@ -19882,7 +20046,8 @@
19882
20046
  cellProps: [Object, Function],
19883
20047
  onClick: EventProp(),
19884
20048
  onContextmenu: EventProp(),
19885
- onDblclick: EventProp()
20049
+ onDblclick: EventProp(),
20050
+ ...makeDisplayProps()
19886
20051
  }, 'VDataTableRow');
19887
20052
  const VDataTableRow = genericComponent()({
19888
20053
  name: 'VDataTableRow',
@@ -19891,27 +20056,40 @@
19891
20056
  let {
19892
20057
  slots
19893
20058
  } = _ref;
20059
+ const {
20060
+ displayClasses,
20061
+ mobile
20062
+ } = useDisplay(props, 'v-data-table__tr');
19894
20063
  const {
19895
20064
  isSelected,
19896
- toggleSelect
20065
+ toggleSelect,
20066
+ someSelected,
20067
+ allSelected,
20068
+ selectAll
19897
20069
  } = useSelection();
19898
20070
  const {
19899
20071
  isExpanded,
19900
20072
  toggleExpand
19901
20073
  } = useExpanded();
20074
+ const {
20075
+ toggleSort,
20076
+ sortBy,
20077
+ isSorted
20078
+ } = useSort();
19902
20079
  const {
19903
20080
  columns
19904
20081
  } = useHeaders();
19905
20082
  useRender(() => vue.createVNode("tr", {
19906
20083
  "class": ['v-data-table__tr', {
19907
20084
  'v-data-table__tr--clickable': !!(props.onClick || props.onContextmenu || props.onDblclick)
19908
- }],
20085
+ }, displayClasses.value],
19909
20086
  "onClick": props.onClick,
19910
20087
  "onContextmenu": props.onContextmenu,
19911
20088
  "onDblclick": props.onDblclick
19912
20089
  }, [props.item && columns.value.map((column, i) => {
19913
20090
  const item = props.item;
19914
20091
  const slotName = `item.${column.key}`;
20092
+ const headerSlotName = `header.${column.key}`;
19915
20093
  const slotProps = {
19916
20094
  index: props.index,
19917
20095
  item: item.raw,
@@ -19923,6 +20101,16 @@
19923
20101
  isExpanded,
19924
20102
  toggleExpand
19925
20103
  };
20104
+ const columnSlotProps = {
20105
+ column,
20106
+ selectAll,
20107
+ isSorted,
20108
+ toggleSort,
20109
+ sortBy: sortBy.value,
20110
+ someSelected: someSelected.value,
20111
+ allSelected: allSelected.value,
20112
+ getSortIcon: () => ''
20113
+ };
19926
20114
  const cellProps = typeof props.cellProps === 'function' ? props.cellProps({
19927
20115
  index: slotProps.index,
19928
20116
  item: slotProps.item,
@@ -19938,16 +20126,20 @@
19938
20126
  }) : column.cellProps;
19939
20127
  return vue.createVNode(VDataTableColumn, vue.mergeProps({
19940
20128
  "align": column.align,
20129
+ "class": {
20130
+ 'v-data-table__td--expanded-row': column.key === 'data-table-expand',
20131
+ 'v-data-table__td--select-row': column.key === 'data-table-select'
20132
+ },
19941
20133
  "fixed": column.fixed,
19942
20134
  "fixedOffset": column.fixedOffset,
19943
20135
  "lastFixed": column.lastFixed,
20136
+ "maxWidth": !mobile.value ? column.maxWidth : undefined,
19944
20137
  "noPadding": column.key === 'data-table-select' || column.key === 'data-table-expand',
19945
- "width": column.width,
19946
- "maxWidth": column.maxWidth,
19947
- "nowrap": column.nowrap
20138
+ "nowrap": column.nowrap,
20139
+ "width": !mobile.value ? column.width : undefined
19948
20140
  }, cellProps, columnCellProps), {
19949
20141
  default: () => {
19950
- if (slots[slotName]) return slots[slotName](slotProps);
20142
+ if (slots[slotName] && !mobile.value) return slots[slotName]?.(slotProps);
19951
20143
  if (column.key === 'data-table-select') {
19952
20144
  return slots['item.data-table-select']?.(slotProps) ?? vue.createVNode(VCheckboxBtn, {
19953
20145
  "disabled": !item.selectable,
@@ -19963,7 +20155,12 @@
19963
20155
  "onClick": vue.withModifiers(() => toggleExpand(item), ['stop'])
19964
20156
  }, null);
19965
20157
  }
19966
- return vue.toDisplayString(slotProps.value);
20158
+ const displayValue = vue.toDisplayString(slotProps.value);
20159
+ return !mobile.value ? displayValue : vue.createVNode(vue.Fragment, null, [vue.createVNode("div", {
20160
+ "class": "v-data-table__td-title"
20161
+ }, [slots[headerSlotName]?.(columnSlotProps) ?? column.title]), vue.createVNode("div", {
20162
+ "class": "v-data-table__td-value"
20163
+ }, [slots[slotName]?.(slotProps) ?? displayValue])]);
19967
20164
  }
19968
20165
  });
19969
20166
  })]));
@@ -19988,7 +20185,8 @@
19988
20185
  default: '$vuetify.noDataText'
19989
20186
  },
19990
20187
  rowProps: [Object, Function],
19991
- cellProps: [Object, Function]
20188
+ cellProps: [Object, Function],
20189
+ ...makeDisplayProps()
19992
20190
  }, 'VDataTableRows');
19993
20191
  const VDataTableRows = genericComponent()({
19994
20192
  name: 'VDataTableRows',
@@ -20018,6 +20216,9 @@
20018
20216
  const {
20019
20217
  t
20020
20218
  } = useLocale();
20219
+ const {
20220
+ mobile
20221
+ } = useDisplay(props);
20021
20222
  useRender(() => {
20022
20223
  if (props.loading && (!props.items.length || slots.loading)) {
20023
20224
  return vue.createVNode("tr", {
@@ -20072,7 +20273,8 @@
20072
20273
  } : undefined,
20073
20274
  index,
20074
20275
  item,
20075
- cellProps: props.cellProps
20276
+ cellProps: props.cellProps,
20277
+ mobile: mobile.value
20076
20278
  }, getPrefixedEventHandlers(attrs, ':row', () => slotProps), typeof props.rowProps === 'function' ? props.rowProps({
20077
20279
  item: slotProps.item,
20078
20280
  index: slotProps.index,
@@ -21899,8 +22101,18 @@
21899
22101
  emit('update:year', value);
21900
22102
  }
21901
22103
  vue.watch(model, (val, oldVal) => {
21902
- const before = adapter.date(wrapInArray(val)[0]);
21903
- const after = adapter.date(wrapInArray(oldVal)[0]);
22104
+ const before = adapter.date(wrapInArray(oldVal)[oldVal.length - 1]);
22105
+ const after = adapter.date(wrapInArray(val)[val.length - 1]);
22106
+ const newMonth = adapter.getMonth(after);
22107
+ const newYear = adapter.getYear(after);
22108
+ if (newMonth !== month.value) {
22109
+ month.value = newMonth;
22110
+ onUpdateMonth(month.value);
22111
+ }
22112
+ if (newYear !== year.value) {
22113
+ year.value = newYear;
22114
+ onUpdateYear(year.value);
22115
+ }
21904
22116
  isReversing.value = adapter.isBefore(before, after);
21905
22117
  });
21906
22118
  useRender(() => {
@@ -22243,7 +22455,7 @@
22243
22455
  }),
22244
22456
  modelValue: {
22245
22457
  type: [Array, Object],
22246
- default: () => [],
22458
+ default: props => props.multiple ? [] : null,
22247
22459
  validator: val => {
22248
22460
  return wrapInArray(val).every(v => v != null && typeof v === 'object');
22249
22461
  }
@@ -22902,6 +23114,7 @@
22902
23114
 
22903
23115
  const makeVLayoutProps = propsFactory({
22904
23116
  ...makeComponentProps(),
23117
+ ...makeDimensionProps(),
22905
23118
  ...makeLayoutProps()
22906
23119
  }, 'VLayout');
22907
23120
  const VLayout = genericComponent()({
@@ -22918,10 +23131,13 @@
22918
23131
  items,
22919
23132
  layoutRef
22920
23133
  } = createLayout(props);
23134
+ const {
23135
+ dimensionStyles
23136
+ } = useDimension(props);
22921
23137
  useRender(() => vue.createVNode("div", {
22922
23138
  "ref": layoutRef,
22923
23139
  "class": [layoutClasses.value, props.class],
22924
- "style": [layoutStyles.value, props.style]
23140
+ "style": [dimensionStyles.value, layoutStyles.value, props.style]
22925
23141
  }, [vue.createVNode(vue.Suspense, null, {
22926
23142
  default: () => [vue.createVNode(vue.Fragment, null, [slots.default?.()])]
22927
23143
  })]));
@@ -23284,6 +23500,7 @@
23284
23500
 
23285
23501
  function useTouch(_ref) {
23286
23502
  let {
23503
+ el,
23287
23504
  isActive,
23288
23505
  isTemporary,
23289
23506
  width,
@@ -23333,10 +23550,10 @@
23333
23550
  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();
23334
23551
  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());
23335
23552
  if (inTouchZone || inElement || isActive.value && isTemporary.value) {
23336
- maybeDragging = true;
23337
23553
  start = [touchX, touchY];
23338
23554
  offset.value = getOffset(isHorizontal.value ? touchX : touchY, isActive.value);
23339
23555
  dragProgress.value = getProgress(isHorizontal.value ? touchX : touchY);
23556
+ maybeDragging = offset.value > -20 && offset.value < 80;
23340
23557
  endTouch(e);
23341
23558
  addMovement(e);
23342
23559
  }
@@ -23396,6 +23613,18 @@
23396
23613
  transition: 'none'
23397
23614
  } : undefined;
23398
23615
  });
23616
+ useToggleScope(isDragging, () => {
23617
+ const transform = el.value?.style.transform ?? null;
23618
+ const transition = el.value?.style.transition ?? null;
23619
+ vue.watchEffect(() => {
23620
+ el.value?.style.setProperty('transform', dragStyles.value?.transform || 'none');
23621
+ el.value?.style.setProperty('transition', dragStyles.value?.transition || null);
23622
+ });
23623
+ vue.onScopeDispose(() => {
23624
+ el.value?.style.setProperty('transform', transform);
23625
+ el.value?.style.setProperty('transition', transition);
23626
+ });
23627
+ });
23399
23628
  return {
23400
23629
  isDragging,
23401
23630
  dragProgress,
@@ -23434,6 +23663,7 @@
23434
23663
  },
23435
23664
  image: String,
23436
23665
  temporary: Boolean,
23666
+ persistent: Boolean,
23437
23667
  touchless: Boolean,
23438
23668
  width: {
23439
23669
  type: [Number, String],
@@ -23515,6 +23745,7 @@
23515
23745
  const location = vue.computed(() => {
23516
23746
  return toPhysical(props.location, isRtl.value);
23517
23747
  });
23748
+ const isPersistent = vue.computed(() => props.persistent);
23518
23749
  const isTemporary = vue.computed(() => !props.permanent && (mobile.value || props.temporary));
23519
23750
  const isSticky = vue.computed(() => props.sticky && !isTemporary.value && location.value !== 'bottom');
23520
23751
  useToggleScope(() => props.expandOnHover && props.rail != null, () => {
@@ -23534,9 +23765,9 @@
23534
23765
  }
23535
23766
  const {
23536
23767
  isDragging,
23537
- dragProgress,
23538
- dragStyles
23768
+ dragProgress
23539
23769
  } = useTouch({
23770
+ el: rootEl,
23540
23771
  isActive,
23541
23772
  isTemporary,
23542
23773
  width,
@@ -23547,6 +23778,7 @@
23547
23778
  const size = isTemporary.value ? 0 : props.rail && props.expandOnHover ? Number(props.railWidth) : width.value;
23548
23779
  return isDragging.value ? size * dragProgress.value : size;
23549
23780
  });
23781
+ const elementSize = vue.computed(() => ['top', 'bottom'].includes(props.location) ? 0 : width.value);
23550
23782
  const {
23551
23783
  layoutItemStyles,
23552
23784
  layoutItemScrimStyles,
@@ -23556,7 +23788,7 @@
23556
23788
  order: vue.computed(() => parseInt(props.order, 10)),
23557
23789
  position: location,
23558
23790
  layoutSize,
23559
- elementSize: width,
23791
+ elementSize,
23560
23792
  active: vue.computed(() => isActive.value || isDragging.value),
23561
23793
  disableTransitions: vue.computed(() => isDragging.value),
23562
23794
  absolute: vue.computed(() =>
@@ -23598,10 +23830,13 @@
23598
23830
  'v-navigation-drawer--is-hovering': isHovering.value,
23599
23831
  'v-navigation-drawer--rail': props.rail,
23600
23832
  'v-navigation-drawer--temporary': isTemporary.value,
23833
+ 'v-navigation-drawer--persistent': isPersistent.value,
23601
23834
  'v-navigation-drawer--active': isActive.value,
23602
23835
  'v-navigation-drawer--sticky': isSticky.value
23603
23836
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, displayClasses.value, elevationClasses.value, roundedClasses.value, props.class],
23604
- "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
23837
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, stickyStyles.value, props.style, ['top', 'bottom'].includes(location.value) ? {
23838
+ height: 'auto'
23839
+ } : {}]
23605
23840
  }, scopeId, attrs), {
23606
23841
  default: () => [hasImage && vue.createVNode("div", {
23607
23842
  "key": "image",
@@ -23636,7 +23871,10 @@
23636
23871
  default: () => [isTemporary.value && (isDragging.value || isActive.value) && !!props.scrim && vue.createVNode("div", vue.mergeProps({
23637
23872
  "class": ['v-navigation-drawer__scrim', scrimColor.backgroundColorClasses.value],
23638
23873
  "style": [scrimStyles.value, scrimColor.backgroundColorStyles.value],
23639
- "onClick": () => isActive.value = false
23874
+ "onClick": () => {
23875
+ if (isPersistent.value) return;
23876
+ isActive.value = false;
23877
+ }
23640
23878
  }, scopeId), null)]
23641
23879
  })]);
23642
23880
  });
@@ -24117,8 +24355,8 @@
24117
24355
  } = useRtl();
24118
24356
  function getActiveThumb(e) {
24119
24357
  if (!startThumbRef.value || !stopThumbRef.value) return;
24120
- const startOffset = getOffset$1(e, startThumbRef.value.$el, props.direction);
24121
- const stopOffset = getOffset$1(e, stopThumbRef.value.$el, props.direction);
24358
+ const startOffset = getOffset(e, startThumbRef.value.$el, props.direction);
24359
+ const stopOffset = getOffset(e, stopThumbRef.value.$el, props.direction);
24122
24360
  const a = Math.abs(startOffset);
24123
24361
  const b = Math.abs(stopOffset);
24124
24362
  return a < b || a === b && startOffset < 0 ? startThumbRef.value.$el : stopThumbRef.value.$el;
@@ -24713,9 +24951,6 @@
24713
24951
  slots
24714
24952
  } = _ref;
24715
24953
  const isActive = useProxiedModel(props, 'modelValue');
24716
- const {
24717
- locationStyles
24718
- } = useLocation(props);
24719
24954
  const {
24720
24955
  positionClasses
24721
24956
  } = usePosition(props);
@@ -24737,6 +24972,15 @@
24737
24972
  const overlay = vue.ref();
24738
24973
  const timerRef = vue.ref();
24739
24974
  const isHovering = vue.shallowRef(false);
24975
+ const startY = vue.shallowRef(0);
24976
+ const mainStyles = vue.ref();
24977
+ const hasLayout = vue.inject(VuetifyLayoutKey, undefined);
24978
+ useToggleScope(() => !!hasLayout, () => {
24979
+ const layout = useLayout();
24980
+ vue.watchEffect(() => {
24981
+ mainStyles.value = layout.mainStyles.value;
24982
+ });
24983
+ });
24740
24984
  vue.watch(isActive, startTimeout);
24741
24985
  vue.watch(() => props.timeout, startTimeout);
24742
24986
  vue.onMounted(() => {
@@ -24766,6 +25010,20 @@
24766
25010
  isHovering.value = false;
24767
25011
  startTimeout();
24768
25012
  }
25013
+ function onTouchstart(event) {
25014
+ startY.value = event.touches[0].clientY;
25015
+ }
25016
+ function onTouchend(event) {
25017
+ if (Math.abs(startY.value - event.changedTouches[0].clientY) > 50) {
25018
+ isActive.value = false;
25019
+ }
25020
+ }
25021
+ const locationClasses = vue.computed(() => {
25022
+ return props.location.split(' ').reduce((acc, loc) => {
25023
+ acc[`v-snackbar--${loc}`] = true;
25024
+ return acc;
25025
+ }, {});
25026
+ });
24769
25027
  useRender(() => {
24770
25028
  const overlayProps = VOverlay.filterProps(props);
24771
25029
  const hasContent = !!(slots.default || slots.text || props.text);
@@ -24776,14 +25034,14 @@
24776
25034
  'v-snackbar--multi-line': props.multiLine && !props.vertical,
24777
25035
  'v-snackbar--timer': !!props.timer,
24778
25036
  'v-snackbar--vertical': props.vertical
24779
- }, positionClasses.value, props.class],
24780
- "style": props.style
25037
+ }, locationClasses.value, positionClasses.value, props.class],
25038
+ "style": [mainStyles.value, props.style]
24781
25039
  }, overlayProps, {
24782
25040
  "modelValue": isActive.value,
24783
25041
  "onUpdate:modelValue": $event => isActive.value = $event,
24784
25042
  "contentProps": vue.mergeProps({
24785
25043
  class: ['v-snackbar__wrapper', themeClasses.value, colorClasses.value, roundedClasses.value, variantClasses.value],
24786
- style: [locationStyles.value, colorStyles.value],
25044
+ style: [colorStyles.value],
24787
25045
  onPointerenter,
24788
25046
  onPointerleave
24789
25047
  }, overlayProps.contentProps),
@@ -24791,7 +25049,9 @@
24791
25049
  "noClickAnimation": true,
24792
25050
  "scrim": false,
24793
25051
  "scrollStrategy": "none",
24794
- "_disableGlobalStack": true
25052
+ "_disableGlobalStack": true,
25053
+ "onTouchstartPassive": onTouchstart,
25054
+ "onTouchend": onTouchend
24795
25055
  }, scopeId), {
24796
25056
  default: () => [genOverlays(false, 'v-snackbar'), props.timer && !isHovering.value && vue.createVNode("div", {
24797
25057
  "key": "timer",
@@ -26667,7 +26927,7 @@
26667
26927
  function mountComponent(component, props) {
26668
26928
  return function (el, binding, vnode) {
26669
26929
  const _props = typeof props === 'function' ? props(binding) : props;
26670
- const text = binding.value?.text ?? binding.value;
26930
+ const text = binding.value?.text ?? binding.value ?? _props?.text;
26671
26931
  const value = isObject(binding.value) ? binding.value : {};
26672
26932
 
26673
26933
  // Get the children from the props or directive value, or the element's children
@@ -26676,7 +26936,9 @@
26676
26936
  // If vnode.ctx is the same as the instance, then we're bound to a plain element
26677
26937
  // and need to find the nearest parent component instance to inherit provides from
26678
26938
  const provides = (vnode.ctx === binding.instance.$ ? findComponentParent(vnode, binding.instance.$)?.provides : vnode.ctx?.provides) ?? binding.instance.$.provides;
26679
- const node = vue.h(component, vue.mergeProps(_props, value), children);
26939
+ const node = vue.h(component, vue.mergeProps(_props, value), {
26940
+ default: () => children
26941
+ });
26680
26942
  node.appContext = Object.assign(Object.create(null), binding.instance.$.appContext, {
26681
26943
  provides
26682
26944
  });
@@ -26835,7 +27097,7 @@
26835
27097
  goTo
26836
27098
  };
26837
27099
  }
26838
- const version$1 = "3.6.0-alpha.2";
27100
+ const version$1 = "3.6.0";
26839
27101
  createVuetify$1.version = version$1;
26840
27102
 
26841
27103
  // Vue's inject() can only be used in setup
@@ -26860,7 +27122,7 @@
26860
27122
  ...options
26861
27123
  });
26862
27124
  };
26863
- const version = "3.6.0-alpha.2";
27125
+ const version = "3.6.0";
26864
27126
  createVuetify.version = version;
26865
27127
 
26866
27128
  exports.blueprints = index;