105 lines
No EOL
3.6 KiB
JavaScript
105 lines
No EOL
3.6 KiB
JavaScript
"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);
|
|
} |