@mui/material 7.3.6 → 7.3.8

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 (71) hide show
  1. package/Accordion/Accordion.d.ts +2 -2
  2. package/Accordion/Accordion.js +3 -13
  3. package/AppBar/AppBar.js +3 -2
  4. package/Autocomplete/Autocomplete.d.ts +1 -1
  5. package/Autocomplete/Autocomplete.js +1 -1
  6. package/Backdrop/Backdrop.js +0 -1
  7. package/Badge/Badge.js +23 -104
  8. package/ButtonGroup/ButtonGroup.js +8 -11
  9. package/CHANGELOG.md +119 -1
  10. package/CardActionArea/CardActionArea.js +0 -1
  11. package/Chip/Chip.js +1 -3
  12. package/Collapse/Collapse.js +3 -3
  13. package/Dialog/Dialog.js +4 -3
  14. package/Dialog/dialogClasses.d.ts +2 -0
  15. package/Dialog/dialogClasses.js +1 -1
  16. package/Drawer/Drawer.js +1 -1
  17. package/GridLegacy/GridLegacy.js +1 -1
  18. package/Modal/ModalManager.js +1 -1
  19. package/Popover/Popover.js +2 -2
  20. package/Popper/BasePopper.js +2 -2
  21. package/README.md +2 -2
  22. package/Select/SelectInput.js +19 -4
  23. package/Slide/Slide.js +1 -1
  24. package/Tabs/Tabs.d.ts +3 -2
  25. package/Tabs/Tabs.js +2 -2
  26. package/Unstable_TrapFocus/FocusTrap.js +1 -1
  27. package/esm/Accordion/Accordion.d.ts +2 -2
  28. package/esm/Accordion/Accordion.js +3 -13
  29. package/esm/AppBar/AppBar.js +3 -2
  30. package/esm/Autocomplete/Autocomplete.d.ts +1 -1
  31. package/esm/Autocomplete/Autocomplete.js +1 -1
  32. package/esm/Backdrop/Backdrop.js +0 -1
  33. package/esm/Badge/Badge.js +23 -104
  34. package/esm/ButtonGroup/ButtonGroup.js +8 -11
  35. package/esm/CardActionArea/CardActionArea.js +0 -1
  36. package/esm/Chip/Chip.js +1 -3
  37. package/esm/Collapse/Collapse.js +3 -3
  38. package/esm/Dialog/Dialog.js +4 -3
  39. package/esm/Dialog/dialogClasses.d.ts +2 -0
  40. package/esm/Dialog/dialogClasses.js +1 -1
  41. package/esm/Drawer/Drawer.js +1 -1
  42. package/esm/GridLegacy/GridLegacy.js +1 -1
  43. package/esm/Modal/ModalManager.js +1 -1
  44. package/esm/Popover/Popover.js +2 -2
  45. package/esm/Popper/BasePopper.js +2 -2
  46. package/esm/Select/SelectInput.js +19 -4
  47. package/esm/Slide/Slide.js +1 -1
  48. package/esm/Tabs/Tabs.d.ts +3 -2
  49. package/esm/Tabs/Tabs.js +2 -2
  50. package/esm/Unstable_TrapFocus/FocusTrap.js +1 -1
  51. package/esm/index.js +1 -1
  52. package/esm/internal/SwitchBase.js +1 -2
  53. package/esm/locale/arEG.js +1 -1
  54. package/esm/locale/arSA.js +1 -1
  55. package/esm/locale/arSD.js +1 -1
  56. package/esm/locale/kuCKB.js +1 -1
  57. package/esm/locale/neNP.js +1 -1
  58. package/esm/useAutocomplete/useAutocomplete.d.ts +1 -1
  59. package/esm/useAutocomplete/useAutocomplete.js +54 -20
  60. package/esm/version/index.js +2 -2
  61. package/index.js +1 -1
  62. package/internal/SwitchBase.js +1 -2
  63. package/locale/arEG.js +1 -1
  64. package/locale/arSA.js +1 -1
  65. package/locale/arSD.js +1 -1
  66. package/locale/kuCKB.js +1 -1
  67. package/locale/neNP.js +1 -1
  68. package/package.json +9 -9
  69. package/useAutocomplete/useAutocomplete.d.ts +1 -1
  70. package/useAutocomplete/useAutocomplete.js +54 -20
  71. package/version/index.js +2 -2
