vuetify 3.5.16 → 3.5.18

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 (197) hide show
  1. package/dist/json/attributes.json +226 -30
  2. package/dist/json/importMap-labs.json +12 -8
  3. package/dist/json/importMap.json +114 -114
  4. package/dist/json/tags.json +54 -0
  5. package/dist/json/web-types.json +607 -84
  6. package/dist/vuetify-labs.css +2293 -2267
  7. package/dist/vuetify-labs.d.ts +742 -64
  8. package/dist/vuetify-labs.esm.js +365 -132
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +364 -131
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +2324 -2298
  13. package/dist/vuetify.d.ts +120 -55
  14. package/dist/vuetify.esm.js +177 -104
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +176 -103
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +183 -179
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAppBar/index.d.mts +1 -0
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs +8 -10
  23. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  24. package/lib/components/VBanner/VBanner.css +1 -1
  25. package/lib/components/VBreadcrumbs/VBreadcrumbs.css +1 -1
  26. package/lib/components/VBtn/index.d.mts +1 -0
  27. package/lib/components/VBtnToggle/index.d.mts +1 -0
  28. package/lib/components/VCard/VCard.css +3 -3
  29. package/lib/components/VCarousel/VCarouselItem.mjs +1 -1
  30. package/lib/components/VCarousel/VCarouselItem.mjs.map +1 -1
  31. package/lib/components/VCarousel/index.d.mts +1 -0
  32. package/lib/components/VChip/VChip.css +1 -1
  33. package/lib/components/VChip/VChip.sass +1 -0
  34. package/lib/components/VChipGroup/index.d.mts +1 -0
  35. package/lib/components/VCombobox/VCombobox.mjs +8 -10
  36. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  37. package/lib/components/VDatePicker/VDatePicker.mjs +12 -2
  38. package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
  39. package/lib/components/VDialog/VDialog.mjs +6 -2
  40. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  41. package/lib/components/VDialog/__test__/VDialog.spec.cy.mjs +39 -0
  42. package/lib/components/VDialog/__test__/VDialog.spec.cy.mjs.map +1 -0
  43. package/lib/components/VDialog/index.d.mts +4 -10
  44. package/lib/components/VFileInput/VFileInput.mjs +1 -1
  45. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  46. package/lib/components/VFileInput/index.d.mts +17 -5
  47. package/lib/components/VInput/VInput.mjs +6 -1
  48. package/lib/components/VInput/VInput.mjs.map +1 -1
  49. package/lib/components/VInput/index.d.mts +6 -0
  50. package/lib/components/VList/VList.mjs +2 -1
  51. package/lib/components/VList/VList.mjs.map +1 -1
  52. package/lib/components/VList/VListItem.css +1 -1
  53. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +3 -3
  54. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  55. package/lib/components/VNavigationDrawer/touch.mjs +16 -2
  56. package/lib/components/VNavigationDrawer/touch.mjs.map +1 -1
  57. package/lib/components/VProgressLinear/VProgressLinear.mjs +11 -1
  58. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  59. package/lib/components/VProgressLinear/index.d.mts +21 -0
  60. package/lib/components/VRangeSlider/index.d.mts +6 -0
  61. package/lib/components/VSelect/VSelect.mjs +5 -1
  62. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  63. package/lib/components/VSlideGroup/index.d.mts +1 -0
  64. package/lib/components/VSlider/index.d.mts +6 -0
  65. package/lib/components/VSnackbar/VSnackbar.css +18 -4
  66. package/lib/components/VSnackbar/VSnackbar.mjs +34 -9
  67. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  68. package/lib/components/VSnackbar/VSnackbar.sass +19 -3
  69. package/lib/components/VSwitch/VSwitch.css +14 -2
  70. package/lib/components/VSwitch/VSwitch.sass +8 -2
  71. package/lib/components/VSystemBar/VSystemBar.css +1 -1
  72. package/lib/components/VTabs/index.d.mts +1 -0
  73. package/lib/components/VTextField/index.d.mts +15 -3
  74. package/lib/components/VTextarea/index.d.mts +15 -3
  75. package/lib/components/VWindow/index.d.mts +1 -0
  76. package/lib/components/index.d.mts +85 -21
  77. package/lib/composables/directiveComponent.mjs +4 -2
  78. package/lib/composables/directiveComponent.mjs.map +1 -1
  79. package/lib/composables/group.mjs +10 -1
  80. package/lib/composables/group.mjs.map +1 -1
  81. package/lib/entry-bundler.mjs +1 -1
  82. package/lib/framework.mjs +1 -1
  83. package/lib/index.d.mts +35 -34
  84. package/lib/labs/VCalendar/VCalendar.css +0 -1
  85. package/lib/labs/VCalendar/VCalendar.sass +0 -2
  86. package/lib/labs/VEmptyState/VEmptyState.css +3 -3
  87. package/lib/labs/VFab/VFab.css +1 -0
  88. package/lib/labs/VFab/VFab.mjs +3 -2
  89. package/lib/labs/VFab/VFab.mjs.map +1 -1
  90. package/lib/labs/VFab/VFab.sass +1 -0
  91. package/lib/labs/VFab/index.d.mts +10 -0
  92. package/lib/labs/VNumberInput/VNumberInput.mjs +79 -24
  93. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  94. package/lib/labs/VNumberInput/index.d.mts +56 -29
  95. package/lib/labs/VSnackbarQueue/VSnackbarQueue.mjs +112 -0
  96. package/lib/labs/VSnackbarQueue/VSnackbarQueue.mjs.map +1 -0
  97. package/lib/labs/VSnackbarQueue/index.d.mts +2693 -0
  98. package/lib/labs/VSnackbarQueue/index.mjs +2 -0
  99. package/lib/labs/VSnackbarQueue/index.mjs.map +1 -0
  100. package/lib/labs/VSpeedDial/VSpeedDial.mjs +1 -2
  101. package/lib/labs/VSpeedDial/VSpeedDial.mjs.map +1 -1
  102. package/lib/labs/VTimePicker/VTimePickerClock.mjs +1 -3
  103. package/lib/labs/VTimePicker/VTimePickerClock.mjs.map +1 -1
  104. package/lib/labs/VTimePicker/index.d.mts +6 -13
  105. package/lib/labs/components.d.mts +2893 -282
  106. package/lib/labs/components.mjs +1 -0
  107. package/lib/labs/components.mjs.map +1 -1
  108. package/lib/locale/af.mjs +1 -0
  109. package/lib/locale/af.mjs.map +1 -1
  110. package/lib/locale/ar.mjs +1 -0
  111. package/lib/locale/ar.mjs.map +1 -1
  112. package/lib/locale/az.mjs +1 -0
  113. package/lib/locale/az.mjs.map +1 -1
  114. package/lib/locale/bg.mjs +1 -0
  115. package/lib/locale/bg.mjs.map +1 -1
  116. package/lib/locale/ca.mjs +1 -0
  117. package/lib/locale/ca.mjs.map +1 -1
  118. package/lib/locale/ckb.mjs +1 -0
  119. package/lib/locale/ckb.mjs.map +1 -1
  120. package/lib/locale/cs.mjs +1 -0
  121. package/lib/locale/cs.mjs.map +1 -1
  122. package/lib/locale/da.mjs +1 -0
  123. package/lib/locale/da.mjs.map +1 -1
  124. package/lib/locale/de.mjs +1 -0
  125. package/lib/locale/de.mjs.map +1 -1
  126. package/lib/locale/el.mjs +1 -0
  127. package/lib/locale/el.mjs.map +1 -1
  128. package/lib/locale/en.mjs +1 -0
  129. package/lib/locale/en.mjs.map +1 -1
  130. package/lib/locale/es.mjs +1 -0
  131. package/lib/locale/es.mjs.map +1 -1
  132. package/lib/locale/et.mjs +1 -0
  133. package/lib/locale/et.mjs.map +1 -1
  134. package/lib/locale/fa.mjs +1 -0
  135. package/lib/locale/fa.mjs.map +1 -1
  136. package/lib/locale/fi.mjs +1 -0
  137. package/lib/locale/fi.mjs.map +1 -1
  138. package/lib/locale/fr.mjs +1 -0
  139. package/lib/locale/fr.mjs.map +1 -1
  140. package/lib/locale/he.mjs +1 -0
  141. package/lib/locale/he.mjs.map +1 -1
  142. package/lib/locale/hr.mjs +1 -0
  143. package/lib/locale/hr.mjs.map +1 -1
  144. package/lib/locale/hu.mjs +1 -0
  145. package/lib/locale/hu.mjs.map +1 -1
  146. package/lib/locale/id.mjs +1 -0
  147. package/lib/locale/id.mjs.map +1 -1
  148. package/lib/locale/index.d.mts +43 -0
  149. package/lib/locale/it.mjs +1 -0
  150. package/lib/locale/it.mjs.map +1 -1
  151. package/lib/locale/ja.mjs +1 -0
  152. package/lib/locale/ja.mjs.map +1 -1
  153. package/lib/locale/km.mjs +1 -0
  154. package/lib/locale/km.mjs.map +1 -1
  155. package/lib/locale/ko.mjs +9 -8
  156. package/lib/locale/ko.mjs.map +1 -1
  157. package/lib/locale/lt.mjs +1 -0
  158. package/lib/locale/lt.mjs.map +1 -1
  159. package/lib/locale/lv.mjs +1 -0
  160. package/lib/locale/lv.mjs.map +1 -1
  161. package/lib/locale/nl.mjs +1 -0
  162. package/lib/locale/nl.mjs.map +1 -1
  163. package/lib/locale/no.mjs +1 -0
  164. package/lib/locale/no.mjs.map +1 -1
  165. package/lib/locale/pl.mjs +1 -0
  166. package/lib/locale/pl.mjs.map +1 -1
  167. package/lib/locale/pt.mjs +1 -0
  168. package/lib/locale/pt.mjs.map +1 -1
  169. package/lib/locale/ro.mjs +1 -0
  170. package/lib/locale/ro.mjs.map +1 -1
  171. package/lib/locale/ru.mjs +1 -0
  172. package/lib/locale/ru.mjs.map +1 -1
  173. package/lib/locale/sk.mjs +1 -0
  174. package/lib/locale/sk.mjs.map +1 -1
  175. package/lib/locale/sl.mjs +1 -0
  176. package/lib/locale/sl.mjs.map +1 -1
  177. package/lib/locale/sr-Cyrl.mjs +1 -0
  178. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  179. package/lib/locale/sr-Latn.mjs +1 -0
  180. package/lib/locale/sr-Latn.mjs.map +1 -1
  181. package/lib/locale/sv.mjs +1 -0
  182. package/lib/locale/sv.mjs.map +1 -1
  183. package/lib/locale/th.mjs +1 -0
  184. package/lib/locale/th.mjs.map +1 -1
  185. package/lib/locale/tr.mjs +1 -0
  186. package/lib/locale/tr.mjs.map +1 -1
  187. package/lib/locale/uk.mjs +1 -0
  188. package/lib/locale/uk.mjs.map +1 -1
  189. package/lib/locale/vi.mjs +1 -0
  190. package/lib/locale/vi.mjs.map +1 -1
  191. package/lib/locale/zh-Hans.mjs +1 -0
  192. package/lib/locale/zh-Hans.mjs.map +1 -1
  193. package/lib/locale/zh-Hant.mjs +1 -0
  194. package/lib/locale/zh-Hant.mjs.map +1 -1
  195. package/lib/styles/main.css +78 -78
  196. package/lib/styles/settings/_variables.scss +21 -14
  197. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.5.16
