@mui/system 5.0.3 → 5.1.0

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.
Files changed (77) hide show
  1. package/CHANGELOG.md +274 -0
  2. package/borders.js +1 -1
  3. package/breakpoints.js +45 -11
  4. package/colorManipulator.js +8 -8
  5. package/createBox.d.ts +5 -1
  6. package/createBox.js +5 -3
  7. package/createStyled.d.ts +16 -190
  8. package/createStyled.js +6 -2
  9. package/createTheme/createBreakpoints.d.ts +53 -6
  10. package/createTheme/createBreakpoints.js +3 -3
  11. package/cssVars/createCssVarsProvider.d.ts +131 -0
  12. package/cssVars/createCssVarsProvider.js +228 -0
  13. package/cssVars/createCssVarsProvider.spec.d.ts +1 -0
  14. package/cssVars/cssVarsParser.d.ts +68 -0
  15. package/cssVars/cssVarsParser.js +156 -0
  16. package/cssVars/getInitColorSchemeScript.d.ts +12 -0
  17. package/cssVars/getInitColorSchemeScript.js +60 -0
  18. package/cssVars/index.d.ts +2 -0
  19. package/cssVars/index.js +15 -0
  20. package/cssVars/package.json +6 -0
  21. package/cssVars/useCurrentColorScheme.d.ts +50 -0
  22. package/cssVars/useCurrentColorScheme.js +235 -0
  23. package/display.js +1 -1
  24. package/esm/breakpoints.js +39 -8
  25. package/esm/createBox.js +5 -3
  26. package/esm/createStyled.js +5 -1
  27. package/esm/createTheme/createBreakpoints.js +2 -2
  28. package/esm/cssVars/createCssVarsProvider.js +207 -0
  29. package/esm/cssVars/cssVarsParser.js +141 -0
  30. package/esm/cssVars/getInitColorSchemeScript.js +42 -0
  31. package/esm/cssVars/index.js +1 -0
  32. package/esm/cssVars/useCurrentColorScheme.js +217 -0
  33. package/esm/index.js +2 -1
  34. package/esm/styleFunctionSx/extendSxProp.js +20 -1
  35. package/esm/styleFunctionSx/styleFunctionSx.js +45 -35
  36. package/flexbox.js +1 -1
  37. package/getThemeValue.js +1 -1
  38. package/grid.js +1 -1
  39. package/index.d.ts +6 -0
  40. package/index.js +77 -68
  41. package/legacy/breakpoints.js +39 -8
  42. package/legacy/createBox.js +6 -3
  43. package/legacy/createStyled.js +5 -1
  44. package/legacy/createTheme/createBreakpoints.js +2 -2
  45. package/legacy/cssVars/createCssVarsProvider.js +215 -0
  46. package/legacy/cssVars/cssVarsParser.js +153 -0
  47. package/legacy/cssVars/getInitColorSchemeScript.js +27 -0
  48. package/legacy/cssVars/index.js +1 -0
  49. package/legacy/cssVars/useCurrentColorScheme.js +231 -0
  50. package/legacy/index.js +3 -2
  51. package/legacy/styleFunctionSx/extendSxProp.js +21 -1
  52. package/legacy/styleFunctionSx/styleFunctionSx.js +44 -34
  53. package/modern/breakpoints.js +39 -8
  54. package/modern/createBox.js +5 -3
  55. package/modern/createStyled.js +5 -1
  56. package/modern/createTheme/createBreakpoints.js +2 -2
  57. package/modern/cssVars/createCssVarsProvider.js +207 -0
  58. package/modern/cssVars/cssVarsParser.js +141 -0
  59. package/modern/cssVars/getInitColorSchemeScript.js +42 -0
  60. package/modern/cssVars/index.js +1 -0
  61. package/modern/cssVars/useCurrentColorScheme.js +217 -0
  62. package/modern/index.js +3 -2
  63. package/modern/styleFunctionSx/extendSxProp.js +20 -1
  64. package/modern/styleFunctionSx/styleFunctionSx.js +45 -35
  65. package/package.json +8 -8
  66. package/palette.js +1 -1
  67. package/positions.js +1 -1
  68. package/sizing.js +1 -1
  69. package/spacing.js +3 -3
  70. package/style.d.ts +2 -2
  71. package/style.js +1 -1
  72. package/styleFunctionSx/extendSxProp.js +21 -1
  73. package/styleFunctionSx/styleFunctionSx.d.ts +7 -1
  74. package/styleFunctionSx/styleFunctionSx.js +46 -36
  75. package/styleFunctionSx/styleFunctionSx.spec.d.ts +1 -0
  76. package/typography.js +1 -1
  77. package/useTheme.js +1 -1
