@vuetify/nightly 3.8.8-master.2025-06-10 → 3.8.9-dev.2025-06-11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -19
- package/dist/json/attributes.json +1662 -1538
- package/dist/json/importMap-labs.json +36 -36
- package/dist/json/importMap.json +164 -164
- package/dist/json/tags.json +32 -1
- package/dist/json/web-types.json +3166 -2780
- package/dist/vuetify-labs.cjs +389 -146
- package/dist/vuetify-labs.css +3499 -3465
- package/dist/vuetify-labs.d.ts +2602 -2062
- package/dist/vuetify-labs.esm.js +390 -147
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +389 -146
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +383 -135
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +5561 -5527
- package/dist/vuetify.d.ts +1598 -1098
- package/dist/vuetify.esm.js +384 -136
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +383 -135
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1219 -1203
- 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/VAppBar.d.ts +15 -3
- 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/VBadge/VBadge.d.ts +60 -0
- package/lib/components/VBadge/VBadge.js +7 -2
- package/lib/components/VBadge/VBadge.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 +60 -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 +42 -0
- package/lib/components/VDataTable/VDataTableVirtual.d.ts +42 -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/VInfiniteScroll/VInfiniteScroll.d.ts +9 -3
- package/lib/components/VInfiniteScroll/VInfiniteScroll.js +29 -0
- package/lib/components/VInfiniteScroll/VInfiniteScroll.js.map +1 -1
- 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/VTable/VTable.css +6 -0
- package/lib/components/VTable/VTable.d.ts +55 -24
- package/lib/components/VTable/VTable.js +9 -2
- package/lib/components/VTable/VTable.js.map +1 -1
- package/lib/components/VTable/VTable.sass +14 -0
- package/lib/components/VTable/_variables.scss +1 -0
- 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/components/VToolbar/VToolbar.d.ts +15 -3
- package/lib/components/VToolbar/VToolbar.js +6 -3
- package/lib/components/VToolbar/VToolbar.js.map +1 -1
- 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 +3 -3
- package/lib/composables/date/DateAdapter.js.map +1 -1
- package/lib/composables/date/adapters/string.d.ts +54 -0
- package/lib/composables/date/adapters/string.js +153 -0
- package/lib/composables/date/adapters/string.js.map +1 -0
- 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 +3 -3
- 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 +3 -3
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +84 -69
- 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 +3 -3
- 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.9-dev.2025-06-11
|
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, camelize, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, 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, camelize, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, 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"); }
|
@@ -2831,6 +2832,7 @@ const makeThemeProps = propsFactory({
|
|
2831
2832
|
function genDefaults$1() {
|
2832
2833
|
return {
|
2833
2834
|
defaultTheme: 'light',
|
2835
|
+
prefix: 'v-',
|
2834
2836
|
variations: {
|
2835
2837
|
colors: [],
|
2836
2838
|
lighten: 0,
|
@@ -2912,7 +2914,10 @@ function genDefaults$1() {
|
|
2912
2914
|
}
|
2913
2915
|
}
|
2914
2916
|
},
|
2915
|
-
stylesheetId: 'vuetify-theme-stylesheet'
|
2917
|
+
stylesheetId: 'vuetify-theme-stylesheet',
|
2918
|
+
scoped: false,
|
2919
|
+
unimportant: false,
|
2920
|
+
utilities: true
|
2916
2921
|
};
|
2917
2922
|
}
|
2918
2923
|
function parseThemeOptions() {
|
@@ -2935,21 +2940,21 @@ function parseThemeOptions() {
|
|
2935
2940
|
function createCssClass(lines, selector, content, scope) {
|
2936
2941
|
lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
|
2937
2942
|
}
|
2938
|
-
function genCssVariables(theme) {
|
2943
|
+
function genCssVariables(theme, prefix) {
|
2939
2944
|
const lightOverlay = theme.dark ? 2 : 1;
|
2940
2945
|
const darkOverlay = theme.dark ? 1 : 2;
|
2941
2946
|
const variables = [];
|
2942
2947
|
for (const [key, value] of Object.entries(theme.colors)) {
|
2943
2948
|
const rgb = parseColor(value);
|
2944
|
-
variables.push(
|
2949
|
+
variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
|
2945
2950
|
if (!key.startsWith('on-')) {
|
2946
|
-
variables.push(
|
2951
|
+
variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
|
2947
2952
|
}
|
2948
2953
|
}
|
2949
2954
|
for (const [key, value] of Object.entries(theme.variables)) {
|
2950
2955
|
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
|
2951
2956
|
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
|
2952
|
-
variables.push(
|
2957
|
+
variables.push(`--${prefix}${key}: ${rgb ?? value}`);
|
2953
2958
|
}
|
2954
2959
|
return variables;
|
2955
2960
|
}
|
@@ -2993,7 +2998,8 @@ function getScopedSelector(selector, scope) {
|
|
2993
2998
|
const scopeSelector = `:where(${scope})`;
|
2994
2999
|
return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
|
2995
3000
|
}
|
2996
|
-
function upsertStyles(
|
3001
|
+
function upsertStyles(id, cspNonce, styles) {
|
3002
|
+
const styleEl = getOrCreateStyleElement(id, cspNonce);
|
2997
3003
|
if (!styleEl) return;
|
2998
3004
|
styleEl.innerHTML = styles;
|
2999
3005
|
}
|
@@ -3013,8 +3019,17 @@ function getOrCreateStyleElement(id, cspNonce) {
|
|
3013
3019
|
// Composables
|
3014
3020
|
function createTheme(options) {
|
3015
3021
|
const parsedOptions = parseThemeOptions(options);
|
3016
|
-
const
|
3022
|
+
const _name = shallowRef(parsedOptions.defaultTheme);
|
3017
3023
|
const themes = ref(parsedOptions.themes);
|
3024
|
+
const systemName = shallowRef('light');
|
3025
|
+
const name = computed({
|
3026
|
+
get() {
|
3027
|
+
return _name.value === 'system' ? systemName.value : _name.value;
|
3028
|
+
},
|
3029
|
+
set(val) {
|
3030
|
+
_name.value = val;
|
3031
|
+
}
|
3032
|
+
});
|
3018
3033
|
const computedThemes = computed(() => {
|
3019
3034
|
const acc = {};
|
3020
3035
|
for (const [name, original] of Object.entries(themes.value)) {
|
@@ -3035,28 +3050,49 @@ function createTheme(options) {
|
|
3035
3050
|
const current = toRef(() => computedThemes.value[name.value]);
|
3036
3051
|
const styles = computed(() => {
|
3037
3052
|
const lines = [];
|
3053
|
+
const important = parsedOptions.unimportant ? '' : ' !important';
|
3054
|
+
const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
|
3038
3055
|
if (current.value?.dark) {
|
3039
3056
|
createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
|
3040
3057
|
}
|
3041
|
-
createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
|
3058
|
+
createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
|
3042
3059
|
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
|
3043
|
-
createCssClass(lines,
|
3044
|
-
}
|
3045
|
-
|
3046
|
-
|
3047
|
-
|
3048
|
-
|
3049
|
-
|
3050
|
-
|
3051
|
-
|
3052
|
-
|
3053
|
-
|
3054
|
-
|
3060
|
+
createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
|
3061
|
+
}
|
3062
|
+
if (parsedOptions.utilities) {
|
3063
|
+
const bgLines = [];
|
3064
|
+
const fgLines = [];
|
3065
|
+
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
|
3066
|
+
for (const key of colors) {
|
3067
|
+
if (key.startsWith('on-')) {
|
3068
|
+
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
3069
|
+
} else {
|
3070
|
+
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);
|
3071
|
+
createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
3072
|
+
createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
|
3073
|
+
}
|
3055
3074
|
}
|
3075
|
+
lines.push(...bgLines, ...fgLines);
|
3056
3076
|
}
|
3057
|
-
lines.push(...bgLines, ...fgLines);
|
3058
3077
|
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
|
3059
3078
|
});
|
3079
|
+
const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
|
3080
|
+
const themeNames = toRef(() => Object.keys(computedThemes.value));
|
3081
|
+
if (SUPPORTS_MATCH_MEDIA) {
|
3082
|
+
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
3083
|
+
function updateSystemName() {
|
3084
|
+
systemName.value = media.matches ? 'dark' : 'light';
|
3085
|
+
}
|
3086
|
+
updateSystemName();
|
3087
|
+
media.addEventListener('change', updateSystemName, {
|
3088
|
+
passive: true
|
3089
|
+
});
|
3090
|
+
if (getCurrentScope()) {
|
3091
|
+
onScopeDispose(() => {
|
3092
|
+
media.removeEventListener('change', updateSystemName);
|
3093
|
+
});
|
3094
|
+
}
|
3095
|
+
}
|
3060
3096
|
function install(app) {
|
3061
3097
|
if (parsedOptions.isDisabled) return;
|
3062
3098
|
const head = app._context.provides.usehead;
|
@@ -3094,22 +3130,55 @@ function createTheme(options) {
|
|
3094
3130
|
updateStyles();
|
3095
3131
|
}
|
3096
3132
|
function updateStyles() {
|
3097
|
-
upsertStyles(
|
3133
|
+
upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
|
3098
3134
|
}
|
3099
3135
|
}
|
3100
3136
|
}
|
3101
|
-
|
3137
|
+
function change(themeName) {
|
3138
|
+
if (!themeNames.value.includes(themeName)) {
|
3139
|
+
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
3140
|
+
return;
|
3141
|
+
}
|
3142
|
+
name.value = themeName;
|
3143
|
+
}
|
3144
|
+
function cycle() {
|
3145
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
|
3146
|
+
const currentIndex = themeArray.indexOf(name.value);
|
3147
|
+
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
|
3148
|
+
change(themeArray[nextIndex]);
|
3149
|
+
}
|
3150
|
+
function toggle() {
|
3151
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
|
3152
|
+
cycle(themeArray);
|
3153
|
+
}
|
3154
|
+
const globalName = new Proxy(name, {
|
3155
|
+
get(target, prop) {
|
3156
|
+
return target[prop];
|
3157
|
+
},
|
3158
|
+
set(target, prop, val) {
|
3159
|
+
if (prop === 'value') {
|
3160
|
+
deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
|
3161
|
+
}
|
3162
|
+
// @ts-expect-error
|
3163
|
+
target[prop] = val;
|
3164
|
+
return true;
|
3165
|
+
}
|
3166
|
+
});
|
3102
3167
|
return {
|
3103
3168
|
install,
|
3169
|
+
change,
|
3170
|
+
cycle,
|
3171
|
+
toggle,
|
3104
3172
|
isDisabled: parsedOptions.isDisabled,
|
3105
3173
|
name,
|
3106
3174
|
themes,
|
3107
3175
|
current,
|
3108
3176
|
computedThemes,
|
3177
|
+
prefix: parsedOptions.prefix,
|
3109
3178
|
themeClasses,
|
3110
3179
|
styles,
|
3111
3180
|
global: {
|
3112
|
-
name,
|
3181
|
+
name: globalName,
|
3113
3182
|
current
|
3114
3183
|
}
|
3115
3184
|
};
|
@@ -3120,7 +3189,7 @@ function provideTheme(props) {
|
|
3120
3189
|
if (!theme) throw new Error('Could not find Vuetify theme injection');
|
3121
3190
|
const name = toRef(() => props.theme ?? theme.name.value);
|
3122
3191
|
const current = toRef(() => theme.themes.value[name.value]);
|
3123
|
-
const themeClasses = toRef(() => theme.isDisabled ? undefined :
|
3192
|
+
const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
|
3124
3193
|
const newTheme = {
|
3125
3194
|
...theme,
|
3126
3195
|
name,
|
@@ -4224,7 +4293,10 @@ const makeVToolbarProps = propsFactory({
|
|
4224
4293
|
default: 'default',
|
4225
4294
|
validator: v => allowedDensities$1.includes(v)
|
4226
4295
|
},
|
4227
|
-
extended:
|
4296
|
+
extended: {
|
4297
|
+
type: Boolean,
|
4298
|
+
default: null
|
4299
|
+
},
|
4228
4300
|
extensionHeight: {
|
4229
4301
|
type: [Number, String],
|
4230
4302
|
default: 48
|
@@ -4272,7 +4344,7 @@ const VToolbar = genericComponent()({
|
|
4272
4344
|
const {
|
4273
4345
|
rtlClasses
|
4274
4346
|
} = useRtl();
|
4275
|
-
const isExtended = shallowRef(
|
4347
|
+
const isExtended = shallowRef(props.extended === null ? !!slots.extension?.() : props.extended);
|
4276
4348
|
const contentHeight = computed(() => parseInt(Number(props.height) + (props.density === 'prominent' ? Number(props.height) : 0) - (props.density === 'comfortable' ? 8 : 0) - (props.density === 'compact' ? 16 : 0), 10));
|
4277
4349
|
const extensionHeight = computed(() => isExtended.value ? parseInt(Number(props.extensionHeight) + (props.density === 'prominent' ? Number(props.extensionHeight) : 0) - (props.density === 'comfortable' ? 4 : 0) - (props.density === 'compact' ? 8 : 0), 10) : 0);
|
4278
4350
|
provideDefaults({
|
@@ -4284,7 +4356,7 @@ const VToolbar = genericComponent()({
|
|
4284
4356
|
const hasTitle = !!(props.title || slots.title);
|
4285
4357
|
const hasImage = !!(slots.image || props.image);
|
4286
4358
|
const extension = slots.extension?.();
|
4287
|
-
isExtended.value =
|
4359
|
+
isExtended.value = props.extended === null ? !!extension : props.extended;
|
4288
4360
|
return createVNode(props.tag, {
|
4289
4361
|
"class": normalizeClass(['v-toolbar', {
|
4290
4362
|
'v-toolbar--absolute': props.absolute,
|
@@ -4667,9 +4739,15 @@ function useVariant(props) {
|
|
4667
4739
|
};
|
4668
4740
|
}
|
4669
4741
|
|
4742
|
+
// Types
|
4743
|
+
|
4670
4744
|
const makeVBtnGroupProps = propsFactory({
|
4671
4745
|
baseColor: String,
|
4672
4746
|
divided: Boolean,
|
4747
|
+
direction: {
|
4748
|
+
type: String,
|
4749
|
+
default: 'horizontal'
|
4750
|
+
},
|
4673
4751
|
...makeBorderProps(),
|
4674
4752
|
...makeComponentProps(),
|
4675
4753
|
...makeDensityProps(),
|
@@ -4703,7 +4781,7 @@ const VBtnGroup = genericComponent()({
|
|
4703
4781
|
} = useRounded(props);
|
4704
4782
|
provideDefaults({
|
4705
4783
|
VBtn: {
|
4706
|
-
height: 'auto',
|
4784
|
+
height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
|
4707
4785
|
baseColor: toRef(() => props.baseColor),
|
4708
4786
|
color: toRef(() => props.color),
|
4709
4787
|
density: toRef(() => props.density),
|
@@ -4713,7 +4791,7 @@ const VBtnGroup = genericComponent()({
|
|
4713
4791
|
});
|
4714
4792
|
useRender(() => {
|
4715
4793
|
return createVNode(props.tag, {
|
4716
|
-
"class": normalizeClass(['v-btn-group', {
|
4794
|
+
"class": normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {
|
4717
4795
|
'v-btn-group--divided': props.divided
|
4718
4796
|
}, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
|
4719
4797
|
"style": normalizeStyle(props.style)
|
@@ -5836,8 +5914,8 @@ function rippleCancelShow(e) {
|
|
5836
5914
|
window.clearTimeout(element._ripple.showTimer);
|
5837
5915
|
}
|
5838
5916
|
let keyboardRipple = false;
|
5839
|
-
function keyboardRippleShow(e) {
|
5840
|
-
if (!keyboardRipple && (e.keyCode
|
5917
|
+
function keyboardRippleShow(e, keys) {
|
5918
|
+
if (!keyboardRipple && keys.includes(e.keyCode)) {
|
5841
5919
|
keyboardRipple = true;
|
5842
5920
|
rippleShow(e);
|
5843
5921
|
}
|
@@ -5865,9 +5943,12 @@ function updateRipple(el, binding, wasEnabled) {
|
|
5865
5943
|
el._ripple.enabled = enabled;
|
5866
5944
|
el._ripple.centered = modifiers.center;
|
5867
5945
|
el._ripple.circle = modifiers.circle;
|
5868
|
-
|
5869
|
-
|
5946
|
+
const bindingValue = isObject(value) ? value : {};
|
5947
|
+
if (bindingValue.class) {
|
5948
|
+
el._ripple.class = bindingValue.class;
|
5870
5949
|
}
|
5950
|
+
const allowedKeys = bindingValue.keys ?? [keyCodes.enter, keyCodes.space];
|
5951
|
+
el._ripple.keyDownHandler = e => keyboardRippleShow(e, allowedKeys);
|
5871
5952
|
if (enabled && !wasEnabled) {
|
5872
5953
|
if (modifiers.stop) {
|
5873
5954
|
el.addEventListener('touchstart', rippleStop, {
|
@@ -5889,7 +5970,7 @@ function updateRipple(el, binding, wasEnabled) {
|
|
5889
5970
|
el.addEventListener('mousedown', rippleShow);
|
5890
5971
|
el.addEventListener('mouseup', rippleHide);
|
5891
5972
|
el.addEventListener('mouseleave', rippleHide);
|
5892
|
-
el.addEventListener('keydown', keyboardRippleShow);
|
5973
|
+
el.addEventListener('keydown', e => keyboardRippleShow(e, allowedKeys));
|
5893
5974
|
el.addEventListener('keyup', keyboardRippleHide);
|
5894
5975
|
el.addEventListener('blur', focusRippleHide);
|
5895
5976
|
|
@@ -5909,7 +5990,9 @@ function removeListeners(el) {
|
|
5909
5990
|
el.removeEventListener('touchcancel', rippleHide);
|
5910
5991
|
el.removeEventListener('mouseup', rippleHide);
|
5911
5992
|
el.removeEventListener('mouseleave', rippleHide);
|
5912
|
-
el.
|
5993
|
+
if (el._ripple?.keyDownHandler) {
|
5994
|
+
el.removeEventListener('keydown', el._ripple.keyDownHandler);
|
5995
|
+
}
|
5913
5996
|
el.removeEventListener('keyup', keyboardRippleHide);
|
5914
5997
|
el.removeEventListener('dragstart', rippleHide);
|
5915
5998
|
el.removeEventListener('blur', focusRippleHide);
|
@@ -5918,8 +6001,8 @@ function mounted$4(el, binding) {
|
|
5918
6001
|
updateRipple(el, binding, false);
|
5919
6002
|
}
|
5920
6003
|
function unmounted$4(el) {
|
5921
|
-
delete el._ripple;
|
5922
6004
|
removeListeners(el);
|
6005
|
+
delete el._ripple;
|
5923
6006
|
}
|
5924
6007
|
function updated$1(el, binding) {
|
5925
6008
|
if (binding.value === binding.oldValue) {
|
@@ -6192,6 +6275,31 @@ const VAppBarTitle = genericComponent()({
|
|
6192
6275
|
// Utilities
|
6193
6276
|
const VAlertTitle = createSimpleFunctional('v-alert-title');
|
6194
6277
|
|
6278
|
+
// Utilities
|
6279
|
+
|
6280
|
+
// Types
|
6281
|
+
|
6282
|
+
// Types
|
6283
|
+
|
6284
|
+
// Composables
|
6285
|
+
const makeIconSizeProps = propsFactory({
|
6286
|
+
iconSize: [Number, String],
|
6287
|
+
iconSizes: {
|
6288
|
+
type: Array,
|
6289
|
+
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
6290
|
+
}
|
6291
|
+
}, 'iconSize');
|
6292
|
+
function useIconSizes(props, fallback) {
|
6293
|
+
const iconSize = computed(() => {
|
6294
|
+
const iconSizeMap = new Map(props.iconSizes);
|
6295
|
+
const _iconSize = props.iconSize ?? fallback() ?? 'default';
|
6296
|
+
return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
|
6297
|
+
});
|
6298
|
+
return {
|
6299
|
+
iconSize
|
6300
|
+
};
|
6301
|
+
}
|
6302
|
+
|
6195
6303
|
// Types
|
6196
6304
|
|
6197
6305
|
const allowedTypes = ['success', 'info', 'warning', 'error'];
|
@@ -6231,6 +6339,7 @@ const makeVAlertProps = propsFactory({
|
|
6231
6339
|
...makeDensityProps(),
|
6232
6340
|
...makeDimensionProps(),
|
6233
6341
|
...makeElevationProps(),
|
6342
|
+
...makeIconSizeProps(),
|
6234
6343
|
...makeLocationProps(),
|
6235
6344
|
...makePositionProps(),
|
6236
6345
|
...makeRoundedProps(),
|
@@ -6258,6 +6367,9 @@ const VAlert = genericComponent()({
|
|
6258
6367
|
if (!props.type) return props.icon;
|
6259
6368
|
return props.icon ?? `$${props.type}`;
|
6260
6369
|
});
|
6370
|
+
const {
|
6371
|
+
iconSize
|
6372
|
+
} = useIconSizes(props, () => props.prominent ? 44 : 28);
|
6261
6373
|
const {
|
6262
6374
|
themeClasses
|
6263
6375
|
} = provideTheme(props);
|
@@ -6305,6 +6417,11 @@ const VAlert = genericComponent()({
|
|
6305
6417
|
const hasPrepend = !!(slots.prepend || icon.value);
|
6306
6418
|
const hasTitle = !!(slots.title || props.title);
|
6307
6419
|
const hasClose = !!(slots.close || props.closable);
|
6420
|
+
const iconProps = {
|
6421
|
+
density: props.density,
|
6422
|
+
icon: icon.value,
|
6423
|
+
size: iconSize.value
|
6424
|
+
};
|
6308
6425
|
return isActive.value && createVNode(props.tag, {
|
6309
6426
|
"class": normalizeClass(['v-alert', props.border && {
|
6310
6427
|
'v-alert--border': !!props.border,
|
@@ -6322,19 +6439,14 @@ const VAlert = genericComponent()({
|
|
6322
6439
|
}, null), hasPrepend && createElementVNode("div", {
|
6323
6440
|
"key": "prepend",
|
6324
6441
|
"class": "v-alert__prepend"
|
6325
|
-
}, [!slots.prepend ? createVNode(VIcon, {
|
6326
|
-
"key": "prepend-icon"
|
6327
|
-
|
6328
|
-
"icon": icon.value,
|
6329
|
-
"size": props.prominent ? 44 : 28
|
6330
|
-
}, null) : createVNode(VDefaultsProvider, {
|
6442
|
+
}, [!slots.prepend ? createVNode(VIcon, mergeProps({
|
6443
|
+
"key": "prepend-icon"
|
6444
|
+
}, iconProps), null) : createVNode(VDefaultsProvider, {
|
6331
6445
|
"key": "prepend-defaults",
|
6332
6446
|
"disabled": !icon.value,
|
6333
6447
|
"defaults": {
|
6334
6448
|
VIcon: {
|
6335
|
-
|
6336
|
-
icon: icon.value,
|
6337
|
-
size: props.prominent ? 44 : 28
|
6449
|
+
...iconProps
|
6338
6450
|
}
|
6339
6451
|
}
|
6340
6452
|
}, slots.prepend)]), createElementVNode("div", {
|
@@ -7859,6 +7971,7 @@ function getOffsetPosition(isHorizontal, element) {
|
|
7859
7971
|
const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
|
7860
7972
|
const makeVSlideGroupProps = propsFactory({
|
7861
7973
|
centerActive: Boolean,
|
7974
|
+
contentClass: null,
|
7862
7975
|
direction: {
|
7863
7976
|
type: String,
|
7864
7977
|
default: 'horizontal'
|
@@ -8171,7 +8284,7 @@ const VSlideGroup = genericComponent()({
|
|
8171
8284
|
})]), createElementVNode("div", {
|
8172
8285
|
"key": "container",
|
8173
8286
|
"ref": containerRef,
|
8174
|
-
"class":
|
8287
|
+
"class": normalizeClass(['v-slide-group__container', props.contentClass]),
|
8175
8288
|
"onScroll": onScroll
|
8176
8289
|
}, [createElementVNode("div", {
|
8177
8290
|
"ref": contentRef,
|
@@ -8534,16 +8647,85 @@ const VChip = genericComponent()({
|
|
8534
8647
|
}
|
8535
8648
|
});
|
8536
8649
|
|
8650
|
+
const makeVDividerProps = propsFactory({
|
8651
|
+
color: String,
|
8652
|
+
inset: Boolean,
|
8653
|
+
length: [Number, String],
|
8654
|
+
opacity: [Number, String],
|
8655
|
+
thickness: [Number, String],
|
8656
|
+
vertical: Boolean,
|
8657
|
+
...makeComponentProps(),
|
8658
|
+
...makeThemeProps()
|
8659
|
+
}, 'VDivider');
|
8660
|
+
const VDivider = genericComponent()({
|
8661
|
+
name: 'VDivider',
|
8662
|
+
props: makeVDividerProps(),
|
8663
|
+
setup(props, _ref) {
|
8664
|
+
let {
|
8665
|
+
attrs,
|
8666
|
+
slots
|
8667
|
+
} = _ref;
|
8668
|
+
const {
|
8669
|
+
themeClasses
|
8670
|
+
} = provideTheme(props);
|
8671
|
+
const {
|
8672
|
+
textColorClasses,
|
8673
|
+
textColorStyles
|
8674
|
+
} = useTextColor(() => props.color);
|
8675
|
+
const dividerStyles = computed(() => {
|
8676
|
+
const styles = {};
|
8677
|
+
if (props.length) {
|
8678
|
+
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
8679
|
+
}
|
8680
|
+
if (props.thickness) {
|
8681
|
+
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
8682
|
+
}
|
8683
|
+
return styles;
|
8684
|
+
});
|
8685
|
+
useRender(() => {
|
8686
|
+
const divider = createElementVNode("hr", {
|
8687
|
+
"class": normalizeClass([{
|
8688
|
+
'v-divider': true,
|
8689
|
+
'v-divider--inset': props.inset,
|
8690
|
+
'v-divider--vertical': props.vertical
|
8691
|
+
}, themeClasses.value, textColorClasses.value, props.class]),
|
8692
|
+
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
8693
|
+
'--v-border-opacity': props.opacity
|
8694
|
+
}, props.style]),
|
8695
|
+
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
8696
|
+
"role": `${attrs.role || 'separator'}`
|
8697
|
+
}, null);
|
8698
|
+
if (!slots.default) return divider;
|
8699
|
+
return createElementVNode("div", {
|
8700
|
+
"class": normalizeClass(['v-divider__wrapper', {
|
8701
|
+
'v-divider__wrapper--vertical': props.vertical,
|
8702
|
+
'v-divider__wrapper--inset': props.inset
|
8703
|
+
}])
|
8704
|
+
}, [divider, createElementVNode("div", {
|
8705
|
+
"class": "v-divider__content"
|
8706
|
+
}, [slots.default()]), divider]);
|
8707
|
+
});
|
8708
|
+
return {};
|
8709
|
+
}
|
8710
|
+
});
|
8711
|
+
|
8537
8712
|
// Utilities
|
8538
8713
|
|
8539
8714
|
// List
|
8540
8715
|
const ListKey = Symbol.for('vuetify:list');
|
8541
8716
|
function createList() {
|
8717
|
+
let {
|
8718
|
+
filterable
|
8719
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
8720
|
+
filterable: false
|
8721
|
+
};
|
8542
8722
|
const parent = inject$1(ListKey, {
|
8723
|
+
filterable: false,
|
8543
8724
|
hasPrepend: shallowRef(false),
|
8544
8725
|
updateHasPrepend: () => null
|
8545
8726
|
});
|
8546
8727
|
const data = {
|
8728
|
+
filterable: parent.filterable || filterable,
|
8547
8729
|
hasPrepend: shallowRef(false),
|
8548
8730
|
updateHasPrepend: value => {
|
8549
8731
|
if (value) data.hasPrepend.value = value;
|
@@ -9495,6 +9677,9 @@ const VListItem = genericComponent()({
|
|
9495
9677
|
roundedClasses
|
9496
9678
|
} = useRounded(roundedProps);
|
9497
9679
|
const lineClasses = toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);
|
9680
|
+
const rippleOptions = toRef(() => props.ripple !== undefined && !!props.ripple && list?.filterable ? {
|
9681
|
+
keys: [keyCodes.enter]
|
9682
|
+
} : props.ripple);
|
9498
9683
|
const slotProps = computed(() => ({
|
9499
9684
|
isActive: isActive.value,
|
9500
9685
|
select,
|
@@ -9519,8 +9704,9 @@ const VListItem = genericComponent()({
|
|
9519
9704
|
function onKeyDown(e) {
|
9520
9705
|
const target = e.target;
|
9521
9706
|
if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
|
9522
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
9707
|
+
if (e.key === 'Enter' || e.key === ' ' && !list?.filterable) {
|
9523
9708
|
e.preventDefault();
|
9709
|
+
e.stopPropagation();
|
9524
9710
|
e.target.dispatchEvent(new MouseEvent('click', e));
|
9525
9711
|
}
|
9526
9712
|
}
|
@@ -9630,7 +9816,7 @@ const VListItem = genericComponent()({
|
|
9630
9816
|
}), createElementVNode("div", {
|
9631
9817
|
"class": "v-list-item__spacer"
|
9632
9818
|
}, null)])]
|
9633
|
-
}), [[Ripple, isClickable.value &&
|
9819
|
+
}), [[Ripple, isClickable.value && rippleOptions.value]]);
|
9634
9820
|
});
|
9635
9821
|
return {
|
9636
9822
|
activate,
|
@@ -9685,68 +9871,6 @@ const VListSubheader = genericComponent()({
|
|
9685
9871
|
}
|
9686
9872
|
});
|
9687
9873
|
|
9688
|
-
const makeVDividerProps = propsFactory({
|
9689
|
-
color: String,
|
9690
|
-
inset: Boolean,
|
9691
|
-
length: [Number, String],
|
9692
|
-
opacity: [Number, String],
|
9693
|
-
thickness: [Number, String],
|
9694
|
-
vertical: Boolean,
|
9695
|
-
...makeComponentProps(),
|
9696
|
-
...makeThemeProps()
|
9697
|
-
}, 'VDivider');
|
9698
|
-
const VDivider = genericComponent()({
|
9699
|
-
name: 'VDivider',
|
9700
|
-
props: makeVDividerProps(),
|
9701
|
-
setup(props, _ref) {
|
9702
|
-
let {
|
9703
|
-
attrs,
|
9704
|
-
slots
|
9705
|
-
} = _ref;
|
9706
|
-
const {
|
9707
|
-
themeClasses
|
9708
|
-
} = provideTheme(props);
|
9709
|
-
const {
|
9710
|
-
textColorClasses,
|
9711
|
-
textColorStyles
|
9712
|
-
} = useTextColor(() => props.color);
|
9713
|
-
const dividerStyles = computed(() => {
|
9714
|
-
const styles = {};
|
9715
|
-
if (props.length) {
|
9716
|
-
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
9717
|
-
}
|
9718
|
-
if (props.thickness) {
|
9719
|
-
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
9720
|
-
}
|
9721
|
-
return styles;
|
9722
|
-
});
|
9723
|
-
useRender(() => {
|
9724
|
-
const divider = createElementVNode("hr", {
|
9725
|
-
"class": normalizeClass([{
|
9726
|
-
'v-divider': true,
|
9727
|
-
'v-divider--inset': props.inset,
|
9728
|
-
'v-divider--vertical': props.vertical
|
9729
|
-
}, themeClasses.value, textColorClasses.value, props.class]),
|
9730
|
-
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
9731
|
-
'--v-border-opacity': props.opacity
|
9732
|
-
}, props.style]),
|
9733
|
-
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
9734
|
-
"role": `${attrs.role || 'separator'}`
|
9735
|
-
}, null);
|
9736
|
-
if (!slots.default) return divider;
|
9737
|
-
return createElementVNode("div", {
|
9738
|
-
"class": normalizeClass(['v-divider__wrapper', {
|
9739
|
-
'v-divider__wrapper--vertical': props.vertical,
|
9740
|
-
'v-divider__wrapper--inset': props.inset
|
9741
|
-
}])
|
9742
|
-
}, [divider, createElementVNode("div", {
|
9743
|
-
"class": "v-divider__content"
|
9744
|
-
}, [slots.default()]), divider]);
|
9745
|
-
});
|
9746
|
-
return {};
|
9747
|
-
}
|
9748
|
-
});
|
9749
|
-
|
9750
9874
|
// Types
|
9751
9875
|
|
9752
9876
|
const makeVListChildrenProps = propsFactory({
|
@@ -10015,6 +10139,7 @@ const makeVListProps = propsFactory({
|
|
10015
10139
|
activeClass: String,
|
10016
10140
|
bgColor: String,
|
10017
10141
|
disabled: Boolean,
|
10142
|
+
filterable: Boolean,
|
10018
10143
|
expandIcon: IconValue,
|
10019
10144
|
collapseIcon: IconValue,
|
10020
10145
|
lines: {
|
@@ -10098,7 +10223,9 @@ const VList = genericComponent()({
|
|
10098
10223
|
const activeColor = toRef(() => props.activeColor);
|
10099
10224
|
const baseColor = toRef(() => props.baseColor);
|
10100
10225
|
const color = toRef(() => props.color);
|
10101
|
-
createList(
|
10226
|
+
createList({
|
10227
|
+
filterable: props.filterable
|
10228
|
+
});
|
10102
10229
|
provideDefaults({
|
10103
10230
|
VListGroup: {
|
10104
10231
|
activeColor,
|
@@ -12675,7 +12802,12 @@ function useVirtual(props, items) {
|
|
12675
12802
|
}
|
12676
12803
|
function calculateOffset(index) {
|
12677
12804
|
index = clamp(index, 0, items.value.length - 1);
|
12678
|
-
|
12805
|
+
const whole = Math.floor(index);
|
12806
|
+
const fraction = index % 1;
|
12807
|
+
const next = whole + 1;
|
12808
|
+
const wholeOffset = offsets[whole] || 0;
|
12809
|
+
const nextOffset = offsets[next] || wholeOffset;
|
12810
|
+
return wholeOffset + (nextOffset - wholeOffset) * fraction;
|
12679
12811
|
}
|
12680
12812
|
function calculateIndex(scrollTop) {
|
12681
12813
|
return binaryClosest(offsets, scrollTop);
|
@@ -13029,6 +13161,7 @@ const makeSelectProps = propsFactory({
|
|
13029
13161
|
},
|
13030
13162
|
openOnClear: Boolean,
|
13031
13163
|
itemColor: String,
|
13164
|
+
noAutoScroll: Boolean,
|
13032
13165
|
...makeItemsProps({
|
13033
13166
|
itemChildren: false
|
13034
13167
|
})
|
@@ -13243,7 +13376,7 @@ const VSelect = genericComponent()({
|
|
13243
13376
|
watch(menu, () => {
|
13244
13377
|
if (!props.hideSelected && menu.value && model.value.length) {
|
13245
13378
|
const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
|
13246
|
-
IN_BROWSER && window.requestAnimationFrame(() => {
|
13379
|
+
IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {
|
13247
13380
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
13248
13381
|
});
|
13249
13382
|
}
|
@@ -13336,6 +13469,22 @@ const VSelect = genericComponent()({
|
|
13336
13469
|
key: item.value,
|
13337
13470
|
onClick: () => select(item, null)
|
13338
13471
|
});
|
13472
|
+
if (item.raw.type === 'divider') {
|
13473
|
+
return slots.divider?.({
|
13474
|
+
props: item.raw,
|
13475
|
+
index
|
13476
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13477
|
+
"key": `divider-${index}`
|
13478
|
+
}), null);
|
13479
|
+
}
|
13480
|
+
if (item.raw.type === 'subheader') {
|
13481
|
+
return slots.subheader?.({
|
13482
|
+
props: item.raw,
|
13483
|
+
index
|
13484
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13485
|
+
"key": `subheader-${index}`
|
13486
|
+
}), null);
|
13487
|
+
}
|
13339
13488
|
return slots.item?.({
|
13340
13489
|
item,
|
13341
13490
|
index,
|
@@ -13496,6 +13645,9 @@ function filterItems(items, query, options) {
|
|
13496
13645
|
let match = -1;
|
13497
13646
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
13498
13647
|
if (typeof item === 'object') {
|
13648
|
+
if (['divider', 'subheader'].includes(item.raw?.type)) {
|
13649
|
+
continue;
|
13650
|
+
}
|
13499
13651
|
const filterKeys = keys || Object.keys(transformed);
|
13500
13652
|
for (const key of filterKeys) {
|
13501
13653
|
const value = getPropertyFromItem(transformed, key);
|
@@ -13698,7 +13850,7 @@ const VAutocomplete = genericComponent()({
|
|
13698
13850
|
menu.value = !menu.value;
|
13699
13851
|
}
|
13700
13852
|
function onListKeydown(e) {
|
13701
|
-
if (e.key
|
13853
|
+
if (checkPrintable(e) || e.key === 'Backspace') {
|
13702
13854
|
vTextFieldRef.value?.focus();
|
13703
13855
|
}
|
13704
13856
|
}
|
@@ -13903,6 +14055,7 @@ const VAutocomplete = genericComponent()({
|
|
13903
14055
|
}, props.menuProps), {
|
13904
14056
|
default: () => [hasList && createVNode(VList, mergeProps({
|
13905
14057
|
"ref": listRef,
|
14058
|
+
"filterable": true,
|
13906
14059
|
"selected": selectedValues.value,
|
13907
14060
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
13908
14061
|
"onMousedown": e => e.preventDefault(),
|
@@ -13934,6 +14087,22 @@ const VAutocomplete = genericComponent()({
|
|
13934
14087
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
13935
14088
|
onClick: () => select(item, null)
|
13936
14089
|
});
|
14090
|
+
if (item.raw.type === 'divider') {
|
14091
|
+
return slots.divider?.({
|
14092
|
+
props: item.raw,
|
14093
|
+
index
|
14094
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
14095
|
+
"key": `divider-${index}`
|
14096
|
+
}), null);
|
14097
|
+
}
|
14098
|
+
if (item.raw.type === 'subheader') {
|
14099
|
+
return slots.subheader?.({
|
14100
|
+
props: item.raw,
|
14101
|
+
index
|
14102
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
14103
|
+
"key": `subheader-${index}`
|
14104
|
+
}), null);
|
14105
|
+
}
|
13937
14106
|
return slots.item?.({
|
13938
14107
|
item,
|
13939
14108
|
index,
|
@@ -14078,7 +14247,8 @@ const makeVBadgeProps = propsFactory({
|
|
14078
14247
|
...makeThemeProps(),
|
14079
14248
|
...makeTransitionProps({
|
14080
14249
|
transition: 'scale-rotate-transition'
|
14081
|
-
})
|
14250
|
+
}),
|
14251
|
+
...makeDimensionProps()
|
14082
14252
|
}, 'VBadge');
|
14083
14253
|
const VBadge = genericComponent()({
|
14084
14254
|
name: 'VBadge',
|
@@ -14108,6 +14278,9 @@ const VBadge = genericComponent()({
|
|
14108
14278
|
const base = props.floating ? props.dot ? 2 : 4 : props.dot ? 8 : 12;
|
14109
14279
|
return base + (['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0) : 0);
|
14110
14280
|
});
|
14281
|
+
const {
|
14282
|
+
dimensionStyles
|
14283
|
+
} = useDimension(props);
|
14111
14284
|
useRender(() => {
|
14112
14285
|
const value = Number(props.content);
|
14113
14286
|
const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;
|
@@ -14129,7 +14302,7 @@ const VBadge = genericComponent()({
|
|
14129
14302
|
}, {
|
14130
14303
|
default: () => [withDirectives(createElementVNode("span", mergeProps({
|
14131
14304
|
"class": ['v-badge__badge', themeClasses.value, backgroundColorClasses.value, roundedClasses.value, textColorClasses.value],
|
14132
|
-
"style": [backgroundColorStyles.value, textColorStyles.value, props.inline ? {} : locationStyles.value],
|
14305
|
+
"style": [backgroundColorStyles.value, textColorStyles.value, dimensionStyles.value, props.inline ? {} : locationStyles.value],
|
14133
14306
|
"aria-atomic": "true",
|
14134
14307
|
"aria-label": t(props.label, value),
|
14135
14308
|
"aria-live": "polite",
|
@@ -17538,13 +17711,13 @@ function date(value) {
|
|
17538
17711
|
return null;
|
17539
17712
|
}
|
17540
17713
|
const sundayJanuarySecond2000 = new Date(2000, 0, 2);
|
17541
|
-
function getWeekdays(locale, firstDayOfWeek) {
|
17714
|
+
function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
|
17542
17715
|
const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
|
17543
17716
|
return createRange(7).map(i => {
|
17544
17717
|
const weekday = new Date(sundayJanuarySecond2000);
|
17545
17718
|
weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
|
17546
17719
|
return new Intl.DateTimeFormat(locale, {
|
17547
|
-
weekday: 'narrow'
|
17720
|
+
weekday: weekdayFormat ?? 'narrow'
|
17548
17721
|
}).format(weekday);
|
17549
17722
|
});
|
17550
17723
|
}
|
@@ -18008,9 +18181,9 @@ class VuetifyDateAdapter {
|
|
18008
18181
|
getDiff(date, comparing, unit) {
|
18009
18182
|
return getDiff(date, comparing, unit);
|
18010
18183
|
}
|
18011
|
-
getWeekdays(firstDayOfWeek) {
|
18184
|
+
getWeekdays(firstDayOfWeek, weekdayFormat) {
|
18012
18185
|
const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
|
18013
|
-
return getWeekdays(this.locale, firstDay);
|
18186
|
+
return getWeekdays(this.locale, firstDay, weekdayFormat);
|
18014
18187
|
}
|
18015
18188
|
getYear(date) {
|
18016
18189
|
return getYear(date);
|
@@ -18365,6 +18538,7 @@ const VCombobox = genericComponent()({
|
|
18365
18538
|
_search.value = val ?? '';
|
18366
18539
|
if (!props.multiple && !hasSelectionSlot.value) {
|
18367
18540
|
model.value = [transformItem$3(props, val)];
|
18541
|
+
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
18368
18542
|
}
|
18369
18543
|
if (val && props.multiple && props.delimiters?.length) {
|
18370
18544
|
const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
|
@@ -18445,7 +18619,7 @@ const VCombobox = genericComponent()({
|
|
18445
18619
|
menu.value = !menu.value;
|
18446
18620
|
}
|
18447
18621
|
function onListKeydown(e) {
|
18448
|
-
if (e.key
|
18622
|
+
if (checkPrintable(e) || e.key === 'Backspace') {
|
18449
18623
|
vTextFieldRef.value?.focus();
|
18450
18624
|
}
|
18451
18625
|
}
|
@@ -18650,6 +18824,7 @@ const VCombobox = genericComponent()({
|
|
18650
18824
|
}, props.menuProps), {
|
18651
18825
|
default: () => [hasList && createVNode(VList, mergeProps({
|
18652
18826
|
"ref": listRef,
|
18827
|
+
"filterable": true,
|
18653
18828
|
"selected": selectedValues.value,
|
18654
18829
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
18655
18830
|
"onMousedown": e => e.preventDefault(),
|
@@ -18681,6 +18856,22 @@ const VCombobox = genericComponent()({
|
|
18681
18856
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
18682
18857
|
onClick: () => select(item, null)
|
18683
18858
|
});
|
18859
|
+
if (item.raw.type === 'divider') {
|
18860
|
+
return slots.divider?.({
|
18861
|
+
props: item.raw,
|
18862
|
+
index
|
18863
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
18864
|
+
"key": `divider-${index}`
|
18865
|
+
}), null);
|
18866
|
+
}
|
18867
|
+
if (item.raw.type === 'subheader') {
|
18868
|
+
return slots.subheader?.({
|
18869
|
+
props: item.raw,
|
18870
|
+
index
|
18871
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
18872
|
+
"key": `subheader-${index}`
|
18873
|
+
}), null);
|
18874
|
+
}
|
18684
18875
|
return slots.item?.({
|
18685
18876
|
item,
|
18686
18877
|
index,
|
@@ -20563,6 +20754,7 @@ const makeVDataTableHeadersProps = propsFactory({
|
|
20563
20754
|
color: String,
|
20564
20755
|
disableSort: Boolean,
|
20565
20756
|
fixedHeader: Boolean,
|
20757
|
+
lastFixed: Boolean,
|
20566
20758
|
multiSort: Boolean,
|
20567
20759
|
sortAscIcon: {
|
20568
20760
|
type: IconValue,
|
@@ -20609,10 +20801,11 @@ const VDataTableHeaders = genericComponent()({
|
|
20609
20801
|
loaderClasses
|
20610
20802
|
} = useLoader(props);
|
20611
20803
|
function getFixedStyles(column, y) {
|
20612
|
-
if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
|
20804
|
+
if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
|
20613
20805
|
return {
|
20614
20806
|
position: 'sticky',
|
20615
|
-
left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
|
20807
|
+
left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
|
20808
|
+
right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
|
20616
20809
|
top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
|
20617
20810
|
};
|
20618
20811
|
}
|
@@ -21128,11 +21321,18 @@ const VDataTableRows = genericComponent()({
|
|
21128
21321
|
}
|
21129
21322
|
});
|
21130
21323
|
|
21324
|
+
// Types
|
21325
|
+
|
21131
21326
|
const makeVTableProps = propsFactory({
|
21132
21327
|
fixedHeader: Boolean,
|
21133
21328
|
fixedFooter: Boolean,
|
21134
21329
|
height: [Number, String],
|
21135
21330
|
hover: Boolean,
|
21331
|
+
striped: {
|
21332
|
+
type: String,
|
21333
|
+
default: null,
|
21334
|
+
validator: v => ['even', 'odd'].includes(v)
|
21335
|
+
},
|
21136
21336
|
...makeComponentProps(),
|
21137
21337
|
...makeDensityProps(),
|
21138
21338
|
...makeTagProps(),
|
@@ -21159,7 +21359,9 @@ const VTable = genericComponent()({
|
|
21159
21359
|
'v-table--fixed-footer': props.fixedFooter,
|
21160
21360
|
'v-table--has-top': !!slots.top,
|
21161
21361
|
'v-table--has-bottom': !!slots.bottom,
|
21162
|
-
'v-table--hover': props.hover
|
21362
|
+
'v-table--hover': props.hover,
|
21363
|
+
'v-table--striped-even': props.striped === 'even',
|
21364
|
+
'v-table--striped-odd': props.striped === 'odd'
|
21163
21365
|
}, themeClasses.value, densityClasses.value, props.class]),
|
21164
21366
|
"style": normalizeStyle(props.style)
|
21165
21367
|
}, {
|
@@ -22334,7 +22536,8 @@ const makeCalendarProps = propsFactory({
|
|
22334
22536
|
firstDayOfWeek: {
|
22335
22537
|
type: [Number, String],
|
22336
22538
|
default: undefined
|
22337
|
-
}
|
22539
|
+
},
|
22540
|
+
weekdayFormat: String
|
22338
22541
|
}, 'calendar');
|
22339
22542
|
function useCalendar(props) {
|
22340
22543
|
const adapter = useDate();
|
@@ -22575,7 +22778,7 @@ const VDatePickerMonth = genericComponent()({
|
|
22575
22778
|
"ref": daysRef,
|
22576
22779
|
"key": daysInMonth.value[0].date?.toString(),
|
22577
22780
|
"class": "v-date-picker-month__days"
|
22578
|
-
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
|
22781
|
+
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => createElementVNode("div", {
|
22579
22782
|
"class": normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
|
22580
22783
|
}, [weekDay])), daysInMonth.value.map((item, i) => {
|
22581
22784
|
const slotProps = {
|
@@ -24190,6 +24393,9 @@ const VInfiniteScroll = genericComponent()({
|
|
24190
24393
|
startStatus.value = status;
|
24191
24394
|
} else if (side === 'end') {
|
24192
24395
|
endStatus.value = status;
|
24396
|
+
} else if (side === 'both') {
|
24397
|
+
startStatus.value = status;
|
24398
|
+
endStatus.value = status;
|
24193
24399
|
}
|
24194
24400
|
}
|
24195
24401
|
function getStatus(side) {
|
@@ -24301,6 +24507,32 @@ const VInfiniteScroll = genericComponent()({
|
|
24301
24507
|
}, [renderSide('end', endStatus.value)])]
|
24302
24508
|
});
|
24303
24509
|
});
|
24510
|
+
function reset(side) {
|
24511
|
+
const effectiveSide = side ?? props.side;
|
24512
|
+
setStatus(effectiveSide, 'ok');
|
24513
|
+
nextTick(() => {
|
24514
|
+
setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
|
24515
|
+
if (props.mode !== 'manual') {
|
24516
|
+
nextTick(() => {
|
24517
|
+
window.requestAnimationFrame(() => {
|
24518
|
+
window.requestAnimationFrame(() => {
|
24519
|
+
window.requestAnimationFrame(() => {
|
24520
|
+
if (effectiveSide === 'both') {
|
24521
|
+
intersecting('start');
|
24522
|
+
intersecting('end');
|
24523
|
+
} else {
|
24524
|
+
intersecting(effectiveSide);
|
24525
|
+
}
|
24526
|
+
});
|
24527
|
+
});
|
24528
|
+
});
|
24529
|
+
});
|
24530
|
+
}
|
24531
|
+
});
|
24532
|
+
}
|
24533
|
+
return {
|
24534
|
+
reset
|
24535
|
+
};
|
24304
24536
|
}
|
24305
24537
|
});
|
24306
24538
|
|
@@ -25219,6 +25451,10 @@ const makeVNumberInputProps = propsFactory({
|
|
25219
25451
|
type: Number,
|
25220
25452
|
default: 0
|
25221
25453
|
},
|
25454
|
+
minFractionDigits: {
|
25455
|
+
type: Number,
|
25456
|
+
default: null
|
25457
|
+
},
|
25222
25458
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
25223
25459
|
}, 'VNumberInput');
|
25224
25460
|
const VNumberInput = genericComponent()({
|
@@ -25246,9 +25482,19 @@ const VNumberInput = genericComponent()({
|
|
25246
25482
|
const isFocused = shallowRef(props.focused);
|
25247
25483
|
function correctPrecision(val) {
|
25248
25484
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
25249
|
-
|
25250
|
-
|
25251
|
-
|
25485
|
+
if (precision == null) {
|
25486
|
+
return String(val);
|
25487
|
+
}
|
25488
|
+
let fixed = val.toFixed(precision);
|
25489
|
+
if (isFocused.value) {
|
25490
|
+
return Number(fixed).toString(); // trim zeros
|
25491
|
+
}
|
25492
|
+
if ((props.minFractionDigits ?? precision) < precision) {
|
25493
|
+
const trimLimit = precision - props.minFractionDigits;
|
25494
|
+
const [baseDigits, fractionDigits] = fixed.split('.');
|
25495
|
+
fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
|
25496
|
+
}
|
25497
|
+
return fixed;
|
25252
25498
|
}
|
25253
25499
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
25254
25500
|
const _inputText = shallowRef(null);
|
@@ -25303,6 +25549,7 @@ const VNumberInput = genericComponent()({
|
|
25303
25549
|
}
|
25304
25550
|
};
|
25305
25551
|
watch(() => props.precision, () => formatInputValue());
|
25552
|
+
watch(() => props.minFractionDigits, () => formatInputValue());
|
25306
25553
|
onMounted(() => {
|
25307
25554
|
clampModel();
|
25308
25555
|
});
|
@@ -25417,7 +25664,7 @@ const VNumberInput = genericComponent()({
|
|
25417
25664
|
inputText.value = null;
|
25418
25665
|
return;
|
25419
25666
|
}
|
25420
|
-
inputText.value =
|
25667
|
+
inputText.value = correctPrecision(model.value);
|
25421
25668
|
}
|
25422
25669
|
function trimDecimalZeros() {
|
25423
25670
|
if (controlsDisabled.value) return;
|
@@ -25677,9 +25924,10 @@ const VOtpInput = genericComponent()({
|
|
25677
25924
|
e.preventDefault();
|
25678
25925
|
e.stopPropagation();
|
25679
25926
|
const clipboardText = e?.clipboardData?.getData('Text').trim().slice(0, length.value) ?? '';
|
25927
|
+
const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
|
25680
25928
|
if (isValidNumber(clipboardText)) return;
|
25681
25929
|
model.value = clipboardText.split('');
|
25682
|
-
inputRef.value?.[
|
25930
|
+
inputRef.value?.[finalIndex].focus();
|
25683
25931
|
}
|
25684
25932
|
function reset() {
|
25685
25933
|
model.value = [];
|
@@ -29464,7 +29712,7 @@ function createVuetify$1() {
|
|
29464
29712
|
};
|
29465
29713
|
});
|
29466
29714
|
}
|
29467
|
-
const version$1 = "3.8.
|
29715
|
+
const version$1 = "3.8.9-dev.2025-06-11";
|
29468
29716
|
createVuetify$1.version = version$1;
|
29469
29717
|
|
29470
29718
|
// Vue's inject() can only be used in setup
|
@@ -29489,7 +29737,7 @@ const createVuetify = function () {
|
|
29489
29737
|
...options
|
29490
29738
|
});
|
29491
29739
|
};
|
29492
|
-
const version = "3.8.
|
29740
|
+
const version = "3.8.9-dev.2025-06-11";
|
29493
29741
|
createVuetify.version = version;
|
29494
29742
|
|
29495
29743
|
export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };
|