@gravity-ui/navigation 2.33.0 → 2.34.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.
Files changed (31) hide show
  1. package/build/cjs/AsideHeader.js +1 -1
  2. package/build/cjs/Drawer.js +52 -31
  3. package/build/cjs/Drawer.js.map +1 -1
  4. package/build/cjs/{FooterItem-d34d84ed.js → FooterItem-22234c15.js} +1 -1
  5. package/build/cjs/{FooterItem-d34d84ed.js.map → FooterItem-22234c15.js.map} +1 -1
  6. package/build/cjs/{HotkeysPanel-1c05ffa8.js → HotkeysPanel-00735b71.js} +1 -1
  7. package/build/cjs/{HotkeysPanel-1c05ffa8.js.map → HotkeysPanel-00735b71.js.map} +1 -1
  8. package/build/cjs/{PageLayoutAside-56a441a9.js → PageLayoutAside-9fabdd21.js} +1 -1
  9. package/build/cjs/{PageLayoutAside-56a441a9.js.map → PageLayoutAside-9fabdd21.js.map} +1 -1
  10. package/build/cjs/PageLayoutAside.js +1 -1
  11. package/build/cjs/components/Drawer/Drawer.d.ts +6 -0
  12. package/build/cjs/components/Drawer/utils.d.ts +4 -2
  13. package/build/cjs/index.js +3 -3
  14. package/build/cjs/index4.js +1 -1
  15. package/build/cjs/index6.js +1 -1
  16. package/build/esm/AsideHeader.js +1 -1
  17. package/build/esm/Drawer.js +52 -31
  18. package/build/esm/Drawer.js.map +1 -1
  19. package/build/esm/{FooterItem-af3c4fa3.js → FooterItem-e7755a30.js} +1 -1
  20. package/build/esm/{FooterItem-af3c4fa3.js.map → FooterItem-e7755a30.js.map} +1 -1
  21. package/build/esm/{HotkeysPanel-c7bf8466.js → HotkeysPanel-c974ca3a.js} +1 -1
  22. package/build/esm/{HotkeysPanel-c7bf8466.js.map → HotkeysPanel-c974ca3a.js.map} +1 -1
  23. package/build/esm/{PageLayoutAside-edd59955.js → PageLayoutAside-f7f0962e.js} +1 -1
  24. package/build/esm/{PageLayoutAside-edd59955.js.map → PageLayoutAside-f7f0962e.js.map} +1 -1
  25. package/build/esm/PageLayoutAside.js +1 -1
  26. package/build/esm/components/Drawer/Drawer.d.ts +6 -0
  27. package/build/esm/components/Drawer/utils.d.ts +4 -2
  28. package/build/esm/index.js +4 -4
  29. package/build/esm/index4.js +1 -1
  30. package/build/esm/index6.js +1 -1
  31. package/package.json +1 -1
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var tslib_es6 = require('./tslib.es6-705c6589.js');
6
6
  var React = require('react');
7
7
  var PageLayout = require('./PageLayout.js');
8
- var PageLayoutAside = require('./PageLayoutAside-56a441a9.js');
8
+ var PageLayoutAside = require('./PageLayoutAside-9fabdd21.js');
9
9
  require('./Content-64d5738a.js');
10
10
  require('./constants-d81c3867.js');
11
11
  require('./AsideHeaderContext.js');
