@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.
- package/CHANGELOG.md +55 -0
- package/dist/es/colors/Colors.d.ts +2 -2
- package/dist/es/components/Accordion/Accordion.d.ts +1 -0
- package/dist/es/components/Accordion/Accordion.js +4 -2
- package/dist/es/components/Banner/Banner.css +28 -0
- package/dist/es/components/Banner/Banner.d.ts +2 -0
- package/dist/es/components/Banner/Banner.js +15 -10
- package/dist/es/components/Button/Button.js +2 -2
- package/dist/es/components/Calendar/Calendar.js +3 -2
- package/dist/es/components/Calendar/components/Day/Day.js +1 -1
- package/dist/es/components/Carousel/Carousel.js +17 -14
- package/dist/es/components/Checkbox/Checkbox.d.ts +1 -1
- package/dist/es/components/Checkbox/Checkbox.js +1 -1
- package/dist/es/components/Counter/Counter.js +3 -3
- package/dist/es/components/Header/Header.d.ts +1 -1
- package/dist/es/components/Link/Link.d.ts +7 -3
- package/dist/es/components/Link/Link.js +21 -8
- package/dist/es/components/Pagination/components/PaginationButton/PaginationButton.js +1 -1
- package/dist/es/components/Pagination/helpers.d.ts +1 -1
- package/dist/es/components/RadioButton/RadioButton.d.ts +5 -1
- package/dist/es/components/RadioButton/RadioButton.js +8 -6
- package/dist/es/components/Search/Search.js +4 -3
- package/dist/es/components/Select/Select.d.ts +3 -3
- package/dist/es/components/Select/Select.js +5 -5
- package/dist/es/components/Switcher/Switcher.js +1 -1
- package/dist/es/components/Tabs/Tabs.d.ts +2 -0
- package/dist/es/components/Tabs/Tabs.js +104 -59
- package/dist/es/components/TextField/TextField.d.ts +3 -1
- package/dist/es/components/TextField/TextField.js +14 -10
- package/dist/es/components/Tile/Tile.js +1 -1
- package/dist/es/components/Tooltip/Tooltip.js +17 -17
- package/dist/lib/colors/Colors.d.ts +2 -2
- package/dist/lib/components/Accordion/Accordion.d.ts +1 -0
- package/dist/lib/components/Accordion/Accordion.js +4 -2
- package/dist/lib/components/Banner/Banner.css +28 -0
- package/dist/lib/components/Banner/Banner.d.ts +2 -0
- package/dist/lib/components/Banner/Banner.js +15 -10
- package/dist/lib/components/Button/Button.js +2 -2
- package/dist/lib/components/Calendar/Calendar.js +3 -3
- package/dist/lib/components/Calendar/components/Day/Day.js +1 -1
- package/dist/lib/components/Carousel/Carousel.js +15 -12
- package/dist/lib/components/Checkbox/Checkbox.d.ts +1 -1
- package/dist/lib/components/Checkbox/Checkbox.js +1 -1
- package/dist/lib/components/Counter/Counter.js +3 -3
- package/dist/lib/components/Header/Header.d.ts +1 -1
- package/dist/lib/components/Link/Link.d.ts +7 -3
- package/dist/lib/components/Link/Link.js +34 -23
- package/dist/lib/components/Pagination/components/PaginationButton/PaginationButton.js +1 -1
- package/dist/lib/components/Pagination/helpers.d.ts +1 -1
- package/dist/lib/components/RadioButton/RadioButton.d.ts +5 -1
- package/dist/lib/components/RadioButton/RadioButton.js +7 -5
- package/dist/lib/components/Search/Search.js +4 -3
- package/dist/lib/components/Select/Select.d.ts +3 -3
- package/dist/lib/components/Select/Select.js +5 -5
- package/dist/lib/components/Switcher/Switcher.js +1 -1
- package/dist/lib/components/Tabs/Tabs.d.ts +2 -0
- package/dist/lib/components/Tabs/Tabs.js +104 -59
- package/dist/lib/components/TextField/TextField.d.ts +3 -1
- package/dist/lib/components/TextField/TextField.js +14 -10
- package/dist/lib/components/Tile/Tile.js +1 -1
- package/dist/lib/components/Tooltip/Tooltip.js +17 -17
- 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
|
-
}, [
|
|
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
|
|
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
|
-
|
|
249
|
-
|
|
250
|
-
|
|
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
|
-
|
|
281
|
-
|
|
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
|
-
|
|
328
|
+
removeObserveEvent();
|
|
292
329
|
};
|
|
293
|
-
}, [
|
|
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,
|
|
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
|
-
/**
|
|
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
|
-
}, [
|
|
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
|
|
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
|
|
201
|
+
onCustomIconClick === null || onCustomIconClick === void 0 ? void 0 : onCustomIconClick(e);
|
|
201
202
|
|
|
202
203
|
if (!isControlled && isClearFuncAvailable) {
|
|
203
204
|
setInputValue('');
|
|
204
|
-
field
|
|
205
|
+
field === null || field === void 0 ? void 0 : field.focus();
|
|
205
206
|
}
|
|
206
|
-
}, [isPasswordType, togglePasswordHiding, onCustomIconClick, verification,
|
|
207
|
+
}, [isPasswordType, togglePasswordHiding, onCustomIconClick, verification, customIcon, isControlled]);
|
|
207
208
|
var handleFocus = useCallback(function (e) {
|
|
208
|
-
onFocus
|
|
209
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
|
|
209
210
|
}, [onFocus]);
|
|
210
211
|
var handleBlur = useCallback(function (e) {
|
|
211
|
-
onBlur
|
|
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
|
|
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,
|
|
@@ -82,7 +82,7 @@ var Tooltip = function Tooltip(_ref) {
|
|
|
82
82
|
|
|
83
83
|
useEffect(function () {
|
|
84
84
|
return setIsOpen(isOpened);
|
|
85
|
-
}, [isOpened
|
|
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
|
|
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
|
-
}, [
|
|
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
|
|
141
|
+
onOpen === null || onOpen === void 0 ? void 0 : onOpen(e);
|
|
142
142
|
}
|
|
143
|
-
}, [isOpen, onOpen
|
|
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
|
|
154
|
+
onOpen === null || onOpen === void 0 ? void 0 : onOpen(e);
|
|
155
155
|
} else {
|
|
156
|
-
onClose
|
|
156
|
+
onClose === null || onClose === void 0 ? void 0 : onClose(e);
|
|
157
157
|
}
|
|
158
|
-
}, [isOpen, onOpen, onClose
|
|
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
|
|
165
|
+
onClose === null || onClose === void 0 ? void 0 : onClose(e);
|
|
166
166
|
}
|
|
167
|
-
}, [onClose, currentTrigger, popperElement
|
|
167
|
+
}, [onClose, currentTrigger, popperElement]);
|
|
168
168
|
var handleBlurEvent = useCallback(function (e) {
|
|
169
169
|
setIsOpen(false);
|
|
170
|
-
onClose
|
|
171
|
-
}, [onClose
|
|
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
|
|
181
|
+
currentTrigger === null || currentTrigger === void 0 ? void 0 : currentTrigger.addEventListener('blur', handleBlurEvent);
|
|
182
182
|
} else {
|
|
183
183
|
document.removeEventListener('mouseover', handleOutsideEvent);
|
|
184
|
-
currentTrigger
|
|
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,
|
|
@@ -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
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|