@megafon/ui-core 2.1.4 → 2.5.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 (62) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/es/colors/Colors.d.ts +2 -2
  3. package/dist/es/components/Accordion/Accordion.d.ts +1 -0
  4. package/dist/es/components/Accordion/Accordion.js +4 -2
  5. package/dist/es/components/Banner/Banner.css +28 -0
  6. package/dist/es/components/Banner/Banner.d.ts +2 -0
  7. package/dist/es/components/Banner/Banner.js +15 -10
  8. package/dist/es/components/Button/Button.js +2 -2
  9. package/dist/es/components/Calendar/Calendar.js +3 -2
  10. package/dist/es/components/Calendar/components/Day/Day.js +1 -1
  11. package/dist/es/components/Carousel/Carousel.js +17 -14
  12. package/dist/es/components/Checkbox/Checkbox.d.ts +1 -1
  13. package/dist/es/components/Checkbox/Checkbox.js +1 -1
  14. package/dist/es/components/Counter/Counter.js +3 -3
  15. package/dist/es/components/Header/Header.d.ts +1 -1
  16. package/dist/es/components/Link/Link.d.ts +7 -3
  17. package/dist/es/components/Link/Link.js +21 -8
  18. package/dist/es/components/Pagination/components/PaginationButton/PaginationButton.js +1 -1
  19. package/dist/es/components/Pagination/helpers.d.ts +1 -1
  20. package/dist/es/components/RadioButton/RadioButton.d.ts +5 -1
  21. package/dist/es/components/RadioButton/RadioButton.js +8 -6
  22. package/dist/es/components/Search/Search.js +4 -3
  23. package/dist/es/components/Select/Select.d.ts +3 -3
  24. package/dist/es/components/Select/Select.js +5 -5
  25. package/dist/es/components/Switcher/Switcher.js +1 -1
  26. package/dist/es/components/Tabs/Tabs.d.ts +2 -0
  27. package/dist/es/components/Tabs/Tabs.js +104 -59
  28. package/dist/es/components/TextField/TextField.d.ts +3 -1
  29. package/dist/es/components/TextField/TextField.js +14 -10
  30. package/dist/es/components/Tile/Tile.js +1 -1
  31. package/dist/es/components/Tooltip/Tooltip.js +17 -17
  32. package/dist/lib/colors/Colors.d.ts +2 -2
  33. package/dist/lib/components/Accordion/Accordion.d.ts +1 -0
  34. package/dist/lib/components/Accordion/Accordion.js +4 -2
  35. package/dist/lib/components/Banner/Banner.css +28 -0
  36. package/dist/lib/components/Banner/Banner.d.ts +2 -0
  37. package/dist/lib/components/Banner/Banner.js +15 -10
  38. package/dist/lib/components/Button/Button.js +2 -2
  39. package/dist/lib/components/Calendar/Calendar.js +3 -3
  40. package/dist/lib/components/Calendar/components/Day/Day.js +1 -1
  41. package/dist/lib/components/Carousel/Carousel.js +15 -12
  42. package/dist/lib/components/Checkbox/Checkbox.d.ts +1 -1
  43. package/dist/lib/components/Checkbox/Checkbox.js +1 -1
  44. package/dist/lib/components/Counter/Counter.js +3 -3
  45. package/dist/lib/components/Header/Header.d.ts +1 -1
  46. package/dist/lib/components/Link/Link.d.ts +7 -3
  47. package/dist/lib/components/Link/Link.js +34 -23
  48. package/dist/lib/components/Pagination/components/PaginationButton/PaginationButton.js +1 -1
  49. package/dist/lib/components/Pagination/helpers.d.ts +1 -1
  50. package/dist/lib/components/RadioButton/RadioButton.d.ts +5 -1
  51. package/dist/lib/components/RadioButton/RadioButton.js +7 -5
  52. package/dist/lib/components/Search/Search.js +4 -3
  53. package/dist/lib/components/Select/Select.d.ts +3 -3
  54. package/dist/lib/components/Select/Select.js +5 -5
  55. package/dist/lib/components/Switcher/Switcher.js +1 -1
  56. package/dist/lib/components/Tabs/Tabs.d.ts +2 -0
  57. package/dist/lib/components/Tabs/Tabs.js +104 -59
  58. package/dist/lib/components/TextField/TextField.d.ts +3 -1
  59. package/dist/lib/components/TextField/TextField.js +14 -10
  60. package/dist/lib/components/Tile/Tile.js +1 -1
  61. package/dist/lib/components/Tooltip/Tooltip.js +17 -17
  62. package/package.json +3 -3
