Mantis MUI React
v3.5.0
v3.5.0
  • Documentation
  • Pre-requisites
  • Quick Start
  • Package
  • Folder Structure
  • State Management
  • Internationalization
  • Authentication
    • Switch to Auth0
    • Switch to Firebase
    • Switch to AWS Cognito
    • Switch to Supabase
  • Axios API Calls
  • Routing
  • Project Configuration
  • Color Presets
  • Theme/Style Configuration
  • How to
    • Login as First Page
    • Dashboard as First Page
    • Render Menu from the backend
    • Remove menu render from Backend
    • Remove Authentication
      • Vite
      • NextJS
  • Figma
  • Integration
    • Seed
    • To Existing Project
    • Comparison
  • Components
    • Avatar
    • BreadCrumb
    • Button
    • Dot
    • Main Card
    • Progress
    • SnackBar
    • Tooltip
    • Transitions
  • Dependencies
  • Roadmap
  • Support
  • Changelog
  • Mantis Eco System
  • FAQ
Powered by GitBook
On this page

Theme/Style Configuration

Defines core of theme. How theme is being set using Material-UI.

Customize Mantis with your theme. You can change the colors, the typography, and much more. Material-UI provides flexibility to change the style of the project in a single place and on top of it, we made it more centralized and consistent with the proper file structure.

Theme configuration

The whole theme can be configured from the folder.src/themes/index.tsx Theme initialization starts index.jsxwhere the palette, typography, and component's overridable style exist.

src/themes/index.tsx
import { ReactNode, useMemo } from 'react';

// material-ui
import StyledEngineProvider from '@mui/material/StyledEngineProvider';
import { createTheme, ThemeOptions, ThemeProvider, Theme, TypographyVariantsOptions } from '@mui/material/styles';
import CssBaseline from '@mui/material/CssBaseline';

// project imports
import useConfig from 'hooks/useConfig';
import Palette from './palette';
import Typography from './typography';
import CustomShadows from './shadows';
import componentsOverride from './overrides';

// types
import { CustomShadowProps } from 'types/theme';

// types
type ThemeCustomizationProps = {
  children: ReactNode;
};

// ==============================|| DEFAULT THEME - MAIN ||============================== //

export default function ThemeCustomization({ children }: ThemeCustomizationProps) {
  const { themeDirection, mode, presetColor, fontFamily } = useConfig();

  const theme: Theme = useMemo<Theme>(() => Palette(mode, presetColor), [mode, presetColor]);

  const themeTypography: TypographyVariantsOptions = useMemo<TypographyVariantsOptions>(() => Typography(fontFamily), [fontFamily]);

  const themeCustomShadows: CustomShadowProps = useMemo<CustomShadowProps>(() => CustomShadows(theme), [theme]);

  const themeOptions: ThemeOptions = useMemo(
    () => ({
      breakpoints: {
        values: {
          xs: 0,
          sm: 768,
          md: 1024,
          lg: 1266,
          xl: 1440
        }
      },
      direction: themeDirection,
      mixins: {
        toolbar: {
          minHeight: 60,
          paddingTop: 8,
          paddingBottom: 8
        }
      },
      palette: theme.palette,
      customShadows: themeCustomShadows,
      typography: themeTypography
    }),
    [themeDirection, theme, themeTypography, themeCustomShadows]
  );

  const themes: Theme = createTheme(themeOptions);
  themes.components = componentsOverride(themes);

  return (
    <StyledEngineProvider injectFirst>
      <ThemeProvider theme={themes}>
        <CssBaseline enableColorScheme />
        {children}
      </ThemeProvider>
    </StyledEngineProvider>
  );
}

You can check other settings like theme typography, palette, and component style override in the same folder. src\themes

How to customize it?

You might come across questions like how to change a theme's primary color. How do I change the textbox or other components that can apply to an entire theme?

Customize Theme Colors

To change the color of the theme, you can apply color directly to src\theme\palatte.ts

For instance, if you want to change color that theme.palette.primary.light is being used in a theme, then update the following in src\themes\palatte.ts

src/themes/palette.ts
...

// ==============================|| DEFAULT THEME - PALETTE  ||============================== //

export default function Palette(mode: ThemeMode, presetColor: PresetColor) {
  const colors: PalettesProps = mode === ThemeMode.DARK ? presetDarkPalettes : presetPalettes;
  ...
  return createTheme({
    palette: {
      ...
      text: {
         primary: mode === ThemeMode.DARK ? alpha(paletteColor.grey[900]!, 0.87) : paletteColor.grey[700],
        ...
      },
      ...
    }
  });
};

Customize Theme Typography

You can customize the typography used in the theme as well from the central place.

For instance, If you want to change font-weight the typography h5 to 600. To do that, open src\themes\typography.ts and update as below:

src/themes/typography.ts
/**
 * Typography used in theme
 */
export default function Typography(fontFamily: FontFamily): TypographyVariantsOptions {
  return {
        ...
        h5: {
            ...
            fontWeight: 600 // changed this to make it 900 from 500
        },
        ...
    };
}

This will apply to all places where you used Typography variants as h5

<Typography variant="h5"...>

Customize MUI Component style

We have provided a central location to override any default style of any component. All the override styles exist in src\themes\overrides

src/themes/overrides/Accordion.ts
// material-ui
import { Theme } from '@mui/material/styles';

// ==============================|| OVERRIDES - ALERT TITLE ||============================== //

export default function Accordion(theme: Theme) {
  return {
    MuiAccordion: {
      defaultProps: {
        disableGutters: true,
        square: true,
        elevation: 0
      },
      styleOverrides: {
        root: {
          border: '1px solid',
          borderColor: theme.palette.secondary.light,
          '&:not(:last-child)': {
            borderBottom: 0
          },
          '&:before': {
            display: 'none'
          },
          '&.Mui-disabled': {
            backgroundColor: theme.palette.secondary.lighter
          }
        }
      }
    }
  };
}

You can add a default property for any MUI component and it will be applied everywhere. We emitted lines to view it better in the above code block but you can see many controls' styles overridden in the same file. Feel free to change it as per your need.

Customize Mantis with your theme. You can change the colors, the typography, and much more. Material-UI provides flexibility to change the style of the project in a single place and on top of it, we made it more centralized and consistent with the proper file structure.

Theme configuration

The whole theme can be configured from the folder.src/themes/index.jsx Theme initialization starts index.jsxwhere the palette, typography, and component's overridable style exist.

src/themes/index.jsx
import PropTypes from 'prop-types';
import { useMemo } from 'react';

// material-ui
import StyledEngineProvider from '@mui/material/StyledEngineProvider';
import { createTheme, ThemeProvider } from '@mui/material/styles';
import CssBaseline from '@mui/material/CssBaseline';

// project imports
import useConfig from 'hooks/useConfig';
import Palette from './palette';
import Typography from './typography';
import CustomShadows from './shadows';
import componentsOverride from './overrides';

// ==============================|| DEFAULT THEME - MAIN ||============================== //

export default function ThemeCustomization({ children }) {
  const { themeDirection, mode, presetColor, fontFamily } = useConfig();

  const theme = useMemo(() => Palette(mode, presetColor), [mode, presetColor]);

  const themeTypography = useMemo(() => Typography(fontFamily), [fontFamily]);

  const themeCustomShadows = useMemo(() => CustomShadows(theme), [theme]);

  const themeOptions = useMemo(
    () => ({
      breakpoints: {
        values: {
          xs: 0,
          sm: 768,
          md: 1024,
          lg: 1266,
          xl: 1440
        }
      },
      direction: themeDirection,
      mixins: {
        toolbar: {
          minHeight: 60,
          paddingTop: 8,
          paddingBottom: 8
        }
      },
      palette: theme.palette,
      customShadows: themeCustomShadows,
      typography: themeTypography
    }),
    [themeDirection, theme, themeTypography, themeCustomShadows]
  );

  const themes = createTheme(themeOptions);
  themes.components = componentsOverride(themes);

  return (
    <StyledEngineProvider injectFirst>
      <ThemeProvider theme={themes}>
        <CssBaseline enableColorScheme />
        {children}
      </ThemeProvider>
    </StyledEngineProvider>
  );
}

ThemeCustomization.propTypes = { children: PropTypes.node };

You can check other settings like theme typography, palette, and component style override in the same folder. src\themes

How to customize it?

You might come across questions like how to change a theme's primary color. How do I change the textbox or other components that can apply to an entire theme?

Customize Theme Colors

To change the color of the theme, you can apply color directly to src\theme\palatte.js

For instance, if you want to change color that theme.palette.primary.light is being used in a theme, then update the following in src\themes\palatte.js

src/themes/palette.js
...

// ==============================|| DEFAULT THEME - PALETTE  ||============================== //

export default function Palette(mode, presetColor) {
  const colors = mode === ThemeMode.DARK ? presetDarkPalettes : presetPalettes;
  ...
  return createTheme({
    palette: {
      ...
      text: {
        primary: mode === ThemeMode.DARK ? alpha(paletteColor.grey[900], 0.87) : paletteColor.grey[700],
        ...
      },
      ...
    }
  });
};

Customize Theme Typography

You can customize the typography used in the theme as well from the central place.

For instance, If you want to change font-weight the typography h5 to 600. To do that, open src\themes\typography.js and update as below:

src/themes/typography.js
/**
 * Typography used in theme
 */
export default function Typography(fontFamily){
  return {
        ...
        h5: {
            ...
            fontWeight: 600 // changed this to make it 900 from 500
        },
        ...
    };
}

This will apply to all places where you used Typography variants as h5

<Typography variant="h5"...>

Customize MUI Component style

We have provided a central location to override any default style of any component. All the override styles exist in src\themes\overrides

src/themes/overrides/Accordion.js
// ==============================|| OVERRIDES - ALERT TITLE ||============================== //

export default function Accordion(theme) {
  return {
    MuiAccordion: {
      defaultProps: {
        disableGutters: true,
        square: true,
        elevation: 0
      },
      styleOverrides: {
        root: {
          border: '1px solid',
          borderColor: theme.palette.secondary.light,
          '&:not(:last-child)': {
            borderBottom: 0
          },
          '&:before': {
            display: 'none'
          },
          '&.Mui-disabled': {
            backgroundColor: theme.palette.secondary.lighter
          }
        }
      }
    }
  };
}

You can add a default property for any MUI component and it will be applied everywhere. We emitted lines to view it better in the above code block but you can see many controls' styles overridden in the same file. Feel free to change it as per your need.

Customize Mantis with your theme. You can change the colors, the typography, and much more. Material-UI provides flexibility to change the style of the project in a single place and on top of it, we made it more centralized and consistent with the proper file structure.

Theme configuration

The whole theme can be configured from the folder.src/themes/index.tsx Theme initialization starts index.jsxwhere the palette, typography, and component's overridable style exist.

src/themes/index.tsx
import { ReactNode, useMemo } from 'react';

// material-ui
import { createTheme, ThemeOptions, ThemeProvider, Theme, TypographyVariantsOptions } from '@mui/material/styles';
import CssBaseline from '@mui/material/CssBaseline';

// project imports
import useConfig from 'hooks/useConfig';
import Palette from './palette';
import Typography from './typography';
import CustomShadows from './shadows';
import componentsOverride from './overrides';
import { NextAppDirEmotionCacheProvider } from './emotionCache';

// types
import { CustomShadowProps } from 'types/theme';

// types
type ThemeCustomizationProps = {
  children: ReactNode;
};

// ==============================|| DEFAULT THEME - MAIN ||============================== //

export default function ThemeCustomization({ children }: ThemeCustomizationProps) {
  const { themeDirection, mode, presetColor, fontFamily } = useConfig();

  const theme: Theme = useMemo<Theme>(() => Palette(mode, presetColor), [mode, presetColor]);

  const themeTypography: TypographyVariantsOptions = useMemo<TypographyVariantsOptions>(() => Typography(fontFamily), [fontFamily]);
  const themeCustomShadows: CustomShadowProps = useMemo<CustomShadowProps>(() => CustomShadows(theme), [theme]);

  const themeOptions: ThemeOptions = useMemo(
    () => ({
      breakpoints: {
        values: {
          xs: 0,
          sm: 768,
          md: 1024,
          lg: 1266,
          xl: 1440
        }
      },
      direction: themeDirection,
      mixins: {
        toolbar: {
          minHeight: 60,
          paddingTop: 8,
          paddingBottom: 8
        }
      },
      palette: theme.palette,
      customShadows: themeCustomShadows,
      typography: themeTypography
    }),
    [themeDirection, theme, themeTypography, themeCustomShadows]
  );

  const themes: Theme = createTheme(themeOptions);
  themes.components = componentsOverride(themes);

  return (
    <NextAppDirEmotionCacheProvider options={{ key: 'mui' }}>
      <ThemeProvider theme={themes}>
        <CssBaseline enableColorScheme />
        {children}
      </ThemeProvider>
    </NextAppDirEmotionCacheProvider>
  );
}

You can check other settings like theme typography, palette, and component style override in the same folder. src\themes

How to customize it?

You might come across questions like how to change a theme's primary color. How do I change the textbox or other components that can apply to an entire theme?

Customize Theme Colors

To change the color of the theme, you can apply color directly to src\theme\palatte.ts

For instance, if you want to change color that theme.palette.primary.light is being used in a theme, then update the following in src\themes\palatte.ts

src/themes/palette.ts
...

// ==============================|| DEFAULT THEME - PALETTE  ||============================== //

export default function Palette(mode: ThemeMode, presetColor: PresetColor) {
  const colors: PalettesProps = mode === ThemeMode.DARK ? presetDarkPalettes : presetPalettes;
  ...
  return createTheme({
    palette: {
      ...
      text: {
         primary: mode === ThemeMode.DARK ? alpha(paletteColor.grey[900]!, 0.87) : paletteColor.grey[700],
        ...
      },
      ...
    }
  });
};

Customize Theme Typography

You can customize the typography used in the theme as well from the central place.

For instance, If you want to change font-weight the typography h5 to 600. To do that, open src\themes\typography.ts and update as below:

src/themes/typography.ts
/**
 * Typography used in theme
 */
export default function Typography(fontFamily: FontFamily): TypographyVariantsOptions {
  return {
        ...
        h5: {
            ...
            fontWeight: 600 // changed this to make it 900 from 500
        },
        ...
    };
}

This will apply to all places where you used Typography variants as h5

<Typography variant="h5"...>

Customize MUI Component style

We have provided a central location to override any default style of any component. All the override styles exist in src\themes\overrides

src/themes/overrides/Accordion.ts
// material-ui
import { Theme } from '@mui/material/styles';

// ==============================|| OVERRIDES - ALERT TITLE ||============================== //

export default function Accordion(theme: Theme) {
  return {
    MuiAccordion: {
      defaultProps: {
        disableGutters: true,
        square: true,
        elevation: 0
      },
      styleOverrides: {
        root: {
          border: '1px solid',
          borderColor: theme.palette.secondary.light,
          '&:not(:last-child)': {
            borderBottom: 0
          },
          '&:before': {
            display: 'none'
          },
          '&.Mui-disabled': {
            backgroundColor: theme.palette.secondary.lighter
          }
        }
      }
    }
  };
}

You can add a default property for any MUI component and it will be applied everywhere. We emitted lines to view it better in the above code block but you can see many controls' styles overridden in the same file. Feel free to change it as per your need.

Customize Mantis with your theme. You can change the colors, the typography, and much more. Material-UI provides flexibility to change the style of the project in a single place and on top of it, we made it more centralized and consistent with the proper file structure.

Theme configuration

The whole theme can be configured from the folder.src/themes/index.jsx Theme initialization starts index.jsxwhere the palette, typography, and component's overridable style exist.

src/themes/index.jsx
import PropTypes from 'prop-types';
import { useMemo } from 'react';

