react-native-gesture-handler 2.0.0 → 2.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. package/android/build.gradle +26 -0
  2. package/android/{src → common/src}/main/java/com/swmansion/common/GestureHandlerStateManager.kt +0 -0
  3. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +4 -1
  4. package/ios/Handlers/RNFlingHandler.m +1 -1
  5. package/ios/Handlers/RNLongPressHandler.m +2 -2
  6. package/ios/Handlers/RNPanHandler.m +1 -1
  7. package/ios/Handlers/RNTapHandler.m +2 -2
  8. package/lib/commonjs/handlers/gestures/GestureDetector.js +28 -3
  9. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  10. package/lib/commonjs/handlers/gestures/eventReceiver.js +34 -11
  11. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  12. package/lib/commonjs/handlers/gestures/forceTouchGesture.js +26 -0
  13. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
  14. package/lib/commonjs/handlers/gestures/gesture.js +22 -6
  15. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  16. package/lib/commonjs/handlers/gestures/manualGesture.js +12 -0
  17. package/lib/commonjs/handlers/gestures/manualGesture.js.map +1 -1
  18. package/lib/commonjs/handlers/gestures/panGesture.js +28 -0
  19. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  20. package/lib/commonjs/handlers/gestures/pinchGesture.js +26 -0
  21. package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -1
  22. package/lib/commonjs/handlers/gestures/rotationGesture.js +26 -0
  23. package/lib/commonjs/handlers/gestures/rotationGesture.js.map +1 -1
  24. package/lib/commonjs/index.js +0 -106
  25. package/lib/commonjs/index.js.map +1 -1
  26. package/lib/module/handlers/gestures/GestureDetector.js +27 -3
  27. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  28. package/lib/module/handlers/gestures/eventReceiver.js +34 -11
  29. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  30. package/lib/module/handlers/gestures/forceTouchGesture.js +27 -0
  31. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
  32. package/lib/module/handlers/gestures/gesture.js +22 -6
  33. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  34. package/lib/module/handlers/gestures/manualGesture.js +13 -0
  35. package/lib/module/handlers/gestures/manualGesture.js.map +1 -1
  36. package/lib/module/handlers/gestures/panGesture.js +29 -0
  37. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  38. package/lib/module/handlers/gestures/pinchGesture.js +27 -0
  39. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -1
  40. package/lib/module/handlers/gestures/rotationGesture.js +27 -0
  41. package/lib/module/handlers/gestures/rotationGesture.js.map +1 -1
  42. package/lib/module/index.js +0 -11
  43. package/lib/module/index.js.map +1 -1
  44. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +1 -1
  45. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +7 -1
  46. package/lib/typescript/handlers/gestures/gesture.d.ts +14 -7
  47. package/lib/typescript/handlers/gestures/manualGesture.d.ts +3 -1
  48. package/lib/typescript/handlers/gestures/panGesture.d.ts +8 -1
  49. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +7 -1
  50. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +7 -1
  51. package/lib/typescript/handlers/handlersRegistry.d.ts +1 -1
  52. package/lib/typescript/index.d.ts +11 -11
  53. package/lib/typescript/web/constants.d.ts +0 -1
  54. package/package.json +2 -1
  55. package/src/handlers/gestures/GestureDetector.tsx +31 -2
  56. package/src/handlers/gestures/eventReceiver.ts +24 -2
  57. package/src/handlers/gestures/forceTouchGesture.ts +43 -1
  58. package/src/handlers/gestures/gesture.ts +42 -12
  59. package/src/handlers/gestures/manualGesture.ts +21 -1
  60. package/src/handlers/gestures/panGesture.ts +43 -1
  61. package/src/handlers/gestures/pinchGesture.ts +40 -1
  62. package/src/handlers/gestures/rotationGesture.ts +40 -1
  63. package/src/index.ts +11 -11
  64. package/ios/RNGestureHandler.xcodeproj/xcuserdata/mdk.xcuserdatad/xcschemes/RNGestureHandler.xcscheme +0 -80
  65. package/ios/RNGestureHandler.xcodeproj/xcuserdata/mdk.xcuserdatad/xcschemes/xcschememanagement.plist +0 -27
