@mui/material 6.4.5 → 6.4.7

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 (80) hide show
  1. package/Accordion/Accordion.d.ts +14 -12
  2. package/Alert/Alert.d.ts +3 -15
  3. package/Backdrop/Backdrop.d.ts +14 -12
  4. package/CHANGELOG.md +58 -0
  5. package/CardHeader/CardHeader.d.ts +4 -20
  6. package/Checkbox/Checkbox.d.ts +45 -9
  7. package/Checkbox/Checkbox.js +51 -21
  8. package/Dialog/Dialog.d.ts +4 -4
  9. package/Drawer/Drawer.d.ts +92 -1
  10. package/Drawer/Drawer.js +108 -36
  11. package/InputBase/inputBaseClasses.d.ts +15 -6
  12. package/Menu/Menu.d.ts +88 -1
  13. package/Menu/Menu.js +58 -19
  14. package/Modal/Modal.js +9 -10
  15. package/Popover/Popover.d.ts +60 -6
  16. package/Popover/Popover.js +78 -51
  17. package/Radio/Radio.d.ts +45 -1
  18. package/Radio/Radio.js +61 -16
  19. package/Rating/Rating.d.ts +59 -1
  20. package/Rating/Rating.js +131 -45
  21. package/Select/SelectInput.js +8 -8
  22. package/Snackbar/Snackbar.d.ts +79 -2
  23. package/Snackbar/Snackbar.js +110 -32
  24. package/SpeedDial/SpeedDial.d.ts +8 -6
  25. package/SpeedDialAction/SpeedDialAction.d.ts +82 -1
  26. package/SpeedDialAction/SpeedDialAction.js +108 -30
  27. package/StepContent/StepContent.d.ts +2 -2
  28. package/SwipeableDrawer/SwipeableDrawer.d.ts +28 -2
  29. package/SwipeableDrawer/SwipeableDrawer.js +60 -13
  30. package/Switch/Switch.js +2 -0
  31. package/Tabs/Tabs.d.ts +129 -29
  32. package/Tabs/Tabs.js +120 -52
  33. package/Tabs/tabsClasses.d.ts +4 -0
  34. package/Tabs/tabsClasses.js +1 -1
  35. package/Tooltip/Tooltip.d.ts +20 -12
  36. package/index.js +1 -1
  37. package/internal/SwitchBase.d.ts +35 -1
  38. package/internal/SwitchBase.js +84 -30
  39. package/modern/Checkbox/Checkbox.js +51 -21
  40. package/modern/Drawer/Drawer.js +108 -36
  41. package/modern/Menu/Menu.js +58 -19
  42. package/modern/Modal/Modal.js +9 -10
  43. package/modern/Popover/Popover.js +78 -51
  44. package/modern/Radio/Radio.js +61 -16
  45. package/modern/Rating/Rating.js +131 -45
  46. package/modern/Select/SelectInput.js +8 -8
  47. package/modern/Snackbar/Snackbar.js +110 -32
  48. package/modern/SpeedDialAction/SpeedDialAction.js +108 -30
  49. package/modern/SwipeableDrawer/SwipeableDrawer.js +60 -13
  50. package/modern/Switch/Switch.js +2 -0
  51. package/modern/Tabs/Tabs.js +120 -52
  52. package/modern/Tabs/tabsClasses.js +1 -1
  53. package/modern/index.js +1 -1
  54. package/modern/internal/SwitchBase.js +84 -30
  55. package/modern/styles/createThemeNoVars.js +7 -2
  56. package/modern/version/index.js +2 -2
  57. package/node/Checkbox/Checkbox.js +51 -21
  58. package/node/Drawer/Drawer.js +108 -36
  59. package/node/Menu/Menu.js +58 -19
  60. package/node/Modal/Modal.js +9 -10
  61. package/node/Popover/Popover.js +78 -51
  62. package/node/Radio/Radio.js +61 -16
  63. package/node/Rating/Rating.js +132 -46
  64. package/node/Select/SelectInput.js +8 -8
  65. package/node/Snackbar/Snackbar.js +110 -32
  66. package/node/SpeedDialAction/SpeedDialAction.js +108 -30
  67. package/node/SwipeableDrawer/SwipeableDrawer.js +60 -13
  68. package/node/Switch/Switch.js +2 -0
  69. package/node/Tabs/Tabs.js +120 -52
  70. package/node/Tabs/tabsClasses.js +1 -1
  71. package/node/index.js +1 -1
  72. package/node/internal/SwitchBase.js +84 -30
  73. package/node/styles/createThemeNoVars.js +7 -2
  74. package/node/version/index.js +2 -2
  75. package/package.json +5 -5
  76. package/styles/ThemeProvider.d.ts +6 -0
  77. package/styles/ThemeProviderWithVars.d.ts +1 -0
  78. package/styles/createThemeNoVars.js +7 -2
  79. package/styles/index.d.ts +1 -0
  80. package/version/index.js +2 -2
