@megafon/ui-core 3.0.0-beta.8 → 3.0.2

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 (87) hide show
  1. package/CHANGELOG.md +59 -85
  2. package/README.md +2 -2
  3. package/dist/es/colors/Colors.d.ts +2 -2
  4. package/dist/es/colors/colorsData.js +1 -1
  5. package/dist/es/components/Accordion/Accordion.js +1 -1
  6. package/dist/es/components/Banner/Banner.css +28 -0
  7. package/dist/es/components/Banner/Banner.d.ts +2 -0
  8. package/dist/es/components/Banner/Banner.js +15 -10
  9. package/dist/es/components/Button/Button.css +3 -3
  10. package/dist/es/components/Button/Button.js +3 -3
  11. package/dist/es/components/Calendar/Calendar.js +3 -2
  12. package/dist/es/components/Calendar/components/Day/Day.js +1 -1
  13. package/dist/es/components/Carousel/Carousel.js +17 -14
  14. package/dist/es/components/Checkbox/Checkbox.js +1 -1
  15. package/dist/es/components/Counter/Counter.js +3 -3
  16. package/dist/es/components/Link/Link.d.ts +1 -1
  17. package/dist/es/components/Link/Link.js +19 -27
  18. package/dist/es/components/Logo/Logo.js +1 -1
  19. package/dist/es/components/NavArrow/NavArrow.css +1 -1
  20. package/dist/es/components/Notification/Notification.css +34 -25
  21. package/dist/es/components/Notification/Notification.js +4 -2
  22. package/dist/es/components/Pagination/components/PaginationButton/PaginationButton.js +1 -1
  23. package/dist/es/components/Pagination/helpers.d.ts +1 -1
  24. package/dist/es/components/Paragraph/Paragraph.css +0 -9
  25. package/dist/es/components/Paragraph/Paragraph.d.ts +0 -3
  26. package/dist/es/components/Paragraph/Paragraph.js +1 -4
  27. package/dist/es/components/RadioButton/RadioButton.js +1 -1
  28. package/dist/es/components/Search/Search.js +4 -3
  29. package/dist/es/components/Select/Select.css +5 -2
  30. package/dist/es/components/Select/Select.d.ts +5 -45
  31. package/dist/es/components/Select/Select.js +364 -467
  32. package/dist/es/components/Select/reducer/selectReducer.d.ts +34 -0
  33. package/dist/es/components/Select/reducer/selectReducer.js +123 -0
  34. package/dist/es/components/Switcher/Switcher.css +19 -15
  35. package/dist/es/components/Switcher/Switcher.js +1 -1
  36. package/dist/es/components/Tabs/Tabs.d.ts +2 -0
  37. package/dist/es/components/Tabs/Tabs.js +94 -49
  38. package/dist/es/components/TextField/TextField.d.ts +3 -1
  39. package/dist/es/components/TextField/TextField.js +14 -10
  40. package/dist/es/components/Tile/Tile.js +4 -2
  41. package/dist/es/components/Tooltip/Tooltip.js +17 -17
  42. package/dist/es/index.d.ts +1 -0
  43. package/dist/es/index.js +1 -0
  44. package/dist/lib/colors/Colors.d.ts +2 -2
  45. package/dist/lib/colors/colorsData.js +1 -1
  46. package/dist/lib/components/Accordion/Accordion.js +1 -1
  47. package/dist/lib/components/Banner/Banner.css +28 -0
  48. package/dist/lib/components/Banner/Banner.d.ts +2 -0
  49. package/dist/lib/components/Banner/Banner.js +15 -10
  50. package/dist/lib/components/Button/Button.css +3 -3
  51. package/dist/lib/components/Button/Button.js +3 -3
  52. package/dist/lib/components/Calendar/Calendar.js +3 -3
  53. package/dist/lib/components/Calendar/components/Day/Day.js +1 -1
  54. package/dist/lib/components/Carousel/Carousel.js +15 -12
  55. package/dist/lib/components/Checkbox/Checkbox.js +1 -1
  56. package/dist/lib/components/Counter/Counter.js +3 -3
  57. package/dist/lib/components/Link/Link.d.ts +1 -1
  58. package/dist/lib/components/Link/Link.js +28 -43
  59. package/dist/lib/components/Logo/Logo.js +1 -1
  60. package/dist/lib/components/NavArrow/NavArrow.css +1 -1
  61. package/dist/lib/components/Notification/Notification.css +34 -25
  62. package/dist/lib/components/Notification/Notification.js +4 -2
  63. package/dist/lib/components/Pagination/components/PaginationButton/PaginationButton.js +1 -1
  64. package/dist/lib/components/Pagination/helpers.d.ts +1 -1
  65. package/dist/lib/components/Paragraph/Paragraph.css +0 -9
  66. package/dist/lib/components/Paragraph/Paragraph.d.ts +0 -3
  67. package/dist/lib/components/Paragraph/Paragraph.js +1 -4
  68. package/dist/lib/components/RadioButton/RadioButton.js +1 -1
  69. package/dist/lib/components/Search/Search.js +4 -3
  70. package/dist/lib/components/Select/Select.css +5 -2
  71. package/dist/lib/components/Select/Select.d.ts +5 -45
  72. package/dist/lib/components/Select/Select.js +358 -490
  73. package/dist/lib/components/Select/reducer/selectReducer.d.ts +34 -0
  74. package/dist/lib/components/Select/reducer/selectReducer.js +136 -0
  75. package/dist/lib/components/Switcher/Switcher.css +19 -15
  76. package/dist/lib/components/Switcher/Switcher.js +1 -1
  77. package/dist/lib/components/Tabs/Tabs.d.ts +2 -0
  78. package/dist/lib/components/Tabs/Tabs.js +94 -49
  79. package/dist/lib/components/TextField/TextField.d.ts +3 -1
  80. package/dist/lib/components/TextField/TextField.js +14 -10
  81. package/dist/lib/components/Tile/Tile.js +4 -2
  82. package/dist/lib/components/Tooltip/Tooltip.js +17 -17
  83. package/dist/lib/index.d.ts +1 -0
  84. package/dist/lib/index.js +8 -0
  85. package/package.json +4 -4
  86. package/styles/colors.css +2 -2
  87. package/styles/colorsDark.css +1 -1
