react-native-gesture-handler 2.7.1 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (173) 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 +17 -10
  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/jestUtils/jestUtils.js.map +1 -1
  61. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  62. package/lib/commonjs/web/handlers/FlingGestureHandler.js +0 -1
  63. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  64. package/lib/commonjs/web/handlers/GestureHandler.js +28 -3
  65. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  66. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +0 -1
  67. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  68. package/lib/commonjs/web/handlers/ManualGestureHandler.js +15 -0
  69. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
  70. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -2
  71. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  72. package/lib/commonjs/web/handlers/PanGestureHandler.js +0 -5
  73. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  74. package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -1
  75. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  76. package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -1
  77. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  78. package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -1
  79. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  80. package/lib/commonjs/web/interfaces.js.map +1 -1
  81. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  82. package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
  83. package/lib/commonjs/web_hammer/NodeManager.js +4 -1
  84. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
  85. package/lib/commonjs/web_hammer/PanGestureHandler.js +25 -6
  86. package/lib/commonjs/web_hammer/PanGestureHandler.js.map +1 -1
  87. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  88. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  89. package/lib/module/RNGestureHandlerModule.windows.js +117 -0
  90. package/lib/module/RNGestureHandlerModule.windows.js.map +1 -0
  91. package/lib/module/components/DrawerLayout.js +1 -0
  92. package/lib/module/components/DrawerLayout.js.map +1 -1
  93. package/lib/module/components/Swipeable.js.map +1 -1
  94. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  95. package/lib/module/getShadowNodeFromRef.js +2 -2
  96. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  97. package/lib/module/handlers/createHandler.js.map +1 -1
  98. package/lib/module/handlers/gestureHandlerCommon.js +5 -2
  99. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  100. package/lib/module/handlers/gestureHandlerTypesCompat.js +1 -1
  101. package/lib/module/handlers/gestures/GestureDetector.js +17 -10
  102. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  103. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  104. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  105. package/lib/module/jestUtils/jestUtils.js.map +1 -1
  106. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  107. package/lib/module/web/handlers/FlingGestureHandler.js +0 -1
  108. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  109. package/lib/module/web/handlers/GestureHandler.js +28 -3
  110. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  111. package/lib/module/web/handlers/LongPressGestureHandler.js +0 -1
  112. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  113. package/lib/module/web/handlers/ManualGestureHandler.js +15 -0
  114. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
  115. package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -2
  116. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  117. package/lib/module/web/handlers/PanGestureHandler.js +0 -5
  118. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  119. package/lib/module/web/handlers/PinchGestureHandler.js +0 -1
  120. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  121. package/lib/module/web/handlers/RotationGestureHandler.js +0 -1
  122. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  123. package/lib/module/web/handlers/TapGestureHandler.js +0 -1
  124. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  125. package/lib/module/web/interfaces.js.map +1 -1
  126. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  127. package/lib/module/web_hammer/GestureHandler.js.map +1 -1
  128. package/lib/module/web_hammer/NodeManager.js +4 -1
  129. package/lib/module/web_hammer/NodeManager.js.map +1 -1
  130. package/lib/module/web_hammer/PanGestureHandler.js +25 -6
  131. package/lib/module/web_hammer/PanGestureHandler.js.map +1 -1
  132. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +1 -1
  133. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  134. package/lib/typescript/RNGestureHandlerModule.windows.d.ts +48 -0
  135. package/lib/typescript/components/DrawerLayout.d.ts +7 -0
  136. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
  137. package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -1
  138. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -1
  139. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +3 -1
  140. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +3 -1
  141. package/lib/typescript/web/interfaces.d.ts +3 -1
  142. package/lib/typescript/web/tools/NodeManager.d.ts +2 -2
  143. package/package.json +14 -10
  144. package/src/RNGestureHandlerModule.macos.ts +2 -2
  145. package/src/RNGestureHandlerModule.web.ts +2 -2
  146. package/src/RNGestureHandlerModule.windows.ts +140 -0
  147. package/src/components/DrawerLayout.tsx +14 -8
  148. package/src/components/Swipeable.tsx +2 -4
  149. package/src/components/touchables/TouchableOpacity.tsx +1 -1
  150. package/src/getShadowNodeFromRef.ts +3 -3
  151. package/src/handlers/createHandler.tsx +13 -15
  152. package/src/handlers/gestureHandlerCommon.ts +9 -4
  153. package/src/handlers/gestureHandlerTypesCompat.ts +34 -17
  154. package/src/handlers/gestures/GestureDetector.tsx +36 -16
  155. package/src/handlers/gestures/eventReceiver.ts +2 -1
  156. package/src/handlers/gestures/gesture.ts +8 -12
  157. package/src/jestUtils/jestUtils.ts +3 -4
  158. package/src/web/detectors/RotationGestureDetector.ts +2 -1
  159. package/src/web/handlers/FlingGestureHandler.ts +2 -3
  160. package/src/web/handlers/GestureHandler.ts +30 -11
  161. package/src/web/handlers/LongPressGestureHandler.ts +0 -2
  162. package/src/web/handlers/ManualGestureHandler.ts +10 -1
  163. package/src/web/handlers/NativeViewGestureHandler.ts +0 -2
  164. package/src/web/handlers/PanGestureHandler.ts +0 -6
  165. package/src/web/handlers/PinchGestureHandler.ts +0 -2
  166. package/src/web/handlers/RotationGestureHandler.ts +2 -5
  167. package/src/web/handlers/TapGestureHandler.ts +0 -2
  168. package/src/web/interfaces.ts +3 -0
  169. package/src/web/tools/InteractionManager.ts +2 -3
  170. package/src/web_hammer/GestureHandler.ts +6 -8
  171. package/src/web_hammer/NodeManager.ts +3 -1
  172. package/src/web_hammer/PanGestureHandler.ts +12 -6
  173. package/android/lib/build.gradle +0 -28
@@ -18,6 +18,7 @@ import {
18
18
  GestureStateChangeEvent,
19
19
  HandlerStateChangeEvent,
20
20
  scheduleFlushOperations,
21
+ UserSelect,
21
22
  } from '../gestureHandlerCommon';
22
23
  import {
23
24
  GestureStateManager,
@@ -125,7 +126,7 @@ interface WebEventHandler {
125
126
 
126
127
  interface AttachHandlersConfig {
127
128
  preparedGesture: GestureConfigReference;
128
- gestureConfig: ComposedGesture | GestureType | undefined;
129
+ gestureConfig: ComposedGesture | GestureType;
129
130
  gesture: GestureType[];
130
131
  viewTag: number;
131
132
  webEventHandlersRef: React.RefObject<WebEventHandler>;
@@ -139,7 +140,7 @@ function attachHandlers({
139
140
  webEventHandlersRef,
140
141
  }: AttachHandlersConfig) {
141
142
  if (!preparedGesture.firstExecution) {
142
- gestureConfig?.initialize();
143
+ gestureConfig.initialize();
143
144
  } else {
144
145
  preparedGesture.firstExecution = false;
145
146
  }
@@ -147,7 +148,7 @@ function attachHandlers({
147
148
  // use setImmediate to extract handlerTags, because all refs should be initialized
148
149
  // when it's ran
149
150
  setImmediate(() => {
150
- gestureConfig?.prepare();
151
+ gestureConfig.prepare();
151
152
  });
152
153
 
153
154
  for (const handler of gesture) {
@@ -197,7 +198,9 @@ function attachHandlers({
197
198
  : ActionType.JS_FUNCTION_NEW_API;
198
199
 
199
200
  if (Platform.OS === 'web') {
200
- (RNGestureHandlerModule.attachGestureHandler as typeof RNGestureHandlerModuleWeb.attachGestureHandler)(
201
+ (
202
+ RNGestureHandlerModule.attachGestureHandler as typeof RNGestureHandlerModuleWeb.attachGestureHandler
203
+ )(
201
204
  gesture.handlerTag,
202
205
  viewTag,
203
206
  ActionType.JS_FUNCTION_OLD_API, // ignored on web
@@ -215,9 +218,9 @@ function attachHandlers({
215
218
  if (preparedGesture.animatedHandlers) {
216
219
  const isAnimatedGesture = (g: GestureType) => g.shouldUseReanimated;
217
220
 
218
- preparedGesture.animatedHandlers.value = (gesture
221
+ preparedGesture.animatedHandlers.value = gesture
219
222
  .filter(isAnimatedGesture)
220
- .map((g) => g.handlers) as unknown) as HandlerCallbacks<
223
+ .map((g) => g.handlers) as unknown as HandlerCallbacks<
221
224
  Record<string, unknown>
222
225
  >[];
223
226
  }
@@ -225,11 +228,11 @@ function attachHandlers({
225
228
 
226
229
  function updateHandlers(
227
230
  preparedGesture: GestureConfigReference,
228
- gestureConfig: ComposedGesture | GestureType | undefined,
231
+ gestureConfig: ComposedGesture | GestureType,
229
232
  gesture: GestureType[],
230
233
  mountedRef: RefObject<boolean>
231
234
  ) {
232
- gestureConfig?.prepare();
235
+ gestureConfig.prepare();
233
236
 
234
237
  for (let i = 0; i < gesture.length; i++) {
235
238
  const handler = preparedGesture.config[i];
@@ -278,9 +281,9 @@ function updateHandlers(
278
281
  if (preparedGesture.animatedHandlers) {
279
282
  const previousHandlersValue =
280
283
  preparedGesture.animatedHandlers.value ?? [];
281
- const newHandlersValue = (preparedGesture.config
284
+ const newHandlersValue = preparedGesture.config
282
285
  .filter((g) => g.shouldUseReanimated) // ignore gestures that shouldn't run on UI
283
- .map((g) => g.handlers) as unknown) as HandlerCallbacks<
286
+ .map((g) => g.handlers) as unknown as HandlerCallbacks<
284
287
  Record<string, unknown>
285
288
  >[];
286
289
 
@@ -550,9 +553,11 @@ function validateDetectorChildren(ref: any) {
550
553
  ref._reactInternals.elementType
551
554
  : // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
552
555
  ref._reactInternalFiber.elementType;
553
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
554
- let instance = RNRenderer.findHostInstance_DEPRECATED(ref)
555
- ._internalFiberInstanceHandleDEV;
556
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
557
+ let instance =
558
+ RNRenderer.findHostInstance_DEPRECATED(
559
+ ref
560
+ )._internalFiberInstanceHandleDEV;
556
561
 
557
562
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
558
563
  while (instance && instance.elementType !== wrapType) {
@@ -569,13 +574,28 @@ function validateDetectorChildren(ref: any) {
569
574
  }
570
575
  }
571
576
 
577
+ const applyUserSelectProp = (
578
+ userSelect: UserSelect,
579
+ gesture: ComposedGesture | GestureType
580
+ ): void => {
581
+ for (const g of gesture.toGestureArray()) {
582
+ g.config.userSelect = userSelect;
583
+ }
584
+ };
585
+
572
586
  interface GestureDetectorProps {
573
- gesture?: ComposedGesture | GestureType;
587
+ gesture: ComposedGesture | GestureType;
588
+ userSelect?: UserSelect;
574
589
  children?: React.ReactNode;
575
590
  }
576
591
  export const GestureDetector = (props: GestureDetectorProps) => {
577
592
  const gestureConfig = props.gesture;
578
- const gesture = gestureConfig?.toGestureArray?.() ?? [];
593
+
594
+ if (props.userSelect) {
595
+ applyUserSelectProp(props.userSelect, gestureConfig);
596
+ }
597
+
598
+ const gesture = gestureConfig.toGestureArray();
579
599
  const useReanimatedHook = gesture.some((g) => g.shouldUseReanimated);
580
600
  const viewRef = useRef(null);
581
601
  const firstRenderRef = useRef(true);
@@ -613,7 +633,7 @@ export const GestureDetector = (props: GestureDetectorProps) => {
613
633
  preparedGesture.firstExecution || needsToReattach(preparedGesture, gesture);
614
634
 
615
635
  if (preparedGesture.firstExecution) {
616
- gestureConfig?.initialize?.();
636
+ gestureConfig.initialize();
617
637
  }
618
638
 
619
639
  if (useReanimatedHook) {
@@ -14,7 +14,8 @@ import {
14
14
  } from './gestureStateManager';
15
15
 
16
16
  let gestureHandlerEventSubscription: EmitterSubscription | null = null;
17
- let gestureHandlerStateChangeEventSubscription: EmitterSubscription | null = null;
17
+ let gestureHandlerStateChangeEventSubscription: EmitterSubscription | null =
18
+ null;
18
19
 
19
20
  const gestureStateManagers: Map<number, GestureStateManagerType> = new Map<
20
21
  number,
@@ -202,9 +202,8 @@ export abstract class BaseGesture<
202
202
  onTouchesDown(callback: TouchEventHandlerType) {
203
203
  this.config.needsPointerData = true;
204
204
  this.handlers.onTouchesDown = callback;
205
- this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_DOWN] = this.isWorklet(
206
- callback
207
- );
205
+ this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_DOWN] =
206
+ this.isWorklet(callback);
208
207
 
209
208
  return this;
210
209
  }
@@ -212,9 +211,8 @@ export abstract class BaseGesture<
212
211
  onTouchesMove(callback: TouchEventHandlerType) {
213
212
  this.config.needsPointerData = true;
214
213
  this.handlers.onTouchesMove = callback;
215
- this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_MOVE] = this.isWorklet(
216
- callback
217
- );
214
+ this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_MOVE] =
215
+ this.isWorklet(callback);
218
216
 
219
217
  return this;
220
218
  }
@@ -222,9 +220,8 @@ export abstract class BaseGesture<
222
220
  onTouchesUp(callback: TouchEventHandlerType) {
223
221
  this.config.needsPointerData = true;
224
222
  this.handlers.onTouchesUp = callback;
225
- this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_UP] = this.isWorklet(
226
- callback
227
- );
223
+ this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_UP] =
224
+ this.isWorklet(callback);
228
225
 
229
226
  return this;
230
227
  }
@@ -232,9 +229,8 @@ export abstract class BaseGesture<
232
229
  onTouchesCancelled(callback: TouchEventHandlerType) {
233
230
  this.config.needsPointerData = true;
234
231
  this.handlers.onTouchesCancelled = callback;
235
- this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_CANCELLED] = this.isWorklet(
236
- callback
237
- );
232
+ this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_CANCELLED] =
233
+ this.isWorklet(callback);
238
234
 
239
235
  return this;
240
236
  }
@@ -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;
@@ -30,8 +30,6 @@ export default class FlingGestureHandler extends GestureHandler {
30
30
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
31
31
  super.updateGestureConfig({ enabled: enabled, ...props });
32
32
 
33
- this.enabled = enabled;
34
-
35
33
  if (this.config.direction) {
36
34
  this.direction = this.config.direction;
37
35
  }
@@ -124,7 +122,8 @@ export default class FlingGestureHandler extends GestureHandler {
124
122
  this.tracker.getTrackedPointersCount() >
125
123
  this.maxNumberOfPointersSimultaneously
126
124
  ) {
127
- this.maxNumberOfPointersSimultaneously = this.tracker.getTrackedPointersCount();
125
+ this.maxNumberOfPointersSimultaneously =
126
+ this.tracker.getTrackedPointersCount();
128
127
  }
129
128
  }
130
129
 
@@ -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 {
@@ -322,6 +327,18 @@ export default abstract class GestureHandler {
322
327
  }
323
328
  }
324
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
+
325
342
  if (this.config.needsPointerData) {
326
343
  this.sendTouchEvent(event);
327
344
  }
@@ -360,9 +377,8 @@ export default abstract class GestureHandler {
360
377
  const { onGestureHandlerEvent }: PropsRef = this.propsRef
361
378
  .current as PropsRef;
362
379
 
363
- const touchEvent: ResultTouchEvent | undefined = this.transformTouchEvent(
364
- event
365
- );
380
+ const touchEvent: ResultTouchEvent | undefined =
381
+ this.transformTouchEvent(event);
366
382
 
367
383
  if (touchEvent) {
368
384
  invokeNullableMethod(onGestureHandlerEvent, touchEvent);
@@ -374,10 +390,8 @@ export default abstract class GestureHandler {
374
390
  //
375
391
 
376
392
  public sendEvent = (newState: State, oldState: State): void => {
377
- const {
378
- onGestureHandlerEvent,
379
- onGestureHandlerStateChange,
380
- }: PropsRef = this.propsRef.current as PropsRef;
393
+ const { onGestureHandlerEvent, onGestureHandlerStateChange }: PropsRef =
394
+ this.propsRef.current as PropsRef;
381
395
 
382
396
  const resultEvent: ResultEvent = this.transformEventData(
383
397
  newState,
@@ -576,6 +590,11 @@ export default abstract class GestureHandler {
576
590
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
577
591
  this.config = { enabled: enabled, ...props };
578
592
  this.enabled = enabled;
593
+
594
+ if (this.config.shouldCancelWhenOutside !== undefined) {
595
+ this.setShouldCancelWhenOutside(this.config.shouldCancelWhenOutside);
596
+ }
597
+
579
598
  this.validateHitSlops();
580
599
 
581
600
  if (this.enabled) {
@@ -42,8 +42,6 @@ export default class LongPressGestureHandler extends GestureHandler {
42
42
  public updateGestureConfig({ enabled = true, ...props }: Config): void {
43
43
  super.updateGestureConfig({ enabled: enabled, ...props });
44
44
 
45
- this.enabled = enabled;
46
-
47
45
  if (this.config.minDurationMs !== undefined) {
48
46
  this.minDurationMs = this.config.minDurationMs;
49
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);
@@ -29,8 +29,6 @@ export default class NativeViewGestureHandler extends GestureHandler {
29
29
  this.buttonRole = true;
30
30
  } else {
31
31
  this.buttonRole = false;
32
- this.view.style['webkitUserSelect'] = 'auto';
33
- this.view.style['userSelect'] = 'auto';
34
32
  }
35
33
  }
36
34
 
@@ -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 !== undefined) {
102
- this.setShouldCancelWhenOutside(this.config.shouldCancelWhenOutside);
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
- }