@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
|
@@ -72,10 +72,10 @@ className, cssSizeVariableName = '--gn-aside-header-size', renderContent, childr
|
|
|
72
72
|
return (React.createElement("div", { className: className, style: Object.assign({}, { [cssSizeVariableName]: `${size}px` }) }, typeof renderContent === 'function' ? (React.createElement(RenderContent, { size: size, renderContent: renderContent })) : (children)));
|
|
73
73
|
};
|
|
74
74
|
|
|
75
|
-
const ASIDE_HEADER_ICON_SIZE =
|
|
75
|
+
const ASIDE_HEADER_ICON_SIZE = 16;
|
|
76
76
|
const ASIDE_HEADER_COMPACT_WIDTH = 56;
|
|
77
77
|
const ASIDE_HEADER_EXPANDED_WIDTH = 236;
|
|
78
|
-
const ITEM_HEIGHT =
|
|
78
|
+
const ITEM_HEIGHT = 36;
|
|
79
79
|
const HEADER_DIVIDER_HEIGHT = 29;
|
|
80
80
|
|
|
81
81
|
const AsideHeaderInnerContext = React.createContext(undefined);
|
|
@@ -92,6 +92,10 @@ const useAsideHeaderInnerContext = () => {
|
|
|
92
92
|
const AsideHeaderContext = React.createContext({
|
|
93
93
|
compact: false,
|
|
94
94
|
size: 0,
|
|
95
|
+
isExpanded: false,
|
|
96
|
+
onChangeCompact: () => { },
|
|
97
|
+
onMouseEnter: () => { },
|
|
98
|
+
onMouseLeave: () => { },
|
|
95
99
|
});
|
|
96
100
|
AsideHeaderContext.displayName = 'AsideHeaderContext';
|
|
97
101
|
const AsideHeaderContextProvider = AsideHeaderContext.Provider;
|
|
@@ -105,11 +109,100 @@ const useAsideHeaderContext = () => {
|
|
|
105
109
|
return contextValue;
|
|
106
110
|
};
|
|
107
111
|
|
|
112
|
+
function defaultComparator(value, previousValue) {
|
|
113
|
+
return value !== previousValue;
|
|
114
|
+
}
|
|
115
|
+
function isTogglingOn(currentValue, previousValue) {
|
|
116
|
+
return !previousValue && Boolean(currentValue);
|
|
117
|
+
}
|
|
118
|
+
function isTogglingOff(currentValue, previousValue) {
|
|
119
|
+
return Boolean(previousValue) && !currentValue;
|
|
120
|
+
}
|
|
121
|
+
function useDelayedToggle(currentValue, config, maybeShouldThrottleFn) {
|
|
122
|
+
const shouldThrottleFn = defaultComparator;
|
|
123
|
+
const timerRef = React.useRef(null);
|
|
124
|
+
const valueCacheRef = React.useRef(currentValue);
|
|
125
|
+
const [value, setValue] = React.useState(currentValue);
|
|
126
|
+
const delayConfig = config;
|
|
127
|
+
React.useEffect(() => {
|
|
128
|
+
function clear() {
|
|
129
|
+
if (timerRef.current) {
|
|
130
|
+
clearTimeout(timerRef.current);
|
|
131
|
+
timerRef.current = null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (currentValue !== valueCacheRef.current) {
|
|
135
|
+
clear();
|
|
136
|
+
const shouldThrottle = shouldThrottleFn(currentValue, valueCacheRef.current);
|
|
137
|
+
const previousValue = valueCacheRef.current;
|
|
138
|
+
valueCacheRef.current = currentValue;
|
|
139
|
+
if (shouldThrottle) {
|
|
140
|
+
let delay;
|
|
141
|
+
if (isTogglingOn(currentValue, previousValue)) {
|
|
142
|
+
delay = delayConfig.enableDelay;
|
|
143
|
+
}
|
|
144
|
+
else if (isTogglingOff(currentValue, previousValue)) {
|
|
145
|
+
delay = delayConfig.disableDelay;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
delay = delayConfig.enableDelay;
|
|
149
|
+
}
|
|
150
|
+
timerRef.current = setTimeout(() => {
|
|
151
|
+
setValue(currentValue);
|
|
152
|
+
}, delay);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
setValue(currentValue);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return clear;
|
|
159
|
+
}, [currentValue, delayConfig.enableDelay, delayConfig.disableDelay, shouldThrottleFn]);
|
|
160
|
+
return value;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const HOVER_DELAY = 150;
|
|
164
|
+
const useIsExpanded = (externalCompact) => {
|
|
165
|
+
const [isExpanded, setIsExpanded] = React.useState(!externalCompact);
|
|
166
|
+
const [isMouseInside, setIsMouseInside] = React.useState(false);
|
|
167
|
+
React.useEffect(() => {
|
|
168
|
+
if (externalCompact && isExpanded) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
setIsExpanded(!externalCompact);
|
|
172
|
+
// We need to run this effect only when externalCompact changes
|
|
173
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
174
|
+
}, [externalCompact]);
|
|
175
|
+
const shouldExpand = externalCompact && isMouseInside;
|
|
176
|
+
const delayedShouldExpand = useDelayedToggle(shouldExpand, {
|
|
177
|
+
enableDelay: HOVER_DELAY,
|
|
178
|
+
disableDelay: HOVER_DELAY,
|
|
179
|
+
});
|
|
180
|
+
// Update isExpanded based on hover
|
|
181
|
+
React.useEffect(() => {
|
|
182
|
+
if (externalCompact) {
|
|
183
|
+
setIsExpanded(delayedShouldExpand);
|
|
184
|
+
}
|
|
185
|
+
// We need to run this effect only when delayedShouldExpand changes
|
|
186
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
187
|
+
}, [delayedShouldExpand]);
|
|
188
|
+
const handleMouseEnter = React.useCallback(() => {
|
|
189
|
+
setIsMouseInside(true);
|
|
190
|
+
}, []);
|
|
191
|
+
const handleMouseLeave = React.useCallback(() => {
|
|
192
|
+
setIsMouseInside(false);
|
|
193
|
+
}, []);
|
|
194
|
+
return {
|
|
195
|
+
isExpanded,
|
|
196
|
+
onMouseEnter: handleMouseEnter,
|
|
197
|
+
onMouseLeave: handleMouseLeave,
|
|
198
|
+
};
|
|
199
|
+
};
|
|
200
|
+
|
|
108
201
|
const NAMESPACE = 'gn-';
|
|
109
202
|
classname.withNaming({ e: '__', m: '_' });
|
|
110
203
|
const block = classname.withNaming({ n: NAMESPACE, e: '__', m: '_' });
|
|
111
204
|
|
|
112
|
-
const b$
|
|
205
|
+
const b$u = block('aside-header');
|
|
113
206
|
|
|
114
207
|
function styleInject(css, ref) {
|
|
115
208
|
if ( ref === undefined ) ref = {};
|
|
@@ -138,63 +231,36 @@ function styleInject(css, ref) {
|
|
|
138
231
|
}
|
|
139
232
|
}
|
|
140
233
|
|
|
141
|
-
var css_248z$
|
|
142
|
-
styleInject(css_248z$
|
|
234
|
+
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)}";
|
|
235
|
+
styleInject(css_248z$t);
|
|
143
236
|
|
|
144
|
-
const TopAlert$1 = React.lazy(() => Promise.resolve().then(function () { return require('./index-
|
|
145
|
-
const Layout = ({ compact, className, children, topAlert }) => {
|
|
146
|
-
const
|
|
147
|
-
const
|
|
237
|
+
const TopAlert$1 = React.lazy(() => Promise.resolve().then(function () { return require('./index-Di96hvKc.js'); }).then((module) => ({ default: module.TopAlert })));
|
|
238
|
+
const Layout = ({ compact, className, children, topAlert, onChangeCompact }) => {
|
|
239
|
+
const { isExpanded, onMouseEnter, onMouseLeave } = useIsExpanded(compact);
|
|
240
|
+
const size = isExpanded ? ASIDE_HEADER_EXPANDED_WIDTH : ASIDE_HEADER_COMPACT_WIDTH;
|
|
241
|
+
const asideHeaderContextValue = React.useMemo(() => ({
|
|
242
|
+
size,
|
|
243
|
+
compact,
|
|
244
|
+
isExpanded,
|
|
245
|
+
onChangeCompact,
|
|
246
|
+
onMouseEnter,
|
|
247
|
+
onMouseLeave,
|
|
248
|
+
}), [size, compact, isExpanded, onChangeCompact, onMouseEnter, onMouseLeave]);
|
|
148
249
|
return (React.createElement(AsideHeaderContextProvider, { value: asideHeaderContextValue },
|
|
149
|
-
React.createElement("div", { className: b$
|
|
250
|
+
React.createElement("div", { className: b$u({ compact: !isExpanded }, className), style: Object.assign({}, { '--gn-aside-header-size': `${size}px` }) },
|
|
150
251
|
topAlert && (React.createElement(React.Suspense, { fallback: null },
|
|
151
|
-
React.createElement(TopAlert$1, { className: b$
|
|
152
|
-
React.createElement("div", { className: b$
|
|
252
|
+
React.createElement(TopAlert$1, { className: b$u('top-alert'), alert: topAlert }))),
|
|
253
|
+
React.createElement("div", { className: b$u('pane-container') }, children))));
|
|
153
254
|
};
|
|
154
255
|
const ConnectedContent = ({ children, renderContent, }) => {
|
|
155
|
-
const { size } = useAsideHeaderContext();
|
|
156
|
-
|
|
256
|
+
const { size, compact, isExpanded } = useAsideHeaderContext();
|
|
257
|
+
const isExpandedByHover = compact && isExpanded;
|
|
258
|
+
return (React.createElement(Content, { size: size, className: b$u('content', { 'expanded-by-hover': isExpandedByHover }), renderContent: renderContent }, children));
|
|
157
259
|
};
|
|
158
260
|
const PageLayout = Object.assign(Layout, {
|
|
159
261
|
Content: ConnectedContent,
|
|
160
262
|
});
|
|
161
263
|
|
|
162
|
-
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)}";
|
|
163
|
-
styleInject(css_248z$t);
|
|
164
|
-
|
|
165
|
-
const b$u = block('all-pages-list-item');
|
|
166
|
-
const AllPagesListItem = (props) => {
|
|
167
|
-
const { item, editMode, onToggle } = props;
|
|
168
|
-
const ref = React.useRef(null);
|
|
169
|
-
const onPinButtonClick = React.useCallback((e) => {
|
|
170
|
-
e.stopPropagation();
|
|
171
|
-
e.preventDefault();
|
|
172
|
-
onToggle();
|
|
173
|
-
}, [onToggle]);
|
|
174
|
-
const onItemClick = (e) => {
|
|
175
|
-
if (editMode) {
|
|
176
|
-
e.stopPropagation();
|
|
177
|
-
e.preventDefault();
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
const [Tag, tagProps] = item.link ? ['a', { href: item.link }] : ['button', {}];
|
|
181
|
-
const makeNode = React.useCallback((params) => {
|
|
182
|
-
return (React.createElement(Tag, Object.assign({}, tagProps, { className: b$u(), onClick: onItemClick, ref: ref }),
|
|
183
|
-
params.icon,
|
|
184
|
-
React.createElement("span", { className: b$u('text') }, params.title),
|
|
185
|
-
editMode && !item.preventUserRemoving && (React.createElement(uikit.Button, { onClick: onPinButtonClick, view: item.hidden ? 'flat-secondary' : 'flat-action' },
|
|
186
|
-
React.createElement(uikit.Button.Icon, null, item.hidden ? React.createElement(icons.Pin, null) : React.createElement(icons.PinFill, null))))));
|
|
187
|
-
}, [Tag, tagProps, onItemClick, editMode, item, onPinButtonClick]);
|
|
188
|
-
const iconNode = item.icon ? (React.createElement(uikit.Icon, { className: b$u('icon'), data: item.icon, size: item.iconSize })) : null;
|
|
189
|
-
const titleNode = item.title;
|
|
190
|
-
const params = { icon: iconNode, title: titleNode };
|
|
191
|
-
const opts = { collapsed: false, compact: false, item, ref };
|
|
192
|
-
if (typeof item.itemWrapper === 'function') {
|
|
193
|
-
return item.itemWrapper(params, makeNode, opts);
|
|
194
|
-
}
|
|
195
|
-
return makeNode(params);
|
|
196
|
-
};
|
|
197
|
-
|
|
198
264
|
var en$4 = {
|
|
199
265
|
"menu-item.all-pages.title": "All pages",
|
|
200
266
|
"all-panel.menu.category.allOther": "All other",
|
|
@@ -215,6 +281,7 @@ const COMPONENT$4 = 'AllPagesPanel';
|
|
|
215
281
|
var i18n$4 = i18n$5.addComponentKeysets({ en: en$4, ru: ru$4 }, `${NAMESPACE}${COMPONENT$4}`);
|
|
216
282
|
|
|
217
283
|
const ALL_PAGES_ID = 'all-pages';
|
|
284
|
+
const UNGROUPED_ID = 'ungrouped';
|
|
218
285
|
function getAllPagesMenuItem() {
|
|
219
286
|
return {
|
|
220
287
|
id: ALL_PAGES_ID,
|
|
@@ -224,519 +291,138 @@ function getAllPagesMenuItem() {
|
|
|
224
291
|
};
|
|
225
292
|
}
|
|
226
293
|
|
|
227
|
-
const useGroupedMenuItems = (
|
|
228
|
-
|
|
229
|
-
const
|
|
230
|
-
|
|
231
|
-
|
|
294
|
+
const useGroupedMenuItems = (menuItems, menuGroups, isEditMode = false) => {
|
|
295
|
+
return React.useMemo(() => {
|
|
296
|
+
const visibleItems = menuItems.filter((item) => {
|
|
297
|
+
if (isEditMode && item.id === ALL_PAGES_ID) {
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
return true;
|
|
301
|
+
});
|
|
302
|
+
visibleItems.sort(({ type: typeA }, { type: typeB }) => {
|
|
303
|
+
if (typeA === 'action') {
|
|
232
304
|
return 1;
|
|
233
305
|
}
|
|
234
|
-
if (
|
|
306
|
+
if (typeB === 'action') {
|
|
235
307
|
return -1;
|
|
236
308
|
}
|
|
237
309
|
return 0;
|
|
238
310
|
});
|
|
239
|
-
const
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
311
|
+
const groupsMap = new Map();
|
|
312
|
+
menuGroups === null || menuGroups === undefined ? undefined : menuGroups.forEach((group) => {
|
|
313
|
+
groupsMap.set(group.id, group);
|
|
314
|
+
});
|
|
315
|
+
const groupedItems = new Map();
|
|
316
|
+
const processedGroups = new Set();
|
|
317
|
+
visibleItems.forEach((item) => {
|
|
318
|
+
const groupId = item.groupId;
|
|
319
|
+
if (groupId) {
|
|
320
|
+
if (!groupedItems.has(groupId)) {
|
|
321
|
+
groupedItems.set(groupId, []);
|
|
322
|
+
}
|
|
323
|
+
const group = groupedItems.get(groupId);
|
|
324
|
+
if (group) {
|
|
325
|
+
group.push(item);
|
|
326
|
+
}
|
|
243
327
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
328
|
+
});
|
|
329
|
+
const flatListItems = [];
|
|
330
|
+
visibleItems.forEach((item) => {
|
|
331
|
+
var _a, _b;
|
|
332
|
+
const groupId = item.groupId;
|
|
333
|
+
if (groupId) {
|
|
334
|
+
if (!processedGroups.has(groupId)) {
|
|
335
|
+
processedGroups.add(groupId);
|
|
336
|
+
const items = groupedItems.get(groupId) || [];
|
|
337
|
+
if (items.length > 0) {
|
|
338
|
+
const itemsWithVisible = items.filter((sortedItem) => !sortedItem.hidden);
|
|
339
|
+
const group = groupsMap.get(groupId);
|
|
340
|
+
const isAllGroupItemsHidden = itemsWithVisible.length === 0;
|
|
341
|
+
const isGroupHidden = isAllGroupItemsHidden
|
|
342
|
+
? true
|
|
343
|
+
: ((_a = group === null || group === undefined ? undefined : group.hidden) !== null && _a !== undefined ? _a : false);
|
|
344
|
+
flatListItems.push({
|
|
345
|
+
id: groupId,
|
|
346
|
+
title: (_b = group === null || group === undefined ? undefined : group.title) !== null && _b !== undefined ? _b : groupId,
|
|
347
|
+
icon: group === null || group === undefined ? undefined : group.icon,
|
|
348
|
+
hidden: isGroupHidden,
|
|
349
|
+
isDisabled: isAllGroupItemsHidden,
|
|
350
|
+
collapsible: group === null || group === undefined ? undefined : group.collapsible,
|
|
351
|
+
collapsedByDefault: group === null || group === undefined ? undefined : group.collapsedByDefault,
|
|
352
|
+
isCollapsed: group === null || group === undefined ? undefined : group.collapsed,
|
|
353
|
+
groupId: groupId,
|
|
354
|
+
items,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
if (!groupId) {
|
|
360
|
+
flatListItems.push(item);
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
return flatListItems;
|
|
364
|
+
}, [menuItems, menuGroups, isEditMode]);
|
|
250
365
|
};
|
|
251
366
|
|
|
252
|
-
var
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
const menuItemsRef = React.useRef(menuItems);
|
|
260
|
-
menuItemsRef.current = menuItems;
|
|
261
|
-
const [isEditMode, setIsEditMode] = React.useState(false);
|
|
262
|
-
const [draggingItemTitle, setDraggingItemTitle] = React.useState(null);
|
|
263
|
-
const toggleEditMode = React.useCallback(() => {
|
|
264
|
-
setIsEditMode((prev) => !prev);
|
|
265
|
-
}, []);
|
|
266
|
-
const groupedItems = useGroupedMenuItems(menuItems);
|
|
267
|
-
React.useEffect(() => {
|
|
268
|
-
var _a;
|
|
269
|
-
onEditModeChanged === null || onEditModeChanged === undefined ? undefined : onEditModeChanged(isEditMode);
|
|
270
|
-
if (isEditMode) {
|
|
271
|
-
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onOpenEditMode) === null || _a === undefined ? undefined : _a.call(editMenuProps);
|
|
272
|
-
}
|
|
273
|
-
}, [isEditMode, onEditModeChanged, editMenuProps]);
|
|
274
|
-
const onItemClick = React.useCallback((item, _index, _fromKeyboard, event) => {
|
|
275
|
-
var _a;
|
|
276
|
-
(_a = item.onItemClick) === null || _a === undefined ? undefined : _a.call(item, item, false, event);
|
|
277
|
-
}, []);
|
|
278
|
-
const togglePageVisibility = React.useCallback((item) => {
|
|
279
|
-
var _a;
|
|
280
|
-
if (!onMenuItemsChanged) {
|
|
281
|
-
return;
|
|
282
|
-
}
|
|
283
|
-
const changedItem = Object.assign(Object.assign({}, item), { hidden: !item.hidden });
|
|
284
|
-
const originItems = menuItemsRef.current.filter((menuItem) => menuItem.id !== ALL_PAGES_ID);
|
|
285
|
-
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onToggleMenuItem) === null || _a === undefined ? undefined : _a.call(editMenuProps, changedItem);
|
|
286
|
-
onMenuItemsChanged(originItems.map((menuItem) => {
|
|
287
|
-
if (menuItem.id !== changedItem.id) {
|
|
288
|
-
return menuItem;
|
|
289
|
-
}
|
|
290
|
-
return changedItem;
|
|
291
|
-
}));
|
|
292
|
-
}, [onMenuItemsChanged, editMenuProps]);
|
|
293
|
-
const onDragEnd = React.useCallback(() => {
|
|
294
|
-
setDraggingItemTitle(null);
|
|
295
|
-
}, [setDraggingItemTitle]);
|
|
296
|
-
const itemRender = React.useCallback((item, _isActive, _itemIndex) => {
|
|
297
|
-
const onDragStart = () => {
|
|
298
|
-
setDraggingItemTitle(item.title);
|
|
299
|
-
};
|
|
300
|
-
return (React.createElement(AllPagesListItem, { item: item, onDragStart: onDragStart, onDragEnd: onDragEnd, editMode: isEditMode, onToggle: () => togglePageVisibility(item), enableSorting: editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting }));
|
|
301
|
-
}, [isEditMode, togglePageVisibility, onDragEnd, setDraggingItemTitle, editMenuProps]);
|
|
302
|
-
const onResetToDefaultClick = React.useCallback(() => {
|
|
303
|
-
var _a;
|
|
304
|
-
if (!onMenuItemsChanged) {
|
|
305
|
-
return;
|
|
306
|
-
}
|
|
307
|
-
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onResetSettingsToDefault) === null || _a === undefined ? undefined : _a.call(editMenuProps);
|
|
308
|
-
const originItems = defaultMenuItems === null || defaultMenuItems === undefined ? undefined : defaultMenuItems.filter((item) => item.id !== ALL_PAGES_ID);
|
|
309
|
-
if (originItems) {
|
|
310
|
-
onMenuItemsChanged(originItems);
|
|
311
|
-
}
|
|
312
|
-
}, [onMenuItemsChanged, editMenuProps, defaultMenuItems]);
|
|
313
|
-
const changeItemsOrder = React.useCallback(({ oldIndex, newIndex }) => {
|
|
314
|
-
var _a;
|
|
315
|
-
const newItems = menuItemsRef.current.filter((item) => item.id !== ALL_PAGES_ID);
|
|
316
|
-
const element = newItems.splice(oldIndex, 1)[0];
|
|
317
|
-
newItems.splice(newIndex, 0, element);
|
|
318
|
-
onMenuItemsChanged === null || onMenuItemsChanged === undefined ? undefined : onMenuItemsChanged(newItems.filter((item) => item.type !== 'divider'));
|
|
319
|
-
setDraggingItemTitle(null);
|
|
320
|
-
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onChangeItemsOrder) === null || _a === undefined ? undefined : _a.call(editMenuProps, element, oldIndex, newIndex);
|
|
321
|
-
}, [onMenuItemsChanged, editMenuProps]);
|
|
322
|
-
const sortableItems = React.useMemo(() => {
|
|
323
|
-
return menuItemsRef.current.filter((item) => item.id !== ALL_PAGES_ID && !item.afterMoreButton && item.type !== 'divider');
|
|
324
|
-
}, [menuItems]);
|
|
325
|
-
return (React.createElement(uikit.Flex, { className: b$t(null, className), gap: "5", direction: "column" },
|
|
326
|
-
React.createElement(uikit.Flex, { gap: "4", alignItems: "center", justifyContent: "space-between" },
|
|
327
|
-
React.createElement(uikit.Text, { variant: "subheader-2" }, isEditMode ? i18n$4('all-panel.title.editing') : i18n$4('all-panel.title.main')),
|
|
328
|
-
React.createElement(uikit.Tooltip, { content: i18n$4('all-panel.title.editing') },
|
|
329
|
-
React.createElement(uikit.Button, { selected: isEditMode, view: "normal", onClick: toggleEditMode }, startEditIcon ? startEditIcon : React.createElement(uikit.Icon, { data: icons.Gear })))),
|
|
330
|
-
React.createElement(uikit.Flex, { className: b$t('content'), gap: "5", direction: "column" }, isEditMode && (editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.enableSorting) ? (React.createElement("div", null,
|
|
331
|
-
React.createElement(uikit.List, { itemClassName: b$t('item', { editMode: true }), itemHeight: 40, onSortEnd: changeItemsOrder, sortable: true, virtualized: false, filterable: false, items: sortableItems, onItemClick: onItemClick, renderItem: itemRender }),
|
|
332
|
-
draggingItemTitle && (React.createElement("div", { className: b$t('drag-placeholder') }, draggingItemTitle)))) : (Object.keys(groupedItems).map((category) => {
|
|
333
|
-
return (React.createElement(uikit.Flex, { key: category, direction: "column", gap: "3" },
|
|
334
|
-
React.createElement(uikit.Text, { className: b$t('category'), variant: "body-1", color: "secondary" }, category),
|
|
335
|
-
React.createElement(uikit.List, { virtualized: false, filterable: false, items: groupedItems[category], onItemClick: onItemClick, renderItem: itemRender })));
|
|
336
|
-
}))),
|
|
337
|
-
isEditMode && (React.createElement(uikit.Button, { onClick: onResetToDefaultClick }, i18n$4('all-panel.resetToDefault')))));
|
|
367
|
+
var button_collapse$1 = "Collapse";
|
|
368
|
+
var button_expand$1 = "Expand";
|
|
369
|
+
var label_more$1 = "More";
|
|
370
|
+
var en$3 = {
|
|
371
|
+
button_collapse: button_collapse$1,
|
|
372
|
+
button_expand: button_expand$1,
|
|
373
|
+
label_more: label_more$1
|
|
338
374
|
};
|
|
339
375
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
return menuItems.filter((item, index, items) => {
|
|
348
|
-
if (item.hidden) {
|
|
349
|
-
return false;
|
|
350
|
-
}
|
|
351
|
-
if (index > 0 &&
|
|
352
|
-
item.type === 'divider' &&
|
|
353
|
-
(items[lastVisibleIndex].type === 'divider' || items[lastVisibleIndex].hidden)) {
|
|
354
|
-
return false;
|
|
355
|
-
}
|
|
356
|
-
lastVisibleIndex = index;
|
|
357
|
-
return true;
|
|
358
|
-
});
|
|
359
|
-
}, [allPagesIsAvailable, menuItems]);
|
|
376
|
+
var button_collapse = "Свернуть";
|
|
377
|
+
var button_expand = "Развернуть";
|
|
378
|
+
var label_more = "Ещё";
|
|
379
|
+
var ru$3 = {
|
|
380
|
+
button_collapse: button_collapse,
|
|
381
|
+
button_expand: button_expand,
|
|
382
|
+
label_more: label_more
|
|
360
383
|
};
|
|
361
384
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
* https://github.com/sdecima/javascript-detect-element-resize
|
|
365
|
-
* Sebastian Decima
|
|
366
|
-
*
|
|
367
|
-
* Forked from version 0.5.3; includes the following modifications:
|
|
368
|
-
* 1) Guard against unsafe 'window' and 'document' references (to support SSR).
|
|
369
|
-
* 2) Defer initialization code via a top-level function wrapper (to support SSR).
|
|
370
|
-
* 3) Avoid unnecessary reflows by not measuring size for scroll events bubbling from children.
|
|
371
|
-
* 4) Add nonce for style element.
|
|
372
|
-
* 5) Use 'export' statement over 'module.exports' assignment
|
|
373
|
-
**/
|
|
374
|
-
|
|
375
|
-
// Check `document` and `window` in case of server-side rendering
|
|
376
|
-
let windowObject;
|
|
377
|
-
if (typeof window !== "undefined") {
|
|
378
|
-
windowObject = window;
|
|
379
|
-
|
|
380
|
-
// eslint-disable-next-line no-restricted-globals
|
|
381
|
-
} else if (typeof self !== "undefined") {
|
|
382
|
-
// eslint-disable-next-line no-restricted-globals
|
|
383
|
-
windowObject = self;
|
|
384
|
-
} else {
|
|
385
|
-
windowObject = global;
|
|
386
|
-
}
|
|
387
|
-
let cancelFrame = null;
|
|
388
|
-
let requestFrame = null;
|
|
389
|
-
const TIMEOUT_DURATION = 20;
|
|
390
|
-
const clearTimeoutFn = windowObject.clearTimeout;
|
|
391
|
-
const setTimeoutFn = windowObject.setTimeout;
|
|
392
|
-
const cancelAnimationFrameFn = windowObject.cancelAnimationFrame || windowObject.mozCancelAnimationFrame || windowObject.webkitCancelAnimationFrame;
|
|
393
|
-
const requestAnimationFrameFn = windowObject.requestAnimationFrame || windowObject.mozRequestAnimationFrame || windowObject.webkitRequestAnimationFrame;
|
|
394
|
-
if (cancelAnimationFrameFn == null || requestAnimationFrameFn == null) {
|
|
395
|
-
// For environments that don't support animation frame,
|
|
396
|
-
// fallback to a setTimeout based approach.
|
|
397
|
-
cancelFrame = clearTimeoutFn;
|
|
398
|
-
requestFrame = function requestAnimationFrameViaSetTimeout(callback) {
|
|
399
|
-
return setTimeoutFn(callback, TIMEOUT_DURATION);
|
|
400
|
-
};
|
|
401
|
-
} else {
|
|
402
|
-
// Counter intuitively, environments that support animation frames can be trickier.
|
|
403
|
-
// Chrome's "Throttle non-visible cross-origin iframes" flag can prevent rAFs from being called.
|
|
404
|
-
// In this case, we should fallback to a setTimeout() implementation.
|
|
405
|
-
cancelFrame = function cancelFrame([animationFrameID, timeoutID]) {
|
|
406
|
-
cancelAnimationFrameFn(animationFrameID);
|
|
407
|
-
clearTimeoutFn(timeoutID);
|
|
408
|
-
};
|
|
409
|
-
requestFrame = function requestAnimationFrameWithSetTimeoutFallback(callback) {
|
|
410
|
-
const animationFrameID = requestAnimationFrameFn(function animationFrameCallback() {
|
|
411
|
-
clearTimeoutFn(timeoutID);
|
|
412
|
-
callback();
|
|
413
|
-
});
|
|
414
|
-
const timeoutID = setTimeoutFn(function timeoutCallback() {
|
|
415
|
-
cancelAnimationFrameFn(animationFrameID);
|
|
416
|
-
callback();
|
|
417
|
-
}, TIMEOUT_DURATION);
|
|
418
|
-
return [animationFrameID, timeoutID];
|
|
419
|
-
};
|
|
420
|
-
}
|
|
421
|
-
function createDetectElementResize(nonce) {
|
|
422
|
-
let animationKeyframes;
|
|
423
|
-
let animationName;
|
|
424
|
-
let animationStartEvent;
|
|
425
|
-
let animationStyle;
|
|
426
|
-
let checkTriggers;
|
|
427
|
-
let resetTriggers;
|
|
428
|
-
let scrollListener;
|
|
429
|
-
const attachEvent = typeof document !== "undefined" && document.attachEvent;
|
|
430
|
-
if (!attachEvent) {
|
|
431
|
-
resetTriggers = function (element) {
|
|
432
|
-
const triggers = element.__resizeTriggers__,
|
|
433
|
-
expand = triggers.firstElementChild,
|
|
434
|
-
contract = triggers.lastElementChild,
|
|
435
|
-
expandChild = expand.firstElementChild;
|
|
436
|
-
contract.scrollLeft = contract.scrollWidth;
|
|
437
|
-
contract.scrollTop = contract.scrollHeight;
|
|
438
|
-
expandChild.style.width = expand.offsetWidth + 1 + "px";
|
|
439
|
-
expandChild.style.height = expand.offsetHeight + 1 + "px";
|
|
440
|
-
expand.scrollLeft = expand.scrollWidth;
|
|
441
|
-
expand.scrollTop = expand.scrollHeight;
|
|
442
|
-
};
|
|
443
|
-
checkTriggers = function (element) {
|
|
444
|
-
return element.offsetWidth !== element.__resizeLast__.width || element.offsetHeight !== element.__resizeLast__.height;
|
|
445
|
-
};
|
|
446
|
-
scrollListener = function (e) {
|
|
447
|
-
// Don't measure (which forces) reflow for scrolls that happen inside of children!
|
|
448
|
-
if (e.target.className && typeof e.target.className.indexOf === "function" && e.target.className.indexOf("contract-trigger") < 0 && e.target.className.indexOf("expand-trigger") < 0) {
|
|
449
|
-
return;
|
|
450
|
-
}
|
|
451
|
-
const element = this;
|
|
452
|
-
resetTriggers(this);
|
|
453
|
-
if (this.__resizeRAF__) {
|
|
454
|
-
cancelFrame(this.__resizeRAF__);
|
|
455
|
-
}
|
|
456
|
-
this.__resizeRAF__ = requestFrame(function animationFrame() {
|
|
457
|
-
if (checkTriggers(element)) {
|
|
458
|
-
element.__resizeLast__.width = element.offsetWidth;
|
|
459
|
-
element.__resizeLast__.height = element.offsetHeight;
|
|
460
|
-
element.__resizeListeners__.forEach(function forEachResizeListener(fn) {
|
|
461
|
-
fn.call(element, e);
|
|
462
|
-
});
|
|
463
|
-
}
|
|
464
|
-
});
|
|
465
|
-
};
|
|
385
|
+
const COMPONENT$3 = 'AsideHeader';
|
|
386
|
+
var i18n$3 = i18n$5.addComponentKeysets({ en: en$3, ru: ru$3 }, `${NAMESPACE}${COMPONENT$3}`);
|
|
466
387
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
for (let i = 0; i < domPrefixes.length; i++) {
|
|
481
|
-
if (elm.style[domPrefixes[i] + "AnimationName"] !== undefined) {
|
|
482
|
-
pfx = domPrefixes[i];
|
|
483
|
-
keyframeprefix = "-" + pfx.toLowerCase() + "-";
|
|
484
|
-
animationStartEvent = startEvents[i];
|
|
485
|
-
animation = true;
|
|
486
|
-
break;
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
animationName = "resizeanim";
|
|
492
|
-
animationKeyframes = "@" + keyframeprefix + "keyframes " + animationName + " { from { opacity: 0; } to { opacity: 0; } } ";
|
|
493
|
-
animationStyle = keyframeprefix + "animation: 1ms " + animationName + "; ";
|
|
494
|
-
}
|
|
495
|
-
const createStyles = function (doc) {
|
|
496
|
-
if (!doc.getElementById("detectElementResize")) {
|
|
497
|
-
//opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360
|
|
498
|
-
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%; }',
|
|
499
|
-
head = doc.head || doc.getElementsByTagName("head")[0],
|
|
500
|
-
style = doc.createElement("style");
|
|
501
|
-
style.id = "detectElementResize";
|
|
502
|
-
style.type = "text/css";
|
|
503
|
-
if (nonce != null) {
|
|
504
|
-
style.setAttribute("nonce", nonce);
|
|
505
|
-
}
|
|
506
|
-
if (style.styleSheet) {
|
|
507
|
-
style.styleSheet.cssText = css;
|
|
508
|
-
} else {
|
|
509
|
-
style.appendChild(doc.createTextNode(css));
|
|
510
|
-
}
|
|
511
|
-
head.appendChild(style);
|
|
512
|
-
}
|
|
513
|
-
};
|
|
514
|
-
const addResizeListener = function (element, fn) {
|
|
515
|
-
if (attachEvent) {
|
|
516
|
-
element.attachEvent("onresize", fn);
|
|
517
|
-
} else {
|
|
518
|
-
if (!element.__resizeTriggers__) {
|
|
519
|
-
const doc = element.ownerDocument;
|
|
520
|
-
const elementStyle = windowObject.getComputedStyle(element);
|
|
521
|
-
if (elementStyle && elementStyle.position === "static") {
|
|
522
|
-
element.style.position = "relative";
|
|
523
|
-
}
|
|
524
|
-
createStyles(doc);
|
|
525
|
-
element.__resizeLast__ = {};
|
|
526
|
-
element.__resizeListeners__ = [];
|
|
527
|
-
(element.__resizeTriggers__ = doc.createElement("div")).className = "resize-triggers";
|
|
528
|
-
const expandTrigger = doc.createElement("div");
|
|
529
|
-
expandTrigger.className = "expand-trigger";
|
|
530
|
-
expandTrigger.appendChild(doc.createElement("div"));
|
|
531
|
-
const contractTrigger = doc.createElement("div");
|
|
532
|
-
contractTrigger.className = "contract-trigger";
|
|
533
|
-
element.__resizeTriggers__.appendChild(expandTrigger);
|
|
534
|
-
element.__resizeTriggers__.appendChild(contractTrigger);
|
|
535
|
-
element.appendChild(element.__resizeTriggers__);
|
|
536
|
-
resetTriggers(element);
|
|
537
|
-
element.addEventListener("scroll", scrollListener, true);
|
|
538
|
-
|
|
539
|
-
/* Listen for a css animation to detect element display/re-attach */
|
|
540
|
-
if (animationStartEvent) {
|
|
541
|
-
element.__resizeTriggers__.__animationListener__ = function animationListener(e) {
|
|
542
|
-
if (e.animationName === animationName) {
|
|
543
|
-
resetTriggers(element);
|
|
544
|
-
}
|
|
545
|
-
};
|
|
546
|
-
element.__resizeTriggers__.addEventListener(animationStartEvent, element.__resizeTriggers__.__animationListener__);
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
element.__resizeListeners__.push(fn);
|
|
550
|
-
}
|
|
551
|
-
};
|
|
552
|
-
const removeResizeListener = function (element, fn) {
|
|
553
|
-
if (attachEvent) {
|
|
554
|
-
element.detachEvent("onresize", fn);
|
|
555
|
-
} else {
|
|
556
|
-
element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);
|
|
557
|
-
if (!element.__resizeListeners__.length) {
|
|
558
|
-
element.removeEventListener("scroll", scrollListener, true);
|
|
559
|
-
if (element.__resizeTriggers__.__animationListener__) {
|
|
560
|
-
element.__resizeTriggers__.removeEventListener(animationStartEvent, element.__resizeTriggers__.__animationListener__);
|
|
561
|
-
element.__resizeTriggers__.__animationListener__ = null;
|
|
562
|
-
}
|
|
563
|
-
try {
|
|
564
|
-
element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__);
|
|
565
|
-
} catch (e) {
|
|
566
|
-
// Preact compat; see developit/preact-compat/issues/228
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
};
|
|
571
|
-
return {
|
|
572
|
-
addResizeListener,
|
|
573
|
-
removeResizeListener
|
|
574
|
-
};
|
|
575
|
-
}
|
|
388
|
+
var _path$1;
|
|
389
|
+
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); }
|
|
390
|
+
var SvgControlMenuButton = function SvgControlMenuButton(props) {
|
|
391
|
+
return /*#__PURE__*/React__namespace.createElement("svg", _extends$2({
|
|
392
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
393
|
+
width: 8,
|
|
394
|
+
height: 8,
|
|
395
|
+
fill: "currentColor",
|
|
396
|
+
viewBox: "0 0 8 8"
|
|
397
|
+
}, props), _path$1 || (_path$1 = /*#__PURE__*/React__namespace.createElement("path", {
|
|
398
|
+
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"
|
|
399
|
+
})));
|
|
400
|
+
};
|
|
576
401
|
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
} = this.props;
|
|
598
|
-
if (this._parentNode) {
|
|
599
|
-
// Guard against AutoSizer component being removed from the DOM immediately after being added.
|
|
600
|
-
// This can result in invalid style values which can result in NaN values if we don't handle them.
|
|
601
|
-
// See issue #150 for more context.
|
|
602
|
-
|
|
603
|
-
const style = window.getComputedStyle(this._parentNode) || {};
|
|
604
|
-
const paddingLeft = parseFloat(style.paddingLeft || "0");
|
|
605
|
-
const paddingRight = parseFloat(style.paddingRight || "0");
|
|
606
|
-
const paddingTop = parseFloat(style.paddingTop || "0");
|
|
607
|
-
const paddingBottom = parseFloat(style.paddingBottom || "0");
|
|
608
|
-
const rect = this._parentNode.getBoundingClientRect();
|
|
609
|
-
const scaledHeight = rect.height - paddingTop - paddingBottom;
|
|
610
|
-
const scaledWidth = rect.width - paddingLeft - paddingRight;
|
|
611
|
-
const height = this._parentNode.offsetHeight - paddingTop - paddingBottom;
|
|
612
|
-
const width = this._parentNode.offsetWidth - paddingLeft - paddingRight;
|
|
613
|
-
if (!disableHeight && (this.state.height !== height || this.state.scaledHeight !== scaledHeight) || !disableWidth && (this.state.width !== width || this.state.scaledWidth !== scaledWidth)) {
|
|
614
|
-
this.setState({
|
|
615
|
-
height,
|
|
616
|
-
width,
|
|
617
|
-
scaledHeight,
|
|
618
|
-
scaledWidth
|
|
619
|
-
});
|
|
620
|
-
if (typeof onResize === "function") {
|
|
621
|
-
onResize({
|
|
622
|
-
height,
|
|
623
|
-
scaledHeight,
|
|
624
|
-
scaledWidth,
|
|
625
|
-
width
|
|
626
|
-
});
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
};
|
|
631
|
-
this._setRef = autoSizer => {
|
|
632
|
-
this._autoSizer = autoSizer;
|
|
633
|
-
};
|
|
634
|
-
}
|
|
635
|
-
componentDidMount() {
|
|
636
|
-
const {
|
|
637
|
-
nonce
|
|
638
|
-
} = this.props;
|
|
639
|
-
const parentNode = this._autoSizer ? this._autoSizer.parentNode : null;
|
|
640
|
-
if (parentNode != null && parentNode.ownerDocument && parentNode.ownerDocument.defaultView && parentNode instanceof parentNode.ownerDocument.defaultView.HTMLElement) {
|
|
641
|
-
// Delay access of parentNode until mount.
|
|
642
|
-
// This handles edge-cases where the component has already been unmounted before its ref has been set,
|
|
643
|
-
// As well as libraries like react-lite which have a slightly different lifecycle.
|
|
644
|
-
this._parentNode = parentNode;
|
|
645
|
-
|
|
646
|
-
// Use ResizeObserver from the same context where parentNode (which we will observe) was defined
|
|
647
|
-
// Using just global can result into onResize events not being emitted in cases with multiple realms
|
|
648
|
-
const ResizeObserverInstance = parentNode.ownerDocument.defaultView.ResizeObserver;
|
|
649
|
-
if (ResizeObserverInstance != null) {
|
|
650
|
-
this._resizeObserver = new ResizeObserverInstance(() => {
|
|
651
|
-
// Guard against "ResizeObserver loop limit exceeded" error;
|
|
652
|
-
// could be triggered if the state update causes the ResizeObserver handler to run long.
|
|
653
|
-
// See https://github.com/bvaughn/react-virtualized-auto-sizer/issues/55
|
|
654
|
-
this._timeoutId = setTimeout(this._onResize, 0);
|
|
402
|
+
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)}";
|
|
403
|
+
styleInject(css_248z$s);
|
|
404
|
+
|
|
405
|
+
const b$t = block('collapse-button');
|
|
406
|
+
const CollapseButton = ({ className }) => {
|
|
407
|
+
const { compact, onChangeCompact } = useAsideHeaderContext();
|
|
408
|
+
const { expandTitle, collapseTitle, collapseButtonWrapper } = useAsideHeaderInnerContext();
|
|
409
|
+
const onCollapseButtonClick = React.useCallback(() => {
|
|
410
|
+
const newCompact = !compact;
|
|
411
|
+
onChangeCompact === null || onChangeCompact === undefined ? undefined : onChangeCompact(newCompact);
|
|
412
|
+
}, [compact, onChangeCompact]);
|
|
413
|
+
const buttonTitle = compact
|
|
414
|
+
? expandTitle || i18n$3('button_expand')
|
|
415
|
+
: collapseTitle || i18n$3('button_collapse');
|
|
416
|
+
const defaultButton = (React.createElement("button", { className: b$t({ compact: compact }, className), onClick: onCollapseButtonClick, title: buttonTitle },
|
|
417
|
+
React.createElement(uikit.Icon, { data: SvgControlMenuButton, className: b$t('icon'), width: "16", height: "10" })));
|
|
418
|
+
if (collapseButtonWrapper) {
|
|
419
|
+
return collapseButtonWrapper(defaultButton, {
|
|
420
|
+
compact,
|
|
421
|
+
onChangeCompact,
|
|
655
422
|
});
|
|
656
|
-
this._resizeObserver.observe(parentNode);
|
|
657
|
-
} else {
|
|
658
|
-
// Defer requiring resize handler in order to support server-side rendering.
|
|
659
|
-
// See issue #41
|
|
660
|
-
this._detectElementResize = createDetectElementResize(nonce);
|
|
661
|
-
this._detectElementResize.addResizeListener(parentNode, this._onResize);
|
|
662
|
-
}
|
|
663
|
-
this._onResize();
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
componentWillUnmount() {
|
|
667
|
-
if (this._parentNode) {
|
|
668
|
-
if (this._detectElementResize) {
|
|
669
|
-
this._detectElementResize.removeResizeListener(this._parentNode, this._onResize);
|
|
670
|
-
}
|
|
671
|
-
if (this._timeoutId !== null) {
|
|
672
|
-
clearTimeout(this._timeoutId);
|
|
673
|
-
}
|
|
674
|
-
if (this._resizeObserver) {
|
|
675
|
-
this._resizeObserver.disconnect();
|
|
676
|
-
}
|
|
677
|
-
}
|
|
678
|
-
}
|
|
679
|
-
render() {
|
|
680
|
-
const {
|
|
681
|
-
children,
|
|
682
|
-
defaultHeight,
|
|
683
|
-
defaultWidth,
|
|
684
|
-
disableHeight = false,
|
|
685
|
-
disableWidth = false,
|
|
686
|
-
doNotBailOutOnEmptyChildren = false,
|
|
687
|
-
nonce,
|
|
688
|
-
onResize,
|
|
689
|
-
style = {},
|
|
690
|
-
tagName = "div",
|
|
691
|
-
...rest
|
|
692
|
-
} = this.props;
|
|
693
|
-
const {
|
|
694
|
-
height,
|
|
695
|
-
scaledHeight,
|
|
696
|
-
scaledWidth,
|
|
697
|
-
width
|
|
698
|
-
} = this.state;
|
|
699
|
-
|
|
700
|
-
// Outer div should not force width/height since that may prevent containers from shrinking.
|
|
701
|
-
// Inner component should overflow and use calculated width/height.
|
|
702
|
-
// See issue #68 for more information.
|
|
703
|
-
const outerStyle = {
|
|
704
|
-
overflow: "visible"
|
|
705
|
-
};
|
|
706
|
-
const childParams = {};
|
|
707
|
-
|
|
708
|
-
// Avoid rendering children before the initial measurements have been collected.
|
|
709
|
-
// At best this would just be wasting cycles.
|
|
710
|
-
let bailoutOnChildren = false;
|
|
711
|
-
if (!disableHeight) {
|
|
712
|
-
if (height === 0) {
|
|
713
|
-
bailoutOnChildren = true;
|
|
714
|
-
}
|
|
715
|
-
outerStyle.height = 0;
|
|
716
|
-
childParams.height = height;
|
|
717
|
-
childParams.scaledHeight = scaledHeight;
|
|
718
423
|
}
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
bailoutOnChildren = true;
|
|
722
|
-
}
|
|
723
|
-
outerStyle.width = 0;
|
|
724
|
-
childParams.width = width;
|
|
725
|
-
childParams.scaledWidth = scaledWidth;
|
|
726
|
-
}
|
|
727
|
-
if (doNotBailOutOnEmptyChildren) {
|
|
728
|
-
bailoutOnChildren = false;
|
|
729
|
-
}
|
|
730
|
-
return React.createElement(tagName, {
|
|
731
|
-
ref: this._setRef,
|
|
732
|
-
style: {
|
|
733
|
-
...outerStyle,
|
|
734
|
-
...style
|
|
735
|
-
},
|
|
736
|
-
...rest
|
|
737
|
-
}, !bailoutOnChildren && children(childParams));
|
|
738
|
-
}
|
|
739
|
-
}
|
|
424
|
+
return defaultButton;
|
|
425
|
+
};
|
|
740
426
|
|
|
741
427
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
742
428
|
|
|
@@ -1405,7 +1091,7 @@ const b$s = block('composite-bar-highlighted-item');
|
|
|
1405
1091
|
const DEBOUNCE_TIME = 200;
|
|
1406
1092
|
const HighlightedItem = ({ iconRef, iconNode, onClick, onClickCapture, }) => {
|
|
1407
1093
|
const { openModalSubscriber } = useAsideHeaderInnerContext();
|
|
1408
|
-
const [
|
|
1094
|
+
const [position, setPosition] = React.useState({
|
|
1409
1095
|
top: 0,
|
|
1410
1096
|
left: 0,
|
|
1411
1097
|
width: 0,
|
|
@@ -1425,11 +1111,13 @@ const HighlightedItem = ({ iconRef, iconNode, onClick, onClickCapture, }) => {
|
|
|
1425
1111
|
const handleResize = React.useCallback(() => handleResizeDebounced(), [handleResizeDebounced]);
|
|
1426
1112
|
React.useEffect(() => {
|
|
1427
1113
|
if (!isModalOpen) {
|
|
1428
|
-
return;
|
|
1114
|
+
return undefined;
|
|
1429
1115
|
}
|
|
1430
1116
|
handleResize();
|
|
1431
1117
|
window.addEventListener('resize', handleResize);
|
|
1432
|
-
return () =>
|
|
1118
|
+
return () => {
|
|
1119
|
+
window.removeEventListener('resize', handleResize);
|
|
1120
|
+
};
|
|
1433
1121
|
}, [handleResize, isModalOpen]);
|
|
1434
1122
|
openModalSubscriber === null || openModalSubscriber === undefined ? undefined : openModalSubscriber((open) => {
|
|
1435
1123
|
setIsModalOpen(open);
|
|
@@ -1438,180 +1126,64 @@ const HighlightedItem = ({ iconRef, iconNode, onClick, onClickCapture, }) => {
|
|
|
1438
1126
|
return null;
|
|
1439
1127
|
}
|
|
1440
1128
|
return (React.createElement(uikit.Portal, null,
|
|
1441
|
-
React.createElement("div", { className: b$s(), style:
|
|
1129
|
+
React.createElement("div", { className: b$s(), style: position, onClick: onClick, onClickCapture: onClickCapture, "data-toast": true },
|
|
1442
1130
|
React.createElement("div", { className: b$s('icon') }, iconNode))));
|
|
1443
1131
|
};
|
|
1444
1132
|
HighlightedItem.displayName = 'HighlightedItem';
|
|
1445
1133
|
|
|
1446
1134
|
const ITEM_TYPE_REGULAR = 'regular';
|
|
1447
1135
|
const COLLAPSE_ITEM_ID = 'collapse-item-id';
|
|
1448
|
-
const POPUP_PLACEMENT = ['right-start', 'right-end', 'right'];
|
|
1449
|
-
const POPUP_ITEM_HEIGHT = 28;
|
|
1450
1136
|
|
|
1451
|
-
|
|
1452
|
-
if (!isMenuItem(item)) {
|
|
1453
|
-
return ITEM_HEIGHT;
|
|
1454
|
-
}
|
|
1455
|
-
switch (item.type) {
|
|
1456
|
-
case 'action':
|
|
1457
|
-
return 50;
|
|
1458
|
-
case 'divider':
|
|
1459
|
-
return 15;
|
|
1460
|
-
default:
|
|
1461
|
-
return ITEM_HEIGHT;
|
|
1462
|
-
}
|
|
1463
|
-
}
|
|
1464
|
-
function getItemsHeight(items) {
|
|
1465
|
-
return items.reduce((sum, item) => sum + getItemHeight$1(item), 0);
|
|
1466
|
-
}
|
|
1467
|
-
function getSelectedItemIndex$1(items) {
|
|
1468
|
-
const index = items.findIndex(({ current }) => Boolean(current));
|
|
1469
|
-
return index === -1 ? undefined : index;
|
|
1470
|
-
}
|
|
1471
|
-
function getPinnedItems(items) {
|
|
1472
|
-
const pinnedItems = [];
|
|
1473
|
-
for (const item of items) {
|
|
1474
|
-
if (item.pinned) {
|
|
1475
|
-
pinnedItems.push(item);
|
|
1476
|
-
}
|
|
1477
|
-
else if (item.type === 'divider') {
|
|
1478
|
-
if (pinnedItems.length > 0 && pinnedItems[pinnedItems.length - 1].type !== 'divider') {
|
|
1479
|
-
pinnedItems.push(item);
|
|
1480
|
-
}
|
|
1481
|
-
}
|
|
1482
|
-
}
|
|
1483
|
-
return pinnedItems;
|
|
1484
|
-
}
|
|
1485
|
-
function getItemsMinHeight(items) {
|
|
1486
|
-
const pinnedItems = getPinnedItems(items);
|
|
1487
|
-
const afterMoreButtonItems = items.filter((item) => item.afterMoreButton);
|
|
1488
|
-
return (getItemsHeight(pinnedItems) +
|
|
1489
|
-
getItemsHeight(afterMoreButtonItems) +
|
|
1490
|
-
(pinnedItems.length === items.length ? 0 : ITEM_HEIGHT));
|
|
1491
|
-
}
|
|
1492
|
-
function getMoreButtonItem(menuMoreTitle) {
|
|
1493
|
-
return {
|
|
1494
|
-
id: COLLAPSE_ITEM_ID,
|
|
1495
|
-
title: menuMoreTitle,
|
|
1496
|
-
icon: icons.Ellipsis,
|
|
1497
|
-
iconSize: 18,
|
|
1498
|
-
};
|
|
1499
|
-
}
|
|
1500
|
-
function getAutosizeListItems(items, height, collapseItem) {
|
|
1501
|
-
var _a, _b, _c;
|
|
1502
|
-
const afterMoreButtonItems = items.filter((item) => item.afterMoreButton);
|
|
1503
|
-
const regularItems = items.filter((item) => !item.afterMoreButton);
|
|
1504
|
-
const listItems = [...regularItems, ...afterMoreButtonItems];
|
|
1505
|
-
const allItemsHeight = getItemsHeight(listItems);
|
|
1506
|
-
if (allItemsHeight <= height) {
|
|
1507
|
-
return { listItems, collapseItems: [] };
|
|
1508
|
-
}
|
|
1509
|
-
const collapseItemHeight = getItemHeight$1(collapseItem);
|
|
1510
|
-
listItems.splice(regularItems.length, 0, collapseItem);
|
|
1511
|
-
const collapseItems = [];
|
|
1512
|
-
let listHeight = allItemsHeight + collapseItemHeight;
|
|
1513
|
-
let index = listItems.length;
|
|
1514
|
-
while (listHeight > height) {
|
|
1515
|
-
if (index === 0) {
|
|
1516
|
-
break;
|
|
1517
|
-
}
|
|
1518
|
-
index--;
|
|
1519
|
-
const item = listItems[index];
|
|
1520
|
-
if (item.pinned || item.id === COLLAPSE_ITEM_ID || item.afterMoreButton) {
|
|
1521
|
-
continue;
|
|
1522
|
-
}
|
|
1523
|
-
if (item.type === 'divider') {
|
|
1524
|
-
if (index + 1 < listItems.length && ((_a = listItems[index + 1]) === null || _a === undefined ? undefined : _a.type) === 'divider') {
|
|
1525
|
-
listHeight -= getItemHeight$1(item);
|
|
1526
|
-
listItems.splice(index, 1);
|
|
1527
|
-
}
|
|
1528
|
-
continue;
|
|
1529
|
-
}
|
|
1530
|
-
listHeight -= getItemHeight$1(item);
|
|
1531
|
-
collapseItems.unshift(...listItems.splice(index, 1));
|
|
1532
|
-
}
|
|
1533
|
-
if (((_b = listItems[index]) === null || _b === undefined ? undefined : _b.type) === 'divider' &&
|
|
1534
|
-
(index === 0 || ((_c = listItems[index - 1]) === null || _c === undefined ? undefined : _c.type) === 'divider')) {
|
|
1535
|
-
listItems.splice(index, 1);
|
|
1536
|
-
}
|
|
1537
|
-
return { listItems, collapseItems };
|
|
1538
|
-
}
|
|
1539
|
-
function isMenuItem(item) {
|
|
1540
|
-
return (item === null || item === undefined ? undefined : item.id) !== undefined;
|
|
1541
|
-
}
|
|
1542
|
-
|
|
1543
|
-
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}";
|
|
1137
|
+
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}";
|
|
1544
1138
|
styleInject(css_248z$q);
|
|
1545
1139
|
|
|
1546
1140
|
const b$r = block('composite-bar-item');
|
|
1547
|
-
function renderItemTitle(
|
|
1548
|
-
let titleNode = React.createElement("div", { className: b$r('title-text') },
|
|
1549
|
-
if (
|
|
1141
|
+
function renderItemTitle(params) {
|
|
1142
|
+
let titleNode = React.createElement("div", { className: b$r('title-text') }, params.title);
|
|
1143
|
+
if (params.rightAdornment) {
|
|
1550
1144
|
titleNode = (React.createElement(React.Fragment, null,
|
|
1551
1145
|
titleNode,
|
|
1552
|
-
React.createElement("div", { className: b$r('title-adornment') },
|
|
1146
|
+
React.createElement("div", { className: b$r('title-adornment') }, params.rightAdornment)));
|
|
1553
1147
|
}
|
|
1554
1148
|
return titleNode;
|
|
1555
1149
|
}
|
|
1556
1150
|
const defaultPopupPlacement = ['right-end'];
|
|
1557
1151
|
const defaultPopupOffset = { mainAxis: 8, crossAxis: -20 };
|
|
1558
1152
|
const Item$1 = (props) => {
|
|
1559
|
-
const {
|
|
1560
|
-
const { compact } = useAsideHeaderContext();
|
|
1561
|
-
const [open, toggleOpen] = React.useState(false);
|
|
1153
|
+
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;
|
|
1562
1154
|
const ref = React.useRef(null);
|
|
1563
|
-
const anchorRef =
|
|
1155
|
+
const anchorRef = (anchoreRefProp === null || anchoreRefProp === undefined ? undefined : anchoreRefProp.current) ? anchoreRefProp : ref;
|
|
1564
1156
|
const highlightedRef = React.useRef(null);
|
|
1565
|
-
const type =
|
|
1566
|
-
const current =
|
|
1567
|
-
const
|
|
1568
|
-
const
|
|
1569
|
-
const
|
|
1570
|
-
const
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
((_a = ref.current) === null || _a === undefined ? undefined : _a.contains(event.target))) {
|
|
1577
|
-
return;
|
|
1578
|
-
}
|
|
1579
|
-
onClosePopup === null || onClosePopup === undefined ? undefined : onClosePopup();
|
|
1580
|
-
}, [onClosePopup]);
|
|
1581
|
-
const handleOpenChangePopup = React.useCallback((open, event, reason) => {
|
|
1157
|
+
const type = props.type || ITEM_TYPE_REGULAR;
|
|
1158
|
+
const current = props.current || false;
|
|
1159
|
+
const icon = props.icon;
|
|
1160
|
+
const iconSize = props.iconSize || ASIDE_HEADER_ICON_SIZE;
|
|
1161
|
+
const iconQa = props.iconQa;
|
|
1162
|
+
const onPinButtonClick = React.useCallback((e) => {
|
|
1163
|
+
e.stopPropagation();
|
|
1164
|
+
e.preventDefault();
|
|
1165
|
+
onToggleVisibility === null || onToggleVisibility === undefined ? undefined : onToggleVisibility();
|
|
1166
|
+
}, [onToggleVisibility]);
|
|
1167
|
+
const handleOpenChangePopup = React.useCallback((newOpen, event, reason) => {
|
|
1582
1168
|
var _a;
|
|
1583
1169
|
if (event instanceof MouseEvent &&
|
|
1584
1170
|
event.target &&
|
|
1585
1171
|
((_a = ref.current) === null || _a === undefined ? undefined : _a.contains(event.target))) {
|
|
1586
1172
|
return;
|
|
1587
1173
|
}
|
|
1588
|
-
onOpenChangePopup === null || onOpenChangePopup === undefined ? undefined : onOpenChangePopup(
|
|
1589
|
-
}, [
|
|
1590
|
-
if (
|
|
1174
|
+
onOpenChangePopup === null || onOpenChangePopup === undefined ? undefined : onOpenChangePopup(newOpen, event, reason);
|
|
1175
|
+
}, [onOpenChangePopup]);
|
|
1176
|
+
if (type === 'divider') {
|
|
1591
1177
|
return React.createElement("div", { className: b$r('menu-divider') });
|
|
1592
1178
|
}
|
|
1593
1179
|
const makeIconNode = (iconEl) => {
|
|
1594
|
-
return compact ?
|
|
1595
|
-
React.createElement("div", { onMouseEnter: () => onMouseEnter === null || onMouseEnter === undefined ? undefined : onMouseEnter(), onMouseLeave: () => onMouseLeave === null || onMouseLeave === undefined ? undefined : onMouseLeave(), className: b$r('btn-icon') }, iconEl))) : (iconEl);
|
|
1180
|
+
return compact ? React.createElement("div", { className: b$r('btn-icon') }, iconEl) : iconEl;
|
|
1596
1181
|
};
|
|
1597
1182
|
const makeNode = ({ icon: iconEl, title: titleEl }) => {
|
|
1598
|
-
const [Tag, tagProps] =
|
|
1599
|
-
? ['a', { href: item.link }]
|
|
1600
|
-
: ['button', {}];
|
|
1183
|
+
const [Tag, tagProps] = href ? ['a', { href }] : ['button', {}];
|
|
1601
1184
|
const createdNode = (React.createElement(React.Fragment, null,
|
|
1602
|
-
React.createElement(Tag, Object.assign({}, tagProps, { className: b$r({ type, current, compact },
|
|
1603
|
-
|
|
1604
|
-
/**
|
|
1605
|
-
* If we call onItemClick for collapsedItem then:
|
|
1606
|
-
* - User get unexpected item in onItemClick callback
|
|
1607
|
-
* - onClosePanel calls twice for each popuped item, as result it will prevent opening of panelItems
|
|
1608
|
-
*/
|
|
1609
|
-
toggleOpen(!open);
|
|
1610
|
-
onCollapseItemClick === null || onCollapseItemClick === undefined ? undefined : onCollapseItemClick();
|
|
1611
|
-
}
|
|
1612
|
-
else {
|
|
1613
|
-
onItemClick === null || onItemClick === undefined ? undefined : onItemClick(item, false, event);
|
|
1614
|
-
}
|
|
1185
|
+
React.createElement(Tag, Object.assign({}, tagProps, { className: b$r({ type, current, compact }, className), ref: ref, "data-qa": qa, onClick: (event) => {
|
|
1186
|
+
onItemClick === null || onItemClick === undefined ? undefined : onItemClick(props, false, event);
|
|
1615
1187
|
}, onClickCapture: onItemClickCapture, onMouseEnter: () => {
|
|
1616
1188
|
if (!compact) {
|
|
1617
1189
|
onMouseEnter === null || onMouseEnter === undefined ? undefined : onMouseEnter();
|
|
@@ -1622,64 +1194,33 @@ const Item$1 = (props) => {
|
|
|
1622
1194
|
}
|
|
1623
1195
|
} }),
|
|
1624
1196
|
React.createElement("div", { className: b$r('icon-place'), ref: highlightedRef }, makeIconNode(iconEl)),
|
|
1625
|
-
React.createElement("div", { className: b$r('title'), title: typeof
|
|
1626
|
-
|
|
1197
|
+
React.createElement("div", { className: b$r('title'), title: typeof title === 'string' ? title : undefined }, titleEl),
|
|
1198
|
+
editMode && !preventUserRemoving && onToggleVisibility ? (React.createElement(uikit.Button, { onClick: onPinButtonClick, view: hidden ? 'flat-secondary' : 'flat-action', className: b$r('visibility-button') },
|
|
1199
|
+
React.createElement(uikit.Button.Icon, null, hidden ? React.createElement(icons.Pin, null) : React.createElement(icons.PinFill, null)))) : null),
|
|
1200
|
+
renderPopupContent && Boolean(anchorRef === null || anchorRef === undefined ? undefined : anchorRef.current) && (React.createElement(uikit.Popup, { strategy: "fixed", open: popupVisible, keepMounted: popupKeepMounted, placement: popupPlacement, offset: popupOffset, anchorElement: anchorRef.current, onOpenChange: handleOpenChangePopup }, renderPopupContent()))));
|
|
1627
1201
|
return createdNode;
|
|
1628
1202
|
};
|
|
1629
1203
|
const iconNode = icon ? (React.createElement(uikit.Icon, { qa: iconQa, data: icon, size: iconSize, className: b$r('icon') })) : null;
|
|
1630
|
-
const titleNode = renderItemTitle(
|
|
1204
|
+
const titleNode = renderItemTitle({ title, rightAdornment });
|
|
1631
1205
|
const params = { icon: iconNode, title: titleNode };
|
|
1632
1206
|
let highlightedNode = null;
|
|
1633
1207
|
let node;
|
|
1634
|
-
const opts = { compact: Boolean(compact), collapsed: false, item, ref };
|
|
1635
|
-
if (typeof
|
|
1636
|
-
node =
|
|
1208
|
+
const opts = { compact: Boolean(compact), collapsed: false, item: props, ref };
|
|
1209
|
+
if (typeof itemWrapper === 'function') {
|
|
1210
|
+
node = itemWrapper(params, makeNode, opts);
|
|
1637
1211
|
highlightedNode =
|
|
1638
1212
|
bringForward &&
|
|
1639
|
-
|
|
1213
|
+
itemWrapper(params, ({ icon: iconEl }) => makeIconNode(iconEl), opts);
|
|
1640
1214
|
}
|
|
1641
1215
|
else {
|
|
1642
1216
|
node = makeNode(params);
|
|
1643
1217
|
highlightedNode = bringForward && makeIconNode(iconNode);
|
|
1644
1218
|
}
|
|
1645
1219
|
return (React.createElement(React.Fragment, null,
|
|
1646
|
-
bringForward && (React.createElement(HighlightedItem, { iconNode: highlightedNode, iconRef: highlightedRef, onClick: (event) => onItemClick === null || onItemClick === undefined ? undefined : onItemClick(
|
|
1647
|
-
node
|
|
1648
|
-
open && collapsedItem && (collapseItems === null || collapseItems === undefined ? undefined : collapseItems.length) && Boolean(anchorRef === null || anchorRef === undefined ? undefined : anchorRef.current) && (React.createElement(CollapsedPopup, Object.assign({}, props, { anchorRef: ref, onClose: () => toggleOpen(false) })))));
|
|
1220
|
+
bringForward && (React.createElement(HighlightedItem, { iconNode: highlightedNode, iconRef: highlightedRef, onClick: (event) => onItemClick === null || onItemClick === undefined ? undefined : onItemClick(props, false, event), onClickCapture: onItemClickCapture })),
|
|
1221
|
+
node));
|
|
1649
1222
|
};
|
|
1650
1223
|
Item$1.displayName = 'Item';
|
|
1651
|
-
function CollapsedPopup({ onItemClick, collapseItems, anchorRef, onClose, }) {
|
|
1652
|
-
const { compact } = useAsideHeaderContext();
|
|
1653
|
-
return (collapseItems === null || collapseItems === undefined ? undefined : collapseItems.length) ? (React.createElement(uikit.Popup, { strategy: "fixed", placement: POPUP_PLACEMENT, open: true, anchorRef: anchorRef, onClose: onClose },
|
|
1654
|
-
React.createElement("div", { className: b$r('collapse-items-popup-content') },
|
|
1655
|
-
React.createElement(uikit.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) => {
|
|
1656
|
-
const makeCollapseNode = ({ title: titleEl, icon: iconEl, }) => {
|
|
1657
|
-
const [Tag, tagProps] = collapseItem.link
|
|
1658
|
-
? ['a', { href: collapseItem.link }]
|
|
1659
|
-
: ['button', {}];
|
|
1660
|
-
return (React.createElement(Tag, Object.assign({}, tagProps, { className: b$r('collapse-item'), onClick: (event) => {
|
|
1661
|
-
onItemClick === null || onItemClick === undefined ? undefined : onItemClick(collapseItem, true, event);
|
|
1662
|
-
} }),
|
|
1663
|
-
iconEl,
|
|
1664
|
-
titleEl));
|
|
1665
|
-
};
|
|
1666
|
-
const titleNode = renderItemTitle(collapseItem);
|
|
1667
|
-
const iconNode = collapseItem.icon && (React.createElement(uikit.Icon, { data: collapseItem.icon, size: 14, className: b$r('collapse-item-icon') }));
|
|
1668
|
-
const params = { title: titleNode, icon: iconNode };
|
|
1669
|
-
const opts = {
|
|
1670
|
-
compact: Boolean(compact),
|
|
1671
|
-
collapsed: true,
|
|
1672
|
-
item: collapseItem,
|
|
1673
|
-
ref: anchorRef,
|
|
1674
|
-
};
|
|
1675
|
-
if (typeof collapseItem.itemWrapper === 'function') {
|
|
1676
|
-
return collapseItem.itemWrapper(params, makeCollapseNode, opts);
|
|
1677
|
-
}
|
|
1678
|
-
else {
|
|
1679
|
-
return makeCollapseNode(params);
|
|
1680
|
-
}
|
|
1681
|
-
} })))) : null;
|
|
1682
|
-
}
|
|
1683
1224
|
|
|
1684
1225
|
const multipleTooltipContextDefaults = {
|
|
1685
1226
|
active: false,
|
|
@@ -1711,32 +1252,68 @@ const POPUP_OFFSET = { mainAxis: 4, crossAxis: -32 };
|
|
|
1711
1252
|
const MultipleTooltip = ({ items, open, anchorRef, placement, }) => {
|
|
1712
1253
|
const { activeIndex, hideCollapseItemTooltip } = React.useContext(MultipleTooltipContext);
|
|
1713
1254
|
const activeItem = activeIndex === undefined ? null : items[activeIndex];
|
|
1714
|
-
return (React.createElement(uikit.Popup, { open: open, className: b$q('popup'),
|
|
1255
|
+
return (React.createElement(uikit.Popup, { open: open, className: b$q('popup'), anchorElement: anchorRef.current, strategy: "fixed", placement: placement, offset: POPUP_OFFSET },
|
|
1715
1256
|
React.createElement("div", { className: b$q() },
|
|
1716
1257
|
React.createElement("div", { className: b$q('items-container') }, items
|
|
1717
1258
|
.filter(({ type = 'regular', id }) => !hideCollapseItemTooltip ||
|
|
1718
1259
|
(id !== COLLAPSE_ITEM_ID && type !== 'action'))
|
|
1719
|
-
.map((
|
|
1720
|
-
switch (
|
|
1260
|
+
.map((currentItem, idx) => {
|
|
1261
|
+
switch (currentItem.type) {
|
|
1721
1262
|
case 'divider':
|
|
1722
|
-
return (React.createElement("div", { className: b$q('item', { divider: true }), key: idx },
|
|
1263
|
+
return (React.createElement("div", { className: b$q('item', { divider: true }), key: idx }, currentItem.title));
|
|
1723
1264
|
default:
|
|
1724
1265
|
return (React.createElement("div", { className: b$q('item', {
|
|
1725
|
-
active:
|
|
1726
|
-
}), key: idx },
|
|
1266
|
+
active: currentItem === activeItem,
|
|
1267
|
+
}), key: idx }, currentItem.title));
|
|
1727
1268
|
}
|
|
1728
1269
|
})))));
|
|
1729
1270
|
};
|
|
1730
1271
|
|
|
1731
|
-
|
|
1272
|
+
const GAP = 2;
|
|
1273
|
+
function getGroupBlockHeight(items) {
|
|
1274
|
+
if (items.length === 0) {
|
|
1275
|
+
return ITEM_HEIGHT;
|
|
1276
|
+
}
|
|
1277
|
+
const gaps = items.length * GAP;
|
|
1278
|
+
// +1 accounts for the group header item in addition to the menu items
|
|
1279
|
+
return (items.length + 1) * ITEM_HEIGHT + gaps;
|
|
1280
|
+
}
|
|
1281
|
+
|
|
1282
|
+
function getGroupHeight(compositeItem) {
|
|
1283
|
+
const visibleGroupItems = compositeItem.isCollapsed ? [] : compositeItem.items;
|
|
1284
|
+
return getGroupBlockHeight(visibleGroupItems);
|
|
1285
|
+
}
|
|
1286
|
+
function getItemHeight$1(compositeItem) {
|
|
1287
|
+
var _a;
|
|
1288
|
+
if ('items' in compositeItem && compositeItem.items && ((_a = compositeItem.items) === null || _a === undefined ? undefined : _a.length) > 0) {
|
|
1289
|
+
return getGroupHeight(compositeItem);
|
|
1290
|
+
}
|
|
1291
|
+
switch (compositeItem.type) {
|
|
1292
|
+
case 'action':
|
|
1293
|
+
return 50;
|
|
1294
|
+
case 'divider':
|
|
1295
|
+
return 15;
|
|
1296
|
+
default:
|
|
1297
|
+
return ITEM_HEIGHT;
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
function getItemsHeight(items) {
|
|
1301
|
+
return items.reduce((sum, item) => sum + getItemHeight$1(item), 0);
|
|
1302
|
+
}
|
|
1303
|
+
function getSelectedItemIndex$1(compositeItems) {
|
|
1304
|
+
const index = compositeItems.findIndex(({ current }) => Boolean(current));
|
|
1305
|
+
return index === -1 ? undefined : index;
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
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)}";
|
|
1732
1309
|
styleInject(css_248z$o);
|
|
1733
1310
|
|
|
1734
1311
|
const b$p = block('composite-bar');
|
|
1735
|
-
const CompositeBarView = ({ type, items, onItemClick, onMoreClick,
|
|
1312
|
+
const CompositeBarView = ({ type, items, onItemClick, onMoreClick, multipleTooltip = false, compositeId, className, groupClassName, menuItemClassName, enableSorting = false, editMode = false, compact, onToggleGroupCollapsed, onToggleMenuGroupVisibility, onToggleMenuItemVisibility, onFirstLevelSortEnd, onSecondLevelSortEnd, }) => {
|
|
1736
1313
|
const ref = React.useRef(null);
|
|
1737
1314
|
const tooltipRef = React.useRef(null);
|
|
1315
|
+
const [hoveredGroupId, setHoveredGroupId] = React.useState(null);
|
|
1738
1316
|
const { setValue: setMultipleTooltipContextValue, active: multipleTooltipActive, activeIndex, lastClickedItemIndex, } = React.useContext(MultipleTooltipContext);
|
|
1739
|
-
const { compact } = useAsideHeaderContext();
|
|
1740
1317
|
React.useEffect(() => {
|
|
1741
1318
|
function handleBlurWindow() {
|
|
1742
1319
|
if (multipleTooltip && multipleTooltipActive) {
|
|
@@ -1816,7 +1393,7 @@ const CompositeBarView = ({ type, items, onItemClick, onMoreClick, collapseItems
|
|
|
1816
1393
|
multipleTooltip,
|
|
1817
1394
|
setMultipleTooltipContextValue,
|
|
1818
1395
|
]);
|
|
1819
|
-
const onItemClickByIndex = React.useCallback((itemIndex) => (item, collapsed, event) => {
|
|
1396
|
+
const onItemClickByIndex = React.useCallback((itemIndex, orginalItemClick) => (item, collapsed, event) => {
|
|
1820
1397
|
if (compact &&
|
|
1821
1398
|
multipleTooltip &&
|
|
1822
1399
|
itemIndex !== lastClickedItemIndex &&
|
|
@@ -1826,107 +1403,108 @@ const CompositeBarView = ({ type, items, onItemClick, onMoreClick, collapseItems
|
|
|
1826
1403
|
active: false,
|
|
1827
1404
|
});
|
|
1828
1405
|
}
|
|
1829
|
-
|
|
1406
|
+
// Handle clicks on the "more" button (collapse item)
|
|
1407
|
+
if (item.id === COLLAPSE_ITEM_ID && collapsed) {
|
|
1408
|
+
onMoreClick === null || onMoreClick === undefined ? undefined : onMoreClick();
|
|
1409
|
+
}
|
|
1410
|
+
else {
|
|
1411
|
+
onItemClick === null || onItemClick === undefined ? undefined : onItemClick(Object.assign(Object.assign({}, item), { onItemClick: orginalItemClick }), collapsed, event);
|
|
1412
|
+
}
|
|
1830
1413
|
}, [
|
|
1831
1414
|
compact,
|
|
1832
1415
|
lastClickedItemIndex,
|
|
1833
1416
|
multipleTooltip,
|
|
1834
1417
|
onItemClick,
|
|
1418
|
+
onMoreClick,
|
|
1835
1419
|
setMultipleTooltipContextValue,
|
|
1836
1420
|
]);
|
|
1421
|
+
const handleFirstLevelSortEnd = React.useCallback(({ oldIndex, newIndex }) => {
|
|
1422
|
+
if (onFirstLevelSortEnd) {
|
|
1423
|
+
onFirstLevelSortEnd({ oldIndex, newIndex });
|
|
1424
|
+
}
|
|
1425
|
+
}, [onFirstLevelSortEnd]);
|
|
1426
|
+
const handleSecondLevelSortEnd = React.useCallback((groupIndex) => ({ oldIndex, newIndex }) => {
|
|
1427
|
+
if (onSecondLevelSortEnd) {
|
|
1428
|
+
onSecondLevelSortEnd(groupIndex)({ oldIndex, newIndex });
|
|
1429
|
+
}
|
|
1430
|
+
}, [onSecondLevelSortEnd]);
|
|
1431
|
+
if (!items || items.length === 0) {
|
|
1432
|
+
return null;
|
|
1433
|
+
}
|
|
1837
1434
|
return (React.createElement(React.Fragment, null,
|
|
1838
|
-
React.createElement("div", { ref: tooltipRef, onMouseEnter: onTooltipMouseEnter, onMouseLeave: onTooltipMouseLeave },
|
|
1839
|
-
React.createElement(uikit.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:
|
|
1840
|
-
const
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1435
|
+
React.createElement("div", { className: className, ref: tooltipRef, onMouseEnter: onTooltipMouseEnter, onMouseLeave: onTooltipMouseLeave },
|
|
1436
|
+
React.createElement(uikit.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) => {
|
|
1437
|
+
const groupId = item.groupId;
|
|
1438
|
+
if (!groupId) {
|
|
1439
|
+
return (React.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
|
|
1440
|
+
? () => onToggleMenuItemVisibility(item)
|
|
1441
|
+
: undefined })));
|
|
1442
|
+
}
|
|
1443
|
+
const isCollapsible = Boolean('collapsible' in item && item.collapsible);
|
|
1444
|
+
const isCollapsed = Boolean('isCollapsed' in item && item.isCollapsed);
|
|
1445
|
+
const groupListItems = ('items' in item && item.items) || [];
|
|
1446
|
+
const hasHeader = item.title || item.icon || isCollapsible;
|
|
1447
|
+
const isUngrouped = item.id === UNGROUPED_ID;
|
|
1448
|
+
const isGroupHovered = hoveredGroupId === item.id;
|
|
1449
|
+
let groupIcon = item.icon;
|
|
1450
|
+
if (!isCollapsed) {
|
|
1451
|
+
groupIcon = icons.ChevronDown;
|
|
1452
|
+
}
|
|
1453
|
+
else if (isGroupHovered) {
|
|
1454
|
+
groupIcon = icons.ChevronRight;
|
|
1455
|
+
}
|
|
1456
|
+
return (React.createElement("div", { className: b$p('menu-group', { expanded: !isCollapsed }, groupClassName) },
|
|
1457
|
+
hasHeader && !isUngrouped && (React.createElement(Item$1, Object.assign({}, item, { className: b$p('menu-group-header', { collapsed: isCollapsed }), icon: groupIcon, compact: compact, editMode: editMode, onMouseEnter: () => {
|
|
1458
|
+
setHoveredGroupId(item.id);
|
|
1459
|
+
}, onMouseLeave: () => {
|
|
1460
|
+
setHoveredGroupId(null);
|
|
1461
|
+
}, onItemClick: onItemClickByIndex(itemIndex, onToggleGroupCollapsed
|
|
1462
|
+
? () => onToggleGroupCollapsed(groupId)
|
|
1463
|
+
: undefined), onToggleVisibility: onToggleMenuGroupVisibility
|
|
1464
|
+
? () => onToggleMenuGroupVisibility(groupId)
|
|
1465
|
+
: undefined }))),
|
|
1466
|
+
!isCollapsed && (React.createElement(uikit.List, { items: groupListItems, sortable: enableSorting, onSortEnd: handleSecondLevelSortEnd(itemIndex), virtualized: false, filterable: false, itemClassName: b$p('menu-group-item', {
|
|
1467
|
+
edit: enableSorting,
|
|
1468
|
+
compact,
|
|
1469
|
+
}), itemHeight: getItemHeight$1, itemsHeight: getItemsHeight, renderItem: (nestedItem, _isNestedItemActive, _nestedItemIndex) => {
|
|
1470
|
+
return (React.createElement(Item$1, Object.assign({}, nestedItem, { className: b$p('menu-group-header', {
|
|
1471
|
+
collapsed: isCollapsed,
|
|
1472
|
+
}), compact: compact, editMode: editMode, onMouseEnter: () => {
|
|
1473
|
+
setHoveredGroupId(nestedItem.id);
|
|
1474
|
+
}, onMouseLeave: () => {
|
|
1475
|
+
setHoveredGroupId(null);
|
|
1476
|
+
}, onItemClick: onItemClickByIndex(itemIndex, item.onItemClick), onToggleVisibility: onToggleMenuItemVisibility
|
|
1477
|
+
? () => onToggleMenuItemVisibility(nestedItem)
|
|
1478
|
+
: undefined })));
|
|
1479
|
+
} }))));
|
|
1845
1480
|
} })),
|
|
1846
1481
|
type === 'menu' && multipleTooltip && (React.createElement(MultipleTooltip, { open: compact && multipleTooltipActive, anchorRef: tooltipRef, placement: ['right-start'], items: items }))));
|
|
1847
1482
|
};
|
|
1848
|
-
const CompositeBar = ({ type, items,
|
|
1849
|
-
|
|
1483
|
+
const CompositeBar = ({ type, items, onItemClick, onMoreClick, onToggleGroupCollapsed, multipleTooltip = false, compact, compositeId, className, groupClassName, menuItemClassName, editMode = false, }) => {
|
|
1484
|
+
var _a;
|
|
1485
|
+
const visibleItems = (_a = items === null || items === undefined ? undefined : items.filter((item) => !item.hidden)) === null || _a === undefined ? undefined : _a.map((item) => {
|
|
1486
|
+
var _a;
|
|
1487
|
+
return (Object.assign(Object.assign({}, item), { items: 'items' in item ? (_a = item.items) === null || _a === undefined ? undefined : _a.filter((item) => !item.hidden) : [] }));
|
|
1488
|
+
});
|
|
1489
|
+
if (!visibleItems || visibleItems.length === 0) {
|
|
1850
1490
|
return null;
|
|
1851
1491
|
}
|
|
1852
1492
|
let node;
|
|
1853
1493
|
if (type === 'menu') {
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
node = (React.createElement("div", { className: b$p({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React.createElement(AutoSizer, null, (size) => {
|
|
1857
|
-
const width = Number.isNaN(size.width) ? 0 : size.width;
|
|
1858
|
-
const height = Number.isNaN(size.height) ? 0 : size.height;
|
|
1859
|
-
const { listItems, collapseItems } = getAutosizeListItems(items, height, collapseItem);
|
|
1860
|
-
return (React.createElement("div", { style: { width, height } },
|
|
1861
|
-
React.createElement(CompositeBarView, { compositeId: compositeId, type: "menu", items: listItems, onItemClick: onItemClick, onMoreClick: onMoreClick, collapseItems: collapseItems, multipleTooltip: multipleTooltip })));
|
|
1862
|
-
}))));
|
|
1494
|
+
node = (React.createElement("div", { className: b$p({ scrollable: true }, className) },
|
|
1495
|
+
React.createElement(CompositeBarView, { compositeId: compositeId, groupClassName: groupClassName, menuItemClassName: menuItemClassName, type: "menu", compact: compact, items: visibleItems, onItemClick: onItemClick, onMoreClick: onMoreClick, multipleTooltip: multipleTooltip, onToggleGroupCollapsed: onToggleGroupCollapsed, editMode: editMode })));
|
|
1863
1496
|
}
|
|
1864
1497
|
else {
|
|
1865
|
-
node = (React.createElement("div", { className: b$p({ subheader: true }) },
|
|
1866
|
-
React.createElement(CompositeBarView, { type: "subheader", items:
|
|
1498
|
+
node = (React.createElement("div", { className: b$p({ subheader: true }, className) },
|
|
1499
|
+
React.createElement(CompositeBarView, { groupClassName: groupClassName, menuItemClassName: menuItemClassName, type: "subheader", compact: compact, items: visibleItems, onItemClick: onItemClick, editMode: editMode })));
|
|
1867
1500
|
}
|
|
1868
1501
|
return React.createElement(MultipleTooltipProvider, null, node);
|
|
1869
1502
|
};
|
|
1870
1503
|
|
|
1871
|
-
var
|
|
1872
|
-
var button_expand$1 = "Expand";
|
|
1873
|
-
var label_more$1 = "More";
|
|
1874
|
-
var en$3 = {
|
|
1875
|
-
button_collapse: button_collapse$1,
|
|
1876
|
-
button_expand: button_expand$1,
|
|
1877
|
-
label_more: label_more$1
|
|
1878
|
-
};
|
|
1879
|
-
|
|
1880
|
-
var button_collapse = "Свернуть";
|
|
1881
|
-
var button_expand = "Развернуть";
|
|
1882
|
-
var label_more = "Ещё";
|
|
1883
|
-
var ru$3 = {
|
|
1884
|
-
button_collapse: button_collapse,
|
|
1885
|
-
button_expand: button_expand,
|
|
1886
|
-
label_more: label_more
|
|
1887
|
-
};
|
|
1888
|
-
|
|
1889
|
-
const COMPONENT$3 = 'AsideHeader';
|
|
1890
|
-
var i18n$3 = i18n$5.addComponentKeysets({ en: en$3, ru: ru$3 }, `${NAMESPACE}${COMPONENT$3}`);
|
|
1891
|
-
|
|
1892
|
-
var _path$1;
|
|
1893
|
-
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); }
|
|
1894
|
-
var SvgControlMenuButton = function SvgControlMenuButton(props) {
|
|
1895
|
-
return /*#__PURE__*/React__namespace.createElement("svg", _extends$2({
|
|
1896
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
1897
|
-
width: 8,
|
|
1898
|
-
height: 8,
|
|
1899
|
-
fill: "currentColor",
|
|
1900
|
-
viewBox: "0 0 8 8"
|
|
1901
|
-
}, props), _path$1 || (_path$1 = /*#__PURE__*/React__namespace.createElement("path", {
|
|
1902
|
-
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"
|
|
1903
|
-
})));
|
|
1904
|
-
};
|
|
1905
|
-
|
|
1906
|
-
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)}";
|
|
1504
|
+
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}";
|
|
1907
1505
|
styleInject(css_248z$n);
|
|
1908
1506
|
|
|
1909
|
-
const b$o = block('
|
|
1910
|
-
const CollapseButton = ({ className }) => {
|
|
1911
|
-
const { onChangeCompact, compact, expandTitle, collapseTitle, collapseButtonWrapper } = useAsideHeaderInnerContext();
|
|
1912
|
-
const onCollapseButtonClick = React.useCallback(() => {
|
|
1913
|
-
onChangeCompact === null || onChangeCompact === undefined ? undefined : onChangeCompact(!compact);
|
|
1914
|
-
}, [compact, onChangeCompact]);
|
|
1915
|
-
const buttonTitle = compact
|
|
1916
|
-
? expandTitle || i18n$3('button_expand')
|
|
1917
|
-
: collapseTitle || i18n$3('button_collapse');
|
|
1918
|
-
const defaultButton = (React.createElement("button", { className: b$o({ compact }, className), onClick: onCollapseButtonClick, title: buttonTitle },
|
|
1919
|
-
React.createElement(uikit.Icon, { data: SvgControlMenuButton, className: b$o('icon'), width: "16", height: "10" })));
|
|
1920
|
-
if (collapseButtonWrapper) {
|
|
1921
|
-
return collapseButtonWrapper(defaultButton, { compact, onChangeCompact });
|
|
1922
|
-
}
|
|
1923
|
-
return defaultButton;
|
|
1924
|
-
};
|
|
1925
|
-
|
|
1926
|
-
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}";
|
|
1927
|
-
styleInject(css_248z$m);
|
|
1928
|
-
|
|
1929
|
-
const b$n = block('logo');
|
|
1507
|
+
const b$o = block('logo');
|
|
1930
1508
|
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, }) => {
|
|
1931
1509
|
const hasWrapper = typeof wrapper === 'function';
|
|
1932
1510
|
let buttonIcon;
|
|
@@ -1942,7 +1520,7 @@ const Logo = ({ text, icon, iconSrc, iconClassName, iconPlaceClassName, iconSize
|
|
|
1942
1520
|
logo = text();
|
|
1943
1521
|
}
|
|
1944
1522
|
else {
|
|
1945
|
-
logo = (React.createElement("div", { className: b$
|
|
1523
|
+
logo = (React.createElement("div", { className: b$o('logo'), style: { fontSize: textSize } }, text));
|
|
1946
1524
|
}
|
|
1947
1525
|
const _a = href
|
|
1948
1526
|
? {
|
|
@@ -1954,10 +1532,10 @@ const Logo = ({ text, icon, iconSrc, iconClassName, iconPlaceClassName, iconSize
|
|
|
1954
1532
|
'aria-labelledby': ariaLabelledby,
|
|
1955
1533
|
}
|
|
1956
1534
|
: { tag: 'span' }, { tag: Button } = _a, buttonProps = __rest(_a, ["tag"]);
|
|
1957
|
-
const button = (React.createElement(Button, Object.assign({}, buttonProps, { className: b$
|
|
1958
|
-
React.createElement("span", { className: b$
|
|
1535
|
+
const button = (React.createElement(Button, Object.assign({}, buttonProps, { className: b$o('btn-logo', buttonClassName), onClick: onClick }),
|
|
1536
|
+
React.createElement("span", { className: b$o('logo-icon-place', iconPlaceClassName) }, buttonIcon),
|
|
1959
1537
|
!compact && logo));
|
|
1960
|
-
return (React.createElement("div", { className: b$
|
|
1538
|
+
return (React.createElement("div", { className: b$o(null, className) }, hasWrapper ? wrapper(button, Boolean(compact)) : button));
|
|
1961
1539
|
};
|
|
1962
1540
|
|
|
1963
1541
|
var _path;
|
|
@@ -1977,17 +1555,18 @@ var SvgDividerCollapsed = function SvgDividerCollapsed(props) {
|
|
|
1977
1555
|
const DEFAULT_SUBHEADER_ITEMS = [];
|
|
1978
1556
|
const HEADER_COMPOSITE_ID = 'gravity-ui/navigation-header-composite-bar';
|
|
1979
1557
|
const Header = () => {
|
|
1980
|
-
const { logo, onItemClick, onClosePanel, headerDecoration, subheaderItems } = useAsideHeaderInnerContext();
|
|
1981
|
-
const {
|
|
1558
|
+
const { logo, compact, onItemClick, onClosePanel, headerDecoration, subheaderItems } = useAsideHeaderInnerContext();
|
|
1559
|
+
const { isExpanded } = useAsideHeaderInnerContext();
|
|
1560
|
+
const items = useGroupedMenuItems(subheaderItems || DEFAULT_SUBHEADER_ITEMS);
|
|
1982
1561
|
const onLogoClick = React.useCallback((event) => {
|
|
1983
1562
|
var _a;
|
|
1984
1563
|
onClosePanel === null || onClosePanel === undefined ? undefined : onClosePanel();
|
|
1985
1564
|
(_a = logo === null || logo === undefined ? undefined : logo.onClick) === null || _a === undefined ? undefined : _a.call(logo, event);
|
|
1986
1565
|
}, [onClosePanel, logo]);
|
|
1987
|
-
return (React.createElement("div", { className: b$
|
|
1988
|
-
logo && (React.createElement(Logo, Object.assign({}, logo, { onClick: onLogoClick, compact:
|
|
1989
|
-
React.createElement(CompositeBar, { compositeId: HEADER_COMPOSITE_ID, type: "subheader",
|
|
1990
|
-
headerDecoration && (React.createElement(uikit.Icon, { data: SvgDividerCollapsed, className: b$
|
|
1566
|
+
return (React.createElement("div", { className: b$u('header', { ['with-decoration']: headerDecoration }) },
|
|
1567
|
+
logo && (React.createElement(Logo, Object.assign({}, logo, { onClick: onLogoClick, compact: !isExpanded, buttonClassName: b$u('logo-button'), iconPlaceClassName: b$u('logo-icon-place') }))),
|
|
1568
|
+
React.createElement(CompositeBar, { compositeId: HEADER_COMPOSITE_ID, menuItemClassName: b$u('menu-item'), type: "subheader", compact: compact, items: items, onItemClick: onItemClick }),
|
|
1569
|
+
headerDecoration && (React.createElement(uikit.Icon, { data: SvgDividerCollapsed, className: b$u('header-divider'), width: ASIDE_HEADER_COMPACT_WIDTH, height: HEADER_DIVIDER_HEIGHT }))));
|
|
1991
1570
|
};
|
|
1992
1571
|
|
|
1993
1572
|
// Avoid Chrome DevTools blue warning.
|
|
@@ -1999,12 +1578,20 @@ function getPlatform() {
|
|
|
1999
1578
|
return navigator.platform;
|
|
2000
1579
|
}
|
|
2001
1580
|
|
|
2002
|
-
var
|
|
1581
|
+
var isClient = typeof document !== 'undefined';
|
|
1582
|
+
|
|
1583
|
+
var noop$1 = function noop() {};
|
|
1584
|
+
var index = isClient ? React.useLayoutEffect : noop$1;
|
|
1585
|
+
|
|
2003
1586
|
if (process.env.NODE_ENV !== "production") ;
|
|
2004
1587
|
|
|
2005
1588
|
let lockCount = 0;
|
|
1589
|
+
const scrollbarProperty = '--floating-ui-scrollbar-width';
|
|
2006
1590
|
function enableScrollLock() {
|
|
2007
|
-
const
|
|
1591
|
+
const platform = getPlatform();
|
|
1592
|
+
const isIOS = /iP(hone|ad|od)|iOS/.test(platform) ||
|
|
1593
|
+
// iPads can claim to be MacIntel
|
|
1594
|
+
platform === 'MacIntel' && navigator.maxTouchPoints > 1;
|
|
2008
1595
|
const bodyStyle = document.body.style;
|
|
2009
1596
|
// RTL <body> scrollbar
|
|
2010
1597
|
const scrollbarX = Math.round(document.documentElement.getBoundingClientRect().left) + document.documentElement.scrollLeft;
|
|
@@ -2013,6 +1600,7 @@ function enableScrollLock() {
|
|
|
2013
1600
|
const scrollX = bodyStyle.left ? parseFloat(bodyStyle.left) : window.scrollX;
|
|
2014
1601
|
const scrollY = bodyStyle.top ? parseFloat(bodyStyle.top) : window.scrollY;
|
|
2015
1602
|
bodyStyle.overflow = 'hidden';
|
|
1603
|
+
bodyStyle.setProperty(scrollbarProperty, scrollbarWidth + "px");
|
|
2016
1604
|
if (scrollbarWidth) {
|
|
2017
1605
|
bodyStyle[paddingProp] = scrollbarWidth + "px";
|
|
2018
1606
|
}
|
|
@@ -2036,6 +1624,7 @@ function enableScrollLock() {
|
|
|
2036
1624
|
overflow: '',
|
|
2037
1625
|
[paddingProp]: ''
|
|
2038
1626
|
});
|
|
1627
|
+
bodyStyle.removeProperty(scrollbarProperty);
|
|
2039
1628
|
if (isIOS) {
|
|
2040
1629
|
Object.assign(bodyStyle, {
|
|
2041
1630
|
position: '',
|
|
@@ -2102,7 +1691,7 @@ function _objectWithoutPropertiesLoose(r, e) {
|
|
|
2102
1691
|
if (null == r) return {};
|
|
2103
1692
|
var t = {};
|
|
2104
1693
|
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
|
2105
|
-
if (e.indexOf(n)
|
|
1694
|
+
if (-1 !== e.indexOf(n)) continue;
|
|
2106
1695
|
t[n] = r[n];
|
|
2107
1696
|
}
|
|
2108
1697
|
return t;
|
|
@@ -4500,10 +4089,10 @@ function useResizableDrawerItem(params) {
|
|
|
4500
4089
|
return { resizedWidth: displayWidth, resizerHandlers: handlers, isResizing };
|
|
4501
4090
|
}
|
|
4502
4091
|
|
|
4503
|
-
var css_248z$
|
|
4504
|
-
styleInject(css_248z$
|
|
4092
|
+
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))}";
|
|
4093
|
+
styleInject(css_248z$m);
|
|
4505
4094
|
|
|
4506
|
-
const b$
|
|
4095
|
+
const b$n = block('drawer');
|
|
4507
4096
|
const TIMEOUT = 300;
|
|
4508
4097
|
const DrawerItem = React.forwardRef(function DrawerItem(props, ref) {
|
|
4509
4098
|
const { visible, content, children, direction = 'left', className, resizable, width, minResizeWidth, maxResizeWidth, onResizeStart, onResizeContinue, onResize, keepMounted = false, style = {}, } = props;
|
|
@@ -4535,10 +4124,10 @@ const DrawerItem = React.forwardRef(function DrawerItem(props, ref) {
|
|
|
4535
4124
|
React.useEffect(() => {
|
|
4536
4125
|
setInitialRender(true);
|
|
4537
4126
|
}, [direction]);
|
|
4538
|
-
const resizerElement = resizable ? (React.createElement("div", Object.assign({ className: b$
|
|
4539
|
-
React.createElement("div", { className: b$
|
|
4540
|
-
return (React.createElement(CSSTransition, { in: visible, timeout: TIMEOUT, mountOnEnter: !keepMounted, unmountOnExit: !keepMounted, classNames: b$
|
|
4541
|
-
React.createElement("div", { ref: handleRef, className: b$
|
|
4127
|
+
const resizerElement = resizable ? (React.createElement("div", Object.assign({ className: b$n('resizer', { direction }) }, resizerHandlers),
|
|
4128
|
+
React.createElement("div", { className: b$n('resizer-handle', { direction }) }))) : null;
|
|
4129
|
+
return (React.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) },
|
|
4130
|
+
React.createElement("div", { ref: handleRef, className: b$n('item', {
|
|
4542
4131
|
direction: cssDirection,
|
|
4543
4132
|
hidden: isInitialRender && !visible,
|
|
4544
4133
|
resize: isResizing,
|
|
@@ -4574,9 +4163,9 @@ const Drawer = ({ className, veilClassName, children, style, onVeilClick, onEsca
|
|
|
4574
4163
|
useScrollLock(shouldApplyScrollLock);
|
|
4575
4164
|
return (React.createElement(Transition, { in: someItemVisible, timeout: { enter: 0, exit: TIMEOUT }, mountOnEnter: !keepMounted, unmountOnExit: !keepMounted, nodeRef: containerRef }, (state) => {
|
|
4576
4165
|
const childrenVisible = someItemVisible && state === 'entered';
|
|
4577
|
-
const content = (React.createElement("div", { ref: containerRef, className: b$
|
|
4578
|
-
React.createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$
|
|
4579
|
-
React.createElement("div", { ref: veilRef, className: b$
|
|
4166
|
+
const content = (React.createElement("div", { ref: containerRef, className: b$n({ hideVeil }, className), style: style },
|
|
4167
|
+
React.createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$n('veil-transition'), nodeRef: veilRef },
|
|
4168
|
+
React.createElement("div", { ref: veilRef, className: b$n('veil', { hidden: hideVeil }, veilClassName), onClick: onVeilClick })),
|
|
4580
4169
|
React.Children.map(children, (child) => {
|
|
4581
4170
|
if (React.isValidElement(child) &&
|
|
4582
4171
|
child.type === DrawerItem) {
|
|
@@ -4598,28 +4187,29 @@ const Drawer = ({ className, veilClassName, children, style, onVeilClick, onEsca
|
|
|
4598
4187
|
};
|
|
4599
4188
|
|
|
4600
4189
|
const Panels = () => {
|
|
4601
|
-
const { panelItems,
|
|
4602
|
-
return panelItems ? (React.createElement(Drawer, { className: b$
|
|
4190
|
+
const { panelItems, size, onClosePanel } = useAsideHeaderInnerContext();
|
|
4191
|
+
return panelItems ? (React.createElement(Drawer, { className: b$u('panels'), onVeilClick: onClosePanel, onEscape: onClosePanel, style: { left: size } }, panelItems.map((item) => (React.createElement(DrawerItem, Object.assign({ key: item.id, className: b$u('panel') }, item)))))) : null;
|
|
4603
4192
|
};
|
|
4604
4193
|
|
|
4605
4194
|
const MENU_ITEMS_COMPOSITE_ID = 'gravity-ui/navigation-menu-items-composite-bar';
|
|
4606
4195
|
const FirstPanel = React.forwardRef((_props, ref) => {
|
|
4607
|
-
const { size, onItemClick, headerDecoration, multipleTooltip,
|
|
4608
|
-
const
|
|
4196
|
+
const { size, onItemClick, headerDecoration, multipleTooltip, onMenuMoreClick, renderFooter, onToggleGroupCollapsed, compact, customBackground, customBackgroundClassName, className, hideCollapseButton, menuItems, menuGroups, qa, onMouseEnter, onMouseLeave, isExpanded, } = useAsideHeaderInnerContext();
|
|
4197
|
+
const flatListItems = useGroupedMenuItems(menuItems, menuGroups);
|
|
4609
4198
|
const asideRef = React.useRef(null);
|
|
4610
4199
|
React.useEffect(() => {
|
|
4611
4200
|
uikit.setRef(ref, asideRef.current);
|
|
4612
4201
|
}, [ref]);
|
|
4202
|
+
const isExpandedByHover = compact && isExpanded;
|
|
4613
4203
|
return (React.createElement(React.Fragment, null,
|
|
4614
|
-
React.createElement("div", { className: b$
|
|
4615
|
-
React.createElement("div", { className: b$
|
|
4616
|
-
customBackground && (React.createElement("div", { className: b$
|
|
4617
|
-
React.createElement("div", { className: b$
|
|
4204
|
+
React.createElement("div", { className: b$u('aside', { 'expanded-by-hover': isExpandedByHover }, className), style: { width: size }, "data-qa": qa, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave },
|
|
4205
|
+
React.createElement("div", { className: b$u('aside-popup-anchor'), ref: asideRef }),
|
|
4206
|
+
customBackground && (React.createElement("div", { className: b$u('aside-custom-background', customBackgroundClassName) }, customBackground)),
|
|
4207
|
+
React.createElement("div", { className: b$u('aside-content', { ['with-decoration']: headerDecoration }) },
|
|
4618
4208
|
React.createElement(Header, null),
|
|
4619
|
-
(
|
|
4620
|
-
React.createElement("div", { className: b$
|
|
4209
|
+
(flatListItems === null || flatListItems === undefined ? undefined : flatListItems.length) ? (React.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.createElement("div", { className: b$u('menu-items') })),
|
|
4210
|
+
React.createElement("div", { className: b$u('footer') }, renderFooter === null || renderFooter === undefined ? undefined : renderFooter({
|
|
4621
4211
|
size,
|
|
4622
|
-
compact: Boolean(
|
|
4212
|
+
compact: Boolean(!isExpanded),
|
|
4623
4213
|
asideRef,
|
|
4624
4214
|
})),
|
|
4625
4215
|
!hideCollapseButton && React.createElement(CollapseButton, null))),
|
|
@@ -4627,6 +4217,157 @@ const FirstPanel = React.forwardRef((_props, ref) => {
|
|
|
4627
4217
|
});
|
|
4628
4218
|
FirstPanel.displayName = 'FirstPanel';
|
|
4629
4219
|
|
|
4220
|
+
function buildExpandedFromFlatList(flatList) {
|
|
4221
|
+
const expanded = [];
|
|
4222
|
+
flatList.forEach((item) => {
|
|
4223
|
+
if ('items' in item && item.items && item.items.length > 0) {
|
|
4224
|
+
expanded.push(...item.items);
|
|
4225
|
+
}
|
|
4226
|
+
else {
|
|
4227
|
+
expanded.push(item);
|
|
4228
|
+
}
|
|
4229
|
+
});
|
|
4230
|
+
return expanded;
|
|
4231
|
+
}
|
|
4232
|
+
|
|
4233
|
+
function getRealIndexInExpandedMenu(flatListIndex, flatList) {
|
|
4234
|
+
let realIndex = 0;
|
|
4235
|
+
for (let i = 0; i < flatListIndex; i++) {
|
|
4236
|
+
const item = flatList[i];
|
|
4237
|
+
if ('items' in item && item.items && item.items.length > 0) {
|
|
4238
|
+
realIndex += item.items.length;
|
|
4239
|
+
}
|
|
4240
|
+
else {
|
|
4241
|
+
realIndex += 1;
|
|
4242
|
+
}
|
|
4243
|
+
}
|
|
4244
|
+
return realIndex;
|
|
4245
|
+
}
|
|
4246
|
+
function getRealIndexInGroup(groupIndex, itemIndexInGroup, flatList) {
|
|
4247
|
+
const groupStartIndex = getRealIndexInExpandedMenu(groupIndex, flatList);
|
|
4248
|
+
return groupStartIndex + itemIndexInGroup;
|
|
4249
|
+
}
|
|
4250
|
+
|
|
4251
|
+
function sortMenuItems(oldIndex, newIndex, items) {
|
|
4252
|
+
if (items[oldIndex] === undefined || items[newIndex] === undefined) {
|
|
4253
|
+
return buildExpandedFromFlatList(items);
|
|
4254
|
+
}
|
|
4255
|
+
const sortedItems = [...items];
|
|
4256
|
+
const [movedElement] = sortedItems.splice(oldIndex, 1);
|
|
4257
|
+
sortedItems.splice(newIndex, 0, movedElement);
|
|
4258
|
+
return buildExpandedFromFlatList(sortedItems);
|
|
4259
|
+
}
|
|
4260
|
+
|
|
4261
|
+
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)}";
|
|
4262
|
+
styleInject(css_248z$l);
|
|
4263
|
+
|
|
4264
|
+
const b$m = block('all-pages-panel');
|
|
4265
|
+
const AllPagesPanel = (props) => {
|
|
4266
|
+
const { startEditIcon, onEditModeChanged, className } = props;
|
|
4267
|
+
const { defaultMenuItems, editMenuProps, menuItems, menuGroups, defaultMenuGroups, onToggleGroupCollapsed, onMenuItemsChanged, onMenuGroupsChanged, } = useAsideHeaderInnerContext();
|
|
4268
|
+
const items = useGroupedMenuItems(menuItems, menuGroups, true);
|
|
4269
|
+
const menuItemsRef = React.useRef(items);
|
|
4270
|
+
menuItemsRef.current = items;
|
|
4271
|
+
const menuGroupsRef = React.useRef(menuGroups);
|
|
4272
|
+
menuGroupsRef.current = menuGroups;
|
|
4273
|
+
const [isEditMode, setIsEditMode] = React.useState(false);
|
|
4274
|
+
const toggleEditMode = React.useCallback(() => {
|
|
4275
|
+
setIsEditMode((prev) => !prev);
|
|
4276
|
+
}, []);
|
|
4277
|
+
React.useEffect(() => {
|
|
4278
|
+
var _a;
|
|
4279
|
+
onEditModeChanged === null || onEditModeChanged === undefined ? undefined : onEditModeChanged(isEditMode);
|
|
4280
|
+
if (isEditMode) {
|
|
4281
|
+
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onOpenEditMode) === null || _a === undefined ? undefined : _a.call(editMenuProps);
|
|
4282
|
+
}
|
|
4283
|
+
}, [isEditMode, onEditModeChanged, editMenuProps]);
|
|
4284
|
+
const onItemClick = React.useCallback((item, collapsed, event) => {
|
|
4285
|
+
var _a;
|
|
4286
|
+
// TODO: make event an optional argument
|
|
4287
|
+
(_a = item.onItemClick) === null || _a === undefined ? undefined : _a.call(item, item, collapsed, event);
|
|
4288
|
+
}, []);
|
|
4289
|
+
const onResetToDefaultClick = React.useCallback(() => {
|
|
4290
|
+
var _a;
|
|
4291
|
+
if (!onMenuItemsChanged) {
|
|
4292
|
+
return;
|
|
4293
|
+
}
|
|
4294
|
+
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onResetSettingsToDefault) === null || _a === undefined ? undefined : _a.call(editMenuProps);
|
|
4295
|
+
const originItems = defaultMenuItems === null || defaultMenuItems === undefined ? undefined : defaultMenuItems.filter(({ id }) => id !== ALL_PAGES_ID);
|
|
4296
|
+
if (originItems) {
|
|
4297
|
+
onMenuItemsChanged(originItems);
|
|
4298
|
+
}
|
|
4299
|
+
if (onMenuGroupsChanged && defaultMenuGroups) {
|
|
4300
|
+
onMenuGroupsChanged(defaultMenuGroups);
|
|
4301
|
+
}
|
|
4302
|
+
}, [
|
|
4303
|
+
onMenuItemsChanged,
|
|
4304
|
+
editMenuProps,
|
|
4305
|
+
defaultMenuItems,
|
|
4306
|
+
onMenuGroupsChanged,
|
|
4307
|
+
defaultMenuGroups,
|
|
4308
|
+
]);
|
|
4309
|
+
const handleToggleGroupVisibility = React.useCallback((groupId) => {
|
|
4310
|
+
if (!onMenuGroupsChanged) {
|
|
4311
|
+
return;
|
|
4312
|
+
}
|
|
4313
|
+
const currentGroups = menuGroupsRef.current || [];
|
|
4314
|
+
const updatedGroups = currentGroups.map((group) => {
|
|
4315
|
+
if (group.id === groupId) {
|
|
4316
|
+
return Object.assign(Object.assign({}, group), { hidden: !group.hidden });
|
|
4317
|
+
}
|
|
4318
|
+
return group;
|
|
4319
|
+
});
|
|
4320
|
+
onMenuGroupsChanged(updatedGroups);
|
|
4321
|
+
}, [onMenuGroupsChanged]);
|
|
4322
|
+
const toggleMenuItemsVisibility = React.useCallback((item) => {
|
|
4323
|
+
var _a;
|
|
4324
|
+
if (!onMenuItemsChanged) {
|
|
4325
|
+
return;
|
|
4326
|
+
}
|
|
4327
|
+
const changedItem = Object.assign(Object.assign({}, item), { hidden: !item.hidden });
|
|
4328
|
+
const originItems = menuItemsRef.current;
|
|
4329
|
+
const expandedItems = buildExpandedFromFlatList(originItems);
|
|
4330
|
+
(_a = editMenuProps === null || editMenuProps === undefined ? undefined : editMenuProps.onToggleMenuItem) === null || _a === undefined ? undefined : _a.call(editMenuProps, changedItem);
|
|
4331
|
+
onMenuItemsChanged(expandedItems.map((menuItem) => {
|
|
4332
|
+
if (menuItem.id !== changedItem.id) {
|
|
4333
|
+
return menuItem;
|
|
4334
|
+
}
|
|
4335
|
+
return changedItem;
|
|
4336
|
+
}));
|
|
4337
|
+
}, [onMenuItemsChanged, editMenuProps]);
|
|
4338
|
+
const onFirstLevelSortEnd = React.useCallback(({ oldIndex, newIndex }) => {
|
|
4339
|
+
if (!onMenuItemsChanged) {
|
|
4340
|
+
return;
|
|
4341
|
+
}
|
|
4342
|
+
const currentFlatList = menuItemsRef.current || [];
|
|
4343
|
+
const updatedItems = sortMenuItems(oldIndex, newIndex, currentFlatList);
|
|
4344
|
+
if (updatedItems) {
|
|
4345
|
+
onMenuItemsChanged === null || onMenuItemsChanged === undefined ? undefined : onMenuItemsChanged(updatedItems);
|
|
4346
|
+
}
|
|
4347
|
+
}, [onMenuItemsChanged]);
|
|
4348
|
+
const onSecondLevelSortEnd = React.useCallback((groupIndex) => ({ oldIndex, newIndex }) => {
|
|
4349
|
+
if (!onMenuItemsChanged) {
|
|
4350
|
+
return;
|
|
4351
|
+
}
|
|
4352
|
+
const currentFlatList = menuItemsRef.current || [];
|
|
4353
|
+
const realOldIndex = getRealIndexInGroup(groupIndex, oldIndex, currentFlatList);
|
|
4354
|
+
const realNewIndex = getRealIndexInGroup(groupIndex, newIndex, currentFlatList);
|
|
4355
|
+
const expandedItems = buildExpandedFromFlatList(currentFlatList);
|
|
4356
|
+
const updatedItems = sortMenuItems(realOldIndex, realNewIndex, expandedItems);
|
|
4357
|
+
if (updatedItems) {
|
|
4358
|
+
onMenuItemsChanged === null || onMenuItemsChanged === undefined ? undefined : onMenuItemsChanged(updatedItems);
|
|
4359
|
+
}
|
|
4360
|
+
}, [onMenuItemsChanged]);
|
|
4361
|
+
const data = items.filter((item) => item.id !== ALL_PAGES_ID && item.type !== 'action');
|
|
4362
|
+
return (React.createElement(uikit.Flex, { className: b$m(null, className), gap: "5", direction: "column" },
|
|
4363
|
+
React.createElement(uikit.Flex, { gap: "4", alignItems: "center", justifyContent: "space-between" },
|
|
4364
|
+
React.createElement(uikit.Text, { variant: "subheader-2" }, isEditMode ? i18n$4('all-panel.title.editing') : i18n$4('all-panel.title.main')),
|
|
4365
|
+
React.createElement(uikit.Tooltip, { content: i18n$4('all-panel.title.editing') },
|
|
4366
|
+
React.createElement(uikit.Button, { selected: isEditMode, view: "normal", onClick: toggleEditMode }, startEditIcon ? startEditIcon : React.createElement(uikit.Icon, { data: icons.Gear })))),
|
|
4367
|
+
React.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 }),
|
|
4368
|
+
isEditMode && (React.createElement(uikit.Button, { onClick: onResetToDefaultClick }, i18n$4('all-panel.resetToDefault')))));
|
|
4369
|
+
};
|
|
4370
|
+
|
|
4630
4371
|
var InnerPanels;
|
|
4631
4372
|
(function (InnerPanels) {
|
|
4632
4373
|
InnerPanels["AllPages"] = "all-pages";
|
|
@@ -4634,7 +4375,7 @@ var InnerPanels;
|
|
|
4634
4375
|
|
|
4635
4376
|
const EMPTY_MENU_ITEMS = [];
|
|
4636
4377
|
const useAsideHeaderInnerContextValue = (props) => {
|
|
4637
|
-
const { size, onClosePanel, menuItems, panelItems, onMenuItemsChanged, onAllPagesClick } = props;
|
|
4378
|
+
const { size, onClosePanel, menuItems, menuGroups, defaultMenuGroups, panelItems, onMenuItemsChanged, onMenuGroupsChanged, onAllPagesClick, } = props;
|
|
4638
4379
|
const [innerVisiblePanel, setInnerVisiblePanel] = React.useState();
|
|
4639
4380
|
const ALL_PAGES_MENU_ITEM = React.useMemo(() => {
|
|
4640
4381
|
return getAllPagesMenuItem();
|
|
@@ -4661,6 +4402,17 @@ const useAsideHeaderInnerContextValue = (props) => {
|
|
|
4661
4402
|
}
|
|
4662
4403
|
(_a = item.onItemClick) === null || _a === undefined ? undefined : _a.call(item, item, collapsed, event);
|
|
4663
4404
|
}, [innerOnClosePanel, ALL_PAGES_MENU_ITEM, onClosePanel]);
|
|
4405
|
+
const onToggleGroupCollapsed = React.useCallback((groupId) => {
|
|
4406
|
+
const updatedMenuGroups = menuGroups === null || menuGroups === undefined ? undefined : menuGroups.map((group) => {
|
|
4407
|
+
if (group.id === groupId) {
|
|
4408
|
+
return Object.assign(Object.assign({}, group), { collapsed: !group.collapsed });
|
|
4409
|
+
}
|
|
4410
|
+
return group;
|
|
4411
|
+
});
|
|
4412
|
+
if (updatedMenuGroups) {
|
|
4413
|
+
onMenuGroupsChanged === null || onMenuGroupsChanged === undefined ? undefined : onMenuGroupsChanged(updatedMenuGroups);
|
|
4414
|
+
}
|
|
4415
|
+
}, [menuGroups, onMenuGroupsChanged]);
|
|
4664
4416
|
const innerMenuItems = React.useMemo(() => allPagesIsAvailable
|
|
4665
4417
|
? [
|
|
4666
4418
|
...(menuItems || EMPTY_MENU_ITEMS),
|
|
@@ -4680,13 +4432,20 @@ const useAsideHeaderInnerContextValue = (props) => {
|
|
|
4680
4432
|
},
|
|
4681
4433
|
];
|
|
4682
4434
|
}, [allPagesIsAvailable, panelItems, innerVisiblePanel]);
|
|
4683
|
-
return Object.assign(Object.assign({}, props), { onClosePanel: innerOnClosePanel, allPagesIsAvailable, menuItems: innerMenuItems,
|
|
4684
|
-
|
|
4435
|
+
return Object.assign(Object.assign({}, props), { onClosePanel: innerOnClosePanel, allPagesIsAvailable, menuItems: innerMenuItems, menuGroups,
|
|
4436
|
+
defaultMenuGroups,
|
|
4437
|
+
onMenuGroupsChanged, panelItems: innerPanelItems, size,
|
|
4438
|
+
onItemClick,
|
|
4439
|
+
onToggleGroupCollapsed });
|
|
4685
4440
|
};
|
|
4686
4441
|
|
|
4687
4442
|
const PageLayoutAside = React.forwardRef((props, ref) => {
|
|
4688
|
-
const { size, compact } = useAsideHeaderContext();
|
|
4689
|
-
const asideHeaderInnerContextValue = useAsideHeaderInnerContextValue(Object.assign({ size,
|
|
4443
|
+
const { size, compact, isExpanded, onMouseEnter, onMouseLeave } = useAsideHeaderContext();
|
|
4444
|
+
const asideHeaderInnerContextValue = useAsideHeaderInnerContextValue(Object.assign({ size,
|
|
4445
|
+
compact,
|
|
4446
|
+
isExpanded,
|
|
4447
|
+
onMouseEnter,
|
|
4448
|
+
onMouseLeave }, props));
|
|
4690
4449
|
return (React.createElement(AsideHeaderInnerContextProvider, { value: asideHeaderInnerContextValue },
|
|
4691
4450
|
React.createElement(FirstPanel, { ref: ref })));
|
|
4692
4451
|
});
|
|
@@ -4694,30 +4453,29 @@ PageLayoutAside.displayName = 'PageLayoutAside';
|
|
|
4694
4453
|
|
|
4695
4454
|
const AsideHeader = React.forwardRef((_a, ref) => {
|
|
4696
4455
|
var { compact, className, topAlert } = _a, props = __rest(_a, ["compact", "className", "topAlert"]);
|
|
4697
|
-
return (React.createElement(PageLayout, { compact: compact, className: className, topAlert: topAlert },
|
|
4456
|
+
return (React.createElement(PageLayout, { compact: compact, onChangeCompact: props.onChangeCompact, className: className, topAlert: topAlert },
|
|
4698
4457
|
React.createElement(PageLayoutAside, Object.assign({ ref: ref }, props)),
|
|
4699
4458
|
React.createElement(PageLayout.Content, { renderContent: props.renderContent })));
|
|
4700
4459
|
});
|
|
4701
4460
|
AsideHeader.displayName = 'AsideHeader';
|
|
4702
4461
|
|
|
4703
|
-
var css_248z$k = ".gn-footer-item{height:
|
|
4462
|
+
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}";
|
|
4704
4463
|
styleInject(css_248z$k);
|
|
4705
4464
|
|
|
4706
4465
|
const b$l = block('footer-item');
|
|
4707
|
-
|
|
4708
|
-
|
|
4709
|
-
|
|
4710
|
-
};
|
|
4466
|
+
function FooterItem$1(props) {
|
|
4467
|
+
return (React.createElement(Item$1, Object.assign({}, props, { iconSize: ASIDE_HEADER_ICON_SIZE, className: b$l({ compact: props.compact }) })));
|
|
4468
|
+
}
|
|
4711
4469
|
|
|
4712
4470
|
const AsideFallback = ({ headerDecoration, subheaderItemsCount = 0, qa }) => {
|
|
4713
4471
|
const { compact } = useAsideHeaderContext();
|
|
4714
4472
|
const widthVar = compact ? '--gn-aside-header-min-width' : '--gn-aside-header-size';
|
|
4715
4473
|
const subheaderHeight = (1 + subheaderItemsCount) * ITEM_HEIGHT;
|
|
4716
|
-
return (React.createElement("div", { className: b$
|
|
4717
|
-
React.createElement("div", { className: b$
|
|
4718
|
-
React.createElement("div", { className: b$
|
|
4474
|
+
return (React.createElement("div", { className: b$u('aside'), style: { width: `var(${widthVar})` }, "data-qa": qa },
|
|
4475
|
+
React.createElement("div", { className: b$u('aside-content', { 'with-decoration': headerDecoration }) },
|
|
4476
|
+
React.createElement("div", { className: b$u('header', { 'with-decoration': headerDecoration }) },
|
|
4719
4477
|
React.createElement("div", { style: { height: subheaderHeight } }),
|
|
4720
|
-
compact && headerDecoration ? (React.createElement(uikit.Icon, { data: SvgDividerCollapsed, className: b$
|
|
4478
|
+
compact && headerDecoration ? (React.createElement(uikit.Icon, { data: SvgDividerCollapsed, className: b$u('header-divider'), width: ASIDE_HEADER_COMPACT_WIDTH, height: HEADER_DIVIDER_HEIGHT })) : null),
|
|
4721
4479
|
React.createElement("div", { style: { flex: 1 } }))));
|
|
4722
4480
|
};
|
|
4723
4481
|
|
|
@@ -5420,7 +5178,7 @@ function SettingsSearch({ className, initialValue, onChange, debounce = 200, inp
|
|
|
5420
5178
|
} })));
|
|
5421
5179
|
}
|
|
5422
5180
|
|
|
5423
|
-
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-
|
|
5181
|
+
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)}";
|
|
5424
5182
|
styleInject(css_248z$a);
|
|
5425
5183
|
|
|
5426
5184
|
function Settings(_a) {
|
|
@@ -5720,7 +5478,7 @@ const OverlapPanel = ({ title, renderContent, className, onClose, action, closeT
|
|
|
5720
5478
|
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}";
|
|
5721
5479
|
styleInject(css_248z$4);
|
|
5722
5480
|
|
|
5723
|
-
const TopAlert = React.lazy(() => Promise.resolve().then(function () { return require('./index-
|
|
5481
|
+
const TopAlert = React.lazy(() => Promise.resolve().then(function () { return require('./index-Di96hvKc.js'); }).then((module) => ({ default: module.TopAlert })));
|
|
5724
5482
|
const b$4 = block('mobile-header');
|
|
5725
5483
|
const MobileHeader = React.forwardRef(({ logo, burgerMenu, burgerCloseTitle = i18n('burger_button_close'), burgerOpenTitle = i18n('burger_button_open'), panelItems = [], renderContent, sideItemRenderContent, onClosePanel, onEvent, className, contentClassName, overlapPanel, topAlert, }, ref) => {
|
|
5726
5484
|
const targetRef = useForwardRef(ref);
|
|
@@ -6046,4 +5804,4 @@ exports.styleInject = styleInject;
|
|
|
6046
5804
|
exports.useAsideHeaderContext = useAsideHeaderContext;
|
|
6047
5805
|
exports.useSettingsContext = useSettingsContext;
|
|
6048
5806
|
exports.useSettingsSelectionContext = useSettingsSelectionContext;
|
|
6049
|
-
//# sourceMappingURL=index-
|
|
5807
|
+
//# sourceMappingURL=index-Bw3wDNJr.js.map
|