@gravity-ui/navigation 3.10.0 → 5.0.0-beta.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/AsideHeaderContext.d.ts +16 -5
- package/build/cjs/components/AsideHeader/__stories__/AsideHeader.stories.d.ts +2 -0
- package/build/cjs/components/AsideHeader/__stories__/moc.d.ts +5 -1
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/AllPagesGroupHeader.d.ts +13 -0
- package/build/cjs/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/AllPagesListItem/AllPagesListItem.d.ts +2 -4
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/constants.d.ts +4 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/i18n/index.d.ts +14 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.d.ts +3 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.d.ts +2 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.d.ts +3 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.d.ts +2 -0
- package/build/cjs/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItems.d.ts +2 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/CompositeBar.d.ts +33 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.d.ts +13 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.d.ts +10 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/index.d.ts +2 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/utils.d.ts +4 -0
- package/build/cjs/components/AsideHeader/components/FooterItem/FooterItem.d.ts +6 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.d.ts +2 -1
- package/build/cjs/components/AsideHeader/components/Panels.d.ts +1 -1
- package/build/cjs/components/AsideHeader/hooks/useDelayedToggle.d.ts +6 -0
- package/build/cjs/components/AsideHeader/hooks/useIsExpanded.d.ts +6 -0
- package/build/cjs/components/AsideHeader/i18n/index.d.ts +8 -0
- package/build/cjs/components/AsideHeader/index.d.ts +7 -0
- package/build/cjs/components/AsideHeader/types.d.ts +60 -8
- package/build/cjs/components/AsideHeader/useAsideHeaderInnerContextValue.d.ts +4 -0
- package/build/cjs/components/AsideHeader/utils/getGroupHeight.d.ts +2 -0
- package/build/cjs/components/MobileHeader/i18n/index.d.ts +8 -0
- package/build/cjs/components/MobileHeader/types.d.ts +2 -1
- package/build/cjs/components/Settings/i18n/index.d.ts +8 -0
- package/build/cjs/components/Title/i18n/index.d.ts +8 -0
- package/build/cjs/components/constants.d.ts +2 -2
- package/build/cjs/components/index.d.ts +1 -7
- package/build/cjs/components/types.d.ts +18 -10
- package/build/cjs/{index-ByqQO5fB.js → index-B9p8boXH.js} +2 -2
- package/build/cjs/{index-ByqQO5fB.js.map → index-B9p8boXH.js.map} +1 -1
- package/build/cjs/{index-D9NSuTiN.js → index-BF-1v7O1.js} +761 -899
- package/build/cjs/index-BF-1v7O1.js.map +1 -0
- package/build/cjs/index.js +1 -1
- package/build/esm/components/AsideHeader/AsideHeaderContext.d.ts +16 -5
- package/build/esm/components/AsideHeader/__stories__/AsideHeader.stories.d.ts +2 -0
- package/build/esm/components/AsideHeader/__stories__/moc.d.ts +5 -1
- package/build/esm/components/AsideHeader/components/AllPagesPanel/AllPagesGroupHeader.d.ts +13 -0
- package/build/esm/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/AllPagesListItem/AllPagesListItem.d.ts +2 -4
- package/build/esm/components/AsideHeader/components/AllPagesPanel/constants.d.ts +4 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/i18n/index.d.ts +14 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/useGroupedMenuItems.d.ts +3 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/useVisibleMenuItems.d.ts +2 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/buildExpandedFromFlatList.d.ts +3 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/getRealIndexInGroup.d.ts +2 -0
- package/build/esm/components/AsideHeader/components/AllPagesPanel/utils/sortMenuItems.d.ts +2 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/CompositeBar.d.ts +33 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.d.ts +13 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/MultipleTooltip/MultipleTooltip.d.ts +10 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/index.d.ts +2 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/utils.d.ts +4 -0
- package/build/esm/components/AsideHeader/components/FooterItem/FooterItem.d.ts +6 -0
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.d.ts +2 -1
- package/build/esm/components/AsideHeader/components/Panels.d.ts +1 -1
- package/build/esm/components/AsideHeader/hooks/useDelayedToggle.d.ts +6 -0
- package/build/esm/components/AsideHeader/hooks/useIsExpanded.d.ts +6 -0
- package/build/esm/components/AsideHeader/i18n/index.d.ts +8 -0
- package/build/esm/components/AsideHeader/index.d.ts +7 -0
- package/build/esm/components/AsideHeader/types.d.ts +60 -8
- package/build/esm/components/AsideHeader/useAsideHeaderInnerContextValue.d.ts +4 -0
- package/build/esm/components/AsideHeader/utils/getGroupHeight.d.ts +2 -0
- package/build/esm/components/MobileHeader/i18n/index.d.ts +8 -0
- package/build/esm/components/MobileHeader/types.d.ts +2 -1
- package/build/esm/components/Settings/i18n/index.d.ts +8 -0
- package/build/esm/components/Title/i18n/index.d.ts +8 -0
- package/build/esm/components/constants.d.ts +2 -2
- package/build/esm/components/index.d.ts +1 -7
- package/build/esm/components/types.d.ts +18 -10
- package/build/esm/{index-CAXXfBb4.js → index-BzBUevHu.js} +2 -2
- package/build/esm/{index-CAXXfBb4.js.map → index-BzBUevHu.js.map} +1 -1
- package/build/esm/{index-Bi86ts3T.js → index-DH4SSAb2.js} +764 -902
- package/build/esm/index-DH4SSAb2.js.map +1 -0
- package/build/esm/index.js +1 -1
- package/package.json +2 -2
- package/build/cjs/components/AllPagesPanel/constants.d.ts +0 -3
- package/build/cjs/components/AllPagesPanel/i18n/index.d.ts +0 -6
- package/build/cjs/components/AllPagesPanel/useGroupedMenuItems.d.ts +0 -4
- package/build/cjs/components/AllPagesPanel/useVisibleMenuItems.d.ts +0 -2
- package/build/cjs/components/CompositeBar/CompositeBar.d.ts +0 -20
- package/build/cjs/components/CompositeBar/Item/Item.d.ts +0 -43
- package/build/cjs/components/CompositeBar/MultipleTooltip/MultipleTooltip.d.ts +0 -9
- package/build/cjs/components/CompositeBar/utils.d.ts +0 -12
- package/build/cjs/components/FooterItem/FooterItem.d.ts +0 -7
- package/build/cjs/index-D9NSuTiN.js.map +0 -1
- package/build/esm/components/AllPagesPanel/constants.d.ts +0 -3
- package/build/esm/components/AllPagesPanel/i18n/index.d.ts +0 -6
- package/build/esm/components/AllPagesPanel/useGroupedMenuItems.d.ts +0 -4
- package/build/esm/components/AllPagesPanel/useVisibleMenuItems.d.ts +0 -2
- package/build/esm/components/CompositeBar/CompositeBar.d.ts +0 -20
- package/build/esm/components/CompositeBar/Item/Item.d.ts +0 -43
- package/build/esm/components/CompositeBar/MultipleTooltip/MultipleTooltip.d.ts +0 -9
- package/build/esm/components/CompositeBar/utils.d.ts +0 -12
- package/build/esm/components/FooterItem/FooterItem.d.ts +0 -7
- package/build/esm/index-Bi86ts3T.js.map +0 -1
- package/build/cjs/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/AllPagesListItem/index.d.ts +0 -0
- package/build/cjs/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/AllPagesPanel.d.ts +0 -0
- package/build/cjs/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/index.d.ts +0 -0
- package/build/cjs/components/{CompositeBar → AsideHeader/components/CompositeBar}/HighlightedItem/HighlightedItem.d.ts +0 -0
- package/build/{esm → cjs/components/AsideHeader}/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.d.ts +1 -1
- package/build/cjs/components/{CompositeBar → AsideHeader/components/CompositeBar}/MultipleTooltip/index.d.ts +0 -0
- package/build/cjs/components/{CompositeBar → AsideHeader/components/CompositeBar}/constants.d.ts +0 -0
- package/build/cjs/components/{FooterItem → AsideHeader/components/FooterItem}/__stories__/FooterItem.stories.d.ts +0 -0
- package/build/cjs/components/{FooterItem → AsideHeader/components/FooterItem}/__tests__/helpersPlaywright.d.ts +0 -0
- package/build/esm/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/AllPagesListItem/index.d.ts +0 -0
- package/build/esm/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/AllPagesPanel.d.ts +0 -0
- package/build/esm/components/{AllPagesPanel → AsideHeader/components/AllPagesPanel}/index.d.ts +0 -0
- package/build/esm/components/{CompositeBar → AsideHeader/components/CompositeBar}/HighlightedItem/HighlightedItem.d.ts +0 -0
- package/build/{cjs → esm/components/AsideHeader}/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.d.ts +1 -1
- /package/build/esm/components/{CompositeBar → AsideHeader/components/CompositeBar}/MultipleTooltip/index.d.ts +0 -0
- /package/build/esm/components/{CompositeBar → AsideHeader/components/CompositeBar}/constants.d.ts +0 -0
- /package/build/esm/components/{FooterItem → AsideHeader/components/FooterItem}/__stories__/FooterItem.stories.d.ts +0 -0
- /package/build/esm/components/{FooterItem → AsideHeader/components/FooterItem}/__tests__/helpersPlaywright.d.ts +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import React__default, {
|
|
2
|
+
import React__default, { useRef, useState, useEffect, useCallback, useMemo, Suspense, useContext, useLayoutEffect } from 'react';
|
|
3
3
|
import { withNaming } from '@bem-react/classname';
|
|
4
|
-
import {
|
|
5
|
-
import { Pin, PinFill,
|
|
4
|
+
import { Icon, Portal, Popup, List, useForkRef, setRef, Flex, Text, Button, Tooltip, HelpMark, Hotkey, TextInput, Loader, Sheet, eventBroker, Menu, DropdownMenu } from '@gravity-ui/uikit';
|
|
5
|
+
import { Ellipsis, ChevronDown, ChevronRight, Pin, PinFill, Gear, Xmark, ListUl, ArrowLeft } from '@gravity-ui/icons';
|
|
6
6
|
import { addComponentKeysets } from '@gravity-ui/uikit/i18n';
|
|
7
7
|
import { jsx } from 'react/jsx-runtime';
|
|
8
8
|
import ReactDOM from 'react-dom';
|
|
@@ -52,10 +52,10 @@ className, cssSizeVariableName = '--gn-aside-header-size', renderContent, childr
|
|
|
52
52
|
return (React__default.createElement("div", { className: className, style: Object.assign({}, { [cssSizeVariableName]: `${size}px` }) }, typeof renderContent === 'function' ? (React__default.createElement(RenderContent, { size: size, renderContent: renderContent })) : (children)));
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
-
const ASIDE_HEADER_ICON_SIZE =
|
|
55
|
+
const ASIDE_HEADER_ICON_SIZE = 16;
|
|
56
56
|
const ASIDE_HEADER_COMPACT_WIDTH = 56;
|
|
57
57
|
const ASIDE_HEADER_EXPANDED_WIDTH = 236;
|
|
58
|
-
const ITEM_HEIGHT =
|
|
58
|
+
const ITEM_HEIGHT = 36;
|
|
59
59
|
const HEADER_DIVIDER_HEIGHT = 29;
|
|
60
60
|
|
|
61
61
|
const AsideHeaderInnerContext = React__default.createContext(undefined);
|
|
@@ -72,6 +72,10 @@ const useAsideHeaderInnerContext = () => {
|
|
|
72
72
|
const AsideHeaderContext = React__default.createContext({
|
|
73
73
|
compact: false,
|
|
74
74
|
size: 0,
|
|
75
|
+
isExpanded: false,
|
|
76
|
+
onChangeCompact: () => { },
|
|
77
|
+
onMouseEnter: () => { },
|
|
78
|
+
onMouseLeave: () => { },
|
|
75
79
|
});
|
|
76
80
|
AsideHeaderContext.displayName = 'AsideHeaderContext';
|
|
77
81
|
const AsideHeaderContextProvider = AsideHeaderContext.Provider;
|
|
@@ -85,11 +89,100 @@ const useAsideHeaderContext = () => {
|
|
|
85
89
|
return contextValue;
|
|
86
90
|
};
|
|
87
91
|
|
|
92
|
+
function defaultComparator(value, previousValue) {
|
|
93
|
+
return value !== previousValue;
|
|
94
|
+
}
|
|
95
|
+
function isTogglingOn(currentValue, previousValue) {
|
|
96
|
+
return !previousValue && Boolean(currentValue);
|
|
97
|
+
}
|
|
98
|
+
function isTogglingOff(currentValue, previousValue) {
|
|
99
|
+
return Boolean(previousValue) && !currentValue;
|
|
100
|
+
}
|
|
101
|
+
function useDelayedToggle(currentValue, config, maybeShouldThrottleFn) {
|
|
102
|
+
const shouldThrottleFn = defaultComparator;
|
|
103
|
+
const timerRef = useRef(null);
|
|
104
|
+
const valueCacheRef = useRef(currentValue);
|
|
105
|
+
const [value, setValue] = useState(currentValue);
|
|
106
|
+
const delayConfig = config;
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
function clear() {
|
|
109
|
+
if (timerRef.current) {
|
|
110
|
+
clearTimeout(timerRef.current);
|
|
111
|
+
timerRef.current = null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (currentValue !== valueCacheRef.current) {
|
|
115
|
+
clear();
|
|
116
|
+
const shouldThrottle = shouldThrottleFn(currentValue, valueCacheRef.current);
|
|
117
|
+
const previousValue = valueCacheRef.current;
|
|
118
|
+
valueCacheRef.current = currentValue;
|
|
119
|
+
if (shouldThrottle) {
|
|
120
|
+
let delay;
|
|
121
|
+
if (isTogglingOn(currentValue, previousValue)) {
|
|
122
|
+
delay = delayConfig.enableDelay;
|
|
123
|
+
}
|
|
124
|
+
else if (isTogglingOff(currentValue, previousValue)) {
|
|
125
|
+
delay = delayConfig.disableDelay;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
delay = delayConfig.enableDelay;
|
|
129
|
+
}
|
|
130
|
+
timerRef.current = setTimeout(() => {
|
|
131
|
+
setValue(currentValue);
|
|
132
|
+
}, delay);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
setValue(currentValue);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return clear;
|
|
139
|
+
}, [currentValue, delayConfig.enableDelay, delayConfig.disableDelay, shouldThrottleFn]);
|
|
140
|
+
return value;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const HOVER_DELAY = 150;
|
|
144
|
+
const useIsExpanded = (externalCompact) => {
|
|
145
|
+
const [isExpanded, setIsExpanded] = useState(!externalCompact);
|
|
146
|
+
const [isMouseInside, setIsMouseInside] = useState(false);
|
|
147
|
+
useEffect(() => {
|
|
148
|
+
if (externalCompact && isExpanded) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
setIsExpanded(!externalCompact);
|
|
152
|
+
// We need to run this effect only when externalCompact changes
|
|
153
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
154
|
+
}, [externalCompact]);
|
|
155
|
+
const shouldExpand = externalCompact && isMouseInside;
|
|
156
|
+
const delayedShouldExpand = useDelayedToggle(shouldExpand, {
|
|
157
|
+
enableDelay: HOVER_DELAY,
|
|
158
|
+
disableDelay: HOVER_DELAY,
|
|
159
|
+
});
|
|
160
|
+
// Update isExpanded based on hover
|
|
161
|
+
useEffect(() => {
|
|
162
|
+
if (externalCompact) {
|
|
163
|
+
setIsExpanded(delayedShouldExpand);
|
|
164
|
+
}
|
|
165
|
+
// We need to run this effect only when delayedShouldExpand changes
|
|
166
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
167
|
+
}, [delayedShouldExpand]);
|
|
168
|
+
const handleMouseEnter = useCallback(() => {
|
|
169
|
+
setIsMouseInside(true);
|
|
170
|
+
}, []);
|
|
171
|
+
const handleMouseLeave = useCallback(() => {
|
|
172
|
+
setIsMouseInside(false);
|
|
173
|
+
}, []);
|
|
174
|
+
return {
|
|
175
|
+
isExpanded,
|
|
176
|
+
onMouseEnter: handleMouseEnter,
|
|
177
|
+
onMouseLeave: handleMouseLeave,
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
|
|
88
181
|
const NAMESPACE = 'gn-';
|
|
89
182
|
withNaming({ e: '__', m: '_' });
|
|
90
183
|
const block = withNaming({ n: NAMESPACE, e: '__', m: '_' });
|
|
91
184
|
|
|
92
|
-
const b$
|
|
185
|
+
const b$w = block('aside-header');
|
|
93
186
|
|
|
94
187
|
function styleInject(css, ref) {
|
|
95
188
|
if ( ref === undefined ) ref = {};
|
|
@@ -118,63 +211,36 @@ function styleInject(css, ref) {
|
|
|
118
211
|
}
|
|
119
212
|
}
|
|
120
213
|
|
|
121
|
-
var css_248z$
|
|
122
|
-
styleInject(css_248z$
|
|
214
|
+
var css_248z$v = ".g-root{--gn-aside-top-panel-height:0px}.gn-aside-header{--gn-aside-header-min-width:36px;--_--item-icon-background-size:36px;--_--background-color:var(--g-color-base-background);--_--decoration-collapsed-background-color:var(--g-color-base-warning-light);--_--decoration-expanded-background-color:var(--g-color-base-warning-light);--_--vertical-divider-line-color:var(--g-color-line-generic);--_--horizontal-divider-line-color:var(--g-color-line-generic);background-color:var(--g-color-base-background);height:100%;position:relative;width:100%}.gn-aside-header__aside{background-color:var(--gn-aside-header-expanded-background-color,var(--gn-aside-header-background-color,var(--_--background-color)));box-sizing:border-box;display:flex;flex-direction:column;height:100vh;left:0;margin-top:var(--gn-top-alert-height,0);max-height:calc(100vh - var(--gn-top-alert-height, 0));position:sticky;top:var(--gn-top-alert-height,0);width:inherit;z-index:var(--gn-aside-header-z-index,100)}.gn-aside-header__aside:after{background-color:var(--gn-aside-header-divider-vertical-color,var(--_--vertical-divider-line-color));content:\"\";height:100%;position:absolute;right:0;top:0;width:1px;z-index:2}.gn-aside-header__aside-popup-anchor{inset:0;position:absolute;z-index:1}.gn-aside-header__aside-content{--gradient-height:334px;display:flex;flex-direction:column;height:inherit;overflow-x:hidden;padding-top:var(--gn-aside-header-padding-top);position:relative;user-select:none;width:inherit;z-index:2}.gn-aside-header__aside-content>.gn-aside-header-logo{margin:8px 0}.gn-aside-header__aside-content_with-decoration{background:linear-gradient(180deg,var(--gn-aside-header-decoration-expanded-background-color,var(--_--decoration-expanded-background-color)) calc(var(--gradient-height)*.33),transparent calc(var(--gradient-height)*.88))}.gn-aside-header__aside-custom-background{bottom:0;display:flex;position:absolute;top:0;width:var(--gn-aside-header-size);z-index:-1}.gn-aside-header_compact .gn-aside-header__aside{background-color:var(--gn-aside-header-collapsed-background-color,var(--gn-aside-header-background-color,var(--_--background-color)))}.gn-aside-header_compact .gn-aside-header__aside-content{background:transparent}.gn-aside-header__aside_expanded-by-hover{left:0;position:fixed;top:0}.gn-aside-header__header{--gn-aside-header-header-divider-height:29px;box-sizing:border-box;flex:none;padding-bottom:22px;padding-top:8px;position:relative;width:100%;z-index:1}.gn-aside-header__header .gn-aside-header__header-divider{bottom:0;color:var(--gn-aside-header-decoration-collapsed-background-color,var(--_--decoration-collapsed-background-color));display:none;left:0;position:absolute;z-index:-2}.gn-aside-header__header_with-decoration:before{background-color:var(--gn-aside-header-decoration-collapsed-background-color,var(--_--decoration-collapsed-background-color));content:\"\";display:none;height:calc(100% - var(--gn-aside-header-header-divider-height));left:0;position:absolute;top:0;width:100%;z-index:-2}.gn-aside-header__header:after{background-color:var(--gn-aside-header-divider-horizontal-color,var(--_--horizontal-divider-line-color));bottom:12px;content:\"\";height:1px;left:0;position:absolute;width:100%;z-index:-2}.gn-aside-header_compact .gn-aside-header__header:before,.gn-aside-header_compact .gn-aside-header__header_with-decoration .gn-aside-header__header-divider{display:block}.gn-aside-header_compact .gn-aside-header__header_with-decoration:after{display:none}.gn-aside-header__logo-button{margin:0 10px 2px}.gn-aside-header__logo-button .gn-aside-header__logo-icon-place{height:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));width:var(--gn-aside-header-min-width)}.gn-aside-header__menu-items{flex-grow:1}.gn-aside-header__footer{display:flex;flex-direction:column;flex-shrink:0;margin:var(--g-spacing-2) 10px}.gn-aside-header__panels{display:flex;flex-direction:column;inset:var(--gn-top-alert-height,0) 0 0;max-height:calc(100vh - var(--gn-top-alert-height, 0));overflow:auto;position:fixed;z-index:var(--gn-aside-header-panel-z-index,98)}.gn-aside-header__panel{flex-grow:1;height:auto}.gn-aside-header__pane-container{display:flex;flex-direction:row;outline:none;overflow:visible;user-select:text}.gn-aside-header__top-alert{background:var(--g-color-base-background);position:fixed;top:0;width:100%;z-index:var(--gn-aside-header-pane-top-z-index,98)}.gn-aside-header__content{margin-top:var(--gn-top-alert-height,0);width:calc(100% - var(--gn-aside-header-size))}.gn-aside-header__content_expanded-by-hover{padding-left:var(--gn-aside-header-min-width)}";
|
|
215
|
+
styleInject(css_248z$v);
|
|
123
216
|
|
|
124
|
-
const TopAlert$1 = React__default.lazy(() => import('./index-
|
|
125
|
-
const Layout = ({ compact, className, children, topAlert }) => {
|
|
126
|
-
const
|
|
127
|
-
const
|
|
217
|
+
const TopAlert$1 = React__default.lazy(() => import('./index-BzBUevHu.js').then((module) => ({ default: module.TopAlert })));
|
|
218
|
+
const Layout = ({ compact, className, children, topAlert, onChangeCompact }) => {
|
|
219
|
+
const { isExpanded, onMouseEnter, onMouseLeave } = useIsExpanded(compact);
|
|
220
|
+
const size = isExpanded ? ASIDE_HEADER_EXPANDED_WIDTH : ASIDE_HEADER_COMPACT_WIDTH;
|
|
221
|
+
const asideHeaderContextValue = useMemo(() => ({
|
|
222
|
+
size,
|
|
223
|
+
compact,
|
|
224
|
+
isExpanded,
|
|
225
|
+
onChangeCompact,
|
|
226
|
+
onMouseEnter,
|
|
227
|
+
onMouseLeave,
|
|
228
|
+
}), [size, compact, isExpanded, onChangeCompact, onMouseEnter, onMouseLeave]);
|
|
128
229
|
return (React__default.createElement(AsideHeaderContextProvider, { value: asideHeaderContextValue },
|
|
129
|
-
React__default.createElement("div", { className: b$
|
|
230
|
+
React__default.createElement("div", { className: b$w({ compact: !isExpanded }, className), style: Object.assign({}, { '--gn-aside-header-size': `${size}px` }) },
|
|
130
231
|
topAlert && (React__default.createElement(Suspense, { fallback: null },
|
|
131
|
-
React__default.createElement(TopAlert$1, { className: b$
|
|
132
|
-
React__default.createElement("div", { className: b$
|
|
232
|
+
React__default.createElement(TopAlert$1, { className: b$w('top-alert'), alert: topAlert }))),
|
|
233
|
+
React__default.createElement("div", { className: b$w('pane-container') }, children))));
|
|
133
234
|
};
|
|
134
235
|
const ConnectedContent = ({ children, renderContent, }) => {
|
|
135
|
-
const { size } = useAsideHeaderContext();
|
|
136
|
-
|
|
236
|
+
const { size, compact, isExpanded } = useAsideHeaderContext();
|
|
237
|
+
const isExpandedByHover = compact && isExpanded;
|
|
238
|
+
return (React__default.createElement(Content, { size: size, className: b$w('content', { 'expanded-by-hover': isExpandedByHover }), renderContent: renderContent }, children));
|
|
137
239
|
};
|
|
138
240
|
const PageLayout = Object.assign(Layout, {
|
|
139
241
|
Content: ConnectedContent,
|
|
140
242
|
});
|
|
141
243
|
|
|
142
|
-
var css_248z$t = ".gn-all-pages-list-item{align-items:center;background:none;border:none;color:inherit;column-gap:var(--g-spacing-4);cursor:pointer;display:flex;font:inherit;height:40px;outline:inherit;padding:0 var(--g-spacing-6);text-decoration:inherit;width:100%}.gn-all-pages-list-item:focus-visible{outline:solid var(--g-color-line-misc);outline-offset:-2px}.gn-all-pages-list-item__text{flex:1;text-align:initial}.gn-all-pages-list-item__icon{color:var(--g-color-text-misc)}.gn-all-pages-list-item_edit-mode{padding:0 0 0 var(--g-spacing-4)}";
|
|
143
|
-
styleInject(css_248z$t);
|
|
144
|
-
|
|
145
|
-
const b$u = block('all-pages-list-item');
|
|
146
|
-
const AllPagesListItem = (props) => {
|
|
147
|
-
const { item, editMode, onToggle } = props;
|
|
148
|
-
const ref = useRef(null);
|
|
149
|
-
const onPinButtonClick = useCallback((e) => {
|
|
150
|
-
e.stopPropagation();
|
|
151
|
-
e.preventDefault();
|
|
152
|
-
onToggle();
|
|
153
|
-
}, [onToggle]);
|
|
154
|
-
const onItemClick = (e) => {
|
|
155
|
-
if (editMode) {
|
|
156
|
-
e.stopPropagation();
|
|
157
|
-
e.preventDefault();
|
|
158
|
-
}
|
|
159
|
-
};
|
|
160
|
-
const [Tag, tagProps] = item.link ? ['a', { href: item.link }] : ['button', {}];
|
|
161
|
-
const makeNode = useCallback((params) => {
|
|
162
|
-
return (React__default.createElement(Tag, Object.assign({}, tagProps, { className: b$u(), onClick: onItemClick, ref: ref }),
|
|
163
|
-
params.icon,
|
|
164
|
-
React__default.createElement("span", { className: b$u('text') }, params.title),
|
|
165
|
-
editMode && !item.preventUserRemoving && (React__default.createElement(Button, { onClick: onPinButtonClick, view: item.hidden ? 'flat-secondary' : 'flat-action' },
|
|
166
|
-
React__default.createElement(Button.Icon, null, item.hidden ? React__default.createElement(Pin, null) : React__default.createElement(PinFill, null))))));
|
|
167
|
-
}, [Tag, tagProps, onItemClick, editMode, item, onPinButtonClick]);
|
|
168
|
-
const iconNode = item.icon ? (React__default.createElement(Icon, { className: b$u('icon'), data: item.icon, size: item.iconSize })) : null;
|
|
169
|
-
const titleNode = item.title;
|
|
170
|
-
const params = { icon: iconNode, title: titleNode };
|
|
171
|
-
const opts = { collapsed: false, compact: false, item, ref };
|
|
172
|
-
if (typeof item.itemWrapper === 'function') {
|
|
173
|
-
return item.itemWrapper(params, makeNode, opts);
|
|
174
|
-
}
|
|
175
|
-
return makeNode(params);
|
|
176
|
-
};
|
|
177
|
-
|
|
178
244
|
var en$4 = {
|
|
179
245
|
"menu-item.all-pages.title": "All pages",
|
|
180
246
|
"all-panel.menu.category.allOther": "All other",
|
|
@@ -195,6 +261,7 @@ const COMPONENT$4 = 'AllPagesPanel';
|
|
|
195
261
|
var i18n$4 = addComponentKeysets({ en: en$4, ru: ru$4 }, `${NAMESPACE}${COMPONENT$4}`);
|
|
196
262
|
|
|
197
263
|
const ALL_PAGES_ID = 'all-pages';
|
|
264
|
+
const UNGROUPED_ID = 'ungrouped';
|
|
198
265
|
function getAllPagesMenuItem() {
|
|
199
266
|
return {
|
|
200
267
|
id: ALL_PAGES_ID,
|
|
@@ -204,519 +271,138 @@ function getAllPagesMenuItem() {
|
|
|
204
271
|
};
|
|
205
272
|
}
|
|
206
273
|
|
|
207
|
-
const useGroupedMenuItems = (
|
|
208
|
-
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
|
|
274
|
+
const useGroupedMenuItems = (menuItems, menuGroups, isEditMode = false) => {
|
|
275
|
+
return useMemo(() => {
|
|
276
|
+
const visibleItems = menuItems.filter((item) => {
|
|
277
|
+
if (isEditMode && item.id === ALL_PAGES_ID) {
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
return true;
|
|
281
|
+
});
|
|
282
|
+
visibleItems.sort(({ type: typeA }, { type: typeB }) => {
|
|
283
|
+
if (typeA === 'action') {
|
|
212
284
|
return 1;
|
|
213
285
|
}
|
|
214
|
-
if (
|
|
286
|
+
if (typeB === 'action') {
|
|
215
287
|
return -1;
|
|
216
288
|
}
|
|
217
289
|
return 0;
|
|
218
290
|
});
|
|
219
|
-
const
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
291
|
+
const groupsMap = new Map();
|
|
292
|
+
menuGroups === null || menuGroups === undefined ? undefined : menuGroups.forEach((group) => {
|
|
293
|
+
groupsMap.set(group.id, group);
|
|
294
|
+
});
|
|
295
|
+
const groupedItems = new Map();
|
|
296
|
+
const processedGroups = new Set();
|
|
297
|
+
visibleItems.forEach((item) => {
|
|
298
|
+
const groupId = item.groupId;
|
|
299
|
+
if (groupId) {
|
|
300
|
+
if (!groupedItems.has(groupId)) {
|
|
301
|
+
groupedItems.set(groupId, []);
|
|
302
|
+
}
|
|
303
|
+
const group = groupedItems.get(groupId);
|
|
304
|
+
if (group) {
|
|
305
|
+
group.push(item);
|
|
306
|
+
}
|
|
223
307
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
308
|
+
});
|
|
309
|
+
const flatListItems = [];
|
|
310
|
+
visibleItems.forEach((item) => {
|
|
311
|
+
var _a, _b;
|
|
312
|
+
const groupId = item.groupId;
|
|
313
|
+
if (groupId) {
|
|
314
|
+
if (!processedGroups.has(groupId)) {
|
|
315
|
+
processedGroups.add(groupId);
|
|
316
|
+
const items = groupedItems.get(groupId) || [];
|
|
317
|
+
if (items.length > 0) {
|
|
318
|
+
const itemsWithVisible = items.filter((sortedItem) => !sortedItem.hidden);
|
|
319
|
+
const group = groupsMap.get(groupId);
|
|
320
|
+
const isAllGroupItemsHidden = itemsWithVisible.length === 0;
|
|
321
|
+
const isGroupHidden = isAllGroupItemsHidden
|
|
322
|
+
? true
|
|
323
|
+
: ((_a = group === null || group === undefined ? undefined : group.hidden) !== null && _a !== undefined ? _a : false);
|
|
324
|
+
flatListItems.push({
|
|
325
|
+
id: groupId,
|
|
326
|
+
title: (_b = group === null || group === undefined ? undefined : group.title) !== null && _b !== undefined ? _b : groupId,
|
|
327
|
+
icon: group === null || group === undefined ? undefined : group.icon,
|
|
328
|
+
hidden: isGroupHidden,
|
|
329
|
+
isDisabled: isAllGroupItemsHidden,
|
|
330
|
+
collapsible: group === null || group === undefined ? undefined : group.collapsible,
|
|
331
|
+
collapsedByDefault: group === null || group === undefined ? undefined : group.collapsedByDefault,
|
|
332
|
+
isCollapsed: group === null || group === undefined ? undefined : group.collapsed,
|
|
333
|
+
groupId: groupId,
|
|
334
|
+
items,
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
if (!groupId) {
|
|
340
|
+
flatListItems.push(item);
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
return flatListItems;
|
|
344
|
+
}, [menuItems, menuGroups, isEditMode]);
|
|
230
345
|
};
|
|
231
346
|
|
|
232
|
-
var
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
const menuItemsRef = useRef(menuItems);
|
|
240
|
-
menuItemsRef.current = menuItems;
|
|
241
|
-
const [isEditMode, setIsEditMode] = useState(false);
|
|
242
|
-
const [draggingItemTitle, setDraggingItemTitle] = useState(null);
|
|
243
|
-
const toggleEditMode = useCallback(() => {
|
|
244
|
-
setIsEditMode((prev) => !prev);
|
|
245
|
-
}, []);
|
|
246
|
-
const groupedItems = useGroupedMenuItems(menuItems);
|
|
247
|
-
useEffect(() => {
|
|
248
|
-
var _a;
|
|
249
|
-
onEditModeChanged === null || onEditModeChanged === undefined ? undefined : onEditModeChanged(isEditMode);
|
|
250
|
-
if (isEditMode) {
|
|
251
|
-
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onOpenEditMode) === null || _a === undefined ? undefined : _a.call(editMenuProps);
|
|
252
|
-
}
|
|
253
|
-
}, [isEditMode, onEditModeChanged, editMenuProps]);
|
|
254
|
-
const onItemClick = useCallback((item, _index, _fromKeyboard, event) => {
|
|
255
|
-
var _a;
|
|
256
|
-
(_a = item.onItemClick) === null || _a === undefined ? undefined : _a.call(item, item, false, event);
|
|
257
|
-
}, []);
|
|
258
|
-
const togglePageVisibility = useCallback((item) => {
|
|
259
|
-
var _a;
|
|
260
|
-
if (!onMenuItemsChanged) {
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
const changedItem = Object.assign(Object.assign({}, item), { hidden: !item.hidden });
|
|
264
|
-
const originItems = menuItemsRef.current.filter((menuItem) => menuItem.id !== ALL_PAGES_ID);
|
|
265
|
-
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onToggleMenuItem) === null || _a === undefined ? undefined : _a.call(editMenuProps, changedItem);
|
|
266
|
-
onMenuItemsChanged(originItems.map((menuItem) => {
|
|
267
|
-
if (menuItem.id !== changedItem.id) {
|
|
268
|
-
return menuItem;
|
|
269
|
-
}
|
|
270
|
-
return changedItem;
|
|
271
|
-
}));
|
|
272
|
-
}, [onMenuItemsChanged, editMenuProps]);
|
|
273
|
-
const onDragEnd = useCallback(() => {
|
|
274
|
-
setDraggingItemTitle(null);
|
|
275
|
-
}, [setDraggingItemTitle]);
|
|
276
|
-
const itemRender = useCallback((item, _isActive, _itemIndex) => {
|
|
277
|
-
const onDragStart = () => {
|
|
278
|
-
setDraggingItemTitle(item.title);
|
|
279
|
-
};
|
|
280
|
-
return (React__default.createElement(AllPagesListItem, { item: item, onDragStart: onDragStart, onDragEnd: onDragEnd, editMode: isEditMode, onToggle: () => togglePageVisibility(item), enableSorting: editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting }));
|
|
281
|
-
}, [isEditMode, togglePageVisibility, onDragEnd, setDraggingItemTitle, editMenuProps]);
|
|
282
|
-
const onResetToDefaultClick = useCallback(() => {
|
|
283
|
-
var _a;
|
|
284
|
-
if (!onMenuItemsChanged) {
|
|
285
|
-
return;
|
|
286
|
-
}
|
|
287
|
-
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onResetSettingsToDefault) === null || _a === undefined ? undefined : _a.call(editMenuProps);
|
|
288
|
-
const originItems = defaultMenuItems === null || defaultMenuItems === undefined ? undefined : defaultMenuItems.filter((item) => item.id !== ALL_PAGES_ID);
|
|
289
|
-
if (originItems) {
|
|
290
|
-
onMenuItemsChanged(originItems);
|
|
291
|
-
}
|
|
292
|
-
}, [onMenuItemsChanged, editMenuProps, defaultMenuItems]);
|
|
293
|
-
const changeItemsOrder = useCallback(({ oldIndex, newIndex }) => {
|
|
294
|
-
var _a;
|
|
295
|
-
const newItems = menuItemsRef.current.filter((item) => item.id !== ALL_PAGES_ID);
|
|
296
|
-
const element = newItems.splice(oldIndex, 1)[0];
|
|
297
|
-
newItems.splice(newIndex, 0, element);
|
|
298
|
-
onMenuItemsChanged === null || onMenuItemsChanged === undefined ? undefined : onMenuItemsChanged(newItems.filter((item) => item.type !== 'divider'));
|
|
299
|
-
setDraggingItemTitle(null);
|
|
300
|
-
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onChangeItemsOrder) === null || _a === undefined ? undefined : _a.call(editMenuProps, element, oldIndex, newIndex);
|
|
301
|
-
}, [onMenuItemsChanged, editMenuProps]);
|
|
302
|
-
const sortableItems = useMemo(() => {
|
|
303
|
-
return menuItemsRef.current.filter((item) => item.id !== ALL_PAGES_ID && !item.afterMoreButton && item.type !== 'divider');
|
|
304
|
-
}, [menuItems]);
|
|
305
|
-
return (React__default.createElement(Flex, { className: b$t(null, className), gap: "5", direction: "column" },
|
|
306
|
-
React__default.createElement(Flex, { gap: "4", alignItems: "center", justifyContent: "space-between" },
|
|
307
|
-
React__default.createElement(Text, { variant: "subheader-2" }, isEditMode ? i18n$4('all-panel.title.editing') : i18n$4('all-panel.title.main')),
|
|
308
|
-
React__default.createElement(Tooltip, { content: i18n$4('all-panel.title.editing') },
|
|
309
|
-
React__default.createElement(Button, { selected: isEditMode, view: "normal", onClick: toggleEditMode }, startEditIcon ? startEditIcon : React__default.createElement(Icon, { data: Gear })))),
|
|
310
|
-
React__default.createElement(Flex, { className: b$t('content'), gap: "5", direction: "column" }, isEditMode && (editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting) ? (React__default.createElement("div", null,
|
|
311
|
-
React__default.createElement(List, { itemClassName: b$t('item', { editMode: true }), itemHeight: 40, onSortEnd: changeItemsOrder, sortable: true, virtualized: false, filterable: false, items: sortableItems, onItemClick: onItemClick, renderItem: itemRender }),
|
|
312
|
-
draggingItemTitle && (React__default.createElement("div", { className: b$t('drag-placeholder') }, draggingItemTitle)))) : (Object.keys(groupedItems).map((category) => {
|
|
313
|
-
return (React__default.createElement(Flex, { key: category, direction: "column", gap: "3" },
|
|
314
|
-
React__default.createElement(Text, { className: b$t('category'), variant: "body-1", color: "secondary" }, category),
|
|
315
|
-
React__default.createElement(List, { virtualized: false, filterable: false, items: groupedItems[category], onItemClick: onItemClick, renderItem: itemRender })));
|
|
316
|
-
}))),
|
|
317
|
-
isEditMode && (React__default.createElement(Button, { onClick: onResetToDefaultClick }, i18n$4('all-panel.resetToDefault')))));
|
|
347
|
+
var button_collapse$1 = "Collapse";
|
|
348
|
+
var button_expand$1 = "Expand";
|
|
349
|
+
var label_more$1 = "More";
|
|
350
|
+
var en$3 = {
|
|
351
|
+
button_collapse: button_collapse$1,
|
|
352
|
+
button_expand: button_expand$1,
|
|
353
|
+
label_more: label_more$1
|
|
318
354
|
};
|
|
319
355
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
return menuItems.filter((item, index, items) => {
|
|
328
|
-
if (item.hidden) {
|
|
329
|
-
return false;
|
|
330
|
-
}
|
|
331
|
-
if (index > 0 &&
|
|
332
|
-
item.type === 'divider' &&
|
|
333
|
-
(items[lastVisibleIndex].type === 'divider' || items[lastVisibleIndex].hidden)) {
|
|
334
|
-
return false;
|
|
335
|
-
}
|
|
336
|
-
lastVisibleIndex = index;
|
|
337
|
-
return true;
|
|
338
|
-
});
|
|
339
|
-
}, [allPagesIsAvailable, menuItems]);
|
|
356
|
+
var button_collapse = "Свернуть";
|
|
357
|
+
var button_expand = "Развернуть";
|
|
358
|
+
var label_more = "Ещё";
|
|
359
|
+
var ru$3 = {
|
|
360
|
+
button_collapse: button_collapse,
|
|
361
|
+
button_expand: button_expand,
|
|
362
|
+
label_more: label_more
|
|
340
363
|
};
|
|
341
364
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
* https://github.com/sdecima/javascript-detect-element-resize
|
|
345
|
-
* Sebastian Decima
|
|
346
|
-
*
|
|
347
|
-
* Forked from version 0.5.3; includes the following modifications:
|
|
348
|
-
* 1) Guard against unsafe 'window' and 'document' references (to support SSR).
|
|
349
|
-
* 2) Defer initialization code via a top-level function wrapper (to support SSR).
|
|
350
|
-
* 3) Avoid unnecessary reflows by not measuring size for scroll events bubbling from children.
|
|
351
|
-
* 4) Add nonce for style element.
|
|
352
|
-
* 5) Use 'export' statement over 'module.exports' assignment
|
|
353
|
-
**/
|
|
354
|
-
|
|
355
|
-
// Check `document` and `window` in case of server-side rendering
|
|
356
|
-
let windowObject;
|
|
357
|
-
if (typeof window !== "undefined") {
|
|
358
|
-
windowObject = window;
|
|
359
|
-
|
|
360
|
-
// eslint-disable-next-line no-restricted-globals
|
|
361
|
-
} else if (typeof self !== "undefined") {
|
|
362
|
-
// eslint-disable-next-line no-restricted-globals
|
|
363
|
-
windowObject = self;
|
|
364
|
-
} else {
|
|
365
|
-
windowObject = global;
|
|
366
|
-
}
|
|
367
|
-
let cancelFrame = null;
|
|
368
|
-
let requestFrame = null;
|
|
369
|
-
const TIMEOUT_DURATION = 20;
|
|
370
|
-
const clearTimeoutFn = windowObject.clearTimeout;
|
|
371
|
-
const setTimeoutFn = windowObject.setTimeout;
|
|
372
|
-
const cancelAnimationFrameFn = windowObject.cancelAnimationFrame || windowObject.mozCancelAnimationFrame || windowObject.webkitCancelAnimationFrame;
|
|
373
|
-
const requestAnimationFrameFn = windowObject.requestAnimationFrame || windowObject.mozRequestAnimationFrame || windowObject.webkitRequestAnimationFrame;
|
|
374
|
-
if (cancelAnimationFrameFn == null || requestAnimationFrameFn == null) {
|
|
375
|
-
// For environments that don't support animation frame,
|
|
376
|
-
// fallback to a setTimeout based approach.
|
|
377
|
-
cancelFrame = clearTimeoutFn;
|
|
378
|
-
requestFrame = function requestAnimationFrameViaSetTimeout(callback) {
|
|
379
|
-
return setTimeoutFn(callback, TIMEOUT_DURATION);
|
|
380
|
-
};
|
|
381
|
-
} else {
|
|
382
|
-
// Counter intuitively, environments that support animation frames can be trickier.
|
|
383
|
-
// Chrome's "Throttle non-visible cross-origin iframes" flag can prevent rAFs from being called.
|
|
384
|
-
// In this case, we should fallback to a setTimeout() implementation.
|
|
385
|
-
cancelFrame = function cancelFrame([animationFrameID, timeoutID]) {
|
|
386
|
-
cancelAnimationFrameFn(animationFrameID);
|
|
387
|
-
clearTimeoutFn(timeoutID);
|
|
388
|
-
};
|
|
389
|
-
requestFrame = function requestAnimationFrameWithSetTimeoutFallback(callback) {
|
|
390
|
-
const animationFrameID = requestAnimationFrameFn(function animationFrameCallback() {
|
|
391
|
-
clearTimeoutFn(timeoutID);
|
|
392
|
-
callback();
|
|
393
|
-
});
|
|
394
|
-
const timeoutID = setTimeoutFn(function timeoutCallback() {
|
|
395
|
-
cancelAnimationFrameFn(animationFrameID);
|
|
396
|
-
callback();
|
|
397
|
-
}, TIMEOUT_DURATION);
|
|
398
|
-
return [animationFrameID, timeoutID];
|
|
399
|
-
};
|
|
400
|
-
}
|
|
401
|
-
function createDetectElementResize(nonce) {
|
|
402
|
-
let animationKeyframes;
|
|
403
|
-
let animationName;
|
|
404
|
-
let animationStartEvent;
|
|
405
|
-
let animationStyle;
|
|
406
|
-
let checkTriggers;
|
|
407
|
-
let resetTriggers;
|
|
408
|
-
let scrollListener;
|
|
409
|
-
const attachEvent = typeof document !== "undefined" && document.attachEvent;
|
|
410
|
-
if (!attachEvent) {
|
|
411
|
-
resetTriggers = function (element) {
|
|
412
|
-
const triggers = element.__resizeTriggers__,
|
|
413
|
-
expand = triggers.firstElementChild,
|
|
414
|
-
contract = triggers.lastElementChild,
|
|
415
|
-
expandChild = expand.firstElementChild;
|
|
416
|
-
contract.scrollLeft = contract.scrollWidth;
|
|
417
|
-
contract.scrollTop = contract.scrollHeight;
|
|
418
|
-
expandChild.style.width = expand.offsetWidth + 1 + "px";
|
|
419
|
-
expandChild.style.height = expand.offsetHeight + 1 + "px";
|
|
420
|
-
expand.scrollLeft = expand.scrollWidth;
|
|
421
|
-
expand.scrollTop = expand.scrollHeight;
|
|
422
|
-
};
|
|
423
|
-
checkTriggers = function (element) {
|
|
424
|
-
return element.offsetWidth !== element.__resizeLast__.width || element.offsetHeight !== element.__resizeLast__.height;
|
|
425
|
-
};
|
|
426
|
-
scrollListener = function (e) {
|
|
427
|
-
// Don't measure (which forces) reflow for scrolls that happen inside of children!
|
|
428
|
-
if (e.target.className && typeof e.target.className.indexOf === "function" && e.target.className.indexOf("contract-trigger") < 0 && e.target.className.indexOf("expand-trigger") < 0) {
|
|
429
|
-
return;
|
|
430
|
-
}
|
|
431
|
-
const element = this;
|
|
432
|
-
resetTriggers(this);
|
|
433
|
-
if (this.__resizeRAF__) {
|
|
434
|
-
cancelFrame(this.__resizeRAF__);
|
|
435
|
-
}
|
|
436
|
-
this.__resizeRAF__ = requestFrame(function animationFrame() {
|
|
437
|
-
if (checkTriggers(element)) {
|
|
438
|
-
element.__resizeLast__.width = element.offsetWidth;
|
|
439
|
-
element.__resizeLast__.height = element.offsetHeight;
|
|
440
|
-
element.__resizeListeners__.forEach(function forEachResizeListener(fn) {
|
|
441
|
-
fn.call(element, e);
|
|
442
|
-
});
|
|
443
|
-
}
|
|
444
|
-
});
|
|
445
|
-
};
|
|
365
|
+
const COMPONENT$3 = 'AsideHeader';
|
|
366
|
+
var i18n$3 = addComponentKeysets({ en: en$3, ru: ru$3 }, `${NAMESPACE}${COMPONENT$3}`);
|
|
446
367
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
for (let i = 0; i < domPrefixes.length; i++) {
|
|
461
|
-
if (elm.style[domPrefixes[i] + "AnimationName"] !== undefined) {
|
|
462
|
-
pfx = domPrefixes[i];
|
|
463
|
-
keyframeprefix = "-" + pfx.toLowerCase() + "-";
|
|
464
|
-
animationStartEvent = startEvents[i];
|
|
465
|
-
animation = true;
|
|
466
|
-
break;
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
animationName = "resizeanim";
|
|
472
|
-
animationKeyframes = "@" + keyframeprefix + "keyframes " + animationName + " { from { opacity: 0; } to { opacity: 0; } } ";
|
|
473
|
-
animationStyle = keyframeprefix + "animation: 1ms " + animationName + "; ";
|
|
474
|
-
}
|
|
475
|
-
const createStyles = function (doc) {
|
|
476
|
-
if (!doc.getElementById("detectElementResize")) {
|
|
477
|
-
//opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360
|
|
478
|
-
const css = (animationKeyframes ? animationKeyframes : "") + ".resize-triggers { " + (animationStyle ? animationStyle : "") + "visibility: hidden; opacity: 0; } " + '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',
|
|
479
|
-
head = doc.head || doc.getElementsByTagName("head")[0],
|
|
480
|
-
style = doc.createElement("style");
|
|
481
|
-
style.id = "detectElementResize";
|
|
482
|
-
style.type = "text/css";
|
|
483
|
-
if (nonce != null) {
|
|
484
|
-
style.setAttribute("nonce", nonce);
|
|
485
|
-
}
|
|
486
|
-
if (style.styleSheet) {
|
|
487
|
-
style.styleSheet.cssText = css;
|
|
488
|
-
} else {
|
|
489
|
-
style.appendChild(doc.createTextNode(css));
|
|
490
|
-
}
|
|
491
|
-
head.appendChild(style);
|
|
492
|
-
}
|
|
493
|
-
};
|
|
494
|
-
const addResizeListener = function (element, fn) {
|
|
495
|
-
if (attachEvent) {
|
|
496
|
-
element.attachEvent("onresize", fn);
|
|
497
|
-
} else {
|
|
498
|
-
if (!element.__resizeTriggers__) {
|
|
499
|
-
const doc = element.ownerDocument;
|
|
500
|
-
const elementStyle = windowObject.getComputedStyle(element);
|
|
501
|
-
if (elementStyle && elementStyle.position === "static") {
|
|
502
|
-
element.style.position = "relative";
|
|
503
|
-
}
|
|
504
|
-
createStyles(doc);
|
|
505
|
-
element.__resizeLast__ = {};
|
|
506
|
-
element.__resizeListeners__ = [];
|
|
507
|
-
(element.__resizeTriggers__ = doc.createElement("div")).className = "resize-triggers";
|
|
508
|
-
const expandTrigger = doc.createElement("div");
|
|
509
|
-
expandTrigger.className = "expand-trigger";
|
|
510
|
-
expandTrigger.appendChild(doc.createElement("div"));
|
|
511
|
-
const contractTrigger = doc.createElement("div");
|
|
512
|
-
contractTrigger.className = "contract-trigger";
|
|
513
|
-
element.__resizeTriggers__.appendChild(expandTrigger);
|
|
514
|
-
element.__resizeTriggers__.appendChild(contractTrigger);
|
|
515
|
-
element.appendChild(element.__resizeTriggers__);
|
|
516
|
-
resetTriggers(element);
|
|
517
|
-
element.addEventListener("scroll", scrollListener, true);
|
|
518
|
-
|
|
519
|
-
/* Listen for a css animation to detect element display/re-attach */
|
|
520
|
-
if (animationStartEvent) {
|
|
521
|
-
element.__resizeTriggers__.__animationListener__ = function animationListener(e) {
|
|
522
|
-
if (e.animationName === animationName) {
|
|
523
|
-
resetTriggers(element);
|
|
524
|
-
}
|
|
525
|
-
};
|
|
526
|
-
element.__resizeTriggers__.addEventListener(animationStartEvent, element.__resizeTriggers__.__animationListener__);
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
element.__resizeListeners__.push(fn);
|
|
530
|
-
}
|
|
531
|
-
};
|
|
532
|
-
const removeResizeListener = function (element, fn) {
|
|
533
|
-
if (attachEvent) {
|
|
534
|
-
element.detachEvent("onresize", fn);
|
|
535
|
-
} else {
|
|
536
|
-
element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);
|
|
537
|
-
if (!element.__resizeListeners__.length) {
|
|
538
|
-
element.removeEventListener("scroll", scrollListener, true);
|
|
539
|
-
if (element.__resizeTriggers__.__animationListener__) {
|
|
540
|
-
element.__resizeTriggers__.removeEventListener(animationStartEvent, element.__resizeTriggers__.__animationListener__);
|
|
541
|
-
element.__resizeTriggers__.__animationListener__ = null;
|
|
542
|
-
}
|
|
543
|
-
try {
|
|
544
|
-
element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__);
|
|
545
|
-
} catch (e) {
|
|
546
|
-
// Preact compat; see developit/preact-compat/issues/228
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
};
|
|
551
|
-
return {
|
|
552
|
-
addResizeListener,
|
|
553
|
-
removeResizeListener
|
|
554
|
-
};
|
|
555
|
-
}
|
|
368
|
+
var _path$1;
|
|
369
|
+
function _extends$2() { return _extends$2 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$2.apply(null, arguments); }
|
|
370
|
+
var SvgControlMenuButton = function SvgControlMenuButton(props) {
|
|
371
|
+
return /*#__PURE__*/React.createElement("svg", _extends$2({
|
|
372
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
373
|
+
width: 8,
|
|
374
|
+
height: 8,
|
|
375
|
+
fill: "currentColor",
|
|
376
|
+
viewBox: "0 0 8 8"
|
|
377
|
+
}, props), _path$1 || (_path$1 = /*#__PURE__*/React.createElement("path", {
|
|
378
|
+
d: "m.72 7.64 6.39-3.2a.5.5 0 0 0 0-.89L.72.36A.5.5 0 0 0 0 .81v6.38c0 .37.4.61.72.45"
|
|
379
|
+
})));
|
|
380
|
+
};
|
|
556
381
|
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
} = this.props;
|
|
578
|
-
if (this._parentNode) {
|
|
579
|
-
// Guard against AutoSizer component being removed from the DOM immediately after being added.
|
|
580
|
-
// This can result in invalid style values which can result in NaN values if we don't handle them.
|
|
581
|
-
// See issue #150 for more context.
|
|
582
|
-
|
|
583
|
-
const style = window.getComputedStyle(this._parentNode) || {};
|
|
584
|
-
const paddingLeft = parseFloat(style.paddingLeft || "0");
|
|
585
|
-
const paddingRight = parseFloat(style.paddingRight || "0");
|
|
586
|
-
const paddingTop = parseFloat(style.paddingTop || "0");
|
|
587
|
-
const paddingBottom = parseFloat(style.paddingBottom || "0");
|
|
588
|
-
const rect = this._parentNode.getBoundingClientRect();
|
|
589
|
-
const scaledHeight = rect.height - paddingTop - paddingBottom;
|
|
590
|
-
const scaledWidth = rect.width - paddingLeft - paddingRight;
|
|
591
|
-
const height = this._parentNode.offsetHeight - paddingTop - paddingBottom;
|
|
592
|
-
const width = this._parentNode.offsetWidth - paddingLeft - paddingRight;
|
|
593
|
-
if (!disableHeight && (this.state.height !== height || this.state.scaledHeight !== scaledHeight) || !disableWidth && (this.state.width !== width || this.state.scaledWidth !== scaledWidth)) {
|
|
594
|
-
this.setState({
|
|
595
|
-
height,
|
|
596
|
-
width,
|
|
597
|
-
scaledHeight,
|
|
598
|
-
scaledWidth
|
|
599
|
-
});
|
|
600
|
-
if (typeof onResize === "function") {
|
|
601
|
-
onResize({
|
|
602
|
-
height,
|
|
603
|
-
scaledHeight,
|
|
604
|
-
scaledWidth,
|
|
605
|
-
width
|
|
606
|
-
});
|
|
607
|
-
}
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
};
|
|
611
|
-
this._setRef = autoSizer => {
|
|
612
|
-
this._autoSizer = autoSizer;
|
|
613
|
-
};
|
|
614
|
-
}
|
|
615
|
-
componentDidMount() {
|
|
616
|
-
const {
|
|
617
|
-
nonce
|
|
618
|
-
} = this.props;
|
|
619
|
-
const parentNode = this._autoSizer ? this._autoSizer.parentNode : null;
|
|
620
|
-
if (parentNode != null && parentNode.ownerDocument && parentNode.ownerDocument.defaultView && parentNode instanceof parentNode.ownerDocument.defaultView.HTMLElement) {
|
|
621
|
-
// Delay access of parentNode until mount.
|
|
622
|
-
// This handles edge-cases where the component has already been unmounted before its ref has been set,
|
|
623
|
-
// As well as libraries like react-lite which have a slightly different lifecycle.
|
|
624
|
-
this._parentNode = parentNode;
|
|
625
|
-
|
|
626
|
-
// Use ResizeObserver from the same context where parentNode (which we will observe) was defined
|
|
627
|
-
// Using just global can result into onResize events not being emitted in cases with multiple realms
|
|
628
|
-
const ResizeObserverInstance = parentNode.ownerDocument.defaultView.ResizeObserver;
|
|
629
|
-
if (ResizeObserverInstance != null) {
|
|
630
|
-
this._resizeObserver = new ResizeObserverInstance(() => {
|
|
631
|
-
// Guard against "ResizeObserver loop limit exceeded" error;
|
|
632
|
-
// could be triggered if the state update causes the ResizeObserver handler to run long.
|
|
633
|
-
// See https://github.com/bvaughn/react-virtualized-auto-sizer/issues/55
|
|
634
|
-
this._timeoutId = setTimeout(this._onResize, 0);
|
|
382
|
+
var css_248z$u = ".gn-collapse-button{--_--focus-outline-color:var(--g-color-line-focus);--_--focus-outline-offset:0;align-items:center;background:none;border:none;border-top:1px solid var(--gn-aside-header-divider-horizontal-color,var(--_--horizontal-divider-line-color));box-sizing:content-box;color:inherit;cursor:pointer;display:flex;font-family:var(--g-text-body-font-family);font-size:inherit;font-weight:var(--g-text-body-font-weight);justify-content:center;min-height:20px;outline:none;padding:0;position:relative;width:100%}.gn-collapse-button:before{content:\"\";inset:0 2px 2px;position:absolute;z-index:-1}.gn-collapse-button:focus-visible:before{outline:var(--_--focus-outline-color) solid 2px;outline-offset:var(--_--focus-outline-offset)}.gn-collapse-button:not(.gn-collapse-button_compact) .gn-collapse-button__icon{transform:rotate(180deg)}.gn-collapse-button:hover .gn-collapse-button__icon{color:var(--g-color-text-primary)}.gn-collapse-button__icon{color:var(--g-color-text-secondary)}";
|
|
383
|
+
styleInject(css_248z$u);
|
|
384
|
+
|
|
385
|
+
const b$v = block('collapse-button');
|
|
386
|
+
const CollapseButton = ({ className }) => {
|
|
387
|
+
const { compact, onChangeCompact } = useAsideHeaderContext();
|
|
388
|
+
const { expandTitle, collapseTitle, collapseButtonWrapper } = useAsideHeaderInnerContext();
|
|
389
|
+
const onCollapseButtonClick = useCallback(() => {
|
|
390
|
+
const newCompact = !compact;
|
|
391
|
+
onChangeCompact === null || onChangeCompact === undefined ? undefined : onChangeCompact(newCompact);
|
|
392
|
+
}, [compact, onChangeCompact]);
|
|
393
|
+
const buttonTitle = compact
|
|
394
|
+
? expandTitle || i18n$3('button_expand')
|
|
395
|
+
: collapseTitle || i18n$3('button_collapse');
|
|
396
|
+
const defaultButton = (React__default.createElement("button", { className: b$v({ compact: compact }, className), onClick: onCollapseButtonClick, title: buttonTitle },
|
|
397
|
+
React__default.createElement(Icon, { data: SvgControlMenuButton, className: b$v('icon'), width: "16", height: "10" })));
|
|
398
|
+
if (collapseButtonWrapper) {
|
|
399
|
+
return collapseButtonWrapper(defaultButton, {
|
|
400
|
+
compact,
|
|
401
|
+
onChangeCompact,
|
|
635
402
|
});
|
|
636
|
-
this._resizeObserver.observe(parentNode);
|
|
637
|
-
} else {
|
|
638
|
-
// Defer requiring resize handler in order to support server-side rendering.
|
|
639
|
-
// See issue #41
|
|
640
|
-
this._detectElementResize = createDetectElementResize(nonce);
|
|
641
|
-
this._detectElementResize.addResizeListener(parentNode, this._onResize);
|
|
642
|
-
}
|
|
643
|
-
this._onResize();
|
|
644
|
-
}
|
|
645
|
-
}
|
|
646
|
-
componentWillUnmount() {
|
|
647
|
-
if (this._parentNode) {
|
|
648
|
-
if (this._detectElementResize) {
|
|
649
|
-
this._detectElementResize.removeResizeListener(this._parentNode, this._onResize);
|
|
650
|
-
}
|
|
651
|
-
if (this._timeoutId !== null) {
|
|
652
|
-
clearTimeout(this._timeoutId);
|
|
653
|
-
}
|
|
654
|
-
if (this._resizeObserver) {
|
|
655
|
-
this._resizeObserver.disconnect();
|
|
656
|
-
}
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
render() {
|
|
660
|
-
const {
|
|
661
|
-
children,
|
|
662
|
-
defaultHeight,
|
|
663
|
-
defaultWidth,
|
|
664
|
-
disableHeight = false,
|
|
665
|
-
disableWidth = false,
|
|
666
|
-
doNotBailOutOnEmptyChildren = false,
|
|
667
|
-
nonce,
|
|
668
|
-
onResize,
|
|
669
|
-
style = {},
|
|
670
|
-
tagName = "div",
|
|
671
|
-
...rest
|
|
672
|
-
} = this.props;
|
|
673
|
-
const {
|
|
674
|
-
height,
|
|
675
|
-
scaledHeight,
|
|
676
|
-
scaledWidth,
|
|
677
|
-
width
|
|
678
|
-
} = this.state;
|
|
679
|
-
|
|
680
|
-
// Outer div should not force width/height since that may prevent containers from shrinking.
|
|
681
|
-
// Inner component should overflow and use calculated width/height.
|
|
682
|
-
// See issue #68 for more information.
|
|
683
|
-
const outerStyle = {
|
|
684
|
-
overflow: "visible"
|
|
685
|
-
};
|
|
686
|
-
const childParams = {};
|
|
687
|
-
|
|
688
|
-
// Avoid rendering children before the initial measurements have been collected.
|
|
689
|
-
// At best this would just be wasting cycles.
|
|
690
|
-
let bailoutOnChildren = false;
|
|
691
|
-
if (!disableHeight) {
|
|
692
|
-
if (height === 0) {
|
|
693
|
-
bailoutOnChildren = true;
|
|
694
|
-
}
|
|
695
|
-
outerStyle.height = 0;
|
|
696
|
-
childParams.height = height;
|
|
697
|
-
childParams.scaledHeight = scaledHeight;
|
|
698
|
-
}
|
|
699
|
-
if (!disableWidth) {
|
|
700
|
-
if (width === 0) {
|
|
701
|
-
bailoutOnChildren = true;
|
|
702
|
-
}
|
|
703
|
-
outerStyle.width = 0;
|
|
704
|
-
childParams.width = width;
|
|
705
|
-
childParams.scaledWidth = scaledWidth;
|
|
706
|
-
}
|
|
707
|
-
if (doNotBailOutOnEmptyChildren) {
|
|
708
|
-
bailoutOnChildren = false;
|
|
709
403
|
}
|
|
710
|
-
return
|
|
711
|
-
|
|
712
|
-
style: {
|
|
713
|
-
...outerStyle,
|
|
714
|
-
...style
|
|
715
|
-
},
|
|
716
|
-
...rest
|
|
717
|
-
}, !bailoutOnChildren && children(childParams));
|
|
718
|
-
}
|
|
719
|
-
}
|
|
404
|
+
return defaultButton;
|
|
405
|
+
};
|
|
720
406
|
|
|
721
407
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
722
408
|
|
|
@@ -1378,14 +1064,14 @@ function requireDebounce () {
|
|
|
1378
1064
|
var debounceExports = requireDebounce();
|
|
1379
1065
|
var debounceFn = /*@__PURE__*/getDefaultExportFromCjs(debounceExports);
|
|
1380
1066
|
|
|
1381
|
-
var css_248z$
|
|
1382
|
-
styleInject(css_248z$
|
|
1067
|
+
var css_248z$t = ".gn-composite-bar-highlighted-item{--_--background-color:var(--g-color-base-background);--_--item-icon-background-size:38px;--_--item-background-color-hover:var(--g-color-base-selection-hover);--_--item-selected-background-color-active:var(--g-color-base-selection);display:flex;justify-content:center;position:absolute;z-index:10000}.gn-composite-bar-highlighted-item__icon{align-items:center;background-color:var(--gn-aside-header-background-color,var(--_--background-color));border-radius:7px;box-shadow:0 8px 20px 0 var(--g-color-sfx-shadow);cursor:pointer;display:flex;height:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));justify-content:center;overflow:hidden;position:relative;transform:translateY(1px);width:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size))}.gn-composite-bar-highlighted-item__icon:before{background-color:var(--gn-aside-header-item-current-background-color,var(--_--item-selected-background-color-active));content:\"\";height:100%;position:absolute;width:100%;z-index:-1}.gn-composite-bar-highlighted-item__icon:hover:before{background-color:var(--gn-aside-header-item-background-color-hover,var(--_--item-background-color-hover))}";
|
|
1068
|
+
styleInject(css_248z$t);
|
|
1383
1069
|
|
|
1384
|
-
const b$
|
|
1070
|
+
const b$u = block('composite-bar-highlighted-item');
|
|
1385
1071
|
const DEBOUNCE_TIME = 200;
|
|
1386
1072
|
const HighlightedItem = ({ iconRef, iconNode, onClick, onClickCapture, }) => {
|
|
1387
1073
|
const { openModalSubscriber } = useAsideHeaderInnerContext();
|
|
1388
|
-
const [
|
|
1074
|
+
const [position, setPosition] = useState({
|
|
1389
1075
|
top: 0,
|
|
1390
1076
|
left: 0,
|
|
1391
1077
|
width: 0,
|
|
@@ -1405,193 +1091,74 @@ const HighlightedItem = ({ iconRef, iconNode, onClick, onClickCapture, }) => {
|
|
|
1405
1091
|
const handleResize = useCallback(() => handleResizeDebounced(), [handleResizeDebounced]);
|
|
1406
1092
|
useEffect(() => {
|
|
1407
1093
|
if (!isModalOpen) {
|
|
1408
|
-
return;
|
|
1094
|
+
return undefined;
|
|
1409
1095
|
}
|
|
1410
1096
|
handleResize();
|
|
1411
1097
|
window.addEventListener('resize', handleResize);
|
|
1412
|
-
return () =>
|
|
1098
|
+
return () => {
|
|
1099
|
+
window.removeEventListener('resize', handleResize);
|
|
1100
|
+
};
|
|
1413
1101
|
}, [handleResize, isModalOpen]);
|
|
1414
1102
|
openModalSubscriber === null || openModalSubscriber === undefined ? undefined : openModalSubscriber((open) => {
|
|
1415
|
-
setIsModalOpen(open);
|
|
1416
|
-
});
|
|
1417
|
-
if (!iconNode || !isModalOpen) {
|
|
1418
|
-
return null;
|
|
1419
|
-
}
|
|
1420
|
-
return (React__default.createElement(Portal, null,
|
|
1421
|
-
React__default.createElement("div", { className: b$s(), style: { left, top, width, height }, onClick: onClick, onClickCapture: onClickCapture, "data-toast": true },
|
|
1422
|
-
React__default.createElement("div", { className: b$s('icon') }, iconNode))));
|
|
1423
|
-
};
|
|
1424
|
-
HighlightedItem.displayName = 'HighlightedItem';
|
|
1425
|
-
|
|
1426
|
-
const ITEM_TYPE_REGULAR = 'regular';
|
|
1427
|
-
const COLLAPSE_ITEM_ID = 'collapse-item-id';
|
|
1428
|
-
const POPUP_PLACEMENT = ['right-start', 'right-end', 'right'];
|
|
1429
|
-
const POPUP_ITEM_HEIGHT = 28;
|
|
1430
|
-
|
|
1431
|
-
function getItemHeight$1(item) {
|
|
1432
|
-
if (!isMenuItem(item)) {
|
|
1433
|
-
return ITEM_HEIGHT;
|
|
1434
|
-
}
|
|
1435
|
-
switch (item.type) {
|
|
1436
|
-
case 'action':
|
|
1437
|
-
return 50;
|
|
1438
|
-
case 'divider':
|
|
1439
|
-
return 15;
|
|
1440
|
-
default:
|
|
1441
|
-
return ITEM_HEIGHT;
|
|
1442
|
-
}
|
|
1443
|
-
}
|
|
1444
|
-
function getItemsHeight(items) {
|
|
1445
|
-
return items.reduce((sum, item) => sum + getItemHeight$1(item), 0);
|
|
1446
|
-
}
|
|
1447
|
-
function getSelectedItemIndex$1(items) {
|
|
1448
|
-
const index = items.findIndex(({ current }) => Boolean(current));
|
|
1449
|
-
return index === -1 ? undefined : index;
|
|
1450
|
-
}
|
|
1451
|
-
function getPinnedItems(items) {
|
|
1452
|
-
const pinnedItems = [];
|
|
1453
|
-
for (const item of items) {
|
|
1454
|
-
if (item.pinned) {
|
|
1455
|
-
pinnedItems.push(item);
|
|
1456
|
-
}
|
|
1457
|
-
else if (item.type === 'divider') {
|
|
1458
|
-
if (pinnedItems.length > 0 && pinnedItems[pinnedItems.length - 1].type !== 'divider') {
|
|
1459
|
-
pinnedItems.push(item);
|
|
1460
|
-
}
|
|
1461
|
-
}
|
|
1462
|
-
}
|
|
1463
|
-
return pinnedItems;
|
|
1464
|
-
}
|
|
1465
|
-
function getItemsMinHeight(items) {
|
|
1466
|
-
const pinnedItems = getPinnedItems(items);
|
|
1467
|
-
const afterMoreButtonItems = items.filter((item) => item.afterMoreButton);
|
|
1468
|
-
return (getItemsHeight(pinnedItems) +
|
|
1469
|
-
getItemsHeight(afterMoreButtonItems) +
|
|
1470
|
-
(pinnedItems.length === items.length ? 0 : ITEM_HEIGHT));
|
|
1471
|
-
}
|
|
1472
|
-
function getMoreButtonItem(menuMoreTitle) {
|
|
1473
|
-
return {
|
|
1474
|
-
id: COLLAPSE_ITEM_ID,
|
|
1475
|
-
title: menuMoreTitle,
|
|
1476
|
-
icon: Ellipsis,
|
|
1477
|
-
iconSize: 18,
|
|
1478
|
-
};
|
|
1479
|
-
}
|
|
1480
|
-
function getAutosizeListItems(items, height, collapseItem) {
|
|
1481
|
-
var _a, _b, _c;
|
|
1482
|
-
const afterMoreButtonItems = items.filter((item) => item.afterMoreButton);
|
|
1483
|
-
const regularItems = items.filter((item) => !item.afterMoreButton);
|
|
1484
|
-
const listItems = [...regularItems, ...afterMoreButtonItems];
|
|
1485
|
-
const allItemsHeight = getItemsHeight(listItems);
|
|
1486
|
-
if (allItemsHeight <= height) {
|
|
1487
|
-
return { listItems, collapseItems: [] };
|
|
1488
|
-
}
|
|
1489
|
-
const collapseItemHeight = getItemHeight$1(collapseItem);
|
|
1490
|
-
listItems.splice(regularItems.length, 0, collapseItem);
|
|
1491
|
-
const collapseItems = [];
|
|
1492
|
-
let listHeight = allItemsHeight + collapseItemHeight;
|
|
1493
|
-
let index = listItems.length;
|
|
1494
|
-
while (listHeight > height) {
|
|
1495
|
-
if (index === 0) {
|
|
1496
|
-
break;
|
|
1497
|
-
}
|
|
1498
|
-
index--;
|
|
1499
|
-
const item = listItems[index];
|
|
1500
|
-
if (item.pinned || item.id === COLLAPSE_ITEM_ID || item.afterMoreButton) {
|
|
1501
|
-
continue;
|
|
1502
|
-
}
|
|
1503
|
-
if (item.type === 'divider') {
|
|
1504
|
-
if (index + 1 < listItems.length && ((_a = listItems[index + 1]) === null || _a === undefined ? undefined : _a.type) === 'divider') {
|
|
1505
|
-
listHeight -= getItemHeight$1(item);
|
|
1506
|
-
listItems.splice(index, 1);
|
|
1507
|
-
}
|
|
1508
|
-
continue;
|
|
1509
|
-
}
|
|
1510
|
-
listHeight -= getItemHeight$1(item);
|
|
1511
|
-
collapseItems.unshift(...listItems.splice(index, 1));
|
|
1512
|
-
}
|
|
1513
|
-
if (((_b = listItems[index]) === null || _b === undefined ? undefined : _b.type) === 'divider' &&
|
|
1514
|
-
(index === 0 || ((_c = listItems[index - 1]) === null || _c === undefined ? undefined : _c.type) === 'divider')) {
|
|
1515
|
-
listItems.splice(index, 1);
|
|
1103
|
+
setIsModalOpen(open);
|
|
1104
|
+
});
|
|
1105
|
+
if (!iconNode || !isModalOpen) {
|
|
1106
|
+
return null;
|
|
1516
1107
|
}
|
|
1517
|
-
return
|
|
1518
|
-
}
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1108
|
+
return (React__default.createElement(Portal, null,
|
|
1109
|
+
React__default.createElement("div", { className: b$u(), style: position, onClick: onClick, onClickCapture: onClickCapture, "data-toast": true },
|
|
1110
|
+
React__default.createElement("div", { className: b$u('icon') }, iconNode))));
|
|
1111
|
+
};
|
|
1112
|
+
HighlightedItem.displayName = 'HighlightedItem';
|
|
1522
1113
|
|
|
1523
|
-
|
|
1524
|
-
|
|
1114
|
+
const ITEM_TYPE_REGULAR = 'regular';
|
|
1115
|
+
const COLLAPSE_ITEM_ID = 'collapse-item-id';
|
|
1525
1116
|
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1117
|
+
var css_248z$s = ".gn-composite-bar-item{--gn-composite-bar-item-action-size:36px;--_--horizontal-divider-line-color:var(--g-color-line-generic);--_--item-background-color-hover:var(--g-color-base-simple-hover);--_--item-general-icon-color:var(--g-color-text-primary);--_--item-icon-color:var(--g-color-text-complementary);--_--item-text-color:var(--g-color-text-primary);--_--item-collapsed-radius:7px;--_--item-selected-text-color:var(--g-color-text-primary);--_--item-selected-background-color:var(--g-color-base-selection);align-items:center;background:none;border:none;color:inherit;cursor:pointer;display:flex;font:inherit;height:100%;min-width:0;outline:inherit;padding:0;text-decoration:inherit;width:100%}.gn-composite-bar-item:focus-visible{outline:solid var(--g-color-line-misc);outline-offset:-2px}.gn-composite-bar-item__icon{color:var(--gn-aside-header-item-icon-color,var(--_--item-icon-color))}.gn-composite-bar-item_current .gn-composite-bar-item__icon{color:var(--gn-aside-header-item-current-icon-color,var(--gn-aside-header-item-icon-color,var(--_--item-icon-color)))}.gn-composite-bar-highlighted-item .gn-composite-bar-item__icon,.gn-composite-bar_subheader .gn-composite-bar-item__icon,.gn-footer-item .gn-composite-bar-item__icon{color:var(--gn-aside-header-general-item-icon-color,var(--_--item-general-icon-color))}.gn-composite-bar-highlighted-item.gn-composite-bar-item_current .gn-composite-bar-item__icon,.gn-composite-bar_subheader .gn-composite-bar-item_current .gn-composite-bar-item__icon,.gn-footer-item.gn-composite-bar-item_current .gn-composite-bar-item__icon{color:var(--gn-aside-header-item-current-icon-color,var(--gn-aside-header-general-item-icon-color,var(--_--item-general-icon-color)))}.gn-composite-bar-item__icon-tooltip .g-action-tooltip__description{color:var(--g-color-text-light-primary);margin-block-start:0}.gn-composite-bar-item__icon-place{align-items:center;display:flex;flex-shrink:0;height:100%;justify-content:center;width:var(--gn-aside-header-min-width)}.gn-composite-bar-item__title{align-items:center;display:flex;margin:0 var(--g-spacing-4) 0 var(--g-spacing-2);overflow:hidden}.gn-composite-bar-item__title-text{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:var(--gn-aside-header-item-text-color,var(--_--item-text-color));display:-webkit-box;overflow:hidden;text-align:start}.gn-composite-bar-item_current .gn-composite-bar-item__title-text{color:var(--gn-aside-header-item-current-text-color,var(--_--item-selected-text-color))}.gn-composite-bar-item__title-adornment{margin:0 10px}.gn-composite-bar-item__collapse-item{--_--item-icon-color:var(--g-color-text-misc);align-items:center;background:none;border:none;color:inherit;cursor:pointer;display:flex;font:inherit;height:100%;outline:inherit;padding:0 16px;text-decoration:inherit;width:100%}.gn-composite-bar-item__collapse-item:focus-visible{outline:solid var(--g-color-line-misc);outline-offset:-2px}.gn-composite-bar-item__collapse-item-icon{color:var(--gn-aside-header-item-icon-color,var(--_--item-icon-color));margin-right:10px}.gn-composite-bar-item__collapse-item .gn-composite-bar-item__title-adornment{margin-right:0}.gn-composite-bar-item__menu-divider{border-top:1px solid var(--gn-aside-header-divider-horizontal-color,var(--_--horizontal-divider-line-color));cursor:default;margin:0 10px;width:100%}.gn-composite-bar-item__collapse-items-popup-content{padding:4px 0}.gn-composite-bar-item__link{align-items:center;display:flex;height:100%;width:100%}.gn-composite-bar-item__link,.gn-composite-bar-item__link:active,.gn-composite-bar-item__link:focus,.gn-composite-bar-item__link:hover,.gn-composite-bar-item__link:visited{color:inherit;outline:none;text-decoration:none}.gn-composite-bar-item__btn-icon{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.gn-composite-bar-item_type_action{background:var(--g-color-base-float);border-radius:var(--gn-composite-bar-item-action-size);box-shadow:0 0 0 1px rgba(0,0,0,.03),0 5px 6px rgba(0,0,0,.12);height:var(--gn-composite-bar-item-action-size);justify-content:center;margin-bottom:var(--g-spacing-2);transition:transform .1s ease-out,background-color .15s linear}.gn-composite-bar-item_type_action:focus-visible{box-shadow:0 0 0 2px var(--g-color-line-misc)}.gn-composite-bar-item_type_action:hover{background-color:var(--g-color-base-float-hover)}.gn-composite-bar-item_type_action:active{box-shadow:0 1px 2px var(--g-color-sfx-shadow);transform:scale(.96);transition:none}.gn-composite-bar-item_type_action .gn-composite-bar-item__icon-place{width:var(--gn-composite-bar-item-action-size)}.gn-composite-bar-item_type_action.gn-footer-item{width:calc(100% - 20px)}.gn-composite-bar-item__icon-tooltip_item-type_action{margin-left:10px}.gn-composite-bar-item:not(.gn-composite-bar-item_compact).gn-composite-bar-item_current.gn-composite-bar-item_type_regular{background-color:var(--gn-aside-header-item-current-background-color,var(--_--item-selected-background-color));border-radius:var(--gn-aside-header-item-expanded-radius)}.gn-composite-bar-item:not(.gn-composite-bar-item_compact):hover.gn-composite-bar-item_type_regular{background-color:var(--gn-aside-header-item-current-background-color-hover,var(--gn-aside-header-item-current-background-color,var(--_--item-selected-background-color)));border-radius:var(--gn-aside-header-item-expanded-radius)}.gn-composite-bar-item:not(.gn-composite-bar-item_compact):not(.gn-composite-bar-item_current):hover.gn-composite-bar-item_type_regular{background-color:var(--gn-aside-header-item-background-color-hover,var(--_--item-background-color-hover));border-radius:var(--gn-aside-header-item-expanded-radius)}.gn-composite-bar-item_compact.gn-composite-bar-item_type_action{width:var(--gn-composite-bar-item-action-size)}.gn-composite-bar-item_compact.gn-composite-bar-item_type_action .gn-composite-bar-item__title{margin:0}.gn-composite-bar-item_compact.gn-composite-bar-item_current.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon{background-color:transparent;position:relative}.gn-composite-bar-item_compact.gn-composite-bar-item_current.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon:before{background-color:var(--gn-aside-header-item-current-background-color,var(--_--item-selected-background-color));border-radius:var(--gn-aside-header-item-collapsed-radius,var(--_--item-collapsed-radius));content:\"\";height:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));left:50%;margin-left:-18px;margin-top:-18px;position:absolute;top:50%;width:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));z-index:-1}.gn-composite-bar-item_compact:hover.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon{background-color:transparent;position:relative}.gn-composite-bar-item_compact:hover.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon:before{background-color:var(--gn-aside-header-item-current-background-color-hover,var(--gn-aside-header-item-current-background-color,var(--_--item-selected-background-color)));border-radius:var(--gn-aside-header-item-collapsed-radius,var(--_--item-collapsed-radius));content:\"\";height:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));left:50%;margin-left:-18px;margin-top:-18px;position:absolute;top:50%;width:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));z-index:-1}.gn-composite-bar-item_compact:not(.gn-composite-bar-item_current):hover.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon{background-color:transparent;position:relative}.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{background-color:var(--gn-aside-header-item-background-color-hover,var(--_--item-background-color-hover));border-radius:var(--gn-aside-header-item-collapsed-radius,var(--_--item-collapsed-radius));content:\"\";height:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));left:50%;margin-left:-18px;margin-top:-18px;position:absolute;top:50%;width:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));z-index:-1}";
|
|
1118
|
+
styleInject(css_248z$s);
|
|
1119
|
+
|
|
1120
|
+
const b$t = block('composite-bar-item');
|
|
1121
|
+
function renderItemTitle(params) {
|
|
1122
|
+
let titleNode = React__default.createElement("div", { className: b$t('title-text') }, params.title);
|
|
1123
|
+
if (params.rightAdornment) {
|
|
1530
1124
|
titleNode = (React__default.createElement(React__default.Fragment, null,
|
|
1531
1125
|
titleNode,
|
|
1532
|
-
React__default.createElement("div", { className: b$
|
|
1126
|
+
React__default.createElement("div", { className: b$t('title-adornment') }, params.rightAdornment)));
|
|
1533
1127
|
}
|
|
1534
1128
|
return titleNode;
|
|
1535
1129
|
}
|
|
1536
1130
|
const defaultPopupPlacement = ['right-end'];
|
|
1537
1131
|
const defaultPopupOffset = { mainAxis: 8, crossAxis: -20 };
|
|
1538
1132
|
const Item$1 = (props) => {
|
|
1539
|
-
const {
|
|
1540
|
-
const { compact } = useAsideHeaderContext();
|
|
1541
|
-
const [open, toggleOpen] = React__default.useState(false);
|
|
1133
|
+
const { className, onMouseLeave, onMouseEnter, popupVisible = false, popupRef: anchoreRefProp, popupPlacement = defaultPopupPlacement, popupOffset = defaultPopupOffset, popupKeepMounted, renderPopupContent, onOpenChangePopup, onItemClick, onItemClickCapture, itemWrapper, bringForward, rightAdornment, title, href, qa, compact, } = props;
|
|
1542
1134
|
const ref = React__default.useRef(null);
|
|
1543
|
-
const anchorRef =
|
|
1135
|
+
const anchorRef = (anchoreRefProp === null || anchoreRefProp === undefined ? undefined : anchoreRefProp.current) ? anchoreRefProp : ref;
|
|
1544
1136
|
const highlightedRef = React__default.useRef(null);
|
|
1545
|
-
const type =
|
|
1546
|
-
const current =
|
|
1547
|
-
const
|
|
1548
|
-
const
|
|
1549
|
-
const
|
|
1550
|
-
const
|
|
1551
|
-
const collapsedItem = item.id === COLLAPSE_ITEM_ID;
|
|
1552
|
-
const handleClosePopup = React__default.useCallback((event) => {
|
|
1553
|
-
var _a;
|
|
1554
|
-
if (event instanceof MouseEvent &&
|
|
1555
|
-
event.target &&
|
|
1556
|
-
((_a = ref.current) === null || _a === undefined ? undefined : _a.contains(event.target))) {
|
|
1557
|
-
return;
|
|
1558
|
-
}
|
|
1559
|
-
onClosePopup === null || onClosePopup === undefined ? undefined : onClosePopup();
|
|
1560
|
-
}, [onClosePopup]);
|
|
1561
|
-
const handleOpenChangePopup = React__default.useCallback((open, event, reason) => {
|
|
1137
|
+
const type = props.type || ITEM_TYPE_REGULAR;
|
|
1138
|
+
const current = props.current || false;
|
|
1139
|
+
const icon = props.icon;
|
|
1140
|
+
const iconSize = props.iconSize || ASIDE_HEADER_ICON_SIZE;
|
|
1141
|
+
const iconQa = props.iconQa;
|
|
1142
|
+
const handleOpenChangePopup = React__default.useCallback((newOpen, event, reason) => {
|
|
1562
1143
|
var _a;
|
|
1563
1144
|
if (event instanceof MouseEvent &&
|
|
1564
1145
|
event.target &&
|
|
1565
1146
|
((_a = ref.current) === null || _a === undefined ? undefined : _a.contains(event.target))) {
|
|
1566
1147
|
return;
|
|
1567
1148
|
}
|
|
1568
|
-
onOpenChangePopup === null || onOpenChangePopup === undefined ? undefined : onOpenChangePopup(
|
|
1569
|
-
}, [
|
|
1570
|
-
if (
|
|
1571
|
-
return React__default.createElement("div", { className: b$
|
|
1149
|
+
onOpenChangePopup === null || onOpenChangePopup === undefined ? undefined : onOpenChangePopup(newOpen, event, reason);
|
|
1150
|
+
}, [onOpenChangePopup]);
|
|
1151
|
+
if (type === 'divider') {
|
|
1152
|
+
return React__default.createElement("div", { className: b$t('menu-divider') });
|
|
1572
1153
|
}
|
|
1573
1154
|
const makeIconNode = (iconEl) => {
|
|
1574
|
-
return compact ?
|
|
1575
|
-
React__default.createElement("div", { onMouseEnter: () => onMouseEnter === null || onMouseEnter === undefined ? undefined : onMouseEnter(), onMouseLeave: () => onMouseLeave === null || onMouseLeave === undefined ? undefined : onMouseLeave(), className: b$r('btn-icon') }, iconEl))) : (iconEl);
|
|
1155
|
+
return compact ? React__default.createElement("div", { className: b$t('btn-icon') }, iconEl) : iconEl;
|
|
1576
1156
|
};
|
|
1577
1157
|
const makeNode = ({ icon: iconEl, title: titleEl }) => {
|
|
1578
|
-
const [Tag, tagProps] =
|
|
1579
|
-
? ['a', { href: item.link }]
|
|
1580
|
-
: ['button', {}];
|
|
1158
|
+
const [Tag, tagProps] = href ? ['a', { href }] : ['button', {}];
|
|
1581
1159
|
const createdNode = (React__default.createElement(React__default.Fragment, null,
|
|
1582
|
-
React__default.createElement(Tag, Object.assign({}, tagProps, { className: b$
|
|
1583
|
-
|
|
1584
|
-
/**
|
|
1585
|
-
* If we call onItemClick for collapsedItem then:
|
|
1586
|
-
* - User get unexpected item in onItemClick callback
|
|
1587
|
-
* - onClosePanel calls twice for each popuped item, as result it will prevent opening of panelItems
|
|
1588
|
-
*/
|
|
1589
|
-
toggleOpen(!open);
|
|
1590
|
-
onCollapseItemClick === null || onCollapseItemClick === undefined ? undefined : onCollapseItemClick();
|
|
1591
|
-
}
|
|
1592
|
-
else {
|
|
1593
|
-
onItemClick === null || onItemClick === undefined ? undefined : onItemClick(item, false, event);
|
|
1594
|
-
}
|
|
1160
|
+
React__default.createElement(Tag, Object.assign({}, tagProps, { className: b$t({ type, current, compact }, className), ref: ref, "data-qa": qa, onClick: (event) => {
|
|
1161
|
+
onItemClick === null || onItemClick === undefined ? undefined : onItemClick(props, false, event);
|
|
1595
1162
|
}, onClickCapture: onItemClickCapture, onMouseEnter: () => {
|
|
1596
1163
|
if (!compact) {
|
|
1597
1164
|
onMouseEnter === null || onMouseEnter === undefined ? undefined : onMouseEnter();
|
|
@@ -1601,65 +1168,32 @@ const Item$1 = (props) => {
|
|
|
1601
1168
|
onMouseLeave === null || onMouseLeave === undefined ? undefined : onMouseLeave();
|
|
1602
1169
|
}
|
|
1603
1170
|
} }),
|
|
1604
|
-
React__default.createElement("div", { className: b$
|
|
1605
|
-
React__default.createElement("div", { className: b$
|
|
1606
|
-
renderPopupContent && Boolean(anchorRef === null || anchorRef === undefined ? undefined : anchorRef.current) && (React__default.createElement(Popup, { strategy: "fixed", open: popupVisible, keepMounted: popupKeepMounted, placement: popupPlacement, offset: popupOffset,
|
|
1171
|
+
React__default.createElement("div", { className: b$t('icon-place'), ref: highlightedRef }, makeIconNode(iconEl)),
|
|
1172
|
+
React__default.createElement("div", { className: b$t('title'), title: typeof title === 'string' ? title : undefined }, titleEl)),
|
|
1173
|
+
renderPopupContent && Boolean(anchorRef === null || anchorRef === undefined ? undefined : anchorRef.current) && (React__default.createElement(Popup, { strategy: "fixed", open: popupVisible, keepMounted: popupKeepMounted, placement: popupPlacement, offset: popupOffset, anchorElement: anchorRef.current, onOpenChange: handleOpenChangePopup }, renderPopupContent()))));
|
|
1607
1174
|
return createdNode;
|
|
1608
1175
|
};
|
|
1609
|
-
const iconNode = icon ? (React__default.createElement(Icon, { qa: iconQa, data: icon, size: iconSize, className: b$
|
|
1610
|
-
const titleNode = renderItemTitle(
|
|
1176
|
+
const iconNode = icon ? (React__default.createElement(Icon, { qa: iconQa, data: icon, size: iconSize, className: b$t('icon') })) : null;
|
|
1177
|
+
const titleNode = renderItemTitle({ title, rightAdornment });
|
|
1611
1178
|
const params = { icon: iconNode, title: titleNode };
|
|
1612
1179
|
let highlightedNode = null;
|
|
1613
1180
|
let node;
|
|
1614
|
-
const opts = { compact: Boolean(compact), collapsed: false, item, ref };
|
|
1615
|
-
if (typeof
|
|
1616
|
-
node =
|
|
1181
|
+
const opts = { compact: Boolean(compact), collapsed: false, item: props, ref };
|
|
1182
|
+
if (typeof itemWrapper === 'function') {
|
|
1183
|
+
node = itemWrapper(params, makeNode, opts);
|
|
1617
1184
|
highlightedNode =
|
|
1618
1185
|
bringForward &&
|
|
1619
|
-
|
|
1186
|
+
itemWrapper(params, ({ icon: iconEl }) => makeIconNode(iconEl), opts);
|
|
1620
1187
|
}
|
|
1621
1188
|
else {
|
|
1622
1189
|
node = makeNode(params);
|
|
1623
1190
|
highlightedNode = bringForward && makeIconNode(iconNode);
|
|
1624
1191
|
}
|
|
1625
1192
|
return (React__default.createElement(React__default.Fragment, null,
|
|
1626
|
-
bringForward && (React__default.createElement(HighlightedItem, { iconNode: highlightedNode, iconRef: highlightedRef, onClick: (event) => onItemClick === null || onItemClick === undefined ? undefined : onItemClick(
|
|
1627
|
-
node
|
|
1628
|
-
open && collapsedItem && (collapseItems === null || collapseItems === undefined ? undefined : collapseItems.length) && Boolean(anchorRef === null || anchorRef === undefined ? undefined : anchorRef.current) && (React__default.createElement(CollapsedPopup, Object.assign({}, props, { anchorRef: ref, onClose: () => toggleOpen(false) })))));
|
|
1193
|
+
bringForward && (React__default.createElement(HighlightedItem, { iconNode: highlightedNode, iconRef: highlightedRef, onClick: (event) => onItemClick === null || onItemClick === undefined ? undefined : onItemClick(props, false, event), onClickCapture: onItemClickCapture })),
|
|
1194
|
+
node));
|
|
1629
1195
|
};
|
|
1630
1196
|
Item$1.displayName = 'Item';
|
|
1631
|
-
function CollapsedPopup({ onItemClick, collapseItems, anchorRef, onClose, }) {
|
|
1632
|
-
const { compact } = useAsideHeaderContext();
|
|
1633
|
-
return (collapseItems === null || collapseItems === undefined ? undefined : collapseItems.length) ? (React__default.createElement(Popup, { strategy: "fixed", placement: POPUP_PLACEMENT, open: true, anchorRef: anchorRef, onClose: onClose },
|
|
1634
|
-
React__default.createElement("div", { className: b$r('collapse-items-popup-content') },
|
|
1635
|
-
React__default.createElement(List, { itemClassName: b$r('root-collapse-item'), items: collapseItems, selectedItemIndex: getSelectedItemIndex$1(collapseItems), itemHeight: POPUP_ITEM_HEIGHT, itemsHeight: collapseItems.length * POPUP_ITEM_HEIGHT, virtualized: false, filterable: false, sortable: false, onItemClick: onClose, renderItem: (collapseItem) => {
|
|
1636
|
-
const makeCollapseNode = ({ title: titleEl, icon: iconEl, }) => {
|
|
1637
|
-
const [Tag, tagProps] = collapseItem.link
|
|
1638
|
-
? ['a', { href: collapseItem.link }]
|
|
1639
|
-
: ['button', {}];
|
|
1640
|
-
return (React__default.createElement(Tag, Object.assign({}, tagProps, { className: b$r('collapse-item'), onClick: (event) => {
|
|
1641
|
-
onItemClick === null || onItemClick === undefined ? undefined : onItemClick(collapseItem, true, event);
|
|
1642
|
-
} }),
|
|
1643
|
-
iconEl,
|
|
1644
|
-
titleEl));
|
|
1645
|
-
};
|
|
1646
|
-
const titleNode = renderItemTitle(collapseItem);
|
|
1647
|
-
const iconNode = collapseItem.icon && (React__default.createElement(Icon, { data: collapseItem.icon, size: 14, className: b$r('collapse-item-icon') }));
|
|
1648
|
-
const params = { title: titleNode, icon: iconNode };
|
|
1649
|
-
const opts = {
|
|
1650
|
-
compact: Boolean(compact),
|
|
1651
|
-
collapsed: true,
|
|
1652
|
-
item: collapseItem,
|
|
1653
|
-
ref: anchorRef,
|
|
1654
|
-
};
|
|
1655
|
-
if (typeof collapseItem.itemWrapper === 'function') {
|
|
1656
|
-
return collapseItem.itemWrapper(params, makeCollapseNode, opts);
|
|
1657
|
-
}
|
|
1658
|
-
else {
|
|
1659
|
-
return makeCollapseNode(params);
|
|
1660
|
-
}
|
|
1661
|
-
} })))) : null;
|
|
1662
|
-
}
|
|
1663
1197
|
|
|
1664
1198
|
const multipleTooltipContextDefaults = {
|
|
1665
1199
|
active: false,
|
|
@@ -1683,40 +1217,80 @@ class MultipleTooltipProvider extends React__default.PureComponent {
|
|
|
1683
1217
|
}
|
|
1684
1218
|
}
|
|
1685
1219
|
|
|
1686
|
-
var css_248z$
|
|
1687
|
-
styleInject(css_248z$
|
|
1220
|
+
var css_248z$r = ".g-root_theme_dark .gn-multiple-tooltip,.g-root_theme_dark-hc .gn-multiple-tooltip{--multiple-tooltip-item-bg-color:var(\n --g-color-base-float-medium,var(--g-color-private-white-100-solid)\n );--multiple-tooltip-item-active-bg-color:var(--g-color-base-float-heavy);--multiple-tooltip-backdrop-background:linear-gradient(90deg,var(--g-color-base-background) 50%,transparent);--multiple-tooltip-backdrop-filter:blur(16px)}.g-root_theme_dark-hc .gn-multiple-tooltip{--multiple-tooltip-item-bg-color:var(\n --g-color-base-float-medium,var(--g-color-private-white-150-solid)\n )}.g-root_theme_light .gn-multiple-tooltip,.g-root_theme_light-hc .gn-multiple-tooltip{--multiple-tooltip-item-bg-color:var(\n --g-color-base-float-medium,var(--g-color-private-black-550-solid)\n );--multiple-tooltip-item-active-bg-color:var(--g-color-base-float-heavy);--multiple-tooltip-backdrop-background:linear-gradient(90deg,var(--g-color-base-background) 50%,transparent);--multiple-tooltip-backdrop-filter:blur(12px)}.gn-multiple-tooltip:before{background:var(--multiple-tooltip-backdrop-background);box-shadow:none;content:\"\";filter:var(--multiple-tooltip-backdrop-filter);height:100%;opacity:.7;position:absolute;width:100%;z-index:-1}.g-popup.gn-multiple-tooltip__popup,.gn-multiple-tooltip__popup{--g-popup-background-color:transparent;--g-popup-border-color:transparent;--g-popup-border-width:0;background-color:transparent;box-shadow:none}.gn-multiple-tooltip__items-container{align-items:flex-start;display:flex;flex-direction:column;padding:32px 40px 32px 12px}.gn-multiple-tooltip__item{align-items:center;background-color:var(--multiple-tooltip-item-bg-color);border-radius:5px;box-sizing:border-box;color:var(--g-color-text-light-primary);display:flex;height:30px;margin-bottom:5px;padding:8px 12px;position:relative;transition:transform .1s ease-in-out}.gn-multiple-tooltip__item:first-child,.gn-multiple-tooltip__item:not(.gn-multiple-tooltip__item_divider)+.gn-multiple-tooltip__item:not(.gn-multiple-tooltip__item_divider){margin-top:5px}.gn-multiple-tooltip__item_divider+.gn-multiple-tooltip__item:not(.gn-multiple-tooltip__item_divider){margin-top:4px}.gn-multiple-tooltip__item_active{background-color:var(--multiple-tooltip-item-active-bg-color);transform:translateX(-12px)}.gn-multiple-tooltip__item_divider{height:15px;margin:0;visibility:hidden}";
|
|
1221
|
+
styleInject(css_248z$r);
|
|
1688
1222
|
|
|
1689
|
-
const b$
|
|
1223
|
+
const b$s = block('multiple-tooltip');
|
|
1690
1224
|
const POPUP_OFFSET = { mainAxis: 4, crossAxis: -32 };
|
|
1691
1225
|
const MultipleTooltip = ({ items, open, anchorRef, placement, }) => {
|
|
1692
1226
|
const { activeIndex, hideCollapseItemTooltip } = React__default.useContext(MultipleTooltipContext);
|
|
1693
1227
|
const activeItem = activeIndex === undefined ? null : items[activeIndex];
|
|
1694
|
-
return (React__default.createElement(Popup, { open: open, className: b$
|
|
1695
|
-
React__default.createElement("div", { className: b$
|
|
1696
|
-
React__default.createElement("div", { className: b$
|
|
1228
|
+
return (React__default.createElement(Popup, { open: open, className: b$s('popup'), anchorElement: anchorRef.current, strategy: "fixed", placement: placement, offset: POPUP_OFFSET },
|
|
1229
|
+
React__default.createElement("div", { className: b$s() },
|
|
1230
|
+
React__default.createElement("div", { className: b$s('items-container') }, items
|
|
1697
1231
|
.filter(({ type = 'regular', id }) => !hideCollapseItemTooltip ||
|
|
1698
1232
|
(id !== COLLAPSE_ITEM_ID && type !== 'action'))
|
|
1699
|
-
.map((
|
|
1700
|
-
switch (
|
|
1233
|
+
.map((currentItem, idx) => {
|
|
1234
|
+
switch (currentItem.type) {
|
|
1701
1235
|
case 'divider':
|
|
1702
|
-
return (React__default.createElement("div", { className: b$
|
|
1236
|
+
return (React__default.createElement("div", { className: b$s('item', { divider: true }), key: idx }, currentItem.title));
|
|
1703
1237
|
default:
|
|
1704
|
-
return (React__default.createElement("div", { className: b$
|
|
1705
|
-
active:
|
|
1706
|
-
}), key: idx },
|
|
1238
|
+
return (React__default.createElement("div", { className: b$s('item', {
|
|
1239
|
+
active: currentItem === activeItem,
|
|
1240
|
+
}), key: idx }, currentItem.title));
|
|
1707
1241
|
}
|
|
1708
1242
|
})))));
|
|
1709
1243
|
};
|
|
1710
1244
|
|
|
1711
|
-
|
|
1712
|
-
|
|
1245
|
+
const GAP = 2;
|
|
1246
|
+
function getGroupBlockHeight(items) {
|
|
1247
|
+
if (items.length === 0) {
|
|
1248
|
+
return ITEM_HEIGHT;
|
|
1249
|
+
}
|
|
1250
|
+
const gaps = items.length * GAP;
|
|
1251
|
+
// +1 accounts for the group header item in addition to the menu items
|
|
1252
|
+
return (items.length + 1) * ITEM_HEIGHT + gaps;
|
|
1253
|
+
}
|
|
1254
|
+
|
|
1255
|
+
function getGroupHeight(compositeItem) {
|
|
1256
|
+
var _a;
|
|
1257
|
+
const visibleItemsCount = ((_a = compositeItem.items) === null || _a === undefined ? undefined : _a.filter(({ hidden }) => !hidden)) || [];
|
|
1258
|
+
const visibleGroupItems = compositeItem.isCollapsed ? [] : visibleItemsCount;
|
|
1259
|
+
return getGroupBlockHeight(visibleGroupItems);
|
|
1260
|
+
}
|
|
1261
|
+
function getItemHeight$1(compositeItem) {
|
|
1262
|
+
var _a;
|
|
1263
|
+
if ('items' in compositeItem && compositeItem.items && ((_a = compositeItem.items) === null || _a === undefined ? undefined : _a.length) > 0) {
|
|
1264
|
+
return getGroupHeight(compositeItem);
|
|
1265
|
+
}
|
|
1266
|
+
switch (compositeItem.type) {
|
|
1267
|
+
case 'action':
|
|
1268
|
+
return 50;
|
|
1269
|
+
case 'divider':
|
|
1270
|
+
return 15;
|
|
1271
|
+
default:
|
|
1272
|
+
return ITEM_HEIGHT;
|
|
1273
|
+
}
|
|
1274
|
+
}
|
|
1275
|
+
function getItemsHeight(items) {
|
|
1276
|
+
return items.reduce((sum, item) => sum + getItemHeight$1(item), 0);
|
|
1277
|
+
}
|
|
1278
|
+
function getSelectedItemIndex$1(compositeItems) {
|
|
1279
|
+
const index = compositeItems.findIndex(({ current }) => Boolean(current));
|
|
1280
|
+
return index === -1 ? undefined : index;
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
var css_248z$q = ".gn-composite-bar{--gn-aside-header-item-expanded-radius:6px;display:flex;flex:1 1 auto;flex-direction:column;min-height:40px;width:100%}.gn-composite-bar .gn-composite-bar__root-menu-item[class]{background-color:transparent}.gn-composite-bar .gn-composite-bar__root-menu-item[class],.gn-composite-bar__menu-group-header,.gn-composite-bar__menu-group-item{margin-bottom:2px}.gn-composite-bar .gn-composite-bar__root-menu-item[class]:last-child,.gn-composite-bar__menu-group-header:last-child,.gn-composite-bar__menu-group-item:last-child{margin-bottom:0}.gn-composite-bar_scrollable{-ms-overflow-style:none;flex:1 1 auto;overflow-y:auto;scrollbar-width:none}.gn-composite-bar_scrollable::-webkit-scrollbar{display:none}.gn-composite-bar__menu-group{height:100%;position:relative;width:100%}.gn-composite-bar__menu-group:before{border-left:2px solid var(--g-color-line-generic);border-radius:0;content:\"\";height:100%;left:0;position:absolute;top:0;transition:border-radius .15s ease-out;width:100%;z-index:-1}.gn-composite-bar__menu-group:hover:before,.gn-composite-bar__menu-group_expanded:before{border-radius:var(--gn-aside-header-item-expanded-radius)}.gn-composite-bar__menu-group,.gn-composite-bar__menu-item{margin-inline:10px}.gn-composite-bar__menu-group-header,.gn-composite-bar__menu-group-item{height:36px}.gn-composite-bar__menu-group-toggle,.gn-composite-bar__menu-group-toggle-placeholder{align-items:center;cursor:pointer;display:inline-flex;height:24px;width:24px}.gn-composite-bar__menu-group-toggle{margin-left:auto}.gn-composite-bar__menu-group-icon{margin-right:var(--g-spacing-3)}";
|
|
1284
|
+
styleInject(css_248z$q);
|
|
1713
1285
|
|
|
1714
|
-
const b$
|
|
1715
|
-
const CompositeBarView = ({ type, items, onItemClick, onMoreClick,
|
|
1286
|
+
const b$r = block('composite-bar');
|
|
1287
|
+
const CompositeBarView = ({ type, items, onItemClick, onMoreClick, multipleTooltip = false, compositeId, className, onToggleGroupCollapsed, enableSorting = false, onFirstLevelSortEnd, onSecondLevelSortEnd, }) => {
|
|
1716
1288
|
const ref = useRef(null);
|
|
1717
1289
|
const tooltipRef = useRef(null);
|
|
1290
|
+
const [hoveredGroupId, setHoveredGroupId] = useState(null);
|
|
1718
1291
|
const { setValue: setMultipleTooltipContextValue, active: multipleTooltipActive, activeIndex, lastClickedItemIndex, } = useContext(MultipleTooltipContext);
|
|
1719
|
-
const {
|
|
1292
|
+
const { isExpanded } = useAsideHeaderInnerContext();
|
|
1293
|
+
const compact = !isExpanded;
|
|
1720
1294
|
React__default.useEffect(() => {
|
|
1721
1295
|
function handleBlurWindow() {
|
|
1722
1296
|
if (multipleTooltip && multipleTooltipActive) {
|
|
@@ -1796,7 +1370,7 @@ const CompositeBarView = ({ type, items, onItemClick, onMoreClick, collapseItems
|
|
|
1796
1370
|
multipleTooltip,
|
|
1797
1371
|
setMultipleTooltipContextValue,
|
|
1798
1372
|
]);
|
|
1799
|
-
const onItemClickByIndex = useCallback((itemIndex) => (item, collapsed, event) => {
|
|
1373
|
+
const onItemClickByIndex = useCallback((itemIndex, orginalItemClick) => (item, collapsed, event) => {
|
|
1800
1374
|
if (compact &&
|
|
1801
1375
|
multipleTooltip &&
|
|
1802
1376
|
itemIndex !== lastClickedItemIndex &&
|
|
@@ -1806,107 +1380,130 @@ const CompositeBarView = ({ type, items, onItemClick, onMoreClick, collapseItems
|
|
|
1806
1380
|
active: false,
|
|
1807
1381
|
});
|
|
1808
1382
|
}
|
|
1809
|
-
|
|
1383
|
+
// Handle clicks on the "more" button (collapse item)
|
|
1384
|
+
if (item.id === COLLAPSE_ITEM_ID && collapsed) {
|
|
1385
|
+
onMoreClick === null || onMoreClick === undefined ? undefined : onMoreClick();
|
|
1386
|
+
}
|
|
1387
|
+
else {
|
|
1388
|
+
onItemClick === null || onItemClick === undefined ? undefined : onItemClick(Object.assign(Object.assign({}, item), { onItemClick: orginalItemClick }), collapsed, event);
|
|
1389
|
+
}
|
|
1810
1390
|
}, [
|
|
1811
1391
|
compact,
|
|
1812
1392
|
lastClickedItemIndex,
|
|
1813
1393
|
multipleTooltip,
|
|
1814
1394
|
onItemClick,
|
|
1395
|
+
onMoreClick,
|
|
1815
1396
|
setMultipleTooltipContextValue,
|
|
1816
1397
|
]);
|
|
1398
|
+
const handleFirstLevelSortEnd = useCallback(({ oldIndex, newIndex }) => {
|
|
1399
|
+
if (onFirstLevelSortEnd) {
|
|
1400
|
+
onFirstLevelSortEnd({ oldIndex, newIndex });
|
|
1401
|
+
}
|
|
1402
|
+
}, [onFirstLevelSortEnd]);
|
|
1403
|
+
const handleSecondLevelSortEnd = useCallback((groupId) => ({ oldIndex, newIndex }) => {
|
|
1404
|
+
if (onSecondLevelSortEnd) {
|
|
1405
|
+
onSecondLevelSortEnd(groupId)({ oldIndex, newIndex });
|
|
1406
|
+
}
|
|
1407
|
+
}, [onSecondLevelSortEnd]);
|
|
1408
|
+
const renderNestedItem = useCallback((nestedItem, parentItemIndex, _nestedItemIndex, _parentGroupId) => {
|
|
1409
|
+
var _a;
|
|
1410
|
+
if ('items' in nestedItem && nestedItem.items && nestedItem.items.length > 0) {
|
|
1411
|
+
const isCollapsible = Boolean('collapsible' in nestedItem && nestedItem.collapsible);
|
|
1412
|
+
const isCollapsed = Boolean('isCollapsed' in nestedItem && nestedItem.isCollapsed);
|
|
1413
|
+
const nestedGroupListItems = ((_a = nestedItem.items) === null || _a === undefined ? undefined : _a.filter((item) => !item.hidden)) || [];
|
|
1414
|
+
const hasHeader = nestedItem.title || nestedItem.icon || isCollapsible;
|
|
1415
|
+
const isNestedGroupHovered = hoveredGroupId === nestedItem.id;
|
|
1416
|
+
let nestedGroupIcon = nestedItem.icon;
|
|
1417
|
+
if (!isCollapsed) {
|
|
1418
|
+
nestedGroupIcon = ChevronDown;
|
|
1419
|
+
}
|
|
1420
|
+
else if (isNestedGroupHovered) {
|
|
1421
|
+
nestedGroupIcon = ChevronRight;
|
|
1422
|
+
}
|
|
1423
|
+
return (React__default.createElement("div", { className: b$r('menu-group', { expanded: !isCollapsed, nested: true }) },
|
|
1424
|
+
hasHeader && (React__default.createElement(Item$1, Object.assign({}, nestedItem, { className: b$r('menu-group-header', { collapsed: isCollapsed }), icon: nestedGroupIcon, compact: compact, onMouseEnter: () => {
|
|
1425
|
+
setHoveredGroupId(nestedItem.id);
|
|
1426
|
+
}, onMouseLeave: () => {
|
|
1427
|
+
setHoveredGroupId(null);
|
|
1428
|
+
}, onItemClick: (item) => {
|
|
1429
|
+
onToggleGroupCollapsed === null || onToggleGroupCollapsed === undefined ? undefined : onToggleGroupCollapsed(item.id);
|
|
1430
|
+
} }))),
|
|
1431
|
+
!isCollapsed && (React__default.createElement(List, { items: nestedGroupListItems, sortable: enableSorting, onSortEnd: handleSecondLevelSortEnd(nestedItem.id), virtualized: false, filterable: false, itemClassName: b$r('menu-group-item'), itemsHeight: getItemsHeight, renderItem: (deepNestedItem, _isDeepItemActive, deepNestedIndex) => {
|
|
1432
|
+
return renderNestedItem(deepNestedItem, parentItemIndex, deepNestedIndex, nestedItem.id);
|
|
1433
|
+
} }))));
|
|
1434
|
+
}
|
|
1435
|
+
return (React__default.createElement(Item$1, Object.assign({ className: b$r('menu-group-item'), key: nestedItem.id }, nestedItem, { compact: compact, onMouseEnter: onMouseEnterByIndex(parentItemIndex), onMouseLeave: onMouseLeave, onItemClick: onItemClickByIndex(parentItemIndex, nestedItem.onItemClick) })));
|
|
1436
|
+
}, [
|
|
1437
|
+
compact,
|
|
1438
|
+
enableSorting,
|
|
1439
|
+
handleSecondLevelSortEnd,
|
|
1440
|
+
hoveredGroupId,
|
|
1441
|
+
onItemClickByIndex,
|
|
1442
|
+
onMouseEnterByIndex,
|
|
1443
|
+
onMouseLeave,
|
|
1444
|
+
onToggleGroupCollapsed,
|
|
1445
|
+
setHoveredGroupId,
|
|
1446
|
+
]);
|
|
1447
|
+
if (!items || items.length === 0) {
|
|
1448
|
+
return null;
|
|
1449
|
+
}
|
|
1817
1450
|
return (React__default.createElement(React__default.Fragment, null,
|
|
1818
|
-
React__default.createElement("div", { ref: tooltipRef, onMouseEnter: onTooltipMouseEnter, onMouseLeave: onTooltipMouseLeave },
|
|
1819
|
-
React__default.createElement(List, { id: compositeId, ref: ref, items: items, selectedItemIndex: type === 'menu' ? getSelectedItemIndex$1(items) : undefined, itemHeight: getItemHeight$1, itemsHeight: getItemsHeight, itemClassName: b$
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1451
|
+
React__default.createElement("div", { className: className, ref: tooltipRef, onMouseEnter: onTooltipMouseEnter, onMouseLeave: onTooltipMouseLeave },
|
|
1452
|
+
React__default.createElement(List, { id: compositeId, ref: ref, items: items, selectedItemIndex: type === 'menu' ? getSelectedItemIndex$1(items) : undefined, itemHeight: getItemHeight$1, itemsHeight: getItemsHeight, itemClassName: b$r('root-menu-item'), virtualized: false, filterable: false, sortable: enableSorting, onSortEnd: enableSorting ? handleFirstLevelSortEnd : undefined, renderItem: (item, _isItemActive, itemIndex) => {
|
|
1453
|
+
var _a;
|
|
1454
|
+
if (!item.groupId) {
|
|
1455
|
+
return (React__default.createElement(Item$1, Object.assign({}, item, { className: b$r('menu-item', { compact }), compact: compact, onMouseEnter: onMouseEnterByIndex(itemIndex), onMouseLeave: onMouseLeave, onItemClick: onItemClickByIndex(itemIndex, item.onItemClick) })));
|
|
1456
|
+
}
|
|
1457
|
+
const isCollapsible = Boolean('collapsible' in item && item.collapsible);
|
|
1458
|
+
const isCollapsed = Boolean('isCollapsed' in item && item.isCollapsed);
|
|
1459
|
+
const groupListItems = ('items' in item &&
|
|
1460
|
+
((_a = item.items) === null || _a === undefined ? undefined : _a.filter((groupItem) => !groupItem.hidden))) ||
|
|
1461
|
+
[];
|
|
1462
|
+
const hasHeader = item.title || item.icon || isCollapsible;
|
|
1463
|
+
const isUngrouped = item.id === UNGROUPED_ID;
|
|
1464
|
+
const isGroupHovered = hoveredGroupId === item.id;
|
|
1465
|
+
let groupIcon = item.icon;
|
|
1466
|
+
if (!isCollapsed) {
|
|
1467
|
+
groupIcon = ChevronDown;
|
|
1468
|
+
}
|
|
1469
|
+
else if (isGroupHovered) {
|
|
1470
|
+
groupIcon = ChevronRight;
|
|
1471
|
+
}
|
|
1472
|
+
return (React__default.createElement("div", { className: b$r('menu-group', { expanded: !isCollapsed }) },
|
|
1473
|
+
hasHeader && !isUngrouped && (React__default.createElement(Item$1, Object.assign({}, item, { className: b$r('menu-group-header', { collapsed: isCollapsed }), icon: groupIcon, compact: compact, onMouseEnter: () => {
|
|
1474
|
+
setHoveredGroupId(item.id);
|
|
1475
|
+
}, onMouseLeave: () => {
|
|
1476
|
+
setHoveredGroupId(null);
|
|
1477
|
+
}, onItemClick: (clickedItem) => {
|
|
1478
|
+
onToggleGroupCollapsed === null || onToggleGroupCollapsed === undefined ? undefined : onToggleGroupCollapsed(clickedItem.id);
|
|
1479
|
+
} }))),
|
|
1480
|
+
!isCollapsed && (React__default.createElement(List, { items: groupListItems, sortable: enableSorting, onSortEnd: handleSecondLevelSortEnd(item.id), virtualized: false, filterable: false, itemClassName: b$r('menu-group-item'), itemHeight: getItemHeight$1, itemsHeight: getItemsHeight, renderItem: (nestedItem, _isNestedItemActive, nestedItemIndex) => {
|
|
1481
|
+
return renderNestedItem(nestedItem, itemIndex, nestedItemIndex, item.id);
|
|
1482
|
+
} }))));
|
|
1825
1483
|
} })),
|
|
1826
1484
|
type === 'menu' && multipleTooltip && (React__default.createElement(MultipleTooltip, { open: compact && multipleTooltipActive, anchorRef: tooltipRef, placement: ['right-start'], items: items }))));
|
|
1827
1485
|
};
|
|
1828
|
-
const CompositeBar = ({ type, items,
|
|
1829
|
-
|
|
1486
|
+
const CompositeBar = ({ type, items, onItemClick, onMoreClick, onToggleGroupCollapsed, multipleTooltip = false, compact, compositeId, className, }) => {
|
|
1487
|
+
const visibleItems = items === null || items === undefined ? undefined : items.filter((item) => !item.hidden);
|
|
1488
|
+
if (!visibleItems || visibleItems.length === 0) {
|
|
1830
1489
|
return null;
|
|
1831
1490
|
}
|
|
1832
1491
|
let node;
|
|
1833
1492
|
if (type === 'menu') {
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
node = (React__default.createElement("div", { className: b$p({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React__default.createElement(AutoSizer, null, (size) => {
|
|
1837
|
-
const width = Number.isNaN(size.width) ? 0 : size.width;
|
|
1838
|
-
const height = Number.isNaN(size.height) ? 0 : size.height;
|
|
1839
|
-
const { listItems, collapseItems } = getAutosizeListItems(items, height, collapseItem);
|
|
1840
|
-
return (React__default.createElement("div", { style: { width, height } },
|
|
1841
|
-
React__default.createElement(CompositeBarView, { compositeId: compositeId, type: "menu", items: listItems, onItemClick: onItemClick, onMoreClick: onMoreClick, collapseItems: collapseItems, multipleTooltip: multipleTooltip })));
|
|
1842
|
-
}))));
|
|
1493
|
+
node = (React__default.createElement("div", { className: b$r({ scrollable: true }, className) },
|
|
1494
|
+
React__default.createElement(CompositeBarView, { compositeId: compositeId, type: "menu", compact: compact, items: visibleItems, onItemClick: onItemClick, onMoreClick: onMoreClick, multipleTooltip: multipleTooltip, onToggleGroupCollapsed: onToggleGroupCollapsed })));
|
|
1843
1495
|
}
|
|
1844
1496
|
else {
|
|
1845
|
-
node = (React__default.createElement("div", { className: b$
|
|
1846
|
-
React__default.createElement(CompositeBarView, { type: "subheader", items:
|
|
1497
|
+
node = (React__default.createElement("div", { className: b$r({ subheader: true }, className) },
|
|
1498
|
+
React__default.createElement(CompositeBarView, { type: "subheader", compact: compact, items: visibleItems, onItemClick: onItemClick })));
|
|
1847
1499
|
}
|
|
1848
1500
|
return React__default.createElement(MultipleTooltipProvider, null, node);
|
|
1849
1501
|
};
|
|
1850
1502
|
|
|
1851
|
-
var
|
|
1852
|
-
|
|
1853
|
-
var label_more$1 = "More";
|
|
1854
|
-
var en$3 = {
|
|
1855
|
-
button_collapse: button_collapse$1,
|
|
1856
|
-
button_expand: button_expand$1,
|
|
1857
|
-
label_more: label_more$1
|
|
1858
|
-
};
|
|
1859
|
-
|
|
1860
|
-
var button_collapse = "Свернуть";
|
|
1861
|
-
var button_expand = "Развернуть";
|
|
1862
|
-
var label_more = "Ещё";
|
|
1863
|
-
var ru$3 = {
|
|
1864
|
-
button_collapse: button_collapse,
|
|
1865
|
-
button_expand: button_expand,
|
|
1866
|
-
label_more: label_more
|
|
1867
|
-
};
|
|
1868
|
-
|
|
1869
|
-
const COMPONENT$3 = 'AsideHeader';
|
|
1870
|
-
var i18n$3 = addComponentKeysets({ en: en$3, ru: ru$3 }, `${NAMESPACE}${COMPONENT$3}`);
|
|
1871
|
-
|
|
1872
|
-
var _path$1;
|
|
1873
|
-
function _extends$2() { return _extends$2 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$2.apply(null, arguments); }
|
|
1874
|
-
var SvgControlMenuButton = function SvgControlMenuButton(props) {
|
|
1875
|
-
return /*#__PURE__*/React.createElement("svg", _extends$2({
|
|
1876
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
1877
|
-
width: 8,
|
|
1878
|
-
height: 8,
|
|
1879
|
-
fill: "currentColor",
|
|
1880
|
-
viewBox: "0 0 8 8"
|
|
1881
|
-
}, props), _path$1 || (_path$1 = /*#__PURE__*/React.createElement("path", {
|
|
1882
|
-
d: "m.72 7.64 6.39-3.2a.5.5 0 0 0 0-.89L.72.36A.5.5 0 0 0 0 .81v6.38c0 .37.4.61.72.45"
|
|
1883
|
-
})));
|
|
1884
|
-
};
|
|
1885
|
-
|
|
1886
|
-
var css_248z$n = ".gn-collapse-button{--_--focus-outline-color:var(--g-color-line-focus);--_--focus-outline-offset:0;align-items:center;background:none;border:none;border-top:1px solid var(--gn-aside-header-divider-horizontal-color,var(--_--horizontal-divider-line-color));box-sizing:content-box;color:inherit;cursor:pointer;display:flex;font-family:var(--g-text-body-font-family);font-size:inherit;font-weight:var(--g-text-body-font-weight);justify-content:center;min-height:20px;outline:none;padding:0;position:relative;width:100%}.gn-collapse-button:before{content:\"\";inset:0 2px 2px;position:absolute;z-index:-1}.gn-collapse-button:focus-visible:before{outline:var(--_--focus-outline-color) solid 2px;outline-offset:var(--_--focus-outline-offset)}.gn-collapse-button:not(.gn-collapse-button_compact) .gn-collapse-button__icon{transform:rotate(180deg)}.gn-collapse-button:hover .gn-collapse-button__icon{color:var(--g-color-text-primary)}.gn-collapse-button__icon{color:var(--g-color-text-secondary)}";
|
|
1887
|
-
styleInject(css_248z$n);
|
|
1888
|
-
|
|
1889
|
-
const b$o = block('collapse-button');
|
|
1890
|
-
const CollapseButton = ({ className }) => {
|
|
1891
|
-
const { onChangeCompact, compact, expandTitle, collapseTitle, collapseButtonWrapper } = useAsideHeaderInnerContext();
|
|
1892
|
-
const onCollapseButtonClick = useCallback(() => {
|
|
1893
|
-
onChangeCompact === null || onChangeCompact === undefined ? undefined : onChangeCompact(!compact);
|
|
1894
|
-
}, [compact, onChangeCompact]);
|
|
1895
|
-
const buttonTitle = compact
|
|
1896
|
-
? expandTitle || i18n$3('button_expand')
|
|
1897
|
-
: collapseTitle || i18n$3('button_collapse');
|
|
1898
|
-
const defaultButton = (React__default.createElement("button", { className: b$o({ compact }, className), onClick: onCollapseButtonClick, title: buttonTitle },
|
|
1899
|
-
React__default.createElement(Icon, { data: SvgControlMenuButton, className: b$o('icon'), width: "16", height: "10" })));
|
|
1900
|
-
if (collapseButtonWrapper) {
|
|
1901
|
-
return collapseButtonWrapper(defaultButton, { compact, onChangeCompact });
|
|
1902
|
-
}
|
|
1903
|
-
return defaultButton;
|
|
1904
|
-
};
|
|
1905
|
-
|
|
1906
|
-
var css_248z$m = ".gn-logo{height:40px}.gn-logo,.gn-logo__btn-logo{align-items:center;display:flex}.gn-logo__btn-logo{cursor:pointer;flex-shrink:0;justify-content:flex-start;overflow-wrap:break-word;width:100%;word-break:break-word}.gn-logo__btn-logo,.gn-logo__btn-logo:active,.gn-logo__btn-logo:focus,.gn-logo__btn-logo:hover,.gn-logo__btn-logo:visited{color:inherit;outline:none;text-decoration:none}.gn-logo__btn-logo:focus-visible{outline:solid var(--g-color-line-misc);outline-offset:-2px}.gn-logo__logo-icon-place{align-items:center;display:flex;flex-shrink:0;justify-content:center;width:36px}";
|
|
1907
|
-
styleInject(css_248z$m);
|
|
1503
|
+
var css_248z$p = ".gn-logo{height:40px}.gn-logo,.gn-logo__btn-logo{align-items:center;display:flex}.gn-logo__btn-logo{cursor:pointer;flex-shrink:0;justify-content:flex-start;overflow-wrap:break-word;width:100%;word-break:break-word}.gn-logo__btn-logo,.gn-logo__btn-logo:active,.gn-logo__btn-logo:focus,.gn-logo__btn-logo:hover,.gn-logo__btn-logo:visited{color:inherit;outline:none;text-decoration:none}.gn-logo__btn-logo:focus-visible{outline:solid var(--g-color-line-misc);outline-offset:-2px}.gn-logo__logo{margin:0 var(--g-spacing-4) 0 var(--g-spacing-2)}.gn-logo__logo-icon-place{align-items:center;display:flex;flex-shrink:0;justify-content:center;width:36px}";
|
|
1504
|
+
styleInject(css_248z$p);
|
|
1908
1505
|
|
|
1909
|
-
const b$
|
|
1506
|
+
const b$q = block('logo');
|
|
1910
1507
|
const Logo = ({ text, icon, iconSrc, iconClassName, iconPlaceClassName, iconSize = 24, textSize = 15, href, target = '_self', wrapper, onClick, compact, className, buttonClassName, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby, }) => {
|
|
1911
1508
|
const hasWrapper = typeof wrapper === 'function';
|
|
1912
1509
|
let buttonIcon;
|
|
@@ -1922,7 +1519,7 @@ const Logo = ({ text, icon, iconSrc, iconClassName, iconPlaceClassName, iconSize
|
|
|
1922
1519
|
logo = text();
|
|
1923
1520
|
}
|
|
1924
1521
|
else {
|
|
1925
|
-
logo = (React__default.createElement("div", { className: b$
|
|
1522
|
+
logo = (React__default.createElement("div", { className: b$q('logo'), style: { fontSize: textSize } }, text));
|
|
1926
1523
|
}
|
|
1927
1524
|
const _a = href
|
|
1928
1525
|
? {
|
|
@@ -1934,10 +1531,10 @@ const Logo = ({ text, icon, iconSrc, iconClassName, iconPlaceClassName, iconSize
|
|
|
1934
1531
|
'aria-labelledby': ariaLabelledby,
|
|
1935
1532
|
}
|
|
1936
1533
|
: { tag: 'span' }, { tag: Button } = _a, buttonProps = __rest(_a, ["tag"]);
|
|
1937
|
-
const button = (React__default.createElement(Button, Object.assign({}, buttonProps, { className: b$
|
|
1938
|
-
React__default.createElement("span", { className: b$
|
|
1534
|
+
const button = (React__default.createElement(Button, Object.assign({}, buttonProps, { className: b$q('btn-logo', buttonClassName), onClick: onClick }),
|
|
1535
|
+
React__default.createElement("span", { className: b$q('logo-icon-place', iconPlaceClassName) }, buttonIcon),
|
|
1939
1536
|
!compact && logo));
|
|
1940
|
-
return (React__default.createElement("div", { className: b$
|
|
1537
|
+
return (React__default.createElement("div", { className: b$q(null, className) }, hasWrapper ? wrapper(button, Boolean(compact)) : button));
|
|
1941
1538
|
};
|
|
1942
1539
|
|
|
1943
1540
|
var _path;
|
|
@@ -1957,17 +1554,18 @@ var SvgDividerCollapsed = function SvgDividerCollapsed(props) {
|
|
|
1957
1554
|
const DEFAULT_SUBHEADER_ITEMS = [];
|
|
1958
1555
|
const HEADER_COMPOSITE_ID = 'gravity-ui/navigation-header-composite-bar';
|
|
1959
1556
|
const Header = () => {
|
|
1960
|
-
const { logo, onItemClick, onClosePanel, headerDecoration, subheaderItems } = useAsideHeaderInnerContext();
|
|
1961
|
-
const {
|
|
1557
|
+
const { logo, compact, onItemClick, onClosePanel, headerDecoration, subheaderItems } = useAsideHeaderInnerContext();
|
|
1558
|
+
const { isExpanded } = useAsideHeaderInnerContext();
|
|
1559
|
+
const items = useGroupedMenuItems(subheaderItems || DEFAULT_SUBHEADER_ITEMS);
|
|
1962
1560
|
const onLogoClick = useCallback((event) => {
|
|
1963
1561
|
var _a;
|
|
1964
1562
|
onClosePanel === null || onClosePanel === undefined ? undefined : onClosePanel();
|
|
1965
1563
|
(_a = logo === null || logo === undefined ? undefined : logo.onClick) === null || _a === undefined ? undefined : _a.call(logo, event);
|
|
1966
1564
|
}, [onClosePanel, logo]);
|
|
1967
|
-
return (React__default.createElement("div", { className: b$
|
|
1968
|
-
logo && (React__default.createElement(Logo, Object.assign({}, logo, { onClick: onLogoClick, compact:
|
|
1969
|
-
React__default.createElement(CompositeBar, { compositeId: HEADER_COMPOSITE_ID, type: "subheader",
|
|
1970
|
-
headerDecoration && (React__default.createElement(Icon, { data: SvgDividerCollapsed, className: b$
|
|
1565
|
+
return (React__default.createElement("div", { className: b$w('header', { ['with-decoration']: headerDecoration }) },
|
|
1566
|
+
logo && (React__default.createElement(Logo, Object.assign({}, logo, { onClick: onLogoClick, compact: !isExpanded, buttonClassName: b$w('logo-button'), iconPlaceClassName: b$w('logo-icon-place') }))),
|
|
1567
|
+
React__default.createElement(CompositeBar, { compositeId: HEADER_COMPOSITE_ID, type: "subheader", compact: compact, items: items, onItemClick: onItemClick }),
|
|
1568
|
+
headerDecoration && (React__default.createElement(Icon, { data: SvgDividerCollapsed, className: b$w('header-divider'), width: ASIDE_HEADER_COMPACT_WIDTH, height: HEADER_DIVIDER_HEIGHT }))));
|
|
1971
1569
|
};
|
|
1972
1570
|
|
|
1973
1571
|
// Avoid Chrome DevTools blue warning.
|
|
@@ -1979,12 +1577,20 @@ function getPlatform() {
|
|
|
1979
1577
|
return navigator.platform;
|
|
1980
1578
|
}
|
|
1981
1579
|
|
|
1982
|
-
var
|
|
1580
|
+
var isClient = typeof document !== 'undefined';
|
|
1581
|
+
|
|
1582
|
+
var noop$1 = function noop() {};
|
|
1583
|
+
var index = isClient ? useLayoutEffect : noop$1;
|
|
1584
|
+
|
|
1983
1585
|
if (process.env.NODE_ENV !== "production") ;
|
|
1984
1586
|
|
|
1985
1587
|
let lockCount = 0;
|
|
1588
|
+
const scrollbarProperty = '--floating-ui-scrollbar-width';
|
|
1986
1589
|
function enableScrollLock() {
|
|
1987
|
-
const
|
|
1590
|
+
const platform = getPlatform();
|
|
1591
|
+
const isIOS = /iP(hone|ad|od)|iOS/.test(platform) ||
|
|
1592
|
+
// iPads can claim to be MacIntel
|
|
1593
|
+
platform === 'MacIntel' && navigator.maxTouchPoints > 1;
|
|
1988
1594
|
const bodyStyle = document.body.style;
|
|
1989
1595
|
// RTL <body> scrollbar
|
|
1990
1596
|
const scrollbarX = Math.round(document.documentElement.getBoundingClientRect().left) + document.documentElement.scrollLeft;
|
|
@@ -1993,6 +1599,7 @@ function enableScrollLock() {
|
|
|
1993
1599
|
const scrollX = bodyStyle.left ? parseFloat(bodyStyle.left) : window.scrollX;
|
|
1994
1600
|
const scrollY = bodyStyle.top ? parseFloat(bodyStyle.top) : window.scrollY;
|
|
1995
1601
|
bodyStyle.overflow = 'hidden';
|
|
1602
|
+
bodyStyle.setProperty(scrollbarProperty, scrollbarWidth + "px");
|
|
1996
1603
|
if (scrollbarWidth) {
|
|
1997
1604
|
bodyStyle[paddingProp] = scrollbarWidth + "px";
|
|
1998
1605
|
}
|
|
@@ -2016,6 +1623,7 @@ function enableScrollLock() {
|
|
|
2016
1623
|
overflow: '',
|
|
2017
1624
|
[paddingProp]: ''
|
|
2018
1625
|
});
|
|
1626
|
+
bodyStyle.removeProperty(scrollbarProperty);
|
|
2019
1627
|
if (isIOS) {
|
|
2020
1628
|
Object.assign(bodyStyle, {
|
|
2021
1629
|
position: '',
|
|
@@ -2082,7 +1690,7 @@ function _objectWithoutPropertiesLoose(r, e) {
|
|
|
2082
1690
|
if (null == r) return {};
|
|
2083
1691
|
var t = {};
|
|
2084
1692
|
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
|
2085
|
-
if (e.indexOf(n)
|
|
1693
|
+
if (-1 !== e.indexOf(n)) continue;
|
|
2086
1694
|
t[n] = r[n];
|
|
2087
1695
|
}
|
|
2088
1696
|
return t;
|
|
@@ -4480,10 +4088,10 @@ function useResizableDrawerItem(params) {
|
|
|
4480
4088
|
return { resizedWidth: displayWidth, resizerHandlers: handlers, isResizing };
|
|
4481
4089
|
}
|
|
4482
4090
|
|
|
4483
|
-
var css_248z$
|
|
4484
|
-
styleInject(css_248z$
|
|
4091
|
+
var css_248z$o = ".gn-drawer{--_--item-shadow-default:0 1px 5px 0 var(--g-color-sfx-shadow);--_--item-position:fixed;--_--resizer-width:8px;--_--resizer-color:var(--g-color-base-generic);--_--resizer-handle-color:var(--g-color-line-generic);--_--resizer-handle-color-hover:var(--g-color-line-generic-hover);--_--resizer-z-index:100;--_--veil-background-color:var(--g-color-sfx-veil);pointer-events:none;z-index:var(--gn-drawer-z-index)}.gn-drawer_hideVeil{--_--item-shadow:var(--gn-drawer-item-shadow,var(--_--item-shadow-default))}.gn-drawer__item{background-color:var(--g-color-base-background);bottom:0;box-shadow:var(--_--item-shadow,none);left:var(--gn-aside-header-size,0);pointer-events:auto;position:var(--gn-drawer-item-position,var(--_--item-position));top:var(--gn-top-alert-height,0);will-change:transform;z-index:var(--gn-drawer-item-z-index)}.gn-drawer__item_direction_right{left:auto;right:0}.gn-drawer__item_direction_top{bottom:auto;height:100%;right:0}.gn-drawer__item_direction_bottom{height:100%;right:0;top:auto}.gn-drawer__item-transition-enter{transform:translate(-100%)}.gn-drawer__item-transition_direction_right-enter{transform:translate(100%)}.gn-drawer__item-transition_direction_top-enter{transform:translateY(-100%)}.gn-drawer__item-transition_direction_bottom-enter{transform:translateY(100%)}.gn-drawer__item-transition-enter-active,.gn-drawer__item-transition_direction_bottom-enter-active,.gn-drawer__item-transition_direction_right-enter-active,.gn-drawer__item-transition_direction_top-enter-active{transform:translate(0);transition:transform .3s}.gn-drawer__item-transition-enter-done,.gn-drawer__item-transition_direction_bottom-enter-done,.gn-drawer__item-transition_direction_right-enter-done,.gn-drawer__item-transition_direction_top-enter-done{filter:blur(0);transform:translateZ(0)}.gn-drawer__item-transition-exit,.gn-drawer__item-transition_direction_bottom-exit,.gn-drawer__item-transition_direction_right-exit,.gn-drawer__item-transition_direction_top-exit{transform:translate(0)}.gn-drawer__item-transition-exit-active,.gn-drawer__item-transition_direction_bottom-exit-active,.gn-drawer__item-transition_direction_right-exit-active,.gn-drawer__item-transition_direction_top-exit-active{transition:transform .3s}.gn-drawer__item-transition-exit-active{transform:translate(-100%)}.gn-drawer__item-transition_direction_right-exit-active{transform:translate(100%)}.gn-drawer__item-transition_direction_top-exit-active{transform:translateY(-100%)}.gn-drawer__item-transition_direction_bottom-exit-active{transform:translateY(100%)}.gn-drawer__item-transition-exit-done,.gn-drawer__item-transition_direction_bottom-exit-done,.gn-drawer__item-transition_direction_right-exit-done,.gn-drawer__item-transition_direction_top-exit-done,.gn-drawer__item_hidden{visibility:hidden}.gn-drawer__veil{background-color:var(--gn-drawer-veil-background-color,var(--_--veil-background-color));inset:0;pointer-events:auto;position:absolute;z-index:var(--gn-drawer-veil-z-index)}.gn-drawer__veil_hidden{display:none}.gn-drawer__veil-transition-enter{opacity:0}.gn-drawer__veil-transition-enter-active{opacity:1;transition:opacity .3s}.gn-drawer__veil-transition-exit{opacity:1}.gn-drawer__veil-transition-exit-active{opacity:0;transition:opacity .3s}.gn-drawer__veil-transition-exit-done{visibility:hidden}.gn-drawer__resizer-handle{background:var(--gn-drawer-item-resizer-handle-color,var(--_--resizer-handle-color));border-radius:2px;height:28px;width:2px}.gn-drawer__resizer-handle_direction_bottom,.gn-drawer__resizer-handle_direction_top{height:2px;width:28px}.gn-drawer__resizer{align-items:center;background:var(--gn-drawer-item-resizer-color,var(--_--resizer-color));cursor:col-resize;display:flex;flex-direction:column;height:100%;justify-content:center;position:absolute;top:0;width:var(--gn-drawer-item-resizer-width,var(--_--resizer-width));z-index:var(--gn-drawer-item-resizer-z-index,var(--_--resizer-z-index))}.gn-drawer__resizer_direction_right{left:0;top:var(--gn-top-alert-height,0)}.gn-drawer__resizer_direction_left{right:0;top:var(--gn-top-alert-height,0)}.gn-drawer__resizer_direction_top{bottom:0;left:0;top:unset}.gn-drawer__resizer_direction_bottom{left:0;top:0}.gn-drawer__resizer_direction_bottom,.gn-drawer__resizer_direction_top{cursor:row-resize;height:var(--gn-drawer-item-resizer-width,var(--_--resizer-width));width:100%}.gn-drawer__resizer:hover .gn-drawer__resizer-handle{background:var(--gn-drawer-item-resizer-handle-color-hover,var(--_--resizer-handle-color-hover))}";
|
|
4092
|
+
styleInject(css_248z$o);
|
|
4485
4093
|
|
|
4486
|
-
const b$
|
|
4094
|
+
const b$p = block('drawer');
|
|
4487
4095
|
const TIMEOUT = 300;
|
|
4488
4096
|
const DrawerItem = React__default.forwardRef(function DrawerItem(props, ref) {
|
|
4489
4097
|
const { visible, content, children, direction = 'left', className, resizable, width, minResizeWidth, maxResizeWidth, onResizeStart, onResizeContinue, onResize, keepMounted = false, style = {}, } = props;
|
|
@@ -4515,10 +4123,10 @@ const DrawerItem = React__default.forwardRef(function DrawerItem(props, ref) {
|
|
|
4515
4123
|
React__default.useEffect(() => {
|
|
4516
4124
|
setInitialRender(true);
|
|
4517
4125
|
}, [direction]);
|
|
4518
|
-
const resizerElement = resizable ? (React__default.createElement("div", Object.assign({ className: b$
|
|
4519
|
-
React__default.createElement("div", { className: b$
|
|
4520
|
-
return (React__default.createElement(CSSTransition, { in: visible, timeout: TIMEOUT, mountOnEnter: !keepMounted, unmountOnExit: !keepMounted, classNames: b$
|
|
4521
|
-
React__default.createElement("div", { ref: handleRef, className: b$
|
|
4126
|
+
const resizerElement = resizable ? (React__default.createElement("div", Object.assign({ className: b$p('resizer', { direction }) }, resizerHandlers),
|
|
4127
|
+
React__default.createElement("div", { className: b$p('resizer-handle', { direction }) }))) : null;
|
|
4128
|
+
return (React__default.createElement(CSSTransition, { in: visible, timeout: TIMEOUT, mountOnEnter: !keepMounted, unmountOnExit: !keepMounted, classNames: b$p('item-transition', { direction: cssDirection }), nodeRef: itemRef, onEnter: () => setInitialRender(false), onExit: () => setInitialRender(false) },
|
|
4129
|
+
React__default.createElement("div", { ref: handleRef, className: b$p('item', {
|
|
4522
4130
|
direction: cssDirection,
|
|
4523
4131
|
hidden: isInitialRender && !visible,
|
|
4524
4132
|
resize: isResizing,
|
|
@@ -4554,9 +4162,9 @@ const Drawer = ({ className, veilClassName, children, style, onVeilClick, onEsca
|
|
|
4554
4162
|
useScrollLock(shouldApplyScrollLock);
|
|
4555
4163
|
return (React__default.createElement(Transition, { in: someItemVisible, timeout: { enter: 0, exit: TIMEOUT }, mountOnEnter: !keepMounted, unmountOnExit: !keepMounted, nodeRef: containerRef }, (state) => {
|
|
4556
4164
|
const childrenVisible = someItemVisible && state === 'entered';
|
|
4557
|
-
const content = (React__default.createElement("div", { ref: containerRef, className: b$
|
|
4558
|
-
React__default.createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$
|
|
4559
|
-
React__default.createElement("div", { ref: veilRef, className: b$
|
|
4165
|
+
const content = (React__default.createElement("div", { ref: containerRef, className: b$p({ hideVeil }, className), style: style },
|
|
4166
|
+
React__default.createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$p('veil-transition'), nodeRef: veilRef },
|
|
4167
|
+
React__default.createElement("div", { ref: veilRef, className: b$p('veil', { hidden: hideVeil }, veilClassName), onClick: onVeilClick })),
|
|
4560
4168
|
React__default.Children.map(children, (child) => {
|
|
4561
4169
|
if (React__default.isValidElement(child) &&
|
|
4562
4170
|
child.type === DrawerItem) {
|
|
@@ -4578,26 +4186,27 @@ const Drawer = ({ className, veilClassName, children, style, onVeilClick, onEsca
|
|
|
4578
4186
|
};
|
|
4579
4187
|
|
|
4580
4188
|
const Panels = () => {
|
|
4581
|
-
const { panelItems,
|
|
4582
|
-
return panelItems ? (React__default.createElement(Drawer, { className: b$
|
|
4189
|
+
const { panelItems, size, onClosePanel } = useAsideHeaderInnerContext();
|
|
4190
|
+
return panelItems ? (React__default.createElement(Drawer, { className: b$w('panels'), onVeilClick: onClosePanel, onEscape: onClosePanel, style: { left: size } }, panelItems.map((item) => (React__default.createElement(DrawerItem, Object.assign({ key: item.id, className: b$w('panel') }, item)))))) : null;
|
|
4583
4191
|
};
|
|
4584
4192
|
|
|
4585
4193
|
const MENU_ITEMS_COMPOSITE_ID = 'gravity-ui/navigation-menu-items-composite-bar';
|
|
4586
4194
|
const FirstPanel = React__default.forwardRef((_props, ref) => {
|
|
4587
|
-
const { size, onItemClick, headerDecoration, multipleTooltip,
|
|
4588
|
-
const
|
|
4195
|
+
const { size, onItemClick, headerDecoration, multipleTooltip, onMenuMoreClick, renderFooter, onToggleGroupCollapsed, compact, customBackground, customBackgroundClassName, className, hideCollapseButton, menuItems, menuGroups, qa, onMouseEnter, onMouseLeave, isExpanded, } = useAsideHeaderInnerContext();
|
|
4196
|
+
const flatListItems = useGroupedMenuItems(menuItems, menuGroups);
|
|
4589
4197
|
const asideRef = useRef(null);
|
|
4590
4198
|
React__default.useEffect(() => {
|
|
4591
4199
|
setRef(ref, asideRef.current);
|
|
4592
4200
|
}, [ref]);
|
|
4201
|
+
const isExpandedByHover = compact && isExpanded;
|
|
4593
4202
|
return (React__default.createElement(React__default.Fragment, null,
|
|
4594
|
-
React__default.createElement("div", { className: b$
|
|
4595
|
-
React__default.createElement("div", { className: b$
|
|
4596
|
-
customBackground && (React__default.createElement("div", { className: b$
|
|
4597
|
-
React__default.createElement("div", { className: b$
|
|
4203
|
+
React__default.createElement("div", { className: b$w('aside', { 'expanded-by-hover': isExpandedByHover }, className), style: { width: size }, "data-qa": qa, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave },
|
|
4204
|
+
React__default.createElement("div", { className: b$w('aside-popup-anchor'), ref: asideRef }),
|
|
4205
|
+
customBackground && (React__default.createElement("div", { className: b$w('aside-custom-background', customBackgroundClassName) }, customBackground)),
|
|
4206
|
+
React__default.createElement("div", { className: b$w('aside-content', { ['with-decoration']: headerDecoration }) },
|
|
4598
4207
|
React__default.createElement(Header, null),
|
|
4599
|
-
(
|
|
4600
|
-
React__default.createElement("div", { className: b$
|
|
4208
|
+
(flatListItems === null || flatListItems === undefined ? undefined : flatListItems.length) ? (React__default.createElement(CompositeBar, { compositeId: MENU_ITEMS_COMPOSITE_ID, className: b$w('menu-items'), compact: compact, type: "menu", items: flatListItems, onItemClick: onItemClick, onMoreClick: onMenuMoreClick, onToggleGroupCollapsed: onToggleGroupCollapsed, multipleTooltip: multipleTooltip })) : (React__default.createElement("div", { className: b$w('menu-items') })),
|
|
4209
|
+
React__default.createElement("div", { className: b$w('footer') }, renderFooter === null || renderFooter === undefined ? undefined : renderFooter({
|
|
4601
4210
|
size,
|
|
4602
4211
|
compact: Boolean(compact),
|
|
4603
4212
|
asideRef,
|
|
@@ -4607,6 +4216,242 @@ const FirstPanel = React__default.forwardRef((_props, ref) => {
|
|
|
4607
4216
|
});
|
|
4608
4217
|
FirstPanel.displayName = 'FirstPanel';
|
|
4609
4218
|
|
|
4219
|
+
var css_248z$n = ".gn-all-pages-group-header{height:40px;padding:0 var(--g-spacing-6)}";
|
|
4220
|
+
styleInject(css_248z$n);
|
|
4221
|
+
|
|
4222
|
+
const b$o = block('all-pages-group-header');
|
|
4223
|
+
const AllPagesGroupHeader = ({ onToggleHidden, editMode, id, icon, title, hidden, isDisabled, }) => {
|
|
4224
|
+
const onHideButtonClick = useCallback((e) => {
|
|
4225
|
+
e.stopPropagation();
|
|
4226
|
+
e.preventDefault();
|
|
4227
|
+
onToggleHidden === null || onToggleHidden === undefined ? undefined : onToggleHidden(id);
|
|
4228
|
+
}, [id, onToggleHidden]);
|
|
4229
|
+
return (React__default.createElement(Flex, { className: b$o(), gap: "2", alignItems: "center", justifyContent: "space-between" },
|
|
4230
|
+
React__default.createElement(Flex, { gap: "2", alignItems: "center" },
|
|
4231
|
+
icon && React__default.createElement(Icon, { data: icon, size: 16 }),
|
|
4232
|
+
React__default.createElement(Text, { className: b$o('title'), variant: "body-1", color: "secondary" }, title)),
|
|
4233
|
+
editMode && id !== UNGROUPED_ID && (React__default.createElement(Button, { onClick: onHideButtonClick, disabled: isDisabled, view: hidden ? 'flat-secondary' : 'flat-action' },
|
|
4234
|
+
React__default.createElement(Button.Icon, null, hidden ? React__default.createElement(Pin, null) : React__default.createElement(PinFill, null))))));
|
|
4235
|
+
};
|
|
4236
|
+
|
|
4237
|
+
var css_248z$m = ".gn-all-pages-list-item{align-items:center;background:none;border:none;color:inherit;column-gap:var(--g-spacing-4);cursor:pointer;display:flex;font:inherit;height:40px;outline:inherit;padding:0 var(--g-spacing-6);text-decoration:inherit;width:100%}.gn-all-pages-list-item:focus-visible{outline:solid var(--g-color-line-misc);outline-offset:-2px}.gn-all-pages-list-item__text{flex:1;text-align:initial}.gn-all-pages-list-item__icon{color:var(--g-color-text-misc)}.gn-all-pages-list-item_edit-mode{padding:0 0 0 var(--g-spacing-4)}";
|
|
4238
|
+
styleInject(css_248z$m);
|
|
4239
|
+
|
|
4240
|
+
const b$n = block('all-pages-list-item');
|
|
4241
|
+
const AllPagesListItem = (props) => {
|
|
4242
|
+
const { item, editMode, onToggle } = props;
|
|
4243
|
+
const ref = useRef(null);
|
|
4244
|
+
const onPinButtonClick = useCallback((e) => {
|
|
4245
|
+
e.stopPropagation();
|
|
4246
|
+
e.preventDefault();
|
|
4247
|
+
onToggle();
|
|
4248
|
+
}, [onToggle]);
|
|
4249
|
+
const onItemClick = (e) => {
|
|
4250
|
+
if (editMode) {
|
|
4251
|
+
e.stopPropagation();
|
|
4252
|
+
e.preventDefault();
|
|
4253
|
+
}
|
|
4254
|
+
};
|
|
4255
|
+
const [Tag, tagProps] = item.href ? ['a', { href: item.href }] : ['button', {}];
|
|
4256
|
+
const makeNode = useCallback((params) => {
|
|
4257
|
+
return (React__default.createElement(Tag, Object.assign({}, tagProps, { className: b$n(), onClick: onItemClick, ref: ref }),
|
|
4258
|
+
params.icon,
|
|
4259
|
+
React__default.createElement("span", { className: b$n('text') }, params.title),
|
|
4260
|
+
editMode && !item.preventUserRemoving && (React__default.createElement(Button, { onClick: onPinButtonClick, view: item.hidden ? 'flat-secondary' : 'flat-action' },
|
|
4261
|
+
React__default.createElement(Button.Icon, null, item.hidden ? React__default.createElement(Pin, null) : React__default.createElement(PinFill, null))))));
|
|
4262
|
+
}, [Tag, tagProps, onItemClick, editMode, item, onPinButtonClick]);
|
|
4263
|
+
const iconNode = item.icon ? (React__default.createElement(Icon, { className: b$n('icon'), data: item.icon, size: item.iconSize })) : null;
|
|
4264
|
+
const titleNode = item.title;
|
|
4265
|
+
const params = { icon: iconNode, title: titleNode };
|
|
4266
|
+
const opts = { collapsed: false, compact: false, item, ref };
|
|
4267
|
+
if (typeof item.itemWrapper === 'function') {
|
|
4268
|
+
return item.itemWrapper(params, makeNode, opts);
|
|
4269
|
+
}
|
|
4270
|
+
return makeNode(params);
|
|
4271
|
+
};
|
|
4272
|
+
|
|
4273
|
+
function buildExpandedFromFlatList(flatList) {
|
|
4274
|
+
const expanded = [];
|
|
4275
|
+
flatList.forEach((item) => {
|
|
4276
|
+
if ('items' in item && item.items && item.items.length > 0) {
|
|
4277
|
+
expanded.push(...item.items);
|
|
4278
|
+
}
|
|
4279
|
+
else {
|
|
4280
|
+
expanded.push(item);
|
|
4281
|
+
}
|
|
4282
|
+
});
|
|
4283
|
+
return expanded;
|
|
4284
|
+
}
|
|
4285
|
+
|
|
4286
|
+
function getRealIndexInExpandedMenu(flatListIndex, flatList) {
|
|
4287
|
+
let realIndex = 0;
|
|
4288
|
+
for (let i = 0; i < flatListIndex; i++) {
|
|
4289
|
+
const item = flatList[i];
|
|
4290
|
+
if ('items' in item && item.items && item.items.length > 0) {
|
|
4291
|
+
realIndex += item.items.length;
|
|
4292
|
+
}
|
|
4293
|
+
else {
|
|
4294
|
+
realIndex += 1;
|
|
4295
|
+
}
|
|
4296
|
+
}
|
|
4297
|
+
return realIndex;
|
|
4298
|
+
}
|
|
4299
|
+
function getRealIndexInGroup(groupIndex, itemIndexInGroup, flatList) {
|
|
4300
|
+
const groupStartIndex = getRealIndexInExpandedMenu(groupIndex, flatList);
|
|
4301
|
+
return groupStartIndex + itemIndexInGroup;
|
|
4302
|
+
}
|
|
4303
|
+
|
|
4304
|
+
function sortMenuItems(oldIndex, newIndex, items) {
|
|
4305
|
+
if (items[oldIndex] === undefined || items[newIndex] === undefined) {
|
|
4306
|
+
return buildExpandedFromFlatList(items);
|
|
4307
|
+
}
|
|
4308
|
+
const sortedItems = [...items];
|
|
4309
|
+
const [movedElement] = sortedItems.splice(oldIndex, 1);
|
|
4310
|
+
sortedItems.splice(newIndex, 0, movedElement);
|
|
4311
|
+
return buildExpandedFromFlatList(sortedItems);
|
|
4312
|
+
}
|
|
4313
|
+
|
|
4314
|
+
var css_248z$l = ".gn-all-pages-panel{box-sizing:border-box;height:100%;min-width:300px;padding:var(--g-spacing-4) var(--g-spacing-6)}.gn-all-pages-panel__content{flex:1;margin:0 calc(var(--g-spacing-6)*-1);overflow:auto}.gn-all-pages-panel__content_edit-mode{padding-left:var(--g-spacing-6)}.gn-all-pages-panel__category{padding:0 var(--g-spacing-6)}.gn-all-pages-panel__discoverable-feature-wrapper{display:flex}.gn-all-pages-panel__item_editMode{padding-left:var(--g-spacing-6)}.gn-all-pages-panel__groups-container{width:100%}.gn-all-pages-panel__groups-container:not(:last-child){border-bottom:1px solid var(--g-color-line-generic);padding-bottom:var(--g-spacing-2)}";
|
|
4315
|
+
styleInject(css_248z$l);
|
|
4316
|
+
|
|
4317
|
+
const b$m = block('all-pages-panel');
|
|
4318
|
+
const AllPagesPanel = (props) => {
|
|
4319
|
+
const { startEditIcon, onEditModeChanged, className } = props;
|
|
4320
|
+
const { defaultMenuItems, editMenuProps, menuItems, menuGroups, defaultMenuGroups, onMenuItemsChanged, onMenuGroupsChanged, } = useAsideHeaderInnerContext();
|
|
4321
|
+
const items = useGroupedMenuItems(menuItems, menuGroups, true);
|
|
4322
|
+
const menuItemsRef = useRef(items);
|
|
4323
|
+
menuItemsRef.current = items;
|
|
4324
|
+
const menuGroupsRef = useRef(menuGroups);
|
|
4325
|
+
menuGroupsRef.current = menuGroups;
|
|
4326
|
+
const [isEditMode, setIsEditMode] = useState(false);
|
|
4327
|
+
const toggleEditMode = useCallback(() => {
|
|
4328
|
+
setIsEditMode((prev) => !prev);
|
|
4329
|
+
}, []);
|
|
4330
|
+
useEffect(() => {
|
|
4331
|
+
var _a;
|
|
4332
|
+
onEditModeChanged === null || onEditModeChanged === undefined ? undefined : onEditModeChanged(isEditMode);
|
|
4333
|
+
if (isEditMode) {
|
|
4334
|
+
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onOpenEditMode) === null || _a === undefined ? undefined : _a.call(editMenuProps);
|
|
4335
|
+
}
|
|
4336
|
+
}, [isEditMode, onEditModeChanged, editMenuProps]);
|
|
4337
|
+
const onItemClick = useCallback((item, _index, _forwardKey, event) => {
|
|
4338
|
+
var _a;
|
|
4339
|
+
// TODO: make event an optional argument
|
|
4340
|
+
(_a = item.onItemClick) === null || _a === undefined ? undefined : _a.call(item, item, false, event);
|
|
4341
|
+
}, []);
|
|
4342
|
+
const onResetToDefaultClick = useCallback(() => {
|
|
4343
|
+
var _a;
|
|
4344
|
+
if (!onMenuItemsChanged) {
|
|
4345
|
+
return;
|
|
4346
|
+
}
|
|
4347
|
+
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onResetSettingsToDefault) === null || _a === undefined ? undefined : _a.call(editMenuProps);
|
|
4348
|
+
const originItems = defaultMenuItems === null || defaultMenuItems === undefined ? undefined : defaultMenuItems.filter(({ id }) => id !== ALL_PAGES_ID);
|
|
4349
|
+
if (originItems) {
|
|
4350
|
+
onMenuItemsChanged(originItems);
|
|
4351
|
+
}
|
|
4352
|
+
if (onMenuGroupsChanged && defaultMenuGroups) {
|
|
4353
|
+
onMenuGroupsChanged(defaultMenuGroups);
|
|
4354
|
+
}
|
|
4355
|
+
}, [
|
|
4356
|
+
onMenuItemsChanged,
|
|
4357
|
+
editMenuProps,
|
|
4358
|
+
defaultMenuItems,
|
|
4359
|
+
onMenuGroupsChanged,
|
|
4360
|
+
defaultMenuGroups,
|
|
4361
|
+
]);
|
|
4362
|
+
const toggleGroupVisibility = useCallback((groupId) => {
|
|
4363
|
+
if (!onMenuGroupsChanged) {
|
|
4364
|
+
return;
|
|
4365
|
+
}
|
|
4366
|
+
const currentGroups = menuGroupsRef.current || [];
|
|
4367
|
+
const updatedGroups = currentGroups.map((group) => {
|
|
4368
|
+
if (group.id === groupId) {
|
|
4369
|
+
return Object.assign(Object.assign({}, group), { hidden: !group.hidden });
|
|
4370
|
+
}
|
|
4371
|
+
return group;
|
|
4372
|
+
});
|
|
4373
|
+
onMenuGroupsChanged(updatedGroups);
|
|
4374
|
+
}, [onMenuGroupsChanged]);
|
|
4375
|
+
const toggleMenuItemsVisibility = useCallback((item) => {
|
|
4376
|
+
var _a;
|
|
4377
|
+
if (!onMenuItemsChanged) {
|
|
4378
|
+
return;
|
|
4379
|
+
}
|
|
4380
|
+
const changedItem = Object.assign(Object.assign({}, item), { hidden: !item.hidden });
|
|
4381
|
+
const originItems = menuItemsRef.current;
|
|
4382
|
+
const expandedItems = buildExpandedFromFlatList(originItems);
|
|
4383
|
+
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onToggleMenuItem) === null || _a === undefined ? undefined : _a.call(editMenuProps, changedItem);
|
|
4384
|
+
onMenuItemsChanged(expandedItems.map((menuItem) => {
|
|
4385
|
+
if (menuItem.id !== changedItem.id) {
|
|
4386
|
+
return menuItem;
|
|
4387
|
+
}
|
|
4388
|
+
return changedItem;
|
|
4389
|
+
}));
|
|
4390
|
+
}, [onMenuItemsChanged, editMenuProps]);
|
|
4391
|
+
const onFirstLevelSortEnd = useCallback(({ oldIndex, newIndex }) => {
|
|
4392
|
+
if (!onMenuItemsChanged) {
|
|
4393
|
+
return;
|
|
4394
|
+
}
|
|
4395
|
+
const currentFlatList = menuItemsRef.current || [];
|
|
4396
|
+
const updatedItems = sortMenuItems(oldIndex, newIndex, currentFlatList);
|
|
4397
|
+
if (updatedItems) {
|
|
4398
|
+
onMenuItemsChanged === null || onMenuItemsChanged === undefined ? undefined : onMenuItemsChanged(updatedItems);
|
|
4399
|
+
}
|
|
4400
|
+
}, [onMenuItemsChanged]);
|
|
4401
|
+
const onSecondLevelSortEnd = useCallback((groupIndex) => ({ oldIndex, newIndex }) => {
|
|
4402
|
+
if (!onMenuItemsChanged) {
|
|
4403
|
+
return;
|
|
4404
|
+
}
|
|
4405
|
+
const currentFlatList = menuItemsRef.current || [];
|
|
4406
|
+
const realOldIndex = getRealIndexInGroup(groupIndex, oldIndex, currentFlatList);
|
|
4407
|
+
const realNewIndex = getRealIndexInGroup(groupIndex, newIndex, currentFlatList);
|
|
4408
|
+
const expandedItems = buildExpandedFromFlatList(currentFlatList);
|
|
4409
|
+
const updatedItems = sortMenuItems(realOldIndex, realNewIndex, expandedItems);
|
|
4410
|
+
if (updatedItems) {
|
|
4411
|
+
onMenuItemsChanged === null || onMenuItemsChanged === undefined ? undefined : onMenuItemsChanged(updatedItems);
|
|
4412
|
+
}
|
|
4413
|
+
}, [onMenuItemsChanged]);
|
|
4414
|
+
const itemRender = useCallback((asideHeaderItem, _isActive, _itemIndex) => {
|
|
4415
|
+
return (React__default.createElement(AllPagesListItem, { item: asideHeaderItem, editMode: isEditMode, onToggle: () => toggleMenuItemsVisibility(asideHeaderItem), enableSorting: editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting }));
|
|
4416
|
+
}, [isEditMode, editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting, toggleMenuItemsVisibility]);
|
|
4417
|
+
const renderFirstLevelItem = useCallback((firstLevelItem, _isActive, itemIndex) => {
|
|
4418
|
+
if (!('items' in firstLevelItem) || firstLevelItem.items.length === 0) {
|
|
4419
|
+
return itemRender(firstLevelItem, _isActive, itemIndex);
|
|
4420
|
+
}
|
|
4421
|
+
const groupListItems = firstLevelItem.items;
|
|
4422
|
+
const sortableGroupItems = isEditMode && (editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting)
|
|
4423
|
+
? groupListItems.filter(({ id }) => id !== ALL_PAGES_ID)
|
|
4424
|
+
: groupListItems;
|
|
4425
|
+
if (sortableGroupItems.length === 0) {
|
|
4426
|
+
return null;
|
|
4427
|
+
}
|
|
4428
|
+
const blockHeight = getGroupBlockHeight(sortableGroupItems);
|
|
4429
|
+
return (React__default.createElement(Flex, { className: b$m('groups-container'), direction: "column", style: { height: blockHeight } },
|
|
4430
|
+
firstLevelItem.title && (React__default.createElement(AllPagesGroupHeader, { id: firstLevelItem.id, icon: firstLevelItem.icon, title: firstLevelItem.title, hidden: Boolean(firstLevelItem.hidden), isDisabled: firstLevelItem.isDisabled, onToggleHidden: toggleGroupVisibility, editMode: isEditMode })),
|
|
4431
|
+
React__default.createElement(List, { itemClassName: isEditMode && (editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting)
|
|
4432
|
+
? b$m('item', { editMode: true })
|
|
4433
|
+
: undefined, itemHeight: isEditMode && (editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting) ? ITEM_HEIGHT : undefined, onSortEnd: isEditMode && (editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting)
|
|
4434
|
+
? onSecondLevelSortEnd(itemIndex)
|
|
4435
|
+
: undefined, sortable: isEditMode && (editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting), virtualized: false, filterable: false, items: sortableGroupItems, onItemClick: onItemClick, renderItem: itemRender })));
|
|
4436
|
+
}, [
|
|
4437
|
+
isEditMode,
|
|
4438
|
+
editMenuProps,
|
|
4439
|
+
toggleGroupVisibility,
|
|
4440
|
+
onSecondLevelSortEnd,
|
|
4441
|
+
onItemClick,
|
|
4442
|
+
itemRender,
|
|
4443
|
+
]);
|
|
4444
|
+
const data = items.filter((item) => item.id !== ALL_PAGES_ID && item.type !== 'action');
|
|
4445
|
+
return (React__default.createElement(Flex, { className: b$m(null, className), gap: "5", direction: "column" },
|
|
4446
|
+
React__default.createElement(Flex, { gap: "4", alignItems: "center", justifyContent: "space-between" },
|
|
4447
|
+
React__default.createElement(Text, { variant: "subheader-2" }, isEditMode ? i18n$4('all-panel.title.editing') : i18n$4('all-panel.title.main')),
|
|
4448
|
+
React__default.createElement(Tooltip, { content: i18n$4('all-panel.title.editing') },
|
|
4449
|
+
React__default.createElement(Button, { selected: isEditMode, view: "normal", onClick: toggleEditMode }, startEditIcon ? startEditIcon : React__default.createElement(Icon, { data: Gear })))),
|
|
4450
|
+
React__default.createElement(Flex, { className: b$m('content', { 'edit-mode': isEditMode }), gap: "2", direction: "column" },
|
|
4451
|
+
React__default.createElement(List, { onSortEnd: isEditMode && (editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting) ? onFirstLevelSortEnd : undefined, sortable: isEditMode && (editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting), virtualized: false, filterable: false, items: data, renderItem: renderFirstLevelItem })),
|
|
4452
|
+
isEditMode && (React__default.createElement(Button, { onClick: onResetToDefaultClick }, i18n$4('all-panel.resetToDefault')))));
|
|
4453
|
+
};
|
|
4454
|
+
|
|
4610
4455
|
var InnerPanels;
|
|
4611
4456
|
(function (InnerPanels) {
|
|
4612
4457
|
InnerPanels["AllPages"] = "all-pages";
|
|
@@ -4614,7 +4459,7 @@ var InnerPanels;
|
|
|
4614
4459
|
|
|
4615
4460
|
const EMPTY_MENU_ITEMS = [];
|
|
4616
4461
|
const useAsideHeaderInnerContextValue = (props) => {
|
|
4617
|
-
const { size, onClosePanel, menuItems, panelItems, onMenuItemsChanged, onAllPagesClick } = props;
|
|
4462
|
+
const { size, onClosePanel, menuItems, menuGroups, defaultMenuGroups, panelItems, onMenuItemsChanged, onMenuGroupsChanged, onAllPagesClick, } = props;
|
|
4618
4463
|
const [innerVisiblePanel, setInnerVisiblePanel] = useState();
|
|
4619
4464
|
const ALL_PAGES_MENU_ITEM = React__default.useMemo(() => {
|
|
4620
4465
|
return getAllPagesMenuItem();
|
|
@@ -4641,6 +4486,17 @@ const useAsideHeaderInnerContextValue = (props) => {
|
|
|
4641
4486
|
}
|
|
4642
4487
|
(_a = item.onItemClick) === null || _a === undefined ? undefined : _a.call(item, item, collapsed, event);
|
|
4643
4488
|
}, [innerOnClosePanel, ALL_PAGES_MENU_ITEM, onClosePanel]);
|
|
4489
|
+
const onToggleGroupCollapsed = useCallback((groupId) => {
|
|
4490
|
+
const updatedMenuGroups = menuGroups === null || menuGroups === undefined ? undefined : menuGroups.map((group) => {
|
|
4491
|
+
if (group.id === groupId) {
|
|
4492
|
+
return Object.assign(Object.assign({}, group), { collapsed: !group.collapsed });
|
|
4493
|
+
}
|
|
4494
|
+
return group;
|
|
4495
|
+
});
|
|
4496
|
+
if (updatedMenuGroups) {
|
|
4497
|
+
onMenuGroupsChanged === null || onMenuGroupsChanged === undefined ? undefined : onMenuGroupsChanged(updatedMenuGroups);
|
|
4498
|
+
}
|
|
4499
|
+
}, [menuGroups, onMenuGroupsChanged]);
|
|
4644
4500
|
const innerMenuItems = useMemo(() => allPagesIsAvailable
|
|
4645
4501
|
? [
|
|
4646
4502
|
...(menuItems || EMPTY_MENU_ITEMS),
|
|
@@ -4660,13 +4516,20 @@ const useAsideHeaderInnerContextValue = (props) => {
|
|
|
4660
4516
|
},
|
|
4661
4517
|
];
|
|
4662
4518
|
}, [allPagesIsAvailable, panelItems, innerVisiblePanel]);
|
|
4663
|
-
return Object.assign(Object.assign({}, props), { onClosePanel: innerOnClosePanel, allPagesIsAvailable, menuItems: innerMenuItems,
|
|
4664
|
-
|
|
4519
|
+
return Object.assign(Object.assign({}, props), { onClosePanel: innerOnClosePanel, allPagesIsAvailable, menuItems: innerMenuItems, menuGroups,
|
|
4520
|
+
defaultMenuGroups,
|
|
4521
|
+
onMenuGroupsChanged, panelItems: innerPanelItems, size,
|
|
4522
|
+
onItemClick,
|
|
4523
|
+
onToggleGroupCollapsed });
|
|
4665
4524
|
};
|
|
4666
4525
|
|
|
4667
4526
|
const PageLayoutAside = React__default.forwardRef((props, ref) => {
|
|
4668
|
-
const { size, compact } = useAsideHeaderContext();
|
|
4669
|
-
const asideHeaderInnerContextValue = useAsideHeaderInnerContextValue(Object.assign({ size,
|
|
4527
|
+
const { size, compact, isExpanded, onMouseEnter, onMouseLeave } = useAsideHeaderContext();
|
|
4528
|
+
const asideHeaderInnerContextValue = useAsideHeaderInnerContextValue(Object.assign({ size,
|
|
4529
|
+
compact,
|
|
4530
|
+
isExpanded,
|
|
4531
|
+
onMouseEnter,
|
|
4532
|
+
onMouseLeave }, props));
|
|
4670
4533
|
return (React__default.createElement(AsideHeaderInnerContextProvider, { value: asideHeaderInnerContextValue },
|
|
4671
4534
|
React__default.createElement(FirstPanel, { ref: ref })));
|
|
4672
4535
|
});
|
|
@@ -4674,30 +4537,29 @@ PageLayoutAside.displayName = 'PageLayoutAside';
|
|
|
4674
4537
|
|
|
4675
4538
|
const AsideHeader = React__default.forwardRef((_a, ref) => {
|
|
4676
4539
|
var { compact, className, topAlert } = _a, props = __rest(_a, ["compact", "className", "topAlert"]);
|
|
4677
|
-
return (React__default.createElement(PageLayout, { compact: compact, className: className, topAlert: topAlert },
|
|
4540
|
+
return (React__default.createElement(PageLayout, { compact: compact, onChangeCompact: props.onChangeCompact, className: className, topAlert: topAlert },
|
|
4678
4541
|
React__default.createElement(PageLayoutAside, Object.assign({ ref: ref }, props)),
|
|
4679
4542
|
React__default.createElement(PageLayout.Content, { renderContent: props.renderContent })));
|
|
4680
4543
|
});
|
|
4681
4544
|
AsideHeader.displayName = 'AsideHeader';
|
|
4682
4545
|
|
|
4683
|
-
var css_248z$k = ".gn-footer-item{height:
|
|
4546
|
+
var css_248z$k = ".gn-footer-item{--gn-aside-header-item-expanded-radius:6px;border-radius:var(--gn-aside-header-item-expanded-radius);height:36px;margin-bottom:2px;width:100%}.gn-footer-item:last-child{margin-bottom:0}";
|
|
4684
4547
|
styleInject(css_248z$k);
|
|
4685
4548
|
|
|
4686
4549
|
const b$l = block('footer-item');
|
|
4687
|
-
|
|
4688
|
-
|
|
4689
|
-
|
|
4690
|
-
};
|
|
4550
|
+
function FooterItem$1(props) {
|
|
4551
|
+
return (React__default.createElement(Item$1, Object.assign({}, props, { iconSize: ASIDE_HEADER_ICON_SIZE, className: b$l({ compact: props.compact }) })));
|
|
4552
|
+
}
|
|
4691
4553
|
|
|
4692
4554
|
const AsideFallback = ({ headerDecoration, subheaderItemsCount = 0, qa }) => {
|
|
4693
4555
|
const { compact } = useAsideHeaderContext();
|
|
4694
4556
|
const widthVar = compact ? '--gn-aside-header-min-width' : '--gn-aside-header-size';
|
|
4695
4557
|
const subheaderHeight = (1 + subheaderItemsCount) * ITEM_HEIGHT;
|
|
4696
|
-
return (React__default.createElement("div", { className: b$
|
|
4697
|
-
React__default.createElement("div", { className: b$
|
|
4698
|
-
React__default.createElement("div", { className: b$
|
|
4558
|
+
return (React__default.createElement("div", { className: b$w('aside'), style: { width: `var(${widthVar})` }, "data-qa": qa },
|
|
4559
|
+
React__default.createElement("div", { className: b$w('aside-content', { 'with-decoration': headerDecoration }) },
|
|
4560
|
+
React__default.createElement("div", { className: b$w('header', { 'with-decoration': headerDecoration }) },
|
|
4699
4561
|
React__default.createElement("div", { style: { height: subheaderHeight } }),
|
|
4700
|
-
compact && headerDecoration ? (React__default.createElement(Icon, { data: SvgDividerCollapsed, className: b$
|
|
4562
|
+
compact && headerDecoration ? (React__default.createElement(Icon, { data: SvgDividerCollapsed, className: b$w('header-divider'), width: ASIDE_HEADER_COMPACT_WIDTH, height: HEADER_DIVIDER_HEIGHT })) : null),
|
|
4701
4563
|
React__default.createElement("div", { style: { flex: 1 } }))));
|
|
4702
4564
|
};
|
|
4703
4565
|
|
|
@@ -5700,7 +5562,7 @@ const OverlapPanel = ({ title, renderContent, className, onClose, action, closeT
|
|
|
5700
5562
|
var css_248z$4 = ".gn-mobile-header{--mobile-header-min-heigth:50px;--mobile-header-icon-size:20px;background-color:var(--g-color-base-background)}.gn-mobile-header__header-container{background-color:var(--g-color-base-background);position:sticky;top:0;z-index:var(--gn-mobile-header-z-index,100)}.gn-mobile-header__header{align-items:center;border-bottom:1px solid var(--g-color-line-generic);box-sizing:border-box;display:flex;justify-content:space-between;padding:0 10px}.gn-mobile-header__burger{padding:12px}.gn-mobile-header__panel-item{--gn-drawer-item-position:var(--gn-mobile-header-panel-position,absolute)}.gn-mobile-header__burger-menu,.gn-mobile-header__panel-item{background-color:var(--g-color-base-background);max-height:100%;max-width:90vw;width:320px}.gn-mobile-header__user-menu{overflow-y:auto}.gn-mobile-header__overlap-panel,.gn-mobile-header__panels{z-index:var(--gn-mobile-header-panel-z-index,98)}.gn-mobile-header__panels{inset:var(--mobile-header-min-heigth) 0 0;overflow:hidden;position:fixed}.gn-mobile-header__panel-item{height:100%;top:unset}.gn-mobile-header__content{overflow:auto}";
|
|
5701
5563
|
styleInject(css_248z$4);
|
|
5702
5564
|
|
|
5703
|
-
const TopAlert = React__default.lazy(() => import('./index-
|
|
5565
|
+
const TopAlert = React__default.lazy(() => import('./index-BzBUevHu.js').then((module) => ({ default: module.TopAlert })));
|
|
5704
5566
|
const b$4 = block('mobile-header');
|
|
5705
5567
|
const MobileHeader = React__default.forwardRef(({ logo, burgerMenu, burgerCloseTitle = i18n('burger_button_close'), burgerOpenTitle = i18n('burger_button_open'), panelItems = [], renderContent, sideItemRenderContent, onClosePanel, onEvent, className, contentClassName, overlapPanel, topAlert, }, ref) => {
|
|
5706
5568
|
const targetRef = useForwardRef(ref);
|
|
@@ -6001,4 +5863,4 @@ const MobileFooter = ({ className, menuItems: providedMenuItems, withDivider, mo
|
|
|
6001
5863
|
};
|
|
6002
5864
|
|
|
6003
5865
|
export { AsideHeader as A, DrawerItem as D, FooterItem$1 as F, HotkeysPanel as H, Logo as L, MOBILE_HEADER_EVENT_NAMES as M, PageLayout as P, Settings as S, Title as T, AsideHeaderContextProvider as a, block as b, PageLayoutAside as c, debounceFn as d, AsideFallback as e, Drawer as f, PublicActionBar as g, useSettingsContext as h, useSettingsSelectionContext as i, FooterItem as j, getMobileHeaderCustomEvent as k, MobileHeader as l, MobileLogo as m, Footer as n, MobileFooter as o, styleInject as s, useAsideHeaderContext as u };
|
|
6004
|
-
//# sourceMappingURL=index-
|
|
5866
|
+
//# sourceMappingURL=index-DH4SSAb2.js.map
|