@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
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
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
  */
@@ -14,6 +14,7 @@
14
14
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
15
15
  const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
16
16
  const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
17
+ const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
17
18
 
18
19
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
19
20
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -1773,7 +1774,8 @@
1773
1774
  treeviewCollapse: 'mdi-menu-down',
1774
1775
  treeviewExpand: 'mdi-menu-right',
1775
1776
  eyeDropper: 'mdi-eyedropper',
1776
- upload: 'mdi-cloud-upload'
1777
+ upload: 'mdi-cloud-upload',
1778
+ color: 'mdi-palette'
1777
1779
  };
1778
1780
  const mdi = {
1779
1781
  // Not using mergeProps here, functional components merge props by default (?)
@@ -2785,6 +2787,7 @@
2785
2787
  function genDefaults$1() {
2786
2788
  return {
2787
2789
  defaultTheme: 'light',
2790
+ prefix: 'v-',
2788
2791
  variations: {
2789
2792
  colors: [],
2790
2793
  lighten: 0,
@@ -2866,7 +2869,10 @@
2866
2869
  }
2867
2870
  }
2868
2871
  },
2869
- stylesheetId: 'vuetify-theme-stylesheet'
2872
+ stylesheetId: 'vuetify-theme-stylesheet',
2873
+ scoped: false,
2874
+ unimportant: false,
2875
+ utilities: true
2870
2876
  };
2871
2877
  }
