@vuetify/nightly 3.8.6-master.2025-05-26 → 3.8.7-dev.2025-05-30
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 +25 -20
- package/dist/json/attributes.json +3672 -3588
- package/dist/json/importMap-labs.json +28 -28
- package/dist/json/importMap.json +164 -164
- package/dist/json/tags.json +21 -0
- package/dist/json/web-types.json +6618 -6326
- package/dist/vuetify-labs.cjs +338 -140
- package/dist/vuetify-labs.css +4581 -4553
- package/dist/vuetify-labs.d.ts +1533 -1116
- package/dist/vuetify-labs.esm.js +339 -141
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +338 -140
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +332 -129
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3805 -3777
- package/dist/vuetify.d.ts +1022 -645
- package/dist/vuetify.esm.js +333 -130
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +332 -129
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1200 -1185
- 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 +15 -10
- package/lib/components/VAlert/VAlert.js.map +1 -1
- package/lib/components/VAlert/VAlert.sass +7 -1
- package/lib/components/VAppBar/VAppBarNavIcon.d.ts +20 -10
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +154 -103
- package/lib/components/VAutocomplete/VAutocomplete.js +21 -3
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VBtn/VBtn.d.ts +20 -10
- 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/VCard/VCard.d.ts +20 -10
- package/lib/components/VCheckbox/VCheckbox.d.ts +23 -13
- package/lib/components/VCheckbox/VCheckboxBtn.d.ts +20 -10
- package/lib/components/VChip/VChip.d.ts +20 -10
- package/lib/components/VChipGroup/VChipGroup.d.ts +10 -0
- package/lib/components/VCombobox/VCombobox.d.ts +154 -103
- package/lib/components/VCombobox/VCombobox.js +22 -3
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VDataTable/VDataTable.d.ts +18 -0
- package/lib/components/VDataTable/VDataTableHeaders.d.ts +13 -0
- package/lib/components/VDataTable/VDataTableHeaders.js +4 -2
- package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
- package/lib/components/VDataTable/VDataTableServer.d.ts +13 -0
- package/lib/components/VDataTable/VDataTableVirtual.d.ts +13 -0
- package/lib/components/VDatePicker/VDatePicker.d.ts +10 -0
- package/lib/components/VDatePicker/VDatePickerMonth.d.ts +10 -0
- package/lib/components/VDatePicker/VDatePickerMonth.js +1 -1
- package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
- package/lib/components/VExpansionPanel/VExpansionPanel.d.ts +20 -10
- package/lib/components/VExpansionPanel/VExpansionPanelTitle.d.ts +20 -10
- package/lib/components/VExpansionPanel/VExpansionPanels.d.ts +20 -10
- package/lib/components/VFab/VFab.d.ts +20 -10
- 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/VList.d.ts +13 -0
- package/lib/components/VList/VList.js +4 -1
- package/lib/components/VList/VList.js.map +1 -1
- package/lib/components/VList/VListChildren.js.map +1 -1
- package/lib/components/VList/VListItem.d.ts +23 -10
- package/lib/components/VList/VListItem.js +7 -3
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VList/list.d.ts +9 -2
- package/lib/components/VList/list.js +7 -0
- package/lib/components/VList/list.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/VOtpInput/VOtpInput.js +2 -1
- package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
- package/lib/components/VOverlay/VOverlay.css +1 -1
- package/lib/components/VOverlay/_variables.scss +1 -1
- package/lib/components/VRadio/VRadio.d.ts +20 -10
- package/lib/components/VRadioGroup/VRadioGroup.d.ts +23 -13
- package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
- package/lib/components/VSelect/VSelect.d.ts +171 -107
- package/lib/components/VSelect/VSelect.js +21 -3
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSelectionControl/VSelectionControl.d.ts +20 -10
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.d.ts +28 -14
- package/lib/components/VSlideGroup/VSlideGroup.d.ts +10 -0
- package/lib/components/VSlideGroup/VSlideGroup.js +2 -1
- package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
- package/lib/components/VSlider/VSlider.d.ts +3 -3
- package/lib/components/VSlider/VSliderThumb.d.ts +20 -10
- package/lib/components/VStepper/VStepperItem.d.ts +28 -14
- package/lib/components/VSwitch/VSwitch.d.ts +23 -13
- package/lib/components/VTabs/VTab.d.ts +56 -28
- package/lib/components/VTabs/VTabs.d.ts +10 -0
- package/lib/components/VTextField/VTextField.d.ts +27 -27
- package/lib/components/VTextarea/VTextarea.d.ts +15 -15
- package/lib/composables/calendar.d.ts +6 -0
- package/lib/composables/calendar.js +2 -1
- 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 +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/directives/ripple/index.d.ts +2 -1
- package/lib/directives/ripple/index.js +12 -7
- package/lib/directives/ripple/index.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 +64 -59
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VCalendar/VCalendar.d.ts +10 -0
- package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
- package/lib/labs/VDateInput/VDateInput.d.ts +97 -87
- package/lib/labs/VFileUpload/VFileUpload.d.ts +3 -3
- package/lib/labs/VFileUpload/VFileUploadItem.d.ts +20 -10
- 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/labs/VStepperVertical/VStepperVertical.d.ts +20 -10
- package/lib/labs/VStepperVertical/VStepperVerticalItem.d.ts +20 -10
- package/lib/labs/VTreeview/VTreeview.d.ts +13 -0
- package/lib/labs/VTreeview/VTreeviewItem.d.ts +20 -10
- package/lib/labs/entry-bundler.d.ts +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.7-dev.2025-05-30
|
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, createElementVNode, normalizeClass, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, normalizeStyle, TransitionGroup, Transition, toRefs, isRef, onBeforeMount, nextTick, withDirectives, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, normalizeProps, guardReactiveProps, 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, createElementVNode, normalizeClass, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, normalizeStyle, TransitionGroup, Transition, toRefs, isRef, onBeforeMount, nextTick, withDirectives, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, normalizeProps, guardReactiveProps, 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"); }
|
@@ -2824,6 +2825,7 @@ const makeThemeProps = propsFactory({
|
|
2824
2825
|
function genDefaults$1() {
|
2825
2826
|
return {
|
2826
2827
|
defaultTheme: 'light',
|
2828
|
+
prefix: 'v-',
|
2827
2829
|
variations: {
|
2828
2830
|
colors: [],
|
2829
2831
|
lighten: 0,
|
@@ -2905,7 +2907,10 @@ function genDefaults$1() {
|
|
2905
2907
|
}
|
2906
2908
|
}
|
2907
2909
|
},
|
2908
|
-
stylesheetId: 'vuetify-theme-stylesheet'
|
2910
|
+
stylesheetId: 'vuetify-theme-stylesheet',
|
2911
|
+
scoped: false,
|
2912
|
+
unimportant: false,
|
2913
|
+
utilities: true
|
2909
2914
|
};
|
2910
2915
|
}
|
2911
2916
|
function parseThemeOptions() {
|
@@ -2928,21 +2933,21 @@ function parseThemeOptions() {
|
|
2928
2933
|
function createCssClass(lines, selector, content, scope) {
|
2929
2934
|
lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
|
2930
2935
|
}
|
2931
|
-
function genCssVariables(theme) {
|
2936
|
+
function genCssVariables(theme, prefix) {
|
2932
2937
|
const lightOverlay = theme.dark ? 2 : 1;
|
2933
2938
|
const darkOverlay = theme.dark ? 1 : 2;
|
2934
2939
|
const variables = [];
|
2935
2940
|
for (const [key, value] of Object.entries(theme.colors)) {
|
2936
2941
|
const rgb = parseColor(value);
|
2937
|
-
variables.push(
|
2942
|
+
variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
|
2938
2943
|
if (!key.startsWith('on-')) {
|
2939
|
-
variables.push(
|
2944
|
+
variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
|
2940
2945
|
}
|
2941
2946
|
}
|
2942
2947
|
for (const [key, value] of Object.entries(theme.variables)) {
|
2943
2948
|
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
|
2944
2949
|
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
|
2945
|
-
variables.push(
|
2950
|
+
variables.push(`--${prefix}${key}: ${rgb ?? value}`);
|
2946
2951
|
}
|
2947
2952
|
return variables;
|
2948
2953
|
}
|
@@ -2986,7 +2991,8 @@ function getScopedSelector(selector, scope) {
|
|
2986
2991
|
const scopeSelector = `:where(${scope})`;
|
2987
2992
|
return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
|
2988
2993
|
}
|
2989
|
-
function upsertStyles(
|
2994
|
+
function upsertStyles(id, cspNonce, styles) {
|
2995
|
+
const styleEl = getOrCreateStyleElement(id, cspNonce);
|
2990
2996
|
if (!styleEl) return;
|
2991
2997
|
styleEl.innerHTML = styles;
|
2992
2998
|
}
|
@@ -3006,8 +3012,17 @@ function getOrCreateStyleElement(id, cspNonce) {
|
|
3006
3012
|
// Composables
|
3007
3013
|
function createTheme(options) {
|
3008
3014
|
const parsedOptions = parseThemeOptions(options);
|
3009
|
-
const
|
3015
|
+
const _name = shallowRef(parsedOptions.defaultTheme);
|
3010
3016
|
const themes = ref(parsedOptions.themes);
|
3017
|
+
const systemName = shallowRef('light');
|
3018
|
+
const name = computed({
|
3019
|
+
get() {
|
3020
|
+
return _name.value === 'system' ? systemName.value : _name.value;
|
3021
|
+
},
|
3022
|
+
set(val) {
|
3023
|
+
_name.value = val;
|
3024
|
+
}
|
3025
|
+
});
|
3011
3026
|
const computedThemes = computed(() => {
|
3012
3027
|
const acc = {};
|
3013
3028
|
for (const [name, original] of Object.entries(themes.value)) {
|
@@ -3028,28 +3043,49 @@ function createTheme(options) {
|
|
3028
3043
|
const current = toRef(() => computedThemes.value[name.value]);
|
3029
3044
|
const styles = computed(() => {
|
3030
3045
|
const lines = [];
|
3046
|
+
const important = parsedOptions.unimportant ? '' : ' !important';
|
3047
|
+
const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
|
3031
3048
|
if (current.value?.dark) {
|
3032
3049
|
createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
|
3033
3050
|
}
|
3034
|
-
createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
|
3051
|
+
createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
|
3035
3052
|
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
|
3036
|
-
createCssClass(lines,
|
3037
|
-
}
|
3038
|
-
|
3039
|
-
|
3040
|
-
|
3041
|
-
|
3042
|
-
|
3043
|
-
|
3044
|
-
|
3045
|
-
|
3046
|
-
|
3047
|
-
|
3053
|
+
createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
|
3054
|
+
}
|
3055
|
+
if (parsedOptions.utilities) {
|
3056
|
+
const bgLines = [];
|
3057
|
+
const fgLines = [];
|
3058
|
+
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
|
3059
|
+
for (const key of colors) {
|
3060
|
+
if (key.startsWith('on-')) {
|
3061
|
+
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
3062
|
+
} else {
|
3063
|
+
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);
|
3064
|
+
createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
3065
|
+
createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
|
3066
|
+
}
|
3048
3067
|
}
|
3068
|
+
lines.push(...bgLines, ...fgLines);
|
3049
3069
|
}
|
3050
|
-
lines.push(...bgLines, ...fgLines);
|
3051
3070
|
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
|
3052
3071
|
});
|
3072
|
+
const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
|
3073
|
+
const themeNames = toRef(() => Object.keys(computedThemes.value));
|
3074
|
+
if (SUPPORTS_MATCH_MEDIA) {
|
3075
|
+
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
3076
|
+
function updateSystemName() {
|
3077
|
+
systemName.value = media.matches ? 'dark' : 'light';
|
3078
|
+
}
|
3079
|
+
updateSystemName();
|
3080
|
+
media.addEventListener('change', updateSystemName, {
|
3081
|
+
passive: true
|
3082
|
+
});
|
3083
|
+
if (getCurrentScope()) {
|
3084
|
+
onScopeDispose(() => {
|
3085
|
+
media.removeEventListener('change', updateSystemName);
|
3086
|
+
});
|
3087
|
+
}
|
3088
|
+
}
|
3053
3089
|
function install(app) {
|
3054
3090
|
if (parsedOptions.isDisabled) return;
|
3055
3091
|
const head = app._context.provides.usehead;
|
@@ -3087,22 +3123,55 @@ function createTheme(options) {
|
|
3087
3123
|
updateStyles();
|
3088
3124
|
}
|
3089
3125
|
function updateStyles() {
|
3090
|
-
upsertStyles(
|
3126
|
+
upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
|
3091
3127
|
}
|
3092
3128
|
}
|
3093
3129
|
}
|
3094
|
-
|
3130
|
+
function change(themeName) {
|
3131
|
+
if (!themeNames.value.includes(themeName)) {
|
3132
|
+
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
3133
|
+
return;
|
3134
|
+
}
|
3135
|
+
name.value = themeName;
|
3136
|
+
}
|
3137
|
+
function cycle() {
|
3138
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
|
3139
|
+
const currentIndex = themeArray.indexOf(name.value);
|
3140
|
+
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
|
3141
|
+
change(themeArray[nextIndex]);
|
3142
|
+
}
|
3143
|
+
function toggle() {
|
3144
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
|
3145
|
+
cycle(themeArray);
|
3146
|
+
}
|
3147
|
+
const globalName = new Proxy(name, {
|
3148
|
+
get(target, prop) {
|
3149
|
+
return target[prop];
|
3150
|
+
},
|
3151
|
+
set(target, prop, val) {
|
3152
|
+
if (prop === 'value') {
|
3153
|
+
deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
|
3154
|
+
}
|
3155
|
+
// @ts-expect-error
|
3156
|
+
target[prop] = val;
|
3157
|
+
return true;
|
3158
|
+
}
|
3159
|
+
});
|
3095
3160
|
return {
|
3096
3161
|
install,
|
3162
|
+
change,
|
3163
|
+
cycle,
|
3164
|
+
toggle,
|
3097
3165
|
isDisabled: parsedOptions.isDisabled,
|
3098
3166
|
name,
|
3099
3167
|
themes,
|
3100
3168
|
current,
|
3101
3169
|
computedThemes,
|
3170
|
+
prefix: parsedOptions.prefix,
|
3102
3171
|
themeClasses,
|
3103
3172
|
styles,
|
3104
3173
|
global: {
|
3105
|
-
name,
|
3174
|
+
name: globalName,
|
3106
3175
|
current
|
3107
3176
|
}
|
3108
3177
|
};
|
@@ -3113,7 +3182,7 @@ function provideTheme(props) {
|
|
3113
3182
|
if (!theme) throw new Error('Could not find Vuetify theme injection');
|
3114
3183
|
const name = toRef(() => props.theme ?? theme.name.value);
|
3115
3184
|
const current = toRef(() => theme.themes.value[name.value]);
|
3116
|
-
const themeClasses = toRef(() => theme.isDisabled ? undefined :
|
3185
|
+
const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
|
3117
3186
|
const newTheme = {
|
3118
3187
|
...theme,
|
3119
3188
|
name,
|
@@ -4660,9 +4729,15 @@ function useVariant(props) {
|
|
4660
4729
|
};
|
4661
4730
|
}
|
4662
4731
|
|
4732
|
+
// Types
|
4733
|
+
|
4663
4734
|
const makeVBtnGroupProps = propsFactory({
|
4664
4735
|
baseColor: String,
|
4665
4736
|
divided: Boolean,
|
4737
|
+
direction: {
|
4738
|
+
type: String,
|
4739
|
+
default: 'horizontal'
|
4740
|
+
},
|
4666
4741
|
...makeBorderProps(),
|
4667
4742
|
...makeComponentProps(),
|
4668
4743
|
...makeDensityProps(),
|
@@ -4696,7 +4771,7 @@ const VBtnGroup = genericComponent()({
|
|
4696
4771
|
} = useRounded(props);
|
4697
4772
|
provideDefaults({
|
4698
4773
|
VBtn: {
|
4699
|
-
height: 'auto',
|
4774
|
+
height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
|
4700
4775
|
baseColor: toRef(() => props.baseColor),
|
4701
4776
|
color: toRef(() => props.color),
|
4702
4777
|
density: toRef(() => props.density),
|
@@ -4706,7 +4781,7 @@ const VBtnGroup = genericComponent()({
|
|
4706
4781
|
});
|
4707
4782
|
useRender(() => {
|
4708
4783
|
return createVNode(props.tag, {
|
4709
|
-
"class": normalizeClass(['v-btn-group', {
|
4784
|
+
"class": normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {
|
4710
4785
|
'v-btn-group--divided': props.divided
|
4711
4786
|
}, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
|
4712
4787
|
"style": normalizeStyle(props.style)
|
@@ -5829,8 +5904,8 @@ function rippleCancelShow(e) {
|
|
5829
5904
|
window.clearTimeout(element._ripple.showTimer);
|
5830
5905
|
}
|
5831
5906
|
let keyboardRipple = false;
|
5832
|
-
function keyboardRippleShow(e) {
|
5833
|
-
if (!keyboardRipple && (e.keyCode
|
5907
|
+
function keyboardRippleShow(e, keys) {
|
5908
|
+
if (!keyboardRipple && keys.includes(e.keyCode)) {
|
5834
5909
|
keyboardRipple = true;
|
5835
5910
|
rippleShow(e);
|
5836
5911
|
}
|
@@ -5858,9 +5933,12 @@ function updateRipple(el, binding, wasEnabled) {
|
|
5858
5933
|
el._ripple.enabled = enabled;
|
5859
5934
|
el._ripple.centered = modifiers.center;
|
5860
5935
|
el._ripple.circle = modifiers.circle;
|
5861
|
-
|
5862
|
-
|
5936
|
+
const bindingValue = isObject(value) ? value : {};
|
5937
|
+
if (bindingValue.class) {
|
5938
|
+
el._ripple.class = bindingValue.class;
|
5863
5939
|
}
|
5940
|
+
const allowedKeys = bindingValue.keys ?? [keyCodes.enter, keyCodes.space];
|
5941
|
+
el._ripple.keyDownHandler = e => keyboardRippleShow(e, allowedKeys);
|
5864
5942
|
if (enabled && !wasEnabled) {
|
5865
5943
|
if (modifiers.stop) {
|
5866
5944
|
el.addEventListener('touchstart', rippleStop, {
|
@@ -5882,7 +5960,7 @@ function updateRipple(el, binding, wasEnabled) {
|
|
5882
5960
|
el.addEventListener('mousedown', rippleShow);
|
5883
5961
|
el.addEventListener('mouseup', rippleHide);
|
5884
5962
|
el.addEventListener('mouseleave', rippleHide);
|
5885
|
-
el.addEventListener('keydown', keyboardRippleShow);
|
5963
|
+
el.addEventListener('keydown', e => keyboardRippleShow(e, allowedKeys));
|
5886
5964
|
el.addEventListener('keyup', keyboardRippleHide);
|
5887
5965
|
el.addEventListener('blur', focusRippleHide);
|
5888
5966
|
|
@@ -5902,7 +5980,9 @@ function removeListeners(el) {
|
|
5902
5980
|
el.removeEventListener('touchcancel', rippleHide);
|
5903
5981
|
el.removeEventListener('mouseup', rippleHide);
|
5904
5982
|
el.removeEventListener('mouseleave', rippleHide);
|
5905
|
-
el.
|
5983
|
+
if (el._ripple?.keyDownHandler) {
|
5984
|
+
el.removeEventListener('keydown', el._ripple.keyDownHandler);
|
5985
|
+
}
|
5906
5986
|
el.removeEventListener('keyup', keyboardRippleHide);
|
5907
5987
|
el.removeEventListener('dragstart', rippleHide);
|
5908
5988
|
el.removeEventListener('blur', focusRippleHide);
|
@@ -5911,8 +5991,8 @@ function mounted$4(el, binding) {
|
|
5911
5991
|
updateRipple(el, binding, false);
|
5912
5992
|
}
|
5913
5993
|
function unmounted$4(el) {
|
5914
|
-
delete el._ripple;
|
5915
5994
|
removeListeners(el);
|
5995
|
+
delete el._ripple;
|
5916
5996
|
}
|
5917
5997
|
function updated$1(el, binding) {
|
5918
5998
|
if (binding.value === binding.oldValue) {
|
@@ -6185,6 +6265,31 @@ const VAppBarTitle = genericComponent()({
|
|
6185
6265
|
// Utilities
|
6186
6266
|
const VAlertTitle = createSimpleFunctional('v-alert-title');
|
6187
6267
|
|
6268
|
+
// Utilities
|
6269
|
+
|
6270
|
+
// Types
|
6271
|
+
|
6272
|
+
// Types
|
6273
|
+
|
6274
|
+
// Composables
|
6275
|
+
const makeIconSizeProps = propsFactory({
|
6276
|
+
iconSize: [Number, String],
|
6277
|
+
iconSizes: {
|
6278
|
+
type: Array,
|
6279
|
+
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
6280
|
+
}
|
6281
|
+
}, 'iconSize');
|
6282
|
+
function useIconSizes(props, fallback) {
|
6283
|
+
const iconSize = computed(() => {
|
6284
|
+
const iconSizeMap = new Map(props.iconSizes);
|
6285
|
+
const _iconSize = props.iconSize ?? fallback() ?? 'default';
|
6286
|
+
return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
|
6287
|
+
});
|
6288
|
+
return {
|
6289
|
+
iconSize
|
6290
|
+
};
|
6291
|
+
}
|
6292
|
+
|
6188
6293
|
// Types
|
6189
6294
|
|
6190
6295
|
const allowedTypes = ['success', 'info', 'warning', 'error'];
|
@@ -6224,6 +6329,7 @@ const makeVAlertProps = propsFactory({
|
|
6224
6329
|
...makeDensityProps(),
|
6225
6330
|
...makeDimensionProps(),
|
6226
6331
|
...makeElevationProps(),
|
6332
|
+
...makeIconSizeProps(),
|
6227
6333
|
...makeLocationProps(),
|
6228
6334
|
...makePositionProps(),
|
6229
6335
|
...makeRoundedProps(),
|
@@ -6251,6 +6357,9 @@ const VAlert = genericComponent()({
|
|
6251
6357
|
if (!props.type) return props.icon;
|
6252
6358
|
return props.icon ?? `$${props.type}`;
|
6253
6359
|
});
|
6360
|
+
const {
|
6361
|
+
iconSize
|
6362
|
+
} = useIconSizes(props, () => props.prominent ? 44 : 28);
|
6254
6363
|
const {
|
6255
6364
|
themeClasses
|
6256
6365
|
} = provideTheme(props);
|
@@ -6298,6 +6407,11 @@ const VAlert = genericComponent()({
|
|
6298
6407
|
const hasPrepend = !!(slots.prepend || icon.value);
|
6299
6408
|
const hasTitle = !!(slots.title || props.title);
|
6300
6409
|
const hasClose = !!(slots.close || props.closable);
|
6410
|
+
const iconProps = {
|
6411
|
+
density: props.density,
|
6412
|
+
icon: icon.value,
|
6413
|
+
size: iconSize.value
|
6414
|
+
};
|
6301
6415
|
return isActive.value && createVNode(props.tag, {
|
6302
6416
|
"class": normalizeClass(['v-alert', props.border && {
|
6303
6417
|
'v-alert--border': !!props.border,
|
@@ -6315,19 +6429,14 @@ const VAlert = genericComponent()({
|
|
6315
6429
|
}, null), hasPrepend && createElementVNode("div", {
|
6316
6430
|
"key": "prepend",
|
6317
6431
|
"class": "v-alert__prepend"
|
6318
|
-
}, [!slots.prepend ? createVNode(VIcon, {
|
6319
|
-
"key": "prepend-icon"
|
6320
|
-
|
6321
|
-
"icon": icon.value,
|
6322
|
-
"size": props.prominent ? 44 : 28
|
6323
|
-
}, null) : createVNode(VDefaultsProvider, {
|
6432
|
+
}, [!slots.prepend ? createVNode(VIcon, mergeProps({
|
6433
|
+
"key": "prepend-icon"
|
6434
|
+
}, iconProps), null) : createVNode(VDefaultsProvider, {
|
6324
6435
|
"key": "prepend-defaults",
|
6325
6436
|
"disabled": !icon.value,
|
6326
6437
|
"defaults": {
|
6327
6438
|
VIcon: {
|
6328
|
-
|
6329
|
-
icon: icon.value,
|
6330
|
-
size: props.prominent ? 44 : 28
|
6439
|
+
...iconProps
|
6331
6440
|
}
|
6332
6441
|
}
|
6333
6442
|
}, slots.prepend)]), createElementVNode("div", {
|
@@ -7852,6 +7961,7 @@ function getOffsetPosition(isHorizontal, element) {
|
|
7852
7961
|
const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
|
7853
7962
|
const makeVSlideGroupProps = propsFactory({
|
7854
7963
|
centerActive: Boolean,
|
7964
|
+
contentClass: null,
|
7855
7965
|
direction: {
|
7856
7966
|
type: String,
|
7857
7967
|
default: 'horizontal'
|
@@ -8164,7 +8274,7 @@ const VSlideGroup = genericComponent()({
|
|
8164
8274
|
})]), createElementVNode("div", {
|
8165
8275
|
"key": "container",
|
8166
8276
|
"ref": containerRef,
|
8167
|
-
"class":
|
8277
|
+
"class": normalizeClass(['v-slide-group__container', props.contentClass]),
|
8168
8278
|
"onScroll": onScroll
|
8169
8279
|
}, [createElementVNode("div", {
|
8170
8280
|
"ref": contentRef,
|
@@ -8526,16 +8636,85 @@ const VChip = genericComponent()({
|
|
8526
8636
|
}
|
8527
8637
|
});
|
8528
8638
|
|
8639
|
+
const makeVDividerProps = propsFactory({
|
8640
|
+
color: String,
|
8641
|
+
inset: Boolean,
|
8642
|
+
length: [Number, String],
|
8643
|
+
opacity: [Number, String],
|
8644
|
+
thickness: [Number, String],
|
8645
|
+
vertical: Boolean,
|
8646
|
+
...makeComponentProps(),
|
8647
|
+
...makeThemeProps()
|
8648
|
+
}, 'VDivider');
|
8649
|
+
const VDivider = genericComponent()({
|
8650
|
+
name: 'VDivider',
|
8651
|
+
props: makeVDividerProps(),
|
8652
|
+
setup(props, _ref) {
|
8653
|
+
let {
|
8654
|
+
attrs,
|
8655
|
+
slots
|
8656
|
+
} = _ref;
|
8657
|
+
const {
|
8658
|
+
themeClasses
|
8659
|
+
} = provideTheme(props);
|
8660
|
+
const {
|
8661
|
+
textColorClasses,
|
8662
|
+
textColorStyles
|
8663
|
+
} = useTextColor(() => props.color);
|
8664
|
+
const dividerStyles = computed(() => {
|
8665
|
+
const styles = {};
|
8666
|
+
if (props.length) {
|
8667
|
+
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
8668
|
+
}
|
8669
|
+
if (props.thickness) {
|
8670
|
+
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
8671
|
+
}
|
8672
|
+
return styles;
|
8673
|
+
});
|
8674
|
+
useRender(() => {
|
8675
|
+
const divider = createElementVNode("hr", {
|
8676
|
+
"class": normalizeClass([{
|
8677
|
+
'v-divider': true,
|
8678
|
+
'v-divider--inset': props.inset,
|
8679
|
+
'v-divider--vertical': props.vertical
|
8680
|
+
}, themeClasses.value, textColorClasses.value, props.class]),
|
8681
|
+
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
8682
|
+
'--v-border-opacity': props.opacity
|
8683
|
+
}, props.style]),
|
8684
|
+
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
8685
|
+
"role": `${attrs.role || 'separator'}`
|
8686
|
+
}, null);
|
8687
|
+
if (!slots.default) return divider;
|
8688
|
+
return createElementVNode("div", {
|
8689
|
+
"class": normalizeClass(['v-divider__wrapper', {
|
8690
|
+
'v-divider__wrapper--vertical': props.vertical,
|
8691
|
+
'v-divider__wrapper--inset': props.inset
|
8692
|
+
}])
|
8693
|
+
}, [divider, createElementVNode("div", {
|
8694
|
+
"class": "v-divider__content"
|
8695
|
+
}, [slots.default()]), divider]);
|
8696
|
+
});
|
8697
|
+
return {};
|
8698
|
+
}
|
8699
|
+
});
|
8700
|
+
|
8529
8701
|
// Utilities
|
8530
8702
|
|
8531
8703
|
// List
|
8532
8704
|
const ListKey = Symbol.for('vuetify:list');
|
8533
8705
|
function createList() {
|
8706
|
+
let {
|
8707
|
+
filterable
|
8708
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
8709
|
+
filterable: false
|
8710
|
+
};
|
8534
8711
|
const parent = inject$1(ListKey, {
|
8712
|
+
filterable: false,
|
8535
8713
|
hasPrepend: shallowRef(false),
|
8536
8714
|
updateHasPrepend: () => null
|
8537
8715
|
});
|
8538
8716
|
const data = {
|
8717
|
+
filterable: parent.filterable || filterable,
|
8539
8718
|
hasPrepend: shallowRef(false),
|
8540
8719
|
updateHasPrepend: value => {
|
8541
8720
|
if (value) data.hasPrepend.value = value;
|
@@ -9487,6 +9666,9 @@ const VListItem = genericComponent()({
|
|
9487
9666
|
roundedClasses
|
9488
9667
|
} = useRounded(roundedProps);
|
9489
9668
|
const lineClasses = toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);
|
9669
|
+
const rippleOptions = toRef(() => props.ripple !== undefined && !!props.ripple && list?.filterable ? {
|
9670
|
+
keys: [keyCodes.enter]
|
9671
|
+
} : props.ripple);
|
9490
9672
|
const slotProps = computed(() => ({
|
9491
9673
|
isActive: isActive.value,
|
9492
9674
|
select,
|
@@ -9511,8 +9693,9 @@ const VListItem = genericComponent()({
|
|
9511
9693
|
function onKeyDown(e) {
|
9512
9694
|
const target = e.target;
|
9513
9695
|
if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
|
9514
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
9696
|
+
if (e.key === 'Enter' || e.key === ' ' && !list?.filterable) {
|
9515
9697
|
e.preventDefault();
|
9698
|
+
e.stopPropagation();
|
9516
9699
|
e.target.dispatchEvent(new MouseEvent('click', e));
|
9517
9700
|
}
|
9518
9701
|
}
|
@@ -9622,7 +9805,7 @@ const VListItem = genericComponent()({
|
|
9622
9805
|
}), createElementVNode("div", {
|
9623
9806
|
"class": "v-list-item__spacer"
|
9624
9807
|
}, null)])]
|
9625
|
-
}), [[Ripple, isClickable.value &&
|
9808
|
+
}), [[Ripple, isClickable.value && rippleOptions.value]]);
|
9626
9809
|
});
|
9627
9810
|
return {
|
9628
9811
|
activate,
|
@@ -9677,68 +9860,6 @@ const VListSubheader = genericComponent()({
|
|
9677
9860
|
}
|
9678
9861
|
});
|
9679
9862
|
|
9680
|
-
const makeVDividerProps = propsFactory({
|
9681
|
-
color: String,
|
9682
|
-
inset: Boolean,
|
9683
|
-
length: [Number, String],
|
9684
|
-
opacity: [Number, String],
|
9685
|
-
thickness: [Number, String],
|
9686
|
-
vertical: Boolean,
|
9687
|
-
...makeComponentProps(),
|
9688
|
-
...makeThemeProps()
|
9689
|
-
}, 'VDivider');
|
9690
|
-
const VDivider = genericComponent()({
|
9691
|
-
name: 'VDivider',
|
9692
|
-
props: makeVDividerProps(),
|
9693
|
-
setup(props, _ref) {
|
9694
|
-
let {
|
9695
|
-
attrs,
|
9696
|
-
slots
|
9697
|
-
} = _ref;
|
9698
|
-
const {
|
9699
|
-
themeClasses
|
9700
|
-
} = provideTheme(props);
|
9701
|
-
const {
|
9702
|
-
textColorClasses,
|
9703
|
-
textColorStyles
|
9704
|
-
} = useTextColor(() => props.color);
|
9705
|
-
const dividerStyles = computed(() => {
|
9706
|
-
const styles = {};
|
9707
|
-
if (props.length) {
|
9708
|
-
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
9709
|
-
}
|
9710
|
-
if (props.thickness) {
|
9711
|
-
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
9712
|
-
}
|
9713
|
-
return styles;
|
9714
|
-
});
|
9715
|
-
useRender(() => {
|
9716
|
-
const divider = createElementVNode("hr", {
|
9717
|
-
"class": normalizeClass([{
|
9718
|
-
'v-divider': true,
|
9719
|
-
'v-divider--inset': props.inset,
|
9720
|
-
'v-divider--vertical': props.vertical
|
9721
|
-
}, themeClasses.value, textColorClasses.value, props.class]),
|
9722
|
-
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
9723
|
-
'--v-border-opacity': props.opacity
|
9724
|
-
}, props.style]),
|
9725
|
-
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
9726
|
-
"role": `${attrs.role || 'separator'}`
|
9727
|
-
}, null);
|
9728
|
-
if (!slots.default) return divider;
|
9729
|
-
return createElementVNode("div", {
|
9730
|
-
"class": normalizeClass(['v-divider__wrapper', {
|
9731
|
-
'v-divider__wrapper--vertical': props.vertical,
|
9732
|
-
'v-divider__wrapper--inset': props.inset
|
9733
|
-
}])
|
9734
|
-
}, [divider, createElementVNode("div", {
|
9735
|
-
"class": "v-divider__content"
|
9736
|
-
}, [slots.default()]), divider]);
|
9737
|
-
});
|
9738
|
-
return {};
|
9739
|
-
}
|
9740
|
-
});
|
9741
|
-
|
9742
9863
|
// Types
|
9743
9864
|
|
9744
9865
|
const makeVListChildrenProps = propsFactory({
|
@@ -10007,6 +10128,7 @@ const makeVListProps = propsFactory({
|
|
10007
10128
|
activeClass: String,
|
10008
10129
|
bgColor: String,
|
10009
10130
|
disabled: Boolean,
|
10131
|
+
filterable: Boolean,
|
10010
10132
|
expandIcon: IconValue,
|
10011
10133
|
collapseIcon: IconValue,
|
10012
10134
|
lines: {
|
@@ -10090,7 +10212,9 @@ const VList = genericComponent()({
|
|
10090
10212
|
const activeColor = toRef(() => props.activeColor);
|
10091
10213
|
const baseColor = toRef(() => props.baseColor);
|
10092
10214
|
const color = toRef(() => props.color);
|
10093
|
-
createList(
|
10215
|
+
createList({
|
10216
|
+
filterable: props.filterable
|
10217
|
+
});
|
10094
10218
|
provideDefaults({
|
10095
10219
|
VListGroup: {
|
10096
10220
|
activeColor,
|
@@ -12666,7 +12790,12 @@ function useVirtual(props, items) {
|
|
12666
12790
|
}
|
12667
12791
|
function calculateOffset(index) {
|
12668
12792
|
index = clamp(index, 0, items.value.length - 1);
|
12669
|
-
|
12793
|
+
const whole = Math.floor(index);
|
12794
|
+
const fraction = index % 1;
|
12795
|
+
const next = whole + 1;
|
12796
|
+
const wholeOffset = offsets[whole] || 0;
|
12797
|
+
const nextOffset = offsets[next] || wholeOffset;
|
12798
|
+
return wholeOffset + (nextOffset - wholeOffset) * fraction;
|
12670
12799
|
}
|
12671
12800
|
function calculateIndex(scrollTop) {
|
12672
12801
|
return binaryClosest(offsets, scrollTop);
|
@@ -13020,6 +13149,7 @@ const makeSelectProps = propsFactory({
|
|
13020
13149
|
},
|
13021
13150
|
openOnClear: Boolean,
|
13022
13151
|
itemColor: String,
|
13152
|
+
noAutoScroll: Boolean,
|
13023
13153
|
...makeItemsProps({
|
13024
13154
|
itemChildren: false
|
13025
13155
|
})
|
@@ -13234,7 +13364,7 @@ const VSelect = genericComponent()({
|
|
13234
13364
|
watch(menu, () => {
|
13235
13365
|
if (!props.hideSelected && menu.value && model.value.length) {
|
13236
13366
|
const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
|
13237
|
-
IN_BROWSER && window.requestAnimationFrame(() => {
|
13367
|
+
IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {
|
13238
13368
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
13239
13369
|
});
|
13240
13370
|
}
|
@@ -13326,6 +13456,22 @@ const VSelect = genericComponent()({
|
|
13326
13456
|
key: item.value,
|
13327
13457
|
onClick: () => select(item, null)
|
13328
13458
|
});
|
13459
|
+
if (item.raw.type === 'divider') {
|
13460
|
+
return slots.divider?.({
|
13461
|
+
props: item.raw,
|
13462
|
+
index
|
13463
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13464
|
+
"key": `divider-${index}`
|
13465
|
+
}), null);
|
13466
|
+
}
|
13467
|
+
if (item.raw.type === 'subheader') {
|
13468
|
+
return slots.subheader?.({
|
13469
|
+
props: item.raw,
|
13470
|
+
index
|
13471
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13472
|
+
"key": `subheader-${index}`
|
13473
|
+
}), null);
|
13474
|
+
}
|
13329
13475
|
return slots.item?.({
|
13330
13476
|
item,
|
13331
13477
|
index,
|
@@ -13486,6 +13632,9 @@ function filterItems(items, query, options) {
|
|
13486
13632
|
let match = -1;
|
13487
13633
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
13488
13634
|
if (typeof item === 'object') {
|
13635
|
+
if (['divider', 'subheader'].includes(item.raw?.type)) {
|
13636
|
+
continue;
|
13637
|
+
}
|
13489
13638
|
const filterKeys = keys || Object.keys(transformed);
|
13490
13639
|
for (const key of filterKeys) {
|
13491
13640
|
const value = getPropertyFromItem(transformed, key);
|
@@ -13688,7 +13837,7 @@ const VAutocomplete = genericComponent()({
|
|
13688
13837
|
menu.value = !menu.value;
|
13689
13838
|
}
|
13690
13839
|
function onListKeydown(e) {
|
13691
|
-
if (e.key
|
13840
|
+
if (checkPrintable(e) || e.key === 'Backspace') {
|
13692
13841
|
vTextFieldRef.value?.focus();
|
13693
13842
|
}
|
13694
13843
|
}
|
@@ -13893,6 +14042,7 @@ const VAutocomplete = genericComponent()({
|
|
13893
14042
|
}, props.menuProps), {
|
13894
14043
|
default: () => [hasList && createVNode(VList, mergeProps({
|
13895
14044
|
"ref": listRef,
|
14045
|
+
"filterable": true,
|
13896
14046
|
"selected": selectedValues.value,
|
13897
14047
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
13898
14048
|
"onMousedown": e => e.preventDefault(),
|
@@ -13924,6 +14074,22 @@ const VAutocomplete = genericComponent()({
|
|
13924
14074
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
13925
14075
|
onClick: () => select(item, null)
|
13926
14076
|
});
|
14077
|
+
if (item.raw.type === 'divider') {
|
14078
|
+
return slots.divider?.({
|
14079
|
+
props: item.raw,
|
14080
|
+
index
|
14081
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
14082
|
+
"key": `divider-${index}`
|
14083
|
+
}), null);
|
14084
|
+
}
|
14085
|
+
if (item.raw.type === 'subheader') {
|
14086
|
+
return slots.subheader?.({
|
14087
|
+
props: item.raw,
|
14088
|
+
index
|
14089
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
14090
|
+
"key": `subheader-${index}`
|
14091
|
+
}), null);
|
14092
|
+
}
|
13927
14093
|
return slots.item?.({
|
13928
14094
|
item,
|
13929
14095
|
index,
|
@@ -17519,13 +17685,13 @@ function date(value) {
|
|
17519
17685
|
return null;
|
17520
17686
|
}
|
17521
17687
|
const sundayJanuarySecond2000 = new Date(2000, 0, 2);
|
17522
|
-
function getWeekdays(locale, firstDayOfWeek) {
|
17688
|
+
function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
|
17523
17689
|
const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
|
17524
17690
|
return createRange(7).map(i => {
|
17525
17691
|
const weekday = new Date(sundayJanuarySecond2000);
|
17526
17692
|
weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
|
17527
17693
|
return new Intl.DateTimeFormat(locale, {
|
17528
|
-
weekday: 'narrow'
|
17694
|
+
weekday: weekdayFormat ?? 'narrow'
|
17529
17695
|
}).format(weekday);
|
17530
17696
|
});
|
17531
17697
|
}
|
@@ -17989,9 +18155,9 @@ class VuetifyDateAdapter {
|
|
17989
18155
|
getDiff(date, comparing, unit) {
|
17990
18156
|
return getDiff(date, comparing, unit);
|
17991
18157
|
}
|
17992
|
-
getWeekdays(firstDayOfWeek) {
|
18158
|
+
getWeekdays(firstDayOfWeek, weekdayFormat) {
|
17993
18159
|
const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
|
17994
|
-
return getWeekdays(this.locale, firstDay);
|
18160
|
+
return getWeekdays(this.locale, firstDay, weekdayFormat);
|
17995
18161
|
}
|
17996
18162
|
getYear(date) {
|
17997
18163
|
return getYear(date);
|
@@ -18334,6 +18500,7 @@ const VCombobox = genericComponent()({
|
|
18334
18500
|
_search.value = val ?? '';
|
18335
18501
|
if (!props.multiple && !hasSelectionSlot.value) {
|
18336
18502
|
model.value = [transformItem$3(props, val)];
|
18503
|
+
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
18337
18504
|
}
|
18338
18505
|
if (val && props.multiple && props.delimiters?.length) {
|
18339
18506
|
const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
|
@@ -18414,7 +18581,7 @@ const VCombobox = genericComponent()({
|
|
18414
18581
|
menu.value = !menu.value;
|
18415
18582
|
}
|
18416
18583
|
function onListKeydown(e) {
|
18417
|
-
if (e.key
|
18584
|
+
if (checkPrintable(e) || e.key === 'Backspace') {
|
18418
18585
|
vTextFieldRef.value?.focus();
|
18419
18586
|
}
|
18420
18587
|
}
|
@@ -18619,6 +18786,7 @@ const VCombobox = genericComponent()({
|
|
18619
18786
|
}, props.menuProps), {
|
18620
18787
|
default: () => [hasList && createVNode(VList, mergeProps({
|
18621
18788
|
"ref": listRef,
|
18789
|
+
"filterable": true,
|
18622
18790
|
"selected": selectedValues.value,
|
18623
18791
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
18624
18792
|
"onMousedown": e => e.preventDefault(),
|
@@ -18650,6 +18818,22 @@ const VCombobox = genericComponent()({
|
|
18650
18818
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
18651
18819
|
onClick: () => select(item, null)
|
18652
18820
|
});
|
18821
|
+
if (item.raw.type === 'divider') {
|
18822
|
+
return slots.divider?.({
|
18823
|
+
props: item.raw,
|
18824
|
+
index
|
18825
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
18826
|
+
"key": `divider-${index}`
|
18827
|
+
}), null);
|
18828
|
+
}
|
18829
|
+
if (item.raw.type === 'subheader') {
|
18830
|
+
return slots.subheader?.({
|
18831
|
+
props: item.raw,
|
18832
|
+
index
|
18833
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
18834
|
+
"key": `subheader-${index}`
|
18835
|
+
}), null);
|
18836
|
+
}
|
18653
18837
|
return slots.item?.({
|
18654
18838
|
item,
|
18655
18839
|
index,
|
@@ -20529,6 +20713,7 @@ const makeVDataTableHeadersProps = propsFactory({
|
|
20529
20713
|
color: String,
|
20530
20714
|
disableSort: Boolean,
|
20531
20715
|
fixedHeader: Boolean,
|
20716
|
+
lastFixed: Boolean,
|
20532
20717
|
multiSort: Boolean,
|
20533
20718
|
sortAscIcon: {
|
20534
20719
|
type: IconValue,
|
@@ -20575,10 +20760,11 @@ const VDataTableHeaders = genericComponent()({
|
|
20575
20760
|
loaderClasses
|
20576
20761
|
} = useLoader(props);
|
20577
20762
|
function getFixedStyles(column, y) {
|
20578
|
-
if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
|
20763
|
+
if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
|
20579
20764
|
return {
|
20580
20765
|
position: 'sticky',
|
20581
|
-
left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
|
20766
|
+
left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
|
20767
|
+
right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
|
20582
20768
|
top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
|
20583
20769
|
};
|
20584
20770
|
}
|
@@ -22293,7 +22479,8 @@ const makeCalendarProps = propsFactory({
|
|
22293
22479
|
firstDayOfWeek: {
|
22294
22480
|
type: [Number, String],
|
22295
22481
|
default: undefined
|
22296
|
-
}
|
22482
|
+
},
|
22483
|
+
weekdayFormat: String
|
22297
22484
|
}, 'calendar');
|
22298
22485
|
function useCalendar(props) {
|
22299
22486
|
const adapter = useDate();
|
@@ -22541,7 +22728,7 @@ const VDatePickerMonth = genericComponent()({
|
|
22541
22728
|
"ref": daysRef,
|
22542
22729
|
"key": daysInMonth.value[0].date?.toString(),
|
22543
22730
|
"class": "v-date-picker-month__days"
|
22544
|
-
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
|
22731
|
+
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => createElementVNode("div", {
|
22545
22732
|
"class": ['v-date-picker-month__day', 'v-date-picker-month__weekday']
|
22546
22733
|
}, [weekDay])), daysInMonth.value.map((item, i) => {
|
22547
22734
|
const slotProps = {
|
@@ -25072,6 +25259,10 @@ const makeVNumberInputProps = propsFactory({
|
|
25072
25259
|
type: Number,
|
25073
25260
|
default: 0
|
25074
25261
|
},
|
25262
|
+
minFractionDigits: {
|
25263
|
+
type: Number,
|
25264
|
+
default: null
|
25265
|
+
},
|
25075
25266
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
25076
25267
|
}, 'VNumberInput');
|
25077
25268
|
const VNumberInput = genericComponent()({
|
@@ -25102,9 +25293,19 @@ const VNumberInput = genericComponent()({
|
|
25102
25293
|
} = useFocus(props);
|
25103
25294
|
function correctPrecision(val) {
|
25104
25295
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
25105
|
-
|
25106
|
-
|
25107
|
-
|
25296
|
+
if (precision == null) {
|
25297
|
+
return String(val);
|
25298
|
+
}
|
25299
|
+
let fixed = val.toFixed(precision);
|
25300
|
+
if (isFocused.value) {
|
25301
|
+
return Number(fixed).toString(); // trim zeros
|
25302
|
+
}
|
25303
|
+
if ((props.minFractionDigits ?? precision) < precision) {
|
25304
|
+
const trimLimit = precision - props.minFractionDigits;
|
25305
|
+
const [baseDigits, fractionDigits] = fixed.split('.');
|
25306
|
+
fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
|
25307
|
+
}
|
25308
|
+
return fixed;
|
25108
25309
|
}
|
25109
25310
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
25110
25311
|
const _inputText = shallowRef(null);
|
@@ -25163,6 +25364,7 @@ const VNumberInput = genericComponent()({
|
|
25163
25364
|
}
|
25164
25365
|
};
|
25165
25366
|
watch(() => props.precision, () => formatInputValue());
|
25367
|
+
watch(() => props.minFractionDigits, () => formatInputValue());
|
25166
25368
|
onMounted(() => {
|
25167
25369
|
clampModel();
|
25168
25370
|
});
|
@@ -25272,7 +25474,7 @@ const VNumberInput = genericComponent()({
|
|
25272
25474
|
inputText.value = null;
|
25273
25475
|
return;
|
25274
25476
|
}
|
25275
|
-
inputText.value =
|
25477
|
+
inputText.value = correctPrecision(model.value);
|
25276
25478
|
}
|
25277
25479
|
function trimDecimalZeros() {
|
25278
25480
|
if (controlsDisabled.value) return;
|
@@ -25532,9 +25734,10 @@ const VOtpInput = genericComponent()({
|
|
25532
25734
|
e.preventDefault();
|
25533
25735
|
e.stopPropagation();
|
25534
25736
|
const clipboardText = e?.clipboardData?.getData('Text').slice(0, length.value) ?? '';
|
25737
|
+
const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
|
25535
25738
|
if (isValidNumber(clipboardText)) return;
|
25536
25739
|
model.value = clipboardText.split('');
|
25537
|
-
inputRef.value?.[
|
25740
|
+
inputRef.value?.[finalIndex].focus();
|
25538
25741
|
}
|
25539
25742
|
function reset() {
|
25540
25743
|
model.value = [];
|
@@ -29316,7 +29519,7 @@ function createVuetify$1() {
|
|
29316
29519
|
};
|
29317
29520
|
});
|
29318
29521
|
}
|
29319
|
-
const version$1 = "3.8.
|
29522
|
+
const version$1 = "3.8.7-dev.2025-05-30";
|
29320
29523
|
createVuetify$1.version = version$1;
|
29321
29524
|
|
29322
29525
|
// Vue's inject() can only be used in setup
|
@@ -29341,7 +29544,7 @@ const createVuetify = function () {
|
|
29341
29544
|
...options
|
29342
29545
|
});
|
29343
29546
|
};
|
29344
|
-
const version = "3.8.
|
29547
|
+
const version = "3.8.7-dev.2025-05-30";
|
29345
29548
|
createVuetify.version = version;
|
29346
29549
|
|
29347
29550
|
export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };
|