@vuetify/nightly 3.2.0-next-20230118.0 → 4.0.0-master-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 (177) hide show
  1. package/CHANGELOG.md +204 -16
  2. package/dist/json/attributes.json +7202 -0
  3. package/dist/json/importMap-labs.json +4 -0
  4. package/dist/json/importMap.json +50 -50
  5. package/dist/json/tags.json +2492 -0
  6. package/dist/json/web-types.json +24081 -0
  7. package/dist/vuetify-labs.css +183 -176
  8. package/dist/vuetify-labs.d.ts +387 -176
  9. package/dist/vuetify-labs.esm.js +284 -216
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +283 -215
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +51 -44
  14. package/dist/vuetify.d.ts +329 -190
  15. package/dist/vuetify.esm.js +251 -186
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +250 -185
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +696 -685
  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 +8 -3
  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 +3 -3
  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.mjs +7 -4
  72. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  73. package/lib/components/VForm/index.d.ts +0 -3
  74. package/lib/components/VList/VList.mjs +4 -1
  75. package/lib/components/VList/VList.mjs.map +1 -1
  76. package/lib/components/VList/VListItem.css +7 -7
  77. package/lib/components/VList/VListItem.mjs +29 -19
  78. package/lib/components/VList/VListItem.mjs.map +1 -1
  79. package/lib/components/VMenu/VMenu.mjs +6 -5
  80. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  81. package/lib/components/VMenu/index.d.ts +57 -34
  82. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +4 -0
  83. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +1 -1
  84. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  85. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +4 -0
  86. package/lib/components/VNavigationDrawer/index.d.ts +3 -3
  87. package/lib/components/VNavigationDrawer/touch.mjs +7 -6
  88. package/lib/components/VNavigationDrawer/touch.mjs.map +1 -1
  89. package/lib/components/VOtpInput/VOtpInput.mjs +22 -46
  90. package/lib/components/VOtpInput/VOtpInput.mjs.map +1 -1
  91. package/lib/components/VOverflowBtn/VOverflowBtn.mjs +3 -0
  92. package/lib/components/VOverflowBtn/VOverflowBtn.mjs.map +1 -1
  93. package/lib/components/VOverlay/index.d.ts +34 -11
  94. package/lib/components/VOverlay/locationStrategies.mjs +40 -29
  95. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  96. package/lib/components/VOverlay/scrollStrategies.mjs +25 -16
  97. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  98. package/lib/components/VPagination/VPagination.mjs +1 -1
  99. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  100. package/lib/components/VSelect/VSelect.mjs +3 -4
  101. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  102. package/lib/components/VSelect/index.d.ts +43 -20
  103. package/lib/components/VSelectionControl/VSelectionControl.css +2 -2
  104. package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +1 -1
  105. package/lib/components/VSnackbar/index.d.ts +42 -19
  106. package/lib/components/VStepper/VStepper.sass +6 -6
  107. package/lib/components/VStepper/VStepperStep.mjs +12 -2
  108. package/lib/components/VStepper/VStepperStep.mjs.map +1 -1
  109. package/lib/components/VTable/VTable.css +4 -4
  110. package/lib/components/VTable/VTable.sass +2 -2
  111. package/lib/components/VTimePicker/VTimePicker.mjs.map +1 -1
  112. package/lib/components/VTimeline/_mixins.sass +1 -1
  113. package/lib/components/VTooltip/VTooltip.mjs +4 -3
  114. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  115. package/lib/components/VTooltip/index.d.ts +57 -34
  116. package/lib/components/VTreeview/VTreeview.mjs +1 -1
  117. package/lib/components/VTreeview/VTreeview.mjs.map +1 -1
  118. package/lib/components/index.d.ts +316 -176
  119. package/lib/composables/defaults.mjs +1 -1
  120. package/lib/composables/defaults.mjs.map +1 -1
  121. package/lib/composables/filter.mjs +3 -3
  122. package/lib/composables/filter.mjs.map +1 -1
  123. package/lib/composables/form.mjs +0 -1
  124. package/lib/composables/form.mjs.map +1 -1
  125. package/lib/composables/nested/nested.mjs +2 -1
  126. package/lib/composables/nested/nested.mjs.map +1 -1
  127. package/lib/composables/toggleScope.mjs +14 -7
  128. package/lib/composables/toggleScope.mjs.map +1 -1
  129. package/lib/directives/ripple/VRipple.css +3 -0
  130. package/lib/directives/ripple/VRipple.sass +3 -0
  131. package/lib/directives/ripple/_variables.scss +1 -1
  132. package/lib/directives/ripple/index.mjs +2 -7
  133. package/lib/directives/ripple/index.mjs.map +1 -1
  134. package/lib/entry-bundler.mjs +1 -1
  135. package/lib/entry-bundler.mjs.map +1 -1
  136. package/lib/framework.mjs +1 -1
  137. package/lib/framework.mjs.map +1 -1
  138. package/lib/index.d.ts +16 -16
  139. package/lib/labs/VDataTable/VDataTable.mjs +6 -6
  140. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  141. package/lib/labs/VDataTable/VDataTableFooter.mjs +1 -1
  142. package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -1
  143. package/lib/labs/VDataTable/VDataTableRows.mjs +1 -1
  144. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  145. package/lib/labs/VDataTable/VDataTableServer.mjs +19 -12
  146. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  147. package/lib/labs/VDataTable/VDataTableVirtual.mjs +6 -5
  148. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  149. package/lib/labs/VDataTable/composables/options.mjs +3 -7
  150. package/lib/labs/VDataTable/composables/options.mjs.map +1 -1
  151. package/lib/labs/VDataTable/composables/paginate.mjs +1 -1
  152. package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -1
  153. package/lib/labs/VDataTable/index.d.ts +71 -1
  154. package/lib/labs/VDataTable/index.mjs +1 -0
  155. package/lib/labs/VDataTable/index.mjs.map +1 -1
  156. package/lib/labs/components.d.ts +71 -1
  157. package/lib/locale/adapters/vue-i18n.mjs +12 -2
  158. package/lib/locale/adapters/vue-i18n.mjs.map +1 -1
  159. package/lib/locale/ar.mjs +20 -20
  160. package/lib/locale/ar.mjs.map +1 -1
  161. package/lib/locale/en.mjs +2 -2
  162. package/lib/locale/en.mjs.map +1 -1
  163. package/lib/locale/es.mjs +3 -3
  164. package/lib/locale/es.mjs.map +1 -1
  165. package/lib/locale/fi.mjs +5 -5
  166. package/lib/locale/fi.mjs.map +1 -1
  167. package/lib/locale/it.mjs +6 -6
  168. package/lib/locale/it.mjs.map +1 -1
  169. package/lib/locale/sv.mjs +13 -13
  170. package/lib/locale/sv.mjs.map +1 -1
  171. package/lib/styles/settings/_variables.scss +6 -6
  172. package/lib/styles/tools/_states.sass +3 -3
  173. package/lib/util/defineComponent.mjs +21 -18
  174. package/lib/util/defineComponent.mjs.map +1 -1
  175. package/lib/util/helpers.mjs +5 -19
  176. package/lib/util/helpers.mjs.map +1 -1
  177. package/package.json +1 -1
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.2.0-next-20230118.0
2
+ * Vuetify v4.0.0-master-20230206.0
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
  }