@@ -41,6 +41,8 @@ export interface ITabsProps {
41
41
  defaultIndex?: number;
42
42
  /** Рендер содержимого только для текущего таба */
43
43
  renderOnlyCurrentPanel?: boolean;
44
+ /** Внешний контейнер для режима фиксация табов */
45
+ outerObserveContainer?: HTMLDivElement | null;
44
46
  /** Обработчика клика по табам */
45
47
  onTabClick?: (index: number) => void;
46
48
  children: Array<React.ReactElement<ITabProps>>;
@@ -67,10 +67,12 @@ var Tabs = function Tabs(_ref) {
67
67
  _ref$renderOnlyCurren = _ref.renderOnlyCurrentPanel,
68
68
  renderOnlyCurrentPanel = _ref$renderOnlyCurren === void 0 ? false : _ref$renderOnlyCurren,
69
69
  children = _ref.children,
70
- onTabClick = _ref.onTabClick;
70
+ onTabClick = _ref.onTabClick,
71
+ outerObserveContainer = _ref.outerObserveContainer;
71
72
  var tabsRef = React.useRef([]);
72
73
  var rootRef = React.useRef(null);
73
74
  var tabListRef = React.useRef(null);
75
+ var intersectionObserverRef = React.useRef();
74
76
 
75
77
  var _React$useState = React.useState(),
76
78
  _React$useState2 = _slicedToArray(_React$useState, 2),
@@ -164,11 +166,70 @@ var Tabs = function Tabs(_ref) {
164
166
  left: left,
165
167
  right: documentWidth - right
166
168
  });
167
- }, [stickyOffset, isSticky]);
169
+ }, [sticky]);
170
+ var stickyON = React.useCallback(function (leftOffset, rightOffset) {
171
+ var documentWidth = document.documentElement.clientWidth;
172
+ setStickyOffset({
173
+ left: leftOffset,
174
+ right: documentWidth - rightOffset
175
+ });
176
+ setSticky(true);
177
+ }, []);
178
+ var stickyOFF = React.useCallback(function () {
179
+ setStickyOffset({
180
+ left: 0,
181
+ right: 0
182
+ });
183
+ setSticky(false);
184
+ }, []);
185
+ var isContainerNotFitViewport = React.useCallback(function () {
186
+ var _a;
187
+
188
+ var containerHeight = (_a = outerObserveContainer || rootRef.current) === null || _a === void 0 ? void 0 : _a.clientHeight;
189
+ return containerHeight && containerHeight > window.innerHeight;
190
+ }, [outerObserveContainer]);
191
+ var addIntersectionObserver = React.useCallback(function () {
192
+ var observerOptions = {
193
+ threshold: [0, 1]
194
+ };
195
+
196
+ if (isContainerNotFitViewport()) {
197
+ observerOptions.rootMargin = '0px 0px -100%';
198
+ }
199
+
200
+ intersectionObserverRef.current = new IntersectionObserver(function (entries) {
201
+ entries.forEach(function (_ref2) {
202
+ var isIntersecting = _ref2.isIntersecting,
203
+ _ref2$boundingClientR = _ref2.boundingClientRect,
204
+ top = _ref2$boundingClientR.top,
205
+ left = _ref2$boundingClientR.left,
206
+ right = _ref2$boundingClientR.right;
207
+
208
+ if (!tabListRef.current) {
209
+ return;
210
+ }
211
+
212
+ var _tabListRef$current$g = tabListRef.current.getBoundingClientRect(),
213
+ height = _tabListRef$current$g.height,
214
+ tabListNodeLeft = _tabListRef$current$g.left,
215
+ tabListNodeRight = _tabListRef$current$g.right;
216
+
217
+ var leftOffset = outerObserveContainer ? tabListNodeLeft : left;
218
+ var rightOffset = outerObserveContainer ? tabListNodeRight : right;
219
+ setTabListHeight(height);
220
+
221
+ if (isIntersecting) {
222
+ top < 0 ? stickyON(leftOffset, rightOffset) : stickyOFF();
223
+ } else {
224
+ stickyOFF();
225
+ }
226
+ });
227
+ }, observerOptions);
228
+ }, [isContainerNotFitViewport, outerObserveContainer, stickyOFF, stickyON]);
168
229
  var handleTabInnerClick = React.useCallback(function (index) {
169
230
  return function () {
170
231
  setUnderlineTransition('all');
171
- onTabClick && onTabClick(index);
232
+ onTabClick === null || onTabClick === void 0 ? void 0 : onTabClick(index);
172
233
 
173
234
  if (outerIndex === undefined) {
174
235
  setInnerIndex(index);
@@ -186,6 +247,28 @@ var Tabs = function Tabs(_ref) {
186
247
  var handleNextArrowClick = React.useCallback(function () {
187
248
  swiperInstance === null || swiperInstance === void 0 ? void 0 : swiperInstance.slideNext();
188
249
  }, [swiperInstance]);
250
+ var handleReachBeginning = React.useCallback(function (swiper) {
251
+ setBeginning(swiper.isBeginning);
252
+ }, []);
253
+ var handleReachEnd = React.useCallback(function (swiper) {
254
+ setEnd(swiper.isEnd);
255
+ }, []);
256
+ var handleFromEdge = React.useCallback(function (swiper) {
257
+ setBeginning(swiper.isBeginning);
258
+ setEnd(swiper.isEnd);
259
+ }, []);
260
+ var addObserveEvent = React.useCallback(function () {
261
+ var _a;
262
+
263
+ var rootRefNode = rootRef.current;
264
+ rootRefNode && ((_a = intersectionObserverRef.current) === null || _a === void 0 ? void 0 : _a.observe(outerObserveContainer || rootRefNode));
265
+ }, [outerObserveContainer]);
266
+ var removeObserveEvent = React.useCallback(function () {
267
+ var _a;
268
+
269
+ var rootRefNode = rootRef.current;
270
+ rootRefNode && ((_a = intersectionObserverRef.current) === null || _a === void 0 ? void 0 : _a.unobserve(outerObserveContainer || rootRefNode));
271
+ }, [outerObserveContainer]);
189
272
  var renderTab = React.useCallback(function (index, title, icon, href) {
190
273
  var ElementType = href ? 'a' : 'div';
191
274
  return /*#__PURE__*/React.createElement(ElementType, {
@@ -217,7 +300,7 @@ var Tabs = function Tabs(_ref) {
217
300
  ref: setTabRef
218
301
  }, filterDataAttrs(dataAttrs)), renderTabWrapper ? renderTabWrapper(tab) : tab));
219
302
  });
220
- }, [renderTab, children]);
303
+ }, [renderTab, children, activeTabClass, currentIndex, setTabRef, tabClass]);
221
304
  var renderPanels = React.useCallback(function () {
222
305
  return React.Children.map(children, function (child, i) {
223
306
  var panel = child.props.children;
@@ -233,67 +316,27 @@ var Tabs = function Tabs(_ref) {
233
316
  })
234
317
  }, panel);
235
318
  });