2872
2878
  function parseThemeOptions() {
@@ -2889,21 +2895,21 @@
2889
2895
  function createCssClass(lines, selector, content, scope) {
2890
2896
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2891
2897
  }
2892
- function genCssVariables(theme) {
2898
+ function genCssVariables(theme, prefix) {
2893
2899
  const lightOverlay = theme.dark ? 2 : 1;
2894
2900
  const darkOverlay = theme.dark ? 1 : 2;
2895
2901
  const variables = [];
2896
2902
  for (const [key, value] of Object.entries(theme.colors)) {
2897
2903
  const rgb = parseColor(value);
2898
- variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2904
+ variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2899
2905
  if (!key.startsWith('on-')) {
2900
- variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2906
+ variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2901
2907
  }
2902
2908
  }
2903
2909
  for (const [key, value] of Object.entries(theme.variables)) {
2904
2910
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2905
2911
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2906
- variables.push(`--v-${key}: ${rgb ?? value}`);
2912
+ variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2907
2913
  }
2908
2914
  return variables;
2909
2915
  }
@@ -2947,7 +2953,8 @@
2947
2953
  const scopeSelector = `:where(${scope})`;
2948
2954
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
2949
2955
  }
2950
- function upsertStyles(styleEl, styles) {
2956
+ function upsertStyles(id, cspNonce, styles) {
2957
+ const styleEl = getOrCreateStyleElement(id, cspNonce);
2951
2958
  if (!styleEl) return;
2952
2959
  styleEl.innerHTML = styles;
2953
2960
  }
@@ -2967,8 +2974,17 @@
2967
2974
  // Composables
2968
2975
  function createTheme(options) {
2969
2976
  const parsedOptions = parseThemeOptions(options);
2970
- const name = vue.shallowRef(parsedOptions.defaultTheme);
2977
+ const _name = vue.shallowRef(parsedOptions.defaultTheme);
2971
2978
  const themes = vue.ref(parsedOptions.themes);
2979
+ const systemName = vue.shallowRef('light');
2980
+ const name = vue.computed({
2981
+ get() {
2982
+ return _name.value === 'system' ? systemName.value : _name.value;
2983
+ },
2984
+ set(val) {
2985
+ _name.value = val;
2986
+ }
2987
+ });
2972
2988
  const computedThemes = vue.computed(() => {
2973
2989
  const acc = {};
2974
2990
  for (const [name, original] of Object.entries(themes.value)) {
@@ -2989,28 +3005,49 @@
2989
3005
  const current = vue.toRef(() => computedThemes.value[name.value]);
2990
3006
  const styles = vue.computed(() => {
2991
3007
  const lines = [];
3008
+ const important = parsedOptions.unimportant ? '' : ' !important';
3009
+ const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
2992
3010
  if (current.value?.dark) {
2993
3011
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
2994
3012
  }
2995
- createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
3013
+ createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
2996
3014
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
2997
- createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
2998
- }
2999
- const bgLines = [];
3000
- const fgLines = [];
3001
- const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3002
- for (const key of colors) {
3003
- if (key.startsWith('on-')) {
3004
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3005
- } else {
3006
- 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);
3007
- createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3008
- createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
3015
+ createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
3016
+ }
3017
+ if (parsedOptions.utilities) {
3018
+ const bgLines = [];
3019
+ const fgLines = [];
3020
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3021
+ for (const key of colors) {
3022
+ if (key.startsWith('on-')) {
3023
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3024
+ } else {
3025
+ 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);
3026
+ createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3027
+ createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
3028
+ }
3009
3029
  }
3030
+ lines.push(...bgLines, ...fgLines);
3010
3031
  }
3011
- lines.push(...bgLines, ...fgLines);
3012
3032
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
3013
3033
  });
3034
+ const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
3035
+ const themeNames = vue.toRef(() => Object.keys(computedThemes.value));
3036
+ if (SUPPORTS_MATCH_MEDIA) {
3037
+ const media = window.matchMedia('(prefers-color-scheme: dark)');
3038
+ function updateSystemName() {
3039
+ systemName.value = media.matches ? 'dark' : 'light';
3040
+ }
3041
+ updateSystemName();
3042
+ media.addEventListener('change', updateSystemName, {
3043
+ passive: true
3044
+ });
3045
+ if (vue.getCurrentScope()) {
3046
+ vue.onScopeDispose(() => {
3047
+ media.removeEventListener('change', updateSystemName);
3048
+ });
3049
+ }
3050
+ }
3014
3051
  function install(app) {
3015
3052
  if (parsedOptions.isDisabled) return;
3016
3053
  const head = app._context.provides.usehead;
@@ -3048,22 +3085,55 @@
3048
3085
  updateStyles();
3049
3086
  }
3050
3087
  function updateStyles() {
3051
- upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
3088
+ upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
3052
3089
  }
3053
3090
  }
3054
3091
  }
3055
- const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
3092
+ function change(themeName) {
3093
+ if (!themeNames.value.includes(themeName)) {
3094
+ consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
3095
+ return;
3096
+ }
3097
+ name.value = themeName;
3098
+ }
3099
+ function cycle() {
3100
+ let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
3101
+ const currentIndex = themeArray.indexOf(name.value);
3102
+ const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
3103
+ change(themeArray[nextIndex]);
3104
+ }
3105
+ function toggle() {
3106
+ let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
3107
+ cycle(themeArray);
3108
+ }
3109
+ const globalName = new Proxy(name, {
3110
+ get(target, prop) {
3111
+ return target[prop];
3112
+ },
3113
+ set(target, prop, val) {
3114
+ if (prop === 'value') {
3115
+ deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
3116
+ }
3117
+ // @ts-expect-error
3118
+ target[prop] = val;
3119
+ return true;
3120
+ }
3121
+ });
3056
3122
  return {
3057
3123
  install,
3124
+ change,
3125
+ cycle,
3126
+ toggle,
3058
3127
  isDisabled: parsedOptions.isDisabled,
3059
3128
  name,
3060
3129
  themes,
3061
3130
  current,
3062
3131
  computedThemes,
3132
+ prefix: parsedOptions.prefix,
3063
3133
  themeClasses,
3064
3134
  styles,
3065
3135
  global: {
3066
- name,
3136
+ name: globalName,
3067
3137
  current
3068
3138
  }
3069
3139
  };
@@ -3074,7 +3144,7 @@
3074
3144
  if (!theme) throw new Error('Could not find Vuetify theme injection');
3075
3145
  const name = vue.toRef(() => props.theme ?? theme.name.value);
3076
3146
  const current = vue.toRef(() => theme.themes.value[name.value]);
3077
- const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
3147
+ const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
3078
3148
  const newTheme = {
3079
3149
  ...theme,
3080
3150
  name,
@@ -4621,9 +4691,15 @@
4621
4691
  };
4622
4692
  }
4623
4693
 
4694
+ // Types
4695
+
4624
4696
  const makeVBtnGroupProps = propsFactory({
4625
4697
  baseColor: String,
4626
4698
  divided: Boolean,
4699
+ direction: {
4700
+ type: String,
4701
+ default: 'horizontal'
4702
+ },
4627
4703
  ...makeBorderProps(),
4628
4704
  ...makeComponentProps(),
4629
4705
  ...makeDensityProps(),
@@ -4657,7 +4733,7 @@
4657
4733
  } = useRounded(props);
4658
4734
  provideDefaults({
4659
4735
  VBtn: {
4660
- height: 'auto',
4736
+ height: vue.toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4661
4737
  baseColor: vue.toRef(() => props.baseColor),
4662
4738
  color: vue.toRef(() => props.color),
4663
4739
  density: vue.toRef(() => props.density),
@@ -4667,7 +4743,7 @@
4667
4743
  });
4668
4744
  useRender(() => {
4669
4745
  return vue.createVNode(props.tag, {
4670
- "class": ['v-btn-group', {
4746
+ "class": ['v-btn-group', `v-btn-group--${props.direction}`, {
4671
4747
  'v-btn-group--divided': props.divided
4672
4748
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
4673
4749
  "style": props.style
@@ -6146,6 +6222,31 @@
6146
6222
  // Utilities
6147
6223
  const VAlertTitle = createSimpleFunctional('v-alert-title');
6148
6224
 
6225
+ // Utilities
6226
+
6227
+ // Types
6228
+
6229
+ // Types
6230
+
6231
+ // Composables
6232
+ const makeIconSizeProps = propsFactory({
6233
+ iconSize: [Number, String],
6234
+ iconSizes: {
6235
+ type: Array,
6236
+ default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
6237
+ }
6238
+ }, 'iconSize');
6239
+ function useIconSizes(props, fallback) {
6240
+ const iconSize = vue.computed(() => {
6241
+ const iconSizeMap = new Map(props.iconSizes);
6242
+ const _iconSize = props.iconSize ?? fallback() ?? 'default';
6243
+ return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
6244
+ });
6245
+ return {
6246
+ iconSize
6247
+ };
6248
+ }
6249
+
6149
6250
  // Types
6150
6251
 
6151
6252
  const allowedTypes = ['success', 'info', 'warning', 'error'];
@@ -6185,6 +6286,7 @@
6185
6286
  ...makeDensityProps(),
6186
6287
  ...makeDimensionProps(),
6187
6288
  ...makeElevationProps(),
6289
+ ...makeIconSizeProps(),
6188
6290
  ...makeLocationProps(),
6189
6291
  ...makePositionProps(),
6190
6292
  ...makeRoundedProps(),
@@ -6212,6 +6314,9 @@
6212
6314
  if (!props.type) return props.icon;
6213
6315
  return props.icon ?? `$${props.type}`;
6214
6316
  });
6317
+ const {
6318
+ iconSize
6319
+ } = useIconSizes(props, () => props.prominent ? 44 : 28);
6215
6320
  const {
6216
6321
  themeClasses
6217
6322
  } = provideTheme(props);
@@ -6259,6 +6364,11 @@
6259
6364
  const hasPrepend = !!(slots.prepend || icon.value);
6260
6365
  const hasTitle = !!(slots.title || props.title);
6261
6366
  const hasClose = !!(slots.close || props.closable);
6367
+ const iconProps = {
6368
+ density: props.density,
6369
+ icon: icon.value,
6370
+ size: iconSize.value
6371
+ };
6262
6372
  return isActive.value && vue.createVNode(props.tag, {
6263
6373
  "class": ['v-alert', props.border && {
6264
6374
  'v-alert--border': !!props.border,
@@ -6276,19 +6386,14 @@
6276
6386
  }, null), hasPrepend && vue.createVNode("div", {
6277
6387
  "key": "prepend",
6278
6388
  "class": "v-alert__prepend"
6279
- }, [!slots.prepend ? vue.createVNode(VIcon, {
6280
- "key": "prepend-icon",
6281
- "density": props.density,
6282
- "icon": icon.value,
6283
- "size": props.prominent ? 44 : 28
6284
- }, null) : vue.createVNode(VDefaultsProvider, {
6389
+ }, [!slots.prepend ? vue.createVNode(VIcon, vue.mergeProps({
6390
+ "key": "prepend-icon"
6391
+ }, iconProps), null) : vue.createVNode(VDefaultsProvider, {
6285
6392
  "key": "prepend-defaults",
6286
6393
  "disabled": !icon.value,
6287
6394
  "defaults": {
6288
6395
  VIcon: {
6289
- density: props.density,
6290
- icon: icon.value,
6291
- size: props.prominent ? 44 : 28
6396
+ ...iconProps
6292
6397
  }
6293
6398
  }
6294
6399
  }, slots.prepend)]), vue.createVNode("div", {
@@ -12634,7 +12739,12 @@
12634
12739
  }
12635
12740
  function calculateOffset(index) {
12636
12741
  index = clamp(index, 0, items.value.length - 1);
12637
- return offsets[index] || 0;
12742
+ const whole = Math.floor(index);
12743
+ const fraction = index % 1;
12744
+ const next = whole + 1;
12745
+ const wholeOffset = offsets[whole] || 0;
12746
+ const nextOffset = offsets[next] || wholeOffset;
12747
+ return wholeOffset + (nextOffset - wholeOffset) * fraction;
12638
12748
  }
12639
12749
  function calculateIndex(scrollTop) {
12640
12750
  return binaryClosest(offsets, scrollTop);
@@ -29237,7 +29347,7 @@
29237
29347
  };
29238
29348
  });
29239
29349
  }
29240
- const version$1 = "3.8.4-master.2025-05-12";
29350
+ const version$1 = "3.8.5-dev.2025-05-14";
29241
29351
  createVuetify$1.version = version$1;
29242
29352
 
29243
29353
  // Vue's inject() can only be used in setup
@@ -29262,7 +29372,7 @@
29262
29372
  ...options
29263
29373
  });
29264
29374
  };
29265
- const version = "3.8.4-master.2025-05-12";
29375
+ const version = "3.8.5-dev.2025-05-14";
29266
29376
  createVuetify.version = version;
29267
29377
 
29268
29378
  exports.blueprints = index;