@@ -3368,18 +3382,21 @@ function useVariant(props) {
3368
3382
  };
3369
3383
  }
3370
3384
 
3385
+ // Types
3386
+
3387
+ const makeVBtnGroupProps = propsFactory({
3388
+ divided: Boolean,
3389
+ ...makeBorderProps(),
3390
+ ...makeDensityProps(),
3391
+ ...makeElevationProps(),
3392
+ ...makeRoundedProps(),
3393
+ ...makeTagProps(),
3394
+ ...makeThemeProps(),
3395
+ ...makeVariantProps()
3396
+ }, 'v-btn-group');
3371
3397
  const VBtnGroup = defineComponent({
3372
3398
  name: 'VBtnGroup',
3373
- props: {
3374
- divided: Boolean,
3375
- ...makeBorderProps(),
3376
- ...makeDensityProps(),
3377
- ...makeElevationProps(),
3378
- ...makeRoundedProps(),
3379
- ...makeTagProps(),
3380
- ...makeThemeProps(),
3381
- ...makeVariantProps()
3382
- },
3399
+ props: makeVBtnGroupProps(),
3383
3400
  setup(props, _ref) {
3384
3401
  let {
3385
3402
  slots
@@ -3417,6 +3434,9 @@ const VBtnGroup = defineComponent({
3417
3434
  });
3418
3435
  }
3419
3436
  });
3437
+ function filterVBtnGroupProps(props) {
3438
+ return pick(props, Object.keys(VBtnGroup.props));
3439
+ }
3420
3440
 
3421
3441
  // Composables
3422
3442
 
@@ -3624,7 +3644,10 @@ function getValues(items, ids) {
3624
3644
  const VBtnToggleSymbol = Symbol.for('vuetify:v-btn-toggle');
3625
3645
  const VBtnToggle = genericComponent()({
3626
3646
  name: 'VBtnToggle',
3627
- props: makeGroupProps(),
3647
+ props: {
3648
+ ...makeVBtnGroupProps(),
3649
+ ...makeGroupProps()
3650
+ },
3628
3651
  emits: {
3629
3652
  'update:modelValue': value => true
3630
3653
  },
@@ -3641,9 +3664,10 @@ const VBtnToggle = genericComponent()({
3641
3664
  } = useGroup(props, VBtnToggleSymbol);
3642
3665
  useRender(() => {
3643
3666
  var _slots$default;
3644
- return createVNode(VBtnGroup, {
3667
+ const [btnGroupProps] = filterVBtnGroupProps(props);
3668
+ return createVNode(VBtnGroup, mergeProps({
3645
3669
  "class": "v-btn-toggle"
3646
- }, {
3670
+ }, btnGroupProps), {
3647
3671
  default: () => [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, {
3648
3672
  isSelected,
3649
3673
  next,
@@ -4098,9 +4122,6 @@ function transform(el, value) {
4098
4122
  el.style.transform = value;
4099
4123
  el.style.webkitTransform = value;
4100
4124
  }
4101
- function opacity(el, value) {
4102
- el.style.opacity = `calc(${value} * var(--v-theme-overlay-multiplier))`;
4103
- }
4104
4125
  function isTouchEvent(e) {
4105
4126
  return e.constructor.name === 'TouchEvent';
4106
4127
  }
@@ -4176,13 +4197,11 @@ const ripples = {
4176
4197
  animation.classList.add('v-ripple__animation--enter');
4177
4198
  animation.classList.add('v-ripple__animation--visible');
4178
4199
  transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`);
4179
- opacity(animation, 0);
4180
4200
  animation.dataset.activated = String(performance.now());
4181
4201
  setTimeout(() => {
4182
4202
  animation.classList.remove('v-ripple__animation--enter');
4183
4203
  animation.classList.add('v-ripple__animation--in');
4184
4204
  transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
4185
- opacity(animation, 0.08);
4186
4205
  }, 0);
4187
4206
  },
4188
4207
  hide(el) {
@@ -4197,14 +4216,14 @@ const ripples = {
4197
4216
  setTimeout(() => {
4198
4217
  animation.classList.remove('v-ripple__animation--in');
4199
4218
  animation.classList.add('v-ripple__animation--out');
4200
- opacity(animation, 0);
4201
4219
  setTimeout(() => {
4220
+ var _animation$parentNode;
4202
4221
  const ripples = el.getElementsByClassName('v-ripple__animation');
4203
4222
  if (ripples.length === 1 && el.dataset.previousPosition) {
4204
4223
  el.style.position = el.dataset.previousPosition;
4205
4224
  delete el.dataset.previousPosition;
4206
4225
  }
4207
- animation.parentNode && el.removeChild(animation.parentNode);
4226
+ if (((_animation$parentNode = animation.parentNode) == null ? void 0 : _animation$parentNode.parentNode) === el) el.removeChild(animation.parentNode);
4208
4227
  }, 300);
4209
4228
  }, delay);
4210
4229
  }
@@ -4857,14 +4876,18 @@ const VBtn = defineComponent({
4857
4876
  const isElevated = computed(() => {
4858
4877
  return props.variant === 'elevated' && !(props.disabled || props.flat || props.border);
4859
4878
  });
4879
+ const valueAttr = computed(() => {
4880
+ if (props.value === undefined) return undefined;
4881
+ return Object(props.value) === props.value ? JSON.stringify(props.value, null, 0) : props.value;
4882
+ });
4860
4883
  useSelectLink(link, group == null ? void 0 : group.select);
4861
4884
  useRender(() => {
4862
- var _slots$prepend, _slots$default, _slots$append, _slots$loader;
4885
+ var _link$isActive2, _link$isActive3, _slots$prepend, _slots$default, _slots$append, _slots$loader;
4863
4886
  const Tag = link.isLink.value ? 'a' : props.tag;
4864
- const hasColor = !group || isActive.value;
4865
4887
  const hasPrepend = !!(props.prependIcon || slots.prepend);
4866
4888
  const hasAppend = !!(props.appendIcon || slots.append);
4867
4889
  const hasIcon = !!(props.icon && props.icon !== true);
4890
+ const hasColor = (group == null ? void 0 : group.isSelected.value) && (!link.isLink.value || ((_link$isActive2 = link.isActive) == null ? void 0 : _link$isActive2.value)) || !group || ((_link$isActive3 = link.isActive) == null ? void 0 : _link$isActive3.value);
4868
4891
  return withDirectives(createVNode(Tag, {
4869
4892
  "type": Tag === 'a' ? undefined : 'button',
4870
4893
  "class": ['v-btn', group == null ? void 0 : group.selectedClass.value, {
@@ -4885,7 +4908,8 @@ const VBtn = defineComponent({
4885
4908
  if (isDisabled.value) return;
4886
4909
  (_link$navigate = link.navigate) == null ? void 0 : _link$navigate.call(link, e);
4887
4910
  group == null ? void 0 : group.toggle();
4888
- }
4911
+ },
4912
+ "value": valueAttr.value
4889
4913
  }, {
4890
4914
  default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && createVNode(VDefaultsProvider, {
4891
4915
  "key": "prepend",
@@ -5359,32 +5383,34 @@ const VField = genericComponent()({
5359
5383
  if (hasLabel.value) {
5360
5384
  const el = labelRef.value.$el;
5361
5385
  const targetEl = floatingLabelRef.value.$el;
5362
- const rect = nullifyTransforms(el);
5363
- const targetRect = targetEl.getBoundingClientRect();
5364
- const x = targetRect.x - rect.x;
5365
- const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2);
5366
- const targetWidth = targetRect.width / 0.75;
5367
- const width = Math.abs(targetWidth - rect.width) > 1 ? {
5368
- maxWidth: convertToUnit(targetWidth)
5369
- } : undefined;
5370
- const style = getComputedStyle(el);
5371
- const targetStyle = getComputedStyle(targetEl);
5372
- const duration = parseFloat(style.transitionDuration) * 1000 || 150;
5373
- const scale = parseFloat(targetStyle.getPropertyValue('--v-field-label-scale'));
5374
- const color = targetStyle.getPropertyValue('color');
5375
- el.style.visibility = 'visible';
5376
- targetEl.style.visibility = 'hidden';
5377
- animate(el, {
5378
- transform: `translate(${x}px, ${y}px) scale(${scale})`,
5379
- color,
5380
- ...width
5381
- }, {
5382
- duration,
5383
- easing: standardEasing,
5384
- direction: val ? 'normal' : 'reverse'
5385
- }).finished.then(() => {
5386
- el.style.removeProperty('visibility');
5387
- targetEl.style.removeProperty('visibility');
5386
+ requestAnimationFrame(() => {
5387
+ const rect = nullifyTransforms(el);
5388
+ const targetRect = targetEl.getBoundingClientRect();
5389
+ const x = targetRect.x - rect.x;
5390
+ const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2);
5391
+ const targetWidth = targetRect.width / 0.75;
5392
+ const width = Math.abs(targetWidth - rect.width) > 1 ? {
5393
+ maxWidth: convertToUnit(targetWidth)
5394
+ } : undefined;
5395
+ const style = getComputedStyle(el);
5396
+ const targetStyle = getComputedStyle(targetEl);
5397
+ const duration = parseFloat(style.transitionDuration) * 1000 || 150;
5398
+ const scale = parseFloat(targetStyle.getPropertyValue('--v-field-label-scale'));
5399
+ const color = targetStyle.getPropertyValue('color');
5400
+ el.style.visibility = 'visible';
5401
+ targetEl.style.visibility = 'hidden';
5402
+ animate(el, {
5403
+ transform: `translate(${x}px, ${y}px) scale(${scale})`,
5404
+ color,
5405
+ ...width
5406
+ }, {
5407
+ duration,
5408
+ easing: standardEasing,
5409
+ direction: val ? 'normal' : 'reverse'
5410
+ }).finished.then(() => {
5411
+ el.style.removeProperty('visibility');
5412
+ targetEl.style.removeProperty('visibility');
5413
+ });
5388
5414
  });
5389
5415
  }
5390
5416
  }, {
@@ -5573,7 +5599,6 @@ const FormKey = Symbol.for('vuetify:form');
5573
5599
  const makeFormProps = propsFactory({
5574
5600
  disabled: Boolean,
5575
5601
  fastFail: Boolean,
5576
- lazyValidation: Boolean,
5577
5602
  readonly: Boolean,
5578
5603
  modelValue: {
5579
5604
  type: Boolean,
@@ -6977,9 +7002,9 @@ const VDivider = defineComponent({
6977
7002
  themeClasses
6978
7003
  } = provideTheme(props);
6979
7004
  const {
6980
- backgroundColorClasses,
6981
- backgroundColorStyles
6982
- } = useBackgroundColor(toRef(props, 'color'));
7005
+ textColorClasses,
7006
+ textColorStyles
7007
+ } = useTextColor(toRef(props, 'color'));
6983
7008
  const dividerStyles = computed(() => {
6984
7009
  const styles = {};
6985
7010
  if (props.length) {
@@ -6995,8 +7020,8 @@ const VDivider = defineComponent({
6995
7020
  'v-divider': true,
6996
7021
  'v-divider--inset': props.inset,
6997
7022
  'v-divider--vertical': props.vertical
6998
- }, themeClasses.value, backgroundColorClasses.value],
6999
- "style": [dividerStyles.value, backgroundColorStyles.value],
7023
+ }, themeClasses.value, textColorClasses.value],
7024
+ "style": [dividerStyles.value, textColorStyles.value],
7000
7025
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
7001
7026
  "role": `${attrs.role || 'separator'}`
7002
7027
  }, null));
@@ -7434,7 +7459,8 @@ const useNested = props => {
7434
7459
  };
7435
7460
  const useNestedItem = (id, isGroup) => {
7436
7461
  const parent = inject$1(VNestedSymbol, emptyNested);
7437
- const computedId = computed(() => id.value ?? Symbol(getUid()));
7462
+ const uidSymbol = Symbol(getUid());
7463
+ const computedId = computed(() => id.value ?? uidSymbol);
7438
7464
  const item = {
7439
7465
  ...parent,
7440
7466
  id: computedId,
@@ -7706,7 +7732,7 @@ const VListItem = genericComponent()({
7706
7732
  }
7707
7733
  }
7708
7734
  useRender(() => {
7709
- var _slots$prepend, _slots$title, _slots$subtitle, _slots$default, _slots$append;
7735
+ var _slots$title, _slots$subtitle, _slots$default;
7710
7736
  const Tag = isLink.value ? 'a' : props.tag;
7711
7737
  const hasColor = !list || isSelected.value || isActive.value;
7712
7738
  const hasTitle = slots.title || props.title;
@@ -7729,7 +7755,18 @@ const VListItem = genericComponent()({
7729
7755
  "onClick": onClick,
7730
7756
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
7731
7757
  }, {
7732
- default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && createVNode(VDefaultsProvider, {
7758
+ default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && createVNode("div", {
7759
+ "key": "prepend",
7760
+ "class": "v-list-item__prepend"
7761
+ }, [props.prependAvatar && createVNode(VAvatar, {
7762
+ "key": "prepend-avatar",
7763
+ "density": props.density,
7764
+ "image": props.prependAvatar
7765
+ }, null), props.prependIcon && createVNode(VIcon, {
7766
+ "key": "prepend-icon",
7767
+ "density": props.density,
7768
+ "icon": props.prependIcon
7769
+ }, null), slots.prepend && createVNode(VDefaultsProvider, {
7733
7770
  "key": "prepend",
7734
7771
  "defaults": {
7735
7772
  VAvatar: {
@@ -7745,14 +7782,8 @@ const VListItem = genericComponent()({
7745
7782
  }
7746
7783
  }
7747
7784
  }, {
7748
- default: () => [createVNode("div", {
7749
- "class": "v-list-item__prepend"
7750
- }, [props.prependAvatar && createVNode(VAvatar, {
7751
- "key": "prepend-avatar"
7752
- }, null), props.prependIcon && createVNode(VIcon, {
7753
- "key": "prepend-icon"
7754
- }, null), (_slots$prepend = slots.prepend) == null ? void 0 : _slots$prepend.call(slots, slotProps.value)])]
7755
- }), createVNode("div", {
7785
+ default: () => [slots.prepend(slotProps.value)]
7786
+ })]), createVNode("div", {
7756
7787
  "class": "v-list-item__content",
7757
7788
  "data-no-activator": ""
7758
7789
  }, [hasTitle && createVNode(VListItemTitle, {
@@ -7767,7 +7798,10 @@ const VListItem = genericComponent()({
7767
7798
  default: () => [((_slots$subtitle = slots.subtitle) == null ? void 0 : _slots$subtitle.call(slots, {
7768
7799
  subtitle: props.subtitle
7769
7800
  })) ?? props.subtitle]
7770
- }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value)]), hasAppend && createVNode(VDefaultsProvider, {
7801
+ }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value)]), hasAppend && createVNode("div", {
7802
+ "key": "append",
7803
+ "class": "v-list-item__append"
7804
+ }, [slots.append && createVNode(VDefaultsProvider, {
7771
7805
  "key": "append",
7772
7806
  "defaults": {
7773
7807
  VAvatar: {
@@ -7783,14 +7817,16 @@ const VListItem = genericComponent()({
7783
7817
  }
7784
7818
  }
7785
7819
  }, {
7786
- default: () => [createVNode("div", {
7787
- "class": "v-list-item__append"
7788
- }, [(_slots$append = slots.append) == null ? void 0 : _slots$append.call(slots, slotProps.value), props.appendIcon && createVNode(VIcon, {
7789
- "key": "append-icon"
7790
- }, null), props.appendAvatar && createVNode(VAvatar, {
7791
- "key": "append-avatar"
7792
- }, null)])]
7793
- })]
7820
+ default: () => [slots.append(slotProps.value)]
7821
+ }), props.appendIcon && createVNode(VIcon, {
7822
+ "key": "append-icon",
7823
+ "density": props.density,
7824
+ "icon": props.appendIcon
7825
+ }, null), props.appendAvatar && createVNode(VAvatar, {
7826
+ "key": "append-avatar",
7827
+ "density": props.density,
7828
+ "image": props.appendAvatar
7829
+ }, null)])]
7794
7830
  }), [[resolveDirective("ripple"), isClickable.value && props.ripple]]);
7795
7831
  });
7796
7832
  return {};
@@ -8004,9 +8040,12 @@ function useItems(props) {
8004
8040
 
8005
8041
  // Types
8006
8042
 
8043
+ function isPrimitive(value) {
8044
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
8045
+ }
8007
8046
  function transformItem(props, item) {
8008
8047
  const type = getPropertyFromItem(item, props.itemType, 'item');
8009
- const title = typeof item === 'string' ? item : getPropertyFromItem(item, props.itemTitle);
8048
+ const title = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemTitle);
8010
8049
  const value = getPropertyFromItem(item, props.itemValue, undefined);
8011
8050
  const children = getPropertyFromItem(item, props.itemChildren);
8012
8051
  const itemProps = props.itemProps === true ? pick(item, ['children'])[1] : getPropertyFromItem(item, props.itemProps);
@@ -8632,17 +8671,12 @@ const makeLocationStrategyProps = propsFactory({
8632
8671
  function useLocationStrategies(props, data) {
8633
8672
  const contentStyles = ref({});
8634
8673
  const updateLocation = ref();
8635
- let scope;
8636
- watchEffect(async () => {
8637
- var _scope;
8638
- (_scope = scope) == null ? void 0 : _scope.stop();
8639
- updateLocation.value = undefined;
8640
- if (!(IN_BROWSER && data.isActive.value && props.locationStrategy)) return;
8641
- scope = effectScope();
8642
- if (!(props.locationStrategy === 'connected')) {
8643
- await nextTick();
8644
- }
8645
- scope.run(() => {
8674
+ if (IN_BROWSER) {
8675
+ useToggleScope(() => !!(data.isActive.value && props.locationStrategy), reset => {
8676
+ watch(() => props.locationStrategy, reset);
8677
+ onScopeDispose(() => {
8678
+ updateLocation.value = undefined;
8679
+ });
8646
8680
  if (typeof props.locationStrategy === 'function') {
8647
8681
  var _props$locationStrate;
8648
8682
  updateLocation.value = (_props$locationStrate = props.locationStrategy(data, props, contentStyles)) == null ? void 0 : _props$locationStrate.updateLocation;
@@ -8651,16 +8685,14 @@ function useLocationStrategies(props, data) {
8651
8685
  updateLocation.value = (_locationStrategies$p = locationStrategies[props.locationStrategy](data, props, contentStyles)) == null ? void 0 : _locationStrategies$p.updateLocation;
8652
8686
  }
8653
8687
  });
8654
- });
8655
- IN_BROWSER && window.addEventListener('resize', onResize, {
8656
- passive: true
8657
- });
8658
- onScopeDispose(() => {
8659
- var _scope2;
8660
- IN_BROWSER && window.removeEventListener('resize', onResize);
8661
- updateLocation.value = undefined;
8662
- (_scope2 = scope) == null ? void 0 : _scope2.stop();
8663
- });
8688
+ window.addEventListener('resize', onResize, {
8689
+ passive: true
8690
+ });
8691
+ onScopeDispose(() => {
8692
+ window.removeEventListener('resize', onResize);
8693
+ updateLocation.value = undefined;
8694
+ });
8695
+ }
8664
8696
  function onResize(e) {
8665
8697
  var _updateLocation$value;
8666
8698
  (_updateLocation$value = updateLocation.value) == null ? void 0 : _updateLocation$value.call(updateLocation, e);
@@ -8954,13 +8986,30 @@ function connectedLocationStrategy(data, props, contentStyles) {
8954
8986
  maxWidth: convertToUnit(pixelCeil(clamp(available.x, minWidth.value === Infinity ? 0 : minWidth.value, maxWidth.value))),
8955
8987
  maxHeight: convertToUnit(pixelCeil(clamp(available.y, minHeight.value === Infinity ? 0 : minHeight.value, maxHeight.value)))
8956
8988
  });
8989
+ return {
8990
+ available,
8991
+ contentBox
8992
+ };
8957
8993
  }
8958
- watch(() => [preferredAnchor.value, preferredOrigin.value, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight], () => updateLocation(), {
8959
- immediate: !activatorFixed
8960
- });
8961
- if (activatorFixed) nextTick(() => updateLocation());
8962
- requestAnimationFrame(() => {
8963
- if (contentStyles.value.maxHeight) updateLocation();
8994
+ watch(() => [preferredAnchor.value, preferredOrigin.value, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight], () => updateLocation());
8995
+ nextTick(() => {
8996
+ const result = updateLocation();
8997
+
8998
+ // TODO: overflowing content should only require a single updateLocation call
8999
+ // Icky hack to make sure the content is positioned consistently
9000
+ if (!result) return;
9001
+ const {
9002
+ available,
9003
+ contentBox
9004
+ } = result;
9005
+ if (contentBox.height > available.y) {
9006
+ requestAnimationFrame(() => {
9007
+ updateLocation();
9008
+ requestAnimationFrame(() => {
9009
+ updateLocation();
9010
+ });
9011
+ });
9012
+ }
8964
9013
  });
8965
9014
  return {
8966
9015
  updateLocation
@@ -9028,10 +9077,10 @@ function useScrollStrategies(props, data) {
9028
9077
  await nextTick();
9029
9078
  scope.run(() => {
9030
9079
  if (typeof props.scrollStrategy === 'function') {
9031
- props.scrollStrategy(data, props);
9080
+ props.scrollStrategy(data, props, scope);
9032
9081
  } else {
9033
9082
  var _scrollStrategies$pro;
9034
- (_scrollStrategies$pro = scrollStrategies[props.scrollStrategy]) == null ? void 0 : _scrollStrategies$pro.call(scrollStrategies, data, props);
9083
+ (_scrollStrategies$pro = scrollStrategies[props.scrollStrategy]) == null ? void 0 : _scrollStrategies$pro.call(scrollStrategies, data, props, scope);
9035
9084
  }
9036
9085
  });
9037
9086
  });
@@ -9077,9 +9126,10 @@ function blockScrollStrategy(data, props) {
9077
9126
  }
9078
9127
  });
9079
9128
  }
9080
- function repositionScrollStrategy(data) {
9129
+ function repositionScrollStrategy(data, props, scope) {
9081
9130
  let slow = false;
9082
9131
  let raf = -1;
9132
+ let ric = -1;
9083
9133
  function update(e) {
9084
9134
  requestNewFrame(() => {
9085
9135
  var _data$updateLocation$, _data$updateLocation;
@@ -9089,21 +9139,29 @@ function repositionScrollStrategy(data) {
9089
9139
  slow = time / (1000 / 60) > 2;
9090
9140
  });
9091
9141
  }
9092
- bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
9093
- if (slow) {
9094
- // If the position calculation is slow,
9095
- // defer updates until scrolling is finished.
9096
- // Browsers usually fire one scroll event per frame so
9097
- // we just wait until we've got two frames without an event
9098
- cancelAnimationFrame(raf);
9099
- raf = requestAnimationFrame(() => {
9100
- raf = requestAnimationFrame(() => {
9142
+ ric = requestIdleCallback(() => {
9143
+ scope.run(() => {
9144
+ bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
9145
+ if (slow) {
9146
+ // If the position calculation is slow,
9147
+ // defer updates until scrolling is finished.
9148
+ // Browsers usually fire one scroll event per frame so
9149
+ // we just wait until we've got two frames without an event
9150
+ cancelAnimationFrame(raf);
9151
+ raf = requestAnimationFrame(() => {
9152
+ raf = requestAnimationFrame(() => {
9153
+ update(e);
9154
+ });
9155
+ });
9156
+ } else {
9101
9157
  update(e);
9102
- });
9158
+ }
9103
9159
  });
9104
- } else {
9105
- update(e);
9106
- }
9160
+ });
9161
+ });
9162
+ onScopeDispose(() => {
9163
+ cancelIdleCallback(ric);
9164
+ cancelAnimationFrame(raf);
9107
9165
  });
9108
9166
  }
9109
9167
 
@@ -9746,6 +9804,11 @@ const VMenu = genericComponent()({
9746
9804
  function onClickOutside() {
9747
9805
  parent == null ? void 0 : parent.closeParents();
9748
9806
  }
9807
+ const activatorProps = computed(() => mergeProps({
9808
+ 'aria-haspopup': 'menu',
9809
+ 'aria-expanded': String(isActive.value),
9810
+ 'aria-owns': id.value
9811
+ }, props.activatorProps));
9749
9812
  useRender(() => {
9750
9813
  const [overlayProps] = filterVOverlayProps(props);
9751
9814
  return createVNode(VOverlay, mergeProps({
@@ -9755,11 +9818,7 @@ const VMenu = genericComponent()({
9755
9818
  "modelValue": isActive.value,
9756
9819
  "onUpdate:modelValue": $event => isActive.value = $event,
9757
9820
  "absolute": true,
9758
- "activatorProps": mergeProps({
9759
- 'aria-haspopup': 'menu',
9760
- 'aria-expanded': String(isActive.value),
9761
- 'aria-owns': id.value
9762
- }, props.activatorProps),
9821
+ "activatorProps": activatorProps.value,
9763
9822
  "onClick:outside": onClickOutside
9764
9823
  }, scopeId), {
9765
9824
  activator: slots.activator,
@@ -9873,8 +9932,10 @@ const VSelect = genericComponent()({
9873
9932
  }
9874
9933
  function onKeydown(e) {
9875
9934
  if (props.readonly || form != null && form.isReadonly.value) return;
9876
- if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9935
+ if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
9877
9936
  e.preventDefault();
9937
+ }
9938
+ if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9878
9939
  menu.value = true;
9879
9940
  }
9880
9941
  if (['Escape', 'Tab'].includes(e.key)) {
@@ -9885,15 +9946,12 @@ const VSelect = genericComponent()({
9885
9946
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
9886
9947
  } else if (e.key === 'ArrowUp') {
9887
9948
  var _listRef$value2;
9888
- e.preventDefault();
9889
9949
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
9890
9950
  } else if (e.key === 'Home') {
9891
9951
  var _listRef$value3;
9892
- e.preventDefault();
9893
9952
  (_listRef$value3 = listRef.value) == null ? void 0 : _listRef$value3.focus('first');
9894
9953
  } else if (e.key === 'End') {
9895
9954
  var _listRef$value4;
9896
- e.preventDefault();
9897
9955
  (_listRef$value4 = listRef.value) == null ? void 0 : _listRef$value4.focus('last');
9898
9956
  }
9899
9957
  }
@@ -10075,7 +10133,7 @@ function filterItems(items, query, options) {
10075
10133
  const customFiltersLength = Object.keys((options == null ? void 0 : options.customKeyFilter) ?? {}).length;
10076
10134
  if (!(items != null && items.length)) return array;
10077
10135
  loop: for (let i = 0; i < items.length; i++) {
10078
- const item = items[i].raw;
10136
+ const item = items[i];
10079
10137
  const customMatches = {};
10080
10138
  const defaultMatches = {};
10081
10139
  let match = -1;
@@ -10115,7 +10173,7 @@ function filterItems(items, query, options) {
10115
10173
  }
10116
10174
  return array;
10117
10175
  }
10118
- function useFilter(props, items, query) {
10176
+ function useFilter(props, items, query, options) {
10119
10177
  const strQuery = computed(() => typeof (query == null ? void 0 : query.value) !== 'string' && typeof (query == null ? void 0 : query.value) !== 'number' ? '' : String(query.value));
10120
10178
  const filteredItems = ref([]);
10121
10179
  const filteredMatches = ref(new Map());
@@ -10126,7 +10184,7 @@ function useFilter(props, items, query) {
10126
10184
  const results = filterItems(transformedItems, strQuery.value, {
10127
10185
  customKeyFilter: props.customKeyFilter,
10128
10186
  default: props.customFilter,
10129
- filterKeys: props.filterKeys,
10187
+ filterKeys: unref(options == null ? void 0 : options.filterKeys) ?? props.filterKeys,
10130
10188
  filterMode: props.filterMode,
10131
10189
  noFilter: props.noFilter
10132
10190
  });
@@ -10237,6 +10295,9 @@ const VAutocomplete = genericComponent()({
10237
10295
  }
10238
10296
  function onKeydown(e) {
10239
10297
  if (props.readonly || form != null && form.isReadonly.value) return;
10298
+ if (['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
10299
+ e.preventDefault();
10300
+ }
10240
10301
  if (['Enter', 'ArrowDown'].includes(e.key)) {
10241
10302
  menu.value = true;
10242
10303
  }
@@ -10248,11 +10309,9 @@ const VAutocomplete = genericComponent()({
10248
10309
  }
10249
10310
  if (e.key === 'ArrowDown') {
10250
10311
  var _listRef$value;
10251
- e.preventDefault();
10252
10312
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
10253
10313
  } else if (e.key === 'ArrowUp') {
10254
10314
  var _listRef$value2;
10255
- e.preventDefault();
10256
10315
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
10257
10316
  }
10258
10317
  }
@@ -13581,7 +13640,9 @@ const VCombobox = genericComponent()({
13581
13640
  if (props.readonly || form != null && form.isReadonly.value) return;
13582
13641
  const selectionStart = vTextFieldRef.value.selectionStart;
13583
13642
  const length = selected.value.length;
13584
- if (selectionIndex.value > -1) e.preventDefault();
13643
+ if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
13644
+ e.preventDefault();
13645
+ }
13585
13646
  if (['Enter', 'ArrowDown'].includes(e.key)) {
13586
13647
  menu.value = true;
13587
13648
  }
@@ -13593,11 +13654,9 @@ const VCombobox = genericComponent()({
13593
13654
  }
13594
13655
  if (e.key === 'ArrowDown') {
13595
13656
  var _listRef$value;
13596
- e.preventDefault();
13597
13657
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
13598
13658
  } else if (e.key === 'ArrowUp') {
13599
13659
  var _listRef$value2;
13600
- e.preventDefault();
13601
13660
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
13602
13661
  }
13603
13662
  if (!props.multiple) return;
@@ -13892,6 +13951,10 @@ const VDialog = genericComponent()({
13892
13951
  });
13893
13952
  }
13894
13953
  });
13954
+ const activatorProps = computed(() => mergeProps({
13955
+ 'aria-haspopup': 'dialog',
13956
+ 'aria-expanded': String(isActive.value)
13957
+ }, props.activatorProps));
13895
13958
  useRender(() => {
13896
13959
  const [overlayProps] = filterVOverlayProps(props);
13897
13960
  return createVNode(VOverlay, mergeProps({
@@ -13905,10 +13968,7 @@ const VDialog = genericComponent()({
13905
13968
  "onUpdate:modelValue": $event => isActive.value = $event,
13906
13969
  "aria-role": "dialog",
13907
13970
  "aria-modal": "true",
13908
- "activatorProps": mergeProps({
13909
- 'aria-haspopup': 'dialog',
13910
- 'aria-expanded': String(isActive.value)
13911
- }, props.activatorProps)
13971
+ "activatorProps": activatorProps.value
13912
13972
  }, scopeId), {
13913
13973
  activator: slots.activator,
13914
13974
  default: function () {
@@ -14257,12 +14317,15 @@ const VFileInput = defineComponent({
14257
14317
  onFocus();
14258
14318
  nextTick(() => {
14259
14319
  model.value = [];
14260
- if (inputRef != null && inputRef.value) {
14261
- inputRef.value.value = '';
14262
- }
14263
14320
  callEvent(props['onClick:clear'], e);
14264
14321
  });
14265
14322
  }
14323
+ watch(model, newValue => {
14324
+ const hasModelReset = !Array.isArray(newValue) || !newValue.length;
14325
+ if (hasModelReset && inputRef.value) {
14326
+ inputRef.value.value = '';
14327
+ }
14328
+ });
14266
14329
  useRender(() => {
14267
14330
  const hasCounter = !!(slots.counter || props.counter);
14268
14331
  const hasDetails = !!(hasCounter || slots.details);
@@ -15253,7 +15316,7 @@ function useTouch(_ref) {
15253
15316
  window.removeEventListener('touchmove', onTouchmove);
15254
15317
  window.removeEventListener('touchend', onTouchend);
15255
15318
  });
15256
- const isHorizontal = computed(() => position.value !== 'bottom');
15319
+ const isHorizontal = computed(() => ['left', 'right'].includes(position.value));
15257
15320
  const {
15258
15321
  addMovement,
15259
15322
  endTouch,
@@ -15265,11 +15328,11 @@ function useTouch(_ref) {
15265
15328
  const offset = ref(0);
15266
15329
  let start;
15267
15330
  function getOffset(pos, active) {
15268
- return (position.value === 'left' ? pos : position.value === 'right' ? document.documentElement.clientWidth - pos : position.value === 'bottom' ? document.documentElement.clientHeight - pos : oops()) - (active ? width.value : 0);
15331
+ return (position.value === 'left' ? pos : position.value === 'right' ? document.documentElement.clientWidth - pos : position.value === 'top' ? pos : position.value === 'bottom' ? document.documentElement.clientHeight - pos : oops()) - (active ? width.value : 0);
15269
15332
  }
15270
15333
  function getProgress(pos) {
15271
15334
  let limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
15272
- const progress = position.value === 'left' ? (pos - offset.value) / width.value : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value : oops();
15335
+ const progress = position.value === 'left' ? (pos - offset.value) / width.value : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value : position.value === 'top' ? (pos - offset.value) / width.value : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value : oops();
15273
15336
  return limit ? Math.max(0, Math.min(1, progress)) : progress;
15274
15337
  }
15275
15338
  function onTouchstart(e) {
@@ -15277,8 +15340,8 @@ function useTouch(_ref) {
15277
15340
  const touchX = e.changedTouches[0].clientX;
15278
15341
  const touchY = e.changedTouches[0].clientY;
15279
15342
  const touchZone = 25;
15280
- const inTouchZone = position.value === 'left' ? touchX < touchZone : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone : oops();
15281
- const inElement = isActive.value && (position.value === 'left' ? touchX < width.value : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value : oops());
15343
+ 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();
15344
+ const inElement = isActive.value && (position.value === 'left' ? touchX < width.value : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value : position.value === 'top' ? touchY < width.value : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value : oops());
15282
15345
  if (inTouchZone || inElement || isActive.value && isTemporary.value) {
15283
15346
  maybeDragging = true;
15284
15347
  start = [touchX, touchY];
@@ -15330,6 +15393,7 @@ function useTouch(_ref) {
15330
15393
  isActive.value = velocity.direction === ({
15331
15394
  left: 'right',
15332
15395
  right: 'left',
15396
+ top: 'down',
15333
15397
  bottom: 'up'
15334
15398
  }[position.value] || oops());
15335
15399
  } else {
@@ -15338,7 +15402,7 @@ function useTouch(_ref) {
15338
15402
  }
15339
15403
  const dragStyles = computed(() => {
15340
15404
  return isDragging.value ? {
15341
- transform: position.value === 'left' ? `translateX(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'right' ? `translateX(calc(100% - ${dragProgress.value * width.value}px))` : position.value === 'bottom' ? `translateY(calc(100% - ${dragProgress.value * width.value}px))` : oops(),
15405
+ transform: position.value === 'left' ? `translateX(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'right' ? `translateX(calc(100% - ${dragProgress.value * width.value}px))` : position.value === 'top' ? `translateY(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'bottom' ? `translateY(calc(100% - ${dragProgress.value * width.value}px))` : oops(),
15342
15406
  transition: 'none'
15343
15407
  } : undefined;
15344
15408
  });
@@ -15354,7 +15418,7 @@ function oops() {
15354
15418
 
15355
15419
  // Types
15356
15420
 
15357
- const locations = ['start', 'end', 'left', 'right', 'bottom'];
15421
+ const locations = ['start', 'end', 'left', 'right', 'top', 'bottom'];
15358
15422
  const VNavigationDrawer = defineComponent({
15359
15423
  name: 'VNavigationDrawer',
15360
15424
  props: {
@@ -15811,7 +15875,7 @@ const VPagination = defineComponent({
15811
15875
  disabled: !!props.disabled || props.length < 2,
15812
15876
  color: isActive ? props.activeColor : props.color,
15813
15877
  ariaCurrent: isActive,
15814
- ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, index + 1),
15878
+ ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
15815
15879
  onClick: e => setValue(e, item)
15816
15880
  }
15817
15881
  };
@@ -17990,6 +18054,9 @@ const VTooltip = genericComponent()({
17990
18054
  if (props.transition) return props.transition;
17991
18055
  return isActive.value ? 'scale-transition' : 'fade-transition';
17992
18056
  });
18057
+ const activatorProps = computed(() => mergeProps({
18058
+ 'aria-describedby': id.value
18059
+ }, props.activatorProps));
17993
18060
  useRender(() => {
17994
18061
  const [overlayProps] = filterVOverlayProps(props);
17995
18062
  return createVNode(VOverlay, mergeProps({
@@ -18006,9 +18073,7 @@ const VTooltip = genericComponent()({
18006
18073
  "persistent": true,
18007
18074
  "role": "tooltip",
18008
18075
  "eager": true,
18009
- "activatorProps": mergeProps({
18010
- 'aria-describedby': id.value
18011
- }, props.activatorProps),
18076
+ "activatorProps": activatorProps.value,
18012
18077
  "_disableGlobalStack": true
18013
18078
  }, scopeId), {
18014
18079
  activator: slots.activator,
@@ -18957,7 +19022,7 @@ const VDataTableRows = defineComponent({
18957
19022
  });
18958
19023
  },
18959
19024
  "item": item
18960
- }, slots), isExpanded(item.value) && ((_slots$expandedRow = slots['expanded-row']) == null ? void 0 : _slots$expandedRow.call(slots, {
19025
+ }, slots), isExpanded(item) && ((_slots$expandedRow = slots['expanded-row']) == null ? void 0 : _slots$expandedRow.call(slots, {
18961
19026
  item,
18962
19027
  columns: columns.value
18963
19028
  }))]);
@@ -18995,7 +19060,7 @@ function createPagination(props, items) {
18995
19060
  return Math.min(itemsLength.value, startIndex.value + itemsPerPage.value);
18996
19061
  });
18997
19062
  const pageCount = computed(() => {
18998
- if (itemsPerPage.value === -1) return 1;
19063
+ if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;
18999
19064
  return Math.ceil(itemsLength.value / itemsPerPage.value);
19000
19065
  });
19001
19066
  watchEffect(() => {
@@ -19098,7 +19163,7 @@ const VDataTableFooter = defineComponent({
19098
19163
  "hide-details": true
19099
19164
  }, null)]), createVNode("div", {
19100
19165
  "class": "v-data-table-footer__info"
19101
- }, [createVNode("div", null, [(startIndex.value ?? -1) + 1, createTextVNode(" - "), stopIndex.value ?? 0, createTextVNode(" of "), itemsLength.value ?? 0])]), createVNode("div", {
19166
+ }, [createVNode("div", null, [!itemsLength.value ? 0 : startIndex.value + 1, createTextVNode(" - "), stopIndex.value, createTextVNode(" of "), itemsLength.value])]), createVNode("div", {
19102
19167
  "class": "v-data-table-footer__pagination"
19103
19168
  }, [createVNode(VBtn, {
19104
19169
  "icon": props.firstIcon,
@@ -19166,18 +19231,14 @@ function useOptions(_ref) {
19166
19231
  page,
19167
19232
  itemsPerPage,
19168
19233
  sortBy,
19169
- startIndex,
19170
- stopIndex,
19171
- pageCount
19234
+ groupBy
19172
19235
  } = _ref;
19173
19236
  const vm = getCurrentInstance('VDataTable');
19174
19237
  const options = computed(() => ({
19175
19238
  page: page.value,
19176
19239
  itemsPerPage: itemsPerPage.value,
19177
- startIndex: startIndex.value,
19178
- stopIndex: stopIndex.value,
19179
- pageCount: pageCount.value,
19180
- sortBy: sortBy.value
19240
+ sortBy: sortBy.value,
19241
+ groupBy: groupBy.value
19181
19242
  }));
19182
19243
 
19183
19244
  // Reset page when sorting changes
@@ -19255,9 +19316,12 @@ const VDataTable = defineComponent({
19255
19316
  const {
19256
19317
  items
19257
19318
  } = useDataTableItems(props, columns);
19319
+ const filterKeys = computed(() => columns.value.map(c => 'columns.' + c.key));
19258
19320
  const {
19259
19321
  filteredItems
19260
- } = useFilter(props, items, toRef(props, 'search'));
19322
+ } = useFilter(props, items, toRef(props, 'search'), {
19323
+ filterKeys
19324
+ });
19261
19325
  const {
19262
19326
  sortBy
19263
19327
  } = createSort(props);
@@ -19276,8 +19340,7 @@ const VDataTable = defineComponent({
19276
19340
  page,
19277
19341
  itemsPerPage,
19278
19342
  startIndex,
19279
- stopIndex,
19280
- pageCount
19343
+ stopIndex
19281
19344
  } = createPagination(props, flatItems);
19282
19345
  const {
19283
19346
  paginatedItems
@@ -19289,9 +19352,7 @@ const VDataTable = defineComponent({
19289
19352
  page,
19290
19353
  itemsPerPage,
19291
19354
  sortBy,
19292
- pageCount,
19293
- startIndex,
19294
- stopIndex
19355
+ groupBy
19295
19356
  });
19296
19357
  provideDefaults({
19297
19358
  VDataTableRows: {
@@ -19447,9 +19508,12 @@ const VDataTableVirtual = defineComponent({
19447
19508
  const {
19448
19509
  items
19449
19510
  } = useDataTableItems(props, columns);
19511
+ const filterKeys = computed(() => columns.value.map(c => 'columns.' + c.key));
19450
19512
  const {
19451
19513
  filteredItems
19452
- } = useFilter(props, items, toRef(props, 'search'));
19514
+ } = useFilter(props, items, toRef(props, 'search'), {
19515
+ filterKeys
19516
+ });
19453
19517
  const {
19454
19518
  sortBy
19455
19519
  } = createSort(props);
@@ -19482,10 +19546,8 @@ const VDataTableVirtual = defineComponent({
19482
19546
  useOptions({
19483
19547
  sortBy,
19484
19548
  page: ref(1),
19485
- startIndex: ref(0),
19486
- stopIndex: computed(() => flatItems.value.length - 1),
19487
- pageCount: ref(1),
19488
- itemsPerPage: ref(-1)
19549
+ itemsPerPage: ref(-1),
19550
+ groupBy
19489
19551
  });
19490
19552
  provideDefaults({
19491
19553
  VDataTableRows: {
@@ -19561,7 +19623,8 @@ const VDataTableServer = defineComponent({
19561
19623
  ...makeDataTableItemProps(),
19562
19624
  ...makeDataTableSelectProps(),
19563
19625
  ...makeDataTableSortProps(),
19564
- ...makeDataTablePaginateProps()
19626
+ ...makeDataTablePaginateProps(),
19627
+ ...makeDataTableGroupProps()
19565
19628
  },
19566
19629
  emits: {
19567
19630
  'update:modelValue': value => true,
@@ -19570,6 +19633,7 @@ const VDataTableServer = defineComponent({
19570
19633
  'update:sortBy': sortBy => true,
19571
19634
  'update:options': options => true,
19572
19635
  'update:expanded': options => true,
19636
+ 'update:groupBy': value => true,
19573
19637
  'click:row': (event, value) => true
19574
19638
  },
19575
19639
  setup(props, _ref) {
@@ -19577,10 +19641,12 @@ const VDataTableServer = defineComponent({
19577
19641
  emit,
19578
19642
  slots
19579
19643
  } = _ref;
19644
+ const groupBy = useProxiedModel(props, 'groupBy');
19580
19645
  createExpanded(props);
19581
19646
  const {
19582
19647
  columns
19583
19648
  } = createHeaders(props, {
19649
+ groupBy,
19584
19650
  showSelect: toRef(props, 'showSelect'),
19585
19651
  showExpand: toRef(props, 'showExpand')
19586
19652
  });
@@ -19591,21 +19657,22 @@ const VDataTableServer = defineComponent({
19591
19657
  sortBy,
19592
19658
  toggleSort
19593
19659
  } = createSort(props);
19660
+ const {
19661
+ opened
19662
+ } = createGroupBy(props, groupBy, sortBy);
19594
19663
  const {
19595
19664
  page,
19596
- itemsPerPage,
19597
- startIndex,
19598
- stopIndex,
19599
- pageCount
19665
+ itemsPerPage
19600
19666
  } = createPagination(props, items);
19667
+ const {
19668
+ flatItems
19669
+ } = useGroupedItems(items, groupBy, opened);
19601
19670
  createSelection(props, items);
19602
19671
  useOptions({
19603
19672
  page,
19604
19673
  itemsPerPage,
19605
19674
  sortBy,
19606
- startIndex,
19607
- stopIndex,
19608
- pageCount
19675
+ groupBy
19609
19676
  });
19610
19677
  provide('v-data-table', {
19611
19678
  toggleSort,
@@ -19641,7 +19708,7 @@ const VDataTableServer = defineComponent({
19641
19708
  "class": "v-data-table__tbody",
19642
19709
  "role": "rowgroup"
19643
19710
  }, [slots.body ? slots.body() : createVNode(VDataTableRows, {
19644
- "items": items.value,
19711
+ "items": flatItems.value,
19645
19712
  "onClick:row": (event, value) => emit('click:row', event, value)
19646
19713
  }, slots)]), (_slots$tbody = slots.tbody) == null ? void 0 : _slots$tbody.call(slots), (_slots$tfoot = slots.tfoot) == null ? void 0 : _slots$tfoot.call(slots)]);
19647
19714
  }),
@@ -19932,6 +19999,7 @@ var components = /*#__PURE__*/Object.freeze({
19932
19999
  VDataTableRow: VDataTableRow,
19933
20000
  VDataTableVirtual: VDataTableVirtual,
19934
20001
  VDataTableServer: VDataTableServer,
20002
+ VDataTableFooter: VDataTableFooter,
19935
20003
  VVirtualScroll: VVirtualScroll
19936
20004
  });
19937
20005
 
@@ -20147,7 +20215,7 @@ function createVuetify$1() {
20147
20215
  locale
20148
20216
  };
20149
20217
  }
20150
- const version$1 = "3.2.0-next-20230118.0";
20218
+ const version$1 = "4.0.0-master-20230206.0";
20151
20219
  createVuetify$1.version = version$1;
20152
20220
 
20153
20221
  // Vue's inject() can only be used in setup
@@ -20160,7 +20228,7 @@ function inject(key) {
20160
20228
  }
20161
20229
  }
20162
20230
 
20163
- const version = "3.2.0-next-20230118.0";
20231
+ const version = "4.0.0-master-20230206.0";
20164
20232
 
20165
20233
  const createVuetify = function () {
20166
20234
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};