From eeb811bf2d259e1f75c46e830a97c3ccd6309bcf Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Mon, 20 Jan 2025 02:37:06 +0100 Subject: [PATCH] Handle flex "column-reverse" for mouse drag scrolling inertia --- src/modules/core/hooks/useMouseDragScroll.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/modules/core/hooks/useMouseDragScroll.tsx b/src/modules/core/hooks/useMouseDragScroll.tsx index 70638829..895e8be8 100644 --- a/src/modules/core/hooks/useMouseDragScroll.tsx +++ b/src/modules/core/hooks/useMouseDragScroll.tsx @@ -56,6 +56,15 @@ export const useMouseDragScroll = ( return isRTLDirection || (!isRTLDirection && isFlexDirectionReversed); }; + + const isTopReversed = () => { + if (!elementStyle.current) { + elementStyle.current = getComputedStyle(element); + } + + return elementStyle.current.flexDirection === 'column-reverse'; + }; + const handleScrollX = scrollDirection !== ScrollDirection.Y; const handleScrollY = scrollDirection !== ScrollDirection.X; @@ -116,7 +125,7 @@ export const useMouseDragScroll = ( ]; const newScrollPos = [ coerceIn(scrollAtT0.current[X] - delta[X], isRTL() ? -maxScrollPos[X] : 0, maxScrollPos[X]), - coerceIn(scrollAtT0.current[Y] - delta[Y], 0, maxScrollPos[Y]), + coerceIn(scrollAtT0.current[Y] - delta[Y], isTopReversed() ? -maxScrollPos[Y] : 0, maxScrollPos[Y]), ]; const isScrollXPossible = newScrollPos[X] !== 0 || newScrollPos[X] !== maxScrollPos[X];