@gravity-ui/navigation 0.9.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/build/cjs/components/AsideHeader/AsideHeader.d.ts +1 -0
  3. package/build/cjs/components/AsideHeader/__stories__/AsideHeader.stories.d.ts +2 -0
  4. package/build/cjs/components/AsideHeader/__stories__/AsideHeaderShowcase.d.ts +7 -2
  5. package/build/cjs/components/CompositeBar/CompositeBar.d.ts +7 -15
  6. package/build/cjs/components/CompositeBar/Item/Item.d.ts +1 -1
  7. package/build/cjs/components/CompositeBar/MultipleTooltip/MultipleTooltip.d.ts +8 -0
  8. package/build/cjs/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.d.ts +24 -0
  9. package/build/cjs/components/CompositeBar/MultipleTooltip/index.d.ts +3 -0
  10. package/build/cjs/components/CompositeBar/utils.d.ts +6 -1
  11. package/build/cjs/index.js +223 -148
  12. package/build/cjs/index.js.map +1 -1
  13. package/build/esm/components/AsideHeader/AsideHeader.d.ts +1 -0
  14. package/build/esm/components/AsideHeader/__stories__/AsideHeader.stories.d.ts +2 -0
  15. package/build/esm/components/AsideHeader/__stories__/AsideHeaderShowcase.d.ts +7 -2
  16. package/build/esm/components/CompositeBar/CompositeBar.d.ts +7 -15
  17. package/build/esm/components/CompositeBar/Item/Item.d.ts +1 -1
  18. package/build/esm/components/CompositeBar/MultipleTooltip/MultipleTooltip.d.ts +8 -0
  19. package/build/esm/components/CompositeBar/MultipleTooltip/MultipleTooltipContext.d.ts +24 -0
  20. package/build/esm/components/CompositeBar/MultipleTooltip/index.d.ts +3 -0
  21. package/build/esm/components/CompositeBar/utils.d.ts +6 -1
  22. package/build/esm/index.js +225 -150
  23. package/build/esm/index.js.map +1 -1
  24. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  import * as React from 'react';
2
- import React__default, { Children, isValidElement, cloneElement, createElement, PureComponent, useState, useMemo, useCallback, useEffect } from 'react';
2
+ import React__default, { Children, isValidElement, cloneElement, createElement, PureComponent, useRef, useContext, useCallback, useState, useMemo, useEffect } from 'react';
3
3
  import { useBodyScrollLock, Button, Icon, Popup, List, Tooltip, Text, Hotkey, TextInput, Tabs, Loader, Sheet, eventBroker } from '@gravity-ui/uikit';
4
4
  import ReactDOM from 'react-dom';
5
- import { Xmark } from '@gravity-ui/icons';
5
+ import { Ellipsis, Xmark } from '@gravity-ui/icons';
6
6
 
7
7
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
8
8
 
@@ -84,8 +84,8 @@ const defaultDict$2 = {
84
84
  [MobileHeaderDict.OpenBurger]: 'Open menu',
85
85
  };
86
86
 
87
- function _extends$4() {
88
- _extends$4 = Object.assign ? Object.assign.bind() : function (target) {
87
+ function _extends$3() {
88
+ _extends$3 = Object.assign ? Object.assign.bind() : function (target) {
89
89
  for (var i = 1; i < arguments.length; i++) {
90
90
  var source = arguments[i];
91
91
  for (var key in source) {
@@ -96,7 +96,7 @@ function _extends$4() {
96
96
  }
97
97
  return target;
98
98
  };
99
- return _extends$4.apply(this, arguments);
99
+ return _extends$3.apply(this, arguments);
100
100
  }
101
101
 
102
102
  function _objectWithoutPropertiesLoose(source, excluded) {
@@ -2249,7 +2249,7 @@ var CSSTransition = /*#__PURE__*/function (_React$Component) {
2249
2249
  _this$props.classNames;
2250
2250
  var props = _objectWithoutPropertiesLoose(_this$props, ["classNames"]);
2251
2251
 
2252
- return /*#__PURE__*/React__default.createElement(Transition, _extends$4({}, props, {
2252
+ return /*#__PURE__*/React__default.createElement(Transition, _extends$3({}, props, {
2253
2253
  onEnter: this.onEnter,
2254
2254
  onEntered: this.onEntered,
2255
2255
  onEntering: this.onEntering,
@@ -2265,7 +2265,7 @@ var CSSTransition = /*#__PURE__*/function (_React$Component) {
2265
2265
  CSSTransition.defaultProps = {
2266
2266
  classNames: ''
2267
2267
  };
2268
- CSSTransition.propTypes = process.env.NODE_ENV !== "production" ? _extends$4({}, Transition.propTypes, {
2268
+ CSSTransition.propTypes = process.env.NODE_ENV !== "production" ? _extends$3({}, Transition.propTypes, {
2269
2269
  /**
2270
2270
  * The animation classNames applied to the component as it appears, enters,
2271
2271
  * exits or has finished the transition. A single name can be provided, which
@@ -2627,7 +2627,7 @@ var TransitionGroup = /*#__PURE__*/function (_React$Component) {
2627
2627
 
2628
2628
  if (this.mounted) {
2629
2629
  this.setState(function (state) {
2630
- var children = _extends$4({}, state.children);
2630
+ var children = _extends$3({}, state.children);
2631
2631
 
2632
2632
  delete children[child.key];
2633
2633
  return {
@@ -3130,15 +3130,15 @@ function styleInject(css, ref) {
3130
3130
  }
3131
3131
  }
3132
3132
 
3133
- var css_248z$l = ".ycn-drawer__item {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n height: 100%;\n will-change: transform;\n background-color: var(--yc-color-base-background);\n}\n.ycn-drawer__item_direction_right {\n left: auto;\n right: 0;\n}\n.ycn-drawer__item-transition-enter {\n transform: translate(-100%, 0);\n}\n.ycn-drawer__item-transition_direction_right-enter {\n transform: translate(100%, 0);\n}\n.ycn-drawer__item-transition-enter-active, .ycn-drawer__item-transition_direction_right-enter-active {\n transform: translate(0, 0);\n transition: transform 300ms;\n}\n.ycn-drawer__item-transition-enter-done, .ycn-drawer__item-transition_direction_right-enter-done {\n filter: blur(0px);\n transform: translateZ(0);\n}\n.ycn-drawer__item-transition-exit, .ycn-drawer__item-transition_direction_right-exit {\n transform: translate(0, 0);\n}\n.ycn-drawer__item-transition-exit-active, .ycn-drawer__item-transition_direction_right-exit-active {\n transition: transform 300ms;\n}\n.ycn-drawer__item-transition-exit-active {\n transform: translate(-100%, 0);\n}\n.ycn-drawer__item-transition_direction_right-exit-active {\n transform: translate(100%, 0);\n}\n.ycn-drawer__item-transition-exit-done, .ycn-drawer__item-transition_direction_right-exit-done {\n visibility: hidden;\n}\n.ycn-drawer__veil {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n background-color: var(--yc-color-sfx-veil);\n}\n.ycn-drawer__veil-transition-enter {\n opacity: 0;\n}\n.ycn-drawer__veil-transition-enter-active {\n opacity: 1;\n transition: opacity 300ms;\n}\n.ycn-drawer__veil-transition-exit {\n opacity: 1;\n}\n.ycn-drawer__veil-transition-exit-active {\n opacity: 0;\n transition: opacity 300ms;\n}\n.ycn-drawer__veil-transition-exit-done {\n visibility: hidden;\n}";
3134
- styleInject(css_248z$l);
3133
+ var css_248z$m = ".ycn-drawer__item {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n height: 100%;\n will-change: transform;\n background-color: var(--yc-color-base-background);\n}\n.ycn-drawer__item_direction_right {\n left: auto;\n right: 0;\n}\n.ycn-drawer__item-transition-enter {\n transform: translate(-100%, 0);\n}\n.ycn-drawer__item-transition_direction_right-enter {\n transform: translate(100%, 0);\n}\n.ycn-drawer__item-transition-enter-active, .ycn-drawer__item-transition_direction_right-enter-active {\n transform: translate(0, 0);\n transition: transform 300ms;\n}\n.ycn-drawer__item-transition-enter-done, .ycn-drawer__item-transition_direction_right-enter-done {\n filter: blur(0px);\n transform: translateZ(0);\n}\n.ycn-drawer__item-transition-exit, .ycn-drawer__item-transition_direction_right-exit {\n transform: translate(0, 0);\n}\n.ycn-drawer__item-transition-exit-active, .ycn-drawer__item-transition_direction_right-exit-active {\n transition: transform 300ms;\n}\n.ycn-drawer__item-transition-exit-active {\n transform: translate(-100%, 0);\n}\n.ycn-drawer__item-transition_direction_right-exit-active {\n transform: translate(100%, 0);\n}\n.ycn-drawer__item-transition-exit-done, .ycn-drawer__item-transition_direction_right-exit-done {\n visibility: hidden;\n}\n.ycn-drawer__veil {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n background-color: var(--yc-color-sfx-veil);\n}\n.ycn-drawer__veil-transition-enter {\n opacity: 0;\n}\n.ycn-drawer__veil-transition-enter-active {\n opacity: 1;\n transition: opacity 300ms;\n}\n.ycn-drawer__veil-transition-exit {\n opacity: 1;\n}\n.ycn-drawer__veil-transition-exit-active {\n opacity: 0;\n transition: opacity 300ms;\n}\n.ycn-drawer__veil-transition-exit-done {\n visibility: hidden;\n}";
3134
+ styleInject(css_248z$m);
3135
3135
 
3136
- const b$m = block('drawer');
3136
+ const b$n = block('drawer');
3137
3137
  const TIMEOUT = 300;
3138
3138
  const DrawerItem = ({ visible, content, direction, className }) => {
3139
3139
  const itemRef = React__default.useRef(null);
3140
- return (React__default.createElement(CSSTransition, { in: visible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$m('item-transition', { direction }), nodeRef: itemRef },
3141
- React__default.createElement("div", { ref: itemRef, className: b$m('item', { direction }, className) }, content)));
3140
+ return (React__default.createElement(CSSTransition, { in: visible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$n('item-transition', { direction }), nodeRef: itemRef },
3141
+ React__default.createElement("div", { ref: itemRef, className: b$n('item', { direction }, className) }, content)));
3142
3142
  };
3143
3143
  const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScrollBody = true, }) => {
3144
3144
  let someItemVisible = false;
@@ -3169,9 +3169,9 @@ const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScro
3169
3169
  const veilRef = React__default.useRef(null);
3170
3170
  return (React__default.createElement(Transition, { in: someItemVisible, timeout: { enter: 0, exit: TIMEOUT }, mountOnEnter: true, unmountOnExit: true, nodeRef: containerRef }, (state) => {
3171
3171
  const childrenVisible = someItemVisible && state === 'entered';
3172
- return (React__default.createElement("div", { ref: containerRef, className: b$m(null, className), style: style },
3173
- React__default.createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$m('veil-transition'), nodeRef: veilRef },
3174
- React__default.createElement("div", { ref: veilRef, className: b$m('veil'), onClick: onVeilClick })),
3172
+ return (React__default.createElement("div", { ref: containerRef, className: b$n(null, className), style: style },
3173
+ React__default.createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$n('veil-transition'), nodeRef: veilRef },
3174
+ React__default.createElement("div", { ref: veilRef, className: b$n('veil'), onClick: onVeilClick })),
3175
3175
  React__default.Children.map(children, (child) => {
3176
3176
  const childElem = child;
3177
3177
  if (childElem.type === DrawerItem) {
@@ -3183,10 +3183,10 @@ const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScro
3183
3183
  }));
3184
3184
  };
3185
3185
 
3186
- var css_248z$k = ".ycn-logo {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n height: 40px;\n}\n.ycn-logo__logo-btn-place {\n flex-shrink: 0;\n width: var(--aside-header-min-width);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n}\n.ycn-logo__logo-btn-place .yc-button::before {\n background-color: transparent;\n}\n.ycn-logo__btn-logo.yc-button_view_flat.yc-button_size_l {\n --yc-button-height: 38px;\n}\n.ycn-logo__logo {\n font-size: var(--yc-text-body-2-font-size);\n line-height: var(--yc-text-body-2-line-height);\n font-weight: var(--yc-text-body-font-weight);\n vertical-align: middle;\n cursor: pointer;\n}\n.ycn-logo__logo-link, .ycn-logo__logo-link:hover, .ycn-logo__logo-link:active, .ycn-logo__logo-link:visited, .ycn-logo__logo-link:focus {\n text-decoration: none;\n outline: none;\n color: inherit;\n}\n.yc-root .ycn-logo__btn-logo.button2_theme_flat.button2_hovered_yes::before {\n background-color: transparent;\n}";
3187
- styleInject(css_248z$k);
3186
+ var css_248z$l = ".ycn-logo {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n height: 40px;\n}\n.ycn-logo__logo-btn-place {\n flex-shrink: 0;\n width: var(--aside-header-min-width);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n}\n.ycn-logo__logo-btn-place .yc-button::before {\n background-color: transparent;\n}\n.ycn-logo__btn-logo.yc-button_view_flat.yc-button_size_l {\n --yc-button-height: 38px;\n}\n.ycn-logo__logo {\n font-size: var(--yc-text-body-2-font-size);\n line-height: var(--yc-text-body-2-line-height);\n font-weight: var(--yc-text-body-font-weight);\n vertical-align: middle;\n cursor: pointer;\n}\n.ycn-logo__logo-link, .ycn-logo__logo-link:hover, .ycn-logo__logo-link:active, .ycn-logo__logo-link:visited, .ycn-logo__logo-link:focus {\n text-decoration: none;\n outline: none;\n color: inherit;\n}\n.yc-root .ycn-logo__btn-logo.button2_theme_flat.button2_hovered_yes::before {\n background-color: transparent;\n}";
3187
+ styleInject(css_248z$l);
3188
3188
 
3189
- const b$l = block('logo');
3189
+ const b$m = block('logo');
3190
3190
  const Logo$1 = ({ text, compact, icon, iconSrc, iconClassName, iconSize = 24, textSize = 15, href = '/', wrapper, onClick, }) => {
3191
3191
  const hasClickHandler = typeof onClick === 'function';
3192
3192
  const hasWrapper = typeof wrapper === 'function';
@@ -3204,18 +3204,18 @@ const Logo$1 = ({ text, compact, icon, iconSrc, iconClassName, iconSize = 24, te
3204
3204
  else if (icon) {
3205
3205
  buttonIcon = React__default.createElement(Icon, { data: icon, size: iconSize, className: iconClassName });
3206
3206
  }
3207
- const button = (React__default.createElement(Button, Object.assign({ view: "flat", size: "l", className: b$l('btn-logo'), component: hasWrapper ? 'span' : undefined, onClick: onClick }, linkProps), buttonIcon));
3207
+ const button = (React__default.createElement(Button, Object.assign({ view: "flat", size: "l", className: b$m('btn-logo'), component: hasWrapper ? 'span' : undefined, onClick: onClick }, linkProps), buttonIcon));
3208
3208
  let logo;
3209
3209
  if (typeof text === 'function') {
3210
3210
  logo = text();
3211
3211
  }
3212
3212
  else {
3213
- logo = (React__default.createElement("div", { className: b$l('logo'), style: { fontSize: textSize } }, text));
3213
+ logo = (React__default.createElement("div", { className: b$m('logo'), style: { fontSize: textSize } }, text));
3214
3214
  }
3215
- return (React__default.createElement("div", { className: b$l() },
3216
- React__default.createElement("div", { className: b$l('logo-btn-place') }, hasWrapper ? wrapper(button, compact) : button),
3215
+ return (React__default.createElement("div", { className: b$m() },
3216
+ React__default.createElement("div", { className: b$m('logo-btn-place') }, hasWrapper ? wrapper(button, compact) : button),
3217
3217
  !compact &&
3218
- (hasWrapper ? (React__default.createElement("div", { onClick: onClick }, wrapper(logo, compact))) : (React__default.createElement("a", Object.assign({}, linkProps, { className: b$l('logo-link'), onClick: onClick }), logo)))));
3218
+ (hasWrapper ? (React__default.createElement("div", { onClick: onClick }, wrapper(logo, compact))) : (React__default.createElement("a", Object.assign({}, linkProps, { className: b$m('logo-link'), onClick: onClick }), logo)))));
3219
3219
  };
3220
3220
 
3221
3221
  var classCallCheck = function (instance, Constructor) {
@@ -3242,7 +3242,7 @@ var createClass = function () {
3242
3242
  };
3243
3243
  }();
3244
3244
 
3245
- var _extends$3 = Object.assign || function (target) {
3245
+ var _extends$2 = Object.assign || function (target) {
3246
3246
  for (var i = 1; i < arguments.length; i++) {
3247
3247
  var source = arguments[i];
3248
3248
 
@@ -3685,7 +3685,7 @@ var AutoSizer = function (_React$PureComponent) {
3685
3685
  {
3686
3686
  className: className,
3687
3687
  ref: this._setRef,
3688
- style: _extends$3({}, outerStyle, style)
3688
+ style: _extends$2({}, outerStyle, style)
3689
3689
  },
3690
3690
  !bailoutOnChildren && children(childParams)
3691
3691
  );
@@ -3746,17 +3746,66 @@ function getItemsMinHeight(items) {
3746
3746
  getItemsHeight(afterMoreButtonItems) +
3747
3747
  (pinnedItems.length === items.length ? 0 : ITEM_HEIGHT));
3748
3748
  }
3749
+ function getMoreButtonItem(dict) {
3750
+ var _a;
3751
+ const title = (_a = dict === null || dict === void 0 ? void 0 : dict[Dict.MoreButton]) !== null && _a !== void 0 ? _a : defaultDict$2[Dict.MoreButton];
3752
+ return {
3753
+ id: COLLAPSE_ITEM_ID,
3754
+ title,
3755
+ icon: Ellipsis,
3756
+ iconSize: 18,
3757
+ };
3758
+ }
3759
+ function getAutosizeListItems(items, height, collapseItem) {
3760
+ var _a, _b, _c;
3761
+ const afterMoreButtonItems = items.filter((item) => item.afterMoreButton);
3762
+ const regularItems = items.filter((item) => !item.afterMoreButton);
3763
+ const listItems = [...regularItems, ...afterMoreButtonItems];
3764
+ const allItemsHeight = getItemsHeight(listItems);
3765
+ if (allItemsHeight <= height) {
3766
+ return { listItems, collapseItems: [] };
3767
+ }
3768
+ const collapseItemHeight = getItemHeight$1(collapseItem);
3769
+ listItems.splice(regularItems.length, 0, collapseItem);
3770
+ const collapseItems = [];
3771
+ let listHeight = allItemsHeight + collapseItemHeight;
3772
+ let index = listItems.length;
3773
+ while (listHeight > height) {
3774
+ if (index === 0) {
3775
+ break;
3776
+ }
3777
+ index--;
3778
+ const item = listItems[index];
3779
+ if (item.pinned || item.id === COLLAPSE_ITEM_ID || item.afterMoreButton) {
3780
+ continue;
3781
+ }
3782
+ if (item.type === 'divider') {
3783
+ if (index + 1 < listItems.length && ((_a = listItems[index + 1]) === null || _a === void 0 ? void 0 : _a.type) === 'divider') {
3784
+ listHeight -= getItemHeight$1(item);
3785
+ listItems.splice(index, 1);
3786
+ }
3787
+ continue;
3788
+ }
3789
+ listHeight -= getItemHeight$1(item);
3790
+ collapseItems.unshift(...listItems.splice(index, 1));
3791
+ }
3792
+ if (((_b = listItems[index]) === null || _b === void 0 ? void 0 : _b.type) === 'divider' &&
3793
+ (index === 0 || ((_c = listItems[index - 1]) === null || _c === void 0 ? void 0 : _c.type) === 'divider')) {
3794
+ listItems.splice(index, 1);
3795
+ }
3796
+ return { listItems, collapseItems };
3797
+ }
3749
3798
 
3750
- var css_248z$j = ".ycn-composite-bar-item {\n --composite-bar-item-action-size: 36px;\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n cursor: pointer;\n}\n.ycn-composite-bar-item__icon {\n color: var(--yc-color-text-misc);\n}\n.ycn-composite-bar-item__icon-place {\n flex-shrink: 0;\n width: var(--aside-header-min-width);\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n}\n.ycn-composite-bar-item__title {\n display: flex;\n overflow: hidden;\n}\n.ycn-composite-bar-item__title-text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.ycn-composite-bar-item__title-adornment {\n margin: 0 10px;\n}\n.ycn-composite-bar-item__collapse-item {\n display: flex;\n padding: 0 16px;\n align-items: center;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n.ycn-composite-bar-item__collapse-item .ycn-composite-bar-item__title-adornment {\n margin-right: 0;\n}\n.ycn-composite-bar-item__menu-divider {\n margin: 0 8px;\n width: 100%;\n border-top: 1px solid var(--yc-color-line-generic);\n cursor: default;\n}\n.ycn-composite-bar-item__collapse-items-popup-content {\n padding: 4px 0;\n}\n.ycn-composite-bar-item__link {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n}\n.ycn-composite-bar-item__link, .ycn-composite-bar-item__link:hover, .ycn-composite-bar-item__link:active, .ycn-composite-bar-item__link:visited, .ycn-composite-bar-item__link:focus {\n text-decoration: none;\n outline: none;\n color: inherit;\n}\n.ycn-composite-bar-item__btn-icon {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.ycn-composite-bar-item_type_action {\n justify-content: center;\n height: var(--composite-bar-item-action-size);\n margin: 0 10px 8px;\n background: var(--yc-color-base-float);\n box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.03), 0px 5px 6px rgba(0, 0, 0, 0.12);\n border-radius: var(--composite-bar-item-action-size);\n transition: transform 0.1s ease-out, background-color 0.15s linear;\n}\n.ycn-composite-bar-item_type_action:focus {\n box-shadow: 0 0 0 2px var(--yc-color-line-misc);\n}\n.ycn-composite-bar-item_type_action:focus:not(:focus-visible) {\n box-shadow: none;\n}\n.ycn-composite-bar-item_type_action:hover {\n background-color: var(--yc-color-base-float-hover);\n}\n.ycn-composite-bar-item_type_action:active {\n box-shadow: 0 1px 2px var(--yc-color-sfx-shadow);\n transition: none;\n transform: scale(0.96);\n}\n.ycn-composite-bar-item_type_action .ycn-composite-bar-item__icon-place {\n width: var(--composite-bar-item-action-size);\n}\n.ycn-composite-bar-item_type_action .ycn-composite-bar-item__title {\n margin-right: 16px;\n}\n.ycn-composite-bar-item__icon-tooltip_item-type_action {\n margin-left: 10px;\n}\n.ycn-composite-bar-item:not(.ycn-composite-bar-item_compact).ycn-composite-bar-item_current.ycn-composite-bar-item_type_regular {\n background-color: var(--yc-color-base-selection);\n}\n.ycn-composite-bar-item:not(.ycn-composite-bar-item_compact):not(.ycn-composite-bar-item_current):hover.ycn-composite-bar-item_type_regular {\n background-color: var(--yc-color-base-simple-hover);\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_type_action {\n width: var(--composite-bar-item-action-size);\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_type_action .ycn-composite-bar-item__title {\n margin: 0;\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_current.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon {\n position: relative;\n background-color: transparent;\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_current.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: -1;\n width: 38px;\n height: 38px;\n margin-top: -19px;\n margin-left: -19px;\n border-radius: 7px;\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_current.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon::before {\n background-color: var(--yc-color-base-selection);\n}\n.ycn-composite-bar-item_compact:not(.ycn-composite-bar-item_current):hover.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon {\n position: relative;\n background-color: transparent;\n}\n.ycn-composite-bar-item_compact:not(.ycn-composite-bar-item_current):hover.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: -1;\n width: 38px;\n height: 38px;\n margin-top: -19px;\n margin-left: -19px;\n border-radius: 7px;\n}\n.ycn-composite-bar-item_compact:not(.ycn-composite-bar-item_current):hover.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon::before {\n background-color: var(--yc-color-base-simple-hover);\n}";
3751
- styleInject(css_248z$j);
3799
+ var css_248z$k = ".ycn-composite-bar-item {\n --composite-bar-item-action-size: 36px;\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n cursor: pointer;\n}\n.ycn-composite-bar-item__icon {\n color: var(--yc-color-text-misc);\n}\n.ycn-composite-bar-item__icon-place {\n flex-shrink: 0;\n width: var(--aside-header-min-width);\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n}\n.ycn-composite-bar-item__title {\n display: flex;\n overflow: hidden;\n}\n.ycn-composite-bar-item__title-text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.ycn-composite-bar-item__title-adornment {\n margin: 0 10px;\n}\n.ycn-composite-bar-item__collapse-item {\n display: flex;\n padding: 0 16px;\n align-items: center;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n.ycn-composite-bar-item__collapse-item .ycn-composite-bar-item__title-adornment {\n margin-right: 0;\n}\n.ycn-composite-bar-item__menu-divider {\n margin: 0 8px;\n width: 100%;\n border-top: 1px solid var(--yc-color-line-generic);\n cursor: default;\n}\n.ycn-composite-bar-item__collapse-items-popup-content {\n padding: 4px 0;\n}\n.ycn-composite-bar-item__link {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n}\n.ycn-composite-bar-item__link, .ycn-composite-bar-item__link:hover, .ycn-composite-bar-item__link:active, .ycn-composite-bar-item__link:visited, .ycn-composite-bar-item__link:focus {\n text-decoration: none;\n outline: none;\n color: inherit;\n}\n.ycn-composite-bar-item__btn-icon {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.ycn-composite-bar-item_type_action {\n justify-content: center;\n height: var(--composite-bar-item-action-size);\n margin: 0 10px 8px;\n background: var(--yc-color-base-float);\n box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.03), 0px 5px 6px rgba(0, 0, 0, 0.12);\n border-radius: var(--composite-bar-item-action-size);\n transition: transform 0.1s ease-out, background-color 0.15s linear;\n}\n.ycn-composite-bar-item_type_action:focus {\n box-shadow: 0 0 0 2px var(--yc-color-line-misc);\n}\n.ycn-composite-bar-item_type_action:focus:not(:focus-visible) {\n box-shadow: none;\n}\n.ycn-composite-bar-item_type_action:hover {\n background-color: var(--yc-color-base-float-hover);\n}\n.ycn-composite-bar-item_type_action:active {\n box-shadow: 0 1px 2px var(--yc-color-sfx-shadow);\n transition: none;\n transform: scale(0.96);\n}\n.ycn-composite-bar-item_type_action .ycn-composite-bar-item__icon-place {\n width: var(--composite-bar-item-action-size);\n}\n.ycn-composite-bar-item_type_action .ycn-composite-bar-item__title {\n margin-right: 16px;\n}\n.ycn-composite-bar-item__icon-tooltip_item-type_action {\n margin-left: 10px;\n}\n.ycn-composite-bar-item:not(.ycn-composite-bar-item_compact).ycn-composite-bar-item_current.ycn-composite-bar-item_type_regular {\n background-color: var(--yc-color-base-selection);\n}\n.ycn-composite-bar-item:not(.ycn-composite-bar-item_compact):not(.ycn-composite-bar-item_current):hover.ycn-composite-bar-item_type_regular {\n background-color: var(--yc-color-base-simple-hover);\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_type_action {\n width: var(--composite-bar-item-action-size);\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_type_action .ycn-composite-bar-item__title {\n margin: 0;\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_current.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon {\n position: relative;\n background-color: transparent;\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_current.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: -1;\n width: 38px;\n height: 38px;\n margin-top: -19px;\n margin-left: -19px;\n border-radius: 7px;\n}\n.ycn-composite-bar-item_compact.ycn-composite-bar-item_current.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon::before {\n background-color: var(--yc-color-base-selection);\n}\n.ycn-composite-bar-item_compact:not(.ycn-composite-bar-item_current):hover.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon {\n position: relative;\n background-color: transparent;\n}\n.ycn-composite-bar-item_compact:not(.ycn-composite-bar-item_current):hover.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: -1;\n width: 38px;\n height: 38px;\n margin-top: -19px;\n margin-left: -19px;\n border-radius: 7px;\n}\n.ycn-composite-bar-item_compact:not(.ycn-composite-bar-item_current):hover.ycn-composite-bar-item_type_regular .ycn-composite-bar-item__btn-icon::before {\n background-color: var(--yc-color-base-simple-hover);\n}";
3800
+ styleInject(css_248z$k);
3752
3801
 
3753
- const b$k = block('composite-bar-item');
3802
+ const b$l = block('composite-bar-item');
3754
3803
  function renderItemTitle(item) {
3755
- let titleNode = React__default.createElement("div", { className: b$k('title-text') }, item.title);
3804
+ let titleNode = React__default.createElement("div", { className: b$l('title-text') }, item.title);
3756
3805
  if (item.rightAdornment) {
3757
3806
  titleNode = (React__default.createElement(React__default.Fragment, null,
3758
3807
  titleNode,
3759
- React__default.createElement("div", { className: b$k('title-adornment') }, item.rightAdornment)));
3808
+ React__default.createElement("div", { className: b$l('title-adornment') }, item.rightAdornment)));
3760
3809
  }
3761
3810
  return titleNode;
3762
3811
  }
@@ -3765,7 +3814,7 @@ const defaultPopupOffset = [-20, 8];
3765
3814
  const Item$1 = (props) => {
3766
3815
  const { item, compact, className, collapseItems, onMouseLeave, onMouseEnter, enableTooltip = true, popupVisible = false, popupAnchor, popupPlacement = defaultPopupPlacement, popupOffset = defaultPopupOffset, popupKeepMounted, renderPopupContent, onClosePopup, onItemClick, } = props;
3767
3816
  if (item.type === 'divider') {
3768
- return React__default.createElement("div", { className: b$k('menu-divider') });
3817
+ return React__default.createElement("div", { className: b$l('menu-divider') });
3769
3818
  }
3770
3819
  const [open, toggleOpen] = React__default.useState(false);
3771
3820
  const ref = React__default.useRef(null);
@@ -3786,7 +3835,7 @@ const Item$1 = (props) => {
3786
3835
  onClosePopup === null || onClosePopup === void 0 ? void 0 : onClosePopup();
3787
3836
  }, [onClosePopup]);
3788
3837
  const makeNode = ({ icon: iconEl, title: titleEl }) => {
3789
- const createdNode = (React__default.createElement("div", { className: b$k({ type, current, compact }, className), ref: ref, onClick: () => {
3838
+ const createdNode = (React__default.createElement("div", { className: b$l({ type, current, compact }, className), ref: ref, onClick: (event) => {
3790
3839
  if (collapsedItem) {
3791
3840
  /**
3792
3841
  * If we call onItemClick for collapsedItem then:
@@ -3796,7 +3845,7 @@ const Item$1 = (props) => {
3796
3845
  toggleOpen(!open);
3797
3846
  }
3798
3847
  else {
3799
- onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, false);
3848
+ onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, false, event);
3800
3849
  }
3801
3850
  }, onMouseEnter: () => {
3802
3851
  if (!compact) {
@@ -3807,13 +3856,13 @@ const Item$1 = (props) => {
3807
3856
  onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave();
3808
3857
  }
3809
3858
  } },
3810
- React__default.createElement("div", { className: b$k('icon-place') }, compact ? (React__default.createElement(Tooltip, { content: tooltipText, disabled: !enableTooltip || (collapsedItem && open), placement: "right", className: b$k('icon-tooltip', { 'item-type': type }) },
3811
- React__default.createElement("div", { onMouseEnter: () => onMouseEnter === null || onMouseEnter === void 0 ? void 0 : onMouseEnter(), onMouseLeave: () => onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave(), className: b$k('btn-icon') }, iconEl))) : (iconEl)),
3812
- React__default.createElement("div", { className: b$k('title'), title: typeof item.title === 'string' ? item.title : undefined }, titleEl),
3813
- renderPopupContent && Boolean(anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) && (React__default.createElement(Popup, { className: b$k('popup'), open: popupVisible, keepMounted: popupKeepMounted, placement: popupPlacement, offset: popupOffset, anchorRef: anchorRef, onClose: onClose }, renderPopupContent()))));
3814
- return item.link ? (React__default.createElement("a", { href: item.link, className: b$k('link') }, createdNode)) : (createdNode);
3859
+ React__default.createElement("div", { className: b$l('icon-place') }, compact ? (React__default.createElement(Tooltip, { content: tooltipText, disabled: !enableTooltip || (collapsedItem && open), placement: "right", className: b$l('icon-tooltip', { 'item-type': type }) },
3860
+ React__default.createElement("div", { onMouseEnter: () => onMouseEnter === null || onMouseEnter === void 0 ? void 0 : onMouseEnter(), onMouseLeave: () => onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave(), className: b$l('btn-icon') }, iconEl))) : (iconEl)),
3861
+ React__default.createElement("div", { className: b$l('title'), title: typeof item.title === 'string' ? item.title : undefined }, titleEl),
3862
+ renderPopupContent && Boolean(anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) && (React__default.createElement(Popup, { className: b$l('popup'), open: popupVisible, keepMounted: popupKeepMounted, placement: popupPlacement, offset: popupOffset, anchorRef: anchorRef, onClose: onClose }, renderPopupContent()))));
3863
+ return item.link ? (React__default.createElement("a", { href: item.link, className: b$l('link') }, createdNode)) : (createdNode);
3815
3864
  };
3816
- const iconNode = icon ? React__default.createElement(Icon, { data: icon, size: iconSize, className: b$k('icon') }) : null;
3865
+ const iconNode = icon ? React__default.createElement(Icon, { data: icon, size: iconSize, className: b$l('icon') }) : null;
3817
3866
  const titleNode = renderItemTitle(item);
3818
3867
  const params = { icon: iconNode, title: titleNode };
3819
3868
  let node;
@@ -3831,13 +3880,13 @@ const Item$1 = (props) => {
3831
3880
  Item$1.displayName = 'Item';
3832
3881
  function CollapsedPopup({ compact, onItemClick, collapseItems, anchorRef, onClose, }) {
3833
3882
  return (collapseItems === null || collapseItems === void 0 ? void 0 : collapseItems.length) ? (React__default.createElement(Popup, { placement: POPUP_PLACEMENT, open: true, anchorRef: anchorRef, onClose: onClose },
3834
- React__default.createElement("div", { className: b$k('collapse-items-popup-content') },
3835
- React__default.createElement(List, { itemClassName: b$k('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, renderItem: (collapseItem) => {
3883
+ React__default.createElement("div", { className: b$l('collapse-items-popup-content') },
3884
+ React__default.createElement(List, { itemClassName: b$l('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, renderItem: (collapseItem) => {
3836
3885
  const makeCollapseNode = ({ title: titleEl }) => {
3837
- const res = (React__default.createElement("div", { className: b$k('collapse-item'), onClick: () => {
3838
- onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(collapseItem, true);
3886
+ const res = (React__default.createElement("div", { className: b$l('collapse-item'), onClick: (event) => {
3887
+ onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(collapseItem, true, event);
3839
3888
  } }, titleEl));
3840
- return collapseItem.link ? (React__default.createElement("a", { href: collapseItem.link, className: b$k('link') }, res)) : (res);
3889
+ return collapseItem.link ? (React__default.createElement("a", { href: collapseItem.link, className: b$l('link') }, res)) : (res);
3841
3890
  };
3842
3891
  const titleNode = renderItemTitle(collapseItem);
3843
3892
  const params = { title: titleNode };
@@ -3851,123 +3900,149 @@ function CollapsedPopup({ compact, onItemClick, collapseItems, anchorRef, onClos
3851
3900
  } })))) : null;
3852
3901
  }
3853
3902
 
3854
- var _path$2;
3855
- function _extends$2() { _extends$2 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$2.apply(this, arguments); }
3856
- var SvgDots = function SvgDots(props) {
3857
- return /*#__PURE__*/React.createElement("svg", _extends$2({
3858
- xmlns: "http://www.w3.org/2000/svg",
3859
- viewBox: "0 0 16 16",
3860
- width: 16,
3861
- height: 16
3862
- }, props), _path$2 || (_path$2 = /*#__PURE__*/React.createElement("path", {
3863
- d: "M14 6.125a1.874 1.874 0 1 1 .001 3.749A1.874 1.874 0 0 1 14 6.125zm-5.906 0a1.874 1.874 0 1 1 0 3.749 1.874 1.874 0 0 1 0-3.749zM2 6.125a1.874 1.874 0 1 1 .001 3.749A1.874 1.874 0 0 1 2 6.125z",
3864
- fill: "currentColor",
3865
- fillRule: "evenodd"
3866
- })));
3867
- };
3868
- var dotsIcon = SvgDots;
3869
-
3870
- var css_248z$i = ".ycn-composite-bar {\n flex: 1 0 auto;\n width: 100%;\n min-height: 40px;\n}\n.ycn-composite-bar .ycn-composite-bar__root-menu-item[class] {\n background-color: transparent;\n}";
3871
- styleInject(css_248z$i);
3903
+ var css_248z$j = ".ycn-composite-bar {\n flex: 1 0 auto;\n width: 100%;\n min-height: 40px;\n}\n.ycn-composite-bar .ycn-composite-bar__root-menu-item[class] {\n background-color: transparent;\n}";
3904
+ styleInject(css_248z$j);
3872
3905
 
3873
- const b$j = block('composite-bar');
3874
- class CompositeBar extends React__default.Component {
3906
+ const multipleTooltipContextDefaults = {
3907
+ active: false,
3908
+ activeIndex: undefined,
3909
+ hideCollapseItemTooltip: false,
3910
+ lastClickedItemIndex: undefined,
3911
+ setValue: () => { },
3912
+ };
3913
+ const MultipleTooltipContext = React__default.createContext(multipleTooltipContextDefaults);
3914
+ class MultipleTooltipProvider extends React__default.PureComponent {
3875
3915
  constructor() {
3876
3916
  super(...arguments);
3877
- this.state = {
3878
- activeItemIndex: undefined,
3917
+ this.state = Object.assign({}, multipleTooltipContextDefaults);
3918
+ this.setValue = (value) => {
3919
+ this.setState(Object.assign({}, value));
3879
3920
  };
3880
- this.listRef = React__default.createRef();
3881
3921
  }
3882
3922
  render() {
3883
- const { enableCollapsing, items } = this.props;
3884
- if (items.length === 0) {
3885
- return null;
3886
- }
3887
- if (!enableCollapsing) {
3888
- return React__default.createElement("div", { className: b$j() }, this.renderMenu());
3889
- }
3890
- const minHeight = getItemsMinHeight(items);
3891
- return (React__default.createElement("div", { className: b$j({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React__default.createElement(AutoSizer, null, ({ width, height }) => {
3892
- const style = {
3893
- width,
3894
- height,
3895
- };
3896
- return React__default.createElement("div", { style: style }, this.renderAutosizeMenu(height));
3897
- }))));
3898
- }
3899
- renderAutosizeMenu(height) {
3900
- const { compact, onItemClick } = this.props;
3901
- const { listItems, collapseItems } = this.getAutosizeListItems(height);
3902
- return (React__default.createElement(List, { ref: this.listRef, items: listItems, selectedItemIndex: getSelectedItemIndex$1(listItems), itemHeight: getItemHeight$1, itemClassName: b$j('root-menu-item'), itemsHeight: getItemsHeight, virtualized: false, filterable: false, sortable: false, renderItem: (item) => (React__default.createElement(Item$1, { item: item, onMouseLeave: () => {
3903
- var _a;
3904
- if (compact) {
3905
- (_a = this.listRef.current) === null || _a === void 0 ? void 0 : _a.activateItem(undefined);
3906
- }
3907
- }, compact: compact, collapseItems: collapseItems, onItemClick: onItemClick })) }));
3923
+ const { children } = this.props;
3924
+ return (React__default.createElement(MultipleTooltipContext.Provider, { value: Object.assign(Object.assign({}, this.state), { setValue: this.setValue }) }, children));
3908
3925
  }
3909
- renderMenu() {
3910
- const { items, onItemClick, compact } = this.props;
3911
- return (React__default.createElement(List, { ref: this.listRef, items: items, selectedItemIndex: getSelectedItemIndex$1(items), itemHeight: getItemHeight$1, itemClassName: b$j('root-menu-item'), itemsHeight: getItemsHeight, virtualized: false, filterable: false, sortable: false, renderItem: (item) => (React__default.createElement(Item$1, { item: item, onMouseLeave: () => {
3912
- var _a;
3913
- if (compact) {
3914
- (_a = this.listRef.current) === null || _a === void 0 ? void 0 : _a.activateItem(undefined);
3915
- }
3916
- }, compact: compact, onItemClick: onItemClick })) }));
3917
- }
3918
- getMoreButtonItem() {
3919
- var _a;
3920
- const { dict } = this.props;
3921
- const title = (_a = dict === null || dict === void 0 ? void 0 : dict[Dict.MoreButton]) !== null && _a !== void 0 ? _a : defaultDict$2[Dict.MoreButton];
3922
- return {
3923
- id: COLLAPSE_ITEM_ID,
3924
- title,
3925
- icon: dotsIcon,
3926
- iconSize: 16,
3927
- };
3928
- }
3929
- getAutosizeListItems(height) {
3930
- var _a, _b, _c;
3931
- const { items } = this.props;
3932
- const afterMoreButtonItems = items.filter((item) => item.afterMoreButton);
3933
- const regularItems = items.filter((item) => !item.afterMoreButton);
3934
- const listItems = [...regularItems, ...afterMoreButtonItems];
3935
- const allItemsHeight = getItemsHeight(listItems);
3936
- if (allItemsHeight <= height) {
3937
- return { listItems, collapseItems: [] };
3926
+ }
3927
+
3928
+ var css_248z$i = ".yc-root_theme_dark .ycn-multiple-tooltip,\n.yc-root_theme_dark-hc .ycn-multiple-tooltip {\n --multiple-tooltip-item-bg-color: #424147;\n --multiple-tooltip-item-active-bg-color: var(--yc-color-base-float-heavy);\n --multiple-tooltip-backdrop-background: linear-gradient(\n 90deg,\n #313036 0%,\n rgba(49, 48, 54, 0.3) 100%\n );\n --multiple-tooltip-backdrop-filter: blur(16px);\n}\n\n.yc-root_theme_light .ycn-multiple-tooltip,\n.yc-root_theme_light-hc .ycn-multiple-tooltip {\n --multiple-tooltip-item-bg-color: #7a7a7a;\n --multiple-tooltip-item-active-bg-color: var(--yc-color-base-float-heavy);\n --multiple-tooltip-backdrop-background: linear-gradient(\n 90deg,\n #ffffff 0%,\n rgba(255, 255, 255, 0.3) 100%\n );\n --multiple-tooltip-backdrop-filter: blur(12px);\n}\n\n.ycn-multiple-tooltip {\n background-color: transparent;\n box-shadow: none;\n}\n.ycn-multiple-tooltip::before {\n content: \"\";\n box-shadow: none;\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: -1;\n background: var(--multiple-tooltip-backdrop-background);\n filter: var(--multiple-tooltip-backdrop-filter);\n}\n.ycn-multiple-tooltip__items-container {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n padding: 32px 40px 32px 12px;\n}\n.ycn-multiple-tooltip__item {\n display: flex;\n box-sizing: border-box;\n height: 30px;\n padding: 8px 12px;\n background-color: var(--multiple-tooltip-item-bg-color);\n position: relative;\n border-radius: 5px;\n align-items: center;\n color: var(--yc-color-text-light-primary);\n margin-bottom: 5px;\n transition: transform 100ms ease-in-out;\n}\n.ycn-multiple-tooltip__item:not(.ycn-multiple-tooltip__item_divider) + .ycn-multiple-tooltip__item:not(.ycn-multiple-tooltip__item_divider), .ycn-multiple-tooltip__item:first-child {\n margin-top: 5px;\n}\n.ycn-multiple-tooltip__item_divider + .ycn-multiple-tooltip__item:not(.ycn-multiple-tooltip__item_divider) {\n margin-top: 4px;\n}\n.ycn-multiple-tooltip__item_active {\n background-color: var(--multiple-tooltip-item-active-bg-color);\n transform: translateX(-12px);\n}\n.ycn-multiple-tooltip__item_divider {\n height: 15px;\n visibility: hidden;\n margin: 0;\n}";
3929
+ styleInject(css_248z$i);
3930
+
3931
+ const b$k = block('multiple-tooltip');
3932
+ const POPUP_OFFSET = [-32, 4];
3933
+ const POPUP_MODIFIERS = [
3934
+ {
3935
+ name: 'preventOverflow',
3936
+ enabled: false,
3937
+ },
3938
+ ];
3939
+ const MultipleTooltip = ({ items, open, anchorRef, placement, }) => {
3940
+ const { activeIndex, hideCollapseItemTooltip } = React__default.useContext(MultipleTooltipContext);
3941
+ const activeItem = activeIndex === undefined ? null : items[activeIndex];
3942
+ return (React__default.createElement(Popup, { open: open, anchorRef: anchorRef, placement: placement, offset: POPUP_OFFSET, className: b$k(null), modifiers: POPUP_MODIFIERS },
3943
+ React__default.createElement("div", { className: b$k('items-container') }, items
3944
+ .filter(({ type = 'regular', id }) => !hideCollapseItemTooltip ||
3945
+ (id !== COLLAPSE_ITEM_ID && type !== 'action'))
3946
+ .map((item, idx) => {
3947
+ switch (item.type) {
3948
+ case 'divider':
3949
+ return (React__default.createElement("div", { className: b$k('item', { divider: true }), key: idx }, item.title));
3950
+ default:
3951
+ return (React__default.createElement("div", { className: b$k('item', {
3952
+ active: item === activeItem,
3953
+ }), key: idx }, item.title));
3954
+ }
3955
+ }))));
3956
+ };
3957
+
3958
+ const b$j = block('composite-bar');
3959
+ const CompositeBarView = ({ items, compact, onItemClick, collapseItems, multipleTooltip = true, }) => {
3960
+ const ref = useRef(null);
3961
+ const tooltipRef = useRef(null);
3962
+ const { setValue: setMultipleTooltipContextValue, active: multipleTooltipActive, activeIndex, lastClickedItemIndex, } = useContext(MultipleTooltipContext);
3963
+ const onTooltipMouseEnter = useCallback((e) => {
3964
+ if (!multipleTooltipActive &&
3965
+ activeIndex !== lastClickedItemIndex &&
3966
+ e.clientX <= ASIDE_HEADER_COMPACT_WIDTH) {
3967
+ setMultipleTooltipContextValue === null || setMultipleTooltipContextValue === void 0 ? void 0 : setMultipleTooltipContextValue({
3968
+ active: true,
3969
+ });
3938
3970
  }
3939
- const collapseItem = this.getMoreButtonItem();
3940
- const collapseItemHeight = getItemHeight$1(collapseItem);
3941
- listItems.splice(regularItems.length, 0, collapseItem);
3942
- const collapseItems = [];
3943
- let listHeight = allItemsHeight + collapseItemHeight;
3944
- let index = listItems.length;
3945
- while (listHeight > height) {
3946
- if (index === 0) {
3947
- break;
3971
+ }, [multipleTooltipActive, activeIndex, lastClickedItemIndex, setMultipleTooltipContextValue]);
3972
+ const onTooltipMouseLeave = useCallback(() => {
3973
+ if (multipleTooltipActive) {
3974
+ setMultipleTooltipContextValue === null || setMultipleTooltipContextValue === void 0 ? void 0 : setMultipleTooltipContextValue({
3975
+ active: false,
3976
+ lastClickedItemIndex: undefined,
3977
+ });
3978
+ }
3979
+ }, [multipleTooltipActive, setMultipleTooltipContextValue]);
3980
+ const onMouseEnterByIndex = useCallback((itemIndex) => () => {
3981
+ if (multipleTooltip) {
3982
+ let multipleTooltipActiveValue = multipleTooltipActive;
3983
+ if (!multipleTooltipActive && itemIndex !== lastClickedItemIndex) {
3984
+ multipleTooltipActiveValue = true;
3948
3985
  }
3949
- index--;
3950
- const item = listItems[index];
3951
- if (item.pinned || item.id === COLLAPSE_ITEM_ID || item.afterMoreButton) {
3952
- continue;
3986
+ if (activeIndex === itemIndex &&
3987
+ multipleTooltipActive === multipleTooltipActiveValue) {
3988
+ return;
3953
3989
  }
3954
- if (item.type === 'divider') {
3955
- if (index + 1 < listItems.length && ((_a = listItems[index + 1]) === null || _a === void 0 ? void 0 : _a.type) === 'divider') {
3956
- listHeight -= getItemHeight$1(item);
3957
- listItems.splice(index, 1);
3958
- }
3959
- continue;
3990
+ setMultipleTooltipContextValue({
3991
+ activeIndex: itemIndex,
3992
+ active: multipleTooltipActiveValue,
3993
+ });
3994
+ }
3995
+ }, [multipleTooltipActive, activeIndex, lastClickedItemIndex, setMultipleTooltipContextValue]);
3996
+ const onMouseLeave = useCallback(() => {
3997
+ var _a;
3998
+ if (compact) {
3999
+ (_a = ref.current) === null || _a === void 0 ? void 0 : _a.activateItem(undefined);
4000
+ if (multipleTooltip &&
4001
+ (activeIndex !== undefined || lastClickedItemIndex !== undefined)) {
4002
+ setMultipleTooltipContextValue({
4003
+ activeIndex: undefined,
4004
+ lastClickedItemIndex: undefined,
4005
+ });
3960
4006
  }
3961
- listHeight -= getItemHeight$1(item);
3962
- collapseItems.unshift(...listItems.splice(index, 1));
3963
4007
  }
3964
- if (((_b = listItems[index]) === null || _b === void 0 ? void 0 : _b.type) === 'divider' &&
3965
- (index === 0 || ((_c = listItems[index - 1]) === null || _c === void 0 ? void 0 : _c.type) === 'divider')) {
3966
- listItems.splice(index, 1);
4008
+ }, [activeIndex, lastClickedItemIndex, setMultipleTooltipContextValue]);
4009
+ const onItemClickByIndex = useCallback((itemIndex) => (item, collapsed) => {
4010
+ if (compact &&
4011
+ multipleTooltip &&
4012
+ itemIndex !== lastClickedItemIndex &&
4013
+ item.id !== COLLAPSE_ITEM_ID) {
4014
+ setMultipleTooltipContextValue({
4015
+ lastClickedItemIndex: itemIndex,
4016
+ active: false,
4017
+ });
3967
4018
  }
3968
- return { listItems, collapseItems };
4019
+ onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, collapsed);
4020
+ }, [lastClickedItemIndex, setMultipleTooltipContextValue]);
4021
+ return (React__default.createElement(React__default.Fragment, null,
4022
+ React__default.createElement("div", { ref: tooltipRef, onMouseEnter: onTooltipMouseEnter, onMouseLeave: onTooltipMouseLeave },
4023
+ React__default.createElement(List, { ref: ref, items: items, selectedItemIndex: getSelectedItemIndex$1(items), itemHeight: getItemHeight$1, itemClassName: b$j('root-menu-item'), itemsHeight: getItemsHeight, virtualized: false, filterable: false, sortable: false, renderItem: (item, _isItemActive, itemIndex) => (React__default.createElement(Item$1, { item: item, onMouseEnter: onMouseEnterByIndex(itemIndex), onMouseLeave: onMouseLeave, onItemClick: onItemClickByIndex(itemIndex), compact: compact, collapseItems: collapseItems, enableTooltip: !multipleTooltip })) })),
4024
+ React__default.createElement(MultipleTooltip, { open: compact && multipleTooltip && multipleTooltipActive, anchorRef: tooltipRef, placement: ['right-start'], items: items })));
4025
+ };
4026
+ const CompositeBar = ({ items, compact, enableCollapsing, dict, onItemClick, multipleTooltip = false, }) => {
4027
+ if (items.length === 0) {
4028
+ return null;
3969
4029
  }
3970
- }
4030
+ let node = null;
4031
+ if (enableCollapsing) {
4032
+ const minHeight = getItemsMinHeight(items);
4033
+ const collapseItem = getMoreButtonItem(dict);
4034
+ node = (React__default.createElement("div", { className: b$j({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React__default.createElement(AutoSizer, null, ({ width, height }) => {
4035
+ const { listItems, collapseItems } = getAutosizeListItems(items, height, collapseItem);
4036
+ return (React__default.createElement("div", { style: { width, height } },
4037
+ React__default.createElement(CompositeBarView, { items: listItems, compact: compact, onItemClick: onItemClick, collapseItems: collapseItems, multipleTooltip: multipleTooltip })));
4038
+ }))));
4039
+ }
4040
+ else {
4041
+ node = (React__default.createElement("div", { className: b$j() },
4042
+ React__default.createElement(CompositeBarView, { items: items, compact: compact, onItemClick: onItemClick, multipleTooltip: multipleTooltip })));
4043
+ }
4044
+ return React__default.createElement(MultipleTooltipProvider, null, node);
4045
+ };
3971
4046
 
3972
4047
  /* Used by renderContent AsideHeader prop */
3973
4048
  const RenderContent = React__default.memo(({ renderContent, size }) => {
@@ -4017,13 +4092,13 @@ class AsideHeader extends React__default.Component {
4017
4092
  super(...arguments);
4018
4093
  this.asideRef = React__default.createRef();
4019
4094
  this.renderFirstPane = (size) => {
4020
- const { dict, menuItems, panelItems, compact, headerDecoration } = this.props;
4095
+ const { dict, menuItems, panelItems, compact, headerDecoration, multipleTooltip } = this.props;
4021
4096
  return (React__default.createElement(React__default.Fragment, null,
4022
4097
  React__default.createElement("div", { className: b$i('aside'), style: { width: size } },
4023
4098
  React__default.createElement("div", { className: b$i('aside-popup-anchor'), ref: this.asideRef }),
4024
4099
  React__default.createElement("div", { className: b$i('aside-content', { ['with-decoration']: headerDecoration }) },
4025
4100
  this.renderHeader(),
4026
- (menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React__default.createElement(CompositeBar, { items: menuItems, compact: compact, enableCollapsing: true, dict: dict, onItemClick: this.onItemClick })) : (React__default.createElement("div", { className: b$i('menu-items') })),
4101
+ (menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React__default.createElement(CompositeBar, { items: menuItems, compact: compact, enableCollapsing: true, dict: dict, onItemClick: this.onItemClick, multipleTooltip: multipleTooltip })) : (React__default.createElement("div", { className: b$i('menu-items') })),
4027
4102
  this.renderFooter(size),
4028
4103
  this.renderCollapseButton())),
4029
4104
  panelItems && this.renderPanels(size)));