vuetify 3.5.16 → 3.5.17

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 (191) hide show
  1. package/dist/json/attributes.json +226 -30
  2. package/dist/json/importMap-labs.json +8 -4
  3. package/dist/json/importMap.json +126 -126
  4. package/dist/json/tags.json +54 -0
  5. package/dist/json/web-types.json +607 -84
  6. package/dist/vuetify-labs.css +2606 -2579
  7. package/dist/vuetify-labs.d.ts +742 -64
  8. package/dist/vuetify-labs.esm.js +356 -127
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +355 -126
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +2393 -2367
  13. package/dist/vuetify.d.ts +127 -62
  14. package/dist/vuetify.esm.js +169 -101
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +168 -100
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +181 -178
  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 +10 -0
  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 +26 -8
  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/group.mjs +10 -1
  78. package/lib/composables/group.mjs.map +1 -1
  79. package/lib/entry-bundler.mjs +1 -1
  80. package/lib/framework.mjs +1 -1
  81. package/lib/index.d.mts +42 -41
  82. package/lib/labs/VEmptyState/VEmptyState.css +3 -3
  83. package/lib/labs/VFab/VFab.css +1 -0
  84. package/lib/labs/VFab/VFab.mjs +3 -2
  85. package/lib/labs/VFab/VFab.mjs.map +1 -1
  86. package/lib/labs/VFab/VFab.sass +1 -0
  87. package/lib/labs/VFab/index.d.mts +10 -0
  88. package/lib/labs/VNumberInput/VNumberInput.mjs +79 -24
  89. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  90. package/lib/labs/VNumberInput/index.d.mts +56 -29
  91. package/lib/labs/VSnackbarQueue/VSnackbarQueue.mjs +112 -0
  92. package/lib/labs/VSnackbarQueue/VSnackbarQueue.mjs.map +1 -0
  93. package/lib/labs/VSnackbarQueue/index.d.mts +2693 -0
  94. package/lib/labs/VSnackbarQueue/index.mjs +2 -0
  95. package/lib/labs/VSnackbarQueue/index.mjs.map +1 -0
  96. package/lib/labs/VTimePicker/VTimePickerClock.mjs +1 -3
  97. package/lib/labs/VTimePicker/VTimePickerClock.mjs.map +1 -1
  98. package/lib/labs/VTimePicker/index.d.mts +6 -13
  99. package/lib/labs/components.d.mts +2893 -282
  100. package/lib/labs/components.mjs +1 -0
  101. package/lib/labs/components.mjs.map +1 -1
  102. package/lib/locale/af.mjs +1 -0
  103. package/lib/locale/af.mjs.map +1 -1
  104. package/lib/locale/ar.mjs +1 -0
  105. package/lib/locale/ar.mjs.map +1 -1
  106. package/lib/locale/az.mjs +1 -0
  107. package/lib/locale/az.mjs.map +1 -1
  108. package/lib/locale/bg.mjs +1 -0
  109. package/lib/locale/bg.mjs.map +1 -1
  110. package/lib/locale/ca.mjs +1 -0
  111. package/lib/locale/ca.mjs.map +1 -1
  112. package/lib/locale/ckb.mjs +1 -0
  113. package/lib/locale/ckb.mjs.map +1 -1
  114. package/lib/locale/cs.mjs +1 -0
  115. package/lib/locale/cs.mjs.map +1 -1
  116. package/lib/locale/da.mjs +1 -0
  117. package/lib/locale/da.mjs.map +1 -1
  118. package/lib/locale/de.mjs +1 -0
  119. package/lib/locale/de.mjs.map +1 -1
  120. package/lib/locale/el.mjs +1 -0
  121. package/lib/locale/el.mjs.map +1 -1
  122. package/lib/locale/en.mjs +1 -0
  123. package/lib/locale/en.mjs.map +1 -1
  124. package/lib/locale/es.mjs +1 -0
  125. package/lib/locale/es.mjs.map +1 -1
  126. package/lib/locale/et.mjs +1 -0
  127. package/lib/locale/et.mjs.map +1 -1
  128. package/lib/locale/fa.mjs +1 -0
  129. package/lib/locale/fa.mjs.map +1 -1
  130. package/lib/locale/fi.mjs +1 -0
  131. package/lib/locale/fi.mjs.map +1 -1
  132. package/lib/locale/fr.mjs +1 -0
  133. package/lib/locale/fr.mjs.map +1 -1
  134. package/lib/locale/he.mjs +1 -0
  135. package/lib/locale/he.mjs.map +1 -1
  136. package/lib/locale/hr.mjs +1 -0
  137. package/lib/locale/hr.mjs.map +1 -1
  138. package/lib/locale/hu.mjs +1 -0
  139. package/lib/locale/hu.mjs.map +1 -1
  140. package/lib/locale/id.mjs +1 -0
  141. package/lib/locale/id.mjs.map +1 -1
  142. package/lib/locale/index.d.mts +43 -0
  143. package/lib/locale/it.mjs +1 -0
  144. package/lib/locale/it.mjs.map +1 -1
  145. package/lib/locale/ja.mjs +1 -0
  146. package/lib/locale/ja.mjs.map +1 -1
  147. package/lib/locale/km.mjs +1 -0
  148. package/lib/locale/km.mjs.map +1 -1
  149. package/lib/locale/ko.mjs +1 -0
  150. package/lib/locale/ko.mjs.map +1 -1
  151. package/lib/locale/lt.mjs +1 -0
  152. package/lib/locale/lt.mjs.map +1 -1
  153. package/lib/locale/lv.mjs +1 -0
  154. package/lib/locale/lv.mjs.map +1 -1
  155. package/lib/locale/nl.mjs +1 -0
  156. package/lib/locale/nl.mjs.map +1 -1
  157. package/lib/locale/no.mjs +1 -0
  158. package/lib/locale/no.mjs.map +1 -1
  159. package/lib/locale/pl.mjs +1 -0
  160. package/lib/locale/pl.mjs.map +1 -1
  161. package/lib/locale/pt.mjs +1 -0
  162. package/lib/locale/pt.mjs.map +1 -1
  163. package/lib/locale/ro.mjs +1 -0
  164. package/lib/locale/ro.mjs.map +1 -1
  165. package/lib/locale/ru.mjs +1 -0
  166. package/lib/locale/ru.mjs.map +1 -1
  167. package/lib/locale/sk.mjs +1 -0
  168. package/lib/locale/sk.mjs.map +1 -1
  169. package/lib/locale/sl.mjs +1 -0
  170. package/lib/locale/sl.mjs.map +1 -1
  171. package/lib/locale/sr-Cyrl.mjs +1 -0
  172. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  173. package/lib/locale/sr-Latn.mjs +1 -0
  174. package/lib/locale/sr-Latn.mjs.map +1 -1
  175. package/lib/locale/sv.mjs +1 -0
  176. package/lib/locale/sv.mjs.map +1 -1
  177. package/lib/locale/th.mjs +1 -0
  178. package/lib/locale/th.mjs.map +1 -1
  179. package/lib/locale/tr.mjs +1 -0
  180. package/lib/locale/tr.mjs.map +1 -1
  181. package/lib/locale/uk.mjs +1 -0
  182. package/lib/locale/uk.mjs.map +1 -1
  183. package/lib/locale/vi.mjs +1 -0
  184. package/lib/locale/vi.mjs.map +1 -1
  185. package/lib/locale/zh-Hans.mjs +1 -0
  186. package/lib/locale/zh-Hans.mjs.map +1 -1
  187. package/lib/locale/zh-Hant.mjs +1 -0
  188. package/lib/locale/zh-Hant.mjs.map +1 -1
  189. package/lib/styles/main.css +78 -78
  190. package/lib/styles/settings/_variables.scss +21 -14
  191. package/package.json +2 -2
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.5.16
2
+ * Vuetify v3.5.17
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -2374,6 +2374,7 @@
2374
2374
  badge: 'Badge',
