@skbkontur/react-ui 4.22.5 → 4.22.6-next.0

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 (29) hide show
  1. package/cjs/components/Hint/Hint.d.ts +4 -3
  2. package/cjs/components/Hint/Hint.js +9 -8
  3. package/cjs/components/Hint/Hint.js.map +1 -1
  4. package/cjs/components/Tooltip/Tooltip.d.ts +10 -5
  5. package/cjs/components/Tooltip/Tooltip.js +59 -20
  6. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  7. package/cjs/internal/Popup/Popup.d.ts +15 -4
  8. package/cjs/internal/Popup/Popup.js +67 -4
  9. package/cjs/internal/Popup/Popup.js.map +1 -1
  10. package/cjs/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +24 -0
  11. package/cjs/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +1 -0
  12. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
  13. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +3 -1
  14. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  15. package/components/Hint/Hint/Hint.js +50 -45
  16. package/components/Hint/Hint/Hint.js.map +1 -1
  17. package/components/Hint/Hint.d.ts +4 -3
  18. package/components/Tooltip/Tooltip/Tooltip.js +64 -43
  19. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  20. package/components/Tooltip/Tooltip.d.ts +10 -5
  21. package/internal/Popup/Popup/Popup.js +50 -7
  22. package/internal/Popup/Popup/Popup.js.map +1 -1
  23. package/internal/Popup/Popup.d.ts +15 -4
  24. package/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +24 -0
  25. package/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +1 -0
  26. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js +2 -1
  27. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  28. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
  29. package/package.json +3 -3
@@ -18,7 +18,7 @@ import { createPropsGetter } from "../../../lib/createPropsGetter";
18
18
  import { isTheme2022 } from "../../../lib/theming/ThemeHelpers";
19
19
  import { styles } from "../Hint.styles";
20
20
  var HINT_BORDER_COLOR = 'transparent';
21
- var Positions = ['top center', 'top left', 'top right', 'bottom center', 'bottom left', 'bottom right', 'left middle', 'left top', 'left bottom', 'right middle', 'right top', 'right bottom'];
21
+ var OldPositions = ['top center', 'top left', 'top right', 'bottom center', 'bottom left', 'bottom right', 'left middle', 'left top', 'left bottom', 'right middle', 'right top', 'right bottom'];
22
22
  export
23
23
  /**
24
24
  * Всплывающая подсказка, которая по умолчанию отображается при наведении на элемент. <br/> Можно задать другие условия отображения.
@@ -49,12 +49,16 @@ var Hint = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Pu
49
49
  };
50
50
 
51
51
  _this.getPositions = function () {
52
+ if (_this.featureFlags.popupUnifyPositioning) {
53
+ return _this.props.allowedPositions;
54
+ }
55
+
56
+ var pos = _this.props.pos ? _this.props.pos : 'top';
57
+
58
+ var allowedPositions = _this.getAllowedPositions();
59
+
52
60
  if (_this.featureFlags.hintAddDynamicPositioning) {
53
61
  if (!_this.positions) {
54
- var _this$getProps = _this.getProps(),
55
- allowedPositions = _this$getProps.allowedPositions,
56
- pos = _this$getProps.pos;
57
-
58
62
  var priorityPosition;
59
63
 
60
64
  switch (pos) {
@@ -90,8 +94,8 @@ var Hint = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Pu
90
94
  return _this.positions;
91
95
  }
92
96
 
93
- return Positions.filter(function (x) {
94
- return x.startsWith(_this.getProps().pos);
97
+ return OldPositions.filter(function (x) {
98
+ return x.startsWith(pos);
95
99
  });
96
100
  };
97
101
 
@@ -131,12 +135,14 @@ var Hint = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Pu
131
135
 
132
136
  var _proto = Hint.prototype;
133
137
 
138
+ _proto.getAllowedPositions = function getAllowedPositions() {
139
+ return this.props.allowedPositions ? this.props.allowedPositions : OldPositions;
140
+ };
141
+
134
142
  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {
135
- var _this$getProps2 = this.getProps(),
136
- opened = _this$getProps2.opened,
137
- manual = _this$getProps2.manual,
138
- pos = _this$getProps2.pos,
139
- allowedPositions = _this$getProps2.allowedPositions;
143
+ var _this$getProps = this.getProps(),
144
+ opened = _this$getProps.opened,
145
+ manual = _this$getProps.manual;
140
146
 
141
147
  if (!manual) {
142
148
  return;
@@ -153,7 +159,9 @@ var Hint = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Pu
153
159
  });
154
160
  }
155
161
 
156
- if (this.featureFlags.hintAddDynamicPositioning) {
162
+ if (this.featureFlags.hintAddDynamicPositioning && !this.featureFlags.popupUnifyPositioning) {
163
+ var pos = this.props.pos ? this.props.pos : 'top';
164
+ var allowedPositions = this.props.allowedPositions ? this.props.allowedPositions : OldPositions;
157
165
  var posChanged = prevProps.pos !== pos;
158
166
  var allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);
159
167
 
@@ -192,34 +200,33 @@ var Hint = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Pu
192
200
  _proto.renderMain = function renderMain() {
193
201
  var _this3 = this;
194
202
 
195
- var _this$getProps3 = this.getProps(),
196
- disableAnimations = _this$getProps3.disableAnimations,
197
- useWrapper = _this$getProps3.useWrapper;
198
-
199
- return /*#__PURE__*/React.createElement(ReactUIFeatureFlagsContext.Consumer, null, function (flags) {
200
- var hasPin = !getFullReactUIFlagsContext(flags).kebabHintRemovePin || !isTheme2022(_this3.theme);
201
- return /*#__PURE__*/React.createElement(CommonWrapper, _extends({
202
- rootNodeRef: _this3.setRootNode
203
- }, _this3.props), /*#__PURE__*/React.createElement(Popup, {
204
- hasPin: hasPin,
205
- opened: _this3.state.opened,
206
- anchorElement: _this3.props.children,
207
- positions: _this3.getPositions(),
208
- backgroundColor: _this3.theme.hintBgColor,
209
- borderColor: HINT_BORDER_COLOR,
210
- onPositionChange: function onPositionChange(position) {
211
- return _this3.setState({
212
- position: position
213
- });
214
- },
215
- disableAnimations: disableAnimations,
216
- onMouseEnter: _this3.handleMouseEnter,
217
- onMouseLeave: _this3.handleMouseLeave,
218
- useWrapper: useWrapper,
219
- ref: _this3.popupRef,
220
- withoutMobile: true
221
- }, _this3.renderContent()));
222
- });
203
+ var _this$getProps2 = this.getProps(),
204
+ disableAnimations = _this$getProps2.disableAnimations,
205
+ useWrapper = _this$getProps2.useWrapper;
206
+
207
+ var hasPin = !this.featureFlags.kebabHintRemovePin || !isTheme2022(this.theme);
208
+ return /*#__PURE__*/React.createElement(CommonWrapper, _extends({
209
+ rootNodeRef: this.setRootNode
210
+ }, this.props), /*#__PURE__*/React.createElement(Popup, {
211
+ hasPin: hasPin,
212
+ opened: this.state.opened,
213
+ anchorElement: this.props.children,
214
+ positions: this.getPositions(),
215
+ pos: this.props.pos,
216
+ backgroundColor: this.theme.hintBgColor,
217
+ borderColor: HINT_BORDER_COLOR,
218
+ onPositionChange: function onPositionChange(position) {
219
+ return _this3.setState({
220
+ position: position
221
+ });
222
+ },
223
+ disableAnimations: disableAnimations,
224
+ onMouseEnter: this.handleMouseEnter,
225
+ onMouseLeave: this.handleMouseLeave,
226
+ useWrapper: useWrapper,
227
+ ref: this.popupRef,
228
+ withoutMobile: true
229
+ }, this.renderContent()));
223
230
  };
224
231
 
225
232
  _proto.renderContent = function renderContent() {
@@ -229,8 +236,8 @@ var Hint = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Pu
229
236
  return null;
230
237
  }
231
238
 
232
- var _this$getProps4 = this.getProps(),
233
- maxWidth = _this$getProps4.maxWidth;
239
+ var _this$getProps3 = this.getProps(),
240
+ maxWidth = _this$getProps3.maxWidth;
234
241
 
235
242
  var centerAlignPositions = ['top', 'top center', 'bottom', 'bottom center'];
236
243
  var className = cx((_cx = {}, _cx[styles.content(this.theme)] = true, _cx[styles.contentCenter(this.theme)] = centerAlignPositions.includes(this.state.position), _cx));
@@ -244,11 +251,9 @@ var Hint = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Pu
244
251
 
245
252
  return Hint;
246
253
  }(React.PureComponent), _class2.__KONTUR_REACT_UI__ = 'Hint', _class2.displayName = 'Hint', _class2.defaultProps = {
247
- pos: 'top',
248
254
  manual: false,
249
255
  opened: false,
250
256
  maxWidth: 200,
251
- allowedPositions: Positions,
252
257
  disableAnimations: isTestEnv,
253
258
  useWrapper: false
254
259
  }, _temp)) || _class;
