@mui/material 6.4.5 → 6.4.6

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 (73) 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 +38 -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 +59 -16
  19. package/Select/SelectInput.js +8 -8
  20. package/Snackbar/Snackbar.d.ts +79 -2
  21. package/Snackbar/Snackbar.js +110 -32
  22. package/SpeedDial/SpeedDial.d.ts +8 -6
  23. package/SpeedDialAction/SpeedDialAction.d.ts +82 -1
  24. package/SpeedDialAction/SpeedDialAction.js +108 -30
  25. package/StepContent/StepContent.d.ts +2 -2
  26. package/SwipeableDrawer/SwipeableDrawer.d.ts +28 -2
  27. package/SwipeableDrawer/SwipeableDrawer.js +60 -13
  28. package/Switch/Switch.js +2 -0
  29. package/Tabs/Tabs.d.ts +129 -29
  30. package/Tabs/Tabs.js +120 -52
  31. package/Tabs/tabsClasses.d.ts +4 -0
  32. package/Tabs/tabsClasses.js +1 -1
  33. package/Tooltip/Tooltip.d.ts +20 -12
  34. package/index.js +1 -1
  35. package/internal/SwitchBase.d.ts +35 -1
  36. package/internal/SwitchBase.js +84 -30
  37. package/modern/Checkbox/Checkbox.js +51 -21
  38. package/modern/Drawer/Drawer.js +108 -36
  39. package/modern/Menu/Menu.js +58 -19
  40. package/modern/Modal/Modal.js +9 -10
  41. package/modern/Popover/Popover.js +78 -51
  42. package/modern/Radio/Radio.js +59 -16
  43. package/modern/Select/SelectInput.js +8 -8
  44. package/modern/Snackbar/Snackbar.js +110 -32
  45. package/modern/SpeedDialAction/SpeedDialAction.js +108 -30
  46. package/modern/SwipeableDrawer/SwipeableDrawer.js +60 -13
  47. package/modern/Switch/Switch.js +2 -0
  48. package/modern/Tabs/Tabs.js +120 -52
  49. package/modern/Tabs/tabsClasses.js +1 -1
  50. package/modern/index.js +1 -1
  51. package/modern/internal/SwitchBase.js +84 -30
  52. package/modern/styles/createThemeNoVars.js +7 -2
  53. package/modern/version/index.js +2 -2
  54. package/node/Checkbox/Checkbox.js +51 -21
  55. package/node/Drawer/Drawer.js +108 -36
  56. package/node/Menu/Menu.js +58 -19
  57. package/node/Modal/Modal.js +9 -10
  58. package/node/Popover/Popover.js +78 -51
  59. package/node/Radio/Radio.js +59 -16
  60. package/node/Select/SelectInput.js +8 -8
  61. package/node/Snackbar/Snackbar.js +110 -32
  62. package/node/SpeedDialAction/SpeedDialAction.js +108 -30
  63. package/node/SwipeableDrawer/SwipeableDrawer.js +60 -13
  64. package/node/Switch/Switch.js +2 -0
  65. package/node/Tabs/Tabs.js +120 -52
  66. package/node/Tabs/tabsClasses.js +1 -1
  67. package/node/index.js +1 -1
  68. package/node/internal/SwitchBase.js +84 -30
  69. package/node/styles/createThemeNoVars.js +7 -2
  70. package/node/version/index.js +2 -2
  71. package/package.json +6 -6
  72. package/styles/createThemeNoVars.js +7 -2
  73. package/version/index.js +2 -2
@@ -24,6 +24,8 @@ var _zeroStyled = require("../zero-styled");
24
24
  var _memoTheme = _interopRequireDefault(require("../utils/memoTheme"));
25
25
  var _DefaultPropsProvider = require("../DefaultPropsProvider");
26
26
  var _drawerClasses = require("./drawerClasses");
27
+ var _useSlot = _interopRequireDefault(require("../utils/useSlot"));
28
+ var _utils = require("../utils");
27
29
  var _jsxRuntime = require("react/jsx-runtime");
