@mui/material 5.2.7 → 5.4.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 (152) hide show
  1. package/Autocomplete/Autocomplete.d.ts +7 -0
  2. package/Autocomplete/Autocomplete.js +22 -10
  3. package/Backdrop/Backdrop.js +3 -1
  4. package/Badge/Badge.js +6 -7
  5. package/Breadcrumbs/BreadcrumbCollapsed.js +1 -3
  6. package/Button/buttonClasses.d.ts +1 -1
  7. package/ButtonBase/TouchRipple.js +1 -2
  8. package/CHANGELOG.md +284 -33
  9. package/FilledInput/FilledInput.js +4 -1
  10. package/FormControlLabel/FormControlLabel.js +14 -4
  11. package/FormControlLabel/formControlLabelClasses.d.ts +2 -0
  12. package/FormControlLabel/formControlLabelClasses.js +1 -1
  13. package/FormGroup/FormGroup.js +14 -3
  14. package/FormGroup/formGroupClasses.d.ts +2 -0
  15. package/FormGroup/formGroupClasses.js +1 -1
  16. package/FormHelperText/FormHelperText.js +7 -9
  17. package/Grid/Grid.js +2 -4
  18. package/Input/Input.js +4 -1
  19. package/InputAdornment/InputAdornment.js +6 -9
  20. package/InputBase/InputBase.js +4 -1
  21. package/InputLabel/InputLabel.js +4 -0
  22. package/ListItem/ListItem.js +3 -1
  23. package/Modal/Modal.js +3 -1
  24. package/OutlinedInput/NotchedOutline.js +14 -16
  25. package/OutlinedInput/OutlinedInput.js +1 -1
  26. package/README.md +5 -4
  27. package/Radio/RadioButtonIcon.js +2 -6
  28. package/Select/Select.d.ts +9 -1
  29. package/Select/Select.js +10 -1
  30. package/Select/SelectInput.d.ts +1 -0
  31. package/Select/SelectInput.js +32 -13
  32. package/Slider/Slider.d.ts +2 -0
  33. package/Slider/Slider.js +126 -53
  34. package/StepLabel/StepLabel.js +3 -1
  35. package/SvgIcon/SvgIcon.js +9 -9
  36. package/SwipeableDrawer/SwipeArea.js +1 -3
  37. package/TextField/TextField.d.ts +1 -0
  38. package/TextField/TextField.js +2 -1
  39. package/Tooltip/Tooltip.js +6 -1
  40. package/index.d.ts +7 -2
  41. package/index.js +6 -3
  42. package/internal/SwitchBase.js +2 -6
  43. package/legacy/Autocomplete/Autocomplete.js +23 -10
  44. package/legacy/Backdrop/Backdrop.js +3 -1
  45. package/legacy/Badge/Badge.js +6 -7
  46. package/legacy/Breadcrumbs/BreadcrumbCollapsed.js +1 -3
  47. package/legacy/ButtonBase/TouchRipple.js +1 -2
  48. package/legacy/FilledInput/FilledInput.js +4 -1
  49. package/legacy/FormControlLabel/FormControlLabel.js +14 -4
  50. package/legacy/FormControlLabel/formControlLabelClasses.js +1 -1
  51. package/legacy/FormGroup/FormGroup.js +14 -3
  52. package/legacy/FormGroup/formGroupClasses.js +1 -1
  53. package/legacy/FormHelperText/FormHelperText.js +7 -9
  54. package/legacy/Grid/Grid.js +2 -4
  55. package/legacy/Input/Input.js +4 -1
  56. package/legacy/InputAdornment/InputAdornment.js +6 -9
  57. package/legacy/InputBase/InputBase.js +4 -1
  58. package/legacy/InputLabel/InputLabel.js +4 -0
  59. package/legacy/ListItem/ListItem.js +3 -1
  60. package/legacy/Modal/Modal.js +3 -1
  61. package/legacy/OutlinedInput/NotchedOutline.js +14 -16
  62. package/legacy/OutlinedInput/OutlinedInput.js +1 -1
  63. package/legacy/Radio/RadioButtonIcon.js +2 -6
  64. package/legacy/Select/Select.js +11 -1
  65. package/legacy/Select/SelectInput.js +36 -16
  66. package/legacy/Slider/Slider.js +127 -54
  67. package/legacy/StepLabel/StepLabel.js +3 -1
  68. package/legacy/SvgIcon/SvgIcon.js +9 -9
  69. package/legacy/SwipeableDrawer/SwipeArea.js +1 -3
  70. package/legacy/TextField/TextField.js +2 -1
  71. package/legacy/Tooltip/Tooltip.js +6 -1
  72. package/legacy/index.js +6 -3
  73. package/legacy/internal/SwitchBase.js +2 -6
  74. package/legacy/useMediaQuery/useMediaQuery.js +86 -31
  75. package/legacy/utils/shouldSpreadAdditionalProps.js +7 -0
  76. package/modern/Autocomplete/Autocomplete.js +21 -9
  77. package/modern/Backdrop/Backdrop.js +3 -1
  78. package/modern/Badge/Badge.js +6 -7
  79. package/modern/Breadcrumbs/BreadcrumbCollapsed.js +1 -3
  80. package/modern/ButtonBase/TouchRipple.js +1 -2
  81. package/modern/FilledInput/FilledInput.js +4 -1
  82. package/modern/FormControlLabel/FormControlLabel.js +14 -4
  83. package/modern/FormControlLabel/formControlLabelClasses.js +1 -1
  84. package/modern/FormGroup/FormGroup.js +14 -3
  85. package/modern/FormGroup/formGroupClasses.js +1 -1
  86. package/modern/FormHelperText/FormHelperText.js +7 -9
  87. package/modern/Grid/Grid.js +2 -4
  88. package/modern/Input/Input.js +4 -1
  89. package/modern/InputAdornment/InputAdornment.js +6 -9
  90. package/modern/InputBase/InputBase.js +4 -1
  91. package/modern/InputLabel/InputLabel.js +4 -0
  92. package/modern/ListItem/ListItem.js +3 -1
  93. package/modern/Modal/Modal.js +3 -1
  94. package/modern/OutlinedInput/NotchedOutline.js +14 -16
  95. package/modern/OutlinedInput/OutlinedInput.js +1 -1
  96. package/modern/Radio/RadioButtonIcon.js +2 -6
  97. package/modern/Select/Select.js +10 -1
  98. package/modern/Select/SelectInput.js +32 -13
  99. package/modern/Slider/Slider.js +126 -53
  100. package/modern/StepLabel/StepLabel.js +3 -1
  101. package/modern/SvgIcon/SvgIcon.js +8 -8
  102. package/modern/SwipeableDrawer/SwipeArea.js +1 -3
  103. package/modern/TextField/TextField.js +2 -1
  104. package/modern/Tooltip/Tooltip.js +6 -1
  105. package/modern/index.js +6 -3
  106. package/modern/internal/SwitchBase.js +2 -6
  107. package/modern/useMediaQuery/useMediaQuery.js +68 -26
  108. package/modern/utils/shouldSpreadAdditionalProps.js +7 -0
  109. package/node/Autocomplete/Autocomplete.js +22 -10
  110. package/node/Backdrop/Backdrop.js +3 -1
  111. package/node/Badge/Badge.js +8 -8
  112. package/node/Breadcrumbs/BreadcrumbCollapsed.js +1 -3
  113. package/node/ButtonBase/TouchRipple.js +1 -2
  114. package/node/FilledInput/FilledInput.js +4 -1
  115. package/node/FormControlLabel/FormControlLabel.js +15 -4
  116. package/node/FormControlLabel/formControlLabelClasses.js +1 -1
  117. package/node/FormGroup/FormGroup.js +15 -3
  118. package/node/FormGroup/formGroupClasses.js +1 -1
  119. package/node/FormHelperText/FormHelperText.js +6 -9
  120. package/node/Grid/Grid.js +2 -4
  121. package/node/Input/Input.js +4 -1
  122. package/node/InputAdornment/InputAdornment.js +5 -9
  123. package/node/InputBase/InputBase.js +4 -1
  124. package/node/InputLabel/InputLabel.js +4 -0
  125. package/node/ListItem/ListItem.js +3 -1
  126. package/node/Modal/Modal.js +3 -1
  127. package/node/OutlinedInput/NotchedOutline.js +12 -16
  128. package/node/OutlinedInput/OutlinedInput.js +1 -1
  129. package/node/Radio/RadioButtonIcon.js +2 -6
  130. package/node/Select/Select.js +10 -1
  131. package/node/Select/SelectInput.js +31 -13
  132. package/node/Slider/Slider.js +112 -45
  133. package/node/StepLabel/StepLabel.js +3 -1
  134. package/node/SvgIcon/SvgIcon.js +9 -9
  135. package/node/SwipeableDrawer/SwipeArea.js +1 -3
  136. package/node/TextField/TextField.js +2 -1
  137. package/node/Tooltip/Tooltip.js +6 -1
  138. package/node/index.js +41 -16
  139. package/node/internal/SwitchBase.js +2 -6
  140. package/node/useMediaQuery/useMediaQuery.js +68 -26
  141. package/node/utils/shouldSpreadAdditionalProps.js +15 -0
  142. package/package.json +7 -7
  143. package/styles/ThemeProvider.d.ts +1 -1
  144. package/styles/components.d.ts +452 -113
  145. package/styles/createTheme.d.ts +12 -6
  146. package/styles/overrides.d.ts +16 -4
  147. package/styles/useThemeProps.d.ts +2 -1
  148. package/umd/material-ui.development.js +2988 -4926
  149. package/umd/material-ui.production.min.js +21 -21
  150. package/useMediaQuery/useMediaQuery.d.ts +4 -0
  151. package/useMediaQuery/useMediaQuery.js +68 -26
  152. package/utils/shouldSpreadAdditionalProps.js +7 -0
