UNPKG

@yandex/ui

Version:

Yandex UI components

32 lines (31 loc) 2.4 kB
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; });