UNPKG

@yandex/ui

Version:

Yandex UI components

35 lines (34 loc) 2.62 kB
"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; });