2375
2375
  open: 'Open',
2376
2376
  close: 'Close',
2377
+ dismiss: 'Dismiss',
2377
2378
  confirmEdit: {
2378
2379
  ok: 'OK',
2379
2380
  cancel: 'Cancel'
@@ -4598,6 +4599,7 @@
4598
4599
  const index = children.indexOf(vm);
4599
4600
  if (vue.unref(unwrapped.value) == null) {
4600
4601
  unwrapped.value = index;
4602
+ unwrapped.useIndexAsValue = true;
4601
4603
  }
4602
4604
  if (index > -1) {
4603
4605
  items.splice(index, 0, unwrapped);
@@ -4630,6 +4632,14 @@
4630
4632
  vue.onBeforeUnmount(() => {
4631
4633
  isUnmounted = true;
4632
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
+ });
4633
4643
  function select(id, value) {
4634
4644
  const item = items.find(item => item.id === id);
4635
4645
  if (value && item?.disabled) return;
@@ -5012,6 +5022,65 @@
5012
5022
  }
5013
5023
  });
5014
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
+
5015
5084
  const makeVProgressLinearProps = propsFactory({
5016
5085
  absolute: Boolean,
5017
5086
  active: {
@@ -5044,6 +5113,9 @@
5044
5113
  striped: Boolean,
5045
5114
  roundedBar: Boolean,
5046
5115
  ...makeComponentProps(),
5116
+ ...makeLocationProps({
5117
+ location: 'top'
5118
+ }),
5047
5119
  ...makeRoundedProps(),
5048
5120
  ...makeTagProps(),
5049
5121
  ...makeThemeProps()
@@ -5066,6 +5138,9 @@
5066
5138
  const {
5067
5139
  themeClasses
5068
5140
  } = provideTheme(props);
5141
+ const {
5142
+ locationStyles
5143
+ } = useLocation(props);
5069
5144
  const {
5070
5145
  textColorClasses,
5071
5146
  textColorStyles
@@ -5115,8 +5190,11 @@
5115
5190
  'v-progress-linear--striped': props.striped
5116
5191
  }, roundedClasses.value, themeClasses.value, rtlClasses.value, props.class],
5117
5192
  "style": [{
5193
+ bottom: props.location === 'bottom' ? 0 : undefined,
5194
+ top: props.location === 'top' ? 0 : undefined,
5118
5195
  height: props.active ? convertToUnit(height.value) : 0,
5119
- '--v-progress-linear-height': convertToUnit(height.value)
5196
+ '--v-progress-linear-height': convertToUnit(height.value),
5197
+ ...(props.absolute ? locationStyles.value : {})
5120
5198
  }, props.style],
5121
5199
  "role": "progressbar",
5122
5200
  "aria-hidden": props.active ? 'false' : 'true',
@@ -5202,65 +5280,6 @@
5202
5280
  }, null)]);
