@skbkontur/react-ui 6.0.1-cd7d7.0 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/components/Button/Button.js +3 -2
  3. package/components/Button/Button.js.map +1 -1
  4. package/components/Tooltip/Tooltip.js +6 -5
  5. package/components/Tooltip/Tooltip.js.map +1 -1
  6. package/internal/FocusTrap/FocusTrap.d.ts +0 -1
  7. package/internal/FocusTrap/FocusTrap.js +6 -6
  8. package/internal/FocusTrap/FocusTrap.js.map +1 -1
  9. package/internal/Popup/Popup.d.ts +0 -2
  10. package/internal/Popup/Popup.js +13 -41
  11. package/internal/Popup/Popup.js.map +1 -1
  12. package/internal/Popup/PopupHelper.d.ts +2 -4
  13. package/internal/Popup/PopupHelper.js +5 -10
  14. package/internal/Popup/PopupHelper.js.map +1 -1
  15. package/internal/RenderContainer/RenderContainer.d.ts +0 -4
  16. package/internal/RenderContainer/RenderContainer.js +5 -52
  17. package/internal/RenderContainer/RenderContainer.js.map +1 -1
  18. package/internal/RenderLayer/RenderLayer.d.ts +0 -1
  19. package/internal/RenderLayer/RenderLayer.js +7 -5
  20. package/internal/RenderLayer/RenderLayer.js.map +1 -1
  21. package/lib/listenFocusOutside.d.ts +0 -2
  22. package/lib/listenFocusOutside.js +2 -19
  23. package/lib/listenFocusOutside.js.map +1 -1
  24. package/lib/renderEnvironment/RenderEnvironmentContext.d.ts +0 -5
  25. package/lib/renderEnvironment/RenderEnvironmentContext.js +11 -17
  26. package/lib/renderEnvironment/RenderEnvironmentContext.js.map +1 -1
  27. package/lib/theming/Emotion.d.ts +1 -27
  28. package/lib/theming/Emotion.js +5 -20
  29. package/lib/theming/Emotion.js.map +1 -1
  30. package/package.json +1 -1
  31. package/lib/shadowDom/isShadowRoot.d.ts +0 -1
  32. package/lib/shadowDom/isShadowRoot.js +0 -2
  33. package/lib/shadowDom/isShadowRoot.js.map +0 -1
@@ -60,8 +60,6 @@ import { mergeRefs } from '../../lib/mergeRefs.js';
60
60
  import { getVisualStateDataAttributes } from '../CommonWrapper/utils/getVisualStateDataAttributes.js';
61
61
  import { getElementRef } from '../../lib/getElementRef.js';
