@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
package/Slide/Slide.js CHANGED
@@ -270,7 +270,7 @@ process.env.NODE_ENV !== "production" ? Slide.propTypes /* remove-proptypes */ =
270
270
  const resolvedContainer = resolveContainer(props.container);
271
271
  if (resolvedContainer && resolvedContainer.nodeType === 1) {
272
272
  const box = resolvedContainer.getBoundingClientRect();
273
- if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
273
+ if (process.env.NODE_ENV !== 'production' && !globalThis.MUI_TEST_ENV && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
274
274
  return new Error(['MUI: The `container` 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'));
275
275
  }
276
276
  } else if (!resolvedContainer || typeof resolvedContainer.getBoundingClientRect !== 'function' || resolvedContainer.contextElement != null && resolvedContainer.contextElement.nodeType !== 1) {
package/Tabs/Tabs.d.ts CHANGED
@@ -8,6 +8,7 @@ import { OverridableComponent, OverrideProps } from "../OverridableComponent/ind
8
8
  import { TabsClasses } from "./tabsClasses.js";
9
9
  import SvgIcon from "../SvgIcon/index.js";
10
10
  export interface TabsPropsIndicatorColorOverrides {}
11
+ export interface TabsPropsVariantOverrides {}
11
12
  export interface TabsRootSlotPropsOverrides {}
12
13
  export interface TabsScrollerSlotPropsOverrides {}
13
14
  export interface TabsListSlotPropsOverrides {}
@@ -87,7 +88,7 @@ export type TabsSlotsAndSlotProps = CreateSlotsAndSlotProps<TabsSlots, {
87
88
  */
88
89
  indicator: SlotProps<'span', TabsIndicatorSlotPropsOverrides, TabsOwnerState>;
89
90
  /**
90
- * Props forwarded to the scrollButton slot.
91
+ * Props forwarded to the scrollButtons slot.
91
92
  * By default, the available props are based on the [TabScrollButton](https://mui.com/material-ui/api/tab-scroll-button/#props) component.
92
93
  */
93
94
  scrollButtons: SlotProps<typeof TabScrollButton, TabsScrollButtonsSlotPropsOverrides, TabsOwnerState>;
@@ -234,7 +235,7 @@ export interface TabsOwnProps extends TabsSlotsAndSlotProps {
234
235
  * - `standard` will render the default state.
235
236
  * @default 'standard'
236
237
  */
237
- variant?: 'standard' | 'scrollable' | 'fullWidth';
238
+ variant?: OverridableStringUnion<'standard' | 'scrollable' | 'fullWidth', TabsPropsVariantOverrides>;
238
239
  /**
239
240
  * If `true`, the scrollbar is visible. It can be useful when displaying
240
241
  * a long vertical list of tabs.
package/Tabs/Tabs.js CHANGED
@@ -352,7 +352,7 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
352
352
  slots,
353
353
  slotProps: {
354
354
  indicator: TabIndicatorProps,
355
- scrollButton: TabScrollButtonProps,
355
+ scrollButtons: TabScrollButtonProps,
356
356
  ...slotProps
357
357
  }
358
358
  };
@@ -385,7 +385,7 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
385
385
  }
386
386
  tabMeta = tab ? tab.getBoundingClientRect() : null;
387
387
  if (process.env.NODE_ENV !== 'production') {
388
- if (process.env.NODE_ENV !== 'test' && !warnedOnceTabPresent && tabMeta && tabMeta.width === 0 && tabMeta.height === 0 &&
388
+ if (!globalThis.MUI_TEST_ENV && !warnedOnceTabPresent && tabMeta && tabMeta.width === 0 && tabMeta.height === 0 &&
389
389
  // if the whole Tabs component is hidden, don't warn
390
390
  tabsMeta.clientWidth !== 0) {
391
391
  tabsMeta = null;
@@ -155,12 +155,12 @@ function FocusTrap(props) {
155
155
  return;
156
156
  }
157
157
  const doc = (0, _ownerDocument.default)(rootRef.current);
158
- const activeElement = (0, _getActiveElement.default)(doc);
159
158
  const loopFocus = nativeEvent => {
160
159
  lastKeydown.current = nativeEvent;
161
160
  if (disableEnforceFocus || !isEnabled() || nativeEvent.key !== 'Tab') {
162
161
  return;
163
162
  }
163
+ const activeElement = (0, _getActiveElement.default)(doc);
164
164
 
165
165
  // Make sure the next tab starts from the right place.
166
166
  // activeElement refers to the origin.
@@ -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;
@@ -142,7 +142,6 @@ const Accordion = /*#__PURE__*/React.forwardRef(function Accordion(inProps, ref)
142
142
  disableGutters = false,
143
143
  expanded: expandedProp,
144
144
  onChange,
145
- square = false,
146
145
  slots = {},
147
146
  slotProps = {},
148
147
  TransitionComponent: TransitionComponentProp,
@@ -170,7 +169,6 @@ const Accordion = /*#__PURE__*/React.forwardRef(function Accordion(inProps, ref)
170
169
  }), [expanded, disabled, disableGutters, handleChange]);
171
170
  const ownerState = {
172
171
  ...props,
173
- square,
174
172
  disabled,
175
173
  disableGutters,
176
174
  expanded
@@ -197,10 +195,7 @@ const Accordion = /*#__PURE__*/React.forwardRef(function Accordion(inProps, ref)
197
195
  className: clsx(classes.root, className),
198
196
  shouldForwardComponentProp: true,
199
197
  ownerState,
200
- ref,
201
- additionalProps: {
202
- square
203
- }
198
+ ref
204
199
  });
205
200
  const [AccordionHeadingSlot, accordionProps] = useSlot('heading', {
206
201
  elementType: AccordionHeading,
@@ -280,12 +275,12 @@ process.env.NODE_ENV !== "production" ? Accordion.propTypes /* remove-proptypes
280
275
  */
281
276
  disabled: PropTypes.bool,
282
277
  /**
283
- * If `true`, it removes the margin between two expanded accordion items and the increase of height.
278
+ * If `true`, it removes the margin between two expanded accordion items and prevents the increased height when expanded.
284
279
  * @default false
285
280
  */
286
281
  disableGutters: PropTypes.bool,
287
282
  /**
288
- * If `true`, expands the accordion, otherwise collapse it.
283
+ * If `true`, expands the accordion, otherwise collapses it.
289
284
  * Setting this prop enables control over the accordion.
290
285
  */
291
286
  expanded: PropTypes.bool,
@@ -316,11 +311,6 @@ process.env.NODE_ENV !== "production" ? Accordion.propTypes /* remove-proptypes
316
311
  root: PropTypes.elementType,
317
312
  transition: PropTypes.elementType
318
313
  }),
319
- /**
320
- * If `true`, rounded corners are disabled.
321
- * @default false
322
- */
323
- square: PropTypes.bool,
324
314
  /**
325
315
  * The system prop that allows defining system overrides as well as additional CSS styles.
326
316
  */
@@ -26,7 +26,7 @@ const useUtilityClasses = ownerState => {
26
26
 
27
27
  // var2 is the fallback.
28
28
  // Ex. var1: 'var(--a)', var2: 'var(--b)'; return: 'var(--a, var(--b))'
29
- const joinVars = (var1, var2) => var1 ? `${var1?.replace(')', '')}, ${var2})` : var2;
29
+ const joinVars = (var1, var2) => var1 ? `${var1.replace(')', '')}, ${var2})` : var2;
30
30
  const AppBarRoot = styled(Paper, {
31
31
  name: 'MuiAppBar',
32
32
  slot: 'Root',
@@ -101,7 +101,8 @@ const AppBarRoot = styled(Paper, {
101
101
  color: 'inherit'
102
102
  },
103
103
  style: {
104
- '--AppBar-color': 'inherit'
104
+ '--AppBar-color': 'inherit',
105
+ color: 'var(--AppBar-color)'
105
106
  }
106
107
  }, {
107
108
  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.
@@ -657,7 +657,7 @@ const Autocomplete = /*#__PURE__*/React.forwardRef(function Autocomplete(inProps
657
657
  children: renderInput({
658
658
  id,
659
659
  disabled,
660
- fullWidth: true,
660
+ fullWidth: props.fullWidth ?? true,
661
661
  size: size === 'small' ? 'small' : undefined,
662
662
  InputLabelProps: getInputLabelProps(),
663
663
  InputProps: {
@@ -107,7 +107,6 @@ const Backdrop = /*#__PURE__*/React.forwardRef(function Backdrop(inProps, ref) {
107
107
  children: /*#__PURE__*/_jsx(RootSlot, {
108
108
  "aria-hidden": true,
109
109
  ...rootProps,
110
- classes: classes,
111
110
  ref: ref,
112
111
  children: children
113
112
  })
@@ -93,110 +93,6 @@ const BadgeBadge = styled('span', {
93
93
  minWidth: RADIUS_DOT * 2,
94
94
  padding: 0
95
95
  }
96
- }, {
97
- props: ({
98
- ownerState
99
- }) => ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'rectangular',
100
- style: {
101
- top: 0,
102
- right: 0,
103
- transform: 'scale(1) translate(50%, -50%)',
104
- transformOrigin: '100% 0%',
105
- [`&.${badgeClasses.invisible}`]: {
106
- transform: 'scale(0) translate(50%, -50%)'
107
- }
108
- }
109
- }, {
110
- props: ({
111
- ownerState
112
- }) => ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'rectangular',
113
- style: {
114
- bottom: 0,
115
- right: 0,
116
- transform: 'scale(1) translate(50%, 50%)',
117
- transformOrigin: '100% 100%',
118
- [`&.${badgeClasses.invisible}`]: {
119
- transform: 'scale(0) translate(50%, 50%)'
120
- }
121
- }
122
- }, {
123
- props: ({
124
- ownerState
125
- }) => ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'rectangular',
126
- style: {
127
- top: 0,
128
- left: 0,
129
- transform: 'scale(1) translate(-50%, -50%)',
130
- transformOrigin: '0% 0%',
131
- [`&.${badgeClasses.invisible}`]: {
132
- transform: 'scale(0) translate(-50%, -50%)'
133
- }
134
- }
135
- }, {
136
- props: ({
137
- ownerState
138
- }) => ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'rectangular',
139
- style: {
140
- bottom: 0,
141
- left: 0,
142
- transform: 'scale(1) translate(-50%, 50%)',
143
- transformOrigin: '0% 100%',
144
- [`&.${badgeClasses.invisible}`]: {
145
- transform: 'scale(0) translate(-50%, 50%)'
146
- }
147
- }
148
- }, {
149
- props: ({
150
- ownerState
151
- }) => ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'circular',
152
- style: {
153
- top: '14%',
154
- right: '14%',
155
- transform: 'scale(1) translate(50%, -50%)',
156
- transformOrigin: '100% 0%',
157
- [`&.${badgeClasses.invisible}`]: {
158
- transform: 'scale(0) translate(50%, -50%)'
159
- }
160
- }
161
- }, {
162
- props: ({
163
- ownerState
164
- }) => ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'circular',
165
- style: {
166
- bottom: '14%',
167
- right: '14%',
168
- transform: 'scale(1) translate(50%, 50%)',
169
- transformOrigin: '100% 100%',
170
- [`&.${badgeClasses.invisible}`]: {
171
- transform: 'scale(0) translate(50%, 50%)'
172
- }
173
- }
174
- }, {
175
- props: ({
176
- ownerState
177
- }) => ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'circular',
178
- style: {
179
- top: '14%',
180
- left: '14%',
181
- transform: 'scale(1) translate(-50%, -50%)',
182
- transformOrigin: '0% 0%',
183
- [`&.${badgeClasses.invisible}`]: {
184
- transform: 'scale(0) translate(-50%, -50%)'
185
- }
186
- }
187
- }, {
188
- props: ({
189
- ownerState
190
- }) => ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'circular',
191
- style: {
192
- bottom: '14%',
193
- left: '14%',
194
- transform: 'scale(1) translate(-50%, 50%)',
195
- transformOrigin: '0% 100%',
196
- [`&.${badgeClasses.invisible}`]: {
197
- transform: 'scale(0) translate(-50%, 50%)'
198
- }
199
- }
200
96
  }, {
201
97
  props: {
202
98
  invisible: true
@@ -207,6 +103,29 @@ const BadgeBadge = styled('span', {
207
103
  duration: theme.transitions.duration.leavingScreen
208
104
  })
209
105
  }
106
+ }, {
107
+ style: ({
108
+ ownerState
109
+ }) => {
110
+ const {
111
+ vertical,
112
+ horizontal
113
+ } = ownerState.anchorOrigin;
114
+ const offset = ownerState.overlap === 'circular' ? '14%' : 0;
115
+ return {
116
+ '--Badge-translateX': horizontal === 'right' ? '50%' : '-50%',
117
+ '--Badge-translateY': vertical === 'top' ? '-50%' : '50%',
118
+ top: vertical === 'top' ? offset : 'initial',
119
+ bottom: vertical === 'bottom' ? offset : 'initial',
120
+ right: horizontal === 'right' ? offset : 'initial',
121
+ left: horizontal === 'left' ? offset : 'initial',
122
+ transform: 'scale(1) translate(var(--Badge-translateX), var(--Badge-translateY))',
123
+ transformOrigin: `${horizontal === 'right' ? '100%' : '0%'} ${vertical === 'top' ? '0%' : '100%'}`,
124
+ [`&.${badgeClasses.invisible}`]: {
125
+ transform: 'scale(0) translate(var(--Badge-translateX), var(--Badge-translateY))'
126
+ }
127
+ };
128
+ }
210
129
  }]
211
130
  })));
212
131
  function getAnchorOrigin(anchorOrigin) {
@@ -69,7 +69,13 @@ const ButtonGroupRoot = styled('div', {
69
69
  variant: 'contained'
70
70
  },
71
71
  style: {
72
- boxShadow: (theme.vars || theme).shadows[2]
72
+ boxShadow: (theme.vars || theme).shadows[2],
73
+ [`& .${buttonGroupClasses.grouped}`]: {
74
+ boxShadow: 'none',
75
+ '&:hover': {
76
+ boxShadow: 'none'
77
+ }
78
+ }
73
79
  }
74
80
  }, {
75
81
  props: {
@@ -220,16 +226,7 @@ const ButtonGroupRoot = styled('div', {
220
226
  }
221
227
  }))],
222
228
  [`& .${buttonGroupClasses.grouped}`]: {
223
- minWidth: 40,
224
- boxShadow: 'none',
225
- props: {
226
- variant: 'contained'
227
- },
228
- style: {
229
- '&:hover': {
230
- boxShadow: 'none'
231
- }
232
- }
229
+ minWidth: 40
233
230
  }
234
231
  })));
235
232
  const ButtonGroup = /*#__PURE__*/React.forwardRef(function ButtonGroup(inProps, ref) {
@@ -99,7 +99,6 @@ const CardActionArea = /*#__PURE__*/React.forwardRef(function CardActionArea(inP
99
99
  elementType: CardActionAreaFocusHighlight,
100
100
  externalForwardedProps,
101
101
  ownerState,
102
- ref,
103
102
  className: classes.focusHighlight
104
103
  });
105
104
  return /*#__PURE__*/_jsxs(RootSlot, {
package/esm/Chip/Chip.js CHANGED
@@ -381,9 +381,7 @@ const Chip = /*#__PURE__*/React.forwardRef(function Chip(inProps, ref) {
381
381
  const handleDeleteIconClick = event => {
382
382
  // Stop the event from bubbling up to the `Chip`
383
383
  event.stopPropagation();
384
- if (onDelete) {
385
- onDelete(event);
386
- }
384
+ onDelete(event);
387
385
  };
388
386
  const handleKeyDown = event => {
389
387
  // Ignore events from children of `Chip`.
@@ -22,11 +22,11 @@ const useUtilityClasses = ownerState => {
22
22
  classes
23
23
  } = ownerState;
24
24
  const slots = {
25
- root: ['root', `${orientation}`],
25
+ root: ['root', orientation],
26
26
  entered: ['entered'],
27
27
  hidden: ['hidden'],
28
- wrapper: ['wrapper', `${orientation}`],
29
- wrapperInner: ['wrapperInner', `${orientation}`]
28
+ wrapper: ['wrapper', orientation],
29
+ wrapperInner: ['wrapperInner', orientation]
30
30
  };
31
31
  return composeClasses(slots, getCollapseUtilityClass, classes);
32
32
  };
@@ -19,8 +19,7 @@ import useSlot from "../utils/useSlot.js";
19
19
  import { jsx as _jsx } from "react/jsx-runtime";
20
20
  const DialogBackdrop = styled(Backdrop, {
21
21
  name: 'MuiDialog',
22
- slot: 'Backdrop',
23
- overrides: (props, styles) => styles.backdrop
22
+ slot: 'Backdrop'
24
23
  })({
25
24
  // Improve scrollable dialog support.
26
25
  zIndex: -1
@@ -35,6 +34,7 @@ const useUtilityClasses = ownerState => {
35
34
  } = ownerState;
36
35
  const slots = {
37
36
  root: ['root'],
37
+ backdrop: ['backdrop'],
38
38
  container: ['container', `scroll${capitalize(scroll)}`],
39
39
  paper: ['paper', `paperScroll${capitalize(scroll)}`, `paperWidth${capitalize(String(maxWidth))}`, fullWidth && 'paperFullWidth', fullScreen && 'paperFullScreen']
40
40
  };
@@ -285,7 +285,8 @@ const Dialog = /*#__PURE__*/React.forwardRef(function Dialog(inProps, ref) {
285
285
  elementType: DialogBackdrop,
286
286
  shouldForwardComponentProp: true,
287
287
  externalForwardedProps,
288
- ownerState
288
+ ownerState,
289
+ className: classes.backdrop
289
290
  });
290
291
  const [PaperSlot, paperSlotProps] = useSlot('paper', {
291
292
  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"`. */
@@ -3,5 +3,5 @@ import generateUtilityClass from '@mui/utils/generateUtilityClass';
3
3
  export function getDialogUtilityClass(slot) {
4
4
  return generateUtilityClass('MuiDialog', slot);
5
5
  }
6
- const dialogClasses = generateUtilityClasses('MuiDialog', ['root', 'scrollPaper', 'scrollBody', 'container', 'paper', 'paperScrollPaper', 'paperScrollBody', 'paperWidthFalse', 'paperWidthXs', 'paperWidthSm', 'paperWidthMd', 'paperWidthLg', 'paperWidthXl', 'paperFullWidth', 'paperFullScreen']);
6
+ const dialogClasses = generateUtilityClasses('MuiDialog', ['root', 'backdrop', 'scrollPaper', 'scrollBody', 'container', 'paper', 'paperScrollPaper', 'paperScrollBody', 'paperWidthFalse', 'paperWidthXs', 'paperWidthSm', 'paperWidthMd', 'paperWidthLg', 'paperWidthXl', 'paperFullWidth', 'paperFullScreen']);
7
7
  export default dialogClasses;
@@ -22,7 +22,7 @@ const overridesResolver = (props, styles) => {
22
22
  const {
23
23
  ownerState
24
24
  } = props;
25
- return [styles.root, (ownerState.variant === 'permanent' || ownerState.variant === 'persistent') && styles.docked, styles.modal];
25
+ return [styles.root, (ownerState.variant === 'permanent' || ownerState.variant === 'persistent') && styles.docked, ownerState.variant === 'temporary' && styles.modal];
26
26
  };
27
27
  const useUtilityClasses = ownerState => {
28
28
  const {
@@ -25,7 +25,7 @@ import gridLegacyClasses, { getGridLegacyUtilityClass } from "./gridLegacyClasse
25
25
  import { jsx as _jsx } from "react/jsx-runtime";
26
26
  let warnedOnce = false;
27
27
  function warnAboutDeprecatedGridLegacy() {
28
- if (!warnedOnce && process.env.NODE_ENV === 'development') {
28
+ if (!warnedOnce && process.env.NODE_ENV !== 'production') {
29
29
  warnedOnce = true;
30
30
  console.warn('MUI: The GridLegacy component is deprecated. See https://mui.com/material-ui/migration/upgrade-to-grid-v2/ for migration instructions.\n');
31
31
  }
@@ -17,7 +17,7 @@ export function ariaHidden(element, hide) {
17
17
  }
18
18
  }
19
19
  function getPaddingRight(element) {
20
- return parseInt(ownerWindow(element).getComputedStyle(element).paddingRight, 10) || 0;
20
+ return parseFloat(ownerWindow(element).getComputedStyle(element).paddingRight) || 0;
21
21
  }
22
22
  function isAriaHiddenForbiddenOnElement(element) {
23
23
  // The forbidden HTML tags are the ones from ARIA specification that
@@ -148,7 +148,7 @@ const Popover = /*#__PURE__*/React.forwardRef(function Popover(inProps, ref) {
148
148
  const anchorRect = anchorElement.getBoundingClientRect();
149
149
  if (process.env.NODE_ENV !== 'production') {
150
150
  const box = anchorElement.getBoundingClientRect();
151
- if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
151
+ if (!globalThis.MUI_TEST_ENV && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
152
152
  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'));
153
153
  }
154
154
  }
@@ -399,7 +399,7 @@ process.env.NODE_ENV !== "production" ? Popover.propTypes /* remove-proptypes */
399
399
  const resolvedAnchorEl = resolveAnchorEl(props.anchorEl);
400
400
  if (resolvedAnchorEl && resolvedAnchorEl.nodeType === 1) {
401
401
  const box = resolvedAnchorEl.getBoundingClientRect();
402
- if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
402
+ if (process.env.NODE_ENV !== 'production' && !globalThis.MUI_TEST_ENV && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
403
403
  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'));
404
404
  }
405
405
  } else {
@@ -105,7 +105,7 @@ const PopperTooltip = /*#__PURE__*/React.forwardRef(function PopperTooltip(props
105
105
  if (process.env.NODE_ENV !== 'production') {
106
106
  if (resolvedAnchorElement && isHTMLElement(resolvedAnchorElement) && resolvedAnchorElement.nodeType === 1) {
107
107
  const box = resolvedAnchorElement.getBoundingClientRect();
108
- if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
108
+ if (!globalThis.MUI_TEST_ENV && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
109
109
  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'));
110
110
  }
111
111
  }
@@ -267,7 +267,7 @@ process.env.NODE_ENV !== "production" ? Popper.propTypes /* remove-proptypes */
267
267
  const resolvedAnchorEl = resolveAnchorEl(props.anchorEl);
268
268
  if (resolvedAnchorEl && isHTMLElement(resolvedAnchorEl) && resolvedAnchorEl.nodeType === 1) {
269
269
  const box = resolvedAnchorEl.getBoundingClientRect();
270
- if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
270
+ if (process.env.NODE_ENV !== 'production' && !globalThis.MUI_TEST_ENV && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
271
271
  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'));
272
272
  }
273
273
  } else if (!resolvedAnchorEl || typeof resolvedAnchorEl.getBoundingClientRect !== 'function' || isVirtualElement(resolvedAnchorEl) && resolvedAnchorEl.contextElement != null && resolvedAnchorEl.contextElement.nodeType !== 1) {
@@ -177,6 +177,22 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
177
177
  node: inputRef.current,
178
178
  value
179
179
  }), [value]);
180
+ const open = displayNode !== null && openState;
181
+ React.useEffect(() => {
182
+ if (!open || !anchorElement || autoWidth) {
183
+ return undefined;
184
+ }
185
+ if (typeof ResizeObserver === 'undefined') {
186
+ return undefined;
187
+ }
188
+ const observer = new ResizeObserver(() => {
189
+ setMenuMinWidthState(anchorElement.clientWidth);
190
+ });
191
+ observer.observe(anchorElement);
192
+ return () => {
193
+ observer.disconnect();
194
+ };
195
+ }, [open, anchorElement, autoWidth]);
180
196
 
181
197
  // Resize menu on `defaultOpen` automatic toggle.
182
198
  React.useEffect(() => {
@@ -212,8 +228,8 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
212
228
  }
213
229
  return undefined;
214
230
  }, [labelId]);
215
- const update = (open, event) => {
216
- if (open) {
231
+ const update = (openParam, event) => {
232
+ if (openParam) {
217
233
  if (onOpen) {
218
234
  onOpen(event);
219
235
  }
@@ -222,7 +238,7 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
222
238
  }
223
239
  if (!isOpenControlled) {
224
240
  setMenuMinWidthState(autoWidth ? null : anchorElement.clientWidth);
225
- setOpenState(open);
241
+ setOpenState(openParam);
226
242
  }
227
243
  };
228
244
  const handleMouseDown = event => {
@@ -309,7 +325,6 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
309
325
  onKeyDown?.(event);
310
326
  }
311
327
  };
312
- const open = displayNode !== null && openState;
313
328
  const handleBlur = event => {
314
329
  // if open event.stopImmediatePropagation
315
330
  if (!open && onBlur) {
@@ -263,7 +263,7 @@ process.env.NODE_ENV !== "production" ? Slide.propTypes /* remove-proptypes */ =
263
263
  const resolvedContainer = resolveContainer(props.container);
264
264
  if (resolvedContainer && resolvedContainer.nodeType === 1) {
265
265
  const box = resolvedContainer.getBoundingClientRect();
266
- if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
266
+ if (process.env.NODE_ENV !== 'production' && !globalThis.MUI_TEST_ENV && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {
267
267
  return new Error(['MUI: The `container` 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'));
268
268
  }
269
269
  } else if (!resolvedContainer || typeof resolvedContainer.getBoundingClientRect !== 'function' || resolvedContainer.contextElement != null && resolvedContainer.contextElement.nodeType !== 1) {
@@ -8,6 +8,7 @@ import { OverridableComponent, OverrideProps } from "../OverridableComponent/ind
8
8
  import { TabsClasses } from "./tabsClasses.js";
9
9
  import SvgIcon from "../SvgIcon/index.js";
10
10
  export interface TabsPropsIndicatorColorOverrides {}
11
+ export interface TabsPropsVariantOverrides {}
11
12
  export interface TabsRootSlotPropsOverrides {}
12
13
  export interface TabsScrollerSlotPropsOverrides {}
13
14
  export interface TabsListSlotPropsOverrides {}
@@ -87,7 +88,7 @@ export type TabsSlotsAndSlotProps = CreateSlotsAndSlotProps<TabsSlots, {
87
88
  */
88
89
  indicator: SlotProps<'span', TabsIndicatorSlotPropsOverrides, TabsOwnerState>;
89
90
  /**
90
- * Props forwarded to the scrollButton slot.
91
+ * Props forwarded to the scrollButtons slot.
91
92
  * By default, the available props are based on the [TabScrollButton](https://mui.com/material-ui/api/tab-scroll-button/#props) component.
92
93
  */
93
94
  scrollButtons: SlotProps<typeof TabScrollButton, TabsScrollButtonsSlotPropsOverrides, TabsOwnerState>;
@@ -234,7 +235,7 @@ export interface TabsOwnProps extends TabsSlotsAndSlotProps {
234
235
  * - `standard` will render the default state.
235
236
  * @default 'standard'
236
237
  */
237
- variant?: 'standard' | 'scrollable' | 'fullWidth';
238
+ variant?: OverridableStringUnion<'standard' | 'scrollable' | 'fullWidth', TabsPropsVariantOverrides>;
238
239
  /**
239
240
  * If `true`, the scrollbar is visible. It can be useful when displaying
240
241
  * a long vertical list of tabs.
package/esm/Tabs/Tabs.js CHANGED
@@ -345,7 +345,7 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
345
345
  slots,
346
346
  slotProps: {
347
347
  indicator: TabIndicatorProps,
348
- scrollButton: TabScrollButtonProps,
348
+ scrollButtons: TabScrollButtonProps,
349
349
  ...slotProps
350
350
  }
351
351
  };
@@ -378,7 +378,7 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
378
378
  }
379
379
  tabMeta = tab ? tab.getBoundingClientRect() : null;
380
380
  if (process.env.NODE_ENV !== 'production') {
381
- if (process.env.NODE_ENV !== 'test' && !warnedOnceTabPresent && tabMeta && tabMeta.width === 0 && tabMeta.height === 0 &&
381
+ if (!globalThis.MUI_TEST_ENV && !warnedOnceTabPresent && tabMeta && tabMeta.width === 0 && tabMeta.height === 0 &&
382
382
  // if the whole Tabs component is hidden, don't warn
383
383
  tabsMeta.clientWidth !== 0) {
384
384
  tabsMeta = null;
@@ -148,12 +148,12 @@ function FocusTrap(props) {
148
148
  return;
149
149
  }
150
150
  const doc = ownerDocument(rootRef.current);
151
- const activeElement = getActiveElement(doc);
152
151
  const loopFocus = nativeEvent => {
153
152
  lastKeydown.current = nativeEvent;
154
153
  if (disableEnforceFocus || !isEnabled() || nativeEvent.key !== 'Tab') {
155
154
  return;
156
155
  }
156
+ const activeElement = getActiveElement(doc);
157
157
 
158
158
  // Make sure the next tab starts from the right place.
159
159
  // activeElement refers to the origin.
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/material v7.3.6
2
+ * @mui/material v7.3.8
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the