react-native-gesture-handler 2.7.0 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +10 -5
- package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +3 -3
- package/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +7 -7
- package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +3 -3
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/FlingGestureHandler.kt +12 -9
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandler.kt +39 -31
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerInteractionController.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerOrchestrator.kt +28 -19
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerRegistry.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureUtils.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/LongPressGestureHandler.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ManualGestureHandler.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/NativeViewGestureHandler.kt +5 -5
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/OnTouchEventListener.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PanGestureHandler.kt +7 -5
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PinchGestureHandler.kt +11 -4
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PointerEventsConfig.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureDetector.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureHandler.kt +7 -2
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ScaleGestureDetector.java +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/TapGestureHandler.kt +3 -3
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ViewConfigurationHelper.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/react}/Extensions.kt +3 -3
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +7 -6
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +1 -5
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +6 -6
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +3 -3
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +35 -14
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +8 -6
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +0 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +4 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +7 -7
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +5 -5
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +2 -2
- package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +5 -5
- package/ios/Handlers/RNManualHandler.m +24 -8
- package/ios/RNGestureHandlerButtonComponentView.mm +7 -8
- package/ios/RNGestureHandlerManager.mm +176 -178
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.windows.js +156 -0
- package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -0
- package/lib/commonjs/components/DrawerLayout.js +1 -0
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/commonjs/getShadowNodeFromRef.js +2 -2
- package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js +5 -2
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerTypesCompat.js +4 -0
- package/lib/commonjs/handlers/gestures/GestureDetector.js +26 -12
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureComposition.js +15 -4
- package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -1
- package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +18 -15
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +36 -7
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +2 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/ManualGestureHandler.js +15 -0
- package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
- package/lib/commonjs/web_hammer/NodeManager.js +4 -1
- package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
- package/lib/commonjs/web_hammer/PanGestureHandler.js +25 -6
- package/lib/commonjs/web_hammer/PanGestureHandler.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.windows.js +117 -0
- package/lib/module/RNGestureHandlerModule.windows.js.map +1 -0
- package/lib/module/components/DrawerLayout.js +1 -0
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/module/getShadowNodeFromRef.js +2 -2
- package/lib/module/getShadowNodeFromRef.js.map +1 -1
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js +5 -2
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestureHandlerTypesCompat.js +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +26 -12
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureComposition.js +15 -4
- package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
- package/lib/module/jestUtils/jestUtils.js.map +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +18 -15
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +36 -6
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js +2 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/ManualGestureHandler.js +15 -0
- package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -5
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +0 -5
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PinchGestureHandler.js +0 -1
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/RotationGestureHandler.js +0 -1
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +0 -1
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web_hammer/GestureHandler.js.map +1 -1
- package/lib/module/web_hammer/NodeManager.js +4 -1
- package/lib/module/web_hammer/NodeManager.js.map +1 -1
- package/lib/module/web_hammer/PanGestureHandler.js +25 -6
- package/lib/module/web_hammer/PanGestureHandler.js.map +1 -1
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.windows.d.ts +48 -0
- package/lib/typescript/components/DrawerLayout.d.ts +7 -0
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
- package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -1
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -1
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +3 -1
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +3 -1
- package/lib/typescript/web/interfaces.d.ts +3 -1
- package/lib/typescript/web/tools/NodeManager.d.ts +2 -2
- package/package.json +14 -10
- package/src/RNGestureHandlerModule.macos.ts +2 -2
- package/src/RNGestureHandlerModule.web.ts +2 -2
- package/src/RNGestureHandlerModule.windows.ts +140 -0
- package/src/components/DrawerLayout.tsx +14 -8
- package/src/components/Swipeable.tsx +2 -4
- package/src/components/touchables/TouchableOpacity.tsx +1 -1
- package/src/getShadowNodeFromRef.ts +3 -3
- package/src/handlers/createHandler.tsx +13 -15
- package/src/handlers/gestureHandlerCommon.ts +9 -4
- package/src/handlers/gestureHandlerTypesCompat.ts +34 -17
- package/src/handlers/gestures/GestureDetector.tsx +46 -19
- package/src/handlers/gestures/eventReceiver.ts +2 -1
- package/src/handlers/gestures/gesture.ts +8 -12
- package/src/handlers/gestures/gestureComposition.ts +19 -6
- package/src/jestUtils/jestUtils.ts +3 -4
- package/src/web/detectors/RotationGestureDetector.ts +2 -1
- package/src/web/handlers/FlingGestureHandler.ts +28 -20
- package/src/web/handlers/GestureHandler.ts +42 -17
- package/src/web/handlers/LongPressGestureHandler.ts +2 -2
- package/src/web/handlers/ManualGestureHandler.ts +10 -1
- package/src/web/handlers/NativeViewGestureHandler.ts +0 -5
- package/src/web/handlers/PanGestureHandler.ts +0 -6
- package/src/web/handlers/PinchGestureHandler.ts +0 -2
- package/src/web/handlers/RotationGestureHandler.ts +2 -5
- package/src/web/handlers/TapGestureHandler.ts +0 -2
- package/src/web/interfaces.ts +3 -0
- package/src/web/tools/InteractionManager.ts +2 -3
- package/src/web_hammer/GestureHandler.ts +6 -8
- package/src/web_hammer/NodeManager.ts +3 -1
- package/src/web_hammer/PanGestureHandler.ts +12 -6
- package/android/lib/build.gradle +0 -28
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["gesture.ts"],"names":["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
|
+
{"version":3,"sources":["gesture.ts"],"names":["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] =\n this.isWorklet(callback);\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] =\n this.isWorklet(callback);\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] =\n this.isWorklet(callback);\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] =\n this.isWorklet(callback);\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"]}
|
|
@@ -66,10 +66,18 @@ exports.ComposedGesture = ComposedGesture;
|
|
|
66
66
|
|
|
67
67
|
class SimultaneousGesture extends ComposedGesture {
|
|
68
68
|
prepare() {
|
|
69
|
-
|
|
69
|
+
// this piece of magic works something like this:
|
|
70
|
+
// for every gesture in the array
|
|
71
|
+
const simultaneousArrays = this.gestures.map(gesture => // we take the array it's in
|
|
72
|
+
this.gestures // and make a copy without it
|
|
73
|
+
.filter(x => x !== gesture) // then we flatmap the result to get list of raw (not composed) gestures
|
|
74
|
+
// this way we don't make the gestures simultaneous with themselves, which is
|
|
75
|
+
// important when the gesture is `ExclusiveGesture` - we don't want to make
|
|
76
|
+
// exclusive gestures simultaneous
|
|
77
|
+
.flatMap(x => x.toGestureArray()));
|
|
70
78
|
|
|
71
|
-
for (
|
|
72
|
-
this.prepareSingleGesture(
|
|
79
|
+
for (let i = 0; i < this.gestures.length; i++) {
|
|
80
|
+
this.prepareSingleGesture(this.gestures[i], simultaneousArrays[i], this.requireGesturesToFail);
|
|
73
81
|
}
|
|
74
82
|
}
|
|
75
83
|
|
|
@@ -79,11 +87,14 @@ exports.SimultaneousGesture = SimultaneousGesture;
|
|
|
79
87
|
|
|
80
88
|
class ExclusiveGesture extends ComposedGesture {
|
|
81
89
|
prepare() {
|
|
90
|
+
// transforms the array of gestures into array of grouped raw (not composed) gestures
|
|
91
|
+
// i.e. [gesture1, gesture2, ComposedGesture(gesture3, gesture4)] -> [[gesture1], [gesture2], [gesture3, gesture4]]
|
|
82
92
|
const gestureArrays = this.gestures.map(gesture => gesture.toGestureArray());
|
|
83
93
|
let requireToFail = [];
|
|
84
94
|
|
|
85
95
|
for (let i = 0; i < this.gestures.length; i++) {
|
|
86
|
-
this.prepareSingleGesture(this.gestures[i], this.simultaneousGestures, this.requireGesturesToFail.concat(requireToFail));
|
|
96
|
+
this.prepareSingleGesture(this.gestures[i], this.simultaneousGestures, this.requireGesturesToFail.concat(requireToFail)); // every group gets to wait for all groups before it
|
|
97
|
+
|
|
87
98
|
requireToFail = requireToFail.concat(gestureArrays[i]);
|
|
88
99
|
}
|
|
89
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["gestureComposition.ts"],"names":["extendRelation","currentRelation","extendWith","undefined","ComposedGesture","Gesture","constructor","gestures","prepareSingleGesture","gesture","simultaneousGestures","requireGesturesToFail","BaseGesture","newConfig","config","simultaneousWith","requireToFail","prepare","initialize","toGestureArray","flatMap","SimultaneousGesture","
|
|
1
|
+
{"version":3,"sources":["gestureComposition.ts"],"names":["extendRelation","currentRelation","extendWith","undefined","ComposedGesture","Gesture","constructor","gestures","prepareSingleGesture","gesture","simultaneousGestures","requireGesturesToFail","BaseGesture","newConfig","config","simultaneousWith","requireToFail","prepare","initialize","toGestureArray","flatMap","SimultaneousGesture","simultaneousArrays","map","filter","x","i","length","ExclusiveGesture","gestureArrays","concat"],"mappings":";;;;;;;AAAA;;;;AAEA,SAASA,cAAT,CACEC,eADF,EAEEC,UAFF,EAGE;AACA,MAAID,eAAe,KAAKE,SAAxB,EAAmC;AACjC,WAAO,CAAC,GAAGD,UAAJ,CAAP;AACD,GAFD,MAEO;AACL,WAAO,CAAC,GAAGD,eAAJ,EAAqB,GAAGC,UAAxB,CAAP;AACD;AACF;;AAEM,MAAME,eAAN,SAA8BC,gBAA9B,CAAsC;AAK3CC,EAAAA,WAAW,CAAC,GAAGC,QAAJ,EAAyB;AAClC;;AADkC,sCAJJ,EAII;;AAAA,kDAHY,EAGZ;;AAAA,mDAFa,EAEb;;AAElC,SAAKA,QAAL,GAAgBA,QAAhB;AACD;;AAESC,EAAAA,oBAAoB,CAC5BC,OAD4B,EAE5BC,oBAF4B,EAG5BC,qBAH4B,EAI5B;AACA,QAAIF,OAAO,YAAYG,oBAAvB,EAAoC;AAClC,YAAMC,SAAS,GAAG,EAAE,GAAGJ,OAAO,CAACK;AAAb,OAAlB;AAEAD,MAAAA,SAAS,CAACE,gBAAV,GAA6Bf,cAAc,CACzCa,SAAS,CAACE,gBAD+B,EAEzCL,oBAFyC,CAA3C;AAIAG,MAAAA,SAAS,CAACG,aAAV,GAA0BhB,cAAc,CACtCa,SAAS,CAACG,aAD4B,EAEtCL,qBAFsC,CAAxC;AAKAF,MAAAA,OAAO,CAACK,MAAR,GAAiBD,SAAjB;AACD,KAbD,MAaO,IAAIJ,OAAO,YAAYL,eAAvB,EAAwC;AAC7CK,MAAAA,OAAO,CAACC,oBAAR,GAA+BA,oBAA/B;AACAD,MAAAA,OAAO,CAACE,qBAAR,GAAgCA,qBAAhC;AACAF,MAAAA,OAAO,CAACQ,OAAR;AACD;AACF;;AAEDA,EAAAA,OAAO,GAAG;AACR,SAAK,MAAMR,OAAX,IAAsB,KAAKF,QAA3B,EAAqC;AACnC,WAAKC,oBAAL,CACEC,OADF,EAEE,KAAKC,oBAFP,EAGE,KAAKC,qBAHP;AAKD;AACF;;AAEDO,EAAAA,UAAU,GAAG;AACX,SAAK,MAAMT,OAAX,IAAsB,KAAKF,QAA3B,EAAqC;AACnCE,MAAAA,OAAO,CAACS,UAAR;AACD;AACF;;AAEDC,EAAAA,cAAc,GAAkB;AAC9B,WAAO,KAAKZ,QAAL,CAAca,OAAd,CAAuBX,OAAD,IAAaA,OAAO,CAACU,cAAR,EAAnC,CAAP;AACD;;AArD0C;;;;AAwDtC,MAAME,mBAAN,SAAkCjB,eAAlC,CAAkD;AACvDa,EAAAA,OAAO,GAAG;AACR;AACA;AACA,UAAMK,kBAAkB,GAAG,KAAKf,QAAL,CAAcgB,GAAd,CAAmBd,OAAD,IAC3C;AACA,SAAKF,QAAL,CACE;AADF,KAEGiB,MAFH,CAEWC,CAAD,IAAOA,CAAC,KAAKhB,OAFvB,EAGE;AACA;AACA;AACA;AANF,KAOGW,OAPH,CAOYK,CAAD,IAAOA,CAAC,CAACN,cAAF,EAPlB,CAFyB,CAA3B;;AAYA,SAAK,IAAIO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKnB,QAAL,CAAcoB,MAAlC,EAA0CD,CAAC,EAA3C,EAA+C;AAC7C,WAAKlB,oBAAL,CACE,KAAKD,QAAL,CAAcmB,CAAd,CADF,EAEEJ,kBAAkB,CAACI,CAAD,CAFpB,EAGE,KAAKf,qBAHP;AAKD;AACF;;AAvBsD;;;;AA0BlD,MAAMiB,gBAAN,SAA+BxB,eAA/B,CAA+C;AACpDa,EAAAA,OAAO,GAAG;AACR;AACA;AACA,UAAMY,aAAa,GAAG,KAAKtB,QAAL,CAAcgB,GAAd,CAAmBd,OAAD,IACtCA,OAAO,CAACU,cAAR,EADoB,CAAtB;AAIA,QAAIH,aAA4B,GAAG,EAAnC;;AAEA,SAAK,IAAIU,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKnB,QAAL,CAAcoB,MAAlC,EAA0CD,CAAC,EAA3C,EAA+C;AAC7C,WAAKlB,oBAAL,CACE,KAAKD,QAAL,CAAcmB,CAAd,CADF,EAEE,KAAKhB,oBAFP,EAGE,KAAKC,qBAAL,CAA2BmB,MAA3B,CAAkCd,aAAlC,CAHF,EAD6C,CAO7C;;AACAA,MAAAA,aAAa,GAAGA,aAAa,CAACc,MAAd,CAAqBD,aAAa,CAACH,CAAD,CAAlC,CAAhB;AACD;AACF;;AApBmD","sourcesContent":["import { BaseGesture, Gesture, GestureRef, GestureType } from './gesture';\n\nfunction extendRelation(\n currentRelation: GestureRef[] | undefined,\n extendWith: GestureType[]\n) {\n if (currentRelation === undefined) {\n return [...extendWith];\n } else {\n return [...currentRelation, ...extendWith];\n }\n}\n\nexport class ComposedGesture extends Gesture {\n protected gestures: Gesture[] = [];\n protected simultaneousGestures: GestureType[] = [];\n protected requireGesturesToFail: GestureType[] = [];\n\n constructor(...gestures: Gesture[]) {\n super();\n this.gestures = gestures;\n }\n\n protected prepareSingleGesture(\n gesture: Gesture,\n simultaneousGestures: GestureType[],\n requireGesturesToFail: GestureType[]\n ) {\n if (gesture instanceof BaseGesture) {\n const newConfig = { ...gesture.config };\n\n newConfig.simultaneousWith = extendRelation(\n newConfig.simultaneousWith,\n simultaneousGestures\n );\n newConfig.requireToFail = extendRelation(\n newConfig.requireToFail,\n requireGesturesToFail\n );\n\n gesture.config = newConfig;\n } else if (gesture instanceof ComposedGesture) {\n gesture.simultaneousGestures = simultaneousGestures;\n gesture.requireGesturesToFail = requireGesturesToFail;\n gesture.prepare();\n }\n }\n\n prepare() {\n for (const gesture of this.gestures) {\n this.prepareSingleGesture(\n gesture,\n this.simultaneousGestures,\n this.requireGesturesToFail\n );\n }\n }\n\n initialize() {\n for (const gesture of this.gestures) {\n gesture.initialize();\n }\n }\n\n toGestureArray(): GestureType[] {\n return this.gestures.flatMap((gesture) => gesture.toGestureArray());\n }\n}\n\nexport class SimultaneousGesture extends ComposedGesture {\n prepare() {\n // this piece of magic works something like this:\n // for every gesture in the array\n const simultaneousArrays = this.gestures.map((gesture) =>\n // we take the array it's in\n this.gestures\n // and make a copy without it\n .filter((x) => x !== gesture)\n // then we flatmap the result to get list of raw (not composed) gestures\n // this way we don't make the gestures simultaneous with themselves, which is\n // important when the gesture is `ExclusiveGesture` - we don't want to make\n // exclusive gestures simultaneous\n .flatMap((x) => x.toGestureArray())\n );\n\n for (let i = 0; i < this.gestures.length; i++) {\n this.prepareSingleGesture(\n this.gestures[i],\n simultaneousArrays[i],\n this.requireGesturesToFail\n );\n }\n }\n}\n\nexport class ExclusiveGesture extends ComposedGesture {\n prepare() {\n // transforms the array of gestures into array of grouped raw (not composed) gestures\n // i.e. [gesture1, gesture2, ComposedGesture(gesture3, gesture4)] -> [[gesture1], [gesture2], [gesture3, gesture4]]\n const gestureArrays = this.gestures.map((gesture) =>\n gesture.toGestureArray()\n );\n\n let requireToFail: GestureType[] = [];\n\n for (let i = 0; i < this.gestures.length; i++) {\n this.prepareSingleGesture(\n this.gestures[i],\n this.simultaneousGestures,\n this.requireGesturesToFail.concat(requireToFail)\n );\n\n // every group gets to wait for all groups before it\n requireToFail = requireToFail.concat(gestureArrays[i]);\n }\n }\n}\n\nexport type ComposedGestureType = InstanceType<typeof ComposedGesture>;\nexport type RaceGestureType = ComposedGestureType;\nexport type SimultaneousGestureType = InstanceType<typeof SimultaneousGesture>;\nexport type ExclusiveGestureType = InstanceType<typeof ExclusiveGesture>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["jestUtils.ts"],"names":["fireEvent","_element","_name","_data","require","_e","handlersDefaultEvents","flingHandlerName","x","y","absoluteX","absoluteY","numberOfPointers","forceTouchHandlerName","force","longPressHandlerName","duration","nativeViewHandlerName","pointerInside","panHandlerName","translationX","translationY","velocityX","velocityY","pinchHandlerName","focalX","focalY","scale","velocity","rotationHandlerName","anchorX","anchorY","rotation","tapHandlerName","isGesture","componentOrGesture","BaseGesture","wrapWithNativeEvent","event","nativeEvent","fillOldStateChanges","previousEvent","currentEvent","isFirstEvent","oldState","State","UNDETERMINED","isGestureStateEvent","state","validateStateTransitions","stringify","JSON","errorMsgWithBothEvents","description","errorMsgWithCurrentEvent","BEGAN","fillMissingDefaultsFor","handlerType","handlerTag","isDiscreteHandler","fillMissingStatesTransitions","events","_events","lastEvent","length","firstEvent","shouldDuplicateFirstEvent","hasState","duplicated","unshift","shouldDuplicateLastEvent","END","FAILED","CANCELLED","push","isWithoutState","noEventsLeft","trueFn","fillEventsForCurrentState","shouldConsumeEvent","shouldTransitionToNextState","peekCurrentEvent","peekNextEvent","consumeCurrentEvent","shift","nextEvent","currentRequiredState","REQUIRED_EVENTS","currentStateIdx","eventData","shouldUseEvent","transformedEvents","ACTIVE","hasAllStates","iterations","nextRequiredState","e","getHandlerData","gesture","emitEvent","eventName","args","DeviceEventEmitter","emit","handlerName","gestureHandlerComponent","props","fireGestureHandler","eventList","_","map","lastSentEvent","hasChangedState","getByGestureTestId","testID","handler","Error"],"mappings":"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","sourcesContent":["import invariant from 'invariant';\nimport { DeviceEventEmitter } from 'react-native';\nimport { ReactTestInstance } from 'react-test-renderer';\nimport {\n FlingGestureHandler,\n FlingGestureHandlerEventPayload,\n flingHandlerName,\n} from '../handlers/FlingGestureHandler';\nimport {\n ForceTouchGestureHandler,\n ForceTouchGestureHandlerEventPayload,\n forceTouchHandlerName,\n} from '../handlers/ForceTouchGestureHandler';\nimport {\n BaseGestureHandlerProps,\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../handlers/gestureHandlerCommon';\nimport { FlingGesture } from '../handlers/gestures/flingGesture';\nimport { ForceTouchGesture } from '../handlers/gestures/forceTouchGesture';\nimport { BaseGesture, GestureType } from '../handlers/gestures/gesture';\nimport { LongPressGesture } from '../handlers/gestures/longPressGesture';\nimport { NativeGesture } from '../handlers/gestures/nativeGesture';\nimport { PanGesture } from '../handlers/gestures/panGesture';\nimport { PinchGesture } from '../handlers/gestures/pinchGesture';\nimport { RotationGesture } from '../handlers/gestures/rotationGesture';\nimport { TapGesture } from '../handlers/gestures/tapGesture';\nimport { findHandlerByTestID } from '../handlers/handlersRegistry';\nimport {\n LongPressGestureHandler,\n LongPressGestureHandlerEventPayload,\n longPressHandlerName,\n} from '../handlers/LongPressGestureHandler';\nimport {\n NativeViewGestureHandler,\n NativeViewGestureHandlerPayload,\n nativeViewHandlerName,\n} from '../handlers/NativeViewGestureHandler';\nimport {\n PanGestureHandler,\n PanGestureHandlerEventPayload,\n panHandlerName,\n} from '../handlers/PanGestureHandler';\nimport {\n PinchGestureHandler,\n PinchGestureHandlerEventPayload,\n pinchHandlerName,\n} from '../handlers/PinchGestureHandler';\nimport {\n RotationGestureHandler,\n RotationGestureHandlerEventPayload,\n rotationHandlerName,\n} from '../handlers/RotationGestureHandler';\nimport {\n TapGestureHandler,\n TapGestureHandlerEventPayload,\n tapHandlerName,\n} from '../handlers/TapGestureHandler';\nimport { State } from '../State';\nimport { hasProperty, withPrevAndCurrent } from '../utils';\n\n// load fireEvent conditionally, so RNGH may be used in setups without testing-library\nlet fireEvent = (\n _element: ReactTestInstance,\n _name: string,\n ..._data: any[]\n) => {\n // NOOP\n};\n\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n fireEvent = require('@testing-library/react-native').fireEvent;\n} catch (_e) {\n // do nothing if not available\n}\n\ntype GestureHandlerTestEvent<\n TEventPayload extends Record<string, unknown> = Record<string, unknown>\n> = (\n | GestureEvent<TEventPayload>\n | HandlerStateChangeEvent<TEventPayload>\n)['nativeEvent'];\n\ntype HandlerNames = keyof DefaultEventsMapping;\n\ntype WithNumberOfPointers<T> = {\n [P in keyof T]: T[P] & { numberOfPointers: number };\n};\ntype DefaultEventsMapping = WithNumberOfPointers<{\n [flingHandlerName]: FlingGestureHandlerEventPayload;\n [forceTouchHandlerName]: ForceTouchGestureHandlerEventPayload;\n [longPressHandlerName]: LongPressGestureHandlerEventPayload;\n [nativeViewHandlerName]: NativeViewGestureHandlerPayload;\n [panHandlerName]: PanGestureHandlerEventPayload;\n [pinchHandlerName]: PinchGestureHandlerEventPayload;\n [rotationHandlerName]: RotationGestureHandlerEventPayload;\n [tapHandlerName]: TapGestureHandlerEventPayload;\n}>;\n\nconst handlersDefaultEvents: DefaultEventsMapping = {\n [flingHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n numberOfPointers: 1,\n },\n [forceTouchHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n force: 1,\n numberOfPointers: 1,\n },\n [longPressHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n duration: 100,\n numberOfPointers: 1,\n },\n [nativeViewHandlerName]: {\n pointerInside: true,\n numberOfPointers: 1,\n },\n [panHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n translationX: 100,\n translationY: 0,\n velocityX: 3,\n velocityY: 0,\n numberOfPointers: 1,\n },\n [pinchHandlerName]: {\n focalX: 0,\n focalY: 0,\n scale: 2,\n velocity: 1,\n numberOfPointers: 2,\n },\n [rotationHandlerName]: {\n anchorX: 0,\n anchorY: 0,\n rotation: 3.14,\n velocity: 2,\n numberOfPointers: 2,\n },\n [tapHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n numberOfPointers: 1,\n },\n};\n\nfunction isGesture(\n componentOrGesture: ReactTestInstance | GestureType\n): componentOrGesture is GestureType {\n return componentOrGesture instanceof BaseGesture;\n}\n\ninterface WrappedGestureHandlerTestEvent {\n nativeEvent: GestureHandlerTestEvent;\n}\nfunction wrapWithNativeEvent(\n event: GestureHandlerTestEvent\n): WrappedGestureHandlerTestEvent {\n return { nativeEvent: event };\n}\n\nfunction fillOldStateChanges(\n previousEvent: GestureHandlerTestEvent | null,\n currentEvent: Omit<GestureHandlerTestEvent, 'oldState'>\n): GestureHandlerTestEvent {\n const isFirstEvent = previousEvent === null;\n if (isFirstEvent) {\n return {\n oldState: State.UNDETERMINED,\n ...currentEvent,\n } as GestureHandlerTestEvent;\n }\n\n const isGestureStateEvent = previousEvent.state !== currentEvent.state;\n if (isGestureStateEvent) {\n return {\n oldState: previousEvent?.state,\n ...currentEvent,\n } as GestureHandlerTestEvent;\n } else {\n return currentEvent as GestureHandlerTestEvent;\n }\n}\n\ntype EventWithStates = Partial<\n Pick<GestureHandlerTestEvent, 'oldState' | 'state'>\n>;\nfunction validateStateTransitions(\n previousEvent: EventWithStates | null,\n currentEvent: EventWithStates\n) {\n function stringify(event: Record<string, unknown> | null) {\n return JSON.stringify(event, null, 2);\n }\n function errorMsgWithBothEvents(description: string) {\n return `${description}, invalid event: ${stringify(\n currentEvent\n )}, previous event: ${stringify(previousEvent)}`;\n }\n\n function errorMsgWithCurrentEvent(description: string) {\n return `${description}, invalid event: ${stringify(currentEvent)}`;\n }\n\n invariant(\n hasProperty(currentEvent, 'state'),\n errorMsgWithCurrentEvent('every event must have state')\n );\n\n const isFirstEvent = previousEvent === null;\n if (isFirstEvent) {\n invariant(\n currentEvent.state === State.BEGAN,\n errorMsgWithCurrentEvent('first event must have BEGAN state')\n );\n }\n\n if (previousEvent !== null) {\n if (previousEvent.state !== currentEvent.state) {\n invariant(\n hasProperty(currentEvent, 'oldState'),\n errorMsgWithCurrentEvent(\n 'when state changes, oldState field should be present'\n )\n );\n invariant(\n currentEvent.oldState === previousEvent.state,\n errorMsgWithBothEvents(\n \"when state changes, oldState should be the same as previous event' state\"\n )\n );\n }\n }\n\n return currentEvent;\n}\n\ntype EventWithoutStates = Omit<GestureHandlerTestEvent, 'oldState' | 'state'>;\ninterface HandlerInfo {\n handlerType: HandlerNames;\n handlerTag: number;\n}\nfunction fillMissingDefaultsFor({\n handlerType,\n handlerTag,\n}: HandlerInfo): (\n event: Partial<GestureHandlerTestEvent>\n) => EventWithoutStates {\n return (event) => {\n return {\n ...handlersDefaultEvents[handlerType],\n ...event,\n handlerTag,\n };\n };\n}\n\nfunction isDiscreteHandler(handlerType: HandlerNames) {\n return (\n handlerType === 'TapGestureHandler' ||\n handlerType === 'LongPressGestureHandler'\n );\n}\n\nfunction fillMissingStatesTransitions(\n events: EventWithoutStates[],\n isDiscreteHandler: boolean\n): EventWithoutStates[] {\n type Event = EventWithoutStates | null;\n const _events = [...events];\n const lastEvent = _events[_events.length - 1] ?? null;\n const firstEvent = _events[0] ?? null;\n\n const shouldDuplicateFirstEvent =\n !isDiscreteHandler && !hasState(State.BEGAN)(firstEvent);\n if (shouldDuplicateFirstEvent) {\n const duplicated = { ...firstEvent, state: State.BEGAN };\n // @ts-ignore badly typed, property may exist and we don't want to copy it\n delete duplicated.oldState;\n _events.unshift(duplicated);\n }\n\n const shouldDuplicateLastEvent =\n !hasState(State.END)(lastEvent) ||\n !hasState(State.FAILED)(lastEvent) ||\n !hasState(State.CANCELLED)(lastEvent);\n\n if (shouldDuplicateLastEvent) {\n const duplicated = { ...lastEvent, state: State.END };\n // @ts-ignore badly typed, property may exist and we don't want to copy it\n delete duplicated.oldState;\n _events.push(duplicated);\n }\n\n function isWithoutState(event: Event) {\n return event !== null && !hasProperty(event, 'state');\n }\n function hasState(state: State) {\n return (event: Event) => event !== null && event.state === state;\n }\n function noEventsLeft(event: Event) {\n return event === null;\n }\n\n function trueFn() {\n return true;\n }\n interface Args {\n shouldConsumeEvent?: (event: Event) => boolean;\n shouldTransitionToNextState?: (nextEvent: Event) => boolean;\n }\n function fillEventsForCurrentState({\n shouldConsumeEvent = trueFn,\n shouldTransitionToNextState = trueFn,\n }: Args) {\n function peekCurrentEvent(): Event {\n return _events[0] ?? null;\n }\n function peekNextEvent(): Event {\n return _events[1] ?? null;\n }\n function consumeCurrentEvent() {\n _events.shift();\n }\n const currentEvent = peekCurrentEvent();\n const nextEvent = peekNextEvent();\n const currentRequiredState = REQUIRED_EVENTS[currentStateIdx];\n\n let eventData = {};\n const shouldUseEvent = shouldConsumeEvent(currentEvent);\n if (shouldUseEvent) {\n eventData = currentEvent!;\n consumeCurrentEvent();\n }\n transformedEvents.push({ state: currentRequiredState, ...eventData });\n if (shouldTransitionToNextState(nextEvent)) {\n currentStateIdx++;\n }\n }\n\n const REQUIRED_EVENTS = [State.BEGAN, State.ACTIVE, State.END];\n\n let currentStateIdx = 0;\n const transformedEvents: EventWithoutStates[] = [];\n let hasAllStates;\n let iterations = 0;\n do {\n const nextRequiredState = REQUIRED_EVENTS[currentStateIdx];\n if (nextRequiredState === State.BEGAN) {\n fillEventsForCurrentState({\n shouldConsumeEvent: (e: Event) =>\n isWithoutState(e) || hasState(State.BEGAN)(e),\n });\n } else if (nextRequiredState === State.ACTIVE) {\n const shouldConsumeEvent = (e: Event) =>\n isWithoutState(e) || hasState(State.ACTIVE)(e);\n const shouldTransitionToNextState = (nextEvent: Event) =>\n noEventsLeft(nextEvent) ||\n hasState(State.END)(nextEvent) ||\n hasState(State.FAILED)(nextEvent) ||\n hasState(State.CANCELLED)(nextEvent);\n\n fillEventsForCurrentState({\n shouldConsumeEvent,\n shouldTransitionToNextState,\n });\n } else if (nextRequiredState === State.END) {\n fillEventsForCurrentState({});\n }\n hasAllStates = currentStateIdx === REQUIRED_EVENTS.length;\n\n invariant(\n iterations++ <= 500,\n 'exceeded max number of iterations, please report a bug in RNGH repository with your test case'\n );\n } while (!hasAllStates);\n\n return transformedEvents;\n}\n\ntype EventEmitter = (\n eventName: string,\n args: { nativeEvent: GestureHandlerTestEvent }\n) => void;\ninterface HandlerData {\n emitEvent: EventEmitter;\n handlerType: HandlerNames;\n handlerTag: number;\n}\nfunction getHandlerData(\n componentOrGesture: ReactTestInstance | GestureType\n): HandlerData {\n if (isGesture(componentOrGesture)) {\n const gesture = componentOrGesture;\n return {\n emitEvent: (eventName, args) => {\n DeviceEventEmitter.emit(eventName, args.nativeEvent);\n },\n handlerType: gesture.handlerName as HandlerNames,\n handlerTag: gesture.handlerTag,\n };\n }\n const gestureHandlerComponent = componentOrGesture;\n return {\n emitEvent: (eventName, args) => {\n fireEvent(gestureHandlerComponent, eventName, args);\n },\n handlerType: gestureHandlerComponent.props.handlerType as HandlerNames,\n handlerTag: gestureHandlerComponent.props.handlerTag as number,\n };\n}\ntype AllGestures =\n | TapGesture\n | PanGesture\n | LongPressGesture\n | RotationGesture\n | PinchGesture\n | FlingGesture\n | ForceTouchGesture\n | NativeGesture;\n\ntype AllHandlers =\n | TapGestureHandler\n | PanGestureHandler\n | LongPressGestureHandler\n | RotationGestureHandler\n | PinchGestureHandler\n | FlingGestureHandler\n | ForceTouchGestureHandler\n | NativeViewGestureHandler;\n\n// prettier-ignore\ntype ClassComponentConstructor<P> = new (props: P) => React.Component<P, any, any>;\n\ntype ExtractPayloadFromProps<T> = T extends BaseGestureHandlerProps<\n infer TPayload\n>\n ? TPayload\n : never;\n\ntype ExtractConfig<T> = T extends BaseGesture<infer TGesturePayload>\n ? TGesturePayload\n : T extends ClassComponentConstructor<infer THandlerProps>\n ? ExtractPayloadFromProps<THandlerProps>\n : Record<string, unknown>;\n\nexport function fireGestureHandler<THandler extends AllGestures | AllHandlers>(\n componentOrGesture: ReactTestInstance | GestureType,\n eventList: Partial<GestureHandlerTestEvent<ExtractConfig<THandler>>>[] = []\n): void {\n const { emitEvent, handlerType, handlerTag } = getHandlerData(\n componentOrGesture\n );\n\n let _ = fillMissingStatesTransitions(\n eventList,\n isDiscreteHandler(handlerType)\n );\n _ = _.map(fillMissingDefaultsFor({ handlerTag, handlerType }));\n _ = withPrevAndCurrent(_, fillOldStateChanges);\n _ = withPrevAndCurrent(_, validateStateTransitions);\n // @ts-ignore TODO\n _ = _.map(wrapWithNativeEvent);\n\n const events = (_ as unknown) as WrappedGestureHandlerTestEvent[];\n\n const firstEvent = events.shift()!;\n\n emitEvent('onGestureHandlerStateChange', firstEvent);\n let lastSentEvent = firstEvent;\n for (const event of events) {\n const hasChangedState =\n lastSentEvent.nativeEvent.state !== event.nativeEvent.state;\n\n if (hasChangedState) {\n emitEvent('onGestureHandlerStateChange', event);\n } else {\n emitEvent('onGestureHandlerEvent', event);\n }\n lastSentEvent = event;\n }\n}\n\nexport function getByGestureTestId(testID: string) {\n const handler = findHandlerByTestID(testID);\n if (handler === null) {\n throw new Error(`Handler with id: '${testID}' cannot be found`);\n }\n return handler;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["jestUtils.ts"],"names":["fireEvent","_element","_name","_data","require","_e","handlersDefaultEvents","flingHandlerName","x","y","absoluteX","absoluteY","numberOfPointers","forceTouchHandlerName","force","longPressHandlerName","duration","nativeViewHandlerName","pointerInside","panHandlerName","translationX","translationY","velocityX","velocityY","pinchHandlerName","focalX","focalY","scale","velocity","rotationHandlerName","anchorX","anchorY","rotation","tapHandlerName","isGesture","componentOrGesture","BaseGesture","wrapWithNativeEvent","event","nativeEvent","fillOldStateChanges","previousEvent","currentEvent","isFirstEvent","oldState","State","UNDETERMINED","isGestureStateEvent","state","validateStateTransitions","stringify","JSON","errorMsgWithBothEvents","description","errorMsgWithCurrentEvent","BEGAN","fillMissingDefaultsFor","handlerType","handlerTag","isDiscreteHandler","fillMissingStatesTransitions","events","_events","lastEvent","length","firstEvent","shouldDuplicateFirstEvent","hasState","duplicated","unshift","shouldDuplicateLastEvent","END","FAILED","CANCELLED","push","isWithoutState","noEventsLeft","trueFn","fillEventsForCurrentState","shouldConsumeEvent","shouldTransitionToNextState","peekCurrentEvent","peekNextEvent","consumeCurrentEvent","shift","nextEvent","currentRequiredState","REQUIRED_EVENTS","currentStateIdx","eventData","shouldUseEvent","transformedEvents","ACTIVE","hasAllStates","iterations","nextRequiredState","e","getHandlerData","gesture","emitEvent","eventName","args","DeviceEventEmitter","emit","handlerName","gestureHandlerComponent","props","fireGestureHandler","eventList","_","map","lastSentEvent","hasChangedState","getByGestureTestId","testID","handler","Error"],"mappings":"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","sourcesContent":["import invariant from 'invariant';\nimport { DeviceEventEmitter } from 'react-native';\nimport { ReactTestInstance } from 'react-test-renderer';\nimport {\n FlingGestureHandler,\n FlingGestureHandlerEventPayload,\n flingHandlerName,\n} from '../handlers/FlingGestureHandler';\nimport {\n ForceTouchGestureHandler,\n ForceTouchGestureHandlerEventPayload,\n forceTouchHandlerName,\n} from '../handlers/ForceTouchGestureHandler';\nimport {\n BaseGestureHandlerProps,\n GestureEvent,\n HandlerStateChangeEvent,\n} from '../handlers/gestureHandlerCommon';\nimport { FlingGesture } from '../handlers/gestures/flingGesture';\nimport { ForceTouchGesture } from '../handlers/gestures/forceTouchGesture';\nimport { BaseGesture, GestureType } from '../handlers/gestures/gesture';\nimport { LongPressGesture } from '../handlers/gestures/longPressGesture';\nimport { NativeGesture } from '../handlers/gestures/nativeGesture';\nimport { PanGesture } from '../handlers/gestures/panGesture';\nimport { PinchGesture } from '../handlers/gestures/pinchGesture';\nimport { RotationGesture } from '../handlers/gestures/rotationGesture';\nimport { TapGesture } from '../handlers/gestures/tapGesture';\nimport { findHandlerByTestID } from '../handlers/handlersRegistry';\nimport {\n LongPressGestureHandler,\n LongPressGestureHandlerEventPayload,\n longPressHandlerName,\n} from '../handlers/LongPressGestureHandler';\nimport {\n NativeViewGestureHandler,\n NativeViewGestureHandlerPayload,\n nativeViewHandlerName,\n} from '../handlers/NativeViewGestureHandler';\nimport {\n PanGestureHandler,\n PanGestureHandlerEventPayload,\n panHandlerName,\n} from '../handlers/PanGestureHandler';\nimport {\n PinchGestureHandler,\n PinchGestureHandlerEventPayload,\n pinchHandlerName,\n} from '../handlers/PinchGestureHandler';\nimport {\n RotationGestureHandler,\n RotationGestureHandlerEventPayload,\n rotationHandlerName,\n} from '../handlers/RotationGestureHandler';\nimport {\n TapGestureHandler,\n TapGestureHandlerEventPayload,\n tapHandlerName,\n} from '../handlers/TapGestureHandler';\nimport { State } from '../State';\nimport { hasProperty, withPrevAndCurrent } from '../utils';\n\n// load fireEvent conditionally, so RNGH may be used in setups without testing-library\nlet fireEvent = (\n _element: ReactTestInstance,\n _name: string,\n ..._data: any[]\n) => {\n // NOOP\n};\n\ntry {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n fireEvent = require('@testing-library/react-native').fireEvent;\n} catch (_e) {\n // do nothing if not available\n}\n\ntype GestureHandlerTestEvent<\n TEventPayload extends Record<string, unknown> = Record<string, unknown>\n> = (\n | GestureEvent<TEventPayload>\n | HandlerStateChangeEvent<TEventPayload>\n)['nativeEvent'];\n\ntype HandlerNames = keyof DefaultEventsMapping;\n\ntype WithNumberOfPointers<T> = {\n [P in keyof T]: T[P] & { numberOfPointers: number };\n};\ntype DefaultEventsMapping = WithNumberOfPointers<{\n [flingHandlerName]: FlingGestureHandlerEventPayload;\n [forceTouchHandlerName]: ForceTouchGestureHandlerEventPayload;\n [longPressHandlerName]: LongPressGestureHandlerEventPayload;\n [nativeViewHandlerName]: NativeViewGestureHandlerPayload;\n [panHandlerName]: PanGestureHandlerEventPayload;\n [pinchHandlerName]: PinchGestureHandlerEventPayload;\n [rotationHandlerName]: RotationGestureHandlerEventPayload;\n [tapHandlerName]: TapGestureHandlerEventPayload;\n}>;\n\nconst handlersDefaultEvents: DefaultEventsMapping = {\n [flingHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n numberOfPointers: 1,\n },\n [forceTouchHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n force: 1,\n numberOfPointers: 1,\n },\n [longPressHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n duration: 100,\n numberOfPointers: 1,\n },\n [nativeViewHandlerName]: {\n pointerInside: true,\n numberOfPointers: 1,\n },\n [panHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n translationX: 100,\n translationY: 0,\n velocityX: 3,\n velocityY: 0,\n numberOfPointers: 1,\n },\n [pinchHandlerName]: {\n focalX: 0,\n focalY: 0,\n scale: 2,\n velocity: 1,\n numberOfPointers: 2,\n },\n [rotationHandlerName]: {\n anchorX: 0,\n anchorY: 0,\n rotation: 3.14,\n velocity: 2,\n numberOfPointers: 2,\n },\n [tapHandlerName]: {\n x: 0,\n y: 0,\n absoluteX: 0,\n absoluteY: 0,\n numberOfPointers: 1,\n },\n};\n\nfunction isGesture(\n componentOrGesture: ReactTestInstance | GestureType\n): componentOrGesture is GestureType {\n return componentOrGesture instanceof BaseGesture;\n}\n\ninterface WrappedGestureHandlerTestEvent {\n nativeEvent: GestureHandlerTestEvent;\n}\nfunction wrapWithNativeEvent(\n event: GestureHandlerTestEvent\n): WrappedGestureHandlerTestEvent {\n return { nativeEvent: event };\n}\n\nfunction fillOldStateChanges(\n previousEvent: GestureHandlerTestEvent | null,\n currentEvent: Omit<GestureHandlerTestEvent, 'oldState'>\n): GestureHandlerTestEvent {\n const isFirstEvent = previousEvent === null;\n if (isFirstEvent) {\n return {\n oldState: State.UNDETERMINED,\n ...currentEvent,\n } as GestureHandlerTestEvent;\n }\n\n const isGestureStateEvent = previousEvent.state !== currentEvent.state;\n if (isGestureStateEvent) {\n return {\n oldState: previousEvent?.state,\n ...currentEvent,\n } as GestureHandlerTestEvent;\n } else {\n return currentEvent as GestureHandlerTestEvent;\n }\n}\n\ntype EventWithStates = Partial<\n Pick<GestureHandlerTestEvent, 'oldState' | 'state'>\n>;\nfunction validateStateTransitions(\n previousEvent: EventWithStates | null,\n currentEvent: EventWithStates\n) {\n function stringify(event: Record<string, unknown> | null) {\n return JSON.stringify(event, null, 2);\n }\n function errorMsgWithBothEvents(description: string) {\n return `${description}, invalid event: ${stringify(\n currentEvent\n )}, previous event: ${stringify(previousEvent)}`;\n }\n\n function errorMsgWithCurrentEvent(description: string) {\n return `${description}, invalid event: ${stringify(currentEvent)}`;\n }\n\n invariant(\n hasProperty(currentEvent, 'state'),\n errorMsgWithCurrentEvent('every event must have state')\n );\n\n const isFirstEvent = previousEvent === null;\n if (isFirstEvent) {\n invariant(\n currentEvent.state === State.BEGAN,\n errorMsgWithCurrentEvent('first event must have BEGAN state')\n );\n }\n\n if (previousEvent !== null) {\n if (previousEvent.state !== currentEvent.state) {\n invariant(\n hasProperty(currentEvent, 'oldState'),\n errorMsgWithCurrentEvent(\n 'when state changes, oldState field should be present'\n )\n );\n invariant(\n currentEvent.oldState === previousEvent.state,\n errorMsgWithBothEvents(\n \"when state changes, oldState should be the same as previous event' state\"\n )\n );\n }\n }\n\n return currentEvent;\n}\n\ntype EventWithoutStates = Omit<GestureHandlerTestEvent, 'oldState' | 'state'>;\ninterface HandlerInfo {\n handlerType: HandlerNames;\n handlerTag: number;\n}\nfunction fillMissingDefaultsFor({\n handlerType,\n handlerTag,\n}: HandlerInfo): (\n event: Partial<GestureHandlerTestEvent>\n) => EventWithoutStates {\n return (event) => {\n return {\n ...handlersDefaultEvents[handlerType],\n ...event,\n handlerTag,\n };\n };\n}\n\nfunction isDiscreteHandler(handlerType: HandlerNames) {\n return (\n handlerType === 'TapGestureHandler' ||\n handlerType === 'LongPressGestureHandler'\n );\n}\n\nfunction fillMissingStatesTransitions(\n events: EventWithoutStates[],\n isDiscreteHandler: boolean\n): EventWithoutStates[] {\n type Event = EventWithoutStates | null;\n const _events = [...events];\n const lastEvent = _events[_events.length - 1] ?? null;\n const firstEvent = _events[0] ?? null;\n\n const shouldDuplicateFirstEvent =\n !isDiscreteHandler && !hasState(State.BEGAN)(firstEvent);\n if (shouldDuplicateFirstEvent) {\n const duplicated = { ...firstEvent, state: State.BEGAN };\n // @ts-ignore badly typed, property may exist and we don't want to copy it\n delete duplicated.oldState;\n _events.unshift(duplicated);\n }\n\n const shouldDuplicateLastEvent =\n !hasState(State.END)(lastEvent) ||\n !hasState(State.FAILED)(lastEvent) ||\n !hasState(State.CANCELLED)(lastEvent);\n\n if (shouldDuplicateLastEvent) {\n const duplicated = { ...lastEvent, state: State.END };\n // @ts-ignore badly typed, property may exist and we don't want to copy it\n delete duplicated.oldState;\n _events.push(duplicated);\n }\n\n function isWithoutState(event: Event) {\n return event !== null && !hasProperty(event, 'state');\n }\n function hasState(state: State) {\n return (event: Event) => event !== null && event.state === state;\n }\n function noEventsLeft(event: Event) {\n return event === null;\n }\n\n function trueFn() {\n return true;\n }\n interface Args {\n shouldConsumeEvent?: (event: Event) => boolean;\n shouldTransitionToNextState?: (nextEvent: Event) => boolean;\n }\n function fillEventsForCurrentState({\n shouldConsumeEvent = trueFn,\n shouldTransitionToNextState = trueFn,\n }: Args) {\n function peekCurrentEvent(): Event {\n return _events[0] ?? null;\n }\n function peekNextEvent(): Event {\n return _events[1] ?? null;\n }\n function consumeCurrentEvent() {\n _events.shift();\n }\n const currentEvent = peekCurrentEvent();\n const nextEvent = peekNextEvent();\n const currentRequiredState = REQUIRED_EVENTS[currentStateIdx];\n\n let eventData = {};\n const shouldUseEvent = shouldConsumeEvent(currentEvent);\n if (shouldUseEvent) {\n eventData = currentEvent!;\n consumeCurrentEvent();\n }\n transformedEvents.push({ state: currentRequiredState, ...eventData });\n if (shouldTransitionToNextState(nextEvent)) {\n currentStateIdx++;\n }\n }\n\n const REQUIRED_EVENTS = [State.BEGAN, State.ACTIVE, State.END];\n\n let currentStateIdx = 0;\n const transformedEvents: EventWithoutStates[] = [];\n let hasAllStates;\n let iterations = 0;\n do {\n const nextRequiredState = REQUIRED_EVENTS[currentStateIdx];\n if (nextRequiredState === State.BEGAN) {\n fillEventsForCurrentState({\n shouldConsumeEvent: (e: Event) =>\n isWithoutState(e) || hasState(State.BEGAN)(e),\n });\n } else if (nextRequiredState === State.ACTIVE) {\n const shouldConsumeEvent = (e: Event) =>\n isWithoutState(e) || hasState(State.ACTIVE)(e);\n const shouldTransitionToNextState = (nextEvent: Event) =>\n noEventsLeft(nextEvent) ||\n hasState(State.END)(nextEvent) ||\n hasState(State.FAILED)(nextEvent) ||\n hasState(State.CANCELLED)(nextEvent);\n\n fillEventsForCurrentState({\n shouldConsumeEvent,\n shouldTransitionToNextState,\n });\n } else if (nextRequiredState === State.END) {\n fillEventsForCurrentState({});\n }\n hasAllStates = currentStateIdx === REQUIRED_EVENTS.length;\n\n invariant(\n iterations++ <= 500,\n 'exceeded max number of iterations, please report a bug in RNGH repository with your test case'\n );\n } while (!hasAllStates);\n\n return transformedEvents;\n}\n\ntype EventEmitter = (\n eventName: string,\n args: { nativeEvent: GestureHandlerTestEvent }\n) => void;\ninterface HandlerData {\n emitEvent: EventEmitter;\n handlerType: HandlerNames;\n handlerTag: number;\n}\nfunction getHandlerData(\n componentOrGesture: ReactTestInstance | GestureType\n): HandlerData {\n if (isGesture(componentOrGesture)) {\n const gesture = componentOrGesture;\n return {\n emitEvent: (eventName, args) => {\n DeviceEventEmitter.emit(eventName, args.nativeEvent);\n },\n handlerType: gesture.handlerName as HandlerNames,\n handlerTag: gesture.handlerTag,\n };\n }\n const gestureHandlerComponent = componentOrGesture;\n return {\n emitEvent: (eventName, args) => {\n fireEvent(gestureHandlerComponent, eventName, args);\n },\n handlerType: gestureHandlerComponent.props.handlerType as HandlerNames,\n handlerTag: gestureHandlerComponent.props.handlerTag as number,\n };\n}\ntype AllGestures =\n | TapGesture\n | PanGesture\n | LongPressGesture\n | RotationGesture\n | PinchGesture\n | FlingGesture\n | ForceTouchGesture\n | NativeGesture;\n\ntype AllHandlers =\n | TapGestureHandler\n | PanGestureHandler\n | LongPressGestureHandler\n | RotationGestureHandler\n | PinchGestureHandler\n | FlingGestureHandler\n | ForceTouchGestureHandler\n | NativeViewGestureHandler;\n\n// prettier-ignore\ntype ClassComponentConstructor<P> = new (props: P) => React.Component<P, any, any>;\n\ntype ExtractPayloadFromProps<T> = T extends BaseGestureHandlerProps<\n infer TPayload\n>\n ? TPayload\n : never;\n\ntype ExtractConfig<T> = T extends BaseGesture<infer TGesturePayload>\n ? TGesturePayload\n : T extends ClassComponentConstructor<infer THandlerProps>\n ? ExtractPayloadFromProps<THandlerProps>\n : Record<string, unknown>;\n\nexport function fireGestureHandler<THandler extends AllGestures | AllHandlers>(\n componentOrGesture: ReactTestInstance | GestureType,\n eventList: Partial<GestureHandlerTestEvent<ExtractConfig<THandler>>>[] = []\n): void {\n const { emitEvent, handlerType, handlerTag } =\n getHandlerData(componentOrGesture);\n\n let _ = fillMissingStatesTransitions(\n eventList,\n isDiscreteHandler(handlerType)\n );\n _ = _.map(fillMissingDefaultsFor({ handlerTag, handlerType }));\n _ = withPrevAndCurrent(_, fillOldStateChanges);\n _ = withPrevAndCurrent(_, validateStateTransitions);\n // @ts-ignore TODO\n _ = _.map(wrapWithNativeEvent);\n\n const events = _ as unknown as WrappedGestureHandlerTestEvent[];\n\n const firstEvent = events.shift()!;\n\n emitEvent('onGestureHandlerStateChange', firstEvent);\n let lastSentEvent = firstEvent;\n for (const event of events) {\n const hasChangedState =\n lastSentEvent.nativeEvent.state !== event.nativeEvent.state;\n\n if (hasChangedState) {\n emitEvent('onGestureHandlerStateChange', event);\n } else {\n emitEvent('onGestureHandlerEvent', event);\n }\n lastSentEvent = event;\n }\n}\n\nexport function getByGestureTestId(testID: string) {\n const handler = findHandlerByTestID(testID);\n if (handler === null) {\n throw new Error(`Handler with id: '${testID}' cannot be found`);\n }\n return handler;\n}\n"]}
|
|
@@ -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","eventType","EventTypes","DOWN","ADDITIONAL_POINTER_DOWN","MOVE","ADDITIONAL_POINTER_UP","indexOf","pointerId","UP","getTimeDelta","getAnchorX","getAnchorY","getRotation","reset"],"mappings":";;;;;;;AAAA;;;;AASe,MAAMA,uBAAN,
|
|
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":";;;;;;;AAAA;;;;AASe,MAAMA,uBAAN,CAEf;AAkBEC,EAAAA,WAAW,CAACC,SAAD,EAAqC;AAAA;;AAAA;;AAAA;;AAAA,yCAb1B,CAa0B;;AAAA,0CAZzB,CAYyB;;AAAA,2CAVxB,CAUwB;;AAAA,sCAT7B,CAS6B;;AAAA,qCAP9B,CAO8B;;AAAA,qCAN9B,CAM8B;;AAAA,0CAJzB,KAIyB;;AAAA,yCAFhB,CAACC,GAAD,EAAMA,GAAN,CAEgB;;AAC9C,SAAKC,eAAL,GAAuBF,SAAS,CAACE,eAAjC;AACA,SAAKC,UAAL,GAAkBH,SAAS,CAACG,UAA5B;AACA,SAAKC,aAAL,GAAqBJ,SAAS,CAACI,aAA/B;AACD;;AAEOC,EAAAA,aAAa,CAACC,KAAD,EAAsBC,OAAtB,EAAqD;AACxE,SAAKC,YAAL,GAAoB,KAAKC,WAAzB;AACA,SAAKA,WAAL,GAAmBH,KAAK,CAACI,IAAzB;AAEA,UAAM,CAACC,cAAD,EAAiBC,eAAjB,IAAoC,KAAKC,WAA/C;AAEA,UAAMC,aAAqB,GAAGP,OAAO,CAACQ,QAAR,CAAiBJ,cAAjB,CAA9B;AACA,UAAMK,aAAqB,GAAGT,OAAO,CAACU,QAAR,CAAiBN,cAAjB,CAA9B;AACA,UAAMO,cAAsB,GAAGX,OAAO,CAACQ,QAAR,CAAiBH,eAAjB,CAA/B;AACA,UAAMO,cAAsB,GAAGZ,OAAO,CAACU,QAAR,CAAiBL,eAAjB,CAA/B;AAEA,UAAMQ,OAAe,GAAGF,cAAc,GAAGJ,aAAzC;AACA,UAAMO,OAAe,GAAGF,cAAc,GAAGH,aAAzC;AAEA,SAAKM,OAAL,GAAe,CAACR,aAAa,GAAGI,cAAjB,IAAmC,CAAlD;AACA,SAAKK,OAAL,GAAe,CAACP,aAAa,GAAGG,cAAjB,IAAmC,CAAlD,CAfwE,CAiBxE;;AACA,UAAMK,KAAa,GAAG,CAACC,IAAI,CAACC,KAAL,CAAWL,OAAX,EAAoBD,OAApB,CAAvB;AAEA,SAAKO,QAAL,GAAgBC,MAAM,CAACC,KAAP,CAAa,KAAKC,aAAlB,IACZ,CADY,GAEZ,KAAKA,aAAL,GAAqBN,KAFzB;AAIA,SAAKM,aAAL,GAAqBN,KAArB;;AAEA,QAAI,KAAKG,QAAL,GAAgBF,IAAI,CAACM,EAAzB,EAA6B;AAC3B,WAAKJ,QAAL,IAAiBF,IAAI,CAACM,EAAtB;AACD,KAFD,MAEO,IAAI,KAAKJ,QAAL,GAAgB,CAACF,IAAI,CAACM,EAA1B,EAA8B;AACnC,WAAKJ,QAAL,IAAiBF,IAAI,CAACM,EAAtB;AACD;;AAED,QAAI,KAAKJ,QAAL,GAAgBF,IAAI,CAACM,EAAL,GAAU,CAA9B,EAAiC;AAC/B,WAAKJ,QAAL,IAAiBF,IAAI,CAACM,EAAtB;AACD,KAFD,MAEO,IAAI,KAAKJ,QAAL,GAAgB,CAACF,IAAI,CAACM,EAAN,GAAW,CAA/B,EAAkC;AACvC,WAAKJ,QAAL,IAAiBF,IAAI,CAACM,EAAtB;AACD;AACF;;AAEOC,EAAAA,MAAM,GAAS;AACrB,QAAI,CAAC,KAAKC,YAAV,EAAwB;AACtB;AACD;;AAED,SAAKA,YAAL,GAAoB,KAApB;AACA,SAAKpB,WAAL,GAAmB,CAACZ,GAAD,EAAMA,GAAN,CAAnB;AACA,SAAKG,aAAL,CAAmB,IAAnB;AACD;;AAEO8B,EAAAA,cAAc,CAAC3B,OAAD,EAAgC;AACpD,QAAI,KAAKM,WAAL,CAAiB,CAAjB,KAAuB,KAAKA,WAAL,CAAiB,CAAjB,CAA3B,EAAgD;AAC9C;AACD;;AAED,UAAMsB,UAAoC,GAAG5B,OAAO,CAAC6B,OAAR,GAAkBC,IAAlB,EAA7C;AAEA,SAAKxB,WAAL,CAAiB,CAAjB,IAAsBsB,UAAU,CAACG,IAAX,GAAkBC,KAAxC;AACA,SAAK1B,WAAL,CAAiB,CAAjB,IAAsBsB,UAAU,CAACG,IAAX,GAAkBC,KAAxC;AACD;;AAEMC,EAAAA,YAAY,CAAClC,KAAD,EAAsBC,OAAtB,EAAwD;AACzE,YAAQD,KAAK,CAACmC,SAAd;AACE,WAAKC,uBAAWC,IAAhB;AACE,aAAKV,YAAL,GAAoB,KAApB;AACA;;AAEF,WAAKS,uBAAWE,uBAAhB;AACE,YAAI,KAAKX,YAAT,EAAuB;AACrB;AACD;;AACD,aAAKA,YAAL,GAAoB,IAApB;AAEA,aAAKzB,YAAL,GAAoBF,KAAK,CAACI,IAA1B;AACA,aAAKoB,aAAL,GAAqB7B,GAArB;AAEA,aAAKiC,cAAL,CAAoB3B,OAApB;AAEA,aAAKF,aAAL,CAAmBC,KAAnB,EAA0BC,OAA1B;AACA,aAAKL,eAAL,CAAqB,IAArB;AACA;;AAEF,WAAKwC,uBAAWG,IAAhB;AACE,YAAI,CAAC,KAAKZ,YAAV,EAAwB;AACtB;AACD;;AAED,aAAK5B,aAAL,CAAmBC,KAAnB,EAA0BC,OAA1B;AACA,aAAKJ,UAAL,CAAgB,IAAhB;AAEA;;AAEF,WAAKuC,uBAAWI,qBAAhB;AACE,YAAI,CAAC,KAAKb,YAAV,EAAwB;AACtB;AACD;;AAED,YAAI,KAAKpB,WAAL,CAAiBkC,OAAjB,CAAyBzC,KAAK,CAAC0C,SAA/B,KAA6C,CAAjD,EAAoD;AAClD,eAAKhB,MAAL;AACD;;AAED;;AAEF,WAAKU,uBAAWO,EAAhB;AACE,YAAI,KAAKhB,YAAT,EAAuB;AACrB,eAAKD,MAAL;AACD;;AACD;AA7CJ;;AAgDA,WAAO,IAAP;AACD;;AAEMkB,EAAAA,YAAY,GAAW;AAC5B,WAAO,KAAKzC,WAAL,GAAmB,KAAKD,YAA/B;AACD;;AAEM2C,EAAAA,UAAU,GAAW;AAC1B,WAAO,KAAK7B,OAAZ;AACD;;AAEM8B,EAAAA,UAAU,GAAW;AAC1B,WAAO,KAAK7B,OAAZ;AACD;;AAEM8B,EAAAA,WAAW,GAAW;AAC3B,WAAO,KAAK1B,QAAZ;AACD;;AAEM2B,EAAAA,KAAK,GAAS;AACnB,SAAKzC,WAAL,GAAmB,CAACZ,GAAD,EAAMA,GAAN,CAAnB;AACA,SAAKgC,YAAL,GAAoB,KAApB;AACD;;AA3JH","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{\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"]}
|
|
@@ -39,6 +39,8 @@ class FlingGestureHandler extends _GestureHandler.default {
|
|
|
39
39
|
_defineProperty(this, "startY", 0);
|
|
40
40
|
|
|
41
41
|
_defineProperty(this, "maxNumberOfPointersSimultaneously", 0);
|
|
42
|
+
|
|
43
|
+
_defineProperty(this, "keyPointer", NaN);
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
init(ref, propsRef) {
|
|
@@ -53,7 +55,6 @@ class FlingGestureHandler extends _GestureHandler.default {
|
|
|
53
55
|
enabled: enabled,
|
|
54
56
|
...props
|
|
55
57
|
});
|
|
56
|
-
this.enabled = enabled;
|
|
57
58
|
|
|
58
59
|
if (this.config.direction) {
|
|
59
60
|
this.direction = this.config.direction;
|
|
@@ -74,16 +75,16 @@ class FlingGestureHandler extends _GestureHandler.default {
|
|
|
74
75
|
};
|
|
75
76
|
}
|
|
76
77
|
|
|
77
|
-
startFling(
|
|
78
|
-
this.startX =
|
|
79
|
-
this.startY =
|
|
78
|
+
startFling() {
|
|
79
|
+
this.startX = this.tracker.getLastX(this.keyPointer);
|
|
80
|
+
this.startY = this.tracker.getLastY(this.keyPointer);
|
|
80
81
|
this.begin();
|
|
81
82
|
this.maxNumberOfPointersSimultaneously = 1;
|
|
82
83
|
this.delayTimeout = setTimeout(() => this.fail(), this.maxDurationMs);
|
|
83
84
|
}
|
|
84
85
|
|
|
85
|
-
tryEndFling(
|
|
86
|
-
if (this.maxNumberOfPointersSimultaneously === this.numberOfPointersRequired && (this.direction & _constants.Direction.RIGHT &&
|
|
86
|
+
tryEndFling() {
|
|
87
|
+
if (this.maxNumberOfPointersSimultaneously === this.numberOfPointersRequired && (this.direction & _constants.Direction.RIGHT && this.tracker.getLastX(this.keyPointer) - this.startX > this.minAcceptableDelta || this.direction & _constants.Direction.LEFT && this.startX - this.tracker.getLastX(this.keyPointer) > this.minAcceptableDelta || this.direction & _constants.Direction.UP && this.startY - this.tracker.getLastY(this.keyPointer) > this.minAcceptableDelta || this.direction & _constants.Direction.DOWN && this.tracker.getLastY(this.keyPointer) - this.startY > this.minAcceptableDelta)) {
|
|
87
88
|
clearTimeout(this.delayTimeout);
|
|
88
89
|
this.activate();
|
|
89
90
|
return true;
|
|
@@ -92,34 +93,35 @@ class FlingGestureHandler extends _GestureHandler.default {
|
|
|
92
93
|
return false;
|
|
93
94
|
}
|
|
94
95
|
|
|
95
|
-
endFling(
|
|
96
|
-
if (!this.tryEndFling(
|
|
96
|
+
endFling() {
|
|
97
|
+
if (!this.tryEndFling()) {
|
|
97
98
|
this.fail();
|
|
98
99
|
}
|
|
99
100
|
}
|
|
100
101
|
|
|
101
102
|
onPointerDown(event) {
|
|
102
103
|
this.tracker.addToTracker(event);
|
|
104
|
+
this.keyPointer = event.pointerId;
|
|
103
105
|
super.onPointerDown(event);
|
|
104
|
-
this.newPointerAction(
|
|
106
|
+
this.newPointerAction();
|
|
105
107
|
}
|
|
106
108
|
|
|
107
109
|
onPointerAdd(event) {
|
|
108
110
|
this.tracker.addToTracker(event);
|
|
109
111
|
super.onPointerAdd(event);
|
|
110
|
-
this.newPointerAction(
|
|
112
|
+
this.newPointerAction();
|
|
111
113
|
}
|
|
112
114
|
|
|
113
|
-
newPointerAction(
|
|
115
|
+
newPointerAction() {
|
|
114
116
|
if (this.currentState === _State.State.UNDETERMINED) {
|
|
115
|
-
this.startFling(
|
|
117
|
+
this.startFling();
|
|
116
118
|
}
|
|
117
119
|
|
|
118
120
|
if (this.currentState !== _State.State.BEGAN) {
|
|
119
121
|
return;
|
|
120
122
|
}
|
|
121
123
|
|
|
122
|
-
this.tryEndFling(
|
|
124
|
+
this.tryEndFling();
|
|
123
125
|
|
|
124
126
|
if (this.tracker.getTrackedPointersCount() > this.maxNumberOfPointersSimultaneously) {
|
|
125
127
|
this.maxNumberOfPointersSimultaneously = this.tracker.getTrackedPointersCount();
|
|
@@ -133,13 +135,14 @@ class FlingGestureHandler extends _GestureHandler.default {
|
|
|
133
135
|
return;
|
|
134
136
|
}
|
|
135
137
|
|
|
136
|
-
this.tryEndFling(
|
|
138
|
+
this.tryEndFling();
|
|
137
139
|
super.onPointerMove(event);
|
|
138
140
|
}
|
|
139
141
|
|
|
140
142
|
onPointerUp(event) {
|
|
141
143
|
super.onPointerUp(event);
|
|
142
144
|
this.onUp(event);
|
|
145
|
+
this.keyPointer = NaN;
|
|
143
146
|
}
|
|
144
147
|
|
|
145
148
|
onPointerRemove(event) {
|
|
@@ -154,7 +157,7 @@ class FlingGestureHandler extends _GestureHandler.default {
|
|
|
154
157
|
return;
|
|
155
158
|
}
|
|
156
159
|
|
|
157
|
-
this.endFling(
|
|
160
|
+
this.endFling();
|
|
158
161
|
}
|
|
159
162
|
|
|
160
163
|
onPointerCancel(event) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["FlingGestureHandler.ts"],"names":["DEFAULT_MAX_DURATION_MS","DEFAULT_MIN_ACCEPTABLE_DELTA","DEFAULT_DIRECTION","Direction","RIGHT","DEFAULT_NUMBER_OF_TOUCHES_REQUIRED","FlingGestureHandler","GestureHandler","init","ref","propsRef","updateGestureConfig","enabled","props","config","direction","numberOfPointers","numberOfPointersRequired","transformNativeEvent","rect","view","getBoundingClientRect","x","tracker","getLastAvgX","left","y","getLastAvgY","top","absoluteX","absoluteY","startFling","
|
|
1
|
+
{"version":3,"sources":["FlingGestureHandler.ts"],"names":["DEFAULT_MAX_DURATION_MS","DEFAULT_MIN_ACCEPTABLE_DELTA","DEFAULT_DIRECTION","Direction","RIGHT","DEFAULT_NUMBER_OF_TOUCHES_REQUIRED","FlingGestureHandler","GestureHandler","NaN","init","ref","propsRef","updateGestureConfig","enabled","props","config","direction","numberOfPointers","numberOfPointersRequired","transformNativeEvent","rect","view","getBoundingClientRect","x","tracker","getLastAvgX","left","y","getLastAvgY","top","absoluteX","absoluteY","startFling","startX","getLastX","keyPointer","startY","getLastY","begin","maxNumberOfPointersSimultaneously","delayTimeout","setTimeout","fail","maxDurationMs","tryEndFling","minAcceptableDelta","LEFT","UP","DOWN","clearTimeout","activate","endFling","onPointerDown","event","addToTracker","pointerId","newPointerAction","onPointerAdd","currentState","State","UNDETERMINED","BEGAN","getTrackedPointersCount","onPointerMove","track","onPointerUp","onUp","onPointerRemove","removeFromTracker","onPointerCancel","reset","force","end","resetConfig"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { Direction } from '../constants';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MAX_DURATION_MS = 800;\nconst DEFAULT_MIN_ACCEPTABLE_DELTA = 160;\nconst DEFAULT_DIRECTION = Direction.RIGHT;\nconst DEFAULT_NUMBER_OF_TOUCHES_REQUIRED = 1;\n\nexport default class FlingGestureHandler extends GestureHandler {\n private numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;\n private direction = DEFAULT_DIRECTION;\n\n private maxDurationMs = DEFAULT_MAX_DURATION_MS;\n private minAcceptableDelta = DEFAULT_MIN_ACCEPTABLE_DELTA;\n private delayTimeout!: number;\n\n private startX = 0;\n private startY = 0;\n\n private maxNumberOfPointersSimultaneously = 0;\n private keyPointer = NaN;\n\n public init(ref: number, propsRef: React.RefObject<unknown>): void {\n super.init(ref, propsRef);\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.direction) {\n this.direction = this.config.direction;\n }\n\n if (this.config.numberOfPointers) {\n this.numberOfPointersRequired = this.config.numberOfPointers;\n }\n }\n\n protected transformNativeEvent() {\n const rect: DOMRect = this.view.getBoundingClientRect();\n\n return {\n x: this.tracker.getLastAvgX() - rect.left,\n y: this.tracker.getLastAvgY() - rect.top,\n absoluteX: this.tracker.getLastAvgX(),\n absoluteY: this.tracker.getLastAvgY(),\n };\n }\n\n private startFling(): void {\n this.startX = this.tracker.getLastX(this.keyPointer);\n this.startY = this.tracker.getLastY(this.keyPointer);\n\n this.begin();\n\n this.maxNumberOfPointersSimultaneously = 1;\n\n this.delayTimeout = setTimeout(() => this.fail(), this.maxDurationMs);\n }\n\n private tryEndFling(): boolean {\n if (\n this.maxNumberOfPointersSimultaneously ===\n this.numberOfPointersRequired &&\n ((this.direction & Direction.RIGHT &&\n this.tracker.getLastX(this.keyPointer) - this.startX >\n this.minAcceptableDelta) ||\n (this.direction & Direction.LEFT &&\n this.startX - this.tracker.getLastX(this.keyPointer) >\n this.minAcceptableDelta) ||\n (this.direction & Direction.UP &&\n this.startY - this.tracker.getLastY(this.keyPointer) >\n this.minAcceptableDelta) ||\n (this.direction & Direction.DOWN &&\n this.tracker.getLastY(this.keyPointer) - this.startY >\n this.minAcceptableDelta))\n ) {\n clearTimeout(this.delayTimeout);\n this.activate();\n\n return true;\n }\n\n return false;\n }\n\n private endFling() {\n if (!this.tryEndFling()) {\n this.fail();\n }\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n this.keyPointer = event.pointerId;\n\n super.onPointerDown(event);\n this.newPointerAction();\n }\n\n protected onPointerAdd(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerAdd(event);\n this.newPointerAction();\n }\n\n private newPointerAction(): void {\n if (this.currentState === State.UNDETERMINED) {\n this.startFling();\n }\n\n if (this.currentState !== State.BEGAN) {\n return;\n }\n\n this.tryEndFling();\n\n if (\n this.tracker.getTrackedPointersCount() >\n this.maxNumberOfPointersSimultaneously\n ) {\n this.maxNumberOfPointersSimultaneously =\n this.tracker.getTrackedPointersCount();\n }\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n this.tracker.track(event);\n\n if (this.currentState !== State.BEGAN) {\n return;\n }\n\n this.tryEndFling();\n\n super.onPointerMove(event);\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.onUp(event);\n\n this.keyPointer = NaN;\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.onUp(event);\n }\n\n private onUp(event: AdaptedEvent): void {\n this.tracker.removeFromTracker(event.pointerId);\n if (this.currentState !== State.BEGAN) {\n return;\n }\n this.endFling();\n }\n\n protected onPointerCancel(event: AdaptedEvent): void {\n super.onPointerCancel(event);\n this.reset();\n }\n\n public activate(force?: boolean): void {\n super.activate(force);\n this.end();\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n this.numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;\n this.direction = DEFAULT_DIRECTION;\n }\n}\n"]}
|
|
@@ -108,11 +108,17 @@ class GestureHandler {
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
this.view = (0, _reactNative.findNodeHandle)(this.ref);
|
|
111
|
-
this.view.style['touchAction'] = 'none';
|
|
112
|
-
this.view.style['webkitUserSelect'] = 'none';
|
|
113
|
-
this.view.style['userSelect'] = 'none'; //@ts-ignore This one disables default events on Safari
|
|
111
|
+
this.view.style['touchAction'] = 'none'; //@ts-ignore This one disables default events on Safari
|
|
114
112
|
|
|
115
113
|
this.view.style['WebkitTouchCallout'] = 'none';
|
|
114
|
+
|
|
115
|
+
if (!this.config.userSelect) {
|
|
116
|
+
this.view.style['webkitUserSelect'] = 'none';
|
|
117
|
+
this.view.style['userSelect'] = 'none';
|
|
118
|
+
} else {
|
|
119
|
+
this.view.style['webkitUserSelect'] = this.config.userSelect;
|
|
120
|
+
this.view.style['userSelect'] = this.config.userSelect;
|
|
121
|
+
}
|
|
116
122
|
}
|
|
117
123
|
|
|
118
124
|
addEventManager(manager) {
|
|
@@ -154,13 +160,13 @@ class GestureHandler {
|
|
|
154
160
|
return;
|
|
155
161
|
}
|
|
156
162
|
|
|
157
|
-
if (this.tracker.getTrackedPointersCount() > 0 && this.config.needsPointerData && (newState === _State.State.END || newState === _State.State.CANCELLED || newState === _State.State.FAILED)) {
|
|
158
|
-
this.cancelTouches();
|
|
159
|
-
}
|
|
160
|
-
|
|
161
163
|
const oldState = this.currentState;
|
|
162
164
|
this.currentState = newState;
|
|
163
165
|
|
|
166
|
+
if (this.tracker.getTrackedPointersCount() > 0 && this.config.needsPointerData && this.isFinished()) {
|
|
167
|
+
this.cancelTouches();
|
|
168
|
+
}
|
|
169
|
+
|
|
164
170
|
_GestureHandlerOrchestrator.default.getInstance().onHandlerStateChange(this, newState, oldState, sendIfDisabled);
|
|
165
171
|
|
|
166
172
|
this.onStateChange(newState, oldState);
|
|
@@ -332,6 +338,20 @@ class GestureHandler {
|
|
|
332
338
|
}
|
|
333
339
|
|
|
334
340
|
onPointerOut(event) {
|
|
341
|
+
if (this.shouldCancellWhenOutside) {
|
|
342
|
+
switch (this.currentState) {
|
|
343
|
+
case _State.State.ACTIVE:
|
|
344
|
+
this.cancel();
|
|
345
|
+
break;
|
|
346
|
+
|
|
347
|
+
case _State.State.BEGAN:
|
|
348
|
+
this.fail();
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
|
|
335
355
|
if (this.config.needsPointerData) {
|
|
336
356
|
this.sendTouchEvent(event);
|
|
337
357
|
}
|
|
@@ -551,6 +571,11 @@ class GestureHandler {
|
|
|
551
571
|
...props
|
|
552
572
|
};
|
|
553
573
|
this.enabled = enabled;
|
|
574
|
+
|
|
575
|
+
if (this.config.shouldCancelWhenOutside !== undefined) {
|
|
576
|
+
this.setShouldCancelWhenOutside(this.config.shouldCancelWhenOutside);
|
|
577
|
+
}
|
|
578
|
+
|
|
554
579
|
this.validateHitSlops();
|
|
555
580
|
|
|
556
581
|
if (this.enabled) {
|
|
@@ -721,6 +746,10 @@ class GestureHandler {
|
|
|
721
746
|
return this.enabled;
|
|
722
747
|
}
|
|
723
748
|
|
|
749
|
+
isFinished() {
|
|
750
|
+
return this.currentState === _State.State.END || this.currentState === _State.State.FAILED || this.currentState === _State.State.CANCELLED;
|
|
751
|
+
}
|
|
752
|
+
|
|
724
753
|
setShouldCancelWhenOutside(shouldCancel) {
|
|
725
754
|
this.shouldCancellWhenOutside = shouldCancel;
|
|
726
755
|
}
|