react-native-gesture-handler 2.24.0 → 2.25.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 (61) hide show
  1. package/README.md +3 -0
  2. package/android/build.gradle +39 -12
  3. package/android/fabric/src/main/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +2 -0
  4. package/android/nosvg/src/main/java/com/swmansion/gesturehandler/RNSVGHitTester.kt +13 -0
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +6 -1
  6. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +13 -3
  7. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +1 -1
  8. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +8 -2
  9. package/android/svg/src/main/java/com/swmansion/gesturehandler/RNSVGHitTester.kt +67 -0
  10. package/apple/RNGestureHandlerButtonComponentView.h +2 -1
  11. package/apple/RNGestureHandlerButtonComponentView.mm +95 -0
  12. package/lib/commonjs/components/GestureButtons.js +5 -4
  13. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  14. package/lib/commonjs/components/Pressable/Pressable.js +76 -40
  15. package/lib/commonjs/components/Pressable/Pressable.js.map +1 -1
  16. package/lib/commonjs/handlers/createHandler.js +5 -8
  17. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  18. package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js +12 -5
  19. package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -1
  20. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js +3 -7
  21. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js.map +1 -1
  22. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +0 -1
  23. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  24. package/lib/commonjs/web/tools/InteractionManager.js +1 -3
  25. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  26. package/lib/module/components/GestureButtons.js +4 -3
  27. package/lib/module/components/GestureButtons.js.map +1 -1
  28. package/lib/module/components/Pressable/Pressable.js +75 -39
  29. package/lib/module/components/Pressable/Pressable.js.map +1 -1
  30. package/lib/module/handlers/createHandler.js +5 -8
  31. package/lib/module/handlers/createHandler.js.map +1 -1
  32. package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js +12 -5
  33. package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -1
  34. package/lib/module/handlers/gestures/GestureDetector/utils.js +3 -6
  35. package/lib/module/handlers/gestures/GestureDetector/utils.js.map +1 -1
  36. package/lib/module/web/tools/GestureHandlerOrchestrator.js +0 -1
  37. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  38. package/lib/module/web/tools/InteractionManager.js +1 -2
  39. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  40. package/lib/typescript/components/GestureButtons.d.ts +3 -3
  41. package/lib/typescript/components/Pressable/Pressable.d.ts +3 -1
  42. package/package.json +4 -2
  43. package/src/components/GestureButtons.tsx +13 -9
  44. package/src/components/Pressable/Pressable.tsx +400 -351
  45. package/src/handlers/createHandler.tsx +4 -8
  46. package/src/handlers/gestures/GestureDetector/updateHandlers.ts +11 -3
  47. package/src/handlers/gestures/GestureDetector/utils.ts +3 -7
  48. package/src/web/tools/GestureHandlerOrchestrator.ts +0 -1
  49. package/src/web/tools/InteractionManager.ts +1 -2
  50. package/lib/commonjs/getReactNativeVersion.js +0 -22
  51. package/lib/commonjs/getReactNativeVersion.js.map +0 -1
  52. package/lib/commonjs/getReactNativeVersion.web.js +0 -11
  53. package/lib/commonjs/getReactNativeVersion.web.js.map +0 -1
  54. package/lib/module/getReactNativeVersion.js +0 -10
  55. package/lib/module/getReactNativeVersion.js.map +0 -1
  56. package/lib/module/getReactNativeVersion.web.js +0 -4
  57. package/lib/module/getReactNativeVersion.web.js.map +0 -1
  58. package/lib/typescript/getReactNativeVersion.d.ts +0 -4
  59. package/lib/typescript/getReactNativeVersion.web.d.ts +0 -1
  60. package/src/getReactNativeVersion.ts +0 -11
  61. package/src/getReactNativeVersion.web.ts +0 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["Pressable.tsx"],"names":["React","useCallback","useMemo","useRef","useState","GestureObjects","Gesture","GestureDetector","Platform","processColor","NativeButton","numberAsInset","gestureToPressableEvent","isTouchWithinInset","gestureTouchToPressableEvent","addInsets","PressabilityDebugView","INT32_MAX","isFabric","isTestEnv","DEFAULT_LONG_PRESS_DURATION","IS_TEST_ENV","IS_FABRIC","Pressable","props","testOnly_pressed","hitSlop","pressRetentionOffset","delayHoverIn","onHoverIn","delayHoverOut","onHoverOut","delayLongPress","unstable_pressDelay","onPress","onPressIn","onPressOut","onLongPress","style","children","android_disableSound","android_ripple","disabled","remainingProps","pressedState","setPressedState","pressableRef","isPressCallbackEnabled","hasPassedBoundsChecks","shouldPreventNativeEffects","normalizedHitSlop","normalizedPressRetentionOffset","hoverInTimeout","hoverOutTimeout","hoverGesture","Hover","manualActivation","cancelsTouchesInView","onBegin","event","current","clearTimeout","setTimeout","onFinalize","pressDelayTimeoutRef","isTouchPropagationAllowed","deferredEventPayload","pressInHandler","handlingOnTouchesDown","pressOutHandler","nativeEvent","touches","length","changedTouches","longPressTimeoutRef","onEndHandlingTouchesDown","cancelledMidPress","activateLongPress","longPressMinDuration","pressAndTouchGesture","LongPress","minDuration","maxDistance","onTouchesDown","measure","_x","_y","width","height","at","onTouchesUp","onTouchesCancelled","allTouches","buttonGesture","Native","OS","onStart","appliedHitSlop","isPressableEnabled","gestures","gesture","enabled","runOnJS","shouldCancelWhenOutside","Simultaneous","pointerStyle","cursor","styleProp","pressed","childrenProp","rippleColor","defaultRippleColor","undefined","unprocessedRippleColor","color","radius","__DEV__"],"mappings":"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","sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { GestureObjects as Gesture } from '../../handlers/gestures/gestureObjects';\nimport { GestureDetector } from '../../handlers/gestures/GestureDetector';\nimport { PressableEvent, PressableProps } from './PressableProps';\nimport {\n Insets,\n Platform,\n StyleProp,\n View,\n ViewStyle,\n processColor,\n} from 'react-native';\nimport NativeButton from '../GestureHandlerButton';\nimport {\n numberAsInset,\n gestureToPressableEvent,\n isTouchWithinInset,\n gestureTouchToPressableEvent,\n addInsets,\n} from './utils';\nimport { PressabilityDebugView } from '../../handlers/PressabilityDebugView';\nimport { GestureTouchEvent } from '../../handlers/gestureHandlerCommon';\nimport { INT32_MAX, isFabric, isTestEnv } from '../../utils';\n\nconst DEFAULT_LONG_PRESS_DURATION = 500;\nconst IS_TEST_ENV = isTestEnv();\n\nlet IS_FABRIC: null | boolean = null;\n\nexport default function Pressable(props: PressableProps) {\n const {\n testOnly_pressed,\n hitSlop,\n pressRetentionOffset,\n delayHoverIn,\n onHoverIn,\n delayHoverOut,\n onHoverOut,\n delayLongPress,\n unstable_pressDelay,\n onPress,\n onPressIn,\n onPressOut,\n onLongPress,\n style,\n children,\n android_disableSound,\n android_ripple,\n disabled,\n ...remainingProps\n } = props;\n\n const [pressedState, setPressedState] = useState(testOnly_pressed ?? false);\n\n const pressableRef = useRef<View>(null);\n\n // Disabled when onLongPress has been called\n const isPressCallbackEnabled = useRef<boolean>(true);\n const hasPassedBoundsChecks = useRef<boolean>(false);\n const shouldPreventNativeEffects = useRef<boolean>(false);\n\n const normalizedHitSlop: Insets = useMemo(\n () =>\n typeof hitSlop === 'number' ? numberAsInset(hitSlop) : (hitSlop ?? {}),\n [hitSlop]\n );\n\n const normalizedPressRetentionOffset: Insets = useMemo(\n () =>\n typeof pressRetentionOffset === 'number'\n ? numberAsInset(pressRetentionOffset)\n : (pressRetentionOffset ?? {}),\n [pressRetentionOffset]\n );\n\n const hoverInTimeout = useRef<number | null>(null);\n const hoverOutTimeout = useRef<number | null>(null);\n\n const hoverGesture = useMemo(\n () =>\n Gesture.Hover()\n .manualActivation(true) // Stops Hover from blocking Native gesture activation on web\n .cancelsTouchesInView(false)\n .onBegin((event) => {\n if (hoverOutTimeout.current) {\n clearTimeout(hoverOutTimeout.current);\n }\n if (delayHoverIn) {\n hoverInTimeout.current = setTimeout(\n () => onHoverIn?.(gestureToPressableEvent(event)),\n delayHoverIn\n );\n return;\n }\n onHoverIn?.(gestureToPressableEvent(event));\n })\n .onFinalize((event) => {\n if (hoverInTimeout.current) {\n clearTimeout(hoverInTimeout.current);\n }\n if (delayHoverOut) {\n hoverOutTimeout.current = setTimeout(\n () => onHoverOut?.(gestureToPressableEvent(event)),\n delayHoverOut\n );\n return;\n }\n onHoverOut?.(gestureToPressableEvent(event));\n }),\n [delayHoverIn, delayHoverOut, onHoverIn, onHoverOut]\n );\n\n const pressDelayTimeoutRef = useRef<number | null>(null);\n const isTouchPropagationAllowed = useRef<boolean>(false);\n\n // iOS only: due to varying flow of gestures, events sometimes have to be saved for later use\n const deferredEventPayload = useRef<PressableEvent | null>(null);\n\n const pressInHandler = useCallback(\n (event: PressableEvent) => {\n if (handlingOnTouchesDown.current) {\n deferredEventPayload.current = event;\n }\n\n if (!isTouchPropagationAllowed.current) {\n return;\n }\n\n deferredEventPayload.current = null;\n\n onPressIn?.(event);\n isPressCallbackEnabled.current = true;\n pressDelayTimeoutRef.current = null;\n setPressedState(true);\n },\n [onPressIn]\n );\n\n const pressOutHandler = useCallback(\n (event: PressableEvent) => {\n if (\n !hasPassedBoundsChecks.current ||\n event.nativeEvent.touches.length >\n event.nativeEvent.changedTouches.length\n ) {\n return;\n }\n\n if (unstable_pressDelay && pressDelayTimeoutRef.current !== null) {\n // When delay is preemptively finished by lifting touches,\n // we want to immediately activate it's effects - pressInHandler,\n // even though we are located at the pressOutHandler\n clearTimeout(pressDelayTimeoutRef.current);\n pressInHandler(event);\n }\n\n if (deferredEventPayload.current) {\n onPressIn?.(deferredEventPayload.current);\n deferredEventPayload.current = null;\n }\n\n onPressOut?.(event);\n\n if (isPressCallbackEnabled.current) {\n onPress?.(event);\n }\n\n if (longPressTimeoutRef.current) {\n clearTimeout(longPressTimeoutRef.current);\n longPressTimeoutRef.current = null;\n }\n\n isTouchPropagationAllowed.current = false;\n hasPassedBoundsChecks.current = false;\n isPressCallbackEnabled.current = true;\n setPressedState(false);\n },\n [onPress, onPressIn, onPressOut, pressInHandler, unstable_pressDelay]\n );\n\n const handlingOnTouchesDown = useRef<boolean>(false);\n const onEndHandlingTouchesDown = useRef<(() => void) | null>(null);\n const cancelledMidPress = useRef<boolean>(false);\n\n const activateLongPress = useCallback(\n (event: GestureTouchEvent) => {\n if (!isTouchPropagationAllowed.current) {\n return;\n }\n\n if (hasPassedBoundsChecks.current) {\n onLongPress?.(gestureTouchToPressableEvent(event));\n isPressCallbackEnabled.current = false;\n }\n\n if (longPressTimeoutRef.current) {\n clearTimeout(longPressTimeoutRef.current);\n longPressTimeoutRef.current = null;\n }\n },\n [onLongPress]\n );\n\n const longPressTimeoutRef = useRef<number | null>(null);\n const longPressMinDuration =\n (delayLongPress ?? DEFAULT_LONG_PRESS_DURATION) +\n (unstable_pressDelay ?? 0);\n\n const pressAndTouchGesture = useMemo(\n () =>\n Gesture.LongPress()\n .minDuration(INT32_MAX) // Stops long press from blocking native gesture\n .maxDistance(INT32_MAX) // Stops long press from cancelling after set distance\n .cancelsTouchesInView(false)\n .onTouchesDown((event) => {\n handlingOnTouchesDown.current = true;\n pressableRef.current?.measure((_x, _y, width, height) => {\n if (\n !isTouchWithinInset(\n {\n width,\n height,\n },\n normalizedHitSlop,\n event.changedTouches.at(-1)\n ) ||\n hasPassedBoundsChecks.current ||\n cancelledMidPress.current\n ) {\n cancelledMidPress.current = false;\n onEndHandlingTouchesDown.current = null;\n handlingOnTouchesDown.current = false;\n return;\n }\n\n hasPassedBoundsChecks.current = true;\n\n // In case of multiple touches, the first one starts long press gesture\n if (longPressTimeoutRef.current === null) {\n // Start long press gesture timer\n longPressTimeoutRef.current = setTimeout(\n () => activateLongPress(event),\n longPressMinDuration\n );\n }\n\n if (unstable_pressDelay) {\n pressDelayTimeoutRef.current = setTimeout(() => {\n pressInHandler(gestureTouchToPressableEvent(event));\n }, unstable_pressDelay);\n } else {\n pressInHandler(gestureTouchToPressableEvent(event));\n }\n\n onEndHandlingTouchesDown.current?.();\n onEndHandlingTouchesDown.current = null;\n handlingOnTouchesDown.current = false;\n });\n })\n .onTouchesUp((event) => {\n if (handlingOnTouchesDown.current) {\n onEndHandlingTouchesDown.current = () =>\n pressOutHandler(gestureTouchToPressableEvent(event));\n return;\n }\n // On iOS, short taps will make LongPress gesture call onTouchesUp before Native gesture calls onStart\n // This variable ensures that onStart isn't detected as the first gesture since Pressable is pressed.\n if (deferredEventPayload.current !== null) {\n shouldPreventNativeEffects.current = true;\n }\n pressOutHandler(gestureTouchToPressableEvent(event));\n })\n .onTouchesCancelled((event) => {\n isPressCallbackEnabled.current = false;\n\n if (handlingOnTouchesDown.current) {\n cancelledMidPress.current = true;\n onEndHandlingTouchesDown.current = () =>\n pressOutHandler(gestureTouchToPressableEvent(event));\n return;\n }\n\n if (\n !hasPassedBoundsChecks.current ||\n event.allTouches.length > event.changedTouches.length\n ) {\n return;\n }\n\n pressOutHandler(gestureTouchToPressableEvent(event));\n }),\n [\n activateLongPress,\n longPressMinDuration,\n normalizedHitSlop,\n pressInHandler,\n pressOutHandler,\n unstable_pressDelay,\n ]\n );\n\n // RNButton is placed inside ButtonGesture to enable Android's ripple and to capture non-propagating events\n const buttonGesture = useMemo(\n () =>\n Gesture.Native()\n .onBegin(() => {\n // Android sets BEGAN state on press down\n if (Platform.OS === 'android' || Platform.OS === 'macos') {\n isTouchPropagationAllowed.current = true;\n }\n })\n .onStart(() => {\n if (Platform.OS === 'web') {\n isTouchPropagationAllowed.current = true;\n }\n\n // iOS sets ACTIVE state on press down\n if (Platform.OS !== 'ios') {\n return;\n }\n\n if (deferredEventPayload.current) {\n isTouchPropagationAllowed.current = true;\n\n if (hasPassedBoundsChecks.current) {\n pressInHandler(deferredEventPayload.current);\n deferredEventPayload.current = null;\n } else {\n pressOutHandler(deferredEventPayload.current);\n isTouchPropagationAllowed.current = false;\n }\n\n return;\n }\n\n if (hasPassedBoundsChecks.current) {\n isTouchPropagationAllowed.current = true;\n return;\n }\n\n if (shouldPreventNativeEffects.current) {\n shouldPreventNativeEffects.current = false;\n return;\n }\n\n isTouchPropagationAllowed.current = true;\n }),\n [pressInHandler, pressOutHandler]\n );\n\n const appliedHitSlop = addInsets(\n normalizedHitSlop,\n normalizedPressRetentionOffset\n );\n\n const isPressableEnabled = disabled !== true;\n\n const gestures = [buttonGesture, pressAndTouchGesture, hoverGesture];\n\n for (const gesture of gestures) {\n gesture.enabled(isPressableEnabled);\n gesture.runOnJS(true);\n gesture.hitSlop(appliedHitSlop);\n gesture.shouldCancelWhenOutside(Platform.OS === 'web' ? false : true);\n }\n\n // Uses different hitSlop, to activate on hitSlop area instead of pressRetentionOffset area\n buttonGesture.hitSlop(normalizedHitSlop);\n\n const gesture = Gesture.Simultaneous(...gestures);\n\n // `cursor: 'pointer'` on `RNButton` crashes iOS\n const pointerStyle: StyleProp<ViewStyle> =\n Platform.OS === 'web' ? { cursor: 'pointer' } : {};\n\n const styleProp =\n typeof style === 'function' ? style({ pressed: pressedState }) : style;\n\n const childrenProp =\n typeof children === 'function'\n ? children({ pressed: pressedState })\n : children;\n\n const rippleColor = useMemo(() => {\n if (IS_FABRIC === null) {\n IS_FABRIC = isFabric();\n }\n\n const defaultRippleColor = android_ripple ? undefined : 'transparent';\n const unprocessedRippleColor = android_ripple?.color ?? defaultRippleColor;\n return IS_FABRIC\n ? unprocessedRippleColor\n : processColor(unprocessedRippleColor);\n }, [android_ripple]);\n\n return (\n <GestureDetector gesture={gesture}>\n <NativeButton\n {...remainingProps}\n ref={pressableRef}\n hitSlop={appliedHitSlop}\n enabled={isPressableEnabled}\n touchSoundDisabled={android_disableSound ?? undefined}\n rippleColor={rippleColor}\n rippleRadius={android_ripple?.radius ?? undefined}\n style={[pointerStyle, styleProp]}\n testOnly_onPress={IS_TEST_ENV ? onPress : undefined}\n testOnly_onPressIn={IS_TEST_ENV ? onPressIn : undefined}\n testOnly_onPressOut={IS_TEST_ENV ? onPressOut : undefined}\n testOnly_onLongPress={IS_TEST_ENV ? onLongPress : undefined}>\n {childrenProp}\n {__DEV__ ? (\n <PressabilityDebugView color=\"red\" hitSlop={normalizedHitSlop} />\n ) : null}\n </NativeButton>\n </GestureDetector>\n );\n}\n"]}
1
+ {"version":3,"sources":["Pressable.tsx"],"names":["React","forwardRef","useCallback","useMemo","useRef","useState","GestureObjects","Gesture","GestureDetector","Platform","processColor","NativeButton","numberAsInset","gestureToPressableEvent","isTouchWithinInset","gestureTouchToPressableEvent","addInsets","PressabilityDebugView","INT32_MAX","isFabric","isTestEnv","DEFAULT_LONG_PRESS_DURATION","IS_TEST_ENV","IS_FABRIC","Pressable","props","pressableRef","testOnly_pressed","hitSlop","pressRetentionOffset","delayHoverIn","onHoverIn","delayHoverOut","onHoverOut","delayLongPress","unstable_pressDelay","onPress","onPressIn","onPressOut","onLongPress","style","children","android_disableSound","android_ripple","disabled","accessible","remainingProps","pressedState","setPressedState","isPressCallbackEnabled","hasPassedBoundsChecks","shouldPreventNativeEffects","normalizedHitSlop","normalizedPressRetentionOffset","hoverInTimeout","hoverOutTimeout","hoverGesture","Hover","manualActivation","cancelsTouchesInView","onBegin","event","current","clearTimeout","setTimeout","onFinalize","pressDelayTimeoutRef","isTouchPropagationAllowed","deferredEventPayload","pressInHandler","handlingOnTouchesDown","pressOutHandler","longPressTimeoutRef","nativeEvent","touches","length","changedTouches","onEndHandlingTouchesDown","cancelledMidPress","activateLongPress","longPressMinDuration","innerPressableRef","measureCallback","width","height","at","pressAndTouchGesture","LongPress","minDuration","maxDistance","onTouchesDown","measure","_x","_y","onTouchesUp","onTouchesCancelled","allTouches","buttonGesture","Native","OS","onStart","appliedHitSlop","isPressableEnabled","gestures","gesture","enabled","runOnJS","shouldCancelWhenOutside","Simultaneous","pointerStyle","cursor","styleProp","pressed","childrenProp","rippleColor","defaultRippleColor","undefined","unprocessedRippleColor","color","radius","__DEV__"],"mappings":"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","sourcesContent":["import React, {\n ForwardedRef,\n forwardRef,\n RefObject,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { GestureObjects as Gesture } from '../../handlers/gestures/gestureObjects';\nimport { GestureDetector } from '../../handlers/gestures/GestureDetector';\nimport { PressableEvent, PressableProps } from './PressableProps';\nimport {\n Insets,\n Platform,\n StyleProp,\n View,\n ViewStyle,\n processColor,\n} from 'react-native';\nimport NativeButton from '../GestureHandlerButton';\nimport {\n numberAsInset,\n gestureToPressableEvent,\n isTouchWithinInset,\n gestureTouchToPressableEvent,\n addInsets,\n} from './utils';\nimport { PressabilityDebugView } from '../../handlers/PressabilityDebugView';\nimport { GestureTouchEvent } from '../../handlers/gestureHandlerCommon';\nimport { INT32_MAX, isFabric, isTestEnv } from '../../utils';\n\nconst DEFAULT_LONG_PRESS_DURATION = 500;\nconst IS_TEST_ENV = isTestEnv();\n\nlet IS_FABRIC: null | boolean = null;\n\nconst Pressable = forwardRef(\n (props: PressableProps, pressableRef: ForwardedRef<View>) => {\n const {\n testOnly_pressed,\n hitSlop,\n pressRetentionOffset,\n delayHoverIn,\n onHoverIn,\n delayHoverOut,\n onHoverOut,\n delayLongPress,\n unstable_pressDelay,\n onPress,\n onPressIn,\n onPressOut,\n onLongPress,\n style,\n children,\n android_disableSound,\n android_ripple,\n disabled,\n accessible,\n ...remainingProps\n } = props;\n\n const [pressedState, setPressedState] = useState(testOnly_pressed ?? false);\n\n // Disabled when onLongPress has been called\n const isPressCallbackEnabled = useRef<boolean>(true);\n const hasPassedBoundsChecks = useRef<boolean>(false);\n const shouldPreventNativeEffects = useRef<boolean>(false);\n\n const normalizedHitSlop: Insets = useMemo(\n () =>\n typeof hitSlop === 'number' ? numberAsInset(hitSlop) : (hitSlop ?? {}),\n [hitSlop]\n );\n\n const normalizedPressRetentionOffset: Insets = useMemo(\n () =>\n typeof pressRetentionOffset === 'number'\n ? numberAsInset(pressRetentionOffset)\n : (pressRetentionOffset ?? {}),\n [pressRetentionOffset]\n );\n\n const hoverInTimeout = useRef<number | null>(null);\n const hoverOutTimeout = useRef<number | null>(null);\n\n const hoverGesture = useMemo(\n () =>\n Gesture.Hover()\n .manualActivation(true) // Stops Hover from blocking Native gesture activation on web\n .cancelsTouchesInView(false)\n .onBegin((event) => {\n if (hoverOutTimeout.current) {\n clearTimeout(hoverOutTimeout.current);\n }\n if (delayHoverIn) {\n hoverInTimeout.current = setTimeout(\n () => onHoverIn?.(gestureToPressableEvent(event)),\n delayHoverIn\n );\n return;\n }\n onHoverIn?.(gestureToPressableEvent(event));\n })\n .onFinalize((event) => {\n if (hoverInTimeout.current) {\n clearTimeout(hoverInTimeout.current);\n }\n if (delayHoverOut) {\n hoverOutTimeout.current = setTimeout(\n () => onHoverOut?.(gestureToPressableEvent(event)),\n delayHoverOut\n );\n return;\n }\n onHoverOut?.(gestureToPressableEvent(event));\n }),\n [delayHoverIn, delayHoverOut, onHoverIn, onHoverOut]\n );\n\n const pressDelayTimeoutRef = useRef<number | null>(null);\n const isTouchPropagationAllowed = useRef<boolean>(false);\n\n // iOS only: due to varying flow of gestures, events sometimes have to be saved for later use\n const deferredEventPayload = useRef<PressableEvent | null>(null);\n\n const pressInHandler = useCallback(\n (event: PressableEvent) => {\n if (handlingOnTouchesDown.current) {\n deferredEventPayload.current = event;\n }\n\n if (!isTouchPropagationAllowed.current) {\n return;\n }\n\n deferredEventPayload.current = null;\n\n onPressIn?.(event);\n isPressCallbackEnabled.current = true;\n pressDelayTimeoutRef.current = null;\n setPressedState(true);\n },\n [onPressIn]\n );\n\n const pressOutHandler = useCallback(\n (event: PressableEvent) => {\n if (!isTouchPropagationAllowed.current) {\n hasPassedBoundsChecks.current = false;\n isPressCallbackEnabled.current = true;\n deferredEventPayload.current = null;\n\n if (longPressTimeoutRef.current) {\n clearTimeout(longPressTimeoutRef.current);\n longPressTimeoutRef.current = null;\n }\n\n if (pressDelayTimeoutRef.current) {\n clearTimeout(pressDelayTimeoutRef.current);\n pressDelayTimeoutRef.current = null;\n }\n\n return;\n }\n\n if (\n !hasPassedBoundsChecks.current ||\n event.nativeEvent.touches.length >\n event.nativeEvent.changedTouches.length\n ) {\n return;\n }\n\n if (unstable_pressDelay && pressDelayTimeoutRef.current !== null) {\n // When delay is preemptively finished by lifting touches,\n // we want to immediately activate it's effects - pressInHandler,\n // even though we are located at the pressOutHandler\n clearTimeout(pressDelayTimeoutRef.current);\n pressInHandler(event);\n }\n\n if (deferredEventPayload.current) {\n onPressIn?.(deferredEventPayload.current);\n deferredEventPayload.current = null;\n }\n\n onPressOut?.(event);\n\n if (isPressCallbackEnabled.current) {\n onPress?.(event);\n }\n\n if (longPressTimeoutRef.current) {\n clearTimeout(longPressTimeoutRef.current);\n longPressTimeoutRef.current = null;\n }\n\n isTouchPropagationAllowed.current = false;\n hasPassedBoundsChecks.current = false;\n isPressCallbackEnabled.current = true;\n setPressedState(false);\n },\n [onPress, onPressIn, onPressOut, pressInHandler, unstable_pressDelay]\n );\n\n const handlingOnTouchesDown = useRef<boolean>(false);\n const onEndHandlingTouchesDown = useRef<(() => void) | null>(null);\n const cancelledMidPress = useRef<boolean>(false);\n\n const activateLongPress = useCallback(\n (event: GestureTouchEvent) => {\n if (!isTouchPropagationAllowed.current) {\n return;\n }\n\n if (hasPassedBoundsChecks.current) {\n onLongPress?.(gestureTouchToPressableEvent(event));\n isPressCallbackEnabled.current = false;\n }\n\n if (longPressTimeoutRef.current) {\n clearTimeout(longPressTimeoutRef.current);\n longPressTimeoutRef.current = null;\n }\n },\n [onLongPress]\n );\n\n const longPressTimeoutRef = useRef<number | null>(null);\n const longPressMinDuration =\n (delayLongPress ?? DEFAULT_LONG_PRESS_DURATION) +\n (unstable_pressDelay ?? 0);\n\n const innerPressableRef = useRef<View>(null);\n\n const measureCallback = useCallback(\n (width: number, height: number, event: GestureTouchEvent) => {\n if (\n !isTouchWithinInset(\n {\n width,\n height,\n },\n normalizedHitSlop,\n event.changedTouches.at(-1)\n ) ||\n hasPassedBoundsChecks.current ||\n cancelledMidPress.current\n ) {\n cancelledMidPress.current = false;\n onEndHandlingTouchesDown.current = null;\n handlingOnTouchesDown.current = false;\n return;\n }\n\n hasPassedBoundsChecks.current = true;\n\n // In case of multiple touches, the first one starts long press gesture\n if (longPressTimeoutRef.current === null) {\n // Start long press gesture timer\n longPressTimeoutRef.current = setTimeout(\n () => activateLongPress(event),\n longPressMinDuration\n );\n }\n\n if (unstable_pressDelay) {\n pressDelayTimeoutRef.current = setTimeout(() => {\n pressInHandler(gestureTouchToPressableEvent(event));\n }, unstable_pressDelay);\n } else {\n pressInHandler(gestureTouchToPressableEvent(event));\n }\n\n onEndHandlingTouchesDown.current?.();\n onEndHandlingTouchesDown.current = null;\n handlingOnTouchesDown.current = false;\n },\n [\n activateLongPress,\n longPressMinDuration,\n normalizedHitSlop,\n pressInHandler,\n unstable_pressDelay,\n ]\n );\n\n const pressAndTouchGesture = useMemo(\n () =>\n Gesture.LongPress()\n .minDuration(INT32_MAX) // Stops long press from blocking native gesture\n .maxDistance(INT32_MAX) // Stops long press from cancelling after set distance\n .cancelsTouchesInView(false)\n .onTouchesDown((event) => {\n handlingOnTouchesDown.current = true;\n if (pressableRef) {\n (pressableRef as RefObject<View>).current?.measure(\n (_x, _y, width, height) => {\n measureCallback(width, height, event);\n }\n );\n } else {\n innerPressableRef.current?.measure((_x, _y, width, height) => {\n measureCallback(width, height, event);\n });\n }\n })\n .onTouchesUp((event) => {\n if (handlingOnTouchesDown.current) {\n onEndHandlingTouchesDown.current = () =>\n pressOutHandler(gestureTouchToPressableEvent(event));\n return;\n }\n // On iOS, short taps will make LongPress gesture call onTouchesUp before Native gesture calls onStart\n // This variable ensures that onStart isn't detected as the first gesture since Pressable is pressed.\n if (deferredEventPayload.current !== null) {\n shouldPreventNativeEffects.current = true;\n }\n pressOutHandler(gestureTouchToPressableEvent(event));\n })\n .onTouchesCancelled((event) => {\n isPressCallbackEnabled.current = false;\n\n if (handlingOnTouchesDown.current) {\n cancelledMidPress.current = true;\n onEndHandlingTouchesDown.current = () =>\n pressOutHandler(gestureTouchToPressableEvent(event));\n return;\n }\n\n if (\n !hasPassedBoundsChecks.current ||\n event.allTouches.length > event.changedTouches.length\n ) {\n return;\n }\n\n pressOutHandler(gestureTouchToPressableEvent(event));\n }),\n [pressableRef, measureCallback, pressOutHandler]\n );\n\n // RNButton is placed inside ButtonGesture to enable Android's ripple and to capture non-propagating events\n const buttonGesture = useMemo(\n () =>\n Gesture.Native()\n .onBegin(() => {\n // Android sets BEGAN state on press down\n if (Platform.OS === 'android' || Platform.OS === 'macos') {\n isTouchPropagationAllowed.current = true;\n }\n })\n .onStart(() => {\n if (Platform.OS === 'web') {\n isTouchPropagationAllowed.current = true;\n }\n\n // iOS sets ACTIVE state on press down\n if (Platform.OS !== 'ios') {\n return;\n }\n\n if (deferredEventPayload.current) {\n isTouchPropagationAllowed.current = true;\n\n if (hasPassedBoundsChecks.current) {\n pressInHandler(deferredEventPayload.current);\n deferredEventPayload.current = null;\n } else {\n pressOutHandler(deferredEventPayload.current);\n isTouchPropagationAllowed.current = false;\n }\n\n return;\n }\n\n if (hasPassedBoundsChecks.current) {\n isTouchPropagationAllowed.current = true;\n return;\n }\n\n if (shouldPreventNativeEffects.current) {\n shouldPreventNativeEffects.current = false;\n if (!handlingOnTouchesDown.current) {\n return;\n }\n }\n\n isTouchPropagationAllowed.current = true;\n }),\n [pressInHandler, pressOutHandler]\n );\n\n const appliedHitSlop = addInsets(\n normalizedHitSlop,\n normalizedPressRetentionOffset\n );\n\n const isPressableEnabled = disabled !== true;\n\n const gestures = [buttonGesture, pressAndTouchGesture, hoverGesture];\n\n for (const gesture of gestures) {\n gesture.enabled(isPressableEnabled);\n gesture.runOnJS(true);\n gesture.hitSlop(appliedHitSlop);\n gesture.shouldCancelWhenOutside(Platform.OS === 'web' ? false : true);\n }\n\n // Uses different hitSlop, to activate on hitSlop area instead of pressRetentionOffset area\n buttonGesture.hitSlop(normalizedHitSlop);\n\n const gesture = Gesture.Simultaneous(...gestures);\n\n // `cursor: 'pointer'` on `RNButton` crashes iOS\n const pointerStyle: StyleProp<ViewStyle> =\n Platform.OS === 'web' ? { cursor: 'pointer' } : {};\n\n const styleProp =\n typeof style === 'function' ? style({ pressed: pressedState }) : style;\n\n const childrenProp =\n typeof children === 'function'\n ? children({ pressed: pressedState })\n : children;\n\n const rippleColor = useMemo(() => {\n if (IS_FABRIC === null) {\n IS_FABRIC = isFabric();\n }\n\n const defaultRippleColor = android_ripple ? undefined : 'transparent';\n const unprocessedRippleColor =\n android_ripple?.color ?? defaultRippleColor;\n return IS_FABRIC\n ? unprocessedRippleColor\n : processColor(unprocessedRippleColor);\n }, [android_ripple]);\n\n return (\n <GestureDetector gesture={gesture}>\n <NativeButton\n {...remainingProps}\n ref={pressableRef ?? innerPressableRef}\n accessible={accessible !== false}\n hitSlop={appliedHitSlop}\n enabled={isPressableEnabled}\n touchSoundDisabled={android_disableSound ?? undefined}\n rippleColor={rippleColor}\n rippleRadius={android_ripple?.radius ?? undefined}\n style={[pointerStyle, styleProp]}\n testOnly_onPress={IS_TEST_ENV ? onPress : undefined}\n testOnly_onPressIn={IS_TEST_ENV ? onPressIn : undefined}\n testOnly_onPressOut={IS_TEST_ENV ? onPressOut : undefined}\n testOnly_onLongPress={IS_TEST_ENV ? onLongPress : undefined}>\n {childrenProp}\n {__DEV__ ? (\n <PressabilityDebugView color=\"red\" hitSlop={normalizedHitSlop} />\n ) : null}\n </NativeButton>\n </GestureDetector>\n );\n }\n);\n\nexport default Pressable;\n"]}
@@ -1,4 +1,4 @@
1
- var _UIManagerAny$getView, _UIManagerAny$getView2, _UIManagerAny$getCons;
1
+ var _UIManagerAny$getView;
2
2
 