@@ -1,3 +1,5 @@
1
+ import groovy.json.JsonSlurper
2
+
1
3
  buildscript {
2
4
  def kotlin_version = rootProject.ext.has('kotlinVersion') ? rootProject.ext.get('kotlinVersion') : project.properties['RNGH_kotlinVersion']
3
5
 
@@ -17,6 +19,20 @@ def safeExtGet(prop, fallback) {
17
19
  rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
18
20
  }
19
21
 
22
+ // Check whether Reanimated 2.3 or higher is installed alongside Gesture Handler
23
+ def shouldUseCommonInterfaceFromReanimated() {
24
+ def reanimated = rootProject.subprojects.find { it.name == 'react-native-reanimated' };
25
+ if (reanimated != null) {
26
+ def inputFile = new File(reanimated.projectDir, '../package.json')
27
+ def json = new JsonSlurper().parseText(inputFile.text)
28
+ def reanimatedVersion = json.version as String
29
+ def (major, minor, patch) = reanimatedVersion.tokenize('.')
30
+ return Integer.parseInt(minor) >= 3
31
+ } else {
32
+ return false
33
+ }
34
+ }
35
+
20
36
  repositories {
21
37
  mavenCentral()
22
38
  }
@@ -36,6 +52,12 @@ android {
36
52
  // standalone gradle module just to be used in AndroidNativeExample
37
53
  sourceSets {
38
54
  main.java.srcDirs += 'lib/src/main/java'
55
+
56
+ // Include "common/" only when it's not provided by Reanimated to mitigate
57
+ // multiple definitions of the same class preventing build
58
+ if (!shouldUseCommonInterfaceFromReanimated()) {
59
+ main.java.srcDirs += 'common/src/main/java'
60
+ }
39
61
  }
40
62
  }
41
63
 
@@ -43,6 +65,10 @@ def kotlin_version = safeExtGet('kotlinVersion', project.properties['RNGH_kotlin
43
65
 
44
66
  dependencies {
45
67
  //noinspection GradleDynamicVersion
68
+ if (shouldUseCommonInterfaceFromReanimated()) {
69
+ // Include Reanimated as dependency to load the common interface
70
+ implementation project(':react-native-reanimated')
71
+ }
46
72
  implementation 'com.facebook.react:react-native:+'
47
73
  implementation 'androidx.appcompat:appcompat:1.2.0'
48
74
  implementation "androidx.core:core-ktx:1.6.0"
@@ -111,7 +111,10 @@ open class GestureHandler<ConcreteGestureHandlerT : GestureHandler<ConcreteGestu
111
111
  applySelf { this.shouldCancelWhenOutside = shouldCancelWhenOutside }
112
112
 
113
113
  fun setEnabled(enabled: Boolean): ConcreteGestureHandlerT = applySelf {
114
- if (view != null) {
114
+ // Don't cancel handler when not changing the value of the isEnabled, executing it always caused
115
+ // handlers to be cancelled on re-render because that's the moment when the config is updated.
116
+ // If the enabled prop "changed" from true to true the handler would get cancelled.
117
+ if (view != null && isEnabled != enabled) {
115
118
  // If view is set then handler is in "active" state. In that case we want to "cancel" handler
116
119
  // when it changes enabled state so that it gets cleared from the orchestrator
117
120
  UiThreadUtil.runOnUiThread { cancel() }
@@ -51,8 +51,8 @@
51
51
 
52
52
  - (void)reset
53
53
  {
54
- [_gestureHandler.pointerTracker reset];
55
54
  [self triggerAction];
55
+ [_gestureHandler.pointerTracker reset];
56
56
  [super reset];
57
57
  }
58
58
 
@@ -93,12 +93,12 @@
93
93
 
94
94
  - (void)reset
95
95
  {
96
- [_gestureHandler.pointerTracker reset];
97
-
98
96
  if (self.state == UIGestureRecognizerStateFailed) {
99
97
  [self triggerAction];
100
98
  }
101
99
 
100
+ [_gestureHandler.pointerTracker reset];
101
+
102
102
  [super reset];
103
103
  }
104
104
 
@@ -138,8 +138,8 @@
138
138
 
139
139
  - (void)reset
140
140
  {
141
- [_gestureHandler.pointerTracker reset];
142
141
  [self triggerAction];
142
+ [_gestureHandler.pointerTracker reset];
143
143
  self.enabled = YES;
144
144
  [super reset];
145
145
  }
@@ -171,11 +171,11 @@ static const NSTimeInterval defaultMaxDuration = 0.5;
171
171
 
172
172
  - (void)reset
173
173
  {
174
- [_gestureHandler.pointerTracker reset];
175
-
176
174
  if (self.state == UIGestureRecognizerStateFailed) {
177
175
  [self triggerAction];
178
176
  }
177
+ [_gestureHandler.pointerTracker reset];
178
+
179
179
  [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cancel) object:nil];
180
180
  _tapsSoFar = 0;
181
181
  _maxNumberOfTouches = 0;
@@ -207,9 +207,15 @@ function useAnimatedGesture(preparedGesture) {
207
207
  case _gesture.CALLBACK_TYPE.UPDATE:
208
208
  return gesture.onUpdate;
209
209
 
210
+ case _gesture.CALLBACK_TYPE.CHANGE:
211
+ return gesture.onChange;
212
+
210
213
  case _gesture.CALLBACK_TYPE.END:
211
214
  return gesture.onEnd;
212
215
 
216
+ case _gesture.CALLBACK_TYPE.FINALIZE:
217
+ return gesture.onFinalize;
218
+
213
219
  case _gesture.CALLBACK_TYPE.TOUCHES_DOWN:
214
220
  return gesture.onTouchesDown;
215
221
 
@@ -261,7 +267,10 @@ function useAnimatedGesture(preparedGesture) {
261
267
  // eslint-disable-next-line react-hooks/rules-of-hooks
262
268
 
263
269
 
264
- const sharedHandlersCallbacks = _reanimatedWrapper.Reanimated.useSharedValue(null); // not every gesture needs a state controller, init them lazily
270
+ const sharedHandlersCallbacks = _reanimatedWrapper.Reanimated.useSharedValue(null); // eslint-disable-next-line react-hooks/rules-of-hooks
271
+
272
+
273
+ const lastUpdateEvent = _reanimatedWrapper.Reanimated.useSharedValue([]); // not every gesture needs a state controller, init them lazily
265
274
 
266
275
 
267
276
  const stateControllers = [];
@@ -284,10 +293,19 @@ function useAnimatedGesture(preparedGesture) {
284
293
  runWorklet(_gesture.CALLBACK_TYPE.BEGAN, gesture, event);
285
294
  } else if ((event.oldState === _State.State.BEGAN || event.oldState === _State.State.UNDETERMINED) && event.state === _State.State.ACTIVE) {
286
295
  runWorklet(_gesture.CALLBACK_TYPE.START, gesture, event);
296
+ lastUpdateEvent.value[gesture.handlerTag] = undefined;
287
297
  } else if (event.oldState !== event.state && event.state === _State.State.END) {
288
- runWorklet(_gesture.CALLBACK_TYPE.END, gesture, event, true);
298
+ if (event.oldState === _State.State.ACTIVE) {
299
+ runWorklet(_gesture.CALLBACK_TYPE.END, gesture, event, true);
300
+ }
301
+
302
+ runWorklet(_gesture.CALLBACK_TYPE.FINALIZE, gesture, event, true);
289
303
  } else if ((event.state === _State.State.FAILED || event.state === _State.State.CANCELLED) && event.state !== event.oldState) {
290
- runWorklet(_gesture.CALLBACK_TYPE.END, gesture, event, false);
304
+ if (event.oldState === _State.State.ACTIVE) {
305
+ runWorklet(_gesture.CALLBACK_TYPE.END, gesture, event, false);
306
+ }
307
+
308
+ runWorklet(_gesture.CALLBACK_TYPE.FINALIZE, gesture, event, false);
291
309
  }
292
310
  } else if (isTouchEvent(event)) {
293
311
  if (!stateControllers[i]) {
@@ -299,6 +317,13 @@ function useAnimatedGesture(preparedGesture) {
299
317
  }
300
318
  } else {
301
319
  runWorklet(_gesture.CALLBACK_TYPE.UPDATE, gesture, event);
320
+
321
+ if (gesture.onChange && gesture.changeEventCalculator) {
322
+ var _gesture$changeEventC;
323
+
324
+ runWorklet(_gesture.CALLBACK_TYPE.CHANGE, gesture, (_gesture$changeEventC = gesture.changeEventCalculator) === null || _gesture$changeEventC === void 0 ? void 0 : _gesture$changeEventC.call(gesture, event, lastUpdateEvent.value[gesture.handlerTag]));
325
+ lastUpdateEvent.value[gesture.handlerTag] = event;
326
+ }
302
327
  }
303
328
  }
304
329
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["GestureDetector.tsx"],"names":["ALLOWED_PROPS","baseGestureHandlerWithMonitorProps","tapGestureHandlerProps","panGestureHandlerProps","panGestureHandlerCustomNativeProps","longPressGestureHandlerProps","forceTouchGestureHandlerProps","flingGestureHandlerProps","convertToHandlerTag","ref","BaseGesture","handlerTag","current","extractValidHandlerTags","interactionGroup","map","filter","tag","dropHandlers","preparedGesture","handler","config","RNGestureHandlerModule","dropGestureHandler","attachHandlers","gestureConfig","gesture","viewTag","useAnimated","firstExecution","initialize","setImmediate","prepare","createGestureHandler","handlerName","requireToFail","simultaneousWith","updateGestureHandler","simultaneousHandlers","waitFor","attachGestureHandler","animatedHandlers","value","g","handlers","updateHandlers","i","length","needsToReattach","useAnimatedGesture","Reanimated","isStateChangeEvent","event","oldState","isTouchEvent","eventType","getHandler","type","CALLBACK_TYPE","BEGAN","onBegin","START","onStart","UPDATE","onUpdate","END","onEnd","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","touchEventTypeToCallbackType","EventType","UNDEFINED","runWorklet","args","isWorklet","console","warn","sharedHandlersCallbacks","useSharedValue","stateControllers","callback","currentCallback","State","UNDETERMINED","state","ACTIVE","FAILED","CANCELLED","GestureStateManager","create","useEvent","animatedEventHandler","GestureDetector","props","toGestureArray","find","reduce","prev","viewRef","firstRenderRef","React","useRef","Error","children","Wrap","Component","render","child","Children","only","cloneElement","collapsable","AnimatedWrap","default","createAnimatedComponent"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport {\n GestureType,\n HandlerCallbacks,\n BaseGesture,\n GestureRef,\n CALLBACK_TYPE,\n} from './gesture';\nimport { Reanimated, SharedValue } from './reanimatedWrapper';\nimport { registerHandler, unregisterHandler } from '../handlersRegistry';\nimport RNGestureHandlerModule from '../../RNGestureHandlerModule';\nimport {\n baseGestureHandlerWithMonitorProps,\n filterConfig,\n findNodeHandle,\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport {\n GestureStateManager,\n GestureStateManagerType,\n} from './gestureStateManager';\nimport { flingGestureHandlerProps } from '../FlingGestureHandler';\nimport { forceTouchGestureHandlerProps } from '../ForceTouchGestureHandler';\nimport { longPressGestureHandlerProps } from '../LongPressGestureHandler';\nimport {\n panGestureHandlerProps,\n panGestureHandlerCustomNativeProps,\n} from '../PanGestureHandler';\nimport { tapGestureHandlerProps } from '../TapGestureHandler';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport { ComposedGesture } from './gestureComposition';\n\nconst ALLOWED_PROPS = [\n ...baseGestureHandlerWithMonitorProps,\n ...tapGestureHandlerProps,\n ...panGestureHandlerProps,\n ...panGestureHandlerCustomNativeProps,\n ...longPressGestureHandlerProps,\n ...forceTouchGestureHandlerProps,\n ...flingGestureHandlerProps,\n];\n\nexport type GestureConfigReference = {\n config: GestureType[];\n animatedEventHandler: unknown;\n animatedHandlers: SharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n > | null;\n firstExecution: boolean;\n useAnimated: boolean;\n};\n\nfunction convertToHandlerTag(ref: GestureRef): number {\n if (typeof ref === 'number') {\n return ref;\n } else if (ref instanceof BaseGesture) {\n return ref.handlerTag;\n } else {\n // @ts-ignore in this case it should be a ref either to gesture object or\n // a gesture handler component, in both cases handlerTag property exists\n return ref.current?.handlerTag ?? -1;\n }\n}\n\nfunction extractValidHandlerTags(interactionGroup: GestureRef[] | undefined) {\n return (\n interactionGroup?.map(convertToHandlerTag)?.filter((tag) => tag > 0) ?? []\n );\n}\n\nfunction dropHandlers(preparedGesture: GestureConfigReference) {\n for (const handler of preparedGesture.config) {\n RNGestureHandlerModule.dropGestureHandler(handler.handlerTag);\n\n unregisterHandler(handler.handlerTag);\n }\n}\n\ninterface AttachHandlersConfig {\n preparedGesture: GestureConfigReference;\n gestureConfig: ComposedGesture | GestureType | undefined;\n gesture: GestureType[];\n viewTag: number;\n useAnimated: boolean;\n}\n\nfunction attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n}: AttachHandlersConfig) {\n if (!preparedGesture.firstExecution) {\n gestureConfig?.initialize();\n } else {\n preparedGesture.firstExecution = false;\n }\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n gestureConfig?.prepare();\n });\n\n for (const handler of gesture) {\n RNGestureHandlerModule.createGestureHandler(\n handler.handlerName,\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS)\n );\n\n registerHandler(handler.handlerTag, handler);\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n let requireToFail: number[] = [];\n if (handler.config.requireToFail) {\n requireToFail = extractValidHandlerTags(handler.config.requireToFail);\n }\n\n let simultaneousWith: number[] = [];\n if (handler.config.simultaneousWith) {\n simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n }\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n });\n }\n preparedGesture.config = gesture;\n\n for (const gesture of preparedGesture.config) {\n RNGestureHandlerModule.attachGestureHandler(\n gesture.handlerTag,\n viewTag,\n !useAnimated // send direct events when using animatedGesture, device events otherwise\n );\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (gesture.map(\n (g) => g.handlers\n ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];\n }\n}\n\nfunction updateHandlers(\n preparedGesture: GestureConfigReference,\n gestureConfig: ComposedGesture | GestureType | undefined,\n gesture: GestureType[]\n) {\n gestureConfig?.prepare();\n\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n gesture[i].handlerTag = handler.handlerTag;\n gesture[i].handlers.handlerTag = handler.handlerTag;\n }\n\n // use setImmediate to extract handlerTags, because when it's ran, all refs should be updated\n // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait\n // in case of external relations)\n setImmediate(() => {\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n handler.config = gesture[i].config;\n handler.handlers = gesture[i].handlers;\n handler.handlers.handlerTag = handler.handlerTag;\n\n const requireToFail = extractValidHandlerTags(\n handler.config.requireToFail\n );\n\n const simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n\n registerHandler(handler.handlerTag, handler);\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (preparedGesture.config.map(\n (g) => g.handlers\n ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];\n }\n });\n}\n\nfunction needsToReattach(\n preparedGesture: GestureConfigReference,\n gesture: GestureType[]\n) {\n if (gesture.length !== preparedGesture.config.length) {\n return true;\n }\n for (let i = 0; i < gesture.length; i++) {\n if (gesture[i].handlerName !== preparedGesture.config[i].handlerName) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction useAnimatedGesture(preparedGesture: GestureConfigReference) {\n if (!Reanimated) {\n return;\n }\n\n function isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureStateChangeEvent {\n 'worklet';\n // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point\n return event.oldState != null;\n }\n\n function isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureTouchEvent {\n 'worklet';\n return event.eventType != null;\n }\n\n function getHandler(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>\n ) {\n 'worklet';\n switch (type) {\n case CALLBACK_TYPE.BEGAN:\n return gesture.onBegin;\n case CALLBACK_TYPE.START:\n return gesture.onStart;\n case CALLBACK_TYPE.UPDATE:\n return gesture.onUpdate;\n case CALLBACK_TYPE.END:\n return gesture.onEnd;\n case CALLBACK_TYPE.TOUCHES_DOWN:\n return gesture.onTouchesDown;\n case CALLBACK_TYPE.TOUCHES_MOVE:\n return gesture.onTouchesMove;\n case CALLBACK_TYPE.TOUCHES_UP:\n return gesture.onTouchesUp;\n case CALLBACK_TYPE.TOUCHES_CANCELLED:\n return gesture.onTouchesCancelled;\n }\n }\n\n function touchEventTypeToCallbackType(eventType: EventType): CALLBACK_TYPE {\n 'worklet';\n switch (eventType) {\n case EventType.TOUCHES_DOWN:\n return CALLBACK_TYPE.TOUCHES_DOWN;\n case EventType.TOUCHES_MOVE:\n return CALLBACK_TYPE.TOUCHES_MOVE;\n case EventType.TOUCHES_UP:\n return CALLBACK_TYPE.TOUCHES_UP;\n case EventType.TOUCHES_CANCELLED:\n return CALLBACK_TYPE.TOUCHES_CANCELLED;\n }\n return CALLBACK_TYPE.UNDEFINED;\n }\n\n function runWorklet(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>,\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent,\n ...args: any[]\n ) {\n 'worklet';\n const handler = getHandler(type, gesture);\n if (gesture.isWorklet[type]) {\n // @ts-ignore Logic below makes sure the correct event is send to the\n // correct handler.\n handler?.(event, ...args);\n } else if (handler) {\n console.warn('Animated gesture callback must be a worklet');\n }\n }\n\n // Hooks are called conditionally, but the condition is whether the\n // react-native-reanimated is installed, which shouldn't change while running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const sharedHandlersCallbacks = Reanimated.useSharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n >(null);\n\n // not every gesture needs a state controller, init them lazily\n const stateControllers: GestureStateManagerType[] = [];\n\n const callback = (\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent\n ) => {\n 'worklet';\n\n const currentCallback = sharedHandlersCallbacks.value;\n if (!currentCallback) {\n return;\n }\n\n for (let i = 0; i < currentCallback.length; i++) {\n const gesture = currentCallback[i];\n\n if (event.handlerTag === gesture.handlerTag) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n runWorklet(CALLBACK_TYPE.BEGAN, gesture, event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n runWorklet(CALLBACK_TYPE.START, gesture, event);\n } else if (\n event.oldState !== event.state &&\n event.state === State.END\n ) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, true);\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.state !== event.oldState\n ) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, false);\n }\n } else if (isTouchEvent(event)) {\n if (!stateControllers[i]) {\n stateControllers[i] = GestureStateManager.create(event.handlerTag);\n }\n\n if (event.eventType !== EventType.UNDETERMINED) {\n runWorklet(\n touchEventTypeToCallbackType(event.eventType),\n gesture,\n event,\n stateControllers[i]\n );\n }\n } else {\n runWorklet(CALLBACK_TYPE.UPDATE, gesture, event);\n }\n }\n }\n };\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const event = Reanimated.useEvent(\n callback,\n ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],\n true\n );\n\n preparedGesture.animatedEventHandler = event;\n preparedGesture.animatedHandlers = sharedHandlersCallbacks;\n}\n\ninterface GestureDetectorProps {\n gesture?: ComposedGesture | GestureType;\n}\nexport const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (\n props\n) => {\n const gestureConfig = props.gesture;\n const gesture = gestureConfig?.toGestureArray?.() ?? [];\n const useAnimated =\n gesture.find((gesture) =>\n gesture.handlers.isWorklet.reduce((prev, current) => prev || current)\n ) != null;\n const viewRef = useRef(null);\n const firstRenderRef = useRef(true);\n\n const preparedGesture = React.useRef<GestureConfigReference>({\n config: gesture,\n animatedEventHandler: null,\n animatedHandlers: null,\n firstExecution: true,\n useAnimated: useAnimated,\n }).current;\n\n if (useAnimated !== preparedGesture.useAnimated) {\n throw new Error(\n 'You cannot change whether you are using gesture or animatedGesture while the app is running'\n );\n }\n\n if (preparedGesture.firstExecution) {\n gestureConfig?.initialize?.();\n }\n\n if (useAnimated) {\n // Whether animatedGesture or gesture is used shouldn't change\n // during while an app is running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useAnimatedGesture(preparedGesture);\n }\n\n useEffect(() => {\n firstRenderRef.current = true;\n const viewTag = findNodeHandle(viewRef.current) as number;\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n });\n\n return () => {\n dropHandlers(preparedGesture);\n };\n }, []);\n\n useEffect(() => {\n if (!firstRenderRef.current) {\n const viewTag = findNodeHandle(viewRef.current) as number;\n\n if (needsToReattach(preparedGesture, gesture)) {\n dropHandlers(preparedGesture);\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n });\n } else {\n updateHandlers(preparedGesture, gestureConfig, gesture);\n }\n } else {\n firstRenderRef.current = false;\n }\n }, [props]);\n\n if (useAnimated) {\n return (\n <AnimatedWrap\n ref={viewRef}\n onGestureHandlerEvent={preparedGesture.animatedEventHandler}>\n {props.children}\n </AnimatedWrap>\n );\n } else {\n return <Wrap ref={viewRef}>{props.children}</Wrap>;\n }\n};\n\nclass Wrap extends React.Component<{ onGestureHandlerEvent?: unknown }> {\n render() {\n // I don't think that fighting with types over such a simple function is worth it\n // The only thing it does is add 'collapsable: false' to the child component\n // to make sure it is in the native view hierarchy so the detector can find\n // correct viewTag to attach to.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const child: any = React.Children.only(this.props.children);\n\n return React.cloneElement(\n child,\n { collapsable: false },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n child.props.children\n );\n }\n}\n\nconst AnimatedWrap = Reanimated?.default?.createAnimatedComponent(Wrap) ?? Wrap;\n"]}
1
+ {"version":3,"sources":["GestureDetector.tsx"],"names":["ALLOWED_PROPS","baseGestureHandlerWithMonitorProps","tapGestureHandlerProps","panGestureHandlerProps","panGestureHandlerCustomNativeProps","longPressGestureHandlerProps","forceTouchGestureHandlerProps","flingGestureHandlerProps","convertToHandlerTag","ref","BaseGesture","handlerTag","current","extractValidHandlerTags","interactionGroup","map","filter","tag","dropHandlers","preparedGesture","handler","config","RNGestureHandlerModule","dropGestureHandler","attachHandlers","gestureConfig","gesture","viewTag","useAnimated","firstExecution","initialize","setImmediate","prepare","createGestureHandler","handlerName","requireToFail","simultaneousWith","updateGestureHandler","simultaneousHandlers","waitFor","attachGestureHandler","animatedHandlers","value","g","handlers","updateHandlers","i","length","needsToReattach","useAnimatedGesture","Reanimated","isStateChangeEvent","event","oldState","isTouchEvent","eventType","getHandler","type","CALLBACK_TYPE","BEGAN","onBegin","START","onStart","UPDATE","onUpdate","CHANGE","onChange","END","onEnd","FINALIZE","onFinalize","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","touchEventTypeToCallbackType","EventType","UNDEFINED","runWorklet","args","isWorklet","console","warn","sharedHandlersCallbacks","useSharedValue","lastUpdateEvent","stateControllers","callback","currentCallback","State","UNDETERMINED","state","ACTIVE","undefined","FAILED","CANCELLED","GestureStateManager","create","changeEventCalculator","useEvent","animatedEventHandler","GestureDetector","props","toGestureArray","find","reduce","prev","viewRef","firstRenderRef","React","useRef","Error","children","Wrap","Component","render","child","Children","only","cloneElement","collapsable","AnimatedWrap","default","createAnimatedComponent"],"mappings":"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","sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport {\n GestureType,\n HandlerCallbacks,\n BaseGesture,\n GestureRef,\n CALLBACK_TYPE,\n} from './gesture';\nimport { Reanimated, SharedValue } from './reanimatedWrapper';\nimport { registerHandler, unregisterHandler } from '../handlersRegistry';\nimport RNGestureHandlerModule from '../../RNGestureHandlerModule';\nimport {\n baseGestureHandlerWithMonitorProps,\n filterConfig,\n findNodeHandle,\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport {\n GestureStateManager,\n GestureStateManagerType,\n} from './gestureStateManager';\nimport { flingGestureHandlerProps } from '../FlingGestureHandler';\nimport { forceTouchGestureHandlerProps } from '../ForceTouchGestureHandler';\nimport { longPressGestureHandlerProps } from '../LongPressGestureHandler';\nimport {\n panGestureHandlerProps,\n panGestureHandlerCustomNativeProps,\n} from '../PanGestureHandler';\nimport { tapGestureHandlerProps } from '../TapGestureHandler';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport { ComposedGesture } from './gestureComposition';\n\nconst ALLOWED_PROPS = [\n ...baseGestureHandlerWithMonitorProps,\n ...tapGestureHandlerProps,\n ...panGestureHandlerProps,\n ...panGestureHandlerCustomNativeProps,\n ...longPressGestureHandlerProps,\n ...forceTouchGestureHandlerProps,\n ...flingGestureHandlerProps,\n];\n\nexport type GestureConfigReference = {\n config: GestureType[];\n animatedEventHandler: unknown;\n animatedHandlers: SharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n > | null;\n firstExecution: boolean;\n useAnimated: boolean;\n};\n\nfunction convertToHandlerTag(ref: GestureRef): number {\n if (typeof ref === 'number') {\n return ref;\n } else if (ref instanceof BaseGesture) {\n return ref.handlerTag;\n } else {\n // @ts-ignore in this case it should be a ref either to gesture object or\n // a gesture handler component, in both cases handlerTag property exists\n return ref.current?.handlerTag ?? -1;\n }\n}\n\nfunction extractValidHandlerTags(interactionGroup: GestureRef[] | undefined) {\n return (\n interactionGroup?.map(convertToHandlerTag)?.filter((tag) => tag > 0) ?? []\n );\n}\n\nfunction dropHandlers(preparedGesture: GestureConfigReference) {\n for (const handler of preparedGesture.config) {\n RNGestureHandlerModule.dropGestureHandler(handler.handlerTag);\n\n unregisterHandler(handler.handlerTag);\n }\n}\n\ninterface AttachHandlersConfig {\n preparedGesture: GestureConfigReference;\n gestureConfig: ComposedGesture | GestureType | undefined;\n gesture: GestureType[];\n viewTag: number;\n useAnimated: boolean;\n}\n\nfunction attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n}: AttachHandlersConfig) {\n if (!preparedGesture.firstExecution) {\n gestureConfig?.initialize();\n } else {\n preparedGesture.firstExecution = false;\n }\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n gestureConfig?.prepare();\n });\n\n for (const handler of gesture) {\n RNGestureHandlerModule.createGestureHandler(\n handler.handlerName,\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS)\n );\n\n registerHandler(handler.handlerTag, handler);\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n let requireToFail: number[] = [];\n if (handler.config.requireToFail) {\n requireToFail = extractValidHandlerTags(handler.config.requireToFail);\n }\n\n let simultaneousWith: number[] = [];\n if (handler.config.simultaneousWith) {\n simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n }\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n });\n }\n preparedGesture.config = gesture;\n\n for (const gesture of preparedGesture.config) {\n RNGestureHandlerModule.attachGestureHandler(\n gesture.handlerTag,\n viewTag,\n !useAnimated // send direct events when using animatedGesture, device events otherwise\n );\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (gesture.map(\n (g) => g.handlers\n ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];\n }\n}\n\nfunction updateHandlers(\n preparedGesture: GestureConfigReference,\n gestureConfig: ComposedGesture | GestureType | undefined,\n gesture: GestureType[]\n) {\n gestureConfig?.prepare();\n\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n gesture[i].handlerTag = handler.handlerTag;\n gesture[i].handlers.handlerTag = handler.handlerTag;\n }\n\n // use setImmediate to extract handlerTags, because when it's ran, all refs should be updated\n // and handlerTags in BaseGesture references should be updated in the loop above (we need to wait\n // in case of external relations)\n setImmediate(() => {\n for (let i = 0; i < gesture.length; i++) {\n const handler = preparedGesture.config[i];\n\n handler.config = gesture[i].config;\n handler.handlers = gesture[i].handlers;\n handler.handlers.handlerTag = handler.handlerTag;\n\n const requireToFail = extractValidHandlerTags(\n handler.config.requireToFail\n );\n\n const simultaneousWith = extractValidHandlerTags(\n handler.config.simultaneousWith\n );\n\n RNGestureHandlerModule.updateGestureHandler(\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS, {\n simultaneousHandlers: simultaneousWith,\n waitFor: requireToFail,\n })\n );\n\n registerHandler(handler.handlerTag, handler);\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (preparedGesture.config.map(\n (g) => g.handlers\n ) as unknown) as HandlerCallbacks<Record<string, unknown>>[];\n }\n });\n}\n\nfunction needsToReattach(\n preparedGesture: GestureConfigReference,\n gesture: GestureType[]\n) {\n if (gesture.length !== preparedGesture.config.length) {\n return true;\n }\n for (let i = 0; i < gesture.length; i++) {\n if (gesture[i].handlerName !== preparedGesture.config[i].handlerName) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction useAnimatedGesture(preparedGesture: GestureConfigReference) {\n if (!Reanimated) {\n return;\n }\n\n function isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureStateChangeEvent {\n 'worklet';\n // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point\n return event.oldState != null;\n }\n\n function isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n ): event is GestureTouchEvent {\n 'worklet';\n return event.eventType != null;\n }\n\n function getHandler(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>\n ) {\n 'worklet';\n switch (type) {\n case CALLBACK_TYPE.BEGAN:\n return gesture.onBegin;\n case CALLBACK_TYPE.START:\n return gesture.onStart;\n case CALLBACK_TYPE.UPDATE:\n return gesture.onUpdate;\n case CALLBACK_TYPE.CHANGE:\n return gesture.onChange;\n case CALLBACK_TYPE.END:\n return gesture.onEnd;\n case CALLBACK_TYPE.FINALIZE:\n return gesture.onFinalize;\n case CALLBACK_TYPE.TOUCHES_DOWN:\n return gesture.onTouchesDown;\n case CALLBACK_TYPE.TOUCHES_MOVE:\n return gesture.onTouchesMove;\n case CALLBACK_TYPE.TOUCHES_UP:\n return gesture.onTouchesUp;\n case CALLBACK_TYPE.TOUCHES_CANCELLED:\n return gesture.onTouchesCancelled;\n }\n }\n\n function touchEventTypeToCallbackType(eventType: EventType): CALLBACK_TYPE {\n 'worklet';\n switch (eventType) {\n case EventType.TOUCHES_DOWN:\n return CALLBACK_TYPE.TOUCHES_DOWN;\n case EventType.TOUCHES_MOVE:\n return CALLBACK_TYPE.TOUCHES_MOVE;\n case EventType.TOUCHES_UP:\n return CALLBACK_TYPE.TOUCHES_UP;\n case EventType.TOUCHES_CANCELLED:\n return CALLBACK_TYPE.TOUCHES_CANCELLED;\n }\n return CALLBACK_TYPE.UNDEFINED;\n }\n\n function runWorklet(\n type: CALLBACK_TYPE,\n gesture: HandlerCallbacks<Record<string, unknown>>,\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent,\n ...args: any[]\n ) {\n 'worklet';\n const handler = getHandler(type, gesture);\n if (gesture.isWorklet[type]) {\n // @ts-ignore Logic below makes sure the correct event is send to the\n // correct handler.\n handler?.(event, ...args);\n } else if (handler) {\n console.warn('Animated gesture callback must be a worklet');\n }\n }\n\n // Hooks are called conditionally, but the condition is whether the\n // react-native-reanimated is installed, which shouldn't change while running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const sharedHandlersCallbacks = Reanimated.useSharedValue<\n HandlerCallbacks<Record<string, unknown>>[] | null\n >(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const lastUpdateEvent = Reanimated.useSharedValue<\n (GestureUpdateEvent | undefined)[]\n >([]);\n\n // not every gesture needs a state controller, init them lazily\n const stateControllers: GestureStateManagerType[] = [];\n\n const callback = (\n event: GestureStateChangeEvent | GestureUpdateEvent | GestureTouchEvent\n ) => {\n 'worklet';\n\n const currentCallback = sharedHandlersCallbacks.value;\n if (!currentCallback) {\n return;\n }\n\n for (let i = 0; i < currentCallback.length; i++) {\n const gesture = currentCallback[i];\n\n if (event.handlerTag === gesture.handlerTag) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n runWorklet(CALLBACK_TYPE.BEGAN, gesture, event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n runWorklet(CALLBACK_TYPE.START, gesture, event);\n lastUpdateEvent.value[gesture.handlerTag] = undefined;\n } else if (\n event.oldState !== event.state &&\n event.state === State.END\n ) {\n if (event.oldState === State.ACTIVE) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, true);\n }\n runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, true);\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.state !== event.oldState\n ) {\n if (event.oldState === State.ACTIVE) {\n runWorklet(CALLBACK_TYPE.END, gesture, event, false);\n }\n runWorklet(CALLBACK_TYPE.FINALIZE, gesture, event, false);\n }\n } else if (isTouchEvent(event)) {\n if (!stateControllers[i]) {\n stateControllers[i] = GestureStateManager.create(event.handlerTag);\n }\n\n if (event.eventType !== EventType.UNDETERMINED) {\n runWorklet(\n touchEventTypeToCallbackType(event.eventType),\n gesture,\n event,\n stateControllers[i]\n );\n }\n } else {\n runWorklet(CALLBACK_TYPE.UPDATE, gesture, event);\n\n if (gesture.onChange && gesture.changeEventCalculator) {\n runWorklet(\n CALLBACK_TYPE.CHANGE,\n gesture,\n gesture.changeEventCalculator?.(\n event,\n lastUpdateEvent.value[gesture.handlerTag]\n )\n );\n\n lastUpdateEvent.value[gesture.handlerTag] = event;\n }\n }\n }\n }\n };\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const event = Reanimated.useEvent(\n callback,\n ['onGestureHandlerStateChange', 'onGestureHandlerEvent'],\n true\n );\n\n preparedGesture.animatedEventHandler = event;\n preparedGesture.animatedHandlers = sharedHandlersCallbacks;\n}\n\ninterface GestureDetectorProps {\n gesture?: ComposedGesture | GestureType;\n}\nexport const GestureDetector: React.FunctionComponent<GestureDetectorProps> = (\n props\n) => {\n const gestureConfig = props.gesture;\n const gesture = gestureConfig?.toGestureArray?.() ?? [];\n const useAnimated =\n gesture.find((gesture) =>\n gesture.handlers.isWorklet.reduce((prev, current) => prev || current)\n ) != null;\n const viewRef = useRef(null);\n const firstRenderRef = useRef(true);\n\n const preparedGesture = React.useRef<GestureConfigReference>({\n config: gesture,\n animatedEventHandler: null,\n animatedHandlers: null,\n firstExecution: true,\n useAnimated: useAnimated,\n }).current;\n\n if (useAnimated !== preparedGesture.useAnimated) {\n throw new Error(\n 'You cannot change whether you are using gesture or animatedGesture while the app is running'\n );\n }\n\n if (preparedGesture.firstExecution) {\n gestureConfig?.initialize?.();\n }\n\n if (useAnimated) {\n // Whether animatedGesture or gesture is used shouldn't change\n // during while an app is running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useAnimatedGesture(preparedGesture);\n }\n\n useEffect(() => {\n firstRenderRef.current = true;\n const viewTag = findNodeHandle(viewRef.current) as number;\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n });\n\n return () => {\n dropHandlers(preparedGesture);\n };\n }, []);\n\n useEffect(() => {\n if (!firstRenderRef.current) {\n const viewTag = findNodeHandle(viewRef.current) as number;\n\n if (needsToReattach(preparedGesture, gesture)) {\n dropHandlers(preparedGesture);\n attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n useAnimated,\n });\n } else {\n updateHandlers(preparedGesture, gestureConfig, gesture);\n }\n } else {\n firstRenderRef.current = false;\n }\n }, [props]);\n\n if (useAnimated) {\n return (\n <AnimatedWrap\n ref={viewRef}\n onGestureHandlerEvent={preparedGesture.animatedEventHandler}>\n {props.children}\n </AnimatedWrap>\n );\n } else {\n return <Wrap ref={viewRef}>{props.children}</Wrap>;\n }\n};\n\nclass Wrap extends React.Component<{ onGestureHandlerEvent?: unknown }> {\n render() {\n // I don't think that fighting with types over such a simple function is worth it\n // The only thing it does is add 'collapsable: false' to the child component\n // to make sure it is in the native view hierarchy so the detector can find\n // correct viewTag to attach to.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const child: any = React.Children.only(this.props.children);\n\n return React.cloneElement(\n child,\n { collapsable: false },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n child.props.children\n );\n }\n}\n\nconst AnimatedWrap = Reanimated?.default?.createAnimatedComponent(Wrap) ?? Wrap;\n"]}
@@ -30,6 +30,7 @@ const dummyStateManager = {
30
30
  console.warn('You have to use react-native-reanimated in order to control the state of the gesture.');
31
31
  }
32
32
  };
33
+ const lastUpdateEvent = [];
33
34
 
34
35
  function isStateChangeEvent(event) {
35
36
  // @ts-ignore oldState doesn't exist on GestureTouchEvent and that's the point
@@ -41,7 +42,7 @@ function isTouchEvent(event) {
41
42
  }
42
43
 
43
44
  function onGestureHandlerEvent(event) {
44
- var _handler$handlers5, _handler$handlers5$on, _handler$handlers6, _handler$handlers6$on, _handler$handlers7, _handler$handlers7$on, _handler$handlers8, _handler$handlers8$on;
45
+ var _handler$handlers7, _handler$handlers7$on, _handler$handlers8, _handler$handlers8$on, _handler$handlers9, _handler$handlers9$on, _handler$handlers10, _handler$handlers10$o;
45
46
 
46
47
  const handler = (0, _handlersRegistry.findHandler)(event.handlerTag);
47
48
 
@@ -55,37 +56,59 @@ function onGestureHandlerEvent(event) {
55
56
  var _handler$handlers$onS, _handler$handlers2;
56
57
 
57
58
  (_handler$handlers$onS = (_handler$handlers2 = handler.handlers).onStart) === null || _handler$handlers$onS === void 0 ? void 0 : _handler$handlers$onS.call(_handler$handlers2, event);
59
+ lastUpdateEvent[handler.handlers.handlerTag] = event;
58
60
  } else if (event.oldState !== event.state && event.state === _State.State.END) {
59
- var _handler$handlers$onE, _handler$handlers3;
61
+ var _handler$handlers$onF, _handler$handlers4;
60
62
 
61
- (_handler$handlers$onE = (_handler$handlers3 = handler.handlers).onEnd) === null || _handler$handlers$onE === void 0 ? void 0 : _handler$handlers$onE.call(_handler$handlers3, event, true);
63
+ if (event.oldState === _State.State.ACTIVE) {
64
+ var _handler$handlers$onE, _handler$handlers3;
65
+
66
+ (_handler$handlers$onE = (_handler$handlers3 = handler.handlers).onEnd) === null || _handler$handlers$onE === void 0 ? void 0 : _handler$handlers$onE.call(_handler$handlers3, event, true);
67
+ }
68
+
69
+ (_handler$handlers$onF = (_handler$handlers4 = handler.handlers).onFinalize) === null || _handler$handlers$onF === void 0 ? void 0 : _handler$handlers$onF.call(_handler$handlers4, event, true);
70
+ lastUpdateEvent[handler.handlers.handlerTag] = undefined;
62
71
  } else if ((event.state === _State.State.FAILED || event.state === _State.State.CANCELLED) && event.oldState !== event.state) {
63
- var _handler$handlers$onE2, _handler$handlers4;
72
+ var _handler$handlers$onF2, _handler$handlers6;
73
+
74
+ if (event.oldState === _State.State.ACTIVE) {
75
+ var _handler$handlers$onE2, _handler$handlers5;
76
+
77
+ (_handler$handlers$onE2 = (_handler$handlers5 = handler.handlers).onEnd) === null || _handler$handlers$onE2 === void 0 ? void 0 : _handler$handlers$onE2.call(_handler$handlers5, event, false);
78
+ }
64
79
 
65
- (_handler$handlers$onE2 = (_handler$handlers4 = handler.handlers).onEnd) === null || _handler$handlers$onE2 === void 0 ? void 0 : _handler$handlers$onE2.call(_handler$handlers4, event, false);
80
+ (_handler$handlers$onF2 = (_handler$handlers6 = handler.handlers).onFinalize) === null || _handler$handlers$onF2 === void 0 ? void 0 : _handler$handlers$onF2.call(_handler$handlers6, event, false);
81
+ lastUpdateEvent[handler.handlers.handlerTag] = undefined;
66
82
  }
67
83
  } else if (isTouchEvent(event)) {
68
84
  switch (event.eventType) {
69
85
  case _EventType.EventType.TOUCHES_DOWN:
70
- (_handler$handlers5 = handler.handlers) === null || _handler$handlers5 === void 0 ? void 0 : (_handler$handlers5$on = _handler$handlers5.onTouchesDown) === null || _handler$handlers5$on === void 0 ? void 0 : _handler$handlers5$on.call(_handler$handlers5, event, dummyStateManager);
86
+ (_handler$handlers7 = handler.handlers) === null || _handler$handlers7 === void 0 ? void 0 : (_handler$handlers7$on = _handler$handlers7.onTouchesDown) === null || _handler$handlers7$on === void 0 ? void 0 : _handler$handlers7$on.call(_handler$handlers7, event, dummyStateManager);
71
87
  break;
72
88
 
73
89
  case _EventType.EventType.TOUCHES_MOVE:
74
- (_handler$handlers6 = handler.handlers) === null || _handler$handlers6 === void 0 ? void 0 : (_handler$handlers6$on = _handler$handlers6.onTouchesMove) === null || _handler$handlers6$on === void 0 ? void 0 : _handler$handlers6$on.call(_handler$handlers6, event, dummyStateManager);
90
+ (_handler$handlers8 = handler.handlers) === null || _handler$handlers8 === void 0 ? void 0 : (_handler$handlers8$on = _handler$handlers8.onTouchesMove) === null || _handler$handlers8$on === void 0 ? void 0 : _handler$handlers8$on.call(_handler$handlers8, event, dummyStateManager);
75
91
  break;
76
92
 
77
93
  case _EventType.EventType.TOUCHES_UP:
78
- (_handler$handlers7 = handler.handlers) === null || _handler$handlers7 === void 0 ? void 0 : (_handler$handlers7$on = _handler$handlers7.onTouchesUp) === null || _handler$handlers7$on === void 0 ? void 0 : _handler$handlers7$on.call(_handler$handlers7, event, dummyStateManager);
94
+ (_handler$handlers9 = handler.handlers) === null || _handler$handlers9 === void 0 ? void 0 : (_handler$handlers9$on = _handler$handlers9.onTouchesUp) === null || _handler$handlers9$on === void 0 ? void 0 : _handler$handlers9$on.call(_handler$handlers9, event, dummyStateManager);
79
95
  break;
80
96
 
81
97
  case _EventType.EventType.TOUCHES_CANCELLED:
82
- (_handler$handlers8 = handler.handlers) === null || _handler$handlers8 === void 0 ? void 0 : (_handler$handlers8$on = _handler$handlers8.onTouchesCancelled) === null || _handler$handlers8$on === void 0 ? void 0 : _handler$handlers8$on.call(_handler$handlers8, event, dummyStateManager);
98
+ (_handler$handlers10 = handler.handlers) === null || _handler$handlers10 === void 0 ? void 0 : (_handler$handlers10$o = _handler$handlers10.onTouchesCancelled) === null || _handler$handlers10$o === void 0 ? void 0 : _handler$handlers10$o.call(_handler$handlers10, event, dummyStateManager);
83
99
  break;
84
100
  }
85
101
  } else {
86
- var _handler$handlers$onU, _handler$handlers9;
102
+ var _handler$handlers$onU, _handler$handlers11;
87
103
 
88
- (_handler$handlers$onU = (_handler$handlers9 = handler.handlers).onUpdate) === null || _handler$handlers$onU === void 0 ? void 0 : _handler$handlers$onU.call(_handler$handlers9, event);
104
+ (_handler$handlers$onU = (_handler$handlers11 = handler.handlers).onUpdate) === null || _handler$handlers$onU === void 0 ? void 0 : _handler$handlers$onU.call(_handler$handlers11, event);
105
+
106
+ if (handler.handlers.onChange && handler.handlers.changeEventCalculator) {
107
+ var _handler$handlers$onC, _handler$handlers12, _handler$handlers$cha, _handler$handlers13;
108
+
109
+ (_handler$handlers$onC = (_handler$handlers12 = handler.handlers).onChange) === null || _handler$handlers$onC === void 0 ? void 0 : _handler$handlers$onC.call(_handler$handlers12, (_handler$handlers$cha = (_handler$handlers13 = handler.handlers).changeEventCalculator) === null || _handler$handlers$cha === void 0 ? void 0 : _handler$handlers$cha.call(_handler$handlers13, event, lastUpdateEvent[handler.handlers.handlerTag]));
110
+ lastUpdateEvent[handler.handlers.handlerTag] = event;
111
+ }
89
112
  }
90
113
  }
91
114
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["eventReceiver.ts"],"names":["gestureHandlerEventSubscription","gestureHandlerStateChangeEventSubscription","dummyStateManager","begin","console","warn","activate","end","fail","isStateChangeEvent","event","oldState","isTouchEvent","eventType","onGestureHandlerEvent","handler","handlerTag","State","UNDETERMINED","state","BEGAN","handlers","onBegin","ACTIVE","onStart","END","onEnd","FAILED","CANCELLED","EventType","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","onUpdate","startListening","stopListening","DeviceEventEmitter","addListener","removeSubscription"],"mappings":"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","sourcesContent":["import { DeviceEventEmitter, EmitterSubscription } from 'react-native';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport {\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport { GestureStateManagerType } from './gestureStateManager';\nimport { findHandler } from '../handlersRegistry';\nimport { BaseGesture } from './gesture';\n\nlet gestureHandlerEventSubscription: EmitterSubscription | null = null;\nlet gestureHandlerStateChangeEventSubscription: EmitterSubscription | null = null;\n\nconst dummyStateManager: GestureStateManagerType = {\n begin: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n activate: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n end: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n fail: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n};\n\nfunction isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureStateChangeEvent {\n // @ts-ignore oldState doesn't exist on GestureTouchEvent and that's the point\n return event.oldState != null;\n}\n\nfunction isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureTouchEvent {\n return event.eventType != null;\n}\n\nfunction onGestureHandlerEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n) {\n const handler = findHandler(event.handlerTag) as BaseGesture<\n Record<string, unknown>\n >;\n\n if (handler) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n handler.handlers.onBegin?.(event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n handler.handlers.onStart?.(event);\n } else if (event.oldState !== event.state && event.state === State.END) {\n handler.handlers.onEnd?.(event, true);\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.oldState !== event.state\n ) {\n handler.handlers.onEnd?.(event, false);\n }\n } else if (isTouchEvent(event)) {\n switch (event.eventType) {\n case EventType.TOUCHES_DOWN:\n handler.handlers?.onTouchesDown?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_MOVE:\n handler.handlers?.onTouchesMove?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_UP:\n handler.handlers?.onTouchesUp?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_CANCELLED:\n handler.handlers?.onTouchesCancelled?.(event, dummyStateManager);\n break;\n }\n } else {\n handler.handlers.onUpdate?.(event);\n }\n }\n}\n\nexport function startListening() {\n stopListening();\n\n gestureHandlerEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerEvent',\n onGestureHandlerEvent\n );\n\n gestureHandlerStateChangeEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerStateChange',\n onGestureHandlerEvent\n );\n}\n\nexport function stopListening() {\n if (gestureHandlerEventSubscription) {\n DeviceEventEmitter.removeSubscription(gestureHandlerEventSubscription);\n\n gestureHandlerEventSubscription = null;\n }\n\n if (gestureHandlerStateChangeEventSubscription) {\n DeviceEventEmitter.removeSubscription(\n gestureHandlerStateChangeEventSubscription\n );\n\n gestureHandlerStateChangeEventSubscription = null;\n }\n}\n"]}
1
+ {"version":3,"sources":["eventReceiver.ts"],"names":["gestureHandlerEventSubscription","gestureHandlerStateChangeEventSubscription","dummyStateManager","begin","console","warn","activate","end","fail","lastUpdateEvent","isStateChangeEvent","event","oldState","isTouchEvent","eventType","onGestureHandlerEvent","handler","handlerTag","State","UNDETERMINED","state","BEGAN","handlers","onBegin","ACTIVE","onStart","END","onEnd","onFinalize","undefined","FAILED","CANCELLED","EventType","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","onUpdate","onChange","changeEventCalculator","startListening","stopListening","DeviceEventEmitter","addListener","removeSubscription"],"mappings":"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","sourcesContent":["import { DeviceEventEmitter, EmitterSubscription } from 'react-native';\nimport { State } from '../../State';\nimport { EventType } from '../../EventType';\nimport {\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport { GestureStateManagerType } from './gestureStateManager';\nimport { findHandler } from '../handlersRegistry';\nimport { BaseGesture } from './gesture';\n\nlet gestureHandlerEventSubscription: EmitterSubscription | null = null;\nlet gestureHandlerStateChangeEventSubscription: EmitterSubscription | null = null;\n\nconst dummyStateManager: GestureStateManagerType = {\n begin: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n activate: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n end: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n fail: () => {\n console.warn(\n 'You have to use react-native-reanimated in order to control the state of the gesture.'\n );\n },\n};\n\nconst lastUpdateEvent: (GestureUpdateEvent | undefined)[] = [];\n\nfunction isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureStateChangeEvent {\n // @ts-ignore oldState doesn't exist on GestureTouchEvent and that's the point\n return event.oldState != null;\n}\n\nfunction isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureTouchEvent {\n return event.eventType != null;\n}\n\nfunction onGestureHandlerEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n) {\n const handler = findHandler(event.handlerTag) as BaseGesture<\n Record<string, unknown>\n >;\n\n if (handler) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n handler.handlers.onBegin?.(event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n handler.handlers.onStart?.(event);\n lastUpdateEvent[handler.handlers.handlerTag] = event;\n } else if (event.oldState !== event.state && event.state === State.END) {\n if (event.oldState === State.ACTIVE) {\n handler.handlers.onEnd?.(event, true);\n }\n handler.handlers.onFinalize?.(event, true);\n lastUpdateEvent[handler.handlers.handlerTag] = undefined;\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.oldState !== event.state\n ) {\n if (event.oldState === State.ACTIVE) {\n handler.handlers.onEnd?.(event, false);\n }\n handler.handlers.onFinalize?.(event, false);\n lastUpdateEvent[handler.handlers.handlerTag] = undefined;\n }\n } else if (isTouchEvent(event)) {\n switch (event.eventType) {\n case EventType.TOUCHES_DOWN:\n handler.handlers?.onTouchesDown?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_MOVE:\n handler.handlers?.onTouchesMove?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_UP:\n handler.handlers?.onTouchesUp?.(event, dummyStateManager);\n break;\n case EventType.TOUCHES_CANCELLED:\n handler.handlers?.onTouchesCancelled?.(event, dummyStateManager);\n break;\n }\n } else {\n handler.handlers.onUpdate?.(event);\n\n if (handler.handlers.onChange && handler.handlers.changeEventCalculator) {\n handler.handlers.onChange?.(\n handler.handlers.changeEventCalculator?.(\n event,\n lastUpdateEvent[handler.handlers.handlerTag]\n )\n );\n\n lastUpdateEvent[handler.handlers.handlerTag] = event;\n }\n }\n }\n}\n\nexport function startListening() {\n stopListening();\n\n gestureHandlerEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerEvent',\n onGestureHandlerEvent\n );\n\n gestureHandlerStateChangeEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerStateChange',\n onGestureHandlerEvent\n );\n}\n\nexport function stopListening() {\n if (gestureHandlerEventSubscription) {\n DeviceEventEmitter.removeSubscription(gestureHandlerEventSubscription);\n\n gestureHandlerEventSubscription = null;\n }\n\n if (gestureHandlerStateChangeEventSubscription) {\n DeviceEventEmitter.removeSubscription(\n gestureHandlerStateChangeEventSubscription\n );\n\n gestureHandlerStateChangeEventSubscription = null;\n }\n}\n"]}
@@ -9,6 +9,26 @@ var _gesture = require("./gesture");
9
9
 
10
10
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
11
 
12
+ function changeEventCalculator(current, previous) {
13
+ 'worklet';
14
+
15
+ let changePayload;
16
+
17
+ if (previous === undefined) {
18
+ changePayload = {
19
+ forceChange: current.force
20
+ };
21
+ } else {
22
+ changePayload = {
23
+ forceChange: current.force - previous.force
24
+ };
25
+ }
26
+
27
+ return { ...current,
28
+ ...changePayload
29
+ };
30
+ }
31
+
12
32
  class ForceTouchGesture extends _gesture.ContinousBaseGesture {
13
33
  constructor() {
14
34
  super();
@@ -33,6 +53,12 @@ class ForceTouchGesture extends _gesture.ContinousBaseGesture {
33
53
  return this;
34
54
  }
35
55
 
56
+ onChange(callback) {
57
+ // @ts-ignore TS being overprotective, ForceTouchGestureHandlerEventPayload is Record
58
+ this.handlers.changeEventCalculator = changeEventCalculator;
59
+ return super.onChange(callback);
60
+ }
61
+
36
62
  }
37
63
 
38
64
  exports.ForceTouchGesture = ForceTouchGesture;
@@ -1 +1 @@
1
- {"version":3,"sources":["forceTouchGesture.ts"],"names":["ForceTouchGesture","ContinousBaseGesture","constructor","handlerName","minForce","force","config","maxForce","feedbackOnActivation","value"],"mappings":";;;;;;;AAAA;;;;AAMO,MAAMA,iBAAN,SAAgCC,6BAAhC,CAA2F;AAGhGC,EAAAA,WAAW,GAAG;AACZ;;AADY,oCAF+C,EAE/C;;AAGZ,SAAKC,WAAL,GAAmB,0BAAnB;AACD;;AAEDC,EAAAA,QAAQ,CAACC,KAAD,EAAgB;AACtB,SAAKC,MAAL,CAAYF,QAAZ,GAAuBC,KAAvB;AACA,WAAO,IAAP;AACD;;AAEDE,EAAAA,QAAQ,CAACF,KAAD,EAAgB;AACtB,SAAKC,MAAL,CAAYC,QAAZ,GAAuBF,KAAvB;AACA,WAAO,IAAP;AACD;;AAEDG,EAAAA,oBAAoB,CAACC,KAAD,EAAiB;AACnC,SAAKH,MAAL,CAAYE,oBAAZ,GAAmCC,KAAnC;AACA,WAAO,IAAP;AACD;;AAtB+F","sourcesContent":["import { BaseGestureConfig, ContinousBaseGesture } from './gesture';\nimport {\n ForceTouchGestureConfig,\n ForceTouchGestureHandlerEventPayload,\n} from '../ForceTouchGestureHandler';\n\nexport class ForceTouchGesture extends ContinousBaseGesture<ForceTouchGestureHandlerEventPayload> {\n public config: BaseGestureConfig & ForceTouchGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'ForceTouchGestureHandler';\n }\n\n minForce(force: number) {\n this.config.minForce = force;\n return this;\n }\n\n maxForce(force: number) {\n this.config.maxForce = force;\n return this;\n }\n\n feedbackOnActivation(value: boolean) {\n this.config.feedbackOnActivation = value;\n return this;\n }\n}\n\nexport type ForceTouchGestureType = InstanceType<typeof ForceTouchGesture>;\n"]}
1
+ {"version":3,"sources":["forceTouchGesture.ts"],"names":["changeEventCalculator","current","previous","changePayload","undefined","forceChange","force","ForceTouchGesture","ContinousBaseGesture","constructor","handlerName","minForce","config","maxForce","feedbackOnActivation","value","onChange","callback","handlers"],"mappings":";;;;;;;AAAA;;;;AAWA,SAASA,qBAAT,CACEC,OADF,EAEEC,QAFF,EAGE;AACA;;AACA,MAAIC,aAAJ;;AACA,MAAID,QAAQ,KAAKE,SAAjB,EAA4B;AAC1BD,IAAAA,aAAa,GAAG;AACdE,MAAAA,WAAW,EAAEJ,OAAO,CAACK;AADP,KAAhB;AAGD,GAJD,MAIO;AACLH,IAAAA,aAAa,GAAG;AACdE,MAAAA,WAAW,EAAEJ,OAAO,CAACK,KAAR,GAAgBJ,QAAQ,CAACI;AADxB,KAAhB;AAGD;;AAED,SAAO,EAAE,GAAGL,OAAL;AAAc,OAAGE;AAAjB,GAAP;AACD;;AAEM,MAAMI,iBAAN,SAAgCC,6BAAhC,CAGL;AAGAC,EAAAA,WAAW,GAAG;AACZ;;AADY,oCAF+C,EAE/C;;AAGZ,SAAKC,WAAL,GAAmB,0BAAnB;AACD;;AAEDC,EAAAA,QAAQ,CAACL,KAAD,EAAgB;AACtB,SAAKM,MAAL,CAAYD,QAAZ,GAAuBL,KAAvB;AACA,WAAO,IAAP;AACD;;AAEDO,EAAAA,QAAQ,CAACP,KAAD,EAAgB;AACtB,SAAKM,MAAL,CAAYC,QAAZ,GAAuBP,KAAvB;AACA,WAAO,IAAP;AACD;;AAEDQ,EAAAA,oBAAoB,CAACC,KAAD,EAAiB;AACnC,SAAKH,MAAL,CAAYE,oBAAZ,GAAmCC,KAAnC;AACA,WAAO,IAAP;AACD;;AAEDC,EAAAA,QAAQ,CACNC,QADM,EASN;AACA;AACA,SAAKC,QAAL,CAAclB,qBAAd,GAAsCA,qBAAtC;AACA,WAAO,MAAMgB,QAAN,CAAeC,QAAf,CAAP;AACD;;AArCD","sourcesContent":["import { BaseGestureConfig, ContinousBaseGesture } from './gesture';\nimport {\n ForceTouchGestureConfig,\n ForceTouchGestureHandlerEventPayload,\n} from '../ForceTouchGestureHandler';\nimport { GestureUpdateEvent } from '../gestureHandlerCommon';\n\ntype ForceTouchGestureChangeEventPayload = {\n forceChange: number;\n};\n\nfunction changeEventCalculator(\n current: GestureUpdateEvent<ForceTouchGestureHandlerEventPayload>,\n previous?: GestureUpdateEvent<ForceTouchGestureHandlerEventPayload>\n) {\n 'worklet';\n let changePayload: ForceTouchGestureChangeEventPayload;\n if (previous === undefined) {\n changePayload = {\n forceChange: current.force,\n };\n } else {\n changePayload = {\n forceChange: current.force - previous.force,\n };\n }\n\n return { ...current, ...changePayload };\n}\n\nexport class ForceTouchGesture extends ContinousBaseGesture<\n ForceTouchGestureHandlerEventPayload,\n ForceTouchGestureChangeEventPayload\n> {\n public config: BaseGestureConfig & ForceTouchGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'ForceTouchGestureHandler';\n }\n\n minForce(force: number) {\n this.config.minForce = force;\n return this;\n }\n\n maxForce(force: number) {\n this.config.maxForce = force;\n return this;\n }\n\n feedbackOnActivation(value: boolean) {\n this.config.feedbackOnActivation = value;\n return this;\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent<\n GestureUpdateEvent<\n ForceTouchGestureHandlerEventPayload &\n ForceTouchGestureChangeEventPayload\n >\n >\n ) => void\n ) {\n // @ts-ignore TS being overprotective, ForceTouchGestureHandlerEventPayload is Record\n this.handlers.changeEventCalculator = changeEventCalculator;\n return super.onChange(callback);\n }\n}\n\nexport type ForceTouchGestureType = InstanceType<typeof ForceTouchGesture>;\n"]}
@@ -14,11 +14,13 @@ const CALLBACK_TYPE = {
14
14
  BEGAN: 1,
15
15
  START: 2,
16
16
  UPDATE: 3,
17
- END: 4,
18
- TOUCHES_DOWN: 5,
19
- TOUCHES_MOVE: 6,
20
- TOUCHES_UP: 7,
21
- TOUCHES_CANCELLED: 8
17
+ CHANGE: 4,
18
+ END: 5,
19
+ FINALIZE: 6,
20
+ TOUCHES_DOWN: 7,
21
+ TOUCHES_MOVE: 8,
22
+ TOUCHES_UP: 9,
23
+ TOUCHES_CANCELLED: 10
22
24
  }; // Allow using CALLBACK_TYPE as object and type
23
25
  // eslint-disable-next-line @typescript-eslint/no-redeclare
24
26
 
@@ -52,7 +54,8 @@ class BaseGesture extends Gesture {
52
54
  withRef(ref) {
53
55
  this.config.ref = ref;
54
56
  return this;
55
- }
57
+ } // eslint-disable-next-line @typescript-eslint/ban-types
58
+
56
59
 
57
60
  isWorklet(callback) {
58
61
  //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false
@@ -78,6 +81,13 @@ class BaseGesture extends Gesture {
78
81
  return this;
79
82
  }
80
83
 
84
+ onFinalize(callback) {
85
+ this.handlers.onFinalize = callback; //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false
86
+
87
+ this.handlers.isWorklet[CALLBACK_TYPE.FINALIZE] = this.isWorklet(callback);
88
+ return this;
89
+ }
90
+
81
91
  onTouchesDown(callback) {
82
92
  this.config.needsPointerData = true;
83
93
  this.handlers.onTouchesDown = callback;
@@ -166,6 +176,12 @@ class ContinousBaseGesture extends BaseGesture {
166
176
  return this;
167
177
  }
168
178
 
179
+ onChange(callback) {
180
+ this.handlers.onChange = callback;
181
+ this.handlers.isWorklet[CALLBACK_TYPE.CHANGE] = this.isWorklet(callback);
182
+ return this;
183
+ }
184
+
169
185
  manualActivation(manualActivation) {
170
186
  this.config.manualActivation = manualActivation;
171
187
  return this;