@vuetify/nightly 3.8.6-dev.2025-05-21 → 3.8.6-master.2025-05-22
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 -21
- package/dist/json/attributes.json +3598 -3634
- package/dist/json/importMap-labs.json +24 -24
- package/dist/json/importMap.json +184 -184
- package/dist/json/tags.json +0 -9
- package/dist/json/web-types.json +6522 -6697
- package/dist/vuetify-labs.cjs +223 -323
- package/dist/vuetify-labs.css +4050 -4078
- package/dist/vuetify-labs.d.ts +1350 -1508
- package/dist/vuetify-labs.esm.js +224 -324
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +223 -323
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +212 -317
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3022 -3050
- package/dist/vuetify.d.ts +517 -667
- package/dist/vuetify.esm.js +213 -318
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +212 -317
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1195 -1200
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAlert/VAlert.css +1 -6
- package/lib/components/VAlert/VAlert.d.ts +0 -35
- package/lib/components/VAlert/VAlert.js +9 -14
- package/lib/components/VAlert/VAlert.js.map +1 -1
- package/lib/components/VAlert/VAlert.sass +1 -7
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +96 -120
- package/lib/components/VAutocomplete/VAutocomplete.js +1 -18
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VBtnGroup/VBtnGroup.css +7 -30
- package/lib/components/VBtnGroup/VBtnGroup.d.ts +32 -58
- package/lib/components/VBtnGroup/VBtnGroup.js +3 -7
- package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
- package/lib/components/VBtnGroup/VBtnGroup.sass +17 -44
- package/lib/components/VBtnToggle/VBtnToggle.d.ts +0 -25
- package/lib/components/VCheckbox/VCheckbox.d.ts +3 -3
- package/lib/components/VCombobox/VCombobox.d.ts +96 -120
- package/lib/components/VCombobox/VCombobox.js +1 -19
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VDatePicker/VDatePicker.d.ts +0 -10
- package/lib/components/VDatePicker/VDatePickerMonth.d.ts +0 -10
- package/lib/components/VDatePicker/VDatePickerMonth.js +1 -1
- package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
- package/lib/components/VField/VField.d.ts +3 -3
- package/lib/components/VFileInput/VFileInput.d.ts +15 -15
- package/lib/components/VInput/VInput.d.ts +4 -4
- package/lib/components/VList/VListChildren.js.map +1 -1
- package/lib/components/VNavigationDrawer/touch.js +2 -4
- package/lib/components/VNavigationDrawer/touch.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.d.ts +89 -103
- package/lib/components/VNumberInput/VNumberInput.js +22 -29
- package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
- package/lib/components/VOverlay/VOverlay.css +1 -1
- package/lib/components/VOverlay/_variables.scss +1 -1
- package/lib/components/VOverlay/locationStrategies.js +16 -8
- package/lib/components/VOverlay/locationStrategies.js.map +1 -1
- package/lib/components/VProgressCircular/VProgressCircular.js +2 -2
- package/lib/components/VProgressCircular/VProgressCircular.js.map +1 -1
- package/lib/components/VRadioGroup/VRadioGroup.d.ts +3 -3
- package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
- package/lib/components/VSelect/VSelect.d.ts +96 -120
- package/lib/components/VSelect/VSelect.js +37 -25
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSlider/VSlider.d.ts +3 -3
- package/lib/components/VSlider/slider.js +1 -1
- package/lib/components/VSlider/slider.js.map +1 -1
- package/lib/components/VSwitch/VSwitch.d.ts +3 -3
- package/lib/components/VTextField/VTextField.d.ts +27 -27
- package/lib/components/VTextarea/VTextarea.d.ts +15 -15
- package/lib/composables/calendar.d.ts +0 -6
- package/lib/composables/calendar.js +1 -2
- package/lib/composables/calendar.js.map +1 -1
- package/lib/composables/date/DateAdapter.d.ts +1 -1
- package/lib/composables/date/DateAdapter.js.map +1 -1
- package/lib/composables/date/adapters/vuetify.d.ts +1 -1
- package/lib/composables/date/adapters/vuetify.js +4 -4
- package/lib/composables/date/adapters/vuetify.js.map +1 -1
- package/lib/composables/date/date.d.ts +1 -1
- package/lib/composables/date/index.d.ts +0 -1
- package/lib/composables/date/index.js +0 -1
- package/lib/composables/date/index.js.map +1 -1
- package/lib/composables/filter.js +0 -3
- package/lib/composables/filter.js.map +1 -1
- package/lib/composables/goto.js +1 -1
- package/lib/composables/goto.js.map +1 -1
- package/lib/composables/theme.d.ts +1 -6
- package/lib/composables/theme.js +26 -94
- package/lib/composables/theme.js.map +1 -1
- package/lib/composables/virtual.js +1 -6
- package/lib/composables/virtual.js.map +1 -1
- package/lib/entry-bundler.d.ts +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +67 -72
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VCalendar/VCalendar.d.ts +0 -10
- package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
- package/lib/labs/VDateInput/VDateInput.d.ts +87 -97
- package/lib/labs/VFileUpload/VFileUpload.d.ts +3 -3
- package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
- package/lib/labs/VIconBtn/VIconBtn.js +11 -7
- package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
- package/lib/labs/entry-bundler.d.ts +1 -1
- package/lib/util/box.d.ts +1 -0
- package/lib/util/box.js +27 -0
- package/lib/util/box.js.map +1 -1
- package/lib/util/globals.d.ts +0 -1
- package/lib/util/globals.js +0 -1
- package/lib/util/globals.js.map +1 -1
- package/package.json +5 -7
- package/lib/composables/iconSizes.d.ts +0 -28
- package/lib/composables/iconSizes.js +0 -23
- package/lib/composables/iconSizes.js.map +0 -1
package/dist/vuetify.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.8.6-
|
2
|
+
* Vuetify v3.8.6-master.2025-05-22
|
3
3
|
* Forged by John Leider
|
4
4
|
* Released under the MIT License.
|
5
5
|
*/
|
@@ -14,7 +14,6 @@
|
|
14
14
|
const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
|
15
15
|
const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
|
16
16
|
const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
|
17
|
-
const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
|
18
17
|
|
19
18
|
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
20
19
|
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
@@ -619,6 +618,33 @@
|
|
619
618
|
return target.getBoundingClientRect();
|
620
619
|
}
|
621
620
|
}
|
621
|
+
function getElementBox(el) {
|
622
|
+
if (el === document.documentElement) {
|
623
|
+
if (!visualViewport) {
|
624
|
+
return new Box({
|
625
|
+
x: 0,
|
626
|
+
y: 0,
|
627
|
+
width: document.documentElement.clientWidth,
|
628
|
+
height: document.documentElement.clientHeight
|
629
|
+
});
|
630
|
+
} else {
|
631
|
+
return new Box({
|
632
|
+
x: visualViewport.scale > 1 ? 0 : visualViewport.offsetLeft,
|
633
|
+
y: visualViewport.scale > 1 ? 0 : visualViewport.offsetTop,
|
634
|
+
width: visualViewport.width * visualViewport.scale,
|
635
|
+
height: visualViewport.height * visualViewport.scale
|
636
|
+
});
|
637
|
+
}
|
638
|
+
} else {
|
639
|
+
const rect = el.getBoundingClientRect();
|
640
|
+
return new Box({
|
641
|
+
x: rect.x,
|
642
|
+
y: rect.y,
|
643
|
+
width: el.clientWidth,
|
644
|
+
height: el.clientHeight
|
645
|
+
});
|
646
|
+
}
|
647
|
+
}
|
622
648
|
|
623
649
|
// Utilities
|
624
650
|
|
@@ -2787,7 +2813,6 @@
|
|
2787
2813
|
function genDefaults$1() {
|
2788
2814
|
return {
|
2789
2815
|
defaultTheme: 'light',
|
2790
|
-
prefix: 'v-',
|
2791
2816
|
variations: {
|
2792
2817
|
colors: [],
|
2793
2818
|
lighten: 0,
|
@@ -2869,10 +2894,7 @@
|
|
2869
2894
|
}
|
2870
2895
|
}
|
2871
2896
|
},
|
2872
|
-
stylesheetId: 'vuetify-theme-stylesheet'
|
2873
|
-
scoped: false,
|
2874
|
-
unimportant: false,
|
2875
|
-
utilities: true
|
2897
|
+
stylesheetId: 'vuetify-theme-stylesheet'
|
2876
2898
|
};
|
2877
2899
|
}
|
2878
2900
|
function parseThemeOptions() {
|
@@ -2895,21 +2917,21 @@
|
|
2895
2917
|
function createCssClass(lines, selector, content, scope) {
|
2896
2918
|
lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
|
2897
2919
|
}
|
2898
|
-
function genCssVariables(theme
|
2920
|
+
function genCssVariables(theme) {
|
2899
2921
|
const lightOverlay = theme.dark ? 2 : 1;
|
2900
2922
|
const darkOverlay = theme.dark ? 1 : 2;
|
2901
2923
|
const variables = [];
|
2902
2924
|
for (const [key, value] of Object.entries(theme.colors)) {
|
2903
2925
|
const rgb = parseColor(value);
|
2904
|
-
variables.push(
|
2926
|
+
variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
|
2905
2927
|
if (!key.startsWith('on-')) {
|
2906
|
-
variables.push(
|
2928
|
+
variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
|
2907
2929
|
}
|
2908
2930
|
}
|
2909
2931
|
for (const [key, value] of Object.entries(theme.variables)) {
|
2910
2932
|
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
|
2911
2933
|
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
|
2912
|
-
variables.push(
|
2934
|
+
variables.push(`--v-${key}: ${rgb ?? value}`);
|
2913
2935
|
}
|
2914
2936
|
return variables;
|
2915
2937
|
}
|
@@ -2953,8 +2975,7 @@
|
|
2953
2975
|
const scopeSelector = `:where(${scope})`;
|
2954
2976
|
return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
|
2955
2977
|
}
|
2956
|
-
function upsertStyles(
|
2957
|
-
const styleEl = getOrCreateStyleElement(id, cspNonce);
|
2978
|
+
function upsertStyles(styleEl, styles) {
|
2958
2979
|
if (!styleEl) return;
|
2959
2980
|
styleEl.innerHTML = styles;
|
2960
2981
|
}
|
@@ -2974,17 +2995,8 @@
|
|
2974
2995
|
// Composables
|
2975
2996
|
function createTheme(options) {
|
2976
2997
|
const parsedOptions = parseThemeOptions(options);
|
2977
|
-
const
|
2998
|
+
const name = vue.shallowRef(parsedOptions.defaultTheme);
|
2978
2999
|
const themes = vue.ref(parsedOptions.themes);
|
2979
|
-
const systemName = vue.shallowRef('light');
|
2980
|
-
const name = vue.computed({
|
2981
|
-
get() {
|
2982
|
-
return _name.value === 'system' ? systemName.value : _name.value;
|
2983
|
-
},
|
2984
|
-
set(val) {
|
2985
|
-
_name.value = val;
|
2986
|
-
}
|
2987
|
-
});
|
2988
3000
|
const computedThemes = vue.computed(() => {
|
2989
3001
|
const acc = {};
|
2990
3002
|
for (const [name, original] of Object.entries(themes.value)) {
|
@@ -3005,49 +3017,28 @@
|
|
3005
3017
|
const current = vue.toRef(() => computedThemes.value[name.value]);
|
3006
3018
|
const styles = vue.computed(() => {
|
3007
3019
|
const lines = [];
|
3008
|
-
const important = parsedOptions.unimportant ? '' : ' !important';
|
3009
|
-
const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
|
3010
3020
|
if (current.value?.dark) {
|
3011
3021
|
createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
|
3012
3022
|
}
|
3013
|
-
createCssClass(lines, ':root', genCssVariables(current.value
|
3023
|
+
createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
|
3014
3024
|
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
|
3015
|
-
createCssClass(lines,
|
3016
|
-
}
|
3017
|
-
|
3018
|
-
|
3019
|
-
|
3020
|
-
|
3021
|
-
|
3022
|
-
|
3023
|
-
|
3024
|
-
}
|
3025
|
-
|
3026
|
-
|
3027
|
-
createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
|
3028
|
-
}
|
3025
|
+
createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
|
3026
|
+
}
|
3027
|
+
const bgLines = [];
|
3028
|
+
const fgLines = [];
|
3029
|
+
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
|
3030
|
+
for (const key of colors) {
|
3031
|
+
if (key.startsWith('on-')) {
|
3032
|
+
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
|
3033
|
+
} else {
|
3034
|
+
createCssClass(bgLines, `.bg-${key}`, [`--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`, `background-color: rgb(var(--v-theme-${key})) !important`, `color: rgb(var(--v-theme-on-${key})) !important`], parsedOptions.scope);
|
3035
|
+
createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
|
3036
|
+
createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
|
3029
3037
|
}
|
3030
|
-
lines.push(...bgLines, ...fgLines);
|
3031
3038
|
}
|
3039
|
+
lines.push(...bgLines, ...fgLines);
|
3032
3040
|
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
|
3033
3041
|
});
|
3034
|
-
const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
|
3035
|
-
const themeNames = vue.toRef(() => Object.keys(computedThemes.value));
|
3036
|
-
if (SUPPORTS_MATCH_MEDIA) {
|
3037
|
-
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
3038
|
-
function updateSystemName() {
|
3039
|
-
systemName.value = media.matches ? 'dark' : 'light';
|
3040
|
-
}
|
3041
|
-
updateSystemName();
|
3042
|
-
media.addEventListener('change', updateSystemName, {
|
3043
|
-
passive: true
|
3044
|
-
});
|
3045
|
-
if (vue.getCurrentScope()) {
|
3046
|
-
vue.onScopeDispose(() => {
|
3047
|
-
media.removeEventListener('change', updateSystemName);
|
3048
|
-
});
|
3049
|
-
}
|
3050
|
-
}
|
3051
3042
|
function install(app) {
|
3052
3043
|
if (parsedOptions.isDisabled) return;
|
3053
3044
|
const head = app._context.provides.usehead;
|
@@ -3085,55 +3076,22 @@
|
|
3085
3076
|
updateStyles();
|
3086
3077
|
}
|
3087
3078
|
function updateStyles() {
|
3088
|
-
upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
|
3079
|
+
upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
|
3089
3080
|
}
|
3090
3081
|
}
|
3091
3082
|
}
|
3092
|
-
|
3093
|
-
if (!themeNames.value.includes(themeName)) {
|
3094
|
-
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
3095
|
-
return;
|
3096
|
-
}
|
3097
|
-
name.value = themeName;
|
3098
|
-
}
|
3099
|
-
function cycle() {
|
3100
|
-
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
|
3101
|
-
const currentIndex = themeArray.indexOf(name.value);
|
3102
|
-
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
|
3103
|
-
change(themeArray[nextIndex]);
|
3104
|
-
}
|
3105
|
-
function toggle() {
|
3106
|
-
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
|
3107
|
-
cycle(themeArray);
|
3108
|
-
}
|
3109
|
-
const globalName = new Proxy(name, {
|
3110
|
-
get(target, prop) {
|
3111
|
-
return target[prop];
|
3112
|
-
},
|
3113
|
-
set(target, prop, val) {
|
3114
|
-
if (prop === 'value') {
|
3115
|
-
deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
|
3116
|
-
}
|
3117
|
-
// @ts-expect-error
|
3118
|
-
target[prop] = val;
|
3119
|
-
return true;
|
3120
|
-
}
|
3121
|
-
});
|
3083
|
+
const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
|
3122
3084
|
return {
|
3123
3085
|
install,
|
3124
|
-
change,
|
3125
|
-
cycle,
|
3126
|
-
toggle,
|
3127
3086
|
isDisabled: parsedOptions.isDisabled,
|
3128
3087
|
name,
|
3129
3088
|
themes,
|
3130
3089
|
current,
|
3131
3090
|
computedThemes,
|
3132
|
-
prefix: parsedOptions.prefix,
|
3133
3091
|
themeClasses,
|
3134
3092
|
styles,
|
3135
3093
|
global: {
|
3136
|
-
name
|
3094
|
+
name,
|
3137
3095
|
current
|
3138
3096
|
}
|
3139
3097
|
};
|
@@ -3144,7 +3102,7 @@
|
|
3144
3102
|
if (!theme) throw new Error('Could not find Vuetify theme injection');
|
3145
3103
|
const name = vue.toRef(() => props.theme ?? theme.name.value);
|
3146
3104
|
const current = vue.toRef(() => theme.themes.value[name.value]);
|
3147
|
-
const themeClasses = vue.toRef(() => theme.isDisabled ? undefined :
|
3105
|
+
const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
|
3148
3106
|
const newTheme = {
|
3149
3107
|
...theme,
|
3150
3108
|
name,
|
@@ -4691,15 +4649,9 @@
|
|
4691
4649
|
};
|
4692
4650
|
}
|
4693
4651
|
|
4694
|
-
// Types
|
4695
|
-
|
4696
4652
|
const makeVBtnGroupProps = propsFactory({
|
4697
4653
|
baseColor: String,
|
4698
4654
|
divided: Boolean,
|
4699
|
-
direction: {
|
4700
|
-
type: String,
|
4701
|
-
default: 'horizontal'
|
4702
|
-
},
|
4703
4655
|
...makeBorderProps(),
|
4704
4656
|
...makeComponentProps(),
|
4705
4657
|
...makeDensityProps(),
|
@@ -4733,7 +4685,7 @@
|
|
4733
4685
|
} = useRounded(props);
|
4734
4686
|
provideDefaults({
|
4735
4687
|
VBtn: {
|
4736
|
-
height:
|
4688
|
+
height: 'auto',
|
4737
4689
|
baseColor: vue.toRef(() => props.baseColor),
|
4738
4690
|
color: vue.toRef(() => props.color),
|
4739
4691
|
density: vue.toRef(() => props.density),
|
@@ -4743,7 +4695,7 @@
|
|
4743
4695
|
});
|
4744
4696
|
useRender(() => {
|
4745
4697
|
return vue.createVNode(props.tag, {
|
4746
|
-
"class": ['v-btn-group',
|
4698
|
+
"class": ['v-btn-group', {
|
4747
4699
|
'v-btn-group--divided': props.divided
|
4748
4700
|
}, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
|
4749
4701
|
"style": props.style
|
@@ -5212,7 +5164,7 @@
|
|
5212
5164
|
resizeRef,
|
5213
5165
|
contentRect
|
5214
5166
|
} = useResizeObserver();
|
5215
|
-
const normalizedValue = vue.toRef(() =>
|
5167
|
+
const normalizedValue = vue.toRef(() => clamp(parseFloat(props.modelValue), 0, 100));
|
5216
5168
|
const width = vue.toRef(() => Number(props.width));
|
5217
5169
|
const size = vue.toRef(() => {
|
5218
5170
|
// Get size from element if size prop value is small, large etc
|
@@ -6222,31 +6174,6 @@
|
|
6222
6174
|
// Utilities
|
6223
6175
|
const VAlertTitle = createSimpleFunctional('v-alert-title');
|
6224
6176
|
|
6225
|
-
// Utilities
|
6226
|
-
|
6227
|
-
// Types
|
6228
|
-
|
6229
|
-
// Types
|
6230
|
-
|
6231
|
-
// Composables
|
6232
|
-
const makeIconSizeProps = propsFactory({
|
6233
|
-
iconSize: [Number, String],
|
6234
|
-
iconSizes: {
|
6235
|
-
type: Array,
|
6236
|
-
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
6237
|
-
}
|
6238
|
-
}, 'iconSize');
|
6239
|
-
function useIconSizes(props, fallback) {
|
6240
|
-
const iconSize = vue.computed(() => {
|
6241
|
-
const iconSizeMap = new Map(props.iconSizes);
|
6242
|
-
const _iconSize = props.iconSize ?? fallback() ?? 'default';
|
6243
|
-
return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
|
6244
|
-
});
|
6245
|
-
return {
|
6246
|
-
iconSize
|
6247
|
-
};
|
6248
|
-
}
|
6249
|
-
|
6250
6177
|
// Types
|
6251
6178
|
|
6252
6179
|
const allowedTypes = ['success', 'info', 'warning', 'error'];
|
@@ -6286,7 +6213,6 @@
|
|
6286
6213
|
...makeDensityProps(),
|
6287
6214
|
...makeDimensionProps(),
|
6288
6215
|
...makeElevationProps(),
|
6289
|
-
...makeIconSizeProps(),
|
6290
6216
|
...makeLocationProps(),
|
6291
6217
|
...makePositionProps(),
|
6292
6218
|
...makeRoundedProps(),
|
@@ -6314,9 +6240,6 @@
|
|
6314
6240
|
if (!props.type) return props.icon;
|
6315
6241
|
return props.icon ?? `$${props.type}`;
|
6316
6242
|
});
|
6317
|
-
const {
|
6318
|
-
iconSize
|
6319
|
-
} = useIconSizes(props, () => props.prominent ? 44 : 28);
|
6320
6243
|
const {
|
6321
6244
|
themeClasses
|
6322
6245
|
} = provideTheme(props);
|
@@ -6364,11 +6287,6 @@
|
|
6364
6287
|
const hasPrepend = !!(slots.prepend || icon.value);
|
6365
6288
|
const hasTitle = !!(slots.title || props.title);
|
6366
6289
|
const hasClose = !!(slots.close || props.closable);
|
6367
|
-
const iconProps = {
|
6368
|
-
density: props.density,
|
6369
|
-
icon: icon.value,
|
6370
|
-
size: iconSize.value
|
6371
|
-
};
|
6372
6290
|
return isActive.value && vue.createVNode(props.tag, {
|
6373
6291
|
"class": ['v-alert', props.border && {
|
6374
6292
|
'v-alert--border': !!props.border,
|
@@ -6386,14 +6304,19 @@
|
|
6386
6304
|
}, null), hasPrepend && vue.createVNode("div", {
|
6387
6305
|
"key": "prepend",
|
6388
6306
|
"class": "v-alert__prepend"
|
6389
|
-
}, [!slots.prepend ? vue.createVNode(VIcon,
|
6390
|
-
"key": "prepend-icon"
|
6391
|
-
|
6307
|
+
}, [!slots.prepend ? vue.createVNode(VIcon, {
|
6308
|
+
"key": "prepend-icon",
|
6309
|
+
"density": props.density,
|
6310
|
+
"icon": icon.value,
|
6311
|
+
"size": props.prominent ? 44 : 28
|
6312
|
+
}, null) : vue.createVNode(VDefaultsProvider, {
|
6392
6313
|
"key": "prepend-defaults",
|
6393
6314
|
"disabled": !icon.value,
|
6394
6315
|
"defaults": {
|
6395
6316
|
VIcon: {
|
6396
|
-
|
6317
|
+
density: props.density,
|
6318
|
+
icon: icon.value,
|
6319
|
+
size: props.prominent ? 44 : 28
|
6397
6320
|
}
|
6398
6321
|
}
|
6399
6322
|
}, slots.prepend)]), vue.createVNode("div", {
|
@@ -7848,7 +7771,7 @@
|
|
7848
7771
|
min = 0;
|
7849
7772
|
max = scrollHeight + -containerHeight;
|
7850
7773
|
}
|
7851
|
-
return
|
7774
|
+
return clamp(value, min, max);
|
7852
7775
|
}
|
7853
7776
|
|
7854
7777
|
function calculateUpdatedTarget(_ref) {
|
@@ -8591,68 +8514,6 @@
|
|
8591
8514
|
}
|
8592
8515
|
});
|
8593
8516
|
|
8594
|
-
const makeVDividerProps = propsFactory({
|
8595
|
-
color: String,
|
8596
|
-
inset: Boolean,
|
8597
|
-
length: [Number, String],
|
8598
|
-
opacity: [Number, String],
|
8599
|
-
thickness: [Number, String],
|
8600
|
-
vertical: Boolean,
|
8601
|
-
...makeComponentProps(),
|
8602
|
-
...makeThemeProps()
|
8603
|
-
}, 'VDivider');
|
8604
|
-
const VDivider = genericComponent()({
|
8605
|
-
name: 'VDivider',
|
8606
|
-
props: makeVDividerProps(),
|
8607
|
-
setup(props, _ref) {
|
8608
|
-
let {
|
8609
|
-
attrs,
|
8610
|
-
slots
|
8611
|
-
} = _ref;
|
8612
|
-
const {
|
8613
|
-
themeClasses
|
8614
|
-
} = provideTheme(props);
|
8615
|
-
const {
|
8616
|
-
textColorClasses,
|
8617
|
-
textColorStyles
|
8618
|
-
} = useTextColor(() => props.color);
|
8619
|
-
const dividerStyles = vue.computed(() => {
|
8620
|
-
const styles = {};
|
8621
|
-
if (props.length) {
|
8622
|
-
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
8623
|
-
}
|
8624
|
-
if (props.thickness) {
|
8625
|
-
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
8626
|
-
}
|
8627
|
-
return styles;
|
8628
|
-
});
|
8629
|
-
useRender(() => {
|
8630
|
-
const divider = vue.createVNode("hr", {
|
8631
|
-
"class": [{
|
8632
|
-
'v-divider': true,
|
8633
|
-
'v-divider--inset': props.inset,
|
8634
|
-
'v-divider--vertical': props.vertical
|
8635
|
-
}, themeClasses.value, textColorClasses.value, props.class],
|
8636
|
-
"style": [dividerStyles.value, textColorStyles.value, {
|
8637
|
-
'--v-border-opacity': props.opacity
|
8638
|
-
}, props.style],
|
8639
|
-
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
8640
|
-
"role": `${attrs.role || 'separator'}`
|
8641
|
-
}, null);
|
8642
|
-
if (!slots.default) return divider;
|
8643
|
-
return vue.createVNode("div", {
|
8644
|
-
"class": ['v-divider__wrapper', {
|
8645
|
-
'v-divider__wrapper--vertical': props.vertical,
|
8646
|
-
'v-divider__wrapper--inset': props.inset
|
8647
|
-
}]
|
8648
|
-
}, [divider, vue.createVNode("div", {
|
8649
|
-
"class": "v-divider__content"
|
8650
|
-
}, [slots.default()]), divider]);
|
8651
|
-
});
|
8652
|
-
return {};
|
8653
|
-
}
|
8654
|
-
});
|
8655
|
-
|
8656
8517
|
// Utilities
|
8657
8518
|
|
8658
8519
|
// List
|
@@ -9804,6 +9665,68 @@
|
|
9804
9665
|
}
|
9805
9666
|
});
|
9806
9667
|
|
9668
|
+
const makeVDividerProps = propsFactory({
|
9669
|
+
color: String,
|
9670
|
+
inset: Boolean,
|
9671
|
+
length: [Number, String],
|
9672
|
+
opacity: [Number, String],
|
9673
|
+
thickness: [Number, String],
|
9674
|
+
vertical: Boolean,
|
9675
|
+
...makeComponentProps(),
|
9676
|
+
...makeThemeProps()
|
9677
|
+
}, 'VDivider');
|
9678
|
+
const VDivider = genericComponent()({
|
9679
|
+
name: 'VDivider',
|
9680
|
+
props: makeVDividerProps(),
|
9681
|
+
setup(props, _ref) {
|
9682
|
+
let {
|
9683
|
+
attrs,
|
9684
|
+
slots
|
9685
|
+
} = _ref;
|
9686
|
+
const {
|
9687
|
+
themeClasses
|
9688
|
+
} = provideTheme(props);
|
9689
|
+
const {
|
9690
|
+
textColorClasses,
|
9691
|
+
textColorStyles
|
9692
|
+
} = useTextColor(() => props.color);
|
9693
|
+
const dividerStyles = vue.computed(() => {
|
9694
|
+
const styles = {};
|
9695
|
+
if (props.length) {
|
9696
|
+
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
9697
|
+
}
|
9698
|
+
if (props.thickness) {
|
9699
|
+
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
9700
|
+
}
|
9701
|
+
return styles;
|
9702
|
+
});
|
9703
|
+
useRender(() => {
|
9704
|
+
const divider = vue.createVNode("hr", {
|
9705
|
+
"class": [{
|
9706
|
+
'v-divider': true,
|
9707
|
+
'v-divider--inset': props.inset,
|
9708
|
+
'v-divider--vertical': props.vertical
|
9709
|
+
}, themeClasses.value, textColorClasses.value, props.class],
|
9710
|
+
"style": [dividerStyles.value, textColorStyles.value, {
|
9711
|
+
'--v-border-opacity': props.opacity
|
9712
|
+
}, props.style],
|
9713
|
+
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
9714
|
+
"role": `${attrs.role || 'separator'}`
|
9715
|
+
}, null);
|
9716
|
+
if (!slots.default) return divider;
|
9717
|
+
return vue.createVNode("div", {
|
9718
|
+
"class": ['v-divider__wrapper', {
|
9719
|
+
'v-divider__wrapper--vertical': props.vertical,
|
9720
|
+
'v-divider__wrapper--inset': props.inset
|
9721
|
+
}]
|
9722
|
+
}, [divider, vue.createVNode("div", {
|
9723
|
+
"class": "v-divider__content"
|
9724
|
+
}, [slots.default()]), divider]);
|
9725
|
+
});
|
9726
|
+
return {};
|
9727
|
+
}
|
9728
|
+
});
|
9729
|
+
|
9807
9730
|
// Types
|
9808
9731
|
|
9809
9732
|
const makeVListChildrenProps = propsFactory({
|
@@ -10382,11 +10305,19 @@
|
|
10382
10305
|
vue.watch(() => props.locationStrategy, reset);
|
10383
10306
|
vue.onScopeDispose(() => {
|
10384
10307
|
window.removeEventListener('resize', onResize);
|
10308
|
+
visualViewport?.removeEventListener('resize', onVisualResize);
|
10309
|
+
visualViewport?.removeEventListener('scroll', onVisualScroll);
|
10385
10310
|
updateLocation.value = undefined;
|
10386
10311
|
});
|
10387
10312
|
window.addEventListener('resize', onResize, {
|
10388
10313
|
passive: true
|
10389
10314
|
});
|
10315
|
+
visualViewport?.addEventListener('resize', onVisualResize, {
|
10316
|
+
passive: true
|
10317
|
+
});
|
10318
|
+
visualViewport?.addEventListener('scroll', onVisualScroll, {
|
10319
|
+
passive: true
|
10320
|
+
});
|
10390
10321
|
if (typeof props.locationStrategy === 'function') {
|
10391
10322
|
updateLocation.value = props.locationStrategy(data, props, contentStyles)?.updateLocation;
|
10392
10323
|
} else {
|
@@ -10397,6 +10328,12 @@
|
|
10397
10328
|
function onResize(e) {
|
10398
10329
|
updateLocation.value?.(e);
|
10399
10330
|
}
|
10331
|
+
function onVisualResize(e) {
|
10332
|
+
updateLocation.value?.(e);
|
10333
|
+
}
|
10334
|
+
function onVisualScroll(e) {
|
10335
|
+
updateLocation.value?.(e);
|
10336
|
+
}
|
10400
10337
|
return {
|
10401
10338
|
contentStyles,
|
10402
10339
|
updateLocation
|
@@ -10548,13 +10485,7 @@
|
|
10548
10485
|
}
|
10549
10486
|
}
|
10550
10487
|
const viewport = scrollParents.reduce((box, el) => {
|
10551
|
-
const
|
10552
|
-
const scrollBox = new Box({
|
10553
|
-
x: el === document.documentElement ? 0 : rect.x,
|
10554
|
-
y: el === document.documentElement ? 0 : rect.y,
|
10555
|
-
width: el.clientWidth,
|
10556
|
-
height: el.clientHeight
|
10557
|
-
});
|
10488
|
+
const scrollBox = getElementBox(el);
|
10558
10489
|
if (box) {
|
10559
10490
|
return new Box({
|
10560
10491
|
x: Math.max(box.left, scrollBox.left),
|
@@ -12721,12 +12652,7 @@
|
|
12721
12652
|
}
|
12722
12653
|
function calculateOffset(index) {
|
12723
12654
|
index = clamp(index, 0, items.value.length - 1);
|
12724
|
-
|
12725
|
-
const fraction = index % 1;
|
12726
|
-
const next = whole + 1;
|
12727
|
-
const wholeOffset = offsets[whole] || 0;
|
12728
|
-
const nextOffset = offsets[next] || wholeOffset;
|
12729
|
-
return wholeOffset + (nextOffset - wholeOffset) * fraction;
|
12655
|
+
return offsets[index] || 0;
|
12730
12656
|
}
|
12731
12657
|
function calculateIndex(scrollTop) {
|
12732
12658
|
return binaryClosest(offsets, scrollTop);
|
@@ -13130,6 +13056,7 @@
|
|
13130
13056
|
const selectedValues = vue.computed(() => model.value.map(selection => selection.value));
|
13131
13057
|
const isFocused = vue.shallowRef(false);
|
13132
13058
|
let keyboardLookupPrefix = '';
|
13059
|
+
let keyboardLookupIndex = -1;
|
13133
13060
|
let keyboardLookupLastTime;
|
13134
13061
|
const displayItems = vue.computed(() => {
|
13135
13062
|
if (props.hideSelected) {
|
@@ -13197,18 +13124,46 @@
|
|
13197
13124
|
const now = performance.now();
|
13198
13125
|
if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {
|
13199
13126
|
keyboardLookupPrefix = '';
|
13127
|
+
keyboardLookupIndex = -1;
|
13200
13128
|
}
|
13201
13129
|
keyboardLookupPrefix += e.key.toLowerCase();
|
13202
13130
|
keyboardLookupLastTime = now;
|
13203
|
-
const
|
13204
|
-
|
13205
|
-
|
13206
|
-
|
13131
|
+
const items = displayItems.value;
|
13132
|
+
function findItem() {
|
13133
|
+
let result = findItemBase();
|
13134
|
+
if (result) return result;
|
13135
|
+
if (keyboardLookupPrefix.at(-1) === keyboardLookupPrefix.at(-2)) {
|
13136
|
+
// No matches but we have a repeated letter, try the next item with that prefix
|
13137
|
+
keyboardLookupPrefix = keyboardLookupPrefix.slice(0, -1);
|
13138
|
+
result = findItemBase();
|
13139
|
+
if (result) return result;
|
13207
13140
|
}
|
13208
|
-
|
13209
|
-
|
13210
|
-
|
13141
|
+
|
13142
|
+
// Still nothing, wrap around to the top
|
13143
|
+
keyboardLookupIndex = -1;
|
13144
|
+
result = findItemBase();
|
13145
|
+
if (result) return result;
|
13146
|
+
|
13147
|
+
// Still nothing, try just the new letter
|
13148
|
+
keyboardLookupPrefix = e.key.toLowerCase();
|
13149
|
+
return findItemBase();
|
13150
|
+
}
|
13151
|
+
function findItemBase() {
|
13152
|
+
for (let i = keyboardLookupIndex + 1; i < items.length; i++) {
|
13153
|
+
const _item = items[i];
|
13154
|
+
if (_item.title.toLowerCase().startsWith(keyboardLookupPrefix)) {
|
13155
|
+
return [_item, i];
|
13156
|
+
}
|
13211
13157
|
}
|
13158
|
+
return undefined;
|
13159
|
+
}
|
13160
|
+
const result = findItem();
|
13161
|
+
if (!result) return;
|
13162
|
+
const [item, index] = result;
|
13163
|
+
keyboardLookupIndex = index;
|
13164
|
+
listRef.value?.focus(index);
|
13165
|
+
if (!props.multiple) {
|
13166
|
+
model.value = [item];
|
13212
13167
|
}
|
13213
13168
|
}
|
13214
13169
|
|
@@ -13357,22 +13312,6 @@
|
|
13357
13312
|
key: item.value,
|
13358
13313
|
onClick: () => select(item, null)
|
13359
13314
|
});
|
13360
|
-
if (item.raw.type === 'divider') {
|
13361
|
-
return slots.divider?.({
|
13362
|
-
props: item.raw,
|
13363
|
-
index
|
13364
|
-
}) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
|
13365
|
-
"key": `divider-${index}`
|
13366
|
-
}), null);
|
13367
|
-
}
|
13368
|
-
if (item.raw.type === 'subheader') {
|
13369
|
-
return slots.subheader?.({
|
13370
|
-
props: item.raw,
|
13371
|
-
index
|
13372
|
-
}) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
|
13373
|
-
"key": `subheader-${index}`
|
13374
|
-
}), null);
|
13375
|
-
}
|
13376
13315
|
return slots.item?.({
|
13377
13316
|
item,
|
13378
13317
|
index,
|
@@ -13533,9 +13472,6 @@
|
|
13533
13472
|
let match = -1;
|
13534
13473
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
13535
13474
|
if (typeof item === 'object') {
|
13536
|
-
if (['divider', 'subheader'].includes(item.raw?.type)) {
|
13537
|
-
continue;
|
13538
|
-
}
|
13539
13475
|
const filterKeys = keys || Object.keys(transformed);
|
13540
13476
|
for (const key of filterKeys) {
|
13541
13477
|
const value = getPropertyFromItem(transformed, key);
|
@@ -13974,22 +13910,6 @@
|
|
13974
13910
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
13975
13911
|
onClick: () => select(item, null)
|
13976
13912
|
});
|
13977
|
-
if (item.raw.type === 'divider') {
|
13978
|
-
return slots.divider?.({
|
13979
|
-
props: item.raw,
|
13980
|
-
index
|
13981
|
-
}) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
|
13982
|
-
"key": `divider-${index}`
|
13983
|
-
}), null);
|
13984
|
-
}
|
13985
|
-
if (item.raw.type === 'subheader') {
|
13986
|
-
return slots.subheader?.({
|
13987
|
-
props: item.raw,
|
13988
|
-
index
|
13989
|
-
}) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
|
13990
|
-
"key": `subheader-${index}`
|
13991
|
-
}), null);
|
13992
|
-
}
|
13993
13913
|
return slots.item?.({
|
13994
13914
|
item,
|
13995
13915
|
index,
|
@@ -16287,7 +16207,7 @@
|
|
16287
16207
|
const clickOffset = getPosition(e, position);
|
16288
16208
|
|
16289
16209
|
// It is possible for left to be NaN, force to number
|
16290
|
-
let clickPos =
|
16210
|
+
let clickPos = clamp((clickOffset - trackStart - startOffset.value) / trackLength) || 0;
|
16291
16211
|
if (vertical ? indexFromEnd.value : indexFromEnd.value !== isRtl.value) clickPos = 1 - clickPos;
|
16292
16212
|
return roundValue(min.value + clickPos * (max.value - min.value));
|
16293
16213
|
}
|
@@ -17585,13 +17505,13 @@
|
|
17585
17505
|
return null;
|
17586
17506
|
}
|
17587
17507
|
const sundayJanuarySecond2000 = new Date(2000, 0, 2);
|
17588
|
-
function getWeekdays(locale, firstDayOfWeek
|
17508
|
+
function getWeekdays(locale, firstDayOfWeek) {
|
17589
17509
|
const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
|
17590
17510
|
return createRange(7).map(i => {
|
17591
17511
|
const weekday = new Date(sundayJanuarySecond2000);
|
17592
17512
|
weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
|
17593
17513
|
return new Intl.DateTimeFormat(locale, {
|
17594
|
-
weekday:
|
17514
|
+
weekday: 'narrow'
|
17595
17515
|
}).format(weekday);
|
17596
17516
|
});
|
17597
17517
|
}
|
@@ -18055,9 +17975,9 @@
|
|
18055
17975
|
getDiff(date, comparing, unit) {
|
18056
17976
|
return getDiff(date, comparing, unit);
|
18057
17977
|
}
|
18058
|
-
getWeekdays(firstDayOfWeek
|
17978
|
+
getWeekdays(firstDayOfWeek) {
|
18059
17979
|
const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
|
18060
|
-
return getWeekdays(this.locale, firstDay
|
17980
|
+
return getWeekdays(this.locale, firstDay);
|
18061
17981
|
}
|
18062
17982
|
getYear(date) {
|
18063
17983
|
return getYear(date);
|
@@ -18400,7 +18320,6 @@
|
|
18400
18320
|
_search.value = val ?? '';
|
18401
18321
|
if (!props.multiple && !hasSelectionSlot.value) {
|
18402
18322
|
model.value = [transformItem$3(props, val)];
|
18403
|
-
vue.nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
18404
18323
|
}
|
18405
18324
|
if (val && props.multiple && props.delimiters?.length) {
|
18406
18325
|
const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
|
@@ -18717,22 +18636,6 @@
|
|
18717
18636
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
18718
18637
|
onClick: () => select(item, null)
|
18719
18638
|
});
|
18720
|
-
if (item.raw.type === 'divider') {
|
18721
|
-
return slots.divider?.({
|
18722
|
-
props: item.raw,
|
18723
|
-
index
|
18724
|
-
}) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
|
18725
|
-
"key": `divider-${index}`
|
18726
|
-
}), null);
|
18727
|
-
}
|
18728
|
-
if (item.raw.type === 'subheader') {
|
18729
|
-
return slots.subheader?.({
|
18730
|
-
props: item.raw,
|
18731
|
-
index
|
18732
|
-
}) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
|
18733
|
-
"key": `subheader-${index}`
|
18734
|
-
}), null);
|
18735
|
-
}
|
18736
18639
|
return slots.item?.({
|
18737
18640
|
item,
|
18738
18641
|
index,
|
@@ -22376,8 +22279,7 @@
|
|
22376
22279
|
firstDayOfWeek: {
|
22377
22280
|
type: [Number, String],
|
22378
22281
|
default: undefined
|
22379
|
-
}
|
22380
|
-
weekdayFormat: String
|
22282
|
+
}
|
22381
22283
|
}, 'calendar');
|
22382
22284
|
function useCalendar(props) {
|
22383
22285
|
const adapter = useDate();
|
@@ -22625,7 +22527,7 @@
|
|
22625
22527
|
"ref": daysRef,
|
22626
22528
|
"key": daysInMonth.value[0].date?.toString(),
|
22627
22529
|
"class": "v-date-picker-month__days"
|
22628
|
-
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek
|
22530
|
+
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => vue.createVNode("div", {
|
22629
22531
|
"class": ['v-date-picker-month__day', 'v-date-picker-month__weekday']
|
22630
22532
|
}, [weekDay])), daysInMonth.value.map((item, i) => {
|
22631
22533
|
const slotProps = {
|
@@ -24743,7 +24645,7 @@
|
|
24743
24645
|
function getProgress(pos) {
|
24744
24646
|
let limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
24745
24647
|
const progress = position.value === 'left' ? (pos - offset.value) / width.value : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value : position.value === 'top' ? (pos - offset.value) / width.value : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value : oops();
|
24746
|
-
return limit ?
|
24648
|
+
return limit ? clamp(progress) : progress;
|
24747
24649
|
}
|
24748
24650
|
function onTouchstart(e) {
|
24749
24651
|
if (touchless.value) return;
|
@@ -25156,10 +25058,6 @@
|
|
25156
25058
|
type: Number,
|
25157
25059
|
default: 0
|
25158
25060
|
},
|
25159
|
-
minFractionDigits: {
|
25160
|
-
type: Number,
|
25161
|
-
default: null
|
25162
|
-
},
|
25163
25061
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
25164
25062
|
}, 'VNumberInput');
|
25165
25063
|
const VNumberInput = genericComponent()({
|
@@ -25190,19 +25088,9 @@
|
|
25190
25088
|
} = useFocus(props);
|
25191
25089
|
function correctPrecision(val) {
|
25192
25090
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
25193
|
-
|
25194
|
-
|
25195
|
-
|
25196
|
-
let fixed = val.toFixed(precision);
|
25197
|
-
if (isFocused.value) {
|
25198
|
-
return Number(fixed).toString(); // trim zeros
|
25199
|
-
}
|
25200
|
-
if ((props.minFractionDigits ?? precision) < precision) {
|
25201
|
-
const trimLimit = precision - props.minFractionDigits;
|
25202
|
-
const [baseDigits, fractionDigits] = fixed.split('.');
|
25203
|
-
fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
|
25204
|
-
}
|
25205
|
-
return fixed;
|
25091
|
+
const fixed = precision == null ? String(val) : val.toFixed(precision);
|
25092
|
+
return isFocused.value ? Number(fixed).toString() // trim zeros
|
25093
|
+
: fixed;
|
25206
25094
|
}
|
25207
25095
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
25208
25096
|
const _inputText = vue.shallowRef(null);
|
@@ -25242,6 +25130,9 @@
|
|
25242
25130
|
const controlNodeDefaultHeight = vue.toRef(() => controlVariant.value === 'stacked' ? 'auto' : '100%');
|
25243
25131
|
const incrementSlotProps = {
|
25244
25132
|
props: {
|
25133
|
+
style: {
|
25134
|
+
touchAction: 'none'
|
25135
|
+
},
|
25245
25136
|
onClick: onControlClick,
|
25246
25137
|
onPointerup: onControlMouseup,
|
25247
25138
|
onPointerdown: onUpControlMousedown
|
@@ -25249,13 +25140,15 @@
|
|
25249
25140
|
};
|
25250
25141
|
const decrementSlotProps = {
|
25251
25142
|
props: {
|
25143
|
+
style: {
|
25144
|
+
touchAction: 'none'
|
25145
|
+
},
|
25252
25146
|
onClick: onControlClick,
|
25253
25147
|
onPointerup: onControlMouseup,
|
25254
25148
|
onPointerdown: onDownControlMousedown
|
25255
25149
|
}
|
25256
25150
|
};
|
25257
25151
|
vue.watch(() => props.precision, () => formatInputValue());
|
25258
|
-
vue.watch(() => props.minFractionDigits, () => formatInputValue());
|
25259
25152
|
vue.onMounted(() => {
|
25260
25153
|
clampModel();
|
25261
25154
|
});
|
@@ -25357,7 +25250,7 @@
|
|
25357
25250
|
inputText.value = null;
|
25358
25251
|
return;
|
25359
25252
|
}
|
25360
|
-
inputText.value =
|
25253
|
+
inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
|
25361
25254
|
}
|
25362
25255
|
function trimDecimalZeros() {
|
25363
25256
|
if (controlsDisabled.value) return;
|
@@ -25382,17 +25275,18 @@
|
|
25382
25275
|
} = VTextField.filterProps(props);
|
25383
25276
|
function incrementControlNode() {
|
25384
25277
|
return !slots.increment ? vue.createVNode(VBtn, {
|
25278
|
+
"aria-hidden": "true",
|
25279
|
+
"data-testid": "increment",
|
25385
25280
|
"disabled": !canIncrease.value,
|
25386
25281
|
"flat": true,
|
25387
|
-
"key": "increment-btn",
|
25388
25282
|
"height": controlNodeDefaultHeight.value,
|
25389
|
-
"data-testid": "increment",
|
25390
|
-
"aria-hidden": "true",
|
25391
25283
|
"icon": incrementIcon.value,
|
25284
|
+
"key": "increment-btn",
|
25392
25285
|
"onClick": onControlClick,
|
25393
|
-
"onPointerup": onControlMouseup,
|
25394
25286
|
"onPointerdown": onUpControlMousedown,
|
25287
|
+
"onPointerup": onControlMouseup,
|
25395
25288
|
"size": controlNodeSize.value,
|
25289
|
+
"style": "touch-action: none",
|
25396
25290
|
"tabindex": "-1"
|
25397
25291
|
}, null) : vue.createVNode(VDefaultsProvider, {
|
25398
25292
|
"key": "increment-defaults",
|
@@ -25411,18 +25305,19 @@
|
|
25411
25305
|
}
|
25412
25306
|
function decrementControlNode() {
|
25413
25307
|
return !slots.decrement ? vue.createVNode(VBtn, {
|
25308
|
+
"aria-hidden": "true",
|
25309
|
+
"data-testid": "decrement",
|
25414
25310
|
"disabled": !canDecrease.value,
|
25415
25311
|
"flat": true,
|
25416
|
-
"key": "decrement-btn",
|
25417
25312
|
"height": controlNodeDefaultHeight.value,
|
25418
|
-
"data-testid": "decrement",
|
25419
|
-
"aria-hidden": "true",
|
25420
25313
|
"icon": decrementIcon.value,
|
25421
|
-
"
|
25422
|
-
"tabindex": "-1",
|
25314
|
+
"key": "decrement-btn",
|
25423
25315
|
"onClick": onControlClick,
|
25316
|
+
"onPointerdown": onDownControlMousedown,
|
25424
25317
|
"onPointerup": onControlMouseup,
|
25425
|
-
"
|
25318
|
+
"size": controlNodeSize.value,
|
25319
|
+
"style": "touch-action: none",
|
25320
|
+
"tabindex": "-1"
|
25426
25321
|
}, null) : vue.createVNode(VDefaultsProvider, {
|
25427
25322
|
"key": "decrement-defaults",
|
25428
25323
|
"defaults": {
|
@@ -29399,7 +29294,7 @@
|
|
29399
29294
|
};
|
29400
29295
|
});
|
29401
29296
|
}
|
29402
|
-
const version$1 = "3.8.6-
|
29297
|
+
const version$1 = "3.8.6-master.2025-05-22";
|
29403
29298
|
createVuetify$1.version = version$1;
|
29404
29299
|
|
29405
29300
|
// Vue's inject() can only be used in setup
|
@@ -29424,7 +29319,7 @@
|
|
29424
29319
|
...options
|
29425
29320
|
});
|
29426
29321
|
};
|
29427
|
-
const version = "3.8.6-
|
29322
|
+
const version = "3.8.6-master.2025-05-22";
|
29428
29323
|
createVuetify.version = version;
|
29429
29324
|
|
29430
29325
|
exports.blueprints = index;
|