@mui/material 9.0.1 → 9.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Accordion/Accordion.d.mts +2 -2
- package/Accordion/Accordion.d.ts +2 -2
- package/Accordion/Accordion.js +3 -2
- package/Accordion/Accordion.mjs +3 -2
- package/AccordionSummary/AccordionSummary.js +27 -29
- package/AccordionSummary/AccordionSummary.mjs +27 -29
- package/Autocomplete/Autocomplete.d.mts +5 -1
- package/Autocomplete/Autocomplete.d.ts +5 -1
- package/Autocomplete/Autocomplete.js +13 -7
- package/Autocomplete/Autocomplete.mjs +13 -7
- package/Backdrop/Backdrop.d.mts +2 -2
- package/Backdrop/Backdrop.d.ts +2 -2
- package/Badge/Badge.js +28 -24
- package/Badge/Badge.mjs +28 -24
- package/BottomNavigationAction/BottomNavigationAction.js +6 -2
- package/BottomNavigationAction/BottomNavigationAction.mjs +6 -2
- package/Button/Button.js +11 -15
- package/Button/Button.mjs +11 -15
- package/ButtonBase/Ripple.js +21 -11
- package/ButtonBase/Ripple.mjs +21 -11
- package/ButtonBase/TouchRipple.js +252 -108
- package/ButtonBase/TouchRipple.mjs +253 -109
- package/CHANGELOG.md +122 -0
- package/CardActionArea/CardActionArea.js +2 -1
- package/CardActionArea/CardActionArea.mjs +2 -1
- package/Chip/Chip.js +2 -1
- package/Chip/Chip.mjs +2 -1
- package/CircularProgress/CircularProgress.js +85 -55
- package/CircularProgress/CircularProgress.mjs +84 -55
- package/Collapse/Collapse.d.mts +15 -3
- package/Collapse/Collapse.d.ts +15 -3
- package/Collapse/Collapse.js +44 -31
- package/Collapse/Collapse.mjs +43 -30
- package/Dialog/Dialog.d.mts +2 -2
- package/Dialog/Dialog.d.ts +2 -2
- package/Dialog/Dialog.js +2 -0
- package/Dialog/Dialog.mjs +2 -0
- package/Drawer/Drawer.d.mts +2 -2
- package/Drawer/Drawer.d.ts +2 -2
- package/Fab/Fab.js +2 -1
- package/Fab/Fab.mjs +2 -1
- package/Fade/Fade.d.mts +15 -2
- package/Fade/Fade.d.ts +15 -2
- package/Fade/Fade.js +46 -19
- package/Fade/Fade.mjs +45 -18
- package/FilledInput/FilledInput.js +4 -3
- package/FilledInput/FilledInput.mjs +4 -3
- package/Grow/Grow.d.mts +15 -2
- package/Grow/Grow.d.ts +15 -2
- package/Grow/Grow.js +45 -28
- package/Grow/Grow.mjs +44 -27
- package/IconButton/IconButton.js +2 -1
- package/IconButton/IconButton.mjs +2 -1
- package/InitColorSchemeScript/InitColorSchemeScript.d.mts +5 -5
- package/InitColorSchemeScript/InitColorSchemeScript.d.ts +5 -5
- package/Input/Input.js +3 -2
- package/Input/Input.mjs +3 -2
- package/InputBase/InputBase.js +2 -1
- package/InputBase/InputBase.mjs +2 -1
- package/InputLabel/InputLabel.js +2 -1
- package/InputLabel/InputLabel.mjs +2 -1
- package/LICENSE +1 -1
- package/LinearProgress/LinearProgress.js +187 -120
- package/LinearProgress/LinearProgress.mjs +186 -120
- package/ListItem/ListItem.js +2 -1
- package/ListItem/ListItem.mjs +2 -1
- package/ListItemButton/ListItemButton.js +2 -1
- package/ListItemButton/ListItemButton.mjs +2 -1
- package/Menu/Menu.d.mts +1 -1
- package/Menu/Menu.d.ts +1 -1
- package/MobileStepper/MobileStepper.js +2 -1
- package/MobileStepper/MobileStepper.mjs +2 -1
- package/OutlinedInput/NotchedOutline.js +4 -3
- package/OutlinedInput/NotchedOutline.mjs +4 -3
- package/PaginationItem/PaginationItem.js +2 -1
- package/PaginationItem/PaginationItem.mjs +2 -1
- package/Paper/Paper.js +2 -1
- package/Paper/Paper.mjs +2 -1
- package/Popover/Popover.d.mts +1 -1
- package/Popover/Popover.d.ts +1 -1
- package/README.md +3 -2
- package/Radio/RadioButtonIcon.js +3 -2
- package/Radio/RadioButtonIcon.mjs +3 -2
- package/Rating/Rating.js +2 -1
- package/Rating/Rating.mjs +2 -1
- package/Select/SelectInput.js +115 -25
- package/Select/SelectInput.mjs +115 -25
- package/Select/utils/SelectFocusSourceContext.d.mts +2 -2
- package/Select/utils/SelectFocusSourceContext.d.ts +2 -2
- package/Select/utils/closedTypeahead.js +73 -0
- package/Select/utils/closedTypeahead.mjs +63 -0
- package/Skeleton/Skeleton.js +22 -2
- package/Skeleton/Skeleton.mjs +22 -2
- package/Slide/Slide.d.mts +15 -2
- package/Slide/Slide.d.ts +15 -2
- package/Slide/Slide.js +53 -25
- package/Slide/Slide.mjs +52 -24
- package/Slider/Slider.js +4 -3
- package/Slider/Slider.mjs +4 -3
- package/Slider/SliderValueLabel.d.mts +2 -2
- package/Slider/SliderValueLabel.d.ts +2 -2
- package/Slider/useSlider.js +1 -1
- package/Slider/useSlider.mjs +1 -1
- package/Snackbar/Snackbar.d.mts +2 -2
- package/Snackbar/Snackbar.d.ts +2 -2
- package/SpeedDial/SpeedDial.d.mts +1 -1
- package/SpeedDial/SpeedDial.d.ts +1 -1
- package/SpeedDial/SpeedDial.js +6 -2
- package/SpeedDial/SpeedDial.mjs +6 -2
- package/SpeedDialAction/SpeedDialAction.js +11 -2
- package/SpeedDialAction/SpeedDialAction.mjs +12 -3
- package/SpeedDialIcon/SpeedDialIcon.js +40 -37
- package/SpeedDialIcon/SpeedDialIcon.mjs +40 -37
- package/Step/Step.js +47 -15
- package/Step/Step.mjs +47 -15
- package/Step/StepContext.d.mts +1 -1
- package/Step/StepContext.d.ts +1 -1
- package/StepButton/StepButton.js +9 -3
- package/StepButton/StepButton.mjs +9 -3
- package/StepConnector/StepConnector.js +10 -0
- package/StepConnector/StepConnector.mjs +10 -0
- package/StepContent/StepContent.d.mts +2 -2
- package/StepContent/StepContent.d.ts +2 -2
- package/StepContent/StepContent.js +26 -2
- package/StepContent/StepContent.mjs +26 -2
- package/StepIcon/StepIcon.js +2 -1
- package/StepIcon/StepIcon.mjs +2 -1
- package/StepLabel/StepLabel.js +52 -7
- package/StepLabel/StepLabel.mjs +52 -7
- package/Stepper/Stepper.d.mts +2 -0
- package/Stepper/Stepper.d.ts +2 -0
- package/Stepper/Stepper.js +18 -0
- package/Stepper/Stepper.mjs +18 -0
- package/Stepper/StepperContext.d.mts +1 -1
- package/Stepper/StepperContext.d.ts +1 -1
- package/SvgIcon/SvgIcon.js +2 -1
- package/SvgIcon/SvgIcon.mjs +2 -1
- package/SwipeableDrawer/SwipeableDrawer.js +14 -3
- package/SwipeableDrawer/SwipeableDrawer.mjs +14 -3
- package/Switch/Switch.js +3 -2
- package/Switch/Switch.mjs +3 -2
- package/TableSortLabel/TableSortLabel.js +2 -1
- package/TableSortLabel/TableSortLabel.mjs +2 -1
- package/Tabs/Tabs.js +14 -3
- package/Tabs/Tabs.mjs +14 -3
- package/Tooltip/Tooltip.d.mts +2 -2
- package/Tooltip/Tooltip.d.ts +2 -2
- package/Tooltip/Tooltip.js +3 -0
- package/Tooltip/Tooltip.mjs +3 -0
- package/Unstable_TrapFocus/FocusTrap.js +42 -8
- package/Unstable_TrapFocus/FocusTrap.mjs +42 -8
- package/Zoom/Zoom.d.mts +15 -2
- package/Zoom/Zoom.d.ts +15 -2
- package/Zoom/Zoom.js +43 -16
- package/Zoom/Zoom.mjs +42 -15
- package/index.js +1 -1
- package/index.mjs +1 -1
- package/internal/Transition.d.mts +34 -0
- package/internal/Transition.d.ts +34 -0
- package/internal/Transition.js +450 -0
- package/internal/Transition.mjs +442 -0
- package/internal/react-transition-group.d.mts +8 -0
- package/internal/react-transition-group.d.ts +8 -0
- package/package.json +7 -7
- package/styles/ThemeProviderWithVars.d.mts +7 -7
- package/styles/ThemeProviderWithVars.d.ts +7 -7
- package/styles/createGetSelector.d.mts +2 -2
- package/styles/createGetSelector.d.ts +2 -2
- package/styles/createMotion.d.mts +8 -0
- package/styles/createMotion.d.ts +8 -0
- package/styles/createMotion.js +13 -0
- package/styles/createMotion.mjs +7 -0
- package/styles/createThemeFoundation.d.mts +2 -0
- package/styles/createThemeFoundation.d.ts +2 -0
- package/styles/createThemeNoVars.d.mts +3 -0
- package/styles/createThemeNoVars.d.ts +3 -0
- package/styles/createThemeNoVars.js +5 -0
- package/styles/createThemeNoVars.mjs +5 -0
- package/styles/createTransitions.d.mts +6 -2
- package/styles/createTransitions.d.ts +6 -2
- package/styles/createTransitions.js +12 -4
- package/styles/createTransitions.mjs +12 -4
- package/styles/enhanceHighContrast.d.mts +70 -0
- package/styles/enhanceHighContrast.d.ts +70 -0
- package/styles/enhanceHighContrast.js +502 -0
- package/styles/enhanceHighContrast.mjs +495 -0
- package/styles/identifier.d.mts +1 -1
- package/styles/identifier.d.ts +1 -1
- package/styles/index.d.mts +2 -0
- package/styles/index.d.ts +2 -0
- package/styles/index.js +8 -0
- package/styles/index.mjs +1 -0
- package/styles/reducedMotion.d.mts +7 -0
- package/styles/reducedMotion.d.ts +7 -0
- package/styles/reducedMotion.js +21 -0
- package/styles/reducedMotion.mjs +14 -0
- package/styles/shouldSkipGeneratingVar.js +1 -1
- package/styles/shouldSkipGeneratingVar.mjs +1 -1
- package/styles/stringifyTheme.js +1 -0
- package/styles/stringifyTheme.mjs +1 -0
- package/transitions/index.d.mts +1 -1
- package/transitions/index.d.ts +1 -1
- package/transitions/index.js +0 -11
- package/transitions/index.mjs +1 -1
- package/transitions/transition.d.mts +1 -12
- package/transitions/transition.d.ts +1 -12
- package/transitions/types.d.mts +73 -0
- package/transitions/types.d.ts +73 -0
- package/transitions/useReducedMotion.d.mts +14 -0
- package/transitions/useReducedMotion.d.ts +14 -0
- package/transitions/useReducedMotion.js +117 -0
- package/transitions/useReducedMotion.mjs +110 -0
- package/transitions/utils.d.mts +34 -2
- package/transitions/utils.d.ts +34 -2
- package/transitions/utils.js +33 -4
- package/transitions/utils.mjs +31 -4
- package/useAutocomplete/useAutocomplete.d.mts +8 -1
- package/useAutocomplete/useAutocomplete.d.ts +8 -1
- package/useAutocomplete/useAutocomplete.js +66 -4
- package/useAutocomplete/useAutocomplete.mjs +66 -4
- package/utils/memoTheme.d.mts +1 -1
- package/utils/memoTheme.d.ts +1 -1
- package/utils/useSlot.d.mts +1 -1
- package/utils/useSlot.d.ts +1 -1
- package/version/index.js +2 -2
- package/version/index.mjs +2 -2
- /package/transitions/{transition.js → types.js} +0 -0
- /package/transitions/{transition.mjs → types.mjs} +0 -0
package/transitions/index.js
CHANGED
|
@@ -2,15 +2,4 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
|
-
});
|
|
6
|
-
var _transition = require("./transition");
|
|
7
|
-
Object.keys(_transition).forEach(function (key) {
|
|
8
|
-
if (key === "default" || key === "__esModule") return;
|
|
9
|
-
if (key in exports && exports[key] === _transition[key]) return;
|
|
10
|
-
Object.defineProperty(exports, key, {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: function () {
|
|
13
|
-
return _transition[key];
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
5
|
});
|
package/transitions/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export {};
|
|
@@ -1,12 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
export type TransitionHandlerKeys = 'onEnter' | 'onEntering' | 'onEntered' | 'onExit' | 'onExiting' | 'onExited';
|
|
4
|
-
export type TransitionHandlerProps = Pick<_TransitionProps, TransitionHandlerKeys>;
|
|
5
|
-
export interface EasingProps {
|
|
6
|
-
easing: string | {
|
|
7
|
-
enter?: string | undefined;
|
|
8
|
-
exit?: string | undefined;
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
export type TransitionKeys = 'in' | 'mountOnEnter' | 'unmountOnExit' | 'timeout' | 'easing' | 'addEndListener' | TransitionHandlerKeys;
|
|
12
|
-
export interface TransitionProps extends TransitionActions, Partial<Pick<_TransitionProps & EasingProps, TransitionKeys>>, React.HTMLAttributes<HTMLElement> {}
|
|
1
|
+
export type { EasingProps, EnterHandler, ExitHandler, TransitionActions, TransitionHandlerKeys, TransitionHandlerProps, TransitionKeys, TransitionProps, TransitionStatus } from "./types.mjs";
|
|
@@ -1,12 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
export type TransitionHandlerKeys = 'onEnter' | 'onEntering' | 'onEntered' | 'onExit' | 'onExiting' | 'onExited';
|
|
4
|
-
export type TransitionHandlerProps = Pick<_TransitionProps, TransitionHandlerKeys>;
|
|
5
|
-
export interface EasingProps {
|
|
6
|
-
easing: string | {
|
|
7
|
-
enter?: string | undefined;
|
|
8
|
-
exit?: string | undefined;
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
export type TransitionKeys = 'in' | 'mountOnEnter' | 'unmountOnExit' | 'timeout' | 'easing' | 'addEndListener' | TransitionHandlerKeys;
|
|
12
|
-
export interface TransitionProps extends TransitionActions, Partial<Pick<_TransitionProps & EasingProps, TransitionKeys>>, React.HTMLAttributes<HTMLElement> {}
|
|
1
|
+
export type { EasingProps, EnterHandler, ExitHandler, TransitionActions, TransitionHandlerKeys, TransitionHandlerProps, TransitionKeys, TransitionProps, TransitionStatus } from "./types.js";
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export type TransitionStatus = 'entering' | 'entered' | 'exiting' | 'exited' | 'unmounted';
|
|
3
|
+
export interface TransitionActions {
|
|
4
|
+
appear?: boolean | undefined;
|
|
5
|
+
enter?: boolean | undefined;
|
|
6
|
+
exit?: boolean | undefined;
|
|
7
|
+
}
|
|
8
|
+
export type TransitionHandlerKeys = 'onEnter' | 'onEntering' | 'onEntered' | 'onExit' | 'onExiting' | 'onExited';
|
|
9
|
+
export type EnterHandler = (node: HTMLElement, isAppearing: boolean) => void;
|
|
10
|
+
export type ExitHandler = (node: HTMLElement) => void;
|
|
11
|
+
export interface TransitionHandlerProps {
|
|
12
|
+
/**
|
|
13
|
+
* @ignore
|
|
14
|
+
*/
|
|
15
|
+
onEnter?: EnterHandler | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* @ignore
|
|
18
|
+
*/
|
|
19
|
+
onEntering?: EnterHandler | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* @ignore
|
|
22
|
+
*/
|
|
23
|
+
onEntered?: EnterHandler | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* @ignore
|
|
26
|
+
*/
|
|
27
|
+
onExit?: ExitHandler | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* @ignore
|
|
30
|
+
*/
|
|
31
|
+
onExiting?: ExitHandler | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* @ignore
|
|
34
|
+
*/
|
|
35
|
+
onExited?: ExitHandler | undefined;
|
|
36
|
+
}
|
|
37
|
+
export interface EasingProps {
|
|
38
|
+
easing: string | {
|
|
39
|
+
enter?: string | undefined;
|
|
40
|
+
exit?: string | undefined;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export type TransitionKeys = 'in' | 'mountOnEnter' | 'unmountOnExit' | 'timeout' | 'easing' | 'addEndListener' | 'disablePrefersReducedMotion' | TransitionHandlerKeys;
|
|
44
|
+
interface ConsumerTransitionProps extends TransitionHandlerProps {
|
|
45
|
+
in?: boolean | undefined;
|
|
46
|
+
mountOnEnter?: boolean | undefined;
|
|
47
|
+
unmountOnExit?: boolean | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* The duration for the transition, in milliseconds.
|
|
50
|
+
* You may specify a single timeout for all transitions, or individually with an object.
|
|
51
|
+
*/
|
|
52
|
+
timeout?: number | {
|
|
53
|
+
appear?: number | undefined;
|
|
54
|
+
enter?: number | undefined;
|
|
55
|
+
exit?: number | undefined;
|
|
56
|
+
} | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* Add a custom transition end trigger.
|
|
59
|
+
* Use it when you need custom logic to decide when the transition has ended.
|
|
60
|
+
* Note: Timeouts are still used as a fallback if provided.
|
|
61
|
+
*
|
|
62
|
+
* @param {HTMLElement} node The transitioning DOM node.
|
|
63
|
+
* @param {Function} done Call this when the transition has finished.
|
|
64
|
+
*/
|
|
65
|
+
addEndListener?: ((node: HTMLElement, done: () => void) => void) | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* If `true`, the transition ignores `theme.motion.reducedMotion` and keeps its normal timing.
|
|
68
|
+
* @default false
|
|
69
|
+
*/
|
|
70
|
+
disablePrefersReducedMotion?: boolean | undefined;
|
|
71
|
+
}
|
|
72
|
+
export interface TransitionProps extends TransitionActions, Partial<Pick<ConsumerTransitionProps & EasingProps, TransitionKeys>>, React.HTMLAttributes<HTMLElement> {}
|
|
73
|
+
export {};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export type TransitionStatus = 'entering' | 'entered' | 'exiting' | 'exited' | 'unmounted';
|
|
3
|
+
export interface TransitionActions {
|
|
4
|
+
appear?: boolean | undefined;
|
|
5
|
+
enter?: boolean | undefined;
|
|
6
|
+
exit?: boolean | undefined;
|
|
7
|
+
}
|
|
8
|
+
export type TransitionHandlerKeys = 'onEnter' | 'onEntering' | 'onEntered' | 'onExit' | 'onExiting' | 'onExited';
|
|
9
|
+
export type EnterHandler = (node: HTMLElement, isAppearing: boolean) => void;
|
|
10
|
+
export type ExitHandler = (node: HTMLElement) => void;
|
|
11
|
+
export interface TransitionHandlerProps {
|
|
12
|
+
/**
|
|
13
|
+
* @ignore
|
|
14
|
+
*/
|
|
15
|
+
onEnter?: EnterHandler | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* @ignore
|
|
18
|
+
*/
|
|
19
|
+
onEntering?: EnterHandler | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* @ignore
|
|
22
|
+
*/
|
|
23
|
+
onEntered?: EnterHandler | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* @ignore
|
|
26
|
+
*/
|
|
27
|
+
onExit?: ExitHandler | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* @ignore
|
|
30
|
+
*/
|
|
31
|
+
onExiting?: ExitHandler | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* @ignore
|
|
34
|
+
*/
|
|
35
|
+
onExited?: ExitHandler | undefined;
|
|
36
|
+
}
|
|
37
|
+
export interface EasingProps {
|
|
38
|
+
easing: string | {
|
|
39
|
+
enter?: string | undefined;
|
|
40
|
+
exit?: string | undefined;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export type TransitionKeys = 'in' | 'mountOnEnter' | 'unmountOnExit' | 'timeout' | 'easing' | 'addEndListener' | 'disablePrefersReducedMotion' | TransitionHandlerKeys;
|
|
44
|
+
interface ConsumerTransitionProps extends TransitionHandlerProps {
|
|
45
|
+
in?: boolean | undefined;
|
|
46
|
+
mountOnEnter?: boolean | undefined;
|
|
47
|
+
unmountOnExit?: boolean | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* The duration for the transition, in milliseconds.
|
|
50
|
+
* You may specify a single timeout for all transitions, or individually with an object.
|
|
51
|
+
*/
|
|
52
|
+
timeout?: number | {
|
|
53
|
+
appear?: number | undefined;
|
|
54
|
+
enter?: number | undefined;
|
|
55
|
+
exit?: number | undefined;
|
|
56
|
+
} | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* Add a custom transition end trigger.
|
|
59
|
+
* Use it when you need custom logic to decide when the transition has ended.
|
|
60
|
+
* Note: Timeouts are still used as a fallback if provided.
|
|
61
|
+
*
|
|
62
|
+
* @param {HTMLElement} node The transitioning DOM node.
|
|
63
|
+
* @param {Function} done Call this when the transition has finished.
|
|
64
|
+
*/
|
|
65
|
+
addEndListener?: ((node: HTMLElement, done: () => void) => void) | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* If `true`, the transition ignores `theme.motion.reducedMotion` and keeps its normal timing.
|
|
68
|
+
* @default false
|
|
69
|
+
*/
|
|
70
|
+
disablePrefersReducedMotion?: boolean | undefined;
|
|
71
|
+
}
|
|
72
|
+
export interface TransitionProps extends TransitionActions, Partial<Pick<ConsumerTransitionProps & EasingProps, TransitionKeys>>, React.HTMLAttributes<HTMLElement> {}
|
|
73
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ReducedMotionMode } from "../styles/createMotion.mjs";
|
|
2
|
+
interface TransitionTiming {
|
|
3
|
+
duration: string | number;
|
|
4
|
+
delay: string | undefined;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Resolves whether a Material UI transition should reduce motion and provides
|
|
8
|
+
* adjusted CSS transition timing for MUI-owned duration/delay values.
|
|
9
|
+
*/
|
|
10
|
+
export default function useReducedMotion(mode: ReducedMotionMode, disablePrefersReducedMotion: boolean | undefined): {
|
|
11
|
+
shouldReduceMotion: boolean;
|
|
12
|
+
getTransitionTiming(timing: TransitionTiming): TransitionTiming;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ReducedMotionMode } from "../styles/createMotion.js";
|
|
2
|
+
interface TransitionTiming {
|
|
3
|
+
duration: string | number;
|
|
4
|
+
delay: string | undefined;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Resolves whether a Material UI transition should reduce motion and provides
|
|
8
|
+
* adjusted CSS transition timing for MUI-owned duration/delay values.
|
|
9
|
+
*/
|
|
10
|
+
export default function useReducedMotion(mode: ReducedMotionMode, disablePrefersReducedMotion: boolean | undefined): {
|
|
11
|
+
shouldReduceMotion: boolean;
|
|
12
|
+
getTransitionTiming(timing: TransitionTiming): TransitionTiming;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.default = useReducedMotion;
|
|
10
|
+
var React = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
|
|
12
|
+
const MEDIA_QUERY = '(prefers-reduced-motion: reduce)';
|
|
13
|
+
const REDUCED_MOTION_DURATION = 0;
|
|
14
|
+
const REDUCED_MOTION_DELAY = '0ms';
|
|
15
|
+
const NOOP = () => {};
|
|
16
|
+
const getDefaultSnapshot = () => false;
|
|
17
|
+
const getReducedMotionSnapshot = () => true;
|
|
18
|
+
const subscribeNoop = () => NOOP;
|
|
19
|
+
/**
|
|
20
|
+
* Subscribes to the OS reduced-motion media query only when the theme mode needs it.
|
|
21
|
+
* React 17 reads the media query after mount, matching useMediaQuery's fallback path.
|
|
22
|
+
*/
|
|
23
|
+
function useReducedMotionMediaQueryOld(enabled) {
|
|
24
|
+
const [queryState, setQueryState] = React.useState(() => ({
|
|
25
|
+
enabled,
|
|
26
|
+
matches: enabled ? null : false
|
|
27
|
+
}));
|
|
28
|
+
let matches = queryState.matches;
|
|
29
|
+
if (queryState.enabled !== enabled) {
|
|
30
|
+
matches = null;
|
|
31
|
+
if (!enabled) {
|
|
32
|
+
matches = false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
(0, _useEnhancedEffect.default)(() => {
|
|
36
|
+
const setResolvedMatches = nextMatches => {
|
|
37
|
+
setQueryState(previousState => {
|
|
38
|
+
if (previousState.enabled === enabled && previousState.matches === nextMatches) {
|
|
39
|
+
return previousState;
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
enabled,
|
|
43
|
+
matches: nextMatches
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
if (!enabled) {
|
|
48
|
+
if (queryState.enabled) {
|
|
49
|
+
setResolvedMatches(false);
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {
|
|
54
|
+
setResolvedMatches(false);
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
const mediaQueryList = window.matchMedia(MEDIA_QUERY);
|
|
58
|
+
const update = () => {
|
|
59
|
+
setResolvedMatches(mediaQueryList.matches);
|
|
60
|
+
};
|
|
61
|
+
update();
|
|
62
|
+
mediaQueryList.addEventListener('change', update);
|
|
63
|
+
return () => {
|
|
64
|
+
mediaQueryList.removeEventListener('change', update);
|
|
65
|
+
};
|
|
66
|
+
}, [enabled, queryState.enabled]);
|
|
67
|
+
return matches;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// See https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379 for why
|
|
71
|
+
const safeReact = {
|
|
72
|
+
...React
|
|
73
|
+
};
|
|
74
|
+
const maybeReactUseSyncExternalStore = safeReact.useSyncExternalStore;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* React 18+ can read the media query during client renders, so newly mounted
|
|
78
|
+
* transitions do not start from the SSR-safe reduced-motion default.
|
|
79
|
+
*/
|
|
80
|
+
function useReducedMotionMediaQueryNew(enabled) {
|
|
81
|
+
const getServerSnapshot = enabled ? getReducedMotionSnapshot : getDefaultSnapshot;
|
|
82
|
+
const [getSnapshot, subscribe] = React.useMemo(() => {
|
|
83
|
+
if (!enabled || typeof window === 'undefined' || typeof window.matchMedia !== 'function') {
|
|
84
|
+
return [getDefaultSnapshot, subscribeNoop];
|
|
85
|
+
}
|
|
86
|
+
const mediaQueryList = window.matchMedia(MEDIA_QUERY);
|
|
87
|
+
return [() => mediaQueryList.matches, notify => {
|
|
88
|
+
mediaQueryList.addEventListener('change', notify);
|
|
89
|
+
return () => {
|
|
90
|
+
mediaQueryList.removeEventListener('change', notify);
|
|
91
|
+
};
|
|
92
|
+
}];
|
|
93
|
+
}, [enabled]);
|
|
94
|
+
return maybeReactUseSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
95
|
+
}
|
|
96
|
+
const useReducedMotionMediaQuery = maybeReactUseSyncExternalStore !== undefined ? useReducedMotionMediaQueryNew : useReducedMotionMediaQueryOld;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Resolves whether a Material UI transition should reduce motion and provides
|
|
100
|
+
* adjusted CSS transition timing for MUI-owned duration/delay values.
|
|
101
|
+
*/
|
|
102
|
+
function useReducedMotion(mode, disablePrefersReducedMotion) {
|
|
103
|
+
const prefersReducedMotion = useReducedMotionMediaQuery(!disablePrefersReducedMotion && mode === 'system');
|
|
104
|
+
const shouldReduceMotion = !disablePrefersReducedMotion && (mode === 'always' || mode === 'system' && prefersReducedMotion !== false);
|
|
105
|
+
return React.useMemo(() => ({
|
|
106
|
+
shouldReduceMotion,
|
|
107
|
+
getTransitionTiming(timing) {
|
|
108
|
+
if (!shouldReduceMotion) {
|
|
109
|
+
return timing;
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
duration: REDUCED_MOTION_DURATION,
|
|
113
|
+
delay: REDUCED_MOTION_DELAY
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
}), [shouldReduceMotion]);
|
|
117
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
|
|
5
|
+
const MEDIA_QUERY = '(prefers-reduced-motion: reduce)';
|
|
6
|
+
const REDUCED_MOTION_DURATION = 0;
|
|
7
|
+
const REDUCED_MOTION_DELAY = '0ms';
|
|
8
|
+
const NOOP = () => {};
|
|
9
|
+
const getDefaultSnapshot = () => false;
|
|
10
|
+
const getReducedMotionSnapshot = () => true;
|
|
11
|
+
const subscribeNoop = () => NOOP;
|
|
12
|
+
/**
|
|
13
|
+
* Subscribes to the OS reduced-motion media query only when the theme mode needs it.
|
|
14
|
+
* React 17 reads the media query after mount, matching useMediaQuery's fallback path.
|
|
15
|
+
*/
|
|
16
|
+
function useReducedMotionMediaQueryOld(enabled) {
|
|
17
|
+
const [queryState, setQueryState] = React.useState(() => ({
|
|
18
|
+
enabled,
|
|
19
|
+
matches: enabled ? null : false
|
|
20
|
+
}));
|
|
21
|
+
let matches = queryState.matches;
|
|
22
|
+
if (queryState.enabled !== enabled) {
|
|
23
|
+
matches = null;
|
|
24
|
+
if (!enabled) {
|
|
25
|
+
matches = false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
useEnhancedEffect(() => {
|
|
29
|
+
const setResolvedMatches = nextMatches => {
|
|
30
|
+
setQueryState(previousState => {
|
|
31
|
+
if (previousState.enabled === enabled && previousState.matches === nextMatches) {
|
|
32
|
+
return previousState;
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
enabled,
|
|
36
|
+
matches: nextMatches
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
if (!enabled) {
|
|
41
|
+
if (queryState.enabled) {
|
|
42
|
+
setResolvedMatches(false);
|
|
43
|
+
}
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {
|
|
47
|
+
setResolvedMatches(false);
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
const mediaQueryList = window.matchMedia(MEDIA_QUERY);
|
|
51
|
+
const update = () => {
|
|
52
|
+
setResolvedMatches(mediaQueryList.matches);
|
|
53
|
+
};
|
|
54
|
+
update();
|
|
55
|
+
mediaQueryList.addEventListener('change', update);
|
|
56
|
+
return () => {
|
|
57
|
+
mediaQueryList.removeEventListener('change', update);
|
|
58
|
+
};
|
|
59
|
+
}, [enabled, queryState.enabled]);
|
|
60
|
+
return matches;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// See https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379 for why
|
|
64
|
+
const safeReact = {
|
|
65
|
+
...React
|
|
66
|
+
};
|
|
67
|
+
const maybeReactUseSyncExternalStore = safeReact.useSyncExternalStore;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* React 18+ can read the media query during client renders, so newly mounted
|
|
71
|
+
* transitions do not start from the SSR-safe reduced-motion default.
|
|
72
|
+
*/
|
|
73
|
+
function useReducedMotionMediaQueryNew(enabled) {
|
|
74
|
+
const getServerSnapshot = enabled ? getReducedMotionSnapshot : getDefaultSnapshot;
|
|
75
|
+
const [getSnapshot, subscribe] = React.useMemo(() => {
|
|
76
|
+
if (!enabled || typeof window === 'undefined' || typeof window.matchMedia !== 'function') {
|
|
77
|
+
return [getDefaultSnapshot, subscribeNoop];
|
|
78
|
+
}
|
|
79
|
+
const mediaQueryList = window.matchMedia(MEDIA_QUERY);
|
|
80
|
+
return [() => mediaQueryList.matches, notify => {
|
|
81
|
+
mediaQueryList.addEventListener('change', notify);
|
|
82
|
+
return () => {
|
|
83
|
+
mediaQueryList.removeEventListener('change', notify);
|
|
84
|
+
};
|
|
85
|
+
}];
|
|
86
|
+
}, [enabled]);
|
|
87
|
+
return maybeReactUseSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
88
|
+
}
|
|
89
|
+
const useReducedMotionMediaQuery = maybeReactUseSyncExternalStore !== undefined ? useReducedMotionMediaQueryNew : useReducedMotionMediaQueryOld;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Resolves whether a Material UI transition should reduce motion and provides
|
|
93
|
+
* adjusted CSS transition timing for MUI-owned duration/delay values.
|
|
94
|
+
*/
|
|
95
|
+
export default function useReducedMotion(mode, disablePrefersReducedMotion) {
|
|
96
|
+
const prefersReducedMotion = useReducedMotionMediaQuery(!disablePrefersReducedMotion && mode === 'system');
|
|
97
|
+
const shouldReduceMotion = !disablePrefersReducedMotion && (mode === 'always' || mode === 'system' && prefersReducedMotion !== false);
|
|
98
|
+
return React.useMemo(() => ({
|
|
99
|
+
shouldReduceMotion,
|
|
100
|
+
getTransitionTiming(timing) {
|
|
101
|
+
if (!shouldReduceMotion) {
|
|
102
|
+
return timing;
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
duration: REDUCED_MOTION_DURATION,
|
|
106
|
+
delay: REDUCED_MOTION_DELAY
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}), [shouldReduceMotion]);
|
|
110
|
+
}
|
package/transitions/utils.d.mts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { defaultStyles } from "../styles/reducedMotion.mjs";
|
|
3
|
+
import type { ReducedMotionMode } from "../styles/createMotion.mjs";
|
|
2
4
|
export declare const reflow: (node: Element) => number;
|
|
3
5
|
interface ComponentProps {
|
|
4
6
|
easing: string | {
|
|
@@ -19,6 +21,11 @@ interface TransitionProps {
|
|
|
19
21
|
easing: string | undefined;
|
|
20
22
|
delay: string | undefined;
|
|
21
23
|
}
|
|
24
|
+
interface TransitionCreateOptions {
|
|
25
|
+
duration: number | string;
|
|
26
|
+
easing: string;
|
|
27
|
+
delay: number | string;
|
|
28
|
+
}
|
|
22
29
|
interface TranslateOffset {
|
|
23
30
|
offsetX: number;
|
|
24
31
|
offsetY: number;
|
|
@@ -39,9 +46,34 @@ export declare function getTranslateOffsets(transform: string | undefined): Tran
|
|
|
39
46
|
export declare function normalizedTransitionCallback(nodeRef: React.RefObject<HTMLElement | null>, callback: ((node: HTMLElement, isAppearing?: boolean) => void) | undefined): (maybeIsAppearing?: boolean) => void;
|
|
40
47
|
type TransitionState = 'entering' | 'entered' | 'exiting' | 'exited';
|
|
41
48
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
49
|
+
* Return the child style for a transition. Reuse predefined style objects when
|
|
50
|
+
* no custom styles are present so memoized children see the same object.
|
|
44
51
|
*/
|
|
45
52
|
export declare function getTransitionChildStyle(state: TransitionState, inProp: boolean | undefined, baseStyles: Record<string, React.CSSProperties>, hiddenStyles: React.CSSProperties, styleProp: React.CSSProperties | undefined, childStyle: React.CSSProperties | undefined): React.CSSProperties | undefined;
|
|
46
53
|
export declare function getTransitionProps(props: ComponentProps, options: Options): TransitionProps;
|
|
54
|
+
/**
|
|
55
|
+
* Returns CSS that disables component-owned transitions when reduced motion is active.
|
|
56
|
+
* Pass custom styles only when the default `transition: none` reset is not enough.
|
|
57
|
+
*/
|
|
58
|
+
export declare function getReducedMotionStyles<Styles extends object = typeof defaultStyles>(theme: {
|
|
59
|
+
motion?: {
|
|
60
|
+
reducedMotion?: ReducedMotionMode | undefined;
|
|
61
|
+
} | undefined;
|
|
62
|
+
}, styles?: Styles): Styles | {
|
|
63
|
+
'@media (prefers-reduced-motion: reduce)': Styles;
|
|
64
|
+
} | null;
|
|
65
|
+
export declare function getTransitionStyles(theme: {
|
|
66
|
+
transitions?: {
|
|
67
|
+
create: (props?: string | string[], options?: Partial<TransitionCreateOptions>) => string;
|
|
68
|
+
} | undefined;
|
|
69
|
+
motion?: {
|
|
70
|
+
reducedMotion?: ReducedMotionMode | undefined;
|
|
71
|
+
} | undefined;
|
|
72
|
+
}, props?: string | string[], options?: Partial<TransitionCreateOptions>): React.CSSProperties | {
|
|
73
|
+
transition: string;
|
|
74
|
+
} | {
|
|
75
|
+
'@media (prefers-reduced-motion: reduce)': {
|
|
76
|
+
transition: string;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
47
79
|
export {};
|
package/transitions/utils.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { defaultStyles } from "../styles/reducedMotion.js";
|
|
3
|
+
import type { ReducedMotionMode } from "../styles/createMotion.js";
|
|
2
4
|
export declare const reflow: (node: Element) => number;
|
|
3
5
|
interface ComponentProps {
|
|
4
6
|
easing: string | {
|
|
@@ -19,6 +21,11 @@ interface TransitionProps {
|
|
|
19
21
|
easing: string | undefined;
|
|
20
22
|
delay: string | undefined;
|
|
21
23
|
}
|
|
24
|
+
interface TransitionCreateOptions {
|
|
25
|
+
duration: number | string;
|
|
26
|
+
easing: string;
|
|
27
|
+
delay: number | string;
|
|
28
|
+
}
|
|
22
29
|
interface TranslateOffset {
|
|
23
30
|
offsetX: number;
|
|
24
31
|
offsetY: number;
|
|
@@ -39,9 +46,34 @@ export declare function getTranslateOffsets(transform: string | undefined): Tran
|
|
|
39
46
|
export declare function normalizedTransitionCallback(nodeRef: React.RefObject<HTMLElement | null>, callback: ((node: HTMLElement, isAppearing?: boolean) => void) | undefined): (maybeIsAppearing?: boolean) => void;
|
|
40
47
|
type TransitionState = 'entering' | 'entered' | 'exiting' | 'exited';
|
|
41
48
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
49
|
+
* Return the child style for a transition. Reuse predefined style objects when
|
|
50
|
+
* no custom styles are present so memoized children see the same object.
|
|
44
51
|
*/
|
|
45
52
|
export declare function getTransitionChildStyle(state: TransitionState, inProp: boolean | undefined, baseStyles: Record<string, React.CSSProperties>, hiddenStyles: React.CSSProperties, styleProp: React.CSSProperties | undefined, childStyle: React.CSSProperties | undefined): React.CSSProperties | undefined;
|
|
46
53
|
export declare function getTransitionProps(props: ComponentProps, options: Options): TransitionProps;
|
|
54
|
+
/**
|
|
55
|
+
* Returns CSS that disables component-owned transitions when reduced motion is active.
|
|
56
|
+
* Pass custom styles only when the default `transition: none` reset is not enough.
|
|
57
|
+
*/
|
|
58
|
+
export declare function getReducedMotionStyles<Styles extends object = typeof defaultStyles>(theme: {
|
|
59
|
+
motion?: {
|
|
60
|
+
reducedMotion?: ReducedMotionMode | undefined;
|
|
61
|
+
} | undefined;
|
|
62
|
+
}, styles?: Styles): Styles | {
|
|
63
|
+
'@media (prefers-reduced-motion: reduce)': Styles;
|
|
64
|
+
} | null;
|
|
65
|
+
export declare function getTransitionStyles(theme: {
|
|
66
|
+
transitions?: {
|
|
67
|
+
create: (props?: string | string[], options?: Partial<TransitionCreateOptions>) => string;
|
|
68
|
+
} | undefined;
|
|
69
|
+
motion?: {
|
|
70
|
+
reducedMotion?: ReducedMotionMode | undefined;
|
|
71
|
+
} | undefined;
|
|
72
|
+
}, props?: string | string[], options?: Partial<TransitionCreateOptions>): React.CSSProperties | {
|
|
73
|
+
transition: string;
|
|
74
|
+
} | {
|
|
75
|
+
'@media (prefers-reduced-motion: reduce)': {
|
|
76
|
+
transition: string;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
47
79
|
export {};
|
package/transitions/utils.js
CHANGED
|
@@ -3,17 +3,23 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.getReducedMotionStyles = getReducedMotionStyles;
|
|
6
7
|
exports.getTransitionChildStyle = getTransitionChildStyle;
|
|
7
8
|
exports.getTransitionProps = getTransitionProps;
|
|
9
|
+
exports.getTransitionStyles = getTransitionStyles;
|
|
8
10
|
exports.getTranslateOffsets = getTranslateOffsets;
|
|
9
11
|
exports.normalizedTransitionCallback = normalizedTransitionCallback;
|
|
10
12
|
exports.reflow = void 0;
|
|
13
|
+
var _reducedMotion = require("../styles/reducedMotion");
|
|
11
14
|
const reflow = node => node.scrollTop;
|
|
12
15
|
exports.reflow = reflow;
|
|
13
16
|
const DEFAULT_TRANSLATE_OFFSET = {
|
|
14
17
|
offsetX: 0,
|
|
15
18
|
offsetY: 0
|
|
16
19
|
};
|
|
20
|
+
const EMPTY_STYLE = {};
|
|
21
|
+
const DEFAULT_TRANSITION_PROPS = ['all'];
|
|
22
|
+
const EMPTY_OPTIONS = {};
|
|
17
23
|
const transformOffsetIndexes = {
|
|
18
24
|
matrix: [4, 5],
|
|
19
25
|
matrix3d: [12, 13],
|
|
@@ -77,7 +83,7 @@ function normalizedTransitionCallback(nodeRef, callback) {
|
|
|
77
83
|
return maybeIsAppearing => {
|
|
78
84
|
if (callback) {
|
|
79
85
|
const node = nodeRef.current;
|
|
80
|
-
//
|
|
86
|
+
// Enter callbacks receive isAppearing; exit callbacks do not.
|
|
81
87
|
if (maybeIsAppearing === undefined) {
|
|
82
88
|
callback(node);
|
|
83
89
|
} else {
|
|
@@ -87,8 +93,8 @@ function normalizedTransitionCallback(nodeRef, callback) {
|
|
|
87
93
|
};
|
|
88
94
|
}
|
|
89
95
|
/**
|
|
90
|
-
*
|
|
91
|
-
*
|
|
96
|
+
* Return the child style for a transition. Reuse predefined style objects when
|
|
97
|
+
* no custom styles are present so memoized children see the same object.
|
|
92
98
|
*/
|
|
93
99
|
function getTransitionChildStyle(state, inProp, baseStyles, hiddenStyles, styleProp, childStyle) {
|
|
94
100
|
const base = state === 'exited' && !inProp ? hiddenStyles : baseStyles[state] || baseStyles.exited;
|
|
@@ -102,11 +108,34 @@ function getTransitionProps(props, options) {
|
|
|
102
108
|
const {
|
|
103
109
|
timeout,
|
|
104
110
|
easing,
|
|
105
|
-
style =
|
|
111
|
+
style = EMPTY_STYLE
|
|
106
112
|
} = props;
|
|
107
113
|
return {
|
|
108
114
|
duration: style.transitionDuration ?? (typeof timeout === 'number' ? timeout : timeout[options.mode] || 0),
|
|
109
115
|
easing: style.transitionTimingFunction ?? (typeof easing === 'object' ? easing[options.mode] : easing),
|
|
110
116
|
delay: style.transitionDelay
|
|
111
117
|
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Returns CSS that disables component-owned transitions when reduced motion is active.
|
|
122
|
+
* Pass custom styles only when the default `transition: none` reset is not enough.
|
|
123
|
+
*/
|
|
124
|
+
function getReducedMotionStyles(theme, styles) {
|
|
125
|
+
const resolvedStyles = styles ?? _reducedMotion.defaultStyles;
|
|
126
|
+
return (0, _reducedMotion.resolveReducedMotionStyles)(theme.motion?.reducedMotion, resolvedStyles);
|
|
127
|
+
}
|
|
128
|
+
function getTransitionStyles(theme, props = DEFAULT_TRANSITION_PROPS, options = EMPTY_OPTIONS) {
|
|
129
|
+
const transition = theme.transitions?.create?.(props, options);
|
|
130
|
+
const reducedMotionStyles = getReducedMotionStyles(theme);
|
|
131
|
+
if (transition === undefined) {
|
|
132
|
+
return reducedMotionStyles ?? EMPTY_STYLE;
|
|
133
|
+
}
|
|
134
|
+
const transitionStyles = {
|
|
135
|
+
transition
|
|
136
|
+
};
|
|
137
|
+
return reducedMotionStyles ? {
|
|
138
|
+
...transitionStyles,
|
|
139
|
+
...reducedMotionStyles
|
|
140
|
+
} : transitionStyles;
|
|
112
141
|
}
|