@gravity-ui/navigation 3.3.3 → 3.3.4

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,11 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-Bh8tV34w.js');
3
+ var index = require('./index-py2gz-nN.js');
4
4
  require('react');
5
5
  require('@bem-react/classname');
6
6
  require('@gravity-ui/uikit');
7
7
  require('@gravity-ui/icons');
8
8
  require('@gravity-ui/uikit/i18n');
9
+ require('react/jsx-runtime');
9
10
  require('react-dom');
10
11
  require('@gravity-ui/uikit/legacy');
11
12
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -5,3 +5,4 @@ export declare const Showcase: import("@storybook/csf").AnnotatedStoryFn<import(
5
5
  export declare const ResizableItem: import("@storybook/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("@storybook/csf").Args>;
6
6
  export declare const DisablePortal: import("@storybook/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("@storybook/csf").Args>;
7
7
  export declare const HideVeil: import("@storybook/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("@storybook/csf").Args>;
8
+ export declare const UsePortal: import("@storybook/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("@storybook/csf").Args>;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import './UsePortal.scss';
3
+ export declare function UsePortalShowcase(): React.JSX.Element;
@@ -4,6 +4,7 @@ import { withNaming } from '@bem-react/classname';
4
4
  import { Icon, Button, Flex, Text, Tooltip, List, Portal, Popup, ActionTooltip, useForkRef, setRef, Hotkey, TextInput, Loader, Sheet, eventBroker, Menu, DropdownMenu } from '@gravity-ui/uikit';
5
5
  import { Pin, PinFill, Ellipsis, Gear, Xmark, ListUl, ArrowLeft } from '@gravity-ui/icons';
6
6
  import { addComponentKeysets } from '@gravity-ui/uikit/i18n';
7
+ import { jsx } from 'react/jsx-runtime';
7
8
  import ReactDOM from 'react-dom';
8
9
  import { Tabs } from '@gravity-ui/uikit/legacy';
9
10
 
@@ -120,7 +121,7 @@ function styleInject(css, ref) {
120
121
  var css_248z$u = ".g-root{--gn-aside-top-panel-height:0px}.gn-aside-header{--gn-aside-header-min-width:56px;--_--item-icon-background-size:38px;--_--background-color:var(--g-color-base-background);--_--decoration-collapsed-background-color:var(--g-color-base-warning-light);--_--decoration-expanded-background-color:var(--g-color-base-warning-light);--_--vertical-divider-line-color:var(--g-color-line-generic);--_--horizontal-divider-line-color:var(--g-color-line-generic);background-color:var(--g-color-base-background);height:100%;position:relative;width:100%}.gn-aside-header__aside{background-color:var(--gn-aside-header-expanded-background-color,var(--gn-aside-header-background-color,var(--_--background-color)));box-sizing:border-box;display:flex;flex-direction:column;height:100vh;left:0;margin-top:var(--gn-top-alert-height,0);max-height:calc(100vh - var(--gn-top-alert-height, 0));position:sticky;top:var(--gn-top-alert-height,0);width:inherit;z-index:var(--gn-aside-header-z-index,100)}.gn-aside-header__aside:after{background-color:var(--gn-aside-header-divider-vertical-color,var(--_--vertical-divider-line-color));content:\"\";height:100%;position:absolute;right:0;top:0;width:1px;z-index:2}.gn-aside-header__aside-popup-anchor{inset:0;position:absolute;z-index:1}.gn-aside-header__aside-content{--gradient-height:334px;display:flex;flex-direction:column;height:inherit;overflow-x:hidden;padding-top:var(--gn-aside-header-padding-top);position:relative;user-select:none;width:inherit;z-index:2}.gn-aside-header__aside-content>.gn-aside-header-logo{margin:8px 0}.gn-aside-header__aside-content_with-decoration{background:linear-gradient(180deg,var(--gn-aside-header-decoration-expanded-background-color,var(--_--decoration-expanded-background-color)) calc(var(--gradient-height)*.33),transparent calc(var(--gradient-height)*.88))}.gn-aside-header__aside-custom-background{bottom:0;display:flex;position:absolute;top:0;width:var(--gn-aside-header-size);z-index:-1}.gn-aside-header_compact .gn-aside-header__aside{background-color:var(--gn-aside-header-collapsed-background-color,var(--gn-aside-header-background-color,var(--_--background-color)))}.gn-aside-header_compact .gn-aside-header__aside-content{background:transparent}.gn-aside-header__header{--gn-aside-header-header-divider-height:29px;box-sizing:border-box;flex:none;padding-bottom:22px;padding-top:8px;position:relative;width:100%;z-index:1}.gn-aside-header__header .gn-aside-header__header-divider{bottom:0;color:var(--gn-aside-header-decoration-collapsed-background-color,var(--_--decoration-collapsed-background-color));display:none;left:0;position:absolute;z-index:-2}.gn-aside-header__header_with-decoration:before{background-color:var(--gn-aside-header-decoration-collapsed-background-color,var(--_--decoration-collapsed-background-color));content:\"\";display:none;height:calc(100% - var(--gn-aside-header-header-divider-height));left:0;position:absolute;top:0;width:100%;z-index:-2}.gn-aside-header__header:after{background-color:var(--gn-aside-header-divider-horizontal-color,var(--_--horizontal-divider-line-color));bottom:12px;content:\"\";height:1px;left:0;position:absolute;width:100%;z-index:-2}.gn-aside-header_compact .gn-aside-header__header:before,.gn-aside-header_compact .gn-aside-header__header_with-decoration .gn-aside-header__header-divider{display:block}.gn-aside-header_compact .gn-aside-header__header_with-decoration:after{display:none}.gn-aside-header__logo-button .gn-aside-header__logo-icon-place{height:var(--gn-aside-header-item-icon-background-size,var(--_--item-icon-background-size));width:var(--gn-aside-header-min-width)}.gn-aside-header__menu-items{flex-grow:1}.gn-aside-header__footer{display:flex;flex-direction:column;flex-shrink:0;margin:8px 0;width:100%}.gn-aside-header__panels{inset:var(--gn-top-alert-height,0) 0 0;max-height:calc(100vh - var(--gn-top-alert-height, 0));overflow:auto;position:fixed;z-index:var(--gn-aside-header-panel-z-index,98)}.gn-aside-header__panel{height:100%}.gn-aside-header__pane-container{display:flex;flex-direction:row;outline:none;overflow:visible;user-select:text}.gn-aside-header__top-alert{background:var(--g-color-base-background);position:fixed;top:0;width:100%;z-index:var(--gn-aside-header-pane-top-z-index,98)}.gn-aside-header__content{margin-top:var(--gn-top-alert-height,0);width:calc(100% - var(--gn-aside-header-size));z-index:var(--gn-aside-header-content-z-index,95)}";
121
122
  styleInject(css_248z$u);
122
123
 
123
- const TopAlert$1 = React__default.lazy(() => import('./index-Bs6JJPIU.js').then((module) => ({ default: module.TopAlert })));
124
+ const TopAlert$1 = React__default.lazy(() => import('./index-C1p1hsp4.js').then((module) => ({ default: module.TopAlert })));
124
125
  const Layout = ({ compact, className, children, topAlert }) => {
125
126
  const size = compact ? ASIDE_HEADER_COMPACT_WIDTH : ASIDE_HEADER_EXPANDED_WIDTH;
126
127
  const asideHeaderContextValue = useMemo(() => ({ size, compact }), [compact, size]);
@@ -1954,6 +1955,104 @@ const Header = () => {
1954
1955
  headerDecoration && (React__default.createElement(Icon, { data: SvgDividerCollapsed, className: b$v('header-divider'), width: ASIDE_HEADER_COMPACT_WIDTH, height: HEADER_DIVIDER_HEIGHT }))));
1955
1956
  };
1956
1957
 
1958
+ // Avoid Chrome DevTools blue warning.
1959
+ function getPlatform() {
1960
+ const uaData = navigator.userAgentData;
1961
+ if (uaData != null && uaData.platform) {
1962
+ return uaData.platform;
1963
+ }
1964
+ return navigator.platform;
1965
+ }
1966
+
1967
+ var index = typeof document !== 'undefined' ? useLayoutEffect : useEffect;
1968
+ if (process.env.NODE_ENV !== "production") ;
1969
+
1970
+ let lockCount = 0;
1971
+ function enableScrollLock() {
1972
+ const isIOS = /iP(hone|ad|od)|iOS/.test(getPlatform());
1973
+ const bodyStyle = document.body.style;
1974
+ // RTL <body> scrollbar
1975
+ const scrollbarX = Math.round(document.documentElement.getBoundingClientRect().left) + document.documentElement.scrollLeft;
1976
+ const paddingProp = scrollbarX ? 'paddingLeft' : 'paddingRight';
1977
+ const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;
1978
+ const scrollX = bodyStyle.left ? parseFloat(bodyStyle.left) : window.scrollX;
1979
+ const scrollY = bodyStyle.top ? parseFloat(bodyStyle.top) : window.scrollY;
1980
+ bodyStyle.overflow = 'hidden';
1981
+ if (scrollbarWidth) {
1982
+ bodyStyle[paddingProp] = scrollbarWidth + "px";
1983
+ }
1984
+
1985
+ // Only iOS doesn't respect `overflow: hidden` on document.body, and this
1986
+ // technique has fewer side effects.
1987
+ if (isIOS) {
1988
+ var _window$visualViewpor, _window$visualViewpor2;
1989
+ // iOS 12 does not support `visualViewport`.
1990
+ const offsetLeft = ((_window$visualViewpor = window.visualViewport) == null ? undefined : _window$visualViewpor.offsetLeft) || 0;
1991
+ const offsetTop = ((_window$visualViewpor2 = window.visualViewport) == null ? undefined : _window$visualViewpor2.offsetTop) || 0;
1992
+ Object.assign(bodyStyle, {
1993
+ position: 'fixed',
1994
+ top: -(scrollY - Math.floor(offsetTop)) + "px",
1995
+ left: -(scrollX - Math.floor(offsetLeft)) + "px",
1996
+ right: '0'
1997
+ });
1998
+ }
1999
+ return () => {
2000
+ Object.assign(bodyStyle, {
2001
+ overflow: '',
2002
+ [paddingProp]: ''
2003
+ });
2004
+ if (isIOS) {
2005
+ Object.assign(bodyStyle, {
2006
+ position: '',
2007
+ top: '',
2008
+ left: '',
2009
+ right: ''
2010
+ });
2011
+ window.scrollTo(scrollX, scrollY);
2012
+ }
2013
+ };
2014
+ }
2015
+ let cleanup = () => {};
2016
+
2017
+ /**
2018
+ * Provides base styling for a fixed overlay element to dim content or block
2019
+ * pointer events behind a floating element.
2020
+ * It's a regular `<div>`, so it can be styled via any CSS solution you prefer.
2021
+ * @see https://floating-ui.com/docs/FloatingOverlay
2022
+ */
2023
+ const FloatingOverlay = /*#__PURE__*/React.forwardRef(function FloatingOverlay(props, ref) {
2024
+ const {
2025
+ lockScroll = false,
2026
+ ...rest
2027
+ } = props;
2028
+ index(() => {
2029
+ if (!lockScroll) return;
2030
+ lockCount++;
2031
+ if (lockCount === 1) {
2032
+ cleanup = enableScrollLock();
2033
+ }
2034
+ return () => {
2035
+ lockCount--;
2036
+ if (lockCount === 0) {
2037
+ cleanup();
2038
+ }
2039
+ };
2040
+ }, [lockScroll]);
2041
+ return /*#__PURE__*/jsx("div", {
2042
+ ref: ref,
2043
+ ...rest,
2044
+ style: {
2045
+ position: 'fixed',
2046
+ overflow: 'auto',
2047
+ top: 0,
2048
+ right: 0,
2049
+ bottom: 0,
2050
+ left: 0,
2051
+ ...rest.style
2052
+ }
2053
+ });
2054
+ });
2055
+
1957
2056
  function _extends() {
1958
2057
  return _extends = Object.assign ? Object.assign.bind() : function (n) {
1959
2058
  for (var e = 1; e < arguments.length; e++) {
@@ -4439,7 +4538,7 @@ const Drawer = ({ className, veilClassName, children, style, onVeilClick, onEsca
4439
4538
  if (disablePortal) {
4440
4539
  return drawer;
4441
4540
  }
4442
- return React__default.createElement(Portal, null, drawer);
4541
+ return (React__default.createElement(Portal, null, someItemVisible ? React__default.createElement(FloatingOverlay, { lockScroll: true }, drawer) : drawer));
4443
4542
  };
4444
4543
 
4445
4544
  const Panels = () => {
@@ -5527,7 +5626,7 @@ const OverlapPanel = ({ title, renderContent, className, onClose, action, closeT
5527
5626
  var css_248z$4 = ".gn-mobile-header{--mobile-header-min-heigth:50px;--mobile-header-icon-size:20px;background-color:var(--g-color-base-background)}.gn-mobile-header__header-container{background-color:var(--g-color-base-background);position:sticky;top:0;z-index:var(--gn-mobile-header-z-index,100)}.gn-mobile-header__header{align-items:center;border-bottom:1px solid var(--g-color-line-generic);box-sizing:border-box;display:flex;justify-content:space-between;padding:0 10px}.gn-mobile-header__burger{padding:12px}.gn-mobile-header__panel-item{--gn-drawer-item-position:var(--gn-mobile-header-panel-position,absolute)}.gn-mobile-header__burger-menu,.gn-mobile-header__panel-item{background-color:var(--g-color-base-background);max-height:100%;max-width:90vw;width:320px}.gn-mobile-header__user-menu{overflow-y:auto}.gn-mobile-header__overlap-panel,.gn-mobile-header__panels{z-index:var(--gn-mobile-header-panel-z-index,98)}.gn-mobile-header__panels{inset:var(--mobile-header-min-heigth) 0 0;overflow:hidden;position:fixed}.gn-mobile-header__panel-item{top:unset}.gn-mobile-header__content{overflow:auto}";
5528
5627
  styleInject(css_248z$4);
5529
5628
 
5530
- const TopAlert = React__default.lazy(() => import('./index-Bs6JJPIU.js').then((module) => ({ default: module.TopAlert })));
5629
+ const TopAlert = React__default.lazy(() => import('./index-C1p1hsp4.js').then((module) => ({ default: module.TopAlert })));
5531
5630
  const b$4 = block('mobile-header');
5532
5631
  const MobileHeader = React__default.forwardRef(({ logo, burgerMenu, burgerCloseTitle = i18n('burger_button_close'), burgerOpenTitle = i18n('burger_button_open'), panelItems = [], renderContent, sideItemRenderContent, onClosePanel, onEvent, className, contentClassName, overlapPanel, topAlert, }, ref) => {
5533
5632
  const targetRef = useForwardRef(ref);
@@ -5818,4 +5917,4 @@ const MobileFooter = ({ className, menuItems: providedMenuItems, withDivider, mo
5818
5917
  };
5819
5918
 
5820
5919
  export { AsideHeader as A, DrawerItem as D, FooterItem$1 as F, HotkeysPanel as H, Logo as L, MOBILE_HEADER_EVENT_NAMES as M, PageLayout as P, Settings as S, Title as T, AsideHeaderContextProvider as a, block as b, PageLayoutAside as c, debounceFn as d, AsideFallback as e, Drawer as f, PublicActionBar as g, useSettingsSelectionContext as h, useSettingsContext as i, FooterItem as j, getMobileHeaderCustomEvent as k, MobileHeader as l, MobileLogo as m, Footer as n, MobileFooter as o, styleInject as s, useAsideHeaderContext as u };
5821
- //# sourceMappingURL=index-Du2Q9-2w.js.map
5920
+ //# sourceMappingURL=index-BsIP-jc4.js.map