@gravity-ui/navigation 0.9.0 → 0.10.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 (24) hide show
  1. package/CHANGELOG.md +9 -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
@@ -111,8 +111,8 @@ const defaultDict$2 = {
111
111
  [exports.MobileHeaderDict.OpenBurger]: 'Open menu',
112
112
  };
113
113
 
114
- function _extends$4() {
115
- _extends$4 = Object.assign ? Object.assign.bind() : function (target) {
114
+ function _extends$3() {
115
+ _extends$3 = Object.assign ? Object.assign.bind() : function (target) {
116
116
  for (var i = 1; i < arguments.length; i++) {
117
117
  var source = arguments[i];
118
118
  for (var key in source) {
@@ -123,7 +123,7 @@ function _extends$4() {
123
123
  }
124
124
  return target;
125
125
  };
126
- return _extends$4.apply(this, arguments);
126
+ return _extends$3.apply(this, arguments);
127
127
  }
128
128
 
129
129
  function _objectWithoutPropertiesLoose(source, excluded) {
@@ -2276,7 +2276,7 @@ var CSSTransition = /*#__PURE__*/function (_React$Component) {
2276
2276
  _this$props.classNames;
2277
2277
  var props = _objectWithoutPropertiesLoose(_this$props, ["classNames"]);
2278
2278
 
2279
- return /*#__PURE__*/React__default["default"].createElement(Transition, _extends$4({}, props, {
2279
+ return /*#__PURE__*/React__default["default"].createElement(Transition, _extends$3({}, props, {
2280
2280
  onEnter: this.onEnter,
2281
2281
  onEntered: this.onEntered,
2282
2282
  onEntering: this.onEntering,
@@ -2292,7 +2292,7 @@ var CSSTransition = /*#__PURE__*/function (_React$Component) {
2292
2292
  CSSTransition.defaultProps = {
2293
2293
  classNames: ''
2294
2294
  };
2295
- CSSTransition.propTypes = process.env.NODE_ENV !== "production" ? _extends$4({}, Transition.propTypes, {
2295
+ CSSTransition.propTypes = process.env.NODE_ENV !== "production" ? _extends$3({}, Transition.propTypes, {
2296
2296
  /**
2297
2297
  * The animation classNames applied to the component as it appears, enters,
2298
2298
  * exits or has finished the transition. A single name can be provided, which
@@ -2654,7 +2654,7 @@ var TransitionGroup = /*#__PURE__*/function (_React$Component) {
2654
2654
 
2655
2655
  if (this.mounted) {
2656
2656
  this.setState(function (state) {
2657
- var children = _extends$4({}, state.children);
2657
+ var children = _extends$3({}, state.children);
2658
2658
 
2659
2659
  delete children[child.key];
2660
2660
  return {
@@ -3157,15 +3157,15 @@ function styleInject(css, ref) {
3157
3157
  }
3158
3158
  }
3159
3159
 
3160
- 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}";
3161
- styleInject(css_248z$l);
3160
+ 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}";
3161
+ styleInject(css_248z$m);
3162
3162
 
3163
- const b$m = block('drawer');
3163
+ const b$n = block('drawer');
3164
3164
  const TIMEOUT = 300;
3165
3165
  const DrawerItem = ({ visible, content, direction, className }) => {
3166
3166
  const itemRef = React__default["default"].useRef(null);
3167
- return (React__default["default"].createElement(CSSTransition, { in: visible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$m('item-transition', { direction }), nodeRef: itemRef },
3168
- React__default["default"].createElement("div", { ref: itemRef, className: b$m('item', { direction }, className) }, content)));
3167
+ return (React__default["default"].createElement(CSSTransition, { in: visible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$n('item-transition', { direction }), nodeRef: itemRef },
3168
+ React__default["default"].createElement("div", { ref: itemRef, className: b$n('item', { direction }, className) }, content)));
3169
3169
  };
3170
3170
  const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScrollBody = true, }) => {
3171
3171
  let someItemVisible = false;
@@ -3196,9 +3196,9 @@ const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScro
3196
3196
  const veilRef = React__default["default"].useRef(null);
3197
3197
  return (React__default["default"].createElement(Transition, { in: someItemVisible, timeout: { enter: 0, exit: TIMEOUT }, mountOnEnter: true, unmountOnExit: true, nodeRef: containerRef }, (state) => {
3198
3198
  const childrenVisible = someItemVisible && state === 'entered';
3199
- return (React__default["default"].createElement("div", { ref: containerRef, className: b$m(null, className), style: style },
3200
- React__default["default"].createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$m('veil-transition'), nodeRef: veilRef },
3201
- React__default["default"].createElement("div", { ref: veilRef, className: b$m('veil'), onClick: onVeilClick })),
3199
+ return (React__default["default"].createElement("div", { ref: containerRef, className: b$n(null, className), style: style },
3200
+ React__default["default"].createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$n('veil-transition'), nodeRef: veilRef },
3201
+ React__default["default"].createElement("div", { ref: veilRef, className: b$n('veil'), onClick: onVeilClick })),
3202
3202
  React__default["default"].Children.map(children, (child) => {
3203
3203
  const childElem = child;
3204
3204
  if (childElem.type === DrawerItem) {
@@ -3210,10 +3210,10 @@ const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScro
3210
3210
  }));
3211
3211
  };
3212
3212
 
3213
- 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}";
3214
- styleInject(css_248z$k);
3213
+ 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}";
3214
+ styleInject(css_248z$l);
3215
3215
 
3216
- const b$l = block('logo');
3216
+ const b$m = block('logo');
3217
3217
  const Logo$1 = ({ text, compact, icon, iconSrc, iconClassName, iconSize = 24, textSize = 15, href = '/', wrapper, onClick, }) => {
3218
3218
  const hasClickHandler = typeof onClick === 'function';
3219
3219
  const hasWrapper = typeof wrapper === 'function';
@@ -3231,18 +3231,18 @@ const Logo$1 = ({ text, compact, icon, iconSrc, iconClassName, iconSize = 24, te
3231
3231
  else if (icon) {
3232
3232
  buttonIcon = React__default["default"].createElement(uikit.Icon, { data: icon, size: iconSize, className: iconClassName });
3233
3233
  }
3234
- const button = (React__default["default"].createElement(uikit.Button, Object.assign({ view: "flat", size: "l", className: b$l('btn-logo'), component: hasWrapper ? 'span' : undefined, onClick: onClick }, linkProps), buttonIcon));
3234
+ const button = (React__default["default"].createElement(uikit.Button, Object.assign({ view: "flat", size: "l", className: b$m('btn-logo'), component: hasWrapper ? 'span' : undefined, onClick: onClick }, linkProps), buttonIcon));
3235
3235
  let logo;
3236
3236
  if (typeof text === 'function') {
3237
3237
  logo = text();
3238
3238
  }
3239
3239
  else {
3240
- logo = (React__default["default"].createElement("div", { className: b$l('logo'), style: { fontSize: textSize } }, text));
3240
+ logo = (React__default["default"].createElement("div", { className: b$m('logo'), style: { fontSize: textSize } }, text));
3241
3241
  }
3242
- return (React__default["default"].createElement("div", { className: b$l() },
3243
- React__default["default"].createElement("div", { className: b$l('logo-btn-place') }, hasWrapper ? wrapper(button, compact) : button),
3242
+ return (React__default["default"].createElement("div", { className: b$m() },
3243
+ React__default["default"].createElement("div", { className: b$m('logo-btn-place') }, hasWrapper ? wrapper(button, compact) : button),
3244
3244
  !compact &&
3245
- (hasWrapper ? (React__default["default"].createElement("div", { onClick: onClick }, wrapper(logo, compact))) : (React__default["default"].createElement("a", Object.assign({}, linkProps, { className: b$l('logo-link'), onClick: onClick }), logo)))));
3245
+ (hasWrapper ? (React__default["default"].createElement("div", { onClick: onClick }, wrapper(logo, compact))) : (React__default["default"].createElement("a", Object.assign({}, linkProps, { className: b$m('logo-link'), onClick: onClick }), logo)))));
3246
3246
  };
3247
3247
 
3248
3248
  var classCallCheck = function (instance, Constructor) {
@@ -3269,7 +3269,7 @@ var createClass = function () {
3269
3269
  };
3270
3270
  }();
3271
3271
 
3272
- var _extends$3 = Object.assign || function (target) {
3272
+ var _extends$2 = Object.assign || function (target) {
3273
3273
  for (var i = 1; i < arguments.length; i++) {
3274
3274
  var source = arguments[i];
3275
3275
 
@@ -3712,7 +3712,7 @@ var AutoSizer = function (_React$PureComponent) {
3712
3712
  {
3713
3713
  className: className,
3714
3714
  ref: this._setRef,
3715
- style: _extends$3({}, outerStyle, style)
3715
+ style: _extends$2({}, outerStyle, style)
3716
3716
  },
3717
3717
  !bailoutOnChildren && children(childParams)
3718
3718
  );
@@ -3773,17 +3773,66 @@ function getItemsMinHeight(items) {
3773
3773
  getItemsHeight(afterMoreButtonItems) +
3774
3774
  (pinnedItems.length === items.length ? 0 : ITEM_HEIGHT));
3775
3775
  }
3776
+ function getMoreButtonItem(dict) {
3777
+ var _a;
3778
+ const title = (_a = dict === null || dict === void 0 ? void 0 : dict[exports.Dict.MoreButton]) !== null && _a !== void 0 ? _a : defaultDict$2[exports.Dict.MoreButton];
3779
+ return {
3780
+ id: COLLAPSE_ITEM_ID,
3781
+ title,
3782
+ icon: icons.Ellipsis,
3783
+ iconSize: 18,
3784
+ };
3785
+ }
3786
+ function getAutosizeListItems(items, height, collapseItem) {
3787
+ var _a, _b, _c;
3788
+ const afterMoreButtonItems = items.filter((item) => item.afterMoreButton);
3789
+ const regularItems = items.filter((item) => !item.afterMoreButton);
3790
+ const listItems = [...regularItems, ...afterMoreButtonItems];
3791
+ const allItemsHeight = getItemsHeight(listItems);
3792
+ if (allItemsHeight <= height) {
3793
+ return { listItems, collapseItems: [] };
3794
+ }
3795
+ const collapseItemHeight = getItemHeight$1(collapseItem);
3796
+ listItems.splice(regularItems.length, 0, collapseItem);
3797
+ const collapseItems = [];
3798
+ let listHeight = allItemsHeight + collapseItemHeight;
3799
+ let index = listItems.length;
3800
+ while (listHeight > height) {
3801
+ if (index === 0) {
3802
+ break;
3803
+ }
3804
+ index--;
3805
+ const item = listItems[index];
3806
+ if (item.pinned || item.id === COLLAPSE_ITEM_ID || item.afterMoreButton) {
3807
+ continue;
3808
+ }
3809
+ if (item.type === 'divider') {
3810
+ if (index + 1 < listItems.length && ((_a = listItems[index + 1]) === null || _a === void 0 ? void 0 : _a.type) === 'divider') {
3811
+ listHeight -= getItemHeight$1(item);
3812
+ listItems.splice(index, 1);
3813
+ }
3814
+ continue;
3815
+ }
3816
+ listHeight -= getItemHeight$1(item);
3817
+ collapseItems.unshift(...listItems.splice(index, 1));
3818
+ }
3819
+ if (((_b = listItems[index]) === null || _b === void 0 ? void 0 : _b.type) === 'divider' &&
3820
+ (index === 0 || ((_c = listItems[index - 1]) === null || _c === void 0 ? void 0 : _c.type) === 'divider')) {
3821
+ listItems.splice(index, 1);
3822
+ }
3823
+ return { listItems, collapseItems };
3824
+ }
3776
3825
 
3777
- 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}";
3778
- styleInject(css_248z$j);
3826
+ 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}";
3827
+ styleInject(css_248z$k);
3779
3828
 
3780
- const b$k = block('composite-bar-item');
3829
+ const b$l = block('composite-bar-item');
3781
3830
  function renderItemTitle(item) {
3782
- let titleNode = React__default["default"].createElement("div", { className: b$k('title-text') }, item.title);
3831
+ let titleNode = React__default["default"].createElement("div", { className: b$l('title-text') }, item.title);
3783
3832
  if (item.rightAdornment) {
3784
3833
  titleNode = (React__default["default"].createElement(React__default["default"].Fragment, null,
3785
3834
  titleNode,
3786
- React__default["default"].createElement("div", { className: b$k('title-adornment') }, item.rightAdornment)));
3835
+ React__default["default"].createElement("div", { className: b$l('title-adornment') }, item.rightAdornment)));
3787
3836
  }
3788
3837
  return titleNode;
3789
3838
  }
@@ -3792,7 +3841,7 @@ const defaultPopupOffset = [-20, 8];
3792
3841
  const Item$1 = (props) => {
3793
3842
  const { item, compact, className, collapseItems, onMouseLeave, onMouseEnter, enableTooltip = true, popupVisible = false, popupAnchor, popupPlacement = defaultPopupPlacement, popupOffset = defaultPopupOffset, popupKeepMounted, renderPopupContent, onClosePopup, onItemClick, } = props;
3794
3843
  if (item.type === 'divider') {
3795
- return React__default["default"].createElement("div", { className: b$k('menu-divider') });
3844
+ return React__default["default"].createElement("div", { className: b$l('menu-divider') });
3796
3845
  }
3797
3846
  const [open, toggleOpen] = React__default["default"].useState(false);
3798
3847
  const ref = React__default["default"].useRef(null);
@@ -3813,7 +3862,7 @@ const Item$1 = (props) => {
3813
3862
  onClosePopup === null || onClosePopup === void 0 ? void 0 : onClosePopup();
3814
3863
  }, [onClosePopup]);
3815
3864
  const makeNode = ({ icon: iconEl, title: titleEl }) => {
3816
- const createdNode = (React__default["default"].createElement("div", { className: b$k({ type, current, compact }, className), ref: ref, onClick: () => {
3865
+ const createdNode = (React__default["default"].createElement("div", { className: b$l({ type, current, compact }, className), ref: ref, onClick: (event) => {
3817
3866
  if (collapsedItem) {
3818
3867
  /**
3819
3868
  * If we call onItemClick for collapsedItem then:
@@ -3823,7 +3872,7 @@ const Item$1 = (props) => {
3823
3872
  toggleOpen(!open);
3824
3873
  }
3825
3874
  else {
3826
- onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, false);
3875
+ onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, false, event);
3827
3876
  }
3828
3877
  }, onMouseEnter: () => {
3829
3878
  if (!compact) {
@@ -3834,13 +3883,13 @@ const Item$1 = (props) => {
3834
3883
  onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave();
3835
3884
  }
3836
3885
  } },
3837
- React__default["default"].createElement("div", { className: b$k('icon-place') }, compact ? (React__default["default"].createElement(uikit.Tooltip, { content: tooltipText, disabled: !enableTooltip || (collapsedItem && open), placement: "right", className: b$k('icon-tooltip', { 'item-type': type }) },
3838
- React__default["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)),
3839
- React__default["default"].createElement("div", { className: b$k('title'), title: typeof item.title === 'string' ? item.title : undefined }, titleEl),
3840
- renderPopupContent && Boolean(anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) && (React__default["default"].createElement(uikit.Popup, { className: b$k('popup'), open: popupVisible, keepMounted: popupKeepMounted, placement: popupPlacement, offset: popupOffset, anchorRef: anchorRef, onClose: onClose }, renderPopupContent()))));
3841
- return item.link ? (React__default["default"].createElement("a", { href: item.link, className: b$k('link') }, createdNode)) : (createdNode);
3886
+ React__default["default"].createElement("div", { className: b$l('icon-place') }, compact ? (React__default["default"].createElement(uikit.Tooltip, { content: tooltipText, disabled: !enableTooltip || (collapsedItem && open), placement: "right", className: b$l('icon-tooltip', { 'item-type': type }) },
3887
+ React__default["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)),
3888
+ React__default["default"].createElement("div", { className: b$l('title'), title: typeof item.title === 'string' ? item.title : undefined }, titleEl),
3889
+ renderPopupContent && Boolean(anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) && (React__default["default"].createElement(uikit.Popup, { className: b$l('popup'), open: popupVisible, keepMounted: popupKeepMounted, placement: popupPlacement, offset: popupOffset, anchorRef: anchorRef, onClose: onClose }, renderPopupContent()))));
3890
+ return item.link ? (React__default["default"].createElement("a", { href: item.link, className: b$l('link') }, createdNode)) : (createdNode);
3842
3891
  };
3843
- const iconNode = icon ? React__default["default"].createElement(uikit.Icon, { data: icon, size: iconSize, className: b$k('icon') }) : null;
3892
+ const iconNode = icon ? React__default["default"].createElement(uikit.Icon, { data: icon, size: iconSize, className: b$l('icon') }) : null;
3844
3893
  const titleNode = renderItemTitle(item);
3845
3894
  const params = { icon: iconNode, title: titleNode };
3846
3895
  let node;
@@ -3858,13 +3907,13 @@ const Item$1 = (props) => {
3858
3907
  Item$1.displayName = 'Item';
3859
3908
  function CollapsedPopup({ compact, onItemClick, collapseItems, anchorRef, onClose, }) {
3860
3909
  return (collapseItems === null || collapseItems === void 0 ? void 0 : collapseItems.length) ? (React__default["default"].createElement(uikit.Popup, { placement: POPUP_PLACEMENT, open: true, anchorRef: anchorRef, onClose: onClose },
3861
- React__default["default"].createElement("div", { className: b$k('collapse-items-popup-content') },
3862
- React__default["default"].createElement(uikit.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) => {
3910
+ React__default["default"].createElement("div", { className: b$l('collapse-items-popup-content') },
3911
+ React__default["default"].createElement(uikit.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) => {
3863
3912
  const makeCollapseNode = ({ title: titleEl }) => {
3864
- const res = (React__default["default"].createElement("div", { className: b$k('collapse-item'), onClick: () => {
3865
- onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(collapseItem, true);
3913
+ const res = (React__default["default"].createElement("div", { className: b$l('collapse-item'), onClick: (event) => {
3914
+ onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(collapseItem, true, event);
3866
3915
  } }, titleEl));
3867
- return collapseItem.link ? (React__default["default"].createElement("a", { href: collapseItem.link, className: b$k('link') }, res)) : (res);
3916
+ return collapseItem.link ? (React__default["default"].createElement("a", { href: collapseItem.link, className: b$l('link') }, res)) : (res);
3868
3917
  };
3869
3918
  const titleNode = renderItemTitle(collapseItem);
3870
3919
  const params = { title: titleNode };
@@ -3878,123 +3927,149 @@ function CollapsedPopup({ compact, onItemClick, collapseItems, anchorRef, onClos
3878
3927
  } })))) : null;
3879
3928
  }
3880
3929
 
3881
- var _path$2;
3882
- 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); }
3883
- var SvgDots = function SvgDots(props) {
3884
- return /*#__PURE__*/React__namespace.createElement("svg", _extends$2({
3885
- xmlns: "http://www.w3.org/2000/svg",
3886
- viewBox: "0 0 16 16",
3887
- width: 16,
3888
- height: 16
3889
- }, props), _path$2 || (_path$2 = /*#__PURE__*/React__namespace.createElement("path", {
3890
- 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",
3891
- fill: "currentColor",
3892
- fillRule: "evenodd"
3893
- })));
3894
- };
3895
- var dotsIcon = SvgDots;
3896
-
3897
- 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}";
3898
- styleInject(css_248z$i);
3930
+ 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}";
3931
+ styleInject(css_248z$j);
3899
3932
 
3900
- const b$j = block('composite-bar');
3901
- class CompositeBar extends React__default["default"].Component {
3933
+ const multipleTooltipContextDefaults = {
3934
+ active: false,
3935
+ activeIndex: undefined,
3936
+ hideCollapseItemTooltip: false,
3937
+ lastClickedItemIndex: undefined,
3938
+ setValue: () => { },
3939
+ };
3940
+ const MultipleTooltipContext = React__default["default"].createContext(multipleTooltipContextDefaults);
3941
+ class MultipleTooltipProvider extends React__default["default"].PureComponent {
3902
3942
  constructor() {
3903
3943
  super(...arguments);
3904
- this.state = {
3905
- activeItemIndex: undefined,
3944
+ this.state = Object.assign({}, multipleTooltipContextDefaults);
3945
+ this.setValue = (value) => {
3946
+ this.setState(Object.assign({}, value));
3906
3947
  };
3907
- this.listRef = React__default["default"].createRef();
3908
3948
  }
3909
3949
  render() {
3910
- const { enableCollapsing, items } = this.props;
3911
- if (items.length === 0) {
3912
- return null;
3913
- }
3914
- if (!enableCollapsing) {
3915
- return React__default["default"].createElement("div", { className: b$j() }, this.renderMenu());
3916
- }
3917
- const minHeight = getItemsMinHeight(items);
3918
- return (React__default["default"].createElement("div", { className: b$j({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React__default["default"].createElement(AutoSizer, null, ({ width, height }) => {
3919
- const style = {
3920
- width,
3921
- height,
3922
- };
3923
- return React__default["default"].createElement("div", { style: style }, this.renderAutosizeMenu(height));
3924
- }))));
3925
- }
3926
- renderAutosizeMenu(height) {
3927
- const { compact, onItemClick } = this.props;
3928
- const { listItems, collapseItems } = this.getAutosizeListItems(height);
3929
- return (React__default["default"].createElement(uikit.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["default"].createElement(Item$1, { item: item, onMouseLeave: () => {
3930
- var _a;
3931
- if (compact) {
3932
- (_a = this.listRef.current) === null || _a === void 0 ? void 0 : _a.activateItem(undefined);
3933
- }
3934
- }, compact: compact, collapseItems: collapseItems, onItemClick: onItemClick })) }));
3950
+ const { children } = this.props;
3951
+ return (React__default["default"].createElement(MultipleTooltipContext.Provider, { value: Object.assign(Object.assign({}, this.state), { setValue: this.setValue }) }, children));
3935
3952
  }
3936
- renderMenu() {
3937
- const { items, onItemClick, compact } = this.props;
3938
- return (React__default["default"].createElement(uikit.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["default"].createElement(Item$1, { item: item, onMouseLeave: () => {
3939
- var _a;
3940
- if (compact) {
3941
- (_a = this.listRef.current) === null || _a === void 0 ? void 0 : _a.activateItem(undefined);
3942
- }
3943
- }, compact: compact, onItemClick: onItemClick })) }));
3944
- }
3945
- getMoreButtonItem() {
3946
- var _a;
3947
- const { dict } = this.props;
3948
- const title = (_a = dict === null || dict === void 0 ? void 0 : dict[exports.Dict.MoreButton]) !== null && _a !== void 0 ? _a : defaultDict$2[exports.Dict.MoreButton];
3949
- return {
3950
- id: COLLAPSE_ITEM_ID,
3951
- title,
3952
- icon: dotsIcon,
3953
- iconSize: 16,
3954
- };
3955
- }
3956
- getAutosizeListItems(height) {
3957
- var _a, _b, _c;
3958
- const { items } = this.props;
3959
- const afterMoreButtonItems = items.filter((item) => item.afterMoreButton);
3960
- const regularItems = items.filter((item) => !item.afterMoreButton);
3961
- const listItems = [...regularItems, ...afterMoreButtonItems];
3962
- const allItemsHeight = getItemsHeight(listItems);
3963
- if (allItemsHeight <= height) {
3964
- return { listItems, collapseItems: [] };
3953
+ }
3954
+
3955
+ 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}";
3956
+ styleInject(css_248z$i);
3957
+
3958
+ const b$k = block('multiple-tooltip');
3959
+ const POPUP_OFFSET = [-32, 4];
3960
+ const POPUP_MODIFIERS = [
3961
+ {
3962
+ name: 'preventOverflow',
3963
+ enabled: false,
3964
+ },
3965
+ ];
3966
+ const MultipleTooltip = ({ items, open, anchorRef, placement, }) => {
3967
+ const { activeIndex, hideCollapseItemTooltip } = React__default["default"].useContext(MultipleTooltipContext);
3968
+ const activeItem = activeIndex === undefined ? null : items[activeIndex];
3969
+ return (React__default["default"].createElement(uikit.Popup, { open: open, anchorRef: anchorRef, placement: placement, offset: POPUP_OFFSET, className: b$k(null), modifiers: POPUP_MODIFIERS },
3970
+ React__default["default"].createElement("div", { className: b$k('items-container') }, items
3971
+ .filter(({ type = 'regular', id }) => !hideCollapseItemTooltip ||
3972
+ (id !== COLLAPSE_ITEM_ID && type !== 'action'))
3973
+ .map((item, idx) => {
3974
+ switch (item.type) {
3975
+ case 'divider':
3976
+ return (React__default["default"].createElement("div", { className: b$k('item', { divider: true }), key: idx }, item.title));
3977
+ default:
3978
+ return (React__default["default"].createElement("div", { className: b$k('item', {
3979
+ active: item === activeItem,
3980
+ }), key: idx }, item.title));
3981
+ }
3982
+ }))));
3983
+ };
3984
+
3985
+ const b$j = block('composite-bar');
3986
+ const CompositeBarView = ({ items, compact, onItemClick, collapseItems, multipleTooltip = true, }) => {
3987
+ const ref = React.useRef(null);
3988
+ const tooltipRef = React.useRef(null);
3989
+ const { setValue: setMultipleTooltipContextValue, active: multipleTooltipActive, activeIndex, lastClickedItemIndex, } = React.useContext(MultipleTooltipContext);
3990
+ const onTooltipMouseEnter = React.useCallback((e) => {
3991
+ if (!multipleTooltipActive &&
3992
+ activeIndex !== lastClickedItemIndex &&
3993
+ e.clientX <= ASIDE_HEADER_COMPACT_WIDTH) {
3994
+ setMultipleTooltipContextValue === null || setMultipleTooltipContextValue === void 0 ? void 0 : setMultipleTooltipContextValue({
3995
+ active: true,
3996
+ });
3965
3997
  }
3966
- const collapseItem = this.getMoreButtonItem();
3967
- const collapseItemHeight = getItemHeight$1(collapseItem);
3968
- listItems.splice(regularItems.length, 0, collapseItem);
3969
- const collapseItems = [];
3970
- let listHeight = allItemsHeight + collapseItemHeight;
3971
- let index = listItems.length;
3972
- while (listHeight > height) {
3973
- if (index === 0) {
3974
- break;
3998
+ }, [multipleTooltipActive, activeIndex, lastClickedItemIndex, setMultipleTooltipContextValue]);
3999
+ const onTooltipMouseLeave = React.useCallback(() => {
4000
+ if (multipleTooltipActive) {
4001
+ setMultipleTooltipContextValue === null || setMultipleTooltipContextValue === void 0 ? void 0 : setMultipleTooltipContextValue({
4002
+ active: false,
4003
+ lastClickedItemIndex: undefined,
4004
+ });
4005
+ }
4006
+ }, [multipleTooltipActive, setMultipleTooltipContextValue]);
4007
+ const onMouseEnterByIndex = React.useCallback((itemIndex) => () => {
4008
+ if (multipleTooltip) {
4009
+ let multipleTooltipActiveValue = multipleTooltipActive;
4010
+ if (!multipleTooltipActive && itemIndex !== lastClickedItemIndex) {
4011
+ multipleTooltipActiveValue = true;
3975
4012
  }
3976
- index--;
3977
- const item = listItems[index];
3978
- if (item.pinned || item.id === COLLAPSE_ITEM_ID || item.afterMoreButton) {
3979
- continue;
4013
+ if (activeIndex === itemIndex &&
4014
+ multipleTooltipActive === multipleTooltipActiveValue) {
4015
+ return;
3980
4016
  }
3981
- if (item.type === 'divider') {
3982
- if (index + 1 < listItems.length && ((_a = listItems[index + 1]) === null || _a === void 0 ? void 0 : _a.type) === 'divider') {
3983
- listHeight -= getItemHeight$1(item);
3984
- listItems.splice(index, 1);
3985
- }
3986
- continue;
4017
+ setMultipleTooltipContextValue({
4018
+ activeIndex: itemIndex,
4019
+ active: multipleTooltipActiveValue,
4020
+ });
4021
+ }
4022
+ }, [multipleTooltipActive, activeIndex, lastClickedItemIndex, setMultipleTooltipContextValue]);
4023
+ const onMouseLeave = React.useCallback(() => {
4024
+ var _a;
4025
+ if (compact) {
4026
+ (_a = ref.current) === null || _a === void 0 ? void 0 : _a.activateItem(undefined);
4027
+ if (multipleTooltip &&
4028
+ (activeIndex !== undefined || lastClickedItemIndex !== undefined)) {
4029
+ setMultipleTooltipContextValue({
4030
+ activeIndex: undefined,
4031
+ lastClickedItemIndex: undefined,
4032
+ });
3987
4033
  }
3988
- listHeight -= getItemHeight$1(item);
3989
- collapseItems.unshift(...listItems.splice(index, 1));
3990
4034
  }
3991
- if (((_b = listItems[index]) === null || _b === void 0 ? void 0 : _b.type) === 'divider' &&
3992
- (index === 0 || ((_c = listItems[index - 1]) === null || _c === void 0 ? void 0 : _c.type) === 'divider')) {
3993
- listItems.splice(index, 1);
4035
+ }, [activeIndex, lastClickedItemIndex, setMultipleTooltipContextValue]);
4036
+ const onItemClickByIndex = React.useCallback((itemIndex) => (item, collapsed) => {
4037
+ if (compact &&
4038
+ multipleTooltip &&
4039
+ itemIndex !== lastClickedItemIndex &&
4040
+ item.id !== COLLAPSE_ITEM_ID) {
4041
+ setMultipleTooltipContextValue({
4042
+ lastClickedItemIndex: itemIndex,
4043
+ active: false,
4044
+ });
3994
4045
  }
3995
- return { listItems, collapseItems };
4046
+ onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, collapsed);
4047
+ }, [lastClickedItemIndex, setMultipleTooltipContextValue]);
4048
+ return (React__default["default"].createElement(React__default["default"].Fragment, null,
4049
+ React__default["default"].createElement("div", { ref: tooltipRef, onMouseEnter: onTooltipMouseEnter, onMouseLeave: onTooltipMouseLeave },
4050
+ React__default["default"].createElement(uikit.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["default"].createElement(Item$1, { item: item, onMouseEnter: onMouseEnterByIndex(itemIndex), onMouseLeave: onMouseLeave, onItemClick: onItemClickByIndex, compact: compact, collapseItems: collapseItems, enableTooltip: !multipleTooltip })) })),
4051
+ React__default["default"].createElement(MultipleTooltip, { open: compact && multipleTooltip && multipleTooltipActive, anchorRef: tooltipRef, placement: ['right-start'], items: items })));
4052
+ };
4053
+ const CompositeBar = ({ items, compact, enableCollapsing, dict, onItemClick, multipleTooltip = false, }) => {
4054
+ if (items.length === 0) {
4055
+ return null;
3996
4056
  }
3997
- }
4057
+ let node = null;
4058
+ if (enableCollapsing) {
4059
+ const minHeight = getItemsMinHeight(items);
4060
+ const collapseItem = getMoreButtonItem(dict);
4061
+ node = (React__default["default"].createElement("div", { className: b$j({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React__default["default"].createElement(AutoSizer, null, ({ width, height }) => {
4062
+ const { listItems, collapseItems } = getAutosizeListItems(items, height, collapseItem);
4063
+ return (React__default["default"].createElement("div", { style: { width, height } },
4064
+ React__default["default"].createElement(CompositeBarView, { items: listItems, compact: compact, onItemClick: onItemClick, collapseItems: collapseItems, multipleTooltip: multipleTooltip })));
4065
+ }))));
4066
+ }
4067
+ else {
4068
+ node = (React__default["default"].createElement("div", { className: b$j() },
4069
+ React__default["default"].createElement(CompositeBarView, { items: items, compact: compact, onItemClick: onItemClick, multipleTooltip: multipleTooltip })));
4070
+ }
4071
+ return React__default["default"].createElement(MultipleTooltipProvider, null, node);
4072
+ };
3998
4073
 
3999
4074
  /* Used by renderContent AsideHeader prop */
4000
4075
  const RenderContent = React__default["default"].memo(({ renderContent, size }) => {
@@ -4044,13 +4119,13 @@ class AsideHeader extends React__default["default"].Component {
4044
4119
  super(...arguments);
4045
4120
  this.asideRef = React__default["default"].createRef();
4046
4121
  this.renderFirstPane = (size) => {
4047
- const { dict, menuItems, panelItems, compact, headerDecoration } = this.props;
4122
+ const { dict, menuItems, panelItems, compact, headerDecoration, multipleTooltip } = this.props;
4048
4123
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
4049
4124
  React__default["default"].createElement("div", { className: b$i('aside'), style: { width: size } },
4050
4125
  React__default["default"].createElement("div", { className: b$i('aside-popup-anchor'), ref: this.asideRef }),
4051
4126
  React__default["default"].createElement("div", { className: b$i('aside-content', { ['with-decoration']: headerDecoration }) },
4052
4127
  this.renderHeader(),
4053
- (menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React__default["default"].createElement(CompositeBar, { items: menuItems, compact: compact, enableCollapsing: true, dict: dict, onItemClick: this.onItemClick })) : (React__default["default"].createElement("div", { className: b$i('menu-items') })),
4128
+ (menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React__default["default"].createElement(CompositeBar, { items: menuItems, compact: compact, enableCollapsing: true, dict: dict, onItemClick: this.onItemClick, multipleTooltip: multipleTooltip })) : (React__default["default"].createElement("div", { className: b$i('menu-items') })),
4054
4129
  this.renderFooter(size),
4055
4130
  this.renderCollapseButton())),
4056
4131
  panelItems && this.renderPanels(size)));