@megafon/ui-core 4.8.1 → 4.9.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 (36) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/es/components/Checkbox/Checkbox.d.ts +1 -0
  3. package/dist/es/components/Checkbox/Checkbox.js +3 -2
  4. package/dist/es/components/ContentArea/ContentArea.d.ts +5 -0
  5. package/dist/es/components/ContentArea/ContentArea.js +11 -5
  6. package/dist/es/components/Grid/Grid.d.ts +5 -0
  7. package/dist/es/components/Grid/Grid.js +11 -5
  8. package/dist/es/components/Grid/GridColumn.d.ts +4 -0
  9. package/dist/es/components/Grid/GridColumn.js +8 -3
  10. package/dist/es/components/Header/Header.d.ts +1 -1
  11. package/dist/es/components/List/List.css +22 -9
  12. package/dist/es/components/List/List.js +7 -4
  13. package/dist/es/components/Tabs/Tabs.css +3 -0
  14. package/dist/es/components/TextField/TextField.css +9 -0
  15. package/dist/es/components/TextField/TextField.d.ts +2 -0
  16. package/dist/es/components/TextField/TextField.js +48 -24
  17. package/dist/es/components/Tooltip/Tooltip.css +106 -53
  18. package/dist/es/components/Tooltip/Tooltip.js +22 -19
  19. package/dist/lib/components/Checkbox/Checkbox.d.ts +1 -0
  20. package/dist/lib/components/Checkbox/Checkbox.js +3 -2
  21. package/dist/lib/components/ContentArea/ContentArea.d.ts +5 -0
  22. package/dist/lib/components/ContentArea/ContentArea.js +13 -4
  23. package/dist/lib/components/Grid/Grid.d.ts +5 -0
  24. package/dist/lib/components/Grid/Grid.js +13 -4
  25. package/dist/lib/components/Grid/GridColumn.d.ts +4 -0
  26. package/dist/lib/components/Grid/GridColumn.js +10 -2
  27. package/dist/lib/components/Header/Header.d.ts +1 -1
  28. package/dist/lib/components/List/List.css +22 -9
  29. package/dist/lib/components/List/List.js +7 -4
  30. package/dist/lib/components/Tabs/Tabs.css +3 -0
  31. package/dist/lib/components/TextField/TextField.css +9 -0
  32. package/dist/lib/components/TextField/TextField.d.ts +2 -0
  33. package/dist/lib/components/TextField/TextField.js +49 -23
  34. package/dist/lib/components/Tooltip/Tooltip.css +106 -53
  35. package/dist/lib/components/Tooltip/Tooltip.js +22 -19
  36. package/package.json +3 -3
@@ -30,14 +30,17 @@ var List = function List(_ref) {
30
30
  className = _ref.className,
31
31
  children = _ref.children;
32
32
  var ElementType = as;
33
- return /*#__PURE__*/React.createElement(ElementType, {
33
+ return /*#__PURE__*/React.createElement("div", {
34
34
  className: cn({
35
35
  'h-align': align,
36
36
  color: color,
37
- weight: weight,
38
- type: as
37
+ weight: weight
39
38
  }, className)
40
- }, children);
39
+ }, /*#__PURE__*/React.createElement(ElementType, {
40
+ className: cn('inner', {
41
+ type: as
42
+ })
43
+ }, children));
41
44
  };
42
45
 
43
46
  List.propTypes = {
@@ -157,6 +157,9 @@
157
157
  color: var(--spbSky3);
158
158
  fill: var(--spbSky3);
159
159
  }
160
+ .mfui-tabs__tab-inner:hover {
161
+ text-decoration: none;
162
+ }
160
163
  .mfui-tabs__tab-inner:not(.mfui-tabs__tab-inner_current):hover {
161
164
  color: var(--content);
162
165
  fill: var(--content);
@@ -41,6 +41,15 @@
41
41
  overflow-y: auto;
42
42
  resize: none;
43
43
  }
