react-native-gesture-handler 2.6.0 → 2.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (196) hide show
  1. package/android/build.gradle +2 -2
  2. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  3. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  4. package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
  5. package/lib/commonjs/EnableExperimentalWebImplementation.js +7 -0
  6. package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -1
  7. package/lib/commonjs/RNGestureHandlerModule.js +1 -1
  8. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  9. package/lib/commonjs/RNGestureHandlerModule.macos.js +22 -13
  10. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
  11. package/lib/commonjs/RNGestureHandlerModule.web.js +23 -10
  12. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  13. package/lib/commonjs/components/GestureComponents.js +6 -4
  14. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  15. package/lib/commonjs/components/GestureComponents.web.js +1 -1
  16. package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
  17. package/lib/commonjs/components/Swipeable.js +4 -4
  18. package/lib/commonjs/components/Swipeable.js.map +1 -1
  19. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
  20. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  21. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -5
  22. package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  23. package/lib/commonjs/handlers/gestures/GestureDetector.js +4 -2
  24. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  25. package/lib/commonjs/handlers/gestures/eventReceiver.js +14 -20
  26. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  27. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js +32 -0
  28. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js.map +1 -0
  29. package/lib/commonjs/utils.js +10 -6
  30. package/lib/commonjs/utils.js.map +1 -1
  31. package/lib/commonjs/web/detectors/RotationGestureDetector.js +13 -17
  32. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  33. package/lib/commonjs/web/detectors/ScaleGestureDetector.js +3 -14
  34. package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
  35. package/lib/commonjs/web/handlers/FlingGestureHandler.js +37 -12
  36. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  37. package/lib/commonjs/web/handlers/GestureHandler.js +330 -79
  38. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  39. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +23 -18
  40. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  41. package/lib/commonjs/web/handlers/ManualGestureHandler.js +51 -0
  42. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -0
  43. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +81 -22
  44. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  45. package/lib/commonjs/web/handlers/PanGestureHandler.js +57 -40
  46. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  47. package/lib/commonjs/web/handlers/PinchGestureHandler.js +43 -34
  48. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  49. package/lib/commonjs/web/handlers/RotationGestureHandler.js +45 -39
  50. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  51. package/lib/commonjs/web/handlers/TapGestureHandler.js +52 -50
  52. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  53. package/lib/commonjs/web/interfaces.js +22 -1
  54. package/lib/commonjs/web/interfaces.js.map +1 -1
  55. package/lib/commonjs/web/tools/EventManager.js +40 -96
  56. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  57. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +109 -30
  58. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  59. package/lib/commonjs/web/tools/InteractionManager.js +24 -10
  60. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  61. package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
  62. package/lib/commonjs/web/tools/PointerEventManager.js +130 -0
  63. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -0
  64. package/lib/commonjs/web/tools/PointerTracker.js +97 -7
  65. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
  66. package/lib/commonjs/web/tools/TouchEventManager.js +138 -0
  67. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -0
  68. package/lib/commonjs/web/utils.js +15 -0
  69. package/lib/commonjs/web/utils.js.map +1 -0
  70. package/lib/module/EnableExperimentalWebImplementation.js +5 -0
  71. package/lib/module/EnableExperimentalWebImplementation.js.map +1 -1
  72. package/lib/module/RNGestureHandlerModule.js +1 -1
  73. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  74. package/lib/module/RNGestureHandlerModule.macos.js +21 -14
  75. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  76. package/lib/module/RNGestureHandlerModule.web.js +22 -11
  77. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  78. package/lib/module/components/GestureComponents.js +6 -4
  79. package/lib/module/components/GestureComponents.js.map +1 -1
  80. package/lib/module/components/GestureComponents.web.js +1 -1
  81. package/lib/module/components/GestureComponents.web.js.map +1 -1
  82. package/lib/module/components/Swipeable.js +4 -4
  83. package/lib/module/components/Swipeable.js.map +1 -1
  84. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
  85. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  86. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -4
  87. package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  88. package/lib/module/handlers/gestures/GestureDetector.js +5 -3
  89. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  90. package/lib/module/handlers/gestures/eventReceiver.js +14 -20
  91. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  92. package/lib/module/handlers/gestures/gestureStateManager.web.js +21 -0
  93. package/lib/module/handlers/gestures/gestureStateManager.web.js.map +1 -0
  94. package/lib/module/utils.js +7 -6
  95. package/lib/module/utils.js.map +1 -1
  96. package/lib/module/web/detectors/RotationGestureDetector.js +13 -17
  97. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  98. package/lib/module/web/detectors/ScaleGestureDetector.js +3 -14
  99. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
  100. package/lib/module/web/handlers/FlingGestureHandler.js +37 -12
  101. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  102. package/lib/module/web/handlers/GestureHandler.js +324 -79
  103. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  104. package/lib/module/web/handlers/LongPressGestureHandler.js +23 -18
  105. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  106. package/lib/module/web/handlers/ManualGestureHandler.js +39 -0
  107. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -0
  108. package/lib/module/web/handlers/NativeViewGestureHandler.js +80 -22
  109. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  110. package/lib/module/web/handlers/PanGestureHandler.js +57 -41
  111. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  112. package/lib/module/web/handlers/PinchGestureHandler.js +43 -33
  113. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  114. package/lib/module/web/handlers/RotationGestureHandler.js +45 -38
  115. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  116. package/lib/module/web/handlers/TapGestureHandler.js +52 -50
  117. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  118. package/lib/module/web/interfaces.js +19 -0
  119. package/lib/module/web/interfaces.js.map +1 -1
  120. package/lib/module/web/tools/EventManager.js +39 -95
  121. package/lib/module/web/tools/EventManager.js.map +1 -1
  122. package/lib/module/web/tools/GestureHandlerOrchestrator.js +107 -30
  123. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  124. package/lib/module/web/tools/InteractionManager.js +24 -10
  125. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  126. package/lib/module/web/tools/NodeManager.js.map +1 -1
  127. package/lib/module/web/tools/PointerEventManager.js +116 -0
  128. package/lib/module/web/tools/PointerEventManager.js.map +1 -0
  129. package/lib/module/web/tools/PointerTracker.js +97 -7
  130. package/lib/module/web/tools/PointerTracker.js.map +1 -1
  131. package/lib/module/web/tools/TouchEventManager.js +124 -0
  132. package/lib/module/web/tools/TouchEventManager.js.map +1 -0
  133. package/lib/module/web/utils.js +8 -0
  134. package/lib/module/web/utils.js.map +1 -0
  135. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +6 -3
  136. package/lib/typescript/RNGestureHandlerModule.web.d.ts +5 -2
  137. package/lib/typescript/components/Swipeable.d.ts +3 -3
  138. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +1 -1
  139. package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +3 -3
  140. package/lib/typescript/fabric/RNGestureHandlerRootViewNativeComponent.d.ts +3 -2
  141. package/lib/typescript/handlers/gestures/gestureStateManager.web.d.ts +4 -0
  142. package/lib/typescript/utils.d.ts +4 -0
  143. package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +7 -7
  144. package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +6 -7
  145. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +12 -10
  146. package/lib/typescript/web/handlers/GestureHandler.d.ts +42 -32
  147. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +6 -9
  148. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +11 -0
  149. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +15 -6
  150. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +15 -23
  151. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +11 -12
  152. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +12 -12
  153. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +11 -14
  154. package/lib/typescript/web/interfaces.d.ts +50 -10
  155. package/lib/typescript/web/tools/EventManager.d.ts +28 -26
  156. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +4 -2
  157. package/lib/typescript/web/tools/InteractionManager.d.ts +3 -0
  158. package/lib/typescript/web/tools/NodeManager.d.ts +3 -3
  159. package/lib/typescript/web/tools/PointerEventManager.d.ts +6 -0
  160. package/lib/typescript/web/tools/PointerTracker.d.ts +29 -5
  161. package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -0
  162. package/lib/typescript/web/utils.d.ts +4 -0
  163. package/package.json +2 -2
  164. package/src/EnableExperimentalWebImplementation.ts +9 -0
  165. package/src/RNGestureHandlerModule.macos.ts +28 -13
  166. package/src/RNGestureHandlerModule.ts +4 -1
  167. package/src/RNGestureHandlerModule.web.ts +20 -7
  168. package/src/components/GestureComponents.tsx +12 -16
  169. package/src/components/GestureComponents.web.tsx +1 -1
  170. package/src/components/Swipeable.tsx +11 -7
  171. package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +2 -12
  172. package/src/fabric/RNGestureHandlerRootViewNativeComponent.ts +2 -8
  173. package/src/handlers/gestures/GestureDetector.tsx +8 -4
  174. package/src/handlers/gestures/eventReceiver.ts +23 -24
  175. package/src/handlers/gestures/gestureStateManager.web.ts +24 -0
  176. package/src/utils.ts +6 -6
  177. package/src/web/detectors/RotationGestureDetector.ts +20 -52
  178. package/src/web/detectors/ScaleGestureDetector.ts +9 -45
  179. package/src/web/handlers/FlingGestureHandler.ts +45 -22
  180. package/src/web/handlers/GestureHandler.ts +365 -97
  181. package/src/web/handlers/LongPressGestureHandler.ts +30 -24
  182. package/src/web/handlers/ManualGestureHandler.ts +39 -0
  183. package/src/web/handlers/NativeViewGestureHandler.ts +81 -24
  184. package/src/web/handlers/PanGestureHandler.ts +68 -53
  185. package/src/web/handlers/PinchGestureHandler.ts +47 -44
  186. package/src/web/handlers/RotationGestureHandler.ts +52 -51
  187. package/src/web/handlers/TapGestureHandler.ts +74 -56
  188. package/src/web/interfaces.ts +57 -10
  189. package/src/web/tools/EventManager.ts +58 -148
  190. package/src/web/tools/GestureHandlerOrchestrator.ts +115 -47
  191. package/src/web/tools/InteractionManager.ts +25 -9
  192. package/src/web/tools/NodeManager.ts +6 -6
  193. package/src/web/tools/PointerEventManager.ts +134 -0
  194. package/src/web/tools/PointerTracker.ts +120 -10
  195. package/src/web/tools/TouchEventManager.ts +167 -0
  196. package/src/web/utils.ts +8 -0