@@ -0,0 +1,34 @@
1
+ import { ISelectItem, SelectItemValueType } from '../Select';
2
+ export declare const initialState: {
3
+ isOpened: boolean;
4
+ hoveredItemIndex: number;
5
+ itemsList: never[];
6
+ comparableInputValue: string;
7
+ inputValue: string;
8
+ };
9
+ export declare enum SelectActions {
10
+ TOGGLE_DROPDOWN = "TOGGLE_DROPDOWN",
11
+ UPDATE_ITEMS_LIST = "UPDATE_ITEMS_LIST",
12
+ UPDATE_VALUE_FROM_PROPS = "UPDATE_VALUE_FROM_PROPS",
13
+ UPDATE_SELECT_VALUE = "UPDATE_SELECT_VALUE",
14
+ SET_HOVERED_ITEM_INDEX = "SET_HOVERED_ITEM_INDEX",
15
+ COMBOBOX_VALUE_DEBOUNCE = "COMBOBOX_VALUE_DEBOUNCE",
16
+ COMBOBOX_INPUT_CHANGE = "COMBOBOX_INPUT_CHANGE"
17
+ }
18
+ export interface ISelectState<T extends SelectItemValueType> {
19
+ isOpened: boolean;
20
+ hoveredItemIndex: number;
21
+ itemsList: Array<ISelectItem<T>>;
22
+ comparableInputValue: string;
23
+ inputValue: string;
24
+ }
25
+ export interface ISelectAction<T extends SelectItemValueType> {
26
+ type: SelectActions;
27
+ items?: Array<ISelectItem<T>>;
28
+ hoveredItemIndex?: number;
29
+ inputValue?: string;
30
+ comparableInputValue?: string;
31
+ isOpened?: boolean;
32
+ }
33
+ declare const selectReducer: <T extends string | number | undefined>(state: ISelectState<T>, action: ISelectAction<T>) => ISelectState<T>;
34
+ export default selectReducer;
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = exports.SelectActions = exports.initialState = void 0;
7
+
8
+ require("core-js/modules/es.array.every");
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
+
14
+ var isEqualItems = function isEqualItems(newItems, setItems) {
15
+ if (newItems.length !== setItems.length) {
16
+ return false;
17
+ }
18
+
19
+ return newItems.every(function (item, i) {
20
+ var isEqualValue = item.value === setItems[i].value;
21
+ var isEqualTitle = item.title === setItems[i].title;
22
+ return isEqualValue && isEqualTitle;
23
+ });
24
+ };
25
+
26
+ var initialState = {
27
+ isOpened: false,
28
+ hoveredItemIndex: 0,
29
+ itemsList: [],
30
+ comparableInputValue: '',
31
+ inputValue: ''
32
+ };
33
+ exports.initialState = initialState;
34
+ var SelectActions;
35
+ exports.SelectActions = SelectActions;
36
+
37
+ (function (SelectActions) {
38
+ SelectActions["TOGGLE_DROPDOWN"] = "TOGGLE_DROPDOWN";
39
+ SelectActions["UPDATE_ITEMS_LIST"] = "UPDATE_ITEMS_LIST";
40
+ SelectActions["UPDATE_VALUE_FROM_PROPS"] = "UPDATE_VALUE_FROM_PROPS";
41
+ SelectActions["UPDATE_SELECT_VALUE"] = "UPDATE_SELECT_VALUE";
42
+ SelectActions["SET_HOVERED_ITEM_INDEX"] = "SET_HOVERED_ITEM_INDEX";
43
+ SelectActions["COMBOBOX_VALUE_DEBOUNCE"] = "COMBOBOX_VALUE_DEBOUNCE";
44
+ SelectActions["COMBOBOX_INPUT_CHANGE"] = "COMBOBOX_INPUT_CHANGE";
45
+ })(SelectActions || (exports.SelectActions = SelectActions = {}));
46
+
47
+ var _SelectActions = SelectActions,
48
+ TOGGLE_DROPDOWN = _SelectActions.TOGGLE_DROPDOWN,
49
+ UPDATE_ITEMS_LIST = _SelectActions.UPDATE_ITEMS_LIST,
50
+ UPDATE_VALUE_FROM_PROPS = _SelectActions.UPDATE_VALUE_FROM_PROPS,
51
+ UPDATE_SELECT_VALUE = _SelectActions.UPDATE_SELECT_VALUE,
52
+ SET_HOVERED_ITEM_INDEX = _SelectActions.SET_HOVERED_ITEM_INDEX,
53
+ COMBOBOX_VALUE_DEBOUNCE = _SelectActions.COMBOBOX_VALUE_DEBOUNCE,
54
+ COMBOBOX_INPUT_CHANGE = _SelectActions.COMBOBOX_INPUT_CHANGE;
55
+
56
+ var selectReducer = function selectReducer(state, action) {
57
+ var type = action.type,
58
+ _action$items = action.items,
59
+ items = _action$items === void 0 ? [] : _action$items,
60
+ _action$hoveredItemIn = action.hoveredItemIndex,
61
+ hoveredItemIndex = _action$hoveredItemIn === void 0 ? 0 : _action$hoveredItemIn,
62
+ _action$inputValue = action.inputValue,
63
+ inputValue = _action$inputValue === void 0 ? '' : _action$inputValue,
64
+ _action$comparableInp = action.comparableInputValue,
65
+ comparableInputValue = _action$comparableInp === void 0 ? '' : _action$comparableInp,
66
+ _action$isOpened = action.isOpened,
67
+ isOpened = _action$isOpened === void 0 ? false : _action$isOpened;
68
+ var prevItems = state.itemsList;
69
+
70
+ switch (type) {
71
+ case TOGGLE_DROPDOWN:
72
+ {
73
+ return (0, _extends2["default"])((0, _extends2["default"])({}, state), {
74
+ isOpened: isOpened
75
+ });
76
+ }
77
+
78
+ case UPDATE_ITEMS_LIST:
79
+ {
80
+ var isItemsEqual = isEqualItems(items, prevItems);
81
+ return isItemsEqual ? state : (0, _extends2["default"])((0, _extends2["default"])({}, state), {
82
+ itemsList: items
83
+ });
84
+ }
85
+
86
+ case UPDATE_VALUE_FROM_PROPS:
87
+ {
88
+ return (0, _extends2["default"])((0, _extends2["default"])({}, state), {
89
+ hoveredItemIndex: hoveredItemIndex,
90
+ inputValue: inputValue,
91
+ comparableInputValue: ''
92
+ });
93
+ }
94
+
95
+ case COMBOBOX_VALUE_DEBOUNCE:
96
+ {
97
+ return (0, _extends2["default"])((0, _extends2["default"])({}, state), {
98
+ comparableInputValue: comparableInputValue,
99
+ itemsList: items,
100
+ isOpened: true,
101
+ hoveredItemIndex: 0
102
+ });
103
+ }
104
+
105
+ case UPDATE_SELECT_VALUE:
106
+ {
107
+ return (0, _extends2["default"])((0, _extends2["default"])({}, state), {
108
+ isOpened: false,
109
+ itemsList: items,
110
+ hoveredItemIndex: hoveredItemIndex
111
+ });
112
+ }
113
+
114
+ case SET_HOVERED_ITEM_INDEX:
115
+ {
116
+ return (0, _extends2["default"])((0, _extends2["default"])({}, state), {
117
+ hoveredItemIndex: hoveredItemIndex
118
+ });
119
+ }
120
+
121
+ case COMBOBOX_INPUT_CHANGE:
122
+ {
123
+ return (0, _extends2["default"])((0, _extends2["default"])({}, state), {
124
+ inputValue: inputValue
125
+ });
126
+ }
127
+
128
+ default:
129
+ {
130
+ return state;
131
+ }
132
+ }
133
+ };
134
+
135
+ var _default = selectReducer;
136
+ exports["default"] = _default;
@@ -1,44 +1,48 @@
1
1
  .mfui-switcher {
2
2
  top: 22px;
3
3
  right: 28px;
4
- width: 40px;
5
- height: 24px;
4
+ width: 48px;
5
+ height: 28px;
6
+ border: 1px solid var(--stcBlack20);
6
7
  border-radius: 15.5px;
7
- background-color: var(--spbSky1);
8
+ background-color: var(--base);
8
9
  cursor: pointer;
9
10
  -webkit-transition: all 0.3s;
10
11
  transition: all 0.3s;
11
12
  }
