UNPKG

12.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 = exports.styles = 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 _clsx = _interopRequireDefault(require("clsx"));
21
22var _propTypes = _interopRequireDefault(require("prop-types"));
23
24var _utils = require("@material-ui/utils");
25
26var _reactTransitionGroup = require("react-transition-group");
27
28var _withStyles = _interopRequireDefault(require("../styles/withStyles"));
29
30var _transitions = require("../styles/transitions");
31
32var _deprecatedPropType = _interopRequireDefault(require("../utils/deprecatedPropType"));
33
34var _utils2 = require("../transitions/utils");
35
36var _useTheme = _interopRequireDefault(require("../styles/useTheme"));
37
38var _utils3 = require("../utils");
39
40var styles = function styles(theme) {
41 return {
42 /* Styles applied to the root element. */
43 root: {
44 height: 0,
45 overflow: 'hidden',
46 transition: theme.transitions.create('height')
47 },
48
49 /* Styles applied to the root element when the transition has entered. */
50 entered: {
51 height: 'auto',
52 overflow: 'visible'
53 },
54
55 /* Styles applied to the root element when the transition has exited and `collapsedSize` != 0px. */
56 hidden: {
57 visibility: 'hidden'
58 },
59
60 /* Styles applied to the outer wrapper element. */
61 wrapper: {
62 // Hack to get children with a negative margin to not falsify the height computation.
63 display: 'flex'
64 },
65
66 /* Styles applied to the inner wrapper element. */
67 wrapperInner: {
68 width: '100%'
69 }
70 };
71};
72/**
73 * The Collapse transition is used by the
74 * [Vertical Stepper](/components/steppers/#vertical-stepper) StepContent component.
75 * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.
76 */
77
78
79exports.styles = styles;
80var Collapse = /*#__PURE__*/React.forwardRef(function Collapse(props, ref) {
81 var children = props.children,
82 classes = props.classes,
83 className = props.className,
84 collapsedHeight = props.collapsedHeight,
85 _props$collapsedSize = props.collapsedSize,
86 collapsedSizeProp = _props$collapsedSize === void 0 ? '0px' : _props$collapsedSize,
87 _props$component = props.component,
88 Component = _props$component === void 0 ? 'div' : _props$component,
89 _props$disableStrictM = props.disableStrictModeCompat,
90 disableStrictModeCompat = _props$disableStrictM === void 0 ? false : _props$disableStrictM,
91 inProp = props.in,
92 onEnter = props.onEnter,
93 onEntered = props.onEntered,
94 onEntering = props.onEntering,
95 onExit = props.onExit,
96 onExited = props.onExited,
97 onExiting = props.onExiting,
98 style = props.style,
99 _props$timeout = props.timeout,
100 timeout = _props$timeout === void 0 ? _transitions.duration.standard : _props$timeout,
101 _props$TransitionComp = props.TransitionComponent,
102 TransitionComponent = _props$TransitionComp === void 0 ? _reactTransitionGroup.Transition : _props$TransitionComp,
103 other = (0, _objectWithoutProperties2.default)(props, ["children", "classes", "className", "collapsedHeight", "collapsedSize", "component", "disableStrictModeCompat", "in", "onEnter", "onEntered", "onEntering", "onExit", "onExited", "onExiting", "style", "timeout", "TransitionComponent"]);
104 var theme = (0, _useTheme.default)();
105 var timer = React.useRef();
106 var wrapperRef = React.useRef(null);
107 var autoTransitionDuration = React.useRef();
108 var collapsedSize = typeof (collapsedHeight || collapsedSizeProp) === 'number' ? "".concat(collapsedHeight || collapsedSizeProp, "px") : collapsedHeight || collapsedSizeProp;
109 React.useEffect(function () {
110 return function () {
111 clearTimeout(timer.current);
112 };
113 }, []);
114 var enableStrictModeCompat = theme.unstable_strictMode && !disableStrictModeCompat;
115 var nodeRef = React.useRef(null);
116 var handleRef = (0, _utils3.useForkRef)(ref, enableStrictModeCompat ? nodeRef : undefined);
117
118 var normalizedTransitionCallback = function normalizedTransitionCallback(callback) {
119 return function (nodeOrAppearing, maybeAppearing) {
120 if (callback) {
121 var _ref = enableStrictModeCompat ? [nodeRef.current, nodeOrAppearing] : [nodeOrAppearing, maybeAppearing],
122 _ref2 = (0, _slicedToArray2.default)(_ref, 2),
123 node = _ref2[0],
124 isAppearing = _ref2[1]; // onEnterXxx and onExitXxx callbacks have a different arguments.length value.
125
126
127 if (isAppearing === undefined) {
128 callback(node);
129 } else {
130 callback(node, isAppearing);
131 }
132 }
133 };
134 };
135
136 var handleEnter = normalizedTransitionCallback(function (node, isAppearing) {
137 node.style.height = collapsedSize;
138
139 if (onEnter) {
140 onEnter(node, isAppearing);
141 }
142 });
143 var handleEntering = normalizedTransitionCallback(function (node, isAppearing) {
144 var wrapperHeight = wrapperRef.current ? wrapperRef.current.clientHeight : 0;
145
146 var _getTransitionProps = (0, _utils2.getTransitionProps)({
147 style: style,
148 timeout: timeout
149 }, {
150 mode: 'enter'
151 }),
152 transitionDuration = _getTransitionProps.duration;
153
154 if (timeout === 'auto') {
155 var duration2 = theme.transitions.getAutoHeightDuration(wrapperHeight);
156 node.style.transitionDuration = "".concat(duration2, "ms");
157 autoTransitionDuration.current = duration2;
158 } else {
159 node.style.transitionDuration = typeof transitionDuration === 'string' ? transitionDuration : "".concat(transitionDuration, "ms");
160 }
161
162 node.style.height = "".concat(wrapperHeight, "px");
163
164 if (onEntering) {
165 onEntering(node, isAppearing);
166 }
167 });
168 var handleEntered = normalizedTransitionCallback(function (node, isAppearing) {
169 node.style.height = 'auto';
170
171 if (onEntered) {
172 onEntered(node, isAppearing);
173 }
174 });
175 var handleExit = normalizedTransitionCallback(function (node) {
176 var wrapperHeight = wrapperRef.current ? wrapperRef.current.clientHeight : 0;
177 node.style.height = "".concat(wrapperHeight, "px");
178
179 if (onExit) {
180 onExit(node);
181 }
182 });
183 var handleExited = normalizedTransitionCallback(onExited);
184 var handleExiting = normalizedTransitionCallback(function (node) {
185 var wrapperHeight = wrapperRef.current ? wrapperRef.current.clientHeight : 0;
186
187 var _getTransitionProps2 = (0, _utils2.getTransitionProps)({
188 style: style,
189 timeout: timeout
190 }, {
191 mode: 'exit'
192 }),
193 transitionDuration = _getTransitionProps2.duration;
194
195 if (timeout === 'auto') {
196 var duration2 = theme.transitions.getAutoHeightDuration(wrapperHeight);
197 node.style.transitionDuration = "".concat(duration2, "ms");
198 autoTransitionDuration.current = duration2;
199 } else {
200 node.style.transitionDuration = typeof transitionDuration === 'string' ? transitionDuration : "".concat(transitionDuration, "ms");
201 }
202
203 node.style.height = collapsedSize;
204
205 if (onExiting) {
206 onExiting(node);
207 }
208 });
209
210 var addEndListener = function addEndListener(nodeOrNext, maybeNext) {
211 var next = enableStrictModeCompat ? nodeOrNext : maybeNext;
212
213 if (timeout === 'auto') {
214 timer.current = setTimeout(next, autoTransitionDuration.current || 0);
215 }
216 };
217
218 return /*#__PURE__*/React.createElement(TransitionComponent, (0, _extends2.default)({
219 in: inProp,
220 onEnter: handleEnter,
221 onEntered: handleEntered,
222 onEntering: handleEntering,
223 onExit: handleExit,
224 onExited: handleExited,
225 onExiting: handleExiting,
226 addEndListener: addEndListener,
227 nodeRef: enableStrictModeCompat ? nodeRef : undefined,
228 timeout: timeout === 'auto' ? null : timeout
229 }, other), function (state, childProps) {
230 return /*#__PURE__*/React.createElement(Component, (0, _extends2.default)({
231 className: (0, _clsx.default)(classes.root, classes.container, className, {
232 'entered': classes.entered,
233 'exited': !inProp && collapsedSize === '0px' && classes.hidden
234 }[state]),
235 style: (0, _extends2.default)({
236 minHeight: collapsedSize
237 }, style),
238 ref: handleRef
239 }, childProps), /*#__PURE__*/React.createElement("div", {
240 className: classes.wrapper,
241 ref: wrapperRef
242 }, /*#__PURE__*/React.createElement("div", {
243 className: classes.wrapperInner
244 }, children)));
245 });
246});
247process.env.NODE_ENV !== "production" ? Collapse.propTypes = {
248 // ----------------------------- Warning --------------------------------
249 // | These PropTypes are generated from the TypeScript type definitions |
250 // | To update them edit the d.ts file and run "yarn proptypes" |
251 // ----------------------------------------------------------------------
252
253 /**
254 * The content node to be collapsed.
255 */
256 children: _propTypes.default.node,
257
258 /**
259 * Override or extend the styles applied to the component.
260 * See [CSS API](#css) below for more details.
261 */
262 classes: (0, _utils.chainPropTypes)(_propTypes.default.object, function (props) {
263 if (props.classes && props.classes.container) {
264 throw new Error(['Material-UI: the classes.container key is deprecated.', 'Use `classes.root` instead', 'The name of the pseudo-class was changed for consistency.'].join('\n'));
265 }
266
267 return null;
268 }),
269
270 /**
271 * @ignore
272 */
273 className: _propTypes.default.string,
274
275 /**
276 * The height of the container when collapsed.
277 * @deprecated The prop was renamed to support the addition of horizontal orientation, use `collapsedSize` instead.
278 */
279 collapsedHeight: (0, _deprecatedPropType.default)(_propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]), 'The prop was renamed to support the vertical orientation, use `collapsedSize` instead'),
280
281 /**
282 * The height of the container when collapsed.
283 */
284 collapsedSize: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
285
286 /**
287 * The component used for the root node.
288 * Either a string to use a HTML element or a component.
289 */
290 component: _propTypes.default
291 /* @typescript-to-proptypes-ignore */
292 .elementType,
293
294 /**
295 * Enable this prop if you encounter 'Function components cannot be given refs',
296 * use `unstable_createStrictModeTheme`,
297 * and can't forward the ref in the passed `Component`.
298 */
299 disableStrictModeCompat: _propTypes.default.bool,
300
301 /**
302 * If `true`, the component will transition in.
303 */
304 in: _propTypes.default.bool,
305
306 /**
307 * @ignore
308 */
309 onEnter: _propTypes.default.func,
310
311 /**
312 * @ignore
313 */
314 onEntered: _propTypes.default.func,
315
316 /**
317 * @ignore
318 */
319 onEntering: _propTypes.default.func,
320
321 /**
322 * @ignore
323 */
324 onExit: _propTypes.default.func,
325
326 /**
327 * @ignore
328 */
329 onExited: _propTypes.default.func,
330
331 /**
332 * @ignore
333 */
334 onExiting: _propTypes.default.func,
335
336 /**
337 * @ignore
338 */
339 style: _propTypes.default.object,
340
341 /**
342 * The duration for the transition, in milliseconds.
343 * You may specify a single timeout for all transitions, or individually with an object.
344 *
345 * Set to 'auto' to automatically calculate transition time based on height.
346 */
347 timeout: _propTypes.default.oneOfType([_propTypes.default.oneOf(['auto']), _propTypes.default.number, _propTypes.default.shape({
348 appear: _propTypes.default.number,
349 enter: _propTypes.default.number,
350 exit: _propTypes.default.number
351 })])
352} : void 0;
353Collapse.muiSupportAuto = true;
354
355var _default = (0, _withStyles.default)(styles, {
356 name: 'MuiCollapse'
357})(Collapse);
358
359exports.default = _default;
\No newline at end of file