@gravity-ui/navigation 2.16.0 → 2.17.1
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 +4 -73
- package/build/cjs/AsideHeader.js +1 -1
- package/build/cjs/Drawer.js +121 -7
- package/build/cjs/Drawer.js.map +1 -1
- package/build/cjs/{FooterItem-e11d85c6.js → FooterItem-c34f61a3.js} +1 -1
- package/build/cjs/{FooterItem-e11d85c6.js.map → FooterItem-c34f61a3.js.map} +1 -1
- package/build/cjs/{HotkeysPanel-c6e4a0d9.js → HotkeysPanel-51ad5966.js} +1 -1
- package/build/cjs/{HotkeysPanel-c6e4a0d9.js.map → HotkeysPanel-51ad5966.js.map} +1 -1
- package/build/cjs/{PageLayoutAside-3fd5e2be.js → PageLayoutAside-762b9477.js} +1 -1
- package/build/cjs/{PageLayoutAside-3fd5e2be.js.map → PageLayoutAside-762b9477.js.map} +1 -1
- package/build/cjs/PageLayoutAside.js +1 -1
- package/build/cjs/components/Drawer/Drawer.d.ts +22 -2
- package/build/cjs/components/Drawer/index.d.ts +2 -0
- package/build/cjs/components/Drawer/utils.d.ts +29 -0
- package/build/cjs/components/index.d.ts +1 -1
- package/build/cjs/index.js +7 -7
- package/build/cjs/index4.js +1 -1
- package/build/cjs/index6.js +1 -1
- package/build/esm/AsideHeader.js +1 -1
- package/build/esm/Drawer.js +104 -8
- package/build/esm/Drawer.js.map +1 -1
- package/build/esm/{FooterItem-095251e4.js → FooterItem-73c476e4.js} +1 -1
- package/build/esm/{FooterItem-095251e4.js.map → FooterItem-73c476e4.js.map} +1 -1
- package/build/esm/{HotkeysPanel-a46d3bf8.js → HotkeysPanel-7c9af347.js} +1 -1
- package/build/esm/{HotkeysPanel-a46d3bf8.js.map → HotkeysPanel-7c9af347.js.map} +1 -1
- package/build/esm/{PageLayoutAside-1a3b5dcf.js → PageLayoutAside-a21b8dea.js} +1 -1
- package/build/esm/{PageLayoutAside-1a3b5dcf.js.map → PageLayoutAside-a21b8dea.js.map} +1 -1
- package/build/esm/PageLayoutAside.js +1 -1
- package/build/esm/components/Drawer/Drawer.d.ts +22 -2
- package/build/esm/components/Drawer/index.d.ts +2 -0
- package/build/esm/components/Drawer/utils.d.ts +29 -0
- package/build/esm/components/index.d.ts +1 -1
- package/build/esm/index.js +6 -6
- package/build/esm/index4.js +1 -1
- package/build/esm/index6.js +1 -1
- package/package.json +1 -1
package/build/cjs/index.js
CHANGED
|
@@ -4,12 +4,12 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var AsideHeader = require('./AsideHeader.js');
|
|
6
6
|
var AsideHeaderContext = require('./AsideHeaderContext.js');
|
|
7
|
-
var Drawer = require('./Drawer.js');
|
|
8
7
|
var FooterItem = require('./FooterItem.js');
|
|
9
8
|
var PageLayout = require('./PageLayout.js');
|
|
10
|
-
var PageLayoutAside = require('./PageLayoutAside-
|
|
9
|
+
var PageLayoutAside = require('./PageLayoutAside-762b9477.js');
|
|
11
10
|
var AsideFallback = require('./AsideFallback.js');
|
|
12
|
-
var
|
|
11
|
+
var Drawer = require('./Drawer.js');
|
|
12
|
+
var FooterItem$1 = require('./FooterItem-c34f61a3.js');
|
|
13
13
|
var React = require('react');
|
|
14
14
|
var uikit = require('@gravity-ui/uikit');
|
|
15
15
|
var debounce = require('./debounce-8772fd80.js');
|
|
@@ -19,15 +19,15 @@ var styleInject_es = require('./style-inject.es-dcee06b6.js');
|
|
|
19
19
|
var icons = require('@gravity-ui/icons');
|
|
20
20
|
var ActionBar = require('./ActionBar-3c6cdf57.js');
|
|
21
21
|
var Title = require('./Title-54580605.js');
|
|
22
|
-
var HotkeysPanel = require('./HotkeysPanel-
|
|
22
|
+
var HotkeysPanel = require('./HotkeysPanel-51ad5966.js');
|
|
23
23
|
var Settings = require('./Settings-5d2bec1d.js');
|
|
24
|
-
require('react-dom');
|
|
25
24
|
require('./Item-0f90a566.js');
|
|
26
25
|
require('./constants-d81c3867.js');
|
|
27
26
|
require('./Content-64d5738a.js');
|
|
28
27
|
require('./utils-db3e03c2.js');
|
|
29
28
|
require('@gravity-ui/uikit/i18n');
|
|
30
29
|
require('./divider-collapsed-153868e7.js');
|
|
30
|
+
require('react-dom');
|
|
31
31
|
require('@bem-react/classname');
|
|
32
32
|
|
|
33
33
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -176,13 +176,13 @@ const MobileFooter = ({ className, menuItems: providedMenuItems, withDivider, mo
|
|
|
176
176
|
exports.AsideHeader = AsideHeader.AsideHeader;
|
|
177
177
|
exports.AsideHeaderContextProvider = AsideHeaderContext.AsideHeaderContextProvider;
|
|
178
178
|
exports.useAsideHeaderContext = AsideHeaderContext.useAsideHeaderContext;
|
|
179
|
-
exports.Drawer = Drawer.Drawer;
|
|
180
|
-
exports.DrawerItem = Drawer.DrawerItem;
|
|
181
179
|
exports.FooterItem = FooterItem.FooterItem;
|
|
182
180
|
exports.PageLayout = PageLayout.PageLayout;
|
|
183
181
|
exports.Logo = PageLayoutAside.Logo;
|
|
184
182
|
exports.PageLayoutAside = PageLayoutAside.PageLayoutAside;
|
|
185
183
|
exports.AsideFallback = AsideFallback.AsideFallback;
|
|
184
|
+
exports.Drawer = Drawer.Drawer;
|
|
185
|
+
exports.DrawerItem = Drawer.DrawerItem;
|
|
186
186
|
exports.MOBILE_HEADER_EVENT_NAMES = FooterItem$1.MOBILE_HEADER_EVENT_NAMES;
|
|
187
187
|
exports.MobileHeader = FooterItem$1.MobileHeader;
|
|
188
188
|
exports.MobileHeaderFooterItem = FooterItem$1.FooterItem;
|
package/build/cjs/index4.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var HotkeysPanel = require('./HotkeysPanel-
|
|
5
|
+
var HotkeysPanel = require('./HotkeysPanel-51ad5966.js');
|
|
6
6
|
require('./tslib.es6-705c6589.js');
|
|
7
7
|
require('react');
|
|
8
8
|
require('@gravity-ui/uikit');
|
package/build/cjs/index6.js
CHANGED
package/build/esm/AsideHeader.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { _ as __rest } from './tslib.es6-3cd4e99f.js';
|
|
2
2
|
import React__default from 'react';
|
|
3
3
|
import { PageLayout } from './PageLayout.js';
|
|
4
|
-
import { P as PageLayoutAside } from './PageLayoutAside-
|
|
4
|
+
import { P as PageLayoutAside } from './PageLayoutAside-a21b8dea.js';
|
|
5
5
|
import './Content-f94ba85d.js';
|
|
6
6
|
import './constants-b1604ff5.js';
|
|
7
7
|
import './AsideHeaderContext.js';
|
package/build/esm/Drawer.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
1
2
|
import React__default, { Children, isValidElement, cloneElement } from 'react';
|
|
2
|
-
import { useBodyScrollLock } from '@gravity-ui/uikit';
|
|
3
|
+
import { useForkRef, useBodyScrollLock, Portal } from '@gravity-ui/uikit';
|
|
3
4
|
import ReactDOM from 'react-dom';
|
|
4
5
|
import { b as block } from './cn-ffe5e9f5.js';
|
|
5
6
|
import { s as styleInject } from './style-inject.es-1f59c1d0.js';
|
|
@@ -3024,18 +3025,109 @@ SwitchTransition.defaultProps = {
|
|
|
3024
3025
|
mode: modes.out
|
|
3025
3026
|
};
|
|
3026
3027
|
|
|
3027
|
-
|
|
3028
|
+
const DRAWER_ITEM_MIN_RESIZE_WIDTH = 200;
|
|
3029
|
+
const DRAWER_ITEM_MAX_RESIZE_WIDTH = 800;
|
|
3030
|
+
const DRAWER_ITEM_INITIAL_RESIZE_WIDTH = 400;
|
|
3031
|
+
function getEventClientX(e) {
|
|
3032
|
+
var _a, _b;
|
|
3033
|
+
return 'touches' in e ? (_b = (_a = e.touches[0]) === null || _a === void 0 ? void 0 : _a.clientX) !== null && _b !== void 0 ? _b : 0 : e.clientX;
|
|
3034
|
+
}
|
|
3035
|
+
function useResizeHandlers({ onStart, onMove, onEnd }) {
|
|
3036
|
+
const initialXPosition = React.useRef(0);
|
|
3037
|
+
const currentXPosition = React.useRef(0);
|
|
3038
|
+
const handleMove = React.useCallback((e) => {
|
|
3039
|
+
const currentX = getEventClientX(e);
|
|
3040
|
+
if (currentXPosition.current === currentX) {
|
|
3041
|
+
return;
|
|
3042
|
+
}
|
|
3043
|
+
currentXPosition.current = currentX;
|
|
3044
|
+
const delta = initialXPosition.current - currentX;
|
|
3045
|
+
onMove(delta);
|
|
3046
|
+
}, [onMove]);
|
|
3047
|
+
const handleEnd = React.useCallback((e) => {
|
|
3048
|
+
window.removeEventListener('mousemove', handleMove);
|
|
3049
|
+
window.removeEventListener('touchmove', handleMove);
|
|
3050
|
+
document.body.style.removeProperty('user-select');
|
|
3051
|
+
document.body.style.removeProperty('-webkit-user-select');
|
|
3052
|
+
document.body.style.removeProperty('cursor');
|
|
3053
|
+
const currentX = getEventClientX(e);
|
|
3054
|
+
const delta = initialXPosition.current - currentX;
|
|
3055
|
+
onEnd(delta);
|
|
3056
|
+
}, [handleMove, onEnd]);
|
|
3057
|
+
const handleStart = React.useCallback((e) => {
|
|
3058
|
+
const currentX = getEventClientX(e);
|
|
3059
|
+
initialXPosition.current = currentX;
|
|
3060
|
+
currentXPosition.current = currentX;
|
|
3061
|
+
window.addEventListener('mouseup', handleEnd, { once: true });
|
|
3062
|
+
window.addEventListener('touchend', handleEnd, { once: true });
|
|
3063
|
+
window.addEventListener('touchcancel', handleEnd, { once: true });
|
|
3064
|
+
window.addEventListener('mousemove', handleMove);
|
|
3065
|
+
window.addEventListener('touchmove', handleMove);
|
|
3066
|
+
document.body.style.setProperty('user-select', 'none');
|
|
3067
|
+
document.body.style.setProperty('-webkit-user-select', 'none');
|
|
3068
|
+
document.body.style.setProperty('cursor', 'col-resize');
|
|
3069
|
+
onStart();
|
|
3070
|
+
}, [handleEnd, handleMove, onStart]);
|
|
3071
|
+
return {
|
|
3072
|
+
onMouseDown: handleStart,
|
|
3073
|
+
onTouchStart: handleStart,
|
|
3074
|
+
};
|
|
3075
|
+
}
|
|
3076
|
+
function useResizableDrawerItem(params) {
|
|
3077
|
+
const { direction, width, minResizeWidth = DRAWER_ITEM_MIN_RESIZE_WIDTH, maxResizeWidth = DRAWER_ITEM_MAX_RESIZE_WIDTH, onResize, } = params;
|
|
3078
|
+
const [isResizing, setIsResizing] = React.useState(false);
|
|
3079
|
+
const [resizeDelta, setResizeDelta] = React.useState(0);
|
|
3080
|
+
const [internalWidth, setInternalWidth] = React.useState(width !== null && width !== void 0 ? width : DRAWER_ITEM_INITIAL_RESIZE_WIDTH);
|
|
3081
|
+
const getClampedWidth = React.useCallback((width) => Math.min(Math.max(width, minResizeWidth), maxResizeWidth), [minResizeWidth, maxResizeWidth]);
|
|
3082
|
+
const getResizedWidth = React.useCallback((delta) => {
|
|
3083
|
+
const signedDelta = direction === 'right' ? delta : -delta;
|
|
3084
|
+
const newWidth = (width !== null && width !== void 0 ? width : internalWidth) + signedDelta;
|
|
3085
|
+
return getClampedWidth(newWidth);
|
|
3086
|
+
}, [width, internalWidth, direction, getClampedWidth]);
|
|
3087
|
+
const onStart = React.useCallback(() => {
|
|
3088
|
+
setIsResizing(true);
|
|
3089
|
+
setResizeDelta(0);
|
|
3090
|
+
}, [setIsResizing, setResizeDelta]);
|
|
3091
|
+
const onMove = React.useCallback((delta) => {
|
|
3092
|
+
setResizeDelta(delta);
|
|
3093
|
+
}, []);
|
|
3094
|
+
const onEnd = React.useCallback((delta) => {
|
|
3095
|
+
const newWidth = getResizedWidth(delta);
|
|
3096
|
+
setIsResizing(false);
|
|
3097
|
+
setInternalWidth(newWidth);
|
|
3098
|
+
onResize === null || onResize === void 0 ? void 0 : onResize(newWidth);
|
|
3099
|
+
}, [setIsResizing, setInternalWidth, getResizedWidth, onResize]);
|
|
3100
|
+
const displayWidth = isResizing
|
|
3101
|
+
? getResizedWidth(resizeDelta)
|
|
3102
|
+
: getClampedWidth(width !== null && width !== void 0 ? width : internalWidth);
|
|
3103
|
+
const handlers = useResizeHandlers({ onStart, onMove, onEnd });
|
|
3104
|
+
return { resizedWidth: displayWidth, resizerHandlers: handlers };
|
|
3105
|
+
}
|
|
3106
|
+
|
|
3107
|
+
var css_248z = ".gn-drawer{--_--resizer-width:8px;--_--resizer-color:var(--g-color-base-generic);--_--resizer-handle-color:var(--g-color-line-generic);--_--resizer-handle-color-hover:var(--g-color-line-generic-hover);--_--resizer-z-index:100;pointer-events:none}.gn-drawer__item{background-color:var(--g-color-base-background);bottom:0;height:100%;left:0;pointer-events:auto;position:absolute;top:0;will-change:transform}.gn-drawer__item_direction_right{left:auto;right:0}.gn-drawer__item-transition-enter{transform:translate(-100%)}.gn-drawer__item-transition_direction_right-enter{transform:translate(100%)}.gn-drawer__item-transition-enter-active,.gn-drawer__item-transition_direction_right-enter-active{transform:translate(0);transition:transform .3s}.gn-drawer__item-transition-enter-done,.gn-drawer__item-transition_direction_right-enter-done{filter:blur(0);transform:translateZ(0)}.gn-drawer__item-transition-exit,.gn-drawer__item-transition_direction_right-exit{transform:translate(0)}.gn-drawer__item-transition-exit-active,.gn-drawer__item-transition_direction_right-exit-active{transition:transform .3s}.gn-drawer__item-transition-exit-active{transform:translate(-100%)}.gn-drawer__item-transition_direction_right-exit-active{transform:translate(100%)}.gn-drawer__item-transition-exit-done,.gn-drawer__item-transition_direction_right-exit-done{visibility:hidden}.gn-drawer__veil{background-color:var(--g-color-sfx-veil);inset:0;pointer-events:auto;position:absolute}.gn-drawer__veil_hidden{display:none}.gn-drawer__veil-transition-enter{opacity:0}.gn-drawer__veil-transition-enter-active{opacity:1;transition:opacity .3s}.gn-drawer__veil-transition-exit{opacity:1}.gn-drawer__veil-transition-exit-active{opacity:0;transition:opacity .3s}.gn-drawer__veil-transition-exit-done{visibility:hidden}.gn-drawer__resizer-handle{background:var(--gn-drawer-item-resizer-handle-color,var(--_--resizer-handle-color));border-radius:2px;height:28px;width:2px}.gn-drawer__resizer{align-items:center;background:var(--gn-drawer-item-resizer-color,var(--_--resizer-color));cursor:col-resize;display:flex;flex-direction:column;height:100%;justify-content:center;position:absolute;top:0;width:var(--gn-drawer-item-resizer-width,var(--_--resizer-width));z-index:var(--gn-drawer-item-resizer-z-index,var(--_--resizer-z-index))}.gn-drawer__resizer_direction_right{left:0}.gn-drawer__resizer_direction_left{right:0}.gn-drawer__resizer:hover .gn-drawer__resizer-handle{background:var(--gn-drawer-item-resizer-handle-color-hover,var(--_--resizer-handle-color-hover))}";
|
|
3028
3108
|
styleInject(css_248z);
|
|
3029
3109
|
|
|
3030
3110
|
const b = block('drawer');
|
|
3031
3111
|
const TIMEOUT = 300;
|
|
3032
|
-
const DrawerItem = (
|
|
3112
|
+
const DrawerItem = React__default.forwardRef(function DrawerItem(props, ref) {
|
|
3113
|
+
const { visible, content, children, direction = 'left', className, resizable, width, minResizeWidth, maxResizeWidth, onResize, } = props;
|
|
3033
3114
|
const itemRef = React__default.useRef(null);
|
|
3115
|
+
const handleRef = useForkRef(ref, itemRef);
|
|
3034
3116
|
const cssDirection = direction === 'left' ? undefined : direction;
|
|
3117
|
+
const { resizedWidth, resizerHandlers } = useResizableDrawerItem({
|
|
3118
|
+
direction,
|
|
3119
|
+
width,
|
|
3120
|
+
minResizeWidth,
|
|
3121
|
+
maxResizeWidth,
|
|
3122
|
+
onResize,
|
|
3123
|
+
});
|
|
3124
|
+
const resizerElement = resizable ? (React__default.createElement("div", Object.assign({ className: b('resizer', { direction }) }, resizerHandlers),
|
|
3125
|
+
React__default.createElement("div", { className: b('resizer-handle') }))) : null;
|
|
3035
3126
|
return (React__default.createElement(CSSTransition, { in: visible, timeout: TIMEOUT, unmountOnExit: true, classNames: b('item-transition', { direction: cssDirection }), nodeRef: itemRef },
|
|
3036
|
-
React__default.createElement("div", { ref:
|
|
3037
|
-
|
|
3038
|
-
|
|
3127
|
+
React__default.createElement("div", { ref: handleRef, className: b('item', { direction: cssDirection }, className), style: { width: resizable ? `${resizedWidth}px` : undefined } },
|
|
3128
|
+
resizerElement, children !== null && children !== void 0 ? children : content)));
|
|
3129
|
+
});
|
|
3130
|
+
const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScrollBody = true, hideVeil, disablePortal = true, }) => {
|
|
3039
3131
|
let someItemVisible = false;
|
|
3040
3132
|
React__default.Children.forEach(children, (child) => {
|
|
3041
3133
|
if (React__default.isValidElement(child) && child.type === DrawerItem) {
|
|
@@ -3061,11 +3153,11 @@ const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScro
|
|
|
3061
3153
|
useBodyScrollLock({ enabled: preventScrollBody && someItemVisible });
|
|
3062
3154
|
const containerRef = React__default.useRef(null);
|
|
3063
3155
|
const veilRef = React__default.useRef(null);
|
|
3064
|
-
|
|
3156
|
+
const drawer = (React__default.createElement(Transition, { in: someItemVisible, timeout: { enter: 0, exit: TIMEOUT }, mountOnEnter: true, unmountOnExit: true, nodeRef: containerRef }, (state) => {
|
|
3065
3157
|
const childrenVisible = someItemVisible && state === 'entered';
|
|
3066
3158
|
return (React__default.createElement("div", { ref: containerRef, className: b(null, className), style: style },
|
|
3067
3159
|
React__default.createElement(CSSTransition, { in: childrenVisible, timeout: TIMEOUT, unmountOnExit: true, classNames: b('veil-transition'), nodeRef: veilRef },
|
|
3068
|
-
React__default.createElement("div", { ref: veilRef, className: b('veil'), onClick: onVeilClick })),
|
|
3160
|
+
React__default.createElement("div", { ref: veilRef, className: b('veil', { hidden: hideVeil }), onClick: onVeilClick })),
|
|
3069
3161
|
React__default.Children.map(children, (child) => {
|
|
3070
3162
|
if (React__default.isValidElement(child) &&
|
|
3071
3163
|
child.type === DrawerItem) {
|
|
@@ -3075,6 +3167,10 @@ const Drawer = ({ className, children, style, onVeilClick, onEscape, preventScro
|
|
|
3075
3167
|
return child;
|
|
3076
3168
|
})));
|
|
3077
3169
|
}));
|
|
3170
|
+
if (disablePortal) {
|
|
3171
|
+
return drawer;
|
|
3172
|
+
}
|
|
3173
|
+
return React__default.createElement(Portal, null, drawer);
|
|
3078
3174
|
};
|
|
3079
3175
|
|
|
3080
3176
|
export { Drawer, DrawerItem };
|