@@ -1 +1 @@
1
- {"version":3,"sources":["Hint.tsx"],"names":["React","globalObject","isEqual","ReactUIFeatureFlagsContext","getFullReactUIFlagsContext","ThemeContext","ThemeFactory","DUMMY_LOCATION","Popup","isTestEnv","CommonWrapper","cx","rootNode","createPropsGetter","isTheme2022","styles","HINT_BORDER_COLOR","Positions","Hint","getProps","defaultProps","state","opened","manual","position","positions","popupRef","createRef","getAnchorElement","current","anchorElement","getPositions","featureFlags","hintAddDynamicPositioning","allowedPositions","pos","priorityPosition","index","indexOf","Error","join","slice","filter","x","startsWith","handleMouseEnter","e","timer","setTimeout","open","props","onMouseEnter","handleMouseLeave","clearTimeout","setState","onMouseLeave","componentDidUpdate","prevProps","posChanged","allowedChanged","componentWillUnmount","render","flags","theme","create","popupPinOffset","hintPinOffset","popupMargin","hintMargin","popupBorder","hintBorder","popupBorderRadius","hintBorderRadius","renderMain","disableAnimations","useWrapper","hasPin","kebabHintRemovePin","setRootNode","children","hintBgColor","renderContent","text","maxWidth","centerAlignPositions","className","content","contentCenter","includes","PureComponent","__KONTUR_REACT_UI__","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\nimport isEqual from 'lodash.isequal';\n\nimport {\n ReactUIFeatureFlags,\n ReactUIFeatureFlagsContext,\n getFullReactUIFlagsContext,\n} from '../../lib/featureFlagsContext';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Theme } from '../../lib/theming/Theme';\nimport { DUMMY_LOCATION, Popup, PopupPositionsType } from '../../internal/Popup';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\n\nimport { styles } from './Hint.styles';\n\nconst HINT_BORDER_COLOR = 'transparent';\n\nexport interface HintProps extends CommonProps {\n children?: React.ReactNode;\n /**\n * Переводит отображение подсказки в _\"ручной режим\"_.\n *\n * В _\"ручном режиме\"_ подсказку можно активировать только задав значение пропу `opened`.\n */\n manual?: boolean;\n /**\n * Задаёт максимальную ширину подсказки.\n */\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: (event: MouseEventType) => void;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: (event: MouseEventType) => void;\n /**\n * Если `true` - подсказка будет открыта.\n *\n * _Примечание_: работает только при `manual=true`.\n */\n opened?: boolean;\n /**\n * Расположение подсказки относительно текста.\n *\n * **Допустимые значения**: `\"top\"`, `\"right\"`, `\"bottom\"`, `\"left\"`, `\"top left\"`, `\"top center\"`, `\"top right\"`, `\"right top\"`, `\"right middle\"`, `\"right bottom\"`, `\"bottom left\"`, `\"bottom center\"`, `\"bottom right\"`, `\"left top\"`, `\"left middle\"`, `\"left bottom\"`.\n */\n pos?: 'top' | 'right' | 'bottom' | 'left' | PopupPositionsType;\n /**\n * Текст подсказки.\n */\n text: React.ReactNode;\n /**\n * Список позиций, которые хинт будет занимать. Если положение хинт в определенной позиции будет выходить\n * за край экрана, то будет выбрана следующая позиция. Обязательно должен включать позицию указанную в `pos`.\n * Для применения этого пропа необходимо включить фиче-флаг hintAddDynamicPositioning.\n */\n allowedPositions?: PopupPositionsType[];\n /**\n * Отключает анимацию.\n */\n disableAnimations?: boolean;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования хинта при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n}\n\nexport interface HintState {\n opened: boolean;\n position: PopupPositionsType;\n}\n\nconst Positions: PopupPositionsType[] = [\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\ntype DefaultProps = Required<\n Pick<HintProps, 'pos' | 'allowedPositions' | 'manual' | 'opened' | 'maxWidth' | 'disableAnimations' | 'useWrapper'>\n>;\n\n/**\n * Всплывающая подсказка, которая по умолчанию отображается при наведении на элемент. <br/> Можно задать другие условия отображения.\n */\n@rootNode\nexport class Hint extends React.PureComponent<HintProps, HintState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Hint';\n public static displayName = 'Hint';\n\n public static defaultProps: DefaultProps = {\n pos: 'top',\n manual: false,\n opened: false,\n maxWidth: 200,\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n };\n\n private getProps = createPropsGetter(Hint.defaultProps);\n\n public state: HintState = {\n opened: this.getProps().manual ? !!this.getProps().opened : false,\n position: DUMMY_LOCATION.position,\n };\n\n private timer: SafeTimer;\n private theme!: Theme;\n private featureFlags!: ReactUIFeatureFlags;\n private setRootNode!: TSetRootNode;\n private positions: Nullable<PopupPositionsType[]> = null;\n\n private popupRef = React.createRef<Popup>();\n\n public componentDidUpdate(prevProps: HintProps) {\n const { opened, manual, pos, allowedPositions } = this.getProps();\n if (!manual) {\n return;\n }\n if (this.timer) {\n globalObject.clearTimeout(this.timer);\n this.timer = null;\n }\n if (opened !== prevProps.opened) {\n this.setState({ opened: !!opened });\n }\n\n if (this.featureFlags.hintAddDynamicPositioning) {\n const posChanged = prevProps.pos !== pos;\n const allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n }\n\n public componentWillUnmount() {\n if (this.timer) {\n globalObject.clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.featureFlags = getFullReactUIFlagsContext(flags);\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.hintPinOffset,\n popupMargin: theme.hintMargin,\n popupBorder: theme.hintBorder,\n popupBorderRadius: theme.hintBorderRadius,\n },\n this.theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n public renderMain() {\n const { disableAnimations, useWrapper } = this.getProps();\n\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n const hasPin = !getFullReactUIFlagsContext(flags).kebabHintRemovePin || !isTheme2022(this.theme);\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n hasPin={hasPin}\n opened={this.state.opened}\n anchorElement={this.props.children}\n positions={this.getPositions()}\n backgroundColor={this.theme.hintBgColor}\n borderColor={HINT_BORDER_COLOR}\n onPositionChange={(position) => this.setState({ position })}\n disableAnimations={disableAnimations}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n useWrapper={useWrapper}\n ref={this.popupRef}\n withoutMobile\n >\n {this.renderContent()}\n </Popup>\n </CommonWrapper>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n public getAnchorElement = (): Nullable<Element> => {\n return this.popupRef.current?.anchorElement;\n };\n\n private renderContent() {\n if (!this.props.text) {\n return null;\n }\n\n const { maxWidth } = this.getProps();\n const centerAlignPositions = ['top', 'top center', 'bottom', 'bottom center'];\n const className = cx({\n [styles.content(this.theme)]: true,\n [styles.contentCenter(this.theme)]: centerAlignPositions.includes(this.state.position),\n });\n return (\n <div className={className} style={{ maxWidth }}>\n {this.props.text}\n </div>\n );\n }\n\n private getPositions = (): PopupPositionsType[] => {\n if (this.featureFlags.hintAddDynamicPositioning) {\n if (!this.positions) {\n const { allowedPositions, pos } = this.getProps();\n let priorityPosition: PopupPositionsType;\n switch (pos) {\n case 'top':\n priorityPosition = 'top center';\n break;\n case 'bottom':\n priorityPosition = 'bottom center';\n break;\n case 'left':\n priorityPosition = 'left middle';\n break;\n case 'right':\n priorityPosition = 'right middle';\n break;\n default:\n priorityPosition = pos;\n }\n const index = allowedPositions.indexOf(priorityPosition);\n if (index === -1) {\n throw new Error('Unexpected position passed to Hint. Expected one of: ' + allowedPositions.join(', '));\n }\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n return this.positions;\n }\n return Positions.filter((x) => x.startsWith(this.getProps().pos));\n };\n\n private handleMouseEnter = (e: MouseEventType) => {\n if (!this.getProps().manual && !this.timer) {\n this.timer = globalObject.setTimeout(this.open, 400);\n }\n\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: MouseEventType) => {\n if (!this.getProps().manual && this.timer) {\n globalObject.clearTimeout(this.timer);\n this.timer = null;\n this.setState({ opened: false });\n }\n\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private open = () => {\n this.setState({ opened: true });\n };\n}\n"]}
1
+ {"version":3,"sources":["Hint.tsx"],"names":["React","globalObject","isEqual","ReactUIFeatureFlagsContext","getFullReactUIFlagsContext","ThemeContext","ThemeFactory","DUMMY_LOCATION","Popup","isTestEnv","CommonWrapper","cx","rootNode","createPropsGetter","isTheme2022","styles","HINT_BORDER_COLOR","OldPositions","Hint","getProps","defaultProps","state","opened","manual","position","positions","popupRef","createRef","getAnchorElement","current","anchorElement","getPositions","featureFlags","popupUnifyPositioning","props","allowedPositions","pos","getAllowedPositions","hintAddDynamicPositioning","priorityPosition","index","indexOf","Error","join","slice","filter","x","startsWith","handleMouseEnter","e","timer","setTimeout","open","onMouseEnter","handleMouseLeave","clearTimeout","setState","onMouseLeave","componentDidUpdate","prevProps","posChanged","allowedChanged","componentWillUnmount","render","flags","theme","create","popupPinOffset","hintPinOffset","popupMargin","hintMargin","popupBorder","hintBorder","popupBorderRadius","hintBorderRadius","renderMain","disableAnimations","useWrapper","hasPin","kebabHintRemovePin","setRootNode","children","hintBgColor","renderContent","text","maxWidth","centerAlignPositions","className","content","contentCenter","includes","PureComponent","__KONTUR_REACT_UI__","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\nimport isEqual from 'lodash.isequal';\n\nimport {\n ReactUIFeatureFlags,\n ReactUIFeatureFlagsContext,\n getFullReactUIFlagsContext,\n} from '../../lib/featureFlagsContext';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Theme } from '../../lib/theming/Theme';\nimport { DUMMY_LOCATION, Popup, PopupPositionsType, ShortPopupPositionsType } from '../../internal/Popup';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\n\nimport { styles } from './Hint.styles';\n\nconst HINT_BORDER_COLOR = 'transparent';\n\nexport interface HintProps extends CommonProps {\n children?: React.ReactNode;\n /**\n * Переводит отображение подсказки в _\"ручной режим\"_.\n *\n * В _\"ручном режиме\"_ подсказку можно активировать только задав значение пропу `opened`.\n */\n manual?: boolean;\n /**\n * Задаёт максимальную ширину подсказки.\n */\n maxWidth?: React.CSSProperties['maxWidth'];\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: (event: MouseEventType) => void;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: (event: MouseEventType) => void;\n /**\n * Если `true` - подсказка будет открыта.\n *\n * _Примечание_: работает только при `manual=true`.\n */\n opened?: boolean;\n /**\n * Расположение подсказки относительно текста.\n *\n * **Допустимые значения**: `\"top\"`, `\"right\"`, `\"bottom\"`, `\"left\"`, `\"top left\"`, `\"top center\"`, `\"top right\"`, `\"right top\"`, `\"right middle\"`, `\"right bottom\"`, `\"bottom left\"`, `\"bottom center\"`, `\"bottom right\"`, `\"left top\"`, `\"left middle\"`, `\"left bottom\"`.\n */\n pos?: ShortPopupPositionsType | PopupPositionsType;\n /**\n * Текст подсказки.\n */\n text: React.ReactNode;\n /**\n * Список позиций, которые хинт будет занимать. Если положение хинт в определенной позиции будет выходить\n * за край экрана, то будет выбрана следующая позиция. Обязательно должен включать позицию указанную в `pos`.\n * Для применения этого пропа необходимо включить фиче-флаг hintAddDynamicPositioning.\n */\n allowedPositions?: PopupPositionsType[];\n /**\n * Отключает анимацию.\n */\n disableAnimations?: boolean;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования хинта при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n}\n\nexport interface HintState {\n opened: boolean;\n position: PopupPositionsType;\n}\n\nconst OldPositions: PopupPositionsType[] = [\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\ntype DefaultProps = Required<Pick<HintProps, 'manual' | 'opened' | 'maxWidth' | 'disableAnimations' | 'useWrapper'>>;\n\n/**\n * Всплывающая подсказка, которая по умолчанию отображается при наведении на элемент. <br/> Можно задать другие условия отображения.\n */\n@rootNode\nexport class Hint extends React.PureComponent<HintProps, HintState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Hint';\n public static displayName = 'Hint';\n\n public static defaultProps: DefaultProps = {\n manual: false,\n opened: false,\n maxWidth: 200,\n disableAnimations: isTestEnv,\n useWrapper: false,\n };\n\n private getProps = createPropsGetter(Hint.defaultProps);\n\n public state: HintState = {\n opened: this.getProps().manual ? !!this.getProps().opened : false,\n position: DUMMY_LOCATION.position,\n };\n\n private timer: SafeTimer;\n private theme!: Theme;\n private featureFlags!: ReactUIFeatureFlags;\n private setRootNode!: TSetRootNode;\n private positions: Nullable<PopupPositionsType[]> = null;\n\n private popupRef = React.createRef<Popup>();\n\n public getAllowedPositions() {\n return this.props.allowedPositions ? this.props.allowedPositions : OldPositions;\n }\n\n public componentDidUpdate(prevProps: HintProps) {\n const { opened, manual } = this.getProps();\n if (!manual) {\n return;\n }\n if (this.timer) {\n globalObject.clearTimeout(this.timer);\n this.timer = null;\n }\n if (opened !== prevProps.opened) {\n this.setState({ opened: !!opened });\n }\n\n if (this.featureFlags.hintAddDynamicPositioning && !this.featureFlags.popupUnifyPositioning) {\n const pos = this.props.pos ? this.props.pos : 'top';\n const allowedPositions = this.props.allowedPositions ? this.props.allowedPositions : OldPositions;\n const posChanged = prevProps.pos !== pos;\n const allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n }\n\n public componentWillUnmount() {\n if (this.timer) {\n globalObject.clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.featureFlags = getFullReactUIFlagsContext(flags);\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.hintPinOffset,\n popupMargin: theme.hintMargin,\n popupBorder: theme.hintBorder,\n popupBorderRadius: theme.hintBorderRadius,\n },\n this.theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n public renderMain() {\n const { disableAnimations, useWrapper } = this.getProps();\n const hasPin = !this.featureFlags.kebabHintRemovePin || !isTheme2022(this.theme);\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n hasPin={hasPin}\n opened={this.state.opened}\n anchorElement={this.props.children}\n positions={this.getPositions()}\n pos={this.props.pos}\n backgroundColor={this.theme.hintBgColor}\n borderColor={HINT_BORDER_COLOR}\n onPositionChange={(position) => this.setState({ position })}\n disableAnimations={disableAnimations}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n useWrapper={useWrapper}\n ref={this.popupRef}\n withoutMobile\n >\n {this.renderContent()}\n </Popup>\n </CommonWrapper>\n );\n }\n\n public getAnchorElement = (): Nullable<Element> => {\n return this.popupRef.current?.anchorElement;\n };\n\n private renderContent() {\n if (!this.props.text) {\n return null;\n }\n\n const { maxWidth } = this.getProps();\n const centerAlignPositions = ['top', 'top center', 'bottom', 'bottom center'];\n const className = cx({\n [styles.content(this.theme)]: true,\n [styles.contentCenter(this.theme)]: centerAlignPositions.includes(this.state.position),\n });\n return (\n <div className={className} style={{ maxWidth }}>\n {this.props.text}\n </div>\n );\n }\n\n private getPositions = (): PopupPositionsType[] | undefined => {\n if (this.featureFlags.popupUnifyPositioning) {\n return this.props.allowedPositions;\n }\n const pos = this.props.pos ? this.props.pos : 'top';\n const allowedPositions = this.getAllowedPositions();\n if (this.featureFlags.hintAddDynamicPositioning) {\n if (!this.positions) {\n let priorityPosition: PopupPositionsType;\n switch (pos) {\n case 'top':\n priorityPosition = 'top center';\n break;\n case 'bottom':\n priorityPosition = 'bottom center';\n break;\n case 'left':\n priorityPosition = 'left middle';\n break;\n case 'right':\n priorityPosition = 'right middle';\n break;\n default:\n priorityPosition = pos;\n }\n const index = allowedPositions.indexOf(priorityPosition);\n if (index === -1) {\n throw new Error('Unexpected position passed to Hint. Expected one of: ' + allowedPositions.join(', '));\n }\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n return this.positions;\n }\n return OldPositions.filter((x) => x.startsWith(pos));\n };\n\n private handleMouseEnter = (e: MouseEventType) => {\n if (!this.getProps().manual && !this.timer) {\n this.timer = globalObject.setTimeout(this.open, 400);\n }\n\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(e);\n }\n };\n\n private handleMouseLeave = (e: MouseEventType) => {\n if (!this.getProps().manual && this.timer) {\n globalObject.clearTimeout(this.timer);\n this.timer = null;\n this.setState({ opened: false });\n }\n\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(e);\n }\n };\n\n private open = () => {\n this.setState({ opened: true });\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { PopupPositionsType } from '../../internal/Popup';
2
+ import { PopupPositionsType, ShortPopupPositionsType } from '../../internal/Popup';
3
3
  import { Nullable } from '../../typings/utility-types';
4
4
  import { MouseEventType } from '../../typings/event-types';
5
5
  import { CommonProps } from '../../internal/CommonWrapper';
@@ -35,7 +35,7 @@ export interface HintProps extends CommonProps {
35
35
  *
36
36
  * **Допустимые значения**: `"top"`, `"right"`, `"bottom"`, `"left"`, `"top left"`, `"top center"`, `"top right"`, `"right top"`, `"right middle"`, `"right bottom"`, `"bottom left"`, `"bottom center"`, `"bottom right"`, `"left top"`, `"left middle"`, `"left bottom"`.
37
37
  */
38
- pos?: 'top' | 'right' | 'bottom' | 'left' | PopupPositionsType;
38
+ pos?: ShortPopupPositionsType | PopupPositionsType;
39
39
  /**
40
40
  * Текст подсказки.
41
41
  */
@@ -61,7 +61,7 @@ export interface HintState {
61
61
  opened: boolean;
62
62
  position: PopupPositionsType;
63
63
  }
64
- declare type DefaultProps = Required<Pick<HintProps, 'pos' | 'allowedPositions' | 'manual' | 'opened' | 'maxWidth' | 'disableAnimations' | 'useWrapper'>>;
64
+ declare type DefaultProps = Required<Pick<HintProps, 'manual' | 'opened' | 'maxWidth' | 'disableAnimations' | 'useWrapper'>>;
65
65
  /**
66
66
  * Всплывающая подсказка, которая по умолчанию отображается при наведении на элемент. <br/> Можно задать другие условия отображения.
67
67
  */
@@ -77,6 +77,7 @@ export declare class Hint extends React.PureComponent<HintProps, HintState> impl
77
77
  private setRootNode;
78
78
  private positions;
79
79
  private popupRef;
80
+ getAllowedPositions(): ("top center" | "top left" | "top right" | "bottom center" | "bottom left" | "bottom right" | "left middle" | "left top" | "left bottom" | "right middle" | "right top" | "right bottom")[];
80
81
  componentDidUpdate(prevProps: HintProps): void;
81
82
  componentWillUnmount(): void;
82
83
  render(): JSX.Element;
@@ -9,7 +9,7 @@ import isEqual from 'lodash.isequal';
9
9
  import { globalObject } from '@skbkontur/global-object';
10
10
  import { isNullable } from "../../../lib/utils";
11
11
  import { ThemeFactory } from "../../../lib/theming/ThemeFactory";
12
- import { DefaultPosition, Popup } from "../../../internal/Popup";
12
+ import { DefaultPosition, Popup, OldDefaultPosition } from "../../../internal/Popup";
13
13
  import { RenderLayer } from "../../../internal/RenderLayer";
14
14
  import { CrossIcon } from "../../../internal/icons/CrossIcon";
15
15
  import { containsTargetOrRenderContainer } from "../../../lib/listenFocusOutside";
@@ -21,6 +21,7 @@ import { createPropsGetter } from "../../../lib/createPropsGetter";
21
21
  import { isTheme2022 } from "../../../lib/theming/ThemeHelpers";
22
22
  import { CloseButtonIcon } from "../../../internal/CloseButtonIcon/CloseButtonIcon";
23
23
  import { isInstanceOf } from "../../../lib/isInstanceOf";
24
+ import { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from "../../../lib/featureFlagsContext";
24
25
  import { styles } from "../Tooltip.styles";
25
26
  var DEFAULT_DELAY = 100;
26
27
  export var TooltipDataTids = {
@@ -28,7 +29,7 @@ export var TooltipDataTids = {
28
29
  content: 'Tooltip__content',
29
30
  crossIcon: 'Tooltip__crossIcon'
30
31
  };
31
- var Positions = ['right bottom', 'right middle', 'right top', 'top right', 'top center', 'top left', 'left top', 'left middle', 'left bottom', 'bottom left', 'bottom center', 'bottom right'];
32
+ var OldPositions = ['right bottom', 'right middle', 'right top', 'top right', 'top center', 'top left', 'left top', 'left middle', 'left bottom', 'bottom left', 'bottom center', 'bottom right'];
32
33
  export var Tooltip = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$PureComponent) {
33
34
  _inheritsLoose(Tooltip, _React$PureComponent);
34
35
 
@@ -70,6 +71,36 @@ export var Tooltip = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
70
71
  return (_this$popupRef$curren = _this.popupRef.current) == null ? void 0 : _this$popupRef$curren.anchorElement;
71
72
  };
72
73
 
74
+ _this.getPositions = function () {
75
+ if (_this.featureFlags.popupUnifyPositioning) {
76
+ return _this.props.allowedPositions;
77
+ }
78
+
79
+ if (!_this.positions) {
80
+ var pos;
81
+
82
+ if (_this.props.pos) {
83
+ pos = _this.props.pos;
84
+ } else if (_this.featureFlags.popupUnifyPositioning) {
85
+ pos = DefaultPosition;
86
+ } else {
87
+ pos = OldDefaultPosition;
88
+ }
89
+
90
+ var allowedPositions = _this.getAllowedPositions();
91
+
92
+ var index = allowedPositions.indexOf(pos);
93
+
94
+ if (index === -1) {
95
+ throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));
96
+ }
97
+
98
+ _this.positions = [].concat(allowedPositions.slice(index), allowedPositions.slice(0, index));
99
+ }
100
+
101
+ return _this.positions;
102
+ };
103
+
73
104
  _this.refContent = function (node) {
74
105
  _this.contentElement = node;
75
106
  };
@@ -179,21 +210,27 @@ export var Tooltip = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
179
210
 
180
211
  var _proto = Tooltip.prototype;
181
212
 
213
+ _proto.getAllowedPositions = function getAllowedPositions() {
214
+ return this.props.allowedPositions ? this.props.allowedPositions : OldPositions;
215
+ };
216
+
182
217
  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {
183
218
  var _this$getProps = this.getProps(),
184
- trigger = _this$getProps.trigger,
185
- allowedPositions = _this$getProps.allowedPositions,
186
- pos = _this$getProps.pos;
219
+ trigger = _this$getProps.trigger;
187
220
 
188
221
  if (trigger === 'closed' && this.state.opened) {
189
222
  this.close();
190
223
  }
191
224
 
192
- var posChanged = prevProps.pos !== pos;
193
- var allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);
225
+ if (this.featureFlags.hintAddDynamicPositioning && !this.featureFlags.popupUnifyPositioning) {
226
+ var pos = this.props.pos ? this.props.pos : OldDefaultPosition;
227
+ var allowedPositions = this.getAllowedPositions();
228
+ var posChanged = prevProps.pos !== pos;
229
+ var allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);
194
230
 
195
- if (posChanged || allowedChanged) {
196
- this.positions = null;
231
+ if (posChanged || allowedChanged) {
232
+ this.positions = null;
233
+ }
197
234
  }
198
235
  };
199
236
 
@@ -204,20 +241,23 @@ export var Tooltip = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
204
241
  _proto.render = function render() {
205
242
  var _this2 = this;
206
243
 
207
- return /*#__PURE__*/React.createElement(ThemeContext.Consumer, null, function (theme) {
208
- _this2.theme = theme;
209
- return /*#__PURE__*/React.createElement(ThemeContext.Provider, {
210
- value: ThemeFactory.create({
211
- popupPinOffset: theme.tooltipPinOffset,
212
- popupMargin: theme.tooltipMargin,
213
- popupBorder: theme.tooltipBorder,
214
- popupBorderRadius: theme.tooltipBorderRadius,
215
- popupPinSize: theme.tooltipPinSize,
216
- popupPinOffsetX: theme.tooltipPinOffsetX,
217
- popupPinOffsetY: theme.tooltipPinOffsetY,
218
- popupBackground: theme.tooltipBg
219
- }, theme)
220
- }, _this2.renderMain());
244
+ return /*#__PURE__*/React.createElement(ReactUIFeatureFlagsContext.Consumer, null, function (flags) {
245
+ _this2.featureFlags = getFullReactUIFlagsContext(flags);
246
+ return /*#__PURE__*/React.createElement(ThemeContext.Consumer, null, function (theme) {
247
+ _this2.theme = theme;
248
+ return /*#__PURE__*/React.createElement(ThemeContext.Provider, {
249
+ value: ThemeFactory.create({
250
+ popupPinOffset: theme.tooltipPinOffset,
251
+ popupMargin: theme.tooltipMargin,
252
+ popupBorder: theme.tooltipBorder,
253
+ popupBorderRadius: theme.tooltipBorderRadius,
254
+ popupPinSize: theme.tooltipPinSize,
255
+ popupPinOffsetX: theme.tooltipPinOffsetX,
256
+ popupPinOffsetY: theme.tooltipPinOffsetY,
257
+ popupBackground: theme.tooltipBg
258
+ }, theme)
259
+ }, _this2.renderMain());
260
+ });
221
261
  });
222
262
  };
223
263
 
@@ -313,6 +353,7 @@ export var Tooltip = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
313
353
  opened: this.state.opened,
314
354
  disableAnimations: disableAnimations,
315
355
  positions: this.getPositions(),
356
+ pos: this.props.pos,
316
357
  ignoreHover: trigger === 'hoverAnchor',
317
358
  onOpen: this.props.onOpen,
318
359
  onClose: this.props.onClose,
@@ -322,24 +363,6 @@ export var Tooltip = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
322
363
  }, popupProps), content));
