@gravity-ui/navigation 1.6.1 → 1.7.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 +20 -7
- package/build/cjs/{ActionBar-393db3ea.js → ActionBar-96a59723.js} +8 -7
- package/build/cjs/{ActionBar-393db3ea.js.map → ActionBar-96a59723.js.map} +1 -1
- package/build/cjs/AsideFallback.js +31 -0
- package/build/cjs/AsideFallback.js.map +1 -0
- package/build/cjs/AsideHeader.js +9 -21
- package/build/cjs/AsideHeader.js.map +1 -1
- package/build/cjs/{Content-20bde76c.js → Content-64d5738a.js} +3 -10
- package/build/cjs/Content-64d5738a.js.map +1 -0
- package/build/cjs/Drawer.js +3 -2
- package/build/cjs/Drawer.js.map +1 -1
- package/build/cjs/{FooterItem-907eca32.js → FooterItem-eafaeac3.js} +10 -9
- package/build/cjs/{FooterItem-907eca32.js.map → FooterItem-eafaeac3.js.map} +1 -1
- package/build/cjs/FooterItem.js +6 -4
- package/build/cjs/FooterItem.js.map +1 -1
- package/build/cjs/{HotkeysPanel-7823f66a.js → HotkeysPanel-2e240e4d.js} +4 -3
- package/build/cjs/{HotkeysPanel-7823f66a.js.map → HotkeysPanel-2e240e4d.js.map} +1 -1
- package/build/cjs/{Item-15bdb320.js → Item-836015b7.js} +10 -16
- package/build/cjs/Item-836015b7.js.map +1 -0
- package/build/cjs/PageLayout.js +15 -85
- package/build/cjs/PageLayout.js.map +1 -1
- package/build/cjs/PageLayoutAside.js +879 -11
- package/build/cjs/PageLayoutAside.js.map +1 -1
- package/build/cjs/{Settings-6db7b88c.js → Settings-11b021e4.js} +8 -7
- package/build/cjs/{Settings-6db7b88c.js.map → Settings-11b021e4.js.map} +1 -1
- package/build/cjs/{Title-d58ff158.js → Title-c539667f.js} +4 -3
- package/build/cjs/{Title-d58ff158.js.map → Title-c539667f.js.map} +1 -1
- package/build/cjs/TopPanel-b531a2be.js +82 -0
- package/build/cjs/TopPanel-b531a2be.js.map +1 -0
- package/build/cjs/cn-1964a72a.js +10 -0
- package/build/cjs/cn-1964a72a.js.map +1 -0
- package/build/cjs/components/AsideHeader/AsideHeader.d.ts +0 -15
- package/build/cjs/components/AsideHeader/__stories__/AsideHeader.stories.d.ts +4 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/AsideFallback.d.ts +6 -0
- package/build/cjs/components/AsideHeader/components/PageLayout/PageLayout.d.ts +2 -3
- package/build/cjs/components/AsideHeader/types.d.ts +0 -1
- package/build/cjs/components/CompositeBar/constants.d.ts +0 -1
- package/build/cjs/components/Content/Content.d.ts +0 -1
- package/build/cjs/components/constants.d.ts +2 -0
- package/build/cjs/components/index.d.ts +1 -0
- package/build/cjs/constants-d81c3867.js +14 -0
- package/build/cjs/constants-d81c3867.js.map +1 -0
- package/build/cjs/divider-collapsed-153868e7.js +41 -0
- package/build/cjs/divider-collapsed-153868e7.js.map +1 -0
- package/build/cjs/index.js +14 -9
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/index2.js +3 -2
- package/build/cjs/index2.js.map +1 -1
- package/build/cjs/index3.js +3 -2
- package/build/cjs/index3.js.map +1 -1
- package/build/cjs/index4.js +3 -2
- package/build/cjs/index4.js.map +1 -1
- package/build/cjs/index5.js +4 -3
- package/build/cjs/index5.js.map +1 -1
- package/build/cjs/index6.js +4 -3
- package/build/cjs/index6.js.map +1 -1
- package/build/cjs/{style-inject.es-935afc04.js → style-inject.es-dcee06b6.js} +1 -8
- package/build/cjs/style-inject.es-dcee06b6.js.map +1 -0
- package/build/cjs/utils-a93dd754.js +8 -0
- package/build/cjs/utils-a93dd754.js.map +1 -0
- package/build/esm/{ActionBar-f1c9a2d3.js → ActionBar-68f814a3.js} +3 -2
- package/build/esm/{ActionBar-f1c9a2d3.js.map → ActionBar-68f814a3.js.map} +1 -1
- package/build/esm/AsideFallback.js +23 -0
- package/build/esm/AsideFallback.js.map +1 -0
- package/build/esm/AsideHeader.js +9 -21
- package/build/esm/AsideHeader.js.map +1 -1
- package/build/esm/Content-f94ba85d.js +14 -0
- package/build/esm/Content-f94ba85d.js.map +1 -0
- package/build/esm/Drawer.js +2 -1
- package/build/esm/Drawer.js.map +1 -1
- package/build/esm/{FooterItem-70c9cb68.js → FooterItem-39ac7c22.js} +4 -3
- package/build/esm/{FooterItem-70c9cb68.js.map → FooterItem-39ac7c22.js.map} +1 -1
- package/build/esm/FooterItem.js +4 -2
- package/build/esm/FooterItem.js.map +1 -1
- package/build/esm/{HotkeysPanel-82fe991b.js → HotkeysPanel-bd0e997d.js} +3 -2
- package/build/esm/{HotkeysPanel-82fe991b.js.map → HotkeysPanel-bd0e997d.js.map} +1 -1
- package/build/esm/{Item-f02541c1.js → Item-ab589218.js} +5 -8
- package/build/esm/Item-ab589218.js.map +1 -0
- package/build/esm/PageLayout.js +14 -84
- package/build/esm/PageLayout.js.map +1 -1
- package/build/esm/PageLayoutAside.js +859 -9
- package/build/esm/PageLayoutAside.js.map +1 -1
- package/build/esm/{Settings-21bc1aba.js → Settings-31634d93.js} +4 -3
- package/build/esm/{Settings-21bc1aba.js.map → Settings-31634d93.js.map} +1 -1
- package/build/esm/{Title-3d579ca4.js → Title-b2f2c4e9.js} +3 -2
- package/build/esm/{Title-3d579ca4.js.map → Title-b2f2c4e9.js.map} +1 -1
- package/build/esm/TopPanel-36ffc4c7.js +76 -0
- package/build/esm/TopPanel-36ffc4c7.js.map +1 -0
- package/build/esm/cn-589cd9e2.js +8 -0
- package/build/esm/cn-589cd9e2.js.map +1 -0
- package/build/esm/components/AsideHeader/AsideHeader.d.ts +0 -15
- package/build/esm/components/AsideHeader/__stories__/AsideHeader.stories.d.ts +4 -0
- package/build/esm/components/AsideHeader/components/PageLayout/AsideFallback.d.ts +6 -0
- package/build/esm/components/AsideHeader/components/PageLayout/PageLayout.d.ts +2 -3
- package/build/esm/components/AsideHeader/types.d.ts +0 -1
- package/build/esm/components/CompositeBar/constants.d.ts +0 -1
- package/build/esm/components/Content/Content.d.ts +0 -1
- package/build/esm/components/constants.d.ts +2 -0
- package/build/esm/components/index.d.ts +1 -0
- package/build/esm/constants-b1604ff5.js +8 -0
- package/build/esm/constants-b1604ff5.js.map +1 -0
- package/build/esm/divider-collapsed-6468fa36.js +19 -0
- package/build/esm/divider-collapsed-6468fa36.js.map +1 -0
- package/build/esm/index.js +13 -9
- package/build/esm/index.js.map +1 -1
- package/build/esm/index2.js +3 -2
- package/build/esm/index2.js.map +1 -1
- package/build/esm/index3.js +3 -2
- package/build/esm/index3.js.map +1 -1
- package/build/esm/index4.js +3 -2
- package/build/esm/index4.js.map +1 -1
- package/build/esm/index5.js +4 -3
- package/build/esm/index5.js.map +1 -1
- package/build/esm/index6.js +4 -3
- package/build/esm/index6.js.map +1 -1
- package/build/esm/{style-inject.es-cfd97593.js → style-inject.es-1f59c1d0.js} +2 -8
- package/build/esm/style-inject.es-1f59c1d0.js.map +1 -0
- package/build/esm/utils-6d5146c7.js +6 -0
- package/build/esm/utils-6d5146c7.js.map +1 -0
- package/package.json +1 -1
- package/build/cjs/Content-20bde76c.js.map +0 -1
- package/build/cjs/FirstPanel-2f78b962.js +0 -902
- package/build/cjs/FirstPanel-2f78b962.js.map +0 -1
- package/build/cjs/Item-15bdb320.js.map +0 -1
- package/build/cjs/style-inject.es-935afc04.js.map +0 -1
- package/build/esm/Content-d8b28d56.js +0 -21
- package/build/esm/Content-d8b28d56.js.map +0 -1
- package/build/esm/FirstPanel-bafddc24.js +0 -875
- package/build/esm/FirstPanel-bafddc24.js.map +0 -1
- package/build/esm/Item-f02541c1.js.map +0 -1
- package/build/esm/style-inject.es-cfd97593.js.map +0 -1
|
@@ -1,875 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import React__default, { Component, createElement, useRef, useContext, useCallback, useMemo, useState, useEffect } from 'react';
|
|
3
|
-
import { Popup, List, Icon, Button, Flex, Text, setRef } from '@gravity-ui/uikit';
|
|
4
|
-
import { s as styleInject, b as block } from './style-inject.es-cfd97593.js';
|
|
5
|
-
import { C as COLLAPSE_ITEM_ID, g as getItemsMinHeight, c as getAutosizeListItems, a as ASIDE_HEADER_COMPACT_WIDTH, d as getSelectedItemIndex, e as getItemHeight, f as getItemsHeight, i as isMenuItem, I as Item, h as getMoreButtonItem } from './Item-f02541c1.js';
|
|
6
|
-
import { useAsideHeaderContext, useAsideHeaderInnerContext } from './AsideHeaderContext.js';
|
|
7
|
-
import { Ellipsis, Pin, PinFill, Gear } from '@gravity-ui/icons';
|
|
8
|
-
import { r as registerKeyset } from './registerKeyset-35f1ea08.js';
|
|
9
|
-
import { Drawer, DrawerItem } from './Drawer.js';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Detect Element Resize.
|
|
13
|
-
* https://github.com/sdecima/javascript-detect-element-resize
|
|
14
|
-
* Sebastian Decima
|
|
15
|
-
*
|
|
16
|
-
* Forked from version 0.5.3; includes the following modifications:
|
|
17
|
-
* 1) Guard against unsafe 'window' and 'document' references (to support SSR).
|
|
18
|
-
* 2) Defer initialization code via a top-level function wrapper (to support SSR).
|
|
19
|
-
* 3) Avoid unnecessary reflows by not measuring size for scroll events bubbling from children.
|
|
20
|
-
* 4) Add nonce for style element.
|
|
21
|
-
* 5) Use 'export' statement over 'module.exports' assignment
|
|
22
|
-
**/
|
|
23
|
-
|
|
24
|
-
// Check `document` and `window` in case of server-side rendering
|
|
25
|
-
let windowObject;
|
|
26
|
-
if (typeof window !== "undefined") {
|
|
27
|
-
windowObject = window;
|
|
28
|
-
|
|
29
|
-
// eslint-disable-next-line no-restricted-globals
|
|
30
|
-
} else if (typeof self !== "undefined") {
|
|
31
|
-
// eslint-disable-next-line no-restricted-globals
|
|
32
|
-
windowObject = self;
|
|
33
|
-
} else {
|
|
34
|
-
windowObject = global;
|
|
35
|
-
}
|
|
36
|
-
let cancelFrame = null;
|
|
37
|
-
let requestFrame = null;
|
|
38
|
-
const TIMEOUT_DURATION = 20;
|
|
39
|
-
const clearTimeoutFn = windowObject.clearTimeout;
|
|
40
|
-
const setTimeoutFn = windowObject.setTimeout;
|
|
41
|
-
const cancelAnimationFrameFn = windowObject.cancelAnimationFrame || windowObject.mozCancelAnimationFrame || windowObject.webkitCancelAnimationFrame;
|
|
42
|
-
const requestAnimationFrameFn = windowObject.requestAnimationFrame || windowObject.mozRequestAnimationFrame || windowObject.webkitRequestAnimationFrame;
|
|
43
|
-
if (cancelAnimationFrameFn == null || requestAnimationFrameFn == null) {
|
|
44
|
-
// For environments that don't support animation frame,
|
|
45
|
-
// fallback to a setTimeout based approach.
|
|
46
|
-
cancelFrame = clearTimeoutFn;
|
|
47
|
-
requestFrame = function requestAnimationFrameViaSetTimeout(callback) {
|
|
48
|
-
return setTimeoutFn(callback, TIMEOUT_DURATION);
|
|
49
|
-
};
|
|
50
|
-
} else {
|
|
51
|
-
// Counter intuitively, environments that support animation frames can be trickier.
|
|
52
|
-
// Chrome's "Throttle non-visible cross-origin iframes" flag can prevent rAFs from being called.
|
|
53
|
-
// In this case, we should fallback to a setTimeout() implementation.
|
|
54
|
-
cancelFrame = function cancelFrame([animationFrameID, timeoutID]) {
|
|
55
|
-
cancelAnimationFrameFn(animationFrameID);
|
|
56
|
-
clearTimeoutFn(timeoutID);
|
|
57
|
-
};
|
|
58
|
-
requestFrame = function requestAnimationFrameWithSetTimeoutFallback(callback) {
|
|
59
|
-
const animationFrameID = requestAnimationFrameFn(function animationFrameCallback() {
|
|
60
|
-
clearTimeoutFn(timeoutID);
|
|
61
|
-
callback();
|
|
62
|
-
});
|
|
63
|
-
const timeoutID = setTimeoutFn(function timeoutCallback() {
|
|
64
|
-
cancelAnimationFrameFn(animationFrameID);
|
|
65
|
-
callback();
|
|
66
|
-
}, TIMEOUT_DURATION);
|
|
67
|
-
return [animationFrameID, timeoutID];
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
function createDetectElementResize(nonce) {
|
|
71
|
-
let animationKeyframes;
|
|
72
|
-
let animationName;
|
|
73
|
-
let animationStartEvent;
|
|
74
|
-
let animationStyle;
|
|
75
|
-
let checkTriggers;
|
|
76
|
-
let resetTriggers;
|
|
77
|
-
let scrollListener;
|
|
78
|
-
const attachEvent = typeof document !== "undefined" && document.attachEvent;
|
|
79
|
-
if (!attachEvent) {
|
|
80
|
-
resetTriggers = function (element) {
|
|
81
|
-
const triggers = element.__resizeTriggers__,
|
|
82
|
-
expand = triggers.firstElementChild,
|
|
83
|
-
contract = triggers.lastElementChild,
|
|
84
|
-
expandChild = expand.firstElementChild;
|
|
85
|
-
contract.scrollLeft = contract.scrollWidth;
|
|
86
|
-
contract.scrollTop = contract.scrollHeight;
|
|
87
|
-
expandChild.style.width = expand.offsetWidth + 1 + "px";
|
|
88
|
-
expandChild.style.height = expand.offsetHeight + 1 + "px";
|
|
89
|
-
expand.scrollLeft = expand.scrollWidth;
|
|
90
|
-
expand.scrollTop = expand.scrollHeight;
|
|
91
|
-
};
|
|
92
|
-
checkTriggers = function (element) {
|
|
93
|
-
return element.offsetWidth !== element.__resizeLast__.width || element.offsetHeight !== element.__resizeLast__.height;
|
|
94
|
-
};
|
|
95
|
-
scrollListener = function (e) {
|
|
96
|
-
// Don't measure (which forces) reflow for scrolls that happen inside of children!
|
|
97
|
-
if (e.target.className && typeof e.target.className.indexOf === "function" && e.target.className.indexOf("contract-trigger") < 0 && e.target.className.indexOf("expand-trigger") < 0) {
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
const element = this;
|
|
101
|
-
resetTriggers(this);
|
|
102
|
-
if (this.__resizeRAF__) {
|
|
103
|
-
cancelFrame(this.__resizeRAF__);
|
|
104
|
-
}
|
|
105
|
-
this.__resizeRAF__ = requestFrame(function animationFrame() {
|
|
106
|
-
if (checkTriggers(element)) {
|
|
107
|
-
element.__resizeLast__.width = element.offsetWidth;
|
|
108
|
-
element.__resizeLast__.height = element.offsetHeight;
|
|
109
|
-
element.__resizeListeners__.forEach(function forEachResizeListener(fn) {
|
|
110
|
-
fn.call(element, e);
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
/* Detect CSS Animations support to detect element display/re-attach */
|
|
117
|
-
let animation = false;
|
|
118
|
-
let keyframeprefix = "";
|
|
119
|
-
animationStartEvent = "animationstart";
|
|
120
|
-
const domPrefixes = "Webkit Moz O ms".split(" ");
|
|
121
|
-
let startEvents = "webkitAnimationStart animationstart oAnimationStart MSAnimationStart".split(" ");
|
|
122
|
-
let pfx = "";
|
|
123
|
-
{
|
|
124
|
-
const elm = document.createElement("fakeelement");
|
|
125
|
-
if (elm.style.animationName !== undefined) {
|
|
126
|
-
animation = true;
|
|
127
|
-
}
|
|
128
|
-
if (animation === false) {
|
|
129
|
-
for (let i = 0; i < domPrefixes.length; i++) {
|
|
130
|
-
if (elm.style[domPrefixes[i] + "AnimationName"] !== undefined) {
|
|
131
|
-
pfx = domPrefixes[i];
|
|
132
|
-
keyframeprefix = "-" + pfx.toLowerCase() + "-";
|
|
133
|
-
animationStartEvent = startEvents[i];
|
|
134
|
-
animation = true;
|
|
135
|
-
break;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
animationName = "resizeanim";
|
|
141
|
-
animationKeyframes = "@" + keyframeprefix + "keyframes " + animationName + " { from { opacity: 0; } to { opacity: 0; } } ";
|
|
142
|
-
animationStyle = keyframeprefix + "animation: 1ms " + animationName + "; ";
|
|
143
|
-
}
|
|
144
|
-
const createStyles = function (doc) {
|
|
145
|
-
if (!doc.getElementById("detectElementResize")) {
|
|
146
|
-
//opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360
|
|
147
|
-
const css = (animationKeyframes ? animationKeyframes : "") + ".resize-triggers { " + (animationStyle ? animationStyle : "") + "visibility: hidden; opacity: 0; } " + '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: " "; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',
|
|
148
|
-
head = doc.head || doc.getElementsByTagName("head")[0],
|
|
149
|
-
style = doc.createElement("style");
|
|
150
|
-
style.id = "detectElementResize";
|
|
151
|
-
style.type = "text/css";
|
|
152
|
-
if (nonce != null) {
|
|
153
|
-
style.setAttribute("nonce", nonce);
|
|
154
|
-
}
|
|
155
|
-
if (style.styleSheet) {
|
|
156
|
-
style.styleSheet.cssText = css;
|
|
157
|
-
} else {
|
|
158
|
-
style.appendChild(doc.createTextNode(css));
|
|
159
|
-
}
|
|
160
|
-
head.appendChild(style);
|
|
161
|
-
}
|
|
162
|
-
};
|
|
163
|
-
const addResizeListener = function (element, fn) {
|
|
164
|
-
if (attachEvent) {
|
|
165
|
-
element.attachEvent("onresize", fn);
|
|
166
|
-
} else {
|
|
167
|
-
if (!element.__resizeTriggers__) {
|
|
168
|
-
const doc = element.ownerDocument;
|
|
169
|
-
const elementStyle = windowObject.getComputedStyle(element);
|
|
170
|
-
if (elementStyle && elementStyle.position === "static") {
|
|
171
|
-
element.style.position = "relative";
|
|
172
|
-
}
|
|
173
|
-
createStyles(doc);
|
|
174
|
-
element.__resizeLast__ = {};
|
|
175
|
-
element.__resizeListeners__ = [];
|
|
176
|
-
(element.__resizeTriggers__ = doc.createElement("div")).className = "resize-triggers";
|
|
177
|
-
const expandTrigger = doc.createElement("div");
|
|
178
|
-
expandTrigger.className = "expand-trigger";
|
|
179
|
-
expandTrigger.appendChild(doc.createElement("div"));
|
|
180
|
-
const contractTrigger = doc.createElement("div");
|
|
181
|
-
contractTrigger.className = "contract-trigger";
|
|
182
|
-
element.__resizeTriggers__.appendChild(expandTrigger);
|
|
183
|
-
element.__resizeTriggers__.appendChild(contractTrigger);
|
|
184
|
-
element.appendChild(element.__resizeTriggers__);
|
|
185
|
-
resetTriggers(element);
|
|
186
|
-
element.addEventListener("scroll", scrollListener, true);
|
|
187
|
-
|
|
188
|
-
/* Listen for a css animation to detect element display/re-attach */
|
|
189
|
-
if (animationStartEvent) {
|
|
190
|
-
element.__resizeTriggers__.__animationListener__ = function animationListener(e) {
|
|
191
|
-
if (e.animationName === animationName) {
|
|
192
|
-
resetTriggers(element);
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
element.__resizeTriggers__.addEventListener(animationStartEvent, element.__resizeTriggers__.__animationListener__);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
element.__resizeListeners__.push(fn);
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
const removeResizeListener = function (element, fn) {
|
|
202
|
-
if (attachEvent) {
|
|
203
|
-
element.detachEvent("onresize", fn);
|
|
204
|
-
} else {
|
|
205
|
-
element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);
|
|
206
|
-
if (!element.__resizeListeners__.length) {
|
|
207
|
-
element.removeEventListener("scroll", scrollListener, true);
|
|
208
|
-
if (element.__resizeTriggers__.__animationListener__) {
|
|
209
|
-
element.__resizeTriggers__.removeEventListener(animationStartEvent, element.__resizeTriggers__.__animationListener__);
|
|
210
|
-
element.__resizeTriggers__.__animationListener__ = null;
|
|
211
|
-
}
|
|
212
|
-
try {
|
|
213
|
-
element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__);
|
|
214
|
-
} catch (e) {
|
|
215
|
-
// Preact compat; see developit/preact-compat/issues/228
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
};
|
|
220
|
-
return {
|
|
221
|
-
addResizeListener,
|
|
222
|
-
removeResizeListener
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
class AutoSizer extends Component {
|
|
227
|
-
constructor(...args) {
|
|
228
|
-
super(...args);
|
|
229
|
-
this.state = {
|
|
230
|
-
height: this.props.defaultHeight || 0,
|
|
231
|
-
scaledHeight: this.props.defaultHeight || 0,
|
|
232
|
-
scaledWidth: this.props.defaultWidth || 0,
|
|
233
|
-
width: this.props.defaultWidth || 0
|
|
234
|
-
};
|
|
235
|
-
this._autoSizer = null;
|
|
236
|
-
this._detectElementResize = null;
|
|
237
|
-
this._parentNode = null;
|
|
238
|
-
this._resizeObserver = null;
|
|
239
|
-
this._timeoutId = null;
|
|
240
|
-
this._onResize = () => {
|
|
241
|
-
this._timeoutId = null;
|
|
242
|
-
const {
|
|
243
|
-
disableHeight,
|
|
244
|
-
disableWidth,
|
|
245
|
-
onResize
|
|
246
|
-
} = this.props;
|
|
247
|
-
if (this._parentNode) {
|
|
248
|
-
var _style$paddingLeft, _style$paddingRight, _style$paddingTop, _style$paddingBottom;
|
|
249
|
-
// Guard against AutoSizer component being removed from the DOM immediately after being added.
|
|
250
|
-
// This can result in invalid style values which can result in NaN values if we don't handle them.
|
|
251
|
-
// See issue #150 for more context.
|
|
252
|
-
|
|
253
|
-
const style = window.getComputedStyle(this._parentNode) || {};
|
|
254
|
-
const paddingLeft = parseFloat((_style$paddingLeft = style.paddingLeft) !== null && _style$paddingLeft !== void 0 ? _style$paddingLeft : "0");
|
|
255
|
-
const paddingRight = parseFloat((_style$paddingRight = style.paddingRight) !== null && _style$paddingRight !== void 0 ? _style$paddingRight : "0");
|
|
256
|
-
const paddingTop = parseFloat((_style$paddingTop = style.paddingTop) !== null && _style$paddingTop !== void 0 ? _style$paddingTop : "0");
|
|
257
|
-
const paddingBottom = parseFloat((_style$paddingBottom = style.paddingBottom) !== null && _style$paddingBottom !== void 0 ? _style$paddingBottom : "0");
|
|
258
|
-
const rect = this._parentNode.getBoundingClientRect();
|
|
259
|
-
const scaledHeight = rect.height - paddingTop - paddingBottom;
|
|
260
|
-
const scaledWidth = rect.width - paddingLeft - paddingRight;
|
|
261
|
-
const height = this._parentNode.offsetHeight - paddingTop - paddingBottom;
|
|
262
|
-
const width = this._parentNode.offsetWidth - paddingLeft - paddingRight;
|
|
263
|
-
if (!disableHeight && (this.state.height !== height || this.state.scaledHeight !== scaledHeight) || !disableWidth && (this.state.width !== width || this.state.scaledWidth !== scaledWidth)) {
|
|
264
|
-
this.setState({
|
|
265
|
-
height,
|
|
266
|
-
width,
|
|
267
|
-
scaledHeight,
|
|
268
|
-
scaledWidth
|
|
269
|
-
});
|
|
270
|
-
if (typeof onResize === "function") {
|
|
271
|
-
onResize({
|
|
272
|
-
height,
|
|
273
|
-
scaledHeight,
|
|
274
|
-
scaledWidth,
|
|
275
|
-
width
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
};
|
|
281
|
-
this._setRef = autoSizer => {
|
|
282
|
-
this._autoSizer = autoSizer;
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
componentDidMount() {
|
|
286
|
-
const {
|
|
287
|
-
nonce
|
|
288
|
-
} = this.props;
|
|
289
|
-
if (this._autoSizer && this._autoSizer.parentNode && this._autoSizer.parentNode.ownerDocument && this._autoSizer.parentNode.ownerDocument.defaultView && this._autoSizer.parentNode instanceof this._autoSizer.parentNode.ownerDocument.defaultView.HTMLElement) {
|
|
290
|
-
// Delay access of parentNode until mount.
|
|
291
|
-
// This handles edge-cases where the component has already been unmounted before its ref has been set,
|
|
292
|
-
// As well as libraries like react-lite which have a slightly different lifecycle.
|
|
293
|
-
this._parentNode = this._autoSizer.parentNode;
|
|
294
|
-
|
|
295
|
-
// Defer requiring resize handler in order to support server-side rendering.
|
|
296
|
-
// See issue #41
|
|
297
|
-
if (this._parentNode != null) {
|
|
298
|
-
if (typeof ResizeObserver !== "undefined") {
|
|
299
|
-
this._resizeObserver = new ResizeObserver(() => {
|
|
300
|
-
// Guard against "ResizeObserver loop limit exceeded" error;
|
|
301
|
-
// could be triggered if the state update causes the ResizeObserver handler to run long.
|
|
302
|
-
// See https://github.com/bvaughn/react-virtualized-auto-sizer/issues/55
|
|
303
|
-
this._timeoutId = setTimeout(this._onResize, 0);
|
|
304
|
-
});
|
|
305
|
-
this._resizeObserver.observe(this._parentNode);
|
|
306
|
-
} else {
|
|
307
|
-
this._detectElementResize = createDetectElementResize(nonce);
|
|
308
|
-
this._detectElementResize.addResizeListener(this._parentNode, this._onResize);
|
|
309
|
-
}
|
|
310
|
-
this._onResize();
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
componentWillUnmount() {
|
|
315
|
-
if (this._parentNode) {
|
|
316
|
-
if (this._detectElementResize) {
|
|
317
|
-
this._detectElementResize.removeResizeListener(this._parentNode, this._onResize);
|
|
318
|
-
}
|
|
319
|
-
if (this._timeoutId !== null) {
|
|
320
|
-
clearTimeout(this._timeoutId);
|
|
321
|
-
}
|
|
322
|
-
if (this._resizeObserver) {
|
|
323
|
-
this._resizeObserver.observe(this._parentNode);
|
|
324
|
-
this._resizeObserver.disconnect();
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
render() {
|
|
329
|
-
const {
|
|
330
|
-
children,
|
|
331
|
-
defaultHeight,
|
|
332
|
-
defaultWidth,
|
|
333
|
-
disableHeight = false,
|
|
334
|
-
disableWidth = false,
|
|
335
|
-
nonce,
|
|
336
|
-
onResize,
|
|
337
|
-
style = {},
|
|
338
|
-
tagName = "div",
|
|
339
|
-
...rest
|
|
340
|
-
} = this.props;
|
|
341
|
-
const {
|
|
342
|
-
height,
|
|
343
|
-
scaledHeight,
|
|
344
|
-
scaledWidth,
|
|
345
|
-
width
|
|
346
|
-
} = this.state;
|
|
347
|
-
|
|
348
|
-
// Outer div should not force width/height since that may prevent containers from shrinking.
|
|
349
|
-
// Inner component should overflow and use calculated width/height.
|
|
350
|
-
// See issue #68 for more information.
|
|
351
|
-
const outerStyle = {
|
|
352
|
-
overflow: "visible"
|
|
353
|
-
};
|
|
354
|
-
const childParams = {};
|
|
355
|
-
|
|
356
|
-
// Avoid rendering children before the initial measurements have been collected.
|
|
357
|
-
// At best this would just be wasting cycles.
|
|
358
|
-
let bailoutOnChildren = false;
|
|
359
|
-
if (!disableHeight) {
|
|
360
|
-
if (height === 0) {
|
|
361
|
-
bailoutOnChildren = true;
|
|
362
|
-
}
|
|
363
|
-
outerStyle.height = 0;
|
|
364
|
-
childParams.height = height;
|
|
365
|
-
childParams.scaledHeight = scaledHeight;
|
|
366
|
-
}
|
|
367
|
-
if (!disableWidth) {
|
|
368
|
-
if (width === 0) {
|
|
369
|
-
bailoutOnChildren = true;
|
|
370
|
-
}
|
|
371
|
-
outerStyle.width = 0;
|
|
372
|
-
childParams.width = width;
|
|
373
|
-
childParams.scaledWidth = scaledWidth;
|
|
374
|
-
}
|
|
375
|
-
return createElement(tagName, {
|
|
376
|
-
ref: this._setRef,
|
|
377
|
-
style: {
|
|
378
|
-
...outerStyle,
|
|
379
|
-
...style
|
|
380
|
-
},
|
|
381
|
-
...rest
|
|
382
|
-
}, !bailoutOnChildren && children(childParams));
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
const multipleTooltipContextDefaults = {
|
|
387
|
-
active: false,
|
|
388
|
-
activeIndex: undefined,
|
|
389
|
-
hideCollapseItemTooltip: false,
|
|
390
|
-
lastClickedItemIndex: undefined,
|
|
391
|
-
setValue: () => { },
|
|
392
|
-
};
|
|
393
|
-
const MultipleTooltipContext = React__default.createContext(multipleTooltipContextDefaults);
|
|
394
|
-
class MultipleTooltipProvider extends React__default.PureComponent {
|
|
395
|
-
constructor() {
|
|
396
|
-
super(...arguments);
|
|
397
|
-
this.state = Object.assign({}, multipleTooltipContextDefaults);
|
|
398
|
-
this.setValue = (value) => {
|
|
399
|
-
this.setState(Object.assign({}, value));
|
|
400
|
-
};
|
|
401
|
-
}
|
|
402
|
-
render() {
|
|
403
|
-
const { children } = this.props;
|
|
404
|
-
return (React__default.createElement(MultipleTooltipContext.Provider, { value: Object.assign(Object.assign({}, this.state), { setValue: this.setValue }) }, children));
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
var css_248z$4 = ".g-root_theme_dark .gn-multiple-tooltip,.g-root_theme_dark-hc .gn-multiple-tooltip{--multiple-tooltip-item-bg-color:#424147;--multiple-tooltip-item-active-bg-color:var(--g-color-base-float-heavy);--multiple-tooltip-backdrop-background:linear-gradient(90deg,#313036,rgba(49,48,54,.3));--multiple-tooltip-backdrop-filter:blur(16px)}.g-root_theme_light .gn-multiple-tooltip,.g-root_theme_light-hc .gn-multiple-tooltip{--multiple-tooltip-item-bg-color:#7a7a7a;--multiple-tooltip-item-active-bg-color:var(--g-color-base-float-heavy);--multiple-tooltip-backdrop-background:linear-gradient(90deg,#fff,hsla(0,0%,100%,.3));--multiple-tooltip-backdrop-filter:blur(12px)}.gn-multiple-tooltip{background-color:transparent;box-shadow:none}.gn-multiple-tooltip:before{background:var(--multiple-tooltip-backdrop-background);box-shadow:none;content:\"\";filter:var(--multiple-tooltip-backdrop-filter);height:100%;position:absolute;width:100%;z-index:-1}.gn-multiple-tooltip__items-container{align-items:flex-start;display:flex;flex-direction:column;padding:32px 40px 32px 12px}.gn-multiple-tooltip__item{align-items:center;background-color:var(--multiple-tooltip-item-bg-color);border-radius:5px;box-sizing:border-box;color:var(--g-color-text-light-primary);display:flex;height:30px;margin-bottom:5px;padding:8px 12px;position:relative;transition:transform .1s ease-in-out}.gn-multiple-tooltip__item:first-child,.gn-multiple-tooltip__item:not(.gn-multiple-tooltip__item_divider)+.gn-multiple-tooltip__item:not(.gn-multiple-tooltip__item_divider){margin-top:5px}.gn-multiple-tooltip__item_divider+.gn-multiple-tooltip__item:not(.gn-multiple-tooltip__item_divider){margin-top:4px}.gn-multiple-tooltip__item_active{background-color:var(--multiple-tooltip-item-active-bg-color);transform:translateX(-12px)}.gn-multiple-tooltip__item_divider{height:15px;margin:0;visibility:hidden}";
|
|
409
|
-
styleInject(css_248z$4);
|
|
410
|
-
|
|
411
|
-
const b$5 = block('multiple-tooltip');
|
|
412
|
-
const POPUP_OFFSET = [-32, 4];
|
|
413
|
-
const POPUP_MODIFIERS = [
|
|
414
|
-
{
|
|
415
|
-
name: 'preventOverflow',
|
|
416
|
-
enabled: false,
|
|
417
|
-
},
|
|
418
|
-
];
|
|
419
|
-
const MultipleTooltip = ({ items, open, anchorRef, placement, }) => {
|
|
420
|
-
const { activeIndex, hideCollapseItemTooltip } = React__default.useContext(MultipleTooltipContext);
|
|
421
|
-
const activeItem = activeIndex === undefined ? null : items[activeIndex];
|
|
422
|
-
return (React__default.createElement(Popup, { open: open, anchorRef: anchorRef, placement: placement, offset: POPUP_OFFSET, contentClassName: b$5(null), modifiers: POPUP_MODIFIERS, disableLayer: true },
|
|
423
|
-
React__default.createElement("div", { className: b$5('items-container') }, items
|
|
424
|
-
.filter(({ type = 'regular', id }) => !hideCollapseItemTooltip ||
|
|
425
|
-
(id !== COLLAPSE_ITEM_ID && type !== 'action'))
|
|
426
|
-
.map((item, idx) => {
|
|
427
|
-
switch (item.type) {
|
|
428
|
-
case 'divider':
|
|
429
|
-
return (React__default.createElement("div", { className: b$5('item', { divider: true }), key: idx }, item.title));
|
|
430
|
-
default:
|
|
431
|
-
return (React__default.createElement("div", { className: b$5('item', {
|
|
432
|
-
active: item === activeItem,
|
|
433
|
-
}), key: idx }, item.title));
|
|
434
|
-
}
|
|
435
|
-
}))));
|
|
436
|
-
};
|
|
437
|
-
|
|
438
|
-
var css_248z$3 = ".gn-composite-bar{flex:1 0 auto;min-height:40px;width:100%}.gn-composite-bar .gn-composite-bar__root-menu-item[class]{background-color:transparent}";
|
|
439
|
-
styleInject(css_248z$3);
|
|
440
|
-
|
|
441
|
-
const b$4 = block('composite-bar');
|
|
442
|
-
const CompositeBarView = ({ type, items, onItemClick, collapseItems, multipleTooltip = false, }) => {
|
|
443
|
-
const ref = useRef(null);
|
|
444
|
-
const tooltipRef = useRef(null);
|
|
445
|
-
const { setValue: setMultipleTooltipContextValue, active: multipleTooltipActive, activeIndex, lastClickedItemIndex, } = useContext(MultipleTooltipContext);
|
|
446
|
-
const { compact } = useAsideHeaderContext();
|
|
447
|
-
React__default.useEffect(() => {
|
|
448
|
-
function handleBlurWindow() {
|
|
449
|
-
if (multipleTooltip && multipleTooltipActive) {
|
|
450
|
-
setMultipleTooltipContextValue({ active: false });
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
window.addEventListener('blur', handleBlurWindow);
|
|
454
|
-
return () => {
|
|
455
|
-
window.removeEventListener('blur', handleBlurWindow);
|
|
456
|
-
};
|
|
457
|
-
}, [multipleTooltip, multipleTooltipActive, setMultipleTooltipContextValue]);
|
|
458
|
-
const onTooltipMouseEnter = useCallback((e) => {
|
|
459
|
-
if (multipleTooltip &&
|
|
460
|
-
compact &&
|
|
461
|
-
!multipleTooltipActive &&
|
|
462
|
-
document.hasFocus() &&
|
|
463
|
-
activeIndex !== lastClickedItemIndex &&
|
|
464
|
-
e.clientX <= ASIDE_HEADER_COMPACT_WIDTH) {
|
|
465
|
-
setMultipleTooltipContextValue === null || setMultipleTooltipContextValue === void 0 ? void 0 : setMultipleTooltipContextValue({
|
|
466
|
-
active: true,
|
|
467
|
-
});
|
|
468
|
-
}
|
|
469
|
-
}, [
|
|
470
|
-
multipleTooltip,
|
|
471
|
-
compact,
|
|
472
|
-
multipleTooltipActive,
|
|
473
|
-
activeIndex,
|
|
474
|
-
lastClickedItemIndex,
|
|
475
|
-
setMultipleTooltipContextValue,
|
|
476
|
-
]);
|
|
477
|
-
const onTooltipMouseLeave = useCallback(() => {
|
|
478
|
-
if (multipleTooltip && multipleTooltipActive && document.hasFocus()) {
|
|
479
|
-
setMultipleTooltipContextValue === null || setMultipleTooltipContextValue === void 0 ? void 0 : setMultipleTooltipContextValue({
|
|
480
|
-
active: false,
|
|
481
|
-
lastClickedItemIndex: undefined,
|
|
482
|
-
});
|
|
483
|
-
}
|
|
484
|
-
}, [multipleTooltip, multipleTooltipActive, setMultipleTooltipContextValue]);
|
|
485
|
-
const onMouseEnterByIndex = useCallback((itemIndex) => () => {
|
|
486
|
-
if (multipleTooltip && document.hasFocus()) {
|
|
487
|
-
let multipleTooltipActiveValue = multipleTooltipActive;
|
|
488
|
-
if (!multipleTooltipActive && itemIndex !== lastClickedItemIndex) {
|
|
489
|
-
multipleTooltipActiveValue = true;
|
|
490
|
-
}
|
|
491
|
-
if (activeIndex === itemIndex &&
|
|
492
|
-
multipleTooltipActive === multipleTooltipActiveValue) {
|
|
493
|
-
return;
|
|
494
|
-
}
|
|
495
|
-
setMultipleTooltipContextValue({
|
|
496
|
-
activeIndex: itemIndex,
|
|
497
|
-
active: multipleTooltipActiveValue,
|
|
498
|
-
});
|
|
499
|
-
}
|
|
500
|
-
}, [
|
|
501
|
-
multipleTooltip,
|
|
502
|
-
multipleTooltipActive,
|
|
503
|
-
lastClickedItemIndex,
|
|
504
|
-
activeIndex,
|
|
505
|
-
setMultipleTooltipContextValue,
|
|
506
|
-
]);
|
|
507
|
-
const onMouseLeave = useCallback(() => {
|
|
508
|
-
var _a;
|
|
509
|
-
if (compact && document.hasFocus()) {
|
|
510
|
-
(_a = ref.current) === null || _a === void 0 ? void 0 : _a.activateItem(undefined);
|
|
511
|
-
if (multipleTooltip &&
|
|
512
|
-
(activeIndex !== undefined || lastClickedItemIndex !== undefined)) {
|
|
513
|
-
setMultipleTooltipContextValue({
|
|
514
|
-
activeIndex: undefined,
|
|
515
|
-
lastClickedItemIndex: undefined,
|
|
516
|
-
});
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
}, [
|
|
520
|
-
activeIndex,
|
|
521
|
-
compact,
|
|
522
|
-
lastClickedItemIndex,
|
|
523
|
-
multipleTooltip,
|
|
524
|
-
setMultipleTooltipContextValue,
|
|
525
|
-
]);
|
|
526
|
-
const onItemClickByIndex = useCallback((itemIndex) => (item, collapsed, event) => {
|
|
527
|
-
if (compact &&
|
|
528
|
-
multipleTooltip &&
|
|
529
|
-
itemIndex !== lastClickedItemIndex &&
|
|
530
|
-
item.id !== COLLAPSE_ITEM_ID) {
|
|
531
|
-
setMultipleTooltipContextValue({
|
|
532
|
-
lastClickedItemIndex: itemIndex,
|
|
533
|
-
active: false,
|
|
534
|
-
});
|
|
535
|
-
}
|
|
536
|
-
onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item, collapsed, event);
|
|
537
|
-
}, [
|
|
538
|
-
compact,
|
|
539
|
-
lastClickedItemIndex,
|
|
540
|
-
multipleTooltip,
|
|
541
|
-
onItemClick,
|
|
542
|
-
setMultipleTooltipContextValue,
|
|
543
|
-
]);
|
|
544
|
-
return (React__default.createElement(React__default.Fragment, null,
|
|
545
|
-
React__default.createElement("div", { ref: tooltipRef, onMouseEnter: onTooltipMouseEnter, onMouseLeave: onTooltipMouseLeave },
|
|
546
|
-
React__default.createElement(List, { ref: ref, items: items, selectedItemIndex: type === 'menu' ? getSelectedItemIndex(items) : undefined, itemHeight: getItemHeight, itemsHeight: getItemsHeight, itemClassName: b$4('root-menu-item'), virtualized: false, filterable: false, sortable: false, renderItem: (item, _isItemActive, itemIndex) => {
|
|
547
|
-
const itemExtraProps = isMenuItem(item) ? { item } : item;
|
|
548
|
-
const enableTooltip = isMenuItem(item)
|
|
549
|
-
? !multipleTooltip
|
|
550
|
-
: item.enableTooltip;
|
|
551
|
-
return (React__default.createElement(Item, Object.assign({}, itemExtraProps, { enableTooltip: enableTooltip, onMouseEnter: onMouseEnterByIndex(itemIndex), onMouseLeave: onMouseLeave, onItemClick: onItemClickByIndex(itemIndex), collapseItems: collapseItems })));
|
|
552
|
-
} })),
|
|
553
|
-
type === 'menu' && multipleTooltip && (React__default.createElement(MultipleTooltip, { open: compact && multipleTooltipActive, anchorRef: tooltipRef, placement: ['right-start'], items: items }))));
|
|
554
|
-
};
|
|
555
|
-
const CompositeBar = ({ type, items, menuMoreTitle, onItemClick, multipleTooltip = false, }) => {
|
|
556
|
-
if (items.length === 0) {
|
|
557
|
-
return null;
|
|
558
|
-
}
|
|
559
|
-
let node;
|
|
560
|
-
if (type === 'menu') {
|
|
561
|
-
const minHeight = getItemsMinHeight(items);
|
|
562
|
-
const collapseItem = getMoreButtonItem(menuMoreTitle);
|
|
563
|
-
node = (React__default.createElement("div", { className: b$4({ autosizer: true }), style: { minHeight } }, items.length !== 0 && (React__default.createElement(AutoSizer, null, ({ width, height }) => {
|
|
564
|
-
const { listItems, collapseItems } = getAutosizeListItems(items, height, collapseItem);
|
|
565
|
-
return (React__default.createElement("div", { style: { width, height } },
|
|
566
|
-
React__default.createElement(CompositeBarView, { type: "menu", items: listItems, onItemClick: onItemClick, collapseItems: collapseItems, multipleTooltip: multipleTooltip })));
|
|
567
|
-
}))));
|
|
568
|
-
}
|
|
569
|
-
else {
|
|
570
|
-
node = (React__default.createElement("div", { className: b$4({ subheader: true }) },
|
|
571
|
-
React__default.createElement(CompositeBarView, { type: "subheader", items: items, onItemClick: onItemClick })));
|
|
572
|
-
}
|
|
573
|
-
return React__default.createElement(MultipleTooltipProvider, null, node);
|
|
574
|
-
};
|
|
575
|
-
|
|
576
|
-
const b$3 = block('aside-header');
|
|
577
|
-
|
|
578
|
-
var en$1 = {
|
|
579
|
-
"menu-item.all-pages.title": "All pages",
|
|
580
|
-
"all-panel.menu.category.allOther": "All other",
|
|
581
|
-
"all-panel.resetToDefault": "Reset to default",
|
|
582
|
-
"all-panel.title.editing": "Editing",
|
|
583
|
-
"all-panel.title.main": "All pages"
|
|
584
|
-
};
|
|
585
|
-
|
|
586
|
-
var ru$1 = {
|
|
587
|
-
"menu-item.all-pages.title": "Все страницы",
|
|
588
|
-
"all-panel.menu.category.allOther": "Остальное",
|
|
589
|
-
"all-panel.resetToDefault": "Сбросить по умолчанию",
|
|
590
|
-
"all-panel.title.editing": "Редактирование",
|
|
591
|
-
"all-panel.title.main": "Все страницы"
|
|
592
|
-
};
|
|
593
|
-
|
|
594
|
-
const COMPONENT$1 = 'AllPagesPanel';
|
|
595
|
-
var i18n$1 = registerKeyset({ en: en$1, ru: ru$1 }, COMPONENT$1);
|
|
596
|
-
|
|
597
|
-
const ALL_PAGES_ID = 'all-pages';
|
|
598
|
-
function getAllPagesMenuItem() {
|
|
599
|
-
return {
|
|
600
|
-
id: ALL_PAGES_ID,
|
|
601
|
-
title: i18n$1('menu-item.all-pages.title'),
|
|
602
|
-
tooltipText: i18n$1('menu-item.all-pages.title'),
|
|
603
|
-
icon: Ellipsis,
|
|
604
|
-
};
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
const useGroupedMenuItems = (items) => {
|
|
608
|
-
const allPagesMenuItems = useMemo(() => {
|
|
609
|
-
const filteredItems = items.filter((item) => item.type !== 'divider' && item.id !== ALL_PAGES_ID);
|
|
610
|
-
filteredItems.sort((a, b) => {
|
|
611
|
-
if (a.type === 'action') {
|
|
612
|
-
return 1;
|
|
613
|
-
}
|
|
614
|
-
if (b.type === 'action') {
|
|
615
|
-
return -1;
|
|
616
|
-
}
|
|
617
|
-
return 0;
|
|
618
|
-
});
|
|
619
|
-
const groupedItems = filteredItems.reduce((acc, item) => {
|
|
620
|
-
const category = item.category || i18n$1('all-panel.menu.category.allOther');
|
|
621
|
-
if (!acc[category]) {
|
|
622
|
-
acc[category] = [];
|
|
623
|
-
}
|
|
624
|
-
acc[category].push(item);
|
|
625
|
-
return acc;
|
|
626
|
-
}, {});
|
|
627
|
-
return groupedItems;
|
|
628
|
-
}, [items]);
|
|
629
|
-
return allPagesMenuItems;
|
|
630
|
-
};
|
|
631
|
-
|
|
632
|
-
var css_248z$2 = ".gn-all-pages-list-item{align-items:center;column-gap:var(--g-spacing-4);display:flex;height:40px;padding:0 var(--g-spacing-6);width:100%}.gn-all-pages-list-item__text{flex:1}.gn-all-pages-list-item__icon{color:var(--g-color-text-misc)}";
|
|
633
|
-
styleInject(css_248z$2);
|
|
634
|
-
|
|
635
|
-
const b$2 = block('all-pages-list-item');
|
|
636
|
-
const AllPagesListItem = (props) => {
|
|
637
|
-
const { item, editMode, onToggle } = props;
|
|
638
|
-
const onPinButtonClick = useCallback((e) => {
|
|
639
|
-
e.stopPropagation();
|
|
640
|
-
e.preventDefault();
|
|
641
|
-
onToggle();
|
|
642
|
-
}, [onToggle]);
|
|
643
|
-
const onItemClick = (e) => {
|
|
644
|
-
if (editMode) {
|
|
645
|
-
e.stopPropagation();
|
|
646
|
-
e.preventDefault();
|
|
647
|
-
}
|
|
648
|
-
};
|
|
649
|
-
return (React__default.createElement("div", { className: b$2(), onClick: onItemClick },
|
|
650
|
-
item.icon ? (React__default.createElement(Icon, { className: b$2('icon'), data: item.icon, size: item.iconSize })) : null,
|
|
651
|
-
React__default.createElement("span", { className: b$2('text') }, item.title),
|
|
652
|
-
editMode && (React__default.createElement(Button, { onClick: onPinButtonClick, view: item.hidden ? 'flat-secondary' : 'flat-action' },
|
|
653
|
-
React__default.createElement(Button.Icon, null, item.hidden ? React__default.createElement(Pin, null) : React__default.createElement(PinFill, null))))));
|
|
654
|
-
};
|
|
655
|
-
|
|
656
|
-
var css_248z$1 = ".gn-all-pages-panel{box-sizing:border-box;height:100%;min-width:300px;padding:var(--g-spacing-4) var(--g-spacing-6)}.gn-all-pages-panel__content{flex:1;margin:0 calc(var(--g-spacing-6)*-1);overflow:auto}.gn-all-pages-panel__category{padding:0 var(--g-spacing-6)}.gn-all-pages-panel__discoverable-feature-wrapper{display:flex}";
|
|
657
|
-
styleInject(css_248z$1);
|
|
658
|
-
|
|
659
|
-
const b$1 = block('all-pages-panel');
|
|
660
|
-
const AllPagesPanel = (props) => {
|
|
661
|
-
const { startEditIcon, onEditModeChanged, className } = props;
|
|
662
|
-
const { menuItems, onMenuItemsChanged } = useAsideHeaderInnerContext();
|
|
663
|
-
const menuItemsRef = useRef(menuItems);
|
|
664
|
-
menuItemsRef.current = menuItems;
|
|
665
|
-
const [isEditMode, setIsEditMode] = useState(false);
|
|
666
|
-
const toggleEditMode = useCallback(() => {
|
|
667
|
-
setIsEditMode((prev) => !prev);
|
|
668
|
-
}, []);
|
|
669
|
-
const groupedItems = useGroupedMenuItems(menuItems);
|
|
670
|
-
useEffect(() => {
|
|
671
|
-
onEditModeChanged === null || onEditModeChanged === void 0 ? void 0 : onEditModeChanged(isEditMode);
|
|
672
|
-
}, [isEditMode, onEditModeChanged]);
|
|
673
|
-
const onItemClick = useCallback((item) => {
|
|
674
|
-
var _a;
|
|
675
|
-
//@ts-ignore TODO fix when @gravity-ui/uikit/List will provide event arg on item click
|
|
676
|
-
(_a = item.onItemClick) === null || _a === void 0 ? void 0 : _a.call(item, item, false);
|
|
677
|
-
}, []);
|
|
678
|
-
const togglePageVisibility = useCallback((item) => {
|
|
679
|
-
if (!onMenuItemsChanged) {
|
|
680
|
-
return;
|
|
681
|
-
}
|
|
682
|
-
const changedItem = Object.assign(Object.assign({}, item), { hidden: !item.hidden });
|
|
683
|
-
const originItems = menuItemsRef.current.filter((menuItem) => menuItem.id !== ALL_PAGES_ID);
|
|
684
|
-
onMenuItemsChanged(originItems.map((menuItem) => {
|
|
685
|
-
if (menuItem.id !== changedItem.id) {
|
|
686
|
-
return menuItem;
|
|
687
|
-
}
|
|
688
|
-
return changedItem;
|
|
689
|
-
}));
|
|
690
|
-
}, [onMenuItemsChanged]);
|
|
691
|
-
const itemRender = useCallback((item, _isActive, _itemIndex) => (React__default.createElement(AllPagesListItem, { item: item, editMode: isEditMode, onToggle: () => togglePageVisibility(item) })), [isEditMode, togglePageVisibility]);
|
|
692
|
-
const onResetToDefaultClick = useCallback(() => {
|
|
693
|
-
if (!onMenuItemsChanged) {
|
|
694
|
-
return;
|
|
695
|
-
}
|
|
696
|
-
const originItems = menuItemsRef.current.filter((item) => item.id !== ALL_PAGES_ID);
|
|
697
|
-
onMenuItemsChanged(originItems.map((item) => (Object.assign(Object.assign({}, item), { hidden: false }))));
|
|
698
|
-
}, [onMenuItemsChanged]);
|
|
699
|
-
return (React__default.createElement(Flex, { className: b$1(null, className), gap: "5", direction: "column" },
|
|
700
|
-
React__default.createElement(Flex, { gap: "4", alignItems: "center", justifyContent: "space-between" },
|
|
701
|
-
React__default.createElement(Text, { variant: "subheader-2" }, isEditMode ? i18n$1('all-panel.title.editing') : i18n$1('all-panel.title.main')),
|
|
702
|
-
React__default.createElement(Button, { selected: isEditMode, view: "normal", onClick: toggleEditMode }, startEditIcon ? startEditIcon : React__default.createElement(Icon, { data: Gear }))),
|
|
703
|
-
React__default.createElement(Flex, { className: b$1('content'), gap: "5", direction: "column" }, Object.keys(groupedItems).map((category) => {
|
|
704
|
-
return (React__default.createElement(Flex, { key: category, direction: "column", gap: "3" },
|
|
705
|
-
React__default.createElement(Text, { className: b$1('category'), variant: "body-1", color: "secondary" }, category),
|
|
706
|
-
React__default.createElement(List, { virtualized: false, filterable: false, items: groupedItems[category], onItemClick: onItemClick, renderItem: itemRender })));
|
|
707
|
-
})),
|
|
708
|
-
isEditMode && (React__default.createElement(Button, { onClick: onResetToDefaultClick }, i18n$1('all-panel.resetToDefault')))));
|
|
709
|
-
};
|
|
710
|
-
|
|
711
|
-
const useVisibleMenuItems = () => {
|
|
712
|
-
const { menuItems, allPagesIsAvailable } = useAsideHeaderInnerContext();
|
|
713
|
-
return useMemo(() => {
|
|
714
|
-
if (!allPagesIsAvailable) {
|
|
715
|
-
return menuItems;
|
|
716
|
-
}
|
|
717
|
-
let lastVisibleIndex = 0;
|
|
718
|
-
return menuItems.filter((item, index, items) => {
|
|
719
|
-
if (item.hidden) {
|
|
720
|
-
return false;
|
|
721
|
-
}
|
|
722
|
-
if (index > 0 &&
|
|
723
|
-
item.type === 'divider' &&
|
|
724
|
-
(items[lastVisibleIndex].type === 'divider' || items[lastVisibleIndex].hidden)) {
|
|
725
|
-
return false;
|
|
726
|
-
}
|
|
727
|
-
lastVisibleIndex = index;
|
|
728
|
-
return true;
|
|
729
|
-
});
|
|
730
|
-
}, [allPagesIsAvailable, menuItems]);
|
|
731
|
-
};
|
|
732
|
-
|
|
733
|
-
var button_collapse$1 = "Collapse";
|
|
734
|
-
var button_expand$1 = "Expand";
|
|
735
|
-
var label_more$1 = "More";
|
|
736
|
-
var en = {
|
|
737
|
-
button_collapse: button_collapse$1,
|
|
738
|
-
button_expand: button_expand$1,
|
|
739
|
-
label_more: label_more$1
|
|
740
|
-
};
|
|
741
|
-
|
|
742
|
-
var button_collapse = "Свернуть";
|
|
743
|
-
var button_expand = "Развернуть";
|
|
744
|
-
var label_more = "Ещё";
|
|
745
|
-
var ru = {
|
|
746
|
-
button_collapse: button_collapse,
|
|
747
|
-
button_expand: button_expand,
|
|
748
|
-
label_more: label_more
|
|
749
|
-
};
|
|
750
|
-
|
|
751
|
-
const COMPONENT = 'AsideHeader';
|
|
752
|
-
var i18n = registerKeyset({ en, ru }, COMPONENT);
|
|
753
|
-
|
|
754
|
-
var css_248z = ".gn-logo{height:40px}.gn-logo,.gn-logo__logo-btn-place{align-items:center;display:flex;flex-shrink:0}.gn-logo__logo-btn-place{cursor:pointer;justify-content:center;width:var(--gn-aside-header-min-width)}.gn-logo__logo-btn-place .yc-button:before{background-color:transparent}.gn-logo__btn-logo.yc-button_view_flat.yc-button_size_l{--yc-button-height:var(--gn-aside-header-item-icon-background-size)}.gn-logo__logo{cursor:pointer;font-size:var(--g-text-body-2-font-size);font-weight:var(--g-text-body-font-weight);line-height:var(--g-text-body-2-line-height);vertical-align:middle}.gn-logo__logo-link,.gn-logo__logo-link:active,.gn-logo__logo-link:focus,.gn-logo__logo-link:hover,.gn-logo__logo-link:visited{color:inherit;outline:none;text-decoration:none}.g-root .gn-logo__btn-logo.button2_theme_flat.button2_hovered_yes:before{background-color:transparent}";
|
|
755
|
-
styleInject(css_248z);
|
|
756
|
-
|
|
757
|
-
const b = block('logo');
|
|
758
|
-
const Logo = ({ text, icon, iconSrc, iconClassName, iconSize = 24, textSize = 15, href, wrapper, onClick, }) => {
|
|
759
|
-
const { compact } = useAsideHeaderContext();
|
|
760
|
-
const hasWrapper = typeof wrapper === 'function';
|
|
761
|
-
let buttonIcon;
|
|
762
|
-
if (iconSrc) {
|
|
763
|
-
buttonIcon = (React__default.createElement(Button.Icon, { className: iconClassName },
|
|
764
|
-
React__default.createElement("img", { alt: "logo icon", src: iconSrc, width: iconSize, height: iconSize })));
|
|
765
|
-
}
|
|
766
|
-
else if (icon) {
|
|
767
|
-
buttonIcon = React__default.createElement(Icon, { data: icon, size: iconSize, className: iconClassName });
|
|
768
|
-
}
|
|
769
|
-
const button = (React__default.createElement(Button, { view: "flat", size: "l", className: b('btn-logo'), component: hasWrapper ? 'span' : undefined, onClick: onClick, target: "_self", href: href }, buttonIcon));
|
|
770
|
-
let logo;
|
|
771
|
-
if (typeof text === 'function') {
|
|
772
|
-
logo = text();
|
|
773
|
-
}
|
|
774
|
-
else {
|
|
775
|
-
logo = (React__default.createElement("div", { className: b('logo'), style: { fontSize: textSize } }, text));
|
|
776
|
-
}
|
|
777
|
-
return (React__default.createElement("div", { className: b() },
|
|
778
|
-
React__default.createElement("div", { className: b('logo-btn-place') }, hasWrapper ? wrapper(button, Boolean(compact)) : button),
|
|
779
|
-
!compact &&
|
|
780
|
-
(hasWrapper ? (React__default.createElement("div", { onClick: onClick }, wrapper(logo, Boolean(compact)))) : (React__default.createElement("a", { href: href !== null && href !== void 0 ? href : '/', target: "_self", className: b('logo-link'), onClick: onClick }, logo)))));
|
|
781
|
-
};
|
|
782
|
-
|
|
783
|
-
var _path$1;
|
|
784
|
-
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); }
|
|
785
|
-
var SvgDividerCollapsed = function SvgDividerCollapsed(props) {
|
|
786
|
-
return /*#__PURE__*/React.createElement("svg", _extends$1({
|
|
787
|
-
width: 56,
|
|
788
|
-
height: 29,
|
|
789
|
-
viewBox: "0 0 56 29",
|
|
790
|
-
fill: "currentColor",
|
|
791
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
792
|
-
}, props), _path$1 || (_path$1 = /*#__PURE__*/React.createElement("path", {
|
|
793
|
-
d: "M56 0v29c-.8-1-7-6.1-17.7-8.4L13 15.7A16 16 0 0 1 0 0Z"
|
|
794
|
-
})));
|
|
795
|
-
};
|
|
796
|
-
var headerDividerCollapsedIcon = SvgDividerCollapsed;
|
|
797
|
-
|
|
798
|
-
const DEFAULT_SUBHEADER_ITEMS = [];
|
|
799
|
-
const Header = () => {
|
|
800
|
-
const { logo, onItemClick, onClosePanel, headerDecoration, subheaderItems } = useAsideHeaderInnerContext();
|
|
801
|
-
const { onClick: onLogoClickProp } = logo;
|
|
802
|
-
const onLogoClick = useCallback((event) => {
|
|
803
|
-
onClosePanel === null || onClosePanel === void 0 ? void 0 : onClosePanel();
|
|
804
|
-
onLogoClickProp === null || onLogoClickProp === void 0 ? void 0 : onLogoClickProp(event);
|
|
805
|
-
}, [onClosePanel, onLogoClickProp]);
|
|
806
|
-
return (React__default.createElement("div", { className: b$3('header', { ['with-decoration']: headerDecoration }) },
|
|
807
|
-
React__default.createElement(Logo, Object.assign({}, logo, { onClick: onLogoClick })),
|
|
808
|
-
React__default.createElement(CompositeBar, { type: "subheader", items: subheaderItems || DEFAULT_SUBHEADER_ITEMS, onItemClick: onItemClick }),
|
|
809
|
-
React__default.createElement(Icon, { data: headerDividerCollapsedIcon, className: b$3('header-divider'), width: ASIDE_HEADER_COMPACT_WIDTH, height: "29" })));
|
|
810
|
-
};
|
|
811
|
-
|
|
812
|
-
function fakeDisplayName(newDisplayName, Component) {
|
|
813
|
-
const Fake = (props) => React__default.createElement(Component, Object.assign({}, props));
|
|
814
|
-
Fake.displayName = newDisplayName;
|
|
815
|
-
return Fake;
|
|
816
|
-
}
|
|
817
|
-
|
|
818
|
-
var _path;
|
|
819
|
-
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); }
|
|
820
|
-
var SvgControlMenuButton = function SvgControlMenuButton(props) {
|
|
821
|
-
return /*#__PURE__*/React.createElement("svg", _extends({
|
|
822
|
-
width: 8,
|
|
823
|
-
height: 8,
|
|
824
|
-
viewBox: "0 0 8 8",
|
|
825
|
-
fill: "currentColor",
|
|
826
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
827
|
-
}, props), _path || (_path = /*#__PURE__*/React.createElement("path", {
|
|
828
|
-
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"
|
|
829
|
-
})));
|
|
830
|
-
};
|
|
831
|
-
var controlMenuButtonIcon = SvgControlMenuButton;
|
|
832
|
-
|
|
833
|
-
// TODO: remove temporary fix for expand button
|
|
834
|
-
const NotIcon = fakeDisplayName('NotIcon', Icon);
|
|
835
|
-
const CollapseButton = () => {
|
|
836
|
-
const { onChangeCompact, compact, expandTitle, collapseTitle } = useAsideHeaderInnerContext();
|
|
837
|
-
const onCollapseButtonClick = useCallback(() => {
|
|
838
|
-
onChangeCompact === null || onChangeCompact === void 0 ? void 0 : onChangeCompact(!compact);
|
|
839
|
-
}, [compact, onChangeCompact]);
|
|
840
|
-
const buttonTitle = compact
|
|
841
|
-
? expandTitle || i18n('button_expand')
|
|
842
|
-
: collapseTitle || i18n('button_collapse');
|
|
843
|
-
return (React__default.createElement(Button, { className: b$3('collapse-button', { compact }), view: "flat", onClick: onCollapseButtonClick, title: buttonTitle },
|
|
844
|
-
React__default.createElement(NotIcon, { data: controlMenuButtonIcon, className: b$3('collapse-icon'), width: "16", height: "10" })));
|
|
845
|
-
};
|
|
846
|
-
|
|
847
|
-
const Panels = () => {
|
|
848
|
-
const { panelItems, onClosePanel, size } = useAsideHeaderInnerContext();
|
|
849
|
-
return panelItems ? (React__default.createElement(Drawer, { className: b$3('panels'), onVeilClick: onClosePanel, onEscape: onClosePanel, style: { left: size } }, panelItems.map((item) => (React__default.createElement(DrawerItem, Object.assign({ key: item.id }, item)))))) : null;
|
|
850
|
-
};
|
|
851
|
-
|
|
852
|
-
const FirstPanel = React__default.forwardRef((_props, ref) => {
|
|
853
|
-
const { size, onItemClick, headerDecoration, multipleTooltip, menuMoreTitle, renderFooter, compact, } = useAsideHeaderInnerContext();
|
|
854
|
-
const visibleMenuItems = useVisibleMenuItems();
|
|
855
|
-
const asideRef = useRef(null);
|
|
856
|
-
React__default.useEffect(() => {
|
|
857
|
-
setRef(ref, asideRef.current);
|
|
858
|
-
}, [ref]);
|
|
859
|
-
return (React__default.createElement(React__default.Fragment, null,
|
|
860
|
-
React__default.createElement("div", { className: b$3('aside'), style: { width: size } },
|
|
861
|
-
React__default.createElement("div", { className: b$3('aside-popup-anchor'), ref: asideRef }),
|
|
862
|
-
React__default.createElement("div", { className: b$3('aside-content', { ['with-decoration']: headerDecoration }) },
|
|
863
|
-
React__default.createElement(Header, null),
|
|
864
|
-
(visibleMenuItems === null || visibleMenuItems === void 0 ? void 0 : visibleMenuItems.length) ? (React__default.createElement(CompositeBar, { type: "menu", items: visibleMenuItems, menuMoreTitle: menuMoreTitle !== null && menuMoreTitle !== void 0 ? menuMoreTitle : i18n('label_more'), onItemClick: onItemClick, multipleTooltip: multipleTooltip })) : (React__default.createElement("div", { className: b$3('menu-items') })),
|
|
865
|
-
React__default.createElement("div", { className: b$3('footer') }, renderFooter === null || renderFooter === void 0 ? void 0 : renderFooter({
|
|
866
|
-
size,
|
|
867
|
-
compact: Boolean(compact),
|
|
868
|
-
asideRef,
|
|
869
|
-
})),
|
|
870
|
-
React__default.createElement(CollapseButton, null))),
|
|
871
|
-
React__default.createElement(Panels, null)));
|
|
872
|
-
});
|
|
873
|
-
|
|
874
|
-
export { AllPagesPanel as A, FirstPanel as F, b$3 as b, getAllPagesMenuItem as g };
|
|
875
|
-
//# sourceMappingURL=FirstPanel-bafddc24.js.map
|