@gravity-ui/navigation 3.10.1 → 5.0.0-beta.0

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