@skbkontur/side-menu 1.11.4-collpsing.0 → 1.11.5
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 +8 -0
- package/README.md +5 -3
- package/SideMenuDataTids.d.ts +0 -1
- package/SideMenuDataTids.js +0 -1
- package/hooks/useMemoIcon.d.ts +0 -1
- package/hooks/useMemoIcon.js +0 -11
- package/internal/themes/SideMenuTheme.d.ts +2 -2
- package/internal/themes/SideMenuTheme.js +9 -3
- package/package.json +1 -1
- package/src/SideMenu/SideMenu.d.ts +0 -8
- package/src/SideMenu/SideMenu.js +30 -49
- package/src/SideMenuContext.d.ts +0 -1
- package/src/internal/ClickableElement.js +2 -3
- package/src/internal/InnerBody.js +1 -1
- package/src/internal/RightBorder.d.ts +2 -2
- package/src/internal/RightBorder.js +58 -18
- package/src/internal/RightBorder.styles.d.ts +2 -1
- package/src/internal/RightBorder.styles.js +8 -4
- package/src/internal/SeparatedSubMenu.js +2 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [1.11.5](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@1.11.4...@skbkontur/side-menu@1.11.5) (2024-03-21)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @skbkontur/side-menu
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
## [1.11.4](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@1.11.3...@skbkontur/side-menu@1.11.4) (2024-03-01)
|
|
7
15
|
|
|
8
16
|
|
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
SideMenu в фирменном стиле (макеты живут [здесь](https://www.figma.com/file/XA8Ytcx8bxemYAkF7eGVSv/%D0%9A%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82-%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BC%D0%B5%D0%BD%D1%8E?node-id=0%3A1)).
|
|
2
2
|
|
|
3
|
+
Для корректной работы SideMenu с версии `1.11.0` необходим пакет `@skbkontur/react-ui` версии `4.19.0` или выше
|
|
4
|
+
|
|
3
5
|
[Пример в песочнице](https://codesandbox.io/s/competent-wiles-k85wlm)
|
|
4
6
|
|
|
5
7
|
```jsx harmony
|
|
@@ -689,9 +691,9 @@ const [isOpen, setIsOpen] = React.useState(true);
|
|
|
689
691
|
sideMenuNestedMenuPaddingLeft: string;
|
|
690
692
|
//#endregion
|
|
691
693
|
//#region RightBorder
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
694
|
+
MenuRightBorderWidth: string;
|
|
695
|
+
sideMenuRightBorderColor: string;
|
|
696
|
+
sideMenuRightBorderHoverWidth: string;
|
|
695
697
|
// #region BackButton (for Mobiles)
|
|
696
698
|
sideMenuBackButtonCaptionFontWeight: string;
|
|
697
699
|
sideMenuBackButtonCaptionFontSize: string;
|
package/SideMenuDataTids.d.ts
CHANGED
package/SideMenuDataTids.js
CHANGED
package/hooks/useMemoIcon.d.ts
CHANGED
package/hooks/useMemoIcon.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React, { useMemo } from 'react';
|
|
2
2
|
import { ArrowCDownIcon16Regular } from '@skbkontur/icons/icons/ArrowCDownIcon/ArrowCDownIcon16Regular';
|
|
3
3
|
import { ArrowCRightIcon16Regular } from '@skbkontur/icons/icons/ArrowCRightIcon/ArrowCRightIcon16Regular';
|
|
4
|
-
import { ArrowCLeftIcon16Regular } from '@skbkontur/icons/icons/ArrowCLeftIcon/ArrowCLeftIcon16Regular';
|
|
5
4
|
export var useMemoIcon = function (children, isOpened) {
|
|
6
5
|
return useMemo(function () {
|
|
7
6
|
if (children) {
|
|
@@ -14,13 +13,3 @@ export var useMemoIcon = function (children, isOpened) {
|
|
|
14
13
|
}
|
|
15
14
|
}, [isOpened, children]);
|
|
16
15
|
};
|
|
17
|
-
export var useMemoBorderIcon = function (isCollapsed) {
|
|
18
|
-
return useMemo(function () {
|
|
19
|
-
if (isCollapsed) {
|
|
20
|
-
return React.createElement(ArrowCRightIcon16Regular, null);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
return React.createElement(ArrowCLeftIcon16Regular, null);
|
|
24
|
-
}
|
|
25
|
-
}, [isCollapsed]);
|
|
26
|
-
};
|
|
@@ -101,8 +101,8 @@ export declare class SideMenuTheme extends SideMenuTheme_base {
|
|
|
101
101
|
static sideMenuDividerBgColor: string;
|
|
102
102
|
static sideMenuNestedMenuPaddingLeft: string;
|
|
103
103
|
static sideMenuRightBorderWidth: string;
|
|
104
|
-
static
|
|
105
|
-
static
|
|
104
|
+
static get sideMenuRightBorderColor(): string;
|
|
105
|
+
static sideMenuRightBorderHoverWidth: string;
|
|
106
106
|
static sideMenuLogotypePaddingLeft: string;
|
|
107
107
|
static sideMenuLogotypePaddingTop: string;
|
|
108
108
|
static sideMenuLogotypePaddingBottom: string;
|
|
@@ -107,6 +107,13 @@ var SideMenuTheme = /** @class */ (function (_super) {
|
|
|
107
107
|
enumerable: false,
|
|
108
108
|
configurable: true
|
|
109
109
|
});
|
|
110
|
+
Object.defineProperty(SideMenuTheme, "sideMenuRightBorderColor", {
|
|
111
|
+
get: function () {
|
|
112
|
+
return this.sideMenuProductColor;
|
|
113
|
+
},
|
|
114
|
+
enumerable: false,
|
|
115
|
+
configurable: true
|
|
116
|
+
});
|
|
110
117
|
Object.defineProperty(SideMenuTheme, "sideMenuFooterDividerColor", {
|
|
111
118
|
get: function () {
|
|
112
119
|
return this.sideMenuDividerBgColor;
|
|
@@ -231,9 +238,8 @@ var SideMenuTheme = /** @class */ (function (_super) {
|
|
|
231
238
|
SideMenuTheme.sideMenuNestedMenuPaddingLeft = '16px';
|
|
232
239
|
//#endregion
|
|
233
240
|
//#region RightBorder
|
|
234
|
-
SideMenuTheme.sideMenuRightBorderWidth = '
|
|
235
|
-
SideMenuTheme.
|
|
236
|
-
SideMenuTheme.sideMenuRightBorderHoverIconColor = '#222222';
|
|
241
|
+
SideMenuTheme.sideMenuRightBorderWidth = '20px';
|
|
242
|
+
SideMenuTheme.sideMenuRightBorderHoverWidth = '2px';
|
|
237
243
|
//#endregion
|
|
238
244
|
//#region Logotype
|
|
239
245
|
SideMenuTheme.sideMenuLogotypePaddingLeft = '8px';
|
package/package.json
CHANGED
|
@@ -17,15 +17,7 @@ export interface SideMenuProps extends CommonProps {
|
|
|
17
17
|
children?: React.ReactNode;
|
|
18
18
|
size?: 'small' | 'large';
|
|
19
19
|
isSeparatedMenu?: boolean;
|
|
20
|
-
/**
|
|
21
|
-
* Заблокировать возможность сворачивания меню до иконок на широких экранах
|
|
22
|
-
* @deprecated use disableCollapsing
|
|
23
|
-
*/
|
|
24
20
|
disableSwipe?: boolean;
|
|
25
|
-
/**
|
|
26
|
-
* Заблокировать возможность сворачивания меню до иконок на широких экранах
|
|
27
|
-
*/
|
|
28
|
-
disableCollapsing?: boolean;
|
|
29
21
|
value?: string;
|
|
30
22
|
onValueChange?: (value: string) => void;
|
|
31
23
|
desktopMediaQuery?: string;
|
package/src/SideMenu/SideMenu.js
CHANGED
|
@@ -31,7 +31,7 @@ export var transitionDuration = 300; //ms
|
|
|
31
31
|
export var burgerTransitionDuration = (transitionDuration * 2) / 3;
|
|
32
32
|
var SideMenuInner = forwardRef(function (_a, ref) {
|
|
33
33
|
var _b, _c, _d, _e;
|
|
34
|
-
var children = _a.children, value = _a.value, onValueChange = _a.onValueChange, _f = _a.size, size = _f === void 0 ? 'small' : _f, _g = _a.isSeparatedMenu, isSeparatedMenu = _g === void 0 ? false : _g, className = _a.className, _h = _a.disableSwipe, disableSwipe = _h === void 0 ? true : _h,
|
|
34
|
+
var children = _a.children, value = _a.value, onValueChange = _a.onValueChange, _f = _a.size, size = _f === void 0 ? 'small' : _f, _g = _a.isSeparatedMenu, isSeparatedMenu = _g === void 0 ? false : _g, className = _a.className, _h = _a.disableSwipe, disableSwipe = _h === void 0 ? true : _h, desktopMediaQuery = _a.desktopMediaQuery, narrowDesktopMediaQuery = _a.narrowDesktopMediaQuery, tabletMediaQuery = _a.tabletMediaQuery, mobileMediaQuery = _a.mobileMediaQuery, _j = _a.hideScrollBar, hideScrollBar = _j === void 0 ? undefined : _j, _k = _a.showScrollBar, showScrollBar = _k === void 0 ? 'hover' : _k, isOpen = _a.isOpen, onOpen = _a.onOpen, onClose = _a.onClose, rest = __rest(_a, ["children", "value", "onValueChange", "size", "isSeparatedMenu", "className", "disableSwipe", "desktopMediaQuery", "narrowDesktopMediaQuery", "tabletMediaQuery", "mobileMediaQuery", "hideScrollBar", "showScrollBar", "isOpen", "onOpen", "onClose"]);
|
|
35
35
|
var transitionTimer = useRef(null);
|
|
36
36
|
var sideMenuRef = useRef(null);
|
|
37
37
|
var contentWrapperRef = useRef(null);
|
|
@@ -43,31 +43,26 @@ var SideMenuInner = forwardRef(function (_a, ref) {
|
|
|
43
43
|
isNarrowDesktopQuery: narrowDesktopMediaQuery || theme.sideMenuNarrowDesktopMediaQuery,
|
|
44
44
|
isDesktopQuery: desktopMediaQuery || theme.sideMenuDesktopMediaQuery,
|
|
45
45
|
};
|
|
46
|
-
var
|
|
46
|
+
var _l = useResponsiveLayout({
|
|
47
47
|
customMediaQueries: customMediaQueries,
|
|
48
|
-
}), isMobileQuery =
|
|
48
|
+
}), isMobileQuery = _l.isMobileQuery, isTabletQuery = _l.isTabletQuery, isNarrowDesktopQuery = _l.isNarrowDesktopQuery, isDesktopQuery = _l.isDesktopQuery;
|
|
49
49
|
var isNarrowDesktop = isNarrowDesktopQuery && !isDesktopQuery;
|
|
50
50
|
var isTablet = isTabletQuery && !isNarrowDesktopQuery;
|
|
51
51
|
var isMobile = isMobileQuery && !isTabletQuery;
|
|
52
52
|
var isTabletOrMobile = isTablet || isMobile;
|
|
53
53
|
var isTouchScreen = isTouchDevice() || isMobile || isTablet;
|
|
54
54
|
var manual = isOpen !== undefined;
|
|
55
|
-
var
|
|
56
|
-
var
|
|
57
|
-
var
|
|
58
|
-
var
|
|
59
|
-
var
|
|
60
|
-
var
|
|
61
|
-
var
|
|
62
|
-
var
|
|
63
|
-
var
|
|
64
|
-
var
|
|
65
|
-
var _y = useState(false), isCollapsable = _y[0], setIsCollapsable = _y[1];
|
|
66
|
-
var _z = useState(0), leftPosition = _z[0], setLeftPosition = _z[1];
|
|
67
|
-
var _0 = useState(false), isHovered = _0[0], setIsHovered = _0[1];
|
|
55
|
+
var _m = useState(isDesktopQuery), isOpened = _m[0], setIsOpened = _m[1];
|
|
56
|
+
var _o = useState(false), isBeingTransitioned = _o[0], setIsBeingTransitioned = _o[1];
|
|
57
|
+
var _p = useState(value), activeMenuItem = _p[0], setActiveMenuItem = _p[1];
|
|
58
|
+
var _q = useState(null), clickedButton = _q[0], setClickedButton = _q[1];
|
|
59
|
+
var _r = useState(false), isSeparatedMenuShown = _r[0], setIsSeparatedMenuShown = _r[1];
|
|
60
|
+
var _s = useState(true), isMouseOutside = _s[0], setIsMouseOutside = _s[1];
|
|
61
|
+
var _t = useState('top'), scrollState = _t[0], setScrollState = _t[1];
|
|
62
|
+
var _u = useState(false), hasScrollBar = _u[0], setHasScrollBar = _u[1];
|
|
63
|
+
var _v = useState(0), mousePositionX = _v[0], setMousePositionX = _v[1];
|
|
64
|
+
var _w = useState(0), headerHeight = _w[0], setHeaderHeight = _w[1];
|
|
68
65
|
useEffect(function () {
|
|
69
|
-
var _a;
|
|
70
|
-
setLeftPosition(((_a = sideMenuRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().left) || 0);
|
|
71
66
|
return function () {
|
|
72
67
|
if (transitionTimer.current) {
|
|
73
68
|
clearTimeout(transitionTimer.current);
|
|
@@ -127,33 +122,30 @@ var SideMenuInner = forwardRef(function (_a, ref) {
|
|
|
127
122
|
if ((isSeparatedMenu && isSeparatedMenuShown && isNarrowDesktop && manual) || isTouchScreen) {
|
|
128
123
|
return;
|
|
129
124
|
}
|
|
130
|
-
|
|
131
|
-
if (isNarrowDesktop || (isDesktopQuery && !isOpened && isCollapsable)) {
|
|
125
|
+
if (isNarrowDesktop || (isDesktopQuery && !isOpened)) {
|
|
132
126
|
isMouseOutside && showMinimizedRoot(false);
|
|
133
127
|
setIsMouseOutside(false);
|
|
134
128
|
}
|
|
135
129
|
};
|
|
136
130
|
var handleMouseLeave = function () {
|
|
137
|
-
|
|
138
|
-
if (isNarrowDesktop || (isDesktopQuery && isCollapsable)) {
|
|
131
|
+
if (isNarrowDesktop) {
|
|
139
132
|
handleIsOpened(false, !manual);
|
|
140
133
|
}
|
|
141
|
-
if ((isNarrowDesktop || (isDesktopQuery &&
|
|
134
|
+
if ((isNarrowDesktop || (isDesktopQuery && !isOpened)) && !manual) {
|
|
142
135
|
setIsMouseOutside(true);
|
|
143
136
|
}
|
|
144
137
|
};
|
|
145
138
|
var showMinimizedRootForNarrowDesktop = function (e) {
|
|
146
|
-
if (!
|
|
139
|
+
if (!isSeparatedMenu || !isNarrowDesktop)
|
|
147
140
|
return;
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
if (relativeXCoordinate <= sideMenuMinimizedWidth && mousePositionX >= sideMenuMinimizedWidth) {
|
|
141
|
+
if (e.clientX <= parseInt(theme.sideMenuMinimizedWidth) &&
|
|
142
|
+
mousePositionX >= parseInt(theme.sideMenuMinimizedWidth)) {
|
|
151
143
|
showMinimizedRoot(false);
|
|
152
144
|
}
|
|
153
|
-
|
|
145
|
+
if (e.clientX > parseInt(theme.sideMenuWidth)) {
|
|
154
146
|
showMinimizedRoot(true);
|
|
155
147
|
}
|
|
156
|
-
setMousePositionX(
|
|
148
|
+
setMousePositionX(e.clientX);
|
|
157
149
|
};
|
|
158
150
|
var switchActiveMenuItem = function (id) {
|
|
159
151
|
if (id !== value) {
|
|
@@ -175,14 +167,13 @@ var SideMenuInner = forwardRef(function (_a, ref) {
|
|
|
175
167
|
}, burgerTransitionDuration);
|
|
176
168
|
}
|
|
177
169
|
};
|
|
178
|
-
var isSideMenuOverContent = (isNarrowDesktop || isMobile || (isTablet && !isSeparatedMenuShown)
|
|
179
|
-
|
|
180
|
-
var _1 = useAnimateOnMount(!!isTabletOrMobile && !!isOpened, burgerTransitionDuration, {
|
|
170
|
+
var isSideMenuOverContent = (isNarrowDesktop || isMobile || (isTablet && !isSeparatedMenuShown)) && isOpened;
|
|
171
|
+
var _x = useAnimateOnMount(!!isTabletOrMobile && !!isOpened, burgerTransitionDuration, {
|
|
181
172
|
opacity: DEFAULT_THEME.sidePageBackingBgOpacity,
|
|
182
173
|
}, {
|
|
183
174
|
opacity: 0,
|
|
184
|
-
}), shouldShowBackdrop =
|
|
185
|
-
var isSideMenuOverflowing = (isTabletOrMobile || isNarrowDesktop
|
|
175
|
+
}), shouldShowBackdrop = _x[0], backdropStyle = _x[1];
|
|
176
|
+
var isSideMenuOverflowing = (isTabletOrMobile || isNarrowDesktop) && isOpened;
|
|
186
177
|
var setScrollBar = function () {
|
|
187
178
|
var isSeparatedMenuShownInMobile = isMobile && isSeparatedMenuShown;
|
|
188
179
|
if (isOpened && !isBeingTransitioned && !isSeparatedMenuShownInMobile) {
|
|
@@ -190,18 +181,8 @@ var SideMenuInner = forwardRef(function (_a, ref) {
|
|
|
190
181
|
}
|
|
191
182
|
return 'never';
|
|
192
183
|
};
|
|
193
|
-
var handleRightBorderClick = function () {
|
|
194
|
-
if (isCollapsable) {
|
|
195
|
-
setIsCollapsable(false);
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
setIsOpened(false);
|
|
199
|
-
setIsCollapsable(true);
|
|
200
|
-
}
|
|
201
|
-
};
|
|
202
184
|
return (React.createElement(SideMenuContext.Provider, { value: {
|
|
203
185
|
isOpened: isOpened,
|
|
204
|
-
isCollapsable: isCollapsable,
|
|
205
186
|
toggleIsOpened: function () { return showMenu(!isOpened); },
|
|
206
187
|
setIsMinimized: showMinimizedRoot,
|
|
207
188
|
isBeingTransitioned: isBeingTransitioned,
|
|
@@ -235,10 +216,10 @@ var SideMenuInner = forwardRef(function (_a, ref) {
|
|
|
235
216
|
_b[customStyles.rootForTabletsOrMobiles(headerHeight)] = isTabletOrMobile,
|
|
236
217
|
_b[jsStylesForSideMenu.shownRootForTabletsOrMobiles()] = isOpened && isTabletOrMobile,
|
|
237
218
|
_b[jsStylesForSideMenu.transitionedRootForTabletsOrMobiles()] = isBeingTransitioned && isTabletOrMobile,
|
|
238
|
-
_b[jsStylesForSideMenu.rootForNarrowDesktops(theme)] = isNarrowDesktop
|
|
239
|
-
_b[jsStylesForSideMenu.separatedRootForNarrowDesktops(theme)] = isSeparatedMenuShown &&
|
|
240
|
-
_b[jsStylesForSideMenu.separatedRootForTouchScreens(theme)] = isSeparatedMenuShown && isTouchScreen &&
|
|
241
|
-
_b[jsStylesForSideMenu.separatedRootForDesktops(theme)] = isSeparatedMenuShown && isDesktopQuery
|
|
219
|
+
_b[jsStylesForSideMenu.rootForNarrowDesktops(theme)] = isNarrowDesktop,
|
|
220
|
+
_b[jsStylesForSideMenu.separatedRootForNarrowDesktops(theme)] = isSeparatedMenuShown && isNarrowDesktop,
|
|
221
|
+
_b[jsStylesForSideMenu.separatedRootForTouchScreens(theme)] = isSeparatedMenuShown && isTouchScreen && isNarrowDesktop,
|
|
222
|
+
_b[jsStylesForSideMenu.separatedRootForDesktops(theme)] = isSeparatedMenuShown && isDesktopQuery,
|
|
242
223
|
_b[jsStylesForSideMenu.separatedRootForTouchScreensForDesktops(theme)] = isDesktopQuery && isSeparatedMenuShown && isTouchScreen,
|
|
243
224
|
_b)) },
|
|
244
225
|
React.createElement(React.Fragment, null,
|
|
@@ -264,7 +245,7 @@ var SideMenuInner = forwardRef(function (_a, ref) {
|
|
|
264
245
|
_e[jsStylesForSideMenu.contentWrapperForTouchScreens(theme)] = isTouchScreen,
|
|
265
246
|
_e[jsStylesForSideMenu.minimizedContentWrapper()] = !isOpened && !isTabletOrMobile,
|
|
266
247
|
_e)), ref: contentWrapperRef }, children))),
|
|
267
|
-
!disableSwipe &&
|
|
248
|
+
!disableSwipe && isDesktopQuery && !isSeparatedMenuShown && (React.createElement(RightBorder, { setIsOpened: handleIsOpened, manual: manual }))))))));
|
|
268
249
|
});
|
|
269
250
|
SideMenuInner.displayName = 'SideMenu';
|
|
270
251
|
var STATIC_PROPS = {
|
package/src/SideMenuContext.d.ts
CHANGED
|
@@ -18,7 +18,6 @@ export interface SideMenuContextType {
|
|
|
18
18
|
isMobile?: boolean;
|
|
19
19
|
isTouchScreen?: boolean;
|
|
20
20
|
isOpened?: boolean;
|
|
21
|
-
isCollapsable?: boolean;
|
|
22
21
|
toggleIsOpened?: () => void;
|
|
23
22
|
setIsMinimized?: (isMinimized: boolean) => void;
|
|
24
23
|
flattedArrayOfAllElements?: FlattedArrayElementType[];
|
|
@@ -50,11 +50,10 @@ var ClickableElement = forwardRef(function (_a, ref) {
|
|
|
50
50
|
};
|
|
51
51
|
var setIsMinimized = function (lastElementInTheHierarchy) {
|
|
52
52
|
var _a, _b;
|
|
53
|
-
if (context.isMobile || context.isTablet ||
|
|
53
|
+
if (context.isMobile || context.isTablet || context.isDesktop)
|
|
54
54
|
return;
|
|
55
55
|
var topLevelItemInSeparatedSideMenu = context.isSeparatedMenu && !_isSubMenu && children;
|
|
56
|
-
if (
|
|
57
|
-
(lastElementInTheHierarchy || topLevelItemInSeparatedSideMenu)) {
|
|
56
|
+
if (context.isNarrowDesktop && (lastElementInTheHierarchy || topLevelItemInSeparatedSideMenu)) {
|
|
58
57
|
(_a = context.setIsMinimized) === null || _a === void 0 ? void 0 : _a.call(context, true);
|
|
59
58
|
}
|
|
60
59
|
if (!_isSubMenu) {
|
|
@@ -64,7 +64,7 @@ var InnerBody = function (_a) {
|
|
|
64
64
|
return;
|
|
65
65
|
var activeItemHasParent = activeMenuItemHasParent();
|
|
66
66
|
var isActive = activeItemHasParent || activeMenuItemHasChildren() || false;
|
|
67
|
-
var isMinimizedInWideDesktop = !context.isOpened && context.isDesktop
|
|
67
|
+
var isMinimizedInWideDesktop = !context.isOpened && context.isDesktop;
|
|
68
68
|
if (context.isMobile && !activeItemHasParent && context.isSeparatedMenuShown) {
|
|
69
69
|
return (_a = context.setIsSeparatedMenuShown) === null || _a === void 0 ? void 0 : _a.call(context, false);
|
|
70
70
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
interface RightBorderProps {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
setIsOpened: (newValue: boolean | undefined, shouldSetState: boolean) => void;
|
|
4
|
+
manual: boolean;
|
|
5
5
|
}
|
|
6
6
|
declare const RightBorderWithStaticFields: React.ForwardRefExoticComponent<RightBorderProps & React.RefAttributes<HTMLDivElement>> & {
|
|
7
7
|
__KONTUR_REACT_UI__: string;
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import React, { forwardRef, useContext } from 'react';
|
|
1
|
+
import React, { forwardRef, useContext, useEffect, useRef, useState } from 'react';
|
|
2
2
|
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
3
3
|
import { jsStyles } from './RightBorder.styles';
|
|
4
4
|
import { getSideMenuTheme } from '../../lib/theming/ThemeHelpers';
|
|
5
|
-
import {
|
|
6
|
-
import { useMemoBorderIcon } from '../../hooks/useMemoIcon';
|
|
7
|
-
import { SideMenuContext } from '../SideMenuContext';
|
|
8
|
-
import { SideMenuDataTids } from '../../SideMenuDataTids';
|
|
5
|
+
import { ThemeContext } from '@skbkontur/react-ui';
|
|
9
6
|
/**
|
|
10
7
|
* Элемент интерактивной правой границы
|
|
11
8
|
*
|
|
@@ -13,20 +10,63 @@ import { SideMenuDataTids } from '../../SideMenuDataTids';
|
|
|
13
10
|
*/
|
|
14
11
|
var RightBorder = forwardRef(function (_a, ref) {
|
|
15
12
|
var _b;
|
|
16
|
-
var
|
|
13
|
+
var setIsOpened = _a.setIsOpened, manual = _a.manual;
|
|
17
14
|
var theme = getSideMenuTheme(useContext(ThemeContext));
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
15
|
+
var resizeTimer = useRef(null);
|
|
16
|
+
var _c = useState(false), isAbleToResize = _c[0], setIsAbleToResize = _c[1];
|
|
17
|
+
var rightBorderRef = useRef(null);
|
|
18
|
+
var handleMouseEnter = function () {
|
|
19
|
+
resizeTimer.current = setTimeout(function () {
|
|
20
|
+
setIsAbleToResize(true);
|
|
21
|
+
}, 500);
|
|
22
|
+
};
|
|
23
|
+
var handleMouseLeave = function () {
|
|
24
|
+
if (resizeTimer.current) {
|
|
25
|
+
clearTimeout(resizeTimer.current);
|
|
26
|
+
}
|
|
27
|
+
setIsAbleToResize(false);
|
|
28
|
+
};
|
|
29
|
+
var isMouseDown = false, startX = 0;
|
|
30
|
+
var checkStart = function (event) {
|
|
31
|
+
startX = event.pageX;
|
|
32
|
+
isMouseDown = true;
|
|
33
|
+
};
|
|
34
|
+
var checkMove = function (event) {
|
|
35
|
+
if (!isMouseDown) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (event.pageX < startX) {
|
|
39
|
+
setIsOpened(false, !manual);
|
|
40
|
+
isMouseDown = false;
|
|
41
|
+
}
|
|
42
|
+
return;
|
|
43
|
+
};
|
|
44
|
+
var checkEnd = function () {
|
|
45
|
+
isMouseDown = false;
|
|
46
|
+
};
|
|
47
|
+
var swipe = function (rightBorder) {
|
|
48
|
+
if (rightBorder) {
|
|
49
|
+
rightBorder.addEventListener('mousedown', checkStart);
|
|
50
|
+
rightBorder.addEventListener('mousemove', checkMove);
|
|
51
|
+
document.addEventListener('mouseup', checkEnd);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
useEffect(function () {
|
|
55
|
+
if (rightBorderRef.current) {
|
|
56
|
+
swipe(rightBorderRef.current);
|
|
57
|
+
}
|
|
58
|
+
return function () {
|
|
59
|
+
if (rightBorderRef.current) {
|
|
60
|
+
rightBorderRef.current.removeEventListener('mousedown', checkStart, true);
|
|
61
|
+
rightBorderRef.current.removeEventListener('mousemove', checkMove, true);
|
|
62
|
+
}
|
|
63
|
+
document.removeEventListener('mouseup', checkEnd, true);
|
|
64
|
+
};
|
|
65
|
+
}, []);
|
|
66
|
+
return (React.createElement("div", { className: cx((_b = {},
|
|
67
|
+
_b[jsStyles.root(theme)] = true,
|
|
68
|
+
_b[jsStyles.resizableRoot()] = isAbleToResize,
|
|
69
|
+
_b)), ref: rightBorderRef || ref, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave }, isAbleToResize && React.createElement("div", { className: jsStyles.rootHovered(theme) })));
|
|
30
70
|
});
|
|
31
71
|
RightBorder.displayName = 'RightBorder';
|
|
32
72
|
var RightBorderWithStaticFields = Object.assign(RightBorder, { __KONTUR_REACT_UI__: 'RightBorder' });
|
|
@@ -3,11 +3,15 @@ import { css } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
|
3
3
|
import { memoizeStyle } from '../../lib/theming/ThemeHelpers';
|
|
4
4
|
var styles = {
|
|
5
5
|
root: function (t) {
|
|
6
|
-
return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n
|
|
6
|
+
return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n position: absolute;\n width: ", ";\n height: 100%;\n right: -", "px;\n background: transparent;\n "], ["\n position: absolute;\n width: ", ";\n height: 100%;\n right: -", "px;\n background: transparent;\n "])), t.sideMenuRightBorderWidth, parseInt(t.sideMenuRightBorderWidth) / 2);
|
|
7
7
|
},
|
|
8
|
-
|
|
9
|
-
return css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n
|
|
8
|
+
resizableRoot: function () {
|
|
9
|
+
return css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n cursor: col-resize;\n "], ["\n cursor: col-resize;\n "])));
|
|
10
|
+
},
|
|
11
|
+
rootHovered: function (t) {
|
|
12
|
+
var left = parseInt(t.sideMenuRightBorderWidth) / 2 - parseInt(t.sideMenuRightBorderHoverWidth) / 2; //левое положение подсвеченной границы: вычисляется как половина активной ширины (`10`) минус половина ширины подсвеченной границы (`1`)
|
|
13
|
+
return css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n position: absolute;\n width: ", ";\n background: ", ";\n height: 100%;\n left: ", "px;\n "], ["\n position: absolute;\n width: ", ";\n background: ", ";\n height: 100%;\n left: ", "px;\n "])), t.sideMenuRightBorderHoverWidth, t.sideMenuRightBorderColor, left);
|
|
10
14
|
},
|
|
11
15
|
};
|
|
12
16
|
export var jsStyles = memoizeStyle(styles);
|
|
13
|
-
var templateObject_1, templateObject_2;
|
|
17
|
+
var templateObject_1, templateObject_2, templateObject_3;
|
|
@@ -56,10 +56,8 @@ var SeparatedSubMenu = forwardRef(function (_a, ref) {
|
|
|
56
56
|
_b[jsStyles.root(theme)] = true,
|
|
57
57
|
_b[customStyles.rootForMobiles(context.headerHeight)] = context.isMobile,
|
|
58
58
|
_b[jsStyles.rootForDesktop()] = context.isDesktop,
|
|
59
|
-
_b[jsStyles.rootForTouchScreens(theme)] = context.isTouchScreen &&
|
|
60
|
-
|
|
61
|
-
(context.isNarrowDesktop || (context.isDesktop && context.isCollapsable)),
|
|
62
|
-
_b[jsStyles.rootForNarrowDesktop(theme)] = context.isNarrowDesktop || (context.isDesktop && context.isCollapsable),
|
|
59
|
+
_b[jsStyles.rootForTouchScreens(theme)] = context.isTouchScreen && context.isOpened && context.isNarrowDesktop,
|
|
60
|
+
_b[jsStyles.rootForNarrowDesktop(theme)] = context.isNarrowDesktop,
|
|
63
61
|
_b[jsStyles.rootWithShadow(theme)] = context.isTablet && !isIE11,
|
|
64
62
|
_b)), ref: ref, "data-tid": SideMenuDataTids.separatedSubMenu },
|
|
65
63
|
React.createElement(ScrollContainer, { onScrollStateChangeY: function (state) {
|