@@ -20,6 +20,8 @@ var _Fab = _interopRequireDefault(require("../Fab"));
20
20
  var _Tooltip = _interopRequireDefault(require("../Tooltip"));
21
21
  var _capitalize = _interopRequireDefault(require("../utils/capitalize"));
22
22
  var _speedDialActionClasses = _interopRequireWildcard(require("./speedDialActionClasses"));
23
+ var _useSlot = _interopRequireDefault(require("../utils/useSlot"));
24
+ var _utils = require("../utils");
23
25
  var _jsxRuntime = require("react/jsx-runtime");
24
26
  const useUtilityClasses = ownerState => {
25
27
  const {
@@ -154,6 +156,8 @@ const SpeedDialAction = /*#__PURE__*/React.forwardRef(function SpeedDialAction(i
154
156
  tooltipOpen: tooltipOpenProp = false,
155
157
  tooltipPlacement = 'left',
156
158
  tooltipTitle,
159
+ slots = {},
160
+ slotProps = {},
157
161
  ...other
158
162
  } = props;
159
163
  const ownerState = {
@@ -161,7 +165,20 @@ const SpeedDialAction = /*#__PURE__*/React.forwardRef(function SpeedDialAction(i
161
165
  tooltipPlacement
162
166
  };
163
167
  const classes = useUtilityClasses(ownerState);
164
- const [tooltipOpen, setTooltipOpen] = React.useState(tooltipOpenProp);
168
+ const externalForwardedProps = {
169
+ slots,
170
+ slotProps: {
171
+ fab: FabProps,
172
+ ...slotProps,
173
+ tooltip: (0, _utils.mergeSlotProps)(typeof slotProps.tooltip === 'function' ? slotProps.tooltip(ownerState) : slotProps.tooltip, {
174
+ title: tooltipTitle,
175
+ open: tooltipOpenProp,
176
+ placement: tooltipPlacement,
177
+ classes: TooltipClasses
178
+ })
179
+ }
180
+ };
181
+ const [tooltipOpen, setTooltipOpen] = React.useState(externalForwardedProps.slotProps.tooltip?.open);
165
182
  const handleTooltipClose = () => {
166
183
  setTooltipOpen(false);
167
184
  };
@@ -171,32 +188,71 @@ const SpeedDialAction = /*#__PURE__*/React.forwardRef(function SpeedDialAction(i
171
188
  const transitionStyle = {
172
189
  transitionDelay: `${delay}ms`
173
190
  };
174
- const fab = /*#__PURE__*/(0, _jsxRuntime.jsx)(SpeedDialActionFab, {
175
- size: "small",
191
+ const [FabSlot, fabSlotProps] = (0, _useSlot.default)('fab', {
192
+ elementType: SpeedDialActionFab,
193
+ externalForwardedProps,
194
+ ownerState,
195
+ shouldForwardComponentProp: true,
176
196
  className: (0, _clsx.default)(classes.fab, className),
177
- tabIndex: -1,
178
- role: "menuitem",
179
- ownerState: ownerState,
180
- ...FabProps,
181
- style: {
182
- ...transitionStyle,
183
- ...FabProps.style
197
+ additionalProps: {
198
+ style: transitionStyle,
199
+ tabIndex: -1,
200
+ role: 'menuitem',
201
+ size: 'small'
202
+ }
203
+ });
204
+ const [TooltipSlot, tooltipSlotProps] = (0, _useSlot.default)('tooltip', {
205
+ elementType: _Tooltip.default,
206
+ externalForwardedProps,
207
+ shouldForwardComponentProp: true,
208
+ ref,
209
+ additionalProps: {
210
+ id
184
211
  },
212
+ ownerState,
213
+ getSlotProps: handlers => ({
214
+ ...handlers,
215
+ onClose: event => {
216
+ handlers.onClose?.(event);
217
+ handleTooltipClose();
218
+ },
219
+ onOpen: event => {
220
+ handlers.onOpen?.(event);
221
+ handleTooltipOpen();
222
+ }
223
+ })
224
+ });
225
+ const [StaticTooltipSlot, staticTooltipSlotProps] = (0, _useSlot.default)('staticTooltip', {
226
+ elementType: SpeedDialActionStaticTooltip,
227
+ externalForwardedProps,
228
+ ownerState,
229
+ ref,
230
+ className: classes.staticTooltip,
231
+ additionalProps: {
232
+ id
233
+ }
234
+ });
235
+ const [StaticTooltipLabelSlot, staticTooltipLabelSlotProps] = (0, _useSlot.default)('staticTooltipLabel', {
236
+ elementType: SpeedDialActionStaticTooltipLabel,
237
+ externalForwardedProps,
238
+ ownerState,
239
+ className: classes.staticTooltipLabel,
240
+ additionalProps: {
241
+ style: transitionStyle,
242
+ id: `${id}-label`
243
+ }
244
+ });
245
+ const fab = /*#__PURE__*/(0, _jsxRuntime.jsx)(FabSlot, {
246
+ ...fabSlotProps,
185
247
  children: icon
186
248
  });
187
- if (tooltipOpenProp) {
188
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(SpeedDialActionStaticTooltip, {
189
- id: id,
190
- ref: ref,
191
- className: classes.staticTooltip,
192
- ownerState: ownerState,
249
+ if (tooltipSlotProps.open) {
250
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(StaticTooltipSlot, {
251
+ ...staticTooltipSlotProps,
193
252
  ...other,
194
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(SpeedDialActionStaticTooltipLabel, {
195
- style: transitionStyle,
196
- id: `${id}-label`,
197
- className: classes.staticTooltipLabel,
198
- ownerState: ownerState,
199
- children: tooltipTitle
253
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(StaticTooltipLabelSlot, {
254
+ ...staticTooltipLabelSlotProps,
255
+ children: tooltipSlotProps.title
200
256
  }), /*#__PURE__*/React.cloneElement(fab, {
201
257
  'aria-labelledby': `${id}-label`
202
258
  })]
@@ -205,15 +261,12 @@ const SpeedDialAction = /*#__PURE__*/React.forwardRef(function SpeedDialAction(i
205
261
  if (!open && tooltipOpen) {
206
262
  setTooltipOpen(false);
207
263
  }
208
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
209
- id: id,
210
- ref: ref,
211
- title: tooltipTitle,
212
- placement: tooltipPlacement,
213
- onClose: handleTooltipClose,
214
- onOpen: handleTooltipOpen,
264
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(TooltipSlot, {
265
+ ...tooltipSlotProps,
266
+ title: tooltipSlotProps.title,
215
267
  open: open && tooltipOpen,
216
- classes: TooltipClasses,
268
+ placement: tooltipSlotProps.placement,
269
+ classes: tooltipSlotProps.classes,
217
270
  ...other,
218
271
  children: fab
219
272
  });
@@ -239,6 +292,7 @@ process.env.NODE_ENV !== "production" ? SpeedDialAction.propTypes /* remove-prop
239
292
  /**
240
293
  * Props applied to the [`Fab`](https://mui.com/material-ui/api/fab/) component.
241
294
  * @default {}
295
+ * @deprecated Use `slotProps.fab` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.
242
296
  */
243
297
  FabProps: _propTypes.default.object,
244
298
  /**
@@ -254,26 +308,50 @@ process.env.NODE_ENV !== "production" ? SpeedDialAction.propTypes /* remove-prop
254
308
  * If `true`, the component is shown.
255
309
  */
256
310
  open: _propTypes.default.bool,
311
+ /**
312
+ * The props used for each slot inside.
313
+ * @default {}
314
+ */
315
+ slotProps: _propTypes.default.shape({
316
+ fab: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
317
+ staticTooltip: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
318
+ staticTooltipLabel: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
319
+ tooltip: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
320
+ }),
321
+ /**
322
+ * The components used for each slot inside.
323
+ * @default {}
324
+ */
325
+ slots: _propTypes.default.shape({
326
+ fab: _propTypes.default.elementType,
327
+ staticTooltip: _propTypes.default.elementType,
328
+ staticTooltipLabel: _propTypes.default.elementType,
329
+ tooltip: _propTypes.default.elementType
330
+ }),
257
331
  /**
258
332
  * The system prop that allows defining system overrides as well as additional CSS styles.
259
333
  */
260
334
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
261
335
  /**
262
336
  * `classes` prop applied to the [`Tooltip`](https://mui.com/material-ui/api/tooltip/) element.
337
+ * @deprecated Use `slotProps.tooltip.classes` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.
263
338
  */
264
339
  TooltipClasses: _propTypes.default.object,
265
340
  /**
266
341
  * Make the tooltip always visible when the SpeedDial is open.
267
342
  * @default false
343
+ * @deprecated Use `slotProps.tooltip.open` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.
268
344
  */
269
345
  tooltipOpen: _propTypes.default.bool,
270
346
  /**
271
347
  * Placement of the tooltip.
272
348
  * @default 'left'
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.
273
350
  */
274
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']),
275
352
  /**
276
353
  * Label to display in the tooltip.
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.
277
355
  */
278
356
  tooltipTitle: _propTypes.default.node
279
357
  } : void 0;
@@ -22,6 +22,8 @@ var _useEnhancedEffect = _interopRequireDefault(require("../utils/useEnhancedEff
22
22
  var _zeroStyled = require("../zero-styled");
23
23
  var _DefaultPropsProvider = require("../DefaultPropsProvider");
24
24
  var _utils = require("../transitions/utils");
25
+ var _utils2 = require("../utils");
26
+ var _useSlot = _interopRequireDefault(require("../utils/useSlot"));
25
27
  var _SwipeArea = _interopRequireDefault(require("./SwipeArea"));
26
28
  var _jsxRuntime = require("react/jsx-runtime");
27
29
  // This value is closed to what browsers are using internally to
@@ -152,6 +154,8 @@ const SwipeableDrawer = /*#__PURE__*/React.forwardRef(function SwipeableDrawer(i
152
154
  transitionDuration = transitionDurationDefault,
153
155
  variant = 'temporary',
154
156
  // Mobile first.
157
+ slots = {},
158
+ slotProps = {},
155
159
  ...other
156
160
  } = props;
157
161
  const [maybeSwiping, setMaybeSwiping] = React.useState(false);
@@ -457,6 +461,22 @@ const SwipeableDrawer = /*#__PURE__*/React.forwardRef(function SwipeableDrawer(i
457
461
  setMaybeSwiping(false);
458
462
  }
459
463
  }, [open]);
464
+ const [SwipeAreaSlot, swipeAreaSlotProps] = (0, _useSlot.default)('swipeArea', {
465
+ ref: swipeAreaRef,
466
+ elementType: _SwipeArea.default,
467
+ ownerState: props,
468
+ externalForwardedProps: {
469
+ slots,
470
+ slotProps: {
471
+ swipeArea: SwipeAreaProps,
472
+ ...slotProps
473
+ }
474
+ },
475
+ additionalProps: {
476
+ width: swipeAreaWidth,
477
+ anchor
478
+ }
479
+ });
460
480
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
461
481
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Drawer.default, {
462
482
  open: variant === 'temporary' && maybeSwiping ? true : open,
@@ -474,25 +494,27 @@ const SwipeableDrawer = /*#__PURE__*/React.forwardRef(function SwipeableDrawer(i
474
494
  ...ModalPropsProp
475
495
  },
476
496
  hideBackdrop: hideBackdrop,
477
- PaperProps: {
478
- ...PaperProps,
479
- style: {
480
- pointerEvents: variant === 'temporary' && !open && !allowSwipeInChildren ? 'none' : '',
481
- ...PaperProps.style
482
- },
483
- ref: handleRef
484
- },
485
497
  anchor: anchor,
486
498
  transitionDuration: calculatedDurationRef.current || transitionDuration,
487
499
  onClose: onClose,
488
500
  ref: ref,
501
+ slots: slots,
502
+ slotProps: {
503
+ ...slotProps,
504
+ backdrop: (0, _utils2.mergeSlotProps)(slotProps.backdrop ?? BackdropProps, {
505
+ ref: backdropRef
506
+ }),
507
+ paper: (0, _utils2.mergeSlotProps)(slotProps.paper ?? PaperProps, {
508
+ style: {
509
+ pointerEvents: variant === 'temporary' && !open && !allowSwipeInChildren ? 'none' : ''
510
+ },
511
+ ref: handleRef
512
+ })
513
+ },
489
514
  ...other
490
515
  }), !disableSwipeToOpen && variant === 'temporary' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_NoSsr.default, {
491
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SwipeArea.default, {
492
- anchor: anchor,
493
- ref: swipeAreaRef,
494
- width: swipeAreaWidth,
495
- ...SwipeAreaProps
516
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(SwipeAreaSlot, {
517
+ ...swipeAreaSlotProps
496
518
  })
497
519
  })]
498
520
  });
@@ -590,8 +612,33 @@ process.env.NODE_ENV !== "production" ? SwipeableDrawer.propTypes /* remove-prop
590
612
  component: _elementTypeAcceptingRef.default,
591
613
  style: _propTypes.default.object
592
614
  }),
615
+ /**
616
+ * The props used for each slot inside.
617
+ * @default {}
618
+ */
619
+ slotProps: _propTypes.default.shape({
620
+ backdrop: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
621
+ docked: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
622
+ paper: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
623
+ root: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
624
+ swipeArea: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
625
+ transition: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
626
+ }),
627
+ /**
628
+ * The components used for each slot inside.
629
+ * @default {}
630
+ */
631
+ slots: _propTypes.default.shape({
632
+ backdrop: _propTypes.default.elementType,
633
+ docked: _propTypes.default.elementType,
634
+ paper: _propTypes.default.elementType,
635
+ root: _propTypes.default.elementType,
636
+ swipeArea: _propTypes.default.elementType,
637
+ transition: _propTypes.default.elementType
638
+ }),
593
639
  /**
594
640
  * The element is used to intercept the touch events on the edge.
641
+ * @deprecated use the `slotProps.swipeArea` prop instead. This prop will be removed in v7. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.
595
642
  */
596
643
  SwipeAreaProps: _propTypes.default.object,
597
644
  /**
@@ -312,10 +312,12 @@ process.env.NODE_ENV !== "production" ? Switch.propTypes /* remove-proptypes */
312
312
  id: _propTypes.default.string,
313
313
  /**
314
314
  * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.
315
+ * @deprecated Use `slotProps.input` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.
315
316
  */
316
317
  inputProps: _propTypes.default.object,
317
318
  /**
318
319
  * Pass a ref to the `input` element.
320
+ * @deprecated Use `slotProps.input.ref` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.
319
321
  */
320
322
  inputRef: _refType.default,
321
323
  /**
package/node/Tabs/Tabs.js CHANGED
@@ -26,6 +26,7 @@ var _useEventCallback = _interopRequireDefault(require("../utils/useEventCallbac
26
26
  var _tabsClasses = _interopRequireWildcard(require("./tabsClasses"));
27
27
  var _ownerDocument = _interopRequireDefault(require("../utils/ownerDocument"));
28
28
  var _ownerWindow = _interopRequireDefault(require("../utils/ownerWindow"));
29
+ var _useSlot = _interopRequireDefault(require("../utils/useSlot"));
29
30
  var _jsxRuntime = require("react/jsx-runtime");
30
31
  const nextItem = (list, item) => {
31
32
  if (list === item) {
@@ -82,7 +83,7 @@ const useUtilityClasses = ownerState => {
82
83
  const slots = {
83
84
  root: ['root', vertical && 'vertical'],
84
85
  scroller: ['scroller', fixed && 'fixed', hideScrollbar && 'hideScrollbar', scrollableX && 'scrollableX', scrollableY && 'scrollableY'],
85
- flexContainer: ['flexContainer', vertical && 'flexContainerVertical', centered && 'centered'],
86
+ list: ['list', 'flexContainer', vertical && 'flexContainerVertical', vertical && 'vertical', centered && 'centered'],
86
87
  indicator: ['indicator'],
87
88
  scrollButtons: ['scrollButtons', scrollButtonsHideMobile && 'scrollButtonsHideMobile'],
88
89
  scrollableX: [scrollableX && 'scrollableX'],
@@ -183,14 +184,14 @@ const TabsScroller = (0, _zeroStyled.styled)('div', {
183
184
  }
184
185
  }]
185
186
  });
186
- const FlexContainer = (0, _zeroStyled.styled)('div', {
187
+ const List = (0, _zeroStyled.styled)('div', {
187
188
  name: 'MuiTabs',
188
- slot: 'FlexContainer',
189
+ slot: 'List',
189
190
  overridesResolver: (props, styles) => {
190
191
  const {
191
192
  ownerState
192
193
  } = props;
193
- return [styles.flexContainer, ownerState.vertical && styles.flexContainerVertical, ownerState.centered && styles.centered];
194
+ return [styles.list, styles.flexContainer, ownerState.vertical && styles.flexContainerVertical, ownerState.centered && styles.centered];
194
195
  }
195
196
  })({
196
197
  display: 'flex',
@@ -278,13 +279,16 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
278
279
  indicatorColor = 'primary',
279
280
  onChange,
280
281
  orientation = 'horizontal',
281
- ScrollButtonComponent = _TabScrollButton.default,
282
+ ScrollButtonComponent,
283
+ // TODO: remove in v7 (deprecated in v6)
282
284
  scrollButtons = 'auto',
283
285
  selectionFollowsFocus,
284
286
  slots = {},
285
287
  slotProps = {},
286
288
  TabIndicatorProps = {},
289
+ // TODO: remove in v7 (deprecated in v6)
287
290
  TabScrollButtonProps = {},
291
+ // TODO: remove in v7 (deprecated in v6)
288
292
  textColor = 'primary',
289
293
  value,
290
294
  variant = 'standard',
@@ -344,6 +348,14 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
344
348
  const valueToIndex = new Map();
345
349
  const tabsRef = React.useRef(null);
346
350
  const tabListRef = React.useRef(null);
351
+ const externalForwardedProps = {
352
+ slots,
353
+ slotProps: {
354
+ indicator: TabIndicatorProps,
355
+ scrollButton: TabScrollButtonProps,
356
+ ...slotProps
357
+ }
358
+ };
347
359
  const getTabsMeta = () => {
348
360
  const tabsNode = tabsRef.current;
349
361
  let tabsMeta;
@@ -465,50 +477,62 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
465
477
  const handleEndScrollClick = () => {
466
478
  moveTabsScroll(getScrollSize());
467
479
  };
480
+ const [ScrollbarSlot, {
481
+ onChange: scrollbarOnChange,
482
+ ...scrollbarSlotProps
483
+ }] = (0, _useSlot.default)('scrollbar', {
484
+ className: (0, _clsx.default)(classes.scrollableX, classes.hideScrollbar),
485
+ elementType: TabsScrollbarSize,
486
+ shouldForwardComponentProp: true,
487
+ externalForwardedProps,
488
+ ownerState
489
+ });
468
490
 
469
491
  // TODO Remove <ScrollbarSize /> as browser support for hiding the scrollbar
470
492
  // with CSS improves.
471
493
  const handleScrollbarSizeChange = React.useCallback(scrollbarWidth => {
494
+ scrollbarOnChange?.(scrollbarWidth);
472
495
  setScrollerStyle({
473
496
  overflow: null,
474
497
  scrollbarWidth
475
498
  });
476
- }, []);
499
+ }, [scrollbarOnChange]);
500
+ const [ScrollButtonsSlot, scrollButtonSlotProps] = (0, _useSlot.default)('scrollButtons', {
501
+ className: (0, _clsx.default)(classes.scrollButtons, TabScrollButtonProps.className),
502
+ elementType: _TabScrollButton.default,
503
+ externalForwardedProps,
504
+ ownerState,
505
+ additionalProps: {
506
+ orientation,
507
+ slots: {
508
+ StartScrollButtonIcon: slots.startScrollButtonIcon || slots.StartScrollButtonIcon,
509
+ EndScrollButtonIcon: slots.endScrollButtonIcon || slots.EndScrollButtonIcon
510
+ },
511
+ slotProps: {
512
+ startScrollButtonIcon: startScrollButtonIconProps,
513
+ endScrollButtonIcon: endScrollButtonIconProps
514
+ }
515
+ }
516
+ });
477
517
  const getConditionalElements = () => {
478
518
  const conditionalElements = {};
479
- conditionalElements.scrollbarSizeListener = scrollable ? /*#__PURE__*/(0, _jsxRuntime.jsx)(TabsScrollbarSize, {
480
- onChange: handleScrollbarSizeChange,
481
- className: (0, _clsx.default)(classes.scrollableX, classes.hideScrollbar)
519
+ conditionalElements.scrollbarSizeListener = scrollable ? /*#__PURE__*/(0, _jsxRuntime.jsx)(ScrollbarSlot, {
520
+ ...scrollbarSlotProps,
521
+ onChange: handleScrollbarSizeChange
482
522
  }) : null;
483
523
  const scrollButtonsActive = displayStartScroll || displayEndScroll;
484
524
  const showScrollButtons = scrollable && (scrollButtons === 'auto' && scrollButtonsActive || scrollButtons === true);
485
- conditionalElements.scrollButtonStart = showScrollButtons ? /*#__PURE__*/(0, _jsxRuntime.jsx)(ScrollButtonComponent, {
486
- slots: {
487
- StartScrollButtonIcon: slots.StartScrollButtonIcon
488
- },
489
- slotProps: {
490
- startScrollButtonIcon: startScrollButtonIconProps
491
- },
492
- orientation: orientation,
525
+ conditionalElements.scrollButtonStart = showScrollButtons ? /*#__PURE__*/(0, _jsxRuntime.jsx)(ScrollButtonsSlot, {
493
526
  direction: isRtl ? 'right' : 'left',
494
527
  onClick: handleStartScrollClick,
495
528
  disabled: !displayStartScroll,
496
- ...TabScrollButtonProps,
497
- className: (0, _clsx.default)(classes.scrollButtons, TabScrollButtonProps.className)
529
+ ...scrollButtonSlotProps
498
530
  }) : null;
499
- conditionalElements.scrollButtonEnd = showScrollButtons ? /*#__PURE__*/(0, _jsxRuntime.jsx)(ScrollButtonComponent, {
500
- slots: {
501
- EndScrollButtonIcon: slots.EndScrollButtonIcon
502
- },
503
- slotProps: {
504
- endScrollButtonIcon: endScrollButtonIconProps
505
- },
506
- orientation: orientation,
531
+ conditionalElements.scrollButtonEnd = showScrollButtons ? /*#__PURE__*/(0, _jsxRuntime.jsx)(ScrollButtonsSlot, {
507
532
  direction: isRtl ? 'left' : 'right',
508
533
  onClick: handleEndScrollClick,
509
534
  disabled: !displayEndScroll,
510
- ...TabScrollButtonProps,
511
- className: (0, _clsx.default)(classes.scrollButtons, TabScrollButtonProps.className)
535
+ ...scrollButtonSlotProps
512
536
  }) : null;
513
537
  return conditionalElements;
514
538
  };
@@ -636,15 +660,18 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
636
660
  updateIndicator: updateIndicatorState,
637
661
  updateScrollButtons: updateScrollButtonState
638
662
  }), [updateIndicatorState, updateScrollButtonState]);
639
- const indicator = /*#__PURE__*/(0, _jsxRuntime.jsx)(TabsIndicator, {
640
- ...TabIndicatorProps,
663
+ const [IndicatorSlot, indicatorSlotProps] = (0, _useSlot.default)('indicator', {
641
664
  className: (0, _clsx.default)(classes.indicator, TabIndicatorProps.className),
642
- ownerState: ownerState,
643
- style: {
644
- ...indicatorStyle,
645
- ...TabIndicatorProps.style
665
+ elementType: TabsIndicator,
666
+ externalForwardedProps,
667
+ ownerState,
668
+ additionalProps: {
669
+ style: indicatorStyle
646
670
  }
647
671
  });
672
+ const indicator = /*#__PURE__*/(0, _jsxRuntime.jsx)(IndicatorSlot, {
673
+ ...indicatorSlotProps
674
+ });
648
675
  let childIndex = 0;
649
676
  const children = React.Children.map(childrenProp, child => {
650
677
  if (! /*#__PURE__*/React.isValidElement(child)) {
@@ -711,29 +738,54 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
711
738
  }
712
739
  };
713
740
  const conditionalElements = getConditionalElements();
714
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(TabsRoot, {
741
+ const [RootSlot, rootSlotProps] = (0, _useSlot.default)('root', {
742
+ ref,
715
743
  className: (0, _clsx.default)(classes.root, className),
716
- ownerState: ownerState,
717
- ref: ref,
718
- as: component,
719
- ...other,
720
- children: [conditionalElements.scrollButtonStart, conditionalElements.scrollbarSizeListener, /*#__PURE__*/(0, _jsxRuntime.jsxs)(TabsScroller, {
721
- className: classes.scroller,
722
- ownerState: ownerState,
744
+ elementType: TabsRoot,
745
+ externalForwardedProps: {
746
+ ...externalForwardedProps,
747
+ ...other,
748
+ component
749
+ },
750
+ ownerState
751
+ });
752
+ const [ScrollerSlot, scrollerSlotProps] = (0, _useSlot.default)('scroller', {
753
+ ref: tabsRef,
754
+ className: classes.scroller,
755
+ elementType: TabsScroller,
756
+ externalForwardedProps,
757
+ ownerState,
758
+ additionalProps: {
723
759
  style: {
724
760
  overflow: scrollerStyle.overflow,
725
761
  [vertical ? `margin${isRtl ? 'Left' : 'Right'}` : 'marginBottom']: visibleScrollbar ? undefined : -scrollerStyle.scrollbarWidth
726
- },
727
- ref: tabsRef,
728
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(FlexContainer, {
762
+ }
763
+ }
764
+ });
765
+ const [ListSlot, listSlotProps] = (0, _useSlot.default)('list', {
766
+ ref: tabListRef,
767
+ className: (0, _clsx.default)(classes.list, classes.flexContainer),
768
+ elementType: List,
769
+ externalForwardedProps,
770
+ ownerState,
771
+ getSlotProps: handlers => ({
772
+ ...handlers,
773
+ onKeyDown: event => {
774
+ handleKeyDown(event);
775
+ handlers.onKeyDown?.(event);
776
+ }
777
+ })
778
+ });
779
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(RootSlot, {
780
+ ...rootSlotProps,
781
+ children: [conditionalElements.scrollButtonStart, conditionalElements.scrollbarSizeListener, /*#__PURE__*/(0, _jsxRuntime.jsxs)(ScrollerSlot, {
782
+ ...scrollerSlotProps,
783
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ListSlot, {
729
784
  "aria-label": ariaLabel,
730
785
  "aria-labelledby": ariaLabelledBy,
731
786
  "aria-orientation": orientation === 'vertical' ? 'vertical' : null,
732
- className: classes.flexContainer,
733
- ownerState: ownerState,
734
- onKeyDown: handleKeyDown,
735
- ref: tabListRef,
736
787
  role: "tablist",
788
+ ...listSlotProps,
737
789
  children: children
738
790
  }), mounted && indicator]
739
791
  }), conditionalElements.scrollButtonEnd]
@@ -809,6 +861,7 @@ process.env.NODE_ENV !== "production" ? Tabs.propTypes /* remove-proptypes */ =
809
861
  orientation: _propTypes.default.oneOf(['horizontal', 'vertical']),
810
862
  /**
811
863
  * The component used to render the scroll buttons.
864
+ * @deprecated use the `slots.scrollButtons` prop instead. This prop will be removed in v7. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.
812
865
  * @default TabScrollButton
813
866
  */
814
867
  ScrollButtonComponent: _propTypes.default.elementType,
@@ -830,12 +883,17 @@ process.env.NODE_ENV !== "production" ? Tabs.propTypes /* remove-proptypes */ =
830
883
  */
831
884
  selectionFollowsFocus: _propTypes.default.bool,
832
885
  /**
833
- * The extra props for the slot components.
834
- * You can override the existing props or add new ones.
886
+ * The props used for each slot inside.
835
887
  * @default {}
836
888
  */
837
889
  slotProps: _propTypes.default.shape({
838
890
  endScrollButtonIcon: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
891
+ indicator: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
892
+ list: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
893
+ root: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
894
+ scrollbar: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
895
+ scrollButtons: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
896
+ scroller: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
839
897
  startScrollButtonIcon: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
840
898
  }),
841
899
  /**
@@ -843,7 +901,15 @@ process.env.NODE_ENV !== "production" ? Tabs.propTypes /* remove-proptypes */ =
843
901
  * @default {}
844
902
  */
845
903
  slots: _propTypes.default.shape({
904
+ endScrollButtonIcon: _propTypes.default.elementType,
846
905
  EndScrollButtonIcon: _propTypes.default.elementType,
906
+ indicator: _propTypes.default.elementType,
907
+ list: _propTypes.default.elementType,
908
+ root: _propTypes.default.elementType,
909
+ scrollbar: _propTypes.default.elementType,
910
+ scrollButtons: _propTypes.default.elementType,
911
+ scroller: _propTypes.default.elementType,
912
+ startScrollButtonIcon: _propTypes.default.elementType,
847
913
  StartScrollButtonIcon: _propTypes.default.elementType
848
914
  }),
849
915
  /**
@@ -852,11 +918,13 @@ process.env.NODE_ENV !== "production" ? Tabs.propTypes /* remove-proptypes */ =
852
918
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
853
919
  /**
854
920
  * Props applied to the tab indicator element.
921
+ * @deprecated use the `slotProps.indicator` prop instead. This prop will be removed in v7. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.
855
922
  * @default {}
856
923
  */
857
924
  TabIndicatorProps: _propTypes.default.object,
858
925
  /**
859
926
  * Props applied to the [`TabScrollButton`](https://mui.com/material-ui/api/tab-scroll-button/) element.
927
+ * @deprecated use the `slotProps.scrollButtons` prop instead. This prop will be removed in v7. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.
860
928
  * @default {}
861
929
  */
862
930
  TabScrollButtonProps: _propTypes.default.object,
@@ -11,5 +11,5 @@ var _generateUtilityClass = _interopRequireDefault(require("@mui/utils/generateU
11
11
  function getTabsUtilityClass(slot) {
12
12
  return (0, _generateUtilityClass.default)('MuiTabs', slot);
13
13
  }
14
- const tabsClasses = (0, _generateUtilityClasses.default)('MuiTabs', ['root', 'vertical', 'flexContainer', 'flexContainerVertical', 'centered', 'scroller', 'fixed', 'scrollableX', 'scrollableY', 'hideScrollbar', 'scrollButtons', 'scrollButtonsHideMobile', 'indicator']);
14
+ const tabsClasses = (0, _generateUtilityClasses.default)('MuiTabs', ['root', 'vertical', 'list', 'flexContainer', 'flexContainerVertical', 'centered', 'scroller', 'fixed', 'scrollableX', 'scrollableY', 'hideScrollbar', 'scrollButtons', 'scrollButtonsHideMobile', 'indicator']);
15
15
  var _default = exports.default = tabsClasses;
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/material v6.4.5
2
+ * @mui/material v6.4.7
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the