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.

91 lines (89 loc) 3.66 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "createMuiTheme", { enumerable: true, get: function () { return _createThemeNoVars.createMuiTheme; } }); exports.default = createTheme; var _createPalette = _interopRequireDefault(require("./createPalette")); var _createThemeWithVars = _interopRequireDefault(require("./createThemeWithVars")); var _createThemeNoVars = _interopRequireWildcard(require("./createThemeNoVars")); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } // 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), 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) { const theme = (0, _createThemeNoVars.default)(options, ...args); if (!('colorSchemes' in options)) { return theme; } theme.defaultColorScheme = defaultColorSchemeInput; theme.colorSchemes = colorSchemesInput; if (theme.palette.mode === 'light') { theme.colorSchemes.light = { palette: theme.palette }; attachColorScheme(theme, 'dark', colorSchemesInput.dark); } if (theme.palette.mode === 'dark') { theme.colorSchemes.dark = { palette: theme.palette }; attachColorScheme(theme, 'light', colorSchemesInput.light); } return theme; } return (0, _createThemeWithVars.default)({ ...rest, colorSchemes: colorSchemesInput, defaultColorScheme: defaultColorSchemeInput, ...(typeof cssVariables !== 'boolean' && cssVariables) }, ...args); }