@mui/material 6.4.6 → 6.4.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 (54) hide show
  1. package/Accordion/Accordion.d.ts +17 -2
  2. package/Accordion/Accordion.js +18 -6
  3. package/AccordionSummary/AccordionSummary.d.ts +59 -4
  4. package/AccordionSummary/AccordionSummary.js +67 -16
  5. package/CHANGELOG.md +67 -4
  6. package/ListItemText/ListItemText.d.ts +10 -0
  7. package/ListItemText/ListItemText.js +14 -5
  8. package/Radio/Radio.js +3 -1
  9. package/Rating/Rating.d.ts +59 -1
  10. package/Rating/Rating.js +131 -45
  11. package/Snackbar/Snackbar.js +7 -1
  12. package/SpeedDial/SpeedDial.d.ts +10 -0
  13. package/SpeedDial/SpeedDial.js +40 -11
  14. package/SpeedDialAction/SpeedDialAction.js +1 -1
  15. package/TextareaAutosize/TextareaAutosize.js +26 -15
  16. package/Tooltip/Tooltip.d.ts +1 -13
  17. package/Tooltip/Tooltip.js +1 -1
  18. package/index.js +1 -1
  19. package/modern/Accordion/Accordion.js +18 -6
  20. package/modern/AccordionSummary/AccordionSummary.js +67 -16
  21. package/modern/ListItemText/ListItemText.js +14 -5
  22. package/modern/Radio/Radio.js +3 -1
  23. package/modern/Rating/Rating.js +131 -45
  24. package/modern/Snackbar/Snackbar.js +7 -1
  25. package/modern/SpeedDial/SpeedDial.js +40 -11
  26. package/modern/SpeedDialAction/SpeedDialAction.js +1 -1
  27. package/modern/TextareaAutosize/TextareaAutosize.js +26 -15
  28. package/modern/Tooltip/Tooltip.js +1 -1
  29. package/modern/index.js +1 -1
  30. package/modern/styles/ThemeProvider.js +11 -0
  31. package/modern/useScrollTrigger/useScrollTrigger.js +3 -0
  32. package/modern/version/index.js +2 -2
  33. package/node/Accordion/Accordion.js +18 -6
  34. package/node/AccordionSummary/AccordionSummary.js +67 -16
  35. package/node/ListItemText/ListItemText.js +14 -5
  36. package/node/Radio/Radio.js +3 -1
  37. package/node/Rating/Rating.js +132 -46
  38. package/node/Snackbar/Snackbar.js +7 -1
  39. package/node/SpeedDial/SpeedDial.js +40 -11
  40. package/node/SpeedDialAction/SpeedDialAction.js +1 -1
  41. package/node/TextareaAutosize/TextareaAutosize.js +25 -14
  42. package/node/Tooltip/Tooltip.js +1 -1
  43. package/node/index.js +1 -1
  44. package/node/styles/ThemeProvider.js +11 -0
  45. package/node/useScrollTrigger/useScrollTrigger.js +3 -0
  46. package/node/version/index.js +2 -2
  47. package/package.json +6 -6
  48. package/styles/ThemeProvider.d.ts +6 -0
  49. package/styles/ThemeProvider.js +11 -0
  50. package/styles/ThemeProviderWithVars.d.ts +1 -0
  51. package/styles/index.d.ts +1 -0
  52. package/useScrollTrigger/useScrollTrigger.d.ts +1 -1
  53. package/useScrollTrigger/useScrollTrigger.js +3 -0
  54. package/version/index.js +2 -2