@@ -3,6 +3,8 @@ export interface FormGroupClasses {
3
3
  root: string;
4
4
  /** Styles applied to the root element if `row={true}`. */
5
5
  row: string;
6
+ /** State class applied to the root element if `error={true}`. */
7
+ error: string;
6
8
  }
7
9
  export declare type FormGroupClassKey = keyof FormGroupClasses;
8
10
  export declare function getFormGroupUtilityClass(slot: string): string;
@@ -2,5 +2,5 @@ import { generateUtilityClass, generateUtilityClasses } from '@mui/base';
2
2
  export function getFormGroupUtilityClass(slot) {
3
3
  return generateUtilityClass('MuiFormGroup', slot);
4
4
  }
5
- const formGroupClasses = generateUtilityClasses('MuiFormGroup', ['root', 'row']);
5
+ const formGroupClasses = generateUtilityClasses('MuiFormGroup', ['root', 'row', 'error']);
6
6
  export default formGroupClasses;
@@ -1,5 +1,8 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
+
4
+ var _span;
5
+
3
6
  const _excluded = ["children", "className", "component", "disabled", "error", "filled", "focused", "margin", "required", "variant"];
4
7
  import * as React from 'react';
5
8
  import PropTypes from 'prop-types';
@@ -101,16 +104,11 @@ const FormHelperText = /*#__PURE__*/React.forwardRef(function FormHelperText(inP
101
104
  className: clsx(classes.root, className),
102
105
  ref: ref
103
106
  }, other, {
104
- children: children === ' ' ?
105
- /*#__PURE__*/
106
- // notranslate needed while Google Translate will not fix zero-width space issue
107
- // eslint-disable-next-line react/no-danger
108
- _jsx("span", {
107
+ children: children === ' ' ? // notranslate needed while Google Translate will not fix zero-width space issue
108
+ _span || (_span = /*#__PURE__*/_jsx("span", {
109
109
  className: "notranslate",
110
- dangerouslySetInnerHTML: {
111
- __html: '​'
112
- }
113
- }) : children
110
+ children: "\u200B"
111
+ })) : children
114
112
  }));
