@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/esm/index.js
CHANGED
|
@@ -3608,6 +3608,9 @@ const POPUP_PLACEMENT = ['right-start', 'right-end', 'right'];
|
|
|
3608
3608
|
const POPUP_ITEM_HEIGHT = 28;
|
|
3609
3609
|
|
|
3610
3610
|
function getItemHeight$1(item) {
|
|
3611
|
+
if (!isMenuItem(item)) {
|
|
3612
|
+
return ITEM_HEIGHT;
|
|
3613
|
+
}
|
|
3611
3614
|
switch (item.type) {
|
|
3612
3615
|
case 'action':
|
|
3613
3616
|
return 50;
|
|
@@ -3694,6 +3697,9 @@ function getAutosizeListItems(items, height, collapseItem) {
|
|
|
3694
3697
|
}
|
|
3695
3698
|
return { listItems, collapseItems };
|
|
3696
3699
|
}
|
|
3700
|
+
function isMenuItem(item) {
|
|
3701
|
+
return (item === null || item === void 0 ? void 0 : item.id) !== undefined;
|
|
3702
|
+
}
|
|
3697
3703
|
|
|
3698
3704
|
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}";
|
|
3699
3705
|
styleInject(css_248z$k);
|
|
@@ -3756,7 +3762,7 @@ const Item$1 = (props) => {
|
|
|
3756
3762
|
onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave();
|
|
3757
3763
|
}
|
|
3758
3764
|
} },
|
|
3759
|
-
React__default.createElement("div", { className: b$l('icon-place') }, compact ? (React__default.createElement(Tooltip, { content: tooltipText, disabled: !enableTooltip || (collapsedItem && open), placement: "right", className: b$l('icon-tooltip', { 'item-type': type }) },
|
|
3765
|
+
React__default.createElement("div", { className: b$l('icon-place') }, compact ? (React__default.createElement(Tooltip, { content: tooltipText, disabled: !enableTooltip || (collapsedItem && open) || popupVisible, placement: "right", className: b$l('icon-tooltip', { 'item-type': type }) },
|
|
3760
3766
|
React__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)),
|
|
3761
3767
|
React__default.createElement("div", { className: b$l('title'), title: typeof item.title === 'string' ? item.title : undefined }, titleEl),
|
|
3762
3768
|
renderPopupContent && Boolean(anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) && (React__default.createElement(Popup, { contentClassName: b$l('popup'), open: popupVisible, keepMounted: popupKeepMounted, placement: popupPlacement, offset: popupOffset, anchorRef: anchorRef, onClose: onClose }, renderPopupContent()))));
|
|
@@ -3857,7 +3863,7 @@ var css_248z$i = ".gn-composite-bar {\n flex: 1 0 auto;\n width: 100%;\n min-
|
|
|
3857
3863
|
styleInject(css_248z$i);
|
|
3858
3864
|
|
|
3859
3865
|
const b$j = block('composite-bar');
|
|
3860
|
-
const CompositeBarView = ({ items, onItemClick, collapseItems, multipleTooltip =
|
|
3866
|
+
const CompositeBarView = ({ type, items, onItemClick, collapseItems, multipleTooltip = false, }) => {
|
|
3861
3867
|
const ref = useRef(null);
|
|
3862
3868
|
const tooltipRef = useRef(null);
|
|
3863
3869
|
const { setValue: setMultipleTooltipContextValue, active: multipleTooltipActive, activeIndex, lastClickedItemIndex, } = useContext(MultipleTooltipContext);
|
|
@@ -3922,26 +3928,32 @@ const CompositeBarView = ({ items, onItemClick, collapseItems, multipleTooltip =
|
|
|
3922
3928
|
}, [lastClickedItemIndex, setMultipleTooltipContextValue]);
|
|
3923
3929
|
return (React__default.createElement(React__default.Fragment, null,
|
|
3924
3930
|
React__default.createElement("div", { ref: tooltipRef, onMouseEnter: onTooltipMouseEnter, onMouseLeave: onTooltipMouseLeave },
|
|
3925
|
-
React__default.createElement(List, { ref: ref, items: items, selectedItemIndex: getSelectedItemIndex$1(items), itemHeight: getItemHeight$1, itemClassName: b$j('root-menu-item'),
|
|
3926
|
-
|
|
3931
|
+
React__default.createElement(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) => {
|
|
3932
|
+
const itemExtraProps = isMenuItem(item) ? { item } : item;
|
|
3933
|
+
const enableTooltip = isMenuItem(item)
|
|
3934
|
+
? !multipleTooltip
|
|
3935
|
+
: item.enableTooltip;
|
|
3936
|
+
return (React__default.createElement(Item$1, Object.assign({}, itemExtraProps, { enableTooltip: enableTooltip, onMouseEnter: onMouseEnterByIndex(itemIndex), onMouseLeave: onMouseLeave, onItemClick: onItemClickByIndex(itemIndex), collapseItems: collapseItems })));
|
|
3937
|
+
} })),
|
|
3938
|
+
type === 'menu' && (React__default.createElement(MultipleTooltip, { open: compact && multipleTooltip && multipleTooltipActive, anchorRef: tooltipRef, placement: ['right-start'], items: items }))));
|
|
3927
3939
|
};
|
|
3928
|
-
const CompositeBar = ({
|
|
3940
|
+
const CompositeBar = ({ type, items, dict, onItemClick, multipleTooltip = false, }) => {
|
|
3929
3941
|
if (items.length === 0) {
|
|
3930
3942
|
return null;
|
|
3931
3943
|
}
|
|
3932
3944
|
let node;
|
|
3933
|
-
if (
|
|
3945
|
+
if (type === 'menu') {
|
|
3934
3946
|
const minHeight = getItemsMinHeight(items);
|
|
3935
3947
|
const collapseItem = getMoreButtonItem(dict);
|
|
3936
3948
|
node = (React__default.createElement("div", { className: b$j({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React__default.createElement(AutoSizer, null, ({ width, height }) => {
|
|
3937
3949
|
const { listItems, collapseItems } = getAutosizeListItems(items, height, collapseItem);
|
|
3938
3950
|
return (React__default.createElement("div", { style: { width, height } },
|
|
3939
|
-
React__default.createElement(CompositeBarView, { items: listItems, onItemClick: onItemClick, collapseItems: collapseItems, multipleTooltip: multipleTooltip })));
|
|
3951
|
+
React__default.createElement(CompositeBarView, { type: "menu", items: listItems, onItemClick: onItemClick, collapseItems: collapseItems, multipleTooltip: multipleTooltip })));
|
|
3940
3952
|
}))));
|
|
3941
3953
|
}
|
|
3942
3954
|
else {
|
|
3943
3955
|
node = (React__default.createElement("div", { className: b$j() },
|
|
3944
|
-
React__default.createElement(CompositeBarView, { items: items, onItemClick: onItemClick
|
|
3956
|
+
React__default.createElement(CompositeBarView, { type: "subheader", items: items, onItemClick: onItemClick })));
|
|
3945
3957
|
}
|
|
3946
3958
|
return React__default.createElement(MultipleTooltipProvider, null, node);
|
|
3947
3959
|
};
|
|
@@ -4009,7 +4021,7 @@ class AsideHeader extends React__default.Component {
|
|
|
4009
4021
|
React__default.createElement("div", { className: b$i('aside-popup-anchor'), ref: this.asideRef }),
|
|
4010
4022
|
React__default.createElement("div", { className: b$i('aside-content', { ['with-decoration']: headerDecoration }) },
|
|
4011
4023
|
this.renderHeader(),
|
|
4012
|
-
(menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React__default.createElement(CompositeBar, {
|
|
4024
|
+
(menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React__default.createElement(CompositeBar, { type: "menu", items: menuItems, dict: dict, onItemClick: this.onItemClick, multipleTooltip: multipleTooltip })) : (React__default.createElement("div", { className: b$i('menu-items') })),
|
|
4013
4025
|
this.renderFooter(size),
|
|
4014
4026
|
this.renderCollapseButton())),
|
|
4015
4027
|
panelItems && this.renderPanels(size)));
|
|
@@ -4020,7 +4032,7 @@ class AsideHeader extends React__default.Component {
|
|
|
4020
4032
|
this.renderLogo = () => React__default.createElement(Logo$1, Object.assign({}, this.props.logo, { onClick: this.onLogoClick }));
|
|
4021
4033
|
this.renderHeader = () => (React__default.createElement("div", { className: b$i('header', { ['with-decoration']: this.props.headerDecoration }) },
|
|
4022
4034
|
this.renderLogo(),
|
|
4023
|
-
React__default.createElement(CompositeBar, { items: this.props.subheaderItems,
|
|
4035
|
+
React__default.createElement(CompositeBar, { type: "subheader", items: this.props.subheaderItems, onItemClick: this.onItemClick }),
|
|
4024
4036
|
React__default.createElement(Icon, { data: headerDividerCollapsedIcon, className: b$i('header-divider'), width: ASIDE_HEADER_COMPACT_WIDTH, height: "29" })));
|
|
4025
4037
|
this.renderFooter = (size) => {
|
|
4026
4038
|
const { renderFooter, compact } = this.props;
|