@skbkontur/side-menu 0.10.1 → 0.11.1
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 +19 -0
- package/package.json +1 -1
- package/src/SideMenu/SideMenu.js +2 -1
- package/src/SideMenuAvatar/SideMenuAvatar.js +1 -1
- package/src/SideMenuDropdown/SideMenuDropdown.d.ts +6 -1
- package/src/SideMenuDropdown/SideMenuDropdown.js +3 -2
- package/src/SideMenuDropdown/SideMenuDropdown.styles.d.ts +1 -0
- package/src/SideMenuDropdown/SideMenuDropdown.styles.js +6 -3
- package/src/internal/BackButton.js +1 -1
- package/src/internal/ClickableElement.d.ts +2 -0
- package/src/internal/ClickableElement.js +3 -3
- package/src/internal/InnerSubMenu.d.ts +1 -2
- package/src/internal/InnerSubMenu.js +1 -2
- package/src/internal/ItemContent/Caption.d.ts +1 -1
- package/src/internal/ItemContent/Caption.js +46 -6
- package/src/internal/ItemContent/Caption.styles.d.ts +2 -0
- package/src/internal/ItemContent/Caption.styles.js +7 -1
- package/src/internal/ItemContent/ItemContent.js +5 -4
- package/src/internal/ItemContent/ItemContent.styles.d.ts +1 -0
- package/src/internal/ItemContent/ItemContent.styles.js +5 -2
- package/src/internal/SeparatedSubMenu.d.ts +1 -2
- package/src/internal/SeparatedSubMenu.js +1 -2
- package/src/internal/SeparatedSubMenu.styles.js +1 -1
- package/src/internal/SubMenu.d.ts +1 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,25 @@
|
|
|
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.11.1](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@0.11.0...@skbkontur/side-menu@0.11.1) (2023-06-02)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @skbkontur/side-menu
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [0.11.0](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@0.10.1...@skbkontur/side-menu@0.11.0) (2023-05-30)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* **SideMenu:** add truncation to dropdown ([20296d4](https://git.skbkontur.ru/ui/ui-parking/commits/20296d494623e343ad4f425f6fbfa1718634fba2))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
6
25
|
## [0.10.1](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@0.10.0...@skbkontur/side-menu@0.10.1) (2023-05-30)
|
|
7
26
|
|
|
8
27
|
**Note:** Version bump only for package @skbkontur/side-menu
|
package/package.json
CHANGED
package/src/SideMenu/SideMenu.js
CHANGED
|
@@ -161,6 +161,7 @@ var SideMenuInner = forwardRef(function (_a, ref) {
|
|
|
161
161
|
}, {
|
|
162
162
|
opacity: 0,
|
|
163
163
|
}), shouldShowBackdrop = _x[0], backdropStyle = _x[1];
|
|
164
|
+
var isSideMenuOverflowing = (isTabletOrMobile && isShown) || (isNarrowDesktop && !isMinimized);
|
|
164
165
|
return (React.createElement(SideMenuContext.Provider, { value: {
|
|
165
166
|
isMinimized: isMinimized,
|
|
166
167
|
setIsMinimized: showMinimizedRoot,
|
|
@@ -188,7 +189,7 @@ var SideMenuInner = forwardRef(function (_a, ref) {
|
|
|
188
189
|
headerHeight: headerHeight,
|
|
189
190
|
setHeaderHeight: setHeaderHeight,
|
|
190
191
|
} },
|
|
191
|
-
React.createElement(ZIndex, { priority:
|
|
192
|
+
React.createElement(ZIndex, { priority: isSideMenuOverflowing ? 8 : 0, className: cx((_b = {},
|
|
192
193
|
_b[jsStyles.root()] = true,
|
|
193
194
|
_b[customStyles.rootForTabletsOrMobiles(headerHeight)] = isTabletOrMobile,
|
|
194
195
|
_b[jsStyles.shownRootForTabletsOrMobiles()] = isShown && isTabletOrMobile,
|
|
@@ -6,7 +6,7 @@ var SideMenuAvatarInner = forwardRef(function (_a, ref) {
|
|
|
6
6
|
var userName = _a.userName, avatarUrl = _a.avatarUrl, children = _a.children, icon = _a.icon, rest = __rest(_a, ["userName", "avatarUrl", "children", "icon"]);
|
|
7
7
|
return (
|
|
8
8
|
// @ts-expect-error: icon is not provided as _avatar replaces it
|
|
9
|
-
React.createElement(SideMenuDropdown, __assign({ _avatar: React.createElement(UserAvatar, { userName: userName, avatarUrl: avatarUrl }), caption: userName, menuWidth: 200, positions: ['top left'], ref: ref }, rest), children));
|
|
9
|
+
React.createElement(SideMenuDropdown, __assign({ _avatar: React.createElement(UserAvatar, { userName: userName, avatarUrl: avatarUrl }), caption: userName, menuWidth: 200, positions: ['top left'], _isAvatar: true, ref: ref }, rest), children));
|
|
10
10
|
});
|
|
11
11
|
SideMenuAvatarInner.displayName = 'SideMenuAvatar';
|
|
12
12
|
/**
|
|
@@ -2,9 +2,14 @@ import React from 'react';
|
|
|
2
2
|
import { DropdownMenuProps } from '@skbkontur/react-ui';
|
|
3
3
|
import { CommonProps } from '@skbkontur/react-ui/internal/CommonWrapper';
|
|
4
4
|
import { SideMenuItemProps } from '../SideMenuItem/SideMenuItem';
|
|
5
|
-
export interface SideMenuDropdownProps extends CommonProps, Omit<DropdownMenuProps, 'caption' | 'disableAnimations'>, Pick<SideMenuItemProps, 'icon' | 'caption' | '_avatar' | 'id' | '_generatedId' | 'subCaption'> {
|
|
5
|
+
export interface SideMenuDropdownProps extends CommonProps, Omit<DropdownMenuProps, 'caption' | 'disableAnimations'>, Pick<SideMenuItemProps, 'icon' | 'caption' | '_avatar' | 'id' | '_generatedId' | 'subCaption' | '_isAvatar'> {
|
|
6
6
|
children?: React.ReactNode;
|
|
7
7
|
disableAnimations?: boolean;
|
|
8
|
+
/** @ignore */
|
|
9
|
+
_avatar?: React.ReactElement;
|
|
10
|
+
id?: string;
|
|
11
|
+
/** @ignore */
|
|
12
|
+
_generatedId?: string;
|
|
8
13
|
}
|
|
9
14
|
/**
|
|
10
15
|
* Элемент списка с выпадающим меню
|
|
@@ -8,15 +8,16 @@ import { SideMenuContext } from '../SideMenuContext';
|
|
|
8
8
|
import { getSideMenuTheme } from '../../lib/theming/ThemeHelpers';
|
|
9
9
|
var SideMenuDropdownInner = forwardRef(function (_a, ref) {
|
|
10
10
|
var _b, _c;
|
|
11
|
-
var icon = _a.icon, id = _a.id, _generatedId = _a._generatedId, _avatar = _a._avatar, children = _a.children, _d = _a.caption, caption = _d === void 0 ? 'СКБ Контур' : _d, subCaption = _a.subCaption, className = _a.className, _e = _a.disableAnimations, disableAnimations = _e === void 0 ? false : _e, menuWidth = _a.menuWidth, rest = __rest(_a, ["icon", "id", "_generatedId", "_avatar", "children", "caption", "subCaption", "className", "disableAnimations", "menuWidth"]);
|
|
11
|
+
var icon = _a.icon, id = _a.id, _generatedId = _a._generatedId, _avatar = _a._avatar, children = _a.children, _d = _a.caption, caption = _d === void 0 ? 'СКБ Контур' : _d, subCaption = _a.subCaption, className = _a.className, _e = _a.disableAnimations, disableAnimations = _e === void 0 ? false : _e, menuWidth = _a.menuWidth, _isAvatar = _a._isAvatar, rest = __rest(_a, ["icon", "id", "_generatedId", "_avatar", "children", "caption", "subCaption", "className", "disableAnimations", "menuWidth", "_isAvatar"]);
|
|
12
12
|
var context = useContext(SideMenuContext);
|
|
13
13
|
var theme = getSideMenuTheme(useContext(ThemeContext));
|
|
14
14
|
return (React.createElement("div", { className: cx((_b = {}, _b[jsStyles.wrapper()] = true, _b), className), ref: ref },
|
|
15
15
|
React.createElement(DropdownMenu, __assign({ caption: React.createElement("div", { className: cx((_c = {},
|
|
16
16
|
_c[jsStyles.label(theme)] = true,
|
|
17
|
+
_c[jsStyles.labelForTouchScreens(theme)] = context.isTouchScreen,
|
|
17
18
|
_c[jsStyles.minimizedLabel()] = context.isMinimized,
|
|
18
19
|
_c)) },
|
|
19
|
-
React.createElement(SideMenuItem, { icon: icon, caption: caption, subCaption: subCaption, _avatar: _avatar, id: id, _isDropdown: true })), positions: ['top left'], disableAnimations: true, menuWidth: menuWidth }, rest), React.Children.map(children, function (child) {
|
|
20
|
+
React.createElement(SideMenuItem, { icon: icon, caption: caption, subCaption: subCaption, _avatar: _avatar, id: id, _isDropdown: true, _isAvatar: _isAvatar })), positions: ['top left'], disableAnimations: true, menuWidth: menuWidth }, rest), React.Children.map(children, function (child) {
|
|
20
21
|
// @ts-expect-error: accessing private property
|
|
21
22
|
if (React.isValidElement(child) && (child === null || child === void 0 ? void 0 : child.type.__KONTUR_REACT_UI__) === 'MenuItem') {
|
|
22
23
|
return React.cloneElement(child, {
|
|
@@ -6,12 +6,15 @@ var styles = {
|
|
|
6
6
|
label: function (t) {
|
|
7
7
|
return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n width: calc(", " - 2 * ", ");\n transition: width ", "ms ease-out;\n "], ["\n width: calc(", " - 2 * ", ");\n transition: width ", "ms ease-out;\n "])), t.sideMenuWidth, t.sideMenuMarginX, transitionDuration);
|
|
8
8
|
},
|
|
9
|
+
labelForTouchScreens: function (t) {
|
|
10
|
+
return css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n width: calc(", " - 2 * ", ");\n "], ["\n width: calc(", " - 2 * ", ");\n "])), t.sideMenuWidthForTouchScreens, t.sideMenuMarginX);
|
|
11
|
+
},
|
|
9
12
|
minimizedLabel: function () {
|
|
10
|
-
return css(
|
|
13
|
+
return css(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n width: 100%;\n "], ["\n width: 100%;\n "])));
|
|
11
14
|
},
|
|
12
15
|
wrapper: function () {
|
|
13
|
-
return css(
|
|
16
|
+
return css(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n overflow-x: hidden;\n "], ["\n overflow-x: hidden;\n "])));
|
|
14
17
|
},
|
|
15
18
|
};
|
|
16
19
|
export var jsStyles = memoizeStyle(styles);
|
|
17
|
-
var templateObject_1, templateObject_2, templateObject_3;
|
|
20
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
|
|
@@ -11,7 +11,7 @@ import { SideMenuContext } from '../SideMenuContext';
|
|
|
11
11
|
var BackButton = forwardRef(function (_a, ref) {
|
|
12
12
|
var caption = _a.caption, id = _a.id, href = _a.href, generatedId = _a.generatedId;
|
|
13
13
|
var context = useContext(SideMenuContext);
|
|
14
|
-
return (React.createElement(SideMenuItem, { "data-tid": SideMenuDataTids.backButton, icon: React.createElement(ArrowALeftIcon20Regular, null), caption: caption,
|
|
14
|
+
return (React.createElement(SideMenuItem, { "data-tid": SideMenuDataTids.backButton, icon: React.createElement(ArrowALeftIcon20Regular, null), caption: caption, _isSubMenu: true, onClick: function () {
|
|
15
15
|
var _a, _b, _c, _d;
|
|
16
16
|
(_a = context.setIsSeparatedMenuShown) === null || _a === void 0 ? void 0 : _a.call(context, false);
|
|
17
17
|
if (id) {
|
|
@@ -18,6 +18,8 @@ export interface CommonClickableElementProps extends CommonProps {
|
|
|
18
18
|
/** @ignore */
|
|
19
19
|
_isDropdown?: boolean;
|
|
20
20
|
/** @ignore */
|
|
21
|
+
_isAvatar?: boolean;
|
|
22
|
+
/** @ignore */
|
|
21
23
|
_isBackButton?: boolean;
|
|
22
24
|
}
|
|
23
25
|
export interface ClickableElementProps extends CommonClickableElementProps {
|
|
@@ -17,7 +17,7 @@ import { ThemeContext } from '@skbkontur/react-ui';
|
|
|
17
17
|
*/
|
|
18
18
|
var ClickableElement = forwardRef(function (_a, ref) {
|
|
19
19
|
var _b;
|
|
20
|
-
var onClick = _a.onClick, icon = _a.icon, _avatar = _a._avatar, marker = _a.marker, caption = _a.caption, subCaption = _a.subCaption, 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, _isDropdown = _a._isDropdown, _isBackButton = _a._isBackButton, rest = __rest(_a, ["onClick", "icon", "_avatar", "marker", "caption", "subCaption", "id", "_isSubMenu", "children", "_isNestedSubMenu", "_generatedId", "element", "onKeyDown", "onFocus", "onBlur", "className", "_isDropdown", "_isBackButton"]);
|
|
20
|
+
var onClick = _a.onClick, icon = _a.icon, _avatar = _a._avatar, marker = _a.marker, caption = _a.caption, subCaption = _a.subCaption, 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, _isDropdown = _a._isDropdown, _isBackButton = _a._isBackButton, _isAvatar = _a._isAvatar, rest = __rest(_a, ["onClick", "icon", "_avatar", "marker", "caption", "subCaption", "id", "_isSubMenu", "children", "_isNestedSubMenu", "_generatedId", "element", "onKeyDown", "onFocus", "onBlur", "className", "_isDropdown", "_isBackButton", "_isAvatar"]);
|
|
21
21
|
var context = useContext(SideMenuContext);
|
|
22
22
|
var theme = getSideMenuTheme(useContext(ThemeContext));
|
|
23
23
|
var isActive = useActiveState(id, rest.href, _generatedId, context.activeMenuItem);
|
|
@@ -74,7 +74,7 @@ var ClickableElement = forwardRef(function (_a, ref) {
|
|
|
74
74
|
};
|
|
75
75
|
var handleClick = function (e) {
|
|
76
76
|
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
77
|
-
var lastElementInTheHierarchy = !hasChildren(id || rest.href, _generatedId) && !_isDropdown;
|
|
77
|
+
var lastElementInTheHierarchy = !hasChildren(id || rest.href, _generatedId) && !_isDropdown && !_isBackButton;
|
|
78
78
|
switchActiveItem();
|
|
79
79
|
toggleIsShown(lastElementInTheHierarchy);
|
|
80
80
|
setIsMinimized(lastElementInTheHierarchy);
|
|
@@ -104,7 +104,7 @@ var ClickableElement = forwardRef(function (_a, ref) {
|
|
|
104
104
|
shouldHighlightTopLevelItemWhenSubItemSelectedInSeparatedMenu ||
|
|
105
105
|
shouldHighlightTopLevelItemWhenMenuIsMinimized,
|
|
106
106
|
_b[jsStyles.activeRootSubItemInSeparatedSubMenu(theme)] = isActive && context.isSeparatedMenu && _isSubMenu,
|
|
107
|
-
_b), className), onClick: handleClick, onFocus: handleFocus, onBlur: handleBlur, children: (React.createElement(ItemContent, { _isSubMenu: _isSubMenu, icon: icon, _isNestedSubMenu: _isNestedSubMenu, caption: caption, subCaption: subCaption, marker: marker, _avatar: _avatar, _isBackButton: _isBackButton })), ref: ref }, rest)),
|
|
107
|
+
_b), className), onClick: handleClick, onFocus: handleFocus, onBlur: handleBlur, children: (React.createElement(ItemContent, { _isSubMenu: _isSubMenu, icon: icon, _isNestedSubMenu: _isNestedSubMenu, caption: caption, subCaption: subCaption, marker: marker, _avatar: _avatar, _isBackButton: _isBackButton, _isDropdown: _isDropdown, _isAvatar: _isAvatar })), ref: ref }, rest)),
|
|
108
108
|
React.createElement(SubMenu, { generatedId: _generatedId, id: id, href: rest.href, caption: caption, isSubMenu: _isSubMenu, isSeparatedMenu: context.isSeparatedMenu, isOpened: isOpened, isMinimized: context.isMinimized }, children)));
|
|
109
109
|
});
|
|
110
110
|
ClickableElement.displayName = 'ClickableElement';
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { ZIndex } from '@skbkontur/react-ui/internal/ZIndex';
|
|
3
2
|
interface InnerSubMenuProps {
|
|
4
3
|
children?: React.ReactNode;
|
|
5
4
|
generatedId?: string;
|
|
6
5
|
}
|
|
7
|
-
declare const InnerSubMenuWithStaticFields: React.ForwardRefExoticComponent<InnerSubMenuProps & React.RefAttributes<
|
|
6
|
+
declare const InnerSubMenuWithStaticFields: React.ForwardRefExoticComponent<InnerSubMenuProps & React.RefAttributes<HTMLDivElement>> & {
|
|
8
7
|
__KONTUR_REACT_UI__: string;
|
|
9
8
|
};
|
|
10
9
|
export { InnerSubMenuWithStaticFields as InnerSubMenu };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React, { forwardRef } from 'react';
|
|
2
2
|
import { isClickableSubElement } from '../../lib/utils/scripts';
|
|
3
|
-
import { ZIndex } from '@skbkontur/react-ui/internal/ZIndex';
|
|
4
3
|
/**
|
|
5
4
|
* Подменю, раскрывающееся внутри основного меню
|
|
6
5
|
*
|
|
@@ -9,7 +8,7 @@ import { ZIndex } from '@skbkontur/react-ui/internal/ZIndex';
|
|
|
9
8
|
var InnerSubMenu = forwardRef(function (_a, ref) {
|
|
10
9
|
var children = _a.children, generatedId = _a.generatedId;
|
|
11
10
|
var levelIndex = 0;
|
|
12
|
-
return (React.createElement(
|
|
11
|
+
return (React.createElement("div", { ref: ref }, React.Children.map(children, function (child) {
|
|
13
12
|
if (React.isValidElement(child)) {
|
|
14
13
|
if (
|
|
15
14
|
// @ts-expect-error: accessing private property
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { SideMenuItemProps } from '../../SideMenuItem/SideMenuItem';
|
|
3
|
-
interface CaptionProps extends Pick<SideMenuItemProps, '_isSubMenu' | '_isNestedSubMenu' | 'caption' | '_isBackButton' | 'subCaption'> {
|
|
3
|
+
interface CaptionProps extends Pick<SideMenuItemProps, '_isSubMenu' | '_isNestedSubMenu' | 'caption' | '_isBackButton' | '_isDropdown' | '_isAvatar' | 'subCaption'> {
|
|
4
4
|
hasShortcutImage: boolean;
|
|
5
5
|
isMultiline: boolean;
|
|
6
6
|
}
|
|
@@ -1,22 +1,60 @@
|
|
|
1
1
|
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
2
2
|
import { ThemeContext } from '@skbkontur/react-ui/lib/theming/ThemeContext';
|
|
3
3
|
import { jsStyles } from './Caption.styles';
|
|
4
|
-
import React, { forwardRef, useContext } from 'react';
|
|
4
|
+
import React, { forwardRef, useContext, useEffect, useRef, useState } from 'react';
|
|
5
5
|
import { SideMenuContext } from '../../SideMenuContext';
|
|
6
|
+
import { mergeRefs } from '@skbkontur/react-ui/lib/utils';
|
|
6
7
|
import { getSideMenuTheme } from '../../../lib/theming/ThemeHelpers';
|
|
8
|
+
var getTruncatedUserName = function (caption, visibleWidth, fullWidth) {
|
|
9
|
+
var _a = caption.split(' '), firstName = _a[0], lastName = _a[1];
|
|
10
|
+
if (visibleWidth < fullWidth && lastName) {
|
|
11
|
+
return firstName + " " + lastName[0] + ".";
|
|
12
|
+
}
|
|
13
|
+
return caption;
|
|
14
|
+
};
|
|
15
|
+
var getCaptionTail = function (caption, visibleWidth, fullWidth) {
|
|
16
|
+
if (visibleWidth < fullWidth) {
|
|
17
|
+
var symbolsCount = caption.length;
|
|
18
|
+
var symbolLength = fullWidth / symbolsCount;
|
|
19
|
+
var halfVisibleSymbols = visibleWidth / symbolLength / 2;
|
|
20
|
+
return caption.slice(symbolsCount - halfVisibleSymbols);
|
|
21
|
+
}
|
|
22
|
+
return '';
|
|
23
|
+
};
|
|
7
24
|
export var Caption = forwardRef(function (_a, ref) {
|
|
8
25
|
var _b, _c;
|
|
9
|
-
var _isSubMenu = _a._isSubMenu, _isNestedSubMenu = _a._isNestedSubMenu, hasShortcutImage = _a.hasShortcutImage, caption = _a.caption, subCaption = _a.subCaption, isMultiline = _a.isMultiline, _isBackButton = _a._isBackButton;
|
|
10
|
-
var context = useContext(SideMenuContext);
|
|
26
|
+
var _isSubMenu = _a._isSubMenu, _isNestedSubMenu = _a._isNestedSubMenu, hasShortcutImage = _a.hasShortcutImage, caption = _a.caption, subCaption = _a.subCaption, isMultiline = _a.isMultiline, _isBackButton = _a._isBackButton, _isDropdown = _a._isDropdown, _isAvatar = _a._isAvatar;
|
|
11
27
|
var theme = getSideMenuTheme(useContext(ThemeContext));
|
|
12
|
-
var isBeingTransitioned =
|
|
28
|
+
var _d = useContext(SideMenuContext), isBeingTransitioned = _d.isBeingTransitioned, isSeparatedMenu = _d.isSeparatedMenu, size = _d.size, isTouchScreen = _d.isTouchScreen, hasSubIcons = _d.hasSubIcons, isTablet = _d.isTablet, isMobile = _d.isMobile;
|
|
29
|
+
var captionRef = useRef(null);
|
|
30
|
+
var _e = useState(''), tail = _e[0], setTail = _e[1];
|
|
31
|
+
var _f = useState(caption), truncatedUserName = _f[0], setTruncatedUserName = _f[1];
|
|
32
|
+
useEffect(function () {
|
|
33
|
+
if (!_isDropdown || !captionRef.current || !caption) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
var fullWidth = captionRef.current.scrollWidth;
|
|
37
|
+
var visibleWidth = captionRef.current.offsetWidth;
|
|
38
|
+
if (_isAvatar) {
|
|
39
|
+
setTruncatedUserName(getTruncatedUserName(caption, visibleWidth, fullWidth));
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
setTail(getCaptionTail(caption, visibleWidth, fullWidth));
|
|
43
|
+
}
|
|
44
|
+
}, [isBeingTransitioned]);
|
|
45
|
+
var isAvatarCaptionSingleWord = function (userName, _isAvatar) {
|
|
46
|
+
if (userName === void 0) { userName = ''; }
|
|
47
|
+
return _isAvatar && userName.split(' ').length === 1;
|
|
48
|
+
};
|
|
13
49
|
return (React.createElement("div", { className: cx((_b = {},
|
|
14
50
|
_b[jsStyles.root()] = true,
|
|
15
|
-
_b[jsStyles.rootBeingTransitioned()] = isBeingTransitioned && !_isSubMenu && !(
|
|
51
|
+
_b[jsStyles.rootBeingTransitioned()] = isBeingTransitioned && !_isSubMenu && !(isTablet || isMobile),
|
|
16
52
|
_b[jsStyles.rootMultiline()] = isMultiline && !_isSubMenu,
|
|
17
53
|
_b)), ref: ref },
|
|
18
54
|
React.createElement("p", { className: cx((_c = {},
|
|
19
55
|
_c[jsStyles.caption(theme)] = true,
|
|
56
|
+
_c[jsStyles.captionDropdown()] = _isDropdown,
|
|
57
|
+
_c[jsStyles.captionTruncated()] = _isDropdown && (!_isAvatar || isAvatarCaptionSingleWord(caption, _isAvatar)),
|
|
20
58
|
_c[jsStyles.captionSubItem(theme)] = _isSubMenu,
|
|
21
59
|
_c[jsStyles.captionSubItemSeparatedMenuTopLevel()] = isSeparatedMenu && !_isNestedSubMenu && _isSubMenu,
|
|
22
60
|
_c[jsStyles.captionNestedItemSeparatedMenu()] = isSeparatedMenu && _isNestedSubMenu && !hasShortcutImage,
|
|
@@ -26,7 +64,9 @@ export var Caption = forwardRef(function (_a, ref) {
|
|
|
26
64
|
_c[jsStyles.captionForTouchScreens(theme)] = isTouchScreen,
|
|
27
65
|
_c[jsStyles.captionSubItemForTouchScreens(theme)] = isTouchScreen && _isSubMenu,
|
|
28
66
|
_c[jsStyles.captionInBackButton(theme)] = _isBackButton,
|
|
29
|
-
_c)), ref: ref
|
|
67
|
+
_c)), ref: mergeRefs([ref, captionRef]), "data-tail": tail },
|
|
68
|
+
!_isAvatar && caption,
|
|
69
|
+
_isAvatar && truncatedUserName),
|
|
30
70
|
subCaption));
|
|
31
71
|
});
|
|
32
72
|
Caption.displayName = 'Caption';
|
|
@@ -43,6 +43,12 @@ var styles = {
|
|
|
43
43
|
captionInBackButton: function (t) {
|
|
44
44
|
return css(templateObject_13 || (templateObject_13 = __makeTemplateObject(["\n font-weight: ", ";\n font-size: ", ";\n line-height: ", ";\n padding-top: ", ";\n padding-bottom: ", ";\n "], ["\n font-weight: ", ";\n font-size: ", ";\n line-height: ", ";\n padding-top: ", ";\n padding-bottom: ", ";\n "])), t.sideMenuBackButtonCaptionFontWeight, t.sideMenuBackButtonCaptionFontSize, t.sideMenuBackButtonCaptionLineHeight, t.sideMenuBackButtonCaptionPaddingY, t.sideMenuBackButtonCaptionPaddingY);
|
|
45
45
|
},
|
|
46
|
+
captionDropdown: function () {
|
|
47
|
+
return css(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n white-space: nowrap;\n overflow: hidden;\n "], ["\n white-space: nowrap;\n overflow: hidden;\n "])));
|
|
48
|
+
},
|
|
49
|
+
captionTruncated: function () {
|
|
50
|
+
return css(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n text-overflow: ellipsis;\n &::before {\n float: right;\n content: attr(data-tail);\n }\n "], ["\n text-overflow: ellipsis;\n &::before {\n float: right;\n content: attr(data-tail);\n }\n "])));
|
|
51
|
+
},
|
|
46
52
|
};
|
|
47
53
|
export var jsStyles = memoizeStyle(styles);
|
|
48
|
-
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12, templateObject_13;
|
|
54
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12, templateObject_13, templateObject_14, templateObject_15;
|
|
@@ -20,7 +20,7 @@ var getItemContentHeight = function (theme, linesNumber, size) {
|
|
|
20
20
|
*/
|
|
21
21
|
var ItemContent = forwardRef(function (_a, ref) {
|
|
22
22
|
var _b, _c;
|
|
23
|
-
var _isSubMenu = _a._isSubMenu, icon = _a.icon, _isNestedSubMenu = _a._isNestedSubMenu, caption = _a.caption, subCaption = _a.subCaption, marker = _a.marker, _avatar = _a._avatar, _isBackButton = _a._isBackButton;
|
|
23
|
+
var _isSubMenu = _a._isSubMenu, icon = _a.icon, _isNestedSubMenu = _a._isNestedSubMenu, caption = _a.caption, subCaption = _a.subCaption, marker = _a.marker, _avatar = _a._avatar, _isBackButton = _a._isBackButton, _isDropdown = _a._isDropdown, _isAvatar = _a._isAvatar;
|
|
24
24
|
var context = useContext(SideMenuContext);
|
|
25
25
|
var size = context.size, isTouchScreen = context.isTouchScreen;
|
|
26
26
|
var textRef = useRef(null);
|
|
@@ -29,7 +29,7 @@ var ItemContent = forwardRef(function (_a, ref) {
|
|
|
29
29
|
var isMultiline = (!_isSubMenu && linesNumber > 1) || (!!_isSubMenu && isMultilineSubItem) || !!subCaption;
|
|
30
30
|
var theme = getSideMenuTheme(useContext(ThemeContext));
|
|
31
31
|
useEffect(function () {
|
|
32
|
-
if (!_isBackButton && !_isSubMenu) {
|
|
32
|
+
if (!_isBackButton && !_isSubMenu && !_isDropdown) {
|
|
33
33
|
useNumberOfTextLinesInItem({
|
|
34
34
|
textRef: textRef,
|
|
35
35
|
setLinesNumber: setLinesNumber,
|
|
@@ -45,7 +45,7 @@ var ItemContent = forwardRef(function (_a, ref) {
|
|
|
45
45
|
}
|
|
46
46
|
}, []);
|
|
47
47
|
useEffect(function () {
|
|
48
|
-
if (!_isBackButton) {
|
|
48
|
+
if (!_isBackButton && !_isDropdown) {
|
|
49
49
|
useNumberOfTextLinesInItem({
|
|
50
50
|
textRef: textRef,
|
|
51
51
|
setLinesNumber: setLinesNumber,
|
|
@@ -72,9 +72,10 @@ var ItemContent = forwardRef(function (_a, ref) {
|
|
|
72
72
|
_avatar && React.createElement(Avatar, { _avatar: _avatar }),
|
|
73
73
|
(!context.isMinimized || (context.isMinimized && _isSubMenu)) && (React.createElement("div", { className: cx((_c = {},
|
|
74
74
|
_c[jsStyles.textAndMarkerWrapper()] = true,
|
|
75
|
+
_c[jsStyles.textAndMarkerWrapperDropdown()] = _isDropdown,
|
|
75
76
|
_c[customStyles.textAndMarkerWrapperMultiline(getItemContentHeight(theme, linesNumber, size))] = isMultiline && !_isSubMenu,
|
|
76
77
|
_c)) },
|
|
77
|
-
React.createElement(Caption, { _isSubMenu: _isSubMenu, _isNestedSubMenu: _isNestedSubMenu, hasShortcutImage: hasShortcutImage, isMultiline: isMultiline, caption: caption, subCaption: subCaption, _isBackButton: _isBackButton, ref: textRef }),
|
|
78
|
+
React.createElement(Caption, { _isSubMenu: _isSubMenu, _isNestedSubMenu: _isNestedSubMenu, hasShortcutImage: hasShortcutImage, isMultiline: isMultiline, caption: caption, subCaption: subCaption, _isBackButton: _isBackButton, _isDropdown: _isDropdown, _isAvatar: _isAvatar, ref: textRef }),
|
|
78
79
|
marker && (!context.isMinimized || isSeparatedSubMenuInNarrowDesktopWithoutOverlay) && (React.createElement(Marker, { isMultiline: isMultiline, marker: marker }))))));
|
|
79
80
|
});
|
|
80
81
|
ItemContent.displayName = 'ItemContent';
|
|
@@ -26,11 +26,14 @@ var styles = {
|
|
|
26
26
|
textAndMarkerWrapper: function () {
|
|
27
27
|
return css(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n display: flex;\n flex-grow: 1;\n align-items: center;\n min-width: 0;\n "], ["\n display: flex;\n flex-grow: 1;\n align-items: center;\n min-width: 0;\n "])));
|
|
28
28
|
},
|
|
29
|
+
textAndMarkerWrapperDropdown: function () {
|
|
30
|
+
return css(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n overflow: hidden;\n "], ["\n overflow: hidden;\n "])));
|
|
31
|
+
},
|
|
29
32
|
};
|
|
30
33
|
export var customStyles = {
|
|
31
34
|
textAndMarkerWrapperMultiline: function (height) {
|
|
32
|
-
return css(
|
|
35
|
+
return css(templateObject_10 || (templateObject_10 = __makeTemplateObject(["\n min-height: ", "px;\n "], ["\n min-height: ", "px;\n "])), height);
|
|
33
36
|
},
|
|
34
37
|
};
|
|
35
38
|
export var jsStyles = memoizeStyle(styles);
|
|
36
|
-
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9;
|
|
39
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { ZIndex } from '@skbkontur/react-ui/internal/ZIndex';
|
|
3
2
|
interface SeparatedSubMenuProps {
|
|
4
3
|
children?: React.ReactNode;
|
|
5
4
|
generatedId?: string;
|
|
@@ -7,7 +6,7 @@ interface SeparatedSubMenuProps {
|
|
|
7
6
|
href?: string;
|
|
8
7
|
caption?: string;
|
|
9
8
|
}
|
|
10
|
-
declare const SeparatedSubMenuWithStaticFields: React.ForwardRefExoticComponent<SeparatedSubMenuProps & React.RefAttributes<
|
|
9
|
+
declare const SeparatedSubMenuWithStaticFields: React.ForwardRefExoticComponent<SeparatedSubMenuProps & React.RefAttributes<HTMLDivElement>> & {
|
|
11
10
|
__KONTUR_REACT_UI__: string;
|
|
12
11
|
};
|
|
13
12
|
export { SeparatedSubMenuWithStaticFields as SeparatedSubMenu };
|
|
@@ -11,7 +11,6 @@ import { SideMenuDataTids } from '../../SideMenuDataTids';
|
|
|
11
11
|
import { ScrollContainer } from '@skbkontur/react-ui';
|
|
12
12
|
import { getSideMenuTheme } from '../../lib/theming/ThemeHelpers';
|
|
13
13
|
import { isIE11 } from '@skbkontur/react-ui/lib/client';
|
|
14
|
-
import { ZIndex } from '@skbkontur/react-ui/internal/ZIndex';
|
|
15
14
|
/**
|
|
16
15
|
* Отдельностоящее подменю
|
|
17
16
|
*
|
|
@@ -37,7 +36,7 @@ var SeparatedSubMenu = forwardRef(function (_a, ref) {
|
|
|
37
36
|
var levelIndex = 0;
|
|
38
37
|
var isDesktopOverlayMenu = (context.isDesktop || context.isNarrowDesktop) && !context.separatedMenuWithoutOverlay;
|
|
39
38
|
var isSeparatedSubMenuOverContent = (context.isTablet || isDesktopOverlayMenu) && !isIE11;
|
|
40
|
-
return (React.createElement(
|
|
39
|
+
return (React.createElement("div", { className: cx((_b = {},
|
|
41
40
|
_b[jsStyles.container(theme)] = true,
|
|
42
41
|
_b[jsStyles.containerForTouchScreens(theme)] = context.isTouchScreen,
|
|
43
42
|
_b[jsStylesForSeparatedSubMenu.root(theme)] = true,
|
|
@@ -3,7 +3,7 @@ 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 position: absolute;\n top: 0;\n background: ", ";\n left: 100%;\n justify-content: flex-start;\n border-right: 1px solid ", ";\n "], ["\n position: absolute;\n top: 0;\n background: ", ";\n left: 100%;\n justify-content: flex-start;\n border-right: 1px solid ", ";\n "])), t.sideMenuSeparatedSubMenuBgColor, t.sideMenuSeparatedSubMenuBorderRightColor);
|
|
6
|
+
return css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n position: absolute;\n top: 0;\n background: ", ";\n left: 100%;\n justify-content: flex-start;\n border-right: 1px solid ", ";\n z-index: 8000;\n "], ["\n position: absolute;\n top: 0;\n background: ", ";\n left: 100%;\n justify-content: flex-start;\n border-right: 1px solid ", ";\n z-index: 8000;\n "])), t.sideMenuSeparatedSubMenuBgColor, t.sideMenuSeparatedSubMenuBorderRightColor);
|
|
7
7
|
},
|
|
8
8
|
rootWithoutOverlayForNarrowDesktop: function (t) {
|
|
9
9
|
return css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n left: ", ";\n z-index: -1;\n "], ["\n left: ", ";\n z-index: -1;\n "])), t.sideMenuMinimizedWidth);
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { ZIndex } from '@skbkontur/react-ui/internal/ZIndex';
|
|
3
2
|
interface SubMenuProps {
|
|
4
3
|
children?: React.ReactNode;
|
|
5
4
|
generatedId?: string;
|
|
@@ -11,7 +10,7 @@ interface SubMenuProps {
|
|
|
11
10
|
href?: string;
|
|
12
11
|
caption?: string;
|
|
13
12
|
}
|
|
14
|
-
declare const SubMenuWithStaticFields: React.ForwardRefExoticComponent<SubMenuProps & React.RefAttributes<
|
|
13
|
+
declare const SubMenuWithStaticFields: React.ForwardRefExoticComponent<SubMenuProps & React.RefAttributes<HTMLDivElement>> & {
|
|
15
14
|
__KONTUR_REACT_UI__: string;
|
|
16
15
|
};
|
|
17
16
|
export { SubMenuWithStaticFields as SubMenu };
|