@vuetify/nightly 3.8.7-master.2025-06-03 → 3.8.8-dev.2025-06-08
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 +30 -15
- package/dist/json/attributes.json +3542 -3418
- package/dist/json/importMap-labs.json +18 -18
- package/dist/json/importMap.json +168 -168
- package/dist/json/tags.json +32 -1
- package/dist/json/web-types.json +6581 -6195
- package/dist/vuetify-labs.cjs +369 -147
- package/dist/vuetify-labs.css +3246 -3212
- package/dist/vuetify-labs.d.ts +2433 -1899
- package/dist/vuetify-labs.esm.js +370 -148
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +369 -147
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +363 -136
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3712 -3678
- package/dist/vuetify.d.ts +1588 -1094
- package/dist/vuetify.esm.js +364 -137
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +363 -136
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1224 -1206
- 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/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/list-items.js +2 -2
- package/lib/composables/list-items.js.map +1 -1
- 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 +83 -68
- 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/lib/util/helpers.d.ts +1 -0
- package/lib/util/helpers.js +9 -1
- package/lib/util/helpers.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.8-dev.2025-06-08
|
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,
|
7
|
+
import { shallowRef, reactive, watchEffect, toRef, capitalize, camelize, unref, Fragment, 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"); }
|
@@ -525,6 +526,14 @@ function extractNumber(text, decimalDigitsLimit) {
|
|
525
526
|
}
|
526
527
|
return cleanText;
|
527
528
|
}
|
529
|
+
function camelizeProps(props) {
|
530
|
+
if (!props) return;
|
531
|
+
const out = {};
|
532
|
+
for (const prop in props) {
|
533
|
+
out[camelize(prop)] = props[prop];
|
534
|
+
}
|
535
|
+
return out;
|
536
|
+
}
|
528
537
|
|
529
538
|
// Utilities
|
530
539
|
const block = ['top', 'bottom'];
|
@@ -2824,6 +2833,7 @@ const makeThemeProps = propsFactory({
|
|
2824
2833
|
function genDefaults$1() {
|
2825
2834
|
return {
|
2826
2835
|
defaultTheme: 'light',
|
2836
|
+
prefix: 'v-',
|
2827
2837
|
variations: {
|
2828
2838
|
colors: [],
|
2829
2839
|
lighten: 0,
|
@@ -2905,7 +2915,10 @@ function genDefaults$1() {
|
|
2905
2915
|
}
|
2906
2916
|
}
|
2907
2917
|
},
|
2908
|
-
stylesheetId: 'vuetify-theme-stylesheet'
|
2918
|
+
stylesheetId: 'vuetify-theme-stylesheet',
|
2919
|
+
scoped: false,
|
2920
|
+
unimportant: false,
|
2921
|
+
utilities: true
|
2909
2922
|
};
|
2910
2923
|
}
|
2911
2924
|
function parseThemeOptions() {
|
@@ -2928,21 +2941,21 @@ function parseThemeOptions() {
|
|
2928
2941
|
function createCssClass(lines, selector, content, scope) {
|
2929
2942
|
lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
|
2930
2943
|
}
|
2931
|
-
function genCssVariables(theme) {
|
2944
|
+
function genCssVariables(theme, prefix) {
|
2932
2945
|
const lightOverlay = theme.dark ? 2 : 1;
|
2933
2946
|
const darkOverlay = theme.dark ? 1 : 2;
|
2934
2947
|
const variables = [];
|
2935
2948
|
for (const [key, value] of Object.entries(theme.colors)) {
|
2936
2949
|
const rgb = parseColor(value);
|
2937
|
-
variables.push(
|
2950
|
+
variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
|
2938
2951
|
if (!key.startsWith('on-')) {
|
2939
|
-
variables.push(
|
2952
|
+
variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
|
2940
2953
|
}
|
2941
2954
|
}
|
2942
2955
|
for (const [key, value] of Object.entries(theme.variables)) {
|
2943
2956
|
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
|
2944
2957
|
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
|
2945
|
-
variables.push(
|
2958
|
+
variables.push(`--${prefix}${key}: ${rgb ?? value}`);
|
2946
2959
|
}
|
2947
2960
|
return variables;
|
2948
2961
|
}
|
@@ -2986,7 +2999,8 @@ function getScopedSelector(selector, scope) {
|
|
2986
2999
|
const scopeSelector = `:where(${scope})`;
|
2987
3000
|
return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
|
2988
3001
|
}
|
2989
|
-
function upsertStyles(
|
3002
|
+
function upsertStyles(id, cspNonce, styles) {
|
3003
|
+
const styleEl = getOrCreateStyleElement(id, cspNonce);
|
2990
3004
|
if (!styleEl) return;
|
2991
3005
|
styleEl.innerHTML = styles;
|
2992
3006
|
}
|
@@ -3006,8 +3020,17 @@ function getOrCreateStyleElement(id, cspNonce) {
|
|
3006
3020
|
// Composables
|
3007
3021
|
function createTheme(options) {
|
3008
3022
|
const parsedOptions = parseThemeOptions(options);
|
3009
|
-
const
|
3023
|
+
const _name = shallowRef(parsedOptions.defaultTheme);
|
3010
3024
|
const themes = ref(parsedOptions.themes);
|
3025
|
+
const systemName = shallowRef('light');
|
3026
|
+
const name = computed({
|
3027
|
+
get() {
|
3028
|
+
return _name.value === 'system' ? systemName.value : _name.value;
|
3029
|
+
},
|
3030
|
+
set(val) {
|
3031
|
+
_name.value = val;
|
3032
|
+
}
|
3033
|
+
});
|
3011
3034
|
const computedThemes = computed(() => {
|
3012
3035
|
const acc = {};
|
3013
3036
|
for (const [name, original] of Object.entries(themes.value)) {
|
@@ -3028,28 +3051,49 @@ function createTheme(options) {
|
|
3028
3051
|
const current = toRef(() => computedThemes.value[name.value]);
|
3029
3052
|
const styles = computed(() => {
|
3030
3053
|
const lines = [];
|
3054
|
+
const important = parsedOptions.unimportant ? '' : ' !important';
|
3055
|
+
const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
|
3031
3056
|
if (current.value?.dark) {
|
3032
3057
|
createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
|
3033
3058
|
}
|
3034
|
-
createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
|
3059
|
+
createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
|
3035
3060
|
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
|
3036
|
-
createCssClass(lines,
|
3037
|
-
}
|
3038
|
-
|
3039
|
-
|
3040
|
-
|
3041
|
-
|
3042
|
-
|
3043
|
-
|
3044
|
-
|
3045
|
-
|
3046
|
-
|
3047
|
-
|
3061
|
+
createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
|
3062
|
+
}
|
3063
|
+
if (parsedOptions.utilities) {
|
3064
|
+
const bgLines = [];
|
3065
|
+
const fgLines = [];
|
3066
|
+
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
|
3067
|
+
for (const key of colors) {
|
3068
|
+
if (key.startsWith('on-')) {
|
3069
|
+
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
3070
|
+
} else {
|
3071
|
+
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);
|
3072
|
+
createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
3073
|
+
createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
|
3074
|
+
}
|
3048
3075
|
}
|
3076
|
+
lines.push(...bgLines, ...fgLines);
|
3049
3077
|
}
|
3050
|
-
lines.push(...bgLines, ...fgLines);
|
3051
3078
|
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
|
3052
3079
|
});
|
3080
|
+
const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
|
3081
|
+
const themeNames = toRef(() => Object.keys(computedThemes.value));
|
3082
|
+
if (SUPPORTS_MATCH_MEDIA) {
|
3083
|
+
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
3084
|
+
function updateSystemName() {
|
3085
|
+
systemName.value = media.matches ? 'dark' : 'light';
|
3086
|
+
}
|
3087
|
+
updateSystemName();
|
3088
|
+
media.addEventListener('change', updateSystemName, {
|
3089
|
+
passive: true
|
3090
|
+
});
|
3091
|
+
if (getCurrentScope()) {
|
3092
|
+
onScopeDispose(() => {
|
3093
|
+
media.removeEventListener('change', updateSystemName);
|
3094
|
+
});
|
3095
|
+
}
|
3096
|
+
}
|
3053
3097
|
function install(app) {
|
3054
3098
|
if (parsedOptions.isDisabled) return;
|
3055
3099
|
const head = app._context.provides.usehead;
|
@@ -3087,22 +3131,55 @@ function createTheme(options) {
|
|
3087
3131
|
updateStyles();
|
3088
3132
|
}
|
3089
3133
|
function updateStyles() {
|
3090
|
-
upsertStyles(
|
3134
|
+
upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
|
3091
3135
|
}
|
3092
3136
|
}
|
3093
3137
|
}
|
3094
|
-
|
3138
|
+
function change(themeName) {
|
3139
|
+
if (!themeNames.value.includes(themeName)) {
|
3140
|
+
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
3141
|
+
return;
|
3142
|
+
}
|
3143
|
+
name.value = themeName;
|
3144
|
+
}
|
3145
|
+
function cycle() {
|
3146
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
|
3147
|
+
const currentIndex = themeArray.indexOf(name.value);
|
3148
|
+
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
|
3149
|
+
change(themeArray[nextIndex]);
|
3150
|
+
}
|
3151
|
+
function toggle() {
|
3152
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
|
3153
|
+
cycle(themeArray);
|
3154
|
+
}
|
3155
|
+
const globalName = new Proxy(name, {
|
3156
|
+
get(target, prop) {
|
3157
|
+
return target[prop];
|
3158
|
+
},
|
3159
|
+
set(target, prop, val) {
|
3160
|
+
if (prop === 'value') {
|
3161
|
+
deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
|
3162
|
+
}
|
3163
|
+
// @ts-expect-error
|
3164
|
+
target[prop] = val;
|
3165
|
+
return true;
|
3166
|
+
}
|
3167
|
+
});
|
3095
3168
|
return {
|
3096
3169
|
install,
|
3170
|
+
change,
|
3171
|
+
cycle,
|
3172
|
+
toggle,
|
3097
3173
|
isDisabled: parsedOptions.isDisabled,
|
3098
3174
|
name,
|
3099
3175
|
themes,
|
3100
3176
|
current,
|
3101
3177
|
computedThemes,
|
3178
|
+
prefix: parsedOptions.prefix,
|
3102
3179
|
themeClasses,
|
3103
3180
|
styles,
|
3104
3181
|
global: {
|
3105
|
-
name,
|
3182
|
+
name: globalName,
|
3106
3183
|
current
|
3107
3184
|
}
|
3108
3185
|
};
|
@@ -3113,7 +3190,7 @@ function provideTheme(props) {
|
|
3113
3190
|
if (!theme) throw new Error('Could not find Vuetify theme injection');
|
3114
3191
|
const name = toRef(() => props.theme ?? theme.name.value);
|
3115
3192
|
const current = toRef(() => theme.themes.value[name.value]);
|
3116
|
-
const themeClasses = toRef(() => theme.isDisabled ? undefined :
|
3193
|
+
const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
|
3117
3194
|
const newTheme = {
|
3118
3195
|
...theme,
|
3119
3196
|
name,
|
@@ -4217,7 +4294,10 @@ const makeVToolbarProps = propsFactory({
|
|
4217
4294
|
default: 'default',
|
4218
4295
|
validator: v => allowedDensities$1.includes(v)
|
4219
4296
|
},
|
4220
|
-
extended:
|
4297
|
+
extended: {
|
4298
|
+
type: Boolean,
|
4299
|
+
default: null
|
4300
|
+
},
|
4221
4301
|
extensionHeight: {
|
4222
4302
|
type: [Number, String],
|
4223
4303
|
default: 48
|
@@ -4265,7 +4345,7 @@ const VToolbar = genericComponent()({
|
|
4265
4345
|
const {
|
4266
4346
|
rtlClasses
|
4267
4347
|
} = useRtl();
|
4268
|
-
const isExtended = shallowRef(
|
4348
|
+
const isExtended = shallowRef(props.extended === null ? !!slots.extension?.() : props.extended);
|
4269
4349
|
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));
|
4270
4350
|
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);
|
4271
4351
|
provideDefaults({
|
@@ -4277,7 +4357,7 @@ const VToolbar = genericComponent()({
|
|
4277
4357
|
const hasTitle = !!(props.title || slots.title);
|
4278
4358
|
const hasImage = !!(slots.image || props.image);
|
4279
4359
|
const extension = slots.extension?.();
|
4280
|
-
isExtended.value =
|
4360
|
+
isExtended.value = props.extended === null ? !!extension : props.extended;
|
4281
4361
|
return createVNode(props.tag, {
|
4282
4362
|
"class": normalizeClass(['v-toolbar', {
|
4283
4363
|
'v-toolbar--absolute': props.absolute,
|
@@ -4660,9 +4740,15 @@ function useVariant(props) {
|
|
4660
4740
|
};
|
4661
4741
|
}
|
4662
4742
|
|
4743
|
+
// Types
|
4744
|
+
|
4663
4745
|
const makeVBtnGroupProps = propsFactory({
|
4664
4746
|
baseColor: String,
|
4665
4747
|
divided: Boolean,
|
4748
|
+
direction: {
|
4749
|
+
type: String,
|
4750
|
+
default: 'horizontal'
|
4751
|
+
},
|
4666
4752
|
...makeBorderProps(),
|
4667
4753
|
...makeComponentProps(),
|
4668
4754
|
...makeDensityProps(),
|
@@ -4696,7 +4782,7 @@ const VBtnGroup = genericComponent()({
|
|
4696
4782
|
} = useRounded(props);
|
4697
4783
|
provideDefaults({
|
4698
4784
|
VBtn: {
|
4699
|
-
height: 'auto',
|
4785
|
+
height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
|
4700
4786
|
baseColor: toRef(() => props.baseColor),
|
4701
4787
|
color: toRef(() => props.color),
|
4702
4788
|
density: toRef(() => props.density),
|
@@ -4706,7 +4792,7 @@ const VBtnGroup = genericComponent()({
|
|
4706
4792
|
});
|
4707
4793
|
useRender(() => {
|
4708
4794
|
return createVNode(props.tag, {
|
4709
|
-
"class": normalizeClass(['v-btn-group', {
|
4795
|
+
"class": normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {
|
4710
4796
|
'v-btn-group--divided': props.divided
|
4711
4797
|
}, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
|
4712
4798
|
"style": normalizeStyle(props.style)
|
@@ -5829,8 +5915,8 @@ function rippleCancelShow(e) {
|
|
5829
5915
|
window.clearTimeout(element._ripple.showTimer);
|
5830
5916
|
}
|
5831
5917
|
let keyboardRipple = false;
|
5832
|
-
function keyboardRippleShow(e) {
|
5833
|
-
if (!keyboardRipple && (e.keyCode
|
5918
|
+
function keyboardRippleShow(e, keys) {
|
5919
|
+
if (!keyboardRipple && keys.includes(e.keyCode)) {
|
5834
5920
|
keyboardRipple = true;
|
5835
5921
|
rippleShow(e);
|
5836
5922
|
}
|
@@ -5858,9 +5944,12 @@ function updateRipple(el, binding, wasEnabled) {
|
|
5858
5944
|
el._ripple.enabled = enabled;
|
5859
5945
|
el._ripple.centered = modifiers.center;
|
5860
5946
|
el._ripple.circle = modifiers.circle;
|
5861
|
-
|
5862
|
-
|
5947
|
+
const bindingValue = isObject(value) ? value : {};
|
5948
|
+
if (bindingValue.class) {
|
5949
|
+
el._ripple.class = bindingValue.class;
|
5863
5950
|
}
|
5951
|
+
const allowedKeys = bindingValue.keys ?? [keyCodes.enter, keyCodes.space];
|
5952
|
+
el._ripple.keyDownHandler = e => keyboardRippleShow(e, allowedKeys);
|
5864
5953
|
if (enabled && !wasEnabled) {
|
5865
5954
|
if (modifiers.stop) {
|
5866
5955
|
el.addEventListener('touchstart', rippleStop, {
|
@@ -5882,7 +5971,7 @@ function updateRipple(el, binding, wasEnabled) {
|
|
5882
5971
|
el.addEventListener('mousedown', rippleShow);
|
5883
5972
|
el.addEventListener('mouseup', rippleHide);
|
5884
5973
|
el.addEventListener('mouseleave', rippleHide);
|
5885
|
-
el.addEventListener('keydown', keyboardRippleShow);
|
5974
|
+
el.addEventListener('keydown', e => keyboardRippleShow(e, allowedKeys));
|
5886
5975
|
el.addEventListener('keyup', keyboardRippleHide);
|
5887
5976
|
el.addEventListener('blur', focusRippleHide);
|
5888
5977
|
|
@@ -5902,7 +5991,9 @@ function removeListeners(el) {
|
|
5902
5991
|
el.removeEventListener('touchcancel', rippleHide);
|
5903
5992
|
el.removeEventListener('mouseup', rippleHide);
|
5904
5993
|
el.removeEventListener('mouseleave', rippleHide);
|
5905
|
-
el.
|
5994
|
+
if (el._ripple?.keyDownHandler) {
|
5995
|
+
el.removeEventListener('keydown', el._ripple.keyDownHandler);
|
5996
|
+
}
|
5906
5997
|
el.removeEventListener('keyup', keyboardRippleHide);
|
5907
5998
|
el.removeEventListener('dragstart', rippleHide);
|
5908
5999
|
el.removeEventListener('blur', focusRippleHide);
|
@@ -5911,8 +6002,8 @@ function mounted$4(el, binding) {
|
|
5911
6002
|
updateRipple(el, binding, false);
|
5912
6003
|
}
|
5913
6004
|
function unmounted$4(el) {
|
5914
|
-
delete el._ripple;
|
5915
6005
|
removeListeners(el);
|
6006
|
+
delete el._ripple;
|
5916
6007
|
}
|
5917
6008
|
function updated$1(el, binding) {
|
5918
6009
|
if (binding.value === binding.oldValue) {
|
@@ -6185,6 +6276,31 @@ const VAppBarTitle = genericComponent()({
|
|
6185
6276
|
// Utilities
|
6186
6277
|
const VAlertTitle = createSimpleFunctional('v-alert-title');
|
6187
6278
|
|
6279
|
+
// Utilities
|
6280
|
+
|
6281
|
+
// Types
|
6282
|
+
|
6283
|
+
// Types
|
6284
|
+
|
6285
|
+
// Composables
|
6286
|
+
const makeIconSizeProps = propsFactory({
|
6287
|
+
iconSize: [Number, String],
|
6288
|
+
iconSizes: {
|
6289
|
+
type: Array,
|
6290
|
+
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
6291
|
+
}
|
6292
|
+
}, 'iconSize');
|
6293
|
+
function useIconSizes(props, fallback) {
|
6294
|
+
const iconSize = computed(() => {
|
6295
|
+
const iconSizeMap = new Map(props.iconSizes);
|
6296
|
+
const _iconSize = props.iconSize ?? fallback() ?? 'default';
|
6297
|
+
return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
|
6298
|
+
});
|
6299
|
+
return {
|
6300
|
+
iconSize
|
6301
|
+
};
|
6302
|
+
}
|
6303
|
+
|
6188
6304
|
// Types
|
6189
6305
|
|
6190
6306
|
const allowedTypes = ['success', 'info', 'warning', 'error'];
|
@@ -6224,6 +6340,7 @@ const makeVAlertProps = propsFactory({
|
|
6224
6340
|
...makeDensityProps(),
|
6225
6341
|
...makeDimensionProps(),
|
6226
6342
|
...makeElevationProps(),
|
6343
|
+
...makeIconSizeProps(),
|
6227
6344
|
...makeLocationProps(),
|
6228
6345
|
...makePositionProps(),
|
6229
6346
|
...makeRoundedProps(),
|
@@ -6251,6 +6368,9 @@ const VAlert = genericComponent()({
|
|
6251
6368
|
if (!props.type) return props.icon;
|
6252
6369
|
return props.icon ?? `$${props.type}`;
|
6253
6370
|
});
|
6371
|
+
const {
|
6372
|
+
iconSize
|
6373
|
+
} = useIconSizes(props, () => props.prominent ? 44 : 28);
|
6254
6374
|
const {
|
6255
6375
|
themeClasses
|
6256
6376
|
} = provideTheme(props);
|
@@ -6298,6 +6418,11 @@ const VAlert = genericComponent()({
|
|
6298
6418
|
const hasPrepend = !!(slots.prepend || icon.value);
|
6299
6419
|
const hasTitle = !!(slots.title || props.title);
|
6300
6420
|
const hasClose = !!(slots.close || props.closable);
|
6421
|
+
const iconProps = {
|
6422
|
+
density: props.density,
|
6423
|
+
icon: icon.value,
|
6424
|
+
size: iconSize.value
|
6425
|
+
};
|
6301
6426
|
return isActive.value && createVNode(props.tag, {
|
6302
6427
|
"class": normalizeClass(['v-alert', props.border && {
|
6303
6428
|
'v-alert--border': !!props.border,
|
@@ -6315,19 +6440,14 @@ const VAlert = genericComponent()({
|
|
6315
6440
|
}, null), hasPrepend && createElementVNode("div", {
|
6316
6441
|
"key": "prepend",
|
6317
6442
|
"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, {
|
6443
|
+
}, [!slots.prepend ? createVNode(VIcon, mergeProps({
|
6444
|
+
"key": "prepend-icon"
|
6445
|
+
}, iconProps), null) : createVNode(VDefaultsProvider, {
|
6324
6446
|
"key": "prepend-defaults",
|
6325
6447
|
"disabled": !icon.value,
|
6326
6448
|
"defaults": {
|
6327
6449
|
VIcon: {
|
6328
|
-
|
6329
|
-
icon: icon.value,
|
6330
|
-
size: props.prominent ? 44 : 28
|
6450
|
+
...iconProps
|
6331
6451
|
}
|
6332
6452
|
}
|
6333
6453
|
}, slots.prepend)]), createElementVNode("div", {
|
@@ -7852,6 +7972,7 @@ function getOffsetPosition(isHorizontal, element) {
|
|
7852
7972
|
const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
|
7853
7973
|
const makeVSlideGroupProps = propsFactory({
|
7854
7974
|
centerActive: Boolean,
|
7975
|
+
contentClass: null,
|
7855
7976
|
direction: {
|
7856
7977
|
type: String,
|
7857
7978
|
default: 'horizontal'
|
@@ -8164,7 +8285,7 @@ const VSlideGroup = genericComponent()({
|
|
8164
8285
|
})]), createElementVNode("div", {
|
8165
8286
|
"key": "container",
|
8166
8287
|
"ref": containerRef,
|
8167
|
-
"class":
|
8288
|
+
"class": normalizeClass(['v-slide-group__container', props.contentClass]),
|
8168
8289
|
"onScroll": onScroll
|
8169
8290
|
}, [createElementVNode("div", {
|
8170
8291
|
"ref": contentRef,
|
@@ -8527,16 +8648,85 @@ const VChip = genericComponent()({
|
|
8527
8648
|
}
|
8528
8649
|
});
|
8529
8650
|
|
8651
|
+
const makeVDividerProps = propsFactory({
|
8652
|
+
color: String,
|
8653
|
+
inset: Boolean,
|
8654
|
+
length: [Number, String],
|
8655
|
+
opacity: [Number, String],
|
8656
|
+
thickness: [Number, String],
|
8657
|
+
vertical: Boolean,
|
8658
|
+
...makeComponentProps(),
|
8659
|
+
...makeThemeProps()
|
8660
|
+
}, 'VDivider');
|
8661
|
+
const VDivider = genericComponent()({
|
8662
|
+
name: 'VDivider',
|
8663
|
+
props: makeVDividerProps(),
|
8664
|
+
setup(props, _ref) {
|
8665
|
+
let {
|
8666
|
+
attrs,
|
8667
|
+
slots
|
8668
|
+
} = _ref;
|
8669
|
+
const {
|
8670
|
+
themeClasses
|
8671
|
+
} = provideTheme(props);
|
8672
|
+
const {
|
8673
|
+
textColorClasses,
|
8674
|
+
textColorStyles
|
8675
|
+
} = useTextColor(() => props.color);
|
8676
|
+
const dividerStyles = computed(() => {
|
8677
|
+
const styles = {};
|
8678
|
+
if (props.length) {
|
8679
|
+
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
8680
|
+
}
|
8681
|
+
if (props.thickness) {
|
8682
|
+
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
8683
|
+
}
|
8684
|
+
return styles;
|
8685
|
+
});
|
8686
|
+
useRender(() => {
|
8687
|
+
const divider = createElementVNode("hr", {
|
8688
|
+
"class": normalizeClass([{
|
8689
|
+
'v-divider': true,
|
8690
|
+
'v-divider--inset': props.inset,
|
8691
|
+
'v-divider--vertical': props.vertical
|
8692
|
+
}, themeClasses.value, textColorClasses.value, props.class]),
|
8693
|
+
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
8694
|
+
'--v-border-opacity': props.opacity
|
8695
|
+
}, props.style]),
|
8696
|
+
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
8697
|
+
"role": `${attrs.role || 'separator'}`
|
8698
|
+
}, null);
|
8699
|
+
if (!slots.default) return divider;
|
8700
|
+
return createElementVNode("div", {
|
8701
|
+
"class": normalizeClass(['v-divider__wrapper', {
|
8702
|
+
'v-divider__wrapper--vertical': props.vertical,
|
8703
|
+
'v-divider__wrapper--inset': props.inset
|
8704
|
+
}])
|
8705
|
+
}, [divider, createElementVNode("div", {
|
8706
|
+
"class": "v-divider__content"
|
8707
|
+
}, [slots.default()]), divider]);
|
8708
|
+
});
|
8709
|
+
return {};
|
8710
|
+
}
|
8711
|
+
});
|
8712
|
+
|
8530
8713
|
// Utilities
|
8531
8714
|
|
8532
8715
|
// List
|
8533
8716
|
const ListKey = Symbol.for('vuetify:list');
|
8534
8717
|
function createList() {
|
8718
|
+
let {
|
8719
|
+
filterable
|
8720
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
8721
|
+
filterable: false
|
8722
|
+
};
|
8535
8723
|
const parent = inject$1(ListKey, {
|
8724
|
+
filterable: false,
|
8536
8725
|
hasPrepend: shallowRef(false),
|
8537
8726
|
updateHasPrepend: () => null
|
8538
8727
|
});
|
8539
8728
|
const data = {
|
8729
|
+
filterable: parent.filterable || filterable,
|
8540
8730
|
hasPrepend: shallowRef(false),
|
8541
8731
|
updateHasPrepend: value => {
|
8542
8732
|
if (value) data.hasPrepend.value = value;
|
@@ -9488,6 +9678,9 @@ const VListItem = genericComponent()({
|
|
9488
9678
|
roundedClasses
|
9489
9679
|
} = useRounded(roundedProps);
|
9490
9680
|
const lineClasses = toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);
|
9681
|
+
const rippleOptions = toRef(() => props.ripple !== undefined && !!props.ripple && list?.filterable ? {
|
9682
|
+
keys: [keyCodes.enter]
|
9683
|
+
} : props.ripple);
|
9491
9684
|
const slotProps = computed(() => ({
|
9492
9685
|
isActive: isActive.value,
|
9493
9686
|
select,
|
@@ -9512,8 +9705,9 @@ const VListItem = genericComponent()({
|
|
9512
9705
|
function onKeyDown(e) {
|
9513
9706
|
const target = e.target;
|
9514
9707
|
if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
|
9515
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
9708
|
+
if (e.key === 'Enter' || e.key === ' ' && !list?.filterable) {
|
9516
9709
|
e.preventDefault();
|
9710
|
+
e.stopPropagation();
|
9517
9711
|
e.target.dispatchEvent(new MouseEvent('click', e));
|
9518
9712
|
}
|
9519
9713
|
}
|
@@ -9623,7 +9817,7 @@ const VListItem = genericComponent()({
|
|
9623
9817
|
}), createElementVNode("div", {
|
9624
9818
|
"class": "v-list-item__spacer"
|
9625
9819
|
}, null)])]
|
9626
|
-
}), [[Ripple, isClickable.value &&
|
9820
|
+
}), [[Ripple, isClickable.value && rippleOptions.value]]);
|
9627
9821
|
});
|
9628
9822
|
return {
|
9629
9823
|
activate,
|
@@ -9678,68 +9872,6 @@ const VListSubheader = genericComponent()({
|
|
9678
9872
|
}
|
9679
9873
|
});
|
9680
9874
|
|
9681
|
-
const makeVDividerProps = propsFactory({
|
9682
|
-
color: String,
|
9683
|
-
inset: Boolean,
|
9684
|
-
length: [Number, String],
|
9685
|
-
opacity: [Number, String],
|
9686
|
-
thickness: [Number, String],
|
9687
|
-
vertical: Boolean,
|
9688
|
-
...makeComponentProps(),
|
9689
|
-
...makeThemeProps()
|
9690
|
-
}, 'VDivider');
|
9691
|
-
const VDivider = genericComponent()({
|
9692
|
-
name: 'VDivider',
|
9693
|
-
props: makeVDividerProps(),
|
9694
|
-
setup(props, _ref) {
|
9695
|
-
let {
|
9696
|
-
attrs,
|
9697
|
-
slots
|
9698
|
-
} = _ref;
|
9699
|
-
const {
|
9700
|
-
themeClasses
|
9701
|
-
} = provideTheme(props);
|
9702
|
-
const {
|
9703
|
-
textColorClasses,
|
9704
|
-
textColorStyles
|
9705
|
-
} = useTextColor(() => props.color);
|
9706
|
-
const dividerStyles = computed(() => {
|
9707
|
-
const styles = {};
|
9708
|
-
if (props.length) {
|
9709
|
-
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
9710
|
-
}
|
9711
|
-
if (props.thickness) {
|
9712
|
-
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
9713
|
-
}
|
9714
|
-
return styles;
|
9715
|
-
});
|
9716
|
-
useRender(() => {
|
9717
|
-
const divider = createElementVNode("hr", {
|
9718
|
-
"class": normalizeClass([{
|
9719
|
-
'v-divider': true,
|
9720
|
-
'v-divider--inset': props.inset,
|
9721
|
-
'v-divider--vertical': props.vertical
|
9722
|
-
}, themeClasses.value, textColorClasses.value, props.class]),
|
9723
|
-
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
9724
|
-
'--v-border-opacity': props.opacity
|
9725
|
-
}, props.style]),
|
9726
|
-
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
9727
|
-
"role": `${attrs.role || 'separator'}`
|
9728
|
-
}, null);
|
9729
|
-
if (!slots.default) return divider;
|
9730
|
-
return createElementVNode("div", {
|
9731
|
-
"class": normalizeClass(['v-divider__wrapper', {
|
9732
|
-
'v-divider__wrapper--vertical': props.vertical,
|
9733
|
-
'v-divider__wrapper--inset': props.inset
|
9734
|
-
}])
|
9735
|
-
}, [divider, createElementVNode("div", {
|
9736
|
-
"class": "v-divider__content"
|
9737
|
-
}, [slots.default()]), divider]);
|
9738
|
-
});
|
9739
|
-
return {};
|
9740
|
-
}
|
9741
|
-
});
|
9742
|
-
|
9743
9875
|
// Types
|
9744
9876
|
|
9745
9877
|
const makeVListChildrenProps = propsFactory({
|
@@ -9856,7 +9988,7 @@ function transformItem$3(props, item) {
|
|
9856
9988
|
const _props = {
|
9857
9989
|
title,
|
9858
9990
|
value,
|
9859
|
-
...itemProps
|
9991
|
+
...camelizeProps(itemProps)
|
9860
9992
|
};
|
9861
9993
|
return {
|
9862
9994
|
title: String(_props.title ?? ''),
|
@@ -10008,6 +10140,7 @@ const makeVListProps = propsFactory({
|
|
10008
10140
|
activeClass: String,
|
10009
10141
|
bgColor: String,
|
10010
10142
|
disabled: Boolean,
|
10143
|
+
filterable: Boolean,
|
10011
10144
|
expandIcon: IconValue,
|
10012
10145
|
collapseIcon: IconValue,
|
10013
10146
|
lines: {
|
@@ -10091,7 +10224,9 @@ const VList = genericComponent()({
|
|
10091
10224
|
const activeColor = toRef(() => props.activeColor);
|
10092
10225
|
const baseColor = toRef(() => props.baseColor);
|
10093
10226
|
const color = toRef(() => props.color);
|
10094
|
-
createList(
|
10227
|
+
createList({
|
10228
|
+
filterable: props.filterable
|
10229
|
+
});
|
10095
10230
|
provideDefaults({
|
10096
10231
|
VListGroup: {
|
10097
10232
|
activeColor,
|
@@ -12667,7 +12802,12 @@ function useVirtual(props, items) {
|
|
12667
12802
|
}
|
12668
12803
|
function calculateOffset(index) {
|
12669
12804
|
index = clamp(index, 0, items.value.length - 1);
|
12670
|
-
|
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;
|
12671
12811
|
}
|
12672
12812
|
function calculateIndex(scrollTop) {
|
12673
12813
|
return binaryClosest(offsets, scrollTop);
|
@@ -13021,6 +13161,7 @@ const makeSelectProps = propsFactory({
|
|
13021
13161
|
},
|
13022
13162
|
openOnClear: Boolean,
|
13023
13163
|
itemColor: String,
|
13164
|
+
noAutoScroll: Boolean,
|
13024
13165
|
...makeItemsProps({
|
13025
13166
|
itemChildren: false
|
13026
13167
|
})
|
@@ -13235,7 +13376,7 @@ const VSelect = genericComponent()({
|
|
13235
13376
|
watch(menu, () => {
|
13236
13377
|
if (!props.hideSelected && menu.value && model.value.length) {
|
13237
13378
|
const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
|
13238
|
-
IN_BROWSER && window.requestAnimationFrame(() => {
|
13379
|
+
IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {
|
13239
13380
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
13240
13381
|
});
|
13241
13382
|
}
|
@@ -13327,6 +13468,22 @@ const VSelect = genericComponent()({
|
|
13327
13468
|
key: item.value,
|
13328
13469
|
onClick: () => select(item, null)
|
13329
13470
|
});
|
13471
|
+
if (item.raw.type === 'divider') {
|
13472
|
+
return slots.divider?.({
|
13473
|
+
props: item.raw,
|
13474
|
+
index
|
13475
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13476
|
+
"key": `divider-${index}`
|
13477
|
+
}), null);
|
13478
|
+
}
|
13479
|
+
if (item.raw.type === 'subheader') {
|
13480
|
+
return slots.subheader?.({
|
13481
|
+
props: item.raw,
|
13482
|
+
index
|
13483
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13484
|
+
"key": `subheader-${index}`
|
13485
|
+
}), null);
|
13486
|
+
}
|
13330
13487
|
return slots.item?.({
|
13331
13488
|
item,
|
13332
13489
|
index,
|
@@ -13487,6 +13644,9 @@ function filterItems(items, query, options) {
|
|
13487
13644
|
let match = -1;
|
13488
13645
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
13489
13646
|
if (typeof item === 'object') {
|
13647
|
+
if (['divider', 'subheader'].includes(item.raw?.type)) {
|
13648
|
+
continue;
|
13649
|
+
}
|
13490
13650
|
const filterKeys = keys || Object.keys(transformed);
|
13491
13651
|
for (const key of filterKeys) {
|
13492
13652
|
const value = getPropertyFromItem(transformed, key);
|
@@ -13689,7 +13849,7 @@ const VAutocomplete = genericComponent()({
|
|
13689
13849
|
menu.value = !menu.value;
|
13690
13850
|
}
|
13691
13851
|
function onListKeydown(e) {
|
13692
|
-
if (e.key
|
13852
|
+
if (checkPrintable(e) || e.key === 'Backspace') {
|
13693
13853
|
vTextFieldRef.value?.focus();
|
13694
13854
|
}
|
13695
13855
|
}
|
@@ -13894,6 +14054,7 @@ const VAutocomplete = genericComponent()({
|
|
13894
14054
|
}, props.menuProps), {
|
13895
14055
|
default: () => [hasList && createVNode(VList, mergeProps({
|
13896
14056
|
"ref": listRef,
|
14057
|
+
"filterable": true,
|
13897
14058
|
"selected": selectedValues.value,
|
13898
14059
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
13899
14060
|
"onMousedown": e => e.preventDefault(),
|
@@ -13925,6 +14086,22 @@ const VAutocomplete = genericComponent()({
|
|
13925
14086
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
13926
14087
|
onClick: () => select(item, null)
|
13927
14088
|
});
|
14089
|
+
if (item.raw.type === 'divider') {
|
14090
|
+
return slots.divider?.({
|
14091
|
+
props: item.raw,
|
14092
|
+
index
|
14093
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
14094
|
+
"key": `divider-${index}`
|
14095
|
+
}), null);
|
14096
|
+
}
|
14097
|
+
if (item.raw.type === 'subheader') {
|
14098
|
+
return slots.subheader?.({
|
14099
|
+
props: item.raw,
|
14100
|
+
index
|
14101
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
14102
|
+
"key": `subheader-${index}`
|
14103
|
+
}), null);
|
14104
|
+
}
|
13928
14105
|
return slots.item?.({
|
13929
14106
|
item,
|
13930
14107
|
index,
|
@@ -14069,7 +14246,8 @@ const makeVBadgeProps = propsFactory({
|
|
14069
14246
|
...makeThemeProps(),
|
14070
14247
|
...makeTransitionProps({
|
14071
14248
|
transition: 'scale-rotate-transition'
|
14072
|
-
})
|
14249
|
+
}),
|
14250
|
+
...makeDimensionProps()
|
14073
14251
|
}, 'VBadge');
|
14074
14252
|
const VBadge = genericComponent()({
|
14075
14253
|
name: 'VBadge',
|
@@ -14099,6 +14277,9 @@ const VBadge = genericComponent()({
|
|
14099
14277
|
const base = props.floating ? props.dot ? 2 : 4 : props.dot ? 8 : 12;
|
14100
14278
|
return base + (['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0) : 0);
|
14101
14279
|
});
|
14280
|
+
const {
|
14281
|
+
dimensionStyles
|
14282
|
+
} = useDimension(props);
|
14102
14283
|
useRender(() => {
|
14103
14284
|
const value = Number(props.content);
|
14104
14285
|
const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;
|
@@ -14120,7 +14301,7 @@ const VBadge = genericComponent()({
|
|
14120
14301
|
}, {
|
14121
14302
|
default: () => [withDirectives(createElementVNode("span", mergeProps({
|
14122
14303
|
"class": ['v-badge__badge', themeClasses.value, backgroundColorClasses.value, roundedClasses.value, textColorClasses.value],
|
14123
|
-
"style": [backgroundColorStyles.value, textColorStyles.value, props.inline ? {} : locationStyles.value],
|
14304
|
+
"style": [backgroundColorStyles.value, textColorStyles.value, dimensionStyles.value, props.inline ? {} : locationStyles.value],
|
14124
14305
|
"aria-atomic": "true",
|
14125
14306
|
"aria-label": t(props.label, value),
|
14126
14307
|
"aria-live": "polite",
|
@@ -17529,13 +17710,13 @@ function date(value) {
|
|
17529
17710
|
return null;
|
17530
17711
|
}
|
17531
17712
|
const sundayJanuarySecond2000 = new Date(2000, 0, 2);
|
17532
|
-
function getWeekdays(locale, firstDayOfWeek) {
|
17713
|
+
function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
|
17533
17714
|
const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
|
17534
17715
|
return createRange(7).map(i => {
|
17535
17716
|
const weekday = new Date(sundayJanuarySecond2000);
|
17536
17717
|
weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
|
17537
17718
|
return new Intl.DateTimeFormat(locale, {
|
17538
|
-
weekday: 'narrow'
|
17719
|
+
weekday: weekdayFormat ?? 'narrow'
|
17539
17720
|
}).format(weekday);
|
17540
17721
|
});
|
17541
17722
|
}
|
@@ -17999,9 +18180,9 @@ class VuetifyDateAdapter {
|
|
17999
18180
|
getDiff(date, comparing, unit) {
|
18000
18181
|
return getDiff(date, comparing, unit);
|
18001
18182
|
}
|
18002
|
-
getWeekdays(firstDayOfWeek) {
|
18183
|
+
getWeekdays(firstDayOfWeek, weekdayFormat) {
|
18003
18184
|
const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
|
18004
|
-
return getWeekdays(this.locale, firstDay);
|
18185
|
+
return getWeekdays(this.locale, firstDay, weekdayFormat);
|
18005
18186
|
}
|
18006
18187
|
getYear(date) {
|
18007
18188
|
return getYear(date);
|
@@ -18357,6 +18538,7 @@ const VCombobox = genericComponent()({
|
|
18357
18538
|
_search.value = val ?? '';
|
18358
18539
|
if (!props.multiple && !hasSelectionSlot.value) {
|
18359
18540
|
model.value = [transformItem$3(props, val)];
|
18541
|
+
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
18360
18542
|
}
|
18361
18543
|
if (val && props.multiple && props.delimiters?.length) {
|
18362
18544
|
const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
|
@@ -18437,7 +18619,7 @@ const VCombobox = genericComponent()({
|
|
18437
18619
|
menu.value = !menu.value;
|
18438
18620
|
}
|
18439
18621
|
function onListKeydown(e) {
|
18440
|
-
if (e.key
|
18622
|
+
if (checkPrintable(e) || e.key === 'Backspace') {
|
18441
18623
|
vTextFieldRef.value?.focus();
|
18442
18624
|
}
|
18443
18625
|
}
|
@@ -18642,6 +18824,7 @@ const VCombobox = genericComponent()({
|
|
18642
18824
|
}, props.menuProps), {
|
18643
18825
|
default: () => [hasList && createVNode(VList, mergeProps({
|
18644
18826
|
"ref": listRef,
|
18827
|
+
"filterable": true,
|
18645
18828
|
"selected": selectedValues.value,
|
18646
18829
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
18647
18830
|
"onMousedown": e => e.preventDefault(),
|
@@ -18673,6 +18856,22 @@ const VCombobox = genericComponent()({
|
|
18673
18856
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
18674
18857
|
onClick: () => select(item, null)
|
18675
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
|
+
}
|
18676
18875
|
return slots.item?.({
|
18677
18876
|
item,
|
18678
18877
|
index,
|
@@ -20552,6 +20751,7 @@ const makeVDataTableHeadersProps = propsFactory({
|
|
20552
20751
|
color: String,
|
20553
20752
|
disableSort: Boolean,
|
20554
20753
|
fixedHeader: Boolean,
|
20754
|
+
lastFixed: Boolean,
|
20555
20755
|
multiSort: Boolean,
|
20556
20756
|
sortAscIcon: {
|
20557
20757
|
type: IconValue,
|
@@ -20598,10 +20798,11 @@ const VDataTableHeaders = genericComponent()({
|
|
20598
20798
|
loaderClasses
|
20599
20799
|
} = useLoader(props);
|
20600
20800
|
function getFixedStyles(column, y) {
|
20601
|
-
if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
|
20801
|
+
if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
|
20602
20802
|
return {
|
20603
20803
|
position: 'sticky',
|
20604
|
-
left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
|
20804
|
+
left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
|
20805
|
+
right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
|
20605
20806
|
top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
|
20606
20807
|
};
|
20607
20808
|
}
|
@@ -21110,11 +21311,18 @@ const VDataTableRows = genericComponent()({
|
|
21110
21311
|
}
|
21111
21312
|
});
|
21112
21313
|
|
21314
|
+
// Types
|
21315
|
+
|
21113
21316
|
const makeVTableProps = propsFactory({
|
21114
21317
|
fixedHeader: Boolean,
|
21115
21318
|
fixedFooter: Boolean,
|
21116
21319
|
height: [Number, String],
|
21117
21320
|
hover: Boolean,
|
21321
|
+
striped: {
|
21322
|
+
type: String,
|
21323
|
+
default: null,
|
21324
|
+
validator: v => ['even', 'odd'].includes(v)
|
21325
|
+
},
|
21118
21326
|
...makeComponentProps(),
|
21119
21327
|
...makeDensityProps(),
|
21120
21328
|
...makeTagProps(),
|
@@ -21141,7 +21349,9 @@ const VTable = genericComponent()({
|
|
21141
21349
|
'v-table--fixed-footer': props.fixedFooter,
|
21142
21350
|
'v-table--has-top': !!slots.top,
|
21143
21351
|
'v-table--has-bottom': !!slots.bottom,
|
21144
|
-
'v-table--hover': props.hover
|
21352
|
+
'v-table--hover': props.hover,
|
21353
|
+
'v-table--striped-even': props.striped === 'even',
|
21354
|
+
'v-table--striped-odd': props.striped === 'odd'
|
21145
21355
|
}, themeClasses.value, densityClasses.value, props.class]),
|
21146
21356
|
"style": normalizeStyle(props.style)
|
21147
21357
|
}, {
|
@@ -22316,7 +22526,8 @@ const makeCalendarProps = propsFactory({
|
|
22316
22526
|
firstDayOfWeek: {
|
22317
22527
|
type: [Number, String],
|
22318
22528
|
default: undefined
|
22319
|
-
}
|
22529
|
+
},
|
22530
|
+
weekdayFormat: String
|
22320
22531
|
}, 'calendar');
|
22321
22532
|
function useCalendar(props) {
|
22322
22533
|
const adapter = useDate();
|
@@ -22557,7 +22768,7 @@ const VDatePickerMonth = genericComponent()({
|
|
22557
22768
|
"ref": daysRef,
|
22558
22769
|
"key": daysInMonth.value[0].date?.toString(),
|
22559
22770
|
"class": "v-date-picker-month__days"
|
22560
|
-
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
|
22771
|
+
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => createElementVNode("div", {
|
22561
22772
|
"class": normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
|
22562
22773
|
}, [weekDay])), daysInMonth.value.map((item, i) => {
|
22563
22774
|
const slotProps = {
|
@@ -25147,6 +25358,10 @@ const makeVNumberInputProps = propsFactory({
|
|
25147
25358
|
type: Number,
|
25148
25359
|
default: 0
|
25149
25360
|
},
|
25361
|
+
minFractionDigits: {
|
25362
|
+
type: Number,
|
25363
|
+
default: null
|
25364
|
+
},
|
25150
25365
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
25151
25366
|
}, 'VNumberInput');
|
25152
25367
|
const VNumberInput = genericComponent()({
|
@@ -25177,9 +25392,19 @@ const VNumberInput = genericComponent()({
|
|
25177
25392
|
} = useFocus(props);
|
25178
25393
|
function correctPrecision(val) {
|
25179
25394
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
25180
|
-
|
25181
|
-
|
25182
|
-
|
25395
|
+
if (precision == null) {
|
25396
|
+
return String(val);
|
25397
|
+
}
|
25398
|
+
let fixed = val.toFixed(precision);
|
25399
|
+
if (isFocused.value) {
|
25400
|
+
return Number(fixed).toString(); // trim zeros
|
25401
|
+
}
|
25402
|
+
if ((props.minFractionDigits ?? precision) < precision) {
|
25403
|
+
const trimLimit = precision - props.minFractionDigits;
|
25404
|
+
const [baseDigits, fractionDigits] = fixed.split('.');
|
25405
|
+
fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
|
25406
|
+
}
|
25407
|
+
return fixed;
|
25183
25408
|
}
|
25184
25409
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
25185
25410
|
const _inputText = shallowRef(null);
|
@@ -25234,6 +25459,7 @@ const VNumberInput = genericComponent()({
|
|
25234
25459
|
}
|
25235
25460
|
};
|
25236
25461
|
watch(() => props.precision, () => formatInputValue());
|
25462
|
+
watch(() => props.minFractionDigits, () => formatInputValue());
|
25237
25463
|
onMounted(() => {
|
25238
25464
|
clampModel();
|
25239
25465
|
});
|
@@ -25348,7 +25574,7 @@ const VNumberInput = genericComponent()({
|
|
25348
25574
|
inputText.value = null;
|
25349
25575
|
return;
|
25350
25576
|
}
|
25351
|
-
inputText.value =
|
25577
|
+
inputText.value = correctPrecision(model.value);
|
25352
25578
|
}
|
25353
25579
|
function trimDecimalZeros() {
|
25354
25580
|
if (controlsDisabled.value) return;
|
@@ -25608,9 +25834,10 @@ const VOtpInput = genericComponent()({
|
|
25608
25834
|
e.preventDefault();
|
25609
25835
|
e.stopPropagation();
|
25610
25836
|
const clipboardText = e?.clipboardData?.getData('Text').slice(0, length.value) ?? '';
|
25837
|
+
const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
|
25611
25838
|
if (isValidNumber(clipboardText)) return;
|
25612
25839
|
model.value = clipboardText.split('');
|
25613
|
-
inputRef.value?.[
|
25840
|
+
inputRef.value?.[finalIndex].focus();
|
25614
25841
|
}
|
25615
25842
|
function reset() {
|
25616
25843
|
model.value = [];
|
@@ -29392,7 +29619,7 @@ function createVuetify$1() {
|
|
29392
29619
|
};
|
29393
29620
|
});
|
29394
29621
|
}
|
29395
|
-
const version$1 = "3.8.
|
29622
|
+
const version$1 = "3.8.8-dev.2025-06-08";
|
29396
29623
|
createVuetify$1.version = version$1;
|
29397
29624
|
|
29398
29625
|
// Vue's inject() can only be used in setup
|
@@ -29417,7 +29644,7 @@ const createVuetify = function () {
|
|
29417
29644
|
...options
|
29418
29645
|
});
|
29419
29646
|
};
|
29420
|
-
const version = "3.8.
|
29647
|
+
const version = "3.8.8-dev.2025-06-08";
|
29421
29648
|
createVuetify.version = version;
|
29422
29649
|
|
29423
29650
|
export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };
|