12
- .mfui-switcher_no-touch:hover {
13
- background-color: var(--spbSky1);
14
- }
15
13
  .mfui-switcher__pointer {
16
14
  position: relative;
17
- top: 2px;
18
- left: 2px;
19
- width: 20px;
20
- height: 20px;
15
+ top: 1px;
16
+ left: 1px;
17
+ width: 24px;
18
+ height: 24px;
19
+ border: 1px solid var(--stcBlack20);
21
20
  border-radius: 50%;
22
21
  background-color: var(--base);
22
+ -webkit-box-shadow: 0 3px 3px rgba(0, 0, 0, 0.05), 0 3px 1px rgba(0, 0, 0, 0.05);
23
+ box-shadow: 0 3px 3px rgba(0, 0, 0, 0.05), 0 3px 1px rgba(0, 0, 0, 0.05);
23
24
  -webkit-transition: all 0.3s;
24
25
  transition: all 0.3s;
25
26
  }
27
+ .mfui-switcher_no-touch:hover:not(.mfui-switcher_disabled) {
28
+ background-color: var(--spbSky1);
29
+ }
26
30
  .mfui-switcher_checked {
31
+ border-color: var(--brandGreen);
27
32
  background-color: var(--brandGreen);
28
33
  }
29
34
  .mfui-switcher_checked .mfui-switcher__pointer {
30
- left: 18px;
35
+ left: 21px;
31
36
  }
