@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.
- package/README.md +17 -1
- package/build/cjs/components/AsideHeader/AsideHeader.d.ts +4 -2
- package/build/cjs/components/AsideHeader/i18n/index.d.ts +2 -0
- package/build/cjs/components/CompositeBar/CompositeBar.d.ts +2 -2
- package/build/cjs/components/CompositeBar/HighlightedItem/HighlightedItem.d.ts +12 -0
- package/build/cjs/components/CompositeBar/Item/Item.d.ts +3 -0
- package/build/cjs/components/CompositeBar/constants.d.ts +0 -1
- package/build/cjs/components/CompositeBar/utils.d.ts +2 -2
- package/build/cjs/components/MobileHeader/Burger/Burger.d.ts +5 -2
- package/build/cjs/components/MobileHeader/MobileHeader.d.ts +2 -0
- package/build/cjs/components/MobileHeader/i18n/index.d.ts +2 -0
- package/build/cjs/components/Settings/Settings.d.ts +4 -7
- package/build/cjs/components/Settings/i18n/index.d.ts +2 -0
- package/build/cjs/components/Title/Title.d.ts +1 -3
- package/build/cjs/components/Title/i18n/index.d.ts +2 -0
- package/build/cjs/components/constants.d.ts +1 -8
- package/build/cjs/components/index.d.ts +1 -0
- package/build/cjs/components/types.d.ts +0 -10
- package/build/cjs/components/utils/cn.d.ts +3 -3
- package/build/cjs/components/utils/registerKeyset.d.ts +5 -0
- package/build/cjs/i18n.d.ts +2 -0
- package/build/cjs/index.js +1346 -1085
- package/build/cjs/index.js.map +1 -1
- package/build/esm/components/AsideHeader/AsideHeader.d.ts +4 -2
- package/build/esm/components/AsideHeader/i18n/index.d.ts +2 -0
- package/build/esm/components/CompositeBar/CompositeBar.d.ts +2 -2
- package/build/esm/components/CompositeBar/HighlightedItem/HighlightedItem.d.ts +12 -0
- package/build/esm/components/CompositeBar/Item/Item.d.ts +3 -0
- package/build/esm/components/CompositeBar/constants.d.ts +0 -1
- package/build/esm/components/CompositeBar/utils.d.ts +2 -2
- package/build/esm/components/MobileHeader/Burger/Burger.d.ts +5 -2
- package/build/esm/components/MobileHeader/MobileHeader.d.ts +2 -0
- package/build/esm/components/MobileHeader/i18n/index.d.ts +2 -0
- package/build/esm/components/Settings/Settings.d.ts +4 -7
- package/build/esm/components/Settings/i18n/index.d.ts +2 -0
- package/build/esm/components/Title/Title.d.ts +1 -3
- package/build/esm/components/Title/i18n/index.d.ts +2 -0
- package/build/esm/components/constants.d.ts +1 -8
- package/build/esm/components/index.d.ts +1 -0
- package/build/esm/components/types.d.ts +0 -10
- package/build/esm/components/utils/cn.d.ts +3 -3
- package/build/esm/components/utils/registerKeyset.d.ts +5 -0
- package/build/esm/i18n.d.ts +2 -0
- package/build/esm/index.js +1272 -1012
- package/build/esm/index.js.map +1 -1
- package/package.json +4 -1
package/build/esm/index.js
CHANGED
|
@@ -1,94 +1,17 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import React__default, { Children, isValidElement, cloneElement, Component, createElement,
|
|
3
|
-
import {
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
9
|
+
withNaming({ e: '__', m: '_' });
|
|
10
|
+
const block = withNaming({ n: NAMESPACE, e: '__', m: '_' });
|
|
69
11
|
|
|
70
|
-
|
|
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$
|
|
3140
|
-
styleInject(css_248z$
|
|
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$
|
|
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$
|
|
3147
|
-
React__default.createElement("div", { ref: itemRef, className: b$
|
|
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$
|
|
3179
|
-
React__default.createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b$
|
|
3180
|
-
React__default.createElement("div", { ref: veilRef, className: b$
|
|
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$
|
|
3200
|
-
styleInject(css_248z$
|
|
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$
|
|
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$
|
|
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$
|
|
3145
|
+
logo = (React__default.createElement("div", { className: b$n('logo'), style: { fontSize: textSize } }, text));
|
|
3221
3146
|
}
|
|
3222
|
-
return (React__default.createElement("div", { className: b$
|
|
3223
|
-
React__default.createElement("div", { className: b$
|
|
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$
|
|
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(
|
|
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
|
-
|
|
3705
|
-
|
|
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
|
-
|
|
3708
|
-
|
|
3709
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3833
|
-
styleInject(css_248z$j);
|
|
3659
|
+
/** Detect free variable `global` from Node.js. */
|
|
3834
3660
|
|
|
3835
|
-
|
|
3836
|
-
|
|
3837
|
-
|
|
3838
|
-
|
|
3839
|
-
|
|
3840
|
-
|
|
3841
|
-
|
|
3842
|
-
|
|
3843
|
-
|
|
3844
|
-
|
|
3845
|
-
|
|
3846
|
-
|
|
3847
|
-
|
|
3848
|
-
|
|
3849
|
-
|
|
3850
|
-
|
|
3851
|
-
|
|
3852
|
-
|
|
3853
|
-
|
|
3854
|
-
|
|
3855
|
-
|
|
3856
|
-
|
|
3857
|
-
|
|
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
|
|
3863
|
-
styleInject(css_248z$i);
|
|
3697
|
+
var now_1 = now$1;
|
|
3864
3698
|
|
|
3865
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3972
|
-
|
|
3973
|
-
|
|
3974
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
4008
|
-
|
|
3722
|
+
/** Used to match leading whitespace. */
|
|
3723
|
+
var reTrimStart = /^\s+/;
|
|
4009
3724
|
|
|
4010
|
-
|
|
4011
|
-
|
|
4012
|
-
|
|
4013
|
-
|
|
4014
|
-
|
|
4015
|
-
|
|
4016
|
-
|
|
4017
|
-
|
|
4018
|
-
|
|
4019
|
-
|
|
4020
|
-
|
|
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
|
-
|
|
4096
|
-
purpose with or without fee is hereby granted.
|
|
3740
|
+
var root = _root;
|
|
4097
3741
|
|
|
4098
|
-
|
|
4099
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4125
|
-
|
|
3749
|
+
/** Used for built-in method references. */
|
|
3750
|
+
var objectProto$1 = Object.prototype;
|
|
4126
3751
|
|
|
4127
|
-
|
|
4128
|
-
|
|
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
|
-
|
|
4137
|
-
|
|
4138
|
-
|
|
4139
|
-
|
|
4140
|
-
|
|
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
|
-
|
|
4143
|
-
|
|
3762
|
+
/** Built-in value references. */
|
|
3763
|
+
var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : undefined;
|
|
4144
3764
|
|
|
4145
|
-
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
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
|
-
|
|
4152
|
-
|
|
3776
|
+
try {
|
|
3777
|
+
value[symToStringTag$1] = undefined;
|
|
3778
|
+
var unmasked = true;
|
|
3779
|
+
} catch (e) {}
|
|
4153
3780
|
|
|
4154
|
-
|
|
4155
|
-
|
|
4156
|
-
|
|
4157
|
-
|
|
4158
|
-
|
|
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
|
|
4161
|
-
styleInject(css_248z$c);
|
|
3792
|
+
var _getRawTag = getRawTag$1;
|
|
4162
3793
|
|
|
4163
|
-
|
|
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
|
|
4170
|
-
styleInject(css_248z$b);
|
|
3796
|
+
var objectProto = Object.prototype;
|
|
4171
3797
|
|
|
4172
|
-
|
|
4173
|
-
|
|
4174
|
-
|
|
4175
|
-
|
|
4176
|
-
|
|
4177
|
-
|
|
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
|
-
|
|
4185
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4202
|
-
|
|
4203
|
-
|
|
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
|
-
|
|
4214
|
-
|
|
4215
|
-
|
|
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
|
-
|
|
4229
|
-
|
|
3826
|
+
/** Built-in value references. */
|
|
3827
|
+
var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;
|
|
4230
3828
|
|
|
4231
|
-
|
|
4232
|
-
|
|
4233
|
-
|
|
4234
|
-
|
|
4235
|
-
|
|
4236
|
-
|
|
4237
|
-
|
|
4238
|
-
|
|
4239
|
-
|
|
4240
|
-
|
|
4241
|
-
|
|
4242
|
-
|
|
4243
|
-
|
|
4244
|
-
|
|
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
|
-
*
|
|
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
|
-
* @
|
|
4260
|
-
* @
|
|
4261
|
-
* @
|
|
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
|
-
*
|
|
3859
|
+
* _.isObjectLike({});
|
|
3860
|
+
* // => true
|
|
4265
3861
|
*
|
|
4266
|
-
*
|
|
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
|
|
4271
|
-
return value;
|
|
3872
|
+
function isObjectLike$1(value) {
|
|
3873
|
+
return value != null && typeof value == 'object';
|
|
4272
3874
|
}
|
|
4273
3875
|
|
|
4274
|
-
var
|
|
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
|
|
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.
|
|
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
|
|
3892
|
+
* @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
|
|
4287
3893
|
* @example
|
|
4288
3894
|
*
|
|
4289
|
-
* _.
|
|
4290
|
-
* // => true
|
|
4291
|
-
*
|
|
4292
|
-
* _.isObject([1, 2, 3]);
|
|
4293
|
-
* // => true
|
|
4294
|
-
*
|
|
4295
|
-
* _.isObject(_.noop);
|
|
3895
|
+
* _.isSymbol(Symbol.iterator);
|
|
4296
3896
|
* // => true
|
|
4297
3897
|
*
|
|
4298
|
-
* _.
|
|
3898
|
+
* _.isSymbol('abc');
|
|
4299
3899
|
* // => false
|
|
4300
3900
|
*/
|
|
4301
|
-
|
|
4302
|
-
|
|
4303
|
-
|
|
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
|
|
3906
|
+
var isSymbol_1 = isSymbol$1;
|
|
4308
3907
|
|
|
4309
|
-
|
|
3908
|
+
var baseTrim = _baseTrim,
|
|
3909
|
+
isObject$1 = isObject_1,
|
|
3910
|
+
isSymbol = isSymbol_1;
|
|
4310
3911
|
|
|
4311
|
-
|
|
3912
|
+
/** Used as references for various `Number` constants. */
|
|
3913
|
+
var NAN = 0 / 0;
|
|
4312
3914
|
|
|
4313
|
-
|
|
3915
|
+
/** Used to detect bad signed hexadecimal string values. */
|
|
3916
|
+
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
|
|
4314
3917
|
|
|
4315
|
-
|
|
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
|
-
|
|
4712
|
-
|
|
4713
|
-
|
|
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
|
-
|
|
4716
|
-
|
|
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
|
-
|
|
4722
|
-
|
|
4723
|
-
|
|
4724
|
-
|
|
4725
|
-
|
|
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
|
-
|
|
4731
|
-
|
|
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
|
-
|
|
4736
|
-
|
|
4737
|
-
|
|
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
|
-
|
|
4741
|
-
|
|
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
|
-
|
|
4745
|
-
|
|
4746
|
-
|
|
4747
|
-
|
|
4748
|
-
|
|
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
|
-
|
|
4752
|
-
|
|
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
|
-
|
|
4761
|
-
|
|
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
|
-
|
|
4764
|
-
|
|
4765
|
-
|
|
4766
|
-
|
|
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
|
-
|
|
4773
|
-
if (
|
|
4774
|
-
|
|
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
|
-
|
|
4777
|
-
|
|
4778
|
-
}
|
|
4998
|
+
return hotkeys;
|
|
4999
|
+
}
|
|
4779
5000
|
|
|
4780
|
-
|
|
4781
|
-
|
|
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
|
-
|
|
4785
|
-
|
|
4786
|
-
|
|
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
|
-
|
|
4789
|
-
|
|
4790
|
-
|
|
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
|
-
|
|
4793
|
-
|
|
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
|
|
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
|
-
|
|
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') },
|
|
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,
|
|
5179
|
-
React__default.createElement(SettingsSearch, { inputRef: searchInputRef, className: b$6('search'), onChange: setSearch, placeholder:
|
|
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 ?
|
|
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,
|
|
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
|