UNPKG

@mui/material

Version:

Material UI is an open-source React component library that implements Google's Material Design. It's comprehensive and can be used in production out of the box.

105 lines (103 loc) 3.64 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = createTheme; var _createPalette = _interopRequireDefault(require("./createPalette")); var _createThemeWithVars = _interopRequireDefault(require("./createThemeWithVars")); var _createThemeNoVars = _interopRequireDefault(require("./createThemeNoVars")); // eslint-disable-next-line consistent-return function attachColorScheme(theme, scheme, colorScheme) { if (!theme.colorSchemes) { return undefined; } if (colorScheme) { theme.colorSchemes[scheme] = { ...(colorScheme !== true && colorScheme), palette: (0, _createPalette.default)({ ...(colorScheme === true ? {} : colorScheme.palette), mode: scheme }) // cast type to skip module augmentation test }; } } /** * Generate a theme base on the options received. * @param options Takes an incomplete theme object and adds the missing parts. * @param args Deep merge the arguments with the about to be returned theme. * @returns A complete, ready-to-use theme object. */ function createTheme(options = {}, // cast type to skip module augmentation test ...args) { const { palette, cssVariables = false, colorSchemes: initialColorSchemes = !palette ? { light: true } : undefined, defaultColorScheme: initialDefaultColorScheme = palette?.mode, ...rest } = options; const defaultColorSchemeInput = initialDefaultColorScheme || 'light'; const defaultScheme = initialColorSchemes?.[defaultColorSchemeInput]; const colorSchemesInput = { ...initialColorSchemes, ...(palette ? { [defaultColorSchemeInput]: { ...(typeof defaultScheme !== 'boolean' && defaultScheme), palette } } : undefined) }; if (cssVariables === false) { if (!('colorSchemes' in options)) { // Behaves exactly as v5 return (0, _createThemeNoVars.default)(options, ...args); } let paletteOptions = palette; if (!('palette' in options)) { if (colorSchemesInput[defaultColorSchemeInput]) { if (colorSchemesInput[defaultColorSchemeInput] !== true) { paletteOptions = colorSchemesInput[defaultColorSchemeInput].palette; } else if (defaultColorSchemeInput === 'dark') { // @ts-ignore to prevent the module augmentation test from failing paletteOptions = { mode: 'dark' }; } } } const theme = (0, _createThemeNoVars.default)({ ...options, palette: paletteOptions }, ...args); theme.defaultColorScheme = defaultColorSchemeInput; theme.colorSchemes = colorSchemesInput; if (theme.palette.mode === 'light') { theme.colorSchemes.light = { ...(colorSchemesInput.light !== true && colorSchemesInput.light), palette: theme.palette }; attachColorScheme(theme, 'dark', colorSchemesInput.dark); } if (theme.palette.mode === 'dark') { theme.colorSchemes.dark = { ...(colorSchemesInput.dark !== true && colorSchemesInput.dark), palette: theme.palette }; attachColorScheme(theme, 'light', colorSchemesInput.light); } return theme; } if (!palette && !('light' in colorSchemesInput) && defaultColorSchemeInput === 'light') { colorSchemesInput.light = true; } return (0, _createThemeWithVars.default)({ ...rest, colorSchemes: colorSchemesInput, defaultColorScheme: defaultColorSchemeInput, ...(typeof cssVariables !== 'boolean' && cssVariables) }, ...args); }