vuetify 3.10.4 → 3.10.6

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 (108) hide show
  1. package/README.md +0 -6
  2. package/dist/json/attributes.json +1910 -1922
  3. package/dist/json/importMap-labs.json +20 -20
  4. package/dist/json/importMap.json +182 -182
  5. package/dist/json/tags.json +6 -9
  6. package/dist/json/web-types.json +3674 -3697
  7. package/dist/vuetify-labs.cjs +211 -107
  8. package/dist/vuetify-labs.css +5703 -5642
  9. package/dist/vuetify-labs.d.ts +168 -175
  10. package/dist/vuetify-labs.esm.js +211 -107
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +211 -107
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +192 -97
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +5916 -5877
  17. package/dist/vuetify.d.ts +168 -140
  18. package/dist/vuetify.esm.js +192 -97
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +192 -97
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +124 -114
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VAutocomplete/VAutocomplete.d.ts +0 -61
  26. package/lib/components/VAutocomplete/VAutocomplete.js +13 -11
  27. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  28. package/lib/components/VBadge/VBadge.css +10 -0
  29. package/lib/components/VBadge/VBadge.sass +9 -0
  30. package/lib/components/VChipGroup/VChipGroup.d.ts +37 -0
  31. package/lib/components/VChipGroup/VChipGroup.js +3 -1
  32. package/lib/components/VChipGroup/VChipGroup.js.map +1 -1
  33. package/lib/components/VCombobox/VCombobox.d.ts +6 -67
  34. package/lib/components/VCombobox/VCombobox.js +26 -28
  35. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  36. package/lib/components/VCounter/VCounter.css +1 -0
  37. package/lib/components/VCounter/VCounter.sass +1 -0
  38. package/lib/components/VDataTable/VDataTableGroupHeaderRow.d.ts +29 -0
  39. package/lib/components/VDataTable/VDataTableGroupHeaderRow.js +4 -1
  40. package/lib/components/VDataTable/VDataTableGroupHeaderRow.js.map +1 -1
  41. package/lib/components/VDataTable/VDataTableHeaders.d.ts +29 -0
  42. package/lib/components/VDataTable/VDataTableHeaders.js +3 -0
  43. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  44. package/lib/components/VDataTable/VDataTableRow.d.ts +29 -0
  45. package/lib/components/VDataTable/VDataTableRow.js +3 -0
  46. package/lib/components/VDataTable/VDataTableRow.js.map +1 -1
  47. package/lib/components/VDataTable/VDataTableRows.d.ts +29 -0
  48. package/lib/components/VDataTable/VDataTableRows.js +4 -3
  49. package/lib/components/VDataTable/VDataTableRows.js.map +1 -1
  50. package/lib/components/VDatePicker/VDatePicker.js +1 -1
  51. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  52. package/lib/components/VDivider/VDivider.css +1 -0
  53. package/lib/components/VDivider/VDivider.sass +1 -0
  54. package/lib/components/VKbd/_variables.scss +3 -1
  55. package/lib/components/VList/VListItem.css +14 -12
  56. package/lib/components/VList/VListItem.js +5 -3
  57. package/lib/components/VList/VListItem.js.map +1 -1
  58. package/lib/components/VList/VListItem.sass +20 -18
  59. package/lib/components/VMenu/VMenu.js +22 -4
  60. package/lib/components/VMenu/VMenu.js.map +1 -1
  61. package/lib/components/VNumberInput/VNumberInput.css +8 -0
  62. package/lib/components/VNumberInput/VNumberInput.js +5 -2
  63. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  64. package/lib/components/VNumberInput/VNumberInput.sass +10 -4
  65. package/lib/components/VSkeletonLoader/VSkeletonLoader.css +17 -0
  66. package/lib/components/VSkeletonLoader/VSkeletonLoader.js +3 -3
  67. package/lib/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
  68. package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +7 -0
  69. package/lib/components/VSlideGroup/VSlideGroup.d.ts +25 -0
  70. package/lib/components/VSlideGroup/VSlideGroup.js +5 -1
  71. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  72. package/lib/components/VTable/VTable.js +20 -32
  73. package/lib/components/VTable/VTable.js.map +1 -1
  74. package/lib/components/VTabs/VTabs.d.ts +25 -0
  75. package/lib/components/VTextField/VTextField.js +0 -3
  76. package/lib/components/VTextField/VTextField.js.map +1 -1
  77. package/lib/components/VTextarea/VTextarea.css +2 -2
  78. package/lib/components/VTextarea/VTextarea.js +20 -1
  79. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  80. package/lib/components/VTextarea/VTextarea.sass +4 -2
  81. package/lib/components/VWindow/VWindow.js +43 -3
  82. package/lib/components/VWindow/VWindow.js.map +1 -1
  83. package/lib/composables/date/date.js +1 -1
  84. package/lib/composables/date/date.js.map +1 -1
  85. package/lib/composables/group.js +1 -1
  86. package/lib/composables/group.js.map +1 -1
  87. package/lib/composables/nested/nested.js +12 -2
  88. package/lib/composables/nested/nested.js.map +1 -1
  89. package/lib/composables/virtual.js +2 -2
  90. package/lib/composables/virtual.js.map +1 -1
  91. package/lib/entry-bundler.js +1 -1
  92. package/lib/framework.d.ts +66 -66
  93. package/lib/framework.js +1 -1
  94. package/lib/labs/VColorInput/VColorInput.d.ts +0 -40
  95. package/lib/labs/VColorInput/VColorInput.js +2 -2
  96. package/lib/labs/VColorInput/VColorInput.js.map +1 -1
  97. package/lib/labs/VDateInput/VDateInput.d.ts +0 -30
  98. package/lib/labs/VDateInput/VDateInput.js +16 -7
  99. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  100. package/lib/labs/VIconBtn/VIconBtn.css +22 -0
  101. package/lib/labs/VIconBtn/VIconBtn.scss +32 -0
  102. package/lib/labs/VMaskInput/VMaskInput.js +1 -1
  103. package/lib/labs/VMaskInput/VMaskInput.js.map +1 -1
  104. package/lib/labs/rules/rules.js +4 -4
  105. package/lib/labs/rules/rules.js.map +1 -1
  106. package/lib/util/helpers.js +4 -2
  107. package/lib/util/helpers.js.map +1 -1
  108. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.10.4
2
+ * Vuetify v3.10.6
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -468,8 +468,10 @@ function callEvent(handler) {
468
468
  }