2
+ * Vuetify v3.5.18
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -1935,6 +1935,7 @@
1935
1935
  badge: 'Badge',
1936
1936
  open: 'Open',
1937
1937
  close: 'Close',
1938
+ dismiss: 'Dismiss',
1938
1939
  confirmEdit: {
1939
1940
  ok: 'OK',
1940
1941
  cancel: 'Cancel'
@@ -4159,6 +4160,7 @@
4159
4160
  const index = children.indexOf(vm);
4160
4161
  if (vue.unref(unwrapped.value) == null) {
4161
4162
  unwrapped.value = index;
4163
+ unwrapped.useIndexAsValue = true;
4162
4164
  }
4163
4165
  if (index > -1) {
4164
4166
  items.splice(index, 0, unwrapped);
@@ -4191,6 +4193,14 @@
4191
4193
  vue.onBeforeUnmount(() => {
4192
4194
  isUnmounted = true;
4193
4195
  });
4196
+ vue.onUpdated(() => {
4197
+ // #19655 update the items that use the index as the value.
4198
+ for (let i = 0; i < items.length; i++) {
4199
+ if (items[i].useIndexAsValue) {
4200
+ items[i].value = i;
4201
+ }
4202
+ }
4203
+ });
4194
4204
  function select(id, value) {
4195
4205
  const item = items.find(item => item.id === id);
4196
4206
  if (value && item?.disabled) return;
@@ -4779,6 +4789,65 @@
4779
4789
  }
4780
4790
  });