@@ -29,6 +29,9 @@ export default function useScrollTrigger(options = {}) {
29
29
  const store = React.useRef();
30
30
  const [trigger, setTrigger] = React.useState(() => getTrigger(store, other));
31
31
  React.useEffect(() => {
32
+ if (target === null) {
33
+ return setTrigger(false);
34
+ }
32
35
  const handleScroll = () => {
33
36
  setTrigger(getTrigger(store, {
34
37
  target,
@@ -1,6 +1,6 @@
1
- export const version = "6.4.6";
1
+ export const version = "6.4.8";
2
2
  export const major = Number("6");
3
3
  export const minor = Number("4");
4
- export const patch = Number("6");
4
+ export const patch = Number("8");
5
5
  export const prerelease = undefined;
6
6
  export default version;
@@ -192,6 +192,20 @@ const Accordion = /*#__PURE__*/React.forwardRef(function Accordion(inProps, ref)
192
192
  slots: backwardCompatibleSlots,
193
193
  slotProps: backwardCompatibleSlotProps
194
194
  };
195
+ const [RootSlot, rootProps] = (0, _useSlot.default)('root', {
196
+ elementType: AccordionRoot,
197
+ externalForwardedProps: {
198
+ ...externalForwardedProps,
199
+ ...other
200
+ },
201
+ className: (0, _clsx.default)(classes.root, className),
202
+ shouldForwardComponentProp: true,
203
+ ownerState,
204
+ ref,
205
+ additionalProps: {
206
+ square
207
+ }
208
+ });
195
209
  const [AccordionHeadingSlot, accordionProps] = (0, _useSlot.default)('heading', {
196
210
  elementType: AccordionHeading,
197
211
  externalForwardedProps,
@@ -203,12 +217,8 @@ const Accordion = /*#__PURE__*/React.forwardRef(function Accordion(inProps, ref)
203
217
  externalForwardedProps,
204
218
  ownerState
205
219
  });
206
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(AccordionRoot, {
207
- className: (0, _clsx.default)(classes.root, className),
208
- ref: ref,
209
- ownerState: ownerState,
210
- square: square,
211
- ...other,
220
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(RootSlot, {
221
+ ...rootProps,
212
222
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(AccordionHeadingSlot, {
213
223
  ...accordionProps,
214
224
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_AccordionContext.default.Provider, {
@@ -288,6 +298,7 @@ process.env.NODE_ENV !== "production" ? Accordion.propTypes /* remove-proptypes
288
298
  */
289
299
  slotProps: _propTypes.default.shape({
290
300
  heading: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
301
+ root: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
291
302
  transition: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
292
303
  }),
293
304
  /**
@@ -296,6 +307,7 @@ process.env.NODE_ENV !== "production" ? Accordion.propTypes /* remove-proptypes
296
307
  */
297
308
  slots: _propTypes.default.shape({
298
309
  heading: _propTypes.default.elementType,
310
+ root: _propTypes.default.elementType,
299
311
  transition: _propTypes.default.elementType
300
312
  }),
301
313
  /**
@@ -17,6 +17,7 @@ var _DefaultPropsProvider = require("../DefaultPropsProvider");
17
17
  var _ButtonBase = _interopRequireDefault(require("../ButtonBase"));
18
18
  var _AccordionContext = _interopRequireDefault(require("../Accordion/AccordionContext"));
19
19
  var _accordionSummaryClasses = _interopRequireWildcard(require("./accordionSummaryClasses"));
20
+ var _useSlot = _interopRequireDefault(require("../utils/useSlot"));
20
21
  var _jsxRuntime = require("react/jsx-runtime");
21
22
  const useUtilityClasses = ownerState => {
22
23
  const {
@@ -119,6 +120,8 @@ const AccordionSummary = /*#__PURE__*/React.forwardRef(function AccordionSummary
119
120
  expandIcon,
120
121
  focusVisibleClassName,
121
122
  onClick,
123
+ slots,
124
+ slotProps,
122
125
  ...other
123
126
  } = props;
124
127
  const {
@@ -142,24 +145,54 @@ const AccordionSummary = /*#__PURE__*/React.forwardRef(function AccordionSummary
142
145
  disableGutters
143
146
  };
144
147
  const classes = useUtilityClasses(ownerState);
145
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(AccordionSummaryRoot, {
146
- focusRipple: false,
147
- disableRipple: true,
148
- disabled: disabled,
149
- "aria-expanded": expanded,
148
+ const externalForwardedProps = {
149
+ slots,
150
+ slotProps
151
+ };
152
+ const [RootSlot, rootSlotProps] = (0, _useSlot.default)('root', {
153
+ ref,
154
+ shouldForwardComponentProp: true,
150
155
  className: (0, _clsx.default)(classes.root, className),
151
- focusVisibleClassName: (0, _clsx.default)(classes.focusVisible, focusVisibleClassName),
152
- onClick: handleChange,
153
- ref: ref,
154
- ownerState: ownerState,
155
- ...other,
156
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(AccordionSummaryContent, {
157
- className: classes.content,
158
- ownerState: ownerState,
156
+ elementType: AccordionSummaryRoot,
157
+ externalForwardedProps: {
158
+ ...externalForwardedProps,
159
+ ...other
160
+ },
161
+ ownerState,
162
+ additionalProps: {
163
+ focusRipple: false,
164
+ disableRipple: true,
165
+ disabled,
166
+ 'aria-expanded': expanded,
167
+ focusVisibleClassName: (0, _clsx.default)(classes.focusVisible, focusVisibleClassName)
168
+ },
169
+ getSlotProps: handlers => ({
170
+ ...handlers,
171
+ onClick: event => {
172
+ handlers.onClick?.(event);
173
+ handleChange(event);
174
+ }
175
+ })
176
+ });
177
+ const [ContentSlot, contentSlotProps] = (0, _useSlot.default)('content', {
178
+ className: classes.content,
179
+ elementType: AccordionSummaryContent,
180
+ externalForwardedProps,
181
+ ownerState
182
+ });
183
+ const [ExpandIconWrapperSlot, expandIconWrapperSlotProps] = (0, _useSlot.default)('expandIconWrapper', {
184
+ className: classes.expandIconWrapper,
185
+ elementType: AccordionSummaryExpandIconWrapper,
186
+ externalForwardedProps,
187
+ ownerState
188
+ });
189
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(RootSlot, {
190
+ ...rootSlotProps,
191
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ContentSlot, {
192
+ ...contentSlotProps,
159
193
  children: children
160
- }), expandIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(AccordionSummaryExpandIconWrapper, {
161
- className: classes.expandIconWrapper,
162
- ownerState: ownerState,
194
+ }), expandIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(ExpandIconWrapperSlot, {
195
+ ...expandIconWrapperSlotProps,
163
196
  children: expandIcon
164
197
  })]
165
198
  });
@@ -198,6 +231,24 @@ process.env.NODE_ENV !== "production" ? AccordionSummary.propTypes /* remove-pro
198
231
  * @ignore
199
232
  */
200
233
  onClick: _propTypes.default.func,
234
+ /**
235
+ * The props used for each slot inside.
236
+ * @default {}
237
+ */
238
+ slotProps: _propTypes.default.shape({
239
+ content: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
240
+ expandIconWrapper: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
241
+ root: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
242
+ }),
243
+ /**
244
+ * The components used for each slot inside.
245
+ * @default {}
246
+ */
247
+ slots: _propTypes.default.shape({
248
+ content: _propTypes.default.elementType,
249
+ expandIconWrapper: _propTypes.default.elementType,
250
+ root: _propTypes.default.elementType
251
+ }),
201
252
  /**
202
253
  * The system prop that allows defining system overrides as well as additional CSS styles.
203
254
  */
@@ -114,6 +114,16 @@ const ListItemText = /*#__PURE__*/React.forwardRef(function ListItemText(inProps
114
114
  ...slotProps
115
115
  }
116
116
  };
117
+ const [RootSlot, rootSlotProps] = (0, _useSlot.default)('root', {
118
+ className: (0, _clsx.default)(classes.root, className),
119
+ elementType: ListItemTextRoot,
120
+ externalForwardedProps: {
121
+ ...externalForwardedProps,
122
+ ...other
123
+ },
124
+ ownerState,
125
+ ref
126
+ });
117
127
  const [PrimarySlot, primarySlotProps] = (0, _useSlot.default)('primary', {
118
128
  className: classes.primary,
119
129
  elementType: _Typography.default,
@@ -142,11 +152,8 @@ const ListItemText = /*#__PURE__*/React.forwardRef(function ListItemText(inProps
142
152
  children: secondary
143
153
  });
144
154
  }
145
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(ListItemTextRoot, {
146
- className: (0, _clsx.default)(classes.root, className),
147
- ownerState: ownerState,
148
- ref: ref,
149
- ...other,
155
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(RootSlot, {
156
+ ...rootSlotProps,
150
157
  children: [primary, secondary]
151
158
  });
152
159
  });
@@ -207,6 +214,7 @@ process.env.NODE_ENV !== "production" ? ListItemText.propTypes /* remove-proptyp
207
214
  */
208
215
  slotProps: _propTypes.default.shape({
209
216
  primary: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
217
+ root: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
210
218
  secondary: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
211
219
  }),
212
220
  /**
@@ -215,6 +223,7 @@ process.env.NODE_ENV !== "production" ? ListItemText.propTypes /* remove-proptyp
215
223
  */
216
224
  slots: _propTypes.default.shape({
217
225
  primary: _propTypes.default.elementType,
226
+ root: _propTypes.default.elementType,
218
227
  secondary: _propTypes.default.elementType
219
228
  }),
220
229
  /**
@@ -135,6 +135,7 @@ const Radio = /*#__PURE__*/React.forwardRef(function Radio(inProps, ref) {
135
135
  disableRipple = false,
136
136
  slots = {},
137
137
  slotProps = {},
138
+ inputProps,
138
139
  ...other
139
140
  } = props;
140
141
  const muiFormControl = (0, _useFormControl.default)();
@@ -165,6 +166,7 @@ const Radio = /*#__PURE__*/React.forwardRef(function Radio(inProps, ref) {
165
166
  name = radioGroup.name;
166
167
  }
167
168
  }
169
+ const externalInputProps = slotProps.input ?? inputProps;
168
170
  const [RootSlot, rootSlotProps] = (0, _useSlot.default)('root', {
169
171
  ref,
170
172
  elementType: RadioRoot,
@@ -197,7 +199,7 @@ const Radio = /*#__PURE__*/React.forwardRef(function Radio(inProps, ref) {
197
199
  slots,
198
200
  slotProps: {
199
201
  // Do not forward `slotProps.root` again because it's already handled by the `RootSlot` in this file.
200
- input: typeof slotProps.input === 'function' ? slotProps.input(ownerState) : slotProps.input
202
+ input: typeof externalInputProps === 'function' ? externalInputProps(ownerState) : externalInputProps
201
203
  }
202
204
  }
203
205
  });
@@ -7,7 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
9
  exports.default = void 0;
10
- var React = _interopRequireWildcard(require("react"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var React = _react;
11
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
12
13
  var _clsx = _interopRequireDefault(require("clsx"));
13
14
  var _clamp = _interopRequireDefault(require("@mui/utils/clamp"));
@@ -24,6 +25,7 @@ var _memoTheme = _interopRequireDefault(require("../utils/memoTheme"));
24
25
  var _DefaultPropsProvider = require("../DefaultPropsProvider");
25
26
  var _slotShouldForwardProp = _interopRequireDefault(require("../styles/slotShouldForwardProp"));
26
27
  var _ratingClasses = _interopRequireWildcard(require("./ratingClasses"));
28
+ var _useSlot = _interopRequireDefault(require("../utils/useSlot"));
27
29
  var _jsxRuntime = require("react/jsx-runtime");
28
30
  function getDecimalPrecision(num) {
29
31
  const decimalPart = num.toString().split('.')[1];
@@ -227,7 +229,9 @@ function RatingItem(props) {
227
229
  readOnly,
228
230
  ownerState,
229
231
  ratingValue,
230
- ratingValueRounded
232
+ ratingValueRounded,
233
+ slots = {},
234
+ slotProps = {}
231
235
  } = props;
232
236
  const isFilled = highlightSelectedOnly ? itemValue === ratingValue : itemValue <= ratingValue;
233
237
  const isHovered = itemValue <= hover;
@@ -239,10 +243,14 @@ function RatingItem(props) {
239
243
  // Update to const id = useId(); when React 17 support is dropped.
240
244
  // More details: https://github.com/mui/material-ui/issues/40997
241
245
  const id = `${name}-${(0, _utils.unstable_useId)()}`;
242
- const container = /*#__PURE__*/(0, _jsxRuntime.jsx)(RatingIcon, {
243
- as: IconContainerComponent,
244
- value: itemValue,
246
+ const externalForwardedProps = {
247
+ slots,
248
+ slotProps
249
+ };
250
+ const [IconSlot, iconSlotProps] = (0, _useSlot.default)('icon', {
251
+ elementType: RatingIcon,
245
252
  className: (0, _clsx.default)(classes.icon, isFilled ? classes.iconFilled : classes.iconEmpty, isHovered && classes.iconHover, isFocused && classes.iconFocus, isActive && classes.iconActive),
253
+ externalForwardedProps,
246
254
  ownerState: {
247
255
  ...ownerState,
248
256
  iconEmpty: !isFilled,
@@ -251,6 +259,29 @@ function RatingItem(props) {
251
259
  iconFocus: isFocused,
252
260
  iconActive: isActive
253
261
  },
262
+ additionalProps: {
263
+ value: itemValue
264
+ },
265
+ internalForwardedProps: {
266
+ // TODO: remove this in v7 because `IconContainerComponent` is deprecated
267
+ // only forward if `slots.icon` is NOT provided
268
+ as: IconContainerComponent
269
+ }
270
+ });
271
+ const [LabelSlot, labelSlotProps] = (0, _useSlot.default)('label', {
272
+ elementType: RatingLabel,
273
+ externalForwardedProps,
274
+ ownerState: {
275
+ ...ownerState,
276
+ emptyValueFocused: undefined
277
+ },
278
+ additionalProps: {
279
+ style: labelProps?.style,
280
+ htmlFor: id
281
+ }
282
+ });
283
+ const container = /*#__PURE__*/(0, _jsxRuntime.jsx)(IconSlot, {
284
+ ...iconSlotProps,
254
285
  children: emptyIcon && !isFilled ? emptyIcon : icon
255
286
  });
256
287
  if (readOnly) {
@@ -260,13 +291,8 @@ function RatingItem(props) {
260
291
  });
261
292
  }
262
293
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
263
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(RatingLabel, {
264
- ownerState: {
265
- ...ownerState,
266
- emptyValueFocused: undefined
267
- },
268
- htmlFor: id,
269
- ...labelProps,
294
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(LabelSlot, {
295
+ ...labelSlotProps,
270
296
  children: [container, /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
271
297
  className: classes.visuallyHidden,
272
298
  children: getLabelText(itemValue)
@@ -307,7 +333,9 @@ process.env.NODE_ENV !== "production" ? RatingItem.propTypes = {
307
333
  ownerState: _propTypes.default.object.isRequired,
308
334
  ratingValue: _propTypes.default.number,
309
335
  ratingValueRounded: _propTypes.default.number,
310
- readOnly: _propTypes.default.bool.isRequired
336
+ readOnly: _propTypes.default.bool.isRequired,
337
+ slotProps: _propTypes.default.object,
338
+ slots: _propTypes.default.object
311
339
  } : void 0;
312
340
  const defaultIcon = /*#__PURE__*/(0, _jsxRuntime.jsx)(_Star.default, {
313
341
  fontSize: "inherit"
@@ -344,6 +372,8 @@ const Rating = /*#__PURE__*/React.forwardRef(function Rating(inProps, ref) {
344
372
  readOnly = false,
345
373
  size = 'medium',
346
374
  value: valueProp,
375
+ slots = {},
376
+ slotProps = {},
347
377
  ...other
348
378
  } = props;
349
379
  const name = (0, _utils.unstable_useId)(nameProp);
@@ -481,16 +511,50 @@ const Rating = /*#__PURE__*/React.forwardRef(function Rating(inProps, ref) {
481
511
  size
482
512
  };
483
513
  const classes = useUtilityClasses(ownerState);
484
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(RatingRoot, {
485
- as: component,
514
+ const externalForwardedProps = {
515
+ slots,
516
+ slotProps
517
+ };
518
+ const [RootSlot, rootSlotProps] = (0, _useSlot.default)('root', {
486
519
  ref: handleRef,
487
- onMouseMove: handleMouseMove,
488
- onMouseLeave: handleMouseLeave,
489
- className: (0, _clsx.default)(classes.root, className, readOnly && 'MuiRating-readOnly'),
490
- ownerState: ownerState,
491
- role: readOnly ? 'img' : null,
492
- "aria-label": readOnly ? getLabelText(value) : null,
493
- ...other,
520
+ className: (0, _clsx.default)(classes.root, className),
521
+ elementType: RatingRoot,
522
+ externalForwardedProps: {
523
+ ...externalForwardedProps,
524
+ ...other,
525
+ component
526
+ },
527
+ getSlotProps: handlers => ({
528
+ ...handlers,
529
+ onMouseMove: event => {
530
+ handleMouseMove(event);
531
+ handlers.onMouseMove?.(event);
532
+ },
533
+ onMouseLeave: event => {
534
+ handleMouseLeave(event);
535
+ handlers.onMouseLeave?.(event);
536
+ }
537
+ }),
538
+ ownerState,
539
+ additionalProps: {
540
+ role: readOnly ? 'img' : null,
541
+ 'aria-label': readOnly ? getLabelText(value) : null
542
+ }
543
+ });
544
+ const [LabelSlot, labelSlotProps] = (0, _useSlot.default)('label', {
545
+ className: (0, _clsx.default)(classes.label, classes.labelEmptyValue),
546
+ elementType: RatingLabel,
547
+ externalForwardedProps,
548
+ ownerState
549
+ });
550
+ const [DecimalSlot, decimalSlotProps] = (0, _useSlot.default)('decimal', {
551
+ className: classes.decimal,
552
+ elementType: RatingDecimal,
553
+ externalForwardedProps,
554
+ ownerState
555
+ });
556
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(RootSlot, {
557
+ ...rootSlotProps,
494
558
  children: [Array.from(new Array(max)).map((_, index) => {
495
559
  const itemValue = index + 1;
496
560
  const ratingItemProps = {
@@ -511,41 +575,42 @@ const Rating = /*#__PURE__*/React.forwardRef(function Rating(inProps, ref) {
511
575
  ratingValue: value,
512
576
  ratingValueRounded: valueRounded,
513
577
  readOnly,
514
- ownerState
578
+ ownerState,
579
+ slots,
580
+ slotProps
515
581
  };
516
582
  const isActive = itemValue === Math.ceil(value) && (hover !== -1 || focus !== -1);
517
583
  if (precision < 1) {
518
584
  const items = Array.from(new Array(1 / precision));
519
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(RatingDecimal, {
520
- className: (0, _clsx.default)(classes.decimal, isActive && classes.iconActive),
521
- ownerState: ownerState,
522
- iconActive: isActive,
523
- children: items.map(($, indexDecimal) => {
524
- const itemDecimalValue = roundValueToPrecision(itemValue - 1 + (indexDecimal + 1) * precision, precision);
525
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(RatingItem, {
526
- ...ratingItemProps,
527
- // The icon is already displayed as active
528
- isActive: false,
529
- itemValue: itemDecimalValue,
530
- labelProps: {
531
- style: items.length - 1 === indexDecimal ? {} : {
532
- width: itemDecimalValue === value ? `${(indexDecimal + 1) * precision * 100}%` : '0%',
533
- overflow: 'hidden',
534
- position: 'absolute'
535
- }
585
+ return /*#__PURE__*/(0, _react.createElement)(DecimalSlot, {
586
+ ...decimalSlotProps,
587
+ key: itemValue,
588
+ className: (0, _clsx.default)(decimalSlotProps.className, isActive && classes.iconActive),
589
+ iconActive: isActive
590
+ }, items.map(($, indexDecimal) => {
591
+ const itemDecimalValue = roundValueToPrecision(itemValue - 1 + (indexDecimal + 1) * precision, precision);
592
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(RatingItem, {
593
+ ...ratingItemProps,
594
+ // The icon is already displayed as active
595
+ isActive: false,
596
+ itemValue: itemDecimalValue,
597
+ labelProps: {
598
+ style: items.length - 1 === indexDecimal ? {} : {
599
+ width: itemDecimalValue === value ? `${(indexDecimal + 1) * precision * 100}%` : '0%',
600
+ overflow: 'hidden',
601
+ position: 'absolute'
536
602
  }
537
- }, itemDecimalValue);
538
- })
539
- }, itemValue);
603
+ }
604
+ }, itemDecimalValue);
605
+ }));
540
606
  }
541
607
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(RatingItem, {
542
608
  ...ratingItemProps,
543
609
  isActive: isActive,
544
610
  itemValue: itemValue
545
611
  }, itemValue);
546
- }), !readOnly && !disabled && /*#__PURE__*/(0, _jsxRuntime.jsxs)(RatingLabel, {
547
- className: (0, _clsx.default)(classes.label, classes.labelEmptyValue),
548
- ownerState: ownerState,
612
+ }), !readOnly && !disabled && /*#__PURE__*/(0, _jsxRuntime.jsxs)(LabelSlot, {
613
+ ...labelSlotProps,
549
614
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
550
615
  className: classes.visuallyHidden,
551
616
  value: "",
@@ -629,6 +694,7 @@ process.env.NODE_ENV !== "production" ? Rating.propTypes /* remove-proptypes */
629
694
  icon: _propTypes.default.node,
630
695
  /**
631
696
  * The component containing the icon.
697
+ * @deprecated Use `slotProps.icon.component` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.
632
698
  * @default function IconContainer(props) {
633
699
  * const { value, ...other } = props;
634
700
  * return <span {...other} />;
@@ -686,6 +752,26 @@ process.env.NODE_ENV !== "production" ? Rating.propTypes /* remove-proptypes */
686
752
  * @default 'medium'
687
753
  */
688
754
  size: _propTypes.default /* @typescript-to-proptypes-ignore */.oneOfType([_propTypes.default.oneOf(['small', 'medium', 'large']), _propTypes.default.string]),
755
+ /**
756
+ * The props used for each slot inside.
757
+ * @default {}
758
+ */
759
+ slotProps: _propTypes.default.shape({
760
+ decimal: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
761
+ icon: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
762
+ label: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
763
+ root: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
764
+ }),
765
+ /**
766
+ * The components used for each slot inside.
767
+ * @default {}
768
+ */
769
+ slots: _propTypes.default.shape({
770
+ decimal: _propTypes.default.elementType,
771
+ icon: _propTypes.default.elementType,
772
+ label: _propTypes.default.elementType,
773
+ root: _propTypes.default.elementType
774
+ }),
689
775
  /**
690
776
  * The system prop that allows defining system overrides as well as additional CSS styles.
691
777
  */
@@ -203,7 +203,10 @@ const Snackbar = /*#__PURE__*/React.forwardRef(function Snackbar(inProps, ref) {
203
203
  },
204
204
  ownerState
205
205
  });
206
- const [ClickAwaySlot, clickAwayListenerProps] = (0, _useSlot.default)('clickAwayListener', {
206
+ const [ClickAwaySlot, {
207
+ ownerState: clickAwayOwnerStateProp,
208
+ ...clickAwayListenerProps
209
+ }] = (0, _useSlot.default)('clickAwayListener', {
207
210
  elementType: _ClickAwayListener.default,
208
211
  externalForwardedProps,
209
212
  getSlotProps: handlers => ({
@@ -252,6 +255,9 @@ const Snackbar = /*#__PURE__*/React.forwardRef(function Snackbar(inProps, ref) {
252
255
  }
253
256
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(ClickAwaySlot, {
254
257
  ...clickAwayListenerProps,
258
+ ...(slots.clickAwayListener && {
259
+ ownerState: clickAwayOwnerStateProp
260
+ }),
255
261
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Root, {
256
262
  ...rootProps,
257
263
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(TransitionSlot, {
@@ -379,22 +379,49 @@ const SpeedDial = /*#__PURE__*/React.forwardRef(function SpeedDial(inProps, ref)
379
379
  slots: backwardCompatibleSlots,
380
380
  slotProps: backwardCompatibleSlotProps
381
381
  };
382
+ const [RootSlot, rootSlotProps] = (0, _useSlot.default)('root', {
383
+ elementType: SpeedDialRoot,
384
+ externalForwardedProps: {
385
+ ...externalForwardedProps,
386
+ ...other
387
+ },
388
+ ownerState,
389
+ ref,
390
+ className: (0, _clsx.default)(classes.root, className),
391
+ additionalProps: {
392
+ role: 'presentation'
393
+ },
394
+ getSlotProps: handlers => ({
395
+ ...handlers,
396
+ onKeyDown: event => {
397
+ handlers.onKeyDown?.(event);
398
+ handleKeyDown(event);
399
+ },
400
+ onBlur: event => {
401
+ handlers.onBlur?.(event);
402
+ handleClose(event);
403
+ },
404
+ onFocus: event => {
405
+ handlers.onFocus?.(event);
406
+ handleOpen(event);
407
+ },
408
+ onMouseEnter: event => {
409
+ handlers.onMouseEnter?.(event);
410
+ handleOpen(event);
411
+ },
412
+ onMouseLeave: event => {
413
+ handlers.onMouseLeave?.(event);
414
+ handleClose(event);
415
+ }
416
+ })
417
+ });
382
418
  const [TransitionSlot, transitionProps] = (0, _useSlot.default)('transition', {
383
419
  elementType: _Zoom.default,
384
420
  externalForwardedProps,
385
421
  ownerState
386
422
  });
387
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(SpeedDialRoot, {
388
- className: (0, _clsx.default)(classes.root, className),
389
- ref: ref,
390
- role: "presentation",
391
- onKeyDown: handleKeyDown,
392
- onBlur: handleClose,
393
- onFocus: handleOpen,
394
- onMouseEnter: handleOpen,
395
- onMouseLeave: handleClose,
396
- ownerState: ownerState,
397
- ...other,
423
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(RootSlot, {
424
+ ...rootSlotProps,
398
425
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(TransitionSlot, {
399
426
  in: !hidden,
400
427
  timeout: transitionDuration,
@@ -514,6 +541,7 @@ process.env.NODE_ENV !== "production" ? SpeedDial.propTypes /* remove-proptypes
514
541
  * @default {}
515
542
  */
516
543
  slotProps: _propTypes.default.shape({
544
+ root: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
517
545
  transition: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
518
546
  }),
519
547
  /**
@@ -521,6 +549,7 @@ process.env.NODE_ENV !== "production" ? SpeedDial.propTypes /* remove-proptypes
521
549
  * @default {}
522
550
  */
523
551
  slots: _propTypes.default.shape({
552
+ root: _propTypes.default.elementType,
524
553
  transition: _propTypes.default.elementType
525
554
  }),
526
555
  /**
@@ -348,7 +348,7 @@ process.env.NODE_ENV !== "production" ? SpeedDialAction.propTypes /* remove-prop
348
348
  * @default 'left'
349
349
  * @deprecated Use `slotProps.tooltip.placement` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.
350
350
  */
351
- tooltipPlacement: _propTypes.default.oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),
351
+ tooltipPlacement: _propTypes.default.oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),
352
352
  /**
353
353
  * Label to display in the tooltip.
354
354
  * @deprecated Use `slotProps.tooltip.title` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.