@mui/material 6.2.1 → 6.3.1

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/AccordionSummary/AccordionSummary.js +4 -3
  2. package/AppBar/AppBar.d.ts +1 -1
  3. package/AppBar/AppBar.js +1 -1
  4. package/Autocomplete/Autocomplete.js +36 -49
  5. package/Backdrop/Backdrop.js +1 -9
  6. package/CHANGELOG.md +77 -0
  7. package/Collapse/Collapse.js +5 -4
  8. package/Fade/Fade.js +5 -2
  9. package/FilledInput/FilledInput.js +1 -3
  10. package/Grow/Grow.js +5 -2
  11. package/Icon/Icon.js +1 -3
  12. package/Input/Input.js +1 -3
  13. package/OutlinedInput/OutlinedInput.js +1 -3
  14. package/Select/selectClasses.d.ts +9 -3
  15. package/Slide/Slide.js +5 -2
  16. package/StepContent/StepContent.d.ts +31 -2
  17. package/StepContent/StepContent.js +39 -7
  18. package/StepLabel/StepLabel.js +1 -3
  19. package/SvgIcon/SvgIcon.js +1 -3
  20. package/TablePagination/TablePagination.d.ts +134 -18
  21. package/TablePagination/TablePagination.js +89 -33
  22. package/TableSortLabel/TableSortLabel.d.ts +43 -1
  23. package/TableSortLabel/TableSortLabel.js +40 -7
  24. package/Tooltip/Tooltip.js +1 -1
  25. package/Zoom/Zoom.js +5 -2
  26. package/index.js +1 -1
  27. package/modern/AccordionSummary/AccordionSummary.js +4 -3
  28. package/modern/AppBar/AppBar.js +1 -1
  29. package/modern/Autocomplete/Autocomplete.js +36 -49
  30. package/modern/Backdrop/Backdrop.js +1 -9
  31. package/modern/Collapse/Collapse.js +5 -4
  32. package/modern/Fade/Fade.js +5 -2
  33. package/modern/FilledInput/FilledInput.js +1 -3
  34. package/modern/Grow/Grow.js +5 -2
  35. package/modern/Icon/Icon.js +1 -3
  36. package/modern/Input/Input.js +1 -3
  37. package/modern/OutlinedInput/OutlinedInput.js +1 -3
  38. package/modern/Slide/Slide.js +5 -2
  39. package/modern/StepContent/StepContent.js +39 -7
  40. package/modern/StepLabel/StepLabel.js +1 -3
  41. package/modern/SvgIcon/SvgIcon.js +1 -3
  42. package/modern/TablePagination/TablePagination.js +89 -33
  43. package/modern/TableSortLabel/TableSortLabel.js +40 -7
  44. package/modern/Tooltip/Tooltip.js +1 -1
  45. package/modern/Zoom/Zoom.js +5 -2
  46. package/modern/index.js +1 -1
  47. package/modern/version/index.js +2 -2
  48. package/node/AccordionSummary/AccordionSummary.js +4 -3
  49. package/node/AppBar/AppBar.js +1 -1
  50. package/node/Autocomplete/Autocomplete.js +36 -49
  51. package/node/Backdrop/Backdrop.js +1 -9
  52. package/node/Collapse/Collapse.js +5 -4
  53. package/node/Fade/Fade.js +5 -2
  54. package/node/FilledInput/FilledInput.js +1 -3
  55. package/node/Grow/Grow.js +5 -2
  56. package/node/Icon/Icon.js +1 -3
  57. package/node/Input/Input.js +1 -3
  58. package/node/OutlinedInput/OutlinedInput.js +1 -3
  59. package/node/Slide/Slide.js +5 -2
  60. package/node/StepContent/StepContent.js +39 -7
  61. package/node/StepLabel/StepLabel.js +1 -3
  62. package/node/SvgIcon/SvgIcon.js +1 -3
  63. package/node/TablePagination/TablePagination.js +89 -33
  64. package/node/TableSortLabel/TableSortLabel.js +40 -7
  65. package/node/Tooltip/Tooltip.js +1 -1
  66. package/node/Zoom/Zoom.js +5 -2
  67. package/node/index.js +1 -1
  68. package/node/version/index.js +2 -2
  69. package/package.json +6 -6
  70. package/useAutocomplete/useAutocomplete.d.ts +20 -5
  71. package/version/index.js +2 -2
