Skip to content

Commit 4dde4c2

Browse files
authored
feat(projects): add color fading mode.close #567 (#569)
1 parent 59f07d8 commit 4dde4c2

File tree

8 files changed

+38
-20
lines changed

8 files changed

+38
-20
lines changed

src/layouts/modules/theme-drawer/modules/dark-mode.vue

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ function handleGrayscaleChange(value: boolean) {
2525
themeStore.setGrayscale(value);
2626
}
2727
28+
function handleColourWeaknessChange(value: boolean) {
29+
themeStore.setColourWeakness(value);
30+
}
31+
2832
const showSiderInverted = computed(() => !themeStore.darkMode && themeStore.layout.mode.includes('vertical'));
2933
</script>
3034

@@ -53,6 +57,9 @@ const showSiderInverted = computed(() => !themeStore.darkMode && themeStore.layo
5357
<SettingItem :label="$t('theme.grayscale')">
5458
<NSwitch :value="themeStore.grayscale" @update:value="handleGrayscaleChange" />
5559
</SettingItem>
60+
<SettingItem :label="$t('theme.colourWeakness')">
61+
<NSwitch :value="themeStore.colourWeakness" @update:value="handleColourWeaknessChange" />
62+
</SettingItem>
5663
</div>
5764
</template>
5865

src/locales/langs/en-us.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ const local: App.I18n.Schema = {
6565
auto: 'Follow System'
6666
},
6767
grayscale: 'Grayscale',
68+
colourWeakness: 'Colour Weakness',
6869
layoutMode: {
6970
title: 'Layout Mode',
7071
vertical: 'Vertical Menu Mode',

src/locales/langs/zh-cn.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ const local: App.I18n.Schema = {
6565
auto: '跟随系统'
6666
},
6767
grayscale: '灰色模式',
68+
colourWeakness: '色弱模式',
6869
layoutMode: {
6970
title: '布局模式',
7071
vertical: '左侧菜单模式',

src/store/modules/theme/index.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import {
1010
createThemeToken,
1111
getNaiveTheme,
1212
initThemeSettings,
13-
toggleCssDarkMode,
14-
toggleGrayscaleMode
13+
toggleAuxiliaryColorModes,
14+
toggleCssDarkMode
1515
} from './shared';
1616

1717
/** Theme store */
@@ -33,6 +33,9 @@ export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
3333
/** grayscale mode */
3434
const grayscaleMode = computed(() => settings.value.grayscale);
3535

36+
/** colourWeakness mode */
37+
const colourWeaknessMode = computed(() => settings.value.colourWeakness);
38+
3639
/** Theme colors */
3740
const themeColors = computed(() => {
3841
const { themeColor, otherColor, isInfoFollowPrimary } = settings.value;
@@ -79,6 +82,15 @@ export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
7982
settings.value.grayscale = isGrayscale;
8083
}
8184

85+
/**
86+
* Set colourWeakness value
87+
*
88+
* @param isColourWeakness
89+
*/
90+
function setColourWeakness(isColourWeakness: boolean) {
91+
settings.value.colourWeakness = isColourWeakness;
92+
}
93+
8294
/** Toggle theme scheme */
8395
function toggleThemeScheme() {
8496
const themeSchemes: UnionKey.ThemeScheme[] = ['light', 'dark', 'auto'];
@@ -167,9 +179,9 @@ export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
167179
);
168180

169181
watch(
170-
grayscaleMode,
182+
[grayscaleMode, colourWeaknessMode],
171183
val => {
172-
toggleGrayscaleMode(val);
184+
toggleAuxiliaryColorModes(val[0], val[1]);
173185
},
174186
{ immediate: true }
175187
);
@@ -197,6 +209,7 @@ export const useThemeStore = defineStore(SetupStoreId.Theme, () => {
197209
naiveTheme,
198210
settingsJson,
199211
setGrayscale,
212+
setColourWeakness,
200213
resetStore,
201214
setThemeScheme,
202215
toggleThemeScheme,

src/store/modules/theme/shared.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -180,20 +180,16 @@ export function toggleCssDarkMode(darkMode = false) {
180180
}
181181

182182
/**
183-
* Toggle grayscale mode
183+
* Toggle auxiliary color modes
184184
*
185-
* @param grayscaleMode Is grayscale mode
185+
* @param grayscaleMode
186+
* @param colourWeakness
186187
*/
187-
export function toggleGrayscaleMode(grayscaleMode = false) {
188-
const GRAYSCALE_CLASS = 'grayscale';
189-
190-
const { add, remove } = toggleHtmlClass(GRAYSCALE_CLASS);
191-
192-
if (grayscaleMode) {
193-
add();
194-
} else {
195-
remove();
196-
}
188+
export function toggleAuxiliaryColorModes(grayscaleMode = false, colourWeakness = false) {
189+
const htmlElement = document.documentElement;
190+
htmlElement.style.filter = [grayscaleMode ? 'grayscale(100%)' : '', colourWeakness ? 'invert(80%)' : '']
191+
.filter(Boolean)
192+
.join(' ');
197193
}
198194

199195
type NaiveColorScene = '' | 'Suppl' | 'Hover' | 'Pressed' | 'Active';

src/styles/css/global.css

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,3 @@ body,
1111
html {
1212
overflow-x: hidden;
1313
}
14-
15-
html.grayscale {
16-
filter: grayscale(100%);
17-
}

src/theme/settings.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
export const themeSettings: App.Theme.ThemeSetting = {
33
themeScheme: 'light',
44
grayscale: false,
5+
colourWeakness: false,
56
recommendColor: false,
67
themeColor: '#646cff',
78
otherColor: {

src/typings/app.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ declare namespace App {
1010
themeScheme: UnionKey.ThemeScheme;
1111
/** grayscale mode */
1212
grayscale: boolean;
13+
/** colour weakness mode */
14+
colourWeakness: boolean;
1315
/** Whether to recommend color */
1416
recommendColor: boolean;
1517
/** Theme color */
@@ -332,6 +334,7 @@ declare namespace App {
332334
theme: {
333335
themeSchema: { title: string } & Record<UnionKey.ThemeScheme, string>;
334336
grayscale: string;
337+
colourWeakness: string;
335338
layoutMode: { title: string; reverseHorizontalMix: string } & Record<UnionKey.ThemeLayoutMode, string>;
336339
recommendColor: string;
337340
recommendColorDesc: string;

0 commit comments

Comments
 (0)