UNPKG

7.1 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports.default = void 0;
11
12var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
14var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
16var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
17
18var React = _interopRequireWildcard(require("react"));
19
20var _propTypes = _interopRequireDefault(require("prop-types"));
21
22var _reactTransitionGroup = require("react-transition-group");
23
24var _transitions = require("../styles/transitions");
25
26var _useTheme = _interopRequireDefault(require("../styles/useTheme"));
27
28var _utils = require("../transitions/utils");
29
30var _useForkRef = _interopRequireDefault(require("../utils/useForkRef"));
31
32var styles = {
33 entering: {
34 transform: 'none'
35 },
36 entered: {
37 transform: 'none'
38 }
39};
40var defaultTimeout = {
41 enter: _transitions.duration.enteringScreen,
42 exit: _transitions.duration.leavingScreen
43};
44/**
45 * The Zoom transition can be used for the floating variant of the
46 * [Button](/components/buttons/#floating-action-buttons) component.
47 * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.
48 */
49
50var Zoom = /*#__PURE__*/React.forwardRef(function Zoom(props, ref) {
51 var children = props.children,
52 _props$disableStrictM = props.disableStrictModeCompat,
53 disableStrictModeCompat = _props$disableStrictM === void 0 ? false : _props$disableStrictM,
54 inProp = props.in,
55 onEnter = props.onEnter,
56 onEntered = props.onEntered,
57 onEntering = props.onEntering,
58 onExit = props.onExit,
59 onExited = props.onExited,
60 onExiting = props.onExiting,
61 style = props.style,
62 _props$timeout = props.timeout,
63 timeout = _props$timeout === void 0 ? defaultTimeout : _props$timeout,
64 _props$TransitionComp = props.TransitionComponent,
65 TransitionComponent = _props$TransitionComp === void 0 ? _reactTransitionGroup.Transition : _props$TransitionComp,
66 other = (0, _objectWithoutProperties2.default)(props, ["children", "disableStrictModeCompat", "in", "onEnter", "onEntered", "onEntering", "onExit", "onExited", "onExiting", "style", "timeout", "TransitionComponent"]);
67 var theme = (0, _useTheme.default)();
68 var enableStrictModeCompat = theme.unstable_strictMode && !disableStrictModeCompat;
69 var nodeRef = React.useRef(null);
70 var foreignRef = (0, _useForkRef.default)(children.ref, ref);
71 var handleRef = (0, _useForkRef.default)(enableStrictModeCompat ? nodeRef : undefined, foreignRef);
72
73 var normalizedTransitionCallback = function normalizedTransitionCallback(callback) {
74 return function (nodeOrAppearing, maybeAppearing) {
75 if (callback) {
76 var _ref = enableStrictModeCompat ? [nodeRef.current, nodeOrAppearing] : [nodeOrAppearing, maybeAppearing],
77 _ref2 = (0, _slicedToArray2.default)(_ref, 2),
78 node = _ref2[0],
79 isAppearing = _ref2[1]; // onEnterXxx and onExitXxx callbacks have a different arguments.length value.
80
81
82 if (isAppearing === undefined) {
83 callback(node);
84 } else {
85 callback(node, isAppearing);
86 }
87 }
88 };
89 };
90
91 var handleEntering = normalizedTransitionCallback(onEntering);
92 var handleEnter = normalizedTransitionCallback(function (node, isAppearing) {
93 (0, _utils.reflow)(node); // So the animation always start from the start.
94
95 var transitionProps = (0, _utils.getTransitionProps)({
96 style: style,
97 timeout: timeout
98 }, {
99 mode: 'enter'
100 });
101 node.style.webkitTransition = theme.transitions.create('transform', transitionProps);
102 node.style.transition = theme.transitions.create('transform', transitionProps);
103
104 if (onEnter) {
105 onEnter(node, isAppearing);
106 }
107 });
108 var handleEntered = normalizedTransitionCallback(onEntered);
109 var handleExiting = normalizedTransitionCallback(onExiting);
110 var handleExit = normalizedTransitionCallback(function (node) {
111 var transitionProps = (0, _utils.getTransitionProps)({
112 style: style,
113 timeout: timeout
114 }, {
115 mode: 'exit'
116 });
117 node.style.webkitTransition = theme.transitions.create('transform', transitionProps);
118 node.style.transition = theme.transitions.create('transform', transitionProps);
119
120 if (onExit) {
121 onExit(node);
122 }
123 });
124 var handleExited = normalizedTransitionCallback(onExited);
125 return /*#__PURE__*/React.createElement(TransitionComponent, (0, _extends2.default)({
126 appear: true,
127 in: inProp,
128 nodeRef: enableStrictModeCompat ? nodeRef : undefined,
129 onEnter: handleEnter,
130 onEntered: handleEntered,
131 onEntering: handleEntering,
132 onExit: handleExit,
133 onExited: handleExited,
134 onExiting: handleExiting,
135 timeout: timeout
136 }, other), function (state, childProps) {
137 return /*#__PURE__*/React.cloneElement(children, (0, _extends2.default)({
138 style: (0, _extends2.default)({
139 transform: 'scale(0)',
140 visibility: state === 'exited' && !inProp ? 'hidden' : undefined
141 }, styles[state], style, children.props.style),
142 ref: handleRef
143 }, childProps));
144 });
145});
146process.env.NODE_ENV !== "production" ? Zoom.propTypes = {
147 // ----------------------------- Warning --------------------------------
148 // | These PropTypes are generated from the TypeScript type definitions |
149 // | To update them edit the d.ts file and run "yarn proptypes" |
150 // ----------------------------------------------------------------------
151
152 /**
153 * A single child content element.
154 */
155 children: _propTypes.default.element,
156
157 /**
158 * Enable this prop if you encounter 'Function components cannot be given refs',
159 * use `unstable_createStrictModeTheme`,
160 * and can't forward the ref in the child component.
161 */
162 disableStrictModeCompat: _propTypes.default.bool,
163
164 /**
165 * If `true`, the component will transition in.
166 */
167 in: _propTypes.default.bool,
168
169 /**
170 * @ignore
171 */
172 onEnter: _propTypes.default.func,
173
174 /**
175 * @ignore
176 */
177 onEntered: _propTypes.default.func,
178
179 /**
180 * @ignore
181 */
182 onEntering: _propTypes.default.func,
183
184 /**
185 * @ignore
186 */
187 onExit: _propTypes.default.func,
188
189 /**
190 * @ignore
191 */
192 onExited: _propTypes.default.func,
193
194 /**
195 * @ignore
196 */
197 onExiting: _propTypes.default.func,
198
199 /**
200 * @ignore
201 */
202 style: _propTypes.default.object,
203
204 /**
205 * The duration for the transition, in milliseconds.
206 * You may specify a single timeout for all transitions, or individually with an object.
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 = Zoom;
215exports.default = _default;
\No newline at end of file