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