vuetify 3.3.15 → 3.3.16
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/dist/json/attributes.json +427 -403
- package/dist/json/importMap.json +4 -4
- package/dist/json/tags.json +1 -0
- package/dist/json/web-types.json +908 -879
- package/dist/vuetify-labs.css +245 -240
- package/dist/vuetify-labs.d.ts +162 -144
- package/dist/vuetify-labs.esm.js +121 -136
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +121 -136
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.css +92 -88
- package/dist/vuetify.d.ts +99 -81
- package/dist/vuetify.esm.js +113 -130
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +113 -130
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +223 -224
- package/dist/vuetify.min.js.map +1 -1
- package/lib/blueprints/index.d.mts +2 -0
- package/lib/blueprints/md1.d.mts +2 -0
- package/lib/blueprints/md2.d.mts +2 -0
- package/lib/blueprints/md3.d.mts +2 -0
- package/lib/components/VAutocomplete/VAutocomplete.mjs +16 -26
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VAutocomplete/index.d.mts +40 -38
- package/lib/components/VColorPicker/VColorPickerCanvas.css +1 -0
- package/lib/components/VColorPicker/VColorPickerCanvas.mjs +28 -34
- package/lib/components/VColorPicker/VColorPickerCanvas.mjs.map +1 -1
- package/lib/components/VColorPicker/VColorPickerCanvas.sass +1 -0
- package/lib/components/VCombobox/VCombobox.mjs +15 -25
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- package/lib/components/VCombobox/index.d.mts +40 -38
- package/lib/components/VField/VField.css +3 -2
- package/lib/components/VField/VField.sass +3 -2
- package/lib/components/VLabel/VLabel.css +1 -0
- package/lib/components/VLabel/VLabel.sass +1 -0
- package/lib/components/VLabel/_variables.scss +1 -1
- package/lib/components/VList/index.d.mts +21 -3
- package/lib/components/VSelect/VSelect.mjs +9 -23
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSelect/index.d.mts +14 -11
- package/lib/components/VSelectionControl/VSelectionControl.css +1 -1
- package/lib/components/VSelectionControl/VSelectionControl.sass +1 -1
- package/lib/components/VTabs/VTab.css +1 -0
- package/lib/components/VTabs/VTab.mjs +2 -3
- package/lib/components/VTabs/VTab.mjs.map +1 -1
- package/lib/components/VTabs/VTab.sass +1 -0
- package/lib/components/VTabs/_variables.scss +1 -0
- package/lib/components/index.d.mts +96 -80
- package/lib/composables/filter.mjs +4 -4
- package/lib/composables/filter.mjs.map +1 -1
- package/lib/composables/list-items.mjs +26 -15
- package/lib/composables/list-items.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/framework.mjs +1 -1
- package/lib/index.d.mts +3 -1
- package/lib/labs/VBottomSheet/VBottomSheet.css +1 -0
- package/lib/labs/VBottomSheet/VBottomSheet.sass +2 -0
- package/lib/labs/VBottomSheet/_variables.scss +1 -0
- package/lib/labs/VDataIterator/index.d.mts +30 -26
- package/lib/labs/VDataTable/index.d.mts +43 -39
- package/lib/labs/VDataTable/types.mjs.map +1 -1
- package/lib/labs/VDatePicker/VDatePicker.mjs +4 -2
- package/lib/labs/VDatePicker/VDatePicker.mjs.map +1 -1
- package/lib/labs/VDatePicker/VDatePickerControls.mjs +4 -4
- package/lib/labs/VDatePicker/VDatePickerControls.mjs.map +1 -1
- package/lib/labs/VDatePicker/VDatePickerYears.css +1 -1
- package/lib/labs/VDatePicker/VDatePickerYears.sass +1 -1
- package/lib/labs/VDatePicker/index.d.mts +24 -24
- package/lib/labs/VDateRangePicker/index.d.mts +8 -8
- package/lib/labs/components.d.mts +80 -76
- package/lib/labs/date/DateAdapter.mjs.map +1 -1
- package/lib/labs/date/adapters/vuetify.d.mts +4 -0
- package/lib/labs/date/adapters/vuetify.mjs +13 -0
- package/lib/labs/date/adapters/vuetify.mjs.map +1 -1
- package/lib/labs/date/index.d.mts +4 -0
- package/package.json +2 -2
package/dist/vuetify-labs.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Vuetify v3.3.
|
|
2
|
+
* Vuetify v3.3.16
|
|
3
3
|
* Forged by John Leider
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -7985,11 +7985,15 @@
|
|
|
7985
7985
|
type: [Boolean, String, Array, Function],
|
|
7986
7986
|
default: 'props'
|
|
7987
7987
|
},
|
|
7988
|
-
returnObject: Boolean
|
|
7988
|
+
returnObject: Boolean,
|
|
7989
|
+
valueComparator: {
|
|
7990
|
+
type: Function,
|
|
7991
|
+
default: deepEqual
|
|
7992
|
+
}
|
|
7989
7993
|
}, 'list-items');
|
|
7990
7994
|
function transformItem$3(props, item) {
|
|
7991
7995
|
const title = getPropertyFromItem(item, props.itemTitle, item);
|
|
7992
|
-
const value =
|
|
7996
|
+
const value = getPropertyFromItem(item, props.itemValue, title);
|
|
7993
7997
|
const children = getPropertyFromItem(item, props.itemChildren);
|
|
7994
7998
|
const itemProps = props.itemProps === true ? typeof item === 'object' && item != null && !Array.isArray(item) ? 'children' in item ? pick(item, ['children'])[1] : item : undefined : getPropertyFromItem(item, props.itemProps);
|
|
7995
7999
|
const _props = {
|
|
@@ -8014,25 +8018,32 @@
|
|
|
8014
8018
|
}
|
|
8015
8019
|
function useItems(props) {
|
|
8016
8020
|
const items = vue.computed(() => transformItems$3(props, props.items));
|
|
8017
|
-
|
|
8018
|
-
}
|
|
8019
|
-
function useTransformItems(items, transform) {
|
|
8021
|
+
const hasNullItem = vue.computed(() => items.value.some(item => item.value === null));
|
|
8020
8022
|
function transformIn(value) {
|
|
8021
|
-
|
|
8022
|
-
|
|
8023
|
-
|
|
8024
|
-
|
|
8025
|
-
|
|
8026
|
-
|
|
8027
|
-
|
|
8028
|
-
|
|
8023
|
+
if (!hasNullItem.value) {
|
|
8024
|
+
// When the model value is null, return an InternalItem
|
|
8025
|
+
// based on null only if null is one of the items
|
|
8026
|
+
value = value.filter(v => v !== null);
|
|
8027
|
+
}
|
|
8028
|
+
return value.map(v => {
|
|
8029
|
+
if (props.returnObject && typeof v === 'string') {
|
|
8030
|
+
// String model value means value is a custom input value from combobox
|
|
8031
|
+
// Don't look up existing items if the model value is a string
|
|
8032
|
+
return transformItem$3(props, v);
|
|
8033
|
+
}
|
|
8034
|
+
return items.value.find(item => props.valueComparator(v, item.value)) || transformItem$3(props, v);
|
|
8029
8035
|
});
|
|
8030
8036
|
}
|
|
8031
8037
|
function transformOut(value) {
|
|
8032
|
-
return value.map(_ref => {
|
|
8038
|
+
return props.returnObject ? value.map(_ref => {
|
|
8033
8039
|
let {
|
|
8034
|
-
|
|
8040
|
+
raw
|
|
8035
8041
|
} = _ref;
|
|
8042
|
+
return raw;
|
|
8043
|
+
}) : value.map(_ref2 => {
|
|
8044
|
+
let {
|
|
8045
|
+
value
|
|
8046
|
+
} = _ref2;
|
|
8036
8047
|
return value;
|
|
8037
8048
|
});
|
|
8038
8049
|
}
|
|
@@ -10863,10 +10874,6 @@
|
|
|
10863
10874
|
default: '$vuetify.noDataText'
|
|
10864
10875
|
},
|
|
10865
10876
|
openOnClear: Boolean,
|
|
10866
|
-
valueComparator: {
|
|
10867
|
-
type: Function,
|
|
10868
|
-
default: deepEqual
|
|
10869
|
-
},
|
|
10870
10877
|
itemColor: String,
|
|
10871
10878
|
...makeItemsProps({
|
|
10872
10879
|
itemChildren: false
|
|
@@ -10920,24 +10927,14 @@
|
|
|
10920
10927
|
return props.multiple ? transformed : transformed[0] ?? null;
|
|
10921
10928
|
});
|
|
10922
10929
|
const form = useForm();
|
|
10923
|
-
const
|
|
10924
|
-
return model.value.map(v => {
|
|
10925
|
-
return items.value.find(item => {
|
|
10926
|
-
const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
|
|
10927
|
-
const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
|
|
10928
|
-
if (itemRawValue === undefined || modelRawValue === undefined) return false;
|
|
10929
|
-
return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
|
|
10930
|
-
}) || v;
|
|
10931
|
-
});
|
|
10932
|
-
});
|
|
10933
|
-
const selected = vue.computed(() => selections.value.map(selection => selection.props.value));
|
|
10930
|
+
const selectedValues = vue.computed(() => model.value.map(selection => selection.value));
|
|
10934
10931
|
const isFocused = vue.shallowRef(false);
|
|
10935
10932
|
const label = vue.computed(() => menu.value ? props.closeText : props.openText);
|
|
10936
10933
|
let keyboardLookupPrefix = '';
|
|
10937
10934
|
let keyboardLookupLastTime;
|
|
10938
10935
|
const displayItems = vue.computed(() => {
|
|
10939
10936
|
if (props.hideSelected) {
|
|
10940
|
-
return items.value.filter(item => !
|
|
10937
|
+
return items.value.filter(item => !model.value.some(s => s === item));
|
|
10941
10938
|
}
|
|
10942
10939
|
return items.value;
|
|
10943
10940
|
});
|
|
@@ -10995,7 +10992,7 @@
|
|
|
10995
10992
|
}
|
|
10996
10993
|
function select(item) {
|
|
10997
10994
|
if (props.multiple) {
|
|
10998
|
-
const index =
|
|
10995
|
+
const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
|
|
10999
10996
|
if (index === -1) {
|
|
11000
10997
|
model.value = [...model.value, item];
|
|
11001
10998
|
} else {
|
|
@@ -11032,8 +11029,8 @@
|
|
|
11032
11029
|
}
|
|
11033
11030
|
}
|
|
11034
11031
|
vue.watch(menu, () => {
|
|
11035
|
-
if (!props.hideSelected && menu.value &&
|
|
11036
|
-
const index = displayItems.value.findIndex(item =>
|
|
11032
|
+
if (!props.hideSelected && menu.value && model.value.length) {
|
|
11033
|
+
const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
|
|
11037
11034
|
IN_BROWSER && window.requestAnimationFrame(() => {
|
|
11038
11035
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
|
11039
11036
|
});
|
|
@@ -11088,7 +11085,7 @@
|
|
|
11088
11085
|
}, props.menuProps), {
|
|
11089
11086
|
default: () => [hasList && vue.createVNode(VList, {
|
|
11090
11087
|
"ref": listRef,
|
|
11091
|
-
"selected":
|
|
11088
|
+
"selected": selectedValues.value,
|
|
11092
11089
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
|
11093
11090
|
"onMousedown": e => e.preventDefault(),
|
|
11094
11091
|
"onKeydown": onListKeydown,
|
|
@@ -11137,7 +11134,7 @@
|
|
|
11137
11134
|
}
|
|
11138
11135
|
}), slots['append-item']?.()]
|
|
11139
11136
|
})]
|
|
11140
|
-
}),
|
|
11137
|
+
}), model.value.map((item, index) => {
|
|
11141
11138
|
function onChipClose(e) {
|
|
11142
11139
|
e.stopPropagation();
|
|
11143
11140
|
e.preventDefault();
|
|
@@ -11180,7 +11177,7 @@
|
|
|
11180
11177
|
index
|
|
11181
11178
|
}) ?? vue.createVNode("span", {
|
|
11182
11179
|
"class": "v-select__selection-text"
|
|
11183
|
-
}, [item.title, props.multiple && index <
|
|
11180
|
+
}, [item.title, props.multiple && index < model.value.length - 1 && vue.createVNode("span", {
|
|
11184
11181
|
"class": "v-select__selection-comma"
|
|
11185
11182
|
}, [vue.createTextVNode(",")])])]);
|
|
11186
11183
|
})]),
|
|
@@ -11232,15 +11229,15 @@
|
|
|
11232
11229
|
const customFiltersLength = Object.keys(options?.customKeyFilter ?? {}).length;
|
|
11233
11230
|
if (!items?.length) return array;
|
|
11234
11231
|
loop: for (let i = 0; i < items.length; i++) {
|
|
11235
|
-
const item = items[i];
|
|
11232
|
+
const [item, transformed = item] = wrapInArray(items[i]);
|
|
11236
11233
|
const customMatches = {};
|
|
11237
11234
|
const defaultMatches = {};
|
|
11238
11235
|
let match = -1;
|
|
11239
11236
|
if (query && !options?.noFilter) {
|
|
11240
11237
|
if (typeof item === 'object') {
|
|
11241
|
-
const filterKeys = keys || Object.keys(
|
|
11238
|
+
const filterKeys = keys || Object.keys(transformed);
|
|
11242
11239
|
for (const key of filterKeys) {
|
|
11243
|
-
const value = getPropertyFromItem(
|
|
11240
|
+
const value = getPropertyFromItem(transformed, key, transformed);
|
|
11244
11241
|
const keyFilter = options?.customKeyFilter?.[key];
|
|
11245
11242
|
match = keyFilter ? keyFilter(value, query, item) : filter(value, query, item);
|
|
11246
11243
|
if (match !== -1 && match !== false) {
|
|
@@ -11274,7 +11271,7 @@
|
|
|
11274
11271
|
function useFilter(props, items, query, options) {
|
|
11275
11272
|
const filteredItems = vue.ref([]);
|
|
11276
11273
|
const filteredMatches = vue.ref(new Map());
|
|
11277
|
-
const transformedItems = vue.computed(() => options?.transform ? vue.unref(items).map(options
|
|
11274
|
+
const transformedItems = vue.computed(() => options?.transform ? vue.unref(items).map(item => [item, options.transform(item)]) : vue.unref(items));
|
|
11278
11275
|
vue.watchEffect(() => {
|
|
11279
11276
|
const _query = typeof query === 'function' ? query() : vue.unref(query);
|
|
11280
11277
|
const strQuery = typeof _query !== 'string' && typeof _query !== 'number' ? '' : String(_query);
|
|
@@ -11392,24 +11389,13 @@
|
|
|
11392
11389
|
filteredItems,
|
|
11393
11390
|
getMatches
|
|
11394
11391
|
} = useFilter(props, items, () => isPristine.value ? '' : search.value);
|
|
11395
|
-
const selections = vue.computed(() => {
|
|
11396
|
-
return model.value.map(v => {
|
|
11397
|
-
return items.value.find(item => {
|
|
11398
|
-
const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
|
|
11399
|
-
const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
|
|
11400
|
-
if (itemRawValue === undefined || modelRawValue === undefined) return false;
|
|
11401
|
-
return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
|
|
11402
|
-
}) || v;
|
|
11403
|
-
});
|
|
11404
|
-
});
|
|
11405
11392
|
const displayItems = vue.computed(() => {
|
|
11406
11393
|
if (props.hideSelected) {
|
|
11407
|
-
return filteredItems.value.filter(filteredItem => !
|
|
11394
|
+
return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
|
|
11408
11395
|
}
|
|
11409
11396
|
return filteredItems.value;
|
|
11410
11397
|
});
|
|
11411
|
-
const
|
|
11412
|
-
const selection = vue.computed(() => selections.value[selectionIndex.value]);
|
|
11398
|
+
const selectedValues = vue.computed(() => model.value.map(selection => selection.props.value));
|
|
11413
11399
|
const highlightFirst = vue.computed(() => {
|
|
11414
11400
|
const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
|
|
11415
11401
|
return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
|
|
@@ -11441,7 +11427,7 @@
|
|
|
11441
11427
|
function onKeydown(e) {
|
|
11442
11428
|
if (props.readonly || form?.isReadonly.value) return;
|
|
11443
11429
|
const selectionStart = vTextFieldRef.value.selectionStart;
|
|
11444
|
-
const length =
|
|
11430
|
+
const length = model.value.length;
|
|
11445
11431
|
if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
|
|
11446
11432
|
e.preventDefault();
|
|
11447
11433
|
}
|
|
@@ -11466,13 +11452,14 @@
|
|
|
11466
11452
|
return;
|
|
11467
11453
|
}
|
|
11468
11454
|
const originalSelectionIndex = selectionIndex.value;
|
|
11469
|
-
|
|
11455
|
+
const selectedItem = model.value[selectionIndex.value];
|
|
11456
|
+
if (selectedItem) select(selectedItem);
|
|
11470
11457
|
selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
|
|
11471
11458
|
}
|
|
11472
11459
|
if (e.key === 'ArrowLeft') {
|
|
11473
11460
|
if (selectionIndex.value < 0 && selectionStart > 0) return;
|
|
11474
11461
|
const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
|
|
11475
|
-
if (
|
|
11462
|
+
if (model.value[prev]) {
|
|
11476
11463
|
selectionIndex.value = prev;
|
|
11477
11464
|
} else {
|
|
11478
11465
|
selectionIndex.value = -1;
|
|
@@ -11482,7 +11469,7 @@
|
|
|
11482
11469
|
if (e.key === 'ArrowRight') {
|
|
11483
11470
|
if (selectionIndex.value < 0) return;
|
|
11484
11471
|
const next = selectionIndex.value + 1;
|
|
11485
|
-
if (
|
|
11472
|
+
if (model.value[next]) {
|
|
11486
11473
|
selectionIndex.value = next;
|
|
11487
11474
|
} else {
|
|
11488
11475
|
selectionIndex.value = -1;
|
|
@@ -11522,7 +11509,7 @@
|
|
|
11522
11509
|
const isSelecting = vue.shallowRef(false);
|
|
11523
11510
|
function select(item) {
|
|
11524
11511
|
if (props.multiple) {
|
|
11525
|
-
const index =
|
|
11512
|
+
const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
|
|
11526
11513
|
if (index === -1) {
|
|
11527
11514
|
model.value = [...model.value, item];
|
|
11528
11515
|
} else {
|
|
@@ -11543,11 +11530,11 @@
|
|
|
11543
11530
|
if (val === oldVal) return;
|
|
11544
11531
|
if (val) {
|
|
11545
11532
|
isSelecting.value = true;
|
|
11546
|
-
search.value = props.multiple ? '' : String(
|
|
11533
|
+
search.value = props.multiple ? '' : String(model.value.at(-1)?.props.title ?? '');
|
|
11547
11534
|
isPristine.value = true;
|
|
11548
11535
|
vue.nextTick(() => isSelecting.value = false);
|
|
11549
11536
|
} else {
|
|
11550
|
-
if (!props.multiple && !search.value) model.value = [];else if (highlightFirst.value && !listHasFocus.value && !
|
|
11537
|
+
if (!props.multiple && !search.value) model.value = [];else if (highlightFirst.value && !listHasFocus.value && !model.value.some(_ref2 => {
|
|
11551
11538
|
let {
|
|
11552
11539
|
value
|
|
11553
11540
|
} = _ref2;
|
|
@@ -11566,8 +11553,8 @@
|
|
|
11566
11553
|
isPristine.value = !val;
|
|
11567
11554
|
});
|
|
11568
11555
|
vue.watch(menu, () => {
|
|
11569
|
-
if (!props.hideSelected && menu.value &&
|
|
11570
|
-
const index = displayItems.value.findIndex(item =>
|
|
11556
|
+
if (!props.hideSelected && menu.value && model.value.length) {
|
|
11557
|
+
const index = displayItems.value.findIndex(item => model.value.some(s => item.value === s.value));
|
|
11571
11558
|
IN_BROWSER && window.requestAnimationFrame(() => {
|
|
11572
11559
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
|
11573
11560
|
});
|
|
@@ -11619,7 +11606,7 @@
|
|
|
11619
11606
|
}, props.menuProps), {
|
|
11620
11607
|
default: () => [hasList && vue.createVNode(VList, {
|
|
11621
11608
|
"ref": listRef,
|
|
11622
|
-
"selected":
|
|
11609
|
+
"selected": selectedValues.value,
|
|
11623
11610
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
|
11624
11611
|
"onMousedown": e => e.preventDefault(),
|
|
11625
11612
|
"onKeydown": onListKeydown,
|
|
@@ -11673,7 +11660,7 @@
|
|
|
11673
11660
|
}
|
|
11674
11661
|
}), slots['append-item']?.()]
|
|
11675
11662
|
})]
|
|
11676
|
-
}),
|
|
11663
|
+
}), model.value.map((item, index) => {
|
|
11677
11664
|
function onChipClose(e) {
|
|
11678
11665
|
e.stopPropagation();
|
|
11679
11666
|
e.preventDefault();
|
|
@@ -11717,7 +11704,7 @@
|
|
|
11717
11704
|
index
|
|
11718
11705
|
}) ?? vue.createVNode("span", {
|
|
11719
11706
|
"class": "v-autocomplete__selection-text"
|
|
11720
|
-
}, [item.title, props.multiple && index <
|
|
11707
|
+
}, [item.title, props.multiple && index < model.value.length - 1 && vue.createVNode("span", {
|
|
11721
11708
|
"class": "v-autocomplete__selection-comma"
|
|
11722
11709
|
}, [vue.createTextVNode(",")])])]);
|
|
11723
11710
|
})]),
|
|
@@ -13115,11 +13102,29 @@
|
|
|
13115
13102
|
emit
|
|
13116
13103
|
} = _ref;
|
|
13117
13104
|
const isInteracting = vue.shallowRef(false);
|
|
13118
|
-
const
|
|
13119
|
-
const
|
|
13105
|
+
const canvasRef = vue.ref();
|
|
13106
|
+
const canvasWidth = vue.shallowRef(parseFloat(props.width));
|
|
13107
|
+
const canvasHeight = vue.shallowRef(parseFloat(props.height));
|
|
13108
|
+
const _dotPosition = vue.ref({
|
|
13120
13109
|
x: 0,
|
|
13121
13110
|
y: 0
|
|
13122
13111
|
});
|
|
13112
|
+
const dotPosition = vue.computed({
|
|
13113
|
+
get: () => _dotPosition.value,
|
|
13114
|
+
set(val) {
|
|
13115
|
+
if (!canvasRef.value) return;
|
|
13116
|
+
const {
|
|
13117
|
+
x,
|
|
13118
|
+
y
|
|
13119
|
+
} = val;
|
|
13120
|
+
emit('update:color', {
|
|
13121
|
+
h: props.color?.h ?? 0,
|
|
13122
|
+
s: clamp(x, 0, canvasWidth.value) / canvasWidth.value,
|
|
13123
|
+
v: 1 - clamp(y, 0, canvasHeight.value) / canvasHeight.value,
|
|
13124
|
+
a: props.color?.a ?? 1
|
|
13125
|
+
});
|
|
13126
|
+
}
|
|
13127
|
+
});
|
|
13123
13128
|
const dotStyles = vue.computed(() => {
|
|
13124
13129
|
const {
|
|
13125
13130
|
x,
|
|
@@ -13132,9 +13137,6 @@
|
|
|
13132
13137
|
transform: `translate(${convertToUnit(x - radius)}, ${convertToUnit(y - radius)})`
|
|
13133
13138
|
};
|
|
13134
13139
|
});
|
|
13135
|
-
const canvasRef = vue.ref();
|
|
13136
|
-
const canvasWidth = vue.shallowRef(parseFloat(props.width));
|
|
13137
|
-
const canvasHeight = vue.shallowRef(parseFloat(props.height));
|
|
13138
13140
|
const {
|
|
13139
13141
|
resizeRef
|
|
13140
13142
|
} = useResizeObserver(entries => {
|
|
@@ -13158,15 +13160,13 @@
|
|
|
13158
13160
|
y: clamp(y - top, 0, height)
|
|
13159
13161
|
};
|
|
13160
13162
|
}
|
|
13161
|
-
function handleClick(e) {
|
|
13162
|
-
if (props.disabled || !canvasRef.value) return;
|
|
13163
|
-
updateDotPosition(e.clientX, e.clientY, canvasRef.value.getBoundingClientRect());
|
|
13164
|
-
}
|
|
13165
13163
|
function handleMouseDown(e) {
|
|
13166
|
-
|
|
13167
|
-
|
|
13164
|
+
if (e.type === 'mousedown') {
|
|
13165
|
+
// Prevent text selection while dragging
|
|
13166
|
+
e.preventDefault();
|
|
13167
|
+
}
|
|
13168
13168
|
if (props.disabled) return;
|
|
13169
|
-
|
|
13169
|
+
handleMouseMove(e);
|
|
13170
13170
|
window.addEventListener('mousemove', handleMouseMove);
|
|
13171
13171
|
window.addEventListener('mouseup', handleMouseUp);
|
|
13172
13172
|
window.addEventListener('touchmove', handleMouseMove);
|
|
@@ -13184,23 +13184,6 @@
|
|
|
13184
13184
|
window.removeEventListener('touchmove', handleMouseMove);
|
|
13185
13185
|
window.removeEventListener('touchend', handleMouseUp);
|
|
13186
13186
|
}
|
|
13187
|
-
vue.watch(dotPosition, () => {
|
|
13188
|
-
if (isOutsideUpdate.value) {
|
|
13189
|
-
isOutsideUpdate.value = false;
|
|
13190
|
-
return;
|
|
13191
|
-
}
|
|
13192
|
-
if (!canvasRef.value) return;
|
|
13193
|
-
const {
|
|
13194
|
-
x,
|
|
13195
|
-
y
|
|
13196
|
-
} = dotPosition.value;
|
|
13197
|
-
emit('update:color', {
|
|
13198
|
-
h: props.color?.h ?? 0,
|
|
13199
|
-
s: clamp(x, 0, canvasWidth.value) / canvasWidth.value,
|
|
13200
|
-
v: 1 - clamp(y, 0, canvasHeight.value) / canvasHeight.value,
|
|
13201
|
-
a: props.color?.a ?? 1
|
|
13202
|
-
});
|
|
13203
|
-
});
|
|
13204
13187
|
function updateCanvas() {
|
|
13205
13188
|
if (!canvasRef.value) return;
|
|
13206
13189
|
const canvas = canvasRef.value;
|
|
@@ -13222,7 +13205,7 @@
|
|
|
13222
13205
|
});
|
|
13223
13206
|
vue.watch(() => [canvasWidth.value, canvasHeight.value], (newVal, oldVal) => {
|
|
13224
13207
|
updateCanvas();
|
|
13225
|
-
|
|
13208
|
+
_dotPosition.value = {
|
|
13226
13209
|
x: dotPosition.value.x * newVal[0] / oldVal[0],
|
|
13227
13210
|
y: dotPosition.value.y * newVal[1] / oldVal[1]
|
|
13228
13211
|
};
|
|
@@ -13234,8 +13217,7 @@
|
|
|
13234
13217
|
isInteracting.value = false;
|
|
13235
13218
|
return;
|
|
13236
13219
|
}
|
|
13237
|
-
|
|
13238
|
-
dotPosition.value = props.color ? {
|
|
13220
|
+
_dotPosition.value = props.color ? {
|
|
13239
13221
|
x: props.color.s * canvasWidth.value,
|
|
13240
13222
|
y: (1 - props.color.v) * canvasHeight.value
|
|
13241
13223
|
} : {
|
|
@@ -13251,9 +13233,8 @@
|
|
|
13251
13233
|
"ref": resizeRef,
|
|
13252
13234
|
"class": ['v-color-picker-canvas', props.class],
|
|
13253
13235
|
"style": props.style,
|
|
13254
|
-
"onClick": handleClick,
|
|
13255
13236
|
"onMousedown": handleMouseDown,
|
|
13256
|
-
"
|
|
13237
|
+
"onTouchstartPassive": handleMouseDown
|
|
13257
13238
|
}, [vue.createVNode("canvas", {
|
|
13258
13239
|
"ref": canvasRef,
|
|
13259
13240
|
"width": canvasWidth.value,
|
|
@@ -14974,24 +14955,13 @@
|
|
|
14974
14955
|
filteredItems,
|
|
14975
14956
|
getMatches
|
|
14976
14957
|
} = useFilter(props, items, () => isPristine.value ? '' : search.value);
|
|
14977
|
-
const selections = vue.computed(() => {
|
|
14978
|
-
return model.value.map(v => {
|
|
14979
|
-
return items.value.find(item => {
|
|
14980
|
-
const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
|
|
14981
|
-
const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
|
|
14982
|
-
if (itemRawValue === undefined || modelRawValue === undefined) return false;
|
|
14983
|
-
return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
|
|
14984
|
-
}) || v;
|
|
14985
|
-
});
|
|
14986
|
-
});
|
|
14987
14958
|
const displayItems = vue.computed(() => {
|
|
14988
14959
|
if (props.hideSelected) {
|
|
14989
|
-
return filteredItems.value.filter(filteredItem => !
|
|
14960
|
+
return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
|
|
14990
14961
|
}
|
|
14991
14962
|
return filteredItems.value;
|
|
14992
14963
|
});
|
|
14993
|
-
const
|
|
14994
|
-
const selection = vue.computed(() => selections.value[selectionIndex.value]);
|
|
14964
|
+
const selectedValues = vue.computed(() => model.value.map(selection => selection.value));
|
|
14995
14965
|
const highlightFirst = vue.computed(() => {
|
|
14996
14966
|
const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
|
|
14997
14967
|
return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
|
|
@@ -15023,7 +14993,7 @@
|
|
|
15023
14993
|
function onKeydown(e) {
|
|
15024
14994
|
if (props.readonly || form?.isReadonly.value) return;
|
|
15025
14995
|
const selectionStart = vTextFieldRef.value.selectionStart;
|
|
15026
|
-
const length =
|
|
14996
|
+
const length = model.value.length;
|
|
15027
14997
|
if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
|
|
15028
14998
|
e.preventDefault();
|
|
15029
14999
|
}
|
|
@@ -15051,13 +15021,14 @@
|
|
|
15051
15021
|
return;
|
|
15052
15022
|
}
|
|
15053
15023
|
const originalSelectionIndex = selectionIndex.value;
|
|
15054
|
-
|
|
15024
|
+
const selectedItem = model.value[selectionIndex.value];
|
|
15025
|
+
if (selectedItem) select(selectedItem);
|
|
15055
15026
|
selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
|
|
15056
15027
|
}
|
|
15057
15028
|
if (e.key === 'ArrowLeft') {
|
|
15058
15029
|
if (selectionIndex.value < 0 && selectionStart > 0) return;
|
|
15059
15030
|
const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
|
|
15060
|
-
if (
|
|
15031
|
+
if (model.value[prev]) {
|
|
15061
15032
|
selectionIndex.value = prev;
|
|
15062
15033
|
} else {
|
|
15063
15034
|
selectionIndex.value = -1;
|
|
@@ -15067,7 +15038,7 @@
|
|
|
15067
15038
|
if (e.key === 'ArrowRight') {
|
|
15068
15039
|
if (selectionIndex.value < 0) return;
|
|
15069
15040
|
const next = selectionIndex.value + 1;
|
|
15070
|
-
if (
|
|
15041
|
+
if (model.value[next]) {
|
|
15071
15042
|
selectionIndex.value = next;
|
|
15072
15043
|
} else {
|
|
15073
15044
|
selectionIndex.value = -1;
|
|
@@ -15087,7 +15058,7 @@
|
|
|
15087
15058
|
}
|
|
15088
15059
|
function select(item) {
|
|
15089
15060
|
if (props.multiple) {
|
|
15090
|
-
const index =
|
|
15061
|
+
const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
|
|
15091
15062
|
if (index === -1) {
|
|
15092
15063
|
model.value = [...model.value, item];
|
|
15093
15064
|
} else {
|
|
@@ -15126,7 +15097,7 @@
|
|
|
15126
15097
|
if (val || val === oldVal) return;
|
|
15127
15098
|
selectionIndex.value = -1;
|
|
15128
15099
|
menu.value = false;
|
|
15129
|
-
if (highlightFirst.value && !listHasFocus.value && !
|
|
15100
|
+
if (highlightFirst.value && !listHasFocus.value && !model.value.some(_ref2 => {
|
|
15130
15101
|
let {
|
|
15131
15102
|
value
|
|
15132
15103
|
} = _ref2;
|
|
@@ -15139,8 +15110,8 @@
|
|
|
15139
15110
|
}
|
|
15140
15111
|
});
|
|
15141
15112
|
vue.watch(menu, () => {
|
|
15142
|
-
if (!props.hideSelected && menu.value &&
|
|
15143
|
-
const index = displayItems.value.findIndex(item =>
|
|
15113
|
+
if (!props.hideSelected && menu.value && model.value.length) {
|
|
15114
|
+
const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
|
|
15144
15115
|
IN_BROWSER && window.requestAnimationFrame(() => {
|
|
15145
15116
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
|
15146
15117
|
});
|
|
@@ -15191,7 +15162,7 @@
|
|
|
15191
15162
|
}, props.menuProps), {
|
|
15192
15163
|
default: () => [hasList && vue.createVNode(VList, {
|
|
15193
15164
|
"ref": listRef,
|
|
15194
|
-
"selected":
|
|
15165
|
+
"selected": selectedValues.value,
|
|
15195
15166
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
|
15196
15167
|
"onMousedown": e => e.preventDefault(),
|
|
15197
15168
|
"onKeydown": onListKeydown,
|
|
@@ -15245,7 +15216,7 @@
|
|
|
15245
15216
|
}
|
|
15246
15217
|
}), slots['append-item']?.()]
|
|
15247
15218
|
})]
|
|
15248
|
-
}),
|
|
15219
|
+
}), model.value.map((item, index) => {
|
|
15249
15220
|
function onChipClose(e) {
|
|
15250
15221
|
e.stopPropagation();
|
|
15251
15222
|
e.preventDefault();
|
|
@@ -15289,7 +15260,7 @@
|
|
|
15289
15260
|
index
|
|
15290
15261
|
}) ?? vue.createVNode("span", {
|
|
15291
15262
|
"class": "v-combobox__selection-text"
|
|
15292
|
-
}, [item.title, props.multiple && index <
|
|
15263
|
+
}, [item.title, props.multiple && index < model.value.length - 1 && vue.createVNode("span", {
|
|
15293
15264
|
"class": "v-combobox__selection-comma"
|
|
15294
15265
|
}, [vue.createTextVNode(",")])])]);
|
|
15295
15266
|
})]),
|
|
@@ -18826,11 +18797,10 @@
|
|
|
18826
18797
|
"tabindex": isSelected.value ? 0 : -1,
|
|
18827
18798
|
"role": "tab",
|
|
18828
18799
|
"aria-selected": String(isSelected.value),
|
|
18829
|
-
"active": false
|
|
18800
|
+
"active": false
|
|
18801
|
+
}, btnProps, attrs, {
|
|
18830
18802
|
"block": props.fixed,
|
|
18831
18803
|
"maxWidth": props.fixed ? 300 : undefined,
|
|
18832
|
-
"rounded": 0
|
|
18833
|
-
}, btnProps, attrs, {
|
|
18834
18804
|
"onGroup:selected": updateSlider
|
|
18835
18805
|
}), {
|
|
18836
18806
|
default: () => [slots.default?.() ?? props.text, !props.hideSlider && vue.createVNode("div", {
|
|
@@ -21810,7 +21780,7 @@
|
|
|
21810
21780
|
const makeVDatePickerControlsProps = propsFactory({
|
|
21811
21781
|
displayDate: String,
|
|
21812
21782
|
disabled: {
|
|
21813
|
-
type: [Boolean, String],
|
|
21783
|
+
type: [Boolean, String, Array],
|
|
21814
21784
|
default: false
|
|
21815
21785
|
},
|
|
21816
21786
|
nextIcon: {
|
|
@@ -21850,13 +21820,13 @@
|
|
|
21850
21820
|
return props.viewMode === 'month' ? props.expandIcon : props.collapseIcon;
|
|
21851
21821
|
});
|
|
21852
21822
|
const disableMode = vue.computed(() => {
|
|
21853
|
-
return Array.isArray(props.disabled) ? props.disabled.includes('mode') : props.disabled;
|
|
21823
|
+
return Array.isArray(props.disabled) ? props.disabled.includes('mode') : !!props.disabled;
|
|
21854
21824
|
});
|
|
21855
21825
|
const disablePrev = vue.computed(() => {
|
|
21856
|
-
return Array.isArray(props.disabled) ? props.disabled.includes('prev') : props.disabled;
|
|
21826
|
+
return Array.isArray(props.disabled) ? props.disabled.includes('prev') : !!props.disabled;
|
|
21857
21827
|
});
|
|
21858
21828
|
const disableNext = vue.computed(() => {
|
|
21859
|
-
return Array.isArray(props.disabled) ? props.disabled.includes('next') : props.disabled;
|
|
21829
|
+
return Array.isArray(props.disabled) ? props.disabled.includes('next') : !!props.disabled;
|
|
21860
21830
|
});
|
|
21861
21831
|
function onClickPrev() {
|
|
21862
21832
|
emit('click:prev');
|
|
@@ -22197,6 +22167,7 @@
|
|
|
22197
22167
|
return isAfter(date, range[0]) && isBefore(date, range[1]);
|
|
22198
22168
|
}
|
|
22199
22169
|
function isValid(date) {
|
|
22170
|
+
if (!date || date == null) return false;
|
|
22200
22171
|
const d = new Date(date);
|
|
22201
22172
|
return d instanceof Date && !isNaN(d.getTime());
|
|
22202
22173
|
}
|
|
@@ -22228,6 +22199,12 @@
|
|
|
22228
22199
|
d.setFullYear(year);
|
|
22229
22200
|
return d;
|
|
22230
22201
|
}
|
|
22202
|
+
function startOfDay(date) {
|
|
22203
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
22204
|
+
}
|
|
22205
|
+
function endOfDay(date) {
|
|
22206
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);
|
|
22207
|
+
}
|
|
22231
22208
|
class VuetifyDateAdapter {
|
|
22232
22209
|
constructor(options) {
|
|
22233
22210
|
this.locale = options.locale;
|
|
@@ -22292,6 +22269,12 @@
|
|
|
22292
22269
|
getMonth(date) {
|
|
22293
22270
|
return getMonth(date);
|
|
22294
22271
|
}
|
|
22272
|
+
startOfDay(date) {
|
|
22273
|
+
return startOfDay(date);
|
|
22274
|
+
}
|
|
22275
|
+
endOfDay(date) {
|
|
22276
|
+
return endOfDay(date);
|
|
22277
|
+
}
|
|
22295
22278
|
startOfYear(date) {
|
|
22296
22279
|
return startOfYear(date);
|
|
22297
22280
|
}
|
|
@@ -23160,9 +23143,11 @@
|
|
|
23160
23143
|
function updateFromInput(input, index) {
|
|
23161
23144
|
const {
|
|
23162
23145
|
isValid,
|
|
23163
|
-
date
|
|
23146
|
+
date,
|
|
23147
|
+
isAfter
|
|
23164
23148
|
} = adapter;
|
|
23165
|
-
|
|
23149
|
+
const inputDate = date(input);
|
|
23150
|
+
if (isValid(input) && (!minDate.value || !isAfter(minDate.value, inputDate)) && (!maxDate.value || !isAfter(inputDate, maxDate.value))) {
|
|
23166
23151
|
const newModel = model.value.slice();
|
|
23167
23152
|
newModel[index] = date(input);
|
|
23168
23153
|
if (props.hideActions) {
|
|
@@ -24578,7 +24563,7 @@
|
|
|
24578
24563
|
date
|
|
24579
24564
|
};
|
|
24580
24565
|
}
|
|
24581
|
-
const version$1 = "3.3.
|
|
24566
|
+
const version$1 = "3.3.16";
|
|
24582
24567
|
createVuetify$1.version = version$1;
|
|
24583
24568
|
|
|
24584
24569
|
// Vue's inject() can only be used in setup
|
|
@@ -24592,7 +24577,7 @@
|
|
|
24592
24577
|
|
|
24593
24578
|
/* eslint-disable local-rules/sort-imports */
|
|
24594
24579
|
|
|
24595
|
-
const version = "3.3.
|
|
24580
|
+
const version = "3.3.16";
|
|
24596
24581
|
|
|
24597
24582
|
/* eslint-disable local-rules/sort-imports */
|
|
24598
24583
|
|