@gravity-ui/navigation 0.22.2 → 0.23.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.
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { AsideHeaderProps } from './types';
3
3
  import './AsideHeader.scss';
4
- export declare const AsideHeader: (props: AsideHeaderProps) => React.JSX.Element;
4
+ export declare const AsideHeader: React.ForwardRefExoticComponent<AsideHeaderProps & React.RefAttributes<HTMLDivElement>>;
@@ -1,2 +1,2 @@
1
1
  import React from 'react';
2
- export declare const FirstPanel: () => React.JSX.Element;
2
+ export declare const FirstPanel: React.ForwardRefExoticComponent<React.RefAttributes<HTMLDivElement>>;
@@ -14,7 +14,7 @@ export interface AsideHeaderGeneralProps {
14
14
  renderFooter?: (data: {
15
15
  size: number;
16
16
  compact: boolean;
17
- asideRef: React.RefObject<HTMLDivElement>;
17
+ asideRef: React.ForwardedRef<HTMLDivElement>;
18
18
  }) => React.ReactNode;
19
19
  onClosePanel?: () => void;
20
20
  onChangeCompact?: (compact: boolean) => void;
@@ -5000,24 +5000,25 @@ const Panels = () => {
5000
5000
  return panelItems ? (React__default.createElement(Drawer, { className: b$m('panels'), onVeilClick: onClosePanel, onEscape: onClosePanel, style: { left: size } }, panelItems.map((item) => (React__default.createElement(DrawerItem, Object.assign({ key: item.id }, item)))))) : null;
5001
5001
  };
5002
5002
 
5003
- const FirstPanel = () => {
5003
+ const FirstPanel = React__default.forwardRef((_props, ref) => {
5004
5004
  const { size, onItemClick, headerDecoration, multipleTooltip, menuMoreTitle, renderFooter, compact, } = useAsideHeaderInnerContext();
5005
5005
  const visibleMenuItems = useVisibleMenuItems();
5006
5006
  const asideRef = useRef(null);
5007
+ const popupAnchorRef = useMemo(() => ref || asideRef, [ref, asideRef]);
5007
5008
  return (React__default.createElement(React__default.Fragment, null,
5008
5009
  React__default.createElement("div", { className: b$m('aside'), style: { width: size } },
5009
- React__default.createElement("div", { className: b$m('aside-popup-anchor'), ref: asideRef }),
5010
+ React__default.createElement("div", { className: b$m('aside-popup-anchor'), ref: popupAnchorRef }),
5010
5011
  React__default.createElement("div", { className: b$m('aside-content', { ['with-decoration']: headerDecoration }) },
5011
5012
  React__default.createElement(Header, null),
5012
5013
  (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$3('label_more'), onItemClick: onItemClick, multipleTooltip: multipleTooltip })) : (React__default.createElement("div", { className: b$m('menu-items') })),
5013
5014
  React__default.createElement("div", { className: b$m('footer') }, renderFooter === null || renderFooter === void 0 ? void 0 : renderFooter({
5014
5015
  size,
5015
5016
  compact: Boolean(compact),
5016
- asideRef,
5017
+ asideRef: popupAnchorRef,
5017
5018
  })),
5018
5019
  React__default.createElement(CollapseButton, null))),
5019
5020
  React__default.createElement(Panels, null)));
5020
- };
5021
+ });
5021
5022
 
