Skip to content

Commit 139eaec

Browse files
authored
[material-ui] Fix ThemeOptions and createTheme* cyclic dependency (#47007)
1 parent 6984a79 commit 139eaec

File tree

4 files changed

+544
-456
lines changed

4 files changed

+544
-456
lines changed

packages/mui-material/src/styles/createTheme.ts

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,36 @@
1-
import createPalette from './createPalette';
1+
import createPalette, { PaletteOptions } from './createPalette';
2+
import { ColorSystemOptions } from './createThemeFoundation';
23
import createThemeWithVars, {
34
CssVarsThemeOptions,
45
ColorSystem,
56
DefaultColorScheme,
67
} from './createThemeWithVars';
7-
import createThemeNoVars, { Theme, ThemeOptions } from './createThemeNoVars';
8+
import createThemeNoVars, {
9+
Theme,
10+
CssThemeVariables,
11+
ThemeOptions as ThemeNoVarsOptions,
12+
} from './createThemeNoVars';
813

9-
export type { ThemeOptions, Theme, CssThemeVariables } from './createThemeNoVars';
14+
export type { Theme, CssThemeVariables } from './createThemeNoVars';
15+
16+
type CssVarsOptions = CssThemeVariables extends {
17+
enabled: true;
18+
}
19+
? ColorSystemOptions
20+
: {};
21+
22+
type CssVarsConfigList =
23+
| 'colorSchemeSelector'
24+
| 'rootSelector'
25+
| 'disableCssColorScheme'
26+
| 'cssVarPrefix'
27+
| 'shouldSkipGeneratingVar'
28+
| 'nativeColor';
29+
30+
export interface ThemeOptions extends CssVarsOptions, Omit<CssVarsThemeOptions, CssVarsConfigList> {
31+
cssVariables?: boolean | Pick<CssVarsThemeOptions, CssVarsConfigList>;
32+
palette?: PaletteOptions;
33+
}
1034

1135
// eslint-disable-next-line consistent-return
1236
function attachColorScheme(
@@ -35,20 +59,7 @@ function attachColorScheme(
3559
* @returns A complete, ready-to-use theme object.
3660
*/
3761
export default function createTheme(
38-
options: Omit<ThemeOptions, 'components'> &
39-
Pick<CssVarsThemeOptions, 'defaultColorScheme' | 'colorSchemes' | 'components'> & {
40-
cssVariables?:
41-
| boolean
42-
| Pick<
43-
CssVarsThemeOptions,
44-
| 'colorSchemeSelector'
45-
| 'rootSelector'
46-
| 'disableCssColorScheme'
47-
| 'cssVarPrefix'
48-
| 'shouldSkipGeneratingVar'
49-
| 'nativeColor'
50-
>;
51-
} = {} as any, // cast type to skip module augmentation test
62+
options: ThemeOptions = {} as any, // cast type to skip module augmentation test
5263
...args: object[]
5364
): Theme {
5465
const {
@@ -75,7 +86,7 @@ export default function createTheme(
7586
if (cssVariables === false) {
7687
if (!('colorSchemes' in options)) {
7788
// Behaves exactly as v5
78-
return createThemeNoVars(options as ThemeOptions, ...args);
89+
return createThemeNoVars(options as ThemeNoVarsOptions, ...args);
7990
}
8091

8192
let paletteOptions = palette;
@@ -91,7 +102,7 @@ export default function createTheme(
91102
}
92103

93104
const theme = createThemeNoVars(
94-
{ ...options, palette: paletteOptions } as ThemeOptions,
105+
{ ...options, palette: paletteOptions } as ThemeNoVarsOptions,
95106
...args,
96107
) as unknown as Theme & {
97108
defaultColorScheme?: 'light' | 'dark';

0 commit comments

Comments
 (0)