236
- }, [children, currentIndex]);
237
- var handleReachBeginning = React.useCallback(function (swiper) {
238
- setBeginning(swiper.isBeginning);
239
- }, []);
240
- var handleReachEnd = React.useCallback(function (swiper) {
241
- setEnd(swiper.isEnd);
242
- }, []);
243
- var handleFromEdge = React.useCallback(function (swiper) {
244
- setBeginning(swiper.isBeginning);
245
- setEnd(swiper.isEnd);
246
- }, []);
319
+ }, [children, currentIndex, renderOnlyCurrentPanel]);
247
320
  React.useEffect(function () {
248
- var observer = new IntersectionObserver(function (entries) {
249
- entries.forEach(function (_ref2) {
250
- var isIntersecting = _ref2.isIntersecting,
251
- _ref2$boundingClientR = _ref2.boundingClientRect,
252
- top = _ref2$boundingClientR.top,
253
- left = _ref2$boundingClientR.left,
254
- right = _ref2$boundingClientR.right;
255
-
256
- if (!sticky || !rootRef.current || !tabListRef.current) {
257
- return;
258
- }
259
-
260
- var listHeight = tabListRef.current.clientHeight;
261
- setTabListHeight(listHeight);
262
-
263
- var stickyON = function stickyON(leftOffset, rightOffset) {
264
- var documentWidth = document.documentElement.clientWidth;
265
- setStickyOffset({
266
- left: leftOffset,
267
- right: documentWidth - rightOffset
268
- });
269
- setSticky(true);
270
- };
271
-
272
- var stickyOFF = function stickyOFF() {
273
- setStickyOffset({
274
- left: 0,
275
- right: 0
276
- });
277
- setSticky(false);
278
- };
321
+ if (!sticky) {
322
+ return undefined;
323
+ }
279
324
 
280
- if (isIntersecting) {
281
- top < 0 ? stickyON(left, right) : stickyOFF();
282
- } else {
283
- top < 0 && stickyOFF();
284
- }
285
- });
286
- }, {
287
- threshold: [0, 1]
288
- });
289
- rootRef.current && observer.observe(rootRef.current);
325
+ addIntersectionObserver();
326
+ addObserveEvent();
290
327
  return function () {
291
- rootRef.current && observer.unobserve(rootRef.current);
328
+ removeObserveEvent();
292
329
  };
293
- }, [calculateSticky]);
330
+ }, [addIntersectionObserver, sticky, addObserveEvent, removeObserveEvent]);
294
331
  React.useEffect(function () {
295
332
  var handleResize = throttle(function () {
296
333
  calculateSticky();
334
+
335
+ if (sticky && isContainerNotFitViewport()) {
336
+ removeObserveEvent();
337
+ addIntersectionObserver();
338
+ addObserveEvent();
339
+ }
297
340
  }, 300);
298
341
  var activeTabNode = tabsRef.current[currentIndex];
299
342
  var resizeObserver = new ResizeObserver(function (entries) {
@@ -310,8 +353,9 @@ var Tabs = function Tabs(_ref) {
310
353
  window.addEventListener('resize', handleResize);
311
354
  return function () {
312
355
  window.removeEventListener('resize', handleResize);
356
+ resizeObserver.unobserve(activeTabNode);
313
357
  };
314
- }, [calculateUnderline, calculateSticky]);
358
+ }, [sticky, currentIndex, addObserveEvent, calculateSticky, removeObserveEvent, calculateUnderline, addIntersectionObserver, isContainerNotFitViewport]);
315
359
  React.useEffect(function () {
316
360
  if (!swiperInstance) {
317
361
  return;
@@ -390,6 +434,7 @@ Tabs.propTypes = {
390
434
  currentIndex: PropTypes.number,
391
435
  defaultIndex: PropTypes.number,
392
436
  renderOnlyCurrentPanel: PropTypes.bool,
437
+ outerObserveContainer: PropTypes.oneOfType([PropTypes.elementType, PropTypes.any]),
393
438
  onTabClick: PropTypes.func
394
439
  };
395
440
  export default Tabs;
@@ -62,8 +62,10 @@ export declare type TextFieldProps = {
62
62
  classes?: {
63
63
  input?: string;
64
64
  };
65
- /** Аргумент элемента input */
65
+ /** Атрибут элемента input */
66
66
  inputMode?: 'numeric' | 'tel' | 'decimal' | 'email' | 'url' | 'search' | 'none';
67
+ /** Атрибут элемента input. Не работает с textarea=true */
68
+ autoComplete?: string;
67
69
  /** Переводит компонент в контролируемое состояние */
68
70
  isControlled?: boolean;
69
71
  /** Обработчик изменения значения */
@@ -96,6 +96,7 @@ var TextField = function TextField(_ref) {
96
96
  noticeText = _ref.noticeText,
97
97
  inputRef = _ref.inputRef,
98
98
  inputMode = _ref.inputMode,
99
+ autoComplete = _ref.autoComplete,
99
100
  _ref$classes = _ref.classes;
100
101
  _ref$classes = _ref$classes === void 0 ? {} : _ref$classes;
101
102
  var input = _ref$classes.input;
@@ -149,7 +150,7 @@ var TextField = function TextField(_ref) {
149
150
  useEffect(function () {
150
151
  !isControlled && setInputValue(value);
151
152
  checkSymbolMaxLimit(value);
152
- }, [value, checkSymbolMaxLimit]);
153
+ }, [value, checkSymbolMaxLimit, isControlled]);
153
154
  useEffect(function () {
154
155
  setTouch(detectTouch());
155
156
  }, []);
@@ -157,7 +158,7 @@ var TextField = function TextField(_ref) {
157
158
  return setPasswordHidden(function (prevPassState) {
158
159
  return !prevPassState;
159
160
  });
160
- }, [isPasswordHidden]);
161
+ }, []);
161
162
 
162
163
  var setTextareaHeight = function setTextareaHeight() {
163
164
  if (!(fieldNode === null || fieldNode === void 0 ? void 0 : fieldNode.current)) {
@@ -180,7 +181,7 @@ var TextField = function TextField(_ref) {
180
181
 
181
182
  !isControlled && setInputValue(e.target.value);
182
183
  checkSymbolMaxLimit(e.target.value);
183
- onChange && onChange(e);
184
+ onChange === null || onChange === void 0 ? void 0 : onChange(e);
184
185
  };
185
186
 
186
187
  var handleTextareaClick = function handleTextareaClick() {
@@ -197,18 +198,18 @@ var TextField = function TextField(_ref) {
197
198
  var isClearFuncAvailable = !customIcon && !onCustomIconClick && verification === ERROR;
198
199
  var field = fieldNode.current;
199
200
  isPasswordType && togglePasswordHiding();
200
- onCustomIconClick && onCustomIconClick(e);
201
+ onCustomIconClick === null || onCustomIconClick === void 0 ? void 0 : onCustomIconClick(e);
201
202
 
202
203
  if (!isControlled && isClearFuncAvailable) {
203
204
  setInputValue('');
204
- field && field.focus();
205
+ field === null || field === void 0 ? void 0 : field.focus();
205
206
  }
206
- }, [isPasswordType, togglePasswordHiding, onCustomIconClick, verification, setInputValue]);
207
+ }, [isPasswordType, togglePasswordHiding, onCustomIconClick, verification, customIcon, isControlled]);
207
208
  var handleFocus = useCallback(function (e) {
208
- onFocus && onFocus(e);
209
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
209
210
  }, [onFocus]);
210
211
  var handleBlur = useCallback(function (e) {
211
- onBlur && onBlur(e);
212
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
212
213
  }, [onBlur]);
213
214
  var handleBeforeMaskChange = useCallback(function (newState, oldState, inputedValue) {
214
215
  return onBeforeMaskChange && onBeforeMaskChange(inputedValue, newState, oldState);
@@ -232,7 +233,8 @@ var TextField = function TextField(_ref) {
232
233
 
233
234
  var inputParams = _extends(_extends({}, commonParams), {
234
235
  className: cn('field', input),
235
- type: isVisiblePassword ? 'text' : type
236
+ type: isVisiblePassword ? 'text' : type,
237
+ autoComplete: autoComplete
236
238
  });
237
239
 
238
240
  var inputMaskParams = {
@@ -254,7 +256,7 @@ var TextField = function TextField(_ref) {
254
256
  }
255
257
 
256
258
  fieldNode.current = node;
257
- inputRef && inputRef(node);
259
+ inputRef === null || inputRef === void 0 ? void 0 : inputRef(node);
258
260
  };
259
261
 
260
262
  var getIcon = function getIcon() {
@@ -370,6 +372,8 @@ TextField.propTypes = {
370
372
  disabled: PropTypes.bool,
371
373
  required: PropTypes.bool,
372
374
  type: PropTypes.oneOf(['text', 'password', 'tel', 'email']),
375
+ inputMode: PropTypes.oneOf(['numeric', 'tel', 'decimal', 'email', 'url', 'search', 'none']),
376
+ autoComplete: PropTypes.string,
373
377
  name: PropTypes.string,
374
378
  placeholder: PropTypes.string,
375
379
  id: PropTypes.string,
@@ -36,7 +36,7 @@ var Tile = function Tile(_ref) {
36
36
  dataAttrs = _ref.dataAttrs;
37
37
 
38
38
  var handleClick = function handleClick(e) {
39
- onClick && onClick(e);
39
+ onClick === null || onClick === void 0 ? void 0 : onClick(e);
40
40
  };
41
41
 
42
42
  var isPointer = !!href || isInteractive;
@@ -82,7 +82,7 @@ var Tooltip = function Tooltip(_ref) {
82
82
 
83
83
  useEffect(function () {
84
84
  return setIsOpen(isOpened);
85
- }, [isOpened, setIsOpen]);
85
+ }, [isOpened]);
86
86
  var options = useMemo(function () {
87
87
  return {
88
88
  placement: placement,
@@ -110,7 +110,7 @@ var Tooltip = function Tooltip(_ref) {
110
110
  }
111
111
  }]
112
112
  };
113
- }, [placement, arrowElement, currentBoundary, isOpen]);
113
+ }, [placement, arrowElement, currentBoundary, isOpen, fallbackPlacements]);
114
114
 
115
115
  var _usePopper = usePopper(currentTarget, popperElement, options),
116
116
  styles = _usePopper.styles,
@@ -118,7 +118,7 @@ var Tooltip = function Tooltip(_ref) {
118
118
  update = _usePopper.update;
119
119
 
120
120
  useEffect(function () {
121
- update && update();
121
+ update === null || update === void 0 ? void 0 : update();
122
122
  }, [children, update]);
123
123
 
124
124
  var _useState7 = useState(false),
@@ -128,7 +128,7 @@ var Tooltip = function Tooltip(_ref) {
128
128
 
129
129
  useEffect(function () {
130
130
  return setIsTouchDevice(detectTouch());
131
- }, [detectTouch, setIsTouchDevice]);
131
+ }, []);
132
132
  var clickEvent = useMemo(function () {
133
133
  return isTouchDevice ? TOUCH_KEY : MOUSE_KEY;
134
134
  }, [isTouchDevice]);
@@ -138,9 +138,9 @@ var Tooltip = function Tooltip(_ref) {
138
138
  var handleMouseEnter = useCallback(function (e) {
139
139
  if (!isOpen) {
140
140
  setIsOpen(true);
141
- onOpen && onOpen(e);
141
+ onOpen === null || onOpen === void 0 ? void 0 : onOpen(e);
142
142
  }
143
- }, [isOpen, onOpen, setIsOpen]);
143
+ }, [isOpen, onOpen]);
144
144
  var handleClick = useCallback(function (e) {
145
145
  if (!checkEventIsClickOrEnterPress(e)) {
146
146
  return;
@@ -151,24 +151,24 @@ var Tooltip = function Tooltip(_ref) {
151
151
  });
152
152
 
153
153
  if (!isOpen) {
154
- onOpen && onOpen(e);
154
+ onOpen === null || onOpen === void 0 ? void 0 : onOpen(e);
155
155
  } else {
156
- onClose && onClose(e);
156
+ onClose === null || onClose === void 0 ? void 0 : onClose(e);
157
157
  }
158
- }, [isOpen, onOpen, onClose, setIsOpen]);
158
+ }, [isOpen, onOpen, onClose]);
159
159
  var handleOutsideEvent = useCallback(function (e) {
160
160
  var isTargetInPopper = e.target instanceof Element && popperElement && popperElement.contains(e.target);
161
161
  var isTargetInTrigger = e.target instanceof Element && currentTrigger && currentTrigger.contains(e.target);
162
162
 
163
163
  if (!isTargetInPopper && !isTargetInTrigger) {
164
164
  setIsOpen(false);
165
- onClose && onClose(e);
165
+ onClose === null || onClose === void 0 ? void 0 : onClose(e);
166
166
  }
167
- }, [onClose, currentTrigger, popperElement, setIsOpen]);
167
+ }, [onClose, currentTrigger, popperElement]);
168
168
  var handleBlurEvent = useCallback(function (e) {
169
169
  setIsOpen(false);
170
- onClose && onClose(e);
171
- }, [onClose, setIsOpen]);
170
+ onClose === null || onClose === void 0 ? void 0 : onClose(e);
171
+ }, [onClose]);
172
172
  useEffect(function () {
173
173
  if (triggerEventName === TriggerEvent.HOVER) {
174
174
  if (currentTrigger) {
@@ -178,10 +178,10 @@ var Tooltip = function Tooltip(_ref) {
178
178
 
179
179
  if (isOpen) {
180
180
  document.addEventListener('mouseover', handleOutsideEvent);
181
- currentTrigger && currentTrigger.addEventListener('blur', handleBlurEvent);
181
+ currentTrigger === null || currentTrigger === void 0 ? void 0 : currentTrigger.addEventListener('blur', handleBlurEvent);
182
182
  } else {
183
183
  document.removeEventListener('mouseover', handleOutsideEvent);
184
- currentTrigger && currentTrigger.removeEventListener('blur', handleBlurEvent);
184
+ currentTrigger === null || currentTrigger === void 0 ? void 0 : currentTrigger.removeEventListener('blur', handleBlurEvent);
185
185
  }
186
186
 
187
187
  return function () {
@@ -195,7 +195,7 @@ var Tooltip = function Tooltip(_ref) {
195
195
  }
196
196
 
197
197
  return undefined;
198
- }, [triggerEventName, isOpen, currentTrigger, handleOutsideEvent, handleMouseEnter]);
198
+ }, [triggerEventName, isOpen, currentTrigger, handleOutsideEvent, handleMouseEnter, handleBlurEvent]);
199
199
  useEffect(function () {
200
200
  if (triggerEventName === TriggerEvent.CLICK) {
201
201
  if (currentTrigger) {
@@ -220,7 +220,7 @@ var Tooltip = function Tooltip(_ref) {
220
220
  }
221
221
 
222
222
  return undefined;
223
- }, [triggerEventName, isOpen, currentTrigger, handleOutsideEvent, handleClick]);
223
+ }, [triggerEventName, isOpen, currentTrigger, handleOutsideEvent, handleClick, clickEvent]);
224
224
  return /*#__PURE__*/React.createElement("div", _extends({
225
225
  className: cn({
226
226
  paddings: paddings,
@@ -1,4 +1,4 @@
1
- /// <reference types="react" />
1
+ import * as React from 'react';
2
2
  import './Colors.less';
3
- declare const Colors: () => JSX.Element;
3
+ declare const Colors: React.FC;
4
4
  export default Colors;
@@ -9,6 +9,7 @@ export interface IAccordionProps extends IFilterDataAttrs {
9
9
  /** Состояние открытости */
10
10
  isOpened?: boolean;
11
11
  /** Вертикальные отступы */
12
+ /** @deprecated */
12
13
  hasVerticalPaddings?: boolean;
13
14
  /** Дополнительный класс для корневого элемента */
14
15
  className?: string;
@@ -73,7 +73,7 @@ var Accordion = function Accordion(_ref) {
73
73
  }, [isOpened]);
74
74
 
75
75
  var handleClickTitle = function handleClickTitle() {
76
- onClickAccordion && onClickAccordion(!isOpenedState, title);
76
+ onClickAccordion === null || onClickAccordion === void 0 ? void 0 : onClickAccordion(!isOpenedState, title);
77
77
  setIsOpenedState(!isOpenedState);
78
78
  };
79
79
 
@@ -107,7 +107,9 @@ Accordion.propTypes = {
107
107
  }), PropTypes.any])]),
108
108
  title: PropTypes.oneOfType([PropTypes.string, PropTypes.node, PropTypes.arrayOf(PropTypes.node)]).isRequired,
109
109
  isOpened: PropTypes.bool,
110
- hasVerticalPaddings: PropTypes.bool,
110
+ hasVerticalPaddings: function hasVerticalPaddings(props, propName) {
111
+ return props[propName] && new Error('Failed prop type: Prop "hasVerticalPaddings" is deprecated');
112
+ },
111
113
  className: PropTypes.string,
112
114
  classes: PropTypes.shape({
113
115
  openedClass: PropTypes.string,
@@ -41,6 +41,11 @@ h5 {
41
41
  -webkit-transform: translateY(-50%);
42
42
  transform: translateY(-50%);
43
43
  }
44
+ @media screen and (max-width: 767px) {
45
+ .mfui-banner__arrow {
46
+ display: none;
47
+ }
48
+ }
44
49
  .mfui-banner__arrow_prev {
45
50
  left: 12px;
46
51
  }
@@ -105,6 +110,29 @@ h5 {
105
110
  .mfui-banner__pagination_theme_dark {
106
111
  background-color: rgba(0, 0, 0, 0.25);
107
112
  }
113
+ .mfui-banner__pagination_bottom-offset {
114
+ bottom: 60px;
115
+ }
116
+ @media screen and (min-width: 768px) and (max-width: 1023px) {
117
+ .mfui-banner__pagination_bottom-offset {
118
+ bottom: 89px;
119
+ }
120
+ }
121
+ @media screen and (min-width: 1024px) and (max-width: 1279px) {
122
+ .mfui-banner__pagination_bottom-offset {
123
+ bottom: 90px;
124
+ }
125
+ }
126
+ @media screen and (min-width: 1280px) and (max-width: 1439px) {
127
+ .mfui-banner__pagination_bottom-offset {
128
+ bottom: 65px;
129
+ }
130
+ }
131
+ @media screen and (min-width: 1440px) {
132
+ .mfui-banner__pagination_bottom-offset {
133
+ bottom: 72px;
134
+ }
135
+ }
108
136
  .mfui-banner__dot {
109
137
  width: 12px;
110
138
  height: 12px;
@@ -16,6 +16,8 @@ export interface IBannerProps {
16
16
  slide?: string;
17
17
  arrow?: string;
18
18
  };
19
+ /** Предполагается использование с наезжанием на баннер следующего за баннером элемента */
20
+ withPaginationBottomOffset?: boolean;
19
21
  /** Автоматическая прокрутка */
20
22
  autoPlay?: boolean;
21
23
  /** Задержка автоматической прокрутки */
@@ -59,6 +59,8 @@ var Banner = function Banner(_ref) {
59
59
  var className = _ref.className,
60
60
  _ref$classes = _ref.classes,
61
61
  classes = _ref$classes === void 0 ? {} : _ref$classes,
62
+ _ref$withPaginationBo = _ref.withPaginationBottomOffset,
63
+ withPaginationBottomOffset = _ref$withPaginationBo === void 0 ? false : _ref$withPaginationBo,
62
64
  _ref$autoPlay = _ref.autoPlay,
63
65
  autoPlay = _ref$autoPlay === void 0 ? false : _ref$autoPlay,
64
66
  _ref$autoPlayDelay = _ref.autoPlayDelay,
@@ -110,7 +112,8 @@ var Banner = function Banner(_ref) {
110
112
  return;
111
113
  }
112
114
 
113
- autoplay.stop();
115
+ autoplay.stop(); // eslint-disable-next-line no-param-reassign
116
+
114
117
  params.autoplay.delay = autoPlayDelay * 3;
115
118
  autoplay.start();
116
119
  }, [autoPlayDelay]);
@@ -120,18 +123,18 @@ var Banner = function Banner(_ref) {
120
123
  }
121
124
 
122
125
  swiperInstance.slidePrev();
123
- onPrevClick && onPrevClick(swiperInstance.realIndex);
126
+ onPrevClick === null || onPrevClick === void 0 ? void 0 : onPrevClick(swiperInstance.realIndex);
124
127
  increaseAutoplayDelay(swiperInstance);
125
- }, [swiperInstance, onPrevClick]);
128
+ }, [swiperInstance, onPrevClick, increaseAutoplayDelay]);
126
129
  var handleNextClick = React.useCallback(function () {
127
130
  if (!swiperInstance) {
128
131
  return;
129
132
  }
130
133
 
131
134
  swiperInstance.slideNext();
132
- onNextClick && onNextClick(swiperInstance.realIndex);
135
+ onNextClick === null || onNextClick === void 0 ? void 0 : onNextClick(swiperInstance.realIndex);
133
136
  increaseAutoplayDelay(swiperInstance);
134
- }, [swiperInstance, onNextClick]);
137
+ }, [swiperInstance, onNextClick, increaseAutoplayDelay]);
135
138
  var handleDotClick = React.useCallback(function (index) {
136
139
  if (!swiperInstance) {
137
140
  return;
@@ -143,9 +146,9 @@ var Banner = function Banner(_ref) {
143
146
  swiperInstance.slideTo(index);
144
147
  }
145
148
 
146
- onDotClick && onDotClick(swiperInstance.realIndex);
149
+ onDotClick === null || onDotClick === void 0 ? void 0 : onDotClick(swiperInstance.realIndex);
147
150
  increaseAutoplayDelay(swiperInstance);
148
- }, [swiperInstance, loop, onDotClick]);
151
+ }, [swiperInstance, loop, onDotClick, increaseAutoplayDelay]);
149
152
  var handleSwiper = React.useCallback(function (swiper) {
150
153
  setSwiperInstance(swiper);
151
154
  }, []);
