react-native-gesture-handler 2.13.3 → 2.14.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 (142) hide show
  1. package/RNGestureHandler.podspec +19 -25
  2. package/android/build.gradle +3 -2
  3. package/android/gradle.properties +2 -2
  4. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +36 -72
  5. package/android/src/main/java/com/swmansion/gesturehandler/react/Extensions.kt +1 -1
  6. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +13 -9
  7. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +12 -14
  8. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +8 -1
  9. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +34 -88
  10. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +1 -1
  11. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +18 -12
  12. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/FlingGestureHandlerEventDataBuilder.kt +30 -0
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/GestureHandlerEventDataBuilder.kt +22 -0
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/HoverGestureHandlerEventDataBuilder.kt +30 -0
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/LongPressGestureHandlerEventDataBuilder.kt +33 -0
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/ManualGestureHandlerEventDataBuilder.kt +5 -0
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/NativeGestureHandlerEventDataBuilder.kt +18 -0
  18. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PanGestureHandlerEventDataBuilder.kt +42 -0
  19. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PinchGestureHandlerEventDataBuilder.kt +30 -0
  20. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/RotationGestureHandlerEventDataBuilder.kt +30 -0
  21. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/TapGestureHandlerEventDataBuilder.kt +30 -0
  22. package/android/src/main/jni/CMakeLists.txt +14 -2
  23. package/ios/Handlers/RNHoverHandler.m +15 -14
  24. package/ios/RNGestureHandler.m +11 -0
  25. package/ios/RNGestureHandlerButtonComponentView.mm +2 -0
  26. package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js +1 -1
  27. package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  28. package/lib/commonjs/getReactNativeVersion.js +22 -0
  29. package/lib/commonjs/getReactNativeVersion.js.map +1 -0
  30. package/lib/commonjs/getReactNativeVersion.web.js +11 -0
  31. package/lib/commonjs/getReactNativeVersion.web.js.map +1 -0
  32. package/lib/commonjs/handlers/gestureHandlerCommon.js +1 -1
  33. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  34. package/lib/commonjs/handlers/gestures/GestureDetector.js +13 -3
  35. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  36. package/lib/commonjs/handlers/gestures/gesture.js +8 -0
  37. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  38. package/lib/commonjs/utils.js +0 -13
  39. package/lib/commonjs/utils.js.map +1 -1
  40. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  41. package/lib/commonjs/web/interfaces.js.map +1 -1
  42. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +4 -15
  43. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  44. package/lib/commonjs/web/tools/InteractionManager.js +27 -29
  45. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  46. package/lib/commonjs/web/tools/PointerEventManager.js +11 -3
  47. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  48. package/lib/module/components/touchables/TouchableNativeFeedback.android.js +1 -1
  49. package/lib/module/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  50. package/lib/module/getReactNativeVersion.js +10 -0
  51. package/lib/module/getReactNativeVersion.js.map +1 -0
  52. package/lib/module/getReactNativeVersion.web.js +4 -0
  53. package/lib/module/getReactNativeVersion.web.js.map +1 -0
  54. package/lib/module/handlers/gestureHandlerCommon.js +1 -1
  55. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  56. package/lib/module/handlers/gestures/GestureDetector.js +12 -3
  57. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  58. package/lib/module/handlers/gestures/gesture.js +8 -0
  59. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  60. package/lib/module/utils.js +0 -6
  61. package/lib/module/utils.js.map +1 -1
  62. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  63. package/lib/module/web/interfaces.js.map +1 -1
  64. package/lib/module/web/tools/GestureHandlerOrchestrator.js +4 -15
  65. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  66. package/lib/module/web/tools/InteractionManager.js +27 -29
  67. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  68. package/lib/module/web/tools/PointerEventManager.js +11 -3
  69. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  70. package/lib/typescript/ActionType.d.ts +1 -1
  71. package/lib/typescript/Directions.d.ts +1 -1
  72. package/lib/typescript/PlatformConstants.d.ts +1 -1
  73. package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
  74. package/lib/typescript/State.d.ts +1 -1
  75. package/lib/typescript/TouchEventType.d.ts +1 -1
  76. package/lib/typescript/components/DrawerLayout.d.ts +9 -9
  77. package/lib/typescript/components/GestureButtons.d.ts +3 -3
  78. package/lib/typescript/components/GestureComponents.d.ts +6 -6
  79. package/lib/typescript/components/GestureComponents.web.d.ts +1 -1
  80. package/lib/typescript/components/GestureHandlerRootView.android.d.ts +2 -1
  81. package/lib/typescript/components/GestureHandlerRootView.d.ts +2 -1
  82. package/lib/typescript/components/GestureHandlerRootView.web.d.ts +2 -1
  83. package/lib/typescript/components/Swipeable.d.ts +4 -4
  84. package/lib/typescript/components/touchables/GenericTouchable.d.ts +4 -3
  85. package/lib/typescript/components/touchables/TouchableHighlight.d.ts +4 -3
  86. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +7 -6
  87. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +3 -2
  88. package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +1 -1
  89. package/lib/typescript/getReactNativeVersion.d.ts +4 -0
  90. package/lib/typescript/getReactNativeVersion.web.d.ts +1 -0
  91. package/lib/typescript/handlers/FlingGestureHandler.d.ts +2 -2
  92. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -2
  93. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +2 -2
  94. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +3 -3
  95. package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -2
  96. package/lib/typescript/handlers/PinchGestureHandler.d.ts +2 -2
  97. package/lib/typescript/handlers/RotationGestureHandler.d.ts +2 -2
  98. package/lib/typescript/handlers/TapGestureHandler.d.ts +2 -2
  99. package/lib/typescript/handlers/createHandler.d.ts +1 -1
  100. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +11 -10
  101. package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +32 -32
  102. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -2
  103. package/lib/typescript/handlers/gestures/flingGesture.d.ts +1 -1
  104. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +2 -2
  105. package/lib/typescript/handlers/gestures/gesture.d.ts +7 -5
  106. package/lib/typescript/handlers/gestures/gestureComposition.d.ts +4 -4
  107. package/lib/typescript/handlers/gestures/hoverGesture.d.ts +3 -3
  108. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +1 -1
  109. package/lib/typescript/handlers/gestures/manualGesture.d.ts +1 -1
  110. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +1 -1
  111. package/lib/typescript/handlers/gestures/panGesture.d.ts +2 -2
  112. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +2 -2
  113. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +2 -2
  114. package/lib/typescript/handlers/gestures/tapGesture.d.ts +1 -1
  115. package/lib/typescript/jestUtils/jestUtils.d.ts +6 -6
  116. package/lib/typescript/typeUtils.d.ts +1 -1
  117. package/lib/typescript/utils.d.ts +1 -5
  118. package/lib/typescript/web/interfaces.d.ts +4 -3
  119. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +0 -1
  120. package/lib/typescript/web/tools/InteractionManager.d.ts +2 -1
  121. package/lib/typescript/web_hammer/GestureHandler.d.ts +2 -2
  122. package/package.json +7 -7
  123. package/src/components/touchables/TouchableNativeFeedback.android.tsx +2 -1
  124. package/src/getReactNativeVersion.ts +11 -0
  125. package/src/getReactNativeVersion.web.ts +3 -0
  126. package/src/handlers/gestureHandlerCommon.ts +6 -1
  127. package/src/handlers/gestures/GestureDetector.tsx +9 -6
  128. package/src/handlers/gestures/gesture.ts +9 -1
  129. package/src/utils.ts +0 -8
  130. package/src/web/handlers/GestureHandler.ts +1 -1
  131. package/src/web/interfaces.ts +1 -0
  132. package/src/web/tools/GestureHandlerOrchestrator.ts +4 -13
  133. package/src/web/tools/InteractionManager.ts +37 -30
  134. package/src/web/tools/PointerEventManager.ts +12 -3
  135. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +0 -8
  136. /package/android/{src/fabric → fabric/src/main}/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +0 -0
  137. /package/android/{src/fabric → fabric/src/main}/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +0 -0
  138. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +0 -0
  139. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +0 -0
  140. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +0 -0
  141. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +0 -0
  142. /package/android/{src/paper → paper/src/main}/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +0 -0
package/src/utils.ts CHANGED
@@ -1,11 +1,3 @@
1
- import pack from 'react-native/package.json';
2
-
3
- const [majorStr, minorStr] = pack.version.split('.');
4
- export const REACT_NATIVE_VERSION = {
5
- major: parseInt(majorStr, 10),
6
- minor: parseInt(minorStr, 10),
7
- };
8
-
9
1
  export function toArray<T>(object: T | T[]): T[] {
10
2
  if (!Array.isArray(object)) {
11
3
  return [object];
@@ -821,7 +821,7 @@ function invokeNullableMethod(
821
821
  return;
822
822
  }
823
823
 
824
- const { argMapping } = method.__nodeConfig;
824
+ const { argMapping }: { argMapping: unknown } = method.__nodeConfig;
825
825
  if (!Array.isArray(argMapping)) {
826
826
  return;
827
827
  }
@@ -32,6 +32,7 @@ export interface Config extends Record<string, ConfigArgs> {
32
32
  enabled?: boolean;
33
33
  simultaneousHandlers?: Handler[] | null;
34
34
  waitFor?: Handler[] | null;
35
+ blocksHandlers?: Handler[] | null;
35
36
  hitSlop?: HitSlop;
36
37
  shouldCancelWhenOutside?: boolean;
37
38
  userSelect?: UserSelect;
@@ -9,7 +9,6 @@ export default class GestureHandlerOrchestrator {
9
9
 
10
10
  private gestureHandlers: GestureHandler[] = [];
11
11
  private awaitingHandlers: GestureHandler[] = [];
12
- private handlersToCancel: GestureHandler[] = [];
13
12
 
14
13
  private handlingChangeSemaphore = 0;
15
14
  private activationIndex = 0;
@@ -34,7 +33,6 @@ export default class GestureHandlerOrchestrator {
34
33
  public removeHandlerFromOrchestrator(handler: GestureHandler): void {
35
34
  this.gestureHandlers.splice(this.gestureHandlers.indexOf(handler), 1);
36
35
  this.awaitingHandlers.splice(this.awaitingHandlers.indexOf(handler), 1);
37
- this.handlersToCancel.splice(this.handlersToCancel.indexOf(handler), 1);
38
36
  }
39
37
 
40
38
  private cleanupFinishedHandlers(): void {
@@ -177,17 +175,12 @@ export default class GestureHandlerOrchestrator {
177
175
  handler.setShouldResetProgress(true);
178
176
  handler.setActivationIndex(this.activationIndex++);
179
177
 
180
- this.gestureHandlers.forEach((otherHandler) => {
181
- // Order of arguments is correct - we check whether current handler should cancel existing handlers
182
-
183
- if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
184
- this.handlersToCancel.push(otherHandler);
178
+ for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {
179
+ if (this.shouldHandlerBeCancelledBy(this.gestureHandlers[i], handler)) {
180
+ this.gestureHandlers[i].cancel();
185
181
  }
186
- });
187
-
188
- for (let i = this.handlersToCancel.length - 1; i >= 0; --i) {
189
- this.handlersToCancel[i]?.cancel();
190
182
  }
183
+
191
184
  this.awaitingHandlers.forEach((otherHandler) => {
192
185
  if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
193
186
  otherHandler?.cancel();
@@ -212,8 +205,6 @@ export default class GestureHandlerOrchestrator {
212
205
  }
213
206
  }
214
207
  }
215
-
216
- this.handlersToCancel = [];
217
208
  }
218
209
 
219
210
  private addAwaitingHandler(handler: GestureHandler): void {
@@ -5,6 +5,7 @@ export default class InteractionManager {
5
5
  private static instance: InteractionManager;
6
6
  private readonly waitForRelations: Map<number, number[]> = new Map();
7
7
  private readonly simultaneousRelations: Map<number, number[]> = new Map();
8
+ private readonly blocksHandlersRelations: Map<number, number[]> = new Map();
8
9
 
9
10
  // Private becaues of singleton
10
11
  // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function
@@ -40,6 +41,19 @@ export default class InteractionManager {
40
41
 
41
42
  this.simultaneousRelations.set(handler.getTag(), simultaneousHandlers);
42
43
  }
44
+
45
+ if (config.blocksHandlers) {
46
+ const blocksHandlers: number[] = [];
47
+ config.blocksHandlers.forEach((otherHandler: Handler): void => {
48
+ if (typeof otherHandler === 'number') {
49
+ blocksHandlers.push(otherHandler);
50
+ } else {
51
+ blocksHandlers.push(otherHandler.handlerTag);
52
+ }
53
+ });
54
+
55
+ this.blocksHandlersRelations.set(handler.getTag(), blocksHandlers);
56
+ }
43
57
  }
44
58
 
45
59
  public shouldWaitForHandlerFailure(
@@ -49,20 +63,12 @@ export default class InteractionManager {
49
63
  const waitFor: number[] | undefined = this.waitForRelations.get(
50
64
  handler.getTag()
51
65
  );
52
- if (!waitFor) {
53
- return false;
54
- }
55
-
56
- let shouldWait = false;
57
-
58
- waitFor.forEach((tag: number): void => {
59
- if (tag === otherHandler.getTag()) {
60
- shouldWait = true;
61
- return; //Returns from callback
62
- }
63
- });
64
66
 
65
- return shouldWait;
67
+ return (
68
+ waitFor?.find((tag: number) => {
69
+ return tag === otherHandler.getTag();
70
+ }) !== undefined
71
+ );
66
72
  }
67
73
 
68
74
  public shouldRecognizeSimultaneously(
@@ -71,28 +77,27 @@ export default class InteractionManager {
71
77
  ): boolean {
72
78
  const simultaneousHandlers: number[] | undefined =
73
79
  this.simultaneousRelations.get(handler.getTag());
74
- if (!simultaneousHandlers) {
75
- return false;
76
- }
77
-
78
- let shouldRecognizeSimultaneously = false;
79
80
 
80
- simultaneousHandlers.forEach((tag: number): void => {
81
- if (tag === otherHandler.getTag()) {
82
- shouldRecognizeSimultaneously = true;
83
- return;
84
- }
85
- });
86
-
87
- return shouldRecognizeSimultaneously;
81
+ return (
82
+ simultaneousHandlers?.find((tag: number) => {
83
+ return tag === otherHandler.getTag();
84
+ }) !== undefined
85
+ );
88
86
  }
89
87
 
90
88
  public shouldRequireHandlerToWaitForFailure(
91
- _handler: GestureHandler,
92
- _otherHandler: GestureHandler
89
+ handler: GestureHandler,
90
+ otherHandler: GestureHandler
93
91
  ): boolean {
94
- //TODO: Implement logic
95
- return false;
92
+ const waitFor: number[] | undefined = this.blocksHandlersRelations.get(
93
+ handler.getTag()
94
+ );
95
+
96
+ return (
97
+ waitFor?.find((tag: number) => {
98
+ return tag === otherHandler.getTag();
99
+ }) !== undefined
100
+ );
96
101
  }
97
102
 
98
103
  public shouldHandlerBeCancelledBy(
@@ -106,11 +111,13 @@ export default class InteractionManager {
106
111
  public dropRelationsForHandlerWithTag(handlerTag: number): void {
107
112
  this.waitForRelations.delete(handlerTag);
108
113
  this.simultaneousRelations.delete(handlerTag);
114
+ this.blocksHandlersRelations.delete(handlerTag);
109
115
  }
110
116
 
111
117
  public reset() {
112
118
  this.waitForRelations.clear();
113
119
  this.simultaneousRelations.clear();
120
+ this.blocksHandlersRelations.clear();
114
121
  }
115
122
 
116
123
  public static getInstance(): InteractionManager {
@@ -19,7 +19,10 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
19
19
  const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);
20
20
  const target = event.target as HTMLElement;
21
21
 
22
- target.setPointerCapture(adaptedEvent.pointerId);
22
+ if (target instanceof HTMLDivElement) {
23
+ target.setPointerCapture(adaptedEvent.pointerId);
24
+ }
25
+
23
26
  this.markAsInBounds(adaptedEvent.pointerId);
24
27
  this.trackedPointers.add(adaptedEvent.pointerId);
25
28
 
@@ -47,7 +50,10 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
47
50
  const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);
48
51
  const target = event.target as HTMLElement;
49
52
 
50
- target.releasePointerCapture(adaptedEvent.pointerId);
53
+ if (target instanceof HTMLDivElement) {
54
+ target.releasePointerCapture(adaptedEvent.pointerId);
55
+ }
56
+
51
57
  this.markAsOutOfBounds(adaptedEvent.pointerId);
52
58
  this.trackedPointers.delete(adaptedEvent.pointerId);
53
59
 
@@ -79,7 +85,10 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
79
85
  // incorporating it here seems stupid), so we just call it again here, every time
80
86
  // pointer moves until it succeeds.
81
87
  // God, I do love web development.
82
- if (!target.hasPointerCapture(event.pointerId)) {
88
+ if (
89
+ !target.hasPointerCapture(event.pointerId) &&
90
+ target instanceof HTMLDivElement
91
+ ) {
83
92
  target.setPointerCapture(event.pointerId);
84
93
  }
85
94
 
@@ -1,8 +0,0 @@
1
- package com.swmansion.gesturehandler.react
2
-
3
- import com.facebook.react.bridge.WritableMap
4
- import com.swmansion.gesturehandler.core.GestureHandler
5
-
6
- interface RNGestureHandlerEventDataExtractor<T : GestureHandler<T>> {
7
- fun extractEventData(handler: T, eventData: WritableMap)
8
- }