authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-09-15 00:12:22-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-09-15 00:12:22-07:00
log6ecc15fa25c808922a58f07377add25b55d9ac90
tree41a4d185051401c7e871f5d50ff07b097814e67a
parent9ea892e3b365faff31eed294ac38f70d122656b2
signature Signed by PGP key B5690EEEBB952194

fix(mobile): restrict row highlighting to pointer input (#11863)


2 files changed, 7 insertions(+), 5 deletions(-)

apps/mobile/src/components/RowPressable.tsx+2-2
......@@ -5,7 +5,7 @@ import { GestureDetector } from "react-native-gesture-handler";
55import { cn } from "../lib/cn";
66import { useHoverGesture } from "../lib/useHoverGesture";
77
8/** Shared row feedback, layered over the background so selection stays visible. */
8/** Pointer feedback layered over selection. Touch-down may be the start of a scroll. */
99export function RowPressable({
1010 children,
1111 className,
......@@ -24,7 +24,7 @@ export function RowPressable({
2424 <View
2525 pointerEvents="none"
2626 className={cn("absolute inset-0", interactionClassName)}
27 style={{ opacity: props.disabled ? 0 : pressed ? 0.2 : hovered ? 0.1 : 0 }}
27 style={{ opacity: props.disabled || !hovered ? 0 : pressed ? 0.2 : 0.1 }}
2828 />
2929 {children}
3030 </>
apps/mobile/src/lib/useHoverGesture.ts+5-3
......@@ -1,5 +1,5 @@
11import { useMemo, useState } from "react";
2import { Gesture } from "react-native-gesture-handler";
2import { Gesture, PointerType } from "react-native-gesture-handler";
33
44/** Uses native hover recognition without React Native's optional pointer-event flags. */
55export function useHoverGesture(disabled = false) {
......@@ -12,8 +12,10 @@ export function useHoverGesture(disabled = false) {
1212 // Observe hover without competing with row taps, scrolling, or swipe actions.
1313 .cancelsTouchesInView(false)
1414 .runOnJS(true)
15 .onBegin(() => {
16 setHovered(true);
15 .onBegin((event) => {
16 setHovered(
17 event.pointerType === PointerType.MOUSE || event.pointerType === PointerType.STYLUS,
18 );
1719 })
1820 .onFinalize(() => {
1921 setHovered(false);