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
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
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
  */
@@ -466,16 +466,6 @@
466
466
  const timeoutId = window.setTimeout(cb, timeout);
467
467
  return () => window.clearTimeout(timeoutId);
468
468
  }
469
- function eagerComputed(fn, options) {
470
- const result = vue.shallowRef();
471
- vue.watchEffect(() => {
472
- result.value = fn();
473
- }, {
474
- flush: 'sync',
475
- ...options
476
- });
477
- return vue.readonly(result);
478
- }
479
469
  function isClickInsideElement(event, targetDiv) {
480
470
  const mouseX = event.clientX;
481
471
  const mouseY = event.clientY;
@@ -502,6 +492,11 @@
502
492
  });
503
493
  return fn;
504
494
  }
495
+ function checkPrintable(e) {
496
+ const isPrintableChar = e.key.length === 1;
497
+ const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
498
+ return isPrintableChar && noModifier;
499
+ }
505
500
 
506
501
  // Utilities
507
502
  const block = ['top', 'bottom'];
@@ -2087,9 +2082,7 @@
2087
2082
  function useLayout() {
2088
2083
  const layout = vue.inject(VuetifyLayoutKey);
2089
2084
  if (!layout) throw new Error('[Vuetify] Could not find injected layout');
2090
- const layoutIsReady = vue.nextTick();
2091
2085
  return {
2092
- layoutIsReady,
2093
2086
  getLayoutItem: layout.getLayoutItem,
2094
2087
  mainRect: layout.mainRect,
2095
2088
  mainStyles: layout.mainStyles
@@ -2106,7 +2099,6 @@
2106
2099
  const isKeptAlive = vue.shallowRef(false);
2107
2100
  vue.onDeactivated(() => isKeptAlive.value = true);
2108
2101
  vue.onActivated(() => isKeptAlive.value = false);
2109
- const layoutIsReady = vue.nextTick();
2110
2102
  const {
2111
2103
  layoutItemStyles,
2112
2104
  layoutItemScrimStyles
@@ -2119,8 +2111,7 @@
2119
2111
  return {
2120
2112
  layoutItemStyles,
2121
2113
  layoutRect: layout.layoutRect,
2122
- layoutItemScrimStyles,
2123
- layoutIsReady
2114
+ layoutItemScrimStyles
2124
2115
  };
2125
2116
  }
2126
2117
  const generateLayers = (layout, positions, layoutSizes, activeItems) => {
@@ -2166,7 +2157,29 @@
2166
2157
  resizeRef,
2167
2158
  contentRect: layoutRect
2168
2159
  } = useResizeObserver();
2169
- const layers = eagerComputed(() => {
2160
+ const computedOverlaps = vue.computed(() => {
2161
+ const map = new Map();
2162
+ const overlaps = props.overlaps ?? [];
2163
+ for (const overlap of overlaps.filter(item => item.includes(':'))) {
2164
+ const [top, bottom] = overlap.split(':');
2165
+ if (!registered.value.includes(top) || !registered.value.includes(bottom)) continue;
2166
+ const topPosition = positions.get(top);
2167
+ const bottomPosition = positions.get(bottom);
2168
+ const topAmount = layoutSizes.get(top);
2169
+ const bottomAmount = layoutSizes.get(bottom);
2170
+ if (!topPosition || !bottomPosition || !topAmount || !bottomAmount) continue;
2171
+ map.set(bottom, {
2172
+ position: topPosition.value,
2173
+ amount: parseInt(topAmount.value, 10)
2174
+ });
2175
+ map.set(top, {
2176
+ position: bottomPosition.value,
2177
+ amount: -parseInt(bottomAmount.value, 10)
2178
+ });
2179
+ }
2180
+ return map;
2181
+ });
2182
+ const layers = vue.computed(() => {
2170
2183
  const uniquePriorities = [...new Set([...priorities.values()].map(p => p.value))].sort((a, b) => a - b);
2171
2184
  const layout = [];
2172
2185
  for (const p of uniquePriorities) {
@@ -2192,7 +2205,7 @@
2192
2205
  })
2193
2206
  };
2194
2207
  });
2195
- const items = eagerComputed(() => {
2208
+ const items = vue.computed(() => {
2196
2209
  return layers.value.slice(1).map((_ref, index) => {
2197
2210
  let {
2198
2211
  id
@@ -2214,7 +2227,10 @@
2214
2227
  return items.value.find(item => item.id === id);
2215
2228
  };
2216
2229
  const rootVm = getCurrentInstance('createLayout');
2217
- const layoutIsReady = vue.nextTick();
2230
+ const isMounted = vue.shallowRef(false);
2231
+ vue.onMounted(() => {
2232
+ isMounted.value = true;
2233
+ });
2218
2234
  vue.provide(VuetifyLayoutKey, {
2219
2235
  register: (vm, _ref2) => {
2220
2236
  let {
@@ -2252,9 +2268,13 @@
2252
2268
  transition: 'none'
2253
2269
  })
2254
2270
  };
2255
- if (index.value < 0) throw new Error(`Layout item "${id}" is missing`);
2271
+ if (!isMounted.value) return styles;
2256
2272
  const item = items.value[index.value];
2257
2273
  if (!item) throw new Error(`[Vuetify] Could not find layout item "${id}"`);
2274
+ const overlap = computedOverlaps.value.get(id);
2275
+ if (overlap) {
2276
+ item[overlap.position] += overlap.amount;
2277
+ }
2258
2278
  return {
2259
2279
  ...styles,
2260
2280
  height: isHorizontal ? `calc(100% - ${item.top}px - ${item.bottom}px)` : elementSize.value ? `${elementSize.value}px` : undefined,
@@ -2287,8 +2307,7 @@
2287
2307
  getLayoutItem,
2288
2308
  items,
2289
2309
  layoutRect,
2290
- rootZIndex,
2291
- layoutIsReady
2310
+ rootZIndex
2292
2311
  });
2293
2312
  const layoutClasses = vue.computed(() => ['v-layout', {
2294
2313
  'v-layout--full-height': props.fullHeight
@@ -2304,7 +2323,6 @@
2304
2323
  getLayoutItem,
2305
2324
  items,
2306
2325
  layoutRect,
2307
- layoutIsReady,
2308
2326
  layoutRef: resizeRef
2309
2327
  };
2310
2328
  }
@@ -3001,9 +3019,7 @@
3001
3019
  "style": [props.style]
3002
3020
  }, [vue.createVNode("div", {
3003
3021
  "class": "v-application__wrap"
3004
- }, [vue.createVNode(vue.Suspense, null, {
3005
- default: () => [vue.createVNode(vue.Fragment, null, [slots.default?.()])]
3006
- })])]));
3022
+ }, [slots.default?.()])]));
3007
3023
  return {
3008
3024
  getLayoutItem,
3009
3025
  items,
@@ -3692,6 +3708,7 @@
3692
3708
  // not intended for public use, this is passed in by vuetify-loader
3693
3709
 
3694
3710
  const makeVImgProps = propsFactory({
3711
+ absolute: Boolean,
3695
3712
  alt: String,
3696
3713
  cover: Boolean,
3697
3714
  color: String,
@@ -3948,6 +3965,7 @@
3948
3965
  const responsiveProps = VResponsive.filterProps(props);
3949
3966
  return vue.withDirectives(vue.createVNode(VResponsive, vue.mergeProps({
3950
3967
  "class": ['v-img', {
3968
+ 'v-img--absolute': props.absolute,
3951
3969
  'v-img--booting': !isBooted.value
3952
3970
  }, backgroundColorClasses.value, roundedClasses.value, props.class],
3953
3971
  "style": [{
@@ -4360,8 +4378,9 @@
4360
4378
  const isFlat = vue.computed(() => props.flat || scrollBehavior.value.fullyHide && !isActive.value || scrollBehavior.value.elevate && (scrollBehavior.value.inverted ? currentScroll.value > 0 : currentScroll.value === 0));
4361
4379
  const opacity = vue.computed(() => scrollBehavior.value.fadeImage ? scrollBehavior.value.inverted ? 1 - scrollRatio.value : scrollRatio.value : undefined);
4362
4380
  const height = vue.computed(() => {
4363
- const height = Number(vToolbarRef.value?.contentHeight ?? props.height);
4364
- const extensionHeight = Number(vToolbarRef.value?.extensionHeight ?? 0);
4381
+ if (scrollBehavior.value.hide && scrollBehavior.value.inverted) return 0;
4382
+ const height = vToolbarRef.value?.contentHeight ?? 0;
4383
+ const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0;
4365
4384
  if (!canHide.value) return height + extensionHeight;
4366
4385
  return currentScroll.value < scrollThreshold.value || scrollBehavior.value.fullyHide ? height + extensionHeight : height;
4367
4386
  });
@@ -4382,8 +4401,7 @@
4382
4401
  ssrBootStyles
4383
4402
  } = useSsrBoot();
4384
4403
  const {
4385
- layoutItemStyles,
4386
- layoutIsReady
4404
+ layoutItemStyles
4387
4405
  } = useLayoutItem({
4388
4406
  id: props.name,
4389
4407
  order: vue.computed(() => parseInt(props.order, 10)),
@@ -4411,7 +4429,7 @@
4411
4429
  "flat": isFlat.value
4412
4430
  }), slots);
4413
4431
  });
4414
- return layoutIsReady;
4432
+ return {};
4415
4433
  }
4416
4434
  });
4417
4435
 
@@ -5748,6 +5766,7 @@
5748
5766
  type: Boolean,
5749
5767
  default: undefined
5750
5768
  },
5769
+ activeColor: String,
5751
5770
  baseColor: String,
5752
5771
  symbol: {
5753
5772
  type: null,
@@ -5839,10 +5858,11 @@
5839
5858
  }
5840
5859
  return group?.isSelected.value;
5841
5860
  });
