@gravity-ui/navigation 1.5.0 → 1.6.0

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