115
113
  });
116
114
  process.env.NODE_ENV !== "production" ? FormHelperText.propTypes
package/Grid/Grid.js CHANGED
@@ -260,10 +260,8 @@ const GridRoot = styled('div', {
260
260
 
261
261
  }, ownerState.zeroMinWidth && {
262
262
  minWidth: 0
263
- }, ownerState.wrap === 'nowrap' && {
264
- flexWrap: 'nowrap'
265
- }, ownerState.wrap === 'reverse' && {
266
- flexWrap: 'wrap-reverse'
263
+ }, ownerState.wrap !== 'wrap' && {
264
+ flexWrap: ownerState.wrap
267
265
  }), generateDirection, generateRowGap, generateColumnGap, generateGrid);
268
266
 
269
267
  const useUtilityClasses = ownerState => {
package/Input/Input.js CHANGED
@@ -192,7 +192,10 @@ process.env.NODE_ENV !== "production" ? Input.propTypes
192
192
  * The props used for each slot inside the Input.
193
193
  * @default {}
194
194
  */
195
- componentsProps: PropTypes.object,
195
+ componentsProps: PropTypes.shape({
196
+ input: PropTypes.object,
197
+ root: PropTypes.object
198
+ }),
196
199
 
197
200
  /**
198
201
  * The default value. Use when the component is not controlled.
@@ -1,5 +1,8 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
+
4
+ var _span;
5
+
3
6
  const _excluded = ["children", "className", "component", "disablePointerEvents", "disableTypography", "position", "variant"];
4
7
  import * as React from 'react';
5
8
  import PropTypes from 'prop-types';
@@ -121,17 +124,11 @@ const InputAdornment = /*#__PURE__*/React.forwardRef(function InputAdornment(inP
121
124
  children: children
122
125
  }) : /*#__PURE__*/_jsxs(React.Fragment, {
123
126
  children: [position === 'start' ?
124
- /*#__PURE__*/
125
-
126
127
  /* notranslate needed while Google Translate will not fix zero-width space issue */
127
-
128
- /* eslint-disable-next-line react/no-danger */
129
- _jsx("span", {
128
+ _span || (_span = /*#__PURE__*/_jsx("span", {
130
129
  className: "notranslate",
131
- dangerouslySetInnerHTML: {
132
- __html: '​'
133
- }
134
- }) : null, children]
130
+ children: "\u200B"
131
+ })) : null, children]
135
132
  })
