@megafon/ui-core 4.0.0-beta.9 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/CHANGELOG.md +65 -18
  2. package/dist/es/components/Accordion/Accordion.css +6 -4
  3. package/dist/es/components/Badges/components/PromoBadge/PromoBadge.css +4 -0
  4. package/dist/es/components/Badges/components/PromoBadge/PromoBadge.d.ts +1 -0
  5. package/dist/es/components/Badges/components/PromoBadge/PromoBadge.js +2 -1
  6. package/dist/es/components/Banner/Banner.css +3 -0
  7. package/dist/es/components/Banner/Banner.d.ts +2 -0
  8. package/dist/es/components/Banner/Banner.js +5 -1
  9. package/dist/es/components/Carousel/Carousel.d.ts +2 -0
  10. package/dist/es/components/Carousel/Carousel.js +7 -2
  11. package/dist/es/components/ContentArea/ContentArea.css +0 -10
  12. package/dist/es/components/ContentArea/ContentArea.d.ts +0 -1
  13. package/dist/es/components/ContentArea/ContentArea.js +1 -3
  14. package/dist/es/components/Header/Header.d.ts +1 -1
  15. package/dist/es/components/Header/Header.js +4 -4
  16. package/dist/es/components/List/List.d.ts +1 -1
  17. package/dist/es/components/List/List.js +3 -3
  18. package/dist/es/components/Notification/Notification.css +20 -7
  19. package/dist/es/components/Search/Search.css +19 -1
  20. package/dist/es/components/Search/Search.d.ts +6 -0
  21. package/dist/es/components/Search/Search.js +12 -3
  22. package/dist/es/components/Select/Select.css +41 -26
  23. package/dist/es/components/Select/Select.d.ts +7 -0
  24. package/dist/es/components/Select/Select.js +14 -5
  25. package/dist/es/components/Tabs/Tabs.css +12 -1
  26. package/dist/es/components/Tabs/Tabs.d.ts +3 -3
  27. package/dist/es/components/Tabs/Tabs.js +8 -6
  28. package/dist/es/components/TextField/TextField.css +33 -20
  29. package/dist/es/components/TextField/TextField.d.ts +2 -0
  30. package/dist/es/components/TextField/TextField.js +14 -9
  31. package/dist/lib/components/Accordion/Accordion.css +6 -4
  32. package/dist/lib/components/Badges/components/PromoBadge/PromoBadge.css +4 -0
  33. package/dist/lib/components/Badges/components/PromoBadge/PromoBadge.d.ts +1 -0
  34. package/dist/lib/components/Badges/components/PromoBadge/PromoBadge.js +2 -1
  35. package/dist/lib/components/Banner/Banner.css +3 -0
  36. package/dist/lib/components/Banner/Banner.d.ts +2 -0
  37. package/dist/lib/components/Banner/Banner.js +5 -1
  38. package/dist/lib/components/Carousel/Carousel.d.ts +2 -0
  39. package/dist/lib/components/Carousel/Carousel.js +7 -2
  40. package/dist/lib/components/ContentArea/ContentArea.css +0 -10
  41. package/dist/lib/components/ContentArea/ContentArea.d.ts +0 -1
  42. package/dist/lib/components/ContentArea/ContentArea.js +1 -3
  43. package/dist/lib/components/Header/Header.d.ts +1 -1
  44. package/dist/lib/components/Header/Header.js +4 -4
  45. package/dist/lib/components/List/List.d.ts +1 -1
  46. package/dist/lib/components/List/List.js +3 -3
  47. package/dist/lib/components/Notification/Notification.css +20 -7
  48. package/dist/lib/components/Search/Search.css +19 -1
  49. package/dist/lib/components/Search/Search.d.ts +6 -0
  50. package/dist/lib/components/Search/Search.js +15 -4
  51. package/dist/lib/components/Select/Select.css +41 -26
  52. package/dist/lib/components/Select/Select.d.ts +7 -0
  53. package/dist/lib/components/Select/Select.js +16 -6
  54. package/dist/lib/components/Tabs/Tabs.css +12 -1
  55. package/dist/lib/components/Tabs/Tabs.d.ts +3 -3
  56. package/dist/lib/components/Tabs/Tabs.js +10 -8
  57. package/dist/lib/components/TextField/TextField.css +33 -20
  58. package/dist/lib/components/TextField/TextField.d.ts +2 -0
  59. package/dist/lib/components/TextField/TextField.js +14 -9
  60. package/package.json +3 -3
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import './Tabs.less';
3
3
  import { ITabProps } from './Tab';