5203
5281
  }
5204
5282
 
5205
- // Composables
5206
-
5207
- // Types
5208
-
5209
- const oppositeMap = {
5210
- center: 'center',
5211
- top: 'bottom',
5212
- bottom: 'top',
5213
- left: 'right',
5214
- right: 'left'
5215
- };
5216
- const makeLocationProps = propsFactory({
5217
- location: String
5218
- }, 'location');
5219
- function useLocation(props) {
5220
- let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
5221
- let offset = arguments.length > 2 ? arguments[2] : undefined;
5222
- const {
5223
- isRtl
5224
- } = useRtl();
5225
- const locationStyles = vue.computed(() => {
5226
- if (!props.location) return {};
5227
- const {
5228
- side,
5229
- align
5230
- } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
5231
- function getOffset(side) {
5232
- return offset ? offset(side) : 0;
5233
- }
5234
- const styles = {};
5235
- if (side !== 'center') {
5236
- if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
5237
- }
5238
- if (align !== 'center') {
5239
- if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
5240
- } else {
5241
- if (side === 'center') styles.top = styles.left = '50%';else {
5242
- styles[{
5243
- top: 'left',
5244
- bottom: 'left',
5245
- left: 'top',
5246
- right: 'top'
5247
- }[side]] = '50%';
5248
- }
5249
- styles.transform = {
5250
- top: 'translateX(-50%)',
5251
- bottom: 'translateX(-50%)',
5252
- left: 'translateY(-50%)',
5253
- right: 'translateY(-50%)',
5254
- center: 'translate(-50%, -50%)'
5255
- }[side];
5256
- }
5257
- return styles;
5258
- });
5259
- return {
5260
- locationStyles
5261
- };
5262
- }
5263
-
5264
5283
  // Utilities
