vuetify 3.1.1 → 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 (135) hide show
  1. package/dist/json/attributes.json +495 -483
  2. package/dist/json/importMap.json +58 -58
  3. package/dist/json/tags.json +4 -1
  4. package/dist/json/web-types.json +892 -839
  5. package/dist/vuetify-labs.css +356 -346
  6. package/dist/vuetify-labs.d.ts +257 -179
  7. package/dist/vuetify-labs.esm.js +432 -278
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +431 -277
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +94 -84
  12. package/dist/vuetify.d.ts +261 -194
  13. package/dist/vuetify.esm.js +346 -242
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +345 -241
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +731 -721
  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 +4 -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 +16 -5
  28. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  29. package/lib/components/VCard/VCard.mjs +5 -2
  30. package/lib/components/VCard/VCard.mjs.map +1 -1
  31. package/lib/components/VCard/index.d.ts +8 -2
  32. package/lib/components/VChip/VChip.mjs +18 -4
  33. package/lib/components/VChip/VChip.mjs.map +1 -1
  34. package/lib/components/VChip/index.d.ts +15 -2
  35. package/lib/components/VChipGroup/VChipGroup.mjs +1 -0
  36. package/lib/components/VChipGroup/VChipGroup.mjs.map +1 -1
  37. package/lib/components/VCombobox/VCombobox.mjs +5 -4
  38. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  39. package/lib/components/VCombobox/index.d.ts +43 -20
  40. package/lib/components/VDefaultsProvider/index.d.ts +5 -4
  41. package/lib/components/VDialog/VDialog.mjs +6 -5
  42. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  43. package/lib/components/VDialog/index.d.ts +57 -34
  44. package/lib/components/VDivider/VDivider.mjs +6 -6
  45. package/lib/components/VDivider/VDivider.mjs.map +1 -1
  46. package/lib/components/VField/VField.mjs +28 -26
  47. package/lib/components/VField/VField.mjs.map +1 -1
  48. package/lib/components/VFileInput/VFileInput.css +1 -0
  49. package/lib/components/VFileInput/VFileInput.mjs +7 -4
  50. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  51. package/lib/components/VFileInput/VFileInput.sass +1 -0
  52. package/lib/components/VForm/index.d.ts +0 -3
  53. package/lib/components/VGrid/VGrid.css +5 -0
  54. package/lib/components/VGrid/VGrid.sass +5 -0
  55. package/lib/components/VList/VList.mjs +4 -1
  56. package/lib/components/VList/VList.mjs.map +1 -1
  57. package/lib/components/VList/VListItem.css +1 -1
  58. package/lib/components/VList/VListItem.mjs +34 -20
  59. package/lib/components/VList/VListItem.mjs.map +1 -1
  60. package/lib/components/VList/VListItem.sass +1 -1
  61. package/lib/components/VList/index.d.ts +20 -1
  62. package/lib/components/VMenu/VMenu.mjs +6 -5
  63. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  64. package/lib/components/VMenu/index.d.ts +57 -34
  65. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +4 -0
  66. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +1 -1
  67. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  68. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +4 -0
  69. package/lib/components/VNavigationDrawer/index.d.ts +3 -3
  70. package/lib/components/VNavigationDrawer/touch.mjs +7 -6
  71. package/lib/components/VNavigationDrawer/touch.mjs.map +1 -1
  72. package/lib/components/VOverlay/index.d.ts +34 -11
  73. package/lib/components/VOverlay/locationStrategies.mjs +40 -29
  74. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  75. package/lib/components/VOverlay/scrollStrategies.mjs +25 -16
  76. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  77. package/lib/components/VPagination/VPagination.mjs +1 -1
  78. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  79. package/lib/components/VProgressLinear/VProgressLinear.mjs +13 -1
  80. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  81. package/lib/components/VProgressLinear/index.d.ts +18 -0
  82. package/lib/components/VSelect/VSelect.mjs +4 -4
  83. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  84. package/lib/components/VSelect/index.d.ts +43 -20
  85. package/lib/components/VSlider/VSliderThumb.mjs +5 -1
  86. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  87. package/lib/components/VSnackbar/index.d.ts +42 -19
  88. package/lib/components/VTable/VTable.css +4 -4
  89. package/lib/components/VTable/VTable.sass +2 -2
  90. package/lib/components/VTooltip/VTooltip.mjs +4 -3
  91. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  92. package/lib/components/VTooltip/index.d.ts +57 -34
  93. package/lib/components/index.d.ts +247 -179
  94. package/lib/composables/defaults.mjs +1 -1
  95. package/lib/composables/defaults.mjs.map +1 -1
  96. package/lib/composables/filter.mjs +3 -3
  97. package/lib/composables/filter.mjs.map +1 -1
  98. package/lib/composables/form.mjs +0 -1
  99. package/lib/composables/form.mjs.map +1 -1
  100. package/lib/composables/teleport.mjs +6 -7
  101. package/lib/composables/teleport.mjs.map +1 -1
  102. package/lib/composables/toggleScope.mjs +14 -7
  103. package/lib/composables/toggleScope.mjs.map +1 -1
  104. package/lib/entry-bundler.mjs +1 -1
  105. package/lib/framework.mjs +1 -1
  106. package/lib/index.d.ts +17 -17
  107. package/lib/labs/VDataTable/VDataTable.mjs +10 -6
  108. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  109. package/lib/labs/VDataTable/VDataTableGroupHeaderRow.mjs +3 -3
  110. package/lib/labs/VDataTable/VDataTableGroupHeaderRow.mjs.map +1 -1
  111. package/lib/labs/VDataTable/VDataTableRows.mjs +36 -8
  112. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  113. package/lib/labs/VDataTable/VDataTableServer.mjs +23 -10
  114. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  115. package/lib/labs/VDataTable/VDataTableVirtual.mjs +6 -2
  116. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  117. package/lib/labs/VDataTable/composables/group.mjs +9 -4
  118. package/lib/labs/VDataTable/composables/group.mjs.map +1 -1
  119. package/lib/labs/VDataTable/composables/options.mjs +4 -2
  120. package/lib/labs/VDataTable/composables/options.mjs.map +1 -1
  121. package/lib/labs/VDataTable/composables/sort.mjs +3 -5
  122. package/lib/labs/VDataTable/composables/sort.mjs.map +1 -1
  123. package/lib/labs/VDataTable/index.d.ts +11 -0
  124. package/lib/labs/components.d.ts +11 -0
  125. package/lib/locale/adapters/vue-i18n.mjs +12 -2
  126. package/lib/locale/adapters/vue-i18n.mjs.map +1 -1
  127. package/lib/locale/en.mjs +2 -2
  128. package/lib/locale/en.mjs.map +1 -1
  129. package/lib/locale/sv.mjs +7 -7
  130. package/lib/locale/sv.mjs.map +1 -1
  131. package/lib/util/defineComponent.mjs +21 -18
  132. package/lib/util/defineComponent.mjs.map +1 -1
  133. package/lib/util/helpers.mjs +5 -1
  134. package/lib/util/helpers.mjs.map +1 -1
  135. package/package.json +2 -2
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.1.1
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
  }
@@ -4384,9 +4398,69 @@ const Ripple = {
4384
4398
  updated: updated$1
4385
4399
  };
4386
4400
 
