@mui/system 6.0.0-alpha.8 → 6.0.0-beta.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 (69) hide show
  1. package/CHANGELOG.md +407 -3
  2. package/Container/createContainer.js +0 -2
  3. package/DefaultPropsProvider/DefaultPropsProvider.d.ts +12 -0
  4. package/DefaultPropsProvider/DefaultPropsProvider.js +64 -0
  5. package/DefaultPropsProvider/index.d.ts +1 -0
  6. package/DefaultPropsProvider/index.js +1 -0
  7. package/DefaultPropsProvider/package.json +6 -0
  8. package/{cssVars/getInitColorSchemeScript.d.ts → InitColorSchemeScript/InitColorSchemeScript.d.ts} +9 -2
  9. package/{cssVars/getInitColorSchemeScript.js → InitColorSchemeScript/InitColorSchemeScript.js} +9 -2
  10. package/InitColorSchemeScript/index.d.ts +2 -0
  11. package/InitColorSchemeScript/index.js +1 -0
  12. package/InitColorSchemeScript/package.json +6 -0
  13. package/ThemeProvider/ThemeProvider.js +5 -1
  14. package/Unstable_Grid/Grid.js +5 -81
  15. package/Unstable_Grid/GridProps.d.ts +12 -97
  16. package/Unstable_Grid/createGrid.js +36 -55
  17. package/Unstable_Grid/gridClasses.js +1 -1
  18. package/Unstable_Grid/gridGenerator.d.ts +3 -10
  19. package/Unstable_Grid/gridGenerator.js +10 -19
  20. package/createStyled/createStyled.js +7 -10
  21. package/createTheme/applyStyles.d.ts +1 -1
  22. package/createTheme/applyStyles.js +1 -1
  23. package/createTheme/createTheme.d.ts +1 -1
  24. package/cssContainerQueries/cssContainerQueries.js +4 -4
  25. package/cssVars/createCssVarsProvider.d.ts +3 -3
  26. package/cssVars/createCssVarsProvider.js +2 -2
  27. package/cssVars/index.d.ts +0 -1
  28. package/cssVars/index.js +0 -1
  29. package/cssVars/useCurrentColorScheme.js +1 -1
  30. package/index.js +1 -1
  31. package/modern/Container/createContainer.js +0 -2
  32. package/modern/DefaultPropsProvider/DefaultPropsProvider.js +64 -0
  33. package/modern/DefaultPropsProvider/index.js +1 -0
  34. package/modern/{cssVars/getInitColorSchemeScript.js → InitColorSchemeScript/InitColorSchemeScript.js} +9 -2
  35. package/modern/InitColorSchemeScript/index.js +1 -0
  36. package/modern/ThemeProvider/ThemeProvider.js +5 -1
  37. package/modern/Unstable_Grid/Grid.js +5 -81
  38. package/modern/Unstable_Grid/createGrid.js +36 -55
  39. package/modern/Unstable_Grid/gridClasses.js +1 -1
  40. package/modern/Unstable_Grid/gridGenerator.js +10 -19
  41. package/modern/createStyled/createStyled.js +7 -10
  42. package/modern/createTheme/applyStyles.js +1 -1
  43. package/modern/cssContainerQueries/cssContainerQueries.js +4 -4
  44. package/modern/cssVars/createCssVarsProvider.js +2 -2
  45. package/modern/cssVars/index.js +0 -1
  46. package/modern/cssVars/useCurrentColorScheme.js +1 -1
  47. package/modern/index.js +1 -1
  48. package/modern/useMediaQuery/useMediaQuery.js +5 -27
  49. package/node/Container/createContainer.js +0 -2
  50. package/node/DefaultPropsProvider/DefaultPropsProvider.js +73 -0
  51. package/node/DefaultPropsProvider/index.js +20 -0
  52. package/node/{cssVars/getInitColorSchemeScript.js → InitColorSchemeScript/InitColorSchemeScript.js} +11 -3
  53. package/node/InitColorSchemeScript/index.js +13 -0
  54. package/node/ThemeProvider/ThemeProvider.js +5 -1
  55. package/node/Unstable_Grid/Grid.js +5 -81
  56. package/node/Unstable_Grid/createGrid.js +39 -58
  57. package/node/Unstable_Grid/gridClasses.js +1 -1
  58. package/node/Unstable_Grid/gridGenerator.js +10 -19
  59. package/node/createStyled/createStyled.js +7 -10
  60. package/node/createTheme/applyStyles.js +1 -1
  61. package/node/cssContainerQueries/cssContainerQueries.js +4 -4
  62. package/node/cssVars/createCssVarsProvider.js +5 -5
  63. package/node/cssVars/index.js +0 -7
  64. package/node/cssVars/useCurrentColorScheme.js +3 -3
  65. package/node/index.js +1 -1
  66. package/node/useMediaQuery/useMediaQuery.js +5 -26
  67. package/package.json +5 -5
  68. package/useMediaQuery/useMediaQuery.d.ts +0 -18
  69. package/useMediaQuery/useMediaQuery.js +5 -27
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import * as React from 'react';
4
- import { DEFAULT_MODE_STORAGE_KEY, DEFAULT_COLOR_SCHEME_STORAGE_KEY } from './getInitColorSchemeScript';
4
+ import { DEFAULT_MODE_STORAGE_KEY, DEFAULT_COLOR_SCHEME_STORAGE_KEY } from '../InitColorSchemeScript/InitColorSchemeScript';
5
5
  export function getSystemMode(mode) {
6
6
  if (typeof window !== 'undefined' && mode === 'system') {
7
7
  const mql = window.matchMedia('(prefers-color-scheme: dark)');
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/system v6.0.0-alpha.8
2
+ * @mui/system v6.0.0-beta.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -4,19 +4,6 @@ import * as React from 'react';
4
4
  import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
5
5
  import { getThemeProps } from '../useThemeProps';
6
6
  import useTheme from '../useThemeWithoutDefault';
7
-
8
- /**
9
- * @deprecated Not used internally. Use `MediaQueryListEvent` from lib.dom.d.ts instead.
10
- */
11
-
12
- /**
13
- * @deprecated Not used internally. Use `MediaQueryList` from lib.dom.d.ts instead.
14
- */
15
-
16
- /**
17
- * @deprecated Not used internally. Use `(event: MediaQueryListEvent) => void` instead.
18
- */
19
-
20
7
  function useMediaQueryOld(query, defaultMatches, matchMedia, ssrMatchMedia, noSsr) {
21
8
  const [match, setMatch] = React.useState(() => {
22
9
  if (noSsr && matchMedia) {
@@ -31,25 +18,17 @@ function useMediaQueryOld(query, defaultMatches, matchMedia, ssrMatchMedia, noSs
31
18
  return defaultMatches;
32
19
  });
33
20
  useEnhancedEffect(() => {
34
- let active = true;
35
21
  if (!matchMedia) {
36
22
  return undefined;
37
23
  }
38
24
  const queryList = matchMedia(query);
39
25
  const updateMatch = () => {
40
- // Workaround Safari wrong implementation of matchMedia
41
- // TODO can we remove it?
42
- // https://github.com/mui/material-ui/pull/17315#issuecomment-528286677
43
- if (active) {
44
- setMatch(queryList.matches);
45
- }
26
+ setMatch(queryList.matches);
46
27
  };
47
28
  updateMatch();
48
- // TODO: Use `addEventListener` once support for Safari < 14 is dropped
49
- queryList.addListener(updateMatch);
29
+ queryList.addEventListener('change', updateMatch);
50
30
  return () => {
51
- active = false;
52
- queryList.removeListener(updateMatch);
31
+ queryList.removeEventListener('change', updateMatch);
53
32
  };
54
33
  }, [query, matchMedia]);
55
34
  return match;
@@ -77,10 +56,9 @@ function useMediaQueryNew(query, defaultMatches, matchMedia, ssrMatchMedia, noSs
77
56
  }
78
57
  const mediaQueryList = matchMedia(query);
79
58
  return [() => mediaQueryList.matches, notify => {
80
- // TODO: Use `addEventListener` once support for Safari < 14 is dropped
81
- mediaQueryList.addListener(notify);
59
+ mediaQueryList.addEventListener('change', notify);
82
60
  return () => {
83
- mediaQueryList.removeListener(notify);
61
+ mediaQueryList.removeEventListener('change', notify);
84
62
  };
85
63
  }];
86
64
  }, [getDefaultSnapshot, matchMedia, query]);
@@ -63,8 +63,6 @@ function createContainer(options = {}) {
63
63
  marginLeft: 'auto',
64
64
  boxSizing: 'border-box',
65
65
  marginRight: 'auto',
66
- display: 'block',
67
- // Fix IE11 layout when used with main.
68
66
  ...(!ownerState.disableGutters && {
69
67
  paddingLeft: theme.spacing(2),
70
68
  paddingRight: theme.spacing(2),
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ exports.useDefaultProps = useDefaultProps;
10
+ var React = _interopRequireWildcard(require("react"));
11
+ var _propTypes = _interopRequireDefault(require("prop-types"));
12
+ var _resolveProps = _interopRequireDefault(require("@mui/utils/resolveProps"));
13
+ var _jsxRuntime = require("react/jsx-runtime");
14
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ const PropsContext = /*#__PURE__*/React.createContext(undefined);
17
+ function DefaultPropsProvider({
18
+ value,
19
+ children
20
+ }) {
21
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(PropsContext.Provider, {
22
+ value: value,
23
+ children: children
24
+ });
25
+ }
26
+ process.env.NODE_ENV !== "production" ? DefaultPropsProvider.propTypes /* remove-proptypes */ = {
27
+ // ┌────────────────────────────── Warning ──────────────────────────────┐
28
+ // │ These PropTypes are generated from the TypeScript type definitions. │
29
+ // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │
30
+ // └─────────────────────────────────────────────────────────────────────┘
31
+ /**
32
+ * @ignore
33
+ */
34
+ children: _propTypes.default.node,
35
+ /**
36
+ * @ignore
37
+ */
38
+ value: _propTypes.default.object
39
+ } : void 0;
40
+ function getThemeProps(params) {
41
+ const {
42
+ theme,
43
+ name,
44
+ props
45
+ } = params;
46
+ if (!theme || !theme.components || !theme.components[name]) {
47
+ return props;
48
+ }
49
+ const config = theme.components[name];
50
+ if (config.defaultProps) {
51
+ // compatible with v5 signature
52
+ return (0, _resolveProps.default)(config.defaultProps, props);
53
+ }
54
+ if (!config.styleOverrides && !config.variants) {
55
+ // v6 signature, no property 'defaultProps'
56
+ return (0, _resolveProps.default)(config, props);
57
+ }
58
+ return props;
59
+ }
60
+ function useDefaultProps({
61
+ props,
62
+ name
63
+ }) {
64
+ const ctx = React.useContext(PropsContext);
65
+ return getThemeProps({
66
+ props,
67
+ name,
68
+ theme: {
69
+ components: ctx
70
+ }
71
+ });
72
+ }
73
+ var _default = exports.default = DefaultPropsProvider;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _DefaultPropsProvider.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "useDefaultProps", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _DefaultPropsProvider.useDefaultProps;
16
+ }
17
+ });
18
+ var _DefaultPropsProvider = _interopRequireWildcard(require("./DefaultPropsProvider"));
19
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
20
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -4,15 +4,19 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.DEFAULT_MODE_STORAGE_KEY = exports.DEFAULT_COLOR_SCHEME_STORAGE_KEY = exports.DEFAULT_ATTRIBUTE = void 0;
7
- exports.default = getInitColorSchemeScript;
7
+ exports.default = InitColorSchemeScript;
8
8
  var React = _interopRequireWildcard(require("react"));
9
9
  var _jsxRuntime = require("react/jsx-runtime");
10
10
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
11
11
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
12
+ /**
13
+ * Split this component for RSC import
14
+ */
15
+
12
16
  const DEFAULT_MODE_STORAGE_KEY = exports.DEFAULT_MODE_STORAGE_KEY = 'mode';
13
17
  const DEFAULT_COLOR_SCHEME_STORAGE_KEY = exports.DEFAULT_COLOR_SCHEME_STORAGE_KEY = 'color-scheme';
14
18
  const DEFAULT_ATTRIBUTE = exports.DEFAULT_ATTRIBUTE = 'data-color-scheme';
15
- function getInitColorSchemeScript(options) {
19
+ function InitColorSchemeScript(options) {
16
20
  const {
17
21
  defaultMode = 'light',
18
22
  defaultLightColorScheme = 'light',
@@ -20,10 +24,14 @@ function getInitColorSchemeScript(options) {
20
24
  modeStorageKey = DEFAULT_MODE_STORAGE_KEY,
21
25
  colorSchemeStorageKey = DEFAULT_COLOR_SCHEME_STORAGE_KEY,
22
26
  attribute = DEFAULT_ATTRIBUTE,
23
- colorSchemeNode = 'document.documentElement'
27
+ colorSchemeNode = 'document.documentElement',
28
+ nonce
24
29
  } = options || {};
25
30
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("script", {
31
+ suppressHydrationWarning: true,
32
+ nonce: typeof window === 'undefined' ? nonce : ''
26
33
  // eslint-disable-next-line react/no-danger
34
+ ,
27
35
  dangerouslySetInnerHTML: {
28
36
  __html: `(function() {
29
37
  try {
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "default", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _InitColorSchemeScript.default;
11
+ }
12
+ });
13
+ var _InitColorSchemeScript = _interopRequireDefault(require("./InitColorSchemeScript"));
@@ -13,6 +13,7 @@ var _exactProp = _interopRequireDefault(require("@mui/utils/exactProp"));
13
13
  var _styledEngine = require("@mui/styled-engine");
14
14
  var _useThemeWithoutDefault = _interopRequireDefault(require("../useThemeWithoutDefault"));
15
15
  var _RtlProvider = _interopRequireDefault(require("../RtlProvider"));
16
+ var _DefaultPropsProvider = _interopRequireDefault(require("../DefaultPropsProvider"));
16
17
  var _jsxRuntime = require("react/jsx-runtime");
17
18
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
18
19
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -72,7 +73,10 @@ function ThemeProvider(props) {
72
73
  value: engineTheme,
73
74
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_RtlProvider.default, {
74
75
  value: rtlValue,
75
- children: children
76
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_DefaultPropsProvider.default, {
77
+ value: engineTheme == null ? void 0 : engineTheme.components,
78
+ children: children
79
+ })
76
80
  })
77
81
  })
78
82
  });
@@ -52,62 +52,18 @@ process.env.NODE_ENV !== "production" ? Grid.propTypes /* remove-proptypes */ =
52
52
  */
53
53
  direction: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), _propTypes.default.arrayOf(_propTypes.default.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), _propTypes.default.object]),
54
54
  /**
55
- * If `true`, the negative margin and padding are apply only to the top and left sides of the grid.
55
+ * Defines the offset value for the type `item` components.
56
56
  */
57
- disableEqualOverflow: _propTypes.default.bool,
58
- /**
59
- * If a number, it sets the number of columns the grid item uses.
60
- * It can't be greater than the total number of columns of the container (12 by default).
61
- * If 'auto', the grid item's width matches its content.
62
- * If false, the prop is ignored.
63
- * If true, the grid item's width grows to use the space available in the grid container.
64
- * The value is applied for the `lg` breakpoint and wider screens if not overridden.
65
- * @default false
66
- */
67
- lg: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number, _propTypes.default.bool]),
68
- /**
69
- * If a number, it sets the margin-left equals to the number of columns the grid item uses.
70
- * If 'auto', the grid item push itself to the right-end of the container.
71
- * The value is applied for the `lg` breakpoint and wider screens if not overridden.
72
- */
73
- lgOffset: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number]),
74
- /**
75
- * If a number, it sets the number of columns the grid item uses.
76
- * It can't be greater than the total number of columns of the container (12 by default).
77
- * If 'auto', the grid item's width matches its content.
78
- * If false, the prop is ignored.
79
- * If true, the grid item's width grows to use the space available in the grid container.
80
- * The value is applied for the `md` breakpoint and wider screens if not overridden.
81
- * @default false
82
- */
83
- md: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number, _propTypes.default.bool]),
84
- /**
85
- * If a number, it sets the margin-left equals to the number of columns the grid item uses.
86
- * If 'auto', the grid item push itself to the right-end of the container.
87
- * The value is applied for the `md` breakpoint and wider screens if not overridden.
88
- */
89
- mdOffset: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number]),
57
+ offset: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])), _propTypes.default.object]),
90
58
  /**
91
59
  * Defines the vertical space between the type `item` components.
92
60
  * It overrides the value of the `spacing` prop.
93
61
  */
94
62
  rowSpacing: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.string]),
95
63
  /**
96
- * If a number, it sets the number of columns the grid item uses.
97
- * It can't be greater than the total number of columns of the container (12 by default).
98
- * If 'auto', the grid item's width matches its content.
99
- * If false, the prop is ignored.
100
- * If true, the grid item's width grows to use the space available in the grid container.
101
- * The value is applied for the `sm` breakpoint and wider screens if not overridden.
102
- * @default false
64
+ * Defines the size of the the type `item` components.
103
65
  */
104
- sm: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number, _propTypes.default.bool]),
105
- /**
106
- * If a number, it sets the margin-left equals to the number of columns the grid item uses.
107
- * If 'auto', the grid item push itself to the right-end of the container.
108
- * The value is applied for the `sm` breakpoint and wider screens if not overridden.
109
- */
110
- smOffset: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number]),
66
+ size: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.string, _propTypes.default.bool, _propTypes.default.number, _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.bool, _propTypes.default.number])), _propTypes.default.object]),
111
67
  /**
112
68
  * Defines the space between the type `item` components.
113
69
  * It can only be used on a type `container` component.
@@ -146,38 +102,6 @@ process.env.NODE_ENV !== "production" ? Grid.propTypes /* remove-proptypes */ =
146
102
  * It's applied for all screen sizes.
147
103
  * @default 'wrap'
148
104
  */
149
- wrap: _propTypes.default.oneOf(['nowrap', 'wrap-reverse', 'wrap']),
150
- /**
151
- * If a number, it sets the number of columns the grid item uses.
152
- * It can't be greater than the total number of columns of the container (12 by default).
153
- * If 'auto', the grid item's width matches its content.
154
- * If false, the prop is ignored.
155
- * If true, the grid item's width grows to use the space available in the grid container.
156
- * The value is applied for the `xl` breakpoint and wider screens if not overridden.
157
- * @default false
158
- */
159
- xl: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number, _propTypes.default.bool]),
160
- /**
161
- * If a number, it sets the margin-left equals to the number of columns the grid item uses.
162
- * If 'auto', the grid item push itself to the right-end of the container.
163
- * The value is applied for the `xl` breakpoint and wider screens if not overridden.
164
- */
165
- xlOffset: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number]),
166
- /**
167
- * If a number, it sets the number of columns the grid item uses.
168
- * It can't be greater than the total number of columns of the container (12 by default).
169
- * If 'auto', the grid item's width matches its content.
170
- * If false, the prop is ignored.
171
- * If true, the grid item's width grows to use the space available in the grid container.
172
- * The value is applied for all the screen sizes with the lowest priority.
173
- * @default false
174
- */
175
- xs: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number, _propTypes.default.bool]),
176
- /**
177
- * If a number, it sets the margin-left equals to the number of columns the grid item uses.
178
- * If 'auto', the grid item push itself to the right-end of the container.
179
- * The value is applied for the `xs` breakpoint and wider screens if not overridden.
180
- */
181
- xsOffset: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number])
105
+ wrap: _propTypes.default.oneOf(['nowrap', 'wrap-reverse', 'wrap'])
182
106
  } : void 0;
183
107
  var _default = exports.default = Grid;
@@ -42,30 +42,48 @@ function createGrid(options = {}) {
42
42
  useThemeProps = useThemePropsDefault,
43
43
  componentName = 'MuiGrid'
44
44
  } = options;
45
- const GridOverflowContext = /*#__PURE__*/React.createContext(undefined);
46
- if (process.env.NODE_ENV !== 'production') {
47
- GridOverflowContext.displayName = 'GridOverflowContext';
48
- }
49
45
  const useUtilityClasses = (ownerState, theme) => {
50
46
  const {
51
47
  container,
52
48
  direction,
53
49
  spacing,
54
50
  wrap,
55
- gridSize
51
+ size
56
52
  } = ownerState;
57
53
  const slots = {
58
- root: ['root', container && 'container', wrap !== 'wrap' && `wrap-xs-${String(wrap)}`, ...(0, _gridGenerator.generateDirectionClasses)(direction), ...(0, _gridGenerator.generateSizeClassNames)(gridSize), ...(container ? (0, _gridGenerator.generateSpacingClassNames)(spacing, theme.breakpoints.keys[0]) : [])]
54
+ root: ['root', container && 'container', wrap !== 'wrap' && `wrap-xs-${String(wrap)}`, ...(0, _gridGenerator.generateDirectionClasses)(direction), ...(0, _gridGenerator.generateSizeClassNames)(size), ...(container ? (0, _gridGenerator.generateSpacingClassNames)(spacing, theme.breakpoints.keys[0]) : [])]
59
55
  };
60
56
  return (0, _composeClasses.default)(slots, slot => (0, _generateUtilityClass.default)(componentName, slot), {});
61
57
  };
58
+ function parseResponsiveProp(propValue, breakpoints, shouldUseValue = () => true) {
59
+ const parsedProp = {};
60
+ if (propValue === null) {
61
+ return parsedProp;
62
+ }
63
+ if (Array.isArray(propValue)) {
64
+ propValue.forEach((value, index) => {
65
+ if (value !== null && shouldUseValue(value) && breakpoints.keys[index]) {
66
+ parsedProp[breakpoints.keys[index]] = value;
67
+ }
68
+ });
69
+ } else if (typeof propValue === 'object') {
70
+ Object.keys(propValue).forEach(key => {
71
+ const value = propValue[key];
72
+ if (value !== null && value !== undefined && shouldUseValue(value)) {
73
+ parsedProp[key] = value;
74
+ }
75
+ });
76
+ } else {
77
+ parsedProp[breakpoints.keys[0]] = propValue;
78
+ }
79
+ return parsedProp;
80
+ }
62
81
  const GridRoot = createStyledComponent(_gridGenerator.generateGridColumnsStyles, _gridGenerator.generateGridColumnSpacingStyles, _gridGenerator.generateGridRowSpacingStyles, _gridGenerator.generateGridSizeStyles, _gridGenerator.generateGridDirectionStyles, _gridGenerator.generateGridStyles, _gridGenerator.generateGridOffsetStyles);
63
82
  const Grid = /*#__PURE__*/React.forwardRef(function Grid(inProps, ref) {
64
- var _inProps$columns, _inProps$spacing, _ref, _inProps$rowSpacing, _ref2, _inProps$columnSpacin, _ref3, _disableEqualOverflow;
83
+ var _inProps$columns, _inProps$spacing, _ref, _inProps$rowSpacing, _ref2, _inProps$columnSpacin;
65
84
  const theme = (0, _useTheme.default)();
66
85
  const themeProps = useThemeProps(inProps);
67
86
  const props = (0, _styleFunctionSx.extendSxProp)(themeProps); // `color` type conflicts with html color attribute.
68
- const overflow = React.useContext(GridOverflowContext);
69
87
  const {
70
88
  className,
71
89
  children,
@@ -74,31 +92,16 @@ function createGrid(options = {}) {
74
92
  component = 'div',
75
93
  direction = 'row',
76
94
  wrap = 'wrap',
95
+ size: sizeProp = {},
96
+ offset: offsetProp = {},
77
97
  spacing: spacingProp = 0,
78
98
  rowSpacing: rowSpacingProp = spacingProp,
79
99
  columnSpacing: columnSpacingProp = spacingProp,
80
- disableEqualOverflow: themeDisableEqualOverflow,
81
100
  unstable_level: level = 0,
82
101
  ...rest
83
102
  } = props;
84
- // Because `disableEqualOverflow` can be set from the theme's defaultProps, the **nested** grid should look at the instance props instead.
85
- let disableEqualOverflow = themeDisableEqualOverflow;
86
- if (level && themeDisableEqualOverflow !== undefined) {
87
- disableEqualOverflow = inProps.disableEqualOverflow;
88
- }
89
- // collect breakpoints related props because they can be customized from the theme.
90
- const gridSize = {};
91
- const gridOffset = {};
92
- const other = {};
93
- Object.entries(rest).forEach(([key, val]) => {
94
- if (theme.breakpoints.values[key] !== undefined) {
95
- gridSize[key] = val;
96
- } else if (theme.breakpoints.values[key.replace('Offset', '')] !== undefined) {
97
- gridOffset[key.replace('Offset', '')] = val;
98
- } else {
99
- other[key] = val;
100
- }
101
- });
103
+ const size = parseResponsiveProp(sizeProp, theme.breakpoints, val => val !== false);
104
+ const offset = parseResponsiveProp(offsetProp, theme.breakpoints);
102
105
  const columns = (_inProps$columns = inProps.columns) != null ? _inProps$columns : level ? undefined : columnsProp;
103
106
  const spacing = (_inProps$spacing = inProps.spacing) != null ? _inProps$spacing : level ? undefined : spacingProp;
104
107
  const rowSpacing = (_ref = (_inProps$rowSpacing = inProps.rowSpacing) != null ? _inProps$rowSpacing : inProps.spacing) != null ? _ref : level ? undefined : rowSpacingProp;
@@ -113,39 +116,26 @@ function createGrid(options = {}) {
113
116
  spacing,
114
117
  rowSpacing,
115
118
  columnSpacing,
116
- gridSize,
117
- gridOffset,
118
- disableEqualOverflow: (_ref3 = (_disableEqualOverflow = disableEqualOverflow) != null ? _disableEqualOverflow : overflow) != null ? _ref3 : false,
119
- // use context value if exists.
120
- parentDisableEqualOverflow: overflow // for nested grid
119
+ size,
120
+ offset
121
121
  };
122
122
  const classes = useUtilityClasses(ownerState, theme);
123
- let result = /*#__PURE__*/(0, _jsxRuntime.jsx)(GridRoot, {
123
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridRoot, {
124
124
  ref: ref,
125
125
  as: component,
126
126
  ownerState: ownerState,
127
127
  className: (0, _clsx.default)(classes.root, className),
128
- ...other,
128
+ ...rest,
129
129
  children: React.Children.map(children, child => {
130
130
  if ( /*#__PURE__*/React.isValidElement(child) && (0, _isMuiElement.default)(child, ['Grid'])) {
131
- var _child$props$unstable;
131
+ var _unstable_level;
132
132
  return /*#__PURE__*/React.cloneElement(child, {
133
- unstable_level: (_child$props$unstable = child.props.unstable_level) != null ? _child$props$unstable : level + 1
133
+ unstable_level: (_unstable_level = child.props.unstable_level) != null ? _unstable_level : level + 1
134
134
  });
135
135
  }
136
136
  return child;
137
137
  })
138
138
  });
139
- if (disableEqualOverflow !== undefined && disableEqualOverflow !== (overflow != null ? overflow : false)) {
140
- // There are 2 possibilities that should wrap with the GridOverflowContext to communicate with the nested grids:
141
- // 1. It is the root grid with `disableEqualOverflow`.
142
- // 2. It is a nested grid with different `disableEqualOverflow` from the context.
143
- result = /*#__PURE__*/(0, _jsxRuntime.jsx)(GridOverflowContext.Provider, {
144
- value: disableEqualOverflow,
145
- children: result
146
- });
147
- }
148
- return result;
149
139
  });
150
140
  process.env.NODE_ENV !== "production" ? Grid.propTypes /* remove-proptypes */ = {
151
141
  children: _propTypes.default.node,
@@ -155,21 +145,12 @@ function createGrid(options = {}) {
155
145
  component: _propTypes.default.elementType,
156
146
  container: _propTypes.default.bool,
157
147
  direction: _propTypes.default.oneOfType([_propTypes.default.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), _propTypes.default.arrayOf(_propTypes.default.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), _propTypes.default.object]),
158
- disableEqualOverflow: _propTypes.default.bool,
159
- lg: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number, _propTypes.default.bool]),
160
- lgOffset: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number]),
161
- md: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number, _propTypes.default.bool]),
162
- mdOffset: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number]),
148
+ offset: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])), _propTypes.default.object]),
163
149
  rowSpacing: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.string]),
164
- sm: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number, _propTypes.default.bool]),
165
- smOffset: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number]),
150
+ size: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.bool, _propTypes.default.number, _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.bool, _propTypes.default.number])), _propTypes.default.object]),
166
151
  spacing: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])), _propTypes.default.number, _propTypes.default.object, _propTypes.default.string]),
167
152
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
168
- wrap: _propTypes.default.oneOf(['nowrap', 'wrap-reverse', 'wrap']),
169
- xl: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number, _propTypes.default.bool]),
170
- xlOffset: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number]),
171
- xs: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number, _propTypes.default.bool]),
172
- xsOffset: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number])
153
+ wrap: _propTypes.default.oneOf(['nowrap', 'wrap-reverse', 'wrap'])
173
154
  } : void 0;
174
155
 
175
156
  // @ts-ignore internal logic for nested grid
@@ -14,7 +14,7 @@ function getGridUtilityClass(slot) {
14
14
  const SPACINGS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
15
15
  const DIRECTIONS = ['column-reverse', 'column', 'row-reverse', 'row'];
16
16
  const WRAPS = ['nowrap', 'wrap-reverse', 'wrap'];
17
- const GRID_SIZES = ['auto', true, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
17
+ const GRID_SIZES = ['auto', 'grow', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
18
18
  const gridClasses = (0, _generateUtilityClasses.default)('MuiGrid', ['root', 'container', 'item',
19
19
  // spacings
20
20
  ...SPACINGS.map(spacing => `spacing-xs-${spacing}`),
@@ -37,11 +37,11 @@ const generateGridSizeStyles = ({
37
37
  theme,
38
38
  ownerState
39
39
  }) => {
40
- const getSelfSpacing = createGetSelfSpacing(ownerState);
40
+ const getParentSpacing = createGetParentSpacing(ownerState);
41
41
  const styles = {};
42
- (0, _traverseBreakpoints.traverseBreakpoints)(theme.breakpoints, ownerState.gridSize, (appendStyle, value) => {
42
+ (0, _traverseBreakpoints.traverseBreakpoints)(theme.breakpoints, ownerState.size, (appendStyle, value) => {
43
43
  let style = {};
44
- if (value === true) {
44
+ if (value === 'grow') {
45
45
  style = {
46
46
  flexBasis: 0,
47
47
  flexGrow: 1,
@@ -61,7 +61,7 @@ const generateGridSizeStyles = ({
61
61
  style = {
62
62
  flexGrow: 0,
63
63
  flexBasis: 'auto',
64
- width: `calc(100% * ${value} / ${getParentColumns(ownerState)}${isNestedContainer(ownerState) ? ` + ${getSelfSpacing('column')}` : ''})`
64
+ width: `calc(100% * ${value} / ${getParentColumns(ownerState)} - (${getParentColumns(ownerState)} - ${value}) * (${getParentSpacing('column')} / ${getParentColumns(ownerState)}))`
65
65
  };
66
66
  }
67
67
  appendStyle(styles, style);
@@ -73,8 +73,9 @@ const generateGridOffsetStyles = ({
73
73
  theme,
74
74
  ownerState
75
75
  }) => {
76
+ const getParentSpacing = createGetParentSpacing(ownerState);
76
77
  const styles = {};
77
- (0, _traverseBreakpoints.traverseBreakpoints)(theme.breakpoints, ownerState.gridOffset, (appendStyle, value) => {
78
+ (0, _traverseBreakpoints.traverseBreakpoints)(theme.breakpoints, ownerState.offset, (appendStyle, value) => {
78
79
  let style = {};
79
80
  if (value === 'auto') {
80
81
  style = {
@@ -83,7 +84,7 @@ const generateGridOffsetStyles = ({
83
84
  }
84
85
  if (typeof value === 'number') {
85
86
  style = {
86
- marginLeft: value === 0 ? '0px' : `calc(100% * ${value} / ${getParentColumns(ownerState)})`
87
+ marginLeft: value === 0 ? '0px' : `calc(100% * ${value} / ${getParentColumns(ownerState)} + ${getParentSpacing('column')} * ${value} / ${getParentColumns(ownerState)})`
87
88
  };
88
89
  }
89
90
  appendStyle(styles, style);
@@ -175,7 +176,6 @@ const generateGridStyles = ({
175
176
  ownerState
176
177
  }) => {
177
178
  const getSelfSpacing = createGetSelfSpacing(ownerState);
178
- const getParentSpacing = createGetParentSpacing(ownerState);
179
179
  return {
180
180
  minWidth: 0,
181
181
  boxSizing: 'border-box',
@@ -185,23 +185,14 @@ const generateGridStyles = ({
185
185
  ...(ownerState.wrap && ownerState.wrap !== 'wrap' && {
186
186
  flexWrap: ownerState.wrap
187
187
  }),
188
- margin: `calc(${getSelfSpacing('row')} / -2) calc(${getSelfSpacing('column')} / -2)`,
189
- ...(ownerState.disableEqualOverflow && {
190
- margin: `calc(${getSelfSpacing('row')} * -1) 0px 0px calc(${getSelfSpacing('column')} * -1)`
191
- })
192
- }),
193
- ...((!ownerState.container || isNestedContainer(ownerState)) && {
194
- padding: `calc(${getParentSpacing('row')} / 2) calc(${getParentSpacing('column')} / 2)`,
195
- ...((ownerState.disableEqualOverflow || ownerState.parentDisableEqualOverflow) && {
196
- padding: `${getParentSpacing('row')} 0px 0px ${getParentSpacing('column')}`
197
- })
188
+ gap: `${getSelfSpacing('row')} ${getSelfSpacing('column')}`
198
189
  })
199
190
  };
200
191
  };
201
192
  exports.generateGridStyles = generateGridStyles;
202
- const generateSizeClassNames = gridSize => {
193
+ const generateSizeClassNames = size => {
203
194
  const classNames = [];
204
- Object.entries(gridSize).forEach(([key, value]) => {
195
+ Object.entries(size).forEach(([key, value]) => {
205
196
  if (value !== false && value !== undefined) {
206
197
  classNames.push(`grid-${key}-${String(value)}`);
207
198
  }