136
133
  }))
137
134
  });
@@ -552,7 +552,10 @@ process.env.NODE_ENV !== "production" ? InputBase.propTypes
552
552
  * The props used for each slot inside the Input.
553
553
  * @default {}
554
554
  */
555
- componentsProps: PropTypes.object,
555
+ componentsProps: PropTypes.shape({
556
+ input: PropTypes.object,
557
+ root: PropTypes.object
558
+ }),
556
559
 
557
560
  /**
558
561
  * The default value. Use when the component is not controlled.
@@ -82,6 +82,8 @@ const InputLabelRoot = styled(FormLabel, {
82
82
  }, ownerState.size === 'small' && {
83
83
  transform: 'translate(12px, 13px) scale(1)'
84
84
  }, ownerState.shrink && _extends({
85
+ userSelect: 'none',
86
+ pointerEvents: 'auto',
85
87
  transform: 'translate(12px, 7px) scale(0.75)',
86
88
  maxWidth: 'calc(133% - 24px)'
87
89
  }, ownerState.size === 'small' && {
@@ -95,6 +97,8 @@ const InputLabelRoot = styled(FormLabel, {
95
97
  }, ownerState.size === 'small' && {
96
98
  transform: 'translate(14px, 9px) scale(1)'
97
99
  }, ownerState.shrink && {
100
+ userSelect: 'none',
101
+ pointerEvents: 'auto',
98
102
  maxWidth: 'calc(133% - 24px)',
99
103
  transform: 'translate(14px, -9px) scale(0.75)'
100
104
  })));
@@ -346,7 +346,9 @@ process.env.NODE_ENV !== "production" ? ListItem.propTypes
346
346
  * The props used for each slot inside the Input.
347
347
  * @default {}
348
348
  */
349
- componentsProps: PropTypes.object,
349
+ componentsProps: PropTypes.shape({
350
+ root: PropTypes.object
351
+ }),
350
352
 
351
353
  /**
352
354
  * The container component used when a `ListItemSecondaryAction` is the last child.
package/Modal/Modal.js CHANGED
@@ -179,7 +179,9 @@ process.env.NODE_ENV !== "production" ? Modal.propTypes
179
179
  * The props used for each slot inside the Modal.
180
180
  * @default {}
181
181
  */
182
- componentsProps: PropTypes.object,
182
+ componentsProps: PropTypes.shape({
183
+ root: PropTypes.object
184
+ }),
183
185
 