@@ -14,53 +14,63 @@ function callIfFn(maybeFn, arg) {
14
14
 
15
15
  function styleFunctionSx(props) {
16
16
  const {
17
- sx: styles,
17
+ sx,
18
18
  theme = {}
19
19
  } = props || {};
20
20
 
21
- if (!styles) {
22
- return null;
21
+ if (!sx) {
22
+ return null; // emotion & styled-components will neglect null
23
23
  }
24
+ /*
25
+ * Receive `sxInput` as object or callback
26
+ * and then recursively check keys & values to create media query object styles.
27
+ * (the result will be used in `styled`)
28
+ */
24
29
 
25
- if (typeof styles === 'function') {
26
- return styles(theme);
27
- }
28
30
 
29
- if (typeof styles !== 'object') {
30
- // value
31
- return styles;
32
- }
31
+ function traverse(sxInput) {
32
+ let sxObject = sxInput;
33
33
 
34
- const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);
35
- const breakpointsKeys = Object.keys(emptyBreakpoints);
36
- let css = emptyBreakpoints;
37
- Object.keys(styles).forEach(styleKey => {
38
- const value = callIfFn(styles[styleKey], theme);
34
+ if (typeof sxInput === 'function') {
35
+ sxObject = sxInput(theme);
36
+ } else if (typeof sxInput !== 'object') {
37
+ // value
38
+ return sxInput;
39
+ }
39
40
 
40
- if (typeof value === 'object') {
41
- if (propToStyleFunction[styleKey]) {
42
- css = merge(css, getThemeValue(styleKey, value, theme));
43
- } else {
44
- const breakpointsValues = handleBreakpoints({
45
- theme
46
- }, value, x => ({
47
- [styleKey]: x
48
- }));
41
+ const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);
42
+ const breakpointsKeys = Object.keys(emptyBreakpoints);
43
+ let css = emptyBreakpoints;
44
+ Object.keys(sxObject).forEach(styleKey => {
45
+ const value = callIfFn(sxObject[styleKey], theme);
49
46
 
50
- if (objectsHaveSameKeys(breakpointsValues, value)) {
51
- css[styleKey] = styleFunctionSx({
52
- sx: value,
53
- theme
54
- });
47
+ if (typeof value === 'object') {
48
+ if (propToStyleFunction[styleKey]) {
49
+ css = merge(css, getThemeValue(styleKey, value, theme));
55
50
  } else {
56
- css = merge(css, breakpointsValues);
51
+ const breakpointsValues = handleBreakpoints({
52
+ theme
53
+ }, value, x => ({
54
+ [styleKey]: x
55
+ }));
56
+
57
+ if (objectsHaveSameKeys(breakpointsValues, value)) {
58
+ css[styleKey] = styleFunctionSx({
59
+ sx: value,
60
+ theme
61
+ });
62
+ } else {
63
+ css = merge(css, breakpointsValues);
64
+ }
57
65
  }
66
+ } else {
67
+ css = merge(css, getThemeValue(styleKey, value, theme));
58
68
  }
59
- } else {
60
- css = merge(css, getThemeValue(styleKey, value, theme));
61
- }
62
- });
63
- return removeUnusedBreakpoints(breakpointsKeys, css);
69
+ });
70
+ return removeUnusedBreakpoints(breakpointsKeys, css);
71
+ }
72
+
73
+ return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);
64
74
  }
65
75
 
66
76
  styleFunctionSx.filterProps = ['sx'];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/system",
3
- "version": "5.0.3",
3
+ "version": "5.1.0",
4
4
  "private": false,
5
5
  "author": "MUI Team",
6
6
  "description": "CSS utilities for rapidly laying out custom designs.",
@@ -8,7 +8,7 @@
8
8
  "keywords": [
9
9
  "react",
10
10
  "react-component",
11
- "material-ui",
11
+ "mui",
12
12
  "system"
13
13
  ],
14
14
  "repository": {
@@ -26,7 +26,7 @@
26
26
  "url": "https://opencollective.com/material-ui"
27
27
  },
28
28
  "peerDependencies": {
29
- "@emotion/react": "^11.4.1",
29
+ "@emotion/react": "^11.5.0",
30
30
  "@emotion/styled": "^11.3.0",
31
31
  "@types/react": "^16.8.6 || ^17.0.0",
32
32
  "react": "^17.0.2"
@@ -43,11 +43,11 @@
43
43
  }
44
44
  },