32
37
  .mfui-switcher_checked.mfui-switcher_no-touch:hover {
38
+ border-color: var(--buttonHoverGreen);
33
39
  background-color: var(--buttonHoverGreen);
34
40
  }
35
41
  .mfui-switcher_disabled {
36
42
  background-color: var(--spbSky1);
37
43
  cursor: default;
38
44
  }
39
- .mfui-switcher_disabled.mfui-switcher_checked.mfui-switcher_no-touch.mfui-switcher:hover {
40
- background-color: var(--spbSky1);
41
- }
42
- .mfui-switcher_disabled .mfui-switcher__pointer {
45
+ .mfui-switcher_disabled.mfui-switcher_checked.mfui-switcher_no-touch {
46
+ border-color: var(--spbSky2);
43
47
  background-color: var(--spbSky2);
44
48
  }
@@ -31,7 +31,7 @@ var Switcher = function Switcher(props) {
31
31
  return;
32
32
  }
33
33
 
34
- onChange && onChange(e);
34
+ onChange === null || onChange === void 0 ? void 0 : onChange(e);
35
35
  };
36
36
 
37
37
  return /*#__PURE__*/React.createElement("div", {
@@ -49,6 +49,8 @@ export interface ITabsProps {
49
49
  defaultIndex?: number;
50
50
  /** Рендер содержимого только для текущего таба */
51
51
  renderOnlyCurrentPanel?: boolean;
52
+ /** Внешний контейнер для режима фиксация табов */
53
+ outerObserveContainer?: HTMLDivElement | null;
52
54
  /** Обработчика клика по табам */
53
55
  onTabClick?: (index: number) => void;
54
56
  children: Array<React.ReactElement<ITabProps>>;
@@ -98,10 +98,12 @@ var Tabs = function Tabs(_ref) {
98
98
  renderOnlyCurrentPanel = _ref$renderOnlyCurren === void 0 ? false : _ref$renderOnlyCurren,
99
99
  children = _ref.children,
100
100
  dataAttrs = _ref.dataAttrs,
101
- onTabClick = _ref.onTabClick;
101
+ onTabClick = _ref.onTabClick,
102
+ outerObserveContainer = _ref.outerObserveContainer;
102
103
  var tabsRef = React.useRef([]);
103
104
  var rootRef = React.useRef(null);
104
105
  var tabListRef = React.useRef(null);
106
+ var intersectionObserverRef = React.useRef();
105
107
 
106
108
  var _React$useState = React.useState(),
107
109
  _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
@@ -194,11 +196,70 @@ var Tabs = function Tabs(_ref) {
194
196
  left: left,
195
197
  right: documentWidth - right
196
198
  });
197
- }, [stickyOffset, isSticky]);
199
+ }, [sticky]);
200
+ var stickyON = React.useCallback(function (leftOffset, rightOffset) {
201
+ var documentWidth = document.documentElement.clientWidth;
202
+ setStickyOffset({
203
+ left: leftOffset,
204
+ right: documentWidth - rightOffset
205
+ });
206
+ setSticky(true);
207
+ }, []);
208
+ var stickyOFF = React.useCallback(function () {
209
+ setStickyOffset({
210
+ left: 0,
211
+ right: 0
212
+ });
213
+ setSticky(false);
214
+ }, []);
215
+ var isContainerNotFitViewport = React.useCallback(function () {
216
+ var _a;
217
+
218
+ var containerHeight = (_a = outerObserveContainer || rootRef.current) === null || _a === void 0 ? void 0 : _a.clientHeight;
219
+ return containerHeight && containerHeight > window.innerHeight;
220
+ }, [outerObserveContainer]);
221
+ var addIntersectionObserver = React.useCallback(function () {
222
+ var observerOptions = {
223
+ threshold: [0, 1]
224
+ };
225
+
226
+ if (isContainerNotFitViewport()) {
227
+ observerOptions.rootMargin = '0px 0px -100%';
228
+ }
229
+
230
+ intersectionObserverRef.current = new IntersectionObserver(function (entries) {
231
+ entries.forEach(function (_ref2) {
232
+ var isIntersecting = _ref2.isIntersecting,
233
+ _ref2$boundingClientR = _ref2.boundingClientRect,
234
+ top = _ref2$boundingClientR.top,
235
+ left = _ref2$boundingClientR.left,
236
+ right = _ref2$boundingClientR.right;
237
+
238
+ if (!tabListRef.current) {
239
+ return;
240
+ }
241
+
242
+ var _tabListRef$current$g = tabListRef.current.getBoundingClientRect(),
243
+ height = _tabListRef$current$g.height,
244
+ tabListNodeLeft = _tabListRef$current$g.left,
245
+ tabListNodeRight = _tabListRef$current$g.right;
246
+
247
+ var leftOffset = outerObserveContainer ? tabListNodeLeft : left;
248
+ var rightOffset = outerObserveContainer ? tabListNodeRight : right;
249
+ setTabListHeight(height);
250
+
251
+ if (isIntersecting) {
252
+ top < 0 ? stickyON(leftOffset, rightOffset) : stickyOFF();
253
+ } else {
254
+ stickyOFF();
255
+ }
256
+ });
257
+ }, observerOptions);
258
+ }, [isContainerNotFitViewport, outerObserveContainer, stickyOFF, stickyON]);
198
259
  var handleTabInnerClick = React.useCallback(function (index) {
199
260
  return function () {
200
261
  setUnderlineTransition('all');
201
- onTabClick && onTabClick(index);
262
+ onTabClick === null || onTabClick === void 0 ? void 0 : onTabClick(index);
202
263
 
203
264
  if (outerIndex === undefined) {
204
265
  setInnerIndex(index);
@@ -226,6 +287,18 @@ var Tabs = function Tabs(_ref) {
226
287
  setBeginning(swiper.isBeginning);
227
288
  setEnd(swiper.isEnd);
228
289
  }, []);
290
+ var addObserveEvent = React.useCallback(function () {
291
+ var _a;
292
+
293
+ var rootRefNode = rootRef.current;
294
+ rootRefNode && ((_a = intersectionObserverRef.current) === null || _a === void 0 ? void 0 : _a.observe(outerObserveContainer || rootRefNode));
295
+ }, [outerObserveContainer]);
296
+ var removeObserveEvent = React.useCallback(function () {
297
+ var _a;
298
+
299
+ var rootRefNode = rootRef.current;
300
+ rootRefNode && ((_a = intersectionObserverRef.current) === null || _a === void 0 ? void 0 : _a.unobserve(outerObserveContainer || rootRefNode));
301
+ }, [outerObserveContainer]);
229
302
  var renderTab = React.useCallback(function (index, title, icon, href) {
230
303
  var ElementType = href ? 'a' : 'div';
231
304
  return /*#__PURE__*/React.createElement(ElementType, {
@@ -257,7 +330,7 @@ var Tabs = function Tabs(_ref) {
257
330
  ref: setTabRef
258
331
  }, (0, _uiHelpers.filterDataAttrs)(data === null || data === void 0 ? void 0 : data.root, i + 1)), renderTabWrapper ? renderTabWrapper(tab) : tab));
259
332
  });
260
- }, [renderTab, children]);
333
+ }, [renderTab, children, activeTabClass, currentIndex, setTabRef, tabClass]);
261
334
  var renderPanels = React.useCallback(function () {
262
335
  return React.Children.map(children, function (child, i) {
263
336
  var panel = child.props.children;
@@ -273,57 +346,27 @@ var Tabs = function Tabs(_ref) {
273
346
  })
274
347
  }), panel);
