react-native-gesture-handler 2.21.2 → 2.22.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 (202) hide show
  1. package/README.md +1 -3
  2. package/android/build.gradle +10 -0
  3. package/android/package77/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +85 -0
  4. package/android/{src → packageDeprecated/src}/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +2 -3
  5. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +3 -2
  6. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +3 -2
  7. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +16 -0
  8. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +1 -1
  9. package/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt +45 -8
  10. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +18 -0
  11. package/apple/Handlers/RNFlingHandler.m +0 -1
  12. package/apple/Handlers/RNForceTouchHandler.m +0 -1
  13. package/apple/Handlers/RNLongPressHandler.m +0 -1
  14. package/apple/Handlers/RNManualHandler.m +0 -1
  15. package/apple/Handlers/RNPanHandler.m +0 -3
  16. package/apple/Handlers/RNPinchHandler.m +0 -1
  17. package/apple/Handlers/RNRotationHandler.m +0 -1
  18. package/apple/Handlers/RNTapHandler.m +0 -1
  19. package/apple/RNGestureHandlerButton.h +1 -0
  20. package/apple/RNGestureHandlerButton.mm +51 -0
  21. package/apple/RNGestureHandlerManager.mm +6 -1
  22. package/apple/RNManualActivationRecognizer.m +1 -0
  23. package/lib/commonjs/ActionType.js.map +1 -1
  24. package/lib/commonjs/Directions.js.map +1 -1
  25. package/lib/commonjs/EnableNewWebImplementation.js +14 -1
  26. package/lib/commonjs/EnableNewWebImplementation.js.map +1 -1
  27. package/lib/commonjs/State.js.map +1 -1
  28. package/lib/commonjs/TouchEventType.js.map +1 -1
  29. package/lib/commonjs/components/Pressable/Pressable.js +1 -1
  30. package/lib/commonjs/components/Pressable/Pressable.js.map +1 -1
  31. package/lib/commonjs/components/ReanimatedSwipeable.js.map +1 -1
  32. package/lib/commonjs/components/Swipeable.js.map +1 -1
  33. package/lib/commonjs/components/Text.js +61 -0
  34. package/lib/commonjs/components/Text.js.map +1 -0
  35. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  36. package/lib/commonjs/getShadowNodeFromRef.js +10 -2
  37. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
  38. package/lib/commonjs/ghQueueMicrotask.js.map +1 -1
  39. package/lib/commonjs/handlers/createHandler.js +12 -0
  40. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  41. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  42. package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js +4 -0
  43. package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -1
  44. package/lib/commonjs/handlers/gestures/GestureDetector/dropHandlers.js +4 -0
  45. package/lib/commonjs/handlers/gestures/GestureDetector/dropHandlers.js.map +1 -1
  46. package/lib/commonjs/handlers/gestures/GestureDetector/index.js +3 -0
  47. package/lib/commonjs/handlers/gestures/GestureDetector/index.js.map +1 -1
  48. package/lib/commonjs/handlers/gestures/GestureDetector/useMountReactions.js +48 -0
  49. package/lib/commonjs/handlers/gestures/GestureDetector/useMountReactions.js.map +1 -0
  50. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  51. package/lib/commonjs/handlers/utils.js +1 -0
  52. package/lib/commonjs/handlers/utils.js.map +1 -1
  53. package/lib/commonjs/index.js +8 -0
  54. package/lib/commonjs/index.js.map +1 -1
  55. package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
  56. package/lib/commonjs/mountRegistry.js +49 -0
  57. package/lib/commonjs/mountRegistry.js.map +1 -0
  58. package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
  59. package/lib/commonjs/web/handlers/FlingGestureHandler.js +0 -4
  60. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  61. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  62. package/lib/commonjs/web/handlers/HoverGestureHandler.js +0 -14
  63. package/lib/commonjs/web/handlers/HoverGestureHandler.js.map +1 -1
  64. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +6 -0
  65. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  66. package/lib/commonjs/web/handlers/ManualGestureHandler.js +0 -14
  67. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
  68. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +3 -5
  69. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  70. package/lib/commonjs/web/handlers/PanGestureHandler.js +0 -4
  71. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  72. package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -10
  73. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  74. package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -14
  75. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  76. package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -4
  77. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  78. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  79. package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
  80. package/lib/commonjs/web_hammer/PressGestureHandler.js.map +1 -1
  81. package/lib/module/ActionType.js.map +1 -1
  82. package/lib/module/Directions.js.map +1 -1
  83. package/lib/module/EnableNewWebImplementation.js +14 -1
  84. package/lib/module/EnableNewWebImplementation.js.map +1 -1
  85. package/lib/module/State.js.map +1 -1
  86. package/lib/module/TouchEventType.js.map +1 -1
  87. package/lib/module/components/Pressable/Pressable.js +1 -1
  88. package/lib/module/components/Pressable/Pressable.js.map +1 -1
  89. package/lib/module/components/ReanimatedSwipeable.js.map +1 -1
  90. package/lib/module/components/Swipeable.js.map +1 -1
  91. package/lib/module/components/Text.js +44 -0
  92. package/lib/module/components/Text.js.map +1 -0
  93. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  94. package/lib/module/getShadowNodeFromRef.js +10 -2
  95. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  96. package/lib/module/ghQueueMicrotask.js.map +1 -1
  97. package/lib/module/handlers/createHandler.js +11 -0
  98. package/lib/module/handlers/createHandler.js.map +1 -1
  99. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  100. package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js +3 -0
  101. package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -1
  102. package/lib/module/handlers/gestures/GestureDetector/dropHandlers.js +2 -0
  103. package/lib/module/handlers/gestures/GestureDetector/dropHandlers.js.map +1 -1
  104. package/lib/module/handlers/gestures/GestureDetector/index.js +2 -0
  105. package/lib/module/handlers/gestures/GestureDetector/index.js.map +1 -1
  106. package/lib/module/handlers/gestures/GestureDetector/useMountReactions.js +39 -0
  107. package/lib/module/handlers/gestures/GestureDetector/useMountReactions.js.map +1 -0
  108. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  109. package/lib/module/handlers/utils.js +1 -3
  110. package/lib/module/handlers/utils.js.map +1 -1
  111. package/lib/module/index.js +1 -0
  112. package/lib/module/index.js.map +1 -1
  113. package/lib/module/jestUtils/jestUtils.js.map +1 -1
  114. package/lib/module/mountRegistry.js +40 -0
  115. package/lib/module/mountRegistry.js.map +1 -0
  116. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
  117. package/lib/module/web/handlers/FlingGestureHandler.js +0 -4
  118. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  119. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  120. package/lib/module/web/handlers/HoverGestureHandler.js +0 -14
  121. package/lib/module/web/handlers/HoverGestureHandler.js.map +1 -1
  122. package/lib/module/web/handlers/LongPressGestureHandler.js +6 -0
  123. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  124. package/lib/module/web/handlers/ManualGestureHandler.js +0 -14
  125. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
  126. package/lib/module/web/handlers/NativeViewGestureHandler.js +3 -5
  127. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  128. package/lib/module/web/handlers/PanGestureHandler.js +0 -4
  129. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  130. package/lib/module/web/handlers/PinchGestureHandler.js +0 -10
  131. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  132. package/lib/module/web/handlers/RotationGestureHandler.js +0 -14
  133. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  134. package/lib/module/web/handlers/TapGestureHandler.js +0 -4
  135. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  136. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  137. package/lib/module/web_hammer/GestureHandler.js.map +1 -1
  138. package/lib/module/web_hammer/PressGestureHandler.js.map +1 -1
  139. package/lib/typescript/ActionType.d.ts +1 -1
  140. package/lib/typescript/Directions.d.ts +2 -2
  141. package/lib/typescript/EnableNewWebImplementation.d.ts +6 -0
  142. package/lib/typescript/State.d.ts +1 -1
  143. package/lib/typescript/TouchEventType.d.ts +1 -1
  144. package/lib/typescript/components/GestureButtonsProps.d.ts +2 -2
  145. package/lib/typescript/components/Text.d.ts +4 -0
  146. package/lib/typescript/components/touchables/GenericTouchable.d.ts +1 -1
  147. package/lib/typescript/handlers/GestureHandlerEventPayload.d.ts +2 -2
  148. package/lib/typescript/handlers/gestures/GestureDetector/useMountReactions.d.ts +2 -0
  149. package/lib/typescript/handlers/gestures/gesture.d.ts +1 -1
  150. package/lib/typescript/handlers/utils.d.ts +1 -0
  151. package/lib/typescript/index.d.ts +1 -0
  152. package/lib/typescript/mocks.d.ts +3 -3
  153. package/lib/typescript/mountRegistry.d.ts +17 -0
  154. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +0 -2
  155. package/lib/typescript/web/handlers/HoverGestureHandler.d.ts +1 -4
  156. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +1 -0
  157. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +1 -4
  158. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +0 -1
  159. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +0 -2
  160. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +1 -2
  161. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +1 -3
  162. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +0 -2
  163. package/package.json +18 -17
  164. package/src/ActionType.ts +1 -1
  165. package/src/Directions.ts +2 -2
  166. package/src/EnableNewWebImplementation.ts +18 -0
  167. package/src/State.ts +1 -1
  168. package/src/TouchEventType.ts +2 -1
  169. package/src/components/GestureButtonsProps.ts +4 -2
  170. package/src/components/Pressable/Pressable.tsx +3 -3
  171. package/src/components/ReanimatedSwipeable.tsx +8 -8
  172. package/src/components/Swipeable.tsx +4 -4
  173. package/src/components/Text.tsx +60 -0
  174. package/src/components/touchables/GenericTouchable.tsx +1 -1
  175. package/src/getShadowNodeFromRef.ts +8 -2
  176. package/src/ghQueueMicrotask.ts +2 -2
  177. package/src/handlers/GestureHandlerEventPayload.ts +2 -2
  178. package/src/handlers/createHandler.tsx +14 -1
  179. package/src/handlers/gestureHandlerCommon.ts +3 -3
  180. package/src/handlers/gestures/GestureDetector/attachHandlers.ts +3 -0
  181. package/src/handlers/gestures/GestureDetector/dropHandlers.ts +3 -0
  182. package/src/handlers/gestures/GestureDetector/index.tsx +3 -0
  183. package/src/handlers/gestures/GestureDetector/useMountReactions.ts +51 -0
  184. package/src/handlers/gestures/gesture.ts +3 -3
  185. package/src/handlers/utils.ts +2 -1
  186. package/src/index.ts +1 -0
  187. package/src/jestUtils/jestUtils.ts +10 -12
  188. package/src/mountRegistry.ts +51 -0
  189. package/src/web/detectors/ScaleGestureDetector.ts +1 -1
  190. package/src/web/handlers/FlingGestureHandler.ts +0 -4
  191. package/src/web/handlers/GestureHandler.ts +1 -3
  192. package/src/web/handlers/HoverGestureHandler.ts +1 -9
  193. package/src/web/handlers/LongPressGestureHandler.ts +6 -0
  194. package/src/web/handlers/ManualGestureHandler.ts +1 -9
  195. package/src/web/handlers/NativeViewGestureHandler.ts +5 -5
  196. package/src/web/handlers/PanGestureHandler.ts +0 -4
  197. package/src/web/handlers/PinchGestureHandler.ts +1 -5
  198. package/src/web/handlers/RotationGestureHandler.ts +1 -9
  199. package/src/web/handlers/TapGestureHandler.ts +0 -4
  200. package/src/web/tools/GestureHandlerWebDelegate.ts +4 -4
  201. package/src/web_hammer/GestureHandler.ts +1 -1
  202. package/src/web_hammer/PressGestureHandler.ts +7 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["ReanimatedSwipeable.tsx"],"names":["React","forwardRef","useCallback","useImperativeHandle","useMemo","GestureObjects","Gesture","GestureDetector","Animated","interpolate","runOnJS","useAnimatedStyle","useSharedValue","withSpring","I18nManager","StyleSheet","View","DRAG_TOSS","SwipeDirection","Swipeable","props","ref","defaultProps","friction","overshootFriction","dragOffset","enableTrackpadTwoFingerGesture","leftThreshold","rightThreshold","enabled","containerStyle","childrenContainerStyle","animationOptions","overshootLeft","overshootRight","testID","children","dragOffsetFromLeftEdge","dragOffsetFromRightEdge","onSwipeableOpenStartDrag","onSwipeableCloseStartDrag","onSwipeableWillOpen","onSwipeableWillClose","onSwipeableOpen","onSwipeableClose","renderLeftActions","renderRightActions","remainingProps","rowState","userDrag","appliedTranslation","rowWidth","leftWidth","rightWidth","rightOffset","showLeftProgress","showRightProgress","updateRightElementWidth","value","Math","max","updateAnimatedEvent","shouldOvershootLeft","shouldOvershootRight","startOffset","offsetDrag","dispatchImmediateEvents","fromValue","toValue","RIGHT","LEFT","dispatchEndEvents","animateRow","velocityX","translationSpringConfig","duration","dampingRatio","stiffness","velocity","overshootClamping","isClosing","moveToRight","usedWidth","progressSpringConfig","restDisplacementThreshold","restSpeedThreshold","frozenRowState","isFinished","progressTarget","sign","swipeableMethods","close","openLeft","openRight","reset","onRowLayout","nativeEvent","layout","width","leftElement","styles","leftActions","x","rightElement","rightActions","handleRelease","event","translationX","leftThresholdProp","rightThresholdProp","dragStarted","tapGesture","Tap","shouldCancelWhenOutside","onStart","panGesture","Pan","activeOffsetX","onUpdate","direction","onEnd","onFinalize","animatedStyle","transform","translateX","pointerEvents","swipeableComponent","container","create","overflow","absoluteFillObject","flexDirection","isRTL"],"mappings":"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","sourcesContent":["// Similarily to the DrawerLayout component this deserves to be put in a\n// separate repo. Although, keeping it here for the time being will allow us to\n// move faster and fix possible issues quicker\n\nimport React, {\n ForwardedRef,\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n} from 'react';\nimport { GestureObjects as Gesture } from '../handlers/gestures/gestureObjects';\nimport { GestureDetector } from '../handlers/gestures/GestureDetector';\nimport {\n GestureStateChangeEvent,\n GestureUpdateEvent,\n} from '../handlers/gestureHandlerCommon';\nimport type { PanGestureHandlerProps } from '../handlers/PanGestureHandler';\nimport type { PanGestureHandlerEventPayload } from '../handlers/GestureHandlerEventPayload';\nimport Animated, {\n SharedValue,\n interpolate,\n runOnJS,\n useAnimatedStyle,\n useSharedValue,\n withSpring,\n} from 'react-native-reanimated';\nimport {\n I18nManager,\n LayoutChangeEvent,\n StyleProp,\n StyleSheet,\n View,\n ViewStyle,\n} from 'react-native';\n\nconst DRAG_TOSS = 0.05;\n\ntype SwipeableExcludes = Exclude<\n keyof PanGestureHandlerProps,\n 'onGestureEvent' | 'onHandlerStateChange'\n>;\n\nenum SwipeDirection {\n LEFT = 'left',\n RIGHT = 'right',\n}\n\nexport interface SwipeableProps\n extends Pick<PanGestureHandlerProps, SwipeableExcludes> {\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 /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance. e.g. value of 1 will indicate that the swipeable panel\n * should exactly follow the gesture, 2 means it is going to be two times\n * \"slower\".\n */\n friction?: number;\n\n /**\n * Distance from the left edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n leftThreshold?: number;\n\n /**\n * Distance from the right edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n rightThreshold?: number;\n\n /**\n * Distance that the panel must be dragged from the left edge to be considered\n * a swipe. The default value is 10.\n */\n dragOffsetFromLeftEdge?: number;\n\n /**\n * Distance that the panel must be dragged from the right edge to be considered\n * a swipe. The default value is 10.\n */\n dragOffsetFromRightEdge?: number;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the left\n * actions panel's width. It is set to true by default as long as the left\n * panel render method is present.\n */\n overshootLeft?: boolean;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the\n * right actions panel's width. It is set to true by default as long as the\n * right panel render method is present.\n */\n overshootRight?: boolean;\n\n /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance at overshoot. Default value is 1, it mean no friction, for\n * a native feel, try 8 or above.\n */\n overshootFriction?: number;\n\n /**\n * Called when action panel gets open (either right or left).\n */\n onSwipeableOpen?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel is closed.\n */\n onSwipeableClose?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel starts animating on open (either right or left).\n */\n onSwipeableWillOpen?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel starts animating on close.\n */\n onSwipeableWillClose?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel starts being shown on dragging to open.\n */\n onSwipeableOpenStartDrag?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel starts being shown on dragging to close.\n */\n onSwipeableCloseStartDrag?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * `progress`: Equals `0` when `swipeable` is closed, `1` when `swipeable` is opened.\n * - When the element overshoots it's opened position the value tends towards `Infinity`.\n * - Goes back to `1` when `swipeable` is released.\n *\n * `translation`: a horizontal offset of the `swipeable` relative to its closed position.\\\n * `swipeableMethods`: provides an object exposing methods for controlling the `swipeable`.\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderLeftActions?: (\n progress: SharedValue<number>,\n translation: SharedValue<number>,\n swipeableMethods: SwipeableMethods\n ) => React.ReactNode;\n\n /**\n * `progress`: Equals `0` when `swipeable` is closed, `1` when `swipeable` is opened.\n * - When the element overshoots it's opened position the value tends towards `Infinity`.\n * - Goes back to `1` when `swipeable` is released.\n *\n * `translation`: a horizontal offset of the `swipeable` relative to its closed position.\\\n * `swipeableMethods`: provides an object exposing methods for controlling the `swipeable`.\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderRightActions?: (\n progress: SharedValue<number>,\n translation: SharedValue<number>,\n swipeableMethods: SwipeableMethods\n ) => React.ReactNode;\n\n animationOptions?: Record<string, unknown>;\n\n /**\n * Style object for the container (`Animated.View`), for example to override\n * `overflow: 'hidden'`.\n */\n containerStyle?: StyleProp<ViewStyle>;\n\n /**\n * Style object for the children container (`Animated.View`), for example to\n * apply `flex: 1`\n */\n childrenContainerStyle?: StyleProp<ViewStyle>;\n}\n\nexport interface SwipeableMethods {\n close: () => void;\n openLeft: () => void;\n openRight: () => void;\n reset: () => void;\n}\n\nconst Swipeable = forwardRef<SwipeableMethods, SwipeableProps>(\n function Swipeable(\n props: SwipeableProps,\n ref: ForwardedRef<SwipeableMethods>\n ) {\n const defaultProps = {\n friction: 1,\n overshootFriction: 1,\n dragOffset: 10,\n enableTrackpadTwoFingerGesture: false,\n };\n\n const {\n leftThreshold,\n rightThreshold,\n enabled,\n containerStyle,\n childrenContainerStyle,\n animationOptions,\n overshootLeft,\n overshootRight,\n testID,\n children,\n enableTrackpadTwoFingerGesture = defaultProps.enableTrackpadTwoFingerGesture,\n dragOffsetFromLeftEdge = defaultProps.dragOffset,\n dragOffsetFromRightEdge = defaultProps.dragOffset,\n friction = defaultProps.friction,\n overshootFriction = defaultProps.overshootFriction,\n onSwipeableOpenStartDrag,\n onSwipeableCloseStartDrag,\n onSwipeableWillOpen,\n onSwipeableWillClose,\n onSwipeableOpen,\n onSwipeableClose,\n renderLeftActions,\n renderRightActions,\n ...remainingProps\n } = props;\n\n const rowState = useSharedValue<number>(0);\n\n const userDrag = useSharedValue<number>(0);\n\n const appliedTranslation = useSharedValue<number>(0);\n\n const rowWidth = useSharedValue<number>(0);\n const leftWidth = useSharedValue<number>(0);\n const rightWidth = useSharedValue<number>(0);\n\n // used for synchronizing layout measurements between JS and UI\n const rightOffset = useSharedValue<number | null>(null);\n\n const showLeftProgress = useSharedValue<number>(0);\n const showRightProgress = useSharedValue<number>(0);\n\n const updateRightElementWidth = useCallback(() => {\n 'worklet';\n if (rightOffset.value === null) {\n rightOffset.value = rowWidth.value;\n }\n rightWidth.value = Math.max(0, rowWidth.value - rightOffset.value);\n }, [rightOffset, rightWidth, rowWidth]);\n\n const updateAnimatedEvent = useCallback(() => {\n 'worklet';\n\n const shouldOvershootLeft = overshootLeft ?? leftWidth.value > 0;\n const shouldOvershootRight = overshootRight ?? rightWidth.value > 0;\n\n const startOffset =\n rowState.value === 1\n ? leftWidth.value\n : rowState.value === -1\n ? -rightWidth.value\n : 0;\n\n const offsetDrag = userDrag.value / friction + startOffset;\n\n appliedTranslation.value = interpolate(\n offsetDrag,\n [\n -rightWidth.value - 1,\n -rightWidth.value,\n leftWidth.value,\n leftWidth.value + 1,\n ],\n [\n -rightWidth.value -\n (shouldOvershootRight ? 1 / overshootFriction : 0),\n -rightWidth.value,\n leftWidth.value,\n leftWidth.value + (shouldOvershootLeft ? 1 / overshootFriction : 0),\n ]\n );\n\n showLeftProgress.value =\n leftWidth.value > 0\n ? interpolate(\n appliedTranslation.value,\n [-1, 0, leftWidth.value],\n [0, 0, 1]\n )\n : 0;\n\n showRightProgress.value =\n rightWidth.value > 0\n ? interpolate(\n appliedTranslation.value,\n [-rightWidth.value, 0, 1],\n [1, 0, 0]\n )\n : 0;\n }, [\n appliedTranslation,\n friction,\n leftWidth,\n overshootFriction,\n rightWidth,\n rowState,\n showLeftProgress,\n showRightProgress,\n userDrag,\n overshootLeft,\n overshootRight,\n ]);\n\n const dispatchImmediateEvents = useCallback(\n (fromValue: number, toValue: number) => {\n 'worklet';\n if (toValue > 0 && onSwipeableWillOpen) {\n runOnJS(onSwipeableWillOpen)(SwipeDirection.RIGHT);\n } else if (toValue < 0 && onSwipeableWillOpen) {\n runOnJS(onSwipeableWillOpen)(SwipeDirection.LEFT);\n } else if (onSwipeableWillClose) {\n runOnJS(onSwipeableWillClose)(\n fromValue > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT\n );\n }\n },\n [onSwipeableWillClose, onSwipeableWillOpen]\n );\n\n const dispatchEndEvents = useCallback(\n (fromValue: number, toValue: number) => {\n 'worklet';\n if (toValue > 0 && onSwipeableOpen) {\n runOnJS(onSwipeableOpen)(SwipeDirection.RIGHT);\n } else if (toValue < 0 && onSwipeableOpen) {\n runOnJS(onSwipeableOpen)(SwipeDirection.LEFT);\n } else if (onSwipeableClose) {\n runOnJS(onSwipeableClose)(\n fromValue > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT\n );\n }\n },\n [onSwipeableClose, onSwipeableOpen]\n );\n\n const animateRow: (toValue: number, velocityX?: number) => void =\n useCallback(\n (toValue: number, velocityX?: number) => {\n 'worklet';\n\n const translationSpringConfig = {\n duration: 1000,\n dampingRatio: 0.9,\n stiffness: 500,\n velocity: velocityX,\n overshootClamping: true,\n ...animationOptions,\n };\n\n const isClosing = toValue === 0;\n const moveToRight = isClosing ? rowState.value < 0 : toValue > 0;\n\n const usedWidth = isClosing\n ? moveToRight\n ? rightWidth.value\n : leftWidth.value\n : moveToRight\n ? leftWidth.value\n : rightWidth.value;\n\n const progressSpringConfig = {\n ...translationSpringConfig,\n restDisplacementThreshold: 0.01,\n restSpeedThreshold: 0.01,\n velocity:\n velocityX &&\n interpolate(velocityX, [-usedWidth, usedWidth], [-1, 1]),\n };\n\n const frozenRowState = rowState.value;\n\n appliedTranslation.value = withSpring(\n toValue,\n translationSpringConfig,\n (isFinished) => {\n if (isFinished) {\n dispatchEndEvents(frozenRowState, toValue);\n }\n }\n );\n\n const progressTarget = toValue === 0 ? 0 : 1;\n\n showLeftProgress.value =\n leftWidth.value > 0\n ? withSpring(progressTarget, progressSpringConfig)\n : 0;\n showRightProgress.value =\n rightWidth.value > 0\n ? withSpring(progressTarget, progressSpringConfig)\n : 0;\n\n dispatchImmediateEvents(frozenRowState, toValue);\n\n rowState.value = Math.sign(toValue);\n },\n [\n rowState,\n animationOptions,\n appliedTranslation,\n showLeftProgress,\n leftWidth,\n showRightProgress,\n rightWidth,\n dispatchImmediateEvents,\n dispatchEndEvents,\n ]\n );\n\n const swipeableMethods = useMemo<SwipeableMethods>(\n () => ({\n close() {\n 'worklet';\n animateRow(0);\n },\n openLeft() {\n 'worklet';\n animateRow(leftWidth.value);\n },\n openRight() {\n 'worklet';\n // rightOffset and rowWidth are already much sooner than rightWidth\n animateRow((rightOffset.value ?? 0) - rowWidth.value);\n },\n reset() {\n 'worklet';\n userDrag.value = 0;\n showLeftProgress.value = 0;\n appliedTranslation.value = 0;\n rowState.value = 0;\n },\n }),\n [\n leftWidth,\n rightOffset,\n rowWidth,\n userDrag,\n showLeftProgress,\n appliedTranslation,\n rowState,\n animateRow,\n ]\n );\n\n const onRowLayout = useCallback(\n ({ nativeEvent }: LayoutChangeEvent) => {\n rowWidth.value = nativeEvent.layout.width;\n },\n [rowWidth]\n );\n\n const leftElement = useCallback(\n () => (\n <Animated.View style={[styles.leftActions]}>\n {renderLeftActions?.(\n showLeftProgress,\n appliedTranslation,\n swipeableMethods\n )}\n <View\n onLayout={({ nativeEvent }) =>\n (leftWidth.value = nativeEvent.layout.x)\n }\n />\n </Animated.View>\n ),\n [\n appliedTranslation,\n leftWidth,\n renderLeftActions,\n showLeftProgress,\n swipeableMethods,\n ]\n );\n\n const rightElement = useCallback(\n () => (\n <Animated.View style={[styles.rightActions]}>\n {renderRightActions?.(\n showRightProgress,\n appliedTranslation,\n swipeableMethods\n )}\n <View\n onLayout={({ nativeEvent }) => {\n rightOffset.value = nativeEvent.layout.x;\n }}\n />\n </Animated.View>\n ),\n [\n appliedTranslation,\n renderRightActions,\n rightOffset,\n showRightProgress,\n swipeableMethods,\n ]\n );\n\n const handleRelease = useCallback(\n (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {\n 'worklet';\n const { velocityX } = event;\n userDrag.value = event.translationX;\n\n updateRightElementWidth();\n\n const leftThresholdProp = leftThreshold ?? leftWidth.value / 2;\n const rightThresholdProp = rightThreshold ?? rightWidth.value / 2;\n\n const translationX =\n (userDrag.value + DRAG_TOSS * velocityX) / friction;\n\n let toValue = 0;\n\n if (rowState.value === 0) {\n if (translationX > leftThresholdProp) {\n toValue = leftWidth.value;\n } else if (translationX < -rightThresholdProp) {\n toValue = -rightWidth.value;\n }\n } else if (rowState.value === 1) {\n // Swiped to left\n if (translationX > -leftThresholdProp) {\n toValue = leftWidth.value;\n }\n } else {\n // Swiped to right\n if (translationX < rightThresholdProp) {\n toValue = -rightWidth.value;\n }\n }\n\n animateRow(toValue, velocityX / friction);\n },\n [\n animateRow,\n friction,\n leftThreshold,\n leftWidth,\n rightThreshold,\n rightWidth,\n rowState,\n userDrag,\n updateRightElementWidth,\n ]\n );\n\n const close = useCallback(() => {\n 'worklet';\n animateRow(0);\n }, [animateRow]);\n\n const dragStarted = useSharedValue<boolean>(false);\n\n const tapGesture = useMemo(\n () =>\n Gesture.Tap()\n .shouldCancelWhenOutside(true)\n .onStart(() => {\n if (rowState.value !== 0) {\n close();\n }\n }),\n [close, rowState]\n );\n\n const panGesture = useMemo(\n () =>\n Gesture.Pan()\n .enabled(enabled !== false)\n .enableTrackpadTwoFingerGesture(enableTrackpadTwoFingerGesture)\n .activeOffsetX([-dragOffsetFromRightEdge, dragOffsetFromLeftEdge])\n .onStart(() => {\n updateRightElementWidth();\n })\n .onUpdate(\n (event: GestureUpdateEvent<PanGestureHandlerEventPayload>) => {\n userDrag.value = event.translationX;\n\n const direction =\n rowState.value === -1\n ? SwipeDirection.RIGHT\n : rowState.value === 1\n ? SwipeDirection.LEFT\n : event.translationX > 0\n ? SwipeDirection.RIGHT\n : SwipeDirection.LEFT;\n\n if (!dragStarted.value) {\n dragStarted.value = true;\n if (rowState.value === 0 && onSwipeableOpenStartDrag) {\n runOnJS(onSwipeableOpenStartDrag)(direction);\n } else if (onSwipeableCloseStartDrag) {\n runOnJS(onSwipeableCloseStartDrag)(direction);\n }\n }\n\n updateAnimatedEvent();\n }\n )\n .onEnd(\n (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {\n handleRelease(event);\n }\n )\n .onFinalize(() => {\n dragStarted.value = false;\n }),\n [\n dragOffsetFromLeftEdge,\n dragOffsetFromRightEdge,\n dragStarted,\n enableTrackpadTwoFingerGesture,\n enabled,\n handleRelease,\n onSwipeableCloseStartDrag,\n onSwipeableOpenStartDrag,\n rowState,\n updateAnimatedEvent,\n updateRightElementWidth,\n userDrag,\n ]\n );\n\n useImperativeHandle(ref, () => swipeableMethods, [swipeableMethods]);\n\n const animatedStyle = useAnimatedStyle(\n () => ({\n transform: [{ translateX: appliedTranslation.value }],\n pointerEvents: rowState.value === 0 ? 'auto' : 'box-only',\n }),\n [appliedTranslation, rowState]\n );\n\n const swipeableComponent = (\n <GestureDetector gesture={panGesture} touchAction=\"pan-y\">\n <Animated.View\n {...remainingProps}\n onLayout={onRowLayout}\n style={[styles.container, containerStyle]}>\n {leftElement()}\n {rightElement()}\n <GestureDetector gesture={tapGesture} touchAction=\"pan-y\">\n <Animated.View style={[animatedStyle, childrenContainerStyle]}>\n {children}\n </Animated.View>\n </GestureDetector>\n </Animated.View>\n </GestureDetector>\n );\n\n return testID ? (\n <View testID={testID}>{swipeableComponent}</View>\n ) : (\n swipeableComponent\n );\n }\n);\n\nexport default Swipeable;\nexport type SwipeableRef = ForwardedRef<SwipeableMethods>;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n leftActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row-reverse' : 'row',\n },\n rightActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row' : 'row-reverse',\n },\n});\n"]}
1
+ {"version":3,"sources":["ReanimatedSwipeable.tsx"],"names":["React","forwardRef","useCallback","useImperativeHandle","useMemo","GestureObjects","Gesture","GestureDetector","Animated","interpolate","runOnJS","useAnimatedStyle","useSharedValue","withSpring","I18nManager","StyleSheet","View","DRAG_TOSS","SwipeDirection","Swipeable","props","ref","defaultProps","friction","overshootFriction","dragOffset","enableTrackpadTwoFingerGesture","leftThreshold","rightThreshold","enabled","containerStyle","childrenContainerStyle","animationOptions","overshootLeft","overshootRight","testID","children","dragOffsetFromLeftEdge","dragOffsetFromRightEdge","onSwipeableOpenStartDrag","onSwipeableCloseStartDrag","onSwipeableWillOpen","onSwipeableWillClose","onSwipeableOpen","onSwipeableClose","renderLeftActions","renderRightActions","remainingProps","rowState","userDrag","appliedTranslation","rowWidth","leftWidth","rightWidth","rightOffset","showLeftProgress","showRightProgress","updateRightElementWidth","value","Math","max","updateAnimatedEvent","shouldOvershootLeft","shouldOvershootRight","startOffset","offsetDrag","dispatchImmediateEvents","fromValue","toValue","RIGHT","LEFT","dispatchEndEvents","animateRow","velocityX","translationSpringConfig","duration","dampingRatio","stiffness","velocity","overshootClamping","isClosing","moveToRight","usedWidth","progressSpringConfig","restDisplacementThreshold","restSpeedThreshold","frozenRowState","isFinished","progressTarget","sign","swipeableMethods","close","openLeft","openRight","reset","onRowLayout","nativeEvent","layout","width","leftElement","styles","leftActions","x","rightElement","rightActions","handleRelease","event","translationX","leftThresholdProp","rightThresholdProp","dragStarted","tapGesture","Tap","shouldCancelWhenOutside","onStart","panGesture","Pan","activeOffsetX","onUpdate","direction","onEnd","onFinalize","animatedStyle","transform","translateX","pointerEvents","swipeableComponent","container","create","overflow","absoluteFillObject","flexDirection","isRTL"],"mappings":"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","sourcesContent":["// Similarily to the DrawerLayout component this deserves to be put in a\n// separate repo. Although, keeping it here for the time being will allow us to\n// move faster and fix possible issues quicker\n\nimport React, {\n ForwardedRef,\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n} from 'react';\nimport { GestureObjects as Gesture } from '../handlers/gestures/gestureObjects';\nimport { GestureDetector } from '../handlers/gestures/GestureDetector';\nimport {\n GestureStateChangeEvent,\n GestureUpdateEvent,\n} from '../handlers/gestureHandlerCommon';\nimport type { PanGestureHandlerProps } from '../handlers/PanGestureHandler';\nimport type { PanGestureHandlerEventPayload } from '../handlers/GestureHandlerEventPayload';\nimport Animated, {\n SharedValue,\n interpolate,\n runOnJS,\n useAnimatedStyle,\n useSharedValue,\n withSpring,\n} from 'react-native-reanimated';\nimport {\n I18nManager,\n LayoutChangeEvent,\n StyleProp,\n StyleSheet,\n View,\n ViewStyle,\n} from 'react-native';\n\nconst DRAG_TOSS = 0.05;\n\ntype SwipeableExcludes = Exclude<\n keyof PanGestureHandlerProps,\n 'onGestureEvent' | 'onHandlerStateChange'\n>;\n\nenum SwipeDirection {\n LEFT = 'left',\n RIGHT = 'right',\n}\n\nexport interface SwipeableProps\n extends Pick<PanGestureHandlerProps, SwipeableExcludes> {\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 /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance. e.g. value of 1 will indicate that the swipeable panel\n * should exactly follow the gesture, 2 means it is going to be two times\n * \"slower\".\n */\n friction?: number;\n\n /**\n * Distance from the left edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n leftThreshold?: number;\n\n /**\n * Distance from the right edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n rightThreshold?: number;\n\n /**\n * Distance that the panel must be dragged from the left edge to be considered\n * a swipe. The default value is 10.\n */\n dragOffsetFromLeftEdge?: number;\n\n /**\n * Distance that the panel must be dragged from the right edge to be considered\n * a swipe. The default value is 10.\n */\n dragOffsetFromRightEdge?: number;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the left\n * actions panel's width. It is set to true by default as long as the left\n * panel render method is present.\n */\n overshootLeft?: boolean;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the\n * right actions panel's width. It is set to true by default as long as the\n * right panel render method is present.\n */\n overshootRight?: boolean;\n\n /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance at overshoot. Default value is 1, it mean no friction, for\n * a native feel, try 8 or above.\n */\n overshootFriction?: number;\n\n /**\n * Called when action panel gets open (either right or left).\n */\n onSwipeableOpen?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel is closed.\n */\n onSwipeableClose?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel starts animating on open (either right or left).\n */\n onSwipeableWillOpen?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel starts animating on close.\n */\n onSwipeableWillClose?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel starts being shown on dragging to open.\n */\n onSwipeableOpenStartDrag?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel starts being shown on dragging to close.\n */\n onSwipeableCloseStartDrag?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * `progress`: Equals `0` when `swipeable` is closed, `1` when `swipeable` is opened.\n * - When the element overshoots it's opened position the value tends towards `Infinity`.\n * - Goes back to `1` when `swipeable` is released.\n *\n * `translation`: a horizontal offset of the `swipeable` relative to its closed position.\\\n * `swipeableMethods`: provides an object exposing methods for controlling the `swipeable`.\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderLeftActions?: (\n progress: SharedValue<number>,\n translation: SharedValue<number>,\n swipeableMethods: SwipeableMethods\n ) => React.ReactNode;\n\n /**\n * `progress`: Equals `0` when `swipeable` is closed, `1` when `swipeable` is opened.\n * - When the element overshoots it's opened position the value tends towards `Infinity`.\n * - Goes back to `1` when `swipeable` is released.\n *\n * `translation`: a horizontal offset of the `swipeable` relative to its closed position.\\\n * `swipeableMethods`: provides an object exposing methods for controlling the `swipeable`.\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderRightActions?: (\n progress: SharedValue<number>,\n translation: SharedValue<number>,\n swipeableMethods: SwipeableMethods\n ) => React.ReactNode;\n\n animationOptions?: Record<string, unknown>;\n\n /**\n * Style object for the container (`Animated.View`), for example to override\n * `overflow: 'hidden'`.\n */\n containerStyle?: StyleProp<ViewStyle>;\n\n /**\n * Style object for the children container (`Animated.View`), for example to\n * apply `flex: 1`\n */\n childrenContainerStyle?: StyleProp<ViewStyle>;\n}\n\nexport interface SwipeableMethods {\n close: () => void;\n openLeft: () => void;\n openRight: () => void;\n reset: () => void;\n}\n\nconst Swipeable = forwardRef<SwipeableMethods, SwipeableProps>(\n function Swipeable(\n props: SwipeableProps,\n ref: ForwardedRef<SwipeableMethods>\n ) {\n const defaultProps = {\n friction: 1,\n overshootFriction: 1,\n dragOffset: 10,\n enableTrackpadTwoFingerGesture: false,\n };\n\n const {\n leftThreshold,\n rightThreshold,\n enabled,\n containerStyle,\n childrenContainerStyle,\n animationOptions,\n overshootLeft,\n overshootRight,\n testID,\n children,\n enableTrackpadTwoFingerGesture = defaultProps.enableTrackpadTwoFingerGesture,\n dragOffsetFromLeftEdge = defaultProps.dragOffset,\n dragOffsetFromRightEdge = defaultProps.dragOffset,\n friction = defaultProps.friction,\n overshootFriction = defaultProps.overshootFriction,\n onSwipeableOpenStartDrag,\n onSwipeableCloseStartDrag,\n onSwipeableWillOpen,\n onSwipeableWillClose,\n onSwipeableOpen,\n onSwipeableClose,\n renderLeftActions,\n renderRightActions,\n ...remainingProps\n } = props;\n\n const rowState = useSharedValue<number>(0);\n\n const userDrag = useSharedValue<number>(0);\n\n const appliedTranslation = useSharedValue<number>(0);\n\n const rowWidth = useSharedValue<number>(0);\n const leftWidth = useSharedValue<number>(0);\n const rightWidth = useSharedValue<number>(0);\n\n // used for synchronizing layout measurements between JS and UI\n const rightOffset = useSharedValue<number | null>(null);\n\n const showLeftProgress = useSharedValue<number>(0);\n const showRightProgress = useSharedValue<number>(0);\n\n const updateRightElementWidth = useCallback(() => {\n 'worklet';\n if (rightOffset.value === null) {\n rightOffset.value = rowWidth.value;\n }\n rightWidth.value = Math.max(0, rowWidth.value - rightOffset.value);\n }, [rightOffset, rightWidth, rowWidth]);\n\n const updateAnimatedEvent = useCallback(() => {\n 'worklet';\n\n const shouldOvershootLeft = overshootLeft ?? leftWidth.value > 0;\n const shouldOvershootRight = overshootRight ?? rightWidth.value > 0;\n\n const startOffset =\n rowState.value === 1\n ? leftWidth.value\n : rowState.value === -1\n ? -rightWidth.value\n : 0;\n\n const offsetDrag = userDrag.value / friction + startOffset;\n\n appliedTranslation.value = interpolate(\n offsetDrag,\n [\n -rightWidth.value - 1,\n -rightWidth.value,\n leftWidth.value,\n leftWidth.value + 1,\n ],\n [\n -rightWidth.value -\n (shouldOvershootRight ? 1 / overshootFriction : 0),\n -rightWidth.value,\n leftWidth.value,\n leftWidth.value + (shouldOvershootLeft ? 1 / overshootFriction : 0),\n ]\n );\n\n showLeftProgress.value =\n leftWidth.value > 0\n ? interpolate(\n appliedTranslation.value,\n [-1, 0, leftWidth.value],\n [0, 0, 1]\n )\n : 0;\n\n showRightProgress.value =\n rightWidth.value > 0\n ? interpolate(\n appliedTranslation.value,\n [-rightWidth.value, 0, 1],\n [1, 0, 0]\n )\n : 0;\n }, [\n appliedTranslation,\n friction,\n leftWidth,\n overshootFriction,\n rightWidth,\n rowState,\n showLeftProgress,\n showRightProgress,\n userDrag,\n overshootLeft,\n overshootRight,\n ]);\n\n const dispatchImmediateEvents = useCallback(\n (fromValue: number, toValue: number) => {\n 'worklet';\n if (toValue > 0 && onSwipeableWillOpen) {\n runOnJS(onSwipeableWillOpen)(SwipeDirection.RIGHT);\n } else if (toValue < 0 && onSwipeableWillOpen) {\n runOnJS(onSwipeableWillOpen)(SwipeDirection.LEFT);\n } else if (onSwipeableWillClose) {\n runOnJS(onSwipeableWillClose)(\n fromValue > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT\n );\n }\n },\n [onSwipeableWillClose, onSwipeableWillOpen]\n );\n\n const dispatchEndEvents = useCallback(\n (fromValue: number, toValue: number) => {\n 'worklet';\n if (toValue > 0 && onSwipeableOpen) {\n runOnJS(onSwipeableOpen)(SwipeDirection.RIGHT);\n } else if (toValue < 0 && onSwipeableOpen) {\n runOnJS(onSwipeableOpen)(SwipeDirection.LEFT);\n } else if (onSwipeableClose) {\n runOnJS(onSwipeableClose)(\n fromValue > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT\n );\n }\n },\n [onSwipeableClose, onSwipeableOpen]\n );\n\n const animateRow: (toValue: number, velocityX?: number) => void =\n useCallback(\n (toValue: number, velocityX?: number) => {\n 'worklet';\n\n const translationSpringConfig = {\n duration: 1000,\n dampingRatio: 0.9,\n stiffness: 500,\n velocity: velocityX,\n overshootClamping: true,\n ...animationOptions,\n };\n\n const isClosing = toValue === 0;\n const moveToRight = isClosing ? rowState.value < 0 : toValue > 0;\n\n const usedWidth = isClosing\n ? moveToRight\n ? rightWidth.value\n : leftWidth.value\n : moveToRight\n ? leftWidth.value\n : rightWidth.value;\n\n const progressSpringConfig = {\n ...translationSpringConfig,\n restDisplacementThreshold: 0.01,\n restSpeedThreshold: 0.01,\n velocity:\n velocityX &&\n interpolate(velocityX, [-usedWidth, usedWidth], [-1, 1]),\n };\n\n const frozenRowState = rowState.value;\n\n appliedTranslation.value = withSpring(\n toValue,\n translationSpringConfig,\n (isFinished) => {\n if (isFinished) {\n dispatchEndEvents(frozenRowState, toValue);\n }\n }\n );\n\n const progressTarget = toValue === 0 ? 0 : 1;\n\n showLeftProgress.value =\n leftWidth.value > 0\n ? withSpring(progressTarget, progressSpringConfig)\n : 0;\n showRightProgress.value =\n rightWidth.value > 0\n ? withSpring(progressTarget, progressSpringConfig)\n : 0;\n\n dispatchImmediateEvents(frozenRowState, toValue);\n\n rowState.value = Math.sign(toValue);\n },\n [\n rowState,\n animationOptions,\n appliedTranslation,\n showLeftProgress,\n leftWidth,\n showRightProgress,\n rightWidth,\n dispatchImmediateEvents,\n dispatchEndEvents,\n ]\n );\n\n const swipeableMethods = useMemo<SwipeableMethods>(\n () => ({\n close() {\n 'worklet';\n animateRow(0);\n },\n openLeft() {\n 'worklet';\n animateRow(leftWidth.value);\n },\n openRight() {\n 'worklet';\n // rightOffset and rowWidth are already much sooner than rightWidth\n animateRow((rightOffset.value ?? 0) - rowWidth.value);\n },\n reset() {\n 'worklet';\n userDrag.value = 0;\n showLeftProgress.value = 0;\n appliedTranslation.value = 0;\n rowState.value = 0;\n },\n }),\n [\n leftWidth,\n rightOffset,\n rowWidth,\n userDrag,\n showLeftProgress,\n appliedTranslation,\n rowState,\n animateRow,\n ]\n );\n\n const onRowLayout = useCallback(\n ({ nativeEvent }: LayoutChangeEvent) => {\n rowWidth.value = nativeEvent.layout.width;\n },\n [rowWidth]\n );\n\n const leftElement = useCallback(\n () => (\n <Animated.View style={[styles.leftActions]}>\n {renderLeftActions?.(\n showLeftProgress,\n appliedTranslation,\n swipeableMethods\n )}\n <View\n onLayout={({ nativeEvent }) =>\n (leftWidth.value = nativeEvent.layout.x)\n }\n />\n </Animated.View>\n ),\n [\n appliedTranslation,\n leftWidth,\n renderLeftActions,\n showLeftProgress,\n swipeableMethods,\n ]\n );\n\n const rightElement = useCallback(\n () => (\n <Animated.View style={[styles.rightActions]}>\n {renderRightActions?.(\n showRightProgress,\n appliedTranslation,\n swipeableMethods\n )}\n <View\n onLayout={({ nativeEvent }) => {\n rightOffset.value = nativeEvent.layout.x;\n }}\n />\n </Animated.View>\n ),\n [\n appliedTranslation,\n renderRightActions,\n rightOffset,\n showRightProgress,\n swipeableMethods,\n ]\n );\n\n const handleRelease = useCallback(\n (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {\n 'worklet';\n const { velocityX } = event;\n userDrag.value = event.translationX;\n\n updateRightElementWidth();\n\n const leftThresholdProp = leftThreshold ?? leftWidth.value / 2;\n const rightThresholdProp = rightThreshold ?? rightWidth.value / 2;\n\n const translationX =\n (userDrag.value + DRAG_TOSS * velocityX) / friction;\n\n let toValue = 0;\n\n if (rowState.value === 0) {\n if (translationX > leftThresholdProp) {\n toValue = leftWidth.value;\n } else if (translationX < -rightThresholdProp) {\n toValue = -rightWidth.value;\n }\n } else if (rowState.value === 1) {\n // Swiped to left\n if (translationX > -leftThresholdProp) {\n toValue = leftWidth.value;\n }\n } else {\n // Swiped to right\n if (translationX < rightThresholdProp) {\n toValue = -rightWidth.value;\n }\n }\n\n animateRow(toValue, velocityX / friction);\n },\n [\n animateRow,\n friction,\n leftThreshold,\n leftWidth,\n rightThreshold,\n rightWidth,\n rowState,\n userDrag,\n updateRightElementWidth,\n ]\n );\n\n const close = useCallback(() => {\n 'worklet';\n animateRow(0);\n }, [animateRow]);\n\n const dragStarted = useSharedValue<boolean>(false);\n\n const tapGesture = useMemo(\n () =>\n Gesture.Tap()\n .shouldCancelWhenOutside(true)\n .onStart(() => {\n if (rowState.value !== 0) {\n close();\n }\n }),\n [close, rowState]\n );\n\n const panGesture = useMemo(\n () =>\n Gesture.Pan()\n .enabled(enabled !== false)\n .enableTrackpadTwoFingerGesture(enableTrackpadTwoFingerGesture)\n .activeOffsetX([-dragOffsetFromRightEdge, dragOffsetFromLeftEdge])\n .onStart(() => {\n updateRightElementWidth();\n })\n .onUpdate(\n (event: GestureUpdateEvent<PanGestureHandlerEventPayload>) => {\n userDrag.value = event.translationX;\n\n const direction =\n rowState.value === -1\n ? SwipeDirection.RIGHT\n : rowState.value === 1\n ? SwipeDirection.LEFT\n : event.translationX > 0\n ? SwipeDirection.RIGHT\n : SwipeDirection.LEFT;\n\n if (!dragStarted.value) {\n dragStarted.value = true;\n if (rowState.value === 0 && onSwipeableOpenStartDrag) {\n runOnJS(onSwipeableOpenStartDrag)(direction);\n } else if (onSwipeableCloseStartDrag) {\n runOnJS(onSwipeableCloseStartDrag)(direction);\n }\n }\n\n updateAnimatedEvent();\n }\n )\n .onEnd(\n (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {\n handleRelease(event);\n }\n )\n .onFinalize(() => {\n dragStarted.value = false;\n }),\n [\n dragOffsetFromLeftEdge,\n dragOffsetFromRightEdge,\n dragStarted,\n enableTrackpadTwoFingerGesture,\n enabled,\n handleRelease,\n onSwipeableCloseStartDrag,\n onSwipeableOpenStartDrag,\n rowState,\n updateAnimatedEvent,\n updateRightElementWidth,\n userDrag,\n ]\n );\n\n useImperativeHandle(ref, () => swipeableMethods, [swipeableMethods]);\n\n const animatedStyle = useAnimatedStyle(\n () => ({\n transform: [{ translateX: appliedTranslation.value }],\n pointerEvents: rowState.value === 0 ? 'auto' : 'box-only',\n }),\n [appliedTranslation, rowState]\n );\n\n const swipeableComponent = (\n <GestureDetector gesture={panGesture} touchAction=\"pan-y\">\n <Animated.View\n {...remainingProps}\n onLayout={onRowLayout}\n style={[styles.container, containerStyle]}>\n {leftElement()}\n {rightElement()}\n <GestureDetector gesture={tapGesture} touchAction=\"pan-y\">\n <Animated.View style={[animatedStyle, childrenContainerStyle]}>\n {children}\n </Animated.View>\n </GestureDetector>\n </Animated.View>\n </GestureDetector>\n );\n\n return testID ? (\n <View testID={testID}>{swipeableComponent}</View>\n ) : (\n swipeableComponent\n );\n }\n);\n\nexport default Swipeable;\nexport type SwipeableRef = ForwardedRef<SwipeableMethods>;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n leftActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row-reverse' : 'row',\n },\n rightActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row' : 'row-reverse',\n },\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["Swipeable.tsx"],"names":["React","Component","Animated","StyleSheet","View","I18nManager","PanGestureHandler","TapGestureHandler","State","DRAG_TOSS","Swipeable","constructor","props","state","friction","overshootFriction","dragX","rowTranslation","leftWidth","rowWidth","rightOffset","rightWidth","Math","max","overshootLeft","overshootRight","transX","add","interpolate","inputRange","outputRange","showLeftAction","Value","leftActionTranslate","Number","MIN_VALUE","extrapolate","showRightAction","rightActionTranslate","nativeEvent","oldState","ACTIVE","close","ev","handleRelease","velocityX","translationX","rowState","direction","onSwipeableOpenStartDrag","onSwipeableCloseStartDrag","leftThreshold","rightThreshold","startOffsetX","currentOffset","toValue","animateRow","fromValue","setValue","setState","sign","spring","restSpeedThreshold","restDisplacementThreshold","velocity","bounciness","useNativeDriver","useNativeAnimations","animationOptions","start","finished","onSwipeableLeftOpen","onSwipeableOpen","onSwipeableRightOpen","closingDirection","onSwipeableClose","onSwipeableLeftWillOpen","onSwipeableWillOpen","onSwipeableRightWillOpen","onSwipeableWillClose","layout","width","undefined","updateAnimatedEvent","onGestureEvent","event","shouldComponentUpdate","render","children","renderLeftActions","renderRightActions","dragOffsetFromLeftEdge","dragOffsetFromRightEdge","left","styles","leftActions","transform","translateX","x","right","rightActions","onHandlerStateChange","onRowLayout","container","containerStyle","onTapHandlerStateChange","childrenContainerStyle","create","overflow","absoluteFillObject","flexDirection","isRTL"],"mappings":"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","sourcesContent":["// Similarily to the DrawerLayout component this deserves to be put in a\n// separate repo. Although, keeping it here for the time being will allow us to\n// move faster and fix possible issues quicker\n\nimport * as React from 'react';\nimport { Component } from 'react';\nimport {\n Animated,\n StyleSheet,\n View,\n I18nManager,\n LayoutChangeEvent,\n StyleProp,\n ViewStyle,\n} from 'react-native';\n\nimport {\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../handlers/gestureHandlerCommon';\nimport {\n PanGestureHandler,\n PanGestureHandlerProps,\n} from '../handlers/PanGestureHandler';\nimport {\n PanGestureHandlerEventPayload,\n TapGestureHandlerEventPayload,\n} from '../handlers/GestureHandlerEventPayload';\nimport { TapGestureHandler } from '../handlers/TapGestureHandler';\nimport { State } from '../State';\n\nconst DRAG_TOSS = 0.05;\n\ntype SwipeableExcludes = Exclude<\n keyof PanGestureHandlerProps,\n 'onGestureEvent' | 'onHandlerStateChange'\n>;\n\n// Animated.AnimatedInterpolation has been converted to a generic type\n// in @types/react-native 0.70. This way we can maintain compatibility\n// with all versions of @types/react-native\ntype AnimatedInterpolation = ReturnType<Animated.Value['interpolate']>;\n\nexport interface SwipeableProps\n extends Pick<PanGestureHandlerProps, SwipeableExcludes> {\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 /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance. e.g. value of 1 will indicate that the swipeable panel\n * should exactly follow the gesture, 2 means it is going to be two times\n * \"slower\".\n */\n friction?: number;\n\n /**\n * Distance from the left edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n leftThreshold?: number;\n\n /**\n * Distance from the right edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n rightThreshold?: number;\n\n /**\n * Distance that the panel must be dragged from the left edge to be considered\n * a swipe. The default value is 10.\n */\n dragOffsetFromLeftEdge?: number;\n\n /**\n * Distance that the panel must be dragged from the right edge to be considered\n * a swipe. The default value is 10.\n */\n dragOffsetFromRightEdge?: number;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the left\n * actions panel's width. It is set to true by default as long as the left\n * panel render method is present.\n */\n overshootLeft?: boolean;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the\n * right actions panel's width. It is set to true by default as long as the\n * right panel render method is present.\n */\n overshootRight?: boolean;\n\n /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance at overshoot. Default value is 1, it mean no friction, for\n * a native feel, try 8 or above.\n */\n overshootFriction?: number;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableOpen()\n *\n * Called when left action panel gets open.\n */\n onSwipeableLeftOpen?: () => void;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableOpen()\n *\n * Called when right action panel gets open.\n */\n onSwipeableRightOpen?: () => void;\n\n /**\n * Called when action panel gets open (either right or left).\n */\n onSwipeableOpen?: (direction: 'left' | 'right', swipeable: Swipeable) => void;\n\n /**\n * Called when action panel is closed.\n */\n onSwipeableClose?: (\n direction: 'left' | 'right',\n swipeable: Swipeable\n ) => void;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableWillOpen()\n *\n * Called when left action panel starts animating on open.\n */\n onSwipeableLeftWillOpen?: () => void;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableWillOpen()\n *\n * Called when right action panel starts animating on open.\n */\n onSwipeableRightWillOpen?: () => void;\n\n /**\n * Called when action panel starts animating on open (either right or left).\n */\n onSwipeableWillOpen?: (direction: 'left' | 'right') => void;\n\n /**\n * Called when action panel starts animating on close.\n */\n onSwipeableWillClose?: (direction: 'left' | 'right') => void;\n\n /**\n * Called when action panel starts being shown on dragging to open.\n */\n onSwipeableOpenStartDrag?: (direction: 'left' | 'right') => void;\n\n /**\n * Called when action panel starts being shown on dragging to close.\n */\n onSwipeableCloseStartDrag?: (direction: 'left' | 'right') => void;\n\n /**\n *\n * This map describes the values to use as inputRange for extra interpolation:\n * AnimatedValue: [startValue, endValue]\n *\n * progressAnimatedValue: [0, 1] dragAnimatedValue: [0, +]\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderLeftActions?: (\n progressAnimatedValue: AnimatedInterpolation,\n dragAnimatedValue: AnimatedInterpolation,\n swipeable: Swipeable\n ) => React.ReactNode;\n /**\n *\n * This map describes the values to use as inputRange for extra interpolation:\n * AnimatedValue: [startValue, endValue]\n *\n * progressAnimatedValue: [0, 1] dragAnimatedValue: [0, -]\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderRightActions?: (\n progressAnimatedValue: AnimatedInterpolation,\n dragAnimatedValue: AnimatedInterpolation,\n swipeable: Swipeable\n ) => React.ReactNode;\n\n useNativeAnimations?: boolean;\n\n animationOptions?: Record<string, unknown>;\n\n /**\n * Style object for the container (`Animated.View`), for example to override\n * `overflow: 'hidden'`.\n */\n containerStyle?: StyleProp<ViewStyle>;\n\n /**\n * Style object for the children container (`Animated.View`), for example to\n * apply `flex: 1`\n */\n childrenContainerStyle?: StyleProp<ViewStyle>;\n}\n\ntype SwipeableState = {\n dragX: Animated.Value;\n rowTranslation: Animated.Value;\n rowState: number;\n leftWidth?: number;\n rightOffset?: number;\n rowWidth?: number;\n};\n\n/**\n * @deprecated use Reanimated version of Swipeable instead\n *\n * This component allows for implementing swipeable rows or similar interaction.\n */\n\nexport default class Swipeable extends Component<\n SwipeableProps,\n SwipeableState\n> {\n static defaultProps = {\n friction: 1,\n overshootFriction: 1,\n useNativeAnimations: true,\n };\n\n constructor(props: SwipeableProps) {\n super(props);\n const dragX = new Animated.Value(0);\n this.state = {\n dragX,\n rowTranslation: new Animated.Value(0),\n rowState: 0,\n leftWidth: undefined,\n rightOffset: undefined,\n rowWidth: undefined,\n };\n this.updateAnimatedEvent(props, this.state);\n\n this.onGestureEvent = Animated.event(\n [{ nativeEvent: { translationX: dragX } }],\n { useNativeDriver: props.useNativeAnimations! }\n );\n }\n\n shouldComponentUpdate(props: SwipeableProps, state: SwipeableState) {\n if (\n this.props.friction !== props.friction ||\n this.props.overshootLeft !== props.overshootLeft ||\n this.props.overshootRight !== props.overshootRight ||\n this.props.overshootFriction !== props.overshootFriction ||\n this.state.leftWidth !== state.leftWidth ||\n this.state.rightOffset !== state.rightOffset ||\n this.state.rowWidth !== state.rowWidth\n ) {\n this.updateAnimatedEvent(props, state);\n }\n\n return true;\n }\n\n private onGestureEvent?: (\n event: GestureEvent<PanGestureHandlerEventPayload>\n ) => void;\n private transX?: AnimatedInterpolation;\n private showLeftAction?: AnimatedInterpolation | Animated.Value;\n private leftActionTranslate?: AnimatedInterpolation;\n private showRightAction?: AnimatedInterpolation | Animated.Value;\n private rightActionTranslate?: AnimatedInterpolation;\n\n private updateAnimatedEvent = (\n props: SwipeableProps,\n state: SwipeableState\n ) => {\n const { friction, overshootFriction } = props;\n const { dragX, rowTranslation, leftWidth = 0, rowWidth = 0 } = state;\n const { rightOffset = rowWidth } = state;\n const rightWidth = Math.max(0, rowWidth - rightOffset);\n\n const { overshootLeft = leftWidth > 0, overshootRight = rightWidth > 0 } =\n props;\n\n const transX = Animated.add(\n rowTranslation,\n dragX.interpolate({\n inputRange: [0, friction!],\n outputRange: [0, 1],\n })\n ).interpolate({\n inputRange: [-rightWidth - 1, -rightWidth, leftWidth, leftWidth + 1],\n outputRange: [\n -rightWidth - (overshootRight ? 1 / overshootFriction! : 0),\n -rightWidth,\n leftWidth,\n leftWidth + (overshootLeft ? 1 / overshootFriction! : 0),\n ],\n });\n this.transX = transX;\n this.showLeftAction =\n leftWidth > 0\n ? transX.interpolate({\n inputRange: [-1, 0, leftWidth],\n outputRange: [0, 0, 1],\n })\n : new Animated.Value(0);\n this.leftActionTranslate = this.showLeftAction.interpolate({\n inputRange: [0, Number.MIN_VALUE],\n outputRange: [-10000, 0],\n extrapolate: 'clamp',\n });\n this.showRightAction =\n rightWidth > 0\n ? transX.interpolate({\n inputRange: [-rightWidth, 0, 1],\n outputRange: [1, 0, 0],\n })\n : new Animated.Value(0);\n this.rightActionTranslate = this.showRightAction.interpolate({\n inputRange: [0, Number.MIN_VALUE],\n outputRange: [-10000, 0],\n extrapolate: 'clamp',\n });\n };\n\n private onTapHandlerStateChange = ({\n nativeEvent,\n }: HandlerStateChangeEvent<TapGestureHandlerEventPayload>) => {\n if (nativeEvent.oldState === State.ACTIVE) {\n this.close();\n }\n };\n\n private onHandlerStateChange = (\n ev: HandlerStateChangeEvent<PanGestureHandlerEventPayload>\n ) => {\n if (ev.nativeEvent.oldState === State.ACTIVE) {\n this.handleRelease(ev);\n }\n\n if (ev.nativeEvent.state === State.ACTIVE) {\n const { velocityX, translationX: dragX } = ev.nativeEvent;\n const { rowState } = this.state;\n const { friction } = this.props;\n\n const translationX = (dragX + DRAG_TOSS * velocityX) / friction!;\n\n const direction =\n rowState === -1\n ? 'right'\n : rowState === 1\n ? 'left'\n : translationX > 0\n ? 'left'\n : 'right';\n\n if (rowState === 0) {\n this.props.onSwipeableOpenStartDrag?.(direction);\n } else {\n this.props.onSwipeableCloseStartDrag?.(direction);\n }\n }\n };\n\n private handleRelease = (\n ev: HandlerStateChangeEvent<PanGestureHandlerEventPayload>\n ) => {\n const { velocityX, translationX: dragX } = ev.nativeEvent;\n const { leftWidth = 0, rowWidth = 0, rowState } = this.state;\n const { rightOffset = rowWidth } = this.state;\n const rightWidth = rowWidth - rightOffset;\n const {\n friction,\n leftThreshold = leftWidth / 2,\n rightThreshold = rightWidth / 2,\n } = this.props;\n\n const startOffsetX = this.currentOffset() + dragX / friction!;\n const translationX = (dragX + DRAG_TOSS * velocityX) / friction!;\n\n let toValue = 0;\n if (rowState === 0) {\n if (translationX > leftThreshold) {\n toValue = leftWidth;\n } else if (translationX < -rightThreshold) {\n toValue = -rightWidth;\n }\n } else if (rowState === 1) {\n // Swiped to left\n if (translationX > -leftThreshold) {\n toValue = leftWidth;\n }\n } else {\n // Swiped to right\n if (translationX < rightThreshold) {\n toValue = -rightWidth;\n }\n }\n\n this.animateRow(startOffsetX, toValue, velocityX / friction!);\n };\n\n private animateRow = (\n fromValue: number,\n toValue: number,\n velocityX?:\n | number\n | {\n x: number;\n y: number;\n }\n ) => {\n const { dragX, rowTranslation } = this.state;\n dragX.setValue(0);\n rowTranslation.setValue(fromValue);\n\n this.setState({ rowState: Math.sign(toValue) });\n Animated.spring(rowTranslation, {\n restSpeedThreshold: 1.7,\n restDisplacementThreshold: 0.4,\n velocity: velocityX,\n bounciness: 0,\n toValue,\n useNativeDriver: this.props.useNativeAnimations!,\n ...this.props.animationOptions,\n }).start(({ finished }) => {\n if (finished) {\n if (toValue > 0) {\n this.props.onSwipeableLeftOpen?.();\n this.props.onSwipeableOpen?.('left', this);\n } else if (toValue < 0) {\n this.props.onSwipeableRightOpen?.();\n this.props.onSwipeableOpen?.('right', this);\n } else {\n const closingDirection = fromValue > 0 ? 'left' : 'right';\n this.props.onSwipeableClose?.(closingDirection, this);\n }\n }\n });\n if (toValue > 0) {\n this.props.onSwipeableLeftWillOpen?.();\n this.props.onSwipeableWillOpen?.('left');\n } else if (toValue < 0) {\n this.props.onSwipeableRightWillOpen?.();\n this.props.onSwipeableWillOpen?.('right');\n } else {\n const closingDirection = fromValue > 0 ? 'left' : 'right';\n this.props.onSwipeableWillClose?.(closingDirection);\n }\n };\n\n private onRowLayout = ({ nativeEvent }: LayoutChangeEvent) => {\n this.setState({ rowWidth: nativeEvent.layout.width });\n };\n\n private currentOffset = () => {\n const { leftWidth = 0, rowWidth = 0, rowState } = this.state;\n const { rightOffset = rowWidth } = this.state;\n const rightWidth = rowWidth - rightOffset;\n if (rowState === 1) {\n return leftWidth;\n } else if (rowState === -1) {\n return -rightWidth;\n }\n return 0;\n };\n\n close = () => {\n this.animateRow(this.currentOffset(), 0);\n };\n\n openLeft = () => {\n const { leftWidth = 0 } = this.state;\n this.animateRow(this.currentOffset(), leftWidth);\n };\n\n openRight = () => {\n const { rowWidth = 0 } = this.state;\n const { rightOffset = rowWidth } = this.state;\n const rightWidth = rowWidth - rightOffset;\n this.animateRow(this.currentOffset(), -rightWidth);\n };\n\n reset = () => {\n const { dragX, rowTranslation } = this.state;\n dragX.setValue(0);\n rowTranslation.setValue(0);\n this.setState({ rowState: 0 });\n };\n\n render() {\n const { rowState } = this.state;\n const {\n children,\n renderLeftActions,\n renderRightActions,\n dragOffsetFromLeftEdge = 10,\n dragOffsetFromRightEdge = 10,\n } = this.props;\n\n const left = renderLeftActions && (\n <Animated.View\n style={[\n styles.leftActions,\n // All those and below parameters can have ! since they are all\n // asigned in constructor in `updateAnimatedEvent` but TS cannot spot\n // it for some reason\n { transform: [{ translateX: this.leftActionTranslate! }] },\n ]}>\n {renderLeftActions(this.showLeftAction!, this.transX!, this)}\n <View\n onLayout={({ nativeEvent }) =>\n this.setState({ leftWidth: nativeEvent.layout.x })\n }\n />\n </Animated.View>\n );\n\n const right = renderRightActions && (\n <Animated.View\n style={[\n styles.rightActions,\n { transform: [{ translateX: this.rightActionTranslate! }] },\n ]}>\n {renderRightActions(this.showRightAction!, this.transX!, this)}\n <View\n onLayout={({ nativeEvent }) =>\n this.setState({ rightOffset: nativeEvent.layout.x })\n }\n />\n </Animated.View>\n );\n\n return (\n <PanGestureHandler\n activeOffsetX={[-dragOffsetFromRightEdge, dragOffsetFromLeftEdge]}\n touchAction=\"pan-y\"\n {...this.props}\n onGestureEvent={this.onGestureEvent}\n onHandlerStateChange={this.onHandlerStateChange}>\n <Animated.View\n onLayout={this.onRowLayout}\n style={[styles.container, this.props.containerStyle]}>\n {left}\n {right}\n <TapGestureHandler\n enabled={rowState !== 0}\n touchAction=\"pan-y\"\n onHandlerStateChange={this.onTapHandlerStateChange}>\n <Animated.View\n pointerEvents={rowState === 0 ? 'auto' : 'box-only'}\n style={[\n {\n transform: [{ translateX: this.transX! }],\n },\n this.props.childrenContainerStyle,\n ]}>\n {children}\n </Animated.View>\n </TapGestureHandler>\n </Animated.View>\n </PanGestureHandler>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n leftActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row-reverse' : 'row',\n },\n rightActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row' : 'row-reverse',\n },\n});\n"]}
1
+ {"version":3,"sources":["Swipeable.tsx"],"names":["React","Component","Animated","StyleSheet","View","I18nManager","PanGestureHandler","TapGestureHandler","State","DRAG_TOSS","Swipeable","constructor","props","state","friction","overshootFriction","dragX","rowTranslation","leftWidth","rowWidth","rightOffset","rightWidth","Math","max","overshootLeft","overshootRight","transX","add","interpolate","inputRange","outputRange","showLeftAction","Value","leftActionTranslate","Number","MIN_VALUE","extrapolate","showRightAction","rightActionTranslate","nativeEvent","oldState","ACTIVE","close","ev","handleRelease","velocityX","translationX","rowState","direction","onSwipeableOpenStartDrag","onSwipeableCloseStartDrag","leftThreshold","rightThreshold","startOffsetX","currentOffset","toValue","animateRow","fromValue","setValue","setState","sign","spring","restSpeedThreshold","restDisplacementThreshold","velocity","bounciness","useNativeDriver","useNativeAnimations","animationOptions","start","finished","onSwipeableLeftOpen","onSwipeableOpen","onSwipeableRightOpen","closingDirection","onSwipeableClose","onSwipeableLeftWillOpen","onSwipeableWillOpen","onSwipeableRightWillOpen","onSwipeableWillClose","layout","width","undefined","updateAnimatedEvent","onGestureEvent","event","shouldComponentUpdate","render","children","renderLeftActions","renderRightActions","dragOffsetFromLeftEdge","dragOffsetFromRightEdge","left","styles","leftActions","transform","translateX","x","right","rightActions","onHandlerStateChange","onRowLayout","container","containerStyle","onTapHandlerStateChange","childrenContainerStyle","create","overflow","absoluteFillObject","flexDirection","isRTL"],"mappings":"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","sourcesContent":["// Similarily to the DrawerLayout component this deserves to be put in a\n// separate repo. Although, keeping it here for the time being will allow us to\n// move faster and fix possible issues quicker\n\nimport * as React from 'react';\nimport { Component } from 'react';\nimport {\n Animated,\n StyleSheet,\n View,\n I18nManager,\n LayoutChangeEvent,\n StyleProp,\n ViewStyle,\n} from 'react-native';\n\nimport {\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../handlers/gestureHandlerCommon';\nimport {\n PanGestureHandler,\n PanGestureHandlerProps,\n} from '../handlers/PanGestureHandler';\nimport {\n PanGestureHandlerEventPayload,\n TapGestureHandlerEventPayload,\n} from '../handlers/GestureHandlerEventPayload';\nimport { TapGestureHandler } from '../handlers/TapGestureHandler';\nimport { State } from '../State';\n\nconst DRAG_TOSS = 0.05;\n\ntype SwipeableExcludes = Exclude<\n keyof PanGestureHandlerProps,\n 'onGestureEvent' | 'onHandlerStateChange'\n>;\n\n// Animated.AnimatedInterpolation has been converted to a generic type\n// in @types/react-native 0.70. This way we can maintain compatibility\n// with all versions of @types/react-native\ntype AnimatedInterpolation = ReturnType<Animated.Value['interpolate']>;\n\nexport interface SwipeableProps\n extends Pick<PanGestureHandlerProps, SwipeableExcludes> {\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 /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance. e.g. value of 1 will indicate that the swipeable panel\n * should exactly follow the gesture, 2 means it is going to be two times\n * \"slower\".\n */\n friction?: number;\n\n /**\n * Distance from the left edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n leftThreshold?: number;\n\n /**\n * Distance from the right edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n rightThreshold?: number;\n\n /**\n * Distance that the panel must be dragged from the left edge to be considered\n * a swipe. The default value is 10.\n */\n dragOffsetFromLeftEdge?: number;\n\n /**\n * Distance that the panel must be dragged from the right edge to be considered\n * a swipe. The default value is 10.\n */\n dragOffsetFromRightEdge?: number;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the left\n * actions panel's width. It is set to true by default as long as the left\n * panel render method is present.\n */\n overshootLeft?: boolean;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the\n * right actions panel's width. It is set to true by default as long as the\n * right panel render method is present.\n */\n overshootRight?: boolean;\n\n /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance at overshoot. Default value is 1, it mean no friction, for\n * a native feel, try 8 or above.\n */\n overshootFriction?: number;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableOpen()\n *\n * Called when left action panel gets open.\n */\n onSwipeableLeftOpen?: () => void;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableOpen()\n *\n * Called when right action panel gets open.\n */\n onSwipeableRightOpen?: () => void;\n\n /**\n * Called when action panel gets open (either right or left).\n */\n onSwipeableOpen?: (direction: 'left' | 'right', swipeable: Swipeable) => void;\n\n /**\n * Called when action panel is closed.\n */\n onSwipeableClose?: (\n direction: 'left' | 'right',\n swipeable: Swipeable\n ) => void;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableWillOpen()\n *\n * Called when left action panel starts animating on open.\n */\n onSwipeableLeftWillOpen?: () => void;\n\n /**\n * @deprecated Use `direction` argument of onSwipeableWillOpen()\n *\n * Called when right action panel starts animating on open.\n */\n onSwipeableRightWillOpen?: () => void;\n\n /**\n * Called when action panel starts animating on open (either right or left).\n */\n onSwipeableWillOpen?: (direction: 'left' | 'right') => void;\n\n /**\n * Called when action panel starts animating on close.\n */\n onSwipeableWillClose?: (direction: 'left' | 'right') => void;\n\n /**\n * Called when action panel starts being shown on dragging to open.\n */\n onSwipeableOpenStartDrag?: (direction: 'left' | 'right') => void;\n\n /**\n * Called when action panel starts being shown on dragging to close.\n */\n onSwipeableCloseStartDrag?: (direction: 'left' | 'right') => void;\n\n /**\n *\n * This map describes the values to use as inputRange for extra interpolation:\n * AnimatedValue: [startValue, endValue]\n *\n * progressAnimatedValue: [0, 1] dragAnimatedValue: [0, +]\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderLeftActions?: (\n progressAnimatedValue: AnimatedInterpolation,\n dragAnimatedValue: AnimatedInterpolation,\n swipeable: Swipeable\n ) => React.ReactNode;\n /**\n *\n * This map describes the values to use as inputRange for extra interpolation:\n * AnimatedValue: [startValue, endValue]\n *\n * progressAnimatedValue: [0, 1] dragAnimatedValue: [0, -]\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderRightActions?: (\n progressAnimatedValue: AnimatedInterpolation,\n dragAnimatedValue: AnimatedInterpolation,\n swipeable: Swipeable\n ) => React.ReactNode;\n\n useNativeAnimations?: boolean;\n\n animationOptions?: Record<string, unknown>;\n\n /**\n * Style object for the container (`Animated.View`), for example to override\n * `overflow: 'hidden'`.\n */\n containerStyle?: StyleProp<ViewStyle>;\n\n /**\n * Style object for the children container (`Animated.View`), for example to\n * apply `flex: 1`\n */\n childrenContainerStyle?: StyleProp<ViewStyle>;\n}\n\ntype SwipeableState = {\n dragX: Animated.Value;\n rowTranslation: Animated.Value;\n rowState: number;\n leftWidth?: number;\n rightOffset?: number;\n rowWidth?: number;\n};\n\n/**\n * @deprecated use Reanimated version of Swipeable instead\n *\n * This component allows for implementing swipeable rows or similar interaction.\n */\n\nexport default class Swipeable extends Component<\n SwipeableProps,\n SwipeableState\n> {\n static defaultProps = {\n friction: 1,\n overshootFriction: 1,\n useNativeAnimations: true,\n };\n\n constructor(props: SwipeableProps) {\n super(props);\n const dragX = new Animated.Value(0);\n this.state = {\n dragX,\n rowTranslation: new Animated.Value(0),\n rowState: 0,\n leftWidth: undefined,\n rightOffset: undefined,\n rowWidth: undefined,\n };\n this.updateAnimatedEvent(props, this.state);\n\n this.onGestureEvent = Animated.event(\n [{ nativeEvent: { translationX: dragX } }],\n { useNativeDriver: props.useNativeAnimations! }\n );\n }\n\n shouldComponentUpdate(props: SwipeableProps, state: SwipeableState) {\n if (\n this.props.friction !== props.friction ||\n this.props.overshootLeft !== props.overshootLeft ||\n this.props.overshootRight !== props.overshootRight ||\n this.props.overshootFriction !== props.overshootFriction ||\n this.state.leftWidth !== state.leftWidth ||\n this.state.rightOffset !== state.rightOffset ||\n this.state.rowWidth !== state.rowWidth\n ) {\n this.updateAnimatedEvent(props, state);\n }\n\n return true;\n }\n\n private onGestureEvent?: (\n event: GestureEvent<PanGestureHandlerEventPayload>\n ) => void;\n private transX?: AnimatedInterpolation;\n private showLeftAction?: AnimatedInterpolation | Animated.Value;\n private leftActionTranslate?: AnimatedInterpolation;\n private showRightAction?: AnimatedInterpolation | Animated.Value;\n private rightActionTranslate?: AnimatedInterpolation;\n\n private updateAnimatedEvent = (\n props: SwipeableProps,\n state: SwipeableState\n ) => {\n const { friction, overshootFriction } = props;\n const { dragX, rowTranslation, leftWidth = 0, rowWidth = 0 } = state;\n const { rightOffset = rowWidth } = state;\n const rightWidth = Math.max(0, rowWidth - rightOffset);\n\n const { overshootLeft = leftWidth > 0, overshootRight = rightWidth > 0 } =\n props;\n\n const transX = Animated.add(\n rowTranslation,\n dragX.interpolate({\n inputRange: [0, friction!],\n outputRange: [0, 1],\n })\n ).interpolate({\n inputRange: [-rightWidth - 1, -rightWidth, leftWidth, leftWidth + 1],\n outputRange: [\n -rightWidth - (overshootRight ? 1 / overshootFriction! : 0),\n -rightWidth,\n leftWidth,\n leftWidth + (overshootLeft ? 1 / overshootFriction! : 0),\n ],\n });\n this.transX = transX;\n this.showLeftAction =\n leftWidth > 0\n ? transX.interpolate({\n inputRange: [-1, 0, leftWidth],\n outputRange: [0, 0, 1],\n })\n : new Animated.Value(0);\n this.leftActionTranslate = this.showLeftAction.interpolate({\n inputRange: [0, Number.MIN_VALUE],\n outputRange: [-10000, 0],\n extrapolate: 'clamp',\n });\n this.showRightAction =\n rightWidth > 0\n ? transX.interpolate({\n inputRange: [-rightWidth, 0, 1],\n outputRange: [1, 0, 0],\n })\n : new Animated.Value(0);\n this.rightActionTranslate = this.showRightAction.interpolate({\n inputRange: [0, Number.MIN_VALUE],\n outputRange: [-10000, 0],\n extrapolate: 'clamp',\n });\n };\n\n private onTapHandlerStateChange = ({\n nativeEvent,\n }: HandlerStateChangeEvent<TapGestureHandlerEventPayload>) => {\n if (nativeEvent.oldState === State.ACTIVE) {\n this.close();\n }\n };\n\n private onHandlerStateChange = (\n ev: HandlerStateChangeEvent<PanGestureHandlerEventPayload>\n ) => {\n if (ev.nativeEvent.oldState === State.ACTIVE) {\n this.handleRelease(ev);\n }\n\n if (ev.nativeEvent.state === State.ACTIVE) {\n const { velocityX, translationX: dragX } = ev.nativeEvent;\n const { rowState } = this.state;\n const { friction } = this.props;\n\n const translationX = (dragX + DRAG_TOSS * velocityX) / friction!;\n\n const direction =\n rowState === -1\n ? 'right'\n : rowState === 1\n ? 'left'\n : translationX > 0\n ? 'left'\n : 'right';\n\n if (rowState === 0) {\n this.props.onSwipeableOpenStartDrag?.(direction);\n } else {\n this.props.onSwipeableCloseStartDrag?.(direction);\n }\n }\n };\n\n private handleRelease = (\n ev: HandlerStateChangeEvent<PanGestureHandlerEventPayload>\n ) => {\n const { velocityX, translationX: dragX } = ev.nativeEvent;\n const { leftWidth = 0, rowWidth = 0, rowState } = this.state;\n const { rightOffset = rowWidth } = this.state;\n const rightWidth = rowWidth - rightOffset;\n const {\n friction,\n leftThreshold = leftWidth / 2,\n rightThreshold = rightWidth / 2,\n } = this.props;\n\n const startOffsetX = this.currentOffset() + dragX / friction!;\n const translationX = (dragX + DRAG_TOSS * velocityX) / friction!;\n\n let toValue = 0;\n if (rowState === 0) {\n if (translationX > leftThreshold) {\n toValue = leftWidth;\n } else if (translationX < -rightThreshold) {\n toValue = -rightWidth;\n }\n } else if (rowState === 1) {\n // Swiped to left\n if (translationX > -leftThreshold) {\n toValue = leftWidth;\n }\n } else {\n // Swiped to right\n if (translationX < rightThreshold) {\n toValue = -rightWidth;\n }\n }\n\n this.animateRow(startOffsetX, toValue, velocityX / friction!);\n };\n\n private animateRow = (\n fromValue: number,\n toValue: number,\n velocityX?:\n | number\n | {\n x: number;\n y: number;\n }\n ) => {\n const { dragX, rowTranslation } = this.state;\n dragX.setValue(0);\n rowTranslation.setValue(fromValue);\n\n this.setState({ rowState: Math.sign(toValue) });\n Animated.spring(rowTranslation, {\n restSpeedThreshold: 1.7,\n restDisplacementThreshold: 0.4,\n velocity: velocityX,\n bounciness: 0,\n toValue,\n useNativeDriver: this.props.useNativeAnimations!,\n ...this.props.animationOptions,\n }).start(({ finished }) => {\n if (finished) {\n if (toValue > 0) {\n this.props.onSwipeableLeftOpen?.();\n this.props.onSwipeableOpen?.('left', this);\n } else if (toValue < 0) {\n this.props.onSwipeableRightOpen?.();\n this.props.onSwipeableOpen?.('right', this);\n } else {\n const closingDirection = fromValue > 0 ? 'left' : 'right';\n this.props.onSwipeableClose?.(closingDirection, this);\n }\n }\n });\n if (toValue > 0) {\n this.props.onSwipeableLeftWillOpen?.();\n this.props.onSwipeableWillOpen?.('left');\n } else if (toValue < 0) {\n this.props.onSwipeableRightWillOpen?.();\n this.props.onSwipeableWillOpen?.('right');\n } else {\n const closingDirection = fromValue > 0 ? 'left' : 'right';\n this.props.onSwipeableWillClose?.(closingDirection);\n }\n };\n\n private onRowLayout = ({ nativeEvent }: LayoutChangeEvent) => {\n this.setState({ rowWidth: nativeEvent.layout.width });\n };\n\n private currentOffset = () => {\n const { leftWidth = 0, rowWidth = 0, rowState } = this.state;\n const { rightOffset = rowWidth } = this.state;\n const rightWidth = rowWidth - rightOffset;\n if (rowState === 1) {\n return leftWidth;\n } else if (rowState === -1) {\n return -rightWidth;\n }\n return 0;\n };\n\n close = () => {\n this.animateRow(this.currentOffset(), 0);\n };\n\n openLeft = () => {\n const { leftWidth = 0 } = this.state;\n this.animateRow(this.currentOffset(), leftWidth);\n };\n\n openRight = () => {\n const { rowWidth = 0 } = this.state;\n const { rightOffset = rowWidth } = this.state;\n const rightWidth = rowWidth - rightOffset;\n this.animateRow(this.currentOffset(), -rightWidth);\n };\n\n reset = () => {\n const { dragX, rowTranslation } = this.state;\n dragX.setValue(0);\n rowTranslation.setValue(0);\n this.setState({ rowState: 0 });\n };\n\n render() {\n const { rowState } = this.state;\n const {\n children,\n renderLeftActions,\n renderRightActions,\n dragOffsetFromLeftEdge = 10,\n dragOffsetFromRightEdge = 10,\n } = this.props;\n\n const left = renderLeftActions && (\n <Animated.View\n style={[\n styles.leftActions,\n // All those and below parameters can have ! since they are all\n // asigned in constructor in `updateAnimatedEvent` but TS cannot spot\n // it for some reason\n { transform: [{ translateX: this.leftActionTranslate! }] },\n ]}>\n {renderLeftActions(this.showLeftAction!, this.transX!, this)}\n <View\n onLayout={({ nativeEvent }) =>\n this.setState({ leftWidth: nativeEvent.layout.x })\n }\n />\n </Animated.View>\n );\n\n const right = renderRightActions && (\n <Animated.View\n style={[\n styles.rightActions,\n { transform: [{ translateX: this.rightActionTranslate! }] },\n ]}>\n {renderRightActions(this.showRightAction!, this.transX!, this)}\n <View\n onLayout={({ nativeEvent }) =>\n this.setState({ rightOffset: nativeEvent.layout.x })\n }\n />\n </Animated.View>\n );\n\n return (\n <PanGestureHandler\n activeOffsetX={[-dragOffsetFromRightEdge, dragOffsetFromLeftEdge]}\n touchAction=\"pan-y\"\n {...this.props}\n onGestureEvent={this.onGestureEvent}\n onHandlerStateChange={this.onHandlerStateChange}>\n <Animated.View\n onLayout={this.onRowLayout}\n style={[styles.container, this.props.containerStyle]}>\n {left}\n {right}\n <TapGestureHandler\n enabled={rowState !== 0}\n touchAction=\"pan-y\"\n onHandlerStateChange={this.onTapHandlerStateChange}>\n <Animated.View\n pointerEvents={rowState === 0 ? 'auto' : 'box-only'}\n style={[\n {\n transform: [{ translateX: this.transX! }],\n },\n this.props.childrenContainerStyle,\n ]}>\n {children}\n </Animated.View>\n </TapGestureHandler>\n </Animated.View>\n </PanGestureHandler>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n leftActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row-reverse' : 'row',\n },\n rightActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row' : 'row-reverse',\n },\n});\n"]}
@@ -0,0 +1,44 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ import React, { forwardRef, useEffect, useRef } from 'react';
4
+ import { Platform, Text as RNText } from 'react-native';
5
+ import { Gesture, GestureDetector } from '../';
6
+ export const Text = /*#__PURE__*/forwardRef((props, ref) => {
7
+ const {
8
+ onPress,
9
+ ...rest
10
+ } = props;
11
+ const textRef = useRef(null);
12
+ const native = Gesture.Native().runOnJS(true);
13
+
14
+ const refHandler = node => {
15
+ textRef.current = node;
16
+
17
+ if (ref === null) {
18
+ return;
19
+ }
20
+
21
+ if (typeof ref === 'function') {
22
+ ref(node);
23
+ } else {
24
+ ref.current = node;
25
+ }
26
+ };
27
+
28
+ useEffect(() => {
29
+ if (Platform.OS !== 'web') {
30
+ return;
31
+ }
32
+
33
+ const textElement = ref ? ref.current : textRef.current; // At this point we are sure that textElement is div in HTML tree
34
+
35
+ textElement === null || textElement === void 0 ? void 0 : textElement.setAttribute('rnghtext', 'true');
36
+ }, []);
37
+ return /*#__PURE__*/React.createElement(GestureDetector, {
38
+ gesture: native
39
+ }, /*#__PURE__*/React.createElement(RNText, _extends({
40
+ onPress: onPress,
41
+ ref: refHandler
42
+ }, rest)));
43
+ }); // eslint-disable-next-line @typescript-eslint/no-redeclare
44
+ //# sourceMappingURL=Text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["Text.tsx"],"names":["React","forwardRef","useEffect","useRef","Platform","Text","RNText","Gesture","GestureDetector","props","ref","onPress","rest","textRef","native","Native","runOnJS","refHandler","node","current","OS","textElement","setAttribute"],"mappings":";;AAAA,OAAOA,KAAP,IAEEC,UAFF,EAIEC,SAJF,EAKEC,MALF,QAMO,OANP;AAOA,SACEC,QADF,EAEEC,IAAI,IAAIC,MAFV,QAIO,cAJP;AAMA,SAASC,OAAT,EAAkBC,eAAlB,QAAyC,KAAzC;AAEA,OAAO,MAAMH,IAAI,gBAAGJ,UAAU,CAC5B,CAACQ,KAAD,EAAqBC,GAArB,KAAmD;AACjD,QAAM;AAAEC,IAAAA,OAAF;AAAW,OAAGC;AAAd,MAAuBH,KAA7B;AACA,QAAMI,OAAO,GAAGV,MAAM,CAAgB,IAAhB,CAAtB;AACA,QAAMW,MAAM,GAAGP,OAAO,CAACQ,MAAR,GAAiBC,OAAjB,CAAyB,IAAzB,CAAf;;AAEA,QAAMC,UAAU,GAAIC,IAAD,IAAe;AAChCL,IAAAA,OAAO,CAACM,OAAR,GAAkBD,IAAlB;;AAEA,QAAIR,GAAG,KAAK,IAAZ,EAAkB;AAChB;AACD;;AAED,QAAI,OAAOA,GAAP,KAAe,UAAnB,EAA+B;AAC7BA,MAAAA,GAAG,CAACQ,IAAD,CAAH;AACD,KAFD,MAEO;AACLR,MAAAA,GAAG,CAACS,OAAJ,GAAcD,IAAd;AACD;AACF,GAZD;;AAcAhB,EAAAA,SAAS,CAAC,MAAM;AACd,QAAIE,QAAQ,CAACgB,EAAT,KAAgB,KAApB,EAA2B;AACzB;AACD;;AAED,UAAMC,WAAW,GAAGX,GAAG,GAClBA,GAAD,CAA2BS,OADR,GAEnBN,OAAO,CAACM,OAFZ,CALc,CASd;;AACCE,IAAAA,WAAD,aAACA,WAAD,uBAACA,WAAD,CAA4CC,YAA5C,CACE,UADF,EAEE,MAFF;AAID,GAdQ,EAcN,EAdM,CAAT;AAgBA,sBACE,oBAAC,eAAD;AAAiB,IAAA,OAAO,EAAER;AAA1B,kBACE,oBAAC,MAAD;AAAQ,IAAA,OAAO,EAAEH,OAAjB;AAA0B,IAAA,GAAG,EAAEM;AAA/B,KAA+CL,IAA/C,EADF,CADF;AAKD,CAzC2B,CAAvB,C,CA2CP","sourcesContent":["import React, {\n ForwardedRef,\n forwardRef,\n RefObject,\n useEffect,\n useRef,\n} from 'react';\nimport {\n Platform,\n Text as RNText,\n TextProps as RNTextProps,\n} from 'react-native';\n\nimport { Gesture, GestureDetector } from '../';\n\nexport const Text = forwardRef(\n (props: RNTextProps, ref: ForwardedRef<RNText>) => {\n const { onPress, ...rest } = props;\n const textRef = useRef<RNText | null>(null);\n const native = Gesture.Native().runOnJS(true);\n\n const refHandler = (node: any) => {\n textRef.current = node;\n\n if (ref === null) {\n return;\n }\n\n if (typeof ref === 'function') {\n ref(node);\n } else {\n ref.current = node;\n }\n };\n\n useEffect(() => {\n if (Platform.OS !== 'web') {\n return;\n }\n\n const textElement = ref\n ? (ref as RefObject<RNText>).current\n : textRef.current;\n\n // At this point we are sure that textElement is div in HTML tree\n (textElement as unknown as HTMLDivElement)?.setAttribute(\n 'rnghtext',\n 'true'\n );\n }, []);\n\n return (\n <GestureDetector gesture={native}>\n <RNText onPress={onPress} ref={refHandler} {...rest} />\n </GestureDetector>\n );\n }\n);\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type Text = typeof Text & RNText;\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["GenericTouchable.tsx"],"names":["React","Component","Animated","Platform","State","BaseButton","TOUCHABLE_STATE","UNDETERMINED","BEGAN","MOVED_OUTSIDE","GenericTouchable","nativeEvent","pointerInside","onMoveIn","onMoveOut","state","CANCELLED","FAILED","moveToState","OS","ACTIVE","STATE","handlePressIn","END","shouldCallOnPress","longPressDetected","pressOutTimeout","handleGoToUndetermined","props","onPress","onLongPress","delayPressIn","pressInTimeout","setTimeout","time","delayLongPress","longPressTimeout","onLongPressDetected","handleMoveOutside","delayPressOut","clearTimeout","componentDidMount","reset","newState","onPressIn","onPressOut","onStateChange","componentWillUnmount","render","hitSlop","top","left","bottom","right","undefined","coreProps","accessible","accessibilityLabel","accessibilityHint","accessibilityRole","accessibilityState","accessibilityActions","onAccessibilityAction","nativeID","onLayout","containerStyle","disabled","onHandlerStateChange","onGestureEvent","userSelect","shouldActivateOnStart","disallowInterruption","testID","touchSoundDisabled","extraButtonProps","style","children","rippleColor","exclusive"],"mappings":";;;;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,SAAT,QAA0B,OAA1B;AACA,SAASC,QAAT,EAAmBC,QAAnB,QAAmC,cAAnC;AAEA,SAASC,KAAT,QAAsB,aAAtB;AACA,SAASC,UAAT,QAA2B,mBAA3B;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,eAAe,GAAG;AAC7BC,EAAAA,YAAY,EAAE,CADe;AAE7BC,EAAAA,KAAK,EAAE,CAFsB;AAG7BC,EAAAA,aAAa,EAAE;AAHc,CAAxB;;AAiBP;AACA;AACA;AACA;AAEA,eAAe,MAAMC,gBAAN,SAA+BT,SAA/B,CAEb;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA,+CAeoB,KAfpB;;AAAA,2CAiBgB,IAjBhB;;AAAA,mCAoBwBK,eAAe,CAACC,YApBxC;;AAAA,4CAkHiB,CAAC;AAChBI,MAAAA,WAAW,EAAE;AAAEC,QAAAA;AAAF;AADG,KAAD,KAEoC;AACnD,UAAI,KAAKA,aAAL,KAAuBA,aAA3B,EAA0C;AACxC,YAAIA,aAAJ,EAAmB;AACjB,eAAKC,QAAL;AACD,SAFD,MAEO;AACL,eAAKC,SAAL;AACD;AACF;;AACD,WAAKF,aAAL,GAAqBA,aAArB;AACD,KA7HD;;AAAA,kDA+HuB,CAAC;AACtBD,MAAAA;AADsB,KAAD,KAEyC;AAC9D,YAAM;AAAEI,QAAAA;AAAF,UAAYJ,WAAlB;;AACA,UAAII,KAAK,KAAKX,KAAK,CAACY,SAAhB,IAA6BD,KAAK,KAAKX,KAAK,CAACa,MAAjD,EAAyD;AACvD;AACA,aAAKC,WAAL,CAAiBZ,eAAe,CAACC,YAAjC;AACD,OAHD,MAGO,KACL;AACA;AACA;AACAQ,MAAAA,KAAK,MAAMZ,QAAQ,CAACgB,EAAT,KAAgB,SAAhB,GAA4Bf,KAAK,CAACgB,MAAlC,GAA2ChB,KAAK,CAACI,KAAvD,CAAL,IACA,KAAKa,KAAL,KAAef,eAAe,CAACC,YAL1B,EAML;AACA;AACA,aAAKe,aAAL;AACD,OATM,MASA,IAAIP,KAAK,KAAKX,KAAK,CAACmB,GAApB,EAAyB;AAC9B,cAAMC,iBAAiB,GACrB,CAAC,KAAKC,iBAAN,IACA,KAAKJ,KAAL,KAAef,eAAe,CAACG,aAD/B,IAEA,KAAKiB,eAAL,KAAyB,IAH3B;AAIA,aAAKC,sBAAL;;AACA,YAAIH,iBAAJ,EAAuB;AAAA;;AACrB;AACA,qDAAKI,KAAL,EAAWC,OAAX;AACD;AACF;AACF,KA1JD;;AAAA,iDA4JsB,MAAM;AAAA;;AAC1B,WAAKJ,iBAAL,GAAyB,IAAzB,CAD0B,CAE1B;;AACA,oDAAKG,KAAL,EAAWE,WAAX;AACD,KAhKD;AAAA;;AAsBA;AACA;AACAR,EAAAA,aAAa,GAAG;AACd,QAAI,KAAKM,KAAL,CAAWG,YAAf,EAA6B;AAC3B,WAAKC,cAAL,GAAsBC,UAAU,CAAC,MAAM;AACrC,aAAKf,WAAL,CAAiBZ,eAAe,CAACE,KAAjC;AACA,aAAKwB,cAAL,GAAsB,IAAtB;AACD,OAH+B,EAG7B,KAAKJ,KAAL,CAAWG,YAHkB,CAAhC;AAID,KALD,MAKO;AACL,WAAKb,WAAL,CAAiBZ,eAAe,CAACE,KAAjC;AACD;;AACD,QAAI,KAAKoB,KAAL,CAAWE,WAAf,EAA4B;AAC1B,YAAMI,IAAI,GACR,CAAC,KAAKN,KAAL,CAAWG,YAAX,IAA2B,CAA5B,KAAkC,KAAKH,KAAL,CAAWO,cAAX,IAA6B,CAA/D,CADF;AAEA,WAAKC,gBAAL,GAAwBH,UAAU,CAAC,KAAKI,mBAAN,EAA2BH,IAA3B,CAAlC;AACD;AACF,GAtCD,CAuCA;AACA;;;AACAI,EAAAA,iBAAiB,GAAG;AAClB,QAAI,KAAKV,KAAL,CAAWW,aAAf,EAA8B;AAC5B,WAAKb,eAAL,GACE,KAAKA,eAAL,IACAO,UAAU,CAAC,MAAM;AACf,aAAKf,WAAL,CAAiBZ,eAAe,CAACG,aAAjC;AACA,aAAKiB,eAAL,GAAuB,IAAvB;AACD,OAHS,EAGP,KAAKE,KAAL,CAAWW,aAHJ,CAFZ;AAMD,KAPD,MAOO;AACL,WAAKrB,WAAL,CAAiBZ,eAAe,CAACG,aAAjC;AACD;AACF,GApDD,CAsDA;;;AACAkB,EAAAA,sBAAsB,GAAG;AACvBa,IAAAA,YAAY,CAAC,KAAKd,eAAN,CAAZ,CADuB,CACc;;AACrC,QAAI,KAAKE,KAAL,CAAWW,aAAf,EAA8B;AAC5B,WAAKb,eAAL,GAAuBO,UAAU,CAAC,MAAM;AACtC,YAAI,KAAKZ,KAAL,KAAef,eAAe,CAACC,YAAnC,EAAiD;AAC/C,eAAKW,WAAL,CAAiBZ,eAAe,CAACE,KAAjC;AACD;;AACD,aAAKU,WAAL,CAAiBZ,eAAe,CAACC,YAAjC;AACA,aAAKmB,eAAL,GAAuB,IAAvB;AACD,OANgC,EAM9B,KAAKE,KAAL,CAAWW,aANmB,CAAjC;AAOD,KARD,MAQO;AACL,UAAI,KAAKlB,KAAL,KAAef,eAAe,CAACC,YAAnC,EAAiD;AAC/C,aAAKW,WAAL,CAAiBZ,eAAe,CAACE,KAAjC;AACD;;AACD,WAAKU,WAAL,CAAiBZ,eAAe,CAACC,YAAjC;AACD;AACF;;AAEDkC,EAAAA,iBAAiB,GAAG;AAClB,SAAKC,KAAL;AACD,GA3ED,CA4EA;;;AACAA,EAAAA,KAAK,GAAG;AACN,SAAKjB,iBAAL,GAAyB,KAAzB;AACA,SAAKb,aAAL,GAAqB,IAArB;AACA4B,IAAAA,YAAY,CAAC,KAAKR,cAAN,CAAZ;AACAQ,IAAAA,YAAY,CAAC,KAAKd,eAAN,CAAZ;AACAc,IAAAA,YAAY,CAAC,KAAKJ,gBAAN,CAAZ;AACA,SAAKV,eAAL,GAAuB,IAAvB;AACA,SAAKU,gBAAL,GAAwB,IAAxB;AACA,SAAKJ,cAAL,GAAsB,IAAtB;AACD,GAtFD,CAwFA;;;AACAd,EAAAA,WAAW,CAACyB,QAAD,EAA2B;AAAA;;AACpC,QAAIA,QAAQ,KAAK,KAAKtB,KAAtB,EAA6B;AAC3B;AACA;AACD;;AACD,QAAIsB,QAAQ,KAAKrC,eAAe,CAACE,KAAjC,EAAwC;AAAA;;AACtC;AACA,oDAAKoB,KAAL,EAAWgB,SAAX;AACD,KAHD,MAGO,IAAID,QAAQ,KAAKrC,eAAe,CAACG,aAAjC,EAAgD;AAAA;;AACrD;AACA,oDAAKmB,KAAL,EAAWiB,UAAX;AACD,KAHM,MAGA,IAAIF,QAAQ,KAAKrC,eAAe,CAACC,YAAjC,EAA+C;AACpD;AACA,WAAKmC,KAAL;;AACA,UAAI,KAAKrB,KAAL,KAAef,eAAe,CAACE,KAAnC,EAA0C;AAAA;;AACxC;AACA,uDAAKoB,KAAL,EAAWiB,UAAX;AACD;AACF,KAlBmC,CAmBpC;;;AACA,kDAAKjB,KAAL,EAAWkB,aAAX,mGAA2B,KAAKzB,KAAhC,EAAuCsB,QAAvC,EApBoC,CAqBpC;;AACA,SAAKtB,KAAL,GAAasB,QAAb;AACD;;AAkDDI,EAAAA,oBAAoB,GAAG;AACrB;AACA,SAAKL,KAAL;AACD;;AAED7B,EAAAA,QAAQ,GAAG;AACT,QAAI,KAAKQ,KAAL,KAAef,eAAe,CAACG,aAAnC,EAAkD;AAChD;AACA,WAAKS,WAAL,CAAiBZ,eAAe,CAACE,KAAjC;AACD;AACF;;AAEDM,EAAAA,SAAS,GAAG;AACV;AACA0B,IAAAA,YAAY,CAAC,KAAKJ,gBAAN,CAAZ;AACA,SAAKA,gBAAL,GAAwB,IAAxB;;AACA,QAAI,KAAKf,KAAL,KAAef,eAAe,CAACE,KAAnC,EAA0C;AACxC,WAAK8B,iBAAL;AACD;AACF;;AAEDU,EAAAA,MAAM,GAAG;AAAA;;AACP,UAAMC,OAAO,WACV,OAAO,KAAKrB,KAAL,CAAWqB,OAAlB,KAA8B,QAA9B,GACG;AACEC,MAAAA,GAAG,EAAE,KAAKtB,KAAL,CAAWqB,OADlB;AAEEE,MAAAA,IAAI,EAAE,KAAKvB,KAAL,CAAWqB,OAFnB;AAGEG,MAAAA,MAAM,EAAE,KAAKxB,KAAL,CAAWqB,OAHrB;AAIEI,MAAAA,KAAK,EAAE,KAAKzB,KAAL,CAAWqB;AAJpB,KADH,GAOG,KAAKrB,KAAL,CAAWqB,OARJ,uCAQgBK,SAR7B;AAUA,UAAMC,SAAS,GAAG;AAChBC,MAAAA,UAAU,EAAE,KAAK5B,KAAL,CAAW4B,UAAX,KAA0B,KADtB;AAEhBC,MAAAA,kBAAkB,EAAE,KAAK7B,KAAL,CAAW6B,kBAFf;AAGhBC,MAAAA,iBAAiB,EAAE,KAAK9B,KAAL,CAAW8B,iBAHd;AAIhBC,MAAAA,iBAAiB,EAAE,KAAK/B,KAAL,CAAW+B,iBAJd;AAKhB;AACA;AACAC,MAAAA,kBAAkB,EAAE,KAAKhC,KAAL,CAAWgC,kBAPf;AAQhBC,MAAAA,oBAAoB,EAAE,KAAKjC,KAAL,CAAWiC,oBARjB;AAShBC,MAAAA,qBAAqB,EAAE,KAAKlC,KAAL,CAAWkC,qBATlB;AAUhBC,MAAAA,QAAQ,EAAE,KAAKnC,KAAL,CAAWmC,QAVL;AAWhBC,MAAAA,QAAQ,EAAE,KAAKpC,KAAL,CAAWoC;AAXL,KAAlB;AAcA,wBACE,oBAAC,UAAD;AACE,MAAA,KAAK,EAAE,KAAKpC,KAAL,CAAWqC,cADpB;AAEE,MAAA,oBAAoB,EAClB;AACA,WAAKrC,KAAL,CAAWsC,QAAX,GAAsBZ,SAAtB,GAAkC,KAAKa,oBAJ3C;AAME,MAAA,cAAc,EAAE,KAAKC,cANvB;AAOE,MAAA,OAAO,EAAEnB,OAPX;AAQE,MAAA,UAAU,EAAE,KAAKrB,KAAL,CAAWyC,UARzB;AASE,MAAA,qBAAqB,EAAE,KAAKzC,KAAL,CAAW0C,qBATpC;AAUE,MAAA,oBAAoB,EAAE,KAAK1C,KAAL,CAAW2C,oBAVnC;AAWE,MAAA,MAAM,EAAE,KAAK3C,KAAL,CAAW4C,MAXrB;AAYE,MAAA,kBAAkB,2BAAE,KAAK5C,KAAL,CAAW6C,kBAAb,yEAAmC,KAZvD;AAaE,MAAA,OAAO,EAAE,CAAC,KAAK7C,KAAL,CAAWsC;AAbvB,OAcM,KAAKtC,KAAL,CAAW8C,gBAdjB,gBAeE,oBAAC,QAAD,CAAU,IAAV,eAAmBnB,SAAnB;AAA8B,MAAA,KAAK,EAAE,KAAK3B,KAAL,CAAW+C;AAAhD,QACG,KAAK/C,KAAL,CAAWgD,QADd,CAfF,CADF;AAqBD;;AArOD;;gBAFmBlE,gB,kBAGG;AACpByB,EAAAA,cAAc,EAAE,GADI;AAEpBuC,EAAAA,gBAAgB,EAAE;AAChBG,IAAAA,WAAW,EAAE,aADG;AAEhBC,IAAAA,SAAS,EAAE;AAFK;AAFE,C","sourcesContent":["import * as React from 'react';\nimport { Component } from 'react';\nimport { Animated, Platform } from 'react-native';\n\nimport { State } from '../../State';\nimport { BaseButton } from '../GestureButtons';\n\nimport {\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../../handlers/gestureHandlerCommon';\nimport type { NativeViewGestureHandlerPayload } from '../../handlers/GestureHandlerEventPayload';\nimport type { TouchableNativeFeedbackExtraProps } from './TouchableNativeFeedbackProps';\nimport type { GenericTouchableProps } from './GenericTouchableProps';\n\n/**\n * Each touchable is a states' machine which preforms transitions.\n * On very beginning (and on the very end or recognition) touchable is\n * UNDETERMINED. Then it moves to BEGAN. If touchable recognizes that finger\n * travel outside it transits to special MOVED_OUTSIDE state. Gesture recognition\n * finishes in UNDETERMINED state.\n */\nexport const TOUCHABLE_STATE = {\n UNDETERMINED: 0,\n BEGAN: 1,\n MOVED_OUTSIDE: 2,\n} as const;\n\ntype TouchableState = typeof TOUCHABLE_STATE[keyof typeof TOUCHABLE_STATE];\n\ninterface InternalProps {\n extraButtonProps: TouchableNativeFeedbackExtraProps;\n onStateChange?: (oldState: TouchableState, newState: TouchableState) => void;\n}\n\n// TODO: maybe can be better\n// TODO: all clearTimeout have ! added, maybe they shouldn't ?\ntype Timeout = ReturnType<typeof setTimeout> | null | undefined;\n\n/**\n * GenericTouchable is not intented to be used as it is.\n * Should be treated as a source for the rest of touchables\n */\n\nexport default class GenericTouchable extends Component<\n GenericTouchableProps & InternalProps\n> {\n static defaultProps = {\n delayLongPress: 600,\n extraButtonProps: {\n rippleColor: 'transparent',\n exclusive: true,\n },\n };\n\n // Timeout handlers\n pressInTimeout: Timeout;\n pressOutTimeout: Timeout;\n longPressTimeout: Timeout;\n\n // This flag is required since recognition of longPress implies not-invoking onPress\n longPressDetected = false;\n\n pointerInside = true;\n\n // State of touchable\n STATE: TouchableState = TOUCHABLE_STATE.UNDETERMINED;\n\n // handlePressIn in called on first touch on traveling inside component.\n // Handles state transition with delay.\n handlePressIn() {\n if (this.props.delayPressIn) {\n this.pressInTimeout = setTimeout(() => {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n this.pressInTimeout = null;\n }, this.props.delayPressIn);\n } else {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n if (this.props.onLongPress) {\n const time =\n (this.props.delayPressIn || 0) + (this.props.delayLongPress || 0);\n this.longPressTimeout = setTimeout(this.onLongPressDetected, time);\n }\n }\n // handleMoveOutside in called on traveling outside component.\n // Handles state transition with delay.\n handleMoveOutside() {\n if (this.props.delayPressOut) {\n this.pressOutTimeout =\n this.pressOutTimeout ||\n setTimeout(() => {\n this.moveToState(TOUCHABLE_STATE.MOVED_OUTSIDE);\n this.pressOutTimeout = null;\n }, this.props.delayPressOut);\n } else {\n this.moveToState(TOUCHABLE_STATE.MOVED_OUTSIDE);\n }\n }\n\n // handleGoToUndetermined transits to UNDETERMINED state with proper delay\n handleGoToUndetermined() {\n clearTimeout(this.pressOutTimeout!); // TODO: maybe it can be undefined\n if (this.props.delayPressOut) {\n this.pressOutTimeout = setTimeout(() => {\n if (this.STATE === TOUCHABLE_STATE.UNDETERMINED) {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n this.moveToState(TOUCHABLE_STATE.UNDETERMINED);\n this.pressOutTimeout = null;\n }, this.props.delayPressOut);\n } else {\n if (this.STATE === TOUCHABLE_STATE.UNDETERMINED) {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n this.moveToState(TOUCHABLE_STATE.UNDETERMINED);\n }\n }\n\n componentDidMount() {\n this.reset();\n }\n // Reset timeout to prevent memory leaks.\n reset() {\n this.longPressDetected = false;\n this.pointerInside = true;\n clearTimeout(this.pressInTimeout!);\n clearTimeout(this.pressOutTimeout!);\n clearTimeout(this.longPressTimeout!);\n this.pressOutTimeout = null;\n this.longPressTimeout = null;\n this.pressInTimeout = null;\n }\n\n // All states' transitions are defined here.\n moveToState(newState: TouchableState) {\n if (newState === this.STATE) {\n // Ignore dummy transitions\n return;\n }\n if (newState === TOUCHABLE_STATE.BEGAN) {\n // First touch and moving inside\n this.props.onPressIn?.();\n } else if (newState === TOUCHABLE_STATE.MOVED_OUTSIDE) {\n // Moving outside\n this.props.onPressOut?.();\n } else if (newState === TOUCHABLE_STATE.UNDETERMINED) {\n // Need to reset each time on transition to UNDETERMINED\n this.reset();\n if (this.STATE === TOUCHABLE_STATE.BEGAN) {\n // ... and if it happens inside button.\n this.props.onPressOut?.();\n }\n }\n // Finally call lister (used by subclasses)\n this.props.onStateChange?.(this.STATE, newState);\n // ... and make transition.\n this.STATE = newState;\n }\n\n onGestureEvent = ({\n nativeEvent: { pointerInside },\n }: GestureEvent<NativeViewGestureHandlerPayload>) => {\n if (this.pointerInside !== pointerInside) {\n if (pointerInside) {\n this.onMoveIn();\n } else {\n this.onMoveOut();\n }\n }\n this.pointerInside = pointerInside;\n };\n\n onHandlerStateChange = ({\n nativeEvent,\n }: HandlerStateChangeEvent<NativeViewGestureHandlerPayload>) => {\n const { state } = nativeEvent;\n if (state === State.CANCELLED || state === State.FAILED) {\n // Need to handle case with external cancellation (e.g. by ScrollView)\n this.moveToState(TOUCHABLE_STATE.UNDETERMINED);\n } else if (\n // This platform check is an implication of slightly different behavior of handlers on different platform.\n // And Android \"Active\" state is achieving on first move of a finger, not on press in.\n // On iOS event on \"Began\" is not delivered.\n state === (Platform.OS !== 'android' ? State.ACTIVE : State.BEGAN) &&\n this.STATE === TOUCHABLE_STATE.UNDETERMINED\n ) {\n // Moving inside requires\n this.handlePressIn();\n } else if (state === State.END) {\n const shouldCallOnPress =\n !this.longPressDetected &&\n this.STATE !== TOUCHABLE_STATE.MOVED_OUTSIDE &&\n this.pressOutTimeout === null;\n this.handleGoToUndetermined();\n if (shouldCallOnPress) {\n // Calls only inside component whether no long press was called previously\n this.props.onPress?.();\n }\n }\n };\n\n onLongPressDetected = () => {\n this.longPressDetected = true;\n // Checked for in the caller of `onLongPressDetected`, but better to check twice\n this.props.onLongPress?.();\n };\n\n componentWillUnmount() {\n // To prevent memory leaks\n this.reset();\n }\n\n onMoveIn() {\n if (this.STATE === TOUCHABLE_STATE.MOVED_OUTSIDE) {\n // This call is not throttled with delays (like in RN's implementation).\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n }\n\n onMoveOut() {\n // Long press should no longer be detected\n clearTimeout(this.longPressTimeout!);\n this.longPressTimeout = null;\n if (this.STATE === TOUCHABLE_STATE.BEGAN) {\n this.handleMoveOutside();\n }\n }\n\n render() {\n const hitSlop =\n (typeof this.props.hitSlop === 'number'\n ? {\n top: this.props.hitSlop,\n left: this.props.hitSlop,\n bottom: this.props.hitSlop,\n right: this.props.hitSlop,\n }\n : this.props.hitSlop) ?? undefined;\n\n const coreProps = {\n accessible: this.props.accessible !== false,\n accessibilityLabel: this.props.accessibilityLabel,\n accessibilityHint: this.props.accessibilityHint,\n accessibilityRole: this.props.accessibilityRole,\n // TODO: check if changed to no 's' correctly, also removed 2 props that are no longer available: `accessibilityComponentType` and `accessibilityTraits`,\n // would be good to check if it is ok for sure, see: https://github.com/facebook/react-native/issues/24016\n accessibilityState: this.props.accessibilityState,\n accessibilityActions: this.props.accessibilityActions,\n onAccessibilityAction: this.props.onAccessibilityAction,\n nativeID: this.props.nativeID,\n onLayout: this.props.onLayout,\n };\n\n return (\n <BaseButton\n style={this.props.containerStyle}\n onHandlerStateChange={\n // TODO: not sure if it can be undefined instead of null\n this.props.disabled ? undefined : this.onHandlerStateChange\n }\n onGestureEvent={this.onGestureEvent}\n hitSlop={hitSlop}\n userSelect={this.props.userSelect}\n shouldActivateOnStart={this.props.shouldActivateOnStart}\n disallowInterruption={this.props.disallowInterruption}\n testID={this.props.testID}\n touchSoundDisabled={this.props.touchSoundDisabled ?? false}\n enabled={!this.props.disabled}\n {...this.props.extraButtonProps}>\n <Animated.View {...coreProps} style={this.props.style}>\n {this.props.children}\n </Animated.View>\n </BaseButton>\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["GenericTouchable.tsx"],"names":["React","Component","Animated","Platform","State","BaseButton","TOUCHABLE_STATE","UNDETERMINED","BEGAN","MOVED_OUTSIDE","GenericTouchable","nativeEvent","pointerInside","onMoveIn","onMoveOut","state","CANCELLED","FAILED","moveToState","OS","ACTIVE","STATE","handlePressIn","END","shouldCallOnPress","longPressDetected","pressOutTimeout","handleGoToUndetermined","props","onPress","onLongPress","delayPressIn","pressInTimeout","setTimeout","time","delayLongPress","longPressTimeout","onLongPressDetected","handleMoveOutside","delayPressOut","clearTimeout","componentDidMount","reset","newState","onPressIn","onPressOut","onStateChange","componentWillUnmount","render","hitSlop","top","left","bottom","right","undefined","coreProps","accessible","accessibilityLabel","accessibilityHint","accessibilityRole","accessibilityState","accessibilityActions","onAccessibilityAction","nativeID","onLayout","containerStyle","disabled","onHandlerStateChange","onGestureEvent","userSelect","shouldActivateOnStart","disallowInterruption","testID","touchSoundDisabled","extraButtonProps","style","children","rippleColor","exclusive"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Component } from 'react';\nimport { Animated, Platform } from 'react-native';\n\nimport { State } from '../../State';\nimport { BaseButton } from '../GestureButtons';\n\nimport {\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../../handlers/gestureHandlerCommon';\nimport type { NativeViewGestureHandlerPayload } from '../../handlers/GestureHandlerEventPayload';\nimport type { TouchableNativeFeedbackExtraProps } from './TouchableNativeFeedbackProps';\nimport type { GenericTouchableProps } from './GenericTouchableProps';\n\n/**\n * Each touchable is a states' machine which preforms transitions.\n * On very beginning (and on the very end or recognition) touchable is\n * UNDETERMINED. Then it moves to BEGAN. If touchable recognizes that finger\n * travel outside it transits to special MOVED_OUTSIDE state. Gesture recognition\n * finishes in UNDETERMINED state.\n */\nexport const TOUCHABLE_STATE = {\n UNDETERMINED: 0,\n BEGAN: 1,\n MOVED_OUTSIDE: 2,\n} as const;\n\ntype TouchableState = (typeof TOUCHABLE_STATE)[keyof typeof TOUCHABLE_STATE];\n\ninterface InternalProps {\n extraButtonProps: TouchableNativeFeedbackExtraProps;\n onStateChange?: (oldState: TouchableState, newState: TouchableState) => void;\n}\n\n// TODO: maybe can be better\n// TODO: all clearTimeout have ! added, maybe they shouldn't ?\ntype Timeout = ReturnType<typeof setTimeout> | null | undefined;\n\n/**\n * GenericTouchable is not intented to be used as it is.\n * Should be treated as a source for the rest of touchables\n */\n\nexport default class GenericTouchable extends Component<\n GenericTouchableProps & InternalProps\n> {\n static defaultProps = {\n delayLongPress: 600,\n extraButtonProps: {\n rippleColor: 'transparent',\n exclusive: true,\n },\n };\n\n // Timeout handlers\n pressInTimeout: Timeout;\n pressOutTimeout: Timeout;\n longPressTimeout: Timeout;\n\n // This flag is required since recognition of longPress implies not-invoking onPress\n longPressDetected = false;\n\n pointerInside = true;\n\n // State of touchable\n STATE: TouchableState = TOUCHABLE_STATE.UNDETERMINED;\n\n // handlePressIn in called on first touch on traveling inside component.\n // Handles state transition with delay.\n handlePressIn() {\n if (this.props.delayPressIn) {\n this.pressInTimeout = setTimeout(() => {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n this.pressInTimeout = null;\n }, this.props.delayPressIn);\n } else {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n if (this.props.onLongPress) {\n const time =\n (this.props.delayPressIn || 0) + (this.props.delayLongPress || 0);\n this.longPressTimeout = setTimeout(this.onLongPressDetected, time);\n }\n }\n // handleMoveOutside in called on traveling outside component.\n // Handles state transition with delay.\n handleMoveOutside() {\n if (this.props.delayPressOut) {\n this.pressOutTimeout =\n this.pressOutTimeout ||\n setTimeout(() => {\n this.moveToState(TOUCHABLE_STATE.MOVED_OUTSIDE);\n this.pressOutTimeout = null;\n }, this.props.delayPressOut);\n } else {\n this.moveToState(TOUCHABLE_STATE.MOVED_OUTSIDE);\n }\n }\n\n // handleGoToUndetermined transits to UNDETERMINED state with proper delay\n handleGoToUndetermined() {\n clearTimeout(this.pressOutTimeout!); // TODO: maybe it can be undefined\n if (this.props.delayPressOut) {\n this.pressOutTimeout = setTimeout(() => {\n if (this.STATE === TOUCHABLE_STATE.UNDETERMINED) {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n this.moveToState(TOUCHABLE_STATE.UNDETERMINED);\n this.pressOutTimeout = null;\n }, this.props.delayPressOut);\n } else {\n if (this.STATE === TOUCHABLE_STATE.UNDETERMINED) {\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n this.moveToState(TOUCHABLE_STATE.UNDETERMINED);\n }\n }\n\n componentDidMount() {\n this.reset();\n }\n // Reset timeout to prevent memory leaks.\n reset() {\n this.longPressDetected = false;\n this.pointerInside = true;\n clearTimeout(this.pressInTimeout!);\n clearTimeout(this.pressOutTimeout!);\n clearTimeout(this.longPressTimeout!);\n this.pressOutTimeout = null;\n this.longPressTimeout = null;\n this.pressInTimeout = null;\n }\n\n // All states' transitions are defined here.\n moveToState(newState: TouchableState) {\n if (newState === this.STATE) {\n // Ignore dummy transitions\n return;\n }\n if (newState === TOUCHABLE_STATE.BEGAN) {\n // First touch and moving inside\n this.props.onPressIn?.();\n } else if (newState === TOUCHABLE_STATE.MOVED_OUTSIDE) {\n // Moving outside\n this.props.onPressOut?.();\n } else if (newState === TOUCHABLE_STATE.UNDETERMINED) {\n // Need to reset each time on transition to UNDETERMINED\n this.reset();\n if (this.STATE === TOUCHABLE_STATE.BEGAN) {\n // ... and if it happens inside button.\n this.props.onPressOut?.();\n }\n }\n // Finally call lister (used by subclasses)\n this.props.onStateChange?.(this.STATE, newState);\n // ... and make transition.\n this.STATE = newState;\n }\n\n onGestureEvent = ({\n nativeEvent: { pointerInside },\n }: GestureEvent<NativeViewGestureHandlerPayload>) => {\n if (this.pointerInside !== pointerInside) {\n if (pointerInside) {\n this.onMoveIn();\n } else {\n this.onMoveOut();\n }\n }\n this.pointerInside = pointerInside;\n };\n\n onHandlerStateChange = ({\n nativeEvent,\n }: HandlerStateChangeEvent<NativeViewGestureHandlerPayload>) => {\n const { state } = nativeEvent;\n if (state === State.CANCELLED || state === State.FAILED) {\n // Need to handle case with external cancellation (e.g. by ScrollView)\n this.moveToState(TOUCHABLE_STATE.UNDETERMINED);\n } else if (\n // This platform check is an implication of slightly different behavior of handlers on different platform.\n // And Android \"Active\" state is achieving on first move of a finger, not on press in.\n // On iOS event on \"Began\" is not delivered.\n state === (Platform.OS !== 'android' ? State.ACTIVE : State.BEGAN) &&\n this.STATE === TOUCHABLE_STATE.UNDETERMINED\n ) {\n // Moving inside requires\n this.handlePressIn();\n } else if (state === State.END) {\n const shouldCallOnPress =\n !this.longPressDetected &&\n this.STATE !== TOUCHABLE_STATE.MOVED_OUTSIDE &&\n this.pressOutTimeout === null;\n this.handleGoToUndetermined();\n if (shouldCallOnPress) {\n // Calls only inside component whether no long press was called previously\n this.props.onPress?.();\n }\n }\n };\n\n onLongPressDetected = () => {\n this.longPressDetected = true;\n // Checked for in the caller of `onLongPressDetected`, but better to check twice\n this.props.onLongPress?.();\n };\n\n componentWillUnmount() {\n // To prevent memory leaks\n this.reset();\n }\n\n onMoveIn() {\n if (this.STATE === TOUCHABLE_STATE.MOVED_OUTSIDE) {\n // This call is not throttled with delays (like in RN's implementation).\n this.moveToState(TOUCHABLE_STATE.BEGAN);\n }\n }\n\n onMoveOut() {\n // Long press should no longer be detected\n clearTimeout(this.longPressTimeout!);\n this.longPressTimeout = null;\n if (this.STATE === TOUCHABLE_STATE.BEGAN) {\n this.handleMoveOutside();\n }\n }\n\n render() {\n const hitSlop =\n (typeof this.props.hitSlop === 'number'\n ? {\n top: this.props.hitSlop,\n left: this.props.hitSlop,\n bottom: this.props.hitSlop,\n right: this.props.hitSlop,\n }\n : this.props.hitSlop) ?? undefined;\n\n const coreProps = {\n accessible: this.props.accessible !== false,\n accessibilityLabel: this.props.accessibilityLabel,\n accessibilityHint: this.props.accessibilityHint,\n accessibilityRole: this.props.accessibilityRole,\n // TODO: check if changed to no 's' correctly, also removed 2 props that are no longer available: `accessibilityComponentType` and `accessibilityTraits`,\n // would be good to check if it is ok for sure, see: https://github.com/facebook/react-native/issues/24016\n accessibilityState: this.props.accessibilityState,\n accessibilityActions: this.props.accessibilityActions,\n onAccessibilityAction: this.props.onAccessibilityAction,\n nativeID: this.props.nativeID,\n onLayout: this.props.onLayout,\n };\n\n return (\n <BaseButton\n style={this.props.containerStyle}\n onHandlerStateChange={\n // TODO: not sure if it can be undefined instead of null\n this.props.disabled ? undefined : this.onHandlerStateChange\n }\n onGestureEvent={this.onGestureEvent}\n hitSlop={hitSlop}\n userSelect={this.props.userSelect}\n shouldActivateOnStart={this.props.shouldActivateOnStart}\n disallowInterruption={this.props.disallowInterruption}\n testID={this.props.testID}\n touchSoundDisabled={this.props.touchSoundDisabled ?? false}\n enabled={!this.props.disabled}\n {...this.props.extraButtonProps}>\n <Animated.View {...coreProps} style={this.props.style}>\n {this.props.children}\n </Animated.View>\n </BaseButton>\n );\n }\n}\n"]}
@@ -8,9 +8,17 @@ export function getShadowNodeFromRef(ref) {
8
8
  // Load findHostInstance_DEPRECATED lazily because it may not be available before render
9
9
  if (findHostInstance_DEPRECATED === undefined) {
10
10
  try {
11
+ var _ReactFabric$default;
12
+
13
+ // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-assignment
14
+ const ReactFabric = require('react-native/Libraries/Renderer/shims/ReactFabric'); // Since RN 0.77 ReactFabric exports findHostInstance_DEPRECATED in default object so we're trying to
15
+ // access it first, then fallback on named export
11
16
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
12
- findHostInstance_DEPRECATED = // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-member-access
13
- require('react-native/Libraries/Renderer/shims/ReactFabric').findHostInstance_DEPRECATED;
17
+
18
+
19
+ findHostInstance_DEPRECATED = // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
20
+ (ReactFabric === null || ReactFabric === void 0 ? void 0 : (_ReactFabric$default = ReactFabric.default) === null || _ReactFabric$default === void 0 ? void 0 : _ReactFabric$default.findHostInstance_DEPRECATED) || ( // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
21
+ ReactFabric === null || ReactFabric === void 0 ? void 0 : ReactFabric.findHostInstance_DEPRECATED);
14
22
  } catch (e) {
15
23
  findHostInstance_DEPRECATED = _ref => null;
16
24
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["getShadowNodeFromRef.ts"],"names":["findHostInstance_DEPRECATED","getInternalInstanceHandleFromPublicInstance","getShadowNodeFromRef","ref","undefined","require","e","_ref","_internalInstanceHandle","stateNode","node"],"mappings":"AAAA;AACA;AACA;AACA;AACA,IAAIA,2BAAJ;AACA,IAAIC,2CAAJ;AAIA,OAAO,SAASC,oBAAT,CAA8BC,GAA9B,EAA4C;AACjD;AACA,MAAIH,2BAA2B,KAAKI,SAApC,EAA+C;AAC7C,QAAI;AACF;AACAJ,MAAAA,2BAA2B,GACzB;AACAK,MAAAA,OAAO,CAAC,mDAAD,CAAP,CAA6DL,2BAF/D;AAGD,KALD,CAKE,OAAOM,CAAP,EAAU;AACVN,MAAAA,2BAA2B,GAAIO,IAAD,IAAmB,IAAjD;AACD;AACF,GAXgD,CAajD;;;AACA,MAAIN,2CAA2C,KAAKG,SAApD,EAA+D;AAC7D,QAAI;AAAA;;AACF;AACAH,MAAAA,2CAA2C,GACzC;AADyC,+BAEzCI,OAAO,CAAC,wFAAD,CAAP,CACGJ,2CAHsC,yEAIzC;AACEE,MAAAA,GAAD,IAAcA,GAAG,CAACK,uBALrB;AAMD,KARD,CAQE,OAAOF,CAAP,EAAU;AACVL,MAAAA,2CAA2C,GAAIE,GAAD,IAC5C;AACAA,MAAAA,GAAG,CAACK,uBAFN;AAGD;AACF,GA5BgD,CA8BjD;;;AACA,SAAOP,2CAA2C,CAChDD,2BAA2B,CAACG,GAAD,CADqB,CAA3C,CAELM,SAFK,CAEKC,IAFZ;AAGD","sourcesContent":["// Used by GestureDetector (unsupported on web at the moment) to check whether the\n// attached view may get flattened on Fabric. This implementation causes errors\n// on web due to the static resolution of `require` statements by webpack breaking\n// the conditional importing. Solved by making .web file.\nlet findHostInstance_DEPRECATED: (ref: unknown) => void;\nlet getInternalInstanceHandleFromPublicInstance: (ref: unknown) => {\n stateNode: { node: unknown };\n};\n\nexport function getShadowNodeFromRef(ref: unknown) {\n // Load findHostInstance_DEPRECATED lazily because it may not be available before render\n if (findHostInstance_DEPRECATED === undefined) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n findHostInstance_DEPRECATED =\n // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-member-access\n require('react-native/Libraries/Renderer/shims/ReactFabric').findHostInstance_DEPRECATED;\n } catch (e) {\n findHostInstance_DEPRECATED = (_ref: unknown) => null;\n }\n }\n\n // Load findHostInstance_DEPRECATED lazily because it may not be available before render\n if (getInternalInstanceHandleFromPublicInstance === undefined) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n getInternalInstanceHandleFromPublicInstance =\n // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-member-access\n require('react-native/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance')\n .getInternalInstanceHandleFromPublicInstance ??\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return\n ((ref: any) => ref._internalInstanceHandle);\n } catch (e) {\n getInternalInstanceHandleFromPublicInstance = (ref: any) =>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return\n ref._internalInstanceHandle;\n }\n }\n\n // @ts-ignore Fabric\n return getInternalInstanceHandleFromPublicInstance(\n findHostInstance_DEPRECATED(ref)\n ).stateNode.node;\n}\n"]}
1
+ {"version":3,"sources":["getShadowNodeFromRef.ts"],"names":["findHostInstance_DEPRECATED","getInternalInstanceHandleFromPublicInstance","getShadowNodeFromRef","ref","undefined","ReactFabric","require","default","e","_ref","_internalInstanceHandle","stateNode","node"],"mappings":"AAAA;AACA;AACA;AACA;AACA,IAAIA,2BAAJ;AACA,IAAIC,2CAAJ;AAIA,OAAO,SAASC,oBAAT,CAA8BC,GAA9B,EAA4C;AACjD;AACA,MAAIH,2BAA2B,KAAKI,SAApC,EAA+C;AAC7C,QAAI;AAAA;;AACF;AACA,YAAMC,WAAW,GAAGC,OAAO,CAAC,mDAAD,CAA3B,CAFE,CAGF;AACA;AACA;;;AACAN,MAAAA,2BAA2B,GACzB;AACA,OAAAK,WAAW,SAAX,IAAAA,WAAW,WAAX,oCAAAA,WAAW,CAAEE,OAAb,8EAAsBP,2BAAtB,OACA;AACAK,MAAAA,WAFA,aAEAA,WAFA,uBAEAA,WAAW,CAAEL,2BAFb,CAFF;AAKD,KAXD,CAWE,OAAOQ,CAAP,EAAU;AACVR,MAAAA,2BAA2B,GAAIS,IAAD,IAAmB,IAAjD;AACD;AACF,GAjBgD,CAmBjD;;;AACA,MAAIR,2CAA2C,KAAKG,SAApD,EAA+D;AAC7D,QAAI;AAAA;;AACF;AACAH,MAAAA,2CAA2C,GACzC;AADyC,+BAEzCK,OAAO,CAAC,wFAAD,CAAP,CACGL,2CAHsC,yEAIzC;AACEE,MAAAA,GAAD,IAAcA,GAAG,CAACO,uBALrB;AAMD,KARD,CAQE,OAAOF,CAAP,EAAU;AACVP,MAAAA,2CAA2C,GAAIE,GAAD,IAC5C;AACAA,MAAAA,GAAG,CAACO,uBAFN;AAGD;AACF,GAlCgD,CAoCjD;;;AACA,SAAOT,2CAA2C,CAChDD,2BAA2B,CAACG,GAAD,CADqB,CAA3C,CAELQ,SAFK,CAEKC,IAFZ;AAGD","sourcesContent":["// Used by GestureDetector (unsupported on web at the moment) to check whether the\n// attached view may get flattened on Fabric. This implementation causes errors\n// on web due to the static resolution of `require` statements by webpack breaking\n// the conditional importing. Solved by making .web file.\nlet findHostInstance_DEPRECATED: (ref: unknown) => void;\nlet getInternalInstanceHandleFromPublicInstance: (ref: unknown) => {\n stateNode: { node: unknown };\n};\n\nexport function getShadowNodeFromRef(ref: unknown) {\n // Load findHostInstance_DEPRECATED lazily because it may not be available before render\n if (findHostInstance_DEPRECATED === undefined) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-assignment\n const ReactFabric = require('react-native/Libraries/Renderer/shims/ReactFabric');\n // Since RN 0.77 ReactFabric exports findHostInstance_DEPRECATED in default object so we're trying to\n // access it first, then fallback on named export\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n findHostInstance_DEPRECATED =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n ReactFabric?.default?.findHostInstance_DEPRECATED ||\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n ReactFabric?.findHostInstance_DEPRECATED;\n } catch (e) {\n findHostInstance_DEPRECATED = (_ref: unknown) => null;\n }\n }\n\n // Load findHostInstance_DEPRECATED lazily because it may not be available before render\n if (getInternalInstanceHandleFromPublicInstance === undefined) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n getInternalInstanceHandleFromPublicInstance =\n // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-member-access\n require('react-native/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance')\n .getInternalInstanceHandleFromPublicInstance ??\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return\n ((ref: any) => ref._internalInstanceHandle);\n } catch (e) {\n getInternalInstanceHandleFromPublicInstance = (ref: any) =>\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return\n ref._internalInstanceHandle;\n }\n }\n\n // @ts-ignore Fabric\n return getInternalInstanceHandleFromPublicInstance(\n findHostInstance_DEPRECATED(ref)\n ).stateNode.node;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["ghQueueMicrotask.ts"],"names":["ghQueueMicrotask","setImmediate","bind","requestAnimationFrame","queueMicrotask"],"mappings":"AAAA;AACA;AACA,OAAO,MAAMA,gBAAgB,GAC3B,OAAOC,YAAP,KAAwB,UAAxB,GACIA,YAAY,CAACC,IAAb,CAAkB,IAAlB,CADJ,GAEI,OAAOC,qBAAP,KAAiC,UAAjC,GACAA,qBAAqB,CAACD,IAAtB,CAA2B,IAA3B,CADA,GAEAE,cAAc,CAACF,IAAf,CAAoB,IAApB,CALC","sourcesContent":["// We check for typeof requestAnimationFrame because of SSR\n// Functions are bound to null to avoid issues with scope when using Metro inline requires.\nexport const ghQueueMicrotask =\n typeof setImmediate === 'function'\n ? setImmediate.bind(null)\n : typeof requestAnimationFrame === 'function'\n ? requestAnimationFrame.bind(null)\n : queueMicrotask.bind(null);\n"]}
1
+ {"version":3,"sources":["ghQueueMicrotask.ts"],"names":["ghQueueMicrotask","setImmediate","bind","requestAnimationFrame","queueMicrotask"],"mappings":"AAAA;AACA;AACA,OAAO,MAAMA,gBAAgB,GAC3B,OAAOC,YAAP,KAAwB,UAAxB,GACIA,YAAY,CAACC,IAAb,CAAkB,IAAlB,CADJ,GAEI,OAAOC,qBAAP,KAAiC,UAAjC,GACEA,qBAAqB,CAACD,IAAtB,CAA2B,IAA3B,CADF,GAEEE,cAAc,CAACF,IAAf,CAAoB,IAApB,CALD","sourcesContent":["// We check for typeof requestAnimationFrame because of SSR\n// Functions are bound to null to avoid issues with scope when using Metro inline requires.\nexport const ghQueueMicrotask =\n typeof setImmediate === 'function'\n ? setImmediate.bind(null)\n : typeof requestAnimationFrame === 'function'\n ? requestAnimationFrame.bind(null)\n : queueMicrotask.bind(null);\n"]}
@@ -16,6 +16,7 @@ import { ActionType } from '../ActionType';
16
16
  import { PressabilityDebugView } from './PressabilityDebugView';
17
17
  import GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';
18
18
  import { ghQueueMicrotask } from '../ghQueueMicrotask';
19
+ import { MountRegistry } from '../mountRegistry';
19
20
  const UIManagerAny = UIManager;
20
21
  customDirectEventTypes.topGestureHandlerEvent = {
21
22
  registrationName: 'onGestureHandlerEvent'
@@ -235,6 +236,9 @@ export default function createHandler({
235
236
  }
236
237
 
237
238
  scheduleFlushOperations();
239
+ ghQueueMicrotask(() => {
240
+ MountRegistry.gestureHandlerWillMount(this);
241
+ });
238
242
  });
239
243
 
240
244
  _defineProperty(this, "updateGestureHandler", newConfig => {
@@ -286,6 +290,11 @@ export default function createHandler({
286
290
  }
287
291
 
288
292
  this.createGestureHandler(filterConfig(transformProps ? transformProps(this.props) : this.props, [...allowedProps, ...customNativeProps], config));
293
+
294
+ if (!this.viewNode) {
295
+ throw new Error(`[Gesture Handler] Failed to obtain view for ${Handler.displayName}. Note that old API doesn't support functional components.`);
296
+ }
297
+
289
298
  this.attachGestureHandler(findNodeHandle(this.viewNode)); // TODO(TS) - check if this can be null
290
299
  }
291
300
 
@@ -313,6 +322,8 @@ export default function createHandler({
313
322
  // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
314
323
  delete handlerIDToTag[handlerID];
315
324
  }
325
+
326
+ MountRegistry.gestureHandlerWillUnmount(this);
316
327
  }
317
328
 
318
329
  update(remainingTries) {