@vuetify/nightly 3.8.1-dev.2025-04-07 → 3.8.1-dev.2025-04-13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -3
- package/dist/json/attributes.json +710 -710
- package/dist/json/importMap-labs.json +20 -20
- package/dist/json/importMap.json +166 -166
- package/dist/json/web-types.json +1330 -1330
- package/dist/vuetify-labs.cjs +97 -28
- package/dist/vuetify-labs.css +4302 -4302
- package/dist/vuetify-labs.d.ts +61 -56
- package/dist/vuetify-labs.esm.js +98 -29
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +97 -28
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +97 -28
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +5418 -5418
- package/dist/vuetify.d.ts +61 -56
- package/dist/vuetify.esm.js +98 -29
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +97 -28
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1160 -1156
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VOverlay/VOverlay.css +1 -1
- package/lib/components/VOverlay/_variables.scss +1 -1
- package/lib/composables/theme.d.ts +6 -1
- package/lib/composables/theme.js +94 -26
- package/lib/composables/theme.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/framework.d.ts +61 -56
- package/lib/framework.js +1 -1
- package/lib/util/globals.d.ts +1 -0
- package/lib/util/globals.js +1 -0
- package/lib/util/globals.js.map +1 -1
- package/package.json +1 -1
package/dist/vuetify-labs.d.ts
CHANGED
@@ -132,11 +132,12 @@ type DeepPartial<T> = T extends object ? {
|
|
132
132
|
} : T;
|
133
133
|
type ThemeOptions = false | {
|
134
134
|
cspNonce?: string;
|
135
|
-
defaultTheme?: string;
|
135
|
+
defaultTheme?: 'light' | 'dark' | 'system' | string;
|
136
136
|
variations?: false | VariationsOptions;
|
137
137
|
themes?: Record<string, ThemeDefinition>;
|
138
138
|
stylesheetId?: string;
|
139
139
|
scope?: string;
|
140
|
+
unimportant?: boolean;
|
140
141
|
};
|
141
142
|
type ThemeDefinition = DeepPartial<InternalThemeDefinition>;
|
142
143
|
interface VariationsOptions {
|
@@ -173,11 +174,15 @@ interface OnColors {
|
|
173
174
|
'on-info': string;
|
174
175
|
}
|
175
176
|
interface ThemeInstance {
|
177
|
+
change: (themeName: string) => void;
|
178
|
+
cycle: (themeArray?: string[]) => void;
|
179
|
+
toggle: (themeArray?: [string, string]) => void;
|
176
180
|
readonly isDisabled: boolean;
|
177
181
|
readonly themes: Ref<Record<string, InternalThemeDefinition>>;
|
178
182
|
readonly name: Readonly<Ref<string>>;
|
179
183
|
readonly current: DeepReadonly<Ref<InternalThemeDefinition>>;
|
180
184
|
readonly computedThemes: DeepReadonly<Ref<Record<string, InternalThemeDefinition>>>;
|
185
|
+
readonly prefix: string;
|
181
186
|
readonly themeClasses: Readonly<Ref<string | undefined>>;
|
182
187
|
readonly styles: Readonly<Ref<string>>;
|
183
188
|
readonly global: {
|
@@ -96780,40 +96785,40 @@ declare module 'vue' {
|
|
96780
96785
|
$children?: VNodeChild
|
96781
96786
|
}
|
96782
96787
|
export interface GlobalComponents {
|
96783
|
-
VApp: VApp
|
96784
96788
|
VAppBar: VAppBar
|
96785
96789
|
VAppBarNavIcon: VAppBarNavIcon
|
96786
96790
|
VAppBarTitle: VAppBarTitle
|
96787
|
-
|
96791
|
+
VApp: VApp
|
96792
|
+
VAutocomplete: VAutocomplete
|
96788
96793
|
VAlert: VAlert
|
96789
96794
|
VAlertTitle: VAlertTitle
|
96790
|
-
|
96795
|
+
VAvatar: VAvatar
|
96791
96796
|
VBadge: VBadge
|
96792
96797
|
VBanner: VBanner
|
96793
96798
|
VBannerActions: VBannerActions
|
96794
96799
|
VBannerText: VBannerText
|
96800
|
+
VBtn: VBtn
|
96795
96801
|
VBreadcrumbs: VBreadcrumbs
|
96796
96802
|
VBreadcrumbsItem: VBreadcrumbsItem
|
96797
96803
|
VBreadcrumbsDivider: VBreadcrumbsDivider
|
96798
|
-
VBottomSheet: VBottomSheet
|
96799
96804
|
VBottomNavigation: VBottomNavigation
|
96800
96805
|
VBtnGroup: VBtnGroup
|
96801
|
-
|
96802
|
-
|
96803
|
-
|
96806
|
+
VBtnToggle: VBtnToggle
|
96807
|
+
VCarousel: VCarousel
|
96808
|
+
VCarouselItem: VCarouselItem
|
96809
|
+
VBottomSheet: VBottomSheet
|
96810
|
+
VChip: VChip
|
96811
|
+
VColorPicker: VColorPicker
|
96804
96812
|
VCard: VCard
|
96805
96813
|
VCardActions: VCardActions
|
96806
96814
|
VCardItem: VCardItem
|
96807
96815
|
VCardSubtitle: VCardSubtitle
|
96808
96816
|
VCardText: VCardText
|
96809
96817
|
VCardTitle: VCardTitle
|
96810
|
-
VBtnToggle: VBtnToggle
|
96811
96818
|
VChipGroup: VChipGroup
|
96812
|
-
VCarousel: VCarousel
|
96813
|
-
VCarouselItem: VCarouselItem
|
96814
|
-
VColorPicker: VColorPicker
|
96815
|
-
VCode: VCode
|
96816
96819
|
VCombobox: VCombobox
|
96820
|
+
VCheckbox: VCheckbox
|
96821
|
+
VCheckboxBtn: VCheckboxBtn
|
96817
96822
|
VDataTable: VDataTable
|
96818
96823
|
VDataTableHeaders: VDataTableHeaders
|
96819
96824
|
VDataTableFooter: VDataTableFooter
|
@@ -96821,38 +96826,39 @@ declare module 'vue' {
|
|
96821
96826
|
VDataTableRow: VDataTableRow
|
96822
96827
|
VDataTableVirtual: VDataTableVirtual
|
96823
96828
|
VDataTableServer: VDataTableServer
|
96829
|
+
VCounter: VCounter
|
96824
96830
|
VDatePicker: VDatePicker
|
96825
96831
|
VDatePickerControls: VDatePickerControls
|
96826
96832
|
VDatePickerHeader: VDatePickerHeader
|
96827
96833
|
VDatePickerMonth: VDatePickerMonth
|
96828
96834
|
VDatePickerMonths: VDatePickerMonths
|
96829
96835
|
VDatePickerYears: VDatePickerYears
|
96830
|
-
|
96831
|
-
|
96836
|
+
VDialog: VDialog
|
96837
|
+
VCode: VCode
|
96832
96838
|
VEmptyState: VEmptyState
|
96839
|
+
VFab: VFab
|
96833
96840
|
VDivider: VDivider
|
96841
|
+
VIcon: VIcon
|
96842
|
+
VComponentIcon: VComponentIcon
|
96843
|
+
VSvgIcon: VSvgIcon
|
96844
|
+
VLigatureIcon: VLigatureIcon
|
96845
|
+
VClassIcon: VClassIcon
|
96834
96846
|
VExpansionPanels: VExpansionPanels
|
96835
96847
|
VExpansionPanel: VExpansionPanel
|
96836
96848
|
VExpansionPanelText: VExpansionPanelText
|
96837
96849
|
VExpansionPanelTitle: VExpansionPanelTitle
|
96838
|
-
VDialog: VDialog
|
96839
|
-
VFab: VFab
|
96840
96850
|
VField: VField
|
96841
96851
|
VFieldLabel: VFieldLabel
|
96852
|
+
VInput: VInput
|
96842
96853
|
VFooter: VFooter
|
96854
|
+
VImg: VImg
|
96843
96855
|
VFileInput: VFileInput
|
96844
|
-
VIcon: VIcon
|
96845
|
-
VComponentIcon: VComponentIcon
|
96846
|
-
VSvgIcon: VSvgIcon
|
96847
|
-
VLigatureIcon: VLigatureIcon
|
96848
|
-
VClassIcon: VClassIcon
|
96849
|
-
VInput: VInput
|
96850
|
-
VLabel: VLabel
|
96851
|
-
VInfiniteScroll: VInfiniteScroll
|
96852
96856
|
VItemGroup: VItemGroup
|
96853
96857
|
VItem: VItem
|
96858
|
+
VInfiniteScroll: VInfiniteScroll
|
96854
96859
|
VKbd: VKbd
|
96855
|
-
|
96860
|
+
VLabel: VLabel
|
96861
|
+
VMenu: VMenu
|
96856
96862
|
VList: VList
|
96857
96863
|
VListGroup: VListGroup
|
96858
96864
|
VListImg: VListImg
|
@@ -96863,65 +96869,64 @@ declare module 'vue' {
|
|
96863
96869
|
VListItemTitle: VListItemTitle
|
96864
96870
|
VListSubheader: VListSubheader
|
96865
96871
|
VMain: VMain
|
96872
|
+
VMessages: VMessages
|
96866
96873
|
VNavigationDrawer: VNavigationDrawer
|
96867
|
-
VMenu: VMenu
|
96868
96874
|
VOtpInput: VOtpInput
|
96869
96875
|
VOverlay: VOverlay
|
96870
|
-
VMessages: VMessages
|
96871
|
-
VNumberInput: VNumberInput
|
96872
96876
|
VPagination: VPagination
|
96873
|
-
|
96874
|
-
VRadioGroup: VRadioGroup
|
96877
|
+
VNumberInput: VNumberInput
|
96875
96878
|
VProgressCircular: VProgressCircular
|
96876
|
-
|
96879
|
+
VRadioGroup: VRadioGroup
|
96877
96880
|
VRating: VRating
|
96878
|
-
|
96881
|
+
VProgressLinear: VProgressLinear
|
96879
96882
|
VSelectionControlGroup: VSelectionControlGroup
|
96883
|
+
VSheet: VSheet
|
96884
|
+
VSelectionControl: VSelectionControl
|
96880
96885
|
VSlideGroup: VSlideGroup
|
96881
96886
|
VSlideGroupItem: VSlideGroupItem
|
96882
|
-
|
96883
|
-
VSheet: VSheet
|
96884
|
-
VSkeletonLoader: VSkeletonLoader
|
96885
|
-
VSlider: VSlider
|
96886
|
-
VSwitch: VSwitch
|
96887
|
-
VTab: VTab
|
96888
|
-
VTabs: VTabs
|
96889
|
-
VTabsWindow: VTabsWindow
|
96890
|
-
VTabsWindowItem: VTabsWindowItem
|
96891
|
-
VSystemBar: VSystemBar
|
96887
|
+
VSelect: VSelect
|
96892
96888
|
VStepper: VStepper
|
96893
96889
|
VStepperActions: VStepperActions
|
96894
96890
|
VStepperHeader: VStepperHeader
|
96895
96891
|
VStepperItem: VStepperItem
|
96896
96892
|
VStepperWindow: VStepperWindow
|
96897
96893
|
VStepperWindowItem: VStepperWindowItem
|
96898
|
-
|
96894
|
+
VSkeletonLoader: VSkeletonLoader
|
96895
|
+
VSlider: VSlider
|
96896
|
+
VSwitch: VSwitch
|
96897
|
+
VSnackbar: VSnackbar
|
96898
|
+
VSystemBar: VSystemBar
|
96899
96899
|
VTable: VTable
|
96900
|
+
VTextField: VTextField
|
96901
|
+
VTextarea: VTextarea
|
96902
|
+
VTab: VTab
|
96903
|
+
VTabs: VTabs
|
96904
|
+
VTabsWindow: VTabsWindow
|
96905
|
+
VTabsWindowItem: VTabsWindowItem
|
96900
96906
|
VToolbar: VToolbar
|
96901
96907
|
VToolbarTitle: VToolbarTitle
|
96902
96908
|
VToolbarItems: VToolbarItems
|
96903
|
-
VTextField: VTextField
|
96904
|
-
VTimeline: VTimeline
|
96905
|
-
VTimelineItem: VTimelineItem
|
96906
96909
|
VWindow: VWindow
|
96907
96910
|
VWindowItem: VWindowItem
|
96908
96911
|
VTooltip: VTooltip
|
96912
|
+
VTimeline: VTimeline
|
96913
|
+
VTimelineItem: VTimelineItem
|
96909
96914
|
VConfirmEdit: VConfirmEdit
|
96910
96915
|
VDataIterator: VDataIterator
|
96911
96916
|
VDefaultsProvider: VDefaultsProvider
|
96912
|
-
VForm: VForm
|
96913
|
-
VHover: VHover
|
96914
96917
|
VContainer: VContainer
|
96915
96918
|
VCol: VCol
|
96916
96919
|
VRow: VRow
|
96917
96920
|
VSpacer: VSpacer
|
96921
|
+
VForm: VForm
|
96922
|
+
VHover: VHover
|
96918
96923
|
VLayout: VLayout
|
96919
96924
|
VLayoutItem: VLayoutItem
|
96920
96925
|
VLazy: VLazy
|
96921
|
-
VLocaleProvider: VLocaleProvider
|
96922
96926
|
VNoSsr: VNoSsr
|
96923
|
-
|
96927
|
+
VLocaleProvider: VLocaleProvider
|
96924
96928
|
VRadio: VRadio
|
96929
|
+
VParallax: VParallax
|
96925
96930
|
VRangeSlider: VRangeSlider
|
96926
96931
|
VResponsive: VResponsive
|
96927
96932
|
VSnackbarQueue: VSnackbarQueue
|
@@ -96946,26 +96951,26 @@ declare module 'vue' {
|
|
96946
96951
|
VExpandTransition: VExpandTransition
|
96947
96952
|
VExpandXTransition: VExpandXTransition
|
96948
96953
|
VDialogTransition: VDialogTransition
|
96949
|
-
VFileUpload: VFileUpload
|
96950
|
-
VFileUploadItem: VFileUploadItem
|
96951
96954
|
VStepperVertical: VStepperVertical
|
96952
96955
|
VStepperVerticalItem: VStepperVerticalItem
|
96953
96956
|
VStepperVerticalActions: VStepperVerticalActions
|
96957
|
+
VPicker: VPicker
|
96958
|
+
VPickerTitle: VPickerTitle
|
96954
96959
|
VCalendar: VCalendar
|
96955
96960
|
VCalendarDay: VCalendarDay
|
96956
96961
|
VCalendarHeader: VCalendarHeader
|
96957
96962
|
VCalendarInterval: VCalendarInterval
|
96958
96963
|
VCalendarIntervalEvent: VCalendarIntervalEvent
|
96959
96964
|
VCalendarMonthDay: VCalendarMonthDay
|
96960
|
-
VIconBtn: VIconBtn
|
96961
|
-
VPicker: VPicker
|
96962
|
-
VPickerTitle: VPickerTitle
|
96963
96965
|
VTimePicker: VTimePicker
|
96964
96966
|
VTimePickerClock: VTimePickerClock
|
96965
96967
|
VTimePickerControls: VTimePickerControls
|
96968
|
+
VIconBtn: VIconBtn
|
96966
96969
|
VTreeview: VTreeview
|
96967
96970
|
VTreeviewItem: VTreeviewItem
|
96968
96971
|
VTreeviewGroup: VTreeviewGroup
|
96972
|
+
VFileUpload: VFileUpload
|
96973
|
+
VFileUploadItem: VFileUploadItem
|
96969
96974
|
VDateInput: VDateInput
|
96970
96975
|
VPullToRefresh: VPullToRefresh
|
96971
96976
|
}
|
package/dist/vuetify-labs.esm.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.8.1-dev.2025-04-
|
2
|
+
* Vuetify v3.8.1-dev.2025-04-13
|
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, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, createVNode, TransitionGroup, Transition, mergeProps, 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, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, createVNode, TransitionGroup, Transition, mergeProps, 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
|
// Types
|
10
10
|
// eslint-disable-line vue/prefer-import-from-vue
|
@@ -81,6 +81,7 @@ const IN_BROWSER = typeof window !== 'undefined';
|
|
81
81
|
const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
|
82
82
|
const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
|
83
83
|
const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
|
84
|
+
const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
|
84
85
|
|
85
86
|
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
86
87
|
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
@@ -2281,6 +2282,7 @@ const makeThemeProps = propsFactory({
|
|
2281
2282
|
function genDefaults$2() {
|
2282
2283
|
return {
|
2283
2284
|
defaultTheme: 'light',
|
2285
|
+
prefix: 'v-',
|
2284
2286
|
variations: {
|
2285
2287
|
colors: [],
|
2286
2288
|
lighten: 0,
|
@@ -2362,7 +2364,10 @@ function genDefaults$2() {
|
|
2362
2364
|
}
|
2363
2365
|
}
|
2364
2366
|
},
|
2365
|
-
stylesheetId: 'vuetify-theme-stylesheet'
|
2367
|
+
stylesheetId: 'vuetify-theme-stylesheet',
|
2368
|
+
scoped: false,
|
2369
|
+
unimportant: false,
|
2370
|
+
utilities: true
|
2366
2371
|
};
|
2367
2372
|
}
|
2368
2373
|
function parseThemeOptions() {
|
@@ -2385,21 +2390,21 @@ function parseThemeOptions() {
|
|
2385
2390
|
function createCssClass(lines, selector, content, scope) {
|
2386
2391
|
lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
|
2387
2392
|
}
|
2388
|
-
function genCssVariables(theme) {
|
2393
|
+
function genCssVariables(theme, prefix) {
|
2389
2394
|
const lightOverlay = theme.dark ? 2 : 1;
|
2390
2395
|
const darkOverlay = theme.dark ? 1 : 2;
|
2391
2396
|
const variables = [];
|
2392
2397
|
for (const [key, value] of Object.entries(theme.colors)) {
|
2393
2398
|
const rgb = parseColor(value);
|
2394
|
-
variables.push(
|
2399
|
+
variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
|
2395
2400
|
if (!key.startsWith('on-')) {
|
2396
|
-
variables.push(
|
2401
|
+
variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
|
2397
2402
|
}
|
2398
2403
|
}
|
2399
2404
|
for (const [key, value] of Object.entries(theme.variables)) {
|
2400
2405
|
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
|
2401
2406
|
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
|
2402
|
-
variables.push(
|
2407
|
+
variables.push(`--${prefix}${key}: ${rgb ?? value}`);
|
2403
2408
|
}
|
2404
2409
|
return variables;
|
2405
2410
|
}
|
@@ -2443,7 +2448,8 @@ function getScopedSelector(selector, scope) {
|
|
2443
2448
|
const scopeSelector = `:where(${scope})`;
|
2444
2449
|
return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
|
2445
2450
|
}
|
2446
|
-
function upsertStyles(
|
2451
|
+
function upsertStyles(id, cspNonce, styles) {
|
2452
|
+
const styleEl = getOrCreateStyleElement(id, cspNonce);
|
2447
2453
|
if (!styleEl) return;
|
2448
2454
|
styleEl.innerHTML = styles;
|
2449
2455
|
}
|
@@ -2463,8 +2469,17 @@ function getOrCreateStyleElement(id, cspNonce) {
|
|
2463
2469
|
// Composables
|
2464
2470
|
function createTheme(options) {
|
2465
2471
|
const parsedOptions = parseThemeOptions(options);
|
2466
|
-
const
|
2472
|
+
const _name = shallowRef(parsedOptions.defaultTheme);
|
2467
2473
|
const themes = ref(parsedOptions.themes);
|
2474
|
+
const systemName = shallowRef('light');
|
2475
|
+
const name = computed({
|
2476
|
+
get() {
|
2477
|
+
return _name.value === 'system' ? systemName.value : _name.value;
|
2478
|
+
},
|
2479
|
+
set(val) {
|
2480
|
+
_name.value = val;
|
2481
|
+
}
|
2482
|
+
});
|
2468
2483
|
const computedThemes = computed(() => {
|
2469
2484
|
const acc = {};
|
2470
2485
|
for (const [name, original] of Object.entries(themes.value)) {
|
@@ -2485,28 +2500,49 @@ function createTheme(options) {
|
|
2485
2500
|
const current = computed(() => computedThemes.value[name.value]);
|
2486
2501
|
const styles = computed(() => {
|
2487
2502
|
const lines = [];
|
2503
|
+
const important = parsedOptions.unimportant ? '' : ' !important';
|
2504
|
+
const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
|
2488
2505
|
if (current.value?.dark) {
|
2489
2506
|
createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
|
2490
2507
|
}
|
2491
|
-
createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
|
2508
|
+
createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
|
2492
2509
|
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
|
2493
|
-
createCssClass(lines,
|
2494
|
-
}
|
2495
|
-
|
2496
|
-
|
2497
|
-
|
2498
|
-
|
2499
|
-
|
2500
|
-
|
2501
|
-
|
2502
|
-
|
2503
|
-
|
2504
|
-
|
2510
|
+
createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
|
2511
|
+
}
|
2512
|
+
if (parsedOptions.utilities) {
|
2513
|
+
const bgLines = [];
|
2514
|
+
const fgLines = [];
|
2515
|
+
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
|
2516
|
+
for (const key of colors) {
|
2517
|
+
if (key.startsWith('on-')) {
|
2518
|
+
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
2519
|
+
} else {
|
2520
|
+
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);
|
2521
|
+
createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
2522
|
+
createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
|
2523
|
+
}
|
2505
2524
|
}
|
2525
|
+
lines.push(...bgLines, ...fgLines);
|
2506
2526
|
}
|
2507
|
-
lines.push(...bgLines, ...fgLines);
|
2508
2527
|
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
|
2509
2528
|
});
|
2529
|
+
const themeClasses = computed(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
|
2530
|
+
const themeNames = computed(() => Object.keys(computedThemes.value));
|
2531
|
+
if (SUPPORTS_MATCH_MEDIA) {
|
2532
|
+
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
2533
|
+
function updateSystemName() {
|
2534
|
+
systemName.value = media.matches ? 'dark' : 'light';
|
2535
|
+
}
|
2536
|
+
updateSystemName();
|
2537
|
+
media.addEventListener('change', updateSystemName, {
|
2538
|
+
passive: true
|
2539
|
+
});
|
2540
|
+
if (getCurrentScope()) {
|
2541
|
+
onScopeDispose(() => {
|
2542
|
+
media.removeEventListener('change', updateSystemName);
|
2543
|
+
});
|
2544
|
+
}
|
2545
|
+
}
|
2510
2546
|
function install(app) {
|
2511
2547
|
if (parsedOptions.isDisabled) return;
|
2512
2548
|
const head = app._context.provides.usehead;
|
@@ -2544,22 +2580,55 @@ function createTheme(options) {
|
|
2544
2580
|
updateStyles();
|
2545
2581
|
}
|
2546
2582
|
function updateStyles() {
|
2547
|
-
upsertStyles(
|
2583
|
+
upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
|
2548
2584
|
}
|
2549
2585
|
}
|
2550
2586
|
}
|
2551
|
-
|
2587
|
+
function change(themeName) {
|
2588
|
+
if (!themeNames.value.includes(themeName)) {
|
2589
|
+
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
2590
|
+
return;
|
2591
|
+
}
|
2592
|
+
name.value = themeName;
|
2593
|
+
}
|
2594
|
+
function cycle() {
|
2595
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
|
2596
|
+
const currentIndex = themeArray.indexOf(name.value);
|
2597
|
+
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
|
2598
|
+
change(themeArray[nextIndex]);
|
2599
|
+
}
|
2600
|
+
function toggle() {
|
2601
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
|
2602
|
+
cycle(themeArray);
|
2603
|
+
}
|
2604
|
+
const globalName = new Proxy(name, {
|
2605
|
+
get(target, prop) {
|
2606
|
+
return target[prop];
|
2607
|
+
},
|
2608
|
+
set(target, prop, val) {
|
2609
|
+
if (prop === 'value') {
|
2610
|
+
deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
|
2611
|
+
}
|
2612
|
+
// @ts-expect-error
|
2613
|
+
target[prop] = val;
|
2614
|
+
return true;
|
2615
|
+
}
|
2616
|
+
});
|
2552
2617
|
return {
|
2553
2618
|
install,
|
2619
|
+
change,
|
2620
|
+
cycle,
|
2621
|
+
toggle,
|
2554
2622
|
isDisabled: parsedOptions.isDisabled,
|
2555
2623
|
name,
|
2556
2624
|
themes,
|
2557
2625
|
current,
|
2558
2626
|
computedThemes,
|
2627
|
+
prefix: parsedOptions.prefix,
|
2559
2628
|
themeClasses,
|
2560
2629
|
styles,
|
2561
2630
|
global: {
|
2562
|
-
name,
|
2631
|
+
name: globalName,
|
2563
2632
|
current
|
2564
2633
|
}
|
2565
2634
|
};
|
@@ -2570,7 +2639,7 @@ function provideTheme(props) {
|
|
2570
2639
|
if (!theme) throw new Error('Could not find Vuetify theme injection');
|
2571
2640
|
const name = computed(() => props.theme ?? theme.name.value);
|
2572
2641
|
const current = computed(() => theme.themes.value[name.value]);
|
2573
|
-
const themeClasses = computed(() => theme.isDisabled ? undefined :
|
2642
|
+
const themeClasses = computed(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
|
2574
2643
|
const newTheme = {
|
2575
2644
|
...theme,
|
2576
2645
|
name,
|
@@ -31565,7 +31634,7 @@ function createVuetify$1() {
|
|
31565
31634
|
};
|
31566
31635
|
});
|
31567
31636
|
}
|
31568
|
-
const version$1 = "3.8.1-dev.2025-04-
|
31637
|
+
const version$1 = "3.8.1-dev.2025-04-13";
|
31569
31638
|
createVuetify$1.version = version$1;
|
31570
31639
|
|
31571
31640
|
// Vue's inject() can only be used in setup
|
@@ -31850,7 +31919,7 @@ var index = /*#__PURE__*/Object.freeze({
|
|
31850
31919
|
|
31851
31920
|
/* eslint-disable local-rules/sort-imports */
|
31852
31921
|
|
31853
|
-
const version = "3.8.1-dev.2025-04-
|
31922
|
+
const version = "3.8.1-dev.2025-04-13";
|
31854
31923
|
|
31855
31924
|
/* eslint-disable local-rules/sort-imports */
|
31856
31925
|
|