@@ -650,53 +650,6 @@ const Autocomplete = /*#__PURE__*/React.forwardRef(function Autocomplete(inProps
650
650
  };
651
651
  const clearIndicatorSlotProps = externalForwardedProps.slotProps.clearIndicator;
652
652
  const popupIndicatorSlotProps = externalForwardedProps.slotProps.popupIndicator;
653
- const renderAutocompletePopperChildren = children => /*#__PURE__*/_jsx(AutocompletePopper, {
654
- as: PopperSlot,
655
- ...popperProps,
656
- children: /*#__PURE__*/_jsx(AutocompletePaper, {
657
- as: PaperSlot,
658
- ...paperProps,
659
- children: children
660
- })
661
- });
662
- let autocompletePopper = null;
663
- if (groupedOptions.length > 0) {
664
- autocompletePopper = renderAutocompletePopperChildren(
665
- /*#__PURE__*/
666
- // TODO v7: remove `as` prop and move ListboxComponentProp to externalForwardedProps or remove ListboxComponentProp entirely
667
- // https://github.com/mui/material-ui/pull/43994#issuecomment-2401945800
668
- _jsx(ListboxSlot, {
669
- as: ListboxComponentProp,
670
- ...listboxProps,
671
- children: groupedOptions.map((option, index) => {
672
- if (groupBy) {
673
- return renderGroup({
674
- key: option.key,
675
- group: option.group,
676
- children: option.options.map((option2, index2) => renderListOption(option2, option.index + index2))
677
- });
678
- }
679
- return renderListOption(option, index);
680
- })
681
- }));
682
- } else if (loading && groupedOptions.length === 0) {
683
- autocompletePopper = renderAutocompletePopperChildren(/*#__PURE__*/_jsx(AutocompleteLoading, {
684
- className: classes.loading,
685
- ownerState: ownerState,
686
- children: loadingText
687
- }));
688
- } else if (groupedOptions.length === 0 && !freeSolo && !loading) {
689
- autocompletePopper = renderAutocompletePopperChildren(/*#__PURE__*/_jsx(AutocompleteNoOptions, {
690
- className: classes.noOptions,
691
- ownerState: ownerState,
692
- role: "presentation",
693
- onMouseDown: event => {
694
- // Prevent input blur when interacting with the "no options" content
695
- event.preventDefault();
696
- },
697
- children: noOptionsText
698
- }));
699
- }
700
653
  return /*#__PURE__*/_jsxs(React.Fragment, {
701
654
  children: [/*#__PURE__*/_jsx(AutocompleteRoot, {
702
655
  ref: ref,
@@ -750,7 +703,41 @@ const Autocomplete = /*#__PURE__*/React.forwardRef(function Autocomplete(inProps
750
703
  ...getInputProps()
751
704
  }
752
705
  })
753
- }), anchorEl ? autocompletePopper : null]
706
+ }), anchorEl ? /*#__PURE__*/_jsx(AutocompletePopper, {
707
+ as: PopperSlot,
708
+ ...popperProps,
709
+ children: /*#__PURE__*/_jsxs(AutocompletePaper, {
710
+ as: PaperSlot,
711
+ ...paperProps,
712
+ children: [loading && groupedOptions.length === 0 ? /*#__PURE__*/_jsx(AutocompleteLoading, {
713
+ className: classes.loading,
714
+ ownerState: ownerState,
715
+ children: loadingText
716
+ }) : null, groupedOptions.length === 0 && !freeSolo && !loading ? /*#__PURE__*/_jsx(AutocompleteNoOptions, {
717
+ className: classes.noOptions,
718
+ ownerState: ownerState,
719
+ role: "presentation",
720
+ onMouseDown: event => {
721
+ // Prevent input blur when interacting with the "no options" content
722
+ event.preventDefault();
723
+ },
724
+ children: noOptionsText
725
+ }) : null, groupedOptions.length > 0 ? /*#__PURE__*/_jsx(ListboxSlot, {
726
+ as: ListboxComponentProp,
727
+ ...listboxProps,
728
+ children: groupedOptions.map((option, index) => {
729
+ if (groupBy) {
730
+ return renderGroup({
731
+ key: option.key,
732
+ group: option.group,
733
+ children: option.options.map((option2, index2) => renderListOption(option2, option.index + index2))
734
+ });
735
+ }
736
+ return renderListOption(option, index);
737
+ })
738
+ }) : null]
739
+ })
740
+ }) : null]
754
741
  });
