@vuetify/nightly 3.8.0-beta.0-dev.2025-03-31 → 3.8.0-dev.2025-04-03
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/CHANGELOG.md +10 -96
- package/dist/json/attributes.json +3028 -3028
- package/dist/json/importMap-labs.json +32 -32
- package/dist/json/importMap.json +154 -154
- package/dist/json/web-types.json +5664 -5664
- package/dist/vuetify-labs.cjs +73 -67
- package/dist/vuetify-labs.css +3832 -3835
- package/dist/vuetify-labs.d.ts +110 -71
- package/dist/vuetify-labs.esm.js +73 -67
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +73 -67
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +68 -58
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +4692 -4695
- package/dist/vuetify.d.ts +110 -71
- package/dist/vuetify.esm.js +68 -58
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +68 -58
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +88 -87
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.css +0 -1
- package/lib/components/VAutocomplete/VAutocomplete.js +16 -19
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.sass +0 -1
- package/lib/components/VColorPicker/VColorPickerPreview.js +4 -3
- package/lib/components/VColorPicker/VColorPickerPreview.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.css +0 -1
- package/lib/components/VCombobox/VCombobox.js +22 -20
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.sass +0 -1
- package/lib/components/VEmptyState/VEmptyState.js +3 -1
- package/lib/components/VEmptyState/VEmptyState.js.map +1 -1
- package/lib/components/VField/VField.d.ts +3 -0
- package/lib/components/VField/VField.js +3 -2
- package/lib/components/VField/VField.js.map +1 -1
- package/lib/components/VInput/VInput.css +11 -11
- package/lib/components/VInput/VInput.sass +1 -1
- package/lib/components/VNumberInput/VNumberInput.d.ts +39 -12
- package/lib/components/VSelect/VSelect.css +0 -1
- package/lib/components/VSelect/VSelect.js +11 -9
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSelect/VSelect.sass +0 -1
- package/lib/components/VTextField/VTextField.d.ts +12 -3
- package/lib/composables/virtual.js +6 -1
- package/lib/composables/virtual.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +56 -56
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VDateInput/VDateInput.js +3 -8
- package/lib/labs/VDateInput/VDateInput.js.map +1 -1
- package/lib/labs/VFileUpload/VFileUpload.js +2 -1
- package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
- package/lib/util/helpers.d.ts +1 -2
- package/lib/util/helpers.js +1 -11
- package/lib/util/helpers.js.map +1 -1
- package/package.json +1 -1
package/dist/vuetify-labs.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.8.0-
|
2
|
+
* Vuetify v3.8.0-dev.2025-04-03
|
3
3
|
* Forged by John Leider
|
4
4
|
* Released under the MIT License.
|
5
5
|
*/
|
@@ -11736,7 +11736,7 @@
|
|
11736
11736
|
return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : props.baseColor;
|
11737
11737
|
});
|
11738
11738
|
const iconColor = vue.computed(() => {
|
11739
|
-
if (!props.iconColor) return undefined;
|
11739
|
+
if (!props.iconColor || props.glow && !isFocused.value) return undefined;
|
11740
11740
|
return props.iconColor === true ? color.value : props.iconColor;
|
11741
11741
|
});
|
11742
11742
|
const {
|
@@ -11934,7 +11934,8 @@
|
|
11934
11934
|
})])]);
|
11935
11935
|
});
|
11936
11936
|
return {
|
11937
|
-
controlRef
|
11937
|
+
controlRef,
|
11938
|
+
fieldIconColor: iconColor
|
11938
11939
|
};
|
11939
11940
|
}
|
11940
11941
|
});
|
@@ -12284,7 +12285,12 @@
|
|
12284
12285
|
}
|
12285
12286
|
function calculateOffset(index) {
|
12286
12287
|
index = clamp(index, 0, items.value.length - 1);
|
12287
|
-
|
12288
|
+
const whole = Math.floor(index);
|
12289
|
+
const fraction = index % 1;
|
12290
|
+
const next = whole + 1;
|
12291
|
+
const wholeOffset = offsets[whole] || 0;
|
12292
|
+
const nextOffset = offsets[next] || wholeOffset;
|
12293
|
+
return wholeOffset + (nextOffset - wholeOffset) * fraction;
|
12288
12294
|
}
|
12289
12295
|
function calculateIndex(scrollTop) {
|
12290
12296
|
return binaryClosest(offsets, scrollTop);
|
@@ -12672,14 +12678,6 @@
|
|
12672
12678
|
const vTextFieldRef = vue.ref();
|
12673
12679
|
const vMenuRef = vue.ref();
|
12674
12680
|
const vVirtualScrollRef = vue.ref();
|
12675
|
-
const _menu = useProxiedModel(props, 'menu');
|
12676
|
-
const menu = vue.computed({
|
12677
|
-
get: () => _menu.value,
|
12678
|
-
set: v => {
|
12679
|
-
if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
|
12680
|
-
_menu.value = v;
|
12681
|
-
}
|
12682
|
-
});
|
12683
12681
|
const {
|
12684
12682
|
items,
|
12685
12683
|
transformIn,
|
@@ -12695,7 +12693,6 @@
|
|
12695
12693
|
const form = useForm(props);
|
12696
12694
|
const selectedValues = vue.computed(() => model.value.map(selection => selection.value));
|
12697
12695
|
const isFocused = vue.shallowRef(false);
|
12698
|
-
const label = vue.computed(() => menu.value ? props.closeText : props.openText);
|
12699
12696
|
let keyboardLookupPrefix = '';
|
12700
12697
|
let keyboardLookupLastTime;
|
12701
12698
|
const displayItems = vue.computed(() => {
|
@@ -12705,6 +12702,16 @@
|
|
12705
12702
|
return items.value;
|
12706
12703
|
});
|
12707
12704
|
const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
|
12705
|
+
const _menu = useProxiedModel(props, 'menu');
|
12706
|
+
const menu = vue.computed({
|
12707
|
+
get: () => _menu.value,
|
12708
|
+
set: v => {
|
12709
|
+
if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
|
12710
|
+
if (v && menuDisabled.value) return;
|
12711
|
+
_menu.value = v;
|
12712
|
+
}
|
12713
|
+
});
|
12714
|
+
const label = vue.computed(() => menu.value ? props.closeText : props.openText);
|
12708
12715
|
const computedMenuProps = vue.computed(() => {
|
12709
12716
|
return {
|
12710
12717
|
...props.menuProps,
|
@@ -13000,6 +13007,7 @@
|
|
13000
13007
|
}
|
13001
13008
|
return vue.createVNode(vue.Fragment, null, [slots['append-inner']?.(...args), props.menuIcon ? vue.createVNode(VIcon, {
|
13002
13009
|
"class": "v-select__menu-icon",
|
13010
|
+
"color": vTextFieldRef.value?.fieldIconColor,
|
13003
13011
|
"icon": props.menuIcon
|
13004
13012
|
}, null) : undefined]);
|
13005
13013
|
}
|
@@ -13203,17 +13211,8 @@
|
|
13203
13211
|
const listHasFocus = vue.shallowRef(false);
|
13204
13212
|
const vMenuRef = vue.ref();
|
13205
13213
|
const vVirtualScrollRef = vue.ref();
|
13206
|
-
const _menu = useProxiedModel(props, 'menu');
|
13207
|
-
const menu = vue.computed({
|
13208
|
-
get: () => _menu.value,
|
13209
|
-
set: v => {
|
13210
|
-
if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
|
13211
|
-
_menu.value = v;
|
13212
|
-
}
|
13213
|
-
});
|
13214
13214
|
const selectionIndex = vue.shallowRef(-1);
|
13215
13215
|
const color = vue.computed(() => vTextFieldRef.value?.color);
|
13216
|
-
const label = vue.computed(() => menu.value ? props.closeText : props.openText);
|
13217
13216
|
const {
|
13218
13217
|
items,
|
13219
13218
|
transformIn,
|
@@ -13250,6 +13249,16 @@
|
|
13250
13249
|
return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
|
13251
13250
|
});
|
13252
13251
|
const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
|
13252
|
+
const _menu = useProxiedModel(props, 'menu');
|
13253
|
+
const menu = vue.computed({
|
13254
|
+
get: () => _menu.value,
|
13255
|
+
set: v => {
|
13256
|
+
if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
|
13257
|
+
if (v && menuDisabled.value) return;
|
13258
|
+
_menu.value = v;
|
13259
|
+
}
|
13260
|
+
});
|
13261
|
+
const label = vue.computed(() => menu.value ? props.closeText : props.openText);
|
13253
13262
|
const listRef = vue.ref();
|
13254
13263
|
const listEvents = useScrolling(listRef, vTextFieldRef);
|
13255
13264
|
function onClear(e) {
|
@@ -13406,12 +13415,7 @@
|
|
13406
13415
|
} else {
|
13407
13416
|
if (!props.multiple && search.value == null) model.value = [];
|
13408
13417
|
menu.value = false;
|
13409
|
-
if (
|
13410
|
-
let {
|
13411
|
-
title
|
13412
|
-
} = _ref3;
|
13413
|
-
return title === search.value;
|
13414
|
-
})) search.value = '';
|
13418
|
+
if (props.multiple || hasSelectionSlot.value) search.value = '';
|
13415
13419
|
selectionIndex.value = -1;
|
13416
13420
|
}
|
13417
13421
|
});
|
@@ -13499,12 +13503,12 @@
|
|
13499
13503
|
"items": displayItems.value,
|
13500
13504
|
"itemKey": "value"
|
13501
13505
|
}, {
|
13502
|
-
default:
|
13506
|
+
default: _ref3 => {
|
13503
13507
|
let {
|
13504
13508
|
item,
|
13505
13509
|
index,
|
13506
13510
|
itemRef
|
13507
|
-
} =
|
13511
|
+
} = _ref3;
|
13508
13512
|
const itemProps = vue.mergeProps(item.props, {
|
13509
13513
|
ref: itemRef,
|
13510
13514
|
key: item.value,
|
@@ -13518,10 +13522,10 @@
|
|
13518
13522
|
}) ?? vue.createVNode(VListItem, vue.mergeProps(itemProps, {
|
13519
13523
|
"role": "option"
|
13520
13524
|
}), {
|
13521
|
-
prepend:
|
13525
|
+
prepend: _ref4 => {
|
13522
13526
|
let {
|
13523
13527
|
isSelected
|
13524
|
-
} =
|
13528
|
+
} = _ref4;
|
13525
13529
|
return vue.createVNode(vue.Fragment, null, [props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
|
13526
13530
|
"key": item.value,
|
13527
13531
|
"modelValue": isSelected,
|
@@ -13604,6 +13608,7 @@
|
|
13604
13608
|
}
|
13605
13609
|
return vue.createVNode(vue.Fragment, null, [slots['append-inner']?.(...args), props.menuIcon ? vue.createVNode(VIcon, {
|
13606
13610
|
"class": "v-autocomplete__menu-icon",
|
13611
|
+
"color": vTextFieldRef.value?.fieldIconColor,
|
13607
13612
|
"icon": props.menuIcon,
|
13608
13613
|
"onMousedown": onMousedownMenuIcon,
|
13609
13614
|
"onClick": noop,
|
@@ -16390,7 +16395,7 @@
|
|
16390
16395
|
const abortController = new AbortController();
|
16391
16396
|
vue.onUnmounted(() => abortController.abort());
|
16392
16397
|
async function openEyeDropper() {
|
16393
|
-
if (!SUPPORTS_EYE_DROPPER) return;
|
16398
|
+
if (!SUPPORTS_EYE_DROPPER || props.disabled) return;
|
16394
16399
|
const eyeDropper = new window.EyeDropper();
|
16395
16400
|
try {
|
16396
16401
|
const result = await eyeDropper.open({
|
@@ -16412,10 +16417,11 @@
|
|
16412
16417
|
"class": "v-color-picker-preview__eye-dropper",
|
16413
16418
|
"key": "eyeDropper"
|
16414
16419
|
}, [vue.createVNode(VBtn, {
|
16415
|
-
"
|
16420
|
+
"density": "comfortable",
|
16421
|
+
"disabled": props.disabled,
|
16416
16422
|
"icon": "$eyeDropper",
|
16417
16423
|
"variant": "plain",
|
16418
|
-
"
|
16424
|
+
"onClick": openEyeDropper
|
16419
16425
|
}, null)]), vue.createVNode("div", {
|
16420
16426
|
"class": "v-color-picker-preview__dot"
|
16421
16427
|
}, [vue.createVNode("div", {
|
@@ -17972,18 +17978,9 @@
|
|
17972
17978
|
const listHasFocus = vue.shallowRef(false);
|
17973
17979
|
const vMenuRef = vue.ref();
|
17974
17980
|
const vVirtualScrollRef = vue.ref();
|
17975
|
-
const _menu = useProxiedModel(props, 'menu');
|
17976
|
-
const menu = vue.computed({
|
17977
|
-
get: () => _menu.value,
|
17978
|
-
set: v => {
|
17979
|
-
if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
|
17980
|
-
_menu.value = v;
|
17981
|
-
}
|
17982
|
-
});
|
17983
17981
|
const selectionIndex = vue.shallowRef(-1);
|
17984
17982
|
let cleared = false;
|
17985
17983
|
const color = vue.computed(() => vTextFieldRef.value?.color);
|
17986
|
-
const label = vue.computed(() => menu.value ? props.closeText : props.openText);
|
17987
17984
|
const {
|
17988
17985
|
items,
|
17989
17986
|
transformIn,
|
@@ -18027,6 +18024,27 @@
|
|
18027
18024
|
const counterValue = vue.computed(() => {
|
18028
18025
|
return typeof props.counterValue === 'function' ? props.counterValue(model.value) : typeof props.counterValue === 'number' ? props.counterValue : props.multiple ? model.value.length : search.value.length;
|
18029
18026
|
});
|
18027
|
+
const {
|
18028
|
+
filteredItems,
|
18029
|
+
getMatches
|
18030
|
+
} = useFilter(props, items, () => isPristine.value ? '' : search.value);
|
18031
|
+
const displayItems = vue.computed(() => {
|
18032
|
+
if (props.hideSelected) {
|
18033
|
+
return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
|
18034
|
+
}
|
18035
|
+
return filteredItems.value;
|
18036
|
+
});
|
18037
|
+
const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
|
18038
|
+
const _menu = useProxiedModel(props, 'menu');
|
18039
|
+
const menu = vue.computed({
|
18040
|
+
get: () => _menu.value,
|
18041
|
+
set: v => {
|
18042
|
+
if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
|
18043
|
+
if (v && menuDisabled.value) return;
|
18044
|
+
_menu.value = v;
|
18045
|
+
}
|
18046
|
+
});
|
18047
|
+
const label = vue.computed(() => menu.value ? props.closeText : props.openText);
|
18030
18048
|
vue.watch(_search, value => {
|
18031
18049
|
if (cleared) {
|
18032
18050
|
// wait for clear to finish, VTextField sets _search to null
|
@@ -18042,22 +18060,11 @@
|
|
18042
18060
|
_search.value = value[0]?.title ?? '';
|
18043
18061
|
}
|
18044
18062
|
});
|
18045
|
-
const {
|
18046
|
-
filteredItems,
|
18047
|
-
getMatches
|
18048
|
-
} = useFilter(props, items, () => isPristine.value ? '' : search.value);
|
18049
|
-
const displayItems = vue.computed(() => {
|
18050
|
-
if (props.hideSelected) {
|
18051
|
-
return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
|
18052
|
-
}
|
18053
|
-
return filteredItems.value;
|
18054
|
-
});
|
18055
18063
|
const selectedValues = vue.computed(() => model.value.map(selection => selection.value));
|
18056
18064
|
const highlightFirst = vue.computed(() => {
|
18057
18065
|
const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
|
18058
18066
|
return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
|
18059
18067
|
});
|
18060
|
-
const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
|
18061
18068
|
const listRef = vue.ref();
|
18062
18069
|
const listEvents = useScrolling(listRef, vTextFieldRef);
|
18063
18070
|
function onClear(e) {
|
@@ -18408,6 +18415,7 @@
|
|
18408
18415
|
}
|
18409
18416
|
return vue.createVNode(vue.Fragment, null, [slots['append-inner']?.(...args), (!props.hideNoData || props.items.length) && props.menuIcon ? vue.createVNode(VIcon, {
|
18410
18417
|
"class": "v-combobox__menu-icon",
|
18418
|
+
"color": vTextFieldRef.value?.fieldIconColor,
|
18411
18419
|
"icon": props.menuIcon,
|
18412
18420
|
"onMousedown": onMousedownMenuIcon,
|
18413
18421
|
"onClick": noop,
|
@@ -22800,7 +22808,9 @@
|
|
22800
22808
|
VBtn: {
|
22801
22809
|
class: 'v-empty-state__action-btn',
|
22802
22810
|
color: props.color ?? 'surface-variant',
|
22803
|
-
|
22811
|
+
href: props.href,
|
22812
|
+
text: props.actionText,
|
22813
|
+
to: props.to
|
22804
22814
|
}
|
22805
22815
|
}
|
22806
22816
|
}, {
|
@@ -28991,7 +29001,7 @@
|
|
28991
29001
|
const adapter = useDate();
|
28992
29002
|
const {
|
28993
29003
|
mobile
|
28994
|
-
} = useDisplay();
|
29004
|
+
} = useDisplay(props);
|
28995
29005
|
const {
|
28996
29006
|
isFocused,
|
28997
29007
|
focus,
|
@@ -29041,7 +29051,7 @@
|
|
29041
29051
|
return;
|
29042
29052
|
}
|
29043
29053
|
const target = e.target;
|
29044
|
-
model.value = target.value
|
29054
|
+
model.value = adapter.isValid(target.value) ? target.value : null;
|
29045
29055
|
}
|
29046
29056
|
function onClick(e) {
|
29047
29057
|
e.preventDefault();
|
@@ -29065,10 +29075,6 @@
|
|
29065
29075
|
if (value != null) return;
|
29066
29076
|
model.value = null;
|
29067
29077
|
}
|
29068
|
-
function onUpdateMenuModel(isMenuOpen) {
|
29069
|
-
if (isMenuOpen) return;
|
29070
|
-
isEditingInput.value = false;
|
29071
|
-
}
|
29072
29078
|
function onBlur() {
|
29073
29079
|
blur();
|
29074
29080
|
|
@@ -29101,7 +29107,7 @@
|
|
29101
29107
|
...slots,
|
29102
29108
|
default: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(VMenu, {
|
29103
29109
|
"modelValue": menu.value,
|
29104
|
-
"onUpdate:modelValue":
|
29110
|
+
"onUpdate:modelValue": $event => menu.value = $event,
|
29105
29111
|
"activator": "parent",
|
29106
29112
|
"min-width": "0",
|
29107
29113
|
"eager": isFocused.value,
|
@@ -29134,7 +29140,6 @@
|
|
29134
29140
|
}
|
29135
29141
|
}
|
29136
29142
|
emit('save', value);
|
29137
|
-
vDateInputRef.value?.blur();
|
29138
29143
|
disabledActions.value = [];
|
29139
29144
|
}
|
29140
29145
|
return vue.createVNode(VDatePicker, vue.mergeProps(datePickerProps, {
|
@@ -29382,7 +29387,8 @@
|
|
29382
29387
|
'v-file-upload--clickable': !hasBrowse,
|
29383
29388
|
'v-file-upload--disabled': props.disabled,
|
29384
29389
|
'v-file-upload--dragging': dragOver.value
|
29385
|
-
}, densityClasses.value],
|
29390
|
+
}, densityClasses.value, props.class],
|
29391
|
+
"style": [props.style],
|
29386
29392
|
"onDragleave": onDragLeave,
|
29387
29393
|
"onDragover": onDragOver,
|
29388
29394
|
"onDrop": onDrop,
|
@@ -31540,7 +31546,7 @@
|
|
31540
31546
|
};
|
31541
31547
|
});
|
31542
31548
|
}
|
31543
|
-
const version$1 = "3.8.0-
|
31549
|
+
const version$1 = "3.8.0-dev.2025-04-03";
|
31544
31550
|
createVuetify$1.version = version$1;
|
31545
31551
|
|
31546
31552
|
// Vue's inject() can only be used in setup
|
@@ -31825,7 +31831,7 @@
|
|
31825
31831
|
|
31826
31832
|
/* eslint-disable local-rules/sort-imports */
|
31827
31833
|
|
31828
|
-
const version = "3.8.0-
|
31834
|
+
const version = "3.8.0-dev.2025-04-03";
|
31829
31835
|
|
31830
31836
|
/* eslint-disable local-rules/sort-imports */
|
31831
31837
|
|