@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.js
CHANGED
@@ -1,5 +1,5 @@
|
|
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
|
*/
|
@@ -14,6 +14,7 @@
|
|
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';
|
17
18
|
|
18
19
|
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
19
20
|
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
@@ -2786,6 +2787,7 @@
|
|
2786
2787
|
function genDefaults$1() {
|
2787
2788
|
return {
|
2788
2789
|
defaultTheme: 'light',
|
2790
|
+
prefix: 'v-',
|
2789
2791
|
variations: {
|
2790
2792
|
colors: [],
|
2791
2793
|
lighten: 0,
|
@@ -2867,7 +2869,10 @@
|
|
2867
2869
|
}
|
2868
2870
|
}
|
2869
2871
|
},
|
2870
|
-
stylesheetId: 'vuetify-theme-stylesheet'
|
2872
|
+
stylesheetId: 'vuetify-theme-stylesheet',
|
2873
|
+
scoped: false,
|
2874
|
+
unimportant: false,
|
2875
|
+
utilities: true
|
2871
2876
|
};
|
2872
2877
|
}
|
2873
2878
|
function parseThemeOptions() {
|
@@ -2890,21 +2895,21 @@
|
|
2890
2895
|
function createCssClass(lines, selector, content, scope) {
|
2891
2896
|
lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
|
2892
2897
|
}
|
2893
|
-
function genCssVariables(theme) {
|
2898
|
+
function genCssVariables(theme, prefix) {
|
2894
2899
|
const lightOverlay = theme.dark ? 2 : 1;
|
2895
2900
|
const darkOverlay = theme.dark ? 1 : 2;
|
2896
2901
|
const variables = [];
|
2897
2902
|
for (const [key, value] of Object.entries(theme.colors)) {
|
2898
2903
|
const rgb = parseColor(value);
|
2899
|
-
variables.push(
|
2904
|
+
variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
|
2900
2905
|
if (!key.startsWith('on-')) {
|
2901
|
-
variables.push(
|
2906
|
+
variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
|
2902
2907
|
}
|
2903
2908
|
}
|
2904
2909
|
for (const [key, value] of Object.entries(theme.variables)) {
|
2905
2910
|
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
|
2906
2911
|
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
|
2907
|
-
variables.push(
|
2912
|
+
variables.push(`--${prefix}${key}: ${rgb ?? value}`);
|
2908
2913
|
}
|
2909
2914
|
return variables;
|
2910
2915
|
}
|
@@ -2948,7 +2953,8 @@
|
|
2948
2953
|
const scopeSelector = `:where(${scope})`;
|
2949
2954
|
return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
|
2950
2955
|
}
|
2951
|
-
function upsertStyles(
|
2956
|
+
function upsertStyles(id, cspNonce, styles) {
|
2957
|
+
const styleEl = getOrCreateStyleElement(id, cspNonce);
|
2952
2958
|
if (!styleEl) return;
|
2953
2959
|
styleEl.innerHTML = styles;
|
2954
2960
|
}
|
@@ -2968,8 +2974,17 @@
|
|
2968
2974
|
// Composables
|
2969
2975
|
function createTheme(options) {
|
2970
2976
|
const parsedOptions = parseThemeOptions(options);
|
2971
|
-
const
|
2977
|
+
const _name = vue.shallowRef(parsedOptions.defaultTheme);
|
2972
2978
|
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
|
+
});
|
2973
2988
|
const computedThemes = vue.computed(() => {
|
2974
2989
|
const acc = {};
|
2975
2990
|
for (const [name, original] of Object.entries(themes.value)) {
|
@@ -2990,28 +3005,49 @@
|
|
2990
3005
|
const current = vue.toRef(() => computedThemes.value[name.value]);
|
2991
3006
|
const styles = vue.computed(() => {
|
2992
3007
|
const lines = [];
|
3008
|
+
const important = parsedOptions.unimportant ? '' : ' !important';
|
3009
|
+
const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
|
2993
3010
|
if (current.value?.dark) {
|
2994
3011
|
createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
|
2995
3012
|
}
|
2996
|
-
createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
|
3013
|
+
createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
|
2997
3014
|
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
|
2998
|
-
createCssClass(lines,
|
2999
|
-
}
|
3000
|
-
|
3001
|
-
|
3002
|
-
|
3003
|
-
|
3004
|
-
|
3005
|
-
|
3006
|
-
|
3007
|
-
|
3008
|
-
|
3009
|
-
|
3015
|
+
createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
|
3016
|
+
}
|
3017
|
+
if (parsedOptions.utilities) {
|
3018
|
+
const bgLines = [];
|
3019
|
+
const fgLines = [];
|
3020
|
+
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
|
3021
|
+
for (const key of colors) {
|
3022
|
+
if (key.startsWith('on-')) {
|
3023
|
+
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
3024
|
+
} else {
|
3025
|
+
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);
|
3026
|
+
createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
3027
|
+
createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
|
3028
|
+
}
|
3010
3029
|
}
|
3030
|
+
lines.push(...bgLines, ...fgLines);
|
3011
3031
|
}
|
3012
|
-
lines.push(...bgLines, ...fgLines);
|
3013
3032
|
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
|
3014
3033
|
});
|
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
|
+
}
|
3015
3051
|
function install(app) {
|
3016
3052
|
if (parsedOptions.isDisabled) return;
|
3017
3053
|
const head = app._context.provides.usehead;
|
@@ -3049,22 +3085,55 @@
|
|
3049
3085
|
updateStyles();
|
3050
3086
|
}
|
3051
3087
|
function updateStyles() {
|
3052
|
-
upsertStyles(
|
3088
|
+
upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
|
3053
3089
|
}
|
3054
3090
|
}
|
3055
3091
|
}
|
3056
|
-
|
3092
|
+
function change(themeName) {
|
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
|
+
});
|
3057
3122
|
return {
|
3058
3123
|
install,
|
3124
|
+
change,
|
3125
|
+
cycle,
|
3126
|
+
toggle,
|
3059
3127
|
isDisabled: parsedOptions.isDisabled,
|
3060
3128
|
name,
|
3061
3129
|
themes,
|
3062
3130
|
current,
|
3063
3131
|
computedThemes,
|
3132
|
+
prefix: parsedOptions.prefix,
|
3064
3133
|
themeClasses,
|
3065
3134
|
styles,
|
3066
3135
|
global: {
|
3067
|
-
name,
|
3136
|
+
name: globalName,
|
3068
3137
|
current
|
3069
3138
|
}
|
3070
3139
|
};
|
@@ -3075,7 +3144,7 @@
|
|
3075
3144
|
if (!theme) throw new Error('Could not find Vuetify theme injection');
|
3076
3145
|
const name = vue.toRef(() => props.theme ?? theme.name.value);
|
3077
3146
|
const current = vue.toRef(() => theme.themes.value[name.value]);
|
3078
|
-
const themeClasses = vue.toRef(() => theme.isDisabled ? undefined :
|
3147
|
+
const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
|
3079
3148
|
const newTheme = {
|
3080
3149
|
...theme,
|
3081
3150
|
name,
|
@@ -4622,9 +4691,15 @@
|
|
4622
4691
|
};
|
4623
4692
|
}
|
4624
4693
|
|
4694
|
+
// Types
|
4695
|
+
|
4625
4696
|
const makeVBtnGroupProps = propsFactory({
|
4626
4697
|
baseColor: String,
|
4627
4698
|
divided: Boolean,
|
4699
|
+
direction: {
|
4700
|
+
type: String,
|
4701
|
+
default: 'horizontal'
|
4702
|
+
},
|
4628
4703
|
...makeBorderProps(),
|
4629
4704
|
...makeComponentProps(),
|
4630
4705
|
...makeDensityProps(),
|
@@ -4658,7 +4733,7 @@
|
|
4658
4733
|
} = useRounded(props);
|
4659
4734
|
provideDefaults({
|
4660
4735
|
VBtn: {
|
4661
|
-
height: 'auto',
|
4736
|
+
height: vue.toRef(() => props.direction === 'horizontal' ? 'auto' : null),
|
4662
4737
|
baseColor: vue.toRef(() => props.baseColor),
|
4663
4738
|
color: vue.toRef(() => props.color),
|
4664
4739
|
density: vue.toRef(() => props.density),
|
@@ -4668,7 +4743,7 @@
|
|
4668
4743
|
});
|
4669
4744
|
useRender(() => {
|
4670
4745
|
return vue.createVNode(props.tag, {
|
4671
|
-
"class": ['v-btn-group', {
|
4746
|
+
"class": ['v-btn-group', `v-btn-group--${props.direction}`, {
|
4672
4747
|
'v-btn-group--divided': props.divided
|
4673
4748
|
}, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
|
4674
4749
|
"style": props.style
|
@@ -6147,6 +6222,31 @@
|
|
6147
6222
|
// Utilities
|
6148
6223
|
const VAlertTitle = createSimpleFunctional('v-alert-title');
|
6149
6224
|
|
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
|
+
|
6150
6250
|
// Types
|
6151
6251
|
|
6152
6252
|
const allowedTypes = ['success', 'info', 'warning', 'error'];
|
@@ -6186,6 +6286,7 @@
|
|
6186
6286
|
...makeDensityProps(),
|
6187
6287
|
...makeDimensionProps(),
|
6188
6288
|
...makeElevationProps(),
|
6289
|
+
...makeIconSizeProps(),
|
6189
6290
|
...makeLocationProps(),
|
6190
6291
|
...makePositionProps(),
|
6191
6292
|
...makeRoundedProps(),
|
@@ -6213,6 +6314,9 @@
|
|
6213
6314
|
if (!props.type) return props.icon;
|
6214
6315
|
return props.icon ?? `$${props.type}`;
|
6215
6316
|
});
|
6317
|
+
const {
|
6318
|
+
iconSize
|
6319
|
+
} = useIconSizes(props, () => props.prominent ? 44 : 28);
|
6216
6320
|
const {
|
6217
6321
|
themeClasses
|
6218
6322
|
} = provideTheme(props);
|
@@ -6260,6 +6364,11 @@
|
|
6260
6364
|
const hasPrepend = !!(slots.prepend || icon.value);
|
6261
6365
|
const hasTitle = !!(slots.title || props.title);
|
6262
6366
|
const hasClose = !!(slots.close || props.closable);
|
6367
|
+
const iconProps = {
|
6368
|
+
density: props.density,
|
6369
|
+
icon: icon.value,
|
6370
|
+
size: iconSize.value
|
6371
|
+
};
|
6263
6372
|
return isActive.value && vue.createVNode(props.tag, {
|
6264
6373
|
"class": ['v-alert', props.border && {
|
6265
6374
|
'v-alert--border': !!props.border,
|
@@ -6277,19 +6386,14 @@
|
|
6277
6386
|
}, null), hasPrepend && vue.createVNode("div", {
|
6278
6387
|
"key": "prepend",
|
6279
6388
|
"class": "v-alert__prepend"
|
6280
|
-
}, [!slots.prepend ? vue.createVNode(VIcon, {
|
6281
|
-
"key": "prepend-icon"
|
6282
|
-
|
6283
|
-
"icon": icon.value,
|
6284
|
-
"size": props.prominent ? 44 : 28
|
6285
|
-
}, null) : vue.createVNode(VDefaultsProvider, {
|
6389
|
+
}, [!slots.prepend ? vue.createVNode(VIcon, vue.mergeProps({
|
6390
|
+
"key": "prepend-icon"
|
6391
|
+
}, iconProps), null) : vue.createVNode(VDefaultsProvider, {
|
6286
6392
|
"key": "prepend-defaults",
|
6287
6393
|
"disabled": !icon.value,
|
6288
6394
|
"defaults": {
|
6289
6395
|
VIcon: {
|
6290
|
-
|
6291
|
-
icon: icon.value,
|
6292
|
-
size: props.prominent ? 44 : 28
|
6396
|
+
...iconProps
|
6293
6397
|
}
|
6294
6398
|
}
|
6295
6399
|
}, slots.prepend)]), vue.createVNode("div", {
|
@@ -8487,6 +8591,68 @@
|
|
8487
8591
|
}
|
8488
8592
|
});
|
8489
8593
|
|
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
|
+
|
8490
8656
|
// Utilities
|
8491
8657
|
|
8492
8658
|
// List
|
@@ -9638,68 +9804,6 @@
|
|
9638
9804
|
}
|
9639
9805
|
});
|
9640
9806
|
|
9641
|
-
const makeVDividerProps = propsFactory({
|
9642
|
-
color: String,
|
9643
|
-
inset: Boolean,
|
9644
|
-
length: [Number, String],
|
9645
|
-
opacity: [Number, String],
|
9646
|
-
thickness: [Number, String],
|
9647
|
-
vertical: Boolean,
|
9648
|
-
...makeComponentProps(),
|
9649
|
-
...makeThemeProps()
|
9650
|
-
}, 'VDivider');
|
9651
|
-
const VDivider = genericComponent()({
|
9652
|
-
name: 'VDivider',
|
9653
|
-
props: makeVDividerProps(),
|
9654
|
-
setup(props, _ref) {
|
9655
|
-
let {
|
9656
|
-
attrs,
|
9657
|
-
slots
|
9658
|
-
} = _ref;
|
9659
|
-
const {
|
9660
|
-
themeClasses
|
9661
|
-
} = provideTheme(props);
|
9662
|
-
const {
|
9663
|
-
textColorClasses,
|
9664
|
-
textColorStyles
|
9665
|
-
} = useTextColor(() => props.color);
|
9666
|
-
const dividerStyles = vue.computed(() => {
|
9667
|
-
const styles = {};
|
9668
|
-
if (props.length) {
|
9669
|
-
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
9670
|
-
}
|
9671
|
-
if (props.thickness) {
|
9672
|
-
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
9673
|
-
}
|
9674
|
-
return styles;
|
9675
|
-
});
|
9676
|
-
useRender(() => {
|
9677
|
-
const divider = vue.createVNode("hr", {
|
9678
|
-
"class": [{
|
9679
|
-
'v-divider': true,
|
9680
|
-
'v-divider--inset': props.inset,
|
9681
|
-
'v-divider--vertical': props.vertical
|
9682
|
-
}, themeClasses.value, textColorClasses.value, props.class],
|
9683
|
-
"style": [dividerStyles.value, textColorStyles.value, {
|
9684
|
-
'--v-border-opacity': props.opacity
|
9685
|
-
}, props.style],
|
9686
|
-
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
9687
|
-
"role": `${attrs.role || 'separator'}`
|
9688
|
-
}, null);
|
9689
|
-
if (!slots.default) return divider;
|
9690
|
-
return vue.createVNode("div", {
|
9691
|
-
"class": ['v-divider__wrapper', {
|
9692
|
-
'v-divider__wrapper--vertical': props.vertical,
|
9693
|
-
'v-divider__wrapper--inset': props.inset
|
9694
|
-
}]
|
9695
|
-
}, [divider, vue.createVNode("div", {
|
9696
|
-
"class": "v-divider__content"
|
9697
|
-
}, [slots.default()]), divider]);
|
9698
|
-
});
|
9699
|
-
return {};
|
9700
|
-
}
|
9701
|
-
});
|
9702
|
-
|
9703
9807
|
// Types
|
9704
9808
|
|
9705
9809
|
const makeVListChildrenProps = propsFactory({
|
@@ -12617,7 +12721,12 @@
|
|
12617
12721
|
}
|
12618
12722
|
function calculateOffset(index) {
|
12619
12723
|
index = clamp(index, 0, items.value.length - 1);
|
12620
|
-
|
12724
|
+
const whole = Math.floor(index);
|
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;
|
12621
12730
|
}
|
12622
12731
|
function calculateIndex(scrollTop) {
|
12623
12732
|
return binaryClosest(offsets, scrollTop);
|
@@ -13248,6 +13357,22 @@
|
|
13248
13357
|
key: item.value,
|
13249
13358
|
onClick: () => select(item, null)
|
13250
13359
|
});
|
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
|
+
}
|
13251
13376
|
return slots.item?.({
|
13252
13377
|
item,
|
13253
13378
|
index,
|
@@ -13408,6 +13533,9 @@
|
|
13408
13533
|
let match = -1;
|
13409
13534
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
13410
13535
|
if (typeof item === 'object') {
|
13536
|
+
if (['divider', 'subheader'].includes(item.raw?.type)) {
|
13537
|
+
continue;
|
13538
|
+
}
|
13411
13539
|
const filterKeys = keys || Object.keys(transformed);
|
13412
13540
|
for (const key of filterKeys) {
|
13413
13541
|
const value = getPropertyFromItem(transformed, key);
|
@@ -13846,6 +13974,22 @@
|
|
13846
13974
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
13847
13975
|
onClick: () => select(item, null)
|
13848
13976
|
});
|
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
|
+
}
|
13849
13993
|
return slots.item?.({
|
13850
13994
|
item,
|
13851
13995
|
index,
|
@@ -18256,6 +18400,7 @@
|
|
18256
18400
|
_search.value = val ?? '';
|
18257
18401
|
if (!props.multiple && !hasSelectionSlot.value) {
|
18258
18402
|
model.value = [transformItem$3(props, val)];
|
18403
|
+
vue.nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
18259
18404
|
}
|
18260
18405
|
if (val && props.multiple && props.delimiters?.length) {
|
18261
18406
|
const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
|
@@ -18572,6 +18717,22 @@
|
|
18572
18717
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
18573
18718
|
onClick: () => select(item, null)
|
18574
18719
|
});
|
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
|
+
}
|
18575
18736
|
return slots.item?.({
|
18576
18737
|
item,
|
18577
18738
|
index,
|
@@ -24995,6 +25156,10 @@
|
|
24995
25156
|
type: Number,
|
24996
25157
|
default: 0
|
24997
25158
|
},
|
25159
|
+
minFractionDigits: {
|
25160
|
+
type: Number,
|
25161
|
+
default: null
|
25162
|
+
},
|
24998
25163
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
24999
25164
|
}, 'VNumberInput');
|
25000
25165
|
const VNumberInput = genericComponent()({
|
@@ -25025,9 +25190,19 @@
|
|
25025
25190
|
} = useFocus(props);
|
25026
25191
|
function correctPrecision(val) {
|
25027
25192
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
25028
|
-
|
25029
|
-
|
25030
|
-
|
25193
|
+
if (precision == null) {
|
25194
|
+
return String(val);
|
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;
|
25031
25206
|
}
|
25032
25207
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
25033
25208
|
const _inputText = vue.shallowRef(null);
|
@@ -25080,6 +25255,7 @@
|
|
25080
25255
|
}
|
25081
25256
|
};
|
25082
25257
|
vue.watch(() => props.precision, () => formatInputValue());
|
25258
|
+
vue.watch(() => props.minFractionDigits, () => formatInputValue());
|
25083
25259
|
vue.onMounted(() => {
|
25084
25260
|
clampModel();
|
25085
25261
|
});
|
@@ -25181,7 +25357,7 @@
|
|
25181
25357
|
inputText.value = null;
|
25182
25358
|
return;
|
25183
25359
|
}
|
25184
|
-
inputText.value =
|
25360
|
+
inputText.value = correctPrecision(model.value);
|
25185
25361
|
}
|
25186
25362
|
function trimDecimalZeros() {
|
25187
25363
|
if (controlsDisabled.value) return;
|
@@ -29223,7 +29399,7 @@
|
|
29223
29399
|
};
|
29224
29400
|
});
|
29225
29401
|
}
|
29226
|
-
const version$1 = "3.8.
|
29402
|
+
const version$1 = "3.8.6-dev.2025-05-21";
|
29227
29403
|
createVuetify$1.version = version$1;
|
29228
29404
|
|
29229
29405
|
// Vue's inject() can only be used in setup
|
@@ -29248,7 +29424,7 @@
|
|
29248
29424
|
...options
|
29249
29425
|
});
|
29250
29426
|
};
|
29251
|
-
const version = "3.8.
|
29427
|
+
const version = "3.8.6-dev.2025-05-21";
|
29252
29428
|
createVuetify.version = version;
|
29253
29429
|
|
29254
29430
|
exports.blueprints = index;
|