469
469
  function focusableChildren(el) {
470
470
  let filterByTabIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
471
- const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', '[tabindex]'].map(s => `${s}${filterByTabIndex ? ':not([tabindex="-1"])' : ''}:not([disabled])`).join(', ');
472
- return [...el.querySelectorAll(targets)];
471
+ const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', 'details:not(:has(> summary))', 'details > summary', '[tabindex]', '[contenteditable]:not([contenteditable="false"])', 'audio[controls]', 'video[controls]'].map(s => `${s}${filterByTabIndex ? ':not([tabindex="-1"])' : ''}:not([disabled], [inert])`).join(', ');
472
+ return [...el.querySelectorAll(targets)].filter(x => !x.closest('[inert]')) // does not have inert parent
473
+ .filter(x => !!x.offsetParent || x.getClientRects().length > 0) // is rendered
474
+ .filter(x => !x.parentElement?.closest('details:not([open])') || x.tagName === 'SUMMARY' && x.parentElement?.tagName === 'DETAILS');
473
475
  }
474
476
  function getNextElement(elements, location, condition) {
475
477
  let _el;
@@ -4543,7 +4545,7 @@ function useGroupItem(props, injectKey) {
4543
4545
  function unregister() {
4544
4546
  group?.unregister(id);
4545
4547
  }
4546
- onMounted(() => register());
4548
+ register();
4547
4549
  onBeforeUnmount(() => unregister());
4548
4550
  const isSelected = computed(() => {
4549
4551
  return group.isSelected(id);
@@ -8093,6 +8095,10 @@ function getOffsetPosition(isHorizontal, element) {
8093
8095
  const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
8094
8096
  const makeVSlideGroupProps = propsFactory({
8095
8097
  centerActive: Boolean,
8098
+ scrollToActive: {
8099
+ type: Boolean,
8100
+ default: true
8101
+ },
8096
8102
  contentClass: null,
8097
8103
  direction: {
8098
8104
  type: String,
@@ -8181,7 +8187,7 @@ const VSlideGroup = genericComponent()({
8181
8187
  contentSize.value = contentRect.value[sizeProperty];
8182
8188
  isOverflowing.value = containerSize.value + 1 < contentSize.value;
8183
8189
  }
8184
- if (firstSelectedIndex.value >= 0 && contentRef.el) {
8190
+ if (props.scrollToActive && firstSelectedIndex.value >= 0 && contentRef.el) {
8185
8191
  // TODO: Is this too naive? Should we store element references in group composable?
8186
8192
  const selectedElement = contentRef.el.children[lastSelectedIndex.value];
8187
8193
  scrollToChildren(selectedElement, props.centerActive);
@@ -8450,7 +8456,9 @@ const makeVChipGroupProps = propsFactory({
8450
8456
  type: Function,
8451
8457
  default: deepEqual
8452
8458
  },
8453
- ...makeVSlideGroupProps(),
8459
+ ...makeVSlideGroupProps({
8460
+ scrollToActive: false
8461
+ }),
8454
8462
  ...makeComponentProps(),
8455
8463
  ...makeGroupProps({
8456
8464
  selectedClass: 'v-chip--selected'
@@ -9549,7 +9557,9 @@ const useNestedItem = (id, isDisabled, isGroup) => {
9549
9557
  };
9550
9558
  onBeforeMount(() => {
9551
9559
  if (!parent.isGroupActivator) {
9552
- parent.root.register(computedId.value, parent.id.value, toValue(isDisabled), isGroup);
9560
+ nextTick(() => {
9561
+ parent.root.register(computedId.value, parent.id.value, toValue(isDisabled), isGroup);
9562
+ });
9553
9563
  }
9554
9564
  });
9555
9565
  onBeforeUnmount(() => {
@@ -9557,6 +9567,14 @@ const useNestedItem = (id, isDisabled, isGroup) => {
9557
9567
  parent.root.unregister(computedId.value);
9558
9568
  }
9559
9569
  });
9570
+ watch(computedId, (val, oldVal) => {
9571
+ if (!parent.isGroupActivator) {
9572
+ parent.root.unregister(oldVal);
9573
+ nextTick(() => {
9574
+ parent.root.register(val, parent.id.value, toValue(isDisabled), isGroup);
9575
+ });
9576
+ }
9577
+ });
9560
9578
  isGroup && provide(VNestedSymbol, item);
9561
9579
  return item;
9562
9580
  };
@@ -9788,7 +9806,7 @@ const VListItem = genericComponent()({
9788
9806
  const isLink = toRef(() => props.link !== false && link.isLink.value);
9789
9807
  const isSelectable = computed(() => !!list && (root.selectable.value || root.activatable.value || props.value != null));
9790
9808
  const isClickable = computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || isSelectable.value));
9791
- const role = computed(() => list ? isSelectable.value ? 'option' : 'listitem' : undefined);
9809
+ const role = computed(() => list ? isLink.value ? 'link' : isSelectable.value ? 'option' : 'listitem' : undefined);
9792
9810
  const ariaSelected = computed(() => {
9793
9811
  if (!isSelectable.value) return undefined;
9794
9812
  return root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value;
@@ -9807,7 +9825,9 @@ const VListItem = genericComponent()({
9807
9825
  handleActiveLink();
9808
9826
  });
9809
9827
  onBeforeMount(() => {
9810
- if (link.isActive?.value) handleActiveLink();
9828
+ if (link.isActive?.value) {
9829
+ nextTick(() => handleActiveLink());
9830
+ }
9811
9831
  });
9812
9832
  function handleActiveLink() {
9813
9833
  if (parent.value != null) {
@@ -12055,25 +12075,41 @@ const VMenu = genericComponent()({
12055
12075
  document.removeEventListener('focusin', onFocusIn);
12056
12076
  });
12057
12077
  onDeactivated(() => isActive.value = false);
12078
+ let focusTrapSuppressed = false;
12079
+ let focusTrapSuppressionTimeout = -1;
12080
+ async function onPointerdown() {
12081
+ focusTrapSuppressed = true;
12082
+ focusTrapSuppressionTimeout = window.setTimeout(() => {
12083
+ focusTrapSuppressed = false;
12084
+ }, 100);
12085
+ }
12058
12086
  async function onFocusIn(e) {
12059
12087
  const before = e.relatedTarget;
12060
12088
  const after = e.target;
12061
12089
  await nextTick();
12062
12090
  if (isActive.value && before !== after && overlay.value?.contentEl &&
12063
- // We're the topmost menu
12064
- overlay.value?.globalTop &&
12091
+ // We're the menu without open submenus or overlays
12092
+ overlay.value?.localTop &&
12065
12093
  // It isn't the document or the menu body
12066
12094
  ![document, overlay.value.contentEl].includes(after) &&
12067
12095
  // It isn't inside the menu body
12068
12096
  !overlay.value.contentEl.contains(after)) {
12069
- const focusable = focusableChildren(overlay.value.contentEl);
12070
- focusable[0]?.focus();
12097
+ if (focusTrapSuppressed) {
12098
+ if (!props.openOnHover || !overlay.value.activatorEl?.contains(after)) {
12099
+ isActive.value = false;
12100
+ }
12101
+ } else {
12102
+ const focusable = focusableChildren(overlay.value.contentEl);
12103
+ focusable[0]?.focus();
12104
+ document.removeEventListener('pointerdown', onPointerdown);
12105
+ }
12071
12106
  }
12072
12107
  }
12073
12108
  watch(isActive, val => {
12074
12109
  if (val) {
12075
12110
  parent?.register();
12076
12111
  if (IN_BROWSER && !props.disableInitialFocus) {
12112
+ document.addEventListener('pointerdown', onPointerdown);
12077
12113
  document.addEventListener('focusin', onFocusIn, {
12078
12114
  once: true
12079
12115
  });
@@ -12081,6 +12117,8 @@ const VMenu = genericComponent()({
12081
12117
  } else {
12082
12118
  parent?.unregister();
12083
12119
  if (IN_BROWSER) {
12120
+ clearTimeout(focusTrapSuppressionTimeout);
12121
+ document.removeEventListener('pointerdown', onPointerdown);
12084
12122
  document.removeEventListener('focusin', onFocusIn);
12085
12123
  }
12086
12124
  }
@@ -12674,7 +12712,6 @@ const VTextField = genericComponent()({
12674
12712
  e.stopPropagation();
12675
12713
  onFocus();
12676
12714
  nextTick(() => {
12677
- model.value = null;
12678
12715
  reset();
12679
12716
  callEvent(props['onClick:clear'], e);
12680
12717
  });
@@ -12729,8 +12766,6 @@ const VTextField = genericComponent()({
12729
12766
  "onMousedown": onControlMousedown,
12730
12767
  "onClick": onControlClick,
12731
12768
  "onClick:clear": e => onClear(e, reset),
12732
- "onClick:prependInner": props['onClick:prependInner'],
12733
- "onClick:appendInner": props['onClick:appendInner'],
12734
12769
  "role": props.role
12735
12770
  }, omit(fieldProps, ['onClick:clear']), {
12736
12771
  "id": id.value,
@@ -12906,7 +12941,7 @@ function useVirtual(props, items) {
12906
12941
  const start = performance.now();
12907
12942
  offsets[0] = 0;
12908
12943
  const length = items.value.length;
12909
- for (let i = 1; i <= length - 1; i++) {
12944
+ for (let i = 1; i <= length; i++) {
12910
12945
  offsets[i] = (offsets[i - 1] || 0) + getSize(i - 1);
12911
12946
  }
12912
12947
  updateTime.value = Math.max(updateTime.value, performance.now() - start);
@@ -12941,7 +12976,7 @@ function useVirtual(props, items) {
12941
12976
  }
12942
12977
  }
12943
12978
  function calculateOffset(index) {
12944
- index = clamp(index, 0, items.value.length - 1);
12979
+ index = clamp(index, 0, items.value.length);
12945
12980
  const whole = Math.floor(index);
12946
12981
  const fraction = index % 1;
12947
12982
  const next = whole + 1;
@@ -13946,10 +13981,7 @@ const makeVAutocompleteProps = propsFactory({
13946
13981
  ...omit(makeVTextFieldProps({
13947
13982
  modelValue: null,
13948
13983
  role: 'combobox'
13949
- }), ['validationValue', 'dirty', 'appendInnerIcon']),
13950
- ...makeTransitionProps({
13951
- transition: false
13952
- })
13984
+ }), ['validationValue', 'dirty', 'appendInnerIcon'])
13953
13985
  }, 'VAutocomplete');
13954
13986
  const VAutocomplete = genericComponent()({
13955
13987
  name: 'VAutocomplete',
@@ -13974,6 +14006,7 @@ const VAutocomplete = genericComponent()({
13974
14006
  const vMenuRef = ref();
13975
14007
  const vVirtualScrollRef = ref();
13976
14008
  const selectionIndex = shallowRef(-1);
14009
+ const _searchLock = shallowRef(null);
13977
14010
  const {
13978
14011
  items,
13979
14012
  transformIn,
@@ -13995,9 +14028,9 @@ const VAutocomplete = genericComponent()({
13995
14028
  const {
13996
14029
  filteredItems,
13997
14030
  getMatches
13998
- } = useFilter(props, items, () => isPristine.value ? '' : search.value);
14031
+ } = useFilter(props, items, () => _searchLock.value ?? (isPristine.value ? '' : search.value));
13999
14032
  const displayItems = computed(() => {
14000
- if (props.hideSelected) {
14033
+ if (props.hideSelected && _searchLock.value === null) {
14001
14034
  return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
14002
14035
  }
14003
14036
  return filteredItems.value;
@@ -14128,6 +14161,7 @@ const VAutocomplete = genericComponent()({
14128
14161
  isPristine.value = true;
14129
14162
  vTextFieldRef.value?.focus();
14130
14163
  }
14164
+ _searchLock.value = null;
14131
14165
  }
14132
14166
  function onFocusin(e) {
14133
14167
  isFocused.value = true;
@@ -14163,6 +14197,7 @@ const VAutocomplete = genericComponent()({
14163
14197
  } else {
14164
14198
  const add = set !== false;
14165
14199
  model.value = add ? [item] : [];
14200
+ _searchLock.value = isPristine.value ? '' : search.value ?? '';
14166
14201
  search.value = add && !hasSelectionSlot.value ? item.title : '';
14167
14202
 
14168
14203
  // watch for search watcher to trigger
@@ -14182,6 +14217,9 @@ const VAutocomplete = genericComponent()({
14182
14217
  } else {
14183
14218
  if (!props.multiple && search.value == null) model.value = [];
14184
14219
  menu.value = false;
14220
+ if (!isPristine.value && search.value) {
14221
+ _searchLock.value = search.value;
14222
+ }
14185
14223
  search.value = '';
14186
14224
  selectionIndex.value = -1;
14187
14225
  }
@@ -14191,13 +14229,14 @@ const VAutocomplete = genericComponent()({
14191
14229
  if (val) menu.value = true;
14192
14230
  isPristine.value = !val;
14193
14231
  });
14194
- watch(menu, () => {
14195
- if (!props.hideSelected && menu.value && model.value.length) {
14232
+ watch(menu, val => {
14233
+ if (!props.hideSelected && val && model.value.length && isPristine.value) {
14196
14234
  const index = displayItems.value.findIndex(item => model.value.some(s => item.value === s.value));
14197
14235
  IN_BROWSER && window.requestAnimationFrame(() => {
14198
14236
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
14199
14237
  });
14200
14238
  }
14239
+ if (val) _searchLock.value = null;
14201
14240
  });
14202
14241
  watch(items, (newVal, oldVal) => {
14203
14242
  if (menu.value) return;
@@ -14248,7 +14287,6 @@ const VAutocomplete = genericComponent()({
14248
14287
  "maxHeight": 310,
14249
14288
  "openOnClick": false,
14250
14289
  "closeOnContentClick": false,
14251
- "transition": props.transition,
14252
14290
  "onAfterEnter": onAfterEnter,
14253
14291
  "onAfterLeave": onAfterLeave
14254
14292
  }, props.menuProps), {
@@ -15676,7 +15714,21 @@ const VWindow = genericComponent()({
15676
15714
  const activeIndex = computed(() => {
15677
15715
  return group.items.value.findIndex(item => group.selected.value.includes(item.id));
15678
15716
  });
15717
+
15718
+ // Fix for https://github.com/vuetifyjs/vuetify/issues/18447
15679
15719
  watch(activeIndex, (newVal, oldVal) => {
15720
+ let scrollableParent;
15721
+ const savedScrollPosition = {
15722
+ x: 0,
15723
+ y: 0
15724
+ };
15725
+ if (IN_BROWSER && oldVal >= 0) {
15726
+ scrollableParent = getScrollParent(rootRef.value);
15727
+
15728
+ // Save current scroll position
15729
+ savedScrollPosition.x = scrollableParent.scrollLeft;
15730
+ savedScrollPosition.y = scrollableParent.scrollTop;
15731
+ }
15680
15732
  const itemsLength = group.items.value.length;
15681
15733
  const lastIndex = itemsLength - 1;
15682
15734
  if (itemsLength <= 2) {
@@ -15688,7 +15740,32 @@ const VWindow = genericComponent()({
15688
15740
  } else {
15689
15741
  isReversed.value = newVal < oldVal;
15690
15742
  }
15691
- });
15743
+ nextTick(() => {
15744
+ if (!IN_BROWSER || !scrollableParent) return;
15745
+ const currentScrollY = scrollableParent.scrollTop;
15746
+ if (currentScrollY !== savedScrollPosition.y) {
15747
+ scrollableParent.scrollTo({
15748
+ left: savedScrollPosition.x,
15749
+ top: savedScrollPosition.y,
15750
+ behavior: 'instant'
15751
+ });
15752
+ }
15753
+ requestAnimationFrame(() => {
15754
+ if (!scrollableParent) return;
15755
+ const rafScrollY = scrollableParent.scrollTop;
15756
+ if (rafScrollY !== savedScrollPosition.y) {
15757
+ scrollableParent.scrollTo({
15758
+ left: savedScrollPosition.x,
15759
+ top: savedScrollPosition.y,
15760
+ behavior: 'instant'
15761
+ });
15762
+ }
15763
+ });
15764
+ });
15765
+ }, {
15766
+ flush: 'sync'
15767
+ }); // Run synchronously before DOM updates
15768
+
15692
15769
  provide(VWindowSymbol, {
15693
15770
  transition,
15694
15771
  isReversed,
@@ -18593,7 +18670,7 @@ function createDate(options, locale) {
18593
18670
  };
18594
18671
  }
18595
18672
  function createDateRange(adapter, start, stop) {
18596
- const diff = adapter.getDiff(adapter.endOfDay(stop ?? start), adapter.startOfDay(start), 'days');
18673
+ const diff = adapter.getDiff(new Date(`${adapter.toISO(stop ?? start)}T00:00:00Z`), new Date(`${adapter.toISO(start)}T00:00:00Z`), 'days');
18597
18674
  const datesInRange = [start];
18598
18675
  for (let i = 1; i < diff; i++) {
18599
18676
  const nextDate = adapter.addDays(start, i);
@@ -19276,10 +19353,7 @@ const makeVComboboxProps = propsFactory({
19276
19353
  ...omit(makeVTextFieldProps({
19277
19354
  modelValue: null,
19278
19355
  role: 'combobox'
19279
- }), ['validationValue', 'dirty', 'appendInnerIcon']),
19280
- ...makeTransitionProps({
19281
- transition: false
19282
- })
19356
+ }), ['validationValue', 'dirty', 'appendInnerIcon'])
19283
19357
  }, 'VCombobox');
19284
19358
  const VCombobox = genericComponent()({
19285
19359
  name: 'VCombobox',
@@ -19323,13 +19397,16 @@ const VCombobox = genericComponent()({
19323
19397
  const hasChips = computed(() => !!(props.chips || slots.chip));
19324
19398
  const hasSelectionSlot = computed(() => hasChips.value || !!slots.selection);
19325
19399
  const _search = shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
19400
+ const _searchLock = shallowRef(null);
19326
19401
  const search = computed({
19327
19402
  get: () => {
19328
19403
  return _search.value;
19329
19404
  },
19330
19405
  set: async val => {
19331
19406
  _search.value = val ?? '';
19332
- if (!props.multiple && !hasSelectionSlot.value) {
19407
+ if (val === null || val === '' && !props.multiple && !hasSelectionSlot.value) {
19408
+ model.value = [];
19409
+ } else if (!props.multiple && !hasSelectionSlot.value) {
19333
19410
  model.value = [transformItem$3(props, val)];
19334
19411
  nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
19335
19412
  }
@@ -19357,9 +19434,9 @@ const VCombobox = genericComponent()({
19357
19434
  const {
19358
19435
  filteredItems,
19359
19436
  getMatches
19360
- } = useFilter(props, items, () => props.alwaysFilter || !isPristine.value ? search.value : '');
19437
+ } = useFilter(props, items, () => _searchLock.value ?? (props.alwaysFilter || !isPristine.value ? search.value : ''));
19361
19438
  const displayItems = computed(() => {
19362
- if (props.hideSelected) {
19439
+ if (props.hideSelected && _searchLock.value === null) {
19363
19440
  return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
19364
19441
  }
19365
19442
  return filteredItems.value;
@@ -19440,22 +19517,19 @@ const VCombobox = genericComponent()({
19440
19517
  if (['Escape'].includes(e.key)) {
19441
19518
  menu.value = false;
19442
19519
  }
19443
- if (['Enter', 'Escape', 'Tab'].includes(e.key)) {
19444
- if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key) && !model.value.some(_ref2 => {
19445
- let {
19446
- value
19447
- } = _ref2;
19448
- return value === displayItems.value[0].value;
19449
- })) {
19450
- select(filteredItems.value[0]);
19451
- }
19452
- isPristine.value = true;
19520
+ if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key) && !model.value.some(_ref2 => {
19521
+ let {
19522
+ value
19523
+ } = _ref2;
19524
+ return value === displayItems.value[0].value;
19525
+ })) {
19526
+ select(filteredItems.value[0]);
19453
19527
  }
19454
19528
  if (e.key === 'ArrowDown' && highlightFirst.value) {
19455
19529
  listRef.value?.focus('next');
19456
19530
  }
19457
19531
  if (e.key === 'Enter' && search.value) {
19458
- select(transformItem$3(props, search.value));
19532
+ select(transformItem$3(props, search.value), true, true);
19459
19533
  if (hasSelectionSlot.value) _search.value = '';
19460
19534
  }
19461
19535
  if (['Backspace', 'Delete'].includes(e.key)) {
@@ -19503,10 +19577,12 @@ const VCombobox = genericComponent()({
19503
19577
  isPristine.value = true;
19504
19578
  vTextFieldRef.value?.focus();
19505
19579
  }
19580
+ _searchLock.value = null;
19506
19581
  }
19507
19582
  /** @param set - null means toggle */
19508
19583
  function select(item) {
19509
19584
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
19585
+ let keepMenu = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
19510
19586
  if (!item || item.props.disabled) return;
19511
19587
  if (props.multiple) {
19512
19588
  const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
@@ -19524,11 +19600,14 @@ const VCombobox = genericComponent()({
19524
19600
  } else {
19525
19601
  const add = set !== false;
19526
19602
  model.value = add ? [item] : [];
19603
+ if ((!isPristine.value || props.alwaysFilter) && _search.value) {
19604
+ _searchLock.value = _search.value;
19605
+ }
19527
19606
  _search.value = add && !hasSelectionSlot.value ? item.title : '';
19528
19607
 
19529
19608
  // watch for search watcher to trigger
19530
19609
  nextTick(() => {
19531
- menu.value = false;
19610
+ menu.value = keepMenu;
19532
19611
  isPristine.value = true;
19533
19612
  });
19534
19613
  }
@@ -19542,9 +19621,6 @@ const VCombobox = genericComponent()({
19542
19621
  function onFocusout(e) {
19543
19622
  listHasFocus.value = false;
19544
19623
  }
19545
- function onUpdateModelValue(v) {
19546
- if (v == null || v === '' && !props.multiple && !hasSelectionSlot.value) model.value = [];
19547
- }
19548
19624
  watch(isFocused, (val, oldVal) => {
19549
19625
  if (val || val === oldVal) return;
19550
19626
  selectionIndex.value = -1;
@@ -19567,13 +19643,14 @@ const VCombobox = genericComponent()({
19567
19643
  }
19568
19644
  }
19569
19645
  });
19570
- watch(menu, () => {
19571
- if (!props.hideSelected && menu.value && model.value.length) {
19646
+ watch(menu, val => {
19647
+ if (!props.hideSelected && val && model.value.length && isPristine.value) {
19572
19648
  const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
19573
19649
  IN_BROWSER && window.requestAnimationFrame(() => {
19574
19650
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
19575
19651
  });
19576
19652
  }
19653
+ if (val) _searchLock.value = null;
19577
19654
  });
19578
19655
  watch(items, (newVal, oldVal) => {
19579
19656
  if (menu.value) return;
@@ -19589,7 +19666,7 @@ const VCombobox = genericComponent()({
19589
19666
  "ref": vTextFieldRef
19590
19667
  }, textFieldProps, {
19591
19668
  "modelValue": search.value,
19592
- "onUpdate:modelValue": [$event => search.value = $event, onUpdateModelValue],
19669
+ "onUpdate:modelValue": $event => search.value = $event,
19593
19670
  "focused": isFocused.value,
19594
19671
  "onUpdate:focused": $event => isFocused.value = $event,
19595
19672
  "validationValue": model.externalValue,
@@ -19624,7 +19701,6 @@ const VCombobox = genericComponent()({
19624
19701
  "maxHeight": 310,
19625
19702
  "openOnClick": false,
19626
19703
  "closeOnContentClick": false,
19627
- "transition": props.transition,
19628
19704
  "onAfterEnter": onAfterEnter,
19629
19705
  "onAfterLeave": onAfterLeave
19630
19706
  }, props.menuProps), {
@@ -21638,6 +21714,7 @@ const makeVDataTableHeadersProps = propsFactory({
21638
21714
  },
21639
21715
  /** @deprecated */
21640
21716
  sticky: Boolean,
21717
+ ...makeDensityProps(),
21641
21718
  ...makeDisplayProps(),
21642
21719
  ...makeLoaderProps()
21643
21720
  }, 'VDataTableHeaders');
@@ -21762,6 +21839,7 @@ const VDataTableHeaders = genericComponent()({
21762
21839
  if (isEmpty) return '';
21763
21840
  if (column.key === 'data-table-select') {
21764
21841
  return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll.value && createVNode(VCheckboxBtn, {
21842
+ "density": props.density,
21765
21843
  "modelValue": allSelected.value,
21766
21844
  "indeterminate": someSelected.value && !allSelected.value,
21767
21845
  "onUpdate:modelValue": selectAll
@@ -21862,7 +21940,8 @@ const makeVDataTableGroupHeaderRowProps = propsFactory({
21862
21940
  groupExpandIcon: {
21863
21941
  type: IconValue,
21864
21942
  default: '$tableGroupExpand'
21865
- }
21943
+ },
21944
+ ...makeDensityProps()
21866
21945
  }, 'VDataTableGroupHeaderRow');
21867
21946
  const VDataTableGroupHeaderRow = genericComponent()({
21868
21947
  name: 'VDataTableGroupHeaderRow',
@@ -21930,6 +22009,7 @@ const VDataTableGroupHeaderRow = genericComponent()({
21930
22009
  "noPadding": true
21931
22010
  }, {
21932
22011
  default: () => [createVNode(VCheckboxBtn, {
22012
+ "density": props.density,
21933
22013
  "modelValue": modelValue,
21934
22014
  "indeterminate": indeterminate,
21935
22015
  "onUpdate:modelValue": selectGroup
@@ -21958,6 +22038,7 @@ const makeVDataTableRowProps = propsFactory({
21958
22038
  onClick: EventProp(),
21959
22039
  onContextmenu: EventProp(),
21960
22040
  onDblclick: EventProp(),
22041
+ ...makeDensityProps(),
21961
22042
  ...makeDisplayProps()
21962
22043
  }, 'VDataTableRow');
21963
22044
  const VDataTableRow = genericComponent()({
@@ -22066,6 +22147,7 @@ const VDataTableRow = genericComponent()({
22066
22147
  }
22067
22148
  }) ?? createVNode(VCheckboxBtn, {
22068
22149
  "disabled": !item.selectable,
22150
+ "density": props.density,
22069
22151
  "modelValue": isSelected([item]),
22070
22152
  "onClick": withModifiers(event => toggleSelect(item, props.index, event), ['stop'])
22071
22153
  }, null);
@@ -22118,8 +22200,8 @@ const makeVDataTableRowsProps = propsFactory({
22118
22200
  },
22119
22201
  rowProps: [Object, Function],
22120
22202
  cellProps: [Object, Function],
22121
- ...pick(makeVDataTableRowProps(), ['collapseIcon', 'expandIcon']),
22122
- ...pick(makeVDataTableGroupHeaderRowProps(), ['groupCollapseIcon', 'groupExpandIcon']),
22203
+ ...pick(makeVDataTableRowProps(), ['collapseIcon', 'expandIcon', 'density']),
22204
+ ...pick(makeVDataTableGroupHeaderRowProps(), ['groupCollapseIcon', 'groupExpandIcon', 'density']),
22123
22205
  ...makeDisplayProps()
22124
22206
  }, 'VDataTableRows');
22125
22207
  const VDataTableRows = genericComponent()({
@@ -22154,7 +22236,7 @@ const VDataTableRows = genericComponent()({
22154
22236
  mobile
22155
22237
  } = useDisplay(props);
22156
22238
  useRender(() => {
22157
- const groupHeaderRowProps = pick(props, ['groupCollapseIcon', 'groupExpandIcon']);
22239
+ const groupHeaderRowProps = pick(props, ['groupCollapseIcon', 'groupExpandIcon', 'density']);
22158
22240
  if (props.loading && (!props.items.length || slots.loading)) {
22159
22241
  return createElementVNode("tr", {
22160
22242
  "class": "v-data-table-rows-loading",
@@ -22220,6 +22302,7 @@ const VDataTableRows = genericComponent()({
22220
22302
  cellProps: props.cellProps,
22221
22303
  collapseIcon: props.collapseIcon,
22222
22304
  expandIcon: props.expandIcon,
22305
+ density: props.density,
22223
22306
  mobile: mobile.value
22224
22307
  }, getPrefixedEventHandlers(attrs, ':row', () => slotProps), typeof props.rowProps === 'function' ? props.rowProps({
22225
22308
  item: slotProps.item,
@@ -22236,6 +22319,8 @@ const VDataTableRows = genericComponent()({
22236
22319
  }
22237
22320
  });
22238
22321
 
22322
+ // Types
22323
+
22239
22324
  const makeVTableProps = propsFactory({
22240
22325
  fixedHeader: Boolean,
22241
22326
  fixedFooter: Boolean,
@@ -22265,37 +22350,26 @@ const VTable = genericComponent()({
22265
22350
  const {
22266
22351
  densityClasses
22267
22352
  } = useDensity(props);
22268
- useRender(() => {
22269
- const tableContentDefaults = {
22270
- VCheckboxBtn: {
22271
- density: props.density
22353
+ useRender(() => createVNode(props.tag, {
22354
+ "class": normalizeClass(['v-table', {
22355
+ 'v-table--fixed-height': !!props.height,
22356
+ 'v-table--fixed-header': props.fixedHeader,
22357
+ 'v-table--fixed-footer': props.fixedFooter,
22358
+ 'v-table--has-top': !!slots.top,
22359
+ 'v-table--has-bottom': !!slots.bottom,
22360
+ 'v-table--hover': props.hover,
22361
+ 'v-table--striped-even': props.striped === 'even',
22362
+ 'v-table--striped-odd': props.striped === 'odd'
22363
+ }, themeClasses.value, densityClasses.value, props.class]),
22364
+ "style": normalizeStyle(props.style)
22365
+ }, {
22366
+ default: () => [slots.top?.(), slots.default ? createElementVNode("div", {
22367
+ "class": "v-table__wrapper",
22368
+ "style": {
22369
+ height: convertToUnit(props.height)
22272
22370
  }
22273
- };
22274
- return createVNode(props.tag, {
22275
- "class": normalizeClass(['v-table', {
22276
- 'v-table--fixed-height': !!props.height,
22277
- 'v-table--fixed-header': props.fixedHeader,
22278
- 'v-table--fixed-footer': props.fixedFooter,
22279
- 'v-table--has-top': !!slots.top,
22280
- 'v-table--has-bottom': !!slots.bottom,
22281
- 'v-table--hover': props.hover,
22282
- 'v-table--striped-even': props.striped === 'even',
22283
- 'v-table--striped-odd': props.striped === 'odd'
22284
- }, themeClasses.value, densityClasses.value, props.class]),
22285
- "style": normalizeStyle(props.style)
22286
- }, {
22287
- default: () => [slots.top?.(), createVNode(VDefaultsProvider, {
22288
- "defaults": tableContentDefaults
22289
- }, {
22290
- default: () => [slots.default ? createElementVNode("div", {
22291
- "class": "v-table__wrapper",
22292
- "style": {
22293
- height: convertToUnit(props.height)
22294
- }
22295
- }, [createElementVNode("table", null, [slots.default()])]) : slots.wrapper?.()]
22296
- }), slots.bottom?.()]
22297
- });
22298
- });
22371
+ }, [createElementVNode("table", null, [slots.default()])]) : slots.wrapper?.(), slots.bottom?.()]
22372
+ }));
22299
22373
  return {};
22300
22374
  }
22301
22375
  });
@@ -24106,7 +24180,7 @@ const VDatePicker = genericComponent()({
24106
24180
  function isAllowedInRange(start, end) {
24107
24181
  const allowedDates = props.allowedDates;
24108
24182
  if (typeof allowedDates !== 'function') return true;
24109
- const days = adapter.getDiff(end, start, 'days');
24183
+ const days = 1 + adapter.getDiff(new Date(`${adapter.toISO(end)}T00:00:00Z`), new Date(`${adapter.toISO(start)}T00:00:00Z`), 'days');
24110
24184
  for (let i = 0; i < days; i++) {
24111
24185
  if (allowedDates(adapter.addDays(start, i))) return true;
24112
24186
  }
@@ -26609,7 +26683,7 @@ const VNumberInput = genericComponent()({
26609
26683
  const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
26610
26684
  const _inputText = shallowRef(null);
26611
26685
  watchEffect(() => {
26612
- if (isFocused.value && !controlsDisabled.value && Number(_inputText.value) === model.value) ; else if (model.value == null) {
26686
+ if (isFocused.value && !controlsDisabled.value && Number(_inputText.value?.replace(decimalSeparator.value, '.')) === model.value) ; else if (model.value == null) {
26613
26687
  _inputText.value = null;
26614
26688
  } else if (!isNaN(model.value)) {
26615
26689
  _inputText.value = correctPrecision(model.value);
@@ -26704,6 +26778,7 @@ const VNumberInput = genericComponent()({
26704
26778
  if (!new RegExp(`^-?\\d*${escapeForRegex(decimalSeparator.value)}?\\d*$`).test(potentialNewInputVal)) {
26705
26779
  e.preventDefault();
26706
26780
  inputElement.value = potentialNewNumber;
26781
+ nextTick(() => inputText.value = potentialNewNumber);
26707
26782
  }
26708
26783
  if (props.precision == null) return;
26709
26784
 
@@ -26711,13 +26786,15 @@ const VNumberInput = genericComponent()({
26711
26786
  if (potentialNewInputVal.split(decimalSeparator.value)[1]?.length > props.precision) {
26712
26787
  e.preventDefault();
26713
26788
  inputElement.value = potentialNewNumber;
26789
+ nextTick(() => inputText.value = potentialNewNumber);
26714
26790
  const cursorPosition = (selectionStart ?? 0) + e.data.length;
26715
26791
  inputElement.setSelectionRange(cursorPosition, cursorPosition);
26716
26792
  }
26717
26793
  // Ignore decimal separator when precision = 0
26718
- if (props.precision === 0 && potentialNewInputVal.includes(decimalSeparator.value)) {
26794
+ if (props.precision === 0 && potentialNewInputVal.endsWith(decimalSeparator.value)) {
26719
26795
  e.preventDefault();
26720
26796
  inputElement.value = potentialNewNumber;
26797
+ nextTick(() => inputText.value = potentialNewNumber);
26721
26798
  }
26722
26799
  }
26723
26800
  async function onKeydown(e) {
@@ -27913,12 +27990,12 @@ const VSkeletonLoader = genericComponent()({
27913
27990
  ariaLabel: t(props.loadingText),
27914
27991
  role: 'alert'
27915
27992
  };
27916
- return createElementVNode(Fragment, null, [isLoading ? createElementVNode("div", mergeProps({
27993
+ return isLoading ? createElementVNode("div", mergeProps({
27917
27994
  "class": ['v-skeleton-loader', {
27918
27995
  'v-skeleton-loader--boilerplate': props.boilerplate
27919
27996
  }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
27920
27997
  "style": [backgroundColorStyles.value, dimensionStyles.value]
27921
- }, loadingProps, attrs), [items.value]) : slots.default?.()]);
27998
+ }, loadingProps, attrs), [items.value]) : createElementVNode(Fragment, null, [slots.default?.()]);
27922
27999
  });
27923
28000
  return {};
27924
28001
  }
@@ -29783,6 +29860,10 @@ const VTextarea = genericComponent()({
29783
29860
  const vFieldRef = ref();
29784
29861
  const controlHeight = shallowRef('');
29785
29862
  const textareaRef = ref();
29863
+ const scrollbarWidth = ref(0);
29864
+ const {
29865
+ platform
29866
+ } = useDisplay();
29786
29867
  const autocomplete = useAutocomplete(props);
29787
29868
  const isActive = computed(() => props.persistentPlaceholder || isFocused.value || props.active);
29788
29869
  function onFocus() {
@@ -29827,6 +29908,18 @@ const VTextarea = genericComponent()({
29827
29908
  if (!props.autoGrow) rows.value = Number(props.rows);
29828
29909
  });
29829
29910
  function calculateInputHeight() {
29911
+ nextTick(() => {
29912
+ if (!textareaRef.value) return;
29913
+ if (platform.value.firefox) {
29914
+ scrollbarWidth.value = 12;
29915
+ return;
29916
+ }
29917
+ const {
29918
+ offsetWidth,
29919
+ clientWidth
29920
+ } = textareaRef.value;
29921
+ scrollbarWidth.value = Math.max(0, offsetWidth - clientWidth);
29922
+ });
29830
29923
  if (!props.autoGrow) return;
29831
29924
  nextTick(() => {
29832
29925
  if (!sizerRef.value || !vFieldRef.value) return;
@@ -29887,7 +29980,9 @@ const VTextarea = genericComponent()({
29887
29980
  'v-textarea--no-resize': props.noResize || props.autoGrow,
29888
29981
  'v-input--plain-underlined': isPlainOrUnderlined.value
29889
29982
  }, props.class],
29890
- "style": props.style
29983
+ "style": [{
29984
+ '--v-textarea-scroll-bar-width': convertToUnit(scrollbarWidth.value)
29985
+ }, props.style]
29891
29986
  }, rootAttrs, inputProps, {
29892
29987
  "centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
29893
29988
  "focused": isFocused.value
@@ -34315,7 +34410,7 @@ const makeVColorInputProps = propsFactory({
34315
34410
  ...makeFocusProps(),
34316
34411
  ...makeVConfirmEditProps(),
34317
34412
  ...makeVTextFieldProps(),
34318
- ...omit(makeVColorPickerProps(), ['width'])
34413
+ ...omit(makeVColorPickerProps(), ['location', 'height', 'minHeight', 'maxHeight'])
34319
34414
  }, 'VColorInput');
34320
34415
  const VColorInput = genericComponent()({
34321
34416
  name: 'VColorInput',
@@ -34354,7 +34449,7 @@ const VColorInput = genericComponent()({
34354
34449
  }
34355
34450
  useRender(() => {
34356
34451
  const confirmEditProps = VConfirmEdit.filterProps(props);
34357
- const colorPickerProps = VColorPicker.filterProps(omit(props, ['active', 'color']));
34452
+ const colorPickerProps = VColorPicker.filterProps(omit(props, ['active', 'bgColor', 'color', 'rounded', 'maxWidth', 'minWidth', 'width']));
34358
34453
  const textFieldProps = VTextField.filterProps(props);
34359
34454
  const slotWithPip = props.hidePip ? undefined : {
34360
34455
  [props.pipLocation]: arg => createElementVNode(Fragment, null, [createVNode(VAvatar, {
@@ -34572,7 +34667,7 @@ const makeVDateInputProps = propsFactory({
34572
34667
  ...omit(makeVDatePickerProps({
34573
34668
  hideHeader: true,
34574
34669
  showAdjacentMonths: true
34575
- }), ['active', 'location', 'rounded'])
34670
+ }), ['active', 'location', 'rounded', 'height', 'minHeight', 'maxHeight'])
34576
34671
  }, 'VDateInput');
34577
34672
  const VDateInput = genericComponent()({
34578
34673
  name: 'VDateInput',
@@ -34603,6 +34698,15 @@ const VDateInput = genericComponent()({
34603
34698
  const {
34604
34699
  mobile
34605
34700
  } = useDisplay(props);
34701
+ const clamp = date => {
34702
+ if (props.max && adapter.isAfter(date, props.max)) {
34703
+ return props.max;
34704
+ }
34705
+ if (props.min && adapter.isBefore(date, props.min)) {
34706
+ return props.min;
34707
+ }
34708
+ return date;
34709
+ };
34606
34710
  const emptyModelValue = () => props.multiple ? [] : null;
34607
34711
  const model = useProxiedModel(props, 'modelValue', emptyModelValue(), val => Array.isArray(val) ? val.map(item => adapter.toJsDate(item)) : val ? adapter.toJsDate(val) : val, val => Array.isArray(val) ? val.map(item => adapter.date(item)) : val ? adapter.date(val) : val);
34608
34712
  const menu = useProxiedModel(props, 'menu');
@@ -34653,7 +34757,7 @@ const VDateInput = genericComponent()({
34653
34757
  if (!menu.value || !isFocused.value) {
34654
34758
  menu.value = true;
34655
34759
  }
34656
- if (props.updateOn.includes('enter')) {
34760
+ if (props.updateOn.includes('enter') && !props.readonly) {
34657
34761
  onUserInput(e.target);
34658
34762
  }
34659
34763
  }
@@ -34680,7 +34784,7 @@ const VDateInput = genericComponent()({
34680
34784
  model.value = emptyModelValue();
34681
34785
  }
34682
34786
  function onBlur(e) {
34683
- if (props.updateOn.includes('blur')) {
34787
+ if (props.updateOn.includes('blur') && !props.readonly) {
34684
34788
  onUserInput(e.target);
34685
34789
  }
34686
34790
 
@@ -34698,23 +34802,23 @@ const VDateInput = genericComponent()({
34698
34802
  model.value = emptyModelValue();
34699
34803
  } else if (!props.multiple) {
34700
34804
  if (isValid(value)) {
34701
- model.value = parseDate(value);
34805
+ model.value = clamp(parseDate(value));
34702
34806
  }
34703
34807
  } else {
34704
34808
  const parts = value.trim().split(/\D+-\D+|[^\d\-/.]+/);
34705
34809
  if (parts.every(isValid)) {
34706
34810
  if (props.multiple === 'range') {
34707
- const [start, stop] = parts.map(parseDate).toSorted((a, b) => adapter.isAfter(a, b) ? 1 : -1);
34811
+ const [start, stop] = parts.map(parseDate).map(clamp).toSorted((a, b) => adapter.isAfter(a, b) ? 1 : -1);
34708
34812
  model.value = createDateRange(adapter, start, stop);
34709
34813
  } else {
34710
- model.value = parts.map(parseDate);
34814
+ model.value = parts.map(parseDate).map(clamp);
34711
34815
  }
34712
34816
  }
34713
34817
  }
34714
34818
  }
34715
34819
  useRender(() => {
34716
34820
  const confirmEditProps = VConfirmEdit.filterProps(props);
34717
- const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']));
34821
+ const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'bgColor', 'color', 'location', 'rounded', 'maxWidth', 'minWidth', 'width']));
34718
34822
  const datePickerSlots = pick(slots, ['title', 'header', 'day', 'month', 'year']);
34719
34823
  const textFieldProps = VTextField.filterProps(omit(props, ['placeholder']));
34720
34824
  return createVNode(VTextField, mergeProps({
@@ -35159,7 +35263,7 @@ const VMaskInput = genericComponent()({
35159
35263
  // Always display masked value in input when mask is applied
35160
35264
  val => props.mask ? mask.mask(mask.unmask(val)) : val, val => {
35161
35265
  if (props.mask) {
35162
- const valueWithoutDelimiters = removeMaskDelimiters(val);
35266
+ const valueWithoutDelimiters = val ? removeMaskDelimiters(val) : '';
35163
35267
 
35164
35268
  // E.g. mask is #-# and the input value is '2-23'
35165
35269
  // model-value should be enforced to '2-2'
@@ -37905,7 +38009,7 @@ function createVuetify$1() {
37905
38009
  };
37906
38010
  });
37907
38011
  }
37908
- const version$1 = "3.10.4";
38012
+ const version$1 = "3.10.6";
37909
38013
  createVuetify$1.version = version$1;
37910
38014
 
37911
38015
  // Vue's inject() can only be used in setup
@@ -38203,7 +38307,7 @@ var index = /*#__PURE__*/Object.freeze({
38203
38307
 
38204
38308
  /* eslint-disable local-rules/sort-imports */
38205
38309
 
38206
- const version = "3.10.4";
38310
+ const version = "3.10.6";
38207
38311
 
38208
38312
  /* eslint-disable local-rules/sort-imports */
38209
38313