@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
@@ -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-edd59955.js';
4
+ import { P as PageLayoutAside } from './PageLayoutAside-f7f0962e.js';
5
5
  import './Content-f94ba85d.js';
6
6
  import './constants-b1604ff5.js';
7
7
  import './AsideHeaderContext.js';
@@ -3014,59 +3014,64 @@ SwitchTransition.defaultProps = {
3014
3014
  const DRAWER_ITEM_MIN_RESIZE_WIDTH = 200;
3015
3015
  const DRAWER_ITEM_MAX_RESIZE_WIDTH = 800;
3016
3016
  const DRAWER_ITEM_INITIAL_RESIZE_WIDTH = 400;
3017
- function getEventClientX(e) {
3018
- var _a, _b;
3019
- 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;
3017
+ function getEventClientPosition(e, direction) {
3018
+ var _a, _b, _c, _d;
3019
+ if ('touches' in e) {
3020
+ 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;
3021
+ }
3022
+ return direction === 'horizontal' ? e.clientX : e.clientY;
3020
3023
  }
3021
- function useResizeHandlers({ onStart, onMove, onEnd }) {
3022
- const initialXPosition = React.useRef(0);
3023
- const currentXPosition = React.useRef(0);
3024
+ function useResizeHandlers({ onStart, onMove, onEnd, direction = 'horizontal', }) {
3025
+ const initialPosition = React.useRef(0);
3026
+ const currentPosition = React.useRef(0);
3024
3027
  const handleMove = React.useCallback((e) => {
3025
- const currentX = getEventClientX(e);
3026
- if (currentXPosition.current === currentX) {
3028
+ const current = getEventClientPosition(e, direction);
3029
+ if (currentPosition.current === current) {
3027
3030
  return;
3028
3031
  }
3029
- currentXPosition.current = currentX;
3030
- const delta = initialXPosition.current - currentX;
3032
+ currentPosition.current = current;
3033
+ const delta = initialPosition.current - current;
3031
3034
  onMove(delta);
3032
- }, [onMove]);
3035
+ }, [onMove, direction]);
3036
+ const disableSelect = React.useCallback((e) => {
3037
+ e.preventDefault();
3038
+ }, []);
3033
3039
  const handleEnd = React.useCallback((e) => {
3034
3040
  window.removeEventListener('mousemove', handleMove);
3035
3041
  window.removeEventListener('touchmove', handleMove);
3036
- document.body.style.removeProperty('user-select');
3037
- document.body.style.removeProperty('-webkit-user-select');
3042
+ window.removeEventListener('selectstart', disableSelect);
3038
3043
  document.body.style.removeProperty('cursor');
3039
- const currentX = getEventClientX(e);
3040
- const delta = initialXPosition.current - currentX;
3044
+ const current = getEventClientPosition(e, direction);
3045
+ const delta = initialPosition.current - current;
3041
3046
  onEnd(delta);
3042
- }, [handleMove, onEnd]);
3047
+ }, [handleMove, disableSelect, direction, onEnd]);
3043
3048
  const handleStart = React.useCallback((e) => {
3044
- const currentX = getEventClientX(e);
3045
- initialXPosition.current = currentX;
3046
- currentXPosition.current = currentX;
3049
+ const current = getEventClientPosition(e, direction);
3050
+ initialPosition.current = current;
3051
+ currentPosition.current = current;
3047
3052
  window.addEventListener('mouseup', handleEnd, { once: true });
3048
3053
  window.addEventListener('touchend', handleEnd, { once: true });
3049
3054
  window.addEventListener('touchcancel', handleEnd, { once: true });
3050
3055
  window.addEventListener('mousemove', handleMove);
3051
3056
  window.addEventListener('touchmove', handleMove);
3052
- document.body.style.setProperty('user-select', 'none');
3053
- document.body.style.setProperty('-webkit-user-select', 'none');
3054
- document.body.style.setProperty('cursor', 'col-resize');
3057
+ // Prevents user from selecting text. Similar to `user-select: none` but with no override issue.
3058
+ window.addEventListener('selectstart', disableSelect, { passive: false });
3059
+ document.body.style.setProperty('cursor', direction === 'horizontal' ? 'col-resize' : 'row-resize');
3055
3060
  onStart();
3056
- }, [handleEnd, handleMove, onStart]);
3061
+ }, [handleEnd, handleMove, onStart, direction]);
3057
3062
  return {
3058
3063
  onMouseDown: handleStart,
3059
3064
  onTouchStart: handleStart,
3060
3065
  };
3061
3066
  }
