react-native-gesture-handler 2.14.1 → 2.15.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.
Files changed (172) hide show
  1. package/README.md +1 -0
  2. package/RNGestureHandler.podspec +2 -2
  3. package/android/paper/src/main/java/com/swmansion/gesturehandler/NativeRNGestureHandlerModuleSpec.java +55 -0
  4. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +64 -4
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +12 -2
  6. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +53 -19
  7. package/{ios → apple}/Handlers/RNFlingHandler.m +25 -5
  8. package/{ios → apple}/Handlers/RNForceTouchHandler.m +25 -7
  9. package/{ios → apple}/Handlers/RNHoverHandler.m +26 -1
  10. package/{ios → apple}/Handlers/RNLongPressHandler.m +24 -4
  11. package/{ios → apple}/Handlers/RNManualHandler.m +24 -4
  12. package/{ios → apple}/Handlers/RNNativeViewHandler.mm +42 -6
  13. package/{ios → apple}/Handlers/RNPanHandler.m +100 -15
  14. package/apple/Handlers/RNPinchHandler.m +162 -0
  15. package/{ios → apple}/Handlers/RNRotationHandler.m +71 -9
  16. package/{ios → apple}/Handlers/RNTapHandler.m +96 -26
  17. package/apple/RNGHUIKit.h +27 -0
  18. package/{ios → apple}/RNGestureHandler.h +3 -3
  19. package/{ios → apple}/RNGestureHandler.m +31 -5
  20. package/{ios → apple}/RNGestureHandlerButton.h +4 -1
  21. package/{ios → apple}/RNGestureHandlerButton.m +12 -4
  22. package/{ios → apple}/RNGestureHandlerButtonManager.m +4 -2
  23. package/{ios → apple}/RNGestureHandlerEvents.h +1 -1
  24. package/{ios → apple}/RNGestureHandlerManager.h +2 -2
  25. package/{ios → apple}/RNGestureHandlerManager.mm +46 -11
  26. package/apple/RNGestureHandlerModule.h +17 -0
  27. package/{ios → apple}/RNGestureHandlerModule.mm +46 -60
  28. package/{ios → apple}/RNGestureHandlerPointerTracker.h +5 -5
  29. package/{ios → apple}/RNGestureHandlerPointerTracker.m +19 -14
  30. package/{ios → apple}/RNGestureHandlerRegistry.h +1 -1
  31. package/{ios → apple}/RNGestureHandlerRegistry.m +1 -1
  32. package/{ios → apple}/RNManualActivationRecognizer.h +8 -0
  33. package/{ios → apple}/RNManualActivationRecognizer.m +27 -7
  34. package/{ios → apple}/RNRootViewGestureRecognizer.m +72 -4
  35. package/lib/commonjs/RNGestureHandlerModule.js +5 -18
  36. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  37. package/lib/commonjs/RNGestureHandlerModule.windows.js +10 -102
  38. package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -1
  39. package/lib/commonjs/components/DrawerLayout.js +2 -0
  40. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  41. package/lib/commonjs/handlers/gestureHandlerCommon.js +1 -1
  42. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  43. package/lib/commonjs/handlers/gestures/GestureDetector.js +11 -1
  44. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  45. package/lib/commonjs/handlers/gestures/gesture.js +5 -0
  46. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  47. package/lib/commonjs/index.js +8 -0
  48. package/lib/commonjs/index.js.map +1 -1
  49. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js +13 -0
  50. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js.map +1 -0
  51. package/lib/commonjs/web/handlers/FlingGestureHandler.js +4 -0
  52. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  53. package/lib/commonjs/web/handlers/GestureHandler.js +13 -1
  54. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  55. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +8 -6
  56. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  57. package/lib/commonjs/web/handlers/PanGestureHandler.js +4 -0
  58. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  59. package/lib/commonjs/web/handlers/TapGestureHandler.js +4 -0
  60. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  61. package/lib/commonjs/web/interfaces.js +12 -14
  62. package/lib/commonjs/web/interfaces.js.map +1 -1
  63. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +35 -0
  64. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  65. package/lib/commonjs/web/tools/NodeManager.js +3 -2
  66. package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
  67. package/lib/commonjs/web/tools/PointerEventManager.js +11 -3
  68. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  69. package/lib/commonjs/web/tools/TouchEventManager.js +0 -1
  70. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
  71. package/lib/module/RNGestureHandlerModule.js +4 -18
  72. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  73. package/lib/module/RNGestureHandlerModule.windows.js +10 -81
  74. package/lib/module/RNGestureHandlerModule.windows.js.map +1 -1
  75. package/lib/module/components/DrawerLayout.js +2 -0
  76. package/lib/module/components/DrawerLayout.js.map +1 -1
  77. package/lib/module/handlers/gestureHandlerCommon.js +1 -1
  78. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  79. package/lib/module/handlers/gestures/GestureDetector.js +11 -1
  80. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  81. package/lib/module/handlers/gestures/gesture.js +5 -0
  82. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  83. package/lib/module/index.js +1 -0
  84. package/lib/module/index.js.map +1 -1
  85. package/lib/module/specs/NativeRNGestureHandlerModule.js +3 -0
  86. package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -0
  87. package/lib/module/web/handlers/FlingGestureHandler.js +4 -0
  88. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  89. package/lib/module/web/handlers/GestureHandler.js +14 -2
  90. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  91. package/lib/module/web/handlers/LongPressGestureHandler.js +8 -5
  92. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  93. package/lib/module/web/handlers/PanGestureHandler.js +4 -0
  94. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  95. package/lib/module/web/handlers/TapGestureHandler.js +4 -0
  96. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  97. package/lib/module/web/interfaces.js +9 -11
  98. package/lib/module/web/interfaces.js.map +1 -1
  99. package/lib/module/web/tools/GestureHandlerWebDelegate.js +34 -0
  100. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  101. package/lib/module/web/tools/NodeManager.js +3 -2
  102. package/lib/module/web/tools/NodeManager.js.map +1 -1
  103. package/lib/module/web/tools/PointerEventManager.js +12 -4
  104. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  105. package/lib/module/web/tools/TouchEventManager.js +1 -2
  106. package/lib/module/web/tools/TouchEventManager.js.map +1 -1
  107. package/lib/typescript/RNGestureHandlerModule.d.ts +2 -13
  108. package/lib/typescript/RNGestureHandlerModule.windows.d.ts +5 -21
  109. package/lib/typescript/components/DrawerLayout.d.ts +11 -0
  110. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
  111. package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -1
  112. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +4 -1
  113. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -1
  114. package/lib/typescript/handlers/gestures/gesture.d.ts +2 -0
  115. package/lib/typescript/index.d.ts +1 -0
  116. package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +14 -0
  117. package/lib/typescript/web/handlers/GestureHandler.d.ts +3 -1
  118. package/lib/typescript/web/interfaces.d.ts +9 -9
  119. package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +2 -0
  120. package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +7 -0
  121. package/lib/typescript/web/tools/PointerEventManager.d.ts +2 -0
  122. package/package.json +14 -11
  123. package/src/RNGestureHandlerModule.ts +4 -49
  124. package/src/RNGestureHandlerModule.windows.ts +18 -100
  125. package/src/components/DrawerLayout.tsx +15 -0
  126. package/src/handlers/gestureHandlerCommon.ts +5 -0
  127. package/src/handlers/gestures/GestureDetector.tsx +16 -2
  128. package/src/handlers/gestures/gesture.ts +6 -0
  129. package/src/index.ts +1 -0
  130. package/src/specs/NativeRNGestureHandlerModule.ts +26 -0
  131. package/src/web/handlers/FlingGestureHandler.ts +4 -0
  132. package/src/web/handlers/GestureHandler.ts +17 -0
  133. package/src/web/handlers/LongPressGestureHandler.ts +8 -5
  134. package/src/web/handlers/PanGestureHandler.ts +4 -0
  135. package/src/web/handlers/TapGestureHandler.ts +4 -0
  136. package/src/web/interfaces.ts +10 -10
  137. package/src/web/tools/GestureHandlerDelegate.ts +3 -0
  138. package/src/web/tools/GestureHandlerWebDelegate.ts +39 -0
  139. package/src/web/tools/NodeManager.ts +5 -1
  140. package/src/web/tools/PointerEventManager.ts +18 -2
  141. package/src/web/tools/TouchEventManager.ts +0 -2
  142. package/ios/Handlers/RNPinchHandler.m +0 -95
  143. package/ios/RNGestureHandlerModule.h +0 -7
  144. package/lib/commonjs/RNGestureHandlerModule.macos.js +0 -149
  145. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +0 -1
  146. package/lib/module/RNGestureHandlerModule.macos.js +0 -110
  147. package/lib/module/RNGestureHandlerModule.macos.js.map +0 -1
  148. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +0 -47
  149. package/src/RNGestureHandlerModule.macos.ts +0 -133
  150. /package/{ios → apple}/Handlers/RNFlingHandler.h +0 -0
  151. /package/{ios → apple}/Handlers/RNForceTouchHandler.h +0 -0
  152. /package/{ios → apple}/Handlers/RNHoverHandler.h +0 -0
  153. /package/{ios → apple}/Handlers/RNLongPressHandler.h +0 -0
  154. /package/{ios → apple}/Handlers/RNManualHandler.h +0 -0
  155. /package/{ios → apple}/Handlers/RNNativeViewHandler.h +0 -0
  156. /package/{ios → apple}/Handlers/RNPanHandler.h +0 -0
  157. /package/{ios → apple}/Handlers/RNPinchHandler.h +0 -0
  158. /package/{ios → apple}/Handlers/RNRotationHandler.h +0 -0
  159. /package/{ios → apple}/Handlers/RNTapHandler.h +0 -0
  160. /package/{ios → apple}/RNGHTouchEventType.h +0 -0
  161. /package/{ios → apple}/RNGestureHandler.xcodeproj/project.pbxproj +0 -0
  162. /package/{ios → apple}/RNGestureHandler.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  163. /package/{ios → apple}/RNGestureHandlerActionType.h +0 -0
  164. /package/{ios → apple}/RNGestureHandlerButtonComponentView.h +0 -0
  165. /package/{ios → apple}/RNGestureHandlerButtonComponentView.mm +0 -0
  166. /package/{ios → apple}/RNGestureHandlerButtonManager.h +0 -0
  167. /package/{ios → apple}/RNGestureHandlerDirection.h +0 -0
  168. /package/{ios → apple}/RNGestureHandlerEvents.m +0 -0
  169. /package/{ios → apple}/RNGestureHandlerRootViewComponentView.mm +0 -0
  170. /package/{ios → apple}/RNGestureHandlerState.h +0 -0
  171. /package/{ios → apple}/RNGestureHandlerStateManager.h +0 -0
  172. /package/{ios → apple}/RNRootViewGestureRecognizer.h +0 -0
@@ -8,13 +8,6 @@ import RotationGestureHandler from './web/handlers/RotationGestureHandler';
8
8
  import FlingGestureHandler from './web/handlers/FlingGestureHandler';
9
9
  import NativeViewGestureHandler from './web/handlers/NativeViewGestureHandler';
10
10
  import ManualGestureHandler from './web/handlers/ManualGestureHandler';
11
- import HammerNativeViewGestureHandler from './web_hammer/NativeViewGestureHandler';
12
- import HammerPanGestureHandler from './web_hammer/PanGestureHandler';
13
- import HammerTapGestureHandler from './web_hammer/TapGestureHandler';
14
- import HammerLongPressGestureHandler from './web_hammer/LongPressGestureHandler';
15
- import HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';
16
- import HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';
17
- import HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';
18
11
  import { Config } from './web/interfaces';
19
12
  export declare const Gestures: {
20
13
  NativeViewGestureHandler: typeof NativeViewGestureHandler;
@@ -26,23 +19,14 @@ export declare const Gestures: {
26
19
  FlingGestureHandler: typeof FlingGestureHandler;
27
20
  ManualGestureHandler: typeof ManualGestureHandler;
28
21
  };
29
- export declare const HammerGestures: {
30
- NativeViewGestureHandler: typeof HammerNativeViewGestureHandler;
31
- PanGestureHandler: typeof HammerPanGestureHandler;
32
- TapGestureHandler: typeof HammerTapGestureHandler;
33
- LongPressGestureHandler: typeof HammerLongPressGestureHandler;
34
- PinchGestureHandler: typeof HammerPinchGestureHandler;
35
- RotationGestureHandler: typeof HammerRotationGestureHandler;
36
- FlingGestureHandler: typeof HammerFlingGestureHandler;
37
- };
38
22
  declare const _default: {
39
23
  handleSetJSResponder(_tag: number, _blockNativeResponder: boolean): void;
40
24
  handleClearJSResponder(): void;
41
- createGestureHandler<T>(handlerName: keyof typeof Gestures, handlerTag: number, config: T): void;
42
- attachGestureHandler(handlerTag: number, newView: any, _actionType: ActionType, propsRef: React.RefObject<unknown>): void;
43
- updateGestureHandler(handlerTag: number, newConfig: Config): void;
44
- getGestureHandlerNode(handlerTag: number): NativeViewGestureHandler | PanGestureHandler | TapGestureHandler | LongPressGestureHandler | PinchGestureHandler | RotationGestureHandler | FlingGestureHandler | ManualGestureHandler | import("./web/handlers/HoverGestureHandler").default | HammerNativeViewGestureHandler | HammerPanGestureHandler | HammerTapGestureHandler | HammerLongPressGestureHandler | HammerPinchGestureHandler | HammerRotationGestureHandler | HammerFlingGestureHandler;
45
- dropGestureHandler(handlerTag: number): void;
25
+ createGestureHandler<T>(_handlerName: keyof typeof Gestures, _handlerTag: number, _config: T): void;
26
+ attachGestureHandler(_handlerTag: number, _newView: any, _actionType: ActionType, _propsRef: React.RefObject<unknown>): void;
27
+ updateGestureHandler(_handlerTag: number, _newConfig: Config): void;
28
+ getGestureHandlerNode(_handlerTag: number): void;
29
+ dropGestureHandler(_handlerTag: number): void;
46
30
  flushOperations(): void;
47
31
  };
48
32
  export default _default;
@@ -3,6 +3,7 @@ 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
+ import { MouseButton } from '../web/interfaces';
6
7
  export type DrawerPosition = 'left' | 'right';
7
8
  export type DrawerState = 'Idle' | 'Dragging' | 'Settling';
8
9
  export type DrawerType = 'front' | 'back' | 'slide';
@@ -93,6 +94,16 @@ export interface DrawerLayoutProps {
93
94
  * Values: see CSS cursor values
94
95
  */
95
96
  activeCursor?: ActiveCursor;
97
+ /**
98
+ * @default 'MouseButton.LEFT'
99
+ * Allows to choose which mouse button should underlying pan handler react to.
100
+ */
101
+ mouseButton?: MouseButton;
102
+ /**
103
+ * @default 'false if MouseButton.RIGHT is specified'
104
+ * Allows to enable/disable context menu.
105
+ */
106
+ enableContextMenu?: boolean;
96
107
  }
97
108
  export type DrawerLayoutState = {
98
109
  dragX: Animated.Value;
@@ -22,7 +22,7 @@ export type NativeViewGestureHandlerPayload = {
22
22
  */
23
23
  pointerInside: boolean;
24
24
  };
25
- export declare const nativeViewProps: readonly ["id", "enabled", "shouldCancelWhenOutside", "hitSlop", "cancelsTouchesInView", "userSelect", "activeCursor", "waitFor", "simultaneousHandlers", "blocksHandlers", "onBegan", "onFailed", "onCancelled", "onActivated", "onEnded", "onGestureEvent", "onHandlerStateChange", "shouldActivateOnStart", "disallowInterruption"];
25
+ export declare const nativeViewProps: readonly ["id", "enabled", "shouldCancelWhenOutside", "hitSlop", "cancelsTouchesInView", "userSelect", "activeCursor", "mouseButton", "enableContextMenu", "waitFor", "simultaneousHandlers", "blocksHandlers", "onBegan", "onFailed", "onCancelled", "onActivated", "onEnded", "onGestureEvent", "onHandlerStateChange", "shouldActivateOnStart", "disallowInterruption"];
26
26
  export declare const nativeViewHandlerName = "NativeViewGestureHandler";
27
27
  export type NativeViewGestureHandler = typeof NativeViewGestureHandler;
28
28
  export declare const NativeViewGestureHandler: import("react").ComponentType<NativeViewGestureHandlerProps & import("react").RefAttributes<any>>;
@@ -135,5 +135,5 @@ export interface PanGestureHandlerProps extends BaseGestureHandlerProps<PanGestu
135
135
  export declare const panHandlerName = "PanGestureHandler";
136
136
  export type PanGestureHandler = typeof PanGestureHandler;
137
137
  export declare const PanGestureHandler: import("react").ComponentType<PanGestureHandlerProps & import("react").RefAttributes<any>>;
138
- export declare function managePanProps(props: PanGestureHandlerProps): PanGestureHandlerProps & Partial<Record<"activeOffsetXStart" | "activeOffsetXEnd" | "failOffsetXStart" | "failOffsetXEnd" | "activeOffsetYStart" | "activeOffsetYEnd" | "failOffsetYStart" | "failOffsetYEnd", number>>;
138
+ export declare function managePanProps(props: PanGestureHandlerProps): PanGestureHandlerProps & Partial<Record<"activeOffsetYStart" | "activeOffsetYEnd" | "activeOffsetXStart" | "activeOffsetXEnd" | "failOffsetYStart" | "failOffsetYEnd" | "failOffsetXStart" | "failOffsetXEnd", number>>;
139
139
  export {};
@@ -2,7 +2,8 @@ import * as React from 'react';
2
2
  import { State } from '../State';
3
3
  import { TouchEventType } from '../TouchEventType';
4
4
  import { ValueOf } from '../typeUtils';
5
- export declare const baseGestureHandlerProps: readonly ["id", "enabled", "shouldCancelWhenOutside", "hitSlop", "cancelsTouchesInView", "userSelect", "activeCursor", "waitFor", "simultaneousHandlers", "blocksHandlers", "onBegan", "onFailed", "onCancelled", "onActivated", "onEnded", "onGestureEvent", "onHandlerStateChange"];
5
+ import { MouseButton } from '../web/interfaces';
6
+ export declare const baseGestureHandlerProps: readonly ["id", "enabled", "shouldCancelWhenOutside", "hitSlop", "cancelsTouchesInView", "userSelect", "activeCursor", "mouseButton", "enableContextMenu", "waitFor", "simultaneousHandlers", "blocksHandlers", "onBegan", "onFailed", "onCancelled", "onActivated", "onEnded", "onGestureEvent", "onHandlerStateChange"];
6
7
  export declare const baseGestureHandlerWithMonitorProps: string[];
7
8
  export interface GestureEventPayload {
8
9
  handlerTag: number;
@@ -44,6 +45,8 @@ export type CommonGestureConfig = {
44
45
  hitSlop?: HitSlop;
45
46
  userSelect?: UserSelect;
46
47
  activeCursor?: ActiveCursor;
48
+ mouseButton?: MouseButton;
49
+ enableContextMenu?: boolean;
47
50
  };
48
51
  export type BaseGestureHandlerProps<ExtraEventPayloadT extends Record<string, unknown> = Record<string, unknown>> = CommonGestureConfig & {
49
52
  id?: string;
@@ -12,8 +12,9 @@ export type GestureConfigReference = {
12
12
  };
13
13
  interface GestureDetectorProps {
14
14
  gesture: ComposedGesture | GestureType;
15
- userSelect?: UserSelect;
16
15
  children?: React.ReactNode;
16
+ userSelect?: UserSelect;
17
+ enableContextMenu?: boolean;
17
18
  }
18
19
  export declare const GestureDetector: (props: GestureDetectorProps) => React.JSX.Element;
19
20
  export {};
@@ -8,6 +8,7 @@ import { PinchGestureHandlerEventPayload } from '../PinchGestureHandler';
8
8
  import { RotationGestureHandlerEventPayload } from '../RotationGestureHandler';
9
9
  import { TapGestureHandlerEventPayload } from '../TapGestureHandler';
10
10
  import { NativeViewGestureHandlerPayload } from '../NativeViewGestureHandler';
11
+ import { MouseButton } from '../../web/interfaces';
11
12
  export type GestureType = BaseGesture<Record<string, unknown>> | BaseGesture<Record<string, never>> | BaseGesture<TapGestureHandlerEventPayload> | BaseGesture<PanGestureHandlerEventPayload> | BaseGesture<LongPressGestureHandlerEventPayload> | BaseGesture<RotationGestureHandlerEventPayload> | BaseGesture<PinchGestureHandlerEventPayload> | BaseGesture<FlingGestureHandlerEventPayload> | BaseGesture<ForceTouchGestureHandlerEventPayload> | BaseGesture<NativeViewGestureHandlerPayload>;
12
13
  export type GestureRef = number | GestureType | React.RefObject<GestureType | undefined> | React.RefObject<React.ComponentType | undefined>;
13
14
  export interface BaseGestureConfig extends CommonGestureConfig, Record<string, unknown> {
@@ -91,6 +92,7 @@ export declare abstract class BaseGesture<EventPayloadT extends Record<string, u
91
92
  shouldCancelWhenOutside(value: boolean): this;
92
93
  hitSlop(hitSlop: HitSlop): this;
93
94
  activeCursor(activeCursor: ActiveCursor): this;
95
+ mouseButton(mouseButton: MouseButton): this;
94
96
  runOnJS(runOnJS: boolean): this;
95
97
  simultaneousWithExternalGesture(...gestures: Exclude<GestureRef, number>[]): this;
96
98
  requireExternalGestureToFail(...gestures: Exclude<GestureRef, number>[]): this;
@@ -1,5 +1,6 @@
1
1
  export { Directions } from './Directions';
2
2
  export { State } from './State';
3
+ export { MouseButton } from './web/interfaces';
3
4
  export { default as gestureHandlerRootHOC } from './components/gestureHandlerRootHOC';
4
5
  export { default as GestureHandlerRootView } from './components/GestureHandlerRootView';
5
6
  export type { GestureEvent, HandlerStateChangeEvent, GestureEventPayload, HandlerStateChangeEventPayload, GestureTouchEvent, TouchData, GestureUpdateEvent, GestureStateChangeEvent, } from './handlers/gestureHandlerCommon';
@@ -0,0 +1,14 @@
1
+ import { TurboModule } from 'react-native';
2
+ import { Int32 } from 'react-native/Libraries/Types/CodegenTypes';
3
+ export interface Spec extends TurboModule {
4
+ handleSetJSResponder: (tag: Int32, blockNativeResponder: boolean) => void;
5
+ handleClearJSResponder: () => void;
6
+ createGestureHandler: (handlerName: string, handlerTag: Int32, config: Object) => void;
7
+ attachGestureHandler: (handlerTag: Int32, newView: Int32, actionType: Int32) => void;
8
+ updateGestureHandler: (handlerTag: Int32, newConfig: Object) => void;
9
+ dropGestureHandler: (handlerTag: Int32) => void;
10
+ install: () => boolean;
11
+ flushOperations: () => void;
12
+ }
13
+ declare const _default: Spec;
14
+ export default _default;
@@ -1,5 +1,5 @@
1
1
  import { State } from '../../State';
2
- import { Config, AdaptedEvent, PointerType } from '../interfaces';
2
+ import { Config, AdaptedEvent, PointerType, MouseButton } from '../interfaces';
3
3
  import EventManager from '../tools/EventManager';
4
4
  import PointerTracker from '../tools/PointerTracker';
5
5
  import { GestureHandlerDelegate } from '../tools/GestureHandlerDelegate';
@@ -74,7 +74,9 @@ export default abstract class GestureHandler {
74
74
  protected checkCustomActivationCriteria(criterias: string[]): void;
75
75
  private validateHitSlops;
76
76
  private checkHitSlop;
77
+ isButtonInConfig(mouseButton: MouseButton | undefined): number | true | undefined;
77
78
  protected resetConfig(): void;
79
+ onDestroy(): void;
78
80
  getTag(): number;
79
81
  setTag(tag: number): void;
80
82
  getConfig(): Config;
@@ -24,6 +24,8 @@ export interface Config extends Record<string, ConfigArgs> {
24
24
  shouldCancelWhenOutside?: boolean;
25
25
  userSelect?: UserSelect;
26
26
  activeCursor?: ActiveCursor;
27
+ mouseButton?: MouseButton;
28
+ enableContextMenu?: boolean;
27
29
  activateAfterLongPress?: number;
28
30
  failOffsetXStart?: number;
29
31
  failOffsetYStart?: number;
@@ -99,21 +101,19 @@ export interface AdaptedEvent {
99
101
  pointerId: number;
100
102
  eventType: EventTypes;
101
103
  pointerType: PointerType;
102
- buttons: number;
103
104
  time: number;
105
+ button?: MouseButton;
104
106
  allTouches?: TouchList;
105
107
  changedTouches?: TouchList;
106
108
  touchEventType?: TouchEventType;
107
109
  }
108
- export declare enum MouseButtons {
109
- NONE = 0,
110
+ export declare enum MouseButton {
110
111
  LEFT = 1,
111
- RIGHT = 2,
112
- LEFT_RIGHT = 3,
113
- SCROLL = 4,
114
- SCROLL_LEFT = 5,
115
- SCROLL_RIGHT = 6,
116
- SCROLL_LEFT_RIGHT = 7
112
+ MIDDLE = 2,
113
+ RIGHT = 4,
114
+ BUTTON_4 = 8,
115
+ BUTTON_5 = 16,
116
+ ALL = 31
117
117
  }
118
118
  export declare enum EventTypes {
119
119
  DOWN = 0,
@@ -1,4 +1,5 @@
1
1
  import type GestureHandler from '../handlers/GestureHandler';
2
+ import { Config } from '../interfaces';
2
3
  export interface MeasureResult {
3
4
  pageX: number;
4
5
  pageY: number;
@@ -19,4 +20,5 @@ export interface GestureHandlerDelegate<T> {
19
20
  onEnd(): void;
20
21
  onCancel(): void;
21
22
  onFail(): void;
23
+ destroy(config: Config): void;
22
24
  }
@@ -1,5 +1,6 @@
1
1
  import type GestureHandler from '../handlers/GestureHandler';
2
2
  import { GestureHandlerDelegate, MeasureResult } from './GestureHandlerDelegate';
3
+ import { Config } from '../interfaces';
3
4
  export declare class GestureHandlerWebDelegate implements GestureHandlerDelegate<HTMLElement> {
4
5
  private view;
5
6
  private gestureHandler;
@@ -13,9 +14,15 @@ export declare class GestureHandlerWebDelegate implements GestureHandlerDelegate
13
14
  measureView(): MeasureResult;
14
15
  reset(): void;
15
16
  tryResetCursor(): void;
17
+ private shouldDisableContextMenu;
18
+ private addContextMenuListeners;
19
+ private removeContextMenuListeners;
20
+ private disableContextMenu;
21
+ private enableContextMenu;
16
22
  onBegin(): void;
17
23
  onActivate(): void;
18
24
  onEnd(): void;
19
25
  onCancel(): void;
20
26
  onFail(): void;
27
+ destroy(config: Config): void;
21
28
  }
@@ -2,6 +2,8 @@ import { AdaptedEvent, EventTypes } from '../interfaces';
2
2
  import EventManager from './EventManager';
3
3
  export default class PointerEventManager extends EventManager<HTMLElement> {
4
4
  private trackedPointers;
5
+ private readonly mouseButtonsMapper;
6
+ constructor(view: HTMLElement);
5
7
  setListeners(): void;
6
8
  protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent;
7
9
  resetManager(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-gesture-handler",
3
- "version": "2.14.1",
3
+ "version": "2.15.0",
4
4
  "description": "Experimental implementation of a new declarative API for gesture handling in react-native",
5
5
  "scripts": {
6
6
  "prepare": "bob build && husky install",
@@ -9,10 +9,10 @@
9
9
  "precommit": "lint-staged",
10
10
  "release": "npm login && release-it",
11
11
  "ts-check": "yarn tsc --noEmit",
12
- "format:js": "prettier --write --list-different './{src,example,FabricExample}/**/*.{js,jsx,ts,tsx}'",
12
+ "format:js": "prettier --write --list-different './{src,example,FabricExample,MacOSExample}/**/*.{js,jsx,ts,tsx}'",
13
13
  "format:android": "node ./scripts/format-android.js",
14
- "format:ios": "find ios/ -iname *.h -o -iname *.m -o -iname *.cpp -o -iname *.mm | xargs clang-format -i",
15
- "lint:js": "eslint --ext '.js,.ts,.tsx' src/ example/src FabricExample/src && yarn prettier --check './{src,example,FabricExample}/**/*.{js,jsx,ts,tsx}'",
14
+ "format:ios": "find apple/ -iname *.h -o -iname *.m -o -iname *.cpp -o -iname *.mm | xargs clang-format -i",
15
+ "lint:js": "eslint --ext '.js,.ts,.tsx' src/ example/src FabricExample/src MacOSExample/src && yarn prettier --check './{src,example,FabricExample,MacOSExample}/**/*.{js,jsx,ts,tsx}'",
16
16
  "lint:js-root": "eslint --ext '.js,.ts,.tsx' src/ && yarn prettier --check './src/**/*.{js,jsx,ts,tsx}'",
17
17
  "lint:android": "./android/gradlew -p android spotlessCheck -q"
18
18
  },
@@ -36,7 +36,7 @@
36
36
  "android/common/src/main/java/",
37
37
  "android/reanimated/src/main/java/",
38
38
  "android/noreanimated/src/main/java/",
39
- "ios/",
39
+ "apple/",
40
40
  "Swipeable/",
41
41
  "jest-utils/",
42
42
  "DrawerLayout/",
@@ -77,7 +77,7 @@
77
77
  "@babel/preset-env": "^7.12.11",
78
78
  "@babel/preset-typescript": "^7.12.7",
79
79
  "@babel/runtime": "^7.12.5",
80
- "@react-native/babel-preset": "^0.73.18",
80
+ "@react-native/babel-preset": "^0.73.19",
81
81
  "@testing-library/jest-native": "^4.0.4",
82
82
  "@testing-library/react-native": "^9.0.0",
83
83
  "@types/hammerjs": "^2.0.38",
@@ -101,7 +101,7 @@
101
101
  "prettier": "^2.7.1",
102
102
  "react": "18.2.0",
103
103
  "react-dom": "^16.12.0",
104
- "react-native": "0.73.0-rc.5",
104
+ "react-native": "0.73.2",
105
105
  "react-native-builder-bob": "^0.17.1",
106
106
  "react-native-reanimated": "^2.3.1",
107
107
  "react-native-web": "^0.11.7",
@@ -114,9 +114,9 @@
114
114
  "react-native": "*"
115
115
  },
116
116
  "lint-staged": {
117
- "./{src,example,FabricExample}/**/*.{ts,tsx}": "yarn format:js",
117
+ "./{src,example,FabricExample,MacOSExample}/**/*.{ts,tsx}": "yarn format:js",
118
118
  "android/**/*.kt": "yarn format:android",
119
- "ios/**/*.{h,m,mm,cpp}": "yarn format:ios"
119
+ "apple/**/*.{h,m,mm,cpp}": "yarn format:ios"
120
120
  },
121
121
  "release-it": {
122
122
  "hooks": {
@@ -146,7 +146,10 @@
146
146
  ],
147
147
  "codegenConfig": {
148
148
  "name": "rngesturehandler_codegen",
149
- "type": "components",
150
- "jsSrcsDir": "./src/specs"
149
+ "type": "all",
150
+ "jsSrcsDir": "./src/specs",
151
+ "android": {
152
+ "javaPackageName": "com.swmansion.gesturehandler"
153
+ }
151
154
  }
152
155
  }
@@ -1,50 +1,5 @@
1
- import { NativeModules } from 'react-native';
2
- import { ActionType } from './ActionType';
3
- import { tagMessage } from './utils';
4
- const { RNGestureHandlerModule } = NativeModules;
1
+ // Reexport the native module spec used by codegen. The relevant files are inluded on Android
2
+ // to ensure the compatibility with the old arch, while iOS doesn't require those at all.
5
3
 
6
- if (RNGestureHandlerModule == null) {
7
- console.error(
8
- tagMessage(
9
- `react-native-gesture-handler module was not found. Make sure you're running your app on the native platform and your code is linked properly (cd ios && pod install && cd ..).
10
-
11
- For installation instructions, please refer to https://docs.swmansion.com/react-native-gesture-handler/docs/#installation`
12
- .split('\n')
13
- .map((line) => line.trim())
14
- .join('\n')
15
- )
16
- );
17
- }
18
-
19
- if (
20
- RNGestureHandlerModule &&
21
- RNGestureHandlerModule.flushOperations === undefined
22
- ) {
23
- RNGestureHandlerModule.flushOperations = () => {
24
- // NO-OP if not defined
25
- };
26
- }
27
-
28
- export type RNGestureHandlerModuleProps = {
29
- handleSetJSResponder: (tag: number, blockNativeResponder: boolean) => void;
30
- handleClearJSResponder: () => void;
31
- createGestureHandler: (
32
- handlerName: string,
33
- handlerTag: number,
34
- config: Readonly<Record<string, unknown>>
35
- ) => void;
36
- attachGestureHandler: (
37
- handlerTag: number,
38
- newView: number,
39
- actionType: ActionType
40
- ) => void;
41
- updateGestureHandler: (
42
- handlerTag: number,
43
- newConfig: Readonly<Record<string, unknown>>
44
- ) => void;
45
- dropGestureHandler: (handlerTag: number) => void;
46
- install: () => void;
47
- flushOperations: () => void;
48
- };
49
-
50
- export default RNGestureHandlerModule as RNGestureHandlerModuleProps;
4
+ import Module from './specs/NativeRNGestureHandlerModule';
5
+ export default Module;
@@ -1,11 +1,8 @@
1
1
  import React from 'react';
2
2
 
3
3
  import { ActionType } from './ActionType';
4
- import { isNewWebImplementationEnabled } from './EnableNewWebImplementation';
5
4
 
6
- //GestureHandlers
7
- import InteractionManager from './web/tools/InteractionManager';
8
- import NodeManager from './web/tools/NodeManager';
5
+ // GestureHandlers
9
6
  import PanGestureHandler from './web/handlers/PanGestureHandler';
10
7
  import TapGestureHandler from './web/handlers/TapGestureHandler';
11
8
  import LongPressGestureHandler from './web/handlers/LongPressGestureHandler';
@@ -14,18 +11,7 @@ import RotationGestureHandler from './web/handlers/RotationGestureHandler';
14
11
  import FlingGestureHandler from './web/handlers/FlingGestureHandler';
15
12
  import NativeViewGestureHandler from './web/handlers/NativeViewGestureHandler';
16
13
  import ManualGestureHandler from './web/handlers/ManualGestureHandler';
17
-
18
- //Hammer Handlers
19
- import * as HammerNodeManager from './web_hammer/NodeManager';
20
- import HammerNativeViewGestureHandler from './web_hammer/NativeViewGestureHandler';
21
- import HammerPanGestureHandler from './web_hammer/PanGestureHandler';
22
- import HammerTapGestureHandler from './web_hammer/TapGestureHandler';
23
- import HammerLongPressGestureHandler from './web_hammer/LongPressGestureHandler';
24
- import HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';
25
- import HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';
26
- import HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';
27
14
  import { Config } from './web/interfaces';
28
- import { GestureHandlerWebDelegate } from './web/tools/GestureHandlerWebDelegate';
29
15
 
30
16
  export const Gestures = {
31
17
  NativeViewGestureHandler,
@@ -38,16 +24,6 @@ export const Gestures = {
38
24
  ManualGestureHandler,
39
25
  };
40
26
 
41
- export const HammerGestures = {
42
- NativeViewGestureHandler: HammerNativeViewGestureHandler,
43
- PanGestureHandler: HammerPanGestureHandler,
44
- TapGestureHandler: HammerTapGestureHandler,
45
- LongPressGestureHandler: HammerLongPressGestureHandler,
46
- PinchGestureHandler: HammerPinchGestureHandler,
47
- RotationGestureHandler: HammerRotationGestureHandler,
48
- FlingGestureHandler: HammerFlingGestureHandler,
49
- };
50
-
51
27
  export default {
52
28
  handleSetJSResponder(_tag: number, _blockNativeResponder: boolean) {
53
29
  // NO-OP
@@ -56,89 +32,31 @@ export default {
56
32
  // NO-OP
57
33
  },
58
34
  createGestureHandler<T>(
59
- handlerName: keyof typeof Gestures,
60
- handlerTag: number,
61
- config: T
35
+ _handlerName: keyof typeof Gestures,
36
+ _handlerTag: number,
37
+ _config: T
62
38
  ) {
63
- if (isNewWebImplementationEnabled()) {
64
- if (!(handlerName in Gestures)) {
65
- throw new Error(
66
- `react-native-gesture-handler: ${handlerName} is not supported on web.`
67
- );
68
- }
69
-
70
- const GestureClass = Gestures[handlerName];
71
- NodeManager.createGestureHandler(
72
- handlerTag,
73
- new GestureClass(new GestureHandlerWebDelegate())
74
- );
75
- InteractionManager.getInstance().configureInteractions(
76
- NodeManager.getHandler(handlerTag),
77
- config as unknown as Config
78
- );
79
- } else {
80
- if (!(handlerName in HammerGestures)) {
81
- throw new Error(
82
- `react-native-gesture-handler: ${handlerName} is not supported on web.`
83
- );
84
- }
85
-
86
- // @ts-ignore If it doesn't exist, the error is thrown
87
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
88
- const GestureClass = HammerGestures[handlerName];
89
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
90
- HammerNodeManager.createGestureHandler(handlerTag, new GestureClass());
91
- }
92
-
93
- this.updateGestureHandler(handlerTag, config as unknown as Config);
39
+ // NO-OP
94
40
  },
95
41
  attachGestureHandler(
96
- handlerTag: number,
42
+ _handlerTag: number,
97
43
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
98
- newView: any,
44
+ _newView: any,
99
45
  _actionType: ActionType,
100
- propsRef: React.RefObject<unknown>
46
+ _propsRef: React.RefObject<unknown>
101
47
  ) {
102
- if (
103
- !(newView instanceof HTMLElement || newView instanceof React.Component)
104
- ) {
105
- return;
106
- }
107
-
108
- if (isNewWebImplementationEnabled()) {
109
- //@ts-ignore Types should be HTMLElement or React.Component
110
- NodeManager.getHandler(handlerTag).init(newView, propsRef);
111
- } else {
112
- //@ts-ignore Types should be HTMLElement or React.Component
113
- HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);
114
- }
48
+ // NO-OP
115
49
  },
116
- updateGestureHandler(handlerTag: number, newConfig: Config) {
117
- if (isNewWebImplementationEnabled()) {
118
- NodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
119
-
120
- InteractionManager.getInstance().configureInteractions(
121
- NodeManager.getHandler(handlerTag),
122
- newConfig
123
- );
124
- } else {
125
- HammerNodeManager.getHandler(handlerTag).updateGestureConfig(newConfig);
126
- }
50
+ updateGestureHandler(_handlerTag: number, _newConfig: Config) {
51
+ // NO-OP
127
52
  },
128
- getGestureHandlerNode(handlerTag: number) {
129
- if (isNewWebImplementationEnabled()) {
130
- return NodeManager.getHandler(handlerTag);
131
- } else {
132
- return HammerNodeManager.getHandler(handlerTag);
133
- }
53
+ getGestureHandlerNode(_handlerTag: number) {
54
+ // NO-OP
134
55
  },
135
- dropGestureHandler(handlerTag: number) {
136
- if (isNewWebImplementationEnabled()) {
137
- NodeManager.dropGestureHandler(handlerTag);
138
- } else {
139
- HammerNodeManager.dropGestureHandler(handlerTag);
140
- }
56
+ dropGestureHandler(_handlerTag: number) {
57
+ // NO-OP
58
+ },
59
+ flushOperations() {
60
+ // NO-OP
141
61
  },
142
- // eslint-disable-next-line @typescript-eslint/no-empty-function
143
- flushOperations() {},
144
62
  };
@@ -38,6 +38,7 @@ import {
38
38
  TapGestureHandlerEventPayload,
39
39
  } from '../handlers/TapGestureHandler';
40
40
  import { State } from '../State';
41
+ import { MouseButton } from '../web/interfaces';
41
42
 
42
43
  const DRAG_TOSS = 0.05;
43
44
 
@@ -173,6 +174,18 @@ export interface DrawerLayoutProps {
173
174
  * Values: see CSS cursor values
174
175
  */
175
176
  activeCursor?: ActiveCursor;
177
+
178
+ /**
179
+ * @default 'MouseButton.LEFT'
180
+ * Allows to choose which mouse button should underlying pan handler react to.
181
+ */
182
+ mouseButton?: MouseButton;
183
+
184
+ /**
185
+ * @default 'false if MouseButton.RIGHT is specified'
186
+ * Allows to enable/disable context menu.
187
+ */
188
+ enableContextMenu?: boolean;
176
189
  }
177
190
 
178
191
  export type DrawerLayoutState = {
@@ -700,6 +713,8 @@ export default class DrawerLayout extends Component<
700
713
  // @ts-ignore could be fixed in handler types
701
714
  userSelect={this.props.userSelect}
702
715
  activeCursor={this.props.activeCursor}
716
+ mouseButton={this.props.mouseButton}
717
+ enableContextMenu={this.props.enableContextMenu}
703
718
  ref={this.setPanGestureRef}
704
719
  hitSlop={hitSlop}
705
720
  activeOffsetX={gestureOrientation * minSwipeDistance!}
@@ -12,6 +12,7 @@ import { handlerIDToTag } from './handlersRegistry';
12
12
  import { toArray } from '../utils';
13
13
  import RNGestureHandlerModule from '../RNGestureHandlerModule';
14
14
  import { ghQueueMicrotask } from '../ghQueueMicrotask';
15
+ import { MouseButton } from '../web/interfaces';
15
16
 
16
17
  const commonProps = [
17
18
  'id',
@@ -21,6 +22,8 @@ const commonProps = [
21
22
  'cancelsTouchesInView',
22
23
  'userSelect',
23
24
  'activeCursor',
25
+ 'mouseButton',
26
+ 'enableContextMenu',
24
27
  ] as const;
25
28
 
26
29
  const componentInteractionProps = [
@@ -149,6 +152,8 @@ export type CommonGestureConfig = {
149
152
  hitSlop?: HitSlop;
150
153
  userSelect?: UserSelect;
151
154
  activeCursor?: ActiveCursor;
155
+ mouseButton?: MouseButton;
156
+ enableContextMenu?: boolean;
152
157
  };
153
158
 
154
159
  // Events payloads are types instead of interfaces due to TS limitation.
@@ -605,10 +605,20 @@ const applyUserSelectProp = (
605
605
  }
606
606
  };
607
607
 
608
+ const applyEnableContextMenuProp = (
609
+ enableContextMenu: boolean,
610
+ gesture: ComposedGesture | GestureType
611
+ ): void => {
612
+ for (const g of gesture.toGestureArray()) {
613
+ g.config.enableContextMenu = enableContextMenu;
614
+ }
615
+ };
616
+
608
617
  interface GestureDetectorProps {
609
618
  gesture: ComposedGesture | GestureType;
610
- userSelect?: UserSelect;
611
619
  children?: React.ReactNode;
620
+ userSelect?: UserSelect;
621
+ enableContextMenu?: boolean;
612
622
  }
613
623
  interface GestureDetectorState {
614
624
  firstRender: boolean;
@@ -630,6 +640,10 @@ export const GestureDetector = (props: GestureDetectorProps) => {
630
640
  applyUserSelectProp(props.userSelect, gestureConfig);
631
641
  }
632
642
 
643
+ if (props.enableContextMenu !== undefined) {
644
+ applyEnableContextMenuProp(props.enableContextMenu, gestureConfig);
645
+ }
646
+
633
647
  const gesture = gestureConfig.toGestureArray();
634
648
  const useReanimatedHook = gesture.some((g) => g.shouldUseReanimated);
635
649
 
@@ -763,7 +777,7 @@ export const GestureDetector = (props: GestureDetectorProps) => {
763
777
  // in case the view has changed, while config update would be handled be the `useEffect` above
764
778
  onHandlersUpdate(true);
765
779
 
766
- if (isFabric()) {
780
+ if (isFabric() && global.isFormsStackingContext) {
767
781
  const node = getShadowNodeFromRef(ref);
768
782
  if (global.isFormsStackingContext(node) === false) {
769
783
  console.error(