4781
4791
 
4792
+ // Composables
4793
+
4794
+ // Types
4795
+
4796
+ const oppositeMap = {
4797
+ center: 'center',
4798
+ top: 'bottom',
4799
+ bottom: 'top',
4800
+ left: 'right',
4801
+ right: 'left'
4802
+ };
4803
+ const makeLocationProps = propsFactory({
4804
+ location: String
4805
+ }, 'location');
4806
+ function useLocation(props) {
4807
+ let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
4808
+ let offset = arguments.length > 2 ? arguments[2] : undefined;
4809
+ const {
4810
+ isRtl
4811
+ } = useRtl();
4812
+ const locationStyles = vue.computed(() => {
4813
+ if (!props.location) return {};
4814
+ const {
4815
+ side,
4816
+ align
4817
+ } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
4818
+ function getOffset(side) {
4819
+ return offset ? offset(side) : 0;
4820
+ }
4821
+ const styles = {};
4822
+ if (side !== 'center') {
4823
+ if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
4824
+ }
4825
+ if (align !== 'center') {
4826
+ if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
4827
+ } else {
4828
+ if (side === 'center') styles.top = styles.left = '50%';else {
4829
+ styles[{
4830
+ top: 'left',
4831
+ bottom: 'left',
4832
+ left: 'top',
4833
+ right: 'top'
4834
+ }[side]] = '50%';
4835
+ }
4836
+ styles.transform = {
4837
+ top: 'translateX(-50%)',
4838
+ bottom: 'translateX(-50%)',
4839
+ left: 'translateY(-50%)',
4840
+ right: 'translateY(-50%)',
4841
+ center: 'translate(-50%, -50%)'
4842
+ }[side];
4843
+ }
4844
+ return styles;
4845
+ });
4846
+ return {
4847
+ locationStyles
4848
+ };
4849
+ }
4850
+
4782
4851
  const makeVProgressLinearProps = propsFactory({
4783
4852
  absolute: Boolean,
4784
4853
  active: {
@@ -4811,6 +4880,9 @@
4811
4880
  striped: Boolean,
4812
4881
  roundedBar: Boolean,
4813
4882
  ...makeComponentProps(),
4883
+ ...makeLocationProps({
4884
+ location: 'top'
4885
+ }),
4814
4886
  ...makeRoundedProps(),
4815
4887
  ...makeTagProps(),
4816
4888
  ...makeThemeProps()
@@ -4833,6 +4905,9 @@
4833
4905
  const {
4834
4906
  themeClasses
4835
4907
  } = provideTheme(props);
4908
+ const {
4909
+ locationStyles
4910
+ } = useLocation(props);
4836
4911
  const {
4837
4912
  textColorClasses,
4838
4913
  textColorStyles
@@ -4882,8 +4957,11 @@
4882
4957
  'v-progress-linear--striped': props.striped
4883
4958
  }, roundedClasses.value, themeClasses.value, rtlClasses.value, props.class],
4884
4959
  "style": [{
4960
+ bottom: props.location === 'bottom' ? 0 : undefined,
4961
+ top: props.location === 'top' ? 0 : undefined,
4885
4962
  height: props.active ? convertToUnit(height.value) : 0,
4886
- '--v-progress-linear-height': convertToUnit(height.value)
4963
+ '--v-progress-linear-height': convertToUnit(height.value),
4964
+ ...(props.absolute ? locationStyles.value : {})
4887
4965
  }, props.style],
4888
4966
  "role": "progressbar",
4889
4967
  "aria-hidden": props.active ? 'false' : 'true',
@@ -4969,65 +5047,6 @@
4969
5047
  }, null)]);
4970
5048
  }
4971
5049
 
4972
- // Composables
4973
-
4974
- // Types
4975
-
4976
- const oppositeMap = {
4977
- center: 'center',
4978
- top: 'bottom',
4979
- bottom: 'top',
4980
- left: 'right',
4981
- right: 'left'
4982
- };
4983
- const makeLocationProps = propsFactory({
4984
- location: String
4985
- }, 'location');
4986
- function useLocation(props) {
4987
- let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
4988
- let offset = arguments.length > 2 ? arguments[2] : undefined;
4989
- const {
4990
- isRtl
4991
- } = useRtl();
4992
- const locationStyles = vue.computed(() => {
4993
- if (!props.location) return {};
4994
- const {
4995
- side,
4996
- align
4997
- } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
4998
- function getOffset(side) {
4999
- return offset ? offset(side) : 0;
5000
- }
5001
- const styles = {};
5002
- if (side !== 'center') {
5003
- if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
5004
- }
5005
- if (align !== 'center') {
5006
- if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
5007
- } else {
5008
- if (side === 'center') styles.top = styles.left = '50%';else {
5009
- styles[{
5010
- top: 'left',
5011
- bottom: 'left',
5012
- left: 'top',
5013
- right: 'top'
5014
- }[side]] = '50%';
5015
- }
5016
- styles.transform = {
5017
- top: 'translateX(-50%)',
5018
- bottom: 'translateX(-50%)',
5019
- left: 'translateY(-50%)',
5020
- right: 'translateY(-50%)',
5021
- center: 'translate(-50%, -50%)'
5022
- }[side];
5023
- }
5024
- return styles;
5025
- });
5026
- return {
5027
- locationStyles
5028
- };
5029
- }
5030
-
5031
5050
  // Utilities
