react-native-gesture-handler 2.13.4 → 2.14.1
Sign up to get free protection for your applications and to get access to all the features.
- package/android/build.gradle +3 -2
- package/android/gradle.properties +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +36 -72
- package/android/src/main/java/com/swmansion/gesturehandler/react/Extensions.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +12 -14
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +8 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +34 -88
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +18 -12
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/FlingGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/GestureHandlerEventDataBuilder.kt +22 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/HoverGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/LongPressGestureHandlerEventDataBuilder.kt +33 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/ManualGestureHandlerEventDataBuilder.kt +5 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/NativeGestureHandlerEventDataBuilder.kt +18 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PanGestureHandlerEventDataBuilder.kt +42 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PinchGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/RotationGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/TapGestureHandlerEventDataBuilder.kt +30 -0
- package/android/src/main/jni/CMakeLists.txt +14 -2
- package/ios/Handlers/RNHoverHandler.m +15 -14
- package/ios/RNGestureHandler.m +11 -0
- package/ios/RNGestureHandlerButtonComponentView.mm +2 -0
- package/lib/commonjs/components/gestureHandlerRootHOC.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js +1 -1
- package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js.map +1 -1
- package/lib/commonjs/getReactNativeVersion.js +22 -0
- package/lib/commonjs/getReactNativeVersion.js.map +1 -0
- package/lib/commonjs/getReactNativeVersion.web.js +11 -0
- package/lib/commonjs/getReactNativeVersion.web.js.map +1 -0
- package/lib/commonjs/handlers/gestureHandlerCommon.js +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +13 -3
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js +8 -0
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +39 -37
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/commonjs/utils.js +0 -13
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +4 -6
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +4 -15
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js +27 -29
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerEventManager.js +13 -3
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/components/gestureHandlerRootHOC.js.map +1 -1
- package/lib/module/components/touchables/TouchableNativeFeedback.android.js +1 -1
- package/lib/module/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
- package/lib/module/components/touchables/TouchableWithoutFeedback.js.map +1 -1
- package/lib/module/getReactNativeVersion.js +10 -0
- package/lib/module/getReactNativeVersion.js.map +1 -0
- package/lib/module/getReactNativeVersion.web.js +4 -0
- package/lib/module/getReactNativeVersion.web.js.map +1 -0
- package/lib/module/handlers/gestureHandlerCommon.js +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +12 -3
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js +8 -0
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.js +44 -42
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/module/utils.js +0 -6
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +4 -6
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +4 -15
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js +27 -29
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web/tools/PointerEventManager.js +12 -3
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/typescript/ActionType.d.ts +1 -1
- package/lib/typescript/Directions.d.ts +1 -1
- package/lib/typescript/PlatformConstants.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
- package/lib/typescript/State.d.ts +1 -1
- package/lib/typescript/TouchEventType.d.ts +1 -1
- package/lib/typescript/components/DrawerLayout.d.ts +9 -9
- package/lib/typescript/components/GestureButtons.d.ts +3 -3
- package/lib/typescript/components/GestureComponents.d.ts +6 -6
- package/lib/typescript/components/GestureComponents.web.d.ts +1 -1
- package/lib/typescript/components/GestureHandlerRootView.android.d.ts +2 -1
- package/lib/typescript/components/GestureHandlerRootView.d.ts +2 -1
- package/lib/typescript/components/GestureHandlerRootView.web.d.ts +2 -1
- package/lib/typescript/components/Swipeable.d.ts +4 -4
- package/lib/typescript/components/gestureHandlerRootHOC.d.ts +1 -1
- package/lib/typescript/components/touchables/GenericTouchable.d.ts +4 -3
- package/lib/typescript/components/touchables/TouchableHighlight.d.ts +4 -3
- package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +7 -6
- package/lib/typescript/components/touchables/TouchableOpacity.d.ts +3 -2
- package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +1 -1
- package/lib/typescript/getReactNativeVersion.d.ts +4 -0
- package/lib/typescript/getReactNativeVersion.web.d.ts +1 -0
- package/lib/typescript/handlers/FlingGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/LongPressGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +3 -3
- package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/PinchGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/RotationGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/TapGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/createHandler.d.ts +1 -1
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +11 -10
- package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +32 -32
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -2
- package/lib/typescript/handlers/gestures/flingGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +2 -2
- package/lib/typescript/handlers/gestures/gesture.d.ts +7 -5
- package/lib/typescript/handlers/gestures/gestureComposition.d.ts +4 -4
- package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +3 -1
- package/lib/typescript/handlers/gestures/hoverGesture.d.ts +3 -3
- package/lib/typescript/handlers/gestures/longPressGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/manualGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/nativeGesture.d.ts +1 -1
- package/lib/typescript/handlers/gestures/panGesture.d.ts +2 -2
- package/lib/typescript/handlers/gestures/pinchGesture.d.ts +2 -2
- package/lib/typescript/handlers/gestures/rotationGesture.d.ts +2 -2
- package/lib/typescript/handlers/gestures/tapGesture.d.ts +1 -1
- package/lib/typescript/jestUtils/jestUtils.d.ts +6 -6
- package/lib/typescript/typeUtils.d.ts +1 -1
- package/lib/typescript/utils.d.ts +1 -5
- package/lib/typescript/web/interfaces.d.ts +4 -3
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +0 -1
- package/lib/typescript/web/tools/InteractionManager.d.ts +2 -1
- package/lib/typescript/web_hammer/GestureHandler.d.ts +2 -2
- package/package.json +7 -7
- package/src/components/gestureHandlerRootHOC.tsx +1 -3
- package/src/components/touchables/TouchableNativeFeedback.android.tsx +2 -1
- package/src/components/touchables/TouchableWithoutFeedback.tsx +3 -3
- package/src/getReactNativeVersion.ts +11 -0
- package/src/getReactNativeVersion.web.ts +3 -0
- package/src/handlers/gestureHandlerCommon.ts +6 -1
- package/src/handlers/gestures/GestureDetector.tsx +9 -6
- package/src/handlers/gestures/gesture.ts +9 -1
- package/src/handlers/gestures/gestureStateManager.ts +42 -40
- package/src/utils.ts +0 -8
- package/src/web/handlers/FlingGestureHandler.ts +5 -5
- package/src/web/handlers/GestureHandler.ts +1 -1
- package/src/web/interfaces.ts +1 -0
- package/src/web/tools/GestureHandlerOrchestrator.ts +4 -13
- package/src/web/tools/InteractionManager.ts +37 -30
- package/src/web/tools/PointerEventManager.ts +14 -3
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +0 -8
- /package/android/{src/fabric → fabric/src/main}/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +0 -0
- /package/android/{src/fabric → fabric/src/main}/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +0 -0
- /package/android/{src/paper → paper/src/main}/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +0 -0
@@ -11,8 +11,6 @@ export default class GestureHandlerOrchestrator {
|
|
11
11
|
|
12
12
|
_defineProperty(this, "awaitingHandlers", []);
|
13
13
|
|
14
|
-
_defineProperty(this, "handlersToCancel", []);
|
15
|
-
|
16
14
|
_defineProperty(this, "handlingChangeSemaphore", 0);
|
17
15
|
|
18
16
|
_defineProperty(this, "activationIndex", 0);
|
@@ -34,7 +32,6 @@ export default class GestureHandlerOrchestrator {
|
|
34
32
|
removeHandlerFromOrchestrator(handler) {
|
35
33
|
this.gestureHandlers.splice(this.gestureHandlers.indexOf(handler), 1);
|
36
34
|
this.awaitingHandlers.splice(this.awaitingHandlers.indexOf(handler), 1);
|
37
|
-
this.handlersToCancel.splice(this.handlersToCancel.indexOf(handler), 1);
|
38
35
|
}
|
39
36
|
|
40
37
|
cleanupFinishedHandlers() {
|
@@ -155,17 +152,11 @@ export default class GestureHandlerOrchestrator {
|
|
155
152
|
handler.setActive(true);
|
156
153
|
handler.setShouldResetProgress(true);
|
157
154
|
handler.setActivationIndex(this.activationIndex++);
|
158
|
-
this.gestureHandlers.forEach(otherHandler => {
|
159
|
-
// Order of arguments is correct - we check whether current handler should cancel existing handlers
|
160
|
-
if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
|
161
|
-
this.handlersToCancel.push(otherHandler);
|
162
|
-
}
|
163
|
-
});
|
164
155
|
|
165
|
-
for (let i = this.
|
166
|
-
|
167
|
-
|
168
|
-
|
156
|
+
for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {
|
157
|
+
if (this.shouldHandlerBeCancelledBy(this.gestureHandlers[i], handler)) {
|
158
|
+
this.gestureHandlers[i].cancel();
|
159
|
+
}
|
169
160
|
}
|
170
161
|
|
171
162
|
this.awaitingHandlers.forEach(otherHandler => {
|
@@ -193,8 +184,6 @@ export default class GestureHandlerOrchestrator {
|
|
193
184
|
}
|
194
185
|
}
|
195
186
|
}
|
196
|
-
|
197
|
-
this.handlersToCancel = [];
|
198
187
|
}
|
199
188
|
|
200
189
|
addAwaitingHandler(handler) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["GestureHandlerOrchestrator.ts"],"names":["State","PointerType","PointerTracker","GestureHandlerOrchestrator","constructor","scheduleFinishedHandlersCleanup","handlingChangeSemaphore","cleanupFinishedHandlers","cleanHandler","handler","reset","setActive","setAwaiting","setActivationIndex","Number","MAX_VALUE","removeHandlerFromOrchestrator","gestureHandlers","splice","indexOf","awaitingHandlers","handlersToCancel","i","length","isFinished","getState","isAwaiting","hasOtherHandlerToWaitFor","hasToWait","forEach","otherHandler","shouldHandlerWaitForOther","tryActivate","addAwaitingHandler","CANCELLED","FAILED","shouldActivate","makeActive","ACTIVE","fail","BEGAN","cancel","shouldHandlerBeCancelledBy","cleanupAwaitingHandlers","onHandlerStateChange","newState","oldState","sendIfDisabled","isEnabled","END","sendEvent","isActive","UNDETERMINED","currentState","setShouldResetProgress","activationIndex","push","alreadyExists","recordHandlerIfNotPresent","MAX_SAFE_INTEGER","shouldWaitForHandlerFailure","shouldRequireToWaitForFailure","canRunSimultaneously","gh1","gh2","shouldRecognizeSimultaneously","shouldBeCancelledByOther","handlerPointers","getTrackedPointersID","otherPointers","shareCommonPointers","getDelegate","getView","checkOverlap","overlap","pointer","handlerX","getTracker","getLastX","handlerY","getLastY","isPointerInBounds","x","y","otherX","otherY","state","cancelMouseAndPenGestures","currentHandler","getPointerType","MOUSE","PEN","resetTracker","getInstance","instance"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { PointerType } from '../interfaces';\n\nimport GestureHandler from '../handlers/GestureHandler';\nimport PointerTracker from './PointerTracker';\n\nexport default class GestureHandlerOrchestrator {\n private static instance: GestureHandlerOrchestrator;\n\n private gestureHandlers: GestureHandler[] = [];\n private awaitingHandlers: GestureHandler[] = [];\n private handlersToCancel: GestureHandler[] = [];\n\n private handlingChangeSemaphore = 0;\n private activationIndex = 0;\n\n // Private beacuse of Singleton\n // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n private constructor() {}\n\n private scheduleFinishedHandlersCleanup(): void {\n if (this.handlingChangeSemaphore === 0) {\n this.cleanupFinishedHandlers();\n }\n }\n\n private cleanHandler(handler: GestureHandler): void {\n handler.reset();\n handler.setActive(false);\n handler.setAwaiting(false);\n handler.setActivationIndex(Number.MAX_VALUE);\n }\n\n public removeHandlerFromOrchestrator(handler: GestureHandler): void {\n this.gestureHandlers.splice(this.gestureHandlers.indexOf(handler), 1);\n this.awaitingHandlers.splice(this.awaitingHandlers.indexOf(handler), 1);\n this.handlersToCancel.splice(this.handlersToCancel.indexOf(handler), 1);\n }\n\n private cleanupFinishedHandlers(): void {\n for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {\n const handler = this.gestureHandlers[i];\n\n if (!handler) {\n continue;\n }\n if (this.isFinished(handler.getState()) && !handler.isAwaiting()) {\n this.gestureHandlers.splice(i, 1);\n\n this.cleanHandler(handler);\n }\n }\n }\n\n private hasOtherHandlerToWaitFor(handler: GestureHandler): boolean {\n let hasToWait = false;\n this.gestureHandlers.forEach((otherHandler) => {\n if (\n otherHandler &&\n !this.isFinished(otherHandler.getState()) &&\n this.shouldHandlerWaitForOther(handler, otherHandler)\n ) {\n hasToWait = true;\n return;\n }\n });\n\n return hasToWait;\n }\n\n private tryActivate(handler: GestureHandler): void {\n if (this.hasOtherHandlerToWaitFor(handler)) {\n this.addAwaitingHandler(handler);\n } else if (\n handler.getState() !== State.CANCELLED &&\n handler.getState() !== State.FAILED\n ) {\n if (this.shouldActivate(handler)) {\n this.makeActive(handler);\n } else {\n switch (handler.getState()) {\n case State.ACTIVE:\n handler.fail();\n break;\n case State.BEGAN:\n handler.cancel();\n }\n }\n }\n }\n\n private shouldActivate(handler: GestureHandler): boolean {\n for (const otherHandler of this.gestureHandlers) {\n if (this.shouldHandlerBeCancelledBy(handler, otherHandler)) {\n return false;\n }\n }\n\n return true;\n }\n\n private cleanupAwaitingHandlers(handler: GestureHandler): void {\n for (let i = 0; i < this.awaitingHandlers.length; ++i) {\n if (\n !this.awaitingHandlers[i].isAwaiting() &&\n this.shouldHandlerWaitForOther(this.awaitingHandlers[i], handler)\n ) {\n this.cleanHandler(this.awaitingHandlers[i]);\n this.awaitingHandlers.splice(i, 1);\n }\n }\n }\n\n public onHandlerStateChange(\n handler: GestureHandler,\n newState: State,\n oldState: State,\n sendIfDisabled?: boolean\n ): void {\n if (!handler.isEnabled() && !sendIfDisabled) {\n return;\n }\n\n this.handlingChangeSemaphore += 1;\n\n if (this.isFinished(newState)) {\n this.awaitingHandlers.forEach((otherHandler) => {\n if (this.shouldHandlerWaitForOther(otherHandler, handler)) {\n if (newState === State.END) {\n otherHandler?.cancel();\n if (otherHandler.getState() === State.END) {\n // Handle edge case, where discrete gestures end immediately after activation thus\n // their state is set to END and when the gesture they are waiting for activates they\n // should be cancelled, however `cancel` was never sent as gestures were already in the END state.\n // Send synthetic BEGAN -> CANCELLED to properly handle JS logic\n otherHandler.sendEvent(State.CANCELLED, State.BEGAN);\n }\n otherHandler?.setAwaiting(false);\n } else {\n this.tryActivate(otherHandler);\n }\n }\n });\n }\n\n if (newState === State.ACTIVE) {\n this.tryActivate(handler);\n } else if (oldState === State.ACTIVE || oldState === State.END) {\n if (handler.isActive()) {\n handler.sendEvent(newState, oldState);\n } else if (\n oldState === State.ACTIVE &&\n (newState === State.CANCELLED || newState === State.FAILED)\n ) {\n handler.sendEvent(newState, State.BEGAN);\n }\n } else if (\n oldState !== State.UNDETERMINED ||\n newState !== State.CANCELLED\n ) {\n handler.sendEvent(newState, oldState);\n }\n\n this.handlingChangeSemaphore -= 1;\n\n this.scheduleFinishedHandlersCleanup();\n\n if (this.awaitingHandlers.indexOf(handler) < 0) {\n this.cleanupAwaitingHandlers(handler);\n }\n }\n\n private makeActive(handler: GestureHandler): void {\n const currentState = handler.getState();\n\n handler.setActive(true);\n handler.setShouldResetProgress(true);\n handler.setActivationIndex(this.activationIndex++);\n\n this.gestureHandlers.forEach((otherHandler) => {\n // Order of arguments is correct - we check whether current handler should cancel existing handlers\n\n if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {\n this.handlersToCancel.push(otherHandler);\n }\n });\n\n for (let i = this.handlersToCancel.length - 1; i >= 0; --i) {\n this.handlersToCancel[i]?.cancel();\n }\n this.awaitingHandlers.forEach((otherHandler) => {\n if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {\n otherHandler?.cancel();\n otherHandler?.setAwaiting(true);\n }\n });\n\n handler.sendEvent(State.ACTIVE, State.BEGAN);\n\n if (currentState !== State.ACTIVE) {\n handler.sendEvent(State.END, State.ACTIVE);\n if (currentState !== State.END) {\n handler.sendEvent(State.UNDETERMINED, State.END);\n }\n }\n\n if (handler.isAwaiting()) {\n handler.setAwaiting(false);\n for (let i = 0; i < this.awaitingHandlers.length; ++i) {\n if (this.awaitingHandlers[i] === handler) {\n this.awaitingHandlers.splice(i, 1);\n }\n }\n }\n\n this.handlersToCancel = [];\n }\n\n private addAwaitingHandler(handler: GestureHandler): void {\n let alreadyExists = false;\n\n this.awaitingHandlers.forEach((otherHandler) => {\n if (otherHandler === handler) {\n alreadyExists = true;\n return;\n }\n });\n\n if (alreadyExists) {\n return;\n }\n\n this.awaitingHandlers.push(handler);\n\n handler.setAwaiting(true);\n handler.setActivationIndex(this.activationIndex++);\n }\n\n public recordHandlerIfNotPresent(handler: GestureHandler): void {\n let alreadyExists = false;\n\n this.gestureHandlers.forEach((otherHandler) => {\n if (otherHandler === handler) {\n alreadyExists = true;\n return;\n }\n });\n\n if (alreadyExists) {\n return;\n }\n\n this.gestureHandlers.push(handler);\n\n handler.setActive(false);\n handler.setAwaiting(false);\n handler.setActivationIndex(Number.MAX_SAFE_INTEGER);\n }\n\n private shouldHandlerWaitForOther(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n return (\n handler !== otherHandler &&\n (handler.shouldWaitForHandlerFailure(otherHandler) ||\n otherHandler.shouldRequireToWaitForFailure(handler))\n );\n }\n\n private canRunSimultaneously(\n gh1: GestureHandler,\n gh2: GestureHandler\n ): boolean {\n return (\n gh1 === gh2 ||\n gh1.shouldRecognizeSimultaneously(gh2) ||\n gh2.shouldRecognizeSimultaneously(gh1)\n );\n }\n\n private shouldHandlerBeCancelledBy(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n if (this.canRunSimultaneously(handler, otherHandler)) {\n return false;\n }\n\n if (\n handler !== otherHandler &&\n (handler.isAwaiting() || handler.getState() === State.ACTIVE)\n ) {\n // For now it always returns false\n return handler.shouldBeCancelledByOther(otherHandler);\n }\n\n const handlerPointers: number[] = handler.getTrackedPointersID();\n const otherPointers: number[] = otherHandler.getTrackedPointersID();\n\n if (\n !PointerTracker.shareCommonPointers(handlerPointers, otherPointers) &&\n handler.getDelegate().getView() !== otherHandler.getDelegate().getView()\n ) {\n return this.checkOverlap(handler, otherHandler);\n }\n\n return true;\n }\n\n private checkOverlap(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n // If handlers don't have common pointers, default return value is false.\n // However, if at least on pointer overlaps with both handlers, we return true\n // This solves issue in overlapping parents example\n\n // TODO: Find better way to handle that issue, for example by activation order and handler cancelling\n\n const handlerPointers: number[] = handler.getTrackedPointersID();\n const otherPointers: number[] = otherHandler.getTrackedPointersID();\n\n let overlap = false;\n\n handlerPointers.forEach((pointer: number) => {\n const handlerX: number = handler.getTracker().getLastX(pointer);\n const handlerY: number = handler.getTracker().getLastY(pointer);\n\n if (\n handler.getDelegate().isPointerInBounds({ x: handlerX, y: handlerY }) &&\n otherHandler\n .getDelegate()\n .isPointerInBounds({ x: handlerX, y: handlerY })\n ) {\n overlap = true;\n }\n });\n\n otherPointers.forEach((pointer: number) => {\n const otherX: number = otherHandler.getTracker().getLastX(pointer);\n const otherY: number = otherHandler.getTracker().getLastY(pointer);\n\n if (\n handler.getDelegate().isPointerInBounds({ x: otherX, y: otherY }) &&\n otherHandler.getDelegate().isPointerInBounds({ x: otherX, y: otherY })\n ) {\n overlap = true;\n }\n });\n\n return overlap;\n }\n\n private isFinished(state: State): boolean {\n return (\n state === State.END || state === State.FAILED || state === State.CANCELLED\n );\n }\n\n // This function is called when handler receives touchdown event\n // If handler is using mouse or pen as a pointer and any handler receives touch event,\n // mouse/pen event dissappears - it doesn't send onPointerCancel nor onPointerUp (and others)\n // This became a problem because handler was left at active state without any signal to end or fail\n // To handle this, when new touch event is received, we loop through active handlers and check which type of\n // pointer they're using. If there are any handler with mouse/pen as a pointer, we cancel them\n public cancelMouseAndPenGestures(currentHandler: GestureHandler): void {\n this.gestureHandlers.forEach((handler: GestureHandler) => {\n if (\n handler.getPointerType() !== PointerType.MOUSE &&\n handler.getPointerType() !== PointerType.PEN\n ) {\n return;\n }\n\n if (handler !== currentHandler) {\n handler.cancel();\n } else {\n // Handler that received touch event should have its pointer tracker reset\n // This allows handler to smoothly change from mouse/pen to touch\n // The drawback is, that when we try to use mouse/pen one more time, it doesn't send onPointerDown at the first time\n // so it is required to click two times to get handler to work\n //\n // However, handler will receive manually created onPointerEnter that is triggered in EventManager in onPointerMove method.\n // There may be possibility to use that fact to make handler respond properly to first mouse click\n handler.getTracker().resetTracker();\n }\n });\n }\n\n public static getInstance(): GestureHandlerOrchestrator {\n if (!GestureHandlerOrchestrator.instance) {\n GestureHandlerOrchestrator.instance = new GestureHandlerOrchestrator();\n }\n\n return GestureHandlerOrchestrator.instance;\n }\n}\n"]}
|
1
|
+
{"version":3,"sources":["GestureHandlerOrchestrator.ts"],"names":["State","PointerType","PointerTracker","GestureHandlerOrchestrator","constructor","scheduleFinishedHandlersCleanup","handlingChangeSemaphore","cleanupFinishedHandlers","cleanHandler","handler","reset","setActive","setAwaiting","setActivationIndex","Number","MAX_VALUE","removeHandlerFromOrchestrator","gestureHandlers","splice","indexOf","awaitingHandlers","i","length","isFinished","getState","isAwaiting","hasOtherHandlerToWaitFor","hasToWait","forEach","otherHandler","shouldHandlerWaitForOther","tryActivate","addAwaitingHandler","CANCELLED","FAILED","shouldActivate","makeActive","ACTIVE","fail","BEGAN","cancel","shouldHandlerBeCancelledBy","cleanupAwaitingHandlers","onHandlerStateChange","newState","oldState","sendIfDisabled","isEnabled","END","sendEvent","isActive","UNDETERMINED","currentState","setShouldResetProgress","activationIndex","alreadyExists","push","recordHandlerIfNotPresent","MAX_SAFE_INTEGER","shouldWaitForHandlerFailure","shouldRequireToWaitForFailure","canRunSimultaneously","gh1","gh2","shouldRecognizeSimultaneously","shouldBeCancelledByOther","handlerPointers","getTrackedPointersID","otherPointers","shareCommonPointers","getDelegate","getView","checkOverlap","overlap","pointer","handlerX","getTracker","getLastX","handlerY","getLastY","isPointerInBounds","x","y","otherX","otherY","state","cancelMouseAndPenGestures","currentHandler","getPointerType","MOUSE","PEN","resetTracker","getInstance","instance"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { PointerType } from '../interfaces';\n\nimport GestureHandler from '../handlers/GestureHandler';\nimport PointerTracker from './PointerTracker';\n\nexport default class GestureHandlerOrchestrator {\n private static instance: GestureHandlerOrchestrator;\n\n private gestureHandlers: GestureHandler[] = [];\n private awaitingHandlers: GestureHandler[] = [];\n\n private handlingChangeSemaphore = 0;\n private activationIndex = 0;\n\n // Private beacuse of Singleton\n // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n private constructor() {}\n\n private scheduleFinishedHandlersCleanup(): void {\n if (this.handlingChangeSemaphore === 0) {\n this.cleanupFinishedHandlers();\n }\n }\n\n private cleanHandler(handler: GestureHandler): void {\n handler.reset();\n handler.setActive(false);\n handler.setAwaiting(false);\n handler.setActivationIndex(Number.MAX_VALUE);\n }\n\n public removeHandlerFromOrchestrator(handler: GestureHandler): void {\n this.gestureHandlers.splice(this.gestureHandlers.indexOf(handler), 1);\n this.awaitingHandlers.splice(this.awaitingHandlers.indexOf(handler), 1);\n }\n\n private cleanupFinishedHandlers(): void {\n for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {\n const handler = this.gestureHandlers[i];\n\n if (!handler) {\n continue;\n }\n if (this.isFinished(handler.getState()) && !handler.isAwaiting()) {\n this.gestureHandlers.splice(i, 1);\n\n this.cleanHandler(handler);\n }\n }\n }\n\n private hasOtherHandlerToWaitFor(handler: GestureHandler): boolean {\n let hasToWait = false;\n this.gestureHandlers.forEach((otherHandler) => {\n if (\n otherHandler &&\n !this.isFinished(otherHandler.getState()) &&\n this.shouldHandlerWaitForOther(handler, otherHandler)\n ) {\n hasToWait = true;\n return;\n }\n });\n\n return hasToWait;\n }\n\n private tryActivate(handler: GestureHandler): void {\n if (this.hasOtherHandlerToWaitFor(handler)) {\n this.addAwaitingHandler(handler);\n } else if (\n handler.getState() !== State.CANCELLED &&\n handler.getState() !== State.FAILED\n ) {\n if (this.shouldActivate(handler)) {\n this.makeActive(handler);\n } else {\n switch (handler.getState()) {\n case State.ACTIVE:\n handler.fail();\n break;\n case State.BEGAN:\n handler.cancel();\n }\n }\n }\n }\n\n private shouldActivate(handler: GestureHandler): boolean {\n for (const otherHandler of this.gestureHandlers) {\n if (this.shouldHandlerBeCancelledBy(handler, otherHandler)) {\n return false;\n }\n }\n\n return true;\n }\n\n private cleanupAwaitingHandlers(handler: GestureHandler): void {\n for (let i = 0; i < this.awaitingHandlers.length; ++i) {\n if (\n !this.awaitingHandlers[i].isAwaiting() &&\n this.shouldHandlerWaitForOther(this.awaitingHandlers[i], handler)\n ) {\n this.cleanHandler(this.awaitingHandlers[i]);\n this.awaitingHandlers.splice(i, 1);\n }\n }\n }\n\n public onHandlerStateChange(\n handler: GestureHandler,\n newState: State,\n oldState: State,\n sendIfDisabled?: boolean\n ): void {\n if (!handler.isEnabled() && !sendIfDisabled) {\n return;\n }\n\n this.handlingChangeSemaphore += 1;\n\n if (this.isFinished(newState)) {\n this.awaitingHandlers.forEach((otherHandler) => {\n if (this.shouldHandlerWaitForOther(otherHandler, handler)) {\n if (newState === State.END) {\n otherHandler?.cancel();\n if (otherHandler.getState() === State.END) {\n // Handle edge case, where discrete gestures end immediately after activation thus\n // their state is set to END and when the gesture they are waiting for activates they\n // should be cancelled, however `cancel` was never sent as gestures were already in the END state.\n // Send synthetic BEGAN -> CANCELLED to properly handle JS logic\n otherHandler.sendEvent(State.CANCELLED, State.BEGAN);\n }\n otherHandler?.setAwaiting(false);\n } else {\n this.tryActivate(otherHandler);\n }\n }\n });\n }\n\n if (newState === State.ACTIVE) {\n this.tryActivate(handler);\n } else if (oldState === State.ACTIVE || oldState === State.END) {\n if (handler.isActive()) {\n handler.sendEvent(newState, oldState);\n } else if (\n oldState === State.ACTIVE &&\n (newState === State.CANCELLED || newState === State.FAILED)\n ) {\n handler.sendEvent(newState, State.BEGAN);\n }\n } else if (\n oldState !== State.UNDETERMINED ||\n newState !== State.CANCELLED\n ) {\n handler.sendEvent(newState, oldState);\n }\n\n this.handlingChangeSemaphore -= 1;\n\n this.scheduleFinishedHandlersCleanup();\n\n if (this.awaitingHandlers.indexOf(handler) < 0) {\n this.cleanupAwaitingHandlers(handler);\n }\n }\n\n private makeActive(handler: GestureHandler): void {\n const currentState = handler.getState();\n\n handler.setActive(true);\n handler.setShouldResetProgress(true);\n handler.setActivationIndex(this.activationIndex++);\n\n for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {\n if (this.shouldHandlerBeCancelledBy(this.gestureHandlers[i], handler)) {\n this.gestureHandlers[i].cancel();\n }\n }\n\n this.awaitingHandlers.forEach((otherHandler) => {\n if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {\n otherHandler?.cancel();\n otherHandler?.setAwaiting(true);\n }\n });\n\n handler.sendEvent(State.ACTIVE, State.BEGAN);\n\n if (currentState !== State.ACTIVE) {\n handler.sendEvent(State.END, State.ACTIVE);\n if (currentState !== State.END) {\n handler.sendEvent(State.UNDETERMINED, State.END);\n }\n }\n\n if (handler.isAwaiting()) {\n handler.setAwaiting(false);\n for (let i = 0; i < this.awaitingHandlers.length; ++i) {\n if (this.awaitingHandlers[i] === handler) {\n this.awaitingHandlers.splice(i, 1);\n }\n }\n }\n }\n\n private addAwaitingHandler(handler: GestureHandler): void {\n let alreadyExists = false;\n\n this.awaitingHandlers.forEach((otherHandler) => {\n if (otherHandler === handler) {\n alreadyExists = true;\n return;\n }\n });\n\n if (alreadyExists) {\n return;\n }\n\n this.awaitingHandlers.push(handler);\n\n handler.setAwaiting(true);\n handler.setActivationIndex(this.activationIndex++);\n }\n\n public recordHandlerIfNotPresent(handler: GestureHandler): void {\n let alreadyExists = false;\n\n this.gestureHandlers.forEach((otherHandler) => {\n if (otherHandler === handler) {\n alreadyExists = true;\n return;\n }\n });\n\n if (alreadyExists) {\n return;\n }\n\n this.gestureHandlers.push(handler);\n\n handler.setActive(false);\n handler.setAwaiting(false);\n handler.setActivationIndex(Number.MAX_SAFE_INTEGER);\n }\n\n private shouldHandlerWaitForOther(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n return (\n handler !== otherHandler &&\n (handler.shouldWaitForHandlerFailure(otherHandler) ||\n otherHandler.shouldRequireToWaitForFailure(handler))\n );\n }\n\n private canRunSimultaneously(\n gh1: GestureHandler,\n gh2: GestureHandler\n ): boolean {\n return (\n gh1 === gh2 ||\n gh1.shouldRecognizeSimultaneously(gh2) ||\n gh2.shouldRecognizeSimultaneously(gh1)\n );\n }\n\n private shouldHandlerBeCancelledBy(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n if (this.canRunSimultaneously(handler, otherHandler)) {\n return false;\n }\n\n if (\n handler !== otherHandler &&\n (handler.isAwaiting() || handler.getState() === State.ACTIVE)\n ) {\n // For now it always returns false\n return handler.shouldBeCancelledByOther(otherHandler);\n }\n\n const handlerPointers: number[] = handler.getTrackedPointersID();\n const otherPointers: number[] = otherHandler.getTrackedPointersID();\n\n if (\n !PointerTracker.shareCommonPointers(handlerPointers, otherPointers) &&\n handler.getDelegate().getView() !== otherHandler.getDelegate().getView()\n ) {\n return this.checkOverlap(handler, otherHandler);\n }\n\n return true;\n }\n\n private checkOverlap(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n // If handlers don't have common pointers, default return value is false.\n // However, if at least on pointer overlaps with both handlers, we return true\n // This solves issue in overlapping parents example\n\n // TODO: Find better way to handle that issue, for example by activation order and handler cancelling\n\n const handlerPointers: number[] = handler.getTrackedPointersID();\n const otherPointers: number[] = otherHandler.getTrackedPointersID();\n\n let overlap = false;\n\n handlerPointers.forEach((pointer: number) => {\n const handlerX: number = handler.getTracker().getLastX(pointer);\n const handlerY: number = handler.getTracker().getLastY(pointer);\n\n if (\n handler.getDelegate().isPointerInBounds({ x: handlerX, y: handlerY }) &&\n otherHandler\n .getDelegate()\n .isPointerInBounds({ x: handlerX, y: handlerY })\n ) {\n overlap = true;\n }\n });\n\n otherPointers.forEach((pointer: number) => {\n const otherX: number = otherHandler.getTracker().getLastX(pointer);\n const otherY: number = otherHandler.getTracker().getLastY(pointer);\n\n if (\n handler.getDelegate().isPointerInBounds({ x: otherX, y: otherY }) &&\n otherHandler.getDelegate().isPointerInBounds({ x: otherX, y: otherY })\n ) {\n overlap = true;\n }\n });\n\n return overlap;\n }\n\n private isFinished(state: State): boolean {\n return (\n state === State.END || state === State.FAILED || state === State.CANCELLED\n );\n }\n\n // This function is called when handler receives touchdown event\n // If handler is using mouse or pen as a pointer and any handler receives touch event,\n // mouse/pen event dissappears - it doesn't send onPointerCancel nor onPointerUp (and others)\n // This became a problem because handler was left at active state without any signal to end or fail\n // To handle this, when new touch event is received, we loop through active handlers and check which type of\n // pointer they're using. If there are any handler with mouse/pen as a pointer, we cancel them\n public cancelMouseAndPenGestures(currentHandler: GestureHandler): void {\n this.gestureHandlers.forEach((handler: GestureHandler) => {\n if (\n handler.getPointerType() !== PointerType.MOUSE &&\n handler.getPointerType() !== PointerType.PEN\n ) {\n return;\n }\n\n if (handler !== currentHandler) {\n handler.cancel();\n } else {\n // Handler that received touch event should have its pointer tracker reset\n // This allows handler to smoothly change from mouse/pen to touch\n // The drawback is, that when we try to use mouse/pen one more time, it doesn't send onPointerDown at the first time\n // so it is required to click two times to get handler to work\n //\n // However, handler will receive manually created onPointerEnter that is triggered in EventManager in onPointerMove method.\n // There may be possibility to use that fact to make handler respond properly to first mouse click\n handler.getTracker().resetTracker();\n }\n });\n }\n\n public static getInstance(): GestureHandlerOrchestrator {\n if (!GestureHandlerOrchestrator.instance) {\n GestureHandlerOrchestrator.instance = new GestureHandlerOrchestrator();\n }\n\n return GestureHandlerOrchestrator.instance;\n }\n}\n"]}
|
@@ -7,6 +7,8 @@ export default class InteractionManager {
|
|
7
7
|
_defineProperty(this, "waitForRelations", new Map());
|
8
8
|
|
9
9
|
_defineProperty(this, "simultaneousRelations", new Map());
|
10
|
+
|
11
|
+
_defineProperty(this, "blocksHandlersRelations", new Map());
|
10
12
|
}
|
11
13
|
|
12
14
|
configureInteractions(handler, config) {
|
@@ -37,45 +39,39 @@ export default class InteractionManager {
|
|
37
39
|
});
|
38
40
|
this.simultaneousRelations.set(handler.getTag(), simultaneousHandlers);
|
39
41
|
}
|
42
|
+
|
43
|
+
if (config.blocksHandlers) {
|
44
|
+
const blocksHandlers = [];
|
45
|
+
config.blocksHandlers.forEach(otherHandler => {
|
46
|
+
if (typeof otherHandler === 'number') {
|
47
|
+
blocksHandlers.push(otherHandler);
|
48
|
+
} else {
|
49
|
+
blocksHandlers.push(otherHandler.handlerTag);
|
50
|
+
}
|
51
|
+
});
|
52
|
+
this.blocksHandlersRelations.set(handler.getTag(), blocksHandlers);
|
53
|
+
}
|
40
54
|
}
|
41
55
|
|
42
56
|
shouldWaitForHandlerFailure(handler, otherHandler) {
|
43
57
|
const waitFor = this.waitForRelations.get(handler.getTag());
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
}
|
48
|
-
|
49
|
-
let shouldWait = false;
|
50
|
-
waitFor.forEach(tag => {
|
51
|
-
if (tag === otherHandler.getTag()) {
|
52
|
-
shouldWait = true;
|
53
|
-
return; //Returns from callback
|
54
|
-
}
|
55
|
-
});
|
56
|
-
return shouldWait;
|
58
|
+
return (waitFor === null || waitFor === void 0 ? void 0 : waitFor.find(tag => {
|
59
|
+
return tag === otherHandler.getTag();
|
60
|
+
})) !== undefined;
|
57
61
|
}
|
58
62
|
|
59
63
|
shouldRecognizeSimultaneously(handler, otherHandler) {
|
60
64
|
const simultaneousHandlers = this.simultaneousRelations.get(handler.getTag());
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
}
|
65
|
-
|
66
|
-
let shouldRecognizeSimultaneously = false;
|
67
|
-
simultaneousHandlers.forEach(tag => {
|
68
|
-
if (tag === otherHandler.getTag()) {
|
69
|
-
shouldRecognizeSimultaneously = true;
|
70
|
-
return;
|
71
|
-
}
|
72
|
-
});
|
73
|
-
return shouldRecognizeSimultaneously;
|
65
|
+
return (simultaneousHandlers === null || simultaneousHandlers === void 0 ? void 0 : simultaneousHandlers.find(tag => {
|
66
|
+
return tag === otherHandler.getTag();
|
67
|
+
})) !== undefined;
|
74
68
|
}
|
75
69
|
|
76
|
-
shouldRequireHandlerToWaitForFailure(
|
77
|
-
|
78
|
-
return
|
70
|
+
shouldRequireHandlerToWaitForFailure(handler, otherHandler) {
|
71
|
+
const waitFor = this.blocksHandlersRelations.get(handler.getTag());
|
72
|
+
return (waitFor === null || waitFor === void 0 ? void 0 : waitFor.find(tag => {
|
73
|
+
return tag === otherHandler.getTag();
|
74
|
+
})) !== undefined;
|
79
75
|
}
|
80
76
|
|
81
77
|
shouldHandlerBeCancelledBy(_handler, _otherHandler) {
|
@@ -86,11 +82,13 @@ export default class InteractionManager {
|
|
86
82
|
dropRelationsForHandlerWithTag(handlerTag) {
|
87
83
|
this.waitForRelations.delete(handlerTag);
|
88
84
|
this.simultaneousRelations.delete(handlerTag);
|
85
|
+
this.blocksHandlersRelations.delete(handlerTag);
|
89
86
|
}
|
90
87
|
|
91
88
|
reset() {
|
92
89
|
this.waitForRelations.clear();
|
93
90
|
this.simultaneousRelations.clear();
|
91
|
+
this.blocksHandlersRelations.clear();
|
94
92
|
}
|
95
93
|
|
96
94
|
static getInstance() {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["InteractionManager.ts"],"names":["InteractionManager","constructor","Map","configureInteractions","handler","config","dropRelationsForHandlerWithTag","getTag","waitFor","forEach","otherHandler","push","handlerTag","waitForRelations","set","simultaneousHandlers","simultaneousRelations","shouldWaitForHandlerFailure","get","
|
1
|
+
{"version":3,"sources":["InteractionManager.ts"],"names":["InteractionManager","constructor","Map","configureInteractions","handler","config","dropRelationsForHandlerWithTag","getTag","waitFor","forEach","otherHandler","push","handlerTag","waitForRelations","set","simultaneousHandlers","simultaneousRelations","blocksHandlers","blocksHandlersRelations","shouldWaitForHandlerFailure","get","find","tag","undefined","shouldRecognizeSimultaneously","shouldRequireHandlerToWaitForFailure","shouldHandlerBeCancelledBy","_handler","_otherHandler","delete","reset","clear","getInstance","instance"],"mappings":"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","sourcesContent":["import GestureHandler from '../handlers/GestureHandler';\nimport { Config, Handler } from '../interfaces';\n\nexport default class InteractionManager {\n private static instance: InteractionManager;\n private readonly waitForRelations: Map<number, number[]> = new Map();\n private readonly simultaneousRelations: Map<number, number[]> = new Map();\n private readonly blocksHandlersRelations: Map<number, number[]> = new Map();\n\n // Private becaues of singleton\n // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n private constructor() {}\n\n public configureInteractions(handler: GestureHandler, config: Config) {\n this.dropRelationsForHandlerWithTag(handler.getTag());\n\n if (config.waitFor) {\n const waitFor: number[] = [];\n config.waitFor.forEach((otherHandler: Handler): void => {\n // New API reference\n if (typeof otherHandler === 'number') {\n waitFor.push(otherHandler);\n } else {\n // Old API reference\n waitFor.push(otherHandler.handlerTag);\n }\n });\n\n this.waitForRelations.set(handler.getTag(), waitFor);\n }\n\n if (config.simultaneousHandlers) {\n const simultaneousHandlers: number[] = [];\n config.simultaneousHandlers.forEach((otherHandler: Handler): void => {\n if (typeof otherHandler === 'number') {\n simultaneousHandlers.push(otherHandler);\n } else {\n simultaneousHandlers.push(otherHandler.handlerTag);\n }\n });\n\n this.simultaneousRelations.set(handler.getTag(), simultaneousHandlers);\n }\n\n if (config.blocksHandlers) {\n const blocksHandlers: number[] = [];\n config.blocksHandlers.forEach((otherHandler: Handler): void => {\n if (typeof otherHandler === 'number') {\n blocksHandlers.push(otherHandler);\n } else {\n blocksHandlers.push(otherHandler.handlerTag);\n }\n });\n\n this.blocksHandlersRelations.set(handler.getTag(), blocksHandlers);\n }\n }\n\n public shouldWaitForHandlerFailure(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n const waitFor: number[] | undefined = this.waitForRelations.get(\n handler.getTag()\n );\n\n return (\n waitFor?.find((tag: number) => {\n return tag === otherHandler.getTag();\n }) !== undefined\n );\n }\n\n public shouldRecognizeSimultaneously(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n const simultaneousHandlers: number[] | undefined =\n this.simultaneousRelations.get(handler.getTag());\n\n return (\n simultaneousHandlers?.find((tag: number) => {\n return tag === otherHandler.getTag();\n }) !== undefined\n );\n }\n\n public shouldRequireHandlerToWaitForFailure(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n const waitFor: number[] | undefined = this.blocksHandlersRelations.get(\n handler.getTag()\n );\n\n return (\n waitFor?.find((tag: number) => {\n return tag === otherHandler.getTag();\n }) !== undefined\n );\n }\n\n public shouldHandlerBeCancelledBy(\n _handler: GestureHandler,\n _otherHandler: GestureHandler\n ): boolean {\n //TODO: Implement logic\n return false;\n }\n\n public dropRelationsForHandlerWithTag(handlerTag: number): void {\n this.waitForRelations.delete(handlerTag);\n this.simultaneousRelations.delete(handlerTag);\n this.blocksHandlersRelations.delete(handlerTag);\n }\n\n public reset() {\n this.waitForRelations.clear();\n this.simultaneousRelations.clear();\n this.blocksHandlersRelations.clear();\n }\n\n public static getInstance(): InteractionManager {\n if (!this.instance) {\n this.instance = new InteractionManager();\n }\n\n return this.instance;\n }\n}\n"]}
|
@@ -3,6 +3,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
3
3
|
import { EventTypes, PointerType } from '../interfaces';
|
4
4
|
import EventManager from './EventManager';
|
5
5
|
import { isPointerInBounds } from '../utils';
|
6
|
+
const POINTER_CAPTURE_EXCLUDE_LIST = new Set(['SELECT', 'INPUT']);
|
6
7
|
export default class PointerEventManager extends EventManager {
|
7
8
|
constructor(...args) {
|
8
9
|
super(...args);
|
@@ -25,7 +26,11 @@ export default class PointerEventManager extends EventManager {
|
|
25
26
|
|
26
27
|
const adaptedEvent = this.mapEvent(event, EventTypes.DOWN);
|
27
28
|
const target = event.target;
|
28
|
-
|
29
|
+
|
30
|
+
if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
|
31
|
+
target.setPointerCapture(adaptedEvent.pointerId);
|
32
|
+
}
|
33
|
+
|
29
34
|
this.markAsInBounds(adaptedEvent.pointerId);
|
30
35
|
this.trackedPointers.add(adaptedEvent.pointerId);
|
31
36
|
|
@@ -51,7 +56,11 @@ export default class PointerEventManager extends EventManager {
|
|
51
56
|
|
52
57
|
const adaptedEvent = this.mapEvent(event, EventTypes.UP);
|
53
58
|
const target = event.target;
|
54
|
-
|
59
|
+
|
60
|
+
if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
|
61
|
+
target.releasePointerCapture(adaptedEvent.pointerId);
|
62
|
+
}
|
63
|
+
|
55
64
|
this.markAsOutOfBounds(adaptedEvent.pointerId);
|
56
65
|
this.trackedPointers.delete(adaptedEvent.pointerId);
|
57
66
|
|
@@ -81,7 +90,7 @@ export default class PointerEventManager extends EventManager {
|
|
81
90
|
// pointer moves until it succeeds.
|
82
91
|
// God, I do love web development.
|
83
92
|
|
84
|
-
if (!target.hasPointerCapture(event.pointerId)) {
|
93
|
+
if (!target.hasPointerCapture(event.pointerId) && !POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
|
85
94
|
target.setPointerCapture(event.pointerId);
|
86
95
|
}
|
87
96
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["PointerEventManager.ts"],"names":["EventTypes","PointerType","EventManager","isPointerInBounds","PointerEventManager","Set","setListeners","view","addEventListener","event","pointerType","TOUCH","x","clientX","y","clientY","adaptedEvent","mapEvent","DOWN","target","setPointerCapture","pointerId","markAsInBounds","trackedPointers","add","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","UP","releasePointerCapture","markAsOutOfBounds","delete","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","MOVE","hasPointerCapture","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","LEAVE","onPointerLeave","onPointerOutOfBounds","CANCEL","onPointerCancel","clear","onPointerMoveOver","onPointerMoveOut","has","offsetX","offsetY","buttons","time","timeStamp","resetManager"],"mappings":"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","sourcesContent":["import { AdaptedEvent, EventTypes, PointerType } from '../interfaces';\nimport EventManager from './EventManager';\nimport { isPointerInBounds } from '../utils';\n\nexport default class PointerEventManager extends EventManager<HTMLElement> {\n private trackedPointers = new Set<number>();\n\n public setListeners(): void {\n this.view.addEventListener('pointerdown', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n if (\n !isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })\n ) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);\n const target = event.target as HTMLElement;\n\n target.setPointerCapture(adaptedEvent.pointerId);\n this.markAsInBounds(adaptedEvent.pointerId);\n this.trackedPointers.add(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointerup', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);\n const target = event.target as HTMLElement;\n\n target.releasePointerCapture(adaptedEvent.pointerId);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.trackedPointers.delete(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointermove', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE);\n const target = event.target as HTMLElement;\n\n // You may be wondering why are we setting pointer capture here, when we\n // already set it in `pointerdown` handler. Well, that's a great question,\n // for which I don't have an answer. Specification (https://www.w3.org/TR/pointerevents2/#dom-element-setpointercapture)\n // says that the requirement for `setPointerCapture` to work is that pointer\n // must be in 'active buttons state`, otherwise it will fail silently, which\n // is lovely. Obviously, when `pointerdown` is fired, one of the buttons\n // (when using mouse) is pressed, but that doesn't mean that `setPointerCapture`\n // will succeed, for some reason. Since it fails silently, we don't actually know\n // if it worked or not (there's `gotpointercapture` event, but the complexity of\n // incorporating it here seems stupid), so we just call it again here, every time\n // pointer moves until it succeeds.\n // God, I do love web development.\n if (!target.hasPointerCapture(event.pointerId)) {\n target.setPointerCapture(event.pointerId);\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('pointercancel', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n });\n\n // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for\n // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.\n // We therefore use pointerenter and pointerleave events to handle the hover gesture,\n // mapping them to onPointerMoveOver and onPointerMoveOut respectively.\n\n this.view.addEventListener('pointerenter', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);\n\n this.onPointerMoveOver(adaptedEvent);\n });\n\n this.view.addEventListener('pointerleave', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);\n\n this.onPointerMoveOut(adaptedEvent);\n });\n\n this.view.addEventListener(\n 'lostpointercapture',\n (event: PointerEvent): void => {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n if (this.trackedPointers.has(adaptedEvent.pointerId)) {\n // in some cases the `pointerup` event is not fired, but `lostpointercapture` is\n // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it\n this.onPointerCancel(adaptedEvent);\n\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n }\n }\n );\n }\n\n protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent {\n return {\n x: event.clientX,\n y: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n pointerId: event.pointerId,\n eventType: eventType,\n pointerType: event.pointerType as PointerType,\n buttons: event.buttons,\n time: event.timeStamp,\n };\n }\n\n public resetManager(): void {\n super.resetManager();\n this.trackedPointers.clear();\n }\n}\n"]}
|
1
|
+
{"version":3,"sources":["PointerEventManager.ts"],"names":["EventTypes","PointerType","EventManager","isPointerInBounds","POINTER_CAPTURE_EXCLUDE_LIST","Set","PointerEventManager","setListeners","view","addEventListener","event","pointerType","TOUCH","x","clientX","y","clientY","adaptedEvent","mapEvent","DOWN","target","has","tagName","setPointerCapture","pointerId","markAsInBounds","trackedPointers","add","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","UP","releasePointerCapture","markAsOutOfBounds","delete","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","MOVE","hasPointerCapture","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","LEAVE","onPointerLeave","onPointerOutOfBounds","CANCEL","onPointerCancel","clear","onPointerMoveOver","onPointerMoveOut","offsetX","offsetY","buttons","time","timeStamp","resetManager"],"mappings":"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","sourcesContent":["import { AdaptedEvent, EventTypes, PointerType } from '../interfaces';\nimport EventManager from './EventManager';\nimport { isPointerInBounds } from '../utils';\n\nconst POINTER_CAPTURE_EXCLUDE_LIST = new Set<string>(['SELECT', 'INPUT']);\n\nexport default class PointerEventManager extends EventManager<HTMLElement> {\n private trackedPointers = new Set<number>();\n\n public setListeners(): void {\n this.view.addEventListener('pointerdown', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n if (\n !isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })\n ) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);\n const target = event.target as HTMLElement;\n\n if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {\n target.setPointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n this.trackedPointers.add(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointerup', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);\n const target = event.target as HTMLElement;\n\n if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {\n target.releasePointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.trackedPointers.delete(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointermove', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE);\n const target = event.target as HTMLElement;\n\n // You may be wondering why are we setting pointer capture here, when we\n // already set it in `pointerdown` handler. Well, that's a great question,\n // for which I don't have an answer. Specification (https://www.w3.org/TR/pointerevents2/#dom-element-setpointercapture)\n // says that the requirement for `setPointerCapture` to work is that pointer\n // must be in 'active buttons state`, otherwise it will fail silently, which\n // is lovely. Obviously, when `pointerdown` is fired, one of the buttons\n // (when using mouse) is pressed, but that doesn't mean that `setPointerCapture`\n // will succeed, for some reason. Since it fails silently, we don't actually know\n // if it worked or not (there's `gotpointercapture` event, but the complexity of\n // incorporating it here seems stupid), so we just call it again here, every time\n // pointer moves until it succeeds.\n // God, I do love web development.\n if (\n !target.hasPointerCapture(event.pointerId) &&\n !POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)\n ) {\n target.setPointerCapture(event.pointerId);\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('pointercancel', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n });\n\n // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for\n // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.\n // We therefore use pointerenter and pointerleave events to handle the hover gesture,\n // mapping them to onPointerMoveOver and onPointerMoveOut respectively.\n\n this.view.addEventListener('pointerenter', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);\n\n this.onPointerMoveOver(adaptedEvent);\n });\n\n this.view.addEventListener('pointerleave', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);\n\n this.onPointerMoveOut(adaptedEvent);\n });\n\n this.view.addEventListener(\n 'lostpointercapture',\n (event: PointerEvent): void => {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n if (this.trackedPointers.has(adaptedEvent.pointerId)) {\n // in some cases the `pointerup` event is not fired, but `lostpointercapture` is\n // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it\n this.onPointerCancel(adaptedEvent);\n\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n }\n }\n );\n }\n\n protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent {\n return {\n x: event.clientX,\n y: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n pointerId: event.pointerId,\n eventType: eventType,\n pointerType: event.pointerType as PointerType,\n buttons: event.buttons,\n time: event.timeStamp,\n };\n }\n\n public resetManager(): void {\n super.resetManager();\n this.trackedPointers.clear();\n }\n}\n"]}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { ActionType } from './ActionType';
|
2
|
-
export
|
2
|
+
export type RNGestureHandlerModuleProps = {
|
3
3
|
handleSetJSResponder: (tag: number, blockNativeResponder: boolean) => void;
|
4
4
|
handleClearJSResponder: () => void;
|
5
5
|
createGestureHandler: (handlerName: string, handlerTag: number, config: Readonly<Record<string, unknown>>) => void;
|
@@ -5,4 +5,4 @@ export declare const TouchEventType: {
|
|
5
5
|
readonly TOUCHES_UP: 3;
|
6
6
|
readonly TOUCHES_CANCELLED: 4;
|
7
7
|
};
|
8
|
-
export
|
8
|
+
export type TouchEventType = typeof TouchEventType[keyof typeof TouchEventType];
|
@@ -3,12 +3,12 @@ import { Component } from 'react';
|
|
3
3
|
import { Animated, StatusBarAnimation, StyleProp, ViewStyle } from 'react-native';
|
4
4
|
import { UserSelect, ActiveCursor } from '../handlers/gestureHandlerCommon';
|
5
5
|
import { PanGestureHandler } from '../handlers/PanGestureHandler';
|
6
|
-
export
|
7
|
-
export
|
8
|
-
export
|
9
|
-
export
|
10
|
-
export
|
11
|
-
|
6
|
+
export type DrawerPosition = 'left' | 'right';
|
7
|
+
export type DrawerState = 'Idle' | 'Dragging' | 'Settling';
|
8
|
+
export type DrawerType = 'front' | 'back' | 'slide';
|
9
|
+
export type DrawerLockMode = 'unlocked' | 'locked-closed' | 'locked-open';
|
10
|
+
export type DrawerKeyboardDismissMode = 'none' | 'on-drag';
|
11
|
+
type AnimatedInterpolation = ReturnType<Animated.Value['interpolate']>;
|
12
12
|
export interface DrawerLayoutProps {
|
13
13
|
/**
|
14
14
|
* This attribute is present in the standard implementation already and is one
|
@@ -94,7 +94,7 @@ export interface DrawerLayoutProps {
|
|
94
94
|
*/
|
95
95
|
activeCursor?: ActiveCursor;
|
96
96
|
}
|
97
|
-
export
|
97
|
+
export type DrawerLayoutState = {
|
98
98
|
dragX: Animated.Value;
|
99
99
|
touchX: Animated.Value;
|
100
100
|
drawerTranslation: Animated.Value;
|
@@ -102,7 +102,7 @@ export declare type DrawerLayoutState = {
|
|
102
102
|
drawerState: DrawerState;
|
103
103
|
drawerOpened: boolean;
|
104
104
|
};
|
105
|
-
export
|
105
|
+
export type DrawerMovementOption = {
|
106
106
|
velocity?: number;
|
107
107
|
speed?: number;
|
108
108
|
};
|
@@ -143,6 +143,6 @@ export default class DrawerLayout extends Component<DrawerLayoutProps, DrawerLay
|
|
143
143
|
private renderOverlay;
|
144
144
|
private renderDrawer;
|
145
145
|
private setPanGestureRef;
|
146
|
-
render(): JSX.Element;
|
146
|
+
render(): React.JSX.Element;
|
147
147
|
}
|
148
148
|
export {};
|
@@ -96,7 +96,7 @@ export declare class BaseButton extends React.Component<BaseButtonProps> {
|
|
96
96
|
private onLongPress;
|
97
97
|
private onHandlerStateChange;
|
98
98
|
private onGestureEvent;
|
99
|
-
render(): JSX.Element;
|
99
|
+
render(): React.JSX.Element;
|
100
100
|
}
|
101
101
|
export declare class RectButton extends React.Component<RectButtonProps> {
|
102
102
|
static defaultProps: {
|
@@ -106,7 +106,7 @@ export declare class RectButton extends React.Component<RectButtonProps> {
|
|
106
106
|
private opacity;
|
107
107
|
constructor(props: RectButtonProps);
|
108
108
|
private onActiveStateChange;
|
109
|
-
render(): JSX.Element;
|
109
|
+
render(): React.JSX.Element;
|
110
110
|
}
|
111
111
|
export declare class BorderlessButton extends React.Component<BorderlessButtonProps> {
|
112
112
|
static defaultProps: {
|
@@ -116,6 +116,6 @@ export declare class BorderlessButton extends React.Component<BorderlessButtonPr
|
|
116
116
|
private opacity;
|
117
117
|
constructor(props: BorderlessButtonProps);
|
118
118
|
private onActiveStateChange;
|
119
|
-
render(): JSX.Element;
|
119
|
+
render(): React.JSX.Element;
|
120
120
|
}
|
121
121
|
export { default as PureNativeButton } from './GestureHandlerButton';
|
@@ -3,20 +3,20 @@ import { PropsWithChildren, ForwardedRef, RefAttributes, ReactElement } from 're
|
|
3
3
|
import { ScrollView as RNScrollView, ScrollViewProps as RNScrollViewProps, Switch as RNSwitch, SwitchProps as RNSwitchProps, TextInput as RNTextInput, TextInputProps as RNTextInputProps, DrawerLayoutAndroid as RNDrawerLayoutAndroid, DrawerLayoutAndroidProps as RNDrawerLayoutAndroidProps, FlatList as RNFlatList, FlatListProps as RNFlatListProps, RefreshControl as RNRefreshControl } from 'react-native';
|
4
4
|
import { NativeViewGestureHandlerProps } from '../handlers/NativeViewGestureHandler';
|
5
5
|
export declare const RefreshControl: React.ForwardRefExoticComponent<import("react-native").RefreshControlProps & NativeViewGestureHandlerProps & React.RefAttributes<React.ComponentType<any>>>;
|
6
|
-
export
|
6
|
+
export type RefreshControl = typeof RefreshControl & RNRefreshControl;
|
7
7
|
declare const GHScrollView: React.ForwardRefExoticComponent<RNScrollViewProps & {
|
8
8
|
children?: React.ReactNode;
|
9
9
|
} & NativeViewGestureHandlerProps & React.RefAttributes<React.ComponentType<any>>>;
|
10
10
|
export declare const ScrollView: React.ForwardRefExoticComponent<RNScrollViewProps & NativeViewGestureHandlerProps & React.RefAttributes<RNScrollView>>;
|
11
|
-
export
|
11
|
+
export type ScrollView = typeof GHScrollView & RNScrollView;
|
12
12
|
export declare const Switch: React.ForwardRefExoticComponent<RNSwitchProps & NativeViewGestureHandlerProps & React.RefAttributes<React.ComponentType<any>>>;
|
13
|
-
export
|
13
|
+
export type Switch = typeof Switch & RNSwitch;
|
14
14
|
export declare const TextInput: React.ForwardRefExoticComponent<RNTextInputProps & NativeViewGestureHandlerProps & React.RefAttributes<React.ComponentType<any>>>;
|
15
|
-
export
|
15
|
+
export type TextInput = typeof TextInput & RNTextInput;
|
16
16
|
export declare const DrawerLayoutAndroid: React.ForwardRefExoticComponent<RNDrawerLayoutAndroidProps & {
|
17
17
|
children?: React.ReactNode;
|
18
18
|
} & NativeViewGestureHandlerProps & React.RefAttributes<React.ComponentType<any>>>;
|
19
|
-
export
|
19
|
+
export type DrawerLayoutAndroid = typeof DrawerLayoutAndroid & RNDrawerLayoutAndroid;
|
20
20
|
export declare const FlatList: <ItemT = any>(props: React.PropsWithChildren<RNFlatListProps<ItemT> & React.RefAttributes<FlatList<ItemT>> & NativeViewGestureHandlerProps>, ref: React.ForwardedRef<FlatList<ItemT>>) => ReactElement | null;
|
21
|
-
export
|
21
|
+
export type FlatList<ItemT = any> = typeof FlatList & RNFlatList<ItemT>;
|
22
22
|
export {};
|
@@ -3,6 +3,6 @@ import { FlatListProps } from 'react-native';
|
|
3
3
|
export declare const ScrollView: React.ForwardRefExoticComponent<import("react-native").ScrollViewProps & import("..").NativeViewGestureHandlerProps & React.RefAttributes<React.ComponentType<any>>>;
|
4
4
|
export declare const Switch: React.ForwardRefExoticComponent<import("react-native").SwitchProps & import("..").NativeViewGestureHandlerProps & React.RefAttributes<React.ComponentType<any>>>;
|
5
5
|
export declare const TextInput: React.ForwardRefExoticComponent<import("react-native").TextInputProps & import("..").NativeViewGestureHandlerProps & React.RefAttributes<React.ComponentType<any>>>;
|
6
|
-
export declare const DrawerLayoutAndroid: () => JSX.Element;
|
6
|
+
export declare const DrawerLayoutAndroid: () => React.JSX.Element;
|
7
7
|
export declare const RefreshControl: React.ForwardRefExoticComponent<import("react-native").ViewProps & import("..").NativeViewGestureHandlerProps & React.RefAttributes<React.ComponentType<any>>>;
|
8
8
|
export declare const FlatList: React.ForwardRefExoticComponent<FlatListProps<unknown> & React.RefAttributes<unknown>>;
|
@@ -1,5 +1,6 @@
|
|
1
|
+
import * as React from 'react';
|
1
2
|
import { PropsWithChildren } from 'react';
|
2
3
|
import { ViewProps } from 'react-native';
|
3
4
|
export interface GestureHandlerRootViewProps extends PropsWithChildren<ViewProps> {
|
4
5
|
}
|
5
|
-
export default function GestureHandlerRootView(props: GestureHandlerRootViewProps): JSX.Element;
|
6
|
+
export default function GestureHandlerRootView(props: GestureHandlerRootViewProps): React.JSX.Element;
|
@@ -1,5 +1,6 @@
|
|
1
|
+
import * as React from 'react';
|
1
2
|
import { PropsWithChildren } from 'react';
|
2
3
|
import { ViewProps } from 'react-native';
|
3
4
|
export interface GestureHandlerRootViewProps extends PropsWithChildren<ViewProps> {
|
4
5
|
}
|
5
|
-
export default function GestureHandlerRootView(props: GestureHandlerRootViewProps): JSX.Element;
|
6
|
+
export default function GestureHandlerRootView(props: GestureHandlerRootViewProps): React.JSX.Element;
|
@@ -1,5 +1,6 @@
|
|
1
|
+
import * as React from 'react';
|
1
2
|
import { PropsWithChildren } from 'react';
|
2
3
|
import { ViewProps } from 'react-native';
|
3
4
|
export interface GestureHandlerRootViewProps extends PropsWithChildren<ViewProps> {
|
4
5
|
}
|
5
|
-
export default function GestureHandlerRootView(props: GestureHandlerRootViewProps): JSX.Element;
|
6
|
+
export default function GestureHandlerRootView(props: GestureHandlerRootViewProps): React.JSX.Element;
|
@@ -2,8 +2,8 @@ import * as React from 'react';
|
|
2
2
|
import { Component } from 'react';
|
3
3
|
import { Animated, StyleProp, ViewStyle } from 'react-native';
|
4
4
|
import { PanGestureHandlerProps } from '../handlers/PanGestureHandler';
|
5
|
-
|
6
|
-
|
5
|
+
type SwipeableExcludes = Exclude<keyof PanGestureHandlerProps, 'onGestureEvent' | 'onHandlerStateChange'>;
|
6
|
+
type AnimatedInterpolation = ReturnType<Animated.Value['interpolate']>;
|
7
7
|
export interface SwipeableProps extends Pick<PanGestureHandlerProps, SwipeableExcludes> {
|
8
8
|
/**
|
9
9
|
* Enables two-finger gestures on supported devices, for example iPads with
|
@@ -140,7 +140,7 @@ export interface SwipeableProps extends Pick<PanGestureHandlerProps, SwipeableEx
|
|
140
140
|
*/
|
141
141
|
childrenContainerStyle?: StyleProp<ViewStyle>;
|
142
142
|
}
|
143
|
-
|
143
|
+
type SwipeableState = {
|
144
144
|
dragX: Animated.Value;
|
145
145
|
rowTranslation: Animated.Value;
|
146
146
|
rowState: number;
|
@@ -173,6 +173,6 @@ export default class Swipeable extends Component<SwipeableProps, SwipeableState>
|
|
173
173
|
openLeft: () => void;
|
174
174
|
openRight: () => void;
|
175
175
|
reset: () => void;
|
176
|
-
render(): JSX.Element;
|
176
|
+
render(): React.JSX.Element;
|
177
177
|
}
|
178
178
|
export {};
|