UNPKG

7.14 kBJavaScriptView Raw
1"use strict";
2'use client';
3
4var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6Object.defineProperty(exports, "__esModule", {
7 value: true
8});
9exports.default = void 0;
10var React = _interopRequireWildcard(require("react"));
11var _propTypes = _interopRequireDefault(require("prop-types"));
12var _reactTransitionGroup = require("react-transition-group");
13var _elementAcceptingRef = _interopRequireDefault(require("@mui/utils/elementAcceptingRef"));
14var _getReactElementRef = _interopRequireDefault(require("@mui/utils/getReactElementRef"));
15var _zeroStyled = require("../zero-styled");
16var _utils = require("../transitions/utils");
17var _useForkRef = _interopRequireDefault(require("../utils/useForkRef"));
18var _jsxRuntime = require("react/jsx-runtime");
19const styles = {
20 entering: {
21 opacity: 1
22 },
23 entered: {
24 opacity: 1
25 }
26};
27
28/**
29 * The Fade transition is used by the [Modal](/material-ui/react-modal/) component.
30 * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.
31 */
32const Fade = /*#__PURE__*/React.forwardRef(function Fade(props, ref) {
33 const theme = (0, _zeroStyled.useTheme)();
34 const defaultTimeout = {
35 enter: theme.transitions.duration.enteringScreen,
36 exit: theme.transitions.duration.leavingScreen
37 };
38 const {
39 addEndListener,
40 appear = true,
41 children,
42 easing,
43 in: inProp,
44 onEnter,
45 onEntered,
46 onEntering,
47 onExit,
48 onExited,
49 onExiting,
50 style,
51 timeout = defaultTimeout,
52 // eslint-disable-next-line react/prop-types
53 TransitionComponent = _reactTransitionGroup.Transition,
54 ...other
55 } = props;
56 const enableStrictModeCompat = true;
57 const nodeRef = React.useRef(null);
58 const handleRef = (0, _useForkRef.default)(nodeRef, (0, _getReactElementRef.default)(children), ref);
59 const normalizedTransitionCallback = callback => maybeIsAppearing => {
60 if (callback) {
61 const node = nodeRef.current;
62
63 // onEnterXxx and onExitXxx callbacks have a different arguments.length value.
64 if (maybeIsAppearing === undefined) {
65 callback(node);
66 } else {
67 callback(node, maybeIsAppearing);
68 }
69 }
70 };
71 const handleEntering = normalizedTransitionCallback(onEntering);
72 const handleEnter = normalizedTransitionCallback((node, isAppearing) => {
73 (0, _utils.reflow)(node); // So the animation always start from the start.
74
75 const transitionProps = (0, _utils.getTransitionProps)({
76 style,
77 timeout,
78 easing
79 }, {
80 mode: 'enter'
81 });
82 node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);
83 node.style.transition = theme.transitions.create('opacity', transitionProps);
84 if (onEnter) {
85 onEnter(node, isAppearing);
86 }
87 });
88 const handleEntered = normalizedTransitionCallback(onEntered);
89 const handleExiting = normalizedTransitionCallback(onExiting);
90 const handleExit = normalizedTransitionCallback(node => {
91 const transitionProps = (0, _utils.getTransitionProps)({
92 style,
93 timeout,
94 easing
95 }, {
96 mode: 'exit'
97 });
98 node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);
99 node.style.transition = theme.transitions.create('opacity', transitionProps);
100 if (onExit) {
101 onExit(node);
102 }
103 });
104 const handleExited = normalizedTransitionCallback(onExited);
105 const handleAddEndListener = next => {
106 if (addEndListener) {
107 // Old call signature before `react-transition-group` implemented `nodeRef`
108 addEndListener(nodeRef.current, next);
109 }
110 };
111 return /*#__PURE__*/(0, _jsxRuntime.jsx)(TransitionComponent, {
112 appear: appear,
113 in: inProp,
114 nodeRef: enableStrictModeCompat ? nodeRef : undefined,
115 onEnter: handleEnter,
116 onEntered: handleEntered,
117 onEntering: handleEntering,
118 onExit: handleExit,
119 onExited: handleExited,
120 onExiting: handleExiting,
121 addEndListener: handleAddEndListener,
122 timeout: timeout,
123 ...other,
124 children: (state, childProps) => {
125 return /*#__PURE__*/React.cloneElement(children, {
126 style: {
127 opacity: 0,
128 visibility: state === 'exited' && !inProp ? 'hidden' : undefined,
129 ...styles[state],
130 ...style,
131 ...children.props.style
132 },
133 ref: handleRef,
134 ...childProps
135 });
136 }
137 });
138});
139process.env.NODE_ENV !== "production" ? Fade.propTypes /* remove-proptypes */ = {
140 // ┌────────────────────────────── Warning ──────────────────────────────┐
141 // │ These PropTypes are generated from the TypeScript type definitions. │
142 // │ To update them, edit the d.ts file and run `pnpm proptypes`. │
143 // └─────────────────────────────────────────────────────────────────────┘
144 /**
145 * Add a custom transition end trigger. Called with the transitioning DOM
146 * node and a done callback. Allows for more fine grained transition end
147 * logic. Note: Timeouts are still used as a fallback if provided.
148 */
149 addEndListener: _propTypes.default.func,
150 /**
151 * Perform the enter transition when it first mounts if `in` is also `true`.
152 * Set this to `false` to disable this behavior.
153 * @default true
154 */
155 appear: _propTypes.default.bool,
156 /**
157 * A single child content element.
158 */
159 children: _elementAcceptingRef.default.isRequired,
160 /**
161 * The transition timing function.
162 * You may specify a single easing or a object containing enter and exit values.
163 */
164 easing: _propTypes.default.oneOfType([_propTypes.default.shape({
165 enter: _propTypes.default.string,
166 exit: _propTypes.default.string
167 }), _propTypes.default.string]),
168 /**
169 * If `true`, the component will transition in.
170 */
171 in: _propTypes.default.bool,
172 /**
173 * @ignore
174 */
175 onEnter: _propTypes.default.func,
176 /**
177 * @ignore
178 */
179 onEntered: _propTypes.default.func,
180 /**
181 * @ignore
182 */
183 onEntering: _propTypes.default.func,
184 /**
185 * @ignore
186 */
187 onExit: _propTypes.default.func,
188 /**
189 * @ignore
190 */
191 onExited: _propTypes.default.func,
192 /**
193 * @ignore
194 */
195 onExiting: _propTypes.default.func,
196 /**
197 * @ignore
198 */
199 style: _propTypes.default.object,
200 /**
201 * The duration for the transition, in milliseconds.
202 * You may specify a single timeout for all transitions, or individually with an object.
203 * @default {
204 * enter: theme.transitions.duration.enteringScreen,
205 * exit: theme.transitions.duration.leavingScreen,
206 * }
207 */
208 timeout: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({
209 appear: _propTypes.default.number,
210 enter: _propTypes.default.number,
211 exit: _propTypes.default.number
212 })])
213} : void 0;
214var _default = exports.default = Fade;
\No newline at end of file