5032
5051
 
5033
5052
  // Types
@@ -6742,6 +6761,7 @@
6742
6761
  'onClick:append': EventProp(),
6743
6762
  ...makeComponentProps(),
6744
6763
  ...makeDensityProps(),
6764
+ ...makeThemeProps(),
6745
6765
  ...makeValidationProps()
6746
6766
  }, 'VInput');
6747
6767
  const VInput = genericComponent()({
@@ -6761,6 +6781,9 @@
6761
6781
  const {
6762
6782
  densityClasses
6763
6783
  } = useDensity(props);
6784
+ const {
6785
+ themeClasses
6786
+ } = provideTheme(props);
6764
6787
  const {
6765
6788
  rtlClasses
6766
6789
  } = useRtl();
@@ -6814,7 +6837,7 @@
6814
6837
  "class": ['v-input', `v-input--${props.direction}`, {
6815
6838
  'v-input--center-affix': props.centerAffix,
6816
6839
  'v-input--hide-spin-buttons': props.hideSpinButtons
6817
- }, densityClasses.value, rtlClasses.value, validationClasses.value, props.class],
6840
+ }, densityClasses.value, themeClasses.value, rtlClasses.value, validationClasses.value, props.class],
6818
6841
  "style": props.style
6819
6842
  }, [hasPrepend && vue.createVNode("div", {
6820
6843
  "key": "prepend",
@@ -9170,7 +9193,8 @@
9170
9193
  if (!isFocused.value && !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget))) focus();
9171
9194
  }