5861
+ const color = vue.computed(() => isActive.value ? props.activeColor ?? props.color : props.color);
5842
5862
  const variantProps = vue.computed(() => {
5843
5863
  const showColor = group?.isSelected.value && (!link.isLink.value || link.isActive?.value) || !group || link.isActive?.value;
5844
5864
  return {
5845
- color: showColor ? props.color ?? props.baseColor : props.baseColor,
5865
+ color: showColor ? color.value ?? props.baseColor : props.baseColor,
5846
5866
  variant: props.variant
5847
5867
  };
5848
5868
  });
@@ -6183,6 +6203,7 @@
6183
6203
  icon: IconValue,
6184
6204
  image: String,
6185
6205
  text: String,
6206
+ ...makeBorderProps(),
6186
6207
  ...makeComponentProps(),
6187
6208
  ...makeDensityProps(),
6188
6209
  ...makeRoundedProps(),
@@ -6203,6 +6224,9 @@
6203
6224
  const {
6204
6225
  themeClasses
6205
6226
  } = provideTheme(props);
6227
+ const {
6228
+ borderClasses
6229
+ } = useBorder(props);
6206
6230
  const {
6207
6231
  colorClasses,
6208
6232
  colorStyles,
@@ -6222,7 +6246,7 @@
6222
6246
  "class": ['v-avatar', {
6223
6247
  'v-avatar--start': props.start,
6224
6248
  'v-avatar--end': props.end
6225
- }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6249
+ }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6226
6250
  "style": [colorStyles.value, sizeStyles.value, props.style]
6227
6251
  }, {
6228
6252
  default: () => [!slots.default ? props.image ? vue.createVNode(VImg, {
@@ -6922,12 +6946,14 @@
6922
6946
  const validateOn = vue.computed(() => {
6923
6947
  let value = (props.validateOn ?? form?.validateOn.value) || 'input';
6924
6948
  if (value === 'lazy') value = 'input lazy';
6949
+ if (value === 'eager') value = 'input eager';
6925
6950
  const set = new Set(value?.split(' ') ?? []);
6926
6951
  return {
6927
- blur: set.has('blur') || set.has('input'),
6928
6952
  input: set.has('input'),
6929
- submit: set.has('submit'),
6930
- lazy: set.has('lazy')
6953
+ blur: set.has('blur') || set.has('input') || set.has('invalid-input'),
6954
+ invalidInput: set.has('invalid-input'),
6955
+ lazy: set.has('lazy'),
6956
+ eager: set.has('eager')
6931
6957
  };
6932
6958
  });
6933
6959
  const isValid = vue.computed(() => {
@@ -6964,11 +6990,11 @@
6964
6990
  });
6965
6991
  vue.onMounted(async () => {
6966
6992
  if (!validateOn.value.lazy) {
6967
- await validate(true);
6993
+ await validate(!validateOn.value.eager);
6968
6994
  }
6969
6995
  form?.update(uid.value, isValid.value, errorMessages.value);
6970
6996
  });
6971
- useToggleScope(() => validateOn.value.input, () => {
6997
+ useToggleScope(() => validateOn.value.input || validateOn.value.invalidInput && isValid.value === false, () => {
6972
6998
  vue.watch(validationModel, () => {
6973
6999
  if (validationModel.value != null) {
6974
7000
  validate();
@@ -6996,7 +7022,7 @@
6996
7022
  async function resetValidation() {
6997
7023
  isPristine.value = true;
6998
7024
  if (!validateOn.value.lazy) {
6999
- await validate(true);
7025
+ await validate(!validateOn.value.eager);
7000
7026
  } else {
7001
7027
  internalErrorMessages.value = [];
7002
7028
  }
@@ -7936,7 +7962,9 @@
7936
7962
  selected: group.selected,
7937
7963
  scrollTo,
7938
7964
  scrollOffset,
7939
- focus
7965
+ focus,
7966
+ hasPrev,
7967
+ hasNext
7940
7968
  };
7941
7969
  }
7942
7970
  });
@@ -8406,6 +8434,7 @@
8406
8434
  return strategy;
8407
8435
  };
8408
8436
 
8437
+ // Utilities
8409
8438
  const singleOpenStrategy = {
8410
8439
  open: _ref => {
8411
8440
  let {
@@ -8439,11 +8468,11 @@
8439
8468
  parents
8440
8469
  } = _ref2;
8441
8470
  if (value) {
8442
- let parent = parents.get(id);
8471
+ let parent = vue.toRaw(parents.get(id));
8443
8472
  opened.add(id);
8444
8473
  while (parent != null && parent !== id) {
8445
8474
  opened.add(parent);
8446
- parent = parents.get(parent);
8475
+ parent = vue.toRaw(parents.get(parent));
8447
8476
  }
8448
8477
  return opened;
8449
8478
  } else {
@@ -8614,18 +8643,18 @@
8614
8643
  const items = [id];
8615
8644
  while (items.length) {
8616
8645
  const item = items.shift();
8617
- selected.set(item, value ? 'on' : 'off');
8646
+ selected.set(vue.toRaw(item), value ? 'on' : 'off');
8618
8647
  if (children.has(item)) {
8619
8648
  items.push(...children.get(item));
8620
8649
  }
8621
8650
  }
8622
- let parent = parents.get(id);
8651
+ let parent = vue.toRaw(parents.get(id));
8623
8652
  while (parent) {
8624
8653
  const childrenIds = children.get(parent);
8625
- const everySelected = childrenIds.every(cid => selected.get(cid) === 'on');
8626
- const noneSelected = childrenIds.every(cid => !selected.has(cid) || selected.get(cid) === 'off');
8654
+ const everySelected = childrenIds.every(cid => selected.get(vue.toRaw(cid)) === 'on');
8655
+ const noneSelected = childrenIds.every(cid => !selected.has(vue.toRaw(cid)) || selected.get(vue.toRaw(cid)) === 'off');
8627
8656
  selected.set(parent, everySelected ? 'on' : noneSelected ? 'off' : 'indeterminate');
8628
- parent = parents.get(parent);
8657
+ parent = vue.toRaw(parents.get(parent));
8629
8658
  }
8630
8659
 
8631
8660
  // If mandatory and planned deselect results in no selected
@@ -8703,7 +8732,7 @@
8703
8732
  let isUnmounted = false;
8704
8733
  const children = vue.ref(new Map());
8705
8734
  const parents = vue.ref(new Map());
8706
- const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(v), v => [...v.values()]);
8735
+ const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(vue.toRaw(v)), v => [...v.values()]);
8707
8736
  const activeStrategy = vue.computed(() => {
8708
8737
  if (typeof props.activeStrategy === 'object') return props.activeStrategy;
8709
8738
  if (typeof props.activeStrategy === 'function') return props.activeStrategy(props.mandatory);
@@ -8876,9 +8905,9 @@
8876
8905
  const item = {
8877
8906
  ...parent,
8878
8907
  id: computedId,
8879
- open: (open, e) => parent.root.open(computedId.value, open, e),
8908
+ open: (open, e) => parent.root.open(vue.toRaw(computedId.value), open, e),
8880
8909
  openOnSelect: (open, e) => parent.root.openOnSelect(computedId.value, open, e),
8881
- isOpen: vue.computed(() => parent.root.opened.value.has(computedId.value)),
8910
+ isOpen: vue.computed(() => parent.root.opened.value.has(vue.toRaw(computedId.value))),
8882
8911
  parent: vue.computed(() => parent.root.parents.value.get(computedId.value)),
8883
8912
  activate: (activated, e) => parent.root.activate(computedId.value, activated, e),
8884
8913
  isActivated: vue.computed(() => parent.root.activated.value.has(vue.toRaw(computedId.value))),
@@ -9102,6 +9131,7 @@
9102
9131
  activate,
9103
9132
  isActivated,
9104
9133
  select,
9134
+ isOpen,
9105
9135
  isSelected,
9106
9136
  isIndeterminate,
9107
9137
  isGroupActivator,
@@ -9156,6 +9186,7 @@
9156
9186
  const slotProps = vue.computed(() => ({
9157
9187
  isActive: isActive.value,
9158
9188
  select,
9189
+ isOpen: isOpen.value,
9159
9190
  isSelected: isSelected.value,
9160
9191
  isIndeterminate: isIndeterminate.value
9161
9192
  }));
@@ -9175,7 +9206,7 @@
9175
9206
  function onKeyDown(e) {
9176
9207
  if (e.key === 'Enter' || e.key === ' ') {
9177
9208
  e.preventDefault();
9178
- onClick(e);
9209
+ e.target.dispatchEvent(new MouseEvent('click', e));
9179
9210
  }
9180
9211
  }
9181
9212
  useRender(() => {
@@ -9965,12 +9996,6 @@
9965
9996
  // el.style.removeProperty('max-width')
9966
9997
  // el.style.removeProperty('max-height')
9967
9998
 
9968
- if (isRtl) {
9969
- el.style.removeProperty('left');
9970
- } else {
9971
- el.style.removeProperty('right');
9972
- }
9973
-
9974
9999
  /* eslint-disable-next-line sonarjs/prefer-immediate-return */
9975
10000
  const contentBox = nullifyTransforms(el);
9976
10001
  if (isRtl) {
@@ -10498,7 +10523,8 @@
10498
10523
  function useActivator(props, _ref) {
10499
10524
  let {
10500
10525
  isActive,
10501
- isTop
10526
+ isTop,
10527
+ contentEl
10502
10528
  } = _ref;
10503
10529
  const vm = getCurrentInstance('useActivator');
10504
10530
  const activatorEl = vue.ref();
@@ -10615,7 +10641,7 @@
10615
10641
  return events;
10616
10642
  });
10617
10643
  vue.watch(isTop, val => {
10618
- if (val && (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused) || openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered))) {
10644
+ if (val && (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused) || openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered)) && !contentEl.value?.contains(document.activeElement)) {
10619
10645
  isActive.value = false;
10620
10646
  }
10621
10647
  });
@@ -11025,6 +11051,9 @@
11025
11051
  emit
11026
11052
  } = _ref;
11027
11053
  const vm = getCurrentInstance('VOverlay');
11054
+ const root = vue.ref();
11055
+ const scrimEl = vue.ref();
11056
+ const contentEl = vue.ref();
11028
11057
  const model = useProxiedModel(props, 'modelValue');
11029
11058
  const isActive = vue.computed({
11030
11059
  get: () => model.value,
@@ -11062,7 +11091,8 @@
11062
11091
  scrimEvents
11063
11092
  } = useActivator(props, {
11064
11093
  isActive,
11065
- isTop: localTop
11094
+ isTop: localTop,
11095
+ contentEl
11066
11096
  });
11067
11097
  const {
11068
11098
  teleportTarget
@@ -11083,9 +11113,6 @@
11083
11113
  vue.watch(() => props.disabled, v => {
11084
11114
  if (v) isActive.value = false;
11085
11115
  });
11086
- const root = vue.ref();
11087
- const scrimEl = vue.ref();
11088
- const contentEl = vue.ref();
11089
11116
  const {
11090
11117
  contentStyles,
11091
11118
  updateLocation
@@ -11336,10 +11363,12 @@
11336
11363
  // TODO
11337
11364
  // disableKeys: Boolean,
11338
11365
  id: String,
11366
+ submenu: Boolean,
11339
11367
  ...omit(makeVOverlayProps({
11340
11368
  closeDelay: 250,
11341
11369
  closeOnContentClick: true,
11342
11370
  locationStrategy: 'connected',
11371
+ location: undefined,
11343
11372
  openDelay: 300,
11344
11373
  scrim: false,
11345
11374
  scrollStrategy: 'reposition',
@@ -11362,27 +11391,32 @@
11362
11391
  const {
11363
11392
  scopeId
11364
11393
  } = useScopeId();
11394
+ const {
11395
+ isRtl
11396
+ } = useRtl();
11365
11397
  const uid = getUid();
11366
11398
  const id = vue.computed(() => props.id || `v-menu-${uid}`);
11367
11399
  const overlay = vue.ref();
11368
11400
  const parent = vue.inject(VMenuSymbol, null);
11369
- const openChildren = vue.shallowRef(0);
11401
+ const openChildren = vue.shallowRef(new Set());
11370
11402
  vue.provide(VMenuSymbol, {
11371
11403
  register() {
11372
- ++openChildren.value;
11404
+ openChildren.value.add(uid);
11373
11405
  },
11374
11406
  unregister() {
11375
- --openChildren.value;
11407
+ openChildren.value.delete(uid);
11376
11408
  },
11377
11409
  closeParents(e) {
11378
11410
  setTimeout(() => {
11379
- if (!openChildren.value && !props.persistent && (e == null || overlay.value?.contentEl && !isClickInsideElement(e, overlay.value.contentEl))) {
11411
+ if (!openChildren.value.size && !props.persistent && (e == null || overlay.value?.contentEl && !isClickInsideElement(e, overlay.value.contentEl))) {
11380
11412
  isActive.value = false;
11381
11413
  parent?.closeParents();
11382
11414
  }
11383
11415
  }, 40);
11384
11416
  }
11385
11417
  });
11418
+ vue.onBeforeUnmount(() => parent?.unregister());
11419
+ vue.onDeactivated(() => isActive.value = false);
11386
11420
  async function onFocusIn(e) {
11387
11421
  const before = e.relatedTarget;
11388
11422
  const after = e.target;
@@ -11422,9 +11456,9 @@
11422
11456
  isActive.value = false;
11423
11457
  overlay.value?.activatorEl?.focus();
11424
11458
  }
11425
- } else if (['Enter', ' '].includes(e.key) && props.closeOnContentClick) {
11459
+ } else if (props.submenu && e.key === (isRtl.value ? 'ArrowRight' : 'ArrowLeft')) {
11426
11460
  isActive.value = false;
11427
- parent?.closeParents();
11461
+ overlay.value?.activatorEl?.focus();
11428
11462
  }
11429
11463
  }
11430
11464
  function onActivatorKeydown(e) {
@@ -11433,12 +11467,21 @@
11433
11467
  if (el && isActive.value) {
11434
11468
  if (e.key === 'ArrowDown') {
11435
11469
  e.preventDefault();
11470
+ e.stopImmediatePropagation();
11436
11471
  focusChild(el, 'next');
11437
11472
  } else if (e.key === 'ArrowUp') {
11438
11473
  e.preventDefault();
11474
+ e.stopImmediatePropagation();
11439
11475
  focusChild(el, 'prev');
11476
+ } else if (props.submenu) {
11477
+ if (e.key === (isRtl.value ? 'ArrowRight' : 'ArrowLeft')) {
11478
+ isActive.value = false;
11479
+ } else if (e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight')) {
11480
+ e.preventDefault();
11481
+ focusChild(el, 'first');
11482
+ }
11440
11483
  }
11441
- } else if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
11484
+ } else if (props.submenu ? e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight') : ['ArrowDown', 'ArrowUp'].includes(e.key)) {
11442
11485
  isActive.value = true;
11443
11486
  e.preventDefault();
11444
11487
  setTimeout(() => setTimeout(() => onActivatorKeydown(e)));
@@ -11462,6 +11505,7 @@
11462
11505
  "onUpdate:modelValue": $event => isActive.value = $event,
11463
11506
  "absolute": true,
11464
11507
  "activatorProps": activatorProps.value,
11508
+ "location": props.location ?? (props.submenu ? 'end' : 'bottom'),
11465
11509
  "onClick:outside": onClickOutside,
11466
11510
  "onKeydown": onKeydown
11467
11511
  }, scopeId), {
@@ -12294,6 +12338,7 @@
12294
12338
  deep: true
12295
12339
  });
12296
12340
  return {
12341
+ calculateVisibleItems,
12297
12342
  containerRef,
12298
12343
  markerRef,
12299
12344
  computedItems,
@@ -12357,6 +12402,7 @@
12357
12402
  dimensionStyles
12358
12403
  } = useDimension(props);
12359
12404
  const {
12405
+ calculateVisibleItems,
12360
12406
  containerRef,
12361
12407
  markerRef,
12362
12408
  handleScroll,
@@ -12428,6 +12474,7 @@
12428
12474
  }, [children])]);
12429
12475
  });
12430
12476
  return {
12477
+ calculateVisibleItems,
12431
12478
  scrollToIndex
12432
12479
  };
12433
12480
  }
@@ -12496,9 +12543,9 @@
12496
12543
  }
12497
12544
  }
12498
12545
  return {
12499
- onListScroll,
12500
- onListKeydown
12501
- };
12546
+ onScrollPassive: onListScroll,
12547
+ onKeydown: onListKeydown
12548
+ }; // typescript doesn't know about vue's event merging
12502
12549
  }
12503
12550
 
12504
12551
  // Types
@@ -12573,7 +12620,7 @@
12573
12620
  const menu = vue.computed({
12574
12621
  get: () => _menu.value,
12575
12622
  set: v => {
12576
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
12623
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
12577
12624
  _menu.value = v;
12578
12625
  }
12579
12626
  });
@@ -12612,10 +12659,7 @@
12612
12659
  };
12613
12660
  });