28
30
  const overridesResolver = (props, styles) => {
29
31
  const {
@@ -203,9 +205,11 @@ const Drawer = /*#__PURE__*/React.forwardRef(function Drawer(inProps, ref) {
203
205
  PaperProps = {},
204
206
  SlideProps,
205
207
  // eslint-disable-next-line react/prop-types
206
- TransitionComponent = _Slide.default,
208
+ TransitionComponent,
207
209
  transitionDuration = defaultTransitionDuration,
208
210
  variant = 'temporary',
211
+ slots = {},
212
+ slotProps = {},
209
213
  ...other
210
214
  } = props;
211
215
 
@@ -229,56 +233,100 @@ const Drawer = /*#__PURE__*/React.forwardRef(function Drawer(inProps, ref) {
229
233
  ...other
230
234
  };
231
235
  const classes = useUtilityClasses(ownerState);
232
- const drawer = /*#__PURE__*/(0, _jsxRuntime.jsx)(DrawerPaper, {
233
- elevation: variant === 'temporary' ? elevation : 0,
234
- square: true,
235
- ...PaperProps,
236
+ const externalForwardedProps = {
237
+ slots: {
238
+ transition: TransitionComponent,
239
+ ...slots
240
+ },
241
+ slotProps: {
242
+ paper: PaperProps,
243
+ transition: SlideProps,
244
+ ...slotProps,
245
+ backdrop: (0, _utils.mergeSlotProps)(slotProps.backdrop || {
246
+ ...BackdropProps,
247
+ ...BackdropPropsProp
248
+ }, {
249
+ transitionDuration
250
+ })
251
+ }
252
+ };
253
+ const [RootSlot, rootSlotProps] = (0, _useSlot.default)('root', {
254
+ ref,
255
+ elementType: DrawerRoot,
256
+ className: (0, _clsx.default)(classes.root, classes.modal, className),
257
+ shouldForwardComponentProp: true,
258
+ ownerState,
259
+ externalForwardedProps: {
260
+ ...externalForwardedProps,
261
+ ...other,
262
+ ...ModalProps
263
+ },
264
+ additionalProps: {
265
+ open,
266
+ onClose,
267
+ hideBackdrop,
268
+ slots: {
269
+ backdrop: externalForwardedProps.slots.backdrop
270
+ },
271
+ slotProps: {
272
+ backdrop: externalForwardedProps.slotProps.backdrop
273
+ }
274
+ }
275
+ });
276
+ const [PaperSlot, paperSlotProps] = (0, _useSlot.default)('paper', {
277
+ elementType: DrawerPaper,
278
+ shouldForwardComponentProp: true,
236
279
  className: (0, _clsx.default)(classes.paper, PaperProps.className),
237
- ownerState: ownerState,
280
+ ownerState,
281
+ externalForwardedProps,
282
+ additionalProps: {
283
+ elevation: variant === 'temporary' ? elevation : 0,
284
+ square: true
285
+ }
286
+ });
287
+ const [DockedSlot, dockedSlotProps] = (0, _useSlot.default)('docked', {
288
+ elementType: DrawerDockedRoot,
289
+ ref,
290
+ className: (0, _clsx.default)(classes.root, classes.docked, className),
291
+ ownerState,
292
+ externalForwardedProps,
293
+ additionalProps: other // pass `other` here because `DockedSlot` is also a root slot for some variants
294
+ });
295
+ const [TransitionSlot, transitionSlotProps] = (0, _useSlot.default)('transition', {
296
+ elementType: _Slide.default,
297
+ ownerState,
298
+ externalForwardedProps,
299
+ additionalProps: {
300
+ in: open,
301
+ direction: oppositeDirection[anchorInvariant],
302
+ timeout: transitionDuration,
303
+ appear: mounted.current
304
+ }
305
+ });
306
+ const drawer = /*#__PURE__*/(0, _jsxRuntime.jsx)(PaperSlot, {
307
+ ...paperSlotProps,
238
308
  children: children
239
309
  });
240
310
  if (variant === 'permanent') {
241
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(DrawerDockedRoot, {
242
- className: (0, _clsx.default)(classes.root, classes.docked, className),
243
- ownerState: ownerState,
244
- ref: ref,
245
- ...other,
311
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(DockedSlot, {
312
+ ...dockedSlotProps,
246
313
  children: drawer
247
314
  });
248
315
  }
249
- const slidingDrawer = /*#__PURE__*/(0, _jsxRuntime.jsx)(TransitionComponent, {
250
- in: open,
251
- direction: oppositeDirection[anchorInvariant],
252
- timeout: transitionDuration,
253
- appear: mounted.current,
254
- ...SlideProps,
316
+ const slidingDrawer = /*#__PURE__*/(0, _jsxRuntime.jsx)(TransitionSlot, {
317
+ ...transitionSlotProps,
255
318
  children: drawer
256
319
  });
257
320
  if (variant === 'persistent') {
258
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(DrawerDockedRoot, {
259
- className: (0, _clsx.default)(classes.root, classes.docked, className),
260
- ownerState: ownerState,
261
- ref: ref,
262
- ...other,
321
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(DockedSlot, {
322
+ ...dockedSlotProps,
263
323
  children: slidingDrawer
264
324
  });
265
325
  }
266
326
 
267
327
  // variant === temporary
268
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(DrawerRoot, {
269
- BackdropProps: {
270
- ...BackdropProps,
271
- ...BackdropPropsProp,
272
- transitionDuration
273
- },
274
- className: (0, _clsx.default)(classes.root, classes.modal, className),
275
- open: open,
276
- ownerState: ownerState,
277
- onClose: onClose,
278
- hideBackdrop: hideBackdrop,
279
- ref: ref,
280
- ...other,
281
- ...ModalProps,
328
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(RootSlot, {
329
+ ...rootSlotProps,
282
330
  children: slidingDrawer
283
331
  });
284
332
  });
@@ -338,13 +386,37 @@ process.env.NODE_ENV !== "production" ? Drawer.propTypes /* remove-proptypes */
338
386
  open: _propTypes.default.bool,
339
387
  /**
340
388
  * Props applied to the [`Paper`](https://mui.com/material-ui/api/paper/) element.
389
+ * @deprecated use the `slotProps.paper` 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.
341
390
  * @default {}
342
391
  */
343
392
  PaperProps: _propTypes.default.object,
344
393
  /**
345
394
  * Props applied to the [`Slide`](https://mui.com/material-ui/api/slide/) element.
395
+ * @deprecated use the `slotProps.transition` 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.
346
396
  */
347
397
  SlideProps: _propTypes.default.object,
398
+ /**
399
+ * The props used for each slot inside.
400
+ * @default {}
401
+ */
402
+ slotProps: _propTypes.default.shape({
403
+ backdrop: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
404
+ docked: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
405
+ paper: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
406
+ root: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
407
+ transition: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
408
+ }),
409
+ /**
410
+ * The components used for each slot inside.
411
+ * @default {}
412
+ */
413
+ slots: _propTypes.default.shape({
414
+ backdrop: _propTypes.default.elementType,
415
+ docked: _propTypes.default.elementType,
416
+ paper: _propTypes.default.elementType,
417
+ root: _propTypes.default.elementType,
418
+ transition: _propTypes.default.elementType
419
+ }),
348
420
  /**
349
421
  * The system prop that allows defining system overrides as well as additional CSS styles.
350
422
  */
package/node/Menu/Menu.js CHANGED
@@ -21,6 +21,7 @@ var _rootShouldForwardProp = _interopRequireDefault(require("../styles/rootShoul
21
21
  var _zeroStyled = require("../zero-styled");
22
22
  var _DefaultPropsProvider = require("../DefaultPropsProvider");
23
23
  var _menuClasses = require("./menuClasses");
24
+ var _useSlot = _interopRequireDefault(require("../utils/useSlot"));
24
25
  var _jsxRuntime = require("react/jsx-runtime");
25
26
  const RTL_ORIGIN = {
26
27
  vertical: 'top',
@@ -152,20 +153,43 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {
152
153
  }
153
154
  }
154
155
  });
155
- const PaperSlot = slots.paper ?? MenuPaper;
156
- const paperExternalSlotProps = slotProps.paper ?? PaperProps;
156
+ const externalForwardedProps = {
157
+ slots,
158
+ slotProps: {
159
+ list: MenuListProps,
160
+ transition: TransitionProps,
161
+ paper: PaperProps,
162
+ ...slotProps
163
+ }
164
+ };
157
165
  const rootSlotProps = (0, _useSlotProps.default)({
158
166
  elementType: slots.root,
159
167
  externalSlotProps: slotProps.root,
160
168
  ownerState,
161
169
  className: [classes.root, className]
162
170
  });
163
- const paperSlotProps = (0, _useSlotProps.default)({
164
- elementType: PaperSlot,
165
- externalSlotProps: paperExternalSlotProps,
166
- ownerState,
167
- className: classes.paper
171
+ const [PaperSlot, paperSlotProps] = (0, _useSlot.default)('paper', {
172
+ className: classes.paper,
173
+ elementType: MenuPaper,
174
+ externalForwardedProps,
175
+ shouldForwardComponentProp: true,
176
+ ownerState
177
+ });
178
+ const [ListSlot, listSlotProps] = (0, _useSlot.default)('list', {
179
+ className: (0, _clsx.default)(classes.list, MenuListProps.className),
180
+ elementType: MenuMenuList,
181
+ shouldForwardComponentProp: true,
182
+ externalForwardedProps,
183
+ getSlotProps: handlers => ({
184
+ ...handlers,
185
+ onKeyDown: event => {
186
+ handleListKeyDown(event);
187
+ handlers.onKeyDown?.(event);
188
+ }
189
+ }),
190
+ ownerState
168
191
  });
192
+ const resolvedTransitionProps = typeof externalForwardedProps.slotProps.transition === 'function' ? externalForwardedProps.slotProps.transition(ownerState) : externalForwardedProps.slotProps.transition;
169
193
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(MenuRoot, {
170
194
  onClose: onClose,
171
195
  anchorOrigin: {
@@ -174,31 +198,38 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {
174
198
  },
175
199
  transformOrigin: isRtl ? RTL_ORIGIN : LTR_ORIGIN,
176
200
  slots: {
201
+ root: slots.root,
177
202
  paper: PaperSlot,
178
- root: slots.root
203
+ backdrop: slots.backdrop,
204
+ ...(slots.transition && {
205
+ // TODO: pass `slots.transition` directly once `TransitionComponent` is removed from Popover
206
+ transition: slots.transition
207
+ })
179
208
  },
180
209
  slotProps: {
181
210
  root: rootSlotProps,
182
- paper: paperSlotProps
211
+ paper: paperSlotProps,
212
+ backdrop: typeof slotProps.backdrop === 'function' ? slotProps.backdrop(ownerState) : slotProps.backdrop,
213
+ transition: {
214
+ ...resolvedTransitionProps,
215
+ onEntering: (...args) => {
216
+ handleEntering(...args);
217
+ resolvedTransitionProps?.onEntering?.(...args);
218
+ }
219
+ }
183
220
  },
184
221
  open: open,
185
222
  ref: ref,
186
223
  transitionDuration: transitionDuration,
187
- TransitionProps: {
188
- onEntering: handleEntering,
189
- ...TransitionProps
190
- },
191
224
  ownerState: ownerState,
192
225
  ...other,
193
226
  classes: PopoverClasses,
194
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(MenuMenuList, {
195
- onKeyDown: handleListKeyDown,
227
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ListSlot, {
196
228
  actions: menuListActionsRef,
197
229
  autoFocus: autoFocus && (activeItemIndex === -1 || disableAutoFocusItem),
198
230
  autoFocusItem: autoFocusItem,
199
231
  variant: variant,
200
- ...MenuListProps,
201
- className: (0, _clsx.default)(classes.list, MenuListProps.className),
232
+ ...listSlotProps,
202
233
  children: children
203
234
  })
204
235
  });
@@ -243,6 +274,7 @@ process.env.NODE_ENV !== "production" ? Menu.propTypes /* remove-proptypes */ =
243
274
  disableAutoFocusItem: _propTypes.default.bool,
244
275
  /**
245
276
  * Props applied to the [`MenuList`](https://mui.com/material-ui/api/menu-list/) element.
277
+ * @deprecated use the `slotProps.list` 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.
246
278
  * @default {}
247
279
  */
248
280
  MenuListProps: _propTypes.default.object,
@@ -270,16 +302,22 @@ process.env.NODE_ENV !== "production" ? Menu.propTypes /* remove-proptypes */ =
270
302
  * @default {}
271
303
  */
272
304
  slotProps: _propTypes.default.shape({
305
+ backdrop: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
306
+ list: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
273
307
  paper: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
274
- root: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
308
+ root: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
309
+ transition: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
275
310
  }),
276
311
  /**
277
312
  * The components used for each slot inside.
278
313
  * @default {}
279
314
  */
280
315
  slots: _propTypes.default.shape({
316
+ backdrop: _propTypes.default.elementType,
317
+ list: _propTypes.default.elementType,
281
318
  paper: _propTypes.default.elementType,
282
- root: _propTypes.default.elementType
319
+ root: _propTypes.default.elementType,
320
+ transition: _propTypes.default.elementType
283
321
  }),
284
322
  /**
285
323
  * The system prop that allows defining system overrides as well as additional CSS styles.
@@ -297,6 +335,7 @@ process.env.NODE_ENV !== "production" ? Menu.propTypes /* remove-proptypes */ =
297
335
  /**
298
336
  * Props applied to the transition element.
299
337
  * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
338
+ * @deprecated use the `slotProps.transition` 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.
300
339
  * @default {}
301
340
  */
302
341
  TransitionProps: _propTypes.default.object,
@@ -22,7 +22,6 @@ var _Backdrop = _interopRequireDefault(require("../Backdrop"));
22
22
  var _useModal = _interopRequireDefault(require("./useModal"));
23
23
  var _modalClasses = require("./modalClasses");
24
24
  var _useSlot = _interopRequireDefault(require("../utils/useSlot"));
25
- var _utils = require("../utils");
26
25
  var _jsxRuntime = require("react/jsx-runtime");
27
26
  const useUtilityClasses = ownerState => {
28
27
  const {
@@ -165,7 +164,6 @@ const Modal = /*#__PURE__*/React.forwardRef(function Modal(inProps, ref) {
165
164
  childProps.onExited = onExited;
166
165
  }
167
166
  const externalForwardedProps = {
168
- ...other,
169
167
  slots: {
170
168
  root: components.Root,
171
169
  backdrop: components.Backdrop,
@@ -177,19 +175,22 @@ const Modal = /*#__PURE__*/React.forwardRef(function Modal(inProps, ref) {
177
175
  }
178
176
  };
179
177
  const [RootSlot, rootProps] = (0, _useSlot.default)('root', {
178
+ ref,
180
179
  elementType: ModalRoot,
181
- externalForwardedProps,
182
- getSlotProps: getRootProps,
183
- additionalProps: {
184
- ref,
185
- as: component
180
+ externalForwardedProps: {
181
+ ...externalForwardedProps,
182
+ ...other,
183
+ component
186
184
  },
185
+ getSlotProps: getRootProps,
187
186
  ownerState,
188
187
  className: (0, _clsx.default)(className, classes?.root, !ownerState.open && ownerState.exited && classes?.hidden)
189
188
  });
190
189
  const [BackdropSlot, backdropProps] = (0, _useSlot.default)('backdrop', {
190
+ ref: BackdropProps?.ref,
191
191
  elementType: BackdropComponent,
192
192
  externalForwardedProps,
193
+ shouldForwardComponentProp: true,
193
194
  additionalProps: BackdropProps,
194
195
  getSlotProps: otherHandlers => {
195
196
  return getBackdropProps({
@@ -207,7 +208,6 @@ const Modal = /*#__PURE__*/React.forwardRef(function Modal(inProps, ref) {
207
208
  className: (0, _clsx.default)(BackdropProps?.className, classes?.backdrop),
208
209
  ownerState
209
210
  });
210
- const backdropRef = (0, _utils.useForkRef)(BackdropProps?.ref, backdropProps.ref);
211
211
  if (!keepMounted && !open && (!hasTransition || exited)) {
212
212
  return null;
213
213
  }
@@ -218,8 +218,7 @@ const Modal = /*#__PURE__*/React.forwardRef(function Modal(inProps, ref) {
218
218
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(RootSlot, {
219
219
  ...rootProps,
220
220
  children: [!hideBackdrop && BackdropComponent ? /*#__PURE__*/(0, _jsxRuntime.jsx)(BackdropSlot, {
221
- ...backdropProps,
222
- ref: backdropRef
221
+ ...backdropProps
223
222
  }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_Unstable_TrapFocus.default, {
224
223
  disableEnforceFocus: disableEnforceFocus,
225
224
  disableAutoFocus: disableAutoFocus,
@@ -24,12 +24,12 @@ var _DefaultPropsProvider = require("../DefaultPropsProvider");
24
24
  var _debounce = _interopRequireDefault(require("../utils/debounce"));
25
25
  var _ownerDocument = _interopRequireDefault(require("../utils/ownerDocument"));
26
26
  var _ownerWindow = _interopRequireDefault(require("../utils/ownerWindow"));
27
- var _useForkRef = _interopRequireDefault(require("../utils/useForkRef"));
28
27
  var _Grow = _interopRequireDefault(require("../Grow"));
29
28
  var _Modal = _interopRequireDefault(require("../Modal"));
30
29
  var _Paper = _interopRequireDefault(require("../Paper"));
31
30
  var _popoverClasses = require("./popoverClasses");
32
31
  var _useSlot = _interopRequireDefault(require("../utils/useSlot"));
32
+ var _utils = require("../utils");
33
33
  var _jsxRuntime = require("react/jsx-runtime");
34
34
  function getOffsetTop(rect, vertical) {
35
35
  let offset = 0;
@@ -112,22 +112,21 @@ const Popover = /*#__PURE__*/React.forwardRef(function Popover(inProps, ref) {
112
112
  marginThreshold = 16,
113
113
  open,
114
114
  PaperProps: PaperPropsProp = {},
115
+ // TODO: remove in v7
115
116
  slots = {},
116
117
  slotProps = {},
117
118
  transformOrigin = {
118
119
  vertical: 'top',
119
120
  horizontal: 'left'
120
121
  },
121
- TransitionComponent = _Grow.default,
122
+ TransitionComponent,
123
+ // TODO: remove in v7
122
124
  transitionDuration: transitionDurationProp = 'auto',
123
- TransitionProps: {
124
- onEntering,
125
- ...TransitionProps
126
- } = {},
125
+ TransitionProps = {},
126
+ // TODO: remove in v7
127
127
  disableScrollLock = false,
128
128
  ...other
129
129
  } = props;
130
- const externalPaperSlotProps = slotProps?.paper ?? PaperPropsProp;
131
130
  const paperRef = React.useRef();
132
131
  const ownerState = {
133
132
  ...props,
@@ -135,7 +134,6 @@ const Popover = /*#__PURE__*/React.forwardRef(function Popover(inProps, ref) {
135
134
  anchorReference,
136
135
  elevation,
137
136
  marginThreshold,
138
- externalPaperSlotProps,
139
137
  transformOrigin,
140
138
  TransitionComponent,
141
139
  transitionDuration: transitionDurationProp,
@@ -264,10 +262,7 @@ const Popover = /*#__PURE__*/React.forwardRef(function Popover(inProps, ref) {
264
262
  }
265
263
  return () => window.removeEventListener('scroll', setPositioningStyles);
266
264
  }, [anchorEl, disableScrollLock, setPositioningStyles]);
267
- const handleEntering = (element, isAppearing) => {
268
- if (onEntering) {
269
- onEntering(element, isAppearing);
270
- }
265
+ const handleEntering = () => {
271
266
  setPositioningStyles();
272
267
  };
273
268
  const handleExited = () => {
@@ -298,45 +293,65 @@ const Popover = /*#__PURE__*/React.forwardRef(function Popover(inProps, ref) {
298
293
  };
299
294
  }, [anchorEl, open, setPositioningStyles]);
300
295
  let transitionDuration = transitionDurationProp;
301
- if (transitionDurationProp === 'auto' && !TransitionComponent.muiSupportAuto) {
302
- transitionDuration = undefined;
303
- }
304
-
305
- // If the container prop is provided, use that
306
- // If the anchorEl prop is provided, use its parent body element as the container
307
- // If neither are provided let the Modal take care of choosing the container
308
- const container = containerProp || (anchorEl ? (0, _ownerDocument.default)(resolveAnchorEl(anchorEl)).body : undefined);
309
296
  const externalForwardedProps = {
310
- slots,
297
+ slots: {
298
+ transition: TransitionComponent,
299
+ ...slots
300
+ },
311
301
  slotProps: {
312
- ...slotProps,
313
- paper: externalPaperSlotProps
302
+ transition: TransitionProps,
303
+ paper: PaperPropsProp,
304
+ ...slotProps
314
305
  }
315
306
  };
316
- const [PaperSlot, paperProps] = (0, _useSlot.default)('paper', {
317
- elementType: PopoverPaper,
307
+ const [TransitionSlot, transitionSlotProps] = (0, _useSlot.default)('transition', {
308
+ elementType: _Grow.default,
318
309
  externalForwardedProps,
319
- additionalProps: {
320
- elevation,
321
- className: (0, _clsx.default)(classes.paper, externalPaperSlotProps?.className),
322
- style: isPositioned ? externalPaperSlotProps.style : {
323
- ...externalPaperSlotProps.style,
324
- opacity: 0
310
+ ownerState,
311
+ getSlotProps: handlers => ({
312
+ ...handlers,
313
+ onEntering: (element, isAppearing) => {
314
+ handlers.onEntering?.(element, isAppearing);
315
+ handleEntering();
316
+ },
317
+ onExited: element => {
318
+ handlers.onExited?.(element);
319
+ handleExited();
325
320
  }
326
- },
327
- ownerState
321
+ }),
322
+ additionalProps: {
323
+ appear: true,
324
+ in: open
325
+ }
328
326
  });
327
+ if (transitionDurationProp === 'auto' && !TransitionSlot.muiSupportAuto) {
328
+ transitionDuration = undefined;
329
+ }
330
+
331
+ // If the container prop is provided, use that
332
+ // If the anchorEl prop is provided, use its parent body element as the container
333
+ // If neither are provided let the Modal take care of choosing the container
334
+ const container = containerProp || (anchorEl ? (0, _ownerDocument.default)(resolveAnchorEl(anchorEl)).body : undefined);
329
335
  const [RootSlot, {
336
+ slots: rootSlotsProp,
330
337
  slotProps: rootSlotPropsProp,
331
338
  ...rootProps
332
339
  }] = (0, _useSlot.default)('root', {
340
+ ref,
333
341
  elementType: PopoverRoot,
334
- externalForwardedProps,
342
+ externalForwardedProps: {
343
+ ...externalForwardedProps,
344
+ ...other
345
+ },
346
+ shouldForwardComponentProp: true,
335
347
  additionalProps: {
348
+ slots: {
349
+ backdrop: slots.backdrop
350
+ },
336
351
  slotProps: {
337
- backdrop: {
352
+ backdrop: (0, _utils.mergeSlotProps)(typeof slotProps.backdrop === 'function' ? slotProps.backdrop(ownerState) : slotProps.backdrop, {
338
353
  invisible: true
339
- }
354
+ })
340
355
  },
341
356
  container,
342
357
  open
@@ -344,25 +359,32 @@ const Popover = /*#__PURE__*/React.forwardRef(function Popover(inProps, ref) {
344
359
  ownerState,
345
360
  className: (0, _clsx.default)(classes.root, className)
346
361
  });
347
- const handlePaperRef = (0, _useForkRef.default)(paperRef, paperProps.ref);
362
+ const [PaperSlot, paperProps] = (0, _useSlot.default)('paper', {
363
+ ref: paperRef,
364
+ className: classes.paper,
365
+ elementType: PopoverPaper,
366
+ externalForwardedProps,
367
+ shouldForwardComponentProp: true,
368
+ additionalProps: {
369
+ elevation,
370
+ style: isPositioned ? undefined : {
371
+ opacity: 0
372
+ }
373
+ },
374
+ ownerState
375
+ });
348
376
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(RootSlot, {
349
377
  ...rootProps,
350
378
  ...(!(0, _isHostComponent.default)(RootSlot) && {
379
+ slots: rootSlotsProp,
351
380
  slotProps: rootSlotPropsProp,
352
381
  disableScrollLock
353
382
  }),
354
- ...other,
355
- ref: ref,
356
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(TransitionComponent, {
357
- appear: true,
358
- in: open,
359
- onEntering: handleEntering,
360
- onExited: handleExited,
383
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(TransitionSlot, {
384
+ ...transitionSlotProps,
361
385
  timeout: transitionDuration,
362
- ...TransitionProps,
363
386
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(PaperSlot, {
364
387
  ...paperProps,
365
- ref: handlePaperRef,
366
388
  children: children
367
389
  })
368
390
  })
@@ -430,8 +452,7 @@ process.env.NODE_ENV !== "production" ? Popover.propTypes /* remove-proptypes */
430
452
  anchorReference: _propTypes.default.oneOf(['anchorEl', 'anchorPosition', 'none']),
431
453
  /**
432
454
  * A backdrop component. This prop enables custom backdrop rendering.
433
- * @deprecated Use `slotProps.root.slots.backdrop` instead. While this prop currently works, it will be removed in the next major version.
434
- * Use the `slotProps.root.slots.backdrop` prop to make your application ready for the next version of Material UI.
455
+ * @deprecated Use `slots.backdrop` 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.
435
456
  * @default styled(Backdrop, {
436
457
  * name: 'MuiModal',
437
458
  * slot: 'Backdrop',
@@ -445,7 +466,7 @@ process.env.NODE_ENV !== "production" ? Popover.propTypes /* remove-proptypes */
445
466
  BackdropComponent: _propTypes.default.elementType,
446
467
  /**
447
468
  * Props applied to the [`Backdrop`](/material-ui/api/backdrop/) element.
448
- * @deprecated Use `slotProps.root.slotProps.backdrop` instead.
469
+ * @deprecated Use `slotProps.backdrop` 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.
449
470
  */
450
471
  BackdropProps: _propTypes.default.object,
451
472
  /**
@@ -509,16 +530,20 @@ process.env.NODE_ENV !== "production" ? Popover.propTypes /* remove-proptypes */
509
530
  * @default {}
510
531
  */
511
532
  slotProps: _propTypes.default.shape({
533
+ backdrop: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
512
534
  paper: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
513
- root: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
535
+ root: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
536
+ transition: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
514
537
  }),
515
538
  /**
516
539
  * The components used for each slot inside.
517
540
  * @default {}
518
541
  */
519
542
  slots: _propTypes.default.shape({
543
+ backdrop: _propTypes.default.elementType,
520
544
  paper: _propTypes.default.elementType,
521
- root: _propTypes.default.elementType
545
+ root: _propTypes.default.elementType,
546
+ transition: _propTypes.default.elementType
522
547
  }),
523
548
  /**
524
549
  * The system prop that allows defining system overrides as well as additional CSS styles.
@@ -543,6 +568,7 @@ process.env.NODE_ENV !== "production" ? Popover.propTypes /* remove-proptypes */
543
568
  /**
544
569
  * The component used for the transition.
545
570
  * [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
571
+ * @deprecated use the `slots.transition` 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.
546
572
  * @default Grow
547
573
  */
548
574
  TransitionComponent: _propTypes.default.elementType,
@@ -558,6 +584,7 @@ process.env.NODE_ENV !== "production" ? Popover.propTypes /* remove-proptypes */
558
584
  /**
559
585
  * Props applied to the transition element.
560
586
  * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
587
+ * @deprecated use the `slotProps.transition` 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.
561
588
  * @default {}
562
589
  */
563
590
  TransitionProps: _propTypes.default.object