vuetify 3.1.2 → 3.1.3

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 (105) hide show
  1. package/dist/json/attributes.json +450 -450
  2. package/dist/json/importMap.json +44 -44
  3. package/dist/json/tags.json +1 -1
  4. package/dist/json/web-types.json +815 -805
  5. package/dist/vuetify-labs.css +250 -246
  6. package/dist/vuetify-labs.d.ts +205 -174
  7. package/dist/vuetify-labs.esm.js +244 -170
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +243 -169
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +29 -25
  12. package/dist/vuetify.d.ts +206 -186
  13. package/dist/vuetify.esm.js +221 -162
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +220 -161
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +700 -692
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/blueprints/index.d.ts +2 -2
  21. package/lib/blueprints/md1.d.ts +2 -2
  22. package/lib/blueprints/md2.d.ts +2 -2
  23. package/lib/blueprints/md3.d.ts +2 -2
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs +3 -2
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  26. package/lib/components/VAutocomplete/index.d.ts +43 -20
  27. package/lib/components/VBtn/VBtn.mjs +8 -3
  28. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  29. package/lib/components/VCombobox/VCombobox.mjs +3 -3
  30. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  31. package/lib/components/VCombobox/index.d.ts +43 -20
  32. package/lib/components/VDefaultsProvider/index.d.ts +5 -4
  33. package/lib/components/VDialog/VDialog.mjs +6 -5
  34. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  35. package/lib/components/VDialog/index.d.ts +57 -34
  36. package/lib/components/VDivider/VDivider.mjs +6 -6
  37. package/lib/components/VDivider/VDivider.mjs.map +1 -1
  38. package/lib/components/VField/VField.mjs +28 -26
  39. package/lib/components/VField/VField.mjs.map +1 -1
  40. package/lib/components/VFileInput/VFileInput.mjs +7 -4
  41. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  42. package/lib/components/VForm/index.d.ts +0 -3
  43. package/lib/components/VList/VList.mjs +4 -1
  44. package/lib/components/VList/VList.mjs.map +1 -1
  45. package/lib/components/VList/VListItem.mjs +29 -19
  46. package/lib/components/VList/VListItem.mjs.map +1 -1
  47. package/lib/components/VMenu/VMenu.mjs +6 -5
  48. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  49. package/lib/components/VMenu/index.d.ts +57 -34
  50. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +4 -0
  51. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +1 -1
  52. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  53. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +4 -0
  54. package/lib/components/VNavigationDrawer/index.d.ts +3 -3
  55. package/lib/components/VNavigationDrawer/touch.mjs +7 -6
  56. package/lib/components/VNavigationDrawer/touch.mjs.map +1 -1
  57. package/lib/components/VOverlay/index.d.ts +34 -11
  58. package/lib/components/VOverlay/locationStrategies.mjs +40 -29
  59. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  60. package/lib/components/VOverlay/scrollStrategies.mjs +25 -16
  61. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  62. package/lib/components/VPagination/VPagination.mjs +1 -1
  63. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  64. package/lib/components/VSelect/VSelect.mjs +3 -4
  65. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  66. package/lib/components/VSelect/index.d.ts +43 -20
  67. package/lib/components/VSnackbar/index.d.ts +42 -19
  68. package/lib/components/VTable/VTable.css +4 -4
  69. package/lib/components/VTable/VTable.sass +2 -2
  70. package/lib/components/VTooltip/VTooltip.mjs +4 -3
  71. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  72. package/lib/components/VTooltip/index.d.ts +57 -34
  73. package/lib/components/index.d.ts +195 -174
  74. package/lib/composables/defaults.mjs +1 -1
  75. package/lib/composables/defaults.mjs.map +1 -1
  76. package/lib/composables/form.mjs +0 -1
  77. package/lib/composables/form.mjs.map +1 -1
  78. package/lib/composables/toggleScope.mjs +14 -7
  79. package/lib/composables/toggleScope.mjs.map +1 -1
  80. package/lib/entry-bundler.mjs +1 -1
  81. package/lib/framework.mjs +1 -1
  82. package/lib/index.d.ts +14 -14
  83. package/lib/labs/VDataTable/VDataTable.mjs +2 -1
  84. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  85. package/lib/labs/VDataTable/VDataTableRows.mjs +1 -1
  86. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  87. package/lib/labs/VDataTable/VDataTableServer.mjs +19 -6
  88. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  89. package/lib/labs/VDataTable/VDataTableVirtual.mjs +2 -1
  90. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  91. package/lib/labs/VDataTable/composables/options.mjs +4 -2
  92. package/lib/labs/VDataTable/composables/options.mjs.map +1 -1
  93. package/lib/labs/VDataTable/index.d.ts +11 -0
  94. package/lib/labs/components.d.ts +11 -0
  95. package/lib/locale/adapters/vue-i18n.mjs +12 -2
  96. package/lib/locale/adapters/vue-i18n.mjs.map +1 -1
  97. package/lib/locale/en.mjs +2 -2
  98. package/lib/locale/en.mjs.map +1 -1
  99. package/lib/locale/sv.mjs +7 -7
  100. package/lib/locale/sv.mjs.map +1 -1
  101. package/lib/util/defineComponent.mjs +21 -18
  102. package/lib/util/defineComponent.mjs.map +1 -1
  103. package/lib/util/helpers.mjs +5 -1
  104. package/lib/util/helpers.mjs.map +1 -1
  105. package/package.json +2 -2
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.1.2
2
+ * Vuetify v3.1.3
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { ref, onBeforeUnmount, watch, readonly, reactive, computed, watchEffect, toRefs, capitalize, getCurrentInstance as getCurrentInstance$1, unref, provide, inject as inject$1, effectScope, onScopeDispose, shallowRef, shallowReactive, toRaw, defineComponent as defineComponent$1, camelize, h, onDeactivated, onActivated, onMounted, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, Fragment, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, cloneVNode, warn, toHandlers, Teleport, createTextVNode, onBeforeUpdate, vModelText } from 'vue';
7
+ import { ref, onBeforeUnmount, watch, readonly, reactive, computed, watchEffect, toRefs, capitalize, getCurrentInstance as getCurrentInstance$1, unref, provide, inject as inject$1, onScopeDispose, effectScope, shallowRef, defineComponent as defineComponent$1, camelize, h, onDeactivated, onActivated, onMounted, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, Fragment, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, cloneVNode, warn, toHandlers, Teleport, 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;
@@ -258,8 +258,12 @@ function mergeDeep() {
258
258
  }
259
259
  function toKebabCase() {
260
260
  let str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
261
- return str.replace(/[^a-z]/gi, '-').replace(/\B([A-Z])/g, '-$1').toLowerCase();
261
+ if (toKebabCase.cache.has(str)) return toKebabCase.cache.get(str);
262
+ const kebab = str.replace(/[^a-z]/gi, '-').replace(/\B([A-Z])/g, '-$1').toLowerCase();
263
+ toKebabCase.cache.set(str, kebab);
264
+ return kebab;
262
265
  }
266
+ toKebabCase.cache = new Map();
263
267
  function findChildrenWithProvide(key, vnode) {
264
268
  if (!vnode || typeof vnode !== 'object') return [];
265
269
  if (Array.isArray(vnode)) {
@@ -886,7 +890,7 @@ function injectSelf(key) {
886
890
 
887
891
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
888
892
  function createDefaults(options) {
889
- return ref(options ?? {});
893
+ return ref(options);
890
894
  }
891
895
  function useDefaults() {
892
896
  const defaults = inject$1(DefaultsSymbol);
@@ -918,23 +922,30 @@ function provideDefaults(defaults, options) {
918
922
  return newDefaults;
919
923
  }
920
924
 
921
- function useToggleScope(source, cb) {
925
+ function useToggleScope(source, fn) {
922
926
  let scope;
927
+ function start() {
928
+ scope = effectScope();
929
+ scope.run(() => fn.length ? fn(() => {
930
+ var _scope;
931
+ (_scope = scope) == null ? void 0 : _scope.stop();
932
+ start();
933
+ }) : fn());
934
+ }
923
935
  watch(source, active => {
924
936
  if (active && !scope) {
925
- scope = effectScope();
926
- scope.run(cb);
937
+ start();
927
938
  } else if (!active) {
928
- var _scope;
929
- (_scope = scope) == null ? void 0 : _scope.stop();
939
+ var _scope2;
940
+ (_scope2 = scope) == null ? void 0 : _scope2.stop();
930
941
  scope = undefined;
931
942
  }
932
943
  }, {
933
944
  immediate: true
934
945
  });
935
946
  onScopeDispose(() => {
936
- var _scope2;
937
- (_scope2 = scope) == null ? void 0 : _scope2.stop();
947
+ var _scope3;
948
+ (_scope3 = scope) == null ? void 0 : _scope3.stop();
938
949
  });
939
950
  }
940
951
 
@@ -1003,33 +1014,36 @@ const defineComponent = function defineComponent(options) {
1003
1014
  options.props = propsFactory(options.props, toKebabCase(options.name))();
1004
1015
  options.props._as = String;
1005
1016
  options.setup = function setup(props, ctx) {
1006
- const vm = getCurrentInstance$1();
1007
1017
  const defaults = useDefaults();
1008
- const _subcomponentDefaults = shallowRef();
1009
- const _props = shallowReactive({
1010
- ...toRaw(props)
1018
+
1019
+ // Skip props proxy if defaults are not provided
1020
+ if (!defaults.value) return options._setup(props, ctx);
1021
+ const vm = getCurrentInstance$1();
1022
+ const componentDefaults = computed(() => defaults.value[props._as ?? options.name]);
1023
+ const _props = new Proxy(props, {
1024
+ get(target, prop) {
1025
+ if (!propIsDefined(vm.vnode, prop)) {
1026
+ var _componentDefaults$va, _global;
1027
+ return ((_componentDefaults$va = componentDefaults.value) == null ? void 0 : _componentDefaults$va[prop]) ?? ((_global = defaults.value.global) == null ? void 0 : _global[prop]) ?? target[prop];
1028
+ }
1029
+ return Reflect.get(target, prop);
1030
+ }
1011
1031
  });
1032
+ const _subcomponentDefaults = shallowRef();
1012
1033
  watchEffect(() => {
1013
- const globalDefaults = defaults.value.global;
1014
- const componentDefaults = defaults.value[props._as ?? options.name];
1015
- if (componentDefaults) {
1016
- const subComponents = Object.entries(componentDefaults).filter(_ref => {
1034
+ if (componentDefaults.value) {
1035
+ const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1017
1036
  let [key] = _ref;
1018
1037
  return key.startsWith(key[0].toUpperCase());
1019
1038
  });
1020
1039
  if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1021
1040
  }
1022
- for (const prop of Object.keys(props)) {
1023
- let newVal = props[prop];
1024
- if (!propIsDefined(vm.vnode, prop)) {
1025
- newVal = (componentDefaults == null ? void 0 : componentDefaults[prop]) ?? (globalDefaults == null ? void 0 : globalDefaults[prop]) ?? props[prop];
1026
- }
1027
- if (_props[prop] !== newVal) {
1028
- _props[prop] = newVal;
1029
- }
1030
- }
1031
1041
  });
1032
1042
  const setupBindings = options._setup(_props, ctx);
1043
+
1044
+ // If subcomponent defaults are provided, override any
1045
+ // subcomponents provided by the component's setup function.
1046
+ // This uses injectSelf so must be done after the original setup to work.
1033
1047
  useToggleScope(_subcomponentDefaults, () => {
1034
1048
  var _injectSelf;
1035
1049
  provideDefaults(mergeDeep(((_injectSelf = injectSelf(DefaultsSymbol)) == null ? void 0 : _injectSelf.value) ?? {}, _subcomponentDefaults.value));
@@ -1892,8 +1906,8 @@ var en = {
1892
1906
  root: 'Pagination Navigation',
1893
1907
  next: 'Next page',
1894
1908
  previous: 'Previous page',
1895
- page: 'Goto Page {0}',
1896
- currentPage: 'Page {0}, Current Page',
1909
+ page: 'Go to page {0}',
1910
+ currentPage: 'Page {0}, Current page',
1897
1911
  first: 'First page',
1898
1912
  last: 'Last page'
1899
1913
  }
@@ -4857,14 +4871,18 @@ const VBtn = defineComponent({
4857
4871
  const isElevated = computed(() => {
4858
4872
  return props.variant === 'elevated' && !(props.disabled || props.flat || props.border);
4859
4873
  });
4874
+ const valueAttr = computed(() => {
4875
+ if (props.value === undefined) return undefined;
4876
+ return Object(props.value) === props.value ? JSON.stringify(props.value, null, 0) : props.value;
4877
+ });
4860
4878
  useSelectLink(link, group == null ? void 0 : group.select);
4861
4879
  useRender(() => {
4862
- var _slots$prepend, _slots$default, _slots$append, _slots$loader;
4880
+ var _link$isActive2, _link$isActive3, _slots$prepend, _slots$default, _slots$append, _slots$loader;
4863
4881
  const Tag = link.isLink.value ? 'a' : props.tag;
4864
- const hasColor = !group || isActive.value;
4865
4882
  const hasPrepend = !!(props.prependIcon || slots.prepend);
4866
4883
  const hasAppend = !!(props.appendIcon || slots.append);
4867
4884
  const hasIcon = !!(props.icon && props.icon !== true);
4885
+ const hasColor = (group == null ? void 0 : group.isSelected.value) && (!link.isLink.value || ((_link$isActive2 = link.isActive) == null ? void 0 : _link$isActive2.value)) || !group || ((_link$isActive3 = link.isActive) == null ? void 0 : _link$isActive3.value);
4868
4886
  return withDirectives(createVNode(Tag, {
4869
4887
  "type": Tag === 'a' ? undefined : 'button',
4870
4888
  "class": ['v-btn', group == null ? void 0 : group.selectedClass.value, {
@@ -4885,7 +4903,8 @@ const VBtn = defineComponent({
4885
4903
  if (isDisabled.value) return;
4886
4904
  (_link$navigate = link.navigate) == null ? void 0 : _link$navigate.call(link, e);
4887
4905
  group == null ? void 0 : group.toggle();
4888
- }
4906
+ },
4907
+ "value": valueAttr.value
4889
4908
  }, {
4890
4909
  default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && createVNode(VDefaultsProvider, {
4891
4910
  "key": "prepend",
@@ -5359,32 +5378,34 @@ const VField = genericComponent()({
5359
5378
  if (hasLabel.value) {
5360
5379
  const el = labelRef.value.$el;
5361
5380
  const targetEl = floatingLabelRef.value.$el;
5362
- const rect = nullifyTransforms(el);
5363
- const targetRect = targetEl.getBoundingClientRect();
5364
- const x = targetRect.x - rect.x;
5365
- const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2);
5366
- const targetWidth = targetRect.width / 0.75;
5367
- const width = Math.abs(targetWidth - rect.width) > 1 ? {
5368
- maxWidth: convertToUnit(targetWidth)
5369
- } : undefined;
5370
- const style = getComputedStyle(el);
5371
- const targetStyle = getComputedStyle(targetEl);
5372
- const duration = parseFloat(style.transitionDuration) * 1000 || 150;
5373
- const scale = parseFloat(targetStyle.getPropertyValue('--v-field-label-scale'));
5374
- const color = targetStyle.getPropertyValue('color');
5375
- el.style.visibility = 'visible';
5376
- targetEl.style.visibility = 'hidden';
5377
- animate(el, {
5378
- transform: `translate(${x}px, ${y}px) scale(${scale})`,
5379
- color,
5380
- ...width
5381
- }, {
5382
- duration,
5383
- easing: standardEasing,
5384
- direction: val ? 'normal' : 'reverse'
5385
- }).finished.then(() => {
5386
- el.style.removeProperty('visibility');
5387
- targetEl.style.removeProperty('visibility');
5381
+ requestAnimationFrame(() => {
5382
+ const rect = nullifyTransforms(el);
5383
+ const targetRect = targetEl.getBoundingClientRect();
5384
+ const x = targetRect.x - rect.x;
5385
+ const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2);
5386
+ const targetWidth = targetRect.width / 0.75;
5387
+ const width = Math.abs(targetWidth - rect.width) > 1 ? {
5388
+ maxWidth: convertToUnit(targetWidth)
5389
+ } : undefined;
5390
+ const style = getComputedStyle(el);
5391
+ const targetStyle = getComputedStyle(targetEl);
5392
+ const duration = parseFloat(style.transitionDuration) * 1000 || 150;
5393
+ const scale = parseFloat(targetStyle.getPropertyValue('--v-field-label-scale'));
5394
+ const color = targetStyle.getPropertyValue('color');
5395
+ el.style.visibility = 'visible';
5396
+ targetEl.style.visibility = 'hidden';
5397
+ animate(el, {
5398
+ transform: `translate(${x}px, ${y}px) scale(${scale})`,
5399
+ color,
5400
+ ...width
5401
+ }, {
5402
+ duration,
5403
+ easing: standardEasing,
5404
+ direction: val ? 'normal' : 'reverse'
5405
+ }).finished.then(() => {
5406
+ el.style.removeProperty('visibility');
5407
+ targetEl.style.removeProperty('visibility');
5408
+ });
5388
5409
  });
5389
5410
  }
5390
5411
  }, {
@@ -5573,7 +5594,6 @@ const FormKey = Symbol.for('vuetify:form');
5573
5594
  const makeFormProps = propsFactory({
5574
5595
  disabled: Boolean,
5575
5596
  fastFail: Boolean,
5576
- lazyValidation: Boolean,
5577
5597
  readonly: Boolean,
5578
5598
  modelValue: {
5579
5599
  type: Boolean,
@@ -6977,9 +6997,9 @@ const VDivider = defineComponent({
6977
6997
  themeClasses
6978
6998
  } = provideTheme(props);
6979
6999
  const {
6980
- backgroundColorClasses,
6981
- backgroundColorStyles
6982
- } = useBackgroundColor(toRef(props, 'color'));
7000
+ textColorClasses,
7001
+ textColorStyles
7002
+ } = useTextColor(toRef(props, 'color'));
6983
7003
  const dividerStyles = computed(() => {
6984
7004
  const styles = {};
6985
7005
  if (props.length) {
@@ -6995,8 +7015,8 @@ const VDivider = defineComponent({
6995
7015
  'v-divider': true,
6996
7016
  'v-divider--inset': props.inset,
6997
7017
  'v-divider--vertical': props.vertical
6998
- }, themeClasses.value, backgroundColorClasses.value],
6999
- "style": [dividerStyles.value, backgroundColorStyles.value],
7018
+ }, themeClasses.value, textColorClasses.value],
7019
+ "style": [dividerStyles.value, textColorStyles.value],
7000
7020
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
7001
7021
  "role": `${attrs.role || 'separator'}`
7002
7022
  }, null));
@@ -7706,7 +7726,7 @@ const VListItem = genericComponent()({
7706
7726
  }
7707
7727
  }
7708
7728
  useRender(() => {
7709
- var _slots$prepend, _slots$title, _slots$subtitle, _slots$default, _slots$append;
7729
+ var _slots$title, _slots$subtitle, _slots$default;
7710
7730
  const Tag = isLink.value ? 'a' : props.tag;
7711
7731
  const hasColor = !list || isSelected.value || isActive.value;
7712
7732
  const hasTitle = slots.title || props.title;
@@ -7729,7 +7749,18 @@ const VListItem = genericComponent()({
7729
7749
  "onClick": onClick,
7730
7750
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
7731
7751
  }, {
7732
- default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && createVNode(VDefaultsProvider, {
7752
+ default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && createVNode("div", {
7753
+ "key": "prepend",
7754
+ "class": "v-list-item__prepend"
7755
+ }, [props.prependAvatar && createVNode(VAvatar, {
7756
+ "key": "prepend-avatar",
7757
+ "density": props.density,
7758
+ "image": props.prependAvatar
7759
+ }, null), props.prependIcon && createVNode(VIcon, {
7760
+ "key": "prepend-icon",
7761
+ "density": props.density,
7762
+ "icon": props.prependIcon
7763
+ }, null), slots.prepend && createVNode(VDefaultsProvider, {
7733
7764
  "key": "prepend",
7734
7765
  "defaults": {
7735
7766
  VAvatar: {
@@ -7745,14 +7776,8 @@ const VListItem = genericComponent()({
7745
7776
  }
7746
7777
  }
7747
7778
  }, {
7748
- default: () => [createVNode("div", {
7749
- "class": "v-list-item__prepend"
7750
- }, [props.prependAvatar && createVNode(VAvatar, {
7751
- "key": "prepend-avatar"
7752
- }, null), props.prependIcon && createVNode(VIcon, {
7753
- "key": "prepend-icon"
7754
- }, null), (_slots$prepend = slots.prepend) == null ? void 0 : _slots$prepend.call(slots, slotProps.value)])]
7755
- }), createVNode("div", {
7779
+ default: () => [slots.prepend(slotProps.value)]
7780
+ })]), createVNode("div", {
7756
7781
  "class": "v-list-item__content",
7757
7782
  "data-no-activator": ""
7758
7783
  }, [hasTitle && createVNode(VListItemTitle, {
@@ -7767,7 +7792,10 @@ const VListItem = genericComponent()({
7767
7792
  default: () => [((_slots$subtitle = slots.subtitle) == null ? void 0 : _slots$subtitle.call(slots, {
7768
7793
  subtitle: props.subtitle
7769
7794
  })) ?? props.subtitle]
7770
- }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value)]), hasAppend && createVNode(VDefaultsProvider, {
7795
+ }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value)]), hasAppend && createVNode("div", {
7796
+ "key": "append",
7797
+ "class": "v-list-item__append"
7798
+ }, [slots.append && createVNode(VDefaultsProvider, {
7771
7799
  "key": "append",
7772
7800
  "defaults": {
7773
7801
  VAvatar: {
@@ -7783,14 +7811,16 @@ const VListItem = genericComponent()({
7783
7811
  }
7784
7812
  }
7785
7813
  }, {
7786
- default: () => [createVNode("div", {
7787
- "class": "v-list-item__append"
7788
- }, [(_slots$append = slots.append) == null ? void 0 : _slots$append.call(slots, slotProps.value), props.appendIcon && createVNode(VIcon, {
7789
- "key": "append-icon"
7790
- }, null), props.appendAvatar && createVNode(VAvatar, {
7791
- "key": "append-avatar"
7792
- }, null)])]
7793
- })]
7814
+ default: () => [slots.append(slotProps.value)]
7815
+ }), props.appendIcon && createVNode(VIcon, {
7816
+ "key": "append-icon",
7817
+ "density": props.density,
7818
+ "icon": props.appendIcon
7819
+ }, null), props.appendAvatar && createVNode(VAvatar, {
7820
+ "key": "append-avatar",
7821
+ "density": props.density,
7822
+ "image": props.appendAvatar
7823
+ }, null)])]
7794
7824
  }), [[resolveDirective("ripple"), isClickable.value && props.ripple]]);
7795
7825
  });
7796
7826
  return {};
@@ -8004,9 +8034,12 @@ function useItems(props) {
8004
8034
 
8005
8035
  // Types
8006
8036
 
8037
+ function isPrimitive(value) {
8038
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
8039
+ }
8007
8040
  function transformItem(props, item) {
8008
8041
  const type = getPropertyFromItem(item, props.itemType, 'item');
8009
- const title = typeof item === 'string' ? item : getPropertyFromItem(item, props.itemTitle);
8042
+ const title = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemTitle);
8010
8043
  const value = getPropertyFromItem(item, props.itemValue, undefined);
8011
8044
  const children = getPropertyFromItem(item, props.itemChildren);
8012
8045
  const itemProps = props.itemProps === true ? pick(item, ['children'])[1] : getPropertyFromItem(item, props.itemProps);
@@ -8632,17 +8665,12 @@ const makeLocationStrategyProps = propsFactory({
8632
8665
  function useLocationStrategies(props, data) {
8633
8666
  const contentStyles = ref({});
8634
8667
  const updateLocation = ref();
8635
- let scope;
8636
- watchEffect(async () => {
8637
- var _scope;
8638
- (_scope = scope) == null ? void 0 : _scope.stop();
8639
- updateLocation.value = undefined;
8640
- if (!(IN_BROWSER && data.isActive.value && props.locationStrategy)) return;
8641
- scope = effectScope();
8642
- if (!(props.locationStrategy === 'connected')) {
8643
- await nextTick();
8644
- }
8645
- scope.run(() => {
8668
+ if (IN_BROWSER) {
8669
+ useToggleScope(() => !!(data.isActive.value && props.locationStrategy), reset => {
8670
+ watch(() => props.locationStrategy, reset);
8671
+ onScopeDispose(() => {
8672
+ updateLocation.value = undefined;
8673
+ });
8646
8674
  if (typeof props.locationStrategy === 'function') {
8647
8675
  var _props$locationStrate;
8648
8676
  updateLocation.value = (_props$locationStrate = props.locationStrategy(data, props, contentStyles)) == null ? void 0 : _props$locationStrate.updateLocation;
@@ -8651,16 +8679,14 @@ function useLocationStrategies(props, data) {
8651
8679
  updateLocation.value = (_locationStrategies$p = locationStrategies[props.locationStrategy](data, props, contentStyles)) == null ? void 0 : _locationStrategies$p.updateLocation;
8652
8680
  }
8653
8681
  });
8654
- });
8655
- IN_BROWSER && window.addEventListener('resize', onResize, {
8656
- passive: true
8657
- });
8658
- onScopeDispose(() => {
8659
- var _scope2;
8660
- IN_BROWSER && window.removeEventListener('resize', onResize);
8661
- updateLocation.value = undefined;
8662
- (_scope2 = scope) == null ? void 0 : _scope2.stop();
8663
- });
8682
+ window.addEventListener('resize', onResize, {
8683
+ passive: true
8684
+ });
8685
+ onScopeDispose(() => {
8686
+ window.removeEventListener('resize', onResize);
8687
+ updateLocation.value = undefined;
8688
+ });
8689
+ }
8664
8690
  function onResize(e) {
8665
8691
  var _updateLocation$value;
8666
8692
  (_updateLocation$value = updateLocation.value) == null ? void 0 : _updateLocation$value.call(updateLocation, e);
@@ -8954,13 +8980,30 @@ function connectedLocationStrategy(data, props, contentStyles) {
8954
8980
  maxWidth: convertToUnit(pixelCeil(clamp(available.x, minWidth.value === Infinity ? 0 : minWidth.value, maxWidth.value))),
8955
8981
  maxHeight: convertToUnit(pixelCeil(clamp(available.y, minHeight.value === Infinity ? 0 : minHeight.value, maxHeight.value)))
8956
8982
  });
8983
+ return {
8984
+ available,
8985
+ contentBox
8986
+ };
8957
8987
  }
8958
- watch(() => [preferredAnchor.value, preferredOrigin.value, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight], () => updateLocation(), {
8959
- immediate: !activatorFixed
8960
- });
8961
- if (activatorFixed) nextTick(() => updateLocation());
8962
- requestAnimationFrame(() => {
8963
- if (contentStyles.value.maxHeight) updateLocation();
8988
+ watch(() => [preferredAnchor.value, preferredOrigin.value, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight], () => updateLocation());
8989
+ nextTick(() => {
8990
+ const result = updateLocation();
8991
+
8992
+ // TODO: overflowing content should only require a single updateLocation call
8993
+ // Icky hack to make sure the content is positioned consistently
8994
+ if (!result) return;
8995
+ const {
8996
+ available,
8997
+ contentBox
8998
+ } = result;
8999
+ if (contentBox.height > available.y) {
9000
+ requestAnimationFrame(() => {
9001
+ updateLocation();
9002
+ requestAnimationFrame(() => {
9003
+ updateLocation();
9004
+ });
9005
+ });
9006
+ }
8964
9007
  });
8965
9008
  return {
8966
9009
  updateLocation
@@ -9028,10 +9071,10 @@ function useScrollStrategies(props, data) {
9028
9071
  await nextTick();
9029
9072
  scope.run(() => {
9030
9073
  if (typeof props.scrollStrategy === 'function') {
9031
- props.scrollStrategy(data, props);
9074
+ props.scrollStrategy(data, props, scope);
9032
9075
  } else {
9033
9076
  var _scrollStrategies$pro;
9034
- (_scrollStrategies$pro = scrollStrategies[props.scrollStrategy]) == null ? void 0 : _scrollStrategies$pro.call(scrollStrategies, data, props);
9077
+ (_scrollStrategies$pro = scrollStrategies[props.scrollStrategy]) == null ? void 0 : _scrollStrategies$pro.call(scrollStrategies, data, props, scope);
9035
9078
  }
9036
9079
  });
9037
9080
  });
@@ -9077,9 +9120,10 @@ function blockScrollStrategy(data, props) {
9077
9120
  }
9078
9121
  });
9079
9122
  }
9080
- function repositionScrollStrategy(data) {
9123
+ function repositionScrollStrategy(data, props, scope) {
9081
9124
  let slow = false;
9082
9125
  let raf = -1;
9126
+ let ric = -1;
9083
9127
  function update(e) {
9084
9128
  requestNewFrame(() => {
9085
9129
  var _data$updateLocation$, _data$updateLocation;
@@ -9089,21 +9133,29 @@ function repositionScrollStrategy(data) {
9089
9133
  slow = time / (1000 / 60) > 2;
9090
9134
  });
9091
9135
  }
9092
- bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
9093
- if (slow) {
9094
- // If the position calculation is slow,
9095
- // defer updates until scrolling is finished.
9096
- // Browsers usually fire one scroll event per frame so
9097
- // we just wait until we've got two frames without an event
9098
- cancelAnimationFrame(raf);
9099
- raf = requestAnimationFrame(() => {
9100
- raf = requestAnimationFrame(() => {
9136
+ ric = requestIdleCallback(() => {
9137
+ scope.run(() => {
9138
+ bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
9139
+ if (slow) {
9140
+ // If the position calculation is slow,
9141
+ // defer updates until scrolling is finished.
9142
+ // Browsers usually fire one scroll event per frame so
9143
+ // we just wait until we've got two frames without an event
9144
+ cancelAnimationFrame(raf);
9145
+ raf = requestAnimationFrame(() => {
9146
+ raf = requestAnimationFrame(() => {
9147
+ update(e);
9148
+ });
9149
+ });
9150
+ } else {
9101
9151
  update(e);
9102
- });
9152
+ }
9103
9153
  });
9104
- } else {
9105
- update(e);
9106
- }
9154
+ });
9155
+ });
9156
+ onScopeDispose(() => {
9157
+ cancelIdleCallback(ric);
9158
+ cancelAnimationFrame(raf);
9107
9159
  });
9108
9160
  }
9109
9161
 
@@ -9746,6 +9798,11 @@ const VMenu = genericComponent()({
9746
9798
  function onClickOutside() {
9747
9799
  parent == null ? void 0 : parent.closeParents();
9748
9800
  }
9801
+ const activatorProps = computed(() => mergeProps({
9802
+ 'aria-haspopup': 'menu',
9803
+ 'aria-expanded': String(isActive.value),
9804
+ 'aria-owns': id.value
9805
+ }, props.activatorProps));
9749
9806
  useRender(() => {
9750
9807
  const [overlayProps] = filterVOverlayProps(props);
9751
9808
  return createVNode(VOverlay, mergeProps({
@@ -9755,11 +9812,7 @@ const VMenu = genericComponent()({
9755
9812
  "modelValue": isActive.value,
9756
9813
  "onUpdate:modelValue": $event => isActive.value = $event,
9757
9814
  "absolute": true,
9758
- "activatorProps": mergeProps({
9759
- 'aria-haspopup': 'menu',
9760
- 'aria-expanded': String(isActive.value),
9761
- 'aria-owns': id.value
9762
- }, props.activatorProps),
9815
+ "activatorProps": activatorProps.value,
9763
9816
  "onClick:outside": onClickOutside
9764
9817
  }, scopeId), {
9765
9818
  activator: slots.activator,
@@ -9873,8 +9926,10 @@ const VSelect = genericComponent()({
9873
9926
  }
9874
9927
  function onKeydown(e) {
9875
9928
  if (props.readonly || form != null && form.isReadonly.value) return;
9876
- if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9929
+ if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
9877
9930
  e.preventDefault();
9931
+ }
9932
+ if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9878
9933
  menu.value = true;
9879
9934
  }
9880
9935
  if (['Escape', 'Tab'].includes(e.key)) {
@@ -9885,15 +9940,12 @@ const VSelect = genericComponent()({
9885
9940
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
9886
9941
  } else if (e.key === 'ArrowUp') {
9887
9942
  var _listRef$value2;
9888
- e.preventDefault();
9889
9943
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
9890
9944
  } else if (e.key === 'Home') {
9891
9945
  var _listRef$value3;
9892
- e.preventDefault();
9893
9946
  (_listRef$value3 = listRef.value) == null ? void 0 : _listRef$value3.focus('first');
9894
9947
  } else if (e.key === 'End') {
9895
9948
  var _listRef$value4;
9896
- e.preventDefault();
9897
9949
  (_listRef$value4 = listRef.value) == null ? void 0 : _listRef$value4.focus('last');
9898
9950
  }
9899
9951
  }
@@ -10237,6 +10289,9 @@ const VAutocomplete = genericComponent()({
10237
10289
  }
10238
10290
  function onKeydown(e) {
10239
10291
  if (props.readonly || form != null && form.isReadonly.value) return;
10292
+ if (['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
10293
+ e.preventDefault();
10294
+ }
10240
10295
  if (['Enter', 'ArrowDown'].includes(e.key)) {
10241
10296
  menu.value = true;
10242
10297
  }
@@ -10248,11 +10303,9 @@ const VAutocomplete = genericComponent()({
10248
10303
  }
10249
10304
  if (e.key === 'ArrowDown') {
10250
10305
  var _listRef$value;
10251
- e.preventDefault();
10252
10306
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
10253
10307
  } else if (e.key === 'ArrowUp') {
10254
10308
  var _listRef$value2;
10255
- e.preventDefault();
10256
10309
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
10257
10310
  }
10258
10311
  }
@@ -13581,7 +13634,9 @@ const VCombobox = genericComponent()({
13581
13634
  if (props.readonly || form != null && form.isReadonly.value) return;
13582
13635
  const selectionStart = vTextFieldRef.value.selectionStart;
13583
13636
  const length = selected.value.length;
13584
- if (selectionIndex.value > -1) e.preventDefault();
13637
+ if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
13638
+ e.preventDefault();
13639
+ }
13585
13640
  if (['Enter', 'ArrowDown'].includes(e.key)) {
13586
13641
  menu.value = true;
13587
13642
  }
@@ -13593,11 +13648,9 @@ const VCombobox = genericComponent()({
13593
13648
  }
13594
13649
  if (e.key === 'ArrowDown') {
13595
13650
  var _listRef$value;
13596
- e.preventDefault();
13597
13651
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
13598
13652
  } else if (e.key === 'ArrowUp') {
13599
13653
  var _listRef$value2;
13600
- e.preventDefault();
13601
13654
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
13602
13655
  }
13603
13656
  if (!props.multiple) return;
@@ -13892,6 +13945,10 @@ const VDialog = genericComponent()({
13892
13945
  });
13893
13946
  }
13894
13947
  });
13948
+ const activatorProps = computed(() => mergeProps({
13949
+ 'aria-haspopup': 'dialog',
13950
+ 'aria-expanded': String(isActive.value)
13951
+ }, props.activatorProps));
13895
13952
  useRender(() => {
13896
13953
  const [overlayProps] = filterVOverlayProps(props);
13897
13954
  return createVNode(VOverlay, mergeProps({
@@ -13905,10 +13962,7 @@ const VDialog = genericComponent()({
13905
13962
  "onUpdate:modelValue": $event => isActive.value = $event,
13906
13963
  "aria-role": "dialog",
13907
13964
  "aria-modal": "true",
13908
- "activatorProps": mergeProps({
13909
- 'aria-haspopup': 'dialog',
13910
- 'aria-expanded': String(isActive.value)
13911
- }, props.activatorProps)
13965
+ "activatorProps": activatorProps.value
13912
13966
  }, scopeId), {
13913
13967
  activator: slots.activator,
13914
13968
  default: function () {
@@ -14257,12 +14311,15 @@ const VFileInput = defineComponent({
14257
14311
  onFocus();
14258
14312
  nextTick(() => {
14259
14313
  model.value = [];
14260
- if (inputRef != null && inputRef.value) {
14261
- inputRef.value.value = '';
14262
- }
14263
14314
  callEvent(props['onClick:clear'], e);
14264
14315
  });
14265
14316
  }
14317
+ watch(model, newValue => {
14318
+ const hasModelReset = !Array.isArray(newValue) || !newValue.length;
14319
+ if (hasModelReset && inputRef.value) {
14320
+ inputRef.value.value = '';
14321
+ }
14322
+ });
14266
14323
  useRender(() => {
14267
14324
  const hasCounter = !!(slots.counter || props.counter);
14268
14325
  const hasDetails = !!(hasCounter || slots.details);
@@ -15253,7 +15310,7 @@ function useTouch(_ref) {
15253
15310
  window.removeEventListener('touchmove', onTouchmove);
15254
15311
  window.removeEventListener('touchend', onTouchend);
15255
15312
  });
15256
- const isHorizontal = computed(() => position.value !== 'bottom');
15313
+ const isHorizontal = computed(() => ['left', 'right'].includes(position.value));
15257
15314
  const {
15258
15315
  addMovement,
15259
15316
  endTouch,
@@ -15265,11 +15322,11 @@ function useTouch(_ref) {
15265
15322
  const offset = ref(0);
15266
15323
  let start;
15267
15324
  function getOffset(pos, active) {
15268
- return (position.value === 'left' ? pos : position.value === 'right' ? document.documentElement.clientWidth - pos : position.value === 'bottom' ? document.documentElement.clientHeight - pos : oops()) - (active ? width.value : 0);
15325
+ return (position.value === 'left' ? pos : position.value === 'right' ? document.documentElement.clientWidth - pos : position.value === 'top' ? pos : position.value === 'bottom' ? document.documentElement.clientHeight - pos : oops()) - (active ? width.value : 0);
15269
15326
  }
15270
15327
  function getProgress(pos) {
15271
15328
  let limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
15272
- const progress = position.value === 'left' ? (pos - offset.value) / width.value : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value : oops();
15329
+ const progress = position.value === 'left' ? (pos - offset.value) / width.value : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value : position.value === 'top' ? (pos - offset.value) / width.value : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value : oops();
15273
15330
  return limit ? Math.max(0, Math.min(1, progress)) : progress;
15274
15331
  }
15275
15332
  function onTouchstart(e) {
@@ -15277,8 +15334,8 @@ function useTouch(_ref) {
15277
15334
  const touchX = e.changedTouches[0].clientX;
15278
15335
  const touchY = e.changedTouches[0].clientY;
15279
15336
  const touchZone = 25;
15280
- const inTouchZone = position.value === 'left' ? touchX < touchZone : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone : oops();
15281
- const inElement = isActive.value && (position.value === 'left' ? touchX < width.value : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value : oops());
15337
+ const inTouchZone = position.value === 'left' ? touchX < touchZone : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone : position.value === 'top' ? touchY < touchZone : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone : oops();
15338
+ const inElement = isActive.value && (position.value === 'left' ? touchX < width.value : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value : position.value === 'top' ? touchY < width.value : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value : oops());
15282
15339
  if (inTouchZone || inElement || isActive.value && isTemporary.value) {
15283
15340
  maybeDragging = true;
15284
15341
  start = [touchX, touchY];
@@ -15330,6 +15387,7 @@ function useTouch(_ref) {
15330
15387
  isActive.value = velocity.direction === ({
15331
15388
  left: 'right',
15332
15389
  right: 'left',
15390
+ top: 'down',
15333
15391
  bottom: 'up'
15334
15392
  }[position.value] || oops());
15335
15393
  } else {
@@ -15338,7 +15396,7 @@ function useTouch(_ref) {
15338
15396
  }
15339
15397
  const dragStyles = computed(() => {
15340
15398
  return isDragging.value ? {
15341
- transform: position.value === 'left' ? `translateX(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'right' ? `translateX(calc(100% - ${dragProgress.value * width.value}px))` : position.value === 'bottom' ? `translateY(calc(100% - ${dragProgress.value * width.value}px))` : oops(),
15399
+ transform: position.value === 'left' ? `translateX(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'right' ? `translateX(calc(100% - ${dragProgress.value * width.value}px))` : position.value === 'top' ? `translateY(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'bottom' ? `translateY(calc(100% - ${dragProgress.value * width.value}px))` : oops(),
15342
15400
  transition: 'none'
15343
15401
  } : undefined;
15344
15402
  });
@@ -15354,7 +15412,7 @@ function oops() {
15354
15412
 
15355
15413
  // Types
15356
15414
 
15357
- const locations = ['start', 'end', 'left', 'right', 'bottom'];
15415
+ const locations = ['start', 'end', 'left', 'right', 'top', 'bottom'];
15358
15416
  const VNavigationDrawer = defineComponent({
15359
15417
  name: 'VNavigationDrawer',
15360
15418
  props: {
@@ -15811,7 +15869,7 @@ const VPagination = defineComponent({
15811
15869
  disabled: !!props.disabled || props.length < 2,
15812
15870
  color: isActive ? props.activeColor : props.color,
15813
15871
  ariaCurrent: isActive,
15814
- ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, index + 1),
15872
+ ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
15815
15873
  onClick: e => setValue(e, item)
15816
15874
  }
15817
15875
  };
@@ -17990,6 +18048,9 @@ const VTooltip = genericComponent()({
17990
18048
  if (props.transition) return props.transition;
17991
18049
  return isActive.value ? 'scale-transition' : 'fade-transition';
17992
18050
  });
18051
+ const activatorProps = computed(() => mergeProps({
18052
+ 'aria-describedby': id.value
18053
+ }, props.activatorProps));
17993
18054
  useRender(() => {
17994
18055
  const [overlayProps] = filterVOverlayProps(props);
17995
18056
  return createVNode(VOverlay, mergeProps({
@@ -18006,9 +18067,7 @@ const VTooltip = genericComponent()({
18006
18067
  "persistent": true,
18007
18068
  "role": "tooltip",
18008
18069
  "eager": true,
18009
- "activatorProps": mergeProps({
18010
- 'aria-describedby': id.value
18011
- }, props.activatorProps),
18070
+ "activatorProps": activatorProps.value,
18012
18071
  "_disableGlobalStack": true
18013
18072
  }, scopeId), {
18014
18073
  activator: slots.activator,
@@ -18957,7 +19016,7 @@ const VDataTableRows = defineComponent({
18957
19016
  });
18958
19017
  },
18959
19018
  "item": item
18960
- }, slots), isExpanded(item.value) && ((_slots$expandedRow = slots['expanded-row']) == null ? void 0 : _slots$expandedRow.call(slots, {
19019
+ }, slots), isExpanded(item) && ((_slots$expandedRow = slots['expanded-row']) == null ? void 0 : _slots$expandedRow.call(slots, {
18961
19020
  item,
18962
19021
  columns: columns.value
18963
19022
  }))]);
@@ -19168,7 +19227,8 @@ function useOptions(_ref) {
19168
19227
  sortBy,
19169
19228
  startIndex,
19170
19229
  stopIndex,
19171
- pageCount
19230
+ pageCount,
19231
+ groupBy
19172
19232
  } = _ref;
19173
19233
  const vm = getCurrentInstance('VDataTable');
19174
19234
  const options = computed(() => ({
@@ -19177,7 +19237,8 @@ function useOptions(_ref) {
19177
19237
  startIndex: startIndex.value,
19178
19238
  stopIndex: stopIndex.value,
19179
19239
  pageCount: pageCount.value,
19180
- sortBy: sortBy.value
19240
+ sortBy: sortBy.value,
19241
+ groupBy: groupBy.value
19181
19242
  }));
19182
19243
 
19183
19244
  // Reset page when sorting changes
@@ -19294,7 +19355,8 @@ const VDataTable = defineComponent({
19294
19355
  sortBy,
19295
19356
  pageCount,
19296
19357
  startIndex,
19297
- stopIndex
19358
+ stopIndex,
19359
+ groupBy
19298
19360
  });
19299
19361
  provideDefaults({
19300
19362
  VDataTableRows: {
@@ -19491,7 +19553,8 @@ const VDataTableVirtual = defineComponent({
19491
19553
  startIndex: ref(0),
19492
19554
  stopIndex: computed(() => flatItems.value.length - 1),
19493
19555
  pageCount: ref(1),
19494
- itemsPerPage: ref(-1)
19556
+ itemsPerPage: ref(-1),
19557
+ groupBy
19495
19558
  });
19496
19559
  provideDefaults({
19497
19560
  VDataTableRows: {
@@ -19567,7 +19630,8 @@ const VDataTableServer = defineComponent({
19567
19630
  ...makeDataTableItemProps(),
19568
19631
  ...makeDataTableSelectProps(),
19569
19632
  ...makeDataTableSortProps(),
19570
- ...makeDataTablePaginateProps()
19633
+ ...makeDataTablePaginateProps(),
19634
+ ...makeDataTableGroupProps()
19571
19635
  },
19572
19636
  emits: {
19573
19637
  'update:modelValue': value => true,
@@ -19576,6 +19640,7 @@ const VDataTableServer = defineComponent({
19576
19640
  'update:sortBy': sortBy => true,
19577
19641
  'update:options': options => true,
19578
19642
  'update:expanded': options => true,
19643
+ 'update:groupBy': value => true,
19579
19644
  'click:row': (event, value) => true
19580
19645
  },
19581
19646
  setup(props, _ref) {
@@ -19583,10 +19648,12 @@ const VDataTableServer = defineComponent({
19583
19648
  emit,
19584
19649
  slots
19585
19650
  } = _ref;
19651
+ const groupBy = useProxiedModel(props, 'groupBy');
19586
19652
  createExpanded(props);
19587
19653
  const {
19588
19654
  columns
19589
19655
  } = createHeaders(props, {
19656
+ groupBy,
19590
19657
  showSelect: toRef(props, 'showSelect'),
19591
19658
  showExpand: toRef(props, 'showExpand')
19592
19659
  });
@@ -19597,6 +19664,9 @@ const VDataTableServer = defineComponent({
19597
19664
  sortBy,
19598
19665
  toggleSort
19599
19666
  } = createSort(props);
19667
+ const {
19668
+ opened
19669
+ } = createGroupBy(props, groupBy, sortBy);
19600
19670
  const {
19601
19671
  page,
19602
19672
  itemsPerPage,
@@ -19604,6 +19674,9 @@ const VDataTableServer = defineComponent({
19604
19674
  stopIndex,
19605
19675
  pageCount
19606
19676
  } = createPagination(props, items);
19677
+ const {
19678
+ flatItems
19679
+ } = useGroupedItems(items, groupBy, opened);
19607
19680
  createSelection(props, items);
19608
19681
  useOptions({
19609
19682
  page,
@@ -19611,7 +19684,8 @@ const VDataTableServer = defineComponent({
19611
19684
  sortBy,
19612
19685
  startIndex,
19613
19686
  stopIndex,
19614
- pageCount
19687
+ pageCount,
19688
+ groupBy
19615
19689
  });
19616
19690
  provide('v-data-table', {
19617
19691
  toggleSort,
@@ -19647,7 +19721,7 @@ const VDataTableServer = defineComponent({
19647
19721
  "class": "v-data-table__tbody",
19648
19722
  "role": "rowgroup"
19649
19723
  }, [slots.body ? slots.body() : createVNode(VDataTableRows, {
19650
- "items": items.value,
19724
+ "items": flatItems.value,
19651
19725
  "onClick:row": (event, value) => emit('click:row', event, value)
19652
19726
  }, slots)]), (_slots$tbody = slots.tbody) == null ? void 0 : _slots$tbody.call(slots), (_slots$tfoot = slots.tfoot) == null ? void 0 : _slots$tfoot.call(slots)]);
19653
19727
  }),
@@ -20153,7 +20227,7 @@ function createVuetify$1() {
20153
20227
  locale
20154
20228
  };
20155
20229
  }
20156
- const version$1 = "3.1.2";
20230
+ const version$1 = "3.1.3";
20157
20231
  createVuetify$1.version = version$1;
20158
20232
 
20159
20233
  // Vue's inject() can only be used in setup
@@ -20166,7 +20240,7 @@ function inject(key) {
20166
20240
  }
20167
20241
  }
20168
20242
 
20169
- const version = "3.1.2";
20243
+ const version = "3.1.3";
20170
20244
 
20171
20245
  const createVuetify = function () {
20172
20246
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};