@skbkontur/react-ui 3.12.6 → 3.12.8
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.
- package/CHANGELOG.md +22 -0
- package/README.md +25 -4
- package/cjs/components/DatePicker/DatePicker.d.ts +1 -1
- package/cjs/components/Hint/Hint.d.ts +5 -1
- package/cjs/components/Hint/Hint.js +9 -1
- package/cjs/components/Hint/Hint.js.map +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.d.ts +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.js +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
- package/cjs/components/Toast/Toast.js.map +1 -1
- package/cjs/components/Tooltip/Tooltip.d.ts +5 -3
- package/cjs/components/Tooltip/Tooltip.js +13 -10
- package/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/cjs/internal/CommonWrapper/CommonWrapper.d.ts +2 -1
- package/cjs/internal/CommonWrapper/CommonWrapper.js +20 -6
- package/cjs/internal/CommonWrapper/CommonWrapper.js.map +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
- package/cjs/internal/InternalMenu/InternalMenu.js +22 -8
- package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
- package/cjs/internal/Menu/Menu.js +7 -3
- package/cjs/internal/Menu/Menu.js.map +1 -1
- package/cjs/internal/Popup/Popup.d.ts +2 -2
- package/cjs/internal/Popup/Popup.js +29 -21
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/Popup/PopupHelper.d.ts +1 -1
- package/cjs/internal/Popup/PopupHelper.js.map +1 -1
- package/cjs/internal/Popup/PopupPin.d.ts +1 -1
- package/cjs/internal/Popup/PopupPin.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderContainer.js +10 -0
- package/cjs/internal/RenderContainer/RenderContainer.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderContainerTypes.d.ts +1 -0
- package/cjs/internal/RenderLayer/RenderLayer.d.ts +2 -1
- package/cjs/internal/RenderLayer/RenderLayer.js +11 -3
- package/cjs/internal/RenderLayer/RenderLayer.js.map +1 -1
- package/cjs/lib/SSRSafe.d.ts +2 -0
- package/cjs/lib/SSRSafe.js +17 -1
- package/cjs/lib/SSRSafe.js.map +1 -1
- package/cjs/lib/dom/getDOMRect.d.ts +11 -0
- package/cjs/lib/dom/getDOMRect.js +36 -0
- package/cjs/lib/dom/getDOMRect.js.map +1 -0
- package/cjs/lib/instanceWithAnchorElement.d.ts +5 -0
- package/cjs/lib/instanceWithAnchorElement.js +9 -0
- package/cjs/lib/instanceWithAnchorElement.js.map +1 -0
- package/cjs/lib/listenFocusOutside.d.ts +1 -1
- package/cjs/lib/listenFocusOutside.js.map +1 -1
- package/cjs/lib/rootNode/getRootNode.d.ts +10 -1
- package/cjs/lib/rootNode/getRootNode.js +67 -12
- package/cjs/lib/rootNode/getRootNode.js.map +1 -1
- package/cjs/lib/rootNode/rootNodeDecorator.d.ts +22 -3
- package/cjs/lib/rootNode/rootNodeDecorator.js +40 -4
- package/cjs/lib/rootNode/rootNodeDecorator.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +1 -1
- package/components/Hint/Hint/Hint.js +9 -1
- package/components/Hint/Hint/Hint.js.map +1 -1
- package/components/Hint/Hint.d.ts +5 -1
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +1 -1
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.d.ts +1 -1
- package/components/Toast/Toast/Toast.js.map +1 -1
- package/components/Tooltip/Tooltip/Tooltip.js +15 -11
- package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
- package/components/Tooltip/Tooltip.d.ts +5 -3
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js +22 -7
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js.map +1 -1
- package/internal/CommonWrapper/CommonWrapper.d.ts +2 -1
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
- package/internal/DropdownContainer/DropdownContainer.d.ts +1 -1
- package/internal/InternalMenu/InternalMenu/InternalMenu.js +16 -6
- package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
- package/internal/Menu/Menu/Menu.js +6 -1
- package/internal/Menu/Menu/Menu.js.map +1 -1
- package/internal/Popup/Popup/Popup.js +36 -27
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/Popup/Popup.d.ts +2 -2
- package/internal/Popup/PopupHelper/PopupHelper.js.map +1 -1
- package/internal/Popup/PopupHelper.d.ts +1 -1
- package/internal/Popup/PopupPin/PopupPin.js.map +1 -1
- package/internal/Popup/PopupPin.d.ts +1 -1
- package/internal/RenderContainer/RenderContainer/RenderContainer.js +9 -0
- package/internal/RenderContainer/RenderContainer/RenderContainer.js.map +1 -1
- package/internal/RenderContainer/RenderContainerTypes.d.ts +1 -0
- package/internal/RenderLayer/RenderLayer/RenderLayer.js +13 -6
- package/internal/RenderLayer/RenderLayer/RenderLayer.js.map +1 -1
- package/internal/RenderLayer/RenderLayer.d.ts +2 -1
- package/lib/SSRSafe/SSRSafe.js +14 -0
- package/lib/SSRSafe/SSRSafe.js.map +1 -1
- package/lib/SSRSafe.d.ts +2 -0
- package/lib/dom/getDOMRect/getDOMRect.js +40 -0
- package/lib/dom/getDOMRect/getDOMRect.js.map +1 -0
- package/lib/dom/getDOMRect/package.json +6 -0
- package/lib/dom/getDOMRect.d.ts +11 -0
- package/lib/instanceWithAnchorElement/instanceWithAnchorElement.js +3 -0
- package/lib/instanceWithAnchorElement/instanceWithAnchorElement.js.map +1 -0
- package/lib/instanceWithAnchorElement/package.json +6 -0
- package/lib/instanceWithAnchorElement.d.ts +5 -0
- package/lib/listenFocusOutside/listenFocusOutside.js.map +1 -1
- package/lib/listenFocusOutside.d.ts +1 -1
- package/lib/rootNode/getRootNode/getRootNode.js +58 -12
- package/lib/rootNode/getRootNode/getRootNode.js.map +1 -1
- package/lib/rootNode/getRootNode.d.ts +10 -1
- package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js +24 -3
- package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js.map +1 -1
- package/lib/rootNode/rootNodeDecorator.d.ts +22 -3
- package/package.json +12 -9
|
@@ -52,18 +52,20 @@ import PropTypes from 'prop-types';
|
|
|
52
52
|
import { Transition } from 'react-transition-group';
|
|
53
53
|
import raf from 'raf';
|
|
54
54
|
import warning from 'warning';
|
|
55
|
+
import { getDOMRect } from "../../../lib/dom/getDOMRect";
|
|
55
56
|
import * as LayoutEvents from "../../../lib/LayoutEvents";
|
|
56
57
|
import { ZIndex } from "../../ZIndex";
|
|
57
58
|
import { RenderContainer } from "../../RenderContainer";
|
|
58
59
|
import { isFunction, isNonNullable, isRefableElement } from "../../../lib/utils";
|
|
59
60
|
import { isIE11, isEdge, isSafari } from "../../../lib/client";
|
|
60
61
|
import { ThemeContext } from "../../../lib/theming/ThemeContext";
|
|
61
|
-
import { isHTMLElement, safePropTypesInstanceOf } from "../../../lib/SSRSafe";
|
|
62
|
+
import { isElement, isHTMLElement, safePropTypesInstanceOf } from "../../../lib/SSRSafe";
|
|
62
63
|
import { isTestEnv } from "../../../lib/currentEnvironment";
|
|
63
64
|
import { CommonWrapper } from "../../CommonWrapper";
|
|
64
65
|
import { cx } from "../../../lib/theming/Emotion";
|
|
65
66
|
import { getRootNode, rootNode } from "../../../lib/rootNode";
|
|
66
67
|
import { callChildRef } from "../../../lib/callChildRef/callChildRef";
|
|
68
|
+
import { isInstanceWithAnchorElement } from "../../../lib/instanceWithAnchorElement";
|
|
67
69
|
import { PopupPin } from "../PopupPin";
|
|
68
70
|
import { PopupHelper } from "../PopupHelper";
|
|
69
71
|
import { styles } from "../Popup.styles";
|
|
@@ -99,12 +101,21 @@ export var Popup = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_
|
|
|
99
101
|
_this.layoutEventsToken = void 0;
|
|
100
102
|
_this.locationUpdateId = null;
|
|
101
103
|
_this.lastPopupElement = void 0;
|
|
102
|
-
_this.anchorElement = null;
|
|
103
104
|
_this.setRootNode = void 0;
|
|
104
105
|
_this.refForTransition = /*#__PURE__*/React.createRef();
|
|
106
|
+
_this.anchorElement = null;
|
|
107
|
+
|
|
108
|
+
_this.updateAnchorElement = function (instance) {
|
|
109
|
+
var childDomNode = isInstanceWithAnchorElement(instance) ? instance.getAnchorElement() : getRootNode(instance);
|
|
110
|
+
var anchorElement = _this.anchorElement;
|
|
111
|
+
|
|
112
|
+
if (childDomNode !== anchorElement) {
|
|
113
|
+
_this.removeEventListeners(anchorElement);
|
|
105
114
|
|
|
106
|
-
|
|
107
|
-
|
|
115
|
+
_this.anchorElement = childDomNode;
|
|
116
|
+
|
|
117
|
+
_this.addEventListeners(childDomNode);
|
|
118
|
+
}
|
|
108
119
|
};
|
|
109
120
|
|
|
110
121
|
_this.handleMouseEnter = function (event) {
|
|
@@ -139,7 +150,8 @@ export var Popup = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_
|
|
|
139
150
|
|
|
140
151
|
_this.calculateWidth = function (width) {
|
|
141
152
|
if (typeof width === 'string' && width.includes('%')) {
|
|
142
|
-
|
|
153
|
+
var anchorWidth = Math.floor(getDOMRect(_this.anchorElement).width);
|
|
154
|
+
return _this.anchorElement ? anchorWidth * parseFloat(width) / 100 : 0;
|
|
143
155
|
}
|
|
144
156
|
|
|
145
157
|
return width;
|
|
@@ -260,7 +272,7 @@ export var Popup = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_
|
|
|
260
272
|
useWrapper = _this$props.useWrapper;
|
|
261
273
|
var anchor = null;
|
|
262
274
|
|
|
263
|
-
if (
|
|
275
|
+
if (isElement(anchorElement)) {
|
|
264
276
|
this.updateAnchorElement(anchorElement);
|
|
265
277
|
} else if ( /*#__PURE__*/React.isValidElement(anchorElement)) {
|
|
266
278
|
anchor = useWrapper ? /*#__PURE__*/React.createElement("span", null, anchorElement) : anchorElement;
|
|
@@ -280,32 +292,23 @@ export var Popup = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_
|
|
|
280
292
|
}) : null; // we need to get anchor's DOM node
|
|
281
293
|
// so we either set our own ref on it via cloning
|
|
282
294
|
// or relay on findDOMNode (inside getRootNode)
|
|
283
|
-
// which should be called
|
|
295
|
+
// which should be called within updateAnchorElement
|
|
284
296
|
// in the case when the anchor is not refable
|
|
285
297
|
|
|
286
298
|
var canGetAnchorNode = !!anchorWithRef || isHTMLElement(anchorElement);
|
|
287
299
|
return /*#__PURE__*/React.createElement(RenderContainer, {
|
|
288
300
|
anchor: anchorWithRef || anchor,
|
|
289
|
-
ref: canGetAnchorNode ? null : this.
|
|
301
|
+
ref: canGetAnchorNode ? null : this.updateAnchorElement
|
|
290
302
|
}, location && this.renderContent(location));
|
|
291
303
|
};
|
|
292
304
|
|
|
293
|
-
_proto.
|
|
294
|
-
|
|
295
|
-
|
|
305
|
+
_proto.addEventListeners = function addEventListeners(element) {
|
|
306
|
+
if (element && isElement(element)) {
|
|
307
|
+
// @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657
|
|
308
|
+
element.addEventListener('mouseenter', this.handleMouseEnter); // @ts-expect-error: See the comment above
|
|
296
309
|
|
|
297
|
-
|
|
298
|
-
this.removeEventListeners(anchorElement);
|
|
299
|
-
this.anchorElement = childDomNode;
|
|
300
|
-
this.addEventListeners(childDomNode);
|
|
301
|
-
this.setRootNode(childDomNode);
|
|
302
|
-
}
|
|
303
|
-
};
|
|
310
|
+
element.addEventListener('mouseleave', this.handleMouseLeave); // @ts-expect-error: See the comment above
|
|
304
311
|
|
|
305
|
-
_proto.addEventListeners = function addEventListeners(element) {
|
|
306
|
-
if (element && isHTMLElement(element)) {
|
|
307
|
-
element.addEventListener('mouseenter', this.handleMouseEnter);
|
|
308
|
-
element.addEventListener('mouseleave', this.handleMouseLeave);
|
|
309
312
|
element.addEventListener('click', this.handleClick);
|
|
310
313
|
element.addEventListener('focusin', this.handleFocus);
|
|
311
314
|
element.addEventListener('focusout', this.handleBlur);
|
|
@@ -313,9 +316,12 @@ export var Popup = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_
|
|
|
313
316
|
};
|
|
314
317
|
|
|
315
318
|
_proto.removeEventListeners = function removeEventListeners(element) {
|
|
316
|
-
if (element &&
|
|
317
|
-
|
|
318
|
-
element.removeEventListener('
|
|
319
|
+
if (element && isElement(element)) {
|
|
320
|
+
// @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657
|
|
321
|
+
element.removeEventListener('mouseenter', this.handleMouseEnter); // @ts-expect-error: See the comment above
|
|
322
|
+
|
|
323
|
+
element.removeEventListener('mouseleave', this.handleMouseLeave); // @ts-expect-error: See the comment above
|
|
324
|
+
|
|
319
325
|
element.removeEventListener('click', this.handleClick);
|
|
320
326
|
element.removeEventListener('focusin', this.handleFocus);
|
|
321
327
|
element.removeEventListener('focusout', this.handleBlur);
|
|
@@ -356,7 +362,10 @@ export var Popup = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_
|
|
|
356
362
|
}, function (state) {
|
|
357
363
|
var _extends2, _ref;
|
|
358
364
|
|
|
359
|
-
return /*#__PURE__*/React.createElement(CommonWrapper, _this4.props,
|
|
365
|
+
return /*#__PURE__*/React.createElement(CommonWrapper, _extends({}, _this4.props, {
|
|
366
|
+
rootNodeRef: _this4.setRootNode
|
|
367
|
+
}), /*#__PURE__*/React.createElement(ZIndex, {
|
|
368
|
+
"data-tid": 'Popup__root',
|
|
360
369
|
wrapperRef: _this4.refPopupElement,
|
|
361
370
|
priority: 'Popup',
|
|
362
371
|
className: cx(_extends((_extends2 = {}, _extends2[styles.popup(_this4.theme)] = true, _extends2[styles.shadow(_this4.theme)] = hasShadow && !shouldFallbackShadow, _extends2[styles.shadowFallback(_this4.theme)] = hasShadow && shouldFallbackShadow, _extends2[styles.popupIgnoreHover()] = ignoreHover, _extends2), disableAnimations ? {} : (_ref = {}, _ref[styles["transition-enter-" + direction](_this4.theme)] = true, _ref[styles.transitionEnter()] = state === 'entering', _ref[styles.transitionEnterActive()] = state === 'entered', _ref[styles.transitionExit()] = state === 'exiting', _ref))),
|
|
@@ -661,4 +670,4 @@ export var Popup = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_
|
|
|
661
670
|
useWrapper: false,
|
|
662
671
|
ignoreHover: false,
|
|
663
672
|
width: 'auto'
|
|
664
|
-
}, _temp)) || _class;
|
|
673
|
+
}, _class2.defaultRootNode = null, _temp)) || _class;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Popup.tsx"],"names":["React","PropTypes","Transition","raf","warning","LayoutEvents","ZIndex","RenderContainer","isFunction","isNonNullable","isRefableElement","isIE11","isEdge","isSafari","ThemeContext","isHTMLElement","safePropTypesInstanceOf","isTestEnv","CommonWrapper","cx","getRootNode","rootNode","callChildRef","PopupPin","PopupHelper","styles","POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","PopupPositions","DefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","Popup","state","location","props","opened","theme","layoutEventsToken","locationUpdateId","lastPopupElement","anchorElement","setRootNode","refForTransition","createRef","renderContainerRef","childInstance","updateAnchorElement","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","offsetWidth","parseFloat","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","element","handleLayoutEvent","updateLocation","popupElement","getLocation","locationEquals","componentDidMount","addListener","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","onOpen","onClose","delayUpdateLocation","componentWillUnmount","removeEventListeners","remove","render","renderMain","useWrapper","anchor","isValidElement","anchorWithRef","cloneElement","ref","instance","originalRef","canGetAnchorNode","renderContent","childDomNode","addEventListeners","addEventListener","removeEventListener","backgroundColor","disableAnimations","maxWidth","hasShadow","ignoreHover","children","renderChildren","getPositionObject","direction","rootStyle","shouldFallbackShadow","Boolean","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","content","contentInner","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","cancel","x","y","Math","abs","positions","tryPreserveFirstRenderedPosition","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","propTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport raf from 'raf';\nimport warning from 'warning';\n\nimport { Nullable } from '../../typings/utility-types';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { ZIndex } from '../ZIndex';\nimport { RenderContainer } from '../RenderContainer';\nimport { FocusEventType, MouseEventType } from '../../typings/event-types';\nimport { isFunction, isNonNullable, isRefableElement } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isHTMLElement, safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nimport { PopupPin } from './PopupPin';\nimport { Offset, PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './Popup.styles';\n\nconst POPUP_BORDER_DEFAULT_COLOR = 'transparent';\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nexport const PopupPositions = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom right',\n 'bottom center',\n 'bottom left',\n 'left bottom',\n 'left middle',\n 'left top',\n] as const;\nexport const DefaultPosition = PopupPositions[0];\n\nexport type PopupPositionsType = typeof PopupPositions[number];\n\nconst DUMMY_LOCATION: PopupLocation = {\n position: DefaultPosition,\n coordinates: {\n top: -9999,\n left: -9999,\n },\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 extends CommonProps, PopupHandlerProps {\n anchorElement: React.ReactNode | HTMLElement;\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n hasPin: boolean;\n hasShadow: boolean;\n disableAnimations: boolean;\n margin?: number;\n maxWidth?: number | string;\n opened: boolean;\n pinOffset?: number;\n pinSize?: number;\n popupOffset: number;\n positions: Readonly<PopupPositionsType[]>;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n ignoreHover: boolean;\n width: React.CSSProperties['width'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPositionsType;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\n@rootNode\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(() => HTMLElement), PropTypes.node]).isRequired,\n\n /**\n * Фон попапа и пина\n */\n backgroundColor: PropTypes.string,\n\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Показывать ли пин\n */\n hasPin: PropTypes.bool,\n\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow: PropTypes.bool,\n\n /**\n * Отступ попапа от элемента\n */\n margin: PropTypes.number,\n\n /**\n * Показан или скрыт попап\n */\n opened: PropTypes.bool,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset: PropTypes.number,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize: PropTypes.number,\n\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset: PropTypes.number,\n\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions: PropTypes.array,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n width: 'auto',\n };\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupElement: Nullable<HTMLElement>;\n private anchorElement: Nullable<HTMLElement> = null;\n private setRootNode!: TSetRootNode;\n private refForTransition = React.createRef<HTMLDivElement>();\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\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.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 this.removeEventListeners(this.anchorElement);\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 return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { location } = this.state;\n const { anchorElement, useWrapper } = this.props;\n\n let anchor: Nullable<React.ReactNode> = null;\n if (isHTMLElement(anchorElement)) {\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: (instance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(instance);\n const originalRef = (anchor as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n },\n })\n : null;\n\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 with RenderContainer's ref\n // in the case when the anchor is not refable\n\n const canGetAnchorNode = !!anchorWithRef || isHTMLElement(anchorElement);\n\n return (\n <RenderContainer anchor={anchorWithRef || anchor} ref={canGetAnchorNode ? null : this.renderContainerRef}>\n {location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private renderContainerRef = (childInstance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(childInstance);\n };\n\n private updateAnchorElement(childInstance: Nullable<React.ReactInstance>) {\n const childDomNode = getRootNode(childInstance);\n const anchorElement = this.anchorElement;\n\n if (childDomNode !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = childDomNode;\n this.addEventListeners(childDomNode);\n this.setRootNode(childDomNode);\n }\n }\n\n private addEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.addEventListener('mouseenter', this.handleMouseEnter);\n element.addEventListener('mouseleave', this.handleMouseLeave);\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private removeEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\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 return this.anchorElement ? (this.anchorElement.offsetWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private renderContent(location: PopupLocation) {\n const { backgroundColor, disableAnimations, maxWidth, hasShadow, ignoreHover, opened, width } = this.props;\n const children = this.renderChildren();\n\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = { ...location.coordinates, maxWidth };\n\n const shouldFallbackShadow = isIE11 || isEdge || isSafari;\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}>\n <ZIndex\n wrapperRef={this.refPopupElement}\n priority={'Popup'}\n className={cx({\n [styles.popup(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow && !shouldFallbackShadow,\n [styles.shadowFallback(this.theme)]: hasShadow && shouldFallbackShadow,\n [styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [styles[`transition-enter-${direction}` as keyof typeof styles](this.theme)]: true,\n [styles.transitionEnter()]: state === 'entering',\n [styles.transitionEnterActive()]: state === 'entered',\n [styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n <div className={styles.content(this.theme)} data-tid={'PopupContent'} ref={this.refForTransition}>\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={'PopupContentInner'}\n >\n {children}\n </div>\n </div>\n {this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\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 refPopupElement = (element: Nullable<HTMLElement>) => {\n this.lastPopupElement = element;\n };\n\n private renderPin(positionName: string): React.ReactNode {\n /**\n * Box-shadow does not appear under the pin. Borders are used instead.\n * In non-ie browsers drop-shadow filter is used. It is applying\n * shadow to the pin too.\n */\n const isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;\n const pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;\n\n const { pinSize, hasShadow, backgroundColor, borderColor } = this.props;\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n this.props.hasPin && (\n <PopupPin\n popupElement={this.lastPopupElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n borderWidth={hasShadow ? 1 : 0}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n borderColor={borderColor || pinBorder}\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 = raf(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n raf.cancel(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupElement = this.lastPopupElement;\n\n if (!popupElement) {\n return;\n }\n\n const location = this.getLocation(popupElement, this.state.location);\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 (x == null || y == null) {\n return false;\n }\n\n if (!isIE11 && !isEdge) {\n return (\n x.coordinates.left === y.coordinates.left &&\n x.coordinates.top === y.coordinates.top &&\n x.position === y.position\n );\n }\n\n // Для ie/edge обновляем позицию только при разнице минимум в 1. Иначе есть вероятность\n // уйти в бесконечный ререндер\n\n return (\n x.position === y.position &&\n Math.abs(x.coordinates.top - y.coordinates.top) <= 1 &&\n Math.abs(x.coordinates.left - y.coordinates.left) <= 1\n );\n }\n\n private getLocation(popupElement: HTMLElement, location?: Nullable<PopupLocation>) {\n const { positions, tryPreserveFirstRenderedPosition } = this.props;\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isHTMLElement(anchorElement),\n 'Anchor element is not defined or not instance of HTMLElement',\n );\n\n if (!(anchorElement && isHTMLElement(anchorElement))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPositionsType;\n let coordinates: Offset;\n\n if (location && location !== DUMMY_LOCATION && location.position) {\n position = location.position;\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);\n const canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);\n\n if (\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0])\n ) {\n // сохраняем текущую позицию\n return { coordinates, position };\n }\n }\n\n for (position of positions) {\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect)) {\n return { coordinates, position };\n }\n }\n\n position = positions[0];\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n return { coordinates, position };\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.props.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 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.props.popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n switch (position.direction) {\n case 'top':\n return {\n top: anchorRect.top - popupRect.height - margin,\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 throw new Error(`Unexpected direction '${position.direction}'`);\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n\n switch (align) {\n case 'top':\n case 'bottom':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetY);\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'top':\n return anchorRect.top - popupOffset;\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 throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Popup.tsx"],"names":["React","PropTypes","Transition","raf","warning","getDOMRect","LayoutEvents","ZIndex","RenderContainer","isFunction","isNonNullable","isRefableElement","isIE11","isEdge","isSafari","ThemeContext","isElement","isHTMLElement","safePropTypesInstanceOf","isTestEnv","CommonWrapper","cx","getRootNode","rootNode","callChildRef","isInstanceWithAnchorElement","PopupPin","PopupHelper","styles","POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","PopupPositions","DefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","Popup","state","location","props","opened","theme","layoutEventsToken","locationUpdateId","lastPopupElement","setRootNode","refForTransition","createRef","anchorElement","updateAnchorElement","instance","childDomNode","getAnchorElement","removeEventListeners","addEventListeners","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","anchorWidth","Math","floor","parseFloat","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","element","handleLayoutEvent","updateLocation","popupElement","getLocation","locationEquals","componentDidMount","addListener","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","onOpen","onClose","delayUpdateLocation","componentWillUnmount","remove","render","renderMain","useWrapper","anchor","isValidElement","anchorWithRef","cloneElement","ref","originalRef","canGetAnchorNode","renderContent","addEventListener","removeEventListener","backgroundColor","disableAnimations","maxWidth","hasShadow","ignoreHover","children","renderChildren","getPositionObject","direction","rootStyle","shouldFallbackShadow","Boolean","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","content","contentInner","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","cancel","x","y","abs","positions","tryPreserveFirstRenderedPosition","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","propTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultProps","defaultRootNode"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport raf from 'raf';\nimport warning from 'warning';\n\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { Nullable } from '../../typings/utility-types';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { ZIndex } from '../ZIndex';\nimport { RenderContainer } from '../RenderContainer';\nimport { FocusEventType, MouseEventType } from '../../typings/event-types';\nimport { isFunction, isNonNullable, isRefableElement } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isElement, isHTMLElement, safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { isInstanceWithAnchorElement } from '../../lib/instanceWithAnchorElement';\n\nimport { PopupPin } from './PopupPin';\nimport { Offset, PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './Popup.styles';\n\nconst POPUP_BORDER_DEFAULT_COLOR = 'transparent';\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nexport const PopupPositions = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom right',\n 'bottom center',\n 'bottom left',\n 'left bottom',\n 'left middle',\n 'left top',\n] as const;\nexport const DefaultPosition = PopupPositions[0];\n\nexport type PopupPositionsType = typeof PopupPositions[number];\n\nconst DUMMY_LOCATION: PopupLocation = {\n position: DefaultPosition,\n coordinates: {\n top: -9999,\n left: -9999,\n },\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 extends CommonProps, PopupHandlerProps {\n anchorElement: React.ReactNode | HTMLElement;\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n hasPin: boolean;\n hasShadow: boolean;\n disableAnimations: boolean;\n margin?: number;\n maxWidth?: number | string;\n opened: boolean;\n pinOffset?: number;\n pinSize?: number;\n popupOffset: number;\n positions: Readonly<PopupPositionsType[]>;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n ignoreHover: boolean;\n width: React.CSSProperties['width'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPositionsType;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\n@rootNode\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(() => HTMLElement), PropTypes.node]).isRequired,\n\n /**\n * Фон попапа и пина\n */\n backgroundColor: PropTypes.string,\n\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Показывать ли пин\n */\n hasPin: PropTypes.bool,\n\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow: PropTypes.bool,\n\n /**\n * Отступ попапа от элемента\n */\n margin: PropTypes.number,\n\n /**\n * Показан или скрыт попап\n */\n opened: PropTypes.bool,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset: PropTypes.number,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize: PropTypes.number,\n\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset: PropTypes.number,\n\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions: PropTypes.array,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n width: 'auto',\n };\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 theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupElement: Nullable<Element>;\n private setRootNode!: TSetRootNode;\n private refForTransition = React.createRef<HTMLDivElement>();\n\n public anchorElement: Nullable<Element> = null;\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\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.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 this.removeEventListeners(this.anchorElement);\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 return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { location } = this.state;\n const { anchorElement, useWrapper } = this.props;\n\n let anchor: Nullable<React.ReactNode> = null;\n if (isElement(anchorElement)) {\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: (instance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(instance);\n const originalRef = (anchor as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n },\n })\n : null;\n\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 || isHTMLElement(anchorElement);\n\n return (\n <RenderContainer anchor={anchorWithRef || anchor} ref={canGetAnchorNode ? null : this.updateAnchorElement}>\n {location && this.renderContent(location)}\n </RenderContainer>\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 addEventListeners(element: Nullable<Element>) {\n if (element && isElement(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 }\n\n private removeEventListeners(element: Nullable<Element>) {\n if (element && isElement(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 }\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 = Math.floor(getDOMRect(this.anchorElement).width);\n return this.anchorElement ? (anchorWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private renderContent(location: PopupLocation) {\n const { backgroundColor, disableAnimations, maxWidth, hasShadow, ignoreHover, opened, width } = this.props;\n const children = this.renderChildren();\n\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = { ...location.coordinates, maxWidth };\n\n const shouldFallbackShadow = isIE11 || isEdge || isSafari;\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}>\n <ZIndex\n data-tid={'Popup__root'}\n wrapperRef={this.refPopupElement}\n priority={'Popup'}\n className={cx({\n [styles.popup(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow && !shouldFallbackShadow,\n [styles.shadowFallback(this.theme)]: hasShadow && shouldFallbackShadow,\n [styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [styles[`transition-enter-${direction}` as keyof typeof styles](this.theme)]: true,\n [styles.transitionEnter()]: state === 'entering',\n [styles.transitionEnterActive()]: state === 'entered',\n [styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n <div className={styles.content(this.theme)} data-tid={'PopupContent'} ref={this.refForTransition}>\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={'PopupContentInner'}\n >\n {children}\n </div>\n </div>\n {this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\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 refPopupElement = (element: Nullable<HTMLElement>) => {\n this.lastPopupElement = element;\n };\n\n private renderPin(positionName: string): React.ReactNode {\n /**\n * Box-shadow does not appear under the pin. Borders are used instead.\n * In non-ie browsers drop-shadow filter is used. It is applying\n * shadow to the pin too.\n */\n const isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;\n const pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;\n\n const { pinSize, hasShadow, backgroundColor, borderColor } = this.props;\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n this.props.hasPin && (\n <PopupPin\n popupElement={this.lastPopupElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n borderWidth={hasShadow ? 1 : 0}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n borderColor={borderColor || pinBorder}\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 = raf(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n raf.cancel(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupElement = this.lastPopupElement;\n\n if (!popupElement) {\n return;\n }\n\n const location = this.getLocation(popupElement, this.state.location);\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 (x == null || y == null) {\n return false;\n }\n\n if (!isIE11 && !isEdge) {\n return (\n x.coordinates.left === y.coordinates.left &&\n x.coordinates.top === y.coordinates.top &&\n x.position === y.position\n );\n }\n\n // Для ie/edge обновляем позицию только при разнице минимум в 1. Иначе есть вероятность\n // уйти в бесконечный ререндер\n\n return (\n x.position === y.position &&\n Math.abs(x.coordinates.top - y.coordinates.top) <= 1 &&\n Math.abs(x.coordinates.left - y.coordinates.left) <= 1\n );\n }\n\n private getLocation(popupElement: Element, location?: Nullable<PopupLocation>) {\n const { positions, tryPreserveFirstRenderedPosition } = this.props;\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isHTMLElement(anchorElement),\n 'Anchor element is not defined or not instance of HTMLElement',\n );\n\n if (!(anchorElement && isHTMLElement(anchorElement))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPositionsType;\n let coordinates: Offset;\n\n if (location && location !== DUMMY_LOCATION && location.position) {\n position = location.position;\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);\n const canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);\n\n if (\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0])\n ) {\n // сохраняем текущую позицию\n return { coordinates, position };\n }\n }\n\n for (position of positions) {\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect)) {\n return { coordinates, position };\n }\n }\n\n position = positions[0];\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n return { coordinates, position };\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.props.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 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.props.popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n switch (position.direction) {\n case 'top':\n return {\n top: anchorRect.top - popupRect.height - margin,\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 throw new Error(`Unexpected direction '${position.direction}'`);\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n\n switch (align) {\n case 'top':\n case 'bottom':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetY);\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'top':\n return anchorRect.top - popupOffset;\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 throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
|
|
@@ -118,21 +118,21 @@ export declare class Popup extends React.Component<PopupProps, PopupState> {
|
|
|
118
118
|
ignoreHover: boolean;
|
|
119
119
|
width: string;
|
|
120
120
|
};
|
|
121
|
+
static readonly defaultRootNode: null;
|
|
121
122
|
state: PopupState;
|
|
122
123
|
private theme;
|
|
123
124
|
private layoutEventsToken;
|
|
124
125
|
private locationUpdateId;
|
|
125
126
|
private lastPopupElement;
|
|
126
|
-
private anchorElement;
|
|
127
127
|
private setRootNode;
|
|
128
128
|
private refForTransition;
|
|
129
|
+
anchorElement: Nullable<Element>;
|
|
129
130
|
componentDidMount(): void;
|
|
130
131
|
static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState): PopupState;
|
|
131
132
|
componentDidUpdate(prevProps: PopupProps, prevState: PopupState): void;
|
|
132
133
|
componentWillUnmount(): void;
|
|
133
134
|
render(): JSX.Element;
|
|
134
135
|
private renderMain;
|
|
135
|
-
private renderContainerRef;
|
|
136
136
|
private updateAnchorElement;
|
|
137
137
|
private addEventListeners;
|
|
138
138
|
private removeEventListeners;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["PopupHelper.tsx"],"names":["getPositionObject","position","x","split","direction","align","getElementAbsoluteRect","element","rect","_getElementRelativeRect","convertRectToAbsolute","isAbsoluteRectFullyVisible","coordinates","popupRect","windowRelativeRect","_getWindowRelativeRect","windowAbsoluteRect","absoluteRect","top","left","height","width","_rectContainsRect","canBecomeFullyVisible","positionName","availableScrollDistances","getBoundingClientRect","right","bottom","_getViewProperty","clientWidth","window","innerWidth","clientHeight","innerHeight","offset","_getAbsoluteOffset","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","outerRect","innerRect","getProperty","views","document","documentElement","body","map","find","Boolean","PopupHelper","isFullyVisible"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,SAASA,iBAAT,CAA2BC,QAA3B,EAA6D;AAC3D,MAAMC,CAAC,GAAGD,QAAQ,CAACE,KAAT,CAAe,GAAf,CAAV;;AAEA,SAAO;AACLC,IAAAA,SAAS,EAAEF,CAAC,CAAC,CAAD,CADP;AAELG,IAAAA,KAAK,EAAEH,CAAC,CAAC,CAAD,CAFH,EAAP;;AAID;;AAED,SAASI,sBAAT,CAAgCC,OAAhC,
|
|
1
|
+
{"version":3,"sources":["PopupHelper.tsx"],"names":["getPositionObject","position","x","split","direction","align","getElementAbsoluteRect","element","rect","_getElementRelativeRect","convertRectToAbsolute","isAbsoluteRectFullyVisible","coordinates","popupRect","windowRelativeRect","_getWindowRelativeRect","windowAbsoluteRect","absoluteRect","top","left","height","width","_rectContainsRect","canBecomeFullyVisible","positionName","availableScrollDistances","getBoundingClientRect","right","bottom","_getViewProperty","clientWidth","window","innerWidth","clientHeight","innerHeight","offset","_getAbsoluteOffset","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","outerRect","innerRect","getProperty","views","document","documentElement","body","map","find","Boolean","PopupHelper","isFullyVisible"],"mappings":"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","sourcesContent":["import { PopupPositionsType } from './Popup';\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 rect = _getElementRelativeRect(element);\n return convertRectToAbsolute(rect);\n}\n\nfunction isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect): boolean {\n const windowRelativeRect = _getWindowRelativeRect();\n const windowAbsoluteRect = convertRectToAbsolute(windowRelativeRect);\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// Can become fully visible by scrolling into viewport\nfunction canBecomeFullyVisible(positionName: PopupPositionsType, coordinates: Offset) {\n const position = getPositionObject(positionName);\n\n if (position.direction === 'top') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.top + availableScrollDistances.top >= 0;\n }\n\n if (position.direction === 'left') {\n const availableScrollDistances = convertRectToAbsolute(_getWindowRelativeRect());\n return coordinates.left + availableScrollDistances.left >= 0;\n }\n\n // NOTE: for bottom/right cases browser will always expand document size\n return true;\n}\n\nfunction _getElementRelativeRect(element: Element) {\n const rect = element.getBoundingClientRect();\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(): Rect {\n return {\n top: 0,\n left: 0,\n width: _getViewProperty((x) => x.clientWidth) || window.innerWidth,\n height: _getViewProperty((x) => x.clientHeight) || window.innerHeight,\n };\n}\n\nfunction convertRectToAbsolute(rect: Rect): Rect {\n const offset = _getAbsoluteOffset();\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(): Offset {\n const scrollTop = window.pageYOffset || _getViewProperty((x) => x.scrollTop);\n const scrollLeft = window.pageXOffset || _getViewProperty((x) => x.scrollLeft);\n\n const clientTop = _getViewProperty((x) => x.clientTop);\n const clientLeft = _getViewProperty((x) => x.clientLeft);\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\nfunction _getViewProperty(getProperty: (e: Element) => number): number {\n const views = [document.documentElement, 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};\n"]}
|
|
@@ -14,7 +14,7 @@ export interface PositionObject {
|
|
|
14
14
|
align: string;
|
|
15
15
|
}
|
|
16
16
|
declare function getPositionObject(position: string): PositionObject;
|
|
17
|
-
declare function getElementAbsoluteRect(element:
|
|
17
|
+
declare function getElementAbsoluteRect(element: Element): Rect;
|
|
18
18
|
declare function isAbsoluteRectFullyVisible(coordinates: Offset, popupRect: Rect): boolean;
|
|
19
19
|
declare function canBecomeFullyVisible(positionName: PopupPositionsType, coordinates: Offset): boolean;
|
|
20
20
|
export declare const PopupHelper: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["PopupPin.tsx"],"names":["React","PropTypes","PopupHelper","styles","borderStyles","position","borderStyle","borderTopColor","borderBottomColor","borderLeftColor","borderRightColor","PopupPin","render","props","popupElement","options","getPinOptions","getElementAbsoluteRect","getPositionObject","popupPosition","size","offset","borderWidth","styleOuter","getOuterStyle","activeBorder","outerSize","borderColor","styleInner","getInnerStyle","backgroundColor","styleWrapper","getWrapperStyle","outerLeft","outerTop","wrapper","getPopupOppositeDirection","popupDirection","direction","TypeError","left","top","width","height","borderWitdth","popupRect","pinSize","pinOffset","bordersDelta","getPinLeftCoordinate","align","innerTop","innerLeft","getPinTopCoordinate","Error","pinHeight","Component","__KONTUR_REACT_UI__","propTypes","string","number","any"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Nullable } from '../../typings/utility-types';\n\nimport { PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './PopupPin.styles';\n\nconst borderStyles = {\n position: 'absolute',\n borderStyle: 'solid',\n borderTopColor: 'transparent',\n borderBottomColor: 'transparent',\n borderLeftColor: 'transparent',\n borderRightColor: 'transparent',\n};\n\ninterface Props {\n backgroundColor: string;\n borderColor: string;\n borderWidth: number;\n offset: number;\n popupElement: Nullable<HTMLElement>;\n popupPosition: string;\n size: number;\n}\n\nexport class PopupPin extends React.Component<Props> {\n public static __KONTUR_REACT_UI__ = 'PopupPin';\n\n public static propTypes = {\n /**\n * Цвет фон пина\n */\n backgroundColor: PropTypes.string,\n\n /**\n * Цвет границы пина\n */\n borderColor: PropTypes.string,\n\n /**\n * Ширина границы пина\n */\n borderWidth: PropTypes.number,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n offset: PropTypes.number,\n\n /**\n * Ссылка на попап\n */\n popupElement: PropTypes.any,\n\n /**\n * Позиция поапа, по которой будет вычеслено положение пина\n */\n popupPosition: PropTypes.string,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n size: PropTypes.number,\n };\n\n public render() {\n if (!this.props.popupElement) {\n return null;\n }\n\n const options = this.getPinOptions(\n PopupHelper.getElementAbsoluteRect(this.props.popupElement),\n PopupHelper.getPositionObject(this.props.popupPosition),\n this.props.size,\n this.props.offset,\n this.props.borderWidth,\n );\n\n const styleOuter: React.CSSProperties = this.getOuterStyle(\n options.activeBorder,\n options.outerSize,\n this.props.borderColor,\n );\n\n const styleInner: React.CSSProperties = this.getInnerStyle(\n options.activeBorder,\n this.props.size,\n this.props.backgroundColor,\n );\n\n const styleWrapper = this.getWrapperStyle(options.outerLeft, options.outerTop, options.outerSize);\n\n return (\n <div className={styles.wrapper()} style={styleWrapper}>\n <div style={styleOuter}>\n <div style={styleInner} />\n </div>\n </div>\n );\n }\n\n private getPopupOppositeDirection(): 'bottom' | 'top' | 'left' | 'right' {\n const popupDirection = PopupHelper.getPositionObject(this.props.popupPosition).direction;\n switch (popupDirection) {\n case 'top':\n return 'bottom';\n case 'bottom':\n return 'top';\n case 'left':\n return 'right';\n case 'right':\n return 'left';\n default:\n throw new TypeError('Unknown direction ' + popupDirection);\n }\n }\n\n private getWrapperStyle(left: number, top: number, borderWidth: number) {\n const direction = this.getPopupOppositeDirection();\n switch (direction) {\n case 'top':\n case 'bottom':\n return {\n [direction]: -borderWidth + 'px',\n left: left + 'px',\n width: borderWidth * 2 + 'px',\n height: borderWidth + 'px',\n };\n case 'left':\n case 'right':\n return {\n [direction]: -borderWidth + 'px',\n top: top + 'px',\n height: borderWidth * 2 + 'px',\n width: borderWidth + 'px',\n };\n default:\n throw new TypeError('Unknown direction ' + direction);\n }\n }\n\n private getOuterStyle(activeBorder: string, borderWitdth: number, borderColor: string): React.CSSProperties {\n const direction = this.getPopupOppositeDirection();\n switch (direction) {\n case 'top':\n case 'bottom':\n return {\n ...borderStyles,\n [direction]: -borderWitdth + 'px',\n left: '0px',\n borderWidth: borderWitdth + 'px',\n ['border' + activeBorder + 'Color']: borderColor,\n } as React.CSSProperties;\n case 'left':\n case 'right':\n return {\n ...borderStyles,\n [direction]: -borderWitdth + 'px',\n top: '0px',\n borderWidth: borderWitdth + 'px',\n ['border' + activeBorder + 'Color']: borderColor,\n } as React.CSSProperties;\n default:\n throw new TypeError('Unknown direction ' + direction);\n }\n }\n\n private getInnerStyle(activeBorder: string, borderWitdth: number, borderColor: string): React.CSSProperties {\n const direction = this.getPopupOppositeDirection();\n switch (direction) {\n case 'top':\n case 'bottom':\n return {\n ...borderStyles,\n [direction]: -borderWitdth + 2 + 'px',\n left: -borderWitdth + 'px',\n borderWidth: borderWitdth + 'px',\n ['border' + activeBorder + 'Color']: borderColor,\n } as React.CSSProperties;\n case 'left':\n case 'right':\n return {\n ...borderStyles,\n [direction]: -borderWitdth + 2 + 'px',\n top: -borderWitdth + 'px',\n borderWidth: borderWitdth + 'px',\n ['border' + activeBorder + 'Color']: borderColor,\n } as React.CSSProperties;\n default:\n throw new TypeError('Unknown direction ' + direction);\n }\n }\n\n private getPinOptions(\n popupRect: Rect,\n popupPosition: PositionObject,\n pinSize: number,\n pinOffset: number,\n borderWidth: number,\n ) {\n const bordersDelta = 2 * borderWidth;\n const outerSize = pinSize + bordersDelta;\n\n switch (popupPosition.direction) {\n case 'top':\n return {\n outerTop: popupRect.height,\n outerLeft: this.getPinLeftCoordinate(popupRect, popupPosition.align, pinSize, pinOffset) - bordersDelta,\n innerTop: -outerSize,\n innerLeft: -outerSize + bordersDelta,\n activeBorder: 'Top',\n outerSize,\n };\n case 'bottom':\n return {\n outerTop: -2 * outerSize,\n outerLeft: this.getPinLeftCoordinate(popupRect, popupPosition.align, pinSize, pinOffset) - bordersDelta,\n innerTop: -outerSize + 2 * bordersDelta,\n innerLeft: -outerSize + bordersDelta,\n activeBorder: 'Bottom',\n outerSize,\n };\n case 'left':\n return {\n outerTop: this.getPinTopCoordinate(popupRect, popupPosition.align, pinSize, pinOffset) - bordersDelta,\n outerLeft: popupRect.width,\n innerTop: -outerSize + bordersDelta,\n innerLeft: -outerSize,\n activeBorder: 'Left',\n outerSize,\n };\n case 'right':\n return {\n outerTop: this.getPinTopCoordinate(popupRect, popupPosition.align, pinSize, pinOffset) - bordersDelta,\n outerLeft: -2 * outerSize,\n innerTop: -outerSize + bordersDelta,\n innerLeft: -outerSize + 2 * bordersDelta,\n activeBorder: 'Right',\n outerSize,\n };\n default:\n throw new Error('Direction must be one of top, right, bottom, left');\n }\n }\n\n private getPinTopCoordinate(popupRect: Rect, align: string, pinHeight: number, pinOffset: number) {\n switch (align) {\n case 'top':\n return pinOffset;\n case 'middle':\n return popupRect.height / 2 - pinHeight;\n case 'bottom':\n return popupRect.height - pinOffset - 2 * pinHeight;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getPinLeftCoordinate(popupRect: Rect, align: string, pinHeight: number, pinOffset: number) {\n switch (align) {\n case 'left':\n return pinOffset;\n case 'center':\n return popupRect.width / 2 - pinHeight;\n case 'right':\n return popupRect.width - pinOffset - 2 * pinHeight;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["PopupPin.tsx"],"names":["React","PropTypes","PopupHelper","styles","borderStyles","position","borderStyle","borderTopColor","borderBottomColor","borderLeftColor","borderRightColor","PopupPin","render","props","popupElement","options","getPinOptions","getElementAbsoluteRect","getPositionObject","popupPosition","size","offset","borderWidth","styleOuter","getOuterStyle","activeBorder","outerSize","borderColor","styleInner","getInnerStyle","backgroundColor","styleWrapper","getWrapperStyle","outerLeft","outerTop","wrapper","getPopupOppositeDirection","popupDirection","direction","TypeError","left","top","width","height","borderWitdth","popupRect","pinSize","pinOffset","bordersDelta","getPinLeftCoordinate","align","innerTop","innerLeft","getPinTopCoordinate","Error","pinHeight","Component","__KONTUR_REACT_UI__","propTypes","string","number","any"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Nullable } from '../../typings/utility-types';\n\nimport { PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './PopupPin.styles';\n\nconst borderStyles = {\n position: 'absolute',\n borderStyle: 'solid',\n borderTopColor: 'transparent',\n borderBottomColor: 'transparent',\n borderLeftColor: 'transparent',\n borderRightColor: 'transparent',\n};\n\ninterface Props {\n backgroundColor: string;\n borderColor: string;\n borderWidth: number;\n offset: number;\n popupElement: Nullable<Element>;\n popupPosition: string;\n size: number;\n}\n\nexport class PopupPin extends React.Component<Props> {\n public static __KONTUR_REACT_UI__ = 'PopupPin';\n\n public static propTypes = {\n /**\n * Цвет фон пина\n */\n backgroundColor: PropTypes.string,\n\n /**\n * Цвет границы пина\n */\n borderColor: PropTypes.string,\n\n /**\n * Ширина границы пина\n */\n borderWidth: PropTypes.number,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n offset: PropTypes.number,\n\n /**\n * Ссылка на попап\n */\n popupElement: PropTypes.any,\n\n /**\n * Позиция поапа, по которой будет вычеслено положение пина\n */\n popupPosition: PropTypes.string,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n size: PropTypes.number,\n };\n\n public render() {\n if (!this.props.popupElement) {\n return null;\n }\n\n const options = this.getPinOptions(\n PopupHelper.getElementAbsoluteRect(this.props.popupElement),\n PopupHelper.getPositionObject(this.props.popupPosition),\n this.props.size,\n this.props.offset,\n this.props.borderWidth,\n );\n\n const styleOuter: React.CSSProperties = this.getOuterStyle(\n options.activeBorder,\n options.outerSize,\n this.props.borderColor,\n );\n\n const styleInner: React.CSSProperties = this.getInnerStyle(\n options.activeBorder,\n this.props.size,\n this.props.backgroundColor,\n );\n\n const styleWrapper = this.getWrapperStyle(options.outerLeft, options.outerTop, options.outerSize);\n\n return (\n <div className={styles.wrapper()} style={styleWrapper}>\n <div style={styleOuter}>\n <div style={styleInner} />\n </div>\n </div>\n );\n }\n\n private getPopupOppositeDirection(): 'bottom' | 'top' | 'left' | 'right' {\n const popupDirection = PopupHelper.getPositionObject(this.props.popupPosition).direction;\n switch (popupDirection) {\n case 'top':\n return 'bottom';\n case 'bottom':\n return 'top';\n case 'left':\n return 'right';\n case 'right':\n return 'left';\n default:\n throw new TypeError('Unknown direction ' + popupDirection);\n }\n }\n\n private getWrapperStyle(left: number, top: number, borderWidth: number) {\n const direction = this.getPopupOppositeDirection();\n switch (direction) {\n case 'top':\n case 'bottom':\n return {\n [direction]: -borderWidth + 'px',\n left: left + 'px',\n width: borderWidth * 2 + 'px',\n height: borderWidth + 'px',\n };\n case 'left':\n case 'right':\n return {\n [direction]: -borderWidth + 'px',\n top: top + 'px',\n height: borderWidth * 2 + 'px',\n width: borderWidth + 'px',\n };\n default:\n throw new TypeError('Unknown direction ' + direction);\n }\n }\n\n private getOuterStyle(activeBorder: string, borderWitdth: number, borderColor: string): React.CSSProperties {\n const direction = this.getPopupOppositeDirection();\n switch (direction) {\n case 'top':\n case 'bottom':\n return {\n ...borderStyles,\n [direction]: -borderWitdth + 'px',\n left: '0px',\n borderWidth: borderWitdth + 'px',\n ['border' + activeBorder + 'Color']: borderColor,\n } as React.CSSProperties;\n case 'left':\n case 'right':\n return {\n ...borderStyles,\n [direction]: -borderWitdth + 'px',\n top: '0px',\n borderWidth: borderWitdth + 'px',\n ['border' + activeBorder + 'Color']: borderColor,\n } as React.CSSProperties;\n default:\n throw new TypeError('Unknown direction ' + direction);\n }\n }\n\n private getInnerStyle(activeBorder: string, borderWitdth: number, borderColor: string): React.CSSProperties {\n const direction = this.getPopupOppositeDirection();\n switch (direction) {\n case 'top':\n case 'bottom':\n return {\n ...borderStyles,\n [direction]: -borderWitdth + 2 + 'px',\n left: -borderWitdth + 'px',\n borderWidth: borderWitdth + 'px',\n ['border' + activeBorder + 'Color']: borderColor,\n } as React.CSSProperties;\n case 'left':\n case 'right':\n return {\n ...borderStyles,\n [direction]: -borderWitdth + 2 + 'px',\n top: -borderWitdth + 'px',\n borderWidth: borderWitdth + 'px',\n ['border' + activeBorder + 'Color']: borderColor,\n } as React.CSSProperties;\n default:\n throw new TypeError('Unknown direction ' + direction);\n }\n }\n\n private getPinOptions(\n popupRect: Rect,\n popupPosition: PositionObject,\n pinSize: number,\n pinOffset: number,\n borderWidth: number,\n ) {\n const bordersDelta = 2 * borderWidth;\n const outerSize = pinSize + bordersDelta;\n\n switch (popupPosition.direction) {\n case 'top':\n return {\n outerTop: popupRect.height,\n outerLeft: this.getPinLeftCoordinate(popupRect, popupPosition.align, pinSize, pinOffset) - bordersDelta,\n innerTop: -outerSize,\n innerLeft: -outerSize + bordersDelta,\n activeBorder: 'Top',\n outerSize,\n };\n case 'bottom':\n return {\n outerTop: -2 * outerSize,\n outerLeft: this.getPinLeftCoordinate(popupRect, popupPosition.align, pinSize, pinOffset) - bordersDelta,\n innerTop: -outerSize + 2 * bordersDelta,\n innerLeft: -outerSize + bordersDelta,\n activeBorder: 'Bottom',\n outerSize,\n };\n case 'left':\n return {\n outerTop: this.getPinTopCoordinate(popupRect, popupPosition.align, pinSize, pinOffset) - bordersDelta,\n outerLeft: popupRect.width,\n innerTop: -outerSize + bordersDelta,\n innerLeft: -outerSize,\n activeBorder: 'Left',\n outerSize,\n };\n case 'right':\n return {\n outerTop: this.getPinTopCoordinate(popupRect, popupPosition.align, pinSize, pinOffset) - bordersDelta,\n outerLeft: -2 * outerSize,\n innerTop: -outerSize + bordersDelta,\n innerLeft: -outerSize + 2 * bordersDelta,\n activeBorder: 'Right',\n outerSize,\n };\n default:\n throw new Error('Direction must be one of top, right, bottom, left');\n }\n }\n\n private getPinTopCoordinate(popupRect: Rect, align: string, pinHeight: number, pinOffset: number) {\n switch (align) {\n case 'top':\n return pinOffset;\n case 'middle':\n return popupRect.height / 2 - pinHeight;\n case 'bottom':\n return popupRect.height - pinOffset - 2 * pinHeight;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getPinLeftCoordinate(popupRect: Rect, align: string, pinHeight: number, pinOffset: number) {\n switch (align) {\n case 'left':\n return pinOffset;\n case 'center':\n return popupRect.width / 2 - pinHeight;\n case 'right':\n return popupRect.width - pinOffset - 2 * pinHeight;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
|
|
3
3
|
import React from 'react';
|
|
4
|
+
import { callChildRef } from "../../../lib/callChildRef/callChildRef";
|
|
4
5
|
import { canUseDOM, isBrowser } from "../../../lib/client";
|
|
5
6
|
import { getRandomID } from "../../../lib/utils";
|
|
6
7
|
import { Upgrade } from "../../../lib/Upgrades";
|
|
@@ -64,6 +65,10 @@ export var RenderContainer = /*#__PURE__*/function (_React$Component) {
|
|
|
64
65
|
if (this.domContainer && this.domContainer.parentNode !== document.body) {
|
|
65
66
|
document.body.appendChild(this.domContainer);
|
|
66
67
|
|
|
68
|
+
if (this.props.containerRef) {
|
|
69
|
+
callChildRef(this.props.containerRef, this.domContainer);
|
|
70
|
+
}
|
|
71
|
+
|
|
67
72
|
if (window.ReactTesting) {
|
|
68
73
|
window.ReactTesting.addRenderContainer(this.rootId, this);
|
|
69
74
|
}
|
|
@@ -81,6 +86,10 @@ export var RenderContainer = /*#__PURE__*/function (_React$Component) {
|
|
|
81
86
|
if (this.domContainer && this.domContainer.parentNode) {
|
|
82
87
|
this.domContainer.parentNode.removeChild(this.domContainer);
|
|
83
88
|
|
|
89
|
+
if (this.props.containerRef) {
|
|
90
|
+
callChildRef(this.props.containerRef, null);
|
|
91
|
+
}
|
|
92
|
+
|
|
84
93
|
if (window.ReactTesting) {
|
|
85
94
|
window.ReactTesting.removeRenderContainer(this.rootId);
|
|
86
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["RenderContainer.tsx"],"names":["React","canUseDOM","isBrowser","getRandomID","Upgrade","RenderInnerContainer","RenderContainer","props","domContainer","rootId","getRootId","children","mountContainer","shouldComponentUpdate","nextProps","unmountContainer","componentWillUnmount","destroyContainer","render","createContainer","document","createElement","setAttribute","getSpecificityClassName","parentNode","body","appendChild","window","ReactTesting","addRenderContainer","removeChild","removeRenderContainer","Component","__KONTUR_REACT_UI__"],"mappings":"gIAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA,SAASC,SAAT,EAAoBC,SAApB,QAAqC,kBAArC;;AAEA,SAASC,WAAT,QAA4B,iBAA5B;AACA,SAASC,OAAT,QAAwB,oBAAxB;;AAEA,SAASC,oBAAT,QAAqC,wBAArC;;;AAGA,WAAaC,eAAb;;;;;;;;AAQE,2BAAYC,KAAZ,EAAyC;AACvC,wCAAMA,KAAN,UADuC,MAJjCC,YAIiC,GAJK,IAIL,OAFxBC,MAEwB,GAFPH,eAAe,CAACI,SAAhB,EAEO;;AAGvC,QAAIR,SAAS,IAAIK,KAAK,CAACI,QAAvB,EAAiC;AAC/B,YAAKC,cAAL;AACD,KALsC;AAMxC,GAdH;;AAgBSC,EAAAA,qBAhBT,GAgBE,+BAA6BC,SAA7B,EAA8D;AAC5D,QAAI,CAAC,KAAKP,KAAL,CAAWI,QAAZ,IAAwBG,SAAS,CAACH,QAAtC,EAAgD;AAC9C,WAAKC,cAAL;AACD;AACD,QAAI,KAAKL,KAAL,CAAWI,QAAX,IAAuB,CAACG,SAAS,CAACH,QAAtC,EAAgD;AAC9C,WAAKI,gBAAL;AACD;AACD,WAAO,IAAP;AACD,GAxBH;;AA0BSC,EAAAA,oBA1BT,GA0BE,gCAA8B;AAC5B,SAAKC,gBAAL;AACD,GA5BH;;AA8BSC,EAAAA,MA9BT,GA8BE,kBAAgB;AACd,wBAAO,oBAAC,oBAAD,eAA0B,KAAKX,KAA/B,IAAsC,YAAY,EAAE,KAAKC,YAAzD,EAAuE,MAAM,EAAE,KAAKC,MAApF,IAAP;AACD,GAhCH;;AAkCUU,EAAAA,eAlCV,GAkCE,2BAA0B;AACxB,QAAIlB,SAAJ,EAAe;AACb,UAAMO,YAAY,GAAGY,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAArB;AACAb,MAAAA,YAAY,CAACc,YAAb,CAA0B,OAA1B,EAAmClB,OAAO,CAACmB,uBAAR,EAAnC;AACAf,MAAAA,YAAY,CAACc,YAAb,CAA0B,4BAA1B,OAA2D,KAAKb,MAAhE;AACA,WAAKD,YAAL,GAAoBA,YAApB;AACD;AACF,GAzCH;;AA2CUI,EAAAA,cA3CV,GA2CE,0BAAyB;AACvB,QAAI,CAAC,KAAKJ,YAAV,EAAwB;AACtB,WAAKW,eAAL;AACD;AACD,QAAI,KAAKX,YAAL,IAAqB,KAAKA,YAAL,CAAkBgB,UAAlB,KAAiCJ,QAAQ,CAACK,IAAnE,EAAyE;AACvEL,MAAAA,QAAQ,CAACK,IAAT,CAAcC,WAAd,CAA0B,KAAKlB,YAA/B;
|
|
1
|
+
{"version":3,"sources":["RenderContainer.tsx"],"names":["React","callChildRef","canUseDOM","isBrowser","getRandomID","Upgrade","RenderInnerContainer","RenderContainer","props","domContainer","rootId","getRootId","children","mountContainer","shouldComponentUpdate","nextProps","unmountContainer","componentWillUnmount","destroyContainer","render","createContainer","document","createElement","setAttribute","getSpecificityClassName","parentNode","body","appendChild","containerRef","window","ReactTesting","addRenderContainer","removeChild","removeRenderContainer","Component","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { canUseDOM, isBrowser } from '../../lib/client';\nimport { Nullable } from '../../typings/utility-types';\nimport { getRandomID } from '../../lib/utils';\nimport { Upgrade } from '../../lib/Upgrades';\n\nimport { RenderInnerContainer } from './RenderInnerContainer';\nimport { RenderContainerProps } from './RenderContainerTypes';\n\nexport class RenderContainer extends React.Component<RenderContainerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderContainer';\n\n private static getRootId = () => getRandomID();\n private domContainer: Nullable<HTMLElement> = null;\n\n private readonly rootId: string = RenderContainer.getRootId();\n\n constructor(props: RenderContainerProps) {\n super(props);\n\n if (isBrowser && props.children) {\n this.mountContainer();\n }\n }\n\n public shouldComponentUpdate(nextProps: RenderContainerProps) {\n if (!this.props.children && nextProps.children) {\n this.mountContainer();\n }\n if (this.props.children && !nextProps.children) {\n this.unmountContainer();\n }\n return true;\n }\n\n public componentWillUnmount() {\n this.destroyContainer();\n }\n\n public render() {\n return <RenderInnerContainer {...this.props} domContainer={this.domContainer} rootId={this.rootId} />;\n }\n\n private createContainer() {\n if (canUseDOM) {\n const domContainer = document.createElement('div');\n domContainer.setAttribute('class', Upgrade.getSpecificityClassName());\n domContainer.setAttribute('data-rendered-container-id', `${this.rootId}`);\n this.domContainer = domContainer;\n }\n }\n\n private mountContainer() {\n if (!this.domContainer) {\n this.createContainer();\n }\n if (this.domContainer && this.domContainer.parentNode !== document.body) {\n document.body.appendChild(this.domContainer);\n\n if (this.props.containerRef) {\n callChildRef(this.props.containerRef, this.domContainer);\n }\n\n if (window.ReactTesting) {\n window.ReactTesting.addRenderContainer(this.rootId, this);\n }\n }\n }\n\n private destroyContainer() {\n if (this.domContainer) {\n this.unmountContainer();\n this.domContainer = null;\n }\n }\n\n private unmountContainer() {\n if (this.domContainer && this.domContainer.parentNode) {\n this.domContainer.parentNode.removeChild(this.domContainer);\n\n if (this.props.containerRef) {\n callChildRef(this.props.containerRef, null);\n }\n\n if (window.ReactTesting) {\n window.ReactTesting.removeRenderContainer(this.rootId);\n }\n }\n }\n}\n"]}
|