12614
12661
  const listRef = vue.ref();
12615
- const {
12616
- onListScroll,
12617
- onListKeydown
12618
- } = useScrolling(listRef, vTextFieldRef);
12662
+ const listEvents = useScrolling(listRef, vTextFieldRef);
12619
12663
  function onClear(e) {
12620
12664
  if (props.openOnClear) {
12621
12665
  menu.value = true;
@@ -12625,6 +12669,11 @@
12625
12669
  if (menuDisabled.value) return;
12626
12670
  menu.value = !menu.value;
12627
12671
  }
12672
+ function onListKeydown(e) {
12673
+ if (checkPrintable(e)) {
12674
+ onKeydown(e);
12675
+ }
12676
+ }
12628
12677
  function onKeydown(e) {
12629
12678
  if (!e.key || props.readonly || form?.isReadonly.value) return;
12630
12679
  if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
@@ -12645,11 +12694,6 @@
12645
12694
  // html select hotkeys
12646
12695
  const KEYBOARD_LOOKUP_THRESHOLD = 1000; // milliseconds
12647
12696
 
12648
- function checkPrintable(e) {
12649
- const isPrintableChar = e.key.length === 1;
12650
- const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
12651
- return isPrintableChar && noModifier;
12652
- }
12653
12697
  if (props.multiple || !checkPrintable(e)) return;
12654
12698
  const now = performance.now();
12655
12699
  if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {
@@ -12694,6 +12738,11 @@
12694
12738
  menu.value = false;
12695
12739
  }
12696
12740
  }
12741
+ function onAfterEnter() {
12742
+ if (props.eager) {
12743
+ vVirtualScrollRef.value?.calculateVisibleItems();
12744
+ }
12745
+ }
12697
12746
  function onAfterLeave() {
12698
12747
  if (isFocused.value) {
12699
12748
  vTextFieldRef.value?.focus();
@@ -12772,6 +12821,7 @@
12772
12821
  "openOnClick": false,
12773
12822
  "closeOnContentClick": false,
12774
12823
  "transition": props.transition,
12824
+ "onAfterEnter": onAfterEnter,
12775
12825
  "onAfterLeave": onAfterLeave
12776
12826
  }, computedMenuProps.value), {
12777
12827
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -12781,11 +12831,10 @@
12781
12831
  "onMousedown": e => e.preventDefault(),
12782
12832
  "onKeydown": onListKeydown,
12783
12833
  "onFocusin": onFocusin,
12784
- "onScrollPassive": onListScroll,
12785
12834
  "tabindex": "-1",
12786
12835
  "aria-live": "polite",
12787
12836
  "color": props.itemColor ?? props.color
12788
- }, props.listProps), {
12837
+ }, listEvents, props.listProps), {
12789
12838
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
12790
12839
  "title": t(props.noDataText)
12791
12840
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -13080,7 +13129,7 @@
13080
13129
  const menu = vue.computed({
13081
13130
  get: () => _menu.value,
13082
13131
  set: v => {
13083
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
13132
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
13084
13133
  _menu.value = v;
13085
13134
  }
13086
13135
  });
@@ -13124,10 +13173,7 @@
13124
13173
  });
