@mui/material 6.4.0 → 6.4.2
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.
- package/AppBar/AppBar.d.ts +1 -1
- package/ButtonBase/ButtonBase.d.ts +2 -0
- package/ButtonGroup/ButtonGroupButtonContext.js +2 -0
- package/ButtonGroup/ButtonGroupContext.js +2 -0
- package/CHANGELOG.md +69 -0
- package/Card/Card.d.ts +1 -1
- package/Dialog/Dialog.d.ts +85 -1
- package/Dialog/Dialog.js +91 -20
- package/Dialog/DialogContext.js +2 -0
- package/Drawer/Drawer.js +1 -1
- package/Drawer/drawerClasses.d.ts +32 -8
- package/Drawer/drawerClasses.js +1 -1
- package/FormControl/FormControl.js +9 -7
- package/FormControl/FormControlContext.js +2 -0
- package/Hidden/withWidth.js +2 -0
- package/IconButton/IconButton.d.ts +3 -2
- package/IconButton/IconButton.js +18 -7
- package/IconButton/iconButtonClasses.d.ts +2 -0
- package/IconButton/iconButtonClasses.js +1 -1
- package/OverridableComponent/index.d.ts +41 -0
- package/OverridableComponent/index.js +1 -0
- package/OverridableComponent/package.json +6 -0
- package/PaginationItem/PaginationItem.d.ts +1 -1
- package/RadioGroup/RadioGroupContext.js +2 -0
- package/Slider/useSlider.js +2 -2
- package/Step/StepContext.js +2 -0
- package/Stepper/StepperContext.js +2 -0
- package/Table/Tablelvl2Context.js +2 -0
- package/TextareaAutosize/TextareaAutosize.js +50 -40
- package/ToggleButtonGroup/ToggleButtonGroupButtonContext.js +2 -0
- package/ToggleButtonGroup/ToggleButtonGroupContext.js +2 -0
- package/index.js +1 -1
- package/modern/ButtonGroup/ButtonGroupButtonContext.js +2 -0
- package/modern/ButtonGroup/ButtonGroupContext.js +2 -0
- package/modern/Dialog/Dialog.js +91 -20
- package/modern/Dialog/DialogContext.js +2 -0
- package/modern/Drawer/Drawer.js +1 -1
- package/modern/Drawer/drawerClasses.js +1 -1
- package/modern/FormControl/FormControl.js +9 -7
- package/modern/FormControl/FormControlContext.js +2 -0
- package/modern/Hidden/withWidth.js +2 -0
- package/modern/IconButton/IconButton.js +18 -7
- package/modern/IconButton/iconButtonClasses.js +1 -1
- package/modern/OverridableComponent/index.js +1 -0
- package/modern/RadioGroup/RadioGroupContext.js +2 -0
- package/modern/Slider/useSlider.js +2 -2
- package/modern/Step/StepContext.js +2 -0
- package/modern/Stepper/StepperContext.js +2 -0
- package/modern/Table/Tablelvl2Context.js +2 -0
- package/modern/TextareaAutosize/TextareaAutosize.js +50 -40
- package/modern/ToggleButtonGroup/ToggleButtonGroupButtonContext.js +2 -0
- package/modern/ToggleButtonGroup/ToggleButtonGroupContext.js +2 -0
- package/modern/index.js +1 -1
- package/modern/styles/components.js +1 -0
- package/modern/styles/overrides.js +1 -0
- package/modern/styles/props.js +1 -0
- package/modern/styles/variants.js +1 -0
- package/modern/useAutocomplete/useAutocomplete.js +13 -10
- package/modern/version/index.js +2 -2
- package/node/ButtonGroup/ButtonGroupButtonContext.js +1 -0
- package/node/ButtonGroup/ButtonGroupContext.js +1 -0
- package/node/Dialog/Dialog.js +91 -20
- package/node/Dialog/DialogContext.js +1 -0
- package/node/Drawer/Drawer.js +1 -1
- package/node/Drawer/drawerClasses.js +1 -1
- package/node/FormControl/FormControl.js +9 -7
- package/node/FormControl/FormControlContext.js +1 -0
- package/node/Hidden/withWidth.js +1 -0
- package/node/IconButton/IconButton.js +18 -7
- package/node/IconButton/iconButtonClasses.js +1 -1
- package/node/OverridableComponent/index.js +5 -0
- package/node/RadioGroup/RadioGroupContext.js +1 -0
- package/node/Slider/useSlider.js +2 -2
- package/node/Step/StepContext.js +1 -0
- package/node/Stepper/StepperContext.js +1 -0
- package/node/Table/Tablelvl2Context.js +1 -0
- package/node/TextareaAutosize/TextareaAutosize.js +50 -40
- package/node/ToggleButtonGroup/ToggleButtonGroupButtonContext.js +1 -0
- package/node/ToggleButtonGroup/ToggleButtonGroupContext.js +1 -0
- package/node/index.js +1 -1
- package/node/styles/components.js +5 -0
- package/node/styles/overrides.js +5 -0
- package/node/styles/props.js +5 -0
- package/node/styles/variants.js +5 -0
- package/node/useAutocomplete/useAutocomplete.js +13 -10
- package/node/version/index.js +2 -2
- package/package.json +5 -5
- package/styles/components.d.ts +590 -591
- package/styles/components.js +1 -0
- package/styles/createThemeNoVars.d.ts +1 -1
- package/styles/overrides.d.ts +123 -142
- package/styles/overrides.js +1 -0
- package/styles/props.d.ts +120 -122
- package/styles/props.js +1 -0
- package/styles/variants.d.ts +7 -10
- package/styles/variants.js +1 -0
- package/useAutocomplete/useAutocomplete.js +13 -10
- package/version/index.js +2 -2
- package/OverridableComponent.d.ts +0 -67
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { DistributiveOmit } from '@mui/types';
|
|
3
|
+
import { StyledComponentProps } from '../styles';
|
|
4
|
+
/**
|
|
5
|
+
* A component whose root component can be controlled via a `component` prop.
|
|
6
|
+
*
|
|
7
|
+
* Adjusts valid props based on the type of `component`.
|
|
8
|
+
*/
|
|
9
|
+
export interface OverridableComponent<TypeMap extends OverridableTypeMap> {
|
|
10
|
+
<RootComponent extends React.ElementType>(props: {
|
|
11
|
+
/**
|
|
12
|
+
* The component used for the root node.
|
|
13
|
+
* Either a string to use a HTML element or a component.
|
|
14
|
+
*/
|
|
15
|
+
component: RootComponent;
|
|
16
|
+
} & OverrideProps<TypeMap, RootComponent>): React.JSX.Element | null;
|
|
17
|
+
(props: DefaultComponentProps<TypeMap>): React.JSX.Element | null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Props of the component if `component={Component}` is used.
|
|
21
|
+
*/
|
|
22
|
+
export type OverrideProps<TypeMap extends OverridableTypeMap, RootComponent extends React.ElementType> = (BaseProps<TypeMap> & DistributiveOmit<React.ComponentPropsWithRef<RootComponent>, keyof BaseProps<TypeMap>>);
|
|
23
|
+
/**
|
|
24
|
+
* Props if `component={Component}` is NOT used.
|
|
25
|
+
*/
|
|
26
|
+
export type DefaultComponentProps<TypeMap extends OverridableTypeMap> = BaseProps<TypeMap> & DistributiveOmit<React.ComponentPropsWithRef<TypeMap['defaultComponent']>, keyof BaseProps<TypeMap>>;
|
|
27
|
+
/**
|
|
28
|
+
* Props defined on the component (+ common material-ui props).
|
|
29
|
+
*/
|
|
30
|
+
export type BaseProps<TypeMap extends OverridableTypeMap> = TypeMap['props'] & CommonProps;
|
|
31
|
+
/**
|
|
32
|
+
* Props that are valid for material-ui components.
|
|
33
|
+
*/
|
|
34
|
+
export interface CommonProps extends StyledComponentProps<never> {
|
|
35
|
+
className?: string;
|
|
36
|
+
style?: React.CSSProperties;
|
|
37
|
+
}
|
|
38
|
+
export interface OverridableTypeMap {
|
|
39
|
+
props: {};
|
|
40
|
+
defaultComponent: React.ElementType;
|
|
41
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { OverridableStringUnion } from '@mui/types';
|
|
3
3
|
import { SxProps } from '@mui/system';
|
|
4
|
-
import { OverridableComponent, OverrideProps } from '
|
|
4
|
+
import { OverridableComponent, OverrideProps } from '../OverridableComponent';
|
|
5
5
|
import { Theme } from '../styles';
|
|
6
6
|
import { UsePaginationItem } from '../usePagination/usePagination';
|
|
7
7
|
import { PaginationItemClasses } from './paginationItemClasses';
|
package/Slider/useSlider.js
CHANGED
|
@@ -245,9 +245,9 @@ export function useSlider(parameters) {
|
|
|
245
245
|
let newValue = valueInput;
|
|
246
246
|
if (marks && step == null) {
|
|
247
247
|
const maxMarksValue = marksValues[marksValues.length - 1];
|
|
248
|
-
if (newValue
|
|
248
|
+
if (newValue >= maxMarksValue) {
|
|
249
249
|
newValue = maxMarksValue;
|
|
250
|
-
} else if (newValue
|
|
250
|
+
} else if (newValue <= marksValues[0]) {
|
|
251
251
|
newValue = marksValues[0];
|
|
252
252
|
} else {
|
|
253
253
|
newValue = newValue < value ? marksValues[marksIndex - 1] : marksValues[marksIndex + 1];
|
package/Step/StepContext.js
CHANGED
|
@@ -22,8 +22,15 @@ const styles = {
|
|
|
22
22
|
transform: 'translateZ(0)'
|
|
23
23
|
}
|
|
24
24
|
};
|
|
25
|
+
function isObjectEmpty(object) {
|
|
26
|
+
// eslint-disable-next-line
|
|
27
|
+
for (const _ in object) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
25
32
|
function isEmpty(obj) {
|
|
26
|
-
return
|
|
33
|
+
return isObjectEmpty(obj) || obj.outerHeightStyle === 0 && !obj.overflowing;
|
|
27
34
|
}
|
|
28
35
|
|
|
29
36
|
/**
|
|
@@ -48,14 +55,18 @@ const TextareaAutosize = /*#__PURE__*/React.forwardRef(function TextareaAutosize
|
|
|
48
55
|
const {
|
|
49
56
|
current: isControlled
|
|
50
57
|
} = React.useRef(value != null);
|
|
51
|
-
const
|
|
52
|
-
const handleRef = useForkRef(forwardedRef,
|
|
58
|
+
const textareaRef = React.useRef(null);
|
|
59
|
+
const handleRef = useForkRef(forwardedRef, textareaRef);
|
|
53
60
|
const heightRef = React.useRef(null);
|
|
54
|
-
const
|
|
61
|
+
const hiddenTextareaRef = React.useRef(null);
|
|
55
62
|
const calculateTextareaStyles = React.useCallback(() => {
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
|
|
63
|
+
const textarea = textareaRef.current;
|
|
64
|
+
const hiddenTextarea = hiddenTextareaRef.current;
|
|
65
|
+
if (!textarea || !hiddenTextarea) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
const containerWindow = ownerWindow(textarea);
|
|
69
|
+
const computedStyle = containerWindow.getComputedStyle(textarea);
|
|
59
70
|
|
|
60
71
|
// If input's width is shrunk and it's not visible, don't sync height.
|
|
61
72
|
if (computedStyle.width === '0px') {
|
|
@@ -64,25 +75,24 @@ const TextareaAutosize = /*#__PURE__*/React.forwardRef(function TextareaAutosize
|
|
|
64
75
|
overflowing: false
|
|
65
76
|
};
|
|
66
77
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (inputShallow.value.slice(-1) === '\n') {
|
|
78
|
+
hiddenTextarea.style.width = computedStyle.width;
|
|
79
|
+
hiddenTextarea.value = textarea.value || props.placeholder || 'x';
|
|
80
|
+
if (hiddenTextarea.value.slice(-1) === '\n') {
|
|
71
81
|
// Certain fonts which overflow the line height will cause the textarea
|
|
72
82
|
// to report a different scrollHeight depending on whether the last line
|
|
73
83
|
// is empty. Make it non-empty to avoid this issue.
|
|
74
|
-
|
|
84
|
+
hiddenTextarea.value += ' ';
|
|
75
85
|
}
|
|
76
86
|
const boxSizing = computedStyle.boxSizing;
|
|
77
87
|
const padding = getStyleValue(computedStyle.paddingBottom) + getStyleValue(computedStyle.paddingTop);
|
|
78
88
|
const border = getStyleValue(computedStyle.borderBottomWidth) + getStyleValue(computedStyle.borderTopWidth);
|
|
79
89
|
|
|
80
90
|
// The height of the inner content
|
|
81
|
-
const innerHeight =
|
|
91
|
+
const innerHeight = hiddenTextarea.scrollHeight;
|
|
82
92
|
|
|
83
93
|
// Measure height of a textarea with a single row
|
|
84
|
-
|
|
85
|
-
const singleRowHeight =
|
|
94
|
+
hiddenTextarea.value = 'x';
|
|
95
|
+
const singleRowHeight = hiddenTextarea.scrollHeight;
|
|
86
96
|
|
|
87
97
|
// The height of the outer content
|
|
88
98
|
let outerHeight = innerHeight;
|
|
@@ -103,45 +113,45 @@ const TextareaAutosize = /*#__PURE__*/React.forwardRef(function TextareaAutosize
|
|
|
103
113
|
};
|
|
104
114
|
}, [maxRows, minRows, props.placeholder]);
|
|
105
115
|
const syncHeight = React.useCallback(() => {
|
|
116
|
+
const textarea = textareaRef.current;
|
|
106
117
|
const textareaStyles = calculateTextareaStyles();
|
|
107
|
-
if (isEmpty(textareaStyles)) {
|
|
118
|
+
if (!textarea || !textareaStyles || isEmpty(textareaStyles)) {
|
|
108
119
|
return;
|
|
109
120
|
}
|
|
110
121
|
const outerHeightStyle = textareaStyles.outerHeightStyle;
|
|
111
|
-
const input = inputRef.current;
|
|
112
122
|
if (heightRef.current !== outerHeightStyle) {
|
|
113
123
|
heightRef.current = outerHeightStyle;
|
|
114
|
-
|
|
124
|
+
textarea.style.height = `${outerHeightStyle}px`;
|
|
115
125
|
}
|
|
116
|
-
|
|
126
|
+
textarea.style.overflow = textareaStyles.overflowing ? 'hidden' : '';
|
|
117
127
|
}, [calculateTextareaStyles]);
|
|
128
|
+
const frameRef = React.useRef(-1);
|
|
118
129
|
useEnhancedEffect(() => {
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
// Also see https://github.com/mui/mui-x/issues/8733
|
|
126
|
-
let rAF;
|
|
127
|
-
const rAFHandleResize = () => {
|
|
128
|
-
cancelAnimationFrame(rAF);
|
|
129
|
-
rAF = requestAnimationFrame(() => {
|
|
130
|
-
handleResize();
|
|
131
|
-
});
|
|
132
|
-
};
|
|
133
|
-
const debounceHandleResize = debounce(handleResize);
|
|
134
|
-
const input = inputRef.current;
|
|
135
|
-
const containerWindow = ownerWindow(input);
|
|
130
|
+
const debounceHandleResize = debounce(() => syncHeight());
|
|
131
|
+
const textarea = textareaRef?.current;
|
|
132
|
+
if (!textarea) {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
const containerWindow = ownerWindow(textarea);
|
|
136
136
|
containerWindow.addEventListener('resize', debounceHandleResize);
|
|
137
137
|
let resizeObserver;
|
|
138
138
|
if (typeof ResizeObserver !== 'undefined') {
|
|
139
|
-
resizeObserver = new ResizeObserver(
|
|
140
|
-
|
|
139
|
+
resizeObserver = new ResizeObserver(() => {
|
|
140
|
+
// avoid "ResizeObserver loop completed with undelivered notifications" error
|
|
141
|
+
// by temporarily unobserving the textarea element while manipulating the height
|
|
142
|
+
// and reobserving one frame later
|
|
143
|
+
resizeObserver.unobserve(textarea);
|
|
144
|
+
cancelAnimationFrame(frameRef.current);
|
|
145
|
+
syncHeight();
|
|
146
|
+
frameRef.current = requestAnimationFrame(() => {
|
|
147
|
+
resizeObserver.observe(textarea);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
resizeObserver.observe(textarea);
|
|
141
151
|
}
|
|
142
152
|
return () => {
|
|
143
153
|
debounceHandleResize.clear();
|
|
144
|
-
cancelAnimationFrame(
|
|
154
|
+
cancelAnimationFrame(frameRef.current);
|
|
145
155
|
containerWindow.removeEventListener('resize', debounceHandleResize);
|
|
146
156
|
if (resizeObserver) {
|
|
147
157
|
resizeObserver.disconnect();
|
|
@@ -173,7 +183,7 @@ const TextareaAutosize = /*#__PURE__*/React.forwardRef(function TextareaAutosize
|
|
|
173
183
|
"aria-hidden": true,
|
|
174
184
|
className: props.className,
|
|
175
185
|
readOnly: true,
|
|
176
|
-
ref:
|
|
186
|
+
ref: hiddenTextareaRef,
|
|
177
187
|
tabIndex: -1,
|
|
178
188
|
style: {
|
|
179
189
|
...styles.shadow,
|
package/index.js
CHANGED
package/modern/Dialog/Dialog.js
CHANGED
|
@@ -15,6 +15,7 @@ import Backdrop from "../Backdrop/index.js";
|
|
|
15
15
|
import { styled, useTheme } from "../zero-styled/index.js";
|
|
16
16
|
import memoTheme from "../utils/memoTheme.js";
|
|
17
17
|
import { useDefaultProps } from "../DefaultPropsProvider/index.js";
|
|
18
|
+
import useSlot from "../utils/useSlot.js";
|
|
18
19
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
19
20
|
const DialogBackdrop = styled(Backdrop, {
|
|
20
21
|
name: 'MuiDialog',
|
|
@@ -218,6 +219,8 @@ const Dialog = /*#__PURE__*/React.forwardRef(function Dialog(inProps, ref) {
|
|
|
218
219
|
PaperComponent = Paper,
|
|
219
220
|
PaperProps = {},
|
|
220
221
|
scroll = 'paper',
|
|
222
|
+
slots = {},
|
|
223
|
+
slotProps = {},
|
|
221
224
|
TransitionComponent = Fade,
|
|
222
225
|
transitionDuration = defaultTransitionDuration,
|
|
223
226
|
TransitionProps,
|
|
@@ -261,46 +264,89 @@ const Dialog = /*#__PURE__*/React.forwardRef(function Dialog(inProps, ref) {
|
|
|
261
264
|
titleId: ariaLabelledby
|
|
262
265
|
};
|
|
263
266
|
}, [ariaLabelledby]);
|
|
264
|
-
|
|
267
|
+
const backwardCompatibleSlots = {
|
|
268
|
+
transition: TransitionComponent,
|
|
269
|
+
...slots
|
|
270
|
+
};
|
|
271
|
+
const backwardCompatibleSlotProps = {
|
|
272
|
+
transition: TransitionProps,
|
|
273
|
+
paper: PaperProps,
|
|
274
|
+
backdrop: BackdropProps,
|
|
275
|
+
...slotProps
|
|
276
|
+
};
|
|
277
|
+
const externalForwardedProps = {
|
|
278
|
+
slots: backwardCompatibleSlots,
|
|
279
|
+
slotProps: backwardCompatibleSlotProps
|
|
280
|
+
};
|
|
281
|
+
const [RootSlot, rootSlotProps] = useSlot('root', {
|
|
282
|
+
elementType: DialogRoot,
|
|
283
|
+
shouldForwardComponentProp: true,
|
|
284
|
+
externalForwardedProps,
|
|
285
|
+
ownerState,
|
|
265
286
|
className: clsx(classes.root, className),
|
|
287
|
+
ref
|
|
288
|
+
});
|
|
289
|
+
const [BackdropSlot, backdropSlotProps] = useSlot('backdrop', {
|
|
290
|
+
elementType: DialogBackdrop,
|
|
291
|
+
shouldForwardComponentProp: true,
|
|
292
|
+
externalForwardedProps,
|
|
293
|
+
ownerState
|
|
294
|
+
});
|
|
295
|
+
const [PaperSlot, paperSlotProps] = useSlot('paper', {
|
|
296
|
+
elementType: DialogPaper,
|
|
297
|
+
shouldForwardComponentProp: true,
|
|
298
|
+
externalForwardedProps,
|
|
299
|
+
ownerState,
|
|
300
|
+
className: clsx(classes.paper, PaperProps.className)
|
|
301
|
+
});
|
|
302
|
+
const [ContainerSlot, containerSlotProps] = useSlot('container', {
|
|
303
|
+
elementType: DialogContainer,
|
|
304
|
+
externalForwardedProps,
|
|
305
|
+
ownerState,
|
|
306
|
+
className: clsx(classes.container)
|
|
307
|
+
});
|
|
308
|
+
const [TransitionSlot, transitionSlotProps] = useSlot('transition', {
|
|
309
|
+
elementType: Fade,
|
|
310
|
+
externalForwardedProps,
|
|
311
|
+
ownerState,
|
|
312
|
+
additionalProps: {
|
|
313
|
+
appear: true,
|
|
314
|
+
in: open,
|
|
315
|
+
timeout: transitionDuration,
|
|
316
|
+
role: 'presentation'
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
return /*#__PURE__*/_jsx(RootSlot, {
|
|
266
320
|
closeAfterTransition: true,
|
|
267
|
-
|
|
268
|
-
|
|
321
|
+
slots: {
|
|
322
|
+
backdrop: BackdropSlot
|
|
269
323
|
},
|
|
270
|
-
|
|
324
|
+
slotProps: {
|
|
271
325
|
backdrop: {
|
|
272
326
|
transitionDuration,
|
|
273
327
|
as: BackdropComponent,
|
|
274
|
-
...
|
|
328
|
+
...backdropSlotProps
|
|
275
329
|
}
|
|
276
330
|
},
|
|
277
331
|
disableEscapeKeyDown: disableEscapeKeyDown,
|
|
278
332
|
onClose: onClose,
|
|
279
333
|
open: open,
|
|
280
|
-
ref: ref,
|
|
281
334
|
onClick: handleBackdropClick,
|
|
282
|
-
|
|
335
|
+
...rootSlotProps,
|
|
283
336
|
...other,
|
|
284
|
-
children: /*#__PURE__*/_jsx(
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
timeout: transitionDuration,
|
|
288
|
-
role: "presentation",
|
|
289
|
-
...TransitionProps,
|
|
290
|
-
children: /*#__PURE__*/_jsx(DialogContainer, {
|
|
291
|
-
className: clsx(classes.container),
|
|
337
|
+
children: /*#__PURE__*/_jsx(TransitionSlot, {
|
|
338
|
+
...transitionSlotProps,
|
|
339
|
+
children: /*#__PURE__*/_jsx(ContainerSlot, {
|
|
292
340
|
onMouseDown: handleMouseDown,
|
|
293
|
-
|
|
294
|
-
children: /*#__PURE__*/_jsx(
|
|
341
|
+
...containerSlotProps,
|
|
342
|
+
children: /*#__PURE__*/_jsx(PaperSlot, {
|
|
295
343
|
as: PaperComponent,
|
|
296
344
|
elevation: 24,
|
|
297
345
|
role: "dialog",
|
|
298
346
|
"aria-describedby": ariaDescribedby,
|
|
299
347
|
"aria-labelledby": ariaLabelledby,
|
|
300
348
|
"aria-modal": ariaModal,
|
|
301
|
-
...
|
|
302
|
-
className: clsx(classes.paper, PaperProps.className),
|
|
303
|
-
ownerState: ownerState,
|
|
349
|
+
...paperSlotProps,
|
|
304
350
|
children: /*#__PURE__*/_jsx(DialogContext.Provider, {
|
|
305
351
|
value: dialogContextValue,
|
|
306
352
|
children: children
|
|
@@ -412,6 +458,7 @@ process.env.NODE_ENV !== "production" ? Dialog.propTypes /* remove-proptypes */
|
|
|
412
458
|
/**
|
|
413
459
|
* Props applied to the [`Paper`](https://mui.com/material-ui/api/paper/) element.
|
|
414
460
|
* @default {}
|
|
461
|
+
* @deprecated Use `slotProps.paper` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.
|
|
415
462
|
*/
|
|
416
463
|
PaperProps: PropTypes.object,
|
|
417
464
|
/**
|
|
@@ -419,6 +466,28 @@ process.env.NODE_ENV !== "production" ? Dialog.propTypes /* remove-proptypes */
|
|
|
419
466
|
* @default 'paper'
|
|
420
467
|
*/
|
|
421
468
|
scroll: PropTypes.oneOf(['body', 'paper']),
|
|
469
|
+
/**
|
|
470
|
+
* The props used for each slot inside.
|
|
471
|
+
* @default {}
|
|
472
|
+
*/
|
|
473
|
+
slotProps: PropTypes.shape({
|
|
474
|
+
backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
|
|
475
|
+
container: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
|
|
476
|
+
paper: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
|
|
477
|
+
root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
|
|
478
|
+
transition: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
|
|
479
|
+
}),
|
|
480
|
+
/**
|
|
481
|
+
* The components used for each slot inside.
|
|
482
|
+
* @default {}
|
|
483
|
+
*/
|
|
484
|
+
slots: PropTypes.shape({
|
|
485
|
+
backdrop: PropTypes.elementType,
|
|
486
|
+
container: PropTypes.elementType,
|
|
487
|
+
paper: PropTypes.elementType,
|
|
488
|
+
root: PropTypes.elementType,
|
|
489
|
+
transition: PropTypes.elementType
|
|
490
|
+
}),
|
|
422
491
|
/**
|
|
423
492
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
424
493
|
*/
|
|
@@ -427,6 +496,7 @@ process.env.NODE_ENV !== "production" ? Dialog.propTypes /* remove-proptypes */
|
|
|
427
496
|
* The component used for the transition.
|
|
428
497
|
* [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
|
|
429
498
|
* @default Fade
|
|
499
|
+
* @deprecated Use `slots.transition` instead. This prop will be removed in v7. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.
|
|
430
500
|
*/
|
|
431
501
|
TransitionComponent: PropTypes.elementType,
|
|
432
502
|
/**
|
|
@@ -445,6 +515,7 @@ process.env.NODE_ENV !== "production" ? Dialog.propTypes /* remove-proptypes */
|
|
|
445
515
|
/**
|
|
446
516
|
* Props applied to the transition element.
|
|
447
517
|
* By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
|
|
518
|
+
* @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.
|
|
448
519
|
*/
|
|
449
520
|
TransitionProps: PropTypes.object
|
|
450
521
|
} : void 0;
|
package/modern/Drawer/Drawer.js
CHANGED
|
@@ -29,7 +29,7 @@ const useUtilityClasses = ownerState => {
|
|
|
29
29
|
variant
|
|
30
30
|
} = ownerState;
|
|
31
31
|
const slots = {
|
|
32
|
-
root: ['root'],
|
|
32
|
+
root: ['root', `anchor${capitalize(anchor)}`],
|
|
33
33
|
docked: [(variant === 'permanent' || variant === 'persistent') && 'docked'],
|
|
34
34
|
modal: ['modal'],
|
|
35
35
|
paper: ['paper', `paperAnchor${capitalize(anchor)}`, variant !== 'temporary' && `paperAnchorDocked${capitalize(anchor)}`]
|
|
@@ -3,5 +3,5 @@ import generateUtilityClass from '@mui/utils/generateUtilityClass';
|
|
|
3
3
|
export function getDrawerUtilityClass(slot) {
|
|
4
4
|
return generateUtilityClass('MuiDrawer', slot);
|
|
5
5
|
}
|
|
6
|
-
const drawerClasses = generateUtilityClasses('MuiDrawer', ['root', 'docked', 'paper', 'paperAnchorLeft', 'paperAnchorRight', 'paperAnchorTop', 'paperAnchorBottom', 'paperAnchorDockedLeft', 'paperAnchorDockedRight', 'paperAnchorDockedTop', 'paperAnchorDockedBottom', 'modal']);
|
|
6
|
+
const drawerClasses = generateUtilityClasses('MuiDrawer', ['root', 'docked', 'paper', 'anchorLeft', 'anchorRight', 'anchorTop', 'anchorBottom', 'paperAnchorLeft', 'paperAnchorRight', 'paperAnchorTop', 'paperAnchorBottom', 'paperAnchorDockedLeft', 'paperAnchorDockedRight', 'paperAnchorDockedTop', 'paperAnchorDockedBottom', 'modal']);
|
|
7
7
|
export default drawerClasses;
|
|
@@ -179,6 +179,12 @@ const FormControl = /*#__PURE__*/React.forwardRef(function FormControl(inProps,
|
|
|
179
179
|
};
|
|
180
180
|
};
|
|
181
181
|
}
|
|
182
|
+
const onFilled = React.useCallback(() => {
|
|
183
|
+
setFilled(true);
|
|
184
|
+
}, []);
|
|
185
|
+
const onEmpty = React.useCallback(() => {
|
|
186
|
+
setFilled(false);
|
|
187
|
+
}, []);
|
|
182
188
|
const childContext = React.useMemo(() => {
|
|
183
189
|
return {
|
|
184
190
|
adornedStart,
|
|
@@ -194,20 +200,16 @@ const FormControl = /*#__PURE__*/React.forwardRef(function FormControl(inProps,
|
|
|
194
200
|
onBlur: () => {
|
|
195
201
|
setFocused(false);
|
|
196
202
|
},
|
|
197
|
-
onEmpty: () => {
|
|
198
|
-
setFilled(false);
|
|
199
|
-
},
|
|
200
|
-
onFilled: () => {
|
|
201
|
-
setFilled(true);
|
|
202
|
-
},
|
|
203
203
|
onFocus: () => {
|
|
204
204
|
setFocused(true);
|
|
205
205
|
},
|
|
206
|
+
onEmpty,
|
|
207
|
+
onFilled,
|
|
206
208
|
registerEffect,
|
|
207
209
|
required,
|
|
208
210
|
variant
|
|
209
211
|
};
|
|
210
|
-
}, [adornedStart, color, disabled, error, filled, focused, fullWidth, hiddenLabel, registerEffect, required, size, variant]);
|
|
212
|
+
}, [adornedStart, color, disabled, error, filled, focused, fullWidth, hiddenLabel, registerEffect, onEmpty, onFilled, required, size, variant]);
|
|
211
213
|
return /*#__PURE__*/_jsx(FormControlContext.Provider, {
|
|
212
214
|
value: childContext,
|
|
213
215
|
children: /*#__PURE__*/_jsx(FormControlRoot, {
|
|
@@ -27,7 +27,8 @@ const useUtilityClasses = ownerState => {
|
|
|
27
27
|
} = ownerState;
|
|
28
28
|
const slots = {
|
|
29
29
|
root: ['root', loading && 'loading', disabled && 'disabled', color !== 'default' && `color${capitalize(color)}`, edge && `edge${capitalize(edge)}`, `size${capitalize(size)}`],
|
|
30
|
-
loadingIndicator: ['loadingIndicator']
|
|
30
|
+
loadingIndicator: ['loadingIndicator'],
|
|
31
|
+
loadingWrapper: ['loadingWrapper']
|
|
31
32
|
};
|
|
32
33
|
return composeClasses(slots, getIconButtonUtilityClass, classes);
|
|
33
34
|
};
|
|
@@ -188,7 +189,7 @@ const IconButton = /*#__PURE__*/React.forwardRef(function IconButton(inProps, re
|
|
|
188
189
|
disableFocusRipple = false,
|
|
189
190
|
size = 'medium',
|
|
190
191
|
id: idProp,
|
|
191
|
-
loading =
|
|
192
|
+
loading = null,
|
|
192
193
|
loadingIndicator: loadingIndicatorProp,
|
|
193
194
|
...other
|
|
194
195
|
} = props;
|
|
@@ -218,10 +219,19 @@ const IconButton = /*#__PURE__*/React.forwardRef(function IconButton(inProps, re
|
|
|
218
219
|
ref: ref,
|
|
219
220
|
...other,
|
|
220
221
|
ownerState: ownerState,
|
|
221
|
-
children: [
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
222
|
+
children: [typeof loading === 'boolean' &&
|
|
223
|
+
/*#__PURE__*/
|
|
224
|
+
// use plain HTML span to minimize the runtime overhead
|
|
225
|
+
_jsx("span", {
|
|
226
|
+
className: classes.loadingWrapper,
|
|
227
|
+
style: {
|
|
228
|
+
display: 'contents'
|
|
229
|
+
},
|
|
230
|
+
children: /*#__PURE__*/_jsx(IconButtonLoadingIndicator, {
|
|
231
|
+
className: classes.loadingIndicator,
|
|
232
|
+
ownerState: ownerState,
|
|
233
|
+
children: loading && loadingIndicator
|
|
234
|
+
})
|
|
225
235
|
}), children]
|
|
226
236
|
});
|
|
227
237
|
});
|
|
@@ -287,7 +297,8 @@ process.env.NODE_ENV !== "production" ? IconButton.propTypes /* remove-proptypes
|
|
|
287
297
|
id: PropTypes.string,
|
|
288
298
|
/**
|
|
289
299
|
* If `true`, the loading indicator is visible and the button is disabled.
|
|
290
|
-
*
|
|
300
|
+
* If `true | false`, the loading wrapper is always rendered before the children to prevent [Google Translation Crash](https://github.com/mui/material-ui/issues/27853).
|
|
301
|
+
* @default null
|
|
291
302
|
*/
|
|
292
303
|
loading: PropTypes.bool,
|
|
293
304
|
/**
|
|
@@ -3,5 +3,5 @@ import generateUtilityClass from '@mui/utils/generateUtilityClass';
|
|
|
3
3
|
export function getIconButtonUtilityClass(slot) {
|
|
4
4
|
return generateUtilityClass('MuiIconButton', slot);
|
|
5
5
|
}
|
|
6
|
-
const iconButtonClasses = generateUtilityClasses('MuiIconButton', ['root', 'disabled', 'colorInherit', 'colorPrimary', 'colorSecondary', 'colorError', 'colorInfo', 'colorSuccess', 'colorWarning', 'edgeStart', 'edgeEnd', 'sizeSmall', 'sizeMedium', 'sizeLarge', 'loading', 'loadingIndicator']);
|
|
6
|
+
const iconButtonClasses = generateUtilityClasses('MuiIconButton', ['root', 'disabled', 'colorInherit', 'colorPrimary', 'colorSecondary', 'colorError', 'colorInfo', 'colorSuccess', 'colorWarning', 'edgeStart', 'edgeEnd', 'sizeSmall', 'sizeMedium', 'sizeLarge', 'loading', 'loadingIndicator', 'loadingWrapper']);
|
|
7
7
|
export default iconButtonClasses;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -245,9 +245,9 @@ export function useSlider(parameters) {
|
|
|
245
245
|
let newValue = valueInput;
|
|
246
246
|
if (marks && step == null) {
|
|
247
247
|
const maxMarksValue = marksValues[marksValues.length - 1];
|
|
248
|
-
if (newValue
|
|
248
|
+
if (newValue >= maxMarksValue) {
|
|
249
249
|
newValue = maxMarksValue;
|
|
250
|
-
} else if (newValue
|
|
250
|
+
} else if (newValue <= marksValues[0]) {
|
|
251
251
|
newValue = marksValues[0];
|
|
252
252
|
} else {
|
|
253
253
|
newValue = newValue < value ? marksValues[marksIndex - 1] : marksValues[marksIndex + 1];
|