vuetify 3.7.10 → 3.7.12

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 (61) hide show
  1. package/dist/json/attributes.json +3092 -3104
  2. package/dist/json/importMap-labs.json +28 -28
  3. package/dist/json/importMap.json +168 -168
  4. package/dist/json/tags.json +0 -3
  5. package/dist/json/web-types.json +6174 -6201
  6. package/dist/vuetify-labs.css +4937 -4936
  7. package/dist/vuetify-labs.d.ts +90 -165
  8. package/dist/vuetify-labs.esm.js +138 -110
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +137 -109
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +5080 -5079
  13. package/dist/vuetify.d.ts +131 -191
  14. package/dist/vuetify.esm.js +123 -104
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +122 -103
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +935 -923
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAutocomplete/VAutocomplete.mjs +3 -12
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  23. package/lib/components/VAutocomplete/index.d.mts +25 -47
  24. package/lib/components/VCombobox/VCombobox.mjs +4 -14
  25. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  26. package/lib/components/VCombobox/index.d.mts +25 -47
  27. package/lib/components/VDatePicker/VDatePickerMonth.mjs +2 -2
  28. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  29. package/lib/components/VDatePicker/index.d.mts +12 -24
  30. package/lib/components/VList/VList.mjs +1 -4
  31. package/lib/components/VList/VList.mjs.map +1 -1
  32. package/lib/components/VList/index.d.mts +7 -16
  33. package/lib/components/VOverlay/VOverlay.css +2 -1
  34. package/lib/components/VOverlay/VOverlay.sass +2 -1
  35. package/lib/components/VOverlay/_variables.scss +1 -1
  36. package/lib/components/VSelect/VSelect.mjs +5 -9
  37. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  38. package/lib/components/VSelect/index.d.mts +25 -47
  39. package/lib/components/VSlider/slider.mjs +25 -12
  40. package/lib/components/VSlider/slider.mjs.map +1 -1
  41. package/lib/components/index.d.mts +73 -133
  42. package/lib/composables/calendar.mjs.map +1 -1
  43. package/lib/composables/list-items.mjs +70 -17
  44. package/lib/composables/list-items.mjs.map +1 -1
  45. package/lib/composables/nested/selectStrategies.mjs +6 -7
  46. package/lib/composables/nested/selectStrategies.mjs.map +1 -1
  47. package/lib/directives/ripple/index.mjs +7 -5
  48. package/lib/directives/ripple/index.mjs.map +1 -1
  49. package/lib/entry-bundler.mjs +1 -1
  50. package/lib/framework.mjs +1 -1
  51. package/lib/index.d.mts +58 -58
  52. package/lib/labs/VDateInput/VDateInput.mjs +17 -7
  53. package/lib/labs/VDateInput/VDateInput.mjs.map +1 -1
  54. package/lib/labs/VDateInput/index.d.mts +11 -17
  55. package/lib/labs/VTreeview/index.d.mts +7 -16
  56. package/lib/labs/components.d.mts +18 -33
  57. package/lib/util/helpers.mjs +3 -0
  58. package/lib/util/helpers.mjs.map +1 -1
  59. package/package.json +2 -2
  60. package/lib/composables/mousedown.mjs +0 -30
  61. package/lib/composables/mousedown.mjs.map +0 -1
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.7.10
2
+ * Vuetify v3.7.12
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { shallowRef, Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, unref, warn, getCurrentInstance as getCurrentInstance$1, ref, provide, inject as inject$1, defineComponent as defineComponent$1, camelize, h, createVNode, mergeProps, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, TransitionGroup, Transition, isRef, toRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, markRaw, Teleport, cloneVNode, onUnmounted, createTextVNode, onBeforeUpdate, withModifiers, toDisplayString, vModelText, resolveComponent, render } from 'vue';
7
+ import { shallowRef, Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, unref, warn, getCurrentInstance as getCurrentInstance$1, ref, provide, inject as inject$1, defineComponent as defineComponent$1, camelize, h, createVNode, mergeProps, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, TransitionGroup, Transition, isRef, toRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, toDisplayString, vModelText, resolveComponent, render } from 'vue';
8
8
 
