Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if (!color.contrastText) {
color.contrastText = getContrastText(color.main);
}
return color;
}
const types = { dark, light };
if (process.env.NODE_ENV !== 'production') {
if (!types[type]) {
console.error(`Material-UI: the palette type \`${type}\` is not supported.`);
}
}
const paletteOutput = deepmerge(
{
// A collection of common colors.
common,
// The palette type, can be light or dark.
type,
// The colors used to represent primary interface elements for a user.
primary: augmentColor(primary),
// The colors used to represent secondary interface elements for a user.
secondary: augmentColor(secondary, 'A400', 'A200', 'A700'),
// The colors used to represent interface elements that the user should be made aware of.
error: augmentColor(error),
// The colors used to represent potentially dangerous actions or important messages.
warning: augmentColor(warning),
// The colors used to present information to the user that is neutral and not necessarily important.
info: augmentColor(info),
// The colors used to indicate the successful completion of an action that user triggered.
h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),
h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),
h3: buildVariant(fontWeightRegular, 48, 1.167, 0),
h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),
h5: buildVariant(fontWeightRegular, 24, 1.334, 0),
h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),
subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),
subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),
body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),
body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),
button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),
caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),
overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps),
};
return deepmerge(
{
htmlFontSize,
pxToRem,
round, // TODO To remove in v5?
fontFamily,
fontSize,
fontWeightLight,
fontWeightRegular,
fontWeightMedium,
fontWeightBold,
...variants,
},
other,
{
clone: false, // No need to clone deep
},
function merge(acc, item) {
if (!item) {
return acc;
}
return deepmerge(acc, item, {
clone: false, // No need to clone deep, it's way faster.
});
}
function createMuiTheme(options = {}, ...args) {
const {
breakpoints: breakpointsInput = {},
mixins: mixinsInput = {},
palette: paletteInput = {},
spacing: spacingInput,
typography: typographyInput = {},
...other
} = options;
const palette = createPalette(paletteInput);
const breakpoints = createBreakpoints(breakpointsInput);
const spacing = createSpacing(spacingInput);
let muiTheme = deepmerge(
{
breakpoints,
direction: 'ltr',
mixins: createMixins(breakpoints, spacing, mixinsInput),
overrides: {}, // Inject custom styles
palette,
props: {}, // Provide default props
shadows,
typography: createTypography(palette, typographyInput),
spacing,
shape,
transitions,
zIndex,
},
other,
);
Object.keys(overrides).forEach(key => {
if (process.env.NODE_ENV !== 'production') {
if (!stylesWithOverrides[key]) {
console.warn(
[
'Material-UI: you are trying to override a style that does not exist.',
`Fix the \`${key}\` key of \`theme.overrides.${name}\`.`,
].join('\n'),
);
}
}
stylesWithOverrides[key] = deepmerge(stylesWithOverrides[key], overrides[key]);
});
muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);