4
- export declare const TabHAlign: {
4
+ export declare const TabAlign: {
5
5
  readonly LEFT: "left";
6
6
  readonly CENTER: "center";
7
7
  };
@@ -15,7 +15,7 @@ export declare const TabColorTheme: {
15
15
  };
16
16
  declare type TabSizeType = typeof TabSize[keyof typeof TabSize];
17
17
  declare type TabColorThemeType = typeof TabColorTheme[keyof typeof TabColorTheme];
18
- declare type TabHAlignType = typeof TabHAlign[keyof typeof TabHAlign];
18
+ declare type TabAlignType = typeof TabAlign[keyof typeof TabAlign];
19
19
  export interface ITabsProps {
20
20
  /** Дополнительный класс для корневого элемента */
21
21
  className?: string;
@@ -41,7 +41,7 @@ export interface ITabsProps {
41
41
  /** Ширина табов по размеру содержимого */
42
42
  autoWidth?: boolean;
43
43
  /** Горизонтальное выравнивание (только для autoWidth = true) */
44
- hAlign?: TabHAlignType;
44
+ align?: TabAlignType;
45
45
  /** Фиксация табов у верхней границы окна */
46
46
  sticky?: boolean;
47
47
  /** Индекс активного таба (включает режим управления табами снаружи) */
@@ -5,7 +5,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports["default"] = exports.TabColorTheme = exports.TabSize = exports.TabHAlign = void 0;
8
+ exports["default"] = exports.TabColorTheme = exports.TabSize = exports.TabAlign = void 0;
9
9
 
10
10
  require("core-js/modules/es.array.for-each");
11
11
 
@@ -49,11 +49,11 @@ var ArrowLeft = function ArrowLeft(props) {
49
49
  }));
50
50
  };
51
51
 