755
742
  });
756
743
  process.env.NODE_ENV !== "production" ? Autocomplete.propTypes /* remove-proptypes */ = {
@@ -952,7 +939,7 @@ process.env.NODE_ENV !== "production" ? Autocomplete.propTypes /* remove-proptyp
952
939
  * If provided, the options will be grouped under the returned string.
953
940
  * The groupBy value is also used as the text for group headings when `renderGroup` is not provided.
954
941
  *
955
- * @param {Value} options The options to group.
942
+ * @param {Value} option The Autocomplete option.
956
943
  * @returns {string}
957
944
  */
958
945
  groupBy: PropTypes.func,
@@ -10,13 +10,6 @@ import useSlot from "../utils/useSlot.js";
10
10
  import Fade from "../Fade/index.js";
11
11
  import { getBackdropUtilityClass } from "./backdropClasses.js";
12
12
  import { jsx as _jsx } from "react/jsx-runtime";
13
- const removeOwnerState = props => {
14
- const {
15
- ownerState,
16
- ...rest
17
- } = props;
18
- return rest;
19
- };
20
13
  const useUtilityClasses = ownerState => {
21
14
  const {
22
15
  classes,
@@ -105,12 +98,11 @@ const Backdrop = /*#__PURE__*/React.forwardRef(function Backdrop(inProps, ref) {
105
98
  externalForwardedProps,
106
99
  ownerState
107
100
  });
108
- const transitionPropsRemoved = removeOwnerState(transitionProps);
109
101
  return /*#__PURE__*/_jsx(TransitionSlot, {
110
102
  in: open,
111
103
  timeout: transitionDuration,
112
104
  ...other,
113
- ...transitionPropsRemoved,
105
+ ...transitionProps,
114
106
  children: /*#__PURE__*/_jsx(RootSlot, {
115
107
  "aria-hidden": true,
116
108
  ...rootProps,
@@ -272,7 +272,10 @@ const Collapse = /*#__PURE__*/React.forwardRef(function Collapse(inProps, ref) {
272
272
  nodeRef: nodeRef,
273
273
  timeout: timeout === 'auto' ? null : timeout,
274
274
  ...other,
275
- children: (state, childProps) => /*#__PURE__*/_jsx(CollapseRoot, {
275
+ children: (state, {
276
+ ownerState: incomingOwnerState,
277
+ ...restChildProps
278
+ }) => /*#__PURE__*/_jsx(CollapseRoot, {
276
279
  as: component,
277
280
  className: clsx(classes.root, className, {
278
281
  'entered': classes.entered,
@@ -283,13 +286,11 @@ const Collapse = /*#__PURE__*/React.forwardRef(function Collapse(inProps, ref) {
283
286
  ...style
284
287
  },
285
288
  ref: handleRef,
286
- ...childProps,
287
- // `ownerState` is set after `childProps` to override any existing `ownerState` property in `childProps`
288
- // that might have been forwarded from the Transition component.
289
289
  ownerState: {
290
290
  ...ownerState,
291
291
  state
292
292
  },
293
+ ...restChildProps,
293
294
  children: /*#__PURE__*/_jsx(CollapseWrapper, {
294
295
  ownerState: {
295
296
  ...ownerState,
@@ -114,7 +114,10 @@ const Fade = /*#__PURE__*/React.forwardRef(function Fade(props, ref) {
114
114
  addEndListener: handleAddEndListener,
115
115
  timeout: timeout,
116
116
  ...other,
117
- children: (state, childProps) => {
117
+ children: (state, {
118
+ ownerState,
119
+ ...restChildProps
120
+ }) => {
118
121
  return /*#__PURE__*/React.cloneElement(children, {
119
122
  style: {
120
123
  opacity: 0,
@@ -124,7 +127,7 @@ const Fade = /*#__PURE__*/React.forwardRef(function Fade(props, ref) {
124
127
  ...children.props.style
125
128
  },
126
129
  ref: handleRef,
127
- ...childProps
130
+ ...restChildProps
128
131
  });
129
132
  }
130
133
  });
@@ -512,7 +512,5 @@ process.env.NODE_ENV !== "production" ? FilledInput.propTypes /* remove-proptype
512
512
  */
513
513
  value: PropTypes.any
514
514
  } : void 0;
515
- if (FilledInput) {
516
- FilledInput.muiName = 'Input';
517
- }
515
+ FilledInput.muiName = 'Input';
518
516
  export default FilledInput;
@@ -163,7 +163,10 @@ const Grow = /*#__PURE__*/React.forwardRef(function Grow(props, ref) {
163
163
  addEndListener: handleAddEndListener,
164
164
  timeout: timeout === 'auto' ? null : timeout,
165
165
  ...other,
166
- children: (state, childProps) => {
166
+ children: (state, {
167
+ ownerState,
168
+ ...restChildProps
169
+ }) => {
167
170
  return /*#__PURE__*/React.cloneElement(children, {
168
171
  style: {
169
172
  opacity: 0,
@@ -174,7 +177,7 @@ const Grow = /*#__PURE__*/React.forwardRef(function Grow(props, ref) {
174
177
  ...children.props.style
175
178
  },
176
179
  ref: handleRef,
177
- ...childProps
180
+ ...restChildProps
178
181
  });
179
182
  }
180
183
  });
@@ -181,7 +181,5 @@ process.env.NODE_ENV !== "production" ? Icon.propTypes /* remove-proptypes */ =
181
181
  */
182
182
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
183
183
  } : void 0;
184
- if (Icon) {
185
- Icon.muiName = 'Icon';
186
- }
184
+ Icon.muiName = 'Icon';
187
185
  export default Icon;
@@ -357,7 +357,5 @@ process.env.NODE_ENV !== "production" ? Input.propTypes /* remove-proptypes */ =
357
357
  */
358
358
  value: PropTypes.any
359
359
  } : void 0;
360
- if (Input) {
361
- Input.muiName = 'Input';
362
- }
360
+ Input.muiName = 'Input';
363
361
  export default Input;
@@ -406,7 +406,5 @@ process.env.NODE_ENV !== "production" ? OutlinedInput.propTypes /* remove-propty
406
406
  */
407
407
  value: PropTypes.any
408
408
  } : void 0;
409
- if (OutlinedInput) {
410
- OutlinedInput.muiName = 'Input';
411
- }
409
+ OutlinedInput.muiName = 'Input';
412
410
  export default OutlinedInput;
@@ -217,7 +217,10 @@ const Slide = /*#__PURE__*/React.forwardRef(function Slide(props, ref) {
217
217
  in: inProp,
218
218
  timeout: timeout,
219
219
  ...other,
220
- children: (state, childProps) => {
220
+ children: (state, {
221
+ ownerState,
222
+ ...restChildProps
223
+ }) => {
221
224
  return /*#__PURE__*/React.cloneElement(children, {
222
225
  ref: handleRef,
223
226
  style: {
@@ -225,7 +228,7 @@ const Slide = /*#__PURE__*/React.forwardRef(function Slide(props, ref) {
225
228
  ...style,
226
229
  ...children.props.style
227
230
  },
228
- ...childProps
231
+ ...restChildProps
229
232
  });
230
233
  }
231
234
  });
@@ -11,6 +11,7 @@ import Collapse from "../Collapse/index.js";
11
11
  import StepperContext from "../Stepper/StepperContext.js";
12
12
  import StepContext from "../Step/StepContext.js";
13
13
  import { getStepContentUtilityClass } from "./stepContentClasses.js";
14
+ import useSlot from "../utils/useSlot.js";
14
15
  import { jsx as _jsx } from "react/jsx-runtime";
15
16
  const useUtilityClasses = ownerState => {
16
17
  const {
@@ -66,6 +67,8 @@ const StepContent = /*#__PURE__*/React.forwardRef(function StepContent(inProps,
66
67
  TransitionComponent = Collapse,
67
68
  transitionDuration: transitionDurationProp = 'auto',
68
69
  TransitionProps,
70
+ slots = {},
71
+ slotProps = {},
69
72
  ...other
70
73
  } = props;
71
74
  const {
@@ -90,19 +93,32 @@ const StepContent = /*#__PURE__*/React.forwardRef(function StepContent(inProps,
90
93
  if (transitionDurationProp === 'auto' && !TransitionComponent.muiSupportAuto) {
91
94
  transitionDuration = undefined;
92
95
  }
96
+ const externalForwardedProps = {
97
+ slots,
98
+ slotProps: {
99
+ transition: TransitionProps,
100
+ ...slotProps
101
+ }
102
+ };
103
+ const [TransitionSlot, transitionProps] = useSlot('transition', {
104
+ elementType: StepContentTransition,
105
+ externalForwardedProps,
106
+ ownerState,
107
+ className: classes.transition,
108
+ additionalProps: {
109
+ in: active || expanded,
110
+ timeout: transitionDuration,
111
+ unmountOnExit: true
112
+ }
113
+ });
93
114
  return /*#__PURE__*/_jsx(StepContentRoot, {
94
115
  className: clsx(classes.root, className),
95
116
  ref: ref,
96
117
  ownerState: ownerState,
97
118
  ...other,
98
- children: /*#__PURE__*/_jsx(StepContentTransition, {
119
+ children: /*#__PURE__*/_jsx(TransitionSlot, {
99
120
  as: TransitionComponent,
100
- in: active || expanded,
101
- className: classes.transition,
102
- ownerState: ownerState,
103
- timeout: transitionDuration,
104
- unmountOnExit: true,
105
- ...TransitionProps,
121
+ ...transitionProps,
106
122
  children: children
107
123
  })
108
124
  });
@@ -124,6 +140,20 @@ process.env.NODE_ENV !== "production" ? StepContent.propTypes /* remove-proptype
124
140
  * @ignore
125
141
  */
126
142
  className: PropTypes.string,
143
+ /**
144
+ * The props used for each slot inside.
145
+ * @default {}
146
+ */
147
+ slotProps: PropTypes.shape({
148
+ transition: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
149
+ }),
150
+ /**
151
+ * The components used for each slot inside.
152
+ * @default {}
153
+ */
154
+ slots: PropTypes.shape({
155
+ transition: PropTypes.elementType
156
+ }),
127
157
  /**
128
158
  * The system prop that allows defining system overrides as well as additional CSS styles.
129
159
  */
@@ -132,6 +162,7 @@ process.env.NODE_ENV !== "production" ? StepContent.propTypes /* remove-proptype
132
162
  * The component used for the transition.
133
163
  * [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
134
164
  * @default Collapse
165
+ * @deprecated Use `slots.transition` instead. This prop will be removed in v7. [How to migrate](/material-ui/migration/migrating-from-deprecated-apis/).
135
166
  */
136
167
  TransitionComponent: PropTypes.elementType,
137
168
  /**
@@ -149,6 +180,7 @@ process.env.NODE_ENV !== "production" ? StepContent.propTypes /* remove-proptype
149
180
  /**
150
181
  * Props applied to the transition element.
151
182
  * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
183
+ * @deprecated Use `slotProps.transition` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.
152
184
  */
153
185
  TransitionProps: PropTypes.object
154
186
  } : void 0;
@@ -267,7 +267,5 @@ process.env.NODE_ENV !== "production" ? StepLabel.propTypes /* remove-proptypes
267
267
  */
268
268
  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
269
269
  } : void 0;
270
- if (StepLabel) {
271
- StepLabel.muiName = 'StepLabel';
272
- }
270
+ StepLabel.muiName = 'StepLabel';
273
271
  export default StepLabel;
@@ -230,7 +230,5 @@ process.env.NODE_ENV !== "production" ? SvgIcon.propTypes /* remove-proptypes */
230
230
  */
231
231
  viewBox: PropTypes.string
232
232
  } : void 0;
233
- if (SvgIcon) {
234
- SvgIcon.muiName = 'SvgIcon';
235
- }
233
+ SvgIcon.muiName = 'SvgIcon';
236
234
  export default SvgIcon;
@@ -7,7 +7,6 @@ import clsx from 'clsx';
7
7
  import integerPropType from '@mui/utils/integerPropType';
8
8
  import chainPropTypes from '@mui/utils/chainPropTypes';
9
9
  import composeClasses from '@mui/utils/composeClasses';
10
- import isHostComponent from "../utils/isHostComponent.js";
11
10
  import { styled } from "../zero-styled/index.js";
12
11
  import memoTheme from "../utils/memoTheme.js";
13
12
  import { useDefaultProps } from "../DefaultPropsProvider/index.js";
@@ -19,6 +18,7 @@ import Toolbar from "../Toolbar/index.js";
19
18
  import TablePaginationActions from "./TablePaginationActions.js";
20
19
  import useId from "../utils/useId.js";
21
20
  import tablePaginationClasses, { getTablePaginationUtilityClass } from "./tablePaginationClasses.js";
21
+ import useSlot from "../utils/useSlot.js";
22
22
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
23
23
  import { createElement as _createElement } from "react";
24
24
  const TablePaginationRoot = styled(TableCell, {
@@ -154,7 +154,6 @@ const TablePagination = /*#__PURE__*/React.forwardRef(function TablePagination(i
154
154
  const {
155
155
  ActionsComponent = TablePaginationActions,
156
156
  backIconButtonProps,
157
- className,
158
157
  colSpan: colSpanProp,
159
158
  component = TableCell,
160
159
  count,
@@ -191,22 +190,73 @@ const TablePagination = /*#__PURE__*/React.forwardRef(function TablePagination(i
191
190
  }
192
191
  return rowsPerPage === -1 ? count : Math.min(count, (page + 1) * rowsPerPage);
193
192
  };
194
- return /*#__PURE__*/_jsx(TablePaginationRoot, {
195
- colSpan: colSpan,
196
- ref: ref,
197
- as: component,
198
- ownerState: ownerState,
199
- className: clsx(classes.root, className),
200
- ...other,
201
- children: /*#__PURE__*/_jsxs(TablePaginationToolbar, {
202
- className: classes.toolbar,
203
- children: [/*#__PURE__*/_jsx(TablePaginationSpacer, {
204
- className: classes.spacer
205
- }), rowsPerPageOptions.length > 1 && /*#__PURE__*/_jsx(TablePaginationSelectLabel, {
206
- className: classes.selectLabel,
207
- id: labelId,
193
+ const externalForwardedProps = {
194
+ slots,
195
+ slotProps
196
+ };
197
+ const [RootSlot, rootSlotProps] = useSlot('root', {
198
+ ref,
199
+ className: classes.root,
200
+ elementType: TablePaginationRoot,
201
+ externalForwardedProps: {
202
+ ...externalForwardedProps,
203
+ component,
204
+ ...other
205
+ },
206
+ ownerState,
207
+ additionalProps: {
208
+ colSpan
209
+ }
210
+ });
211
+ const [ToolbarSlot, toolbarSlotProps] = useSlot('toolbar', {
212
+ className: classes.toolbar,
213
+ elementType: TablePaginationToolbar,
214
+ externalForwardedProps,
215
+ ownerState
216
+ });
217
+ const [SpacerSlot, spacerSlotProps] = useSlot('spacer', {
218
+ className: classes.spacer,
219
+ elementType: TablePaginationSpacer,
220
+ externalForwardedProps,
221
+ ownerState
222
+ });
223
+ const [SelectLabelSlot, selectLabelSlotProps] = useSlot('selectLabel', {
224
+ className: classes.selectLabel,
225
+ elementType: TablePaginationSelectLabel,
226
+ externalForwardedProps,
227
+ ownerState,
228
+ additionalProps: {
229
+ id: labelId
230
+ }
231
+ });
232
+ const [SelectSlot, selectSlotProps] = useSlot('select', {
233
+ className: classes.select,
234
+ elementType: TablePaginationSelect,
235
+ externalForwardedProps,
236
+ ownerState
237
+ });
238
+ const [MenuItemSlot, menuItemSlotProps] = useSlot('menuItem', {
239
+ className: classes.menuItem,
240
+ elementType: MenuItemComponent,
241
+ externalForwardedProps,
242
+ ownerState
243
+ });
244
+ const [DisplayedRows, displayedRowsProps] = useSlot('displayedRows', {
245
+ className: classes.displayedRows,
246
+ elementType: TablePaginationDisplayedRows,
247
+ externalForwardedProps,
248
+ ownerState
249
+ });
250
+ return /*#__PURE__*/_jsx(RootSlot, {
251
+ ...rootSlotProps,
252
+ children: /*#__PURE__*/_jsxs(ToolbarSlot, {
253
+ ...toolbarSlotProps,
254
+ children: [/*#__PURE__*/_jsx(SpacerSlot, {
255
+ ...spacerSlotProps
256
+ }), rowsPerPageOptions.length > 1 && /*#__PURE__*/_jsx(SelectLabelSlot, {
257
+ ...selectLabelSlotProps,
208
258
  children: labelRowsPerPage
209
- }), rowsPerPageOptions.length > 1 && /*#__PURE__*/_jsx(TablePaginationSelect, {
259
+ }), rowsPerPageOptions.length > 1 && /*#__PURE__*/_jsx(SelectSlot, {
210
260
  variant: "standard",
211
261
  ...(!selectProps.variant && {
212
262
  input: _InputBase || (_InputBase = /*#__PURE__*/_jsx(InputBase, {}))
@@ -225,16 +275,14 @@ const TablePagination = /*#__PURE__*/React.forwardRef(function TablePagination(i
225
275
  icon: clsx(classes.selectIcon, (selectProps.classes || {}).icon)
226
276
  },
227
277
  disabled: disabled,
228
- children: rowsPerPageOptions.map(rowsPerPageOption => /*#__PURE__*/_createElement(MenuItemComponent, {
229
- ...(!isHostComponent(MenuItemComponent) && {
230
- ownerState
231
- }),
232
- className: classes.menuItem,
278
+ ...selectSlotProps,
279
+ children: rowsPerPageOptions.map(rowsPerPageOption => /*#__PURE__*/_createElement(MenuItemSlot, {
280
+ ...menuItemSlotProps,
233
281
  key: rowsPerPageOption.label ? rowsPerPageOption.label : rowsPerPageOption,
234
282
  value: rowsPerPageOption.value ? rowsPerPageOption.value : rowsPerPageOption
235
283
  }, rowsPerPageOption.label ? rowsPerPageOption.label : rowsPerPageOption))
236
- }), /*#__PURE__*/_jsx(TablePaginationDisplayedRows, {
237
- className: classes.displayedRows,
284
+ }), /*#__PURE__*/_jsx(DisplayedRows, {
285
+ ...displayedRowsProps,
238
286
  children: labelDisplayedRows({
239
287
  from: count === 0 ? 0 : page * rowsPerPage + 1,
240
288
  to: getLabelDisplayedRowsTo(),
@@ -281,10 +329,6 @@ process.env.NODE_ENV !== "production" ? TablePagination.propTypes /* remove-prop
281
329
  * Override or extend the styles applied to the component.
282
330
  */
283
331
  classes: PropTypes.object,
284
- /**
285
- * @ignore
286
- */
287
- className: PropTypes.string,
288
332
  /**
289
333
  * @ignore
290
334
  */
@@ -408,7 +452,7 @@ process.env.NODE_ENV !== "production" ? TablePagination.propTypes /* remove-prop
408
452
  */
409
453
  showLastButton: PropTypes.bool,
410
454
  /**
411
- * The props used for each slot inside the TablePagination.
455
+ * The props used for each slot inside.
412
456
  * @default {}
413
457
  */
414
458
  slotProps: PropTypes.shape({
@@ -422,11 +466,16 @@ process.env.NODE_ENV !== "production" ? TablePagination.propTypes /* remove-prop
422
466
  previousButton: PropTypes.object,
423
467
  previousButtonIcon: PropTypes.object
424
468
  }),
425
- select: PropTypes.object
469
+ displayedRows: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
470
+ menuItem: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
471
+ root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
472
+ select: PropTypes.object,
473
+ selectLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
474
+ spacer: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
475
+ toolbar: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
426
476
  }),
427
477
  /**
428
- * The components used for each slot inside the TablePagination.
429
- * Either a string to use a HTML element or a component.
478
+ * The components used for each slot inside.
430
479
  * @default {}
431
480
  */
432
481
  slots: PropTypes.shape({
@@ -439,7 +488,14 @@ process.env.NODE_ENV !== "production" ? TablePagination.propTypes /* remove-prop
439
488
  nextButtonIcon: PropTypes.elementType,
440
489
  previousButton: PropTypes.elementType,
441
490
  previousButtonIcon: PropTypes.elementType
442
- })
491
+ }),
492
+ displayedRows: PropTypes.elementType,
493
+ menuItem: PropTypes.elementType,
494
+ root: PropTypes.elementType,
495
+ select: PropTypes.elementType,
496
+ selectLabel: PropTypes.elementType,
497
+ spacer: PropTypes.elementType,
498
+ toolbar: PropTypes.elementType
443
499
  }),
444
500
  /**
445
501
  * The system prop that allows defining system overrides as well as additional CSS styles.
@@ -11,6 +11,7 @@ import memoTheme from "../utils/memoTheme.js";
11
11
  import { useDefaultProps } from "../DefaultPropsProvider/index.js";
12
12
  import capitalize from "../utils/capitalize.js";
13
13
  import tableSortLabelClasses, { getTableSortLabelUtilityClass } from "./tableSortLabelClasses.js";
14
+ import useSlot from "../utils/useSlot.js";
14
15
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
16
  const useUtilityClasses = ownerState => {
16
17
  const {
@@ -110,6 +111,8 @@ const TableSortLabel = /*#__PURE__*/React.forwardRef(function TableSortLabel(inP
110
111
  direction = 'asc',
111
112
  hideSortIcon = false,
112
113
  IconComponent = ArrowDownwardIcon,
114
+ slots = {},
115
+ slotProps = {},
113
116
  ...other
114
117
  } = props;
115
118
  const ownerState = {
@@ -120,17 +123,31 @@ const TableSortLabel = /*#__PURE__*/React.forwardRef(function TableSortLabel(inP
120
123
  IconComponent
121
124
  };
122
125
  const classes = useUtilityClasses(ownerState);
123
- return /*#__PURE__*/_jsxs(TableSortLabelRoot, {
126
+ const externalForwardedProps = {
127
+ slots,
128
+ slotProps
129
+ };
130
+ const [RootSlot, rootProps] = useSlot('root', {
131
+ elementType: TableSortLabelRoot,
132
+ externalForwardedProps,
133
+ ownerState,
124
134
  className: clsx(classes.root, className),
125
- component: "span",
135
+ ref
136
+ });
137
+ const [IconSlot, iconProps] = useSlot('icon', {
138
+ elementType: TableSortLabelIcon,
139
+ externalForwardedProps,
140
+ ownerState,
141
+ className: classes.icon
142
+ });
143
+ return /*#__PURE__*/_jsxs(RootSlot, {
126
144
  disableRipple: true,
127
- ownerState: ownerState,
128
- ref: ref,
145
+ component: "span",
146
+ ...rootProps,
129
147
  ...other,
130
- children: [children, hideSortIcon && !active ? null : /*#__PURE__*/_jsx(TableSortLabelIcon, {
148
+ children: [children, hideSortIcon && !active ? null : /*#__PURE__*/_jsx(IconSlot, {
131
149
  as: IconComponent,
132
- className: clsx(classes.icon),
133
- ownerState: ownerState
150
+ ...iconProps
134
151
  })]
135
152
  });
136
153
  });
@@ -171,6 +188,22 @@ process.env.NODE_ENV !== "production" ? TableSortLabel.propTypes /* remove-propt
171
188
  * @default ArrowDownwardIcon
172
189
  */
173
190
  IconComponent: PropTypes.elementType,
191
+ /**
192
+ * The props used for each slot inside.
193
+ * @default {}
194
+ */
195
+ slotProps: PropTypes.shape({
196
+ icon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
197
+ root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
198
+ }),
199
+ /**
200
+ * The components used for each slot inside.
201
+ * @default {}
202
+ */
203
+ slots: PropTypes.shape({
204
+ icon: PropTypes.elementType,
205
+ root: PropTypes.elementType
206
+ }),
174
207
  /**
175
208
  * The system prop that allows defining system overrides as well as additional CSS styles.
176
209
  */
@@ -379,7 +379,7 @@ const Tooltip = /*#__PURE__*/React.forwardRef(function Tooltip(inProps, ref) {
379
379
  // eslint-disable-next-line react-hooks/rules-of-hooks -- process.env never changes
380
380
  React.useEffect(() => {
381
381
  if (childNode && childNode.disabled && !isControlled && title !== '' && childNode.tagName.toLowerCase() === 'button') {
382
- console.error(['MUI: You are providing a disabled `button` child to the Tooltip component.', 'A disabled element does not fire events.', "Tooltip needs to listen to the child element's events to display the title.", '', 'Add a simple wrapper element, such as a `span`.'].join('\n'));
382
+ console.warn(['MUI: You are providing a disabled `button` child to the Tooltip component.', 'A disabled element does not fire events.', "Tooltip needs to listen to the child element's events to display the title.", '', 'Add a simple wrapper element, such as a `span`.'].join('\n'));
383
383
  }
384
384
  }, [title, childNode, isControlled]);
385
385
  }