react-native-gesture-handler 2.20.2 → 2.21.1

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 (124) hide show
  1. package/RNGestureHandler.podspec +9 -0
  2. package/ReanimatedDrawerLayout/package.json +6 -0
  3. package/android/build.gradle +19 -0
  4. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +6 -2
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/RotationGestureDetector.kt +53 -21
  6. package/apple/RNGestureHandlerPointerTracker.m +4 -2
  7. package/lib/commonjs/RNGestureHandlerModule.web.js +15 -2
  8. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  9. package/lib/commonjs/components/Pressable/Pressable.js +2 -6
  10. package/lib/commonjs/components/Pressable/Pressable.js.map +1 -1
  11. package/lib/commonjs/components/ReanimatedDrawerLayout.js +389 -0
  12. package/lib/commonjs/components/ReanimatedDrawerLayout.js.map +1 -0
  13. package/lib/commonjs/components/ReanimatedSwipeable.js +117 -148
  14. package/lib/commonjs/components/ReanimatedSwipeable.js.map +1 -1
  15. package/lib/commonjs/findNodeHandle.js +12 -0
  16. package/lib/commonjs/findNodeHandle.js.map +1 -0
  17. package/lib/commonjs/findNodeHandle.web.js +40 -0
  18. package/lib/commonjs/findNodeHandle.web.js.map +1 -0
  19. package/lib/commonjs/handlers/createHandler.js +4 -2
  20. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  21. package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.web.js +51 -0
  22. package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.web.js.map +1 -0
  23. package/lib/commonjs/handlers/gestures/GestureDetector/index.js +3 -1
  24. package/lib/commonjs/handlers/gestures/GestureDetector/index.js.map +1 -1
  25. package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js +5 -3
  26. package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
  27. package/lib/commonjs/handlers/gestures/GestureDetector/useViewRefHandler.js +4 -2
  28. package/lib/commonjs/handlers/gestures/GestureDetector/useViewRefHandler.js.map +1 -1
  29. package/lib/commonjs/web/handlers/GestureHandler.js +4 -0
  30. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  31. package/lib/commonjs/web/handlers/PanGestureHandler.js +59 -0
  32. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  33. package/lib/commonjs/web/interfaces.js +10 -1
  34. package/lib/commonjs/web/interfaces.js.map +1 -1
  35. package/lib/commonjs/web/tools/EventManager.js +6 -0
  36. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  37. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +1 -3
  38. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  39. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +5 -2
  40. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  41. package/lib/commonjs/web/tools/KeyboardEventManager.js +2 -2
  42. package/lib/commonjs/web/tools/KeyboardEventManager.js.map +1 -1
  43. package/lib/commonjs/web/tools/PointerTracker.js +6 -30
  44. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
  45. package/lib/commonjs/web/tools/WheelEventManager.js +74 -0
  46. package/lib/commonjs/web/tools/WheelEventManager.js.map +1 -0
  47. package/lib/commonjs/web/utils.js +16 -0
  48. package/lib/commonjs/web/utils.js.map +1 -1
  49. package/lib/module/RNGestureHandlerModule.web.js +16 -3
  50. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  51. package/lib/module/components/Pressable/Pressable.js +2 -6
  52. package/lib/module/components/Pressable/Pressable.js.map +1 -1
  53. package/lib/module/components/ReanimatedDrawerLayout.js +365 -0
  54. package/lib/module/components/ReanimatedDrawerLayout.js.map +1 -0
  55. package/lib/module/components/ReanimatedSwipeable.js +119 -145
  56. package/lib/module/components/ReanimatedSwipeable.js.map +1 -1
  57. package/lib/module/findNodeHandle.js +3 -0
  58. package/lib/module/findNodeHandle.js.map +1 -0
  59. package/lib/module/findNodeHandle.web.js +32 -0
  60. package/lib/module/findNodeHandle.web.js.map +1 -0
  61. package/lib/module/handlers/createHandler.js +2 -1
  62. package/lib/module/handlers/createHandler.js.map +1 -1
  63. package/lib/module/handlers/gestures/GestureDetector/Wrap.web.js +34 -0
  64. package/lib/module/handlers/gestures/GestureDetector/Wrap.web.js.map +1 -0
  65. package/lib/module/handlers/gestures/GestureDetector/index.js +2 -1
  66. package/lib/module/handlers/gestures/GestureDetector/index.js.map +1 -1
  67. package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js +2 -2
  68. package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
  69. package/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js +1 -1
  70. package/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js.map +1 -1
  71. package/lib/module/web/handlers/GestureHandler.js +4 -0
  72. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  73. package/lib/module/web/handlers/PanGestureHandler.js +58 -0
  74. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  75. package/lib/module/web/interfaces.js +8 -0
  76. package/lib/module/web/interfaces.js.map +1 -1
  77. package/lib/module/web/tools/EventManager.js +6 -0
  78. package/lib/module/web/tools/EventManager.js.map +1 -1
  79. package/lib/module/web/tools/GestureHandlerOrchestrator.js +1 -3
  80. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  81. package/lib/module/web/tools/GestureHandlerWebDelegate.js +3 -1
  82. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  83. package/lib/module/web/tools/KeyboardEventManager.js +2 -2
  84. package/lib/module/web/tools/KeyboardEventManager.js.map +1 -1
  85. package/lib/module/web/tools/PointerTracker.js +6 -30
  86. package/lib/module/web/tools/PointerTracker.js.map +1 -1
  87. package/lib/module/web/tools/WheelEventManager.js +60 -0
  88. package/lib/module/web/tools/WheelEventManager.js.map +1 -0
  89. package/lib/module/web/utils.js +15 -0
  90. package/lib/module/web/utils.js.map +1 -1
  91. package/lib/typescript/components/ReanimatedDrawerLayout.d.ts +162 -0
  92. package/lib/typescript/components/ReanimatedSwipeable.d.ts +22 -16
  93. package/lib/typescript/findNodeHandle.d.ts +2 -0
  94. package/lib/typescript/findNodeHandle.web.d.ts +2 -0
  95. package/lib/typescript/handlers/gestures/GestureDetector/Wrap.web.d.ts +7 -0
  96. package/lib/typescript/web/handlers/GestureHandler.d.ts +2 -1
  97. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +5 -0
  98. package/lib/typescript/web/interfaces.d.ts +16 -0
  99. package/lib/typescript/web/tools/EventManager.d.ts +2 -0
  100. package/lib/typescript/web/tools/PointerTracker.d.ts +2 -8
  101. package/lib/typescript/web/tools/WheelEventManager.d.ts +11 -0
  102. package/lib/typescript/web/utils.d.ts +2 -1
  103. package/package.json +3 -2
  104. package/src/RNGestureHandlerModule.web.ts +23 -4
  105. package/src/components/Pressable/Pressable.tsx +2 -6
  106. package/src/components/ReanimatedDrawerLayout.tsx +741 -0
  107. package/src/components/ReanimatedSwipeable.tsx +361 -305
  108. package/src/findNodeHandle.ts +3 -0
  109. package/src/findNodeHandle.web.ts +35 -0
  110. package/src/handlers/createHandler.tsx +2 -1
  111. package/src/handlers/gestures/GestureDetector/Wrap.web.tsx +44 -0
  112. package/src/handlers/gestures/GestureDetector/index.tsx +2 -1
  113. package/src/handlers/gestures/GestureDetector/useDetectorUpdater.ts +1 -1
  114. package/src/handlers/gestures/GestureDetector/useViewRefHandler.ts +1 -1
  115. package/src/web/handlers/GestureHandler.ts +5 -1
  116. package/src/web/handlers/PanGestureHandler.ts +69 -1
  117. package/src/web/interfaces.ts +17 -0
  118. package/src/web/tools/EventManager.ts +4 -0
  119. package/src/web/tools/GestureHandlerOrchestrator.ts +1 -7
  120. package/src/web/tools/GestureHandlerWebDelegate.ts +3 -1
  121. package/src/web/tools/KeyboardEventManager.ts +2 -2
  122. package/src/web/tools/PointerTracker.ts +6 -28
  123. package/src/web/tools/WheelEventManager.ts +48 -0
  124. package/src/web/utils.ts +47 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ReanimatedDrawerLayout.tsx"],"names":["React","forwardRef","useCallback","useEffect","useImperativeHandle","useMemo","useState","StyleSheet","Keyboard","StatusBar","I18nManager","Platform","Animated","Extrapolation","interpolate","runOnJS","useAnimatedProps","useAnimatedStyle","useDerivedValue","useSharedValue","withSpring","GestureObjects","Gesture","GestureDetector","MouseButton","DRAG_TOSS","DrawerPosition","DrawerState","DrawerType","DrawerLockMode","DrawerKeyboardDismissMode","defaultProps","drawerWidth","drawerPosition","LEFT","drawerType","FRONT","edgeWidth","minSwipeDistance","overlayColor","drawerLockMode","UNLOCKED","enableTrackpadTwoFingerGesture","activeCursor","mouseButton","statusBarAnimation","DrawerLayout","props","ref","containerWidth","setContainerWidth","drawerState","setDrawerState","IDLE","drawerOpened","setDrawerOpened","drawerBackgroundColor","drawerContainerStyle","contentContainerStyle","hideStatusBar","keyboardDismissMode","userSelect","enableContextMenu","renderNavigationView","onDrawerSlide","onDrawerClose","onDrawerOpen","onDrawerStateChanged","isFromLeft","sideCorrection","openValue","value","isDrawerOpen","handleContainerLayout","nativeEvent","layout","width","emitStateChanged","newState","drawerWillShow","drawerAnimatedProps","accessibilityViewIsModal","overlayAnimatedProps","pointerEvents","edgeHitSlop","setEdgeHitSlop","left","right","gestureOrientation","animateDrawer","toValue","initialVelocity","animationSpeed","willShow","SETTLING","setHidden","normalizedToValue","CLAMP","normalizedInitialVelocity","overshootClamping","velocity","mass","damping","stiffness","finished","handleRelease","event","translationX","dragX","velocityX","x","touchX","gestureStartX","dragOffsetBasedOnStart","startOffsetX","projOffsetX","shouldOpen","openDrawer","options","closeDrawer","overlayDismissGesture","Tap","maxDistance","onEnd","LOCKED_OPEN","overlayAnimatedStyle","opacity","backgroundColor","fillHitSlop","panGesture","Pan","hitSlop","minDistance","activeOffsetX","failOffsetY","simultaneousWithExternalGesture","enabled","LOCKED_CLOSED","onStart","DRAGGING","ON_DRAG","dismiss","onUpdate","startedOutsideTranslation","startedInsideTranslation","adjustedTranslation","Math","max","reverseContentDirection","isRTL","dynamicDrawerStyles","containerStyles","transform","translateX","drawerAnimatedStyle","closedDrawerOffset","isBack","BACK","isIdle","flexDirection","containerAnimatedProps","importantForAccessibility","OS","undefined","children","styles","main","containerOnBack","containerInFront","overlay","drawerContainer","create","absoluteFillObject","zIndex","flex","overflow"],"mappings":"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","sourcesContent":["// This component is based on RN's DrawerLayoutAndroid API\n// It's cross-compatible with all platforms despite\n// `DrawerLayoutAndroid` only being available on android\n\nimport React, {\n ReactNode,\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState,\n} from 'react';\n\nimport {\n StyleSheet,\n Keyboard,\n StatusBar,\n I18nManager,\n StatusBarAnimation,\n StyleProp,\n ViewStyle,\n LayoutChangeEvent,\n Platform,\n} from 'react-native';\n\nimport Animated, {\n Extrapolation,\n SharedValue,\n interpolate,\n runOnJS,\n useAnimatedProps,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withSpring,\n} from 'react-native-reanimated';\n\nimport { GestureObjects as Gesture } from '../handlers/gestures/gestureObjects';\nimport { GestureDetector } from '../handlers/gestures/GestureDetector';\nimport {\n UserSelect,\n ActiveCursor,\n MouseButton,\n HitSlop,\n GestureStateChangeEvent,\n} from '../handlers/gestureHandlerCommon';\nimport { PanGestureHandlerEventPayload } from '../handlers/GestureHandlerEventPayload';\n\nconst DRAG_TOSS = 0.05;\n\nexport enum DrawerPosition {\n LEFT,\n RIGHT,\n}\n\nexport enum DrawerState {\n IDLE,\n DRAGGING,\n SETTLING,\n}\n\nexport enum DrawerType {\n FRONT,\n BACK,\n SLIDE,\n}\n\nexport enum DrawerLockMode {\n UNLOCKED,\n LOCKED_CLOSED,\n LOCKED_OPEN,\n}\n\nexport enum DrawerKeyboardDismissMode {\n NONE,\n ON_DRAG,\n}\n\nexport interface DrawerLayoutProps {\n /**\n * This attribute is present in the native android implementation already and is one\n * of the required params. The gesture handler version of DrawerLayout makes it\n * possible for the function passed as `renderNavigationView` to take an\n * Animated value as a parameter that indicates the progress of drawer\n * opening/closing animation (progress value is 0 when closed and 1 when\n * opened). This can be used by the drawer component to animated its children\n * while the drawer is opening or closing.\n */\n renderNavigationView: (\n progressAnimatedValue: SharedValue<number>\n ) => ReactNode;\n\n /**\n * Determines the side from which the drawer will open.\n */\n drawerPosition?: DrawerPosition;\n\n /**\n * Width of the drawer.\n */\n drawerWidth?: number;\n\n /**\n * Background color of the drawer.\n */\n drawerBackgroundColor?: string;\n\n /**\n * Specifies the lock mode of the drawer.\n * Programatic opening/closing isn't affected by the lock mode. Defaults to `UNLOCKED`.\n * - `UNLOCKED` - the drawer will respond to gestures.\n * - `LOCKED_CLOSED` - the drawer will move freely until it settles in a closed position, then the gestures will be disabled.\n * - `LOCKED_OPEN` - the drawer will move freely until it settles in an opened position, then the gestures will be disabled.\n */\n drawerLockMode?: DrawerLockMode;\n\n /**\n * Determines if system keyboard should be closed upon dragging the drawer.\n */\n keyboardDismissMode?: DrawerKeyboardDismissMode;\n\n /**\n * Called when the drawer is closed.\n */\n onDrawerClose?: () => void;\n\n /**\n * Called when the drawer is opened.\n */\n onDrawerOpen?: () => void;\n\n /**\n * Called when the status of the drawer changes.\n */\n onDrawerStateChanged?: (\n newState: DrawerState,\n drawerWillShow: boolean\n ) => void;\n\n /**\n * Type of animation that will play when opening the drawer.\n */\n drawerType?: DrawerType;\n\n /**\n * Defines how far from the edge of the content view the gesture should\n * activate.\n */\n edgeWidth?: number;\n\n /**\n * Minimal distance to swipe before the drawer starts moving.\n */\n minSwipeDistance?: number;\n\n /**\n * When set to true Drawer component will use\n * {@link https://reactnative.dev/docs/statusbar StatusBar} API to hide the OS\n * status bar whenever the drawer is pulled or when its in an \"open\" state.\n */\n hideStatusBar?: boolean;\n\n /**\n * @default 'slide'\n *\n * Can be used when hideStatusBar is set to true and will select the animation\n * used for hiding/showing the status bar. See\n * {@link https://reactnative.dev/docs/statusbar StatusBar} documentation for\n * more details\n */\n statusBarAnimation?: StatusBarAnimation;\n\n /**\n * @default 'rgba(0, 0, 0, 0.7)'\n *\n * Color of the background overlay.\n * Animated from `0%` to `100%` as the drawer opens.\n */\n overlayColor?: string;\n\n /**\n * Style wrapping the content.\n */\n contentContainerStyle?: StyleProp<ViewStyle>;\n\n /**\n * Style wrapping the drawer.\n */\n drawerContainerStyle?: StyleProp<ViewStyle>;\n\n /**\n * Enables two-finger gestures on supported devices, for example iPads with\n * trackpads. If not enabled the gesture will require click + drag, with\n * `enableTrackpadTwoFingerGesture` swiping with two fingers will also trigger\n * the gesture.\n */\n enableTrackpadTwoFingerGesture?: boolean;\n\n onDrawerSlide?: (position: number) => void;\n\n // Implicit `children` prop has been removed in @types/react^18.0.\n /**\n * Elements that will be rendered inside the content view.\n */\n children?: ReactNode | ((openValue?: SharedValue<number>) => ReactNode);\n\n /**\n * @default 'none'\n * Sets whether the text inside both the drawer and the context window can be selected.\n * Values: 'none' | 'text' | 'auto'\n */\n userSelect?: UserSelect;\n\n /**\n * @default 'auto'\n * Sets the displayed cursor pictogram when the drawer is being dragged.\n * Values: see CSS cursor values\n */\n activeCursor?: ActiveCursor;\n\n /**\n * @default 'MouseButton.LEFT'\n * Allows to choose which mouse button should underlying pan handler react to.\n */\n mouseButton?: MouseButton;\n\n /**\n * @default 'false if MouseButton.RIGHT is specified'\n * Allows to enable/disable context menu.\n */\n enableContextMenu?: boolean;\n}\n\nexport type DrawerMovementOption = {\n initialVelocity?: number;\n animationSpeed?: number;\n};\n\nexport interface DrawerLayoutMethods {\n openDrawer: (options?: DrawerMovementOption) => void;\n closeDrawer: (options?: DrawerMovementOption) => void;\n}\n\nconst defaultProps = {\n drawerWidth: 200,\n drawerPosition: DrawerPosition.LEFT,\n drawerType: DrawerType.FRONT,\n edgeWidth: 20,\n minSwipeDistance: 3,\n overlayColor: 'rgba(0, 0, 0, 0.7)',\n drawerLockMode: DrawerLockMode.UNLOCKED,\n enableTrackpadTwoFingerGesture: false,\n activeCursor: 'auto' as ActiveCursor,\n mouseButton: MouseButton.LEFT,\n statusBarAnimation: 'slide' as StatusBarAnimation,\n};\n\nconst DrawerLayout = forwardRef<DrawerLayoutMethods, DrawerLayoutProps>(\n function DrawerLayout(props: DrawerLayoutProps, ref) {\n const [containerWidth, setContainerWidth] = useState(0);\n const [drawerState, setDrawerState] = useState<DrawerState>(\n DrawerState.IDLE\n );\n const [drawerOpened, setDrawerOpened] = useState(false);\n\n const {\n drawerPosition = defaultProps.drawerPosition,\n drawerWidth = defaultProps.drawerWidth,\n drawerType = defaultProps.drawerType,\n drawerBackgroundColor,\n drawerContainerStyle,\n contentContainerStyle,\n minSwipeDistance = defaultProps.minSwipeDistance,\n edgeWidth = defaultProps.edgeWidth,\n drawerLockMode = defaultProps.drawerLockMode,\n overlayColor = defaultProps.overlayColor,\n enableTrackpadTwoFingerGesture = defaultProps.enableTrackpadTwoFingerGesture,\n activeCursor = defaultProps.activeCursor,\n mouseButton = defaultProps.mouseButton,\n statusBarAnimation = defaultProps.statusBarAnimation,\n hideStatusBar,\n keyboardDismissMode,\n userSelect,\n enableContextMenu,\n renderNavigationView,\n onDrawerSlide,\n onDrawerClose,\n onDrawerOpen,\n onDrawerStateChanged,\n } = props;\n\n const isFromLeft = drawerPosition === DrawerPosition.LEFT;\n\n const sideCorrection = isFromLeft ? 1 : -1;\n\n // While closing the drawer when user starts gesture in the greyed out part of the window,\n // we want the drawer to follow only once the finger reaches the edge of the drawer.\n // See the diagram for reference. * = starting finger position, < = current finger position\n // 1) +---------------+ 2) +---------------+ 3) +---------------+ 4) +---------------+\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|..<*..| |XXXXXXXX|.<-*..| |XXXXXXXX|<--*..| |XXXXX|<-----*..|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // |XXXXXXXX|......| |XXXXXXXX|......| |XXXXXXXX|......| |XXXXX|.........|\n // +---------------+ +---------------+ +---------------+ +---------------+\n\n const openValue = useSharedValue<number>(0);\n\n useDerivedValue(() => {\n onDrawerSlide && runOnJS(onDrawerSlide)(openValue.value);\n }, []);\n\n const isDrawerOpen = useSharedValue(false);\n\n const handleContainerLayout = ({ nativeEvent }: LayoutChangeEvent) => {\n setContainerWidth(nativeEvent.layout.width);\n };\n\n const emitStateChanged = useCallback(\n (newState: DrawerState, drawerWillShow: boolean) => {\n 'worklet';\n onDrawerStateChanged &&\n runOnJS(onDrawerStateChanged)?.(newState, drawerWillShow);\n },\n [onDrawerStateChanged]\n );\n\n const drawerAnimatedProps = useAnimatedProps(() => ({\n accessibilityViewIsModal: isDrawerOpen.value,\n }));\n\n const overlayAnimatedProps = useAnimatedProps(() => ({\n pointerEvents: isDrawerOpen.value ? ('auto' as const) : ('none' as const),\n }));\n\n // While the drawer is hidden, it's hitSlop overflows onto the main view by edgeWidth\n // This way it can be swiped open even when it's hidden\n const [edgeHitSlop, setEdgeHitSlop] = useState<HitSlop>(\n isFromLeft\n ? { left: 0, width: edgeWidth }\n : { right: 0, width: edgeWidth }\n );\n\n // gestureOrientation is 1 if the gesture is expected to move from left to right and -1 otherwise\n const gestureOrientation = useMemo(\n () => sideCorrection * (drawerOpened ? -1 : 1),\n [sideCorrection, drawerOpened]\n );\n\n useEffect(() => {\n setEdgeHitSlop(\n isFromLeft\n ? { left: 0, width: edgeWidth }\n : { right: 0, width: edgeWidth }\n );\n }, [isFromLeft, edgeWidth]);\n\n const animateDrawer = useCallback(\n (toValue: number, initialVelocity: number, animationSpeed?: number) => {\n 'worklet';\n const willShow = toValue !== 0;\n isDrawerOpen.value = willShow;\n\n emitStateChanged(DrawerState.SETTLING, willShow);\n runOnJS(setDrawerState)(DrawerState.SETTLING);\n\n if (hideStatusBar) {\n runOnJS(StatusBar.setHidden)(willShow, statusBarAnimation);\n }\n\n const normalizedToValue = interpolate(\n toValue,\n [0, drawerWidth],\n [0, 1],\n Extrapolation.CLAMP\n );\n\n const normalizedInitialVelocity = interpolate(\n initialVelocity,\n [0, drawerWidth],\n [0, 1],\n Extrapolation.CLAMP\n );\n\n openValue.value = withSpring(\n normalizedToValue,\n {\n overshootClamping: true,\n velocity: normalizedInitialVelocity,\n mass: animationSpeed ? 1 / animationSpeed : 1,\n damping: 40,\n stiffness: 500,\n },\n (finished) => {\n if (finished) {\n emitStateChanged(DrawerState.IDLE, willShow);\n runOnJS(setDrawerOpened)(willShow);\n runOnJS(setDrawerState)(DrawerState.IDLE);\n if (willShow) {\n onDrawerOpen && runOnJS(onDrawerOpen)?.();\n } else {\n onDrawerClose && runOnJS(onDrawerClose)?.();\n }\n }\n }\n );\n },\n [\n openValue,\n emitStateChanged,\n isDrawerOpen,\n hideStatusBar,\n onDrawerClose,\n onDrawerOpen,\n drawerWidth,\n statusBarAnimation,\n ]\n );\n\n const handleRelease = useCallback(\n (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {\n 'worklet';\n let { translationX: dragX, velocityX, x: touchX } = event;\n\n if (drawerPosition !== DrawerPosition.LEFT) {\n // See description in _updateAnimatedEvent about why events are flipped\n // for right-side drawer\n dragX = -dragX;\n touchX = containerWidth - touchX;\n velocityX = -velocityX;\n }\n\n const gestureStartX = touchX - dragX;\n let dragOffsetBasedOnStart = 0;\n\n if (drawerType === DrawerType.FRONT) {\n dragOffsetBasedOnStart =\n gestureStartX > drawerWidth ? gestureStartX - drawerWidth : 0;\n }\n\n const startOffsetX =\n dragX +\n dragOffsetBasedOnStart +\n (isDrawerOpen.value ? drawerWidth : 0);\n\n const projOffsetX = startOffsetX + DRAG_TOSS * velocityX;\n\n const shouldOpen = projOffsetX > drawerWidth / 2;\n\n if (shouldOpen) {\n animateDrawer(drawerWidth, velocityX);\n } else {\n animateDrawer(0, velocityX);\n }\n },\n [\n animateDrawer,\n containerWidth,\n drawerPosition,\n drawerType,\n drawerWidth,\n isDrawerOpen,\n ]\n );\n\n const openDrawer = useCallback(\n (options: DrawerMovementOption = {}) => {\n 'worklet';\n animateDrawer(\n drawerWidth,\n options.initialVelocity ?? 0,\n options.animationSpeed\n );\n },\n [animateDrawer, drawerWidth]\n );\n\n const closeDrawer = useCallback(\n (options: DrawerMovementOption = {}) => {\n 'worklet';\n animateDrawer(0, options.initialVelocity ?? 0, options.animationSpeed);\n },\n [animateDrawer]\n );\n\n const overlayDismissGesture = useMemo(\n () =>\n Gesture.Tap()\n .maxDistance(25)\n .onEnd(() => {\n if (\n isDrawerOpen.value &&\n drawerLockMode !== DrawerLockMode.LOCKED_OPEN\n ) {\n closeDrawer();\n }\n }),\n [closeDrawer, isDrawerOpen, drawerLockMode]\n );\n\n const overlayAnimatedStyle = useAnimatedStyle(() => ({\n opacity: openValue.value,\n backgroundColor: overlayColor,\n }));\n\n const fillHitSlop = useMemo(\n () => (isFromLeft ? { left: drawerWidth } : { right: drawerWidth }),\n [drawerWidth, isFromLeft]\n );\n\n const panGesture = useMemo(() => {\n return Gesture.Pan()\n .activeCursor(activeCursor)\n .mouseButton(mouseButton)\n .hitSlop(drawerOpened ? fillHitSlop : edgeHitSlop)\n .minDistance(drawerOpened ? 100 : 0)\n .activeOffsetX(gestureOrientation * minSwipeDistance)\n .failOffsetY([-15, 15])\n .simultaneousWithExternalGesture(overlayDismissGesture)\n .enableTrackpadTwoFingerGesture(enableTrackpadTwoFingerGesture)\n .enabled(\n drawerState !== DrawerState.SETTLING &&\n (drawerOpened\n ? drawerLockMode !== DrawerLockMode.LOCKED_OPEN\n : drawerLockMode !== DrawerLockMode.LOCKED_CLOSED)\n )\n .onStart(() => {\n emitStateChanged(DrawerState.DRAGGING, false);\n runOnJS(setDrawerState)(DrawerState.DRAGGING);\n if (keyboardDismissMode === DrawerKeyboardDismissMode.ON_DRAG) {\n runOnJS(Keyboard.dismiss)();\n }\n if (hideStatusBar) {\n runOnJS(StatusBar.setHidden)(true, statusBarAnimation);\n }\n })\n .onUpdate((event) => {\n const startedOutsideTranslation = isFromLeft\n ? interpolate(\n event.x,\n [0, drawerWidth, drawerWidth + 1],\n [0, drawerWidth, drawerWidth]\n )\n : interpolate(\n event.x - containerWidth,\n [-drawerWidth - 1, -drawerWidth, 0],\n [drawerWidth, drawerWidth, 0]\n );\n\n const startedInsideTranslation =\n sideCorrection *\n (event.translationX +\n (drawerOpened ? drawerWidth * -gestureOrientation : 0));\n\n const adjustedTranslation = Math.max(\n drawerOpened ? startedOutsideTranslation : 0,\n startedInsideTranslation\n );\n\n openValue.value = interpolate(\n adjustedTranslation,\n [-drawerWidth, 0, drawerWidth],\n [1, 0, 1],\n Extrapolation.CLAMP\n );\n })\n .onEnd(handleRelease);\n }, [\n drawerLockMode,\n openValue,\n drawerWidth,\n emitStateChanged,\n gestureOrientation,\n handleRelease,\n edgeHitSlop,\n fillHitSlop,\n minSwipeDistance,\n hideStatusBar,\n keyboardDismissMode,\n overlayDismissGesture,\n drawerOpened,\n isFromLeft,\n containerWidth,\n sideCorrection,\n drawerState,\n activeCursor,\n enableTrackpadTwoFingerGesture,\n mouseButton,\n statusBarAnimation,\n ]);\n\n // When using RTL, row and row-reverse flex directions are flipped.\n const reverseContentDirection = I18nManager.isRTL\n ? isFromLeft\n : !isFromLeft;\n\n const dynamicDrawerStyles = {\n backgroundColor: drawerBackgroundColor,\n width: drawerWidth,\n };\n\n const containerStyles = useAnimatedStyle(() => {\n if (drawerType === DrawerType.FRONT) {\n return {};\n }\n\n return {\n transform: [\n {\n translateX: interpolate(\n openValue.value,\n [0, 1],\n [0, drawerWidth * sideCorrection],\n Extrapolation.CLAMP\n ),\n },\n ],\n };\n });\n\n const drawerAnimatedStyle = useAnimatedStyle(() => {\n const closedDrawerOffset = drawerWidth * -sideCorrection;\n const isBack = drawerType === DrawerType.BACK;\n const isIdle = drawerState === DrawerState.IDLE;\n\n if (isBack) {\n return {\n transform: [{ translateX: 0 }],\n flexDirection: reverseContentDirection ? 'row-reverse' : 'row',\n };\n }\n\n let translateX = 0;\n\n if (isIdle) {\n translateX = drawerOpened ? 0 : closedDrawerOffset;\n } else {\n translateX = interpolate(\n openValue.value,\n [0, 1],\n [closedDrawerOffset, 0],\n Extrapolation.CLAMP\n );\n }\n\n return {\n transform: [{ translateX }],\n flexDirection: reverseContentDirection ? 'row-reverse' : 'row',\n };\n });\n\n const containerAnimatedProps = useAnimatedProps(() => ({\n importantForAccessibility:\n Platform.OS === 'android'\n ? isDrawerOpen.value\n ? ('no-hide-descendants' as const)\n : ('yes' as const)\n : undefined,\n }));\n\n const children =\n typeof props.children === 'function'\n ? props.children(openValue) // renderer function\n : props.children;\n\n useImperativeHandle(\n ref,\n () => ({\n openDrawer,\n closeDrawer,\n }),\n [openDrawer, closeDrawer]\n );\n\n return (\n <GestureDetector\n gesture={panGesture}\n userSelect={userSelect}\n enableContextMenu={enableContextMenu}>\n <Animated.View style={styles.main} onLayout={handleContainerLayout}>\n <GestureDetector gesture={overlayDismissGesture}>\n <Animated.View\n style={[\n drawerType === DrawerType.FRONT\n ? styles.containerOnBack\n : styles.containerInFront,\n containerStyles,\n contentContainerStyle,\n ]}\n animatedProps={containerAnimatedProps}>\n {children}\n <Animated.View\n animatedProps={overlayAnimatedProps}\n style={[styles.overlay, overlayAnimatedStyle]}\n />\n </Animated.View>\n </GestureDetector>\n <Animated.View\n pointerEvents=\"box-none\"\n animatedProps={drawerAnimatedProps}\n style={[\n styles.drawerContainer,\n drawerAnimatedStyle,\n drawerContainerStyle,\n ]}>\n <Animated.View style={dynamicDrawerStyles}>\n {renderNavigationView(openValue)}\n </Animated.View>\n </Animated.View>\n </Animated.View>\n </GestureDetector>\n );\n }\n);\n\nexport default DrawerLayout;\n\nconst styles = StyleSheet.create({\n drawerContainer: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1001,\n flexDirection: 'row',\n },\n containerInFront: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1002,\n },\n containerOnBack: {\n ...StyleSheet.absoluteFillObject,\n },\n main: {\n flex: 1,\n zIndex: 0,\n overflow: 'hidden',\n },\n overlay: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 1000,\n },\n});\n"]}
@@ -3,30 +3,50 @@ function _extends() { _extends = Object.assign || function (target) { for (var i
3
3
  // Similarily to the DrawerLayout component this deserves to be put in a
4
4
  // separate repo. Although, keeping it here for the time being will allow us to
5
5
  // move faster and fix possible issues quicker
6
- import React, { forwardRef, useCallback, useImperativeHandle, useRef } from 'react';
6
+ import React, { forwardRef, useCallback, useImperativeHandle, useMemo } from 'react';
7
7
  import { GestureObjects as Gesture } from '../handlers/gestures/gestureObjects';
8
8
  import { GestureDetector } from '../handlers/gestures/GestureDetector';
9
- import Animated, { Extrapolation, interpolate, runOnJS, useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated';
9
+ import Animated, { interpolate, runOnJS, useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated';
10
10
  import { I18nManager, StyleSheet, View } from 'react-native';
11
11
  const DRAG_TOSS = 0.05;
12
+ var SwipeDirection;
13
+
14
+ (function (SwipeDirection) {
15
+ SwipeDirection["LEFT"] = "left";
16
+ SwipeDirection["RIGHT"] = "right";
17
+ })(SwipeDirection || (SwipeDirection = {}));
18
+
12
19
  const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
20
+ const defaultProps = {
21
+ friction: 1,
22
+ overshootFriction: 1,
23
+ dragOffset: 10,
24
+ enableTrackpadTwoFingerGesture: false
25
+ };
13
26
  const {
14
27
  leftThreshold,
15
28
  rightThreshold,
16
- onSwipeableOpenStartDrag,
17
- onSwipeableCloseStartDrag,
18
- enableTrackpadTwoFingerGesture,
19
29
  enabled,
20
30
  containerStyle,
21
31
  childrenContainerStyle,
22
32
  animationOptions,
23
33
  overshootLeft,
24
34
  overshootRight,
35
+ testID,
36
+ children,
37
+ enableTrackpadTwoFingerGesture = defaultProps.enableTrackpadTwoFingerGesture,
38
+ dragOffsetFromLeftEdge = defaultProps.dragOffset,
39
+ dragOffsetFromRightEdge = defaultProps.dragOffset,
40
+ friction = defaultProps.friction,
41
+ overshootFriction = defaultProps.overshootFriction,
42
+ onSwipeableOpenStartDrag,
43
+ onSwipeableCloseStartDrag,
25
44
  onSwipeableWillOpen,
26
45
  onSwipeableWillClose,
27
46
  onSwipeableOpen,
28
47
  onSwipeableClose,
29
- testID,
48
+ renderLeftActions,
49
+ renderRightActions,
30
50
  ...remainingProps
31
51
  } = props;
32
52
  const rowState = useSharedValue(0);
@@ -34,141 +54,103 @@ const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
34
54
  const appliedTranslation = useSharedValue(0);
35
55
  const rowWidth = useSharedValue(0);
36
56
  const leftWidth = useSharedValue(0);
37
- const rightWidth = useSharedValue(0);
38
- const rightOffset = useSharedValue(0);
39
- const leftActionTranslate = useSharedValue(0);
40
- const rightActionTranslate = useSharedValue(0);
57
+ const rightWidth = useSharedValue(0); // used for synchronizing layout measurements between JS and UI
58
+
59
+ const rightOffset = useSharedValue(null);
41
60
  const showLeftProgress = useSharedValue(0);
42
61
  const showRightProgress = useSharedValue(0);
43
- const swipeableMethods = useRef({
44
- close: () => {
45
- 'worklet';
46
- },
47
- openLeft: () => {
48
- 'worklet';
49
- },
50
- openRight: () => {
51
- 'worklet';
52
- },
53
- reset: () => {
54
- 'worklet';
55
- }
56
- });
57
- const defaultProps = {
58
- friction: 1,
59
- overshootFriction: 1
60
- };
61
- const {
62
- friction = defaultProps.friction,
63
- overshootFriction = defaultProps.overshootFriction
64
- } = props;
65
- const overshootLeftProp = overshootLeft;
66
- const overshootRightProp = overshootRight;
67
- const calculateCurrentOffset = useCallback(() => {
62
+ const updateRightElementWidth = useCallback(() => {
68
63
  'worklet';
69
64
 
70
- if (rowState.value === 1) {
71
- return leftWidth.value;
72
- } else if (rowState.value === -1) {
73
- return -rowWidth.value - rightOffset.value;
65
+ if (rightOffset.value === null) {
66
+ rightOffset.value = rowWidth.value;
74
67
  }
75
68
 
76
- return 0;
77
- }, [leftWidth, rightOffset, rowState, rowWidth]);
78
-
79
- const updateAnimatedEvent = () => {
69
+ rightWidth.value = Math.max(0, rowWidth.value - rightOffset.value);
70
+ }, [rightOffset, rightWidth, rowWidth]);
71
+ const updateAnimatedEvent = useCallback(() => {
80
72
  'worklet';
81
73
 
82
- rightWidth.value = Math.max(0, rowWidth.value - rightOffset.value);
83
- const overshootLeft = overshootLeftProp !== null && overshootLeftProp !== void 0 ? overshootLeftProp : leftWidth.value > 0;
84
- const overshootRight = overshootRightProp !== null && overshootRightProp !== void 0 ? overshootRightProp : rightWidth.value > 0;
74
+ const shouldOvershootLeft = overshootLeft !== null && overshootLeft !== void 0 ? overshootLeft : leftWidth.value > 0;
75
+ const shouldOvershootRight = overshootRight !== null && overshootRight !== void 0 ? overshootRight : rightWidth.value > 0;
85
76
  const startOffset = rowState.value === 1 ? leftWidth.value : rowState.value === -1 ? -rightWidth.value : 0;
86
77
  const offsetDrag = userDrag.value / friction + startOffset;
87
- appliedTranslation.value = interpolate(offsetDrag, [-rightWidth.value - 1, -rightWidth.value, leftWidth.value, leftWidth.value + 1], [-rightWidth.value - (overshootRight ? 1 / overshootFriction : 0), -rightWidth.value, leftWidth.value, leftWidth.value + (overshootLeft ? 1 / overshootFriction : 0)]);
78
+ appliedTranslation.value = interpolate(offsetDrag, [-rightWidth.value - 1, -rightWidth.value, leftWidth.value, leftWidth.value + 1], [-rightWidth.value - (shouldOvershootRight ? 1 / overshootFriction : 0), -rightWidth.value, leftWidth.value, leftWidth.value + (shouldOvershootLeft ? 1 / overshootFriction : 0)]);
88
79
  showLeftProgress.value = leftWidth.value > 0 ? interpolate(appliedTranslation.value, [-1, 0, leftWidth.value], [0, 0, 1]) : 0;
89
- leftActionTranslate.value = interpolate(showLeftProgress.value, [0, Number.MIN_VALUE], [-10000, 0], Extrapolation.CLAMP);
90
80
  showRightProgress.value = rightWidth.value > 0 ? interpolate(appliedTranslation.value, [-rightWidth.value, 0, 1], [1, 0, 0]) : 0;
91
- rightActionTranslate.value = interpolate(showRightProgress.value, [0, Number.MIN_VALUE], [-10000, 0], Extrapolation.CLAMP);
92
- };
93
-
81
+ }, [appliedTranslation, friction, leftWidth, overshootFriction, rightWidth, rowState, showLeftProgress, showRightProgress, userDrag, overshootLeft, overshootRight]);
94
82
  const dispatchImmediateEvents = useCallback((fromValue, toValue) => {
83
+ 'worklet';
84
+
95
85
  if (toValue > 0 && onSwipeableWillOpen) {
96
- onSwipeableWillOpen('left');
86
+ runOnJS(onSwipeableWillOpen)(SwipeDirection.RIGHT);
97
87
  } else if (toValue < 0 && onSwipeableWillOpen) {
98
- onSwipeableWillOpen('right');
88
+ runOnJS(onSwipeableWillOpen)(SwipeDirection.LEFT);
99
89
  } else if (onSwipeableWillClose) {
100
- const closingDirection = fromValue > 0 ? 'left' : 'right';
101
- onSwipeableWillClose(closingDirection);
90
+ runOnJS(onSwipeableWillClose)(fromValue > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT);
102
91
  }
103
92
  }, [onSwipeableWillClose, onSwipeableWillOpen]);
104
93
  const dispatchEndEvents = useCallback((fromValue, toValue) => {
94
+ 'worklet';
95
+
105
96
  if (toValue > 0 && onSwipeableOpen) {
106
- onSwipeableOpen('left', swipeableMethods.current);
97
+ runOnJS(onSwipeableOpen)(SwipeDirection.RIGHT);
107
98
  } else if (toValue < 0 && onSwipeableOpen) {
108
- onSwipeableOpen('right', swipeableMethods.current);
99
+ runOnJS(onSwipeableOpen)(SwipeDirection.LEFT);
109
100
  } else if (onSwipeableClose) {
110
- const closingDirection = fromValue > 0 ? 'left' : 'right';
111
- onSwipeableClose(closingDirection, swipeableMethods.current);
101
+ runOnJS(onSwipeableClose)(fromValue > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT);
112
102
  }
113
103
  }, [onSwipeableClose, onSwipeableOpen]);
114
- const animationOptionsProp = animationOptions;
115
- const animateRow = useCallback((fromValue, toValue, velocityX) => {
104
+ const animateRow = useCallback((toValue, velocityX) => {
116
105
  'worklet';
117
106
 
118
- rowState.value = Math.sign(toValue);
119
107
  const translationSpringConfig = {
120
108
  duration: 1000,
121
109
  dampingRatio: 0.9,
122
110
  stiffness: 500,
123
111
  velocity: velocityX,
124
112
  overshootClamping: true,
125
- ...animationOptionsProp
113
+ ...animationOptions
126
114
  };
115
+ const isClosing = toValue === 0;
116
+ const moveToRight = isClosing ? rowState.value < 0 : toValue > 0;
117
+ const usedWidth = isClosing ? moveToRight ? rightWidth.value : leftWidth.value : moveToRight ? leftWidth.value : rightWidth.value;
127
118
  const progressSpringConfig = { ...translationSpringConfig,
128
- velocity: 0
119
+ restDisplacementThreshold: 0.01,
120
+ restSpeedThreshold: 0.01,
121
+ velocity: velocityX && interpolate(velocityX, [-usedWidth, usedWidth], [-1, 1])
129
122
  };
123
+ const frozenRowState = rowState.value;
130
124
  appliedTranslation.value = withSpring(toValue, translationSpringConfig, isFinished => {
131
125
  if (isFinished) {
132
- runOnJS(dispatchEndEvents)(fromValue, toValue);
126
+ dispatchEndEvents(frozenRowState, toValue);
133
127
  }
134
128
  });
135
129
  const progressTarget = toValue === 0 ? 0 : 1;
136
130
  showLeftProgress.value = leftWidth.value > 0 ? withSpring(progressTarget, progressSpringConfig) : 0;
137
131
  showRightProgress.value = rightWidth.value > 0 ? withSpring(progressTarget, progressSpringConfig) : 0;
138
- runOnJS(dispatchImmediateEvents)(fromValue, toValue);
139
- }, [rowState, animationOptionsProp, appliedTranslation, showLeftProgress, leftWidth.value, showRightProgress, rightWidth.value, dispatchImmediateEvents, dispatchEndEvents]);
140
-
141
- const onRowLayout = ({
142
- nativeEvent
143
- }) => {
144
- rowWidth.value = nativeEvent.layout.width;
145
- };
146
-
147
- const {
148
- children,
149
- renderLeftActions,
150
- renderRightActions,
151
- dragOffsetFromLeftEdge = 10,
152
- dragOffsetFromRightEdge = 10
153
- } = props;
154
- swipeableMethods.current = {
132
+ dispatchImmediateEvents(frozenRowState, toValue);
133
+ rowState.value = Math.sign(toValue);
134
+ }, [rowState, animationOptions, appliedTranslation, showLeftProgress, leftWidth, showRightProgress, rightWidth, dispatchImmediateEvents, dispatchEndEvents]);
135
+ const swipeableMethods = useMemo(() => ({
155
136
  close() {
156
137
  'worklet';
157
138
 
158
- animateRow(calculateCurrentOffset(), 0);
139
+ animateRow(0);
159
140
  },
160
141
 
161
142
  openLeft() {
162
143
  'worklet';
163
144
 
164
- animateRow(calculateCurrentOffset(), leftWidth.value);
145
+ animateRow(leftWidth.value);
165
146
  },
166
147
 
167
148
  openRight() {
168
- 'worklet';
149
+ 'worklet'; // rightOffset and rowWidth are already much sooner than rightWidth
150
+
151
+ var _rightOffset$value;
169
152
 
170
- rightWidth.value = rowWidth.value - rightOffset.value;
171
- animateRow(calculateCurrentOffset(), -rightWidth.value);
153
+ animateRow(((_rightOffset$value = rightOffset.value) !== null && _rightOffset$value !== void 0 ? _rightOffset$value : 0) - rowWidth.value);
172
154
  },
173
155
 
174
156
  reset() {
@@ -180,103 +162,95 @@ const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
180
162
  rowState.value = 0;
181
163
  }
182
164
 
183
- };
184
- const leftAnimatedStyle = useAnimatedStyle(() => ({
185
- transform: [{
186
- translateX: leftActionTranslate.value
187
- }]
188
- }), [leftActionTranslate]);
189
- const leftElement = renderLeftActions && /*#__PURE__*/React.createElement(Animated.View, {
190
- style: [styles.leftActions, leftAnimatedStyle]
191
- }, renderLeftActions(showLeftProgress, appliedTranslation, swipeableMethods.current), /*#__PURE__*/React.createElement(View, {
165
+ }), [leftWidth, rightOffset, rowWidth, userDrag, showLeftProgress, appliedTranslation, rowState, animateRow]);
166
+ const onRowLayout = useCallback(({
167
+ nativeEvent
168
+ }) => {
169
+ rowWidth.value = nativeEvent.layout.width;
170
+ }, [rowWidth]);
171
+ const leftElement = useCallback(() => /*#__PURE__*/React.createElement(Animated.View, {
172
+ style: [styles.leftActions]
173
+ }, renderLeftActions === null || renderLeftActions === void 0 ? void 0 : renderLeftActions(showLeftProgress, appliedTranslation, swipeableMethods), /*#__PURE__*/React.createElement(View, {
192
174
  onLayout: ({
193
175
  nativeEvent
194
176
  }) => leftWidth.value = nativeEvent.layout.x
195
- }));
196
- const rightAnimatedStyle = useAnimatedStyle(() => ({
197
- transform: [{
198
- translateX: rightActionTranslate.value
199
- }]
200
- }), [rightActionTranslate]);
201
- const rightElement = renderRightActions && /*#__PURE__*/React.createElement(Animated.View, {
202
- style: [styles.rightActions, rightAnimatedStyle]
203
- }, renderRightActions(showRightProgress, appliedTranslation, swipeableMethods.current), /*#__PURE__*/React.createElement(View, {
177
+ })), [appliedTranslation, leftWidth, renderLeftActions, showLeftProgress, swipeableMethods]);
178
+ const rightElement = useCallback(() => /*#__PURE__*/React.createElement(Animated.View, {
179
+ style: [styles.rightActions]
180
+ }, renderRightActions === null || renderRightActions === void 0 ? void 0 : renderRightActions(showRightProgress, appliedTranslation, swipeableMethods), /*#__PURE__*/React.createElement(View, {
204
181
  onLayout: ({
205
182
  nativeEvent
206
- }) => rightOffset.value = nativeEvent.layout.x
207
- }));
208
- const leftThresholdProp = leftThreshold;
209
- const rightThresholdProp = rightThreshold;
210
-
211
- const handleRelease = event => {
183
+ }) => {
184
+ rightOffset.value = nativeEvent.layout.x;
185
+ }
186
+ })), [appliedTranslation, renderRightActions, rightOffset, showRightProgress, swipeableMethods]);
187
+ const handleRelease = useCallback(event => {
212
188
  'worklet';
213
189
 
214
190
  const {
215
191
  velocityX
216
192
  } = event;
217
193
  userDrag.value = event.translationX;
218
- rightWidth.value = rowWidth.value - rightOffset.value;
219
- const leftThreshold = leftThresholdProp !== null && leftThresholdProp !== void 0 ? leftThresholdProp : leftWidth.value / 2;
220
- const rightThreshold = rightThresholdProp !== null && rightThresholdProp !== void 0 ? rightThresholdProp : rightWidth.value / 2;
221
- const startOffsetX = calculateCurrentOffset() + userDrag.value / friction;
194
+ updateRightElementWidth();
195
+ const leftThresholdProp = leftThreshold !== null && leftThreshold !== void 0 ? leftThreshold : leftWidth.value / 2;
196
+ const rightThresholdProp = rightThreshold !== null && rightThreshold !== void 0 ? rightThreshold : rightWidth.value / 2;
222
197
  const translationX = (userDrag.value + DRAG_TOSS * velocityX) / friction;
223
198
  let toValue = 0;
224
199
 
225
200
  if (rowState.value === 0) {
226
- if (translationX > leftThreshold) {
201
+ if (translationX > leftThresholdProp) {
227
202
  toValue = leftWidth.value;
228
- } else if (translationX < -rightThreshold) {
203
+ } else if (translationX < -rightThresholdProp) {
229
204
  toValue = -rightWidth.value;
230
205
  }
231
206
  } else if (rowState.value === 1) {
232
207
  // Swiped to left
233
- if (translationX > -leftThreshold) {
208
+ if (translationX > -leftThresholdProp) {
234
209
  toValue = leftWidth.value;
235
210
  }
236
211
  } else {
237
212
  // Swiped to right
238
- if (translationX < rightThreshold) {
213
+ if (translationX < rightThresholdProp) {
239
214
  toValue = -rightWidth.value;
240
215
  }
241
216
  }
242
217
 
243
- animateRow(startOffsetX, toValue, velocityX / friction);
244
- };
245
-
246
- const close = () => {
218
+ animateRow(toValue, velocityX / friction);
219
+ }, [animateRow, friction, leftThreshold, leftWidth, rightThreshold, rightWidth, rowState, userDrag, updateRightElementWidth]);
220
+ const close = useCallback(() => {
247
221
  'worklet';
248
222
 
249
- animateRow(calculateCurrentOffset(), 0);
250
- };
251
-
252
- const tapGesture = Gesture.Tap().onStart(() => {
223
+ animateRow(0);
224
+ }, [animateRow]);
225
+ const dragStarted = useSharedValue(false);
226
+ const tapGesture = useMemo(() => Gesture.Tap().shouldCancelWhenOutside(true).onStart(() => {
253
227
  if (rowState.value !== 0) {
254
228
  close();
255
229
  }
256
- });
257
- const panGesture = Gesture.Pan().onUpdate(event => {
230
+ }), [close, rowState]);
231
+ const panGesture = useMemo(() => Gesture.Pan().enabled(enabled !== false).enableTrackpadTwoFingerGesture(enableTrackpadTwoFingerGesture).activeOffsetX([-dragOffsetFromRightEdge, dragOffsetFromLeftEdge]).onStart(() => {
232
+ updateRightElementWidth();
233
+ }).onUpdate(event => {
258
234
  userDrag.value = event.translationX;
259
- const direction = rowState.value === -1 ? 'right' : rowState.value === 1 ? 'left' : event.translationX > 0 ? 'left' : 'right';
235
+ const direction = rowState.value === -1 ? SwipeDirection.RIGHT : rowState.value === 1 ? SwipeDirection.LEFT : event.translationX > 0 ? SwipeDirection.RIGHT : SwipeDirection.LEFT;
236
+
237
+ if (!dragStarted.value) {
238
+ dragStarted.value = true;
260
239
 
261
- if (rowState.value === 0 && onSwipeableOpenStartDrag) {
262
- runOnJS(onSwipeableOpenStartDrag)(direction);
263
- } else if (rowState.value !== 0 && onSwipeableCloseStartDrag) {
264
- runOnJS(onSwipeableCloseStartDrag)(direction);
240
+ if (rowState.value === 0 && onSwipeableOpenStartDrag) {
241
+ runOnJS(onSwipeableOpenStartDrag)(direction);
242
+ } else if (onSwipeableCloseStartDrag) {
243
+ runOnJS(onSwipeableCloseStartDrag)(direction);
244
+ }
265
245
  }
266
246
 
267
247
  updateAnimatedEvent();
268
248
  }).onEnd(event => {
269
249
  handleRelease(event);
270
- });
271
-
272
- if (enableTrackpadTwoFingerGesture) {
273
- panGesture.enableTrackpadTwoFingerGesture(enableTrackpadTwoFingerGesture);
274
- }
275
-
276
- panGesture.activeOffsetX([-dragOffsetFromRightEdge, dragOffsetFromLeftEdge]);
277
- tapGesture.shouldCancelWhenOutside(true);
278
- useImperativeHandle(ref, () => swipeableMethods.current, [swipeableMethods]);
279
- panGesture.enabled(enabled !== false);
250
+ }).onFinalize(() => {
251
+ dragStarted.value = false;
252
+ }), [dragOffsetFromLeftEdge, dragOffsetFromRightEdge, dragStarted, enableTrackpadTwoFingerGesture, enabled, handleRelease, onSwipeableCloseStartDrag, onSwipeableOpenStartDrag, rowState, updateAnimatedEvent, updateRightElementWidth, userDrag]);
253
+ useImperativeHandle(ref, () => swipeableMethods, [swipeableMethods]);
280
254
  const animatedStyle = useAnimatedStyle(() => ({
281
255
  transform: [{
282
256
  translateX: appliedTranslation.value
@@ -289,7 +263,7 @@ const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
289
263
  }, /*#__PURE__*/React.createElement(Animated.View, _extends({}, remainingProps, {
290
264
  onLayout: onRowLayout,
291
265
  style: [styles.container, containerStyle]
292
- }), leftElement, rightElement, /*#__PURE__*/React.createElement(GestureDetector, {
266
+ }), leftElement(), rightElement(), /*#__PURE__*/React.createElement(GestureDetector, {
293
267
  gesture: tapGesture,
294
268
  touchAction: "pan-y"
295
269
  }, /*#__PURE__*/React.createElement(Animated.View, {