3062
3067
  function useResizableDrawerItem(params) {
3063
- const { direction, width, minResizeWidth = DRAWER_ITEM_MIN_RESIZE_WIDTH, maxResizeWidth = DRAWER_ITEM_MAX_RESIZE_WIDTH, onResizeStart, onResize, } = params;
3068
+ const { direction = 'left', width, minResizeWidth = DRAWER_ITEM_MIN_RESIZE_WIDTH, maxResizeWidth = DRAWER_ITEM_MAX_RESIZE_WIDTH, onResizeStart, onResize, onResizeContinue, } = params;
3064
3069
  const [isResizing, setIsResizing] = React.useState(false);
3065
3070
  const [resizeDelta, setResizeDelta] = React.useState(0);
3066
3071
  const [internalWidth, setInternalWidth] = React.useState(width !== null && width !== void 0 ? width : DRAWER_ITEM_INITIAL_RESIZE_WIDTH);
3067
3072
  const getClampedWidth = React.useCallback((width) => Math.min(Math.max(width, minResizeWidth), maxResizeWidth), [minResizeWidth, maxResizeWidth]);
3068
3073
  const getResizedWidth = React.useCallback((delta) => {
3069
- const signedDelta = direction === 'right' ? delta : -delta;
3074
+ const signedDelta = ['right', 'bottom'].includes(direction) ? delta : -delta;
3070
3075
  const newWidth = (width !== null && width !== void 0 ? width : internalWidth) + signedDelta;
3071
3076
  return getClampedWidth(newWidth);
3072
3077
  }, [width, internalWidth, direction, getClampedWidth]);
@@ -3077,7 +3082,8 @@ function useResizableDrawerItem(params) {
3077
3082
  }, [onResizeStart]);
3078
3083
  const onMove = React.useCallback((delta) => {
3079
3084
  setResizeDelta(delta);
3080
- }, []);
3085
+ onResizeContinue === null || onResizeContinue === void 0 ? void 0 : onResizeContinue(getResizedWidth(delta));
3086
+ }, [getResizedWidth, onResizeContinue]);
3081
3087
  const onEnd = React.useCallback((delta) => {
3082
3088
  const newWidth = getResizedWidth(delta);
3083
3089
  setIsResizing(false);
@@ -3087,17 +3093,22 @@ function useResizableDrawerItem(params) {
3087
3093
  const displayWidth = isResizing
3088
3094
  ? getResizedWidth(resizeDelta)
3089
3095
  : getClampedWidth(width !== null && width !== void 0 ? width : internalWidth);
3090
- const handlers = useResizeHandlers({ onStart, onMove, onEnd });
3096
+ const handlers = useResizeHandlers({
3097
+ onStart,
3098
+ onMove,
3099
+ onEnd,
3100
+ direction: ['left', 'right'].includes(direction) ? 'horizontal' : 'vertical',
3101
+ });
3091
3102
  return { resizedWidth: displayWidth, resizerHandlers: handlers, isResizing };
3092
3103
  }
3093
3104
 
3094
- 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))}";
3105
+ 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))}";
3095
3106
  styleInject(css_248z);
3096
3107
 
3097
3108
  const b = block('drawer');
3098
3109
  const TIMEOUT = 300;
3099
3110
  const DrawerItem = React__default.forwardRef(function DrawerItem(props, ref) {
3100
- const { visible, content, children, direction = 'left', className, resizable, width, minResizeWidth, maxResizeWidth, onResizeStart, onResize, keepMounted = false, } = props;
3111
+ const { visible, content, children, direction = 'left', className, resizable, width, minResizeWidth, maxResizeWidth, onResizeStart, onResizeContinue, onResize, keepMounted = false, } = props;
3101
3112
  const [isInitialRender, setInitialRender] = React__default.useState(true);
3102
3113
  const itemRef = React__default.useRef(null);
3103
3114
  const handleRef = useForkRef(ref, itemRef);
@@ -3109,18 +3120,28 @@ const DrawerItem = React__default.forwardRef(function DrawerItem(props, ref) {
3109
3120
  maxResizeWidth,
3110
3121
  onResizeStart,
3111
3122
  onResize,
3123
+ onResizeContinue,
3112
3124
  });
3125
+ const style = {};
3126
+ if (resizable) {
3127
+ if (['left', 'right'].includes(direction)) {
3128
+ style.width = `${resizedWidth}px`;
3129
+ }
3130
+ else {
3131
+ style.height = `${resizedWidth}px`;
3132
+ }
3133
+ }
3113
3134
  React__default.useEffect(() => {
3114
3135
  setInitialRender(true);
3115
3136
  }, [direction]);
3116
3137
  const resizerElement = resizable ? (React__default.createElement("div", Object.assign({ className: b('resizer', { direction }) }, resizerHandlers),
3117
- React__default.createElement("div", { className: b('resizer-handle') }))) : null;
3138
+ React__default.createElement("div", { className: b('resizer-handle', { direction }) }))) : null;
3118
3139
  return (React__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) },
3119
3140
  React__default.createElement("div", { ref: handleRef, className: b('item', {
3120
3141
  direction: cssDirection,
3121
3142
  hidden: isInitialRender && !visible,
3122
3143
  resize: isResizing,
3123
- }, [className]), style: { width: resizable ? `${resizedWidth}px` : undefined } },
3144
+ }, [className]), style: style },
3124
3145
  resizerElement, children !== null && children !== void 0 ? children : content)));
3125
3146
  });
3126
3147
  const Drawer = ({ className, veilClassName, children, style, onVeilClick, onEscape, preventScrollBody = true, hideVeil, disablePortal = true, keepMounted = false, }) => {