vuetify 3.10.5 → 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 +3568 -3592
- package/dist/json/importMap-labs.json +24 -24
- package/dist/json/importMap.json +152 -152
- package/dist/json/tags.json +3 -9
- package/dist/json/web-types.json +6916 -6969
- package/dist/vuetify-labs.cjs +178 -72
- package/dist/vuetify-labs.css +4389 -4339
- package/dist/vuetify-labs.d.ts +108 -163
- package/dist/vuetify-labs.esm.js +178 -72
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +178 -72
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +159 -62
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +4349 -4321
- package/dist/vuetify.d.ts +108 -128
- package/dist/vuetify.esm.js +159 -62
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +159 -62
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +113 -102
- 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/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/VDatePicker/VDatePicker.js +1 -1
- package/lib/components/VDatePicker/VDatePicker.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/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 +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 +54 -54
- 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.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
|
*/
|
|
@@ -397,8 +397,10 @@ function callEvent(handler) {
|
|
|
397
397
|
}
|
|
398
398
|
function focusableChildren(el) {
|
|
399
399
|
let filterByTabIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
400
|
-
const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', '[tabindex]'].map(s => `${s}${filterByTabIndex ? ':not([tabindex="-1"])' : ''}:not([disabled])`).join(', ');
|
|
401
|
-
return [...el.querySelectorAll(targets)]
|
|
400
|
+
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(', ');
|
|
401
|
+
return [...el.querySelectorAll(targets)].filter(x => !x.closest('[inert]')) // does not have inert parent
|
|
402
|
+
.filter(x => !!x.offsetParent || x.getClientRects().length > 0) // is rendered
|
|
403
|
+
.filter(x => !x.parentElement?.closest('details:not([open])') || x.tagName === 'SUMMARY' && x.parentElement?.tagName === 'DETAILS');
|
|
402
404
|
}
|
|
403
405
|
function getNextElement(elements, location, condition) {
|
|
404
406
|
let _el;
|
|
@@ -5019,7 +5021,7 @@ function useGroupItem(props, injectKey) {
|
|
|
5019
5021
|
function unregister() {
|
|
5020
5022
|
group?.unregister(id);
|
|
5021
5023
|
}
|
|
5022
|
-
|
|
5024
|
+
register();
|
|
5023
5025
|
onBeforeUnmount(() => unregister());
|
|
5024
5026
|
const isSelected = computed(() => {
|
|
5025
5027
|
return group.isSelected(id);
|
|
@@ -8339,6 +8341,10 @@ function getOffsetPosition(isHorizontal, element) {
|
|
|
8339
8341
|
const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
|
|
8340
8342
|
const makeVSlideGroupProps = propsFactory({
|
|
8341
8343
|
centerActive: Boolean,
|
|
8344
|
+
scrollToActive: {
|
|
8345
|
+
type: Boolean,
|
|
8346
|
+
default: true
|
|
8347
|
+
},
|
|
8342
8348
|
contentClass: null,
|
|
8343
8349
|
direction: {
|
|
8344
8350
|
type: String,
|
|
@@ -8427,7 +8433,7 @@ const VSlideGroup = genericComponent()({
|
|
|
8427
8433
|
contentSize.value = contentRect.value[sizeProperty];
|
|
8428
8434
|
isOverflowing.value = containerSize.value + 1 < contentSize.value;
|
|
8429
8435
|
}
|
|
8430
|
-
if (firstSelectedIndex.value >= 0 && contentRef.el) {
|
|
8436
|
+
if (props.scrollToActive && firstSelectedIndex.value >= 0 && contentRef.el) {
|
|
8431
8437
|
// TODO: Is this too naive? Should we store element references in group composable?
|
|
8432
8438
|
const selectedElement = contentRef.el.children[lastSelectedIndex.value];
|
|
8433
8439
|
scrollToChildren(selectedElement, props.centerActive);
|
|
@@ -8696,7 +8702,9 @@ const makeVChipGroupProps = propsFactory({
|
|
|
8696
8702
|
type: Function,
|
|
8697
8703
|
default: deepEqual
|
|
8698
8704
|
},
|
|
8699
|
-
...makeVSlideGroupProps(
|
|
8705
|
+
...makeVSlideGroupProps({
|
|
8706
|
+
scrollToActive: false
|
|
8707
|
+
}),
|
|
8700
8708
|
...makeComponentProps(),
|
|
8701
8709
|
...makeGroupProps({
|
|
8702
8710
|
selectedClass: 'v-chip--selected'
|
|
@@ -9795,7 +9803,9 @@ const useNestedItem = (id, isDisabled, isGroup) => {
|
|
|
9795
9803
|
};
|
|
9796
9804
|
onBeforeMount(() => {
|
|
9797
9805
|
if (!parent.isGroupActivator) {
|
|
9798
|
-
|
|
9806
|
+
nextTick(() => {
|
|
9807
|
+
parent.root.register(computedId.value, parent.id.value, toValue(isDisabled), isGroup);
|
|
9808
|
+
});
|
|
9799
9809
|
}
|
|
9800
9810
|
});
|
|
9801
9811
|
onBeforeUnmount(() => {
|
|
@@ -9803,6 +9813,14 @@ const useNestedItem = (id, isDisabled, isGroup) => {
|
|
|
9803
9813
|
parent.root.unregister(computedId.value);
|
|
9804
9814
|
}
|
|
9805
9815
|
});
|
|
9816
|
+
watch(computedId, (val, oldVal) => {
|
|
9817
|
+
if (!parent.isGroupActivator) {
|
|
9818
|
+
parent.root.unregister(oldVal);
|
|
9819
|
+
nextTick(() => {
|
|
9820
|
+
parent.root.register(val, parent.id.value, toValue(isDisabled), isGroup);
|
|
9821
|
+
});
|
|
9822
|
+
}
|
|
9823
|
+
});
|
|
9806
9824
|
isGroup && provide(VNestedSymbol, item);
|
|
9807
9825
|
return item;
|
|
9808
9826
|
};
|
|
@@ -10053,7 +10071,9 @@ const VListItem = genericComponent()({
|
|
|
10053
10071
|
handleActiveLink();
|
|
10054
10072
|
});
|
|
10055
10073
|
onBeforeMount(() => {
|
|
10056
|
-
if (link.isActive?.value)
|
|
10074
|
+
if (link.isActive?.value) {
|
|
10075
|
+
nextTick(() => handleActiveLink());
|
|
10076
|
+
}
|
|
10057
10077
|
});
|
|
10058
10078
|
function handleActiveLink() {
|
|
10059
10079
|
if (parent.value != null) {
|
|
@@ -12301,25 +12321,41 @@ const VMenu = genericComponent()({
|
|
|
12301
12321
|
document.removeEventListener('focusin', onFocusIn);
|
|
12302
12322
|
});
|
|
12303
12323
|
onDeactivated(() => isActive.value = false);
|
|
12324
|
+
let focusTrapSuppressed = false;
|
|
12325
|
+
let focusTrapSuppressionTimeout = -1;
|
|
12326
|
+
async function onPointerdown() {
|
|
12327
|
+
focusTrapSuppressed = true;
|
|
12328
|
+
focusTrapSuppressionTimeout = window.setTimeout(() => {
|
|
12329
|
+
focusTrapSuppressed = false;
|
|
12330
|
+
}, 100);
|
|
12331
|
+
}
|
|
12304
12332
|
async function onFocusIn(e) {
|
|
12305
12333
|
const before = e.relatedTarget;
|
|
12306
12334
|
const after = e.target;
|
|
12307
12335
|
await nextTick();
|
|
12308
12336
|
if (isActive.value && before !== after && overlay.value?.contentEl &&
|
|
12309
|
-
// We're the
|
|
12310
|
-
overlay.value?.
|
|
12337
|
+
// We're the menu without open submenus or overlays
|
|
12338
|
+
overlay.value?.localTop &&
|
|
12311
12339
|
// It isn't the document or the menu body
|
|
12312
12340
|
![document, overlay.value.contentEl].includes(after) &&
|
|
12313
12341
|
// It isn't inside the menu body
|
|
12314
12342
|
!overlay.value.contentEl.contains(after)) {
|
|
12315
|
-
|
|
12316
|
-
|
|
12343
|
+
if (focusTrapSuppressed) {
|
|
12344
|
+
if (!props.openOnHover || !overlay.value.activatorEl?.contains(after)) {
|
|
12345
|
+
isActive.value = false;
|
|
12346
|
+
}
|
|
12347
|
+
} else {
|
|
12348
|
+
const focusable = focusableChildren(overlay.value.contentEl);
|
|
12349
|
+
focusable[0]?.focus();
|
|
12350
|
+
document.removeEventListener('pointerdown', onPointerdown);
|
|
12351
|
+
}
|
|
12317
12352
|
}
|
|
12318
12353
|
}
|
|
12319
12354
|
watch(isActive, val => {
|
|
12320
12355
|
if (val) {
|
|
12321
12356
|
parent?.register();
|
|
12322
12357
|
if (IN_BROWSER && !props.disableInitialFocus) {
|
|
12358
|
+
document.addEventListener('pointerdown', onPointerdown);
|
|
12323
12359
|
document.addEventListener('focusin', onFocusIn, {
|
|
12324
12360
|
once: true
|
|
12325
12361
|
});
|
|
@@ -12327,6 +12363,8 @@ const VMenu = genericComponent()({
|
|
|
12327
12363
|
} else {
|
|
12328
12364
|
parent?.unregister();
|
|
12329
12365
|
if (IN_BROWSER) {
|
|
12366
|
+
clearTimeout(focusTrapSuppressionTimeout);
|
|
12367
|
+
document.removeEventListener('pointerdown', onPointerdown);
|
|
12330
12368
|
document.removeEventListener('focusin', onFocusIn);
|
|
12331
12369
|
}
|
|
12332
12370
|
}
|
|
@@ -12920,7 +12958,6 @@ const VTextField = genericComponent()({
|
|
|
12920
12958
|
e.stopPropagation();
|
|
12921
12959
|
onFocus();
|
|
12922
12960
|
nextTick(() => {
|
|
12923
|
-
model.value = null;
|
|
12924
12961
|
reset();
|
|
12925
12962
|
callEvent(props['onClick:clear'], e);
|
|
12926
12963
|
});
|
|
@@ -12975,8 +13012,6 @@ const VTextField = genericComponent()({
|
|
|
12975
13012
|
"onMousedown": onControlMousedown,
|
|
12976
13013
|
"onClick": onControlClick,
|
|
12977
13014
|
"onClick:clear": e => onClear(e, reset),
|
|
12978
|
-
"onClick:prependInner": props['onClick:prependInner'],
|
|
12979
|
-
"onClick:appendInner": props['onClick:appendInner'],
|
|
12980
13015
|
"role": props.role
|
|
12981
13016
|
}, omit(fieldProps, ['onClick:clear']), {
|
|
12982
13017
|
"id": id.value,
|
|
@@ -13152,7 +13187,7 @@ function useVirtual(props, items) {
|
|
|
13152
13187
|
const start = performance.now();
|
|
13153
13188
|
offsets[0] = 0;
|
|
13154
13189
|
const length = items.value.length;
|
|
13155
|
-
for (let i = 1; i <= length
|
|
13190
|
+
for (let i = 1; i <= length; i++) {
|
|
13156
13191
|
offsets[i] = (offsets[i - 1] || 0) + getSize(i - 1);
|
|
13157
13192
|
}
|
|
13158
13193
|
updateTime.value = Math.max(updateTime.value, performance.now() - start);
|
|
@@ -13187,7 +13222,7 @@ function useVirtual(props, items) {
|
|
|
13187
13222
|
}
|
|
13188
13223
|
}
|
|
13189
13224
|
function calculateOffset(index) {
|
|
13190
|
-
index = clamp(index, 0, items.value.length
|
|
13225
|
+
index = clamp(index, 0, items.value.length);
|
|
13191
13226
|
const whole = Math.floor(index);
|
|
13192
13227
|
const fraction = index % 1;
|
|
13193
13228
|
const next = whole + 1;
|
|
@@ -14192,10 +14227,7 @@ const makeVAutocompleteProps = propsFactory({
|
|
|
14192
14227
|
...omit(makeVTextFieldProps({
|
|
14193
14228
|
modelValue: null,
|
|
14194
14229
|
role: 'combobox'
|
|
14195
|
-
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
14196
|
-
...makeTransitionProps({
|
|
14197
|
-
transition: false
|
|
14198
|
-
})
|
|
14230
|
+
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
14199
14231
|
}, 'VAutocomplete');
|
|
14200
14232
|
const VAutocomplete = genericComponent()({
|
|
14201
14233
|
name: 'VAutocomplete',
|
|
@@ -14220,6 +14252,7 @@ const VAutocomplete = genericComponent()({
|
|
|
14220
14252
|
const vMenuRef = ref();
|
|
14221
14253
|
const vVirtualScrollRef = ref();
|
|
14222
14254
|
const selectionIndex = shallowRef(-1);
|
|
14255
|
+
const _searchLock = shallowRef(null);
|
|
14223
14256
|
const {
|
|
14224
14257
|
items,
|
|
14225
14258
|
transformIn,
|
|
@@ -14241,9 +14274,9 @@ const VAutocomplete = genericComponent()({
|
|
|
14241
14274
|
const {
|
|
14242
14275
|
filteredItems,
|
|
14243
14276
|
getMatches
|
|
14244
|
-
} = useFilter(props, items, () => isPristine.value ? '' : search.value);
|
|
14277
|
+
} = useFilter(props, items, () => _searchLock.value ?? (isPristine.value ? '' : search.value));
|
|
14245
14278
|
const displayItems = computed(() => {
|
|
14246
|
-
if (props.hideSelected) {
|
|
14279
|
+
if (props.hideSelected && _searchLock.value === null) {
|
|
14247
14280
|
return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
|
|
14248
14281
|
}
|
|
14249
14282
|
return filteredItems.value;
|
|
@@ -14374,6 +14407,7 @@ const VAutocomplete = genericComponent()({
|
|
|
14374
14407
|
isPristine.value = true;
|
|
14375
14408
|
vTextFieldRef.value?.focus();
|
|
14376
14409
|
}
|
|
14410
|
+
_searchLock.value = null;
|
|
14377
14411
|
}
|
|
14378
14412
|
function onFocusin(e) {
|
|
14379
14413
|
isFocused.value = true;
|
|
@@ -14409,6 +14443,7 @@ const VAutocomplete = genericComponent()({
|
|
|
14409
14443
|
} else {
|
|
14410
14444
|
const add = set !== false;
|
|
14411
14445
|
model.value = add ? [item] : [];
|
|
14446
|
+
_searchLock.value = isPristine.value ? '' : search.value ?? '';
|
|
14412
14447
|
search.value = add && !hasSelectionSlot.value ? item.title : '';
|
|
14413
14448
|
|
|
14414
14449
|
// watch for search watcher to trigger
|
|
@@ -14428,6 +14463,9 @@ const VAutocomplete = genericComponent()({
|
|
|
14428
14463
|
} else {
|
|
14429
14464
|
if (!props.multiple && search.value == null) model.value = [];
|
|
14430
14465
|
menu.value = false;
|
|
14466
|
+
if (!isPristine.value && search.value) {
|
|
14467
|
+
_searchLock.value = search.value;
|
|
14468
|
+
}
|
|
14431
14469
|
search.value = '';
|
|
14432
14470
|
selectionIndex.value = -1;
|
|
14433
14471
|
}
|
|
@@ -14437,13 +14475,14 @@ const VAutocomplete = genericComponent()({
|
|
|
14437
14475
|
if (val) menu.value = true;
|
|
14438
14476
|
isPristine.value = !val;
|
|
14439
14477
|
});
|
|
14440
|
-
watch(menu,
|
|
14441
|
-
if (!props.hideSelected &&
|
|
14478
|
+
watch(menu, val => {
|
|
14479
|
+
if (!props.hideSelected && val && model.value.length && isPristine.value) {
|
|
14442
14480
|
const index = displayItems.value.findIndex(item => model.value.some(s => item.value === s.value));
|
|
14443
14481
|
IN_BROWSER && window.requestAnimationFrame(() => {
|
|
14444
14482
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
|
14445
14483
|
});
|
|
14446
14484
|
}
|
|
14485
|
+
if (val) _searchLock.value = null;
|
|
14447
14486
|
});
|
|
14448
14487
|
watch(items, (newVal, oldVal) => {
|
|
14449
14488
|
if (menu.value) return;
|
|
@@ -14494,7 +14533,6 @@ const VAutocomplete = genericComponent()({
|
|
|
14494
14533
|
"maxHeight": 310,
|
|
14495
14534
|
"openOnClick": false,
|
|
14496
14535
|
"closeOnContentClick": false,
|
|
14497
|
-
"transition": props.transition,
|
|
14498
14536
|
"onAfterEnter": onAfterEnter,
|
|
14499
14537
|
"onAfterLeave": onAfterLeave
|
|
14500
14538
|
}, props.menuProps), {
|
|
@@ -15922,7 +15960,21 @@ const VWindow = genericComponent()({
|
|
|
15922
15960
|
const activeIndex = computed(() => {
|
|
15923
15961
|
return group.items.value.findIndex(item => group.selected.value.includes(item.id));
|
|
15924
15962
|
});
|
|
15963
|
+
|
|
15964
|
+
// Fix for https://github.com/vuetifyjs/vuetify/issues/18447
|
|
15925
15965
|
watch(activeIndex, (newVal, oldVal) => {
|
|
15966
|
+
let scrollableParent;
|
|
15967
|
+
const savedScrollPosition = {
|
|
15968
|
+
x: 0,
|
|
15969
|
+
y: 0
|
|
15970
|
+
};
|
|
15971
|
+
if (IN_BROWSER && oldVal >= 0) {
|
|
15972
|
+
scrollableParent = getScrollParent(rootRef.value);
|
|
15973
|
+
|
|
15974
|
+
// Save current scroll position
|
|
15975
|
+
savedScrollPosition.x = scrollableParent.scrollLeft;
|
|
15976
|
+
savedScrollPosition.y = scrollableParent.scrollTop;
|
|
15977
|
+
}
|
|
15926
15978
|
const itemsLength = group.items.value.length;
|
|
15927
15979
|
const lastIndex = itemsLength - 1;
|
|
15928
15980
|
if (itemsLength <= 2) {
|
|
@@ -15934,7 +15986,32 @@ const VWindow = genericComponent()({
|
|
|
15934
15986
|
} else {
|
|
15935
15987
|
isReversed.value = newVal < oldVal;
|
|
15936
15988
|
}
|
|
15937
|
-
|
|
15989
|
+
nextTick(() => {
|
|
15990
|
+
if (!IN_BROWSER || !scrollableParent) return;
|
|
15991
|
+
const currentScrollY = scrollableParent.scrollTop;
|
|
15992
|
+
if (currentScrollY !== savedScrollPosition.y) {
|
|
15993
|
+
scrollableParent.scrollTo({
|
|
15994
|
+
left: savedScrollPosition.x,
|
|
15995
|
+
top: savedScrollPosition.y,
|
|
15996
|
+
behavior: 'instant'
|
|
15997
|
+
});
|
|
15998
|
+
}
|
|
15999
|
+
requestAnimationFrame(() => {
|
|
16000
|
+
if (!scrollableParent) return;
|
|
16001
|
+
const rafScrollY = scrollableParent.scrollTop;
|
|
16002
|
+
if (rafScrollY !== savedScrollPosition.y) {
|
|
16003
|
+
scrollableParent.scrollTo({
|
|
16004
|
+
left: savedScrollPosition.x,
|
|
16005
|
+
top: savedScrollPosition.y,
|
|
16006
|
+
behavior: 'instant'
|
|
16007
|
+
});
|
|
16008
|
+
}
|
|
16009
|
+
});
|
|
16010
|
+
});
|
|
16011
|
+
}, {
|
|
16012
|
+
flush: 'sync'
|
|
16013
|
+
}); // Run synchronously before DOM updates
|
|
16014
|
+
|
|
15938
16015
|
provide(VWindowSymbol, {
|
|
15939
16016
|
transition,
|
|
15940
16017
|
isReversed,
|
|
@@ -18839,7 +18916,7 @@ function createDate(options, locale) {
|
|
|
18839
18916
|
};
|
|
18840
18917
|
}
|
|
18841
18918
|
function createDateRange(adapter, start, stop) {
|
|
18842
|
-
const diff = adapter.getDiff(adapter.
|
|
18919
|
+
const diff = adapter.getDiff(new Date(`${adapter.toISO(stop ?? start)}T00:00:00Z`), new Date(`${adapter.toISO(start)}T00:00:00Z`), 'days');
|
|
18843
18920
|
const datesInRange = [start];
|
|
18844
18921
|
for (let i = 1; i < diff; i++) {
|
|
18845
18922
|
const nextDate = adapter.addDays(start, i);
|
|
@@ -19513,10 +19590,7 @@ const makeVComboboxProps = propsFactory({
|
|
|
19513
19590
|
...omit(makeVTextFieldProps({
|
|
19514
19591
|
modelValue: null,
|
|
19515
19592
|
role: 'combobox'
|
|
19516
|
-
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
19517
|
-
...makeTransitionProps({
|
|
19518
|
-
transition: false
|
|
19519
|
-
})
|
|
19593
|
+
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
19520
19594
|
}, 'VCombobox');
|
|
19521
19595
|
const VCombobox = genericComponent()({
|
|
19522
19596
|
name: 'VCombobox',
|
|
@@ -19560,13 +19634,16 @@ const VCombobox = genericComponent()({
|
|
|
19560
19634
|
const hasChips = computed(() => !!(props.chips || slots.chip));
|
|
19561
19635
|
const hasSelectionSlot = computed(() => hasChips.value || !!slots.selection);
|
|
19562
19636
|
const _search = shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
|
|
19637
|
+
const _searchLock = shallowRef(null);
|
|
19563
19638
|
const search = computed({
|
|
19564
19639
|
get: () => {
|
|
19565
19640
|
return _search.value;
|
|
19566
19641
|
},
|
|
19567
19642
|
set: async val => {
|
|
19568
19643
|
_search.value = val ?? '';
|
|
19569
|
-
if (!props.multiple && !hasSelectionSlot.value) {
|
|
19644
|
+
if (val === null || val === '' && !props.multiple && !hasSelectionSlot.value) {
|
|
19645
|
+
model.value = [];
|
|
19646
|
+
} else if (!props.multiple && !hasSelectionSlot.value) {
|
|
19570
19647
|
model.value = [transformItem$3(props, val)];
|
|
19571
19648
|
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
|
19572
19649
|
}
|
|
@@ -19594,9 +19671,9 @@ const VCombobox = genericComponent()({
|
|
|
19594
19671
|
const {
|
|
19595
19672
|
filteredItems,
|
|
19596
19673
|
getMatches
|
|
19597
|
-
} = useFilter(props, items, () => props.alwaysFilter || !isPristine.value ? search.value : '');
|
|
19674
|
+
} = useFilter(props, items, () => _searchLock.value ?? (props.alwaysFilter || !isPristine.value ? search.value : ''));
|
|
19598
19675
|
const displayItems = computed(() => {
|
|
19599
|
-
if (props.hideSelected) {
|
|
19676
|
+
if (props.hideSelected && _searchLock.value === null) {
|
|
19600
19677
|
return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
|
|
19601
19678
|
}
|
|
19602
19679
|
return filteredItems.value;
|
|
@@ -19677,22 +19754,19 @@ const VCombobox = genericComponent()({
|
|
|
19677
19754
|
if (['Escape'].includes(e.key)) {
|
|
19678
19755
|
menu.value = false;
|
|
19679
19756
|
}
|
|
19680
|
-
if (['Enter', '
|
|
19681
|
-
|
|
19682
|
-
|
|
19683
|
-
|
|
19684
|
-
|
|
19685
|
-
|
|
19686
|
-
|
|
19687
|
-
select(filteredItems.value[0]);
|
|
19688
|
-
}
|
|
19689
|
-
isPristine.value = true;
|
|
19757
|
+
if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key) && !model.value.some(_ref2 => {
|
|
19758
|
+
let {
|
|
19759
|
+
value
|
|
19760
|
+
} = _ref2;
|
|
19761
|
+
return value === displayItems.value[0].value;
|
|
19762
|
+
})) {
|
|
19763
|
+
select(filteredItems.value[0]);
|
|
19690
19764
|
}
|
|
19691
19765
|
if (e.key === 'ArrowDown' && highlightFirst.value) {
|
|
19692
19766
|
listRef.value?.focus('next');
|
|
19693
19767
|
}
|
|
19694
19768
|
if (e.key === 'Enter' && search.value) {
|
|
19695
|
-
select(transformItem$3(props, search.value));
|
|
19769
|
+
select(transformItem$3(props, search.value), true, true);
|
|
19696
19770
|
if (hasSelectionSlot.value) _search.value = '';
|
|
19697
19771
|
}
|
|
19698
19772
|
if (['Backspace', 'Delete'].includes(e.key)) {
|
|
@@ -19740,10 +19814,12 @@ const VCombobox = genericComponent()({
|
|
|
19740
19814
|
isPristine.value = true;
|
|
19741
19815
|
vTextFieldRef.value?.focus();
|
|
19742
19816
|
}
|
|
19817
|
+
_searchLock.value = null;
|
|
19743
19818
|
}
|
|
19744
19819
|
/** @param set - null means toggle */
|
|
19745
19820
|
function select(item) {
|
|
19746
19821
|
let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
19822
|
+
let keepMenu = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
19747
19823
|
if (!item || item.props.disabled) return;
|
|
19748
19824
|
if (props.multiple) {
|
|
19749
19825
|
const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
|
|
@@ -19761,11 +19837,14 @@ const VCombobox = genericComponent()({
|
|
|
19761
19837
|
} else {
|
|
19762
19838
|
const add = set !== false;
|
|
19763
19839
|
model.value = add ? [item] : [];
|
|
19840
|
+
if ((!isPristine.value || props.alwaysFilter) && _search.value) {
|
|
19841
|
+
_searchLock.value = _search.value;
|
|
19842
|
+
}
|
|
19764
19843
|
_search.value = add && !hasSelectionSlot.value ? item.title : '';
|
|
19765
19844
|
|
|
19766
19845
|
// watch for search watcher to trigger
|
|
19767
19846
|
nextTick(() => {
|
|
19768
|
-
menu.value =
|
|
19847
|
+
menu.value = keepMenu;
|
|
19769
19848
|
isPristine.value = true;
|
|
19770
19849
|
});
|
|
19771
19850
|
}
|
|
@@ -19779,9 +19858,6 @@ const VCombobox = genericComponent()({
|
|
|
19779
19858
|
function onFocusout(e) {
|
|
19780
19859
|
listHasFocus.value = false;
|
|
19781
19860
|
}
|
|
19782
|
-
function onUpdateModelValue(v) {
|
|
19783
|
-
if (v == null || v === '' && !props.multiple && !hasSelectionSlot.value) model.value = [];
|
|
19784
|
-
}
|
|
19785
19861
|
watch(isFocused, (val, oldVal) => {
|
|
19786
19862
|
if (val || val === oldVal) return;
|
|
19787
19863
|
selectionIndex.value = -1;
|
|
@@ -19804,13 +19880,14 @@ const VCombobox = genericComponent()({
|
|
|
19804
19880
|
}
|
|
19805
19881
|
}
|
|
19806
19882
|
});
|
|
19807
|
-
watch(menu,
|
|
19808
|
-
if (!props.hideSelected &&
|
|
19883
|
+
watch(menu, val => {
|
|
19884
|
+
if (!props.hideSelected && val && model.value.length && isPristine.value) {
|
|
19809
19885
|
const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
|
|
19810
19886
|
IN_BROWSER && window.requestAnimationFrame(() => {
|
|
19811
19887
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
|
19812
19888
|
});
|
|
19813
19889
|
}
|
|
19890
|
+
if (val) _searchLock.value = null;
|
|
19814
19891
|
});
|
|
19815
19892
|
watch(items, (newVal, oldVal) => {
|
|
19816
19893
|
if (menu.value) return;
|
|
@@ -19826,7 +19903,7 @@ const VCombobox = genericComponent()({
|
|
|
19826
19903
|
"ref": vTextFieldRef
|
|
19827
19904
|
}, textFieldProps, {
|
|
19828
19905
|
"modelValue": search.value,
|
|
19829
|
-
"onUpdate:modelValue":
|
|
19906
|
+
"onUpdate:modelValue": $event => search.value = $event,
|
|
19830
19907
|
"focused": isFocused.value,
|
|
19831
19908
|
"onUpdate:focused": $event => isFocused.value = $event,
|
|
19832
19909
|
"validationValue": model.externalValue,
|
|
@@ -19861,7 +19938,6 @@ const VCombobox = genericComponent()({
|
|
|
19861
19938
|
"maxHeight": 310,
|
|
19862
19939
|
"openOnClick": false,
|
|
19863
19940
|
"closeOnContentClick": false,
|
|
19864
|
-
"transition": props.transition,
|
|
19865
19941
|
"onAfterEnter": onAfterEnter,
|
|
19866
19942
|
"onAfterLeave": onAfterLeave
|
|
19867
19943
|
}, props.menuProps), {
|
|
@@ -24341,7 +24417,7 @@ const VDatePicker = genericComponent()({
|
|
|
24341
24417
|
function isAllowedInRange(start, end) {
|
|
24342
24418
|
const allowedDates = props.allowedDates;
|
|
24343
24419
|
if (typeof allowedDates !== 'function') return true;
|
|
24344
|
-
const days = adapter.getDiff(end, start, 'days');
|
|
24420
|
+
const days = 1 + adapter.getDiff(new Date(`${adapter.toISO(end)}T00:00:00Z`), new Date(`${adapter.toISO(start)}T00:00:00Z`), 'days');
|
|
24345
24421
|
for (let i = 0; i < days; i++) {
|
|
24346
24422
|
if (allowedDates(adapter.addDays(start, i))) return true;
|
|
24347
24423
|
}
|
|
@@ -26844,7 +26920,7 @@ const VNumberInput = genericComponent()({
|
|
|
26844
26920
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
|
26845
26921
|
const _inputText = shallowRef(null);
|
|
26846
26922
|
watchEffect(() => {
|
|
26847
|
-
if (isFocused.value && !controlsDisabled.value && Number(_inputText.value) === model.value) ; else if (model.value == null) {
|
|
26923
|
+
if (isFocused.value && !controlsDisabled.value && Number(_inputText.value?.replace(decimalSeparator.value, '.')) === model.value) ; else if (model.value == null) {
|
|
26848
26924
|
_inputText.value = null;
|
|
26849
26925
|
} else if (!isNaN(model.value)) {
|
|
26850
26926
|
_inputText.value = correctPrecision(model.value);
|
|
@@ -26939,6 +27015,7 @@ const VNumberInput = genericComponent()({
|
|
|
26939
27015
|
if (!new RegExp(`^-?\\d*${escapeForRegex(decimalSeparator.value)}?\\d*$`).test(potentialNewInputVal)) {
|
|
26940
27016
|
e.preventDefault();
|
|
26941
27017
|
inputElement.value = potentialNewNumber;
|
|
27018
|
+
nextTick(() => inputText.value = potentialNewNumber);
|
|
26942
27019
|
}
|
|
26943
27020
|
if (props.precision == null) return;
|
|
26944
27021
|
|
|
@@ -26946,13 +27023,15 @@ const VNumberInput = genericComponent()({
|
|
|
26946
27023
|
if (potentialNewInputVal.split(decimalSeparator.value)[1]?.length > props.precision) {
|
|
26947
27024
|
e.preventDefault();
|
|
26948
27025
|
inputElement.value = potentialNewNumber;
|
|
27026
|
+
nextTick(() => inputText.value = potentialNewNumber);
|
|
26949
27027
|
const cursorPosition = (selectionStart ?? 0) + e.data.length;
|
|
26950
27028
|
inputElement.setSelectionRange(cursorPosition, cursorPosition);
|
|
26951
27029
|
}
|
|
26952
27030
|
// Ignore decimal separator when precision = 0
|
|
26953
|
-
if (props.precision === 0 && potentialNewInputVal.
|
|
27031
|
+
if (props.precision === 0 && potentialNewInputVal.endsWith(decimalSeparator.value)) {
|
|
26954
27032
|
e.preventDefault();
|
|
26955
27033
|
inputElement.value = potentialNewNumber;
|
|
27034
|
+
nextTick(() => inputText.value = potentialNewNumber);
|
|
26956
27035
|
}
|
|
26957
27036
|
}
|
|
26958
27037
|
async function onKeydown(e) {
|
|
@@ -28148,12 +28227,12 @@ const VSkeletonLoader = genericComponent()({
|
|
|
28148
28227
|
ariaLabel: t(props.loadingText),
|
|
28149
28228
|
role: 'alert'
|
|
28150
28229
|
};
|
|
28151
|
-
return
|
|
28230
|
+
return isLoading ? createElementVNode("div", mergeProps({
|
|
28152
28231
|
"class": ['v-skeleton-loader', {
|
|
28153
28232
|
'v-skeleton-loader--boilerplate': props.boilerplate
|
|
28154
28233
|
}, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
|
|
28155
28234
|
"style": [backgroundColorStyles.value, dimensionStyles.value]
|
|
28156
|
-
}, loadingProps, attrs), [items.value]) : slots.default?.()]);
|
|
28235
|
+
}, loadingProps, attrs), [items.value]) : createElementVNode(Fragment, null, [slots.default?.()]);
|
|
28157
28236
|
});
|
|
28158
28237
|
return {};
|
|
28159
28238
|
}
|
|
@@ -30018,6 +30097,10 @@ const VTextarea = genericComponent()({
|
|
|
30018
30097
|
const vFieldRef = ref();
|
|
30019
30098
|
const controlHeight = shallowRef('');
|
|
30020
30099
|
const textareaRef = ref();
|
|
30100
|
+
const scrollbarWidth = ref(0);
|
|
30101
|
+
const {
|
|
30102
|
+
platform
|
|
30103
|
+
} = useDisplay();
|
|
30021
30104
|
const autocomplete = useAutocomplete(props);
|
|
30022
30105
|
const isActive = computed(() => props.persistentPlaceholder || isFocused.value || props.active);
|
|
30023
30106
|
function onFocus() {
|
|
@@ -30062,6 +30145,18 @@ const VTextarea = genericComponent()({
|
|
|
30062
30145
|
if (!props.autoGrow) rows.value = Number(props.rows);
|
|
30063
30146
|
});
|
|
30064
30147
|
function calculateInputHeight() {
|
|
30148
|
+
nextTick(() => {
|
|
30149
|
+
if (!textareaRef.value) return;
|
|
30150
|
+
if (platform.value.firefox) {
|
|
30151
|
+
scrollbarWidth.value = 12;
|
|
30152
|
+
return;
|
|
30153
|
+
}
|
|
30154
|
+
const {
|
|
30155
|
+
offsetWidth,
|
|
30156
|
+
clientWidth
|
|
30157
|
+
} = textareaRef.value;
|
|
30158
|
+
scrollbarWidth.value = Math.max(0, offsetWidth - clientWidth);
|
|
30159
|
+
});
|
|
30065
30160
|
if (!props.autoGrow) return;
|
|
30066
30161
|
nextTick(() => {
|
|
30067
30162
|
if (!sizerRef.value || !vFieldRef.value) return;
|
|
@@ -30122,7 +30217,9 @@ const VTextarea = genericComponent()({
|
|
|
30122
30217
|
'v-textarea--no-resize': props.noResize || props.autoGrow,
|
|
30123
30218
|
'v-input--plain-underlined': isPlainOrUnderlined.value
|
|
30124
30219
|
}, props.class],
|
|
30125
|
-
"style":
|
|
30220
|
+
"style": [{
|
|
30221
|
+
'--v-textarea-scroll-bar-width': convertToUnit(scrollbarWidth.value)
|
|
30222
|
+
}, props.style]
|
|
30126
30223
|
}, rootAttrs, inputProps, {
|
|
30127
30224
|
"centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
|
|
30128
30225
|
"focused": isFocused.value
|
|
@@ -32277,7 +32374,7 @@ function createVuetify$1() {
|
|
|
32277
32374
|
};
|
|
32278
32375
|
});
|
|
32279
32376
|
}
|
|
32280
|
-
const version$1 = "3.10.
|
|
32377
|
+
const version$1 = "3.10.6";
|
|
32281
32378
|
createVuetify$1.version = version$1;
|
|
32282
32379
|
|
|
32283
32380
|
// Vue's inject() can only be used in setup
|
|
@@ -32302,7 +32399,7 @@ const createVuetify = function () {
|
|
|
32302
32399
|
...options
|
|
32303
32400
|
});
|
|
32304
32401
|
};
|
|
32305
|
-
const version = "3.10.
|
|
32402
|
+
const version = "3.10.6";
|
|
32306
32403
|
createVuetify.version = version;
|
|
32307
32404
|
|
|
32308
32405
|
export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useHotkey, useLayout, useLocale, useMask, useRtl, useTheme, version };
|