3
3
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
4
 
@@ -52,11 +52,8 @@ const customGHEventsConfig = {
52
52
 
53
53
  UIManagerAny.genericDirectEventTypes = { ...UIManagerAny.genericDirectEventTypes,
54
54
  ...customGHEventsConfig
55
- }; // In newer versions of RN the `genericDirectEventTypes` is located in the object
56
- // returned by UIManager.getViewManagerConfig('getConstants') or in older RN UIManager.getConstants(), we need to add it there as well to make
57
- // it compatible with RN 61+
58
-
59
- const UIManagerConstants = (_UIManagerAny$getView = (_UIManagerAny$getView2 = UIManagerAny.getViewManagerConfig) === null || _UIManagerAny$getView2 === void 0 ? void 0 : _UIManagerAny$getView2.call(UIManagerAny, 'getConstants')) !== null && _UIManagerAny$getView !== void 0 ? _UIManagerAny$getView : (_UIManagerAny$getCons = UIManagerAny.getConstants) === null || _UIManagerAny$getCons === void 0 ? void 0 : _UIManagerAny$getCons.call(UIManagerAny);
55
+ };
56
+ const UIManagerConstants = (_UIManagerAny$getView = UIManagerAny.getViewManagerConfig) === null || _UIManagerAny$getView === void 0 ? void 0 : _UIManagerAny$getView.call(UIManagerAny, 'getConstants');
60
57
 
61
58
  if (UIManagerConstants) {
62
59
  UIManagerConstants.genericDirectEventTypes = { ...UIManagerConstants.genericDirectEventTypes,
@@ -126,7 +123,7 @@ export default function createHandler({
126
123
  constructor(props) {
127
124
  super(props);
128
125
 
129
- _defineProperty(this, "handlerTag", void 0);
126
+ _defineProperty(this, "handlerTag", -1);
130
127
 
131
128
  _defineProperty(this, "config", void 0);
132
129
 
@@ -197,6 +194,7 @@ export default function createHandler({
197
194
  });
198
195
 
199
196
  _defineProperty(this, "createGestureHandler", newConfig => {
197
+ this.handlerTag = getNextHandlerTag();
200
198
  this.config = newConfig;
201
199
  RNGestureHandlerModule.createGestureHandler(name, this.handlerTag, newConfig);
202
200
  });
@@ -250,7 +248,6 @@ export default function createHandler({
250
248
  scheduleFlushOperations();
251
249
  });
252
250
 
253
- this.handlerTag = getNextHandlerTag();
254
251
  this.config = {};
255
252
  this.propsRef = /*#__PURE__*/React.createRef();
256
253
  this.isMountedRef = /*#__PURE__*/React.createRef();
@@ -1 +1 @@
1
- {"version":3,"sources":["createHandler.tsx"],"names":["React","Platform","UIManager","DeviceEventEmitter","customDirectEventTypes","RNGestureHandlerModule","State","handlerIDToTag","registerOldGestureHandler","unregisterOldGestureHandler","getNextHandlerTag","filterConfig","scheduleFlushOperations","findNodeHandle","deepEqual","isFabric","isReact19","isTestEnv","tagMessage","ActionType","PressabilityDebugView","GestureHandlerRootViewContext","ghQueueMicrotask","MountRegistry","UIManagerAny","topGestureHandlerEvent","registrationName","customGHEventsConfigFabricAndroid","topOnGestureHandlerEvent","topOnGestureHandlerStateChange","customGHEventsConfig","onGestureHandlerEvent","onGestureHandlerStateChange","OS","genericDirectEventTypes","UIManagerConstants","getViewManagerConfig","getConstants","setJSResponder","oldSetJSResponder","clearJSResponder","oldClearJSResponder","tag","blockNativeResponder","handleSetJSResponder","handleClearJSResponder","allowTouches","DEV_ON_ANDROID","__DEV__","addListener","hasUnresolvedRefs","props","extract","refs","Array","isArray","current","some","r","stateToPropMappings","UNDETERMINED","undefined","BEGAN","FAILED","CANCELLED","ACTIVE","END","UNRESOLVED_REFS_RETRY_LIMIT","createHandler","name","allowedProps","config","transformProps","customNativeProps","Handler","Component","constructor","event","nativeEvent","handlerTag","onGestureEvent","onHandlerStateChange","state","stateEventName","eventHandler","node","viewNode","child","Children","only","children","ref","newConfig","createGestureHandler","newViewTag","viewTag","attachGestureHandler","JS_FUNCTION_OLD_API","propsRef","onGestureStateChange","actionType","isGestureHandlerWorklet","isStateChangeHandlerWorklet","isReanimatedHandler","REANIMATED_WORKLET","NATIVE_ANIMATED_EVENT","gestureHandlerWillMount","updateGestureHandler","createRef","isMountedRef","id","Error","componentDidMount","inspectorToggleListener","setState","_","update","displayName","componentDidUpdate","componentWillUnmount","remove","dropGestureHandler","handlerID","gestureHandlerWillUnmount","remainingTries","setNativeProps","updates","mergedProps","render","context","gestureEventHandler","gestureStateEventHandler","events","e","grandChildren","type","toArray","push","hitSlop","cloneElement","refHandler","collapsable","handlerType","enabled","testID"],"mappings":";;;;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SACEC,QADF,EAEEC,SAFF,EAGEC,kBAHF,QAKO,cALP;AAMA,SAASC,sBAAT,QAAuC,0BAAvC;AACA,OAAOC,sBAAP,MAAmC,2BAAnC;AACA,SAASC,KAAT,QAAsB,UAAtB;AACA,SACEC,cADF,EAEEC,yBAFF,EAGEC,2BAHF,QAIO,oBAJP;AAKA,SAASC,iBAAT,QAAkC,qBAAlC;AAOA,SAASC,YAAT,EAAuBC,uBAAvB,QAAsD,SAAtD;AACA,OAAOC,cAAP,MAA2B,mBAA3B;AAEA,SACEC,SADF,EAEEC,QAFF,EAGEC,SAHF,EAIEC,SAJF,EAKEC,UALF,QAMO,UANP;AAOA,SAASC,UAAT,QAA2B,eAA3B;AACA,SAASC,qBAAT,QAAsC,yBAAtC;AACA,OAAOC,6BAAP,MAA0C,kCAA1C;AACA,SAASC,gBAAT,QAAiC,qBAAjC;AACA,SAASC,aAAT,QAA8B,kBAA9B;AAGA,MAAMC,YAAY,GAAGtB,SAArB;AAEAE,sBAAsB,CAACqB,sBAAvB,GAAgD;AAC9CC,EAAAA,gBAAgB,EAAE;AAD4B,CAAhD;AAIA,MAAMC,iCAAiC,GAAG;AACxCC,EAAAA,wBAAwB,EAAE;AAAEF,IAAAA,gBAAgB,EAAE;AAApB,GADc;AAExCG,EAAAA,8BAA8B,EAAE;AAC9BH,IAAAA,gBAAgB,EAAE;AADY;AAFQ,CAA1C;AAOA,MAAMI,oBAAoB,GAAG;AAC3BC,EAAAA,qBAAqB,EAAE;AAAEL,IAAAA,gBAAgB,EAAE;AAApB,GADI;AAE3BM,EAAAA,2BAA2B,EAAE;AAC3BN,IAAAA,gBAAgB,EAAE;AADS,GAFF;AAM3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAIX,QAAQ,MACVd,QAAQ,CAACgC,EAAT,KAAgB,SADd,IAEFN,iCAFF;AAd2B,CAA7B,C,CAmBA;AACA;AACA;AACA;;AACAH,YAAY,CAACU,uBAAb,GAAuC,EACrC,GAAGV,YAAY,CAACU,uBADqB;AAErC,KAAGJ;AAFkC,CAAvC,C,CAIA;AACA;AACA;;AACA,MAAMK,kBAAkB,sDACtBX,YAAY,CAACY,oBADS,2DACtB,4BAAAZ,YAAY,EAAwB,cAAxB,CADU,kGAEtBA,YAAY,CAACa,YAFS,0DAEtB,2BAAAb,YAAY,CAFd;;AAIA,IAAIW,kBAAJ,EAAwB;AACtBA,EAAAA,kBAAkB,CAACD,uBAAnB,GAA6C,EAC3C,GAAGC,kBAAkB,CAACD,uBADqB;AAE3C,OAAGJ;AAFwC,GAA7C;AAID,C,CAED;;;AACA,MAAM;AACJQ,EAAAA,cAAc,EAAEC,iBAAiB,GAAG,MAAM,CACxC;AACD,GAHG;AAIJC,EAAAA,gBAAgB,EAAEC,mBAAmB,GAAG,MAAM,CAC5C;AACD;AANG,IAOFjB,YAPJ;;AAQAA,YAAY,CAACc,cAAb,GAA8B,CAACI,GAAD,EAAcC,oBAAd,KAAgD;AAC5EtC,EAAAA,sBAAsB,CAACuC,oBAAvB,CAA4CF,GAA5C,EAAiDC,oBAAjD;AACAJ,EAAAA,iBAAiB,CAACG,GAAD,EAAMC,oBAAN,CAAjB;AACD,CAHD;;AAIAnB,YAAY,CAACgB,gBAAb,GAAgC,MAAM;AACpCnC,EAAAA,sBAAsB,CAACwC,sBAAvB;AACAJ,EAAAA,mBAAmB;AACpB,CAHD;;AAKA,IAAIK,YAAY,GAAG,IAAnB;AACA,MAAMC,cAAc,GAAGC,OAAO,IAAI/C,QAAQ,CAACgC,EAAT,KAAgB,SAAlD,C,CACA;AACA;;AACA,IAAIc,cAAJ,EAAoB;AAClB5C,EAAAA,kBAAkB,CAAC8C,WAAnB,CAA+B,wBAA/B,EAAyD,MAAM;AAC7DH,IAAAA,YAAY,GAAG,CAACA,YAAhB;AACD,GAFD;AAGD;;AAKD,SAASI,iBAAT,CACEC,KADF,EAEE;AACA;AACA,QAAMC,OAAO,GAAIC,IAAD,IAAuB;AACrC,QAAI,CAACC,KAAK,CAACC,OAAN,CAAcF,IAAd,CAAL,EAA0B;AACxB,aAAOA,IAAI,IAAIA,IAAI,CAACG,OAAL,KAAiB,IAAhC;AACD;;AACD,WAAOH,IAAI,CAACI,IAAL,CAAWC,CAAD,IAAOA,CAAC,IAAIA,CAAC,CAACF,OAAF,KAAc,IAApC,CAAP;AACD,GALD;;AAMA,SAAOJ,OAAO,CAACD,KAAK,CAAC,sBAAD,CAAN,CAAP,IAA0CC,OAAO,CAACD,KAAK,CAAC,SAAD,CAAN,CAAxD;AACD;;AAED,MAAMQ,mBAAmB,GAAG;AAC1B,GAACrD,KAAK,CAACsD,YAAP,GAAsBC,SADI;AAE1B,GAACvD,KAAK,CAACwD,KAAP,GAAe,SAFW;AAG1B,GAACxD,KAAK,CAACyD,MAAP,GAAgB,UAHU;AAI1B,GAACzD,KAAK,CAAC0D,SAAP,GAAmB,aAJO;AAK1B,GAAC1D,KAAK,CAAC2D,MAAP,GAAgB,aALU;AAM1B,GAAC3D,KAAK,CAAC4D,GAAP,GAAa;AANa,CAA5B;AAgCA,MAAMC,2BAA2B,GAAG,CAApC,C,CAEA;;AACA,eAAe,SAASC,aAAT,CAGb;AACAC,EAAAA,IADA;AAEAC,EAAAA,YAAY,GAAG,EAFf;AAGAC,EAAAA,MAAM,GAAG,EAHT;AAIAC,EAAAA,cAJA;AAKAC,EAAAA,iBAAiB,GAAG;AALpB,CAHa,EAS6D;AAI1E,QAAMC,OAAN,SAAsB1E,KAAK,CAAC2E,SAA5B,CAGE;AAYAC,IAAAA,WAAW,CAACzB,KAAD,EAAmC;AAC5C,YAAMA,KAAN;;AAD4C;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA,qDAmFb0B,KAAD,IAA4B;AAC1D,YAAIA,KAAK,CAACC,WAAN,CAAkBC,UAAlB,KAAiC,KAAKA,UAA1C,EAAsD;AACpD,cAAI,OAAO,KAAK5B,KAAL,CAAW6B,cAAlB,KAAqC,UAAzC,EAAqD;AAAA;;AACnD,yDAAK7B,KAAL,EAAW6B,cAAX,kGAA4BH,KAA5B;AACD;AACF,SAJD,MAIO;AAAA;;AACL,yDAAK1B,KAAL,EAAWpB,qBAAX,qGAAmC8C,KAAnC;AACD;AACF,OA3F6C;;AAAA,2DA+F5CA,KADoC,IAEjC;AACH,YAAIA,KAAK,CAACC,WAAN,CAAkBC,UAAlB,KAAiC,KAAKA,UAA1C,EAAsD;AACpD,cAAI,OAAO,KAAK5B,KAAL,CAAW8B,oBAAlB,KAA2C,UAA/C,EAA2D;AAAA;;AACzD,0DAAK9B,KAAL,EAAW8B,oBAAX,mGAAkCJ,KAAlC;AACD;;AAED,gBAAMK,KAA4B,GAAGL,KAAK,CAACC,WAAN,CAAkBI,KAAvD;AACA,gBAAMC,cAAc,GAAGxB,mBAAmB,CAACuB,KAAD,CAA1C;AACA,gBAAME,YAAY,GAAGD,cAAc,IAAI,KAAKhC,KAAL,CAAWgC,cAAX,CAAvC;;AACA,cAAIC,YAAY,IAAI,OAAOA,YAAP,KAAwB,UAA5C,EAAwD;AACtDA,YAAAA,YAAY,CAACP,KAAD,CAAZ;AACD;AACF,SAXD,MAWO;AAAA;;AACL,yDAAK1B,KAAL,EAAWnB,2BAAX,qGAAyC6C,KAAzC;AACD;AACF,OA/G6C;;AAAA,0CAiHxBQ,IAAD,IAAe;AAAA;;AAClC,aAAKC,QAAL,GAAgBD,IAAhB;AAEA,cAAME,KAAK,GAAGvF,KAAK,CAACwF,QAAN,CAAeC,IAAf,CAAoB,KAAKtC,KAAL,CAAWuC,QAA/B,CAAd,CAHkC,CAIlC;AACA;;AACA,cAAMC,GAAG,GAAG3E,SAAS,eAAMuE,KAAD,CAAwBpC,KAA7B,2CAAK,OAA+BwC,GAApC,GAA0CJ,KAA1C,aAA0CA,KAA1C,uBAA0CA,KAAK,CAAEI,GAAtE;;AAEA,YAAI,CAACA,GAAL,EAAU;AACR;AACD;;AAED,YAAI,OAAOA,GAAP,KAAe,UAAnB,EAA+B;AAC7BA,UAAAA,GAAG,CAACN,IAAD,CAAH;AACD,SAFD,MAEO;AACLM,UAAAA,GAAG,CAACnC,OAAJ,GAAc6B,IAAd;AACD;AACF,OAlI6C;;AAAA,oDAqI5CO,SAD6B,IAE1B;AACH,aAAKrB,MAAL,GAAcqB,SAAd;AAEAvF,QAAAA,sBAAsB,CAACwF,oBAAvB,CACExB,IADF,EAEE,KAAKU,UAFP,EAGEa,SAHF;AAKD,OA9I6C;;AAAA,oDAgJdE,UAAD,IAAwB;AACrD,aAAKC,OAAL,GAAeD,UAAf;;AAEA,YAAI7F,QAAQ,CAACgC,EAAT,KAAgB,KAApB,EAA2B;AACzB;AAEE5B,UAAAA,sBAAsB,CAAC2F,oBADzB,CAGE,KAAKjB,UAHP,EAIEe,UAJF,EAKE3E,UAAU,CAAC8E,mBALb,EAKkC;AAChC,eAAKC,QANP;AAQD,SAVD,MAUO;AACL1F,UAAAA,yBAAyB,CAAC,KAAKuE,UAAN,EAAkB;AACzCC,YAAAA,cAAc,EAAE,KAAKjD,qBADoB;AAEzCoE,YAAAA,oBAAoB,EAAE,KAAKnE;AAFc,WAAlB,CAAzB;;AAKA,gBAAMoE,UAAU,GAAG,CAAC,MAAM;AAAA;;AACxB,kBAAMpB,cAAc,mBAAG,KAAK7B,KAAR,iDAAG,aAAY6B,cAAnC;AACA,kBAAMqB,uBAAuB,GAC3BrB,cAAc,KACb,aAAaA,cAAb,IACC,yBAAyBA,cAFb,CADhB;AAIA,kBAAMC,oBAAoB,mBAAG,KAAK9B,KAAR,iDAAG,aAAY8B,oBAAzC;AACA,kBAAMqB,2BAA2B,GAC/BrB,oBAAoB,KACnB,aAAaA,oBAAb,IACC,yBAAyBA,oBAFP,CADtB;AAIA,kBAAMsB,mBAAmB,GACvBF,uBAAuB,IAAIC,2BAD7B;;AAEA,gBAAIC,mBAAJ,EAAyB;AACvB;AACA,qBAAOpF,UAAU,CAACqF,kBAAlB;AACD,aAHD,MAGO,IAAIxB,cAAc,IAAI,gBAAgBA,cAAtC,EAAsD;AAC3D;AACA,qBAAO7D,UAAU,CAACsF,qBAAlB;AACD,aAHM,MAGA;AACL;AACA,qBAAOtF,UAAU,CAAC8E,mBAAlB;AACD;AACF,WAvBkB,GAAnB;;AAyBA5F,UAAAA,sBAAsB,CAAC2F,oBAAvB,CACE,KAAKjB,UADP,EAEEe,UAFF,EAGEM,UAHF;AAKD;;AAEDxF,QAAAA,uBAAuB;AAEvBU,QAAAA,gBAAgB,CAAC,MAAM;AACrBC,UAAAA,aAAa,CAACmF,uBAAd,CAAsC,IAAtC;AACD,SAFe,CAAhB;AAGD,OAxM6C;;AAAA,oDA2M5Cd,SAD6B,IAE1B;AACH,aAAKrB,MAAL,GAAcqB,SAAd;AAEAvF,QAAAA,sBAAsB,CAACsG,oBAAvB,CAA4C,KAAK5B,UAAjD,EAA6Da,SAA7D;AACAhF,QAAAA,uBAAuB;AACxB,OAjN6C;;AAE5C,WAAKmE,UAAL,GAAkBrE,iBAAiB,EAAnC;AACA,WAAK6D,MAAL,GAAc,EAAd;AACA,WAAK2B,QAAL,gBAAgBlG,KAAK,CAAC4G,SAAN,EAAhB;AACA,WAAKC,YAAL,gBAAoB7G,KAAK,CAAC4G,SAAN,EAApB;AACA,WAAK1B,KAAL,GAAa;AAAEpC,QAAAA;AAAF,OAAb;;AACA,UAAIK,KAAK,CAAC2D,EAAV,EAAc;AACZ,YAAIvG,cAAc,CAAC4C,KAAK,CAAC2D,EAAP,CAAd,KAA6BjD,SAAjC,EAA4C;AAC1C,gBAAM,IAAIkD,KAAJ,CAAW,oBAAmB5D,KAAK,CAAC2D,EAAG,sBAAvC,CAAN;AACD;;AACDvG,QAAAA,cAAc,CAAC4C,KAAK,CAAC2D,EAAP,CAAd,GAA2B,KAAK/B,UAAhC;AACD;AACF;;AAEDiC,IAAAA,iBAAiB,GAAG;AAClB,YAAM7D,KAAsB,GAAG,KAAKA,KAApC;AACA,WAAK0D,YAAL,CAAkBrD,OAAlB,GAA4B,IAA5B;;AAEA,UAAIT,cAAJ,EAAoB;AAClB,aAAKkE,uBAAL,GAA+B9G,kBAAkB,CAAC8C,WAAnB,CAC7B,wBAD6B,EAE7B,MAAM;AACJ,eAAKiE,QAAL,CAAeC,CAAD,KAAQ;AAAErE,YAAAA;AAAF,WAAR,CAAd;AACA,eAAKsE,MAAL,CAAYjD,2BAAZ;AACD,SAL4B,CAA/B;AAOD;;AACD,UAAIjB,iBAAiB,CAACC,KAAD,CAArB,EAA8B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA7B,QAAAA,gBAAgB,CAAC,MAAM;AACrB,eAAK8F,MAAL,CAAYjD,2BAAZ;AACD,SAFe,CAAhB;AAGD;;AAED,WAAK0B,oBAAL,CACElF,YAAY,CACV6D,cAAc,GAAGA,cAAc,CAAC,KAAKrB,KAAN,CAAjB,GAAgC,KAAKA,KADzC,EAEV,CAAC,GAAGmB,YAAJ,EAAkB,GAAGG,iBAArB,CAFU,EAGVF,MAHU,CADd;;AAQA,UAAI,CAAC,KAAKe,QAAV,EAAoB;AAClB,cAAM,IAAIyB,KAAJ,CACH,+CAA8CrC,OAAO,CAAC2C,WAAY,4DAD/D,CAAN;AAGD;;AAED,WAAKrB,oBAAL,CAA0BnF,cAAc,CAAC,KAAKyE,QAAN,CAAxC,EAvCkB,CAuCkD;AACrE;;AAEDgC,IAAAA,kBAAkB,GAAG;AACnB,YAAMvB,OAAO,GAAGlF,cAAc,CAAC,KAAKyE,QAAN,CAA9B;;AACA,UAAI,KAAKS,OAAL,KAAiBA,OAArB,EAA8B;AAC5B,aAAKC,oBAAL,CAA0BD,OAA1B,EAD4B,CACkB;AAC/C;;AACD,WAAKqB,MAAL,CAAYjD,2BAAZ;AACD;;AAEDoD,IAAAA,oBAAoB,GAAG;AAAA;;AACrB,oCAAKN,uBAAL,gFAA8BO,MAA9B;AACA,WAAKX,YAAL,CAAkBrD,OAAlB,GAA4B,KAA5B;;AACA,UAAIvD,QAAQ,CAACgC,EAAT,KAAgB,KAApB,EAA2B;AACzBxB,QAAAA,2BAA2B,CAAC,KAAKsE,UAAN,CAA3B;AACD;;AACD1E,MAAAA,sBAAsB,CAACoH,kBAAvB,CAA0C,KAAK1C,UAA/C;AACAnE,MAAAA,uBAAuB,GAPF,CAQrB;;AACA,YAAM8G,SAA6B,GAAG,KAAKvE,KAAL,CAAW2D,EAAjD;;AACA,UAAIY,SAAJ,EAAe;AACb;AACA,eAAOnH,cAAc,CAACmH,SAAD,CAArB;AACD;;AAEDnG,MAAAA,aAAa,CAACoG,yBAAd,CAAwC,IAAxC;AACD;;AAkIOP,IAAAA,MAAM,CAACQ,cAAD,EAAyB;AACrC,UAAI,CAAC,KAAKf,YAAL,CAAkBrD,OAAvB,EAAgC;AAC9B;AACD;;AAED,YAAML,KAAsB,GAAG,KAAKA,KAApC,CALqC,CAOrC;AACA;AACA;;AACA,UAAID,iBAAiB,CAACC,KAAD,CAAjB,IAA4ByE,cAAc,GAAG,CAAjD,EAAoD;AAClDtG,QAAAA,gBAAgB,CAAC,MAAM;AACrB,eAAK8F,MAAL,CAAYQ,cAAc,GAAG,CAA7B;AACD,SAFe,CAAhB;AAGD,OAJD,MAIO;AACL,cAAMhC,SAAS,GAAGjF,YAAY,CAC5B6D,cAAc,GAAGA,cAAc,CAAC,KAAKrB,KAAN,CAAjB,GAAgC,KAAKA,KADvB,EAE5B,CAAC,GAAGmB,YAAJ,EAAkB,GAAGG,iBAArB,CAF4B,EAG5BF,MAH4B,CAA9B;;AAKA,YAAI,CAACzD,SAAS,CAAC,KAAKyD,MAAN,EAAcqB,SAAd,CAAd,EAAwC;AACtC,eAAKe,oBAAL,CAA0Bf,SAA1B;AACD;AACF;AACF;;AAEDiC,IAAAA,cAAc,CAACC,OAAD,EAAe;AAC3B,YAAMC,WAAW,GAAG,EAAE,GAAG,KAAK5E,KAAV;AAAiB,WAAG2E;AAApB,OAApB;AACA,YAAMlC,SAAS,GAAGjF,YAAY,CAC5B6D,cAAc,GAAGA,cAAc,CAACuD,WAAD,CAAjB,GAAiCA,WADnB,EAE5B,CAAC,GAAGzD,YAAJ,EAAkB,GAAGG,iBAArB,CAF4B,EAG5BF,MAH4B,CAA9B;AAKA,WAAKoC,oBAAL,CAA0Bf,SAA1B;AACD;;AAEDoC,IAAAA,MAAM,GAAG;AAAA;;AACP,UAAIhF,OAAO,IAAI,CAAC,KAAKiF,OAAjB,IAA4B,CAAChH,SAAS,EAAtC,IAA4ChB,QAAQ,CAACgC,EAAT,KAAgB,KAAhE,EAAuE;AACrE,cAAM,IAAI8E,KAAJ,CACJ1C,IAAI,GACF,yMAFE,CAAN;AAID;;AAED,UAAI6D,mBAAmB,GAAG,KAAKnG,qBAA/B,CARO,CASP;;AAKA,YAAM;AAAEiD,QAAAA,cAAF;AAAkBjD,QAAAA;AAAlB,UACJ,KAAKoB,KADP;;AAEA,UAAI6B,cAAc,IAAI,OAAOA,cAAP,KAA0B,UAAhD,EAA4D;AAC1D;AACA;AACA;AACA,YAAIjD,qBAAJ,EAA2B;AACzB,gBAAM,IAAIgF,KAAJ,CACJ,yEADI,CAAN;AAGD;;AACDmB,QAAAA,mBAAmB,GAAGlD,cAAtB;AACD,OAVD,MAUO;AACL,YACEjD,qBAAqB,IACrB,OAAOA,qBAAP,KAAiC,UAFnC,EAGE;AACA,gBAAM,IAAIgF,KAAJ,CACJ,yEADI,CAAN;AAGD;AACF;;AAED,UAAIoB,wBAAwB,GAAG,KAAKnG,2BAApC,CArCO,CAsCP;;AAKA,YAAM;AACJiD,QAAAA,oBADI;AAEJjD,QAAAA;AAFI,UAG4B,KAAKmB,KAHvC;;AAIA,UAAI8B,oBAAoB,IAAI,OAAOA,oBAAP,KAAgC,UAA5D,EAAwE;AACtE;AACA;AACA;AACA,YAAIjD,2BAAJ,EAAiC;AAC/B,gBAAM,IAAI+E,KAAJ,CACJ,yEADI,CAAN;AAGD;;AACDoB,QAAAA,wBAAwB,GAAGlD,oBAA3B;AACD,OAVD,MAUO;AACL,YACEjD,2BAA2B,IAC3B,OAAOA,2BAAP,KAAuC,UAFzC,EAGE;AACA,gBAAM,IAAI+E,KAAJ,CACJ,yEADI,CAAN;AAGD;AACF;;AACD,YAAMqB,MAAM,GAAG;AACbrG,QAAAA,qBAAqB,EAAE,KAAKmD,KAAL,CAAWpC,YAAX,GACnBoF,mBADmB,GAEnBrE,SAHS;AAIb7B,QAAAA,2BAA2B,EAAE,KAAKkD,KAAL,CAAWpC,YAAX,GACzBqF,wBADyB,GAEzBtE;AANS,OAAf;AASA,WAAKqC,QAAL,CAAc1C,OAAd,GAAwB4E,MAAxB;AAEA,UAAI7C,KAAU,GAAG,IAAjB;;AACA,UAAI;AACFA,QAAAA,KAAK,GAAGvF,KAAK,CAACwF,QAAN,CAAeC,IAAf,CAAoB,KAAKtC,KAAL,CAAWuC,QAA/B,CAAR;AACD,OAFD,CAEE,OAAO2C,CAAP,EAAU;AACV,cAAM,IAAItB,KAAJ,CACJ7F,UAAU,CACP,GAAEmD,IAAK,4JADA,CADN,CAAN;AAKD;;AAED,UAAIiE,aAAa,GAAG/C,KAAK,CAACpC,KAAN,CAAYuC,QAAhC;;AACA,UACE1C,OAAO,IACPuC,KAAK,CAACgD,IADN,KAEChD,KAAK,CAACgD,IAAN,KAAe,wBAAf,IACChD,KAAK,CAACgD,IAAN,CAAWlE,IAAX,KAAoB,MADrB,IAECkB,KAAK,CAACgD,IAAN,CAAWlB,WAAX,KAA2B,MAJ7B,CADF,EAME;AACAiB,QAAAA,aAAa,GAAGtI,KAAK,CAACwF,QAAN,CAAegD,OAAf,CAAuBF,aAAvB,CAAhB;AACAA,QAAAA,aAAa,CAACG,IAAd,eACE,oBAAC,qBAAD;AACE,UAAA,GAAG,EAAC,uBADN;AAEE,UAAA,KAAK,EAAC,mBAFR;AAGE,UAAA,OAAO,EAAElD,KAAK,CAACpC,KAAN,CAAYuF;AAHvB,UADF;AAOD;;AAED,0BAAO1I,KAAK,CAAC2I,YAAN,CACLpD,KADK,EAEL;AACEI,QAAAA,GAAG,EAAE,KAAKiD,UADZ;AAEEC,QAAAA,WAAW,EAAE,KAFf;AAGE,YAAI5H,SAAS,KACT;AACE6H,UAAAA,WAAW,EAAEzE,IADf;AAEEU,UAAAA,UAAU,EAAE,KAAKA,UAFnB;AAGEgE,UAAAA,OAAO,EAAE,KAAK5F,KAAL,CAAW4F;AAHtB,SADS,GAMT,EANJ,CAHF;AAUEC,QAAAA,MAAM,wBAAE,KAAK7F,KAAL,CAAW6F,MAAb,mEAAuBzD,KAAK,CAACpC,KAAN,CAAY6F,MAV3C;AAWE,WAAGZ;AAXL,OAFK,EAeLE,aAfK,CAAP;AAiBD;;AA/XD;;AAPwE,kBAIpE5D,OAJoE,iBAQnDL,IARmD;;AAAA,kBAIpEK,OAJoE,iBASnDrD,6BATmD;;AAwY1E,SAAOqD,OAAP;AACD","sourcesContent":["import * as React from 'react';\nimport {\n Platform,\n UIManager,\n DeviceEventEmitter,\n EmitterSubscription,\n} from 'react-native';\nimport { customDirectEventTypes } from './customDirectEventTypes';\nimport RNGestureHandlerModule from '../RNGestureHandlerModule';\nimport { State } from '../State';\nimport {\n handlerIDToTag,\n registerOldGestureHandler,\n unregisterOldGestureHandler,\n} from './handlersRegistry';\nimport { getNextHandlerTag } from './getNextHandlerTag';\n\nimport {\n BaseGestureHandlerProps,\n GestureEvent,\n HandlerStateChangeEvent,\n} from './gestureHandlerCommon';\nimport { filterConfig, scheduleFlushOperations } from './utils';\nimport findNodeHandle from '../findNodeHandle';\nimport { ValueOf } from '../typeUtils';\nimport {\n deepEqual,\n isFabric,\n isReact19,\n isTestEnv,\n tagMessage,\n} from '../utils';\nimport { ActionType } from '../ActionType';\nimport { PressabilityDebugView } from './PressabilityDebugView';\nimport GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';\nimport { ghQueueMicrotask } from '../ghQueueMicrotask';\nimport { MountRegistry } from '../mountRegistry';\nimport { ReactElement } from 'react';\n\nconst UIManagerAny = UIManager as any;\n\ncustomDirectEventTypes.topGestureHandlerEvent = {\n registrationName: 'onGestureHandlerEvent',\n};\n\nconst customGHEventsConfigFabricAndroid = {\n topOnGestureHandlerEvent: { registrationName: 'onGestureHandlerEvent' },\n topOnGestureHandlerStateChange: {\n registrationName: 'onGestureHandlerStateChange',\n },\n};\n\nconst customGHEventsConfig = {\n onGestureHandlerEvent: { registrationName: 'onGestureHandlerEvent' },\n onGestureHandlerStateChange: {\n registrationName: 'onGestureHandlerStateChange',\n },\n\n // When using React Native Gesture Handler for Animated.event with useNativeDriver: true\n // on Android with Fabric enabled, the native part still sends the native events to JS\n // but prefixed with \"top\". We cannot simply rename the events above so they are prefixed\n // with \"top\" instead of \"on\" because in such case Animated.events would not be registered.\n // That's why we need to register another pair of event names.\n // The incoming events will be queued but never handled.\n // Without this piece of code below, you'll get the following JS error:\n // Unsupported top level event type \"topOnGestureHandlerEvent\" dispatched\n ...(isFabric() &&\n Platform.OS === 'android' &&\n customGHEventsConfigFabricAndroid),\n};\n\n// Add gesture specific events to genericDirectEventTypes object exported from UIManager\n// native module.\n// Once new event types are registered with react it is possible to dispatch these\n// events to all kind of native views.\nUIManagerAny.genericDirectEventTypes = {\n ...UIManagerAny.genericDirectEventTypes,\n ...customGHEventsConfig,\n};\n// In newer versions of RN the `genericDirectEventTypes` is located in the object\n// returned by UIManager.getViewManagerConfig('getConstants') or in older RN UIManager.getConstants(), we need to add it there as well to make\n// it compatible with RN 61+\nconst UIManagerConstants =\n UIManagerAny.getViewManagerConfig?.('getConstants') ??\n UIManagerAny.getConstants?.();\n\nif (UIManagerConstants) {\n UIManagerConstants.genericDirectEventTypes = {\n ...UIManagerConstants.genericDirectEventTypes,\n ...customGHEventsConfig,\n };\n}\n\n// Wrap JS responder calls and notify gesture handler manager\nconst {\n setJSResponder: oldSetJSResponder = () => {\n // no-op\n },\n clearJSResponder: oldClearJSResponder = () => {\n // no-op\n },\n} = UIManagerAny;\nUIManagerAny.setJSResponder = (tag: number, blockNativeResponder: boolean) => {\n RNGestureHandlerModule.handleSetJSResponder(tag, blockNativeResponder);\n oldSetJSResponder(tag, blockNativeResponder);\n};\nUIManagerAny.clearJSResponder = () => {\n RNGestureHandlerModule.handleClearJSResponder();\n oldClearJSResponder();\n};\n\nlet allowTouches = true;\nconst DEV_ON_ANDROID = __DEV__ && Platform.OS === 'android';\n// Toggled inspector blocks touch events in order to allow inspecting on Android\n// This needs to be a global variable in order to set initial state for `allowTouches` property in Handler component\nif (DEV_ON_ANDROID) {\n DeviceEventEmitter.addListener('toggleElementInspector', () => {\n allowTouches = !allowTouches;\n });\n}\n\ntype HandlerProps<T extends Record<string, unknown>> = Readonly<\n React.PropsWithChildren<BaseGestureHandlerProps<T>>\n>;\nfunction hasUnresolvedRefs<T extends Record<string, unknown>>(\n props: HandlerProps<T>\n) {\n // TODO(TS) - add type for extract arg\n const extract = (refs: any | any[]) => {\n if (!Array.isArray(refs)) {\n return refs && refs.current === null;\n }\n return refs.some((r) => r && r.current === null);\n };\n return extract(props['simultaneousHandlers']) || extract(props['waitFor']);\n}\n\nconst stateToPropMappings = {\n [State.UNDETERMINED]: undefined,\n [State.BEGAN]: 'onBegan',\n [State.FAILED]: 'onFailed',\n [State.CANCELLED]: 'onCancelled',\n [State.ACTIVE]: 'onActivated',\n [State.END]: 'onEnded',\n} as const;\n\ntype CreateHandlerArgs<HandlerPropsT extends Record<string, unknown>> =\n Readonly<{\n name: string;\n allowedProps: Readonly<Extract<keyof HandlerPropsT, string>[]>;\n config: Readonly<Record<string, unknown>>;\n transformProps?: (props: HandlerPropsT) => HandlerPropsT;\n customNativeProps?: Readonly<string[]>;\n }>;\n\n// TODO(TS) fix event types\ntype InternalEventHandlers = {\n onGestureHandlerEvent?: (event: any) => void;\n onGestureHandlerStateChange?: (event: any) => void;\n};\n\ntype AttachGestureHandlerWeb = (\n handlerTag: number,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newView: any,\n _actionType: ActionType,\n propsRef: React.RefObject<unknown>\n) => void;\n\nconst UNRESOLVED_REFS_RETRY_LIMIT = 1;\n\n// TODO(TS) - make sure that BaseGestureHandlerProps doesn't need other generic parameter to work with custom properties.\nexport default function createHandler<\n T extends BaseGestureHandlerProps<U>,\n U extends Record<string, unknown>,\n>({\n name,\n allowedProps = [],\n config = {},\n transformProps,\n customNativeProps = [],\n}: CreateHandlerArgs<T>): React.ComponentType<T & React.RefAttributes<any>> {\n interface HandlerState {\n allowTouches: boolean;\n }\n class Handler extends React.Component<\n T & InternalEventHandlers,\n HandlerState\n > {\n static displayName = name;\n static contextType = GestureHandlerRootViewContext;\n\n private handlerTag: number;\n private config: Record<string, unknown>;\n private propsRef: React.MutableRefObject<unknown>;\n private isMountedRef: React.MutableRefObject<boolean | null>;\n private viewNode: any;\n private viewTag?: number;\n private inspectorToggleListener?: EmitterSubscription;\n\n constructor(props: T & InternalEventHandlers) {\n super(props);\n this.handlerTag = getNextHandlerTag();\n this.config = {};\n this.propsRef = React.createRef();\n this.isMountedRef = React.createRef();\n this.state = { allowTouches };\n if (props.id) {\n if (handlerIDToTag[props.id] !== undefined) {\n throw new Error(`Handler with ID \"${props.id}\" already registered`);\n }\n handlerIDToTag[props.id] = this.handlerTag;\n }\n }\n\n componentDidMount() {\n const props: HandlerProps<U> = this.props;\n this.isMountedRef.current = true;\n\n if (DEV_ON_ANDROID) {\n this.inspectorToggleListener = DeviceEventEmitter.addListener(\n 'toggleElementInspector',\n () => {\n this.setState((_) => ({ allowTouches }));\n this.update(UNRESOLVED_REFS_RETRY_LIMIT);\n }\n );\n }\n if (hasUnresolvedRefs(props)) {\n // If there are unresolved refs (e.g. \".current\" has not yet been set)\n // passed as `simultaneousHandlers` or `waitFor`, we enqueue a call to\n // _update method that will try to update native handler props using\n // queueMicrotask. This makes it so update() function gets called after all\n // react components are mounted and we expect the missing ref object to\n // be resolved by then.\n ghQueueMicrotask(() => {\n this.update(UNRESOLVED_REFS_RETRY_LIMIT);\n });\n }\n\n this.createGestureHandler(\n filterConfig(\n transformProps ? transformProps(this.props) : this.props,\n [...allowedProps, ...customNativeProps],\n config\n )\n );\n\n if (!this.viewNode) {\n throw new Error(\n `[Gesture Handler] Failed to obtain view for ${Handler.displayName}. Note that old API doesn't support functional components.`\n );\n }\n\n this.attachGestureHandler(findNodeHandle(this.viewNode) as number); // TODO(TS) - check if this can be null\n }\n\n componentDidUpdate() {\n const viewTag = findNodeHandle(this.viewNode);\n if (this.viewTag !== viewTag) {\n this.attachGestureHandler(viewTag as number); // TODO(TS) - check interaction between _viewTag & findNodeHandle\n }\n this.update(UNRESOLVED_REFS_RETRY_LIMIT);\n }\n\n componentWillUnmount() {\n this.inspectorToggleListener?.remove();\n this.isMountedRef.current = false;\n if (Platform.OS !== 'web') {\n unregisterOldGestureHandler(this.handlerTag);\n }\n RNGestureHandlerModule.dropGestureHandler(this.handlerTag);\n scheduleFlushOperations();\n // We can't use this.props.id directly due to TS generic type narrowing bug, see https://github.com/microsoft/TypeScript/issues/13995 for more context\n const handlerID: string | undefined = this.props.id;\n if (handlerID) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete handlerIDToTag[handlerID];\n }\n\n MountRegistry.gestureHandlerWillUnmount(this);\n }\n\n private onGestureHandlerEvent = (event: GestureEvent<U>) => {\n if (event.nativeEvent.handlerTag === this.handlerTag) {\n if (typeof this.props.onGestureEvent === 'function') {\n this.props.onGestureEvent?.(event);\n }\n } else {\n this.props.onGestureHandlerEvent?.(event);\n }\n };\n\n // TODO(TS) - make sure this is right type for event\n private onGestureHandlerStateChange = (\n event: HandlerStateChangeEvent<U>\n ) => {\n if (event.nativeEvent.handlerTag === this.handlerTag) {\n if (typeof this.props.onHandlerStateChange === 'function') {\n this.props.onHandlerStateChange?.(event);\n }\n\n const state: ValueOf<typeof State> = event.nativeEvent.state;\n const stateEventName = stateToPropMappings[state];\n const eventHandler = stateEventName && this.props[stateEventName];\n if (eventHandler && typeof eventHandler === 'function') {\n eventHandler(event);\n }\n } else {\n this.props.onGestureHandlerStateChange?.(event);\n }\n };\n\n private refHandler = (node: any) => {\n this.viewNode = node;\n\n const child = React.Children.only(this.props.children);\n // @ts-ignore Since React 19 ref is accessible as standard prop\n // https://react.dev/blog/2024/04/25/react-19-upgrade-guide#deprecated-element-ref\n const ref = isReact19() ? (child as ReactElement).props?.ref : child?.ref;\n\n if (!ref) {\n return;\n }\n\n if (typeof ref === 'function') {\n ref(node);\n } else {\n ref.current = node;\n }\n };\n\n private createGestureHandler = (\n newConfig: Readonly<Record<string, unknown>>\n ) => {\n this.config = newConfig;\n\n RNGestureHandlerModule.createGestureHandler(\n name,\n this.handlerTag,\n newConfig\n );\n };\n\n private attachGestureHandler = (newViewTag: number) => {\n this.viewTag = newViewTag;\n\n if (Platform.OS === 'web') {\n // Typecast due to dynamic resolution, attachGestureHandler should have web version signature in this branch\n (\n RNGestureHandlerModule.attachGestureHandler as AttachGestureHandlerWeb\n )(\n this.handlerTag,\n newViewTag,\n ActionType.JS_FUNCTION_OLD_API, // ignored on web\n this.propsRef\n );\n } else {\n registerOldGestureHandler(this.handlerTag, {\n onGestureEvent: this.onGestureHandlerEvent,\n onGestureStateChange: this.onGestureHandlerStateChange,\n });\n\n const actionType = (() => {\n const onGestureEvent = this.props?.onGestureEvent;\n const isGestureHandlerWorklet =\n onGestureEvent &&\n ('current' in onGestureEvent ||\n 'workletEventHandler' in onGestureEvent);\n const onHandlerStateChange = this.props?.onHandlerStateChange;\n const isStateChangeHandlerWorklet =\n onHandlerStateChange &&\n ('current' in onHandlerStateChange ||\n 'workletEventHandler' in onHandlerStateChange);\n const isReanimatedHandler =\n isGestureHandlerWorklet || isStateChangeHandlerWorklet;\n if (isReanimatedHandler) {\n // Reanimated worklet\n return ActionType.REANIMATED_WORKLET;\n } else if (onGestureEvent && '__isNative' in onGestureEvent) {\n // Animated.event with useNativeDriver: true\n return ActionType.NATIVE_ANIMATED_EVENT;\n } else {\n // JS callback or Animated.event with useNativeDriver: false\n return ActionType.JS_FUNCTION_OLD_API;\n }\n })();\n\n RNGestureHandlerModule.attachGestureHandler(\n this.handlerTag,\n newViewTag,\n actionType\n );\n }\n\n scheduleFlushOperations();\n\n ghQueueMicrotask(() => {\n MountRegistry.gestureHandlerWillMount(this);\n });\n };\n\n private updateGestureHandler = (\n newConfig: Readonly<Record<string, unknown>>\n ) => {\n this.config = newConfig;\n\n RNGestureHandlerModule.updateGestureHandler(this.handlerTag, newConfig);\n scheduleFlushOperations();\n };\n\n private update(remainingTries: number) {\n if (!this.isMountedRef.current) {\n return;\n }\n\n const props: HandlerProps<U> = this.props;\n\n // When ref is set via a function i.e. `ref={(r) => refObject.current = r}` instead of\n // `ref={refObject}` it's possible that it won't be resolved in time. Seems like trying\n // again is easy enough fix.\n if (hasUnresolvedRefs(props) && remainingTries > 0) {\n ghQueueMicrotask(() => {\n this.update(remainingTries - 1);\n });\n } else {\n const newConfig = filterConfig(\n transformProps ? transformProps(this.props) : this.props,\n [...allowedProps, ...customNativeProps],\n config\n );\n if (!deepEqual(this.config, newConfig)) {\n this.updateGestureHandler(newConfig);\n }\n }\n }\n\n setNativeProps(updates: any) {\n const mergedProps = { ...this.props, ...updates };\n const newConfig = filterConfig(\n transformProps ? transformProps(mergedProps) : mergedProps,\n [...allowedProps, ...customNativeProps],\n config\n );\n this.updateGestureHandler(newConfig);\n }\n\n render() {\n if (__DEV__ && !this.context && !isTestEnv() && Platform.OS !== 'web') {\n throw new Error(\n name +\n ' must be used as a descendant of GestureHandlerRootView. Otherwise the gestures will not be recognized. See https://docs.swmansion.com/react-native-gesture-handler/docs/installation for more details.'\n );\n }\n\n let gestureEventHandler = this.onGestureHandlerEvent;\n // Another instance of https://github.com/microsoft/TypeScript/issues/13995\n type OnGestureEventHandlers = {\n onGestureEvent?: BaseGestureHandlerProps<U>['onGestureEvent'];\n onGestureHandlerEvent?: InternalEventHandlers['onGestureHandlerEvent'];\n };\n const { onGestureEvent, onGestureHandlerEvent }: OnGestureEventHandlers =\n this.props;\n if (onGestureEvent && typeof onGestureEvent !== 'function') {\n // If it's not a method it should be an native Animated.event\n // object. We set it directly as the handler for the view\n // In this case nested handlers are not going to be supported\n if (onGestureHandlerEvent) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n gestureEventHandler = onGestureEvent;\n } else {\n if (\n onGestureHandlerEvent &&\n typeof onGestureHandlerEvent !== 'function'\n ) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n }\n\n let gestureStateEventHandler = this.onGestureHandlerStateChange;\n // Another instance of https://github.com/microsoft/TypeScript/issues/13995\n type OnGestureStateChangeHandlers = {\n onHandlerStateChange?: BaseGestureHandlerProps<U>['onHandlerStateChange'];\n onGestureHandlerStateChange?: InternalEventHandlers['onGestureHandlerStateChange'];\n };\n const {\n onHandlerStateChange,\n onGestureHandlerStateChange,\n }: OnGestureStateChangeHandlers = this.props;\n if (onHandlerStateChange && typeof onHandlerStateChange !== 'function') {\n // If it's not a method it should be an native Animated.event\n // object. We set it directly as the handler for the view\n // In this case nested handlers are not going to be supported\n if (onGestureHandlerStateChange) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n gestureStateEventHandler = onHandlerStateChange;\n } else {\n if (\n onGestureHandlerStateChange &&\n typeof onGestureHandlerStateChange !== 'function'\n ) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n }\n const events = {\n onGestureHandlerEvent: this.state.allowTouches\n ? gestureEventHandler\n : undefined,\n onGestureHandlerStateChange: this.state.allowTouches\n ? gestureStateEventHandler\n : undefined,\n };\n\n this.propsRef.current = events;\n\n let child: any = null;\n try {\n child = React.Children.only(this.props.children);\n } catch (e) {\n throw new Error(\n tagMessage(\n `${name} got more than one view as a child. If you want the gesture to work on multiple views, wrap them with a common parent and attach the gesture to that view.`\n )\n );\n }\n\n let grandChildren = child.props.children;\n if (\n __DEV__ &&\n child.type &&\n (child.type === 'RNGestureHandlerButton' ||\n child.type.name === 'View' ||\n child.type.displayName === 'View')\n ) {\n grandChildren = React.Children.toArray(grandChildren);\n grandChildren.push(\n <PressabilityDebugView\n key=\"pressabilityDebugView\"\n color=\"mediumspringgreen\"\n hitSlop={child.props.hitSlop}\n />\n );\n }\n\n return React.cloneElement(\n child,\n {\n ref: this.refHandler,\n collapsable: false,\n ...(isTestEnv()\n ? {\n handlerType: name,\n handlerTag: this.handlerTag,\n enabled: this.props.enabled,\n }\n : {}),\n testID: this.props.testID ?? child.props.testID,\n ...events,\n },\n grandChildren\n );\n }\n }\n return Handler;\n}\n"]}
1
+ {"version":3,"sources":["createHandler.tsx"],"names":["React","Platform","UIManager","DeviceEventEmitter","customDirectEventTypes","RNGestureHandlerModule","State","handlerIDToTag","registerOldGestureHandler","unregisterOldGestureHandler","getNextHandlerTag","filterConfig","scheduleFlushOperations","findNodeHandle","deepEqual","isFabric","isReact19","isTestEnv","tagMessage","ActionType","PressabilityDebugView","GestureHandlerRootViewContext","ghQueueMicrotask","MountRegistry","UIManagerAny","topGestureHandlerEvent","registrationName","customGHEventsConfigFabricAndroid","topOnGestureHandlerEvent","topOnGestureHandlerStateChange","customGHEventsConfig","onGestureHandlerEvent","onGestureHandlerStateChange","OS","genericDirectEventTypes","UIManagerConstants","getViewManagerConfig","setJSResponder","oldSetJSResponder","clearJSResponder","oldClearJSResponder","tag","blockNativeResponder","handleSetJSResponder","handleClearJSResponder","allowTouches","DEV_ON_ANDROID","__DEV__","addListener","hasUnresolvedRefs","props","extract","refs","Array","isArray","current","some","r","stateToPropMappings","UNDETERMINED","undefined","BEGAN","FAILED","CANCELLED","ACTIVE","END","UNRESOLVED_REFS_RETRY_LIMIT","createHandler","name","allowedProps","config","transformProps","customNativeProps","Handler","Component","constructor","event","nativeEvent","handlerTag","onGestureEvent","onHandlerStateChange","state","stateEventName","eventHandler","node","viewNode","child","Children","only","children","ref","newConfig","createGestureHandler","newViewTag","viewTag","attachGestureHandler","JS_FUNCTION_OLD_API","propsRef","onGestureStateChange","actionType","isGestureHandlerWorklet","isStateChangeHandlerWorklet","isReanimatedHandler","REANIMATED_WORKLET","NATIVE_ANIMATED_EVENT","gestureHandlerWillMount","updateGestureHandler","createRef","isMountedRef","id","Error","componentDidMount","inspectorToggleListener","setState","_","update","displayName","componentDidUpdate","componentWillUnmount","remove","dropGestureHandler","handlerID","gestureHandlerWillUnmount","remainingTries","setNativeProps","updates","mergedProps","render","context","gestureEventHandler","gestureStateEventHandler","events","e","grandChildren","type","toArray","push","hitSlop","cloneElement","refHandler","collapsable","handlerType","enabled","testID"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport {\n Platform,\n UIManager,\n DeviceEventEmitter,\n EmitterSubscription,\n} from 'react-native';\nimport { customDirectEventTypes } from './customDirectEventTypes';\nimport RNGestureHandlerModule from '../RNGestureHandlerModule';\nimport { State } from '../State';\nimport {\n handlerIDToTag,\n registerOldGestureHandler,\n unregisterOldGestureHandler,\n} from './handlersRegistry';\nimport { getNextHandlerTag } from './getNextHandlerTag';\n\nimport {\n BaseGestureHandlerProps,\n GestureEvent,\n HandlerStateChangeEvent,\n} from './gestureHandlerCommon';\nimport { filterConfig, scheduleFlushOperations } from './utils';\nimport findNodeHandle from '../findNodeHandle';\nimport { ValueOf } from '../typeUtils';\nimport {\n deepEqual,\n isFabric,\n isReact19,\n isTestEnv,\n tagMessage,\n} from '../utils';\nimport { ActionType } from '../ActionType';\nimport { PressabilityDebugView } from './PressabilityDebugView';\nimport GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';\nimport { ghQueueMicrotask } from '../ghQueueMicrotask';\nimport { MountRegistry } from '../mountRegistry';\nimport { ReactElement } from 'react';\n\nconst UIManagerAny = UIManager as any;\n\ncustomDirectEventTypes.topGestureHandlerEvent = {\n registrationName: 'onGestureHandlerEvent',\n};\n\nconst customGHEventsConfigFabricAndroid = {\n topOnGestureHandlerEvent: { registrationName: 'onGestureHandlerEvent' },\n topOnGestureHandlerStateChange: {\n registrationName: 'onGestureHandlerStateChange',\n },\n};\n\nconst customGHEventsConfig = {\n onGestureHandlerEvent: { registrationName: 'onGestureHandlerEvent' },\n onGestureHandlerStateChange: {\n registrationName: 'onGestureHandlerStateChange',\n },\n\n // When using React Native Gesture Handler for Animated.event with useNativeDriver: true\n // on Android with Fabric enabled, the native part still sends the native events to JS\n // but prefixed with \"top\". We cannot simply rename the events above so they are prefixed\n // with \"top\" instead of \"on\" because in such case Animated.events would not be registered.\n // That's why we need to register another pair of event names.\n // The incoming events will be queued but never handled.\n // Without this piece of code below, you'll get the following JS error:\n // Unsupported top level event type \"topOnGestureHandlerEvent\" dispatched\n ...(isFabric() &&\n Platform.OS === 'android' &&\n customGHEventsConfigFabricAndroid),\n};\n\n// Add gesture specific events to genericDirectEventTypes object exported from UIManager\n// native module.\n// Once new event types are registered with react it is possible to dispatch these\n// events to all kind of native views.\nUIManagerAny.genericDirectEventTypes = {\n ...UIManagerAny.genericDirectEventTypes,\n ...customGHEventsConfig,\n};\n\nconst UIManagerConstants = UIManagerAny.getViewManagerConfig?.('getConstants');\n\nif (UIManagerConstants) {\n UIManagerConstants.genericDirectEventTypes = {\n ...UIManagerConstants.genericDirectEventTypes,\n ...customGHEventsConfig,\n };\n}\n\n// Wrap JS responder calls and notify gesture handler manager\nconst {\n setJSResponder: oldSetJSResponder = () => {\n // no-op\n },\n clearJSResponder: oldClearJSResponder = () => {\n // no-op\n },\n} = UIManagerAny;\nUIManagerAny.setJSResponder = (tag: number, blockNativeResponder: boolean) => {\n RNGestureHandlerModule.handleSetJSResponder(tag, blockNativeResponder);\n oldSetJSResponder(tag, blockNativeResponder);\n};\nUIManagerAny.clearJSResponder = () => {\n RNGestureHandlerModule.handleClearJSResponder();\n oldClearJSResponder();\n};\n\nlet allowTouches = true;\nconst DEV_ON_ANDROID = __DEV__ && Platform.OS === 'android';\n// Toggled inspector blocks touch events in order to allow inspecting on Android\n// This needs to be a global variable in order to set initial state for `allowTouches` property in Handler component\nif (DEV_ON_ANDROID) {\n DeviceEventEmitter.addListener('toggleElementInspector', () => {\n allowTouches = !allowTouches;\n });\n}\n\ntype HandlerProps<T extends Record<string, unknown>> = Readonly<\n React.PropsWithChildren<BaseGestureHandlerProps<T>>\n>;\nfunction hasUnresolvedRefs<T extends Record<string, unknown>>(\n props: HandlerProps<T>\n) {\n // TODO(TS) - add type for extract arg\n const extract = (refs: any | any[]) => {\n if (!Array.isArray(refs)) {\n return refs && refs.current === null;\n }\n return refs.some((r) => r && r.current === null);\n };\n return extract(props['simultaneousHandlers']) || extract(props['waitFor']);\n}\n\nconst stateToPropMappings = {\n [State.UNDETERMINED]: undefined,\n [State.BEGAN]: 'onBegan',\n [State.FAILED]: 'onFailed',\n [State.CANCELLED]: 'onCancelled',\n [State.ACTIVE]: 'onActivated',\n [State.END]: 'onEnded',\n} as const;\n\ntype CreateHandlerArgs<HandlerPropsT extends Record<string, unknown>> =\n Readonly<{\n name: string;\n allowedProps: Readonly<Extract<keyof HandlerPropsT, string>[]>;\n config: Readonly<Record<string, unknown>>;\n transformProps?: (props: HandlerPropsT) => HandlerPropsT;\n customNativeProps?: Readonly<string[]>;\n }>;\n\n// TODO(TS) fix event types\ntype InternalEventHandlers = {\n onGestureHandlerEvent?: (event: any) => void;\n onGestureHandlerStateChange?: (event: any) => void;\n};\n\ntype AttachGestureHandlerWeb = (\n handlerTag: number,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newView: any,\n _actionType: ActionType,\n propsRef: React.RefObject<unknown>\n) => void;\n\nconst UNRESOLVED_REFS_RETRY_LIMIT = 1;\n\n// TODO(TS) - make sure that BaseGestureHandlerProps doesn't need other generic parameter to work with custom properties.\nexport default function createHandler<\n T extends BaseGestureHandlerProps<U>,\n U extends Record<string, unknown>,\n>({\n name,\n allowedProps = [],\n config = {},\n transformProps,\n customNativeProps = [],\n}: CreateHandlerArgs<T>): React.ComponentType<T & React.RefAttributes<any>> {\n interface HandlerState {\n allowTouches: boolean;\n }\n class Handler extends React.Component<\n T & InternalEventHandlers,\n HandlerState\n > {\n static displayName = name;\n static contextType = GestureHandlerRootViewContext;\n\n private handlerTag = -1;\n private config: Record<string, unknown>;\n private propsRef: React.MutableRefObject<unknown>;\n private isMountedRef: React.MutableRefObject<boolean | null>;\n private viewNode: any;\n private viewTag?: number;\n private inspectorToggleListener?: EmitterSubscription;\n\n constructor(props: T & InternalEventHandlers) {\n super(props);\n this.config = {};\n this.propsRef = React.createRef();\n this.isMountedRef = React.createRef();\n this.state = { allowTouches };\n if (props.id) {\n if (handlerIDToTag[props.id] !== undefined) {\n throw new Error(`Handler with ID \"${props.id}\" already registered`);\n }\n handlerIDToTag[props.id] = this.handlerTag;\n }\n }\n\n componentDidMount() {\n const props: HandlerProps<U> = this.props;\n this.isMountedRef.current = true;\n\n if (DEV_ON_ANDROID) {\n this.inspectorToggleListener = DeviceEventEmitter.addListener(\n 'toggleElementInspector',\n () => {\n this.setState((_) => ({ allowTouches }));\n this.update(UNRESOLVED_REFS_RETRY_LIMIT);\n }\n );\n }\n if (hasUnresolvedRefs(props)) {\n // If there are unresolved refs (e.g. \".current\" has not yet been set)\n // passed as `simultaneousHandlers` or `waitFor`, we enqueue a call to\n // _update method that will try to update native handler props using\n // queueMicrotask. This makes it so update() function gets called after all\n // react components are mounted and we expect the missing ref object to\n // be resolved by then.\n ghQueueMicrotask(() => {\n this.update(UNRESOLVED_REFS_RETRY_LIMIT);\n });\n }\n\n this.createGestureHandler(\n filterConfig(\n transformProps ? transformProps(this.props) : this.props,\n [...allowedProps, ...customNativeProps],\n config\n )\n );\n\n if (!this.viewNode) {\n throw new Error(\n `[Gesture Handler] Failed to obtain view for ${Handler.displayName}. Note that old API doesn't support functional components.`\n );\n }\n\n this.attachGestureHandler(findNodeHandle(this.viewNode) as number); // TODO(TS) - check if this can be null\n }\n\n componentDidUpdate() {\n const viewTag = findNodeHandle(this.viewNode);\n if (this.viewTag !== viewTag) {\n this.attachGestureHandler(viewTag as number); // TODO(TS) - check interaction between _viewTag & findNodeHandle\n }\n this.update(UNRESOLVED_REFS_RETRY_LIMIT);\n }\n\n componentWillUnmount() {\n this.inspectorToggleListener?.remove();\n this.isMountedRef.current = false;\n if (Platform.OS !== 'web') {\n unregisterOldGestureHandler(this.handlerTag);\n }\n RNGestureHandlerModule.dropGestureHandler(this.handlerTag);\n scheduleFlushOperations();\n // We can't use this.props.id directly due to TS generic type narrowing bug, see https://github.com/microsoft/TypeScript/issues/13995 for more context\n const handlerID: string | undefined = this.props.id;\n if (handlerID) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete handlerIDToTag[handlerID];\n }\n\n MountRegistry.gestureHandlerWillUnmount(this);\n }\n\n private onGestureHandlerEvent = (event: GestureEvent<U>) => {\n if (event.nativeEvent.handlerTag === this.handlerTag) {\n if (typeof this.props.onGestureEvent === 'function') {\n this.props.onGestureEvent?.(event);\n }\n } else {\n this.props.onGestureHandlerEvent?.(event);\n }\n };\n\n // TODO(TS) - make sure this is right type for event\n private onGestureHandlerStateChange = (\n event: HandlerStateChangeEvent<U>\n ) => {\n if (event.nativeEvent.handlerTag === this.handlerTag) {\n if (typeof this.props.onHandlerStateChange === 'function') {\n this.props.onHandlerStateChange?.(event);\n }\n\n const state: ValueOf<typeof State> = event.nativeEvent.state;\n const stateEventName = stateToPropMappings[state];\n const eventHandler = stateEventName && this.props[stateEventName];\n if (eventHandler && typeof eventHandler === 'function') {\n eventHandler(event);\n }\n } else {\n this.props.onGestureHandlerStateChange?.(event);\n }\n };\n\n private refHandler = (node: any) => {\n this.viewNode = node;\n\n const child = React.Children.only(this.props.children);\n // @ts-ignore Since React 19 ref is accessible as standard prop\n // https://react.dev/blog/2024/04/25/react-19-upgrade-guide#deprecated-element-ref\n const ref = isReact19() ? (child as ReactElement).props?.ref : child?.ref;\n\n if (!ref) {\n return;\n }\n\n if (typeof ref === 'function') {\n ref(node);\n } else {\n ref.current = node;\n }\n };\n\n private createGestureHandler = (\n newConfig: Readonly<Record<string, unknown>>\n ) => {\n this.handlerTag = getNextHandlerTag();\n this.config = newConfig;\n\n RNGestureHandlerModule.createGestureHandler(\n name,\n this.handlerTag,\n newConfig\n );\n };\n\n private attachGestureHandler = (newViewTag: number) => {\n this.viewTag = newViewTag;\n\n if (Platform.OS === 'web') {\n // Typecast due to dynamic resolution, attachGestureHandler should have web version signature in this branch\n (\n RNGestureHandlerModule.attachGestureHandler as AttachGestureHandlerWeb\n )(\n this.handlerTag,\n newViewTag,\n ActionType.JS_FUNCTION_OLD_API, // ignored on web\n this.propsRef\n );\n } else {\n registerOldGestureHandler(this.handlerTag, {\n onGestureEvent: this.onGestureHandlerEvent,\n onGestureStateChange: this.onGestureHandlerStateChange,\n });\n\n const actionType = (() => {\n const onGestureEvent = this.props?.onGestureEvent;\n const isGestureHandlerWorklet =\n onGestureEvent &&\n ('current' in onGestureEvent ||\n 'workletEventHandler' in onGestureEvent);\n const onHandlerStateChange = this.props?.onHandlerStateChange;\n const isStateChangeHandlerWorklet =\n onHandlerStateChange &&\n ('current' in onHandlerStateChange ||\n 'workletEventHandler' in onHandlerStateChange);\n const isReanimatedHandler =\n isGestureHandlerWorklet || isStateChangeHandlerWorklet;\n if (isReanimatedHandler) {\n // Reanimated worklet\n return ActionType.REANIMATED_WORKLET;\n } else if (onGestureEvent && '__isNative' in onGestureEvent) {\n // Animated.event with useNativeDriver: true\n return ActionType.NATIVE_ANIMATED_EVENT;\n } else {\n // JS callback or Animated.event with useNativeDriver: false\n return ActionType.JS_FUNCTION_OLD_API;\n }\n })();\n\n RNGestureHandlerModule.attachGestureHandler(\n this.handlerTag,\n newViewTag,\n actionType\n );\n }\n\n scheduleFlushOperations();\n\n ghQueueMicrotask(() => {\n MountRegistry.gestureHandlerWillMount(this);\n });\n };\n\n private updateGestureHandler = (\n newConfig: Readonly<Record<string, unknown>>\n ) => {\n this.config = newConfig;\n\n RNGestureHandlerModule.updateGestureHandler(this.handlerTag, newConfig);\n scheduleFlushOperations();\n };\n\n private update(remainingTries: number) {\n if (!this.isMountedRef.current) {\n return;\n }\n\n const props: HandlerProps<U> = this.props;\n\n // When ref is set via a function i.e. `ref={(r) => refObject.current = r}` instead of\n // `ref={refObject}` it's possible that it won't be resolved in time. Seems like trying\n // again is easy enough fix.\n if (hasUnresolvedRefs(props) && remainingTries > 0) {\n ghQueueMicrotask(() => {\n this.update(remainingTries - 1);\n });\n } else {\n const newConfig = filterConfig(\n transformProps ? transformProps(this.props) : this.props,\n [...allowedProps, ...customNativeProps],\n config\n );\n if (!deepEqual(this.config, newConfig)) {\n this.updateGestureHandler(newConfig);\n }\n }\n }\n\n setNativeProps(updates: any) {\n const mergedProps = { ...this.props, ...updates };\n const newConfig = filterConfig(\n transformProps ? transformProps(mergedProps) : mergedProps,\n [...allowedProps, ...customNativeProps],\n config\n );\n this.updateGestureHandler(newConfig);\n }\n\n render() {\n if (__DEV__ && !this.context && !isTestEnv() && Platform.OS !== 'web') {\n throw new Error(\n name +\n ' must be used as a descendant of GestureHandlerRootView. Otherwise the gestures will not be recognized. See https://docs.swmansion.com/react-native-gesture-handler/docs/installation for more details.'\n );\n }\n\n let gestureEventHandler = this.onGestureHandlerEvent;\n // Another instance of https://github.com/microsoft/TypeScript/issues/13995\n type OnGestureEventHandlers = {\n onGestureEvent?: BaseGestureHandlerProps<U>['onGestureEvent'];\n onGestureHandlerEvent?: InternalEventHandlers['onGestureHandlerEvent'];\n };\n const { onGestureEvent, onGestureHandlerEvent }: OnGestureEventHandlers =\n this.props;\n if (onGestureEvent && typeof onGestureEvent !== 'function') {\n // If it's not a method it should be an native Animated.event\n // object. We set it directly as the handler for the view\n // In this case nested handlers are not going to be supported\n if (onGestureHandlerEvent) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n gestureEventHandler = onGestureEvent;\n } else {\n if (\n onGestureHandlerEvent &&\n typeof onGestureHandlerEvent !== 'function'\n ) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n }\n\n let gestureStateEventHandler = this.onGestureHandlerStateChange;\n // Another instance of https://github.com/microsoft/TypeScript/issues/13995\n type OnGestureStateChangeHandlers = {\n onHandlerStateChange?: BaseGestureHandlerProps<U>['onHandlerStateChange'];\n onGestureHandlerStateChange?: InternalEventHandlers['onGestureHandlerStateChange'];\n };\n const {\n onHandlerStateChange,\n onGestureHandlerStateChange,\n }: OnGestureStateChangeHandlers = this.props;\n if (onHandlerStateChange && typeof onHandlerStateChange !== 'function') {\n // If it's not a method it should be an native Animated.event\n // object. We set it directly as the handler for the view\n // In this case nested handlers are not going to be supported\n if (onGestureHandlerStateChange) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n gestureStateEventHandler = onHandlerStateChange;\n } else {\n if (\n onGestureHandlerStateChange &&\n typeof onGestureHandlerStateChange !== 'function'\n ) {\n throw new Error(\n 'Nesting touch handlers with native animated driver is not supported yet'\n );\n }\n }\n const events = {\n onGestureHandlerEvent: this.state.allowTouches\n ? gestureEventHandler\n : undefined,\n onGestureHandlerStateChange: this.state.allowTouches\n ? gestureStateEventHandler\n : undefined,\n };\n\n this.propsRef.current = events;\n\n let child: any = null;\n try {\n child = React.Children.only(this.props.children);\n } catch (e) {\n throw new Error(\n tagMessage(\n `${name} got more than one view as a child. If you want the gesture to work on multiple views, wrap them with a common parent and attach the gesture to that view.`\n )\n );\n }\n\n let grandChildren = child.props.children;\n if (\n __DEV__ &&\n child.type &&\n (child.type === 'RNGestureHandlerButton' ||\n child.type.name === 'View' ||\n child.type.displayName === 'View')\n ) {\n grandChildren = React.Children.toArray(grandChildren);\n grandChildren.push(\n <PressabilityDebugView\n key=\"pressabilityDebugView\"\n color=\"mediumspringgreen\"\n hitSlop={child.props.hitSlop}\n />\n );\n }\n\n return React.cloneElement(\n child,\n {\n ref: this.refHandler,\n collapsable: false,\n ...(isTestEnv()\n ? {\n handlerType: name,\n handlerTag: this.handlerTag,\n enabled: this.props.enabled,\n }\n : {}),\n testID: this.props.testID ?? child.props.testID,\n ...events,\n },\n grandChildren\n );\n }\n }\n return Handler;\n}\n"]}
@@ -15,21 +15,28 @@ export function updateHandlers(preparedGesture, gestureConfig, newGestures) {
15
15
  newGestures[i].handlerTag = handler.handlerTag;
16
16
  newGestures[i].handlers.handlerTag = handler.handlerTag;
17
17
  }
18
- } // Use queueMicrotask to extract handlerTags, because when it's ran, all refs should be updated
18
+ } // Store attached gestures to avoid crash when gestures changed after queueing micro task
19
+
20
+
21
+ const attachedGestures = preparedGesture.attachedGestures; // Use queueMicrotask to extract handlerTags, because when it's ran, all refs should be updated
19
22
  // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait
20
23
  // in case of external relations)
21
24
 
22
-
23
25
  ghQueueMicrotask(() => {
24
26
  if (!preparedGesture.isMounted) {
25
27
  return;
28
+ } // Stop if attached gestures changed after queueing micro task
29
+
30
+
31
+ if (attachedGestures !== preparedGesture.attachedGestures) {
32
+ return;
26
33
  } // If amount of gesture configs changes, we need to update the callbacks in shared value
27
34
 
28
35
 
29
- let shouldUpdateSharedValueIfUsed = preparedGesture.attachedGestures.length !== newGestures.length;
36
+ let shouldUpdateSharedValueIfUsed = attachedGestures.length !== newGestures.length;
30
37
 
31
38
  for (let i = 0; i < newGestures.length; i++) {
32
- const handler = preparedGesture.attachedGestures[i]; // If the gestureId is different (gesture isn't wrapped with useMemo or its dependencies changed),
39
+ const handler = attachedGestures[i]; // If the gestureId is different (gesture isn't wrapped with useMemo or its dependencies changed),
33
40
  // we need to update the shared value, assuming the gesture runs on UI thread or the thread changed
34
41
 
35
42
  if (handler.handlers.gestureId !== newGestures[i].handlers.gestureId && (newGestures[i].shouldUseReanimated || handler.shouldUseReanimated)) {
@@ -43,7 +50,7 @@ export function updateHandlers(preparedGesture, gestureConfig, newGestures) {
43
50
  }
44
51
 
45
52
  if (preparedGesture.animatedHandlers && shouldUpdateSharedValueIfUsed) {
46
- const newHandlersValue = preparedGesture.attachedGestures.filter(g => g.shouldUseReanimated) // Ignore gestures that shouldn't run on UI
53
+ const newHandlersValue = attachedGestures.filter(g => g.shouldUseReanimated) // Ignore gestures that shouldn't run on UI
47
54
  .map(g => g.handlers);
48
55
  preparedGesture.animatedHandlers.value = newHandlersValue;
49
56
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["updateHandlers.ts"],"names":["registerHandler","RNGestureHandlerModule","filterConfig","scheduleFlushOperations","ghQueueMicrotask","extractGestureRelations","checkGestureCallbacksForWorklets","ALLOWED_PROPS","updateHandlers","preparedGesture","gestureConfig","newGestures","prepare","i","length","handler","attachedGestures","handlerTag","handlers","isMounted","shouldUpdateSharedValueIfUsed","gestureId","shouldUseReanimated","config","updateGestureHandler","testId","animatedHandlers","newHandlersValue","filter","g","map","value"],"mappings":"AACA,SAASA,eAAT,QAAgC,wBAAhC;AACA,OAAOC,sBAAP,MAAmC,iCAAnC;AACA,SAASC,YAAT,EAAuBC,uBAAvB,QAAsD,aAAtD;AAEA,SAASC,gBAAT,QAAiC,2BAAjC;AAEA,SACEC,uBADF,EAEEC,gCAFF,EAGEC,aAHF,QAIO,SAJP;AAMA,OAAO,SAASC,cAAT,CACLC,eADK,EAELC,aAFK,EAGLC,WAHK,EAIL;AACAD,EAAAA,aAAa,CAACE,OAAd;;AAEA,OAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,WAAW,CAACG,MAAhC,EAAwCD,CAAC,EAAzC,EAA6C;AAC3C,UAAME,OAAO,GAAGN,eAAe,CAACO,gBAAhB,CAAiCH,CAAjC,CAAhB;AACAP,IAAAA,gCAAgC,CAACS,OAAD,CAAhC,CAF2C,CAI3C;AACA;;AACA,QAAIJ,WAAW,CAACE,CAAD,CAAX,CAAeI,UAAf,KAA8BF,OAAO,CAACE,UAA1C,EAAsD;AACpDN,MAAAA,WAAW,CAACE,CAAD,CAAX,CAAeI,UAAf,GAA4BF,OAAO,CAACE,UAApC;AACAN,MAAAA,WAAW,CAACE,CAAD,CAAX,CAAeK,QAAf,CAAwBD,UAAxB,GAAqCF,OAAO,CAACE,UAA7C;AACD;AACF,GAbD,CAeA;AACA;AACA;;;AACAb,EAAAA,gBAAgB,CAAC,MAAM;AACrB,QAAI,CAACK,eAAe,CAACU,SAArB,EAAgC;AAC9B;AACD,KAHoB,CAKrB;;;AACA,QAAIC,6BAA6B,GAC/BX,eAAe,CAACO,gBAAhB,CAAiCF,MAAjC,KAA4CH,WAAW,CAACG,MAD1D;;AAGA,SAAK,IAAID,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,WAAW,CAACG,MAAhC,EAAwCD,CAAC,EAAzC,EAA6C;AAC3C,YAAME,OAAO,GAAGN,eAAe,CAACO,gBAAhB,CAAiCH,CAAjC,CAAhB,CAD2C,CAG3C;AACA;;AACA,UACEE,OAAO,CAACG,QAAR,CAAiBG,SAAjB,KAA+BV,WAAW,CAACE,CAAD,CAAX,CAAeK,QAAf,CAAwBG,SAAvD,KACCV,WAAW,CAACE,CAAD,CAAX,CAAeS,mBAAf,IAAsCP,OAAO,CAACO,mBAD/C,CADF,EAGE;AACAF,QAAAA,6BAA6B,GAAG,IAAhC;AACD;;AAEDL,MAAAA,OAAO,CAACQ,MAAR,GAAiBZ,WAAW,CAACE,CAAD,CAAX,CAAeU,MAAhC;AACAR,MAAAA,OAAO,CAACG,QAAR,GAAmBP,WAAW,CAACE,CAAD,CAAX,CAAeK,QAAlC;AAEAjB,MAAAA,sBAAsB,CAACuB,oBAAvB,CACET,OAAO,CAACE,UADV,EAEEf,YAAY,CACVa,OAAO,CAACQ,MADE,EAEVhB,aAFU,EAGVF,uBAAuB,CAACU,OAAD,CAHb,CAFd;AASAf,MAAAA,eAAe,CAACe,OAAO,CAACE,UAAT,EAAqBF,OAArB,EAA8BA,OAAO,CAACQ,MAAR,CAAeE,MAA7C,CAAf;AACD;;AAED,QAAIhB,eAAe,CAACiB,gBAAhB,IAAoCN,6BAAxC,EAAuE;AACrE,YAAMO,gBAAgB,GAAGlB,eAAe,CAACO,gBAAhB,CACtBY,MADsB,CACdC,CAAD,IAAOA,CAAC,CAACP,mBADM,EACe;AADf,OAEtBQ,GAFsB,CAEjBD,CAAD,IAAOA,CAAC,CAACX,QAFS,CAAzB;AAMAT,MAAAA,eAAe,CAACiB,gBAAhB,CAAiCK,KAAjC,GAAyCJ,gBAAzC;AACD;;AAEDxB,IAAAA,uBAAuB;AACxB,GA/Ce,CAAhB;AAgDD","sourcesContent":["import { GestureType, HandlerCallbacks } from '../gesture';\nimport { registerHandler } from '../../handlersRegistry';\nimport RNGestureHandlerModule from '../../../RNGestureHandlerModule';\nimport { filterConfig, scheduleFlushOperations } from '../../utils';\nimport { ComposedGesture } from '../gestureComposition';\nimport { ghQueueMicrotask } from '../../../ghQueueMicrotask';\nimport { AttachedGestureState } from './types';\nimport {\n extractGestureRelations,\n checkGestureCallbacksForWorklets,\n ALLOWED_PROPS,\n} from './utils';\n\nexport function updateHandlers(\n preparedGesture: AttachedGestureState,\n gestureConfig: ComposedGesture | GestureType,\n newGestures: GestureType[]\n) {\n gestureConfig.prepare();\n\n for (let i = 0; i < newGestures.length; i++) {\n const handler = preparedGesture.attachedGestures[i];\n checkGestureCallbacksForWorklets(handler);\n\n // Only update handlerTag when it's actually different, it may be the same\n // if gesture config object is wrapped with useMemo\n if (newGestures[i].handlerTag !== handler.handlerTag) {\n newGestures[i].handlerTag = handler.handlerTag;\n newGestures[i].handlers.handlerTag = handler.handlerTag;\n }\n }\n\n // Use queueMicrotask to extract handlerTags, because when it's ran, all refs should be updated\n // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait\n // in case of external relations)\n ghQueueMicrotask(() => {\n if (!preparedGesture.isMounted) {\n return;\n }\n\n // If amount of gesture configs changes, we need to update the callbacks in shared value\n let shouldUpdateSharedValueIfUsed =\n preparedGesture.attachedGestures.length !== newGestures.length;\n\n for (let i = 0; i < newGestures.length; i++) {\n const handler = preparedGesture.attachedGestures[i];\n\n // If the gestureId is different (gesture isn't wrapped with useMemo or its dependencies changed),\n // we need to update the shared value, assuming the gesture runs on UI thread or the thread changed\n if (\n handler.handlers.gestureId !== newGestures[i].handlers.gestureId &&\n (newGestures[i].shouldUseReanimated || handler.shouldUseReanimated)\n ) {\n shouldUpdateSharedValueIfUsed = true;\n }\n\n handler.config = newGestures[i].config;\n handler.handlers = newGestures[i].handlers;\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(\n handler.config,\n ALLOWED_PROPS,\n extractGestureRelations(handler)\n )\n );\n\n registerHandler(handler.handlerTag, handler, handler.config.testId);\n }\n\n if (preparedGesture.animatedHandlers && shouldUpdateSharedValueIfUsed) {\n const newHandlersValue = preparedGesture.attachedGestures\n .filter((g) => g.shouldUseReanimated) // Ignore gestures that shouldn't run on UI\n .map((g) => g.handlers) as unknown as HandlerCallbacks<\n Record<string, unknown>\n >[];\n\n preparedGesture.animatedHandlers.value = newHandlersValue;\n }\n\n scheduleFlushOperations();\n });\n}\n"]}
1
+ {"version":3,"sources":["updateHandlers.ts"],"names":["registerHandler","RNGestureHandlerModule","filterConfig","scheduleFlushOperations","ghQueueMicrotask","extractGestureRelations","checkGestureCallbacksForWorklets","ALLOWED_PROPS","updateHandlers","preparedGesture","gestureConfig","newGestures","prepare","i","length","handler","attachedGestures","handlerTag","handlers","isMounted","shouldUpdateSharedValueIfUsed","gestureId","shouldUseReanimated","config","updateGestureHandler","testId","animatedHandlers","newHandlersValue","filter","g","map","value"],"mappings":"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","sourcesContent":["import { GestureType, HandlerCallbacks } from '../gesture';\nimport { registerHandler } from '../../handlersRegistry';\nimport RNGestureHandlerModule from '../../../RNGestureHandlerModule';\nimport { filterConfig, scheduleFlushOperations } from '../../utils';\nimport { ComposedGesture } from '../gestureComposition';\nimport { ghQueueMicrotask } from '../../../ghQueueMicrotask';\nimport { AttachedGestureState } from './types';\nimport {\n extractGestureRelations,\n checkGestureCallbacksForWorklets,\n ALLOWED_PROPS,\n} from './utils';\n\nexport function updateHandlers(\n preparedGesture: AttachedGestureState,\n gestureConfig: ComposedGesture | GestureType,\n newGestures: GestureType[]\n) {\n gestureConfig.prepare();\n\n for (let i = 0; i < newGestures.length; i++) {\n const handler = preparedGesture.attachedGestures[i];\n checkGestureCallbacksForWorklets(handler);\n\n // Only update handlerTag when it's actually different, it may be the same\n // if gesture config object is wrapped with useMemo\n if (newGestures[i].handlerTag !== handler.handlerTag) {\n newGestures[i].handlerTag = handler.handlerTag;\n newGestures[i].handlers.handlerTag = handler.handlerTag;\n }\n }\n\n // Store attached gestures to avoid crash when gestures changed after queueing micro task\n const attachedGestures = preparedGesture.attachedGestures;\n\n // Use queueMicrotask to extract handlerTags, because when it's ran, all refs should be updated\n // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait\n // in case of external relations)\n ghQueueMicrotask(() => {\n if (!preparedGesture.isMounted) {\n return;\n }\n\n // Stop if attached gestures changed after queueing micro task\n if (attachedGestures !== preparedGesture.attachedGestures) {\n return;\n }\n\n // If amount of gesture configs changes, we need to update the callbacks in shared value\n let shouldUpdateSharedValueIfUsed =\n attachedGestures.length !== newGestures.length;\n\n for (let i = 0; i < newGestures.length; i++) {\n const handler = attachedGestures[i];\n\n // If the gestureId is different (gesture isn't wrapped with useMemo or its dependencies changed),\n // we need to update the shared value, assuming the gesture runs on UI thread or the thread changed\n if (\n handler.handlers.gestureId !== newGestures[i].handlers.gestureId &&\n (newGestures[i].shouldUseReanimated || handler.shouldUseReanimated)\n ) {\n shouldUpdateSharedValueIfUsed = true;\n }\n\n handler.config = newGestures[i].config;\n handler.handlers = newGestures[i].handlers;\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(\n handler.config,\n ALLOWED_PROPS,\n extractGestureRelations(handler)\n )\n );\n\n registerHandler(handler.handlerTag, handler, handler.config.testId);\n }\n\n if (preparedGesture.animatedHandlers && shouldUpdateSharedValueIfUsed) {\n const newHandlersValue = attachedGestures\n .filter((g) => g.shouldUseReanimated) // Ignore gestures that shouldn't run on UI\n .map((g) => g.handlers) as unknown as HandlerCallbacks<\n Record<string, unknown>\n >[];\n\n preparedGesture.animatedHandlers.value = newHandlersValue;\n }\n\n scheduleFlushOperations();\n });\n}\n"]}
@@ -10,7 +10,6 @@ import { hoverGestureHandlerProps } from '../hoverGesture';
10
10
  import { nativeViewGestureHandlerProps } from '../../NativeViewGestureHandler';
11
11
  import { baseGestureHandlerWithDetectorProps } from '../../gestureHandlerCommon';
12
12
  import { isNewWebImplementationEnabled } from '../../../EnableNewWebImplementation';
13
- import { getReactNativeVersion } from '../../../getReactNativeVersion';
14
13
  import { RNRenderer } from '../../../RNRenderer';
15
14
  import { useCallback, useRef, useState } from 'react';
16
15
  import { Reanimated } from '../reanimatedWrapper';
@@ -102,11 +101,9 @@ export function validateDetectorChildren(ref) {
102
101
  // / \
103
102
  // NativeView NativeView
104
103
  if (__DEV__ && Platform.OS !== 'web') {
105
- const REACT_NATIVE_VERSION = getReactNativeVersion(); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
106
-
107
- const wrapType = REACT_NATIVE_VERSION.minor > 63 || REACT_NATIVE_VERSION.major > 0 ? // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
108
- ref._reactInternals.elementType : // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
109
- ref._reactInternalFiber.elementType; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
104
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
105
+ const wrapType = // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
106
+ ref._reactInternals.elementType; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
110
107
 
111
108
  let instance = RNRenderer.findHostInstance_DEPRECATED(ref)._internalFiberInstanceHandleDEV; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
112
109
 
@@ -1 +1 @@
1
- {"version":3,"sources":["utils.ts"],"names":["Platform","isTestEnv","tagMessage","BaseGesture","flingGestureHandlerProps","forceTouchGestureHandlerProps","longPressGestureHandlerProps","panGestureHandlerProps","panGestureHandlerCustomNativeProps","tapGestureHandlerProps","hoverGestureHandlerProps","nativeViewGestureHandlerProps","baseGestureHandlerWithDetectorProps","isNewWebImplementationEnabled","getReactNativeVersion","RNRenderer","useCallback","useRef","useState","Reanimated","onGestureHandlerEvent","ALLOWED_PROPS","convertToHandlerTag","ref","handlerTag","current","extractValidHandlerTags","interactionGroup","map","filter","tag","extractGestureRelations","gesture","requireToFail","config","simultaneousWith","blocksHandlers","waitFor","simultaneousHandlers","checkGestureCallbacksForWorklets","__DEV__","runOnJS","areSomeNotWorklets","handlers","isWorklet","includes","areSomeWorklets","console","error","undefined","areAllNotWorklets","warn","validateDetectorChildren","OS","REACT_NATIVE_VERSION","wrapType","minor","major","_reactInternals","elementType","_reactInternalFiber","instance","findHostInstance_DEPRECATED","_internalFiberInstanceHandleDEV","sibling","Error","return","useForceRender","renderState","setRenderState","forceRender","useWebEventHandlers","e","nativeEvent","onGestureHandlerStateChange"],"mappings":"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","sourcesContent":["import { Platform } from 'react-native';\n\nimport { isTestEnv, tagMessage } from '../../../utils';\nimport { GestureRef, BaseGesture, GestureType } from '../gesture';\n\nimport { flingGestureHandlerProps } from '../../FlingGestureHandler';\nimport { forceTouchGestureHandlerProps } from '../../ForceTouchGestureHandler';\nimport { longPressGestureHandlerProps } from '../../LongPressGestureHandler';\nimport {\n panGestureHandlerProps,\n panGestureHandlerCustomNativeProps,\n} from '../../PanGestureHandler';\nimport { tapGestureHandlerProps } from '../../TapGestureHandler';\nimport { hoverGestureHandlerProps } from '../hoverGesture';\nimport { nativeViewGestureHandlerProps } from '../../NativeViewGestureHandler';\nimport {\n HandlerStateChangeEvent,\n baseGestureHandlerWithDetectorProps,\n} from '../../gestureHandlerCommon';\nimport { isNewWebImplementationEnabled } from '../../../EnableNewWebImplementation';\nimport { getReactNativeVersion } from '../../../getReactNativeVersion';\nimport { RNRenderer } from '../../../RNRenderer';\nimport { useCallback, useRef, useState } from 'react';\nimport { Reanimated } from '../reanimatedWrapper';\nimport { onGestureHandlerEvent } from '../eventReceiver';\nimport { WebEventHandler } from './types';\n\nexport const ALLOWED_PROPS = [\n ...baseGestureHandlerWithDetectorProps,\n ...tapGestureHandlerProps,\n ...panGestureHandlerProps,\n ...panGestureHandlerCustomNativeProps,\n ...longPressGestureHandlerProps,\n ...forceTouchGestureHandlerProps,\n ...flingGestureHandlerProps,\n ...hoverGestureHandlerProps,\n ...nativeViewGestureHandlerProps,\n];\n\nfunction convertToHandlerTag(ref: GestureRef): number {\n if (typeof ref === 'number') {\n return ref;\n } else if (ref instanceof BaseGesture) {\n return ref.handlerTag;\n } else {\n // @ts-ignore in this case it should be a ref either to gesture object or\n // a gesture handler component, in both cases handlerTag property exists\n return ref.current?.handlerTag ?? -1;\n }\n}\n\nfunction extractValidHandlerTags(interactionGroup: GestureRef[] | undefined) {\n return (\n interactionGroup?.map(convertToHandlerTag)?.filter((tag) => tag > 0) ?? []\n );\n}\n\nexport function extractGestureRelations(gesture: GestureType) {\n const requireToFail = extractValidHandlerTags(gesture.config.requireToFail);\n const simultaneousWith = extractValidHandlerTags(\n gesture.config.simultaneousWith\n );\n const blocksHandlers = extractValidHandlerTags(gesture.config.blocksHandlers);\n\n return {\n waitFor: requireToFail,\n simultaneousHandlers: simultaneousWith,\n blocksHandlers: blocksHandlers,\n };\n}\n\nexport function checkGestureCallbacksForWorklets(gesture: GestureType) {\n if (!__DEV__) {\n return;\n }\n // If a gesture is explicitly marked to run on the JS thread there is no need to check\n // if callbacks are worklets as the user is aware they will be ran on the JS thread\n if (gesture.config.runOnJS) {\n return;\n }\n\n const areSomeNotWorklets = gesture.handlers.isWorklet.includes(false);\n const areSomeWorklets = gesture.handlers.isWorklet.includes(true);\n\n // If some of the callbacks are worklets and some are not, and the gesture is not\n // explicitly marked with `.runOnJS(true)` show an error\n if (areSomeNotWorklets && areSomeWorklets) {\n console.error(\n tagMessage(\n `Some of the callbacks in the gesture are worklets and some are not. Either make sure that all calbacks are marked as 'worklet' if you wish to run them on the UI thread or use '.runOnJS(true)' modifier on the gesture explicitly to run all callbacks on the JS thread.`\n )\n );\n }\n\n if (Reanimated === undefined) {\n // If Reanimated is not available, we can't run worklets, so we shouldn't show the warning\n return;\n }\n\n const areAllNotWorklets = !areSomeWorklets && areSomeNotWorklets;\n // If none of the callbacks are worklets and the gesture is not explicitly marked with\n // `.runOnJS(true)` show a warning\n if (areAllNotWorklets && !isTestEnv()) {\n console.warn(\n tagMessage(\n `None of the callbacks in the gesture are worklets. If you wish to run them on the JS thread use '.runOnJS(true)' modifier on the gesture to make this explicit. Otherwise, mark the callbacks as 'worklet' to run them on the UI thread.`\n )\n );\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function validateDetectorChildren(ref: any) {\n // Finds the first native view under the Wrap component and traverses the fiber tree upwards\n // to check whether there is more than one native view as a pseudo-direct child of GestureDetector\n // i.e. this is not ok:\n // Wrap\n // |\n // / \\\n // / \\\n // / \\\n // / \\\n // NativeView NativeView\n //\n // but this is fine:\n // Wrap\n // |\n // NativeView\n // |\n // / \\\n // / \\\n // / \\\n // / \\\n // NativeView NativeView\n if (__DEV__ && Platform.OS !== 'web') {\n const REACT_NATIVE_VERSION = getReactNativeVersion();\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const wrapType =\n REACT_NATIVE_VERSION.minor > 63 || REACT_NATIVE_VERSION.major > 0\n ? // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n ref._reactInternals.elementType\n : // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n ref._reactInternalFiber.elementType;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n let instance =\n RNRenderer.findHostInstance_DEPRECATED(\n ref\n )._internalFiberInstanceHandleDEV;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n while (instance && instance.elementType !== wrapType) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (instance.sibling) {\n throw new Error(\n 'GestureDetector has more than one native view as its children. This can happen if you are using a custom component that renders multiple views, like React.Fragment. You should wrap content of GestureDetector with a <View> or <Animated.View>.'\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n instance = instance.return;\n }\n }\n}\n\nexport function useForceRender() {\n const [renderState, setRenderState] = useState(false);\n const forceRender = useCallback(() => {\n setRenderState(!renderState);\n }, [renderState, setRenderState]);\n\n return forceRender;\n}\n\nexport function useWebEventHandlers() {\n return useRef<WebEventHandler>({\n onGestureHandlerEvent: (e: HandlerStateChangeEvent<unknown>) => {\n onGestureHandlerEvent(e.nativeEvent);\n },\n onGestureHandlerStateChange: isNewWebImplementationEnabled()\n ? (e: HandlerStateChangeEvent<unknown>) => {\n onGestureHandlerEvent(e.nativeEvent);\n }\n : undefined,\n });\n}\n"]}
1
+ {"version":3,"sources":["utils.ts"],"names":["Platform","isTestEnv","tagMessage","BaseGesture","flingGestureHandlerProps","forceTouchGestureHandlerProps","longPressGestureHandlerProps","panGestureHandlerProps","panGestureHandlerCustomNativeProps","tapGestureHandlerProps","hoverGestureHandlerProps","nativeViewGestureHandlerProps","baseGestureHandlerWithDetectorProps","isNewWebImplementationEnabled","RNRenderer","useCallback","useRef","useState","Reanimated","onGestureHandlerEvent","ALLOWED_PROPS","convertToHandlerTag","ref","handlerTag","current","extractValidHandlerTags","interactionGroup","map","filter","tag","extractGestureRelations","gesture","requireToFail","config","simultaneousWith","blocksHandlers","waitFor","simultaneousHandlers","checkGestureCallbacksForWorklets","__DEV__","runOnJS","areSomeNotWorklets","handlers","isWorklet","includes","areSomeWorklets","console","error","undefined","areAllNotWorklets","warn","validateDetectorChildren","OS","wrapType","_reactInternals","elementType","instance","findHostInstance_DEPRECATED","_internalFiberInstanceHandleDEV","sibling","Error","return","useForceRender","renderState","setRenderState","forceRender","useWebEventHandlers","e","nativeEvent","onGestureHandlerStateChange"],"mappings":"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","sourcesContent":["import { Platform } from 'react-native';\n\nimport { isTestEnv, tagMessage } from '../../../utils';\nimport { GestureRef, BaseGesture, GestureType } from '../gesture';\n\nimport { flingGestureHandlerProps } from '../../FlingGestureHandler';\nimport { forceTouchGestureHandlerProps } from '../../ForceTouchGestureHandler';\nimport { longPressGestureHandlerProps } from '../../LongPressGestureHandler';\nimport {\n panGestureHandlerProps,\n panGestureHandlerCustomNativeProps,\n} from '../../PanGestureHandler';\nimport { tapGestureHandlerProps } from '../../TapGestureHandler';\nimport { hoverGestureHandlerProps } from '../hoverGesture';\nimport { nativeViewGestureHandlerProps } from '../../NativeViewGestureHandler';\nimport {\n HandlerStateChangeEvent,\n baseGestureHandlerWithDetectorProps,\n} from '../../gestureHandlerCommon';\nimport { isNewWebImplementationEnabled } from '../../../EnableNewWebImplementation';\nimport { RNRenderer } from '../../../RNRenderer';\nimport { useCallback, useRef, useState } from 'react';\nimport { Reanimated } from '../reanimatedWrapper';\nimport { onGestureHandlerEvent } from '../eventReceiver';\nimport { WebEventHandler } from './types';\n\nexport const ALLOWED_PROPS = [\n ...baseGestureHandlerWithDetectorProps,\n ...tapGestureHandlerProps,\n ...panGestureHandlerProps,\n ...panGestureHandlerCustomNativeProps,\n ...longPressGestureHandlerProps,\n ...forceTouchGestureHandlerProps,\n ...flingGestureHandlerProps,\n ...hoverGestureHandlerProps,\n ...nativeViewGestureHandlerProps,\n];\n\nfunction convertToHandlerTag(ref: GestureRef): number {\n if (typeof ref === 'number') {\n return ref;\n } else if (ref instanceof BaseGesture) {\n return ref.handlerTag;\n } else {\n // @ts-ignore in this case it should be a ref either to gesture object or\n // a gesture handler component, in both cases handlerTag property exists\n return ref.current?.handlerTag ?? -1;\n }\n}\n\nfunction extractValidHandlerTags(interactionGroup: GestureRef[] | undefined) {\n return (\n interactionGroup?.map(convertToHandlerTag)?.filter((tag) => tag > 0) ?? []\n );\n}\n\nexport function extractGestureRelations(gesture: GestureType) {\n const requireToFail = extractValidHandlerTags(gesture.config.requireToFail);\n const simultaneousWith = extractValidHandlerTags(\n gesture.config.simultaneousWith\n );\n const blocksHandlers = extractValidHandlerTags(gesture.config.blocksHandlers);\n\n return {\n waitFor: requireToFail,\n simultaneousHandlers: simultaneousWith,\n blocksHandlers: blocksHandlers,\n };\n}\n\nexport function checkGestureCallbacksForWorklets(gesture: GestureType) {\n if (!__DEV__) {\n return;\n }\n // If a gesture is explicitly marked to run on the JS thread there is no need to check\n // if callbacks are worklets as the user is aware they will be ran on the JS thread\n if (gesture.config.runOnJS) {\n return;\n }\n\n const areSomeNotWorklets = gesture.handlers.isWorklet.includes(false);\n const areSomeWorklets = gesture.handlers.isWorklet.includes(true);\n\n // If some of the callbacks are worklets and some are not, and the gesture is not\n // explicitly marked with `.runOnJS(true)` show an error\n if (areSomeNotWorklets && areSomeWorklets) {\n console.error(\n tagMessage(\n `Some of the callbacks in the gesture are worklets and some are not. Either make sure that all calbacks are marked as 'worklet' if you wish to run them on the UI thread or use '.runOnJS(true)' modifier on the gesture explicitly to run all callbacks on the JS thread.`\n )\n );\n }\n\n if (Reanimated === undefined) {\n // If Reanimated is not available, we can't run worklets, so we shouldn't show the warning\n return;\n }\n\n const areAllNotWorklets = !areSomeWorklets && areSomeNotWorklets;\n // If none of the callbacks are worklets and the gesture is not explicitly marked with\n // `.runOnJS(true)` show a warning\n if (areAllNotWorklets && !isTestEnv()) {\n console.warn(\n tagMessage(\n `None of the callbacks in the gesture are worklets. If you wish to run them on the JS thread use '.runOnJS(true)' modifier on the gesture to make this explicit. Otherwise, mark the callbacks as 'worklet' to run them on the UI thread.`\n )\n );\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function validateDetectorChildren(ref: any) {\n // Finds the first native view under the Wrap component and traverses the fiber tree upwards\n // to check whether there is more than one native view as a pseudo-direct child of GestureDetector\n // i.e. this is not ok:\n // Wrap\n // |\n // / \\\n // / \\\n // / \\\n // / \\\n // NativeView NativeView\n //\n // but this is fine:\n // Wrap\n // |\n // NativeView\n // |\n // / \\\n // / \\\n // / \\\n // / \\\n // NativeView NativeView\n if (__DEV__ && Platform.OS !== 'web') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const wrapType =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n ref._reactInternals.elementType;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n let instance =\n RNRenderer.findHostInstance_DEPRECATED(\n ref\n )._internalFiberInstanceHandleDEV;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n while (instance && instance.elementType !== wrapType) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (instance.sibling) {\n throw new Error(\n 'GestureDetector has more than one native view as its children. This can happen if you are using a custom component that renders multiple views, like React.Fragment. You should wrap content of GestureDetector with a <View> or <Animated.View>.'\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n instance = instance.return;\n }\n }\n}\n\nexport function useForceRender() {\n const [renderState, setRenderState] = useState(false);\n const forceRender = useCallback(() => {\n setRenderState(!renderState);\n }, [renderState, setRenderState]);\n\n return forceRender;\n}\n\nexport function useWebEventHandlers() {\n return useRef<WebEventHandler>({\n onGestureHandlerEvent: (e: HandlerStateChangeEvent<unknown>) => {\n onGestureHandlerEvent(e.nativeEvent);\n },\n onGestureHandlerStateChange: isNewWebImplementationEnabled()\n ? (e: HandlerStateChangeEvent<unknown>) => {\n onGestureHandlerEvent(e.nativeEvent);\n }\n : undefined,\n });\n}\n"]}
@@ -255,7 +255,6 @@ export default class GestureHandlerOrchestrator {
255
255
  }
256
256
 
257
257
  if (handler.awaiting || handler.state === State.ACTIVE) {
258
- // For now it always returns false
259
258
  return handler.shouldBeCancelledByOther(otherHandler);
260
259
  }
261
260