13125
13174
  const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
13126
13175
  const listRef = vue.ref();
13127
- const {
13128
- onListScroll,
13129
- onListKeydown
13130
- } = useScrolling(listRef, vTextFieldRef);
13176
+ const listEvents = useScrolling(listRef, vTextFieldRef);
13131
13177
  function onClear(e) {
13132
13178
  if (props.openOnClear) {
13133
13179
  menu.value = true;
@@ -13146,6 +13192,11 @@
13146
13192
  }
13147
13193
  menu.value = !menu.value;
13148
13194
  }
13195
+ function onListKeydown(e) {
13196
+ if (checkPrintable(e)) {
13197
+ vTextFieldRef.value?.focus();
13198
+ }
13199
+ }
13149
13200
  function onKeydown(e) {
13150
13201
  if (props.readonly || form?.isReadonly.value) return;
13151
13202
  const selectionStart = vTextFieldRef.value.selectionStart;
@@ -13210,6 +13261,11 @@
13210
13261
  }
13211
13262
  }
13212
13263
  }
13264
+ function onAfterEnter() {
13265
+ if (props.eager) {
13266
+ vVirtualScrollRef.value?.calculateVisibleItems();
13267
+ }
13268
+ }
13213
13269
  function onAfterLeave() {
13214
13270
  if (isFocused.value) {
13215
13271
  isPristine.value = true;
@@ -13338,6 +13394,7 @@
13338
13394
  "openOnClick": false,
13339
13395
  "closeOnContentClick": false,
13340
13396
  "transition": props.transition,
13397
+ "onAfterEnter": onAfterEnter,
13341
13398
  "onAfterLeave": onAfterLeave
13342
13399
  }, props.menuProps), {
13343
13400
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -13348,11 +13405,10 @@
13348
13405
  "onKeydown": onListKeydown,
13349
13406
  "onFocusin": onFocusin,
13350
13407
  "onFocusout": onFocusout,
13351
- "onScrollPassive": onListScroll,
13352
13408
  "tabindex": "-1",
13353
13409
  "aria-live": "polite",
13354
13410
  "color": props.itemColor ?? props.color
13355
- }, props.listProps), {
13411
+ }, listEvents, props.listProps), {
13356
13412
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
13357
13413
  "title": t(props.noDataText)
13358
13414
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -13802,8 +13858,7 @@
13802
13858
  const height = vue.computed(() => Number(props.height) - (props.density === 'comfortable' ? 8 : 0) - (props.density === 'compact' ? 16 : 0));
13803
13859
  const isActive = useProxiedModel(props, 'active', props.active);
13804
13860
  const {
13805
- layoutItemStyles,
13806
- layoutIsReady
13861
+ layoutItemStyles
13807
13862
  } = useLayoutItem({
13808
13863
  id: props.name,
13809
13864
  order: vue.computed(() => parseInt(props.order, 10)),
@@ -13841,7 +13896,7 @@
13841
13896
  }, [slots.default()])]
