aboutsummaryrefslogtreecommitdiffstats
path: root/language-web/src/main/js/theme/ThemeStore.ts
diff options
context:
space:
mode:
Diffstat (limited to 'language-web/src/main/js/theme/ThemeStore.ts')
-rw-r--r--language-web/src/main/js/theme/ThemeStore.ts53
1 files changed, 53 insertions, 0 deletions
diff --git a/language-web/src/main/js/theme/ThemeStore.ts b/language-web/src/main/js/theme/ThemeStore.ts
new file mode 100644
index 00000000..0f283c98
--- /dev/null
+++ b/language-web/src/main/js/theme/ThemeStore.ts
@@ -0,0 +1,53 @@
1import {
2 Theme,
3 createTheme,
4 responsiveFontSizes,
5} from '@material-ui/core/styles';
6import { makeAutoObservable } from 'mobx';
7
8import {
9 EditorTheme,
10 EditorThemeData,
11 DEFAULT_THEME,
12 EDITOR_THEMES,
13} from './EditorTheme';
14
15export class ThemeStore {
16 currentTheme: EditorTheme = DEFAULT_THEME;
17
18 constructor() {
19 makeAutoObservable(this);
20 }
21
22 toggleDarkMode(): void {
23 this.currentTheme = this.currentThemeData.toggleDarkMode;
24 }
25
26 private get currentThemeData(): EditorThemeData {
27 return EDITOR_THEMES[this.currentTheme];
28 }
29
30 get materialUiTheme(): Theme {
31 const themeData = this.currentThemeData;
32 const materialUiTheme = createTheme({
33 palette: {
34 mode: themeData.paletteMode,
35 background: {
36 default: themeData.background,
37 paper: themeData.paper,
38 },
39 primary: {
40 main: themeData.primary,
41 },
42 secondary: {
43 main: themeData.secondary,
44 },
45 },
46 });
47 return responsiveFontSizes(materialUiTheme);
48 }
49
50 get codeMirrorTheme(): string {
51 return `problem-${this.currentThemeData.className}`;
52 }
53}