UNPKG

4.08 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.default = void 0;
9
10var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
12var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
14var _react = _interopRequireDefault(require("react"));
15
16var _propTypes = _interopRequireDefault(require("prop-types"));
17
18var _reactTransitionGroup = require("react-transition-group");
19
20var _transitions = require("../styles/transitions");
21
22var _useTheme = _interopRequireDefault(require("../styles/useTheme"));
23
24var _utils = require("../transitions/utils");
25
26var _useForkRef = _interopRequireDefault(require("../utils/useForkRef"));
27
28var styles = {
29 entering: {
30 opacity: 1
31 },
32 entered: {
33 opacity: 1
34 }
35};
36var defaultTimeout = {
37 enter: _transitions.duration.enteringScreen,
38 exit: _transitions.duration.leavingScreen
39};
40/**
41 * The Fade transition is used by the [Modal](/components/modal/) component.
42 * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.
43 */
44
45var Fade = _react.default.forwardRef(function Fade(props, ref) {
46 var children = props.children,
47 inProp = props.in,
48 onEnter = props.onEnter,
49 onExit = props.onExit,
50 style = props.style,
51 _props$timeout = props.timeout,
52 timeout = _props$timeout === void 0 ? defaultTimeout : _props$timeout,
53 other = (0, _objectWithoutProperties2.default)(props, ["children", "in", "onEnter", "onExit", "style", "timeout"]);
54 var theme = (0, _useTheme.default)();
55 var handleRef = (0, _useForkRef.default)(children.ref, ref);
56
57 var handleEnter = function handleEnter(node, isAppearing) {
58 (0, _utils.reflow)(node); // So the animation always start from the start.
59
60 var transitionProps = (0, _utils.getTransitionProps)({
61 style: style,
62 timeout: timeout
63 }, {
64 mode: 'enter'
65 });
66 node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);
67 node.style.transition = theme.transitions.create('opacity', transitionProps);
68
69 if (onEnter) {
70 onEnter(node, isAppearing);
71 }
72 };
73
74 var handleExit = function handleExit(node) {
75 var transitionProps = (0, _utils.getTransitionProps)({
76 style: style,
77 timeout: timeout
78 }, {
79 mode: 'exit'
80 });
81 node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);
82 node.style.transition = theme.transitions.create('opacity', transitionProps);
83
84 if (onExit) {
85 onExit(node);
86 }
87 };
88
89 return _react.default.createElement(_reactTransitionGroup.Transition, (0, _extends2.default)({
90 appear: true,
91 in: inProp,
92 onEnter: handleEnter,
93 onExit: handleExit,
94 timeout: timeout
95 }, other), function (state, childProps) {
96 return _react.default.cloneElement(children, (0, _extends2.default)({
97 style: (0, _extends2.default)({
98 opacity: 0,
99 visibility: state === 'exited' && !inProp ? 'hidden' : undefined
100 }, styles[state], {}, style, {}, children.props.style),
101 ref: handleRef
102 }, childProps));
103 });
104});
105
106process.env.NODE_ENV !== "production" ? Fade.propTypes = {
107 /**
108 * A single child content element.
109 */
110 children: _propTypes.default.element,
111
112 /**
113 * If `true`, the component will transition in.
114 */
115 in: _propTypes.default.bool,
116
117 /**
118 * @ignore
119 */
120 onEnter: _propTypes.default.func,
121
122 /**
123 * @ignore
124 */
125 onExit: _propTypes.default.func,
126
127 /**
128 * @ignore
129 */
130 style: _propTypes.default.object,
131
132 /**
133 * The duration for the transition, in milliseconds.
134 * You may specify a single timeout for all transitions, or individually with an object.
135 */
136 timeout: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({
137 enter: _propTypes.default.number,
138 exit: _propTypes.default.number
139 })])
140} : void 0;
141var _default = Fade;
142exports.default = _default;
\No newline at end of file