mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-05-06 14:46:04 +02:00
Fix theme mode fallback
This commit is contained in:
@@ -516,7 +516,7 @@
|
|||||||
const handleThemeSelect = (theme) => {
|
const handleThemeSelect = (theme) => {
|
||||||
themeMenuVisible.value = false;
|
themeMenuVisible.value = false;
|
||||||
settingsMenuVisible.value = false;
|
settingsMenuVisible.value = false;
|
||||||
appearanceSettingsStore.saveThemeMode(theme);
|
appearanceSettingsStore.setThemeMode(theme);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleThemeColorSelect = async (colorFamily) => {
|
const handleThemeColorSelect = async (colorFamily) => {
|
||||||
|
|||||||
@@ -23,9 +23,7 @@ export async function initUi() {
|
|||||||
|
|
||||||
const { initThemeMode, isDarkMode } =
|
const { initThemeMode, isDarkMode } =
|
||||||
await getThemeMode(configRepository);
|
await getThemeMode(configRepository);
|
||||||
|
|
||||||
setLoginContainerStyle(isDarkMode);
|
setLoginContainerStyle(isDarkMode);
|
||||||
changeAppDarkStyle(isDarkMode);
|
|
||||||
changeAppThemeStyle(initThemeMode);
|
changeAppThemeStyle(initThemeMode);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error initializing locale and theme:', error);
|
console.error('Error initializing locale and theme:', error);
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import { i18n } from '../../../plugin/i18n';
|
|||||||
import { router } from '../../../plugin/router';
|
import { router } from '../../../plugin/router';
|
||||||
import { useAppearanceSettingsStore } from '../../../stores';
|
import { useAppearanceSettingsStore } from '../../../stores';
|
||||||
|
|
||||||
|
import configRepository from '../../../service/config.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
@@ -74,11 +76,11 @@ function changeAppThemeStyle(themeMode) {
|
|||||||
|
|
||||||
let themeConfig = THEME_CONFIG[themeMode];
|
let themeConfig = THEME_CONFIG[themeMode];
|
||||||
if (!themeConfig) {
|
if (!themeConfig) {
|
||||||
|
// fallback to system
|
||||||
console.error('Invalid theme mode:', themeMode);
|
console.error('Invalid theme mode:', themeMode);
|
||||||
themeMode = 'dark';
|
configRepository.setString('VRCX_ThemeMode', 'system');
|
||||||
|
themeMode = systemIsDarkMode() ? 'dark' : 'light';
|
||||||
themeConfig = THEME_CONFIG[themeMode];
|
themeConfig = THEME_CONFIG[themeMode];
|
||||||
const appSettingsStore = useAppearanceSettingsStore();
|
|
||||||
appSettingsStore.setThemeMode(themeMode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const cssFiles = Array.isArray(themeConfig.cssFiles)
|
const cssFiles = Array.isArray(themeConfig.cssFiles)
|
||||||
@@ -116,6 +118,8 @@ function changeAppThemeStyle(themeMode) {
|
|||||||
}
|
}
|
||||||
changeAppDarkStyle(themeConfig.isDark);
|
changeAppDarkStyle(themeConfig.isDark);
|
||||||
|
|
||||||
|
return { isDark: themeConfig.isDark };
|
||||||
|
|
||||||
// let $appThemeDarkStyle = document.getElementById('app-theme-dark-style');
|
// let $appThemeDarkStyle = document.getElementById('app-theme-dark-style');
|
||||||
// const darkThemeCssPath = `${filePathPrefix}theme.dark.css`;
|
// const darkThemeCssPath = `${filePathPrefix}theme.dark.css`;
|
||||||
// const shouldApplyDarkBase = themeConfig.isDark;
|
// const shouldApplyDarkBase = themeConfig.isDark;
|
||||||
@@ -313,7 +317,6 @@ async function getThemeMode(configRepository) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
let isDarkMode;
|
let isDarkMode;
|
||||||
|
|
||||||
if (initThemeMode === 'light') {
|
if (initThemeMode === 'light') {
|
||||||
isDarkMode = false;
|
isDarkMode = false;
|
||||||
} else if (initThemeMode === 'system') {
|
} else if (initThemeMode === 'system') {
|
||||||
|
|||||||
@@ -6,13 +6,10 @@ import { useRouter } from 'vue-router';
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
HueToHex,
|
HueToHex,
|
||||||
changeAppDarkStyle,
|
|
||||||
changeAppThemeStyle,
|
changeAppThemeStyle,
|
||||||
changeHtmlLangAttribute,
|
changeHtmlLangAttribute,
|
||||||
systemIsDarkMode,
|
|
||||||
updateTrustColorClasses
|
updateTrustColorClasses
|
||||||
} from '../../shared/utils/base/ui';
|
} from '../../shared/utils/base/ui';
|
||||||
import { THEME_CONFIG } from '../../shared/constants';
|
|
||||||
import { database } from '../../service/database';
|
import { database } from '../../service/database';
|
||||||
import { getNameColour } from '../../shared/utils';
|
import { getNameColour } from '../../shared/utils';
|
||||||
import { languageCodes } from '../../localization';
|
import { languageCodes } from '../../localization';
|
||||||
@@ -204,16 +201,8 @@ export const useAppearanceSettingsStore = defineStore(
|
|||||||
await changeAppLanguage(appLanguageConfig);
|
await changeAppLanguage(appLanguageConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
const normalizedThemeMode = normalizeThemeMode(themeModeConfig);
|
themeMode.value = themeModeConfig;
|
||||||
if (normalizedThemeMode !== themeModeConfig) {
|
setThemeMode(themeModeConfig);
|
||||||
configRepository.setString(
|
|
||||||
'VRCX_ThemeMode',
|
|
||||||
normalizedThemeMode
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
themeMode.value = normalizedThemeMode;
|
|
||||||
applyThemeMode();
|
|
||||||
await initPrimaryColor();
|
await initPrimaryColor();
|
||||||
|
|
||||||
displayVRCPlusIconsAsAvatar.value =
|
displayVRCPlusIconsAsAvatar.value =
|
||||||
@@ -289,14 +278,6 @@ export const useAppearanceSettingsStore = defineStore(
|
|||||||
{ flush: 'sync' }
|
{ flush: 'sync' }
|
||||||
);
|
);
|
||||||
|
|
||||||
function normalizeThemeMode(mode) {
|
|
||||||
if (Object.prototype.hasOwnProperty.call(THEME_CONFIG, mode)) {
|
|
||||||
return mode;
|
|
||||||
} else {
|
|
||||||
return 'dark';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {string} language
|
* @param {string} language
|
||||||
@@ -321,21 +302,6 @@ export const useAppearanceSettingsStore = defineStore(
|
|||||||
changeHtmlLangAttribute(language);
|
changeHtmlLangAttribute(language);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {string} newThemeMode
|
|
||||||
* @returns {Promise<void>}
|
|
||||||
*/
|
|
||||||
async function saveThemeMode(newThemeMode) {
|
|
||||||
setThemeMode(newThemeMode);
|
|
||||||
await changeThemeMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
async function changeThemeMode() {
|
|
||||||
await changeAppThemeStyle(themeMode.value);
|
|
||||||
vrStore.updateVRConfigVars();
|
|
||||||
await updateTrustColor(undefined, undefined);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {string} field
|
* @param {string} field
|
||||||
@@ -463,7 +429,7 @@ export const useAppearanceSettingsStore = defineStore(
|
|||||||
.matchMedia('(prefers-color-scheme: dark)')
|
.matchMedia('(prefers-color-scheme: dark)')
|
||||||
.addEventListener('change', async () => {
|
.addEventListener('change', async () => {
|
||||||
if (themeMode.value === 'system') {
|
if (themeMode.value === 'system') {
|
||||||
await changeThemeMode();
|
setThemeMode(themeMode.value);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -471,29 +437,14 @@ export const useAppearanceSettingsStore = defineStore(
|
|||||||
* @param {string} mode
|
* @param {string} mode
|
||||||
*/
|
*/
|
||||||
function setThemeMode(mode) {
|
function setThemeMode(mode) {
|
||||||
const normalizedThemeMode = normalizeThemeMode(mode);
|
themeMode.value = mode;
|
||||||
themeMode.value = normalizedThemeMode;
|
configRepository.setString('VRCX_ThemeMode', mode);
|
||||||
configRepository.setString('VRCX_ThemeMode', normalizedThemeMode);
|
const { isDark } = changeAppThemeStyle(mode);
|
||||||
applyThemeMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
function applyThemeMode() {
|
|
||||||
if (themeMode.value === 'light') {
|
|
||||||
setIsDarkMode(false);
|
|
||||||
} else if (themeMode.value === 'system') {
|
|
||||||
setIsDarkMode(systemIsDarkMode());
|
|
||||||
} else {
|
|
||||||
setIsDarkMode(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {boolean} isDark
|
|
||||||
*/
|
|
||||||
function setIsDarkMode(isDark) {
|
|
||||||
isDarkMode.value = isDark;
|
isDarkMode.value = isDark;
|
||||||
changeAppDarkStyle(isDark);
|
vrStore.updateVRConfigVars();
|
||||||
|
updateTrustColor(undefined, undefined);
|
||||||
}
|
}
|
||||||
|
|
||||||
function setDisplayVRCPlusIconsAsAvatar() {
|
function setDisplayVRCPlusIconsAsAvatar() {
|
||||||
displayVRCPlusIconsAsAvatar.value =
|
displayVRCPlusIconsAsAvatar.value =
|
||||||
!displayVRCPlusIconsAsAvatar.value;
|
!displayVRCPlusIconsAsAvatar.value;
|
||||||
@@ -904,10 +855,8 @@ export const useAppearanceSettingsStore = defineStore(
|
|||||||
setRandomUserColours,
|
setRandomUserColours,
|
||||||
setCompactTableMode,
|
setCompactTableMode,
|
||||||
setTrustColor,
|
setTrustColor,
|
||||||
saveThemeMode,
|
|
||||||
tryInitUserColours,
|
tryInitUserColours,
|
||||||
updateTrustColor,
|
updateTrustColor,
|
||||||
changeThemeMode,
|
|
||||||
userColourInit,
|
userColourInit,
|
||||||
applyUserTrustLevel,
|
applyUserTrustLevel,
|
||||||
changeAppLanguage,
|
changeAppLanguage,
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="options-container-item">
|
<div class="options-container-item">
|
||||||
<span class="name">{{ t('view.settings.appearance.appearance.theme_mode') }}</span>
|
<span class="name">{{ t('view.settings.appearance.appearance.theme_mode') }}</span>
|
||||||
<Select :model-value="themeMode" @update:modelValue="saveThemeMode">
|
<Select :model-value="themeMode" @update:modelValue="setThemeMode">
|
||||||
<SelectTrigger size="sm">
|
<SelectTrigger size="sm">
|
||||||
<SelectValue :placeholder="t(`view.settings.appearance.appearance.theme_mode_${themeMode}`)" />
|
<SelectValue :placeholder="t(`view.settings.appearance.appearance.theme_mode_${themeMode}`)" />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
@@ -437,7 +437,7 @@
|
|||||||
setHideUserMemos,
|
setHideUserMemos,
|
||||||
setHideUnfriends,
|
setHideUnfriends,
|
||||||
updateTrustColor,
|
updateTrustColor,
|
||||||
saveThemeMode,
|
setThemeMode,
|
||||||
changeAppLanguage,
|
changeAppLanguage,
|
||||||
promptMaxTableSizeDialog,
|
promptMaxTableSizeDialog,
|
||||||
setNotificationIconDot,
|
setNotificationIconDot,
|
||||||
|
|||||||
Reference in New Issue
Block a user