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