import { Box, Paper, ThemeProvider, List, ListItem, ListItemButton, ListItemText, SwipeableDrawer, ListItemIcon, IconButton, AppBar, Toolbar, PaletteMode, createTheme, useMediaQuery, useTheme } from "@mui/material"; import React, { Dispatch, ReactNode } from "react"; import { BrowserRouter, Routes, Route, Navigate, useSearchParams } from "react-router-dom"; import { ApiWrapper, getDesignTokens, GlobalUserInfo } from "./common"; import { LoginPage } from "./login"; import ServersBoard from "./servers"; import MenuIcon from '@mui/icons-material/Menu'; import StorageIcon from '@mui/icons-material/Storage'; import WebIcon from '@mui/icons-material/Web'; import Person3Icon from '@mui/icons-material/Person3'; import { UsersPage } from "./users"; import { BrowsersPage } from "./browsers"; import { SignupPage } from "./signup"; import Brightness4Icon from '@mui/icons-material/Brightness4'; import Brightness7Icon from '@mui/icons-material/Brightness7'; import Cookies from 'js-cookie' import TerminalComponent from "./terminal"; const ColorModeContext = React.createContext({ toggleColorMode: () => { } }); function Menu(props: { children: ReactNode, setMode: Dispatch }) { const [open, setOpen] = React.useState(false); const theme = useTheme(); const toggleDrawer = (newOpen: boolean) => () => { setOpen(newOpen); }; const colorMode = React.useContext(ColorModeContext); return ( { setOpen(true) }} > {theme.palette.mode === 'dark' ? : } {props.children} ) } export default function App() { let themeName = Cookies.get('theme') const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)'); if (!themeName) { themeName = prefersDarkMode ? 'dark' : 'light' } const [mode, setMode] = React.useState(themeName as PaletteMode); const colorMode = React.useMemo( () => ({ toggleColorMode: () => { setMode((prevMode) => { const mode = prevMode === 'light' ? 'dark' : 'light' Cookies.set('theme', mode) return mode }); }, }), [], ); const [searchParams, setSearchParams] = useSearchParams(); const theme = React.useMemo(() => createTheme(getDesignTokens(mode)), [mode]); return ( } /> } /> } /> } /> } /> } /> } /> ) }