vuetify 3.10.5 → 3.10.7
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.
- package/README.md +0 -6
- package/dist/json/attributes.json +3488 -3512
- package/dist/json/importMap-labs.json +20 -20
- package/dist/json/importMap.json +176 -176
- package/dist/json/tags.json +3 -9
- package/dist/json/web-types.json +6467 -6520
- package/dist/vuetify-labs.cjs +190 -82
- package/dist/vuetify-labs.css +4945 -4895
- package/dist/vuetify-labs.d.ts +117 -172
- package/dist/vuetify-labs.esm.js +190 -82
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +190 -82
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +171 -72
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3926 -3898
- package/dist/vuetify.d.ts +117 -137
- package/dist/vuetify.esm.js +171 -72
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +171 -72
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +118 -107
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +0 -61
- package/lib/components/VAutocomplete/VAutocomplete.js +15 -12
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VChipGroup/VChipGroup.d.ts +37 -0
- package/lib/components/VChipGroup/VChipGroup.js +3 -1
- package/lib/components/VChipGroup/VChipGroup.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.d.ts +6 -67
- package/lib/components/VCombobox/VCombobox.js +29 -30
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VCounter/VCounter.css +1 -0
- package/lib/components/VCounter/VCounter.sass +1 -0
- package/lib/components/VDatePicker/VDatePicker.js +1 -1
- package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
- package/lib/components/VFileInput/VFileInput.js +3 -2
- package/lib/components/VFileInput/VFileInput.js.map +1 -1
- package/lib/components/VList/VListItem.css +14 -12
- package/lib/components/VList/VListItem.js +4 -2
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VList/VListItem.sass +20 -18
- package/lib/components/VMenu/VMenu.js +22 -4
- package/lib/components/VMenu/VMenu.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.css +8 -0
- package/lib/components/VNumberInput/VNumberInput.js +5 -2
- package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.sass +10 -4
- package/lib/components/VSelect/VSelect.js +2 -1
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSkeletonLoader/VSkeletonLoader.css +17 -0
- package/lib/components/VSkeletonLoader/VSkeletonLoader.js +3 -3
- package/lib/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
- package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +7 -0
- package/lib/components/VSlideGroup/VSlideGroup.d.ts +25 -0
- package/lib/components/VSlideGroup/VSlideGroup.js +5 -1
- package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
- package/lib/components/VTabs/VTabs.d.ts +25 -0
- package/lib/components/VTextField/VTextField.js +3 -5
- package/lib/components/VTextField/VTextField.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.css +2 -2
- package/lib/components/VTextarea/VTextarea.d.ts +3 -3
- package/lib/components/VTextarea/VTextarea.js +23 -3
- package/lib/components/VTextarea/VTextarea.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.sass +4 -2
- package/lib/components/VWindow/VWindow.js +39 -3
- package/lib/components/VWindow/VWindow.js.map +1 -1
- package/lib/composables/date/date.js +1 -1
- package/lib/composables/date/date.js.map +1 -1
- package/lib/composables/group.js +1 -1
- package/lib/composables/group.js.map +1 -1
- package/lib/composables/nested/nested.js +12 -2
- package/lib/composables/nested/nested.js.map +1 -1
- package/lib/composables/virtual.js +2 -2
- package/lib/composables/virtual.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/framework.d.ts +60 -60
- package/lib/framework.js +1 -1
- package/lib/labs/VColorInput/VColorInput.d.ts +0 -40
- package/lib/labs/VColorInput/VColorInput.js +2 -2
- package/lib/labs/VColorInput/VColorInput.js.map +1 -1
- package/lib/labs/VDateInput/VDateInput.d.ts +0 -30
- package/lib/labs/VDateInput/VDateInput.js +16 -7
- package/lib/labs/VDateInput/VDateInput.js.map +1 -1
- package/lib/labs/VIconBtn/VIconBtn.css +22 -0
- package/lib/labs/VIconBtn/VIconBtn.scss +32 -0
- package/lib/labs/VMaskInput/VMaskInput.js +1 -1
- package/lib/labs/VMaskInput/VMaskInput.js.map +1 -1
- package/lib/labs/rules/rules.js +1 -1
- package/lib/labs/rules/rules.js.map +1 -1
- package/lib/util/helpers.js +4 -2
- package/lib/util/helpers.js.map +1 -1
- package/package.json +1 -1
package/dist/vuetify-labs.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Vuetify v3.10.
|
|
2
|
+
* Vuetify v3.10.7
|
|
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
|
-
|
|
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
|
-
|
|
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
|
};
|
|
@@ -9807,7 +9825,9 @@ const VListItem = genericComponent()({
|
|
|
9807
9825
|
handleActiveLink();
|
|
9808
9826
|
});
|
|
9809
9827
|
onBeforeMount(() => {
|
|
9810
|
-
if (link.isActive?.value)
|
|
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
|
|
12064
|
-
overlay.value?.
|
|
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
|
-
|
|
12070
|
-
|
|
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,
|
|
@@ -12747,10 +12782,11 @@ const VTextField = genericComponent()({
|
|
|
12747
12782
|
props: {
|
|
12748
12783
|
class: fieldClass,
|
|
12749
12784
|
...slotProps
|
|
12750
|
-
}
|
|
12785
|
+
},
|
|
12786
|
+
controlRef
|
|
12751
12787
|
} = _ref3;
|
|
12752
12788
|
const inputNode = withDirectives(createElementVNode("input", mergeProps({
|
|
12753
|
-
"ref": inputRef,
|
|
12789
|
+
"ref": val => inputRef.value = controlRef.value = val,
|
|
12754
12790
|
"value": model.value,
|
|
12755
12791
|
"onInput": onInput,
|
|
12756
12792
|
"autofocus": props.autofocus,
|
|
@@ -12906,7 +12942,7 @@ function useVirtual(props, items) {
|
|
|
12906
12942
|
const start = performance.now();
|
|
12907
12943
|
offsets[0] = 0;
|
|
12908
12944
|
const length = items.value.length;
|
|
12909
|
-
for (let i = 1; i <= length
|
|
12945
|
+
for (let i = 1; i <= length; i++) {
|
|
12910
12946
|
offsets[i] = (offsets[i - 1] || 0) + getSize(i - 1);
|
|
12911
12947
|
}
|
|
12912
12948
|
updateTime.value = Math.max(updateTime.value, performance.now() - start);
|
|
@@ -12941,7 +12977,7 @@ function useVirtual(props, items) {
|
|
|
12941
12977
|
}
|
|
12942
12978
|
}
|
|
12943
12979
|
function calculateOffset(index) {
|
|
12944
|
-
index = clamp(index, 0, items.value.length
|
|
12980
|
+
index = clamp(index, 0, items.value.length);
|
|
12945
12981
|
const whole = Math.floor(index);
|
|
12946
12982
|
const fraction = index % 1;
|
|
12947
12983
|
const next = whole + 1;
|
|
@@ -13674,7 +13710,8 @@ const VSelect = genericComponent()({
|
|
|
13674
13710
|
"key": item.value,
|
|
13675
13711
|
"modelValue": isSelected,
|
|
13676
13712
|
"ripple": false,
|
|
13677
|
-
"tabindex": "-1"
|
|
13713
|
+
"tabindex": "-1",
|
|
13714
|
+
"onClick": event => event.preventDefault()
|
|
13678
13715
|
}, null) : undefined, camelizedProps.prependAvatar && createVNode(VAvatar, {
|
|
13679
13716
|
"image": camelizedProps.prependAvatar
|
|
13680
13717
|
}, null), camelizedProps.prependIcon && createVNode(VIcon, {
|
|
@@ -13946,10 +13983,7 @@ const makeVAutocompleteProps = propsFactory({
|
|
|
13946
13983
|
...omit(makeVTextFieldProps({
|
|
13947
13984
|
modelValue: null,
|
|
13948
13985
|
role: 'combobox'
|
|
13949
|
-
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
13950
|
-
...makeTransitionProps({
|
|
13951
|
-
transition: false
|
|
13952
|
-
})
|
|
13986
|
+
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
13953
13987
|
}, 'VAutocomplete');
|
|
13954
13988
|
const VAutocomplete = genericComponent()({
|
|
13955
13989
|
name: 'VAutocomplete',
|
|
@@ -13974,6 +14008,7 @@ const VAutocomplete = genericComponent()({
|
|
|
13974
14008
|
const vMenuRef = ref();
|
|
13975
14009
|
const vVirtualScrollRef = ref();
|
|
13976
14010
|
const selectionIndex = shallowRef(-1);
|
|
14011
|
+
const _searchLock = shallowRef(null);
|
|
13977
14012
|
const {
|
|
13978
14013
|
items,
|
|
13979
14014
|
transformIn,
|
|
@@ -13995,9 +14030,9 @@ const VAutocomplete = genericComponent()({
|
|
|
13995
14030
|
const {
|
|
13996
14031
|
filteredItems,
|
|
13997
14032
|
getMatches
|
|
13998
|
-
} = useFilter(props, items, () => isPristine.value ? '' : search.value);
|
|
14033
|
+
} = useFilter(props, items, () => _searchLock.value ?? (isPristine.value ? '' : search.value));
|
|
13999
14034
|
const displayItems = computed(() => {
|
|
14000
|
-
if (props.hideSelected) {
|
|
14035
|
+
if (props.hideSelected && _searchLock.value === null) {
|
|
14001
14036
|
return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
|
|
14002
14037
|
}
|
|
14003
14038
|
return filteredItems.value;
|
|
@@ -14128,6 +14163,7 @@ const VAutocomplete = genericComponent()({
|
|
|
14128
14163
|
isPristine.value = true;
|
|
14129
14164
|
vTextFieldRef.value?.focus();
|
|
14130
14165
|
}
|
|
14166
|
+
_searchLock.value = null;
|
|
14131
14167
|
}
|
|
14132
14168
|
function onFocusin(e) {
|
|
14133
14169
|
isFocused.value = true;
|
|
@@ -14163,6 +14199,7 @@ const VAutocomplete = genericComponent()({
|
|
|
14163
14199
|
} else {
|
|
14164
14200
|
const add = set !== false;
|
|
14165
14201
|
model.value = add ? [item] : [];
|
|
14202
|
+
_searchLock.value = isPristine.value ? '' : search.value ?? '';
|
|
14166
14203
|
search.value = add && !hasSelectionSlot.value ? item.title : '';
|
|
14167
14204
|
|
|
14168
14205
|
// watch for search watcher to trigger
|
|
@@ -14182,6 +14219,9 @@ const VAutocomplete = genericComponent()({
|
|
|
14182
14219
|
} else {
|
|
14183
14220
|
if (!props.multiple && search.value == null) model.value = [];
|
|
14184
14221
|
menu.value = false;
|
|
14222
|
+
if (!isPristine.value && search.value) {
|
|
14223
|
+
_searchLock.value = search.value;
|
|
14224
|
+
}
|
|
14185
14225
|
search.value = '';
|
|
14186
14226
|
selectionIndex.value = -1;
|
|
14187
14227
|
}
|
|
@@ -14191,13 +14231,14 @@ const VAutocomplete = genericComponent()({
|
|
|
14191
14231
|
if (val) menu.value = true;
|
|
14192
14232
|
isPristine.value = !val;
|
|
14193
14233
|
});
|
|
14194
|
-
watch(menu,
|
|
14195
|
-
if (!props.hideSelected &&
|
|
14234
|
+
watch(menu, val => {
|
|
14235
|
+
if (!props.hideSelected && val && model.value.length && isPristine.value) {
|
|
14196
14236
|
const index = displayItems.value.findIndex(item => model.value.some(s => item.value === s.value));
|
|
14197
14237
|
IN_BROWSER && window.requestAnimationFrame(() => {
|
|
14198
14238
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
|
14199
14239
|
});
|
|
14200
14240
|
}
|
|
14241
|
+
if (val) _searchLock.value = null;
|
|
14201
14242
|
});
|
|
14202
14243
|
watch(items, (newVal, oldVal) => {
|
|
14203
14244
|
if (menu.value) return;
|
|
@@ -14248,7 +14289,6 @@ const VAutocomplete = genericComponent()({
|
|
|
14248
14289
|
"maxHeight": 310,
|
|
14249
14290
|
"openOnClick": false,
|
|
14250
14291
|
"closeOnContentClick": false,
|
|
14251
|
-
"transition": props.transition,
|
|
14252
14292
|
"onAfterEnter": onAfterEnter,
|
|
14253
14293
|
"onAfterLeave": onAfterLeave
|
|
14254
14294
|
}, props.menuProps), {
|
|
@@ -14318,7 +14358,8 @@ const VAutocomplete = genericComponent()({
|
|
|
14318
14358
|
"key": item.value,
|
|
14319
14359
|
"modelValue": isSelected,
|
|
14320
14360
|
"ripple": false,
|
|
14321
|
-
"tabindex": "-1"
|
|
14361
|
+
"tabindex": "-1",
|
|
14362
|
+
"onClick": event => event.preventDefault()
|
|
14322
14363
|
}, null) : undefined, item.props.prependAvatar && createVNode(VAvatar, {
|
|
14323
14364
|
"image": item.props.prependAvatar
|
|
14324
14365
|
}, null), item.props.prependIcon && createVNode(VIcon, {
|
|
@@ -15676,7 +15717,19 @@ const VWindow = genericComponent()({
|
|
|
15676
15717
|
const activeIndex = computed(() => {
|
|
15677
15718
|
return group.items.value.findIndex(item => group.selected.value.includes(item.id));
|
|
15678
15719
|
});
|
|
15720
|
+
|
|
15721
|
+
// Fix for https://github.com/vuetifyjs/vuetify/issues/18447
|
|
15679
15722
|
watch(activeIndex, (newVal, oldVal) => {
|
|
15723
|
+
let scrollableParent;
|
|
15724
|
+
const savedScrollPosition = {
|
|
15725
|
+
left: 0,
|
|
15726
|
+
top: 0
|
|
15727
|
+
};
|
|
15728
|
+
if (IN_BROWSER && oldVal >= 0) {
|
|
15729
|
+
scrollableParent = getScrollParent(rootRef.value);
|
|
15730
|
+
savedScrollPosition.left = scrollableParent?.scrollLeft;
|
|
15731
|
+
savedScrollPosition.top = scrollableParent?.scrollTop;
|
|
15732
|
+
}
|
|
15680
15733
|
const itemsLength = group.items.value.length;
|
|
15681
15734
|
const lastIndex = itemsLength - 1;
|
|
15682
15735
|
if (itemsLength <= 2) {
|
|
@@ -15688,7 +15741,30 @@ const VWindow = genericComponent()({
|
|
|
15688
15741
|
} else {
|
|
15689
15742
|
isReversed.value = newVal < oldVal;
|
|
15690
15743
|
}
|
|
15691
|
-
|
|
15744
|
+
nextTick(() => {
|
|
15745
|
+
if (!IN_BROWSER || !scrollableParent) return;
|
|
15746
|
+
const currentScrollY = scrollableParent.scrollTop;
|
|
15747
|
+
if (currentScrollY !== savedScrollPosition.top) {
|
|
15748
|
+
scrollableParent.scrollTo({
|
|
15749
|
+
...savedScrollPosition,
|
|
15750
|
+
behavior: 'instant'
|
|
15751
|
+
});
|
|
15752
|
+
}
|
|
15753
|
+
requestAnimationFrame(() => {
|
|
15754
|
+
if (!scrollableParent) return;
|
|
15755
|
+
const rafScrollY = scrollableParent.scrollTop;
|
|
15756
|
+
if (rafScrollY !== savedScrollPosition.top) {
|
|
15757
|
+
scrollableParent.scrollTo({
|
|
15758
|
+
...savedScrollPosition,
|
|
15759
|
+
behavior: 'instant'
|
|
15760
|
+
});
|
|
15761
|
+
}
|
|
15762
|
+
});
|
|
15763
|
+
});
|
|
15764
|
+
}, {
|
|
15765
|
+
flush: 'sync'
|
|
15766
|
+
}); // Run synchronously before DOM updates
|
|
15767
|
+
|
|
15692
15768
|
provide(VWindowSymbol, {
|
|
15693
15769
|
transition,
|
|
15694
15770
|
isReversed,
|
|
@@ -18593,7 +18669,7 @@ function createDate(options, locale) {
|
|
|
18593
18669
|
};
|
|
18594
18670
|
}
|
|
18595
18671
|
function createDateRange(adapter, start, stop) {
|
|
18596
|
-
const diff = adapter.getDiff(adapter.
|
|
18672
|
+
const diff = adapter.getDiff(new Date(`${adapter.toISO(stop ?? start)}T00:00:00Z`), new Date(`${adapter.toISO(start)}T00:00:00Z`), 'days');
|
|
18597
18673
|
const datesInRange = [start];
|
|
18598
18674
|
for (let i = 1; i < diff; i++) {
|
|
18599
18675
|
const nextDate = adapter.addDays(start, i);
|
|
@@ -19276,10 +19352,7 @@ const makeVComboboxProps = propsFactory({
|
|
|
19276
19352
|
...omit(makeVTextFieldProps({
|
|
19277
19353
|
modelValue: null,
|
|
19278
19354
|
role: 'combobox'
|
|
19279
|
-
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
19280
|
-
...makeTransitionProps({
|
|
19281
|
-
transition: false
|
|
19282
|
-
})
|
|
19355
|
+
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
19283
19356
|
}, 'VCombobox');
|
|
19284
19357
|
const VCombobox = genericComponent()({
|
|
19285
19358
|
name: 'VCombobox',
|
|
@@ -19323,13 +19396,16 @@ const VCombobox = genericComponent()({
|
|
|
19323
19396
|
const hasChips = computed(() => !!(props.chips || slots.chip));
|
|
19324
19397
|
const hasSelectionSlot = computed(() => hasChips.value || !!slots.selection);
|
|
19325
19398
|
const _search = shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
|
|
19399
|
+
const _searchLock = shallowRef(null);
|
|
19326
19400
|
const search = computed({
|
|
19327
19401
|
get: () => {
|
|
19328
19402
|
return _search.value;
|
|
19329
19403
|
},
|
|
19330
19404
|
set: async val => {
|
|
19331
19405
|
_search.value = val ?? '';
|
|
19332
|
-
if (!props.multiple && !hasSelectionSlot.value) {
|
|
19406
|
+
if (val === null || val === '' && !props.multiple && !hasSelectionSlot.value) {
|
|
19407
|
+
model.value = [];
|
|
19408
|
+
} else if (!props.multiple && !hasSelectionSlot.value) {
|
|
19333
19409
|
model.value = [transformItem$3(props, val)];
|
|
19334
19410
|
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
|
19335
19411
|
}
|
|
@@ -19357,9 +19433,9 @@ const VCombobox = genericComponent()({
|
|
|
19357
19433
|
const {
|
|
19358
19434
|
filteredItems,
|
|
19359
19435
|
getMatches
|
|
19360
|
-
} = useFilter(props, items, () => props.alwaysFilter || !isPristine.value ? search.value : '');
|
|
19436
|
+
} = useFilter(props, items, () => _searchLock.value ?? (props.alwaysFilter || !isPristine.value ? search.value : ''));
|
|
19361
19437
|
const displayItems = computed(() => {
|
|
19362
|
-
if (props.hideSelected) {
|
|
19438
|
+
if (props.hideSelected && _searchLock.value === null) {
|
|
19363
19439
|
return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
|
|
19364
19440
|
}
|
|
19365
19441
|
return filteredItems.value;
|
|
@@ -19440,22 +19516,19 @@ const VCombobox = genericComponent()({
|
|
|
19440
19516
|
if (['Escape'].includes(e.key)) {
|
|
19441
19517
|
menu.value = false;
|
|
19442
19518
|
}
|
|
19443
|
-
if (['Enter', '
|
|
19444
|
-
|
|
19445
|
-
|
|
19446
|
-
|
|
19447
|
-
|
|
19448
|
-
|
|
19449
|
-
|
|
19450
|
-
select(filteredItems.value[0]);
|
|
19451
|
-
}
|
|
19452
|
-
isPristine.value = true;
|
|
19519
|
+
if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key) && !model.value.some(_ref2 => {
|
|
19520
|
+
let {
|
|
19521
|
+
value
|
|
19522
|
+
} = _ref2;
|
|
19523
|
+
return value === displayItems.value[0].value;
|
|
19524
|
+
})) {
|
|
19525
|
+
select(filteredItems.value[0]);
|
|
19453
19526
|
}
|
|
19454
19527
|
if (e.key === 'ArrowDown' && highlightFirst.value) {
|
|
19455
19528
|
listRef.value?.focus('next');
|
|
19456
19529
|
}
|
|
19457
19530
|
if (e.key === 'Enter' && search.value) {
|
|
19458
|
-
select(transformItem$3(props, search.value));
|
|
19531
|
+
select(transformItem$3(props, search.value), true, true);
|
|
19459
19532
|
if (hasSelectionSlot.value) _search.value = '';
|
|
19460
19533
|
}
|
|
19461
19534
|
if (['Backspace', 'Delete'].includes(e.key)) {
|
|
@@ -19500,13 +19573,15 @@ const VCombobox = genericComponent()({
|
|
|
19500
19573
|
}
|
|
19501
19574
|
function onAfterLeave() {
|
|
19502
19575
|
if (isFocused.value) {
|
|
19503
|
-
isPristine.value = true;
|
|
19504
19576
|
vTextFieldRef.value?.focus();
|
|
19505
19577
|
}
|
|
19578
|
+
isPristine.value = true;
|
|
19579
|
+
_searchLock.value = null;
|
|
19506
19580
|
}
|
|
19507
19581
|
/** @param set - null means toggle */
|
|
19508
19582
|
function select(item) {
|
|
19509
19583
|
let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
19584
|
+
let keepMenu = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
19510
19585
|
if (!item || item.props.disabled) return;
|
|
19511
19586
|
if (props.multiple) {
|
|
19512
19587
|
const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
|
|
@@ -19524,11 +19599,14 @@ const VCombobox = genericComponent()({
|
|
|
19524
19599
|
} else {
|
|
19525
19600
|
const add = set !== false;
|
|
19526
19601
|
model.value = add ? [item] : [];
|
|
19602
|
+
if ((!isPristine.value || props.alwaysFilter) && _search.value) {
|
|
19603
|
+
_searchLock.value = _search.value;
|
|
19604
|
+
}
|
|
19527
19605
|
_search.value = add && !hasSelectionSlot.value ? item.title : '';
|
|
19528
19606
|
|
|
19529
19607
|
// watch for search watcher to trigger
|
|
19530
19608
|
nextTick(() => {
|
|
19531
|
-
menu.value =
|
|
19609
|
+
menu.value = keepMenu;
|
|
19532
19610
|
isPristine.value = true;
|
|
19533
19611
|
});
|
|
19534
19612
|
}
|
|
@@ -19542,9 +19620,6 @@ const VCombobox = genericComponent()({
|
|
|
19542
19620
|
function onFocusout(e) {
|
|
19543
19621
|
listHasFocus.value = false;
|
|
19544
19622
|
}
|
|
19545
|
-
function onUpdateModelValue(v) {
|
|
19546
|
-
if (v == null || v === '' && !props.multiple && !hasSelectionSlot.value) model.value = [];
|
|
19547
|
-
}
|
|
19548
19623
|
watch(isFocused, (val, oldVal) => {
|
|
19549
19624
|
if (val || val === oldVal) return;
|
|
19550
19625
|
selectionIndex.value = -1;
|
|
@@ -19567,13 +19642,14 @@ const VCombobox = genericComponent()({
|
|
|
19567
19642
|
}
|
|
19568
19643
|
}
|
|
19569
19644
|
});
|
|
19570
|
-
watch(menu,
|
|
19571
|
-
if (!props.hideSelected &&
|
|
19645
|
+
watch(menu, val => {
|
|
19646
|
+
if (!props.hideSelected && val && model.value.length && isPristine.value) {
|
|
19572
19647
|
const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
|
|
19573
19648
|
IN_BROWSER && window.requestAnimationFrame(() => {
|
|
19574
19649
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
|
19575
19650
|
});
|
|
19576
19651
|
}
|
|
19652
|
+
if (val) _searchLock.value = null;
|
|
19577
19653
|
});
|
|
19578
19654
|
watch(items, (newVal, oldVal) => {
|
|
19579
19655
|
if (menu.value) return;
|
|
@@ -19589,7 +19665,7 @@ const VCombobox = genericComponent()({
|
|
|
19589
19665
|
"ref": vTextFieldRef
|
|
19590
19666
|
}, textFieldProps, {
|
|
19591
19667
|
"modelValue": search.value,
|
|
19592
|
-
"onUpdate:modelValue":
|
|
19668
|
+
"onUpdate:modelValue": $event => search.value = $event,
|
|
19593
19669
|
"focused": isFocused.value,
|
|
19594
19670
|
"onUpdate:focused": $event => isFocused.value = $event,
|
|
19595
19671
|
"validationValue": model.externalValue,
|
|
@@ -19624,7 +19700,6 @@ const VCombobox = genericComponent()({
|
|
|
19624
19700
|
"maxHeight": 310,
|
|
19625
19701
|
"openOnClick": false,
|
|
19626
19702
|
"closeOnContentClick": false,
|
|
19627
|
-
"transition": props.transition,
|
|
19628
19703
|
"onAfterEnter": onAfterEnter,
|
|
19629
19704
|
"onAfterLeave": onAfterLeave
|
|
19630
19705
|
}, props.menuProps), {
|
|
@@ -19694,7 +19769,8 @@ const VCombobox = genericComponent()({
|
|
|
19694
19769
|
"key": item.value,
|
|
19695
19770
|
"modelValue": isSelected,
|
|
19696
19771
|
"ripple": false,
|
|
19697
|
-
"tabindex": "-1"
|
|
19772
|
+
"tabindex": "-1",
|
|
19773
|
+
"onClick": event => event.preventDefault()
|
|
19698
19774
|
}, null) : undefined, item.props.prependAvatar && createVNode(VAvatar, {
|
|
19699
19775
|
"image": item.props.prependAvatar
|
|
19700
19776
|
}, null), item.props.prependIcon && createVNode(VIcon, {
|
|
@@ -24104,7 +24180,7 @@ const VDatePicker = genericComponent()({
|
|
|
24104
24180
|
function isAllowedInRange(start, end) {
|
|
24105
24181
|
const allowedDates = props.allowedDates;
|
|
24106
24182
|
if (typeof allowedDates !== 'function') return true;
|
|
24107
|
-
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');
|
|
24108
24184
|
for (let i = 0; i < days; i++) {
|
|
24109
24185
|
if (allowedDates(adapter.addDays(start, i))) return true;
|
|
24110
24186
|
}
|
|
@@ -25127,10 +25203,11 @@ const VFileInput = genericComponent()({
|
|
|
25127
25203
|
props: {
|
|
25128
25204
|
class: fieldClass,
|
|
25129
25205
|
...slotProps
|
|
25130
|
-
}
|
|
25206
|
+
},
|
|
25207
|
+
controlRef
|
|
25131
25208
|
} = _ref4;
|
|
25132
25209
|
return createElementVNode(Fragment, null, [createElementVNode("input", mergeProps({
|
|
25133
|
-
"ref": inputRef,
|
|
25210
|
+
"ref": val => inputRef.value = controlRef.value = val,
|
|
25134
25211
|
"type": "file",
|
|
25135
25212
|
"accept": inputAccept,
|
|
25136
25213
|
"readonly": isReadonly.value,
|
|
@@ -26607,7 +26684,7 @@ const VNumberInput = genericComponent()({
|
|
|
26607
26684
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
|
26608
26685
|
const _inputText = shallowRef(null);
|
|
26609
26686
|
watchEffect(() => {
|
|
26610
|
-
if (isFocused.value && !controlsDisabled.value && Number(_inputText.value) === model.value) ; else if (model.value == null) {
|
|
26687
|
+
if (isFocused.value && !controlsDisabled.value && Number(_inputText.value?.replace(decimalSeparator.value, '.')) === model.value) ; else if (model.value == null) {
|
|
26611
26688
|
_inputText.value = null;
|
|
26612
26689
|
} else if (!isNaN(model.value)) {
|
|
26613
26690
|
_inputText.value = correctPrecision(model.value);
|
|
@@ -26702,6 +26779,7 @@ const VNumberInput = genericComponent()({
|
|
|
26702
26779
|
if (!new RegExp(`^-?\\d*${escapeForRegex(decimalSeparator.value)}?\\d*$`).test(potentialNewInputVal)) {
|
|
26703
26780
|
e.preventDefault();
|
|
26704
26781
|
inputElement.value = potentialNewNumber;
|
|
26782
|
+
nextTick(() => inputText.value = potentialNewNumber);
|
|
26705
26783
|
}
|
|
26706
26784
|
if (props.precision == null) return;
|
|
26707
26785
|
|
|
@@ -26709,13 +26787,15 @@ const VNumberInput = genericComponent()({
|
|
|
26709
26787
|
if (potentialNewInputVal.split(decimalSeparator.value)[1]?.length > props.precision) {
|
|
26710
26788
|
e.preventDefault();
|
|
26711
26789
|
inputElement.value = potentialNewNumber;
|
|
26790
|
+
nextTick(() => inputText.value = potentialNewNumber);
|
|
26712
26791
|
const cursorPosition = (selectionStart ?? 0) + e.data.length;
|
|
26713
26792
|
inputElement.setSelectionRange(cursorPosition, cursorPosition);
|
|
26714
26793
|
}
|
|
26715
26794
|
// Ignore decimal separator when precision = 0
|
|
26716
|
-
if (props.precision === 0 && potentialNewInputVal.
|
|
26795
|
+
if (props.precision === 0 && potentialNewInputVal.endsWith(decimalSeparator.value)) {
|
|
26717
26796
|
e.preventDefault();
|
|
26718
26797
|
inputElement.value = potentialNewNumber;
|
|
26798
|
+
nextTick(() => inputText.value = potentialNewNumber);
|
|
26719
26799
|
}
|
|
26720
26800
|
}
|
|
26721
26801
|
async function onKeydown(e) {
|
|
@@ -27911,12 +27991,12 @@ const VSkeletonLoader = genericComponent()({
|
|
|
27911
27991
|
ariaLabel: t(props.loadingText),
|
|
27912
27992
|
role: 'alert'
|
|
27913
27993
|
};
|
|
27914
|
-
return
|
|
27994
|
+
return isLoading ? createElementVNode("div", mergeProps({
|
|
27915
27995
|
"class": ['v-skeleton-loader', {
|
|
27916
27996
|
'v-skeleton-loader--boilerplate': props.boilerplate
|
|
27917
27997
|
}, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
|
|
27918
27998
|
"style": [backgroundColorStyles.value, dimensionStyles.value]
|
|
27919
|
-
}, loadingProps, attrs), [items.value]) : slots.default?.()]);
|
|
27999
|
+
}, loadingProps, attrs), [items.value]) : createElementVNode(Fragment, null, [slots.default?.()]);
|
|
27920
28000
|
});
|
|
27921
28001
|
return {};
|
|
27922
28002
|
}
|
|
@@ -29781,6 +29861,10 @@ const VTextarea = genericComponent()({
|
|
|
29781
29861
|
const vFieldRef = ref();
|
|
29782
29862
|
const controlHeight = shallowRef('');
|
|
29783
29863
|
const textareaRef = ref();
|
|
29864
|
+
const scrollbarWidth = ref(0);
|
|
29865
|
+
const {
|
|
29866
|
+
platform
|
|
29867
|
+
} = useDisplay();
|
|
29784
29868
|
const autocomplete = useAutocomplete(props);
|
|
29785
29869
|
const isActive = computed(() => props.persistentPlaceholder || isFocused.value || props.active);
|
|
29786
29870
|
function onFocus() {
|
|
@@ -29825,6 +29909,18 @@ const VTextarea = genericComponent()({
|
|
|
29825
29909
|
if (!props.autoGrow) rows.value = Number(props.rows);
|
|
29826
29910
|
});
|
|
29827
29911
|
function calculateInputHeight() {
|
|
29912
|
+
nextTick(() => {
|
|
29913
|
+
if (!textareaRef.value) return;
|
|
29914
|
+
if (platform.value.firefox) {
|
|
29915
|
+
scrollbarWidth.value = 12;
|
|
29916
|
+
return;
|
|
29917
|
+
}
|
|
29918
|
+
const {
|
|
29919
|
+
offsetWidth,
|
|
29920
|
+
clientWidth
|
|
29921
|
+
} = textareaRef.value;
|
|
29922
|
+
scrollbarWidth.value = Math.max(0, offsetWidth - clientWidth);
|
|
29923
|
+
});
|
|
29828
29924
|
if (!props.autoGrow) return;
|
|
29829
29925
|
nextTick(() => {
|
|
29830
29926
|
if (!sizerRef.value || !vFieldRef.value) return;
|
|
@@ -29885,7 +29981,9 @@ const VTextarea = genericComponent()({
|
|
|
29885
29981
|
'v-textarea--no-resize': props.noResize || props.autoGrow,
|
|
29886
29982
|
'v-input--plain-underlined': isPlainOrUnderlined.value
|
|
29887
29983
|
}, props.class],
|
|
29888
|
-
"style":
|
|
29984
|
+
"style": [{
|
|
29985
|
+
'--v-textarea-scroll-bar-width': convertToUnit(scrollbarWidth.value)
|
|
29986
|
+
}, props.style]
|
|
29889
29987
|
}, rootAttrs, inputProps, {
|
|
29890
29988
|
"centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
|
|
29891
29989
|
"focused": isFocused.value
|
|
@@ -29925,12 +30023,13 @@ const VTextarea = genericComponent()({
|
|
|
29925
30023
|
props: {
|
|
29926
30024
|
class: fieldClass,
|
|
29927
30025
|
...slotProps
|
|
29928
|
-
}
|
|
30026
|
+
},
|
|
30027
|
+
controlRef
|
|
29929
30028
|
} = _ref3;
|
|
29930
30029
|
return createElementVNode(Fragment, null, [props.prefix && createElementVNode("span", {
|
|
29931
30030
|
"class": "v-text-field__prefix"
|
|
29932
30031
|
}, [props.prefix]), withDirectives(createElementVNode("textarea", mergeProps({
|
|
29933
|
-
"ref": textareaRef,
|
|
30032
|
+
"ref": val => textareaRef.value = controlRef.value = val,
|
|
29934
30033
|
"class": fieldClass,
|
|
29935
30034
|
"value": model.value,
|
|
29936
30035
|
"onInput": onInput,
|
|
@@ -34313,7 +34412,7 @@ const makeVColorInputProps = propsFactory({
|
|
|
34313
34412
|
...makeFocusProps(),
|
|
34314
34413
|
...makeVConfirmEditProps(),
|
|
34315
34414
|
...makeVTextFieldProps(),
|
|
34316
|
-
...omit(makeVColorPickerProps(), ['
|
|
34415
|
+
...omit(makeVColorPickerProps(), ['location', 'height', 'minHeight', 'maxHeight'])
|
|
34317
34416
|
}, 'VColorInput');
|
|
34318
34417
|
const VColorInput = genericComponent()({
|
|
34319
34418
|
name: 'VColorInput',
|
|
@@ -34352,7 +34451,7 @@ const VColorInput = genericComponent()({
|
|
|
34352
34451
|
}
|
|
34353
34452
|
useRender(() => {
|
|
34354
34453
|
const confirmEditProps = VConfirmEdit.filterProps(props);
|
|
34355
|
-
const colorPickerProps = VColorPicker.filterProps(omit(props, ['active', 'color']));
|
|
34454
|
+
const colorPickerProps = VColorPicker.filterProps(omit(props, ['active', 'bgColor', 'color', 'rounded', 'maxWidth', 'minWidth', 'width']));
|
|
34356
34455
|
const textFieldProps = VTextField.filterProps(props);
|
|
34357
34456
|
const slotWithPip = props.hidePip ? undefined : {
|
|
34358
34457
|
[props.pipLocation]: arg => createElementVNode(Fragment, null, [createVNode(VAvatar, {
|
|
@@ -34570,7 +34669,7 @@ const makeVDateInputProps = propsFactory({
|
|
|
34570
34669
|
...omit(makeVDatePickerProps({
|
|
34571
34670
|
hideHeader: true,
|
|
34572
34671
|
showAdjacentMonths: true
|
|
34573
|
-
}), ['active', 'location', 'rounded'])
|
|
34672
|
+
}), ['active', 'location', 'rounded', 'height', 'minHeight', 'maxHeight'])
|
|
34574
34673
|
}, 'VDateInput');
|
|
34575
34674
|
const VDateInput = genericComponent()({
|
|
34576
34675
|
name: 'VDateInput',
|
|
@@ -34601,6 +34700,15 @@ const VDateInput = genericComponent()({
|
|
|
34601
34700
|
const {
|
|
34602
34701
|
mobile
|
|
34603
34702
|
} = useDisplay(props);
|
|
34703
|
+
const clamp = date => {
|
|
34704
|
+
if (props.max && adapter.isAfter(date, props.max)) {
|
|
34705
|
+
return props.max;
|
|
34706
|
+
}
|
|
34707
|
+
if (props.min && adapter.isBefore(date, props.min)) {
|
|
34708
|
+
return props.min;
|
|
34709
|
+
}
|
|
34710
|
+
return date;
|
|
34711
|
+
};
|
|
34604
34712
|
const emptyModelValue = () => props.multiple ? [] : null;
|
|
34605
34713
|
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);
|
|
34606
34714
|
const menu = useProxiedModel(props, 'menu');
|
|
@@ -34651,7 +34759,7 @@ const VDateInput = genericComponent()({
|
|
|
34651
34759
|
if (!menu.value || !isFocused.value) {
|
|
34652
34760
|
menu.value = true;
|
|
34653
34761
|
}
|
|
34654
|
-
if (props.updateOn.includes('enter')) {
|
|
34762
|
+
if (props.updateOn.includes('enter') && !props.readonly) {
|
|
34655
34763
|
onUserInput(e.target);
|
|
34656
34764
|
}
|
|
34657
34765
|
}
|
|
@@ -34678,7 +34786,7 @@ const VDateInput = genericComponent()({
|
|
|
34678
34786
|
model.value = emptyModelValue();
|
|
34679
34787
|
}
|
|
34680
34788
|
function onBlur(e) {
|
|
34681
|
-
if (props.updateOn.includes('blur')) {
|
|
34789
|
+
if (props.updateOn.includes('blur') && !props.readonly) {
|
|
34682
34790
|
onUserInput(e.target);
|
|
34683
34791
|
}
|
|
34684
34792
|
|
|
@@ -34696,23 +34804,23 @@ const VDateInput = genericComponent()({
|
|
|
34696
34804
|
model.value = emptyModelValue();
|
|
34697
34805
|
} else if (!props.multiple) {
|
|
34698
34806
|
if (isValid(value)) {
|
|
34699
|
-
model.value = parseDate(value);
|
|
34807
|
+
model.value = clamp(parseDate(value));
|
|
34700
34808
|
}
|
|
34701
34809
|
} else {
|
|
34702
34810
|
const parts = value.trim().split(/\D+-\D+|[^\d\-/.]+/);
|
|
34703
34811
|
if (parts.every(isValid)) {
|
|
34704
34812
|
if (props.multiple === 'range') {
|
|
34705
|
-
const [start, stop] = parts.map(parseDate).toSorted((a, b) => adapter.isAfter(a, b) ? 1 : -1);
|
|
34813
|
+
const [start, stop] = parts.map(parseDate).map(clamp).toSorted((a, b) => adapter.isAfter(a, b) ? 1 : -1);
|
|
34706
34814
|
model.value = createDateRange(adapter, start, stop);
|
|
34707
34815
|
} else {
|
|
34708
|
-
model.value = parts.map(parseDate);
|
|
34816
|
+
model.value = parts.map(parseDate).map(clamp);
|
|
34709
34817
|
}
|
|
34710
34818
|
}
|
|
34711
34819
|
}
|
|
34712
34820
|
}
|
|
34713
34821
|
useRender(() => {
|
|
34714
34822
|
const confirmEditProps = VConfirmEdit.filterProps(props);
|
|
34715
|
-
const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']));
|
|
34823
|
+
const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'bgColor', 'color', 'location', 'rounded', 'maxWidth', 'minWidth', 'width']));
|
|
34716
34824
|
const datePickerSlots = pick(slots, ['title', 'header', 'day', 'month', 'year']);
|
|
34717
34825
|
const textFieldProps = VTextField.filterProps(omit(props, ['placeholder']));
|
|
34718
34826
|
return createVNode(VTextField, mergeProps({
|
|
@@ -35157,7 +35265,7 @@ const VMaskInput = genericComponent()({
|
|
|
35157
35265
|
// Always display masked value in input when mask is applied
|
|
35158
35266
|
val => props.mask ? mask.mask(mask.unmask(val)) : val, val => {
|
|
35159
35267
|
if (props.mask) {
|
|
35160
|
-
const valueWithoutDelimiters = removeMaskDelimiters(val);
|
|
35268
|
+
const valueWithoutDelimiters = val ? removeMaskDelimiters(val) : '';
|
|
35161
35269
|
|
|
35162
35270
|
// E.g. mask is #-# and the input value is '2-23'
|
|
35163
35271
|
// model-value should be enforced to '2-2'
|
|
@@ -37903,7 +38011,7 @@ function createVuetify$1() {
|
|
|
37903
38011
|
};
|
|
37904
38012
|
});
|
|
37905
38013
|
}
|
|
37906
|
-
const version$1 = "3.10.
|
|
38014
|
+
const version$1 = "3.10.7";
|
|
37907
38015
|
createVuetify$1.version = version$1;
|
|
37908
38016
|
|
|
37909
38017
|
// Vue's inject() can only be used in setup
|
|
@@ -38201,7 +38309,7 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
38201
38309
|
|
|
38202
38310
|
/* eslint-disable local-rules/sort-imports */
|
|
38203
38311
|
|
|
38204
|
-
const version = "3.10.
|
|
38312
|
+
const version = "3.10.7";
|
|
38205
38313
|
|
|
38206
38314
|
/* eslint-disable local-rules/sort-imports */
|
|
38207
38315
|
|