@vuetify/nightly 3.2.0-next-20230114.0 → 4.0.0-dev-20230206.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/CHANGELOG.md +203 -11
  2. package/dist/json/attributes.json +7202 -0
  3. package/dist/json/importMap-labs.json +4 -0
  4. package/dist/json/importMap.json +8 -8
  5. package/dist/json/tags.json +2492 -0
  6. package/dist/json/web-types.json +24081 -0
  7. package/dist/vuetify-labs.css +270 -262
  8. package/dist/vuetify-labs.d.ts +399 -176
  9. package/dist/vuetify-labs.esm.js +362 -278
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +361 -277
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +206 -198
  14. package/dist/vuetify.d.ts +329 -178
  15. package/dist/vuetify.esm.js +329 -248
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +328 -247
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +700 -689
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/blueprints/index.d.ts +2 -2
  23. package/lib/blueprints/md1.d.ts +2 -2
  24. package/lib/blueprints/md2.d.ts +2 -2
  25. package/lib/blueprints/md3.d.ts +2 -2
  26. package/lib/components/VAutocomplete/VAutocomplete.mjs +3 -2
  27. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  28. package/lib/components/VAutocomplete/index.d.ts +43 -20
  29. package/lib/components/VBottomSheet/VBottomSheet.mjs +1 -4
  30. package/lib/components/VBottomSheet/VBottomSheet.mjs.map +1 -1
  31. package/lib/components/VBtn/VBtn.css +7 -7
  32. package/lib/components/VBtn/VBtn.mjs +16 -5
  33. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  34. package/lib/components/VBtnGroup/VBtnGroup.mjs +15 -11
  35. package/lib/components/VBtnGroup/VBtnGroup.mjs.map +1 -1
  36. package/lib/components/VBtnGroup/index.d.ts +2 -1
  37. package/lib/components/VBtnToggle/VBtnToggle.mjs +9 -5
  38. package/lib/components/VBtnToggle/VBtnToggle.mjs.map +1 -1
  39. package/lib/components/VBtnToggle/index.d.ts +122 -1
  40. package/lib/components/VCalendar/VCalendar.mjs +3 -0
  41. package/lib/components/VCalendar/VCalendar.mjs.map +1 -1
  42. package/lib/components/VCalendar/VCalendarCategory.sass +9 -3
  43. package/lib/components/VCalendar/VCalendarDaily.mjs +20 -8
  44. package/lib/components/VCalendar/VCalendarDaily.mjs.map +1 -1
  45. package/lib/components/VCalendar/VCalendarWeekly.mjs +25 -5
  46. package/lib/components/VCalendar/VCalendarWeekly.mjs.map +1 -1
  47. package/lib/components/VCalendar/mixins/calendar-with-events.mjs +20 -16
  48. package/lib/components/VCalendar/mixins/calendar-with-events.mjs.map +1 -1
  49. package/lib/components/VCalendar/mixins/mouse.mjs +16 -30
  50. package/lib/components/VCalendar/mixins/mouse.mjs.map +1 -1
  51. package/lib/components/VCard/VCard.css +7 -7
  52. package/lib/components/VChip/VChip.css +7 -7
  53. package/lib/components/VCombobox/VCombobox.mjs +4 -4
  54. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  55. package/lib/components/VCombobox/index.d.ts +43 -20
  56. package/lib/components/VData/VData.mjs +2 -4
  57. package/lib/components/VData/VData.mjs.map +1 -1
  58. package/lib/components/VDatePicker/VDatePicker.mjs +7 -5
  59. package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
  60. package/lib/components/VDefaultsProvider/index.d.ts +5 -4
  61. package/lib/components/VDialog/VDialog.mjs +6 -5
  62. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  63. package/lib/components/VDialog/index.d.ts +57 -34
  64. package/lib/components/VDivider/VDivider.mjs +6 -6
  65. package/lib/components/VDivider/VDivider.mjs.map +1 -1
  66. package/lib/components/VExpansionPanel/VExpansionPanel.css +7 -7
  67. package/lib/components/VField/VField.css +2 -2
  68. package/lib/components/VField/VField.mjs +28 -26
  69. package/lib/components/VField/VField.mjs.map +1 -1
  70. package/lib/components/VField/VField.sass +2 -2
  71. package/lib/components/VFileInput/VFileInput.css +1 -0
  72. package/lib/components/VFileInput/VFileInput.mjs +7 -4
  73. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  74. package/lib/components/VFileInput/VFileInput.sass +1 -0
  75. package/lib/components/VForm/index.d.ts +0 -3
  76. package/lib/components/VList/VList.mjs +4 -1
  77. package/lib/components/VList/VList.mjs.map +1 -1
  78. package/lib/components/VList/VListItem.css +8 -8
  79. package/lib/components/VList/VListItem.mjs +29 -19
  80. package/lib/components/VList/VListItem.mjs.map +1 -1
  81. package/lib/components/VList/VListItem.sass +1 -1
  82. package/lib/components/VMenu/VMenu.mjs +6 -5
  83. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  84. package/lib/components/VMenu/index.d.ts +57 -34
  85. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +4 -0
  86. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +1 -1
  87. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  88. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +4 -0
  89. package/lib/components/VNavigationDrawer/index.d.ts +3 -3
  90. package/lib/components/VNavigationDrawer/touch.mjs +7 -6
  91. package/lib/components/VNavigationDrawer/touch.mjs.map +1 -1
  92. package/lib/components/VOtpInput/VOtpInput.mjs +22 -46
  93. package/lib/components/VOtpInput/VOtpInput.mjs.map +1 -1
  94. package/lib/components/VOverflowBtn/VOverflowBtn.mjs +3 -0
  95. package/lib/components/VOverflowBtn/VOverflowBtn.mjs.map +1 -1
  96. package/lib/components/VOverlay/index.d.ts +34 -11
  97. package/lib/components/VOverlay/locationStrategies.mjs +40 -29
  98. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  99. package/lib/components/VOverlay/scrollStrategies.mjs +25 -16
  100. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  101. package/lib/components/VPagination/VPagination.mjs +1 -1
  102. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  103. package/lib/components/VProgressLinear/VProgressLinear.mjs +13 -1
  104. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  105. package/lib/components/VProgressLinear/index.d.ts +18 -0
  106. package/lib/components/VSelect/VSelect.mjs +3 -4
  107. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  108. package/lib/components/VSelect/index.d.ts +43 -20
  109. package/lib/components/VSelectionControl/VSelectionControl.css +2 -2
  110. package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +1 -1
  111. package/lib/components/VSnackbar/index.d.ts +42 -19
  112. package/lib/components/VStepper/VStepper.sass +6 -6
  113. package/lib/components/VStepper/VStepperStep.mjs +12 -2
  114. package/lib/components/VStepper/VStepperStep.mjs.map +1 -1
  115. package/lib/components/VTable/VTable.css +4 -4
  116. package/lib/components/VTable/VTable.sass +2 -2
  117. package/lib/components/VTimePicker/VTimePicker.mjs.map +1 -1
  118. package/lib/components/VTimeline/_mixins.sass +1 -1
  119. package/lib/components/VTooltip/VTooltip.mjs +4 -3
  120. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  121. package/lib/components/VTooltip/index.d.ts +57 -34
  122. package/lib/components/VTreeview/VTreeview.mjs +1 -1
  123. package/lib/components/VTreeview/VTreeview.mjs.map +1 -1
  124. package/lib/components/index.d.ts +328 -176
  125. package/lib/composables/defaults.mjs +1 -1
  126. package/lib/composables/defaults.mjs.map +1 -1
  127. package/lib/composables/filter.mjs +3 -3
  128. package/lib/composables/filter.mjs.map +1 -1
  129. package/lib/composables/form.mjs +0 -1
  130. package/lib/composables/form.mjs.map +1 -1
  131. package/lib/composables/toggleScope.mjs +14 -7
  132. package/lib/composables/toggleScope.mjs.map +1 -1
  133. package/lib/directives/ripple/VRipple.css +3 -0
  134. package/lib/directives/ripple/VRipple.sass +3 -0
  135. package/lib/directives/ripple/_variables.scss +1 -1
  136. package/lib/directives/ripple/index.mjs +2 -7
  137. package/lib/directives/ripple/index.mjs.map +1 -1
  138. package/lib/entry-bundler.mjs +1 -1
  139. package/lib/entry-bundler.mjs.map +1 -1
  140. package/lib/framework.mjs +1 -1
  141. package/lib/framework.mjs.map +1 -1
  142. package/lib/index.d.ts +4 -4
  143. package/lib/labs/VDataTable/VDataTable.mjs +6 -6
  144. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  145. package/lib/labs/VDataTable/VDataTableFooter.mjs +1 -1
  146. package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -1
  147. package/lib/labs/VDataTable/VDataTableRows.mjs +1 -1
  148. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  149. package/lib/labs/VDataTable/VDataTableServer.mjs +19 -12
  150. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  151. package/lib/labs/VDataTable/VDataTableVirtual.mjs +6 -5
  152. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  153. package/lib/labs/VDataTable/composables/options.mjs +3 -7
  154. package/lib/labs/VDataTable/composables/options.mjs.map +1 -1
  155. package/lib/labs/VDataTable/composables/paginate.mjs +1 -1
  156. package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -1
  157. package/lib/labs/VDataTable/index.d.ts +71 -1
  158. package/lib/labs/VDataTable/index.mjs +1 -0
  159. package/lib/labs/VDataTable/index.mjs.map +1 -1
  160. package/lib/labs/components.d.ts +71 -1
  161. package/lib/locale/adapters/vue-i18n.mjs +12 -2
  162. package/lib/locale/adapters/vue-i18n.mjs.map +1 -1
  163. package/lib/locale/ar.mjs +20 -20
  164. package/lib/locale/ar.mjs.map +1 -1
  165. package/lib/locale/en.mjs +2 -2
  166. package/lib/locale/en.mjs.map +1 -1
  167. package/lib/locale/es.mjs +3 -3
  168. package/lib/locale/es.mjs.map +1 -1
  169. package/lib/locale/fi.mjs +5 -5
  170. package/lib/locale/fi.mjs.map +1 -1
  171. package/lib/locale/it.mjs +6 -6
  172. package/lib/locale/it.mjs.map +1 -1
  173. package/lib/locale/sv.mjs +13 -13
  174. package/lib/locale/sv.mjs.map +1 -1
  175. package/lib/styles/settings/_variables.scss +6 -6
  176. package/lib/styles/tools/_states.sass +3 -3
  177. package/lib/util/defineComponent.mjs +21 -18
  178. package/lib/util/defineComponent.mjs.map +1 -1
  179. package/lib/util/helpers.mjs +5 -19
  180. package/lib/util/helpers.mjs.map +1 -1
  181. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.2.0-next-20230114.0