9
9
  const IN_BROWSER = typeof window !== 'undefined';
10
10
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
@@ -500,6 +500,9 @@ function checkPrintable(e) {
500
500
  const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
501
501
  return isPrintableChar && noModifier;
502
502
  }
503
+ function isPrimitive(value) {
504
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint';
505
+ }
503
506
 
504
507
  // Utilities
505
508
  const block = ['top', 'bottom'];
@@ -5578,11 +5581,13 @@ const ripples = {
5578
5581
  animation.classList.add('v-ripple__animation--visible');
5579
5582
  transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`);
5580
5583
  animation.dataset.activated = String(performance.now());
5581
- setTimeout(() => {
5582
- animation.classList.remove('v-ripple__animation--enter');
5583
- animation.classList.add('v-ripple__animation--in');
5584
- transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
5585
- }, 0);
5584
+ requestAnimationFrame(() => {
5585
+ requestAnimationFrame(() => {
5586
+ animation.classList.remove('v-ripple__animation--enter');
5587
+ animation.classList.add('v-ripple__animation--in');
5588
+ transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
5589
+ });
5590
+ });
5586
5591
  },
5587
5592
  hide(el) {
5588
5593
  if (!el?._ripple?.enabled) return;
@@ -8577,12 +8582,12 @@ const independentSelectStrategy = mandatory => {
8577
8582
  return selected;
8578
8583
  },
8579
8584
  in: (v, children, parents) => {
8580
- let map = new Map();
8585
+ const map = new Map();
8581
8586
  for (const id of v || []) {
8582
- map = strategy.select({
8587
+ strategy.select({
8583
8588
  id,
8584
8589
  value: true,
8585
- selected: new Map(map),
8590
+ selected: map,
8586
8591
  children,
8587
8592
  parents
8588
8593
  });
@@ -8617,11 +8622,10 @@ const independentSingleSelectStrategy = mandatory => {
8617
8622
  });
8618
8623
  },
8619
8624
  in: (v, children, parents) => {
8620
- let map = new Map();
8621
8625
  if (v?.length) {
8622
- map = parentStrategy.in(v.slice(0, 1), children, parents);
8626
+ return parentStrategy.in(v.slice(0, 1), children, parents);
8623
8627
  }
8624
- return map;
8628
+ return new Map();
8625
8629
  },
8626
8630
  out: (v, children, parents) => {
8627
8631
  return parentStrategy.out(v, children, parents);
@@ -8724,7 +8728,7 @@ const classicSelectStrategy = mandatory => {
8724
8728
  map = strategy.select({
8725
8729
  id,
8726
8730
  value: true,
8727
- selected: new Map(map),
8731
+ selected: map,
8728
8732
  children,
8729
8733
  parents
8730
8734
  });
@@ -9608,10 +9612,7 @@ const makeItemsProps = propsFactory({
9608
9612
  default: 'props'
9609
9613
  },
9610
9614
  returnObject: Boolean,
9611
- valueComparator: {
9612
- type: Function,
9613
- default: deepEqual
9614
- }
9615
+ valueComparator: Function
9615
9616
  }, 'list-items');
9616
9617
  function transformItem$3(props, item) {
9617
9618
  const title = getPropertyFromItem(item, props.itemTitle, item);
@@ -9632,29 +9633,85 @@ function transformItem$3(props, item) {
9632
9633
  };
9633
9634
  }
9634
9635
  function transformItems$3(props, items) {
9636
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9635
9637
  const array = [];
9636
9638
  for (const item of items) {
9637
- array.push(transformItem$3(props, item));
9639
+ array.push(transformItem$3(_props, item));
9638
9640
  }
9639
9641
  return array;
9640
9642
  }
9641
9643
  function useItems(props) {
9642
9644
  const items = computed(() => transformItems$3(props, props.items));
9643
9645
  const hasNullItem = computed(() => items.value.some(item => item.value === null));
9646
+ const itemsMap = shallowRef(new Map());
9647
+ const keylessItems = shallowRef([]);
9648
+ watchEffect(() => {
9649
+ const _items = items.value;
9650
+ const map = new Map();
9651
+ const keyless = [];
9652
+ for (let i = 0; i < _items.length; i++) {
9653
+ const item = _items[i];
9654
+ if (isPrimitive(item.value) || item.value === null) {
9655
+ let values = map.get(item.value);
9656
+ if (!values) {
9657
+ values = [];
9658
+ map.set(item.value, values);
9659
+ }
9660
+ values.push(item);
9661
+ } else {
9662
+ keyless.push(item);
9663
+ }
9664
+ }
9665
+ itemsMap.value = map;
9666
+ keylessItems.value = keyless;
9667
+ });
9644
9668
  function transformIn(value) {
9645
- if (!hasNullItem.value) {
9669
+ // Cache unrefed values outside the loop,
9670
+ // proxy getters can be slow when you call them a billion times
9671
+ const _value = toRaw(value);
9672
+ const _items = itemsMap.value;
9673
+ const _allItems = items.value;
9674
+ const _keylessItems = keylessItems.value;
9675
+ const _hasNullItem = hasNullItem.value;
9676
+ const _returnObject = props.returnObject;
9677
+ const hasValueComparator = !!props.valueComparator;
9678
+ const valueComparator = props.valueComparator || deepEqual;
9679
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9680
+ const returnValue = [];
9681
+ main: for (const v of _value) {
9646
9682
  // When the model value is null, return an InternalItem
9647
9683
  // based on null only if null is one of the items
9648
- value = value.filter(v => v !== null);
9649
- }
9650
- return value.map(v => {
9651
- if (props.returnObject && typeof v === 'string') {
9652
- // String model value means value is a custom input value from combobox
9653
- // Don't look up existing items if the model value is a string
9654
- return transformItem$3(props, v);
9684
+ if (!_hasNullItem && v === null) continue;
9685
+
9686
+ // String model value means value is a custom input value from combobox
9687
+ // Don't look up existing items if the model value is a string
9688
+ if (_returnObject && typeof v === 'string') {
9689
+ returnValue.push(transformItem$3(_props, v));
9690
+ continue;
9655
9691
  }
9656
- return items.value.find(item => props.valueComparator(v, item.value)) || transformItem$3(props, v);
9657
- });
9692
+
9693
+ // Fast path, items with primitive values and no
9694
+ // custom valueComparator can use a constant-time
9695
+ // map lookup instead of searching the items array
9696
+ const fastItems = _items.get(v);
9697
+
9698
+ // Slow path, always use valueComparator.
9699
+ // This is O(n^2) so we really don't want to
9700
+ // do it for more than a couple hundred items.
9701
+ if (hasValueComparator || !fastItems) {
9702
+ for (const item of hasValueComparator ? _allItems : _keylessItems) {
9703
+ if (valueComparator(v, item.value)) {
9704
+ returnValue.push(item);
9705
+ continue main;
9706
+ }
9707
+ }
9708
+ // Not an existing item, construct it from the model (#4000)
9709
+ returnValue.push(transformItem$3(_props, v));
9710
+ continue;
9711
+ }
9712
+ returnValue.push(...fastItems);
9713
+ }
9714
+ return returnValue;
9658
9715
  }
9659
9716
  function transformOut(value) {
9660
9717
  return props.returnObject ? value.map(_ref => {
@@ -9678,9 +9735,6 @@ function useItems(props) {
9678
9735
 
9679
9736
  // Types
9680
9737
 
9681
- function isPrimitive(value) {
9682
- return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
9683
- }
9684
9738
  function transformItem$2(props, item) {
9685
9739
  const type = getPropertyFromItem(item, props.itemType, 'item');
9686
9740
  const title = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemTitle);
@@ -12633,34 +12687,6 @@ function useScrolling(listRef, textFieldRef) {
12633
12687
  }; // typescript doesn't know about vue's event merging
12634
12688
  }
12635
12689
 
12636
- // https://github.com/vuetifyjs/vuetify/issues/20003
12637
- /**
12638
- * This composable is designed to track whether the mouse is in a mousedown state at any given time. The original motivation is that
12639
- * it is impossible to distinguish whether a blur event is triggered by mousedown, keydown, or via JavaScript.
12640
- * This composable allows for conditional logic when a blur is triggered by mousedown.
12641
- */
12642
-
12643
- function useIsMousedown() {
12644
- const isMousedown = shallowRef(false);
12645
- function mousedown() {
12646
- isMousedown.value = true;
12647
- }
12648
- function mouseup() {
12649
- isMousedown.value = false;
12650
- }
12651
- onMounted(() => {
12652
- document.body.addEventListener('mousedown', mousedown);
12653
- document.body.addEventListener('mouseup', mouseup);
12654
- });
12655
- onUnmounted(() => {
12656
- document.body.removeEventListener('mousedown', mousedown);
12657
- document.body.removeEventListener('mouseup', mouseup);
12658
- });
12659
- return {
12660
- isMousedown
12661
- };
12662
- }
12663
-
12664
12690
  // Types
12665
12691
 
12666
12692
  const makeSelectProps = propsFactory({
@@ -12750,9 +12776,6 @@ const VSelect = genericComponent()({
12750
12776
  return typeof props.counterValue === 'function' ? props.counterValue(model.value) : typeof props.counterValue === 'number' ? props.counterValue : model.value.length;
12751
12777
  });
12752
12778
  const form = useForm(props);
12753
- const {
12754
- isMousedown
12755
- } = useIsMousedown();
12756
12779
  const selectedValues = computed(() => model.value.map(selection => selection.value));
12757
12780
  const isFocused = shallowRef(false);
12758
12781
  const label = computed(() => menu.value ? props.closeText : props.openText);
@@ -12760,7 +12783,7 @@ const VSelect = genericComponent()({
12760
12783
  let keyboardLookupLastTime;
12761
12784
  const displayItems = computed(() => {
12762
12785
  if (props.hideSelected) {
12763
- return items.value.filter(item => !model.value.some(s => props.valueComparator(s, item)));
12786
+ return items.value.filter(item => !model.value.some(s => (props.valueComparator || deepEqual)(s, item)));
12764
12787
  }
12765
12788
  return items.value;
12766
12789
  });
@@ -12832,7 +12855,7 @@ const VSelect = genericComponent()({
12832
12855
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12833
12856
  if (item.props.disabled) return;
12834
12857
  if (props.multiple) {
12835
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12858
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
12836
12859
  const add = set == null ? !~index : set;
12837
12860
  if (~index) {
12838
12861
  const value = add ? [...model.value, item] : [...model.value];
@@ -12850,7 +12873,7 @@ const VSelect = genericComponent()({
12850
12873
  }
12851
12874
  }
12852
12875
  function onBlur(e) {
12853
- if (!listRef.value?.$el.contains(e.relatedTarget) && !isMousedown.value) {
12876
+ if (!listRef.value?.$el.contains(e.relatedTarget)) {
12854
12877
  menu.value = false;
12855
12878
  }
12856
12879
  }
@@ -12879,7 +12902,7 @@ const VSelect = genericComponent()({
12879
12902
  }
12880
12903
  watch(menu, () => {
12881
12904
  if (!props.hideSelected && menu.value && model.value.length) {
12882
- const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
12905
+ const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
12883
12906
  IN_BROWSER && window.requestAnimationFrame(() => {
12884
12907
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
12885
12908
  });
@@ -13262,9 +13285,6 @@ const VAutocomplete = genericComponent()({
13262
13285
  textColorClasses,
13263
13286
  textColorStyles
13264
13287
  } = useTextColor(color);
13265
- const {
13266
- isMousedown
13267
- } = useIsMousedown();
13268
13288
  const search = useProxiedModel(props, 'search', '');
13269
13289
  const model = useProxiedModel(props, 'modelValue', [], v => transformIn(v === null ? [null] : wrapInArray(v)), v => {
13270
13290
  const transformed = transformOut(v);
@@ -13414,7 +13434,7 @@ const VAutocomplete = genericComponent()({
13414
13434
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
13415
13435
  if (!item || item.props.disabled) return;
13416
13436
  if (props.multiple) {
13417
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
13437
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
13418
13438
  const add = set == null ? !~index : set;
13419
13439
  if (~index) {
13420
13440
  const value = add ? [...model.value, item] : [...model.value];
@@ -13438,11 +13458,6 @@ const VAutocomplete = genericComponent()({
13438
13458
  });
13439
13459
  }
13440
13460
  }
13441
- function onBlur(e) {
13442
- if (!isMousedown.value) {
13443
- menu.value = false;
13444
- }
13445
- }
13446
13461
  watch(isFocused, (val, oldVal) => {
13447
13462
  if (val === oldVal) return;
13448
13463
  if (val) {
@@ -13452,6 +13467,7 @@ const VAutocomplete = genericComponent()({
13452
13467
  nextTick(() => isSelecting.value = false);
13453
13468
  } else {
13454
13469
  if (!props.multiple && search.value == null) model.value = [];
13470
+ menu.value = false;
13455
13471
  if (!model.value.some(_ref3 => {
13456
13472
  let {
13457
13473
  title
@@ -13505,7 +13521,6 @@ const VAutocomplete = genericComponent()({
13505
13521
  "readonly": form.isReadonly.value,
13506
13522
  "placeholder": isDirty ? undefined : props.placeholder,
13507
13523
  "onClick:clear": onClear,
13508
- "onBlur": onBlur,
13509
13524
  "onMousedown:control": onMousedownControl,
13510
13525
  "onKeydown": onKeydown
13511
13526
  }), {
@@ -15808,6 +15823,8 @@ const useSlider = _ref => {
15808
15823
  const trackContainerRef = ref();
15809
15824
  const activeThumbRef = ref();
15810
15825
  function parseMouseMove(e) {
15826
+ const el = trackContainerRef.value?.$el;
15827
+ if (!el) return;
15811
15828
  const vertical = props.direction === 'vertical';
15812
15829
  const start = vertical ? 'top' : 'left';
15813
15830
  const length = vertical ? 'height' : 'width';
@@ -15815,7 +15832,7 @@ const useSlider = _ref => {
15815
15832
  const {
15816
15833
  [start]: trackStart,
15817
15834
  [length]: trackLength
15818
- } = trackContainerRef.value?.$el.getBoundingClientRect();
15835
+ } = el.getBoundingClientRect();
15819
15836
  const clickOffset = getPosition(e, position);
15820
15837
 
15821
15838
  // It is possible for left to be NaN, force to number
@@ -15824,13 +15841,17 @@ const useSlider = _ref => {
15824
15841
  return roundValue(min.value + clickPos * (max.value - min.value));
15825
15842
  }
15826
15843
  const handleStop = e => {
15827
- onSliderEnd({
15828
- value: parseMouseMove(e)
15829
- });
15844
+ const value = parseMouseMove(e);
15845
+ if (value != null) {
15846
+ onSliderEnd({
15847
+ value
15848
+ });
15849
+ }
15830
15850
  mousePressed.value = false;
15831
15851
  startOffset.value = 0;
15832
15852
  };
15833
15853
  const handleStart = e => {
15854
+ const value = parseMouseMove(e);
15834
15855
  activeThumbRef.value = getActiveThumb(e);
15835
15856
  if (!activeThumbRef.value) return;
15836
15857
  mousePressed.value = true;
@@ -15838,13 +15859,17 @@ const useSlider = _ref => {
15838
15859
  startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
15839
15860
  } else {
15840
15861
  startOffset.value = 0;
15841
- onSliderMove({
15842
- value: parseMouseMove(e)
15862
+ if (value != null) {
15863
+ onSliderMove({
15864
+ value
15865
+ });
15866
+ }
15867
+ }
15868
+ if (value != null) {
15869
+ onSliderStart({
15870
+ value
15843
15871
  });
15844
15872
  }
15845
- onSliderStart({
15846
- value: parseMouseMove(e)
15847
- });
15848
15873
  nextTick(() => activeThumbRef.value?.focus());
15849
15874
  };
15850
15875
  const moveListenerOptions = {
@@ -15852,9 +15877,12 @@ const useSlider = _ref => {
15852
15877
  capture: true
15853
15878
  };
15854
15879
  function onMouseMove(e) {
15855
- onSliderMove({
15856
- value: parseMouseMove(e)
15857
- });
15880
+ const value = parseMouseMove(e);
15881
+ if (value != null) {
15882
+ onSliderMove({
15883
+ value
15884
+ });
15885
+ }
15858
15886
  }
15859
15887
  function onSliderMouseUp(e) {
15860
15888
  e.stopPropagation();
@@ -17125,9 +17153,6 @@ const VCombobox = genericComponent()({
17125
17153
  return props.multiple ? transformed : transformed[0] ?? null;
17126
17154
  });
17127
17155
  const form = useForm(props);
17128
- const {
17129
- isMousedown
17130
- } = useIsMousedown();
17131
17156
  const hasChips = computed(() => !!(props.chips || slots.chip));
17132
17157
  const hasSelectionSlot = computed(() => hasChips.value || !!slots.selection);
17133
17158
  const _search = shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
@@ -17291,18 +17316,12 @@ const VCombobox = genericComponent()({
17291
17316
  vTextFieldRef.value?.focus();
17292
17317
  }
17293
17318
  }
17294
- function onBlur(e) {
17295
- if (!isMousedown.value) {
17296
- menu.value = false;
17297
- }
17298
- }
17299
-
17300
17319
  /** @param set - null means toggle */
17301
17320
  function select(item) {
17302
17321
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
17303
17322
  if (!item || item.props.disabled) return;
17304
17323
  if (props.multiple) {
17305
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
17324
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
17306
17325
  const add = set == null ? !~index : set;
17307
17326
  if (~index) {
17308
17327
  const value = add ? [...model.value, item] : [...model.value];
@@ -17341,6 +17360,7 @@ const VCombobox = genericComponent()({
17341
17360
  watch(isFocused, (val, oldVal) => {
17342
17361
  if (val || val === oldVal) return;
17343
17362
  selectionIndex.value = -1;
17363
+ menu.value = false;
17344
17364
  if (search.value) {
17345
17365
  if (props.multiple) {
17346
17366
  select(transformItem$3(props, search.value));
@@ -17361,7 +17381,7 @@ const VCombobox = genericComponent()({
17361
17381
  });
17362
17382
  watch(menu, () => {
17363
17383
  if (!props.hideSelected && menu.value && model.value.length) {
17364
- const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
17384
+ const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
17365
17385
  IN_BROWSER && window.requestAnimationFrame(() => {
17366
17386
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
17367
17387
  });
@@ -17398,7 +17418,6 @@ const VCombobox = genericComponent()({
17398
17418
  "readonly": form.isReadonly.value,
17399
17419
  "placeholder": isDirty ? undefined : props.placeholder,
17400
17420
  "onClick:clear": onClear,
17401
- "onBlur": onBlur,
17402
17421
  "onMousedown:control": onMousedownControl,
17403
17422
  "onKeydown": onKeydown
17404
17423
  }), {
@@ -21996,7 +22015,7 @@ const makeVDatePickerMonthProps = propsFactory({
21996
22015
  type: String,
21997
22016
  default: 'picker-reverse-transition'
21998
22017
  },
21999
- ...makeCalendarProps()
22018
+ ...omit(makeCalendarProps(), ['displayValue'])
22000
22019
  }, 'VDatePickerMonth');
22001
22020
  const VDatePickerMonth = genericComponent()({
22002
22021
  name: 'VDatePickerMonth',
@@ -28377,7 +28396,7 @@ function createVuetify$1() {
28377
28396
  goTo
28378
28397
  };
28379
28398
  }
28380
- const version$1 = "3.7.10";
28399
+ const version$1 = "3.7.12";
28381
28400
  createVuetify$1.version = version$1;
28382
28401
 
28383
28402
  // Vue's inject() can only be used in setup
@@ -28402,7 +28421,7 @@ const createVuetify = function () {
28402
28421
  ...options
28403
28422
  });
28404
28423
  };
28405
- const version = "3.7.10";
28424
+ const version = "3.7.12";
28406
28425
  createVuetify.version = version;
28407
28426
 
28408
28427
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };