react-native-gesture-handler 2.27.2 → 2.28.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/RNGestureHandler.podspec +3 -2
- package/android/build.gradle +1 -8
- package/android/src/main/jni/CMakeLists.txt +5 -0
- package/android/src/main/jni/cpp-adapter.cpp +6 -0
- package/apple/RNGestureHandlerModule.mm +5 -0
- package/lib/commonjs/components/gestureHandlerRootHOC.js +4 -1
- package/lib/commonjs/components/gestureHandlerRootHOC.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +1 -1
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/index.js +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/index.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +4 -2
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +0 -5
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/commonjs/web/tools/KeyboardEventManager.js +34 -8
- package/lib/commonjs/web/tools/KeyboardEventManager.js.map +1 -1
- package/lib/module/components/gestureHandlerRootHOC.js +5 -0
- package/lib/module/components/gestureHandlerRootHOC.js.map +1 -1
- package/lib/module/handlers/createHandler.js +1 -1
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/index.js +1 -1
- package/lib/module/handlers/gestures/GestureDetector/index.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +4 -2
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerWebDelegate.js +0 -5
- package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/module/web/tools/KeyboardEventManager.js +34 -8
- package/lib/module/web/tools/KeyboardEventManager.js.map +1 -1
- package/lib/typescript/components/gestureHandlerRootHOC.d.ts +4 -0
- package/lib/typescript/components/gestureHandlerRootHOC.d.ts.map +1 -1
- package/lib/typescript/web/handlers/GestureHandler.d.ts.map +1 -1
- package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts.map +1 -1
- package/lib/typescript/web/tools/KeyboardEventManager.d.ts +6 -3
- package/lib/typescript/web/tools/KeyboardEventManager.d.ts.map +1 -1
- package/package.json +4 -3
- package/scripts/gesture_handler_utils.rb +25 -0
- package/src/components/gestureHandlerRootHOC.tsx +4 -0
- package/src/handlers/createHandler.tsx +1 -1
- package/src/handlers/gestures/GestureDetector/index.tsx +1 -1
- package/src/web/handlers/GestureHandler.ts +7 -3
- package/src/web/tools/GestureHandlerWebDelegate.ts +0 -5
- package/src/web/tools/KeyboardEventManager.ts +50 -8
@@ -3,25 +3,47 @@ import EventManager from './EventManager';
|
|
3
3
|
import { PointerType } from '../../PointerType';
|
4
4
|
|
5
5
|
export default class KeyboardEventManager extends EventManager<HTMLElement> {
|
6
|
-
private activationKeys = ['Enter', ' '];
|
7
|
-
private cancelationKeys = ['Tab'];
|
6
|
+
private static activationKeys = ['Enter', ' '];
|
7
|
+
private static cancelationKeys = ['Tab'];
|
8
8
|
private isPressed = false;
|
9
|
+
private static registeredStaticListeners = false;
|
10
|
+
private static instances: Set<KeyboardEventManager> = new Set();
|
11
|
+
|
12
|
+
private static keyUpStaticCallback = (event: KeyboardEvent): void => {
|
13
|
+
// We need a global listener, as in some cases, keyUp event gets stop-propagated.
|
14
|
+
// Then, if we used only component-level listeners the gesture would never end,
|
15
|
+
// causing other gestues to fail.
|
16
|
+
|
17
|
+
if (this.activationKeys.indexOf(event.key) === -1) {
|
18
|
+
return;
|
19
|
+
}
|
20
|
+
|
21
|
+
this.instances.forEach((item) => {
|
22
|
+
item.onKeyUp(event);
|
23
|
+
});
|
24
|
+
};
|
9
25
|
|
10
26
|
private keyDownCallback = (event: KeyboardEvent): void => {
|
11
|
-
if (
|
27
|
+
if (
|
28
|
+
KeyboardEventManager.cancelationKeys.indexOf(event.key) !== -1 &&
|
29
|
+
this.isPressed
|
30
|
+
) {
|
12
31
|
this.dispatchEvent(event, EventTypes.CANCEL);
|
13
32
|
return;
|
14
33
|
}
|
15
34
|
|
16
|
-
if (
|
35
|
+
if (KeyboardEventManager.activationKeys.indexOf(event.key) === -1) {
|
17
36
|
return;
|
18
37
|
}
|
19
38
|
|
20
39
|
this.dispatchEvent(event, EventTypes.DOWN);
|
21
40
|
};
|
22
41
|
|
23
|
-
private
|
24
|
-
if (
|
42
|
+
private onKeyUp = (event: KeyboardEvent): void => {
|
43
|
+
if (
|
44
|
+
KeyboardEventManager.activationKeys.indexOf(event.key) === -1 ||
|
45
|
+
!this.isPressed
|
46
|
+
) {
|
25
47
|
return;
|
26
48
|
}
|
27
49
|
|
@@ -53,12 +75,32 @@ export default class KeyboardEventManager extends EventManager<HTMLElement> {
|
|
53
75
|
|
54
76
|
public registerListeners(): void {
|
55
77
|
this.view.addEventListener('keydown', this.keyDownCallback);
|
56
|
-
|
78
|
+
|
79
|
+
KeyboardEventManager.instances.add(this);
|
80
|
+
|
81
|
+
if (!KeyboardEventManager.registeredStaticListeners) {
|
82
|
+
KeyboardEventManager.registeredStaticListeners = true;
|
83
|
+
document.addEventListener(
|
84
|
+
'keyup',
|
85
|
+
KeyboardEventManager.keyUpStaticCallback,
|
86
|
+
{ capture: true }
|
87
|
+
);
|
88
|
+
}
|
57
89
|
}
|
58
90
|
|
59
91
|
public unregisterListeners(): void {
|
60
92
|
this.view.removeEventListener('keydown', this.keyDownCallback);
|
61
|
-
|
93
|
+
|
94
|
+
KeyboardEventManager.instances.delete(this);
|
95
|
+
|
96
|
+
if (KeyboardEventManager.instances.size === 0) {
|
97
|
+
document.removeEventListener(
|
98
|
+
'keyup',
|
99
|
+
KeyboardEventManager.keyUpStaticCallback,
|
100
|
+
{ capture: true }
|
101
|
+
);
|
102
|
+
KeyboardEventManager.registeredStaticListeners = false;
|
103
|
+
}
|
62
104
|
}
|
63
105
|
|
64
106
|
protected mapEvent(
|