323
364
  };
324
365
 
325
- _proto.getPositions = function getPositions() {
326
- if (!this.positions) {
327
- var _this$getProps3 = this.getProps(),
328
- allowedPositions = _this$getProps3.allowedPositions,
329
- pos = _this$getProps3.pos;
330
-
331
- var index = allowedPositions.indexOf(pos);
332
-
333
- if (index === -1) {
334
- throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));
335
- }
336
-
337
- this.positions = [].concat(allowedPositions.slice(index), allowedPositions.slice(0, index));
338
- }
339
-
340
- return this.positions;
341
- };
342
-
343
366
  _proto.getPopupAndLayerProps = function getPopupAndLayerProps() {
344
367
  var props = this.props;
345
368
  var useWrapper = !!props.children && this.getProps().useWrapper;
@@ -447,9 +470,7 @@ export var Tooltip = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function
447
470
  warning(!(Array.isArray(children) && props.useWrapper === false), "[" + componentName + "]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly");
448
471
  }
449
472
  }, _class2.defaultProps = {
450
- pos: DefaultPosition,
451
473
  trigger: 'hover',
452
- allowedPositions: Positions,
453
474
  disableAnimations: isTestEnv,
454
475
  useWrapper: false,
455
476
  delayBeforeShow: DEFAULT_DELAY
@@ -1 +1 @@
1
- {"version":3,"sources":["Tooltip.tsx"],"names":["React","warning","isEqual","globalObject","isNullable","ThemeFactory","DefaultPosition","Popup","RenderLayer","CrossIcon","containsTargetOrRenderContainer","ThemeContext","isTestEnv","CommonWrapper","rootNode","createPropsGetter","isTheme2022","CloseButtonIcon","isInstanceOf","styles","DEFAULT_DELAY","TooltipDataTids","root","content","crossIcon","Positions","Tooltip","getProps","defaultProps","state","opened","focused","contentElement","positions","clickedOutside","popupRef","createRef","renderContent","props","render","refContent","tooltipContent","theme","renderCloseButton","getAnchorElement","current","anchorElement","node","open","setState","close","handleMouseEnter","event","isHoverAnchor","trigger","target","clearHoverTimeout","hoverTimeout","setTimeout","delayBeforeShow","handleMouseLeave","relatedTarget","delay","handleClick","handleClickOutsideAnchor","isClickOutsideContent","onCloseRequest","handleFocus","handleBlur","handleCloseButtonClick","stopPropagation","onCloseClick","defaultPrevented","componentDidUpdate","prevProps","allowedPositions","pos","posChanged","allowedChanged","componentWillUnmount","create","popupPinOffset","tooltipPinOffset","popupMargin","tooltipMargin","popupBorder","tooltipBorder","popupBorderRadius","tooltipBorderRadius","popupPinSize","tooltipPinSize","popupPinOffsetX","tooltipPinOffsetX","popupPinOffsetY","tooltipPinOffsetY","popupBackground","tooltipBg","renderMain","hasCross","closeButton","undefined","triggersWithoutCloseButton","includes","icon","parseInt","tooltipCloseBtnSide","tooltipCloseBtnColor","tooltipCloseBtnHoverColor","cross","show","hide","getPopupAndLayerProps","popupProps","layerProps","active","children","popup","renderPopup","disableAnimations","setRootNode","getPositions","onOpen","onClose","index","indexOf","Error","join","slice","useWrapper","onClickOutside","onMouseEnter","onMouseLeave","onClick","onFocus","onBlur","clearTimeout","Element","PureComponent","__KONTUR_REACT_UI__","displayName","propTypes","propName","componentName","Array","isArray"],"mappings":"2JAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,OAAP,MAAoB,SAApB;AACA,OAAOC,OAAP,MAAoB,gBAApB;AACA,SAASC,YAAT,QAAwC,0BAAxC;;AAEA,SAASC,UAAT,QAA2B,iBAA3B;AACA,SAASC,YAAT,QAA6B,gCAA7B;AACA,SAASC,eAAT,EAA0BC,KAA1B,QAAuE,sBAAvE;AACA,SAASC,WAAT,QAA8C,4BAA9C;AACA,SAASC,SAAT,QAA0B,gCAA1B;;;AAGA,SAASC,+BAAT,QAAgD,8BAAhD;AACA,SAASC,YAAT,QAA6B,gCAA7B;;AAEA,SAASC,SAAT,QAA0B,8BAA1B;AACA,SAAsBC,aAAtB,QAA2C,8BAA3C;AACA,SAASC,QAAT,QAAuC,oBAAvC;;AAEA,SAASC,iBAAT,QAAkC,6BAAlC;AACA,SAASC,WAAT,QAA4B,gCAA5B;AACA,SAASC,eAAT,QAAgC,gDAAhC;AACA,SAASC,YAAT,QAA6B,wBAA7B;;AAEA,SAASC,MAAT,QAAuB,kBAAvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsHA,IAAMC,aAAa,GAAG,GAAtB;;;;;;;AAOA,OAAO,IAAMC,eAAe,GAAG;AAC7BC,EAAAA,IAAI,EAAE,eADuB;AAE7BC,EAAAA,OAAO,EAAE,kBAFoB;AAG7BC,EAAAA,SAAS,EAAE,oBAHkB,EAAxB;;;AAMP,IAAMC,SAA+B,GAAG;AACtC,cADsC;AAEtC,cAFsC;AAGtC,WAHsC;AAItC,WAJsC;AAKtC,YALsC;AAMtC,UANsC;AAOtC,UAPsC;AAQtC,aARsC;AAStC,aATsC;AAUtC,aAVsC;AAWtC,eAXsC;AAYtC,cAZsC,CAAxC;;;;;;;;AAoBA,WAAaC,OAAb,GADCZ,QACD;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BUa,IAAAA,QA3BV,GA2BqBZ,iBAAiB,CAACW,OAAO,CAACE,YAAT,CA3BtC;;;;;AAgCSC,IAAAA,KAhCT,GAgC+B,EAAEC,MAAM,EAAE,KAAV,EAAiBC,OAAO,EAAE,KAA1B,EAhC/B;;;AAmCUC,IAAAA,cAnCV,GAmCkD,IAnClD;AAoCUC,IAAAA,SApCV,GAoCsD,IApCtD;AAqCUC,IAAAA,cArCV,GAqC2B,IArC3B;;;AAwCUC,IAAAA,QAxCV,gBAwCqBnC,KAAK,CAACoC,SAAN,EAxCrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFSC,IAAAA,aAvFT,GAuFyB,YAAM;AAC3B,UAAMd,OAAO,GAAG,MAAKe,KAAL,CAAWC,MAAX,GAAoB,MAAKD,KAAL,CAAWC,MAAX,EAApB,GAA0C,IAA1D;AACA,UAAInC,UAAU,CAACmB,OAAD,CAAd,EAAyB;AACvB,eAAO,IAAP;AACD;;AAED;AACE,qCAAK,GAAG,EAAE,MAAKiB,UAAf,EAA2B,SAAS,EAAErB,MAAM,CAACsB,cAAP,CAAsB,MAAKC,KAA3B,CAAtC,EAAyE,YAAUrB,eAAe,CAACE,OAAnG;AACGA,QAAAA,OADH;AAEG,cAAKoB,iBAAL,EAFH,CADF;;;AAMD,KAnGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqISC,IAAAA,gBArIT,GAqI4B,YAAyB;AACjD,sCAAO,MAAKT,QAAL,CAAcU,OAArB,qBAAO,sBAAuBC,aAA9B;AACD,KAvIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqNUN,IAAAA,UArNV,GAqNuB,UAACO,IAAD,EAA8B;AACjD,YAAKf,cAAL,GAAsBe,IAAtB;AACD,KAvNH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4TUC,IAAAA,IA5TV,GA4TiB,oBAAM,MAAKC,QAAL,CAAc,EAAEnB,MAAM,EAAE,IAAV,EAAd,CAAN,EA5TjB;;AA8TUoB,IAAAA,KA9TV,GA8TkB,oBAAM,MAAKD,QAAL,CAAc,EAAEnB,MAAM,EAAE,KAAV,EAAd,CAAN,EA9TlB;;;;;;;;;AAuUUqB,IAAAA,gBAvUV,GAuU6B,UAACC,KAAD,EAA2B;AACpD,UAAMC,aAAa,GAAG,MAAK1B,QAAL,GAAgB2B,OAAhB,KAA4B,aAAlD;AACA,UAAID,aAAa,IAAID,KAAK,CAACG,MAAN,KAAiB,MAAKvB,cAA3C,EAA2D;AACzD;AACD;;AAED,YAAKwB,iBAAL;AACA,YAAKC,YAAL,GAAoBtD,YAAY,CAACuD,UAAb,CAAwB,MAAKV,IAA7B,EAAmC,MAAKrB,QAAL,GAAgBgC,eAAnD,CAApB;AACD,KA/UH;;AAiVUC,IAAAA,gBAjVV,GAiV6B,UAACR,KAAD,EAA2B;AACpD,UAAME,OAAO,GAAG,MAAK3B,QAAL,GAAgB2B,OAAhC;AACA;AACGA,MAAAA,OAAO,KAAK,aAAZ,IAA6B,MAAKzB,KAAL,CAAWE,OAAzC;AACCuB,MAAAA,OAAO,KAAK,OAAZ,IAAuBF,KAAK,CAACS,aAAN,KAAwB,MAAK7B,cAFvD;AAGE;AACA;AACD;;AAED,YAAKwB,iBAAL;;AAEA,UAAIF,OAAO,KAAK,aAAhB,EAA+B;AAC7B,cAAKJ,KAAL;AACD,OAFD,MAEO;AACL,cAAKO,YAAL,GAAoBtD,YAAY,CAACuD,UAAb,CAAwB,MAAKR,KAA7B,EAAoCxB,OAAO,CAACoC,KAA5C,CAApB;AACD;AACF,KAjWH;;AAmWUC,IAAAA,WAnWV,GAmWwB,YAAM;AAC1B,YAAKf,IAAL;AACD,KArWH;;AAuWUgB,IAAAA,wBAvWV,GAuWqC,UAACZ,KAAD,EAAkB;AACnD,YAAKlB,cAAL,GAAsB,MAAK+B,qBAAL,CAA2Bb,KAA3B,CAAtB;AACA,UAAI,MAAKlB,cAAT,EAAyB;AACvB,YAAI,MAAKI,KAAL,CAAW4B,cAAf,EAA+B;AAC7B,gBAAK5B,KAAL,CAAW4B,cAAX,CAA0Bd,KAA1B;AACD;AACD,cAAKF,KAAL;AACD;AACF,KA/WH;;;;;;;;;;AAyXUiB,IAAAA,WAzXV,GAyXwB,YAAM;AAC1B,YAAKlB,QAAL,CAAc,EAAElB,OAAO,EAAE,IAAX,EAAd;AACA,YAAKiB,IAAL;AACD,KA5XH;;AA8XUoB,IAAAA,UA9XV,GA8XuB,YAAM;AACzB,UAAMd,OAAO,GAAG,MAAK3B,QAAL,GAAgB2B,OAAhC;AACA,UAAIA,OAAO,KAAK,aAAZ,IAA6B,MAAKpB,cAAtC,EAAsD;AACpD,cAAKgB,KAAL;AACD;;AAED,UAAII,OAAO,KAAK,OAAhB,EAAyB;AACvB,cAAKJ,KAAL;AACD;;AAED,YAAKhB,cAAL,GAAsB,IAAtB;AACA,YAAKe,QAAL,CAAc,EAAElB,OAAO,EAAE,KAAX,EAAd;AACD,KA1YH;;AA4YUsC,IAAAA,sBA5YV,GA4YmC,UAACjB,KAAD,EAA0C;AACzEA,MAAAA,KAAK,CAACkB,eAAN;;AAEA,UAAI,MAAKhC,KAAL,CAAWiC,YAAf,EAA6B;AAC3B,cAAKjC,KAAL,CAAWiC,YAAX,CAAwBnB,KAAxB;AACD;;AAED,UAAIA,KAAK,CAACoB,gBAAV,EAA4B;AAC1B;AACD;;AAED,UAAI,MAAKlC,KAAL,CAAW4B,cAAf,EAA+B;AAC7B,cAAK5B,KAAL,CAAW4B,cAAX,CAA0Bd,KAA1B;AACD;;AAED,YAAKF,KAAL;AACD,KA5ZH,qDAyCSuB,kBAzCT,GAyCE,4BAA0BC,SAA1B,EAAmD,CACjD,qBAA2C,KAAK/C,QAAL,EAA3C,CAAQ2B,OAAR,kBAAQA,OAAR,CAAiBqB,gBAAjB,kBAAiBA,gBAAjB,CAAmCC,GAAnC,kBAAmCA,GAAnC,CACA,IAAItB,OAAO,KAAK,QAAZ,IAAwB,KAAKzB,KAAL,CAAWC,MAAvC,EAA+C,CAC7C,KAAKoB,KAAL,GACD,CACD,IAAM2B,UAAU,GAAGH,SAAS,CAACE,GAAV,KAAkBA,GAArC,CACA,IAAME,cAAc,GAAG,CAAC5E,OAAO,CAACwE,SAAS,CAACC,gBAAX,EAA6BA,gBAA7B,CAA/B,CAEA,IAAIE,UAAU,IAAIC,cAAlB,EAAkC,CAChC,KAAK7C,SAAL,GAAiB,IAAjB,CACD,CACF,CApDH,QAsDS8C,oBAtDT,GAsDE,gCAA8B,CAC5B,KAAKvB,iBAAL,GACD,CAxDH,QA0DSjB,MA1DT,GA0DE,kBAAgB,mBACd,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAACG,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,oBACE,oBAAC,YAAD,CAAc,QAAd,IACE,KAAK,EAAErC,YAAY,CAAC2E,MAAb,CACL,EACEC,cAAc,EAAEvC,KAAK,CAACwC,gBADxB,EAEEC,WAAW,EAAEzC,KAAK,CAAC0C,aAFrB,EAGEC,WAAW,EAAE3C,KAAK,CAAC4C,aAHrB,EAIEC,iBAAiB,EAAE7C,KAAK,CAAC8C,mBAJ3B,EAKEC,YAAY,EAAE/C,KAAK,CAACgD,cALtB,EAMEC,eAAe,EAAEjD,KAAK,CAACkD,iBANzB,EAOEC,eAAe,EAAEnD,KAAK,CAACoD,iBAPzB,EAQEC,eAAe,EAAErD,KAAK,CAACsD,SARzB,EADK,EAWLtD,KAXK,CADT,IAeG,MAAI,CAACuD,UAAL,EAfH,CADF,CAmBD,CAtBH,CADF,CA0BD,CArFH,QAqGStD,iBArGT,GAqGE,6BAA2B,CACzB,IAAMuD,QAAQ,GACZ,KAAK5D,KAAL,CAAW6D,WAAX,KAA2BC,SAA3B,GACI,CAAC1E,OAAO,CAAC2E,0BAAR,CAAmCC,QAAnC,CAA4C,KAAK3E,QAAL,GAAgB2B,OAA5D,CADL,GAEI,KAAKhB,KAAL,CAAW6D,WAHjB,CAKA,IAAI,CAACD,QAAL,EAAe,CACb,OAAO,IAAP,CACD,CAED,IAAMK,IAAI,GAAGvF,WAAW,CAAC,KAAK0B,KAAN,CAAX,gBACX,oBAAC,eAAD,IACE,QAAQ,EAAE,KADZ,EAEE,IAAI,EAAE8D,QAAQ,CAAC,KAAK9D,KAAL,CAAW+D,mBAAZ,CAFhB,EAGE,KAAK,EAAE,KAAK/D,KAAL,CAAWgE,oBAHpB,EAIE,UAAU,EAAE,KAAKhE,KAAL,CAAWiE,yBAJzB,GADW,gBAQX,oBAAC,SAAD,OARF,CAWA,oBACE,6BACE,SAAS,EAAExF,MAAM,CAACyF,KAAP,CAAa,KAAKlE,KAAlB,CADb,EAEE,OAAO,EAAE,KAAK2B,sBAFhB,EAGE,YAAUhD,eAAe,CAACG,SAH5B,IAKG+E,IALH,CADF,CASD,CAnIH,EAyIE;AACF;AACA;AACA;AACA,KA7IA,OA8ISM,IA9IT,GA8IE,gBAAc,CACZ,IAAI,KAAKhF,KAAL,CAAWC,MAAf,EAAuB,CACrB,OACD,CACD,IAAMwB,OAAO,GAAG,KAAK3B,QAAL,GAAgB2B,OAAhC,CACA,IAAIA,OAAO,KAAK,QAAZ,IAAwBA,OAAO,KAAK,QAAxC,EAAkD,CAChDrD,OAAO,CAAC,IAAD,gEAAmEqD,OAAnE,OAAP,CACA,OACD,CACD,KAAKN,IAAL,GACD,CAxJH,CA0JE;AACF;AACA;AACA;AACA,KA9JA,QA+JS8D,IA/JT,GA+JE,gBAAc,CACZ,IAAMxD,OAAO,GAAG,KAAK3B,QAAL,GAAgB2B,OAAhC,CACA,IAAIA,OAAO,KAAK,QAAZ,IAAwBA,OAAO,KAAK,QAAxC,EAAkD,CAChDrD,OAAO,CAAC,IAAD,gEAAmEqD,OAAnE,OAAP,CACA,OACD,CACD,KAAKJ,KAAL,GACD,CAtKH,QAwKU+C,UAxKV,GAwKE,sBAAqB,CACnB,IAAM3D,KAAK,GAAG,KAAKA,KAAnB,CACA,IAAMf,OAAO,GAAG,KAAKc,aAAL,EAAhB,CACA,4BAAuD,KAAK0E,qBAAL,EAAvD,CAAQC,UAAR,yBAAQA,UAAR,gDAAoBC,UAApB,CAAoBA,UAApB,uCAAiC,EAAEC,MAAM,EAAE,KAAV,EAAjC,0BACA,IAAMpE,aAAa,GAAGR,KAAK,CAAC6E,QAAN,IAAkB7E,KAAK,CAACQ,aAA9C,CACA,IAAMsE,KAAK,GAAG,KAAKC,WAAL,CAAiBvE,aAAjB,EAAgCkE,UAAhC,EAA4CzF,OAA5C,CAAd,CAEA,oBACE,oBAAC,WAAD,eAAiB0F,UAAjB,IAA6B,gBAAgB,EAAE,KAAKrE,gBAApD,KACGwE,KADH,CADF,CAKD,CApLH,QAsLUC,WAtLV,GAsLE,qBACEvE,aADF,EAEEkE,UAFF,EAGEzF,OAHF,EAIE,CACA,sBAAuC,KAAKI,QAAL,EAAvC,CAAQ2F,iBAAR,mBAAQA,iBAAR,CAA2BhE,OAA3B,mBAA2BA,OAA3B,CACA,oBACE,oBAAC,aAAD,aAAe,WAAW,EAAE,KAAKiE,WAAjC,IAAkD,KAAKjF,KAAvD,gBACE,oBAAC,KAAD,aACE,YAAUjB,eAAe,CAACC,IAD5B,EAEE,aAAa,EAAEwB,aAFjB,EAGE,MAAM,MAHR,EAIE,SAAS,MAJX,EAKE,QAAQ,EAAC,MALX,EAME,MAAM,EAAE,KAAKjB,KAAL,CAAWC,MANrB,EAOE,iBAAiB,EAAEwF,iBAPrB,EAQE,SAAS,EAAE,KAAKE,YAAL,EARb,EASE,WAAW,EAAElE,OAAO,KAAK,aAT3B,EAUE,MAAM,EAAE,KAAKhB,KAAL,CAAWmF,MAVrB,EAWE,OAAO,EAAE,KAAKnF,KAAL,CAAWoF,OAXtB,EAYE,gCAAgC,MAZlC,EAaE,GAAG,EAAE,KAAKvF,QAbZ,EAcE,aAAa,MAdf,IAeM6E,UAfN,GAiBGzF,OAjBH,CADF,CADF,CAuBD,CAnNH,QAyNUiG,YAzNV,GAyNE,wBAAuB,CACrB,IAAI,CAAC,KAAKvF,SAAV,EAAqB,CACnB,sBAAkC,KAAKN,QAAL,EAAlC,CAAQgD,gBAAR,mBAAQA,gBAAR,CAA0BC,GAA1B,mBAA0BA,GAA1B,CACA,IAAM+C,KAAK,GAAGhD,gBAAgB,CAACiD,OAAjB,CAAyBhD,GAAzB,CAAd,CACA,IAAI+C,KAAK,KAAK,CAAC,CAAf,EAAkB,CAChB,MAAM,IAAIE,KAAJ,CAAU,6DAA6DlD,gBAAgB,CAACmD,IAAjB,CAAsB,IAAtB,CAAvE,CAAN,CACD,CAED,KAAK7F,SAAL,aAAqB0C,gBAAgB,CAACoD,KAAjB,CAAuBJ,KAAvB,CAArB,EAAuDhD,gBAAgB,CAACoD,KAAjB,CAAuB,CAAvB,EAA0BJ,KAA1B,CAAvD,EACD,CAED,OAAO,KAAK1F,SAAZ,CACD,CArOH,QAuOU8E,qBAvOV,GAuOE,iCAGE,CACA,IAAMzE,KAAK,GAAG,KAAKA,KAAnB,CACA,IAAM0F,UAAU,GAAG,CAAC,CAAC1F,KAAK,CAAC6E,QAAR,IAAoB,KAAKxF,QAAL,GAAgBqG,UAAvD,CACA,IAAM1E,OAAO,GAAG,KAAK3B,QAAL,GAAgB2B,OAAhC,CAEA,QAAQA,OAAR,GACE,KAAK,QAAL,CACE,OAAO,EACL2D,UAAU,EAAE,EACVC,MAAM,EAAE,IADE,EAEVe,cAAc,EAAE,KAAKjE,wBAFX,EADP,EAKLgD,UAAU,EAAE,EACVlF,MAAM,EAAE,IADE,EAEVkG,UAAU,EAAVA,UAFU,EALP,EAAP,CAWF,KAAK,QAAL,CACE,OAAO,EACLhB,UAAU,EAAE,EACVlF,MAAM,EAAE,KADE,EAEVkG,UAAU,EAAVA,UAFU,EADP,EAAP,CAOF,KAAK,aAAL,CACA,KAAK,OAAL,CACE,OAAO,EACLhB,UAAU,EAAE,EACVkB,YAAY,EAAE,KAAK/E,gBADT,EAEVgF,YAAY,EAAE,KAAKvE,gBAFT,EAGVoE,UAAU,EAAVA,UAHU,EADP,EAAP,CAOF,KAAK,QAAL,CACE,OAAO,EACLhB,UAAU,EAAE,EACVgB,UAAU,EAAVA,UADU,EADP,EAAP,CAKF,KAAK,OAAL,CACE,OAAO,EACLf,UAAU,EAAE,EACVC,MAAM,EAAE,KAAKrF,KAAL,CAAWC,MADT,EAEVmG,cAAc,EAAE,KAAKjE,wBAFX,EADP,EAKLgD,UAAU,EAAE,EACVoB,OAAO,EAAE,KAAKrE,WADJ,EAEViE,UAAU,EAAVA,UAFU,EALP,EAAP,CAWF,KAAK,OAAL,CACE,OAAO,EACLhB,UAAU,EAAE,EACVqB,OAAO,EAAE,KAAKlE,WADJ,EAEVmE,MAAM,EAAE,KAAKlE,UAFH,EAGV4D,UAAU,EAAVA,UAHU,EADP,EAAP,CAQF,KAAK,aAAL,CACE,OAAO,EACLf,UAAU,EAAE,EACVC,MAAM,EAAE,KAAKrF,KAAL,CAAWC,MADT,EAEVmG,cAAc,EAAE,KAAKjE,wBAFX,EADP,EAKLgD,UAAU,EAAE,EACVqB,OAAO,EAAE,KAAKlE,WADJ,EAEVmE,MAAM,EAAE,KAAKlE,UAFH,EAGV8D,YAAY,EAAE,KAAK/E,gBAHT,EAIVgF,YAAY,EAAE,KAAKvE,gBAJT,EAKVoE,UAAU,EAAVA,UALU,EALP,EAAP,CAcF,QACE,MAAM,IAAIH,KAAJ,CAAU,gCAAgCvE,OAA1C,CAAN,CAzEJ,CA2ED,CA1TH,QAgUUE,iBAhUV,GAgUE,6BAA4B,CAC1B,IAAI,KAAKC,YAAT,EAAuB,CACrBtD,YAAY,CAACoI,YAAb,CAA0B,KAAK9E,YAA/B,EACA,KAAKA,YAAL,GAAoB,IAApB,CACD,CACF,CArUH,QAiXUQ,qBAjXV,GAiXE,+BAA8Bb,KAA9B,EAA4C,CAC1C,IAAI,KAAKpB,cAAL,IAAuBd,YAAY,CAACkC,KAAK,CAACG,MAAP,EAAepD,YAAY,CAACqI,OAA5B,CAAvC,EAA6E,CAC3E,OAAO,CAAC9H,+BAA+B,CAAC0C,KAAK,CAACG,MAAP,CAA/B,CAA8C,KAAKvB,cAAnD,CAAR,CACD,CAED,OAAO,IAAP,CACD,CAvXH,kBAA6BhC,KAAK,CAACyI,aAAnC,WACgBC,mBADhB,GACsC,SADtC,UAEgBC,WAFhB,GAE8B,SAF9B,UAIgBC,SAJhB,GAI4B,EACxBzB,QADwB,oBACf7E,KADe,EACMuG,QADN,EACoCC,aADpC,EAC2D,CACjF,IAAM3B,QAAQ,GAAG7E,KAAK,CAACuG,QAAD,CAAtB,CACA5I,OAAO,CACLkH,QAAQ,IAAI7E,KAAK,CAACQ,aADb,QAEDgG,aAFC,0EAEiFA,aAFjF,uBAAP,CAIA7I,OAAO,CACL,EAAE8I,KAAK,CAACC,OAAN,CAAc7B,QAAd,KAA2B7E,KAAK,CAAC0F,UAAN,KAAqB,KAAlD,CADK,QAEDc,aAFC,2HAAP,CAID,CAXuB,EAJ5B,UAkBgBlH,YAlBhB,GAkB6C,EACzCgD,GAAG,EAAEtE,eADoC,EAEzCgD,OAAO,EAAE,OAFgC,EAGzCqB,gBAAgB,EAAElD,SAHuB,EAIzC6F,iBAAiB,EAAE1G,SAJsB,EAKzCoH,UAAU,EAAE,KAL6B,EAMzCrE,eAAe,EAAEvC,aANwB,EAlB7C,UA6BgB0C,KA7BhB,GA6BwB1C,aA7BxB,UA8BiBiF,0BA9BjB,GA8BgE,CAAC,OAAD,EAAU,aAAV,EAAyB,OAAzB,EAAkC,aAAlC,CA9BhE","sourcesContent":["import React from 'react';\nimport warning from 'warning';\nimport isEqual from 'lodash.isequal';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\n\nimport { isNullable } from '../../lib/utils';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { DefaultPosition, Popup, PopupProps, PopupPositionsType } from '../../internal/Popup';\nimport { RenderLayer, RenderLayerProps } from '../../internal/RenderLayer';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { CloseButtonIcon } from '../../internal/CloseButtonIcon/CloseButtonIcon';\nimport { isInstanceOf } from '../../lib/isInstanceOf';\n\nimport { styles } from './Tooltip.styles';\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /**\n * Относительно какого элемента позиционировать тултип\n */\n anchorElement?: HTMLElement;\n\n /**\n * Если не указан `anchorElement` то тултип будет позиционироваться\n * относительно дочерних элементов\n */\n children?: React.ReactNode;\n\n className?: string;\n\n /**\n * Показывать крестик для закрытия тултипа. По-умолчанию крестик\n * показывается если проп *trigger* не `hover` и не `focus`.\n */\n closeButton?: boolean;\n\n /**\n * Функция, которая возвращает содержимое тултипа.\n *\n * Если эта функция вернула `null`, то тултип не показывается.\n */\n render?: Nullable<() => React.ReactNode>;\n\n /**\n * Значение по умолчанию: `\"top left\"`.\n */\n pos?: PopupPositionsType;\n\n /**\n * Триггер открытия тултипа\n * ```ts\n * type TooltipTrigger =\n * | 'hover'\n * | 'click'\n * | 'focus'\n * | 'hover&focus'\n * | 'opened'\n * | 'closed'\n * | 'hoverAnchor'\n * | 'manual';\n * ```\n */\n trigger?: TooltipTrigger;\n\n /**\n * Хэндлер, вызываемый при клике по крестику\n */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * Хэндлер, вызываемый при клике по крестику или\n * снаружи тултипа\n */\n onCloseRequest?: (event?: Event | React.MouseEvent) => void;\n\n /**\n * Хэндлер, вызываемый при закрытии тултипа\n */\n onClose?: () => void;\n\n /**\n * Хэндлер, вызываемый при открытии тултипа\n */\n onOpen?: () => void;\n\n /**\n * Список позиций, которые тултип будет занимать.\n * Если положение тултипа в определенной позиции\n * будет выходить за край экрана, то будет выбрана\n * следующая позиция. Обязательно должен включать\n * позицию указанную в `pos`\n */\n allowedPositions?: PopupPositionsType[];\n\n /**\n * Флаг отключения анимации.\n * @default false\n */\n disableAnimations?: boolean;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n\n /**\n * Задержка перед появлением тултипа в миллисекундах\n * Значение по умолчанию: `100`\n */\n delayBeforeShow?: number;\n}\n\nconst DEFAULT_DELAY = 100;\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nexport const TooltipDataTids = {\n root: 'Tooltip__root',\n content: 'Tooltip__content',\n crossIcon: 'Tooltip__crossIcon',\n} as const;\n\nconst Positions: PopupPositionsType[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\ntype DefaultProps = Required<\n Pick<TooltipProps, 'pos' | 'trigger' | 'allowedPositions' | 'disableAnimations' | 'useWrapper' | 'delayBeforeShow'>\n>;\n\n@rootNode\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n public static displayName = 'Tooltip';\n\n public static propTypes = {\n children(props: TooltipProps, propName: keyof TooltipProps, componentName: string) {\n const children = props[propName];\n warning(\n children || props.anchorElement,\n `[${componentName}]: you must provide either 'children' or 'anchorElement' prop for ${componentName} to work properly`,\n );\n warning(\n !(Array.isArray(children) && props.useWrapper === false),\n `[${componentName}]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly`,\n );\n },\n };\n\n public static defaultProps: DefaultProps = {\n pos: DefaultPosition,\n trigger: 'hover',\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n delayBeforeShow: DEFAULT_DELAY,\n };\n\n private getProps = createPropsGetter(Tooltip.defaultProps);\n\n public static delay = DEFAULT_DELAY;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private theme!: Theme;\n private hoverTimeout: SafeTimer;\n private contentElement: Nullable<HTMLElement> = null;\n private positions: Nullable<PopupPositionsType[]> = null;\n private clickedOutside = true;\n private setRootNode!: TSetRootNode;\n\n private popupRef = React.createRef<Popup>();\n public componentDidUpdate(prevProps: TooltipProps) {\n const { trigger, allowedPositions, pos } = this.getProps();\n if (trigger === 'closed' && this.state.opened) {\n this.close();\n }\n const posChanged = prevProps.pos !== pos;\n const allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipPinOffset,\n popupMargin: theme.tooltipMargin,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: theme.tooltipBorderRadius,\n popupPinSize: theme.tooltipPinSize,\n popupPinOffsetX: theme.tooltipPinOffsetX,\n popupPinOffsetY: theme.tooltipPinOffsetY,\n popupBackground: theme.tooltipBg,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = () => {\n const content = this.props.render ? this.props.render() : null;\n if (isNullable(content)) {\n return null;\n }\n\n return (\n <div ref={this.refContent} className={styles.tooltipContent(this.theme)} data-tid={TooltipDataTids.content}>\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton() {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.getProps().trigger)\n : this.props.closeButton;\n\n if (!hasCross) {\n return null;\n }\n\n const icon = isTheme2022(this.theme) ? (\n <CloseButtonIcon\n tabbable={false}\n side={parseInt(this.theme.tooltipCloseBtnSide)}\n color={this.theme.tooltipCloseBtnColor}\n colorHover={this.theme.tooltipCloseBtnHoverColor}\n />\n ) : (\n <CrossIcon />\n );\n\n return (\n <div\n className={styles.cross(this.theme)}\n onClick={this.handleCloseButtonClick}\n data-tid={TooltipDataTids.crossIcon}\n >\n {icon}\n </div>\n );\n }\n\n public getAnchorElement = (): Nullable<Element> => {\n return this.popupRef.current?.anchorElement;\n };\n\n /**\n * Программно открывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public show() {\n if (this.state.opened) {\n return;\n }\n const trigger = this.getProps().trigger;\n if (trigger === 'opened' || trigger === 'closed') {\n warning(true, `Function 'show' is not supported with trigger specified '${trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Программно закрывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public hide() {\n const trigger = this.getProps().trigger;\n if (trigger === 'opened' || trigger === 'closed') {\n warning(true, `Function 'hide' is not supported with trigger specified '${trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getPopupAndLayerProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n return (\n <RenderLayer {...layerProps} getAnchorElement={this.getAnchorElement}>\n {popup}\n </RenderLayer>\n );\n }\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n const { disableAnimations, trigger } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n data-tid={TooltipDataTids.root}\n anchorElement={anchorElement}\n hasPin\n hasShadow\n maxWidth=\"none\"\n opened={this.state.opened}\n disableAnimations={disableAnimations}\n positions={this.getPositions()}\n ignoreHover={trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n tryPreserveFirstRenderedPosition\n ref={this.popupRef}\n withoutMobile\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPositions() {\n if (!this.positions) {\n const { allowedPositions, pos } = this.getProps();\n const index = allowedPositions.indexOf(pos);\n if (index === -1) {\n throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));\n }\n\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n\n return this.positions;\n }\n\n private getPopupAndLayerProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && this.getProps().useWrapper;\n const trigger = this.getProps().trigger;\n\n switch (trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n default:\n throw new Error('Unknown trigger specified: ' + trigger);\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n globalObject.clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n const isHoverAnchor = this.getProps().trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n this.hoverTimeout = globalObject.setTimeout(this.open, this.getProps().delayBeforeShow);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n const trigger = this.getProps().trigger;\n if (\n (trigger === 'hover&focus' && this.state.focused) ||\n (trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = globalObject.setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n this.open();\n };\n\n private handleClickOutsideAnchor = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest(event);\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n if (this.contentElement && isInstanceOf(event.target, globalObject.Element)) {\n return !containsTargetOrRenderContainer(event.target)(this.contentElement);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n const trigger = this.getProps().trigger;\n if (trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest(event);\n }\n\n this.close();\n };\n}\n"]}
1
+ {"version":3,"sources":["Tooltip.tsx"],"names":["React","warning","isEqual","globalObject","isNullable","ThemeFactory","DefaultPosition","Popup","OldDefaultPosition","RenderLayer","CrossIcon","containsTargetOrRenderContainer","ThemeContext","isTestEnv","CommonWrapper","rootNode","createPropsGetter","isTheme2022","CloseButtonIcon","isInstanceOf","getFullReactUIFlagsContext","ReactUIFeatureFlagsContext","styles","DEFAULT_DELAY","TooltipDataTids","root","content","crossIcon","OldPositions","Tooltip","getProps","defaultProps","state","opened","focused","contentElement","positions","clickedOutside","popupRef","createRef","renderContent","props","render","refContent","tooltipContent","theme","renderCloseButton","getAnchorElement","current","anchorElement","getPositions","featureFlags","popupUnifyPositioning","allowedPositions","pos","getAllowedPositions","index","indexOf","Error","join","slice","node","open","setState","close","handleMouseEnter","event","isHoverAnchor","trigger","target","clearHoverTimeout","hoverTimeout","setTimeout","delayBeforeShow","handleMouseLeave","relatedTarget","delay","handleClick","handleClickOutsideAnchor","isClickOutsideContent","onCloseRequest","handleFocus","handleBlur","handleCloseButtonClick","stopPropagation","onCloseClick","defaultPrevented","componentDidUpdate","prevProps","hintAddDynamicPositioning","posChanged","allowedChanged","componentWillUnmount","flags","create","popupPinOffset","tooltipPinOffset","popupMargin","tooltipMargin","popupBorder","tooltipBorder","popupBorderRadius","tooltipBorderRadius","popupPinSize","tooltipPinSize","popupPinOffsetX","tooltipPinOffsetX","popupPinOffsetY","tooltipPinOffsetY","popupBackground","tooltipBg","renderMain","hasCross","closeButton","undefined","triggersWithoutCloseButton","includes","icon","parseInt","tooltipCloseBtnSide","tooltipCloseBtnColor","tooltipCloseBtnHoverColor","cross","show","hide","getPopupAndLayerProps","popupProps","layerProps","active","children","popup","renderPopup","disableAnimations","setRootNode","onOpen","onClose","useWrapper","onClickOutside","onMouseEnter","onMouseLeave","onClick","onFocus","onBlur","clearTimeout","Element","PureComponent","__KONTUR_REACT_UI__","displayName","propTypes","propName","componentName","Array","isArray"],"mappings":"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","sourcesContent":["import React from 'react';\nimport warning from 'warning';\nimport isEqual from 'lodash.isequal';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\n\nimport { isNullable } from '../../lib/utils';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport {\n DefaultPosition,\n Popup,\n PopupProps,\n PopupPositionsType,\n ShortPopupPositionsType,\n OldDefaultPosition,\n} from '../../internal/Popup';\nimport { RenderLayer, RenderLayerProps } from '../../internal/RenderLayer';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { CloseButtonIcon } from '../../internal/CloseButtonIcon/CloseButtonIcon';\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport {\n getFullReactUIFlagsContext,\n ReactUIFeatureFlags,\n ReactUIFeatureFlagsContext,\n} from '../../lib/featureFlagsContext';\n\nimport { styles } from './Tooltip.styles';\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /**\n * Относительно какого элемента позиционировать тултип\n */\n anchorElement?: HTMLElement;\n\n /**\n * Если не указан `anchorElement` то тултип будет позиционироваться\n * относительно дочерних элементов\n */\n children?: React.ReactNode;\n\n className?: string;\n\n /**\n * Показывать крестик для закрытия тултипа. По-умолчанию крестик\n * показывается если проп *trigger* не `hover` и не `focus`.\n */\n closeButton?: boolean;\n\n /**\n * Функция, которая возвращает содержимое тултипа.\n *\n * Если эта функция вернула `null`, то тултип не показывается.\n */\n render?: Nullable<() => React.ReactNode>;\n\n /**\n * Приоритетное расположение подсказки относительно текста.\n *\n * **Допустимые значения**: `\"top\"`, `\"right\"`, `\"bottom\"`, `\"left\"`, `\"top left\"`, `\"top center\"`, `\"top right\"`, `\"right top\"`, `\"right middle\"`, `\"right bottom\"`, `\"bottom left\"`, `\"bottom center\"`, `\"bottom right\"`, `\"left top\"`, `\"left middle\"`, `\"left bottom\"`.\n */\n pos?: ShortPopupPositionsType | PopupPositionsType;\n\n /**\n * Триггер открытия тултипа\n * ```ts\n * type TooltipTrigger =\n * | 'hover'\n * | 'click'\n * | 'focus'\n * | 'hover&focus'\n * | 'opened'\n * | 'closed'\n * | 'hoverAnchor'\n * | 'manual';\n * ```\n */\n trigger?: TooltipTrigger;\n\n /**\n * Хэндлер, вызываемый при клике по крестику\n */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * Хэндлер, вызываемый при клике по крестику или\n * снаружи тултипа\n */\n onCloseRequest?: (event?: Event | React.MouseEvent) => void;\n\n /**\n * Хэндлер, вызываемый при закрытии тултипа\n */\n onClose?: () => void;\n\n /**\n * Хэндлер, вызываемый при открытии тултипа\n */\n onOpen?: () => void;\n\n /**\n * Список позиций, которые тултип будет занимать.\n * Если положение тултипа в определенной позиции\n * будет выходить за край экрана, то будет выбрана\n * следующая позиция. Обязательно должен включать\n * позицию указанную в `pos`\n */\n allowedPositions?: PopupPositionsType[];\n\n /**\n * Флаг отключения анимации.\n * @default false\n */\n disableAnimations?: boolean;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n\n /**\n * Задержка перед появлением тултипа в миллисекундах\n * Значение по умолчанию: `100`\n */\n delayBeforeShow?: number;\n}\n\nconst DEFAULT_DELAY = 100;\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nexport const TooltipDataTids = {\n root: 'Tooltip__root',\n content: 'Tooltip__content',\n crossIcon: 'Tooltip__crossIcon',\n} as const;\n\nconst OldPositions: PopupPositionsType[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\ntype DefaultProps = Required<Pick<TooltipProps, 'trigger' | 'disableAnimations' | 'useWrapper' | 'delayBeforeShow'>>;\n\n@rootNode\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n public static displayName = 'Tooltip';\n\n public static propTypes = {\n children(props: TooltipProps, propName: keyof TooltipProps, componentName: string) {\n const children = props[propName];\n warning(\n children || props.anchorElement,\n `[${componentName}]: you must provide either 'children' or 'anchorElement' prop for ${componentName} to work properly`,\n );\n warning(\n !(Array.isArray(children) && props.useWrapper === false),\n `[${componentName}]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly`,\n );\n },\n };\n\n public static defaultProps: DefaultProps = {\n trigger: 'hover',\n disableAnimations: isTestEnv,\n useWrapper: false,\n delayBeforeShow: DEFAULT_DELAY,\n };\n\n private getProps = createPropsGetter(Tooltip.defaultProps);\n\n public static delay = DEFAULT_DELAY;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private theme!: Theme;\n public featureFlags!: ReactUIFeatureFlags;\n private hoverTimeout: SafeTimer;\n private contentElement: Nullable<HTMLElement> = null;\n private positions: Nullable<PopupPositionsType[]> = null;\n private clickedOutside = true;\n private setRootNode!: TSetRootNode;\n\n private popupRef = React.createRef<Popup>();\n\n public getAllowedPositions() {\n return this.props.allowedPositions ? this.props.allowedPositions : OldPositions;\n }\n\n public componentDidUpdate(prevProps: TooltipProps) {\n const { trigger } = this.getProps();\n if (trigger === 'closed' && this.state.opened) {\n this.close();\n }\n if (this.featureFlags.hintAddDynamicPositioning && !this.featureFlags.popupUnifyPositioning) {\n const pos = this.props.pos ? this.props.pos : OldDefaultPosition;\n const allowedPositions = this.getAllowedPositions();\n const posChanged = prevProps.pos !== pos;\n const allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.featureFlags = getFullReactUIFlagsContext(flags);\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipPinOffset,\n popupMargin: theme.tooltipMargin,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: theme.tooltipBorderRadius,\n popupPinSize: theme.tooltipPinSize,\n popupPinOffsetX: theme.tooltipPinOffsetX,\n popupPinOffsetY: theme.tooltipPinOffsetY,\n popupBackground: theme.tooltipBg,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n public renderContent = () => {\n const content = this.props.render ? this.props.render() : null;\n if (isNullable(content)) {\n return null;\n }\n\n return (\n <div ref={this.refContent} className={styles.tooltipContent(this.theme)} data-tid={TooltipDataTids.content}>\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton() {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.getProps().trigger)\n : this.props.closeButton;\n\n if (!hasCross) {\n return null;\n }\n\n const icon = isTheme2022(this.theme) ? (\n <CloseButtonIcon\n tabbable={false}\n side={parseInt(this.theme.tooltipCloseBtnSide)}\n color={this.theme.tooltipCloseBtnColor}\n colorHover={this.theme.tooltipCloseBtnHoverColor}\n />\n ) : (\n <CrossIcon />\n );\n\n return (\n <div\n className={styles.cross(this.theme)}\n onClick={this.handleCloseButtonClick}\n data-tid={TooltipDataTids.crossIcon}\n >\n {icon}\n </div>\n );\n }\n\n public getAnchorElement = (): Nullable<Element> => {\n return this.popupRef.current?.anchorElement;\n };\n\n /**\n * Программно открывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public show() {\n if (this.state.opened) {\n return;\n }\n const trigger = this.getProps().trigger;\n if (trigger === 'opened' || trigger === 'closed') {\n warning(true, `Function 'show' is not supported with trigger specified '${trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Программно закрывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public hide() {\n const trigger = this.getProps().trigger;\n if (trigger === 'opened' || trigger === 'closed') {\n warning(true, `Function 'hide' is not supported with trigger specified '${trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getPopupAndLayerProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n return (\n <RenderLayer {...layerProps} getAnchorElement={this.getAnchorElement}>\n {popup}\n </RenderLayer>\n );\n }\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n const { disableAnimations, trigger } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n data-tid={TooltipDataTids.root}\n anchorElement={anchorElement}\n hasPin\n hasShadow\n maxWidth=\"none\"\n opened={this.state.opened}\n disableAnimations={disableAnimations}\n positions={this.getPositions()}\n pos={this.props.pos}\n ignoreHover={trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n tryPreserveFirstRenderedPosition\n ref={this.popupRef}\n withoutMobile\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private getPositions = (): PopupPositionsType[] | undefined => {\n if (this.featureFlags.popupUnifyPositioning) {\n return this.props.allowedPositions;\n }\n if (!this.positions) {\n let pos;\n if (this.props.pos) {\n pos = this.props.pos;\n } else if (this.featureFlags.popupUnifyPositioning) {\n pos = DefaultPosition;\n } else {\n pos = OldDefaultPosition;\n }\n const allowedPositions = this.getAllowedPositions();\n const index = allowedPositions.indexOf(pos as PopupPositionsType);\n if (index === -1) {\n throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));\n }\n\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n\n return this.positions;\n };\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPopupAndLayerProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && this.getProps().useWrapper;\n const trigger = this.getProps().trigger;\n\n switch (trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n default:\n throw new Error('Unknown trigger specified: ' + trigger);\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n globalObject.clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n const isHoverAnchor = this.getProps().trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n this.hoverTimeout = globalObject.setTimeout(this.open, this.getProps().delayBeforeShow);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n const trigger = this.getProps().trigger;\n if (\n (trigger === 'hover&focus' && this.state.focused) ||\n (trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = globalObject.setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n this.open();\n };\n\n private handleClickOutsideAnchor = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest(event);\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n if (this.contentElement && isInstanceOf(event.target, globalObject.Element)) {\n return !containsTargetOrRenderContainer(event.target)(this.contentElement);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n const trigger = this.getProps().trigger;\n if (trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest(event);\n }\n\n this.close();\n };\n}\n"]}