@skbkontur/side-menu 3.3.0-beta.0 → 3.3.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 +22 -0
- package/README.md +25 -24
- package/SideMenuDataTids.d.ts +1 -0
- package/SideMenuDataTids.js +1 -0
- package/package.json +1 -1
- package/src/SideMenu/SideMenu.js +7 -2
- package/src/SideMenuFooter/SideMenuFooter.js +2 -1
- package/src/SideMenuNotifications/SideMenuNotifications.d.ts +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,28 @@
|
|
|
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
|
+
# [3.3.0](https://git.skbkontur.ru/ui/ui-parking-2/compare/@skbkontur/side-menu@3.2.7...@skbkontur/side-menu@3.3.0) (2025-07-24)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **SideMenu:** add SideMenu.Notifications widget component ([06f80be](https://git.skbkontur.ru/ui/ui-parking-2/commits/06f80be441baffae42d30293d7c7e6e7ec02d432))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [3.2.7](https://git.skbkontur.ru/ui/ui-parking-2/compare/@skbkontur/side-menu@3.2.6...@skbkontur/side-menu@3.2.7) (2025-07-24)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **SideMenu:** update scrollbar and items after dynamic updates ([b26abdf](https://git.skbkontur.ru/ui/ui-parking-2/commits/b26abdff7aed26e2fa01387119cae6157dc5388d))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
6
28
|
## [3.2.6](https://git.skbkontur.ru/ui/ui-parking-2/compare/@skbkontur/side-menu@3.2.5...@skbkontur/side-menu@3.2.6) (2025-07-04)
|
|
7
29
|
|
|
8
30
|
**Note:** Version bump only for package @skbkontur/side-menu
|
package/README.md
CHANGED
|
@@ -96,7 +96,7 @@ import { AttachLinkIcon } from '@skbkontur/icons/icons/AttachLinkIcon';
|
|
|
96
96
|
</div>
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
С меню второго уровня в отдельной колонке
|
|
100
100
|
|
|
101
101
|
```jsx harmony
|
|
102
102
|
import { getKonturAvatarUrl } from '@skbkontur/react-ui-addons';
|
|
@@ -216,7 +216,7 @@ const renderModal = () => {
|
|
|
216
216
|
</div>
|
|
217
217
|
```
|
|
218
218
|
|
|
219
|
-
|
|
219
|
+
С ручным управлением
|
|
220
220
|
|
|
221
221
|
Для управления активным пунктом меню используйте проп `activeItem`.
|
|
222
222
|
|
|
@@ -380,11 +380,9 @@ const items = [
|
|
|
380
380
|
</div>
|
|
381
381
|
</div>
|
|
382
382
|
</div>
|
|
383
|
-
```
|
|
384
|
-
|
|
385
|
-
где
|
|
386
383
|
|
|
387
|
-
|
|
384
|
+
<style>
|
|
385
|
+
{`
|
|
388
386
|
.layout {
|
|
389
387
|
display: flex;
|
|
390
388
|
flex-direction: column;
|
|
@@ -404,6 +402,8 @@ const items = [
|
|
|
404
402
|
height: 100%;
|
|
405
403
|
}
|
|
406
404
|
}
|
|
405
|
+
`}
|
|
406
|
+
</style>
|
|
407
407
|
```
|
|
408
408
|
|
|
409
409
|
|
|
@@ -486,6 +486,25 @@ const SideMenuReactRouterLink: React.FunctionComponent<SideMenuReactRouterLinkPr
|
|
|
486
486
|
|
|
487
487
|
Пример в [песочнице](https://codesandbox.io/s/side-menu-react-router-dom-vtv6r8)
|
|
488
488
|
|
|
489
|
+
## Подключение виджета уведомлений `SideMenu.Notifications`
|
|
490
|
+
|
|
491
|
+
- [Документация виджета уведомлений](https://wiki.skbkontur.ru/pages/viewpage.action?pageId=952721322)
|
|
492
|
+
- [Поддержка в ~notification-support](https://chat.skbkontur.ru/kontur/channels/notification-support)
|
|
493
|
+
|
|
494
|
+
```jsx harmony
|
|
495
|
+
import { SideMenu } from '@skbkontur/side-menu';
|
|
496
|
+
|
|
497
|
+
<SideMenu>
|
|
498
|
+
<SideMenu.Body>
|
|
499
|
+
<SideMenu.Notifications
|
|
500
|
+
widgetApi={widgetApi}
|
|
501
|
+
count={count}
|
|
502
|
+
showDivider
|
|
503
|
+
/>
|
|
504
|
+
</SideMenu.Body>
|
|
505
|
+
</SideMenu>
|
|
506
|
+
```
|
|
507
|
+
|
|
489
508
|
#### Пример кастомизации
|
|
490
509
|
|
|
491
510
|
```jsx harmony
|
|
@@ -576,24 +595,6 @@ React.useEffect(() => {
|
|
|
576
595
|
</div>
|
|
577
596
|
```
|
|
578
597
|
|
|
579
|
-
#### Пример с использованием компонента `SideMenu.Notifications`
|
|
580
|
-
|
|
581
|
-
[Документация](https://wiki.skbkontur.ru/pages/viewpage.action?pageId=952721322) по встройке Колокольчика в боковое меню. По вопросам интеграции обращайтесь в ММ [notification-support](https://chat.skbkontur.ru/kontur/channels/notification-support).
|
|
582
|
-
|
|
583
|
-
```jsx harmony
|
|
584
|
-
import { SideMenu } from '@skbkontur/side-menu';
|
|
585
|
-
|
|
586
|
-
<SideMenu>
|
|
587
|
-
<SideMenu.Body>
|
|
588
|
-
<SideMenu.Notifications
|
|
589
|
-
widgetApi={widgetApi}
|
|
590
|
-
count={count}
|
|
591
|
-
showDivider
|
|
592
|
-
/>
|
|
593
|
-
</SideMenu.Body>
|
|
594
|
-
</SideMenu>
|
|
595
|
-
```
|
|
596
|
-
|
|
597
598
|
#### Переменные кастомизации (см. [ThemeContext](https://tech.skbkontur.ru/react-ui/#/Customization/ThemeContext))
|
|
598
599
|
|
|
599
600
|
```typescript static
|
package/SideMenuDataTids.d.ts
CHANGED
package/SideMenuDataTids.js
CHANGED
|
@@ -8,6 +8,7 @@ exports.SideMenuDataTids = {
|
|
|
8
8
|
separatedSubMenu: 'SideMenu__separatedSubMenu',
|
|
9
9
|
rightBorder: 'SideMenu__rightBorder',
|
|
10
10
|
clickableElement: 'SideMenu__clickableElement',
|
|
11
|
+
footer: 'SideMenu__footer',
|
|
11
12
|
bellSideMenuDropdownButton: 'SideMenu__bellDropdownButton',
|
|
12
13
|
bellCloseButton: 'SideMenu__bellCloseButton',
|
|
13
14
|
bellHeader: 'SideMenu__bellHeaderWidget',
|
package/package.json
CHANGED
package/src/SideMenu/SideMenu.js
CHANGED
|
@@ -39,6 +39,7 @@ var SideMenuInner = (0, react_1.forwardRef)(function (_a, ref) {
|
|
|
39
39
|
var _f, _g;
|
|
40
40
|
var children = _a.children, value = _a.value, activeItem = _a.activeItem, _h = _a.size, size = _h === void 0 ? 'small' : _h, _j = _a.isSeparatedMenu, isSeparatedMenu = _j === void 0 ? false : _j, className = _a.className, _k = _a.disableSwipe, disableSwipe = _k === void 0 ? false : _k, _l = _a.disableCollapsing, disableCollapsing = _l === void 0 ? false : _l, desktopMediaQuery = _a.desktopMediaQuery, narrowDesktopMediaQuery = _a.narrowDesktopMediaQuery, tabletMediaQuery = _a.tabletMediaQuery, mobileMediaQuery = _a.mobileMediaQuery, _m = _a.showScrollBar, showScrollBar = _m === void 0 ? 'hover' : _m, isOpen = _a.isOpen, isPinned = _a.isPinned, onValueChange = _a.onValueChange, onActiveItemChange = _a.onActiveItemChange, onOpen = _a.onOpen, onClose = _a.onClose, onPinnedValueChange = _a.onPinnedValueChange, rest = tslib_1.__rest(_a, ["children", "value", "activeItem", "size", "isSeparatedMenu", "className", "disableSwipe", "disableCollapsing", "desktopMediaQuery", "narrowDesktopMediaQuery", "tabletMediaQuery", "mobileMediaQuery", "showScrollBar", "isOpen", "isPinned", "onValueChange", "onActiveItemChange", "onOpen", "onClose", "onPinnedValueChange"]);
|
|
41
41
|
var transitionTimer = (0, react_1.useRef)(null);
|
|
42
|
+
var timerScrollbar = (0, react_1.useRef)(null);
|
|
42
43
|
var sideMenuRef = (0, react_1.useRef)(null);
|
|
43
44
|
var contentWrapperRef = (0, react_1.useRef)(null);
|
|
44
45
|
var scrollContainerRef = (0, react_1.useRef)(null);
|
|
@@ -103,7 +104,8 @@ var SideMenuInner = (0, react_1.forwardRef)(function (_a, ref) {
|
|
|
103
104
|
if (isMobile && isSeparatedMenuShown) {
|
|
104
105
|
return;
|
|
105
106
|
}
|
|
106
|
-
|
|
107
|
+
clearTimeout(timerScrollbar.current);
|
|
108
|
+
timerScrollbar.current = setTimeout(function () {
|
|
107
109
|
var _a;
|
|
108
110
|
var contentWrapper = contentWrapperRef.current;
|
|
109
111
|
var scrollContainer = (_a = scrollContainerRef.current) === null || _a === void 0 ? void 0 : _a.inner;
|
|
@@ -112,7 +114,10 @@ var SideMenuInner = (0, react_1.forwardRef)(function (_a, ref) {
|
|
|
112
114
|
}
|
|
113
115
|
setHasScrollBar(scrollContainer.clientHeight < contentWrapper.scrollHeight);
|
|
114
116
|
}, 50);
|
|
115
|
-
|
|
117
|
+
return function () {
|
|
118
|
+
clearTimeout(timerScrollbar.current);
|
|
119
|
+
};
|
|
120
|
+
});
|
|
116
121
|
(0, react_1.useEffect)(function () {
|
|
117
122
|
isDesktopQuery && setIsOpened(!isPinned);
|
|
118
123
|
}, [isPinned, isDesktopQuery]);
|
|
@@ -8,6 +8,7 @@ var ThemeContext_1 = require("@skbkontur/react-ui/lib/theming/ThemeContext");
|
|
|
8
8
|
var SideMenuContext_1 = require("../SideMenuContext");
|
|
9
9
|
var SideMenu_styles_1 = require("../SideMenu/SideMenu.styles");
|
|
10
10
|
var ThemeHelpers_1 = require("../../lib/theming/ThemeHelpers");
|
|
11
|
+
var SideMenuDataTids_1 = require("../../SideMenuDataTids");
|
|
11
12
|
var SideMenuFooter_styles_1 = require("./SideMenuFooter.styles");
|
|
12
13
|
var SideMenuFooterInner = (0, react_1.forwardRef)(function (_a, ref) {
|
|
13
14
|
var _b;
|
|
@@ -19,7 +20,7 @@ var SideMenuFooterInner = (0, react_1.forwardRef)(function (_a, ref) {
|
|
|
19
20
|
setIsFixed(!!context.hasScrollBar && !(context.scrollState === 'bottom'));
|
|
20
21
|
}, [context.hasScrollBar, context.scrollState]);
|
|
21
22
|
if (!(context.isMobile || context.isTablet) || (context.isOpened && (context.isMobile || context.isTablet))) {
|
|
22
|
-
return (react_1.default.createElement("footer", tslib_1.__assign({ className: (0, Emotion_1.cx)((_b = {},
|
|
23
|
+
return (react_1.default.createElement("footer", tslib_1.__assign({ "data-tid": SideMenuDataTids_1.SideMenuDataTids.footer, "data-visual-state-fixed": isFixed, className: (0, Emotion_1.cx)((_b = {},
|
|
23
24
|
_b[SideMenuFooter_styles_1.jsStyles.root(theme)] = true,
|
|
24
25
|
_b[SideMenuFooter_styles_1.jsStyles.rootFixed(theme)] = isFixed,
|
|
25
26
|
_b[SideMenuFooter_styles_1.jsStyles.rootTransitionedForTabletsOrMobiles()] = context.isBeingTransitioned && (context.isMobile || context.isTablet),
|
|
@@ -4,11 +4,11 @@ import type { ImportFaults, WidgetApi, RenderFault, RenderDisposeFault } from '@
|
|
|
4
4
|
import { type SideMenuDropdownProps } from '../SideMenuDropdown/SideMenuDropdown';
|
|
5
5
|
export interface NotificationApiProps extends Omit<SideMenuDropdownProps, 'icon' | 'marker' | 'subCaption'> {
|
|
6
6
|
/**
|
|
7
|
-
* API виджета,
|
|
7
|
+
* API виджета, результат вызова importWidgetModule(bellWidgetConfig). Подробнее смотреть в документации Колокольчика - https://wiki.skbkontur.ru/pages/viewpage.action?pageId=868998405
|
|
8
8
|
*/
|
|
9
9
|
widgetApi: Promise<OperationResult<ImportFaults, WidgetApi>>;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Счётчик уведомлений
|
|
12
12
|
*/
|
|
13
13
|
count: number;
|
|
14
14
|
/**
|