62
62
  import { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';
63
- import { isShadowRoot } from '../../lib/shadowDom/isShadowRoot.js';
64
- import { PopupConsumer } from '../../lib/theming/Emotion.js';
65
63
  import { PopupPin } from './PopupPin.js';
66
64
  import { PopupHelper } from './PopupHelper.js';
67
65
  import { getStyles } from './Popup.styles.js';
@@ -212,7 +210,6 @@ var Popup = /** @class */ (function (_super) {
212
210
  }
213
211
  };
214
212
  _this.getRelativeShift = function () {
215
- var _a;
216
213
  var absoluteParent = _this.absoluteParent;
217
214
  if (!_this.props.disablePortal || !absoluteParent) {
218
215
  return {
@@ -221,10 +218,9 @@ var Popup = /** @class */ (function (_super) {
221
218
  };
222
219
  }
223
220
  var rect = PopupHelper.getElementAbsoluteRect(absoluteParent);
224
- var deltaParentPosition = _this.getRelativePos(_this.emotion.sheet.container.getRootNode(), (_a = _this.getOffsetParent) === null || _a === void 0 ? void 0 : _a.call(_this, _this.emotion.sheet.container.getRootNode()));
225
221
  return {
226
- top: -(rect.top - deltaParentPosition.top),
227
- left: -(rect.left - deltaParentPosition.left),
222
+ top: -rect.top,
223
+ left: -rect.left,
228
224
  };
229
225
  };
230
226
  return _this;
@@ -284,13 +280,9 @@ var Popup = /** @class */ (function (_super) {
284
280
  Popup.prototype.render = function () {
285
281
  var _this = this;
286
282
  this.styles = getStyles(this.emotion);
287
- return (React.createElement(PopupConsumer, null, function (_a) {
288
- var getOffsetParent = _a.getOffsetParent;
289
- return (React.createElement(ThemeContext.Consumer, null, function (theme) {
290
- _this.theme = theme;
291
- _this.getOffsetParent = getOffsetParent;
292
- return _this.renderMain();
293
- }));
283
+ return (React.createElement(ThemeContext.Consumer, null, function (theme) {
284
+ _this.theme = theme;
285
+ return _this.renderMain();
294
286
  }));
295
287
  };
296
288
  Popup.prototype.renderMobile = function () {
@@ -430,26 +422,7 @@ var Popup = /** @class */ (function (_super) {
430
422
  }
431
423
  return __spreadArray(__spreadArray([], positions.slice(index), true), positions.slice(0, index), true);
432
424
  };
433
- Popup.prototype.getRelativePos = function (root, offsetParent) {
434
- var relativePos = {
435
- top: 0,
436
- left: 0,
437
- };
438
- if (isShadowRoot(root) && this.globalObject.document) {
439
- var childPos = PopupHelper.convertRectToAbsolute(root.host.getBoundingClientRect(), this.globalObject);
440
- relativePos.top = childPos.top;
441
- relativePos.left = childPos.left;
442
- if (offsetParent === null || offsetParent === void 0 ? void 0 : offsetParent.scrollTop) {
443
- relativePos.top += offsetParent.scrollTop;
444
- }
445
- if (offsetParent === null || offsetParent === void 0 ? void 0 : offsetParent.scrollLeft) {
446
- relativePos.left += offsetParent.scrollLeft;
447
- }
448
- }
449
- return relativePos;
450
- };
451
425
  Popup.prototype.getLocation = function (popupElement, location) {
452
- var _a;
453
426
  var tryBestFallbackPosition = this.getProps().tryBestFallbackPosition;
454
427
  var positions = this.getOrderedPositions();
455
428
  var anchorElement = this.anchorElement;
@@ -457,27 +430,26 @@ var Popup = /** @class */ (function (_super) {
457
430
  if (!(anchorElement && isInstanceOf(anchorElement, this.globalObject.Element))) {
458
431
  return location;
459
432
  }
460
- var deltaParentPosition = this.getRelativePos(this.emotion.sheet.container.getRootNode(), (_a = this.getOffsetParent) === null || _a === void 0 ? void 0 : _a.call(this, this.emotion.sheet.container.getRootNode()));
461
- var anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement, deltaParentPosition);
462
- var popupRect = PopupHelper.getElementAbsoluteRect(popupElement, deltaParentPosition);
463
- var reusedLocation = this.tryReuseCurrentLocation(location, positions, anchorRect, popupRect, deltaParentPosition);
433
+ var anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);
434
+ var popupRect = PopupHelper.getElementAbsoluteRect(popupElement);
435
+ var reusedLocation = this.tryReuseCurrentLocation(location, positions, anchorRect, popupRect);
464
436
  if (reusedLocation) {
465
437
  return reusedLocation;
466
438
  }
467
- var fullyVisibleLocation = this.tryGetFirstFullyVisibleLocation(positions, anchorRect, popupRect, deltaParentPosition);
439
+ var fullyVisibleLocation = this.tryGetFirstFullyVisibleLocation(positions, anchorRect, popupRect);
468
440
  if (fullyVisibleLocation) {
469
441
  return fullyVisibleLocation;
470
442
  }
471
443
  return this.getFallbackLocation(positions, anchorRect, popupRect, Boolean(tryBestFallbackPosition));
472
444
  };
473
- Popup.prototype.tryReuseCurrentLocation = function (location, positions, anchorRect, popupRect, deltaParentPosition) {
445
+ Popup.prototype.tryReuseCurrentLocation = function (location, positions, anchorRect, popupRect) {
474
446
  var tryPreserveFirstRenderedPosition = this.getProps().tryPreserveFirstRenderedPosition;
475
447
  if (!(location && location !== DUMMY_LOCATION && location.position)) {
476
448
  return null;
477
449
  }
478
450
  var position = location.position;
479
451
  var coordinates = this.getCoordinates(anchorRect, popupRect, position);
480
- var isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect, this.globalObject, deltaParentPosition);
452
+ var isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect, this.globalObject);
481
453
  var canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates, this.globalObject);
482
454
  var shouldReuseCurrentLocation =
483
455
  // если нужно сохранить первоначальную позицию и Попап целиком
@@ -491,11 +463,11 @@ var Popup = /** @class */ (function (_super) {
491
463
  }
492
464
  return { coordinates: coordinates, position: position, isFullyVisible: true };
493
465
  };
494
- Popup.prototype.tryGetFirstFullyVisibleLocation = function (positions, anchorRect, popupRect, deltaParentPosition) {
466
+ Popup.prototype.tryGetFirstFullyVisibleLocation = function (positions, anchorRect, popupRect) {
495
467
  for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {
496
468
  var position = positions_1[_i];
497
469
  var coordinates = this.getCoordinates(anchorRect, popupRect, position);
498
- if (PopupHelper.isFullyVisible(coordinates, popupRect, this.globalObject, deltaParentPosition)) {
470
+ if (PopupHelper.isFullyVisible(coordinates, popupRect, this.globalObject)) {
499
471
  return { coordinates: coordinates, position: position, isFullyVisible: true };
500
472
  }
501
473
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Popup.js","sourceRoot":"","sources":["../../../internal/Popup/Popup.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { HTMLAttributes, Ref } from 'react';\nimport React from 'react';\nimport { Transition } from 'react-transition-group';\nimport warning from 'warning';\nimport type { Emotion } from '@emotion/css/create-instance';\n\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { getDOMRect } from '../../lib/dom/getDOMRect.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport type { Priority } from '../ZIndex/index.js';\nimport { ZIndex } from '../ZIndex/index.js';\nimport { RenderContainer } from '../RenderContainer/index.js';\nimport type { FocusEventType, MouseEventType } from '../../typings/event-types.js';\nimport { getRandomID, isFunction, isNonNullable, isNullable, isRefableElement } from '../../lib/utils.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport type { CommonProps } from '../CommonWrapper/index.js';\nimport { CommonWrapper } from '../CommonWrapper/index.js';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator.js';\nimport { MobilePopup } from '../MobilePopup/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { getRootNode, rootNode } from '../../lib/rootNode/index.js';\nimport { isInstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { isInstanceOf } from '../../lib/isInstanceOf.js';\nimport { mergeRefs } from '../../lib/mergeRefs.js';\nimport { getVisualStateDataAttributes } from '../CommonWrapper/utils/getVisualStateDataAttributes.js';\nimport { getElementRef } from '../../lib/getElementRef.js';\nimport type { GetOffsetParent } from '../../lib/renderEnvironment/index.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport { isShadowRoot } from '../../lib/shadowDom/isShadowRoot.js';\nimport { PopupConsumer } from '../../lib/theming/Emotion.js';\n\nimport { PopupPin } from './PopupPin.js';\nimport type { Offset, PositionObject, Rect } from './PopupHelper.js';\nimport { PopupHelper } from './PopupHelper.js';\nimport { getStyles } from './Popup.styles.js';\n\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nexport const PopupNonPinnablePositions = ['middle center', 'middle left', 'middle right'];\n\nexport const PopupPinnablePositions = [\n 'top center',\n 'top left',\n 'top right',\n 'bottom center',\n 'bottom left',\n 'bottom right',\n 'left middle',\n 'left top',\n 'left bottom',\n 'right middle',\n 'right top',\n 'right bottom',\n];\n\nexport const PopupPositions = [...PopupPinnablePositions, ...PopupNonPinnablePositions] as const;\n\nexport const DefaultPosition = PopupPositions[0];\n\nexport type PopupPositionsType = (typeof PopupPositions)[number];\nexport type PopupPinnablePositionsType = (typeof PopupPinnablePositions)[number];\nexport type ShortPopupPositionsType = 'top' | 'bottom' | 'left' | 'right';\n\nexport const DUMMY_LOCATION: PopupLocation = {\n position: DefaultPosition,\n coordinates: {\n top: -9999,\n left: -9999,\n },\n isFullyVisible: false,\n};\n\nexport interface PopupHandlerProps {\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n onClick?: (event: MouseEventType) => void;\n onFocus?: (event: FocusEventType) => void;\n onBlur?: (event: FocusEventType) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface PopupProps\n extends Omit<CommonProps, 'children'>,\n PopupHandlerProps,\n Pick<HTMLAttributes<HTMLDivElement>, 'id'> {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: React.ReactNode | Element;\n /**\n * Фон попапа и пина\n */\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n /**\n * Показывать ли пин\n */\n hasPin?: boolean;\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow?: boolean;\n disableAnimations?: boolean;\n /**\n * Отступ попапа от элемента\n */\n margin?: number;\n maxWidth?: number | string;\n /**\n * Показан или скрыт попап\n */\n opened: boolean;\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset?: number;\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize?: number;\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset?: number;\n priority?: Priority;\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions?: Readonly<PopupPositionsType[]>;\n /**\n * Приоритетная позиция попапа\n */\n pos?: PopupPositionsType | ShortPopupPositionsType;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover?: boolean;\n width?: React.CSSProperties['width'];\n minWidth?: React.CSSProperties['minWidth'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в том числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n /**\n * Включает поиск наиболее подходящей позиции попапа, если ни одна заданная позиция попапа не влезает во вьюпорт.\n * Выбирается позиция с наибольшей видимой площадью.\n */\n tryBestFallbackPosition?: boolean;\n withoutMobile?: boolean;\n /** @ignore */\n disablePortal?: boolean;\n mobileOnCloseRequest?: () => void;\n /**\n * Возвращает текущую позицию попапа\n */\n onPositionChange?: (pos: PopupPositionsType, isFullyVisible: boolean) => void;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPositionsType;\n isFullyVisible: boolean;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\ninterface FallbackCandidateEvaluation {\n position: PopupPositionsType;\n coordinates: Offset;\n overflowCount: number;\n visibleArea: number;\n isFullyVisible: boolean;\n isAreaEligible: boolean;\n}\n\nexport const PopupDataTids = {\n root: 'Popup__root',\n content: 'PopupContent',\n contentInner: 'PopupContentInner',\n popupPin: 'PopupPin__root',\n} as const;\n\nexport const PopupIds = {\n root: PopupDataTids.root,\n};\n\ntype DefaultProps = Required<\n Pick<\n PopupProps,\n | 'popupOffset'\n | 'hasPin'\n | 'hasShadow'\n | 'disablePortal'\n | 'disableAnimations'\n | 'useWrapper'\n | 'ignoreHover'\n | 'width'\n | 'priority'\n >\n>;\n\n@withRenderEnvironment\n@responsiveLayout\n@rootNode\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n public static displayName = 'Popup';\n\n public static defaultProps: DefaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n disablePortal: false,\n width: 'auto',\n priority: ZIndex.priorities.Popup,\n };\n\n private getProps = createPropsGetter(Popup.defaultProps);\n\n // see #2873 and #2895\n public static readonly defaultRootNode = null;\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupContentElement: Nullable<Element>;\n private isMobileLayout!: boolean;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private refForTransition = React.createRef<HTMLDivElement>();\n private hasAnchorElementListeners = false;\n private rootId = PopupIds.root + getRandomID();\n private getOffsetParent!: GetOffsetParent | undefined;\n\n public anchorElement: Nullable<Element> = null;\n private absoluteParent: Nullable<HTMLDivElement> = null;\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent, this.globalObject);\n\n if (!this.hasAnchorElementListeners) {\n this.addEventListeners(this.anchorElement);\n }\n }\n\n public static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (props.opened) {\n if (!state.location) {\n return { location: DUMMY_LOCATION };\n }\n } else if (state.location) {\n return { location: DUMMY_LOCATION };\n }\n return state;\n }\n\n public componentDidUpdate(prevProps: PopupProps, prevState: PopupState) {\n const hadNoLocation = prevState.location === DUMMY_LOCATION;\n const hasLocation = this.state.location !== DUMMY_LOCATION;\n const wasClosed = prevProps.opened && !this.props.opened;\n\n if (this.isMobileLayout && prevState.location === null && this.state.location === null) {\n this.setState({ location: DUMMY_LOCATION });\n }\n\n if (this.props.opened && hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (wasClosed && !hasLocation && this.props.onClose) {\n this.props.onClose();\n }\n if (this.props.opened) {\n this.delayUpdateLocation();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n if (this.hasAnchorElementListeners) {\n this.removeEventListeners(this.anchorElement);\n }\n if (this.layoutEventsToken) {\n this.layoutEventsToken.remove();\n this.layoutEventsToken = null;\n }\n if (this.state.location && this.props.onClose) {\n this.props.onClose();\n }\n }\n\n public render() {\n this.styles = getStyles(this.emotion);\n\n return (\n <PopupConsumer>\n {({ getOffsetParent }) => (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n this.getOffsetParent = getOffsetParent;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n )}\n </PopupConsumer>\n );\n }\n\n private renderMobile() {\n const { opened } = this.props;\n const children = this.renderChildren();\n\n return children ? (\n <CommonWrapper rootNodeRef={this.setRootNode}>\n <MobilePopup opened={opened} withoutRenderContainer onCloseRequest={this.props.mobileOnCloseRequest}>\n {this.content(children)}\n </MobilePopup>\n </CommonWrapper>\n ) : null;\n }\n\n private renderMain() {\n const { anchorElement } = this.props;\n const useWrapper = this.getProps().useWrapper;\n\n let anchor: Nullable<React.ReactNode> = null;\n if (isInstanceOf(anchorElement, this.globalObject.Element)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n anchor = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n anchor = <span>{anchorElement}</span>;\n }\n\n const anchorWithRef =\n anchor && React.isValidElement(anchor) && isRefableElement(anchor)\n ? React.cloneElement(anchor, {\n ref: mergeRefs(getElementRef(anchor), this.updateAnchorElement),\n } as { ref: (instance: Nullable<React.ReactInstance>) => void })\n : null;\n // we need to get anchor's DOM node\n // so we either set our own ref on it via cloning\n // or relay on findDOMNode (inside getRootNode)\n // which should be called within updateAnchorElement\n // in the case when the anchor is not refable\n\n const canGetAnchorNode = !!anchorWithRef || isInstanceOf(anchorElement, this.globalObject.Element);\n const renderRef = canGetAnchorNode ? null : this.updateAnchorElement;\n const renderAnchor = anchorWithRef || anchor;\n\n return this.props.disablePortal\n ? this.renderWithoutPortal(renderAnchor, renderRef)\n : this.renderInPortal(renderAnchor, renderRef);\n }\n\n private renderInPortal = (anchor: React.ReactNode, ref: null | Ref<RenderContainer>) => {\n const { location } = this.state;\n\n return (\n <RenderContainer anchor={anchor} ref={ref}>\n {this.isMobileLayout && !this.props.withoutMobile\n ? this.renderMobile()\n : location && this.renderContent(location)}\n </RenderContainer>\n );\n };\n\n private renderWithoutPortal = (anchor: React.ReactNode, ref: null | Ref<EmptyWrapper>) => {\n const { location } = this.state;\n\n return (\n <EmptyWrapper ref={ref}>\n {anchor}\n {location && (\n <div ref={this.updateAbsoluteElement} className={this.styles.absoluteParent()}>\n {this.renderContent(location)}\n </div>\n )}\n </EmptyWrapper>\n );\n };\n\n private updateAnchorElement = (instance: Nullable<React.ReactInstance>) => {\n const childDomNode = isInstanceWithAnchorElement(instance) ? instance.getAnchorElement() : getRootNode(instance);\n const anchorElement = this.anchorElement;\n\n if (childDomNode !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = childDomNode;\n this.addEventListeners(childDomNode);\n }\n };\n\n private updateAbsoluteElement = (instance: HTMLDivElement) => {\n this.absoluteParent = instance;\n };\n\n private addEventListeners(element: Nullable<Element>) {\n if (element && isInstanceOf(element, this.globalObject.Element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.addEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.addEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n\n this.hasAnchorElementListeners = true;\n }\n }\n\n private removeEventListeners(element: Nullable<Element>) {\n if (element && isInstanceOf(element, this.globalObject.Element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n\n this.hasAnchorElementListeners = false;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(event);\n }\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(event);\n }\n };\n\n private handleClick = (event: MouseEventType) => {\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private handleFocus = (event: FocusEventType) => {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: FocusEventType) => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private calculateWidth = (width: PopupProps['width']) => {\n if (typeof width === 'string' && width.includes('%')) {\n const anchorWidth = getDOMRect(this.anchorElement).width;\n\n return width.replace(/(\\d)+%/g, (percent: string) => `${(anchorWidth * parseFloat(percent)) / 100}px`);\n }\n return width;\n };\n\n private content = (children: React.ReactNode) => {\n const { backgroundColor } = this.props;\n const { width, minWidth } = this.getProps();\n\n return (\n <div\n className={this.styles.content(this.theme)}\n data-tid={PopupDataTids.content}\n ref={mergeRefs(this.refForTransition, this.refPopupContentElement)}\n >\n <div\n className={this.styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width), minWidth: this.calculateWidth(minWidth) }}\n data-tid={PopupDataTids.contentInner}\n >\n {children}\n </div>\n </div>\n );\n };\n\n private renderContent(location: PopupLocation) {\n const { maxWidth, opened } = this.props;\n const { hasShadow, disableAnimations, ignoreHover } = this.getProps();\n const children = this.renderChildren();\n\n const relativeShift = this.getRelativeShift();\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = {\n maxWidth,\n top: location.coordinates.top + relativeShift.top,\n left: location.coordinates.left + relativeShift.left,\n };\n\n return (\n <Transition\n timeout={TRANSITION_TIMEOUT}\n appear={!disableAnimations}\n in={Boolean(opened && children)}\n mountOnEnter\n unmountOnExit\n enter={!disableAnimations}\n exit={!disableAnimations}\n onExited={this.resetLocation}\n nodeRef={this.refForTransition}\n >\n {(state: string) => (\n <CommonWrapper {...this.props} rootNodeRef={this.setRootNode} {...this.prepareDataVisualState()}>\n <ZIndex\n id={this.props.id ?? this.rootId}\n data-tid={PopupDataTids.root}\n priority={this.props.priority}\n className={this.cx({\n [this.styles.popup(this.theme)]: true,\n [this.styles.shadow(this.theme)]: hasShadow,\n [this.styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [this.styles[`transition-enter-${direction}` as keyof typeof this.styles](this.theme)]: true,\n [this.styles.transitionEnter()]: state === 'entering',\n [this.styles.transitionEnterActive()]: state === 'entered',\n [this.styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n {this.content(children)}\n {(!this.isMobileLayout || this.props.withoutMobile) && this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private prepareDataVisualState = () => {\n const position = this.state.location?.position;\n if (position) {\n const attrName = `position-` + position.replace(' ', '-');\n return getVisualStateDataAttributes({ [attrName]: true });\n }\n return {};\n };\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.state.location !== null && this.setState({ location: null });\n };\n\n private renderChildren() {\n return isFunction(this.props.children) ? this.props.children() : this.props.children;\n }\n\n private refPopupContentElement = (element: HTMLDivElement) => {\n this.lastPopupContentElement = element;\n };\n\n private renderPin(positionName: string): React.ReactNode {\n const { pinSize, backgroundColor } = this.props;\n const { hasPin } = this.getProps();\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n hasPin &&\n !PopupNonPinnablePositions.includes(positionName) && (\n <PopupPin\n popupElement={this.lastPopupContentElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n />\n )\n );\n }\n\n private handleLayoutEvent = () => {\n if (!this.state.location) {\n return;\n }\n this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = this.globalObject.requestAnimationFrame?.(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n this.globalObject.cancelAnimationFrame?.(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupContentElement = this.lastPopupContentElement;\n\n if (!popupContentElement) {\n return;\n }\n\n const location = this.getLocation(popupContentElement, this.state.location);\n if (location) {\n this.props.onPositionChange?.(location.position, location.isFullyVisible);\n }\n\n if (!this.locationEquals(this.state.location, location)) {\n this.setState({ location });\n }\n };\n\n private locationEquals(x: Nullable<PopupLocation>, y: Nullable<PopupLocation>) {\n if (x === y) {\n return true;\n }\n\n if (isNullable(x) || isNullable(y)) {\n return false;\n }\n\n return (\n x.coordinates.left === y.coordinates.left && x.coordinates.top === y.coordinates.top && x.position === y.position\n );\n }\n\n private getOrderedPositions() {\n const positions = this.props.positions ? this.props.positions : PopupPinnablePositions;\n let pos_ = '';\n if (this.props.pos) {\n pos_ = this.props.pos;\n } else {\n pos_ = positions[0];\n }\n const index = positions.findIndex((position) => position.startsWith(pos_));\n if (index === -1) {\n warning(false, 'Unexpected position ' + pos_ + ' passed to Popup. Expected one of: ' + positions.join(', '));\n return positions;\n }\n return [...positions.slice(index), ...positions.slice(0, index)];\n }\n\n private getRelativePos(root: unknown, offsetParent?: HTMLElement | null): { top: number; left: number } {\n const relativePos: { top: number; left: number } = {\n top: 0,\n left: 0,\n };\n\n if (isShadowRoot(root) && this.globalObject.document) {\n const childPos = PopupHelper.convertRectToAbsolute(root.host.getBoundingClientRect(), this.globalObject);\n relativePos.top = childPos.top;\n relativePos.left = childPos.left;\n\n if (offsetParent?.scrollTop) {\n relativePos.top += offsetParent.scrollTop;\n }\n\n if (offsetParent?.scrollLeft) {\n relativePos.left += offsetParent.scrollLeft;\n }\n }\n return relativePos;\n }\n\n private getLocation(popupElement: Element, location?: Nullable<PopupLocation>): Nullable<PopupLocation> {\n const { tryBestFallbackPosition } = this.getProps();\n const positions = this.getOrderedPositions();\n\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isInstanceOf(anchorElement, this.globalObject.Element),\n 'Anchor element is not defined or not instance of Element',\n );\n\n if (!(anchorElement && isInstanceOf(anchorElement, this.globalObject.Element))) {\n return location;\n }\n\n const deltaParentPosition = this.getRelativePos(\n this.emotion.sheet.container.getRootNode(),\n this.getOffsetParent?.(this.emotion.sheet.container.getRootNode()),\n );\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement, deltaParentPosition);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement, deltaParentPosition);\n\n const reusedLocation = this.tryReuseCurrentLocation(\n location,\n positions,\n anchorRect,\n popupRect,\n deltaParentPosition,\n );\n if (reusedLocation) {\n return reusedLocation;\n }\n\n const fullyVisibleLocation = this.tryGetFirstFullyVisibleLocation(\n positions,\n anchorRect,\n popupRect,\n deltaParentPosition,\n );\n if (fullyVisibleLocation) {\n return fullyVisibleLocation;\n }\n\n return this.getFallbackLocation(positions, anchorRect, popupRect, Boolean(tryBestFallbackPosition));\n }\n\n private tryReuseCurrentLocation(\n location: Nullable<PopupLocation> | undefined,\n positions: Readonly<PopupPositionsType[]>,\n anchorRect: Rect,\n popupRect: Rect,\n deltaParentPosition: Offset,\n ): Nullable<PopupLocation> {\n const { tryPreserveFirstRenderedPosition } = this.getProps();\n\n if (!(location && location !== DUMMY_LOCATION && location.position)) {\n return null;\n }\n\n const position = location.position;\n const coordinates = this.getCoordinates(anchorRect, popupRect, position);\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect, this.globalObject, deltaParentPosition);\n const canBecomeVisible =\n !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates, this.globalObject);\n\n const shouldReuseCurrentLocation =\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0]);\n\n if (!shouldReuseCurrentLocation) {\n return null;\n }\n\n return { coordinates, position, isFullyVisible: true };\n }\n\n private tryGetFirstFullyVisibleLocation(\n positions: Readonly<PopupPositionsType[]>,\n anchorRect: Rect,\n popupRect: Rect,\n deltaParentPosition: Offset,\n ): Nullable<PopupLocation> {\n for (const position of positions) {\n const coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect, this.globalObject, deltaParentPosition)) {\n return { coordinates, position, isFullyVisible: true };\n }\n }\n\n return null;\n }\n\n private getFallbackLocation(\n positions: Readonly<PopupPositionsType[]>,\n anchorRect: Rect,\n popupRect: Rect,\n tryBestFallbackPosition: boolean,\n ): PopupLocation {\n const position = tryBestFallbackPosition\n ? this.pickBestFallbackPosition(positions, anchorRect, popupRect)\n : positions[0];\n const coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n return {\n coordinates,\n position,\n isFullyVisible: PopupHelper.isFullyVisible(coordinates, popupRect, this.globalObject),\n };\n }\n\n private pickBestFallbackPosition(\n positions: Readonly<PopupPositionsType[]>,\n anchorRect: Rect,\n popupRect: Rect,\n ): PopupPositionsType {\n const defaultPosition = positions[0];\n const coords = this.getCoordinates(anchorRect, popupRect, defaultPosition);\n const overflow = PopupHelper.getOverflowEdges(coords, popupRect, this.globalObject);\n const preferredDirection = PopupHelper.getPreferredDirection(overflow, defaultPosition);\n const preferredAlignOrder =\n overflow.left || overflow.right ? ['right', 'center', 'left'] : ['center', 'left', 'right'];\n const candidates = PopupHelper.getOrderedFallbackCandidates(\n positions,\n overflow,\n preferredDirection,\n preferredAlignOrder,\n PopupPinnablePositions,\n );\n const positionsSet = new Set(positions);\n const viewport = PopupHelper.getViewportAbsoluteRect(this.globalObject);\n const evaluatedCandidates = candidates.map((position) =>\n this.evaluateFallbackCandidate(position, anchorRect, popupRect, viewport),\n );\n const bestAreaCandidate = this.pickBestAreaCandidate(evaluatedCandidates, positionsSet);\n const bestOverflowCandidate = this.pickBestOverflowCandidate(evaluatedCandidates, positionsSet);\n\n // Если есть хотя бы одна позиция с ненулевой видимой площадью,\n // выбираем её (с приоритетом полностью видимых вариантов).\n // Иначе — используем старую эвристику по количеству переполненных сторон.\n return bestAreaCandidate && bestAreaCandidate.visibleArea > 0\n ? bestAreaCandidate.position\n : bestOverflowCandidate.position;\n }\n\n private evaluateFallbackCandidate(\n position: PopupPositionsType,\n anchorRect: Rect,\n popupRect: Rect,\n viewport: Rect,\n ): FallbackCandidateEvaluation {\n const coordinates = this.getCoordinates(anchorRect, popupRect, position);\n const popupAbsolute = {\n top: coordinates.top,\n left: coordinates.left,\n width: popupRect.width,\n height: popupRect.height,\n };\n const overlapWidth =\n Math.min(popupAbsolute.left + popupAbsolute.width, viewport.left + viewport.width) -\n Math.max(popupAbsolute.left, viewport.left);\n const overlapHeight =\n Math.min(popupAbsolute.top + popupAbsolute.height, viewport.top + viewport.height) -\n Math.max(popupAbsolute.top, viewport.top);\n const visibleWidth = Math.max(0, overlapWidth);\n const visibleHeight = Math.max(0, overlapHeight);\n const overflow = PopupHelper.getOverflowEdges(coordinates, popupRect, this.globalObject);\n const isFullyVisible = visibleWidth === popupAbsolute.width && visibleHeight === popupAbsolute.height;\n const isAreaEligible = PopupHelper.getPositionObject(position).direction !== 'left' || isFullyVisible;\n\n return {\n position,\n coordinates,\n overflowCount: PopupHelper.getOverflowCount(overflow),\n visibleArea: visibleWidth * visibleHeight,\n isFullyVisible,\n isAreaEligible,\n };\n }\n\n private pickBestAreaCandidate(\n candidates: Readonly<FallbackCandidateEvaluation[]>,\n positionsSet: ReadonlySet<PopupPositionsType>,\n ): Nullable<FallbackCandidateEvaluation> {\n let bestCandidate: Nullable<FallbackCandidateEvaluation> = null;\n\n for (const candidate of candidates) {\n if (!candidate.isAreaEligible || candidate.visibleArea <= 0) {\n continue;\n }\n\n const isBetterArea =\n !bestCandidate ||\n // предпочитаем любые полностью видимые позиции\n (candidate.isFullyVisible && !bestCandidate.isFullyVisible) ||\n // среди одинаковых по полноте — большую видимую площадь\n (candidate.isFullyVisible === bestCandidate.isFullyVisible &&\n candidate.visibleArea > bestCandidate.visibleArea) ||\n // при равной площади — ту, что указана в props.positions\n (candidate.visibleArea === bestCandidate.visibleArea &&\n positionsSet.has(candidate.position) &&\n !positionsSet.has(bestCandidate.position));\n\n if (isBetterArea) {\n bestCandidate = candidate;\n }\n }\n\n return bestCandidate;\n }\n\n private pickBestOverflowCandidate(\n candidates: Readonly<FallbackCandidateEvaluation[]>,\n positionsSet: ReadonlySet<PopupPositionsType>,\n ): FallbackCandidateEvaluation {\n let bestCandidate = candidates[0];\n\n for (const candidate of candidates) {\n const isBetterOverflow =\n candidate.overflowCount < bestCandidate.overflowCount ||\n (candidate.overflowCount === bestCandidate.overflowCount &&\n positionsSet.has(candidate.position) &&\n !positionsSet.has(bestCandidate.position));\n\n if (isBetterOverflow) {\n bestCandidate = candidate;\n }\n }\n\n return bestCandidate;\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.getProps().hasPin || /center|middle/.test(position.align)) {\n return 0;\n }\n\n const anchorSize = /top|bottom/.test(position.direction) ? anchorRect.width : anchorRect.height;\n\n const { pinSize } = this.props;\n\n return Math.max(\n 0,\n this.getPinOffset(position.align) + (pinSize || parseInt(this.theme.popupPinSize)) - anchorSize / 2,\n );\n }\n\n private getRelativeShift = () => {\n const { absoluteParent } = this;\n\n if (!this.props.disablePortal || !absoluteParent) {\n return {\n top: 0,\n left: 0,\n };\n }\n\n const rect = PopupHelper.getElementAbsoluteRect(absoluteParent);\n const deltaParentPosition = this.getRelativePos(\n this.emotion.sheet.container.getRootNode(),\n this.getOffsetParent?.(this.emotion.sheet.container.getRootNode()),\n );\n\n return {\n top: -(rect.top - deltaParentPosition.top),\n left: -(rect.left - deltaParentPosition.left),\n };\n };\n\n private getCoordinates(anchorRect: Rect, popupRect: Rect, positionName: string) {\n const { margin: marginFromProps } = this.props;\n const margin =\n isNonNullable(marginFromProps) && !isNaN(marginFromProps)\n ? marginFromProps\n : parseInt(this.theme.popupMargin) || 0;\n const position = PopupHelper.getPositionObject(positionName);\n const popupOffset = this.getProps().popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n const defaultCoordinates = {\n top: anchorRect.top - popupRect.height - margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n switch (position.direction) {\n case 'top':\n return defaultCoordinates;\n\n case 'middle':\n return {\n top: anchorRect.top + anchorRect.height / 2 - popupRect.height / 2,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'bottom':\n return {\n top: anchorRect.top + anchorRect.height + margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'left':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left - popupRect.width - margin,\n };\n case 'right':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left + anchorRect.width + margin,\n };\n default:\n warning(\n false,\n `Unexpected align '${position.direction}'. Must be one of - 'top', 'bottom', 'left', 'right', 'center', 'middle'. Returning default value.`,\n );\n return defaultCoordinates;\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n const defaultPinOffset = pinOffset || parseInt(this.theme.popupPinOffsetY);\n\n switch (align) {\n case 'top':\n case 'bottom':\n return defaultPinOffset;\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n warning(\n false,\n `Unexpected align '${align}'. Must be one of - 'top', 'bottom', 'left', 'right', 'center', 'middle'. Returning default value.`,\n );\n return defaultPinOffset;\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n const defaultHorizontalPosition = anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return defaultHorizontalPosition;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n warning(\n false,\n `Unexpected align '${align}'. Must be one of - 'left', 'center', 'right'. Returning default value.`,\n );\n return defaultHorizontalPosition;\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n const defaultVerticalPosition = anchorRect.top - popupOffset;\n\n switch (align) {\n case 'top':\n return defaultVerticalPosition;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n warning(\n false,\n `Unexpected align '${align}'. Must be one of - 'top', 'middle', 'bottom'. Returning default value.`,\n );\n return defaultVerticalPosition;\n }\n }\n}\n\n// Нужно, чтобы получать по рефу dom-элемент, в который зарендерится anchor\ntype EmptyWrapperProps = Readonly<{\n children: React.ReactNode;\n}>;\n\nclass EmptyWrapper extends React.Component<EmptyWrapperProps> {\n public render() {\n return this.props.children;\n }\n}\n"]}
1
+ {"version":3,"file":"Popup.js","sourceRoot":"","sources":["../../../internal/Popup/Popup.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { HTMLAttributes, Ref } from 'react';\nimport React from 'react';\nimport { Transition } from 'react-transition-group';\nimport warning from 'warning';\nimport type { Emotion } from '@emotion/css/create-instance';\n\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { getDOMRect } from '../../lib/dom/getDOMRect.js';\nimport type { Nullable } from '../../typings/utility-types.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport type { Priority } from '../ZIndex/index.js';\nimport { ZIndex } from '../ZIndex/index.js';\nimport { RenderContainer } from '../RenderContainer/index.js';\nimport type { FocusEventType, MouseEventType } from '../../typings/event-types.js';\nimport { getRandomID, isFunction, isNonNullable, isNullable, isRefableElement } from '../../lib/utils.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { isTestEnv } from '../../lib/currentEnvironment.js';\nimport type { CommonProps } from '../CommonWrapper/index.js';\nimport { CommonWrapper } from '../CommonWrapper/index.js';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator.js';\nimport { MobilePopup } from '../MobilePopup/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { getRootNode, rootNode } from '../../lib/rootNode/index.js';\nimport { isInstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport { isInstanceOf } from '../../lib/isInstanceOf.js';\nimport { mergeRefs } from '../../lib/mergeRefs.js';\nimport { getVisualStateDataAttributes } from '../CommonWrapper/utils/getVisualStateDataAttributes.js';\nimport { getElementRef } from '../../lib/getElementRef.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\n\nimport { PopupPin } from './PopupPin.js';\nimport type { Offset, PositionObject, Rect } from './PopupHelper.js';\nimport { PopupHelper } from './PopupHelper.js';\nimport { getStyles } from './Popup.styles.js';\n\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nexport const PopupNonPinnablePositions = ['middle center', 'middle left', 'middle right'];\n\nexport const PopupPinnablePositions = [\n 'top center',\n 'top left',\n 'top right',\n 'bottom center',\n 'bottom left',\n 'bottom right',\n 'left middle',\n 'left top',\n 'left bottom',\n 'right middle',\n 'right top',\n 'right bottom',\n];\n\nexport const PopupPositions = [...PopupPinnablePositions, ...PopupNonPinnablePositions] as const;\n\nexport const DefaultPosition = PopupPositions[0];\n\nexport type PopupPositionsType = (typeof PopupPositions)[number];\nexport type PopupPinnablePositionsType = (typeof PopupPinnablePositions)[number];\nexport type ShortPopupPositionsType = 'top' | 'bottom' | 'left' | 'right';\n\nexport const DUMMY_LOCATION: PopupLocation = {\n position: DefaultPosition,\n coordinates: {\n top: -9999,\n left: -9999,\n },\n isFullyVisible: false,\n};\n\nexport interface PopupHandlerProps {\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n onClick?: (event: MouseEventType) => void;\n onFocus?: (event: FocusEventType) => void;\n onBlur?: (event: FocusEventType) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface PopupProps\n extends Omit<CommonProps, 'children'>,\n PopupHandlerProps,\n Pick<HTMLAttributes<HTMLDivElement>, 'id'> {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: React.ReactNode | Element;\n /**\n * Фон попапа и пина\n */\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n /**\n * Показывать ли пин\n */\n hasPin?: boolean;\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow?: boolean;\n disableAnimations?: boolean;\n /**\n * Отступ попапа от элемента\n */\n margin?: number;\n maxWidth?: number | string;\n /**\n * Показан или скрыт попап\n */\n opened: boolean;\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset?: number;\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize?: number;\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset?: number;\n priority?: Priority;\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions?: Readonly<PopupPositionsType[]>;\n /**\n * Приоритетная позиция попапа\n */\n pos?: PopupPositionsType | ShortPopupPositionsType;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover?: boolean;\n width?: React.CSSProperties['width'];\n minWidth?: React.CSSProperties['minWidth'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в том числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n /**\n * Включает поиск наиболее подходящей позиции попапа, если ни одна заданная позиция попапа не влезает во вьюпорт.\n * Выбирается позиция с наибольшей видимой площадью.\n */\n tryBestFallbackPosition?: boolean;\n withoutMobile?: boolean;\n /** @ignore */\n disablePortal?: boolean;\n mobileOnCloseRequest?: () => void;\n /**\n * Возвращает текущую позицию попапа\n */\n onPositionChange?: (pos: PopupPositionsType, isFullyVisible: boolean) => void;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPositionsType;\n isFullyVisible: boolean;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\ninterface FallbackCandidateEvaluation {\n position: PopupPositionsType;\n coordinates: Offset;\n overflowCount: number;\n visibleArea: number;\n isFullyVisible: boolean;\n isAreaEligible: boolean;\n}\n\nexport const PopupDataTids = {\n root: 'Popup__root',\n content: 'PopupContent',\n contentInner: 'PopupContentInner',\n popupPin: 'PopupPin__root',\n} as const;\n\nexport const PopupIds = {\n root: PopupDataTids.root,\n};\n\ntype DefaultProps = Required<\n Pick<\n PopupProps,\n | 'popupOffset'\n | 'hasPin'\n | 'hasShadow'\n | 'disablePortal'\n | 'disableAnimations'\n | 'useWrapper'\n | 'ignoreHover'\n | 'width'\n | 'priority'\n >\n>;\n\n@withRenderEnvironment\n@responsiveLayout\n@rootNode\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n public static displayName = 'Popup';\n\n public static defaultProps: DefaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n disablePortal: false,\n width: 'auto',\n priority: ZIndex.priorities.Popup,\n };\n\n private getProps = createPropsGetter(Popup.defaultProps);\n\n // see #2873 and #2895\n public static readonly defaultRootNode = null;\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupContentElement: Nullable<Element>;\n private isMobileLayout!: boolean;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private refForTransition = React.createRef<HTMLDivElement>();\n private hasAnchorElementListeners = false;\n private rootId = PopupIds.root + getRandomID();\n\n public anchorElement: Nullable<Element> = null;\n private absoluteParent: Nullable<HTMLDivElement> = null;\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent, this.globalObject);\n\n if (!this.hasAnchorElementListeners) {\n this.addEventListeners(this.anchorElement);\n }\n }\n\n public static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (props.opened) {\n if (!state.location) {\n return { location: DUMMY_LOCATION };\n }\n } else if (state.location) {\n return { location: DUMMY_LOCATION };\n }\n return state;\n }\n\n public componentDidUpdate(prevProps: PopupProps, prevState: PopupState) {\n const hadNoLocation = prevState.location === DUMMY_LOCATION;\n const hasLocation = this.state.location !== DUMMY_LOCATION;\n const wasClosed = prevProps.opened && !this.props.opened;\n\n if (this.isMobileLayout && prevState.location === null && this.state.location === null) {\n this.setState({ location: DUMMY_LOCATION });\n }\n\n if (this.props.opened && hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (wasClosed && !hasLocation && this.props.onClose) {\n this.props.onClose();\n }\n if (this.props.opened) {\n this.delayUpdateLocation();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n if (this.hasAnchorElementListeners) {\n this.removeEventListeners(this.anchorElement);\n }\n if (this.layoutEventsToken) {\n this.layoutEventsToken.remove();\n this.layoutEventsToken = null;\n }\n if (this.state.location && this.props.onClose) {\n this.props.onClose();\n }\n }\n\n public render() {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMobile() {\n const { opened } = this.props;\n const children = this.renderChildren();\n\n return children ? (\n <CommonWrapper rootNodeRef={this.setRootNode}>\n <MobilePopup opened={opened} withoutRenderContainer onCloseRequest={this.props.mobileOnCloseRequest}>\n {this.content(children)}\n </MobilePopup>\n </CommonWrapper>\n ) : null;\n }\n\n private renderMain() {\n const { anchorElement } = this.props;\n const useWrapper = this.getProps().useWrapper;\n\n let anchor: Nullable<React.ReactNode> = null;\n if (isInstanceOf(anchorElement, this.globalObject.Element)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n anchor = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n anchor = <span>{anchorElement}</span>;\n }\n\n const anchorWithRef =\n anchor && React.isValidElement(anchor) && isRefableElement(anchor)\n ? React.cloneElement(anchor, {\n ref: mergeRefs(getElementRef(anchor), this.updateAnchorElement),\n } as { ref: (instance: Nullable<React.ReactInstance>) => void })\n : null;\n // we need to get anchor's DOM node\n // so we either set our own ref on it via cloning\n // or relay on findDOMNode (inside getRootNode)\n // which should be called within updateAnchorElement\n // in the case when the anchor is not refable\n\n const canGetAnchorNode = !!anchorWithRef || isInstanceOf(anchorElement, this.globalObject.Element);\n const renderRef = canGetAnchorNode ? null : this.updateAnchorElement;\n const renderAnchor = anchorWithRef || anchor;\n\n return this.props.disablePortal\n ? this.renderWithoutPortal(renderAnchor, renderRef)\n : this.renderInPortal(renderAnchor, renderRef);\n }\n\n private renderInPortal = (anchor: React.ReactNode, ref: null | Ref<RenderContainer>) => {\n const { location } = this.state;\n\n return (\n <RenderContainer anchor={anchor} ref={ref}>\n {this.isMobileLayout && !this.props.withoutMobile\n ? this.renderMobile()\n : location && this.renderContent(location)}\n </RenderContainer>\n );\n };\n\n private renderWithoutPortal = (anchor: React.ReactNode, ref: null | Ref<EmptyWrapper>) => {\n const { location } = this.state;\n\n return (\n <EmptyWrapper ref={ref}>\n {anchor}\n {location && (\n <div ref={this.updateAbsoluteElement} className={this.styles.absoluteParent()}>\n {this.renderContent(location)}\n </div>\n )}\n </EmptyWrapper>\n );\n };\n\n private updateAnchorElement = (instance: Nullable<React.ReactInstance>) => {\n const childDomNode = isInstanceWithAnchorElement(instance) ? instance.getAnchorElement() : getRootNode(instance);\n const anchorElement = this.anchorElement;\n\n if (childDomNode !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = childDomNode;\n this.addEventListeners(childDomNode);\n }\n };\n\n private updateAbsoluteElement = (instance: HTMLDivElement) => {\n this.absoluteParent = instance;\n };\n\n private addEventListeners(element: Nullable<Element>) {\n if (element && isInstanceOf(element, this.globalObject.Element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.addEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.addEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n\n this.hasAnchorElementListeners = true;\n }\n }\n\n private removeEventListeners(element: Nullable<Element>) {\n if (element && isInstanceOf(element, this.globalObject.Element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n\n this.hasAnchorElementListeners = false;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(event);\n }\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(event);\n }\n };\n\n private handleClick = (event: MouseEventType) => {\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private handleFocus = (event: FocusEventType) => {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: FocusEventType) => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private calculateWidth = (width: PopupProps['width']) => {\n if (typeof width === 'string' && width.includes('%')) {\n const anchorWidth = getDOMRect(this.anchorElement).width;\n\n return width.replace(/(\\d)+%/g, (percent: string) => `${(anchorWidth * parseFloat(percent)) / 100}px`);\n }\n return width;\n };\n\n private content = (children: React.ReactNode) => {\n const { backgroundColor } = this.props;\n const { width, minWidth } = this.getProps();\n\n return (\n <div\n className={this.styles.content(this.theme)}\n data-tid={PopupDataTids.content}\n ref={mergeRefs(this.refForTransition, this.refPopupContentElement)}\n >\n <div\n className={this.styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width), minWidth: this.calculateWidth(minWidth) }}\n data-tid={PopupDataTids.contentInner}\n >\n {children}\n </div>\n </div>\n );\n };\n\n private renderContent(location: PopupLocation) {\n const { maxWidth, opened } = this.props;\n const { hasShadow, disableAnimations, ignoreHover } = this.getProps();\n const children = this.renderChildren();\n\n const relativeShift = this.getRelativeShift();\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = {\n maxWidth,\n top: location.coordinates.top + relativeShift.top,\n left: location.coordinates.left + relativeShift.left,\n };\n\n return (\n <Transition\n timeout={TRANSITION_TIMEOUT}\n appear={!disableAnimations}\n in={Boolean(opened && children)}\n mountOnEnter\n unmountOnExit\n enter={!disableAnimations}\n exit={!disableAnimations}\n onExited={this.resetLocation}\n nodeRef={this.refForTransition}\n >\n {(state: string) => (\n <CommonWrapper {...this.props} rootNodeRef={this.setRootNode} {...this.prepareDataVisualState()}>\n <ZIndex\n id={this.props.id ?? this.rootId}\n data-tid={PopupDataTids.root}\n priority={this.props.priority}\n className={this.cx({\n [this.styles.popup(this.theme)]: true,\n [this.styles.shadow(this.theme)]: hasShadow,\n [this.styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [this.styles[`transition-enter-${direction}` as keyof typeof this.styles](this.theme)]: true,\n [this.styles.transitionEnter()]: state === 'entering',\n [this.styles.transitionEnterActive()]: state === 'entered',\n [this.styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n {this.content(children)}\n {(!this.isMobileLayout || this.props.withoutMobile) && this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private prepareDataVisualState = () => {\n const position = this.state.location?.position;\n if (position) {\n const attrName = `position-` + position.replace(' ', '-');\n return getVisualStateDataAttributes({ [attrName]: true });\n }\n return {};\n };\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.state.location !== null && this.setState({ location: null });\n };\n\n private renderChildren() {\n return isFunction(this.props.children) ? this.props.children() : this.props.children;\n }\n\n private refPopupContentElement = (element: HTMLDivElement) => {\n this.lastPopupContentElement = element;\n };\n\n private renderPin(positionName: string): React.ReactNode {\n const { pinSize, backgroundColor } = this.props;\n const { hasPin } = this.getProps();\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n hasPin &&\n !PopupNonPinnablePositions.includes(positionName) && (\n <PopupPin\n popupElement={this.lastPopupContentElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n />\n )\n );\n }\n\n private handleLayoutEvent = () => {\n if (!this.state.location) {\n return;\n }\n this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = this.globalObject.requestAnimationFrame?.(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n this.globalObject.cancelAnimationFrame?.(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupContentElement = this.lastPopupContentElement;\n\n if (!popupContentElement) {\n return;\n }\n\n const location = this.getLocation(popupContentElement, this.state.location);\n if (location) {\n this.props.onPositionChange?.(location.position, location.isFullyVisible);\n }\n\n if (!this.locationEquals(this.state.location, location)) {\n this.setState({ location });\n }\n };\n\n private locationEquals(x: Nullable<PopupLocation>, y: Nullable<PopupLocation>) {\n if (x === y) {\n return true;\n }\n\n if (isNullable(x) || isNullable(y)) {\n return false;\n }\n\n return (\n x.coordinates.left === y.coordinates.left && x.coordinates.top === y.coordinates.top && x.position === y.position\n );\n }\n\n private getOrderedPositions() {\n const positions = this.props.positions ? this.props.positions : PopupPinnablePositions;\n let pos_ = '';\n if (this.props.pos) {\n pos_ = this.props.pos;\n } else {\n pos_ = positions[0];\n }\n const index = positions.findIndex((position) => position.startsWith(pos_));\n if (index === -1) {\n warning(false, 'Unexpected position ' + pos_ + ' passed to Popup. Expected one of: ' + positions.join(', '));\n return positions;\n }\n return [...positions.slice(index), ...positions.slice(0, index)];\n }\n\n private getLocation(popupElement: Element, location?: Nullable<PopupLocation>): Nullable<PopupLocation> {\n const { tryBestFallbackPosition } = this.getProps();\n const positions = this.getOrderedPositions();\n\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isInstanceOf(anchorElement, this.globalObject.Element),\n 'Anchor element is not defined or not instance of Element',\n );\n\n if (!(anchorElement && isInstanceOf(anchorElement, this.globalObject.Element))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n const reusedLocation = this.tryReuseCurrentLocation(location, positions, anchorRect, popupRect);\n if (reusedLocation) {\n return reusedLocation;\n }\n\n const fullyVisibleLocation = this.tryGetFirstFullyVisibleLocation(positions, anchorRect, popupRect);\n if (fullyVisibleLocation) {\n return fullyVisibleLocation;\n }\n\n return this.getFallbackLocation(positions, anchorRect, popupRect, Boolean(tryBestFallbackPosition));\n }\n\n private tryReuseCurrentLocation(\n location: Nullable<PopupLocation> | undefined,\n positions: Readonly<PopupPositionsType[]>,\n anchorRect: Rect,\n popupRect: Rect,\n ): Nullable<PopupLocation> {\n const { tryPreserveFirstRenderedPosition } = this.getProps();\n\n if (!(location && location !== DUMMY_LOCATION && location.position)) {\n return null;\n }\n\n const position = location.position;\n const coordinates = this.getCoordinates(anchorRect, popupRect, position);\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect, this.globalObject);\n const canBecomeVisible =\n !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates, this.globalObject);\n\n const shouldReuseCurrentLocation =\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0]);\n\n if (!shouldReuseCurrentLocation) {\n return null;\n }\n\n return { coordinates, position, isFullyVisible: true };\n }\n\n private tryGetFirstFullyVisibleLocation(\n positions: Readonly<PopupPositionsType[]>,\n anchorRect: Rect,\n popupRect: Rect,\n ): Nullable<PopupLocation> {\n for (const position of positions) {\n const coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect, this.globalObject)) {\n return { coordinates, position, isFullyVisible: true };\n }\n }\n\n return null;\n }\n\n private getFallbackLocation(\n positions: Readonly<PopupPositionsType[]>,\n anchorRect: Rect,\n popupRect: Rect,\n tryBestFallbackPosition: boolean,\n ): PopupLocation {\n const position = tryBestFallbackPosition\n ? this.pickBestFallbackPosition(positions, anchorRect, popupRect)\n : positions[0];\n const coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n return {\n coordinates,\n position,\n isFullyVisible: PopupHelper.isFullyVisible(coordinates, popupRect, this.globalObject),\n };\n }\n\n private pickBestFallbackPosition(\n positions: Readonly<PopupPositionsType[]>,\n anchorRect: Rect,\n popupRect: Rect,\n ): PopupPositionsType {\n const defaultPosition = positions[0];\n const coords = this.getCoordinates(anchorRect, popupRect, defaultPosition);\n const overflow = PopupHelper.getOverflowEdges(coords, popupRect, this.globalObject);\n const preferredDirection = PopupHelper.getPreferredDirection(overflow, defaultPosition);\n const preferredAlignOrder =\n overflow.left || overflow.right ? ['right', 'center', 'left'] : ['center', 'left', 'right'];\n const candidates = PopupHelper.getOrderedFallbackCandidates(\n positions,\n overflow,\n preferredDirection,\n preferredAlignOrder,\n PopupPinnablePositions,\n );\n const positionsSet = new Set(positions);\n const viewport = PopupHelper.getViewportAbsoluteRect(this.globalObject);\n const evaluatedCandidates = candidates.map((position) =>\n this.evaluateFallbackCandidate(position, anchorRect, popupRect, viewport),\n );\n const bestAreaCandidate = this.pickBestAreaCandidate(evaluatedCandidates, positionsSet);\n const bestOverflowCandidate = this.pickBestOverflowCandidate(evaluatedCandidates, positionsSet);\n\n // Если есть хотя бы одна позиция с ненулевой видимой площадью,\n // выбираем её (с приоритетом полностью видимых вариантов).\n // Иначе — используем старую эвристику по количеству переполненных сторон.\n return bestAreaCandidate && bestAreaCandidate.visibleArea > 0\n ? bestAreaCandidate.position\n : bestOverflowCandidate.position;\n }\n\n private evaluateFallbackCandidate(\n position: PopupPositionsType,\n anchorRect: Rect,\n popupRect: Rect,\n viewport: Rect,\n ): FallbackCandidateEvaluation {\n const coordinates = this.getCoordinates(anchorRect, popupRect, position);\n const popupAbsolute = {\n top: coordinates.top,\n left: coordinates.left,\n width: popupRect.width,\n height: popupRect.height,\n };\n const overlapWidth =\n Math.min(popupAbsolute.left + popupAbsolute.width, viewport.left + viewport.width) -\n Math.max(popupAbsolute.left, viewport.left);\n const overlapHeight =\n Math.min(popupAbsolute.top + popupAbsolute.height, viewport.top + viewport.height) -\n Math.max(popupAbsolute.top, viewport.top);\n const visibleWidth = Math.max(0, overlapWidth);\n const visibleHeight = Math.max(0, overlapHeight);\n const overflow = PopupHelper.getOverflowEdges(coordinates, popupRect, this.globalObject);\n const isFullyVisible = visibleWidth === popupAbsolute.width && visibleHeight === popupAbsolute.height;\n const isAreaEligible = PopupHelper.getPositionObject(position).direction !== 'left' || isFullyVisible;\n\n return {\n position,\n coordinates,\n overflowCount: PopupHelper.getOverflowCount(overflow),\n visibleArea: visibleWidth * visibleHeight,\n isFullyVisible,\n isAreaEligible,\n };\n }\n\n private pickBestAreaCandidate(\n candidates: Readonly<FallbackCandidateEvaluation[]>,\n positionsSet: ReadonlySet<PopupPositionsType>,\n ): Nullable<FallbackCandidateEvaluation> {\n let bestCandidate: Nullable<FallbackCandidateEvaluation> = null;\n\n for (const candidate of candidates) {\n if (!candidate.isAreaEligible || candidate.visibleArea <= 0) {\n continue;\n }\n\n const isBetterArea =\n !bestCandidate ||\n // предпочитаем любые полностью видимые позиции\n (candidate.isFullyVisible && !bestCandidate.isFullyVisible) ||\n // среди одинаковых по полноте — большую видимую площадь\n (candidate.isFullyVisible === bestCandidate.isFullyVisible &&\n candidate.visibleArea > bestCandidate.visibleArea) ||\n // при равной площади — ту, что указана в props.positions\n (candidate.visibleArea === bestCandidate.visibleArea &&\n positionsSet.has(candidate.position) &&\n !positionsSet.has(bestCandidate.position));\n\n if (isBetterArea) {\n bestCandidate = candidate;\n }\n }\n\n return bestCandidate;\n }\n\n private pickBestOverflowCandidate(\n candidates: Readonly<FallbackCandidateEvaluation[]>,\n positionsSet: ReadonlySet<PopupPositionsType>,\n ): FallbackCandidateEvaluation {\n let bestCandidate = candidates[0];\n\n for (const candidate of candidates) {\n const isBetterOverflow =\n candidate.overflowCount < bestCandidate.overflowCount ||\n (candidate.overflowCount === bestCandidate.overflowCount &&\n positionsSet.has(candidate.position) &&\n !positionsSet.has(bestCandidate.position));\n\n if (isBetterOverflow) {\n bestCandidate = candidate;\n }\n }\n\n return bestCandidate;\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.getProps().hasPin || /center|middle/.test(position.align)) {\n return 0;\n }\n\n const anchorSize = /top|bottom/.test(position.direction) ? anchorRect.width : anchorRect.height;\n\n const { pinSize } = this.props;\n\n return Math.max(\n 0,\n this.getPinOffset(position.align) + (pinSize || parseInt(this.theme.popupPinSize)) - anchorSize / 2,\n );\n }\n\n private getRelativeShift = () => {\n const { absoluteParent } = this;\n\n if (!this.props.disablePortal || !absoluteParent) {\n return {\n top: 0,\n left: 0,\n };\n }\n\n const rect = PopupHelper.getElementAbsoluteRect(absoluteParent);\n\n return {\n top: -rect.top,\n left: -rect.left,\n };\n };\n\n private getCoordinates(anchorRect: Rect, popupRect: Rect, positionName: string) {\n const { margin: marginFromProps } = this.props;\n const margin =\n isNonNullable(marginFromProps) && !isNaN(marginFromProps)\n ? marginFromProps\n : parseInt(this.theme.popupMargin) || 0;\n const position = PopupHelper.getPositionObject(positionName);\n const popupOffset = this.getProps().popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n const defaultCoordinates = {\n top: anchorRect.top - popupRect.height - margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n switch (position.direction) {\n case 'top':\n return defaultCoordinates;\n\n case 'middle':\n return {\n top: anchorRect.top + anchorRect.height / 2 - popupRect.height / 2,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'bottom':\n return {\n top: anchorRect.top + anchorRect.height + margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'left':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left - popupRect.width - margin,\n };\n case 'right':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left + anchorRect.width + margin,\n };\n default:\n warning(\n false,\n `Unexpected align '${position.direction}'. Must be one of - 'top', 'bottom', 'left', 'right', 'center', 'middle'. Returning default value.`,\n );\n return defaultCoordinates;\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n const defaultPinOffset = pinOffset || parseInt(this.theme.popupPinOffsetY);\n\n switch (align) {\n case 'top':\n case 'bottom':\n return defaultPinOffset;\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n warning(\n false,\n `Unexpected align '${align}'. Must be one of - 'top', 'bottom', 'left', 'right', 'center', 'middle'. Returning default value.`,\n );\n return defaultPinOffset;\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n const defaultHorizontalPosition = anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return defaultHorizontalPosition;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n warning(\n false,\n `Unexpected align '${align}'. Must be one of - 'left', 'center', 'right'. Returning default value.`,\n );\n return defaultHorizontalPosition;\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n const defaultVerticalPosition = anchorRect.top - popupOffset;\n\n switch (align) {\n case 'top':\n return defaultVerticalPosition;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n warning(\n false,\n `Unexpected align '${align}'. Must be one of - 'top', 'middle', 'bottom'. Returning default value.`,\n );\n return defaultVerticalPosition;\n }\n }\n}\n\n// Нужно, чтобы получать по рефу dom-элемент, в который зарендерится anchor\ntype EmptyWrapperProps = Readonly<{\n children: React.ReactNode;\n}>;\n\nclass EmptyWrapper extends React.Component<EmptyWrapperProps> {\n public render() {\n return this.props.children;\n }\n}\n"]}
@@ -15,11 +15,10 @@ export interface PositionObject {
15
15
  align: string;
16
16
  }
17
17
  declare function getPositionObject(position: string): PositionObject;
18
- declare function getElementAbsoluteRect(element: Element, deltaParentPosition?: Offset): Rect;
19
- declare function isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect, globalObject: GlobalObject, deltaParentPosition?: Offset): boolean;
18
+ declare function getElementAbsoluteRect(element: Element): Rect;
19
+ declare function isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect, globalObject: GlobalObject): boolean;
20
20
  /** Может стать полностью видимым после прокрутки в область видимости */
21
21
  declare function canBecomeFullyVisible(positionName: PopupPositionsType, coordinates: Offset, globalObject: GlobalObject): boolean;
22
- export declare function convertRectToAbsolute(rect: Rect, globalObject: GlobalObject): Rect;
23
22
  /** Прямоугольник вьюпорта в координатах документа (абсолютных) */
24
23
  declare function getViewportAbsoluteRect(globalObject: GlobalObject): Rect;
25
24
  export interface OverflowEdges {
@@ -43,7 +42,6 @@ export declare const PopupHelper: {
43
42
  getPositionObject: typeof getPositionObject;
44
43
  getElementAbsoluteRect: typeof getElementAbsoluteRect;
45
44
  isFullyVisible: typeof isAbsoluteRectFullyVisible;
46
- convertRectToAbsolute: typeof convertRectToAbsolute;
47
45
  canBecomeFullyVisible: typeof canBecomeFullyVisible;
48
46
  getViewportAbsoluteRect: typeof getViewportAbsoluteRect;
49
47
  getOverflowEdges: typeof getOverflowEdges;
@@ -7,21 +7,17 @@ function getPositionObject(position) {
7
7
  align: x[1],
8
8
  };
9
9
  }
10
- function getElementAbsoluteRect(element, deltaParentPosition) {
11
- if (deltaParentPosition === void 0) { deltaParentPosition = { top: 0, left: 0 }; }
10
+ function getElementAbsoluteRect(element) {
12
11
  var globalObject = getOwnerGlobalObject(element);
13
12
  var rect = _getElementRelativeRect(element);
14
- rect.top = rect.top - deltaParentPosition.top;
15
- rect.left = rect.left - deltaParentPosition.left;
16
13
  return convertRectToAbsolute(rect, globalObject);
17
14
  }
18
- function isAbsoluteRectFullyVisible(coordinates, popupRect, globalObject, deltaParentPosition) {
19
- if (deltaParentPosition === void 0) { deltaParentPosition = { top: 0, left: 0 }; }
15
+ function isAbsoluteRectFullyVisible(coordinates, popupRect, globalObject) {
20
16
  var windowRelativeRect = _getWindowRelativeRect(globalObject);
21
17
  var windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect, globalObject);
22
18
  var absoluteRect = {
23
- top: coordinates.top + deltaParentPosition.top,
24
- left: coordinates.left + deltaParentPosition.left,
19
+ top: coordinates.top,
20
+ left: coordinates.left,
25
21
  height: popupRect.height,
26
22
  width: popupRect.width,
27
23
  };
@@ -58,7 +54,7 @@ function _getWindowRelativeRect(globalObject) {
58
54
  height: _getViewProperty(function (x) { return x.clientHeight; }, globalObject) || globalObject.innerHeight || 0,
59
55
  };
60
56
  }
61
- export function convertRectToAbsolute(rect, globalObject) {
57
+ function convertRectToAbsolute(rect, globalObject) {
62
58
  var offset = _getAbsoluteOffset(globalObject);
63
59
  return {
64
60
  top: rect.top + offset.top,
@@ -186,7 +182,6 @@ export var PopupHelper = {
186
182
  getPositionObject: getPositionObject,
187
183
  getElementAbsoluteRect: getElementAbsoluteRect,
188
184
  isFullyVisible: isAbsoluteRectFullyVisible,
189
- convertRectToAbsolute: convertRectToAbsolute,
190
185
  canBecomeFullyVisible: canBecomeFullyVisible,
191
186
  getViewportAbsoluteRect: getViewportAbsoluteRect,
192
187
  getOverflowEdges: getOverflowEdges,
@@ -1 +1 @@
1
- {"version":3,"file":"PopupHelper.js","sourceRoot":"","sources":["../../../internal/Popup/PopupHelper.tsx"],"names":[],"mappings":"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","sourcesContent":["import { getDOMRect } from '../../lib/dom/getDOMRect.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { getOwnerGlobalObject } from '../../lib/globalObject.js';\n\nimport type { PopupPositionsType } from './Popup.js';\n\nexport interface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface Offset {\n top: number;\n left: number;\n}\n\nexport interface PositionObject {\n direction: string;\n align: string;\n}\n\nfunction getPositionObject(position: string): PositionObject {\n const x = position.split(' ');\n\n return {\n direction: x[0],\n align: x[1],\n };\n}\n\nfunction getElementAbsoluteRect(element: Element, deltaParentPosition: Offset = { top: 0, left: 0 }): Rect {\n const globalObject = getOwnerGlobalObject(element);\n const rect = _getElementRelativeRect(element);\n rect.top = rect.top - deltaParentPosition.top;\n rect.left = rect.left - deltaParentPosition.left;\n return convertRectToAbsolute(rect, globalObject);\n}\n\nfunction isAbsoluteRectFullyVisible(\n coordinates: Offset,\n popupRect: Rect,\n globalObject: GlobalObject,\n deltaParentPosition: Offset = { top: 0, left: 0 },\n): boolean {\n const windowRelativeRect = _getWindowRelativeRect(globalObject);\n const windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect, globalObject);\n const absoluteRect = {\n top: coordinates.top + deltaParentPosition.top,\n left: coordinates.left + deltaParentPosition.left,\n height: popupRect.height,\n width: popupRect.width,\n };\n\n return _rectContainsRect(windowAbsoluteRect, absoluteRect);\n}\n\n/** Может стать полностью видимым после прокрутки в область видимости */\nfunction canBecomeFullyVisible(positionName: PopupPositionsType, coordinates: Offset, globalObject: GlobalObject) {\n const position = getPositionObject(positionName);\n\n if (position.direction === 'top') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);\n return coordinates.top + availableScrollDistances.top >= 0;\n }\n\n if (position.direction === 'left') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);\n return coordinates.left + availableScrollDistances.left >= 0;\n }\n\n // NOTE: в случаях bottom/right браузер всегда расширяет размер документа\n return true;\n}\n\nfunction _getElementRelativeRect(element: Element) {\n const rect = getDOMRect(element);\n\n return {\n top: rect.top,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n}\n\nfunction _getWindowRelativeRect(globalObject: GlobalObject): Rect {\n return {\n top: 0,\n left: 0,\n width: _getViewProperty((x) => x.clientWidth, globalObject) || globalObject.innerWidth || 0,\n height: _getViewProperty((x) => x.clientHeight, globalObject) || globalObject.innerHeight || 0,\n };\n}\n\nexport function convertRectToAbsolute(rect: Rect, globalObject: GlobalObject): Rect {\n const offset = _getAbsoluteOffset(globalObject);\n\n return {\n top: rect.top + offset.top,\n left: rect.left + offset.left,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction _getAbsoluteOffset(globalObject: GlobalObject): Offset {\n const scrollTop = globalObject.pageYOffset || _getViewProperty((x) => x.scrollTop, globalObject);\n const scrollLeft = globalObject.pageXOffset || _getViewProperty((x) => x.scrollLeft, globalObject);\n\n const clientTop = _getViewProperty((x) => x.clientTop, globalObject);\n const clientLeft = _getViewProperty((x) => x.clientLeft, globalObject);\n\n const top = scrollTop - clientTop;\n const left = scrollLeft - clientLeft;\n\n return {\n top,\n left,\n };\n}\n\nfunction _rectContainsRect(outerRect: Rect, innerRect: Rect): boolean {\n return (\n innerRect.top > outerRect.top &&\n innerRect.top + innerRect.height < outerRect.top + outerRect.height &&\n innerRect.left > outerRect.left &&\n innerRect.left + innerRect.width < outerRect.left + outerRect.width\n );\n}\n\n/** Прямоугольник вьюпорта в координатах документа (абсолютных) */\nfunction getViewportAbsoluteRect(globalObject: GlobalObject): Rect {\n return convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);\n}\n\nexport interface OverflowEdges {\n top: boolean;\n bottom: boolean;\n left: boolean;\n right: boolean;\n}\n\n/** Какие стороны попапа (с заданными координатами) выходят за пределы вьюпорта */\nfunction getOverflowEdges(coordinates: Offset, popupRect: Rect, globalObject: GlobalObject): OverflowEdges {\n const viewport = getViewportAbsoluteRect(globalObject);\n const popup = {\n top: coordinates.top,\n left: coordinates.left,\n width: popupRect.width,\n height: popupRect.height,\n };\n return {\n top: popup.top < viewport.top,\n bottom: popup.top + popup.height > viewport.top + viewport.height,\n left: popup.left < viewport.left,\n right: popup.left + popup.width > viewport.left + viewport.width,\n };\n}\n\n/** Количество сторон, по которым попап выходит за вьюпорт (0–4) */\nfunction getOverflowCount(overflow: OverflowEdges): number {\n return [overflow.top, overflow.bottom, overflow.left, overflow.right].filter(Boolean).length;\n}\n\n/** Предпочтительное направление по вертикали при переполнении */\nfunction getPreferredDirection(overflow: OverflowEdges, defaultPosition: PopupPositionsType): string {\n if (overflow.bottom) {\n return 'top';\n }\n if (overflow.top) {\n return 'bottom';\n }\n return getPositionObject(defaultPosition).direction;\n}\n\n/**\n * Упорядоченный список кандидатов для fallback-позиции: при горизонтальном переполнении\n * сначала позиции с нужным align (в т.ч. из pinnablePositions), затем по direction и positions.\n */\nfunction getOrderedFallbackCandidates(\n positions: Readonly<PopupPositionsType[]>,\n overflow: OverflowEdges,\n preferredDirection: string,\n preferredAlignOrder: string[],\n pinnablePositions: Readonly<PopupPositionsType[]>,\n): PopupPositionsType[] {\n const seen = new Set<PopupPositionsType>();\n const add = (p: PopupPositionsType) => {\n if (!seen.has(p)) {\n seen.add(p);\n return true;\n }\n return false;\n };\n\n const candidates: PopupPositionsType[] = [];\n const hasHorizontalOverflow = overflow.left || overflow.right;\n\n if (hasHorizontalOverflow) {\n const preferredAlign = preferredAlignOrder[0];\n for (const dir of ['bottom', 'top']) {\n const p = `${dir} ${preferredAlign}` as PopupPositionsType;\n if (pinnablePositions.includes(p) && add(p)) {\n candidates.push(p);\n }\n }\n for (const align of preferredAlignOrder) {\n for (const p of positions) {\n if (getPositionObject(p).align === align && add(p)) {\n candidates.push(p);\n }\n }\n }\n }\n\n for (const align of preferredAlignOrder) {\n for (const p of positions) {\n const pos = getPositionObject(p);\n if (pos.direction === preferredDirection && pos.align === align && add(p)) {\n candidates.push(p);\n }\n }\n }\n for (const p of positions) {\n if (getPositionObject(p).direction === preferredDirection && add(p)) {\n candidates.push(p);\n }\n }\n for (const p of positions) {\n if (add(p)) {\n candidates.push(p);\n }\n }\n\n return candidates;\n}\n\nfunction _getViewProperty(getProperty: (e: Element) => number, globalObject: GlobalObject): number {\n const views = [globalObject.document?.documentElement, globalObject.document?.body];\n return views.map((x) => x && getProperty(x)).find(Boolean) || 0;\n}\n\nexport const PopupHelper = {\n getPositionObject,\n getElementAbsoluteRect,\n isFullyVisible: isAbsoluteRectFullyVisible,\n convertRectToAbsolute,\n canBecomeFullyVisible,\n getViewportAbsoluteRect,\n getOverflowEdges,\n getOverflowCount,\n getPreferredDirection,\n getOrderedFallbackCandidates,\n};\n"]}
1
+ {"version":3,"file":"PopupHelper.js","sourceRoot":"","sources":["../../../internal/Popup/PopupHelper.tsx"],"names":[],"mappings":"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","sourcesContent":["import { getDOMRect } from '../../lib/dom/getDOMRect.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport { getOwnerGlobalObject } from '../../lib/globalObject.js';\n\nimport type { PopupPositionsType } from './Popup.js';\n\nexport interface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport interface Offset {\n top: number;\n left: number;\n}\n\nexport interface PositionObject {\n direction: string;\n align: string;\n}\n\nfunction getPositionObject(position: string): PositionObject {\n const x = position.split(' ');\n\n return {\n direction: x[0],\n align: x[1],\n };\n}\n\nfunction getElementAbsoluteRect(element: Element): Rect {\n const globalObject = getOwnerGlobalObject(element);\n const rect = _getElementRelativeRect(element);\n return convertRectToAbsolute(rect, globalObject);\n}\n\nfunction isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect, globalObject: GlobalObject): boolean {\n const windowRelativeRect = _getWindowRelativeRect(globalObject);\n const windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect, globalObject);\n const absoluteRect = {\n top: coordinates.top,\n left: coordinates.left,\n height: popupRect.height,\n width: popupRect.width,\n };\n\n return _rectContainsRect(windowAbsoluteRect, absoluteRect);\n}\n\n/** Может стать полностью видимым после прокрутки в область видимости */\nfunction canBecomeFullyVisible(positionName: PopupPositionsType, coordinates: Offset, globalObject: GlobalObject) {\n const position = getPositionObject(positionName);\n\n if (position.direction === 'top') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);\n return coordinates.top + availableScrollDistances.top >= 0;\n }\n\n if (position.direction === 'left') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);\n return coordinates.left + availableScrollDistances.left >= 0;\n }\n\n // NOTE: в случаях bottom/right браузер всегда расширяет размер документа\n return true;\n}\n\nfunction _getElementRelativeRect(element: Element) {\n const rect = getDOMRect(element);\n\n return {\n top: rect.top,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n}\n\nfunction _getWindowRelativeRect(globalObject: GlobalObject): Rect {\n return {\n top: 0,\n left: 0,\n width: _getViewProperty((x) => x.clientWidth, globalObject) || globalObject.innerWidth || 0,\n height: _getViewProperty((x) => x.clientHeight, globalObject) || globalObject.innerHeight || 0,\n };\n}\n\nfunction convertRectToAbsolute(rect: Rect, globalObject: GlobalObject): Rect {\n const offset = _getAbsoluteOffset(globalObject);\n\n return {\n top: rect.top + offset.top,\n left: rect.left + offset.left,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction _getAbsoluteOffset(globalObject: GlobalObject): Offset {\n const scrollTop = globalObject.pageYOffset || _getViewProperty((x) => x.scrollTop, globalObject);\n const scrollLeft = globalObject.pageXOffset || _getViewProperty((x) => x.scrollLeft, globalObject);\n\n const clientTop = _getViewProperty((x) => x.clientTop, globalObject);\n const clientLeft = _getViewProperty((x) => x.clientLeft, globalObject);\n\n const top = scrollTop - clientTop;\n const left = scrollLeft - clientLeft;\n\n return {\n top,\n left,\n };\n}\n\nfunction _rectContainsRect(outerRect: Rect, innerRect: Rect): boolean {\n return (\n innerRect.top > outerRect.top &&\n innerRect.top + innerRect.height < outerRect.top + outerRect.height &&\n innerRect.left > outerRect.left &&\n innerRect.left + innerRect.width < outerRect.left + outerRect.width\n );\n}\n\n/** Прямоугольник вьюпорта в координатах документа (абсолютных) */\nfunction getViewportAbsoluteRect(globalObject: GlobalObject): Rect {\n return convertRectToAbsolute(_getWindowRelativeRect(globalObject), globalObject);\n}\n\nexport interface OverflowEdges {\n top: boolean;\n bottom: boolean;\n left: boolean;\n right: boolean;\n}\n\n/** Какие стороны попапа (с заданными координатами) выходят за пределы вьюпорта */\nfunction getOverflowEdges(coordinates: Offset, popupRect: Rect, globalObject: GlobalObject): OverflowEdges {\n const viewport = getViewportAbsoluteRect(globalObject);\n const popup = {\n top: coordinates.top,\n left: coordinates.left,\n width: popupRect.width,\n height: popupRect.height,\n };\n return {\n top: popup.top < viewport.top,\n bottom: popup.top + popup.height > viewport.top + viewport.height,\n left: popup.left < viewport.left,\n right: popup.left + popup.width > viewport.left + viewport.width,\n };\n}\n\n/** Количество сторон, по которым попап выходит за вьюпорт (0–4) */\nfunction getOverflowCount(overflow: OverflowEdges): number {\n return [overflow.top, overflow.bottom, overflow.left, overflow.right].filter(Boolean).length;\n}\n\n/** Предпочтительное направление по вертикали при переполнении */\nfunction getPreferredDirection(overflow: OverflowEdges, defaultPosition: PopupPositionsType): string {\n if (overflow.bottom) {\n return 'top';\n }\n if (overflow.top) {\n return 'bottom';\n }\n return getPositionObject(defaultPosition).direction;\n}\n\n/**\n * Упорядоченный список кандидатов для fallback-позиции: при горизонтальном переполнении\n * сначала позиции с нужным align (в т.ч. из pinnablePositions), затем по direction и positions.\n */\nfunction getOrderedFallbackCandidates(\n positions: Readonly<PopupPositionsType[]>,\n overflow: OverflowEdges,\n preferredDirection: string,\n preferredAlignOrder: string[],\n pinnablePositions: Readonly<PopupPositionsType[]>,\n): PopupPositionsType[] {\n const seen = new Set<PopupPositionsType>();\n const add = (p: PopupPositionsType) => {\n if (!seen.has(p)) {\n seen.add(p);\n return true;\n }\n return false;\n };\n\n const candidates: PopupPositionsType[] = [];\n const hasHorizontalOverflow = overflow.left || overflow.right;\n\n if (hasHorizontalOverflow) {\n const preferredAlign = preferredAlignOrder[0];\n for (const dir of ['bottom', 'top']) {\n const p = `${dir} ${preferredAlign}` as PopupPositionsType;\n if (pinnablePositions.includes(p) && add(p)) {\n candidates.push(p);\n }\n }\n for (const align of preferredAlignOrder) {\n for (const p of positions) {\n if (getPositionObject(p).align === align && add(p)) {\n candidates.push(p);\n }\n }\n }\n }\n\n for (const align of preferredAlignOrder) {\n for (const p of positions) {\n const pos = getPositionObject(p);\n if (pos.direction === preferredDirection && pos.align === align && add(p)) {\n candidates.push(p);\n }\n }\n }\n for (const p of positions) {\n if (getPositionObject(p).direction === preferredDirection && add(p)) {\n candidates.push(p);\n }\n }\n for (const p of positions) {\n if (add(p)) {\n candidates.push(p);\n }\n }\n\n return candidates;\n}\n\nfunction _getViewProperty(getProperty: (e: Element) => number, globalObject: GlobalObject): number {\n const views = [globalObject.document?.documentElement, globalObject.document?.body];\n return views.map((x) => x && getProperty(x)).find(Boolean) || 0;\n}\n\nexport const PopupHelper = {\n getPositionObject,\n getElementAbsoluteRect,\n isFullyVisible: isAbsoluteRectFullyVisible,\n canBecomeFullyVisible,\n getViewportAbsoluteRect,\n getOverflowEdges,\n getOverflowCount,\n getPreferredDirection,\n getOrderedFallbackCandidates,\n};\n"]}
@@ -12,15 +12,11 @@ export declare class RenderContainer extends React.Component<RenderContainerProp
12
12
  private static getRootId;
13
13
  static readonly defaultRootNode: null;
14
14
  private domContainer;
15
- private popupStrategy;
16
15
  private readonly rootId;
17
16
  getRootNode: TGetRootNode;
18
17
  shouldComponentUpdate(nextProps: RenderContainerProps): boolean;
19
18
  componentWillUnmount(): void;
20
- private reflowContainer;
21
19
  render(): React.JSX.Element;
22
- private debouncedReflowContainer;
23
- renderMain(): React.JSX.Element;
24
20
  private createContainer;
25
21
  private mountContainer;
26
22
  private destroyContainer;