diff options
Diffstat (limited to 'packages/renderer/src/components/ThemeProvider.tsx')
-rw-r--r-- | packages/renderer/src/components/ThemeProvider.tsx | 103 |
1 files changed, 88 insertions, 15 deletions
diff --git a/packages/renderer/src/components/ThemeProvider.tsx b/packages/renderer/src/components/ThemeProvider.tsx index 3943371..50cc1c9 100644 --- a/packages/renderer/src/components/ThemeProvider.tsx +++ b/packages/renderer/src/components/ThemeProvider.tsx | |||
@@ -23,22 +23,95 @@ import { | |||
23 | ThemeProvider as MuiThemeProvider, | 23 | ThemeProvider as MuiThemeProvider, |
24 | } from '@mui/material/styles'; | 24 | } from '@mui/material/styles'; |
25 | import { observer } from 'mobx-react-lite'; | 25 | import { observer } from 'mobx-react-lite'; |
26 | import React from 'react'; | 26 | import React, { type ReactNode } from 'react'; |
27 | 27 | ||
28 | import { useStore } from './StoreProvider'; | 28 | import type RendererStore from '../stores/RendererStore.js'; |
29 | 29 | ||
30 | export default observer( | 30 | function ThemeProvider({ |
31 | ({ children }: { children: JSX.Element | JSX.Element[] }) => { | 31 | children, |
32 | const { | 32 | store: { |
33 | shared: { shouldUseDarkColors }, | 33 | shared: { shouldUseDarkColors, writingDirection }, |
34 | } = useStore(); | 34 | }, |
35 | 35 | }: { | |
36 | const theme = createTheme({ | 36 | children?: ReactNode; |
37 | palette: { | 37 | store: RendererStore; |
38 | mode: shouldUseDarkColors ? 'dark' : 'light', | 38 | }) { |
39 | const theme = createTheme({ | ||
40 | direction: writingDirection, | ||
41 | palette: shouldUseDarkColors | ||
42 | ? { | ||
43 | mode: 'dark', | ||
44 | divider: 'rgba(255, 255, 255, 0.22)', | ||
45 | } | ||
46 | : { | ||
47 | mode: 'light', | ||
48 | divider: 'rgba(0, 0, 0, 0.24)', | ||
49 | }, | ||
50 | typography: { | ||
51 | fontFamily: 'system-ui', | ||
52 | body1: { | ||
53 | letterSpacing: 0, | ||
54 | }, | ||
55 | body2: { | ||
56 | letterSpacing: 0, | ||
57 | }, | ||
58 | subtitle1: { | ||
59 | letterSpacing: 0, | ||
60 | }, | ||
61 | subtitle2: { | ||
62 | letterSpacing: 0, | ||
63 | }, | ||
64 | button: { | ||
65 | fontSize: '1rem', | ||
66 | textTransform: 'none', | ||
67 | letterSpacing: 0, | ||
68 | lineHeight: 1.5, | ||
69 | fontWeight: 700, | ||
70 | }, | ||
71 | }, | ||
72 | components: { | ||
73 | MuiBadge: { | ||
74 | styleOverrides: { | ||
75 | standard: { | ||
76 | // Reduce badge with to make the unread message badge with "99+" unread messages | ||
77 | // fit within the sidebar. Applied for all badges for consistency. | ||
78 | paddingLeft: 4, | ||
79 | paddingRight: 4, | ||
80 | }, | ||
81 | }, | ||
39 | }, | 82 | }, |
40 | }); | 83 | MuiIconButton: { |
84 | styleOverrides: { | ||
85 | sizeMedium: { | ||
86 | padding: 6, | ||
87 | }, | ||
88 | }, | ||
89 | }, | ||
90 | MuiButton: { | ||
91 | styleOverrides: { | ||
92 | sizeSmall: { | ||
93 | fontSize: '0.875rem', | ||
94 | }, | ||
95 | sizeLarge: { | ||
96 | fontSize: '1rem', | ||
97 | }, | ||
98 | }, | ||
99 | }, | ||
100 | MuiTab: { | ||
101 | styleOverrides: { | ||
102 | root: { | ||
103 | fontWeight: 500, | ||
104 | }, | ||
105 | }, | ||
106 | }, | ||
107 | }, | ||
108 | }); | ||
41 | 109 | ||
42 | return <MuiThemeProvider theme={theme}>{children}</MuiThemeProvider>; | 110 | return <MuiThemeProvider theme={theme}>{children}</MuiThemeProvider>; |
43 | }, | 111 | } |
44 | ); | 112 | |
113 | ThemeProvider.defaultProps = { | ||
114 | children: undefined, | ||
115 | }; | ||
116 | |||
117 | export default observer(ThemeProvider); | ||