@@ -3041,59 +3041,64 @@ SwitchTransition.defaultProps = {
3041
3041
  const DRAWER_ITEM_MIN_RESIZE_WIDTH = 200;
3042
3042
  const DRAWER_ITEM_MAX_RESIZE_WIDTH = 800;
3043
3043
  const DRAWER_ITEM_INITIAL_RESIZE_WIDTH = 400;
3044
- function getEventClientX(e) {
3045
- var _a, _b;
3046
- 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;
3044
+ function getEventClientPosition(e, direction) {
3045
+ var _a, _b, _c, _d;
3046
+ if ('touches' in e) {
3047
+ return direction === 'horizontal' ? (_b = (_a = e.touches[0]) === null || _a === void 0 ? void 0 : _a.clientX) !== null && _b !== void 0 ? _b : 0 : (_d = (_c = e.touches[0]) === null || _c === void 0 ? void 0 : _c.clientY) !== null && _d !== void 0 ? _d : 0;
3048
+ }
3049
+ return direction === 'horizontal' ? e.clientX : e.clientY;
3047
3050
  }
3048
- function useResizeHandlers({ onStart, onMove, onEnd }) {
3049
- const initialXPosition = React__namespace.useRef(0);
3050
- const currentXPosition = React__namespace.useRef(0);
3051
+ function useResizeHandlers({ onStart, onMove, onEnd, direction = 'horizontal', }) {
3052
+ const initialPosition = React__namespace.useRef(0);
3053
+ const currentPosition = React__namespace.useRef(0);
3051
3054
  const handleMove = React__namespace.useCallback((e) => {
3052
- const currentX = getEventClientX(e);
3053
- if (currentXPosition.current === currentX) {
3055
+ const current = getEventClientPosition(e, direction);
3056
+ if (currentPosition.current === current) {
3054
3057
  return;
3055
3058
  }
3056
- currentXPosition.current = currentX;
3057
- const delta = initialXPosition.current - currentX;
3059
+ currentPosition.current = current;
3060
+ const delta = initialPosition.current - current;
3058
3061
  onMove(delta);
3059
- }, [onMove]);
3062
+ }, [onMove, direction]);
3063
+ const disableSelect = React__namespace.useCallback((e) => {
3064
+ e.preventDefault();
3065
+ }, []);
3060
3066
  const handleEnd = React__namespace.useCallback((e) => {
3061
3067
  window.removeEventListener('mousemove', handleMove);
3062
3068
  window.removeEventListener('touchmove', handleMove);
3063
- document.body.style.removeProperty('user-select');
3064
- document.body.style.removeProperty('-webkit-user-select');
3069
+ window.removeEventListener('selectstart', disableSelect);
3065
3070
  document.body.style.removeProperty('cursor');
3066
- const currentX = getEventClientX(e);
3067
- const delta = initialXPosition.current - currentX;
3071
+ const current = getEventClientPosition(e, direction);
3072
+ const delta = initialPosition.current - current;
3068
3073
  onEnd(delta);
3069
- }, [handleMove, onEnd]);
3074
+ }, [handleMove, disableSelect, direction, onEnd]);
3070
3075
  const handleStart = React__namespace.useCallback((e) => {
3071
- const currentX = getEventClientX(e);
3072
- initialXPosition.current = currentX;
3073
- currentXPosition.current = currentX;
3076
+ const current = getEventClientPosition(e, direction);
3077
+ initialPosition.current = current;
3078
+ currentPosition.current = current;
3074
3079
  window.addEventListener('mouseup', handleEnd, { once: true });
3075
3080
  window.addEventListener('touchend', handleEnd, { once: true });
3076
3081
  window.addEventListener('touchcancel', handleEnd, { once: true });
3077
3082
  window.addEventListener('mousemove', handleMove);
3078
3083
  window.addEventListener('touchmove', handleMove);
3079
- document.body.style.setProperty('user-select', 'none');
3080
- document.body.style.setProperty('-webkit-user-select', 'none');
3081
- document.body.style.setProperty('cursor', 'col-resize');
3084
+ // Prevents user from selecting text. Similar to `user-select: none` but with no override issue.
3085
+ window.addEventListener('selectstart', disableSelect, { passive: false });
3086
+ document.body.style.setProperty('cursor', direction === 'horizontal' ? 'col-resize' : 'row-resize');
3082
3087
  onStart();
3083
- }, [handleEnd, handleMove, onStart]);
3088
+ }, [handleEnd, handleMove, onStart, direction]);
3084
3089
  return {
3085
3090
  onMouseDown: handleStart,
3086
3091
  onTouchStart: handleStart,
3087
3092
  };
3088
3093
  }
3089
3094
  function useResizableDrawerItem(params) {
3090
- const { direction, width, minResizeWidth = DRAWER_ITEM_MIN_RESIZE_WIDTH, maxResizeWidth = DRAWER_ITEM_MAX_RESIZE_WIDTH, onResizeStart, onResize, } = params;
3095
+ const { direction = 'left', width, minResizeWidth = DRAWER_ITEM_MIN_RESIZE_WIDTH, maxResizeWidth = DRAWER_ITEM_MAX_RESIZE_WIDTH, onResizeStart, onResize, onResizeContinue, } = params;
3091
3096
  const [isResizing, setIsResizing] = React__namespace.useState(false);
3092
3097
  const [resizeDelta, setResizeDelta] = React__namespace.useState(0);
3093
3098
  const [internalWidth, setInternalWidth] = React__namespace.useState(width !== null && width !== void 0 ? width : DRAWER_ITEM_INITIAL_RESIZE_WIDTH);
3094
3099
  const getClampedWidth = React__namespace.useCallback((width) => Math.min(Math.max(width, minResizeWidth), maxResizeWidth), [minResizeWidth, maxResizeWidth]);
3095
3100
  const getResizedWidth = React__namespace.useCallback((delta) => {
3096
- const signedDelta = direction === 'right' ? delta : -delta;
3101
+ const signedDelta = ['right', 'bottom'].includes(direction) ? delta : -delta;
3097
3102
  const newWidth = (width !== null && width !== void 0 ? width : internalWidth) + signedDelta;
3098
3103
  return getClampedWidth(newWidth);
3099
3104
  }, [width, internalWidth, direction, getClampedWidth]);
@@ -3104,7 +3109,8 @@ function useResizableDrawerItem(params) {
3104
3109
  }, [onResizeStart]);
