vuetify 3.6.15 → 3.7.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 (158) hide show
  1. package/dist/json/attributes.json +182 -26
  2. package/dist/json/importMap-labs.json +30 -30
  3. package/dist/json/importMap.json +150 -150
  4. package/dist/json/tags.json +44 -5
  5. package/dist/json/web-types.json +445 -42
  6. package/dist/vuetify-labs.css +2359 -2344
  7. package/dist/vuetify-labs.d.ts +690 -341
  8. package/dist/vuetify-labs.esm.js +253 -211
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +252 -210
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +2553 -2538
  13. package/dist/vuetify.d.ts +559 -315
  14. package/dist/vuetify.esm.js +189 -127
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +188 -126
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +160 -156
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VApp/VApp.mjs +2 -5
  22. package/lib/components/VApp/VApp.mjs.map +1 -1
  23. package/lib/components/VApp/index.d.mts +6 -6
  24. package/lib/components/VAppBar/VAppBar.mjs +5 -5
  25. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  26. package/lib/components/VAppBar/index.d.mts +8 -2
  27. package/lib/components/VAutocomplete/VAutocomplete.mjs +15 -8
  28. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  29. package/lib/components/VAutocomplete/index.d.mts +78 -49
  30. package/lib/components/VAvatar/VAvatar.css +9 -0
  31. package/lib/components/VAvatar/VAvatar.mjs +6 -1
  32. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  33. package/lib/components/VAvatar/VAvatar.sass +1 -0
  34. package/lib/components/VAvatar/_variables.scss +13 -0
  35. package/lib/components/VAvatar/index.d.mts +6 -0
  36. package/lib/components/VBottomNavigation/VBottomNavigation.mjs +2 -3
  37. package/lib/components/VBottomNavigation/VBottomNavigation.mjs.map +1 -1
  38. package/lib/components/VBottomNavigation/index.d.mts +2 -2
  39. package/lib/components/VBreadcrumbs/index.d.mts +8 -8
  40. package/lib/components/VBtn/VBtn.css +0 -4
  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 +0 -6
  44. package/lib/components/VBtn/_variables.scss +0 -1
  45. package/lib/components/VBtn/index.d.mts +6 -0
  46. package/lib/components/VCard/VCard.css +1 -0
  47. package/lib/components/VCard/VCard.sass +1 -0
  48. package/lib/components/VCard/_variables.scss +7 -3
  49. package/lib/components/VCarousel/index.d.mts +9 -0
  50. package/lib/components/VCheckbox/index.d.mts +7 -6
  51. package/lib/components/VCombobox/VCombobox.mjs +15 -8
  52. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  53. package/lib/components/VCombobox/index.d.mts +78 -49
  54. package/lib/components/VDialog/index.d.mts +3 -3
  55. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +7 -2
  56. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  57. package/lib/components/VExpansionPanel/index.d.mts +72 -0
  58. package/lib/components/VFab/index.d.mts +6 -0
  59. package/lib/components/VFileInput/index.d.mts +19 -18
  60. package/lib/components/VFooter/VFooter.mjs +1 -3
  61. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  62. package/lib/components/VFooter/index.d.mts +3 -3
  63. package/lib/components/VForm/index.d.mts +10 -9
  64. package/lib/components/VGrid/VContainer.mjs +6 -1
  65. package/lib/components/VGrid/VContainer.mjs.map +1 -1
  66. package/lib/components/VGrid/index.d.mts +36 -0
  67. package/lib/components/VImg/VImg.css +9 -0
  68. package/lib/components/VImg/VImg.mjs +2 -0
  69. package/lib/components/VImg/VImg.mjs.map +1 -1
  70. package/lib/components/VImg/VImg.sass +9 -0
  71. package/lib/components/VImg/index.d.mts +9 -0
  72. package/lib/components/VInput/index.d.mts +7 -6
  73. package/lib/components/VLayout/VLayout.mjs +2 -5
  74. package/lib/components/VLayout/VLayout.mjs.map +1 -1
  75. package/lib/components/VLayout/VLayoutItem.mjs +4 -6
  76. package/lib/components/VLayout/VLayoutItem.mjs.map +1 -1
  77. package/lib/components/VLayout/index.d.mts +9 -9
  78. package/lib/components/VList/VListItem.css +2 -2
  79. package/lib/components/VList/VListItem.mjs +3 -1
  80. package/lib/components/VList/VListItem.mjs.map +1 -1
  81. package/lib/components/VList/VListItem.sass +1 -1
  82. package/lib/components/VList/index.d.mts +19 -18
  83. package/lib/components/VMain/VMain.mjs +2 -3
  84. package/lib/components/VMain/VMain.mjs.map +1 -1
  85. package/lib/components/VMain/index.d.mts +2 -2
  86. package/lib/components/VMenu/VMenu.mjs +26 -8
  87. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  88. package/lib/components/VMenu/index.d.mts +30 -15
  89. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +3 -4
  90. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  91. package/lib/components/VOverlay/VOverlay.mjs +5 -4
  92. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  93. package/lib/components/VOverlay/locationStrategies.mjs +0 -6
  94. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  95. package/lib/components/VOverlay/useActivator.mjs +3 -2
  96. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  97. package/lib/components/VRadioGroup/index.d.mts +7 -6
  98. package/lib/components/VRangeSlider/index.d.mts +7 -6
  99. package/lib/components/VSelect/VSelect.mjs +15 -13
  100. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  101. package/lib/components/VSelect/index.d.mts +78 -49
  102. package/lib/components/VSelect/useScrolling.mjs +3 -3
  103. package/lib/components/VSelect/useScrolling.mjs.map +1 -1
  104. package/lib/components/VSlideGroup/VSlideGroup.mjs +3 -1
  105. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  106. package/lib/components/VSlideGroup/index.d.mts +6 -0
  107. package/lib/components/VSlider/index.d.mts +7 -6
  108. package/lib/components/VSnackbar/index.d.mts +3 -3
  109. package/lib/components/VSpeedDial/VSpeedDial.mjs +1 -1
  110. package/lib/components/VSpeedDial/VSpeedDial.mjs.map +1 -1
  111. package/lib/components/VSpeedDial/index.d.mts +28 -13
  112. package/lib/components/VSwitch/index.d.mts +7 -6
  113. package/lib/components/VTabs/index.d.mts +21 -3
  114. package/lib/components/VTextField/index.d.mts +19 -18
  115. package/lib/components/VTextarea/index.d.mts +19 -18
  116. package/lib/components/VTooltip/index.d.mts +3 -3
  117. package/lib/components/VValidation/index.d.mts +7 -6
  118. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +2 -0
  119. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  120. package/lib/components/VVirtualScroll/index.d.mts +3 -0
  121. package/lib/components/index.d.mts +504 -259
  122. package/lib/composables/layout.mjs +37 -14
  123. package/lib/composables/layout.mjs.map +1 -1
  124. package/lib/composables/nested/nested.mjs +3 -3
  125. package/lib/composables/nested/nested.mjs.map +1 -1
  126. package/lib/composables/nested/openStrategies.mjs +4 -2
  127. package/lib/composables/nested/openStrategies.mjs.map +1 -1
  128. package/lib/composables/nested/selectStrategies.mjs +5 -5
  129. package/lib/composables/nested/selectStrategies.mjs.map +1 -1
  130. package/lib/composables/validation.mjs +8 -6
  131. package/lib/composables/validation.mjs.map +1 -1
  132. package/lib/composables/virtual.mjs +1 -0
  133. package/lib/composables/virtual.mjs.map +1 -1
  134. package/lib/entry-bundler.mjs +1 -1
  135. package/lib/entry-bundler.mjs.map +1 -1
  136. package/lib/framework.mjs +1 -1
  137. package/lib/framework.mjs.map +1 -1
  138. package/lib/index.d.mts +55 -56
  139. package/lib/labs/VDateInput/index.d.mts +7 -6
  140. package/lib/labs/VNumberInput/index.d.mts +43 -42
  141. package/lib/labs/VPullToRefresh/VPullToRefresh.mjs +4 -3
  142. package/lib/labs/VPullToRefresh/VPullToRefresh.mjs.map +1 -1
  143. package/lib/labs/VPullToRefresh/index.d.mts +9 -0
  144. package/lib/labs/VSnackbarQueue/index.d.mts +3 -3
  145. package/lib/labs/VStepperVertical/index.d.mts +36 -0
  146. package/lib/labs/VTreeview/VTreeview.mjs +21 -6
  147. package/lib/labs/VTreeview/VTreeview.mjs.map +1 -1
  148. package/lib/labs/VTreeview/VTreeviewChildren.mjs +33 -10
  149. package/lib/labs/VTreeview/VTreeviewChildren.mjs.map +1 -1
  150. package/lib/labs/VTreeview/VTreeviewItem.css +1 -1
  151. package/lib/labs/VTreeview/VTreeviewItem.mjs +14 -74
  152. package/lib/labs/VTreeview/VTreeviewItem.mjs.map +1 -1
  153. package/lib/labs/VTreeview/VTreeviewItem.sass +2 -5
  154. package/lib/labs/VTreeview/index.d.mts +133 -95
  155. package/lib/labs/components.d.mts +193 -109
  156. package/lib/util/helpers.mjs +5 -0
  157. package/lib/util/helpers.mjs.map +1 -1
  158. package/package.json +2 -2
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.6.15
2
+ * Vuetify v3.7.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { shallowRef, Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, readonly, unref, warn, getCurrentInstance as getCurrentInstance$1, ref, provide, inject as inject$1, defineComponent as defineComponent$1, camelize, h, createVNode, mergeProps, onBeforeUnmount, watch, nextTick, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, Suspense, TransitionGroup, Transition, isRef, toRef, onBeforeMount, withDirectives, resolveDirective, vShow, onMounted, onUpdated, Text, resolveDynamicComponent, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, toDisplayString, vModelText, resolveComponent, render } from 'vue';
7
+ import { shallowRef, Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, unref, warn, getCurrentInstance as getCurrentInstance$1, ref, provide, inject as inject$1, defineComponent as defineComponent$1, camelize, h, createVNode, mergeProps, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, TransitionGroup, Transition, isRef, toRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, toDisplayString, vModelText, resolveComponent, render } from 'vue';
8
8
 