184
186
  /**
185
187
  * An HTML element or function that returns one.
@@ -1,5 +1,8 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
+
4
+ var _span;
5
+
3
6
  const _excluded = ["children", "classes", "className", "label", "notched"];
4
7
  import * as React from 'react';
5
8
  import PropTypes from 'prop-types';
@@ -21,14 +24,12 @@ const NotchedOutlineRoot = styled('fieldset')({
21
24
  overflow: 'hidden',
22
25
  minWidth: '0%'
23
26
  });
24
- const NotchedOutlineLegend = styled('legend', {
25
- skipSx: true
26
- })(({
27
+ const NotchedOutlineLegend = styled('legend')(({
27
28
  ownerState,
28
29
  theme
29
30
  }) => _extends({
30
31
  float: 'unset'
31
- }, ownerState.label === undefined && {
32
+ }, !ownerState.withLabel && {
32
33
  padding: 0,
33
34
  lineHeight: '11px',
34
35
  // sync with `height` in `legend` styles
@@ -36,7 +37,7 @@ const NotchedOutlineLegend = styled('legend', {
36
37
  duration: 150,
37
38
  easing: theme.transitions.easing.easeOut
38
39
  })
39
- }, ownerState.label !== undefined && _extends({
40
+ }, ownerState.withLabel && _extends({
40
41
  display: 'block',
41
42
  // Fix conflict with normalize.css and sanitize.css
42
43
  width: 'auto',
@@ -77,9 +78,11 @@ export default function NotchedOutline(props) {
77
78
  } = props,
78
79
  other = _objectWithoutPropertiesLoose(props, _excluded);
79
80
 
81
+ const withLabel = label != null && label !== '';
82
+
80
83
  const ownerState = _extends({}, props, {
81
84
  notched,
82
- label
85
+ withLabel
83
86
  });
84
87
 
85
88
  return /*#__PURE__*/_jsx(NotchedOutlineRoot, _extends({
@@ -89,18 +92,13 @@ export default function NotchedOutline(props) {
89
92
  }, other, {
90
93
  children: /*#__PURE__*/_jsx(NotchedOutlineLegend, {
91
94
  ownerState: ownerState,
92
- children: label ? /*#__PURE__*/_jsx("span", {
95
+ children: withLabel ? /*#__PURE__*/_jsx("span", {
93
96
  children: label
94
- }) :
95
- /*#__PURE__*/
96
- // notranslate needed while Google Translate will not fix zero-width space issue
97
- // eslint-disable-next-line react/no-danger
98
- _jsx("span", {
97
+ }) : // notranslate needed while Google Translate will not fix zero-width space issue
98
+ _span || (_span = /*#__PURE__*/_jsx("span", {
99
99
  className: "notranslate",
100
- dangerouslySetInnerHTML: {
101
- __html: '​'
102
- }
103
- })
100
+ children: "\u200B"
101
+ }))
104
102
  })
105
103
  }));
106
104
  }
@@ -136,7 +136,7 @@ const OutlinedInput = /*#__PURE__*/React.forwardRef(function OutlinedInput(inPro
136
136
  }, components),
