@yandex/ui
Version:
Yandex UI components
35 lines (34 loc) • 2.62 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.withTargetAnchor = void 0;
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importDefault(require("react"));
var core_1 = require("@bem-react/core");
var usePopper_1 = require("../../usePopper");
var useForkRef_1 = require("../../useForkRef");
var index_1 = require("../index");
// Устанавливаем отрицательные координаты для избежания моргания при монтировании попапа.
var initialPosition = { top: -9999, left: -9999, position: 'fixed' };
/**
* Позиционирует попап относительно элемента, который указан в свойстве `anchor`.
* @param {IPopupTargetAnchorProps} props
*/
exports.withTargetAnchor = core_1.withBemMod(index_1.cnPopup(), { target: 'anchor' }, function (Popup) {
var WithTargetAnchor = function (props) {
var anchor = props.anchor, _a = props.direction, direction = _a === void 0 ? index_1.directions : _a, hasTail = props.hasTail, _b = props.mainOffset, mainOffset = _b === void 0 ? hasTail ? 0 : 4 : _b, modifiers = props.modifiers, motionless = props.motionless, secondaryOffset = props.secondaryOffset, style = props.style, tailOffset = props.tailOffset, target = props.target, viewportOffset = props.viewportOffset, _c = props.visible, visible = _c === void 0 ? false : _c, innerRef = props.innerRef, tailRef = props.tailRef, boundary = props.boundary, otherProps = tslib_1.__rest(props, ["anchor", "direction", "hasTail", "mainOffset", "modifiers", "motionless", "secondaryOffset", "style", "tailOffset", "target", "viewportOffset", "visible", "innerRef", "tailRef", "boundary"]);
var _d = usePopper_1.usePopper({
anchorRef: anchor,
children: otherProps.children,
placement: direction,
motionless: motionless,
enabled: visible,
marginThreshold: viewportOffset,
modifiers: modifiers,
offset: [secondaryOffset, mainOffset],
unsafe_tailOffset: tailOffset,
boundary: boundary,
}), setPopupRef = _d.setPopupRef, setArrowRef = _d.setArrowRef;
return (react_1.default.createElement(Popup, tslib_1.__assign({}, otherProps, { hasTail: hasTail, innerRef: useForkRef_1.useForkRef(setPopupRef, innerRef), style: tslib_1.__assign(tslib_1.__assign({}, initialPosition), style), tailRef: useForkRef_1.useForkRef(setArrowRef, tailRef), unstable_essentialRefs: [anchor], visible: visible })));
};
return WithTargetAnchor;
});