13842
13897
  });
13843
13898
  });
13844
- return layoutIsReady;
13899
+ return {};
13845
13900
  }
13846
13901
  });
13847
13902
 
@@ -16913,7 +16968,7 @@
16913
16968
  const menu = vue.computed({
16914
16969
  get: () => _menu.value,
16915
16970
  set: v => {
16916
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
16971
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
16917
16972
  _menu.value = v;
16918
16973
  }
16919
16974
  });
@@ -16996,10 +17051,7 @@
16996
17051
  });
16997
17052
  const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
16998
17053
  const listRef = vue.ref();
16999
- const {
17000
- onListScroll,
17001
- onListKeydown
17002
- } = useScrolling(listRef, vTextFieldRef);
17054
+ const listEvents = useScrolling(listRef, vTextFieldRef);
17003
17055
  function onClear(e) {
17004
17056
  cleared = true;
17005
17057
  if (props.openOnClear) {
@@ -17018,6 +17070,11 @@
17018
17070
  }
17019
17071
  menu.value = !menu.value;
17020
17072
  }
17073
+ function onListKeydown(e) {
17074
+ if (checkPrintable(e)) {
17075
+ vTextFieldRef.value?.focus();
17076
+ }
17077
+ }
17021
17078
  // eslint-disable-next-line complexity