9172
9195
  function onKeydown(e) {
9173
- if (!contentRef.value) return;
9196
+ const target = e.target;
9197
+ if (!contentRef.value || ['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
9174
9198
  if (e.key === 'ArrowDown') {
9175
9199
  focus('next');
9176
9200
  } else if (e.key === 'ArrowUp') {
@@ -12084,6 +12108,10 @@
12084
12108
  const item = items.value.find(item => item.title.toLowerCase().startsWith(keyboardLookupPrefix));
12085
12109
  if (item !== undefined) {
12086
12110
  model.value = [item];
12111
+ const index = displayItems.value.indexOf(item);
12112
+ IN_BROWSER && window.requestAnimationFrame(() => {
12113
+ index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
12114
+ });
12087
12115
  }
12088
12116
  }
12089
12117
 
@@ -12132,7 +12160,7 @@
12132
12160
  vTextFieldRef.value.value = '';
12133
12161
  }
12134
12162
  }
12135
- vue.watch([menu, model], () => {
12163
+ vue.watch(menu, () => {
12136
12164
  if (!props.hideSelected && menu.value && model.value.length) {
12137
12165
  const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
12138
12166
  IN_BROWSER && window.requestAnimationFrame(() => {
@@ -12586,16 +12614,14 @@
12586
12614
  listRef.value?.focus('next');
12587
12615
  }
12588
12616
  if (['Backspace', 'Delete'].includes(e.key)) {
12589
- if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
12590
- if (selectionIndex.value < 0) {
12591
- if (e.key === 'Backspace' && !search.value) {
12592
- selectionIndex.value = length - 1;
12593
- }
12594
- return;
12617
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0 && !search.value) return select(model.value[0], false);
12618
+ if (~selectionIndex.value) {
12619
+ const originalSelectionIndex = selectionIndex.value;
12620
+ select(model.value[selectionIndex.value], false);
12621
+ selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
12622
+ } else if (e.key === 'Backspace' && !search.value) {
12623
+ selectionIndex.value = length - 1;
12595
12624
  }
12596
- const originalSelectionIndex = selectionIndex.value;
12597
- select(model.value[selectionIndex.value], false);
12598
- selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
12599
12625
  }
12600
12626
  if (!props.multiple) return;
12601
12627
  if (e.key === 'ArrowLeft') {
@@ -12643,7 +12669,7 @@
12643
12669
  listHasFocus.value = false;
12644
12670
  }
12645
12671
  function onUpdateModelValue(v) {
12646
- if (v == null || v === '' && !props.multiple) model.value = [];
12672
+ if (v == null || v === '' && !props.multiple && !hasSelectionSlot.value) model.value = [];
12647
12673
  }
12648
12674
  const isSelecting = vue.shallowRef(false);
12649
12675
 
@@ -13281,12 +13307,12 @@
13281
13307
  name: 'VDialog',
13282
13308
  props: makeVDialogProps(),
13283
13309
  emits: {
13284
- 'click:outside': e => true,
13285
13310
  'update:modelValue': value => true,
13286
13311
  afterLeave: () => true
13287
13312
  },
13288
13313
  setup(props, _ref) {
13289
13314
  let {
13315
+ emit,
13290
13316
  slots
13291
13317
  } = _ref;
13292
13318
  const isActive = useProxiedModel(props, 'modelValue');
@@ -13329,6 +13355,9 @@
13329
13355
  });
13330
13356
  }
13331
13357
  }
13358
+ function onAfterLeave() {
13359
+ emit('afterLeave');
13360
+ }
13332
13361
  vue.watch(isActive, async val => {
13333
13362
  if (!val) {
13334
13363
  await vue.nextTick();
@@ -13360,7 +13389,8 @@
13360
13389
  "activatorProps": activatorProps,
13361
13390
  "contentProps": contentProps,
13362
13391
  "role": "dialog",
13363
- "onAfterEnter": onAfterEnter
13392
+ "onAfterEnter": onAfterEnter,
13393
+ "onAfterLeave": onAfterLeave
13364
13394
  }, scopeId), {
13365
13395
  activator: slots.activator,
13366
13396
  default: function () {
@@ -14410,7 +14440,7 @@
14410
14440
  const imgProps = VImg.filterProps(props);
14411
14441
  const windowItemProps = VWindowItem.filterProps(props);
14412
14442
  return vue.createVNode(VWindowItem, vue.mergeProps({
14413
- "class": "v-carousel-item"
14443
+ "class": ['v-carousel-item', props.class]
14414
14444
  }, windowItemProps), {
14415
14445
  default: () => [vue.createVNode(VImg, vue.mergeProps(attrs, imgProps), slots)]
14416
14446
  });
@@ -16415,16 +16445,14 @@
16415
16445
  if (hasSelectionSlot.value) _search.value = '';
16416
16446
  }
16417
16447
  if (['Backspace', 'Delete'].includes(e.key)) {
16418
- if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
16419
- if (selectionIndex.value < 0) {
16420
- if (e.key === 'Backspace' && !search.value) {
16421
- selectionIndex.value = length - 1;
16422
- }
16423
- return;
16448
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0 && !search.value) return select(model.value[0], false);
16449
+ if (~selectionIndex.value) {
16450
+ const originalSelectionIndex = selectionIndex.value;
16451
+ select(model.value[selectionIndex.value], false);
16452
+ selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
16453
+ } else if (e.key === 'Backspace' && !search.value) {
16454
+ selectionIndex.value = length - 1;
16424
16455
  }
16425
- const originalSelectionIndex = selectionIndex.value;
16426
- select(model.value[selectionIndex.value], false);
16427
- selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
16428
16456
  }
16429
16457
  if (!props.multiple) return;
16430
16458
  if (e.key === 'ArrowLeft') {
@@ -16493,7 +16521,7 @@
16493
16521
  listHasFocus.value = false;
16494
16522
  }
16495
16523
  function onUpdateModelValue(v) {
16496
- if (v == null || v === '' && !props.multiple) model.value = [];
16524
+ if (v == null || v === '' && !props.multiple && !hasSelectionSlot.value) model.value = [];
16497
16525
  }
16498
16526
  vue.watch(isFocused, (val, oldVal) => {
16499
16527
  if (val || val === oldVal) return;
@@ -21354,8 +21382,18 @@
21354
21382
  emit('update:year', value);
21355
21383
  }
21356
21384
  vue.watch(model, (val, oldVal) => {
21357
- const before = adapter.date(wrapInArray(val)[0]);
21358
- const after = adapter.date(wrapInArray(oldVal)[0]);
21385
+ const before = adapter.date(wrapInArray(oldVal)[oldVal.length - 1]);
21386
+ const after = adapter.date(wrapInArray(val)[val.length - 1]);
21387
+ const newMonth = adapter.getMonth(after);
21388
+ const newYear = adapter.getYear(after);
21389
+ if (newMonth !== month.value) {
21390
+ month.value = newMonth;
21391
+ onUpdateMonth(month.value);
21392
+ }
21393
+ if (newYear !== year.value) {
21394
+ year.value = newYear;
21395
+ onUpdateYear(year.value);
21396
+ }
21359
21397
  isReversing.value = adapter.isBefore(before, after);
21360
21398
  });
21361
21399
  useRender(() => {
@@ -21709,7 +21747,7 @@
21709
21747
  }),
21710
21748
  modelValue: {
21711
21749
  type: [Array, Object],
21712
- default: () => [],
21750
+ default: props => props.multiple ? [] : null,
21713
21751
  validator: val => {
21714
21752
  return wrapInArray(val).every(v => v != null && typeof v === 'object');
21715
21753
  }
@@ -22738,6 +22776,7 @@
22738
22776
 
22739
22777
  function useTouch(_ref) {
22740
22778
  let {
22779
+ el,
22741
22780
  isActive,
22742
22781
  isTemporary,
22743
22782
  width,
@@ -22787,10 +22826,10 @@
22787
22826
  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();
22788
22827
  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());
22789
22828
  if (inTouchZone || inElement || isActive.value && isTemporary.value) {
22790
- maybeDragging = true;
22791
22829
  start = [touchX, touchY];
22792
22830
  offset.value = getOffset(isHorizontal.value ? touchX : touchY, isActive.value);
22793
22831
  dragProgress.value = getProgress(isHorizontal.value ? touchX : touchY);
22832
+ maybeDragging = offset.value > -20 && offset.value < 80;
22794
22833
  endTouch(e);
22795
22834
  addMovement(e);
22796
22835
  }
@@ -22850,6 +22889,18 @@
22850
22889
  transition: 'none'
22851
22890
  } : undefined;
22852
22891
  });
22892
+ useToggleScope(isDragging, () => {
22893
+ const transform = el.value?.style.transform ?? null;
22894
+ const transition = el.value?.style.transition ?? null;
22895
+ vue.watchEffect(() => {
22896
+ el.value?.style.setProperty('transform', dragStyles.value?.transform || 'none');
22897
+ el.value?.style.setProperty('transition', dragStyles.value?.transition || null);
22898
+ });
22899
+ vue.onScopeDispose(() => {
22900
+ el.value?.style.setProperty('transform', transform);
22901
+ el.value?.style.setProperty('transition', transition);
22902
+ });
22903
+ });
22853
22904
  return {
22854
22905
  isDragging,
22855
22906
  dragProgress,
@@ -22982,9 +23033,9 @@
22982
23033
  });
22983
23034
  const {
22984
23035
  isDragging,
22985
- dragProgress,
22986
- dragStyles
23036
+ dragProgress
22987
23037
  } = useTouch({
23038
+ el: rootEl,
22988
23039
  isActive,
22989
23040
  isTemporary,
22990
23041
  width,
@@ -23054,7 +23105,7 @@
23054
23105
  'v-navigation-drawer--active': isActive.value,
23055
23106
  'v-navigation-drawer--sticky': isSticky.value
23056
23107
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, displayClasses.value, elevationClasses.value, roundedClasses.value, props.class],
23057
- "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
23108
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
23058
23109
  }, scopeId, attrs), {
23059
23110
  default: () => [hasImage && vue.createVNode("div", {
23060
23111
  "key": "image",
@@ -24164,9 +24215,6 @@
24164
24215
  slots
24165
24216
  } = _ref;
24166
24217
  const isActive = useProxiedModel(props, 'modelValue');
24167
- const {
24168
- locationStyles
24169
- } = useLocation(props);
24170
24218
  const {
24171
24219
  positionClasses
24172
24220
  } = usePosition(props);
@@ -24188,6 +24236,15 @@
24188
24236
  const overlay = vue.ref();
24189
24237
  const timerRef = vue.ref();
24190
24238
  const isHovering = vue.shallowRef(false);
24239
+ const startY = vue.shallowRef(0);
24240
+ const mainStyles = vue.ref();
24241
+ const hasLayout = vue.inject(VuetifyLayoutKey, undefined);
24242
+ useToggleScope(() => !!hasLayout, () => {
24243
+ const layout = useLayout();
24244
+ vue.watchEffect(() => {
24245
+ mainStyles.value = layout.mainStyles.value;
24246
+ });
24247
+ });
24191
24248
  vue.watch(isActive, startTimeout);
24192
24249
  vue.watch(() => props.timeout, startTimeout);
24193
24250
  vue.onMounted(() => {
@@ -24217,6 +24274,20 @@
24217
24274
  isHovering.value = false;
24218
24275
  startTimeout();
24219
24276
  }
24277
+ function onTouchstart(event) {
24278
+ startY.value = event.touches[0].clientY;
24279
+ }
24280
+ function onTouchend(event) {
24281
+ if (Math.abs(startY.value - event.changedTouches[0].clientY) > 50) {
24282
+ isActive.value = false;
24283
+ }
24284
+ }
24285
+ const locationClasses = vue.computed(() => {
24286
+ return props.location.split(' ').reduce((acc, loc) => {
24287
+ acc[`v-snackbar--${loc}`] = true;
24288
+ return acc;
24289
+ }, {});
24290
+ });
24220
24291
  useRender(() => {
24221
24292
  const overlayProps = VOverlay.filterProps(props);
24222
24293
  const hasContent = !!(slots.default || slots.text || props.text);
@@ -24227,14 +24298,14 @@
24227
24298
  'v-snackbar--multi-line': props.multiLine && !props.vertical,
24228
24299
  'v-snackbar--timer': !!props.timer,
24229
24300
  'v-snackbar--vertical': props.vertical
24230
- }, positionClasses.value, props.class],
24231
- "style": props.style
24301
+ }, locationClasses.value, positionClasses.value, props.class],
24302
+ "style": [mainStyles.value, props.style]
24232
24303
  }, overlayProps, {
24233
24304
  "modelValue": isActive.value,
24234
24305
  "onUpdate:modelValue": $event => isActive.value = $event,
24235
24306
  "contentProps": vue.mergeProps({
24236
24307
  class: ['v-snackbar__wrapper', themeClasses.value, colorClasses.value, roundedClasses.value, variantClasses.value],
24237
- style: [locationStyles.value, colorStyles.value],
24308
+ style: [colorStyles.value],
24238
24309
  onPointerenter,
24239
24310
  onPointerleave
24240
24311
  }, overlayProps.contentProps),
@@ -24242,7 +24313,9 @@
24242
24313
  "noClickAnimation": true,
24243
24314
  "scrim": false,
24244
24315
  "scrollStrategy": "none",
24245
- "_disableGlobalStack": true
24316
+ "_disableGlobalStack": true,
24317
+ "onTouchstartPassive": onTouchstart,
24318
+ "onTouchend": onTouchend
24246
24319
  }, scopeId), {
24247
24320
  default: () => [genOverlays(false, 'v-snackbar'), props.timer && !isHovering.value && vue.createVNode("div", {
24248
24321
  "key": "timer",
@@ -26414,6 +26487,7 @@
26414
26487
  app: Boolean,
26415
26488
  appear: Boolean,
26416
26489
  extended: Boolean,
26490
+ layout: Boolean,
26417
26491
  location: {
26418
26492
  type: String,
26419
26493
  default: 'bottom end'
@@ -26464,8 +26538,8 @@
26464
26538
  id: props.name,
26465
26539
  order: vue.computed(() => parseInt(props.order, 10)),
26466
26540
  position,
26467
- layoutSize: height,
26468
- elementSize: vue.computed(() => height.value + 32),
26541
+ layoutSize: vue.computed(() => props.layout ? height.value + 24 : 0),
26542
+ elementSize: vue.computed(() => height.value + 24),
26469
26543
  active: vue.computed(() => props.app && model.value),
26470
26544
  absolute: vue.toRef(props, 'absolute')
26471
26545
  });
@@ -26519,9 +26593,18 @@
26519
26593
  },
26520
26594
  inset: Boolean,
26521
26595
  hideInput: Boolean,
26522
- min: Number,
26523
- max: Number,
26524
- step: Number,
26596
+ min: {
26597
+ type: Number,
26598
+ default: -Infinity
26599
+ },
26600
+ max: {
26601
+ type: Number,
26602
+ default: Infinity
26603
+ },
26604
+ step: {
26605
+ type: Number,
26606
+ default: 1
26607
+ },
26525
26608
  ...only(makeVInputProps(), ['density', 'disabled', 'focused', 'hideDetails', 'hint', 'label', 'persistentHint', 'readonly']),
26526
26609
  ...only(makeVFieldProps(), ['baseColor', 'bgColor', 'class', 'color', 'disabled', 'error', 'loading', 'reverse', 'rounded', 'style', 'theme', 'variant']),
26527
26610
  ...makeFocusProps()
@@ -26532,8 +26615,8 @@
26532
26615
  props: {
26533
26616
  ...makeVNumberInputProps(),
26534
26617
  modelValue: {
26535
- type: [Number, String],
26536
- default: 0
26618
+ type: Number,
26619
+ default: undefined
26537
26620
  }
26538
26621
  },
26539
26622
  emits: {
@@ -26552,20 +26635,45 @@
26552
26635
  blur
26553
26636
  } = useFocus(props);
26554
26637
  const inputRef = vue.ref();
26638
+ const stepDecimals = vue.computed(() => getDecimals(props.step));
26639
+ const modelDecimals = vue.computed(() => model.value != null ? getDecimals(model.value) : 0);
26640
+ const canIncrease = vue.computed(() => {
26641
+ if (model.value == null) return true;
26642
+ return model.value + props.step <= props.max;
26643
+ });
26644
+ const canDecrease = vue.computed(() => {
26645
+ if (model.value == null) return true;
26646
+ return model.value - props.step >= props.min;
26647
+ });
26648
+ vue.watchEffect(() => {
26649
+ if (model.value != null && (model.value < props.min || model.value > props.max)) {
26650
+ model.value = clamp(model.value, props.min, props.max);
26651
+ }
26652
+ });
26555
26653
  function onFocus() {
26556
26654
  if (!isFocused.value) focus();
26557
26655
  }
26558
26656
  const controlVariant = vue.computed(() => {
26559
26657
  return props.hideInput ? 'stacked' : props.controlVariant;
26560
26658
  });
26659
+ const incrementSlotProps = vue.computed(() => ({
26660
+ click: onClickUp
26661
+ }));
26662
+ const decrementSlotProps = vue.computed(() => ({
26663
+ click: onClickDown
26664
+ }));
26561
26665
  function toggleUpDown() {
26562
26666
  let increment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
26667
+ if (model.value == null) {
26668
+ model.value = 0;
26669
+ return;
26670
+ }
26671
+ const decimals = Math.max(modelDecimals.value, stepDecimals.value);
26563
26672
  if (increment) {
26564
- inputRef.value?.stepUp();
26673
+ if (canIncrease.value) model.value = +(model.value + props.step).toFixed(decimals);
26565
26674
  } else {
26566
- inputRef.value?.stepDown();
26675
+ if (canDecrease.value) model.value = +(model.value - props.step).toFixed(decimals);
26567
26676
  }
26568
- if (inputRef.value) model.value = parseInt(inputRef.value.value, 10);
26569
26677
  }
26570
26678
  function onClickUp() {
26571
26679
  toggleUpDown();
@@ -26573,12 +26681,28 @@
26573
26681
  function onClickDown() {
26574
26682
  toggleUpDown(false);
26575
26683
  }
26576
- const incrementSlotProps = vue.computed(() => ({
26577
- click: onClickUp
26578
- }));
26579
- const decrementSlotProps = vue.computed(() => ({
26580
- click: onClickDown
26581
- }));
26684
+ function onKeydown(e) {
26685
+ if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace'].includes(e.key) || e.ctrlKey) return;
26686
+ if (['ArrowDown'].includes(e.key)) {
26687
+ e.preventDefault();
26688
+ toggleUpDown(false);
26689
+ return;
26690
+ }
26691
+ if (['ArrowUp'].includes(e.key)) {
26692
+ e.preventDefault();
26693
+ toggleUpDown();
26694
+ return;
26695
+ }
26696
+
26697
+ // Only numbers, +, - & . are allowed
26698
+ if (!/^[0-9\-+.]+$/.test(e.key)) {
26699
+ e.preventDefault();
26700
+ }
26701
+ }
26702
+ function onInput(e) {
26703
+ const el = e.target;
26704
+ model.value = el.value ? +el.value : undefined;
26705
+ }
26582
26706
  useRender(() => {
26583
26707
  const fieldProps = filterFieldProps(props);
26584
26708
  const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
@@ -26591,9 +26715,11 @@
26591
26715
  return vue.createVNode("div", {
26592
26716
  "class": "v-number-input__control"
26593
26717
  }, [!slots.decrement ? vue.createVNode(VBtn, {
26718
+ "disabled": !canDecrease.value,
26594
26719
  "flat": true,
26595
26720
  "key": "decrement-btn",
26596
26721
  "height": defaultHeight,
26722
+ "name": "decrement-btn",
26597
26723
  "icon": "$expand",
26598
26724
  "size": "small",
26599
26725
  "onClick": onClickDown
@@ -26601,6 +26727,7 @@
26601
26727
  "key": "decrement-defaults",
26602
26728
  "defaults": {
26603
26729
  VBtn: {
26730
+ disabled: !canDecrease.value,
26604
26731
  flat: true,
26605
26732
  height: defaultHeight,
26606
26733
  size: 'small',
@@ -26612,9 +26739,11 @@
26612
26739
  }), vue.createVNode(VDivider, {
26613
26740
  "vertical": controlVariant.value !== 'stacked'
26614
26741
  }, null), !slots.increment ? vue.createVNode(VBtn, {
26742
+ "disabled": !canIncrease.value,
26615
26743
  "flat": true,
26616
26744
  "key": "increment-btn",
26617
26745
  "height": defaultHeight,
26746
+ "name": "increment-btn",
26618
26747
  "icon": "$collapse",
26619
26748
  "onClick": onClickUp,
26620
26749
  "size": "small"
@@ -26622,6 +26751,7 @@
26622
26751
  "key": "increment-defaults",
26623
26752
  "defaults": {
26624
26753
  VBtn: {
26754
+ disabled: !canIncrease.value,
26625
26755
  flat: true,
26626
26756
  height: defaultHeight,
26627
26757
  size: 'small',
@@ -26663,17 +26793,16 @@
26663
26793
  ...slotProps
26664
26794
  }
26665
26795
  } = _ref2;
26666
- return vue.withDirectives(vue.createVNode("input", vue.mergeProps({
26796
+ return vue.createVNode("input", vue.mergeProps({
26667
26797
  "ref": inputRef,
26668
- "type": "number",
26669
- "onUpdate:modelValue": $event => model.value = $event,
26798
+ "type": "text",
26799
+ "value": model.value,
26800
+ "onInput": onInput,
26801
+ "onKeydown": onKeydown,
26670
26802
  "class": fieldClass,
26671
- "max": props.max,
26672
- "min": props.min,
26673
- "step": props.step,
26674
26803
  "onFocus": onFocus,
26675
26804
  "onBlur": blur
26676
- }, inputAttrs), null), [[vue.vModelText, model.value]]);
26805
+ }, inputAttrs), null);
26677
26806
  },
26678
26807
  'append-inner': controlVariant.value === 'split' ? () => vue.createVNode("div", {
26679
26808
  "class": "v-number-input__control"
@@ -26703,6 +26832,112 @@
26703
26832
  }
26704
26833
  });
26705
26834
 
26835
+ // Types
26836
+
26837
+ const makeVSnackbarQueueProps = propsFactory({
26838
+ // TODO: Port this to Snackbar on dev
26839
+ closable: [Boolean, String],
26840
+ closeText: {
26841
+ type: String,
26842
+ default: '$vuetify.dismiss'
26843
+ },
26844
+ modelValue: {
26845
+ type: Array,
26846
+ default: () => []
26847
+ },
26848
+ ...omit(makeVSnackbarProps(), ['modelValue'])
26849
+ }, 'VSnackbarQueue');
26850
+ const VSnackbarQueue = genericComponent()({
26851
+ name: 'VSnackbarQueue',
26852
+ props: makeVSnackbarQueueProps(),
26853
+ emits: {
26854
+ 'update:modelValue': val => true
26855
+ },
26856
+ setup(props, _ref) {
26857
+ let {
26858
+ emit,
26859
+ slots
26860
+ } = _ref;
26861
+ const {
26862
+ t
26863
+ } = useLocale();
26864
+ const isActive = vue.shallowRef(false);
26865
+ const isVisible = vue.shallowRef(false);
26866
+ const current = vue.shallowRef();
26867
+ vue.watch(() => props.modelValue.length, (val, oldVal) => {
26868
+ if (!isVisible.value && val > oldVal) {
26869
+ showNext();
26870
+ }
26871
+ });
26872
+ vue.watch(isActive, val => {
26873
+ if (val) isVisible.value = true;
26874
+ });
26875
+ function onAfterLeave() {
26876
+ if (props.modelValue.length) {
26877
+ showNext();
26878
+ } else {
26879
+ current.value = undefined;
26880
+ isVisible.value = false;
26881
+ }
26882
+ }
26883
+ function showNext() {
26884
+ const [next, ...rest] = props.modelValue;
26885
+ emit('update:modelValue', rest);
26886
+ current.value = typeof next === 'string' ? {
26887
+ text: next
26888
+ } : next;
26889
+ vue.nextTick(() => {
26890
+ isActive.value = true;
26891
+ });
26892
+ }
26893
+ function onClickClose() {
26894
+ isActive.value = false;
26895
+ }
26896
+ const btnProps = vue.computed(() => ({
26897
+ color: typeof props.closable === 'string' ? props.closable : undefined,
26898
+ text: t(props.closeText)
26899
+ }));
26900
+ useRender(() => {
26901
+ const hasActions = !!(props.closable || slots.actions);
26902
+ const {
26903
+ modelValue: _,
26904
+ ...snackbarProps
26905
+ } = VSnackbar.filterProps(props);
26906
+ return vue.createVNode(vue.Fragment, null, [isVisible.value && !!current.value && (slots.default ? vue.createVNode(VDefaultsProvider, {
26907
+ "defaults": {
26908
+ VSnackbar: current.value
26909
+ }
26910
+ }, {
26911
+ default: () => [slots.default({
26912
+ item: current.value
26913
+ })]
26914
+ }) : vue.createVNode(VSnackbar, vue.mergeProps(snackbarProps, current.value, {
26915
+ "modelValue": isActive.value,
26916
+ "onUpdate:modelValue": $event => isActive.value = $event,
26917
+ "onAfterLeave": onAfterLeave
26918
+ }), {
26919
+ text: slots.text ? () => slots.text?.({
26920
+ item: current.value
26921
+ }) : undefined,
26922
+ actions: hasActions ? () => vue.createVNode(vue.Fragment, null, [!slots.actions ? vue.createVNode(VBtn, vue.mergeProps(btnProps.value, {
26923
+ "onClick": onClickClose
26924
+ }), null) : vue.createVNode(VDefaultsProvider, {
26925
+ "defaults": {
26926
+ VBtn: btnProps.value
26927
+ }
26928
+ }, {
26929
+ default: () => [slots.actions({
26930
+ item: current.value,
26931
+ props: {
26932
+ onClick: onClickClose
26933
+ }
26934
+ })]
26935
+ })]) : undefined
26936
+ }))]);
26937
+ });
26938
+ }
26939
+ });
26940
+
26706
26941
  // Utilities
26707
26942
 
26708
26943
  // Types
@@ -27199,8 +27434,7 @@
27199
27434
  default: () => [vue.createVNode(MaybeTransition, {
27200
27435
  "appear": true,
27201
27436
  "group": true,
27202
- "transition": props.transition,
27203
- "mode": "out-in"
27437
+ "transition": props.transition
27204
27438
  }, {
27205
27439
  default: () => [slots.default?.(slotProps)]
27206
27440
  })]
@@ -27218,9 +27452,7 @@
27218
27452
  ampm: Boolean,
27219
27453
  color: String,
27220
27454
  disabled: Boolean,
27221
- displayedValue: {
27222
- default: null
27223
- },
27455
+ displayedValue: null,
27224
27456
  double: Boolean,
27225
27457
  format: {
27226
27458
  type: Function,
@@ -28349,6 +28581,7 @@
28349
28581
  VSlideYTransition: VSlideYTransition,
28350
28582
  VSlider: VSlider,
28351
28583
  VSnackbar: VSnackbar,
28584
+ VSnackbarQueue: VSnackbarQueue,
28352
28585
  VSpacer: VSpacer,
28353
28586
  VSparkline: VSparkline,
28354
28587
  VSpeedDial: VSpeedDial,
@@ -28605,7 +28838,7 @@
28605
28838
  goTo
28606
28839
  };
28607
28840
  }
28608
- const version$1 = "3.5.16";
28841
+ const version$1 = "3.5.18";
28609
28842
  createVuetify$1.version = version$1;
28610
28843
 
28611
28844
  // Vue's inject() can only be used in setup
@@ -28858,7 +29091,7 @@
28858
29091
 
28859
29092
  /* eslint-disable local-rules/sort-imports */
28860
29093
 
28861
- const version = "3.5.16";
29094
+ const version = "3.5.18";
28862
29095
 
28863
29096
  /* eslint-disable local-rules/sort-imports */
28864
29097