@vuetify/nightly 3.8.0-master.2025-04-04 → 3.8.1-dev.2025-04-07

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/dist/vuetify.d.ts CHANGED
@@ -82943,45 +82943,40 @@ declare module 'vue' {
82943
82943
  $children?: VNodeChild
82944
82944
  }
82945
82945
  export interface GlobalComponents {
82946
- VAutocomplete: VAutocomplete
82946
+ VApp: VApp
82947
82947
  VAppBar: VAppBar
82948
82948
  VAppBarNavIcon: VAppBarNavIcon
82949
82949
  VAppBarTitle: VAppBarTitle
82950
82950
  VAvatar: VAvatar
82951
- VApp: VApp
82951
+ VAlert: VAlert
82952
+ VAlertTitle: VAlertTitle
82953
+ VAutocomplete: VAutocomplete
82952
82954
  VBadge: VBadge
82953
82955
  VBanner: VBanner
82954
82956
  VBannerActions: VBannerActions
82955
82957
  VBannerText: VBannerText
82956
- VAlert: VAlert
82957
- VAlertTitle: VAlertTitle
82958
- VBtn: VBtn
82959
82958
  VBreadcrumbs: VBreadcrumbs
82960
82959
  VBreadcrumbsItem: VBreadcrumbsItem
82961
82960
  VBreadcrumbsDivider: VBreadcrumbsDivider
82961
+ VBottomSheet: VBottomSheet
82962
+ VBottomNavigation: VBottomNavigation
82963
+ VBtnGroup: VBtnGroup
82964
+ VBtn: VBtn
82965
+ VCheckbox: VCheckbox
82966
+ VCheckboxBtn: VCheckboxBtn
82962
82967
  VCard: VCard
82963
82968
  VCardActions: VCardActions
82964
82969
  VCardItem: VCardItem
82965
82970
  VCardSubtitle: VCardSubtitle
82966
82971
  VCardText: VCardText
82967
82972
  VCardTitle: VCardTitle
82968
- VCheckbox: VCheckbox
82969
- VCheckboxBtn: VCheckboxBtn
82970
- VBottomNavigation: VBottomNavigation
82971
82973
  VBtnToggle: VBtnToggle
82974
+ VChipGroup: VChipGroup
82972
82975
  VCarousel: VCarousel
82973
82976
  VCarouselItem: VCarouselItem
82974
- VBottomSheet: VBottomSheet
82975
- VChip: VChip
82976
- VBtnGroup: VBtnGroup
82977
- VChipGroup: VChipGroup
82978
82977
  VColorPicker: VColorPicker
82979
- VDatePicker: VDatePicker
82980
- VDatePickerControls: VDatePickerControls
82981
- VDatePickerHeader: VDatePickerHeader
82982
- VDatePickerMonth: VDatePickerMonth
82983
- VDatePickerMonths: VDatePickerMonths
82984
- VDatePickerYears: VDatePickerYears
82978
+ VCode: VCode
82979
+ VCombobox: VCombobox
82985
82980
  VDataTable: VDataTable
82986
82981
  VDataTableHeaders: VDataTableHeaders
82987
82982
  VDataTableFooter: VDataTableFooter
@@ -82989,31 +82984,38 @@ declare module 'vue' {
82989
82984
  VDataTableRow: VDataTableRow
82990
82985
  VDataTableVirtual: VDataTableVirtual
82991
82986
  VDataTableServer: VDataTableServer
82992
- VCode: VCode
82987
+ VDatePicker: VDatePicker
82988
+ VDatePickerControls: VDatePickerControls
82989
+ VDatePickerHeader: VDatePickerHeader
82990
+ VDatePickerMonth: VDatePickerMonth
82991
+ VDatePickerMonths: VDatePickerMonths
82992
+ VDatePickerYears: VDatePickerYears
82993
82993
  VCounter: VCounter
82994
- VDialog: VDialog
82995
- VCombobox: VCombobox
82996
- VDivider: VDivider
82997
- VFileInput: VFileInput
82998
- VFab: VFab
82994
+ VChip: VChip
82999
82995
  VEmptyState: VEmptyState
82996
+ VDivider: VDivider
83000
82997
  VExpansionPanels: VExpansionPanels
83001
82998
  VExpansionPanel: VExpansionPanel
83002
82999
  VExpansionPanelText: VExpansionPanelText
83003
83000
  VExpansionPanelTitle: VExpansionPanelTitle
83001
+ VDialog: VDialog
83002
+ VFab: VFab
83004
83003
  VField: VField
83005
83004
  VFieldLabel: VFieldLabel
83006
83005
  VFooter: VFooter
83006
+ VFileInput: VFileInput
83007
83007
  VIcon: VIcon
83008
83008
  VComponentIcon: VComponentIcon
83009
83009
  VSvgIcon: VSvgIcon
83010
83010
  VLigatureIcon: VLigatureIcon
83011
83011
  VClassIcon: VClassIcon
83012
- VImg: VImg
83012
+ VInput: VInput
83013
+ VLabel: VLabel
83014
+ VInfiniteScroll: VInfiniteScroll
83013
83015
  VItemGroup: VItemGroup
83014
83016
  VItem: VItem
83015
- VInput: VInput
83016
83017
  VKbd: VKbd
83018
+ VImg: VImg
83017
83019
  VList: VList
83018
83020
  VListGroup: VListGroup
83019
83021
  VListImg: VListImg
@@ -83023,35 +83025,33 @@ declare module 'vue' {
83023
83025
  VListItemSubtitle: VListItemSubtitle
83024
83026
  VListItemTitle: VListItemTitle
83025
83027
  VListSubheader: VListSubheader
83026
- VInfiniteScroll: VInfiniteScroll
83027
- VLabel: VLabel
83028
- VMenu: VMenu
83029
- VNumberInput: VNumberInput
83030
83028
  VMain: VMain
83031
83029
  VNavigationDrawer: VNavigationDrawer
83032
- VPagination: VPagination
83030
+ VMenu: VMenu
83033
83031
  VOtpInput: VOtpInput
83034
83032
  VOverlay: VOverlay
83035
- VProgressCircular: VProgressCircular
83036
- VProgressLinear: VProgressLinear
83037
83033
  VMessages: VMessages
83034
+ VNumberInput: VNumberInput
83035
+ VPagination: VPagination
83036
+ VProgressLinear: VProgressLinear
83038
83037
  VRadioGroup: VRadioGroup
83038
+ VProgressCircular: VProgressCircular
83039
+ VSelect: VSelect
83039
83040
  VRating: VRating
83040
83041
  VSelectionControl: VSelectionControl
83041
83042
  VSelectionControlGroup: VSelectionControlGroup
83042
- VSkeletonLoader: VSkeletonLoader
83043
- VSelect: VSelect
83044
83043
  VSlideGroup: VSlideGroup
83045
83044
  VSlideGroupItem: VSlideGroupItem
83045
+ VSnackbar: VSnackbar
83046
83046
  VSheet: VSheet
83047
+ VSkeletonLoader: VSkeletonLoader
83047
83048
  VSlider: VSlider
83048
- VSnackbar: VSnackbar
83049
83049
  VSwitch: VSwitch
83050
- VSystemBar: VSystemBar
83051
83050
  VTab: VTab
83052
83051
  VTabs: VTabs
83053
83052
  VTabsWindow: VTabsWindow
83054
83053
  VTabsWindowItem: VTabsWindowItem
83054
+ VSystemBar: VSystemBar
83055
83055
  VStepper: VStepper
83056
83056
  VStepperActions: VStepperActions
83057
83057
  VStepperHeader: VStepperHeader
@@ -83059,34 +83059,34 @@ declare module 'vue' {
83059
83059
  VStepperWindow: VStepperWindow
83060
83060
  VStepperWindowItem: VStepperWindowItem
83061
83061
  VTextarea: VTextarea
83062
+ VTable: VTable
83062
83063
  VToolbar: VToolbar
83063
83064
  VToolbarTitle: VToolbarTitle
83064
83065
  VToolbarItems: VToolbarItems
83065
- VTable: VTable
83066
+ VTextField: VTextField
83066
83067
  VTimeline: VTimeline
83067
83068
  VTimelineItem: VTimelineItem
83068
- VTooltip: VTooltip
83069
83069
  VWindow: VWindow
83070
83070
  VWindowItem: VWindowItem
83071
- VTextField: VTextField
83071
+ VTooltip: VTooltip
83072
83072
  VConfirmEdit: VConfirmEdit
83073
83073
  VDataIterator: VDataIterator
83074
- VHover: VHover
83075
83074
  VDefaultsProvider: VDefaultsProvider
83075
+ VForm: VForm
83076
+ VHover: VHover
83076
83077
  VContainer: VContainer
83077
83078
  VCol: VCol
83078
83079
  VRow: VRow
83079
83080
  VSpacer: VSpacer
83080
- VForm: VForm
83081
- VLazy: VLazy
83082
83081
  VLayout: VLayout
83083
83082
  VLayoutItem: VLayoutItem
83083
+ VLazy: VLazy
83084
83084
  VLocaleProvider: VLocaleProvider
83085
83085
  VNoSsr: VNoSsr
83086
83086
  VParallax: VParallax
83087
83087
  VRadio: VRadio
83088
- VResponsive: VResponsive
83089
83088
  VRangeSlider: VRangeSlider
83089
+ VResponsive: VResponsive
83090
83090
  VSnackbarQueue: VSnackbarQueue
83091
83091
  VSparkline: VSparkline
83092
83092
  VSpeedDial: VSpeedDial
@@ -83111,6 +83111,9 @@ declare module 'vue' {
83111
83111
  VDialogTransition: VDialogTransition
83112
83112
  VFileUpload: VFileUpload
83113
83113
  VFileUploadItem: VFileUploadItem
83114
+ VStepperVertical: VStepperVertical
83115
+ VStepperVerticalItem: VStepperVerticalItem
83116
+ VStepperVerticalActions: VStepperVerticalActions
83114
83117
  VCalendar: VCalendar
83115
83118
  VCalendarDay: VCalendarDay
83116
83119
  VCalendarHeader: VCalendarHeader
@@ -83118,18 +83121,15 @@ declare module 'vue' {
83118
83121
  VCalendarIntervalEvent: VCalendarIntervalEvent
83119
83122
  VCalendarMonthDay: VCalendarMonthDay
83120
83123
  VIconBtn: VIconBtn
83121
- VTreeview: VTreeview
83122
- VTreeviewItem: VTreeviewItem
83123
- VTreeviewGroup: VTreeviewGroup
83124
+ VPicker: VPicker
83125
+ VPickerTitle: VPickerTitle
83124
83126
  VTimePicker: VTimePicker
83125
83127
  VTimePickerClock: VTimePickerClock
83126
83128
  VTimePickerControls: VTimePickerControls
83127
- VPicker: VPicker
83128
- VPickerTitle: VPickerTitle
83129
- VStepperVertical: VStepperVertical
83130
- VStepperVerticalItem: VStepperVerticalItem
83131
- VStepperVerticalActions: VStepperVerticalActions
83132
- VPullToRefresh: VPullToRefresh
83129
+ VTreeview: VTreeview
83130
+ VTreeviewItem: VTreeviewItem
83131
+ VTreeviewGroup: VTreeviewGroup
83133
83132
  VDateInput: VDateInput
83133
+ VPullToRefresh: VPullToRefresh
83134
83134
  }
83135
83135
  }
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.0-master.2025-04-04
2
+ * Vuetify v3.8.1-dev.2025-04-07
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -2855,93 +2855,144 @@ function parseThemeOptions() {
2855
2855
  themes
2856
2856
  });
2857
2857
  }
2858
+ function createCssClass(lines, selector, content, scope) {
2859
+ lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2860
+ }
2861
+ function genCssVariables(theme) {
2862
+ const lightOverlay = theme.dark ? 2 : 1;
2863
+ const darkOverlay = theme.dark ? 1 : 2;
2864
+ const variables = [];
2865
+ for (const [key, value] of Object.entries(theme.colors)) {
2866
+ const rgb = parseColor(value);
2867
+ variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2868
+ if (!key.startsWith('on-')) {
2869
+ variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2870
+ }
2871
+ }
2872
+ for (const [key, value] of Object.entries(theme.variables)) {
2873
+ const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2874
+ const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2875
+ variables.push(`--v-${key}: ${rgb ?? value}`);
2876
+ }
2877
+ return variables;
2878
+ }
2879
+ function genVariation(name, color, variations) {
2880
+ const object = {};
2881
+ if (variations) {
2882
+ for (const variation of ['lighten', 'darken']) {
2883
+ const fn = variation === 'lighten' ? lighten : darken;
2884
+ for (const amount of createRange(variations[variation], 1)) {
2885
+ object[`${name}-${variation}-${amount}`] = RGBtoHex(fn(parseColor(color), amount));
2886
+ }
2887
+ }
2888
+ }
2889
+ return object;
2890
+ }
2891
+ function genVariations(colors, variations) {
2892
+ if (!variations) return {};
2893
+ let variationColors = {};
2894
+ for (const name of variations.colors) {
2895
+ const color = colors[name];
2896
+ if (!color) continue;
2897
+ variationColors = {
2898
+ ...variationColors,
2899
+ ...genVariation(name, color, variations)
2900
+ };
2901
+ }
2902
+ return variationColors;
2903
+ }
2904
+ function genOnColors(colors) {
2905
+ const onColors = {};
2906
+ for (const color of Object.keys(colors)) {
2907
+ if (color.startsWith('on-') || colors[`on-${color}`]) continue;
2908
+ const onColor = `on-${color}`;
2909
+ const colorVal = parseColor(colors[color]);
2910
+ onColors[onColor] = getForeground(colorVal);
2911
+ }
2912
+ return onColors;
2913
+ }
2914
+ function getScopedSelector(selector, scope) {
2915
+ if (!scope) return selector;
2916
+ const scopeSelector = `:where(${scope})`;
2917
+ return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
2918
+ }
2919
+ function upsertStyles(styleEl, styles) {
2920
+ if (!styleEl) return;
2921
+ styleEl.innerHTML = styles;
2922
+ }
2923
+ function getOrCreateStyleElement(id, cspNonce) {
2924
+ if (!IN_BROWSER) return null;
2925
+ let style = document.getElementById(id);
2926
+ if (!style) {
2927
+ style = document.createElement('style');
2928
+ style.id = id;
2929
+ style.type = 'text/css';
2930
+ if (cspNonce) style.setAttribute('nonce', cspNonce);
2931
+ document.head.appendChild(style);
2932
+ }
2933
+ return style;
2934
+ }
2858
2935
 
2859
2936
  // Composables
2860
2937
  function createTheme(options) {
2861
2938
  const parsedOptions = parseThemeOptions(options);
2862
- const name = ref(parsedOptions.defaultTheme);
2939
+ const name = shallowRef(parsedOptions.defaultTheme);
2863
2940
  const themes = ref(parsedOptions.themes);
2864
2941
  const computedThemes = computed(() => {
2865
2942
  const acc = {};
2866
2943
  for (const [name, original] of Object.entries(themes.value)) {
2867
- const theme = acc[name] = {
2944
+ const colors = {
2945
+ ...original.colors,
2946
+ ...genVariations(original.colors, parsedOptions.variations)
2947
+ };
2948
+ acc[name] = {
2868
2949
  ...original,
2869
2950
  colors: {
2870
- ...original.colors
2951
+ ...colors,
2952
+ ...genOnColors(colors)
2871
2953
  }
2872
2954
  };
2873
- if (parsedOptions.variations) {
2874
- for (const name of parsedOptions.variations.colors) {
2875
- const color = theme.colors[name];
2876
- if (!color) continue;
2877
- for (const variation of ['lighten', 'darken']) {
2878
- const fn = variation === 'lighten' ? lighten : darken;
2879
- for (const amount of createRange(parsedOptions.variations[variation], 1)) {
2880
- theme.colors[`${name}-${variation}-${amount}`] = RGBtoHex(fn(parseColor(color), amount));
2881
- }
2882
- }
2883
- }
2884
- }
2885
- for (const color of Object.keys(theme.colors)) {
2886
- if (/^on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue;
2887
- const onColor = `on-${color}`;
2888
- const colorVal = parseColor(theme.colors[color]);
2889
- theme.colors[onColor] = getForeground(colorVal);
2890
- }
2891
2955
  }
2892
2956
  return acc;
2893
2957
  });
2894
2958
  const current = computed(() => computedThemes.value[name.value]);
2895
- function createCssClass(lines, selector, content) {
2896
- lines.push(`${getScopedSelector(selector)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2897
- }
2898
- function getScopedSelector(selector) {
2899
- if (!parsedOptions.scope) {
2900
- return selector;
2901
- }
2902
- const scopeSelector = `:where(${parsedOptions.scope})`;
2903
- if (selector === ':root') {
2904
- return scopeSelector;
2905
- }
2906
- return `${scopeSelector} ${selector}`;
2907
- }
2908
2959
  const styles = computed(() => {
2909
2960
  const lines = [];
2910
2961
  if (current.value?.dark) {
2911
- createCssClass(lines, ':root', ['color-scheme: dark']);
2962
+ createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
2912
2963
  }
2913
- createCssClass(lines, ':root', genCssVariables(current.value));
2964
+ createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
2914
2965
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
2915
- createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)]);
2966
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
2916
2967
  }
2917
2968
  const bgLines = [];
2918
2969
  const fgLines = [];
2919
2970
  const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2920
2971
  for (const key of colors) {
2921
- if (/^on-[a-z]/.test(key)) {
2922
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`]);
2972
+ if (key.startsWith('on-')) {
2973
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2923
2974
  } else {
2924
- 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`]);
2925
- createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`]);
2926
- createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`]);
2975
+ 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);
2976
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2977
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
2927
2978
  }
2928
2979
  }
2929
2980
  lines.push(...bgLines, ...fgLines);
2930
2981
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
2931
2982
  });
2932
- function getHead() {
2933
- return {
2934
- style: [{
2935
- textContent: styles.value,
2936
- id: parsedOptions.stylesheetId,
2937
- nonce: parsedOptions.cspNonce || false
2938
- }]
2939
- };
2940
- }
2941
2983
  function install(app) {
2942
2984
  if (parsedOptions.isDisabled) return;
2943
2985
  const head = app._context.provides.usehead;
2944
2986
  if (head) {
2987
+ function getHead() {
2988
+ return {
2989
+ style: [{
2990
+ textContent: styles.value,
2991
+ id: parsedOptions.stylesheetId,
2992
+ nonce: parsedOptions.cspNonce || false
2993
+ }]
2994
+ };
2995
+ }
2945
2996
  if (head.push) {
2946
2997
  const entry = head.push(getHead);
2947
2998
  if (IN_BROWSER) {
@@ -2958,7 +3009,6 @@ function createTheme(options) {
2958
3009
  }
2959
3010
  }
2960
3011
  } else {
2961
- let styleEl = IN_BROWSER ? document.getElementById(parsedOptions.stylesheetId) : null;
2962
3012
  if (IN_BROWSER) {
2963
3013
  watch(styles, updateStyles, {
2964
3014
  immediate: true
@@ -2967,15 +3017,7 @@ function createTheme(options) {
2967
3017
  updateStyles();
2968
3018
  }
2969
3019
  function updateStyles() {
2970
- if (typeof document !== 'undefined' && !styleEl) {
2971
- const el = document.createElement('style');
2972
- el.type = 'text/css';
2973
- el.id = parsedOptions.stylesheetId;
2974
- if (parsedOptions.cspNonce) el.setAttribute('nonce', parsedOptions.cspNonce);
2975
- styleEl = el;
2976
- document.head.appendChild(styleEl);
2977
- }
2978
- if (styleEl) styleEl.innerHTML = styles.value;
3020
+ upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
2979
3021
  }
2980
3022
  }
2981
3023
  }
@@ -2999,9 +3041,7 @@ function provideTheme(props) {
2999
3041
  getCurrentInstance('provideTheme');
3000
3042
  const theme = inject$1(ThemeSymbol, null);
3001
3043
  if (!theme) throw new Error('Could not find Vuetify theme injection');
3002
- const name = computed(() => {
3003
- return props.theme ?? theme.name.value;
3004
- });
3044
+ const name = computed(() => props.theme ?? theme.name.value);
3005
3045
  const current = computed(() => theme.themes.value[name.value]);
3006
3046
  const themeClasses = computed(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
3007
3047
  const newTheme = {
@@ -3019,24 +3059,6 @@ function useTheme() {
3019
3059
  if (!theme) throw new Error('Could not find Vuetify theme injection');
3020
3060
  return theme;
3021
3061
  }
3022
- function genCssVariables(theme) {
3023
- const lightOverlay = theme.dark ? 2 : 1;
3024
- const darkOverlay = theme.dark ? 1 : 2;
3025
- const variables = [];
3026
- for (const [key, value] of Object.entries(theme.colors)) {
3027
- const rgb = parseColor(value);
3028
- variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
3029
- if (!key.startsWith('on-')) {
3030
- variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
3031
- }
3032
- }
3033
- for (const [key, value] of Object.entries(theme.variables)) {
3034
- const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
3035
- const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
3036
- variables.push(`--v-${key}: ${rgb ?? value}`);
3037
- }
3038
- return variables;
3039
- }
3040
3062
 
3041
3063
  const makeVAppProps = propsFactory({
3042
3064
  ...makeComponentProps(),
@@ -12546,7 +12568,12 @@ function useVirtual(props, items) {
12546
12568
  }
12547
12569
  function calculateOffset(index) {
12548
12570
  index = clamp(index, 0, items.value.length - 1);
12549
- return offsets[index] || 0;
12571
+ const whole = Math.floor(index);
12572
+ const fraction = index % 1;
12573
+ const next = whole + 1;
12574
+ const wholeOffset = offsets[whole] || 0;
12575
+ const nextOffset = offsets[next] || wholeOffset;
12576
+ return wholeOffset + (nextOffset - wholeOffset) * fraction;
12550
12577
  }
12551
12578
  function calculateIndex(scrollTop) {
12552
12579
  return binaryClosest(offsets, scrollTop);
@@ -29214,7 +29241,7 @@ function createVuetify$1() {
29214
29241
  };
29215
29242
  });
29216
29243
  }
29217
- const version$1 = "3.8.0-master.2025-04-04";
29244
+ const version$1 = "3.8.1-dev.2025-04-07";
29218
29245
  createVuetify$1.version = version$1;
29219
29246
 
29220
29247
  // Vue's inject() can only be used in setup
@@ -29239,7 +29266,7 @@ const createVuetify = function () {
29239
29266
  ...options
29240
29267
  });
29241
29268
  };
29242
- const version = "3.8.0-master.2025-04-04";
29269
+ const version = "3.8.1-dev.2025-04-07";
29243
29270
  createVuetify.version = version;
29244
29271
 
29245
29272
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };