react-native-gesture-handler 2.33.0 → 2.33.1

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.
Files changed (100) hide show
  1. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +3 -0
  2. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +2 -0
  3. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +9 -3
  4. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +5 -8
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/HoverGestureHandler.kt +1 -0
  6. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +2 -1
  7. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +6 -0
  8. package/apple/RNGestureHandler.mm +15 -3
  9. package/apple/RNGestureHandlerButtonComponentView.mm +6 -0
  10. package/lib/commonjs/handlers/createHandler.js +1 -1
  11. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  12. package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.js +10 -0
  13. package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.js.map +1 -1
  14. package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js +8 -1
  15. package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -1
  16. package/lib/commonjs/handlers/gestures/GestureDetector/index.js +5 -1
  17. package/lib/commonjs/handlers/gestures/GestureDetector/index.js.map +1 -1
  18. package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js +7 -0
  19. package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -1
  20. package/lib/commonjs/handlers/gestures/GestureDetector/useMountReactions.js +22 -3
  21. package/lib/commonjs/handlers/gestures/GestureDetector/useMountReactions.js.map +1 -1
  22. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js +35 -6
  23. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js.map +1 -1
  24. package/lib/commonjs/handlers/gestures/gesture.js +8 -0
  25. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  26. package/lib/commonjs/handlers/gestures/gestureComposition.js +14 -2
  27. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -1
  28. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +23 -0
  29. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
  30. package/lib/commonjs/specs/RNGestureHandlerRootViewNativeComponent.ts +11 -2
  31. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +5 -1
  32. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  33. package/lib/commonjs/web/tools/KeyboardEventManager.js +17 -12
  34. package/lib/commonjs/web/tools/KeyboardEventManager.js.map +1 -1
  35. package/lib/commonjs/web/tools/WheelEventManager.js +15 -5
  36. package/lib/commonjs/web/tools/WheelEventManager.js.map +1 -1
  37. package/lib/module/handlers/createHandler.js +1 -1
  38. package/lib/module/handlers/createHandler.js.map +1 -1
  39. package/lib/module/handlers/gestures/GestureDetector/Wrap.js +12 -2
  40. package/lib/module/handlers/gestures/GestureDetector/Wrap.js.map +1 -1
  41. package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js +9 -2
  42. package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -1
  43. package/lib/module/handlers/gestures/GestureDetector/index.js +5 -1
  44. package/lib/module/handlers/gestures/GestureDetector/index.js.map +1 -1
  45. package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js +8 -1
  46. package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -1
  47. package/lib/module/handlers/gestures/GestureDetector/useMountReactions.js +22 -3
  48. package/lib/module/handlers/gestures/GestureDetector/useMountReactions.js.map +1 -1
  49. package/lib/module/handlers/gestures/GestureDetector/utils.js +34 -6
  50. package/lib/module/handlers/gestures/GestureDetector/utils.js.map +1 -1
  51. package/lib/module/handlers/gestures/gesture.js +8 -0
  52. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  53. package/lib/module/handlers/gestures/gestureComposition.js +14 -2
  54. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
  55. package/lib/module/handlers/gestures/reanimatedWrapper.js +22 -0
  56. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
  57. package/lib/module/specs/RNGestureHandlerRootViewNativeComponent.ts +11 -2
  58. package/lib/module/web/tools/GestureHandlerWebDelegate.js +5 -1
  59. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  60. package/lib/module/web/tools/KeyboardEventManager.js +17 -12
  61. package/lib/module/web/tools/KeyboardEventManager.js.map +1 -1
  62. package/lib/module/web/tools/WheelEventManager.js +15 -5
  63. package/lib/module/web/tools/WheelEventManager.js.map +1 -1
  64. package/lib/typescript/handlers/createHandler.d.ts.map +1 -1
  65. package/lib/typescript/handlers/gestures/GestureDetector/Wrap.d.ts +1 -0
  66. package/lib/typescript/handlers/gestures/GestureDetector/Wrap.d.ts.map +1 -1
  67. package/lib/typescript/handlers/gestures/GestureDetector/attachHandlers.d.ts.map +1 -1
  68. package/lib/typescript/handlers/gestures/GestureDetector/index.d.ts.map +1 -1
  69. package/lib/typescript/handlers/gestures/GestureDetector/types.d.ts +1 -0
  70. package/lib/typescript/handlers/gestures/GestureDetector/types.d.ts.map +1 -1
  71. package/lib/typescript/handlers/gestures/GestureDetector/updateHandlers.d.ts.map +1 -1
  72. package/lib/typescript/handlers/gestures/GestureDetector/useMountReactions.d.ts.map +1 -1
  73. package/lib/typescript/handlers/gestures/GestureDetector/utils.d.ts +5 -4
  74. package/lib/typescript/handlers/gestures/GestureDetector/utils.d.ts.map +1 -1
  75. package/lib/typescript/handlers/gestures/gesture.d.ts +4 -0
  76. package/lib/typescript/handlers/gestures/gesture.d.ts.map +1 -1
  77. package/lib/typescript/handlers/gestures/gestureComposition.d.ts.map +1 -1
  78. package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts +1 -0
  79. package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts.map +1 -1
  80. package/lib/typescript/specs/RNGestureHandlerRootViewNativeComponent.d.ts.map +1 -1
  81. package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts.map +1 -1
  82. package/lib/typescript/web/tools/KeyboardEventManager.d.ts +2 -1
  83. package/lib/typescript/web/tools/KeyboardEventManager.d.ts.map +1 -1
  84. package/lib/typescript/web/tools/WheelEventManager.d.ts.map +1 -1
  85. package/package.json +1 -1
  86. package/src/handlers/createHandler.tsx +4 -1
  87. package/src/handlers/gestures/GestureDetector/Wrap.tsx +17 -1
  88. package/src/handlers/gestures/GestureDetector/attachHandlers.ts +11 -2
  89. package/src/handlers/gestures/GestureDetector/index.tsx +4 -0
  90. package/src/handlers/gestures/GestureDetector/types.ts +3 -0
  91. package/src/handlers/gestures/GestureDetector/updateHandlers.ts +8 -0
  92. package/src/handlers/gestures/GestureDetector/useMountReactions.ts +29 -4
  93. package/src/handlers/gestures/GestureDetector/utils.ts +42 -10
  94. package/src/handlers/gestures/gesture.ts +11 -0
  95. package/src/handlers/gestures/gestureComposition.ts +15 -2
  96. package/src/handlers/gestures/reanimatedWrapper.ts +23 -0
  97. package/src/specs/RNGestureHandlerRootViewNativeComponent.ts +11 -2
  98. package/src/web/tools/GestureHandlerWebDelegate.ts +6 -1
  99. package/src/web/tools/KeyboardEventManager.ts +20 -18
  100. package/src/web/tools/WheelEventManager.ts +14 -5
@@ -54,4 +54,27 @@ if (Reanimated !== undefined && !Reanimated.setGestureState) {
54
54
  };
55
55
  }
56
56
 
57
+ // Reanimated resolves `getAnimatableRef()` once, when its ref to the wrapped
58
+ // component attaches. Only versions that re-resolve it on update (their
59
+ // `AnimatedComponent` has `_refreshComponentRef`) can be handed a child's host
60
+ // instance that may change, as the legacy `Wrap` does. The class is not
61
+ // exported, so probe it by subpath, as the v3 detector does for
62
+ // `NativeEventsManager`.
63
+ let refreshesAnimatableRef = false;
64
+ try {
65
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
66
+ const AnimatedComponent =
67
+ // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-unsafe-member-access
68
+ require('react-native-reanimated/src/createAnimatedComponent/AnimatedComponent').default;
69
+ refreshesAnimatableRef =
70
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
71
+ typeof AnimatedComponent?.prototype?._refreshComponentRef === 'function';
72
+ } catch {
73
+ // Reanimated is missing or older; keep handing Reanimated the Wrap itself.
74
+ }
75
+
76
+ export function reanimatedRefreshesAnimatableRef() {
77
+ return refreshesAnimatableRef;
78
+ }
79
+
57
80
  export { Reanimated };
@@ -1,10 +1,19 @@
1
1
  import { codegenNativeComponent } from 'react-native';
