(
options: ThemeOptions = {} as any, // cast type to skip module augmentation test
...args: object[]
)
| 59 | * @returns A complete, ready-to-use theme object. |
| 60 | */ |
| 61 | export 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, |
searching dependent graphs…