@@ -75,12 +75,12 @@ export interface AccordionOwnProps {
75
75
  */
76
76
  disabled?: boolean;
77
77
  /**
78
- * If `true`, it removes the margin between two expanded accordion items and the increase of height.
78
+ * If `true`, it removes the margin between two expanded accordion items and prevents the increased height when expanded.
79
79
  * @default false
80
80
  */
81
81
  disableGutters?: boolean;
82
82
  /**
83
- * If `true`, expands the accordion, otherwise collapse it.
83
+ * If `true`, expands the accordion, otherwise collapses it.
84
84
  * Setting this prop enables control over the accordion.
85
85
  */
86
86
  expanded?: boolean;
@@ -149,7 +149,6 @@ const Accordion = /*#__PURE__*/React.forwardRef(function Accordion(inProps, ref)
149
149
  disableGutters = false,
150
150
  expanded: expandedProp,
151
151
  onChange,
152
- square = false,
153
152
  slots = {},
154
153
  slotProps = {},
155
154
  TransitionComponent: TransitionComponentProp,
@@ -177,7 +176,6 @@ const Accordion = /*#__PURE__*/React.forwardRef(function Accordion(inProps, ref)
177
176
  }), [expanded, disabled, disableGutters, handleChange]);
178
177
  const ownerState = {
179
178
  ...props,
180
- square,
181
179
  disabled,
182
180
  disableGutters,
183
181
  expanded
@@ -204,10 +202,7 @@ const Accordion = /*#__PURE__*/React.forwardRef(function Accordion(inProps, ref)
204
202
  className: (0, _clsx.default)(classes.root, className),
205
203
  shouldForwardComponentProp: true,
206
204
  ownerState,
207
- ref,
208
- additionalProps: {
209
- square
210
- }
205
+ ref
211
206
  });
