vuetify 3.10.5 → 3.10.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -6
- package/dist/json/attributes.json +3488 -3512
- package/dist/json/importMap-labs.json +20 -20
- package/dist/json/importMap.json +176 -176
- package/dist/json/tags.json +3 -9
- package/dist/json/web-types.json +6467 -6520
- package/dist/vuetify-labs.cjs +190 -82
- package/dist/vuetify-labs.css +4945 -4895
- package/dist/vuetify-labs.d.ts +117 -172
- package/dist/vuetify-labs.esm.js +190 -82
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +190 -82
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +171 -72
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3926 -3898
- package/dist/vuetify.d.ts +117 -137
- package/dist/vuetify.esm.js +171 -72
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +171 -72
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +118 -107
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +0 -61
- package/lib/components/VAutocomplete/VAutocomplete.js +15 -12
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VChipGroup/VChipGroup.d.ts +37 -0
- package/lib/components/VChipGroup/VChipGroup.js +3 -1
- package/lib/components/VChipGroup/VChipGroup.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.d.ts +6 -67
- package/lib/components/VCombobox/VCombobox.js +29 -30
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VCounter/VCounter.css +1 -0
- package/lib/components/VCounter/VCounter.sass +1 -0
- package/lib/components/VDatePicker/VDatePicker.js +1 -1
- package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
- package/lib/components/VFileInput/VFileInput.js +3 -2
- package/lib/components/VFileInput/VFileInput.js.map +1 -1
- package/lib/components/VList/VListItem.css +14 -12
- package/lib/components/VList/VListItem.js +4 -2
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VList/VListItem.sass +20 -18
- package/lib/components/VMenu/VMenu.js +22 -4
- package/lib/components/VMenu/VMenu.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.css +8 -0
- package/lib/components/VNumberInput/VNumberInput.js +5 -2
- package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.sass +10 -4
- package/lib/components/VSelect/VSelect.js +2 -1
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSkeletonLoader/VSkeletonLoader.css +17 -0
- package/lib/components/VSkeletonLoader/VSkeletonLoader.js +3 -3
- package/lib/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
- package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +7 -0
- package/lib/components/VSlideGroup/VSlideGroup.d.ts +25 -0
- package/lib/components/VSlideGroup/VSlideGroup.js +5 -1
- package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
- package/lib/components/VTabs/VTabs.d.ts +25 -0
- package/lib/components/VTextField/VTextField.js +3 -5
- package/lib/components/VTextField/VTextField.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.css +2 -2
- package/lib/components/VTextarea/VTextarea.d.ts +3 -3
- package/lib/components/VTextarea/VTextarea.js +23 -3
- package/lib/components/VTextarea/VTextarea.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.sass +4 -2
- package/lib/components/VWindow/VWindow.js +39 -3
- package/lib/components/VWindow/VWindow.js.map +1 -1
- package/lib/composables/date/date.js +1 -1
- package/lib/composables/date/date.js.map +1 -1
- package/lib/composables/group.js +1 -1
- package/lib/composables/group.js.map +1 -1
- package/lib/composables/nested/nested.js +12 -2
- package/lib/composables/nested/nested.js.map +1 -1
- package/lib/composables/virtual.js +2 -2
- package/lib/composables/virtual.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/framework.d.ts +60 -60
- package/lib/framework.js +1 -1
- package/lib/labs/VColorInput/VColorInput.d.ts +0 -40
- package/lib/labs/VColorInput/VColorInput.js +2 -2
- package/lib/labs/VColorInput/VColorInput.js.map +1 -1
- package/lib/labs/VDateInput/VDateInput.d.ts +0 -30
- package/lib/labs/VDateInput/VDateInput.js +16 -7
- package/lib/labs/VDateInput/VDateInput.js.map +1 -1
- package/lib/labs/VIconBtn/VIconBtn.css +22 -0
- package/lib/labs/VIconBtn/VIconBtn.scss +32 -0
- package/lib/labs/VMaskInput/VMaskInput.js +1 -1
- package/lib/labs/VMaskInput/VMaskInput.js.map +1 -1
- package/lib/labs/rules/rules.js +1 -1
- package/lib/labs/rules/rules.js.map +1 -1
- package/lib/util/helpers.js +4 -2
- package/lib/util/helpers.js.map +1 -1
- package/package.json +1 -1
package/dist/vuetify.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Vuetify v3.10.
|
|
2
|
+
* Vuetify v3.10.7
|
|
3
3
|
* Forged by John Leider
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -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,
|
|
@@ -12993,10 +13028,11 @@ const VTextField = genericComponent()({
|
|
|
12993
13028
|
props: {
|
|
12994
13029
|
class: fieldClass,
|
|
12995
13030
|
...slotProps
|
|
12996
|
-
}
|
|
13031
|
+
},
|
|
13032
|
+
controlRef
|
|
12997
13033
|
} = _ref3;
|
|
12998
13034
|
const inputNode = withDirectives(createElementVNode("input", mergeProps({
|
|
12999
|
-
"ref": inputRef,
|
|
13035
|
+
"ref": val => inputRef.value = controlRef.value = val,
|
|
13000
13036
|
"value": model.value,
|
|
13001
13037
|
"onInput": onInput,
|
|
13002
13038
|
"autofocus": props.autofocus,
|
|
@@ -13152,7 +13188,7 @@ function useVirtual(props, items) {
|
|
|
13152
13188
|
const start = performance.now();
|
|
13153
13189
|
offsets[0] = 0;
|
|
13154
13190
|
const length = items.value.length;
|
|
13155
|
-
for (let i = 1; i <= length
|
|
13191
|
+
for (let i = 1; i <= length; i++) {
|
|
13156
13192
|
offsets[i] = (offsets[i - 1] || 0) + getSize(i - 1);
|
|
13157
13193
|
}
|
|
13158
13194
|
updateTime.value = Math.max(updateTime.value, performance.now() - start);
|
|
@@ -13187,7 +13223,7 @@ function useVirtual(props, items) {
|
|
|
13187
13223
|
}
|
|
13188
13224
|
}
|
|
13189
13225
|
function calculateOffset(index) {
|
|
13190
|
-
index = clamp(index, 0, items.value.length
|
|
13226
|
+
index = clamp(index, 0, items.value.length);
|
|
13191
13227
|
const whole = Math.floor(index);
|
|
13192
13228
|
const fraction = index % 1;
|
|
13193
13229
|
const next = whole + 1;
|
|
@@ -13920,7 +13956,8 @@ const VSelect = genericComponent()({
|
|
|
13920
13956
|
"key": item.value,
|
|
13921
13957
|
"modelValue": isSelected,
|
|
13922
13958
|
"ripple": false,
|
|
13923
|
-
"tabindex": "-1"
|
|
13959
|
+
"tabindex": "-1",
|
|
13960
|
+
"onClick": event => event.preventDefault()
|
|
13924
13961
|
}, null) : undefined, camelizedProps.prependAvatar && createVNode(VAvatar, {
|
|
13925
13962
|
"image": camelizedProps.prependAvatar
|
|
13926
13963
|
}, null), camelizedProps.prependIcon && createVNode(VIcon, {
|
|
@@ -14192,10 +14229,7 @@ const makeVAutocompleteProps = propsFactory({
|
|
|
14192
14229
|
...omit(makeVTextFieldProps({
|
|
14193
14230
|
modelValue: null,
|
|
14194
14231
|
role: 'combobox'
|
|
14195
|
-
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
14196
|
-
...makeTransitionProps({
|
|
14197
|
-
transition: false
|
|
14198
|
-
})
|
|
14232
|
+
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
14199
14233
|
}, 'VAutocomplete');
|
|
14200
14234
|
const VAutocomplete = genericComponent()({
|
|
14201
14235
|
name: 'VAutocomplete',
|
|
@@ -14220,6 +14254,7 @@ const VAutocomplete = genericComponent()({
|
|
|
14220
14254
|
const vMenuRef = ref();
|
|
14221
14255
|
const vVirtualScrollRef = ref();
|
|
14222
14256
|
const selectionIndex = shallowRef(-1);
|
|
14257
|
+
const _searchLock = shallowRef(null);
|
|
14223
14258
|
const {
|
|
14224
14259
|
items,
|
|
14225
14260
|
transformIn,
|
|
@@ -14241,9 +14276,9 @@ const VAutocomplete = genericComponent()({
|
|
|
14241
14276
|
const {
|
|
14242
14277
|
filteredItems,
|
|
14243
14278
|
getMatches
|
|
14244
|
-
} = useFilter(props, items, () => isPristine.value ? '' : search.value);
|
|
14279
|
+
} = useFilter(props, items, () => _searchLock.value ?? (isPristine.value ? '' : search.value));
|
|
14245
14280
|
const displayItems = computed(() => {
|
|
14246
|
-
if (props.hideSelected) {
|
|
14281
|
+
if (props.hideSelected && _searchLock.value === null) {
|
|
14247
14282
|
return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
|
|
14248
14283
|
}
|
|
14249
14284
|
return filteredItems.value;
|
|
@@ -14374,6 +14409,7 @@ const VAutocomplete = genericComponent()({
|
|
|
14374
14409
|
isPristine.value = true;
|
|
14375
14410
|
vTextFieldRef.value?.focus();
|
|
14376
14411
|
}
|
|
14412
|
+
_searchLock.value = null;
|
|
14377
14413
|
}
|
|
14378
14414
|
function onFocusin(e) {
|
|
14379
14415
|
isFocused.value = true;
|
|
@@ -14409,6 +14445,7 @@ const VAutocomplete = genericComponent()({
|
|
|
14409
14445
|
} else {
|
|
14410
14446
|
const add = set !== false;
|
|
14411
14447
|
model.value = add ? [item] : [];
|
|
14448
|
+
_searchLock.value = isPristine.value ? '' : search.value ?? '';
|
|
14412
14449
|
search.value = add && !hasSelectionSlot.value ? item.title : '';
|
|
14413
14450
|
|
|
14414
14451
|
// watch for search watcher to trigger
|
|
@@ -14428,6 +14465,9 @@ const VAutocomplete = genericComponent()({
|
|
|
14428
14465
|
} else {
|
|
14429
14466
|
if (!props.multiple && search.value == null) model.value = [];
|
|
14430
14467
|
menu.value = false;
|
|
14468
|
+
if (!isPristine.value && search.value) {
|
|
14469
|
+
_searchLock.value = search.value;
|
|
14470
|
+
}
|
|
14431
14471
|
search.value = '';
|
|
14432
14472
|
selectionIndex.value = -1;
|
|
14433
14473
|
}
|
|
@@ -14437,13 +14477,14 @@ const VAutocomplete = genericComponent()({
|
|
|
14437
14477
|
if (val) menu.value = true;
|
|
14438
14478
|
isPristine.value = !val;
|
|
14439
14479
|
});
|
|
14440
|
-
watch(menu,
|
|
14441
|
-
if (!props.hideSelected &&
|
|
14480
|
+
watch(menu, val => {
|
|
14481
|
+
if (!props.hideSelected && val && model.value.length && isPristine.value) {
|
|
14442
14482
|
const index = displayItems.value.findIndex(item => model.value.some(s => item.value === s.value));
|
|
14443
14483
|
IN_BROWSER && window.requestAnimationFrame(() => {
|
|
14444
14484
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
|
14445
14485
|
});
|
|
14446
14486
|
}
|
|
14487
|
+
if (val) _searchLock.value = null;
|
|
14447
14488
|
});
|
|
14448
14489
|
watch(items, (newVal, oldVal) => {
|
|
14449
14490
|
if (menu.value) return;
|
|
@@ -14494,7 +14535,6 @@ const VAutocomplete = genericComponent()({
|
|
|
14494
14535
|
"maxHeight": 310,
|
|
14495
14536
|
"openOnClick": false,
|
|
14496
14537
|
"closeOnContentClick": false,
|
|
14497
|
-
"transition": props.transition,
|
|
14498
14538
|
"onAfterEnter": onAfterEnter,
|
|
14499
14539
|
"onAfterLeave": onAfterLeave
|
|
14500
14540
|
}, props.menuProps), {
|
|
@@ -14564,7 +14604,8 @@ const VAutocomplete = genericComponent()({
|
|
|
14564
14604
|
"key": item.value,
|
|
14565
14605
|
"modelValue": isSelected,
|
|
14566
14606
|
"ripple": false,
|
|
14567
|
-
"tabindex": "-1"
|
|
14607
|
+
"tabindex": "-1",
|
|
14608
|
+
"onClick": event => event.preventDefault()
|
|
14568
14609
|
}, null) : undefined, item.props.prependAvatar && createVNode(VAvatar, {
|
|
14569
14610
|
"image": item.props.prependAvatar
|
|
14570
14611
|
}, null), item.props.prependIcon && createVNode(VIcon, {
|
|
@@ -15922,7 +15963,19 @@ const VWindow = genericComponent()({
|
|
|
15922
15963
|
const activeIndex = computed(() => {
|
|
15923
15964
|
return group.items.value.findIndex(item => group.selected.value.includes(item.id));
|
|
15924
15965
|
});
|
|
15966
|
+
|
|
15967
|
+
// Fix for https://github.com/vuetifyjs/vuetify/issues/18447
|
|
15925
15968
|
watch(activeIndex, (newVal, oldVal) => {
|
|
15969
|
+
let scrollableParent;
|
|
15970
|
+
const savedScrollPosition = {
|
|
15971
|
+
left: 0,
|
|
15972
|
+
top: 0
|
|
15973
|
+
};
|
|
15974
|
+
if (IN_BROWSER && oldVal >= 0) {
|
|
15975
|
+
scrollableParent = getScrollParent(rootRef.value);
|
|
15976
|
+
savedScrollPosition.left = scrollableParent?.scrollLeft;
|
|
15977
|
+
savedScrollPosition.top = scrollableParent?.scrollTop;
|
|
15978
|
+
}
|
|
15926
15979
|
const itemsLength = group.items.value.length;
|
|
15927
15980
|
const lastIndex = itemsLength - 1;
|
|
15928
15981
|
if (itemsLength <= 2) {
|
|
@@ -15934,7 +15987,30 @@ const VWindow = genericComponent()({
|
|
|
15934
15987
|
} else {
|
|
15935
15988
|
isReversed.value = newVal < oldVal;
|
|
15936
15989
|
}
|
|
15937
|
-
|
|
15990
|
+
nextTick(() => {
|
|
15991
|
+
if (!IN_BROWSER || !scrollableParent) return;
|
|
15992
|
+
const currentScrollY = scrollableParent.scrollTop;
|
|
15993
|
+
if (currentScrollY !== savedScrollPosition.top) {
|
|
15994
|
+
scrollableParent.scrollTo({
|
|
15995
|
+
...savedScrollPosition,
|
|
15996
|
+
behavior: 'instant'
|
|
15997
|
+
});
|
|
15998
|
+
}
|
|
15999
|
+
requestAnimationFrame(() => {
|
|
16000
|
+
if (!scrollableParent) return;
|
|
16001
|
+
const rafScrollY = scrollableParent.scrollTop;
|
|
16002
|
+
if (rafScrollY !== savedScrollPosition.top) {
|
|
16003
|
+
scrollableParent.scrollTo({
|
|
16004
|
+
...savedScrollPosition,
|
|
16005
|
+
behavior: 'instant'
|
|
16006
|
+
});
|
|
16007
|
+
}
|
|
16008
|
+
});
|
|
16009
|
+
});
|
|
16010
|
+
}, {
|
|
16011
|
+
flush: 'sync'
|
|
16012
|
+
}); // Run synchronously before DOM updates
|
|
16013
|
+
|
|
15938
16014
|
provide(VWindowSymbol, {
|
|
15939
16015
|
transition,
|
|
15940
16016
|
isReversed,
|
|
@@ -18839,7 +18915,7 @@ function createDate(options, locale) {
|
|
|
18839
18915
|
};
|
|
18840
18916
|
}
|
|
18841
18917
|
function createDateRange(adapter, start, stop) {
|
|
18842
|
-
const diff = adapter.getDiff(adapter.
|
|
18918
|
+
const diff = adapter.getDiff(new Date(`${adapter.toISO(stop ?? start)}T00:00:00Z`), new Date(`${adapter.toISO(start)}T00:00:00Z`), 'days');
|
|
18843
18919
|
const datesInRange = [start];
|
|
18844
18920
|
for (let i = 1; i < diff; i++) {
|
|
18845
18921
|
const nextDate = adapter.addDays(start, i);
|
|
@@ -19513,10 +19589,7 @@ const makeVComboboxProps = propsFactory({
|
|
|
19513
19589
|
...omit(makeVTextFieldProps({
|
|
19514
19590
|
modelValue: null,
|
|
19515
19591
|
role: 'combobox'
|
|
19516
|
-
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
19517
|
-
...makeTransitionProps({
|
|
19518
|
-
transition: false
|
|
19519
|
-
})
|
|
19592
|
+
}), ['validationValue', 'dirty', 'appendInnerIcon'])
|
|
19520
19593
|
}, 'VCombobox');
|
|
19521
19594
|
const VCombobox = genericComponent()({
|
|
19522
19595
|
name: 'VCombobox',
|
|
@@ -19560,13 +19633,16 @@ const VCombobox = genericComponent()({
|
|
|
19560
19633
|
const hasChips = computed(() => !!(props.chips || slots.chip));
|
|
19561
19634
|
const hasSelectionSlot = computed(() => hasChips.value || !!slots.selection);
|
|
19562
19635
|
const _search = shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
|
|
19636
|
+
const _searchLock = shallowRef(null);
|
|
19563
19637
|
const search = computed({
|
|
19564
19638
|
get: () => {
|
|
19565
19639
|
return _search.value;
|
|
19566
19640
|
},
|
|
19567
19641
|
set: async val => {
|
|
19568
19642
|
_search.value = val ?? '';
|
|
19569
|
-
if (!props.multiple && !hasSelectionSlot.value) {
|
|
19643
|
+
if (val === null || val === '' && !props.multiple && !hasSelectionSlot.value) {
|
|
19644
|
+
model.value = [];
|
|
19645
|
+
} else if (!props.multiple && !hasSelectionSlot.value) {
|
|
19570
19646
|
model.value = [transformItem$3(props, val)];
|
|
19571
19647
|
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
|
19572
19648
|
}
|
|
@@ -19594,9 +19670,9 @@ const VCombobox = genericComponent()({
|
|
|
19594
19670
|
const {
|
|
19595
19671
|
filteredItems,
|
|
19596
19672
|
getMatches
|
|
19597
|
-
} = useFilter(props, items, () => props.alwaysFilter || !isPristine.value ? search.value : '');
|
|
19673
|
+
} = useFilter(props, items, () => _searchLock.value ?? (props.alwaysFilter || !isPristine.value ? search.value : ''));
|
|
19598
19674
|
const displayItems = computed(() => {
|
|
19599
|
-
if (props.hideSelected) {
|
|
19675
|
+
if (props.hideSelected && _searchLock.value === null) {
|
|
19600
19676
|
return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
|
|
19601
19677
|
}
|
|
19602
19678
|
return filteredItems.value;
|
|
@@ -19677,22 +19753,19 @@ const VCombobox = genericComponent()({
|
|
|
19677
19753
|
if (['Escape'].includes(e.key)) {
|
|
19678
19754
|
menu.value = false;
|
|
19679
19755
|
}
|
|
19680
|
-
if (['Enter', '
|
|
19681
|
-
|
|
19682
|
-
|
|
19683
|
-
|
|
19684
|
-
|
|
19685
|
-
|
|
19686
|
-
|
|
19687
|
-
select(filteredItems.value[0]);
|
|
19688
|
-
}
|
|
19689
|
-
isPristine.value = true;
|
|
19756
|
+
if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key) && !model.value.some(_ref2 => {
|
|
19757
|
+
let {
|
|
19758
|
+
value
|
|
19759
|
+
} = _ref2;
|
|
19760
|
+
return value === displayItems.value[0].value;
|
|
19761
|
+
})) {
|
|
19762
|
+
select(filteredItems.value[0]);
|
|
19690
19763
|
}
|
|
19691
19764
|
if (e.key === 'ArrowDown' && highlightFirst.value) {
|
|
19692
19765
|
listRef.value?.focus('next');
|
|
19693
19766
|
}
|
|
19694
19767
|
if (e.key === 'Enter' && search.value) {
|
|
19695
|
-
select(transformItem$3(props, search.value));
|
|
19768
|
+
select(transformItem$3(props, search.value), true, true);
|
|
19696
19769
|
if (hasSelectionSlot.value) _search.value = '';
|
|
19697
19770
|
}
|
|
19698
19771
|
if (['Backspace', 'Delete'].includes(e.key)) {
|
|
@@ -19737,13 +19810,15 @@ const VCombobox = genericComponent()({
|
|
|
19737
19810
|
}
|
|
19738
19811
|
function onAfterLeave() {
|
|
19739
19812
|
if (isFocused.value) {
|
|
19740
|
-
isPristine.value = true;
|
|
19741
19813
|
vTextFieldRef.value?.focus();
|
|
19742
19814
|
}
|
|
19815
|
+
isPristine.value = true;
|
|
19816
|
+
_searchLock.value = null;
|
|
19743
19817
|
}
|
|
19744
19818
|
/** @param set - null means toggle */
|
|
19745
19819
|
function select(item) {
|
|
19746
19820
|
let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
19821
|
+
let keepMenu = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
19747
19822
|
if (!item || item.props.disabled) return;
|
|
19748
19823
|
if (props.multiple) {
|
|
19749
19824
|
const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
|
|
@@ -19761,11 +19836,14 @@ const VCombobox = genericComponent()({
|
|
|
19761
19836
|
} else {
|
|
19762
19837
|
const add = set !== false;
|
|
19763
19838
|
model.value = add ? [item] : [];
|
|
19839
|
+
if ((!isPristine.value || props.alwaysFilter) && _search.value) {
|
|
19840
|
+
_searchLock.value = _search.value;
|
|
19841
|
+
}
|
|
19764
19842
|
_search.value = add && !hasSelectionSlot.value ? item.title : '';
|
|
19765
19843
|
|
|
19766
19844
|
// watch for search watcher to trigger
|
|
19767
19845
|
nextTick(() => {
|
|
19768
|
-
menu.value =
|
|
19846
|
+
menu.value = keepMenu;
|
|
19769
19847
|
isPristine.value = true;
|
|
19770
19848
|
});
|
|
19771
19849
|
}
|
|
@@ -19779,9 +19857,6 @@ const VCombobox = genericComponent()({
|
|
|
19779
19857
|
function onFocusout(e) {
|
|
19780
19858
|
listHasFocus.value = false;
|
|
19781
19859
|
}
|
|
19782
|
-
function onUpdateModelValue(v) {
|
|
19783
|
-
if (v == null || v === '' && !props.multiple && !hasSelectionSlot.value) model.value = [];
|
|
19784
|
-
}
|
|
19785
19860
|
watch(isFocused, (val, oldVal) => {
|
|
19786
19861
|
if (val || val === oldVal) return;
|
|
19787
19862
|
selectionIndex.value = -1;
|
|
@@ -19804,13 +19879,14 @@ const VCombobox = genericComponent()({
|
|
|
19804
19879
|
}
|
|
19805
19880
|
}
|
|
19806
19881
|
});
|
|
19807
|
-
watch(menu,
|
|
19808
|
-
if (!props.hideSelected &&
|
|
19882
|
+
watch(menu, val => {
|
|
19883
|
+
if (!props.hideSelected && val && model.value.length && isPristine.value) {
|
|
19809
19884
|
const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
|
|
19810
19885
|
IN_BROWSER && window.requestAnimationFrame(() => {
|
|
19811
19886
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
|
19812
19887
|
});
|
|
19813
19888
|
}
|
|
19889
|
+
if (val) _searchLock.value = null;
|
|
19814
19890
|
});
|
|
19815
19891
|
watch(items, (newVal, oldVal) => {
|
|
19816
19892
|
if (menu.value) return;
|
|
@@ -19826,7 +19902,7 @@ const VCombobox = genericComponent()({
|
|
|
19826
19902
|
"ref": vTextFieldRef
|
|
19827
19903
|
}, textFieldProps, {
|
|
19828
19904
|
"modelValue": search.value,
|
|
19829
|
-
"onUpdate:modelValue":
|
|
19905
|
+
"onUpdate:modelValue": $event => search.value = $event,
|
|
19830
19906
|
"focused": isFocused.value,
|
|
19831
19907
|
"onUpdate:focused": $event => isFocused.value = $event,
|
|
19832
19908
|
"validationValue": model.externalValue,
|
|
@@ -19861,7 +19937,6 @@ const VCombobox = genericComponent()({
|
|
|
19861
19937
|
"maxHeight": 310,
|
|
19862
19938
|
"openOnClick": false,
|
|
19863
19939
|
"closeOnContentClick": false,
|
|
19864
|
-
"transition": props.transition,
|
|
19865
19940
|
"onAfterEnter": onAfterEnter,
|
|
19866
19941
|
"onAfterLeave": onAfterLeave
|
|
19867
19942
|
}, props.menuProps), {
|
|
@@ -19931,7 +20006,8 @@ const VCombobox = genericComponent()({
|
|
|
19931
20006
|
"key": item.value,
|
|
19932
20007
|
"modelValue": isSelected,
|
|
19933
20008
|
"ripple": false,
|
|
19934
|
-
"tabindex": "-1"
|
|
20009
|
+
"tabindex": "-1",
|
|
20010
|
+
"onClick": event => event.preventDefault()
|
|
19935
20011
|
}, null) : undefined, item.props.prependAvatar && createVNode(VAvatar, {
|
|
19936
20012
|
"image": item.props.prependAvatar
|
|
19937
20013
|
}, null), item.props.prependIcon && createVNode(VIcon, {
|
|
@@ -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
|
}
|
|
@@ -25364,10 +25440,11 @@ const VFileInput = genericComponent()({
|
|
|
25364
25440
|
props: {
|
|
25365
25441
|
class: fieldClass,
|
|
25366
25442
|
...slotProps
|
|
25367
|
-
}
|
|
25443
|
+
},
|
|
25444
|
+
controlRef
|
|
25368
25445
|
} = _ref4;
|
|
25369
25446
|
return createElementVNode(Fragment, null, [createElementVNode("input", mergeProps({
|
|
25370
|
-
"ref": inputRef,
|
|
25447
|
+
"ref": val => inputRef.value = controlRef.value = val,
|
|
25371
25448
|
"type": "file",
|
|
25372
25449
|
"accept": inputAccept,
|
|
25373
25450
|
"readonly": isReadonly.value,
|
|
@@ -26844,7 +26921,7 @@ const VNumberInput = genericComponent()({
|
|
|
26844
26921
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
|
26845
26922
|
const _inputText = shallowRef(null);
|
|
26846
26923
|
watchEffect(() => {
|
|
26847
|
-
if (isFocused.value && !controlsDisabled.value && Number(_inputText.value) === model.value) ; else if (model.value == null) {
|
|
26924
|
+
if (isFocused.value && !controlsDisabled.value && Number(_inputText.value?.replace(decimalSeparator.value, '.')) === model.value) ; else if (model.value == null) {
|
|
26848
26925
|
_inputText.value = null;
|
|
26849
26926
|
} else if (!isNaN(model.value)) {
|
|
26850
26927
|
_inputText.value = correctPrecision(model.value);
|
|
@@ -26939,6 +27016,7 @@ const VNumberInput = genericComponent()({
|
|
|
26939
27016
|
if (!new RegExp(`^-?\\d*${escapeForRegex(decimalSeparator.value)}?\\d*$`).test(potentialNewInputVal)) {
|
|
26940
27017
|
e.preventDefault();
|
|
26941
27018
|
inputElement.value = potentialNewNumber;
|
|
27019
|
+
nextTick(() => inputText.value = potentialNewNumber);
|
|
26942
27020
|
}
|
|
26943
27021
|
if (props.precision == null) return;
|
|
26944
27022
|
|
|
@@ -26946,13 +27024,15 @@ const VNumberInput = genericComponent()({
|
|
|
26946
27024
|
if (potentialNewInputVal.split(decimalSeparator.value)[1]?.length > props.precision) {
|
|
26947
27025
|
e.preventDefault();
|
|
26948
27026
|
inputElement.value = potentialNewNumber;
|
|
27027
|
+
nextTick(() => inputText.value = potentialNewNumber);
|
|
26949
27028
|
const cursorPosition = (selectionStart ?? 0) + e.data.length;
|
|
26950
27029
|
inputElement.setSelectionRange(cursorPosition, cursorPosition);
|
|
26951
27030
|
}
|
|
26952
27031
|
// Ignore decimal separator when precision = 0
|
|
26953
|
-
if (props.precision === 0 && potentialNewInputVal.
|
|
27032
|
+
if (props.precision === 0 && potentialNewInputVal.endsWith(decimalSeparator.value)) {
|
|
26954
27033
|
e.preventDefault();
|
|
26955
27034
|
inputElement.value = potentialNewNumber;
|
|
27035
|
+
nextTick(() => inputText.value = potentialNewNumber);
|
|
26956
27036
|
}
|
|
26957
27037
|
}
|
|
26958
27038
|
async function onKeydown(e) {
|
|
@@ -28148,12 +28228,12 @@ const VSkeletonLoader = genericComponent()({
|
|
|
28148
28228
|
ariaLabel: t(props.loadingText),
|
|
28149
28229
|
role: 'alert'
|
|
28150
28230
|
};
|
|
28151
|
-
return
|
|
28231
|
+
return isLoading ? createElementVNode("div", mergeProps({
|
|
28152
28232
|
"class": ['v-skeleton-loader', {
|
|
28153
28233
|
'v-skeleton-loader--boilerplate': props.boilerplate
|
|
28154
28234
|
}, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
|
|
28155
28235
|
"style": [backgroundColorStyles.value, dimensionStyles.value]
|
|
28156
|
-
}, loadingProps, attrs), [items.value]) : slots.default?.()]);
|
|
28236
|
+
}, loadingProps, attrs), [items.value]) : createElementVNode(Fragment, null, [slots.default?.()]);
|
|
28157
28237
|
});
|
|
28158
28238
|
return {};
|
|
28159
28239
|
}
|
|
@@ -30018,6 +30098,10 @@ const VTextarea = genericComponent()({
|
|
|
30018
30098
|
const vFieldRef = ref();
|
|
30019
30099
|
const controlHeight = shallowRef('');
|
|
30020
30100
|
const textareaRef = ref();
|
|
30101
|
+
const scrollbarWidth = ref(0);
|
|
30102
|
+
const {
|
|
30103
|
+
platform
|
|
30104
|
+
} = useDisplay();
|
|
30021
30105
|
const autocomplete = useAutocomplete(props);
|
|
30022
30106
|
const isActive = computed(() => props.persistentPlaceholder || isFocused.value || props.active);
|
|
30023
30107
|
function onFocus() {
|
|
@@ -30062,6 +30146,18 @@ const VTextarea = genericComponent()({
|
|
|
30062
30146
|
if (!props.autoGrow) rows.value = Number(props.rows);
|
|
30063
30147
|
});
|
|
30064
30148
|
function calculateInputHeight() {
|
|
30149
|
+
nextTick(() => {
|
|
30150
|
+
if (!textareaRef.value) return;
|
|
30151
|
+
if (platform.value.firefox) {
|
|
30152
|
+
scrollbarWidth.value = 12;
|
|
30153
|
+
return;
|
|
30154
|
+
}
|
|
30155
|
+
const {
|
|
30156
|
+
offsetWidth,
|
|
30157
|
+
clientWidth
|
|
30158
|
+
} = textareaRef.value;
|
|
30159
|
+
scrollbarWidth.value = Math.max(0, offsetWidth - clientWidth);
|
|
30160
|
+
});
|
|
30065
30161
|
if (!props.autoGrow) return;
|
|
30066
30162
|
nextTick(() => {
|
|
30067
30163
|
if (!sizerRef.value || !vFieldRef.value) return;
|
|
@@ -30122,7 +30218,9 @@ const VTextarea = genericComponent()({
|
|
|
30122
30218
|
'v-textarea--no-resize': props.noResize || props.autoGrow,
|
|
30123
30219
|
'v-input--plain-underlined': isPlainOrUnderlined.value
|
|
30124
30220
|
}, props.class],
|
|
30125
|
-
"style":
|
|
30221
|
+
"style": [{
|
|
30222
|
+
'--v-textarea-scroll-bar-width': convertToUnit(scrollbarWidth.value)
|
|
30223
|
+
}, props.style]
|
|
30126
30224
|
}, rootAttrs, inputProps, {
|
|
30127
30225
|
"centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
|
|
30128
30226
|
"focused": isFocused.value
|
|
@@ -30162,12 +30260,13 @@ const VTextarea = genericComponent()({
|
|
|
30162
30260
|
props: {
|
|
30163
30261
|
class: fieldClass,
|
|
30164
30262
|
...slotProps
|
|
30165
|
-
}
|
|
30263
|
+
},
|
|
30264
|
+
controlRef
|
|
30166
30265
|
} = _ref3;
|
|
30167
30266
|
return createElementVNode(Fragment, null, [props.prefix && createElementVNode("span", {
|
|
30168
30267
|
"class": "v-text-field__prefix"
|
|
30169
30268
|
}, [props.prefix]), withDirectives(createElementVNode("textarea", mergeProps({
|
|
30170
|
-
"ref": textareaRef,
|
|
30269
|
+
"ref": val => textareaRef.value = controlRef.value = val,
|
|
30171
30270
|
"class": fieldClass,
|
|
30172
30271
|
"value": model.value,
|
|
30173
30272
|
"onInput": onInput,
|
|
@@ -32277,7 +32376,7 @@ function createVuetify$1() {
|
|
|
32277
32376
|
};
|
|
32278
32377
|
});
|
|
32279
32378
|
}
|
|
32280
|
-
const version$1 = "3.10.
|
|
32379
|
+
const version$1 = "3.10.7";
|
|
32281
32380
|
createVuetify$1.version = version$1;
|
|
32282
32381
|
|
|
32283
32382
|
// Vue's inject() can only be used in setup
|
|
@@ -32302,7 +32401,7 @@ const createVuetify = function () {
|
|
|
32302
32401
|
...options
|
|
32303
32402
|
});
|
|
32304
32403
|
};
|
|
32305
|
-
const version = "3.10.
|
|
32404
|
+
const version = "3.10.7";
|
|
32306
32405
|
createVuetify.version = version;
|
|
32307
32406
|
|
|
32308
32407
|
export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useHotkey, useLayout, useLocale, useMask, useRtl, useTheme, version };
|