"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _classnames = _interopRequireDefault(require("classnames")); var _css = _interopRequireDefault(require("dom-helpers/css")); var _react = _interopRequireWildcard(require("react")); var _Transition = _interopRequireWildcard(require("react-transition-group/Transition")); var _transitionEndListener = _interopRequireDefault(require("./transitionEndListener")); var _createChainedFunction = _interopRequireDefault(require("./createChainedFunction")); var _triggerBrowserReflow = _interopRequireDefault(require("./triggerBrowserReflow")); var _excluded = ["onEnter", "onEntering", "onEntered", "onExit", "onExiting", "className", "children", "dimension", "getDimensionValue"]; var _collapseStyles; function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _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; } var MARGINS = { height: ['marginTop', 'marginBottom'], width: ['marginLeft', 'marginRight'] }; function getDefaultDimensionValue(dimension, elem) { var offset = "offset" + dimension[0].toUpperCase() + dimension.slice(1); var value = elem[offset]; var margins = MARGINS[dimension]; return value + // @ts-ignore parseInt((0, _css.default)(elem, margins[0]), 10) + // @ts-ignore parseInt((0, _css.default)(elem, margins[1]), 10); } var collapseStyles = (_collapseStyles = {}, _collapseStyles[_Transition.EXITED] = 'collapse', _collapseStyles[_Transition.EXITING] = 'collapsing', _collapseStyles[_Transition.ENTERING] = 'collapsing', _collapseStyles[_Transition.ENTERED] = 'collapse show', _collapseStyles); var defaultProps = { in: false, timeout: 300, mountOnEnter: false, unmountOnExit: false, appear: false, getDimensionValue: getDefaultDimensionValue }; var Collapse = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) { var onEnter = _ref.onEnter, onEntering = _ref.onEntering, onEntered = _ref.onEntered, onExit = _ref.onExit, onExiting = _ref.onExiting, className = _ref.className, children = _ref.children, _ref$dimension = _ref.dimension, dimension = _ref$dimension === void 0 ? 'height' : _ref$dimension, _ref$getDimensionValu = _ref.getDimensionValue, getDimensionValue = _ref$getDimensionValu === void 0 ? getDefaultDimensionValue : _ref$getDimensionValu, props = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded); /* Compute dimension */ var computedDimension = typeof dimension === 'function' ? dimension() : dimension; /* -- Expanding -- */ var handleEnter = (0, _react.useMemo)(function () { return (0, _createChainedFunction.default)(function (elem) { elem.style[computedDimension] = '0'; }, onEnter); }, [computedDimension, onEnter]); var handleEntering = (0, _react.useMemo)(function () { return (0, _createChainedFunction.default)(function (elem) { var scroll = "scroll" + computedDimension[0].toUpperCase() + computedDimension.slice(1); elem.style[computedDimension] = elem[scroll] + "px"; }, onEntering); }, [computedDimension, onEntering]); var handleEntered = (0, _react.useMemo)(function () { return (0, _createChainedFunction.default)(function (elem) { elem.style[computedDimension] = null; }, onEntered); }, [computedDimension, onEntered]); /* -- Collapsing -- */ var handleExit = (0, _react.useMemo)(function () { return (0, _createChainedFunction.default)(function (elem) { elem.style[computedDimension] = getDimensionValue(computedDimension, elem) + "px"; (0, _triggerBrowserReflow.default)(elem); }, onExit); }, [onExit, getDimensionValue, computedDimension]); var handleExiting = (0, _react.useMemo)(function () { return (0, _createChainedFunction.default)(function (elem) { elem.style[computedDimension] = null; }, onExiting); }, [computedDimension, onExiting]); return /*#__PURE__*/_react.default.createElement(_Transition.default // @ts-ignore , (0, _extends2.default)({ ref: ref, addEndListener: _transitionEndListener.default }, props, { "aria-expanded": props.role ? props.in : null, onEnter: handleEnter, onEntering: handleEntering, onEntered: handleEntered, onExit: handleExit, onExiting: handleExiting }), function (state, innerProps) { return /*#__PURE__*/_react.default.cloneElement(children, (0, _extends2.default)({}, innerProps, { className: (0, _classnames.default)(className, children.props.className, collapseStyles[state], computedDimension === 'width' && 'width') })); }); }); // @ts-ignore // @ts-ignore Collapse.defaultProps = defaultProps; var _default = Collapse; exports.default = _default; module.exports = exports["default"];