// material-ui
import StyledEngineProvider from '@mui/material/StyledEngineProvider';
import { createTheme, ThemeProvider } from '@mui/material/styles';
import CssBaseline from '@mui/material/CssBaseline';

// project imports
import useConfig from 'hooks/useConfig';
import Palette from './palette';
import Typography from './typography';
import CustomShadows from './shadows';
import componentsOverride from './overrides';

// ==============================|| DEFAULT THEME - MAIN ||============================== //

export default function ThemeCustomization({ children }) {
  const { themeDirection, mode, presetColor, fontFamily } = useConfig();

  const theme = useMemo(() => Palette(mode, presetColor), [mode, presetColor]);

  const themeTypography = useMemo(() => Typography(fontFamily), [fontFamily]);

  const themeCustomShadows = useMemo(() => CustomShadows(theme), [theme]);

  const themeOptions = useMemo(
    () => ({
      breakpoints: {
        values: {
          xs: 0,
          sm: 768,
          md: 1024,
          lg: 1266,
          xl: 1440
        }
      },
      direction: themeDirection,
      mixins: {
        toolbar: {
          minHeight: 60,
          paddingTop: 8,
          paddingBottom: 8
        }
      },
      palette: theme.palette,
      customShadows: themeCustomShadows,
      typography: themeTypography
    }),
    [themeDirection, theme, themeTypography, themeCustomShadows]
  );

  const themes = createTheme(themeOptions);
  themes.components = componentsOverride(themes);

  return (
    <StyledEngineProvider injectFirst>
      <ThemeProvider theme={themes}>
        <CssBaseline enableColorScheme />
        {children}
      </ThemeProvider>
    </StyledEngineProvider>
  );
}

ThemeCustomization.propTypes = { children: PropTypes.node };

You can check other settings like theme typography, palette, and component style override in the same folder. src\themes

How to customize it?

You might come across questions like how to change a theme's primary color. How do I change the textbox or other components that can apply to an entire theme?

Customize Theme Colors

To change the color of the theme, you can apply color directly to src\theme\palatte.js

For instance, if you want to change color that theme.palette.primary.light is being used in a theme, then update the following in src\themes\palatte.js

src/themes/palette.js
...

// ==============================|| DEFAULT THEME - PALETTE  ||============================== //

export default function Palette(mode, presetColor) {
  const colors = mode === ThemeMode.DARK ? presetDarkPalettes : presetPalettes;
  ...
  return createTheme({
    palette: {
      ...
      text: {
        primary: mode === ThemeMode.DARK ? alpha(paletteColor.grey[900], 0.87) : paletteColor.grey[700],
        ...
      },
      ...
    }
  });
};

Customize Theme Typography

You can customize the typography used in the theme as well from the central place.

For instance, If you want to change font-weight the typography h5 to 600. To do that, open src\themes\typography.js and update as below:

src/themes/typography.js
/**
 * Typography used in theme
 */
export default function Typography(fontFamily){
  return {
        ...
        h5: {
            ...
            fontWeight: 600 // changed this to make it 900 from 500
        },
        ...
    };
}

This will apply to all places where you used Typography variants as h5

<Typography variant="h5"...>

Customize MUI Component style

We have provided a central location to override any default style of any component. All the override styles exist in src\themes\overrides

src/themes/overrides/Accordion.js
// ==============================|| OVERRIDES - ALERT TITLE ||============================== //

export default function Accordion(theme) {
  return {
    MuiAccordion: {
      defaultProps: {
        disableGutters: true,
        square: true,
        elevation: 0
      },
      styleOverrides: {
        root: {
          border: '1px solid',
          borderColor: theme.palette.secondary.light,
          '&:not(:last-child)': {
            borderBottom: 0
          },
          '&:before': {
            display: 'none'
          },
          '&.Mui-disabled': {
            backgroundColor: theme.palette.secondary.lighter
          }
        }
      }
    }
  };
}

You can add a default property for any MUI component and it will be applied everywhere. We emitted lines to view it better in the above code block but you can see many controls' styles overridden in the same file. Feel free to change it as per your need.

PreviousColor PresetsNextHow to