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.cjs
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
|
*/
|
|
@@ -401,8 +401,10 @@
|
|
|
401
401
|
}
|
|
402
402
|
function focusableChildren(el) {
|
|
403
403
|
let filterByTabIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
404
|
-
const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', '[tabindex]'].map(s => `${s}${filterByTabIndex ? ':not([tabindex="-1"])' : ''}:not([disabled])`).join(', ');
|
|
405
|
-
return [...el.querySelectorAll(targets)]
|
|
404
|
+
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(', ');
|
|
405
|
+
return [...el.querySelectorAll(targets)].filter(x => !x.closest('[inert]')) // does not have inert parent
|
|
406
|
+
.filter(x => !!x.offsetParent || x.getClientRects().length > 0) // is rendered
|
|
407
|
+
.filter(x => !x.parentElement?.closest('details:not([open])') || x.tagName === 'SUMMARY' && x.parentElement?.tagName === 'DETAILS');
|
|
406
408
|
}
|
|
407
409
|
function getNextElement(elements, location, condition) {
|
|
408
410
|
let _el;
|
|
@@ -5023,7 +5025,7 @@
|
|
|
5023
5025
|
function unregister() {
|
|
5024
5026
|
group?.unregister(id);
|
|
5025
5027
|
}
|
|
5026
|
-
|
|
5028
|
+
register();
|
|
5027
5029
|
vue.onBeforeUnmount(() => unregister());
|
|
5028
5030
|
const isSelected = vue.computed(() => {
|
|
5029
5031
|
return group.isSelected(id);
|
|
@@ -8343,6 +8345,10 @@
|
|
|
8343
8345
|
const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
|
|
8344
8346
|
const makeVSlideGroupProps = propsFactory({
|
|
8345
8347
|
centerActive: Boolean,
|
|
8348
|
+
scrollToActive: {
|
|
8349
|
+
type: Boolean,
|
|
8350
|
+
default: true
|
|
8351
|
+
},
|
|
8346
8352
|
contentClass: null,
|
|
8347
8353
|
direction: {
|
|
8348
8354
|
type: String,
|
|
@@ -8431,7 +8437,7 @@
|
|
|
8431
8437
|
contentSize.value = contentRect.value[sizeProperty];
|
|
8432
8438
|
isOverflowing.value = containerSize.value + 1 < contentSize.value;
|
|
8433
8439
|
}
|
|
8434
|
-
if (firstSelectedIndex.value >= 0 && contentRef.el) {
|
|
8440
|
+
if (props.scrollToActive && firstSelectedIndex.value >= 0 && contentRef.el) {
|
|
8435
8441
|
// TODO: Is this too naive? Should we store element references in group composable?
|
|
8436
8442
|
const selectedElement = contentRef.el.children[lastSelectedIndex.value];
|
|
8437
8443
|
scrollToChildren(selectedElement, props.centerActive);
|
|
@@ -8700,7 +8706,9 @@
|
|
|
8700
8706
|
type: Function,
|
|
8701
8707
|
default: deepEqual
|
|
8702
8708
|
},
|
|
8703
|
-
...makeVSlideGroupProps(
|
|
8709
|
+
...makeVSlideGroupProps({
|
|
8710
|
+
scrollToActive: false
|
|
8711
|
+
}),
|
|
8704
8712
|
...makeComponentProps(),
|
|
8705
8713
|
...makeGroupProps({
|
|
8706
8714
|
selectedClass: 'v-chip--selected'
|
|
@@ -9799,7 +9807,9 @@
|
|
|
9799
9807
|
};
|
|
9800
9808
|
vue.onBeforeMount(() => {
|
|
9801
9809
|
if (!parent.isGroupActivator) {
|
|
9802
|
-
|
|
9810
|
+
vue.nextTick(() => {
|
|
9811
|
+
parent.root.register(computedId.value, parent.id.value, vue.toValue(isDisabled), isGroup);
|
|
9812
|
+
});
|
|
9803
9813
|
}
|
|
9804
9814
|
});
|
|
9805
9815
|
vue.onBeforeUnmount(() => {
|
|
@@ -9807,6 +9817,14 @@
|
|
|
9807
9817
|
parent.root.unregister(computedId.value);
|
|
9808
9818
|
}
|
|
9809
9819
|
});
|
|
9820
|
+
vue.watch(computedId, (val, oldVal) => {
|
|
9821
|
+
if (!parent.isGroupActivator) {
|
|
9822
|
+
parent.root.unregister(oldVal);
|
|
9823
|
+
vue.nextTick(() => {
|
|
9824
|
+
parent.root.register(val, parent.id.value, vue.toValue(isDisabled), isGroup);
|
|
9825
|
+
});
|
|
9826
|
+
}
|
|
9827
|
+
});
|
|
9810
9828
|
isGroup && vue.provide(VNestedSymbol, item);
|
|
9811
9829
|
return item;
|
|
9812
9830
|
};
|
|
@@ -10038,7 +10056,7 @@
|
|
|
10038
10056
|
const isLink = vue.toRef(() => props.link !== false && link.isLink.value);
|
|
10039
10057
|
const isSelectable = vue.computed(() => !!list && (root.selectable.value || root.activatable.value || props.value != null));
|
|
10040
10058
|
const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || isSelectable.value));
|
|
10041
|
-
const role = vue.computed(() => list ? isSelectable.value ? 'option' : 'listitem' : undefined);
|
|
10059
|
+
const role = vue.computed(() => list ? isLink.value ? 'link' : isSelectable.value ? 'option' : 'listitem' : undefined);
|
|
10042
10060
|
const ariaSelected = vue.computed(() => {
|
|
10043
10061
|
if (!isSelectable.value) return undefined;
|
|
10044
10062
|
return root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value;
|
|
@@ -10057,7 +10075,9 @@
|
|
|
10057
10075
|
handleActiveLink();
|
|
10058
10076
|
});
|
|
10059
10077
|
vue.onBeforeMount(() => {
|
|
10060
|
-
if (link.isActive?.value)
|
|
10078
|
+
if (link.isActive?.value) {
|
|
10079
|
+
vue.nextTick(() => handleActiveLink());
|
|
10080
|
+
}
|
|
10061
10081
|
});
|
|
10062
10082
|
function handleActiveLink() {
|
|
10063
10083
|
if (parent.value != null) {
|
|
@@ -12305,25 +12325,41 @@
|
|
|
12305
12325
|
document.removeEventListener('focusin', onFocusIn);
|
|
12306
12326
|
});
|
|
12307
12327
|
vue.onDeactivated(() => isActive.value = false);
|
|
12328
|
+
let focusTrapSuppressed = false;
|
|
12329
|
+
let focusTrapSuppressionTimeout = -1;
|
|
12330
|
+
async function onPointerdown() {
|
|
12331
|
+
focusTrapSuppressed = true;
|
|
12332
|
+
focusTrapSuppressionTimeout = window.setTimeout(() => {
|
|
12333
|
+
focusTrapSuppressed = false;
|
|
12334
|
+
}, 100);
|
|
12335
|
+
}
|
|
12308
12336
|
async function onFocusIn(e) {
|
|
12309
12337
|
const before = e.relatedTarget;
|
|
12310
12338
|
const after = e.target;
|
|
12311
12339
|
await vue.nextTick();
|
|
12312
12340
|
if (isActive.value && before !== after && overlay.value?.contentEl &&
|
|
12313
|
-
// We're the
|
|
12314
|
-
overlay.value?.
|
|
12341
|
+
// We're the menu without open submenus or overlays
|
|
12342
|
+
overlay.value?.localTop &&
|
|
12315
12343
|
// It isn't the document or the menu body
|
|
12316
12344
|
![document, overlay.value.contentEl].includes(after) &&
|
|
12317
12345
|
// It isn't inside the menu body
|
|
12318
12346
|
!overlay.value.contentEl.contains(after)) {
|
|
12319
|
-
|
|
12320
|
-
|
|
12347
|
+
if (focusTrapSuppressed) {
|
|
12348
|
+
if (!props.openOnHover || !overlay.value.activatorEl?.contains(after)) {
|
|
12349
|
+
isActive.value = false;
|
|
12350
|
+
}
|
|
12351
|
+
} else {
|
|
12352
|
+
const focusable = focusableChildren(overlay.value.contentEl);
|
|
12353
|
+
focusable[0]?.focus();
|
|
12354
|
+
document.removeEventListener('pointerdown', onPointerdown);
|
|
12355
|
+
}
|
|
12321
12356
|
}
|
|
12322
12357
|
}
|
|
12323
12358
|
vue.watch(isActive, val => {
|
|
12324
12359
|
if (val) {
|
|
12325
12360
|
parent?.register();
|
|
12326
12361
|
if (IN_BROWSER && !props.disableInitialFocus) {
|
|
12362
|
+
document.addEventListener('pointerdown', onPointerdown);
|
|
12327
12363
|
document.addEventListener('focusin', onFocusIn, {
|
|
12328
12364
|
once: true
|
|
12329
12365
|
});
|
|
@@ -12331,6 +12367,8 @@
|
|
|
12331
12367
|
} else {
|
|
12332
12368
|
parent?.unregister();
|
|
12333
12369
|
if (IN_BROWSER) {
|
|
12370
|
+
clearTimeout(focusTrapSuppressionTimeout);
|
|
12371
|
+
document.removeEventListener('pointerdown', onPointerdown);
|
|
12334
12372
|
document.removeEventListener('focusin', onFocusIn);
|
|
12335
12373
|
}
|
|
12336
12374
|
}
|
|
@@ -12924,7 +12962,6 @@
|
|
|
12924
12962
|
e.stopPropagation();
|
|
12925
12963
|
onFocus();
|
|
12926
12964
|
vue.nextTick(() => {
|
|
12927
|
-
model.value = null;
|
|
12928
12965
|
reset();
|
|
12929
12966
|
callEvent(props['onClick:clear'], e);
|
|
12930
12967
|
});
|
|
@@ -12979,8 +13016,6 @@
|
|
|
12979
13016
|
"onMousedown": onControlMousedown,
|
|
12980
13017
|
"onClick": onControlClick,
|
|
12981
13018
|
"onClick:clear": e => onClear(e, reset),
|
|
12982
|
-
"onClick:prependInner": props['onClick:prependInner'],
|
|
12983
|
-
"onClick:appendInner": props['onClick:appendInner'],
|
|
12984
13019
|
"role": props.role
|
|
12985
13020
|
}, omit(fieldProps, ['onClick:clear']), {
|
|
12986
13021
|
"id": id.value,
|
|
@@ -13156,7 +13191,7 @@
|
|
|
13156
13191
|
const start = performance.now();
|
|
13157
13192
|
offsets[0] = 0;
|
|
13158
13193
|
const length = items.value.length;
|
|
13159
|
-
for (let i = 1; i <= length
|
|
13194
|
+
for (let i = 1; i <= length; i++) {
|
|
13160
13195
|
offsets[i] = (offsets[i - 1] || 0) + getSize(i - 1);
|
|
13161
13196
|
}
|
|
13162
13197
|
updateTime.value = Math.max(updateTime.value, performance.now() - start);
|
|
@@ -13191,7 +13226,7 @@
|
|
|
13191
13226
|
}
|
|
13192
13227
|
}
|
|
13193
13228
|
function calculateOffset(index) {
|
|
13194
|
-
index = clamp(index, 0, items.value.length
|
|
13229
|
+
index = clamp(index, 0, items.value.length);
|
|
13195
13230
|
const whole = Math.floor(index);
|
|
13196
13231
|
const fraction = index % 1;
|
|
13197
13232
|
const next = whole + 1;
|
|
@@ -14196,10 +14231,7 @@
|
|
|
14196
14231
|
...omit(makeVTextFieldProps({
|
|
14197
14232
|
modelValue: null,
|
|
14198
14233
|
role: 'combobox'
|
|
14199
|
-
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
14200
|
-
...makeTransitionProps({
|
|
14201
|
-
transition: false
|
|
14202
|
-
})
|
|
14234
|
+
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
14203
14235
|
}, 'VAutocomplete');
|
|
14204
14236
|
const VAutocomplete = genericComponent()({
|
|
14205
14237
|
name: 'VAutocomplete',
|
|
@@ -14224,6 +14256,7 @@
|
|
|
14224
14256
|
const vMenuRef = vue.ref();
|
|
14225
14257
|
const vVirtualScrollRef = vue.ref();
|
|
14226
14258
|
const selectionIndex = vue.shallowRef(-1);
|
|
14259
|
+
const _searchLock = vue.shallowRef(null);
|
|
14227
14260
|
const {
|
|
14228
14261
|
items,
|
|
14229
14262
|
transformIn,
|
|
@@ -14245,9 +14278,9 @@
|
|
|
14245
14278
|
const {
|
|
14246
14279
|
filteredItems,
|
|
14247
14280
|
getMatches
|
|
14248
|
-
} = useFilter(props, items, () => isPristine.value ? '' : search.value);
|
|
14281
|
+
} = useFilter(props, items, () => _searchLock.value ?? (isPristine.value ? '' : search.value));
|
|
14249
14282
|
const displayItems = vue.computed(() => {
|
|
14250
|
-
if (props.hideSelected) {
|
|
14283
|
+
if (props.hideSelected && _searchLock.value === null) {
|
|
14251
14284
|
return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
|
|
14252
14285
|
}
|
|
14253
14286
|
return filteredItems.value;
|
|
@@ -14378,6 +14411,7 @@
|
|
|
14378
14411
|
isPristine.value = true;
|
|
14379
14412
|
vTextFieldRef.value?.focus();
|
|
14380
14413
|
}
|
|
14414
|
+
_searchLock.value = null;
|
|
14381
14415
|
}
|
|
14382
14416
|
function onFocusin(e) {
|
|
14383
14417
|
isFocused.value = true;
|
|
@@ -14413,6 +14447,7 @@
|
|
|
14413
14447
|
} else {
|
|
14414
14448
|
const add = set !== false;
|
|
14415
14449
|
model.value = add ? [item] : [];
|
|
14450
|
+
_searchLock.value = isPristine.value ? '' : search.value ?? '';
|
|
14416
14451
|
search.value = add && !hasSelectionSlot.value ? item.title : '';
|
|
14417
14452
|
|
|
14418
14453
|
// watch for search watcher to trigger
|
|
@@ -14432,6 +14467,9 @@
|
|
|
14432
14467
|
} else {
|
|
14433
14468
|
if (!props.multiple && search.value == null) model.value = [];
|
|
14434
14469
|
menu.value = false;
|
|
14470
|
+
if (!isPristine.value && search.value) {
|
|
14471
|
+
_searchLock.value = search.value;
|
|
14472
|
+
}
|
|
14435
14473
|
search.value = '';
|
|
14436
14474
|
selectionIndex.value = -1;
|
|
14437
14475
|
}
|
|
@@ -14441,13 +14479,14 @@
|
|
|
14441
14479
|
if (val) menu.value = true;
|
|
14442
14480
|
isPristine.value = !val;
|
|
14443
14481
|
});
|
|
14444
|
-
vue.watch(menu,
|
|
14445
|
-
if (!props.hideSelected &&
|
|
14482
|
+
vue.watch(menu, val => {
|
|
14483
|
+
if (!props.hideSelected && val && model.value.length && isPristine.value) {
|
|
14446
14484
|
const index = displayItems.value.findIndex(item => model.value.some(s => item.value === s.value));
|
|
14447
14485
|
IN_BROWSER && window.requestAnimationFrame(() => {
|
|
14448
14486
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
|
14449
14487
|
});
|
|
14450
14488
|
}
|
|
14489
|
+
if (val) _searchLock.value = null;
|
|
14451
14490
|
});
|
|
14452
14491
|
vue.watch(items, (newVal, oldVal) => {
|
|
14453
14492
|
if (menu.value) return;
|
|
@@ -14498,7 +14537,6 @@
|
|
|
14498
14537
|
"maxHeight": 310,
|
|
14499
14538
|
"openOnClick": false,
|
|
14500
14539
|
"closeOnContentClick": false,
|
|
14501
|
-
"transition": props.transition,
|
|
14502
14540
|
"onAfterEnter": onAfterEnter,
|
|
14503
14541
|
"onAfterLeave": onAfterLeave
|
|
14504
14542
|
}, props.menuProps), {
|
|
@@ -15926,7 +15964,21 @@
|
|
|
15926
15964
|
const activeIndex = vue.computed(() => {
|
|
15927
15965
|
return group.items.value.findIndex(item => group.selected.value.includes(item.id));
|
|
15928
15966
|
});
|
|
15967
|
+
|
|
15968
|
+
// Fix for https://github.com/vuetifyjs/vuetify/issues/18447
|
|
15929
15969
|
vue.watch(activeIndex, (newVal, oldVal) => {
|
|
15970
|
+
let scrollableParent;
|
|
15971
|
+
const savedScrollPosition = {
|
|
15972
|
+
x: 0,
|
|
15973
|
+
y: 0
|
|
15974
|
+
};
|
|
15975
|
+
if (IN_BROWSER && oldVal >= 0) {
|
|
15976
|
+
scrollableParent = getScrollParent(rootRef.value);
|
|
15977
|
+
|
|
15978
|
+
// Save current scroll position
|
|
15979
|
+
savedScrollPosition.x = scrollableParent.scrollLeft;
|
|
15980
|
+
savedScrollPosition.y = scrollableParent.scrollTop;
|
|
15981
|
+
}
|
|
15930
15982
|
const itemsLength = group.items.value.length;
|
|
15931
15983
|
const lastIndex = itemsLength - 1;
|
|
15932
15984
|
if (itemsLength <= 2) {
|
|
@@ -15938,7 +15990,32 @@
|
|
|
15938
15990
|
} else {
|
|
15939
15991
|
isReversed.value = newVal < oldVal;
|
|
15940
15992
|
}
|
|
15941
|
-
|
|
15993
|
+
vue.nextTick(() => {
|
|
15994
|
+
if (!IN_BROWSER || !scrollableParent) return;
|
|
15995
|
+
const currentScrollY = scrollableParent.scrollTop;
|
|
15996
|
+
if (currentScrollY !== savedScrollPosition.y) {
|
|
15997
|
+
scrollableParent.scrollTo({
|
|
15998
|
+
left: savedScrollPosition.x,
|
|
15999
|
+
top: savedScrollPosition.y,
|
|
16000
|
+
behavior: 'instant'
|
|
16001
|
+
});
|
|
16002
|
+
}
|
|
16003
|
+
requestAnimationFrame(() => {
|
|
16004
|
+
if (!scrollableParent) return;
|
|
16005
|
+
const rafScrollY = scrollableParent.scrollTop;
|
|
16006
|
+
if (rafScrollY !== savedScrollPosition.y) {
|
|
16007
|
+
scrollableParent.scrollTo({
|
|
16008
|
+
left: savedScrollPosition.x,
|
|
16009
|
+
top: savedScrollPosition.y,
|
|
16010
|
+
behavior: 'instant'
|
|
16011
|
+
});
|
|
16012
|
+
}
|
|
16013
|
+
});
|
|
16014
|
+
});
|
|
16015
|
+
}, {
|
|
16016
|
+
flush: 'sync'
|
|
16017
|
+
}); // Run synchronously before DOM updates
|
|
16018
|
+
|
|
15942
16019
|
vue.provide(VWindowSymbol, {
|
|
15943
16020
|
transition,
|
|
15944
16021
|
isReversed,
|
|
@@ -18843,7 +18920,7 @@
|
|
|
18843
18920
|
};
|
|
18844
18921
|
}
|
|
18845
18922
|
function createDateRange(adapter, start, stop) {
|
|
18846
|
-
const diff = adapter.getDiff(adapter.
|
|
18923
|
+
const diff = adapter.getDiff(new Date(`${adapter.toISO(stop ?? start)}T00:00:00Z`), new Date(`${adapter.toISO(start)}T00:00:00Z`), 'days');
|
|
18847
18924
|
const datesInRange = [start];
|
|
18848
18925
|
for (let i = 1; i < diff; i++) {
|
|
18849
18926
|
const nextDate = adapter.addDays(start, i);
|
|
@@ -19517,10 +19594,7 @@
|
|
|
19517
19594
|
...omit(makeVTextFieldProps({
|
|
19518
19595
|
modelValue: null,
|
|
19519
19596
|
role: 'combobox'
|
|
19520
|
-
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
19521
|
-
...makeTransitionProps({
|
|
19522
|
-
transition: false
|
|
19523
|
-
})
|
|
19597
|
+
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
19524
19598
|
}, 'VCombobox');
|
|
19525
19599
|
const VCombobox = genericComponent()({
|
|
19526
19600
|
name: 'VCombobox',
|
|
@@ -19564,13 +19638,16 @@
|
|
|
19564
19638
|
const hasChips = vue.computed(() => !!(props.chips || slots.chip));
|
|
19565
19639
|
const hasSelectionSlot = vue.computed(() => hasChips.value || !!slots.selection);
|
|
19566
19640
|
const _search = vue.shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
|
|
19641
|
+
const _searchLock = vue.shallowRef(null);
|
|
19567
19642
|
const search = vue.computed({
|
|
19568
19643
|
get: () => {
|
|
19569
19644
|
return _search.value;
|
|
19570
19645
|
},
|
|
19571
19646
|
set: async val => {
|
|
19572
19647
|
_search.value = val ?? '';
|
|
19573
|
-
if (!props.multiple && !hasSelectionSlot.value) {
|
|
19648
|
+
if (val === null || val === '' && !props.multiple && !hasSelectionSlot.value) {
|
|
19649
|
+
model.value = [];
|
|
19650
|
+
} else if (!props.multiple && !hasSelectionSlot.value) {
|
|
19574
19651
|
model.value = [transformItem$3(props, val)];
|
|
19575
19652
|
vue.nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
|
19576
19653
|
}
|
|
@@ -19598,9 +19675,9 @@
|
|
|
19598
19675
|
const {
|
|
19599
19676
|
filteredItems,
|
|
19600
19677
|
getMatches
|
|
19601
|
-
} = useFilter(props, items, () => props.alwaysFilter || !isPristine.value ? search.value : '');
|
|
19678
|
+
} = useFilter(props, items, () => _searchLock.value ?? (props.alwaysFilter || !isPristine.value ? search.value : ''));
|
|
19602
19679
|
const displayItems = vue.computed(() => {
|
|
19603
|
-
if (props.hideSelected) {
|
|
19680
|
+
if (props.hideSelected && _searchLock.value === null) {
|
|
19604
19681
|
return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
|
|
19605
19682
|
}
|
|
19606
19683
|
return filteredItems.value;
|
|
@@ -19681,22 +19758,19 @@
|
|
|
19681
19758
|
if (['Escape'].includes(e.key)) {
|
|
19682
19759
|
menu.value = false;
|
|
19683
19760
|
}
|
|
19684
|
-
if (['Enter', '
|
|
19685
|
-
|
|
19686
|
-
|
|
19687
|
-
|
|
19688
|
-
|
|
19689
|
-
|
|
19690
|
-
|
|
19691
|
-
select(filteredItems.value[0]);
|
|
19692
|
-
}
|
|
19693
|
-
isPristine.value = true;
|
|
19761
|
+
if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key) && !model.value.some(_ref2 => {
|
|
19762
|
+
let {
|
|
19763
|
+
value
|
|
19764
|
+
} = _ref2;
|
|
19765
|
+
return value === displayItems.value[0].value;
|
|
19766
|
+
})) {
|
|
19767
|
+
select(filteredItems.value[0]);
|
|
19694
19768
|
}
|
|
19695
19769
|
if (e.key === 'ArrowDown' && highlightFirst.value) {
|
|
19696
19770
|
listRef.value?.focus('next');
|
|
19697
19771
|
}
|
|
19698
19772
|
if (e.key === 'Enter' && search.value) {
|
|
19699
|
-
select(transformItem$3(props, search.value));
|
|
19773
|
+
select(transformItem$3(props, search.value), true, true);
|
|
19700
19774
|
if (hasSelectionSlot.value) _search.value = '';
|
|
19701
19775
|
}
|
|
19702
19776
|
if (['Backspace', 'Delete'].includes(e.key)) {
|
|
@@ -19744,10 +19818,12 @@
|
|
|
19744
19818
|
isPristine.value = true;
|
|
19745
19819
|
vTextFieldRef.value?.focus();
|
|
19746
19820
|
}
|
|
19821
|
+
_searchLock.value = null;
|
|
19747
19822
|
}
|
|
19748
19823
|
/** @param set - null means toggle */
|
|
19749
19824
|
function select(item) {
|
|
19750
19825
|
let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
19826
|
+
let keepMenu = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
19751
19827
|
if (!item || item.props.disabled) return;
|
|
19752
19828
|
if (props.multiple) {
|
|
19753
19829
|
const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
|
|
@@ -19765,11 +19841,14 @@
|
|
|
19765
19841
|
} else {
|
|
19766
19842
|
const add = set !== false;
|
|
19767
19843
|
model.value = add ? [item] : [];
|
|
19844
|
+
if ((!isPristine.value || props.alwaysFilter) && _search.value) {
|
|
19845
|
+
_searchLock.value = _search.value;
|
|
19846
|
+
}
|
|
19768
19847
|
_search.value = add && !hasSelectionSlot.value ? item.title : '';
|
|
19769
19848
|
|
|
19770
19849
|
// watch for search watcher to trigger
|
|
19771
19850
|
vue.nextTick(() => {
|
|
19772
|
-
menu.value =
|
|
19851
|
+
menu.value = keepMenu;
|
|
19773
19852
|
isPristine.value = true;
|
|
19774
19853
|
});
|
|
19775
19854
|
}
|
|
@@ -19783,9 +19862,6 @@
|
|
|
19783
19862
|
function onFocusout(e) {
|
|
19784
19863
|
listHasFocus.value = false;
|
|
19785
19864
|
}
|
|
19786
|
-
function onUpdateModelValue(v) {
|
|
19787
|
-
if (v == null || v === '' && !props.multiple && !hasSelectionSlot.value) model.value = [];
|
|
19788
|
-
}
|
|
19789
19865
|
vue.watch(isFocused, (val, oldVal) => {
|
|
19790
19866
|
if (val || val === oldVal) return;
|
|
19791
19867
|
selectionIndex.value = -1;
|
|
@@ -19808,13 +19884,14 @@
|
|
|
19808
19884
|
}
|
|
19809
19885
|
}
|
|
19810
19886
|
});
|
|
19811
|
-
vue.watch(menu,
|
|
19812
|
-
if (!props.hideSelected &&
|
|
19887
|
+
vue.watch(menu, val => {
|
|
19888
|
+
if (!props.hideSelected && val && model.value.length && isPristine.value) {
|
|
19813
19889
|
const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
|
|
19814
19890
|
IN_BROWSER && window.requestAnimationFrame(() => {
|
|
19815
19891
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
|
19816
19892
|
});
|
|
19817
19893
|
}
|
|
19894
|
+
if (val) _searchLock.value = null;
|
|
19818
19895
|
});
|
|
19819
19896
|
vue.watch(items, (newVal, oldVal) => {
|
|
19820
19897
|
if (menu.value) return;
|
|
@@ -19830,7 +19907,7 @@
|
|
|
19830
19907
|
"ref": vTextFieldRef
|
|
19831
19908
|
}, textFieldProps, {
|
|
19832
19909
|
"modelValue": search.value,
|
|
19833
|
-
"onUpdate:modelValue":
|
|
19910
|
+
"onUpdate:modelValue": $event => search.value = $event,
|
|
19834
19911
|
"focused": isFocused.value,
|
|
19835
19912
|
"onUpdate:focused": $event => isFocused.value = $event,
|
|
19836
19913
|
"validationValue": model.externalValue,
|
|
@@ -19865,7 +19942,6 @@
|
|
|
19865
19942
|
"maxHeight": 310,
|
|
19866
19943
|
"openOnClick": false,
|
|
19867
19944
|
"closeOnContentClick": false,
|
|
19868
|
-
"transition": props.transition,
|
|
19869
19945
|
"onAfterEnter": onAfterEnter,
|
|
19870
19946
|
"onAfterLeave": onAfterLeave
|
|
19871
19947
|
}, props.menuProps), {
|
|
@@ -21879,6 +21955,7 @@
|
|
|
21879
21955
|
},
|
|
21880
21956
|
/** @deprecated */
|
|
21881
21957
|
sticky: Boolean,
|
|
21958
|
+
...makeDensityProps(),
|
|
21882
21959
|
...makeDisplayProps(),
|
|
21883
21960
|
...makeLoaderProps()
|
|
21884
21961
|
}, 'VDataTableHeaders');
|
|
@@ -22003,6 +22080,7 @@
|
|
|
22003
22080
|
if (isEmpty) return '';
|
|
22004
22081
|
if (column.key === 'data-table-select') {
|
|
22005
22082
|
return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll.value && vue.createVNode(VCheckboxBtn, {
|
|
22083
|
+
"density": props.density,
|
|
22006
22084
|
"modelValue": allSelected.value,
|
|
22007
22085
|
"indeterminate": someSelected.value && !allSelected.value,
|
|
22008
22086
|
"onUpdate:modelValue": selectAll
|
|
@@ -22103,7 +22181,8 @@
|
|
|
22103
22181
|
groupExpandIcon: {
|
|
22104
22182
|
type: IconValue,
|
|
22105
22183
|
default: '$tableGroupExpand'
|
|
22106
|
-
}
|
|
22184
|
+
},
|
|
22185
|
+
...makeDensityProps()
|
|
22107
22186
|
}, 'VDataTableGroupHeaderRow');
|
|
22108
22187
|
const VDataTableGroupHeaderRow = genericComponent()({
|
|
22109
22188
|
name: 'VDataTableGroupHeaderRow',
|
|
@@ -22171,6 +22250,7 @@
|
|
|
22171
22250
|
"noPadding": true
|
|
22172
22251
|
}, {
|
|
22173
22252
|
default: () => [vue.createVNode(VCheckboxBtn, {
|
|
22253
|
+
"density": props.density,
|
|
22174
22254
|
"modelValue": modelValue,
|
|
22175
22255
|
"indeterminate": indeterminate,
|
|
22176
22256
|
"onUpdate:modelValue": selectGroup
|
|
@@ -22199,6 +22279,7 @@
|
|
|
22199
22279
|
onClick: EventProp(),
|
|
22200
22280
|
onContextmenu: EventProp(),
|
|
22201
22281
|
onDblclick: EventProp(),
|
|
22282
|
+
...makeDensityProps(),
|
|
22202
22283
|
...makeDisplayProps()
|
|
22203
22284
|
}, 'VDataTableRow');
|
|
22204
22285
|
const VDataTableRow = genericComponent()({
|
|
@@ -22307,6 +22388,7 @@
|
|
|
22307
22388
|
}
|
|
22308
22389
|
}) ?? vue.createVNode(VCheckboxBtn, {
|
|
22309
22390
|
"disabled": !item.selectable,
|
|
22391
|
+
"density": props.density,
|
|
22310
22392
|
"modelValue": isSelected([item]),
|
|
22311
22393
|
"onClick": vue.withModifiers(event => toggleSelect(item, props.index, event), ['stop'])
|
|
22312
22394
|
}, null);
|
|
@@ -22359,8 +22441,8 @@
|
|
|
22359
22441
|
},
|
|
22360
22442
|
rowProps: [Object, Function],
|
|
22361
22443
|
cellProps: [Object, Function],
|
|
22362
|
-
...pick(makeVDataTableRowProps(), ['collapseIcon', 'expandIcon']),
|
|
22363
|
-
...pick(makeVDataTableGroupHeaderRowProps(), ['groupCollapseIcon', 'groupExpandIcon']),
|
|
22444
|
+
...pick(makeVDataTableRowProps(), ['collapseIcon', 'expandIcon', 'density']),
|
|
22445
|
+
...pick(makeVDataTableGroupHeaderRowProps(), ['groupCollapseIcon', 'groupExpandIcon', 'density']),
|
|
22364
22446
|
...makeDisplayProps()
|
|
22365
22447
|
}, 'VDataTableRows');
|
|
22366
22448
|
const VDataTableRows = genericComponent()({
|
|
@@ -22395,7 +22477,7 @@
|
|
|
22395
22477
|
mobile
|
|
22396
22478
|
} = useDisplay(props);
|
|
22397
22479
|
useRender(() => {
|
|
22398
|
-
const groupHeaderRowProps = pick(props, ['groupCollapseIcon', 'groupExpandIcon']);
|
|
22480
|
+
const groupHeaderRowProps = pick(props, ['groupCollapseIcon', 'groupExpandIcon', 'density']);
|
|
22399
22481
|
if (props.loading && (!props.items.length || slots.loading)) {
|
|
22400
22482
|
return vue.createElementVNode("tr", {
|
|
22401
22483
|
"class": "v-data-table-rows-loading",
|
|
@@ -22461,6 +22543,7 @@
|
|
|
22461
22543
|
cellProps: props.cellProps,
|
|
22462
22544
|
collapseIcon: props.collapseIcon,
|
|
22463
22545
|
expandIcon: props.expandIcon,
|
|
22546
|
+
density: props.density,
|
|
22464
22547
|
mobile: mobile.value
|
|
22465
22548
|
}, getPrefixedEventHandlers(attrs, ':row', () => slotProps), typeof props.rowProps === 'function' ? props.rowProps({
|
|
22466
22549
|
item: slotProps.item,
|
|
@@ -22477,6 +22560,8 @@
|
|
|
22477
22560
|
}
|
|
22478
22561
|
});
|
|
22479
22562
|
|
|
22563
|
+
// Types
|
|
22564
|
+
|
|
22480
22565
|
const makeVTableProps = propsFactory({
|
|
22481
22566
|
fixedHeader: Boolean,
|
|
22482
22567
|
fixedFooter: Boolean,
|
|
@@ -22506,37 +22591,26 @@
|
|
|
22506
22591
|
const {
|
|
22507
22592
|
densityClasses
|
|
22508
22593
|
} = useDensity(props);
|
|
22509
|
-
useRender(() => {
|
|
22510
|
-
|
|
22511
|
-
|
|
22512
|
-
|
|
22594
|
+
useRender(() => vue.createVNode(props.tag, {
|
|
22595
|
+
"class": vue.normalizeClass(['v-table', {
|
|
22596
|
+
'v-table--fixed-height': !!props.height,
|
|
22597
|
+
'v-table--fixed-header': props.fixedHeader,
|
|
22598
|
+
'v-table--fixed-footer': props.fixedFooter,
|
|
22599
|
+
'v-table--has-top': !!slots.top,
|
|
22600
|
+
'v-table--has-bottom': !!slots.bottom,
|
|
22601
|
+
'v-table--hover': props.hover,
|
|
22602
|
+
'v-table--striped-even': props.striped === 'even',
|
|
22603
|
+
'v-table--striped-odd': props.striped === 'odd'
|
|
22604
|
+
}, themeClasses.value, densityClasses.value, props.class]),
|
|
22605
|
+
"style": vue.normalizeStyle(props.style)
|
|
22606
|
+
}, {
|
|
22607
|
+
default: () => [slots.top?.(), slots.default ? vue.createElementVNode("div", {
|
|
22608
|
+
"class": "v-table__wrapper",
|
|
22609
|
+
"style": {
|
|
22610
|
+
height: convertToUnit(props.height)
|
|
22513
22611
|
}
|
|
22514
|
-
}
|
|
22515
|
-
|
|
22516
|
-
"class": vue.normalizeClass(['v-table', {
|
|
22517
|
-
'v-table--fixed-height': !!props.height,
|
|
22518
|
-
'v-table--fixed-header': props.fixedHeader,
|
|
22519
|
-
'v-table--fixed-footer': props.fixedFooter,
|
|
22520
|
-
'v-table--has-top': !!slots.top,
|
|
22521
|
-
'v-table--has-bottom': !!slots.bottom,
|
|
22522
|
-
'v-table--hover': props.hover,
|
|
22523
|
-
'v-table--striped-even': props.striped === 'even',
|
|
22524
|
-
'v-table--striped-odd': props.striped === 'odd'
|
|
22525
|
-
}, themeClasses.value, densityClasses.value, props.class]),
|
|
22526
|
-
"style": vue.normalizeStyle(props.style)
|
|
22527
|
-
}, {
|
|
22528
|
-
default: () => [slots.top?.(), vue.createVNode(VDefaultsProvider, {
|
|
22529
|
-
"defaults": tableContentDefaults
|
|
22530
|
-
}, {
|
|
22531
|
-
default: () => [slots.default ? vue.createElementVNode("div", {
|
|
22532
|
-
"class": "v-table__wrapper",
|
|
22533
|
-
"style": {
|
|
22534
|
-
height: convertToUnit(props.height)
|
|
22535
|
-
}
|
|
22536
|
-
}, [vue.createElementVNode("table", null, [slots.default()])]) : slots.wrapper?.()]
|
|
22537
|
-
}), slots.bottom?.()]
|
|
22538
|
-
});
|
|
22539
|
-
});
|
|
22612
|
+
}, [vue.createElementVNode("table", null, [slots.default()])]) : slots.wrapper?.(), slots.bottom?.()]
|
|
22613
|
+
}));
|
|
22540
22614
|
return {};
|
|
22541
22615
|
}
|
|
22542
22616
|
});
|
|
@@ -24347,7 +24421,7 @@
|
|
|
24347
24421
|
function isAllowedInRange(start, end) {
|
|
24348
24422
|
const allowedDates = props.allowedDates;
|
|
24349
24423
|
if (typeof allowedDates !== 'function') return true;
|
|
24350
|
-
const days = adapter.getDiff(end, start, 'days');
|
|
24424
|
+
const days = 1 + adapter.getDiff(new Date(`${adapter.toISO(end)}T00:00:00Z`), new Date(`${adapter.toISO(start)}T00:00:00Z`), 'days');
|
|
24351
24425
|
for (let i = 0; i < days; i++) {
|
|
24352
24426
|
if (allowedDates(adapter.addDays(start, i))) return true;
|
|
24353
24427
|
}
|
|
@@ -26850,7 +26924,7 @@
|
|
|
26850
26924
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
|
26851
26925
|
const _inputText = vue.shallowRef(null);
|
|
26852
26926
|
vue.watchEffect(() => {
|
|
26853
|
-
if (isFocused.value && !controlsDisabled.value && Number(_inputText.value) === model.value) ; else if (model.value == null) {
|
|
26927
|
+
if (isFocused.value && !controlsDisabled.value && Number(_inputText.value?.replace(decimalSeparator.value, '.')) === model.value) ; else if (model.value == null) {
|
|
26854
26928
|
_inputText.value = null;
|
|
26855
26929
|
} else if (!isNaN(model.value)) {
|
|
26856
26930
|
_inputText.value = correctPrecision(model.value);
|
|
@@ -26945,6 +27019,7 @@
|
|
|
26945
27019
|
if (!new RegExp(`^-?\\d*${escapeForRegex(decimalSeparator.value)}?\\d*$`).test(potentialNewInputVal)) {
|
|
26946
27020
|
e.preventDefault();
|
|
26947
27021
|
inputElement.value = potentialNewNumber;
|
|
27022
|
+
vue.nextTick(() => inputText.value = potentialNewNumber);
|
|
26948
27023
|
}
|
|
26949
27024
|
if (props.precision == null) return;
|
|
26950
27025
|
|
|
@@ -26952,13 +27027,15 @@
|
|
|
26952
27027
|
if (potentialNewInputVal.split(decimalSeparator.value)[1]?.length > props.precision) {
|
|
26953
27028
|
e.preventDefault();
|
|
26954
27029
|
inputElement.value = potentialNewNumber;
|
|
27030
|
+
vue.nextTick(() => inputText.value = potentialNewNumber);
|
|
26955
27031
|
const cursorPosition = (selectionStart ?? 0) + e.data.length;
|
|
26956
27032
|
inputElement.setSelectionRange(cursorPosition, cursorPosition);
|
|
26957
27033
|
}
|
|
26958
27034
|
// Ignore decimal separator when precision = 0
|
|
26959
|
-
if (props.precision === 0 && potentialNewInputVal.
|
|
27035
|
+
if (props.precision === 0 && potentialNewInputVal.endsWith(decimalSeparator.value)) {
|
|
26960
27036
|
e.preventDefault();
|
|
26961
27037
|
inputElement.value = potentialNewNumber;
|
|
27038
|
+
vue.nextTick(() => inputText.value = potentialNewNumber);
|
|
26962
27039
|
}
|
|
26963
27040
|
}
|
|
26964
27041
|
async function onKeydown(e) {
|
|
@@ -28154,12 +28231,12 @@
|
|
|
28154
28231
|
ariaLabel: t(props.loadingText),
|
|
28155
28232
|
role: 'alert'
|
|
28156
28233
|
};
|
|
28157
|
-
return
|
|
28234
|
+
return isLoading ? vue.createElementVNode("div", vue.mergeProps({
|
|
28158
28235
|
"class": ['v-skeleton-loader', {
|
|
28159
28236
|
'v-skeleton-loader--boilerplate': props.boilerplate
|
|
28160
28237
|
}, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
|
|
28161
28238
|
"style": [backgroundColorStyles.value, dimensionStyles.value]
|
|
28162
|
-
}, loadingProps, attrs), [items.value]) : slots.default?.()]);
|
|
28239
|
+
}, loadingProps, attrs), [items.value]) : vue.createElementVNode(vue.Fragment, null, [slots.default?.()]);
|
|
28163
28240
|
});
|
|
28164
28241
|
return {};
|
|
28165
28242
|
}
|
|
@@ -30024,6 +30101,10 @@
|
|
|
30024
30101
|
const vFieldRef = vue.ref();
|
|
30025
30102
|
const controlHeight = vue.shallowRef('');
|
|
30026
30103
|
const textareaRef = vue.ref();
|
|
30104
|
+
const scrollbarWidth = vue.ref(0);
|
|
30105
|
+
const {
|
|
30106
|
+
platform
|
|
30107
|
+
} = useDisplay();
|
|
30027
30108
|
const autocomplete = useAutocomplete(props);
|
|
30028
30109
|
const isActive = vue.computed(() => props.persistentPlaceholder || isFocused.value || props.active);
|
|
30029
30110
|
function onFocus() {
|
|
@@ -30068,6 +30149,18 @@
|
|
|
30068
30149
|
if (!props.autoGrow) rows.value = Number(props.rows);
|
|
30069
30150
|
});
|
|
30070
30151
|
function calculateInputHeight() {
|
|
30152
|
+
vue.nextTick(() => {
|
|
30153
|
+
if (!textareaRef.value) return;
|
|
30154
|
+
if (platform.value.firefox) {
|
|
30155
|
+
scrollbarWidth.value = 12;
|
|
30156
|
+
return;
|
|
30157
|
+
}
|
|
30158
|
+
const {
|
|
30159
|
+
offsetWidth,
|
|
30160
|
+
clientWidth
|
|
30161
|
+
} = textareaRef.value;
|
|
30162
|
+
scrollbarWidth.value = Math.max(0, offsetWidth - clientWidth);
|
|
30163
|
+
});
|
|
30071
30164
|
if (!props.autoGrow) return;
|
|
30072
30165
|
vue.nextTick(() => {
|
|
30073
30166
|
if (!sizerRef.value || !vFieldRef.value) return;
|
|
@@ -30128,7 +30221,9 @@
|
|
|
30128
30221
|
'v-textarea--no-resize': props.noResize || props.autoGrow,
|
|
30129
30222
|
'v-input--plain-underlined': isPlainOrUnderlined.value
|
|
30130
30223
|
}, props.class],
|
|
30131
|
-
"style":
|
|
30224
|
+
"style": [{
|
|
30225
|
+
'--v-textarea-scroll-bar-width': convertToUnit(scrollbarWidth.value)
|
|
30226
|
+
}, props.style]
|
|
30132
30227
|
}, rootAttrs, inputProps, {
|
|
30133
30228
|
"centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
|
|
30134
30229
|
"focused": isFocused.value
|
|
@@ -32283,7 +32378,7 @@
|
|
|
32283
32378
|
};
|
|
32284
32379
|
});
|
|
32285
32380
|
}
|
|
32286
|
-
const version$1 = "3.10.
|
|
32381
|
+
const version$1 = "3.10.6";
|
|
32287
32382
|
createVuetify$1.version = version$1;
|
|
32288
32383
|
|
|
32289
32384
|
// Vue's inject() can only be used in setup
|
|
@@ -32308,7 +32403,7 @@
|
|
|
32308
32403
|
...options
|
|
32309
32404
|
});
|
|
32310
32405
|
};
|
|
32311
|
-
const version = "3.10.
|
|
32406
|
+
const version = "3.10.6";
|
|
32312
32407
|
createVuetify.version = version;
|
|
32313
32408
|
|
|
32314
32409
|
exports.blueprints = index;
|