react-native-gesture-handler 2.6.0 → 2.6.1
Sign up to get free protection for your applications and to get access to all the features.
- package/android/build.gradle +2 -2
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
- package/lib/commonjs/EnableExperimentalWebImplementation.js +7 -0
- package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.js +1 -1
- package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.macos.js +20 -9
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +23 -10
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.web.js +1 -1
- package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -5
- package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/eventReceiver.js +14 -20
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.web.js +32 -0
- package/lib/commonjs/handlers/gestures/gestureStateManager.web.js.map +1 -0
- package/lib/commonjs/web/detectors/RotationGestureDetector.js +13 -17
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js +3 -14
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +37 -12
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +282 -79
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +23 -18
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/ManualGestureHandler.js +51 -0
- package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +81 -22
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +57 -40
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +43 -34
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +45 -39
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +52 -50
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js +22 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/EventManager.js +40 -96
- package/lib/commonjs/web/tools/EventManager.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +109 -30
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js +24 -10
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerEventManager.js +130 -0
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -0
- package/lib/commonjs/web/tools/PointerTracker.js +97 -7
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
- package/lib/commonjs/web/tools/TouchEventManager.js +138 -0
- package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -0
- package/lib/commonjs/web/utils.js +15 -0
- package/lib/commonjs/web/utils.js.map +1 -0
- package/lib/module/EnableExperimentalWebImplementation.js +5 -0
- package/lib/module/EnableExperimentalWebImplementation.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.js +1 -1
- package/lib/module/RNGestureHandlerModule.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.macos.js +19 -10
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +22 -11
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/components/GestureComponents.web.js +1 -1
- package/lib/module/components/GestureComponents.web.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -4
- package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/eventReceiver.js +14 -20
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.web.js +21 -0
- package/lib/module/handlers/gestures/gestureStateManager.web.js.map +1 -0
- package/lib/module/web/detectors/RotationGestureDetector.js +13 -17
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/module/web/detectors/ScaleGestureDetector.js +3 -14
- package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +37 -12
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +276 -79
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js +23 -18
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/ManualGestureHandler.js +39 -0
- package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js +80 -22
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +57 -41
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PinchGestureHandler.js +43 -33
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/RotationGestureHandler.js +45 -38
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +52 -50
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js +19 -0
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/EventManager.js +39 -95
- package/lib/module/web/tools/EventManager.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +107 -30
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js +24 -10
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web/tools/NodeManager.js.map +1 -1
- package/lib/module/web/tools/PointerEventManager.js +116 -0
- package/lib/module/web/tools/PointerEventManager.js.map +1 -0
- package/lib/module/web/tools/PointerTracker.js +97 -7
- package/lib/module/web/tools/PointerTracker.js.map +1 -1
- package/lib/module/web/tools/TouchEventManager.js +124 -0
- package/lib/module/web/tools/TouchEventManager.js.map +1 -0
- package/lib/module/web/utils.js +8 -0
- package/lib/module/web/utils.js.map +1 -0
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +5 -2
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +5 -2
- package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +1 -1
- package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +3 -3
- package/lib/typescript/fabric/RNGestureHandlerRootViewNativeComponent.d.ts +3 -2
- package/lib/typescript/handlers/gestures/gestureStateManager.web.d.ts +4 -0
- package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +7 -7
- package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +6 -7
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +12 -10
- package/lib/typescript/web/handlers/GestureHandler.d.ts +41 -32
- package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +6 -9
- package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +11 -0
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +15 -6
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +15 -23
- package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +11 -12
- package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +12 -12
- package/lib/typescript/web/handlers/TapGestureHandler.d.ts +11 -14
- package/lib/typescript/web/interfaces.d.ts +50 -10
- package/lib/typescript/web/tools/EventManager.d.ts +28 -26
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +4 -2
- package/lib/typescript/web/tools/InteractionManager.d.ts +3 -0
- package/lib/typescript/web/tools/NodeManager.d.ts +3 -3
- package/lib/typescript/web/tools/PointerEventManager.d.ts +6 -0
- package/lib/typescript/web/tools/PointerTracker.d.ts +29 -5
- package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -0
- package/lib/typescript/web/utils.d.ts +4 -0
- package/package.json +2 -2
- package/src/EnableExperimentalWebImplementation.ts +9 -0
- package/src/RNGestureHandlerModule.macos.ts +25 -10
- package/src/RNGestureHandlerModule.ts +4 -1
- package/src/RNGestureHandlerModule.web.ts +20 -7
- package/src/components/GestureComponents.web.tsx +1 -1
- package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +2 -12
- package/src/fabric/RNGestureHandlerRootViewNativeComponent.ts +2 -8
- package/src/handlers/gestures/GestureDetector.tsx +0 -1
- package/src/handlers/gestures/eventReceiver.ts +23 -24
- package/src/handlers/gestures/gestureStateManager.web.ts +24 -0
- package/src/web/detectors/RotationGestureDetector.ts +20 -52
- package/src/web/detectors/ScaleGestureDetector.ts +9 -45
- package/src/web/handlers/FlingGestureHandler.ts +45 -22
- package/src/web/handlers/GestureHandler.ts +306 -97
- package/src/web/handlers/LongPressGestureHandler.ts +30 -24
- package/src/web/handlers/ManualGestureHandler.ts +39 -0
- package/src/web/handlers/NativeViewGestureHandler.ts +81 -24
- package/src/web/handlers/PanGestureHandler.ts +68 -53
- package/src/web/handlers/PinchGestureHandler.ts +47 -44
- package/src/web/handlers/RotationGestureHandler.ts +52 -51
- package/src/web/handlers/TapGestureHandler.ts +74 -56
- package/src/web/interfaces.ts +57 -10
- package/src/web/tools/EventManager.ts +58 -148
- package/src/web/tools/GestureHandlerOrchestrator.ts +115 -47
- package/src/web/tools/InteractionManager.ts +25 -9
- package/src/web/tools/NodeManager.ts +6 -6
- package/src/web/tools/PointerEventManager.ts +134 -0
- package/src/web/tools/PointerTracker.ts +120 -10
- package/src/web/tools/TouchEventManager.ts +167 -0
- package/src/web/utils.ts +8 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["GestureDetector.tsx"],"names":["ALLOWED_PROPS","baseGestureHandlerWithMonitorProps","tapGestureHandlerProps","panGestureHandlerProps","panGestureHandlerCustomNativeProps","longPressGestureHandlerProps","forceTouchGestureHandlerProps","flingGestureHandlerProps","convertToHandlerTag","ref","BaseGesture","handlerTag","current","extractValidHandlerTags","interactionGroup","map","filter","tag","dropHandlers","preparedGesture","handler","config","RNGestureHandlerModule","dropGestureHandler","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","ActionType","REANIMATED_WORKLET","JS_FUNCTION_NEW_API","Platform","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","CALLBACK_TYPE","BEGAN","onBegin","START","onStart","UPDATE","onUpdate","CHANGE","onChange","END","onEnd","FINALIZE","onFinalize","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","touchEventTypeToCallbackType","TouchEventType","UNDEFINED","runWorklet","args","warn","useAnimatedGesture","needsRebuild","Reanimated","sharedHandlersCallbacks","useSharedValue","lastUpdateEvent","stateControllers","callback","currentCallback","State","UNDETERMINED","state","ACTIVE","undefined","FAILED","CANCELLED","GestureStateManager","create","changeEventCalculator","useEvent","animatedEventHandler","validateDetectorChildren","__DEV__","wrapType","_reactInternals","elementType","instance","RNRenderer","findHostInstance_DEPRECATED","_internalFiberInstanceHandleDEV","sibling","Error","return","GestureDetector","props","toGestureArray","useReanimatedHook","some","viewRef","firstRenderRef","onGestureHandlerEvent","e","nativeEvent","onGestureHandlerStateChange","React","useRef","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';\nimport { RNRenderer } from '../../RNRenderer';\nimport { isExperimentalWebImplementationEnabled } from '../../EnableExperimentalWebImplementation';\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 onGestureHandlerStateChange?: (\n event: HandlerStateChangeEvent<unknown>\n ) => 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\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction validateDetectorChildren(ref: any) {\n // finds the first native view under the Wrap component and traverses the fiber tree upwards\n // to check whether there is more than one native view as a pseudo-direct child of GestureDetector\n // i.e. this is not ok:\n // Wrap\n // |\n // / \\\n // / \\\n // / \\\n // / \\\n // NativeView NativeView\n //\n // but this is fine:\n // Wrap\n // |\n // NativeView\n // |\n // / \\\n // / \\\n // / \\\n // / \\\n // NativeView NativeView\n if (__DEV__ && Platform.OS !== 'web') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const wrapType = ref._reactInternals.elementType;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n let instance = RNRenderer.findHostInstance_DEPRECATED(ref)\n ._internalFiberInstanceHandleDEV;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n while (instance && instance.elementType !== wrapType) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (instance.sibling) {\n throw new Error(\n 'GestureDetector has more than one native view as its children. This can happen if you are using a custom component that renders multiple views, like React.Fragment. You should wrap content of GestureDetector with a <View> or <Animated.View>.'\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n instance = instance.return;\n }\n }\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 onGestureHandlerStateChange: isExperimentalWebImplementationEnabled()\n ? (e: HandlerStateChangeEvent<unknown>) => {\n onGestureHandlerEvent(e.nativeEvent);\n }\n : undefined,\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\n validateDetectorChildren(viewRef.current);\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 validateDetectorChildren(viewRef.current);\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 try {\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 } catch (e) {\n throw new Error(\n tagMessage(\n `GestureDetector got more than one view as a child. If you want the gesture to work on multiple views, wrap them with a common parent and attach the gesture to that view.`\n )\n );\n }\n }\n}\n\nconst AnimatedWrap = Reanimated?.default?.createAnimatedComponent(Wrap) ?? Wrap;\n"]}
|
1
|
+
{"version":3,"sources":["GestureDetector.tsx"],"names":["ALLOWED_PROPS","baseGestureHandlerWithMonitorProps","tapGestureHandlerProps","panGestureHandlerProps","panGestureHandlerCustomNativeProps","longPressGestureHandlerProps","forceTouchGestureHandlerProps","flingGestureHandlerProps","convertToHandlerTag","ref","BaseGesture","handlerTag","current","extractValidHandlerTags","interactionGroup","map","filter","tag","dropHandlers","preparedGesture","handler","config","RNGestureHandlerModule","dropGestureHandler","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","ActionType","REANIMATED_WORKLET","JS_FUNCTION_NEW_API","Platform","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","CALLBACK_TYPE","BEGAN","onBegin","START","onStart","UPDATE","onUpdate","CHANGE","onChange","END","onEnd","FINALIZE","onFinalize","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","touchEventTypeToCallbackType","TouchEventType","UNDEFINED","runWorklet","args","warn","useAnimatedGesture","needsRebuild","Reanimated","sharedHandlersCallbacks","useSharedValue","lastUpdateEvent","stateControllers","callback","currentCallback","State","UNDETERMINED","state","ACTIVE","undefined","FAILED","CANCELLED","GestureStateManager","create","changeEventCalculator","useEvent","animatedEventHandler","validateDetectorChildren","__DEV__","wrapType","_reactInternals","elementType","instance","RNRenderer","findHostInstance_DEPRECATED","_internalFiberInstanceHandleDEV","sibling","Error","return","GestureDetector","props","toGestureArray","useReanimatedHook","some","viewRef","firstRenderRef","onGestureHandlerEvent","e","nativeEvent","onGestureHandlerStateChange","React","useRef","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';\nimport { RNRenderer } from '../../RNRenderer';\nimport { isExperimentalWebImplementationEnabled } from '../../EnableExperimentalWebImplementation';\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 onGestureHandlerStateChange?: (\n event: HandlerStateChangeEvent<unknown>\n ) => 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 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\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction validateDetectorChildren(ref: any) {\n // finds the first native view under the Wrap component and traverses the fiber tree upwards\n // to check whether there is more than one native view as a pseudo-direct child of GestureDetector\n // i.e. this is not ok:\n // Wrap\n // |\n // / \\\n // / \\\n // / \\\n // / \\\n // NativeView NativeView\n //\n // but this is fine:\n // Wrap\n // |\n // NativeView\n // |\n // / \\\n // / \\\n // / \\\n // / \\\n // NativeView NativeView\n if (__DEV__ && Platform.OS !== 'web') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const wrapType = ref._reactInternals.elementType;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n let instance = RNRenderer.findHostInstance_DEPRECATED(ref)\n ._internalFiberInstanceHandleDEV;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n while (instance && instance.elementType !== wrapType) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (instance.sibling) {\n throw new Error(\n 'GestureDetector has more than one native view as its children. This can happen if you are using a custom component that renders multiple views, like React.Fragment. You should wrap content of GestureDetector with a <View> or <Animated.View>.'\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n instance = instance.return;\n }\n }\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 onGestureHandlerStateChange: isExperimentalWebImplementationEnabled()\n ? (e: HandlerStateChangeEvent<unknown>) => {\n onGestureHandlerEvent(e.nativeEvent);\n }\n : undefined,\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\n validateDetectorChildren(viewRef.current);\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 validateDetectorChildren(viewRef.current);\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 try {\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 } catch (e) {\n throw new Error(\n tagMessage(\n `GestureDetector got more than one view as a child. If you want the gesture to work on multiple views, wrap them with a common parent and attach the gesture to that view.`\n )\n );\n }\n }\n}\n\nconst AnimatedWrap = Reanimated?.default?.createAnimatedComponent(Wrap) ?? Wrap;\n"]}
|
@@ -15,25 +15,11 @@ var _TouchEventType = require("../../TouchEventType");
|
|
15
15
|
|
16
16
|
var _handlersRegistry = require("../handlersRegistry");
|
17
17
|
|
18
|
-
var
|
18
|
+
var _gestureStateManager = require("./gestureStateManager");
|
19
19
|
|
20
20
|
let gestureHandlerEventSubscription = null;
|
21
21
|
let gestureHandlerStateChangeEventSubscription = null;
|
22
|
-
const
|
23
|
-
const dummyStateManager = {
|
24
|
-
begin: () => {
|
25
|
-
console.warn(warningMessage);
|
26
|
-
},
|
27
|
-
activate: () => {
|
28
|
-
console.warn(warningMessage);
|
29
|
-
},
|
30
|
-
end: () => {
|
31
|
-
console.warn(warningMessage);
|
32
|
-
},
|
33
|
-
fail: () => {
|
34
|
-
console.warn(warningMessage);
|
35
|
-
}
|
36
|
-
};
|
22
|
+
const gestureStateManagers = new Map();
|
37
23
|
const lastUpdateEvent = [];
|
38
24
|
|
39
25
|
function isStateChangeEvent(event) {
|
@@ -82,24 +68,32 @@ function onGestureHandlerEvent(event) {
|
|
82
68
|
}
|
83
69
|
|
84
70
|
(_handler$handlers$onF2 = (_handler$handlers6 = handler.handlers).onFinalize) === null || _handler$handlers$onF2 === void 0 ? void 0 : _handler$handlers$onF2.call(_handler$handlers6, event, false);
|
71
|
+
gestureStateManagers.delete(event.handlerTag);
|
85
72
|
lastUpdateEvent[handler.handlers.handlerTag] = undefined;
|
86
73
|
}
|
87
74
|
} else if (isTouchEvent(event)) {
|
75
|
+
if (!gestureStateManagers.has(event.handlerTag)) {
|
76
|
+
gestureStateManagers.set(event.handlerTag, _gestureStateManager.GestureStateManager.create(event.handlerTag));
|
77
|
+
} // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
78
|
+
|
79
|
+
|
80
|
+
const manager = gestureStateManagers.get(event.handlerTag);
|
81
|
+
|
88
82
|
switch (event.eventType) {
|
89
83
|
case _TouchEventType.TouchEventType.TOUCHES_DOWN:
|
90
|
-
(_handler$handlers7 = handler.handlers) === null || _handler$handlers7 === void 0 ? void 0 : (_handler$handlers7$on = _handler$handlers7.onTouchesDown) === null || _handler$handlers7$on === void 0 ? void 0 : _handler$handlers7$on.call(_handler$handlers7, event,
|
84
|
+
(_handler$handlers7 = handler.handlers) === null || _handler$handlers7 === void 0 ? void 0 : (_handler$handlers7$on = _handler$handlers7.onTouchesDown) === null || _handler$handlers7$on === void 0 ? void 0 : _handler$handlers7$on.call(_handler$handlers7, event, manager);
|
91
85
|
break;
|
92
86
|
|
93
87
|
case _TouchEventType.TouchEventType.TOUCHES_MOVE:
|
94
|
-
(_handler$handlers8 = handler.handlers) === null || _handler$handlers8 === void 0 ? void 0 : (_handler$handlers8$on = _handler$handlers8.onTouchesMove) === null || _handler$handlers8$on === void 0 ? void 0 : _handler$handlers8$on.call(_handler$handlers8, event,
|
88
|
+
(_handler$handlers8 = handler.handlers) === null || _handler$handlers8 === void 0 ? void 0 : (_handler$handlers8$on = _handler$handlers8.onTouchesMove) === null || _handler$handlers8$on === void 0 ? void 0 : _handler$handlers8$on.call(_handler$handlers8, event, manager);
|
95
89
|
break;
|
96
90
|
|
97
91
|
case _TouchEventType.TouchEventType.TOUCHES_UP:
|
98
|
-
(_handler$handlers9 = handler.handlers) === null || _handler$handlers9 === void 0 ? void 0 : (_handler$handlers9$on = _handler$handlers9.onTouchesUp) === null || _handler$handlers9$on === void 0 ? void 0 : _handler$handlers9$on.call(_handler$handlers9, event,
|
92
|
+
(_handler$handlers9 = handler.handlers) === null || _handler$handlers9 === void 0 ? void 0 : (_handler$handlers9$on = _handler$handlers9.onTouchesUp) === null || _handler$handlers9$on === void 0 ? void 0 : _handler$handlers9$on.call(_handler$handlers9, event, manager);
|
99
93
|
break;
|
100
94
|
|
101
95
|
case _TouchEventType.TouchEventType.TOUCHES_CANCELLED:
|
102
|
-
(_handler$handlers10 = handler.handlers) === null || _handler$handlers10 === void 0 ? void 0 : (_handler$handlers10$o = _handler$handlers10.onTouchesCancelled) === null || _handler$handlers10$o === void 0 ? void 0 : _handler$handlers10$o.call(_handler$handlers10, event,
|
96
|
+
(_handler$handlers10 = handler.handlers) === null || _handler$handlers10 === void 0 ? void 0 : (_handler$handlers10$o = _handler$handlers10.onTouchesCancelled) === null || _handler$handlers10$o === void 0 ? void 0 : _handler$handlers10$o.call(_handler$handlers10, event, manager);
|
103
97
|
break;
|
104
98
|
}
|
105
99
|
} else {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["eventReceiver.ts"],"names":["gestureHandlerEventSubscription","gestureHandlerStateChangeEventSubscription","
|
1
|
+
{"version":3,"sources":["eventReceiver.ts"],"names":["gestureHandlerEventSubscription","gestureHandlerStateChangeEventSubscription","gestureStateManagers","Map","lastUpdateEvent","isStateChangeEvent","event","oldState","isTouchEvent","eventType","onGestureHandlerEvent","handler","handlerTag","State","UNDETERMINED","state","BEGAN","handlers","onBegin","ACTIVE","onStart","END","onEnd","onFinalize","undefined","FAILED","CANCELLED","delete","has","set","GestureStateManager","create","manager","get","TouchEventType","TOUCHES_DOWN","onTouchesDown","TOUCHES_MOVE","onTouchesMove","TOUCHES_UP","onTouchesUp","TOUCHES_CANCELLED","onTouchesCancelled","onUpdate","onChange","changeEventCalculator","oldHandler","nativeEvent","onGestureStateChange","onGestureEvent","startListening","stopListening","DeviceEventEmitter","addListener","remove"],"mappings":"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","sourcesContent":["import { DeviceEventEmitter, EmitterSubscription } from 'react-native';\nimport { State } from '../../State';\nimport { TouchEventType } from '../../TouchEventType';\nimport {\n GestureTouchEvent,\n GestureUpdateEvent,\n GestureStateChangeEvent,\n} from '../gestureHandlerCommon';\nimport { findHandler, findOldGestureHandler } from '../handlersRegistry';\nimport { BaseGesture } from './gesture';\nimport {\n GestureStateManager,\n GestureStateManagerType,\n} from './gestureStateManager';\n\nlet gestureHandlerEventSubscription: EmitterSubscription | null = null;\nlet gestureHandlerStateChangeEventSubscription: EmitterSubscription | null = null;\n\nconst gestureStateManagers: Map<number, GestureStateManagerType> = new Map<\n number,\n GestureStateManagerType\n>();\n\nconst lastUpdateEvent: (GestureUpdateEvent | undefined)[] = [];\n\nfunction isStateChangeEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureStateChangeEvent {\n // @ts-ignore oldState doesn't exist on GestureTouchEvent and that's the point\n return event.oldState != null;\n}\n\nfunction isTouchEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n): event is GestureTouchEvent {\n return event.eventType != null;\n}\n\nexport function onGestureHandlerEvent(\n event: GestureUpdateEvent | GestureStateChangeEvent | GestureTouchEvent\n) {\n const handler = findHandler(event.handlerTag) as BaseGesture<\n Record<string, unknown>\n >;\n\n if (handler) {\n if (isStateChangeEvent(event)) {\n if (\n event.oldState === State.UNDETERMINED &&\n event.state === State.BEGAN\n ) {\n handler.handlers.onBegin?.(event);\n } else if (\n (event.oldState === State.BEGAN ||\n event.oldState === State.UNDETERMINED) &&\n event.state === State.ACTIVE\n ) {\n handler.handlers.onStart?.(event);\n lastUpdateEvent[handler.handlers.handlerTag] = event;\n } else if (event.oldState !== event.state && event.state === State.END) {\n if (event.oldState === State.ACTIVE) {\n handler.handlers.onEnd?.(event, true);\n }\n handler.handlers.onFinalize?.(event, true);\n lastUpdateEvent[handler.handlers.handlerTag] = undefined;\n } else if (\n (event.state === State.FAILED || event.state === State.CANCELLED) &&\n event.oldState !== event.state\n ) {\n if (event.oldState === State.ACTIVE) {\n handler.handlers.onEnd?.(event, false);\n }\n handler.handlers.onFinalize?.(event, false);\n gestureStateManagers.delete(event.handlerTag);\n lastUpdateEvent[handler.handlers.handlerTag] = undefined;\n }\n } else if (isTouchEvent(event)) {\n if (!gestureStateManagers.has(event.handlerTag)) {\n gestureStateManagers.set(\n event.handlerTag,\n GestureStateManager.create(event.handlerTag)\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const manager = gestureStateManagers.get(event.handlerTag)!;\n\n switch (event.eventType) {\n case TouchEventType.TOUCHES_DOWN:\n handler.handlers?.onTouchesDown?.(event, manager);\n break;\n case TouchEventType.TOUCHES_MOVE:\n handler.handlers?.onTouchesMove?.(event, manager);\n break;\n case TouchEventType.TOUCHES_UP:\n handler.handlers?.onTouchesUp?.(event, manager);\n break;\n case TouchEventType.TOUCHES_CANCELLED:\n handler.handlers?.onTouchesCancelled?.(event, manager);\n break;\n }\n } else {\n handler.handlers.onUpdate?.(event);\n\n if (handler.handlers.onChange && handler.handlers.changeEventCalculator) {\n handler.handlers.onChange?.(\n handler.handlers.changeEventCalculator?.(\n event,\n lastUpdateEvent[handler.handlers.handlerTag]\n )\n );\n\n lastUpdateEvent[handler.handlers.handlerTag] = event;\n }\n }\n } else {\n const oldHandler = findOldGestureHandler(event.handlerTag);\n if (oldHandler) {\n const nativeEvent = { nativeEvent: event };\n if (isStateChangeEvent(event)) {\n oldHandler.onGestureStateChange(nativeEvent);\n } else {\n oldHandler.onGestureEvent(nativeEvent);\n }\n return;\n }\n }\n}\n\nexport function startListening() {\n stopListening();\n\n gestureHandlerEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerEvent',\n onGestureHandlerEvent\n );\n\n gestureHandlerStateChangeEventSubscription = DeviceEventEmitter.addListener(\n 'onGestureHandlerStateChange',\n onGestureHandlerEvent\n );\n}\n\nexport function stopListening() {\n if (gestureHandlerEventSubscription) {\n gestureHandlerEventSubscription.remove();\n gestureHandlerEventSubscription = null;\n }\n\n if (gestureHandlerStateChangeEventSubscription) {\n gestureHandlerStateChangeEventSubscription.remove();\n gestureHandlerStateChangeEventSubscription = null;\n }\n}\n"]}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.GestureStateManager = void 0;
|
7
|
+
|
8
|
+
var _NodeManager = _interopRequireDefault(require("../../web/tools/NodeManager"));
|
9
|
+
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
11
|
+
|
12
|
+
const GestureStateManager = {
|
13
|
+
create(handlerTag) {
|
14
|
+
return {
|
15
|
+
begin: () => {
|
16
|
+
_NodeManager.default.getHandler(handlerTag).begin();
|
17
|
+
},
|
18
|
+
activate: () => {
|
19
|
+
_NodeManager.default.getHandler(handlerTag).activate();
|
20
|
+
},
|
21
|
+
fail: () => {
|
22
|
+
_NodeManager.default.getHandler(handlerTag).fail();
|
23
|
+
},
|
24
|
+
end: () => {
|
25
|
+
_NodeManager.default.getHandler(handlerTag).end();
|
26
|
+
}
|
27
|
+
};
|
28
|
+
}
|
29
|
+
|
30
|
+
};
|
31
|
+
exports.GestureStateManager = GestureStateManager;
|
32
|
+
//# sourceMappingURL=gestureStateManager.web.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["gestureStateManager.web.ts"],"names":["GestureStateManager","create","handlerTag","begin","NodeManager","getHandler","activate","fail","end"],"mappings":";;;;;;;AAAA;;;;AAGO,MAAMA,mBAAmB,GAAG;AACjCC,EAAAA,MAAM,CAACC,UAAD,EAA8C;AAClD,WAAO;AACLC,MAAAA,KAAK,EAAE,MAAM;AACXC,6BAAYC,UAAZ,CAAuBH,UAAvB,EAAmCC,KAAnC;AACD,OAHI;AAKLG,MAAAA,QAAQ,EAAE,MAAM;AACdF,6BAAYC,UAAZ,CAAuBH,UAAvB,EAAmCI,QAAnC;AACD,OAPI;AASLC,MAAAA,IAAI,EAAE,MAAM;AACVH,6BAAYC,UAAZ,CAAuBH,UAAvB,EAAmCK,IAAnC;AACD,OAXI;AAaLC,MAAAA,GAAG,EAAE,MAAM;AACTJ,6BAAYC,UAAZ,CAAuBH,UAAvB,EAAmCM,GAAnC;AACD;AAfI,KAAP;AAiBD;;AAnBgC,CAA5B","sourcesContent":["import NodeManager from '../../web/tools/NodeManager';\nimport { GestureStateManagerType } from './gestureStateManager';\n\nexport const GestureStateManager = {\n create(handlerTag: number): GestureStateManagerType {\n return {\n begin: () => {\n NodeManager.getHandler(handlerTag).begin();\n },\n\n activate: () => {\n NodeManager.getHandler(handlerTag).activate();\n },\n\n fail: () => {\n NodeManager.getHandler(handlerTag).fail();\n },\n\n end: () => {\n NodeManager.getHandler(handlerTag).end();\n },\n };\n },\n};\n"]}
|
@@ -68,14 +68,14 @@ class RotationGestureDetector {
|
|
68
68
|
}
|
69
69
|
}
|
70
70
|
|
71
|
-
finish(
|
71
|
+
finish() {
|
72
72
|
if (!this.isInProgress) {
|
73
73
|
return;
|
74
74
|
}
|
75
75
|
|
76
76
|
this.isInProgress = false;
|
77
77
|
this.keyPointers = [NaN, NaN];
|
78
|
-
this.onRotationEnd(this
|
78
|
+
this.onRotationEnd(this);
|
79
79
|
}
|
80
80
|
|
81
81
|
setKeyPointers(tracker) {
|
@@ -89,8 +89,6 @@ class RotationGestureDetector {
|
|
89
89
|
}
|
90
90
|
|
91
91
|
onTouchEvent(event, tracker) {
|
92
|
-
this.adaptEvent(event, tracker);
|
93
|
-
|
94
92
|
switch (event.eventType) {
|
95
93
|
case _interfaces.EventTypes.DOWN:
|
96
94
|
this.isInProgress = false;
|
@@ -115,7 +113,7 @@ class RotationGestureDetector {
|
|
115
113
|
}
|
116
114
|
|
117
115
|
this.updateCurrent(event, tracker);
|
118
|
-
this.onRotation(this
|
116
|
+
this.onRotation(this);
|
119
117
|
break;
|
120
118
|
|
121
119
|
case _interfaces.EventTypes.ADDITIONAL_POINTER_UP:
|
@@ -124,29 +122,22 @@ class RotationGestureDetector {
|
|
124
122
|
}
|
125
123
|
|
126
124
|
if (this.keyPointers.indexOf(event.pointerId) >= 0) {
|
127
|
-
this.finish(
|
125
|
+
this.finish();
|
128
126
|
}
|
129
127
|
|
130
128
|
break;
|
131
129
|
|
132
130
|
case _interfaces.EventTypes.UP:
|
133
|
-
this.
|
131
|
+
if (this.isInProgress) {
|
132
|
+
this.finish();
|
133
|
+
}
|
134
|
+
|
134
135
|
break;
|
135
136
|
}
|
136
137
|
|
137
138
|
return true;
|
138
139
|
}
|
139
140
|
|
140
|
-
adaptEvent(event, tracker) {
|
141
|
-
if (tracker.getTrackedPointersCount() && event.eventType === _interfaces.EventTypes.DOWN) {
|
142
|
-
event.eventType = _interfaces.EventTypes.ADDITIONAL_POINTER_DOWN;
|
143
|
-
}
|
144
|
-
|
145
|
-
if (tracker.getTrackedPointersCount() > 1 && event.eventType === _interfaces.EventTypes.UP) {
|
146
|
-
event.eventType = _interfaces.EventTypes.ADDITIONAL_POINTER_UP;
|
147
|
-
}
|
148
|
-
}
|
149
|
-
|
150
141
|
getTimeDelta() {
|
151
142
|
return this.currentTime + this.previousTime;
|
152
143
|
}
|
@@ -163,6 +154,11 @@ class RotationGestureDetector {
|
|
163
154
|
return this.rotation;
|
164
155
|
}
|
165
156
|
|
157
|
+
reset() {
|
158
|
+
this.keyPointers = [NaN, NaN];
|
159
|
+
this.isInProgress = false;
|
160
|
+
}
|
161
|
+
|
166
162
|
}
|
167
163
|
|
168
164
|
exports.default = RotationGestureDetector;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["RotationGestureDetector.ts"],"names":["RotationGestureDetector","constructor","callbacks","NaN","onRotationBegin","onRotation","onRotationEnd","updateCurrent","event","tracker","previousTime","currentTime","time","firstPointerID","secondPointerID","keyPointers","firstPointerX","getLastX","firstPointerY","getLastY","secondPointerX","secondPointerY","vectorX","vectorY","anchorX","anchorY","angle","Math","atan2","rotation","Number","isNaN","previousAngle","PI","finish","isInProgress","setKeyPointers","pointerIDs","getData","keys","next","value","onTouchEvent","
|
1
|
+
{"version":3,"sources":["RotationGestureDetector.ts"],"names":["RotationGestureDetector","constructor","callbacks","NaN","onRotationBegin","onRotation","onRotationEnd","updateCurrent","event","tracker","previousTime","currentTime","time","firstPointerID","secondPointerID","keyPointers","firstPointerX","getLastX","firstPointerY","getLastY","secondPointerX","secondPointerY","vectorX","vectorY","anchorX","anchorY","angle","Math","atan2","rotation","Number","isNaN","previousAngle","PI","finish","isInProgress","setKeyPointers","pointerIDs","getData","keys","next","value","onTouchEvent","eventType","EventTypes","DOWN","ADDITIONAL_POINTER_DOWN","MOVE","ADDITIONAL_POINTER_UP","indexOf","pointerId","UP","getTimeDelta","getAnchorX","getAnchorY","getRotation","reset"],"mappings":"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","sourcesContent":["import { AdaptedEvent, EventTypes } from '../interfaces';\nimport PointerTracker from '../tools/PointerTracker';\n\nexport interface RotationGestureListener {\n onRotationBegin: (detector: RotationGestureDetector) => boolean;\n onRotation: (detector: RotationGestureDetector) => boolean;\n onRotationEnd: (detector: RotationGestureDetector) => void;\n}\n\nexport default class RotationGestureDetector\n implements RotationGestureListener {\n onRotationBegin: (detector: RotationGestureDetector) => boolean;\n onRotation: (detector: RotationGestureDetector) => boolean;\n onRotationEnd: (detector: RotationGestureDetector) => void;\n\n private currentTime = 0;\n private previousTime = 0;\n\n private previousAngle = 0;\n private rotation = 0;\n\n private anchorX = 0;\n private anchorY = 0;\n\n private isInProgress = false;\n\n private keyPointers: number[] = [NaN, NaN];\n\n constructor(callbacks: RotationGestureListener) {\n this.onRotationBegin = callbacks.onRotationBegin;\n this.onRotation = callbacks.onRotation;\n this.onRotationEnd = callbacks.onRotationEnd;\n }\n\n private updateCurrent(event: AdaptedEvent, tracker: PointerTracker): void {\n this.previousTime = this.currentTime;\n this.currentTime = event.time;\n\n const [firstPointerID, secondPointerID] = this.keyPointers;\n\n const firstPointerX: number = tracker.getLastX(firstPointerID);\n const firstPointerY: number = tracker.getLastY(firstPointerID);\n const secondPointerX: number = tracker.getLastX(secondPointerID);\n const secondPointerY: number = tracker.getLastY(secondPointerID);\n\n const vectorX: number = secondPointerX - firstPointerX;\n const vectorY: number = secondPointerY - firstPointerY;\n\n this.anchorX = (firstPointerX + secondPointerX) / 2;\n this.anchorY = (firstPointerY + secondPointerY) / 2;\n\n //Angle diff should be positive when rotating in clockwise direction\n const angle: number = -Math.atan2(vectorY, vectorX);\n\n this.rotation = Number.isNaN(this.previousAngle)\n ? 0\n : this.previousAngle - angle;\n\n this.previousAngle = angle;\n\n if (this.rotation > Math.PI) {\n this.rotation -= Math.PI;\n } else if (this.rotation < -Math.PI) {\n this.rotation += Math.PI;\n }\n\n if (this.rotation > Math.PI / 2) {\n this.rotation -= Math.PI;\n } else if (this.rotation < -Math.PI / 2) {\n this.rotation += Math.PI;\n }\n }\n\n private finish(): void {\n if (!this.isInProgress) {\n return;\n }\n\n this.isInProgress = false;\n this.keyPointers = [NaN, NaN];\n this.onRotationEnd(this);\n }\n\n private setKeyPointers(tracker: PointerTracker): void {\n if (this.keyPointers[0] && this.keyPointers[1]) {\n return;\n }\n\n const pointerIDs: IterableIterator<number> = tracker.getData().keys();\n\n this.keyPointers[0] = pointerIDs.next().value as number;\n this.keyPointers[1] = pointerIDs.next().value as number;\n }\n\n public onTouchEvent(event: AdaptedEvent, tracker: PointerTracker): boolean {\n switch (event.eventType) {\n case EventTypes.DOWN:\n this.isInProgress = false;\n break;\n\n case EventTypes.ADDITIONAL_POINTER_DOWN:\n if (this.isInProgress) {\n break;\n }\n this.isInProgress = true;\n\n this.previousTime = event.time;\n this.previousAngle = NaN;\n\n this.setKeyPointers(tracker);\n\n this.updateCurrent(event, tracker);\n this.onRotationBegin(this);\n break;\n\n case EventTypes.MOVE:\n if (!this.isInProgress) {\n break;\n }\n\n this.updateCurrent(event, tracker);\n this.onRotation(this);\n\n break;\n\n case EventTypes.ADDITIONAL_POINTER_UP:\n if (!this.isInProgress) {\n break;\n }\n\n if (this.keyPointers.indexOf(event.pointerId) >= 0) {\n this.finish();\n }\n\n break;\n\n case EventTypes.UP:\n if (this.isInProgress) {\n this.finish();\n }\n break;\n }\n\n return true;\n }\n\n public getTimeDelta(): number {\n return this.currentTime + this.previousTime;\n }\n\n public getAnchorX(): number {\n return this.anchorX;\n }\n\n public getAnchorY(): number {\n return this.anchorY;\n }\n\n public getRotation(): number {\n return this.rotation;\n }\n\n public reset(): void {\n this.keyPointers = [NaN, NaN];\n this.isInProgress = false;\n }\n}\n"]}
|
@@ -47,7 +47,6 @@ class ScaleGestureDetector {
|
|
47
47
|
}
|
48
48
|
|
49
49
|
onTouchEvent(event, tracker) {
|
50
|
-
this.adaptEvent(event, tracker);
|
51
50
|
this.currentTime = event.time;
|
52
51
|
const action = event.eventType;
|
53
52
|
const numOfPointers = tracker.getTrackedPointersCount();
|
@@ -55,7 +54,7 @@ class ScaleGestureDetector {
|
|
55
54
|
|
56
55
|
if (action === _interfaces.EventTypes.DOWN || streamComplete) {
|
57
56
|
if (this.inProgress) {
|
58
|
-
this.onScaleEnd(this
|
57
|
+
this.onScaleEnd(this);
|
59
58
|
this.inProgress = false;
|
60
59
|
this.initialSpan = 0;
|
61
60
|
}
|
@@ -96,7 +95,7 @@ class ScaleGestureDetector {
|
|
96
95
|
this.focusY = focusY;
|
97
96
|
|
98
97
|
if (this.inProgress && (span < this.minSpan || configChanged)) {
|
99
|
-
this.onScaleEnd(this
|
98
|
+
this.onScaleEnd(this);
|
100
99
|
this.inProgress = false;
|
101
100
|
this.initialSpan = span;
|
102
101
|
}
|
@@ -118,7 +117,7 @@ class ScaleGestureDetector {
|
|
118
117
|
|
119
118
|
this.currentSpan = span;
|
120
119
|
|
121
|
-
if (this.inProgress && !this.onScale(this
|
120
|
+
if (this.inProgress && !this.onScale(this)) {
|
122
121
|
return true;
|
123
122
|
}
|
124
123
|
|
@@ -127,16 +126,6 @@ class ScaleGestureDetector {
|
|
127
126
|
return true;
|
128
127
|
}
|
129
128
|
|
130
|
-
adaptEvent(event, tracker) {
|
131
|
-
if (tracker.getTrackedPointersCount() > 1 && event.eventType === _interfaces.EventTypes.DOWN) {
|
132
|
-
event.eventType = _interfaces.EventTypes.ADDITIONAL_POINTER_DOWN;
|
133
|
-
}
|
134
|
-
|
135
|
-
if (tracker.getTrackedPointersCount() > 1 && event.eventType === _interfaces.EventTypes.UP) {
|
136
|
-
event.eventType = _interfaces.EventTypes.ADDITIONAL_POINTER_UP;
|
137
|
-
}
|
138
|
-
}
|
139
|
-
|
140
129
|
getCurrentSpan() {
|
141
130
|
return this.currentSpan;
|
142
131
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["ScaleGestureDetector.ts"],"names":["ScaleGestureDetector","constructor","callbacks","onScaleBegin","onScale","onScaleEnd","spanSlop","DEFAULT_TOUCH_SLOP","minSpan","onTouchEvent","event","tracker","
|
1
|
+
{"version":3,"sources":["ScaleGestureDetector.ts"],"names":["ScaleGestureDetector","constructor","callbacks","onScaleBegin","onScale","onScaleEnd","spanSlop","DEFAULT_TOUCH_SLOP","minSpan","onTouchEvent","event","tracker","currentTime","time","action","eventType","numOfPointers","getTrackedPointersCount","streamComplete","EventTypes","UP","ADDITIONAL_POINTER_UP","CANCEL","DOWN","inProgress","initialSpan","configChanged","ADDITIONAL_POINTER_DOWN","pointerUp","ignoredPointer","pointerId","undefined","div","sumX","getSumX","sumY","getSumY","focusX","focusY","devSumX","devSumY","getData","forEach","value","key","Math","abs","lastX","lastY","devX","devY","spanX","spanY","span","hypot","wasInProgress","prevSpan","currentSpan","prevTime","MOVE","getCurrentSpan","getFocusX","getFocusY","getTimeDelta","getScaleFactor"],"mappings":"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","sourcesContent":["import { DEFAULT_TOUCH_SLOP } from '../constants';\nimport { AdaptedEvent, EventTypes } from '../interfaces';\n\nimport PointerTracker from '../tools/PointerTracker';\n\nexport interface ScaleGestureListener {\n onScaleBegin: (detector: ScaleGestureDetector) => boolean;\n onScale: (detector: ScaleGestureDetector) => boolean;\n onScaleEnd: (detector: ScaleGestureDetector) => void;\n}\n\nexport default class ScaleGestureDetector implements ScaleGestureListener {\n public onScaleBegin: (detector: ScaleGestureDetector) => boolean;\n public onScale: (detector: ScaleGestureDetector) => boolean;\n public onScaleEnd: (detector: ScaleGestureDetector) => void;\n\n private focusX!: number;\n private focusY!: number;\n\n private currentSpan!: number;\n private prevSpan!: number;\n private initialSpan!: number;\n\n private currentTime!: number;\n private prevTime!: number;\n\n private inProgress = false;\n\n private spanSlop: number;\n private minSpan: number;\n\n public constructor(callbacks: ScaleGestureListener) {\n this.onScaleBegin = callbacks.onScaleBegin;\n this.onScale = callbacks.onScale;\n this.onScaleEnd = callbacks.onScaleEnd;\n\n this.spanSlop = DEFAULT_TOUCH_SLOP * 2;\n this.minSpan = 0;\n }\n\n public onTouchEvent(event: AdaptedEvent, tracker: PointerTracker): boolean {\n this.currentTime = event.time;\n\n const action: EventTypes = event.eventType;\n const numOfPointers = tracker.getTrackedPointersCount();\n\n const streamComplete: boolean =\n action === EventTypes.UP ||\n action === EventTypes.ADDITIONAL_POINTER_UP ||\n action === EventTypes.CANCEL;\n\n if (action === EventTypes.DOWN || streamComplete) {\n if (this.inProgress) {\n this.onScaleEnd(this);\n this.inProgress = false;\n this.initialSpan = 0;\n }\n\n if (streamComplete) {\n return true;\n }\n }\n\n const configChanged: boolean =\n action === EventTypes.DOWN ||\n action === EventTypes.ADDITIONAL_POINTER_UP ||\n action === EventTypes.ADDITIONAL_POINTER_DOWN;\n\n const pointerUp = action === EventTypes.ADDITIONAL_POINTER_UP;\n\n const ignoredPointer: number | undefined = pointerUp\n ? event.pointerId\n : undefined;\n\n //Determine focal point\n\n const div: number = pointerUp ? numOfPointers - 1 : numOfPointers;\n\n const sumX = tracker.getSumX(ignoredPointer);\n const sumY = tracker.getSumY(ignoredPointer);\n\n const focusX = sumX / div;\n const focusY = sumY / div;\n\n //Determine average deviation from focal point\n\n let devSumX = 0;\n let devSumY = 0;\n\n tracker.getData().forEach((value, key) => {\n if (key === ignoredPointer) {\n return;\n }\n\n devSumX += Math.abs(value.lastX - focusX);\n devSumY += Math.abs(value.lastY - focusY);\n });\n\n const devX: number = devSumX / div;\n const devY: number = devSumY / div;\n\n const spanX: number = devX * 2;\n const spanY: number = devY * 2;\n\n const span = Math.hypot(spanX, spanY);\n\n //Begin/end events\n const wasInProgress: boolean = this.inProgress;\n this.focusX = focusX;\n this.focusY = focusY;\n\n if (this.inProgress && (span < this.minSpan || configChanged)) {\n this.onScaleEnd(this);\n this.inProgress = false;\n this.initialSpan = span;\n }\n\n if (configChanged) {\n this.initialSpan = this.prevSpan = this.currentSpan = span;\n }\n\n if (\n !this.inProgress &&\n span >= this.minSpan &&\n (wasInProgress || Math.abs(span - this.initialSpan) > this.spanSlop)\n ) {\n this.prevSpan = this.currentSpan = span;\n this.prevTime = this.currentTime;\n this.inProgress = this.onScaleBegin(this);\n }\n\n //Handle motion\n if (action !== EventTypes.MOVE) {\n return true;\n }\n\n this.currentSpan = span;\n\n if (this.inProgress && !this.onScale(this)) {\n return true;\n }\n\n this.prevSpan = this.currentSpan;\n this.prevTime = this.currentTime;\n\n return true;\n }\n\n public getCurrentSpan(): number {\n return this.currentSpan;\n }\n\n public getFocusX(): number {\n return this.focusX;\n }\n\n public getFocusY(): number {\n return this.focusY;\n }\n\n public getTimeDelta(): number {\n return this.currentTime - this.prevTime;\n }\n\n public getScaleFactor(numOfPointers: number): number {\n if (numOfPointers < 2) {\n return 1;\n }\n\n return this.prevSpan > 0 ? this.currentSpan / this.prevSpan : 1;\n }\n}\n"]}
|