MCPcopy
hub / github.com/mui/material-ui / createTheme

Function createTheme

packages/mui-material/src/styles/createTheme.ts:61–146  ·  view source on GitHub ↗
(
  options: ThemeOptions = {} as any, // cast type to skip module augmentation test
  ...args: object[]
)

Source from the content-addressed store, hash-verified

59 * @returns A complete, ready-to-use theme object.
60 */
61export default function createTheme(
62 options: ThemeOptions = {} as any, // cast type to skip module augmentation test
63 ...args: object[]
64): Theme {
65 const {
66 palette,
67 cssVariables = false,
68 colorSchemes: initialColorSchemes = !palette ? { light: true } : undefined,
69 defaultColorScheme: initialDefaultColorScheme = palette?.mode,
70 ...other
71 } = options;
72 const defaultColorSchemeInput = (initialDefaultColorScheme as DefaultColorScheme) || 'light';
73 const defaultScheme = initialColorSchemes?.[defaultColorSchemeInput];
74 const colorSchemesInput = {
75 ...initialColorSchemes,
76 ...(palette
77 ? {
78 [defaultColorSchemeInput]: {
79 ...(typeof defaultScheme !== 'boolean' && defaultScheme),
80 palette,
81 },
82 }
83 : undefined),
84 };
85
86 if (cssVariables === false) {
87 if (!('colorSchemes' in options)) {
88 // Behaves exactly as v5
89 return createThemeNoVars(options as ThemeNoVarsOptions, ...args);
90 }
91
92 let paletteOptions = palette;
93 if (!('palette' in options)) {
94 if (colorSchemesInput[defaultColorSchemeInput]) {
95 if (colorSchemesInput[defaultColorSchemeInput] !== true) {
96 paletteOptions = colorSchemesInput[defaultColorSchemeInput].palette;
97 } else if (defaultColorSchemeInput === 'dark') {
98 // @ts-ignore to prevent the module augmentation test from failing
99 paletteOptions = { mode: 'dark' };
100 }
101 }
102 }
103
104 const theme = createThemeNoVars(
105 { ...options, palette: paletteOptions } as ThemeNoVarsOptions,
106 ...args,
107 ) as unknown as Theme & {
108 defaultColorScheme?: 'light' | 'dark' | undefined;
109 colorSchemes?: Partial<Record<string, any>> | undefined;
110 };
111
112 theme.defaultColorScheme = defaultColorSchemeInput;
113 theme.colorSchemes = colorSchemesInput as Record<string, ColorSystem>;
114
115 if (theme.palette.mode === 'light') {
116 theme.colorSchemes.light = {
117 ...(colorSchemesInput.light !== true && colorSchemesInput.light),
118 palette: theme.palette,

Calls 3

createThemeNoVarsFunction · 0.85
createThemeWithVarsFunction · 0.85
attachColorSchemeFunction · 0.70

Tested by 2

genericValueTestFunction · 0.72
UpperProviderFunction · 0.72

Used in the wild real call sites across dependent graphs

searching dependent graphs…