@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.
- package/cjs/components/Hint/Hint.d.ts +4 -3
- package/cjs/components/Hint/Hint.js +9 -8
- package/cjs/components/Hint/Hint.js.map +1 -1
- package/cjs/components/Tooltip/Tooltip.d.ts +10 -5
- package/cjs/components/Tooltip/Tooltip.js +59 -20
- package/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/cjs/internal/Popup/Popup.d.ts +15 -4
- package/cjs/internal/Popup/Popup.js +67 -4
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +24 -0
- package/cjs/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +1 -0
- package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
- package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +3 -1
- package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
- package/components/Hint/Hint/Hint.js +50 -45
- package/components/Hint/Hint/Hint.js.map +1 -1
- package/components/Hint/Hint.d.ts +4 -3
- package/components/Tooltip/Tooltip/Tooltip.js +64 -43
- package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
- package/components/Tooltip/Tooltip.d.ts +10 -5
- package/internal/Popup/Popup/Popup.js +50 -7
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/Popup/Popup.d.ts +15 -4
- package/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +24 -0
- package/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +1 -0
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js +2 -1
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
- 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
|
|
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
|
|
94
|
-
return x.startsWith(
|
|
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$
|
|
136
|
-
opened = _this$
|
|
137
|
-
manual = _this$
|
|
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$
|
|
196
|
-
disableAnimations = _this$
|
|
197
|
-
useWrapper = _this$
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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$
|
|
233
|
-
maxWidth = _this$
|
|
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?:
|
|
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, '
|
|
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
|
|
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
|
-
|
|
193
|
-
|
|
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
|
-
|
|
196
|
-
|
|
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(
|
|
208
|
-
_this2.
|
|
209
|
-
return /*#__PURE__*/React.createElement(ThemeContext.
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
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":"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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 { 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"]}
|