45
45
  "dependencies": {
46
- "@babel/runtime": "^7.15.4",
47
- "@mui/private-theming": "^5.0.1",
48
- "@mui/styled-engine": "^5.0.1",
49
- "@mui/types": "^7.0.0",
50
- "@mui/utils": "^5.0.1",
46
+ "@babel/runtime": "^7.16.0",
47
+ "@mui/private-theming": "^5.1.0",
48
+ "@mui/styled-engine": "^5.1.0",
49
+ "@mui/types": "^7.1.0",
50
+ "@mui/utils": "^5.1.0",
51
51
  "clsx": "^1.1.1",
52
52
  "csstype": "^3.0.9",
53
53
  "prop-types": "^15.7.2"
package/palette.js CHANGED
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.backgroundColor = exports.bgcolor = exports.color = void 0;
8
+ exports.default = exports.color = exports.bgcolor = exports.backgroundColor = void 0;
9
9
 
10
10
  var _style = _interopRequireDefault(require("./style"));
11
11
 
package/positions.js CHANGED
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.left = exports.bottom = exports.right = exports.top = exports.zIndex = exports.position = void 0;
8
+ exports.zIndex = exports.top = exports.right = exports.position = exports.left = exports.default = exports.bottom = void 0;
9
9
 
10
10
  var _style = _interopRequireDefault(require("./style"));
11
11
 
package/sizing.js CHANGED
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.boxSizing = exports.sizeHeight = exports.sizeWidth = exports.minHeight = exports.maxHeight = exports.height = exports.minWidth = exports.maxWidth = exports.width = void 0;
8
+ exports.width = exports.sizeWidth = exports.sizeHeight = exports.minWidth = exports.minHeight = exports.maxWidth = exports.maxHeight = exports.height = exports.default = exports.boxSizing = void 0;
9
9
 
10
10
  var _style = _interopRequireDefault(require("./style"));
11
11
 
package/spacing.js CHANGED
@@ -5,13 +5,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.createUnaryUnit = createUnaryUnit;
9
8
  exports.createUnarySpacing = createUnarySpacing;
10
- exports.getValue = getValue;
9
+ exports.createUnaryUnit = createUnaryUnit;
10
+ exports.default = void 0;
11
11
  exports.getStyleFromPropValue = getStyleFromPropValue;
12
+ exports.getValue = getValue;
12
13
  exports.margin = margin;
13
14
  exports.padding = padding;
14
- exports.default = void 0;
15
15
 
16
16
  var _responsivePropType = _interopRequireDefault(require("./responsivePropType"));
17
17
 
package/style.d.ts CHANGED
@@ -1,5 +1,5 @@
1
+ import { CSSObject } from '@mui/styled-engine';
1
2
  import { StyleFunction } from './Box';
2
- import { CSSObject } from './createStyled';
3
3
 
4
4
  export interface StyleOptions<PropKey> {
5
5
  cssProperty?: PropKey | keyof React.CSSProperties | false;
@@ -12,4 +12,4 @@ export interface StyleOptions<PropKey> {
12
12
  }
13
13
  export function style<PropKey extends string, Theme extends object>(
14
14
  options: StyleOptions<PropKey>,
15
- ): StyleFunction<{ [K in PropKey]?: unknown } & { theme: Theme }>;
15
+ ): StyleFunction<{ [K in PropKey]?: unknown } & { theme?: Theme }>;
package/style.js CHANGED
@@ -5,8 +5,8 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.getPath = getPath;
9
8
  exports.default = void 0;
9
+ exports.getPath = getPath;
10
10
 
11
11
  var _utils = require("@mui/utils");
12
12
 
@@ -11,6 +11,8 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
 
12
12
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
13
 
14
+ var _utils = require("@mui/utils");
15
+
14
16
  var _getThemeValue = require("../getThemeValue");
15
17
 
16
18
  const _excluded = ["sx"];
@@ -39,7 +41,25 @@ function extendSxProp(props) {
39
41
  systemProps,
40
42
  otherProps
41
43
  } = splitProps(other);
44
+ let finalSx;
45
+
46
+ if (Array.isArray(inSx)) {
47
+ finalSx = [systemProps, ...inSx];
48
+ } else if (typeof inSx === 'function') {
49
+ finalSx = (...args) => {
50
+ const result = inSx(...args);
51
+
52
+ if (!(0, _utils.isPlainObject)(result)) {
53
+ return systemProps;
54
+ }
55
+
56
+ return (0, _extends2.default)({}, systemProps, result);
57
+ };
58
+ } else {
59
+ finalSx = (0, _extends2.default)({}, systemProps, inSx);
60
+ }
61
+
42
62
  return (0, _extends2.default)({}, otherProps, {
43
- sx: (0, _extends2.default)({}, systemProps, inSx)
63
+ sx: finalSx
44
64
  });
45
65
  }
