@gravity-ui/navigation 3.10.1 → 5.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +39 -0
- package/build/cjs/components/AsideHeader/components/CompositeBar/Item/Item.d.ts +15 -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-8E4JW4bt.js → index-Bw3wDNJr.js} +631 -873
- package/build/cjs/index-Bw3wDNJr.js.map +1 -0
- package/build/cjs/{index-BlcEvPtS.js → index-Di96hvKc.js} +2 -2
- package/build/cjs/{index-BlcEvPtS.js.map → index-Di96hvKc.js.map} +1 -1
- 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 +39 -0
- package/build/esm/components/AsideHeader/components/CompositeBar/Item/Item.d.ts +15 -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-n2JA2W2G.js → index-B2xnhTBt.js} +2 -2
- package/build/esm/{index-n2JA2W2G.js.map → index-B2xnhTBt.js.map} +1 -1
- package/build/esm/{index-Cqnwnlke.js → index-OhAIuDEO.js} +634 -876
- package/build/esm/index-OhAIuDEO.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-8E4JW4bt.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-Cqnwnlke.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, Button, Popup, List, useForkRef, setRef, Flex, Text, Tooltip, HelpMark, Hotkey, TextInput, Loader, Sheet, eventBroker, Menu, DropdownMenu } from '@gravity-ui/uikit';
|
|
5
|
+
import { Ellipsis, Pin, PinFill, ChevronDown, ChevronRight, 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$u = 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$t = ".g-root{--gn-aside-top-panel-height:0px}.gn-aside-header{--gn-aside-header-min-width:56px;--_--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(--_--item-icon-background-size)}.gn-aside-header__menu-items{flex-grow:1}.gn-aside-header__menu-item,.gn-aside-header__menu-items-group{margin-inline:10px}.gn-aside-header__footer{display:flex;flex-direction:column;flex-shrink:0;margin:var(--g-spacing-2) 10px}.gn-aside-header__panels{--gn-drawer-z-index:var(--gn-aside-header-panel-z-index,98);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}.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{--gn-drawer-z-index:var(--gn-aside-header-panel-z-index,98);background:var(--g-color-base-background);position:fixed;top:0;width:100%}.gn-aside-header__content{margin-top:var(--gn-top-alert-height,0);width:calc(100% - var(--gn-aside-header-size));z-index:var(--gn-aside-header-content-z-index,95)}.gn-aside-header__content_expanded-by-hover{padding-left:var(--gn-aside-header-min-width)}";
|
|
215
|
+
styleInject(css_248z$t);
|
|
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-B2xnhTBt.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$u({ 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$u('top-alert'), alert: topAlert }))),
|
|
233
|
+
React__default.createElement("div", { className: b$u('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$u('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
|
+
}
|
|
307
|
+
}
|
|
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
|
+
}
|
|
223
338
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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$s = ".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$s);
|
|
384
|
+
|
|
385
|
+
const b$t = 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$t({ compact: compact }, className), onClick: onCollapseButtonClick, title: buttonTitle },
|
|
397
|
+
React__default.createElement(Icon, { data: SvgControlMenuButton, className: b$t('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
403
|
}
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
bailoutOnChildren = true;
|
|
702
|
-
}
|
|
703
|
-
outerStyle.width = 0;
|
|
704
|
-
childParams.width = width;
|
|
705
|
-
childParams.scaledWidth = scaledWidth;
|
|
706
|
-
}
|
|
707
|
-
if (doNotBailOutOnEmptyChildren) {
|
|
708
|
-
bailoutOnChildren = false;
|
|
709
|
-
}
|
|
710
|
-
return createElement(tagName, {
|
|
711
|
-
ref: this._setRef,
|
|
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
|
|
|
@@ -1385,7 +1071,7 @@ const b$s = 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,11 +1091,13 @@ 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
1103
|
setIsModalOpen(open);
|
|
@@ -1418,180 +1106,64 @@ const HighlightedItem = ({ iconRef, iconNode, onClick, onClickCapture, }) => {
|
|
|
1418
1106
|
return null;
|
|
1419
1107
|
}
|
|
1420
1108
|
return (React__default.createElement(Portal, null,
|
|
1421
|
-
React__default.createElement("div", { className: b$s(), style:
|
|
1109
|
+
React__default.createElement("div", { className: b$s(), style: position, onClick: onClick, onClickCapture: onClickCapture, "data-toast": true },
|
|
1422
1110
|
React__default.createElement("div", { className: b$s('icon') }, iconNode))));
|
|
1423
1111
|
};
|
|
1424
1112
|
HighlightedItem.displayName = 'HighlightedItem';
|
|
1425
1113
|
|
|
1426
1114
|
const ITEM_TYPE_REGULAR = 'regular';
|
|
1427
1115
|
const COLLAPSE_ITEM_ID = 'collapse-item-id';
|
|
1428
|
-
const POPUP_PLACEMENT = ['right-start', 'right-end', 'right'];
|
|
1429
|
-
const POPUP_ITEM_HEIGHT = 28;
|
|
1430
1116
|
|
|
1431
|
-
|
|
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);
|
|
1516
|
-
}
|
|
1517
|
-
return { listItems, collapseItems };
|
|
1518
|
-
}
|
|
1519
|
-
function isMenuItem(item) {
|
|
1520
|
-
return (item === null || item === undefined ? undefined : item.id) !== undefined;
|
|
1521
|
-
}
|
|
1522
|
-
|
|
1523
|
-
var css_248z$q = ".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-right:16px;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 8px;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:0 10px 8px;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:-19px;margin-top:-19px;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:-19px;margin-top:-19px;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:-19px;margin-top:-19px;position:absolute;top:50%;width:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));z-index:-1}";
|
|
1117
|
+
var css_248z$q = ".gn-composite-bar-item{--gn-composite-bar-item-action-size:36px;--_--item-icon-background-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(--_--item-icon-background-size,36px)}.gn-composite-bar-item__title{align-items:center;display:flex;justify-content:space-between;margin:0 var(--g-spacing-4) 0 var(--g-spacing-2);overflow:hidden}.gn-composite-bar-item__visibility-button{margin-left:auto}.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}";
|
|
1524
1118
|
styleInject(css_248z$q);
|
|
1525
1119
|
|
|
1526
1120
|
const b$r = block('composite-bar-item');
|
|
1527
|
-
function renderItemTitle(
|
|
1528
|
-
let titleNode = React__default.createElement("div", { className: b$r('title-text') },
|
|
1529
|
-
if (
|
|
1121
|
+
function renderItemTitle(params) {
|
|
1122
|
+
let titleNode = React__default.createElement("div", { className: b$r('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$r('title-adornment') },
|
|
1126
|
+
React__default.createElement("div", { className: b$r('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, editMode = false, onToggleVisibility, hidden, preventUserRemoving, } = 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
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
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 onPinButtonClick = React__default.useCallback((e) => {
|
|
1143
|
+
e.stopPropagation();
|
|
1144
|
+
e.preventDefault();
|
|
1145
|
+
onToggleVisibility === null || onToggleVisibility === undefined ? undefined : onToggleVisibility();
|
|
1146
|
+
}, [onToggleVisibility]);
|
|
1147
|
+
const handleOpenChangePopup = React__default.useCallback((newOpen, event, reason) => {
|
|
1562
1148
|
var _a;
|
|
1563
1149
|
if (event instanceof MouseEvent &&
|
|
1564
1150
|
event.target &&
|
|
1565
1151
|
((_a = ref.current) === null || _a === undefined ? undefined : _a.contains(event.target))) {
|
|
1566
1152
|
return;
|
|
1567
1153
|
}
|
|
1568
|
-
onOpenChangePopup === null || onOpenChangePopup === undefined ? undefined : onOpenChangePopup(
|
|
1569
|
-
}, [
|
|
1570
|
-
if (
|
|
1154
|
+
onOpenChangePopup === null || onOpenChangePopup === undefined ? undefined : onOpenChangePopup(newOpen, event, reason);
|
|
1155
|
+
}, [onOpenChangePopup]);
|
|
1156
|
+
if (type === 'divider') {
|
|
1571
1157
|
return React__default.createElement("div", { className: b$r('menu-divider') });
|
|
1572
1158
|
}
|
|
1573
1159
|
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);
|
|
1160
|
+
return compact ? React__default.createElement("div", { className: b$r('btn-icon') }, iconEl) : iconEl;
|
|
1576
1161
|
};
|
|
1577
1162
|
const makeNode = ({ icon: iconEl, title: titleEl }) => {
|
|
1578
|
-
const [Tag, tagProps] =
|
|
1579
|
-
? ['a', { href: item.link }]
|
|
1580
|
-
: ['button', {}];
|
|
1163
|
+
const [Tag, tagProps] = href ? ['a', { href }] : ['button', {}];
|
|
1581
1164
|
const createdNode = (React__default.createElement(React__default.Fragment, null,
|
|
1582
|
-
React__default.createElement(Tag, Object.assign({}, tagProps, { className: b$r({ type, current, compact },
|
|
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
|
-
}
|
|
1165
|
+
React__default.createElement(Tag, Object.assign({}, tagProps, { className: b$r({ type, current, compact }, className), ref: ref, "data-qa": qa, onClick: (event) => {
|
|
1166
|
+
onItemClick === null || onItemClick === undefined ? undefined : onItemClick(props, false, event);
|
|
1595
1167
|
}, onClickCapture: onItemClickCapture, onMouseEnter: () => {
|
|
1596
1168
|
if (!compact) {
|
|
1597
1169
|
onMouseEnter === null || onMouseEnter === undefined ? undefined : onMouseEnter();
|
|
@@ -1602,64 +1174,33 @@ const Item$1 = (props) => {
|
|
|
1602
1174
|
}
|
|
1603
1175
|
} }),
|
|
1604
1176
|
React__default.createElement("div", { className: b$r('icon-place'), ref: highlightedRef }, makeIconNode(iconEl)),
|
|
1605
|
-
React__default.createElement("div", { className: b$r('title'), title: typeof
|
|
1606
|
-
|
|
1177
|
+
React__default.createElement("div", { className: b$r('title'), title: typeof title === 'string' ? title : undefined }, titleEl),
|
|
1178
|
+
editMode && !preventUserRemoving && onToggleVisibility ? (React__default.createElement(Button, { onClick: onPinButtonClick, view: hidden ? 'flat-secondary' : 'flat-action', className: b$r('visibility-button') },
|
|
1179
|
+
React__default.createElement(Button.Icon, null, hidden ? React__default.createElement(Pin, null) : React__default.createElement(PinFill, null)))) : null),
|
|
1180
|
+
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
1181
|
return createdNode;
|
|
1608
1182
|
};
|
|
1609
1183
|
const iconNode = icon ? (React__default.createElement(Icon, { qa: iconQa, data: icon, size: iconSize, className: b$r('icon') })) : null;
|
|
1610
|
-
const titleNode = renderItemTitle(
|
|
1184
|
+
const titleNode = renderItemTitle({ title, rightAdornment });
|
|
1611
1185
|
const params = { icon: iconNode, title: titleNode };
|
|
1612
1186
|
let highlightedNode = null;
|
|
1613
1187
|
let node;
|
|
1614
|
-
const opts = { compact: Boolean(compact), collapsed: false, item, ref };
|
|
1615
|
-
if (typeof
|
|
1616
|
-
node =
|
|
1188
|
+
const opts = { compact: Boolean(compact), collapsed: false, item: props, ref };
|
|
1189
|
+
if (typeof itemWrapper === 'function') {
|
|
1190
|
+
node = itemWrapper(params, makeNode, opts);
|
|
1617
1191
|
highlightedNode =
|
|
1618
1192
|
bringForward &&
|
|
1619
|
-
|
|
1193
|
+
itemWrapper(params, ({ icon: iconEl }) => makeIconNode(iconEl), opts);
|
|
1620
1194
|
}
|
|
1621
1195
|
else {
|
|
1622
1196
|
node = makeNode(params);
|
|
1623
1197
|
highlightedNode = bringForward && makeIconNode(iconNode);
|
|
1624
1198
|
}
|
|
1625
1199
|
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) })))));
|
|
1200
|
+
bringForward && (React__default.createElement(HighlightedItem, { iconNode: highlightedNode, iconRef: highlightedRef, onClick: (event) => onItemClick === null || onItemClick === undefined ? undefined : onItemClick(props, false, event), onClickCapture: onItemClickCapture })),
|
|
1201
|
+
node));
|
|
1629
1202
|
};
|
|
1630
1203
|
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
1204
|
|
|
1664
1205
|
const multipleTooltipContextDefaults = {
|
|
1665
1206
|
active: false,
|
|
@@ -1691,32 +1232,68 @@ const POPUP_OFFSET = { mainAxis: 4, crossAxis: -32 };
|
|
|
1691
1232
|
const MultipleTooltip = ({ items, open, anchorRef, placement, }) => {
|
|
1692
1233
|
const { activeIndex, hideCollapseItemTooltip } = React__default.useContext(MultipleTooltipContext);
|
|
1693
1234
|
const activeItem = activeIndex === undefined ? null : items[activeIndex];
|
|
1694
|
-
return (React__default.createElement(Popup, { open: open, className: b$q('popup'),
|
|
1235
|
+
return (React__default.createElement(Popup, { open: open, className: b$q('popup'), anchorElement: anchorRef.current, strategy: "fixed", placement: placement, offset: POPUP_OFFSET },
|
|
1695
1236
|
React__default.createElement("div", { className: b$q() },
|
|
1696
1237
|
React__default.createElement("div", { className: b$q('items-container') }, items
|
|
1697
1238
|
.filter(({ type = 'regular', id }) => !hideCollapseItemTooltip ||
|
|
1698
1239
|
(id !== COLLAPSE_ITEM_ID && type !== 'action'))
|
|
1699
|
-
.map((
|
|
1700
|
-
switch (
|
|
1240
|
+
.map((currentItem, idx) => {
|
|
1241
|
+
switch (currentItem.type) {
|
|
1701
1242
|
case 'divider':
|
|
1702
|
-
return (React__default.createElement("div", { className: b$q('item', { divider: true }), key: idx },
|
|
1243
|
+
return (React__default.createElement("div", { className: b$q('item', { divider: true }), key: idx }, currentItem.title));
|
|
1703
1244
|
default:
|
|
1704
1245
|
return (React__default.createElement("div", { className: b$q('item', {
|
|
1705
|
-
active:
|
|
1706
|
-
}), key: idx },
|
|
1246
|
+
active: currentItem === activeItem,
|
|
1247
|
+
}), key: idx }, currentItem.title));
|
|
1707
1248
|
}
|
|
1708
1249
|
})))));
|
|
1709
1250
|
};
|
|
1710
1251
|
|
|
1711
|
-
|
|
1252
|
+
const GAP = 2;
|
|
1253
|
+
function getGroupBlockHeight(items) {
|
|
1254
|
+
if (items.length === 0) {
|
|
1255
|
+
return ITEM_HEIGHT;
|
|
1256
|
+
}
|
|
1257
|
+
const gaps = items.length * GAP;
|
|
1258
|
+
// +1 accounts for the group header item in addition to the menu items
|
|
1259
|
+
return (items.length + 1) * ITEM_HEIGHT + gaps;
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
function getGroupHeight(compositeItem) {
|
|
1263
|
+
const visibleGroupItems = compositeItem.isCollapsed ? [] : compositeItem.items;
|
|
1264
|
+
return getGroupBlockHeight(visibleGroupItems);
|
|
1265
|
+
}
|
|
1266
|
+
function getItemHeight$1(compositeItem) {
|
|
1267
|
+
var _a;
|
|
1268
|
+
if ('items' in compositeItem && compositeItem.items && ((_a = compositeItem.items) === null || _a === undefined ? undefined : _a.length) > 0) {
|
|
1269
|
+
return getGroupHeight(compositeItem);
|
|
1270
|
+
}
|
|
1271
|
+
switch (compositeItem.type) {
|
|
1272
|
+
case 'action':
|
|
1273
|
+
return 50;
|
|
1274
|
+
case 'divider':
|
|
1275
|
+
return 15;
|
|
1276
|
+
default:
|
|
1277
|
+
return ITEM_HEIGHT;
|
|
1278
|
+
}
|
|
1279
|
+
}
|
|
1280
|
+
function getItemsHeight(items) {
|
|
1281
|
+
return items.reduce((sum, item) => sum + getItemHeight$1(item), 0);
|
|
1282
|
+
}
|
|
1283
|
+
function getSelectedItemIndex$1(compositeItems) {
|
|
1284
|
+
const index = compositeItems.findIndex(({ current }) => Boolean(current));
|
|
1285
|
+
return index === -1 ? undefined : index;
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
var css_248z$o = ".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__menu-group-header,.gn-composite-bar__menu-group-item,.gn-composite-bar__root-menu-item[class]{margin-bottom:2px}.gn-composite-bar__menu-group-header:last-child,.gn-composite-bar__menu-group-item:last-child,.gn-composite-bar__root-menu-item[class]: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__root-menu-item:has(.gn-composite-bar__menu-group){align-items:flex-start}.gn-composite-bar__root-menu-item:has(.gn-composite-bar__menu-group)>.g-list__item-sort-icon{position:relative;top:12px}.gn-composite-bar__root-menu-item:has(.gn-composite-bar__menu-group):not(.gn-composite-bar__root-menu-item_compact) .g-list__item-content{overflow:visible}.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-header,.gn-composite-bar__menu-group-item{height:36px}.gn-composite-bar__menu-group-item{position:relative}.gn-composite-bar__menu-group-item:not(.gn-composite-bar__menu-group-item_compact){width:calc(100% + 16px)}.gn-composite-bar__menu-group-item_edit{left:-16px}.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)}";
|
|
1712
1289
|
styleInject(css_248z$o);
|
|
1713
1290
|
|
|
1714
1291
|
const b$p = block('composite-bar');
|
|
1715
|
-
const CompositeBarView = ({ type, items, onItemClick, onMoreClick,
|
|
1292
|
+
const CompositeBarView = ({ type, items, onItemClick, onMoreClick, multipleTooltip = false, compositeId, className, groupClassName, menuItemClassName, enableSorting = false, editMode = false, compact, onToggleGroupCollapsed, onToggleMenuGroupVisibility, onToggleMenuItemVisibility, onFirstLevelSortEnd, onSecondLevelSortEnd, }) => {
|
|
1716
1293
|
const ref = useRef(null);
|
|
1717
1294
|
const tooltipRef = useRef(null);
|
|
1295
|
+
const [hoveredGroupId, setHoveredGroupId] = useState(null);
|
|
1718
1296
|
const { setValue: setMultipleTooltipContextValue, active: multipleTooltipActive, activeIndex, lastClickedItemIndex, } = useContext(MultipleTooltipContext);
|
|
1719
|
-
const { compact } = useAsideHeaderContext();
|
|
1720
1297
|
React__default.useEffect(() => {
|
|
1721
1298
|
function handleBlurWindow() {
|
|
1722
1299
|
if (multipleTooltip && multipleTooltipActive) {
|
|
@@ -1796,7 +1373,7 @@ const CompositeBarView = ({ type, items, onItemClick, onMoreClick, collapseItems
|
|
|
1796
1373
|
multipleTooltip,
|
|
1797
1374
|
setMultipleTooltipContextValue,
|
|
1798
1375
|
]);
|
|
1799
|
-
const onItemClickByIndex = useCallback((itemIndex) => (item, collapsed, event) => {
|
|
1376
|
+
const onItemClickByIndex = useCallback((itemIndex, orginalItemClick) => (item, collapsed, event) => {
|
|
1800
1377
|
if (compact &&
|
|
1801
1378
|
multipleTooltip &&
|
|
1802
1379
|
itemIndex !== lastClickedItemIndex &&
|
|
@@ -1806,107 +1383,108 @@ const CompositeBarView = ({ type, items, onItemClick, onMoreClick, collapseItems
|
|
|
1806
1383
|
active: false,
|
|
1807
1384
|
});
|
|
1808
1385
|
}
|
|
1809
|
-
|
|
1386
|
+
// Handle clicks on the "more" button (collapse item)
|
|
1387
|
+
if (item.id === COLLAPSE_ITEM_ID && collapsed) {
|
|
1388
|
+
onMoreClick === null || onMoreClick === undefined ? undefined : onMoreClick();
|
|
1389
|
+
}
|
|
1390
|
+
else {
|
|
1391
|
+
onItemClick === null || onItemClick === undefined ? undefined : onItemClick(Object.assign(Object.assign({}, item), { onItemClick: orginalItemClick }), collapsed, event);
|
|
1392
|
+
}
|
|
1810
1393
|
}, [
|
|
1811
1394
|
compact,
|
|
1812
1395
|
lastClickedItemIndex,
|
|
1813
1396
|
multipleTooltip,
|
|
1814
1397
|
onItemClick,
|
|
1398
|
+
onMoreClick,
|
|
1815
1399
|
setMultipleTooltipContextValue,
|
|
1816
1400
|
]);
|
|
1401
|
+
const handleFirstLevelSortEnd = useCallback(({ oldIndex, newIndex }) => {
|
|
1402
|
+
if (onFirstLevelSortEnd) {
|
|
1403
|
+
onFirstLevelSortEnd({ oldIndex, newIndex });
|
|
1404
|
+
}
|
|
1405
|
+
}, [onFirstLevelSortEnd]);
|
|
1406
|
+
const handleSecondLevelSortEnd = useCallback((groupIndex) => ({ oldIndex, newIndex }) => {
|
|
1407
|
+
if (onSecondLevelSortEnd) {
|
|
1408
|
+
onSecondLevelSortEnd(groupIndex)({ oldIndex, newIndex });
|
|
1409
|
+
}
|
|
1410
|
+
}, [onSecondLevelSortEnd]);
|
|
1411
|
+
if (!items || items.length === 0) {
|
|
1412
|
+
return null;
|
|
1413
|
+
}
|
|
1817
1414
|
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$p('root-menu-item'), virtualized: false, filterable: false, sortable:
|
|
1820
|
-
const
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1415
|
+
React__default.createElement("div", { className: className, ref: tooltipRef, onMouseEnter: onTooltipMouseEnter, onMouseLeave: onTooltipMouseLeave },
|
|
1416
|
+
React__default.createElement(List, { id: compositeId, ref: ref, items: items, selectedItemIndex: type === 'menu' ? getSelectedItemIndex$1(items) : undefined, itemHeight: getItemHeight$1, itemsHeight: getItemsHeight, itemClassName: b$p('root-menu-item', { compact }), virtualized: false, filterable: false, sortable: enableSorting, onSortEnd: enableSorting ? handleFirstLevelSortEnd : undefined, renderItem: (item, _isItemActive, itemIndex) => {
|
|
1417
|
+
const groupId = item.groupId;
|
|
1418
|
+
if (!groupId) {
|
|
1419
|
+
return (React__default.createElement(Item$1, Object.assign({}, item, { className: b$p('menu-item', { compact }, menuItemClassName), compact: compact, editMode: editMode, onMouseEnter: onMouseEnterByIndex(itemIndex), onMouseLeave: onMouseLeave, onItemClick: onItemClickByIndex(itemIndex, item.onItemClick), onToggleVisibility: onToggleMenuItemVisibility
|
|
1420
|
+
? () => onToggleMenuItemVisibility(item)
|
|
1421
|
+
: undefined })));
|
|
1422
|
+
}
|
|
1423
|
+
const isCollapsible = Boolean('collapsible' in item && item.collapsible);
|
|
1424
|
+
const isCollapsed = Boolean('isCollapsed' in item && item.isCollapsed);
|
|
1425
|
+
const groupListItems = ('items' in item && item.items) || [];
|
|
1426
|
+
const hasHeader = item.title || item.icon || isCollapsible;
|
|
1427
|
+
const isUngrouped = item.id === UNGROUPED_ID;
|
|
1428
|
+
const isGroupHovered = hoveredGroupId === item.id;
|
|
1429
|
+
let groupIcon = item.icon;
|
|
1430
|
+
if (!isCollapsed) {
|
|
1431
|
+
groupIcon = ChevronDown;
|
|
1432
|
+
}
|
|
1433
|
+
else if (isGroupHovered) {
|
|
1434
|
+
groupIcon = ChevronRight;
|
|
1435
|
+
}
|
|
1436
|
+
return (React__default.createElement("div", { className: b$p('menu-group', { expanded: !isCollapsed }, groupClassName) },
|
|
1437
|
+
hasHeader && !isUngrouped && (React__default.createElement(Item$1, Object.assign({}, item, { className: b$p('menu-group-header', { collapsed: isCollapsed }), icon: groupIcon, compact: compact, editMode: editMode, onMouseEnter: () => {
|
|
1438
|
+
setHoveredGroupId(item.id);
|
|
1439
|
+
}, onMouseLeave: () => {
|
|
1440
|
+
setHoveredGroupId(null);
|
|
1441
|
+
}, onItemClick: onItemClickByIndex(itemIndex, onToggleGroupCollapsed
|
|
1442
|
+
? () => onToggleGroupCollapsed(groupId)
|
|
1443
|
+
: undefined), onToggleVisibility: onToggleMenuGroupVisibility
|
|
1444
|
+
? () => onToggleMenuGroupVisibility(groupId)
|
|
1445
|
+
: undefined }))),
|
|
1446
|
+
!isCollapsed && (React__default.createElement(List, { items: groupListItems, sortable: enableSorting, onSortEnd: handleSecondLevelSortEnd(itemIndex), virtualized: false, filterable: false, itemClassName: b$p('menu-group-item', {
|
|
1447
|
+
edit: enableSorting,
|
|
1448
|
+
compact,
|
|
1449
|
+
}), itemHeight: getItemHeight$1, itemsHeight: getItemsHeight, renderItem: (nestedItem, _isNestedItemActive, _nestedItemIndex) => {
|
|
1450
|
+
return (React__default.createElement(Item$1, Object.assign({}, nestedItem, { className: b$p('menu-group-header', {
|
|
1451
|
+
collapsed: isCollapsed,
|
|
1452
|
+
}), compact: compact, editMode: editMode, onMouseEnter: () => {
|
|
1453
|
+
setHoveredGroupId(nestedItem.id);
|
|
1454
|
+
}, onMouseLeave: () => {
|
|
1455
|
+
setHoveredGroupId(null);
|
|
1456
|
+
}, onItemClick: onItemClickByIndex(itemIndex, item.onItemClick), onToggleVisibility: onToggleMenuItemVisibility
|
|
1457
|
+
? () => onToggleMenuItemVisibility(nestedItem)
|
|
1458
|
+
: undefined })));
|
|
1459
|
+
} }))));
|
|
1825
1460
|
} })),
|
|
1826
1461
|
type === 'menu' && multipleTooltip && (React__default.createElement(MultipleTooltip, { open: compact && multipleTooltipActive, anchorRef: tooltipRef, placement: ['right-start'], items: items }))));
|
|
1827
1462
|
};
|
|
1828
|
-
const CompositeBar = ({ type, items,
|
|
1829
|
-
|
|
1463
|
+
const CompositeBar = ({ type, items, onItemClick, onMoreClick, onToggleGroupCollapsed, multipleTooltip = false, compact, compositeId, className, groupClassName, menuItemClassName, editMode = false, }) => {
|
|
1464
|
+
var _a;
|
|
1465
|
+
const visibleItems = (_a = items === null || items === undefined ? undefined : items.filter((item) => !item.hidden)) === null || _a === undefined ? undefined : _a.map((item) => {
|
|
1466
|
+
var _a;
|
|
1467
|
+
return (Object.assign(Object.assign({}, item), { items: 'items' in item ? (_a = item.items) === null || _a === undefined ? undefined : _a.filter((item) => !item.hidden) : [] }));
|
|
1468
|
+
});
|
|
1469
|
+
if (!visibleItems || visibleItems.length === 0) {
|
|
1830
1470
|
return null;
|
|
1831
1471
|
}
|
|
1832
1472
|
let node;
|
|
1833
1473
|
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
|
-
}))));
|
|
1474
|
+
node = (React__default.createElement("div", { className: b$p({ scrollable: true }, className) },
|
|
1475
|
+
React__default.createElement(CompositeBarView, { compositeId: compositeId, groupClassName: groupClassName, menuItemClassName: menuItemClassName, type: "menu", compact: compact, items: visibleItems, onItemClick: onItemClick, onMoreClick: onMoreClick, multipleTooltip: multipleTooltip, onToggleGroupCollapsed: onToggleGroupCollapsed, editMode: editMode })));
|
|
1843
1476
|
}
|
|
1844
1477
|
else {
|
|
1845
|
-
node = (React__default.createElement("div", { className: b$p({ subheader: true }) },
|
|
1846
|
-
React__default.createElement(CompositeBarView, { type: "subheader", items:
|
|
1478
|
+
node = (React__default.createElement("div", { className: b$p({ subheader: true }, className) },
|
|
1479
|
+
React__default.createElement(CompositeBarView, { groupClassName: groupClassName, menuItemClassName: menuItemClassName, type: "subheader", compact: compact, items: visibleItems, onItemClick: onItemClick, editMode: editMode })));
|
|
1847
1480
|
}
|
|
1848
1481
|
return React__default.createElement(MultipleTooltipProvider, null, node);
|
|
1849
1482
|
};
|
|
1850
1483
|
|
|
1851
|
-
var
|
|
1852
|
-
var button_expand$1 = "Expand";
|
|
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)}";
|
|
1484
|
+
var css_248z$n = ".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}";
|
|
1887
1485
|
styleInject(css_248z$n);
|
|
1888
1486
|
|
|
1889
|
-
const b$o = block('
|
|
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);
|
|
1908
|
-
|
|
1909
|
-
const b$n = block('logo');
|
|
1487
|
+
const b$o = block('logo');
|
|
1910
1488
|
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
1489
|
const hasWrapper = typeof wrapper === 'function';
|
|
1912
1490
|
let buttonIcon;
|
|
@@ -1922,7 +1500,7 @@ const Logo = ({ text, icon, iconSrc, iconClassName, iconPlaceClassName, iconSize
|
|
|
1922
1500
|
logo = text();
|
|
1923
1501
|
}
|
|
1924
1502
|
else {
|
|
1925
|
-
logo = (React__default.createElement("div", { className: b$
|
|
1503
|
+
logo = (React__default.createElement("div", { className: b$o('logo'), style: { fontSize: textSize } }, text));
|
|
1926
1504
|
}
|
|
1927
1505
|
const _a = href
|
|
1928
1506
|
? {
|
|
@@ -1934,10 +1512,10 @@ const Logo = ({ text, icon, iconSrc, iconClassName, iconPlaceClassName, iconSize
|
|
|
1934
1512
|
'aria-labelledby': ariaLabelledby,
|
|
1935
1513
|
}
|
|
1936
1514
|
: { 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$
|
|
1515
|
+
const button = (React__default.createElement(Button, Object.assign({}, buttonProps, { className: b$o('btn-logo', buttonClassName), onClick: onClick }),
|
|
1516
|
+
React__default.createElement("span", { className: b$o('logo-icon-place', iconPlaceClassName) }, buttonIcon),
|
|
1939
1517
|
!compact && logo));
|
|
1940
|
-
return (React__default.createElement("div", { className: b$
|
|
1518
|
+
return (React__default.createElement("div", { className: b$o(null, className) }, hasWrapper ? wrapper(button, Boolean(compact)) : button));
|
|
1941
1519
|
};
|
|
1942
1520
|
|
|
1943
1521
|
var _path;
|
|
@@ -1957,17 +1535,18 @@ var SvgDividerCollapsed = function SvgDividerCollapsed(props) {
|
|
|
1957
1535
|
const DEFAULT_SUBHEADER_ITEMS = [];
|
|
1958
1536
|
const HEADER_COMPOSITE_ID = 'gravity-ui/navigation-header-composite-bar';
|
|
1959
1537
|
const Header = () => {
|
|
1960
|
-
const { logo, onItemClick, onClosePanel, headerDecoration, subheaderItems } = useAsideHeaderInnerContext();
|
|
1961
|
-
const {
|
|
1538
|
+
const { logo, compact, onItemClick, onClosePanel, headerDecoration, subheaderItems } = useAsideHeaderInnerContext();
|
|
1539
|
+
const { isExpanded } = useAsideHeaderInnerContext();
|
|
1540
|
+
const items = useGroupedMenuItems(subheaderItems || DEFAULT_SUBHEADER_ITEMS);
|
|
1962
1541
|
const onLogoClick = useCallback((event) => {
|
|
1963
1542
|
var _a;
|
|
1964
1543
|
onClosePanel === null || onClosePanel === undefined ? undefined : onClosePanel();
|
|
1965
1544
|
(_a = logo === null || logo === undefined ? undefined : logo.onClick) === null || _a === undefined ? undefined : _a.call(logo, event);
|
|
1966
1545
|
}, [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$
|
|
1546
|
+
return (React__default.createElement("div", { className: b$u('header', { ['with-decoration']: headerDecoration }) },
|
|
1547
|
+
logo && (React__default.createElement(Logo, Object.assign({}, logo, { onClick: onLogoClick, compact: !isExpanded, buttonClassName: b$u('logo-button'), iconPlaceClassName: b$u('logo-icon-place') }))),
|
|
1548
|
+
React__default.createElement(CompositeBar, { compositeId: HEADER_COMPOSITE_ID, menuItemClassName: b$u('menu-item'), type: "subheader", compact: compact, items: items, onItemClick: onItemClick }),
|
|
1549
|
+
headerDecoration && (React__default.createElement(Icon, { data: SvgDividerCollapsed, className: b$u('header-divider'), width: ASIDE_HEADER_COMPACT_WIDTH, height: HEADER_DIVIDER_HEIGHT }))));
|
|
1971
1550
|
};
|
|
1972
1551
|
|
|
1973
1552
|
// Avoid Chrome DevTools blue warning.
|
|
@@ -1979,12 +1558,20 @@ function getPlatform() {
|
|
|
1979
1558
|
return navigator.platform;
|
|
1980
1559
|
}
|
|
1981
1560
|
|
|
1982
|
-
var
|
|
1561
|
+
var isClient = typeof document !== 'undefined';
|
|
1562
|
+
|
|
1563
|
+
var noop$1 = function noop() {};
|
|
1564
|
+
var index = isClient ? useLayoutEffect : noop$1;
|
|
1565
|
+
|
|
1983
1566
|
if (process.env.NODE_ENV !== "production") ;
|
|
1984
1567
|
|
|
1985
1568
|
let lockCount = 0;
|
|
1569
|
+
const scrollbarProperty = '--floating-ui-scrollbar-width';
|
|
1986
1570
|
function enableScrollLock() {
|
|
1987
|
-
const
|
|
1571
|
+
const platform = getPlatform();
|
|
1572
|
+
const isIOS = /iP(hone|ad|od)|iOS/.test(platform) ||
|
|
1573
|
+
// iPads can claim to be MacIntel
|
|
1574
|
+
platform === 'MacIntel' && navigator.maxTouchPoints > 1;
|
|
1988
1575
|
const bodyStyle = document.body.style;
|
|
1989
1576
|
// RTL <body> scrollbar
|
|
1990
1577
|
const scrollbarX = Math.round(document.documentElement.getBoundingClientRect().left) + document.documentElement.scrollLeft;
|
|
@@ -1993,6 +1580,7 @@ function enableScrollLock() {
|
|
|
1993
1580
|
const scrollX = bodyStyle.left ? parseFloat(bodyStyle.left) : window.scrollX;
|
|
1994
1581
|
const scrollY = bodyStyle.top ? parseFloat(bodyStyle.top) : window.scrollY;
|
|
1995
1582
|
bodyStyle.overflow = 'hidden';
|
|
1583
|
+
bodyStyle.setProperty(scrollbarProperty, scrollbarWidth + "px");
|
|
1996
1584
|
if (scrollbarWidth) {
|
|
1997
1585
|
bodyStyle[paddingProp] = scrollbarWidth + "px";
|
|
1998
1586
|
}
|
|
@@ -2016,6 +1604,7 @@ function enableScrollLock() {
|
|
|
2016
1604
|
overflow: '',
|
|
2017
1605
|
[paddingProp]: ''
|
|
2018
1606
|
});
|
|
1607
|
+
bodyStyle.removeProperty(scrollbarProperty);
|
|
2019
1608
|
if (isIOS) {
|
|
2020
1609
|
Object.assign(bodyStyle, {
|
|
2021
1610
|
position: '',
|
|
@@ -2082,7 +1671,7 @@ function _objectWithoutPropertiesLoose(r, e) {
|
|
|
2082
1671
|
if (null == r) return {};
|
|
2083
1672
|
var t = {};
|
|
2084
1673
|
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
|
2085
|
-
if (e.indexOf(n)
|
|
1674
|
+
if (-1 !== e.indexOf(n)) continue;
|
|
2086
1675
|
t[n] = r[n];
|
|
2087
1676
|
}
|
|
2088
1677
|
return t;
|
|
@@ -4480,10 +4069,10 @@ function useResizableDrawerItem(params) {
|
|
|
4480
4069
|
return { resizedWidth: displayWidth, resizerHandlers: handlers, isResizing };
|
|
4481
4070
|
}
|
|
4482
4071
|
|
|
4483
|
-
var css_248z$
|
|
4484
|
-
styleInject(css_248z$
|
|
4072
|
+
var css_248z$m = ".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))}";
|
|
4073
|
+
styleInject(css_248z$m);
|
|
4485
4074
|
|
|
4486
|
-
const b$
|
|
4075
|
+
const b$n = block('drawer');
|
|
4487
4076
|
const TIMEOUT = 300;
|
|
4488
4077
|
const DrawerItem = React__default.forwardRef(function DrawerItem(props, ref) {
|
|
4489
4078
|
const { visible, content, children, direction = 'left', className, resizable, width, minResizeWidth, maxResizeWidth, onResizeStart, onResizeContinue, onResize, keepMounted = false, style = {}, } = props;
|
|
@@ -4515,10 +4104,10 @@ const DrawerItem = React__default.forwardRef(function DrawerItem(props, ref) {
|
|
|
4515
4104
|
React__default.useEffect(() => {
|
|
4516
4105
|
setInitialRender(true);
|
|
4517
4106
|
}, [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$
|
|
4107
|
+
const resizerElement = resizable ? (React__default.createElement("div", Object.assign({ className: b$n('resizer', { direction }) }, resizerHandlers),
|
|
4108
|
+
React__default.createElement("div", { className: b$n('resizer-handle', { direction }) }))) : null;
|
|
4109
|
+
return (React__default.createElement(CSSTransition, { in: visible, timeout: TIMEOUT, mountOnEnter: !keepMounted, unmountOnExit: !keepMounted, classNames: b$n('item-transition', { direction: cssDirection }), nodeRef: itemRef, onEnter: () => setInitialRender(false), onExit: () => setInitialRender(false) },
|
|
4110
|
+
React__default.createElement("div", { ref: handleRef, className: b$n('item', {
|
|
4522
4111
|
direction: cssDirection,
|
|
4523
4112
|
hidden: isInitialRender && !visible,
|
|
4524
4113
|
resize: isResizing,
|
|
@@ -4554,9 +4143,9 @@ const Drawer = ({ className, veilClassName, children, style, onVeilClick, onEsca
|
|
|
4554
4143
|
useScrollLock(shouldApplyScrollLock);
|
|
4555
4144
|
return (React__default.createElement(Transition, { in: someItemVisible, timeout: { enter: 0, exit: TIMEOUT }, mountOnEnter: !keepMounted, unmountOnExit: !keepMounted, nodeRef: containerRef }, (state) => {
|
|
4556
4145
|
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$
|
|
4146
|
+
const content = (React__default.createElement("div", { ref: containerRef, className: b$n({ hideVeil }, className), style: style },
|
|
4147
|
+
React__default.createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$n('veil-transition'), nodeRef: veilRef },
|
|
4148
|
+
React__default.createElement("div", { ref: veilRef, className: b$n('veil', { hidden: hideVeil }, veilClassName), onClick: onVeilClick })),
|
|
4560
4149
|
React__default.Children.map(children, (child) => {
|
|
4561
4150
|
if (React__default.isValidElement(child) &&
|
|
4562
4151
|
child.type === DrawerItem) {
|
|
@@ -4578,28 +4167,29 @@ const Drawer = ({ className, veilClassName, children, style, onVeilClick, onEsca
|
|
|
4578
4167
|
};
|
|
4579
4168
|
|
|
4580
4169
|
const Panels = () => {
|
|
4581
|
-
const { panelItems,
|
|
4582
|
-
return panelItems ? (React__default.createElement(Drawer, { className: b$
|
|
4170
|
+
const { panelItems, size, onClosePanel } = useAsideHeaderInnerContext();
|
|
4171
|
+
return panelItems ? (React__default.createElement(Drawer, { className: b$u('panels'), onVeilClick: onClosePanel, onEscape: onClosePanel, style: { left: size } }, panelItems.map((item) => (React__default.createElement(DrawerItem, Object.assign({ key: item.id, className: b$u('panel') }, item)))))) : null;
|
|
4583
4172
|
};
|
|
4584
4173
|
|
|
4585
4174
|
const MENU_ITEMS_COMPOSITE_ID = 'gravity-ui/navigation-menu-items-composite-bar';
|
|
4586
4175
|
const FirstPanel = React__default.forwardRef((_props, ref) => {
|
|
4587
|
-
const { size, onItemClick, headerDecoration, multipleTooltip,
|
|
4588
|
-
const
|
|
4176
|
+
const { size, onItemClick, headerDecoration, multipleTooltip, onMenuMoreClick, renderFooter, onToggleGroupCollapsed, compact, customBackground, customBackgroundClassName, className, hideCollapseButton, menuItems, menuGroups, qa, onMouseEnter, onMouseLeave, isExpanded, } = useAsideHeaderInnerContext();
|
|
4177
|
+
const flatListItems = useGroupedMenuItems(menuItems, menuGroups);
|
|
4589
4178
|
const asideRef = useRef(null);
|
|
4590
4179
|
React__default.useEffect(() => {
|
|
4591
4180
|
setRef(ref, asideRef.current);
|
|
4592
4181
|
}, [ref]);
|
|
4182
|
+
const isExpandedByHover = compact && isExpanded;
|
|
4593
4183
|
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$
|
|
4184
|
+
React__default.createElement("div", { className: b$u('aside', { 'expanded-by-hover': isExpandedByHover }, className), style: { width: size }, "data-qa": qa, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave },
|
|
4185
|
+
React__default.createElement("div", { className: b$u('aside-popup-anchor'), ref: asideRef }),
|
|
4186
|
+
customBackground && (React__default.createElement("div", { className: b$u('aside-custom-background', customBackgroundClassName) }, customBackground)),
|
|
4187
|
+
React__default.createElement("div", { className: b$u('aside-content', { ['with-decoration']: headerDecoration }) },
|
|
4598
4188
|
React__default.createElement(Header, null),
|
|
4599
|
-
(
|
|
4600
|
-
React__default.createElement("div", { className: b$
|
|
4189
|
+
(flatListItems === null || flatListItems === undefined ? undefined : flatListItems.length) ? (React__default.createElement(CompositeBar, { compositeId: MENU_ITEMS_COMPOSITE_ID, className: b$u('menu-items'), groupClassName: b$u('menu-items-group'), menuItemClassName: b$u('menu-item'), compact: !isExpanded, type: "menu", items: flatListItems, onItemClick: onItemClick, onMoreClick: onMenuMoreClick, onToggleGroupCollapsed: onToggleGroupCollapsed, multipleTooltip: multipleTooltip })) : (React__default.createElement("div", { className: b$u('menu-items') })),
|
|
4190
|
+
React__default.createElement("div", { className: b$u('footer') }, renderFooter === null || renderFooter === undefined ? undefined : renderFooter({
|
|
4601
4191
|
size,
|
|
4602
|
-
compact: Boolean(
|
|
4192
|
+
compact: Boolean(!isExpanded),
|
|
4603
4193
|
asideRef,
|
|
4604
4194
|
})),
|
|
4605
4195
|
!hideCollapseButton && React__default.createElement(CollapseButton, null))),
|
|
@@ -4607,6 +4197,157 @@ const FirstPanel = React__default.forwardRef((_props, ref) => {
|
|
|
4607
4197
|
});
|
|
4608
4198
|
FirstPanel.displayName = 'FirstPanel';
|
|
4609
4199
|
|
|
4200
|
+
function buildExpandedFromFlatList(flatList) {
|
|
4201
|
+
const expanded = [];
|
|
4202
|
+
flatList.forEach((item) => {
|
|
4203
|
+
if ('items' in item && item.items && item.items.length > 0) {
|
|
4204
|
+
expanded.push(...item.items);
|
|
4205
|
+
}
|
|
4206
|
+
else {
|
|
4207
|
+
expanded.push(item);
|
|
4208
|
+
}
|
|
4209
|
+
});
|
|
4210
|
+
return expanded;
|
|
4211
|
+
}
|
|
4212
|
+
|
|
4213
|
+
function getRealIndexInExpandedMenu(flatListIndex, flatList) {
|
|
4214
|
+
let realIndex = 0;
|
|
4215
|
+
for (let i = 0; i < flatListIndex; i++) {
|
|
4216
|
+
const item = flatList[i];
|
|
4217
|
+
if ('items' in item && item.items && item.items.length > 0) {
|
|
4218
|
+
realIndex += item.items.length;
|
|
4219
|
+
}
|
|
4220
|
+
else {
|
|
4221
|
+
realIndex += 1;
|
|
4222
|
+
}
|
|
4223
|
+
}
|
|
4224
|
+
return realIndex;
|
|
4225
|
+
}
|
|
4226
|
+
function getRealIndexInGroup(groupIndex, itemIndexInGroup, flatList) {
|
|
4227
|
+
const groupStartIndex = getRealIndexInExpandedMenu(groupIndex, flatList);
|
|
4228
|
+
return groupStartIndex + itemIndexInGroup;
|
|
4229
|
+
}
|
|
4230
|
+
|
|
4231
|
+
function sortMenuItems(oldIndex, newIndex, items) {
|
|
4232
|
+
if (items[oldIndex] === undefined || items[newIndex] === undefined) {
|
|
4233
|
+
return buildExpandedFromFlatList(items);
|
|
4234
|
+
}
|
|
4235
|
+
const sortedItems = [...items];
|
|
4236
|
+
const [movedElement] = sortedItems.splice(oldIndex, 1);
|
|
4237
|
+
sortedItems.splice(newIndex, 0, movedElement);
|
|
4238
|
+
return buildExpandedFromFlatList(sortedItems);
|
|
4239
|
+
}
|
|
4240
|
+
|
|
4241
|
+
var css_248z$l = ".gn-all-pages-panel{--gn-aside-header-item-expanded-radius:6px;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;overflow:auto}.gn-all-pages-panel__category{padding:0 var(--g-spacing-6)}.gn-all-pages-panel__discoverable-feature-wrapper{display:flex}.gn-all-pages-panel__menu-group{margin-inline:10px;width:100%}.gn-all-pages-panel__menu-group:not(:last-child){border-bottom:1px solid var(--g-color-line-generic);padding-bottom:var(--g-spacing-2)}";
|
|
4242
|
+
styleInject(css_248z$l);
|
|
4243
|
+
|
|
4244
|
+
const b$m = block('all-pages-panel');
|
|
4245
|
+
const AllPagesPanel = (props) => {
|
|
4246
|
+
const { startEditIcon, onEditModeChanged, className } = props;
|
|
4247
|
+
const { defaultMenuItems, editMenuProps, menuItems, menuGroups, defaultMenuGroups, onToggleGroupCollapsed, onMenuItemsChanged, onMenuGroupsChanged, } = useAsideHeaderInnerContext();
|
|
4248
|
+
const items = useGroupedMenuItems(menuItems, menuGroups, true);
|
|
4249
|
+
const menuItemsRef = useRef(items);
|
|
4250
|
+
menuItemsRef.current = items;
|
|
4251
|
+
const menuGroupsRef = useRef(menuGroups);
|
|
4252
|
+
menuGroupsRef.current = menuGroups;
|
|
4253
|
+
const [isEditMode, setIsEditMode] = useState(false);
|
|
4254
|
+
const toggleEditMode = useCallback(() => {
|
|
4255
|
+
setIsEditMode((prev) => !prev);
|
|
4256
|
+
}, []);
|
|
4257
|
+
useEffect(() => {
|
|
4258
|
+
var _a;
|
|
4259
|
+
onEditModeChanged === null || onEditModeChanged === undefined ? undefined : onEditModeChanged(isEditMode);
|
|
4260
|
+
if (isEditMode) {
|
|
4261
|
+
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onOpenEditMode) === null || _a === undefined ? undefined : _a.call(editMenuProps);
|
|
4262
|
+
}
|
|
4263
|
+
}, [isEditMode, onEditModeChanged, editMenuProps]);
|
|
4264
|
+
const onItemClick = useCallback((item, collapsed, event) => {
|
|
4265
|
+
var _a;
|
|
4266
|
+
// TODO: make event an optional argument
|
|
4267
|
+
(_a = item.onItemClick) === null || _a === undefined ? undefined : _a.call(item, item, collapsed, event);
|
|
4268
|
+
}, []);
|
|
4269
|
+
const onResetToDefaultClick = useCallback(() => {
|
|
4270
|
+
var _a;
|
|
4271
|
+
if (!onMenuItemsChanged) {
|
|
4272
|
+
return;
|
|
4273
|
+
}
|
|
4274
|
+
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onResetSettingsToDefault) === null || _a === undefined ? undefined : _a.call(editMenuProps);
|
|
4275
|
+
const originItems = defaultMenuItems === null || defaultMenuItems === undefined ? undefined : defaultMenuItems.filter(({ id }) => id !== ALL_PAGES_ID);
|
|
4276
|
+
if (originItems) {
|
|
4277
|
+
onMenuItemsChanged(originItems);
|
|
4278
|
+
}
|
|
4279
|
+
if (onMenuGroupsChanged && defaultMenuGroups) {
|
|
4280
|
+
onMenuGroupsChanged(defaultMenuGroups);
|
|
4281
|
+
}
|
|
4282
|
+
}, [
|
|
4283
|
+
onMenuItemsChanged,
|
|
4284
|
+
editMenuProps,
|
|
4285
|
+
defaultMenuItems,
|
|
4286
|
+
onMenuGroupsChanged,
|
|
4287
|
+
defaultMenuGroups,
|
|
4288
|
+
]);
|
|
4289
|
+
const handleToggleGroupVisibility = useCallback((groupId) => {
|
|
4290
|
+
if (!onMenuGroupsChanged) {
|
|
4291
|
+
return;
|
|
4292
|
+
}
|
|
4293
|
+
const currentGroups = menuGroupsRef.current || [];
|
|
4294
|
+
const updatedGroups = currentGroups.map((group) => {
|
|
4295
|
+
if (group.id === groupId) {
|
|
4296
|
+
return Object.assign(Object.assign({}, group), { hidden: !group.hidden });
|
|
4297
|
+
}
|
|
4298
|
+
return group;
|
|
4299
|
+
});
|
|
4300
|
+
onMenuGroupsChanged(updatedGroups);
|
|
4301
|
+
}, [onMenuGroupsChanged]);
|
|
4302
|
+
const toggleMenuItemsVisibility = useCallback((item) => {
|
|
4303
|
+
var _a;
|
|
4304
|
+
if (!onMenuItemsChanged) {
|
|
4305
|
+
return;
|
|
4306
|
+
}
|
|
4307
|
+
const changedItem = Object.assign(Object.assign({}, item), { hidden: !item.hidden });
|
|
4308
|
+
const originItems = menuItemsRef.current;
|
|
4309
|
+
const expandedItems = buildExpandedFromFlatList(originItems);
|
|
4310
|
+
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onToggleMenuItem) === null || _a === undefined ? undefined : _a.call(editMenuProps, changedItem);
|
|
4311
|
+
onMenuItemsChanged(expandedItems.map((menuItem) => {
|
|
4312
|
+
if (menuItem.id !== changedItem.id) {
|
|
4313
|
+
return menuItem;
|
|
4314
|
+
}
|
|
4315
|
+
return changedItem;
|
|
4316
|
+
}));
|
|
4317
|
+
}, [onMenuItemsChanged, editMenuProps]);
|
|
4318
|
+
const onFirstLevelSortEnd = useCallback(({ oldIndex, newIndex }) => {
|
|
4319
|
+
if (!onMenuItemsChanged) {
|
|
4320
|
+
return;
|
|
4321
|
+
}
|
|
4322
|
+
const currentFlatList = menuItemsRef.current || [];
|
|
4323
|
+
const updatedItems = sortMenuItems(oldIndex, newIndex, currentFlatList);
|
|
4324
|
+
if (updatedItems) {
|
|
4325
|
+
onMenuItemsChanged === null || onMenuItemsChanged === undefined ? undefined : onMenuItemsChanged(updatedItems);
|
|
4326
|
+
}
|
|
4327
|
+
}, [onMenuItemsChanged]);
|
|
4328
|
+
const onSecondLevelSortEnd = useCallback((groupIndex) => ({ oldIndex, newIndex }) => {
|
|
4329
|
+
if (!onMenuItemsChanged) {
|
|
4330
|
+
return;
|
|
4331
|
+
}
|
|
4332
|
+
const currentFlatList = menuItemsRef.current || [];
|
|
4333
|
+
const realOldIndex = getRealIndexInGroup(groupIndex, oldIndex, currentFlatList);
|
|
4334
|
+
const realNewIndex = getRealIndexInGroup(groupIndex, newIndex, currentFlatList);
|
|
4335
|
+
const expandedItems = buildExpandedFromFlatList(currentFlatList);
|
|
4336
|
+
const updatedItems = sortMenuItems(realOldIndex, realNewIndex, expandedItems);
|
|
4337
|
+
if (updatedItems) {
|
|
4338
|
+
onMenuItemsChanged === null || onMenuItemsChanged === undefined ? undefined : onMenuItemsChanged(updatedItems);
|
|
4339
|
+
}
|
|
4340
|
+
}, [onMenuItemsChanged]);
|
|
4341
|
+
const data = items.filter((item) => item.id !== ALL_PAGES_ID && item.type !== 'action');
|
|
4342
|
+
return (React__default.createElement(Flex, { className: b$m(null, className), gap: "5", direction: "column" },
|
|
4343
|
+
React__default.createElement(Flex, { gap: "4", alignItems: "center", justifyContent: "space-between" },
|
|
4344
|
+
React__default.createElement(Text, { variant: "subheader-2" }, isEditMode ? i18n$4('all-panel.title.editing') : i18n$4('all-panel.title.main')),
|
|
4345
|
+
React__default.createElement(Tooltip, { content: i18n$4('all-panel.title.editing') },
|
|
4346
|
+
React__default.createElement(Button, { selected: isEditMode, view: "normal", onClick: toggleEditMode }, startEditIcon ? startEditIcon : React__default.createElement(Icon, { data: Gear })))),
|
|
4347
|
+
React__default.createElement(CompositeBarView, { type: "menu", compact: false, className: b$m('content'), enableSorting: isEditMode && (editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting), items: data, onFirstLevelSortEnd: isEditMode && (editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting) ? onFirstLevelSortEnd : undefined, onSecondLevelSortEnd: isEditMode && (editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting) ? onSecondLevelSortEnd : undefined, editMode: isEditMode, onItemClick: onItemClick, onToggleGroupCollapsed: onToggleGroupCollapsed, onToggleMenuGroupVisibility: handleToggleGroupVisibility, onToggleMenuItemVisibility: toggleMenuItemsVisibility }),
|
|
4348
|
+
isEditMode && (React__default.createElement(Button, { onClick: onResetToDefaultClick }, i18n$4('all-panel.resetToDefault')))));
|
|
4349
|
+
};
|
|
4350
|
+
|
|
4610
4351
|
var InnerPanels;
|
|
4611
4352
|
(function (InnerPanels) {
|
|
4612
4353
|
InnerPanels["AllPages"] = "all-pages";
|
|
@@ -4614,7 +4355,7 @@ var InnerPanels;
|
|
|
4614
4355
|
|
|
4615
4356
|
const EMPTY_MENU_ITEMS = [];
|
|
4616
4357
|
const useAsideHeaderInnerContextValue = (props) => {
|
|
4617
|
-
const { size, onClosePanel, menuItems, panelItems, onMenuItemsChanged, onAllPagesClick } = props;
|
|
4358
|
+
const { size, onClosePanel, menuItems, menuGroups, defaultMenuGroups, panelItems, onMenuItemsChanged, onMenuGroupsChanged, onAllPagesClick, } = props;
|
|
4618
4359
|
const [innerVisiblePanel, setInnerVisiblePanel] = useState();
|
|
4619
4360
|
const ALL_PAGES_MENU_ITEM = React__default.useMemo(() => {
|
|
4620
4361
|
return getAllPagesMenuItem();
|
|
@@ -4641,6 +4382,17 @@ const useAsideHeaderInnerContextValue = (props) => {
|
|
|
4641
4382
|
}
|
|
4642
4383
|
(_a = item.onItemClick) === null || _a === undefined ? undefined : _a.call(item, item, collapsed, event);
|
|
4643
4384
|
}, [innerOnClosePanel, ALL_PAGES_MENU_ITEM, onClosePanel]);
|
|
4385
|
+
const onToggleGroupCollapsed = useCallback((groupId) => {
|
|
4386
|
+
const updatedMenuGroups = menuGroups === null || menuGroups === undefined ? undefined : menuGroups.map((group) => {
|
|
4387
|
+
if (group.id === groupId) {
|
|
4388
|
+
return Object.assign(Object.assign({}, group), { collapsed: !group.collapsed });
|
|
4389
|
+
}
|
|
4390
|
+
return group;
|
|
4391
|
+
});
|
|
4392
|
+
if (updatedMenuGroups) {
|
|
4393
|
+
onMenuGroupsChanged === null || onMenuGroupsChanged === undefined ? undefined : onMenuGroupsChanged(updatedMenuGroups);
|
|
4394
|
+
}
|
|
4395
|
+
}, [menuGroups, onMenuGroupsChanged]);
|
|
4644
4396
|
const innerMenuItems = useMemo(() => allPagesIsAvailable
|
|
4645
4397
|
? [
|
|
4646
4398
|
...(menuItems || EMPTY_MENU_ITEMS),
|
|
@@ -4660,13 +4412,20 @@ const useAsideHeaderInnerContextValue = (props) => {
|
|
|
4660
4412
|
},
|
|
4661
4413
|
];
|
|
4662
4414
|
}, [allPagesIsAvailable, panelItems, innerVisiblePanel]);
|
|
4663
|
-
return Object.assign(Object.assign({}, props), { onClosePanel: innerOnClosePanel, allPagesIsAvailable, menuItems: innerMenuItems,
|
|
4664
|
-
|
|
4415
|
+
return Object.assign(Object.assign({}, props), { onClosePanel: innerOnClosePanel, allPagesIsAvailable, menuItems: innerMenuItems, menuGroups,
|
|
4416
|
+
defaultMenuGroups,
|
|
4417
|
+
onMenuGroupsChanged, panelItems: innerPanelItems, size,
|
|
4418
|
+
onItemClick,
|
|
4419
|
+
onToggleGroupCollapsed });
|
|
4665
4420
|
};
|
|
4666
4421
|
|
|
4667
4422
|
const PageLayoutAside = React__default.forwardRef((props, ref) => {
|
|
4668
|
-
const { size, compact } = useAsideHeaderContext();
|
|
4669
|
-
const asideHeaderInnerContextValue = useAsideHeaderInnerContextValue(Object.assign({ size,
|
|
4423
|
+
const { size, compact, isExpanded, onMouseEnter, onMouseLeave } = useAsideHeaderContext();
|
|
4424
|
+
const asideHeaderInnerContextValue = useAsideHeaderInnerContextValue(Object.assign({ size,
|
|
4425
|
+
compact,
|
|
4426
|
+
isExpanded,
|
|
4427
|
+
onMouseEnter,
|
|
4428
|
+
onMouseLeave }, props));
|
|
4670
4429
|
return (React__default.createElement(AsideHeaderInnerContextProvider, { value: asideHeaderInnerContextValue },
|
|
4671
4430
|
React__default.createElement(FirstPanel, { ref: ref })));
|
|
4672
4431
|
});
|
|
@@ -4674,30 +4433,29 @@ PageLayoutAside.displayName = 'PageLayoutAside';
|
|
|
4674
4433
|
|
|
4675
4434
|
const AsideHeader = React__default.forwardRef((_a, ref) => {
|
|
4676
4435
|
var { compact, className, topAlert } = _a, props = __rest(_a, ["compact", "className", "topAlert"]);
|
|
4677
|
-
return (React__default.createElement(PageLayout, { compact: compact, className: className, topAlert: topAlert },
|
|
4436
|
+
return (React__default.createElement(PageLayout, { compact: compact, onChangeCompact: props.onChangeCompact, className: className, topAlert: topAlert },
|
|
4678
4437
|
React__default.createElement(PageLayoutAside, Object.assign({ ref: ref }, props)),
|
|
4679
4438
|
React__default.createElement(PageLayout.Content, { renderContent: props.renderContent })));
|
|
4680
4439
|
});
|
|
4681
4440
|
AsideHeader.displayName = 'AsideHeader';
|
|
4682
4441
|
|
|
4683
|
-
var css_248z$k = ".gn-footer-item{height:
|
|
4442
|
+
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
4443
|
styleInject(css_248z$k);
|
|
4685
4444
|
|
|
4686
4445
|
const b$l = block('footer-item');
|
|
4687
|
-
|
|
4688
|
-
|
|
4689
|
-
|
|
4690
|
-
};
|
|
4446
|
+
function FooterItem$1(props) {
|
|
4447
|
+
return (React__default.createElement(Item$1, Object.assign({}, props, { iconSize: ASIDE_HEADER_ICON_SIZE, className: b$l({ compact: props.compact }) })));
|
|
4448
|
+
}
|
|
4691
4449
|
|
|
4692
4450
|
const AsideFallback = ({ headerDecoration, subheaderItemsCount = 0, qa }) => {
|
|
4693
4451
|
const { compact } = useAsideHeaderContext();
|
|
4694
4452
|
const widthVar = compact ? '--gn-aside-header-min-width' : '--gn-aside-header-size';
|
|
4695
4453
|
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$
|
|
4454
|
+
return (React__default.createElement("div", { className: b$u('aside'), style: { width: `var(${widthVar})` }, "data-qa": qa },
|
|
4455
|
+
React__default.createElement("div", { className: b$u('aside-content', { 'with-decoration': headerDecoration }) },
|
|
4456
|
+
React__default.createElement("div", { className: b$u('header', { 'with-decoration': headerDecoration }) },
|
|
4699
4457
|
React__default.createElement("div", { style: { height: subheaderHeight } }),
|
|
4700
|
-
compact && headerDecoration ? (React__default.createElement(Icon, { data: SvgDividerCollapsed, className: b$
|
|
4458
|
+
compact && headerDecoration ? (React__default.createElement(Icon, { data: SvgDividerCollapsed, className: b$u('header-divider'), width: ASIDE_HEADER_COMPACT_WIDTH, height: HEADER_DIVIDER_HEIGHT })) : null),
|
|
4701
4459
|
React__default.createElement("div", { style: { flex: 1 } }))));
|
|
4702
4460
|
};
|
|
4703
4461
|
|
|
@@ -5400,7 +5158,7 @@ function SettingsSearch({ className, initialValue, onChange, debounce = 200, inp
|
|
|
5400
5158
|
} })));
|
|
5401
5159
|
}
|
|
5402
5160
|
|
|
5403
|
-
var css_248z$a = ".gn-settings{display:grid;grid-template-columns:216px 1fr;height:100%;width:834px}.gn-settings_view_mobile{display:block;height:calc(80vh - 56px);overflow-x:hidden;width:auto}@supports (height:90dvh){.gn-settings_view_mobile{height:calc(90dvh - 56px)}}.gn-settings_view_mobile.gn-settings_loading{text-align:center}.gn-settings_view_mobile .gn-settings__loader{margin-top:20px}.gn-settings_view_mobile .gn-settings__search{margin:4px 0 16px;padding:0 20px}.gn-settings_view_mobile .gn-settings__page{overflow-y:visible}.gn-settings_view_mobile .gn-settings__tabs .g-tabs__item:first-child{margin-left:20px}.gn-settings_view_mobile .gn-settings__tabs .g-tabs__item:last-child{margin-right:20px}.gn-settings_view_mobile .gn-settings__section-heading{font-family:var(--g-text-subheader-font-family);font-size:var(--g-text-subheader-3-font-size);font-weight:var(--g-text-subheader-font-weight);line-height:var(--g-text-subheader-3-line-height)}.gn-settings_view_mobile .gn-settings__section-subheader{color:var(--g-color-text-secondary)}.gn-settings_view_mobile .gn-settings__section-heading+.gn-settings-subheader{margin-top:8px}.gn-settings_view_mobile .gn-settings__section-item{margin-top:0}.gn-settings_view_mobile .gn-settings__section-heading+.gn-settings__section-item,.gn-settings_view_mobile .gn-settings__section-subheader+.gn-settings__section-item{margin-top:30px}.gn-settings_view_mobile .gn-settings__section-item+.gn-settings__section-item{margin-top:22px}.gn-settings_view_mobile .gn-settings__item:not(.gn-settings_view_mobile .gn-settings__item_mode_row){gap:8px;grid-template-columns:1fr}.gn-settings_view_mobile .gn-settings__item-heading{font-family:var(--g-text-body-font-family);font-size:var(--g-text-body-2-font-size);font-weight:var(--g-text-body-font-weight);line-height:var(--g-text-body-2-line-height)}.gn-settings_view_mobile .gn-settings__item-description{font-family:var(--g-text-body-font-family);font-size:var(--g-text-body-1-font-size);font-weight:var(--g-text-body-font-weight);line-height:var(--g-text-body-1-line-height)}.gn-settings_view_mobile .gn-settings__item_mode_row{grid-template-columns:1fr auto}.gn-settings_view_mobile .gn-settings__item_mode_row .gn-settings__item-heading{padding-right:20px}.gn-settings_view_mobile .gn-settings__item-content{width:100%}.gn-settings_view_mobile .gn-settings__not-found{color:var(--g-color-text-hint);font-family:var(--g-text-body-font-family);font-size:var(--g-text-body-2-font-size);font-weight:var(--g-text-body-font-weight);justify-items:start;line-height:var(--g-text-body-2-line-height);margin:20px 0 0 20px}.gn-settings_loading{grid-template-columns:auto}.gn-settings__loader{place-self:center}.gn-settings__not-found{display:grid;height:100%;place-items:center}.gn-settings__menu{border-right:1px solid var(--g-color-line-generic)}.gn-settings__heading{font-family:var(--g-text-subheader-font-family);font-size:var(--g-text-subheader-2-font-size);font-weight:var(--g-text-subheader-font-weight);line-height:var(--g-text-subheader-2-line-height);margin:20px 20px 0}.gn-settings__search{margin:0 20px 16px}.gn-settings__page{overflow-y:auto}.gn-settings__content{padding:20px}.gn-settings__section-right-adornment_hidden{opacity:0;transition:opacity .2s}.gn-settings__section-heading:hover .gn-settings__section-right-adornment_hidden{opacity:1}.gn-settings__section-heading{font-family:var(--g-text-subheader-font-family);font-size:var(--g-text-subheader-2-font-size);font-weight:var(--g-text-subheader-font-weight);line-height:var(--g-text-subheader-2-line-height);margin:0}.gn-settings__section-item{margin-top:24px}.gn-settings__section+.gn-settings__section{margin-top:32px}.gn-settings__section:only-child .gn-settings__section-item:first-of-type{margin-top:0}.gn-settings__section:only-child .gn-settings__section-heading{display:none}.gn-settings__item{display:grid;grid-template-columns:216px 1fr;justify-items:start}.gn-settings__item_title_hide{grid-template-columns:1fr;justify-
|
|
5161
|
+
var css_248z$a = ".gn-settings{display:grid;grid-template-columns:216px 1fr;height:100%;width:834px}.gn-settings_view_mobile{display:block;height:calc(80vh - 56px);overflow-x:hidden;width:auto}@supports (height:90dvh){.gn-settings_view_mobile{height:calc(90dvh - 56px)}}.gn-settings_view_mobile.gn-settings_loading{text-align:center}.gn-settings_view_mobile .gn-settings__loader{margin-top:20px}.gn-settings_view_mobile .gn-settings__search{margin:4px 0 16px;padding:0 20px}.gn-settings_view_mobile .gn-settings__page{overflow-y:visible}.gn-settings_view_mobile .gn-settings__tabs .g-tabs__item:first-child{margin-left:20px}.gn-settings_view_mobile .gn-settings__tabs .g-tabs__item:last-child{margin-right:20px}.gn-settings_view_mobile .gn-settings__section-heading{font-family:var(--g-text-subheader-font-family);font-size:var(--g-text-subheader-3-font-size);font-weight:var(--g-text-subheader-font-weight);line-height:var(--g-text-subheader-3-line-height)}.gn-settings_view_mobile .gn-settings__section-subheader{color:var(--g-color-text-secondary)}.gn-settings_view_mobile .gn-settings__section-heading+.gn-settings-subheader{margin-top:8px}.gn-settings_view_mobile .gn-settings__section-item{margin-top:0}.gn-settings_view_mobile .gn-settings__section-heading+.gn-settings__section-item,.gn-settings_view_mobile .gn-settings__section-subheader+.gn-settings__section-item{margin-top:30px}.gn-settings_view_mobile .gn-settings__section-item+.gn-settings__section-item{margin-top:22px}.gn-settings_view_mobile .gn-settings__item:not(.gn-settings_view_mobile .gn-settings__item_mode_row){gap:8px;grid-template-columns:1fr}.gn-settings_view_mobile .gn-settings__item-heading{font-family:var(--g-text-body-font-family);font-size:var(--g-text-body-2-font-size);font-weight:var(--g-text-body-font-weight);line-height:var(--g-text-body-2-line-height)}.gn-settings_view_mobile .gn-settings__item-description{font-family:var(--g-text-body-font-family);font-size:var(--g-text-body-1-font-size);font-weight:var(--g-text-body-font-weight);line-height:var(--g-text-body-1-line-height)}.gn-settings_view_mobile .gn-settings__item_mode_row{grid-template-columns:1fr auto}.gn-settings_view_mobile .gn-settings__item_mode_row .gn-settings__item-heading{padding-right:20px}.gn-settings_view_mobile .gn-settings__item-content{width:100%}.gn-settings_view_mobile .gn-settings__not-found{color:var(--g-color-text-hint);font-family:var(--g-text-body-font-family);font-size:var(--g-text-body-2-font-size);font-weight:var(--g-text-body-font-weight);justify-items:start;line-height:var(--g-text-body-2-line-height);margin:20px 0 0 20px}.gn-settings_loading{grid-template-columns:auto}.gn-settings__loader{place-self:center}.gn-settings__not-found{display:grid;height:100%;place-items:center}.gn-settings__menu{border-right:1px solid var(--g-color-line-generic)}.gn-settings__heading{font-family:var(--g-text-subheader-font-family);font-size:var(--g-text-subheader-2-font-size);font-weight:var(--g-text-subheader-font-weight);line-height:var(--g-text-subheader-2-line-height);margin:20px 20px 0}.gn-settings__search{margin:0 20px 16px}.gn-settings__page{overflow-y:auto}.gn-settings__content{padding:20px}.gn-settings__section-right-adornment_hidden{opacity:0;transition:opacity .2s}.gn-settings__section-heading:hover .gn-settings__section-right-adornment_hidden{opacity:1}.gn-settings__section-heading{font-family:var(--g-text-subheader-font-family);font-size:var(--g-text-subheader-2-font-size);font-weight:var(--g-text-subheader-font-weight);line-height:var(--g-text-subheader-2-line-height);margin:0}.gn-settings__section-item{margin-top:24px}.gn-settings__section+.gn-settings__section{margin-top:32px}.gn-settings__section:only-child .gn-settings__section-item:first-of-type{margin-top:0}.gn-settings__section:only-child .gn-settings__section-heading{display:none}.gn-settings__item{display:grid;grid-template-columns:216px 1fr;justify-items:start}.gn-settings__item_title_hide{grid-template-columns:1fr;justify-content:normal}.gn-settings__item_align_top{align-items:start}.gn-settings__item_align_center{align-items:center}.gn-settings__item-title_badge{position:relative}.gn-settings__item-title_badge:after{background-color:var(--g-color-text-danger);border-radius:50%;content:\"\";display:block;height:6px;position:absolute;right:-8px;top:1px;width:6px}.gn-settings__item-description{color:var(--g-color-text-secondary);display:block;font-family:var(--g-text-caption-font-family);font-size:var(--g-text-caption-2-font-size);font-weight:var(--g-text-caption-font-weight);line-height:var(--g-text-caption-2-line-height);margin-top:2px;padding-right:20px}.gn-settings__item-right-adornment_hidden{opacity:0;transition:opacity .2s}.gn-settings__item:hover .gn-settings__item-right-adornment_hidden{opacity:1}.gn-settings__item_selected,.gn-settings__section_selected{background:var(--g-color-base-selection);border-radius:8px;margin-left:-8px;padding:8px}.gn-settings__found{background:var(--g-color-base-selection);font-weight:var(--g-text-accent-font-weight)}";
|
|
5404
5162
|
styleInject(css_248z$a);
|
|
5405
5163
|
|
|
5406
5164
|
function Settings(_a) {
|
|
@@ -5700,7 +5458,7 @@ const OverlapPanel = ({ title, renderContent, className, onClose, action, closeT
|
|
|
5700
5458
|
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
5459
|
styleInject(css_248z$4);
|
|
5702
5460
|
|
|
5703
|
-
const TopAlert = React__default.lazy(() => import('./index-
|
|
5461
|
+
const TopAlert = React__default.lazy(() => import('./index-B2xnhTBt.js').then((module) => ({ default: module.TopAlert })));
|
|
5704
5462
|
const b$4 = block('mobile-header');
|
|
5705
5463
|
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
5464
|
const targetRef = useForwardRef(ref);
|
|
@@ -6001,4 +5759,4 @@ const MobileFooter = ({ className, menuItems: providedMenuItems, withDivider, mo
|
|
|
6001
5759
|
};
|
|
6002
5760
|
|
|
6003
5761
|
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-
|
|
5762
|
+
//# sourceMappingURL=index-OhAIuDEO.js.map
|