17022
17079
  function onKeydown(e) {
17023
17080
  if (isComposingIgnoreKey(e) || props.readonly || form?.isReadonly.value) return;
@@ -17082,6 +17139,11 @@
17082
17139
  }
17083
17140
  }
17084
17141
  }
17142
+ function onAfterEnter() {
17143
+ if (props.eager) {
17144
+ vVirtualScrollRef.value?.calculateVisibleItems();
17145
+ }
17146
+ }
17085
17147
  function onAfterLeave() {
17086
17148
  if (isFocused.value) {
17087
17149
  isPristine.value = true;
@@ -17206,6 +17268,7 @@
17206
17268
  "openOnClick": false,
17207
17269
  "closeOnContentClick": false,
17208
17270
  "transition": props.transition,
17271
+ "onAfterEnter": onAfterEnter,
17209
17272
  "onAfterLeave": onAfterLeave
17210
17273
  }, props.menuProps), {
17211
17274
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -17216,11 +17279,10 @@
17216
17279
  "onKeydown": onListKeydown,
17217
17280
  "onFocusin": onFocusin,
17218
17281
  "onFocusout": onFocusout,
17219
- "onScrollPassive": onListScroll,
17220
17282
  "tabindex": "-1",
17221
17283
  "aria-live": "polite",
17222
17284
  "color": props.itemColor ?? props.color
17223
- }, props.listProps), {
17285
+ }, listEvents, props.listProps), {
17224
17286
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
17225
17287
  "title": t(props.noDataText)
17226
17288
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -21164,6 +21226,7 @@
21164
21226
  default: false
21165
21227
  },
