@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.
- package/CHANGELOG.md +59 -85
- package/README.md +2 -2
- package/dist/es/colors/Colors.d.ts +2 -2
- package/dist/es/colors/colorsData.js +1 -1
- package/dist/es/components/Accordion/Accordion.js +1 -1
- 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.css +3 -3
- package/dist/es/components/Button/Button.js +3 -3
- 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.js +1 -1
- package/dist/es/components/Counter/Counter.js +3 -3
- package/dist/es/components/Link/Link.d.ts +1 -1
- package/dist/es/components/Link/Link.js +19 -27
- package/dist/es/components/Logo/Logo.js +1 -1
- package/dist/es/components/NavArrow/NavArrow.css +1 -1
- package/dist/es/components/Notification/Notification.css +34 -25
- package/dist/es/components/Notification/Notification.js +4 -2
- 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/Paragraph/Paragraph.css +0 -9
- package/dist/es/components/Paragraph/Paragraph.d.ts +0 -3
- package/dist/es/components/Paragraph/Paragraph.js +1 -4
- package/dist/es/components/RadioButton/RadioButton.js +1 -1
- package/dist/es/components/Search/Search.js +4 -3
- package/dist/es/components/Select/Select.css +5 -2
- package/dist/es/components/Select/Select.d.ts +5 -45
- package/dist/es/components/Select/Select.js +364 -467
- package/dist/es/components/Select/reducer/selectReducer.d.ts +34 -0
- package/dist/es/components/Select/reducer/selectReducer.js +123 -0
- package/dist/es/components/Switcher/Switcher.css +19 -15
- 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 +94 -49
- 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 +4 -2
- package/dist/es/components/Tooltip/Tooltip.js +17 -17
- package/dist/es/index.d.ts +1 -0
- package/dist/es/index.js +1 -0
- package/dist/lib/colors/Colors.d.ts +2 -2
- package/dist/lib/colors/colorsData.js +1 -1
- package/dist/lib/components/Accordion/Accordion.js +1 -1
- 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.css +3 -3
- package/dist/lib/components/Button/Button.js +3 -3
- 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.js +1 -1
- package/dist/lib/components/Counter/Counter.js +3 -3
- package/dist/lib/components/Link/Link.d.ts +1 -1
- package/dist/lib/components/Link/Link.js +28 -43
- package/dist/lib/components/Logo/Logo.js +1 -1
- package/dist/lib/components/NavArrow/NavArrow.css +1 -1
- package/dist/lib/components/Notification/Notification.css +34 -25
- package/dist/lib/components/Notification/Notification.js +4 -2
- 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/Paragraph/Paragraph.css +0 -9
- package/dist/lib/components/Paragraph/Paragraph.d.ts +0 -3
- package/dist/lib/components/Paragraph/Paragraph.js +1 -4
- package/dist/lib/components/RadioButton/RadioButton.js +1 -1
- package/dist/lib/components/Search/Search.js +4 -3
- package/dist/lib/components/Select/Select.css +5 -2
- package/dist/lib/components/Select/Select.d.ts +5 -45
- package/dist/lib/components/Select/Select.js +358 -490
- package/dist/lib/components/Select/reducer/selectReducer.d.ts +34 -0
- package/dist/lib/components/Select/reducer/selectReducer.js +136 -0
- package/dist/lib/components/Switcher/Switcher.css +19 -15
- 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 +94 -49
- 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 +4 -2
- package/dist/lib/components/Tooltip/Tooltip.js +17 -17
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +8 -0
- package/package.json +4 -4
- package/styles/colors.css +2 -2
- 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:
|
|
5
|
-
height:
|
|
4
|
+
width: 48px;
|
|
5
|
+
height: 28px;
|
|
6
|
+
border: 1px solid var(--stcBlack20);
|
|
6
7
|
border-radius: 15.5px;
|
|
7
|
-
background-color: var(--
|
|
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:
|
|
18
|
-
left:
|
|
19
|
-
width:
|
|
20
|
-
height:
|
|
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:
|
|
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
|
|
40
|
-
|
|
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
|
}
|
|
@@ -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
|
-
}, [
|
|
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
|
|
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
|
-
|
|
279
|
-
|
|
280
|
-
|
|
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
|
-
|
|
311
|
-
|
|
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
|
-
|
|
358
|
+
removeObserveEvent();
|
|
322
359
|
};
|
|
323
|
-
}, [
|
|
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,
|
|
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
|
-
/**
|
|
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
|
-
}, [
|
|
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
|
|
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
|
|
227
|
+
onCustomIconClick === null || onCustomIconClick === void 0 ? void 0 : onCustomIconClick(e);
|
|
227
228
|
|
|
228
229
|
if (!isControlled && isClearFuncAvailable) {
|
|
229
230
|
setInputValue('');
|
|
230
|
-
field
|
|
231
|
+
field === null || field === void 0 ? void 0 : field.focus();
|
|
231
232
|
}
|
|
232
|
-
}, [isPasswordType, togglePasswordHiding, onCustomIconClick, verification,
|
|
233
|
+
}, [isPasswordType, togglePasswordHiding, onCustomIconClick, verification, customIcon, isControlled]);
|
|
233
234
|
var handleFocus = (0, React.useCallback)(function (e) {
|
|
234
|
-
onFocus
|
|
235
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
|
|
235
236
|
}, [onFocus]);
|
|
236
237
|
var handleBlur = (0, React.useCallback)(function (e) {
|
|
237
|
-
onBlur
|
|
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
|
|
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
|
|
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"].
|
|
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;
|