@gravity-ui/navigation 0.14.0 → 0.15.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/build/cjs/components/AsideHeader/AsideHeader.d.ts +2 -2
- package/build/cjs/components/AsideHeader/__stories__/moc.d.ts +2 -0
- package/build/cjs/components/CompositeBar/CompositeBar.d.ts +10 -6
- package/build/cjs/components/CompositeBar/utils.d.ts +4 -2
- package/build/cjs/components/types.d.ts +2 -0
- package/build/cjs/index.js +22 -10
- package/build/cjs/index.js.map +1 -1
- package/build/esm/components/AsideHeader/AsideHeader.d.ts +2 -2
- package/build/esm/components/AsideHeader/__stories__/moc.d.ts +2 -0
- package/build/esm/components/CompositeBar/CompositeBar.d.ts +10 -6
- package/build/esm/components/CompositeBar/utils.d.ts +4 -2
- package/build/esm/components/types.d.ts +2 -0
- package/build/esm/index.js +22 -10
- package/build/esm/index.js.map +1 -1
- package/package.json +1 -1
- package/build/cjs/components/CompositeBar/__stories__/CompositeBar.stories.d.ts +0 -5
- package/build/cjs/components/CompositeBar/__stories__/moc.d.ts +0 -2
- package/build/esm/components/CompositeBar/__stories__/CompositeBar.stories.d.ts +0 -5
- package/build/esm/components/CompositeBar/__stories__/moc.d.ts +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { MenuItem, AsideHeaderDict, LogoProps } from '../types';
|
|
2
|
+
import { MenuItem, AsideHeaderDict, LogoProps, SubheaderMenuItem } from '../types';
|
|
3
3
|
import { DrawerItemProps } from '../Drawer/Drawer';
|
|
4
4
|
import { RenderContentType } from '../Content';
|
|
5
5
|
import './AsideHeader.scss';
|
|
@@ -20,7 +20,7 @@ interface AsideHeaderGeneralProps {
|
|
|
20
20
|
}
|
|
21
21
|
interface AsideHeaderDefaultProps {
|
|
22
22
|
panelItems: DrawerItemProps[];
|
|
23
|
-
subheaderItems:
|
|
23
|
+
subheaderItems: SubheaderMenuItem[];
|
|
24
24
|
menuItems: MenuItem[];
|
|
25
25
|
headerDecoration: boolean;
|
|
26
26
|
}
|
|
@@ -1 +1,3 @@
|
|
|
1
|
+
import { MenuItem } from 'src/components/types';
|
|
2
|
+
export declare const menuItemsShowcase: MenuItem[];
|
|
1
3
|
export declare const text = "\nDid you attend? He sang by grove ripe -\nThe bard of love, the singer of his mourning.\nWhen fields were silent by the early morning,\nTo sad and simple sounds of a pipe\nDid you attend?\n\nDid you behold in dark of forest leaf\nThe bard of love, the singer of his sadness?\nThe trace of tears, the smile, the utter paleness,\nThe quiet look, full of eternal grief,\nDid you behold?\n\nThen did you sigh when hearing how cries\nThe bard of love, the singer of his dole?\nWhen in the woods you saw the young man, sole,\nAnd met the look of his extinguished eyes,\nThen did you sigh?\n";
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import React, { FC } from 'react';
|
|
2
|
-
import { AsideHeaderDict, MenuItem } from '../types';
|
|
2
|
+
import { AsideHeaderDict, MenuItem, SubheaderMenuItem } from '../types';
|
|
3
3
|
import './CompositeBar.scss';
|
|
4
|
-
|
|
4
|
+
export type CompositeBarItem = MenuItem | SubheaderMenuItem;
|
|
5
|
+
type CompositeBarItems = {
|
|
6
|
+
type: 'menu';
|
|
5
7
|
items: MenuItem[];
|
|
8
|
+
} | {
|
|
9
|
+
type: 'subheader';
|
|
10
|
+
items: SubheaderMenuItem[];
|
|
11
|
+
};
|
|
12
|
+
export type CompositeBarProps = CompositeBarItems & {
|
|
6
13
|
onItemClick?: (item: MenuItem, collapsed: boolean, event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;
|
|
7
14
|
multipleTooltip?: boolean;
|
|
8
|
-
}
|
|
9
|
-
export interface CompositeBarProps extends CompositeBarBaseProps {
|
|
10
|
-
enableCollapsing: boolean;
|
|
11
15
|
dict?: AsideHeaderDict;
|
|
12
|
-
}
|
|
16
|
+
};
|
|
13
17
|
export declare const CompositeBar: FC<CompositeBarProps>;
|
|
14
18
|
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AsideHeaderDict, MenuItem } from './../types';
|
|
2
|
-
|
|
3
|
-
export declare function
|
|
2
|
+
import { CompositeBarItem } from '../CompositeBar/CompositeBar';
|
|
3
|
+
export declare function getItemHeight(item: CompositeBarItem): 40 | 15 | 50;
|
|
4
|
+
export declare function getItemsHeight<T extends CompositeBarItem>(items: T[]): number;
|
|
4
5
|
export declare function getSelectedItemIndex(items: MenuItem[]): number | undefined;
|
|
5
6
|
export declare function getPinnedItems(items: MenuItem[]): MenuItem[];
|
|
6
7
|
export declare function getItemsMinHeight(items: MenuItem[]): number;
|
|
@@ -9,3 +10,4 @@ export declare function getAutosizeListItems(items: MenuItem[], height: number,
|
|
|
9
10
|
listItems: MenuItem[];
|
|
10
11
|
collapseItems: MenuItem[];
|
|
11
12
|
};
|
|
13
|
+
export declare function isMenuItem(item: CompositeBarItem): item is MenuItem;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { IconProps } from '@gravity-ui/uikit';
|
|
3
|
+
import { ItemProps } from 'src/components/CompositeBar/Item/Item';
|
|
3
4
|
export type MenuItemType = 'regular' | 'action' | 'divider';
|
|
4
5
|
export interface MakeItemParams {
|
|
5
6
|
icon?: React.ReactNode;
|
|
@@ -26,6 +27,7 @@ export interface MenuItem {
|
|
|
26
27
|
type?: MenuItemType;
|
|
27
28
|
afterMoreButton?: boolean;
|
|
28
29
|
}
|
|
30
|
+
export type SubheaderMenuItem = Omit<ItemProps, 'onItemClick' | 'onItemClickCapture'>;
|
|
29
31
|
export declare enum MobileHeaderDict {
|
|
30
32
|
CloseBurger = "button_close-burger",
|
|
31
33
|
OpenBurger = "button_open-burger"
|
package/build/cjs/index.js
CHANGED
|
@@ -3635,6 +3635,9 @@ const POPUP_PLACEMENT = ['right-start', 'right-end', 'right'];
|
|
|
3635
3635
|
const POPUP_ITEM_HEIGHT = 28;
|
|
3636
3636
|
|
|
3637
3637
|
function getItemHeight$1(item) {
|
|
3638
|
+
if (!isMenuItem(item)) {
|
|
3639
|
+
return ITEM_HEIGHT;
|
|
3640
|
+
}
|
|
3638
3641
|
switch (item.type) {
|
|
3639
3642
|
case 'action':
|
|
3640
3643
|
return 50;
|
|
@@ -3721,6 +3724,9 @@ function getAutosizeListItems(items, height, collapseItem) {
|
|
|
3721
3724
|
}
|
|
3722
3725
|
return { listItems, collapseItems };
|
|
3723
3726
|
}
|
|
3727
|
+
function isMenuItem(item) {
|
|
3728
|
+
return (item === null || item === void 0 ? void 0 : item.id) !== undefined;
|
|
3729
|
+
}
|
|
3724
3730
|
|
|
3725
3731
|
var css_248z$k = ".gn-composite-bar-item {\n --composite-bar-item-action-size: 36px;\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n cursor: pointer;\n}\n.gn-composite-bar-item__icon {\n color: var(--g-color-text-misc);\n}\n.gn-composite-bar-item__icon-place {\n flex-shrink: 0;\n width: var(--aside-header-min-width);\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n}\n.gn-composite-bar-item__title {\n display: flex;\n overflow: hidden;\n}\n.gn-composite-bar-item__title-text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.gn-composite-bar-item__title-adornment {\n margin: 0 10px;\n}\n.gn-composite-bar-item__collapse-item {\n display: flex;\n padding: 0 16px;\n align-items: center;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n.gn-composite-bar-item__collapse-item .gn-composite-bar-item__title-adornment {\n margin-right: 0;\n}\n.gn-composite-bar-item__menu-divider {\n margin: 0 8px;\n width: 100%;\n border-top: 1px solid var(--g-color-line-generic);\n cursor: default;\n}\n.gn-composite-bar-item__collapse-items-popup-content {\n padding: 4px 0;\n}\n.gn-composite-bar-item__link {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n}\n.gn-composite-bar-item__link, .gn-composite-bar-item__link:hover, .gn-composite-bar-item__link:active, .gn-composite-bar-item__link:visited, .gn-composite-bar-item__link:focus {\n text-decoration: none;\n outline: none;\n color: inherit;\n}\n.gn-composite-bar-item__btn-icon {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.gn-composite-bar-item_type_action {\n justify-content: center;\n height: var(--composite-bar-item-action-size);\n margin: 0 10px 8px;\n background: var(--g-color-base-float);\n box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.03), 0px 5px 6px rgba(0, 0, 0, 0.12);\n border-radius: var(--composite-bar-item-action-size);\n transition: transform 0.1s ease-out, background-color 0.15s linear;\n}\n.gn-composite-bar-item_type_action:focus {\n box-shadow: 0 0 0 2px var(--g-color-line-misc);\n}\n.gn-composite-bar-item_type_action:focus:not(:focus-visible) {\n box-shadow: none;\n}\n.gn-composite-bar-item_type_action:hover {\n background-color: var(--g-color-base-float-hover);\n}\n.gn-composite-bar-item_type_action:active {\n box-shadow: 0 1px 2px var(--g-color-sfx-shadow);\n transition: none;\n transform: scale(0.96);\n}\n.gn-composite-bar-item_type_action .gn-composite-bar-item__icon-place {\n width: var(--composite-bar-item-action-size);\n}\n.gn-composite-bar-item_type_action .gn-composite-bar-item__title {\n margin-right: 16px;\n}\n.gn-composite-bar-item__icon-tooltip_item-type_action {\n margin-left: 10px;\n}\n.gn-composite-bar-item:not(.gn-composite-bar-item_compact).gn-composite-bar-item_current.gn-composite-bar-item_type_regular {\n background-color: var(--g-color-base-selection);\n}\n.gn-composite-bar-item:not(.gn-composite-bar-item_compact):not(.gn-composite-bar-item_current):hover.gn-composite-bar-item_type_regular {\n background-color: var(--g-color-base-simple-hover);\n}\n.gn-composite-bar-item_compact.gn-composite-bar-item_type_action {\n width: var(--composite-bar-item-action-size);\n}\n.gn-composite-bar-item_compact.gn-composite-bar-item_type_action .gn-composite-bar-item__title {\n margin: 0;\n}\n.gn-composite-bar-item_compact.gn-composite-bar-item_current.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon {\n position: relative;\n background-color: transparent;\n}\n.gn-composite-bar-item_compact.gn-composite-bar-item_current.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: -1;\n width: 38px;\n height: 38px;\n margin-top: -19px;\n margin-left: -19px;\n border-radius: 7px;\n}\n.gn-composite-bar-item_compact.gn-composite-bar-item_current.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon::before {\n background-color: var(--g-color-base-selection);\n}\n.gn-composite-bar-item_compact:not(.gn-composite-bar-item_current):hover.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon {\n position: relative;\n background-color: transparent;\n}\n.gn-composite-bar-item_compact:not(.gn-composite-bar-item_current):hover.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: -1;\n width: 38px;\n height: 38px;\n margin-top: -19px;\n margin-left: -19px;\n border-radius: 7px;\n}\n.gn-composite-bar-item_compact:not(.gn-composite-bar-item_current):hover.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon::before {\n background-color: var(--g-color-base-simple-hover);\n}";
|
|
3726
3732
|
styleInject(css_248z$k);
|
|
@@ -3783,7 +3789,7 @@ const Item$1 = (props) => {
|
|
|
3783
3789
|
onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave();
|
|
3784
3790
|
}
|
|
3785
3791
|
} },
|
|
3786
|
-
React__default["default"].createElement("div", { className: b$l('icon-place') }, compact ? (React__default["default"].createElement(uikit.Tooltip, { content: tooltipText, disabled: !enableTooltip || (collapsedItem && open), placement: "right", className: b$l('icon-tooltip', { 'item-type': type }) },
|
|
3792
|
+
React__default["default"].createElement("div", { className: b$l('icon-place') }, compact ? (React__default["default"].createElement(uikit.Tooltip, { content: tooltipText, disabled: !enableTooltip || (collapsedItem && open) || popupVisible, placement: "right", className: b$l('icon-tooltip', { 'item-type': type }) },
|
|
3787
3793
|
React__default["default"].createElement("div", { onMouseEnter: () => onMouseEnter === null || onMouseEnter === void 0 ? void 0 : onMouseEnter(), onMouseLeave: () => onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave(), className: b$l('btn-icon') }, iconEl))) : (iconEl)),
|
|
3788
3794
|
React__default["default"].createElement("div", { className: b$l('title'), title: typeof item.title === 'string' ? item.title : undefined }, titleEl),
|
|
3789
3795
|
renderPopupContent && Boolean(anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) && (React__default["default"].createElement(uikit.Popup, { contentClassName: b$l('popup'), open: popupVisible, keepMounted: popupKeepMounted, placement: popupPlacement, offset: popupOffset, anchorRef: anchorRef, onClose: onClose }, renderPopupContent()))));
|
|
@@ -3884,7 +3890,7 @@ var css_248z$i = ".gn-composite-bar {\n flex: 1 0 auto;\n width: 100%;\n min-
|
|
|
3884
3890
|
styleInject(css_248z$i);
|
|
3885
3891
|
|
|
3886
3892
|
const b$j = block('composite-bar');
|
|
3887
|
-
const CompositeBarView = ({ items, onItemClick, collapseItems, multipleTooltip =
|
|
3893
|
+
const CompositeBarView = ({ type, items, onItemClick, collapseItems, multipleTooltip = false, }) => {
|
|
3888
3894
|
const ref = React.useRef(null);
|
|
3889
3895
|
const tooltipRef = React.useRef(null);
|
|
3890
3896
|
const { setValue: setMultipleTooltipContextValue, active: multipleTooltipActive, activeIndex, lastClickedItemIndex, } = React.useContext(MultipleTooltipContext);
|
|
@@ -3949,26 +3955,32 @@ const CompositeBarView = ({ items, onItemClick, collapseItems, multipleTooltip =
|
|
|
3949
3955
|
}, [lastClickedItemIndex, setMultipleTooltipContextValue]);
|
|
3950
3956
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
3951
3957
|
React__default["default"].createElement("div", { ref: tooltipRef, onMouseEnter: onTooltipMouseEnter, onMouseLeave: onTooltipMouseLeave },
|
|
3952
|
-
React__default["default"].createElement(uikit.List, { ref: ref, items: items, selectedItemIndex: getSelectedItemIndex$1(items), itemHeight: getItemHeight$1, itemClassName: b$j('root-menu-item'),
|
|
3953
|
-
|
|
3958
|
+
React__default["default"].createElement(uikit.List, { ref: ref, items: items, selectedItemIndex: type === 'menu' ? getSelectedItemIndex$1(items) : undefined, itemHeight: getItemHeight$1, itemsHeight: getItemsHeight, itemClassName: b$j('root-menu-item'), virtualized: false, filterable: false, sortable: false, renderItem: (item, _isItemActive, itemIndex) => {
|
|
3959
|
+
const itemExtraProps = isMenuItem(item) ? { item } : item;
|
|
3960
|
+
const enableTooltip = isMenuItem(item)
|
|
3961
|
+
? !multipleTooltip
|
|
3962
|
+
: item.enableTooltip;
|
|
3963
|
+
return (React__default["default"].createElement(Item$1, Object.assign({}, itemExtraProps, { enableTooltip: enableTooltip, onMouseEnter: onMouseEnterByIndex(itemIndex), onMouseLeave: onMouseLeave, onItemClick: onItemClickByIndex(itemIndex), collapseItems: collapseItems })));
|
|
3964
|
+
} })),
|
|
3965
|
+
type === 'menu' && (React__default["default"].createElement(MultipleTooltip, { open: compact && multipleTooltip && multipleTooltipActive, anchorRef: tooltipRef, placement: ['right-start'], items: items }))));
|
|
3954
3966
|
};
|
|
3955
|
-
const CompositeBar = ({
|
|
3967
|
+
const CompositeBar = ({ type, items, dict, onItemClick, multipleTooltip = false, }) => {
|
|
3956
3968
|
if (items.length === 0) {
|
|
3957
3969
|
return null;
|
|
3958
3970
|
}
|
|
3959
3971
|
let node;
|
|
3960
|
-
if (
|
|
3972
|
+
if (type === 'menu') {
|
|
3961
3973
|
const minHeight = getItemsMinHeight(items);
|
|
3962
3974
|
const collapseItem = getMoreButtonItem(dict);
|
|
3963
3975
|
node = (React__default["default"].createElement("div", { className: b$j({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React__default["default"].createElement(AutoSizer, null, ({ width, height }) => {
|
|
3964
3976
|
const { listItems, collapseItems } = getAutosizeListItems(items, height, collapseItem);
|
|
3965
3977
|
return (React__default["default"].createElement("div", { style: { width, height } },
|
|
3966
|
-
React__default["default"].createElement(CompositeBarView, { items: listItems, onItemClick: onItemClick, collapseItems: collapseItems, multipleTooltip: multipleTooltip })));
|
|
3978
|
+
React__default["default"].createElement(CompositeBarView, { type: "menu", items: listItems, onItemClick: onItemClick, collapseItems: collapseItems, multipleTooltip: multipleTooltip })));
|
|
3967
3979
|
}))));
|
|
3968
3980
|
}
|
|
3969
3981
|
else {
|
|
3970
3982
|
node = (React__default["default"].createElement("div", { className: b$j() },
|
|
3971
|
-
React__default["default"].createElement(CompositeBarView, { items: items, onItemClick: onItemClick
|
|
3983
|
+
React__default["default"].createElement(CompositeBarView, { type: "subheader", items: items, onItemClick: onItemClick })));
|
|
3972
3984
|
}
|
|
3973
3985
|
return React__default["default"].createElement(MultipleTooltipProvider, null, node);
|
|
3974
3986
|
};
|
|
@@ -4036,7 +4048,7 @@ class AsideHeader extends React__default["default"].Component {
|
|
|
4036
4048
|
React__default["default"].createElement("div", { className: b$i('aside-popup-anchor'), ref: this.asideRef }),
|
|
4037
4049
|
React__default["default"].createElement("div", { className: b$i('aside-content', { ['with-decoration']: headerDecoration }) },
|
|
4038
4050
|
this.renderHeader(),
|
|
4039
|
-
(menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React__default["default"].createElement(CompositeBar, {
|
|
4051
|
+
(menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React__default["default"].createElement(CompositeBar, { type: "menu", items: menuItems, dict: dict, onItemClick: this.onItemClick, multipleTooltip: multipleTooltip })) : (React__default["default"].createElement("div", { className: b$i('menu-items') })),
|
|
4040
4052
|
this.renderFooter(size),
|
|
4041
4053
|
this.renderCollapseButton())),
|
|
4042
4054
|
panelItems && this.renderPanels(size)));
|
|
@@ -4047,7 +4059,7 @@ class AsideHeader extends React__default["default"].Component {
|
|
|
4047
4059
|
this.renderLogo = () => React__default["default"].createElement(Logo$1, Object.assign({}, this.props.logo, { onClick: this.onLogoClick }));
|
|
4048
4060
|
this.renderHeader = () => (React__default["default"].createElement("div", { className: b$i('header', { ['with-decoration']: this.props.headerDecoration }) },
|
|
4049
4061
|
this.renderLogo(),
|
|
4050
|
-
React__default["default"].createElement(CompositeBar, { items: this.props.subheaderItems,
|
|
4062
|
+
React__default["default"].createElement(CompositeBar, { type: "subheader", items: this.props.subheaderItems, onItemClick: this.onItemClick }),
|
|
4051
4063
|
React__default["default"].createElement(uikit.Icon, { data: headerDividerCollapsedIcon, className: b$i('header-divider'), width: ASIDE_HEADER_COMPACT_WIDTH, height: "29" })));
|
|
4052
4064
|
this.renderFooter = (size) => {
|
|
4053
4065
|
const { renderFooter, compact } = this.props;
|