@vuetify/nightly 3.8.4-master.2025-05-12 → 3.8.5-dev.2025-05-14

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.
Files changed (101) hide show
  1. package/CHANGELOG.md +20 -12
  2. package/dist/_component-variables-labs.sass +1 -0
  3. package/dist/json/attributes.json +2152 -1792
  4. package/dist/json/importMap-labs.json +40 -36
  5. package/dist/json/importMap.json +106 -106
  6. package/dist/json/tags.json +95 -0
  7. package/dist/json/web-types.json +5016 -3760
  8. package/dist/vuetify-labs.cjs +429 -61
  9. package/dist/vuetify-labs.css +4205 -4149
  10. package/dist/vuetify-labs.d.ts +2274 -1142
  11. package/dist/vuetify-labs.esm.js +430 -62
  12. package/dist/vuetify-labs.esm.js.map +1 -1
  13. package/dist/vuetify-labs.js +429 -61
  14. package/dist/vuetify-labs.min.css +2 -2
  15. package/dist/vuetify.cjs +151 -41
  16. package/dist/vuetify.cjs.map +1 -1
  17. package/dist/vuetify.css +4725 -4672
  18. package/dist/vuetify.d.ts +544 -487
  19. package/dist/vuetify.esm.js +152 -42
  20. package/dist/vuetify.esm.js.map +1 -1
  21. package/dist/vuetify.js +151 -41
  22. package/dist/vuetify.js.map +1 -1
  23. package/dist/vuetify.min.css +2 -2
  24. package/dist/vuetify.min.js +1181 -1173
  25. package/dist/vuetify.min.js.map +1 -1
  26. package/lib/components/VAlert/VAlert.css +6 -1
  27. package/lib/components/VAlert/VAlert.d.ts +35 -0
  28. package/lib/components/VAlert/VAlert.js +14 -9
  29. package/lib/components/VAlert/VAlert.js.map +1 -1
  30. package/lib/components/VAlert/VAlert.sass +7 -1
  31. package/lib/components/VAutocomplete/VAutocomplete.d.ts +94 -94
  32. package/lib/components/VBottomSheet/VBottomSheet.css +1 -1
  33. package/lib/components/VBottomSheet/VBottomSheet.sass +1 -1
  34. package/lib/components/VBtn/VBtn.css +25 -0
  35. package/lib/components/VBtn/VBtn.sass +9 -0
  36. package/lib/components/VBtn/_variables.scss +1 -0
  37. package/lib/components/VBtnGroup/VBtnGroup.css +30 -7
  38. package/lib/components/VBtnGroup/VBtnGroup.d.ts +58 -32
  39. package/lib/components/VBtnGroup/VBtnGroup.js +7 -3
  40. package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
  41. package/lib/components/VBtnGroup/VBtnGroup.sass +44 -17
  42. package/lib/components/VBtnToggle/VBtnToggle.d.ts +25 -0
  43. package/lib/components/VCheckbox/VCheckbox.d.ts +3 -3
  44. package/lib/components/VCombobox/VCombobox.d.ts +94 -94
  45. package/lib/components/VField/VField.d.ts +3 -3
  46. package/lib/components/VFileInput/VFileInput.d.ts +15 -15
  47. package/lib/components/VInput/VInput.d.ts +4 -4
  48. package/lib/components/VNumberInput/VNumberInput.d.ts +89 -89
  49. package/lib/components/VOverlay/VOverlay.css +1 -1
  50. package/lib/components/VOverlay/_variables.scss +1 -1
  51. package/lib/components/VRadioGroup/VRadioGroup.d.ts +3 -3
  52. package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
  53. package/lib/components/VSelect/VSelect.d.ts +94 -94
  54. package/lib/components/VSlider/VSlider.d.ts +3 -3
  55. package/lib/components/VSnackbarQueue/VSnackbarQueue.d.ts +3 -1
  56. package/lib/components/VSnackbarQueue/VSnackbarQueue.js.map +1 -1
  57. package/lib/components/VSwitch/VSwitch.d.ts +3 -3
  58. package/lib/components/VTextField/VTextField.d.ts +27 -27
  59. package/lib/components/VTextarea/VTextarea.d.ts +15 -15
  60. package/lib/composables/calendar.d.ts +1 -0
  61. package/lib/composables/calendar.js.map +1 -1
  62. package/lib/composables/dateFormat.d.ts +24 -0
  63. package/lib/composables/dateFormat.js +112 -0
  64. package/lib/composables/dateFormat.js.map +1 -0
  65. package/lib/composables/iconSizes.d.ts +28 -0
  66. package/lib/composables/iconSizes.js +23 -0
  67. package/lib/composables/iconSizes.js.map +1 -0
  68. package/lib/composables/theme.d.ts +6 -1
  69. package/lib/composables/theme.js +94 -26
  70. package/lib/composables/theme.js.map +1 -1
  71. package/lib/composables/virtual.js +6 -1
  72. package/lib/composables/virtual.js.map +1 -1
  73. package/lib/entry-bundler.js +1 -1
  74. package/lib/entry-bundler.js.map +1 -1
  75. package/lib/framework.d.ts +51 -43
  76. package/lib/framework.js +1 -1
  77. package/lib/framework.js.map +1 -1
  78. package/lib/iconsets/mdi.js +2 -1
  79. package/lib/iconsets/mdi.js.map +1 -1
  80. package/lib/labs/VColorInput/VColorInput.css +4 -0
  81. package/lib/labs/VColorInput/VColorInput.d.ts +1767 -0
  82. package/lib/labs/VColorInput/VColorInput.js +129 -0
  83. package/lib/labs/VColorInput/VColorInput.js.map +1 -0
  84. package/lib/labs/VColorInput/VColorInput.sass +7 -0
  85. package/lib/labs/VColorInput/_variables.scss +2 -0
  86. package/lib/labs/VColorInput/index.d.ts +1 -0
  87. package/lib/labs/VColorInput/index.js +2 -0
  88. package/lib/labs/VColorInput/index.js.map +1 -0
  89. package/lib/labs/VDateInput/VDateInput.d.ts +133 -108
  90. package/lib/labs/VDateInput/VDateInput.js +43 -10
  91. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  92. package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
  93. package/lib/labs/VIconBtn/VIconBtn.js +7 -11
  94. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
  95. package/lib/labs/components.d.ts +1 -0
  96. package/lib/labs/components.js +1 -0
  97. package/lib/labs/components.js.map +1 -1
  98. package/lib/util/globals.d.ts +1 -0
  99. package/lib/util/globals.js +1 -0
  100. package/lib/util/globals.js.map +1 -1
  101. package/package.json +2 -1
