Alina Lozowski
Migrating to the React project
e7abd9e
raw
history blame
10 kB
import { createTheme, alpha } from "@mui/material/styles";
const getDesignTokens = (mode) => ({
typography: {
fontFamily: [
"-apple-system",
"BlinkMacSystemFont",
'"Segoe UI"',
"Roboto",
'"Helvetica Neue"',
"Arial",
"sans-serif",
].join(","),
h1: {
fontFamily: '"Source Sans Pro", sans-serif',
},
h2: {
fontFamily: '"Source Sans Pro", sans-serif',
},
h3: {
fontFamily: '"Source Sans Pro", sans-serif',
},
h4: {
fontFamily: '"Source Sans Pro", sans-serif',
},
h5: {
fontFamily: '"Source Sans Pro", sans-serif',
},
h6: {
fontFamily: '"Source Sans Pro", sans-serif',
},
subtitle1: {
fontFamily: '"Source Sans Pro", sans-serif',
},
subtitle2: {
fontFamily: '"Source Sans Pro", sans-serif',
},
},
palette: {
mode,
primary: {
main: "#4F86C6",
light: mode === "light" ? "#7BA7D7" : "#6B97D7",
dark: mode === "light" ? "#2B5C94" : "#3B6CA4",
50: mode === "light" ? alpha("#4F86C6", 0.05) : alpha("#4F86C6", 0.15),
100: mode === "light" ? alpha("#4F86C6", 0.1) : alpha("#4F86C6", 0.2),
200: mode === "light" ? alpha("#4F86C6", 0.2) : alpha("#4F86C6", 0.3),
contrastText: "#fff",
},
background: {
default: mode === "light" ? "#f8f9fa" : "#0a0a0a",
paper: mode === "light" ? "#fff" : "#1a1a1a",
subtle: mode === "light" ? "grey.100" : "grey.900",
hover: mode === "light" ? "action.hover" : alpha("#fff", 0.08),
tooltip: mode === "light" ? alpha("#212121", 0.9) : alpha("#fff", 0.9),
},
text: {
primary: mode === "light" ? "rgba(0, 0, 0, 0.87)" : "#fff",
secondary:
mode === "light" ? "rgba(0, 0, 0, 0.6)" : "rgba(255, 255, 255, 0.7)",
disabled:
mode === "light" ? "rgba(0, 0, 0, 0.38)" : "rgba(255, 255, 255, 0.5)",
hint:
mode === "light" ? "rgba(0, 0, 0, 0.38)" : "rgba(255, 255, 255, 0.5)",
},
divider:
mode === "light" ? "rgba(0, 0, 0, 0.12)" : "rgba(255, 255, 255, 0.12)",
action: {
active:
mode === "light" ? "rgba(0, 0, 0, 0.54)" : "rgba(255, 255, 255, 0.7)",
hover:
mode === "light" ? "rgba(0, 0, 0, 0.04)" : "rgba(255, 255, 255, 0.08)",
selected:
mode === "light" ? "rgba(0, 0, 0, 0.08)" : "rgba(255, 255, 255, 0.16)",
disabled:
mode === "light" ? "rgba(0, 0, 0, 0.26)" : "rgba(255, 255, 255, 0.3)",
disabledBackground:
mode === "light" ? "rgba(0, 0, 0, 0.12)" : "rgba(255, 255, 255, 0.12)",
},
},
shape: {
borderRadius: 8,
},
components: {
MuiCssBaseline: {
styleOverrides: {
"html, body": {
backgroundColor: "background.default",
color: mode === "dark" ? "#fff" : "#000",
},
body: {
"& *::-webkit-scrollbar": {
width: 8,
height: 8,
backgroundColor: "transparent",
},
"& *::-webkit-scrollbar-thumb": {
borderRadius: 8,
backgroundColor:
mode === "light" ? alpha("#000", 0.2) : alpha("#fff", 0.1),
"&:hover": {
backgroundColor:
mode === "light" ? alpha("#000", 0.3) : alpha("#fff", 0.15),
},
},
},
},
},
MuiButton: {
styleOverrides: {
root: {
borderRadius: 8,
},
},
},
MuiPaper: {
defaultProps: {
elevation: 0,
},
styleOverrides: {
root: {
backgroundImage: "none",
boxShadow: "none",
border: "1px solid",
borderColor:
mode === "light"
? "rgba(0, 0, 0, 0.12)!important"
: "rgba(255, 255, 255, 0.25)!important",
},
rounded: {
borderRadius: 12,
},
},
},
MuiTableCell: {
styleOverrides: {
root: {
borderColor: (theme) =>
alpha(
theme.palette.divider,
theme.palette.mode === "dark" ? 0.1 : 0.2
),
},
head: {
backgroundColor: mode === "light" ? "grey.50" : "grey.900",
color: "text.primary",
fontWeight: 600,
},
},
},
MuiTableRow: {
styleOverrides: {
root: {
backgroundColor: "transparent",
},
},
},
MuiTableContainer: {
styleOverrides: {
root: {
backgroundColor: "background.paper",
borderRadius: 8,
border: "none",
boxShadow: "none",
},
},
},
MuiSlider: {
styleOverrides: {
root: {
"& .MuiSlider-valueLabel": {
backgroundColor: "background.paper",
color: "text.primary",
border: "1px solid",
borderColor: "divider",
boxShadow:
mode === "light"
? "0px 2px 4px rgba(0, 0, 0, 0.1)"
: "0px 2px 4px rgba(0, 0, 0, 0.3)",
},
},
thumb: {
"&:hover": {
boxShadow: (theme) =>
`0px 0px 0px 8px ${alpha(
theme.palette.primary.main,
mode === "light" ? 0.08 : 0.16
)}`,
},
"&.Mui-active": {
boxShadow: (theme) =>
`0px 0px 0px 12px ${alpha(
theme.palette.primary.main,
mode === "light" ? 0.08 : 0.16
)}`,
},
},
track: {
border: "none",
},
rail: {
opacity: mode === "light" ? 0.38 : 0.3,
},
mark: {
backgroundColor: mode === "light" ? "grey.400" : "grey.600",
},
markLabel: {
color: "text.secondary",
},
},
},
MuiTextField: {
styleOverrides: {
root: {
"& .MuiOutlinedInput-root": {
borderRadius: 8,
},
},
},
},
MuiChip: {
styleOverrides: {
root: {
borderRadius: 8,
},
outlinedInfo: {
borderWidth: 2,
fontWeight: 600,
bgcolor: "info.100",
borderColor: "info.400",
color: "info.700",
"& .MuiChip-label": {
px: 1.2,
},
"&:hover": {
bgcolor: "info.200",
},
},
outlinedWarning: {
borderWidth: 2,
fontWeight: 600,
bgcolor: "warning.100",
borderColor: "warning.400",
color: "warning.700",
"& .MuiChip-label": {
px: 1.2,
},
"&:hover": {
bgcolor: "warning.200",
},
},
outlinedSuccess: {
borderWidth: 2,
fontWeight: 600,
bgcolor: "success.100",
borderColor: "success.400",
color: "success.700",
"& .MuiChip-label": {
px: 1.2,
},
"&:hover": {
bgcolor: "success.200",
},
},
outlinedError: {
borderWidth: 2,
fontWeight: 600,
bgcolor: "error.100",
borderColor: "error.400",
color: "error.700",
"& .MuiChip-label": {
px: 1.2,
},
"&:hover": {
bgcolor: "error.200",
},
},
outlinedPrimary: {
borderWidth: 2,
fontWeight: 600,
bgcolor: "primary.100",
borderColor: "primary.400",
color: "primary.700",
"& .MuiChip-label": {
px: 1.2,
},
"&:hover": {
bgcolor: "primary.200",
},
},
outlinedSecondary: {
borderWidth: 2,
fontWeight: 600,
bgcolor: "secondary.100",
borderColor: "secondary.400",
color: "secondary.700",
"& .MuiChip-label": {
px: 1.2,
},
"&:hover": {
bgcolor: "secondary.200",
},
},
},
},
MuiIconButton: {
styleOverrides: {
root: {
borderRadius: 8,
padding: "8px",
"&.MuiIconButton-sizeSmall": {
padding: "4px",
borderRadius: 6,
},
},
},
},
MuiTooltip: {
styleOverrides: {
tooltip: {
backgroundColor:
mode === "light" ? alpha("#212121", 0.9) : alpha("#424242", 0.9),
color: "#fff",
fontSize: "0.875rem",
padding: "8px 12px",
maxWidth: 400,
borderRadius: 8,
lineHeight: 1.4,
border: "1px solid",
borderColor:
mode === "light" ? alpha("#fff", 0.1) : alpha("#fff", 0.05),
boxShadow:
mode === "light"
? "0 2px 8px rgba(0, 0, 0, 0.15)"
: "0 2px 8px rgba(0, 0, 0, 0.5)",
"& b": {
fontWeight: 600,
color: "inherit",
},
"& a": {
color: mode === "light" ? "#90caf9" : "#64b5f6",
textDecoration: "none",
"&:hover": {
textDecoration: "underline",
},
},
},
arrow: {
color:
mode === "light" ? alpha("#212121", 0.9) : alpha("#424242", 0.9),
"&:before": {
border: "1px solid",
borderColor:
mode === "light" ? alpha("#fff", 0.1) : alpha("#fff", 0.05),
},
},
},
defaultProps: {
arrow: true,
enterDelay: 400,
leaveDelay: 200,
},
},
MuiAppBar: {
styleOverrides: {
root: {
border: "none",
borderBottom: "none",
},
},
},
},
});
const getTheme = (mode) => {
const tokens = getDesignTokens(mode);
return createTheme(tokens);
};
export default getTheme;