UNPKG

5.09 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4exports.__esModule = true;
5exports.default = void 0;
6var _classnames = _interopRequireDefault(require("classnames"));
7var _css = _interopRequireDefault(require("dom-helpers/css"));
8var _react = _interopRequireWildcard(require("react"));
9var _Transition = require("react-transition-group/Transition");
10var _transitionEndListener = _interopRequireDefault(require("./transitionEndListener"));
11var _createChainedFunction = _interopRequireDefault(require("./createChainedFunction"));
12var _triggerBrowserReflow = _interopRequireDefault(require("./triggerBrowserReflow"));
13var _TransitionWrapper = _interopRequireDefault(require("./TransitionWrapper"));
14var _jsxRuntime = require("react/jsx-runtime");
15function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17const MARGINS = {
18 height: ['marginTop', 'marginBottom'],
19 width: ['marginLeft', 'marginRight']
20};
21function getDefaultDimensionValue(dimension, elem) {
22 const offset = `offset${dimension[0].toUpperCase()}${dimension.slice(1)}`;
23 const value = elem[offset];
24 const margins = MARGINS[dimension];
25 return value +
26 // @ts-ignore
27 parseInt((0, _css.default)(elem, margins[0]), 10) +
28 // @ts-ignore
29 parseInt((0, _css.default)(elem, margins[1]), 10);
30}
31const collapseStyles = {
32 [_Transition.EXITED]: 'collapse',
33 [_Transition.EXITING]: 'collapsing',
34 [_Transition.ENTERING]: 'collapsing',
35 [_Transition.ENTERED]: 'collapse show'
36};
37const Collapse = /*#__PURE__*/_react.default.forwardRef(({
38 onEnter,
39 onEntering,
40 onEntered,
41 onExit,
42 onExiting,
43 className,
44 children,
45 dimension = 'height',
46 in: inProp = false,
47 timeout = 300,
48 mountOnEnter = false,
49 unmountOnExit = false,
50 appear = false,
51 getDimensionValue = getDefaultDimensionValue,
52 ...props
53}, ref) => {
54 /* Compute dimension */
55 const computedDimension = typeof dimension === 'function' ? dimension() : dimension;
56
57 /* -- Expanding -- */
58 const handleEnter = (0, _react.useMemo)(() => (0, _createChainedFunction.default)(elem => {
59 elem.style[computedDimension] = '0';
60 }, onEnter), [computedDimension, onEnter]);
61 const handleEntering = (0, _react.useMemo)(() => (0, _createChainedFunction.default)(elem => {
62 const scroll = `scroll${computedDimension[0].toUpperCase()}${computedDimension.slice(1)}`;
63 elem.style[computedDimension] = `${elem[scroll]}px`;
64 }, onEntering), [computedDimension, onEntering]);
65 const handleEntered = (0, _react.useMemo)(() => (0, _createChainedFunction.default)(elem => {
66 elem.style[computedDimension] = null;
67 }, onEntered), [computedDimension, onEntered]);
68
69 /* -- Collapsing -- */
70 const handleExit = (0, _react.useMemo)(() => (0, _createChainedFunction.default)(elem => {
71 elem.style[computedDimension] = `${getDimensionValue(computedDimension, elem)}px`;
72 (0, _triggerBrowserReflow.default)(elem);
73 }, onExit), [onExit, getDimensionValue, computedDimension]);
74 const handleExiting = (0, _react.useMemo)(() => (0, _createChainedFunction.default)(elem => {
75 elem.style[computedDimension] = null;
76 }, onExiting), [computedDimension, onExiting]);
77 return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TransitionWrapper.default, {
78 ref: ref,
79 addEndListener: _transitionEndListener.default,
80 ...props,
81 "aria-expanded": props.role ? inProp : null,
82 onEnter: handleEnter,
83 onEntering: handleEntering,
84 onEntered: handleEntered,
85 onExit: handleExit,
86 onExiting: handleExiting,
87 childRef: children.ref,
88 in: inProp,
89 timeout: timeout,
90 mountOnEnter: mountOnEnter,
91 unmountOnExit: unmountOnExit,
92 appear: appear,
93 children: (state, innerProps) => /*#__PURE__*/_react.default.cloneElement(children, {
94 ...innerProps,
95 className: (0, _classnames.default)(className, children.props.className, collapseStyles[state], computedDimension === 'width' && 'collapse-horizontal')
96 })
97 });
98});
99
100// @ts-ignore
101var _default = Collapse;
102exports.default = _default;
103module.exports = exports.default;
\No newline at end of file