5265
5284
 
5266
5285
  // Types
@@ -6975,6 +6994,7 @@
6975
6994
  'onClick:append': EventProp(),
6976
6995
  ...makeComponentProps(),
6977
6996
  ...makeDensityProps(),
6997
+ ...makeThemeProps(),
6978
6998
  ...makeValidationProps()
6979
6999
  }, 'VInput');
6980
7000
  const VInput = genericComponent()({
@@ -6994,6 +7014,9 @@
6994
7014
  const {
6995
7015
  densityClasses
6996
7016
  } = useDensity(props);
7017
+ const {
7018
+ themeClasses
7019
+ } = provideTheme(props);
6997
7020
  const {
6998
7021
  rtlClasses
6999
7022
  } = useRtl();
@@ -7047,7 +7070,7 @@
7047
7070
  "class": ['v-input', `v-input--${props.direction}`, {
7048
7071
  'v-input--center-affix': props.centerAffix,
7049
7072
  'v-input--hide-spin-buttons': props.hideSpinButtons
7050
- }, densityClasses.value, rtlClasses.value, validationClasses.value, props.class],
7073
+ }, densityClasses.value, themeClasses.value, rtlClasses.value, validationClasses.value, props.class],
7051
7074
  "style": props.style
7052
7075
  }, [hasPrepend && vue.createVNode("div", {
7053
7076
  "key": "prepend",
@@ -9403,7 +9426,8 @@
9403
9426
  if (!isFocused.value && !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget))) focus();
9404
9427
  }
