@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 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
- SideMenu с меню второго уровня в отдельной колонке
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
- SideMenu с ручным управлением.
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
- ```css static
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
@@ -5,6 +5,7 @@ export declare const SideMenuDataTids: {
5
5
  separatedSubMenu: string;
6
6
  rightBorder: string;
7
7
  clickableElement: string;
8
+ footer: string;
8
9
  bellSideMenuDropdownButton: string;
9
10
  bellCloseButton: string;
10
11
  bellHeader: string;
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skbkontur/side-menu",
3
- "version": "3.3.0-beta.0",
3
+ "version": "3.3.0",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org/"
@@ -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
- setTimeout(function () {
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
- }, [activeMenuItem, isOpened, isBeingTransitioned]);
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 виджета, является результатом вызова importWidgetModule(bellWidgetConfig). Подробнее смотреть в документации Колокольчика - https://wiki.skbkontur.ru/pages/viewpage.action?pageId=868998405
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
  /**