@vuetify/nightly 3.8.7-master.2025-06-03 → 3.8.8-dev.2025-06-04
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 +29 -15
- package/dist/json/attributes.json +3615 -3515
- package/dist/json/importMap-labs.json +18 -18
- package/dist/json/importMap.json +138 -138
- package/dist/json/tags.json +25 -0
- package/dist/json/web-types.json +6428 -6096
- package/dist/vuetify-labs.cjs +363 -145
- package/dist/vuetify-labs.css +3793 -3759
- package/dist/vuetify-labs.d.ts +2390 -1886
- package/dist/vuetify-labs.esm.js +364 -146
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +363 -145
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +357 -134
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3553 -3519
- package/dist/vuetify.d.ts +1545 -1081
- package/dist/vuetify.esm.js +358 -135
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +357 -134
- 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/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 +70 -55
- 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-04
|
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,
|
@@ -17529,13 +17706,13 @@ function date(value) {
|
|
17529
17706
|
return null;
|
17530
17707
|
}
|
17531
17708
|
const sundayJanuarySecond2000 = new Date(2000, 0, 2);
|
17532
|
-
function getWeekdays(locale, firstDayOfWeek) {
|
17709
|
+
function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
|
17533
17710
|
const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
|
17534
17711
|
return createRange(7).map(i => {
|
17535
17712
|
const weekday = new Date(sundayJanuarySecond2000);
|
17536
17713
|
weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
|
17537
17714
|
return new Intl.DateTimeFormat(locale, {
|
17538
|
-
weekday: 'narrow'
|
17715
|
+
weekday: weekdayFormat ?? 'narrow'
|
17539
17716
|
}).format(weekday);
|
17540
17717
|
});
|
17541
17718
|
}
|
@@ -17999,9 +18176,9 @@ class VuetifyDateAdapter {
|
|
17999
18176
|
getDiff(date, comparing, unit) {
|
18000
18177
|
return getDiff(date, comparing, unit);
|
18001
18178
|
}
|
18002
|
-
getWeekdays(firstDayOfWeek) {
|
18179
|
+
getWeekdays(firstDayOfWeek, weekdayFormat) {
|
18003
18180
|
const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
|
18004
|
-
return getWeekdays(this.locale, firstDay);
|
18181
|
+
return getWeekdays(this.locale, firstDay, weekdayFormat);
|
18005
18182
|
}
|
18006
18183
|
getYear(date) {
|
18007
18184
|
return getYear(date);
|
@@ -18357,6 +18534,7 @@ const VCombobox = genericComponent()({
|
|
18357
18534
|
_search.value = val ?? '';
|
18358
18535
|
if (!props.multiple && !hasSelectionSlot.value) {
|
18359
18536
|
model.value = [transformItem$3(props, val)];
|
18537
|
+
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
18360
18538
|
}
|
18361
18539
|
if (val && props.multiple && props.delimiters?.length) {
|
18362
18540
|
const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
|
@@ -18437,7 +18615,7 @@ const VCombobox = genericComponent()({
|
|
18437
18615
|
menu.value = !menu.value;
|
18438
18616
|
}
|
18439
18617
|
function onListKeydown(e) {
|
18440
|
-
if (e.key
|
18618
|
+
if (checkPrintable(e) || e.key === 'Backspace') {
|
18441
18619
|
vTextFieldRef.value?.focus();
|
18442
18620
|
}
|
18443
18621
|
}
|
@@ -18642,6 +18820,7 @@ const VCombobox = genericComponent()({
|
|
18642
18820
|
}, props.menuProps), {
|
18643
18821
|
default: () => [hasList && createVNode(VList, mergeProps({
|
18644
18822
|
"ref": listRef,
|
18823
|
+
"filterable": true,
|
18645
18824
|
"selected": selectedValues.value,
|
18646
18825
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
18647
18826
|
"onMousedown": e => e.preventDefault(),
|
@@ -18673,6 +18852,22 @@ const VCombobox = genericComponent()({
|
|
18673
18852
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
18674
18853
|
onClick: () => select(item, null)
|
18675
18854
|
});
|
18855
|
+
if (item.raw.type === 'divider') {
|
18856
|
+
return slots.divider?.({
|
18857
|
+
props: item.raw,
|
18858
|
+
index
|
18859
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
18860
|
+
"key": `divider-${index}`
|
18861
|
+
}), null);
|
18862
|
+
}
|
18863
|
+
if (item.raw.type === 'subheader') {
|
18864
|
+
return slots.subheader?.({
|
18865
|
+
props: item.raw,
|
18866
|
+
index
|
18867
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
18868
|
+
"key": `subheader-${index}`
|
18869
|
+
}), null);
|
18870
|
+
}
|
18676
18871
|
return slots.item?.({
|
18677
18872
|
item,
|
18678
18873
|
index,
|
@@ -20552,6 +20747,7 @@ const makeVDataTableHeadersProps = propsFactory({
|
|
20552
20747
|
color: String,
|
20553
20748
|
disableSort: Boolean,
|
20554
20749
|
fixedHeader: Boolean,
|
20750
|
+
lastFixed: Boolean,
|
20555
20751
|
multiSort: Boolean,
|
20556
20752
|
sortAscIcon: {
|
20557
20753
|
type: IconValue,
|
@@ -20598,10 +20794,11 @@ const VDataTableHeaders = genericComponent()({
|
|
20598
20794
|
loaderClasses
|
20599
20795
|
} = useLoader(props);
|
20600
20796
|
function getFixedStyles(column, y) {
|
20601
|
-
if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
|
20797
|
+
if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
|
20602
20798
|
return {
|
20603
20799
|
position: 'sticky',
|
20604
|
-
left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
|
20800
|
+
left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
|
20801
|
+
right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
|
20605
20802
|
top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
|
20606
20803
|
};
|
20607
20804
|
}
|
@@ -21110,11 +21307,18 @@ const VDataTableRows = genericComponent()({
|
|
21110
21307
|
}
|
21111
21308
|
});
|
21112
21309
|
|
21310
|
+
// Types
|
21311
|
+
|
21113
21312
|
const makeVTableProps = propsFactory({
|
21114
21313
|
fixedHeader: Boolean,
|
21115
21314
|
fixedFooter: Boolean,
|
21116
21315
|
height: [Number, String],
|
21117
21316
|
hover: Boolean,
|
21317
|
+
striped: {
|
21318
|
+
type: String,
|
21319
|
+
default: null,
|
21320
|
+
validator: v => ['even', 'odd'].includes(v)
|
21321
|
+
},
|
21118
21322
|
...makeComponentProps(),
|
21119
21323
|
...makeDensityProps(),
|
21120
21324
|
...makeTagProps(),
|
@@ -21141,7 +21345,9 @@ const VTable = genericComponent()({
|
|
21141
21345
|
'v-table--fixed-footer': props.fixedFooter,
|
21142
21346
|
'v-table--has-top': !!slots.top,
|
21143
21347
|
'v-table--has-bottom': !!slots.bottom,
|
21144
|
-
'v-table--hover': props.hover
|
21348
|
+
'v-table--hover': props.hover,
|
21349
|
+
'v-table--striped-even': props.striped === 'even',
|
21350
|
+
'v-table--striped-odd': props.striped === 'odd'
|
21145
21351
|
}, themeClasses.value, densityClasses.value, props.class]),
|
21146
21352
|
"style": normalizeStyle(props.style)
|
21147
21353
|
}, {
|
@@ -22316,7 +22522,8 @@ const makeCalendarProps = propsFactory({
|
|
22316
22522
|
firstDayOfWeek: {
|
22317
22523
|
type: [Number, String],
|
22318
22524
|
default: undefined
|
22319
|
-
}
|
22525
|
+
},
|
22526
|
+
weekdayFormat: String
|
22320
22527
|
}, 'calendar');
|
22321
22528
|
function useCalendar(props) {
|
22322
22529
|
const adapter = useDate();
|
@@ -22557,7 +22764,7 @@ const VDatePickerMonth = genericComponent()({
|
|
22557
22764
|
"ref": daysRef,
|
22558
22765
|
"key": daysInMonth.value[0].date?.toString(),
|
22559
22766
|
"class": "v-date-picker-month__days"
|
22560
|
-
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
|
22767
|
+
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => createElementVNode("div", {
|
22561
22768
|
"class": normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
|
22562
22769
|
}, [weekDay])), daysInMonth.value.map((item, i) => {
|
22563
22770
|
const slotProps = {
|
@@ -25147,6 +25354,10 @@ const makeVNumberInputProps = propsFactory({
|
|
25147
25354
|
type: Number,
|
25148
25355
|
default: 0
|
25149
25356
|
},
|
25357
|
+
minFractionDigits: {
|
25358
|
+
type: Number,
|
25359
|
+
default: null
|
25360
|
+
},
|
25150
25361
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
25151
25362
|
}, 'VNumberInput');
|
25152
25363
|
const VNumberInput = genericComponent()({
|
@@ -25177,9 +25388,19 @@ const VNumberInput = genericComponent()({
|
|
25177
25388
|
} = useFocus(props);
|
25178
25389
|
function correctPrecision(val) {
|
25179
25390
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
25180
|
-
|
25181
|
-
|
25182
|
-
|
25391
|
+
if (precision == null) {
|
25392
|
+
return String(val);
|
25393
|
+
}
|
25394
|
+
let fixed = val.toFixed(precision);
|
25395
|
+
if (isFocused.value) {
|
25396
|
+
return Number(fixed).toString(); // trim zeros
|
25397
|
+
}
|
25398
|
+
if ((props.minFractionDigits ?? precision) < precision) {
|
25399
|
+
const trimLimit = precision - props.minFractionDigits;
|
25400
|
+
const [baseDigits, fractionDigits] = fixed.split('.');
|
25401
|
+
fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
|
25402
|
+
}
|
25403
|
+
return fixed;
|
25183
25404
|
}
|
25184
25405
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
25185
25406
|
const _inputText = shallowRef(null);
|
@@ -25234,6 +25455,7 @@ const VNumberInput = genericComponent()({
|
|
25234
25455
|
}
|
25235
25456
|
};
|
25236
25457
|
watch(() => props.precision, () => formatInputValue());
|
25458
|
+
watch(() => props.minFractionDigits, () => formatInputValue());
|
25237
25459
|
onMounted(() => {
|
25238
25460
|
clampModel();
|
25239
25461
|
});
|
@@ -25348,7 +25570,7 @@ const VNumberInput = genericComponent()({
|
|
25348
25570
|
inputText.value = null;
|
25349
25571
|
return;
|
25350
25572
|
}
|
25351
|
-
inputText.value =
|
25573
|
+
inputText.value = correctPrecision(model.value);
|
25352
25574
|
}
|
25353
25575
|
function trimDecimalZeros() {
|
25354
25576
|
if (controlsDisabled.value) return;
|
@@ -25608,9 +25830,10 @@ const VOtpInput = genericComponent()({
|
|
25608
25830
|
e.preventDefault();
|
25609
25831
|
e.stopPropagation();
|
25610
25832
|
const clipboardText = e?.clipboardData?.getData('Text').slice(0, length.value) ?? '';
|
25833
|
+
const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
|
25611
25834
|
if (isValidNumber(clipboardText)) return;
|
25612
25835
|
model.value = clipboardText.split('');
|
25613
|
-
inputRef.value?.[
|
25836
|
+
inputRef.value?.[finalIndex].focus();
|
25614
25837
|
}
|
25615
25838
|
function reset() {
|
25616
25839
|
model.value = [];
|
@@ -29392,7 +29615,7 @@ function createVuetify$1() {
|
|
29392
29615
|
};
|
29393
29616
|
});
|
29394
29617
|
}
|
29395
|
-
const version$1 = "3.8.
|
29618
|
+
const version$1 = "3.8.8-dev.2025-06-04";
|
29396
29619
|
createVuetify$1.version = version$1;
|
29397
29620
|
|
29398
29621
|
// Vue's inject() can only be used in setup
|
@@ -29417,7 +29640,7 @@ const createVuetify = function () {
|
|
29417
29640
|
...options
|
29418
29641
|
});
|
29419
29642
|
};
|
29420
|
-
const version = "3.8.
|
29643
|
+
const version = "3.8.8-dev.2025-06-04";
|
29421
29644
|
createVuetify.version = version;
|
29422
29645
|
|
29423
29646
|
export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };
|