@vuetify/nightly 3.0.0-beta.6 → 3.0.0-beta.9

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 (174) hide show
  1. package/CHANGELOG.md +14 -39
  2. package/dist/json/attributes.json +98 -14
  3. package/dist/json/importMap.json +64 -64
  4. package/dist/json/tags.json +23 -2
  5. package/dist/json/web-types.json +253 -40
  6. package/dist/vuetify.css +1469 -1640
  7. package/dist/vuetify.d.ts +1701 -7588
  8. package/dist/vuetify.esm.js +694 -443
  9. package/dist/vuetify.esm.js.map +1 -1
  10. package/dist/vuetify.js +693 -441
  11. package/dist/vuetify.js.map +1 -1
  12. package/dist/vuetify.min.css +3 -3
  13. package/dist/vuetify.min.js +766 -742
  14. package/dist/vuetify.min.js.map +1 -1
  15. package/lib/components/VAlert/VAlert.css +0 -3
  16. package/lib/components/VAlert/VAlert.mjs +20 -10
  17. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  18. package/lib/components/VAlert/VAlert.sass +0 -3
  19. package/lib/components/VAutocomplete/VAutocomplete.css +10 -0
  20. package/lib/components/VAutocomplete/VAutocomplete.mjs +2 -3
  21. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  22. package/lib/components/VAutocomplete/VAutocomplete.sass +10 -0
  23. package/lib/components/VAutocomplete/_variables.scss +1 -0
  24. package/lib/components/VAvatar/VAvatar.css +2 -0
  25. package/lib/components/VAvatar/VAvatar.sass +3 -0
  26. package/lib/components/VBtn/VBtn.css +29 -5
  27. package/lib/components/VBtn/VBtn.sass +40 -10
  28. package/lib/components/VBtn/_variables.scss +4 -0
  29. package/lib/components/VBtnGroup/VBtnGroup.css +1 -0
  30. package/lib/components/VCard/VCard.mjs +12 -7
  31. package/lib/components/VCard/VCard.mjs.map +1 -1
  32. package/lib/components/VCombobox/VCombobox.css +10 -0
  33. package/lib/components/VCombobox/VCombobox.mjs +2 -2
  34. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  35. package/lib/components/VCombobox/VCombobox.sass +10 -0
  36. package/lib/components/VCombobox/_variables.scss +1 -0
  37. package/lib/components/VDialog/VDialog.mjs +3 -3
  38. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  39. package/lib/components/VField/VField.css +44 -25
  40. package/lib/components/VField/VField.mjs +1 -1
  41. package/lib/components/VField/VField.mjs.map +1 -1
  42. package/lib/components/VField/VField.sass +33 -19
  43. package/lib/components/VField/_variables.scss +3 -2
  44. package/lib/components/VFileInput/VFileInput.mjs +2 -2
  45. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  46. package/lib/components/VForm/VForm.mjs +2 -2
  47. package/lib/components/VForm/VForm.mjs.map +1 -1
  48. package/lib/components/VGrid/VCol.mjs +2 -1
  49. package/lib/components/VGrid/VCol.mjs.map +1 -1
  50. package/lib/components/VGrid/VRow.mjs +8 -3
  51. package/lib/components/VGrid/VRow.mjs.map +1 -1
  52. package/lib/components/VIcon/VIcon.css +0 -10
  53. package/lib/components/VIcon/VIcon.sass +0 -10
  54. package/lib/components/VIcon/_variables.scss +0 -1
  55. package/lib/components/VImg/VImg.mjs +1 -0
  56. package/lib/components/VImg/VImg.mjs.map +1 -1
  57. package/lib/components/VInput/VInput.css +2 -1
  58. package/lib/components/VInput/VInput.sass +2 -1
  59. package/lib/components/VInput/_variables.scss +0 -1
  60. package/lib/components/VLayout/VLayout.css +0 -2
  61. package/lib/components/VLayout/VLayout.sass +0 -2
  62. package/lib/components/VList/VList.css +4 -1
  63. package/lib/components/VList/VList.sass +5 -1
  64. package/lib/components/VList/VListChildren.mjs +19 -2
  65. package/lib/components/VList/VListChildren.mjs.map +1 -1
  66. package/lib/components/VList/VListItem.mjs +18 -11
  67. package/lib/components/VList/VListItem.mjs.map +1 -1
  68. package/lib/components/VList/_variables.scss +1 -0
  69. package/lib/components/VMain/VMain.css +21 -3
  70. package/lib/components/VMain/VMain.mjs +13 -8
  71. package/lib/components/VMain/VMain.mjs.map +1 -1
  72. package/lib/components/VMain/VMain.sass +18 -3
  73. package/lib/components/VMenu/VMenu.mjs +2 -2
  74. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  75. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +12 -17
  76. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +52 -19
  77. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  78. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +15 -20
  79. package/lib/components/VNavigationDrawer/_variables.scss +1 -1
  80. package/lib/components/VNavigationDrawer/sticky.mjs +72 -0
  81. package/lib/components/VNavigationDrawer/sticky.mjs.map +1 -0
  82. package/lib/components/VOverlay/VOverlay.mjs +8 -6
  83. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  84. package/lib/components/VOverlay/_variables.scss +1 -1
  85. package/lib/components/VOverlay/useActivator.mjs +1 -1
  86. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  87. package/lib/components/VPagination/VPagination.mjs +1 -1
  88. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  89. package/lib/components/VRadio/VRadio.mjs +8 -17
  90. package/lib/components/VRadio/VRadio.mjs.map +1 -1
  91. package/lib/components/VRadioGroup/VRadioGroup.mjs +20 -3
  92. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  93. package/lib/components/VSelect/VSelect.css +10 -0
  94. package/lib/components/VSelect/VSelect.mjs +3 -4
  95. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  96. package/lib/components/VSelect/VSelect.sass +10 -0
  97. package/lib/components/VSelect/_variables.scss +1 -0
  98. package/lib/components/VSelectionControl/VSelectionControl.mjs +9 -4
  99. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  100. package/lib/components/VSnackbar/VSnackbar.css +1 -1
  101. package/lib/components/VSnackbar/VSnackbar.mjs +4 -4
  102. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  103. package/lib/components/VSnackbar/_variables.scss +1 -3
  104. package/lib/components/VTable/VTable.mjs.map +1 -1
  105. package/lib/components/VTabs/VTab.css +0 -1
  106. package/lib/components/VTabs/VTab.sass +0 -1
  107. package/lib/components/VTextField/VTextField.css +2 -1
  108. package/lib/components/VTextField/VTextField.mjs +19 -21
  109. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  110. package/lib/components/VTextField/VTextField.sass +2 -1
  111. package/lib/components/VTextarea/VTextarea.css +6 -2
  112. package/lib/components/VTextarea/VTextarea.mjs +18 -11
  113. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  114. package/lib/components/VTextarea/VTextarea.sass +9 -2
  115. package/lib/components/VTextarea/_variables.scss +0 -1
  116. package/lib/components/VTimeline/VTimeline.css +123 -112
  117. package/lib/components/VTimeline/VTimeline.mjs +4 -4
  118. package/lib/components/VTimeline/VTimeline.mjs.map +1 -1
  119. package/lib/components/VTimeline/VTimeline.sass +129 -111
  120. package/lib/components/VTimeline/VTimelineDivider.mjs +5 -2
  121. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  122. package/lib/components/VTimeline/VTimelineItem.mjs +3 -1
  123. package/lib/components/VTimeline/VTimelineItem.mjs.map +1 -1
  124. package/lib/components/VToolbar/VToolbar.css +9 -33
  125. package/lib/components/VToolbar/VToolbar.mjs +3 -4
  126. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  127. package/lib/components/VToolbar/VToolbar.sass +5 -15
  128. package/lib/components/VToolbar/_variables.scss +3 -7
  129. package/lib/components/VTooltip/VTooltip.mjs +2 -2
  130. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  131. package/lib/components/index.d.ts +1696 -7583
  132. package/lib/composables/color.mjs +19 -26
  133. package/lib/composables/color.mjs.map +1 -1
  134. package/lib/composables/defaults.mjs +1 -1
  135. package/lib/composables/defaults.mjs.map +1 -1
  136. package/lib/composables/form.mjs +29 -9
  137. package/lib/composables/form.mjs.map +1 -1
  138. package/lib/composables/{forwardRef.mjs → forwardRefs.mjs} +29 -3
  139. package/lib/composables/forwardRefs.mjs.map +1 -0
  140. package/lib/composables/index.mjs +3 -2
  141. package/lib/composables/index.mjs.map +1 -1
  142. package/lib/composables/layout.mjs +12 -12
  143. package/lib/composables/layout.mjs.map +1 -1
  144. package/lib/composables/rtl.mjs +2 -2
  145. package/lib/composables/rtl.mjs.map +1 -1
  146. package/lib/composables/size.mjs +18 -14
  147. package/lib/composables/size.mjs.map +1 -1
  148. package/lib/composables/stack.mjs +22 -12
  149. package/lib/composables/stack.mjs.map +1 -1
  150. package/lib/composables/theme.mjs +9 -6
  151. package/lib/composables/theme.mjs.map +1 -1
  152. package/lib/composables/validation.mjs +13 -3
  153. package/lib/composables/validation.mjs.map +1 -1
  154. package/lib/entry-bundler.mjs +1 -1
  155. package/lib/index.d.ts +21 -21
  156. package/lib/styles/generic/_colors.scss +17 -9
  157. package/lib/styles/main.css +1135 -1371
  158. package/lib/styles/settings/_utilities.scss +16 -5
  159. package/lib/styles/utilities/_index.sass +0 -1
  160. package/lib/util/anchor.mjs +1 -3
  161. package/lib/util/anchor.mjs.map +1 -1
  162. package/lib/util/colorUtils.mjs +2 -2
  163. package/lib/util/colorUtils.mjs.map +1 -1
  164. package/lib/util/colors.mjs +1 -1
  165. package/lib/util/colors.mjs.map +1 -1
  166. package/lib/util/defineComponent.mjs +6 -3
  167. package/lib/util/defineComponent.mjs.map +1 -1
  168. package/lib/util/helpers.mjs +4 -1
  169. package/lib/util/helpers.mjs.map +1 -1
  170. package/lib/util/injectSelf.mjs +12 -0
  171. package/lib/util/injectSelf.mjs.map +1 -0
  172. package/package.json +3 -1
  173. package/lib/composables/forwardRef.mjs.map +0 -1
  174. package/lib/styles/utilities/_text.sass +0 -9
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.0.0-beta.6
2
+ * Vuetify v3.0.0-beta.9
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { readonly, ref, onBeforeUnmount, watch, Fragment, computed, toRef, unref, provide, inject, defineComponent as defineComponent$1, getCurrentInstance as getCurrentInstance$1, shallowRef, shallowReactive, toRaw, watchEffect, effectScope, capitalize, camelize, h, onDeactivated, onActivated, reactive, onMounted, createVNode, toRefs, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, vShow, resolveDirective, isRef, resolveDynamicComponent, onScopeDispose, vModelDynamic, warn, toHandlers, Teleport, createTextVNode, onBeforeUpdate, vModelText } from 'vue';
7
+ import { readonly, ref, onBeforeUnmount, watch, Fragment, computed, toRef, getCurrentInstance as getCurrentInstance$1, unref, provide, inject, defineComponent as defineComponent$1, shallowRef, shallowReactive, toRaw, watchEffect, effectScope, capitalize, camelize, h, onDeactivated, onActivated, reactive, onMounted, createVNode, toRefs, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, vShow, resolveDirective, isRef, resolveDynamicComponent, onScopeDispose, warn, toHandlers, Teleport, vModelDynamic, cloneVNode, createTextVNode, onBeforeUpdate, vModelText } from 'vue';
8
8
 
9
9
  const IN_BROWSER = typeof window !== 'undefined';
10
10
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
@@ -347,7 +347,8 @@ function getEventCoordinates(e) {
347
347
  clientX: e.clientX,
348
348
  clientY: e.clientY
349
349
  };
350
- }
350
+ } // Only allow a single return type
351
+
351
352
  function destructComputed(getter) {
352
353
  const refs = {};
353
354
  const base = computed(getter);
@@ -365,6 +366,8 @@ function destructComputed(getter) {
365
366
  });
366
367
  return refs;
367
368
  }
369
+ /** Array.includes but value can be any type */
370
+
368
371
  function includes(arr, val) {
369
372
  return arr.includes(val);
370
373
  }
@@ -385,13 +388,11 @@ function parseAnchor(anchor, isRtl) {
385
388
  align: toPhysical(align, isRtl)
386
389
  };
387
390
  }
388
-
389
391
  function toPhysical(str, isRtl) {
390
392
  if (str === 'start') return isRtl ? 'right' : 'left';
391
393
  if (str === 'end') return isRtl ? 'left' : 'right';
392
394
  return str;
393
395
  }
