@vuetify/nightly 3.8.2-dev.2025-04-17 → 3.8.2-master.2025-04-19

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 (44) hide show
  1. package/CHANGELOG.md +7 -16
  2. package/dist/json/attributes.json +3562 -3562
  3. package/dist/json/importMap-labs.json +24 -24
  4. package/dist/json/importMap.json +164 -164
  5. package/dist/json/web-types.json +6668 -6669
  6. package/dist/vuetify-labs.cjs +36 -112
  7. package/dist/vuetify-labs.css +3302 -3302
  8. package/dist/vuetify-labs.d.ts +62 -76
  9. package/dist/vuetify-labs.esm.js +37 -113
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +36 -112
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +29 -103
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +5737 -5737
  16. package/dist/vuetify.d.ts +57 -62
  17. package/dist/vuetify.esm.js +30 -104
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +29 -103
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +1165 -1171
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VOverlay/VOverlay.css +1 -1
  25. package/lib/components/VOverlay/_variables.scss +1 -1
  26. package/lib/composables/calendar.d.ts +0 -1
  27. package/lib/composables/calendar.js.map +1 -1
  28. package/lib/composables/theme.d.ts +1 -6
  29. package/lib/composables/theme.js +26 -94
  30. package/lib/composables/theme.js.map +1 -1
  31. package/lib/composables/virtual.js +1 -6
  32. package/lib/composables/virtual.js.map +1 -1
  33. package/lib/entry-bundler.js +1 -1
  34. package/lib/entry-bundler.js.map +1 -1
  35. package/lib/framework.d.ts +57 -62
  36. package/lib/framework.js +1 -1
  37. package/lib/framework.js.map +1 -1
  38. package/lib/labs/VIconBtn/VIconBtn.d.ts +6 -21
  39. package/lib/labs/VIconBtn/VIconBtn.js +7 -9
  40. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
  41. package/lib/util/globals.d.ts +0 -1
  42. package/lib/util/globals.js +0 -1
  43. package/lib/util/globals.js.map +1 -1
  44. package/package.json +1 -1
package/dist/vuetify.d.ts CHANGED
@@ -133,12 +133,11 @@ type DeepPartial<T> = T extends object ? {
133
133
  } : T;
134
134
  type ThemeOptions = false | {
135
135
  cspNonce?: string;
136
- defaultTheme?: 'light' | 'dark' | 'system' | string;
136
+ defaultTheme?: string;
137
137
  variations?: false | VariationsOptions;
138
138
  themes?: Record<string, ThemeDefinition>;
139
139
  stylesheetId?: string;
140
140
  scope?: string;
141
- unimportant?: boolean;
142
141
  };
143
142
  type ThemeDefinition = DeepPartial<InternalThemeDefinition>;
