@gravity-ui/navigation 2.32.0 → 2.34.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.
Files changed (29) hide show
  1. package/build/cjs/AsideHeader.js +1 -1
  2. package/build/cjs/Drawer.js +47 -26
  3. package/build/cjs/Drawer.js.map +1 -1
  4. package/build/cjs/{FooterItem-de603636.js → FooterItem-fef16564.js} +1 -1
  5. package/build/cjs/{FooterItem-de603636.js.map → FooterItem-fef16564.js.map} +1 -1
  6. package/build/cjs/{HotkeysPanel-1ed9fc32.js → HotkeysPanel-9c965feb.js} +1 -1
  7. package/build/cjs/{HotkeysPanel-1ed9fc32.js.map → HotkeysPanel-9c965feb.js.map} +1 -1
  8. package/build/cjs/{PageLayoutAside-30f2015c.js → PageLayoutAside-122aea8e.js} +1 -1
  9. package/build/cjs/{PageLayoutAside-30f2015c.js.map → PageLayoutAside-122aea8e.js.map} +1 -1
  10. package/build/cjs/PageLayoutAside.js +1 -1
  11. package/build/cjs/components/Drawer/utils.d.ts +4 -2
  12. package/build/cjs/index.js +3 -3
  13. package/build/cjs/index4.js +1 -1
  14. package/build/cjs/index6.js +1 -1
  15. package/build/esm/AsideHeader.js +1 -1
  16. package/build/esm/Drawer.js +47 -26
  17. package/build/esm/Drawer.js.map +1 -1
  18. package/build/esm/{FooterItem-3cc816a3.js → FooterItem-eea84655.js} +1 -1
  19. package/build/esm/{FooterItem-3cc816a3.js.map → FooterItem-eea84655.js.map} +1 -1
  20. package/build/esm/{HotkeysPanel-0576deee.js → HotkeysPanel-4693d73c.js} +1 -1
  21. package/build/esm/{HotkeysPanel-0576deee.js.map → HotkeysPanel-4693d73c.js.map} +1 -1
  22. package/build/esm/{PageLayoutAside-5d010e96.js → PageLayoutAside-d7365bdf.js} +1 -1
  23. package/build/esm/{PageLayoutAside-5d010e96.js.map → PageLayoutAside-d7365bdf.js.map} +1 -1
  24. package/build/esm/PageLayoutAside.js +1 -1
  25. package/build/esm/components/Drawer/utils.d.ts +4 -2
  26. package/build/esm/index.js +4 -4
  27. package/build/esm/index4.js +1 -1
  28. package/build/esm/index6.js +1 -1
  29. package/package.json +1 -1
@@ -3014,36 +3014,39 @@ 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]);
3033
3036
  const handleEnd = React.useCallback((e) => {
3034
3037
  window.removeEventListener('mousemove', handleMove);
3035
3038
  window.removeEventListener('touchmove', handleMove);
3036
3039
  document.body.style.removeProperty('user-select');
3037
3040
  document.body.style.removeProperty('-webkit-user-select');
3038
3041
  document.body.style.removeProperty('cursor');
3039
- const currentX = getEventClientX(e);
3040
- const delta = initialXPosition.current - currentX;
3042
+ const current = getEventClientPosition(e, direction);
3043
+ const delta = initialPosition.current - current;
3041
3044
  onEnd(delta);
3042
- }, [handleMove, onEnd]);
3045
+ }, [handleMove, onEnd, direction]);
3043
3046
  const handleStart = React.useCallback((e) => {
3044
- const currentX = getEventClientX(e);
3045
- initialXPosition.current = currentX;
3046
- currentXPosition.current = currentX;
3047
+ const current = getEventClientPosition(e, direction);
3048
+ initialPosition.current = current;
3049
+ currentPosition.current = current;
3047
3050
  window.addEventListener('mouseup', handleEnd, { once: true });
3048
3051
  window.addEventListener('touchend', handleEnd, { once: true });
3049
3052
  window.addEventListener('touchcancel', handleEnd, { once: true });
@@ -3053,20 +3056,20 @@ function useResizeHandlers({ onStart, onMove, onEnd }) {
3053
3056
  document.body.style.setProperty('-webkit-user-select', 'none');
3054
3057
  document.body.style.setProperty('cursor', 'col-resize');
3055
3058
  onStart();
3056
- }, [handleEnd, handleMove, onStart]);
3059
+ }, [handleEnd, handleMove, onStart, direction]);
3057
3060
  return {
3058
3061
  onMouseDown: handleStart,
3059
3062
  onTouchStart: handleStart,
3060
3063
  };
3061
3064
  }
