vuetify 3.3.9 → 3.3.11
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/_component-variables-labs.sass +3 -1
- package/dist/json/attributes.json +221 -33
- package/dist/json/importMap-labs.json +28 -0
- package/dist/json/importMap.json +4 -4
- package/dist/json/tags.json +79 -0
- package/dist/json/web-types.json +693 -34
- package/dist/vuetify-labs.css +305 -138
- package/dist/vuetify-labs.d.ts +2804 -305
- package/dist/vuetify-labs.esm.js +755 -72
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +755 -72
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.css +48 -41
- package/dist/vuetify.d.ts +67 -31
- package/dist/vuetify.esm.js +173 -65
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +173 -65
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +959 -946
- package/dist/vuetify.min.js.map +1 -1
- package/lib/blueprints/md1.mjs +5 -0
- package/lib/blueprints/md1.mjs.map +1 -1
- package/lib/blueprints/md2.mjs +5 -0
- package/lib/blueprints/md2.mjs.map +1 -1
- package/lib/blueprints/md3.mjs +5 -0
- package/lib/blueprints/md3.mjs.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.mjs +21 -9
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VAutocomplete/index.d.mts +6 -0
- package/lib/components/VCarousel/index.d.mts +12 -10
- package/lib/components/VChip/VChip.mjs +3 -3
- package/lib/components/VChip/VChip.mjs.map +1 -1
- package/lib/components/VCombobox/VCombobox.mjs +10 -4
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- package/lib/components/VCombobox/index.d.mts +6 -0
- package/lib/components/VExpansionPanel/VExpansionPanel.mjs +8 -3
- package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
- package/lib/components/VFileInput/VFileInput.mjs +1 -0
- package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
- package/lib/components/VMenu/VMenu.mjs +29 -4
- package/lib/components/VMenu/VMenu.mjs.map +1 -1
- package/lib/components/VNavigationDrawer/sticky.mjs +1 -1
- package/lib/components/VNavigationDrawer/sticky.mjs.map +1 -1
- package/lib/components/VOverlay/useActivator.mjs +2 -2
- package/lib/components/VOverlay/useActivator.mjs.map +1 -1
- package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
- package/lib/components/VRangeSlider/index.d.mts +8 -8
- package/lib/components/VRating/VRating.mjs +4 -2
- package/lib/components/VRating/VRating.mjs.map +1 -1
- package/lib/components/VSelect/VSelect.css +1 -0
- package/lib/components/VSelect/VSelect.mjs +23 -8
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSelect/VSelect.sass +1 -0
- package/lib/components/VSelect/index.d.mts +6 -0
- package/lib/components/VSelectionControl/VSelectionControl.mjs +2 -2
- package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
- package/lib/components/VSlider/VSlider.mjs +2 -3
- package/lib/components/VSlider/VSlider.mjs.map +1 -1
- package/lib/components/VSlider/slider.mjs +1 -0
- package/lib/components/VSlider/slider.mjs.map +1 -1
- package/lib/components/VSwitch/VSwitch.css +3 -0
- package/lib/components/VSwitch/VSwitch.sass +3 -0
- package/lib/components/VSwitch/_variables.scss +1 -0
- package/lib/components/VTable/VTable.css +10 -4
- package/lib/components/VTable/VTable.sass +6 -4
- package/lib/components/VTextarea/VTextarea.css +0 -3
- package/lib/components/VTextarea/VTextarea.sass +0 -4
- package/lib/components/VTimeline/VTimeline.css +2 -2
- package/lib/components/VTimeline/VTimeline.sass +2 -2
- package/lib/components/VWindow/VWindow.mjs +1 -0
- package/lib/components/VWindow/VWindow.mjs.map +1 -1
- package/lib/components/VWindow/VWindowItem.mjs +3 -1
- package/lib/components/VWindow/VWindowItem.mjs.map +1 -1
- package/lib/components/VWindow/index.d.mts +29 -11
- package/lib/components/index.d.mts +57 -29
- package/lib/composables/defaults.mjs.map +1 -1
- package/lib/composables/forwardRefs.mjs +14 -0
- package/lib/composables/forwardRefs.mjs.map +1 -1
- package/lib/composables/group.mjs +1 -1
- package/lib/composables/group.mjs.map +1 -1
- package/lib/composables/theme.mjs +12 -6
- package/lib/composables/theme.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/entry-bundler.mjs.map +1 -1
- package/lib/framework.mjs +1 -1
- package/lib/framework.mjs.map +1 -1
- package/lib/index.d.mts +10 -2
- package/lib/labs/VDatePicker/VDatePicker.css +6 -5
- package/lib/labs/VDatePicker/VDatePicker.mjs +3 -3
- package/lib/labs/VDatePicker/VDatePicker.mjs.map +1 -1
- package/lib/labs/VDatePicker/VDatePicker.sass +8 -9
- package/lib/labs/VDateRangePicker/VDateRangePickerHeader.mjs +2 -2
- package/lib/labs/VDateRangePicker/VDateRangePickerHeader.mjs.map +1 -1
- package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs +4 -5
- package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -1
- package/lib/labs/VOtpInput/VOtpInput.css +53 -0
- package/lib/labs/VOtpInput/VOtpInput.mjs +213 -0
- package/lib/labs/VOtpInput/VOtpInput.mjs.map +1 -0
- package/lib/labs/VOtpInput/VOtpInput.sass +55 -0
- package/lib/labs/VOtpInput/_variables.scss +2 -0
- package/lib/labs/VOtpInput/index.d.mts +459 -0
- package/lib/labs/VOtpInput/index.mjs +2 -0
- package/lib/labs/VOtpInput/index.mjs.map +1 -0
- package/lib/labs/VPicker/VPicker.mjs +1 -1
- package/lib/labs/VPicker/VPicker.mjs.map +1 -1
- package/lib/labs/VStepper/VStepper.css +42 -0
- package/lib/labs/VStepper/VStepper.mjs +147 -0
- package/lib/labs/VStepper/VStepper.mjs.map +1 -0
- package/lib/labs/VStepper/VStepper.sass +44 -0
- package/lib/labs/VStepper/VStepperActions.mjs +61 -0
- package/lib/labs/VStepper/VStepperActions.mjs.map +1 -0
- package/lib/labs/VStepper/VStepperHeader.mjs +4 -0
- package/lib/labs/VStepper/VStepperHeader.mjs.map +1 -0
- package/lib/labs/VStepper/VStepperItem.css +67 -0
- package/lib/labs/VStepper/VStepperItem.mjs +114 -0
- package/lib/labs/VStepper/VStepperItem.mjs.map +1 -0
- package/lib/labs/VStepper/VStepperItem.sass +71 -0
- package/lib/labs/VStepper/VStepperWindow.mjs +50 -0
- package/lib/labs/VStepper/VStepperWindow.mjs.map +1 -0
- package/lib/labs/VStepper/VStepperWindowItem.mjs +24 -0
- package/lib/labs/VStepper/VStepperWindowItem.mjs.map +1 -0
- package/lib/labs/VStepper/_variables.scss +4 -0
- package/lib/labs/VStepper/index.d.mts +2051 -0
- package/lib/labs/VStepper/index.mjs +7 -0
- package/lib/labs/VStepper/index.mjs.map +1 -0
- package/lib/labs/components.d.mts +2751 -267
- package/lib/labs/components.mjs +2 -0
- package/lib/labs/components.mjs.map +1 -1
- package/lib/labs/date/adapters/vuetify.mjs +6 -7
- package/lib/labs/date/adapters/vuetify.mjs.map +1 -1
- package/lib/locale/af.mjs +6 -1
- package/lib/locale/af.mjs.map +1 -1
- package/lib/locale/ar.mjs +6 -1
- package/lib/locale/ar.mjs.map +1 -1
- package/lib/locale/az.mjs +6 -1
- package/lib/locale/az.mjs.map +1 -1
- package/lib/locale/bg.mjs +6 -1
- package/lib/locale/bg.mjs.map +1 -1
- package/lib/locale/ca.mjs +6 -1
- package/lib/locale/ca.mjs.map +1 -1
- package/lib/locale/ckb.mjs +6 -1
- package/lib/locale/ckb.mjs.map +1 -1
- package/lib/locale/cs.mjs +6 -1
- package/lib/locale/cs.mjs.map +1 -1
- package/lib/locale/da.mjs +6 -1
- package/lib/locale/da.mjs.map +1 -1
- package/lib/locale/de.mjs +6 -1
- package/lib/locale/de.mjs.map +1 -1
- package/lib/locale/el.mjs +6 -1
- package/lib/locale/el.mjs.map +1 -1
- package/lib/locale/en.mjs +6 -1
- package/lib/locale/en.mjs.map +1 -1
- package/lib/locale/es.mjs +6 -1
- package/lib/locale/es.mjs.map +1 -1
- package/lib/locale/et.mjs +6 -1
- package/lib/locale/et.mjs.map +1 -1
- package/lib/locale/fa.mjs +6 -1
- package/lib/locale/fa.mjs.map +1 -1
- package/lib/locale/fi.mjs +6 -1
- package/lib/locale/fi.mjs.map +1 -1
- package/lib/locale/fr.mjs +6 -1
- package/lib/locale/fr.mjs.map +1 -1
- package/lib/locale/he.mjs +6 -1
- package/lib/locale/he.mjs.map +1 -1
- package/lib/locale/hr.mjs +6 -1
- package/lib/locale/hr.mjs.map +1 -1
- package/lib/locale/hu.mjs +6 -1
- package/lib/locale/hu.mjs.map +1 -1
- package/lib/locale/id.mjs +6 -1
- package/lib/locale/id.mjs.map +1 -1
- package/lib/locale/index.d.mts +210 -0
- package/lib/locale/it.mjs +6 -1
- package/lib/locale/it.mjs.map +1 -1
- package/lib/locale/ja.mjs +6 -1
- package/lib/locale/ja.mjs.map +1 -1
- package/lib/locale/ko.mjs +6 -1
- package/lib/locale/ko.mjs.map +1 -1
- package/lib/locale/lt.mjs +6 -1
- package/lib/locale/lt.mjs.map +1 -1
- package/lib/locale/lv.mjs +6 -1
- package/lib/locale/lv.mjs.map +1 -1
- package/lib/locale/nl.mjs +6 -1
- package/lib/locale/nl.mjs.map +1 -1
- package/lib/locale/no.mjs +6 -1
- package/lib/locale/no.mjs.map +1 -1
- package/lib/locale/pl.mjs +6 -1
- package/lib/locale/pl.mjs.map +1 -1
- package/lib/locale/pt.mjs +6 -1
- package/lib/locale/pt.mjs.map +1 -1
- package/lib/locale/ro.mjs +23 -18
- package/lib/locale/ro.mjs.map +1 -1
- package/lib/locale/ru.mjs +6 -1
- package/lib/locale/ru.mjs.map +1 -1
- package/lib/locale/sk.mjs +6 -1
- package/lib/locale/sk.mjs.map +1 -1
- package/lib/locale/sl.mjs +6 -1
- package/lib/locale/sl.mjs.map +1 -1
- package/lib/locale/sr-Cyrl.mjs +6 -1
- package/lib/locale/sr-Cyrl.mjs.map +1 -1
- package/lib/locale/sr-Latn.mjs +6 -1
- package/lib/locale/sr-Latn.mjs.map +1 -1
- package/lib/locale/sv.mjs +6 -1
- package/lib/locale/sv.mjs.map +1 -1
- package/lib/locale/th.mjs +6 -1
- package/lib/locale/th.mjs.map +1 -1
- package/lib/locale/tr.mjs +6 -1
- package/lib/locale/tr.mjs.map +1 -1
- package/lib/locale/uk.mjs +6 -1
- package/lib/locale/uk.mjs.map +1 -1
- package/lib/locale/vi.mjs +6 -1
- package/lib/locale/vi.mjs.map +1 -1
- package/lib/locale/zh-Hans.mjs +6 -1
- package/lib/locale/zh-Hans.mjs.map +1 -1
- package/lib/locale/zh-Hant.mjs +6 -1
- package/lib/locale/zh-Hant.mjs.map +1 -1
- package/lib/util/globals.mjs +0 -1
- package/lib/util/globals.mjs.map +1 -1
- package/lib/util/helpers.mjs +32 -12
- package/lib/util/helpers.mjs.map +1 -1
- package/package.json +3 -2
package/dist/vuetify.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Vuetify v3.3.
|
|
2
|
+
* Vuetify v3.3.11
|
|
3
3
|
* Forged by John Leider
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -75,6 +75,10 @@
|
|
|
75
75
|
}
|
|
76
76
|
}, 'component');
|
|
77
77
|
|
|
78
|
+
const IN_BROWSER = typeof window !== 'undefined';
|
|
79
|
+
const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
|
|
80
|
+
const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
|
|
81
|
+
|
|
78
82
|
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
|
79
83
|
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
|
80
84
|
function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
|
|
@@ -407,12 +411,22 @@
|
|
|
407
411
|
}
|
|
408
412
|
}
|
|
409
413
|
function focusableChildren(el) {
|
|
410
|
-
|
|
414
|
+
let filterByTabIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
415
|
+
const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', '[tabindex]'].map(s => `${s}${filterByTabIndex ? ':not([tabindex="-1"])' : ''}:not([disabled])`).join(', ');
|
|
411
416
|
return [...el.querySelectorAll(targets)];
|
|
412
417
|
}
|
|
418
|
+
function getNextElement(elements, location, condition) {
|
|
419
|
+
let _el;
|
|
420
|
+
let idx = elements.indexOf(document.activeElement);
|
|
421
|
+
const inc = location === 'next' ? 1 : -1;
|
|
422
|
+
do {
|
|
423
|
+
idx += inc;
|
|
424
|
+
_el = elements[idx];
|
|
425
|
+
} while ((!_el || _el.offsetParent == null || !(condition?.(_el) ?? true)) && idx < elements.length && idx >= 0);
|
|
426
|
+
return _el;
|
|
427
|
+
}
|
|
413
428
|
function focusChild(el, location) {
|
|
414
429
|
const focusable = focusableChildren(el);
|
|
415
|
-
const idx = focusable.indexOf(document.activeElement);
|
|
416
430
|
if (!location) {
|
|
417
431
|
if (el === document.activeElement || !el.contains(document.activeElement)) {
|
|
418
432
|
focusable[0]?.focus();
|
|
@@ -421,19 +435,26 @@
|
|
|
421
435
|
focusable[0]?.focus();
|
|
422
436
|
} else if (location === 'last') {
|
|
423
437
|
focusable.at(-1)?.focus();
|
|
438
|
+
} else if (typeof location === 'number') {
|
|
439
|
+
focusable[location]?.focus();
|
|
424
440
|
} else {
|
|
425
|
-
|
|
426
|
-
let idxx = idx;
|
|
427
|
-
const inc = location === 'next' ? 1 : -1;
|
|
428
|
-
do {
|
|
429
|
-
idxx += inc;
|
|
430
|
-
_el = focusable[idxx];
|
|
431
|
-
} while ((!_el || _el.offsetParent == null) && idxx < focusable.length && idxx >= 0);
|
|
441
|
+
const _el = getNextElement(focusable, location);
|
|
432
442
|
if (_el) _el.focus();else focusChild(el, location === 'next' ? 'first' : 'last');
|
|
433
443
|
}
|
|
434
444
|
}
|
|
435
445
|
function noop() {}
|
|
436
446
|
|
|
447
|
+
/** Returns null if the selector is not supported or we can't check */
|
|
448
|
+
function matchesSelector(el, selector) {
|
|
449
|
+
const supportsSelector = IN_BROWSER && typeof CSS !== 'undefined' && typeof CSS.supports !== 'undefined' && CSS.supports(`selector(${selector})`);
|
|
450
|
+
if (!supportsSelector) return null;
|
|
451
|
+
try {
|
|
452
|
+
return !!el && el.matches(selector);
|
|
453
|
+
} catch (err) {
|
|
454
|
+
return null;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
437
458
|
// Utilities
|
|
438
459
|
const block = ['top', 'bottom'];
|
|
439
460
|
const inline = ['start', 'end', 'left', 'right'];
|
|
@@ -1279,11 +1300,6 @@
|
|
|
1279
1300
|
return ['scroll', 'auto'].includes(style.overflowY);
|
|
1280
1301
|
}
|
|
1281
1302
|
|
|
1282
|
-
const IN_BROWSER = typeof window !== 'undefined';
|
|
1283
|
-
const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
|
|
1284
|
-
const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
|
|
1285
|
-
const SUPPORTS_FOCUS_VISIBLE = IN_BROWSER && typeof CSS !== 'undefined' && typeof CSS.supports !== 'undefined' && CSS.supports('selector(:focus-visible)');
|
|
1286
|
-
|
|
1287
1303
|
// Utilities
|
|
1288
1304
|
|
|
1289
1305
|
// Types
|
|
@@ -1685,7 +1701,8 @@
|
|
|
1685
1701
|
input: {
|
|
1686
1702
|
clear: 'Clear {0}',
|
|
1687
1703
|
prependAction: '{0} prepended action',
|
|
1688
|
-
appendAction: '{0} appended action'
|
|
1704
|
+
appendAction: '{0} appended action',
|
|
1705
|
+
otp: 'Please enter OTP character {0}'
|
|
1689
1706
|
},
|
|
1690
1707
|
fileInput: {
|
|
1691
1708
|
counter: '{0} files',
|
|
@@ -1706,6 +1723,10 @@
|
|
|
1706
1723
|
last: 'Last page'
|
|
1707
1724
|
}
|
|
1708
1725
|
},
|
|
1726
|
+
stepper: {
|
|
1727
|
+
next: 'Next',
|
|
1728
|
+
prev: 'Previous'
|
|
1729
|
+
},
|
|
1709
1730
|
rating: {
|
|
1710
1731
|
ariaLabel: {
|
|
1711
1732
|
item: 'Rating {0} of {1}'
|
|
@@ -2244,9 +2265,11 @@
|
|
|
2244
2265
|
if (head) {
|
|
2245
2266
|
if (head.push) {
|
|
2246
2267
|
const entry = head.push(getHead);
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2268
|
+
if (IN_BROWSER) {
|
|
2269
|
+
vue.watch(styles, () => {
|
|
2270
|
+
entry.patch(getHead);
|
|
2271
|
+
});
|
|
2272
|
+
}
|
|
2250
2273
|
} else {
|
|
2251
2274
|
if (IN_BROWSER) {
|
|
2252
2275
|
head.addHeadObjs(vue.computed(getHead));
|
|
@@ -2257,9 +2280,13 @@
|
|
|
2257
2280
|
}
|
|
2258
2281
|
} else {
|
|
2259
2282
|
let styleEl = IN_BROWSER ? document.getElementById('vuetify-theme-stylesheet') : null;
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2283
|
+
if (IN_BROWSER) {
|
|
2284
|
+
vue.watch(styles, updateStyles, {
|
|
2285
|
+
immediate: true
|
|
2286
|
+
});
|
|
2287
|
+
} else {
|
|
2288
|
+
updateStyles();
|
|
2289
|
+
}
|
|
2263
2290
|
function updateStyles() {
|
|
2264
2291
|
if (typeof document !== 'undefined' && !styleEl) {
|
|
2265
2292
|
const el = document.createElement('style');
|
|
@@ -3864,7 +3891,7 @@
|
|
|
3864
3891
|
throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`);
|
|
3865
3892
|
}
|
|
3866
3893
|
const value = vue.toRef(props, 'value');
|
|
3867
|
-
const disabled = vue.computed(() => group.disabled.value || props.disabled);
|
|
3894
|
+
const disabled = vue.computed(() => !!(group.disabled.value || props.disabled));
|
|
3868
3895
|
group.register({
|
|
3869
3896
|
id,
|
|
3870
3897
|
value,
|
|
@@ -5799,7 +5826,7 @@
|
|
|
5799
5826
|
});
|
|
5800
5827
|
function onFocus(e) {
|
|
5801
5828
|
isFocused.value = true;
|
|
5802
|
-
if (
|
|
5829
|
+
if (matchesSelector(e.target, ':focus-visible') !== false) {
|
|
5803
5830
|
isFocusVisible.value = true;
|
|
5804
5831
|
}
|
|
5805
5832
|
}
|
|
@@ -6808,7 +6835,7 @@
|
|
|
6808
6835
|
}, [!slots.filter ? vue.createVNode(VIcon, {
|
|
6809
6836
|
"key": "filter-icon",
|
|
6810
6837
|
"icon": props.filterIcon
|
|
6811
|
-
}, null) : vue.
|
|
6838
|
+
}, null) : vue.createVNode(VDefaultsProvider, {
|
|
6812
6839
|
"key": "filter-defaults",
|
|
6813
6840
|
"disabled": !props.filterIcon,
|
|
6814
6841
|
"defaults": {
|
|
@@ -6816,7 +6843,7 @@
|
|
|
6816
6843
|
icon: props.filterIcon
|
|
6817
6844
|
}
|
|
6818
6845
|
}
|
|
6819
|
-
},
|
|
6846
|
+
}, slots.filter)]), [[vue.vShow, group.isSelected.value]])]
|
|
6820
6847
|
}), hasPrepend && vue.createVNode("div", {
|
|
6821
6848
|
"key": "prepend",
|
|
6822
6849
|
"class": "v-chip__prepend"
|
|
@@ -8897,7 +8924,7 @@
|
|
|
8897
8924
|
runCloseDelay();
|
|
8898
8925
|
},
|
|
8899
8926
|
onFocus: e => {
|
|
8900
|
-
if (
|
|
8927
|
+
if (matchesSelector(e.target, ':focus-visible') === false) return;
|
|
8901
8928
|
isFocused = true;
|
|
8902
8929
|
e.stopPropagation();
|
|
8903
8930
|
activatorEl.value = e.currentTarget || e.target;
|
|
@@ -9718,6 +9745,20 @@
|
|
|
9718
9745
|
}
|
|
9719
9746
|
return false;
|
|
9720
9747
|
},
|
|
9748
|
+
set(target, key, value) {
|
|
9749
|
+
if (Reflect.has(target, key)) {
|
|
9750
|
+
return Reflect.set(target, key, value);
|
|
9751
|
+
}
|
|
9752
|
+
|
|
9753
|
+
// Skip internal properties
|
|
9754
|
+
if (typeof key === 'symbol' || key.startsWith('__')) return false;
|
|
9755
|
+
for (const ref of refs) {
|
|
9756
|
+
if (ref.value && Reflect.has(ref.value, key)) {
|
|
9757
|
+
return Reflect.set(ref.value, key, value);
|
|
9758
|
+
}
|
|
9759
|
+
}
|
|
9760
|
+
return false;
|
|
9761
|
+
},
|
|
9721
9762
|
getOwnPropertyDescriptor(target, key) {
|
|
9722
9763
|
const descriptor = Reflect.getOwnPropertyDescriptor(target, key);
|
|
9723
9764
|
if (descriptor) return descriptor;
|
|
@@ -9803,8 +9844,30 @@
|
|
|
9803
9844
|
}, 40);
|
|
9804
9845
|
}
|
|
9805
9846
|
});
|
|
9847
|
+
function onFocusIn(e) {
|
|
9848
|
+
const before = e.relatedTarget;
|
|
9849
|
+
const after = e.target;
|
|
9850
|
+
if (before !== after && overlay.value?.contentEl &&
|
|
9851
|
+
// We're the topmost menu
|
|
9852
|
+
overlay.value?.globalTop &&
|
|
9853
|
+
// It isn't the document or the menu body
|
|
9854
|
+
![document, overlay.value.contentEl].includes(after) &&
|
|
9855
|
+
// It isn't inside the menu body
|
|
9856
|
+
!overlay.value.contentEl.contains(after)) {
|
|
9857
|
+
const focusable = focusableChildren(overlay.value.contentEl);
|
|
9858
|
+
focusable[0]?.focus();
|
|
9859
|
+
}
|
|
9860
|
+
}
|
|
9806
9861
|
vue.watch(isActive, val => {
|
|
9807
|
-
|
|
9862
|
+
if (val) {
|
|
9863
|
+
parent?.register();
|
|
9864
|
+
document.addEventListener('focusin', onFocusIn, {
|
|
9865
|
+
once: true
|
|
9866
|
+
});
|
|
9867
|
+
} else {
|
|
9868
|
+
parent?.unregister();
|
|
9869
|
+
document.removeEventListener('focusin', onFocusIn);
|
|
9870
|
+
}
|
|
9808
9871
|
});
|
|
9809
9872
|
function onClickOutside() {
|
|
9810
9873
|
parent?.closeParents();
|
|
@@ -9812,8 +9875,11 @@
|
|
|
9812
9875
|
function onKeydown(e) {
|
|
9813
9876
|
if (props.disabled) return;
|
|
9814
9877
|
if (e.key === 'Tab') {
|
|
9815
|
-
|
|
9816
|
-
|
|
9878
|
+
const nextElement = getNextElement(focusableChildren(overlay.value?.contentEl, false), e.shiftKey ? 'prev' : 'next', el => el.tabIndex >= 0);
|
|
9879
|
+
if (!nextElement) {
|
|
9880
|
+
isActive.value = false;
|
|
9881
|
+
overlay.value?.activatorEl?.focus();
|
|
9882
|
+
}
|
|
9817
9883
|
}
|
|
9818
9884
|
}
|
|
9819
9885
|
function onActivatorKeydown(e) {
|
|
@@ -10727,6 +10793,7 @@
|
|
|
10727
10793
|
type: Function,
|
|
10728
10794
|
default: deepEqual
|
|
10729
10795
|
},
|
|
10796
|
+
itemColor: String,
|
|
10730
10797
|
...makeItemsProps({
|
|
10731
10798
|
itemChildren: false
|
|
10732
10799
|
})
|
|
@@ -10779,7 +10846,12 @@
|
|
|
10779
10846
|
const form = useForm();
|
|
10780
10847
|
const selections = vue.computed(() => {
|
|
10781
10848
|
return model.value.map(v => {
|
|
10782
|
-
return items.value.find(item =>
|
|
10849
|
+
return items.value.find(item => {
|
|
10850
|
+
const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
|
|
10851
|
+
const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
|
|
10852
|
+
if (itemRawValue === undefined || modelRawValue === undefined) return false;
|
|
10853
|
+
return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
|
|
10854
|
+
}) || v;
|
|
10783
10855
|
});
|
|
10784
10856
|
});
|
|
10785
10857
|
const selected = vue.computed(() => selections.value.map(selection => selection.props.value));
|
|
@@ -10808,7 +10880,7 @@
|
|
|
10808
10880
|
menu.value = !menu.value;
|
|
10809
10881
|
}
|
|
10810
10882
|
function onKeydown(e) {
|
|
10811
|
-
if (props.readonly || form?.isReadonly.value) return;
|
|
10883
|
+
if (!e.key || props.readonly || form?.isReadonly.value) return;
|
|
10812
10884
|
if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
|
|
10813
10885
|
e.preventDefault();
|
|
10814
10886
|
}
|
|
@@ -10872,6 +10944,16 @@
|
|
|
10872
10944
|
function onFocusin(e) {
|
|
10873
10945
|
isFocused.value = true;
|
|
10874
10946
|
}
|
|
10947
|
+
function onModelUpdate(v) {
|
|
10948
|
+
if (v == null) model.value = [];else if (matchesSelector(vTextFieldRef.value, ':autofill') || matchesSelector(vTextFieldRef.value, ':-webkit-autofill')) {
|
|
10949
|
+
const item = items.value.find(item => item.title === v);
|
|
10950
|
+
if (item) {
|
|
10951
|
+
select(item);
|
|
10952
|
+
}
|
|
10953
|
+
} else if (vTextFieldRef.value) {
|
|
10954
|
+
vTextFieldRef.value.value = '';
|
|
10955
|
+
}
|
|
10956
|
+
}
|
|
10875
10957
|
useRender(() => {
|
|
10876
10958
|
const hasChips = !!(props.chips || slots.chip);
|
|
10877
10959
|
const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
|
|
@@ -10882,9 +10964,7 @@
|
|
|
10882
10964
|
"ref": vTextFieldRef
|
|
10883
10965
|
}, textFieldProps, {
|
|
10884
10966
|
"modelValue": model.value.map(v => v.props.value).join(', '),
|
|
10885
|
-
"onUpdate:modelValue":
|
|
10886
|
-
if (v == null) model.value = [];
|
|
10887
|
-
},
|
|
10967
|
+
"onUpdate:modelValue": onModelUpdate,
|
|
10888
10968
|
"focused": isFocused.value,
|
|
10889
10969
|
"onUpdate:focused": $event => isFocused.value = $event,
|
|
10890
10970
|
"validationValue": model.externalValue,
|
|
@@ -10897,7 +10977,7 @@
|
|
|
10897
10977
|
'v-select--selection-slot': !!slots.selection
|
|
10898
10978
|
}, props.class],
|
|
10899
10979
|
"style": props.style,
|
|
10900
|
-
"
|
|
10980
|
+
"inputmode": "none",
|
|
10901
10981
|
"placeholder": placeholder,
|
|
10902
10982
|
"onClick:clear": onClear,
|
|
10903
10983
|
"onMousedown:control": onMousedownControl,
|
|
@@ -10927,7 +11007,8 @@
|
|
|
10927
11007
|
"onKeydown": onListKeydown,
|
|
10928
11008
|
"onFocusin": onFocusin,
|
|
10929
11009
|
"onScrollPassive": onListScroll,
|
|
10930
|
-
"tabindex": "-1"
|
|
11010
|
+
"tabindex": "-1",
|
|
11011
|
+
"color": props.itemColor ?? props.color
|
|
10931
11012
|
}, {
|
|
10932
11013
|
default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
|
|
10933
11014
|
"title": t(props.noDataText)
|
|
@@ -11189,7 +11270,7 @@
|
|
|
11189
11270
|
const vTextFieldRef = vue.ref();
|
|
11190
11271
|
const isFocused = vue.shallowRef(false);
|
|
11191
11272
|
const isPristine = vue.shallowRef(true);
|
|
11192
|
-
const listHasFocus = vue.
|
|
11273
|
+
const listHasFocus = vue.shallowRef(false);
|
|
11193
11274
|
const vMenuRef = vue.ref();
|
|
11194
11275
|
const _menu = useProxiedModel(props, 'menu');
|
|
11195
11276
|
const menu = vue.computed({
|
|
@@ -11222,7 +11303,12 @@
|
|
|
11222
11303
|
} = useFilter(props, items, () => isPristine.value ? '' : search.value);
|
|
11223
11304
|
const selections = vue.computed(() => {
|
|
11224
11305
|
return model.value.map(v => {
|
|
11225
|
-
return items.value.find(item =>
|
|
11306
|
+
return items.value.find(item => {
|
|
11307
|
+
const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
|
|
11308
|
+
const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
|
|
11309
|
+
if (itemRawValue === undefined || modelRawValue === undefined) return false;
|
|
11310
|
+
return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
|
|
11311
|
+
}) || v;
|
|
11226
11312
|
});
|
|
11227
11313
|
});
|
|
11228
11314
|
const displayItems = vue.computed(() => {
|
|
@@ -11274,11 +11360,8 @@
|
|
|
11274
11360
|
if (['Escape'].includes(e.key)) {
|
|
11275
11361
|
menu.value = false;
|
|
11276
11362
|
}
|
|
11277
|
-
if (['Enter', '
|
|
11278
|
-
|
|
11279
|
-
select(filteredItems.value[0]);
|
|
11280
|
-
}
|
|
11281
|
-
isPristine.value = true;
|
|
11363
|
+
if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key)) {
|
|
11364
|
+
select(filteredItems.value[0]);
|
|
11282
11365
|
}
|
|
11283
11366
|
if (e.key === 'ArrowDown' && highlightFirst.value) {
|
|
11284
11367
|
listRef.value?.focus('next');
|
|
@@ -11319,6 +11402,14 @@
|
|
|
11319
11402
|
function onInput(e) {
|
|
11320
11403
|
search.value = e.target.value;
|
|
11321
11404
|
}
|
|
11405
|
+
function onChange(e) {
|
|
11406
|
+
if (matchesSelector(vTextFieldRef.value, ':autofill') || matchesSelector(vTextFieldRef.value, ':-webkit-autofill')) {
|
|
11407
|
+
const item = items.value.find(item => item.title === e.target.value);
|
|
11408
|
+
if (item) {
|
|
11409
|
+
select(item);
|
|
11410
|
+
}
|
|
11411
|
+
}
|
|
11412
|
+
}
|
|
11322
11413
|
function onAfterLeave() {
|
|
11323
11414
|
if (isFocused.value) {
|
|
11324
11415
|
isPristine.value = true;
|
|
@@ -11398,6 +11489,7 @@
|
|
|
11398
11489
|
"validationValue": model.externalValue,
|
|
11399
11490
|
"dirty": isDirty,
|
|
11400
11491
|
"onInput": onInput,
|
|
11492
|
+
"onChange": onChange,
|
|
11401
11493
|
"class": ['v-autocomplete', `v-autocomplete--${props.multiple ? 'multiple' : 'single'}`, {
|
|
11402
11494
|
'v-autocomplete--active-menu': menu.value,
|
|
11403
11495
|
'v-autocomplete--chips': !!props.chips,
|
|
@@ -11435,7 +11527,8 @@
|
|
|
11435
11527
|
"onFocusin": onFocusin,
|
|
11436
11528
|
"onFocusout": onFocusout,
|
|
11437
11529
|
"onScrollPassive": onListScroll,
|
|
11438
|
-
"tabindex": "-1"
|
|
11530
|
+
"tabindex": "-1",
|
|
11531
|
+
"color": props.itemColor ?? props.color
|
|
11439
11532
|
}, {
|
|
11440
11533
|
default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
|
|
11441
11534
|
"title": t(props.noDataText)
|
|
@@ -12483,6 +12576,7 @@
|
|
|
12483
12576
|
},
|
|
12484
12577
|
// TODO: mandatory should probably not be exposed but do this for now
|
|
12485
12578
|
mandatory: {
|
|
12579
|
+
type: [Boolean, String],
|
|
12486
12580
|
default: 'force'
|
|
12487
12581
|
},
|
|
12488
12582
|
...makeComponentProps(),
|
|
@@ -12850,7 +12944,9 @@
|
|
|
12850
12944
|
"style": props.style
|
|
12851
12945
|
}, [hasContent.value && slots.default?.()]), [[vue.vShow, groupItem.isSelected.value]])]
|
|
12852
12946
|
}));
|
|
12853
|
-
return {
|
|
12947
|
+
return {
|
|
12948
|
+
groupItem
|
|
12949
|
+
};
|
|
12854
12950
|
}
|
|
12855
12951
|
});
|
|
12856
12952
|
|
|
@@ -13404,6 +13500,7 @@
|
|
|
13404
13500
|
const step = vue.computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
|
|
13405
13501
|
const decimals = vue.computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
|
|
13406
13502
|
function roundValue(value) {
|
|
13503
|
+
value = parseFloat(value);
|
|
13407
13504
|
if (step.value <= 0) return value;
|
|
13408
13505
|
const clamped = clamp(value, min.value, max.value);
|
|
13409
13506
|
const offset = min.value % step.value;
|
|
@@ -13907,9 +14004,8 @@
|
|
|
13907
14004
|
rtlClasses
|
|
13908
14005
|
} = useRtl();
|
|
13909
14006
|
const steps = useSteps(props);
|
|
13910
|
-
const model = useProxiedModel(props, 'modelValue', undefined,
|
|
13911
|
-
|
|
13912
|
-
return steps.roundValue(value);
|
|
14007
|
+
const model = useProxiedModel(props, 'modelValue', undefined, value => {
|
|
14008
|
+
return steps.roundValue(value == null ? steps.min.value : value);
|
|
13913
14009
|
});
|
|
13914
14010
|
const {
|
|
13915
14011
|
min,
|
|
@@ -14703,7 +14799,7 @@
|
|
|
14703
14799
|
const vTextFieldRef = vue.ref();
|
|
14704
14800
|
const isFocused = vue.shallowRef(false);
|
|
14705
14801
|
const isPristine = vue.shallowRef(true);
|
|
14706
|
-
const listHasFocus = vue.
|
|
14802
|
+
const listHasFocus = vue.shallowRef(false);
|
|
14707
14803
|
const vMenuRef = vue.ref();
|
|
14708
14804
|
const _menu = useProxiedModel(props, 'menu');
|
|
14709
14805
|
const menu = vue.computed({
|
|
@@ -14775,7 +14871,12 @@
|
|
|
14775
14871
|
} = useFilter(props, items, () => isPristine.value ? '' : search.value);
|
|
14776
14872
|
const selections = vue.computed(() => {
|
|
14777
14873
|
return model.value.map(v => {
|
|
14778
|
-
return items.value.find(item =>
|
|
14874
|
+
return items.value.find(item => {
|
|
14875
|
+
const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
|
|
14876
|
+
const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
|
|
14877
|
+
if (itemRawValue === undefined || modelRawValue === undefined) return false;
|
|
14878
|
+
return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
|
|
14879
|
+
}) || v;
|
|
14779
14880
|
});
|
|
14780
14881
|
});
|
|
14781
14882
|
const displayItems = vue.computed(() => {
|
|
@@ -14984,7 +15085,8 @@
|
|
|
14984
15085
|
"onFocusin": onFocusin,
|
|
14985
15086
|
"onFocusout": onFocusout,
|
|
14986
15087
|
"onScrollPassive": onListScroll,
|
|
14987
|
-
"tabindex": "-1"
|
|
15088
|
+
"tabindex": "-1",
|
|
15089
|
+
"color": props.itemColor ?? props.color
|
|
14988
15090
|
}, {
|
|
14989
15091
|
default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
|
|
14990
15092
|
"title": t(props.noDataText)
|
|
@@ -15402,6 +15504,11 @@
|
|
|
15402
15504
|
return !groupItem.isSelected.value && selectedIndices.value.some(selectedIndex => selectedIndex - index === -1);
|
|
15403
15505
|
});
|
|
15404
15506
|
vue.provide(VExpansionPanelSymbol, groupItem);
|
|
15507
|
+
provideDefaults({
|
|
15508
|
+
VExpansionPanelText: {
|
|
15509
|
+
eager: vue.toRef(props, 'eager')
|
|
15510
|
+
}
|
|
15511
|
+
});
|
|
15405
15512
|
useRender(() => {
|
|
15406
15513
|
const hasText = !!(slots.text || props.text);
|
|
15407
15514
|
const hasTitle = !!(slots.title || props.title);
|
|
@@ -15426,8 +15533,7 @@
|
|
|
15426
15533
|
}, {
|
|
15427
15534
|
default: () => [slots.title ? slots.title() : props.title]
|
|
15428
15535
|
}), hasText && vue.createVNode(VExpansionPanelText, {
|
|
15429
|
-
"key": "text"
|
|
15430
|
-
"eager": props.eager
|
|
15536
|
+
"key": "text"
|
|
15431
15537
|
}, {
|
|
15432
15538
|
default: () => [slots.text ? slots.text() : props.text]
|
|
15433
15539
|
}), slots.default?.()]
|
|
@@ -15615,6 +15721,7 @@
|
|
|
15615
15721
|
"name": props.name,
|
|
15616
15722
|
"onClick": e => {
|
|
15617
15723
|
e.stopPropagation();
|
|
15724
|
+
if (isReadonly.value) e.preventDefault();
|
|
15618
15725
|
onFocus();
|
|
15619
15726
|
},
|
|
15620
15727
|
"onChange": e => {
|
|
@@ -16387,7 +16494,7 @@
|
|
|
16387
16494
|
});
|
|
16388
16495
|
});
|
|
16389
16496
|
vue.onBeforeUnmount(() => {
|
|
16390
|
-
|
|
16497
|
+
window.removeEventListener('scroll', onScroll);
|
|
16391
16498
|
});
|
|
16392
16499
|
let lastScrollTop = 0;
|
|
16393
16500
|
function onScroll() {
|
|
@@ -17768,7 +17875,9 @@
|
|
|
17768
17875
|
value,
|
|
17769
17876
|
index,
|
|
17770
17877
|
rating: normalizedValue.value
|
|
17771
|
-
}) : vue.createVNode(VBtn,
|
|
17878
|
+
}) : vue.createVNode(VBtn, vue.mergeProps({
|
|
17879
|
+
"aria-label": t(props.itemAriaLabel, value, props.length)
|
|
17880
|
+
}, btnProps), null)]), vue.createVNode("input", {
|
|
17772
17881
|
"class": "v-rating__hidden",
|
|
17773
17882
|
"name": name.value,
|
|
17774
17883
|
"id": id,
|
|
@@ -19835,12 +19944,11 @@
|
|
|
19835
19944
|
function endOfMonth(date) {
|
|
19836
19945
|
return new Date(date.getFullYear(), date.getMonth() + 1, 0);
|
|
19837
19946
|
}
|
|
19838
|
-
function
|
|
19839
|
-
const
|
|
19840
|
-
|
|
19841
|
-
|
|
19842
|
-
|
|
19843
|
-
return `${formattedValue}T00:00:00.000${offsetSign}${offsetValue}:00`;
|
|
19947
|
+
function parseLocalDate(value) {
|
|
19948
|
+
const parts = value.split('-').map(Number);
|
|
19949
|
+
|
|
19950
|
+
// new Date() uses local time zone when passing individual date component values
|
|
19951
|
+
return new Date(parts[0], parts[1] - 1, parts[2]);
|
|
19844
19952
|
}
|
|
19845
19953
|
const _YYYMMDD = /([12]\d{3}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12]\d|3[01]))/;
|
|
19846
19954
|
function date(value) {
|
|
@@ -19849,7 +19957,7 @@
|
|
|
19849
19957
|
if (typeof value === 'string') {
|
|
19850
19958
|
let parsed;
|
|
19851
19959
|
if (_YYYMMDD.test(value)) {
|
|
19852
|
-
|
|
19960
|
+
return parseLocalDate(value);
|
|
19853
19961
|
} else {
|
|
19854
19962
|
parsed = Date.parse(value);
|
|
19855
19963
|
}
|
|
@@ -20183,7 +20291,7 @@
|
|
|
20183
20291
|
date
|
|
20184
20292
|
};
|
|
20185
20293
|
}
|
|
20186
|
-
const version$1 = "3.3.
|
|
20294
|
+
const version$1 = "3.3.11";
|
|
20187
20295
|
createVuetify$1.version = version$1;
|
|
20188
20296
|
|
|
20189
20297
|
// Vue's inject() can only be used in setup
|
|
@@ -20208,7 +20316,7 @@
|
|
|
20208
20316
|
...options
|
|
20209
20317
|
});
|
|
20210
20318
|
};
|
|
20211
|
-
const version = "3.3.
|
|
20319
|
+
const version = "3.3.11";
|
|
20212
20320
|
createVuetify.version = version;
|
|
20213
20321
|
|
|
20214
20322
|
exports.components = components;
|