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