1- import { CssBaseline , ThemeProvider , createTheme } from "@mui/material" ;
2- import Typography from "@mui/material/Typography" ;
1+ import { useMemo , useState } from "react" ;
2+ import {
3+ CssBaseline ,
4+ ThemeProvider ,
5+ createTheme ,
6+ useMediaQuery ,
7+ } from "@mui/material" ;
38
49import { initializeContributions } from "chartlets" ;
510import mui from "chartlets/plugins/mui" ;
@@ -10,6 +15,7 @@ import ExtensionsInfo from "./components/ExtensionInfo";
1015import ControlBar from "./components/ControlBar" ;
1116import PanelsControl from "./components/PanelsControl" ;
1217import PanelsRow from "./components/PanelsRow" ;
18+ import Header , { type Mode } from "./components/Header" ;
1319
1420initializeContributions ( {
1521 plugins : [ mui ( ) , vega ( ) ] ,
@@ -28,27 +34,35 @@ initializeContributions({
2834 logging : { enabled : true } ,
2935} ) ;
3036
31- // MUI's default font family
37+ // Material Design default font families
3238const fontFamily = "Roboto, Arial, sans-serif" ;
3339
34- const theme = createTheme ( {
35- typography : { fontFamily } ,
36- components : {
37- MuiCssBaseline : {
38- styleOverrides : {
39- "*" : { fontFamily } ,
40- } ,
41- } ,
42- } ,
43- } ) ;
44-
4540function App ( ) {
41+ const prefersDarkMode = useMediaQuery ( "(prefers-color-scheme: dark)" ) ;
42+ const systemMode = prefersDarkMode ? "dark" : "light" ;
43+ const [ mode , setMode ] = useState < Mode > ( systemMode ) ;
44+ const theme = useMemo (
45+ ( ) =>
46+ createTheme ( {
47+ palette : {
48+ mode : mode === "system" ? systemMode : mode ,
49+ } ,
50+ typography : { fontFamily } ,
51+ components : {
52+ MuiCssBaseline : {
53+ styleOverrides : {
54+ "*" : { fontFamily } ,
55+ } ,
56+ } ,
57+ } ,
58+ } ) ,
59+ [ mode , systemMode ] ,
60+ ) ;
61+
4662 return (
4763 < ThemeProvider theme = { theme } >
4864 < CssBaseline />
49- < Typography fontSize = "3em" fontWeight = "bold" >
50- Chartlets Demo
51- </ Typography >
65+ < Header mode = { mode } setMode = { setMode } />
5266 < ExtensionsInfo />
5367 < ControlBar />
5468 < PanelsControl />
0 commit comments