5022
5023
  var css_248z$h = ".g-root {\n --gn-aside-header-background-color: var(--g-color-base-warning-light);\n --gn-aside-header-collapse-button-divider-line-color: var(\n --gn-aside-header-subheader-divider-line-color\n );\n --gn-aside-header-footer-item-icon-color: var(--g-color-text-primary);\n --gn-aside-header-subheader-item-icon-color: var(--g-color-text-primary);\n --gn-aside-header-item-icon-background-size: 38px;\n}\n\n.g-root_theme_light,\n.g-root_theme_light-hc {\n --gn-aside-header-divider-line-color: transparent;\n --gn-aside-header-subheader-divider-line-color: var(--g-color-line-generic);\n}\n\n.g-root_theme_dark,\n.g-root_theme_dark-hc {\n --gn-aside-header-divider-line-color: var(--g-color-line-generic-solid);\n --gn-aside-header-subheader-divider-line-color: var(--g-color-line-generic-solid);\n}\n\n.gn-aside-header {\n --gn-aside-header-min-width: 56px;\n height: 100%;\n width: 100%;\n position: relative;\n background-color: var(--g-color-base-background);\n}\n.gn-aside-header__aside {\n position: sticky;\n top: 0;\n left: 0;\n height: 100vh;\n width: inherit;\n display: flex;\n flex-direction: column;\n background-color: var(--g-color-base-background);\n z-index: 100;\n box-sizing: border-box;\n}\n.gn-aside-header__aside::after {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n width: 1px;\n height: 100%;\n content: \"\";\n background-color: var(--gn-aside-header-divider-line-color);\n}\n.gn-aside-header__aside-popup-anchor {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n}\n.gn-aside-header__aside-content {\n --gradient-height: 334px;\n display: flex;\n flex-direction: column;\n overflow-x: hidden;\n width: inherit;\n height: inherit;\n position: relative;\n z-index: 2;\n user-select: none;\n}\n.gn-aside-header__aside-content::after {\n position: absolute;\n top: 0;\n right: -100px;\n bottom: 0;\n width: 100px;\n content: \"\";\n box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.1), 0px 0px 24px rgba(0, 0, 0, 0.08);\n}\n.gn-aside-header__aside-content > .gn-aside-header-logo {\n margin: 8px 0;\n}\n.gn-aside-header__aside-content_with-decoration {\n background: linear-gradient(180deg, var(--gn-aside-header-background-color) calc(var(--gradient-height) * 0.33), transparent calc(var(--gradient-height) * 0.88));\n}\n.gn-aside-header_compact .gn-aside-header__aside-content {\n background: transparent;\n}\n.gn-aside-header__header {\n --gn-aside-header-header-divider-height: 29px;\n position: relative;\n z-index: 1;\n flex: none;\n box-sizing: border-box;\n width: 100%;\n padding-top: 8px;\n padding-bottom: 22px;\n}\n.gn-aside-header__header .gn-aside-header__header-divider {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: -2;\n display: none;\n color: var(--gn-aside-header-background-color);\n}\n.gn-aside-header__header_with-decoration::before {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -2;\n display: none;\n width: 100%;\n height: calc(100% - var(--gn-aside-header-header-divider-height));\n content: \"\";\n background-color: var(--gn-aside-header-background-color);\n}\n.gn-aside-header__header::after {\n position: absolute;\n bottom: 12px;\n left: 0;\n z-index: -2;\n width: 100%;\n height: 1px;\n content: \"\";\n background-color: var(--gn-aside-header-subheader-divider-line-color);\n}\n.gn-aside-header_compact .gn-aside-header__header::before {\n display: block;\n}\n.gn-aside-header_compact .gn-aside-header__header_with-decoration .gn-aside-header__header-divider {\n display: block;\n}\n.gn-aside-header_compact .gn-aside-header__header_with-decoration::after {\n display: none;\n}\n.gn-aside-header__menu-items {\n flex-grow: 1;\n}\n.gn-aside-header__footer {\n flex-shrink: 0;\n width: 100%;\n margin: 8px 0;\n display: flex;\n flex-direction: column;\n}\n.gn-aside-header__panels {\n z-index: 98;\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n overflow: auto;\n}\n.gn-aside-header__panel {\n height: 100%;\n}\n.gn-aside-header__pane-container {\n display: flex;\n outline: none;\n overflow: visible;\n user-select: text;\n flex-direction: row;\n}\n.gn-aside-header__content {\n width: calc(100% - var(--gn-aside-header-size));\n z-index: 95;\n}\n.gn-aside-header__collapse-button {\n --yc-button-background-color-hover: transparent;\n overflow: hidden;\n box-sizing: border-box;\n flex: none;\n width: 100%;\n height: 20px;\n border-top: 1px solid var(--gn-aside-header-collapse-button-divider-line-color);\n margin-top: auto;\n}\n.gn-aside-header__collapse-button > .yc-button__text {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 20px;\n}\n.gn-aside-header__collapse-button:not(.gn-aside-header__collapse-button_compact) .gn-aside-header__collapse-icon {\n transform: rotate(180deg);\n}\n.gn-aside-header__collapse-button .gn-aside-header__collapse-icon {\n color: var(--g-color-text-secondary);\n}\n.gn-aside-header__collapse-button:hover .gn-aside-header__collapse-icon {\n color: var(--g-color-text-primary);\n}";
5023
5024
  styleInject(css_248z$h);
@@ -5078,7 +5079,7 @@ const useAsideHeaderInnerContextValue = (props) => {
5078
5079
  onItemClick });
5079
5080
  };
5080
5081
 
5081
- const AsideHeader = (props) => {
5082
+ const AsideHeader = React__default.forwardRef((props, ref) => {
5082
5083
  const { className, compact } = props;
5083
5084
  const size = compact ? ASIDE_HEADER_COMPACT_WIDTH : ASIDE_HEADER_EXPANDED_WIDTH;
5084
5085
  const asideHeaderContextValue = useMemo(() => ({ size, compact }), [compact, size]);
@@ -5087,9 +5088,9 @@ const AsideHeader = (props) => {
5087
5088
  React__default.createElement(AsideHeaderInnerContextProvider, { value: asideHeaderInnerContextValue },
5088
5089
  React__default.createElement("div", { className: b$m({ compact }, className) },
5089
5090
  React__default.createElement("div", { className: b$m('pane-container') },
5090
- React__default.createElement(FirstPanel, null),
5091
+ React__default.createElement(FirstPanel, { ref: ref }),
5091
5092
  React__default.createElement(Content, { size: size, renderContent: props.renderContent, className: b$m('content') }))))));
5092
- };
5093
+ });
5093
5094
 
5094
5095
  /******************************************************************************
5095
5096
  Copyright (c) Microsoft Corporation.