9405
9428
  function onKeydown(e) {
9406
- if (!contentRef.value) return;
9429
+ const target = e.target;
9430
+ if (!contentRef.value || ['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
9407
9431
  if (e.key === 'ArrowDown') {
9408
9432
  focus('next');
9409
9433
  } else if (e.key === 'ArrowUp') {
@@ -12317,6 +12341,10 @@
12317
12341
  const item = items.value.find(item => item.title.toLowerCase().startsWith(keyboardLookupPrefix));
12318
12342
  if (item !== undefined) {
12319
12343
  model.value = [item];
12344
+ const index = displayItems.value.indexOf(item);
12345
+ IN_BROWSER && window.requestAnimationFrame(() => {
12346
+ index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
12347
+ });
12320
12348
  }
12321
12349
  }
12322
12350
 
@@ -12365,7 +12393,7 @@
12365
12393
  vTextFieldRef.value.value = '';
12366
12394
  }
12367
12395
  }
12368
- vue.watch([menu, model], () => {
12396
+ vue.watch(menu, () => {
12369
12397
  if (!props.hideSelected && menu.value && model.value.length) {
12370
12398
  const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
12371
12399
  IN_BROWSER && window.requestAnimationFrame(() => {
@@ -12819,16 +12847,14 @@
12819
12847
  listRef.value?.focus('next');
12820
12848
  }
12821
12849
  if (['Backspace', 'Delete'].includes(e.key)) {
12822
- if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
12823
- if (selectionIndex.value < 0) {
12824
- if (e.key === 'Backspace' && !search.value) {
12825
- selectionIndex.value = length - 1;
12826
- }
12827
- return;
12850
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0 && !search.value) return select(model.value[0], false);
12851
+ if (~selectionIndex.value) {
12852
+ const originalSelectionIndex = selectionIndex.value;
12853
+ select(model.value[selectionIndex.value], false);
12854
+ selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
12855
+ } else if (e.key === 'Backspace' && !search.value) {
12856
+ selectionIndex.value = length - 1;
12828
12857
  }
12829
- const originalSelectionIndex = selectionIndex.value;
12830
- select(model.value[selectionIndex.value], false);
12831
- selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
12832
12858
  }
12833
12859
  if (!props.multiple) return;
12834
12860
  if (e.key === 'ArrowLeft') {
@@ -12876,7 +12902,7 @@
12876
12902
  listHasFocus.value = false;
12877
12903
  }
12878
12904
  function onUpdateModelValue(v) {
12879
- if (v == null || v === '' && !props.multiple) model.value = [];
12905
+ if (v == null || v === '' && !props.multiple && !hasSelectionSlot.value) model.value = [];
12880
12906
  }
12881
12907
  const isSelecting = vue.shallowRef(false);
12882
12908
 
@@ -13514,12 +13540,12 @@
13514
13540
  name: 'VDialog',
13515
13541
  props: makeVDialogProps(),
13516
13542
  emits: {
13517
- 'click:outside': e => true,
13518
13543
  'update:modelValue': value => true,
13519
13544
  afterLeave: () => true
13520
13545
  },
13521
13546
  setup(props, _ref) {
13522
13547
  let {
13548
+ emit,
13523
13549
  slots
13524
13550
  } = _ref;
13525
13551
  const isActive = useProxiedModel(props, 'modelValue');
@@ -13562,6 +13588,9 @@
13562
13588
  });
13563
13589
  }
13564
13590
  }
13591
+ function onAfterLeave() {
13592
+ emit('afterLeave');
13593
+ }
13565
13594
  vue.watch(isActive, async val => {
13566
13595
  if (!val) {
13567
13596
  await vue.nextTick();
@@ -13593,7 +13622,8 @@
13593
13622
  "activatorProps": activatorProps,
13594
13623
  "contentProps": contentProps,
13595
13624
  "role": "dialog",
13596
- "onAfterEnter": onAfterEnter
13625
+ "onAfterEnter": onAfterEnter,
13626
+ "onAfterLeave": onAfterLeave
13597
13627
  }, scopeId), {
13598
13628
  activator: slots.activator,
13599
13629
  default: function () {
@@ -14643,7 +14673,7 @@
14643
14673
  const imgProps = VImg.filterProps(props);
14644
14674
  const windowItemProps = VWindowItem.filterProps(props);
14645
14675
  return vue.createVNode(VWindowItem, vue.mergeProps({
14646
- "class": "v-carousel-item"
14676
+ "class": ['v-carousel-item', props.class]
14647
14677
  }, windowItemProps), {
14648
14678
  default: () => [vue.createVNode(VImg, vue.mergeProps(attrs, imgProps), slots)]
14649
14679
  });
@@ -16648,16 +16678,14 @@
16648
16678
  if (hasSelectionSlot.value) _search.value = '';
16649
16679
  }
16650
16680
  if (['Backspace', 'Delete'].includes(e.key)) {
16651
- if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
16652
- if (selectionIndex.value < 0) {
16653
- if (e.key === 'Backspace' && !search.value) {
16654
- selectionIndex.value = length - 1;
16655
- }
16656
- return;
16681
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0 && !search.value) return select(model.value[0], false);
16682
+ if (~selectionIndex.value) {
16683
+ const originalSelectionIndex = selectionIndex.value;
16684
+ select(model.value[selectionIndex.value], false);
16685
+ selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
16686
+ } else if (e.key === 'Backspace' && !search.value) {
16687
+ selectionIndex.value = length - 1;
16657
16688
  }
16658
- const originalSelectionIndex = selectionIndex.value;
16659
- select(model.value[selectionIndex.value], false);
16660
- selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
16661
16689
  }
16662
16690
  if (!props.multiple) return;
16663
16691
  if (e.key === 'ArrowLeft') {
@@ -16726,7 +16754,7 @@
16726
16754
  listHasFocus.value = false;
16727
16755
  }
16728
16756
  function onUpdateModelValue(v) {
16729
- if (v == null || v === '' && !props.multiple) model.value = [];
16757
+ if (v == null || v === '' && !props.multiple && !hasSelectionSlot.value) model.value = [];
16730
16758
  }
16731
16759
  vue.watch(isFocused, (val, oldVal) => {
16732
16760
  if (val || val === oldVal) return;
@@ -21589,6 +21617,16 @@
21589
21617
  vue.watch(model, (val, oldVal) => {
21590
21618
  const before = adapter.date(wrapInArray(val)[0]);
21591
21619
  const after = adapter.date(wrapInArray(oldVal)[0]);
21620
+ const newMonth = adapter.getMonth(before);
21621
+ const newYear = adapter.getYear(before);
21622
+ if (newMonth !== month.value) {
21623
+ month.value = newMonth;
21624
+ onUpdateMonth(month.value);
21625
+ }
21626
+ if (newYear !== year.value) {
21627
+ year.value = newYear;
21628
+ onUpdateYear(year.value);
21629
+ }
21592
21630
  isReversing.value = adapter.isBefore(before, after);
21593
21631
  });
21594
21632
  useRender(() => {
@@ -21942,7 +21980,7 @@
21942
21980
  }),
21943
21981
  modelValue: {
21944
21982
  type: [Array, Object],
21945
- default: () => [],
21983
+ default: props => props.multiple ? [] : null,
21946
21984
  validator: val => {
21947
21985
  return wrapInArray(val).every(v => v != null && typeof v === 'object');
21948
21986
  }
@@ -22971,6 +23009,7 @@
22971
23009
 
22972
23010
  function useTouch(_ref) {
22973
23011
  let {
23012
+ el,
22974
23013
  isActive,
22975
23014
  isTemporary,
22976
23015
  width,
@@ -23020,10 +23059,10 @@
23020
23059
  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();
23021
23060
  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());
23022
23061
  if (inTouchZone || inElement || isActive.value && isTemporary.value) {
23023
- maybeDragging = true;
23024
23062
  start = [touchX, touchY];
23025
23063
  offset.value = getOffset(isHorizontal.value ? touchX : touchY, isActive.value);
23026
23064
  dragProgress.value = getProgress(isHorizontal.value ? touchX : touchY);
23065
+ maybeDragging = offset.value > -20 && offset.value < 80;
23027
23066
  endTouch(e);
23028
23067
  addMovement(e);
23029
23068
  }
@@ -23083,6 +23122,18 @@
23083
23122
  transition: 'none'
23084
23123
  } : undefined;
23085
23124
  });
23125
+ useToggleScope(isDragging, () => {
23126
+ const transform = el.value?.style.transform ?? null;
23127
+ const transition = el.value?.style.transition ?? null;
23128
+ vue.watchEffect(() => {
23129
+ el.value?.style.setProperty('transform', dragStyles.value?.transform || 'none');
23130
+ el.value?.style.setProperty('transition', dragStyles.value?.transition || null);
23131
+ });
23132
+ vue.onScopeDispose(() => {
23133
+ el.value?.style.setProperty('transform', transform);
23134
+ el.value?.style.setProperty('transition', transition);
23135
+ });
23136
+ });
23086
23137
  return {
23087
23138
  isDragging,
23088
23139
  dragProgress,
@@ -23215,9 +23266,9 @@
23215
23266
  });
23216
23267
  const {
23217
23268
  isDragging,
23218
- dragProgress,
23219
- dragStyles
23269
+ dragProgress
23220
23270
  } = useTouch({
23271
+ el: rootEl,
23221
23272
  isActive,
23222
23273
  isTemporary,
23223
23274
  width,
@@ -23287,7 +23338,7 @@
23287
23338
  'v-navigation-drawer--active': isActive.value,
23288
23339
  'v-navigation-drawer--sticky': isSticky.value
23289
23340
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, displayClasses.value, elevationClasses.value, roundedClasses.value, props.class],
23290
- "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
23341
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
23291
23342
  }, scopeId, attrs), {
23292
23343
  default: () => [hasImage && vue.createVNode("div", {
23293
23344
  "key": "image",
@@ -24398,8 +24449,8 @@
24398
24449
  } = _ref;
24399
24450
  const isActive = useProxiedModel(props, 'modelValue');
24400
24451
  const {
24401
- locationStyles
24402
- } = useLocation(props);
24452
+ mainStyles
24453
+ } = useLayout();
24403
24454
  const {
24404
24455
  positionClasses
24405
24456
  } = usePosition(props);
@@ -24421,6 +24472,7 @@
24421
24472
  const overlay = vue.ref();
24422
24473
  const timerRef = vue.ref();
24423
24474
  const isHovering = vue.shallowRef(false);
24475
+ const startY = vue.shallowRef(0);
24424
24476
  vue.watch(isActive, startTimeout);
24425
24477
  vue.watch(() => props.timeout, startTimeout);
24426
24478
  vue.onMounted(() => {
@@ -24450,6 +24502,20 @@
24450
24502
  isHovering.value = false;
24451
24503
  startTimeout();
24452
24504
  }
24505
+ function onTouchstart(event) {
24506
+ startY.value = event.touches[0].clientY;
24507
+ }
24508
+ function onTouchend(event) {
24509
+ if (Math.abs(startY.value - event.changedTouches[0].clientY) > 50) {
24510
+ isActive.value = false;
24511
+ }
24512
+ }
24513
+ const locationClasses = vue.computed(() => {
24514
+ return props.location.split(' ').reduce((acc, loc) => {
24515
+ acc[`v-snackbar--${loc}`] = true;
24516
+ return acc;
24517
+ }, {});
24518
+ });
24453
24519
  useRender(() => {
24454
24520
  const overlayProps = VOverlay.filterProps(props);
24455
24521
  const hasContent = !!(slots.default || slots.text || props.text);
@@ -24460,14 +24526,14 @@
24460
24526
  'v-snackbar--multi-line': props.multiLine && !props.vertical,
24461
24527
  'v-snackbar--timer': !!props.timer,
24462
24528
  'v-snackbar--vertical': props.vertical
24463
- }, positionClasses.value, props.class],
24464
- "style": props.style
24529
+ }, locationClasses.value, positionClasses.value, props.class],
24530
+ "style": [mainStyles.value, props.style]
24465
24531
  }, overlayProps, {
24466
24532
  "modelValue": isActive.value,
24467
24533
  "onUpdate:modelValue": $event => isActive.value = $event,
24468
24534
  "contentProps": vue.mergeProps({
24469
24535
  class: ['v-snackbar__wrapper', themeClasses.value, colorClasses.value, roundedClasses.value, variantClasses.value],
24470
- style: [locationStyles.value, colorStyles.value],
24536
+ style: [colorStyles.value],
24471
24537
  onPointerenter,
24472
24538
  onPointerleave
24473
24539
  }, overlayProps.contentProps),
@@ -24475,7 +24541,9 @@
24475
24541
  "noClickAnimation": true,
24476
24542
  "scrim": false,
24477
24543
  "scrollStrategy": "none",
24478
- "_disableGlobalStack": true
24544
+ "_disableGlobalStack": true,
24545
+ "onTouchstart": onTouchstart,
24546
+ "onTouchend": onTouchend
24479
24547
  }, scopeId), {
24480
24548
  default: () => [genOverlays(false, 'v-snackbar'), props.timer && !isHovering.value && vue.createVNode("div", {
24481
24549
  "key": "timer",
@@ -26334,7 +26402,7 @@
26334
26402
  goTo
26335
26403
  };
26336
26404
  }
26337
- const version$1 = "3.5.16";
26405
+ const version$1 = "3.5.17";
26338
26406
  createVuetify$1.version = version$1;
26339
26407
 
26340
26408
  // Vue's inject() can only be used in setup
@@ -26359,7 +26427,7 @@
26359
26427
  ...options
26360
26428
  });
26361
26429
  };
26362
- const version = "3.5.16";
26430
+ const version = "3.5.17";
26363
26431
  createVuetify.version = version;
26364
26432
 
26365
26433
  exports.blueprints = index;