212
207
  const [AccordionHeadingSlot, accordionProps] = (0, _useSlot.default)('heading', {
213
208
  elementType: AccordionHeading,
@@ -287,12 +282,12 @@ process.env.NODE_ENV !== "production" ? Accordion.propTypes /* remove-proptypes
287
282
  */
288
283
  disabled: _propTypes.default.bool,
289
284
  /**
290
- * If `true`, it removes the margin between two expanded accordion items and the increase of height.
285
+ * If `true`, it removes the margin between two expanded accordion items and prevents the increased height when expanded.
291
286
  * @default false
292
287
  */
293
288
  disableGutters: _propTypes.default.bool,
294
289
  /**
295
- * If `true`, expands the accordion, otherwise collapse it.
290
+ * If `true`, expands the accordion, otherwise collapses it.
296
291
  * Setting this prop enables control over the accordion.
297
292
  */
298
293
  expanded: _propTypes.default.bool,
@@ -323,11 +318,6 @@ process.env.NODE_ENV !== "production" ? Accordion.propTypes /* remove-proptypes
323
318
  root: _propTypes.default.elementType,
324
319
  transition: _propTypes.default.elementType
325
320
  }),
326
- /**
327
- * If `true`, rounded corners are disabled.
328
- * @default false
329
- */
330
- square: _propTypes.default.bool,
331
321
  /**
332
322
  * The system prop that allows defining system overrides as well as additional CSS styles.
333
323
  */
package/AppBar/AppBar.js CHANGED
@@ -33,7 +33,7 @@ const useUtilityClasses = ownerState => {
33
33
 
34
34
  // var2 is the fallback.
35
35
  // Ex. var1: 'var(--a)', var2: 'var(--b)'; return: 'var(--a, var(--b))'
36
- const joinVars = (var1, var2) => var1 ? `${var1?.replace(')', '')}, ${var2})` : var2;
36
+ const joinVars = (var1, var2) => var1 ? `${var1.replace(')', '')}, ${var2})` : var2;
37
37
  const AppBarRoot = (0, _zeroStyled.styled)(_Paper.default, {
38
38
  name: 'MuiAppBar',
39
39
  slot: 'Root',
@@ -108,7 +108,8 @@ const AppBarRoot = (0, _zeroStyled.styled)(_Paper.default, {
108
108
  color: 'inherit'
109
109
  },
110
110
  style: {
111
- '--AppBar-color': 'inherit'
111
+ '--AppBar-color': 'inherit',
112
+ color: 'var(--AppBar-color)'
112
113
  }
113
114
  }, {
114
115
  props: {
@@ -283,7 +283,7 @@ export interface AutocompleteProps<Value, Multiple extends boolean | undefined,
283
283
  * @returns {ReactNode}
284
284
  */
285
285
  renderOption?: (props: React.HTMLAttributes<HTMLLIElement> & {
286
- key: any;
286
+ key: React.Key;
287
287
  }, option: Value, state: AutocompleteRenderOptionState, ownerState: AutocompleteOwnerState<Value, Multiple, DisableClearable, FreeSolo, ChipComponent>) => React.ReactNode;
288
288
  /**
289
289
  * Render the selected value when doing multiple selections.
@@ -669,7 +669,7 @@ const Autocomplete = /*#__PURE__*/React.forwardRef(function Autocomplete(inProps
669
669
  children: renderInput({
670
670
  id,
671
671
  disabled,
672
- fullWidth: true,
672
+ fullWidth: props.fullWidth ?? true,
673
673
  size: size === 'small' ? 'small' : undefined,
674
674
  InputLabelProps: getInputLabelProps(),
675
675
  InputProps: {
@@ -114,7 +114,6 @@ const Backdrop = /*#__PURE__*/React.forwardRef(function Backdrop(inProps, ref) {
114
114
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(RootSlot, {
115
115
  "aria-hidden": true,
116
116
  ...rootProps,
117
- classes: classes,
118
117
  ref: ref,
119
118
  children: children
120
119
  })
package/Badge/Badge.js CHANGED
@@ -100,110 +100,6 @@ const BadgeBadge = (0, _zeroStyled.styled)('span', {
100
100
  minWidth: RADIUS_DOT * 2,
101
101
  padding: 0
102
102
  }
103
- }, {
104
- props: ({
105
- ownerState
106
- }) => ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'rectangular',
107
- style: {
108
- top: 0,
109
- right: 0,
110
- transform: 'scale(1) translate(50%, -50%)',
111
- transformOrigin: '100% 0%',
112
- [`&.${_badgeClasses.default.invisible}`]: {
113
- transform: 'scale(0) translate(50%, -50%)'
114
- }
115
- }
116
- }, {
117
- props: ({
118
- ownerState
119
- }) => ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'rectangular',
120
- style: {
121
- bottom: 0,
122
- right: 0,
123
- transform: 'scale(1) translate(50%, 50%)',
124
- transformOrigin: '100% 100%',
125
- [`&.${_badgeClasses.default.invisible}`]: {
126
- transform: 'scale(0) translate(50%, 50%)'
127
- }
128
- }
129
- }, {
130
- props: ({
131
- ownerState
132
- }) => ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'rectangular',
133
- style: {
134
- top: 0,
135
- left: 0,
136
- transform: 'scale(1) translate(-50%, -50%)',
137
- transformOrigin: '0% 0%',
138
- [`&.${_badgeClasses.default.invisible}`]: {
139
- transform: 'scale(0) translate(-50%, -50%)'
140
- }
141
- }
142
- }, {
143
- props: ({
144
- ownerState
145
- }) => ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'rectangular',
146
- style: {
147
- bottom: 0,
148
- left: 0,
149
- transform: 'scale(1) translate(-50%, 50%)',
150
- transformOrigin: '0% 100%',
151
- [`&.${_badgeClasses.default.invisible}`]: {
152
- transform: 'scale(0) translate(-50%, 50%)'
153
- }
154
- }
155
- }, {
156
- props: ({
157
- ownerState
158
- }) => ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'circular',
159
- style: {
160
- top: '14%',
161
- right: '14%',
162
- transform: 'scale(1) translate(50%, -50%)',
163
- transformOrigin: '100% 0%',
164
- [`&.${_badgeClasses.default.invisible}`]: {
165
- transform: 'scale(0) translate(50%, -50%)'
166
- }
167
- }
168
- }, {
169
- props: ({
170
- ownerState
171
- }) => ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'circular',
172
- style: {
173
- bottom: '14%',
174
- right: '14%',
175
- transform: 'scale(1) translate(50%, 50%)',
176
- transformOrigin: '100% 100%',
177
- [`&.${_badgeClasses.default.invisible}`]: {
178
- transform: 'scale(0) translate(50%, 50%)'
179
- }
180
- }
181
- }, {
182
- props: ({
183
- ownerState
184
- }) => ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'circular',
185
- style: {
186
- top: '14%',
187
- left: '14%',
188
- transform: 'scale(1) translate(-50%, -50%)',
189
- transformOrigin: '0% 0%',
190
- [`&.${_badgeClasses.default.invisible}`]: {
191
- transform: 'scale(0) translate(-50%, -50%)'
192
- }
193
- }
194
- }, {
195
- props: ({
196
- ownerState
197
- }) => ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'circular',
198
- style: {
199
- bottom: '14%',
200
- left: '14%',
201
- transform: 'scale(1) translate(-50%, 50%)',
202
- transformOrigin: '0% 100%',
203
- [`&.${_badgeClasses.default.invisible}`]: {
204
- transform: 'scale(0) translate(-50%, 50%)'
205
- }
206
- }
207
103
  }, {
208
104
  props: {
209
105
  invisible: true
@@ -214,6 +110,29 @@ const BadgeBadge = (0, _zeroStyled.styled)('span', {
214
110
  duration: theme.transitions.duration.leavingScreen
215
111
  })
216
112
  }
113
+ }, {
114
+ style: ({
115
+ ownerState
116
+ }) => {
117
+ const {
118
+ vertical,
119
+ horizontal
120
+ } = ownerState.anchorOrigin;
121
+ const offset = ownerState.overlap === 'circular' ? '14%' : 0;
122
+ return {
123
+ '--Badge-translateX': horizontal === 'right' ? '50%' : '-50%',
124
+ '--Badge-translateY': vertical === 'top' ? '-50%' : '50%',
125
+ top: vertical === 'top' ? offset : 'initial',
126
+ bottom: vertical === 'bottom' ? offset : 'initial',
127
+ right: horizontal === 'right' ? offset : 'initial',
128
+ left: horizontal === 'left' ? offset : 'initial',
129
+ transform: 'scale(1) translate(var(--Badge-translateX), var(--Badge-translateY))',
130
+ transformOrigin: `${horizontal === 'right' ? '100%' : '0%'} ${vertical === 'top' ? '0%' : '100%'}`,
131
+ [`&.${_badgeClasses.default.invisible}`]: {
132
+ transform: 'scale(0) translate(var(--Badge-translateX), var(--Badge-translateY))'
133
+ }
134
+ };
135
+ }
217
136
  }]
218
137
  })));
219
138
  function getAnchorOrigin(anchorOrigin) {
@@ -76,7 +76,13 @@ const ButtonGroupRoot = (0, _zeroStyled.styled)('div', {
76
76
  variant: 'contained'
77
77
  },
78
78
  style: {
79
- boxShadow: (theme.vars || theme).shadows[2]
79
+ boxShadow: (theme.vars || theme).shadows[2],
80
+ [`& .${_buttonGroupClasses.default.grouped}`]: {
81
+ boxShadow: 'none',
82
+ '&:hover': {
83
+ boxShadow: 'none'
84
+ }
85
+ }
80
86
  }
81
87
  }, {
82
88
  props: {
@@ -227,16 +233,7 @@ const ButtonGroupRoot = (0, _zeroStyled.styled)('div', {
227
233
  }
228
234
  }))],
229
235
  [`& .${_buttonGroupClasses.default.grouped}`]: {
230
- minWidth: 40,
231
- boxShadow: 'none',
232
- props: {
233
- variant: 'contained'
234
- },
235
- style: {
236
- '&:hover': {
237
- boxShadow: 'none'
238
- }
239
- }
236
+ minWidth: 40
240
237
  }
241
238
  })));
242
239
  const ButtonGroup = /*#__PURE__*/React.forwardRef(function ButtonGroup(inProps, ref) {
package/CHANGELOG.md CHANGED
@@ -1,5 +1,123 @@
1
1
  # [Versions](https://mui.com/versions/)
2
2
 
3
+ ## 7.3.8
4
+
5
+ <!-- generated comparing v7.3.7..master -->
6
+
7
+ _Feb 12, 2026_
8
+
9
+ A big thanks to the 15 contributors who made this release possible. Here are some highlights ✨:
10
+
11
+ ### `@mui/material@7.3.8`
12
+
13
+ - [alert] Revert removing default icon mapping fallback (#47629) @ZeeshanTamboli
14
+ - [app-bar] Fix optional chaining in joinVars function (#47739) @sai6855
15
+ - [autocomplete] Fix scroll position resetting on reopen with `disableCloseOnSelect` (#47248) @ZeeshanTamboli
16
+ - [autocomplete] Pass fullWidth prop to input, with default as true (#47663) @silviuaavram
17
+ - [badge] Refactor variant styles generation (#47742) @sai6855
18
+ - [chip] Remove unnecessary `onDelete` check (#47753) @ZeeshanTamboli
19
+ - [switch][checkbox][radio] Remove `aria-disabled` from root span (#46318) @KirankumarAmbati
20
+ - [collapse] Remove unnecessary string concatenation (#47745) @sai6855
21
+ - [drawer] `persistent` and `permanent` variant Drawers should not override the styles via theme using `modal` class (#47581) @ZeeshanTamboli
22
+ - [tabs] Add ability to extend Tabs variant (#47590) @aditya1906
23
+ - [useAutocomplete] Add aria-multiselectable to listbox props when multiple is true (#47632) @silviuaavram
24
+ - [useAutocomplete] Use `React.Key` instead of `any` for `key` prop (#47619) @sonixx02
25
+
26
+ #### Core
27
+
28
+ - Revert "[docs-infra] Add Cookie Banner and Analytics Provider (#47445)" (868d23e) @dav-is
29
+ - Revert "[docs-infra] Update Cookie Consent Dialog styling and content (#47718)" (ae29d03) @dav-is
30
+ - [api-docs-builder] Validate slots prop and Slots interface export consistency (#47623) @Janpot
31
+ - [code-infra] Remove `window.muiDocConfig` (#47737) @Janpot
32
+ - [code-infra] Fix flaky Select test on Webkit (#47728) @Janpot
33
+ - [code-infra] Remove usage of NODE_ENV=test (#47692) @Janpot
34
+ - [code-infra] Prepare eslint rule rename (#47702) @Janpot
35
+ - [code-infra] Next.js 15.5.11 (security update) (#47697) @Janpot
36
+ - [code-infra] Fix Tooltip tests flakyness (#47669) @Janpot
37
+ - [code-infra] Improve instructions for error messages (#47668) @Janpot
38
+ - [code-infra] Add initial agent instructions (#47655) @Janpot
39
+ - [code-infra] Update broken links checker (#47633) @Janpot
40
+ - [code-infra] Improve Tooltip leaveDelay test (#47624) @Janpot
41
+ - [code-infra] Fix internal broken links (#47607) @Janpot
42
+ - [docs-infra] Resolve a few 301s in our docs (#47746) @Janpot
43
+ - [docs-infra] Update Cookie Consent Dialog styling and content (#47718) @dav-is
44
+ - [docs-infra] Add Cookie Banner and Analytics Provider (#47445) @dav-is
45
+ - [docs-infra] Make sure /customers page has a h1 (#47615) @Janpot
46
+ - [docs-infra] Fix privacy link (#47614) @Janpot
47
+ - [docs-infra] Resolve a few 301s (#47579) @Janpot
48
+ - [internal] Remove unused sponsor files (#47741) @oliviertassinari
49
+ - [markdown] Fix some broken hash links (#47609) @Janpot
50
+ - [test] Cleanup Table tests TODOs (#47656) @Ocheretovich
51
+
52
+ ### Docs
53
+
54
+ - [website] unclickable banner in the pricing page (#47634) @aemartos
55
+ - [blog] Company Update: What we've been working on (and why) (#47626) @alelthomas
56
+ - [docs] Remove outdated notifications (#47743) @bernardobelchior
57
+ - [docs] Make Demo component product-agnostic (#47635) @Janpot
58
+ - [docs] Copyedit the Number Field doc (#47469) @mapache-salvaje
59
+ - [docs] Fix Roboto font not loading in iframe demos (#47660) @Janpot
60
+ - [docs] Replace Checkbox with Icons in Combobox examples (#47654) @silviuaavram
61
+ - [docs] Fix punctuation in TypeScript guide description (#47617) @nodirbekprogrammer
62
+
63
+ All contributors of this release in alphabetical order: @aditya1906, @aemartos, @alelthomas, @bernardobelchior, @dav-is, @Janpot, @KirankumarAmbati, @mapache-salvaje, @nodirbekprogrammer, @Ocheretovich, @oliviertassinari, @sai6855, @silviuaavram, @sonixx02, @ZeeshanTamboli
64
+
65
+ ## 7.3.7
66
+
67
+ <!-- generated comparing v7.3.6..master -->
68
+
69
+ _Jan 8, 2026_
70
+
71
+ A big thanks to the 16 contributors who made this release possible.
72
+
73
+ ### `@mui/material@7.3.7`
74
+
75
+ - [accordion] Remove unnecessary handling of `square` prop on Accordion Root (#47457) @ZeeshanTamboli
76
+ - [alert] Remove unnecessary default icon mapping fallback (#47460) @ZeeshanTamboli
77
+ - [appbar] Fix inherit color CSS variable not getting applied (#47518) @ZeeshanTamboli
78
+ - [autocomplete] Fix `ArrowLeft`, `Backspace` & `Delete` behavior for multiple and single-value rendering with proper caret handling (#47411) @jnbain
79
+ - [backdrop] Remove unnecessary passing of `classes` from root slot (#47519) @ZeeshanTamboli
80
+ - [button-group] Fix styles when variant is `contained` (#47499) @ZeeshanTamboli
81
+ - [card-action-area] Remove incorrect root ref being forwarded to focus highlight component (#47523) @ZeeshanTamboli
82
+ - [checkbox] Fix readonly checkboxes (#47503) @mj12albert
83
+ - [click-away-listener] Tighten the parameter type of createHandleSynthetic method (#47525) @ZeeshanTamboli
84
+ - [dialog] Fix backdrop theme style overrides (#47544) @ZeeshanTamboli
85
+ - [focus-trap] Compute `activeElement` inside `loopFocus` on every keydown (#47566) @ZeeshanTamboli
86
+ - [modal] Take non-integer padding-right into consideration when scroll locking (#47420) @Zache
87
+ - [select] Fix dropdown width does not match trigger width on window resize (#47526) @AarishMansur
88
+ - [tabs] Fix passing incorrect slot name props (scrollButton → scrollButtons) (#47215) @rithik56
89
+
90
+ ### Docs
91
+
92
+ - [card] Fix key warning (#47524) @ZeeshanTamboli
93
+ - [dialog] Replace TranstionProps with slotProps.transition (#47569) @sai6855
94
+ - [number-field] Use stable Base UI package (#47504) @siriwatknp
95
+ - [snackbar] Replace TransitionComponent with slots.transition (#47570) @sai6855
96
+ - Fix incorrect indentation in migration guide (#47571) @sai6855
97
+ - Enable MUI chat on Material UI demos (#46837) @siriwatknp
98
+ - Add docs and website banner for Dev survey'25 (#47521) @prakhargupta1
99
+ - Update Tailwind CSS v4 + Next.js Pages Router docs (#47546) @atharva3333
100
+ - Add warning callout to Sync plugin doc (#47511) @mapache-salvaje
101
+ - Update typo in TailwindCSS v4 integration with Next.js docs (#47512) @TimKraemer
102
+ - Fix link to contributing guide (#47473) @oliviertassinari
103
+ - Improve description of Accordion props (#47459) @ZeeshanTamboli
104
+
105
+ ### Core
106
+
107
+ - [blog] Whats new since MUI X v8 [DX-51] (#47140) @joserodolfofreitas
108
+ - [code-infra] Fix React@next CI job (#47493) @Janpot
109
+ - [code-infra] Move font loading to @mui/docs (#47385) @Janpot
110
+ - [code-infra] Fix CI for React 18 (#47560) @Janpot
111
+ - [code-infra] Prevent legacy browsers tests from updating (#47496) @Janpot
112
+ - [code-infra] Move `@mui/internal-test-utils` to code infra repo (#47422) @Janpot
113
+ - [code-infra] Fix React@next CI job (#47493) @Janpot
114
+ - [examples] Update Next.js versions to v16 in Next.js examples (DX-57) (#47453) @alelthomas
115
+ - [internal] Bump Next.js & React version to avoid security vulnerability (#47427) @oliviertassinari
116
+ - [test] Use plain playwright for e2e (#47410) @mj12albert
117
+ - [test] Fix react-18 tests (#47407) @Janpot
118
+
119
+ All contributors of this release in alphabetical order: @AarishMansur, @alelthomas, @atharva3333, @bricefrisco, @Janpot, @jnbain, @joserodolfofreitas, @mapache-salvaje, @mj12albert, @oliviertassinari, @prakhargupta1, @rithik56, @siriwatknp, @TimKraemer, @Zache, @ZeeshanTamboli
120
+
3
121
  ## 7.3.6
4
122
 
5
123
  <!-- generated comparing v7.3.5..master -->
@@ -753,7 +871,7 @@ A big thanks to the 7 contributors who made this release possible.
753
871
  - Fix `Grid`, `GridLegacy`, `Stack`, `Badge`, `Select`, `Autocomplete` demos CSS variables (#45693) @DiegoAndai
754
872
  - Add "Material UI v7 is here" to the notifications (#45694) @DiegoAndai
755
873
  - Fix `Breadcrumbs`, `List`, `Divider`, and `Typography` dark mode demos (#45692) @siriwatknp
756
- - Fix Material Icons page in dark mode (#45691) @mnajdova
874
+ - Fix Material Icons page in dark mode (#45691) @mnajdova
757
875
 
758
876
  All contributors of this release in alphabetical order: @aarongarciah, @DiegoAndai, @eduter, @Janpot, @micttyoid, @mnajdova, @siriwatknp
759
877
 
@@ -106,7 +106,6 @@ const CardActionArea = /*#__PURE__*/React.forwardRef(function CardActionArea(inP
106
106
  elementType: CardActionAreaFocusHighlight,
107
107
  externalForwardedProps,
108
108
  ownerState,
109
- ref,
110
109
  className: classes.focusHighlight
111
110
  });
112
111
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(RootSlot, {
package/Chip/Chip.js CHANGED
@@ -388,9 +388,7 @@ const Chip = /*#__PURE__*/React.forwardRef(function Chip(inProps, ref) {
388
388
  const handleDeleteIconClick = event => {
389
389
  // Stop the event from bubbling up to the `Chip`
390
390
  event.stopPropagation();
391
- if (onDelete) {
392
- onDelete(event);
393
- }
391
+ onDelete(event);
394
392
  };
395
393
  const handleKeyDown = event => {
396
394
  // Ignore events from children of `Chip`.
@@ -29,11 +29,11 @@ const useUtilityClasses = ownerState => {
29
29
  classes
30
30
  } = ownerState;
31
31
  const slots = {
32
- root: ['root', `${orientation}`],
32
+ root: ['root', orientation],
33
33
  entered: ['entered'],
34
34
  hidden: ['hidden'],
35
- wrapper: ['wrapper', `${orientation}`],
36
- wrapperInner: ['wrapperInner', `${orientation}`]
35
+ wrapper: ['wrapper', orientation],
36
+ wrapperInner: ['wrapperInner', orientation]
37
37
  };
38
38
  return (0, _composeClasses.default)(slots, _collapseClasses.getCollapseUtilityClass, classes);
39
39
  };
package/Dialog/Dialog.js CHANGED
@@ -26,8 +26,7 @@ var _useSlot = _interopRequireDefault(require("../utils/useSlot"));
26
26
  var _jsxRuntime = require("react/jsx-runtime");
27
27
  const DialogBackdrop = (0, _zeroStyled.styled)(_Backdrop.default, {
28
28
  name: 'MuiDialog',
29
- slot: 'Backdrop',
30
- overrides: (props, styles) => styles.backdrop
29
+ slot: 'Backdrop'
31
30
  })({
32
31
  // Improve scrollable dialog support.
33
32
  zIndex: -1
@@ -42,6 +41,7 @@ const useUtilityClasses = ownerState => {
42
41
  } = ownerState;
43
42
  const slots = {
44
43
  root: ['root'],
44
+ backdrop: ['backdrop'],
45
45
  container: ['container', `scroll${(0, _capitalize.default)(scroll)}`],
46
46
  paper: ['paper', `paperScroll${(0, _capitalize.default)(scroll)}`, `paperWidth${(0, _capitalize.default)(String(maxWidth))}`, fullWidth && 'paperFullWidth', fullScreen && 'paperFullScreen']
47
47
  };
@@ -292,7 +292,8 @@ const Dialog = /*#__PURE__*/React.forwardRef(function Dialog(inProps, ref) {
292
292
  elementType: DialogBackdrop,
293
293
  shouldForwardComponentProp: true,
294
294
  externalForwardedProps,
295
- ownerState
295
+ ownerState,
296
+ className: classes.backdrop
296
297
  });
297
298
  const [PaperSlot, paperSlotProps] = (0, _useSlot.default)('paper', {
298
299
  elementType: DialogPaper,
@@ -1,6 +1,8 @@
1
1
  export interface DialogClasses {
2
2
  /** Styles applied to the root element. */
3
3
  root: string;
4
+ /** Styles applied to the backdrop element. */
5
+ backdrop: string;
4
6
  /** Styles applied to the container element if `scroll="paper"`. */
5
7
  scrollPaper: string;
6
8
  /** Styles applied to the container element if `scroll="body"`. */
@@ -11,5 +11,5 @@ var _generateUtilityClass = _interopRequireDefault(require("@mui/utils/generateU
11
11
  function getDialogUtilityClass(slot) {
12
12
  return (0, _generateUtilityClass.default)('MuiDialog', slot);
13
13
  }
14
- const dialogClasses = (0, _generateUtilityClasses.default)('MuiDialog', ['root', 'scrollPaper', 'scrollBody', 'container', 'paper', 'paperScrollPaper', 'paperScrollBody', 'paperWidthFalse', 'paperWidthXs', 'paperWidthSm', 'paperWidthMd', 'paperWidthLg', 'paperWidthXl', 'paperFullWidth', 'paperFullScreen']);
14
+ const dialogClasses = (0, _generateUtilityClasses.default)('MuiDialog', ['root', 'backdrop', 'scrollPaper', 'scrollBody', 'container', 'paper', 'paperScrollPaper', 'paperScrollBody', 'paperWidthFalse', 'paperWidthXs', 'paperWidthSm', 'paperWidthMd', 'paperWidthLg', 'paperWidthXl', 'paperFullWidth', 'paperFullScreen']);
15
15
  var _default = exports.default = dialogClasses;
package/Drawer/Drawer.js CHANGED
@@ -31,7 +31,7 @@ const overridesResolver = (props, styles) => {
31
31
  const {
32
32
  ownerState
33
33
  } = props;
34
- return [styles.root, (ownerState.variant === 'permanent' || ownerState.variant === 'persistent') && styles.docked, styles.modal];
34
+ return [styles.root, (ownerState.variant === 'permanent' || ownerState.variant === 'persistent') && styles.docked, ownerState.variant === 'temporary' && styles.modal];
35
35
  };
36
36
  const useUtilityClasses = ownerState => {
37
37
  const {
@@ -38,7 +38,7 @@ var _gridLegacyClasses = _interopRequireWildcard(require("./gridLegacyClasses"))
38
38
  var _jsxRuntime = require("react/jsx-runtime");
39
39
  let warnedOnce = false;
40
40
  function warnAboutDeprecatedGridLegacy() {
41
- if (!warnedOnce && process.env.NODE_ENV === 'development') {
41
+ if (!warnedOnce && process.env.NODE_ENV !== 'production') {
42
42
  warnedOnce = true;
43
43
  console.warn('MUI: The GridLegacy component is deprecated. See https://mui.com/material-ui/migration/upgrade-to-grid-v2/ for migration instructions.\n');
44
44
  }
@@ -25,7 +25,7 @@ function ariaHidden(element, hide) {
25
25
  }
26
26
  }
27
27
  function getPaddingRight(element) {
28
- return parseInt((0, _ownerWindow.default)(element).getComputedStyle(element).paddingRight, 10) || 0;
28
+ return parseFloat((0, _ownerWindow.default)(element).getComputedStyle(element).paddingRight) || 0;
29
29
  }
30
30
  function isAriaHiddenForbiddenOnElement(element) {
31
31
  // The forbidden HTML tags are the ones from ARIA specification that
@@ -157,7 +157,7 @@ const Popover = /*#__PURE__*/React.forwardRef(function Popover(inProps, ref) {
157
157
  const anchorRect = anchorElement.getBoundingClientRect();
158
158
  if (process.env.NODE_ENV !== 'production') {
159
159
  const box = anchorElement.getBoundingClientRect();
160
- if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
160
+ if (!globalThis.MUI_TEST_ENV && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
161
161
  console.warn(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', "Make sure the element is present in the document or that it's not display none."].join('\n'));
162
162
  }
163
163
  }
@@ -408,7 +408,7 @@ process.env.NODE_ENV !== "production" ? Popover.propTypes /* remove-proptypes */
408
408
  const resolvedAnchorEl = resolveAnchorEl(props.anchorEl);
409
409
  if (resolvedAnchorEl && resolvedAnchorEl.nodeType === 1) {
410
410
  const box = resolvedAnchorEl.getBoundingClientRect();
411
- if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
411
+ if (process.env.NODE_ENV !== 'production' && !globalThis.MUI_TEST_ENV && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
412
412
  return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', "Make sure the element is present in the document or that it's not display none."].join('\n'));
413
413
  }
414
414
  } else {
@@ -112,7 +112,7 @@ const PopperTooltip = /*#__PURE__*/React.forwardRef(function PopperTooltip(props
112
112
  if (process.env.NODE_ENV !== 'production') {
113
113
  if (resolvedAnchorElement && isHTMLElement(resolvedAnchorElement) && resolvedAnchorElement.nodeType === 1) {
114
114
  const box = resolvedAnchorElement.getBoundingClientRect();
115
- if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
115
+ if (!globalThis.MUI_TEST_ENV && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
116
116
  console.warn(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', "Make sure the element is present in the document or that it's not display none."].join('\n'));
117
117
  }
118
118
  }
@@ -274,7 +274,7 @@ process.env.NODE_ENV !== "production" ? Popper.propTypes /* remove-proptypes */
274
274
  const resolvedAnchorEl = resolveAnchorEl(props.anchorEl);
275
275
  if (resolvedAnchorEl && isHTMLElement(resolvedAnchorEl) && resolvedAnchorEl.nodeType === 1) {
276
276
  const box = resolvedAnchorEl.getBoundingClientRect();
277
- if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
277
+ if (process.env.NODE_ENV !== 'production' && !globalThis.MUI_TEST_ENV && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
278
278
  return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', "Make sure the element is present in the document or that it's not display none."].join('\n'));
279
279
  }
280
280
  } else if (!resolvedAnchorEl || typeof resolvedAnchorEl.getBoundingClientRect !== 'function' || isVirtualElement(resolvedAnchorEl) && resolvedAnchorEl.contextElement != null && resolvedAnchorEl.contextElement.nodeType !== 1) {
package/README.md CHANGED
@@ -33,7 +33,7 @@ Our documentation features [a collection of example projects using Material UI]
33
33
 
34
34
  ## Contributing
35
35
 
36
- Read the [contributing guide](/CONTRIBUTING.md) to learn about our development process, how to propose bug fixes and improvements, and how to build and test your changes.
36
+ Read the [contributing guide](../../CONTRIBUTING.md) to learn about our development process, how to propose bug fixes and improvements, and how to build and test your changes.
37
37
 
38
38
  Contributing to Material UI is about more than just issues and pull requests!
39
39
  There are many other ways to [support Material UI](https://mui.com/material-ui/getting-started/faq/#mui-is-awesome-how-can-i-support-the-project) beyond contributing to the code base.
@@ -49,7 +49,7 @@ Future plans and high-priority features and enhancements can be found in the [ro
49
49
  ## License
50
50
 
51
51
  This project is licensed under the terms of the
52
- [MIT license](/LICENSE).
52
+ [MIT license](../../LICENSE).
53
53
 
54
54
  ## Security
55
55
 
@@ -184,6 +184,22 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
184
184
  node: inputRef.current,
185
185
  value
186
186
  }), [value]);
187
+ const open = displayNode !== null && openState;
188
+ React.useEffect(() => {
189
+ if (!open || !anchorElement || autoWidth) {
190
+ return undefined;
191
+ }
192
+ if (typeof ResizeObserver === 'undefined') {
193
+ return undefined;
194
+ }
195
+ const observer = new ResizeObserver(() => {
196
+ setMenuMinWidthState(anchorElement.clientWidth);
197
+ });
198
+ observer.observe(anchorElement);
199
+ return () => {
200
+ observer.disconnect();
201
+ };
202
+ }, [open, anchorElement, autoWidth]);
187
203
 
188
204
  // Resize menu on `defaultOpen` automatic toggle.
189
205
  React.useEffect(() => {
@@ -219,8 +235,8 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
219
235
  }
220
236
  return undefined;
221
237
  }, [labelId]);
222
- const update = (open, event) => {
223
- if (open) {
238
+ const update = (openParam, event) => {
239
+ if (openParam) {
224
240
  if (onOpen) {
225
241
  onOpen(event);
226
242
  }
@@ -229,7 +245,7 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
229
245
  }
230
246
  if (!isOpenControlled) {
231
247
  setMenuMinWidthState(autoWidth ? null : anchorElement.clientWidth);
232
- setOpenState(open);
248
+ setOpenState(openParam);
233
249
  }
234
250
  };
235
251
  const handleMouseDown = event => {
@@ -316,7 +332,6 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
316
332
  onKeyDown?.(event);
317
333
  }
318
334
  };
319
- const open = displayNode !== null && openState;
320
335
  const handleBlur = event => {
321
336
  // if open event.stopImmediatePropagation
322
337
  if (!open && onBlur) {