Skip to content

Commit cd5410b

Browse files
committed
fix getSelector
1 parent c18e53d commit cd5410b

File tree

3 files changed

+47
-13
lines changed

3 files changed

+47
-13
lines changed

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ export default <
3333
if (rule === 'media') {
3434
return {
3535
':root': css,
36-
'@media (prefers-color-scheme: dark) { :root': excludedVariables,
36+
[`@media (prefers-color-scheme: dark)`]: {
37+
':root': excludedVariables,
38+
},
3739
};
3840
}
3941
if (rule) {
@@ -49,7 +51,11 @@ export default <
4951
}
5052
} else if (colorScheme) {
5153
if (rule === 'media') {
52-
return `@media (prefers-color-scheme: ${String(colorScheme)}) { :root`;
54+
return {
55+
[`@media (prefers-color-scheme: ${String(colorScheme)})`]: {
56+
':root': css,
57+
},
58+
};
5359
}
5460
if (rule) {
5561
return rule.replace('%s', String(colorScheme));

packages/mui-material/src/styles/extendTheme.test.js

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -721,10 +721,19 @@ describe('extendTheme', () => {
721721
describe('light and dark color schemes', () => {
722722
it('should use prefers-color-scheme (`media`) by default', () => {
723723
const theme = extendTheme({ colorSchemes: { light: true, dark: true } });
724-
expect(theme.generateStyleSheets().flatMap((sheet) => Object.keys(sheet))).to.deep.equal([
725-
':root',
726-
':root',
727-
'@media (prefers-color-scheme: dark) { :root',
724+
const sheets = theme.generateStyleSheets();
725+
sinon.assert.match(sheets, [
726+
{
727+
':root': sheets[0][':root'], // non-colors related variables
728+
},
729+
{
730+
':root': sheets[1][':root'], // light palette
731+
},
732+
{
733+
'@media (prefers-color-scheme: dark)': {
734+
':root': sheets[2]['@media (prefers-color-scheme: dark)'][':root'], // dark palette
735+
},
736+
},
728737
]);
729738
});
730739

@@ -742,11 +751,23 @@ describe('extendTheme', () => {
742751
colorSchemes: { light: true, dark: true },
743752
defaultColorScheme: 'dark',
744753
});
745-
expect(theme.generateStyleSheets().flatMap((sheet) => Object.keys(sheet))).to.deep.equal([
746-
':root',
747-
':root',
748-
'@media (prefers-color-scheme: dark) { :root', // this key targets excluded variables for dark
749-
'@media (prefers-color-scheme: light) { :root',
754+
const sheets = theme.generateStyleSheets();
755+
sinon.assert.match(sheets, [
756+
{
757+
':root': sheets[0][':root'], // non-colors related variables
758+
},
759+
{
760+
':root': sheets[1][':root'], // dark palette
761+
'@media (prefers-color-scheme: dark)': {
762+
// dark specific variables
763+
':root': sheets[1]['@media (prefers-color-scheme: dark)'][':root'],
764+
},
765+
},
766+
{
767+
'@media (prefers-color-scheme: light)': {
768+
':root': sheets[2]['@media (prefers-color-scheme: light)'][':root'], // light palette
769+
},
770+
},
750771
]);
751772
});
752773

packages/mui-system/src/cssVars/prepareCssVars.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,10 @@ function prepareCssVars<T extends DefaultCssVarsTheme, ThemeVars extends Record<
4848
colorSchemesMap[defaultColorScheme] = { css, vars };
4949
}
5050

51-
function defaultGetSelector(colorScheme: keyof T['colorSchemes'] | undefined) {
51+
function defaultGetSelector(
52+
colorScheme: keyof T['colorSchemes'] | undefined,
53+
cssObject: Record<string, any>,
54+
) {
5255
let rule = selector;
5356
if (selector === 'class') {
5457
rule = '.%s';
@@ -66,7 +69,11 @@ function prepareCssVars<T extends DefaultCssVarsTheme, ThemeVars extends Record<
6669
return ':root';
6770
}
6871
const mode = colorSchemes[colorScheme as string]?.palette?.mode || colorScheme;
69-
return `@media (prefers-color-scheme: ${mode}) { :root`;
72+
return {
73+
[`@media (prefers-color-scheme: ${mode})`]: {
74+
':root': cssObject,
75+
},
76+
};
7077
}
7178
if (rule) {
7279
if (theme.defaultColorScheme === colorScheme) {

0 commit comments

Comments
 (0)