2
- import type { HostComponent, ViewProps } from 'react-native';
2
+ import type { CodegenTypes, HostComponent, ViewProps } from 'react-native';
3
3
 
4
4
  export interface RootViewNativeProps extends ViewProps {
5
5
  unstable_forceActive?: boolean;
6
6
  }
7
7
 
8
- export default codegenNativeComponent<RootViewNativeProps>(
8
+ // @ts-expect-error WithDefault adds null for codegen, unlike ViewProps.pointerEvents.
9
+ interface NativeProps extends ViewProps {
10
+ pointerEvents?: CodegenTypes.WithDefault<
11
+ 'box-none' | 'none' | 'box-only' | 'auto',
12
+ 'auto'
13
+ >;
14
+ unstable_forceActive?: boolean;
15
+ }
16
+
17
+ export default codegenNativeComponent<NativeProps>(
9
18
  'RNGestureHandlerRootView'
10
19
  ) as HostComponent<RootViewNativeProps>;
@@ -12,6 +12,7 @@ import { Config } from '../interfaces';
12
12
  import { MouseButton } from '../../handlers/gestureHandlerCommon';
13
13
  import KeyboardEventManager from './KeyboardEventManager';
14
14
  import WheelEventManager from './WheelEventManager';
15
+ import PanGestureHandler from '../handlers/PanGestureHandler';
15
16
 
16
17
  interface DefaultViewStyles {
17
18
  userSelect: string;
@@ -49,6 +50,7 @@ export class GestureHandlerWebDelegate
49
50
  };
50
51
 
51
52
  const config = handler.config;
53
+ const shouldSendWheelEvents = handler instanceof PanGestureHandler;
52
54
 
53
55
  this.setUserSelect(config.enabled);
54
56
  this.setTouchAction(config.enabled);
@@ -56,7 +58,10 @@ export class GestureHandlerWebDelegate
56
58
 
57
59
  this.eventManagers.push(new PointerEventManager(this.view));
58
60
  this.eventManagers.push(new KeyboardEventManager(this.view));
59
- this.eventManagers.push(new WheelEventManager(this.view));
61
+
62
+ if (shouldSendWheelEvents) {
63
+ this.eventManagers.push(new WheelEventManager(this.view));
64
+ }
60
65
 
61
66
  this.eventManagers.forEach((manager) =>
62
67
  this.gestureHandler.attachEventManager(manager)
@@ -3,9 +3,10 @@ import EventManager from './EventManager';
3
3
  import { PointerType } from '../../PointerType';
4
4
 
5
5
  export default class KeyboardEventManager extends EventManager<HTMLElement> {
6
- private static activationKeys = ['Enter', ' '];
7
- private static cancelationKeys = ['Tab'];
8
- private isPressed = false;
6
+ private static activationKeys = new Set(['Enter', ' ']);
7
+ private static cancelationKeys = new Set(['Tab']);
8
+ private keyPointer: string | null = null;
9
+
9
10
  private static registeredStaticListeners = false;
10
11
  private static instances: Set<KeyboardEventManager> = new Set();
11
12
 
@@ -13,8 +14,7 @@ export default class KeyboardEventManager extends EventManager<HTMLElement> {
13
14
  // We need a global listener, as in some cases, keyUp event gets stop-propagated.
14
15
  // Then, if we used only component-level listeners the gesture would never end,
15
16
  // causing other gestues to fail.
16
-
17
- if (this.activationKeys.indexOf(event.key) === -1) {
17
+ if (!this.activationKeys.has(event.key)) {
18
18
  return;
19
19
  }
20
20
 
@@ -24,30 +24,30 @@ export default class KeyboardEventManager extends EventManager<HTMLElement> {
24
24
  };
25
25
 
26
26
  private keyDownCallback = (event: KeyboardEvent): void => {
27
- if (
28
- KeyboardEventManager.cancelationKeys.indexOf(event.key) !== -1 &&
29
- this.isPressed
30
- ) {
31
- this.dispatchEvent(event, EventTypes.CANCEL);
27
+ if (this.keyPointer !== null) {
28
+ if (KeyboardEventManager.cancelationKeys.has(event.key)) {
29
+ this.dispatchEvent(event, EventTypes.CANCEL);
30
+ this.keyPointer = null;
31
+ }
32
+
32
33
  return;
33
34
  }
34
35
 
35
- if (KeyboardEventManager.activationKeys.indexOf(event.key) === -1) {
36
+ if (!KeyboardEventManager.activationKeys.has(event.key) || event.repeat) {
36
37
  return;
37
38
  }
38
39
 
40
+ this.keyPointer = event.key;
39
41
  this.dispatchEvent(event, EventTypes.DOWN);
40
42
  };
41
43
 
42
44
  private onKeyUp = (event: KeyboardEvent): void => {
43
- if (
44
- KeyboardEventManager.activationKeys.indexOf(event.key) === -1 ||
45
- !this.isPressed
46
- ) {
45
+ if (this.keyPointer !== event.key) {
47
46
  return;
48
47
  }
49
48
 
50
49
  this.dispatchEvent(event, EventTypes.UP);
50
+ this.keyPointer = null;
51
51
  };
52
52
 
53
53
  private dispatchEvent(event: KeyboardEvent, eventType: EventTypes) {
@@ -59,15 +59,12 @@ export default class KeyboardEventManager extends EventManager<HTMLElement> {
59
59
 
60
60
  switch (eventType) {
61
61
  case EventTypes.UP:
62
- this.isPressed = false;
63
62
  this.onPointerUp(adaptedEvent);
64
63
  break;
65
64
  case EventTypes.DOWN:
66
- this.isPressed = true;
67
65
  this.onPointerDown(adaptedEvent);
68
66
  break;
69
67
  case EventTypes.CANCEL:
70
- this.isPressed = false;
71
68
  this.onPointerCancel(adaptedEvent);
72
69
  break;
73
70
  }
@@ -103,6 +100,11 @@ export default class KeyboardEventManager extends EventManager<HTMLElement> {
103
100
  }
104
101
  }
105
102
 
103
+ public override resetManager(): void {
104
+ super.resetManager();
105
+ this.keyPointer = null;
106
+ }
107
+
106
108
  protected mapEvent(
107
109
  event: KeyboardEvent,
108
110
  eventType: EventTypes
@@ -1,6 +1,7 @@
1
1
  import EventManager from './EventManager';
2
2
  import { AdaptedEvent, EventTypes } from '../interfaces';
3
3
  import { PointerType } from '../../PointerType';
4
+ import { calculateViewScale } from '../utils';
4
5
 
5
6
  export default class WheelEventManager extends EventManager<HTMLElement> {
6
7
  private wheelDelta = { x: 0, y: 0 };
@@ -19,7 +20,9 @@ export default class WheelEventManager extends EventManager<HTMLElement> {
19
20
 
20
21
  public registerListeners(): void {
21
22
  this.view.addEventListener('pointermove', this.resetDelta);
22
- this.view.addEventListener('wheel', this.wheelCallback);
23
+ this.view.addEventListener('wheel', this.wheelCallback, {
24
+ passive: true,
25
+ });
23
26
  }
24
27
 
25
28
  public unregisterListeners(): void {
@@ -28,11 +31,17 @@ export default class WheelEventManager extends EventManager<HTMLElement> {
28
31
  }
29
32
 
30
33
  protected mapEvent(event: WheelEvent): AdaptedEvent {
34
+ const rect = this.view.getBoundingClientRect();
35
+ const { scaleX, scaleY } = calculateViewScale(this.view);
36
+
37
+ const x = event.clientX + this.wheelDelta.x;
38
+ const y = event.clientY + this.wheelDelta.y;
39
+
31
40
  return {
32
- x: event.clientX + this.wheelDelta.x,
33
- y: event.clientY + this.wheelDelta.y,
34
- offsetX: event.offsetX - event.deltaX,
35
- offsetY: event.offsetY - event.deltaY,
41
+ x,
42
+ y,
43
+ offsetX: (x - rect.left) / scaleX,
44
+ offsetY: (y - rect.top) / scaleY,
36
45
  pointerId: -1,
37
46
  eventType: EventTypes.MOVE,
38
47
  pointerType: PointerType.OTHER,