UNPKG

3.89 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8Object.defineProperty(exports, "createMuiTheme", {
9 enumerable: true,
10 get: function () {
11 return _createThemeNoVars.createMuiTheme;
12 }
13});
14exports.default = createTheme;
15var _createPalette = _interopRequireDefault(require("./createPalette"));
16var _createThemeWithVars = _interopRequireDefault(require("./createThemeWithVars"));
17var _createThemeNoVars = _interopRequireWildcard(require("./createThemeNoVars"));
18// eslint-disable-next-line consistent-return
19function attachColorScheme(theme, scheme, colorScheme) {
20 if (!theme.colorSchemes) {
21 return undefined;
22 }
23 if (colorScheme) {
24 theme.colorSchemes[scheme] = {
25 ...(colorScheme !== true && colorScheme),
26 palette: (0, _createPalette.default)({
27 ...(colorScheme === true ? {} : colorScheme.palette),
28 mode: scheme
29 }) // cast type to skip module augmentation test
30 };
31 }
32}
33
34/**
35 * Generate a theme base on the options received.
36 * @param options Takes an incomplete theme object and adds the missing parts.
37 * @param args Deep merge the arguments with the about to be returned theme.
38 * @returns A complete, ready-to-use theme object.
39 */
40function createTheme(options = {},
41// cast type to skip module augmentation test
42...args) {
43 const {
44 palette,
45 cssVariables = false,
46 colorSchemes: initialColorSchemes = !palette ? {
47 light: true
48 } : undefined,
49 defaultColorScheme: initialDefaultColorScheme = palette?.mode,
50 ...rest
51 } = options;
52 const defaultColorSchemeInput = initialDefaultColorScheme || 'light';
53 const defaultScheme = initialColorSchemes?.[defaultColorSchemeInput];
54 const colorSchemesInput = {
55 ...initialColorSchemes,
56 ...(palette ? {
57 [defaultColorSchemeInput]: {
58 ...(typeof defaultScheme !== 'boolean' && defaultScheme),
59 palette
60 }
61 } : undefined)
62 };
63 if (cssVariables === false) {
64 if (!('colorSchemes' in options)) {
65 // Behaves exactly as v5
66 return (0, _createThemeNoVars.default)(options, ...args);
67 }
68 let paletteOptions = palette;
69 if (!('palette' in options)) {
70 if (colorSchemesInput[defaultColorSchemeInput]) {
71 if (colorSchemesInput[defaultColorSchemeInput] !== true) {
72 paletteOptions = colorSchemesInput[defaultColorSchemeInput].palette;
73 } else if (defaultColorSchemeInput === 'dark') {
74 // @ts-ignore to prevent the module augmentation test from failing
75 paletteOptions = {
76 mode: 'dark'
77 };
78 }
79 }
80 }
81 const theme = (0, _createThemeNoVars.default)({
82 ...options,
83 palette: paletteOptions
84 }, ...args);
85 theme.defaultColorScheme = defaultColorSchemeInput;
86 theme.colorSchemes = colorSchemesInput;
87 if (theme.palette.mode === 'light') {
88 theme.colorSchemes.light = {
89 ...(colorSchemesInput.light !== true && colorSchemesInput.light),
90 palette: theme.palette
91 };
92 attachColorScheme(theme, 'dark', colorSchemesInput.dark);
93 }
94 if (theme.palette.mode === 'dark') {
95 theme.colorSchemes.dark = {
96 ...(colorSchemesInput.dark !== true && colorSchemesInput.dark),
97 palette: theme.palette
98 };
99 attachColorScheme(theme, 'light', colorSchemesInput.light);
100 }
101 return theme;
102 }
103 if (!palette && !('light' in colorSchemesInput) && defaultColorSchemeInput === 'light') {
104 colorSchemesInput.light = true;
105 }
106 return (0, _createThemeWithVars.default)({
107 ...rest,
108 colorSchemes: colorSchemesInput,
109 defaultColorScheme: defaultColorSchemeInput,
110 ...(typeof cssVariables !== 'boolean' && cssVariables)
111 }, ...args);
112}
\No newline at end of file