275
348
  });
276
- }, [children, currentIndex]);
349
+ }, [children, currentIndex, dataAttrs === null || dataAttrs === void 0 ? void 0 : dataAttrs.panel, renderOnlyCurrentPanel]);
277
350
  React.useEffect(function () {
278
- var observer = new IntersectionObserver(function (entries) {
279
- entries.forEach(function (_ref2) {
280
- var isIntersecting = _ref2.isIntersecting,
281
- _ref2$boundingClientR = _ref2.boundingClientRect,
282
- top = _ref2$boundingClientR.top,
283
- left = _ref2$boundingClientR.left,
284
- right = _ref2$boundingClientR.right;
285
-
286
- if (!sticky || !rootRef.current || !tabListRef.current) {
287
- return;
288
- }
289
-
290
- var listHeight = tabListRef.current.clientHeight;
291
- setTabListHeight(listHeight);
292
-
293
- var stickyON = function stickyON(leftOffset, rightOffset) {
294
- var documentWidth = document.documentElement.clientWidth;
295
- setStickyOffset({
296
- left: leftOffset,
297
- right: documentWidth - rightOffset
298
- });
299
- setSticky(true);
300
- };
301
-
302
- var stickyOFF = function stickyOFF() {
303
- setStickyOffset({
304
- left: 0,
305
- right: 0
306
- });
307
- setSticky(false);
308
- };
351
+ if (!sticky) {
352
+ return undefined;
353
+ }
309
354
 
310
- if (isIntersecting) {
311
- top < 0 ? stickyON(left, right) : stickyOFF();
312
- } else {
313
- top < 0 && stickyOFF();
314
- }
315
- });
316
- }, {
317
- threshold: [0, 1]
318
- });
319
- rootRef.current && observer.observe(rootRef.current);
355
+ addIntersectionObserver();
356
+ addObserveEvent();
320
357
  return function () {
321
- rootRef.current && observer.unobserve(rootRef.current);
358
+ removeObserveEvent();
322
359
  };
323
- }, [calculateSticky]);
360
+ }, [addIntersectionObserver, sticky, addObserveEvent, removeObserveEvent]);
324
361
  React.useEffect(function () {
325
362
  var handleResize = (0, _lodash["default"])(function () {
326
363
  calculateSticky();
364
+
365
+ if (sticky && isContainerNotFitViewport()) {
366
+ removeObserveEvent();
367
+ addIntersectionObserver();
368
+ addObserveEvent();
369
+ }
327
370
  }, 300);
328
371
  var activeTabNode = tabsRef.current[currentIndex];
329
372
  var resizeObserver = new ResizeObserver(function (entries) {
@@ -340,8 +383,9 @@ var Tabs = function Tabs(_ref) {
340
383
  window.addEventListener('resize', handleResize);
341
384
  return function () {
342
385
  window.removeEventListener('resize', handleResize);
386
+ resizeObserver.unobserve(activeTabNode);
343
387
  };
344
- }, [calculateUnderline, calculateSticky]);
388
+ }, [sticky, currentIndex, addObserveEvent, calculateSticky, removeObserveEvent, calculateUnderline, addIntersectionObserver, isContainerNotFitViewport]);
345
389
  React.useEffect(function () {
346
390
  if (!swiperInstance) {
347
391
  return;
@@ -427,6 +471,7 @@ Tabs.propTypes = {
427
471
  currentIndex: _propTypes["default"].number,
428
472
  defaultIndex: _propTypes["default"].number,
429
473
  renderOnlyCurrentPanel: _propTypes["default"].bool,
474
+ outerObserveContainer: _propTypes["default"].oneOfType([_propTypes["default"].elementType, _propTypes["default"].any]),
430
475
  onTabClick: _propTypes["default"].func
431
476
  };
432
477
  var _default = Tabs;
@@ -70,8 +70,10 @@ export declare type TextFieldProps = {
70
70
  input?: Record<string, string>;
71
71
  iconBox?: Record<string, string>;
72
72
  };
73
- /** Аргумент элемента input */
73
+ /** Атрибут элемента input */
74
74
  inputMode?: 'numeric' | 'tel' | 'decimal' | 'email' | 'url' | 'search' | 'none';
75
+ /** Атрибут элемента input. Не работает с textarea=true */
76
+ autoComplete?: string;
75
77
  /** Переводит компонент в контролируемое состояние */
76
78
  isControlled?: boolean;
77
79
  /** Обработчик изменения значения */
@@ -121,6 +121,7 @@ var TextField = function TextField(_ref) {
121
121
  noticeText = _ref.noticeText,
122
122
  inputRef = _ref.inputRef,
123
123
  inputMode = _ref.inputMode,
124
+ autoComplete = _ref.autoComplete,
124
125
  _ref$classes = _ref.classes;
125
126
  _ref$classes = _ref$classes === void 0 ? {} : _ref$classes;
126
127
  var input = _ref$classes.input,
@@ -175,7 +176,7 @@ var TextField = function TextField(_ref) {
175
176
  (0, React.useEffect)(function () {
176
177
  !isControlled && setInputValue(value);
177
178
  checkSymbolMaxLimit(value);
178
- }, [value, checkSymbolMaxLimit]);
179
+ }, [value, checkSymbolMaxLimit, isControlled]);
179
180
  (0, React.useEffect)(function () {
180
181
  setTouch((0, _uiHelpers.detectTouch)());
181
182
  }, []);
@@ -183,7 +184,7 @@ var TextField = function TextField(_ref) {
183
184
  return setPasswordHidden(function (prevPassState) {
184
185
  return !prevPassState;
185
186
  });
186
- }, [isPasswordHidden]);
187
+ }, []);
187
188
 
188
189
  var setTextareaHeight = function setTextareaHeight() {
189
190
  if (!(fieldNode === null || fieldNode === void 0 ? void 0 : fieldNode.current)) {
@@ -206,7 +207,7 @@ var TextField = function TextField(_ref) {
206
207
 
207
208
  !isControlled && setInputValue(e.target.value);
208
209
  checkSymbolMaxLimit(e.target.value);
209
- onChange && onChange(e);
210
+ onChange === null || onChange === void 0 ? void 0 : onChange(e);
210
211
  };
211
212
 
212
213
  var handleTextareaClick = function handleTextareaClick() {
@@ -223,18 +224,18 @@ var TextField = function TextField(_ref) {
223
224
  var isClearFuncAvailable = !customIcon && !onCustomIconClick && verification === ERROR;
224
225
  var field = fieldNode.current;
225
226
  isPasswordType && togglePasswordHiding();
226
- onCustomIconClick && onCustomIconClick(e);
227
+ onCustomIconClick === null || onCustomIconClick === void 0 ? void 0 : onCustomIconClick(e);
227
228
 
228
229
  if (!isControlled && isClearFuncAvailable) {
229
230
  setInputValue('');
230
- field && field.focus();
231
+ field === null || field === void 0 ? void 0 : field.focus();
231
232
  }
232
- }, [isPasswordType, togglePasswordHiding, onCustomIconClick, verification, setInputValue]);
233
+ }, [isPasswordType, togglePasswordHiding, onCustomIconClick, verification, customIcon, isControlled]);
233
234
  var handleFocus = (0, React.useCallback)(function (e) {
234
- onFocus && onFocus(e);
235
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
235
236
  }, [onFocus]);
236
237
  var handleBlur = (0, React.useCallback)(function (e) {
237
- onBlur && onBlur(e);
238
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
238
239
  }, [onBlur]);
239
240
  var handleBeforeMaskChange = (0, React.useCallback)(function (newState, oldState, inputedValue) {
240
241
  return onBeforeMaskChange && onBeforeMaskChange(inputedValue, newState, oldState);
@@ -257,7 +258,8 @@ var TextField = function TextField(_ref) {
257
258
  });
258
259
  var inputParams = (0, _extends2["default"])((0, _extends2["default"])({}, commonParams), {
259
260
  className: cn('field', input),
260
- type: isVisiblePassword ? 'text' : type
261
+ type: isVisiblePassword ? 'text' : type,
262
+ autoComplete: autoComplete
261
263
  });
262
264
  var inputMaskParams = {
263
265
  mask: mask,
@@ -277,7 +279,7 @@ var TextField = function TextField(_ref) {
277
279
  }
278
280
 
279
281
  fieldNode.current = node;
280
- inputRef && inputRef(node);
282
+ inputRef === null || inputRef === void 0 ? void 0 : inputRef(node);
281
283
  };
282
284
 
283
285
  var getIcon = function getIcon() {
@@ -396,6 +398,8 @@ TextField.propTypes = {
396
398
  disabled: PropTypes.bool,
397
399
  required: PropTypes.bool,
398
400
  type: PropTypes.oneOf(['text', 'password', 'tel', 'email']),
401
+ inputMode: PropTypes.oneOf(['numeric', 'tel', 'decimal', 'email', 'url', 'search', 'none']),
402
+ autoComplete: PropTypes.string,
399
403
  name: PropTypes.string,
400
404
  placeholder: PropTypes.string,
401
405
  id: PropTypes.string,
@@ -52,7 +52,7 @@ var Tile = function Tile(_ref) {
52
52
  dataAttrs = _ref.dataAttrs;
53
53
 
54
54
  var handleClick = function handleClick(e) {
55
- onClick && onClick(e);
55
+ onClick === null || onClick === void 0 ? void 0 : onClick(e);
56
56
  };
57
57
 
58
58
  var isPointer = !!href || isInteractive;
@@ -79,7 +79,9 @@ Tile.propTypes = {
79
79
  className: _propTypes["default"].string,
80
80
  isInteractive: _propTypes["default"].bool,
81
81
  onClick: _propTypes["default"].func,
82
- dataAttrs: _propTypes["default"].objectOf(_propTypes["default"].string.isRequired)
82
+ dataAttrs: _propTypes["default"].shape({
83
+ root: _propTypes["default"].objectOf(_propTypes["default"].string.isRequired)
84
+ })
83
85
  };
84
86
  var _default = Tile;
85
87
  exports["default"] = _default;