3062
3065
  function useResizableDrawerItem(params) {
3063
- const { direction, width, minResizeWidth = DRAWER_ITEM_MIN_RESIZE_WIDTH, maxResizeWidth = DRAWER_ITEM_MAX_RESIZE_WIDTH, onResizeStart, onResize, } = params;
3066
+ const { direction = 'left', width, minResizeWidth = DRAWER_ITEM_MIN_RESIZE_WIDTH, maxResizeWidth = DRAWER_ITEM_MAX_RESIZE_WIDTH, onResizeStart, onResize, } = params;
3064
3067
  const [isResizing, setIsResizing] = React.useState(false);
3065
3068
  const [resizeDelta, setResizeDelta] = React.useState(0);
3066
3069
  const [internalWidth, setInternalWidth] = React.useState(width !== null && width !== void 0 ? width : DRAWER_ITEM_INITIAL_RESIZE_WIDTH);
3067
3070
  const getClampedWidth = React.useCallback((width) => Math.min(Math.max(width, minResizeWidth), maxResizeWidth), [minResizeWidth, maxResizeWidth]);
3068
3071
  const getResizedWidth = React.useCallback((delta) => {
3069
- const signedDelta = direction === 'right' ? delta : -delta;
3072
+ const signedDelta = ['right', 'bottom'].includes(direction) ? delta : -delta;
3070
3073
  const newWidth = (width !== null && width !== void 0 ? width : internalWidth) + signedDelta;
3071
3074
  return getClampedWidth(newWidth);
3072
3075
  }, [width, internalWidth, direction, getClampedWidth]);
@@ -3087,11 +3090,16 @@ function useResizableDrawerItem(params) {
3087
3090
  const displayWidth = isResizing
3088
3091
  ? getResizedWidth(resizeDelta)
3089
3092
  : getClampedWidth(width !== null && width !== void 0 ? width : internalWidth);
3090
- const handlers = useResizeHandlers({ onStart, onMove, onEnd });
3091
- return { resizedWidth: displayWidth, resizerHandlers: handlers };
3093
+ const handlers = useResizeHandlers({
3094
+ onStart,
3095
+ onMove,
3096
+ onEnd,
3097
+ direction: ['left', 'right'].includes(direction) ? 'horizontal' : 'vertical',
3098
+ });
3099
+ return { resizedWidth: displayWidth, resizerHandlers: handlers, isResizing };
3092
3100
  }
3093
3101
 
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))}";
3102
+ 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{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
3103
  styleInject(css_248z);
3096
3104
 
3097
3105
  const b = block('drawer');
@@ -3102,7 +3110,7 @@ const DrawerItem = React__default.forwardRef(function DrawerItem(props, ref) {
3102
3110
  const itemRef = React__default.useRef(null);
3103
3111
  const handleRef = useForkRef(ref, itemRef);
3104
3112
  const cssDirection = direction === 'left' ? undefined : direction;
3105
- const { resizedWidth, resizerHandlers } = useResizableDrawerItem({
3113
+ const { resizedWidth, resizerHandlers, isResizing } = useResizableDrawerItem({
3106
3114
  direction,
3107
3115
  width,
3108
3116
  minResizeWidth,
@@ -3110,13 +3118,26 @@ const DrawerItem = React__default.forwardRef(function DrawerItem(props, ref) {
3110
3118
  onResizeStart,
3111
3119
  onResize,
3112
3120
  });
3121
+ const style = {};
3122
+ if (resizable) {
3123
+ if (['left', 'right'].includes(direction)) {
3124
+ style.width = `${resizedWidth}px`;
3125
+ }
3126
+ else {
3127
+ style.height = `${resizedWidth}px`;
3128
+ }
3129
+ }
3113
3130
  React__default.useEffect(() => {
3114
3131
  setInitialRender(true);
3115
3132
  }, [direction]);
3116
3133
  const resizerElement = resizable ? (React__default.createElement("div", Object.assign({ className: b('resizer', { direction }) }, resizerHandlers),
3117
- React__default.createElement("div", { className: b('resizer-handle') }))) : null;
3134
+ React__default.createElement("div", { className: b('resizer-handle', { direction }) }))) : null;
3118
3135
  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
- React__default.createElement("div", { ref: handleRef, className: b('item', { direction: cssDirection, hidden: isInitialRender && !visible }, [className]), style: { width: resizable ? `${resizedWidth}px` : undefined } },
3136
+ React__default.createElement("div", { ref: handleRef, className: b('item', {
3137
+ direction: cssDirection,
3138
+ hidden: isInitialRender && !visible,
3139
+ resize: isResizing,
3140
+ }, [className]), style: style },
3120
3141
  resizerElement, children !== null && children !== void 0 ? children : content)));
3121
3142
  });
3122
3143
  const Drawer = ({ className, veilClassName, children, style, onVeilClick, onEscape, preventScrollBody = true, hideVeil, disablePortal = true, keepMounted = false, }) => {