2
+ * Vuetify v4.0.0-dev-20230206.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -262,8 +262,12 @@
262
262
  }
263
263
  function toKebabCase() {
264
264
  let str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
265
- return str.replace(/[^a-z]/gi, '-').replace(/\B([A-Z])/g, '-$1').toLowerCase();
265
+ if (toKebabCase.cache.has(str)) return toKebabCase.cache.get(str);
266
+ const kebab = str.replace(/[^a-z]/gi, '-').replace(/\B([A-Z])/g, '-$1').toLowerCase();
267
+ toKebabCase.cache.set(str, kebab);
268
+ return kebab;
266
269
  }
270
+ toKebabCase.cache = new Map();
267
271
  function findChildrenWithProvide(key, vnode) {
268
272
  if (!vnode || typeof vnode !== 'object') return [];
269
273
  if (Array.isArray(vnode)) {
@@ -890,7 +894,7 @@
890
894
 
891
895
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
892
896
  function createDefaults(options) {
893
- return vue.ref(options ?? {});
897
+ return vue.ref(options);
894
898
  }
895
899
  function useDefaults() {
896
900
  const defaults = vue.inject(DefaultsSymbol);
@@ -922,23 +926,30 @@
922
926
  return newDefaults;
923
927
  }
924
928
 
925
- function useToggleScope(source, cb) {
929
+ function useToggleScope(source, fn) {
926
930
  let scope;
931
+ function start() {
932
+ scope = vue.effectScope();
933
+ scope.run(() => fn.length ? fn(() => {
934
+ var _scope;
935
+ (_scope = scope) == null ? void 0 : _scope.stop();
936
+ start();
937
+ }) : fn());
938
+ }
927
939
  vue.watch(source, active => {
928
940
  if (active && !scope) {
929
- scope = vue.effectScope();
930
- scope.run(cb);
941
+ start();
931
942
  } else if (!active) {
932
- var _scope;
933
- (_scope = scope) == null ? void 0 : _scope.stop();
943
+ var _scope2;
944
+ (_scope2 = scope) == null ? void 0 : _scope2.stop();
934
945
  scope = undefined;
935
946
  }
936
947
  }, {
937
948
  immediate: true
938
949
  });
939
950
  vue.onScopeDispose(() => {
940
- var _scope2;
941
- (_scope2 = scope) == null ? void 0 : _scope2.stop();
951
+ var _scope3;
952
+ (_scope3 = scope) == null ? void 0 : _scope3.stop();
942
953
  });
943
954
  }
944
955
 
@@ -1007,33 +1018,36 @@
1007
1018
  options.props = propsFactory(options.props, toKebabCase(options.name))();
1008
1019
  options.props._as = String;
1009
1020
  options.setup = function setup(props, ctx) {
1010
- const vm = vue.getCurrentInstance();
1011
1021
  const defaults = useDefaults();
1012
- const _subcomponentDefaults = vue.shallowRef();
1013
- const _props = vue.shallowReactive({
1014
- ...vue.toRaw(props)
1022
+
1023
+ // Skip props proxy if defaults are not provided
1024
+ if (!defaults.value) return options._setup(props, ctx);
1025
+ const vm = vue.getCurrentInstance();
1026
+ const componentDefaults = vue.computed(() => defaults.value[props._as ?? options.name]);
1027
+ const _props = new Proxy(props, {
1028
+ get(target, prop) {
1029
+ if (!propIsDefined(vm.vnode, prop)) {
1030
+ var _componentDefaults$va, _global;
1031
+ return ((_componentDefaults$va = componentDefaults.value) == null ? void 0 : _componentDefaults$va[prop]) ?? ((_global = defaults.value.global) == null ? void 0 : _global[prop]) ?? target[prop];
1032
+ }
1033
+ return Reflect.get(target, prop);
1034
+ }
1015
1035
  });
1036
+ const _subcomponentDefaults = vue.shallowRef();
1016
1037
  vue.watchEffect(() => {
1017
- const globalDefaults = defaults.value.global;
1018
- const componentDefaults = defaults.value[props._as ?? options.name];
1019
- if (componentDefaults) {
1020
- const subComponents = Object.entries(componentDefaults).filter(_ref => {
1038
+ if (componentDefaults.value) {
1039
+ const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1021
1040
  let [key] = _ref;
1022
1041
  return key.startsWith(key[0].toUpperCase());
1023
1042
  });
1024
1043
  if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1025
1044
  }
1026
- for (const prop of Object.keys(props)) {
1027
- let newVal = props[prop];
1028
- if (!propIsDefined(vm.vnode, prop)) {
1029
- newVal = (componentDefaults == null ? void 0 : componentDefaults[prop]) ?? (globalDefaults == null ? void 0 : globalDefaults[prop]) ?? props[prop];
1030
- }
1031
- if (_props[prop] !== newVal) {
1032
- _props[prop] = newVal;
1033
- }
1034
- }
1035
1045
  });
1036
1046
  const setupBindings = options._setup(_props, ctx);
1047
+
1048
+ // If subcomponent defaults are provided, override any
1049
+ // subcomponents provided by the component's setup function.
1050
+ // This uses injectSelf so must be done after the original setup to work.
1037
1051
  useToggleScope(_subcomponentDefaults, () => {
1038
1052
  var _injectSelf;
1039
1053
  provideDefaults(mergeDeep(((_injectSelf = injectSelf(DefaultsSymbol)) == null ? void 0 : _injectSelf.value) ?? {}, _subcomponentDefaults.value));
@@ -1896,8 +1910,8 @@
1896
1910
  root: 'Pagination Navigation',
1897
1911
  next: 'Next page',
1898
1912
  previous: 'Previous page',
1899
- page: 'Goto Page {0}',
1900
- currentPage: 'Page {0}, Current Page',
1913
+ page: 'Go to page {0}',
1914
+ currentPage: 'Page {0}, Current page',
1901
1915
  first: 'First page',
1902
1916
  last: 'Last page'
1903
1917
  }
@@ -3372,18 +3386,21 @@
3372
3386
  };
3373
3387
  }
3374
3388
 
3389
+ // Types
3390
+
3391
+ const makeVBtnGroupProps = propsFactory({
3392
+ divided: Boolean,
3393
+ ...makeBorderProps(),
3394
+ ...makeDensityProps(),
3395
+ ...makeElevationProps(),
3396
+ ...makeRoundedProps(),
3397
+ ...makeTagProps(),
3398
+ ...makeThemeProps(),
3399
+ ...makeVariantProps()
3400
+ }, 'v-btn-group');
3375
3401
  const VBtnGroup = defineComponent({
3376
3402
  name: 'VBtnGroup',
3377
- props: {
3378
- divided: Boolean,
3379
- ...makeBorderProps(),
3380
- ...makeDensityProps(),
3381
- ...makeElevationProps(),
3382
- ...makeRoundedProps(),
3383
- ...makeTagProps(),
3384
- ...makeThemeProps(),
3385
- ...makeVariantProps()
3386
- },
3403
+ props: makeVBtnGroupProps(),
3387
3404
  setup(props, _ref) {
3388
3405
  let {
3389
3406
  slots
@@ -3421,6 +3438,9 @@
3421
3438
  });
3422
3439
  }
3423
3440
  });
3441
+ function filterVBtnGroupProps(props) {
3442
+ return pick(props, Object.keys(VBtnGroup.props));
3443
+ }
3424
3444
 
3425
3445
  // Composables
3426
3446
 
@@ -3628,7 +3648,10 @@
3628
3648
  const VBtnToggleSymbol = Symbol.for('vuetify:v-btn-toggle');
3629
3649
  const VBtnToggle = genericComponent()({
3630
3650
  name: 'VBtnToggle',
3631
- props: makeGroupProps(),
3651
+ props: {
3652
+ ...makeVBtnGroupProps(),
3653
+ ...makeGroupProps()
3654
+ },
3632
3655
  emits: {
3633
3656
  'update:modelValue': value => true
3634
3657
  },
@@ -3645,9 +3668,10 @@
3645
3668
  } = useGroup(props, VBtnToggleSymbol);
3646
3669
  useRender(() => {
3647
3670
  var _slots$default;
3648
- return vue.createVNode(VBtnGroup, {
3671
+ const [btnGroupProps] = filterVBtnGroupProps(props);
3672
+ return vue.createVNode(VBtnGroup, vue.mergeProps({
3649
3673
  "class": "v-btn-toggle"
3650
- }, {
3674
+ }, btnGroupProps), {
3651
3675
  default: () => [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, {
3652
3676
  isSelected,
3653
3677
  next,
@@ -4102,9 +4126,6 @@
4102
4126
  el.style.transform = value;
4103
4127
  el.style.webkitTransform = value;
4104
4128
  }
4105
- function opacity(el, value) {
4106
- el.style.opacity = `calc(${value} * var(--v-theme-overlay-multiplier))`;
4107
- }
4108
4129
  function isTouchEvent(e) {
4109
4130
  return e.constructor.name === 'TouchEvent';
4110
4131
  }
@@ -4180,13 +4201,11 @@
4180
4201
  animation.classList.add('v-ripple__animation--enter');
4181
4202
  animation.classList.add('v-ripple__animation--visible');
4182
4203
  transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`);
4183
- opacity(animation, 0);
4184
4204
  animation.dataset.activated = String(performance.now());
4185
4205
  setTimeout(() => {
4186
4206
  animation.classList.remove('v-ripple__animation--enter');
4187
4207
  animation.classList.add('v-ripple__animation--in');
4188
4208
  transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
4189
- opacity(animation, 0.08);
4190
4209
  }, 0);
4191
4210
  },
4192
4211
  hide(el) {
@@ -4201,14 +4220,14 @@
4201
4220
  setTimeout(() => {
4202
4221
  animation.classList.remove('v-ripple__animation--in');
4203
4222
  animation.classList.add('v-ripple__animation--out');
4204
- opacity(animation, 0);
4205
4223
  setTimeout(() => {
4224
+ var _animation$parentNode;
4206
4225
  const ripples = el.getElementsByClassName('v-ripple__animation');
4207
4226
  if (ripples.length === 1 && el.dataset.previousPosition) {
4208
4227
  el.style.position = el.dataset.previousPosition;
4209
4228
  delete el.dataset.previousPosition;
4210
4229
  }
4211
- animation.parentNode && el.removeChild(animation.parentNode);
4230
+ if (((_animation$parentNode = animation.parentNode) == null ? void 0 : _animation$parentNode.parentNode) === el) el.removeChild(animation.parentNode);
4212
4231
  }, 300);
4213
4232
  }, delay);
4214
4233
  }
@@ -4388,9 +4407,69 @@
4388
4407
  updated: updated$1
4389
4408
  };
4390
4409
 
4410
+ // Composables
4411
+
4412
+ // Types
4413
+
4414
+ const oppositeMap = {
4415
+ center: 'center',
4416
+ top: 'bottom',
4417
+ bottom: 'top',
4418
+ left: 'right',
4419
+ right: 'left'
4420
+ };
4421
+ const makeLocationProps = propsFactory({
4422
+ location: String
4423
+ }, 'location');
4424
+ function useLocation(props) {
4425
+ let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
4426
+ let offset = arguments.length > 2 ? arguments[2] : undefined;
4427
+ const {
4428
+ isRtl
4429
+ } = useRtl();
4430
+ const locationStyles = vue.computed(() => {
4431
+ if (!props.location) return {};
4432
+ const {
4433
+ side,
4434
+ align
4435
+ } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
4436
+ function getOffset(side) {
4437
+ return offset ? offset(side) : 0;
4438
+ }
4439
+ const styles = {};
4440
+ if (side !== 'center') {
4441
+ if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
4442
+ }
4443
+ if (align !== 'center') {
4444
+ if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
4445
+ } else {
4446
+ if (side === 'center') styles.top = styles.left = '50%';else {
4447
+ styles[{
4448
+ top: 'left',
4449
+ bottom: 'left',
4450
+ left: 'top',
4451
+ right: 'top'
4452
+ }[side]] = '50%';
4453
+ }
4454
+ styles.transform = {
4455
+ top: 'translateX(-50%)',
4456
+ bottom: 'translateX(-50%)',
4457
+ left: 'translateY(-50%)',
4458
+ right: 'translateY(-50%)',
4459
+ center: 'translate(-50%, -50%)'
4460
+ }[side];
4461
+ }
4462
+ return styles;
4463
+ });
4464
+ return {
4465
+ locationStyles
4466
+ };
4467
+ }
4468
+
4391
4469
  const VProgressLinear = defineComponent({
4392
4470
  name: 'VProgressLinear',
4393
4471
  props: {
4472
+ absolute: Boolean,
4394
4473
  active: {
4395
4474
  type: Boolean,
4396
4475
  default: true
@@ -4420,6 +4499,9 @@
4420
4499
  stream: Boolean,
4421
4500
  striped: Boolean,
4422
4501
  roundedBar: Boolean,
4502
+ ...makeLocationProps({
4503
+ location: 'top'
4504
+ }),
4423
4505
  ...makeRoundedProps(),
4424
4506
  ...makeTagProps(),
4425
4507
  ...makeThemeProps()
@@ -4438,6 +4520,9 @@
4438
4520
  const {
4439
4521
  themeClasses
4440
4522
  } = provideTheme(props);
4523
+ const {
4524
+ locationStyles
4525
+ } = useLocation(props);
4441
4526
  const {
4442
4527
  textColorClasses,
4443
4528
  textColorStyles
@@ -4479,6 +4564,7 @@
4479
4564
  useRender(() => vue.createVNode(props.tag, {
4480
4565
  "ref": intersectionRef,
4481
4566
  "class": ['v-progress-linear', {
4567
+ 'v-progress-linear--absolute': props.absolute,
4482
4568
  'v-progress-linear--active': props.active && isIntersecting.value,
4483
4569
  'v-progress-linear--reverse': isReversed.value,
4484
4570
  'v-progress-linear--rounded': props.rounded,
@@ -4486,8 +4572,11 @@
4486
4572
  'v-progress-linear--striped': props.striped
4487
4573
  }, roundedClasses.value, themeClasses.value],
4488
4574
  "style": {
4575
+ bottom: props.location === 'bottom' ? 0 : undefined,
4576
+ top: props.location === 'top' ? 0 : undefined,
4489
4577
  height: props.active ? convertToUnit(height.value) : 0,
4490
- '--v-progress-linear-height': convertToUnit(height.value)
4578
+ '--v-progress-linear-height': convertToUnit(height.value),
4579
+ ...locationStyles.value
4491
4580
  },
4492
4581
  "role": "progressbar",
4493
4582
  "aria-hidden": props.active ? 'false' : 'true',
@@ -4573,65 +4662,6 @@
4573
4662
  }, null)]);
4574
4663
  }
4575
4664
 
4576
- // Composables
4577
-
4578
- // Types
4579
-
4580
- const oppositeMap = {
4581
- center: 'center',
4582
- top: 'bottom',
4583
- bottom: 'top',
4584
- left: 'right',
4585
- right: 'left'
4586
- };
4587
- const makeLocationProps = propsFactory({
4588
- location: String
4589
- }, 'location');
4590
- function useLocation(props) {
4591
- let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
4592
- let offset = arguments.length > 2 ? arguments[2] : undefined;
4593
- const {
4594
- isRtl
4595
- } = useRtl();
4596
- const locationStyles = vue.computed(() => {
4597
- if (!props.location) return {};
4598
- const {
4599
- side,
4600
- align
4601
- } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
4602
- function getOffset(side) {
4603
- return offset ? offset(side) : 0;
4604
- }
4605
- const styles = {};
4606
- if (side !== 'center') {
4607
- if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
4608
- }
4609
- if (align !== 'center') {
4610
- if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
4611
- } else {
4612
- if (side === 'center') styles.top = styles.left = '50%';else {
4613
- styles[{
4614
- top: 'left',
4615
- bottom: 'left',
4616
- left: 'top',
4617
- right: 'top'
4618
- }[side]] = '50%';
4619
- }
4620
- styles.transform = {
4621
- top: 'translateX(-50%)',
4622
- bottom: 'translateX(-50%)',
4623
- left: 'translateY(-50%)',
4624
- right: 'translateY(-50%)',
4625
- center: 'translate(-50%, -50%)'
4626
- }[side];
4627
- }
4628
- return styles;
4629
- });
4630
- return {
4631
- locationStyles
4632
- };
4633
- }
4634
-
4635
4665
  // Utilities
4636
4666
 
4637
4667
  // Types
@@ -4837,21 +4867,31 @@
4837
4867
  const group = useGroupItem(props, props.symbol, false);
4838
4868
  const link = useLink(props, attrs);
4839
4869
  const isActive = vue.computed(() => {
4840
- var _link$isActive;
4841
- return props.active !== false && (props.active || ((_link$isActive = link.isActive) == null ? void 0 : _link$isActive.value) || (group == null ? void 0 : group.isSelected.value));
4870
+ if (props.active !== undefined) {
4871
+ return props.active;
4872
+ }
4873
+ if (link.isLink.value) {
4874
+ var _link$isActive;
4875
+ return (_link$isActive = link.isActive) == null ? void 0 : _link$isActive.value;
4876
+ }
4877
+ return group == null ? void 0 : group.isSelected.value;
4842
4878
  });
4843
4879
  const isDisabled = vue.computed(() => (group == null ? void 0 : group.disabled.value) || props.disabled);
4844
4880
  const isElevated = vue.computed(() => {
4845
4881
  return props.variant === 'elevated' && !(props.disabled || props.flat || props.border);
4846
4882
  });
4883
+ const valueAttr = vue.computed(() => {
4884
+ if (props.value === undefined) return undefined;
4885
+ return Object(props.value) === props.value ? JSON.stringify(props.value, null, 0) : props.value;
4886
+ });
4847
4887
  useSelectLink(link, group == null ? void 0 : group.select);
4848
4888
  useRender(() => {
4849
- var _slots$prepend, _slots$default, _slots$append, _slots$loader;
4889
+ var _link$isActive2, _link$isActive3, _slots$prepend, _slots$default, _slots$append, _slots$loader;
4850
4890
  const Tag = link.isLink.value ? 'a' : props.tag;
4851
- const hasColor = !group || group.isSelected.value;
4852
4891
  const hasPrepend = !!(props.prependIcon || slots.prepend);
4853
4892
  const hasAppend = !!(props.appendIcon || slots.append);
4854
4893
  const hasIcon = !!(props.icon && props.icon !== true);
4894
+ 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);
4855
4895
  return vue.withDirectives(vue.createVNode(Tag, {
4856
4896
  "type": Tag === 'a' ? undefined : 'button',
4857
4897
  "class": ['v-btn', group == null ? void 0 : group.selectedClass.value, {
@@ -4872,7 +4912,8 @@
4872
4912
  if (isDisabled.value) return;
4873
4913
  (_link$navigate = link.navigate) == null ? void 0 : _link$navigate.call(link, e);
4874
4914
  group == null ? void 0 : group.toggle();
4875
- }
4915
+ },
4916
+ "value": valueAttr.value
4876
4917
  }, {
4877
4918
  default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && vue.createVNode(VDefaultsProvider, {
4878
4919
  "key": "prepend",
@@ -5346,32 +5387,34 @@
5346
5387
  if (hasLabel.value) {
5347
5388
  const el = labelRef.value.$el;
5348
5389
  const targetEl = floatingLabelRef.value.$el;
5349
- const rect = nullifyTransforms(el);
5350
- const targetRect = targetEl.getBoundingClientRect();
5351
- const x = targetRect.x - rect.x;
5352
- const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2);
5353
- const targetWidth = targetRect.width / 0.75;
5354
- const width = Math.abs(targetWidth - rect.width) > 1 ? {
5355
- maxWidth: convertToUnit(targetWidth)
5356
- } : undefined;
5357
- const style = getComputedStyle(el);
5358
- const targetStyle = getComputedStyle(targetEl);
5359
- const duration = parseFloat(style.transitionDuration) * 1000 || 150;
5360
- const scale = parseFloat(targetStyle.getPropertyValue('--v-field-label-scale'));
5361
- const color = targetStyle.getPropertyValue('color');
5362
- el.style.visibility = 'visible';
5363
- targetEl.style.visibility = 'hidden';
5364
- animate(el, {
5365
- transform: `translate(${x}px, ${y}px) scale(${scale})`,
5366
- color,
5367
- ...width
5368
- }, {
5369
- duration,
5370
- easing: standardEasing,
5371
- direction: val ? 'normal' : 'reverse'
5372
- }).finished.then(() => {
5373
- el.style.removeProperty('visibility');
5374
- targetEl.style.removeProperty('visibility');
5390
+ requestAnimationFrame(() => {
5391
+ const rect = nullifyTransforms(el);
5392
+ const targetRect = targetEl.getBoundingClientRect();
5393
+ const x = targetRect.x - rect.x;
5394
+ const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2);
5395
+ const targetWidth = targetRect.width / 0.75;
5396
+ const width = Math.abs(targetWidth - rect.width) > 1 ? {
5397
+ maxWidth: convertToUnit(targetWidth)
5398
+ } : undefined;
5399
+ const style = getComputedStyle(el);
5400
+ const targetStyle = getComputedStyle(targetEl);
5401
+ const duration = parseFloat(style.transitionDuration) * 1000 || 150;
5402
+ const scale = parseFloat(targetStyle.getPropertyValue('--v-field-label-scale'));
5403
+ const color = targetStyle.getPropertyValue('color');
5404
+ el.style.visibility = 'visible';
5405
+ targetEl.style.visibility = 'hidden';
5406
+ animate(el, {
5407
+ transform: `translate(${x}px, ${y}px) scale(${scale})`,
5408
+ color,
5409
+ ...width
5410
+ }, {
5411
+ duration,
5412
+ easing: standardEasing,
5413
+ direction: val ? 'normal' : 'reverse'
5414
+ }).finished.then(() => {
5415
+ el.style.removeProperty('visibility');
5416
+ targetEl.style.removeProperty('visibility');
5417
+ });
5375
5418
  });
5376
5419
  }
5377
5420
  }, {
@@ -5560,7 +5603,6 @@
5560
5603
  const makeFormProps = propsFactory({
5561
5604
  disabled: Boolean,
5562
5605
  fastFail: Boolean,
5563
- lazyValidation: Boolean,
5564
5606
  readonly: Boolean,
5565
5607
  modelValue: {
5566
5608
  type: Boolean,
@@ -6964,9 +7006,9 @@
6964
7006
  themeClasses
6965
7007
  } = provideTheme(props);
6966
7008
  const {
6967
- backgroundColorClasses,
6968
- backgroundColorStyles
6969
- } = useBackgroundColor(vue.toRef(props, 'color'));
7009
+ textColorClasses,
7010
+ textColorStyles
7011
+ } = useTextColor(vue.toRef(props, 'color'));
6970
7012
  const dividerStyles = vue.computed(() => {
6971
7013
  const styles = {};
6972
7014
  if (props.length) {
@@ -6982,8 +7024,8 @@
6982
7024
  'v-divider': true,
6983
7025
  'v-divider--inset': props.inset,
6984
7026
  'v-divider--vertical': props.vertical
6985
- }, themeClasses.value, backgroundColorClasses.value],
6986
- "style": [dividerStyles.value, backgroundColorStyles.value],
7027
+ }, themeClasses.value, textColorClasses.value],
7028
+ "style": [dividerStyles.value, textColorStyles.value],
6987
7029
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
6988
7030
  "role": `${attrs.role || 'separator'}`
6989
7031
  }, null));
@@ -7693,7 +7735,7 @@
7693
7735
  }
7694
7736
  }
7695
7737
  useRender(() => {
7696
- var _slots$prepend, _slots$title, _slots$subtitle, _slots$default, _slots$append;
7738
+ var _slots$title, _slots$subtitle, _slots$default;
7697
7739
  const Tag = isLink.value ? 'a' : props.tag;
7698
7740
  const hasColor = !list || isSelected.value || isActive.value;
7699
7741
  const hasTitle = slots.title || props.title;
@@ -7716,7 +7758,18 @@
7716
7758
  "onClick": onClick,
7717
7759
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
7718
7760
  }, {
7719
- default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && vue.createVNode(VDefaultsProvider, {
7761
+ default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && vue.createVNode("div", {
7762
+ "key": "prepend",
7763
+ "class": "v-list-item__prepend"
7764
+ }, [props.prependAvatar && vue.createVNode(VAvatar, {
7765
+ "key": "prepend-avatar",
7766
+ "density": props.density,
7767
+ "image": props.prependAvatar
7768
+ }, null), props.prependIcon && vue.createVNode(VIcon, {
7769
+ "key": "prepend-icon",
7770
+ "density": props.density,
7771
+ "icon": props.prependIcon
7772
+ }, null), slots.prepend && vue.createVNode(VDefaultsProvider, {
7720
7773
  "key": "prepend",
7721
7774
  "defaults": {
7722
7775
  VAvatar: {
@@ -7732,14 +7785,8 @@
7732
7785
  }
7733
7786
  }
7734
7787
  }, {
7735
- default: () => [vue.createVNode("div", {
7736
- "class": "v-list-item__prepend"
7737
- }, [props.prependAvatar && vue.createVNode(VAvatar, {
7738
- "key": "prepend-avatar"
7739
- }, null), props.prependIcon && vue.createVNode(VIcon, {
7740
- "key": "prepend-icon"
7741
- }, null), (_slots$prepend = slots.prepend) == null ? void 0 : _slots$prepend.call(slots, slotProps.value)])]
7742
- }), vue.createVNode("div", {
7788
+ default: () => [slots.prepend(slotProps.value)]
7789
+ })]), vue.createVNode("div", {
7743
7790
  "class": "v-list-item__content",
7744
7791
  "data-no-activator": ""
7745
7792
  }, [hasTitle && vue.createVNode(VListItemTitle, {
@@ -7754,7 +7801,10 @@
7754
7801
  default: () => [((_slots$subtitle = slots.subtitle) == null ? void 0 : _slots$subtitle.call(slots, {
7755
7802
  subtitle: props.subtitle
7756
7803
  })) ?? props.subtitle]
7757
- }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value)]), hasAppend && vue.createVNode(VDefaultsProvider, {
7804
+ }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value)]), hasAppend && vue.createVNode("div", {
7805
+ "key": "append",
7806
+ "class": "v-list-item__append"
7807
+ }, [slots.append && vue.createVNode(VDefaultsProvider, {
7758
7808
  "key": "append",
7759
7809
  "defaults": {
7760
7810
  VAvatar: {
@@ -7770,14 +7820,16 @@
7770
7820
  }
7771
7821
  }
7772
7822
  }, {
7773
- default: () => [vue.createVNode("div", {
7774
- "class": "v-list-item__append"
7775
- }, [(_slots$append = slots.append) == null ? void 0 : _slots$append.call(slots, slotProps.value), props.appendIcon && vue.createVNode(VIcon, {
7776
- "key": "append-icon"
7777
- }, null), props.appendAvatar && vue.createVNode(VAvatar, {
7778
- "key": "append-avatar"
7779
- }, null)])]
7780
- })]
7823
+ default: () => [slots.append(slotProps.value)]
7824
+ }), props.appendIcon && vue.createVNode(VIcon, {
7825
+ "key": "append-icon",
7826
+ "density": props.density,
7827
+ "icon": props.appendIcon
7828
+ }, null), props.appendAvatar && vue.createVNode(VAvatar, {
7829
+ "key": "append-avatar",
7830
+ "density": props.density,
7831
+ "image": props.appendAvatar
7832
+ }, null)])]
7781
7833
  }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple]]);
7782
7834
  });
7783
7835
  return {};
@@ -7991,9 +8043,12 @@
7991
8043
 
7992
8044
  // Types
7993
8045
 
8046
+ function isPrimitive(value) {
8047
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
8048
+ }
7994
8049
  function transformItem(props, item) {
7995
8050
  const type = getPropertyFromItem(item, props.itemType, 'item');
7996
- const title = typeof item === 'string' ? item : getPropertyFromItem(item, props.itemTitle);
8051
+ const title = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemTitle);
7997
8052
  const value = getPropertyFromItem(item, props.itemValue, undefined);
7998
8053
  const children = getPropertyFromItem(item, props.itemChildren);
7999
8054
  const itemProps = props.itemProps === true ? pick(item, ['children'])[1] : getPropertyFromItem(item, props.itemProps);
@@ -8619,17 +8674,12 @@
8619
8674
  function useLocationStrategies(props, data) {
8620
8675
  const contentStyles = vue.ref({});
8621
8676
  const updateLocation = vue.ref();
8622
- let scope;
8623
- vue.watchEffect(async () => {
8624
- var _scope;
8625
- (_scope = scope) == null ? void 0 : _scope.stop();
8626
- updateLocation.value = undefined;
8627
- if (!(IN_BROWSER && data.isActive.value && props.locationStrategy)) return;
8628
- scope = vue.effectScope();
8629
- if (!(props.locationStrategy === 'connected')) {
8630
- await vue.nextTick();
8631
- }
8632
- scope.run(() => {
8677
+ if (IN_BROWSER) {
8678
+ useToggleScope(() => !!(data.isActive.value && props.locationStrategy), reset => {
8679
+ vue.watch(() => props.locationStrategy, reset);
8680
+ vue.onScopeDispose(() => {
8681
+ updateLocation.value = undefined;
8682
+ });
8633
8683
  if (typeof props.locationStrategy === 'function') {
8634
8684
  var _props$locationStrate;
8635
8685
  updateLocation.value = (_props$locationStrate = props.locationStrategy(data, props, contentStyles)) == null ? void 0 : _props$locationStrate.updateLocation;
@@ -8638,16 +8688,14 @@
8638
8688
  updateLocation.value = (_locationStrategies$p = locationStrategies[props.locationStrategy](data, props, contentStyles)) == null ? void 0 : _locationStrategies$p.updateLocation;
8639
8689
  }
8640
8690
  });
8641
- });
8642
- IN_BROWSER && window.addEventListener('resize', onResize, {
8643
- passive: true
8644
- });
8645
- vue.onScopeDispose(() => {
8646
- var _scope2;
8647
- IN_BROWSER && window.removeEventListener('resize', onResize);
8648
- updateLocation.value = undefined;
8649
- (_scope2 = scope) == null ? void 0 : _scope2.stop();
8650
- });
8691
+ window.addEventListener('resize', onResize, {
8692
+ passive: true
8693
+ });
8694
+ vue.onScopeDispose(() => {
8695
+ window.removeEventListener('resize', onResize);
8696
+ updateLocation.value = undefined;
8697
+ });
8698
+ }
8651
8699
  function onResize(e) {
8652
8700
  var _updateLocation$value;
8653
8701
  (_updateLocation$value = updateLocation.value) == null ? void 0 : _updateLocation$value.call(updateLocation, e);
@@ -8941,13 +8989,30 @@
8941
8989
  maxWidth: convertToUnit(pixelCeil(clamp(available.x, minWidth.value === Infinity ? 0 : minWidth.value, maxWidth.value))),
8942
8990
  maxHeight: convertToUnit(pixelCeil(clamp(available.y, minHeight.value === Infinity ? 0 : minHeight.value, maxHeight.value)))
8943
8991
  });
8992
+ return {
8993
+ available,
8994
+ contentBox
8995
+ };
8944
8996
  }
8945
- vue.watch(() => [preferredAnchor.value, preferredOrigin.value, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight], () => updateLocation(), {
8946
- immediate: !activatorFixed
8947
- });
8948
- if (activatorFixed) vue.nextTick(() => updateLocation());
8949
- requestAnimationFrame(() => {
8950
- if (contentStyles.value.maxHeight) updateLocation();
8997
+ vue.watch(() => [preferredAnchor.value, preferredOrigin.value, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight], () => updateLocation());
8998
+ vue.nextTick(() => {
8999
+ const result = updateLocation();
9000
+
9001
+ // TODO: overflowing content should only require a single updateLocation call
9002
+ // Icky hack to make sure the content is positioned consistently
9003
+ if (!result) return;
9004
+ const {
9005
+ available,
9006
+ contentBox
9007
+ } = result;
9008
+ if (contentBox.height > available.y) {
9009
+ requestAnimationFrame(() => {
9010
+ updateLocation();
9011
+ requestAnimationFrame(() => {
9012
+ updateLocation();
9013
+ });
9014
+ });
9015
+ }
8951
9016
  });
8952
9017
  return {
8953
9018
  updateLocation
@@ -9015,10 +9080,10 @@
9015
9080
  await vue.nextTick();
9016
9081
  scope.run(() => {
9017
9082
  if (typeof props.scrollStrategy === 'function') {
9018
- props.scrollStrategy(data, props);
9083
+ props.scrollStrategy(data, props, scope);
9019
9084
  } else {
9020
9085
  var _scrollStrategies$pro;
9021
- (_scrollStrategies$pro = scrollStrategies[props.scrollStrategy]) == null ? void 0 : _scrollStrategies$pro.call(scrollStrategies, data, props);
9086
+ (_scrollStrategies$pro = scrollStrategies[props.scrollStrategy]) == null ? void 0 : _scrollStrategies$pro.call(scrollStrategies, data, props, scope);
9022
9087
  }
9023
9088
  });
9024
9089
  });
@@ -9064,9 +9129,10 @@
9064
9129
  }
9065
9130
  });
9066
9131
  }
9067
- function repositionScrollStrategy(data) {
9132
+ function repositionScrollStrategy(data, props, scope) {
9068
9133
  let slow = false;
9069
9134
  let raf = -1;
9135
+ let ric = -1;
9070
9136
  function update(e) {
9071
9137
  requestNewFrame(() => {
9072
9138
  var _data$updateLocation$, _data$updateLocation;
@@ -9076,21 +9142,29 @@
9076
9142
  slow = time / (1000 / 60) > 2;
9077
9143
  });
9078
9144
  }
9079
- bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
9080
- if (slow) {
9081
- // If the position calculation is slow,
9082
- // defer updates until scrolling is finished.
9083
- // Browsers usually fire one scroll event per frame so
9084
- // we just wait until we've got two frames without an event
9085
- cancelAnimationFrame(raf);
9086
- raf = requestAnimationFrame(() => {
9087
- raf = requestAnimationFrame(() => {
9145
+ ric = requestIdleCallback(() => {
9146
+ scope.run(() => {
9147
+ bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
9148
+ if (slow) {
9149
+ // If the position calculation is slow,
9150
+ // defer updates until scrolling is finished.
9151
+ // Browsers usually fire one scroll event per frame so
9152
+ // we just wait until we've got two frames without an event
9153
+ cancelAnimationFrame(raf);
9154
+ raf = requestAnimationFrame(() => {
9155
+ raf = requestAnimationFrame(() => {
9156
+ update(e);
9157
+ });
9158
+ });
9159
+ } else {
9088
9160
  update(e);
9089
- });
9161
+ }
9090
9162
  });
9091
- } else {
9092
- update(e);
9093
- }
9163
+ });
9164
+ });
9165
+ vue.onScopeDispose(() => {
9166
+ cancelIdleCallback(ric);
9167
+ cancelAnimationFrame(raf);
9094
9168
  });
9095
9169
  }
9096
9170
 
@@ -9733,6 +9807,11 @@
9733
9807
  function onClickOutside() {
9734
9808
  parent == null ? void 0 : parent.closeParents();
9735
9809
  }
9810
+ const activatorProps = vue.computed(() => vue.mergeProps({
9811
+ 'aria-haspopup': 'menu',
9812
+ 'aria-expanded': String(isActive.value),
9813
+ 'aria-owns': id.value
9814
+ }, props.activatorProps));
9736
9815
  useRender(() => {
9737
9816
  const [overlayProps] = filterVOverlayProps(props);
9738
9817
  return vue.createVNode(VOverlay, vue.mergeProps({
@@ -9742,11 +9821,7 @@
9742
9821
  "modelValue": isActive.value,
9743
9822
  "onUpdate:modelValue": $event => isActive.value = $event,
9744
9823
  "absolute": true,
9745
- "activatorProps": vue.mergeProps({
9746
- 'aria-haspopup': 'menu',
9747
- 'aria-expanded': String(isActive.value),
9748
- 'aria-owns': id.value
9749
- }, props.activatorProps),
9824
+ "activatorProps": activatorProps.value,
9750
9825
  "onClick:outside": onClickOutside
9751
9826
  }, scopeId), {
9752
9827
  activator: slots.activator,
@@ -9860,8 +9935,10 @@
9860
9935
  }
9861
9936
  function onKeydown(e) {
9862
9937
  if (props.readonly || form != null && form.isReadonly.value) return;
9863
- if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9938
+ if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
9864
9939
  e.preventDefault();
9940
+ }
9941
+ if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9865
9942
  menu.value = true;
9866
9943
  }
9867
9944
  if (['Escape', 'Tab'].includes(e.key)) {
@@ -9872,15 +9949,12 @@
9872
9949
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
9873
9950
  } else if (e.key === 'ArrowUp') {
9874
9951
  var _listRef$value2;
9875
- e.preventDefault();
9876
9952
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
9877
9953
  } else if (e.key === 'Home') {
9878
9954
  var _listRef$value3;
9879
- e.preventDefault();
9880
9955
  (_listRef$value3 = listRef.value) == null ? void 0 : _listRef$value3.focus('first');
9881
9956
  } else if (e.key === 'End') {
9882
9957
  var _listRef$value4;
9883
- e.preventDefault();
9884
9958
  (_listRef$value4 = listRef.value) == null ? void 0 : _listRef$value4.focus('last');
9885
9959
  }
9886
9960
  }
@@ -10062,7 +10136,7 @@
10062
10136
  const customFiltersLength = Object.keys((options == null ? void 0 : options.customKeyFilter) ?? {}).length;
10063
10137
  if (!(items != null && items.length)) return array;
10064
10138
  loop: for (let i = 0; i < items.length; i++) {
10065
- const item = items[i].raw;
10139
+ const item = items[i];
10066
10140
  const customMatches = {};
10067
10141
  const defaultMatches = {};
10068
10142
  let match = -1;
@@ -10102,7 +10176,7 @@
10102
10176
  }
10103
10177
  return array;
10104
10178
  }
10105
- function useFilter(props, items, query) {
10179
+ function useFilter(props, items, query, options) {
10106
10180
  const strQuery = vue.computed(() => typeof (query == null ? void 0 : query.value) !== 'string' && typeof (query == null ? void 0 : query.value) !== 'number' ? '' : String(query.value));
10107
10181
  const filteredItems = vue.ref([]);
10108
10182
  const filteredMatches = vue.ref(new Map());
@@ -10113,7 +10187,7 @@
10113
10187
  const results = filterItems(transformedItems, strQuery.value, {
10114
10188
  customKeyFilter: props.customKeyFilter,
10115
10189
  default: props.customFilter,
10116
- filterKeys: props.filterKeys,
10190
+ filterKeys: vue.unref(options == null ? void 0 : options.filterKeys) ?? props.filterKeys,
10117
10191
  filterMode: props.filterMode,
10118
10192
  noFilter: props.noFilter
10119
10193
  });
@@ -10224,6 +10298,9 @@
10224
10298
  }
10225
10299
  function onKeydown(e) {
10226
10300
  if (props.readonly || form != null && form.isReadonly.value) return;
10301
+ if (['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
10302
+ e.preventDefault();
10303
+ }
10227
10304
  if (['Enter', 'ArrowDown'].includes(e.key)) {
10228
10305
  menu.value = true;
10229
10306
  }
@@ -10235,11 +10312,9 @@
10235
10312
  }
10236
10313
  if (e.key === 'ArrowDown') {
10237
10314
  var _listRef$value;
10238
- e.preventDefault();
10239
10315
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
10240
10316
  } else if (e.key === 'ArrowUp') {
10241
10317
  var _listRef$value2;
10242
- e.preventDefault();
10243
10318
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
10244
10319
  }
10245
10320
  }
@@ -13568,7 +13643,9 @@
13568
13643
  if (props.readonly || form != null && form.isReadonly.value) return;
13569
13644
  const selectionStart = vTextFieldRef.value.selectionStart;
13570
13645
  const length = selected.value.length;
13571
- if (selectionIndex.value > -1) e.preventDefault();
13646
+ if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
13647
+ e.preventDefault();
13648
+ }
13572
13649
  if (['Enter', 'ArrowDown'].includes(e.key)) {
13573
13650
  menu.value = true;
13574
13651
  }
@@ -13580,11 +13657,9 @@
13580
13657
  }
13581
13658
  if (e.key === 'ArrowDown') {
13582
13659
  var _listRef$value;
13583
- e.preventDefault();
13584
13660
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
13585
13661
  } else if (e.key === 'ArrowUp') {
13586
13662
  var _listRef$value2;
13587
- e.preventDefault();
13588
13663
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
13589
13664
  }
13590
13665
  if (!props.multiple) return;
@@ -13618,7 +13693,7 @@
13618
13693
  vTextFieldRef.value.setSelectionRange(0, 0);
13619
13694
  }
13620
13695
  }
13621
- if (e.key === 'Enter') {
13696
+ if (e.key === 'Enter' && search.value) {
13622
13697
  select(transformItem$1(props, search.value));
13623
13698
  search.value = '';
13624
13699
  }
@@ -13879,6 +13954,10 @@
13879
13954
  });
13880
13955
  }
13881
13956
  });
13957
+ const activatorProps = vue.computed(() => vue.mergeProps({
13958
+ 'aria-haspopup': 'dialog',
13959
+ 'aria-expanded': String(isActive.value)
13960
+ }, props.activatorProps));
13882
13961
  useRender(() => {
13883
13962
  const [overlayProps] = filterVOverlayProps(props);
13884
13963
  return vue.createVNode(VOverlay, vue.mergeProps({
@@ -13892,10 +13971,7 @@
13892
13971
  "onUpdate:modelValue": $event => isActive.value = $event,
13893
13972
  "aria-role": "dialog",
13894
13973
  "aria-modal": "true",
13895
- "activatorProps": vue.mergeProps({
13896
- 'aria-haspopup': 'dialog',
13897
- 'aria-expanded': String(isActive.value)
13898
- }, props.activatorProps)
13974
+ "activatorProps": activatorProps.value
13899
13975
  }, scopeId), {
13900
13976
  activator: slots.activator,
13901
13977
  default: function () {
@@ -14244,12 +14320,15 @@
14244
14320
  onFocus();
14245
14321
  vue.nextTick(() => {
14246
14322
  model.value = [];
14247
- if (inputRef != null && inputRef.value) {
14248
- inputRef.value.value = '';
14249
- }
14250
14323
  callEvent(props['onClick:clear'], e);
14251
14324
  });
14252
14325
  }
14326
+ vue.watch(model, newValue => {
14327
+ const hasModelReset = !Array.isArray(newValue) || !newValue.length;
14328
+ if (hasModelReset && inputRef.value) {
14329
+ inputRef.value.value = '';
14330
+ }
14331
+ });
14253
14332
  useRender(() => {
14254
14333
  const hasCounter = !!(slots.counter || props.counter);
14255
14334
  const hasDetails = !!(hasCounter || slots.details);
@@ -15240,7 +15319,7 @@
15240
15319
  window.removeEventListener('touchmove', onTouchmove);
15241
15320
  window.removeEventListener('touchend', onTouchend);
15242
15321
  });
15243
- const isHorizontal = vue.computed(() => position.value !== 'bottom');
15322
+ const isHorizontal = vue.computed(() => ['left', 'right'].includes(position.value));
15244
15323
  const {
15245
15324
  addMovement,
15246
15325
  endTouch,
@@ -15252,11 +15331,11 @@
15252
15331
  const offset = vue.ref(0);
15253
15332
  let start;
15254
15333
  function getOffset(pos, active) {
15255
- return (position.value === 'left' ? pos : position.value === 'right' ? document.documentElement.clientWidth - pos : position.value === 'bottom' ? document.documentElement.clientHeight - pos : oops()) - (active ? width.value : 0);
15334
+ 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);
15256
15335
  }
15257
15336
  function getProgress(pos) {
15258
15337
  let limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
15259
- 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();
15338
+ 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();
15260
15339
  return limit ? Math.max(0, Math.min(1, progress)) : progress;
15261
15340
  }
15262
15341
  function onTouchstart(e) {
@@ -15264,8 +15343,8 @@
15264
15343
  const touchX = e.changedTouches[0].clientX;
15265
15344
  const touchY = e.changedTouches[0].clientY;
15266
15345
  const touchZone = 25;
15267
- const inTouchZone = position.value === 'left' ? touchX < touchZone : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone : oops();
15268
- 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());
15346
+ 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();
15347
+ 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());
15269
15348
  if (inTouchZone || inElement || isActive.value && isTemporary.value) {
15270
15349
  maybeDragging = true;
15271
15350
  start = [touchX, touchY];
@@ -15317,6 +15396,7 @@
15317
15396
  isActive.value = velocity.direction === ({
15318
15397
  left: 'right',
15319
15398
  right: 'left',
15399
+ top: 'down',
15320
15400
  bottom: 'up'
15321
15401
  }[position.value] || oops());
15322
15402
  } else {
@@ -15325,7 +15405,7 @@
15325
15405
  }
15326
15406
  const dragStyles = vue.computed(() => {
15327
15407
  return isDragging.value ? {
15328
- 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(),
15408
+ 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(),
15329
15409
  transition: 'none'
15330
15410
  } : undefined;
15331
15411
  });
@@ -15341,7 +15421,7 @@
15341
15421
 
15342
15422
  // Types
15343
15423
 
15344
- const locations = ['start', 'end', 'left', 'right', 'bottom'];
15424
+ const locations = ['start', 'end', 'left', 'right', 'top', 'bottom'];
15345
15425
  const VNavigationDrawer = defineComponent({
15346
15426
  name: 'VNavigationDrawer',
15347
15427
  props: {
@@ -15798,7 +15878,7 @@
15798
15878
  disabled: !!props.disabled || props.length < 2,
15799
15879
  color: isActive ? props.activeColor : props.color,
15800
15880
  ariaCurrent: isActive,
15801
- ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, index + 1),
15881
+ ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
15802
15882
  onClick: e => setValue(e, item)
15803
15883
  }
15804
15884
  };
@@ -17977,6 +18057,9 @@
17977
18057
  if (props.transition) return props.transition;
17978
18058
  return isActive.value ? 'scale-transition' : 'fade-transition';
17979
18059
  });
18060
+ const activatorProps = vue.computed(() => vue.mergeProps({
18061
+ 'aria-describedby': id.value
18062
+ }, props.activatorProps));
17980
18063
  useRender(() => {
17981
18064
  const [overlayProps] = filterVOverlayProps(props);
17982
18065
  return vue.createVNode(VOverlay, vue.mergeProps({
@@ -17993,9 +18076,7 @@
17993
18076
  "persistent": true,
17994
18077
  "role": "tooltip",
17995
18078
  "eager": true,
17996
- "activatorProps": vue.mergeProps({
17997
- 'aria-describedby': id.value
17998
- }, props.activatorProps),
18079
+ "activatorProps": activatorProps.value,
17999
18080
  "_disableGlobalStack": true
18000
18081
  }, scopeId), {
18001
18082
  activator: slots.activator,
@@ -18944,7 +19025,7 @@
18944
19025
  });
18945
19026
  },
18946
19027
  "item": item
18947
- }, slots), isExpanded(item.value) && ((_slots$expandedRow = slots['expanded-row']) == null ? void 0 : _slots$expandedRow.call(slots, {
19028
+ }, slots), isExpanded(item) && ((_slots$expandedRow = slots['expanded-row']) == null ? void 0 : _slots$expandedRow.call(slots, {
18948
19029
  item,
18949
19030
  columns: columns.value
18950
19031
  }))]);
@@ -18982,7 +19063,7 @@
18982
19063
  return Math.min(itemsLength.value, startIndex.value + itemsPerPage.value);
18983
19064
  });
18984
19065
  const pageCount = vue.computed(() => {
18985
- if (itemsPerPage.value === -1) return 1;
19066
+ if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;
18986
19067
  return Math.ceil(itemsLength.value / itemsPerPage.value);
18987
19068
  });
18988
19069
  vue.watchEffect(() => {
@@ -19085,7 +19166,7 @@
19085
19166
  "hide-details": true
19086
19167
  }, null)]), vue.createVNode("div", {
19087
19168
  "class": "v-data-table-footer__info"
19088
- }, [vue.createVNode("div", null, [(startIndex.value ?? -1) + 1, vue.createTextVNode(" - "), stopIndex.value ?? 0, vue.createTextVNode(" of "), itemsLength.value ?? 0])]), vue.createVNode("div", {
19169
+ }, [vue.createVNode("div", null, [!itemsLength.value ? 0 : startIndex.value + 1, vue.createTextVNode(" - "), stopIndex.value, vue.createTextVNode(" of "), itemsLength.value])]), vue.createVNode("div", {
19089
19170
  "class": "v-data-table-footer__pagination"
19090
19171
  }, [vue.createVNode(VBtn, {
19091
19172
  "icon": props.firstIcon,
@@ -19153,18 +19234,14 @@
19153
19234
  page,
19154
19235
  itemsPerPage,
19155
19236
  sortBy,
19156
- startIndex,
19157
- stopIndex,
19158
- pageCount
19237
+ groupBy
19159
19238
  } = _ref;
19160
19239
  const vm = getCurrentInstance('VDataTable');
19161
19240
  const options = vue.computed(() => ({
19162
19241
  page: page.value,
19163
19242
  itemsPerPage: itemsPerPage.value,
19164
- startIndex: startIndex.value,
19165
- stopIndex: stopIndex.value,
19166
- pageCount: pageCount.value,
19167
- sortBy: sortBy.value
19243
+ sortBy: sortBy.value,
19244
+ groupBy: groupBy.value
19168
19245
  }));
19169
19246
 
19170
19247
  // Reset page when sorting changes
@@ -19242,9 +19319,12 @@
19242
19319
  const {
19243
19320
  items
19244
19321
  } = useDataTableItems(props, columns);
19322
+ const filterKeys = vue.computed(() => columns.value.map(c => 'columns.' + c.key));
19245
19323
  const {
19246
19324
  filteredItems
19247
- } = useFilter(props, items, vue.toRef(props, 'search'));
19325
+ } = useFilter(props, items, vue.toRef(props, 'search'), {
19326
+ filterKeys
19327
+ });
19248
19328
  const {
19249
19329
  sortBy
19250
19330
  } = createSort(props);
@@ -19263,8 +19343,7 @@
19263
19343
  page,
19264
19344
  itemsPerPage,
19265
19345
  startIndex,
19266
- stopIndex,
19267
- pageCount
19346
+ stopIndex
19268
19347
  } = createPagination(props, flatItems);
19269
19348
  const {
19270
19349
  paginatedItems
@@ -19276,9 +19355,7 @@
19276
19355
  page,
19277
19356
  itemsPerPage,
19278
19357
  sortBy,
19279
- pageCount,
19280
- startIndex,
19281
- stopIndex
19358
+ groupBy
19282
19359
  });
19283
19360
  provideDefaults({
19284
19361
  VDataTableRows: {
@@ -19434,9 +19511,12 @@
19434
19511
  const {
19435
19512
  items
19436
19513
  } = useDataTableItems(props, columns);
19514
+ const filterKeys = vue.computed(() => columns.value.map(c => 'columns.' + c.key));
19437
19515
  const {
19438
19516
  filteredItems
19439
- } = useFilter(props, items, vue.toRef(props, 'search'));
19517
+ } = useFilter(props, items, vue.toRef(props, 'search'), {
19518
+ filterKeys
19519
+ });
19440
19520
  const {
19441
19521
  sortBy
19442
19522
  } = createSort(props);
@@ -19469,10 +19549,8 @@
19469
19549
  useOptions({
19470
19550
  sortBy,
19471
19551
  page: vue.ref(1),
19472
- startIndex: vue.ref(0),
19473
- stopIndex: vue.computed(() => flatItems.value.length - 1),
19474
- pageCount: vue.ref(1),
19475
- itemsPerPage: vue.ref(-1)
19552
+ itemsPerPage: vue.ref(-1),
19553
+ groupBy
19476
19554
  });
19477
19555
  provideDefaults({
19478
19556
  VDataTableRows: {
@@ -19548,7 +19626,8 @@
19548
19626
  ...makeDataTableItemProps(),
19549
19627
  ...makeDataTableSelectProps(),
19550
19628
  ...makeDataTableSortProps(),
19551
- ...makeDataTablePaginateProps()
19629
+ ...makeDataTablePaginateProps(),
19630
+ ...makeDataTableGroupProps()
19552
19631
  },
19553
19632
  emits: {
19554
19633
  'update:modelValue': value => true,
@@ -19557,6 +19636,7 @@
19557
19636
  'update:sortBy': sortBy => true,
19558
19637
  'update:options': options => true,
19559
19638
  'update:expanded': options => true,
19639
+ 'update:groupBy': value => true,
19560
19640
  'click:row': (event, value) => true
19561
19641
  },
19562
19642
  setup(props, _ref) {
@@ -19564,10 +19644,12 @@
19564
19644
  emit,
19565
19645
  slots
19566
19646
  } = _ref;
19647
+ const groupBy = useProxiedModel(props, 'groupBy');
19567
19648
  createExpanded(props);
19568
19649
  const {
19569
19650
  columns
19570
19651
  } = createHeaders(props, {
19652
+ groupBy,
19571
19653
  showSelect: vue.toRef(props, 'showSelect'),
19572
19654
  showExpand: vue.toRef(props, 'showExpand')
19573
19655
  });
@@ -19578,21 +19660,22 @@
19578
19660
  sortBy,
19579
19661
  toggleSort
19580
19662
  } = createSort(props);
19663
+ const {
19664
+ opened
19665
+ } = createGroupBy(props, groupBy, sortBy);
19581
19666
  const {
19582
19667
  page,
19583
- itemsPerPage,
19584
- startIndex,
19585
- stopIndex,
19586
- pageCount
19668
+ itemsPerPage
19587
19669
  } = createPagination(props, items);
19670
+ const {
19671
+ flatItems
19672
+ } = useGroupedItems(items, groupBy, opened);
19588
19673
  createSelection(props, items);
19589
19674
  useOptions({
19590
19675
  page,
19591
19676
  itemsPerPage,
19592
19677
  sortBy,
19593
- startIndex,
19594
- stopIndex,
19595
- pageCount
19678
+ groupBy
19596
19679
  });
19597
19680
  vue.provide('v-data-table', {
19598
19681
  toggleSort,
@@ -19628,7 +19711,7 @@
19628
19711
  "class": "v-data-table__tbody",
19629
19712
  "role": "rowgroup"
19630
19713
  }, [slots.body ? slots.body() : vue.createVNode(VDataTableRows, {
19631
- "items": items.value,
19714
+ "items": flatItems.value,
19632
19715
  "onClick:row": (event, value) => emit('click:row', event, value)
19633
19716
  }, slots)]), (_slots$tbody = slots.tbody) == null ? void 0 : _slots$tbody.call(slots), (_slots$tfoot = slots.tfoot) == null ? void 0 : _slots$tfoot.call(slots)]);
19634
19717
  }),
@@ -19919,6 +20002,7 @@
19919
20002
  VDataTableRow: VDataTableRow,
19920
20003
  VDataTableVirtual: VDataTableVirtual,
19921
20004
  VDataTableServer: VDataTableServer,
20005
+ VDataTableFooter: VDataTableFooter,
19922
20006
  VVirtualScroll: VVirtualScroll
19923
20007
  });
19924
20008
 
@@ -20134,7 +20218,7 @@
20134
20218
  locale
20135
20219
  };
20136
20220
  }
20137
- const version$1 = "3.2.0-next-20230114.0";
20221
+ const version$1 = "4.0.0-dev-20230206.0";
20138
20222
  createVuetify$1.version = version$1;
20139
20223
 
20140
20224
  // Vue's inject() can only be used in setup
@@ -20147,7 +20231,7 @@
20147
20231
  }
20148
20232
  }
20149
20233
 
20150
- const version = "3.2.0-next-20230114.0";
20234
+ const version = "4.0.0-dev-20230206.0";
20151
20235
 
20152
20236
  const createVuetify = function () {
20153
20237
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};