@@ -168,8 +171,8 @@ var Banner = function Banner(_ref) {
168
171
  var handleSlideChange = React.useCallback(function (_ref4) {
169
172
  var realIndex = _ref4.realIndex;
170
173
  setActiveIndex(realIndex);
171
- onChange && onChange(realIndex);
172
- }, []);
174
+ onChange === null || onChange === void 0 ? void 0 : onChange(realIndex);
175
+ }, [onChange]);
173
176
  var handleAutoplayStop = React.useCallback(function () {
174
177
  setAutoPlayning(false);
175
178
  }, []);
@@ -210,7 +213,8 @@ var Banner = function Banner(_ref) {
210
213
  theme: navArrowTheme
211
214
  }), /*#__PURE__*/React.createElement("div", {
212
215
  className: cn('pagination', {
213
- theme: navTheme
216
+ theme: navTheme,
217
+ 'bottom-offset': withPaginationBottomOffset
214
218
  })
215
219
  }, React.Children.map(children, function (_, i) {
216
220
  return /*#__PURE__*/React.createElement(_BannerDot["default"], {
@@ -231,6 +235,7 @@ Banner.propTypes = {
231
235
  classes: PropTypes.shape({
232
236
  slide: PropTypes.string
233
237
  }),
238
+ withPaginationBottomOffset: PropTypes.bool,
234
239
  autoPlay: PropTypes.bool,
235
240
  autoPlayDelay: PropTypes.number,
236
241
  navTheme: PropTypes.oneOf(Object.values(NavTheme)),
@@ -123,7 +123,7 @@ var Button = function Button(_ref) {
123
123
  return;
124
124
  }
125
125
 
126
- onClick && onClick(e);
126
+ onClick === null || onClick === void 0 ? void 0 : onClick(e);
127
127
  }, [disabled, onClick]);
128
128
 
129
129
  var currentTheme = _react["default"].useMemo(function () {
@@ -185,7 +185,7 @@ var Button = function Button(_ref) {
185
185
  sizeTablet: sizeTablet && getLoaderSize(sizeTablet),
186
186
  sizeMobile: sizeMobile && getLoaderSize(sizeMobile)
187
187
  });
188
- }, [sizeAll, sizeWide, sizeDesktop, sizeTablet, sizeMobile]);
188
+ }, [sizeAll, sizeWide, sizeDesktop, sizeTablet, sizeMobile, loaderColor]);
189
189
 
190
190
  var setRelAttribute = function setRelAttribute() {
191
191
  if (ElementType !== 'a') {
@@ -146,7 +146,7 @@ var Calendar = function Calendar(_ref) {
146
146
  (0, _react.useEffect)(function () {
147
147
  var propsStartDate = calendarStateFromProps.startDate;
148
148
  setCalendarState(calendarStateFromProps);
149
- propsStartDate && goToDate(propsStartDate);
149
+ propsStartDate && goToDate(propsStartDate); // eslint-disable-next-line react-hooks/exhaustive-deps
150
150
  }, [calendarStateFromProps]);
151
151
 
152
152
  var getCalendarState = function getCalendarState(date) {
@@ -211,7 +211,7 @@ var Calendar = function Calendar(_ref) {
211
211
  var nextStartDate = nextState.startDate,
212
212
  nextEndDate = nextState.endDate;
213
213
  setCalendarState(nextState);
214
- onChange && onChange(nextStartDate, nextEndDate);
214
+ onChange === null || onChange === void 0 ? void 0 : onChange(nextStartDate, nextEndDate);
215
215
  };
216
216
 
217
217
  var handleDateHover = function handleDateHover(date) {
@@ -255,7 +255,7 @@ var Calendar = function Calendar(_ref) {
255
255
  var renderMonths = function renderMonths() {
256
256
  return activeMonths.map(function (_ref2) {
257
257
  var month = _ref2.month,
258
- year = _ref2.year;
258
+ year = _ref2.year; // eslint-disable-next-line react-hooks/rules-of-hooks
259
259
 
260
260
  var _useMonth = (0, _hooks.useMonth)({
261
261
  year: year,