Skip to content

Commit 82d7240

Browse files
committed
add InitColorSchemeScript
1 parent 3c888ed commit 82d7240

File tree

4 files changed

+36
-25
lines changed

4 files changed

+36
-25
lines changed

packages/mui-material/src/styles/CssVarsProvider.tsx

+23-24
Original file line numberDiff line numberDiff line change
@@ -14,35 +14,34 @@ import THEME_ID from './identifier';
1414

1515
const defaultTheme = experimental_extendTheme();
1616

17-
const { CssVarsProvider, useColorScheme, getInitColorSchemeScript } = createCssVarsProvider<
18-
SupportedColorScheme,
19-
typeof THEME_ID
20-
>({
21-
themeId: THEME_ID,
22-
theme: defaultTheme,
23-
attribute: 'data-mui-color-scheme',
24-
modeStorageKey: 'mui-mode',
25-
colorSchemeStorageKey: 'mui-color-scheme',
26-
defaultColorScheme: {
27-
light: 'light',
28-
dark: 'dark',
29-
},
30-
resolveTheme: (theme) => {
31-
const newTheme = {
32-
...theme,
33-
typography: createTypography(theme.palette, theme.typography),
34-
};
17+
const { CssVarsProvider, useColorScheme, getInitColorSchemeScript, InitColorSchemeScript } =
18+
createCssVarsProvider<SupportedColorScheme, typeof THEME_ID>({
19+
themeId: THEME_ID,
20+
theme: defaultTheme,
21+
attribute: 'data-mui-color-scheme',
22+
modeStorageKey: 'mui-mode',
23+
colorSchemeStorageKey: 'mui-color-scheme',
24+
defaultColorScheme: {
25+
light: 'light',
26+
dark: 'dark',
27+
},
28+
resolveTheme: (theme) => {
29+
const newTheme = {
30+
...theme,
31+
typography: createTypography(theme.palette, theme.typography),
32+
};
3533

36-
newTheme.unstable_sx = function sx(props: SxProps<CssVarsTheme>) {
37-
return styleFunctionSx({ sx: props, theme: this });
38-
};
34+
newTheme.unstable_sx = function sx(props: SxProps<CssVarsTheme>) {
35+
return styleFunctionSx({ sx: props, theme: this });
36+
};
3937

40-
return newTheme;
41-
},
42-
});
38+
return newTheme;
39+
},
40+
});
4341

4442
export {
4543
useColorScheme,
4644
getInitColorSchemeScript,
4745
CssVarsProvider as Experimental_CssVarsProvider,
46+
InitColorSchemeScript,
4847
};

packages/mui-system/src/cssVars/createCssVarsProvider.d.ts

+3
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ export interface CreateCssVarsProviderResult<
9393
) => React.ReactElement;
9494
useColorScheme: () => ColorSchemeContextValue<ColorScheme>;
9595
getInitColorSchemeScript: typeof getInitColorSchemeScript;
96+
InitColorSchemeScript: (
97+
props: Parameters<typeof getInitColorSchemeScript>[0],
98+
) => React.ReactElement;
9699
}
97100

98101
export default function createCssVarsProvider<

packages/mui-system/src/cssVars/createCssVarsProvider.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -368,5 +368,9 @@ export default function createCssVarsProvider(options) {
368368
...params,
369369
});
370370

371-
return { CssVarsProvider, useColorScheme, getInitColorSchemeScript };
371+
const InitColorSchemeScript = React.memo(function InitColorSchemeScript(props) {
372+
return getInitColorSchemeScript(props);
373+
});
374+
375+
return { CssVarsProvider, useColorScheme, getInitColorSchemeScript, InitColorSchemeScript };
372376
}

packages/mui-system/src/cssVars/getInitColorSchemeScript.tsx

+5
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ export interface GetInitColorSchemeScriptOptions {
4040
* @default 'data-color-scheme'
4141
*/
4242
attribute?: string;
43+
/** Nonce string to pass to the inline script for CSP headers */
44+
nonce?: string | undefined;
4345
}
4446

4547
export default function getInitColorSchemeScript(options?: GetInitColorSchemeScriptOptions) {
@@ -51,10 +53,13 @@ export default function getInitColorSchemeScript(options?: GetInitColorSchemeScr
5153
colorSchemeStorageKey = DEFAULT_COLOR_SCHEME_STORAGE_KEY,
5254
attribute = DEFAULT_ATTRIBUTE,
5355
colorSchemeNode = 'document.documentElement',
56+
nonce,
5457
} = options || {};
5558
return (
5659
<script
5760
key="mui-color-scheme-init"
61+
suppressHydrationWarning
62+
nonce={typeof window === 'undefined' ? nonce : ''}
5863
// eslint-disable-next-line react/no-danger
5964
dangerouslySetInnerHTML={{
6065
__html: `(function() {

0 commit comments

Comments
 (0)