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.
- package/README.md +0 -6
- package/dist/json/attributes.json +1910 -1922
- package/dist/json/importMap-labs.json +20 -20
- package/dist/json/importMap.json +182 -182
- package/dist/json/tags.json +6 -9
- package/dist/json/web-types.json +3674 -3697
- package/dist/vuetify-labs.cjs +211 -107
- package/dist/vuetify-labs.css +5703 -5642
- package/dist/vuetify-labs.d.ts +168 -175
- package/dist/vuetify-labs.esm.js +211 -107
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +211 -107
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +192 -97
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +5916 -5877
- package/dist/vuetify.d.ts +168 -140
- package/dist/vuetify.esm.js +192 -97
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +192 -97
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +124 -114
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +0 -61
- package/lib/components/VAutocomplete/VAutocomplete.js +13 -11
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VBadge/VBadge.css +10 -0
- package/lib/components/VBadge/VBadge.sass +9 -0
- 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 +26 -28
- 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/VDataTable/VDataTableGroupHeaderRow.d.ts +29 -0
- package/lib/components/VDataTable/VDataTableGroupHeaderRow.js +4 -1
- package/lib/components/VDataTable/VDataTableGroupHeaderRow.js.map +1 -1
- package/lib/components/VDataTable/VDataTableHeaders.d.ts +29 -0
- package/lib/components/VDataTable/VDataTableHeaders.js +3 -0
- package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
- package/lib/components/VDataTable/VDataTableRow.d.ts +29 -0
- package/lib/components/VDataTable/VDataTableRow.js +3 -0
- package/lib/components/VDataTable/VDataTableRow.js.map +1 -1
- package/lib/components/VDataTable/VDataTableRows.d.ts +29 -0
- package/lib/components/VDataTable/VDataTableRows.js +4 -3
- package/lib/components/VDataTable/VDataTableRows.js.map +1 -1
- package/lib/components/VDatePicker/VDatePicker.js +1 -1
- package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
- package/lib/components/VDivider/VDivider.css +1 -0
- package/lib/components/VDivider/VDivider.sass +1 -0
- package/lib/components/VKbd/_variables.scss +3 -1
- package/lib/components/VList/VListItem.css +14 -12
- package/lib/components/VList/VListItem.js +5 -3
- 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/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/VTable/VTable.js +20 -32
- package/lib/components/VTable/VTable.js.map +1 -1
- package/lib/components/VTabs/VTabs.d.ts +25 -0
- package/lib/components/VTextField/VTextField.js +0 -3
- package/lib/components/VTextField/VTextField.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.css +2 -2
- package/lib/components/VTextarea/VTextarea.js +20 -1
- package/lib/components/VTextarea/VTextarea.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.sass +4 -2
- package/lib/components/VWindow/VWindow.js +43 -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 +66 -66
- 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 +4 -4
- 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.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
|
-
|
|
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
|
};
|
|
@@ -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)
|
|
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,
|
|
@@ -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
|
|
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
|
|
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 &&
|
|
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.
|
|
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', '
|
|
19444
|
-
|
|
19445
|
-
|
|
19446
|
-
|
|
19447
|
-
|
|
19448
|
-
|
|
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 =
|
|
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 &&
|
|
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":
|
|
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
|
-
|
|
22270
|
-
|
|
22271
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
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":
|
|
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(), ['
|
|
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.
|
|
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.
|
|
38310
|
+
const version = "3.10.6";
|
|
38207
38311
|
|
|
38208
38312
|
/* eslint-disable local-rules/sort-imports */
|
|
38209
38313
|
|