@@ -1,19 +1,9 @@
1
- // @ts-ignore TODO: remove once there is a .d.ts file with definitions
2
- import codegenNativeComponentUntyped from 'react-native/Libraries/Utilities/codegenNativeComponent';
3
- // @ts-ignore TODO: remove once there is a .d.ts file with definitions
1
+ import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
4
2
  import type {
5
3
  Int32,
6
4
  WithDefault,
7
- // @ts-ignore TODO: remove once there is a .d.ts file with definitions
8
5
  } from 'react-native/Libraries/Types/CodegenTypes';
9
- import type { ViewProps, HostComponent } from 'react-native';
10
- // @ts-ignore TODO: remove once there is a .d.ts file with definitions
11
- import type { ColorValue } from 'react-native/Libraries/StyleSheet/StyleSheet';
12
-
13
- // eslint-disable-next-line @typescript-eslint/ban-types
14
- const codegenNativeComponent = codegenNativeComponentUntyped as <T extends {}>(
15
- name: string
16
- ) => HostComponent<T>;
6
+ import type { ViewProps, ColorValue } from 'react-native';
17
7
 
18
8
  interface NativeProps extends ViewProps {
19
9
  exclusive?: WithDefault<boolean, true>;
@@ -1,11 +1,5 @@
1
- // @ts-ignore TODO: remove once there is a .d.ts file with definitions
2
- import codegenNativeComponentUntyped from 'react-native/Libraries/Utilities/codegenNativeComponent';
3
- import type { ViewProps, HostComponent } from 'react-native';
4
-
5
- // eslint-disable-next-line @typescript-eslint/ban-types
6
- const codegenNativeComponent = codegenNativeComponentUntyped as <T extends {}>(
7
- name: string
8
- ) => HostComponent<T>;
1
+ import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
2
+ import type { ViewProps } from 'react-native';
9
3
 
10
4
  interface NativeProps extends ViewProps {}
11
5
 
@@ -35,7 +35,7 @@ import { State } from '../../State';
35
35
  import { TouchEventType } from '../../TouchEventType';
36
36
  import { ComposedGesture } from './gestureComposition';
37
37
  import { ActionType } from '../../ActionType';
38
- import { isFabric, tagMessage } from '../../utils';
38
+ import { isFabric, REACT_NATIVE_VERSION, tagMessage } from '../../utils';
39
39
  import { getShadowNodeFromRef } from '../../getShadowNodeFromRef';
40
40
  import { Platform } from 'react-native';
41
41
  import type RNGestureHandlerModuleWeb from '../../RNGestureHandlerModule.web';
@@ -152,7 +152,6 @@ function attachHandlers({
152
152
 
153
153
  for (const handler of gesture) {
154
154
  checkGestureCallbacksForWorklets(handler);
155
-
156
155
  RNGestureHandlerModule.createGestureHandler(
157
156
  handler.handlerName,
158
157
  handler.handlerTag,
@@ -540,8 +539,13 @@ function validateDetectorChildren(ref: any) {
540
539
  // / \
541
540
  // NativeView NativeView
542
541
  if (__DEV__ && Platform.OS !== 'web') {
543
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
544
- const wrapType = ref._reactInternals.elementType;
542
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
543
+ const wrapType =
544
+ REACT_NATIVE_VERSION.minor > 63 || REACT_NATIVE_VERSION.major > 0
545
+ ? // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
546
+ ref._reactInternals.elementType
547
+ : // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
548
+ ref._reactInternalFiber.elementType;
545
549
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
546
550
  let instance = RNRenderer.findHostInstance_DEPRECATED(ref)
547
551
  ._internalFiberInstanceHandleDEV;
@@ -6,32 +6,20 @@ import {
6
6
  GestureUpdateEvent,
7
7
  GestureStateChangeEvent,
8
8
  } from '../gestureHandlerCommon';
9
- import { GestureStateManagerType } from './gestureStateManager';
10
9
  import { findHandler, findOldGestureHandler } from '../handlersRegistry';
11
10
  import { BaseGesture } from './gesture';
12
- import { tagMessage } from '../../utils';
11
+ import {
12
+ GestureStateManager,
13
+ GestureStateManagerType,
14
+ } from './gestureStateManager';
13
15
 
14
16
  let gestureHandlerEventSubscription: EmitterSubscription | null = null;
15
17
  let gestureHandlerStateChangeEventSubscription: EmitterSubscription | null = null;
16
18
 
17
- const warningMessage = tagMessage(
18
- 'You have to use react-native-reanimated in order to control the state of the gesture.'
19
- );
20
-
21
- const dummyStateManager: GestureStateManagerType = {
22
- begin: () => {
23
- console.warn(warningMessage);
24
- },
25
- activate: () => {
26
- console.warn(warningMessage);
27
- },
28
- end: () => {
29
- console.warn(warningMessage);
30
- },
31
- fail: () => {
32
- console.warn(warningMessage);
33
- },
34
- };
19
+ const gestureStateManagers: Map<number, GestureStateManagerType> = new Map<
20
+ number,
21
+ GestureStateManagerType
22
+ >();
35
23
 
36
24
  const lastUpdateEvent: (GestureUpdateEvent | undefined)[] = [];
37
25
 
@@ -83,21 +71,32 @@ export function onGestureHandlerEvent(
83
71
  handler.handlers.onEnd?.(event, false);
84
72
  }
85
73
  handler.handlers.onFinalize?.(event, false);
74
+ gestureStateManagers.delete(event.handlerTag);
86
75
  lastUpdateEvent[handler.handlers.handlerTag] = undefined;
87
76
  }
88
77
  } else if (isTouchEvent(event)) {
78
+ if (!gestureStateManagers.has(event.handlerTag)) {
79
+ gestureStateManagers.set(
80
+ event.handlerTag,
81
+ GestureStateManager.create(event.handlerTag)
82
+ );
83
+ }
84
+
85
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
86
+ const manager = gestureStateManagers.get(event.handlerTag)!;
87
+
89
88
  switch (event.eventType) {
90
89
  case TouchEventType.TOUCHES_DOWN:
91
- handler.handlers?.onTouchesDown?.(event, dummyStateManager);
90
+ handler.handlers?.onTouchesDown?.(event, manager);
92
91
  break;
93
92
  case TouchEventType.TOUCHES_MOVE:
94
- handler.handlers?.onTouchesMove?.(event, dummyStateManager);
93
+ handler.handlers?.onTouchesMove?.(event, manager);
95
94
  break;
96
95
  case TouchEventType.TOUCHES_UP:
97
- handler.handlers?.onTouchesUp?.(event, dummyStateManager);
96
+ handler.handlers?.onTouchesUp?.(event, manager);
98
97
  break;
99
98
  case TouchEventType.TOUCHES_CANCELLED:
100
- handler.handlers?.onTouchesCancelled?.(event, dummyStateManager);
99
+ handler.handlers?.onTouchesCancelled?.(event, manager);
101
100
  break;
102
101
  }
103
102
  } else {
@@ -0,0 +1,24 @@
1
+ import NodeManager from '../../web/tools/NodeManager';
2
+ import { GestureStateManagerType } from './gestureStateManager';
3
+
4
+ export const GestureStateManager = {
5
+ create(handlerTag: number): GestureStateManagerType {
6
+ return {
7
+ begin: () => {
8
+ NodeManager.getHandler(handlerTag).begin();
9
+ },
10
+
11
+ activate: () => {
12
+ NodeManager.getHandler(handlerTag).activate();
13
+ },
14
+
15
+ fail: () => {
16
+ NodeManager.getHandler(handlerTag).fail();
17
+ },
18
+
19
+ end: () => {
20
+ NodeManager.getHandler(handlerTag).end();
21
+ },
22
+ };
23
+ },
24
+ };
package/src/utils.ts CHANGED
@@ -1,6 +1,10 @@
1
1
  import pack from 'react-native/package.json';
2
2
 
3
- const rnVersion = pack.version;
3
+ const [majorStr, minorStr] = pack.version.split('.');
4
+ export const REACT_NATIVE_VERSION = {
5
+ major: parseInt(majorStr, 10),
6
+ minor: parseInt(minorStr, 10),
7
+ };
4
8
 
5
9
  export function toArray<T>(object: T | T[]): T[] {
6
10
  if (!Array.isArray(object)) {
@@ -52,12 +56,8 @@ export function isFabric(): boolean {
52
56
  }
53
57
 
54
58
  export function shouldUseCodegenNativeComponent(): boolean {
55
- const [majorStr, minorStr] = rnVersion.split('.');
56
- const major = Number.parseInt(majorStr);
57
- const minor = Number.parseInt(minorStr);
58
-
59
59
  // use codegenNativeComponent starting with RN 0.68
60
- return minor >= 68 || major > 0;
60
+ return REACT_NATIVE_VERSION.minor >= 68 || REACT_NATIVE_VERSION.major > 0;
61
61
  }
62
62
 
63
63
  export function isRemoteDebuggingEnabled(): boolean {
@@ -1,29 +1,17 @@
1
- import { AdaptedPointerEvent, EventTypes } from '../interfaces';
1
+ import { AdaptedEvent, EventTypes } from '../interfaces';
2
2
  import PointerTracker from '../tools/PointerTracker';
3
3
 
4
4
  export interface RotationGestureListener {
5
5
  onRotationBegin: (detector: RotationGestureDetector) => boolean;
6
- onRotation: (
7
- detector: RotationGestureDetector,
8
- event: AdaptedPointerEvent
9
- ) => boolean;
10
- onRotationEnd: (
11
- detector: RotationGestureDetector,
12
- event: AdaptedPointerEvent
13
- ) => void;
6
+ onRotation: (detector: RotationGestureDetector) => boolean;
7
+ onRotationEnd: (detector: RotationGestureDetector) => void;
14
8
  }
15
9
 
16
10
  export default class RotationGestureDetector
17
11
  implements RotationGestureListener {
18
12
  onRotationBegin: (detector: RotationGestureDetector) => boolean;
19
- onRotation: (
20
- detector: RotationGestureDetector,
21
- event: AdaptedPointerEvent
22
- ) => boolean;
23
- onRotationEnd: (
24
- detector: RotationGestureDetector,
25
- event: AdaptedPointerEvent
26
- ) => void;
13
+ onRotation: (detector: RotationGestureDetector) => boolean;
14
+ onRotationEnd: (detector: RotationGestureDetector) => void;
27
15
 
28
16
  private currentTime = 0;
29
17
  private previousTime = 0;
@@ -44,10 +32,7 @@ export default class RotationGestureDetector
44
32
  this.onRotationEnd = callbacks.onRotationEnd;
45
33
  }
46
34
 
47
- private updateCurrent(
48
- event: AdaptedPointerEvent,
49
- tracker: PointerTracker
50
- ): void {
35
+ private updateCurrent(event: AdaptedEvent, tracker: PointerTracker): void {
51
36
  this.previousTime = this.currentTime;
52
37
  this.currentTime = event.time;
53
38
 
@@ -66,6 +51,7 @@ export default class RotationGestureDetector
66
51
 
67
52
  //Angle diff should be positive when rotating in clockwise direction
68
53
  const angle: number = -Math.atan2(vectorY, vectorX);
54
+
69
55
  this.rotation = Number.isNaN(this.previousAngle)
70
56
  ? 0
71
57
  : this.previousAngle - angle;
@@ -85,14 +71,14 @@ export default class RotationGestureDetector
85
71
  }
86
72
  }
87
73
 
88
- private finish(event: AdaptedPointerEvent): void {
74
+ private finish(): void {
89
75
  if (!this.isInProgress) {
90
76
  return;
91
77
  }
92
78
 
93
79
  this.isInProgress = false;
94
80
  this.keyPointers = [NaN, NaN];
95
- this.onRotationEnd(this, event);
81
+ this.onRotationEnd(this);
96
82
  }
97
83
 
98
84
  private setKeyPointers(tracker: PointerTracker): void {
@@ -106,12 +92,7 @@ export default class RotationGestureDetector
106
92
  this.keyPointers[1] = pointerIDs.next().value as number;
107
93
  }
108
94
 
109
- public onTouchEvent(
110
- event: AdaptedPointerEvent,
111
- tracker: PointerTracker
112
- ): boolean {
113
- this.adaptEvent(event, tracker);
114
-
95
+ public onTouchEvent(event: AdaptedEvent, tracker: PointerTracker): boolean {
115
96
  switch (event.eventType) {
116
97
  case EventTypes.DOWN:
117
98
  this.isInProgress = false;
@@ -121,7 +102,6 @@ export default class RotationGestureDetector
121
102
  if (this.isInProgress) {
122
103
  break;
123
104
  }
124
-
125
105
  this.isInProgress = true;
126
106
 
127
107
  this.previousTime = event.time;
@@ -139,7 +119,7 @@ export default class RotationGestureDetector
139
119
  }
140
120
 
141
121
  this.updateCurrent(event, tracker);
142
- this.onRotation(this, event);
122
+ this.onRotation(this);
143
123
 
144
124
  break;
145
125
 
@@ -149,38 +129,21 @@ export default class RotationGestureDetector
149
129
  }
150
130
 
151
131
  if (this.keyPointers.indexOf(event.pointerId) >= 0) {
152
- this.finish(event);
132
+ this.finish();
153
133
  }
154
134
 
155
135
  break;
156
136
 
157
137
  case EventTypes.UP:
158
- this.finish(event);
138
+ if (this.isInProgress) {
139
+ this.finish();
140
+ }
159
141
  break;
160
142
  }
161
143
 
162
144
  return true;
163
145
  }
164
146
 
165
- private adaptEvent(
166
- event: AdaptedPointerEvent,
167
- tracker: PointerTracker
168
- ): void {
169
- if (
170
- tracker.getTrackedPointersCount() &&
171
- event.eventType === EventTypes.DOWN
172
- ) {
173
- event.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;
174
- }
175
-
176
- if (
177
- tracker.getTrackedPointersCount() > 1 &&
178
- event.eventType === EventTypes.UP
179
- ) {
180
- event.eventType = EventTypes.ADDITIONAL_POINTER_UP;
181
- }
182
- }
183
-
184
147
  public getTimeDelta(): number {
185
148
  return this.currentTime + this.previousTime;
186
149
  }
@@ -196,4 +159,9 @@ export default class RotationGestureDetector
196
159
  public getRotation(): number {
197
160
  return this.rotation;
198
161
  }
162
+
163
+ public reset(): void {
164
+ this.keyPointers = [NaN, NaN];
165
+ this.isInProgress = false;
166
+ }
199
167
  }
@@ -1,30 +1,18 @@
1
1
  import { DEFAULT_TOUCH_SLOP } from '../constants';
2
- import { AdaptedPointerEvent, EventTypes } from '../interfaces';
2
+ import { AdaptedEvent, EventTypes } from '../interfaces';
3
3
 
4
4
  import PointerTracker from '../tools/PointerTracker';
5
5
 
6
6
  export interface ScaleGestureListener {
7
7
  onScaleBegin: (detector: ScaleGestureDetector) => boolean;
8
- onScale: (
9
- detector: ScaleGestureDetector,
10
- event: AdaptedPointerEvent
11
- ) => boolean;
12
- onScaleEnd: (
13
- detector: ScaleGestureDetector,
14
- event: AdaptedPointerEvent
15
- ) => void;
8
+ onScale: (detector: ScaleGestureDetector) => boolean;
9
+ onScaleEnd: (detector: ScaleGestureDetector) => void;
16
10
  }
17
11
 
18
12
  export default class ScaleGestureDetector implements ScaleGestureListener {
19
13
  public onScaleBegin: (detector: ScaleGestureDetector) => boolean;
20
- public onScale: (
21
- detector: ScaleGestureDetector,
22
- event: AdaptedPointerEvent
23
- ) => boolean;
24
- public onScaleEnd: (
25
- detector: ScaleGestureDetector,
26
- event: AdaptedPointerEvent
27
- ) => void;
14
+ public onScale: (detector: ScaleGestureDetector) => boolean;
15
+ public onScaleEnd: (detector: ScaleGestureDetector) => void;
28
16
 
29
17
  private focusX!: number;
30
18
  private focusY!: number;
@@ -50,12 +38,7 @@ export default class ScaleGestureDetector implements ScaleGestureListener {
50
38
  this.minSpan = 0;
51
39
  }
52
40
 
53
- public onTouchEvent(
54
- event: AdaptedPointerEvent,
55
- tracker: PointerTracker
56
- ): boolean {
57
- this.adaptEvent(event, tracker);
58
-
41
+ public onTouchEvent(event: AdaptedEvent, tracker: PointerTracker): boolean {
59
42
  this.currentTime = event.time;
60
43
 
61
44
  const action: EventTypes = event.eventType;
@@ -68,7 +51,7 @@ export default class ScaleGestureDetector implements ScaleGestureListener {
68
51
 
69
52
  if (action === EventTypes.DOWN || streamComplete) {
70
53
  if (this.inProgress) {
71
- this.onScaleEnd(this, event);
54
+ this.onScaleEnd(this);
72
55
  this.inProgress = false;
73
56
  this.initialSpan = 0;
74
57
  }
@@ -127,7 +110,7 @@ export default class ScaleGestureDetector implements ScaleGestureListener {
127
110
  this.focusY = focusY;
128
111
 
129
112
  if (this.inProgress && (span < this.minSpan || configChanged)) {
130
- this.onScaleEnd(this, event);
113
+ this.onScaleEnd(this);
131
114
  this.inProgress = false;
132
115
  this.initialSpan = span;
133
116
  }
@@ -153,7 +136,7 @@ export default class ScaleGestureDetector implements ScaleGestureListener {
153
136
 
154
137
  this.currentSpan = span;
155
138
 
156
- if (this.inProgress && !this.onScale(this, event)) {
139
+ if (this.inProgress && !this.onScale(this)) {
157
140
  return true;
158
141
  }
159
142
 
@@ -163,25 +146,6 @@ export default class ScaleGestureDetector implements ScaleGestureListener {
163
146
  return true;
164
147
  }
165
148
 
166
- private adaptEvent(
167
- event: AdaptedPointerEvent,
168
- tracker: PointerTracker
169
- ): void {
170
- if (
171
- tracker.getTrackedPointersCount() > 1 &&
172
- event.eventType === EventTypes.DOWN
173
- ) {
174
- event.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;
175
- }
176
-
177
- if (
178
- tracker.getTrackedPointersCount() > 1 &&
179
- event.eventType === EventTypes.UP
180
- ) {
181
- event.eventType = EventTypes.ADDITIONAL_POINTER_UP;
182
- }
183
- }
184
-
185
149
  public getCurrentSpan(): number {
186
150
  return this.currentSpan;
187
151
  }
@@ -1,6 +1,6 @@
1
1
  import { State } from '../../State';
2
2
  import { Direction } from '../constants';
3
- import { AdaptedPointerEvent } from '../interfaces';
3
+ import { AdaptedEvent, Config } from '../interfaces';
4
4
 
5
5
  import GestureHandler from './GestureHandler';
6
6
 
@@ -26,7 +26,7 @@ export default class FlingGestureHandler extends GestureHandler {
26
26
  super.init(ref, propsRef);
27
27
  }
28
28
 
29
- public updateGestureConfig({ enabled = true, ...props }): void {
29
+ public updateGestureConfig({ enabled = true, ...props }: Config): void {
30
30
  super.updateGestureConfig({ enabled: enabled, ...props });
31
31
 
32
32
  this.enabled = enabled;
@@ -40,27 +40,29 @@ export default class FlingGestureHandler extends GestureHandler {
40
40
  }
41
41
  }
42
42
 
43
- protected transformNativeEvent(event: AdaptedPointerEvent) {
43
+ protected transformNativeEvent() {
44
+ const rect: DOMRect = this.view.getBoundingClientRect();
45
+
44
46
  return {
45
- x: event.offsetX,
46
- y: event.offsetY,
47
- absoluteX: event.x,
48
- absoluteY: event.y,
47
+ x: this.tracker.getLastAvgX() - rect.left,
48
+ y: this.tracker.getLastAvgY() - rect.top,
49
+ absoluteX: this.tracker.getLastAvgX(),
50
+ absoluteY: this.tracker.getLastAvgY(),
49
51
  };
50
52
  }
51
53
 
52
- private startFling(event: AdaptedPointerEvent): void {
54
+ private startFling(event: AdaptedEvent): void {
53
55
  this.startX = event.x;
54
56
  this.startY = event.y;
55
57
 
56
- this.begin(event);
58
+ this.begin();
57
59
 
58
60
  this.maxNumberOfPointersSimultaneously = 1;
59
61
 
60
- this.delayTimeout = setTimeout(() => this.fail(event), this.maxDurationMs);
62
+ this.delayTimeout = setTimeout(() => this.fail(), this.maxDurationMs);
61
63
  }
62
64
 
63
- private tryEndFling(event: AdaptedPointerEvent): boolean {
65
+ private tryEndFling(event: AdaptedEvent): boolean {
64
66
  if (
65
67
  this.maxNumberOfPointersSimultaneously ===
66
68
  this.numberOfPointersRequired &&
@@ -74,7 +76,7 @@ export default class FlingGestureHandler extends GestureHandler {
74
76
  event.y - this.startY > this.minAcceptableDelta))
75
77
  ) {
76
78
  clearTimeout(this.delayTimeout);
77
- this.activate(event);
79
+ this.activate();
78
80
 
79
81
  return true;
80
82
  }
@@ -82,17 +84,25 @@ export default class FlingGestureHandler extends GestureHandler {
82
84
  return false;
83
85
  }
84
86
 
85
- private endFling(event: AdaptedPointerEvent) {
87
+ private endFling(event: AdaptedEvent) {
86
88
  if (!this.tryEndFling(event)) {
87
- this.fail(event);
89
+ this.fail();
88
90
  }
89
91
  }
90
92
 
91
- protected onPointerDown(event: AdaptedPointerEvent): void {
93
+ protected onPointerDown(event: AdaptedEvent): void {
94
+ this.tracker.addToTracker(event);
92
95
  super.onPointerDown(event);
96
+ this.newPointerAction(event);
97
+ }
93
98
 
99
+ protected onPointerAdd(event: AdaptedEvent): void {
94
100
  this.tracker.addToTracker(event);
101
+ super.onPointerAdd(event);
102
+ this.newPointerAction(event);
103
+ }
95
104
 
105
+ private newPointerAction(event: AdaptedEvent): void {
96
106
  if (this.currentState === State.UNDETERMINED) {
97
107
  this.startFling(event);
98
108
  }
@@ -111,7 +121,7 @@ export default class FlingGestureHandler extends GestureHandler {
111
121
  }
112
122
  }
113
123
 
114
- protected onPointerMove(event: AdaptedPointerEvent): void {
124
+ protected onPointerMove(event: AdaptedEvent): void {
115
125
  this.tracker.track(event);
116
126
 
117
127
  if (this.currentState !== State.BEGAN) {
@@ -123,19 +133,32 @@ export default class FlingGestureHandler extends GestureHandler {
123
133
  super.onPointerMove(event);
124
134
  }
125
135
 
126
- protected onPointerUp(event: AdaptedPointerEvent): void {
127
- this.tracker.removeFromTracker(event.pointerId);
136
+ protected onPointerUp(event: AdaptedEvent): void {
137
+ super.onPointerUp(event);
138
+ this.onUp(event);
139
+ }
128
140
 
141
+ protected onPointerRemove(event: AdaptedEvent): void {
142
+ super.onPointerRemove(event);
143
+ this.onUp(event);
144
+ }
145
+
146
+ private onUp(event: AdaptedEvent): void {
147
+ this.tracker.removeFromTracker(event.pointerId);
129
148
  if (this.currentState !== State.BEGAN) {
130
149
  return;
131
150
  }
132
-
133
151
  this.endFling(event);
134
152
  }
135
153
 
136
- protected activate(event: AdaptedPointerEvent, force?: boolean): void {
137
- super.activate(event, force);
138
- this.end(event);
154
+ protected onPointerCancel(event: AdaptedEvent): void {
155
+ super.onPointerCancel(event);
156
+ this.reset();
157
+ }
158
+
159
+ public activate(force?: boolean): void {
160
+ super.activate(force);
161
+ this.end();
139
162
  }
140
163
 
141
164
  protected resetConfig(): void {