52
- var TabHAlign = {
52
+ var TabAlign = {
53
53
  LEFT: 'left',
54
54
  CENTER: 'center'
55
55
  };
56
- exports.TabHAlign = TabHAlign;
56
+ exports.TabAlign = TabAlign;
57
57
  var TabSize = {
58
58
  MEDIUM: 'medium',
59
59
  LARGE: 'large'
@@ -80,8 +80,8 @@ var Tabs = function Tabs(_ref) {
80
80
  tabColorTheme = _ref$tabColorTheme === void 0 ? 'white' : _ref$tabColorTheme,
81
81
  _ref$sticky = _ref.sticky,
82
82
  sticky = _ref$sticky === void 0 ? false : _ref$sticky,
83
- _ref$hAlign = _ref.hAlign,
84
- hAlign = _ref$hAlign === void 0 ? 'left' : _ref$hAlign,
83
+ _ref$align = _ref.align,
84
+ align = _ref$align === void 0 ? 'left' : _ref$align,
85
85
  _ref$defaultIndex = _ref.defaultIndex,
86
86
  defaultIndex = _ref$defaultIndex === void 0 ? 0 : _ref$defaultIndex,
87
87
  outerIndex = _ref.currentIndex,
@@ -108,7 +108,7 @@ var Tabs = function Tabs(_ref) {
108
108
  isBeginning = _React$useState4[0],
109
109
  setBeginning = _React$useState4[1];
110
110
 
111
- var _React$useState5 = React.useState(false),
111
+ var _React$useState5 = React.useState(true),
112
112
  _React$useState6 = (0, _slicedToArray2["default"])(_React$useState5, 2),
113
113
  isEnd = _React$useState6[0],
114
114
  setEnd = _React$useState6[1];
@@ -392,13 +392,14 @@ var Tabs = function Tabs(_ref) {
392
392
  className: cn({
393
393
  size: size,
394
394
  'tab-color': tabColorTheme,
395
- 'h-align': hAlign,
395
+ 'h-align': align,
396
396
  indents: !innerIndentsClass,
397
397
  sticky: isSticky,
398
398
  'auto-width': autoWidth
399
399
  }, [className, rootClass]),
400
400
  ref: rootRef
401
401
  }), /*#__PURE__*/React.createElement("div", {
402
+ className: cn('wrapper'),
402
403
  ref: tabListRef,
403
404
  style: {
404
405
  height: tabListHeight
@@ -415,6 +416,7 @@ var Tabs = function Tabs(_ref) {
415
416
  beginning: isBeginning,
416
417
  end: isEnd
417
418
  }, [innerIndentsClass]),
419
+ watchOverflow: true,
418
420
  slidesPerView: "auto",
419
421
  initialSlide: currentIndex,
420
422
  onSwiper: handleSwiper,
@@ -460,7 +462,7 @@ Tabs.propTypes = {
460
462
  next: _propTypes["default"].objectOf(_propTypes["default"].string.isRequired)
461
463
  }),
462
464
  size: _propTypes["default"].oneOf(Object.values(TabSize)),
463
- hAlign: _propTypes["default"].oneOf(Object.values(TabHAlign)),
465
+ align: _propTypes["default"].oneOf(Object.values(TabAlign)),
464
466
  autoWidth: _propTypes["default"].bool,
465
467
  tabColorTheme: _propTypes["default"].oneOf(Object.values(TabColorTheme)),
466
468
  sticky: _propTypes["default"].bool,
@@ -113,6 +113,21 @@
113
113
  .mfui-text-field__field:focus::-webkit-input-placeholder {
114
114
  opacity: 1;
115
115
  }
116
+ .mfui-text-field__field:focus:-moz-placeholder {
117
+ opacity: 1;
118
+ }
119
+ .mfui-text-field__field:focus:-ms-input-placeholder {
120
+ opacity: 1;
121
+ }
122
+ .mfui-text-field__field:focus::-moz-placeholder {
123
+ opacity: 1;
124
+ }
125
+ .mfui-text-field__field:focus::-ms-input-placeholder {
126
+ opacity: 1;
127
+ }
128
+ .mfui-text-field__field:focus::placeholder {
129
+ opacity: 1;
130
+ }
116
131
  .mfui-text-field__field::-webkit-scrollbar {
117
132
  width: 16px;
118
133
  }
@@ -125,12 +140,6 @@
125
140
  .mfui-text-field__field::-webkit-scrollbar-thumb:hover {
126
141
  background-color: #999999;
127
142
  }
128
- .mfui-text-field__field:focus:-moz-placeholder {
129
- opacity: 1;
130
- }
131
- .mfui-text-field__field:focus:-ms-input-placeholder {
132
- opacity: 1;
133
- }
134
143
  .mfui-text-field__label {
135
144
  position: absolute;
136
145
  top: 18px;
@@ -152,7 +161,8 @@
152
161
  top: 16px;
153
162
  }
154
163
  .mfui-text-field__field:focus ~ .mfui-text-field__label,
155
- .mfui-text-field__field:not(:placeholder-shown) ~ .mfui-text-field__label {
164
+ .mfui-text-field__field:not(:placeholder-shown) ~ .mfui-text-field__label,
165
+ .mfui-text-field__field:-webkit-autofill ~ .mfui-text-field__label {
156
166
  -webkit-transform: scale(0.8) translate(-11%, -75%);
157
167
  transform: scale(0.8) translate(-11%, -75%);
158
168
  -webkit-transition-duration: 0.2s, 0.01s;
@@ -170,6 +180,19 @@
170
180
  display: flex;
171
181
  overflow: hidden;
172
182
  }
183
+ .mfui-text-field__field-bottom-wrapper {
184
+ display: -webkit-box;
185
+ display: -ms-flexbox;
186
+ display: flex;
187
+ margin-top: 0;
188
+ overflow: hidden;
189
+ color: var(--spbSky3);
190
+ font-size: 12px;
191
+ line-height: 18px;
192
+ }
193
+ .mfui-text-field__field-bottom-wrapper_filled {
194
+ margin-top: 8px;
195
+ }
173
196
  .mfui-text-field__notice-text {
174
197
  height: 0;
175
198
  opacity: 0;
@@ -179,7 +202,7 @@
179
202
  transition-duration: 0.3s;
180
203
  }
181
204
  .mfui-text-field__notice-text_active {
182
- height: 18px;
205
+ height: 100%;
183
206
  opacity: 1;
184
207
  }
185
208
  .mfui-text-field__icon-box {
@@ -230,16 +253,6 @@
230
253
  .mfui-text-field__require-mark {
231
254
  color: var(--fury);
232
255
  }
233
- .mfui-text-field__wrap {
234
- display: -webkit-box;
235
- display: -ms-flexbox;
236
- display: flex;
237
- margin-top: 8px;
238
- overflow: hidden;
239
- color: var(--spbSky3);
240
- font-size: 12px;
241
- line-height: 18px;
242
- }
243
256
  .mfui-text-field__counter {
244
257
  margin-left: auto;
245
258
  }
@@ -268,13 +281,13 @@
268
281
  cursor: default !important;
269
282
  }
270
283
  .mfui-text-field_theme_default.mfui-text-field_error .mfui-text-field__counter_error,
271
- .mfui-text-field_theme_default.mfui-text-field_error .mfui-text-field__wrap {
284
+ .mfui-text-field_theme_default.mfui-text-field_error .mfui-text-field__field-bottom-wrapper {
272
285
  color: var(--fury);
273
286
  }
274
287
  .mfui-text-field_theme_white .mfui-text-field__icon {
275
288
  fill: var(--stcWhite);
276
289
  }
277
- .mfui-text-field_theme_white .mfui-text-field__wrap,
290
+ .mfui-text-field_theme_white .mfui-text-field__field-bottom-wrapper,
278
291
  .mfui-text-field_theme_white .mfui-text-field__counter {
279
292
  color: var(--stcWhite);
280
293
  }
@@ -39,6 +39,8 @@ export declare type TextFieldProps = {
39
39
  inputRef?: (node: HTMLInputElement | HTMLTextAreaElement) => void;
40
40
  /** Имя поля */
41
41
  name?: string;
42
+ /** Запрещает отображение плейсхолдера */
43
+ hidePlaceholder?: boolean;
42
44
  /** Отображаемый текст при отсутствии значения */
43
45
  placeholder?: string;
44
46
  /** Атрибут корневого DOM элемента компонента */
@@ -123,6 +123,8 @@ var TextField = function TextField(_ref) {
123
123
  _ref$textarea = _ref.textarea,
124
124
  textarea = _ref$textarea === void 0 ? false : _ref$textarea,
125
125
  name = _ref.name,
126
+ _ref$hidePlaceholder = _ref.hidePlaceholder,
127
+ hidePlaceholder = _ref$hidePlaceholder === void 0 ? false : _ref$hidePlaceholder,
126
128
  placeholder = _ref.placeholder,
127
129
  required = _ref.required,
128
130
  _ref$isControlled = _ref.isControlled,
@@ -172,8 +174,8 @@ var TextField = function TextField(_ref) {
172
174
 
173
175
  var _useState9 = (0, React.useState)(noticeText),
174
176
  _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
175
- displayedNoticeText = _useState10[0],
176
- setDisplayedNoticeText = _useState10[1];
177
+ currentNoticeText = _useState10[0],
178
+ setCurrentNoticeText = _useState10[1];
177
179
 
178
180
  var _useState11 = (0, React.useState)(false),
179
181
  _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
@@ -195,8 +197,8 @@ var TextField = function TextField(_ref) {
195
197
  return isPasswordType && !isPasswordHidden;
196
198
  }, [isPasswordHidden, isPasswordType]);
197
199
  var hasValue = isControlled ? !!value : !!inputValue;
198
- var isValidVerification = verification === Verification.VALID;
199
- var isErrorVerification = verification === Verification.ERROR;
200
+ var isValidVerification = verification === Verification.VALID && !disabled;
201
+ var isErrorVerification = verification === Verification.ERROR && !disabled;
200
202
  var hasValueForClear = hasValue && !isPasswordType && !customIcon && !isValidVerification;
201
203
  var hasClearIcon = !disabled && (hasValueForClear || isErrorVerification);
202
204
  var actualPlaceholder = placeholder || DEFAULT_PLACEHOLDERS[type];
@@ -214,7 +216,7 @@ var TextField = function TextField(_ref) {
214
216
  checkSymbolMaxLimit(value);
215
217
  }, [value, checkSymbolMaxLimit, isControlled]);
216
218
  (0, React.useEffect)(function () {
217
- noticeText && setDisplayedNoticeText(noticeText);
219
+ noticeText && setCurrentNoticeText(noticeText);
218
220
  }, [noticeText]);
219
221
  (0, React.useEffect)(function () {
220
222
  if (!resizerRef.current || textarea !== TextareaTypes.FLEXIBLE) {
@@ -283,7 +285,7 @@ var TextField = function TextField(_ref) {
283
285
  };
284
286
 
285
287
  var handleNoticeTransitionEnd = (0, React.useCallback)(function () {
286
- !noticeText && setDisplayedNoticeText(noticeText);
288
+ !noticeText && setCurrentNoticeText(noticeText);
287
289
  }, [noticeText]);
288
290
 
289
291
  var handleTextareaScroll = function handleTextareaScroll() {
@@ -332,7 +334,7 @@ var TextField = function TextField(_ref) {
332
334
  onFocus: handleFocus,
333
335
  onKeyUp: onKeyUp,
334
336
  maxLength: maxLength,
335
- placeholder: actualPlaceholder,
337
+ placeholder: hidePlaceholder ? ' ' : actualPlaceholder,
336
338
  required: required,
337
339
  inputMode: inputMode
338
340
  });
@@ -469,13 +471,15 @@ var TextField = function TextField(_ref) {
469
471
  className: cn('resizer'),
470
472
  ref: resizerRef
471
473
  }, /*#__PURE__*/React.createElement(ResizeIcon, null))), /*#__PURE__*/React.createElement("div", {
472
- className: cn('wrap')
474
+ className: cn('field-bottom-wrapper', {
475
+ filled: !!currentNoticeText || !!symbolCounter
476
+ })
473
477
  }, /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({
474
478
  className: cn('notice-text', {
475
479
  active: !!noticeText
476
480
  }),
477
481
  onTransitionEnd: handleNoticeTransitionEnd
478
- }, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.notice)), displayedNoticeText), symbolCounter && /*#__PURE__*/React.createElement("span", {
482
+ }, (0, _uiHelpers.filterDataAttrs)(dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.notice)), currentNoticeText), symbolCounter && /*#__PURE__*/React.createElement("span", {
479
483
  className: cn('counter', {
480
484
  error: isMaxLimitExceeded
481
485
  })
@@ -494,6 +498,7 @@ TextField.propTypes = {
494
498
  inputMode: PropTypes.oneOf(['numeric', 'tel', 'decimal', 'email', 'url', 'search', 'none']),
495
499
  autoComplete: PropTypes.string,
496
500
  name: PropTypes.string,
501
+ hidePlaceholder: PropTypes.bool,
497
502
  placeholder: PropTypes.string,
498
503
  id: PropTypes.string,
499
504
  isControlled: PropTypes.bool,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@megafon/ui-core",
3
- "version": "4.0.0-beta.9",
3
+ "version": "4.0.1",
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.0.0-beta.2",
57
+ "@megafon/ui-icons": "^2.0.0",
58
58
  "@svgr/core": "^2.4.1",
59
59
  "@testing-library/react-hooks": "^7.0.1",
60
60
  "@types/enzyme": "^3.10.5",
@@ -97,5 +97,5 @@
97
97
  "react-popper": "^2.2.3",
98
98
  "swiper": "^6.5.6"
99
99
  },
100
- "gitHead": "7138f5bb06b0aef2c54bcc04b88afa2964643d05"
100
+ "gitHead": "0633ca221fdcbf7374dbb325997c58d72afe80d4"
101
101
  }