@@ -51,7 +51,13 @@ export type SystemStyleObject<Theme extends object = {}> =
51
51
  | CSSSelectorObject<Theme>
52
52
  | null;
53
53
 
54
- export type SxProps<Theme extends object = {}> = SystemStyleObject<Theme>;
54
+ /**
55
+ * The `SxProps` can be either object or function
56
+ */
57
+ export type SxProps<Theme extends object = {}> =
58
+ | SystemStyleObject<Theme>
59
+ | ((theme: Theme) => SystemStyleObject<Theme>)
60
+ | Array<SystemStyleObject<Theme> | ((theme: Theme) => SystemStyleObject<Theme>)>;
55
61
 
56
62
  // eslint-disable-next-line @typescript-eslint/naming-convention
57
63
  export default function unstable_styleFunctionSx(props: object): object;
@@ -29,53 +29,63 @@ function callIfFn(maybeFn, arg) {
29
29
 
30
30
  function styleFunctionSx(props) {
31
31
  const {
32
- sx: styles,
32
+ sx,
33
33
  theme = {}
34
34
  } = props || {};
35
35
 
36
- if (!styles) {
37
- return null;
36
+ if (!sx) {
37
+ return null; // emotion & styled-components will neglect null
38
38
  }
39
+ /*
40
+ * Receive `sxInput` as object or callback
41
+ * and then recursively check keys & values to create media query object styles.
42
+ * (the result will be used in `styled`)
43
+ */
39
44
 
40
- if (typeof styles === 'function') {
41
- return styles(theme);
42
- }
43
45
 
44
- if (typeof styles !== 'object') {
45
- // value
46
- return styles;
47
- }
46
+ function traverse(sxInput) {
47
+ let sxObject = sxInput;
48
48
 
49
- const emptyBreakpoints = (0, _breakpoints.createEmptyBreakpointObject)(theme.breakpoints);
50
- const breakpointsKeys = Object.keys(emptyBreakpoints);
51
- let css = emptyBreakpoints;
52
- Object.keys(styles).forEach(styleKey => {
53
- const value = callIfFn(styles[styleKey], theme);
49
+ if (typeof sxInput === 'function') {
50
+ sxObject = sxInput(theme);
51
+ } else if (typeof sxInput !== 'object') {
52
+ // value
53
+ return sxInput;
54
+ }
54
55
 
55
- if (typeof value === 'object') {
56
- if (_getThemeValue.propToStyleFunction[styleKey]) {
57
- css = (0, _merge.default)(css, (0, _getThemeValue.default)(styleKey, value, theme));
58
- } else {
59
- const breakpointsValues = (0, _breakpoints.handleBreakpoints)({
60
- theme
61
- }, value, x => ({
62
- [styleKey]: x
63
- }));
64
-
65
- if (objectsHaveSameKeys(breakpointsValues, value)) {
66
- css[styleKey] = styleFunctionSx({
67
- sx: value,
68
- theme
69
- });
56
+ const emptyBreakpoints = (0, _breakpoints.createEmptyBreakpointObject)(theme.breakpoints);
57
+ const breakpointsKeys = Object.keys(emptyBreakpoints);
58
+ let css = emptyBreakpoints;
59
+ Object.keys(sxObject).forEach(styleKey => {
60
+ const value = callIfFn(sxObject[styleKey], theme);
61
+
62
+ if (typeof value === 'object') {
63
+ if (_getThemeValue.propToStyleFunction[styleKey]) {
64
+ css = (0, _merge.default)(css, (0, _getThemeValue.default)(styleKey, value, theme));
70
65
  } else {
71
- css = (0, _merge.default)(css, breakpointsValues);
66
+ const breakpointsValues = (0, _breakpoints.handleBreakpoints)({
67
+ theme
68
+ }, value, x => ({
69
+ [styleKey]: x
70
+ }));
71
+
72
+ if (objectsHaveSameKeys(breakpointsValues, value)) {
73
+ css[styleKey] = styleFunctionSx({
74
+ sx: value,
75
+ theme
76
+ });
77
+ } else {
78
+ css = (0, _merge.default)(css, breakpointsValues);
79
+ }
72
80
  }
81
+ } else {
82
+ css = (0, _merge.default)(css, (0, _getThemeValue.default)(styleKey, value, theme));
73
83
  }
74
- } else {
75
- css = (0, _merge.default)(css, (0, _getThemeValue.default)(styleKey, value, theme));
76
- }
77
- });
78
- return (0, _breakpoints.removeUnusedBreakpoints)(breakpointsKeys, css);
84
+ });
85
+ return (0, _breakpoints.removeUnusedBreakpoints)(breakpointsKeys, css);
86
+ }
87
+
88
+ return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);
79
89
  }
80
90
 
81
91
  styleFunctionSx.filterProps = ['sx'];
@@ -0,0 +1 @@
1
+ export {};
package/typography.js CHANGED
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.typographyVariant = exports.textAlign = exports.lineHeight = exports.letterSpacing = exports.fontWeight = exports.fontStyle = exports.fontSize = exports.fontFamily = void 0;
8
+ exports.typographyVariant = exports.textAlign = exports.lineHeight = exports.letterSpacing = exports.fontWeight = exports.fontStyle = exports.fontSize = exports.fontFamily = exports.default = void 0;
9
9
 
10
10
  var _style = _interopRequireDefault(require("./style"));
11
11
 
package/useTheme.js CHANGED
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.systemDefaultTheme = void 0;
8
+ exports.systemDefaultTheme = exports.default = void 0;
9
9
 
10
10
  var _createTheme = _interopRequireDefault(require("./createTheme"));
11
11