394
-
395
396
  function flipSide(anchor) {
396
397
  return {
397
398
  side: {
@@ -667,7 +668,7 @@ function colorToInt(color) {
667
668
  c = c.split('').map(char => char + char).join('');
668
669
  }
669
670
 
670
- if (c.length !== 6) {
671
+ if (c.length !== 6 && c.length !== 8) {
671
672
  consoleWarn(`'${color}' is not a valid rgb color`);
672
673
  }
673
674
 
@@ -679,7 +680,7 @@ function colorToInt(color) {
679
680
  if (rgb < 0) {
680
681
  consoleWarn(`Colors cannot be negative: '${color}'`);
681
682
  rgb = 0;
682
- } else if (rgb > 0xffffff || isNaN(rgb)) {
683
+ } else if (rgb > 0xffffffff || isNaN(rgb)) {
683
684
  consoleWarn(`'${color}' is not a valid rgb color`);
684
685
  rgb = 0xffffff;
685
686
  }
@@ -881,6 +882,53 @@ function getContrast(first, second) {
881
882
  return (light + 0.05) / (dark + 0.05);
882
883
  }
883
884
 
885
+ // Utilities
886
+ function getCurrentInstance(name, message) {
887
+ const vm = getCurrentInstance$1();
888
+
889
+ if (!vm) {
890
+ throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
891
+ }
892
+
893
+ return vm;
894
+ }
895
+ function getCurrentInstanceName() {
896
+ var _getCurrentInstance$t;
897
+
898
+ let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
899
+ return toKebabCase((_getCurrentInstance$t = getCurrentInstance(name).type) == null ? void 0 : _getCurrentInstance$t.name);
900
+ }
901
+ let _uid = 0;
902
+
903
+ let _map = new WeakMap();
904
+
905
+ function getUid() {
906
+ const vm = getCurrentInstance('getUid');
907
+ if (_map.has(vm)) return _map.get(vm);else {
908
+ const uid = _uid++;
909
+
910
+ _map.set(vm, uid);
911
+
912
+ return uid;
913
+ }
914
+ }
915
+
916
+ getUid.reset = () => {
917
+ _uid = 0;
918
+ _map = new WeakMap();
919
+ };
920
+
921
+ function injectSelf(key) {
922
+ const {
923
+ provides
924
+ } = getCurrentInstance('injectSelf');
925
+
926
+ if (provides && key in provides) {
927
+ // TS doesn't allow symbol as index type
928
+ return provides[key];
929
+ }
930
+ }
931
+
884
932
  // Utilities
885
933
 
886
934
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
@@ -992,7 +1040,9 @@ const defineComponent = function defineComponent(options) {
992
1040
  if (!val && scope) scope.stop();else if (val && !oldVal) {
993
1041
  scope = effectScope();
994
1042
  scope.run(() => {
995
- provideDefaults(val);
1043
+ var _injectSelf$value, _injectSelf;
1044
+
1045
+ provideDefaults(mergeDeep((_injectSelf$value = (_injectSelf = injectSelf(DefaultsSymbol)) == null ? void 0 : _injectSelf.value) != null ? _injectSelf$value : {}, val));
996
1046
  });
997
1047
  }
998
1048
  }, {
@@ -1066,42 +1116,6 @@ const deceleratedEasing = 'cubic-bezier(0.0, 0, 0.2, 1)'; // Entering
1066
1116
 
1067
1117
  const acceleratedEasing = 'cubic-bezier(0.4, 0, 1, 1)'; // Leaving
1068
1118
 
1069
- // Utilities
1070
- function getCurrentInstance(name, message) {
1071
- const vm = getCurrentInstance$1();
1072
-
1073
- if (!vm) {
1074
- throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
1075
- }
1076
-
1077
- return vm;
1078
- }
1079
- function getCurrentInstanceName() {
1080
- var _getCurrentInstance$t;
1081
-
1082
- let name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'composables';
1083
- return toKebabCase((_getCurrentInstance$t = getCurrentInstance(name).type) == null ? void 0 : _getCurrentInstance$t.name);
1084
- }
1085
- let _uid = 0;
1086
-
1087
- let _map = new WeakMap();
1088
-
1089
- function getUid() {
1090
- const vm = getCurrentInstance('getUid');
1091
- if (_map.has(vm)) return _map.get(vm);else {
1092
- const uid = _uid++;
1093
-
1094
- _map.set(vm, uid);
1095
-
1096
- return uid;
1097
- }
1098
- }
1099
-
1100
- getUid.reset = () => {
1101
- _uid = 0;
1102
- _map = new WeakMap();
1103
- };
1104
-
1105
1119
  function getScrollParent(el) {
1106
1120
  while (el) {
1107
1121
  if (hasScrollbar(el)) return el;
@@ -1342,11 +1356,10 @@ function createLayout(props) {
1342
1356
  const mainStyles = computed(() => {
1343
1357
  const layer = layers.value[layers.value.length - 1].layer;
1344
1358
  return {
1345
- position: 'relative',
1346
- paddingLeft: convertToUnit(layer.left),
1347
- paddingRight: convertToUnit(layer.right),
1348
- paddingTop: convertToUnit(layer.top),
1349
- paddingBottom: convertToUnit(layer.bottom),
1359
+ '--v-layout-left': convertToUnit(layer.left),
1360
+ '--v-layout-right': convertToUnit(layer.right),
1361
+ '--v-layout-top': convertToUnit(layer.top),
1362
+ '--v-layout-bottom': convertToUnit(layer.bottom),
1350
1363
  ...(transitionsEnabled.value ? undefined : {
1351
1364
  transition: 'none'
1352
1365
  })
@@ -1425,16 +1438,15 @@ function createLayout(props) {
1425
1438
 
1426
1439
  return { ...styles,
1427
1440
  height: isHorizontal ? `calc(100% - ${item.top}px - ${item.bottom}px)` : elementSize.value ? `${elementSize.value}px` : undefined,
1428
- marginLeft: isOppositeHorizontal ? undefined : `${item.left}px`,
1429
- marginRight: isOppositeHorizontal ? `${item.right}px` : undefined,
1430
- marginTop: position.value !== 'bottom' ? `${item.top}px` : undefined,
1431
- marginBottom: position.value !== 'top' ? `${item.bottom}px` : undefined,
1441
+ left: isOppositeHorizontal ? undefined : `${item.left}px`,
1442
+ right: isOppositeHorizontal ? `${item.right}px` : undefined,
1443
+ top: position.value !== 'bottom' ? `${item.top}px` : undefined,
1444
+ bottom: position.value !== 'top' ? `${item.bottom}px` : undefined,
1432
1445
  width: !isHorizontal ? `calc(100% - ${item.left}px - ${item.right}px)` : elementSize.value ? `${elementSize.value}px` : undefined
1433
1446
  };
1434
1447
  });
1435
1448
  const layoutItemScrimStyles = computed(() => ({
1436
- zIndex: zIndex.value - 1,
1437
- position: rootZIndex.value === ROOT_ZINDEX ? 'fixed' : 'absolute'
1449
+ zIndex: zIndex.value - 1
1438
1450
  }));
1439
1451
  return {
1440
1452
  layoutItemStyles,
@@ -1460,7 +1472,9 @@ function createLayout(props) {
1460
1472
  'v-layout--full-height': props.fullHeight
1461
1473
  }]);
1462
1474
  const layoutStyles = computed(() => ({
1463
- zIndex: rootZIndex.value
1475
+ zIndex: rootZIndex.value,
1476
+ position: parentLayout ? 'relative' : undefined,
1477
+ overflow: parentLayout ? 'hidden' : undefined
1464
1478
  }));
1465
1479
  return {
1466
1480
  layoutClasses,
@@ -1691,7 +1705,7 @@ function createTheme(app, options) {
1691
1705
  }
1692
1706
 
1693
1707
  for (const color of Object.keys(theme.colors)) {
1694
- if (/on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue;
1708
+ if (/^on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue;
1695
1709
  const onColor = `on-${color}`;
1696
1710
  const colorVal = colorToInt(theme.colors[color]);
1697
1711
  const blackContrast = Math.abs(APCAcontrast(0, colorVal));
@@ -1732,18 +1746,21 @@ function createTheme(app, options) {
1732
1746
  })]);
1733
1747
  }
1734
1748
 
1749
+ const bgLines = [];
1750
+ const fgLines = [];
1735
1751
  const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
1736
1752
 
1737
1753
  for (const key of colors) {
1738
- if (/on-[a-z]/.test(key)) {
1739
- createCssClass(lines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`]);
1754
+ if (/^on-[a-z]/.test(key)) {
1755
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`]);
1740
1756
  } else {
1741
- createCssClass(lines, `.bg-${key}`, [`--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`, `background: rgb(var(--v-theme-${key})) !important`, `color: rgb(var(--v-theme-on-${key})) !important`]);
1742
- createCssClass(lines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`]);
1743
- createCssClass(lines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`]);
1757
+ createCssClass(bgLines, `.bg-${key}`, [`--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`, `background: rgb(var(--v-theme-${key})) !important`, `color: rgb(var(--v-theme-on-${key})) !important`]);
1758
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`]);
1759
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`]);
1744
1760
  }
1745
1761
  }
1746
1762
 
1763
+ lines.push(...bgLines, ...fgLines);
1747
1764
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
1748
1765
  });
1749
1766
 
@@ -1963,13 +1980,13 @@ const rtl = {
1963
1980
 
1964
1981
  const RtlSymbol = Symbol.for('vuetify:rtl');
1965
1982
  function createRtl(localeScope, options) {
1966
- var _options$rtl, _options$defaultRtl;
1983
+ var _options$rtl;
1967
1984
 
1968
1985
  return createRtlScope({
1969
1986
  rtl: { ...rtl,
1970
1987
  ...((_options$rtl = options == null ? void 0 : options.rtl) != null ? _options$rtl : {})
1971
1988
  },
1972
- isRtl: ref((_options$defaultRtl = options == null ? void 0 : options.defaultRtl) != null ? _options$defaultRtl : false),
1989
+ isRtl: ref(false),
1973
1990
  rtlClasses: ref('')
1974
1991
  }, localeScope);
1975
1992
  }
@@ -2751,6 +2768,7 @@ const VImg = defineComponent({
2751
2768
  class: ['v-img__img', containClasses.value],
2752
2769
  src: normalisedSrc.value.src,
2753
2770
  srcset: normalisedSrc.value.srcset,
2771
+ alt: '',
2754
2772
  sizes: props.sizes,
2755
2773
  ref: image,
2756
2774
  onLoad,
@@ -2983,39 +3001,32 @@ function useRounded(props) {
2983
3001
 
2984
3002
  // Composables
2985
3003
  function useColor(colors) {
2986
- const backgroundIsCssColor = computed(() => isCssColor(colors.value.background));
2987
- const textIsCssColor = computed(() => isCssColor(colors.value.text));
2988
- const colorClasses = computed(() => {
3004
+ return destructComputed(() => {
2989
3005
  const classes = [];
2990
-
2991
- if (colors.value.background && !backgroundIsCssColor.value) {
2992
- classes.push(`bg-${colors.value.background}`);
2993
- }
2994
-
2995
- if (colors.value.text && !textIsCssColor.value) {
2996
- classes.push(`text-${colors.value.text}`);
2997
- }
2998
-
2999
- return classes;
3000
- });
3001
- const colorStyles = computed(() => {
3002
3006
  const styles = {};
3003
3007
 
3004
- if (colors.value.background && backgroundIsCssColor.value) {
3005
- styles.backgroundColor = colors.value.background;
3008
+ if (colors.value.background) {
3009
+ if (isCssColor(colors.value.background)) {
3010
+ styles.backgroundColor = colors.value.background;
3011
+ } else {
3012
+ classes.push(`bg-${colors.value.background}`);
3013
+ }
3006
3014
  }
3007
3015
 
3008
- if (colors.value.text && textIsCssColor.value) {
3009
- styles.color = colors.value.text;
3010
- styles.caretColor = colors.value.text;
3016
+ if (colors.value.text) {
3017
+ if (isCssColor(colors.value.text)) {
3018
+ styles.color = colors.value.text;
3019
+ styles.caretColor = colors.value.text;
3020
+ } else {
3021
+ classes.push(`text-${colors.value.text}`);
3022
+ }
3011
3023
  }
3012
3024
 
3013
- return styles;
3025
+ return {
3026
+ colorClasses: classes,
3027
+ colorStyles: styles
3028
+ };
3014
3029
  });
3015
- return {
3016
- colorClasses,
3017
- colorStyles
3018
- };
3019
3030
  }
3020
3031
  function useTextColor(props, name) {
3021
3032
  const colors = computed(() => ({
@@ -3044,52 +3055,6 @@ function useBackgroundColor(props, name) {
3044
3055
  };
3045
3056
  }
3046
3057
 
3047
- function useForwardRef(target) {
3048
- for (var _len = arguments.length, refs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
3049
- refs[_key - 1] = arguments[_key];
3050
- }
3051
-
3052
- return new Proxy(target, {
3053
- get(target, key) {
3054
- if (Reflect.has(target, key)) {
3055
- return Reflect.get(target, key);
3056
- }
3057
-
3058
- for (const ref of refs) {
3059
- if (ref.value && Reflect.has(ref.value, key)) {
3060
- const val = Reflect.get(ref.value, key);
3061
- return typeof val === 'function' ? val.bind(ref.value) : val;
3062
- }
3063
- }
3064
- },
3065
-
3066
- getOwnPropertyDescriptor(target, key) {
3067
- const descriptor = Reflect.getOwnPropertyDescriptor(target, key);
3068
- if (descriptor) return descriptor; // Check each ref's own properties
3069
-
3070
- for (const ref of refs) {
3071
- if (!ref.value) continue;
3072
- const descriptor = Reflect.getOwnPropertyDescriptor(ref.value, key);
3073
- if (descriptor) return descriptor;
3074
- } // Recursive search up each ref's prototype
3075
-
3076
-
3077
- for (const ref of refs) {
3078
- let obj = ref.value && Object.getPrototypeOf(ref.value);
3079
-
3080
- while (obj) {
3081
- const descriptor = Reflect.getOwnPropertyDescriptor(obj, key);
3082
- if (descriptor) return descriptor;
3083
- obj = Object.getPrototypeOf(obj);
3084
- }
3085
- }
3086
-
3087
- return undefined;
3088
- }
3089
-
3090
- });
3091
- }
3092
-
3093
3058
  const allowedDensities$1 = [null, 'prominent', 'default', 'comfortable', 'compact'];
3094
3059
  const makeVToolbarProps = propsFactory({
3095
3060
  absolute: Boolean,
@@ -3208,10 +3173,10 @@ const VToolbar = genericComponent()({
3208
3173
  })]
3209
3174
  });
3210
3175
  });
3211
- return useForwardRef({
3176
+ return {
3212
3177
  contentHeight,
3213
3178
  extensionHeight
3214
- });
3179
+ };
3215
3180
  }
3216
3181
 
3217
3182
  });
@@ -3902,19 +3867,24 @@ const makeSizeProps = propsFactory({
3902
3867
  }, 'size');
3903
3868
  function useSize(props) {
3904
3869
  let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
3905
- const sizeClasses = computed(() => {
3906
- return predefinedSizes.includes(props.size) ? `${name}--size-${props.size}` : undefined;
3907
- });
3908
- const sizeStyles = computed(() => {
3909
- return !predefinedSizes.includes(props.size) && props.size ? {
3910
- width: convertToUnit(props.size),
3911
- height: convertToUnit(props.size)
3912
- } : undefined;
3870
+ return destructComputed(() => {
3871
+ let sizeClasses;
3872
+ let sizeStyles;
3873
+
3874
+ if (includes(predefinedSizes, props.size)) {
3875
+ sizeClasses = `${name}--size-${props.size}`;
3876
+ } else if (props.size) {
3877
+ sizeStyles = {
3878
+ width: convertToUnit(props.size),
3879
+ height: convertToUnit(props.size)
3880
+ };
3881
+ }
3882
+
3883
+ return {
3884
+ sizeClasses,
3885
+ sizeStyles
3886
+ };
3913
3887
  });
3914
- return {
3915
- sizeClasses,
3916
- sizeStyles
3917
- };
3918
3888
  }
3919
3889
 
3920
3890
  const makeVIconProps = propsFactory({
@@ -5083,6 +5053,141 @@ const VAppBarTitle = defineComponent({
5083
5053
  // Utilities
5084
5054
  const VAlertTitle = createSimpleFunctional('v-alert-title');
5085
5055
 
5056
+ // Locales
5057
+
5058
+ const LocaleAdapterSymbol = Symbol.for('vuetify:locale-adapter');
5059
+ const VuetifyLocaleSymbol = Symbol.for('vuetify:locale');
5060
+ function provideLocale(props) {
5061
+ const adapter = inject(LocaleAdapterSymbol);
5062
+ if (!adapter) throw new Error('[Vuetify] Could not find injected locale adapter');
5063
+ return adapter.createScope(props);
5064
+ }
5065
+ function useLocale() {
5066
+ const adapter = inject(LocaleAdapterSymbol);
5067
+ if (!adapter) throw new Error('[Vuetify] Could not find injected locale adapter');
5068
+ return adapter.getScope();
5069
+ }
5070
+
5071
+ function isLocaleAdapter(x) {
5072
+ return !!x && x.hasOwnProperty('getScope') && x.hasOwnProperty('createScope') && x.hasOwnProperty('createRoot');
5073
+ }
5074
+
5075
+ function createLocale(app, options) {
5076
+ const adapter = isLocaleAdapter(options) ? options : createDefaultLocaleAdapter(options);
5077
+ const instance = adapter.createRoot(app);
5078
+ app == null ? void 0 : app.provide(RtlSymbol, createRtl(instance, options));
5079
+ return adapter;
5080
+ }
5081
+ const LANG_PREFIX = '$vuetify.';
5082
+
5083
+ const replace = (str, params) => {
5084
+ return str.replace(/\{(\d+)\}/g, (match, index) => {
5085
+ /* istanbul ignore next */
5086
+ return String(params[+index]);
5087
+ });
5088
+ };
5089
+
5090
+ const createTranslateFunction = (current, fallback, messages) => {
5091
+ return function (key) {
5092
+ for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
5093
+ params[_key - 1] = arguments[_key];
5094
+ }
5095
+
5096
+ if (!key.startsWith(LANG_PREFIX)) {
5097
+ return replace(key, params);
5098
+ }
5099
+
5100
+ const shortKey = key.replace(LANG_PREFIX, '');
5101
+ const currentLocale = current.value && messages.value[current.value];
5102
+ const fallbackLocale = fallback.value && messages.value[fallback.value];
5103
+ let str = getObjectValueByPath(currentLocale, shortKey, null);
5104
+
5105
+ if (!str) {
5106
+ consoleWarn(`Translation key "${key}" not found in "${current.value}", trying fallback locale`);
5107
+ str = getObjectValueByPath(fallbackLocale, shortKey, null);
5108
+ }
5109
+
5110
+ if (!str) {
5111
+ consoleError(`Translation key "${key}" not found in fallback`);
5112
+ str = key;
5113
+ }
5114
+
5115
+ if (typeof str !== 'string') {
5116
+ consoleError(`Translation key "${key}" has a non-string value`);
5117
+ str = key;
5118
+ }
5119
+
5120
+ return replace(str, params);
5121
+ };
5122
+ };
5123
+
5124
+ function createNumberFunction(current, fallback) {
5125
+ return (value, options) => {
5126
+ const numberFormat = new Intl.NumberFormat([current.value, fallback.value], options);
5127
+ return numberFormat.format(value);
5128
+ };
5129
+ }
5130
+
5131
+ function createDefaultLocaleAdapter(options) {
5132
+ const createScope = options => {
5133
+ const current = ref(options.current);
5134
+ const fallback = ref(options.fallback);
5135
+ const messages = ref(options.messages);
5136
+ return {
5137
+ current,
5138
+ fallback,
5139
+ messages,
5140
+ t: createTranslateFunction(current, fallback, messages),
5141
+ n: createNumberFunction(current, fallback)
5142
+ };
5143
+ };
5144
+
5145
+ return {
5146
+ createRoot: app => {
5147
+ var _options$defaultLocal, _options$fallbackLoca, _options$messages;
5148
+
5149
+ const rootScope = createScope({
5150
+ current: (_options$defaultLocal = options == null ? void 0 : options.defaultLocale) != null ? _options$defaultLocal : 'en',
5151
+ fallback: (_options$fallbackLoca = options == null ? void 0 : options.fallbackLocale) != null ? _options$fallbackLoca : 'en',
5152
+ messages: (_options$messages = options == null ? void 0 : options.messages) != null ? _options$messages : {
5153
+ en
5154
+ }
5155
+ });
5156
+ if (!app) throw new Error('[Vuetify] Could not find default app instance');
5157
+ app.provide(VuetifyLocaleSymbol, rootScope);
5158
+ return rootScope;
5159
+ },
5160
+ getScope: () => {
5161
+ const currentScope = inject(VuetifyLocaleSymbol);
5162
+ if (!currentScope) throw new Error('[Vuetify] Could not find injected locale instance');
5163
+ return currentScope;
5164
+ },
5165
+ createScope: options => {
5166
+ const currentScope = inject(VuetifyLocaleSymbol);
5167
+ if (!currentScope) throw new Error('[Vuetify] Could not find injected locale instance');
5168
+ const newScope = createScope({
5169
+ current: computed(() => {
5170
+ var _options$locale;
5171
+
5172
+ return (_options$locale = options == null ? void 0 : options.locale) != null ? _options$locale : currentScope.current.value;
5173
+ }),
5174
+ fallback: computed(() => {
5175
+ var _options$locale2;
5176
+
5177
+ return (_options$locale2 = options == null ? void 0 : options.locale) != null ? _options$locale2 : currentScope.fallback.value;
5178
+ }),
5179
+ messages: computed(() => {
5180
+ var _options$messages2;
5181
+
5182
+ return (_options$messages2 = options == null ? void 0 : options.messages) != null ? _options$messages2 : currentScope.messages.value;
5183
+ })
5184
+ });
5185
+ provide(VuetifyLocaleSymbol, newScope);
5186
+ return newScope;
5187
+ }
5188
+ };
5189
+ }
5190
+
5086
5191
  const allowedTypes = ['success', 'info', 'warning', 'error'];
5087
5192
  const VAlert = defineComponent({
5088
5193
  name: 'VAlert',
@@ -5184,13 +5289,19 @@ const VAlert = defineComponent({
5184
5289
  textColorClasses,
5185
5290
  textColorStyles
5186
5291
  } = useTextColor(toRef(props, 'borderColor'));
5292
+ const {
5293
+ t
5294
+ } = useLocale();
5295
+ const closeProps = computed(() => ({
5296
+ 'aria-label': t(props.closeLabel),
5187
5297
 
5188
- function onCloseClick(e) {
5189
- isActive.value = false;
5190
- }
5298
+ onClick(e) {
5299
+ isActive.value = false;
5300
+ }
5191
5301
 
5302
+ }));
5192
5303
  return () => {
5193
- var _slots$default;
5304
+ var _slots$default, _slots$close, _slots$close2;
5194
5305
 
5195
5306
  const hasPrepend = !!(slots.prepend || icon.value);
5196
5307
  const hasTitle = !!(slots.title || props.title);
@@ -5216,7 +5327,7 @@ const VAlert = defineComponent({
5216
5327
  VIcon: {
5217
5328
  density: props.density,
5218
5329
  icon: icon.value,
5219
- size: props.prominent ? 44 : 'default'
5330
+ size: props.prominent ? 44 : 28
5220
5331
  }
5221
5332
  }
5222
5333
  }, {
@@ -5235,16 +5346,18 @@ const VAlert = defineComponent({
5235
5346
  }, [slots.append()]), hasClose && createVNode(VDefaultsProvider, {
5236
5347
  "key": "close",
5237
5348
  "defaults": {
5238
- VIcon: {
5349
+ VBtn: {
5239
5350
  icon: props.closeIcon,
5240
- size: 'small'
5351
+ size: 'x-small',
5352
+ variant: 'text'
5241
5353
  }
5242
5354
  }
5243
5355
  }, {
5244
5356
  default: () => [createVNode("div", {
5245
- "class": "v-alert__close",
5246
- "onClick": onCloseClick
5247
- }, [slots.close ? slots.close() : createVNode(VIcon, null, null)])]
5357
+ "class": "v-alert__close"
5358
+ }, [(_slots$close = (_slots$close2 = slots.close) == null ? void 0 : _slots$close2.call(slots, {
5359
+ props: closeProps.value
5360
+ })) != null ? _slots$close : createVNode(VBtn, closeProps.value, null)])]
5248
5361
  })]
5249
5362
  });
5250
5363
  };
@@ -5358,20 +5471,34 @@ function createForm(props) {
5358
5471
  }
5359
5472
 
5360
5473
  watch(items, () => {
5361
- let valid = null;
5474
+ let valid = 0;
5475
+ let invalid = 0;
5476
+ const results = [];
5362
5477
 
5363
- if (items.value.some(item => item.isValid === false)) {
5364
- valid = false;
5365
- } else if (items.value.every(item => item.isValid === true)) {
5366
- valid = true;
5478
+ for (const item of items.value) {
5479
+ if (item.isValid === false) {
5480
+ invalid++;
5481
+ results.push({
5482
+ id: item.id,
5483
+ errorMessages: item.errorMessages
5484
+ });
5485
+ } else if (item.isValid === true) valid++;
5367
5486
  }
5368
5487
 
5369
- model.value = valid;
5488
+ errors.value = results;
5489
+ model.value = invalid > 0 ? false : valid === items.value.length ? true : null;
5370
5490
  }, {
5371
5491
  deep: true
5372
5492
  });
5373
5493
  provide(FormKey, {
5374
- register: (id, validate, reset, resetValidation, isValid) => {
5494
+ register: _ref => {
5495
+ let {
5496
+ id,
5497
+ validate,
5498
+ reset,
5499
+ resetValidation
5500
+ } = _ref;
5501
+
5375
5502
  if (items.value.some(item => item.id === id)) {
5376
5503
  consoleWarn(`Duplicate input name "${id}"`);
5377
5504
  }
@@ -5381,8 +5508,8 @@ function createForm(props) {
5381
5508
  validate,
5382
5509
  reset,
5383
5510
  resetValidation,
5384
- isValid: isValid // TODO: Better way to type this unwrapping?
5385
-
5511
+ isValid: null,
5512
+ errorMessages: []
5386
5513
  });
5387
5514
  },
5388
5515
  unregister: id => {
@@ -5390,6 +5517,12 @@ function createForm(props) {
5390
5517
  return item.id !== id;
5391
5518
  });
5392
5519
  },
5520
+ update: (id, isValid, errorMessages) => {
5521
+ const found = items.value.find(item => item.id === id);
5522
+ if (!found) return;
5523
+ found.isValid = isValid;
5524
+ found.errorMessages = errorMessages;
5525
+ },
5393
5526
  isDisabled,
5394
5527
  isReadonly,
5395
5528
  isValidating,
@@ -5470,14 +5603,24 @@ function useValidation(props) {
5470
5603
  return (_props$name = props.name) != null ? _props$name : unref(id);
5471
5604
  });
5472
5605
  onBeforeMount(() => {
5473
- form == null ? void 0 : form.register(uid.value, validate, reset, resetValidation, isValid);
5606
+ form == null ? void 0 : form.register({
5607
+ id: uid.value,
5608
+ validate,
5609
+ reset,
5610
+ resetValidation
5611
+ });
5474
5612
  });
5475
5613
  onBeforeUnmount(() => {
5476
5614
  form == null ? void 0 : form.unregister(uid.value);
5477
- });
5615
+ }); // Set initial valid state, for inputs that might not have rules
5616
+
5617
+ onMounted(() => form == null ? void 0 : form.update(uid.value, isValid.value, errorMessages.value));
5478
5618
  watch(validationModel, () => {
5479
5619
  if (validationModel.value != null) validate();
5480
5620
  });
5621
+ watch(isValid, () => {
5622
+ form == null ? void 0 : form.update(uid.value, isValid.value, errorMessages.value);
5623
+ });
5481
5624
 
5482
5625
  function reset() {
5483
5626
  resetValidation();
@@ -5846,6 +5989,10 @@ const VSelectionControl = genericComponent()({
5846
5989
  isFocusVisible.value = false;
5847
5990
  }
5848
5991
 
5992
+ function onInput(e) {
5993
+ model.value = e.target.checked;
5994
+ }
5995
+
5849
5996
  useRender(() => {
5850
5997
  var _group$type$value, _slots$default, _group$name$value, _slots$input;
5851
5998
 
@@ -5874,19 +6021,20 @@ const VSelectionControl = genericComponent()({
5874
6021
  }, [icon.value && createVNode(VIcon, {
5875
6022
  "key": "icon",
5876
6023
  "icon": icon.value
5877
- }, null), withDirectives(createVNode("input", mergeProps({
5878
- "onUpdate:modelValue": $event => model.value = $event,
6024
+ }, null), createVNode("input", mergeProps({
5879
6025
  "ref": input,
6026
+ "checked": model.value,
5880
6027
  "disabled": props.disabled,
5881
6028
  "id": id.value,
5882
6029
  "onBlur": onBlur,
5883
6030
  "onFocus": onFocus,
6031
+ "onInput": onInput,
5884
6032
  "aria-readonly": props.readonly,
5885
6033
  "type": type,
5886
6034
  "value": trueValue.value,
5887
6035
  "name": (_group$name$value = group == null ? void 0 : group.name.value) != null ? _group$name$value : props.name,
5888
6036
  "aria-checked": type === 'checkbox' ? model.value : undefined
5889
- }, inputAttrs), null), [[vModelDynamic, model.value]]), (_slots$input = slots.input) == null ? void 0 : _slots$input.call(slots, {
6037
+ }, inputAttrs), null), (_slots$input = slots.input) == null ? void 0 : _slots$input.call(slots, {
5890
6038
  model,
5891
6039
  textColorClasses,
5892
6040
  props: {
@@ -6991,20 +7139,26 @@ const VListItem = genericComponent()({
6991
7139
  Ripple
6992
7140
  },
6993
7141
  props: {
6994
- active: Boolean,
6995
- activeColor: String,
7142
+ active: {
7143
+ type: Boolean,
7144
+ default: undefined
7145
+ },
6996
7146
  activeClass: String,
7147
+ activeColor: String,
6997
7148
  appendAvatar: String,
6998
7149
  appendIcon: IconValue,
6999
7150
  disabled: Boolean,
7000
7151
  lines: String,
7152
+ link: {
7153
+ type: Boolean,
7154
+ default: undefined
7155
+ },
7001
7156
  nav: Boolean,
7002
7157
  prependAvatar: String,
7003
7158
  prependIcon: IconValue,
7004
7159
  subtitle: [String, Number, Boolean],
7005
7160
  title: [String, Number, Boolean],
7006
7161
  value: null,
7007
- link: Boolean,
7008
7162
  ...makeBorderProps(),
7009
7163
  ...makeDensityProps(),
7010
7164
  ...makeDimensionProps(),
@@ -7041,8 +7195,10 @@ const VListItem = genericComponent()({
7041
7195
  const isActive = computed(() => {
7042
7196
  var _link$isExactActive;
7043
7197
 
7044
- return props.active || ((_link$isExactActive = link.isExactActive) == null ? void 0 : _link$isExactActive.value) || isSelected.value;
7198
+ return props.active !== false && (props.active || ((_link$isExactActive = link.isExactActive) == null ? void 0 : _link$isExactActive.value) || isSelected.value);
7045
7199
  });
7200
+ const isLink = computed(() => props.link !== false && link.isLink.value);
7201
+ const isClickable = computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || props.value != null && !!list));
7046
7202
  const roundedProps = computed(() => props.rounded || props.nav);
7047
7203
  const variantProps = computed(() => {
7048
7204
  var _props$activeColor;
@@ -7096,27 +7252,26 @@ const VListItem = genericComponent()({
7096
7252
  useRender(() => {
7097
7253
  var _slots$prepend, _slots$title, _slots$title2, _slots$subtitle, _slots$subtitle2, _slots$default, _slots$append;
7098
7254
 
7099
- const Tag = link.isLink.value ? 'a' : props.tag;
7255
+ const Tag = isLink.value ? 'a' : props.tag;
7100
7256
  const hasColor = !list || isSelected.value || isActive.value;
7101
7257
  const hasTitle = slots.title || props.title;
7102
7258
  const hasSubtitle = slots.subtitle || props.subtitle;
7103
7259
  const hasAppend = !!(slots.append || props.appendAvatar || props.appendIcon);
7104
7260
  const hasPrepend = !!(slots.prepend || props.prependAvatar || props.prependIcon);
7105
- const isClickable = !props.disabled && (props.link || link.isClickable.value || props.value != null && !!list);
7106
7261
  list == null ? void 0 : list.updateHasPrepend(hasPrepend);
7107
7262
  return withDirectives(createVNode(Tag, {
7108
7263
  "class": ['v-list-item', {
7109
7264
  'v-list-item--active': isActive.value,
7110
7265
  'v-list-item--disabled': props.disabled,
7111
- 'v-list-item--link': isClickable,
7266
+ 'v-list-item--link': isClickable.value,
7112
7267
  'v-list-item--nav': props.nav,
7113
7268
  'v-list-item--prepend': !hasPrepend && (list == null ? void 0 : list.hasPrepend.value),
7114
7269
  [`${props.activeClass}`]: isActive.value
7115
7270
  }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value],
7116
7271
  "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value],
7117
7272
  "href": link.href.value,
7118
- "tabindex": isClickable ? 0 : undefined,
7119
- "onClick": isClickable && (e => {
7273
+ "tabindex": isClickable.value ? 0 : undefined,
7274
+ "onClick": isClickable.value && (e => {
7120
7275
  var _link$navigate;
7121
7276
 
7122
7277
  if (isGroupActivator) return;
@@ -7124,7 +7279,7 @@ const VListItem = genericComponent()({
7124
7279
  props.value != null && select(!isSelected.value, e);
7125
7280
  })
7126
7281
  }, {
7127
- default: () => [genOverlays(isClickable || isActive.value, 'v-list-item'), hasPrepend && createVNode(VDefaultsProvider, {
7282
+ default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && createVNode(VDefaultsProvider, {
7128
7283
  "key": "prepend",
7129
7284
  "defaults": {
7130
7285
  VAvatar: {
@@ -7185,7 +7340,7 @@ const VListItem = genericComponent()({
7185
7340
  "key": "append-avatar"
7186
7341
  }, null)])]
7187
7342
  })]
7188
- }), [[resolveDirective("ripple"), isClickable]]);
7343
+ }), [[resolveDirective("ripple"), isClickable.value]]);
7189
7344
  });
7190
7345
  return {};
7191
7346
  }
@@ -7254,8 +7409,25 @@ const VListChildren = genericComponent()({
7254
7409
  type,
7255
7410
  raw: item
7256
7411
  } = _ref2;
7257
- if (type === 'divider') return createVNode(VDivider, itemProps, null);
7258
- if (type === 'subheader') return createVNode(VListSubheader, itemProps, slots);
7412
+
7413
+ if (type === 'divider') {
7414
+ var _slots$divider, _slots$divider2;
7415
+
7416
+ return (_slots$divider = (_slots$divider2 = slots.divider) == null ? void 0 : _slots$divider2.call(slots, {
7417
+ props: itemProps
7418
+ })) != null ? _slots$divider : createVNode(VDivider, itemProps, null);
7419
+ }
7420
+
7421
+ if (type === 'subheader') {
7422
+ var _slots$subheader, _slots$subheader2;
7423
+
7424
+ return (_slots$subheader = (_slots$subheader2 = slots.subheader) == null ? void 0 : _slots$subheader2.call(slots, {
7425
+ props: itemProps
7426
+ })) != null ? _slots$subheader : createVNode(VListSubheader, itemProps, {
7427
+ default: slots.subheader
7428
+ });
7429
+ }
7430
+
7259
7431
  const slotsWithItem = {
7260
7432
  subtitle: slots.subtitle ? slotProps => {
7261
7433
  var _slots$subtitle;
@@ -7745,7 +7917,7 @@ function useActivator(props, _ref) {
7745
7917
  return events;
7746
7918
  });
7747
7919
  watch(isTop, val => {
7748
- if (val && props.openOnHover && !isHovered) {
7920
+ if (val && (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused) || openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered))) {
7749
7921
  isActive.value = false;
7750
7922
  }
7751
7923
  });
@@ -8514,33 +8686,43 @@ function useToggleScope(source, cb) {
8514
8686
  });
8515
8687
  }
8516
8688
 
8517
- const stack = reactive([]);
8689
+ const StackSymbol = Symbol.for('vuetify:stack');
8690
+ const globalStack = reactive([]);
8518
8691
  function useStack(isActive, zIndex) {
8519
8692
  const vm = getCurrentInstance('useStack');
8693
+ const parent = inject(StackSymbol, undefined);
8694
+ const stack = reactive({
8695
+ activeChildren: new Set()
8696
+ });
8697
+ provide(StackSymbol, stack);
8520
8698
 
8521
8699
  const _zIndex = ref(+zIndex.value);
8522
8700
 
8523
8701
  useToggleScope(isActive, () => {
8524
- var _stack$at;
8702
+ var _globalStack$at;
8525
8703
 
8526
- const lastZIndex = (_stack$at = stack.at(-1)) == null ? void 0 : _stack$at[1];
8704
+ const lastZIndex = (_globalStack$at = globalStack.at(-1)) == null ? void 0 : _globalStack$at[1];
8527
8705
  _zIndex.value = lastZIndex ? lastZIndex + 10 : +zIndex.value;
8528
- stack.push([vm.uid, _zIndex.value]);
8706
+ globalStack.push([vm.uid, _zIndex.value]);
8707
+ parent == null ? void 0 : parent.activeChildren.add(vm.uid);
8529
8708
  onScopeDispose(() => {
8530
- const idx = stack.findIndex(v => v[0] === vm.uid);
8531
- stack.splice(idx, 1);
8709
+ const idx = globalStack.findIndex(v => v[0] === vm.uid);
8710
+ globalStack.splice(idx, 1);
8711
+ parent == null ? void 0 : parent.activeChildren.delete(vm.uid);
8532
8712
  });
8533
8713
  });
8534
- const isTop = ref(true);
8714
+ const globalTop = ref(true);
8535
8715
  watchEffect(() => {
8536
- var _stack$at2;
8716
+ var _globalStack$at2;
8537
8717
 
8538
- const _isTop = ((_stack$at2 = stack.at(-1)) == null ? void 0 : _stack$at2[0]) === vm.uid;
8718
+ const _isTop = ((_globalStack$at2 = globalStack.at(-1)) == null ? void 0 : _globalStack$at2[0]) === vm.uid;
8539
8719
 
8540
- setTimeout(() => isTop.value = _isTop);
8720
+ setTimeout(() => globalTop.value = _isTop);
8541
8721
  });
8722
+ const localTop = computed(() => !stack.activeChildren.size);
8542
8723
  return {
8543
- isTop: readonly(isTop),
8724
+ globalTop: readonly(globalTop),
8725
+ localTop,
8544
8726
  stackStyles: computed(() => ({
8545
8727
  zIndex: _zIndex.value
8546
8728
  }))
@@ -8763,7 +8945,8 @@ const VOverlay = genericComponent()({
8763
8945
  return typeof props.scrim === 'string' ? props.scrim : null;
8764
8946
  }));
8765
8947
  const {
8766
- isTop,
8948
+ globalTop,
8949
+ localTop,
8767
8950
  stackStyles
8768
8951
  } = useStack(isActive, toRef(props, 'zIndex'));
8769
8952
  const {
@@ -8773,7 +8956,7 @@ const VOverlay = genericComponent()({
8773
8956
  contentEvents
8774
8957
  } = useActivator(props, {
8775
8958
  isActive,
8776
- isTop
8959
+ isTop: localTop
8777
8960
  });
8778
8961
  const {
8779
8962
  dimensionStyles
@@ -8806,7 +8989,7 @@ const VOverlay = genericComponent()({
8806
8989
  }
8807
8990
 
8808
8991
  function closeConditional() {
8809
- return isActive.value && isTop.value;
8992
+ return isActive.value && globalTop.value;
8810
8993
  }
8811
8994
 
8812
8995
  IN_BROWSER && watch(isActive, val => {
@@ -8820,7 +9003,7 @@ const VOverlay = genericComponent()({
8820
9003
  });
8821
9004
 
8822
9005
  function onKeydown(e) {
8823
- if (e.key === 'Escape' && isTop.value) {
9006
+ if (e.key === 'Escape' && globalTop.value) {
8824
9007
  if (!props.persistent) {
8825
9008
  isActive.value = false;
8826
9009
  } else animateClick();
@@ -8830,7 +9013,7 @@ const VOverlay = genericComponent()({
8830
9013
  const router = useRouter();
8831
9014
  useToggleScope(() => props.closeOnBack, () => {
8832
9015
  useBackButton(router, next => {
8833
- if (isTop.value && isActive.value) {
9016
+ if (globalTop.value && isActive.value) {
8834
9017
  next(false);
8835
9018
  if (!props.persistent) isActive.value = false;else animateClick();
8836
9019
  } else {
@@ -8918,13 +9101,86 @@ const VOverlay = genericComponent()({
8918
9101
  activatorEl,
8919
9102
  animateClick,
8920
9103
  contentEl,
8921
- isTop,
9104
+ globalTop,
9105
+ localTop,
8922
9106
  updateLocation
8923
9107
  };
8924
9108
  }
8925
9109
 
8926
9110
  });
8927
9111
 
9112
+ const Refs = Symbol('Forwarded refs');
9113
+ /** Omit properties starting with P */
9114
+
9115
+ function forwardRefs(target) {
9116
+ for (var _len = arguments.length, refs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
9117
+ refs[_key - 1] = arguments[_key];
9118
+ }
9119
+
9120
+ target[Refs] = refs;
9121
+ return new Proxy(target, {
9122
+ get(target, key) {
9123
+ if (Reflect.has(target, key)) {
9124
+ return Reflect.get(target, key);
9125
+ }
9126
+
9127
+ for (const ref of refs) {
9128
+ if (ref.value && Reflect.has(ref.value, key)) {
9129
+ const val = Reflect.get(ref.value, key);
9130
+ return typeof val === 'function' ? val.bind(ref.value) : val;
9131
+ }
9132
+ }
9133
+ },
9134
+
9135
+ getOwnPropertyDescriptor(target, key) {
9136
+ const descriptor = Reflect.getOwnPropertyDescriptor(target, key);
9137
+ if (descriptor) return descriptor; // Skip internal properties
9138
+
9139
+ if (typeof key === 'symbol' || key.startsWith('__')) return; // Check each ref's own properties
9140
+
9141
+ for (const ref of refs) {
9142
+ if (!ref.value) continue;
9143
+ const descriptor = Reflect.getOwnPropertyDescriptor(ref.value, key);
9144
+ if (descriptor) return descriptor;
9145
+
9146
+ if ('_' in ref.value && 'setupState' in ref.value._) {
9147
+ const descriptor = Reflect.getOwnPropertyDescriptor(ref.value._.setupState, key);
9148
+ if (descriptor) return descriptor;
9149
+ }
9150
+ } // Recursive search up each ref's prototype
9151
+
9152
+
9153
+ for (const ref of refs) {
9154
+ let obj = ref.value && Object.getPrototypeOf(ref.value);
9155
+
9156
+ while (obj) {
9157
+ const descriptor = Reflect.getOwnPropertyDescriptor(obj, key);
9158
+ if (descriptor) return descriptor;
9159
+ obj = Object.getPrototypeOf(obj);
9160
+ }
9161
+ } // Call forwarded refs' proxies
9162
+
9163
+
9164
+ for (const ref of refs) {
9165
+ const childRefs = ref.value && ref.value[Refs];
9166
+ if (!childRefs) continue;
9167
+ const queue = childRefs.slice();
9168
+
9169
+ while (queue.length) {
9170
+ const ref = queue.shift();
9171
+ const descriptor = Reflect.getOwnPropertyDescriptor(ref.value, key);
9172
+ if (descriptor) return descriptor;
9173
+ const childRefs = ref.value && ref.value[Refs];
9174
+ if (childRefs) queue.push(...childRefs);
9175
+ }
9176
+ }
9177
+
9178
+ return undefined;
9179
+ }
9180
+
9181
+ });
9182
+ }
9183
+
8928
9184
  function useScopeId() {
8929
9185
  const vm = getCurrentInstance('useScopeId');
8930
9186
  const scopeId = vm.vnode.scopeId;
@@ -9017,7 +9273,7 @@ const VMenu = genericComponent()({
9017
9273
  default: slots.default,
9018
9274
  activator: slots.activator
9019
9275
  }));
9020
- return useForwardRef({
9276
+ return forwardRefs({
9021
9277
  id
9022
9278
  }, overlay);
9023
9279
  }
@@ -9165,7 +9421,7 @@ const VField = genericComponent()({
9165
9421
  const width = Math.abs(targetWidth - rect.width) > 1 ? {
9166
9422
  maxWidth: convertToUnit(targetWidth)
9167
9423
  } : undefined;
9168
- const duration = parseFloat(getComputedStyle(el).transitionDuration) * 1000;
9424
+ const duration = parseFloat(getComputedStyle(el).transitionDuration) * 1000 || 150;
9169
9425
  const scale = parseFloat(getComputedStyle(targetEl).getPropertyValue('--v-field-label-scale'));
9170
9426
  el.style.visibility = 'visible';
9171
9427
  targetEl.style.visibility = 'hidden';
@@ -9446,10 +9702,6 @@ const VTextField = genericComponent()({
9446
9702
  });
9447
9703
  }
9448
9704
 
9449
- function onInput(e) {
9450
- model.value = e.target.value;
9451
- }
9452
-
9453
9705
  useRender(() => {
9454
9706
  const hasCounter = !!(slots.counter || props.counter || props.counterValue);
9455
9707
  const hasDetails = !!(hasCounter || slots.details);
@@ -9500,24 +9752,16 @@ const VTextField = genericComponent()({
9500
9752
  "error": isValid.value === false
9501
9753
  }), { ...slots,
9502
9754
  default: _ref3 => {
9503
- var _slots$default;
9504
-
9505
9755
  let {
9506
9756
  props: {
9507
9757
  class: fieldClass,
9508
9758
  ...slotProps
9509
9759
  }
9510
9760
  } = _ref3;
9511
- return createVNode(Fragment, null, [props.prefix && createVNode("span", {
9512
- "class": "v-text-field__prefix"
9513
- }, [props.prefix]), createVNode("div", {
9514
- "class": fieldClass,
9515
- "onClick": e => emit('click:input', e),
9516
- "data-no-activator": ""
9517
- }, [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots), withDirectives(createVNode("input", mergeProps({
9761
+
9762
+ const inputNode = withDirectives(createVNode("input", mergeProps({
9518
9763
  "ref": inputRef,
9519
- "value": model.value,
9520
- "onInput": onInput,
9764
+ "onUpdate:modelValue": $event => model.value = $event,
9521
9765
  "autofocus": props.autofocus,
9522
9766
  "readonly": isReadonly.value,
9523
9767
  "disabled": isDisabled.value,
@@ -9527,11 +9771,21 @@ const VTextField = genericComponent()({
9527
9771
  "type": props.type,
9528
9772
  "onFocus": onFocus,
9529
9773
  "onBlur": () => isFocused.value = false
9530
- }, slotProps, inputAttrs), null), [[resolveDirective("intersect"), {
9774
+ }, slotProps, inputAttrs), null), [[vModelDynamic, model.value], [resolveDirective("intersect"), {
9531
9775
  handler: onIntersect
9532
9776
  }, null, {
9533
9777
  once: true
9534
- }]])]), props.suffix && createVNode("span", {
9778
+ }]]);
9779
+
9780
+ return createVNode(Fragment, null, [props.prefix && createVNode("span", {
9781
+ "class": "v-text-field__prefix"
9782
+ }, [props.prefix]), slots.default ? createVNode("div", {
9783
+ "class": fieldClass,
9784
+ "onClick": e => emit('click:input', e),
9785
+ "data-no-activator": ""
9786
+ }, [slots.default(), inputNode]) : cloneVNode(inputNode, {
9787
+ class: fieldClass
9788
+ }), props.suffix && createVNode("span", {
9535
9789
  "class": "v-text-field__suffix"
9536
9790
  }, [props.suffix])]);
9537
9791
  }
@@ -9548,146 +9802,11 @@ const VTextField = genericComponent()({
9548
9802
  } : undefined
9549
9803
  });
9550
9804
  });
9551
- return useForwardRef({}, vInputRef, vFieldRef, inputRef);
9805
+ return forwardRefs({}, vInputRef, vFieldRef, inputRef);
9552
9806
  }
9553
9807
 
9554
9808
  });
9555
9809
 
9556
- // Locales
9557
-
9558
- const LocaleAdapterSymbol = Symbol.for('vuetify:locale-adapter');
9559
- const VuetifyLocaleSymbol = Symbol.for('vuetify:locale');
9560
- function provideLocale(props) {
9561
- const adapter = inject(LocaleAdapterSymbol);
9562
- if (!adapter) throw new Error('[Vuetify] Could not find injected locale adapter');
9563
- return adapter.createScope(props);
9564
- }
9565
- function useLocale() {
9566
- const adapter = inject(LocaleAdapterSymbol);
9567
- if (!adapter) throw new Error('[Vuetify] Could not find injected locale adapter');
9568
- return adapter.getScope();
9569
- }
9570
-
9571
- function isLocaleAdapter(x) {
9572
- return !!x && x.hasOwnProperty('getScope') && x.hasOwnProperty('createScope') && x.hasOwnProperty('createRoot');
9573
- }
9574
-
9575
- function createLocale(app, options) {
9576
- const adapter = isLocaleAdapter(options) ? options : createDefaultLocaleAdapter(options);
9577
- const instance = adapter.createRoot(app);
9578
- app == null ? void 0 : app.provide(RtlSymbol, createRtl(instance, options));
9579
- return adapter;
9580
- }
9581
- const LANG_PREFIX = '$vuetify.';
9582
-
9583
- const replace = (str, params) => {
9584
- return str.replace(/\{(\d+)\}/g, (match, index) => {
9585
- /* istanbul ignore next */
9586
- return String(params[+index]);
9587
- });
9588
- };
9589
-
9590
- const createTranslateFunction = (current, fallback, messages) => {
9591
- return function (key) {
9592
- for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
9593
- params[_key - 1] = arguments[_key];
9594
- }
9595
-
9596
- if (!key.startsWith(LANG_PREFIX)) {
9597
- return replace(key, params);
9598
- }
9599
-
9600
- const shortKey = key.replace(LANG_PREFIX, '');
9601
- const currentLocale = current.value && messages.value[current.value];
9602
- const fallbackLocale = fallback.value && messages.value[fallback.value];
9603
- let str = getObjectValueByPath(currentLocale, shortKey, null);
9604
-
9605
- if (!str) {
9606
- consoleWarn(`Translation key "${key}" not found in "${current.value}", trying fallback locale`);
9607
- str = getObjectValueByPath(fallbackLocale, shortKey, null);
9608
- }
9609
-
9610
- if (!str) {
9611
- consoleError(`Translation key "${key}" not found in fallback`);
9612
- str = key;
9613
- }
9614
-
9615
- if (typeof str !== 'string') {
9616
- consoleError(`Translation key "${key}" has a non-string value`);
9617
- str = key;
9618
- }
9619
-
9620
- return replace(str, params);
9621
- };
9622
- };
9623
-
9624
- function createNumberFunction(current, fallback) {
9625
- return (value, options) => {
9626
- const numberFormat = new Intl.NumberFormat([current.value, fallback.value], options);
9627
- return numberFormat.format(value);
9628
- };
9629
- }
9630
-
9631
- function createDefaultLocaleAdapter(options) {
9632
- const createScope = options => {
9633
- const current = ref(options.current);
9634
- const fallback = ref(options.fallback);
9635
- const messages = ref(options.messages);
9636
- return {
9637
- current,
9638
- fallback,
9639
- messages,
9640
- t: createTranslateFunction(current, fallback, messages),
9641
- n: createNumberFunction(current, fallback)
9642
- };
9643
- };
9644
-
9645
- return {
9646
- createRoot: app => {
9647
- var _options$defaultLocal, _options$fallbackLoca, _options$messages;
9648
-
9649
- const rootScope = createScope({
9650
- current: (_options$defaultLocal = options == null ? void 0 : options.defaultLocale) != null ? _options$defaultLocal : 'en',
9651
- fallback: (_options$fallbackLoca = options == null ? void 0 : options.fallbackLocale) != null ? _options$fallbackLoca : 'en',
9652
- messages: (_options$messages = options == null ? void 0 : options.messages) != null ? _options$messages : {
9653
- en
9654
- }
9655
- });
9656
- if (!app) throw new Error('[Vuetify] Could not find default app instance');
9657
- app.provide(VuetifyLocaleSymbol, rootScope);
9658
- return rootScope;
9659
- },
9660
- getScope: () => {
9661
- const currentScope = inject(VuetifyLocaleSymbol);
9662
- if (!currentScope) throw new Error('[Vuetify] Could not find injected locale instance');
9663
- return currentScope;
9664
- },
9665
- createScope: options => {
9666
- const currentScope = inject(VuetifyLocaleSymbol);
9667
- if (!currentScope) throw new Error('[Vuetify] Could not find injected locale instance');
9668
- const newScope = createScope({
9669
- current: computed(() => {
9670
- var _options$locale;
9671
-
9672
- return (_options$locale = options == null ? void 0 : options.locale) != null ? _options$locale : currentScope.current.value;
9673
- }),
9674
- fallback: computed(() => {
9675
- var _options$locale2;
9676
-
9677
- return (_options$locale2 = options == null ? void 0 : options.locale) != null ? _options$locale2 : currentScope.fallback.value;
9678
- }),
9679
- messages: computed(() => {
9680
- var _options$messages2;
9681
-
9682
- return (_options$messages2 = options == null ? void 0 : options.messages) != null ? _options$messages2 : currentScope.messages.value;
9683
- })
9684
- });
9685
- provide(VuetifyLocaleSymbol, newScope);
9686
- return newScope;
9687
- }
9688
- };
9689
- }
9690
-
9691
9810
  const makeSelectProps = propsFactory({
9692
9811
  chips: Boolean,
9693
9812
  closableChips: Boolean,
@@ -9767,7 +9886,7 @@ const VSelect = genericComponent()({
9767
9886
 
9768
9887
  function onClickControl() {
9769
9888
  if (props.hideNoData && !items.value.length) return;
9770
- menu.value = true;
9889
+ menu.value = !menu.value;
9771
9890
  }
9772
9891
 
9773
9892
  function onKeydown(e) {
@@ -9814,7 +9933,6 @@ const VSelect = genericComponent()({
9814
9933
  "appendInnerIcon": props.menuIcon,
9815
9934
  "readonly": true,
9816
9935
  "onClick:clear": onClear,
9817
- "onClick:input": onClickControl,
9818
9936
  "onClick:control": onClickControl,
9819
9937
  "onBlur": () => menu.value = false,
9820
9938
  "onKeydown": onKeydown
@@ -9905,7 +10023,7 @@ const VSelect = genericComponent()({
9905
10023
  }
9906
10024
  });
9907
10025
  });
9908
- return useForwardRef({
10026
+ return forwardRefs({
9909
10027
  menu,
9910
10028
  select
9911
10029
  }, vTextFieldRef);
@@ -10041,7 +10159,6 @@ const VAutocomplete = genericComponent()({
10041
10159
  })
10042
10160
  },
10043
10161
  emits: {
10044
- 'click:clear': e => true,
10045
10162
  'update:search': val => true,
10046
10163
  'update:modelValue': val => true,
10047
10164
  'update:menu': val => true
@@ -10278,7 +10395,7 @@ const VAutocomplete = genericComponent()({
10278
10395
  }
10279
10396
  });
10280
10397
  });
10281
- return useForwardRef({
10398
+ return forwardRefs({
10282
10399
  isFocused,
10283
10400
  isPristine,
10284
10401
  menu,
@@ -11028,7 +11145,10 @@ const VCard = defineComponent({
11028
11145
  flat: Boolean,
11029
11146
  hover: Boolean,
11030
11147
  image: String,
11031
- link: Boolean,
11148
+ link: {
11149
+ type: Boolean,
11150
+ default: undefined
11151
+ },
11032
11152
  prependAvatar: String,
11033
11153
  prependIcon: IconValue,
11034
11154
  ripple: Boolean,
@@ -11089,10 +11209,12 @@ const VCard = defineComponent({
11089
11209
  roundedClasses
11090
11210
  } = useRounded(props);
11091
11211
  const link = useLink(props, attrs);
11212
+ const isLink = computed(() => props.link !== false && link.isLink.value);
11213
+ const isClickable = computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value));
11092
11214
  useRender(() => {
11093
11215
  var _slots$image, _slots$image2, _slots$text, _slots$text2, _slots$default;
11094
11216
 
11095
- const Tag = link.isLink.value ? 'a' : props.tag;
11217
+ const Tag = isLink.value ? 'a' : props.tag;
11096
11218
  const hasTitle = !!(slots.title || props.title);
11097
11219
  const hasSubtitle = !!(slots.subtitle || props.subtitle);
11098
11220
  const hasHeader = hasTitle || hasSubtitle;
@@ -11101,17 +11223,16 @@ const VCard = defineComponent({
11101
11223
  const hasImage = !!(slots.image || props.image);
11102
11224
  const hasCardItem = hasHeader || hasPrepend || hasAppend;
11103
11225
  const hasText = !!(slots.text || props.text);
11104
- const isClickable = !props.disabled && (link.isClickable.value || props.link);
11105
11226
  return withDirectives(createVNode(Tag, {
11106
11227
  "class": ['v-card', {
11107
11228
  'v-card--disabled': props.disabled,
11108
11229
  'v-card--flat': props.flat,
11109
11230
  'v-card--hover': props.hover && !(props.disabled || props.flat),
11110
- 'v-card--link': isClickable
11231
+ 'v-card--link': isClickable.value
11111
11232
  }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value],
11112
11233
  "style": [colorStyles.value, dimensionStyles.value, locationStyles.value],
11113
11234
  "href": link.href.value,
11114
- "onClick": isClickable && link.navigate
11235
+ "onClick": isClickable.value && link.navigate
11115
11236
  }, {
11116
11237
  default: () => [hasImage && createVNode(VDefaultsProvider, {
11117
11238
  "key": "image",
@@ -11151,8 +11272,8 @@ const VCard = defineComponent({
11151
11272
  default: () => [(_slots$text = (_slots$text2 = slots.text) == null ? void 0 : _slots$text2.call(slots)) != null ? _slots$text : props.text]
11152
11273
  }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots), slots.actions && createVNode(VCardActions, null, {
11153
11274
  default: slots.actions
11154
- }), genOverlays(isClickable, 'v-card')]
11155
- }), [[resolveDirective("ripple"), isClickable]]);
11275
+ }), genOverlays(isClickable.value, 'v-card')]
11276
+ }), [[resolveDirective("ripple"), isClickable.value]]);
11156
11277
  });
11157
11278
  return {};
11158
11279
  }
@@ -13240,7 +13361,7 @@ const grey = Object.freeze({
13240
13361
  const shades = Object.freeze({
13241
13362
  black: '#000000',
13242
13363
  white: '#ffffff',
13243
- transparent: 'transparent'
13364
+ transparent: '#ffffff00'
13244
13365
  });
13245
13366
  var colors = Object.freeze({
13246
13367
  red,
@@ -13849,7 +13970,7 @@ const VCombobox = genericComponent()({
13849
13970
  }
13850
13971
  });
13851
13972
  });
13852
- return useForwardRef({
13973
+ return forwardRefs({
13853
13974
  isFocused,
13854
13975
  isPristine,
13855
13976
  menu,
@@ -13911,7 +14032,7 @@ const VDialog = genericComponent()({
13911
14032
  const after = e.target;
13912
14033
 
13913
14034
  if (before !== after && (_overlay$value = overlay.value) != null && _overlay$value.contentEl && // We're the topmost dialog
13914
- (_overlay$value2 = overlay.value) != null && _overlay$value2.isTop && // It isn't the document or the dialog body
14035
+ (_overlay$value2 = overlay.value) != null && _overlay$value2.globalTop && // It isn't the document or the dialog body
13915
14036
  ![document, overlay.value.contentEl].includes(after) && // It isn't inside the dialog body
13916
14037
  !overlay.value.contentEl.contains(after)) {
13917
14038
  const focusable = [...overlay.value.contentEl.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')].filter(el => !el.hasAttribute('disabled'));
@@ -13973,7 +14094,7 @@ const VDialog = genericComponent()({
13973
14094
  default: slots.default,
13974
14095
  activator: slots.activator
13975
14096
  }));
13976
- return useForwardRef({}, overlay);
14097
+ return forwardRefs({}, overlay);
13977
14098
  }
13978
14099
 
13979
14100
  });
@@ -14425,7 +14546,7 @@ const VFileInput = defineComponent({
14425
14546
  } : undefined
14426
14547
  });
14427
14548
  });
14428
- return useForwardRef({}, vInputRef, vFieldRef, inputRef);
14549
+ return forwardRefs({}, vInputRef, vFieldRef, inputRef);
14429
14550
  }
14430
14551
 
14431
14552
  });
@@ -14556,7 +14677,7 @@ const VForm = defineComponent({
14556
14677
  "onSubmit": onSubmit
14557
14678
  }, [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, form)]);
14558
14679
  });
14559
- return useForwardRef(form, formRef);
14680
+ return forwardRefs(form, formRef);
14560
14681
  }
14561
14682
 
14562
14683
  });
@@ -14654,6 +14775,7 @@ function breakpointClass$1(type, prop, val) {
14654
14775
  return className.toLowerCase();
14655
14776
  }
14656
14777
 
14778
+ const ALIGN_SELF_VALUES = ['auto', 'start', 'end', 'center', 'baseline', 'stretch'];
14657
14779
  const VCol = defineComponent({
14658
14780
  name: 'VCol',
14659
14781
  props: {
@@ -14675,7 +14797,7 @@ const VCol = defineComponent({
14675
14797
  alignSelf: {
14676
14798
  type: String,
14677
14799
  default: null,
14678
- validator: str => ['auto', 'start', 'end', 'center', 'baseline', 'stretch'].includes(str)
14800
+ validator: str => ALIGN_SELF_VALUES.includes(str)
14679
14801
  },
14680
14802
  ...makeTagProps()
14681
14803
  },
@@ -14724,6 +14846,7 @@ const VCol = defineComponent({
14724
14846
  const breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl']; // no xs
14725
14847
 
14726
14848
  const ALIGNMENT = ['start', 'end', 'center'];
14849
+ const SPACE = ['space-between', 'space-around', 'space-evenly'];
14727
14850
 
14728
14851
  function makeRowProps(prefix, def) {
14729
14852
  return breakpoints.reduce((props, val) => {
@@ -14732,23 +14855,27 @@ function makeRowProps(prefix, def) {
14732
14855
  }, {});
14733
14856
  }
14734
14857
 
14735
- const alignValidator = str => [...ALIGNMENT, 'baseline', 'stretch'].includes(str);
14858
+ const ALIGN_VALUES = [...ALIGNMENT, 'baseline', 'stretch'];
14859
+
14860
+ const alignValidator = str => ALIGN_VALUES.includes(str);
14736
14861
 
14737
14862
  const alignProps = makeRowProps('align', () => ({
14738
14863
  type: String,
14739
14864
  default: null,
14740
14865
  validator: alignValidator
14741
14866
  }));
14867
+ const JUSTIFY_VALUES = [...ALIGNMENT, ...SPACE];
14742
14868
 
14743
- const justifyValidator = str => [...ALIGNMENT, 'space-between', 'space-around'].includes(str);
14869
+ const justifyValidator = str => JUSTIFY_VALUES.includes(str);
14744
14870
 
14745
14871
  const justifyProps = makeRowProps('justify', () => ({
14746
14872
  type: String,
14747
14873
  default: null,
14748
14874
  validator: justifyValidator
14749
14875
  }));
14876
+ const ALIGN_CONTENT_VALUES = [...ALIGNMENT, ...SPACE, 'stretch'];
14750
14877
 
14751
- const alignContentValidator = str => [...ALIGNMENT, 'space-between', 'space-around', 'stretch'].includes(str);
14878
+ const alignContentValidator = str => ALIGN_CONTENT_VALUES.includes(str);
14752
14879
 
14753
14880
  const alignContentProps = makeRowProps('alignContent', () => ({
14754
14881
  type: String,
@@ -15141,9 +15268,12 @@ const VLocaleProvider = defineComponent({
15141
15268
 
15142
15269
  const VMain = defineComponent({
15143
15270
  name: 'VMain',
15144
- props: makeTagProps({
15145
- tag: 'main'
15146
- }),
15271
+ props: {
15272
+ scrollable: Boolean,
15273
+ ...makeTagProps({
15274
+ tag: 'main'
15275
+ })
15276
+ },
15147
15277
 
15148
15278
  setup(props, _ref) {
15149
15279
  let {
@@ -15156,15 +15286,17 @@ const VMain = defineComponent({
15156
15286
  ssrBootStyles
15157
15287
  } = useSsrBoot();
15158
15288
  useRender(() => {
15159
- var _slots$default;
15289
+ var _slots$default, _slots$default2;
15160
15290
 
15161
15291
  return createVNode(props.tag, {
15162
- "class": "v-main",
15292
+ "class": ['v-main', {
15293
+ 'v-main--scrollable': props.scrollable
15294
+ }],
15163
15295
  "style": [mainStyles.value, ssrBootStyles.value]
15164
15296
  }, {
15165
- default: () => [createVNode("div", {
15166
- "class": "v-main__wrap"
15167
- }, [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)])]
15297
+ default: () => [props.scrollable ? createVNode("div", {
15298
+ "class": "v-main__scroller"
15299
+ }, [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)]) : (_slots$default2 = slots.default) == null ? void 0 : _slots$default2.call(slots)]
15168
15300
  });
15169
15301
  });
15170
15302
  return {};
@@ -15172,6 +15304,76 @@ const VMain = defineComponent({
15172
15304
 
15173
15305
  });
15174
15306
 
15307
+ function useSticky(_ref) {
15308
+ let {
15309
+ rootEl,
15310
+ isSticky,
15311
+ layoutItemStyles
15312
+ } = _ref;
15313
+ const isStuck = ref(false);
15314
+ const stuckPosition = ref(0);
15315
+ const stickyStyles = computed(() => {
15316
+ const side = typeof isStuck.value === 'boolean' ? 'top' : isStuck.value;
15317
+ return [isSticky.value ? {
15318
+ top: 'auto',
15319
+ bottom: 'auto',
15320
+ height: undefined
15321
+ } : undefined, isStuck.value ? {
15322
+ [side]: convertToUnit(stuckPosition.value)
15323
+ } : {
15324
+ top: layoutItemStyles.value.top
15325
+ }];
15326
+ });
15327
+ onMounted(() => {
15328
+ watch(isSticky, val => {
15329
+ if (val) {
15330
+ window.addEventListener('scroll', onScroll, {
15331
+ passive: true
15332
+ });
15333
+ } else {
15334
+ window.removeEventListener('scroll', onScroll);
15335
+ }
15336
+ }, {
15337
+ immediate: true
15338
+ });
15339
+ });
15340
+ onBeforeUnmount(() => {
15341
+ document.removeEventListener('scroll', onScroll);
15342
+ });
15343
+ let lastScrollTop = 0;
15344
+
15345
+ function onScroll() {
15346
+ var _layoutItemStyles$val;
15347
+
15348
+ const direction = lastScrollTop > window.scrollY ? 'up' : 'down';
15349
+ const rect = rootEl.value.getBoundingClientRect();
15350
+ const layoutTop = parseFloat((_layoutItemStyles$val = layoutItemStyles.value.top) != null ? _layoutItemStyles$val : 0);
15351
+ const top = window.scrollY - Math.max(0, stuckPosition.value - layoutTop);
15352
+ const bottom = rect.height + Math.max(stuckPosition.value, layoutTop) - window.scrollY - window.innerHeight;
15353
+
15354
+ if (rect.height < window.innerHeight - layoutTop) {
15355
+ isStuck.value = 'top';
15356
+ stuckPosition.value = layoutTop;
15357
+ } else if (direction === 'up' && isStuck.value === 'bottom' || direction === 'down' && isStuck.value === 'top') {
15358
+ stuckPosition.value = window.scrollY + rect.top;
15359
+ isStuck.value = true;
15360
+ } else if (direction === 'down' && bottom <= 0) {
15361
+ stuckPosition.value = 0;
15362
+ isStuck.value = 'bottom';
15363
+ } else if (direction === 'up' && top <= 0) {
15364
+ stuckPosition.value = rect.top + top;
15365
+ isStuck.value = 'top';
15366
+ }
15367
+
15368
+ lastScrollTop = window.scrollY;
15369
+ }
15370
+
15371
+ return {
15372
+ isStuck,
15373
+ stickyStyles
15374
+ };
15375
+ }
15376
+
15175
15377
  const HORIZON = 100; // ms
15176
15378
 
15177
15379
  const HISTORY = 20; // number of samples to keep
@@ -15439,6 +15641,7 @@ function oops() {
15439
15641
  throw new Error();
15440
15642
  }
15441
15643
 
15644
+ const locations = ['start', 'end', 'left', 'right', 'bottom'];
15442
15645
  const VNavigationDrawer = defineComponent({
15443
15646
  name: 'VNavigationDrawer',
15444
15647
  props: {
@@ -15455,7 +15658,11 @@ const VNavigationDrawer = defineComponent({
15455
15658
  rail: Boolean,
15456
15659
  railWidth: {
15457
15660
  type: [Number, String],
15458
- default: 72
15661
+ default: 56
15662
+ },
15663
+ scrim: {
15664
+ type: [String, Boolean],
15665
+ default: true
15459
15666
  },
15460
15667
  image: String,
15461
15668
  temporary: Boolean,
@@ -15466,9 +15673,10 @@ const VNavigationDrawer = defineComponent({
15466
15673
  },
15467
15674
  location: {
15468
15675
  type: String,
15469
- default: 'left',
15470
- validator: value => ['left', 'right', 'bottom'].includes(value)
15676
+ default: 'start',
15677
+ validator: value => locations.includes(value)
15471
15678
  },
15679
+ sticky: Boolean,
15472
15680
  ...makeBorderProps(),
15473
15681
  ...makeElevationProps(),
15474
15682
  ...makeLayoutItemProps(),
@@ -15487,6 +15695,9 @@ const VNavigationDrawer = defineComponent({
15487
15695
  attrs,
15488
15696
  slots
15489
15697
  } = _ref;
15698
+ const {
15699
+ isRtl
15700
+ } = useRtl();
15490
15701
  const {
15491
15702
  themeClasses
15492
15703
  } = provideTheme(props);
@@ -15508,14 +15719,19 @@ const VNavigationDrawer = defineComponent({
15508
15719
  } = useRounded(props);
15509
15720
  const router = useRouter();
15510
15721
  const isActive = useProxiedModel(props, 'modelValue', null, v => !!v);
15511
- const isHovering = ref(false);
15512
15722
  const {
15513
15723
  ssrBootStyles
15514
15724
  } = useSsrBoot();
15725
+ const rootEl = ref();
15726
+ const isHovering = ref(false);
15515
15727
  const width = computed(() => {
15516
15728
  return props.rail && props.expandOnHover && isHovering.value ? Number(props.width) : Number(props.rail ? props.railWidth : props.width);
15517
15729
  });
15730
+ const location = computed(() => {
15731
+ return toPhysical(props.location, isRtl.value);
15732
+ });
15518
15733
  const isTemporary = computed(() => !props.permanent && (mobile.value || props.temporary));
15734
+ const isSticky = computed(() => props.sticky && !isTemporary.value && location.value !== 'bottom');
15519
15735
 
15520
15736
  if (!props.disableResizeWatcher) {
15521
15737
  watch(isTemporary, val => !props.permanent && (isActive.value = !val));
@@ -15532,7 +15748,6 @@ const VNavigationDrawer = defineComponent({
15532
15748
  if (props.modelValue != null || isTemporary.value) return;
15533
15749
  isActive.value = props.permanent || !mobile.value;
15534
15750
  });
15535
- const rootEl = ref();
15536
15751
  const {
15537
15752
  isDragging,
15538
15753
  dragProgress,
@@ -15542,7 +15757,7 @@ const VNavigationDrawer = defineComponent({
15542
15757
  isTemporary,
15543
15758
  width,
15544
15759
  touchless: toRef(props, 'touchless'),
15545
- position: toRef(props, 'location')
15760
+ position: location
15546
15761
  });
15547
15762
  const layoutSize = computed(() => {
15548
15763
  const size = isTemporary.value ? 0 : props.rail && props.expandOnHover ? Number(props.railWidth) : width.value;
@@ -15555,13 +15770,25 @@ const VNavigationDrawer = defineComponent({
15555
15770
  } = useLayoutItem({
15556
15771
  id: props.name,
15557
15772
  order: computed(() => parseInt(props.order, 10)),
15558
- position: toRef(props, 'location'),
15773
+ position: location,
15559
15774
  layoutSize,
15560
15775
  elementSize: width,
15561
15776
  active: computed(() => isActive.value || isDragging.value),
15562
15777
  disableTransitions: computed(() => isDragging.value),
15563
- absolute: toRef(props, 'absolute')
15778
+ absolute: computed(() => // eslint-disable-next-line @typescript-eslint/no-use-before-define
15779
+ props.absolute || isSticky.value && typeof isStuck.value !== 'string')
15780
+ });
15781
+ const {
15782
+ isStuck,
15783
+ stickyStyles
15784
+ } = useSticky({
15785
+ rootEl,
15786
+ isSticky,
15787
+ layoutItemStyles
15564
15788
  });
15789
+ const scrimColor = useBackgroundColor(computed(() => {
15790
+ return typeof props.scrim === 'string' ? props.scrim : null;
15791
+ }));
15565
15792
  const scrimStyles = computed(() => ({ ...(isDragging.value ? {
15566
15793
  opacity: dragProgress.value * 0.2,
15567
15794
  transition: 'none'
@@ -15574,6 +15801,11 @@ const VNavigationDrawer = defineComponent({
15574
15801
  } : undefined),
15575
15802
  ...layoutItemScrimStyles.value
15576
15803
  }));
15804
+ provideDefaults({
15805
+ VList: {
15806
+ bgColor: 'transparent'
15807
+ }
15808
+ });
15577
15809
  useRender(() => {
15578
15810
  var _slots$image, _slots$prepend, _slots$default, _slots$append;
15579
15811
 
@@ -15582,18 +15814,16 @@ const VNavigationDrawer = defineComponent({
15582
15814
  "ref": rootEl,
15583
15815
  "onMouseenter": () => isHovering.value = true,
15584
15816
  "onMouseleave": () => isHovering.value = false,
15585
- "class": ['v-navigation-drawer', {
15586
- 'v-navigation-drawer--bottom': props.location === 'bottom',
15587
- 'v-navigation-drawer--end': props.location === 'right',
15817
+ "class": ['v-navigation-drawer', `v-navigation-drawer--${location.value}`, {
15588
15818
  'v-navigation-drawer--expand-on-hover': props.expandOnHover,
15589
15819
  'v-navigation-drawer--floating': props.floating,
15590
15820
  'v-navigation-drawer--is-hovering': isHovering.value,
15591
15821
  'v-navigation-drawer--rail': props.rail,
15592
- 'v-navigation-drawer--start': props.location === 'left',
15593
15822
  'v-navigation-drawer--temporary': isTemporary.value,
15594
- 'v-navigation-drawer--active': isActive.value
15823
+ 'v-navigation-drawer--active': isActive.value,
15824
+ 'v-navigation-drawer--sticky': isSticky.value
15595
15825
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
15596
- "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value]
15826
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value]
15597
15827
  }, attrs), {
15598
15828
  default: () => [hasImage && createVNode("div", {
15599
15829
  "key": "image",
@@ -15613,14 +15843,16 @@ const VNavigationDrawer = defineComponent({
15613
15843
  }), createVNode(Transition, {
15614
15844
  "name": "fade-transition"
15615
15845
  }, {
15616
- default: () => [isTemporary.value && (isDragging.value || isActive.value) && createVNode("div", {
15617
- "class": "v-navigation-drawer__scrim",
15618
- "style": scrimStyles.value,
15846
+ default: () => [isTemporary.value && (isDragging.value || isActive.value) && !!props.scrim && createVNode("div", {
15847
+ "class": ['v-navigation-drawer__scrim', scrimColor.backgroundColorClasses.value],
15848
+ "style": [scrimStyles.value, scrimColor.backgroundColorStyles.value],
15619
15849
  "onClick": () => isActive.value = false
15620
15850
  }, null)]
15621
15851
  })]);
15622
15852
  });
15623
- return {};
15853
+ return {
15854
+ isStuck
15855
+ };
15624
15856
  }
15625
15857
 
15626
15858
  });
@@ -15801,7 +16033,7 @@ const VPagination = defineComponent({
15801
16033
  return length.value;
15802
16034
  });
15803
16035
  const range = computed(() => {
15804
- if (length.value <= 0) return [];
16036
+ if (length.value <= 0 || isNaN(length.value) || length.value > Number.MAX_SAFE_INTEGER) return [];
15805
16037
  if (totalVisible.value <= 2) return [page.value];
15806
16038
 
15807
16039
  if (length.value <= totalVisible.value) {
@@ -16065,27 +16297,20 @@ const VParallax = defineComponent({
16065
16297
 
16066
16298
  const VRadio = defineComponent({
16067
16299
  name: 'VRadio',
16068
- props: {
16069
- falseIcon: {
16070
- type: IconValue,
16071
- default: '$radioOff'
16072
- },
16073
- trueIcon: {
16074
- type: IconValue,
16075
- default: '$radioOn'
16076
- }
16300
+ props: { ...makeSelectionControlProps({
16301
+ falseIcon: '$radioOff',
16302
+ trueIcon: '$radioOn'
16303
+ })
16077
16304
  },
16078
16305
 
16079
16306
  setup(props, _ref) {
16080
16307
  let {
16081
16308
  slots
16082
16309
  } = _ref;
16083
- useRender(() => createVNode(VSelectionControl, {
16310
+ useRender(() => createVNode(VSelectionControl, mergeProps(props, {
16084
16311
  "class": "v-radio",
16085
- "trueIcon": props.trueIcon,
16086
- "falseIcon": props.falseIcon,
16087
16312
  "type": "radio"
16088
- }, slots));
16313
+ }), slots));
16089
16314
  return {};
16090
16315
  }
16091
16316
 
@@ -16114,6 +16339,9 @@ const VRadioGroup = defineComponent({
16114
16339
  default: 'radio'
16115
16340
  }
16116
16341
  },
16342
+ emits: {
16343
+ 'update:modelValue': val => true
16344
+ },
16117
16345
 
16118
16346
  setup(props, _ref) {
16119
16347
  let {
@@ -16122,6 +16350,13 @@ const VRadioGroup = defineComponent({
16122
16350
  } = _ref;
16123
16351
  const uid = getUid();
16124
16352
  const id = computed(() => props.id || `radio-group-${uid}`);
16353
+ const model = useProxiedModel(props, 'modelValue');
16354
+ provideDefaults({
16355
+ VRadio: {
16356
+ color: toRef(props, 'color'),
16357
+ density: toRef(props, 'density')
16358
+ }
16359
+ });
16125
16360
  useRender(() => {
16126
16361
  const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
16127
16362
  const [inputProps, _1] = filterInputProps(props);
@@ -16135,6 +16370,8 @@ const VRadioGroup = defineComponent({
16135
16370
  return createVNode(VInput, mergeProps({
16136
16371
  "class": "v-radio-group"
16137
16372
  }, inputAttrs, inputProps, {
16373
+ "modelValue": model.value,
16374
+ "onUpdate:modelValue": $event => model.value = $event,
16138
16375
  "id": id.value
16139
16376
  }), { ...slots,
16140
16377
  default: _ref2 => {
@@ -16154,7 +16391,10 @@ const VRadioGroup = defineComponent({
16154
16391
  "type": props.type,
16155
16392
  "disabled": isDisabled.value,
16156
16393
  "readonly": isReadonly.value
16157
- }, controlAttrs), slots)]);
16394
+ }, controlAttrs, {
16395
+ "modelValue": model.value,
16396
+ "onUpdate:modelValue": $event => model.value = $event
16397
+ }), slots)]);
16158
16398
  }
16159
16399
  });
16160
16400
  });
@@ -17031,7 +17271,6 @@ const VSlideGroupItem = defineComponent({
17031
17271
  const VSnackbar = defineComponent({
17032
17272
  name: 'VSnackbar',
17033
17273
  props: {
17034
- app: Boolean,
17035
17274
  contentClass: {
17036
17275
  type: String,
17037
17276
  default: ''
@@ -17113,6 +17352,7 @@ const VSnackbar = defineComponent({
17113
17352
  "contentProps": {
17114
17353
  style: locationStyles.value
17115
17354
  },
17355
+ "contentClass": props.contentClass,
17116
17356
  "persistent": true,
17117
17357
  "noClickAnimation": true,
17118
17358
  "scrim": false,
@@ -17124,7 +17364,7 @@ const VSnackbar = defineComponent({
17124
17364
  "onPointerenter": onPointerenter,
17125
17365
  "onPointerleave": startTimeout
17126
17366
  }, [genOverlays(false, 'v-snackbar'), slots.default && createVNode("div", {
17127
- "class": ['v-snackbar__content', props.contentClass],
17367
+ "class": "v-snackbar__content",
17128
17368
  "role": "status",
17129
17369
  "aria-live": "polite"
17130
17370
  }, [slots.default()]), slots.actions && createVNode(VDefaultsProvider, {
@@ -17141,7 +17381,7 @@ const VSnackbar = defineComponent({
17141
17381
  })])],
17142
17382
  activator: slots.activator
17143
17383
  }));
17144
- return useForwardRef({}, overlay);
17384
+ return forwardRefs({}, overlay);
17145
17385
  }
17146
17386
 
17147
17387
  });
@@ -17627,7 +17867,7 @@ const VTextarea = defineComponent({
17627
17867
  const vInputRef = ref();
17628
17868
  const vFieldRef = ref();
17629
17869
  const isFocused = ref(false);
17630
- const controlHeight = ref('auto');
17870
+ const controlHeight = ref('');
17631
17871
  const textareaRef = ref();
17632
17872
  const isActive = computed(() => isFocused.value || props.persistentPlaceholder);
17633
17873
  const messages = computed(() => {
@@ -17667,14 +17907,15 @@ const VTextarea = defineComponent({
17667
17907
  function calculateInputHeight() {
17668
17908
  if (!props.autoGrow) return;
17669
17909
  nextTick(() => {
17670
- if (!sizerRef.value) return;
17910
+ if (!sizerRef.value || !vFieldRef.value) return;
17671
17911
  const style = getComputedStyle(sizerRef.value);
17672
- const padding = parseFloat(style.getPropertyValue('--v-field-padding-top')) + parseFloat(style.getPropertyValue('--v-field-padding-bottom'));
17912
+ const fieldStyle = getComputedStyle(vFieldRef.value.$el);
17913
+ const padding = parseFloat(style.getPropertyValue('--v-field-padding-top')) + parseFloat(style.getPropertyValue('--v-input-padding-top')) + parseFloat(style.getPropertyValue('--v-field-padding-bottom'));
17673
17914
  const height = sizerRef.value.scrollHeight;
17674
17915
  const lineHeight = parseFloat(style.lineHeight);
17675
- const minHeight = parseFloat(props.rows) * lineHeight + padding;
17916
+ const minHeight = Math.max(parseFloat(props.rows) * lineHeight + padding, parseFloat(fieldStyle.getPropertyValue('--v-input-control-height')));
17676
17917
  const maxHeight = parseFloat(props.maxRows) * lineHeight + padding || Infinity;
17677
- controlHeight.value = convertToUnit(Math.min(maxHeight, Math.max(minHeight, height != null ? height : 0)));
17918
+ controlHeight.value = convertToUnit(clamp(height != null ? height : 0, minHeight, maxHeight));
17678
17919
  });
17679
17920
  }
17680
17921
 
@@ -17682,6 +17923,7 @@ const VTextarea = defineComponent({
17682
17923
  watch(model, calculateInputHeight);
17683
17924
  watch(() => props.rows, calculateInputHeight);
17684
17925
  watch(() => props.maxRows, calculateInputHeight);
17926
+ watch(() => props.density, calculateInputHeight);
17685
17927
  let observer;
17686
17928
  watch(sizerRef, val => {
17687
17929
  if (val) {
@@ -17708,11 +17950,14 @@ const VTextarea = defineComponent({
17708
17950
  }] = filterInputProps(props);
17709
17951
  const [fieldProps] = filterFieldProps(props);
17710
17952
  return createVNode(VInput, mergeProps({
17953
+ "ref": vInputRef,
17711
17954
  "modelValue": model.value,
17712
17955
  "onUpdate:modelValue": $event => model.value = $event,
17713
- "class": ['v-textarea', {
17956
+ "class": ['v-textarea v-text-field', {
17714
17957
  'v-textarea--prefixed': props.prefix,
17715
17958
  'v-textarea--suffixed': props.suffix,
17959
+ 'v-text-field--prefixed': props.prefix,
17960
+ 'v-text-field--suffixed': props.suffix,
17716
17961
  'v-textarea--auto-grow': props.autoGrow,
17717
17962
  'v-textarea--no-resize': props.noResize || props.autoGrow
17718
17963
  }]
@@ -17727,8 +17972,9 @@ const VTextarea = defineComponent({
17727
17972
  isValid
17728
17973
  } = _ref2;
17729
17974
  return createVNode(VField, mergeProps({
17975
+ "ref": vFieldRef,
17730
17976
  "style": {
17731
- '--v-input-control-height': controlHeight.value
17977
+ '--v-textarea-control-height': controlHeight.value
17732
17978
  },
17733
17979
  "onClick:control": onControlClick,
17734
17980
  "onClick:clear": onClear,
@@ -17788,7 +18034,7 @@ const VTextarea = defineComponent({
17788
18034
  } : undefined
17789
18035
  });
17790
18036
  });
17791
- return useForwardRef({}, vInputRef, vFieldRef, textareaRef);
18037
+ return forwardRefs({}, vInputRef, vFieldRef, textareaRef);
17792
18038
  }
17793
18039
 
17794
18040
  });
@@ -17872,7 +18118,8 @@ const VTimeline = defineComponent({
17872
18118
  lineColor: toRef(props, 'lineColor')
17873
18119
  },
17874
18120
  VTimelineItem: {
17875
- density: toRef(props, 'density')
18121
+ density: toRef(props, 'density'),
18122
+ lineInset: toRef(props, 'lineInset')
17876
18123
  }
17877
18124
  });
17878
18125
  const sideClasses = computed(() => {
@@ -17897,12 +18144,11 @@ const VTimeline = defineComponent({
17897
18144
  }
17898
18145
  });
17899
18146
  useRender(() => createVNode(props.tag, {
17900
- "class": ['v-timeline', `v-timeline--${props.direction}`, `v-timeline--align-${props.align}`, !props.lineInset && truncateClasses.value, {
18147
+ "class": ['v-timeline', `v-timeline--${props.direction}`, `v-timeline--align-${props.align}`, truncateClasses.value, {
17901
18148
  'v-timeline--inset-line': !!props.lineInset
17902
18149
  }, themeClasses.value, densityClasses.value, sideClasses.value],
17903
18150
  "style": {
17904
- '--v-timeline-line-thickness': convertToUnit(props.lineThickness),
17905
- '--v-timeline-line-inset': convertToUnit(props.lineInset)
18151
+ '--v-timeline-line-thickness': convertToUnit(props.lineThickness)
17906
18152
  }
17907
18153
  }, slots));
17908
18154
  return {};
@@ -17960,7 +18206,10 @@ const VTimelineDivider = defineComponent({
17960
18206
  "class": ['v-timeline-divider', {
17961
18207
  'v-timeline-divider--fill-dot': props.fillDot
17962
18208
  }]
17963
- }, [!props.hideDot && createVNode("div", {
18209
+ }, [createVNode("div", {
18210
+ "class": ['v-timeline-divider__before', lineColorClasses.value],
18211
+ "style": lineColorStyles.value
18212
+ }, null), !props.hideDot && createVNode("div", {
17964
18213
  "key": "dot",
17965
18214
  "class": ['v-timeline-divider__dot', elevationClasses.value, roundedClasses.value, sizeClasses.value],
17966
18215
  "style": sizeStyles.value
@@ -17968,7 +18217,7 @@ const VTimelineDivider = defineComponent({
17968
18217
  "class": ['v-timeline-divider__inner-dot', backgroundColorClasses.value, roundedClasses.value],
17969
18218
  "style": backgroundColorStyles.value
17970
18219
  }, [(_slots$default = (_slots$default2 = slots.default) == null ? void 0 : _slots$default2.call(slots)) != null ? _slots$default : props.icon ? createVNode(VIcon, null, null) : undefined])]), createVNode("div", {
17971
- "class": ['v-timeline-divider__line', lineColorClasses.value],
18220
+ "class": ['v-timeline-divider__after', lineColorClasses.value],
17972
18221
  "style": lineColorStyles.value
17973
18222
  }, null)]);
17974
18223
  });
@@ -17990,6 +18239,7 @@ const VTimelineItem = defineComponent({
17990
18239
  },
17991
18240
  icon: IconValue,
17992
18241
  iconColor: String,
18242
+ lineInset: [Number, String],
17993
18243
  ...makeRoundedProps(),
17994
18244
  ...makeElevationProps(),
17995
18245
  ...makeSizeProps(),
@@ -18022,7 +18272,8 @@ const VTimelineItem = defineComponent({
18022
18272
  'v-timeline-item--fill-dot': props.fillDot
18023
18273
  }],
18024
18274
  "style": {
18025
- '--v-timeline-dot-size': convertToUnit(dotSize.value)
18275
+ '--v-timeline-dot-size': convertToUnit(dotSize.value),
18276
+ '--v-timeline-line-inset': props.lineInset ? `calc(var(--v-timeline-dot-size) / 2 + ${convertToUnit(props.lineInset)})` : convertToUnit(0)
18026
18277
  }
18027
18278
  }, [createVNode("div", {
18028
18279
  "class": "v-timeline-item__body",
@@ -18129,7 +18380,7 @@ const VTooltip = genericComponent()({
18129
18380
  return (_slots$default = (_slots$default2 = slots.default) == null ? void 0 : _slots$default2.call(slots, ...args)) != null ? _slots$default : props.text;
18130
18381
  }
18131
18382
  }));
18132
- return useForwardRef({}, overlay);
18383
+ return forwardRefs({}, overlay);
18133
18384
  }
18134
18385
 
18135
18386
  });
@@ -18535,7 +18786,7 @@ const createVuetify = function () {
18535
18786
  ...options
18536
18787
  });
18537
18788
  };
18538
- const version = "3.0.0-beta.6";
18789
+ const version = "3.0.0-beta.9";
18539
18790
 
18540
- export { components, createVuetify, directives, provideRtl, useDisplay, useLayout, useRtl, useTheme, version };
18791
+ export { components, createVuetify, directives, provideRtl, useDisplay, useLayout, useLocale, useRtl, useTheme, version };
18541
18792
  //# sourceMappingURL=vuetify.esm.js.map