react-native-gesture-handler 2.4.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. package/README.md +3 -2
  2. package/android/build.gradle +28 -4
  3. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +9 -5
  4. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +6 -1
  5. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +103 -22
  6. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +29 -2
  7. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +74 -84
  8. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +4 -0
  9. package/android/src/main/jni/Android.mk +1 -2
  10. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +12 -9
  11. package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +1 -0
  12. package/ios/Handlers/RNFlingHandler.m +43 -1
  13. package/ios/Handlers/{RNNativeViewHandler.m → RNNativeViewHandler.mm} +13 -1
  14. package/ios/Handlers/RNPanHandler.m +27 -0
  15. package/ios/RNGestureHandler.h +1 -0
  16. package/ios/RNGestureHandler.m +22 -4
  17. package/ios/RNGestureHandlerManager.mm +10 -2
  18. package/ios/RNGestureHandlerModule.mm +4 -1
  19. package/ios/RNManualActivationRecognizer.m +10 -3
  20. package/ios/RNRootViewGestureRecognizer.m +12 -1
  21. package/lib/commonjs/RNGestureHandlerModule.macos.js +81 -0
  22. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -0
  23. package/lib/commonjs/components/DrawerLayout.js +38 -11
  24. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  25. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  26. package/lib/commonjs/components/touchables/GenericTouchable.js +4 -1
  27. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  28. package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  29. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +2 -1
  30. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
  31. package/lib/commonjs/handlers/PanGestureHandler.js +1 -1
  32. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
  33. package/lib/commonjs/handlers/PressabilityDebugView.js +14 -0
  34. package/lib/commonjs/handlers/PressabilityDebugView.js.map +1 -0
  35. package/lib/commonjs/handlers/PressabilityDebugView.web.js +12 -0
  36. package/lib/commonjs/handlers/PressabilityDebugView.web.js.map +1 -0
  37. package/lib/commonjs/handlers/createHandler.js +25 -11
  38. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  39. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  40. package/lib/commonjs/handlers/gestures/GestureDetector.js +83 -63
  41. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  42. package/lib/commonjs/handlers/gestures/gesture.js +13 -2
  43. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  44. package/lib/commonjs/handlers/gestures/gestureStateManager.js +13 -9
  45. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
  46. package/lib/commonjs/handlers/gestures/panGesture.js +5 -0
  47. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  48. package/lib/commonjs/mocks.js +2 -0
  49. package/lib/commonjs/mocks.js.map +1 -1
  50. package/lib/commonjs/utils.js +6 -3
  51. package/lib/commonjs/utils.js.map +1 -1
  52. package/lib/commonjs/web/utils.js.map +1 -1
  53. package/lib/module/RNGestureHandlerModule.macos.js +57 -0
  54. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -0
  55. package/lib/module/components/DrawerLayout.js +38 -11
  56. package/lib/module/components/DrawerLayout.js.map +1 -1
  57. package/lib/module/components/GestureButtons.js.map +1 -1
  58. package/lib/module/components/touchables/GenericTouchable.js +4 -1
  59. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  60. package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  61. package/lib/module/handlers/ForceTouchGestureHandler.js +1 -1
  62. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
  63. package/lib/module/handlers/PanGestureHandler.js +1 -1
  64. package/lib/module/handlers/PanGestureHandler.js.map +1 -1
  65. package/lib/module/handlers/PressabilityDebugView.js +3 -0
  66. package/lib/module/handlers/PressabilityDebugView.js.map +1 -0
  67. package/lib/module/handlers/PressabilityDebugView.web.js +5 -0
  68. package/lib/module/handlers/PressabilityDebugView.web.js.map +1 -0
  69. package/lib/module/handlers/createHandler.js +26 -12
  70. package/lib/module/handlers/createHandler.js.map +1 -1
  71. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  72. package/lib/module/handlers/gestures/GestureDetector.js +83 -63
  73. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  74. package/lib/module/handlers/gestures/gesture.js +13 -2
  75. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  76. package/lib/module/handlers/gestures/gestureStateManager.js +13 -9
  77. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  78. package/lib/module/handlers/gestures/panGesture.js +5 -0
  79. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  80. package/lib/module/mocks.js +2 -0
  81. package/lib/module/mocks.js.map +1 -1
  82. package/lib/module/utils.js +2 -1
  83. package/lib/module/utils.js.map +1 -1
  84. package/lib/module/web/utils.js.map +1 -1
  85. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +34 -0
  86. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  87. package/lib/typescript/components/DrawerLayout.d.ts +3 -0
  88. package/lib/typescript/components/GestureButtons.d.ts +6 -0
  89. package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +1 -0
  90. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -2
  91. package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -1
  92. package/lib/typescript/handlers/PressabilityDebugView.d.ts +1 -0
  93. package/lib/typescript/handlers/PressabilityDebugView.web.d.ts +1 -0
  94. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +1 -0
  95. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -1
  96. package/lib/typescript/handlers/gestures/gesture.d.ts +3 -0
  97. package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -0
  98. package/lib/typescript/mocks.d.ts +1 -0
  99. package/lib/typescript/web/NodeManager.d.ts +2 -2
  100. package/package.json +1 -1
  101. package/src/RNGestureHandlerModule.macos.ts +62 -0
  102. package/src/components/DrawerLayout.tsx +34 -10
  103. package/src/components/GestureButtons.tsx +7 -0
  104. package/src/components/touchables/GenericTouchable.tsx +1 -0
  105. package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +1 -0
  106. package/src/handlers/ForceTouchGestureHandler.ts +3 -2
  107. package/src/handlers/PanGestureHandler.ts +2 -0
  108. package/src/handlers/PressabilityDebugView.tsx +2 -0
  109. package/src/handlers/PressabilityDebugView.web.tsx +4 -0
  110. package/src/handlers/{createHandler.ts → createHandler.tsx} +32 -17
  111. package/src/handlers/gestureHandlerCommon.ts +2 -0
  112. package/src/handlers/gestures/GestureDetector.tsx +107 -81
  113. package/src/handlers/gestures/gesture.ts +16 -0
  114. package/src/handlers/gestures/gestureStateManager.ts +13 -8
  115. package/src/handlers/gestures/panGesture.ts +5 -0
  116. package/src/mocks.ts +2 -0
  117. package/src/utils.ts +3 -1
  118. package/src/web/utils.ts +1 -1
  119. package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  120. package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
@@ -167,8 +167,28 @@ function updateHandlers(preparedGesture, gestureConfig, gesture) {
167
167
  }
168
168
 
169
169
  if (preparedGesture.animatedHandlers) {
170
- preparedGesture.animatedHandlers.value = preparedGesture.config.filter(g => g.shouldUseReanimated) // ignore gestures that shouldn't run on UI
171
- .map(g => g.handlers);
170
+ var _preparedGesture$anim;
171
+
172
+ const previousHandlersValue = (_preparedGesture$anim = preparedGesture.animatedHandlers.value) !== null && _preparedGesture$anim !== void 0 ? _preparedGesture$anim : [];
173
+ const newHandlersValue = preparedGesture.config.filter(g => g.shouldUseReanimated) // ignore gestures that shouldn't run on UI
174
+ .map(g => g.handlers); // if amount of gesture configs changes, we need to update the callbacks in shared value
175
+
176
+ let shouldUpdateSharedValue = previousHandlersValue.length !== newHandlersValue.length;
177
+
178
+ if (!shouldUpdateSharedValue) {
179
+ // if the amount is the same, we need to check if any of the configs inside has changed
180
+ for (let i = 0; i < newHandlersValue.length; i++) {
181
+ if ( // we can use the `gestureId` prop as it's unique for every config instance
182
+ newHandlersValue[i].gestureId !== previousHandlersValue[i].gestureId) {
183
+ shouldUpdateSharedValue = true;
184
+ break;
185
+ }
186
+ }
187
+ }
188
+
189
+ if (shouldUpdateSharedValue) {
190
+ preparedGesture.animatedHandlers.value = newHandlersValue;
191
+ }
172
192
  }
173
193
 
174
194
  scheduleFlushOperations();
@@ -189,91 +209,91 @@ function needsToReattach(preparedGesture, gesture) {
189
209
  return false;
190
210
  }
191
211
 