21166
21228
  ...makeComponentProps(),
21229
+ ...makeDimensionProps(),
21167
21230
  ...makeTagProps()
21168
21231
  }, 'VContainer');
21169
21232
  const VContainer = genericComponent()({
@@ -21176,11 +21239,14 @@
21176
21239
  const {
21177
21240
  rtlClasses
21178
21241
  } = useRtl();
21242
+ const {
21243
+ dimensionStyles
21244
+ } = useDimension(props);
21179
21245
  useRender(() => vue.createVNode(props.tag, {
21180
21246
  "class": ['v-container', {
21181
21247
  'v-container--fluid': props.fluid
21182
21248
  }, rtlClasses.value, props.class],
21183
- "style": props.style
21249
+ "style": [dimensionStyles.value, props.style]
21184
21250
  }, slots));
21185
21251
  return {};
21186
21252
  }
@@ -22602,7 +22668,8 @@
22602
22668
  default: false
22603
22669
  },
22604
22670
  readonly: Boolean,
22605
- ...makeComponentProps()
22671
+ ...makeComponentProps(),
22672
+ ...makeDimensionProps()
22606
22673
  }, 'VExpansionPanelTitle');
22607
22674
  const VExpansionPanelTitle = genericComponent()({
22608
22675
  name: 'VExpansionPanelTitle',
@@ -22620,6 +22687,9 @@
22620
22687
  backgroundColorClasses,
22621
22688
  backgroundColorStyles
22622
22689
  } = useBackgroundColor(props, 'color');
22690
+ const {
22691
+ dimensionStyles
22692
+ } = useDimension(props);
22623
22693
  const slotProps = vue.computed(() => ({
22624
22694
  collapseIcon: props.collapseIcon,
22625
22695
  disabled: expansionPanel.disabled.value,
@@ -22634,7 +22704,7 @@
22634
22704
  'v-expansion-panel-title--focusable': props.focusable,
22635
22705
  'v-expansion-panel-title--static': props.static
22636
22706
  }, backgroundColorClasses.value, props.class],
22637
- "style": [backgroundColorStyles.value, props.style],
22707
+ "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
22638
22708
  "type": "button",
22639
22709
  "tabindex": expansionPanel.disabled.value ? -1 : undefined,
22640
22710
  "disabled": expansionPanel.disabled.value,
@@ -23157,7 +23227,6 @@
23157
23227
  slots
23158
23228
  } = _ref;
23159
23229
  const layoutItemStyles = vue.ref();
23160
- const layoutIsReady = vue.shallowRef();
23161
23230
  const {
23162
23231
  themeClasses
23163
23232
  } = provideTheme(props);
@@ -23194,7 +23263,6 @@
23194
23263
  });
