react-native-gesture-handler 2.7.0 → 2.8.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 (182) hide show
  1. package/android/build.gradle +10 -5
  2. package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +3 -3
  3. package/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +7 -7
  4. package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +2 -2
  5. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +3 -3
  6. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/FlingGestureHandler.kt +12 -9
  7. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandler.kt +39 -31
  8. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerInteractionController.kt +1 -1
  9. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerOrchestrator.kt +28 -19
  10. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerRegistry.kt +1 -1
  11. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureUtils.kt +1 -1
  12. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/LongPressGestureHandler.kt +1 -1
  13. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ManualGestureHandler.kt +1 -1
  14. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/NativeViewGestureHandler.kt +5 -5
  15. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/OnTouchEventListener.kt +1 -1
  16. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PanGestureHandler.kt +7 -5
  17. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PinchGestureHandler.kt +11 -4
  18. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PointerEventsConfig.kt +1 -1
  19. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureDetector.kt +1 -1
  20. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureHandler.kt +7 -2
  21. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ScaleGestureDetector.java +1 -1
  22. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/TapGestureHandler.kt +3 -3
  23. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ViewConfigurationHelper.kt +1 -1
  24. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/react}/Extensions.kt +3 -3
  25. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +7 -6
  26. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +1 -5
  27. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +6 -6
  28. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +1 -1
  29. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +3 -3
  30. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +35 -14
  31. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +2 -2
  32. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +8 -6
  33. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +0 -2
  34. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +4 -2
  35. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +7 -7
  36. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +5 -5
  37. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +2 -2
  38. package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +5 -5
  39. package/ios/Handlers/RNManualHandler.m +24 -8
  40. package/ios/RNGestureHandlerButtonComponentView.mm +7 -8
  41. package/ios/RNGestureHandlerManager.mm +176 -178
  42. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
  43. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  44. package/lib/commonjs/RNGestureHandlerModule.windows.js +156 -0
  45. package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -0
  46. package/lib/commonjs/components/DrawerLayout.js +1 -0
  47. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  48. package/lib/commonjs/components/Swipeable.js.map +1 -1
  49. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  50. package/lib/commonjs/getShadowNodeFromRef.js +2 -2
  51. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
  52. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  53. package/lib/commonjs/handlers/gestureHandlerCommon.js +5 -2
  54. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  55. package/lib/commonjs/handlers/gestureHandlerTypesCompat.js +4 -0
  56. package/lib/commonjs/handlers/gestures/GestureDetector.js +26 -12
  57. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  58. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  59. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  60. package/lib/commonjs/handlers/gestures/gestureComposition.js +15 -4
  61. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -1
  62. package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
  63. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  64. package/lib/commonjs/web/handlers/FlingGestureHandler.js +18 -15
  65. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  66. package/lib/commonjs/web/handlers/GestureHandler.js +36 -7
  67. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  68. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +2 -1
  69. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  70. package/lib/commonjs/web/handlers/ManualGestureHandler.js +15 -0
  71. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
  72. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -5
  73. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  74. package/lib/commonjs/web/handlers/PanGestureHandler.js +0 -5
  75. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  76. package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -1
  77. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  78. package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -1
  79. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  80. package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -1
  81. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  82. package/lib/commonjs/web/interfaces.js.map +1 -1
  83. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  84. package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
  85. package/lib/commonjs/web_hammer/NodeManager.js +4 -1
  86. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
  87. package/lib/commonjs/web_hammer/PanGestureHandler.js +25 -6
  88. package/lib/commonjs/web_hammer/PanGestureHandler.js.map +1 -1
  89. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  90. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  91. package/lib/module/RNGestureHandlerModule.windows.js +117 -0
  92. package/lib/module/RNGestureHandlerModule.windows.js.map +1 -0
  93. package/lib/module/components/DrawerLayout.js +1 -0
  94. package/lib/module/components/DrawerLayout.js.map +1 -1
  95. package/lib/module/components/Swipeable.js.map +1 -1
  96. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  97. package/lib/module/getShadowNodeFromRef.js +2 -2
  98. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  99. package/lib/module/handlers/createHandler.js.map +1 -1
  100. package/lib/module/handlers/gestureHandlerCommon.js +5 -2
  101. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  102. package/lib/module/handlers/gestureHandlerTypesCompat.js +1 -1
  103. package/lib/module/handlers/gestures/GestureDetector.js +26 -12
  104. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  105. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  106. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  107. package/lib/module/handlers/gestures/gestureComposition.js +15 -4
  108. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
  109. package/lib/module/jestUtils/jestUtils.js.map +1 -1
  110. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  111. package/lib/module/web/handlers/FlingGestureHandler.js +18 -15
  112. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  113. package/lib/module/web/handlers/GestureHandler.js +36 -6
  114. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  115. package/lib/module/web/handlers/LongPressGestureHandler.js +2 -1
  116. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  117. package/lib/module/web/handlers/ManualGestureHandler.js +15 -0
  118. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
  119. package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -5
  120. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  121. package/lib/module/web/handlers/PanGestureHandler.js +0 -5
  122. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  123. package/lib/module/web/handlers/PinchGestureHandler.js +0 -1
  124. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  125. package/lib/module/web/handlers/RotationGestureHandler.js +0 -1
  126. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  127. package/lib/module/web/handlers/TapGestureHandler.js +0 -1
  128. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  129. package/lib/module/web/interfaces.js.map +1 -1
  130. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  131. package/lib/module/web_hammer/GestureHandler.js.map +1 -1
  132. package/lib/module/web_hammer/NodeManager.js +4 -1
  133. package/lib/module/web_hammer/NodeManager.js.map +1 -1
  134. package/lib/module/web_hammer/PanGestureHandler.js +25 -6
  135. package/lib/module/web_hammer/PanGestureHandler.js.map +1 -1
  136. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +1 -1
  137. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  138. package/lib/typescript/RNGestureHandlerModule.windows.d.ts +48 -0
  139. package/lib/typescript/components/DrawerLayout.d.ts +7 -0
  140. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
  141. package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -1
  142. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -1
  143. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +3 -1
  144. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +1 -0
  145. package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -0
  146. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +3 -1
  147. package/lib/typescript/web/interfaces.d.ts +3 -1
  148. package/lib/typescript/web/tools/NodeManager.d.ts +2 -2
  149. package/package.json +14 -10
  150. package/src/RNGestureHandlerModule.macos.ts +2 -2
  151. package/src/RNGestureHandlerModule.web.ts +2 -2
  152. package/src/RNGestureHandlerModule.windows.ts +140 -0
  153. package/src/components/DrawerLayout.tsx +14 -8
  154. package/src/components/Swipeable.tsx +2 -4
  155. package/src/components/touchables/TouchableOpacity.tsx +1 -1
  156. package/src/getShadowNodeFromRef.ts +3 -3
  157. package/src/handlers/createHandler.tsx +13 -15
  158. package/src/handlers/gestureHandlerCommon.ts +9 -4
  159. package/src/handlers/gestureHandlerTypesCompat.ts +34 -17
  160. package/src/handlers/gestures/GestureDetector.tsx +46 -19
  161. package/src/handlers/gestures/eventReceiver.ts +2 -1
  162. package/src/handlers/gestures/gesture.ts +8 -12
  163. package/src/handlers/gestures/gestureComposition.ts +19 -6
  164. package/src/jestUtils/jestUtils.ts +3 -4
  165. package/src/web/detectors/RotationGestureDetector.ts +2 -1
  166. package/src/web/handlers/FlingGestureHandler.ts +28 -20
  167. package/src/web/handlers/GestureHandler.ts +42 -17
  168. package/src/web/handlers/LongPressGestureHandler.ts +2 -2
  169. package/src/web/handlers/ManualGestureHandler.ts +10 -1
  170. package/src/web/handlers/NativeViewGestureHandler.ts +0 -5
  171. package/src/web/handlers/PanGestureHandler.ts +0 -6
  172. package/src/web/handlers/PinchGestureHandler.ts +0 -2
  173. package/src/web/handlers/RotationGestureHandler.ts +2 -5
  174. package/src/web/handlers/TapGestureHandler.ts +0 -2
  175. package/src/web/interfaces.ts +3 -0
  176. package/src/web/tools/InteractionManager.ts +2 -3
  177. package/src/web_hammer/GestureHandler.ts +6 -8
  178. package/src/web_hammer/NodeManager.ts +3 -1
  179. package/src/web_hammer/PanGestureHandler.ts +12 -6
  180. package/android/lib/build.gradle +0 -28
  181. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  182. package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
@@ -69,14 +69,24 @@ export class ComposedGesture extends Gesture {
69
69
 
70
70
  export class SimultaneousGesture extends ComposedGesture {
71
71
  prepare() {
72
- const simultaneousArray = this.gestures
73
- .flatMap((gesture) => gesture.toGestureArray())
74
- .concat(this.simultaneousGestures);
72
+ // this piece of magic works something like this:
73
+ // for every gesture in the array
74
+ const simultaneousArrays = this.gestures.map((gesture) =>
75
+ // we take the array it's in
76
+ this.gestures
77
+ // and make a copy without it
78
+ .filter((x) => x !== gesture)
79
+ // then we flatmap the result to get list of raw (not composed) gestures
80
+ // this way we don't make the gestures simultaneous with themselves, which is
81
+ // important when the gesture is `ExclusiveGesture` - we don't want to make
82
+ // exclusive gestures simultaneous
83
+ .flatMap((x) => x.toGestureArray())
84
+ );
75
85
 
76
- for (const gesture of this.gestures) {
86
+ for (let i = 0; i < this.gestures.length; i++) {
77
87
  this.prepareSingleGesture(
78
- gesture,
79
- simultaneousArray,
88
+ this.gestures[i],
89
+ simultaneousArrays[i],
80
90
  this.requireGesturesToFail
81
91
  );
82
92
  }
@@ -85,6 +95,8 @@ export class SimultaneousGesture extends ComposedGesture {
85
95
 
86
96
  export class ExclusiveGesture extends ComposedGesture {
87
97
  prepare() {
98
+ // transforms the array of gestures into array of grouped raw (not composed) gestures
99
+ // i.e. [gesture1, gesture2, ComposedGesture(gesture3, gesture4)] -> [[gesture1], [gesture2], [gesture3, gesture4]]
88
100
  const gestureArrays = this.gestures.map((gesture) =>
89
101
  gesture.toGestureArray()
90
102
  );
@@ -98,6 +110,7 @@ export class ExclusiveGesture extends ComposedGesture {
98
110
  this.requireGesturesToFail.concat(requireToFail)
99
111
  );
100
112
 
113
+ // every group gets to wait for all groups before it
101
114
  requireToFail = requireToFail.concat(gestureArrays[i]);
102
115
  }
103
116
  }
@@ -464,9 +464,8 @@ export function fireGestureHandler<THandler extends AllGestures | AllHandlers>(
464
464
  componentOrGesture: ReactTestInstance | GestureType,
465
465
  eventList: Partial<GestureHandlerTestEvent<ExtractConfig<THandler>>>[] = []
466
466
  ): void {
467
- const { emitEvent, handlerType, handlerTag } = getHandlerData(
468
- componentOrGesture
469
- );
467
+ const { emitEvent, handlerType, handlerTag } =
468
+ getHandlerData(componentOrGesture);
470
469
 
471
470
  let _ = fillMissingStatesTransitions(
472
471
  eventList,
@@ -478,7 +477,7 @@ export function fireGestureHandler<THandler extends AllGestures | AllHandlers>(
478
477
  // @ts-ignore TODO
479
478
  _ = _.map(wrapWithNativeEvent);
480
479
 
481
- const events = (_ as unknown) as WrappedGestureHandlerTestEvent[];
480
+ const events = _ as unknown as WrappedGestureHandlerTestEvent[];
482
481
 
483
482
  const firstEvent = events.shift()!;
484
483
 
@@ -8,7 +8,8 @@ export interface RotationGestureListener {
8
8
  }
9
9
 
10
10
  export default class RotationGestureDetector
11
- implements RotationGestureListener {
11
+ implements RotationGestureListener
12
+ {
12
13
  onRotationBegin: (detector: RotationGestureDetector) => boolean;
13
14
  onRotation: (detector: RotationGestureDetector) => boolean;
14
15
  onRotationEnd: (detector: RotationGestureDetector) => void;
@@ -21,6 +21,7 @@ export default class FlingGestureHandler extends GestureHandler {
21
21
  private startY = 0;
22
22
 
23
23
  private maxNumberOfPointersSimultaneously = 0;
24
+ private keyPointer = NaN;
24
25
 
25
26
  public init(ref: number, propsRef: React.RefObject<unknown>): void {
26
27
  super.init(ref, propsRef);
@@ -29,8 +30,6 @@ export default class FlingGestureHandler extends GestureHandler {
29
30
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
30
31
  super.updateGestureConfig({ enabled: enabled, ...props });
31
32
 
32
- this.enabled = enabled;
33
-
34
33
  if (this.config.direction) {
35
34
  this.direction = this.config.direction;
36
35
  }
@@ -51,9 +50,9 @@ export default class FlingGestureHandler extends GestureHandler {
51
50
  };
52
51
  }
53
52
 
54
- private startFling(event: AdaptedEvent): void {
55
- this.startX = event.x;
56
- this.startY = event.y;
53
+ private startFling(): void {
54
+ this.startX = this.tracker.getLastX(this.keyPointer);
55
+ this.startY = this.tracker.getLastY(this.keyPointer);
57
56
 
58
57
  this.begin();
59
58
 
@@ -62,18 +61,22 @@ export default class FlingGestureHandler extends GestureHandler {
62
61
  this.delayTimeout = setTimeout(() => this.fail(), this.maxDurationMs);
63
62
  }
64
63
 
65
- private tryEndFling(event: AdaptedEvent): boolean {
64
+ private tryEndFling(): boolean {
66
65
  if (
67
66
  this.maxNumberOfPointersSimultaneously ===
68
67
  this.numberOfPointersRequired &&
69
68
  ((this.direction & Direction.RIGHT &&
70
- event.x - this.startX > this.minAcceptableDelta) ||
69
+ this.tracker.getLastX(this.keyPointer) - this.startX >
70
+ this.minAcceptableDelta) ||
71
71
  (this.direction & Direction.LEFT &&
72
- this.startX - event.x > this.minAcceptableDelta) ||
72
+ this.startX - this.tracker.getLastX(this.keyPointer) >
73
+ this.minAcceptableDelta) ||
73
74
  (this.direction & Direction.UP &&
74
- this.startY - event.y > this.minAcceptableDelta) ||
75
+ this.startY - this.tracker.getLastY(this.keyPointer) >
76
+ this.minAcceptableDelta) ||
75
77
  (this.direction & Direction.DOWN &&
76
- event.y - this.startY > this.minAcceptableDelta))
78
+ this.tracker.getLastY(this.keyPointer) - this.startY >
79
+ this.minAcceptableDelta))
77
80
  ) {
78
81
  clearTimeout(this.delayTimeout);
79
82
  this.activate();
@@ -84,40 +87,43 @@ export default class FlingGestureHandler extends GestureHandler {
84
87
  return false;
85
88
  }
86
89
 
87
- private endFling(event: AdaptedEvent) {
88
- if (!this.tryEndFling(event)) {
90
+ private endFling() {
91
+ if (!this.tryEndFling()) {
89
92
  this.fail();
90
93
  }
91
94
  }
92
95
 
93
96
  protected onPointerDown(event: AdaptedEvent): void {
94
97
  this.tracker.addToTracker(event);
98
+ this.keyPointer = event.pointerId;
99
+
95
100
  super.onPointerDown(event);
96
- this.newPointerAction(event);
101
+ this.newPointerAction();
97
102
  }
98
103
 
99
104
  protected onPointerAdd(event: AdaptedEvent): void {
100
105
  this.tracker.addToTracker(event);
101
106
  super.onPointerAdd(event);
102
- this.newPointerAction(event);
107
+ this.newPointerAction();
103
108
  }
104
109
 
105
- private newPointerAction(event: AdaptedEvent): void {
110
+ private newPointerAction(): void {
106
111
  if (this.currentState === State.UNDETERMINED) {
107
- this.startFling(event);
112
+ this.startFling();
108
113
  }
109
114
 
110
115
  if (this.currentState !== State.BEGAN) {
111
116
  return;
112
117
  }
113
118
 
114
- this.tryEndFling(event);
119
+ this.tryEndFling();
115
120
 
116
121
  if (
117
122
  this.tracker.getTrackedPointersCount() >
118
123
  this.maxNumberOfPointersSimultaneously
119
124
  ) {
120
- this.maxNumberOfPointersSimultaneously = this.tracker.getTrackedPointersCount();
125
+ this.maxNumberOfPointersSimultaneously =
126
+ this.tracker.getTrackedPointersCount();
121
127
  }
122
128
  }
123
129
 
@@ -128,7 +134,7 @@ export default class FlingGestureHandler extends GestureHandler {
128
134
  return;
129
135
  }
130
136
 
131
- this.tryEndFling(event);
137
+ this.tryEndFling();
132
138
 
133
139
  super.onPointerMove(event);
134
140
  }
@@ -136,6 +142,8 @@ export default class FlingGestureHandler extends GestureHandler {
136
142
  protected onPointerUp(event: AdaptedEvent): void {
137
143
  super.onPointerUp(event);
138
144
  this.onUp(event);
145
+
146
+ this.keyPointer = NaN;
139
147
  }
140
148
 
141
149
  protected onPointerRemove(event: AdaptedEvent): void {
@@ -148,7 +156,7 @@ export default class FlingGestureHandler extends GestureHandler {
148
156
  if (this.currentState !== State.BEGAN) {
149
157
  return;
150
158
  }
151
- this.endFling(event);
159
+ this.endFling();
152
160
  }
153
161
 
154
162
  protected onPointerCancel(event: AdaptedEvent): void {
@@ -70,13 +70,18 @@ export default abstract class GestureHandler {
70
70
  );
71
71
  }
72
72
 
73
- this.view = (findNodeHandle(this.ref) as unknown) as HTMLElement;
73
+ this.view = findNodeHandle(this.ref) as unknown as HTMLElement;
74
74
  this.view.style['touchAction'] = 'none';
75
- this.view.style['webkitUserSelect'] = 'none';
76
- this.view.style['userSelect'] = 'none';
77
-
78
75
  //@ts-ignore This one disables default events on Safari
79
76
  this.view.style['WebkitTouchCallout'] = 'none';
77
+
78
+ if (!this.config.userSelect) {
79
+ this.view.style['webkitUserSelect'] = 'none';
80
+ this.view.style['userSelect'] = 'none';
81
+ } else {
82
+ this.view.style['webkitUserSelect'] = this.config.userSelect;
83
+ this.view.style['userSelect'] = this.config.userSelect;
84
+ }
80
85
  }
81
86
 
82
87
  private addEventManager(manager: EventManager): void {
@@ -121,19 +126,17 @@ export default abstract class GestureHandler {
121
126
  return;
122
127
  }
123
128
 
129
+ const oldState = this.currentState;
130
+ this.currentState = newState;
131
+
124
132
  if (
125
133
  this.tracker.getTrackedPointersCount() > 0 &&
126
134
  this.config.needsPointerData &&
127
- (newState === State.END ||
128
- newState === State.CANCELLED ||
129
- newState === State.FAILED)
135
+ this.isFinished()
130
136
  ) {
131
137
  this.cancelTouches();
132
138
  }
133
139
 
134
- const oldState = this.currentState;
135
- this.currentState = newState;
136
-
137
140
  GestureHandlerOrchestrator.getInstance().onHandlerStateChange(
138
141
  this,
139
142
  newState,
@@ -324,6 +327,18 @@ export default abstract class GestureHandler {
324
327
  }
325
328
  }
326
329
  protected onPointerOut(event: AdaptedEvent): void {
330
+ if (this.shouldCancellWhenOutside) {
331
+ switch (this.currentState) {
332
+ case State.ACTIVE:
333
+ this.cancel();
334
+ break;
335
+ case State.BEGAN:
336
+ this.fail();
337
+ break;
338
+ }
339
+ return;
340
+ }
341
+
327
342
  if (this.config.needsPointerData) {
328
343
  this.sendTouchEvent(event);
329
344
  }
@@ -362,9 +377,8 @@ export default abstract class GestureHandler {
362
377
  const { onGestureHandlerEvent }: PropsRef = this.propsRef
363
378
  .current as PropsRef;
364
379
 
365
- const touchEvent: ResultTouchEvent | undefined = this.transformTouchEvent(
366
- event
367
- );
380
+ const touchEvent: ResultTouchEvent | undefined =
381
+ this.transformTouchEvent(event);
368
382
 
369
383
  if (touchEvent) {
370
384
  invokeNullableMethod(onGestureHandlerEvent, touchEvent);
@@ -376,10 +390,8 @@ export default abstract class GestureHandler {
376
390
  //
377
391
 
378
392
  public sendEvent = (newState: State, oldState: State): void => {
379
- const {
380
- onGestureHandlerEvent,
381
- onGestureHandlerStateChange,
382
- }: PropsRef = this.propsRef.current as PropsRef;
393
+ const { onGestureHandlerEvent, onGestureHandlerStateChange }: PropsRef =
394
+ this.propsRef.current as PropsRef;
383
395
 
384
396
  const resultEvent: ResultEvent = this.transformEventData(
385
397
  newState,
@@ -578,6 +590,11 @@ export default abstract class GestureHandler {
578
590
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
579
591
  this.config = { enabled: enabled, ...props };
580
592
  this.enabled = enabled;
593
+
594
+ if (this.config.shouldCancelWhenOutside !== undefined) {
595
+ this.setShouldCancelWhenOutside(this.config.shouldCancelWhenOutside);
596
+ }
597
+
581
598
  this.validateHitSlops();
582
599
 
583
600
  if (this.enabled) {
@@ -775,6 +792,14 @@ export default abstract class GestureHandler {
775
792
  return this.enabled;
776
793
  }
777
794
 
795
+ private isFinished(): boolean {
796
+ return (
797
+ this.currentState === State.END ||
798
+ this.currentState === State.FAILED ||
799
+ this.currentState === State.CANCELLED
800
+ );
801
+ }
802
+
778
803
  protected setShouldCancelWhenOutside(shouldCancel: boolean) {
779
804
  this.shouldCancellWhenOutside = shouldCancel;
780
805
  }
@@ -23,6 +23,8 @@ export default class LongPressGestureHandler extends GestureHandler {
23
23
  public init(ref: number, propsRef: React.RefObject<unknown>) {
24
24
  super.init(ref, propsRef);
25
25
  this.setShouldCancelWhenOutside(true);
26
+
27
+ this.view.oncontextmenu = () => false;
26
28
  }
27
29
 
28
30
  protected transformNativeEvent() {
@@ -40,8 +42,6 @@ export default class LongPressGestureHandler extends GestureHandler {
40
42
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
41
43
  super.updateGestureConfig({ enabled: enabled, ...props });
42
44
 
43
- this.enabled = enabled;
44
-
45
45
  if (this.config.minDurationMs !== undefined) {
46
46
  this.minDurationMs = this.config.minDurationMs;
47
47
  }
@@ -1,4 +1,4 @@
1
- import { AdaptedEvent } from '../interfaces';
1
+ import { AdaptedEvent, Config } from '../interfaces';
2
2
  import GestureHandler from './GestureHandler';
3
3
 
4
4
  export default class ManualGestureHandler extends GestureHandler {
@@ -6,6 +6,10 @@ export default class ManualGestureHandler extends GestureHandler {
6
6
  super.init(ref, propsRef);
7
7
  }
8
8
 
9
+ public updateGestureConfig({ enabled = true, ...props }: Config): void {
10
+ super.updateGestureConfig({ enabled: enabled, ...props });
11
+ }
12
+
9
13
  protected onPointerDown(event: AdaptedEvent): void {
10
14
  this.tracker.addToTracker(event);
11
15
  super.onPointerDown(event);
@@ -22,6 +26,11 @@ export default class ManualGestureHandler extends GestureHandler {
22
26
  super.onPointerMove(event);
23
27
  }
24
28
 
29
+ protected onPointerOutOfBounds(event: AdaptedEvent): void {
30
+ this.tracker.track(event);
31
+ super.onPointerOutOfBounds(event);
32
+ }
33
+
25
34
  protected onPointerUp(event: AdaptedEvent): void {
26
35
  super.onPointerUp(event);
27
36
  this.tracker.removeFromTracker(event.pointerId);
@@ -30,11 +30,6 @@ export default class NativeViewGestureHandler extends GestureHandler {
30
30
  } else {
31
31
  this.buttonRole = false;
32
32
  }
33
-
34
- if (this.view.tagName.toLowerCase() === 'input') {
35
- //Enables text input on Safari
36
- this.view.style['webkitUserSelect'] = 'auto';
37
- }
38
33
  }
39
34
 
40
35
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
@@ -65,8 +65,6 @@ export default class PanGestureHandler extends GestureHandler {
65
65
  super.updateGestureConfig({ enabled: enabled, ...props });
66
66
  this.checkCustomActivationCriteria(this.customActivationProperties);
67
67
 
68
- this.enabled = enabled;
69
-
70
68
  if (this.config.minDist !== undefined) {
71
69
  this.minDistSq = this.config.minDist * this.config.minDist;
72
70
  } else if (this.hasCustomActivationCriteria) {
@@ -98,10 +96,6 @@ export default class PanGestureHandler extends GestureHandler {
98
96
  this.activateAfterLongPress = this.config.activateAfterLongPress;
99
97
  }
100
98
 
101
- if (this.config.shouldCancelWhenOutside) {
102
- this.setShouldCancelWhenOutside(false);
103
- }
104
-
105
99
  if (this.config.activeOffsetXStart !== undefined) {
106
100
  this.activeOffsetXStart = this.config.activeOffsetXStart;
107
101
 
@@ -57,8 +57,6 @@ export default class PinchGestureHandler extends GestureHandler {
57
57
 
58
58
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
59
59
  super.updateGestureConfig({ enabled: enabled, ...props });
60
-
61
- this.enabled = enabled;
62
60
  }
63
61
 
64
62
  protected transformNativeEvent() {
@@ -41,9 +41,8 @@ export default class RotationGestureHandler extends GestureHandler {
41
41
  },
42
42
  };
43
43
 
44
- private rotationGestureDetector: RotationGestureDetector = new RotationGestureDetector(
45
- this.rotationGestureListener
46
- );
44
+ private rotationGestureDetector: RotationGestureDetector =
45
+ new RotationGestureDetector(this.rotationGestureListener);
47
46
 
48
47
  public init(ref: number, propsRef: React.RefObject<unknown>): void {
49
48
  super.init(ref, propsRef);
@@ -53,8 +52,6 @@ export default class RotationGestureHandler extends GestureHandler {
53
52
 
54
53
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
55
54
  super.updateGestureConfig({ enabled: enabled, ...props });
56
-
57
- this.enabled = enabled;
58
55
  }
59
56
 
60
57
  protected transformNativeEvent() {
@@ -39,8 +39,6 @@ export default class TapGestureHandler extends GestureHandler {
39
39
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
40
40
  super.updateGestureConfig({ enabled: enabled, ...props });
41
41
 
42
- this.enabled = enabled;
43
-
44
42
  if (this.config.numberOfTaps !== undefined) {
45
43
  this.numberOfTaps = this.config.numberOfTaps;
46
44
  }
@@ -1,3 +1,4 @@
1
+ import { UserSelect } from '../handlers/gestureHandlerCommon';
1
2
  import { Directions } from '../Directions';
2
3
  import { State } from '../State';
3
4
 
@@ -20,6 +21,7 @@ type ConfigArgs =
20
21
  | number
21
22
  | boolean
22
23
  | HitSlop
24
+ | UserSelect
23
25
  | Directions
24
26
  | Handler[]
25
27
  | null
@@ -31,6 +33,7 @@ export interface Config extends Record<string, ConfigArgs> {
31
33
  waitFor?: Handler[] | null;
32
34
  hitSlop?: HitSlop;
33
35
  shouldCancelWhenOutside?: boolean;
36
+ userSelect?: UserSelect;
34
37
 
35
38
  activateAfterLongPress?: number;
36
39
  failOffsetXStart?: number;
@@ -69,9 +69,8 @@ export default class InteractionManager {
69
69
  handler: GestureHandler,
70
70
  otherHandler: GestureHandler
71
71
  ): boolean {
72
- const simultaneousHandlers:
73
- | number[]
74
- | undefined = this.simultaneousRelations.get(handler.getTag());
72
+ const simultaneousHandlers: number[] | undefined =
73
+ this.simultaneousRelations.get(handler.getTag());
75
74
  if (!simultaneousHandlers) {
76
75
  return false;
77
76
  }
@@ -206,10 +206,8 @@ abstract class GestureHandler {
206
206
  }
207
207
 
208
208
  sendEvent = (nativeEvent: HammerInputExt) => {
209
- const {
210
- onGestureHandlerEvent,
211
- onGestureHandlerStateChange,
212
- } = this.propsRef.current;
209
+ const { onGestureHandlerEvent, onGestureHandlerStateChange } =
210
+ this.propsRef.current;
213
211
 
214
212
  const event = this.transformEventData(nativeEvent);
215
213
 
@@ -312,7 +310,7 @@ abstract class GestureHandler {
312
310
  return;
313
311
  }
314
312
 
315
- this.onRawEvent((ev as unknown) as HammerInputExt);
313
+ this.onRawEvent(ev as unknown as HammerInputExt);
316
314
 
317
315
  // TODO: Bacon: Check against something other than null
318
316
  // The isFirst value is not called when the first rotation is calculated.
@@ -336,17 +334,17 @@ abstract class GestureHandler {
336
334
  // TODO(TS) Hammer types aren't exactly that what we get in runtime
337
335
  if (!this.isDiscrete) {
338
336
  this.hammer!.on(`${this.name}start`, (event: HammerInput) =>
339
- this.onStart((event as unknown) as HammerInputExt)
337
+ this.onStart(event as unknown as HammerInputExt)
340
338
  );
341
339
  this.hammer!.on(
342
340
  `${this.name}end ${this.name}cancel`,
343
341
  (event: HammerInput) => {
344
- this.onGestureEnded((event as unknown) as HammerInputExt);
342
+ this.onGestureEnded(event as unknown as HammerInputExt);
345
343
  }
346
344
  );
347
345
  }
348
346
  this.hammer!.on(this.name, (ev: HammerInput) =>
349
- this.onGestureActivated((ev as unknown) as HammerInputExt)
347
+ this.onGestureActivated(ev as unknown as HammerInputExt)
350
348
  ); // TODO(TS) remove cast after https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50438 is merged
351
349
  }
352
350
 
@@ -7,7 +7,9 @@ const gestures: Record<
7
7
  > = {};
8
8
 
9
9
  export function getHandler(tag: number) {
10
- if (tag in gestures) return gestures[tag];
10
+ if (tag in gestures) {
11
+ return gestures[tag];
12
+ }
11
13
 
12
14
  throw new Error(`No handler for tag ${tag}`);
13
15
  }
@@ -54,23 +54,29 @@ class PanGestureHandler extends DraggingGestureHandler {
54
54
  return Hammer.DIRECTION_ALL;
55
55
  }
56
56
 
57
- if (!isnan(activeOffsetXStart))
57
+ if (!isnan(activeOffsetXStart)) {
58
58
  horizontalDirections.push(Hammer.DIRECTION_LEFT);
59
- if (!isnan(activeOffsetXEnd))
59
+ }
60
+ if (!isnan(activeOffsetXEnd)) {
60
61
  horizontalDirections.push(Hammer.DIRECTION_RIGHT);
61
- if (horizontalDirections.length === 2)
62
+ }
63
+ if (horizontalDirections.length === 2) {
62
64
  horizontalDirections = [Hammer.DIRECTION_HORIZONTAL];
65
+ }
63
66
 
64
67
  directions = directions.concat(horizontalDirections);
65
68
  let verticalDirections = [];
66
69
 
67
- if (!isnan(activeOffsetYStart))
70
+ if (!isnan(activeOffsetYStart)) {
68
71
  verticalDirections.push(Hammer.DIRECTION_UP);
69
- if (!isnan(activeOffsetYEnd))
72
+ }
73
+ if (!isnan(activeOffsetYEnd)) {
70
74
  verticalDirections.push(Hammer.DIRECTION_DOWN);
75
+ }
71
76
 
72
- if (verticalDirections.length === 2)
77
+ if (verticalDirections.length === 2) {
73
78
  verticalDirections = [Hammer.DIRECTION_VERTICAL];
79
+ }
74
80
 
75
81
  directions = directions.concat(verticalDirections);
76
82
 
@@ -1,28 +0,0 @@
1
- apply plugin: 'com.android.library'
2
-
3
- repositories {
4
- maven { url 'https://repo1.maven.org/maven2' }
5
- }
6
-
7
- android {
8
- compileSdkVersion 23
9
- buildToolsVersion '25.0.0'
10
-
11
- defaultConfig {
12
- minSdkVersion 16
13
- targetSdkVersion 23
14
- versionCode 1
15
- versionName "1.0"
16
- }
17
- buildTypes {
18
- release {
19
- minifyEnabled false
20
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21
- }
22
- }
23
- }
24
-
25
- dependencies {
26
- testCompile 'junit:junit:4.12'
27
- compile 'com.android.support:appcompat-v7:23.4.0'
28
- }
@@ -1,19 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>SchemeUserState</key>
6
- <dict>
7
- <key>RNGestureHandler-tvOS.xcscheme_^#shared#^_</key>
8
- <dict>
9
- <key>orderHint</key>
10
- <integer>0</integer>
11
- </dict>
12
- <key>RNGestureHandler.xcscheme_^#shared#^_</key>
13
- <dict>
14
- <key>orderHint</key>
15
- <integer>1</integer>
16
- </dict>
17
- </dict>
18
- </dict>
19
- </plist>