137
137
  renderSuffix: state => /*#__PURE__*/_jsx(NotchedOutlineRoot, {
138
138
  className: classes.notchedOutline,
139
- label: label && fcs.required ? _React$Fragment || (_React$Fragment = /*#__PURE__*/_jsxs(React.Fragment, {
139
+ label: label != null && label !== '' && fcs.required ? _React$Fragment || (_React$Fragment = /*#__PURE__*/_jsxs(React.Fragment, {
140
140
  children: [label, "\xA0", '*']
141
141
  })) : label,
142
142
  notched: typeof notched !== 'undefined' ? notched : Boolean(state.startAdornment || state.filled || state.focused)
package/README.md CHANGED
@@ -1,5 +1,6 @@
1
+ <!-- markdownlint-disable-next-line -->
1
2
  <p align="center">
2
- <a href="https://mui.com/" rel="noopener" target="_blank"><img width="150" src="https://mui.com/static/logo.svg" alt="MUI logo"></a></p>
3
+ <a href="https://mui.com/" rel="noopener" target="_blank"><img width="150" src="https://mui.com/static/logo.svg" alt="MUI logo"></a>
3
4
  </p>
4
5
 
5
6
  <h1 align="center">MUI</h1>
@@ -14,7 +15,7 @@ Quickly build beautiful [React](https://reactjs.org/) apps. MUI is a simple and
14
15
  [![npm downloads](https://img.shields.io/npm/dm/@mui/material.svg)](https://www.npmjs.com/package/@mui/material)
15
16
  [![CircleCI](https://circleci.com/gh/mui-org/material-ui/tree/master.svg?style=shield)](https://app.circleci.com/pipelines/github/mui-org/material-ui?branch=master)
16
17
  [![Coverage Status](https://img.shields.io/codecov/c/github/mui-org/material-ui/master.svg)](https://codecov.io/gh/mui-org/material-ui/branch/master)
17
- [![Follow on Twitter](https://img.shields.io/twitter/follow/MaterialUI.svg?label=follow+Material-UI)](https://twitter.com/MaterialUI)
18
+ [![Follow on Twitter](https://img.shields.io/twitter/follow/MUI_hq.svg?label=follow+MUI)](https://twitter.com/MUI_hq)
18
19
  [![Renovate status](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://github.com/mui-org/material-ui/issues/27062)
19
20
  [![Average time to resolve an issue](https://isitmaintained.com/badge/resolution/mui-org/material-ui.svg)](https://isitmaintained.com/project/mui-org/material-ui 'Average time to resolve an issue')
20
21
  [![Crowdin](https://badges.crowdin.net/material-ui-docs/localized.svg)](https://translate.mui.com/project/material-ui-docs)
@@ -53,7 +54,7 @@ Please note that `@next` will only point to pre-releases; to get the latest stab
53
54
 
54
55
  <p align="center">
55
56
  <a href="https://octopus.com/?utm_source=MUI&utm_medium=referral&utm_content=readme" rel="noopener sponsored" target="_blank"><img height="128" width="128" src="https://avatars3.githubusercontent.com/u/1287123?s=256" alt="octopus" title="Repeatable, reliable deployments" loading="lazy" /></a>
56
- <a href="https://www.doit-intl.com/?utm_source=MUI&utm_medium=referral&utm_content=readme" rel="noopener sponsored" target="_blank"><img height="128" width="128" src="https://avatars3.githubusercontent.com/u/8424863?s=256" alt="doit-intl" title="Management Platform for Google Cloud and AWS" loading="lazy" /></a>
57
+ <a href="https://www.doit-intl.com/flexsave/?utm_source=MUI&utm_medium=referral&utm_content=readme" rel="noopener sponsored" target="_blank"><img height="128" width="128" src="https://avatars3.githubusercontent.com/u/8424863?s=256" alt="doit-intl" title="Management Platform for Google Cloud and AWS" loading="lazy" /></a>
57
58
  <a href="https://www.aptugo.com/?utm_source=MUI&utm_medium=referral&utm_content=readme" rel="noopener sponsored" target="_blank"><img height="128" width="128" src="https://www.aptugo.com/img/favicon.png" alt="aptugo" title="Augmented Software Development Platform" loading="lazy" /></a>
58
59
  </p>
59
60
 
@@ -75,7 +76,7 @@ via [OpenCollective](https://opencollective.com/mui) or via [Patreon](https://ww
75
76
 
76
77
  Gold Sponsors are those who have pledged \$500/month or more to MUI.
77
78
 
78
- ### There is more!
79
+ ### There is more
79
80
 
80
81
  See the full list of [our backers](https://mui.com/discover-more/backers/).
81
82
 
@@ -10,15 +10,11 @@ const RadioButtonIconRoot = styled('span')({
10
10
  position: 'relative',
11
11
  display: 'flex'
12
12
  });
13
- const RadioButtonIconBackground = styled(RadioButtonUncheckedIcon, {
14
- skipSx: true
15
- })({
13
+ const RadioButtonIconBackground = styled(RadioButtonUncheckedIcon)({
16
14
  // Scale applied to prevent dot misalignment in Safari
17
15
  transform: 'scale(1)'
18
16
  });
19
- const RadioButtonIconDot = styled(RadioButtonCheckedIcon, {
20
- skipSx: true
21
- })(({
17
+ const RadioButtonIconDot = styled(RadioButtonCheckedIcon)(({
22
18
  theme,
23
19
  ownerState
24
20
  }) => _extends({
@@ -29,6 +29,12 @@ export interface SelectProps<T = unknown>
29
29
  * @default {}
30
30
  */
31
31
  classes?: Partial<SelectClasses>;
32
+ /**
33
+ * If `true`, the component is initially open. Use when the component open state is not controlled (i.e. the `open` prop is not defined).
34
+ * You can only use it when the `native` prop is `false` (default).
35
+ * @default false
36
+ */
37
+ defaultOpen?: boolean;
32
38
  /**
33
39
  * The default value. Use when the component is not controlled.
34
40
  */
@@ -155,6 +161,8 @@ export interface SelectProps<T = unknown>
155
161
  * - [Select API](https://mui.com/api/select/)
156
162
  * - inherits [OutlinedInput API](https://mui.com/api/outlined-input/)
157
163
  */
158
- declare const Select: (<T>(props: SelectProps<T>) => JSX.Element) & { muiName: string };
164
+ declare const Select: (<T>(props: SelectProps<T>) => JSX.Element) & {
165
+ muiName: string;
166
+ };
159
167
 
160
168
  export default Select;
package/Select/Select.js CHANGED
@@ -3,7 +3,7 @@ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWith
3
3
 
4
4
  var _Input, _FilledInput;
5
5
 
6
- const _excluded = ["autoWidth", "children", "classes", "className", "displayEmpty", "IconComponent", "id", "input", "inputProps", "label", "labelId", "MenuProps", "multiple", "native", "onClose", "onOpen", "open", "renderValue", "SelectDisplayProps", "variant"];
6
+ const _excluded = ["autoWidth", "children", "classes", "className", "defaultOpen", "displayEmpty", "IconComponent", "id", "input", "inputProps", "label", "labelId", "MenuProps", "multiple", "native", "onClose", "onOpen", "open", "renderValue", "SelectDisplayProps", "variant"];
7
7
  import * as React from 'react';
8
8
  import PropTypes from 'prop-types';
9
9
  import clsx from 'clsx';
@@ -38,6 +38,7 @@ const Select = /*#__PURE__*/React.forwardRef(function Select(inProps, ref) {
38
38
  children,
39
39
  classes: classesProp = {},
40
40
  className,
41
+ defaultOpen = false,
41
42
  displayEmpty = false,
42
43
  IconComponent = ArrowDropDownIcon,
43
44
  id,
@@ -94,6 +95,7 @@ const Select = /*#__PURE__*/React.forwardRef(function Select(inProps, ref) {
94
95
  id
95
96
  } : {
96
97
  autoWidth,
98
+ defaultOpen,
97
99
  displayEmpty,
98
100
  labelId,
99
101
  MenuProps,
@@ -148,6 +150,13 @@ process.env.NODE_ENV !== "production" ? Select.propTypes
148
150
  */
149
151
  className: PropTypes.string,
150
152
 
153
+ /**
154
+ * If `true`, the component is initially open. Use when the component open state is not controlled (i.e. the `open` prop is not defined).
155
+ * You can only use it when the `native` prop is `false` (default).
156
+ * @default false
157
+ */
158
+ defaultOpen: PropTypes.bool,
159
+
151
160
  /**
152
161
  * The default value. Use when the component is not controlled.
153
162
  */
@@ -15,6 +15,7 @@ export type SelectChangeEvent<T = string> =
15
15
  export interface SelectInputProps<T = unknown> {
16
16
  autoFocus?: boolean;
17
17
  autoWidth: boolean;
18
+ defaultOpen?: boolean;
18
19
  disabled?: boolean;
19
20
  IconComponent?: React.ElementType;
20
21
  inputRef?: (
@@ -1,7 +1,10 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
3
  import { formatMuiErrorMessage as _formatMuiErrorMessage } from "@mui/utils";
4
- const _excluded = ["aria-describedby", "aria-label", "autoFocus", "autoWidth", "children", "className", "defaultValue", "disabled", "displayEmpty", "IconComponent", "inputRef", "labelId", "MenuProps", "multiple", "name", "onBlur", "onChange", "onClose", "onFocus", "onOpen", "open", "readOnly", "renderValue", "SelectDisplayProps", "tabIndex", "type", "value", "variant"];
4
+
5
+ var _span;
6
+
7
+ const _excluded = ["aria-describedby", "aria-label", "autoFocus", "autoWidth", "children", "className", "defaultOpen", "defaultValue", "disabled", "displayEmpty", "IconComponent", "inputRef", "labelId", "MenuProps", "multiple", "name", "onBlur", "onChange", "onClose", "onFocus", "onOpen", "open", "readOnly", "renderValue", "SelectDisplayProps", "tabIndex", "type", "value", "variant"];
5
8
  import * as React from 'react';
6
9
  import { isFragment } from 'react-is';
7
10
  import PropTypes from 'prop-types';
@@ -113,6 +116,7 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
113
116
  autoWidth,
114
117
  children,
115
118
  className,
119
+ defaultOpen,
116
120
  defaultValue,
117
121
  disabled,
118
122
  displayEmpty,
@@ -142,6 +146,11 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
142
146
  default: defaultValue,
143
147
  name: 'Select'
144
148
  });
149
+ const [openState, setOpenState] = useControlled({
150
+ controlled: openProp,
151
+ default: defaultOpen,
152
+ name: 'Select'
153
+ });
145
154
  const inputRef = React.useRef(null);
146
155
  const displayRef = React.useRef(null);
147
156
  const [displayNode, setDisplayNode] = React.useState(null);
@@ -149,7 +158,6 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
149
158
  current: isOpenControlled
150
159
  } = React.useRef(openProp != null);
151
160
  const [menuMinWidthState, setMenuMinWidthState] = React.useState();
152
- const [openState, setOpenState] = React.useState(false);
153
161
  const handleRef = useForkRef(ref, inputRefProp);
154
162
  const handleDisplayRef = React.useCallback(node => {
155
163
  displayRef.current = node;
@@ -164,7 +172,17 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
164
172
  },
165
173
  node: inputRef.current,
166
174
  value
167
- }), [value]);
175
+ }), [value]); // Resize menu on `defaultOpen` automatic toggle.
176
+
177
+ React.useEffect(() => {
178
+ if (defaultOpen && openState && displayNode && !isOpenControlled) {
179
+ setMenuMinWidthState(autoWidth ? null : displayNode.clientWidth);
180
+ displayRef.current.focus();
181
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
182
+
183
+ }, [displayNode, autoWidth]); // `isOpenControlled` is ignored because the component should never switch between controlled and uncontrolled modes.
184
+ // `defaultOpen` and `openState` are ignored to avoid unnecessary callbacks.
185
+
168
186
  React.useEffect(() => {
169
187
  if (autoFocus) {
170
188
  displayRef.current.focus();
@@ -300,7 +318,7 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
300
318
  }
301
319
  };
302
320
 
303
- const open = displayNode !== null && (isOpenControlled ? openProp : openState);
321
+ const open = displayNode !== null && openState;
304
322
 
305
323
  const handleBlur = event => {
306
324
  // if open event.stopImmediatePropagation
@@ -467,16 +485,11 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
467
485
  className: clsx(classes.select, className, SelectDisplayProps.className) // The id is required for proper a11y
468
486
  ,
469
487
  id: buttonId,
470
- children: isEmpty(display) ?
471
- /*#__PURE__*/
472
- // notranslate needed while Google Translate will not fix zero-width space issue
473
- // eslint-disable-next-line react/no-danger
474
- _jsx("span", {
488
+ children: isEmpty(display) ? // notranslate needed while Google Translate will not fix zero-width space issue
489
+ _span || (_span = /*#__PURE__*/_jsx("span", {
475
490
  className: "notranslate",
476
- dangerouslySetInnerHTML: {
477
- __html: '&#8203;'
478
- }
479
- }) : display
491
+ children: "\u200B"
492
+ })) : display
480
493
  })), /*#__PURE__*/_jsx(SelectNativeInput, _extends({
481
494
  value: Array.isArray(value) ? value.join(',') : value,
482
495
  name: name,
@@ -559,6 +572,12 @@ process.env.NODE_ENV !== "production" ? SelectInput.propTypes = {
559
572
  */
560
573
  className: PropTypes.string,
561
574
 
575
+ /**
576
+ * If `true`, the component is toggled on mount. Use when the component open state is not controlled.
577
+ * You can only use it when the `native` prop is `false` (default).
578
+ */
579
+ defaultOpen: PropTypes.bool,
580
+
562
581
  /**
563
582
  * The default value. Use when the component is not controlled.
564
583
  */
@@ -60,6 +60,7 @@ type SliderRailProps = NonNullable<SliderTypeMap['props']['componentsProps']>['r
60
60
  type SliderTrackProps = NonNullable<SliderTypeMap['props']['componentsProps']>['track'];
61
61
  type SliderThumbProps = NonNullable<SliderTypeMap['props']['componentsProps']>['thumb'];
62
62
  type SliderValueLabelProps = NonNullable<SliderTypeMap['props']['componentsProps']>['valueLabel'];
63
+ type SliderInputProps = NonNullable<SliderTypeMap['props']['componentsProps']>['input'];
63
64
 
64
65
  export const SliderRoot: React.FC<SliderRootProps>;
65
66
  export const SliderMark: React.FC<SliderMarkProps>;
@@ -68,6 +69,7 @@ export const SliderRail: React.FC<SliderRailProps>;
68
69
  export const SliderTrack: React.FC<SliderTrackProps>;
69
70
  export const SliderThumb: React.FC<SliderThumbProps>;
70
71
  export const SliderValueLabel: React.FC<SliderValueLabelProps>;
72
+ export const SliderInput: React.FC<SliderInputProps>;
71
73
 
72
74
  /**
73
75
  *