23195
23264
  vue.watchEffect(() => {
23196
23265
  layoutItemStyles.value = layout.layoutItemStyles.value;
23197
- layoutIsReady.value = layout.layoutIsReady;
23198
23266
  });
23199
23267
  });
23200
23268
  useRender(() => vue.createVNode(props.tag, {
@@ -23204,7 +23272,7 @@
23204
23272
  height: convertToUnit(props.height)
23205
23273
  }, props.style]
23206
23274
  }, slots));
23207
- return props.app ? layoutIsReady.value : {};
23275
+ return {};
23208
23276
  }
23209
23277
  });
23210
23278
 
@@ -23631,9 +23699,7 @@
23631
23699
  "ref": layoutRef,
23632
23700
  "class": [layoutClasses.value, props.class],
23633
23701
  "style": [dimensionStyles.value, layoutStyles.value, props.style]
23634
- }, [vue.createVNode(vue.Suspense, null, {
23635
- default: () => [vue.createVNode(vue.Fragment, null, [slots.default?.()])]
23636
- })]));
23702
+ }, [slots.default?.()]));
23637
23703
  return {
23638
23704
  getLayoutItem,
23639
23705
  items
@@ -23664,8 +23730,7 @@
23664
23730
  slots
23665
23731
  } = _ref;
23666
23732
  const {
23667
- layoutItemStyles,
23668
- layoutIsReady
23733
+ layoutItemStyles
23669
23734
  } = useLayoutItem({
23670
23735
  id: props.name,
23671
23736
  order: vue.computed(() => parseInt(props.order, 10)),
@@ -23675,11 +23740,10 @@
23675
23740
  active: vue.toRef(props, 'modelValue'),
23676
23741
  absolute: vue.toRef(props, 'absolute')
23677
23742
  });
23678
- useRender(() => vue.createVNode("div", {
23743
+ return () => vue.createVNode("div", {
23679
23744
  "class": ['v-layout-item', props.class],
23680
23745
  "style": [layoutItemStyles.value, props.style]
23681
- }, [slots.default?.()]));
23682
- return layoutIsReady;
23746
+ }, [slots.default?.()]);
23683
23747
  }
23684
23748
  });
23685
23749
 
@@ -23790,8 +23854,7 @@
23790
23854
  dimensionStyles
23791
23855
  } = useDimension(props);
23792
23856
  const {
23793
- mainStyles,
23794
- layoutIsReady
23857
+ mainStyles
23795
23858
  } = useLayout();
23796
23859
  const {
23797
23860
  ssrBootStyles
@@ -23806,7 +23869,7 @@
23806
23869
  "class": "v-main__scroller"
23807
23870
  }, [slots.default?.()]) : slots.default?.()]
23808
23871
  }));
23809
- return layoutIsReady;
23872
+ return {};
23810
23873
  }
23811
23874
  });
23812
23875
 
@@ -24276,8 +24339,7 @@
24276
24339
  const elementSize = vue.computed(() => ['top', 'bottom'].includes(props.location) ? 0 : width.value);
24277
24340
  const {
24278
24341
  layoutItemStyles,
24279
- layoutItemScrimStyles,
24280
- layoutIsReady
24342
+ layoutItemScrimStyles
24281
24343
  } = useLayoutItem({
24282
24344
  id: props.name,
24283
24345
  order: vue.computed(() => parseInt(props.order, 10)),
@@ -24373,9 +24435,9 @@
24373
24435
  }, scopeId), null)]
24374
24436
  })]);
24375
24437
  });
24376
- return layoutIsReady.then(() => ({
24438
+ return {
24377
24439
  isStuck
24378
- }));
24440
+ };
24379
24441
  }
24380
24442
  });
24381
24443
 
@@ -26064,7 +26126,7 @@
26064
26126
  const model = useProxiedModel(props, 'modelValue');
26065
26127
  const menuRef = vue.ref();
26066
26128
  const location = vue.computed(() => {
26067
- const [y, x = 'center'] = props.location.split(' ');
26129
+ const [y, x = 'center'] = props.location?.split(' ') ?? [];
26068
26130
  return `${y} ${x}`;
26069
26131
  });
26070
26132
  const locationClasses = vue.computed(() => ({
@@ -28150,7 +28212,7 @@
28150
28212
  goTo
28151
28213
  };
28152
28214
  }
28153
- const version$1 = "3.6.15";
28215
+ const version$1 = "3.7.0";
28154
28216
  createVuetify$1.version = version$1;
28155
28217
 
28156
28218
  // Vue's inject() can only be used in setup
@@ -28175,7 +28237,7 @@
28175
28237
  ...options
28176
28238
  });
28177
28239
  };
28178
- const version = "3.6.15";
28240
+ const version = "3.7.0";
28179
28241
  createVuetify.version = version;
28180
28242
 
28181
28243
  exports.blueprints = index;