4401
+ // Composables
4402
+
4403
+ // Types
4404
+
4405
+ const oppositeMap = {
4406
+ center: 'center',
4407
+ top: 'bottom',
4408
+ bottom: 'top',
4409
+ left: 'right',
4410
+ right: 'left'
4411
+ };
4412
+ const makeLocationProps = propsFactory({
4413
+ location: String
4414
+ }, 'location');
4415
+ function useLocation(props) {
4416
+ let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
4417
+ let offset = arguments.length > 2 ? arguments[2] : undefined;
4418
+ const {
4419
+ isRtl
4420
+ } = useRtl();
4421
+ const locationStyles = computed(() => {
4422
+ if (!props.location) return {};
4423
+ const {
4424
+ side,
4425
+ align
4426
+ } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
4427
+ function getOffset(side) {
4428
+ return offset ? offset(side) : 0;
4429
+ }
4430
+ const styles = {};
4431
+ if (side !== 'center') {
4432
+ if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
4433
+ }
4434
+ if (align !== 'center') {
4435
+ if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
4436
+ } else {
4437
+ if (side === 'center') styles.top = styles.left = '50%';else {
4438
+ styles[{
4439
+ top: 'left',
4440
+ bottom: 'left',
4441
+ left: 'top',
4442
+ right: 'top'
4443
+ }[side]] = '50%';
4444
+ }
4445
+ styles.transform = {
4446
+ top: 'translateX(-50%)',
4447
+ bottom: 'translateX(-50%)',
4448
+ left: 'translateY(-50%)',
4449
+ right: 'translateY(-50%)',
4450
+ center: 'translate(-50%, -50%)'
4451
+ }[side];
4452
+ }
4453
+ return styles;
4454
+ });
4455
+ return {
4456
+ locationStyles
4457
+ };
4458
+ }
4459
+
4387
4460
  const VProgressLinear = defineComponent({
4388
4461
  name: 'VProgressLinear',
4389
4462
  props: {
4463
+ absolute: Boolean,
4390
4464
  active: {
4391
4465
  type: Boolean,
4392
4466
  default: true
@@ -4416,6 +4490,9 @@ const VProgressLinear = defineComponent({
4416
4490
  stream: Boolean,
4417
4491
  striped: Boolean,
4418
4492
  roundedBar: Boolean,
4493
+ ...makeLocationProps({
4494
+ location: 'top'
4495
+ }),
4419
4496
  ...makeRoundedProps(),
4420
4497
  ...makeTagProps(),
4421
4498
  ...makeThemeProps()
@@ -4434,6 +4511,9 @@ const VProgressLinear = defineComponent({
4434
4511
  const {
4435
4512
  themeClasses
4436
4513
  } = provideTheme(props);
4514
+ const {
4515
+ locationStyles
4516
+ } = useLocation(props);
4437
4517
  const {
4438
4518
  textColorClasses,
4439
4519
  textColorStyles
@@ -4475,6 +4555,7 @@ const VProgressLinear = defineComponent({
4475
4555
  useRender(() => createVNode(props.tag, {
4476
4556
  "ref": intersectionRef,
4477
4557
  "class": ['v-progress-linear', {
4558
+ 'v-progress-linear--absolute': props.absolute,
4478
4559
  'v-progress-linear--active': props.active && isIntersecting.value,
4479
4560
  'v-progress-linear--reverse': isReversed.value,
4480
4561
  'v-progress-linear--rounded': props.rounded,
@@ -4482,8 +4563,11 @@ const VProgressLinear = defineComponent({
4482
4563
  'v-progress-linear--striped': props.striped
4483
4564
  }, roundedClasses.value, themeClasses.value],
4484
4565
  "style": {
4566
+ bottom: props.location === 'bottom' ? 0 : undefined,
4567
+ top: props.location === 'top' ? 0 : undefined,
4485
4568
  height: props.active ? convertToUnit(height.value) : 0,
4486
- '--v-progress-linear-height': convertToUnit(height.value)
4569
+ '--v-progress-linear-height': convertToUnit(height.value),
4570
+ ...locationStyles.value
4487
4571
  },
4488
4572
  "role": "progressbar",
4489
4573
  "aria-hidden": props.active ? 'false' : 'true',
@@ -4569,65 +4653,6 @@ function LoaderSlot(props, _ref) {
4569
4653
  }, null)]);
4570
4654
  }
4571
4655
 
4572
- // Composables
4573
-
4574
- // Types
4575
-
4576
- const oppositeMap = {
4577
- center: 'center',
4578
- top: 'bottom',
4579
- bottom: 'top',
4580
- left: 'right',
4581
- right: 'left'
4582
- };
4583
- const makeLocationProps = propsFactory({
4584
- location: String
4585
- }, 'location');
4586
- function useLocation(props) {
4587
- let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
4588
- let offset = arguments.length > 2 ? arguments[2] : undefined;
4589
- const {
4590
- isRtl
4591
- } = useRtl();
4592
- const locationStyles = computed(() => {
4593
- if (!props.location) return {};
4594
- const {
4595
- side,
4596
- align
4597
- } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
4598
- function getOffset(side) {
4599
- return offset ? offset(side) : 0;
4600
- }
4601
- const styles = {};
4602
- if (side !== 'center') {
4603
- if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
4604
- }
4605
- if (align !== 'center') {
4606
- if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
4607
- } else {
4608
- if (side === 'center') styles.top = styles.left = '50%';else {
4609
- styles[{
4610
- top: 'left',
4611
- bottom: 'left',
4612
- left: 'top',
4613
- right: 'top'
4614
- }[side]] = '50%';
4615
- }
4616
- styles.transform = {
4617
- top: 'translateX(-50%)',
4618
- bottom: 'translateX(-50%)',
4619
- left: 'translateY(-50%)',
4620
- right: 'translateY(-50%)',
4621
- center: 'translate(-50%, -50%)'
4622
- }[side];
4623
- }
4624
- return styles;
4625
- });
4626
- return {
4627
- locationStyles
4628
- };
4629
- }
4630
-
4631
4656
  // Utilities
4632
4657
 
4633
4658
  // Types
@@ -4833,21 +4858,31 @@ const VBtn = defineComponent({
4833
4858
  const group = useGroupItem(props, props.symbol, false);
4834
4859
  const link = useLink(props, attrs);
4835
4860
  const isActive = computed(() => {
4836
- var _link$isActive;
4837
- return props.active !== false && (props.active || ((_link$isActive = link.isActive) == null ? void 0 : _link$isActive.value) || (group == null ? void 0 : group.isSelected.value));
4861
+ if (props.active !== undefined) {
4862
+ return props.active;
4863
+ }
4864
+ if (link.isLink.value) {
4865
+ var _link$isActive;
4866
+ return (_link$isActive = link.isActive) == null ? void 0 : _link$isActive.value;
4867
+ }
4868
+ return group == null ? void 0 : group.isSelected.value;
4838
4869
  });
4839
4870
  const isDisabled = computed(() => (group == null ? void 0 : group.disabled.value) || props.disabled);
4840
4871
  const isElevated = computed(() => {
4841
4872
  return props.variant === 'elevated' && !(props.disabled || props.flat || props.border);
4842
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
+ });
4843
4878
  useSelectLink(link, group == null ? void 0 : group.select);
4844
4879
  useRender(() => {
4845
- var _slots$prepend, _slots$default, _slots$append, _slots$loader;
4880
+ var _link$isActive2, _link$isActive3, _slots$prepend, _slots$default, _slots$append, _slots$loader;
4846
4881
  const Tag = link.isLink.value ? 'a' : props.tag;
4847
- const hasColor = !group || group.isSelected.value;
4848
4882
  const hasPrepend = !!(props.prependIcon || slots.prepend);
4849
4883
  const hasAppend = !!(props.appendIcon || slots.append);
4850
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);
4851
4886
  return withDirectives(createVNode(Tag, {
4852
4887
  "type": Tag === 'a' ? undefined : 'button',
4853
4888
  "class": ['v-btn', group == null ? void 0 : group.selectedClass.value, {
@@ -4868,7 +4903,8 @@ const VBtn = defineComponent({
4868
4903
  if (isDisabled.value) return;
4869
4904
  (_link$navigate = link.navigate) == null ? void 0 : _link$navigate.call(link, e);
4870
4905
  group == null ? void 0 : group.toggle();
4871
- }
4906
+ },
4907
+ "value": valueAttr.value
4872
4908
  }, {
4873
4909
  default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && createVNode(VDefaultsProvider, {
4874
4910
  "key": "prepend",
@@ -5342,32 +5378,34 @@ const VField = genericComponent()({
5342
5378
  if (hasLabel.value) {
5343
5379
  const el = labelRef.value.$el;
5344
5380
  const targetEl = floatingLabelRef.value.$el;
5345
- const rect = nullifyTransforms(el);
5346
- const targetRect = targetEl.getBoundingClientRect();
5347
- const x = targetRect.x - rect.x;
5348
- const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2);
5349
- const targetWidth = targetRect.width / 0.75;
5350
- const width = Math.abs(targetWidth - rect.width) > 1 ? {
5351
- maxWidth: convertToUnit(targetWidth)
5352
- } : undefined;
5353
- const style = getComputedStyle(el);
5354
- const targetStyle = getComputedStyle(targetEl);
5355
- const duration = parseFloat(style.transitionDuration) * 1000 || 150;
5356
- const scale = parseFloat(targetStyle.getPropertyValue('--v-field-label-scale'));
5357
- const color = targetStyle.getPropertyValue('color');
5358
- el.style.visibility = 'visible';
5359
- targetEl.style.visibility = 'hidden';
5360
- animate(el, {
5361
- transform: `translate(${x}px, ${y}px) scale(${scale})`,
5362
- color,
5363
- ...width
5364
- }, {
5365
- duration,
5366
- easing: standardEasing,
5367
- direction: val ? 'normal' : 'reverse'
5368
- }).finished.then(() => {
5369
- el.style.removeProperty('visibility');
5370
- 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
+ });
5371
5409
  });
5372
5410
  }
5373
5411
  }, {
@@ -5556,7 +5594,6 @@ const FormKey = Symbol.for('vuetify:form');
5556
5594
  const makeFormProps = propsFactory({
5557
5595
  disabled: Boolean,
5558
5596
  fastFail: Boolean,
5559
- lazyValidation: Boolean,
5560
5597
  readonly: Boolean,
5561
5598
  modelValue: {
5562
5599
  type: Boolean,
@@ -6701,6 +6738,7 @@ const VChipGroup = defineComponent({
6701
6738
  provideDefaults({
6702
6739
  VChip: {
6703
6740
  color: toRef(props, 'color'),
6741
+ disabled: toRef(props, 'disabled'),
6704
6742
  filter: toRef(props, 'filter'),
6705
6743
  variant: toRef(props, 'variant')
6706
6744
  }
@@ -6750,7 +6788,10 @@ const VChip = defineComponent({
6750
6788
  default: '$complete'
6751
6789
  },
6752
6790
  label: Boolean,
6753
- link: Boolean,
6791
+ link: {
6792
+ type: Boolean,
6793
+ default: undefined
6794
+ },
6754
6795
  pill: Boolean,
6755
6796
  prependAvatar: String,
6756
6797
  prependIcon: IconValue,
@@ -6763,6 +6804,8 @@ const VChip = defineComponent({
6763
6804
  type: Boolean,
6764
6805
  default: true
6765
6806
  },
6807
+ onClick: EventProp,
6808
+ onClickOnce: EventProp,
6766
6809
  ...makeBorderProps(),
6767
6810
  ...makeDensityProps(),
6768
6811
  ...makeElevationProps(),
@@ -6816,7 +6859,8 @@ const VChip = defineComponent({
6816
6859
  const isActive = useProxiedModel(props, 'modelValue');
6817
6860
  const group = useGroupItem(props, VChipGroupSymbol, false);
6818
6861
  const link = useLink(props, attrs);
6819
- const isClickable = computed(() => !props.disabled && (!!group || link.isClickable.value || props.link));
6862
+ const isLink = computed(() => props.link !== false && link.isLink.value);
6863
+ const isClickable = computed(() => !props.disabled && props.link !== false && (!!group || props.link || link.isClickable.value));
6820
6864
  function onCloseClick(e) {
6821
6865
  isActive.value = false;
6822
6866
  emit('click:close', e);
@@ -6828,6 +6872,12 @@ const VChip = defineComponent({
6828
6872
  (_link$navigate = link.navigate) == null ? void 0 : _link$navigate.call(link, e);
6829
6873
  group == null ? void 0 : group.toggle();
6830
6874
  }
6875
+ function onKeyDown(e) {
6876
+ if (e.key === 'Enter' || e.key === ' ') {
6877
+ e.preventDefault();
6878
+ onClick(e);
6879
+ }
6880
+ }
6831
6881
  return () => {
6832
6882
  var _slots$default;
6833
6883
  const Tag = link.isLink.value ? 'a' : props.tag;
@@ -6848,7 +6898,9 @@ const VChip = defineComponent({
6848
6898
  "disabled": props.disabled || undefined,
6849
6899
  "draggable": props.draggable,
6850
6900
  "href": link.href.value,
6851
- "onClick": onClick
6901
+ "tabindex": isClickable.value ? 0 : undefined,
6902
+ "onClick": onClick,
6903
+ "onKeydown": isClickable.value && !isLink.value && onKeyDown
6852
6904
  }, {
6853
6905
  default: () => [genOverlays(isClickable.value, 'v-chip'), hasFilter && createVNode(VDefaultsProvider, {
6854
6906
  "key": "filter",
@@ -6945,9 +6997,9 @@ const VDivider = defineComponent({
6945
6997
  themeClasses
6946
6998
  } = provideTheme(props);
6947
6999
  const {
6948
- backgroundColorClasses,
6949
- backgroundColorStyles
6950
- } = useBackgroundColor(toRef(props, 'color'));
7000
+ textColorClasses,
7001
+ textColorStyles
7002
+ } = useTextColor(toRef(props, 'color'));
6951
7003
  const dividerStyles = computed(() => {
6952
7004
  const styles = {};
6953
7005
  if (props.length) {
@@ -6963,8 +7015,8 @@ const VDivider = defineComponent({
6963
7015
  'v-divider': true,
6964
7016
  'v-divider--inset': props.inset,
6965
7017
  'v-divider--vertical': props.vertical
6966
- }, themeClasses.value, backgroundColorClasses.value],
6967
- "style": [dividerStyles.value, backgroundColorStyles.value],
7018
+ }, themeClasses.value, textColorClasses.value],
7019
+ "style": [dividerStyles.value, textColorStyles.value],
6968
7020
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
6969
7021
  "role": `${attrs.role || 'separator'}`
6970
7022
  }, null));
@@ -7564,6 +7616,10 @@ const VListItem = genericComponent()({
7564
7616
  nav: Boolean,
7565
7617
  prependAvatar: String,
7566
7618
  prependIcon: IconValue,
7619
+ ripple: {
7620
+ type: Boolean,
7621
+ default: true
7622
+ },
7567
7623
  subtitle: [String, Number, Boolean],
7568
7624
  title: [String, Number, Boolean],
7569
7625
  value: null,
@@ -7670,7 +7726,7 @@ const VListItem = genericComponent()({
7670
7726
  }
7671
7727
  }
7672
7728
  useRender(() => {
7673
- var _slots$prepend, _slots$title, _slots$subtitle, _slots$default, _slots$append;
7729
+ var _slots$title, _slots$subtitle, _slots$default;
7674
7730
  const Tag = isLink.value ? 'a' : props.tag;
7675
7731
  const hasColor = !list || isSelected.value || isActive.value;
7676
7732
  const hasTitle = slots.title || props.title;
@@ -7693,7 +7749,18 @@ const VListItem = genericComponent()({
7693
7749
  "onClick": onClick,
7694
7750
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
7695
7751
  }, {
7696
- 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, {
7697
7764
  "key": "prepend",
7698
7765
  "defaults": {
7699
7766
  VAvatar: {
@@ -7709,14 +7776,8 @@ const VListItem = genericComponent()({
7709
7776
  }
7710
7777
  }
7711
7778
  }, {
7712
- default: () => [createVNode("div", {
7713
- "class": "v-list-item__prepend"
7714
- }, [props.prependAvatar && createVNode(VAvatar, {
7715
- "key": "prepend-avatar"
7716
- }, null), props.prependIcon && createVNode(VIcon, {
7717
- "key": "prepend-icon"
7718
- }, null), (_slots$prepend = slots.prepend) == null ? void 0 : _slots$prepend.call(slots, slotProps.value)])]
7719
- }), createVNode("div", {
7779
+ default: () => [slots.prepend(slotProps.value)]
7780
+ })]), createVNode("div", {
7720
7781
  "class": "v-list-item__content",
7721
7782
  "data-no-activator": ""
7722
7783
  }, [hasTitle && createVNode(VListItemTitle, {
@@ -7731,7 +7792,10 @@ const VListItem = genericComponent()({
7731
7792
  default: () => [((_slots$subtitle = slots.subtitle) == null ? void 0 : _slots$subtitle.call(slots, {
7732
7793
  subtitle: props.subtitle
7733
7794
  })) ?? props.subtitle]
7734
- }), (_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, {
7735
7799
  "key": "append",
7736
7800
  "defaults": {
7737
7801
  VAvatar: {
@@ -7747,15 +7811,17 @@ const VListItem = genericComponent()({
7747
7811
  }
7748
7812
  }
7749
7813
  }, {
7750
- default: () => [createVNode("div", {
7751
- "class": "v-list-item__append"
7752
- }, [(_slots$append = slots.append) == null ? void 0 : _slots$append.call(slots, slotProps.value), props.appendIcon && createVNode(VIcon, {
7753
- "key": "append-icon"
7754
- }, null), props.appendAvatar && createVNode(VAvatar, {
7755
- "key": "append-avatar"
7756
- }, null)])]
7757
- })]
7758
- }), [[resolveDirective("ripple"), isClickable.value]]);
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)])]
7824
+ }), [[resolveDirective("ripple"), isClickable.value && props.ripple]]);
7759
7825
  });
7760
7826
  return {};
7761
7827
  }
@@ -7968,9 +8034,12 @@ function useItems(props) {
7968
8034
 
7969
8035
  // Types
7970
8036
 
8037
+ function isPrimitive(value) {
8038
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
8039
+ }
7971
8040
  function transformItem(props, item) {
7972
8041
  const type = getPropertyFromItem(item, props.itemType, 'item');
7973
- const title = typeof item === 'string' ? item : getPropertyFromItem(item, props.itemTitle);
8042
+ const title = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemTitle);
7974
8043
  const value = getPropertyFromItem(item, props.itemValue, undefined);
7975
8044
  const children = getPropertyFromItem(item, props.itemChildren);
7976
8045
  const itemProps = props.itemProps === true ? pick(item, ['children'])[1] : getPropertyFromItem(item, props.itemProps);
@@ -8596,17 +8665,12 @@ const makeLocationStrategyProps = propsFactory({
8596
8665
  function useLocationStrategies(props, data) {
8597
8666
  const contentStyles = ref({});
8598
8667
  const updateLocation = ref();
8599
- let scope;
8600
- watchEffect(async () => {
8601
- var _scope;
8602
- (_scope = scope) == null ? void 0 : _scope.stop();
8603
- updateLocation.value = undefined;
8604
- if (!(IN_BROWSER && data.isActive.value && props.locationStrategy)) return;
8605
- scope = effectScope();
8606
- if (!(props.locationStrategy === 'connected')) {
8607
- await nextTick();
8608
- }
8609
- 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
+ });
8610
8674
  if (typeof props.locationStrategy === 'function') {
8611
8675
  var _props$locationStrate;
8612
8676
  updateLocation.value = (_props$locationStrate = props.locationStrategy(data, props, contentStyles)) == null ? void 0 : _props$locationStrate.updateLocation;
@@ -8615,16 +8679,14 @@ function useLocationStrategies(props, data) {
8615
8679
  updateLocation.value = (_locationStrategies$p = locationStrategies[props.locationStrategy](data, props, contentStyles)) == null ? void 0 : _locationStrategies$p.updateLocation;
8616
8680
  }
8617
8681
  });
8618
- });
8619
- IN_BROWSER && window.addEventListener('resize', onResize, {
8620
- passive: true
8621
- });
8622
- onScopeDispose(() => {
8623
- var _scope2;
8624
- IN_BROWSER && window.removeEventListener('resize', onResize);
8625
- updateLocation.value = undefined;
8626
- (_scope2 = scope) == null ? void 0 : _scope2.stop();
8627
- });
8682
+ window.addEventListener('resize', onResize, {
8683
+ passive: true
8684
+ });
8685
+ onScopeDispose(() => {
8686
+ window.removeEventListener('resize', onResize);
8687
+ updateLocation.value = undefined;
8688
+ });
8689
+ }
8628
8690
  function onResize(e) {
8629
8691
  var _updateLocation$value;
8630
8692
  (_updateLocation$value = updateLocation.value) == null ? void 0 : _updateLocation$value.call(updateLocation, e);
@@ -8918,13 +8980,30 @@ function connectedLocationStrategy(data, props, contentStyles) {
8918
8980
  maxWidth: convertToUnit(pixelCeil(clamp(available.x, minWidth.value === Infinity ? 0 : minWidth.value, maxWidth.value))),
8919
8981
  maxHeight: convertToUnit(pixelCeil(clamp(available.y, minHeight.value === Infinity ? 0 : minHeight.value, maxHeight.value)))
8920
8982
  });
8983
+ return {
8984
+ available,
8985
+ contentBox
8986
+ };
8921
8987
  }
8922
- watch(() => [preferredAnchor.value, preferredOrigin.value, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight], () => updateLocation(), {
8923
- immediate: !activatorFixed
8924
- });
8925
- if (activatorFixed) nextTick(() => updateLocation());
8926
- requestAnimationFrame(() => {
8927
- 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
+ }
8928
9007
  });
8929
9008
  return {
8930
9009
  updateLocation
@@ -8992,10 +9071,10 @@ function useScrollStrategies(props, data) {
8992
9071
  await nextTick();
8993
9072
  scope.run(() => {
8994
9073
  if (typeof props.scrollStrategy === 'function') {
8995
- props.scrollStrategy(data, props);
9074
+ props.scrollStrategy(data, props, scope);
8996
9075
  } else {
8997
9076
  var _scrollStrategies$pro;
8998
- (_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);
8999
9078
  }
9000
9079
  });
9001
9080
  });
@@ -9041,9 +9120,10 @@ function blockScrollStrategy(data, props) {
9041
9120
  }
9042
9121
  });
9043
9122
  }
9044
- function repositionScrollStrategy(data) {
9123
+ function repositionScrollStrategy(data, props, scope) {
9045
9124
  let slow = false;
9046
9125
  let raf = -1;
9126
+ let ric = -1;
9047
9127
  function update(e) {
9048
9128
  requestNewFrame(() => {
9049
9129
  var _data$updateLocation$, _data$updateLocation;
@@ -9053,21 +9133,29 @@ function repositionScrollStrategy(data) {
9053
9133
  slow = time / (1000 / 60) > 2;
9054
9134
  });
9055
9135
  }
9056
- bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
9057
- if (slow) {
9058
- // If the position calculation is slow,
9059
- // defer updates until scrolling is finished.
9060
- // Browsers usually fire one scroll event per frame so
9061
- // we just wait until we've got two frames without an event
9062
- cancelAnimationFrame(raf);
9063
- raf = requestAnimationFrame(() => {
9064
- 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 {
9065
9151
  update(e);
9066
- });
9152
+ }
9067
9153
  });
9068
- } else {
9069
- update(e);
9070
- }
9154
+ });
9155
+ });
9156
+ onScopeDispose(() => {
9157
+ cancelIdleCallback(ric);
9158
+ cancelAnimationFrame(raf);
9071
9159
  });
9072
9160
  }
9073
9161
 
@@ -9296,19 +9384,18 @@ function useTeleport(target) {
9296
9384
  warn(`Unable to locate target ${_target}`);
9297
9385
  return undefined;
9298
9386
  }
9299
- if (!useTeleport.cache.has(targetElement)) {
9300
- const el = document.createElement('div');
9301
- el.className = 'v-overlay-container';
9302
- targetElement.appendChild(el);
9303
- useTeleport.cache.set(targetElement, el);
9387
+ let container = targetElement.querySelector('.v-overlay-container');
9388
+ if (!container) {
9389
+ container = document.createElement('div');
9390
+ container.className = 'v-overlay-container';
9391
+ targetElement.appendChild(container);
9304
9392
  }
9305
- return useTeleport.cache.get(targetElement);
9393
+ return container;
9306
9394
  });
9307
9395
  return {
9308
9396
  teleportTarget
9309
9397
  };
9310
9398
  }
9311
- useTeleport.cache = new WeakMap();
9312
9399
 
9313
9400
  function defaultConditional() {
9314
9401
  return true;
@@ -9711,6 +9798,11 @@ const VMenu = genericComponent()({
9711
9798
  function onClickOutside() {
9712
9799
  parent == null ? void 0 : parent.closeParents();
9713
9800
  }
9801
+ const activatorProps = computed(() => mergeProps({
9802
+ 'aria-haspopup': 'menu',
9803
+ 'aria-expanded': String(isActive.value),
9804
+ 'aria-owns': id.value
9805
+ }, props.activatorProps));
9714
9806
  useRender(() => {
9715
9807
  const [overlayProps] = filterVOverlayProps(props);
9716
9808
  return createVNode(VOverlay, mergeProps({
@@ -9720,11 +9812,7 @@ const VMenu = genericComponent()({
9720
9812
  "modelValue": isActive.value,
9721
9813
  "onUpdate:modelValue": $event => isActive.value = $event,
9722
9814
  "absolute": true,
9723
- "activatorProps": mergeProps({
9724
- 'aria-haspopup': 'menu',
9725
- 'aria-expanded': String(isActive.value),
9726
- 'aria-owns': id.value
9727
- }, props.activatorProps),
9815
+ "activatorProps": activatorProps.value,
9728
9816
  "onClick:outside": onClickOutside
9729
9817
  }, scopeId), {
9730
9818
  activator: slots.activator,
@@ -9838,8 +9926,10 @@ const VSelect = genericComponent()({
9838
9926
  }
9839
9927
  function onKeydown(e) {
9840
9928
  if (props.readonly || form != null && form.isReadonly.value) return;
9841
- if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9929
+ if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
9842
9930
  e.preventDefault();
9931
+ }
9932
+ if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9843
9933
  menu.value = true;
9844
9934
  }
9845
9935
  if (['Escape', 'Tab'].includes(e.key)) {
@@ -9850,15 +9940,12 @@ const VSelect = genericComponent()({
9850
9940
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
9851
9941
  } else if (e.key === 'ArrowUp') {
9852
9942
  var _listRef$value2;
9853
- e.preventDefault();
9854
9943
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
9855
9944
  } else if (e.key === 'Home') {
9856
9945
  var _listRef$value3;
9857
- e.preventDefault();
9858
9946
  (_listRef$value3 = listRef.value) == null ? void 0 : _listRef$value3.focus('first');
9859
9947
  } else if (e.key === 'End') {
9860
9948
  var _listRef$value4;
9861
- e.preventDefault();
9862
9949
  (_listRef$value4 = listRef.value) == null ? void 0 : _listRef$value4.focus('last');
9863
9950
  }
9864
9951
  }
@@ -9924,6 +10011,7 @@ const VSelect = genericComponent()({
9924
10011
  "activator": "parent",
9925
10012
  "contentClass": "v-select__content",
9926
10013
  "eager": props.eager,
10014
+ "maxHeight": 310,
9927
10015
  "openOnClick": false,
9928
10016
  "closeOnContentClick": false,
9929
10017
  "transition": props.transition
@@ -10039,7 +10127,7 @@ function filterItems(items, query, options) {
10039
10127
  const customFiltersLength = Object.keys((options == null ? void 0 : options.customKeyFilter) ?? {}).length;
10040
10128
  if (!(items != null && items.length)) return array;
10041
10129
  loop: for (let i = 0; i < items.length; i++) {
10042
- const item = items[i].raw;
10130
+ const item = items[i];
10043
10131
  const customMatches = {};
10044
10132
  const defaultMatches = {};
10045
10133
  let match = -1;
@@ -10079,7 +10167,7 @@ function filterItems(items, query, options) {
10079
10167
  }
10080
10168
  return array;
10081
10169
  }
10082
- function useFilter(props, items, query) {
10170
+ function useFilter(props, items, query, options) {
10083
10171
  const strQuery = computed(() => typeof (query == null ? void 0 : query.value) !== 'string' && typeof (query == null ? void 0 : query.value) !== 'number' ? '' : String(query.value));
10084
10172
  const filteredItems = ref([]);
10085
10173
  const filteredMatches = ref(new Map());
@@ -10090,7 +10178,7 @@ function useFilter(props, items, query) {
10090
10178
  const results = filterItems(transformedItems, strQuery.value, {
10091
10179
  customKeyFilter: props.customKeyFilter,
10092
10180
  default: props.customFilter,
10093
- filterKeys: props.filterKeys,
10181
+ filterKeys: unref(options == null ? void 0 : options.filterKeys) ?? props.filterKeys,
10094
10182
  filterMode: props.filterMode,
10095
10183
  noFilter: props.noFilter
10096
10184
  });
@@ -10201,6 +10289,9 @@ const VAutocomplete = genericComponent()({
10201
10289
  }
10202
10290
  function onKeydown(e) {
10203
10291
  if (props.readonly || form != null && form.isReadonly.value) return;
10292
+ if (['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
10293
+ e.preventDefault();
10294
+ }
10204
10295
  if (['Enter', 'ArrowDown'].includes(e.key)) {
10205
10296
  menu.value = true;
10206
10297
  }
@@ -10212,11 +10303,9 @@ const VAutocomplete = genericComponent()({
10212
10303
  }
10213
10304
  if (e.key === 'ArrowDown') {
10214
10305
  var _listRef$value;
10215
- e.preventDefault();
10216
10306
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
10217
10307
  } else if (e.key === 'ArrowUp') {
10218
10308
  var _listRef$value2;
10219
- e.preventDefault();
10220
10309
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
10221
10310
  }
10222
10311
  }
@@ -10313,6 +10402,7 @@ const VAutocomplete = genericComponent()({
10313
10402
  "activator": "parent",
10314
10403
  "contentClass": "v-autocomplete__content",
10315
10404
  "eager": props.eager,
10405
+ "maxHeight": 310,
10316
10406
  "openOnClick": false,
10317
10407
  "closeOnContentClick": false,
10318
10408
  "transition": props.transition,
@@ -11021,7 +11111,10 @@ const VCard = defineComponent({
11021
11111
  },
11022
11112
  prependAvatar: String,
11023
11113
  prependIcon: IconValue,
11024
- ripple: Boolean,
11114
+ ripple: {
11115
+ type: Boolean,
11116
+ default: true
11117
+ },
11025
11118
  subtitle: String,
11026
11119
  text: String,
11027
11120
  title: String,
@@ -11142,7 +11235,7 @@ const VCard = defineComponent({
11142
11235
  }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots), slots.actions && createVNode(VCardActions, null, {
11143
11236
  default: slots.actions
11144
11237
  }), genOverlays(isClickable.value, 'v-card')]
11145
- }), [[resolveDirective("ripple"), isClickable.value]]);
11238
+ }), [[resolveDirective("ripple"), isClickable.value && props.ripple]]);
11146
11239
  });
11147
11240
  return {};
11148
11241
  }
@@ -12435,6 +12528,10 @@ const VSliderThumb = defineComponent({
12435
12528
  position: {
12436
12529
  type: Number,
12437
12530
  required: true
12531
+ },
12532
+ ripple: {
12533
+ type: Boolean,
12534
+ default: true
12438
12535
  }
12439
12536
  },
12440
12537
  emits: {
@@ -12535,7 +12632,7 @@ const VSliderThumb = defineComponent({
12535
12632
  }, null), withDirectives(createVNode("div", {
12536
12633
  "class": ['v-slider-thumb__ripple', textColorClasses.value],
12537
12634
  "style": textColorStyles.value
12538
- }, null), [[resolveDirective("ripple"), true, null, {
12635
+ }, null), [[resolveDirective("ripple"), props.ripple, null, {
12539
12636
  circle: true,
12540
12637
  center: true
12541
12638
  }]]), createVNode(VScaleTransition, {
@@ -13537,7 +13634,9 @@ const VCombobox = genericComponent()({
13537
13634
  if (props.readonly || form != null && form.isReadonly.value) return;
13538
13635
  const selectionStart = vTextFieldRef.value.selectionStart;
13539
13636
  const length = selected.value.length;
13540
- if (selectionIndex.value > -1) e.preventDefault();
13637
+ if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
13638
+ e.preventDefault();
13639
+ }
13541
13640
  if (['Enter', 'ArrowDown'].includes(e.key)) {
13542
13641
  menu.value = true;
13543
13642
  }
@@ -13549,11 +13648,9 @@ const VCombobox = genericComponent()({
13549
13648
  }
13550
13649
  if (e.key === 'ArrowDown') {
13551
13650
  var _listRef$value;
13552
- e.preventDefault();
13553
13651
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
13554
13652
  } else if (e.key === 'ArrowUp') {
13555
13653
  var _listRef$value2;
13556
- e.preventDefault();
13557
13654
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
13558
13655
  }
13559
13656
  if (!props.multiple) return;
@@ -13587,7 +13684,7 @@ const VCombobox = genericComponent()({
13587
13684
  vTextFieldRef.value.setSelectionRange(0, 0);
13588
13685
  }
13589
13686
  }
13590
- if (e.key === 'Enter') {
13687
+ if (e.key === 'Enter' && search.value) {
13591
13688
  select(transformItem$1(props, search.value));
13592
13689
  search.value = '';
13593
13690
  }
@@ -13676,6 +13773,7 @@ const VCombobox = genericComponent()({
13676
13773
  "activator": "parent",
13677
13774
  "contentClass": "v-combobox__content",
13678
13775
  "eager": props.eager,
13776
+ "maxHeight": 310,
13679
13777
  "openOnClick": false,
13680
13778
  "closeOnContentClick": false,
13681
13779
  "transition": props.transition,
@@ -13847,6 +13945,10 @@ const VDialog = genericComponent()({
13847
13945
  });
13848
13946
  }
13849
13947
  });
13948
+ const activatorProps = computed(() => mergeProps({
13949
+ 'aria-haspopup': 'dialog',
13950
+ 'aria-expanded': String(isActive.value)
13951
+ }, props.activatorProps));
13850
13952
  useRender(() => {
13851
13953
  const [overlayProps] = filterVOverlayProps(props);
13852
13954
  return createVNode(VOverlay, mergeProps({
@@ -13860,10 +13962,7 @@ const VDialog = genericComponent()({
13860
13962
  "onUpdate:modelValue": $event => isActive.value = $event,
13861
13963
  "aria-role": "dialog",
13862
13964
  "aria-modal": "true",
13863
- "activatorProps": mergeProps({
13864
- 'aria-haspopup': 'dialog',
13865
- 'aria-expanded': String(isActive.value)
13866
- }, props.activatorProps)
13965
+ "activatorProps": activatorProps.value
13867
13966
  }, scopeId), {
13868
13967
  activator: slots.activator,
13869
13968
  default: function () {
@@ -14212,12 +14311,15 @@ const VFileInput = defineComponent({
14212
14311
  onFocus();
14213
14312
  nextTick(() => {
14214
14313
  model.value = [];
14215
- if (inputRef != null && inputRef.value) {
14216
- inputRef.value.value = '';
14217
- }
14218
14314
  callEvent(props['onClick:clear'], e);
14219
14315
  });
14220
14316
  }
14317
+ watch(model, newValue => {
14318
+ const hasModelReset = !Array.isArray(newValue) || !newValue.length;
14319
+ if (hasModelReset && inputRef.value) {
14320
+ inputRef.value.value = '';
14321
+ }
14322
+ });
14221
14323
  useRender(() => {
14222
14324
  const hasCounter = !!(slots.counter || props.counter);
14223
14325
  const hasDetails = !!(hasCounter || slots.details);
@@ -15208,7 +15310,7 @@ function useTouch(_ref) {
15208
15310
  window.removeEventListener('touchmove', onTouchmove);
15209
15311
  window.removeEventListener('touchend', onTouchend);
15210
15312
  });
15211
- const isHorizontal = computed(() => position.value !== 'bottom');
15313
+ const isHorizontal = computed(() => ['left', 'right'].includes(position.value));
15212
15314
  const {
15213
15315
  addMovement,
15214
15316
  endTouch,
@@ -15220,11 +15322,11 @@ function useTouch(_ref) {
15220
15322
  const offset = ref(0);
15221
15323
  let start;
15222
15324
  function getOffset(pos, active) {
15223
- 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);
15224
15326
  }
15225
15327
  function getProgress(pos) {
15226
15328
  let limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
15227
- 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();
15228
15330
  return limit ? Math.max(0, Math.min(1, progress)) : progress;
15229
15331
  }
15230
15332
  function onTouchstart(e) {
@@ -15232,8 +15334,8 @@ function useTouch(_ref) {
15232
15334
  const touchX = e.changedTouches[0].clientX;
15233
15335
  const touchY = e.changedTouches[0].clientY;
15234
15336
  const touchZone = 25;
15235
- const inTouchZone = position.value === 'left' ? touchX < touchZone : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone : oops();
15236
- 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());
15237
15339
  if (inTouchZone || inElement || isActive.value && isTemporary.value) {
15238
15340
  maybeDragging = true;
15239
15341
  start = [touchX, touchY];
@@ -15285,6 +15387,7 @@ function useTouch(_ref) {
15285
15387
  isActive.value = velocity.direction === ({
15286
15388
  left: 'right',
15287
15389
  right: 'left',
15390
+ top: 'down',
15288
15391
  bottom: 'up'
15289
15392
  }[position.value] || oops());
15290
15393
  } else {
@@ -15293,7 +15396,7 @@ function useTouch(_ref) {
15293
15396
  }
15294
15397
  const dragStyles = computed(() => {
15295
15398
  return isDragging.value ? {
15296
- 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(),
15297
15400
  transition: 'none'
15298
15401
  } : undefined;
15299
15402
  });
@@ -15309,7 +15412,7 @@ function oops() {
15309
15412
 
15310
15413
  // Types
15311
15414
 
15312
- const locations = ['start', 'end', 'left', 'right', 'bottom'];
15415
+ const locations = ['start', 'end', 'left', 'right', 'top', 'bottom'];
15313
15416
  const VNavigationDrawer = defineComponent({
15314
15417
  name: 'VNavigationDrawer',
15315
15418
  props: {
@@ -15766,7 +15869,7 @@ const VPagination = defineComponent({
15766
15869
  disabled: !!props.disabled || props.length < 2,
15767
15870
  color: isActive ? props.activeColor : props.color,
15768
15871
  ariaCurrent: isActive,
15769
- ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, index + 1),
15872
+ ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
15770
15873
  onClick: e => setValue(e, item)
15771
15874
  }
15772
15875
  };
@@ -17945,6 +18048,9 @@ const VTooltip = genericComponent()({
17945
18048
  if (props.transition) return props.transition;
17946
18049
  return isActive.value ? 'scale-transition' : 'fade-transition';
17947
18050
  });
18051
+ const activatorProps = computed(() => mergeProps({
18052
+ 'aria-describedby': id.value
18053
+ }, props.activatorProps));
17948
18054
  useRender(() => {
17949
18055
  const [overlayProps] = filterVOverlayProps(props);
17950
18056
  return createVNode(VOverlay, mergeProps({
@@ -17961,9 +18067,7 @@ const VTooltip = genericComponent()({
17961
18067
  "persistent": true,
17962
18068
  "role": "tooltip",
17963
18069
  "eager": true,
17964
- "activatorProps": mergeProps({
17965
- 'aria-describedby': id.value
17966
- }, props.activatorProps),
18070
+ "activatorProps": activatorProps.value,
17967
18071
  "_disableGlobalStack": true
17968
18072
  }, scopeId), {
17969
18073
  activator: slots.activator,
@@ -18262,10 +18366,9 @@ const VDataTableSortSymbol = Symbol.for('vuetify:data-table-sort');
18262
18366
  function createSort(props) {
18263
18367
  const sortBy = useProxiedModel(props, 'sortBy');
18264
18368
  const toggleSort = key => {
18265
- var _sortBy$value;
18266
- let newSortBy = ((_sortBy$value = sortBy.value) == null ? void 0 : _sortBy$value.map(x => ({
18369
+ let newSortBy = sortBy.value.map(x => ({
18267
18370
  ...x
18268
- }))) ?? [];
18371
+ })) ?? [];
18269
18372
  const item = newSortBy.find(x => x.key === key);
18270
18373
  if (!item) {
18271
18374
  if (props.multiSort) newSortBy = [...newSortBy, {
@@ -18307,8 +18410,7 @@ function useSortedItems(items, sortBy, columns) {
18307
18410
  }, {});
18308
18411
  });
18309
18412
  const sortedItems = computed(() => {
18310
- var _sortBy$value2;
18311
- if (!((_sortBy$value2 = sortBy.value) != null && _sortBy$value2.length)) return items.value;
18413
+ if (!sortBy.value.length) return items.value;
18312
18414
  return sortItems(items.value, sortBy.value, 'en', customSorters.value);
18313
18415
  });
18314
18416
  return {
@@ -18507,9 +18609,13 @@ function createGroupBy(props, groupBy, sortBy) {
18507
18609
  order: val.order ?? false
18508
18610
  })).concat(sortBy.value);
18509
18611
  });
18510
- function toggleGroup(group, value) {
18511
- const open = value == null ? !opened.value.has(group) : value;
18512
- if (open) opened.value.add(group);else opened.value.delete(group);
18612
+ function isGroupOpen(group) {
18613
+ return opened.value.has(group.id);
18614
+ }
18615
+ function toggleGroup(group) {
18616
+ const newOpened = new Set(opened.value);
18617
+ if (!isGroupOpen(group)) newOpened.add(group.id);else newOpened.delete(group.id);
18618
+ opened.value = newOpened;
18513
18619
  }
18514
18620
  function extractRows(items) {
18515
18621
  function dive(group) {
@@ -18542,7 +18648,8 @@ function createGroupBy(props, groupBy, sortBy) {
18542
18648
  toggleGroup,
18543
18649
  opened,
18544
18650
  groupBy,
18545
- extractRows
18651
+ extractRows,
18652
+ isGroupOpen
18546
18653
  };
18547
18654
  provide(VDataTableGroupSymbol, data);
18548
18655
  return data;
@@ -18628,7 +18735,7 @@ const VDataTableGroupHeaderRow = defineComponent({
18628
18735
  slots
18629
18736
  } = _ref;
18630
18737
  const {
18631
- opened,
18738
+ isGroupOpen,
18632
18739
  toggleGroup,
18633
18740
  extractRows
18634
18741
  } = useGroupBy();
@@ -18651,8 +18758,8 @@ const VDataTableGroupHeaderRow = defineComponent({
18651
18758
  }, [columns.value.map(column => {
18652
18759
  if (column.key === 'data-table-group') {
18653
18760
  var _slots$dataTableGro;
18654
- const icon = opened.value.has(props.item.id) ? '$expand' : '$next';
18655
- const onClick = () => toggleGroup(props.item.id);
18761
+ const icon = isGroupOpen(props.item) ? '$expand' : '$next';
18762
+ const onClick = () => toggleGroup(props.item);
18656
18763
  return ((_slots$dataTableGro = slots['data-table-group']) == null ? void 0 : _slots$dataTableGro.call(slots, {
18657
18764
  item: props.item,
18658
18765
  count: rows.value.length,
@@ -18845,10 +18952,18 @@ const VDataTableRows = defineComponent({
18845
18952
  columns
18846
18953
  } = useHeaders();
18847
18954
  const {
18848
- expanded,
18849
- expand,
18850
- expandOnClick
18955
+ expandOnClick,
18956
+ toggleExpand,
18957
+ isExpanded
18851
18958
  } = useExpanded();
18959
+ const {
18960
+ isSelected,
18961
+ toggleSelect
18962
+ } = useSelection();
18963
+ const {
18964
+ toggleGroup,
18965
+ isGroupOpen
18966
+ } = useGroupBy();
18852
18967
  const {
18853
18968
  t
18854
18969
  } = useLocale();
@@ -18867,23 +18982,41 @@ const VDataTableRows = defineComponent({
18867
18982
  })), props.items.map((item, index) => {
18868
18983
  var _slots$expandedRow;
18869
18984
  if (item.type === 'group-header') {
18870
- return createVNode(VDataTableGroupHeaderRow, {
18985
+ return slots['group-header'] ? slots['group-header']({
18986
+ index,
18987
+ item,
18988
+ columns: columns.value,
18989
+ isExpanded,
18990
+ toggleExpand,
18991
+ isSelected,
18992
+ toggleSelect,
18993
+ toggleGroup,
18994
+ isGroupOpen
18995
+ }) : createVNode(VDataTableGroupHeaderRow, {
18871
18996
  "key": `group-header_${item.id}`,
18872
18997
  "item": item
18873
18998
  }, slots);
18874
18999
  }
18875
- return createVNode(Fragment, null, [createVNode(VDataTableRow, {
19000
+ return createVNode(Fragment, null, [slots.item ? slots.item({
19001
+ index,
19002
+ item,
19003
+ columns: columns.value,
19004
+ isExpanded,
19005
+ toggleExpand,
19006
+ isSelected,
19007
+ toggleSelect
19008
+ }) : createVNode(VDataTableRow, {
18876
19009
  "key": `item_${item.value}`,
18877
19010
  "onClick": event => {
18878
19011
  if (expandOnClick.value) {
18879
- expand(item, !expanded.value.has(item.value));
19012
+ toggleExpand(item.value);
18880
19013
  }
18881
19014
  emit('click:row', event, {
18882
19015
  item
18883
19016
  });
18884
19017
  },
18885
19018
  "item": item
18886
- }, slots), expanded.value.has(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, {
18887
19020
  item,
18888
19021
  columns: columns.value
18889
19022
  }))]);
@@ -19094,7 +19227,8 @@ function useOptions(_ref) {
19094
19227
  sortBy,
19095
19228
  startIndex,
19096
19229
  stopIndex,
19097
- pageCount
19230
+ pageCount,
19231
+ groupBy
19098
19232
  } = _ref;
19099
19233
  const vm = getCurrentInstance('VDataTable');
19100
19234
  const options = computed(() => ({
@@ -19103,7 +19237,8 @@ function useOptions(_ref) {
19103
19237
  startIndex: startIndex.value,
19104
19238
  stopIndex: stopIndex.value,
19105
19239
  pageCount: pageCount.value,
19106
- sortBy: sortBy.value
19240
+ sortBy: sortBy.value,
19241
+ groupBy: groupBy.value
19107
19242
  }));
19108
19243
 
19109
19244
  // Reset page when sorting changes
@@ -19181,9 +19316,12 @@ const VDataTable = defineComponent({
19181
19316
  const {
19182
19317
  items
19183
19318
  } = useDataTableItems(props, columns);
19319
+ const filterKeys = computed(() => columns.value.map(c => 'columns.' + c.key));
19184
19320
  const {
19185
19321
  filteredItems
19186
- } = useFilter(props, items, toRef(props, 'search'));
19322
+ } = useFilter(props, items, toRef(props, 'search'), {
19323
+ filterKeys
19324
+ });
19187
19325
  const {
19188
19326
  sortBy
19189
19327
  } = createSort(props);
@@ -19217,7 +19355,8 @@ const VDataTable = defineComponent({
19217
19355
  sortBy,
19218
19356
  pageCount,
19219
19357
  startIndex,
19220
- stopIndex
19358
+ stopIndex,
19359
+ groupBy
19221
19360
  });
19222
19361
  provideDefaults({
19223
19362
  VDataTableRows: {
@@ -19234,7 +19373,7 @@ const VDataTable = defineComponent({
19234
19373
  "height": props.height
19235
19374
  }, {
19236
19375
  top: slots.top,
19237
- default: slots.default ? slots.default() : () => {
19376
+ default: slots.default ?? (() => {
19238
19377
  var _slots$colgroup, _slots$thead, _slots$tbody, _slots$tfoot;
19239
19378
  return createVNode(Fragment, null, [(_slots$colgroup = slots.colgroup) == null ? void 0 : _slots$colgroup.call(slots, {
19240
19379
  columns
@@ -19245,10 +19384,10 @@ const VDataTable = defineComponent({
19245
19384
  "items": paginatedItems.value,
19246
19385
  "onClick:row": (event, value) => emit('click:row', event, value)
19247
19386
  }, slots)]), (_slots$tbody = slots.tbody) == null ? void 0 : _slots$tbody.call(slots), (_slots$tfoot = slots.tfoot) == null ? void 0 : _slots$tfoot.call(slots)]);
19248
- },
19249
- bottom: slots.bottom ? slots.bottom() : () => createVNode(VDataTableFooter, null, {
19387
+ }),
19388
+ bottom: slots.bottom ?? (() => createVNode(VDataTableFooter, null, {
19250
19389
  prepend: slots['footer.prepend']
19251
- })
19390
+ }))
19252
19391
  }));
19253
19392
  return {};
19254
19393
  }
@@ -19373,9 +19512,12 @@ const VDataTableVirtual = defineComponent({
19373
19512
  const {
19374
19513
  items
19375
19514
  } = useDataTableItems(props, columns);
19515
+ const filterKeys = computed(() => columns.value.map(c => 'columns.' + c.key));
19376
19516
  const {
19377
19517
  filteredItems
19378
- } = useFilter(props, items, toRef(props, 'search'));
19518
+ } = useFilter(props, items, toRef(props, 'search'), {
19519
+ filterKeys
19520
+ });
19379
19521
  const {
19380
19522
  sortBy
19381
19523
  } = createSort(props);
@@ -19411,7 +19553,8 @@ const VDataTableVirtual = defineComponent({
19411
19553
  startIndex: ref(0),
19412
19554
  stopIndex: computed(() => flatItems.value.length - 1),
19413
19555
  pageCount: ref(1),
19414
- itemsPerPage: ref(-1)
19556
+ itemsPerPage: ref(-1),
19557
+ groupBy
19415
19558
  });
19416
19559
  provideDefaults({
19417
19560
  VDataTableRows: {
@@ -19487,7 +19630,8 @@ const VDataTableServer = defineComponent({
19487
19630
  ...makeDataTableItemProps(),
19488
19631
  ...makeDataTableSelectProps(),
19489
19632
  ...makeDataTableSortProps(),
19490
- ...makeDataTablePaginateProps()
19633
+ ...makeDataTablePaginateProps(),
19634
+ ...makeDataTableGroupProps()
19491
19635
  },
19492
19636
  emits: {
19493
19637
  'update:modelValue': value => true,
@@ -19496,6 +19640,7 @@ const VDataTableServer = defineComponent({
19496
19640
  'update:sortBy': sortBy => true,
19497
19641
  'update:options': options => true,
19498
19642
  'update:expanded': options => true,
19643
+ 'update:groupBy': value => true,
19499
19644
  'click:row': (event, value) => true
19500
19645
  },
19501
19646
  setup(props, _ref) {
@@ -19503,10 +19648,12 @@ const VDataTableServer = defineComponent({
19503
19648
  emit,
19504
19649
  slots
19505
19650
  } = _ref;
19651
+ const groupBy = useProxiedModel(props, 'groupBy');
19506
19652
  createExpanded(props);
19507
19653
  const {
19508
19654
  columns
19509
19655
  } = createHeaders(props, {
19656
+ groupBy,
19510
19657
  showSelect: toRef(props, 'showSelect'),
19511
19658
  showExpand: toRef(props, 'showExpand')
19512
19659
  });
@@ -19517,6 +19664,9 @@ const VDataTableServer = defineComponent({
19517
19664
  sortBy,
19518
19665
  toggleSort
19519
19666
  } = createSort(props);
19667
+ const {
19668
+ opened
19669
+ } = createGroupBy(props, groupBy, sortBy);
19520
19670
  const {
19521
19671
  page,
19522
19672
  itemsPerPage,
@@ -19524,6 +19674,9 @@ const VDataTableServer = defineComponent({
19524
19674
  stopIndex,
19525
19675
  pageCount
19526
19676
  } = createPagination(props, items);
19677
+ const {
19678
+ flatItems
19679
+ } = useGroupedItems(items, groupBy, opened);
19527
19680
  createSelection(props, items);
19528
19681
  useOptions({
19529
19682
  page,
@@ -19531,7 +19684,8 @@ const VDataTableServer = defineComponent({
19531
19684
  sortBy,
19532
19685
  startIndex,
19533
19686
  stopIndex,
19534
- pageCount
19687
+ pageCount,
19688
+ groupBy
19535
19689
  });
19536
19690
  provide('v-data-table', {
19537
19691
  toggleSort,
@@ -19554,7 +19708,7 @@ const VDataTableServer = defineComponent({
19554
19708
  "height": props.height
19555
19709
  }, {
19556
19710
  top: slots.top,
19557
- default: slots.default ? slots.default() : () => {
19711
+ default: slots.default ?? (() => {
19558
19712
  var _slots$thead, _slots$tbody, _slots$tfoot;
19559
19713
  return createVNode(Fragment, null, [createVNode("thead", {
19560
19714
  "class": "v-data-table__thead",
@@ -19567,13 +19721,13 @@ const VDataTableServer = defineComponent({
19567
19721
  "class": "v-data-table__tbody",
19568
19722
  "role": "rowgroup"
19569
19723
  }, [slots.body ? slots.body() : createVNode(VDataTableRows, {
19570
- "items": items.value,
19724
+ "items": flatItems.value,
19571
19725
  "onClick:row": (event, value) => emit('click:row', event, value)
19572
19726
  }, slots)]), (_slots$tbody = slots.tbody) == null ? void 0 : _slots$tbody.call(slots), (_slots$tfoot = slots.tfoot) == null ? void 0 : _slots$tfoot.call(slots)]);
19573
- },
19574
- bottom: slots.bottom ? slots.bottom() : () => createVNode(VDataTableFooter, null, {
19727
+ }),
19728
+ bottom: slots.bottom ?? (() => createVNode(VDataTableFooter, null, {
19575
19729
  prepend: slots['footer.prepend']
19576
- })
19730
+ }))
19577
19731
  }));
19578
19732
  }
19579
19733
  });
@@ -20073,7 +20227,7 @@ function createVuetify$1() {
20073
20227
  locale
20074
20228
  };
20075
20229
  }
20076
- const version$1 = "3.1.1";
20230
+ const version$1 = "3.1.3";
20077
20231
  createVuetify$1.version = version$1;
20078
20232
 
20079
20233
  // Vue's inject() can only be used in setup
@@ -20086,7 +20240,7 @@ function inject(key) {
20086
20240
  }
20087
20241
  }
20088
20242
 
20089
- const version = "3.1.1";
20243
+ const version = "3.1.3";
20090
20244
 
20091
20245
  const createVuetify = function () {
20092
20246
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};