@@ -1,15 +1,16 @@
1
1
  /*!
2
- * Vuetify v3.8.4-master.2025-05-12
2
+ * Vuetify v3.8.5-dev.2025-05-14
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, createVNode, mergeProps, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, TransitionGroup, Transition, toRefs, isRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
7
+ import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, createVNode, mergeProps, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, TransitionGroup, Transition, toRefs, isRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, 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"); }
@@ -1769,7 +1770,8 @@ const aliases = {
1769
1770
  treeviewCollapse: 'mdi-menu-down',
1770
1771
  treeviewExpand: 'mdi-menu-right',
1771
1772
  eyeDropper: 'mdi-eyedropper',
1772
- upload: 'mdi-cloud-upload'
1773
+ upload: 'mdi-cloud-upload',
1774
+ color: 'mdi-palette'
1773
1775
  };
1774
1776
  const mdi = {
1775
1777
  // Not using mergeProps here, functional components merge props by default (?)
@@ -2781,6 +2783,7 @@ const makeThemeProps = propsFactory({
2781
2783
  function genDefaults$1() {
2782
2784
  return {
2783
2785
  defaultTheme: 'light',
2786
+ prefix: 'v-',
2784
2787
  variations: {
2785
2788
  colors: [],
2786
2789
  lighten: 0,
@@ -2862,7 +2865,10 @@ function genDefaults$1() {
2862
2865
  }
2863
2866
  }
2864
2867
  },
2865
- stylesheetId: 'vuetify-theme-stylesheet'
2868
+ stylesheetId: 'vuetify-theme-stylesheet',
2869
+ scoped: false,
2870
+ unimportant: false,
2871
+ utilities: true
2866
2872
  };
2867
2873
  }
2868
2874
  function parseThemeOptions() {
@@ -2885,21 +2891,21 @@ function parseThemeOptions() {
2885
2891
  function createCssClass(lines, selector, content, scope) {
2886
2892
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2887
2893
  }
2888
- function genCssVariables(theme) {
2894
+ function genCssVariables(theme, prefix) {
2889
2895
  const lightOverlay = theme.dark ? 2 : 1;
2890
2896
  const darkOverlay = theme.dark ? 1 : 2;
2891
2897
  const variables = [];
2892
2898
  for (const [key, value] of Object.entries(theme.colors)) {
2893
2899
  const rgb = parseColor(value);
2894
- variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2900
+ variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2895
2901
  if (!key.startsWith('on-')) {
2896
- variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2902
+ variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2897
2903
  }
2898
2904
  }
2899
2905
  for (const [key, value] of Object.entries(theme.variables)) {
2900
2906
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2901
2907
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2902
- variables.push(`--v-${key}: ${rgb ?? value}`);
2908
+ variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2903
2909
  }
2904
2910
  return variables;
2905
2911
  }
@@ -2943,7 +2949,8 @@ function getScopedSelector(selector, scope) {
2943
2949
  const scopeSelector = `:where(${scope})`;
2944
2950
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
2945
2951
  }
2946
- function upsertStyles(styleEl, styles) {
2952
+ function upsertStyles(id, cspNonce, styles) {
2953
+ const styleEl = getOrCreateStyleElement(id, cspNonce);
2947
2954
  if (!styleEl) return;
2948
2955
  styleEl.innerHTML = styles;
2949
2956
  }
@@ -2963,8 +2970,17 @@ function getOrCreateStyleElement(id, cspNonce) {
2963
2970
  // Composables
2964
2971
  function createTheme(options) {
2965
2972
  const parsedOptions = parseThemeOptions(options);
2966
- const name = shallowRef(parsedOptions.defaultTheme);
2973
+ const _name = shallowRef(parsedOptions.defaultTheme);
2967
2974
  const themes = ref(parsedOptions.themes);
2975
+ const systemName = shallowRef('light');
2976
+ const name = computed({
2977
+ get() {
2978
+ return _name.value === 'system' ? systemName.value : _name.value;
2979
+ },
2980
+ set(val) {
2981
+ _name.value = val;
2982
+ }
2983
+ });
2968
2984
  const computedThemes = computed(() => {
2969
2985
  const acc = {};
2970
2986
  for (const [name, original] of Object.entries(themes.value)) {
@@ -2985,28 +3001,49 @@ function createTheme(options) {
2985
3001
  const current = toRef(() => computedThemes.value[name.value]);
2986
3002
  const styles = computed(() => {
2987
3003
  const lines = [];
3004
+ const important = parsedOptions.unimportant ? '' : ' !important';
3005
+ const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
2988
3006
  if (current.value?.dark) {
2989
3007
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
2990
3008
  }
2991
- createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
3009
+ createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
2992
3010
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
2993
- createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
2994
- }
2995
- const bgLines = [];
2996
- const fgLines = [];
2997
- const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2998
- for (const key of colors) {
2999
- if (key.startsWith('on-')) {
3000
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3001
- } else {
3002
- createCssClass(bgLines, `.bg-${key}`, [`--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`, `background-color: rgb(var(--v-theme-${key})) !important`, `color: rgb(var(--v-theme-on-${key})) !important`], parsedOptions.scope);
3003
- createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3004
- createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
3011
+ createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
3012
+ }
3013
+ if (parsedOptions.utilities) {
3014
+ const bgLines = [];
3015
+ const fgLines = [];
3016
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3017
+ for (const key of colors) {
3018
+ if (key.startsWith('on-')) {
3019
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3020
+ } else {
3021
+ 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);
3022
+ createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3023
+ createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
3024
+ }
3005
3025
  }
3026
+ lines.push(...bgLines, ...fgLines);
3006
3027
  }
3007
- lines.push(...bgLines, ...fgLines);
3008
3028
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
3009
3029
  });
3030
+ const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
3031
+ const themeNames = toRef(() => Object.keys(computedThemes.value));
3032
+ if (SUPPORTS_MATCH_MEDIA) {
3033
+ const media = window.matchMedia('(prefers-color-scheme: dark)');
3034
+ function updateSystemName() {
3035
+ systemName.value = media.matches ? 'dark' : 'light';
3036
+ }
3037
+ updateSystemName();
3038
+ media.addEventListener('change', updateSystemName, {
3039
+ passive: true
3040
+ });
3041
+ if (getCurrentScope()) {
3042
+ onScopeDispose(() => {
3043
+ media.removeEventListener('change', updateSystemName);
3044
+ });
3045
+ }
3046
+ }
3010
3047
  function install(app) {
3011
3048
  if (parsedOptions.isDisabled) return;
3012
3049
  const head = app._context.provides.usehead;
@@ -3044,22 +3081,55 @@ function createTheme(options) {
3044
3081
  updateStyles();
3045
3082
  }
3046
3083
  function updateStyles() {
3047
- upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
3084
+ upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
3048
3085
  }
3049
3086
  }
3050
3087
  }
3051
- const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
3088
+ function change(themeName) {
3089
+ if (!themeNames.value.includes(themeName)) {
3090
+ consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
3091
+ return;
3092
+ }
3093
+ name.value = themeName;
3094
+ }
3095
+ function cycle() {
3096
+ let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
3097
+ const currentIndex = themeArray.indexOf(name.value);
3098
+ const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
3099
+ change(themeArray[nextIndex]);
3100
+ }
3101
+ function toggle() {
3102
+ let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
3103
+ cycle(themeArray);
3104
+ }
3105
+ const globalName = new Proxy(name, {
3106
+ get(target, prop) {
3107
+ return target[prop];
3108
+ },
3109
+ set(target, prop, val) {
3110
+ if (prop === 'value') {
3111
+ deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
3112
+ }
3113
+ // @ts-expect-error
3114
+ target[prop] = val;
3115
+ return true;
3116
+ }
3117
+ });
3052
3118
  return {
3053
3119
  install,
3120
+ change,
3121
+ cycle,
3122
+ toggle,
3054
3123
  isDisabled: parsedOptions.isDisabled,
3055
3124
  name,
3056
3125
  themes,
3057
3126
  current,
3058
3127
  computedThemes,
3128
+ prefix: parsedOptions.prefix,
3059
3129
  themeClasses,
3060
3130
  styles,
3061
3131
  global: {
3062
- name,
3132
+ name: globalName,
3063
3133
  current
3064
3134
  }
3065
3135
  };
@@ -3070,7 +3140,7 @@ function provideTheme(props) {
3070
3140
  if (!theme) throw new Error('Could not find Vuetify theme injection');
3071
3141
  const name = toRef(() => props.theme ?? theme.name.value);
3072
3142
  const current = toRef(() => theme.themes.value[name.value]);
3073
- const themeClasses = toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
3143
+ const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
3074
3144
  const newTheme = {
3075
3145
  ...theme,
3076
3146
  name,
@@ -4617,9 +4687,15 @@ function useVariant(props) {
4617
4687
  };
4618
4688
  }
4619
4689
 
4690
+ // Types
4691
+
4620
4692
  const makeVBtnGroupProps = propsFactory({
4621
4693
  baseColor: String,
4622
4694
  divided: Boolean,
4695
+ direction: {
4696
+ type: String,
4697
+ default: 'horizontal'
4698
+ },
4623
4699
  ...makeBorderProps(),
4624
4700
  ...makeComponentProps(),
4625
4701
  ...makeDensityProps(),
@@ -4653,7 +4729,7 @@ const VBtnGroup = genericComponent()({
4653
4729
  } = useRounded(props);
4654
4730
  provideDefaults({
4655
4731
  VBtn: {
4656
- height: 'auto',
4732
+ height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4657
4733
  baseColor: toRef(() => props.baseColor),
4658
4734
  color: toRef(() => props.color),
4659
4735
  density: toRef(() => props.density),
@@ -4663,7 +4739,7 @@ const VBtnGroup = genericComponent()({
4663
4739
  });
4664
4740
  useRender(() => {
4665
4741
  return createVNode(props.tag, {
4666
- "class": ['v-btn-group', {
4742
+ "class": ['v-btn-group', `v-btn-group--${props.direction}`, {
4667
4743
  'v-btn-group--divided': props.divided
4668
4744
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
4669
4745
  "style": props.style
@@ -6142,6 +6218,31 @@ const VAppBarTitle = genericComponent()({
6142
6218
  // Utilities
6143
6219
  const VAlertTitle = createSimpleFunctional('v-alert-title');
6144
6220
 
6221
+ // Utilities
6222
+
6223
+ // Types
6224
+
6225
+ // Types
6226
+
6227
+ // Composables
6228
+ const makeIconSizeProps = propsFactory({
6229
+ iconSize: [Number, String],
6230
+ iconSizes: {
6231
+ type: Array,
6232
+ default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
6233
+ }
6234
+ }, 'iconSize');
6235
+ function useIconSizes(props, fallback) {
6236
+ const iconSize = computed(() => {
6237
+ const iconSizeMap = new Map(props.iconSizes);
6238
+ const _iconSize = props.iconSize ?? fallback() ?? 'default';
6239
+ return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
6240
+ });
6241
+ return {
6242
+ iconSize
6243
+ };
6244
+ }
6245
+
6145
6246
  // Types
6146
6247
 
6147
6248
  const allowedTypes = ['success', 'info', 'warning', 'error'];
@@ -6181,6 +6282,7 @@ const makeVAlertProps = propsFactory({
6181
6282
  ...makeDensityProps(),
6182
6283
  ...makeDimensionProps(),
6183
6284
  ...makeElevationProps(),
6285
+ ...makeIconSizeProps(),
6184
6286
  ...makeLocationProps(),
6185
6287
  ...makePositionProps(),
6186
6288
  ...makeRoundedProps(),
@@ -6208,6 +6310,9 @@ const VAlert = genericComponent()({
6208
6310
  if (!props.type) return props.icon;
6209
6311
  return props.icon ?? `$${props.type}`;
6210
6312
  });
6313
+ const {
6314
+ iconSize
6315
+ } = useIconSizes(props, () => props.prominent ? 44 : 28);
6211
6316
  const {
6212
6317
  themeClasses
6213
6318
  } = provideTheme(props);
@@ -6255,6 +6360,11 @@ const VAlert = genericComponent()({
6255
6360
  const hasPrepend = !!(slots.prepend || icon.value);
6256
6361
  const hasTitle = !!(slots.title || props.title);
6257
6362
  const hasClose = !!(slots.close || props.closable);
6363
+ const iconProps = {
6364
+ density: props.density,
6365
+ icon: icon.value,
6366
+ size: iconSize.value
6367
+ };
6258
6368
  return isActive.value && createVNode(props.tag, {
6259
6369
  "class": ['v-alert', props.border && {
6260
6370
  'v-alert--border': !!props.border,
@@ -6272,19 +6382,14 @@ const VAlert = genericComponent()({
6272
6382
  }, null), hasPrepend && createVNode("div", {
6273
6383
  "key": "prepend",
6274
6384
  "class": "v-alert__prepend"
6275
- }, [!slots.prepend ? createVNode(VIcon, {
6276
- "key": "prepend-icon",
6277
- "density": props.density,
6278
- "icon": icon.value,
6279
- "size": props.prominent ? 44 : 28
6280
- }, null) : createVNode(VDefaultsProvider, {
6385
+ }, [!slots.prepend ? createVNode(VIcon, mergeProps({
6386
+ "key": "prepend-icon"
6387
+ }, iconProps), null) : createVNode(VDefaultsProvider, {
6281
6388
  "key": "prepend-defaults",
6282
6389
  "disabled": !icon.value,
6283
6390
  "defaults": {
6284
6391
  VIcon: {
6285
- density: props.density,
6286
- icon: icon.value,
6287
- size: props.prominent ? 44 : 28
6392
+ ...iconProps
6288
6393
  }
6289
6394
  }
6290
6395
  }, slots.prepend)]), createVNode("div", {
@@ -12630,7 +12735,12 @@ function useVirtual(props, items) {
12630
12735
  }
12631
12736
  function calculateOffset(index) {
12632
12737
  index = clamp(index, 0, items.value.length - 1);
12633
- return offsets[index] || 0;
12738
+ const whole = Math.floor(index);
12739
+ const fraction = index % 1;
12740
+ const next = whole + 1;
12741
+ const wholeOffset = offsets[whole] || 0;
12742
+ const nextOffset = offsets[next] || wholeOffset;
12743
+ return wholeOffset + (nextOffset - wholeOffset) * fraction;
12634
12744
  }
12635
12745
  function calculateIndex(scrollTop) {
12636
12746
  return binaryClosest(offsets, scrollTop);
@@ -29233,7 +29343,7 @@ function createVuetify$1() {
29233
29343
  };
29234
29344
  });
29235
29345
  }
29236
- const version$1 = "3.8.4-master.2025-05-12";
29346
+ const version$1 = "3.8.5-dev.2025-05-14";
29237
29347
  createVuetify$1.version = version$1;
29238
29348
 
29239
29349
  // Vue's inject() can only be used in setup
@@ -29258,7 +29368,7 @@ const createVuetify = function () {
29258
29368
  ...options
29259
29369
  });
29260
29370
  };
29261
- const version = "3.8.4-master.2025-05-12";
29371
+ const version = "3.8.5-dev.2025-05-14";
29262
29372
  createVuetify.version = version;
29263
29373
 
29264
29374
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };