@skbkontur/side-menu 0.6.2 → 0.7.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 +11 -0
- package/README.md +148 -1
- package/hooks/useActiveState.js +5 -5
- package/hooks/useMobileSeparatedMenuScroll.js +2 -2
- package/hooks/useOpenedSubElementState.js +4 -4
- package/package.json +1 -1
- package/src/SideMenu/SideMenu.d.ts +3 -0
- package/src/SideMenu/SideMenu.js +100 -63
- package/src/SideMenu/SideMenu.styles.d.ts +22 -14
- package/src/SideMenu/SideMenu.styles.js +45 -29
- package/src/SideMenuBody/SideMenuBody.js +1 -1
- package/src/SideMenuBody/SideMenuBody.styles.d.ts +1 -1
- package/src/SideMenuBody/SideMenuBody.styles.js +1 -1
- package/src/SideMenuContext.d.ts +9 -6
- package/src/SideMenuDivider/SideMenuDivider.js +1 -1
- package/src/SideMenuDivider/SideMenuDivider.styles.d.ts +1 -1
- package/src/SideMenuDivider/SideMenuDivider.styles.js +1 -1
- package/src/SideMenuDropdown/SideMenuDropdown.js +3 -3
- package/src/SideMenuDropdown/SideMenuDropdown.styles.d.ts +3 -3
- package/src/SideMenuDropdown/SideMenuDropdown.styles.js +3 -3
- package/src/SideMenuFooter/SideMenuFooter.js +1 -1
- package/src/SideMenuFooter/SideMenuFooter.styles.d.ts +1 -1
- package/src/SideMenuFooter/SideMenuFooter.styles.js +1 -1
- package/src/SideMenuHeader/SideMenuHeader.js +8 -8
- package/src/SideMenuHeader/SideMenuHeader.styles.d.ts +5 -5
- package/src/SideMenuHeader/SideMenuHeader.styles.js +5 -5
- package/src/SideMenuSubItemHeader/SideMenuSubItemHeader.js +1 -1
- package/src/SideMenuSubItemHeader/SideMenuSubItemHeader.styles.d.ts +2 -2
- package/src/SideMenuSubItemHeader/SideMenuSubItemHeader.styles.js +2 -2
- package/src/internal/BackButton.js +1 -1
- package/src/internal/Backdrop.js +1 -1
- package/src/internal/Backdrop.styles.d.ts +1 -1
- package/src/internal/Backdrop.styles.js +1 -1
- package/src/internal/Burger.js +1 -1
- package/src/internal/Burger.styles.d.ts +1 -1
- package/src/internal/Burger.styles.js +1 -1
- package/src/internal/ClickableElement.js +53 -17
- package/src/internal/ClickableElement.styles.d.ts +5 -5
- package/src/internal/ClickableElement.styles.js +5 -5
- package/src/internal/InnerBody.js +1 -1
- package/src/internal/InnerBody.styles.d.ts +1 -1
- package/src/internal/InnerBody.styles.js +1 -1
- package/src/internal/ItemContent/Caption.js +13 -13
- package/src/internal/ItemContent/Caption.styles.d.ts +12 -12
- package/src/internal/ItemContent/Caption.styles.js +12 -12
- package/src/internal/ItemContent/Icon.js +8 -8
- package/src/internal/ItemContent/Icon.styles.d.ts +8 -8
- package/src/internal/ItemContent/Icon.styles.js +8 -8
- package/src/internal/ItemContent/ItemContent.js +10 -10
- package/src/internal/ItemContent/ItemContent.styles.d.ts +8 -8
- package/src/internal/ItemContent/ItemContent.styles.js +8 -8
- package/src/internal/ItemContent/Marker.js +2 -2
- package/src/internal/ItemContent/Marker.styles.d.ts +2 -2
- package/src/internal/ItemContent/Marker.styles.js +2 -2
- package/src/internal/NestedMenu.js +1 -1
- package/src/internal/NestedMenu.styles.d.ts +1 -1
- package/src/internal/NestedMenu.styles.js +1 -1
- package/src/internal/RightBorder.d.ts +1 -1
- package/src/internal/RightBorder.js +5 -5
- package/src/internal/RightBorder.styles.d.ts +3 -3
- package/src/internal/RightBorder.styles.js +3 -3
- package/src/internal/SeparatedSubMenu.js +10 -4
- package/src/internal/SeparatedSubMenu.styles.d.ts +5 -2
- package/src/internal/SeparatedSubMenu.styles.js +13 -3
- package/src/internal/SideMenuLogotype.js +3 -3
- package/src/internal/SideMenuLogotype.styles.d.ts +2 -2
- package/src/internal/SideMenuLogotype.styles.js +2 -2
- package/src/internal/SubMenu.d.ts +1 -1
- package/src/internal/SubMenu.js +6 -3
- package/utils/scripts.d.ts +2 -2
- package/utils/scripts.js +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
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
|
+
# [0.7.0](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@0.6.2...@skbkontur/side-menu@0.7.0) (2023-03-03)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **SideMenu:** implement narrow desktop adaptive version ([3688ea8](https://git.skbkontur.ru/ui/ui-parking/commits/3688ea80138c5d855eda95e45239e73895d63258))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## [0.6.2](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@0.6.1...@skbkontur/side-menu@0.6.2) (2023-02-20)
|
|
7
18
|
|
|
8
19
|
|
package/README.md
CHANGED
|
@@ -108,6 +108,14 @@ const close = () => {
|
|
|
108
108
|
setOpened(false);
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
+
const linearLightGradient = `repeating-linear-gradient(
|
|
112
|
+
60deg,
|
|
113
|
+
#fafafa,
|
|
114
|
+
#fafafa 20px,
|
|
115
|
+
#dfdede 20px,
|
|
116
|
+
#dfdede 40px
|
|
117
|
+
)`
|
|
118
|
+
|
|
111
119
|
const renderModal = () => {
|
|
112
120
|
return (
|
|
113
121
|
<Modal onClose={close}>
|
|
@@ -120,7 +128,7 @@ const renderModal = () => {
|
|
|
120
128
|
);
|
|
121
129
|
}
|
|
122
130
|
|
|
123
|
-
<div style={{height: '600px', width: '100%', position: 'relative'}}>
|
|
131
|
+
<div style={{height: '600px', width: '100%', position: 'relative', display: 'flex'}}>
|
|
124
132
|
<SideMenu isSeparatedMenu={true}>
|
|
125
133
|
<SideMenu.Header konturLogo={<Kontur/>} productLogo={<Buhgalteria/>}/>
|
|
126
134
|
<SideMenu.Body>
|
|
@@ -188,6 +196,132 @@ const renderModal = () => {
|
|
|
188
196
|
</SideMenu.Avatar>
|
|
189
197
|
</SideMenu.Footer>
|
|
190
198
|
</SideMenu>
|
|
199
|
+
<div style={{ background: linearLightGradient, width: '100%', height: '100%' }}>
|
|
200
|
+
{'Content '.repeat(100)}
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Меню второго уровня в отдельной колонке можно расположить над контентом с помощью пропа `separatedMenuWithOverlay={true}`
|
|
206
|
+
|
|
207
|
+
```jsx harmony
|
|
208
|
+
import { getKonturAvatarUrl } from '@skbkontur/react-ui-addons';
|
|
209
|
+
import { Buhgalteria, Kontur } from '@skbkontur/logos';
|
|
210
|
+
import { MenuItem, Modal, Input } from '@skbkontur/react-ui';
|
|
211
|
+
import { SideMenu } from './index';
|
|
212
|
+
import {
|
|
213
|
+
DocTextIcon24Regular,
|
|
214
|
+
CommentRectTextIcon24Regular,
|
|
215
|
+
LightbulbIcon24Regular,
|
|
216
|
+
BookOpenTextIcon24Regular,
|
|
217
|
+
BookmarkIcon24Regular,
|
|
218
|
+
StackHDownIcon24Regular,
|
|
219
|
+
SettingsGearIcon24Regular,
|
|
220
|
+
FaceAHappyIcon24Regular
|
|
221
|
+
} from '@skbkontur/icons';
|
|
222
|
+
|
|
223
|
+
const [opened, setOpened] = React.useState(false);
|
|
224
|
+
const [panel, setPanel] = React.useState(false);
|
|
225
|
+
|
|
226
|
+
const open = () => {
|
|
227
|
+
setOpened(true);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
const close = () => {
|
|
231
|
+
setOpened(false);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
const linearLightGradient = `repeating-linear-gradient(
|
|
235
|
+
60deg,
|
|
236
|
+
#fafafa,
|
|
237
|
+
#fafafa 20px,
|
|
238
|
+
#dfdede 20px,
|
|
239
|
+
#dfdede 40px
|
|
240
|
+
)`
|
|
241
|
+
|
|
242
|
+
const renderModal = () => {
|
|
243
|
+
return (
|
|
244
|
+
<Modal onClose={close}>
|
|
245
|
+
<Modal.Header>Выбор организации</Modal.Header>
|
|
246
|
+
<Modal.Body>
|
|
247
|
+
<Input/>
|
|
248
|
+
<div>Список организаций</div>
|
|
249
|
+
</Modal.Body>
|
|
250
|
+
</Modal>
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
<div style={{height: '600px', width: '100%', position: 'relative', display: 'flex'}}>
|
|
255
|
+
<SideMenu isSeparatedMenu={true} separatedMenuWithOverlay={true}>
|
|
256
|
+
<SideMenu.Header konturLogo={<Kontur/>} productLogo={<Buhgalteria/>}/>
|
|
257
|
+
<SideMenu.Body>
|
|
258
|
+
<SideMenu.Item icon={<DocTextIcon24Regular/>} caption={'Документы'} marker={'новое'}>
|
|
259
|
+
<SideMenu.SubItem caption={'Входящие'} marker={'5'}>
|
|
260
|
+
<SideMenu.SubItem caption={'Входящие 1'}>
|
|
261
|
+
<SideMenu.SubItem caption={'Входящие11'}>
|
|
262
|
+
<SideMenu.SubItem caption={'Входящие111'}/>
|
|
263
|
+
<SideMenu.SubItem caption={'Входящие112'}/>
|
|
264
|
+
<SideMenu.SubItem caption={'Входящие113'}/>
|
|
265
|
+
</SideMenu.SubItem>
|
|
266
|
+
<SideMenu.SubItem caption={'Входящие12'}/>
|
|
267
|
+
<SideMenu.SubItem caption={'Входящие13'}/>
|
|
268
|
+
</SideMenu.SubItem>
|
|
269
|
+
<SideMenu.SubItem caption={'Входящие2'}>
|
|
270
|
+
<SideMenu.SubItem caption={'Входящие21'}>
|
|
271
|
+
<SideMenu.SubItem caption={'Входящие211'}/>
|
|
272
|
+
<SideMenu.SubItem caption={'Входящие212'}/>
|
|
273
|
+
<SideMenu.SubItem caption={'Входящие213'}/>
|
|
274
|
+
</SideMenu.SubItem>
|
|
275
|
+
<SideMenu.SubItem caption={'Входящие22'}/>
|
|
276
|
+
<SideMenu.SubItem caption={'Входящие23'}/>
|
|
277
|
+
</SideMenu.SubItem>
|
|
278
|
+
<SideMenu.SubItem caption={'Входящие3'}/>
|
|
279
|
+
</SideMenu.SubItem>
|
|
280
|
+
<SideMenu.SubItem caption={'Исходящие'}/>
|
|
281
|
+
<SideMenu.SubItem caption={'Внутренние'}/>
|
|
282
|
+
<SideMenu.SubItem caption={'Черновики'}/>
|
|
283
|
+
<SideMenu.SubItem caption={'Удаленные'}/>
|
|
284
|
+
<SideMenu.SubItemHeader>Согласованные</SideMenu.SubItemHeader>
|
|
285
|
+
<SideMenu.SubItem caption={'Требуют обработки'}/>
|
|
286
|
+
<SideMenu.SubItem caption={'Обработанные'}/>
|
|
287
|
+
</SideMenu.Item>
|
|
288
|
+
<SideMenu.Item icon={<FaceAHappyIcon24Regular />} caption={'Контрагенты'}/>
|
|
289
|
+
<SideMenu.Item icon={<CommentRectTextIcon24Regular/>} caption={'Сообщения'} marker={'5'}>
|
|
290
|
+
<SideMenu.SubItem caption={'Входящие'} marker={'5'}/>
|
|
291
|
+
<SideMenu.SubItem caption={'Исходящие'}/>
|
|
292
|
+
<SideMenu.SubItem caption={'Внутренние'}/>
|
|
293
|
+
<SideMenu.SubItem caption={'Черновики'}/>
|
|
294
|
+
<SideMenu.SubItem caption={'Удаленные'}/>
|
|
295
|
+
</SideMenu.Item>
|
|
296
|
+
<SideMenu.Item icon={<LightbulbIcon24Regular/>} caption={'Справочная'}/>
|
|
297
|
+
<SideMenu.Divider />
|
|
298
|
+
<SideMenu.Item icon={<BookOpenTextIcon24Regular/>} caption={'Еще раздел'}/>
|
|
299
|
+
<SideMenu.Item icon={<BookmarkIcon24Regular/>} caption={'Отчетность'}/>
|
|
300
|
+
</SideMenu.Body>
|
|
301
|
+
<SideMenu.Footer>
|
|
302
|
+
<div>
|
|
303
|
+
{opened && renderModal()}
|
|
304
|
+
<SideMenu.Item icon={<StackHDownIcon24Regular/>} caption={'СКБ Контур'} onClick={open}/>
|
|
305
|
+
</div>
|
|
306
|
+
<SideMenu.Item icon={<SettingsGearIcon24Regular/>} caption={'Реквизиты и настройки'}/>
|
|
307
|
+
<SideMenu.Avatar
|
|
308
|
+
userName={'Ишматова Елена'}
|
|
309
|
+
avatarUrl={getKonturAvatarUrl({
|
|
310
|
+
userId: '992408aa-050e-41e9-9a48-6bf2f2f20d94'
|
|
311
|
+
})}
|
|
312
|
+
>
|
|
313
|
+
<MenuItem href={'https://cabinet.kontur.ru'} target="_blank">
|
|
314
|
+
Личный кабинет
|
|
315
|
+
</MenuItem>
|
|
316
|
+
<MenuItem >Безопасность</MenuItem>
|
|
317
|
+
<SideMenu.Divider />
|
|
318
|
+
<MenuItem >Выйти</MenuItem>
|
|
319
|
+
</SideMenu.Avatar>
|
|
320
|
+
</SideMenu.Footer>
|
|
321
|
+
</SideMenu>
|
|
322
|
+
<div style={{ background: linearLightGradient, width: '100%', height: '100%' }}>
|
|
323
|
+
{'Content '.repeat(100)}
|
|
324
|
+
</div>
|
|
191
325
|
</div>
|
|
192
326
|
```
|
|
193
327
|
|
|
@@ -456,6 +590,19 @@ const items = [
|
|
|
456
590
|
```
|
|
457
591
|
|
|
458
592
|
### Адаптивность
|
|
593
|
+
Все брейкпойнты вынесены в пропы:
|
|
594
|
+
|
|
595
|
+
| Проп | Дефолтное значение |
|
|
596
|
+
| ------|--------------------|
|
|
597
|
+
|desktopMediaQuery|'(min-width: 1200px)'|
|
|
598
|
+
|narrowDesktopMediaQuery|'(min-width: 992px)'|
|
|
599
|
+
|tabletMediaQuery|'(min-width: 768px)'|
|
|
600
|
+
|mobileMediaQuery|'(min-width: 0px)'|
|
|
601
|
+
|
|
602
|
+
Для того чтобы пропускать брекпойнты достаточно указать значение, равное следующему за ним брейкпойнту.
|
|
603
|
+
Например, в следующем случае у `SideMenu` не будет адаптива для планшетов:
|
|
604
|
+
|
|
605
|
+
`<SideMenu tabletMediaQuery={'(min-width: 768px)'} narrowDesktopMediaQuery={'(min-width: 768px)'}/>`
|
|
459
606
|
|
|
460
607
|
Пример встраивания SideMenu с адаптивом (более наглядно в [песочнице](https://codesandbox.io/s/dark-waterfall-5b4fkh?file=/src/App.js)):
|
|
461
608
|
|
package/hooks/useActiveState.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { isElementActive } from '../utils/scripts';
|
|
3
3
|
export var useActiveState = function (id, href, generatedId, activeMenuItem) {
|
|
4
4
|
var _a = useState(false), isActive = _a[0], setIsActive = _a[1];
|
|
5
5
|
useEffect(function () {
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
setIsActive(
|
|
6
|
+
var isHrefActive = isElementActive(href, activeMenuItem);
|
|
7
|
+
var isIdActive = isElementActive(id, activeMenuItem);
|
|
8
|
+
var isGeneratedIdActive = isElementActive(generatedId, activeMenuItem);
|
|
9
|
+
setIsActive(isHrefActive || isIdActive || isGeneratedIdActive);
|
|
10
10
|
}, [activeMenuItem]);
|
|
11
11
|
return isActive;
|
|
12
12
|
};
|
|
@@ -6,7 +6,7 @@ export var useMobileSeparatedMenuScroll = function () {
|
|
|
6
6
|
var checkScroll = function () {
|
|
7
7
|
var _a, _b;
|
|
8
8
|
var isScrolledToTop = ((_a = separatedMenuRef.current) === null || _a === void 0 ? void 0 : _a.scrollTop) === 0;
|
|
9
|
-
(_b = context.
|
|
9
|
+
(_b = context.setIsMobileSeparatedMenuScrolling) === null || _b === void 0 ? void 0 : _b.call(context, !isScrolledToTop);
|
|
10
10
|
};
|
|
11
11
|
useEffect(function () {
|
|
12
12
|
var _a;
|
|
@@ -14,7 +14,7 @@ export var useMobileSeparatedMenuScroll = function () {
|
|
|
14
14
|
return function () {
|
|
15
15
|
var _a, _b;
|
|
16
16
|
(_a = separatedMenuRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener('scroll', checkScroll, true);
|
|
17
|
-
(_b = context.
|
|
17
|
+
(_b = context.setIsMobileSeparatedMenuScrolling) === null || _b === void 0 ? void 0 : _b.call(context, false);
|
|
18
18
|
};
|
|
19
19
|
}, []);
|
|
20
20
|
return separatedMenuRef;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { isElementActive, isParentOpened } from '../utils/scripts';
|
|
3
3
|
export var useOpenedSubElementState = function (id, generatedId, openedParents, activeMenuItem) {
|
|
4
4
|
var _a = useState(false), isOpened = _a[0], setIsOpened = _a[1];
|
|
5
5
|
useEffect(function () {
|
|
6
6
|
var isOpenedParent = isParentOpened(id, generatedId, openedParents);
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
setIsOpened(isOpenedParent || isOpened ||
|
|
7
|
+
var isIdActive = isElementActive(id, activeMenuItem);
|
|
8
|
+
var isGeneratedIdActive = isElementActive(generatedId, activeMenuItem);
|
|
9
|
+
setIsOpened(isOpenedParent || isOpened || isIdActive || isGeneratedIdActive);
|
|
10
10
|
}, [openedParents === null || openedParents === void 0 ? void 0 : openedParents.toString(), activeMenuItem]);
|
|
11
11
|
return isOpened;
|
|
12
12
|
};
|
package/package.json
CHANGED
|
@@ -19,8 +19,11 @@ export interface SideMenuProps extends CommonProps {
|
|
|
19
19
|
disableSwipe?: boolean;
|
|
20
20
|
value?: string;
|
|
21
21
|
onValueChange?: (value: string) => void;
|
|
22
|
+
desktopMediaQuery?: string;
|
|
23
|
+
narrowDesktopMediaQuery?: string;
|
|
22
24
|
tabletMediaQuery?: string;
|
|
23
25
|
mobileMediaQuery?: string;
|
|
26
|
+
separatedMenuWithOverlay?: boolean;
|
|
24
27
|
}
|
|
25
28
|
interface SubComponents {
|
|
26
29
|
Body: typeof SideMenuBody;
|
package/src/SideMenu/SideMenu.js
CHANGED
|
@@ -2,7 +2,7 @@ import { __assign, __rest } from "tslib";
|
|
|
2
2
|
import React, { forwardRef, useEffect, useState } from 'react';
|
|
3
3
|
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
4
4
|
import { isIE11, isSafari } from '@skbkontur/react-ui/lib/client';
|
|
5
|
-
import { jsStyles } from './SideMenu.styles';
|
|
5
|
+
import { jsStyles, sideMenuMinimizedWidth, sideMenuStandardWidth } from './SideMenu.styles';
|
|
6
6
|
import { SideMenuOrganisations } from '../SideMenuOrganisations/SideMenuOrganisations';
|
|
7
7
|
import { SideMenuContext } from '../SideMenuContext';
|
|
8
8
|
import { SideMenuBody } from '../SideMenuBody/SideMenuBody';
|
|
@@ -20,37 +20,40 @@ import { SideMenuSubLink } from '../SideMenuSubLink/SideMenuSubLink';
|
|
|
20
20
|
import { useResponsiveLayout } from '@skbkontur/react-ui';
|
|
21
21
|
import { Backdrop } from '../internal/Backdrop';
|
|
22
22
|
import { RenderLayer } from '@skbkontur/react-ui/internal/RenderLayer';
|
|
23
|
-
import {
|
|
23
|
+
import { isTouchDevice } from '../../utils/scripts';
|
|
24
24
|
import { SideMenuDataTids } from '../../SideMenuDataTids';
|
|
25
25
|
import { ZIndex } from '@skbkontur/react-ui/internal/ZIndex';
|
|
26
26
|
var SideMenuInner = forwardRef(function (_a, ref) {
|
|
27
27
|
var _b, _c, _d, _e;
|
|
28
|
-
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, _j = _a.
|
|
28
|
+
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, _j = _a.desktopMediaQuery, desktopMediaQuery = _j === void 0 ? '(min-width: 1200px)' : _j, _k = _a.narrowDesktopMediaQuery, narrowDesktopMediaQuery = _k === void 0 ? '(min-width: 992px)' : _k, _l = _a.tabletMediaQuery, tabletMediaQuery = _l === void 0 ? '(min-width: 768px)' : _l, _m = _a.mobileMediaQuery, mobileMediaQuery = _m === void 0 ? '(min-width: 0px)' : _m, _o = _a.separatedMenuWithOverlay, separatedMenuWithOverlay = _o === void 0 ? false : _o, rest = __rest(_a, ["children", "value", "onValueChange", "size", "isSeparatedMenu", "className", "disableSwipe", "desktopMediaQuery", "narrowDesktopMediaQuery", "tabletMediaQuery", "mobileMediaQuery", "separatedMenuWithOverlay"]);
|
|
29
29
|
var scrollTimer = null;
|
|
30
30
|
var transitionTimer = null;
|
|
31
31
|
var widgetTimer;
|
|
32
32
|
var customMediaQueries = {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
isMobileQuery: mobileMediaQuery,
|
|
34
|
+
isTabletQuery: tabletMediaQuery,
|
|
35
|
+
isNarrowDesktopQuery: narrowDesktopMediaQuery,
|
|
36
|
+
isDesktopQuery: desktopMediaQuery,
|
|
37
37
|
};
|
|
38
|
-
var
|
|
38
|
+
var _p = useResponsiveLayout({
|
|
39
39
|
customMediaQueries: customMediaQueries,
|
|
40
|
-
}),
|
|
41
|
-
var
|
|
42
|
-
var
|
|
43
|
-
var
|
|
44
|
-
var
|
|
45
|
-
var
|
|
46
|
-
var
|
|
47
|
-
var
|
|
48
|
-
var
|
|
49
|
-
var
|
|
50
|
-
var
|
|
51
|
-
var
|
|
52
|
-
var
|
|
53
|
-
var
|
|
40
|
+
}), isMobileQuery = _p.isMobileQuery, isTabletQuery = _p.isTabletQuery, isNarrowDesktopQuery = _p.isNarrowDesktopQuery, isDesktopQuery = _p.isDesktopQuery;
|
|
41
|
+
var isNarrowDesktop = isNarrowDesktopQuery && !isDesktopQuery;
|
|
42
|
+
var isTablet = isTabletQuery && !isNarrowDesktopQuery;
|
|
43
|
+
var isMobile = isMobileQuery && !isTabletQuery;
|
|
44
|
+
var isTabletOrMobile = isTablet || isMobile;
|
|
45
|
+
var isTouchScreen = isTouchDevice() || isMobile || isTablet;
|
|
46
|
+
var separatedMenuWithoutOverlay = isSeparatedMenu && !separatedMenuWithOverlay;
|
|
47
|
+
var _q = useState(isNarrowDesktop), isMinimized = _q[0], setIsMinimized = _q[1];
|
|
48
|
+
var _r = useState(false), hasScrollBar = _r[0], setHasScrollBar = _r[1];
|
|
49
|
+
var _s = useState(false), isBeingTransitioned = _s[0], setIsBeingTransitioned = _s[1];
|
|
50
|
+
var _t = useState('#2291ff'), productColor = _t[0], setProductColor = _t[1];
|
|
51
|
+
var _u = useState(false), showWidget = _u[0], setShowWidget = _u[1];
|
|
52
|
+
var _v = useState(value), activeMenuItem = _v[0], setActiveMenuItem = _v[1];
|
|
53
|
+
var _w = useState(isDesktopQuery || isNarrowDesktop), isShown = _w[0], setIsShown = _w[1];
|
|
54
|
+
var _x = useState(false), isSeparatedMenuShown = _x[0], setIsSeparatedMenuShown = _x[1];
|
|
55
|
+
var _y = useState(true), isMouseOutside = _y[0], setIsMouseOutside = _y[1];
|
|
56
|
+
var _z = useState(false), isMobileSeparatedMenuScrolling = _z[0], setIsMobileSeparatedMenuScrolling = _z[1];
|
|
54
57
|
useEffect(function () {
|
|
55
58
|
return function () {
|
|
56
59
|
if (scrollTimer) {
|
|
@@ -59,22 +62,29 @@ var SideMenuInner = forwardRef(function (_a, ref) {
|
|
|
59
62
|
};
|
|
60
63
|
});
|
|
61
64
|
useEffect(function () {
|
|
62
|
-
if (isNarrowDesktop ||
|
|
65
|
+
if (isNarrowDesktop || isDesktopQuery) {
|
|
63
66
|
setIsShown(true);
|
|
64
67
|
}
|
|
65
|
-
|
|
68
|
+
if (isDesktopQuery) {
|
|
69
|
+
setIsMinimized(false);
|
|
70
|
+
}
|
|
71
|
+
if (isNarrowDesktop) {
|
|
72
|
+
setIsMinimized(true);
|
|
73
|
+
}
|
|
74
|
+
}, [isNarrowDesktop, isDesktopQuery]);
|
|
66
75
|
useEffect(function () {
|
|
67
76
|
setActiveMenuItem(value);
|
|
68
77
|
}, [value]);
|
|
69
|
-
var
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
78
|
+
var showMinimizedRoot = function (newIsMinimized) {
|
|
79
|
+
var minimizeWithoutOverlay = separatedMenuWithoutOverlay && newIsMinimized;
|
|
80
|
+
if ((!isBeingTransitioned || minimizeWithoutOverlay) && newIsMinimized !== isMinimized) {
|
|
81
|
+
setIsBeingTransitioned(true);
|
|
82
|
+
setIsMinimized(newIsMinimized);
|
|
73
83
|
if (transitionTimer) {
|
|
74
84
|
clearTimeout(transitionTimer);
|
|
75
85
|
}
|
|
76
86
|
transitionTimer = setTimeout(function () {
|
|
77
|
-
|
|
87
|
+
setIsBeingTransitioned(false);
|
|
78
88
|
}, 1000);
|
|
79
89
|
}
|
|
80
90
|
};
|
|
@@ -94,6 +104,11 @@ var SideMenuInner = forwardRef(function (_a, ref) {
|
|
|
94
104
|
}, 200);
|
|
95
105
|
};
|
|
96
106
|
var handleMouseEnter = function () {
|
|
107
|
+
if (separatedMenuWithoutOverlay && isSeparatedMenuShown && isNarrowDesktop) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
isMouseOutside && showMinimizedRoot(false);
|
|
111
|
+
setIsMouseOutside(false);
|
|
97
112
|
widgetTimer = setTimeout(function () {
|
|
98
113
|
setShowWidget(true);
|
|
99
114
|
}, 500);
|
|
@@ -103,68 +118,90 @@ var SideMenuInner = forwardRef(function (_a, ref) {
|
|
|
103
118
|
clearTimeout(widgetTimer);
|
|
104
119
|
}
|
|
105
120
|
setShowWidget(false);
|
|
121
|
+
if (isNarrowDesktop) {
|
|
122
|
+
setIsMinimized(true);
|
|
123
|
+
}
|
|
124
|
+
setIsMouseOutside(true);
|
|
125
|
+
};
|
|
126
|
+
var showMinimizedRootForNarrowDesktopWithOverlay = function (e) {
|
|
127
|
+
if (separatedMenuWithoutOverlay && isNarrowDesktop) {
|
|
128
|
+
if (e.clientX < parseInt(sideMenuMinimizedWidth)) {
|
|
129
|
+
showMinimizedRoot(false);
|
|
130
|
+
}
|
|
131
|
+
if (e.clientX > parseInt(sideMenuStandardWidth)) {
|
|
132
|
+
showMinimizedRoot(true);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
106
135
|
};
|
|
107
|
-
var
|
|
136
|
+
var switchActiveMenuItem = function (id) {
|
|
108
137
|
if (id !== value) {
|
|
109
138
|
onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(id);
|
|
110
139
|
setActiveMenuItem(id);
|
|
111
140
|
}
|
|
112
141
|
};
|
|
113
142
|
var toggleIsShown = function () {
|
|
114
|
-
|
|
143
|
+
isTabletOrMobile && setIsShown(!isShown);
|
|
115
144
|
};
|
|
116
145
|
var turnOffIsShown = function () {
|
|
117
|
-
|
|
146
|
+
isTabletOrMobile && setIsShown(false);
|
|
118
147
|
};
|
|
148
|
+
var isSideMenuOverContent = (isNarrowDesktop && !isMinimized) || (isMobile && isShown) || (isTablet && isShown && !isSeparatedMenuShown);
|
|
119
149
|
return (React.createElement(SideMenuContext.Provider, { value: {
|
|
120
|
-
|
|
121
|
-
|
|
150
|
+
isMinimized: isMinimized,
|
|
151
|
+
setIsMinimized: showMinimizedRoot,
|
|
152
|
+
isBeingTransitioned: isBeingTransitioned,
|
|
122
153
|
isSeparatedMenu: isSeparatedMenu,
|
|
123
154
|
size: size,
|
|
124
155
|
productColor: productColor,
|
|
125
156
|
setProductColor: setProductColor,
|
|
126
157
|
showWidget: showWidget,
|
|
127
158
|
activeMenuItem: activeMenuItem,
|
|
128
|
-
switchActiveMenuItem:
|
|
129
|
-
isDesktop:
|
|
159
|
+
switchActiveMenuItem: switchActiveMenuItem,
|
|
160
|
+
isDesktop: isDesktopQuery,
|
|
130
161
|
isNarrowDesktop: isNarrowDesktop,
|
|
131
|
-
isTablet:
|
|
132
|
-
isMobile:
|
|
133
|
-
isTouchScreen:
|
|
162
|
+
isTablet: isTablet,
|
|
163
|
+
isMobile: isMobile,
|
|
164
|
+
isTouchScreen: isTouchScreen,
|
|
134
165
|
isShown: isShown,
|
|
135
166
|
toggleIsShown: toggleIsShown,
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
167
|
+
isSeparatedMenuShown: isSeparatedMenuShown,
|
|
168
|
+
setIsSeparatedMenuShown: setIsSeparatedMenuShown,
|
|
169
|
+
separatedMenuWithoutOverlay: separatedMenuWithoutOverlay,
|
|
170
|
+
setIsMouseOutside: setIsMouseOutside,
|
|
171
|
+
isMobileSeparatedMenuScrolling: isMobileSeparatedMenuScrolling,
|
|
172
|
+
setIsMobileSeparatedMenuScrolling: setIsMobileSeparatedMenuScrolling,
|
|
140
173
|
} },
|
|
141
|
-
React.createElement(ZIndex, { priority:
|
|
142
|
-
_b[jsStyles.
|
|
143
|
-
_b[jsStyles.
|
|
144
|
-
_b[jsStyles.
|
|
174
|
+
React.createElement(ZIndex, { priority: isTabletOrMobile ? 'Sidepage' : 0, className: cx((_b = {},
|
|
175
|
+
_b[jsStyles.root()] = true,
|
|
176
|
+
_b[jsStyles.rootForTabletsOrMobiles()] = isTabletOrMobile,
|
|
177
|
+
_b[jsStyles.shownRootForTabletsOrMobiles()] = isShown && isTabletOrMobile,
|
|
178
|
+
_b[jsStyles.rootForNarrowDesktops()] = isNarrowDesktop,
|
|
179
|
+
_b[jsStyles.separatedRootForNarrowDesktops()] = separatedMenuWithoutOverlay && isSeparatedMenuShown && isNarrowDesktop,
|
|
180
|
+
_b[jsStyles.separatedRootForDesktops()] = separatedMenuWithoutOverlay && isSeparatedMenuShown && isDesktopQuery,
|
|
145
181
|
_b)) },
|
|
146
182
|
React.createElement(React.Fragment, null,
|
|
147
|
-
|
|
183
|
+
isTabletOrMobile && isShown && React.createElement(Backdrop, null),
|
|
148
184
|
React.createElement(RenderLayer, { onClickOutside: turnOffIsShown },
|
|
149
185
|
React.createElement("aside", __assign({ className: cx((_c = {},
|
|
150
|
-
_c[jsStyles.
|
|
151
|
-
_c[jsStyles.
|
|
152
|
-
_c)
|
|
186
|
+
_c[jsStyles.wrapper()] = true,
|
|
187
|
+
_c[jsStyles.wrapperIE()] = isIE11,
|
|
188
|
+
_c[jsStyles.wrapperWithShadow()] = isSideMenuOverContent,
|
|
189
|
+
_c), className), "data-tid": SideMenuDataTids.root, ref: ref }, rest, { onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, onMouseMove: showMinimizedRootForNarrowDesktopWithOverlay }),
|
|
153
190
|
React.createElement("div", { className: cx((_d = {},
|
|
154
|
-
_d[jsStyles.
|
|
155
|
-
_d[jsStyles.
|
|
156
|
-
_d[jsStyles.
|
|
157
|
-
_d[jsStyles.
|
|
158
|
-
_d[jsStyles.
|
|
159
|
-
_d[jsStyles.
|
|
160
|
-
_d[jsStyles.
|
|
161
|
-
_d)),
|
|
191
|
+
_d[jsStyles.container()] = true,
|
|
192
|
+
_d[jsStyles.collapsedContainerForTabletsOrMobiles()] = !isShown,
|
|
193
|
+
_d[jsStyles.containerSafari()] = isSafari,
|
|
194
|
+
_d[jsStyles.minimizedContainer()] = isMinimized,
|
|
195
|
+
_d[jsStyles.innerContainer()] = !isSeparatedMenu,
|
|
196
|
+
_d[jsStyles.containerForTouchScreens()] = isTouchScreen,
|
|
197
|
+
_d[jsStyles.separatedContainerForMobiles()] = isMobile && isSeparatedMenuShown && isShown,
|
|
198
|
+
_d)), onScroll: handleScroll },
|
|
162
199
|
React.createElement("div", { className: cx((_e = {},
|
|
163
|
-
_e[jsStyles.
|
|
164
|
-
_e[jsStyles.
|
|
165
|
-
_e[jsStyles.
|
|
200
|
+
_e[jsStyles.contentWrapper()] = true,
|
|
201
|
+
_e[jsStyles.contentWrapperWithoutScrollBar()] = !hasScrollBar,
|
|
202
|
+
_e[jsStyles.collapsedContentWrapperForTabletsOrMobiles()] = !isShown || isSeparatedMenuShown,
|
|
166
203
|
_e)) }, children)),
|
|
167
|
-
!disableSwipe &&
|
|
204
|
+
!disableSwipe && isDesktopQuery && !isSeparatedMenuShown && (React.createElement(RightBorder, { setIsMinimized: setIsMinimized }))))))));
|
|
168
205
|
});
|
|
169
206
|
SideMenuInner.displayName = 'SideMenu';
|
|
170
207
|
var STATIC_PROPS = {
|
|
@@ -1,17 +1,25 @@
|
|
|
1
|
+
export declare const sideMenuMinimizedWidth = "72px";
|
|
2
|
+
export declare const sideMenuStandardWidth = "232px";
|
|
3
|
+
export declare const sideMenuForTouchScreenWidth = "328px";
|
|
4
|
+
export declare const sideMenuBoxShadow = "4px 4px 24px rgba(0, 0, 0, 0.24)";
|
|
1
5
|
export declare const jsStyles: {
|
|
2
|
-
sideMenuZIndex(): string;
|
|
3
|
-
sideMenuZIndexForTabletsOrMobiles(): string;
|
|
4
|
-
shownSideMenuZIndexForTabletsOrMobiles(): string;
|
|
5
6
|
root(): string;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
7
|
+
rootForTabletsOrMobiles(): string;
|
|
8
|
+
shownRootForTabletsOrMobiles(): string;
|
|
9
|
+
rootForNarrowDesktops(): string;
|
|
10
|
+
separatedRootForNarrowDesktops(): string;
|
|
11
|
+
separatedRootForDesktops(): string;
|
|
12
|
+
container(): string;
|
|
13
|
+
containerSafari(): string;
|
|
14
|
+
contentWrapperWithoutScrollBar(): string;
|
|
15
|
+
collapsedContentWrapperForTabletsOrMobiles(): string;
|
|
16
|
+
minimizedContainer(): string;
|
|
17
|
+
innerContainer(): string;
|
|
18
|
+
containerForTouchScreens(): string;
|
|
19
|
+
separatedContainerForMobiles(): string;
|
|
20
|
+
contentWrapper(): string;
|
|
21
|
+
wrapper(): string;
|
|
22
|
+
wrapperIE(): string;
|
|
23
|
+
wrapperWithShadow(): string;
|
|
24
|
+
collapsedContainerForTabletsOrMobiles(): string;
|
|
17
25
|
};
|