44
+ .mfui-text-field__hidden-textarea {
45
+ position: absolute;
46
+ height: -webkit-min-content;
47
+ height: -moz-min-content;
48
+ height: min-content;
49
+ padding: 0 56px 0 16px;
50
+ word-break: break-all;
51
+ visibility: hidden;
52
+ }
44
53
  .mfui-text-field__field_resized {
45
54
  -webkit-transition: height 0.1s;
46
55
  transition: height 0.1s;
@@ -88,6 +88,8 @@ export declare type TextFieldProps = {
88
88
  minTextareaHeight?: MinTextareaHeightType;
89
89
  /** Скрывает кнопку ресайза для textarea="flexible" */
90
90
  hideResizeButton?: boolean;
91
+ /** Отключает перевод строки по Enter */
92
+ disableEnterLineBreak?: boolean;
91
93
  /** Обработчик изменения значения */
92
94
  onChange?: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;
93
95
  /** Обработчик изменения значения маскированного инпута до обработки маской */
@@ -9,14 +9,20 @@ exports["default"] = exports.MinTextareaHeight = exports.TextareaTypes = exports
9
9
 
10
10
  require("core-js/modules/es.array.concat");
11
11
 
12
+ require("core-js/modules/es.date.to-string");
13
+
12
14
  require("core-js/modules/es.function.name");
13
15
 
16
+ require("core-js/modules/es.object.to-string");
17
+
14
18
  require("core-js/modules/es.object.values");
15
19
 
16
20
  require("core-js/modules/es.parse-float");
17
21
 
18
22
  require("core-js/modules/es.regexp.exec");
19
23
 
24
+ require("core-js/modules/es.regexp.to-string");
25
+
20
26
  require("core-js/modules/es.string.replace");
21
27
 
22
28
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
@@ -41,6 +47,7 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj;
41
47
 
42
48
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
43
49
 
50
+ /* eslint-disable react/no-multi-comp */
44
51
  var Hide = function Hide(props) {
45
52
  return /*#__PURE__*/React.createElement("svg", (0, _extends2["default"])({
46
53
  viewBox: "0 0 32 32"
@@ -95,6 +102,13 @@ var DEFAULT_PLACEHOLDERS = {
95
102
  password: 'Пароль',
96
103
  text: 'Текст'
97
104
  };
105
+ var converConfig = {
106
+ br: {
107
+ component: function component() {
108
+ return React.createElement('br');
109
+ }
110
+ }
111
+ };
98
112
  var Verification = {
99
113
  VALID: 'valid',
100
114
  ERROR: 'error'
@@ -107,7 +121,7 @@ var TextareaTypes = {
107
121
  exports.TextareaTypes = TextareaTypes;
108
122
  var MinTextareaHeight = {
109
123
  ONE_ROW: ROW_HEIGHT,
110
- THREE_ROWS: ROW_HEIGHT * 3
124
+ THREE_ROWS: ROW_HEIGHT * DEFAULT_ROW_COUNT
111
125
  };
112
126
  exports.MinTextareaHeight = MinTextareaHeight;
113
127
  var cn = (0, _uiHelpers.cnCreate)('mfui-text-field');
@@ -135,6 +149,8 @@ var TextField = function TextField(_ref) {
135
149
  isControlled = _ref$isControlled === void 0 ? false : _ref$isControlled,
136
150
  _ref$minTextareaHeigh = _ref.minTextareaHeight,
137
151
  minTextareaHeight = _ref$minTextareaHeigh === void 0 ? MinTextareaHeight.THREE_ROWS : _ref$minTextareaHeigh,
152
+ _ref$disableEnterLine = _ref.disableEnterLineBreak,
153
+ disableEnterLineBreak = _ref$disableEnterLine === void 0 ? false : _ref$disableEnterLine,
138
154
  _ref$hideResizeButton = _ref.hideResizeButton,
139
155
  hideResizeButton = _ref$hideResizeButton === void 0 ? false : _ref$hideResizeButton,
140
156
  onBlur = _ref.onBlur,
@@ -171,8 +187,8 @@ var TextField = function TextField(_ref) {
171
187
 
172
188
  var _useState5 = (0, React.useState)(minTextareaHeight),
173
189
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
174
- initialTextareaHeight = _useState6[0],
175
- setInitialTextareaHeight = _useState6[1];
190
+ textareaHeight = _useState6[0],
191
+ setTextareaHeight = _useState6[1];
176
192
 
177
193
  var _useState7 = (0, React.useState)(false),
178
194
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
@@ -195,6 +211,7 @@ var TextField = function TextField(_ref) {
195
211
  setIsTextareaResized = _useState14[1];
196
212
 
197
213
  var fieldNode = (0, React.useRef)();
214
+ var hiddenElement = (0, React.useRef)(null);
198
215
  var labelRef = (0, React.useRef)(null);
199
216
  var resizerRef = (0, React.useRef)(null);
200
217
  var isPasswordType = (0, React.useMemo)(function () {
@@ -218,6 +235,15 @@ var TextField = function TextField(_ref) {
218
235
 
219
236
  setIsMaxLimitExceeded(symbolCounter < String(textareaValue).length);
220
237
  }, [symbolCounter]);
238
+ (0, React.useEffect)(function () {
239
+ if (!hiddenElement.current) {
240
+ return;
241
+ }
242
+
243
+ var hiddenElementHeight = hiddenElement.current.scrollHeight;
244
+ var isHiddenHeightCorrect = hiddenElementHeight >= minTextareaHeight && hiddenElementHeight <= TEXTAREA_MAX_HEIGHT;
245
+ !isTextareaResized && setTextareaHeight(isHiddenHeightCorrect ? hiddenElementHeight : minTextareaHeight);
246
+ }, [hiddenElement, isTextareaResized, minTextareaHeight, inputValue]);
221
247
  (0, React.useEffect)(function () {
222
248
  !isControlled && setInputValue(value);
223
249
  checkSymbolMaxLimit(value);
@@ -243,7 +269,7 @@ var TextField = function TextField(_ref) {
243
269
  var currentCoordinateY = moveEvent.clientY || moveEvent.touches[0].clientY;
244
270
  var resizeHeight = originalHeight + (currentCoordinateY - originalCoordinateY);
245
271
  var updatedHeight = resizeHeight < minTextareaHeight ? minTextareaHeight : resizeHeight;
246
- setInitialTextareaHeight(updatedHeight);
272
+ setTextareaHeight(updatedHeight);
247
273
  setIsTextareaResized(true);
248
274
  }, _throttleTime["default"].resizeTextarea);
249
275
 
@@ -270,22 +296,7 @@ var TextField = function TextField(_ref) {
270
296
  });
271
297
  }, []);
272
298
 
273
- var setTextareaHeight = function setTextareaHeight() {
274
- if (!(fieldNode === null || fieldNode === void 0 ? void 0 : fieldNode.current) || isTextareaResized) {
275
- return;
276
- }
277
-
278
- var scrollHeight = fieldNode.current.scrollHeight;
279
- var extraRowCount = Math.round((scrollHeight - 28 - minTextareaHeight) / ROW_HEIGHT);
280
- var newHeight = extraRowCount <= DEFAULT_ROW_COUNT ? minTextareaHeight + ROW_HEIGHT * extraRowCount : TEXTAREA_MAX_HEIGHT;
281
- setInitialTextareaHeight(newHeight);
282
- };
283
-
284
299
  var handleInputChange = function handleInputChange(e) {
285
- if (textarea === TextareaTypes.FLEXIBLE) {
286
- setTextareaHeight();
287
- }
288
-
289
300
  !isControlled && setInputValue(e.target.value);
290
301
  checkSymbolMaxLimit(e.target.value);
291
302
  onChange === null || onChange === void 0 ? void 0 : onChange(e);
@@ -310,6 +321,10 @@ var TextField = function TextField(_ref) {
310
321
  labelRef.current.style.top = "".concat(DEFAULT_LABEL_TOP_POSITION - scrollTop, "px");
311
322
  };
312
323
 
324
+ var handleTextareaKeyDown = function handleTextareaKeyDown(e) {
325
+ (0, _uiHelpers.checkEventIsClickOrEnterPress)(e) && !e.shiftKey && e.preventDefault();
326
+ };
327
+
313
328
  var handleIconClick = (0, React.useCallback)(function (e) {
314
329
  var isClearFuncAvailable = !customIcon && !onCustomIconClick && hasClearIcon;
315
330
  var field = fieldNode.current;
@@ -418,13 +433,23 @@ var TextField = function TextField(_ref) {
418
433
  };
419
434
 
420
435
  var renderTextarea = function renderTextarea() {
436
+ var _a;
437
+
438
+ var hiddenValue = inputValue === null || inputValue === void 0 ? void 0 : inputValue.toString().replace(/[\r\n]/g, '<br/>');
421
439
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("textarea", (0, _extends2["default"])({}, textareaParams, {
422
- onScroll: handleTextareaScroll,
423
440
  style: {
424
- height: "".concat(initialTextareaHeight, "px")
441
+ height: "".concat(textareaHeight, "px")
425
442
  },
426
- ref: getFieldNode
427
- })), renderLabel());
443
+ ref: getFieldNode,
444
+ onKeyDown: disableEnterLineBreak ? handleTextareaKeyDown : undefined,
445
+ onScroll: handleTextareaScroll
446
+ })), !!hiddenValue && /*#__PURE__*/React.createElement("div", {
447
+ className: cn('hidden-textarea'),
448
+ ref: hiddenElement,
449
+ style: {
450
+ width: (_a = fieldNode.current) === null || _a === void 0 ? void 0 : _a.scrollWidth
451
+ }
452
+ }, (0, _uiHelpers.convert)(hiddenValue, converConfig), "."), renderLabel());
428
453
  };
429
454
 
430
455
  var renderIconBlock = function renderIconBlock() {
@@ -521,6 +546,7 @@ TextField.propTypes = {
521
546
  className: PropTypes.string,
522
547
  minTextareaHeight: PropTypes.oneOf([24, 72]),
523
548
  hideResizeButton: PropTypes.bool,
549
+ disableEnterLineBreak: PropTypes.bool,
524
550
  onChange: PropTypes.func,
525
551
  onBeforeMaskChange: PropTypes.func,
526
552
  onBlur: PropTypes.func,
@@ -6,8 +6,6 @@
6
6
  transition-duration: 0.3s;
7
7
  -webkit-transition-property: opacity, visibility;
8
8
  transition-property: opacity, visibility;
9
- font-size: 12px;
10
- line-height: 18px;
11
9
  pointer-events: none;
12
10
  }
13
11
  .mfui-tooltip_open {
@@ -24,6 +22,18 @@
24
22
  .mfui-tooltip__content {
25
23
  position: relative;
26
24
  z-index: 1;
25
+ overflow: hidden;
26
+ }
27
+ .mfui-tooltip__content-shadow {
28
+ position: absolute;
29
+ top: 0;
30
+ right: 0;
31
+ bottom: 0;
32
+ left: 0;
33
+ z-index: -1;
34
+ }
35
+ .mfui-tooltip__top,
36
+ .mfui-tooltip__main-content {
27
37
  display: -webkit-box;
28
38
  display: -ms-flexbox;
29
39
  display: flex;
@@ -33,24 +43,33 @@
33
43
  flex-direction: column;
34
44
  gap: 8px;
35
45
  }
36
- .mfui-tooltip__content-shadow {
37
- position: absolute;
38
- top: 0;
39
- right: 0;
40
- bottom: 0;
41
- left: 0;
42
- z-index: -1;
46
+ @media screen and (min-width: 768px) {
47
+ .mfui-tooltip__top {
48
+ gap: 12px;
49
+ }
50
+ }
51
+ .mfui-tooltip__top_margin {
52
+ margin-bottom: 16px;
43
53
  }
44
54
  .mfui-tooltip__arrow-container {
45
55
  position: absolute;
46
56
  }
47
57
  .mfui-tooltip__arrow-wrap {
48
- width: 42px;
49
- height: 12px;
58
+ width: 33px;
59
+ height: 13px;
50
60
  }
51
61
  .mfui-tooltip__arrow {
52
- width: 42px;
53
- height: 12px;
62
+ width: 33px;
63
+ height: 13px;
64
+ position: absolute;
65
+ display: -webkit-box;
66
+ display: -ms-flexbox;
67
+ display: flex;
68
+ -webkit-box-pack: center;
69
+ -ms-flex-pack: center;
70
+ justify-content: center;
71
+ }
72
+ .mfui-tooltip__arrow svg {
54
73
  position: absolute;
55
74
  }
56
75
  .mfui-tooltip__arrow-inner {
@@ -59,8 +78,24 @@
59
78
  fill: var(--base);
60
79
  }
61
80
  .mfui-tooltip__text {
62
- font-size: 12px;
63
- line-height: 18px;
81
+ font-size: 15px;
82
+ line-height: 24px;
83
+ }
84
+ @media screen and (max-width: 767px) {
85
+ .mfui-tooltip__text {
86
+ font-size: 12px;
87
+ line-height: 18px;
88
+ }
89
+ }
90
+ .mfui-tooltip__bottom {
91
+ display: -webkit-box;
92
+ display: -ms-flexbox;
93
+ display: flex;
94
+ -webkit-box-orient: vertical;
95
+ -webkit-box-direction: normal;
96
+ -ms-flex-direction: column;
97
+ flex-direction: column;
98
+ gap: 16px;
64
99
  }
65
100
  .mfui-tooltip__button,
66
101
  .mfui-tooltip__close-button {
@@ -80,12 +115,18 @@
80
115
  font-family: inherit;
81
116
  color: var(--brandGreen);
82
117
  font-weight: 500;
83
- font-size: 12px;
84
- line-height: 14px;
118
+ font-size: 15px;
119
+ line-height: 18px;
85
120
  background-color: transparent;
86
121
  -webkit-transition: 300ms;
87
122
  transition: 300ms;
88
123
  }
124
+ @media screen and (max-width: 767px) {
125
+ .mfui-tooltip__button {
126
+ font-size: 12px;
127
+ line-height: 14px;
128
+ }
129
+ }
89
130
  .mfui-tooltip__button:hover {
90
131
  color: var(--buttonHoverGreen);
91
132
  }
@@ -99,15 +140,15 @@
99
140
  fill: var(--buttonDown);
100
141
  }
101
142
  .mfui-tooltip__close-button {
102
- position: absolute;
103
- top: 10px;
104
- right: 10px;
143
+ position: relative;
144
+ top: -6px;
145
+ right: -6px;
105
146
  -webkit-box-pack: center;
106
147
  -ms-flex-pack: center;
107
148
  justify-content: center;
149
+ float: right;
108
150
  width: 24px;
109
151
  height: 24px;
110
- margin-left: 24px;
111
152
  border-radius: 12px;
112
153
  background-color: var(--spbSky0);
113
154
  -webkit-transition: 300ms;
@@ -140,9 +181,9 @@
140
181
  display: -ms-flexbox;
141
182
  display: flex;
142
183
  -webkit-box-orient: horizontal;
143
- -webkit-box-direction: normal;
144
- -ms-flex-direction: row;
145
- flex-direction: row;
184
+ -webkit-box-direction: reverse;
185
+ -ms-flex-direction: row-reverse;
186
+ flex-direction: row-reverse;
146
187
  gap: 18px;
147
188
  -webkit-box-align: center;
148
189
  -ms-flex-align: center;
@@ -152,8 +193,7 @@
152
193
  font-weight: 500;
153
194
  }
154
195
  .mfui-tooltip_small .mfui-tooltip__close-button {
155
- position: static;
156
- margin-left: 0;
196
+ top: auto;
157
197
  }
158
198
  .mfui-tooltip_theme_red .mfui-tooltip__content,
159
199
  .mfui-tooltip_theme_blue .mfui-tooltip__content,
@@ -218,17 +258,19 @@
218
258
  .mfui-tooltip_theme_blue .mfui-tooltip__arrow-inner {
219
259
  fill: var(--reflexBlue80);
220
260
  }
221
- .mfui-tooltip[data-popper-placement='right'] .mfui-tooltip__arrow-container,
222
- .mfui-tooltip[data-popper-placement='right-start'] .mfui-tooltip__arrow-container,
223
- .mfui-tooltip[data-popper-placement='right-end'] .mfui-tooltip__arrow-container {
224
- left: -12px;
225
- width: 12px;
226
- height: 100%;
261
+ .mfui-tooltip[data-popper-placement='right'] .mfui-tooltip__content,
262
+ .mfui-tooltip[data-popper-placement='right-start'] .mfui-tooltip__content,
263
+ .mfui-tooltip[data-popper-placement='right-end'] .mfui-tooltip__content,
264
+ .mfui-tooltip[data-popper-placement='right'] .mfui-tooltip__content-shadow,
265
+ .mfui-tooltip[data-popper-placement='right-start'] .mfui-tooltip__content-shadow,
266
+ .mfui-tooltip[data-popper-placement='right-end'] .mfui-tooltip__content-shadow {
267
+ -webkit-transform: translateX(24px);
268
+ transform: translateX(24px);
227
269
  }
228
270
  .mfui-tooltip[data-popper-placement='right'] .mfui-tooltip__arrow-wrap,
229
271
  .mfui-tooltip[data-popper-placement='right-start'] .mfui-tooltip__arrow-wrap,
230
272
  .mfui-tooltip[data-popper-placement='right-end'] .mfui-tooltip__arrow-wrap {
231
- left: -15px;
273
+ left: 3px;
232
274
  }
233
275
  .mfui-tooltip[data-popper-placement='right'] .mfui-tooltip__arrow,
234
276
  .mfui-tooltip[data-popper-placement='right-start'] .mfui-tooltip__arrow,
@@ -239,17 +281,19 @@
239
281
  -webkit-transform: rotate(-90deg);
240
282
  transform: rotate(-90deg);
241
283
  }
242
- .mfui-tooltip[data-popper-placement='left'] .mfui-tooltip__arrow-container,
243
- .mfui-tooltip[data-popper-placement='left-start'] .mfui-tooltip__arrow-container,
244
- .mfui-tooltip[data-popper-placement='left-end'] .mfui-tooltip__arrow-container {
245
- right: -12px;
246
- width: 12px;
247
- height: 100%;
284
+ .mfui-tooltip[data-popper-placement='left'] .mfui-tooltip__content,
285
+ .mfui-tooltip[data-popper-placement='left-start'] .mfui-tooltip__content,
286
+ .mfui-tooltip[data-popper-placement='left-end'] .mfui-tooltip__content,
287
+ .mfui-tooltip[data-popper-placement='left'] .mfui-tooltip__content-shadow,
288
+ .mfui-tooltip[data-popper-placement='left-start'] .mfui-tooltip__content-shadow,
289
+ .mfui-tooltip[data-popper-placement='left-end'] .mfui-tooltip__content-shadow {
290
+ -webkit-transform: translateX(-24px);
291
+ transform: translateX(-24px);
248
292
  }
249
293
  .mfui-tooltip[data-popper-placement='left'] .mfui-tooltip__arrow-wrap,
250
294
  .mfui-tooltip[data-popper-placement='left-start'] .mfui-tooltip__arrow-wrap,
251
295
  .mfui-tooltip[data-popper-placement='left-end'] .mfui-tooltip__arrow-wrap {
252
- right: -15px;
296
+ right: 3px;
253
297
  }
254
298
  .mfui-tooltip[data-popper-placement='left'] .mfui-tooltip__arrow,
255
299
  .mfui-tooltip[data-popper-placement='left-start'] .mfui-tooltip__arrow,
@@ -260,17 +304,19 @@
260
304
  -webkit-transform: rotate(90deg);
261
305
  transform: rotate(90deg);
262
306
  }
263
- .mfui-tooltip[data-popper-placement='top'] .mfui-tooltip__arrow-container,
264
- .mfui-tooltip[data-popper-placement='top-start'] .mfui-tooltip__arrow-container,
265
- .mfui-tooltip[data-popper-placement='top-end'] .mfui-tooltip__arrow-container {
266
- bottom: -12px;
267
- width: 100%;
268
- height: 12px;
307
+ .mfui-tooltip[data-popper-placement='top'] .mfui-tooltip__content,
308
+ .mfui-tooltip[data-popper-placement='top-start'] .mfui-tooltip__content,
309
+ .mfui-tooltip[data-popper-placement='top-end'] .mfui-tooltip__content,
310
+ .mfui-tooltip[data-popper-placement='top'] .mfui-tooltip__content-shadow,
311
+ .mfui-tooltip[data-popper-placement='top-start'] .mfui-tooltip__content-shadow,
312
+ .mfui-tooltip[data-popper-placement='top-end'] .mfui-tooltip__content-shadow {
313
+ -webkit-transform: translateY(-24px);
314
+ transform: translateY(-24px);
269
315
  }
270
316
  .mfui-tooltip[data-popper-placement='top'] .mfui-tooltip__arrow-wrap,
271
317
  .mfui-tooltip[data-popper-placement='top-start'] .mfui-tooltip__arrow-wrap,
272
318
  .mfui-tooltip[data-popper-placement='top-end'] .mfui-tooltip__arrow-wrap {
273
- top: 0;
319
+ bottom: 13px;
274
320
  }
275
321
  .mfui-tooltip[data-popper-placement='top'] .mfui-tooltip__arrow,
276
322
  .mfui-tooltip[data-popper-placement='top-start'] .mfui-tooltip__arrow,
@@ -281,12 +327,19 @@
281
327
  -webkit-transform: rotate(180deg);
282
328
  transform: rotate(180deg);
283
329
  }
284
- .mfui-tooltip[data-popper-placement='bottom'] .mfui-tooltip__arrow-container,
285
- .mfui-tooltip[data-popper-placement='bottom-start'] .mfui-tooltip__arrow-container,
286
- .mfui-tooltip[data-popper-placement='bottom-end'] .mfui-tooltip__arrow-container {
287
- top: -12px;
288
- width: 100%;
289
- height: 12px;
330
+ .mfui-tooltip[data-popper-placement='bottom'] .mfui-tooltip__content,
331
+ .mfui-tooltip[data-popper-placement='bottom-start'] .mfui-tooltip__content,
332
+ .mfui-tooltip[data-popper-placement='bottom-end'] .mfui-tooltip__content,
333
+ .mfui-tooltip[data-popper-placement='bottom'] .mfui-tooltip__content-shadow,
334
+ .mfui-tooltip[data-popper-placement='bottom-start'] .mfui-tooltip__content-shadow,
335
+ .mfui-tooltip[data-popper-placement='bottom-end'] .mfui-tooltip__content-shadow {
336
+ -webkit-transform: translateY(24px);
337
+ transform: translateY(24px);
338
+ }
339
+ .mfui-tooltip[data-popper-placement='bottom'] .mfui-tooltip__arrow-wrap,
340
+ .mfui-tooltip[data-popper-placement='bottom-start'] .mfui-tooltip__arrow-wrap,
341
+ .mfui-tooltip[data-popper-placement='bottom-end'] .mfui-tooltip__arrow-wrap {
342
+ top: 13px;
290
343
  }
291
344
  .mfui-tooltip[data-popper-escaped='true'].mfui-tooltip_has-escape {
292
345
  visibility: hidden;
@@ -174,6 +174,8 @@ var Tooltip = function Tooltip(_ref) {
174
174
  var portalElem = _react["default"].useRef(null);
175
175
 
176
176
  var isBigSize = size === Size.BIG;
177
+ var hasMainContent = !!title || !!text;
178
+ var hasTopContent = hasMainContent || !!buttonText;
177
179
  var clickEvent = (0, _react.useMemo)(function () {
178
180
  return isTouchDevice ? TOUCH_KEY : MOUSE_KEY;
179
181
  }, [isTouchDevice]);
@@ -192,10 +194,10 @@ var Tooltip = function Tooltip(_ref) {
192
194
  options: {
193
195
  element: arrowElement,
194
196
  padding: {
195
- top: 17,
196
- right: 1,
197
- bottom: 17,
198
- left: 1
197
+ top: 18,
198
+ right: 8,
199
+ bottom: 18,
200
+ left: 8
199
201
  }
200
202
  }
201
203
  }, {
@@ -215,11 +217,6 @@ var Tooltip = function Tooltip(_ref) {
215
217
  options: {
216
218
  boundary: currentBoundary
217
219
  }
218
- }, {
219
- name: 'offset',
220
- options: {
221
- offset: [0, 12]
222
- }
223
220
  }]
224
221
  };
225
222
  }, [placement, arrowElement, currentBoundary, isOpen, fallbackPlacements]);
@@ -341,21 +338,27 @@ var Tooltip = function Tooltip(_ref) {
341
338
  }, text);
342
339
  }, [text]);
343
340
  var renderedFullContent = (0, _react.useMemo)(function () {
344
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !!title && /*#__PURE__*/_react["default"].createElement(_Header["default"], {
341
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, hasTopContent && /*#__PURE__*/_react["default"].createElement("div", {
342
+ className: cn('top', {
343
+ margin: !!children
344
+ })
345
+ }, hasMainContent && /*#__PURE__*/_react["default"].createElement("div", {
346
+ className: cn('main-content')
347
+ }, !!title && /*#__PURE__*/_react["default"].createElement(_Header["default"], {
345
348
  className: cn('title'),
346
349
  as: "h5",
347
350
  space: "tight"
348
- }, title), !!text && renderedText, !!buttonText && /*#__PURE__*/_react["default"].createElement("button", (0, _extends2["default"])({
351
+ }, title), !!text && renderedText), !!buttonText && /*#__PURE__*/_react["default"].createElement("button", (0, _extends2["default"])({
349
352
  type: "button",
350
353
  className: cn('button')
351
354
  }, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.button), {
352
355
  onClick: onClick
353
356
  }), buttonText, /*#__PURE__*/_react["default"].createElement(RightArrow, {
354
357
  className: cn('button-arrow')
355
- })), !!children && /*#__PURE__*/_react["default"].createElement("div", {
358
+ }))), !!children && /*#__PURE__*/_react["default"].createElement("div", {
356
359
  className: cn('addititonal-content')
357
360
  }, children));
358
- }, [title, text, buttonText, children, dataAttrs, renderedText, onClick]);
361
+ }, [title, text, buttonText, children, dataAttrs, hasTopContent, hasMainContent, renderedText, onClick]);
359
362
 
360
363
  var template = /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.root), {
361
364
  className: cn({
@@ -368,8 +371,6 @@ var Tooltip = function Tooltip(_ref) {
368
371
  ref: setPopperElement,
369
372
  style: styles.popper
370
373
  }, attributes.popper), /*#__PURE__*/_react["default"].createElement("div", {
371
- className: cn('arrow-container')
372
- }, /*#__PURE__*/_react["default"].createElement("div", {
373
374
  className: cn('arrow-wrap'),
374
375
  ref: setArrowElement,
375
376
  style: styles.arrow
@@ -377,23 +378,25 @@ var Tooltip = function Tooltip(_ref) {
377
378
  className: cn('arrow', [arrowClassName])
378
379
  }, /*#__PURE__*/_react["default"].createElement(Arrow, {
379
380
  className: cn('arrow-inner')
380
- })))), /*#__PURE__*/_react["default"].createElement(_Tile["default"], {
381
+ }))), /*#__PURE__*/_react["default"].createElement("div", {
382
+ className: cn('content-wrap')
383
+ }, /*#__PURE__*/_react["default"].createElement(_Tile["default"], {
381
384
  radius: "rounded",
382
385
  dataAttrs: {
383
386
  root: dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.content
384
387
  },
385
388
  className: cn('content', [contentClassName])
386
- }, isBigSize && renderedFullContent, !isBigSize && !!text && renderedText, hasCloseButton && /*#__PURE__*/_react["default"].createElement("button", (0, _extends2["default"])({}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.close), {
389
+ }, hasCloseButton && /*#__PURE__*/_react["default"].createElement("button", (0, _extends2["default"])({}, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.close), {
387
390
  className: cn('close-button'),
388
391
  type: "button",
389
392
  onClick: handleCloseButtonClick
390
393
  }), /*#__PURE__*/_react["default"].createElement(CancelIcon, {
391
394
  className: cn('close-icon')
392
- }))), /*#__PURE__*/_react["default"].createElement(_Tile["default"], {
395
+ })), isBigSize && renderedFullContent, !isBigSize && !!text && renderedText), /*#__PURE__*/_react["default"].createElement(_Tile["default"], {
393
396
  radius: "rounded",
394
397
  shadowLevel: "high",
395
398
  className: cn('content-shadow', [contentShadowClassName])
396
- }));
399
+ })));
397
400
  /* Не в эффекте, чтобы не создавать лишний перерендер компонента. Из-за синхронности кода в return уже будет элемент */
398
401
 
399
402
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@megafon/ui-core",
3
- "version": "4.8.1",
3
+ "version": "4.9.0",
4
4
  "files": [
5
5
  "dist",
6
6
  "styles"
@@ -54,7 +54,7 @@
54
54
  "@babel/preset-env": "^7.8.6",
55
55
  "@babel/preset-react": "^7.8.3",
56
56
  "@babel/preset-typescript": "^7.8.3",
57
- "@megafon/ui-icons": "^2.3.0",
57
+ "@megafon/ui-icons": "^2.4.0",
58
58
  "@svgr/core": "^2.4.1",
59
59
  "@testing-library/jest-dom": "5.16.2",
60
60
  "@testing-library/react": "12.1.2",
@@ -100,5 +100,5 @@
100
100
  "react-popper": "^2.2.3",
101
101
  "swiper": "^6.5.6"
102
102
  },
103
- "gitHead": "3abf1c61512c52a9d322edb9fb6bede9da952c44"
103
+ "gitHead": "ab9cb505dca6ae5f4e3db5d4a21add24d10a1be1"
104
104
  }