144
143
  interface VariationsOptions {
@@ -175,15 +174,11 @@ interface OnColors {
175
174
  'on-info': string;
176
175
  }
177
176
  interface ThemeInstance {
178
- change: (themeName: string) => void;
179
- cycle: (themeArray?: string[]) => void;
180
- toggle: (themeArray?: [string, string]) => void;
181
177
  readonly isDisabled: boolean;
182
178
  readonly themes: Ref<Record<string, InternalThemeDefinition>>;
183
179
  readonly name: Readonly<Ref<string>>;
184
180
  readonly current: DeepReadonly<Ref<InternalThemeDefinition>>;
185
181
  readonly computedThemes: DeepReadonly<Ref<Record<string, InternalThemeDefinition>>>;
186
- readonly prefix: string;
187
182
  readonly themeClasses: Readonly<Ref<string | undefined>>;
188
183
  readonly styles: Readonly<Ref<string>>;
189
184
  readonly global: {
@@ -82963,20 +82958,21 @@ declare module 'vue' {
82963
82958
  $children?: VNodeChild
82964
82959
  }
82965
82960
  export interface GlobalComponents {
82966
- VApp: VApp
82967
82961
  VAutocomplete: VAutocomplete
82962
+ VAlert: VAlert
82963
+ VAlertTitle: VAlertTitle
82968
82964
  VAppBar: VAppBar
82969
82965
  VAppBarNavIcon: VAppBarNavIcon
82970
82966
  VAppBarTitle: VAppBarTitle
82971
- VAlert: VAlert
82972
- VAlertTitle: VAlertTitle
82973
- VAvatar: VAvatar
82974
82967
  VBadge: VBadge
82975
82968
  VBottomNavigation: VBottomNavigation
82976
- VBottomSheet: VBottomSheet
82977
82969
  VBanner: VBanner
82978
82970
  VBannerActions: VBannerActions
82979
82971
  VBannerText: VBannerText
82972
+ VAvatar: VAvatar
82973
+ VBottomSheet: VBottomSheet
82974
+ VBtn: VBtn
82975
+ VBtnGroup: VBtnGroup
82980
82976
  VBreadcrumbs: VBreadcrumbs
82981
82977
  VBreadcrumbsItem: VBreadcrumbsItem
82982
82978
  VBreadcrumbsDivider: VBreadcrumbsDivider
@@ -82986,16 +82982,23 @@ declare module 'vue' {
82986
82982
  VCardSubtitle: VCardSubtitle
82987
82983
  VCardText: VCardText
82988
82984
  VCardTitle: VCardTitle
82985
+ VApp: VApp
82989
82986
  VBtnToggle: VBtnToggle
82987
+ VChip: VChip
82990
82988
  VCarousel: VCarousel
82991
82989
  VCarouselItem: VCarouselItem
82992
82990
  VCheckbox: VCheckbox
82993
82991
  VCheckboxBtn: VCheckboxBtn
82994
- VBtn: VBtn
82995
- VChip: VChip
82996
82992
  VCode: VCode
82997
82993
  VColorPicker: VColorPicker
82994
+ VDatePicker: VDatePicker
82995
+ VDatePickerControls: VDatePickerControls
82996
+ VDatePickerHeader: VDatePickerHeader
82997
+ VDatePickerMonth: VDatePickerMonth
82998
+ VDatePickerMonths: VDatePickerMonths
82999
+ VDatePickerYears: VDatePickerYears
82998
83000
  VCounter: VCounter
83001
+ VCombobox: VCombobox
82999
83002
  VDataTable: VDataTable
83000
83003
  VDataTableHeaders: VDataTableHeaders
83001
83004
  VDataTableFooter: VDataTableFooter
@@ -83003,36 +83006,29 @@ declare module 'vue' {
83003
83006
  VDataTableRow: VDataTableRow
83004
83007
  VDataTableVirtual: VDataTableVirtual
83005
83008
  VDataTableServer: VDataTableServer
83006
- VDatePicker: VDatePicker
83007
- VDatePickerControls: VDatePickerControls
83008
- VDatePickerHeader: VDatePickerHeader
83009
- VDatePickerMonth: VDatePickerMonth
83010
- VDatePickerMonths: VDatePickerMonths
83011
- VDatePickerYears: VDatePickerYears
83012
- VChipGroup: VChipGroup
83009
+ VDialog: VDialog
83010
+ VEmptyState: VEmptyState
83013
83011
  VDivider: VDivider
83014
83012
  VExpansionPanels: VExpansionPanels
83015
83013
  VExpansionPanel: VExpansionPanel
83016
83014
  VExpansionPanelText: VExpansionPanelText
83017
83015
  VExpansionPanelTitle: VExpansionPanelTitle
83018
- VEmptyState: VEmptyState
83016
+ VFab: VFab
83017
+ VFileInput: VFileInput
83018
+ VInfiniteScroll: VInfiniteScroll
83019
83019
  VField: VField
83020
83020
  VFieldLabel: VFieldLabel
83021
- VFileInput: VFileInput
83022
- VFab: VFab
83023
- VImg: VImg
83024
- VBtnGroup: VBtnGroup
83025
- VCombobox: VCombobox
83021
+ VFooter: VFooter
83026
83022
  VIcon: VIcon
83027
83023
  VComponentIcon: VComponentIcon
83028
83024
  VSvgIcon: VSvgIcon
83029
83025
  VLigatureIcon: VLigatureIcon
83030
83026
  VClassIcon: VClassIcon
83031
- VFooter: VFooter
83032
- VInfiniteScroll: VInfiniteScroll
83033
83027
  VInput: VInput
83028
+ VImg: VImg
83034
83029
  VKbd: VKbd
83035
- VLabel: VLabel
83030
+ VItemGroup: VItemGroup
83031
+ VItem: VItem
83036
83032
  VList: VList
83037
83033
  VListGroup: VListGroup
83038
83034
  VListImg: VListImg
@@ -83042,30 +83038,27 @@ declare module 'vue' {
83042
83038
  VListItemSubtitle: VListItemSubtitle
83043
83039
  VListItemTitle: VListItemTitle
83044
83040
  VListSubheader: VListSubheader
83045
- VMain: VMain
83041
+ VLabel: VLabel
83042
+ VMenu: VMenu
83046
83043
  VMessages: VMessages
83047
- VItemGroup: VItemGroup
83048
- VItem: VItem
83049
- VDialog: VDialog
83050
- VNumberInput: VNumberInput
83044
+ VMain: VMain
83051
83045
  VNavigationDrawer: VNavigationDrawer
83052
- VMenu: VMenu
83053
- VOverlay: VOverlay
83054
83046
  VOtpInput: VOtpInput
83055
- VProgressLinear: VProgressLinear
83056
83047
  VPagination: VPagination
83048
+ VOverlay: VOverlay
83049
+ VProgressLinear: VProgressLinear
83050
+ VNumberInput: VNumberInput
83051
+ VProgressCircular: VProgressCircular
83052
+ VSelectionControl: VSelectionControl
83057
83053
  VRadioGroup: VRadioGroup
83054
+ VSelect: VSelect
83058
83055
  VRating: VRating
83059
- VProgressCircular: VProgressCircular
83060
83056
  VSelectionControlGroup: VSelectionControlGroup
83061
- VSelect: VSelect
83062
83057
  VSheet: VSheet
83063
83058
  VSnackbar: VSnackbar
83064
83059
  VSkeletonLoader: VSkeletonLoader
83065
- VSelectionControl: VSelectionControl
83066
83060
  VSlideGroup: VSlideGroup
83067
83061
  VSlideGroupItem: VSlideGroupItem
83068
- VSwitch: VSwitch
83069
83062
  VSlider: VSlider
83070
83063
  VStepper: VStepper
83071
83064
  VStepperActions: VStepperActions
@@ -83073,15 +83066,14 @@ declare module 'vue' {
83073
83066
  VStepperItem: VStepperItem
83074
83067
  VStepperWindow: VStepperWindow
83075
83068
  VStepperWindowItem: VStepperWindowItem
83069
+ VSwitch: VSwitch
83070
+ VSystemBar: VSystemBar
83071
+ VTextarea: VTextarea
83072
+ VTextField: VTextField
83076
83073
  VTab: VTab
83077
83074
  VTabs: VTabs
83078
83075
  VTabsWindow: VTabsWindow
83079
83076
  VTabsWindowItem: VTabsWindowItem
83080
- VTable: VTable
83081
- VTextField: VTextField
83082
- VSystemBar: VSystemBar
83083
- VTooltip: VTooltip
83084
- VTextarea: VTextarea
83085
83077
  VTimeline: VTimeline
83086
83078
  VTimelineItem: VTimelineItem
83087
83079
  VToolbar: VToolbar
@@ -83089,6 +83081,9 @@ declare module 'vue' {
83089
83081
  VToolbarItems: VToolbarItems
83090
83082
  VWindow: VWindow
83091
83083
  VWindowItem: VWindowItem
83084
+ VTooltip: VTooltip
83085
+ VChipGroup: VChipGroup
83086
+ VConfirmEdit: VConfirmEdit
83092
83087
  VDataIterator: VDataIterator
83093
83088
  VDefaultsProvider: VDefaultsProvider
83094
83089
  VForm: VForm
@@ -83097,22 +83092,18 @@ declare module 'vue' {
83097
83092
  VRow: VRow
83098
83093
  VSpacer: VSpacer
83099
83094
  VHover: VHover
83095
+ VLazy: VLazy
83100
83096
  VLayout: VLayout
83101
83097
  VLayoutItem: VLayoutItem
83102
83098
  VLocaleProvider: VLocaleProvider
83103
- VLazy: VLazy
83104
83099
  VNoSsr: VNoSsr
83105
83100
  VParallax: VParallax
83106
83101
  VRadio: VRadio
83107
83102
  VRangeSlider: VRangeSlider
83108
- VSpeedDial: VSpeedDial
83109
- VSnackbarQueue: VSnackbarQueue
83110
83103
  VResponsive: VResponsive
83111
83104
  VSparkline: VSparkline
83112
- VValidation: VValidation
83113
- VVirtualScroll: VVirtualScroll
83114
- VThemeProvider: VThemeProvider
83115
- VConfirmEdit: VConfirmEdit
83105
+ VSnackbarQueue: VSnackbarQueue
83106
+ VSpeedDial: VSpeedDial
83116
83107
  VFabTransition: VFabTransition
83117
83108
  VDialogBottomTransition: VDialogBottomTransition
83118
83109
  VDialogTopTransition: VDialogTopTransition
@@ -83129,6 +83120,13 @@ declare module 'vue' {
83129
83120
  VExpandTransition: VExpandTransition
83130
83121
  VExpandXTransition: VExpandXTransition
83131
83122
  VDialogTransition: VDialogTransition
83123
+ VValidation: VValidation
83124
+ VThemeProvider: VThemeProvider
83125
+ VVirtualScroll: VVirtualScroll
83126
+ VTable: VTable
83127
+ VIconBtn: VIconBtn
83128
+ VPicker: VPicker
83129
+ VPickerTitle: VPickerTitle
83132
83130
  VCalendar: VCalendar
83133
83131
  VCalendarDay: VCalendarDay
83134
83132
  VCalendarHeader: VCalendarHeader
@@ -83137,18 +83135,15 @@ declare module 'vue' {
83137
83135
  VCalendarMonthDay: VCalendarMonthDay
83138
83136
  VFileUpload: VFileUpload
83139
83137
  VFileUploadItem: VFileUploadItem
83140
- VPicker: VPicker
83141
- VPickerTitle: VPickerTitle
83142
- VStepperVertical: VStepperVertical
83143
- VStepperVerticalItem: VStepperVerticalItem
83144
- VStepperVerticalActions: VStepperVerticalActions
83145
- VIconBtn: VIconBtn
83146
- VTimePicker: VTimePicker
83147
- VTimePickerClock: VTimePickerClock
83148
- VTimePickerControls: VTimePickerControls
83149
83138
  VTreeview: VTreeview
83150
83139
  VTreeviewItem: VTreeviewItem
83151
83140
  VTreeviewGroup: VTreeviewGroup
83141
+ VTimePicker: VTimePicker
83142
+ VTimePickerClock: VTimePickerClock
83143
+ VTimePickerControls: VTimePickerControls
83144
+ VStepperVertical: VStepperVertical
83145
+ VStepperVerticalItem: VStepperVerticalItem
83146
+ VStepperVerticalActions: VStepperVerticalActions
83152
83147
  VDateInput: VDateInput
83153
83148
  VPullToRefresh: VPullToRefresh
83154
83149
  }
@@ -1,16 +1,15 @@
1
1
  /*!
2
- * Vuetify v3.8.2-dev.2025-04-17
2
+ * Vuetify v3.8.2-master.2025-04-19
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { shallowRef, reactive, computed, watchEffect, toRefs, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, createVNode, mergeProps, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, TransitionGroup, Transition, isRef, toRef, 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, computed, watchEffect, toRefs, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, createVNode, mergeProps, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, TransitionGroup, Transition, isRef, toRef, 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';
14
13
 
15
14
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
16
15
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -2768,7 +2767,6 @@ const makeThemeProps = propsFactory({
2768
2767
  function genDefaults$1() {
2769
2768
  return {
2770
2769
  defaultTheme: 'light',
2771
- prefix: 'v-',
2772
2770
  variations: {
2773
2771
  colors: [],
2774
2772
  lighten: 0,
@@ -2850,10 +2848,7 @@ function genDefaults$1() {
2850
2848
  }
2851
2849
  }
2852
2850
  },
2853
- stylesheetId: 'vuetify-theme-stylesheet',
2854
- scoped: false,
2855
- unimportant: false,
2856
- utilities: true
2851
+ stylesheetId: 'vuetify-theme-stylesheet'
2857
2852
  };
2858
2853
  }
2859
2854
  function parseThemeOptions() {
@@ -2876,21 +2871,21 @@ function parseThemeOptions() {
2876
2871
  function createCssClass(lines, selector, content, scope) {
2877
2872
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2878
2873
  }
2879
- function genCssVariables(theme, prefix) {
2874
+ function genCssVariables(theme) {
2880
2875
  const lightOverlay = theme.dark ? 2 : 1;
2881
2876
  const darkOverlay = theme.dark ? 1 : 2;
2882
2877
  const variables = [];
2883
2878
  for (const [key, value] of Object.entries(theme.colors)) {
2884
2879
  const rgb = parseColor(value);
2885
- variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2880
+ variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2886
2881
  if (!key.startsWith('on-')) {
2887
- variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2882
+ variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2888
2883
  }
2889
2884
  }
2890
2885
  for (const [key, value] of Object.entries(theme.variables)) {
2891
2886
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2892
2887
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2893
- variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2888
+ variables.push(`--v-${key}: ${rgb ?? value}`);
2894
2889
  }
2895
2890
  return variables;
2896
2891
  }
@@ -2934,8 +2929,7 @@ function getScopedSelector(selector, scope) {
2934
2929
  const scopeSelector = `:where(${scope})`;
2935
2930
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
2936
2931
  }
2937
- function upsertStyles(id, cspNonce, styles) {
2938
- const styleEl = getOrCreateStyleElement(id, cspNonce);
2932
+ function upsertStyles(styleEl, styles) {
2939
2933
  if (!styleEl) return;
2940
2934
  styleEl.innerHTML = styles;
2941
2935
  }
@@ -2955,17 +2949,8 @@ function getOrCreateStyleElement(id, cspNonce) {
2955
2949
  // Composables
2956
2950
  function createTheme(options) {
2957
2951
  const parsedOptions = parseThemeOptions(options);
2958
- const _name = shallowRef(parsedOptions.defaultTheme);
2952
+ const name = shallowRef(parsedOptions.defaultTheme);
2959
2953
  const themes = ref(parsedOptions.themes);
2960
- const systemName = shallowRef('light');
2961
- const name = computed({
2962
- get() {
2963
- return _name.value === 'system' ? systemName.value : _name.value;
2964
- },
2965
- set(val) {
2966
- _name.value = val;
2967
- }
2968
- });
2969
2954
  const computedThemes = computed(() => {
2970
2955
  const acc = {};
2971
2956
  for (const [name, original] of Object.entries(themes.value)) {
@@ -2986,49 +2971,28 @@ function createTheme(options) {
2986
2971
  const current = computed(() => computedThemes.value[name.value]);
2987
2972
  const styles = computed(() => {
2988
2973
  const lines = [];
2989
- const important = parsedOptions.unimportant ? '' : ' !important';
2990
- const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
2991
2974
  if (current.value?.dark) {
2992
2975
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
2993
2976
  }
2994
- createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
2977
+ createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
2995
2978
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
2996
- createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
2997
- }
2998
- if (parsedOptions.utilities) {
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(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3005
- } else {
3006
- 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);
3007
- createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3008
- createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
3009
- }
2979
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
2980
+ }
2981
+ const bgLines = [];
2982
+ const fgLines = [];
2983
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2984
+ for (const key of colors) {
2985
+ if (key.startsWith('on-')) {
2986
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2987
+ } else {
2988
+ 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);
2989
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2990
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
3010
2991
  }
3011
- lines.push(...bgLines, ...fgLines);
3012
2992
  }
2993
+ lines.push(...bgLines, ...fgLines);
3013
2994
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
3014
2995
  });
3015
- const themeClasses = computed(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
3016
- const themeNames = computed(() => Object.keys(computedThemes.value));
3017
- if (SUPPORTS_MATCH_MEDIA) {
3018
- const media = window.matchMedia('(prefers-color-scheme: dark)');
3019
- function updateSystemName() {
3020
- systemName.value = media.matches ? 'dark' : 'light';
3021
- }
3022
- updateSystemName();
3023
- media.addEventListener('change', updateSystemName, {
3024
- passive: true
3025
- });
3026
- if (getCurrentScope()) {
3027
- onScopeDispose(() => {
3028
- media.removeEventListener('change', updateSystemName);
3029
- });
3030
- }
3031
- }
3032
2996
  function install(app) {
3033
2997
  if (parsedOptions.isDisabled) return;
3034
2998
  const head = app._context.provides.usehead;
@@ -3066,55 +3030,22 @@ function createTheme(options) {
3066
3030
  updateStyles();
3067
3031
  }
3068
3032
  function updateStyles() {
3069
- upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
3033
+ upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
3070
3034
  }
3071
3035
  }
3072
3036
  }
3073
- function change(themeName) {
3074
- if (!themeNames.value.includes(themeName)) {
3075
- consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
3076
- return;
3077
- }
3078
- name.value = themeName;
3079
- }
3080
- function cycle() {
3081
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
3082
- const currentIndex = themeArray.indexOf(name.value);
3083
- const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
3084
- change(themeArray[nextIndex]);
3085
- }
3086
- function toggle() {
3087
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
3088
- cycle(themeArray);
3089
- }
3090
- const globalName = new Proxy(name, {
3091
- get(target, prop) {
3092
- return target[prop];
3093
- },
3094
- set(target, prop, val) {
3095
- if (prop === 'value') {
3096
- deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
3097
- }
3098
- // @ts-expect-error
3099
- target[prop] = val;
3100
- return true;
3101
- }
3102
- });
3037
+ const themeClasses = computed(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
3103
3038
  return {
3104
3039
  install,
3105
- change,
3106
- cycle,
3107
- toggle,
3108
3040
  isDisabled: parsedOptions.isDisabled,
3109
3041
  name,
3110
3042
  themes,
3111
3043
  current,
3112
3044
  computedThemes,
3113
- prefix: parsedOptions.prefix,
3114
3045
  themeClasses,
3115
3046
  styles,
3116
3047
  global: {
3117
- name: globalName,
3048
+ name,
3118
3049
  current
3119
3050
  }
3120
3051
  };
@@ -3125,7 +3056,7 @@ function provideTheme(props) {
3125
3056
  if (!theme) throw new Error('Could not find Vuetify theme injection');
3126
3057
  const name = computed(() => props.theme ?? theme.name.value);
3127
3058
  const current = computed(() => theme.themes.value[name.value]);
3128
- const themeClasses = computed(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
3059
+ const themeClasses = computed(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
3129
3060
  const newTheme = {
3130
3061
  ...theme,
3131
3062
  name,
@@ -12655,12 +12586,7 @@ function useVirtual(props, items) {
12655
12586
  }
12656
12587
  function calculateOffset(index) {
12657
12588
  index = clamp(index, 0, items.value.length - 1);
12658
- const whole = Math.floor(index);
12659
- const fraction = index % 1;
12660
- const next = whole + 1;
12661
- const wholeOffset = offsets[whole] || 0;
12662
- const nextOffset = offsets[next] || wholeOffset;
12663
- return wholeOffset + (nextOffset - wholeOffset) * fraction;
12589
+ return offsets[index] || 0;
12664
12590
  }
12665
12591
  function calculateIndex(scrollTop) {
12666
12592
  return binaryClosest(offsets, scrollTop);
@@ -29248,7 +29174,7 @@ function createVuetify$1() {
29248
29174
  };
29249
29175
  });
29250
29176
  }
29251
- const version$1 = "3.8.2-dev.2025-04-17";
29177
+ const version$1 = "3.8.2-master.2025-04-19";
29252
29178
  createVuetify$1.version = version$1;
29253
29179
 
29254
29180
  // Vue's inject() can only be used in setup
@@ -29273,7 +29199,7 @@ const createVuetify = function () {
29273
29199
  ...options
29274
29200
  });
29275
29201
  };
29276
- const version = "3.8.2-dev.2025-04-17";
29202
+ const version = "3.8.2-master.2025-04-19";
29277
29203
  createVuetify.version = version;
29278
29204
 
29279
29205
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };