@gravity-ui/navigation 0.15.0 → 0.17.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 (46) hide show
  1. package/README.md +17 -1
  2. package/build/cjs/components/AsideHeader/AsideHeader.d.ts +4 -2
  3. package/build/cjs/components/AsideHeader/i18n/index.d.ts +2 -0
  4. package/build/cjs/components/CompositeBar/CompositeBar.d.ts +2 -2
  5. package/build/cjs/components/CompositeBar/HighlightedItem/HighlightedItem.d.ts +12 -0
  6. package/build/cjs/components/CompositeBar/Item/Item.d.ts +3 -0
  7. package/build/cjs/components/CompositeBar/constants.d.ts +0 -1
  8. package/build/cjs/components/CompositeBar/utils.d.ts +2 -2
  9. package/build/cjs/components/MobileHeader/Burger/Burger.d.ts +5 -2
  10. package/build/cjs/components/MobileHeader/MobileHeader.d.ts +2 -0
  11. package/build/cjs/components/MobileHeader/i18n/index.d.ts +2 -0
  12. package/build/cjs/components/Settings/Settings.d.ts +4 -7
  13. package/build/cjs/components/Settings/i18n/index.d.ts +2 -0
  14. package/build/cjs/components/Title/Title.d.ts +1 -3
  15. package/build/cjs/components/Title/i18n/index.d.ts +2 -0
  16. package/build/cjs/components/constants.d.ts +1 -8
  17. package/build/cjs/components/index.d.ts +1 -0
  18. package/build/cjs/components/types.d.ts +0 -10
  19. package/build/cjs/components/utils/cn.d.ts +3 -3
  20. package/build/cjs/components/utils/registerKeyset.d.ts +5 -0
  21. package/build/cjs/i18n.d.ts +2 -0
  22. package/build/cjs/index.js +1346 -1085
  23. package/build/cjs/index.js.map +1 -1
  24. package/build/esm/components/AsideHeader/AsideHeader.d.ts +4 -2
  25. package/build/esm/components/AsideHeader/i18n/index.d.ts +2 -0
  26. package/build/esm/components/CompositeBar/CompositeBar.d.ts +2 -2
  27. package/build/esm/components/CompositeBar/HighlightedItem/HighlightedItem.d.ts +12 -0
  28. package/build/esm/components/CompositeBar/Item/Item.d.ts +3 -0
  29. package/build/esm/components/CompositeBar/constants.d.ts +0 -1
  30. package/build/esm/components/CompositeBar/utils.d.ts +2 -2
  31. package/build/esm/components/MobileHeader/Burger/Burger.d.ts +5 -2
  32. package/build/esm/components/MobileHeader/MobileHeader.d.ts +2 -0
  33. package/build/esm/components/MobileHeader/i18n/index.d.ts +2 -0
  34. package/build/esm/components/Settings/Settings.d.ts +4 -7
  35. package/build/esm/components/Settings/i18n/index.d.ts +2 -0
  36. package/build/esm/components/Title/Title.d.ts +1 -3
  37. package/build/esm/components/Title/i18n/index.d.ts +2 -0
  38. package/build/esm/components/constants.d.ts +1 -8
  39. package/build/esm/components/index.d.ts +1 -0
  40. package/build/esm/components/types.d.ts +0 -10
  41. package/build/esm/components/utils/cn.d.ts +3 -3
  42. package/build/esm/components/utils/registerKeyset.d.ts +5 -0
  43. package/build/esm/i18n.d.ts +2 -0
  44. package/build/esm/index.js +1272 -1012
  45. package/build/esm/index.js.map +1 -1
  46. package/package.json +4 -1
@@ -1,94 +1,17 @@
1
1
  import * as React from 'react';
2
- import React__default, { Children, isValidElement, cloneElement, Component, createElement, useRef, useContext, useCallback, useState, useMemo, useEffect } from 'react';
3
- import { useBodyScrollLock, Button, Icon, Popup, List, Tooltip, Text, Hotkey, TextInput, Tabs, Loader, Sheet, eventBroker } from '@gravity-ui/uikit';
2
+ import React__default, { Children, isValidElement, cloneElement, Component, createElement, useState, useCallback, useEffect, useRef, useContext, useMemo } from 'react';
3
+ import { withNaming } from '@bem-react/classname';
4
+ import { useBodyScrollLock, Button, Icon, Portal, Popup, List, Tooltip, Text, Hotkey, TextInput, Tabs, Loader, Sheet, eventBroker } from '@gravity-ui/uikit';
4
5
  import ReactDOM from 'react-dom';
5
6
  import { Ellipsis, Xmark } from '@gravity-ui/icons';
6
7
 
7
- var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
8
-
9
- var lib$1 = {};
10
-
11
- var lib = {exports: {}};
12
-
13
- /*!
14
- * bem-cn v3.0.1
15
- * Friendly BEM class names generator, greate for React
16
- * @author Alexander Burtsev, https://github.com/albburtsev
17
- */
18
-
19
- (function (module, exports) {
20
- !function(n,t){module.exports=t();}(commonjsGlobal,function(){return function(n){var t={};function e(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return n[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=n,e.c=t,e.d=function(n,t,r){e.o(n,t)||Object.defineProperty(n,t,{enumerable:!0,get:r});},e.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0});},e.t=function(n,t){if(1&t&&(n=e(n)),8&t)return n;if(4&t&&"object"==typeof n&&n&&n.__esModule)return n;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:n}),2&t&&"string"!=typeof n)for(var o in n)e.d(r,o,function(t){return n[t]}.bind(null,o));return r},e.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(t,"a",t),t},e.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},e.p="",e(e.s=0)}([function(n,t,e){Object.defineProperty(t,"__esModule",{value:!0});var r=e(1);t.ERROR_BLOCK_NAME_TYPE="Block name should be a string",t.ERROR_BLOCK_NAME_EMPTY="Block name should be non-empty";var o={ns:"",el:"__",mod:"_",modValue:"_"},i=function(n){return "string"==typeof n},u=function(n){return "string"!=typeof n},s=function(n,t){for(var e=[],o=2;o<arguments.length;o++)e[o-2]=arguments[o];var i=r.assign({},t);return i.mixes=i.mixes.concat(e),c(i,n)},a=function(n,t,e){for(var o=[],i=3;i<arguments.length;i++)o[i-3]=arguments[i];var u=r.assign({},t),s=r.assign({},u.states||{});return s[e]=r.assign.apply(void 0,[{},s[e]||{}].concat(o)),u.states=s,c(u,n)},l=function(n,t,e,r){return String.prototype.split.call(f(n,t),e,r)},f=function(n,t){var e=t.name,r=t.mods,o=t.mixes,i=t.states,u=[e];if(r&&(u=u.concat(Object.keys(r).filter(function(n){return r[n]}).map(function(t){var o=r[t];return !0===o?e+n.mod+t:e+n.mod+t+n.modValue+o}))),i&&Object.keys(i).forEach(function(n){var t=i[n];u=u.concat(Object.keys(t).filter(function(n){return t[n]}).map(function(t){return n+t}));}),n.ns&&(u=u.map(function(t){return n.ns+t})),o&&(u=u.concat(function(n){return void 0===n&&(n=[]),n.map(function(n){return Array.isArray(n)?n.join(" "):"object"==typeof n&&null!==n?n.toString():"function"==typeof n?n.toString():"string"==typeof n?n:""}).filter(function(n){return !!n})}(o))),n.classMap){var s=n.classMap;u=u.map(function(n){return s[n]||n});}return u.join(" ")},c=function(n,t){return {mix:s.bind(null,t,n),split:l.bind(null,t,n),is:a.bind(null,t,n,"is-"),has:a.bind(null,t,n,"has-"),state:a.bind(null,t,n,"is-"),toString:f.bind(null,t,n)}},d=function(n,t){var e={name:n,mods:{},mixes:[],states:{"is-":{},"has-":{}}},o=function(n,t){for(var e=[],o=2;o<arguments.length;o++)e[o-2]=arguments[o];if(!e.length)return f(n,t);var s=r.assign({},t),a=e.filter(i).reduce(function(t,e){return t+n.el+e},"");a&&(s.name=s.name+a);var l=e.filter(u).reduce(function(n,t){return r.assign(n,t)},{});return s.mods=r.assign({},s.mods,l),c(s,n)}.bind(null,t,e);return o.mix=s.bind(null,t,e),o.split=l.bind(null,t,e),o.is=a.bind(null,t,e,"is-"),o.has=a.bind(null,t,e,"has-"),o.state=a.bind(null,t,e,"is-"),o.toString=f.bind(null,t,e),o};t.setup=function(n){return void 0===n&&(n={}),function(e){if("string"!=typeof e)throw new Error(t.ERROR_BLOCK_NAME_TYPE);var i=e.trim();if(!i)throw new Error(t.ERROR_BLOCK_NAME_EMPTY);return d(i,r.assign({},o,n))}},t.block=t.setup(),t.default=t.block;},function(n,t,e){Object.defineProperty(t,"__esModule",{value:!0}),t.assign=function(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];for(var r=0;r<t.length;r++){var o=t[r];for(var i in o)o.hasOwnProperty(i)&&(n[i]=o[i]);}return n};}])});
21
- } (lib));
22
-
23
- Object.defineProperty(lib$1, "__esModule", { value: true });
24
- var bem_cn_1 = lib.exports;
25
- var block$1 = (0, bem_cn_1.setup)();
26
- function isString(data) {
27
- return typeof data === 'string';
28
- }
29
- function hasMixinShape(data) {
30
- return isString(data) || (Array.isArray(data) && data.every(isString));
31
- }
32
- function bemClassNameLite(blockName) {
33
- var b = block$1(blockName);
34
- function element() {
35
- var args = [];
36
- for (var _i = 0; _i < arguments.length; _i++) {
37
- args[_i] = arguments[_i];
38
- }
39
- var elementName = args.shift();
40
- var modifiers = args[0], mixin = args[1];
41
- var result;
42
- if (typeof elementName !== 'string' || hasMixinShape(modifiers)) {
43
- mixin = modifiers;
44
- modifiers = null;
45
- }
46
- result = b(elementName, modifiers);
47
- if (mixin) {
48
- result = result.mix(mixin);
49
- }
50
- return result.toString();
51
- }
52
- element.builder = function () {
53
- return b;
54
- };
55
- return element;
56
- }
57
- bemClassNameLite.setup = function (config) {
58
- block$1 = (0, bem_cn_1.setup)(config);
59
- };
60
- bemClassNameLite.reset = function () {
61
- block$1 = (0, bem_cn_1.setup)();
62
- };
63
- var _default = lib$1.default = bemClassNameLite;
64
-
65
8
  const NAMESPACE = 'gn-';
66
- function block(name) {
67
- return _default(`${NAMESPACE}${name}`);
68
- }
9
+ withNaming({ e: '__', m: '_' });
10
+ const block = withNaming({ n: NAMESPACE, e: '__', m: '_' });
69
11
 
70
- var MobileHeaderDict;
71
- (function (MobileHeaderDict) {
72
- MobileHeaderDict["CloseBurger"] = "button_close-burger";
73
- MobileHeaderDict["OpenBurger"] = "button_open-burger";
74
- })(MobileHeaderDict || (MobileHeaderDict = {}));
75
- var Dict;
76
- (function (Dict) {
77
- Dict["ExpandButton"] = "button_expand";
78
- Dict["CollapseButton"] = "button_collapse";
79
- Dict["MoreButton"] = "button_more";
80
- })(Dict || (Dict = {}));
81
-
82
- const ASIDE_HEADER_FOOTER_ICON_SIZE = 20;
12
+ const ASIDE_HEADER_ICON_SIZE = 18;
83
13
  const ASIDE_HEADER_COMPACT_WIDTH = 56;
84
14
  const ASIDE_HEADER_EXPANDED_WIDTH = 236;
85
- const defaultDict$2 = {
86
- [Dict.CollapseButton]: 'Collapse',
87
- [Dict.ExpandButton]: 'Expand',
88
- [Dict.MoreButton]: 'More',
89
- [MobileHeaderDict.CloseBurger]: 'Close menu',
90
- [MobileHeaderDict.OpenBurger]: 'Open menu',
91
- };
92
15
 
93
16
  function _extends$2() {
94
17
  _extends$2 = Object.assign ? Object.assign.bind() : function (target) {
@@ -132,6 +55,8 @@ function _inheritsLoose(subClass, superClass) {
132
55
  _setPrototypeOf(subClass, superClass);
133
56
  }
134
57
 
58
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
59
+
135
60
  var propTypes = {exports: {}};
136
61
 
137
62
  var reactIs = {exports: {}};
@@ -1357,7 +1282,7 @@ function removeClass$1(element, className) {
1357
1282
  }
1358
1283
  }
1359
1284
 
1360
- var config = {
1285
+ var config$1 = {
1361
1286
  disabled: false
1362
1287
  };
1363
1288
 
@@ -1637,7 +1562,7 @@ var Transition = /*#__PURE__*/function (_React$Component) {
1637
1562
  var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED
1638
1563
  // if we are mounting and running this it means appear _must_ be set
1639
1564
 
1640
- if (!mounting && !enter || config.disabled) {
1565
+ if (!mounting && !enter || config$1.disabled) {
1641
1566
  this.safeSetState({
1642
1567
  status: ENTERED
1643
1568
  }, function () {
@@ -1669,7 +1594,7 @@ var Transition = /*#__PURE__*/function (_React$Component) {
1669
1594
  var timeouts = this.getTimeouts();
1670
1595
  var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED
1671
1596
 
1672
- if (!exit || config.disabled) {
1597
+ if (!exit || config$1.disabled) {
1673
1598
  this.safeSetState({
1674
1599
  status: EXITED
1675
1600
  }, function () {
@@ -3136,15 +3061,15 @@ function styleInject(css, ref) {
3136
3061
  }
3137
3062
  }
3138
3063
 
3139
- var css_248z$m = ".gn-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(--g-color-base-background);\n}\n.gn-drawer__item_direction_right {\n left: auto;\n right: 0;\n}\n.gn-drawer__item-transition-enter {\n transform: translate(-100%, 0);\n}\n.gn-drawer__item-transition_direction_right-enter {\n transform: translate(100%, 0);\n}\n.gn-drawer__item-transition-enter-active, .gn-drawer__item-transition_direction_right-enter-active {\n transform: translate(0, 0);\n transition: transform 300ms;\n}\n.gn-drawer__item-transition-enter-done, .gn-drawer__item-transition_direction_right-enter-done {\n filter: blur(0px);\n transform: translateZ(0);\n}\n.gn-drawer__item-transition-exit, .gn-drawer__item-transition_direction_right-exit {\n transform: translate(0, 0);\n}\n.gn-drawer__item-transition-exit-active, .gn-drawer__item-transition_direction_right-exit-active {\n transition: transform 300ms;\n}\n.gn-drawer__item-transition-exit-active {\n transform: translate(-100%, 0);\n}\n.gn-drawer__item-transition_direction_right-exit-active {\n transform: translate(100%, 0);\n}\n.gn-drawer__item-transition-exit-done, .gn-drawer__item-transition_direction_right-exit-done {\n visibility: hidden;\n}\n.gn-drawer__veil {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n background-color: var(--g-color-sfx-veil);\n}\n.gn-drawer__veil-transition-enter {\n opacity: 0;\n}\n.gn-drawer__veil-transition-enter-active {\n opacity: 1;\n transition: opacity 300ms;\n}\n.gn-drawer__veil-transition-exit {\n opacity: 1;\n}\n.gn-drawer__veil-transition-exit-active {\n opacity: 0;\n transition: opacity 300ms;\n}\n.gn-drawer__veil-transition-exit-done {\n visibility: hidden;\n}";
3140
- styleInject(css_248z$m);
3064
+ var css_248z$n = ".gn-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(--g-color-base-background);\n}\n.gn-drawer__item_direction_right {\n left: auto;\n right: 0;\n}\n.gn-drawer__item-transition-enter {\n transform: translate(-100%, 0);\n}\n.gn-drawer__item-transition_direction_right-enter {\n transform: translate(100%, 0);\n}\n.gn-drawer__item-transition-enter-active, .gn-drawer__item-transition_direction_right-enter-active {\n transform: translate(0, 0);\n transition: transform 300ms;\n}\n.gn-drawer__item-transition-enter-done, .gn-drawer__item-transition_direction_right-enter-done {\n filter: blur(0px);\n transform: translateZ(0);\n}\n.gn-drawer__item-transition-exit, .gn-drawer__item-transition_direction_right-exit {\n transform: translate(0, 0);\n}\n.gn-drawer__item-transition-exit-active, .gn-drawer__item-transition_direction_right-exit-active {\n transition: transform 300ms;\n}\n.gn-drawer__item-transition-exit-active {\n transform: translate(-100%, 0);\n}\n.gn-drawer__item-transition_direction_right-exit-active {\n transform: translate(100%, 0);\n}\n.gn-drawer__item-transition-exit-done, .gn-drawer__item-transition_direction_right-exit-done {\n visibility: hidden;\n}\n.gn-drawer__veil {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n background-color: var(--g-color-sfx-veil);\n}\n.gn-drawer__veil-transition-enter {\n opacity: 0;\n}\n.gn-drawer__veil-transition-enter-active {\n opacity: 1;\n transition: opacity 300ms;\n}\n.gn-drawer__veil-transition-exit {\n opacity: 1;\n}\n.gn-drawer__veil-transition-exit-active {\n opacity: 0;\n transition: opacity 300ms;\n}\n.gn-drawer__veil-transition-exit-done {\n visibility: hidden;\n}";
3065
+ styleInject(css_248z$n);
3141
3066
 
3142
- const b$n = block('drawer');
3067
+ const b$o = block('drawer');
3143
3068
  const TIMEOUT = 300;
3144
3069
  const DrawerItem = ({ visible, content, direction, className }) => {
3145
3070
  const itemRef = React__default.useRef(null);
3146
- return (React__default.createElement(CSSTransition, { in: visible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$n('item-transition', { direction }), nodeRef: itemRef },
3147
- React__default.createElement("div", { ref: itemRef, className: b$n('item', { direction }, className) }, content)));
3071
+ return (React__default.createElement(CSSTransition, { in: visible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$o('item-transition', { direction }), nodeRef: itemRef },
3072
+ React__default.createElement("div", { ref: itemRef, className: b$o('item', { direction }, className) }, content)));
3148
3073
  };
3149
3074
  const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScrollBody = true, }) => {
3150
3075
  let someItemVisible = false;
@@ -3175,9 +3100,9 @@ const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScro
3175
3100
  const veilRef = React__default.useRef(null);
3176
3101
  return (React__default.createElement(Transition, { in: someItemVisible, timeout: { enter: 0, exit: TIMEOUT }, mountOnEnter: true, unmountOnExit: true, nodeRef: containerRef }, (state) => {
3177
3102
  const childrenVisible = someItemVisible && state === 'entered';
3178
- return (React__default.createElement("div", { ref: containerRef, className: b$n(null, className), style: style },
3179
- React__default.createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$n('veil-transition'), nodeRef: veilRef },
3180
- React__default.createElement("div", { ref: veilRef, className: b$n('veil'), onClick: onVeilClick })),
3103
+ return (React__default.createElement("div", { ref: containerRef, className: b$o(null, className), style: style },
3104
+ React__default.createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$o('veil-transition'), nodeRef: veilRef },
3105
+ React__default.createElement("div", { ref: veilRef, className: b$o('veil'), onClick: onVeilClick })),
3181
3106
  React__default.Children.map(children, (child) => {
3182
3107
  const childElem = child;
3183
3108
  if (childElem.type === DrawerItem) {
@@ -3196,10 +3121,10 @@ const AsideHeaderContext = React__default.createContext({
3196
3121
  const AsideHeaderContextProvider = AsideHeaderContext.Provider;
3197
3122
  const useAsideHeaderContext = () => React__default.useContext(AsideHeaderContext);
3198
3123
 
3199
- var css_248z$l = ".gn-logo {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n height: 40px;\n}\n.gn-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.gn-logo__logo-btn-place .yc-button::before {\n background-color: transparent;\n}\n.gn-logo__btn-logo.yc-button_view_flat.yc-button_size_l {\n --yc-button-height: 38px;\n}\n.gn-logo__logo {\n font-size: var(--g-text-body-2-font-size);\n line-height: var(--g-text-body-2-line-height);\n font-weight: var(--g-text-body-font-weight);\n vertical-align: middle;\n cursor: pointer;\n}\n.gn-logo__logo-link, .gn-logo__logo-link:hover, .gn-logo__logo-link:active, .gn-logo__logo-link:visited, .gn-logo__logo-link:focus {\n text-decoration: none;\n outline: none;\n color: inherit;\n}\n.g-root .gn-logo__btn-logo.button2_theme_flat.button2_hovered_yes::before {\n background-color: transparent;\n}";
3200
- styleInject(css_248z$l);
3124
+ var css_248z$m = ".gn-logo {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n height: 40px;\n}\n.gn-logo__logo-btn-place {\n flex-shrink: 0;\n width: var(--gn-aside-header-min-width);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n}\n.gn-logo__logo-btn-place .yc-button::before {\n background-color: transparent;\n}\n.gn-logo__btn-logo.yc-button_view_flat.yc-button_size_l {\n --yc-button-height: var(--gn-aside-header-item-icon-background-size);\n}\n.gn-logo__logo {\n font-size: var(--g-text-body-2-font-size);\n line-height: var(--g-text-body-2-line-height);\n font-weight: var(--g-text-body-font-weight);\n vertical-align: middle;\n cursor: pointer;\n}\n.gn-logo__logo-link, .gn-logo__logo-link:hover, .gn-logo__logo-link:active, .gn-logo__logo-link:visited, .gn-logo__logo-link:focus {\n text-decoration: none;\n outline: none;\n color: inherit;\n}\n.g-root .gn-logo__btn-logo.button2_theme_flat.button2_hovered_yes::before {\n background-color: transparent;\n}";
3125
+ styleInject(css_248z$m);
3201
3126
 
3202
- const b$m = block('logo');
3127
+ const b$n = block('logo');
3203
3128
  const Logo$1 = ({ text, icon, iconSrc, iconClassName, iconSize = 24, textSize = 15, href, wrapper, onClick, }) => {
3204
3129
  const { compact } = useAsideHeaderContext();
3205
3130
  const hasWrapper = typeof wrapper === 'function';
@@ -3211,18 +3136,18 @@ const Logo$1 = ({ text, icon, iconSrc, iconClassName, iconSize = 24, textSize =
3211
3136
  else if (icon) {
3212
3137
  buttonIcon = React__default.createElement(Icon, { data: icon, size: iconSize, className: iconClassName });
3213
3138
  }
3214
- const button = (React__default.createElement(Button, { view: "flat", size: "l", className: b$m('btn-logo'), component: hasWrapper ? 'span' : undefined, onClick: onClick, target: "_self", href: href }, buttonIcon));
3139
+ const button = (React__default.createElement(Button, { view: "flat", size: "l", className: b$n('btn-logo'), component: hasWrapper ? 'span' : undefined, onClick: onClick, target: "_self", href: href }, buttonIcon));
3215
3140
  let logo;
3216
3141
  if (typeof text === 'function') {
3217
3142
  logo = text();
3218
3143
  }
3219
3144
  else {
3220
- logo = (React__default.createElement("div", { className: b$m('logo'), style: { fontSize: textSize } }, text));
3145
+ logo = (React__default.createElement("div", { className: b$n('logo'), style: { fontSize: textSize } }, text));
3221
3146
  }
3222
- return (React__default.createElement("div", { className: b$m() },
3223
- React__default.createElement("div", { className: b$m('logo-btn-place') }, hasWrapper ? wrapper(button, compact) : button),
3147
+ return (React__default.createElement("div", { className: b$n() },
3148
+ React__default.createElement("div", { className: b$n('logo-btn-place') }, hasWrapper ? wrapper(button, compact) : button),
3224
3149
  !compact &&
3225
- (hasWrapper ? (React__default.createElement("div", { onClick: onClick }, wrapper(logo, compact))) : (React__default.createElement("a", { href: href !== null && href !== void 0 ? href : '/', target: "_self", className: b$m('logo-link'), onClick: onClick }, logo)))));
3150
+ (hasWrapper ? (React__default.createElement("div", { onClick: onClick }, wrapper(logo, compact))) : (React__default.createElement("a", { href: href !== null && href !== void 0 ? href : '/', target: "_self", className: b$n('logo-link'), onClick: onClick }, logo)))));
3226
3151
  };
3227
3152
 
3228
3153
  /**
@@ -3600,7 +3525,6 @@ class AutoSizer extends Component {
3600
3525
  }
3601
3526
  }
3602
3527
 
3603
- const ICON_SIZE = 24;
3604
3528
  const ITEM_HEIGHT = 40;
3605
3529
  const ITEM_TYPE_REGULAR = 'regular';
3606
3530
  const COLLAPSE_ITEM_ID = 'collapse-item-id';
@@ -3648,12 +3572,10 @@ function getItemsMinHeight(items) {
3648
3572
  getItemsHeight(afterMoreButtonItems) +
3649
3573
  (pinnedItems.length === items.length ? 0 : ITEM_HEIGHT));
3650
3574
  }
3651
- function getMoreButtonItem(dict) {
3652
- var _a;
3653
- const title = (_a = dict === null || dict === void 0 ? void 0 : dict[Dict.MoreButton]) !== null && _a !== void 0 ? _a : defaultDict$2[Dict.MoreButton];
3575
+ function getMoreButtonItem(menuMoreTitle) {
3654
3576
  return {
3655
3577
  id: COLLAPSE_ITEM_ID,
3656
- title,
3578
+ title: menuMoreTitle,
3657
3579
  icon: Ellipsis,
3658
3580
  iconSize: 18,
3659
3581
  };
@@ -3701,872 +3623,300 @@ function isMenuItem(item) {
3701
3623
  return (item === null || item === void 0 ? void 0 : item.id) !== undefined;
3702
3624
  }
3703
3625
 
3704
- var css_248z$k = ".gn-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.gn-composite-bar-item__icon {\n color: var(--g-color-text-misc);\n}\n.gn-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.gn-composite-bar-item__title {\n display: flex;\n overflow: hidden;\n}\n.gn-composite-bar-item__title-text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.gn-composite-bar-item__title-adornment {\n margin: 0 10px;\n}\n.gn-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.gn-composite-bar-item__collapse-item .gn-composite-bar-item__title-adornment {\n margin-right: 0;\n}\n.gn-composite-bar-item__menu-divider {\n margin: 0 8px;\n width: 100%;\n border-top: 1px solid var(--g-color-line-generic);\n cursor: default;\n}\n.gn-composite-bar-item__collapse-items-popup-content {\n padding: 4px 0;\n}\n.gn-composite-bar-item__link {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n}\n.gn-composite-bar-item__link, .gn-composite-bar-item__link:hover, .gn-composite-bar-item__link:active, .gn-composite-bar-item__link:visited, .gn-composite-bar-item__link:focus {\n text-decoration: none;\n outline: none;\n color: inherit;\n}\n.gn-composite-bar-item__btn-icon {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.gn-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(--g-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.gn-composite-bar-item_type_action:focus {\n box-shadow: 0 0 0 2px var(--g-color-line-misc);\n}\n.gn-composite-bar-item_type_action:focus:not(:focus-visible) {\n box-shadow: none;\n}\n.gn-composite-bar-item_type_action:hover {\n background-color: var(--g-color-base-float-hover);\n}\n.gn-composite-bar-item_type_action:active {\n box-shadow: 0 1px 2px var(--g-color-sfx-shadow);\n transition: none;\n transform: scale(0.96);\n}\n.gn-composite-bar-item_type_action .gn-composite-bar-item__icon-place {\n width: var(--composite-bar-item-action-size);\n}\n.gn-composite-bar-item_type_action .gn-composite-bar-item__title {\n margin-right: 16px;\n}\n.gn-composite-bar-item__icon-tooltip_item-type_action {\n margin-left: 10px;\n}\n.gn-composite-bar-item:not(.gn-composite-bar-item_compact).gn-composite-bar-item_current.gn-composite-bar-item_type_regular {\n background-color: var(--g-color-base-selection);\n}\n.gn-composite-bar-item:not(.gn-composite-bar-item_compact):not(.gn-composite-bar-item_current):hover.gn-composite-bar-item_type_regular {\n background-color: var(--g-color-base-simple-hover);\n}\n.gn-composite-bar-item_compact.gn-composite-bar-item_type_action {\n width: var(--composite-bar-item-action-size);\n}\n.gn-composite-bar-item_compact.gn-composite-bar-item_type_action .gn-composite-bar-item__title {\n margin: 0;\n}\n.gn-composite-bar-item_compact.gn-composite-bar-item_current.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon {\n position: relative;\n background-color: transparent;\n}\n.gn-composite-bar-item_compact.gn-composite-bar-item_current.gn-composite-bar-item_type_regular .gn-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.gn-composite-bar-item_compact.gn-composite-bar-item_current.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon::before {\n background-color: var(--g-color-base-selection);\n}\n.gn-composite-bar-item_compact:not(.gn-composite-bar-item_current):hover.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon {\n position: relative;\n background-color: transparent;\n}\n.gn-composite-bar-item_compact:not(.gn-composite-bar-item_current):hover.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon::before {\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.gn-composite-bar-item_compact:not(.gn-composite-bar-item_current):hover.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon::before {\n background-color: var(--g-color-base-simple-hover);\n}";
3705
- styleInject(css_248z$k);
3626
+ /**
3627
+ * Checks if `value` is the
3628
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
3629
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
3630
+ *
3631
+ * @static
3632
+ * @memberOf _
3633
+ * @since 0.1.0
3634
+ * @category Lang
3635
+ * @param {*} value The value to check.
3636
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
3637
+ * @example
3638
+ *
3639
+ * _.isObject({});
3640
+ * // => true
3641
+ *
3642
+ * _.isObject([1, 2, 3]);
3643
+ * // => true
3644
+ *
3645
+ * _.isObject(_.noop);
3646
+ * // => true
3647
+ *
3648
+ * _.isObject(null);
3649
+ * // => false
3650
+ */
3706
3651
 
3707
- const b$l = block('composite-bar-item');
3708
- function renderItemTitle(item) {
3709
- let titleNode = React__default.createElement("div", { className: b$l('title-text') }, item.title);
3710
- if (item.rightAdornment) {
3711
- titleNode = (React__default.createElement(React__default.Fragment, null,
3712
- titleNode,
3713
- React__default.createElement("div", { className: b$l('title-adornment') }, item.rightAdornment)));
3714
- }
3715
- return titleNode;
3716
- }
3717
- const defaultPopupPlacement = ['right-end'];
3718
- const defaultPopupOffset = [-20, 8];
3719
- const Item$1 = (props) => {
3720
- const { item, className, collapseItems, onMouseLeave, onMouseEnter, enableTooltip = true, popupVisible = false, popupAnchor, popupPlacement = defaultPopupPlacement, popupOffset = defaultPopupOffset, popupKeepMounted, renderPopupContent, onClosePopup, onItemClick, onItemClickCapture, } = props;
3721
- const { compact } = useAsideHeaderContext();
3722
- if (item.type === 'divider') {
3723
- return React__default.createElement("div", { className: b$l('menu-divider') });
3724
- }
3725
- const [open, toggleOpen] = React__default.useState(false);
3726
- const ref = React__default.useRef(null);
3727
- const anchorRef = popupAnchor || ref;
3728
- const type = item.type || ITEM_TYPE_REGULAR;
3729
- const current = item.current || false;
3730
- const tooltipText = item.tooltipText || item.title;
3731
- const icon = item.icon;
3732
- const iconSize = item.iconSize || ICON_SIZE;
3733
- const collapsedItem = item.id === COLLAPSE_ITEM_ID;
3734
- const onClose = React__default.useCallback((event) => {
3735
- var _a;
3736
- if (event instanceof MouseEvent &&
3737
- event.target &&
3738
- ((_a = ref.current) === null || _a === void 0 ? void 0 : _a.contains(event.target))) {
3739
- return;
3740
- }
3741
- onClosePopup === null || onClosePopup === void 0 ? void 0 : onClosePopup();
3742
- }, [onClosePopup]);
3743
- const makeNode = ({ icon: iconEl, title: titleEl }) => {
3744
- const createdNode = (React__default.createElement("div", { className: b$l({ type, current, compact }, className), ref: ref, onClick: (event) => {
3745
- if (collapsedItem) {
3746
- /**
3747
- * If we call onItemClick for collapsedItem then:
3748
- * - User get unexpected item in onItemClick callback
3749
- * - onClosePanel calls twice for each popuped item, as result it will prevent opening of panelItems
3750
- */
3751
- toggleOpen(!open);
3752
- }
3753
- else {
3754
- onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, false, event);
3755
- }
3756
- }, onClickCapture: onItemClickCapture, onMouseEnter: () => {
3757
- if (!compact) {
3758
- onMouseEnter === null || onMouseEnter === void 0 ? void 0 : onMouseEnter();
3759
- }
3760
- }, onMouseLeave: () => {
3761
- if (!compact) {
3762
- onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave();
3763
- }
3764
- } },
3765
- React__default.createElement("div", { className: b$l('icon-place') }, compact ? (React__default.createElement(Tooltip, { content: tooltipText, disabled: !enableTooltip || (collapsedItem && open) || popupVisible, placement: "right", className: b$l('icon-tooltip', { 'item-type': type }) },
3766
- 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)),
3767
- React__default.createElement("div", { className: b$l('title'), title: typeof item.title === 'string' ? item.title : undefined }, titleEl),
3768
- renderPopupContent && Boolean(anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) && (React__default.createElement(Popup, { contentClassName: b$l('popup'), open: popupVisible, keepMounted: popupKeepMounted, placement: popupPlacement, offset: popupOffset, anchorRef: anchorRef, onClose: onClose }, renderPopupContent()))));
3769
- return item.link ? (React__default.createElement("a", { href: item.link, className: b$l('link') }, createdNode)) : (createdNode);
3770
- };
3771
- const iconNode = icon ? React__default.createElement(Icon, { data: icon, size: iconSize, className: b$l('icon') }) : null;
3772
- const titleNode = renderItemTitle(item);
3773
- const params = { icon: iconNode, title: titleNode };
3774
- let node;
3775
- const opts = { compact, collapsed: false, item, ref };
3776
- if (typeof item.itemWrapper === 'function') {
3777
- node = item.itemWrapper(params, makeNode, opts);
3778
- }
3779
- else {
3780
- node = makeNode(params);
3781
- }
3782
- return (React__default.createElement(React__default.Fragment, null,
3783
- node,
3784
- open && collapsedItem && (collapseItems === null || collapseItems === void 0 ? void 0 : collapseItems.length) && Boolean(anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) && (React__default.createElement(CollapsedPopup, Object.assign({}, props, { anchorRef: ref, onClose: () => toggleOpen(false) })))));
3785
- };
3786
- Item$1.displayName = 'Item';
3787
- function CollapsedPopup({ onItemClick, collapseItems, anchorRef, onClose, }) {
3788
- const { compact } = useAsideHeaderContext();
3789
- return (collapseItems === null || collapseItems === void 0 ? void 0 : collapseItems.length) ? (React__default.createElement(Popup, { placement: POPUP_PLACEMENT, open: true, anchorRef: anchorRef, onClose: onClose },
3790
- React__default.createElement("div", { className: b$l('collapse-items-popup-content') },
3791
- 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) => {
3792
- const makeCollapseNode = ({ title: titleEl }) => {
3793
- const res = (React__default.createElement("div", { className: b$l('collapse-item'), onClick: (event) => {
3794
- onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(collapseItem, true, event);
3795
- } }, titleEl));
3796
- return collapseItem.link ? (React__default.createElement("a", { href: collapseItem.link, className: b$l('link') }, res)) : (res);
3797
- };
3798
- const titleNode = renderItemTitle(collapseItem);
3799
- const params = { title: titleNode };
3800
- const opts = { compact, collapsed: true, item: collapseItem, ref: anchorRef };
3801
- if (typeof collapseItem.itemWrapper === 'function') {
3802
- return collapseItem.itemWrapper(params, makeCollapseNode, opts);
3803
- }
3804
- else {
3805
- return makeCollapseNode(params);
3806
- }
3807
- } })))) : null;
3652
+ function isObject$2(value) {
3653
+ var type = typeof value;
3654
+ return value != null && (type == 'object' || type == 'function');
3808
3655
  }
3809
3656
 
3810
- const multipleTooltipContextDefaults = {
3811
- active: false,
3812
- activeIndex: undefined,
3813
- hideCollapseItemTooltip: false,
3814
- lastClickedItemIndex: undefined,
3815
- setValue: () => { },
3816
- };
3817
- const MultipleTooltipContext = React__default.createContext(multipleTooltipContextDefaults);
3818
- class MultipleTooltipProvider extends React__default.PureComponent {
3819
- constructor() {
3820
- super(...arguments);
3821
- this.state = Object.assign({}, multipleTooltipContextDefaults);
3822
- this.setValue = (value) => {
3823
- this.setState(Object.assign({}, value));
3824
- };
3825
- }
3826
- render() {
3827
- const { children } = this.props;
3828
- return (React__default.createElement(MultipleTooltipContext.Provider, { value: Object.assign(Object.assign({}, this.state), { setValue: this.setValue }) }, children));
3829
- }
3830
- }
3657
+ var isObject_1 = isObject$2;
3831
3658
 
3832
- var css_248z$j = ".g-root_theme_dark .gn-multiple-tooltip,\n.g-root_theme_dark-hc .gn-multiple-tooltip {\n --multiple-tooltip-item-bg-color: #424147;\n --multiple-tooltip-item-active-bg-color: var(--g-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.g-root_theme_light .gn-multiple-tooltip,\n.g-root_theme_light-hc .gn-multiple-tooltip {\n --multiple-tooltip-item-bg-color: #7a7a7a;\n --multiple-tooltip-item-active-bg-color: var(--g-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.gn-multiple-tooltip {\n background-color: transparent;\n box-shadow: none;\n}\n.gn-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.gn-multiple-tooltip__items-container {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n padding: 32px 40px 32px 12px;\n}\n.gn-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(--g-color-text-light-primary);\n margin-bottom: 5px;\n transition: transform 100ms ease-in-out;\n}\n.gn-multiple-tooltip__item:not(.gn-multiple-tooltip__item_divider) + .gn-multiple-tooltip__item:not(.gn-multiple-tooltip__item_divider), .gn-multiple-tooltip__item:first-child {\n margin-top: 5px;\n}\n.gn-multiple-tooltip__item_divider + .gn-multiple-tooltip__item:not(.gn-multiple-tooltip__item_divider) {\n margin-top: 4px;\n}\n.gn-multiple-tooltip__item_active {\n background-color: var(--multiple-tooltip-item-active-bg-color);\n transform: translateX(-12px);\n}\n.gn-multiple-tooltip__item_divider {\n height: 15px;\n visibility: hidden;\n margin: 0;\n}";
3833
- styleInject(css_248z$j);
3659
+ /** Detect free variable `global` from Node.js. */
3834
3660
 
3835
- const b$k = block('multiple-tooltip');
3836
- const POPUP_OFFSET = [-32, 4];
3837
- const POPUP_MODIFIERS = [
3838
- {
3839
- name: 'preventOverflow',
3840
- enabled: false,
3841
- },
3842
- ];
3843
- const MultipleTooltip = ({ items, open, anchorRef, placement, }) => {
3844
- const { activeIndex, hideCollapseItemTooltip } = React__default.useContext(MultipleTooltipContext);
3845
- const activeItem = activeIndex === undefined ? null : items[activeIndex];
3846
- return (React__default.createElement(Popup, { open: open, anchorRef: anchorRef, placement: placement, offset: POPUP_OFFSET, contentClassName: b$k(null), modifiers: POPUP_MODIFIERS },
3847
- React__default.createElement("div", { className: b$k('items-container') }, items
3848
- .filter(({ type = 'regular', id }) => !hideCollapseItemTooltip ||
3849
- (id !== COLLAPSE_ITEM_ID && type !== 'action'))
3850
- .map((item, idx) => {
3851
- switch (item.type) {
3852
- case 'divider':
3853
- return (React__default.createElement("div", { className: b$k('item', { divider: true }), key: idx }, item.title));
3854
- default:
3855
- return (React__default.createElement("div", { className: b$k('item', {
3856
- active: item === activeItem,
3857
- }), key: idx }, item.title));
3858
- }
3859
- }))));
3661
+ var freeGlobal$1 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
3662
+
3663
+ var _freeGlobal = freeGlobal$1;
3664
+
3665
+ var freeGlobal = _freeGlobal;
3666
+
3667
+ /** Detect free variable `self`. */
3668
+ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
3669
+
3670
+ /** Used as a reference to the global object. */
3671
+ var root$2 = freeGlobal || freeSelf || Function('return this')();
3672
+
3673
+ var _root = root$2;
3674
+
3675
+ var root$1 = _root;
3676
+
3677
+ /**
3678
+ * Gets the timestamp of the number of milliseconds that have elapsed since
3679
+ * the Unix epoch (1 January 1970 00:00:00 UTC).
3680
+ *
3681
+ * @static
3682
+ * @memberOf _
3683
+ * @since 2.4.0
3684
+ * @category Date
3685
+ * @returns {number} Returns the timestamp.
3686
+ * @example
3687
+ *
3688
+ * _.defer(function(stamp) {
3689
+ * console.log(_.now() - stamp);
3690
+ * }, _.now());
3691
+ * // => Logs the number of milliseconds it took for the deferred invocation.
3692
+ */
3693
+ var now$1 = function() {
3694
+ return root$1.Date.now();
3860
3695
  };
3861
3696
 
3862
- var css_248z$i = ".gn-composite-bar {\n flex: 1 0 auto;\n width: 100%;\n min-height: 40px;\n}\n.gn-composite-bar .gn-composite-bar__root-menu-item[class] {\n background-color: transparent;\n}";
3863
- styleInject(css_248z$i);
3697
+ var now_1 = now$1;
3864
3698
 
3865
- const b$j = block('composite-bar');
3866
- const CompositeBarView = ({ type, items, onItemClick, collapseItems, multipleTooltip = false, }) => {
3867
- const ref = useRef(null);
3868
- const tooltipRef = useRef(null);
3869
- const { setValue: setMultipleTooltipContextValue, active: multipleTooltipActive, activeIndex, lastClickedItemIndex, } = useContext(MultipleTooltipContext);
3870
- const { compact } = useAsideHeaderContext();
3871
- const onTooltipMouseEnter = useCallback((e) => {
3872
- if (!multipleTooltipActive &&
3873
- activeIndex !== lastClickedItemIndex &&
3874
- e.clientX <= ASIDE_HEADER_COMPACT_WIDTH) {
3875
- setMultipleTooltipContextValue === null || setMultipleTooltipContextValue === void 0 ? void 0 : setMultipleTooltipContextValue({
3876
- active: true,
3877
- });
3878
- }
3879
- }, [multipleTooltipActive, activeIndex, lastClickedItemIndex, setMultipleTooltipContextValue]);
3880
- const onTooltipMouseLeave = useCallback(() => {
3881
- if (multipleTooltipActive) {
3882
- setMultipleTooltipContextValue === null || setMultipleTooltipContextValue === void 0 ? void 0 : setMultipleTooltipContextValue({
3883
- active: false,
3884
- lastClickedItemIndex: undefined,
3885
- });
3886
- }
3887
- }, [multipleTooltipActive, setMultipleTooltipContextValue]);
3888
- const onMouseEnterByIndex = useCallback((itemIndex) => () => {
3889
- if (multipleTooltip) {
3890
- let multipleTooltipActiveValue = multipleTooltipActive;
3891
- if (!multipleTooltipActive && itemIndex !== lastClickedItemIndex) {
3892
- multipleTooltipActiveValue = true;
3893
- }
3894
- if (activeIndex === itemIndex &&
3895
- multipleTooltipActive === multipleTooltipActiveValue) {
3896
- return;
3897
- }
3898
- setMultipleTooltipContextValue({
3899
- activeIndex: itemIndex,
3900
- active: multipleTooltipActiveValue,
3901
- });
3902
- }
3903
- }, [multipleTooltipActive, activeIndex, lastClickedItemIndex, setMultipleTooltipContextValue]);
3904
- const onMouseLeave = useCallback(() => {
3905
- var _a;
3906
- if (compact) {
3907
- (_a = ref.current) === null || _a === void 0 ? void 0 : _a.activateItem(undefined);
3908
- if (multipleTooltip &&
3909
- (activeIndex !== undefined || lastClickedItemIndex !== undefined)) {
3910
- setMultipleTooltipContextValue({
3911
- activeIndex: undefined,
3912
- lastClickedItemIndex: undefined,
3913
- });
3914
- }
3915
- }
3916
- }, [activeIndex, lastClickedItemIndex, setMultipleTooltipContextValue]);
3917
- const onItemClickByIndex = useCallback((itemIndex) => (item, collapsed, event) => {
3918
- if (compact &&
3919
- multipleTooltip &&
3920
- itemIndex !== lastClickedItemIndex &&
3921
- item.id !== COLLAPSE_ITEM_ID) {
3922
- setMultipleTooltipContextValue({
3923
- lastClickedItemIndex: itemIndex,
3924
- active: false,
3925
- });
3926
- }
3927
- onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, collapsed, event);
3928
- }, [lastClickedItemIndex, setMultipleTooltipContextValue]);
3929
- return (React__default.createElement(React__default.Fragment, null,
3930
- React__default.createElement("div", { ref: tooltipRef, onMouseEnter: onTooltipMouseEnter, onMouseLeave: onTooltipMouseLeave },
3931
- React__default.createElement(List, { ref: ref, items: items, selectedItemIndex: type === 'menu' ? getSelectedItemIndex$1(items) : undefined, itemHeight: getItemHeight$1, itemsHeight: getItemsHeight, itemClassName: b$j('root-menu-item'), virtualized: false, filterable: false, sortable: false, renderItem: (item, _isItemActive, itemIndex) => {
3932
- const itemExtraProps = isMenuItem(item) ? { item } : item;
3933
- const enableTooltip = isMenuItem(item)
3934
- ? !multipleTooltip
3935
- : item.enableTooltip;
3936
- return (React__default.createElement(Item$1, Object.assign({}, itemExtraProps, { enableTooltip: enableTooltip, onMouseEnter: onMouseEnterByIndex(itemIndex), onMouseLeave: onMouseLeave, onItemClick: onItemClickByIndex(itemIndex), collapseItems: collapseItems })));
3937
- } })),
3938
- type === 'menu' && (React__default.createElement(MultipleTooltip, { open: compact && multipleTooltip && multipleTooltipActive, anchorRef: tooltipRef, placement: ['right-start'], items: items }))));
3939
- };
3940
- const CompositeBar = ({ type, items, dict, onItemClick, multipleTooltip = false, }) => {
3941
- if (items.length === 0) {
3942
- return null;
3943
- }
3944
- let node;
3945
- if (type === 'menu') {
3946
- const minHeight = getItemsMinHeight(items);
3947
- const collapseItem = getMoreButtonItem(dict);
3948
- node = (React__default.createElement("div", { className: b$j({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React__default.createElement(AutoSizer, null, ({ width, height }) => {
3949
- const { listItems, collapseItems } = getAutosizeListItems(items, height, collapseItem);
3950
- return (React__default.createElement("div", { style: { width, height } },
3951
- React__default.createElement(CompositeBarView, { type: "menu", items: listItems, onItemClick: onItemClick, collapseItems: collapseItems, multipleTooltip: multipleTooltip })));
3952
- }))));
3953
- }
3954
- else {
3955
- node = (React__default.createElement("div", { className: b$j() },
3956
- React__default.createElement(CompositeBarView, { type: "subheader", items: items, onItemClick: onItemClick })));
3957
- }
3958
- return React__default.createElement(MultipleTooltipProvider, null, node);
3959
- };
3699
+ /** Used to match a single whitespace character. */
3960
3700
 
3961
- /* Used by renderContent AsideHeader prop */
3962
- const RenderContent = React__default.memo(({ renderContent, size }) => {
3963
- return React__default.createElement(React__default.Fragment, null, renderContent({ size }));
3964
- });
3965
- RenderContent.displayName = 'RenderContent';
3966
- const Content = ({ size, // TODO: move to context when MobileHeader will support it
3967
- className, cssSizeVariableName = '--aside-header-size', renderContent, }) => {
3968
- return (React__default.createElement("div", { className: className, style: Object.assign({}, { [cssSizeVariableName]: `${size}px` }) }, typeof renderContent === 'function' && (React__default.createElement(RenderContent, { size: size, renderContent: renderContent }))));
3969
- };
3701
+ var reWhitespace = /\s/;
3970
3702
 
3971
- function fakeDisplayName(newDisplayName, Component) {
3972
- const Fake = (props) => React__default.createElement(Component, Object.assign({}, props));
3973
- Fake.displayName = newDisplayName;
3974
- return Fake;
3703
+ /**
3704
+ * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
3705
+ * character of `string`.
3706
+ *
3707
+ * @private
3708
+ * @param {string} string The string to inspect.
3709
+ * @returns {number} Returns the index of the last non-whitespace character.
3710
+ */
3711
+ function trimmedEndIndex$1(string) {
3712
+ var index = string.length;
3713
+
3714
+ while (index-- && reWhitespace.test(string.charAt(index))) {}
3715
+ return index;
3975
3716
  }
3976
3717
 
3977
- var _path$1;
3978
- function _extends$1() { _extends$1 = 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$1.apply(this, arguments); }
3979
- var SvgControlMenuButton = function SvgControlMenuButton(props) {
3980
- return /*#__PURE__*/React.createElement("svg", _extends$1({
3981
- width: 8,
3982
- height: 8,
3983
- viewBox: "0 0 8 8",
3984
- fill: "currentColor",
3985
- xmlns: "http://www.w3.org/2000/svg"
3986
- }, props), _path$1 || (_path$1 = /*#__PURE__*/React.createElement("path", {
3987
- d: "m.72 7.64 6.39-3.2a.5.5 0 0 0 0-.89L.72.36A.5.5 0 0 0 0 .81v6.38c0 .37.4.61.72.45Z"
3988
- })));
3989
- };
3990
- var controlMenuButtonIcon = SvgControlMenuButton;
3718
+ var _trimmedEndIndex = trimmedEndIndex$1;
3991
3719
 
3992
- var _path;
3993
- function _extends() { _extends = 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.apply(this, arguments); }
3994
- var SvgDividerCollapsed = function SvgDividerCollapsed(props) {
3995
- return /*#__PURE__*/React.createElement("svg", _extends({
3996
- width: 56,
3997
- height: 29,
3998
- viewBox: "0 0 56 29",
3999
- fill: "currentColor",
4000
- xmlns: "http://www.w3.org/2000/svg"
4001
- }, props), _path || (_path = /*#__PURE__*/React.createElement("path", {
4002
- d: "M56 0v29c-.8-1-7-6.1-17.7-8.4L13 15.7A16 16 0 0 1 0 0Z"
4003
- })));
4004
- };
4005
- var headerDividerCollapsedIcon = SvgDividerCollapsed;
3720
+ var trimmedEndIndex = _trimmedEndIndex;
4006
3721
 
4007
- var css_248z$h = ".g-root {\n --aside-header-background-color: var(--g-color-base-warning-light);\n --aside-header-collapse-button-divider-line-color: var(\n --aside-header-header-divider-line-color\n );\n}\n\n.g-root_theme_light,\n.g-root_theme_light-hc {\n --aside-header-divider-line-color: transparent;\n --aside-header-header-divider-line-color: var(--g-color-line-generic);\n}\n\n.g-root_theme_dark,\n.g-root_theme_dark-hc {\n --aside-header-divider-line-color: var(--g-color-line-generic-solid);\n --aside-header-header-divider-line-color: var(--g-color-line-generic-solid);\n}\n\n.gn-aside-header {\n --aside-header-min-width: 56px;\n height: 100%;\n width: 100%;\n position: relative;\n background-color: var(--g-color-base-background);\n}\n.gn-aside-header__aside {\n position: sticky;\n top: 0;\n left: 0;\n height: 100vh;\n width: inherit;\n display: flex;\n flex-direction: column;\n background-color: var(--g-color-base-background);\n z-index: 100;\n box-sizing: border-box;\n}\n.gn-aside-header__aside::after {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n width: 1px;\n height: 100%;\n content: \"\";\n background-color: var(--aside-header-divider-line-color);\n}\n.gn-aside-header__aside-popup-anchor {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n}\n.gn-aside-header__aside-content {\n --gradient-height: 334px;\n display: flex;\n flex-direction: column;\n overflow-x: hidden;\n width: inherit;\n height: inherit;\n position: relative;\n z-index: 2;\n user-select: none;\n}\n.gn-aside-header__aside-content::after {\n position: absolute;\n top: 0;\n right: -100px;\n bottom: 0;\n width: 100px;\n content: \"\";\n box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.1), 0px 0px 24px rgba(0, 0, 0, 0.08);\n}\n.gn-aside-header__aside-content > .gn-aside-header-logo {\n margin: 8px 0;\n}\n.gn-aside-header__aside-content_with-decoration {\n background: linear-gradient(180deg, var(--aside-header-background-color) calc(var(--gradient-height) * 0.33), transparent calc(var(--gradient-height) * 0.88));\n}\n.gn-aside-header_compact .gn-aside-header__aside-content {\n background: transparent;\n}\n.gn-aside-header__header {\n --aside-header-header-divider-height: 29px;\n position: relative;\n z-index: 1;\n flex: none;\n box-sizing: border-box;\n width: 100%;\n padding-top: 8px;\n padding-bottom: 22px;\n}\n.gn-aside-header__header .gn-aside-header__header-divider {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: -2;\n display: none;\n color: var(--aside-header-background-color);\n}\n.gn-aside-header__header_with-decoration::before {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -2;\n display: none;\n width: 100%;\n height: calc(100% - var(--aside-header-header-divider-height));\n content: \"\";\n background-color: var(--aside-header-background-color);\n}\n.gn-aside-header__header::after {\n position: absolute;\n bottom: 12px;\n left: 0;\n z-index: -2;\n width: 100%;\n height: 1px;\n content: \"\";\n background-color: var(--aside-header-header-divider-line-color);\n}\n.gn-aside-header_compact .gn-aside-header__header::before {\n display: block;\n}\n.gn-aside-header_compact .gn-aside-header__header_with-decoration .gn-aside-header__header-divider {\n display: block;\n}\n.gn-aside-header_compact .gn-aside-header__header_with-decoration::after {\n display: none;\n}\n.gn-aside-header__menu-items {\n flex-grow: 1;\n}\n.gn-aside-header__footer {\n flex-shrink: 0;\n width: 100%;\n margin: 8px 0;\n display: flex;\n flex-direction: column;\n}\n.gn-aside-header__panels {\n z-index: 98;\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n overflow: auto;\n}\n.gn-aside-header__panel {\n height: 100%;\n}\n.gn-aside-header__pane-container {\n display: flex;\n outline: none;\n overflow: visible;\n user-select: text;\n flex-direction: row;\n}\n.gn-aside-header__content {\n width: calc(100% - var(--aside-header-size));\n z-index: 95;\n}\n.gn-aside-header__collapse-button {\n --yc-button-background-color-hover: transparent;\n overflow: hidden;\n box-sizing: border-box;\n flex: none;\n width: 100%;\n height: 20px;\n border-top: 1px solid var(--aside-header-collapse-button-divider-line-color);\n margin-top: auto;\n}\n.gn-aside-header__collapse-button > .yc-button__text {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 20px;\n}\n.gn-aside-header__collapse-button:not(.gn-aside-header__collapse-button_compact) .gn-aside-header__collapse-icon {\n transform: rotate(180deg);\n}\n.gn-aside-header__collapse-button .gn-aside-header__collapse-icon {\n color: var(--g-color-text-secondary);\n}\n.gn-aside-header__collapse-button:hover .gn-aside-header__collapse-icon {\n color: var(--g-color-text-primary);\n}";
4008
- styleInject(css_248z$h);
3722
+ /** Used to match leading whitespace. */
3723
+ var reTrimStart = /^\s+/;
4009
3724
 
4010
- // TODO: remove temporary fix for expand button
4011
- const NotIcon = fakeDisplayName('NotIcon', Icon);
4012
- const b$i = block('aside-header');
4013
- class AsideHeader extends React__default.Component {
4014
- constructor() {
4015
- super(...arguments);
4016
- this.asideRef = React__default.createRef();
4017
- this.renderFirstPane = (size) => {
4018
- const { dict, menuItems, panelItems, headerDecoration, multipleTooltip } = this.props;
4019
- return (React__default.createElement(React__default.Fragment, null,
4020
- React__default.createElement("div", { className: b$i('aside'), style: { width: size } },
4021
- React__default.createElement("div", { className: b$i('aside-popup-anchor'), ref: this.asideRef }),
4022
- React__default.createElement("div", { className: b$i('aside-content', { ['with-decoration']: headerDecoration }) },
4023
- this.renderHeader(),
4024
- (menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React__default.createElement(CompositeBar, { type: "menu", items: menuItems, dict: dict, onItemClick: this.onItemClick, multipleTooltip: multipleTooltip })) : (React__default.createElement("div", { className: b$i('menu-items') })),
4025
- this.renderFooter(size),
4026
- this.renderCollapseButton())),
4027
- panelItems && this.renderPanels(size)));
4028
- };
4029
- this.renderSecondPane = (size) => {
4030
- return (React__default.createElement(Content, { size: size, renderContent: this.props.renderContent, className: b$i('content') }));
4031
- };
4032
- this.renderLogo = () => React__default.createElement(Logo$1, Object.assign({}, this.props.logo, { onClick: this.onLogoClick }));
4033
- this.renderHeader = () => (React__default.createElement("div", { className: b$i('header', { ['with-decoration']: this.props.headerDecoration }) },
4034
- this.renderLogo(),
4035
- React__default.createElement(CompositeBar, { type: "subheader", items: this.props.subheaderItems, onItemClick: this.onItemClick }),
4036
- React__default.createElement(Icon, { data: headerDividerCollapsedIcon, className: b$i('header-divider'), width: ASIDE_HEADER_COMPACT_WIDTH, height: "29" })));
4037
- this.renderFooter = (size) => {
4038
- const { renderFooter, compact } = this.props;
4039
- return (React__default.createElement("div", { className: b$i('footer') }, renderFooter === null || renderFooter === void 0 ? void 0 : renderFooter({
4040
- size,
4041
- compact,
4042
- asideRef: this.asideRef,
4043
- })));
4044
- };
4045
- this.renderPanels = (size) => {
4046
- const { panelItems } = this.props;
4047
- return (React__default.createElement(Drawer, { className: b$i('panels'), onVeilClick: this.onCloseDrawer, onEscape: this.onCloseDrawer, style: { left: size } }, panelItems.map((item) => (React__default.createElement(DrawerItem, Object.assign({ key: item.id }, item))))));
4048
- };
4049
- this.renderCollapseButton = () => {
4050
- var _a;
4051
- const { dict, compact } = this.props;
4052
- const typeButton = compact ? Dict.ExpandButton : Dict.CollapseButton;
4053
- return (React__default.createElement(Button, { className: b$i('collapse-button', { compact }), view: "flat", onClick: this.onCollapseButtonClick, title: (_a = dict === null || dict === void 0 ? void 0 : dict[typeButton]) !== null && _a !== void 0 ? _a : defaultDict$2[typeButton] },
4054
- React__default.createElement(NotIcon, { data: controlMenuButtonIcon, className: b$i('collapse-icon'), width: "16", height: "10" })));
4055
- };
4056
- this.onCollapseButtonClick = () => {
4057
- var _a, _b;
4058
- (_b = (_a = this.props).onChangeCompact) === null || _b === void 0 ? void 0 : _b.call(_a, !this.props.compact);
4059
- };
4060
- this.onCloseDrawer = () => {
4061
- var _a, _b;
4062
- (_b = (_a = this.props).onClosePanel) === null || _b === void 0 ? void 0 : _b.call(_a);
4063
- };
4064
- this.onItemClick = (item, collapsed, event) => {
4065
- var _a, _b, _c;
4066
- (_b = (_a = this.props).onClosePanel) === null || _b === void 0 ? void 0 : _b.call(_a);
4067
- (_c = item.onItemClick) === null || _c === void 0 ? void 0 : _c.call(item, item, collapsed, event);
4068
- };
4069
- this.onLogoClick = (event) => {
4070
- var _a, _b, _c, _d;
4071
- (_b = (_a = this.props).onClosePanel) === null || _b === void 0 ? void 0 : _b.call(_a);
4072
- (_d = (_c = this.props.logo).onClick) === null || _d === void 0 ? void 0 : _d.call(_c, event);
4073
- };
4074
- }
4075
- render() {
4076
- const { className, compact } = this.props;
4077
- const size = compact ? ASIDE_HEADER_COMPACT_WIDTH : ASIDE_HEADER_EXPANDED_WIDTH;
4078
- return (React__default.createElement(AsideHeaderContextProvider, { value: { compact, size } },
4079
- React__default.createElement("div", { className: b$i({ compact }, className) },
4080
- React__default.createElement("div", { className: b$i('pane-container') },
4081
- this.renderFirstPane(size),
4082
- this.renderSecondPane(size)))));
4083
- }
3725
+ /**
3726
+ * The base implementation of `_.trim`.
3727
+ *
3728
+ * @private
3729
+ * @param {string} string The string to trim.
3730
+ * @returns {string} Returns the trimmed string.
3731
+ */
3732
+ function baseTrim$1(string) {
3733
+ return string
3734
+ ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
3735
+ : string;
4084
3736
  }
4085
- AsideHeader.defaultProps = {
4086
- panelItems: [],
4087
- subheaderItems: [],
4088
- menuItems: [],
4089
- headerDecoration: true,
4090
- };
4091
3737
 
4092
- /******************************************************************************
4093
- Copyright (c) Microsoft Corporation.
3738
+ var _baseTrim = baseTrim$1;
4094
3739
 
4095
- Permission to use, copy, modify, and/or distribute this software for any
4096
- purpose with or without fee is hereby granted.
3740
+ var root = _root;
4097
3741
 
4098
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
4099
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
4100
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
4101
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
4102
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
4103
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
4104
- PERFORMANCE OF THIS SOFTWARE.
4105
- ***************************************************************************** */
3742
+ /** Built-in value references. */
3743
+ var Symbol$3 = root.Symbol;
4106
3744
 
4107
- function __rest(s, e) {
4108
- var t = {};
4109
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4110
- t[p] = s[p];
4111
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
4112
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
4113
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
4114
- t[p[i]] = s[p[i]];
4115
- }
4116
- return t;
4117
- }
3745
+ var _Symbol = Symbol$3;
4118
3746
 
4119
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
4120
- var e = new Error(message);
4121
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
4122
- };
3747
+ var Symbol$2 = _Symbol;
4123
3748
 
4124
- var css_248z$g = ".gn-footer-item {\n width: 100%;\n height: 40px;\n}";
4125
- styleInject(css_248z$g);
3749
+ /** Used for built-in method references. */
3750
+ var objectProto$1 = Object.prototype;
4126
3751
 
4127
- const b$h = block('footer-item');
4128
- const FooterItem$1 = (_a) => {
4129
- var { item } = _a, props = __rest(_a, ["item"]);
4130
- return (React__default.createElement(Item$1, Object.assign({}, props, { item: Object.assign({ iconSize: ASIDE_HEADER_FOOTER_ICON_SIZE }, item), className: b$h({ compact: props.compact }), onItemClick: item.onItemClick, onItemClickCapture: item.onItemClickCapture })));
4131
- };
4132
-
4133
- var css_248z$f = ".gn-action-bar-group {\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: flex-start;\n margin: 0;\n padding: 0;\n}\n.gn-action-bar-group_pull_left {\n margin-left: 0;\n margin-right: auto;\n}\n.gn-action-bar-group_pull_right {\n margin-left: auto;\n margin-right: 0;\n}\n.gn-action-bar-group_pull_center {\n margin-left: auto;\n margin-right: auto;\n}";
4134
- styleInject(css_248z$f);
3752
+ /** Used to check objects for own properties. */
3753
+ var hasOwnProperty = objectProto$1.hasOwnProperty;
4135
3754
 
4136
- const b$g = block('action-bar-group');
4137
- const ActionBarGroup = ({ children, className, pull }) => {
4138
- return (React__default.createElement("ul", { className: b$g({ pull }, className), role: "group" }, children));
4139
- };
4140
- ActionBarGroup.displayName = 'ActionBar.Group';
3755
+ /**
3756
+ * Used to resolve the
3757
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
3758
+ * of values.
3759
+ */
3760
+ var nativeObjectToString$1 = objectProto$1.toString;
4141
3761
 
4142
- var css_248z$e = ".gn-action-bar-item {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.gn-action-bar-item_pull_left {\n margin-left: 0;\n margin-right: auto;\n}\n.gn-action-bar-item_pull_right {\n margin-left: auto;\n margin-right: 0;\n}\n.gn-action-bar-item_pull_center {\n margin-left: auto;\n margin-right: auto;\n}\n.gn-action-bar-item + .gn-action-bar-item_spacing {\n margin-left: 8px;\n}";
4143
- styleInject(css_248z$e);
3762
+ /** Built-in value references. */
3763
+ var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : undefined;
4144
3764
 
4145
- const b$f = block('action-bar-item');
4146
- const ActionBarItem = ({ children, className, pull, spacing = true }) => {
4147
- return React__default.createElement("li", { className: b$f({ pull, spacing }, className) }, children);
4148
- };
4149
- ActionBarItem.displayName = 'ActionBar.Item';
3765
+ /**
3766
+ * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
3767
+ *
3768
+ * @private
3769
+ * @param {*} value The value to query.
3770
+ * @returns {string} Returns the raw `toStringTag`.
3771
+ */
3772
+ function getRawTag$1(value) {
3773
+ var isOwn = hasOwnProperty.call(value, symToStringTag$1),
3774
+ tag = value[symToStringTag$1];
4150
3775
 
4151
- var css_248z$d = ".gn-action-bar-section {\n display: flex;\n flex-flow: row nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.gn-action-bar-section + .gn-action-bar-section {\n border-left: solid 1px var(--g-color-line-generic);\n}\n.gn-action-bar-section_type_primary {\n flex: 1 1 auto;\n padding-left: 20px;\n padding-right: 20px;\n}\n.gn-action-bar-section_type_secondary {\n padding-left: 6px;\n padding-right: 6px;\n}";
4152
- styleInject(css_248z$d);
3776
+ try {
3777
+ value[symToStringTag$1] = undefined;
3778
+ var unmasked = true;
3779
+ } catch (e) {}
4153
3780
 
4154
- const b$e = block('action-bar-section');
4155
- const ActionBarSection = ({ children, type = 'primary' }) => {
4156
- return React__default.createElement("div", { className: b$e({ type }) }, children);
4157
- };
4158
- ActionBarSection.displayName = 'ActionBar.Section';
3781
+ var result = nativeObjectToString$1.call(value);
3782
+ if (unmasked) {
3783
+ if (isOwn) {
3784
+ value[symToStringTag$1] = tag;
3785
+ } else {
3786
+ delete value[symToStringTag$1];
3787
+ }
3788
+ }
3789
+ return result;
3790
+ }
4159
3791
 
4160
- var css_248z$c = ".gn-action-bar-separator {\n list-style: none;\n margin: 0;\n padding: 0;\n margin-left: 6px;\n margin-right: 6px;\n border-right: solid 1px var(--g-color-line-generic);\n height: 40px;\n}";
4161
- styleInject(css_248z$c);
3792
+ var _getRawTag = getRawTag$1;
4162
3793
 
4163
- const b$d = block('action-bar-separator');
4164
- const ActionBarSeparator = () => {
4165
- return React__default.createElement("li", { role: "separator", className: b$d() });
4166
- };
4167
- ActionBarSeparator.displayName = 'ActionBar.Separator';
3794
+ /** Used for built-in method references. */
4168
3795
 
4169
- var css_248z$b = ".gn-action-bar {\n box-sizing: border-box;\n height: 40px;\n border-bottom: solid 1px var(--g-color-line-generic);\n display: flex;\n flex-flow: row nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}";
4170
- styleInject(css_248z$b);
3796
+ var objectProto = Object.prototype;
4171
3797
 
4172
- const b$c = block('action-bar');
4173
- const ActionBar = ({ children, className, 'aria-label': ariaLabel }) => {
4174
- return (React__default.createElement("section", { className: b$c(null, className), "aria-label": ariaLabel }, children));
4175
- };
4176
- ActionBar.displayName = 'ActionBar';
4177
- const PublicActionBar = Object.assign(ActionBar, {
4178
- Section: ActionBarSection,
4179
- Group: ActionBarGroup,
4180
- Item: ActionBarItem,
4181
- Separator: ActionBarSeparator,
4182
- });
3798
+ /**
3799
+ * Used to resolve the
3800
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
3801
+ * of values.
3802
+ */
3803
+ var nativeObjectToString = objectProto.toString;
4183
3804
 
4184
- var css_248z$a = ".gn-title {\n box-sizing: border-box;\n padding: 14px 10px 14px 20px;\n min-height: 64px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.gn-title_separator {\n border-bottom: 1px solid var(--g-color-line-generic);\n}\n.gn-title__text {\n margin: 0;\n margin-right: 20px;\n}";
4185
- styleInject(css_248z$a);
3805
+ /**
3806
+ * Converts `value` to a string using `Object.prototype.toString`.
3807
+ *
3808
+ * @private
3809
+ * @param {*} value The value to convert.
3810
+ * @returns {string} Returns the converted string.
3811
+ */
3812
+ function objectToString$1(value) {
3813
+ return nativeObjectToString.call(value);
3814
+ }
4186
3815
 
4187
- const b$b = block('title');
4188
- const defaultDict$1 = {
4189
- close: 'Close',
4190
- };
4191
- const Title = ({ children, closeIconSize = 23, hasSeparator, dict = defaultDict$1, onClose, }) => {
4192
- return (React__default.createElement("div", { className: b$b({ separator: hasSeparator }) },
4193
- React__default.createElement(Text, { className: b$b('text'), as: 'h3', variant: 'subheader-3' }, children),
4194
- onClose && (React__default.createElement(Button, { onClick: onClose, view: "flat", size: "l", extraProps: {
4195
- 'aria-label': dict['close'],
4196
- } },
4197
- React__default.createElement(Icon, { data: Xmark, size: closeIconSize })))));
4198
- };
4199
- Title.displayName = 'Title';
3816
+ var _objectToString = objectToString$1;
4200
3817
 
4201
- function flattenHotkeyGroups(hotkeys) {
4202
- const result = [];
4203
- for (const hotkeysGroup of hotkeys) {
4204
- result.push({
4205
- title: hotkeysGroup.title,
4206
- group: true,
4207
- });
4208
- result.push(...hotkeysGroup.items);
4209
- }
4210
- return result;
4211
- }
3818
+ var Symbol$1 = _Symbol,
3819
+ getRawTag = _getRawTag,
3820
+ objectToString = _objectToString;
4212
3821
 
4213
- function filterHotkeys(hotkeys, filter) {
4214
- if (filter) {
4215
- const result = [];
4216
- const normalizedFilter = filter.toLowerCase();
4217
- for (const hotkeysBlock of hotkeys) {
4218
- const filteredItems = hotkeysBlock.items.filter((item) => item.title.toLowerCase().includes(normalizedFilter));
4219
- if (filteredItems.length > 0) {
4220
- result.push(Object.assign(Object.assign({}, hotkeysBlock), { items: filteredItems }));
4221
- }
4222
- }
4223
- return result;
4224
- }
4225
- return hotkeys;
4226
- }
3822
+ /** `Object#toString` result references. */
3823
+ var nullTag = '[object Null]',
3824
+ undefinedTag = '[object Undefined]';
4227
3825
 
4228
- var css_248z$9 = ".gn-hotkeys-panel {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n --hotkeys-panel-width: 400px;\n --hotkeys-panel-vertical-padding: 18px;\n --hotkeys-panel-horizontal-padding: 24px;\n}\n.gn-hotkeys-panel__drawer-item {\n width: var(--hotkeys-panel-width);\n padding: var(--hotkeys-panel-vertical-padding) 0;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n}\n.gn-hotkeys-panel__title {\n margin: 0 var(--hotkeys-panel-horizontal-padding) 16px var(--hotkeys-panel-horizontal-padding);\n}\n.gn-hotkeys-panel__search {\n padding: 0 var(--hotkeys-panel-horizontal-padding);\n margin-bottom: 14px;\n}\n.gn-hotkeys-panel__list {\n flex: 1;\n overflow-y: auto;\n}\n.gn-hotkeys-panel__item {\n height: auto;\n padding: 8px var(--hotkeys-panel-horizontal-padding);\n}\n.gn-hotkeys-panel__item.yc-list__item_active {\n background: inherit;\n}\n.gn-hotkeys-panel__item-content {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n width: 100%;\n font-size: var(--g-text-body-1-font-size);\n line-height: var(--g-text-body-1-line-height);\n color: var(--g-color-text-primary);\n}\n.gn-hotkeys-panel__item-content_group {\n font-size: var(--g-text-body-2-font-size);\n font-weight: 500;\n line-height: var(--g-text-body-2-line-height);\n}\n.gn-hotkeys-panel__hotkey {\n color: var(--g-color-text-complementary);\n}";
4229
- styleInject(css_248z$9);
3826
+ /** Built-in value references. */
3827
+ var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;
4230
3828
 
4231
- const b$a = block('hotkeys-panel');
4232
- function HotkeysPanel(_a) {
4233
- var { visible, onClose, leftOffset, topOffset, className, preventScrollBody, hotkeys, itemClassName, filterPlaceholder, title, emptyState } = _a, listProps = __rest(_a, ["visible", "onClose", "leftOffset", "topOffset", "className", "preventScrollBody", "hotkeys", "itemClassName", "filterPlaceholder", "title", "emptyState"]);
4234
- const [filter, setFilter] = useState('');
4235
- const hotkeysList = useMemo(() => {
4236
- const filteredHotkeys = filterHotkeys(hotkeys, filter);
4237
- return flattenHotkeyGroups(filteredHotkeys);
4238
- }, [hotkeys, filter]);
4239
- const renderItem = useCallback((item) => (React__default.createElement("div", { className: b$a('item-content', { group: item.group }), key: item.title },
4240
- item.title,
4241
- item.value && React__default.createElement(Hotkey, { className: b$a('hotkey'), value: item.value }))), []);
4242
- const drawerItemContent = (React__default.createElement(React__default.Fragment, null,
4243
- React__default.createElement("h2", { className: b$a('title') }, title),
4244
- React__default.createElement(TextInput, { value: filter, onUpdate: setFilter, placeholder: filterPlaceholder, autoFocus: true, className: b$a('search') }),
4245
- React__default.createElement(List, Object.assign({ className: b$a('list'), virtualized: false, filterable: false, items: hotkeysList, renderItem: renderItem, itemClassName: b$a('item', itemClassName), emptyPlaceholder: emptyState }, listProps))));
4246
- return (React__default.createElement(Drawer, { className: b$a(null, className), onVeilClick: onClose, onEscape: onClose, preventScrollBody: preventScrollBody, style: {
4247
- left: leftOffset,
4248
- top: topOffset,
4249
- } },
4250
- React__default.createElement(DrawerItem, { id: "hotkeys", visible: visible, className: b$a('drawer-item'), content: drawerItemContent })));
3829
+ /**
3830
+ * The base implementation of `getTag` without fallbacks for buggy environments.
3831
+ *
3832
+ * @private
3833
+ * @param {*} value The value to query.
3834
+ * @returns {string} Returns the `toStringTag`.
3835
+ */
3836
+ function baseGetTag$1(value) {
3837
+ if (value == null) {
3838
+ return value === undefined ? undefinedTag : nullTag;
3839
+ }
3840
+ return (symToStringTag && symToStringTag in Object(value))
3841
+ ? getRawTag(value)
3842
+ : objectToString(value);
4251
3843
  }
4252
3844
 
3845
+ var _baseGetTag = baseGetTag$1;
3846
+
4253
3847
  /**
4254
- * This method returns the first argument it receives.
3848
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
3849
+ * and has a `typeof` result of "object".
4255
3850
  *
4256
3851
  * @static
4257
- * @since 0.1.0
4258
3852
  * @memberOf _
4259
- * @category Util
4260
- * @param {*} value Any value.
4261
- * @returns {*} Returns `value`.
3853
+ * @since 4.0.0
3854
+ * @category Lang
3855
+ * @param {*} value The value to check.
3856
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
4262
3857
  * @example
4263
3858
  *
4264
- * var object = { 'a': 1 };
3859
+ * _.isObjectLike({});
3860
+ * // => true
4265
3861
  *
4266
- * console.log(_.identity(object) === object);
3862
+ * _.isObjectLike([1, 2, 3]);
4267
3863
  * // => true
3864
+ *
3865
+ * _.isObjectLike(_.noop);
3866
+ * // => false
3867
+ *
3868
+ * _.isObjectLike(null);
3869
+ * // => false
4268
3870
  */
4269
3871
 
4270
- function identity(value) {
4271
- return value;
3872
+ function isObjectLike$1(value) {
3873
+ return value != null && typeof value == 'object';
4272
3874
  }
4273
3875
 
4274
- var identity_1 = identity;
3876
+ var isObjectLike_1 = isObjectLike$1;
3877
+
3878
+ var baseGetTag = _baseGetTag,
3879
+ isObjectLike = isObjectLike_1;
3880
+
3881
+ /** `Object#toString` result references. */
3882
+ var symbolTag = '[object Symbol]';
4275
3883
 
4276
3884
  /**
4277
- * Checks if `value` is the
4278
- * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
4279
- * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
3885
+ * Checks if `value` is classified as a `Symbol` primitive or object.
4280
3886
  *
4281
3887
  * @static
4282
3888
  * @memberOf _
4283
- * @since 0.1.0
3889
+ * @since 4.0.0
4284
3890
  * @category Lang
4285
3891
  * @param {*} value The value to check.
4286
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
3892
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
4287
3893
  * @example
4288
3894
  *
4289
- * _.isObject({});
4290
- * // => true
4291
- *
4292
- * _.isObject([1, 2, 3]);
4293
- * // => true
4294
- *
4295
- * _.isObject(_.noop);
3895
+ * _.isSymbol(Symbol.iterator);
4296
3896
  * // => true
4297
3897
  *
4298
- * _.isObject(null);
3898
+ * _.isSymbol('abc');
4299
3899
  * // => false
4300
3900
  */
4301
-
4302
- function isObject$2(value) {
4303
- var type = typeof value;
4304
- return value != null && (type == 'object' || type == 'function');
3901
+ function isSymbol$1(value) {
3902
+ return typeof value == 'symbol' ||
3903
+ (isObjectLike(value) && baseGetTag(value) == symbolTag);
4305
3904
  }
4306
3905
 
4307
- var isObject_1 = isObject$2;
3906
+ var isSymbol_1 = isSymbol$1;
4308
3907
 
4309
- /** Detect free variable `global` from Node.js. */
3908
+ var baseTrim = _baseTrim,
3909
+ isObject$1 = isObject_1,
3910
+ isSymbol = isSymbol_1;
4310
3911
 
4311
- var freeGlobal$1 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
3912
+ /** Used as references for various `Number` constants. */
3913
+ var NAN = 0 / 0;
4312
3914
 
4313
- var _freeGlobal = freeGlobal$1;
3915
+ /** Used to detect bad signed hexadecimal string values. */
3916
+ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
4314
3917
 
4315
- var freeGlobal = _freeGlobal;
4316
-
4317
- /** Detect free variable `self`. */
4318
- var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
4319
-
4320
- /** Used as a reference to the global object. */
4321
- var root$2 = freeGlobal || freeSelf || Function('return this')();
4322
-
4323
- var _root = root$2;
4324
-
4325
- var root$1 = _root;
4326
-
4327
- /**
4328
- * Gets the timestamp of the number of milliseconds that have elapsed since
4329
- * the Unix epoch (1 January 1970 00:00:00 UTC).
4330
- *
4331
- * @static
4332
- * @memberOf _
4333
- * @since 2.4.0
4334
- * @category Date
4335
- * @returns {number} Returns the timestamp.
4336
- * @example
4337
- *
4338
- * _.defer(function(stamp) {
4339
- * console.log(_.now() - stamp);
4340
- * }, _.now());
4341
- * // => Logs the number of milliseconds it took for the deferred invocation.
4342
- */
4343
- var now$1 = function() {
4344
- return root$1.Date.now();
4345
- };
4346
-
4347
- var now_1 = now$1;
4348
-
4349
- /** Used to match a single whitespace character. */
4350
-
4351
- var reWhitespace = /\s/;
4352
-
4353
- /**
4354
- * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
4355
- * character of `string`.
4356
- *
4357
- * @private
4358
- * @param {string} string The string to inspect.
4359
- * @returns {number} Returns the index of the last non-whitespace character.
4360
- */
4361
- function trimmedEndIndex$1(string) {
4362
- var index = string.length;
4363
-
4364
- while (index-- && reWhitespace.test(string.charAt(index))) {}
4365
- return index;
4366
- }
4367
-
4368
- var _trimmedEndIndex = trimmedEndIndex$1;
4369
-
4370
- var trimmedEndIndex = _trimmedEndIndex;
4371
-
4372
- /** Used to match leading whitespace. */
4373
- var reTrimStart = /^\s+/;
4374
-
4375
- /**
4376
- * The base implementation of `_.trim`.
4377
- *
4378
- * @private
4379
- * @param {string} string The string to trim.
4380
- * @returns {string} Returns the trimmed string.
4381
- */
4382
- function baseTrim$1(string) {
4383
- return string
4384
- ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
4385
- : string;
4386
- }
4387
-
4388
- var _baseTrim = baseTrim$1;
4389
-
4390
- var root = _root;
4391
-
4392
- /** Built-in value references. */
4393
- var Symbol$3 = root.Symbol;
4394
-
4395
- var _Symbol = Symbol$3;
4396
-
4397
- var Symbol$2 = _Symbol;
4398
-
4399
- /** Used for built-in method references. */
4400
- var objectProto$1 = Object.prototype;
4401
-
4402
- /** Used to check objects for own properties. */
4403
- var hasOwnProperty = objectProto$1.hasOwnProperty;
4404
-
4405
- /**
4406
- * Used to resolve the
4407
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
4408
- * of values.
4409
- */
4410
- var nativeObjectToString$1 = objectProto$1.toString;
4411
-
4412
- /** Built-in value references. */
4413
- var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : undefined;
4414
-
4415
- /**
4416
- * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
4417
- *
4418
- * @private
4419
- * @param {*} value The value to query.
4420
- * @returns {string} Returns the raw `toStringTag`.
4421
- */
4422
- function getRawTag$1(value) {
4423
- var isOwn = hasOwnProperty.call(value, symToStringTag$1),
4424
- tag = value[symToStringTag$1];
4425
-
4426
- try {
4427
- value[symToStringTag$1] = undefined;
4428
- var unmasked = true;
4429
- } catch (e) {}
4430
-
4431
- var result = nativeObjectToString$1.call(value);
4432
- if (unmasked) {
4433
- if (isOwn) {
4434
- value[symToStringTag$1] = tag;
4435
- } else {
4436
- delete value[symToStringTag$1];
4437
- }
4438
- }
4439
- return result;
4440
- }
4441
-
4442
- var _getRawTag = getRawTag$1;
4443
-
4444
- /** Used for built-in method references. */
4445
-
4446
- var objectProto = Object.prototype;
4447
-
4448
- /**
4449
- * Used to resolve the
4450
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
4451
- * of values.
4452
- */
4453
- var nativeObjectToString = objectProto.toString;
4454
-
4455
- /**
4456
- * Converts `value` to a string using `Object.prototype.toString`.
4457
- *
4458
- * @private
4459
- * @param {*} value The value to convert.
4460
- * @returns {string} Returns the converted string.
4461
- */
4462
- function objectToString$1(value) {
4463
- return nativeObjectToString.call(value);
4464
- }
4465
-
4466
- var _objectToString = objectToString$1;
4467
-
4468
- var Symbol$1 = _Symbol,
4469
- getRawTag = _getRawTag,
4470
- objectToString = _objectToString;
4471
-
4472
- /** `Object#toString` result references. */
4473
- var nullTag = '[object Null]',
4474
- undefinedTag = '[object Undefined]';
4475
-
4476
- /** Built-in value references. */
4477
- var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;
4478
-
4479
- /**
4480
- * The base implementation of `getTag` without fallbacks for buggy environments.
4481
- *
4482
- * @private
4483
- * @param {*} value The value to query.
4484
- * @returns {string} Returns the `toStringTag`.
4485
- */
4486
- function baseGetTag$1(value) {
4487
- if (value == null) {
4488
- return value === undefined ? undefinedTag : nullTag;
4489
- }
4490
- return (symToStringTag && symToStringTag in Object(value))
4491
- ? getRawTag(value)
4492
- : objectToString(value);
4493
- }
4494
-
4495
- var _baseGetTag = baseGetTag$1;
4496
-
4497
- /**
4498
- * Checks if `value` is object-like. A value is object-like if it's not `null`
4499
- * and has a `typeof` result of "object".
4500
- *
4501
- * @static
4502
- * @memberOf _
4503
- * @since 4.0.0
4504
- * @category Lang
4505
- * @param {*} value The value to check.
4506
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
4507
- * @example
4508
- *
4509
- * _.isObjectLike({});
4510
- * // => true
4511
- *
4512
- * _.isObjectLike([1, 2, 3]);
4513
- * // => true
4514
- *
4515
- * _.isObjectLike(_.noop);
4516
- * // => false
4517
- *
4518
- * _.isObjectLike(null);
4519
- * // => false
4520
- */
4521
-
4522
- function isObjectLike$1(value) {
4523
- return value != null && typeof value == 'object';
4524
- }
4525
-
4526
- var isObjectLike_1 = isObjectLike$1;
4527
-
4528
- var baseGetTag = _baseGetTag,
4529
- isObjectLike = isObjectLike_1;
4530
-
4531
- /** `Object#toString` result references. */
4532
- var symbolTag = '[object Symbol]';
4533
-
4534
- /**
4535
- * Checks if `value` is classified as a `Symbol` primitive or object.
4536
- *
4537
- * @static
4538
- * @memberOf _
4539
- * @since 4.0.0
4540
- * @category Lang
4541
- * @param {*} value The value to check.
4542
- * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
4543
- * @example
4544
- *
4545
- * _.isSymbol(Symbol.iterator);
4546
- * // => true
4547
- *
4548
- * _.isSymbol('abc');
4549
- * // => false
4550
- */
4551
- function isSymbol$1(value) {
4552
- return typeof value == 'symbol' ||
4553
- (isObjectLike(value) && baseGetTag(value) == symbolTag);
4554
- }
4555
-
4556
- var isSymbol_1 = isSymbol$1;
4557
-
4558
- var baseTrim = _baseTrim,
4559
- isObject$1 = isObject_1,
4560
- isSymbol = isSymbol_1;
4561
-
4562
- /** Used as references for various `Number` constants. */
4563
- var NAN = 0 / 0;
4564
-
4565
- /** Used to detect bad signed hexadecimal string values. */
4566
- var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
4567
-
4568
- /** Used to detect binary string values. */
4569
- var reIsBinary = /^0b[01]+$/i;
3918
+ /** Used to detect binary string values. */
3919
+ var reIsBinary = /^0b[01]+$/i;
4570
3920
 
4571
3921
  /** Used to detect octal string values. */
4572
3922
  var reIsOctal = /^0o[0-7]+$/i;
@@ -4697,120 +4047,1004 @@ function debounce(func, wait, options) {
4697
4047
  maxing = false,
4698
4048
  trailing = true;
4699
4049
 
4700
- if (typeof func != 'function') {
4701
- throw new TypeError(FUNC_ERROR_TEXT);
4702
- }
4703
- wait = toNumber(wait) || 0;
4704
- if (isObject(options)) {
4705
- leading = !!options.leading;
4706
- maxing = 'maxWait' in options;
4707
- maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
4708
- trailing = 'trailing' in options ? !!options.trailing : trailing;
4709
- }
4050
+ if (typeof func != 'function') {
4051
+ throw new TypeError(FUNC_ERROR_TEXT);
4052
+ }
4053
+ wait = toNumber(wait) || 0;
4054
+ if (isObject(options)) {
4055
+ leading = !!options.leading;
4056
+ maxing = 'maxWait' in options;
4057
+ maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
4058
+ trailing = 'trailing' in options ? !!options.trailing : trailing;
4059
+ }
4060
+
4061
+ function invokeFunc(time) {
4062
+ var args = lastArgs,
4063
+ thisArg = lastThis;
4064
+
4065
+ lastArgs = lastThis = undefined;
4066
+ lastInvokeTime = time;
4067
+ result = func.apply(thisArg, args);
4068
+ return result;
4069
+ }
4070
+
4071
+ function leadingEdge(time) {
4072
+ // Reset any `maxWait` timer.
4073
+ lastInvokeTime = time;
4074
+ // Start the timer for the trailing edge.
4075
+ timerId = setTimeout(timerExpired, wait);
4076
+ // Invoke the leading edge.
4077
+ return leading ? invokeFunc(time) : result;
4078
+ }
4079
+
4080
+ function remainingWait(time) {
4081
+ var timeSinceLastCall = time - lastCallTime,
4082
+ timeSinceLastInvoke = time - lastInvokeTime,
4083
+ timeWaiting = wait - timeSinceLastCall;
4084
+
4085
+ return maxing
4086
+ ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
4087
+ : timeWaiting;
4088
+ }
4089
+
4090
+ function shouldInvoke(time) {
4091
+ var timeSinceLastCall = time - lastCallTime,
4092
+ timeSinceLastInvoke = time - lastInvokeTime;
4093
+
4094
+ // Either this is the first call, activity has stopped and we're at the
4095
+ // trailing edge, the system time has gone backwards and we're treating
4096
+ // it as the trailing edge, or we've hit the `maxWait` limit.
4097
+ return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
4098
+ (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
4099
+ }
4100
+
4101
+ function timerExpired() {
4102
+ var time = now();
4103
+ if (shouldInvoke(time)) {
4104
+ return trailingEdge(time);
4105
+ }
4106
+ // Restart the timer.
4107
+ timerId = setTimeout(timerExpired, remainingWait(time));
4108
+ }
4109
+
4110
+ function trailingEdge(time) {
4111
+ timerId = undefined;
4112
+
4113
+ // Only invoke if we have `lastArgs` which means `func` has been
4114
+ // debounced at least once.
4115
+ if (trailing && lastArgs) {
4116
+ return invokeFunc(time);
4117
+ }
4118
+ lastArgs = lastThis = undefined;
4119
+ return result;
4120
+ }
4121
+
4122
+ function cancel() {
4123
+ if (timerId !== undefined) {
4124
+ clearTimeout(timerId);
4125
+ }
4126
+ lastInvokeTime = 0;
4127
+ lastArgs = lastCallTime = lastThis = timerId = undefined;
4128
+ }
4129
+
4130
+ function flush() {
4131
+ return timerId === undefined ? result : trailingEdge(now());
4132
+ }
4133
+
4134
+ function debounced() {
4135
+ var time = now(),
4136
+ isInvoking = shouldInvoke(time);
4137
+
4138
+ lastArgs = arguments;
4139
+ lastThis = this;
4140
+ lastCallTime = time;
4141
+
4142
+ if (isInvoking) {
4143
+ if (timerId === undefined) {
4144
+ return leadingEdge(lastCallTime);
4145
+ }
4146
+ if (maxing) {
4147
+ // Handle invocations in a tight loop.
4148
+ clearTimeout(timerId);
4149
+ timerId = setTimeout(timerExpired, wait);
4150
+ return invokeFunc(lastCallTime);
4151
+ }
4152
+ }
4153
+ if (timerId === undefined) {
4154
+ timerId = setTimeout(timerExpired, wait);
4155
+ }
4156
+ return result;
4157
+ }
4158
+ debounced.cancel = cancel;
4159
+ debounced.flush = flush;
4160
+ return debounced;
4161
+ }
4162
+
4163
+ var debounce_1 = debounce;
4164
+
4165
+ var css_248z$l = ".gn-composite-bar-highlighted-item {\n position: absolute;\n z-index: 10000;\n display: flex;\n justify-content: center;\n}\n.gn-composite-bar-highlighted-item__icon {\n width: var(--gn-aside-header-item-icon-background-size);\n height: var(--gn-aside-header-item-icon-background-size);\n border-radius: 7px;\n cursor: pointer;\n background-color: var(--g-color-base-background);\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n transform: translateY(1px);\n overflow: hidden;\n box-shadow: 0 8px 20px 0 var(--g-color-sfx-shadow);\n}\n.gn-composite-bar-highlighted-item__icon::before {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: -1;\n background-color: var(--g-color-base-selection);\n}\n.gn-composite-bar-highlighted-item__icon:hover::before {\n background-color: var(--g-color-base-selection-hover);\n}";
4166
+ styleInject(css_248z$l);
4167
+
4168
+ const b$m = block('composite-bar-highlighted-item');
4169
+ const DEBOUNCE_TIME = 200;
4170
+ const HighlightedItem = ({ iconRef, iconNode, onClick, onClickCapture, openModalSubscriber, }) => {
4171
+ const [{ top, left, width, height }, setPosition] = useState({
4172
+ top: 0,
4173
+ left: 0,
4174
+ width: 0,
4175
+ height: 0,
4176
+ });
4177
+ const [isModalOpen, setIsModalOpen] = useState(false);
4178
+ const handleResize = useCallback(debounce_1(() => {
4179
+ var _a;
4180
+ const { top = 0, left = 0, width = 0, height = 0, } = ((_a = iconRef === null || iconRef === void 0 ? void 0 : iconRef.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) || {};
4181
+ setPosition({
4182
+ top: top + window.scrollY,
4183
+ left: left + window.scrollX,
4184
+ width,
4185
+ height,
4186
+ });
4187
+ }, DEBOUNCE_TIME, { leading: true }), []);
4188
+ useEffect(() => {
4189
+ if (!isModalOpen) {
4190
+ return;
4191
+ }
4192
+ handleResize();
4193
+ window.addEventListener('resize', handleResize);
4194
+ return () => window.removeEventListener('resize', handleResize);
4195
+ }, [handleResize, isModalOpen]);
4196
+ openModalSubscriber === null || openModalSubscriber === void 0 ? void 0 : openModalSubscriber((open) => {
4197
+ setIsModalOpen(open);
4198
+ });
4199
+ if (!iconNode || !isModalOpen) {
4200
+ return null;
4201
+ }
4202
+ return (React__default.createElement(Portal, null,
4203
+ React__default.createElement("div", { className: b$m(), style: { left, top, width, height }, onClick: onClick, onClickCapture: onClickCapture, "data-toast": true },
4204
+ React__default.createElement("div", { className: b$m('icon') }, iconNode))));
4205
+ };
4206
+ HighlightedItem.displayName = 'HighlightedItem';
4207
+
4208
+ var css_248z$k = ".gn-composite-bar-item {\n --gn-composite-bar-item-action-size: 36px;\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n cursor: pointer;\n}\n.gn-composite-bar-item__icon {\n color: var(--g-color-text-misc);\n}\n.gn-footer-item .gn-composite-bar-item__icon, .gn-composite-bar-highlighted-item .gn-composite-bar-item__icon {\n color: var(--gn-aside-header-footer-item-icon-color);\n}\n.gn-composite-bar_subheader .gn-composite-bar-item__icon {\n color: var(--gn-aside-header-subheader-item-icon-color);\n}\n.gn-composite-bar-item__icon-place {\n flex-shrink: 0;\n width: var(--gn-aside-header-min-width);\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n}\n.gn-composite-bar-item__title {\n display: flex;\n overflow: hidden;\n}\n.gn-composite-bar-item__title-text {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.gn-composite-bar-item__title-adornment {\n margin: 0 10px;\n}\n.gn-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.gn-composite-bar-item__collapse-item .gn-composite-bar-item__title-adornment {\n margin-right: 0;\n}\n.gn-composite-bar-item__menu-divider {\n margin: 0 8px;\n width: 100%;\n border-top: 1px solid var(--g-color-line-generic);\n cursor: default;\n}\n.gn-composite-bar-item__collapse-items-popup-content {\n padding: 4px 0;\n}\n.gn-composite-bar-item__link {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n}\n.gn-composite-bar-item__link, .gn-composite-bar-item__link:hover, .gn-composite-bar-item__link:active, .gn-composite-bar-item__link:visited, .gn-composite-bar-item__link:focus {\n text-decoration: none;\n outline: none;\n color: inherit;\n}\n.gn-composite-bar-item__btn-icon {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.gn-composite-bar-item_type_action {\n justify-content: center;\n height: var(--gn-composite-bar-item-action-size);\n margin: 0 10px 8px;\n background: var(--g-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(--gn-composite-bar-item-action-size);\n transition: transform 0.1s ease-out, background-color 0.15s linear;\n}\n.gn-composite-bar-item_type_action:focus {\n box-shadow: 0 0 0 2px var(--g-color-line-misc);\n}\n.gn-composite-bar-item_type_action:focus:not(:focus-visible) {\n box-shadow: none;\n}\n.gn-composite-bar-item_type_action:hover {\n background-color: var(--g-color-base-float-hover);\n}\n.gn-composite-bar-item_type_action:active {\n box-shadow: 0 1px 2px var(--g-color-sfx-shadow);\n transition: none;\n transform: scale(0.96);\n}\n.gn-composite-bar-item_type_action .gn-composite-bar-item__icon-place {\n width: var(--gn-composite-bar-item-action-size);\n}\n.gn-composite-bar-item_type_action .gn-composite-bar-item__title {\n margin-right: 16px;\n}\n.gn-composite-bar-item__icon-tooltip_item-type_action {\n margin-left: 10px;\n}\n.gn-composite-bar-item:not(.gn-composite-bar-item_compact).gn-composite-bar-item_current.gn-composite-bar-item_type_regular {\n background-color: var(--g-color-base-selection);\n}\n.gn-composite-bar-item:not(.gn-composite-bar-item_compact):not(.gn-composite-bar-item_current):hover.gn-composite-bar-item_type_regular {\n background-color: var(--g-color-base-simple-hover);\n}\n.gn-composite-bar-item_compact.gn-composite-bar-item_type_action {\n width: var(--gn-composite-bar-item-action-size);\n}\n.gn-composite-bar-item_compact.gn-composite-bar-item_type_action .gn-composite-bar-item__title {\n margin: 0;\n}\n.gn-composite-bar-item_compact.gn-composite-bar-item_current.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon {\n position: relative;\n background-color: transparent;\n}\n.gn-composite-bar-item_compact.gn-composite-bar-item_current.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: -1;\n width: var(--gn-aside-header-item-icon-background-size);\n height: var(--gn-aside-header-item-icon-background-size);\n margin-top: -19px;\n margin-left: -19px;\n border-radius: 7px;\n}\n.gn-composite-bar-item_compact.gn-composite-bar-item_current.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon::before {\n background-color: var(--g-color-base-selection);\n}\n.gn-composite-bar-item_compact:not(.gn-composite-bar-item_current):hover.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon {\n position: relative;\n background-color: transparent;\n}\n.gn-composite-bar-item_compact:not(.gn-composite-bar-item_current):hover.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon::before {\n content: \"\";\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: -1;\n width: var(--gn-aside-header-item-icon-background-size);\n height: var(--gn-aside-header-item-icon-background-size);\n margin-top: -19px;\n margin-left: -19px;\n border-radius: 7px;\n}\n.gn-composite-bar-item_compact:not(.gn-composite-bar-item_current):hover.gn-composite-bar-item_type_regular .gn-composite-bar-item__btn-icon::before {\n background-color: var(--g-color-base-simple-hover);\n}";
4209
+ styleInject(css_248z$k);
4210
+
4211
+ const b$l = block('composite-bar-item');
4212
+ function renderItemTitle(item) {
4213
+ let titleNode = React__default.createElement("div", { className: b$l('title-text') }, item.title);
4214
+ if (item.rightAdornment) {
4215
+ titleNode = (React__default.createElement(React__default.Fragment, null,
4216
+ titleNode,
4217
+ React__default.createElement("div", { className: b$l('title-adornment') }, item.rightAdornment)));
4218
+ }
4219
+ return titleNode;
4220
+ }
4221
+ const defaultPopupPlacement = ['right-end'];
4222
+ const defaultPopupOffset = [-20, 8];
4223
+ const Item$1 = (props) => {
4224
+ const { item, className, collapseItems, onMouseLeave, onMouseEnter, enableTooltip = true, popupVisible = false, popupAnchor, popupPlacement = defaultPopupPlacement, popupOffset = defaultPopupOffset, popupKeepMounted, renderPopupContent, onClosePopup, onItemClick, onItemClickCapture, bringForward, openModalSubscriber, } = props;
4225
+ const { compact } = useAsideHeaderContext();
4226
+ if (item.type === 'divider') {
4227
+ return React__default.createElement("div", { className: b$l('menu-divider') });
4228
+ }
4229
+ const [open, toggleOpen] = React__default.useState(false);
4230
+ const ref = React__default.useRef(null);
4231
+ const anchorRef = popupAnchor || ref;
4232
+ const highlightedRef = React__default.useRef(null);
4233
+ const type = item.type || ITEM_TYPE_REGULAR;
4234
+ const current = item.current || false;
4235
+ const tooltipText = item.tooltipText || item.title;
4236
+ const icon = item.icon;
4237
+ const iconSize = item.iconSize || ASIDE_HEADER_ICON_SIZE;
4238
+ const collapsedItem = item.id === COLLAPSE_ITEM_ID;
4239
+ const onClose = React__default.useCallback((event) => {
4240
+ var _a;
4241
+ if (event instanceof MouseEvent &&
4242
+ event.target &&
4243
+ ((_a = ref.current) === null || _a === void 0 ? void 0 : _a.contains(event.target))) {
4244
+ return;
4245
+ }
4246
+ onClosePopup === null || onClosePopup === void 0 ? void 0 : onClosePopup();
4247
+ }, [onClosePopup]);
4248
+ const makeIconNode = (iconEl) => {
4249
+ return compact ? (React__default.createElement(Tooltip, { content: tooltipText, disabled: !enableTooltip || (collapsedItem && open) || popupVisible, placement: "right", className: b$l('icon-tooltip', { 'item-type': type }) },
4250
+ 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);
4251
+ };
4252
+ const makeNode = ({ icon: iconEl, title: titleEl }) => {
4253
+ const createdNode = (React__default.createElement("div", { className: b$l({ type, current, compact }, className), ref: ref, onClick: (event) => {
4254
+ if (collapsedItem) {
4255
+ /**
4256
+ * If we call onItemClick for collapsedItem then:
4257
+ * - User get unexpected item in onItemClick callback
4258
+ * - onClosePanel calls twice for each popuped item, as result it will prevent opening of panelItems
4259
+ */
4260
+ toggleOpen(!open);
4261
+ }
4262
+ else {
4263
+ onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, false, event);
4264
+ }
4265
+ }, onClickCapture: onItemClickCapture, onMouseEnter: () => {
4266
+ if (!compact) {
4267
+ onMouseEnter === null || onMouseEnter === void 0 ? void 0 : onMouseEnter();
4268
+ }
4269
+ }, onMouseLeave: () => {
4270
+ if (!compact) {
4271
+ onMouseLeave === null || onMouseLeave === void 0 ? void 0 : onMouseLeave();
4272
+ }
4273
+ } },
4274
+ React__default.createElement("div", { className: b$l('icon-place'), ref: highlightedRef }, makeIconNode(iconEl)),
4275
+ React__default.createElement("div", { className: b$l('title'), title: typeof item.title === 'string' ? item.title : undefined }, titleEl),
4276
+ renderPopupContent && Boolean(anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) && (React__default.createElement(Popup, { contentClassName: b$l('popup'), open: popupVisible, keepMounted: popupKeepMounted, placement: popupPlacement, offset: popupOffset, anchorRef: anchorRef, onClose: onClose }, renderPopupContent()))));
4277
+ return item.link ? (React__default.createElement("a", { href: item.link, className: b$l('link') }, createdNode)) : (createdNode);
4278
+ };
4279
+ const iconNode = icon ? React__default.createElement(Icon, { data: icon, size: iconSize, className: b$l('icon') }) : null;
4280
+ const titleNode = renderItemTitle(item);
4281
+ const params = { icon: iconNode, title: titleNode };
4282
+ let node;
4283
+ const opts = { compact, collapsed: false, item, ref };
4284
+ if (typeof item.itemWrapper === 'function') {
4285
+ node = item.itemWrapper(params, makeNode, opts);
4286
+ }
4287
+ else {
4288
+ node = makeNode(params);
4289
+ }
4290
+ const highlightedNode = makeIconNode(iconNode);
4291
+ return (React__default.createElement(React__default.Fragment, null,
4292
+ bringForward && (React__default.createElement(HighlightedItem, { iconNode: highlightedNode, iconRef: highlightedRef, onClick: (event) => onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, false, event), onClickCapture: onItemClickCapture, openModalSubscriber: openModalSubscriber })),
4293
+ node,
4294
+ open && collapsedItem && (collapseItems === null || collapseItems === void 0 ? void 0 : collapseItems.length) && Boolean(anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) && (React__default.createElement(CollapsedPopup, Object.assign({}, props, { anchorRef: ref, onClose: () => toggleOpen(false) })))));
4295
+ };
4296
+ Item$1.displayName = 'Item';
4297
+ function CollapsedPopup({ onItemClick, collapseItems, anchorRef, onClose, }) {
4298
+ const { compact } = useAsideHeaderContext();
4299
+ return (collapseItems === null || collapseItems === void 0 ? void 0 : collapseItems.length) ? (React__default.createElement(Popup, { placement: POPUP_PLACEMENT, open: true, anchorRef: anchorRef, onClose: onClose },
4300
+ React__default.createElement("div", { className: b$l('collapse-items-popup-content') },
4301
+ 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) => {
4302
+ const makeCollapseNode = ({ title: titleEl }) => {
4303
+ const res = (React__default.createElement("div", { className: b$l('collapse-item'), onClick: (event) => {
4304
+ onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(collapseItem, true, event);
4305
+ } }, titleEl));
4306
+ return collapseItem.link ? (React__default.createElement("a", { href: collapseItem.link, className: b$l('link') }, res)) : (res);
4307
+ };
4308
+ const titleNode = renderItemTitle(collapseItem);
4309
+ const params = { title: titleNode };
4310
+ const opts = { compact, collapsed: true, item: collapseItem, ref: anchorRef };
4311
+ if (typeof collapseItem.itemWrapper === 'function') {
4312
+ return collapseItem.itemWrapper(params, makeCollapseNode, opts);
4313
+ }
4314
+ else {
4315
+ return makeCollapseNode(params);
4316
+ }
4317
+ } })))) : null;
4318
+ }
4319
+
4320
+ const multipleTooltipContextDefaults = {
4321
+ active: false,
4322
+ activeIndex: undefined,
4323
+ hideCollapseItemTooltip: false,
4324
+ lastClickedItemIndex: undefined,
4325
+ setValue: () => { },
4326
+ };
4327
+ const MultipleTooltipContext = React__default.createContext(multipleTooltipContextDefaults);
4328
+ class MultipleTooltipProvider extends React__default.PureComponent {
4329
+ constructor() {
4330
+ super(...arguments);
4331
+ this.state = Object.assign({}, multipleTooltipContextDefaults);
4332
+ this.setValue = (value) => {
4333
+ this.setState(Object.assign({}, value));
4334
+ };
4335
+ }
4336
+ render() {
4337
+ const { children } = this.props;
4338
+ return (React__default.createElement(MultipleTooltipContext.Provider, { value: Object.assign(Object.assign({}, this.state), { setValue: this.setValue }) }, children));
4339
+ }
4340
+ }
4341
+
4342
+ var css_248z$j = ".g-root_theme_dark .gn-multiple-tooltip,\n.g-root_theme_dark-hc .gn-multiple-tooltip {\n --multiple-tooltip-item-bg-color: #424147;\n --multiple-tooltip-item-active-bg-color: var(--g-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.g-root_theme_light .gn-multiple-tooltip,\n.g-root_theme_light-hc .gn-multiple-tooltip {\n --multiple-tooltip-item-bg-color: #7a7a7a;\n --multiple-tooltip-item-active-bg-color: var(--g-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.gn-multiple-tooltip {\n background-color: transparent;\n box-shadow: none;\n}\n.gn-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.gn-multiple-tooltip__items-container {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n padding: 32px 40px 32px 12px;\n}\n.gn-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(--g-color-text-light-primary);\n margin-bottom: 5px;\n transition: transform 100ms ease-in-out;\n}\n.gn-multiple-tooltip__item:not(.gn-multiple-tooltip__item_divider) + .gn-multiple-tooltip__item:not(.gn-multiple-tooltip__item_divider), .gn-multiple-tooltip__item:first-child {\n margin-top: 5px;\n}\n.gn-multiple-tooltip__item_divider + .gn-multiple-tooltip__item:not(.gn-multiple-tooltip__item_divider) {\n margin-top: 4px;\n}\n.gn-multiple-tooltip__item_active {\n background-color: var(--multiple-tooltip-item-active-bg-color);\n transform: translateX(-12px);\n}\n.gn-multiple-tooltip__item_divider {\n height: 15px;\n visibility: hidden;\n margin: 0;\n}";
4343
+ styleInject(css_248z$j);
4344
+
4345
+ const b$k = block('multiple-tooltip');
4346
+ const POPUP_OFFSET = [-32, 4];
4347
+ const POPUP_MODIFIERS = [
4348
+ {
4349
+ name: 'preventOverflow',
4350
+ enabled: false,
4351
+ },
4352
+ ];
4353
+ const MultipleTooltip = ({ items, open, anchorRef, placement, }) => {
4354
+ const { activeIndex, hideCollapseItemTooltip } = React__default.useContext(MultipleTooltipContext);
4355
+ const activeItem = activeIndex === undefined ? null : items[activeIndex];
4356
+ return (React__default.createElement(Popup, { open: open, anchorRef: anchorRef, placement: placement, offset: POPUP_OFFSET, contentClassName: b$k(null), modifiers: POPUP_MODIFIERS },
4357
+ React__default.createElement("div", { className: b$k('items-container') }, items
4358
+ .filter(({ type = 'regular', id }) => !hideCollapseItemTooltip ||
4359
+ (id !== COLLAPSE_ITEM_ID && type !== 'action'))
4360
+ .map((item, idx) => {
4361
+ switch (item.type) {
4362
+ case 'divider':
4363
+ return (React__default.createElement("div", { className: b$k('item', { divider: true }), key: idx }, item.title));
4364
+ default:
4365
+ return (React__default.createElement("div", { className: b$k('item', {
4366
+ active: item === activeItem,
4367
+ }), key: idx }, item.title));
4368
+ }
4369
+ }))));
4370
+ };
4371
+
4372
+ var css_248z$i = ".gn-composite-bar {\n flex: 1 0 auto;\n width: 100%;\n min-height: 40px;\n}\n.gn-composite-bar .gn-composite-bar__root-menu-item[class] {\n background-color: transparent;\n}";
4373
+ styleInject(css_248z$i);
4374
+
4375
+ const b$j = block('composite-bar');
4376
+ const CompositeBarView = ({ type, items, onItemClick, collapseItems, multipleTooltip = false, }) => {
4377
+ const ref = useRef(null);
4378
+ const tooltipRef = useRef(null);
4379
+ const { setValue: setMultipleTooltipContextValue, active: multipleTooltipActive, activeIndex, lastClickedItemIndex, } = useContext(MultipleTooltipContext);
4380
+ const { compact } = useAsideHeaderContext();
4381
+ React__default.useEffect(() => {
4382
+ function handleBlurWindow() {
4383
+ if (multipleTooltip && multipleTooltipActive) {
4384
+ setMultipleTooltipContextValue({ active: false });
4385
+ }
4386
+ }
4387
+ window.addEventListener('blur', handleBlurWindow);
4388
+ return () => {
4389
+ window.removeEventListener('blur', handleBlurWindow);
4390
+ };
4391
+ }, [multipleTooltip, multipleTooltipActive, setMultipleTooltipContextValue]);
4392
+ const onTooltipMouseEnter = useCallback((e) => {
4393
+ if (multipleTooltip &&
4394
+ compact &&
4395
+ !multipleTooltipActive &&
4396
+ document.hasFocus() &&
4397
+ activeIndex !== lastClickedItemIndex &&
4398
+ e.clientX <= ASIDE_HEADER_COMPACT_WIDTH) {
4399
+ setMultipleTooltipContextValue === null || setMultipleTooltipContextValue === void 0 ? void 0 : setMultipleTooltipContextValue({
4400
+ active: true,
4401
+ });
4402
+ }
4403
+ }, [
4404
+ multipleTooltip,
4405
+ compact,
4406
+ multipleTooltipActive,
4407
+ activeIndex,
4408
+ lastClickedItemIndex,
4409
+ setMultipleTooltipContextValue,
4410
+ ]);
4411
+ const onTooltipMouseLeave = useCallback(() => {
4412
+ if (multipleTooltip && multipleTooltipActive && document.hasFocus()) {
4413
+ setMultipleTooltipContextValue === null || setMultipleTooltipContextValue === void 0 ? void 0 : setMultipleTooltipContextValue({
4414
+ active: false,
4415
+ lastClickedItemIndex: undefined,
4416
+ });
4417
+ }
4418
+ }, [multipleTooltipActive, setMultipleTooltipContextValue]);
4419
+ const onMouseEnterByIndex = useCallback((itemIndex) => () => {
4420
+ if (multipleTooltip) {
4421
+ let multipleTooltipActiveValue = multipleTooltipActive;
4422
+ if (!multipleTooltipActive && itemIndex !== lastClickedItemIndex) {
4423
+ multipleTooltipActiveValue = true;
4424
+ }
4425
+ if (activeIndex === itemIndex &&
4426
+ multipleTooltipActive === multipleTooltipActiveValue) {
4427
+ return;
4428
+ }
4429
+ setMultipleTooltipContextValue({
4430
+ activeIndex: itemIndex,
4431
+ active: multipleTooltipActiveValue,
4432
+ });
4433
+ }
4434
+ }, [multipleTooltipActive, activeIndex, lastClickedItemIndex, setMultipleTooltipContextValue]);
4435
+ const onMouseLeave = useCallback(() => {
4436
+ var _a;
4437
+ if (compact) {
4438
+ (_a = ref.current) === null || _a === void 0 ? void 0 : _a.activateItem(undefined);
4439
+ if (multipleTooltip &&
4440
+ (activeIndex !== undefined || lastClickedItemIndex !== undefined)) {
4441
+ setMultipleTooltipContextValue({
4442
+ activeIndex: undefined,
4443
+ lastClickedItemIndex: undefined,
4444
+ });
4445
+ }
4446
+ }
4447
+ }, [activeIndex, lastClickedItemIndex, setMultipleTooltipContextValue]);
4448
+ const onItemClickByIndex = useCallback((itemIndex) => (item, collapsed, event) => {
4449
+ if (compact &&
4450
+ multipleTooltip &&
4451
+ itemIndex !== lastClickedItemIndex &&
4452
+ item.id !== COLLAPSE_ITEM_ID) {
4453
+ setMultipleTooltipContextValue({
4454
+ lastClickedItemIndex: itemIndex,
4455
+ active: false,
4456
+ });
4457
+ }
4458
+ onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, collapsed, event);
4459
+ }, [lastClickedItemIndex, setMultipleTooltipContextValue]);
4460
+ return (React__default.createElement(React__default.Fragment, null,
4461
+ React__default.createElement("div", { ref: tooltipRef, onMouseEnter: onTooltipMouseEnter, onMouseLeave: onTooltipMouseLeave },
4462
+ React__default.createElement(List, { ref: ref, items: items, selectedItemIndex: type === 'menu' ? getSelectedItemIndex$1(items) : undefined, itemHeight: getItemHeight$1, itemsHeight: getItemsHeight, itemClassName: b$j('root-menu-item'), virtualized: false, filterable: false, sortable: false, renderItem: (item, _isItemActive, itemIndex) => {
4463
+ const itemExtraProps = isMenuItem(item) ? { item } : item;
4464
+ const enableTooltip = isMenuItem(item)
4465
+ ? !multipleTooltip
4466
+ : item.enableTooltip;
4467
+ return (React__default.createElement(Item$1, Object.assign({}, itemExtraProps, { enableTooltip: enableTooltip, onMouseEnter: onMouseEnterByIndex(itemIndex), onMouseLeave: onMouseLeave, onItemClick: onItemClickByIndex(itemIndex), collapseItems: collapseItems })));
4468
+ } })),
4469
+ type === 'menu' && (React__default.createElement(MultipleTooltip, { open: compact && multipleTooltip && multipleTooltipActive, anchorRef: tooltipRef, placement: ['right-start'], items: items }))));
4470
+ };
4471
+ const CompositeBar = ({ type, items, menuMoreTitle, onItemClick, multipleTooltip = false, }) => {
4472
+ if (items.length === 0) {
4473
+ return null;
4474
+ }
4475
+ let node;
4476
+ if (type === 'menu') {
4477
+ const minHeight = getItemsMinHeight(items);
4478
+ const collapseItem = getMoreButtonItem(menuMoreTitle);
4479
+ node = (React__default.createElement("div", { className: b$j({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React__default.createElement(AutoSizer, null, ({ width, height }) => {
4480
+ const { listItems, collapseItems } = getAutosizeListItems(items, height, collapseItem);
4481
+ return (React__default.createElement("div", { style: { width, height } },
4482
+ React__default.createElement(CompositeBarView, { type: "menu", items: listItems, onItemClick: onItemClick, collapseItems: collapseItems, multipleTooltip: multipleTooltip })));
4483
+ }))));
4484
+ }
4485
+ else {
4486
+ node = (React__default.createElement("div", { className: b$j({ subheader: true }) },
4487
+ React__default.createElement(CompositeBarView, { type: "subheader", items: items, onItemClick: onItemClick })));
4488
+ }
4489
+ return React__default.createElement(MultipleTooltipProvider, null, node);
4490
+ };
4491
+
4492
+ /* Used by renderContent AsideHeader prop */
4493
+ const RenderContent = React__default.memo(({ renderContent, size }) => {
4494
+ return React__default.createElement(React__default.Fragment, null, renderContent({ size }));
4495
+ });
4496
+ RenderContent.displayName = 'RenderContent';
4497
+ const Content = ({ size, // TODO: move to context when MobileHeader will support it
4498
+ className, cssSizeVariableName = '--gn-aside-header-size', renderContent, }) => {
4499
+ return (React__default.createElement("div", { className: className, style: Object.assign({}, { [cssSizeVariableName]: `${size}px` }) }, typeof renderContent === 'function' && (React__default.createElement(RenderContent, { size: size, renderContent: renderContent }))));
4500
+ };
4501
+
4502
+ function fakeDisplayName(newDisplayName, Component) {
4503
+ const Fake = (props) => React__default.createElement(Component, Object.assign({}, props));
4504
+ Fake.displayName = newDisplayName;
4505
+ return Fake;
4506
+ }
4507
+
4508
+ const PARAM_REGEXP = /{{(.*?)}}/g;
4509
+ function replaceParams(keyValue, params) {
4510
+ let result = '';
4511
+ let lastIndex = (PARAM_REGEXP.lastIndex = 0);
4512
+ let match;
4513
+ while ((match = PARAM_REGEXP.exec(keyValue))) {
4514
+ if (lastIndex !== match.index) {
4515
+ result += keyValue.slice(lastIndex, match.index);
4516
+ }
4517
+ lastIndex = PARAM_REGEXP.lastIndex;
4518
+ const [all, key] = match;
4519
+ if (Object.prototype.hasOwnProperty.call(params, key)) {
4520
+ result += params[key];
4521
+ }
4522
+ else {
4523
+ result += all;
4524
+ }
4525
+ }
4526
+ if (lastIndex < keyValue.length) {
4527
+ result += keyValue.slice(lastIndex);
4528
+ }
4529
+ return result;
4530
+ }
4531
+
4532
+ var PluralForm;
4533
+ (function (PluralForm) {
4534
+ PluralForm[PluralForm["One"] = 0] = "One";
4535
+ PluralForm[PluralForm["Few"] = 1] = "Few";
4536
+ PluralForm[PluralForm["Many"] = 2] = "Many";
4537
+ PluralForm[PluralForm["None"] = 3] = "None";
4538
+ })(PluralForm || (PluralForm = {}));
4539
+
4540
+ function pluralizerEn (count, pluralForms) {
4541
+ if (count === 0) {
4542
+ return pluralForms.None;
4543
+ }
4544
+ if (count === 1 || count === -1) {
4545
+ return pluralForms.One;
4546
+ }
4547
+ return pluralForms.Many;
4548
+ }
4549
+
4550
+ function pluralizerRu (count, pluralForms) {
4551
+ // the rules for negative numbers are the same
4552
+ const lastDigit = Math.abs(count % 10);
4553
+ const last2Digits = Math.abs(count % 100);
4554
+ if (count === 0) {
4555
+ return pluralForms.None;
4556
+ }
4557
+ if (lastDigit === 1 && last2Digits !== 11) {
4558
+ return pluralForms.One;
4559
+ }
4560
+ if ((lastDigit > 1 && lastDigit < 5) && (last2Digits < 10 || last2Digits > 20)) {
4561
+ return pluralForms.Few;
4562
+ }
4563
+ return pluralForms.Many;
4564
+ }
4565
+
4566
+ class I18N {
4567
+ constructor(options) {
4568
+ this.data = {};
4569
+ this.lang = undefined;
4570
+ this.pluralizers = {
4571
+ en: pluralizerEn,
4572
+ ru: pluralizerRu,
4573
+ };
4574
+ this.logger = null;
4575
+ this.logger = (options === null || options === void 0 ? void 0 : options.logger) || null;
4576
+ }
4577
+ setLang(lang) {
4578
+ this.lang = lang;
4579
+ }
4580
+ configurePluralization(pluralizers) {
4581
+ this.pluralizers = Object.assign({}, this.pluralizers, pluralizers);
4582
+ }
4583
+ registerKeyset(lang, keysetName, data = {}) {
4584
+ if (this.data[lang] && Object.prototype.hasOwnProperty.call(this.data[lang], keysetName)) {
4585
+ throw new Error(`Keyset '${keysetName}' is already registered, aborting!`);
4586
+ }
4587
+ this.data[lang] = Object.assign({}, this.data[lang], { [keysetName]: data });
4588
+ }
4589
+ registerKeysets(lang, data) {
4590
+ Object.keys(data).forEach((keysetName) => {
4591
+ this.registerKeyset(lang, keysetName, data[keysetName]);
4592
+ });
4593
+ }
4594
+ has(keysetName, key, lang) {
4595
+ const languageData = this.getLanguageData(lang);
4596
+ return Boolean(languageData && languageData[keysetName] && languageData[keysetName][key]);
4597
+ }
4598
+ i18n(keysetName, key, params) {
4599
+ const languageData = this.getLanguageData(this.lang);
4600
+ if (typeof languageData === 'undefined') {
4601
+ throw new Error(`Language '${this.lang}' is not defined, make sure you call setLang for the same language you called registerKeysets for!`);
4602
+ }
4603
+ if (Object.keys(languageData).length === 0) {
4604
+ this.warn('Language data is empty.');
4605
+ return key;
4606
+ }
4607
+ const keyset = languageData[keysetName];
4608
+ if (!keyset) {
4609
+ this.warn('Keyset not found.', keysetName);
4610
+ return key;
4611
+ }
4612
+ if (Object.keys(keyset).length === 0) {
4613
+ this.warn('Keyset is empty.', keysetName);
4614
+ return key;
4615
+ }
4616
+ const keyValue = keyset && keyset[key];
4617
+ let result;
4618
+ if (typeof keyValue === 'undefined') {
4619
+ this.warn('Missing key.', keysetName, key);
4620
+ return key;
4621
+ }
4622
+ if (Array.isArray(keyValue)) {
4623
+ if (keyValue.length < 3) {
4624
+ this.warn('Missing required plurals', keysetName, key);
4625
+ return key;
4626
+ }
4627
+ const count = Number(params === null || params === void 0 ? void 0 : params.count);
4628
+ if (Number.isNaN(count)) {
4629
+ this.warn('Missing params.count for key.', keysetName, key);
4630
+ return key;
4631
+ }
4632
+ const pluralizer = this.getLanguagePluralizer(this.lang);
4633
+ result = keyValue[pluralizer(count, PluralForm)] || keyValue[PluralForm.Many];
4634
+ if (keyValue[PluralForm.None] === undefined) {
4635
+ this.warn('Missing key for 0', keysetName, key);
4636
+ }
4637
+ }
4638
+ else {
4639
+ result = keyValue;
4640
+ }
4641
+ if (params) {
4642
+ result = replaceParams(result, params);
4643
+ }
4644
+ return result;
4645
+ }
4646
+ keyset(keysetName) {
4647
+ return (key, params) => {
4648
+ return this.i18n(keysetName, key, params);
4649
+ };
4650
+ }
4651
+ warn(msg, keyset, key) {
4652
+ var _a;
4653
+ let cacheKey = '';
4654
+ if (keyset) {
4655
+ cacheKey += keyset;
4656
+ if (key) {
4657
+ cacheKey += `.${key}`;
4658
+ }
4659
+ }
4660
+ else {
4661
+ cacheKey = 'languageData';
4662
+ }
4663
+ (_a = this.logger) === null || _a === void 0 ? void 0 : _a.log(`I18n: ${msg}`, {
4664
+ level: 'info',
4665
+ logger: cacheKey,
4666
+ extra: {
4667
+ type: 'i18n'
4668
+ }
4669
+ });
4670
+ }
4671
+ getLanguageData(lang) {
4672
+ const langCode = lang || this.lang;
4673
+ return langCode ? this.data[langCode] : undefined;
4674
+ }
4675
+ getLanguagePluralizer(lang) {
4676
+ const pluralizer = lang ? this.pluralizers[lang] : undefined;
4677
+ if (!pluralizer) {
4678
+ this.warn(`Pluralization is not configured for language '${lang}', falling back to the english ruleset`);
4679
+ }
4680
+ return pluralizer || pluralizerEn;
4681
+ }
4682
+ }
4683
+
4684
+ var Lang;
4685
+ (function (Lang) {
4686
+ Lang["Ru"] = "ru";
4687
+ Lang["En"] = "en";
4688
+ })(Lang || (Lang = {}));
4689
+ let subs = [];
4690
+ const config = {
4691
+ lang: Lang.En,
4692
+ };
4693
+ const configure = (newConfig) => {
4694
+ Object.assign(config, newConfig);
4695
+ subs.forEach((sub) => {
4696
+ sub(config);
4697
+ });
4698
+ };
4699
+ const subscribeConfigure = (sub) => {
4700
+ subs.push(sub);
4701
+ return () => {
4702
+ subs = subs.filter((item) => item !== sub);
4703
+ };
4704
+ };
4705
+ const getConfig = () => config;
4706
+
4707
+ const i18n$4 = new I18N();
4708
+ i18n$4.setLang(getConfig().lang);
4709
+ subscribeConfigure((config) => {
4710
+ i18n$4.setLang(config.lang);
4711
+ });
4712
+
4713
+ function registerKeyset(data, keysetName) {
4714
+ Object.entries(data).forEach(([lang, keys]) => i18n$4.registerKeyset(lang, keysetName, keys));
4715
+ return i18n$4.keyset(keysetName);
4716
+ }
4717
+
4718
+ var button_collapse$1 = "Collapse";
4719
+ var button_expand$1 = "Expand";
4720
+ var label_more$1 = "More";
4721
+ var en$3 = {
4722
+ button_collapse: button_collapse$1,
4723
+ button_expand: button_expand$1,
4724
+ label_more: label_more$1
4725
+ };
4726
+
4727
+ var button_collapse = "Свернуть";
4728
+ var button_expand = "Развернуть";
4729
+ var label_more = "Ещё";
4730
+ var ru$3 = {
4731
+ button_collapse: button_collapse,
4732
+ button_expand: button_expand,
4733
+ label_more: label_more
4734
+ };
4735
+
4736
+ const COMPONENT$3 = 'AsideHeader';
4737
+ var i18n$3 = registerKeyset({ en: en$3, ru: ru$3 }, COMPONENT$3);
4738
+
4739
+ var _path$1;
4740
+ function _extends$1() { _extends$1 = 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$1.apply(this, arguments); }
4741
+ var SvgControlMenuButton = function SvgControlMenuButton(props) {
4742
+ return /*#__PURE__*/React.createElement("svg", _extends$1({
4743
+ width: 8,
4744
+ height: 8,
4745
+ viewBox: "0 0 8 8",
4746
+ fill: "currentColor",
4747
+ xmlns: "http://www.w3.org/2000/svg"
4748
+ }, props), _path$1 || (_path$1 = /*#__PURE__*/React.createElement("path", {
4749
+ d: "m.72 7.64 6.39-3.2a.5.5 0 0 0 0-.89L.72.36A.5.5 0 0 0 0 .81v6.38c0 .37.4.61.72.45Z"
4750
+ })));
4751
+ };
4752
+ var controlMenuButtonIcon = SvgControlMenuButton;
4753
+
4754
+ var _path;
4755
+ function _extends() { _extends = 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.apply(this, arguments); }
4756
+ var SvgDividerCollapsed = function SvgDividerCollapsed(props) {
4757
+ return /*#__PURE__*/React.createElement("svg", _extends({
4758
+ width: 56,
4759
+ height: 29,
4760
+ viewBox: "0 0 56 29",
4761
+ fill: "currentColor",
4762
+ xmlns: "http://www.w3.org/2000/svg"
4763
+ }, props), _path || (_path = /*#__PURE__*/React.createElement("path", {
4764
+ d: "M56 0v29c-.8-1-7-6.1-17.7-8.4L13 15.7A16 16 0 0 1 0 0Z"
4765
+ })));
4766
+ };
4767
+ var headerDividerCollapsedIcon = SvgDividerCollapsed;
4768
+
4769
+ var css_248z$h = ".g-root {\n --gn-aside-header-background-color: var(--g-color-base-warning-light);\n --gn-aside-header-collapse-button-divider-line-color: var(\n --gn-aside-header-subheader-divider-line-color\n );\n --gn-aside-header-footer-item-icon-color: var(--g-color-text-primary);\n --gn-aside-header-subheader-item-icon-color: var(--g-color-text-primary);\n --gn-aside-header-item-icon-background-size: 38px;\n}\n\n.g-root_theme_light,\n.g-root_theme_light-hc {\n --gn-aside-header-divider-line-color: transparent;\n --gn-aside-header-subheader-divider-line-color: var(--g-color-line-generic);\n}\n\n.g-root_theme_dark,\n.g-root_theme_dark-hc {\n --gn-aside-header-divider-line-color: var(--g-color-line-generic-solid);\n --gn-aside-header-subheader-divider-line-color: var(--g-color-line-generic-solid);\n}\n\n.gn-aside-header {\n --gn-aside-header-min-width: 56px;\n height: 100%;\n width: 100%;\n position: relative;\n background-color: var(--g-color-base-background);\n}\n.gn-aside-header__aside {\n position: sticky;\n top: 0;\n left: 0;\n height: 100vh;\n width: inherit;\n display: flex;\n flex-direction: column;\n background-color: var(--g-color-base-background);\n z-index: 100;\n box-sizing: border-box;\n}\n.gn-aside-header__aside::after {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n width: 1px;\n height: 100%;\n content: \"\";\n background-color: var(--gn-aside-header-divider-line-color);\n}\n.gn-aside-header__aside-popup-anchor {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n}\n.gn-aside-header__aside-content {\n --gradient-height: 334px;\n display: flex;\n flex-direction: column;\n overflow-x: hidden;\n width: inherit;\n height: inherit;\n position: relative;\n z-index: 2;\n user-select: none;\n}\n.gn-aside-header__aside-content::after {\n position: absolute;\n top: 0;\n right: -100px;\n bottom: 0;\n width: 100px;\n content: \"\";\n box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.1), 0px 0px 24px rgba(0, 0, 0, 0.08);\n}\n.gn-aside-header__aside-content > .gn-aside-header-logo {\n margin: 8px 0;\n}\n.gn-aside-header__aside-content_with-decoration {\n background: linear-gradient(180deg, var(--gn-aside-header-background-color) calc(var(--gradient-height) * 0.33), transparent calc(var(--gradient-height) * 0.88));\n}\n.gn-aside-header_compact .gn-aside-header__aside-content {\n background: transparent;\n}\n.gn-aside-header__header {\n --gn-aside-header-header-divider-height: 29px;\n position: relative;\n z-index: 1;\n flex: none;\n box-sizing: border-box;\n width: 100%;\n padding-top: 8px;\n padding-bottom: 22px;\n}\n.gn-aside-header__header .gn-aside-header__header-divider {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: -2;\n display: none;\n color: var(--gn-aside-header-background-color);\n}\n.gn-aside-header__header_with-decoration::before {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -2;\n display: none;\n width: 100%;\n height: calc(100% - var(--gn-aside-header-header-divider-height));\n content: \"\";\n background-color: var(--gn-aside-header-background-color);\n}\n.gn-aside-header__header::after {\n position: absolute;\n bottom: 12px;\n left: 0;\n z-index: -2;\n width: 100%;\n height: 1px;\n content: \"\";\n background-color: var(--gn-aside-header-subheader-divider-line-color);\n}\n.gn-aside-header_compact .gn-aside-header__header::before {\n display: block;\n}\n.gn-aside-header_compact .gn-aside-header__header_with-decoration .gn-aside-header__header-divider {\n display: block;\n}\n.gn-aside-header_compact .gn-aside-header__header_with-decoration::after {\n display: none;\n}\n.gn-aside-header__menu-items {\n flex-grow: 1;\n}\n.gn-aside-header__footer {\n flex-shrink: 0;\n width: 100%;\n margin: 8px 0;\n display: flex;\n flex-direction: column;\n}\n.gn-aside-header__panels {\n z-index: 98;\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n overflow: auto;\n}\n.gn-aside-header__panel {\n height: 100%;\n}\n.gn-aside-header__pane-container {\n display: flex;\n outline: none;\n overflow: visible;\n user-select: text;\n flex-direction: row;\n}\n.gn-aside-header__content {\n width: calc(100% - var(--gn-aside-header-size));\n z-index: 95;\n}\n.gn-aside-header__collapse-button {\n --yc-button-background-color-hover: transparent;\n overflow: hidden;\n box-sizing: border-box;\n flex: none;\n width: 100%;\n height: 20px;\n border-top: 1px solid var(--gn-aside-header-collapse-button-divider-line-color);\n margin-top: auto;\n}\n.gn-aside-header__collapse-button > .yc-button__text {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 20px;\n}\n.gn-aside-header__collapse-button:not(.gn-aside-header__collapse-button_compact) .gn-aside-header__collapse-icon {\n transform: rotate(180deg);\n}\n.gn-aside-header__collapse-button .gn-aside-header__collapse-icon {\n color: var(--g-color-text-secondary);\n}\n.gn-aside-header__collapse-button:hover .gn-aside-header__collapse-icon {\n color: var(--g-color-text-primary);\n}";
4770
+ styleInject(css_248z$h);
4771
+
4772
+ // TODO: remove temporary fix for expand button
4773
+ const NotIcon = fakeDisplayName('NotIcon', Icon);
4774
+ const b$i = block('aside-header');
4775
+ class AsideHeader extends React__default.Component {
4776
+ constructor() {
4777
+ super(...arguments);
4778
+ this.asideRef = React__default.createRef();
4779
+ this.renderFirstPane = (size) => {
4780
+ const { menuItems, panelItems, headerDecoration, multipleTooltip, menuMoreTitle } = this.props;
4781
+ return (React__default.createElement(React__default.Fragment, null,
4782
+ React__default.createElement("div", { className: b$i('aside'), style: { width: size } },
4783
+ React__default.createElement("div", { className: b$i('aside-popup-anchor'), ref: this.asideRef }),
4784
+ React__default.createElement("div", { className: b$i('aside-content', { ['with-decoration']: headerDecoration }) },
4785
+ this.renderHeader(),
4786
+ (menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React__default.createElement(CompositeBar, { type: "menu", items: menuItems, menuMoreTitle: menuMoreTitle !== null && menuMoreTitle !== void 0 ? menuMoreTitle : i18n$3('label_more'), onItemClick: this.onItemClick, multipleTooltip: multipleTooltip })) : (React__default.createElement("div", { className: b$i('menu-items') })),
4787
+ this.renderFooter(size),
4788
+ this.renderCollapseButton())),
4789
+ panelItems && this.renderPanels(size)));
4790
+ };
4791
+ this.renderSecondPane = (size) => {
4792
+ return (React__default.createElement(Content, { size: size, renderContent: this.props.renderContent, className: b$i('content') }));
4793
+ };
4794
+ this.renderLogo = () => React__default.createElement(Logo$1, Object.assign({}, this.props.logo, { onClick: this.onLogoClick }));
4795
+ this.renderHeader = () => (React__default.createElement("div", { className: b$i('header', { ['with-decoration']: this.props.headerDecoration }) },
4796
+ this.renderLogo(),
4797
+ React__default.createElement(CompositeBar, { type: "subheader", items: this.props.subheaderItems, onItemClick: this.onItemClick }),
4798
+ React__default.createElement(Icon, { data: headerDividerCollapsedIcon, className: b$i('header-divider'), width: ASIDE_HEADER_COMPACT_WIDTH, height: "29" })));
4799
+ this.renderFooter = (size) => {
4800
+ const { renderFooter, compact } = this.props;
4801
+ return (React__default.createElement("div", { className: b$i('footer') }, renderFooter === null || renderFooter === void 0 ? void 0 : renderFooter({
4802
+ size,
4803
+ compact,
4804
+ asideRef: this.asideRef,
4805
+ })));
4806
+ };
4807
+ this.renderPanels = (size) => {
4808
+ const { panelItems } = this.props;
4809
+ return (React__default.createElement(Drawer, { className: b$i('panels'), onVeilClick: this.onCloseDrawer, onEscape: this.onCloseDrawer, style: { left: size } }, panelItems.map((item) => (React__default.createElement(DrawerItem, Object.assign({ key: item.id }, item))))));
4810
+ };
4811
+ this.renderCollapseButton = () => {
4812
+ const { expandTitle, collapseTitle, compact } = this.props;
4813
+ const buttonTitle = compact
4814
+ ? expandTitle || i18n$3('button_expand')
4815
+ : collapseTitle || i18n$3('button_collapse');
4816
+ return (React__default.createElement(Button, { className: b$i('collapse-button', { compact }), view: "flat", onClick: this.onCollapseButtonClick, title: buttonTitle },
4817
+ React__default.createElement(NotIcon, { data: controlMenuButtonIcon, className: b$i('collapse-icon'), width: "16", height: "10" })));
4818
+ };
4819
+ this.onCollapseButtonClick = () => {
4820
+ var _a, _b;
4821
+ (_b = (_a = this.props).onChangeCompact) === null || _b === void 0 ? void 0 : _b.call(_a, !this.props.compact);
4822
+ };
4823
+ this.onCloseDrawer = () => {
4824
+ var _a, _b;
4825
+ (_b = (_a = this.props).onClosePanel) === null || _b === void 0 ? void 0 : _b.call(_a);
4826
+ };
4827
+ this.onItemClick = (item, collapsed, event) => {
4828
+ var _a, _b, _c;
4829
+ (_b = (_a = this.props).onClosePanel) === null || _b === void 0 ? void 0 : _b.call(_a);
4830
+ (_c = item.onItemClick) === null || _c === void 0 ? void 0 : _c.call(item, item, collapsed, event);
4831
+ };
4832
+ this.onLogoClick = (event) => {
4833
+ var _a, _b, _c, _d;
4834
+ (_b = (_a = this.props).onClosePanel) === null || _b === void 0 ? void 0 : _b.call(_a);
4835
+ (_d = (_c = this.props.logo).onClick) === null || _d === void 0 ? void 0 : _d.call(_c, event);
4836
+ };
4837
+ }
4838
+ render() {
4839
+ const { className, compact } = this.props;
4840
+ const size = compact ? ASIDE_HEADER_COMPACT_WIDTH : ASIDE_HEADER_EXPANDED_WIDTH;
4841
+ return (React__default.createElement(AsideHeaderContextProvider, { value: { compact, size } },
4842
+ React__default.createElement("div", { className: b$i({ compact }, className) },
4843
+ React__default.createElement("div", { className: b$i('pane-container') },
4844
+ this.renderFirstPane(size),
4845
+ this.renderSecondPane(size)))));
4846
+ }
4847
+ }
4848
+ AsideHeader.defaultProps = {
4849
+ panelItems: [],
4850
+ subheaderItems: [],
4851
+ menuItems: [],
4852
+ headerDecoration: true,
4853
+ };
4854
+
4855
+ /******************************************************************************
4856
+ Copyright (c) Microsoft Corporation.
4857
+
4858
+ Permission to use, copy, modify, and/or distribute this software for any
4859
+ purpose with or without fee is hereby granted.
4860
+
4861
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
4862
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
4863
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
4864
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
4865
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
4866
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
4867
+ PERFORMANCE OF THIS SOFTWARE.
4868
+ ***************************************************************************** */
4869
+
4870
+ function __rest(s, e) {
4871
+ var t = {};
4872
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4873
+ t[p] = s[p];
4874
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
4875
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
4876
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
4877
+ t[p[i]] = s[p[i]];
4878
+ }
4879
+ return t;
4880
+ }
4710
4881
 
4711
- function invokeFunc(time) {
4712
- var args = lastArgs,
4713
- thisArg = lastThis;
4882
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
4883
+ var e = new Error(message);
4884
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
4885
+ };
4714
4886
 
4715
- lastArgs = lastThis = undefined;
4716
- lastInvokeTime = time;
4717
- result = func.apply(thisArg, args);
4718
- return result;
4719
- }
4887
+ var css_248z$g = ".gn-footer-item {\n width: 100%;\n height: 40px;\n}";
4888
+ styleInject(css_248z$g);
4720
4889
 
4721
- function leadingEdge(time) {
4722
- // Reset any `maxWait` timer.
4723
- lastInvokeTime = time;
4724
- // Start the timer for the trailing edge.
4725
- timerId = setTimeout(timerExpired, wait);
4726
- // Invoke the leading edge.
4727
- return leading ? invokeFunc(time) : result;
4728
- }
4890
+ const b$h = block('footer-item');
4891
+ const FooterItem$1 = (_a) => {
4892
+ var { item } = _a, props = __rest(_a, ["item"]);
4893
+ return (React__default.createElement(Item$1, Object.assign({}, props, { item: Object.assign({ iconSize: ASIDE_HEADER_ICON_SIZE }, item), className: b$h({ compact: props.compact }), onItemClick: item.onItemClick, onItemClickCapture: item.onItemClickCapture })));
4894
+ };
4729
4895
 
4730
- function remainingWait(time) {
4731
- var timeSinceLastCall = time - lastCallTime,
4732
- timeSinceLastInvoke = time - lastInvokeTime,
4733
- timeWaiting = wait - timeSinceLastCall;
4896
+ var css_248z$f = ".gn-action-bar-group {\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: flex-start;\n margin: 0;\n padding: 0;\n}\n.gn-action-bar-group_pull_left {\n margin-left: 0;\n margin-right: auto;\n}\n.gn-action-bar-group_pull_right {\n margin-left: auto;\n margin-right: 0;\n}\n.gn-action-bar-group_pull_center {\n margin-left: auto;\n margin-right: auto;\n}";
4897
+ styleInject(css_248z$f);
4734
4898
 
4735
- return maxing
4736
- ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
4737
- : timeWaiting;
4738
- }
4899
+ const b$g = block('action-bar-group');
4900
+ const ActionBarGroup = ({ children, className, pull }) => {
4901
+ return (React__default.createElement("ul", { className: b$g({ pull }, className), role: "group" }, children));
4902
+ };
4903
+ ActionBarGroup.displayName = 'ActionBar.Group';
4739
4904
 
4740
- function shouldInvoke(time) {
4741
- var timeSinceLastCall = time - lastCallTime,
4742
- timeSinceLastInvoke = time - lastInvokeTime;
4905
+ var css_248z$e = ".gn-action-bar-item {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.gn-action-bar-item_pull_left {\n margin-left: 0;\n margin-right: auto;\n}\n.gn-action-bar-item_pull_right {\n margin-left: auto;\n margin-right: 0;\n}\n.gn-action-bar-item_pull_center {\n margin-left: auto;\n margin-right: auto;\n}\n.gn-action-bar-item + .gn-action-bar-item_spacing {\n margin-left: 8px;\n}";
4906
+ styleInject(css_248z$e);
4743
4907
 
4744
- // Either this is the first call, activity has stopped and we're at the
4745
- // trailing edge, the system time has gone backwards and we're treating
4746
- // it as the trailing edge, or we've hit the `maxWait` limit.
4747
- return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
4748
- (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
4749
- }
4908
+ const b$f = block('action-bar-item');
4909
+ const ActionBarItem = ({ children, className, pull, spacing = true }) => {
4910
+ return React__default.createElement("li", { className: b$f({ pull, spacing }, className) }, children);
4911
+ };
4912
+ ActionBarItem.displayName = 'ActionBar.Item';
4750
4913
 
4751
- function timerExpired() {
4752
- var time = now();
4753
- if (shouldInvoke(time)) {
4754
- return trailingEdge(time);
4755
- }
4756
- // Restart the timer.
4757
- timerId = setTimeout(timerExpired, remainingWait(time));
4758
- }
4914
+ var css_248z$d = ".gn-action-bar-section {\n display: flex;\n flex-flow: row nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.gn-action-bar-section + .gn-action-bar-section {\n border-left: solid 1px var(--g-color-line-generic);\n}\n.gn-action-bar-section_type_primary {\n flex: 1 1 auto;\n padding-left: 20px;\n padding-right: 20px;\n}\n.gn-action-bar-section_type_secondary {\n padding-left: 6px;\n padding-right: 6px;\n}";
4915
+ styleInject(css_248z$d);
4759
4916
 
4760
- function trailingEdge(time) {
4761
- timerId = undefined;
4917
+ const b$e = block('action-bar-section');
4918
+ const ActionBarSection = ({ children, type = 'primary' }) => {
4919
+ return React__default.createElement("div", { className: b$e({ type }) }, children);
4920
+ };
4921
+ ActionBarSection.displayName = 'ActionBar.Section';
4762
4922
 
4763
- // Only invoke if we have `lastArgs` which means `func` has been
4764
- // debounced at least once.
4765
- if (trailing && lastArgs) {
4766
- return invokeFunc(time);
4923
+ var css_248z$c = ".gn-action-bar-separator {\n list-style: none;\n margin: 0;\n padding: 0;\n margin-left: 6px;\n margin-right: 6px;\n border-right: solid 1px var(--g-color-line-generic);\n height: 40px;\n}";
4924
+ styleInject(css_248z$c);
4925
+
4926
+ const b$d = block('action-bar-separator');
4927
+ const ActionBarSeparator = () => {
4928
+ return React__default.createElement("li", { role: "separator", className: b$d() });
4929
+ };
4930
+ ActionBarSeparator.displayName = 'ActionBar.Separator';
4931
+
4932
+ var css_248z$b = ".gn-action-bar {\n box-sizing: border-box;\n height: 40px;\n border-bottom: solid 1px var(--g-color-line-generic);\n display: flex;\n flex-flow: row nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}";
4933
+ styleInject(css_248z$b);
4934
+
4935
+ const b$c = block('action-bar');
4936
+ const ActionBar = ({ children, className, 'aria-label': ariaLabel }) => {
4937
+ return (React__default.createElement("section", { className: b$c(null, className), "aria-label": ariaLabel }, children));
4938
+ };
4939
+ ActionBar.displayName = 'ActionBar';
4940
+ const PublicActionBar = Object.assign(ActionBar, {
4941
+ Section: ActionBarSection,
4942
+ Group: ActionBarGroup,
4943
+ Item: ActionBarItem,
4944
+ Separator: ActionBarSeparator,
4945
+ });
4946
+
4947
+ var button_close$1 = "Close";
4948
+ var en$2 = {
4949
+ button_close: button_close$1
4950
+ };
4951
+
4952
+ var button_close = "Закрыть";
4953
+ var ru$2 = {
4954
+ button_close: button_close
4955
+ };
4956
+
4957
+ const COMPONENT$2 = 'Title';
4958
+ var i18n$2 = registerKeyset({ en: en$2, ru: ru$2 }, COMPONENT$2);
4959
+
4960
+ var css_248z$a = ".gn-title {\n box-sizing: border-box;\n padding: 14px 10px 14px 20px;\n min-height: 64px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.gn-title_separator {\n border-bottom: 1px solid var(--g-color-line-generic);\n}\n.gn-title__text {\n margin: 0;\n margin-right: 20px;\n}";
4961
+ styleInject(css_248z$a);
4962
+
4963
+ const b$b = block('title');
4964
+ const Title = ({ children, closeIconSize = 23, hasSeparator, closeTitle = i18n$2('button_close'), onClose, }) => {
4965
+ return (React__default.createElement("div", { className: b$b({ separator: hasSeparator }) },
4966
+ React__default.createElement(Text, { className: b$b('text'), as: 'h3', variant: 'subheader-3' }, children),
4967
+ onClose && (React__default.createElement(Button, { onClick: onClose, view: "flat", size: "l", extraProps: {
4968
+ 'aria-label': closeTitle,
4969
+ } },
4970
+ React__default.createElement(Icon, { data: Xmark, size: closeIconSize })))));
4971
+ };
4972
+ Title.displayName = 'Title';
4973
+
4974
+ function flattenHotkeyGroups(hotkeys) {
4975
+ const result = [];
4976
+ for (const hotkeysGroup of hotkeys) {
4977
+ result.push({
4978
+ title: hotkeysGroup.title,
4979
+ group: true,
4980
+ });
4981
+ result.push(...hotkeysGroup.items);
4767
4982
  }
4768
- lastArgs = lastThis = undefined;
4769
4983
  return result;
4770
- }
4984
+ }
4771
4985
 
4772
- function cancel() {
4773
- if (timerId !== undefined) {
4774
- clearTimeout(timerId);
4986
+ function filterHotkeys(hotkeys, filter) {
4987
+ if (filter) {
4988
+ const result = [];
4989
+ const normalizedFilter = filter.toLowerCase();
4990
+ for (const hotkeysBlock of hotkeys) {
4991
+ const filteredItems = hotkeysBlock.items.filter((item) => item.title.toLowerCase().includes(normalizedFilter));
4992
+ if (filteredItems.length > 0) {
4993
+ result.push(Object.assign(Object.assign({}, hotkeysBlock), { items: filteredItems }));
4994
+ }
4995
+ }
4996
+ return result;
4775
4997
  }
4776
- lastInvokeTime = 0;
4777
- lastArgs = lastCallTime = lastThis = timerId = undefined;
4778
- }
4998
+ return hotkeys;
4999
+ }
4779
5000
 
4780
- function flush() {
4781
- return timerId === undefined ? result : trailingEdge(now());
4782
- }
5001
+ var css_248z$9 = ".gn-hotkeys-panel {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n --hotkeys-panel-width: 400px;\n --hotkeys-panel-vertical-padding: 18px;\n --hotkeys-panel-horizontal-padding: 24px;\n}\n.gn-hotkeys-panel__drawer-item {\n width: var(--hotkeys-panel-width);\n padding: var(--hotkeys-panel-vertical-padding) 0;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n}\n.gn-hotkeys-panel__title {\n margin: 0 var(--hotkeys-panel-horizontal-padding) 16px var(--hotkeys-panel-horizontal-padding);\n}\n.gn-hotkeys-panel__search {\n padding: 0 var(--hotkeys-panel-horizontal-padding);\n margin-bottom: 14px;\n}\n.gn-hotkeys-panel__list {\n flex: 1;\n overflow-y: auto;\n}\n.gn-hotkeys-panel__item {\n height: auto;\n padding: 8px var(--hotkeys-panel-horizontal-padding);\n}\n.gn-hotkeys-panel__item.yc-list__item_active {\n background: inherit;\n}\n.gn-hotkeys-panel__item-content {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n width: 100%;\n font-size: var(--g-text-body-1-font-size);\n line-height: var(--g-text-body-1-line-height);\n color: var(--g-color-text-primary);\n}\n.gn-hotkeys-panel__item-content_group {\n font-size: var(--g-text-body-2-font-size);\n font-weight: 500;\n line-height: var(--g-text-body-2-line-height);\n}\n.gn-hotkeys-panel__hotkey {\n color: var(--g-color-text-complementary);\n}";
5002
+ styleInject(css_248z$9);
4783
5003
 
4784
- function debounced() {
4785
- var time = now(),
4786
- isInvoking = shouldInvoke(time);
5004
+ const b$a = block('hotkeys-panel');
5005
+ function HotkeysPanel(_a) {
5006
+ var { visible, onClose, leftOffset, topOffset, className, preventScrollBody, hotkeys, itemClassName, filterPlaceholder, title, emptyState } = _a, listProps = __rest(_a, ["visible", "onClose", "leftOffset", "topOffset", "className", "preventScrollBody", "hotkeys", "itemClassName", "filterPlaceholder", "title", "emptyState"]);
5007
+ const [filter, setFilter] = useState('');
5008
+ const hotkeysList = useMemo(() => {
5009
+ const filteredHotkeys = filterHotkeys(hotkeys, filter);
5010
+ return flattenHotkeyGroups(filteredHotkeys);
5011
+ }, [hotkeys, filter]);
5012
+ const renderItem = useCallback((item) => (React__default.createElement("div", { className: b$a('item-content', { group: item.group }), key: item.title },
5013
+ item.title,
5014
+ item.value && React__default.createElement(Hotkey, { className: b$a('hotkey'), value: item.value }))), []);
5015
+ const drawerItemContent = (React__default.createElement(React__default.Fragment, null,
5016
+ React__default.createElement("h2", { className: b$a('title') }, title),
5017
+ React__default.createElement(TextInput, { value: filter, onUpdate: setFilter, placeholder: filterPlaceholder, autoFocus: true, className: b$a('search') }),
5018
+ React__default.createElement(List, Object.assign({ className: b$a('list'), virtualized: false, filterable: false, items: hotkeysList, renderItem: renderItem, itemClassName: b$a('item', itemClassName), emptyPlaceholder: emptyState }, listProps))));
5019
+ return (React__default.createElement(Drawer, { className: b$a(null, className), onVeilClick: onClose, onEscape: onClose, preventScrollBody: preventScrollBody, style: {
5020
+ left: leftOffset,
5021
+ top: topOffset,
5022
+ } },
5023
+ React__default.createElement(DrawerItem, { id: "hotkeys", visible: visible, className: b$a('drawer-item'), content: drawerItemContent })));
5024
+ }
4787
5025
 
4788
- lastArgs = arguments;
4789
- lastThis = this;
4790
- lastCallTime = time;
5026
+ /**
5027
+ * This method returns the first argument it receives.
5028
+ *
5029
+ * @static
5030
+ * @since 0.1.0
5031
+ * @memberOf _
5032
+ * @category Util
5033
+ * @param {*} value Any value.
5034
+ * @returns {*} Returns `value`.
5035
+ * @example
5036
+ *
5037
+ * var object = { 'a': 1 };
5038
+ *
5039
+ * console.log(_.identity(object) === object);
5040
+ * // => true
5041
+ */
4791
5042
 
4792
- if (isInvoking) {
4793
- if (timerId === undefined) {
4794
- return leadingEdge(lastCallTime);
4795
- }
4796
- if (maxing) {
4797
- // Handle invocations in a tight loop.
4798
- clearTimeout(timerId);
4799
- timerId = setTimeout(timerExpired, wait);
4800
- return invokeFunc(lastCallTime);
4801
- }
4802
- }
4803
- if (timerId === undefined) {
4804
- timerId = setTimeout(timerExpired, wait);
4805
- }
4806
- return result;
4807
- }
4808
- debounced.cancel = cancel;
4809
- debounced.flush = flush;
4810
- return debounced;
5043
+ function identity(value) {
5044
+ return value;
4811
5045
  }
4812
5046
 
4813
- var debounce_1 = debounce;
5047
+ var identity_1 = identity;
4814
5048
 
4815
5049
  function useStableCallback(func) {
4816
5050
  const funcRef = React.useRef();
@@ -4954,6 +5188,23 @@ const SettingsMenuMobile = ({ items, onChange, activeItemId, className, }) => {
4954
5188
  React__default.createElement(Tabs, { items: tabItems, className: b$7(null, className), size: "l", activeTab: activeItemId, onSelectTab: onChange })));
4955
5189
  };
4956
5190
 
5191
+ var label_title$1 = "Settings";
5192
+ var en$1 = {
5193
+ label_title: label_title$1,
5194
+ "label_filter-placeholder": "Search settings",
5195
+ "label_empty-placeholder": "No results found"
5196
+ };
5197
+
5198
+ var label_title = "Настройки";
5199
+ var ru$1 = {
5200
+ label_title: label_title,
5201
+ "label_filter-placeholder": "Найти настройки",
5202
+ "label_empty-placeholder": "Ничего не найдено"
5203
+ };
5204
+
5205
+ const COMPONENT$1 = 'Settings';
5206
+ var i18n$1 = registerKeyset({ en: en$1, ru: ru$1 }, COMPONENT$1);
5207
+
4957
5208
  function getSettingsFromChildren(children, searchText = '') {
4958
5209
  // 'abc def fg' -> abc.*?cde.*?fg
4959
5210
  const preparedFilter = escapeStringForRegExp(searchText).replace(/\s+/g, '.*?');
@@ -5079,11 +5330,6 @@ var css_248z$6 = ".gn-settings {\n display: grid;\n grid-template-columns: 216
5079
5330
  styleInject(css_248z$6);
5080
5331
 
5081
5332
  const b$6 = block('settings');
5082
- const defaultDict = {
5083
- heading_settings: 'Settings',
5084
- placeholder_search: 'Search settings',
5085
- not_found: 'No results found',
5086
- };
5087
5333
  function Settings(_a) {
5088
5334
  var { loading, renderLoading, children, view = 'normal' } = _a, props = __rest(_a, ["loading", "renderLoading", "children", "view"]);
5089
5335
  if (loading) {
@@ -5103,10 +5349,7 @@ const getPageTitleById = (menu, activePage) => {
5103
5349
  }
5104
5350
  return '';
5105
5351
  };
5106
- Settings.defaultProps = {
5107
- dict: defaultDict,
5108
- };
5109
- function SettingsContent({ initialPage, children, renderNotFound, dict, view, onPageChange, onClose, }) {
5352
+ function SettingsContent({ initialPage, children, renderNotFound, title = i18n$1('label_title'), filterPlaceholder = i18n$1('label_filter-placeholder'), emptyPlaceholder = i18n$1('label_empty-placeholder'), view, onPageChange, onClose, }) {
5110
5353
  var _a, _b;
5111
5354
  const [search, setSearch] = React__default.useState('');
5112
5355
  const { menu, pages } = getSettingsFromChildren(children, search);
@@ -5148,7 +5391,7 @@ function SettingsContent({ initialPage, children, renderNotFound, dict, view, on
5148
5391
  });
5149
5392
  const renderPageContent = () => {
5150
5393
  if (!activePage) {
5151
- return typeof renderNotFound === 'function' ? (renderNotFound()) : (React__default.createElement("div", { className: b$6('not-found') }, dict === null || dict === void 0 ? void 0 : dict.not_found));
5394
+ return typeof renderNotFound === 'function' ? (renderNotFound()) : (React__default.createElement("div", { className: b$6('not-found') }, emptyPlaceholder));
5152
5395
  }
5153
5396
  const filteredSections = pages[activePage].sections.filter((section) => !section.hidden);
5154
5397
  return (React__default.createElement(React__default.Fragment, null,
@@ -5175,8 +5418,8 @@ function SettingsContent({ initialPage, children, renderNotFound, dict, view, on
5175
5418
  }
5176
5419
  }
5177
5420
  } },
5178
- React__default.createElement(Title, null, dict === null || dict === void 0 ? void 0 : dict.heading_settings),
5179
- React__default.createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), onChange: setSearch, placeholder: dict === null || dict === void 0 ? void 0 : dict.placeholder_search, autoFocus: true }),
5421
+ React__default.createElement(Title, null, title),
5422
+ React__default.createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), onChange: setSearch, placeholder: filterPlaceholder, autoFocus: true }),
5180
5423
  React__default.createElement(SettingsMenu, { ref: menuRef, items: menu, onChange: handlePageChange, activeItemId: activePage }))),
5181
5424
  React__default.createElement("div", { className: b$6('page') }, renderPageContent())));
5182
5425
  }
@@ -5239,7 +5482,7 @@ var css_248z$5 = ".gn-mobile-header-burger {\n margin: 0;\n padding: 0;\n fon
5239
5482
  styleInject(css_248z$5);
5240
5483
 
5241
5484
  const b$5 = block('mobile-header-burger');
5242
- const Burger = React__default.memo(({ opened, className, onClick }) => (React__default.createElement("button", { className: b$5({ opened }, className), onClick: onClick, "aria-label": opened ? defaultDict$2['button_close-burger'] : defaultDict$2['button_open-burger'] },
5485
+ const Burger = React__default.memo(({ closeTitle, openTitle, opened, className, onClick }) => (React__default.createElement("button", { className: b$5({ opened }, className), onClick: onClick, "aria-label": opened ? closeTitle : openTitle },
5243
5486
  React__default.createElement("span", { className: b$5('icon') },
5244
5487
  React__default.createElement("span", { className: b$5('icon-dash') })))));
5245
5488
  Burger.displayName = 'Burger';
@@ -5345,11 +5588,28 @@ const BurgerMenu = React__default.memo(({ items = [], renderFooter, modalItem, c
5345
5588
  });
5346
5589
  BurgerMenu.displayName = 'BurgerMenu';
5347
5590
 
5591
+ var burger_button_close$1 = "Close menu";
5592
+ var burger_button_open$1 = "Open menu";
5593
+ var en = {
5594
+ burger_button_close: burger_button_close$1,
5595
+ burger_button_open: burger_button_open$1
5596
+ };
5597
+
5598
+ var burger_button_close = "Закрыть меню";
5599
+ var burger_button_open = "Открыть меню";
5600
+ var ru = {
5601
+ burger_button_close: burger_button_close,
5602
+ burger_button_open: burger_button_open
5603
+ };
5604
+
5605
+ const COMPONENT = 'MobileHeader';
5606
+ var i18n = registerKeyset({ en, ru }, COMPONENT);
5607
+
5348
5608
  var css_248z$1 = ".gn-mobile-header {\n --mobile-header-min-heigth: 50px;\n --mobile-header-icon-size: 20px;\n background-color: var(--g-color-base-background);\n}\n.gn-mobile-header__header {\n background-color: var(--g-color-base-background);\n border-bottom: 1px solid var(--g-color-line-generic);\n position: sticky;\n top: 0;\n padding: 0 10px;\n box-sizing: border-box;\n display: flex;\n justify-content: space-between;\n align-items: center;\n z-index: 100;\n}\n.gn-mobile-header__burger {\n padding: 12px;\n}\n.gn-mobile-header__burger-menu, .gn-mobile-header__panel-item {\n background-color: var(--g-color-base-background);\n width: 320px;\n max-width: 90vw;\n max-height: 100%;\n}\n.gn-mobile-header__user-menu {\n overflow-y: auto;\n}\n.gn-mobile-header__panels {\n z-index: 98;\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: var(--mobile-header-min-heigth);\n overflow: hidden;\n}\n.gn-mobile-header__content {\n overflow: auto;\n}";
5349
5609
  styleInject(css_248z$1);
5350
5610
 
5351
5611
  const b$1 = block('mobile-header');
5352
- const MobileHeader = React__default.forwardRef(({ logo, burgerMenu, panelItems = [], renderContent, sideItemRenderContent, onClosePanel, onEvent, className, }, ref) => {
5612
+ const MobileHeader = React__default.forwardRef(({ logo, burgerMenu, burgerCloseTitle = i18n('burger_button_close'), burgerOpenTitle = i18n('burger_button_open'), panelItems = [], renderContent, sideItemRenderContent, onClosePanel, onEvent, className, }, ref) => {
5353
5613
  const targetRef = useForwardRef(ref);
5354
5614
  const [compact] = useState(true);
5355
5615
  const [visiblePanel, setVisiblePanel] = useState(null);
@@ -5439,7 +5699,7 @@ const MobileHeader = React__default.forwardRef(({ logo, burgerMenu, panelItems =
5439
5699
  }, [targetRef, onBurgerClose, onBurgerOpen]);
5440
5700
  return (React__default.createElement("div", { className: b$1({ compact }, className), ref: targetRef },
5441
5701
  React__default.createElement("header", { className: b$1('header'), style: { height: size } },
5442
- React__default.createElement(Burger, { opened: visiblePanel === burgerPanelItem.id, onClick: () => onPanelToggle(BURGER_PANEL_ITEM_ID), className: b$1('burger') }),
5702
+ React__default.createElement(Burger, { opened: visiblePanel === burgerPanelItem.id, onClick: () => onPanelToggle(BURGER_PANEL_ITEM_ID), className: b$1('burger'), closeTitle: burgerCloseTitle, openTitle: burgerOpenTitle }),
5443
5703
  React__default.createElement(Logo, Object.assign({}, logo, { compact: compact, onClick: onLogoClick })),
5444
5704
  React__default.createElement("div", { className: b$1('side-item') }, sideItemRenderContent === null || sideItemRenderContent === void 0 ? void 0 : sideItemRenderContent({ size }))),
5445
5705
  React__default.createElement(Drawer, { className: b$1('panels'), onVeilClick: onCloseDrawer, onEscape: onCloseDrawer, style: { top: size } }, [burgerPanelItem, ...panelItems].map((item) => (React__default.createElement(DrawerItem, Object.assign({}, item, { key: item.id, visible: visiblePanel === item.id, className: b$1('panel-item', item.className) }))))),
@@ -5466,5 +5726,5 @@ const FooterItem = ({ icon, iconSize = MOBILE_HEADER_ICON_SIZE, className, modal
5466
5726
  React__default.createElement(Sheet, { id: modalItem.id, title: modalItem.title, visible: modalItem.visible, className: b('modal', modalItem.className), contentClassName: b('modal-content', modalItem.contentClassName), allowHideOnContentScroll: modalItem.modalAllowHideOnContentScroll, onClose: modalItem.onClose }, (_a = modalItem.renderContent) === null || _a === void 0 ? void 0 : _a.call(modalItem))));
5467
5727
  };
5468
5728
 
5469
- export { PublicActionBar as ActionBar, AsideHeader, AsideHeaderContextProvider, Dict, Drawer, DrawerItem, FooterItem$1 as FooterItem, HotkeysPanel, MobileHeader, MobileHeaderDict, FooterItem as MobileHeaderFooterItem, Settings, Title, useAsideHeaderContext };
5729
+ export { PublicActionBar as ActionBar, AsideHeader, AsideHeaderContextProvider, Drawer, DrawerItem, FooterItem$1 as FooterItem, HotkeysPanel, Lang, MobileHeader, FooterItem as MobileHeaderFooterItem, Settings, Title, configure, useAsideHeaderContext };
5470
5730
  //# sourceMappingURL=index.js.map