@vuetify/nightly 3.8.5-master.2025-05-20 → 3.8.6-dev.2025-05-21
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 +21 -14
- package/dist/json/attributes.json +1331 -1311
- package/dist/json/importMap-labs.json +24 -24
- package/dist/json/importMap.json +192 -192
- package/dist/json/tags.json +5 -0
- package/dist/json/web-types.json +2610 -2471
- package/dist/vuetify-labs.cjs +288 -117
- package/dist/vuetify-labs.css +3866 -3838
- package/dist/vuetify-labs.d.ts +1490 -1352
- package/dist/vuetify-labs.esm.js +289 -118
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +288 -117
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +282 -106
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3130 -3102
- package/dist/vuetify.d.ts +659 -519
- package/dist/vuetify.esm.js +283 -107
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +282 -106
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1188 -1178
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAlert/VAlert.css +6 -1
- package/lib/components/VAlert/VAlert.d.ts +35 -0
- package/lib/components/VAlert/VAlert.js +14 -9
- package/lib/components/VAlert/VAlert.js.map +1 -1
- package/lib/components/VAlert/VAlert.sass +7 -1
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +120 -96
- package/lib/components/VAutocomplete/VAutocomplete.js +18 -1
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VBtnGroup/VBtnGroup.css +30 -7
- package/lib/components/VBtnGroup/VBtnGroup.d.ts +58 -32
- package/lib/components/VBtnGroup/VBtnGroup.js +7 -3
- package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
- package/lib/components/VBtnGroup/VBtnGroup.sass +44 -17
- package/lib/components/VBtnToggle/VBtnToggle.d.ts +25 -0
- package/lib/components/VCheckbox/VCheckbox.d.ts +3 -3
- package/lib/components/VCombobox/VCombobox.d.ts +120 -96
- package/lib/components/VCombobox/VCombobox.js +19 -1
- package/lib/components/VCombobox/VCombobox.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/VNumberInput/VNumberInput.d.ts +103 -89
- package/lib/components/VNumberInput/VNumberInput.js +19 -4
- 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/VRadioGroup/VRadioGroup.d.ts +3 -3
- package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
- package/lib/components/VSelect/VSelect.d.ts +120 -96
- package/lib/components/VSelect/VSelect.js +18 -1
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSlider/VSlider.d.ts +3 -3
- 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 +1 -0
- package/lib/composables/calendar.js.map +1 -1
- package/lib/composables/date/index.d.ts +1 -0
- package/lib/composables/date/index.js +1 -0
- package/lib/composables/date/index.js.map +1 -1
- package/lib/composables/filter.js +3 -0
- package/lib/composables/filter.js.map +1 -1
- package/lib/composables/iconSizes.d.ts +28 -0
- package/lib/composables/iconSizes.js +23 -0
- package/lib/composables/iconSizes.js.map +1 -0
- package/lib/composables/theme.d.ts +6 -1
- package/lib/composables/theme.js +94 -26
- package/lib/composables/theme.js.map +1 -1
- package/lib/composables/virtual.js +6 -1
- package/lib/composables/virtual.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +74 -69
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
- package/lib/labs/VDateInput/VDateInput.d.ts +87 -87
- package/lib/labs/VFileUpload/VFileUpload.d.ts +3 -3
- package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
- package/lib/labs/VIconBtn/VIconBtn.js +7 -11
- package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
- package/lib/util/globals.d.ts +1 -0
- package/lib/util/globals.js +1 -0
- package/lib/util/globals.js.map +1 -1
- package/package.json +3 -1
package/dist/vuetify.esm.js
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.8.
|
2
|
+
* Vuetify v3.8.6-dev.2025-05-21
|
3
3
|
* Forged by John Leider
|
4
4
|
* Released under the MIT License.
|
5
5
|
*/
|
6
6
|
|
7
|
-
import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, createVNode, mergeProps, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, TransitionGroup, Transition, toRefs, isRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
|
7
|
+
import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, createVNode, mergeProps, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, TransitionGroup, Transition, toRefs, isRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
|
8
8
|
|
9
9
|
const IN_BROWSER = typeof window !== 'undefined';
|
10
10
|
const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
|
11
11
|
const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
|
12
12
|
const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
|
13
|
+
const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
|
13
14
|
|
14
15
|
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
15
16
|
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
@@ -2782,6 +2783,7 @@ const makeThemeProps = propsFactory({
|
|
2782
2783
|
function genDefaults$1() {
|
2783
2784
|
return {
|
2784
2785
|
defaultTheme: 'light',
|
2786
|
+
prefix: 'v-',
|
2785
2787
|
variations: {
|
2786
2788
|
colors: [],
|
2787
2789
|
lighten: 0,
|
@@ -2863,7 +2865,10 @@ function genDefaults$1() {
|
|
2863
2865
|
}
|
2864
2866
|
}
|
2865
2867
|
},
|
2866
|
-
stylesheetId: 'vuetify-theme-stylesheet'
|
2868
|
+
stylesheetId: 'vuetify-theme-stylesheet',
|
2869
|
+
scoped: false,
|
2870
|
+
unimportant: false,
|
2871
|
+
utilities: true
|
2867
2872
|
};
|
2868
2873
|
}
|
2869
2874
|
function parseThemeOptions() {
|
@@ -2886,21 +2891,21 @@ function parseThemeOptions() {
|
|
2886
2891
|
function createCssClass(lines, selector, content, scope) {
|
2887
2892
|
lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
|
2888
2893
|
}
|
2889
|
-
function genCssVariables(theme) {
|
2894
|
+
function genCssVariables(theme, prefix) {
|
2890
2895
|
const lightOverlay = theme.dark ? 2 : 1;
|
2891
2896
|
const darkOverlay = theme.dark ? 1 : 2;
|
2892
2897
|
const variables = [];
|
2893
2898
|
for (const [key, value] of Object.entries(theme.colors)) {
|
2894
2899
|
const rgb = parseColor(value);
|
2895
|
-
variables.push(
|
2900
|
+
variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
|
2896
2901
|
if (!key.startsWith('on-')) {
|
2897
|
-
variables.push(
|
2902
|
+
variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
|
2898
2903
|
}
|
2899
2904
|
}
|
2900
2905
|
for (const [key, value] of Object.entries(theme.variables)) {
|
2901
2906
|
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
|
2902
2907
|
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
|
2903
|
-
variables.push(
|
2908
|
+
variables.push(`--${prefix}${key}: ${rgb ?? value}`);
|
2904
2909
|
}
|
2905
2910
|
return variables;
|
2906
2911
|
}
|
@@ -2944,7 +2949,8 @@ function getScopedSelector(selector, scope) {
|
|
2944
2949
|
const scopeSelector = `:where(${scope})`;
|
2945
2950
|
return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
|
2946
2951
|
}
|
2947
|
-
function upsertStyles(
|
2952
|
+
function upsertStyles(id, cspNonce, styles) {
|
2953
|
+
const styleEl = getOrCreateStyleElement(id, cspNonce);
|
2948
2954
|
if (!styleEl) return;
|
2949
2955
|
styleEl.innerHTML = styles;
|
2950
2956
|
}
|
@@ -2964,8 +2970,17 @@ function getOrCreateStyleElement(id, cspNonce) {
|
|
2964
2970
|
// Composables
|
2965
2971
|
function createTheme(options) {
|
2966
2972
|
const parsedOptions = parseThemeOptions(options);
|
2967
|
-
const
|
2973
|
+
const _name = shallowRef(parsedOptions.defaultTheme);
|
2968
2974
|
const themes = ref(parsedOptions.themes);
|
2975
|
+
const systemName = shallowRef('light');
|
2976
|
+
const name = computed({
|
2977
|
+
get() {
|
2978
|
+
return _name.value === 'system' ? systemName.value : _name.value;
|
2979
|
+
},
|
2980
|
+
set(val) {
|
2981
|
+
_name.value = val;
|
2982
|
+
}
|
2983
|
+
});
|
2969
2984
|
const computedThemes = computed(() => {
|
2970
2985
|
const acc = {};
|
2971
2986
|
for (const [name, original] of Object.entries(themes.value)) {
|
@@ -2986,28 +3001,49 @@ function createTheme(options) {
|
|
2986
3001
|
const current = toRef(() => computedThemes.value[name.value]);
|
2987
3002
|
const styles = computed(() => {
|
2988
3003
|
const lines = [];
|
3004
|
+
const important = parsedOptions.unimportant ? '' : ' !important';
|
3005
|
+
const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
|
2989
3006
|
if (current.value?.dark) {
|
2990
3007
|
createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
|
2991
3008
|
}
|
2992
|
-
createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
|
3009
|
+
createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
|
2993
3010
|
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
|
2994
|
-
createCssClass(lines,
|
2995
|
-
}
|
2996
|
-
|
2997
|
-
|
2998
|
-
|
2999
|
-
|
3000
|
-
|
3001
|
-
|
3002
|
-
|
3003
|
-
|
3004
|
-
|
3005
|
-
|
3011
|
+
createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
|
3012
|
+
}
|
3013
|
+
if (parsedOptions.utilities) {
|
3014
|
+
const bgLines = [];
|
3015
|
+
const fgLines = [];
|
3016
|
+
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
|
3017
|
+
for (const key of colors) {
|
3018
|
+
if (key.startsWith('on-')) {
|
3019
|
+
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
3020
|
+
} else {
|
3021
|
+
createCssClass(bgLines, `.${scoped}bg-${key}`, [`--${parsedOptions.prefix}theme-overlay-multiplier: var(--${parsedOptions.prefix}theme-${key}-overlay-multiplier)`, `background-color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`, `color: rgb(var(--${parsedOptions.prefix}theme-on-${key}))${important}`], parsedOptions.scope);
|
3022
|
+
createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
3023
|
+
createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
|
3024
|
+
}
|
3006
3025
|
}
|
3026
|
+
lines.push(...bgLines, ...fgLines);
|
3007
3027
|
}
|
3008
|
-
lines.push(...bgLines, ...fgLines);
|
3009
3028
|
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
|
3010
3029
|
});
|
3030
|
+
const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
|
3031
|
+
const themeNames = toRef(() => Object.keys(computedThemes.value));
|
3032
|
+
if (SUPPORTS_MATCH_MEDIA) {
|
3033
|
+
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
3034
|
+
function updateSystemName() {
|
3035
|
+
systemName.value = media.matches ? 'dark' : 'light';
|
3036
|
+
}
|
3037
|
+
updateSystemName();
|
3038
|
+
media.addEventListener('change', updateSystemName, {
|
3039
|
+
passive: true
|
3040
|
+
});
|
3041
|
+
if (getCurrentScope()) {
|
3042
|
+
onScopeDispose(() => {
|
3043
|
+
media.removeEventListener('change', updateSystemName);
|
3044
|
+
});
|
3045
|
+
}
|
3046
|
+
}
|
3011
3047
|
function install(app) {
|
3012
3048
|
if (parsedOptions.isDisabled) return;
|
3013
3049
|
const head = app._context.provides.usehead;
|
@@ -3045,22 +3081,55 @@ function createTheme(options) {
|
|
3045
3081
|
updateStyles();
|
3046
3082
|
}
|
3047
3083
|
function updateStyles() {
|
3048
|
-
upsertStyles(
|
3084
|
+
upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
|
3049
3085
|
}
|
3050
3086
|
}
|
3051
3087
|
}
|
3052
|
-
|
3088
|
+
function change(themeName) {
|
3089
|
+
if (!themeNames.value.includes(themeName)) {
|
3090
|
+
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
3091
|
+
return;
|
3092
|
+
}
|
3093
|
+
name.value = themeName;
|
3094
|
+
}
|
3095
|
+
function cycle() {
|
3096
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
|
3097
|
+
const currentIndex = themeArray.indexOf(name.value);
|
3098
|
+
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
|
3099
|
+
change(themeArray[nextIndex]);
|
3100
|
+
}
|
3101
|
+
function toggle() {
|
3102
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
|
3103
|
+
cycle(themeArray);
|
3104
|
+
}
|
3105
|
+
const globalName = new Proxy(name, {
|
3106
|
+
get(target, prop) {
|
3107
|
+
return target[prop];
|
3108
|
+
},
|
3109
|
+
set(target, prop, val) {
|
3110
|
+
if (prop === 'value') {
|
3111
|
+
deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
|
3112
|
+
}
|
3113
|
+
// @ts-expect-error
|
3114
|
+
target[prop] = val;
|
3115
|
+
return true;
|
3116
|
+
}
|
3117
|
+
});
|
3053
3118
|
return {
|
3054
3119
|
install,
|
3120
|
+
change,
|
3121
|
+
cycle,
|
3122
|
+
toggle,
|
3055
3123
|
isDisabled: parsedOptions.isDisabled,
|
3056
3124
|
name,
|
3057
3125
|
themes,
|
3058
3126
|
current,
|
3059
3127
|
computedThemes,
|
3128
|
+
prefix: parsedOptions.prefix,
|
3060
3129
|
themeClasses,
|
3061
3130
|
styles,
|
3062
3131
|
global: {
|
3063
|
-
name,
|
3132
|
+
name: globalName,
|
3064
3133
|
current
|
3065
3134
|
}
|
3066
3135
|
};
|
@@ -3071,7 +3140,7 @@ function provideTheme(props) {
|
|
3071
3140
|
if (!theme) throw new Error('Could not find Vuetify theme injection');
|
3072
3141
|
const name = toRef(() => props.theme ?? theme.name.value);
|
3073
3142
|
const current = toRef(() => theme.themes.value[name.value]);
|
3074
|
-
const themeClasses = toRef(() => theme.isDisabled ? undefined :
|
3143
|
+
const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
|
3075
3144
|
const newTheme = {
|
3076
3145
|
...theme,
|
3077
3146
|
name,
|
@@ -4618,9 +4687,15 @@ function useVariant(props) {
|
|
4618
4687
|
};
|
4619
4688
|
}
|
4620
4689
|
|
4690
|
+
// Types
|
4691
|
+
|
4621
4692
|
const makeVBtnGroupProps = propsFactory({
|
4622
4693
|
baseColor: String,
|
4623
4694
|
divided: Boolean,
|
4695
|
+
direction: {
|
4696
|
+
type: String,
|
4697
|
+
default: 'horizontal'
|
4698
|
+
},
|
4624
4699
|
...makeBorderProps(),
|
4625
4700
|
...makeComponentProps(),
|
4626
4701
|
...makeDensityProps(),
|
@@ -4654,7 +4729,7 @@ const VBtnGroup = genericComponent()({
|
|
4654
4729
|
} = useRounded(props);
|
4655
4730
|
provideDefaults({
|
4656
4731
|
VBtn: {
|
4657
|
-
height: 'auto',
|
4732
|
+
height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
|
4658
4733
|
baseColor: toRef(() => props.baseColor),
|
4659
4734
|
color: toRef(() => props.color),
|
4660
4735
|
density: toRef(() => props.density),
|
@@ -4664,7 +4739,7 @@ const VBtnGroup = genericComponent()({
|
|
4664
4739
|
});
|
4665
4740
|
useRender(() => {
|
4666
4741
|
return createVNode(props.tag, {
|
4667
|
-
"class": ['v-btn-group', {
|
4742
|
+
"class": ['v-btn-group', `v-btn-group--${props.direction}`, {
|
4668
4743
|
'v-btn-group--divided': props.divided
|
4669
4744
|
}, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
|
4670
4745
|
"style": props.style
|
@@ -6143,6 +6218,31 @@ const VAppBarTitle = genericComponent()({
|
|
6143
6218
|
// Utilities
|
6144
6219
|
const VAlertTitle = createSimpleFunctional('v-alert-title');
|
6145
6220
|
|
6221
|
+
// Utilities
|
6222
|
+
|
6223
|
+
// Types
|
6224
|
+
|
6225
|
+
// Types
|
6226
|
+
|
6227
|
+
// Composables
|
6228
|
+
const makeIconSizeProps = propsFactory({
|
6229
|
+
iconSize: [Number, String],
|
6230
|
+
iconSizes: {
|
6231
|
+
type: Array,
|
6232
|
+
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
6233
|
+
}
|
6234
|
+
}, 'iconSize');
|
6235
|
+
function useIconSizes(props, fallback) {
|
6236
|
+
const iconSize = computed(() => {
|
6237
|
+
const iconSizeMap = new Map(props.iconSizes);
|
6238
|
+
const _iconSize = props.iconSize ?? fallback() ?? 'default';
|
6239
|
+
return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
|
6240
|
+
});
|
6241
|
+
return {
|
6242
|
+
iconSize
|
6243
|
+
};
|
6244
|
+
}
|
6245
|
+
|
6146
6246
|
// Types
|
6147
6247
|
|
6148
6248
|
const allowedTypes = ['success', 'info', 'warning', 'error'];
|
@@ -6182,6 +6282,7 @@ const makeVAlertProps = propsFactory({
|
|
6182
6282
|
...makeDensityProps(),
|
6183
6283
|
...makeDimensionProps(),
|
6184
6284
|
...makeElevationProps(),
|
6285
|
+
...makeIconSizeProps(),
|
6185
6286
|
...makeLocationProps(),
|
6186
6287
|
...makePositionProps(),
|
6187
6288
|
...makeRoundedProps(),
|
@@ -6209,6 +6310,9 @@ const VAlert = genericComponent()({
|
|
6209
6310
|
if (!props.type) return props.icon;
|
6210
6311
|
return props.icon ?? `$${props.type}`;
|
6211
6312
|
});
|
6313
|
+
const {
|
6314
|
+
iconSize
|
6315
|
+
} = useIconSizes(props, () => props.prominent ? 44 : 28);
|
6212
6316
|
const {
|
6213
6317
|
themeClasses
|
6214
6318
|
} = provideTheme(props);
|
@@ -6256,6 +6360,11 @@ const VAlert = genericComponent()({
|
|
6256
6360
|
const hasPrepend = !!(slots.prepend || icon.value);
|
6257
6361
|
const hasTitle = !!(slots.title || props.title);
|
6258
6362
|
const hasClose = !!(slots.close || props.closable);
|
6363
|
+
const iconProps = {
|
6364
|
+
density: props.density,
|
6365
|
+
icon: icon.value,
|
6366
|
+
size: iconSize.value
|
6367
|
+
};
|
6259
6368
|
return isActive.value && createVNode(props.tag, {
|
6260
6369
|
"class": ['v-alert', props.border && {
|
6261
6370
|
'v-alert--border': !!props.border,
|
@@ -6273,19 +6382,14 @@ const VAlert = genericComponent()({
|
|
6273
6382
|
}, null), hasPrepend && createVNode("div", {
|
6274
6383
|
"key": "prepend",
|
6275
6384
|
"class": "v-alert__prepend"
|
6276
|
-
}, [!slots.prepend ? createVNode(VIcon, {
|
6277
|
-
"key": "prepend-icon"
|
6278
|
-
|
6279
|
-
"icon": icon.value,
|
6280
|
-
"size": props.prominent ? 44 : 28
|
6281
|
-
}, null) : createVNode(VDefaultsProvider, {
|
6385
|
+
}, [!slots.prepend ? createVNode(VIcon, mergeProps({
|
6386
|
+
"key": "prepend-icon"
|
6387
|
+
}, iconProps), null) : createVNode(VDefaultsProvider, {
|
6282
6388
|
"key": "prepend-defaults",
|
6283
6389
|
"disabled": !icon.value,
|
6284
6390
|
"defaults": {
|
6285
6391
|
VIcon: {
|
6286
|
-
|
6287
|
-
icon: icon.value,
|
6288
|
-
size: props.prominent ? 44 : 28
|
6392
|
+
...iconProps
|
6289
6393
|
}
|
6290
6394
|
}
|
6291
6395
|
}, slots.prepend)]), createVNode("div", {
|
@@ -8483,6 +8587,68 @@ const VChip = genericComponent()({
|
|
8483
8587
|
}
|
8484
8588
|
});
|
8485
8589
|
|
8590
|
+
const makeVDividerProps = propsFactory({
|
8591
|
+
color: String,
|
8592
|
+
inset: Boolean,
|
8593
|
+
length: [Number, String],
|
8594
|
+
opacity: [Number, String],
|
8595
|
+
thickness: [Number, String],
|
8596
|
+
vertical: Boolean,
|
8597
|
+
...makeComponentProps(),
|
8598
|
+
...makeThemeProps()
|
8599
|
+
}, 'VDivider');
|
8600
|
+
const VDivider = genericComponent()({
|
8601
|
+
name: 'VDivider',
|
8602
|
+
props: makeVDividerProps(),
|
8603
|
+
setup(props, _ref) {
|
8604
|
+
let {
|
8605
|
+
attrs,
|
8606
|
+
slots
|
8607
|
+
} = _ref;
|
8608
|
+
const {
|
8609
|
+
themeClasses
|
8610
|
+
} = provideTheme(props);
|
8611
|
+
const {
|
8612
|
+
textColorClasses,
|
8613
|
+
textColorStyles
|
8614
|
+
} = useTextColor(() => props.color);
|
8615
|
+
const dividerStyles = computed(() => {
|
8616
|
+
const styles = {};
|
8617
|
+
if (props.length) {
|
8618
|
+
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
8619
|
+
}
|
8620
|
+
if (props.thickness) {
|
8621
|
+
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
8622
|
+
}
|
8623
|
+
return styles;
|
8624
|
+
});
|
8625
|
+
useRender(() => {
|
8626
|
+
const divider = createVNode("hr", {
|
8627
|
+
"class": [{
|
8628
|
+
'v-divider': true,
|
8629
|
+
'v-divider--inset': props.inset,
|
8630
|
+
'v-divider--vertical': props.vertical
|
8631
|
+
}, themeClasses.value, textColorClasses.value, props.class],
|
8632
|
+
"style": [dividerStyles.value, textColorStyles.value, {
|
8633
|
+
'--v-border-opacity': props.opacity
|
8634
|
+
}, props.style],
|
8635
|
+
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
8636
|
+
"role": `${attrs.role || 'separator'}`
|
8637
|
+
}, null);
|
8638
|
+
if (!slots.default) return divider;
|
8639
|
+
return createVNode("div", {
|
8640
|
+
"class": ['v-divider__wrapper', {
|
8641
|
+
'v-divider__wrapper--vertical': props.vertical,
|
8642
|
+
'v-divider__wrapper--inset': props.inset
|
8643
|
+
}]
|
8644
|
+
}, [divider, createVNode("div", {
|
8645
|
+
"class": "v-divider__content"
|
8646
|
+
}, [slots.default()]), divider]);
|
8647
|
+
});
|
8648
|
+
return {};
|
8649
|
+
}
|
8650
|
+
});
|
8651
|
+
|
8486
8652
|
// Utilities
|
8487
8653
|
|
8488
8654
|
// List
|
@@ -9634,68 +9800,6 @@ const VListSubheader = genericComponent()({
|
|
9634
9800
|
}
|
9635
9801
|
});
|
9636
9802
|
|
9637
|
-
const makeVDividerProps = propsFactory({
|
9638
|
-
color: String,
|
9639
|
-
inset: Boolean,
|
9640
|
-
length: [Number, String],
|
9641
|
-
opacity: [Number, String],
|
9642
|
-
thickness: [Number, String],
|
9643
|
-
vertical: Boolean,
|
9644
|
-
...makeComponentProps(),
|
9645
|
-
...makeThemeProps()
|
9646
|
-
}, 'VDivider');
|
9647
|
-
const VDivider = genericComponent()({
|
9648
|
-
name: 'VDivider',
|
9649
|
-
props: makeVDividerProps(),
|
9650
|
-
setup(props, _ref) {
|
9651
|
-
let {
|
9652
|
-
attrs,
|
9653
|
-
slots
|
9654
|
-
} = _ref;
|
9655
|
-
const {
|
9656
|
-
themeClasses
|
9657
|
-
} = provideTheme(props);
|
9658
|
-
const {
|
9659
|
-
textColorClasses,
|
9660
|
-
textColorStyles
|
9661
|
-
} = useTextColor(() => props.color);
|
9662
|
-
const dividerStyles = computed(() => {
|
9663
|
-
const styles = {};
|
9664
|
-
if (props.length) {
|
9665
|
-
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
9666
|
-
}
|
9667
|
-
if (props.thickness) {
|
9668
|
-
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
9669
|
-
}
|
9670
|
-
return styles;
|
9671
|
-
});
|
9672
|
-
useRender(() => {
|
9673
|
-
const divider = createVNode("hr", {
|
9674
|
-
"class": [{
|
9675
|
-
'v-divider': true,
|
9676
|
-
'v-divider--inset': props.inset,
|
9677
|
-
'v-divider--vertical': props.vertical
|
9678
|
-
}, themeClasses.value, textColorClasses.value, props.class],
|
9679
|
-
"style": [dividerStyles.value, textColorStyles.value, {
|
9680
|
-
'--v-border-opacity': props.opacity
|
9681
|
-
}, props.style],
|
9682
|
-
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
9683
|
-
"role": `${attrs.role || 'separator'}`
|
9684
|
-
}, null);
|
9685
|
-
if (!slots.default) return divider;
|
9686
|
-
return createVNode("div", {
|
9687
|
-
"class": ['v-divider__wrapper', {
|
9688
|
-
'v-divider__wrapper--vertical': props.vertical,
|
9689
|
-
'v-divider__wrapper--inset': props.inset
|
9690
|
-
}]
|
9691
|
-
}, [divider, createVNode("div", {
|
9692
|
-
"class": "v-divider__content"
|
9693
|
-
}, [slots.default()]), divider]);
|
9694
|
-
});
|
9695
|
-
return {};
|
9696
|
-
}
|
9697
|
-
});
|
9698
|
-
|
9699
9803
|
// Types
|
9700
9804
|
|
9701
9805
|
const makeVListChildrenProps = propsFactory({
|
@@ -12613,7 +12717,12 @@ function useVirtual(props, items) {
|
|
12613
12717
|
}
|
12614
12718
|
function calculateOffset(index) {
|
12615
12719
|
index = clamp(index, 0, items.value.length - 1);
|
12616
|
-
|
12720
|
+
const whole = Math.floor(index);
|
12721
|
+
const fraction = index % 1;
|
12722
|
+
const next = whole + 1;
|
12723
|
+
const wholeOffset = offsets[whole] || 0;
|
12724
|
+
const nextOffset = offsets[next] || wholeOffset;
|
12725
|
+
return wholeOffset + (nextOffset - wholeOffset) * fraction;
|
12617
12726
|
}
|
12618
12727
|
function calculateIndex(scrollTop) {
|
12619
12728
|
return binaryClosest(offsets, scrollTop);
|
@@ -13244,6 +13353,22 @@ const VSelect = genericComponent()({
|
|
13244
13353
|
key: item.value,
|
13245
13354
|
onClick: () => select(item, null)
|
13246
13355
|
});
|
13356
|
+
if (item.raw.type === 'divider') {
|
13357
|
+
return slots.divider?.({
|
13358
|
+
props: item.raw,
|
13359
|
+
index
|
13360
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13361
|
+
"key": `divider-${index}`
|
13362
|
+
}), null);
|
13363
|
+
}
|
13364
|
+
if (item.raw.type === 'subheader') {
|
13365
|
+
return slots.subheader?.({
|
13366
|
+
props: item.raw,
|
13367
|
+
index
|
13368
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13369
|
+
"key": `subheader-${index}`
|
13370
|
+
}), null);
|
13371
|
+
}
|
13247
13372
|
return slots.item?.({
|
13248
13373
|
item,
|
13249
13374
|
index,
|
@@ -13404,6 +13529,9 @@ function filterItems(items, query, options) {
|
|
13404
13529
|
let match = -1;
|
13405
13530
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
13406
13531
|
if (typeof item === 'object') {
|
13532
|
+
if (['divider', 'subheader'].includes(item.raw?.type)) {
|
13533
|
+
continue;
|
13534
|
+
}
|
13407
13535
|
const filterKeys = keys || Object.keys(transformed);
|
13408
13536
|
for (const key of filterKeys) {
|
13409
13537
|
const value = getPropertyFromItem(transformed, key);
|
@@ -13842,6 +13970,22 @@ const VAutocomplete = genericComponent()({
|
|
13842
13970
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
13843
13971
|
onClick: () => select(item, null)
|
13844
13972
|
});
|
13973
|
+
if (item.raw.type === 'divider') {
|
13974
|
+
return slots.divider?.({
|
13975
|
+
props: item.raw,
|
13976
|
+
index
|
13977
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13978
|
+
"key": `divider-${index}`
|
13979
|
+
}), null);
|
13980
|
+
}
|
13981
|
+
if (item.raw.type === 'subheader') {
|
13982
|
+
return slots.subheader?.({
|
13983
|
+
props: item.raw,
|
13984
|
+
index
|
13985
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13986
|
+
"key": `subheader-${index}`
|
13987
|
+
}), null);
|
13988
|
+
}
|
13845
13989
|
return slots.item?.({
|
13846
13990
|
item,
|
13847
13991
|
index,
|
@@ -18252,6 +18396,7 @@ const VCombobox = genericComponent()({
|
|
18252
18396
|
_search.value = val ?? '';
|
18253
18397
|
if (!props.multiple && !hasSelectionSlot.value) {
|
18254
18398
|
model.value = [transformItem$3(props, val)];
|
18399
|
+
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
18255
18400
|
}
|
18256
18401
|
if (val && props.multiple && props.delimiters?.length) {
|
18257
18402
|
const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
|
@@ -18568,6 +18713,22 @@ const VCombobox = genericComponent()({
|
|
18568
18713
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
18569
18714
|
onClick: () => select(item, null)
|
18570
18715
|
});
|
18716
|
+
if (item.raw.type === 'divider') {
|
18717
|
+
return slots.divider?.({
|
18718
|
+
props: item.raw,
|
18719
|
+
index
|
18720
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
18721
|
+
"key": `divider-${index}`
|
18722
|
+
}), null);
|
18723
|
+
}
|
18724
|
+
if (item.raw.type === 'subheader') {
|
18725
|
+
return slots.subheader?.({
|
18726
|
+
props: item.raw,
|
18727
|
+
index
|
18728
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
18729
|
+
"key": `subheader-${index}`
|
18730
|
+
}), null);
|
18731
|
+
}
|
18571
18732
|
return slots.item?.({
|
18572
18733
|
item,
|
18573
18734
|
index,
|
@@ -24991,6 +25152,10 @@ const makeVNumberInputProps = propsFactory({
|
|
24991
25152
|
type: Number,
|
24992
25153
|
default: 0
|
24993
25154
|
},
|
25155
|
+
minFractionDigits: {
|
25156
|
+
type: Number,
|
25157
|
+
default: null
|
25158
|
+
},
|
24994
25159
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
24995
25160
|
}, 'VNumberInput');
|
24996
25161
|
const VNumberInput = genericComponent()({
|
@@ -25021,9 +25186,19 @@ const VNumberInput = genericComponent()({
|
|
25021
25186
|
} = useFocus(props);
|
25022
25187
|
function correctPrecision(val) {
|
25023
25188
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
25024
|
-
|
25025
|
-
|
25026
|
-
|
25189
|
+
if (precision == null) {
|
25190
|
+
return String(val);
|
25191
|
+
}
|
25192
|
+
let fixed = val.toFixed(precision);
|
25193
|
+
if (isFocused.value) {
|
25194
|
+
return Number(fixed).toString(); // trim zeros
|
25195
|
+
}
|
25196
|
+
if ((props.minFractionDigits ?? precision) < precision) {
|
25197
|
+
const trimLimit = precision - props.minFractionDigits;
|
25198
|
+
const [baseDigits, fractionDigits] = fixed.split('.');
|
25199
|
+
fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
|
25200
|
+
}
|
25201
|
+
return fixed;
|
25027
25202
|
}
|
25028
25203
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
25029
25204
|
const _inputText = shallowRef(null);
|
@@ -25076,6 +25251,7 @@ const VNumberInput = genericComponent()({
|
|
25076
25251
|
}
|
25077
25252
|
};
|
25078
25253
|
watch(() => props.precision, () => formatInputValue());
|
25254
|
+
watch(() => props.minFractionDigits, () => formatInputValue());
|
25079
25255
|
onMounted(() => {
|
25080
25256
|
clampModel();
|
25081
25257
|
});
|
@@ -25177,7 +25353,7 @@ const VNumberInput = genericComponent()({
|
|
25177
25353
|
inputText.value = null;
|
25178
25354
|
return;
|
25179
25355
|
}
|
25180
|
-
inputText.value =
|
25356
|
+
inputText.value = correctPrecision(model.value);
|
25181
25357
|
}
|
25182
25358
|
function trimDecimalZeros() {
|
25183
25359
|
if (controlsDisabled.value) return;
|
@@ -29219,7 +29395,7 @@ function createVuetify$1() {
|
|
29219
29395
|
};
|
29220
29396
|
});
|
29221
29397
|
}
|
29222
|
-
const version$1 = "3.8.
|
29398
|
+
const version$1 = "3.8.6-dev.2025-05-21";
|
29223
29399
|
createVuetify$1.version = version$1;
|
29224
29400
|
|
29225
29401
|
// Vue's inject() can only be used in setup
|
@@ -29244,7 +29420,7 @@ const createVuetify = function () {
|
|
29244
29420
|
...options
|
29245
29421
|
});
|
29246
29422
|
};
|
29247
|
-
const version = "3.8.
|
29423
|
+
const version = "3.8.6-dev.2025-05-21";
|
29248
29424
|
createVuetify.version = version;
|
29249
29425
|
|
29250
29426
|
export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };
|