3105
3110
  const onMove = React__namespace.useCallback((delta) => {
3106
3111
  setResizeDelta(delta);
3107
- }, []);
3112
+ onResizeContinue === null || onResizeContinue === void 0 ? void 0 : onResizeContinue(getResizedWidth(delta));
3113
+ }, [getResizedWidth, onResizeContinue]);
3108
3114
  const onEnd = React__namespace.useCallback((delta) => {
3109
3115
  const newWidth = getResizedWidth(delta);
3110
3116
  setIsResizing(false);
@@ -3114,17 +3120,22 @@ function useResizableDrawerItem(params) {
3114
3120
  const displayWidth = isResizing
3115
3121
  ? getResizedWidth(resizeDelta)
3116
3122
  : getClampedWidth(width !== null && width !== void 0 ? width : internalWidth);
3117
- const handlers = useResizeHandlers({ onStart, onMove, onEnd });
3123
+ const handlers = useResizeHandlers({
3124
+ onStart,
3125
+ onMove,
3126
+ onEnd,
3127
+ direction: ['left', 'right'].includes(direction) ? 'horizontal' : 'vertical',
3128
+ });
3118
3129
  return { resizedWidth: displayWidth, resizerHandlers: handlers, isResizing };
3119
3130
  }
3120
3131
 
3121
- var css_248z = ".gn-drawer{--_--item-shadow-default:0 1px 5px 0 var(--g-color-sfx-shadow);--_--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;--_--veil-background-color:var(--g-color-sfx-veil);pointer-events:none}.gn-drawer_hideVeil{--_--item-shadow:var(--gn-drawer-item-shadow,var(--_--item-shadow-default))}.gn-drawer__item{background-color:var(--g-color-base-background);bottom:0;box-shadow:var(--_--item-shadow,none);height:100%;left:0;pointer-events:auto;position:absolute;top:0;will-change:transform;z-index:var(--gn-drawer-item-z-index)}.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,.gn-drawer__item_hidden{visibility:hidden}.gn-drawer__veil{background-color:var(--gn-drawer-veil-background-color,var(--_--veil-background-color));inset:0;pointer-events:auto;position:absolute;z-index:var(--gn-drawer-veil-z-index)}.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))}";
3132
+ var css_248z = ".gn-drawer{--_--item-shadow-default:0 1px 5px 0 var(--g-color-sfx-shadow);--_--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;--_--veil-background-color:var(--g-color-sfx-veil);pointer-events:none}.gn-drawer_hideVeil{--_--item-shadow:var(--gn-drawer-item-shadow,var(--_--item-shadow-default))}.gn-drawer__item{background-color:var(--g-color-base-background);bottom:0;box-shadow:var(--_--item-shadow,none);height:100%;left:0;pointer-events:auto;position:absolute;top:0;will-change:transform;z-index:var(--gn-drawer-item-z-index)}.gn-drawer__item_direction_right{left:auto;right:0}.gn-drawer__item_direction_top{bottom:auto;right:0}.gn-drawer__item_direction_bottom{right:0;top:auto}.gn-drawer__item-transition-enter{transform:translate(-100%)}.gn-drawer__item-transition_direction_right-enter{transform:translate(100%)}.gn-drawer__item-transition_direction_top-enter{transform:translateY(-100%)}.gn-drawer__item-transition_direction_bottom-enter{transform:translateY(100%)}.gn-drawer__item-transition-enter-active,.gn-drawer__item-transition_direction_bottom-enter-active,.gn-drawer__item-transition_direction_right-enter-active,.gn-drawer__item-transition_direction_top-enter-active{transform:translate(0);transition:transform .3s}.gn-drawer__item-transition-enter-done,.gn-drawer__item-transition_direction_bottom-enter-done,.gn-drawer__item-transition_direction_right-enter-done,.gn-drawer__item-transition_direction_top-enter-done{filter:blur(0);transform:translateZ(0)}.gn-drawer__item-transition-exit,.gn-drawer__item-transition_direction_bottom-exit,.gn-drawer__item-transition_direction_right-exit,.gn-drawer__item-transition_direction_top-exit{transform:translate(0)}.gn-drawer__item-transition-exit-active,.gn-drawer__item-transition_direction_bottom-exit-active,.gn-drawer__item-transition_direction_right-exit-active,.gn-drawer__item-transition_direction_top-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_direction_top-exit-active{transform:translateY(-100%)}.gn-drawer__item-transition_direction_bottom-exit-active{transform:translateY(100%)}.gn-drawer__item-transition-exit-done,.gn-drawer__item-transition_direction_bottom-exit-done,.gn-drawer__item-transition_direction_right-exit-done,.gn-drawer__item-transition_direction_top-exit-done,.gn-drawer__item_hidden{visibility:hidden}.gn-drawer__veil{background-color:var(--gn-drawer-veil-background-color,var(--_--veil-background-color));inset:0;pointer-events:auto;position:absolute;z-index:var(--gn-drawer-veil-z-index)}.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-handle_direction_bottom,.gn-drawer__resizer-handle_direction_top{height:2px;width:28px}.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_direction_top{bottom:0;left:0;top:unset}.gn-drawer__resizer_direction_bottom{left:0;top:0}.gn-drawer__resizer_direction_bottom,.gn-drawer__resizer_direction_top{cursor:row-resize;height:var(--gn-drawer-item-resizer-width,var(--_--resizer-width));width:100%}.gn-drawer__resizer:hover .gn-drawer__resizer-handle{background:var(--gn-drawer-item-resizer-handle-color-hover,var(--_--resizer-handle-color-hover))}";
3122
3133
  styleInject_es.styleInject(css_248z);
3123
3134
 
3124
3135
  const b = cn.block('drawer');
3125
3136
  const TIMEOUT = 300;
3126
3137
  const DrawerItem = React__default["default"].forwardRef(function DrawerItem(props, ref) {
3127
- const { visible, content, children, direction = 'left', className, resizable, width, minResizeWidth, maxResizeWidth, onResizeStart, onResize, keepMounted = false, } = props;
3138
+ const { visible, content, children, direction = 'left', className, resizable, width, minResizeWidth, maxResizeWidth, onResizeStart, onResizeContinue, onResize, keepMounted = false, } = props;
3128
3139
  const [isInitialRender, setInitialRender] = React__default["default"].useState(true);
3129
3140
  const itemRef = React__default["default"].useRef(null);
3130
3141
  const handleRef = uikit.useForkRef(ref, itemRef);
@@ -3136,18 +3147,28 @@ const DrawerItem = React__default["default"].forwardRef(function DrawerItem(prop
3136
3147
  maxResizeWidth,
3137
3148
  onResizeStart,
3138
3149
  onResize,
3150
+ onResizeContinue,
3139
3151
  });
3152
+ const style = {};
3153
+ if (resizable) {
3154
+ if (['left', 'right'].includes(direction)) {
3155
+ style.width = `${resizedWidth}px`;
3156
+ }
3157
+ else {
3158
+ style.height = `${resizedWidth}px`;
3159
+ }
3160
+ }
3140
3161
  React__default["default"].useEffect(() => {
3141
3162
  setInitialRender(true);
3142
3163
  }, [direction]);
3143
3164
  const resizerElement = resizable ? (React__default["default"].createElement("div", Object.assign({ className: b('resizer', { direction }) }, resizerHandlers),
3144
- React__default["default"].createElement("div", { className: b('resizer-handle') }))) : null;
3165
+ React__default["default"].createElement("div", { className: b('resizer-handle', { direction }) }))) : null;
3145
3166
  return (React__default["default"].createElement(CSSTransition, { in: visible, timeout: TIMEOUT, mountOnEnter: !keepMounted, unmountOnExit: !keepMounted, classNames: b('item-transition', { direction: cssDirection }), nodeRef: itemRef, onEnter: () => setInitialRender(false), onExit: () => setInitialRender(false) },
3146
3167
  React__default["default"].createElement("div", { ref: handleRef, className: b('item', {
3147
3168
  direction: cssDirection,
3148
3169
  hidden: isInitialRender && !visible,
3149
3170
  resize: isResizing,
3150
- }, [className]), style: { width: resizable ? `${resizedWidth}px` : undefined } },
3171
+ }, [className]), style: style },
3151
3172
  resizerElement, children !== null && children !== void 0 ? children : content)));
3152
3173
  });
3153
3174
  const Drawer = ({ className, veilClassName, children, style, onVeilClick, onEscape, preventScrollBody = true, hideVeil, disablePortal = true, keepMounted = false, }) => {