192
- function useAnimatedGesture(preparedGesture, needsRebuild) {
193
- if (!Reanimated) {
194
- return;
195
- }
196
-
197
- function isStateChangeEvent(event) {
198
- 'worklet'; // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point
212
+ function isStateChangeEvent(event) {
213
+ 'worklet'; // @ts-ignore Yes, the oldState prop is missing on GestureTouchEvent, that's the point
199
214
 
200
- return event.oldState != null;
201
- }
215
+ return event.oldState != null;
216
+ }
202
217
 
203
- function isTouchEvent(event) {
204
- 'worklet';
218
+ function isTouchEvent(event) {
219
+ 'worklet';
205
220
 
206
- return event.eventType != null;
207
- }
221
+ return event.eventType != null;
222
+ }
208
223
 
209
- function getHandler(type, gesture) {
210
- 'worklet';
224
+ function getHandler(type, gesture) {
225
+ 'worklet';
211
226
 
212
- switch (type) {
213
- case CALLBACK_TYPE.BEGAN:
214
- return gesture.onBegin;
227
+ switch (type) {
228
+ case CALLBACK_TYPE.BEGAN:
229
+ return gesture.onBegin;
215
230
 
216
- case CALLBACK_TYPE.START:
217
- return gesture.onStart;
231
+ case CALLBACK_TYPE.START:
232
+ return gesture.onStart;
218
233
 
219
- case CALLBACK_TYPE.UPDATE:
220
- return gesture.onUpdate;
234
+ case CALLBACK_TYPE.UPDATE:
235
+ return gesture.onUpdate;
221
236
 
222
- case CALLBACK_TYPE.CHANGE:
223
- return gesture.onChange;
237
+ case CALLBACK_TYPE.CHANGE:
238
+ return gesture.onChange;
224
239
 
225
- case CALLBACK_TYPE.END:
226
- return gesture.onEnd;
240
+ case CALLBACK_TYPE.END:
241
+ return gesture.onEnd;
227
242
 
228
- case CALLBACK_TYPE.FINALIZE:
229
- return gesture.onFinalize;
243
+ case CALLBACK_TYPE.FINALIZE:
244
+ return gesture.onFinalize;
230
245
 
231
- case CALLBACK_TYPE.TOUCHES_DOWN:
232
- return gesture.onTouchesDown;
246
+ case CALLBACK_TYPE.TOUCHES_DOWN:
247
+ return gesture.onTouchesDown;
233
248
 
234
- case CALLBACK_TYPE.TOUCHES_MOVE:
235
- return gesture.onTouchesMove;
249
+ case CALLBACK_TYPE.TOUCHES_MOVE:
250
+ return gesture.onTouchesMove;
236
251
 
237
- case CALLBACK_TYPE.TOUCHES_UP:
238
- return gesture.onTouchesUp;
252
+ case CALLBACK_TYPE.TOUCHES_UP:
253
+ return gesture.onTouchesUp;
239
254
 
240
- case CALLBACK_TYPE.TOUCHES_CANCELLED:
241
- return gesture.onTouchesCancelled;
242
- }
255
+ case CALLBACK_TYPE.TOUCHES_CANCELLED:
256
+ return gesture.onTouchesCancelled;
243
257
  }
258
+ }
244
259
 
245
- function touchEventTypeToCallbackType(eventType) {
246
- 'worklet';
247
-
248
- switch (eventType) {
249
- case TouchEventType.TOUCHES_DOWN:
250
- return CALLBACK_TYPE.TOUCHES_DOWN;
260
+ function touchEventTypeToCallbackType(eventType) {
261
+ 'worklet';
251
262
 
252
- case TouchEventType.TOUCHES_MOVE:
253
- return CALLBACK_TYPE.TOUCHES_MOVE;
263
+ switch (eventType) {
264
+ case TouchEventType.TOUCHES_DOWN:
265
+ return CALLBACK_TYPE.TOUCHES_DOWN;
254
266
 
255
- case TouchEventType.TOUCHES_UP:
256
- return CALLBACK_TYPE.TOUCHES_UP;
267
+ case TouchEventType.TOUCHES_MOVE:
268
+ return CALLBACK_TYPE.TOUCHES_MOVE;
257
269
 
258
- case TouchEventType.TOUCHES_CANCELLED:
259
- return CALLBACK_TYPE.TOUCHES_CANCELLED;
260
- }
270
+ case TouchEventType.TOUCHES_UP:
271
+ return CALLBACK_TYPE.TOUCHES_UP;
261
272
 
262
- return CALLBACK_TYPE.UNDEFINED;
273
+ case TouchEventType.TOUCHES_CANCELLED:
274
+ return CALLBACK_TYPE.TOUCHES_CANCELLED;
263
275
  }
264
276
 
265
- function runWorklet(type, gesture, event, ...args) {
266
- 'worklet';
277
+ return CALLBACK_TYPE.UNDEFINED;
278
+ }
267
279
 
268
- const handler = getHandler(type, gesture);
280
+ function runWorklet(type, gesture, event, ...args) {
281
+ 'worklet';
269
282
 
270
- if (gesture.isWorklet[type]) {
271
- // @ts-ignore Logic below makes sure the correct event is send to the
272
- // correct handler.
273
- handler === null || handler === void 0 ? void 0 : handler(event, ...args);
274
- } else if (handler) {
275
- console.warn(tagMessage('Animated gesture callback must be a worklet'));
276
- }
283
+ const handler = getHandler(type, gesture);
284
+
285
+ if (gesture.isWorklet[type]) {
286
+ // @ts-ignore Logic below makes sure the correct event is send to the
287
+ // correct handler.
288
+ handler === null || handler === void 0 ? void 0 : handler(event, ...args);
289
+ } else if (handler) {
290
+ console.warn(tagMessage('Animated gesture callback must be a worklet'));
291
+ }
292
+ }
293
+
294
+ function useAnimatedGesture(preparedGesture, needsRebuild) {
295
+ if (!Reanimated) {
296
+ return;
277
297
  } // Hooks are called conditionally, but the condition is whether the
278
298
  // react-native-reanimated is installed, which shouldn't change while running
279
299
  // eslint-disable-next-line react-hooks/rules-of-hooks
@@ -1 +1 @@
1
- {"version":3,"sources":["GestureDetector.tsx"],"names":["React","useEffect","useRef","BaseGesture","CALLBACK_TYPE","Reanimated","registerHandler","unregisterHandler","RNGestureHandlerModule","baseGestureHandlerWithMonitorProps","filterConfig","findNodeHandle","scheduleFlushOperations","GestureStateManager","flingGestureHandlerProps","forceTouchGestureHandlerProps","longPressGestureHandlerProps","panGestureHandlerProps","panGestureHandlerCustomNativeProps","tapGestureHandlerProps","State","TouchEventType","ActionType","isFabric","tagMessage","getShadowNodeFromRef","Platform","onGestureHandlerEvent","ALLOWED_PROPS","convertToHandlerTag","ref","handlerTag","current","extractValidHandlerTags","interactionGroup","map","filter","tag","dropHandlers","preparedGesture","handler","config","dropGestureHandler","testId","checkGestureCallbacksForWorklets","gesture","runOnJS","areSomeNotWorklets","handlers","isWorklet","includes","areSomeWorklets","console","error","attachHandlers","gestureConfig","viewTag","webEventHandlersRef","firstExecution","initialize","setImmediate","prepare","createGestureHandler","handlerName","requireToFail","simultaneousWith","updateGestureHandler","simultaneousHandlers","waitFor","actionType","shouldUseReanimated","REANIMATED_WORKLET","JS_FUNCTION_NEW_API","OS","attachGestureHandler","JS_FUNCTION_OLD_API","animatedHandlers","isAnimatedGesture","g","value","updateHandlers","i","length","needsToReattach","useAnimatedGesture","needsRebuild","isStateChangeEvent","event","oldState","isTouchEvent","eventType","getHandler","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","UNDEFINED","runWorklet","args","warn","sharedHandlersCallbacks","useSharedValue","lastUpdateEvent","stateControllers","callback","currentCallback","UNDETERMINED","state","ACTIVE","undefined","FAILED","CANCELLED","create","changeEventCalculator","useEvent","animatedEventHandler","GestureDetector","props","toGestureArray","useReanimatedHook","some","viewRef","firstRenderRef","e","nativeEvent","Error","needsToRebuildReanimatedEvent","refFunction","node","global","isFormsStackingContext","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 HandlerStateChangeEvent,\n scheduleFlushOperations,\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 { TouchEventType } from '../../TouchEventType';\nimport { ComposedGesture } from './gestureComposition';\nimport { ActionType } from '../../ActionType';\nimport { isFabric, tagMessage } from '../../utils';\nimport { getShadowNodeFromRef } from '../../getShadowNodeFromRef';\nimport { Platform } from 'react-native';\nimport type RNGestureHandlerModuleWeb from '../../RNGestureHandlerModule.web';\nimport { onGestureHandlerEvent } from './eventReceiver';\n\ndeclare const global: {\n isFormsStackingContext: (node: unknown) => boolean | null; // JSI function\n};\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 useReanimatedHook: 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, handler.config.testId);\n }\n\n scheduleFlushOperations();\n}\n\nfunction checkGestureCallbacksForWorklets(gesture: GestureType) {\n // if a gesture is explicitly marked to run on the JS thread there is no need to check\n // if callbacks are worklets as the user is aware they will be ran on the JS thread\n if (gesture.config.runOnJS) {\n return;\n }\n\n const areSomeNotWorklets = gesture.handlers.isWorklet.includes(false);\n const areSomeWorklets = gesture.handlers.isWorklet.includes(true);\n\n // if some of the callbacks are worklets and some are not, and the gesture is not\n // explicitly marked with `.runOnJS(true)` show an error\n if (areSomeNotWorklets && areSomeWorklets) {\n console.error(\n tagMessage(\n `Some of the callbacks in the gesture are worklets and some are not. Either make sure that all calbacks are marked as 'worklet' if you wish to run them on the UI thread or use '.runOnJS(true)' modifier on the gesture explicitly to run all callbacks on the JS thread.`\n )\n );\n }\n}\n\ninterface WebEventHandler {\n onGestureHandlerEvent: (event: HandlerStateChangeEvent<unknown>) => void;\n}\n\ninterface AttachHandlersConfig {\n preparedGesture: GestureConfigReference;\n gestureConfig: ComposedGesture | GestureType | undefined;\n gesture: GestureType[];\n viewTag: number;\n webEventHandlersRef: React.RefObject<WebEventHandler>;\n}\n\nfunction attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n webEventHandlersRef,\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 checkGestureCallbacksForWorklets(handler);\n\n RNGestureHandlerModule.createGestureHandler(\n handler.handlerName,\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS)\n );\n\n registerHandler(handler.handlerTag, handler, handler.config.testId);\n }\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n for (const handler of gesture) {\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 scheduleFlushOperations();\n });\n\n preparedGesture.config = gesture;\n\n for (const gesture of preparedGesture.config) {\n const actionType = gesture.shouldUseReanimated\n ? ActionType.REANIMATED_WORKLET\n : ActionType.JS_FUNCTION_NEW_API;\n\n if (Platform.OS === 'web') {\n (RNGestureHandlerModule.attachGestureHandler as typeof RNGestureHandlerModuleWeb.attachGestureHandler)(\n gesture.handlerTag,\n viewTag,\n ActionType.JS_FUNCTION_OLD_API, // ignored on web\n webEventHandlersRef\n );\n } else {\n RNGestureHandlerModule.attachGestureHandler(\n gesture.handlerTag,\n viewTag,\n actionType\n );\n }\n }\n\n if (preparedGesture.animatedHandlers) {\n const isAnimatedGesture = (g: GestureType) => g.shouldUseReanimated;\n\n preparedGesture.animatedHandlers.value = (gesture\n .filter(isAnimatedGesture)\n .map((g) => g.handlers) as unknown) as HandlerCallbacks<\n Record<string, unknown>\n >[];\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 checkGestureCallbacksForWorklets(handler);\n\n // only update handlerTag when it's actually different, it may be the same\n // if gesture config object is wrapped with useMemo\n if (gesture[i].handlerTag !== handler.handlerTag) {\n gesture[i].handlerTag = handler.handlerTag;\n gesture[i].handlers.handlerTag = handler.handlerTag;\n }\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\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, handler.config.testId);\n }\n\n if (preparedGesture.animatedHandlers) {\n preparedGesture.animatedHandlers.value = (preparedGesture.config\n .filter((g) => g.shouldUseReanimated) // ignore gestures that shouldn't run on UI\n .map((g) => g.handlers) as unknown) as HandlerCallbacks<\n Record<string, unknown>\n >[];\n }\n\n scheduleFlushOperations();\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 (\n gesture[i].handlerName !== preparedGesture.config[i].handlerName ||\n gesture[i].shouldUseReanimated !==\n preparedGesture.config[i].shouldUseReanimated\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction useAnimatedGesture(\n preparedGesture: GestureConfigReference,\n needsRebuild: boolean\n) {\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(\n eventType: TouchEventType\n ): CALLBACK_TYPE {\n 'worklet';\n switch (eventType) {\n case TouchEventType.TOUCHES_DOWN:\n return CALLBACK_TYPE.TOUCHES_DOWN;\n case TouchEventType.TOUCHES_MOVE:\n return CALLBACK_TYPE.TOUCHES_MOVE;\n case TouchEventType.TOUCHES_UP:\n return CALLBACK_TYPE.TOUCHES_UP;\n case TouchEventType.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(tagMessage('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 !== TouchEventType.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 needsRebuild\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 useReanimatedHook = gesture.some((g) => g.shouldUseReanimated);\n const viewRef = useRef(null);\n const firstRenderRef = useRef(true);\n const webEventHandlersRef = useRef<WebEventHandler>({\n onGestureHandlerEvent: (e: HandlerStateChangeEvent<unknown>) => {\n onGestureHandlerEvent(e.nativeEvent);\n },\n });\n\n const preparedGesture = React.useRef<GestureConfigReference>({\n config: gesture,\n animatedEventHandler: null,\n animatedHandlers: null,\n firstExecution: true,\n useReanimatedHook: useReanimatedHook,\n }).current;\n\n if (useReanimatedHook !== preparedGesture.useReanimatedHook) {\n throw new Error(\n tagMessage(\n 'You cannot change the thread the callbacks are ran on while the app is running'\n )\n );\n }\n\n // Reanimated event should be rebuilt only when gestures are reattached, otherwise\n // config update will be enough as all necessary items are stored in shared values anyway\n const needsToRebuildReanimatedEvent =\n preparedGesture.firstExecution || needsToReattach(preparedGesture, gesture);\n\n if (preparedGesture.firstExecution) {\n gestureConfig?.initialize?.();\n }\n\n if (useReanimatedHook) {\n // Whether animatedGesture or gesture is used shouldn't change while the app is running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useAnimatedGesture(preparedGesture, needsToRebuildReanimatedEvent);\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 webEventHandlersRef,\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 webEventHandlersRef,\n });\n } else {\n updateHandlers(preparedGesture, gestureConfig, gesture);\n }\n } else {\n firstRenderRef.current = false;\n }\n }, [props]);\n\n const refFunction = (ref: unknown) => {\n if (ref !== null) {\n //@ts-ignore Just setting the ref\n viewRef.current = ref;\n\n if (isFabric()) {\n const node = getShadowNodeFromRef(ref);\n if (global.isFormsStackingContext(node) === false) {\n console.error(\n tagMessage(\n 'GestureDetector has received a child that may get view-flattened. ' +\n '\\nTo prevent it from misbehaving you need to wrap the child with a `<View collapsable={false}>`.'\n )\n );\n }\n }\n }\n };\n\n if (useReanimatedHook) {\n return (\n <AnimatedWrap\n ref={refFunction}\n onGestureHandlerEvent={preparedGesture.animatedEventHandler}>\n {props.children}\n </AnimatedWrap>\n );\n } else {\n return <Wrap ref={refFunction}>{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 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":["React","useEffect","useRef","BaseGesture","CALLBACK_TYPE","Reanimated","registerHandler","unregisterHandler","RNGestureHandlerModule","baseGestureHandlerWithMonitorProps","filterConfig","findNodeHandle","scheduleFlushOperations","GestureStateManager","flingGestureHandlerProps","forceTouchGestureHandlerProps","longPressGestureHandlerProps","panGestureHandlerProps","panGestureHandlerCustomNativeProps","tapGestureHandlerProps","State","TouchEventType","ActionType","isFabric","tagMessage","getShadowNodeFromRef","Platform","onGestureHandlerEvent","ALLOWED_PROPS","convertToHandlerTag","ref","handlerTag","current","extractValidHandlerTags","interactionGroup","map","filter","tag","dropHandlers","preparedGesture","handler","config","dropGestureHandler","testId","checkGestureCallbacksForWorklets","gesture","runOnJS","areSomeNotWorklets","handlers","isWorklet","includes","areSomeWorklets","console","error","attachHandlers","gestureConfig","viewTag","webEventHandlersRef","firstExecution","initialize","setImmediate","prepare","createGestureHandler","handlerName","requireToFail","simultaneousWith","updateGestureHandler","simultaneousHandlers","waitFor","actionType","shouldUseReanimated","REANIMATED_WORKLET","JS_FUNCTION_NEW_API","OS","attachGestureHandler","JS_FUNCTION_OLD_API","animatedHandlers","isAnimatedGesture","g","value","updateHandlers","i","length","previousHandlersValue","newHandlersValue","shouldUpdateSharedValue","gestureId","needsToReattach","isStateChangeEvent","event","oldState","isTouchEvent","eventType","getHandler","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","UNDEFINED","runWorklet","args","warn","useAnimatedGesture","needsRebuild","sharedHandlersCallbacks","useSharedValue","lastUpdateEvent","stateControllers","callback","currentCallback","UNDETERMINED","state","ACTIVE","undefined","FAILED","CANCELLED","create","changeEventCalculator","useEvent","animatedEventHandler","GestureDetector","props","toGestureArray","useReanimatedHook","some","viewRef","firstRenderRef","e","nativeEvent","Error","needsToRebuildReanimatedEvent","refFunction","node","global","isFormsStackingContext","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 HandlerStateChangeEvent,\n scheduleFlushOperations,\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 { TouchEventType } from '../../TouchEventType';\nimport { ComposedGesture } from './gestureComposition';\nimport { ActionType } from '../../ActionType';\nimport { isFabric, tagMessage } from '../../utils';\nimport { getShadowNodeFromRef } from '../../getShadowNodeFromRef';\nimport { Platform } from 'react-native';\nimport type RNGestureHandlerModuleWeb from '../../RNGestureHandlerModule.web';\nimport { onGestureHandlerEvent } from './eventReceiver';\n\ndeclare const global: {\n isFormsStackingContext: (node: unknown) => boolean | null; // JSI function\n};\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 useReanimatedHook: 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, handler.config.testId);\n }\n\n scheduleFlushOperations();\n}\n\nfunction checkGestureCallbacksForWorklets(gesture: GestureType) {\n // if a gesture is explicitly marked to run on the JS thread there is no need to check\n // if callbacks are worklets as the user is aware they will be ran on the JS thread\n if (gesture.config.runOnJS) {\n return;\n }\n\n const areSomeNotWorklets = gesture.handlers.isWorklet.includes(false);\n const areSomeWorklets = gesture.handlers.isWorklet.includes(true);\n\n // if some of the callbacks are worklets and some are not, and the gesture is not\n // explicitly marked with `.runOnJS(true)` show an error\n if (areSomeNotWorklets && areSomeWorklets) {\n console.error(\n tagMessage(\n `Some of the callbacks in the gesture are worklets and some are not. Either make sure that all calbacks are marked as 'worklet' if you wish to run them on the UI thread or use '.runOnJS(true)' modifier on the gesture explicitly to run all callbacks on the JS thread.`\n )\n );\n }\n}\n\ninterface WebEventHandler {\n onGestureHandlerEvent: (event: HandlerStateChangeEvent<unknown>) => void;\n}\n\ninterface AttachHandlersConfig {\n preparedGesture: GestureConfigReference;\n gestureConfig: ComposedGesture | GestureType | undefined;\n gesture: GestureType[];\n viewTag: number;\n webEventHandlersRef: React.RefObject<WebEventHandler>;\n}\n\nfunction attachHandlers({\n preparedGesture,\n gestureConfig,\n gesture,\n viewTag,\n webEventHandlersRef,\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 checkGestureCallbacksForWorklets(handler);\n\n RNGestureHandlerModule.createGestureHandler(\n handler.handlerName,\n handler.handlerTag,\n filterConfig(handler.config, ALLOWED_PROPS)\n );\n\n registerHandler(handler.handlerTag, handler, handler.config.testId);\n }\n\n // use setImmediate to extract handlerTags, because all refs should be initialized\n // when it's ran\n setImmediate(() => {\n for (const handler of gesture) {\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 scheduleFlushOperations();\n });\n\n preparedGesture.config = gesture;\n\n for (const gesture of preparedGesture.config) {\n const actionType = gesture.shouldUseReanimated\n ? ActionType.REANIMATED_WORKLET\n : ActionType.JS_FUNCTION_NEW_API;\n\n if (Platform.OS === 'web') {\n (RNGestureHandlerModule.attachGestureHandler as typeof RNGestureHandlerModuleWeb.attachGestureHandler)(\n gesture.handlerTag,\n viewTag,\n ActionType.JS_FUNCTION_OLD_API, // ignored on web\n webEventHandlersRef\n );\n } else {\n RNGestureHandlerModule.attachGestureHandler(\n gesture.handlerTag,\n viewTag,\n actionType\n );\n }\n }\n\n if (preparedGesture.animatedHandlers) {\n const isAnimatedGesture = (g: GestureType) => g.shouldUseReanimated;\n\n preparedGesture.animatedHandlers.value = (gesture\n .filter(isAnimatedGesture)\n .map((g) => g.handlers) as unknown) as HandlerCallbacks<\n Record<string, unknown>\n >[];\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 checkGestureCallbacksForWorklets(handler);\n\n // only update handlerTag when it's actually different, it may be the same\n // if gesture config object is wrapped with useMemo\n if (gesture[i].handlerTag !== handler.handlerTag) {\n gesture[i].handlerTag = handler.handlerTag;\n gesture[i].handlers.handlerTag = handler.handlerTag;\n }\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\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, handler.config.testId);\n }\n\n if (preparedGesture.animatedHandlers) {\n const previousHandlersValue =\n preparedGesture.animatedHandlers.value ?? [];\n const newHandlersValue = (preparedGesture.config\n .filter((g) => g.shouldUseReanimated) // ignore gestures that shouldn't run on UI\n .map((g) => g.handlers) as unknown) as HandlerCallbacks<\n Record<string, unknown>\n >[];\n\n // if amount of gesture configs changes, we need to update the callbacks in shared value\n let shouldUpdateSharedValue =\n previousHandlersValue.length !== newHandlersValue.length;\n\n if (!shouldUpdateSharedValue) {\n // if the amount is the same, we need to check if any of the configs inside has changed\n for (let i = 0; i < newHandlersValue.length; i++) {\n if (\n // we can use the `gestureId` prop as it's unique for every config instance\n newHandlersValue[i].gestureId !== previousHandlersValue[i].gestureId\n ) {\n shouldUpdateSharedValue = true;\n break;\n }\n }\n }\n\n if (shouldUpdateSharedValue) {\n preparedGesture.animatedHandlers.value = newHandlersValue;\n }\n }\n\n scheduleFlushOperations();\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 (\n gesture[i].handlerName !== preparedGesture.config[i].handlerName ||\n gesture[i].shouldUseReanimated !==\n preparedGesture.config[i].shouldUseReanimated\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction 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\nfunction isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureTouchEvent {\n 'worklet';\n return event.eventType != null;\n}\n\nfunction 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\nfunction touchEventTypeToCallbackType(\n eventType: TouchEventType\n): CALLBACK_TYPE {\n 'worklet';\n switch (eventType) {\n case TouchEventType.TOUCHES_DOWN:\n return CALLBACK_TYPE.TOUCHES_DOWN;\n case TouchEventType.TOUCHES_MOVE:\n return CALLBACK_TYPE.TOUCHES_MOVE;\n case TouchEventType.TOUCHES_UP:\n return CALLBACK_TYPE.TOUCHES_UP;\n case TouchEventType.TOUCHES_CANCELLED:\n return CALLBACK_TYPE.TOUCHES_CANCELLED;\n }\n return CALLBACK_TYPE.UNDEFINED;\n}\n\nfunction 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(tagMessage('Animated gesture callback must be a worklet'));\n }\n}\n\nfunction useAnimatedGesture(\n preparedGesture: GestureConfigReference,\n needsRebuild: boolean\n) {\n if (!Reanimated) {\n return;\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 !== TouchEventType.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 needsRebuild\n );\n\n preparedGesture.animatedEventHandler = event;\n preparedGesture.animatedHandlers = sharedHandlersCallbacks;\n}\n\ninterface GestureDetectorProps {\n gesture?: ComposedGesture | GestureType;\n children?: React.ReactNode;\n}\nexport const GestureDetector = (props: GestureDetectorProps) => {\n const gestureConfig = props.gesture;\n const gesture = gestureConfig?.toGestureArray?.() ?? [];\n const useReanimatedHook = gesture.some((g) => g.shouldUseReanimated);\n const viewRef = useRef(null);\n const firstRenderRef = useRef(true);\n const webEventHandlersRef = useRef<WebEventHandler>({\n onGestureHandlerEvent: (e: HandlerStateChangeEvent<unknown>) => {\n onGestureHandlerEvent(e.nativeEvent);\n },\n });\n\n const preparedGesture = React.useRef<GestureConfigReference>({\n config: gesture,\n animatedEventHandler: null,\n animatedHandlers: null,\n firstExecution: true,\n useReanimatedHook: useReanimatedHook,\n }).current;\n\n if (useReanimatedHook !== preparedGesture.useReanimatedHook) {\n throw new Error(\n tagMessage(\n 'You cannot change the thread the callbacks are ran on while the app is running'\n )\n );\n }\n\n // Reanimated event should be rebuilt only when gestures are reattached, otherwise\n // config update will be enough as all necessary items are stored in shared values anyway\n const needsToRebuildReanimatedEvent =\n preparedGesture.firstExecution || needsToReattach(preparedGesture, gesture);\n\n if (preparedGesture.firstExecution) {\n gestureConfig?.initialize?.();\n }\n\n if (useReanimatedHook) {\n // Whether animatedGesture or gesture is used shouldn't change while the app is running\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useAnimatedGesture(preparedGesture, needsToRebuildReanimatedEvent);\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 webEventHandlersRef,\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 webEventHandlersRef,\n });\n } else {\n updateHandlers(preparedGesture, gestureConfig, gesture);\n }\n } else {\n firstRenderRef.current = false;\n }\n }, [props]);\n\n const refFunction = (ref: unknown) => {\n if (ref !== null) {\n //@ts-ignore Just setting the ref\n viewRef.current = ref;\n\n if (isFabric()) {\n const node = getShadowNodeFromRef(ref);\n if (global.isFormsStackingContext(node) === false) {\n console.error(\n tagMessage(\n 'GestureDetector has received a child that may get view-flattened. ' +\n '\\nTo prevent it from misbehaving you need to wrap the child with a `<View collapsable={false}>`.'\n )\n );\n }\n }\n }\n };\n\n if (useReanimatedHook) {\n return (\n <AnimatedWrap\n ref={refFunction}\n onGestureHandlerEvent={preparedGesture.animatedEventHandler}>\n {props.children}\n </AnimatedWrap>\n );\n } else {\n return <Wrap ref={refFunction}>{props.children}</Wrap>;\n }\n};\n\nclass Wrap extends React.Component<{\n onGestureHandlerEvent?: unknown;\n // implicit `children` prop has been removed in @types/react^18.0.0\n children?: React.ReactNode;\n}> {\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 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"]}
@@ -18,9 +18,16 @@ export const CALLBACK_TYPE = {
18
18
  // eslint-disable-next-line @typescript-eslint/no-redeclare
19
19
 
20
20
  export class Gesture {}
21
+ let nextGestureId = 0;
21
22
  export class BaseGesture extends Gesture {
22
- constructor(...args) {
23
- super(...args);
23
+ constructor() {
24
+ super(); // Used to check whether the gesture config has been updated when wrapping it
25
+ // with `useMemo`. Since every config will have a unique id, when the dependencies
26
+ // don't change, the config won't be recreated and the id will stay the same.
27
+ // If the id is different, it means that the config has changed and the gesture
28
+ // needs to be updated.
29
+
30
+ _defineProperty(this, "gestureId", -1);
24
31
 
25
32
  _defineProperty(this, "handlerTag", -1);
26
33
 
@@ -29,9 +36,13 @@ export class BaseGesture extends Gesture {
29
36
  _defineProperty(this, "config", {});
30
37
 
31
38
  _defineProperty(this, "handlers", {
39
+ gestureId: -1,
32
40
  handlerTag: -1,
33
41
  isWorklet: []
34
42
  });
43
+
44
+ this.gestureId = nextGestureId++;
45
+ this.handlers.gestureId = this.gestureId;
35
46
  }
36
47
 
37
48
  addDependency(key, gesture) {
@@ -1 +1 @@
1
- {"version":3,"sources":["gesture.ts"],"names":["getNextHandlerTag","isRemoteDebuggingEnabled","CALLBACK_TYPE","UNDEFINED","BEGAN","START","UPDATE","CHANGE","END","FINALIZE","TOUCHES_DOWN","TOUCHES_MOVE","TOUCHES_UP","TOUCHES_CANCELLED","Gesture","BaseGesture","handlerTag","isWorklet","addDependency","key","gesture","value","config","Array","concat","withRef","ref","callback","__workletHash","undefined","onBegin","handlers","onStart","onEnd","onFinalize","onTouchesDown","needsPointerData","onTouchesMove","onTouchesUp","onTouchesCancelled","enabled","shouldCancelWhenOutside","hitSlop","runOnJS","simultaneousWithExternalGesture","gestures","requireExternalGestureToFail","withTestId","id","testId","cancelsTouchesInView","initialize","current","toGestureArray","prepare","shouldUseReanimated","includes","ContinousBaseGesture","onUpdate","onChange","manualActivation"],"mappings":"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","sourcesContent":["import { FlingGestureHandlerEventPayload } from '../FlingGestureHandler';\nimport { ForceTouchGestureHandlerEventPayload } from '../ForceTouchGestureHandler';\nimport {\n HitSlop,\n CommonGestureConfig,\n GestureTouchEvent,\n GestureStateChangeEvent,\n GestureUpdateEvent,\n} from '../gestureHandlerCommon';\nimport { getNextHandlerTag } from '../handlersRegistry';\nimport { GestureStateManagerType } from './gestureStateManager';\nimport { LongPressGestureHandlerEventPayload } from '../LongPressGestureHandler';\nimport { PanGestureHandlerEventPayload } from '../PanGestureHandler';\nimport { PinchGestureHandlerEventPayload } from '../PinchGestureHandler';\nimport { RotationGestureHandlerEventPayload } from '../RotationGestureHandler';\nimport { TapGestureHandlerEventPayload } from '../TapGestureHandler';\nimport { NativeViewGestureHandlerPayload } from '../NativeViewGestureHandler';\nimport { isRemoteDebuggingEnabled } from '../../utils';\n\nexport type GestureType =\n | BaseGesture<Record<string, unknown>>\n | BaseGesture<Record<string, never>>\n | BaseGesture<TapGestureHandlerEventPayload>\n | BaseGesture<PanGestureHandlerEventPayload>\n | BaseGesture<LongPressGestureHandlerEventPayload>\n | BaseGesture<RotationGestureHandlerEventPayload>\n | BaseGesture<PinchGestureHandlerEventPayload>\n | BaseGesture<FlingGestureHandlerEventPayload>\n | BaseGesture<ForceTouchGestureHandlerEventPayload>\n | BaseGesture<NativeViewGestureHandlerPayload>;\n\nexport type GestureRef =\n | number\n | GestureType\n | React.RefObject<GestureType | undefined>\n | React.RefObject<React.ComponentType | undefined>; // allow adding a ref to a gesture handler\nexport interface BaseGestureConfig\n extends CommonGestureConfig,\n Record<string, unknown> {\n ref?: React.MutableRefObject<GestureType | undefined>;\n requireToFail?: GestureRef[];\n simultaneousWith?: GestureRef[];\n needsPointerData?: boolean;\n manualActivation?: boolean;\n runOnJS?: boolean;\n testId?: string;\n cancelsTouchesInView?: boolean;\n}\n\ntype TouchEventHandlerType = (\n event: GestureTouchEvent,\n stateManager: GestureStateManagerType\n) => void;\n\nexport type HandlerCallbacks<EventPayloadT extends Record<string, unknown>> = {\n handlerTag: number;\n onBegin?: (event: GestureStateChangeEvent<EventPayloadT>) => void;\n onStart?: (event: GestureStateChangeEvent<EventPayloadT>) => void;\n onEnd?: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void;\n onFinalize?: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void;\n onUpdate?: (event: GestureUpdateEvent<EventPayloadT>) => void;\n onChange?: (event: any) => void;\n onTouchesDown?: TouchEventHandlerType;\n onTouchesMove?: TouchEventHandlerType;\n onTouchesUp?: TouchEventHandlerType;\n onTouchesCancelled?: TouchEventHandlerType;\n changeEventCalculator?: (\n current: GestureUpdateEvent<Record<string, unknown>>,\n previous?: GestureUpdateEvent<Record<string, unknown>>\n ) => GestureUpdateEvent<Record<string, unknown>>;\n isWorklet: boolean[];\n};\n\nexport const CALLBACK_TYPE = {\n UNDEFINED: 0,\n BEGAN: 1,\n START: 2,\n UPDATE: 3,\n CHANGE: 4,\n END: 5,\n FINALIZE: 6,\n TOUCHES_DOWN: 7,\n TOUCHES_MOVE: 8,\n TOUCHES_UP: 9,\n TOUCHES_CANCELLED: 10,\n} as const;\n\n// Allow using CALLBACK_TYPE as object and type\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type CALLBACK_TYPE = typeof CALLBACK_TYPE[keyof typeof CALLBACK_TYPE];\n\nexport abstract class Gesture {\n /**\n * Return array of gestures, providing the same interface for creating and updating\n * handlers, no matter which object was used to create gesture instance.\n */\n abstract toGestureArray(): GestureType[];\n\n /**\n * Assign handlerTag to the gesture instance and set ref.current (if a ref is set)\n */\n abstract initialize(): void;\n\n /**\n * Make sure that values of properties defining relations are arrays. Do any necessary\n * preprocessing required to configure relations between handlers. Called just before\n * updating the handler on the native side.\n */\n abstract prepare(): void;\n}\n\nexport abstract class BaseGesture<\n EventPayloadT extends Record<string, unknown>\n> extends Gesture {\n public handlerTag = -1;\n public handlerName = '';\n public config: BaseGestureConfig = {};\n public handlers: HandlerCallbacks<EventPayloadT> = {\n handlerTag: -1,\n isWorklet: [],\n };\n\n private addDependency(\n key: 'simultaneousWith' | 'requireToFail',\n gesture: Exclude<GestureRef, number>\n ) {\n const value = this.config[key];\n this.config[key] = value\n ? Array<GestureRef>().concat(value, gesture)\n : [gesture];\n }\n\n withRef(ref: React.MutableRefObject<GestureType | undefined>) {\n this.config.ref = ref;\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n protected isWorklet(callback: Function) {\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n return callback.__workletHash !== undefined;\n }\n\n onBegin(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void) {\n this.handlers.onBegin = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.BEGAN] = this.isWorklet(callback);\n return this;\n }\n\n onStart(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void) {\n this.handlers.onStart = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.START] = this.isWorklet(callback);\n return this;\n }\n\n onEnd(\n callback: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void\n ) {\n this.handlers.onEnd = callback;\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n this.handlers.isWorklet[CALLBACK_TYPE.END] = this.isWorklet(callback);\n return this;\n }\n\n onFinalize(\n callback: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void\n ) {\n this.handlers.onFinalize = callback;\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n this.handlers.isWorklet[CALLBACK_TYPE.FINALIZE] = this.isWorklet(callback);\n return this;\n }\n\n onTouchesDown(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesDown = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_DOWN] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesMove(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesMove = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_MOVE] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesUp(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesUp = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_UP] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesCancelled(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesCancelled = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_CANCELLED] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n enabled(enabled: boolean) {\n this.config.enabled = enabled;\n return this;\n }\n\n shouldCancelWhenOutside(value: boolean) {\n this.config.shouldCancelWhenOutside = value;\n return this;\n }\n\n hitSlop(hitSlop: HitSlop) {\n this.config.hitSlop = hitSlop;\n return this;\n }\n\n runOnJS(runOnJS: boolean) {\n this.config.runOnJS = runOnJS;\n return this;\n }\n\n simultaneousWithExternalGesture(...gestures: Exclude<GestureRef, number>[]) {\n for (const gesture of gestures) {\n this.addDependency('simultaneousWith', gesture);\n }\n return this;\n }\n\n requireExternalGestureToFail(...gestures: Exclude<GestureRef, number>[]) {\n for (const gesture of gestures) {\n this.addDependency('requireToFail', gesture);\n }\n return this;\n }\n\n withTestId(id: string) {\n this.config.testId = id;\n return this;\n }\n\n cancelsTouchesInView(value: boolean) {\n this.config.cancelsTouchesInView = value;\n return this;\n }\n\n initialize() {\n this.handlerTag = getNextHandlerTag();\n\n this.handlers = { ...this.handlers, handlerTag: this.handlerTag };\n\n if (this.config.ref) {\n this.config.ref.current = this as GestureType;\n }\n }\n\n toGestureArray(): GestureType[] {\n return [this as GestureType];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n prepare() {}\n\n get shouldUseReanimated(): boolean {\n // use Reanimated when runOnJS isn't set explicitly,\n // and all defined callbacks are worklets,\n // and remote debugging is disabled\n return (\n this.config.runOnJS !== true &&\n !this.handlers.isWorklet.includes(false) &&\n !isRemoteDebuggingEnabled()\n );\n }\n}\n\nexport abstract class ContinousBaseGesture<\n EventPayloadT extends Record<string, unknown>,\n EventChangePayloadT extends Record<string, unknown>\n> extends BaseGesture<EventPayloadT> {\n onUpdate(callback: (event: GestureUpdateEvent<EventPayloadT>) => void) {\n this.handlers.onUpdate = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.UPDATE] = this.isWorklet(callback);\n return this;\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent<EventPayloadT & EventChangePayloadT>\n ) => void\n ) {\n this.handlers.onChange = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.CHANGE] = this.isWorklet(callback);\n return this;\n }\n\n manualActivation(manualActivation: boolean) {\n this.config.manualActivation = manualActivation;\n return this;\n }\n}\n"]}
1
+ {"version":3,"sources":["gesture.ts"],"names":["getNextHandlerTag","isRemoteDebuggingEnabled","CALLBACK_TYPE","UNDEFINED","BEGAN","START","UPDATE","CHANGE","END","FINALIZE","TOUCHES_DOWN","TOUCHES_MOVE","TOUCHES_UP","TOUCHES_CANCELLED","Gesture","nextGestureId","BaseGesture","constructor","gestureId","handlerTag","isWorklet","handlers","addDependency","key","gesture","value","config","Array","concat","withRef","ref","callback","__workletHash","undefined","onBegin","onStart","onEnd","onFinalize","onTouchesDown","needsPointerData","onTouchesMove","onTouchesUp","onTouchesCancelled","enabled","shouldCancelWhenOutside","hitSlop","runOnJS","simultaneousWithExternalGesture","gestures","requireExternalGestureToFail","withTestId","id","testId","cancelsTouchesInView","initialize","current","toGestureArray","prepare","shouldUseReanimated","includes","ContinousBaseGesture","onUpdate","onChange","manualActivation"],"mappings":"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","sourcesContent":["import { FlingGestureHandlerEventPayload } from '../FlingGestureHandler';\nimport { ForceTouchGestureHandlerEventPayload } from '../ForceTouchGestureHandler';\nimport {\n HitSlop,\n CommonGestureConfig,\n GestureTouchEvent,\n GestureStateChangeEvent,\n GestureUpdateEvent,\n} from '../gestureHandlerCommon';\nimport { getNextHandlerTag } from '../handlersRegistry';\nimport { GestureStateManagerType } from './gestureStateManager';\nimport { LongPressGestureHandlerEventPayload } from '../LongPressGestureHandler';\nimport { PanGestureHandlerEventPayload } from '../PanGestureHandler';\nimport { PinchGestureHandlerEventPayload } from '../PinchGestureHandler';\nimport { RotationGestureHandlerEventPayload } from '../RotationGestureHandler';\nimport { TapGestureHandlerEventPayload } from '../TapGestureHandler';\nimport { NativeViewGestureHandlerPayload } from '../NativeViewGestureHandler';\nimport { isRemoteDebuggingEnabled } from '../../utils';\n\nexport type GestureType =\n | BaseGesture<Record<string, unknown>>\n | BaseGesture<Record<string, never>>\n | BaseGesture<TapGestureHandlerEventPayload>\n | BaseGesture<PanGestureHandlerEventPayload>\n | BaseGesture<LongPressGestureHandlerEventPayload>\n | BaseGesture<RotationGestureHandlerEventPayload>\n | BaseGesture<PinchGestureHandlerEventPayload>\n | BaseGesture<FlingGestureHandlerEventPayload>\n | BaseGesture<ForceTouchGestureHandlerEventPayload>\n | BaseGesture<NativeViewGestureHandlerPayload>;\n\nexport type GestureRef =\n | number\n | GestureType\n | React.RefObject<GestureType | undefined>\n | React.RefObject<React.ComponentType | undefined>; // allow adding a ref to a gesture handler\nexport interface BaseGestureConfig\n extends CommonGestureConfig,\n Record<string, unknown> {\n ref?: React.MutableRefObject<GestureType | undefined>;\n requireToFail?: GestureRef[];\n simultaneousWith?: GestureRef[];\n needsPointerData?: boolean;\n manualActivation?: boolean;\n runOnJS?: boolean;\n testId?: string;\n cancelsTouchesInView?: boolean;\n}\n\ntype TouchEventHandlerType = (\n event: GestureTouchEvent,\n stateManager: GestureStateManagerType\n) => void;\n\nexport type HandlerCallbacks<EventPayloadT extends Record<string, unknown>> = {\n gestureId: number;\n handlerTag: number;\n onBegin?: (event: GestureStateChangeEvent<EventPayloadT>) => void;\n onStart?: (event: GestureStateChangeEvent<EventPayloadT>) => void;\n onEnd?: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void;\n onFinalize?: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void;\n onUpdate?: (event: GestureUpdateEvent<EventPayloadT>) => void;\n onChange?: (event: any) => void;\n onTouchesDown?: TouchEventHandlerType;\n onTouchesMove?: TouchEventHandlerType;\n onTouchesUp?: TouchEventHandlerType;\n onTouchesCancelled?: TouchEventHandlerType;\n changeEventCalculator?: (\n current: GestureUpdateEvent<Record<string, unknown>>,\n previous?: GestureUpdateEvent<Record<string, unknown>>\n ) => GestureUpdateEvent<Record<string, unknown>>;\n isWorklet: boolean[];\n};\n\nexport const CALLBACK_TYPE = {\n UNDEFINED: 0,\n BEGAN: 1,\n START: 2,\n UPDATE: 3,\n CHANGE: 4,\n END: 5,\n FINALIZE: 6,\n TOUCHES_DOWN: 7,\n TOUCHES_MOVE: 8,\n TOUCHES_UP: 9,\n TOUCHES_CANCELLED: 10,\n} as const;\n\n// Allow using CALLBACK_TYPE as object and type\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type CALLBACK_TYPE = typeof CALLBACK_TYPE[keyof typeof CALLBACK_TYPE];\n\nexport abstract class Gesture {\n /**\n * Return array of gestures, providing the same interface for creating and updating\n * handlers, no matter which object was used to create gesture instance.\n */\n abstract toGestureArray(): GestureType[];\n\n /**\n * Assign handlerTag to the gesture instance and set ref.current (if a ref is set)\n */\n abstract initialize(): void;\n\n /**\n * Make sure that values of properties defining relations are arrays. Do any necessary\n * preprocessing required to configure relations between handlers. Called just before\n * updating the handler on the native side.\n */\n abstract prepare(): void;\n}\n\nlet nextGestureId = 0;\nexport abstract class BaseGesture<\n EventPayloadT extends Record<string, unknown>\n> extends Gesture {\n private gestureId = -1;\n public handlerTag = -1;\n public handlerName = '';\n public config: BaseGestureConfig = {};\n public handlers: HandlerCallbacks<EventPayloadT> = {\n gestureId: -1,\n handlerTag: -1,\n isWorklet: [],\n };\n\n constructor() {\n super();\n\n // Used to check whether the gesture config has been updated when wrapping it\n // with `useMemo`. Since every config will have a unique id, when the dependencies\n // don't change, the config won't be recreated and the id will stay the same.\n // If the id is different, it means that the config has changed and the gesture\n // needs to be updated.\n this.gestureId = nextGestureId++;\n this.handlers.gestureId = this.gestureId;\n }\n\n private addDependency(\n key: 'simultaneousWith' | 'requireToFail',\n gesture: Exclude<GestureRef, number>\n ) {\n const value = this.config[key];\n this.config[key] = value\n ? Array<GestureRef>().concat(value, gesture)\n : [gesture];\n }\n\n withRef(ref: React.MutableRefObject<GestureType | undefined>) {\n this.config.ref = ref;\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n protected isWorklet(callback: Function) {\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n return callback.__workletHash !== undefined;\n }\n\n onBegin(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void) {\n this.handlers.onBegin = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.BEGAN] = this.isWorklet(callback);\n return this;\n }\n\n onStart(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void) {\n this.handlers.onStart = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.START] = this.isWorklet(callback);\n return this;\n }\n\n onEnd(\n callback: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void\n ) {\n this.handlers.onEnd = callback;\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n this.handlers.isWorklet[CALLBACK_TYPE.END] = this.isWorklet(callback);\n return this;\n }\n\n onFinalize(\n callback: (\n event: GestureStateChangeEvent<EventPayloadT>,\n success: boolean\n ) => void\n ) {\n this.handlers.onFinalize = callback;\n //@ts-ignore if callback is a worklet, the property will be available, if not then the check will return false\n this.handlers.isWorklet[CALLBACK_TYPE.FINALIZE] = this.isWorklet(callback);\n return this;\n }\n\n onTouchesDown(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesDown = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_DOWN] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesMove(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesMove = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_MOVE] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesUp(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesUp = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_UP] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n onTouchesCancelled(callback: TouchEventHandlerType) {\n this.config.needsPointerData = true;\n this.handlers.onTouchesCancelled = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.TOUCHES_CANCELLED] = this.isWorklet(\n callback\n );\n\n return this;\n }\n\n enabled(enabled: boolean) {\n this.config.enabled = enabled;\n return this;\n }\n\n shouldCancelWhenOutside(value: boolean) {\n this.config.shouldCancelWhenOutside = value;\n return this;\n }\n\n hitSlop(hitSlop: HitSlop) {\n this.config.hitSlop = hitSlop;\n return this;\n }\n\n runOnJS(runOnJS: boolean) {\n this.config.runOnJS = runOnJS;\n return this;\n }\n\n simultaneousWithExternalGesture(...gestures: Exclude<GestureRef, number>[]) {\n for (const gesture of gestures) {\n this.addDependency('simultaneousWith', gesture);\n }\n return this;\n }\n\n requireExternalGestureToFail(...gestures: Exclude<GestureRef, number>[]) {\n for (const gesture of gestures) {\n this.addDependency('requireToFail', gesture);\n }\n return this;\n }\n\n withTestId(id: string) {\n this.config.testId = id;\n return this;\n }\n\n cancelsTouchesInView(value: boolean) {\n this.config.cancelsTouchesInView = value;\n return this;\n }\n\n initialize() {\n this.handlerTag = getNextHandlerTag();\n\n this.handlers = { ...this.handlers, handlerTag: this.handlerTag };\n\n if (this.config.ref) {\n this.config.ref.current = this as GestureType;\n }\n }\n\n toGestureArray(): GestureType[] {\n return [this as GestureType];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n prepare() {}\n\n get shouldUseReanimated(): boolean {\n // use Reanimated when runOnJS isn't set explicitly,\n // and all defined callbacks are worklets,\n // and remote debugging is disabled\n return (\n this.config.runOnJS !== true &&\n !this.handlers.isWorklet.includes(false) &&\n !isRemoteDebuggingEnabled()\n );\n }\n}\n\nexport abstract class ContinousBaseGesture<\n EventPayloadT extends Record<string, unknown>,\n EventChangePayloadT extends Record<string, unknown>\n> extends BaseGesture<EventPayloadT> {\n onUpdate(callback: (event: GestureUpdateEvent<EventPayloadT>) => void) {\n this.handlers.onUpdate = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.UPDATE] = this.isWorklet(callback);\n return this;\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent<EventPayloadT & EventChangePayloadT>\n ) => void\n ) {\n this.handlers.onChange = callback;\n this.handlers.isWorklet[CALLBACK_TYPE.CHANGE] = this.isWorklet(callback);\n return this;\n }\n\n manualActivation(manualActivation: boolean) {\n this.config.manualActivation = manualActivation;\n return this;\n }\n}\n"]}
@@ -1,7 +1,11 @@
1
1
  import { Reanimated } from './reanimatedWrapper';
2
2
  import { State } from '../../State';
3
3
  import { tagMessage } from '../../utils';
4
- const warningMessage = tagMessage('react-native-reanimated is required in order to use synchronous state management');
4
+ const warningMessage = tagMessage('react-native-reanimated is required in order to use synchronous state management'); // check if reanimated module is available, but look for useSharedValue as conditional
5
+ // require of reanimated can sometimes return content of `utils.ts` file (?)
6
+
7
+ const REANIMATED_AVAILABLE = (Reanimated === null || Reanimated === void 0 ? void 0 : Reanimated.useSharedValue) !== undefined;
8
+ const setGestureState = Reanimated === null || Reanimated === void 0 ? void 0 : Reanimated.setGestureState;
5
9
  export const GestureStateManager = {
6
10
  create(handlerTag) {
7
11
  'worklet';
@@ -10,8 +14,8 @@ export const GestureStateManager = {
10
14
  begin: () => {
11
15
  'worklet';
12
16
 
13
- if (Reanimated) {
14
- Reanimated.setGestureState(handlerTag, State.BEGAN);
17
+ if (REANIMATED_AVAILABLE) {
18
+ setGestureState(handlerTag, State.BEGAN);
15
19
  } else {
16
20
  console.warn(warningMessage);
17
21
  }
@@ -19,8 +23,8 @@ export const GestureStateManager = {
19
23
  activate: () => {
20
24
  'worklet';
21
25
 
22
- if (Reanimated) {
23
- Reanimated.setGestureState(handlerTag, State.ACTIVE);
26
+ if (REANIMATED_AVAILABLE) {
27
+ setGestureState(handlerTag, State.ACTIVE);
24
28
  } else {
25
29
  console.warn(warningMessage);
26
30
  }
@@ -28,8 +32,8 @@ export const GestureStateManager = {
28
32
  fail: () => {
29
33
  'worklet';
30
34
 
31
- if (Reanimated) {
32
- Reanimated.setGestureState(handlerTag, State.FAILED);
35
+ if (REANIMATED_AVAILABLE) {
36
+ setGestureState(handlerTag, State.FAILED);
33
37
  } else {
34
38
  console.warn(warningMessage);
35
39
  }
@@ -37,8 +41,8 @@ export const GestureStateManager = {
37
41
  end: () => {
38
42
  'worklet';
39
43
 
40
- if (Reanimated) {
41
- Reanimated.setGestureState(handlerTag, State.END);
44
+ if (REANIMATED_AVAILABLE) {
45
+ setGestureState(handlerTag, State.END);
42
46
  } else {
43
47
  console.warn(warningMessage);
44
48
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["gestureStateManager.ts"],"names":["Reanimated","State","tagMessage","warningMessage","GestureStateManager","create","handlerTag","begin","setGestureState","BEGAN","console","warn","activate","ACTIVE","fail","FAILED","end","END"],"mappings":"AAAA,SAASA,UAAT,QAA2B,qBAA3B;AACA,SAASC,KAAT,QAAsB,aAAtB;AACA,SAASC,UAAT,QAA2B,aAA3B;AASA,MAAMC,cAAc,GAAGD,UAAU,CAC/B,kFAD+B,CAAjC;AAIA,OAAO,MAAME,mBAAmB,GAAG;AACjCC,EAAAA,MAAM,CAACC,UAAD,EAA8C;AAClD;;AACA,WAAO;AACLC,MAAAA,KAAK,EAAE,MAAM;AACX;;AACA,YAAIP,UAAJ,EAAgB;AACdA,UAAAA,UAAU,CAACQ,eAAX,CAA2BF,UAA3B,EAAuCL,KAAK,CAACQ,KAA7C;AACD,SAFD,MAEO;AACLC,UAAAA,OAAO,CAACC,IAAR,CAAaR,cAAb;AACD;AACF,OARI;AAULS,MAAAA,QAAQ,EAAE,MAAM;AACd;;AACA,YAAIZ,UAAJ,EAAgB;AACdA,UAAAA,UAAU,CAACQ,eAAX,CAA2BF,UAA3B,EAAuCL,KAAK,CAACY,MAA7C;AACD,SAFD,MAEO;AACLH,UAAAA,OAAO,CAACC,IAAR,CAAaR,cAAb;AACD;AACF,OAjBI;AAmBLW,MAAAA,IAAI,EAAE,MAAM;AACV;;AACA,YAAId,UAAJ,EAAgB;AACdA,UAAAA,UAAU,CAACQ,eAAX,CAA2BF,UAA3B,EAAuCL,KAAK,CAACc,MAA7C;AACD,SAFD,MAEO;AACLL,UAAAA,OAAO,CAACC,IAAR,CAAaR,cAAb;AACD;AACF,OA1BI;AA4BLa,MAAAA,GAAG,EAAE,MAAM;AACT;;AACA,YAAIhB,UAAJ,EAAgB;AACdA,UAAAA,UAAU,CAACQ,eAAX,CAA2BF,UAA3B,EAAuCL,KAAK,CAACgB,GAA7C;AACD,SAFD,MAEO;AACLP,UAAAA,OAAO,CAACC,IAAR,CAAaR,cAAb;AACD;AACF;AAnCI,KAAP;AAqCD;;AAxCgC,CAA5B","sourcesContent":["import { Reanimated } from './reanimatedWrapper';\nimport { State } from '../../State';\nimport { tagMessage } from '../../utils';\n\nexport interface GestureStateManagerType {\n begin: () => void;\n activate: () => void;\n fail: () => void;\n end: () => void;\n}\n\nconst warningMessage = tagMessage(\n 'react-native-reanimated is required in order to use synchronous state management'\n);\n\nexport const GestureStateManager = {\n create(handlerTag: number): GestureStateManagerType {\n 'worklet';\n return {\n begin: () => {\n 'worklet';\n if (Reanimated) {\n Reanimated.setGestureState(handlerTag, State.BEGAN);\n } else {\n console.warn(warningMessage);\n }\n },\n\n activate: () => {\n 'worklet';\n if (Reanimated) {\n Reanimated.setGestureState(handlerTag, State.ACTIVE);\n } else {\n console.warn(warningMessage);\n }\n },\n\n fail: () => {\n 'worklet';\n if (Reanimated) {\n Reanimated.setGestureState(handlerTag, State.FAILED);\n } else {\n console.warn(warningMessage);\n }\n },\n\n end: () => {\n 'worklet';\n if (Reanimated) {\n Reanimated.setGestureState(handlerTag, State.END);\n } else {\n console.warn(warningMessage);\n }\n },\n };\n },\n};\n"]}
1
+ {"version":3,"sources":["gestureStateManager.ts"],"names":["Reanimated","State","tagMessage","warningMessage","REANIMATED_AVAILABLE","useSharedValue","undefined","setGestureState","GestureStateManager","create","handlerTag","begin","BEGAN","console","warn","activate","ACTIVE","fail","FAILED","end","END"],"mappings":"AAAA,SAASA,UAAT,QAA2B,qBAA3B;AACA,SAASC,KAAT,QAAsB,aAAtB;AACA,SAASC,UAAT,QAA2B,aAA3B;AASA,MAAMC,cAAc,GAAGD,UAAU,CAC/B,kFAD+B,CAAjC,C,CAIA;AACA;;AACA,MAAME,oBAAoB,GAAG,CAAAJ,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEK,cAAZ,MAA+BC,SAA5D;AACA,MAAMC,eAAe,GAAGP,UAAH,aAAGA,UAAH,uBAAGA,UAAU,CAAEO,eAApC;AAEA,OAAO,MAAMC,mBAAmB,GAAG;AACjCC,EAAAA,MAAM,CAACC,UAAD,EAA8C;AAClD;;AACA,WAAO;AACLC,MAAAA,KAAK,EAAE,MAAM;AACX;;AACA,YAAIP,oBAAJ,EAA0B;AACxBG,UAAAA,eAAe,CAACG,UAAD,EAAaT,KAAK,CAACW,KAAnB,CAAf;AACD,SAFD,MAEO;AACLC,UAAAA,OAAO,CAACC,IAAR,CAAaX,cAAb;AACD;AACF,OARI;AAULY,MAAAA,QAAQ,EAAE,MAAM;AACd;;AACA,YAAIX,oBAAJ,EAA0B;AACxBG,UAAAA,eAAe,CAACG,UAAD,EAAaT,KAAK,CAACe,MAAnB,CAAf;AACD,SAFD,MAEO;AACLH,UAAAA,OAAO,CAACC,IAAR,CAAaX,cAAb;AACD;AACF,OAjBI;AAmBLc,MAAAA,IAAI,EAAE,MAAM;AACV;;AACA,YAAIb,oBAAJ,EAA0B;AACxBG,UAAAA,eAAe,CAACG,UAAD,EAAaT,KAAK,CAACiB,MAAnB,CAAf;AACD,SAFD,MAEO;AACLL,UAAAA,OAAO,CAACC,IAAR,CAAaX,cAAb;AACD;AACF,OA1BI;AA4BLgB,MAAAA,GAAG,EAAE,MAAM;AACT;;AACA,YAAIf,oBAAJ,EAA0B;AACxBG,UAAAA,eAAe,CAACG,UAAD,EAAaT,KAAK,CAACmB,GAAnB,CAAf;AACD,SAFD,MAEO;AACLP,UAAAA,OAAO,CAACC,IAAR,CAAaX,cAAb;AACD;AACF;AAnCI,KAAP;AAqCD;;AAxCgC,CAA5B","sourcesContent":["import { Reanimated } from './reanimatedWrapper';\nimport { State } from '../../State';\nimport { tagMessage } from '../../utils';\n\nexport interface GestureStateManagerType {\n begin: () => void;\n activate: () => void;\n fail: () => void;\n end: () => void;\n}\n\nconst warningMessage = tagMessage(\n 'react-native-reanimated is required in order to use synchronous state management'\n);\n\n// check if reanimated module is available, but look for useSharedValue as conditional\n// require of reanimated can sometimes return content of `utils.ts` file (?)\nconst REANIMATED_AVAILABLE = Reanimated?.useSharedValue !== undefined;\nconst setGestureState = Reanimated?.setGestureState;\n\nexport const GestureStateManager = {\n create(handlerTag: number): GestureStateManagerType {\n 'worklet';\n return {\n begin: () => {\n 'worklet';\n if (REANIMATED_AVAILABLE) {\n setGestureState(handlerTag, State.BEGAN);\n } else {\n console.warn(warningMessage);\n }\n },\n\n activate: () => {\n 'worklet';\n if (REANIMATED_AVAILABLE) {\n setGestureState(handlerTag, State.ACTIVE);\n } else {\n console.warn(warningMessage);\n }\n },\n\n fail: () => {\n 'worklet';\n if (REANIMATED_AVAILABLE) {\n setGestureState(handlerTag, State.FAILED);\n } else {\n console.warn(warningMessage);\n }\n },\n\n end: () => {\n 'worklet';\n if (REANIMATED_AVAILABLE) {\n setGestureState(handlerTag, State.END);\n } else {\n console.warn(warningMessage);\n }\n },\n };\n },\n};\n"]}
@@ -125,6 +125,11 @@ export class PanGesture extends ContinousBaseGesture {
125
125
  return this;
126
126
  }
127
127
 
128
+ activateAfterLongPress(duration) {
129
+ this.config.activateAfterLongPress = duration;
130
+ return this;
131
+ }
132
+
128
133
  onChange(callback) {
129
134
  // @ts-ignore TS being overprotective, PanGestureHandlerEventPayload is Record
130
135
  this.handlers.changeEventCalculator = changeEventCalculator;
@@ -1 +1 @@
1
- {"version":3,"sources":["panGesture.ts"],"names":["ContinousBaseGesture","changeEventCalculator","current","previous","changePayload","undefined","changeX","translationX","changeY","translationY","PanGesture","constructor","handlerName","activeOffsetY","offset","Array","isArray","config","activeOffsetYStart","activeOffsetYEnd","activeOffsetX","activeOffsetXStart","activeOffsetXEnd","failOffsetY","failOffsetYStart","failOffsetYEnd","failOffsetX","failOffsetXStart","failOffsetXEnd","minPointers","maxPointers","minDistance","distance","minDist","minVelocity","velocity","minVelocityX","minVelocityY","averageTouches","value","avgTouches","enableTrackpadTwoFingerGesture","onChange","callback","handlers"],"mappings":"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","sourcesContent":["import { BaseGestureConfig, ContinousBaseGesture } from './gesture';\nimport { GestureUpdateEvent } from '../gestureHandlerCommon';\nimport {\n PanGestureConfig,\n PanGestureHandlerEventPayload,\n} from '../PanGestureHandler';\n\nexport type PanGestureChangeEventPayload = {\n changeX: number;\n changeY: number;\n};\n\nfunction changeEventCalculator(\n current: GestureUpdateEvent<PanGestureHandlerEventPayload>,\n previous?: GestureUpdateEvent<PanGestureHandlerEventPayload>\n) {\n 'worklet';\n let changePayload: PanGestureChangeEventPayload;\n if (previous === undefined) {\n changePayload = {\n changeX: current.translationX,\n changeY: current.translationY,\n };\n } else {\n changePayload = {\n changeX: current.translationX - previous.translationX,\n changeY: current.translationY - previous.translationY,\n };\n }\n\n return { ...current, ...changePayload };\n}\n\nexport class PanGesture extends ContinousBaseGesture<\n PanGestureHandlerEventPayload,\n PanGestureChangeEventPayload\n> {\n public config: BaseGestureConfig & PanGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'PanGestureHandler';\n }\n\n activeOffsetY(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.activeOffsetYStart = offset[0];\n this.config.activeOffsetYEnd = offset[1];\n } else if (offset < 0) {\n this.config.activeOffsetYStart = offset;\n } else {\n this.config.activeOffsetYEnd = offset;\n }\n return this;\n }\n\n activeOffsetX(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.activeOffsetXStart = offset[0];\n this.config.activeOffsetXEnd = offset[1];\n } else if (offset < 0) {\n this.config.activeOffsetXStart = offset;\n } else {\n this.config.activeOffsetXEnd = offset;\n }\n return this;\n }\n\n failOffsetY(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.failOffsetYStart = offset[0];\n this.config.failOffsetYEnd = offset[1];\n } else if (offset < 0) {\n this.config.failOffsetYStart = offset;\n } else {\n this.config.failOffsetYEnd = offset;\n }\n return this;\n }\n\n failOffsetX(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.failOffsetXStart = offset[0];\n this.config.failOffsetXEnd = offset[1];\n } else if (offset < 0) {\n this.config.failOffsetXStart = offset;\n } else {\n this.config.failOffsetXEnd = offset;\n }\n return this;\n }\n\n minPointers(minPointers: number) {\n this.config.minPointers = minPointers;\n return this;\n }\n\n maxPointers(maxPointers: number) {\n this.config.maxPointers = maxPointers;\n return this;\n }\n\n minDistance(distance: number) {\n this.config.minDist = distance;\n return this;\n }\n\n minVelocity(velocity: number) {\n this.config.minVelocity = velocity;\n return this;\n }\n\n minVelocityX(velocity: number) {\n this.config.minVelocityX = velocity;\n return this;\n }\n\n minVelocityY(velocity: number) {\n this.config.minVelocityY = velocity;\n return this;\n }\n\n averageTouches(value: boolean) {\n this.config.avgTouches = value;\n return this;\n }\n\n enableTrackpadTwoFingerGesture(value: boolean) {\n this.config.enableTrackpadTwoFingerGesture = value;\n return this;\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent<\n PanGestureHandlerEventPayload & PanGestureChangeEventPayload\n >\n ) => void\n ) {\n // @ts-ignore TS being overprotective, PanGestureHandlerEventPayload is Record\n this.handlers.changeEventCalculator = changeEventCalculator;\n return super.onChange(callback);\n }\n}\n\nexport type PanGestureType = InstanceType<typeof PanGesture>;\n"]}
1
+ {"version":3,"sources":["panGesture.ts"],"names":["ContinousBaseGesture","changeEventCalculator","current","previous","changePayload","undefined","changeX","translationX","changeY","translationY","PanGesture","constructor","handlerName","activeOffsetY","offset","Array","isArray","config","activeOffsetYStart","activeOffsetYEnd","activeOffsetX","activeOffsetXStart","activeOffsetXEnd","failOffsetY","failOffsetYStart","failOffsetYEnd","failOffsetX","failOffsetXStart","failOffsetXEnd","minPointers","maxPointers","minDistance","distance","minDist","minVelocity","velocity","minVelocityX","minVelocityY","averageTouches","value","avgTouches","enableTrackpadTwoFingerGesture","activateAfterLongPress","duration","onChange","callback","handlers"],"mappings":"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","sourcesContent":["import { BaseGestureConfig, ContinousBaseGesture } from './gesture';\nimport { GestureUpdateEvent } from '../gestureHandlerCommon';\nimport {\n PanGestureConfig,\n PanGestureHandlerEventPayload,\n} from '../PanGestureHandler';\n\nexport type PanGestureChangeEventPayload = {\n changeX: number;\n changeY: number;\n};\n\nfunction changeEventCalculator(\n current: GestureUpdateEvent<PanGestureHandlerEventPayload>,\n previous?: GestureUpdateEvent<PanGestureHandlerEventPayload>\n) {\n 'worklet';\n let changePayload: PanGestureChangeEventPayload;\n if (previous === undefined) {\n changePayload = {\n changeX: current.translationX,\n changeY: current.translationY,\n };\n } else {\n changePayload = {\n changeX: current.translationX - previous.translationX,\n changeY: current.translationY - previous.translationY,\n };\n }\n\n return { ...current, ...changePayload };\n}\n\nexport class PanGesture extends ContinousBaseGesture<\n PanGestureHandlerEventPayload,\n PanGestureChangeEventPayload\n> {\n public config: BaseGestureConfig & PanGestureConfig = {};\n\n constructor() {\n super();\n\n this.handlerName = 'PanGestureHandler';\n }\n\n activeOffsetY(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.activeOffsetYStart = offset[0];\n this.config.activeOffsetYEnd = offset[1];\n } else if (offset < 0) {\n this.config.activeOffsetYStart = offset;\n } else {\n this.config.activeOffsetYEnd = offset;\n }\n return this;\n }\n\n activeOffsetX(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.activeOffsetXStart = offset[0];\n this.config.activeOffsetXEnd = offset[1];\n } else if (offset < 0) {\n this.config.activeOffsetXStart = offset;\n } else {\n this.config.activeOffsetXEnd = offset;\n }\n return this;\n }\n\n failOffsetY(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.failOffsetYStart = offset[0];\n this.config.failOffsetYEnd = offset[1];\n } else if (offset < 0) {\n this.config.failOffsetYStart = offset;\n } else {\n this.config.failOffsetYEnd = offset;\n }\n return this;\n }\n\n failOffsetX(offset: number | number[]) {\n if (Array.isArray(offset)) {\n this.config.failOffsetXStart = offset[0];\n this.config.failOffsetXEnd = offset[1];\n } else if (offset < 0) {\n this.config.failOffsetXStart = offset;\n } else {\n this.config.failOffsetXEnd = offset;\n }\n return this;\n }\n\n minPointers(minPointers: number) {\n this.config.minPointers = minPointers;\n return this;\n }\n\n maxPointers(maxPointers: number) {\n this.config.maxPointers = maxPointers;\n return this;\n }\n\n minDistance(distance: number) {\n this.config.minDist = distance;\n return this;\n }\n\n minVelocity(velocity: number) {\n this.config.minVelocity = velocity;\n return this;\n }\n\n minVelocityX(velocity: number) {\n this.config.minVelocityX = velocity;\n return this;\n }\n\n minVelocityY(velocity: number) {\n this.config.minVelocityY = velocity;\n return this;\n }\n\n averageTouches(value: boolean) {\n this.config.avgTouches = value;\n return this;\n }\n\n enableTrackpadTwoFingerGesture(value: boolean) {\n this.config.enableTrackpadTwoFingerGesture = value;\n return this;\n }\n\n activateAfterLongPress(duration: number) {\n this.config.activateAfterLongPress = duration;\n return this;\n }\n\n onChange(\n callback: (\n event: GestureUpdateEvent<\n PanGestureHandlerEventPayload & PanGestureChangeEventPayload\n >\n ) => void\n ) {\n // @ts-ignore TS being overprotective, PanGestureHandlerEventPayload is Record\n this.handlers.changeEventCalculator = changeEventCalculator;\n return super.onChange(callback);\n }\n}\n\nexport type PanGestureType = InstanceType<typeof PanGesture>;\n"]}