@skbkontur/side-menu 0.4.1 → 0.4.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 +8 -0
- package/README.md +13 -6
- package/hooks/UseMemoIcon.d.ts +2 -0
- package/hooks/UseMemoIcon.js +14 -0
- package/hooks/useActiveState.d.ts +1 -0
- package/hooks/useActiveState.js +12 -0
- package/hooks/useOpenedState.d.ts +2 -0
- package/hooks/useOpenedState.js +11 -0
- package/hooks/useOpenedSubElementState.d.ts +1 -0
- package/hooks/useOpenedSubElementState.js +12 -0
- package/index.d.ts +13 -11
- package/index.js +13 -11
- package/package.json +1 -1
- package/src/SideMenu/SideMenu.d.ts +42 -0
- package/src/{SideMenu.js → SideMenu/SideMenu.js} +33 -27
- package/src/SideMenu/SideMenu.md +0 -0
- package/src/SideMenu.styles.d.ts +3 -1
- package/src/SideMenu.styles.js +60 -54
- package/src/SideMenuAvatar/SideMenuAvatar.d.ts +13 -0
- package/src/{SideMenuAvatar.js → SideMenuAvatar/SideMenuAvatar.js} +9 -10
- package/src/SideMenuAvatar/SideMenuAvatar.md +0 -0
- package/src/SideMenuBody/SideMenuBody.d.ts +13 -0
- package/src/{SideMenuBody.js → SideMenuBody/SideMenuBody.js} +10 -11
- package/src/SideMenuBody/SideMenuBody.md +0 -0
- package/src/SideMenuDivider/SideMenuDivider.d.ts +10 -0
- package/src/{SideMenuDivider.js → SideMenuDivider/SideMenuDivider.js} +8 -9
- package/src/SideMenuDivider/SideMenuDivider.md +0 -0
- package/src/{SideMenuDropdown.d.ts → SideMenuDropdown/SideMenuDropdown.d.ts} +6 -2
- package/src/{SideMenuDropdown.js → SideMenuDropdown/SideMenuDropdown.js} +11 -12
- package/src/SideMenuDropdown/SideMenuDropdown.md +0 -0
- package/src/{SideMenuFooter.d.ts → SideMenuFooter/SideMenuFooter.d.ts} +6 -2
- package/src/{SideMenuFooter.js → SideMenuFooter/SideMenuFooter.js} +10 -11
- package/src/SideMenuFooter/SideMenuFooter.md +0 -0
- package/src/{SideMenuHeader.d.ts → SideMenuHeader/SideMenuHeader.d.ts} +6 -2
- package/src/{SideMenuHeader.js → SideMenuHeader/SideMenuHeader.js} +11 -12
- package/src/SideMenuHeader/SideMenuHeader.md +0 -0
- package/src/SideMenuItem/SideMenuItem.d.ts +14 -0
- package/src/SideMenuItem/SideMenuItem.js +15 -0
- package/src/SideMenuItem/SideMenuItem.md +0 -0
- package/src/SideMenuLink/SideMenuLink.d.ts +16 -0
- package/src/SideMenuLink/SideMenuLink.js +21 -0
- package/src/SideMenuLink/SideMenuLink.md +0 -0
- package/src/SideMenuOrganisations/SideMenuOrganisations.d.ts +10 -0
- package/src/{SideMenuOrganisations.js → SideMenuOrganisations/SideMenuOrganisations.js} +7 -8
- package/src/SideMenuOrganisations/SideMenuOrganisations.md +0 -0
- package/src/SideMenuSubItem/SideMenuSubItem.d.ts +12 -0
- package/src/SideMenuSubItem/SideMenuSubItem.js +27 -0
- package/src/SideMenuSubItem/SideMenuSubItem.md +0 -0
- package/src/SideMenuSubItemHeader/SideMenuSubItemHeader.d.ts +13 -0
- package/src/{SideMenuSubItemHeader.js → SideMenuSubItemHeader/SideMenuSubItemHeader.js} +10 -11
- package/src/SideMenuSubItemHeader/SideMenuSubItemHeader.md +0 -0
- package/src/SideMenuSubLink/SideMenuSubLink.d.ts +16 -0
- package/src/SideMenuSubLink/SideMenuSubLink.js +31 -0
- package/src/SideMenuSubLink/SideMenuSubLink.md +0 -0
- package/src/internal/ClickableElement.d.ts +25 -0
- package/src/internal/ClickableElement.js +63 -0
- package/src/{SideMenuBodyChildren.d.ts → internal/InnerBody.d.ts} +2 -2
- package/src/{SideMenuBodyChildren.js → internal/InnerBody.js} +13 -12
- package/src/{InnerSubMenu.d.ts → internal/InnerSubMenu.d.ts} +0 -0
- package/src/{InnerSubMenu.js → internal/InnerSubMenu.js} +3 -1
- package/src/internal/ItemContent/Avatar.d.ts +5 -0
- package/src/internal/ItemContent/Avatar.js +12 -0
- package/src/internal/ItemContent/Caption.d.ts +9 -0
- package/src/internal/ItemContent/Caption.js +19 -0
- package/src/internal/ItemContent/Icon.d.ts +8 -0
- package/src/internal/ItemContent/Icon.js +20 -0
- package/src/internal/ItemContent/ItemContent.d.ts +7 -0
- package/src/internal/ItemContent/ItemContent.js +39 -0
- package/src/internal/ItemContent/Marker.d.ts +6 -0
- package/src/internal/ItemContent/Marker.js +11 -0
- package/src/internal/NestedMenu.d.ts +9 -0
- package/src/internal/NestedMenu.js +27 -0
- package/src/{RightBorder.d.ts → internal/RightBorder.d.ts} +0 -0
- package/src/{RightBorder.js → internal/RightBorder.js} +2 -2
- package/src/{SeparatedSubMenu.d.ts → internal/SeparatedSubMenu.d.ts} +0 -0
- package/src/{SeparatedSubMenu.js → internal/SeparatedSubMenu.js} +6 -4
- package/src/{SideMenuLogotype.d.ts → internal/SideMenuLogotype.d.ts} +1 -1
- package/src/{SideMenuLogotype.js → internal/SideMenuLogotype.js} +2 -2
- package/src/internal/SubMenu.d.ts +13 -0
- package/src/internal/SubMenu.js +21 -0
- package/utils/scripts.d.ts +4 -2
- package/utils/scripts.js +18 -14
- package/src/SideMenu.d.ts +0 -38
- package/src/SideMenuAvatar.d.ts +0 -9
- package/src/SideMenuBody.d.ts +0 -9
- package/src/SideMenuDivider.d.ts +0 -6
- package/src/SideMenuItem.d.ts +0 -19
- package/src/SideMenuItem.js +0 -126
- package/src/SideMenuOrganisations.d.ts +0 -6
- package/src/SideMenuSubItem.d.ts +0 -8
- package/src/SideMenuSubItem.js +0 -58
- package/src/SideMenuSubItemHeader.d.ts +0 -9
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { __assign, __rest } from "tslib";
|
|
2
|
+
import React, { forwardRef } from 'react';
|
|
3
|
+
import { ClickableElement } from '../internal/ClickableElement';
|
|
4
|
+
import { jsStyles } from '../SideMenu.styles';
|
|
5
|
+
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
6
|
+
var SideMenuLinkInner = forwardRef(function (_a, ref) {
|
|
7
|
+
var _b;
|
|
8
|
+
var className = _a.className, rest = __rest(_a, ["className"]);
|
|
9
|
+
return React.createElement(ClickableElement, __assign({}, rest, { ref: ref, element: 'a', className: cx((_b = {}, _b[jsStyles.link()] = true, _b), className) }));
|
|
10
|
+
});
|
|
11
|
+
SideMenuLinkInner.displayName = 'SideMenuLink';
|
|
12
|
+
/**
|
|
13
|
+
* Ссылка для `SideMenu`
|
|
14
|
+
*
|
|
15
|
+
* Визуально повторяет `SideMenu.Item`
|
|
16
|
+
*
|
|
17
|
+
* Может принимать все атрибуты обычной HTML-ссылки
|
|
18
|
+
*
|
|
19
|
+
* @visibleName SideMenu.Link
|
|
20
|
+
*/
|
|
21
|
+
export var SideMenuLink = Object.assign(SideMenuLinkInner, { __KONTUR_REACT_UI__: 'SideMenuLink' });
|
|
File without changes
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SideMenuDropdownProps } from '../SideMenuDropdown/SideMenuDropdown';
|
|
3
|
+
/**
|
|
4
|
+
* Список организаций
|
|
5
|
+
*
|
|
6
|
+
* @visibleName SideMenu.Organisations
|
|
7
|
+
*/
|
|
8
|
+
export declare const SideMenuOrganisations: React.ForwardRefExoticComponent<SideMenuDropdownProps & React.RefAttributes<HTMLDivElement>> & {
|
|
9
|
+
__KONTUR_REACT_UI__: string;
|
|
10
|
+
};
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { __assign, __rest } from "tslib";
|
|
2
2
|
import React, { forwardRef } from 'react';
|
|
3
|
-
import { SideMenuDropdown } from '
|
|
3
|
+
import { SideMenuDropdown } from '../SideMenuDropdown/SideMenuDropdown';
|
|
4
|
+
var SideMenuOrganisationsInner = forwardRef(function (_a, ref) {
|
|
5
|
+
var children = _a.children, _b = _a.caption, caption = _b === void 0 ? 'СКБ Контур' : _b, rest = __rest(_a, ["children", "caption"]);
|
|
6
|
+
return (React.createElement(SideMenuDropdown, __assign({ caption: caption, menuWidth: '240px', positions: ['top left'], ref: ref }, rest), children));
|
|
7
|
+
});
|
|
8
|
+
SideMenuOrganisationsInner.displayName = 'SideMenuOrganisations';
|
|
4
9
|
/**
|
|
5
10
|
* Список организаций
|
|
6
11
|
*
|
|
7
12
|
* @visibleName SideMenu.Organisations
|
|
8
13
|
*/
|
|
9
|
-
var SideMenuOrganisations =
|
|
10
|
-
var children = _a.children, _b = _a.caption, caption = _b === void 0 ? 'СКБ Контур' : _b, rest = __rest(_a, ["children", "caption"]);
|
|
11
|
-
return (React.createElement(SideMenuDropdown, __assign({ caption: caption, menuWidth: '240px', positions: ['top left'], ref: ref }, rest), children));
|
|
12
|
-
});
|
|
13
|
-
SideMenuOrganisations.displayName = 'SideMenuOrganisations';
|
|
14
|
-
var SideMenuOrganisationsWithStaticFields = Object.assign(SideMenuOrganisations, {
|
|
14
|
+
export var SideMenuOrganisations = Object.assign(SideMenuOrganisationsInner, {
|
|
15
15
|
__KONTUR_REACT_UI__: 'SideMenuOrganisations',
|
|
16
16
|
});
|
|
17
|
-
export { SideMenuOrganisationsWithStaticFields as SideMenuOrganisations };
|
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SideMenuItemProps } from '../SideMenuItem/SideMenuItem';
|
|
3
|
+
export interface SideMenuSubItemProps extends Omit<SideMenuItemProps, 'icon'>, Partial<Pick<SideMenuItemProps, 'icon'>> {
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Элемент списка второго уровня
|
|
7
|
+
*
|
|
8
|
+
* @visibleName SideMenu.SubItem
|
|
9
|
+
*/
|
|
10
|
+
export declare const SideMenuSubItem: React.ForwardRefExoticComponent<SideMenuSubItemProps & React.RefAttributes<HTMLDivElement>> & {
|
|
11
|
+
__KONTUR_REACT_UI__: string;
|
|
12
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { __assign, __rest } from "tslib";
|
|
2
|
+
import React, { forwardRef, useContext } from 'react';
|
|
3
|
+
import { SideMenuItem } from '../SideMenuItem/SideMenuItem';
|
|
4
|
+
import { SideMenuContext } from '../SideMenuContext';
|
|
5
|
+
import { NestedMenu } from '../internal/NestedMenu';
|
|
6
|
+
import { useOpenedSubElementState } from '../../hooks/useOpenedSubElementState';
|
|
7
|
+
import { useMemoIcon } from '../../hooks/UseMemoIcon';
|
|
8
|
+
var SideMenuSubItemInner = forwardRef(function (_a, ref) {
|
|
9
|
+
var children = _a.children, _generatedId = _a._generatedId, id = _a.id, rest = __rest(_a, ["children", "_generatedId", "id"]);
|
|
10
|
+
var context = useContext(SideMenuContext);
|
|
11
|
+
var isOpened = useOpenedSubElementState(id, _generatedId, context.openedParents, context.activeMenuItem);
|
|
12
|
+
var icon = useMemoIcon(children, isOpened);
|
|
13
|
+
return (React.createElement("div", { ref: ref },
|
|
14
|
+
React.createElement(SideMenuItem
|
|
15
|
+
/*@ts-expect-error: SideMenuItem should have icon */
|
|
16
|
+
, __assign({
|
|
17
|
+
/*@ts-expect-error: SideMenuItem should have icon */
|
|
18
|
+
icon: icon, _isSubMenu: true, id: id, _generatedId: _generatedId }, rest)),
|
|
19
|
+
children && isOpened && React.createElement(NestedMenu, { _generatedId: _generatedId }, children)));
|
|
20
|
+
});
|
|
21
|
+
SideMenuSubItemInner.displayName = 'SideMenuSubItem';
|
|
22
|
+
/**
|
|
23
|
+
* Элемент списка второго уровня
|
|
24
|
+
*
|
|
25
|
+
* @visibleName SideMenu.SubItem
|
|
26
|
+
*/
|
|
27
|
+
export var SideMenuSubItem = Object.assign(SideMenuSubItemInner, { __KONTUR_REACT_UI__: 'SideMenuSubItem' });
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { CommonProps } from '@skbkontur/react-ui/internal/CommonWrapper';
|
|
3
|
+
export interface SideMenuSubItemHeaderProps extends CommonProps {
|
|
4
|
+
children?: React.ReactNode;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Заголовок списка второго уровня
|
|
8
|
+
*
|
|
9
|
+
* @visibleName SideMenu.SubItemHeader
|
|
10
|
+
*/
|
|
11
|
+
export declare const SideMenuSubItemHeader: React.ForwardRefExoticComponent<SideMenuSubItemHeaderProps & React.RefAttributes<HTMLParagraphElement>> & {
|
|
12
|
+
__KONTUR_REACT_UI__: string;
|
|
13
|
+
};
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import { __assign, __rest } from "tslib";
|
|
2
2
|
import React, { forwardRef, useContext } from 'react';
|
|
3
3
|
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
4
|
-
import { jsStyles } from '
|
|
5
|
-
import { SideMenuContext } from '
|
|
6
|
-
|
|
7
|
-
* Заголовок списка второго уровня
|
|
8
|
-
*
|
|
9
|
-
* @visibleName SideMenu.SubItemHeader
|
|
10
|
-
*/
|
|
11
|
-
var SideMenuSubItemHeader = forwardRef(function (_a, ref) {
|
|
4
|
+
import { jsStyles } from '../SideMenu.styles';
|
|
5
|
+
import { SideMenuContext } from '../SideMenuContext';
|
|
6
|
+
var SideMenuSubItemHeaderInner = forwardRef(function (_a, ref) {
|
|
12
7
|
var _b;
|
|
13
8
|
var className = _a.className, children = _a.children, rest = __rest(_a, ["className", "children"]);
|
|
14
9
|
var context = useContext(SideMenuContext);
|
|
15
10
|
return (React.createElement("p", __assign({ className: cx((_b = {}, _b[jsStyles.subItemHeader()] = true, _b[jsStyles.subItemHeaderInSeparatedSubMenu()] = context.isSeparatedMenu, _b), className), ref: ref }, rest), children));
|
|
16
11
|
});
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
SideMenuSubItemHeaderInner.displayName = 'SideMenuSubItemHeader';
|
|
13
|
+
/**
|
|
14
|
+
* Заголовок списка второго уровня
|
|
15
|
+
*
|
|
16
|
+
* @visibleName SideMenu.SubItemHeader
|
|
17
|
+
*/
|
|
18
|
+
export var SideMenuSubItemHeader = Object.assign(SideMenuSubItemHeaderInner, {
|
|
19
19
|
__KONTUR_REACT_UI__: 'SideMenuSubItemHeader',
|
|
20
20
|
});
|
|
21
|
-
export { SideMenuSubItemHeaderWithStaticFields as SideMenuSubItemHeader };
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SideMenuLinkProps } from '../SideMenuLink/SideMenuLink';
|
|
3
|
+
export interface SideMenuSubLinkProps extends Omit<SideMenuLinkProps, 'icon'>, Partial<Pick<SideMenuLinkProps, 'icon'>> {
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Ссылка в подменю для `SideMenu`
|
|
7
|
+
*
|
|
8
|
+
* Визуально повторяет `SideMenu.SubItem`
|
|
9
|
+
*
|
|
10
|
+
* Может принимать все атрибуты обычной HTML-ссылки
|
|
11
|
+
*
|
|
12
|
+
* @visibleName SideMenu.SubLink
|
|
13
|
+
*/
|
|
14
|
+
export declare const SideMenuSubLink: React.ForwardRefExoticComponent<SideMenuSubLinkProps & React.RefAttributes<HTMLDivElement>> & {
|
|
15
|
+
__KONTUR_REACT_UI__: string;
|
|
16
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { __assign, __rest } from "tslib";
|
|
2
|
+
import React, { forwardRef, useContext } from 'react';
|
|
3
|
+
import { SideMenuContext } from '../SideMenuContext';
|
|
4
|
+
import { SideMenuLink } from '../SideMenuLink/SideMenuLink';
|
|
5
|
+
import { NestedMenu } from '../internal/NestedMenu';
|
|
6
|
+
import { useOpenedSubElementState } from '../../hooks/useOpenedSubElementState';
|
|
7
|
+
import { useMemoIcon } from '../../hooks/UseMemoIcon';
|
|
8
|
+
var SideMenuSubLinkInner = forwardRef(function (_a, ref) {
|
|
9
|
+
var className = _a.className, marker = _a.marker, id = _a.id, _generatedId = _a._generatedId, _isSubMenu = _a._isSubMenu, _isNestedSubMenu = _a._isNestedSubMenu, children = _a.children, rest = __rest(_a, ["className", "marker", "id", "_generatedId", "_isSubMenu", "_isNestedSubMenu", "children"]);
|
|
10
|
+
var context = useContext(SideMenuContext);
|
|
11
|
+
var isOpened = useOpenedSubElementState(id, _generatedId, context.openedParents, context.activeMenuItem);
|
|
12
|
+
var icon = useMemoIcon(children, isOpened);
|
|
13
|
+
return (React.createElement("div", { ref: ref },
|
|
14
|
+
React.createElement(SideMenuLink
|
|
15
|
+
/*@ts-expect-error: SideMenuItem should have icon */
|
|
16
|
+
, __assign({
|
|
17
|
+
/*@ts-expect-error: SideMenuItem should have icon */
|
|
18
|
+
icon: icon, _isSubMenu: true, _isNestedSubMenu: _isNestedSubMenu, id: id, _generatedId: _generatedId }, rest)),
|
|
19
|
+
children && isOpened && React.createElement(NestedMenu, { _generatedId: _generatedId }, children)));
|
|
20
|
+
});
|
|
21
|
+
SideMenuSubLinkInner.displayName = 'SideMenuSubLink';
|
|
22
|
+
/**
|
|
23
|
+
* Ссылка в подменю для `SideMenu`
|
|
24
|
+
*
|
|
25
|
+
* Визуально повторяет `SideMenu.SubItem`
|
|
26
|
+
*
|
|
27
|
+
* Может принимать все атрибуты обычной HTML-ссылки
|
|
28
|
+
*
|
|
29
|
+
* @visibleName SideMenu.SubLink
|
|
30
|
+
*/
|
|
31
|
+
export var SideMenuSubLink = Object.assign(SideMenuSubLinkInner, { __KONTUR_REACT_UI__: 'SideMenuSubLink' });
|
|
File without changes
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { CommonProps } from '@skbkontur/react-ui/internal/CommonWrapper';
|
|
3
|
+
export interface CommonClickableElementProps extends CommonProps {
|
|
4
|
+
children?: React.ReactNode;
|
|
5
|
+
icon: React.ReactElement;
|
|
6
|
+
marker?: string;
|
|
7
|
+
caption?: string;
|
|
8
|
+
id?: string;
|
|
9
|
+
_generatedId?: string;
|
|
10
|
+
_isSubMenu?: boolean;
|
|
11
|
+
_isNestedSubMenu?: boolean;
|
|
12
|
+
_avatar?: React.ReactElement;
|
|
13
|
+
}
|
|
14
|
+
export interface ClickableElementProps extends CommonClickableElementProps {
|
|
15
|
+
element: 'a' | 'button';
|
|
16
|
+
href?: string;
|
|
17
|
+
onClick?: React.EventHandler<React.MouseEvent<Element>>;
|
|
18
|
+
onKeyDown?: React.EventHandler<React.KeyboardEvent<Element>>;
|
|
19
|
+
onFocus?: React.EventHandler<React.FocusEvent<Element>>;
|
|
20
|
+
onBlur?: React.EventHandler<React.FocusEvent<Element>>;
|
|
21
|
+
}
|
|
22
|
+
declare const ClickableElementWithStaticFields: React.ForwardRefExoticComponent<ClickableElementProps & React.RefAttributes<HTMLButtonElement | HTMLAnchorElement>> & {
|
|
23
|
+
__KONTUR_REACT_UI__: string;
|
|
24
|
+
};
|
|
25
|
+
export { ClickableElementWithStaticFields as ClickableElement };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { __assign, __rest } from "tslib";
|
|
2
|
+
import React, { forwardRef, useContext, useState } from 'react';
|
|
3
|
+
import { keyListener } from '@skbkontur/react-ui/lib/events/keyListener';
|
|
4
|
+
import { SideMenuContext } from '../SideMenuContext';
|
|
5
|
+
import { ItemContent } from './ItemContent/ItemContent';
|
|
6
|
+
import { SubMenu } from './SubMenu';
|
|
7
|
+
import { useOpenedState } from '../../hooks/useOpenedState';
|
|
8
|
+
import { useActiveState } from '../../hooks/useActiveState';
|
|
9
|
+
import { jsStyles } from '../SideMenu.styles';
|
|
10
|
+
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
11
|
+
/**
|
|
12
|
+
* Элемент списка (пункт меню либо ссылка)
|
|
13
|
+
*
|
|
14
|
+
* @visibleName ClickableElement
|
|
15
|
+
*/
|
|
16
|
+
var ClickableElement = forwardRef(function (_a, ref) {
|
|
17
|
+
var _b;
|
|
18
|
+
var onClick = _a.onClick, icon = _a.icon, _avatar = _a._avatar, marker = _a.marker, caption = _a.caption, id = _a.id, _isSubMenu = _a._isSubMenu, children = _a.children, _isNestedSubMenu = _a._isNestedSubMenu, _generatedId = _a._generatedId, Tag = _a.element, onKeyDown = _a.onKeyDown, onFocus = _a.onFocus, onBlur = _a.onBlur, className = _a.className, rest = __rest(_a, ["onClick", "icon", "_avatar", "marker", "caption", "id", "_isSubMenu", "children", "_isNestedSubMenu", "_generatedId", "element", "onKeyDown", "onFocus", "onBlur", "className"]);
|
|
19
|
+
var context = useContext(SideMenuContext);
|
|
20
|
+
var isActive = useActiveState(id, rest.href, _generatedId, context.activeMenuItem);
|
|
21
|
+
var _c = useState(false), focusedByTab = _c[0], setFocusedByTab = _c[1];
|
|
22
|
+
var isOpened = useOpenedState(id || rest.href, _generatedId, context.openedParents, isActive, children);
|
|
23
|
+
var handleClick = function (e) {
|
|
24
|
+
var _a, _b, _c;
|
|
25
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
26
|
+
if (id) {
|
|
27
|
+
(_a = context.switchActiveMenuItem) === null || _a === void 0 ? void 0 : _a.call(context, id);
|
|
28
|
+
}
|
|
29
|
+
else if (rest.href) {
|
|
30
|
+
(_b = context.switchActiveMenuItem) === null || _b === void 0 ? void 0 : _b.call(context, rest.href);
|
|
31
|
+
}
|
|
32
|
+
else if (_generatedId) {
|
|
33
|
+
(_c = context.switchActiveMenuItem) === null || _c === void 0 ? void 0 : _c.call(context, _generatedId);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
var handleFocus = function (e) {
|
|
37
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
|
|
38
|
+
requestAnimationFrame(function () {
|
|
39
|
+
if (keyListener.isTabPressed) {
|
|
40
|
+
setFocusedByTab(true);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var handleBlur = function (e) {
|
|
45
|
+
onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
|
|
46
|
+
setFocusedByTab(false);
|
|
47
|
+
};
|
|
48
|
+
var isOpenedFirstLevelItemInSeparatedMenu = isOpened && !_isSubMenu && context.isSeparatedMenu;
|
|
49
|
+
return (React.createElement("div", null,
|
|
50
|
+
React.cloneElement(React.createElement(Tag, null), __assign({ className: cx((_b = {},
|
|
51
|
+
_b[jsStyles.item()] = true,
|
|
52
|
+
_b[jsStyles.subItem()] = context.isSeparatedMenu && _isSubMenu,
|
|
53
|
+
_b[jsStyles.focusedItem()] = focusedByTab,
|
|
54
|
+
_b[jsStyles.activeItem()] = isActive || isOpenedFirstLevelItemInSeparatedMenu,
|
|
55
|
+
_b[jsStyles.activeSubItem()] = isActive && context.isSeparatedMenu && _isSubMenu,
|
|
56
|
+
_b), className), onClick: handleClick, onFocus: handleFocus, onBlur: handleBlur, children: (React.createElement(ItemContent, { _isSubMenu: _isSubMenu, icon: icon, _isNestedSubMenu: _isNestedSubMenu, caption: caption, marker: marker, _avatar: _avatar })), ref: ref }, rest)),
|
|
57
|
+
React.createElement(SubMenu, { generatedId: _generatedId, isSubMenu: _isSubMenu, isSeparatedMenu: context.isSeparatedMenu, isOpened: isOpened, isMinimised: context.isMinimised }, children)));
|
|
58
|
+
});
|
|
59
|
+
ClickableElement.displayName = 'ClickableElement';
|
|
60
|
+
var ClickableElementWithStaticFields = Object.assign(ClickableElement, {
|
|
61
|
+
__KONTUR_REACT_UI__: 'ClickableElement',
|
|
62
|
+
});
|
|
63
|
+
export { ClickableElementWithStaticFields as ClickableElement };
|
|
@@ -6,7 +6,7 @@ export interface FlattedArrayElementType {
|
|
|
6
6
|
parentId: string | null;
|
|
7
7
|
generatedParentId: string | null;
|
|
8
8
|
}
|
|
9
|
-
declare const
|
|
9
|
+
declare const InnerBodyWithStaticFields: React.FC<CommonProps> & {
|
|
10
10
|
__KONTUR_REACT_UI__: string;
|
|
11
11
|
};
|
|
12
|
-
export {
|
|
12
|
+
export { InnerBodyWithStaticFields as InnerBody };
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { __assign } from "tslib";
|
|
2
2
|
import React, { isValidElement, useContext, useEffect, useRef, useState } from 'react';
|
|
3
|
-
import { jsStyles } from '
|
|
4
|
-
import { SideMenuContext } from '
|
|
5
|
-
import { getAllParents, getElementsChildren, getItemId } from '
|
|
3
|
+
import { jsStyles } from '../SideMenu.styles';
|
|
4
|
+
import { SideMenuContext } from '../SideMenuContext';
|
|
5
|
+
import { getAllParents, getElementsChildren, getItemId, isClickableElement } from '../../utils/scripts';
|
|
6
6
|
/**
|
|
7
7
|
* Внутренняя часть SideMenuBody
|
|
8
8
|
*
|
|
9
|
-
* @visibleName
|
|
9
|
+
* @visibleName InnerBody
|
|
10
10
|
*/
|
|
11
|
-
var
|
|
11
|
+
var InnerBody = function (_a) {
|
|
12
12
|
var children = _a.children;
|
|
13
13
|
var context = useContext(SideMenuContext);
|
|
14
14
|
var _b = useState([]), parents = _b[0], setParents = _b[1];
|
|
@@ -18,10 +18,10 @@ var SideMenuBodyChildren = function (_a) {
|
|
|
18
18
|
React.Children.map(children, function (child) {
|
|
19
19
|
if (isValidElement(child) &&
|
|
20
20
|
// @ts-expect-error: accessing private property
|
|
21
|
-
child.type.__KONTUR_REACT_UI__
|
|
21
|
+
isClickableElement(child.type.__KONTUR_REACT_UI__)) {
|
|
22
22
|
var generatedId = getItemId('body', levelIndex++);
|
|
23
23
|
flattedArrayOfAllElements.current.push({
|
|
24
|
-
id: child.props.id,
|
|
24
|
+
id: child.props.id || child.props.href,
|
|
25
25
|
generatedId: generatedId,
|
|
26
26
|
parentId: null,
|
|
27
27
|
generatedParentId: null,
|
|
@@ -50,8 +50,9 @@ var SideMenuBodyChildren = function (_a) {
|
|
|
50
50
|
className: jsStyles.dividerInSideMenu(),
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
|
+
if (
|
|
53
54
|
// @ts-expect-error: accessing private property
|
|
54
|
-
|
|
55
|
+
isClickableElement(child.type.__KONTUR_REACT_UI__)) {
|
|
55
56
|
var oldIndex = levelIndex;
|
|
56
57
|
levelIndex++;
|
|
57
58
|
return React.cloneElement(child, {
|
|
@@ -62,8 +63,8 @@ var SideMenuBodyChildren = function (_a) {
|
|
|
62
63
|
}
|
|
63
64
|
})));
|
|
64
65
|
};
|
|
65
|
-
|
|
66
|
-
var
|
|
67
|
-
__KONTUR_REACT_UI__: '
|
|
66
|
+
InnerBody.displayName = 'InnerBody';
|
|
67
|
+
var InnerBodyWithStaticFields = Object.assign(InnerBody, {
|
|
68
|
+
__KONTUR_REACT_UI__: 'InnerBody',
|
|
68
69
|
});
|
|
69
|
-
export {
|
|
70
|
+
export { InnerBodyWithStaticFields as InnerBody };
|
|
File without changes
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React, { forwardRef } from 'react';
|
|
2
|
+
import { isClickableSubElement } from '../../utils/scripts';
|
|
2
3
|
/**
|
|
3
4
|
* Подменю, раскрывающееся внутри основного меню
|
|
4
5
|
*
|
|
@@ -9,8 +10,9 @@ var InnerSubMenu = forwardRef(function (_a, ref) {
|
|
|
9
10
|
var levelIndex = 0;
|
|
10
11
|
return (React.createElement(React.Fragment, null, React.Children.map(children, function (child) {
|
|
11
12
|
if (React.isValidElement(child)) {
|
|
13
|
+
if (
|
|
12
14
|
// @ts-expect-error: accessing private property
|
|
13
|
-
|
|
15
|
+
isClickableSubElement(child.type.__KONTUR_REACT_UI__)) {
|
|
14
16
|
var oldIndex = levelIndex;
|
|
15
17
|
levelIndex++;
|
|
16
18
|
return React.cloneElement(child, {
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SideMenuItemProps } from '../../SideMenuItem/SideMenuItem';
|
|
3
|
+
declare type AvatarProps = Pick<SideMenuItemProps, '_avatar'>;
|
|
4
|
+
export declare const Avatar: ({ _avatar }: AvatarProps) => React.ReactElement<any, string | ((props: any) => React.ReactElement<any, string | any | (new (props: any) => React.Component<any, any, any>)> | null) | (new (props: any) => React.Component<any, any, any>)>;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
3
|
+
import { jsStyles } from '../../SideMenu.styles';
|
|
4
|
+
export var Avatar = function (_a) {
|
|
5
|
+
var _b;
|
|
6
|
+
var _avatar = _a._avatar;
|
|
7
|
+
return React.cloneElement(_avatar, {
|
|
8
|
+
className: cx((_b = {},
|
|
9
|
+
_b[jsStyles.avatarIcon()] = true,
|
|
10
|
+
_b)),
|
|
11
|
+
});
|
|
12
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ItemContentProps } from './ItemContent';
|
|
3
|
+
import { SideMenuContextType } from '../../SideMenuContext';
|
|
4
|
+
interface CaptionProps extends Pick<ItemContentProps, '_isSubMenu' | '_isNestedSubMenu' | 'caption'>, Pick<SideMenuContextType, 'isTransitioned' | 'isSeparatedMenu' | 'hasSubIcons' | 'size'> {
|
|
5
|
+
hasShortcutImage: boolean;
|
|
6
|
+
isMultiline: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const Caption: React.ForwardRefExoticComponent<CaptionProps & React.RefAttributes<HTMLParagraphElement>>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
2
|
+
import { jsStyles } from '../../SideMenu.styles';
|
|
3
|
+
import React, { forwardRef } from 'react';
|
|
4
|
+
export var Caption = forwardRef(function (_a, ref) {
|
|
5
|
+
var _b;
|
|
6
|
+
var isTransitioned = _a.isTransitioned, _isSubMenu = _a._isSubMenu, isSeparatedMenu = _a.isSeparatedMenu, _isNestedSubMenu = _a._isNestedSubMenu, hasShortcutImage = _a.hasShortcutImage, hasSubIcons = _a.hasSubIcons, size = _a.size, caption = _a.caption, isMultiline = _a.isMultiline;
|
|
7
|
+
return (React.createElement("p", { className: cx((_b = {},
|
|
8
|
+
_b[jsStyles.itemText()] = true,
|
|
9
|
+
_b[jsStyles.itemTextTransitioned()] = isTransitioned,
|
|
10
|
+
_b[jsStyles.subItemText()] = _isSubMenu,
|
|
11
|
+
_b[jsStyles.subItemTextSeparatedMenuFirstLevel()] = isSeparatedMenu && !_isNestedSubMenu && _isSubMenu,
|
|
12
|
+
_b[jsStyles.nestedSubItemTextSeparatedMenu()] = isSeparatedMenu && _isNestedSubMenu && !hasShortcutImage,
|
|
13
|
+
_b[jsStyles.itemTextWithoutItemIcon()] = !hasShortcutImage && !isSeparatedMenu,
|
|
14
|
+
_b[jsStyles.subItemTextWithoutColumnIcons()] = _isSubMenu && isSeparatedMenu && !hasSubIcons,
|
|
15
|
+
_b[jsStyles.itemTextLarge()] = size === 'large',
|
|
16
|
+
_b[jsStyles.itemTextMultiline()] = isMultiline,
|
|
17
|
+
_b)), ref: ref }, caption));
|
|
18
|
+
});
|
|
19
|
+
Caption.displayName = 'Caption';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ItemContentProps } from './ItemContent';
|
|
3
|
+
import { SideMenuContextType } from '../../SideMenuContext';
|
|
4
|
+
interface IconProps extends Pick<ItemContentProps, '_isSubMenu' | 'icon'>, Pick<SideMenuContextType, 'isSeparatedMenu' | 'size'> {
|
|
5
|
+
isMultiline: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const Icon: ({ icon, _isSubMenu, isMultiline, size, isSeparatedMenu }: IconProps) => React.ReactElement<any, string | ((props: any) => React.ReactElement<any, string | any | (new (props: any) => React.Component<any, any, any>)> | null) | (new (props: any) => React.Component<any, any, any>)>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
3
|
+
import { jsStyles } from '../../SideMenu.styles';
|
|
4
|
+
export var Icon = function (_a) {
|
|
5
|
+
var _b;
|
|
6
|
+
var icon = _a.icon, _isSubMenu = _a._isSubMenu, isMultiline = _a.isMultiline, size = _a.size, isSeparatedMenu = _a.isSeparatedMenu;
|
|
7
|
+
return React.cloneElement(icon, {
|
|
8
|
+
size: _isSubMenu ? 16 : 24,
|
|
9
|
+
disableCompensation: true,
|
|
10
|
+
className: cx((_b = {},
|
|
11
|
+
_b[jsStyles.icon()] = true,
|
|
12
|
+
_b[jsStyles.iconMultiline()] = isMultiline,
|
|
13
|
+
_b[jsStyles.iconLarge()] = size === 'large',
|
|
14
|
+
_b[jsStyles.iconMultilineLarge()] = size === 'large' && isMultiline,
|
|
15
|
+
_b[jsStyles.iconSubItem()] = _isSubMenu,
|
|
16
|
+
_b[jsStyles.iconSubItemSeparatedMenu()] = isSeparatedMenu && _isSubMenu,
|
|
17
|
+
_b[jsStyles.iconSubItemLarge()] = _isSubMenu && size === 'large',
|
|
18
|
+
_b)),
|
|
19
|
+
});
|
|
20
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SideMenuItemProps } from '../../SideMenuItem/SideMenuItem';
|
|
3
|
+
export declare type ItemContentProps = Pick<SideMenuItemProps, '_isSubMenu' | 'icon' | '_isNestedSubMenu' | 'caption' | 'marker' | '_avatar'>;
|
|
4
|
+
declare const ItemContentWithStaticFields: React.ForwardRefExoticComponent<Pick<SideMenuItemProps, "_isSubMenu" | "icon" | "_isNestedSubMenu" | "caption" | "marker" | "_avatar"> & React.RefAttributes<HTMLDivElement>> & {
|
|
5
|
+
__KONTUR_REACT_UI__: string;
|
|
6
|
+
};
|
|
7
|
+
export { ItemContentWithStaticFields as ItemContent };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React, { forwardRef, useContext, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
3
|
+
import { jsStyles } from '../../SideMenu.styles';
|
|
4
|
+
import { SideMenuContext } from '../../SideMenuContext';
|
|
5
|
+
import { useNumberOfTextLinesInItem } from '../../../hooks/useNumberOfTextLinesInItem';
|
|
6
|
+
import { Icon } from './Icon';
|
|
7
|
+
import { Caption } from './Caption';
|
|
8
|
+
import { Marker } from './Marker';
|
|
9
|
+
import { Avatar } from './Avatar';
|
|
10
|
+
/**
|
|
11
|
+
* Контент для SideMenuItem или SideMenuLink
|
|
12
|
+
*/
|
|
13
|
+
var ItemContent = forwardRef(function (_a, ref) {
|
|
14
|
+
var _b;
|
|
15
|
+
var _isSubMenu = _a._isSubMenu, icon = _a.icon, _isNestedSubMenu = _a._isNestedSubMenu, caption = _a.caption, marker = _a.marker, _avatar = _a._avatar;
|
|
16
|
+
var context = useContext(SideMenuContext);
|
|
17
|
+
var textRef = useRef(null);
|
|
18
|
+
var _c = useState(false), isMultiline = _c[0], setIsMultiline = _c[1];
|
|
19
|
+
useEffect(function () {
|
|
20
|
+
useNumberOfTextLinesInItem(textRef, setIsMultiline);
|
|
21
|
+
}, [textRef.current]);
|
|
22
|
+
var hasShortcutImage = !!icon || !!_avatar;
|
|
23
|
+
return (React.createElement("div", { className: cx((_b = {},
|
|
24
|
+
_b[jsStyles.itemWrapper()] = true,
|
|
25
|
+
_b[jsStyles.itemMultilineWrapper()] = isMultiline,
|
|
26
|
+
_b[jsStyles.subItemWrapper()] = _isSubMenu,
|
|
27
|
+
_b[jsStyles.itemLargeWrapper()] = context.size === 'large',
|
|
28
|
+
_b[jsStyles.subItemLargeWrapper()] = context.size === 'large' && _isSubMenu,
|
|
29
|
+
_b[jsStyles.itemLargeMultilineWrapper()] = isMultiline && context.size === 'large',
|
|
30
|
+
_b)), ref: ref },
|
|
31
|
+
icon && (React.createElement(Icon, { icon: icon, _isSubMenu: _isSubMenu, isMultiline: isMultiline, size: context.size, isSeparatedMenu: context.isSeparatedMenu })),
|
|
32
|
+
_avatar && React.createElement(Avatar, { _avatar: _avatar }),
|
|
33
|
+
!context.isMinimised && (React.createElement("div", { className: jsStyles.textAndMarkerWrapper() },
|
|
34
|
+
React.createElement(Caption, { isTransitioned: context.isTransitioned, _isSubMenu: _isSubMenu, isSeparatedMenu: context.isSeparatedMenu, _isNestedSubMenu: _isNestedSubMenu, hasShortcutImage: hasShortcutImage, size: context.size, hasSubIcons: context.hasSubIcons, isMultiline: isMultiline, caption: caption, ref: textRef }),
|
|
35
|
+
marker && React.createElement(Marker, { isMultiline: isMultiline, marker: marker })))));
|
|
36
|
+
});
|
|
37
|
+
ItemContent.displayName = 'ItemContent';
|
|
38
|
+
var ItemContentWithStaticFields = Object.assign(ItemContent, { __KONTUR_REACT_UI__: 'ItemContent' });
|
|
39
|
+
export { ItemContentWithStaticFields as ItemContent };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
2
|
+
import { jsStyles } from '../../SideMenu.styles';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
export var Marker = function (_a) {
|
|
5
|
+
var _b;
|
|
6
|
+
var isMultiline = _a.isMultiline, marker = _a.marker;
|
|
7
|
+
return (React.createElement("span", { className: cx((_b = {},
|
|
8
|
+
_b[jsStyles.marker()] = true,
|
|
9
|
+
_b[jsStyles.markerMultiline()] = isMultiline,
|
|
10
|
+
_b)) }, marker));
|
|
11
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface NestedMenuProps {
|
|
3
|
+
_generatedId?: string;
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
}
|
|
6
|
+
declare const NestedMenuWithStaticFields: React.ForwardRefExoticComponent<NestedMenuProps & React.RefAttributes<HTMLDivElement>> & {
|
|
7
|
+
__KONTUR_REACT_UI__: string;
|
|
8
|
+
};
|
|
9
|
+
export { NestedMenuWithStaticFields as NestedMenu };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { jsStyles } from '../SideMenu.styles';
|
|
3
|
+
import { isClickableSubElement } from '../../utils/scripts';
|
|
4
|
+
/**
|
|
5
|
+
* Вложенное подменю
|
|
6
|
+
*
|
|
7
|
+
* @visibleName NestedMenu
|
|
8
|
+
*/
|
|
9
|
+
var NestedMenu = forwardRef(function (_a, ref) {
|
|
10
|
+
var _generatedId = _a._generatedId, children = _a.children;
|
|
11
|
+
var levelIndex = 0;
|
|
12
|
+
return (React.createElement("div", { className: jsStyles.nestedMenu() }, React.Children.map(children, function (child) {
|
|
13
|
+
if (React.isValidElement(child) &&
|
|
14
|
+
// @ts-expect-error: accessing private property
|
|
15
|
+
isClickableSubElement(child.type.__KONTUR_REACT_UI__)) {
|
|
16
|
+
return React.cloneElement(child, {
|
|
17
|
+
_generatedId: _generatedId + "-" + levelIndex++,
|
|
18
|
+
_isNestedSubMenu: true,
|
|
19
|
+
ref: ref,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return child;
|
|
23
|
+
})));
|
|
24
|
+
});
|
|
25
|
+
NestedMenu.displayName = 'NestedMenu';
|
|
26
|
+
var NestedMenuWithStaticFields = Object.assign(NestedMenu, { __KONTUR_REACT_UI__: 'NestedMenu' });
|
|
27
|
+
export { NestedMenuWithStaticFields as NestedMenu };
|
|
File without changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { forwardRef, useContext, useEffect, useRef, useState } from 'react';
|
|
2
2
|
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
3
|
-
import { customStyles, jsStyles } from '
|
|
4
|
-
import { SideMenuContext } from '
|
|
3
|
+
import { customStyles, jsStyles } from '../SideMenu.styles';
|
|
4
|
+
import { SideMenuContext } from '../SideMenuContext';
|
|
5
5
|
/**
|
|
6
6
|
* Элемент интерактивной правой границы
|
|
7
7
|
*
|
|
File without changes
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { __assign } from "tslib";
|
|
2
2
|
import React, { forwardRef, useContext } from 'react';
|
|
3
3
|
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
4
|
-
import { jsStyles } from '
|
|
5
|
-
import { SideMenuContext } from '
|
|
4
|
+
import { jsStyles } from '../SideMenu.styles';
|
|
5
|
+
import { SideMenuContext } from '../SideMenuContext';
|
|
6
|
+
import { isClickableSubElement } from '../../utils/scripts';
|
|
6
7
|
/**
|
|
7
8
|
* Отдельностоящее подменю
|
|
8
9
|
*
|
|
@@ -14,7 +15,7 @@ var SeparatedSubMenu = forwardRef(function (_a, ref) {
|
|
|
14
15
|
var context = useContext(SideMenuContext);
|
|
15
16
|
var isSubItemWithChildren = function (child) {
|
|
16
17
|
// @ts-expect-error: accessing private property
|
|
17
|
-
return (child
|
|
18
|
+
return isClickableSubElement(child.type.__KONTUR_REACT_UI__) && child.props.children;
|
|
18
19
|
};
|
|
19
20
|
var hasSubItems = function (children) {
|
|
20
21
|
return React.Children.toArray(children).some(function (child) {
|
|
@@ -28,8 +29,9 @@ var SeparatedSubMenu = forwardRef(function (_a, ref) {
|
|
|
28
29
|
return (React.createElement("div", { className: cx((_b = {}, _b[jsStyles.root()] = true, _b[jsStyles.separatedMenu()] = true, _b)), ref: ref },
|
|
29
30
|
React.createElement(SideMenuContext.Provider, { value: __assign({ hasSubIcons: hasSubItems(children) }, context) }, React.Children.map(children, function (child) {
|
|
30
31
|
if (React.isValidElement(child)) {
|
|
32
|
+
if (
|
|
31
33
|
// @ts-expect-error: accessing private property
|
|
32
|
-
|
|
34
|
+
isClickableSubElement(child.type.__KONTUR_REACT_UI__)) {
|
|
33
35
|
var oldIndex = levelIndex;
|
|
34
36
|
levelIndex++;
|
|
35
37
|
return React.cloneElement(child, {
|