9
9
  const IN_BROWSER = typeof window !== 'undefined';
10
10
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
@@ -462,16 +462,6 @@ function defer(timeout, cb) {
462
462
  const timeoutId = window.setTimeout(cb, timeout);
463
463
  return () => window.clearTimeout(timeoutId);
464
464
  }
465
- function eagerComputed(fn, options) {
466
- const result = shallowRef();
467
- watchEffect(() => {
468
- result.value = fn();
469
- }, {
470
- flush: 'sync',
471
- ...options
472
- });
473
- return readonly(result);
474
- }
475
465
  function isClickInsideElement(event, targetDiv) {
476
466
  const mouseX = event.clientX;
477
467
  const mouseY = event.clientY;
@@ -498,6 +488,11 @@ function templateRef() {
498
488
  });
499
489
  return fn;
500
490
  }
491
+ function checkPrintable(e) {
492
+ const isPrintableChar = e.key.length === 1;
493
+ const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
494
+ return isPrintableChar && noModifier;
495
+ }
501
496
 
502
497
  // Utilities
503
498
  const block = ['top', 'bottom'];
@@ -2083,9 +2078,7 @@ const makeLayoutItemProps = propsFactory({
2083
2078
  function useLayout() {
2084
2079
  const layout = inject$1(VuetifyLayoutKey);
2085
2080
  if (!layout) throw new Error('[Vuetify] Could not find injected layout');
2086
- const layoutIsReady = nextTick();
2087
2081
  return {
2088
- layoutIsReady,
2089
2082
  getLayoutItem: layout.getLayoutItem,
2090
2083
  mainRect: layout.mainRect,
2091
2084
  mainStyles: layout.mainStyles
@@ -2102,7 +2095,6 @@ function useLayoutItem(options) {
2102
2095
  const isKeptAlive = shallowRef(false);
2103
2096
  onDeactivated(() => isKeptAlive.value = true);
2104
2097
  onActivated(() => isKeptAlive.value = false);
2105
- const layoutIsReady = nextTick();
2106
2098
  const {
2107
2099
  layoutItemStyles,
2108
2100
  layoutItemScrimStyles
@@ -2115,8 +2107,7 @@ function useLayoutItem(options) {
2115
2107
  return {
2116
2108
  layoutItemStyles,
2117
2109
  layoutRect: layout.layoutRect,
2118
- layoutItemScrimStyles,
2119
- layoutIsReady
2110
+ layoutItemScrimStyles
2120
2111
  };
2121
2112
  }
2122
2113
  const generateLayers = (layout, positions, layoutSizes, activeItems) => {
@@ -2162,7 +2153,29 @@ function createLayout(props) {
2162
2153
  resizeRef,
2163
2154
  contentRect: layoutRect
2164
2155
  } = useResizeObserver();
2165
- const layers = eagerComputed(() => {
2156
+ const computedOverlaps = computed(() => {
2157
+ const map = new Map();
2158
+ const overlaps = props.overlaps ?? [];
2159
+ for (const overlap of overlaps.filter(item => item.includes(':'))) {
2160
+ const [top, bottom] = overlap.split(':');
2161
+ if (!registered.value.includes(top) || !registered.value.includes(bottom)) continue;
2162
+ const topPosition = positions.get(top);
2163
+ const bottomPosition = positions.get(bottom);
2164
+ const topAmount = layoutSizes.get(top);
2165
+ const bottomAmount = layoutSizes.get(bottom);
2166
+ if (!topPosition || !bottomPosition || !topAmount || !bottomAmount) continue;
2167
+ map.set(bottom, {
2168
+ position: topPosition.value,
2169
+ amount: parseInt(topAmount.value, 10)
2170
+ });
2171
+ map.set(top, {
2172
+ position: bottomPosition.value,
2173
+ amount: -parseInt(bottomAmount.value, 10)
2174
+ });
2175
+ }
2176
+ return map;
2177
+ });
2178
+ const layers = computed(() => {
2166
2179
  const uniquePriorities = [...new Set([...priorities.values()].map(p => p.value))].sort((a, b) => a - b);
2167
2180
  const layout = [];
2168
2181
  for (const p of uniquePriorities) {
@@ -2188,7 +2201,7 @@ function createLayout(props) {
2188
2201
  })
2189
2202
  };
2190
2203
  });
2191
- const items = eagerComputed(() => {
2204
+ const items = computed(() => {
2192
2205
  return layers.value.slice(1).map((_ref, index) => {
2193
2206
  let {
2194
2207
  id
@@ -2210,7 +2223,10 @@ function createLayout(props) {
2210
2223
  return items.value.find(item => item.id === id);
2211
2224
  };
2212
2225
  const rootVm = getCurrentInstance('createLayout');
2213
- const layoutIsReady = nextTick();
2226
+ const isMounted = shallowRef(false);
2227
+ onMounted(() => {
2228
+ isMounted.value = true;
2229
+ });
2214
2230
  provide(VuetifyLayoutKey, {
2215
2231
  register: (vm, _ref2) => {
2216
2232
  let {
@@ -2248,9 +2264,13 @@ function createLayout(props) {
2248
2264
  transition: 'none'
2249
2265
  })
2250
2266
  };
2251
- if (index.value < 0) throw new Error(`Layout item "${id}" is missing`);
2267
+ if (!isMounted.value) return styles;
2252
2268
  const item = items.value[index.value];
2253
2269
  if (!item) throw new Error(`[Vuetify] Could not find layout item "${id}"`);
2270
+ const overlap = computedOverlaps.value.get(id);
2271
+ if (overlap) {
2272
+ item[overlap.position] += overlap.amount;
2273
+ }
2254
2274
  return {
2255
2275
  ...styles,
2256
2276
  height: isHorizontal ? `calc(100% - ${item.top}px - ${item.bottom}px)` : elementSize.value ? `${elementSize.value}px` : undefined,
@@ -2283,8 +2303,7 @@ function createLayout(props) {
2283
2303
  getLayoutItem,
2284
2304
  items,
2285
2305
  layoutRect,
2286
- rootZIndex,
2287
- layoutIsReady
2306
+ rootZIndex
2288
2307
  });
2289
2308
  const layoutClasses = computed(() => ['v-layout', {
2290
2309
  'v-layout--full-height': props.fullHeight
@@ -2300,7 +2319,6 @@ function createLayout(props) {
2300
2319
  getLayoutItem,
2301
2320
  items,
2302
2321
  layoutRect,
2303
- layoutIsReady,
2304
2322
  layoutRef: resizeRef
2305
2323
  };
2306
2324
  }
@@ -2997,9 +3015,7 @@ const VApp = genericComponent()({
2997
3015
  "style": [props.style]
2998
3016
  }, [createVNode("div", {
2999
3017
  "class": "v-application__wrap"
3000
- }, [createVNode(Suspense, null, {
3001
- default: () => [createVNode(Fragment, null, [slots.default?.()])]
3002
- })])]));
3018
+ }, [slots.default?.()])]));
3003
3019
  return {
3004
3020
  getLayoutItem,
3005
3021
  items,
@@ -3688,6 +3704,7 @@ const Intersect = {
3688
3704
  // not intended for public use, this is passed in by vuetify-loader
3689
3705
 
3690
3706
  const makeVImgProps = propsFactory({
3707
+ absolute: Boolean,
3691
3708
  alt: String,
3692
3709
  cover: Boolean,
3693
3710
  color: String,
@@ -3944,6 +3961,7 @@ const VImg = genericComponent()({
3944
3961
  const responsiveProps = VResponsive.filterProps(props);
3945
3962
  return withDirectives(createVNode(VResponsive, mergeProps({
3946
3963
  "class": ['v-img', {
3964
+ 'v-img--absolute': props.absolute,
3947
3965
  'v-img--booting': !isBooted.value
3948
3966
  }, backgroundColorClasses.value, roundedClasses.value, props.class],
3949
3967
  "style": [{
@@ -4356,8 +4374,9 @@ const VAppBar = genericComponent()({
4356
4374
  const isFlat = computed(() => props.flat || scrollBehavior.value.fullyHide && !isActive.value || scrollBehavior.value.elevate && (scrollBehavior.value.inverted ? currentScroll.value > 0 : currentScroll.value === 0));
4357
4375
  const opacity = computed(() => scrollBehavior.value.fadeImage ? scrollBehavior.value.inverted ? 1 - scrollRatio.value : scrollRatio.value : undefined);
4358
4376
  const height = computed(() => {
4359
- const height = Number(vToolbarRef.value?.contentHeight ?? props.height);
4360
- const extensionHeight = Number(vToolbarRef.value?.extensionHeight ?? 0);
4377
+ if (scrollBehavior.value.hide && scrollBehavior.value.inverted) return 0;
4378
+ const height = vToolbarRef.value?.contentHeight ?? 0;
4379
+ const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0;
4361
4380
  if (!canHide.value) return height + extensionHeight;
4362
4381
  return currentScroll.value < scrollThreshold.value || scrollBehavior.value.fullyHide ? height + extensionHeight : height;
4363
4382
  });
@@ -4378,8 +4397,7 @@ const VAppBar = genericComponent()({
4378
4397
  ssrBootStyles
4379
4398
  } = useSsrBoot();
4380
4399
  const {
4381
- layoutItemStyles,
4382
- layoutIsReady
4400
+ layoutItemStyles
4383
4401
  } = useLayoutItem({
4384
4402
  id: props.name,
4385
4403
  order: computed(() => parseInt(props.order, 10)),
@@ -4407,7 +4425,7 @@ const VAppBar = genericComponent()({
4407
4425
  "flat": isFlat.value
4408
4426
  }), slots);
4409
4427
  });
4410
- return layoutIsReady;
4428
+ return {};
4411
4429
  }
4412
4430
  });
4413
4431
 
@@ -5744,6 +5762,7 @@ const makeVBtnProps = propsFactory({
5744
5762
  type: Boolean,
5745
5763
  default: undefined
5746
5764
  },
5765
+ activeColor: String,
5747
5766
  baseColor: String,
5748
5767
  symbol: {
5749
5768
  type: null,
@@ -5835,10 +5854,11 @@ const VBtn = genericComponent()({
5835
5854
  }
5836
5855
  return group?.isSelected.value;
5837
5856
  });
5857
+ const color = computed(() => isActive.value ? props.activeColor ?? props.color : props.color);
5838
5858
  const variantProps = computed(() => {
5839
5859
  const showColor = group?.isSelected.value && (!link.isLink.value || link.isActive?.value) || !group || link.isActive?.value;
5840
5860
  return {
5841
- color: showColor ? props.color ?? props.baseColor : props.baseColor,
5861
+ color: showColor ? color.value ?? props.baseColor : props.baseColor,
5842
5862
  variant: props.variant
5843
5863
  };
5844
5864
  });
@@ -6179,6 +6199,7 @@ const makeVAvatarProps = propsFactory({
6179
6199
  icon: IconValue,
6180
6200
  image: String,
6181
6201
  text: String,
6202
+ ...makeBorderProps(),
6182
6203
  ...makeComponentProps(),
6183
6204
  ...makeDensityProps(),
6184
6205
  ...makeRoundedProps(),
@@ -6199,6 +6220,9 @@ const VAvatar = genericComponent()({
6199
6220
  const {
6200
6221
  themeClasses
6201
6222
  } = provideTheme(props);
6223
+ const {
6224
+ borderClasses
6225
+ } = useBorder(props);
6202
6226
  const {
6203
6227
  colorClasses,
6204
6228
  colorStyles,
@@ -6218,7 +6242,7 @@ const VAvatar = genericComponent()({
6218
6242
  "class": ['v-avatar', {
6219
6243
  'v-avatar--start': props.start,
6220
6244
  'v-avatar--end': props.end
6221
- }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6245
+ }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6222
6246
  "style": [colorStyles.value, sizeStyles.value, props.style]
6223
6247
  }, {
6224
6248
  default: () => [!slots.default ? props.image ? createVNode(VImg, {
@@ -6918,12 +6942,14 @@ function useValidation(props) {
6918
6942
  const validateOn = computed(() => {
6919
6943
  let value = (props.validateOn ?? form?.validateOn.value) || 'input';
6920
6944
  if (value === 'lazy') value = 'input lazy';
6945
+ if (value === 'eager') value = 'input eager';
6921
6946
  const set = new Set(value?.split(' ') ?? []);
6922
6947
  return {
6923
- blur: set.has('blur') || set.has('input'),
6924
6948
  input: set.has('input'),
6925
- submit: set.has('submit'),
6926
- lazy: set.has('lazy')
6949
+ blur: set.has('blur') || set.has('input') || set.has('invalid-input'),
6950
+ invalidInput: set.has('invalid-input'),
6951
+ lazy: set.has('lazy'),
6952
+ eager: set.has('eager')
6927
6953
  };
6928
6954
  });
6929
6955
  const isValid = computed(() => {
@@ -6960,11 +6986,11 @@ function useValidation(props) {
6960
6986
  });
6961
6987
  onMounted(async () => {
6962
6988
  if (!validateOn.value.lazy) {
6963
- await validate(true);
6989
+ await validate(!validateOn.value.eager);
6964
6990
  }
6965
6991
  form?.update(uid.value, isValid.value, errorMessages.value);
6966
6992
  });
6967
- useToggleScope(() => validateOn.value.input, () => {
6993
+ useToggleScope(() => validateOn.value.input || validateOn.value.invalidInput && isValid.value === false, () => {
6968
6994
  watch(validationModel, () => {
6969
6995
  if (validationModel.value != null) {
6970
6996
  validate();
@@ -6992,7 +7018,7 @@ function useValidation(props) {
6992
7018
  async function resetValidation() {
6993
7019
  isPristine.value = true;
6994
7020
  if (!validateOn.value.lazy) {
6995
- await validate(true);
7021
+ await validate(!validateOn.value.eager);
6996
7022
  } else {
6997
7023
  internalErrorMessages.value = [];
6998
7024
  }
@@ -7932,7 +7958,9 @@ const VSlideGroup = genericComponent()({
7932
7958
  selected: group.selected,
7933
7959
  scrollTo,
7934
7960
  scrollOffset,
7935
- focus
7961
+ focus,
7962
+ hasPrev,
7963
+ hasNext
7936
7964
  };
7937
7965
  }
7938
7966
  });
@@ -8402,6 +8430,7 @@ const leafSingleActiveStrategy = mandatory => {
8402
8430
  return strategy;
8403
8431
  };
8404
8432
 
8433
+ // Utilities
8405
8434
  const singleOpenStrategy = {
8406
8435
  open: _ref => {
8407
8436
  let {
@@ -8435,11 +8464,11 @@ const multipleOpenStrategy = {
8435
8464
  parents
8436
8465
  } = _ref2;
8437
8466
  if (value) {
8438
- let parent = parents.get(id);
8467
+ let parent = toRaw(parents.get(id));
8439
8468
  opened.add(id);
8440
8469
  while (parent != null && parent !== id) {
8441
8470
  opened.add(parent);
8442
- parent = parents.get(parent);
8471
+ parent = toRaw(parents.get(parent));
8443
8472
  }
8444
8473
  return opened;
8445
8474
  } else {
@@ -8610,18 +8639,18 @@ const classicSelectStrategy = mandatory => {
8610
8639
  const items = [id];
8611
8640
  while (items.length) {
8612
8641
  const item = items.shift();
8613
- selected.set(item, value ? 'on' : 'off');
8642
+ selected.set(toRaw(item), value ? 'on' : 'off');
8614
8643
  if (children.has(item)) {
8615
8644
  items.push(...children.get(item));
8616
8645
  }
8617
8646
  }
8618
- let parent = parents.get(id);
8647
+ let parent = toRaw(parents.get(id));
8619
8648
  while (parent) {
8620
8649
  const childrenIds = children.get(parent);
8621
- const everySelected = childrenIds.every(cid => selected.get(cid) === 'on');
8622
- const noneSelected = childrenIds.every(cid => !selected.has(cid) || selected.get(cid) === 'off');
8650
+ const everySelected = childrenIds.every(cid => selected.get(toRaw(cid)) === 'on');
8651
+ const noneSelected = childrenIds.every(cid => !selected.has(toRaw(cid)) || selected.get(toRaw(cid)) === 'off');
8623
8652
  selected.set(parent, everySelected ? 'on' : noneSelected ? 'off' : 'indeterminate');
8624
- parent = parents.get(parent);
8653
+ parent = toRaw(parents.get(parent));
8625
8654
  }
8626
8655
 
8627
8656
  // If mandatory and planned deselect results in no selected
@@ -8699,7 +8728,7 @@ const useNested = props => {
8699
8728
  let isUnmounted = false;
8700
8729
  const children = ref(new Map());
8701
8730
  const parents = ref(new Map());
8702
- const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(v), v => [...v.values()]);
8731
+ const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(toRaw(v)), v => [...v.values()]);
8703
8732
  const activeStrategy = computed(() => {
8704
8733
  if (typeof props.activeStrategy === 'object') return props.activeStrategy;
8705
8734
  if (typeof props.activeStrategy === 'function') return props.activeStrategy(props.mandatory);
@@ -8872,9 +8901,9 @@ const useNestedItem = (id, isGroup) => {
8872
8901
  const item = {
8873
8902
  ...parent,
8874
8903
  id: computedId,
8875
- open: (open, e) => parent.root.open(computedId.value, open, e),
8904
+ open: (open, e) => parent.root.open(toRaw(computedId.value), open, e),
8876
8905
  openOnSelect: (open, e) => parent.root.openOnSelect(computedId.value, open, e),
8877
- isOpen: computed(() => parent.root.opened.value.has(computedId.value)),
8906
+ isOpen: computed(() => parent.root.opened.value.has(toRaw(computedId.value))),
8878
8907
  parent: computed(() => parent.root.parents.value.get(computedId.value)),
8879
8908
  activate: (activated, e) => parent.root.activate(computedId.value, activated, e),
8880
8909
  isActivated: computed(() => parent.root.activated.value.has(toRaw(computedId.value))),
@@ -9098,6 +9127,7 @@ const VListItem = genericComponent()({
9098
9127
  activate,
9099
9128
  isActivated,
9100
9129
  select,
9130
+ isOpen,
9101
9131
  isSelected,
9102
9132
  isIndeterminate,
9103
9133
  isGroupActivator,
@@ -9152,6 +9182,7 @@ const VListItem = genericComponent()({
9152
9182
  const slotProps = computed(() => ({
9153
9183
  isActive: isActive.value,
9154
9184
  select,
9185
+ isOpen: isOpen.value,
9155
9186
  isSelected: isSelected.value,
9156
9187
  isIndeterminate: isIndeterminate.value
9157
9188
  }));
@@ -9171,7 +9202,7 @@ const VListItem = genericComponent()({
9171
9202
  function onKeyDown(e) {
9172
9203
  if (e.key === 'Enter' || e.key === ' ') {
9173
9204
  e.preventDefault();
9174
- onClick(e);
9205
+ e.target.dispatchEvent(new MouseEvent('click', e));
9175
9206
  }
9176
9207
  }
9177
9208
  useRender(() => {
@@ -9961,12 +9992,6 @@ function getIntrinsicSize(el, isRtl) {
9961
9992
  // el.style.removeProperty('max-width')
9962
9993
  // el.style.removeProperty('max-height')
9963
9994
 
9964
- if (isRtl) {
9965
- el.style.removeProperty('left');
9966
- } else {
9967
- el.style.removeProperty('right');
9968
- }
9969
-
9970
9995
  /* eslint-disable-next-line sonarjs/prefer-immediate-return */
9971
9996
  const contentBox = nullifyTransforms(el);
9972
9997
  if (isRtl) {
@@ -10494,7 +10519,8 @@ const makeActivatorProps = propsFactory({
10494
10519
  function useActivator(props, _ref) {
10495
10520
  let {
10496
10521
  isActive,
10497
- isTop
10522
+ isTop,
10523
+ contentEl
10498
10524
  } = _ref;
10499
10525
  const vm = getCurrentInstance('useActivator');
10500
10526
  const activatorEl = ref();
@@ -10611,7 +10637,7 @@ function useActivator(props, _ref) {
10611
10637
  return events;
10612
10638
  });
10613
10639
  watch(isTop, val => {
10614
- if (val && (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused) || openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered))) {
10640
+ if (val && (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused) || openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered)) && !contentEl.value?.contains(document.activeElement)) {
10615
10641
  isActive.value = false;
10616
10642
  }
10617
10643
  });
@@ -11021,6 +11047,9 @@ const VOverlay = genericComponent()({
11021
11047
  emit
11022
11048
  } = _ref;
11023
11049
  const vm = getCurrentInstance('VOverlay');
11050
+ const root = ref();
11051
+ const scrimEl = ref();
11052
+ const contentEl = ref();
11024
11053
  const model = useProxiedModel(props, 'modelValue');
11025
11054
  const isActive = computed({
11026
11055
  get: () => model.value,
@@ -11058,7 +11087,8 @@ const VOverlay = genericComponent()({
11058
11087
  scrimEvents
11059
11088
  } = useActivator(props, {
11060
11089
  isActive,
11061
- isTop: localTop
11090
+ isTop: localTop,
11091
+ contentEl
11062
11092
  });
11063
11093
  const {
11064
11094
  teleportTarget
@@ -11079,9 +11109,6 @@ const VOverlay = genericComponent()({
11079
11109
  watch(() => props.disabled, v => {
11080
11110
  if (v) isActive.value = false;
11081
11111
  });
11082
- const root = ref();
11083
- const scrimEl = ref();
11084
- const contentEl = ref();
11085
11112
  const {
11086
11113
  contentStyles,
11087
11114
  updateLocation
@@ -11332,10 +11359,12 @@ const makeVMenuProps = propsFactory({
11332
11359
  // TODO
11333
11360
  // disableKeys: Boolean,
11334
11361
  id: String,
11362
+ submenu: Boolean,
11335
11363
  ...omit(makeVOverlayProps({
11336
11364
  closeDelay: 250,
11337
11365
  closeOnContentClick: true,
11338
11366
  locationStrategy: 'connected',
11367
+ location: undefined,
11339
11368
  openDelay: 300,
11340
11369
  scrim: false,
11341
11370
  scrollStrategy: 'reposition',
@@ -11358,27 +11387,32 @@ const VMenu = genericComponent()({
11358
11387
  const {
11359
11388
  scopeId
11360
11389
  } = useScopeId();
11390
+ const {
11391
+ isRtl
11392
+ } = useRtl();
11361
11393
  const uid = getUid();
11362
11394
  const id = computed(() => props.id || `v-menu-${uid}`);
11363
11395
  const overlay = ref();
11364
11396
  const parent = inject$1(VMenuSymbol, null);
11365
- const openChildren = shallowRef(0);
11397
+ const openChildren = shallowRef(new Set());
11366
11398
  provide(VMenuSymbol, {
11367
11399
  register() {
11368
- ++openChildren.value;
11400
+ openChildren.value.add(uid);
11369
11401
  },
11370
11402
  unregister() {
11371
- --openChildren.value;
11403
+ openChildren.value.delete(uid);
11372
11404
  },
11373
11405
  closeParents(e) {
11374
11406
  setTimeout(() => {
11375
- if (!openChildren.value && !props.persistent && (e == null || overlay.value?.contentEl && !isClickInsideElement(e, overlay.value.contentEl))) {
11407
+ if (!openChildren.value.size && !props.persistent && (e == null || overlay.value?.contentEl && !isClickInsideElement(e, overlay.value.contentEl))) {
11376
11408
  isActive.value = false;
11377
11409
  parent?.closeParents();
11378
11410
  }
11379
11411
  }, 40);
11380
11412
  }
11381
11413
  });
11414
+ onBeforeUnmount(() => parent?.unregister());
11415
+ onDeactivated(() => isActive.value = false);
11382
11416
  async function onFocusIn(e) {
11383
11417
  const before = e.relatedTarget;
11384
11418
  const after = e.target;
@@ -11418,9 +11452,9 @@ const VMenu = genericComponent()({
11418
11452
  isActive.value = false;
11419
11453
  overlay.value?.activatorEl?.focus();
11420
11454
  }
11421
- } else if (['Enter', ' '].includes(e.key) && props.closeOnContentClick) {
11455
+ } else if (props.submenu && e.key === (isRtl.value ? 'ArrowRight' : 'ArrowLeft')) {
11422
11456
  isActive.value = false;
11423
- parent?.closeParents();
11457
+ overlay.value?.activatorEl?.focus();
11424
11458
  }
11425
11459
  }
11426
11460
  function onActivatorKeydown(e) {
@@ -11429,12 +11463,21 @@ const VMenu = genericComponent()({
11429
11463
  if (el && isActive.value) {
11430
11464
  if (e.key === 'ArrowDown') {
11431
11465
  e.preventDefault();
11466
+ e.stopImmediatePropagation();
11432
11467
  focusChild(el, 'next');
11433
11468
  } else if (e.key === 'ArrowUp') {
11434
11469
  e.preventDefault();
11470
+ e.stopImmediatePropagation();
11435
11471
  focusChild(el, 'prev');
11472
+ } else if (props.submenu) {
11473
+ if (e.key === (isRtl.value ? 'ArrowRight' : 'ArrowLeft')) {
11474
+ isActive.value = false;
11475
+ } else if (e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight')) {
11476
+ e.preventDefault();
11477
+ focusChild(el, 'first');
11478
+ }
11436
11479
  }
11437
- } else if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
11480
+ } else if (props.submenu ? e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight') : ['ArrowDown', 'ArrowUp'].includes(e.key)) {
11438
11481
  isActive.value = true;
11439
11482
  e.preventDefault();
11440
11483
  setTimeout(() => setTimeout(() => onActivatorKeydown(e)));
@@ -11458,6 +11501,7 @@ const VMenu = genericComponent()({
11458
11501
  "onUpdate:modelValue": $event => isActive.value = $event,
11459
11502
  "absolute": true,
11460
11503
  "activatorProps": activatorProps.value,
11504
+ "location": props.location ?? (props.submenu ? 'end' : 'bottom'),
11461
11505
  "onClick:outside": onClickOutside,
11462
11506
  "onKeydown": onKeydown
11463
11507
  }, scopeId), {
@@ -12290,6 +12334,7 @@ function useVirtual(props, items) {
12290
12334
  deep: true
12291
12335
  });
12292
12336
  return {
12337
+ calculateVisibleItems,
12293
12338
  containerRef,
12294
12339
  markerRef,
12295
12340
  computedItems,
@@ -12353,6 +12398,7 @@ const VVirtualScroll = genericComponent()({
12353
12398
  dimensionStyles
12354
12399
  } = useDimension(props);
12355
12400
  const {
12401
+ calculateVisibleItems,
12356
12402
  containerRef,
12357
12403
  markerRef,
12358
12404
  handleScroll,
@@ -12424,6 +12470,7 @@ const VVirtualScroll = genericComponent()({
12424
12470
  }, [children])]);
12425
12471
  });
12426
12472
  return {
12473
+ calculateVisibleItems,
12427
12474
  scrollToIndex
12428
12475
  };
12429
12476
  }
@@ -12492,9 +12539,9 @@ function useScrolling(listRef, textFieldRef) {
12492
12539
  }
12493
12540
  }
12494
12541
  return {
12495
- onListScroll,
12496
- onListKeydown
12497
- };
12542
+ onScrollPassive: onListScroll,
12543
+ onKeydown: onListKeydown
12544
+ }; // typescript doesn't know about vue's event merging
12498
12545
  }
12499
12546
 
12500
12547
  // Types
@@ -12569,7 +12616,7 @@ const VSelect = genericComponent()({
12569
12616
  const menu = computed({
12570
12617
  get: () => _menu.value,
12571
12618
  set: v => {
12572
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
12619
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
12573
12620
  _menu.value = v;
12574
12621
  }
12575
12622
  });
@@ -12608,10 +12655,7 @@ const VSelect = genericComponent()({
12608
12655
  };
12609
12656
  });
12610
12657
  const listRef = ref();
12611
- const {
12612
- onListScroll,
12613
- onListKeydown
12614
- } = useScrolling(listRef, vTextFieldRef);
12658
+ const listEvents = useScrolling(listRef, vTextFieldRef);
12615
12659
  function onClear(e) {
12616
12660
  if (props.openOnClear) {
12617
12661
  menu.value = true;
@@ -12621,6 +12665,11 @@ const VSelect = genericComponent()({
12621
12665
  if (menuDisabled.value) return;
12622
12666
  menu.value = !menu.value;
12623
12667
  }
12668
+ function onListKeydown(e) {
12669
+ if (checkPrintable(e)) {
12670
+ onKeydown(e);
12671
+ }
12672
+ }
12624
12673
  function onKeydown(e) {
12625
12674
  if (!e.key || props.readonly || form?.isReadonly.value) return;
12626
12675
  if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
@@ -12641,11 +12690,6 @@ const VSelect = genericComponent()({
12641
12690
  // html select hotkeys
12642
12691
  const KEYBOARD_LOOKUP_THRESHOLD = 1000; // milliseconds
12643
12692
 
12644
- function checkPrintable(e) {
12645
- const isPrintableChar = e.key.length === 1;
12646
- const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
12647
- return isPrintableChar && noModifier;
12648
- }
12649
12693
  if (props.multiple || !checkPrintable(e)) return;
12650
12694
  const now = performance.now();
12651
12695
  if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {
@@ -12690,6 +12734,11 @@ const VSelect = genericComponent()({
12690
12734
  menu.value = false;
12691
12735
  }
12692
12736
  }
12737
+ function onAfterEnter() {
12738
+ if (props.eager) {
12739
+ vVirtualScrollRef.value?.calculateVisibleItems();
12740
+ }
12741
+ }
12693
12742
  function onAfterLeave() {
12694
12743
  if (isFocused.value) {
12695
12744
  vTextFieldRef.value?.focus();
@@ -12768,6 +12817,7 @@ const VSelect = genericComponent()({
12768
12817
  "openOnClick": false,
12769
12818
  "closeOnContentClick": false,
12770
12819
  "transition": props.transition,
12820
+ "onAfterEnter": onAfterEnter,
12771
12821
  "onAfterLeave": onAfterLeave
12772
12822
  }, computedMenuProps.value), {
12773
12823
  default: () => [hasList && createVNode(VList, mergeProps({
@@ -12777,11 +12827,10 @@ const VSelect = genericComponent()({
12777
12827
  "onMousedown": e => e.preventDefault(),
12778
12828
  "onKeydown": onListKeydown,
12779
12829
  "onFocusin": onFocusin,
12780
- "onScrollPassive": onListScroll,
12781
12830
  "tabindex": "-1",
12782
12831
  "aria-live": "polite",
12783
12832
  "color": props.itemColor ?? props.color
12784
- }, props.listProps), {
12833
+ }, listEvents, props.listProps), {
12785
12834
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
12786
12835
  "title": t(props.noDataText)
12787
12836
  }, null)), createVNode(VVirtualScroll, {
@@ -13076,7 +13125,7 @@ const VAutocomplete = genericComponent()({
13076
13125
  const menu = computed({
13077
13126
  get: () => _menu.value,
13078
13127
  set: v => {
13079
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
13128
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
13080
13129
  _menu.value = v;
13081
13130
  }
13082
13131
  });
@@ -13120,10 +13169,7 @@ const VAutocomplete = genericComponent()({
13120
13169
  });
13121
13170
  const menuDisabled = computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
13122
13171
  const listRef = ref();
13123
- const {
13124
- onListScroll,
13125
- onListKeydown
13126
- } = useScrolling(listRef, vTextFieldRef);
13172
+ const listEvents = useScrolling(listRef, vTextFieldRef);
13127
13173
  function onClear(e) {
13128
13174
  if (props.openOnClear) {
13129
13175
  menu.value = true;
@@ -13142,6 +13188,11 @@ const VAutocomplete = genericComponent()({
13142
13188
  }
13143
13189
  menu.value = !menu.value;
13144
13190
  }
13191
+ function onListKeydown(e) {
13192
+ if (checkPrintable(e)) {
13193
+ vTextFieldRef.value?.focus();
13194
+ }
13195
+ }
13145
13196
  function onKeydown(e) {
13146
13197
  if (props.readonly || form?.isReadonly.value) return;
13147
13198
  const selectionStart = vTextFieldRef.value.selectionStart;
@@ -13206,6 +13257,11 @@ const VAutocomplete = genericComponent()({
13206
13257
  }
13207
13258
  }
13208
13259
  }
13260
+ function onAfterEnter() {
13261
+ if (props.eager) {
13262
+ vVirtualScrollRef.value?.calculateVisibleItems();
13263
+ }
13264
+ }
13209
13265
  function onAfterLeave() {
13210
13266
  if (isFocused.value) {
13211
13267
  isPristine.value = true;
@@ -13334,6 +13390,7 @@ const VAutocomplete = genericComponent()({
13334
13390
  "openOnClick": false,
13335
13391
  "closeOnContentClick": false,
13336
13392
  "transition": props.transition,
13393
+ "onAfterEnter": onAfterEnter,
13337
13394
  "onAfterLeave": onAfterLeave
13338
13395
  }, props.menuProps), {
13339
13396
  default: () => [hasList && createVNode(VList, mergeProps({
@@ -13344,11 +13401,10 @@ const VAutocomplete = genericComponent()({
13344
13401
  "onKeydown": onListKeydown,
13345
13402
  "onFocusin": onFocusin,
13346
13403
  "onFocusout": onFocusout,
13347
- "onScrollPassive": onListScroll,
13348
13404
  "tabindex": "-1",
13349
13405
  "aria-live": "polite",
13350
13406
  "color": props.itemColor ?? props.color
13351
- }, props.listProps), {
13407
+ }, listEvents, props.listProps), {
13352
13408
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
13353
13409
  "title": t(props.noDataText)
13354
13410
  }, null)), createVNode(VVirtualScroll, {
@@ -13798,8 +13854,7 @@ const VBottomNavigation = genericComponent()({
13798
13854
  const height = computed(() => Number(props.height) - (props.density === 'comfortable' ? 8 : 0) - (props.density === 'compact' ? 16 : 0));
13799
13855
  const isActive = useProxiedModel(props, 'active', props.active);
13800
13856
  const {
13801
- layoutItemStyles,
13802
- layoutIsReady
13857
+ layoutItemStyles
13803
13858
  } = useLayoutItem({
13804
13859
  id: props.name,
13805
13860
  order: computed(() => parseInt(props.order, 10)),
@@ -13837,7 +13892,7 @@ const VBottomNavigation = genericComponent()({
13837
13892
  }, [slots.default()])]
13838
13893
  });
13839
13894
  });
13840
- return layoutIsReady;
13895
+ return {};
13841
13896
  }
13842
13897
  });
13843
13898
 
@@ -16909,7 +16964,7 @@ const VCombobox = genericComponent()({
16909
16964
  const menu = computed({
16910
16965
  get: () => _menu.value,
16911
16966
  set: v => {
16912
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
16967
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
16913
16968
  _menu.value = v;
16914
16969
  }
16915
16970
  });
@@ -16992,10 +17047,7 @@ const VCombobox = genericComponent()({
16992
17047
  });
16993
17048
  const menuDisabled = computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
16994
17049
  const listRef = ref();
16995
- const {
16996
- onListScroll,
16997
- onListKeydown
16998
- } = useScrolling(listRef, vTextFieldRef);
17050
+ const listEvents = useScrolling(listRef, vTextFieldRef);
16999
17051
  function onClear(e) {
17000
17052
  cleared = true;
17001
17053
  if (props.openOnClear) {
@@ -17014,6 +17066,11 @@ const VCombobox = genericComponent()({
17014
17066
  }
17015
17067
  menu.value = !menu.value;
17016
17068
  }
17069
+ function onListKeydown(e) {
17070
+ if (checkPrintable(e)) {
17071
+ vTextFieldRef.value?.focus();
17072
+ }
17073
+ }
17017
17074
  // eslint-disable-next-line complexity
17018
17075
  function onKeydown(e) {
17019
17076
  if (isComposingIgnoreKey(e) || props.readonly || form?.isReadonly.value) return;
@@ -17078,6 +17135,11 @@ const VCombobox = genericComponent()({
17078
17135
  }
17079
17136
  }
17080
17137
  }
17138
+ function onAfterEnter() {
17139
+ if (props.eager) {
17140
+ vVirtualScrollRef.value?.calculateVisibleItems();
17141
+ }
17142
+ }
17081
17143
  function onAfterLeave() {
17082
17144
  if (isFocused.value) {
17083
17145
  isPristine.value = true;
@@ -17202,6 +17264,7 @@ const VCombobox = genericComponent()({
17202
17264
  "openOnClick": false,
17203
17265
  "closeOnContentClick": false,
17204
17266
  "transition": props.transition,
17267
+ "onAfterEnter": onAfterEnter,
17205
17268
  "onAfterLeave": onAfterLeave
17206
17269
  }, props.menuProps), {
17207
17270
  default: () => [hasList && createVNode(VList, mergeProps({
@@ -17212,11 +17275,10 @@ const VCombobox = genericComponent()({
17212
17275
  "onKeydown": onListKeydown,
17213
17276
  "onFocusin": onFocusin,
17214
17277
  "onFocusout": onFocusout,
17215
- "onScrollPassive": onListScroll,
17216
17278
  "tabindex": "-1",
17217
17279
  "aria-live": "polite",
17218
17280
  "color": props.itemColor ?? props.color
17219
- }, props.listProps), {
17281
+ }, listEvents, props.listProps), {
17220
17282
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
17221
17283
  "title": t(props.noDataText)
17222
17284
  }, null)), createVNode(VVirtualScroll, {
@@ -21160,6 +21222,7 @@ const makeVContainerProps = propsFactory({
21160
21222
  default: false
21161
21223
  },
21162
21224
  ...makeComponentProps(),
21225
+ ...makeDimensionProps(),
21163
21226
  ...makeTagProps()
21164
21227
  }, 'VContainer');
21165
21228
  const VContainer = genericComponent()({
@@ -21172,11 +21235,14 @@ const VContainer = genericComponent()({
21172
21235
  const {
21173
21236
  rtlClasses
21174
21237
  } = useRtl();
21238
+ const {
21239
+ dimensionStyles
21240
+ } = useDimension(props);
21175
21241
  useRender(() => createVNode(props.tag, {
21176
21242
  "class": ['v-container', {
21177
21243
  'v-container--fluid': props.fluid
21178
21244
  }, rtlClasses.value, props.class],
21179
- "style": props.style
21245
+ "style": [dimensionStyles.value, props.style]
21180
21246
  }, slots));
21181
21247
  return {};
21182
21248
  }
@@ -22598,7 +22664,8 @@ const makeVExpansionPanelTitleProps = propsFactory({
22598
22664
  default: false
22599
22665
  },
22600
22666
  readonly: Boolean,
22601
- ...makeComponentProps()
22667
+ ...makeComponentProps(),
22668
+ ...makeDimensionProps()
22602
22669
  }, 'VExpansionPanelTitle');
22603
22670
  const VExpansionPanelTitle = genericComponent()({
22604
22671
  name: 'VExpansionPanelTitle',
@@ -22616,6 +22683,9 @@ const VExpansionPanelTitle = genericComponent()({
22616
22683
  backgroundColorClasses,
22617
22684
  backgroundColorStyles
22618
22685
  } = useBackgroundColor(props, 'color');
22686
+ const {
22687
+ dimensionStyles
22688
+ } = useDimension(props);
22619
22689
  const slotProps = computed(() => ({
22620
22690
  collapseIcon: props.collapseIcon,
22621
22691
  disabled: expansionPanel.disabled.value,
@@ -22630,7 +22700,7 @@ const VExpansionPanelTitle = genericComponent()({
22630
22700
  'v-expansion-panel-title--focusable': props.focusable,
22631
22701
  'v-expansion-panel-title--static': props.static
22632
22702
  }, backgroundColorClasses.value, props.class],
22633
- "style": [backgroundColorStyles.value, props.style],
22703
+ "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
22634
22704
  "type": "button",
22635
22705
  "tabindex": expansionPanel.disabled.value ? -1 : undefined,
22636
22706
  "disabled": expansionPanel.disabled.value,
@@ -23153,7 +23223,6 @@ const VFooter = genericComponent()({
23153
23223
  slots
23154
23224
  } = _ref;
23155
23225
  const layoutItemStyles = ref();
23156
- const layoutIsReady = shallowRef();
23157
23226
  const {
23158
23227
  themeClasses
23159
23228
  } = provideTheme(props);
@@ -23190,7 +23259,6 @@ const VFooter = genericComponent()({
23190
23259
  });
23191
23260
  watchEffect(() => {
23192
23261
  layoutItemStyles.value = layout.layoutItemStyles.value;
23193
- layoutIsReady.value = layout.layoutIsReady;
23194
23262
  });
23195
23263
  });
23196
23264
  useRender(() => createVNode(props.tag, {
@@ -23200,7 +23268,7 @@ const VFooter = genericComponent()({
23200
23268
  height: convertToUnit(props.height)
23201
23269
  }, props.style]
23202
23270
  }, slots));
23203
- return props.app ? layoutIsReady.value : {};
23271
+ return {};
23204
23272
  }
23205
23273
  });
23206
23274
 
@@ -23627,9 +23695,7 @@ const VLayout = genericComponent()({
23627
23695
  "ref": layoutRef,
23628
23696
  "class": [layoutClasses.value, props.class],
23629
23697
  "style": [dimensionStyles.value, layoutStyles.value, props.style]
23630
- }, [createVNode(Suspense, null, {
23631
- default: () => [createVNode(Fragment, null, [slots.default?.()])]
23632
- })]));
23698
+ }, [slots.default?.()]));
23633
23699
  return {
23634
23700
  getLayoutItem,
23635
23701
  items
@@ -23660,8 +23726,7 @@ const VLayoutItem = genericComponent()({
23660
23726
  slots
23661
23727
  } = _ref;
23662
23728
  const {
23663
- layoutItemStyles,
23664
- layoutIsReady
23729
+ layoutItemStyles
23665
23730
  } = useLayoutItem({
23666
23731
  id: props.name,
23667
23732
  order: computed(() => parseInt(props.order, 10)),
@@ -23671,11 +23736,10 @@ const VLayoutItem = genericComponent()({
23671
23736
  active: toRef(props, 'modelValue'),
23672
23737
  absolute: toRef(props, 'absolute')
23673
23738
  });
23674
- useRender(() => createVNode("div", {
23739
+ return () => createVNode("div", {
23675
23740
  "class": ['v-layout-item', props.class],
23676
23741
  "style": [layoutItemStyles.value, props.style]
23677
- }, [slots.default?.()]));
23678
- return layoutIsReady;
23742
+ }, [slots.default?.()]);
23679
23743
  }
23680
23744
  });
23681
23745
 
@@ -23786,8 +23850,7 @@ const VMain = genericComponent()({
23786
23850
  dimensionStyles
23787
23851
  } = useDimension(props);
23788
23852
  const {
23789
- mainStyles,
23790
- layoutIsReady
23853
+ mainStyles
23791
23854
  } = useLayout();
23792
23855
  const {
23793
23856
  ssrBootStyles
@@ -23802,7 +23865,7 @@ const VMain = genericComponent()({
23802
23865
  "class": "v-main__scroller"
23803
23866
  }, [slots.default?.()]) : slots.default?.()]
23804
23867
  }));
23805
- return layoutIsReady;
23868
+ return {};
23806
23869
  }
23807
23870
  });
23808
23871
 
@@ -24272,8 +24335,7 @@ const VNavigationDrawer = genericComponent()({
24272
24335
  const elementSize = computed(() => ['top', 'bottom'].includes(props.location) ? 0 : width.value);
24273
24336
  const {
24274
24337
  layoutItemStyles,
24275
- layoutItemScrimStyles,
24276
- layoutIsReady
24338
+ layoutItemScrimStyles
24277
24339
  } = useLayoutItem({
24278
24340
  id: props.name,
24279
24341
  order: computed(() => parseInt(props.order, 10)),
@@ -24369,9 +24431,9 @@ const VNavigationDrawer = genericComponent()({
24369
24431
  }, scopeId), null)]
24370
24432
  })]);
24371
24433
  });
24372
- return layoutIsReady.then(() => ({
24434
+ return {
24373
24435
  isStuck
24374
- }));
24436
+ };
24375
24437
  }
24376
24438
  });
24377
24439
 
@@ -26060,7 +26122,7 @@ const VSpeedDial = genericComponent()({
26060
26122
  const model = useProxiedModel(props, 'modelValue');
26061
26123
  const menuRef = ref();
26062
26124
  const location = computed(() => {
26063
- const [y, x = 'center'] = props.location.split(' ');
26125
+ const [y, x = 'center'] = props.location?.split(' ') ?? [];
26064
26126
  return `${y} ${x}`;
26065
26127
  });
26066
26128
  const locationClasses = computed(() => ({
@@ -28146,7 +28208,7 @@ function createVuetify$1() {
28146
28208
  goTo
28147
28209
  };
28148
28210
  }
28149
- const version$1 = "3.6.15";
28211
+ const version$1 = "3.7.0";
28150
28212
  createVuetify$1.version = version$1;
28151
28213
 
28152
28214
  // Vue's inject() can only be used in setup
@@ -28171,7 +28233,7 @@ const createVuetify = function () {
28171
28233
  ...options
28172
28234
  });
28173
28235
  };
28174
- const version = "3.6.15";
28236
+ const version = "3.7.0";
28175
28237
  createVuetify.version = version;
28176
28238
 
28177
28239
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };