react-native-gesture-handler 2.7.1 → 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 (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
- }