From 18a46c0a284b9b32ea3c3489a358f73328d68fcc Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Mon, 20 Jan 2025 02:35:08 +0100 Subject: [PATCH] Handle flex "row-reverse" for mouse drag scrolling inertia --- src/modules/core/hooks/useMouseDragScroll.tsx | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/modules/core/hooks/useMouseDragScroll.tsx b/src/modules/core/hooks/useMouseDragScroll.tsx index c8513304..70638829 100644 --- a/src/modules/core/hooks/useMouseDragScroll.tsx +++ b/src/modules/core/hooks/useMouseDragScroll.tsx @@ -46,11 +46,16 @@ export const useMouseDragScroll = ( return () => {}; } - if (!elementStyle.current) { - elementStyle.current = getComputedStyle(element); - } + const isRTL = () => { + if (!elementStyle.current) { + elementStyle.current = getComputedStyle(element); + } - const isRTL = elementStyle.current.direction === 'rtl'; + const isRTLDirection = elementStyle.current.direction === 'rtl'; + const isFlexDirectionReversed = elementStyle.current.flexDirection === 'row-reverse'; + + return isRTLDirection || (!isRTLDirection && isFlexDirectionReversed); + }; const handleScrollX = scrollDirection !== ScrollDirection.Y; const handleScrollY = scrollDirection !== ScrollDirection.X; @@ -110,7 +115,7 @@ export const useMouseDragScroll = ( element.scrollHeight - element.clientHeight, ]; const newScrollPos = [ - coerceIn(scrollAtT0.current[X] - delta[X], isRTL ? -maxScrollPos[X] : 0, maxScrollPos[X]), + coerceIn(scrollAtT0.current[X] - delta[X], isRTL() ? -maxScrollPos[X] : 0, maxScrollPos[X]), coerceIn(scrollAtT0.current[Y] - delta[Y], 0, maxScrollPos[Y]), ];