"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.collectScroller = collectScroller; exports.getAlignPopupClassName = getAlignPopupClassName; exports.getMotion = getMotion; exports.getVisibleArea = getVisibleArea; exports.getWin = getWin; exports.toNum = toNum; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); function isPointsEq() { var a1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var a2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var isAlignPoint = arguments.length > 2 ? arguments[2] : undefined; if (isAlignPoint) { return a1[0] === a2[0]; } return a1[0] === a2[0] && a1[1] === a2[1]; } function getAlignPopupClassName(builtinPlacements, prefixCls, align, isAlignPoint) { var points = align.points; var placements = Object.keys(builtinPlacements); for (var i = 0; i < placements.length; i += 1) { var _builtinPlacements$pl; var placement = placements[i]; if (isPointsEq((_builtinPlacements$pl = builtinPlacements[placement]) === null || _builtinPlacements$pl === void 0 ? void 0 : _builtinPlacements$pl.points, points, isAlignPoint)) { return "".concat(prefixCls, "-placement-").concat(placement); } } return ''; } /** @deprecated We should not use this if we can refactor all deps */ function getMotion(prefixCls, motion, animation, transitionName) { if (motion) { return motion; } if (animation) { return { motionName: "".concat(prefixCls, "-").concat(animation) }; } if (transitionName) { return { motionName: transitionName }; } return null; } function getWin(ele) { return ele.ownerDocument.defaultView; } /** * Get all the scrollable parent elements of the element * @param ele The element to be detected * @param areaOnly Only return the parent which will cut visible area */ function collectScroller(ele) { var scrollerList = []; var current = ele === null || ele === void 0 ? void 0 : ele.parentElement; var scrollStyle = ['hidden', 'scroll', 'clip', 'auto']; while (current) { var _getWin$getComputedSt = getWin(current).getComputedStyle(current), overflowX = _getWin$getComputedSt.overflowX, overflowY = _getWin$getComputedSt.overflowY, overflow = _getWin$getComputedSt.overflow; if ([overflowX, overflowY, overflow].some(function (o) { return scrollStyle.includes(o); })) { scrollerList.push(current); } current = current.parentElement; } return scrollerList; } function toNum(num) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; return Number.isNaN(num) ? defaultValue : num; } function getPxValue(val) { return toNum(parseFloat(val), 0); } /** * * * ************************************** * * Border * * * ************************** * * * * * * * * * B * * S * B * * * o * * c * o * * * r * Content * r * r * * * d * * o * d * * * e * * l * e * * * r ******************** l * r * * * * Scroll * * * * ************************** * * * Border * * ************************************** * */ /** * Get visible area of element */ function getVisibleArea(initArea, scrollerList) { var visibleArea = (0, _objectSpread2.default)({}, initArea); (scrollerList || []).forEach(function (ele) { if (ele instanceof HTMLBodyElement || ele instanceof HTMLHtmlElement) { return; } // Skip if static position which will not affect visible area var _getWin$getComputedSt2 = getWin(ele).getComputedStyle(ele), overflow = _getWin$getComputedSt2.overflow, overflowClipMargin = _getWin$getComputedSt2.overflowClipMargin, borderTopWidth = _getWin$getComputedSt2.borderTopWidth, borderBottomWidth = _getWin$getComputedSt2.borderBottomWidth, borderLeftWidth = _getWin$getComputedSt2.borderLeftWidth, borderRightWidth = _getWin$getComputedSt2.borderRightWidth; var eleRect = ele.getBoundingClientRect(); var eleOutHeight = ele.offsetHeight, eleInnerHeight = ele.clientHeight, eleOutWidth = ele.offsetWidth, eleInnerWidth = ele.clientWidth; var borderTopNum = getPxValue(borderTopWidth); var borderBottomNum = getPxValue(borderBottomWidth); var borderLeftNum = getPxValue(borderLeftWidth); var borderRightNum = getPxValue(borderRightWidth); var scaleX = toNum(Math.round(eleRect.width / eleOutWidth * 1000) / 1000); var scaleY = toNum(Math.round(eleRect.height / eleOutHeight * 1000) / 1000); // Original visible area var eleScrollWidth = (eleOutWidth - eleInnerWidth - borderLeftNum - borderRightNum) * scaleX; var eleScrollHeight = (eleOutHeight - eleInnerHeight - borderTopNum - borderBottomNum) * scaleY; // Cut border size var scaledBorderTopWidth = borderTopNum * scaleY; var scaledBorderBottomWidth = borderBottomNum * scaleY; var scaledBorderLeftWidth = borderLeftNum * scaleX; var scaledBorderRightWidth = borderRightNum * scaleX; // Clip margin var clipMarginWidth = 0; var clipMarginHeight = 0; if (overflow === 'clip') { var clipNum = getPxValue(overflowClipMargin); clipMarginWidth = clipNum * scaleX; clipMarginHeight = clipNum * scaleY; } // Region var eleLeft = eleRect.x + scaledBorderLeftWidth - clipMarginWidth; var eleTop = eleRect.y + scaledBorderTopWidth - clipMarginHeight; var eleRight = eleLeft + eleRect.width + 2 * clipMarginWidth - scaledBorderLeftWidth - scaledBorderRightWidth - eleScrollWidth; var eleBottom = eleTop + eleRect.height + 2 * clipMarginHeight - scaledBorderTopWidth - scaledBorderBottomWidth - eleScrollHeight; visibleArea.left = Math.max(visibleArea.left, eleLeft); visibleArea.top = Math.max(visibleArea.top, eleTop); visibleArea.right = Math.min(visibleArea.right, eleRight); visibleArea.bottom = Math.min(visibleArea.bottom, eleBottom); }); return visibleArea; }