@yandex/ui
Version:
Yandex UI components
32 lines (31 loc) • 2.4 kB
JavaScript
import { __assign, __rest } from "tslib";
import React from 'react';
import { withBemMod } from '@bem-react/core';
import { usePopper } from '../../usePopper';
import { useForkRef } from '../../useForkRef';
import { cnPopup, directions } from '../index';
// Устанавливаем отрицательные координаты для избежания моргания при монтировании попапа.
var initialPosition = { top: -9999, left: -9999, position: 'fixed' };
/**
* Позиционирует попап относительно элемента, который указан в свойстве `anchor`.
* @param {IPopupTargetAnchorProps} props
*/
export var withTargetAnchor = withBemMod(cnPopup(), { target: 'anchor' }, function (Popup) {
var WithTargetAnchor = function (props) {
var anchor = props.anchor, _a = props.direction, direction = _a === void 0 ? 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 = __rest(props, ["anchor", "direction", "hasTail", "mainOffset", "modifiers", "motionless", "secondaryOffset", "style", "tailOffset", "target", "viewportOffset", "visible", "innerRef", "tailRef", "boundary"]);
var _d = 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.createElement(Popup, __assign({}, otherProps, { hasTail: hasTail, innerRef: useForkRef(setPopupRef, innerRef), style: __assign(__assign({}, initialPosition), style), tailRef: useForkRef(setArrowRef, tailRef), unstable_essentialRefs: [anchor], visible: visible })));
};
return WithTargetAnchor;
});