@mui/material 6.0.0-beta.1 → 6.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +442 -32
- package/Fade/Fade.js +2 -1
- package/Grow/Grow.js +2 -1
- package/Paper/Paper.js +1 -1
- package/Rating/Rating.d.ts +1 -1
- package/Rating/Rating.js +2 -2
- package/Select/selectClasses.d.ts +2 -0
- package/Slide/Slide.js +2 -1
- package/Tooltip/Tooltip.js +2 -1
- package/Typography/Typography.d.ts +1 -0
- package/Typography/Typography.js +1 -0
- package/Typography/typographyClasses.d.ts +4 -1
- package/Zoom/Zoom.js +2 -1
- package/index.js +1 -1
- package/modern/Fade/Fade.js +2 -1
- package/modern/Grow/Grow.js +2 -1
- package/modern/Paper/Paper.js +1 -1
- package/modern/Rating/Rating.js +2 -2
- package/modern/Slide/Slide.js +2 -1
- package/modern/Tooltip/Tooltip.js +2 -1
- package/modern/Typography/Typography.js +1 -0
- package/modern/Zoom/Zoom.js +2 -1
- package/modern/index.js +1 -1
- package/modern/styles/CssVarsProvider.js +0 -1
- package/modern/styles/createGetSelector.js +36 -7
- package/modern/styles/excludeVariablesFromRoot.js +1 -1
- package/modern/styles/extendTheme.js +105 -65
- package/modern/styles/shouldSkipGeneratingVar.js +1 -1
- package/modern/utils/getChildRef.js +9 -0
- package/node/Fade/Fade.js +2 -1
- package/node/Grow/Grow.js +2 -1
- package/node/Paper/Paper.js +2 -2
- package/node/Rating/Rating.js +2 -2
- package/node/Slide/Slide.js +2 -1
- package/node/Tooltip/Tooltip.js +2 -1
- package/node/Typography/Typography.js +1 -0
- package/node/Zoom/Zoom.js +2 -1
- package/node/index.js +1 -1
- package/node/styles/CssVarsProvider.js +0 -1
- package/node/styles/createGetSelector.js +36 -7
- package/node/styles/excludeVariablesFromRoot.js +1 -1
- package/node/styles/extendTheme.js +105 -65
- package/node/styles/shouldSkipGeneratingVar.js +1 -1
- package/node/utils/getChildRef.js +17 -0
- package/package.json +6 -5
- package/styles/CssVarsProvider.d.ts +2 -1
- package/styles/CssVarsProvider.js +0 -1
- package/styles/createGetSelector.d.ts +6 -2
- package/styles/createGetSelector.js +36 -7
- package/styles/excludeVariablesFromRoot.d.ts +1 -1
- package/styles/excludeVariablesFromRoot.js +1 -1
- package/styles/extendTheme.d.ts +21 -16
- package/styles/extendTheme.js +105 -65
- package/styles/shouldSkipGeneratingVar.js +1 -1
- package/utils/getChildRef.d.ts +1 -0
- package/utils/getChildRef.js +9 -0
package/styles/extendTheme.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import _formatMuiErrorMessage from "@mui/utils/formatMuiErrorMessage";
|
|
1
2
|
import deepmerge from '@mui/utils/deepmerge';
|
|
2
3
|
import { unstable_createGetCssVar as systemCreateGetCssVar, createSpacing } from '@mui/system';
|
|
3
4
|
import { createUnarySpacing } from '@mui/system/spacing';
|
|
4
|
-
import { prepareCssVars, prepareTypographyVars } from '@mui/system/cssVars';
|
|
5
|
+
import { prepareCssVars, prepareTypographyVars, createGetColorSchemeSelector } from '@mui/system/cssVars';
|
|
5
6
|
import styleFunctionSx, { unstable_defaultSxConfig as defaultSxConfig } from '@mui/system/styleFunctionSx';
|
|
6
7
|
import { private_safeColorChannel as safeColorChannel, private_safeAlpha as safeAlpha, private_safeDarken as safeDarken, private_safeLighten as safeLighten, private_safeEmphasize as safeEmphasize, hslToRgb } from '@mui/system/colorManipulator';
|
|
7
8
|
import defaultShouldSkipGeneratingVar from './shouldSkipGeneratingVar';
|
|
@@ -65,64 +66,102 @@ const silent = fn => {
|
|
|
65
66
|
return undefined;
|
|
66
67
|
};
|
|
67
68
|
export const createGetCssVar = (cssVarPrefix = 'mui') => systemCreateGetCssVar(cssVarPrefix);
|
|
69
|
+
function getOpacity(mode) {
|
|
70
|
+
return {
|
|
71
|
+
inputPlaceholder: mode === 'dark' ? 0.5 : 0.42,
|
|
72
|
+
inputUnderline: mode === 'dark' ? 0.7 : 0.42,
|
|
73
|
+
switchTrackDisabled: mode === 'dark' ? 0.2 : 0.12,
|
|
74
|
+
switchTrack: mode === 'dark' ? 0.3 : 0.38
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function getOverlays(mode) {
|
|
78
|
+
return mode === 'dark' ? defaultDarkOverlays : [];
|
|
79
|
+
}
|
|
80
|
+
function attachColorScheme(colorSchemes, scheme, restTheme, colorScheme) {
|
|
81
|
+
if (!scheme) {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
scheme = scheme === true ? {} : scheme;
|
|
85
|
+
const mode = colorScheme === 'dark' ? 'dark' : 'light';
|
|
86
|
+
const {
|
|
87
|
+
palette,
|
|
88
|
+
...muiTheme
|
|
89
|
+
} = createThemeWithoutVars({
|
|
90
|
+
...restTheme,
|
|
91
|
+
palette: {
|
|
92
|
+
mode,
|
|
93
|
+
...scheme?.palette
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
colorSchemes[colorScheme] = {
|
|
97
|
+
...scheme,
|
|
98
|
+
palette,
|
|
99
|
+
opacity: {
|
|
100
|
+
...getOpacity(mode),
|
|
101
|
+
...scheme?.opacity
|
|
102
|
+
},
|
|
103
|
+
overlays: scheme?.overlays || getOverlays(mode)
|
|
104
|
+
};
|
|
105
|
+
return muiTheme;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* A default `extendTheme` comes with a single color scheme, either `light` or `dark` based on the `defaultColorScheme`.
|
|
110
|
+
* This is better suited for apps that only need a single color scheme.
|
|
111
|
+
*
|
|
112
|
+
* To enable built-in `light` and `dark` color schemes, either:
|
|
113
|
+
* 1. provide a `colorSchemeSelector` to define how the color schemes will change.
|
|
114
|
+
* 2. provide `colorSchemes.dark` will set `colorSchemeSelector: 'media'` by default.
|
|
115
|
+
*/
|
|
68
116
|
export default function extendTheme(options = {}, ...args) {
|
|
69
117
|
const {
|
|
70
|
-
colorSchemes: colorSchemesInput = {
|
|
118
|
+
colorSchemes: colorSchemesInput = {
|
|
119
|
+
light: true
|
|
120
|
+
},
|
|
121
|
+
defaultColorScheme: defaultColorSchemeInput,
|
|
122
|
+
disableCssColorScheme = false,
|
|
71
123
|
cssVarPrefix = 'mui',
|
|
72
124
|
shouldSkipGeneratingVar = defaultShouldSkipGeneratingVar,
|
|
73
|
-
|
|
125
|
+
colorSchemeSelector: selector = colorSchemesInput.light && colorSchemesInput.dark ? 'media' : undefined,
|
|
74
126
|
...input
|
|
75
127
|
} = options;
|
|
128
|
+
const firstColorScheme = Object.keys(colorSchemesInput)[0];
|
|
129
|
+
const defaultColorScheme = defaultColorSchemeInput || (colorSchemesInput.light && firstColorScheme !== 'light' ? 'light' : firstColorScheme);
|
|
76
130
|
const getCssVar = createGetCssVar(cssVarPrefix);
|
|
77
131
|
const {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
...
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
132
|
+
[defaultColorScheme]: defaultSchemeInput,
|
|
133
|
+
light: builtInLight,
|
|
134
|
+
dark: builtInDark,
|
|
135
|
+
...customColorSchemes
|
|
136
|
+
} = colorSchemesInput;
|
|
137
|
+
const colorSchemes = {
|
|
138
|
+
...customColorSchemes
|
|
139
|
+
};
|
|
140
|
+
let defaultScheme = defaultSchemeInput;
|
|
141
|
+
|
|
142
|
+
// For built-in light and dark color schemes, ensure that the value is valid if they are the default color scheme.
|
|
143
|
+
if (defaultColorScheme === 'dark' && !('dark' in colorSchemesInput) || defaultColorScheme === 'light' && !('light' in colorSchemesInput)) {
|
|
144
|
+
defaultScheme = true;
|
|
145
|
+
}
|
|
146
|
+
if (!defaultScheme) {
|
|
147
|
+
throw new Error(process.env.NODE_ENV !== "production" ? `MUI: The provided \`colorSchemes.${defaultColorScheme}\` to the \`extendTheme\` function is either missing or invalid.` : _formatMuiErrorMessage(23, defaultColorScheme));
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Create the palette for the default color scheme, either `light`, `dark`, or custom color scheme.
|
|
151
|
+
const muiTheme = attachColorScheme(colorSchemes, defaultScheme, input, defaultColorScheme);
|
|
152
|
+
if (builtInLight && !colorSchemes.light) {
|
|
153
|
+
attachColorScheme(colorSchemes, builtInLight, undefined, 'light');
|
|
154
|
+
}
|
|
155
|
+
if (builtInDark && !colorSchemes.dark) {
|
|
156
|
+
attachColorScheme(colorSchemes, builtInDark, undefined, 'dark');
|
|
157
|
+
}
|
|
94
158
|
let theme = {
|
|
95
|
-
defaultColorScheme
|
|
159
|
+
defaultColorScheme,
|
|
96
160
|
...muiTheme,
|
|
97
161
|
cssVarPrefix,
|
|
162
|
+
colorSchemeSelector: selector,
|
|
98
163
|
getCssVar,
|
|
99
|
-
colorSchemes
|
|
100
|
-
...colorSchemesInput,
|
|
101
|
-
light: {
|
|
102
|
-
...colorSchemesInput.light,
|
|
103
|
-
palette: lightPalette,
|
|
104
|
-
opacity: {
|
|
105
|
-
inputPlaceholder: 0.42,
|
|
106
|
-
inputUnderline: 0.42,
|
|
107
|
-
switchTrackDisabled: 0.12,
|
|
108
|
-
switchTrack: 0.38,
|
|
109
|
-
...colorSchemesInput.light?.opacity
|
|
110
|
-
},
|
|
111
|
-
overlays: colorSchemesInput.light?.overlays || []
|
|
112
|
-
},
|
|
113
|
-
dark: {
|
|
114
|
-
...colorSchemesInput.dark,
|
|
115
|
-
palette: darkPalette,
|
|
116
|
-
opacity: {
|
|
117
|
-
inputPlaceholder: 0.5,
|
|
118
|
-
inputUnderline: 0.7,
|
|
119
|
-
switchTrackDisabled: 0.2,
|
|
120
|
-
switchTrack: 0.3,
|
|
121
|
-
...colorSchemesInput.dark?.opacity
|
|
122
|
-
},
|
|
123
|
-
overlays: colorSchemesInput.dark?.overlays || defaultDarkOverlays
|
|
124
|
-
}
|
|
125
|
-
},
|
|
164
|
+
colorSchemes,
|
|
126
165
|
font: {
|
|
127
166
|
...prepareTypographyVars(muiTheme.typography),
|
|
128
167
|
...muiTheme.font
|
|
@@ -139,17 +178,18 @@ export default function extendTheme(options = {}, ...args) {
|
|
|
139
178
|
};
|
|
140
179
|
|
|
141
180
|
// attach black & white channels to common node
|
|
142
|
-
if (
|
|
181
|
+
if (palette.mode === 'light') {
|
|
143
182
|
setColor(palette.common, 'background', '#fff');
|
|
144
183
|
setColor(palette.common, 'onBackground', '#000');
|
|
145
|
-
}
|
|
184
|
+
}
|
|
185
|
+
if (palette.mode === 'dark') {
|
|
146
186
|
setColor(palette.common, 'background', '#000');
|
|
147
187
|
setColor(palette.common, 'onBackground', '#fff');
|
|
148
188
|
}
|
|
149
189
|
|
|
150
190
|
// assign component variables
|
|
151
191
|
assignNode(palette, ['Alert', 'AppBar', 'Avatar', 'Button', 'Chip', 'FilledInput', 'LinearProgress', 'Skeleton', 'Slider', 'SnackbarContent', 'SpeedDialAction', 'StepConnector', 'StepContent', 'Switch', 'TableCell', 'Tooltip']);
|
|
152
|
-
if (
|
|
192
|
+
if (palette.mode === 'light') {
|
|
153
193
|
setColor(palette.Alert, 'errorColor', safeDarken(palette.error.light, 0.6));
|
|
154
194
|
setColor(palette.Alert, 'infoColor', safeDarken(palette.info.light, 0.6));
|
|
155
195
|
setColor(palette.Alert, 'successColor', safeDarken(palette.success.light, 0.6));
|
|
@@ -158,10 +198,10 @@ export default function extendTheme(options = {}, ...args) {
|
|
|
158
198
|
setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-main'));
|
|
159
199
|
setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-main'));
|
|
160
200
|
setColor(palette.Alert, 'warningFilledBg', setCssVarColor('palette-warning-main'));
|
|
161
|
-
setColor(palette.Alert, 'errorFilledColor', silent(() =>
|
|
162
|
-
setColor(palette.Alert, 'infoFilledColor', silent(() =>
|
|
163
|
-
setColor(palette.Alert, 'successFilledColor', silent(() =>
|
|
164
|
-
setColor(palette.Alert, 'warningFilledColor', silent(() =>
|
|
201
|
+
setColor(palette.Alert, 'errorFilledColor', silent(() => palette.getContrastText(palette.error.main)));
|
|
202
|
+
setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.main)));
|
|
203
|
+
setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.main)));
|
|
204
|
+
setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.main)));
|
|
165
205
|
setColor(palette.Alert, 'errorStandardBg', safeLighten(palette.error.light, 0.9));
|
|
166
206
|
setColor(palette.Alert, 'infoStandardBg', safeLighten(palette.info.light, 0.9));
|
|
167
207
|
setColor(palette.Alert, 'successStandardBg', safeLighten(palette.success.light, 0.9));
|
|
@@ -195,7 +235,7 @@ export default function extendTheme(options = {}, ...args) {
|
|
|
195
235
|
setColor(palette.Slider, 'warningTrack', safeLighten(palette.warning.main, 0.62));
|
|
196
236
|
const snackbarContentBackground = safeEmphasize(palette.background.default, 0.8);
|
|
197
237
|
setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);
|
|
198
|
-
setColor(palette.SnackbarContent, 'color', silent(() =>
|
|
238
|
+
setColor(palette.SnackbarContent, 'color', silent(() => palette.getContrastText(snackbarContentBackground)));
|
|
199
239
|
setColor(palette.SpeedDialAction, 'fabHoverBg', safeEmphasize(palette.background.paper, 0.15));
|
|
200
240
|
setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-400'));
|
|
201
241
|
setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-400'));
|
|
@@ -209,7 +249,8 @@ export default function extendTheme(options = {}, ...args) {
|
|
|
209
249
|
setColor(palette.Switch, 'warningDisabledColor', safeLighten(palette.warning.main, 0.62));
|
|
210
250
|
setColor(palette.TableCell, 'border', safeLighten(safeAlpha(palette.divider, 1), 0.88));
|
|
211
251
|
setColor(palette.Tooltip, 'bg', safeAlpha(palette.grey[700], 0.92));
|
|
212
|
-
}
|
|
252
|
+
}
|
|
253
|
+
if (palette.mode === 'dark') {
|
|
213
254
|
setColor(palette.Alert, 'errorColor', safeLighten(palette.error.light, 0.6));
|
|
214
255
|
setColor(palette.Alert, 'infoColor', safeLighten(palette.info.light, 0.6));
|
|
215
256
|
setColor(palette.Alert, 'successColor', safeLighten(palette.success.light, 0.6));
|
|
@@ -218,10 +259,10 @@ export default function extendTheme(options = {}, ...args) {
|
|
|
218
259
|
setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-dark'));
|
|
219
260
|
setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-dark'));
|
|
220
261
|
setColor(palette.Alert, 'warningFilledBg', setCssVarColor('palette-warning-dark'));
|
|
221
|
-
setColor(palette.Alert, 'errorFilledColor', silent(() =>
|
|
222
|
-
setColor(palette.Alert, 'infoFilledColor', silent(() =>
|
|
223
|
-
setColor(palette.Alert, 'successFilledColor', silent(() =>
|
|
224
|
-
setColor(palette.Alert, 'warningFilledColor', silent(() =>
|
|
262
|
+
setColor(palette.Alert, 'errorFilledColor', silent(() => palette.getContrastText(palette.error.dark)));
|
|
263
|
+
setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.dark)));
|
|
264
|
+
setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.dark)));
|
|
265
|
+
setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.dark)));
|
|
225
266
|
setColor(palette.Alert, 'errorStandardBg', safeDarken(palette.error.light, 0.9));
|
|
226
267
|
setColor(palette.Alert, 'infoStandardBg', safeDarken(palette.info.light, 0.9));
|
|
227
268
|
setColor(palette.Alert, 'successStandardBg', safeDarken(palette.success.light, 0.9));
|
|
@@ -257,7 +298,7 @@ export default function extendTheme(options = {}, ...args) {
|
|
|
257
298
|
setColor(palette.Slider, 'warningTrack', safeDarken(palette.warning.main, 0.5));
|
|
258
299
|
const snackbarContentBackground = safeEmphasize(palette.background.default, 0.98);
|
|
259
300
|
setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);
|
|
260
|
-
setColor(palette.SnackbarContent, 'color', silent(() =>
|
|
301
|
+
setColor(palette.SnackbarContent, 'color', silent(() => palette.getContrastText(snackbarContentBackground)));
|
|
261
302
|
setColor(palette.SpeedDialAction, 'fabHoverBg', safeEmphasize(palette.background.paper, 0.15));
|
|
262
303
|
setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-600'));
|
|
263
304
|
setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-600'));
|
|
@@ -320,16 +361,15 @@ export default function extendTheme(options = {}, ...args) {
|
|
|
320
361
|
theme = args.reduce((acc, argument) => deepmerge(acc, argument), theme);
|
|
321
362
|
const parserConfig = {
|
|
322
363
|
prefix: cssVarPrefix,
|
|
364
|
+
disableCssColorScheme,
|
|
323
365
|
shouldSkipGeneratingVar,
|
|
324
|
-
getSelector:
|
|
366
|
+
getSelector: defaultGetSelector(theme)
|
|
325
367
|
};
|
|
326
368
|
const {
|
|
327
369
|
vars,
|
|
328
370
|
generateThemeVars,
|
|
329
371
|
generateStyleSheets
|
|
330
372
|
} = prepareCssVars(theme, parserConfig);
|
|
331
|
-
theme.attribute = 'data-mui-color-scheme';
|
|
332
|
-
theme.colorSchemeSelector = ':root';
|
|
333
373
|
theme.vars = vars;
|
|
334
374
|
Object.entries(theme.colorSchemes[theme.defaultColorScheme]).forEach(([key, value]) => {
|
|
335
375
|
theme[key] = value;
|
|
@@ -339,7 +379,7 @@ export default function extendTheme(options = {}, ...args) {
|
|
|
339
379
|
theme.generateSpacing = function generateSpacing() {
|
|
340
380
|
return createSpacing(input.spacing, createUnarySpacing(this));
|
|
341
381
|
};
|
|
342
|
-
theme.getColorSchemeSelector =
|
|
382
|
+
theme.getColorSchemeSelector = createGetColorSchemeSelector(selector);
|
|
343
383
|
theme.spacing = theme.generateSpacing();
|
|
344
384
|
theme.shouldSkipGeneratingVar = shouldSkipGeneratingVar;
|
|
345
385
|
theme.unstable_sxConfig = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export default function shouldSkipGeneratingVar(keys) {
|
|
2
|
-
return !!keys[0].match(/(cssVarPrefix|typography|mixins|breakpoints|direction|transitions)/) || !!keys[0].match(/sxConfig$/) ||
|
|
2
|
+
return !!keys[0].match(/(cssVarPrefix|colorSchemeSelector|typography|mixins|breakpoints|direction|transitions)/) || !!keys[0].match(/sxConfig$/) ||
|
|
3
3
|
// ends with sxConfig
|
|
4
4
|
keys[0] === 'palette' && !!keys[1]?.match(/(mode|contrastThreshold|tonalOffset)/);
|
|
5
5
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function getChildRef(child: React.ReactElement): React.Ref<any> | null;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export default function getChildRef(child) {
|
|
3
|
+
if (!child || ! /*#__PURE__*/React.isValidElement(child)) {
|
|
4
|
+
return null;
|
|
5
|
+
}
|
|
6
|
+
// 'ref' is passed as prop in React 19, whereas 'ref' is directly attached to children in React 18
|
|
7
|
+
// below check is to ensure 'ref' is accessible in both cases
|
|
8
|
+
return child.props.propertyIsEnumerable('ref') ? child.props.ref : child.ref;
|
|
9
|
+
}
|