react-native-gesture-handler 2.12.1 → 2.13.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 (195) hide show
  1. package/RNGestureHandler.podspec +0 -15
  2. package/android/build.gradle +5 -76
  3. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +16 -1
  4. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +43 -18
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/HoverGestureHandler.kt +120 -0
  6. package/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt +7 -0
  7. package/android/src/main/java/com/swmansion/gesturehandler/react/Extensions.kt +5 -0
  8. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +43 -16
  9. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +21 -0
  10. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +9 -1
  11. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +10 -0
  12. package/ios/Handlers/RNHoverHandler.h +12 -0
  13. package/ios/Handlers/RNHoverHandler.m +152 -0
  14. package/ios/RNGestureHandlerButtonComponentView.mm +2 -0
  15. package/ios/RNGestureHandlerEvents.h +1 -0
  16. package/ios/RNGestureHandlerEvents.m +10 -0
  17. package/ios/RNGestureHandlerManager.mm +2 -0
  18. package/ios/RNManualActivationRecognizer.m +2 -1
  19. package/ios/RNRootViewGestureRecognizer.m +7 -2
  20. package/lib/commonjs/RNGestureHandlerModule.macos.js +3 -1
  21. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
  22. package/lib/commonjs/RNGestureHandlerModule.web.js +7 -2
  23. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  24. package/lib/commonjs/RNGestureHandlerModule.windows.js +3 -1
  25. package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -1
  26. package/lib/commonjs/components/DrawerLayout.js +1 -0
  27. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  28. package/lib/commonjs/components/touchables/GenericTouchable.js +1 -2
  29. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  30. package/lib/commonjs/components/touchables/TouchableHighlight.js.map +1 -1
  31. package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  32. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  33. package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js.map +1 -1
  34. package/lib/commonjs/components/touchables/index.js.map +1 -1
  35. package/lib/commonjs/handlers/createHandler.js +3 -3
  36. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  37. package/lib/commonjs/handlers/gestureHandlerCommon.js +1 -1
  38. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  39. package/lib/commonjs/handlers/gestures/GestureDetector.js +3 -1
  40. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  41. package/lib/commonjs/handlers/gestures/gesture.js +5 -0
  42. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  43. package/lib/commonjs/handlers/gestures/gestureObjects.js +5 -0
  44. package/lib/commonjs/handlers/gestures/gestureObjects.js.map +1 -1
  45. package/lib/commonjs/handlers/gestures/hoverGesture.js +74 -0
  46. package/lib/commonjs/handlers/gestures/hoverGesture.js.map +1 -0
  47. package/lib/commonjs/index.js +8 -0
  48. package/lib/commonjs/index.js.map +1 -1
  49. package/lib/commonjs/web/handlers/FlingGestureHandler.js +0 -10
  50. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  51. package/lib/commonjs/web/handlers/GestureHandler.js +61 -88
  52. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  53. package/lib/commonjs/web/handlers/HoverGestureHandler.js +62 -0
  54. package/lib/commonjs/web/handlers/HoverGestureHandler.js.map +1 -0
  55. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +6 -7
  56. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  57. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +12 -4
  58. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  59. package/lib/commonjs/web/handlers/PanGestureHandler.js +2 -7
  60. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  61. package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -10
  62. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  63. package/lib/commonjs/web/interfaces.js +1 -1
  64. package/lib/commonjs/web/interfaces.js.map +1 -1
  65. package/lib/commonjs/web/tools/EventManager.js +18 -4
  66. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  67. package/lib/commonjs/web/tools/GestureHandlerDelegate.js +6 -0
  68. package/lib/commonjs/web/tools/GestureHandlerDelegate.js.map +1 -0
  69. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +5 -7
  70. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  71. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +118 -0
  72. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -0
  73. package/lib/commonjs/web/tools/PointerEventManager.js +38 -5
  74. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  75. package/lib/commonjs/web/tools/TouchEventManager.js +2 -2
  76. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
  77. package/lib/module/RNGestureHandlerModule.macos.js +2 -1
  78. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  79. package/lib/module/RNGestureHandlerModule.web.js +6 -3
  80. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  81. package/lib/module/RNGestureHandlerModule.windows.js +2 -1
  82. package/lib/module/RNGestureHandlerModule.windows.js.map +1 -1
  83. package/lib/module/components/DrawerLayout.js +1 -0
  84. package/lib/module/components/DrawerLayout.js.map +1 -1
  85. package/lib/module/components/touchables/GenericTouchable.js +1 -2
  86. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  87. package/lib/module/components/touchables/TouchableHighlight.js.map +1 -1
  88. package/lib/module/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  89. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  90. package/lib/module/components/touchables/TouchableWithoutFeedback.js.map +1 -1
  91. package/lib/module/components/touchables/index.js.map +1 -1
  92. package/lib/module/handlers/createHandler.js +3 -3
  93. package/lib/module/handlers/createHandler.js.map +1 -1
  94. package/lib/module/handlers/gestureHandlerCommon.js +1 -1
  95. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  96. package/lib/module/handlers/gestures/GestureDetector.js +2 -1
  97. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  98. package/lib/module/handlers/gestures/gesture.js +5 -0
  99. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  100. package/lib/module/handlers/gestures/gestureObjects.js +4 -0
  101. package/lib/module/handlers/gestures/gestureObjects.js.map +1 -1
  102. package/lib/module/handlers/gestures/hoverGesture.js +62 -0
  103. package/lib/module/handlers/gestures/hoverGesture.js.map +1 -0
  104. package/lib/module/index.js +1 -0
  105. package/lib/module/index.js.map +1 -1
  106. package/lib/module/web/handlers/FlingGestureHandler.js +0 -10
  107. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  108. package/lib/module/web/handlers/GestureHandler.js +61 -84
  109. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  110. package/lib/module/web/handlers/HoverGestureHandler.js +47 -0
  111. package/lib/module/web/handlers/HoverGestureHandler.js.map +1 -0
  112. package/lib/module/web/handlers/LongPressGestureHandler.js +5 -7
  113. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  114. package/lib/module/web/handlers/NativeViewGestureHandler.js +11 -4
  115. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  116. package/lib/module/web/handlers/PanGestureHandler.js +2 -7
  117. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  118. package/lib/module/web/handlers/TapGestureHandler.js +0 -10
  119. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  120. package/lib/module/web/interfaces.js +1 -1
  121. package/lib/module/web/interfaces.js.map +1 -1
  122. package/lib/module/web/tools/EventManager.js +18 -4
  123. package/lib/module/web/tools/EventManager.js.map +1 -1
  124. package/lib/module/web/tools/GestureHandlerDelegate.js +2 -0
  125. package/lib/module/web/tools/GestureHandlerDelegate.js.map +1 -0
  126. package/lib/module/web/tools/GestureHandlerOrchestrator.js +5 -6
  127. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  128. package/lib/module/web/tools/GestureHandlerWebDelegate.js +102 -0
  129. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -0
  130. package/lib/module/web/tools/PointerEventManager.js +39 -6
  131. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  132. package/lib/module/web/tools/TouchEventManager.js +2 -2
  133. package/lib/module/web/tools/TouchEventManager.js.map +1 -1
  134. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +1 -1
  135. package/lib/typescript/RNGestureHandlerModule.web.d.ts +3 -1
  136. package/lib/typescript/RNGestureHandlerModule.windows.d.ts +1 -1
  137. package/lib/typescript/components/DrawerLayout.d.ts +7 -1
  138. package/lib/typescript/components/touchables/GenericTouchable.d.ts +3 -2
  139. package/lib/typescript/components/touchables/TouchableHighlight.d.ts +4 -3
  140. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +3 -2
  141. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +4 -5
  142. package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +1 -0
  143. package/lib/typescript/components/touchables/index.d.ts +3 -0
  144. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
  145. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -1
  146. package/lib/typescript/handlers/gestures/gesture.d.ts +2 -1
  147. package/lib/typescript/handlers/gestures/gestureObjects.d.ts +2 -0
  148. package/lib/typescript/handlers/gestures/hoverGesture.d.ts +32 -0
  149. package/lib/typescript/index.d.ts +4 -0
  150. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +0 -6
  151. package/lib/typescript/web/handlers/GestureHandler.d.ts +12 -17
  152. package/lib/typescript/web/handlers/HoverGestureHandler.d.ts +10 -0
  153. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +0 -4
  154. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -1
  155. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +0 -4
  156. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +0 -6
  157. package/lib/typescript/web/interfaces.d.ts +4 -3
  158. package/lib/typescript/web/tools/EventManager.d.ts +9 -5
  159. package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +22 -0
  160. package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +21 -0
  161. package/lib/typescript/web/tools/NodeManager.d.ts +2 -2
  162. package/lib/typescript/web/tools/PointerEventManager.d.ts +1 -1
  163. package/lib/typescript/web/tools/TouchEventManager.d.ts +1 -1
  164. package/package.json +2 -2
  165. package/src/RNGestureHandlerModule.macos.ts +5 -1
  166. package/src/RNGestureHandlerModule.web.ts +7 -1
  167. package/src/RNGestureHandlerModule.windows.ts +5 -1
  168. package/src/components/DrawerLayout.tsx +9 -0
  169. package/src/components/touchables/GenericTouchable.tsx +4 -4
  170. package/src/components/touchables/TouchableHighlight.tsx +6 -3
  171. package/src/components/touchables/TouchableNativeFeedback.android.tsx +5 -4
  172. package/src/components/touchables/TouchableOpacity.tsx +6 -7
  173. package/src/components/touchables/TouchableWithoutFeedback.tsx +3 -1
  174. package/src/components/touchables/index.ts +3 -0
  175. package/src/handlers/createHandler.tsx +4 -2
  176. package/src/handlers/gestureHandlerCommon.ts +39 -0
  177. package/src/handlers/gestures/GestureDetector.tsx +2 -0
  178. package/src/handlers/gestures/gesture.ts +6 -0
  179. package/src/handlers/gestures/gestureObjects.ts +5 -0
  180. package/src/handlers/gestures/hoverGesture.ts +83 -0
  181. package/src/index.ts +8 -0
  182. package/src/web/handlers/FlingGestureHandler.ts +0 -11
  183. package/src/web/handlers/GestureHandler.ts +68 -88
  184. package/src/web/handlers/HoverGestureHandler.ts +43 -0
  185. package/src/web/handlers/LongPressGestureHandler.ts +5 -7
  186. package/src/web/handlers/NativeViewGestureHandler.ts +11 -4
  187. package/src/web/handlers/PanGestureHandler.ts +1 -6
  188. package/src/web/handlers/TapGestureHandler.ts +0 -11
  189. package/src/web/interfaces.ts +4 -2
  190. package/src/web/tools/EventManager.ts +15 -7
  191. package/src/web/tools/GestureHandlerDelegate.ts +23 -0
  192. package/src/web/tools/GestureHandlerOrchestrator.ts +7 -6
  193. package/src/web/tools/GestureHandlerWebDelegate.ts +115 -0
  194. package/src/web/tools/PointerEventManager.ts +46 -16
  195. package/src/web/tools/TouchEventManager.ts +3 -3
@@ -1,4 +1,4 @@
1
- import { UserSelect } from '../handlers/gestureHandlerCommon';
1
+ import { UserSelect, ActiveCursor } from '../handlers/gestureHandlerCommon';
2
2
  import { Directions } from '../Directions';
3
3
  import { State } from '../State';
4
4
  export interface HitSlop {
@@ -14,7 +14,7 @@ export interface HitSlop {
14
14
  export interface Handler {
15
15
  handlerTag: number;
16
16
  }
17
- declare type ConfigArgs = number | boolean | HitSlop | UserSelect | Directions | Handler[] | null | undefined;
17
+ declare type ConfigArgs = number | boolean | HitSlop | UserSelect | ActiveCursor | Directions | Handler[] | null | undefined;
18
18
  export interface Config extends Record<string, ConfigArgs> {
19
19
  enabled?: boolean;
20
20
  simultaneousHandlers?: Handler[] | null;
@@ -22,6 +22,7 @@ export interface Config extends Record<string, ConfigArgs> {
22
22
  hitSlop?: HitSlop;
23
23
  shouldCancelWhenOutside?: boolean;
24
24
  userSelect?: UserSelect;
25
+ activeCursor?: ActiveCursor;
25
26
  activateAfterLongPress?: number;
26
27
  failOffsetXStart?: number;
27
28
  failOffsetYStart?: number;
@@ -120,7 +121,7 @@ export declare enum EventTypes {
120
121
  ADDITIONAL_POINTER_UP = 3,
121
122
  MOVE = 4,
122
123
  ENTER = 5,
123
- OUT = 6,
124
+ LEAVE = 6,
124
125
  CANCEL = 7
125
126
  }
126
127
  export declare enum TouchEventType {
@@ -1,9 +1,9 @@
1
1
  import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';
2
- export default abstract class EventManager {
3
- protected readonly view: HTMLElement;
2
+ export default abstract class EventManager<T> {
3
+ protected readonly view: T;
4
4
  protected pointersInBounds: number[];
5
5
  protected activePointersCounter: number;
6
- constructor(view: HTMLElement);
6
+ constructor(view: T);
7
7
  abstract setListeners(): void;
8
8
  protected abstract mapEvent(event: Event, eventType: EventTypes, index?: number, touchEventType?: TouchEventType): AdaptedEvent;
9
9
  protected onPointerDown(_event: AdaptedEvent): void;
@@ -11,19 +11,23 @@ export default abstract class EventManager {
11
11
  protected onPointerUp(_event: AdaptedEvent): void;
12
12
  protected onPointerRemove(_event: AdaptedEvent): void;
13
13
  protected onPointerMove(_event: AdaptedEvent): void;
14
- protected onPointerOut(_event: AdaptedEvent): void;
14
+ protected onPointerLeave(_event: AdaptedEvent): void;
15
15
  protected onPointerEnter(_event: AdaptedEvent): void;
16
16
  protected onPointerCancel(_event: AdaptedEvent): void;
17
17
  protected onPointerOutOfBounds(_event: AdaptedEvent): void;
18
+ protected onPointerMoveOver(_event: AdaptedEvent): void;
19
+ protected onPointerMoveOut(_event: AdaptedEvent): void;
18
20
  setOnPointerDown(callback: (event: AdaptedEvent) => void): void;
19
21
  setOnPointerAdd(callback: (event: AdaptedEvent) => void): void;
20
22
  setOnPointerUp(callback: (event: AdaptedEvent) => void): void;
21
23
  setOnPointerRemove(callback: (event: AdaptedEvent) => void): void;
22
24
  setOnPointerMove(callback: (event: AdaptedEvent) => void): void;
23
- setOnPointerOut(callback: (event: AdaptedEvent) => void): void;
25
+ setOnPointerLeave(callback: (event: AdaptedEvent) => void): void;
24
26
  setOnPointerEnter(callback: (event: AdaptedEvent) => void): void;
25
27
  setOnPointerCancel(callback: (event: AdaptedEvent) => void): void;
26
28
  setOnPointerOutOfBounds(callback: (event: AdaptedEvent) => void): void;
29
+ setOnPointerMoveOver(callback: (event: AdaptedEvent) => void): void;
30
+ setOnPointerMoveOut(callback: (event: AdaptedEvent) => void): void;
27
31
  protected markAsInBounds(pointerId: number): void;
28
32
  protected markAsOutOfBounds(pointerId: number): void;
29
33
  resetManager(): void;
@@ -0,0 +1,22 @@
1
+ import type GestureHandler from '../handlers/GestureHandler';
2
+ export interface MeasureResult {
3
+ pageX: number;
4
+ pageY: number;
5
+ width: number;
6
+ height: number;
7
+ }
8
+ export interface GestureHandlerDelegate<T> {
9
+ getView(): T;
10
+ init(viewRef: number, handler: GestureHandler): void;
11
+ isPointerInBounds({ x, y }: {
12
+ x: number;
13
+ y: number;
14
+ }): boolean;
15
+ measureView(): MeasureResult;
16
+ reset(): void;
17
+ onBegin(): void;
18
+ onActivate(): void;
19
+ onEnd(): void;
20
+ onCancel(): void;
21
+ onFail(): void;
22
+ }
@@ -0,0 +1,21 @@
1
+ import type GestureHandler from '../handlers/GestureHandler';
2
+ import { GestureHandlerDelegate, MeasureResult } from './GestureHandlerDelegate';
3
+ export declare class GestureHandlerWebDelegate implements GestureHandlerDelegate<HTMLElement> {
4
+ private view;
5
+ private gestureHandler;
6
+ private eventManagers;
7
+ getView(): HTMLElement;
8
+ init(viewRef: number, handler: GestureHandler): void;
9
+ isPointerInBounds({ x, y }: {
10
+ x: number;
11
+ y: number;
12
+ }): boolean;
13
+ measureView(): MeasureResult;
14
+ reset(): void;
15
+ tryResetCursor(): void;
16
+ onBegin(): void;
17
+ onActivate(): void;
18
+ onEnd(): void;
19
+ onCancel(): void;
20
+ onFail(): void;
21
+ }
@@ -2,10 +2,10 @@ import { ValueOf } from '../../typeUtils';
2
2
  import { Gestures } from '../../RNGestureHandlerModule.web';
3
3
  export default abstract class NodeManager {
4
4
  private static gestures;
5
- static getHandler(tag: number): import("../handlers/NativeViewGestureHandler").default | import("../handlers/PanGestureHandler").default | import("../handlers/TapGestureHandler").default | import("../handlers/LongPressGestureHandler").default | import("../handlers/PinchGestureHandler").default | import("../handlers/RotationGestureHandler").default | import("../handlers/FlingGestureHandler").default | import("../handlers/ManualGestureHandler").default;
5
+ static getHandler(tag: number): import("../handlers/NativeViewGestureHandler").default | import("../handlers/PanGestureHandler").default | import("../handlers/TapGestureHandler").default | import("../handlers/LongPressGestureHandler").default | import("../handlers/PinchGestureHandler").default | import("../handlers/RotationGestureHandler").default | import("../handlers/FlingGestureHandler").default | import("../handlers/ManualGestureHandler").default | import("../handlers/HoverGestureHandler").default;
6
6
  static createGestureHandler(handlerTag: number, handler: InstanceType<ValueOf<typeof Gestures>>): void;
7
7
  static dropGestureHandler(handlerTag: number): void;
8
8
  static getNodes(): {
9
- [x: number]: import("../handlers/NativeViewGestureHandler").default | import("../handlers/PanGestureHandler").default | import("../handlers/TapGestureHandler").default | import("../handlers/LongPressGestureHandler").default | import("../handlers/PinchGestureHandler").default | import("../handlers/RotationGestureHandler").default | import("../handlers/FlingGestureHandler").default | import("../handlers/ManualGestureHandler").default;
9
+ [x: number]: import("../handlers/NativeViewGestureHandler").default | import("../handlers/PanGestureHandler").default | import("../handlers/TapGestureHandler").default | import("../handlers/LongPressGestureHandler").default | import("../handlers/PinchGestureHandler").default | import("../handlers/RotationGestureHandler").default | import("../handlers/FlingGestureHandler").default | import("../handlers/ManualGestureHandler").default | import("../handlers/HoverGestureHandler").default;
10
10
  };
11
11
  }
@@ -1,6 +1,6 @@
1
1
  import { AdaptedEvent, EventTypes } from '../interfaces';
2
2
  import EventManager from './EventManager';
3
- export default class PointerEventManager extends EventManager {
3
+ export default class PointerEventManager extends EventManager<HTMLElement> {
4
4
  private trackedPointers;
5
5
  setListeners(): void;
6
6
  protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent;
@@ -1,6 +1,6 @@
1
1
  import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';
2
2
  import EventManager from './EventManager';
3
- export default class TouchEventManager extends EventManager {
3
+ export default class TouchEventManager extends EventManager<HTMLElement> {
4
4
  setListeners(): void;
5
5
  protected mapEvent(event: TouchEvent, eventType: EventTypes, index: number, touchEventType: TouchEventType): AdaptedEvent;
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-gesture-handler",
3
- "version": "2.12.1",
3
+ "version": "2.13.1",
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",
@@ -88,7 +88,7 @@
88
88
  "@typescript-eslint/parser": "^4.33.0",
89
89
  "babel-jest": "^26.6.3",
90
90
  "clang-format": "^1.8.0",
91
- "eslint": "^7.15.0",
91
+ "eslint": "^7.32.0",
92
92
  "eslint-config-satya164": "^3.1.8",
93
93
  "eslint-import-resolver-babel-module": "^5.2.0",
94
94
  "eslint-plugin-import": "^2.22.1",
@@ -23,6 +23,7 @@ import HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';
23
23
  import HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';
24
24
  import HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';
25
25
  import { Config } from './web/interfaces';
26
+ import { GestureHandlerWebDelegate } from './web/tools/GestureHandlerWebDelegate';
26
27
 
27
28
  export const Gestures = {
28
29
  NativeViewGestureHandler,
@@ -65,7 +66,10 @@ export default {
65
66
  }
66
67
 
67
68
  const GestureClass = Gestures[handlerName];
68
- NodeManager.createGestureHandler(handlerTag, new GestureClass());
69
+ NodeManager.createGestureHandler(
70
+ handlerTag,
71
+ new GestureClass(new GestureHandlerWebDelegate())
72
+ );
69
73
  InteractionManager.getInstance().configureInteractions(
70
74
  NodeManager.getHandler(handlerTag),
71
75
  config as unknown as Config
@@ -14,6 +14,7 @@ import RotationGestureHandler from './web/handlers/RotationGestureHandler';
14
14
  import FlingGestureHandler from './web/handlers/FlingGestureHandler';
15
15
  import NativeViewGestureHandler from './web/handlers/NativeViewGestureHandler';
16
16
  import ManualGestureHandler from './web/handlers/ManualGestureHandler';
17
+ import HoverGestureHandler from './web/handlers/HoverGestureHandler';
17
18
 
18
19
  //Hammer Handlers
19
20
  import * as HammerNodeManager from './web_hammer/NodeManager';
@@ -25,6 +26,7 @@ import HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';
25
26
  import HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';
26
27
  import HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';
27
28
  import { Config } from './web/interfaces';
29
+ import { GestureHandlerWebDelegate } from './web/tools/GestureHandlerWebDelegate';
28
30
 
29
31
  export const Gestures = {
30
32
  NativeViewGestureHandler,
@@ -35,6 +37,7 @@ export const Gestures = {
35
37
  RotationGestureHandler,
36
38
  FlingGestureHandler,
37
39
  ManualGestureHandler,
40
+ HoverGestureHandler,
38
41
  };
39
42
 
40
43
  export const HammerGestures = {
@@ -67,7 +70,10 @@ export default {
67
70
  }
68
71
 
69
72
  const GestureClass = Gestures[handlerName];
70
- NodeManager.createGestureHandler(handlerTag, new GestureClass());
73
+ NodeManager.createGestureHandler(
74
+ handlerTag,
75
+ new GestureClass(new GestureHandlerWebDelegate())
76
+ );
71
77
  InteractionManager.getInstance().configureInteractions(
72
78
  NodeManager.getHandler(handlerTag),
73
79
  config as unknown as Config
@@ -25,6 +25,7 @@ import HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';
25
25
  import HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';
26
26
  import HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';
27
27
  import { Config } from './web/interfaces';
28
+ import { GestureHandlerWebDelegate } from './web/tools/GestureHandlerWebDelegate';
28
29
 
29
30
  export const Gestures = {
30
31
  NativeViewGestureHandler,
@@ -67,7 +68,10 @@ export default {
67
68
  }
68
69
 
69
70
  const GestureClass = Gestures[handlerName];
70
- NodeManager.createGestureHandler(handlerTag, new GestureClass());
71
+ NodeManager.createGestureHandler(
72
+ handlerTag,
73
+ new GestureClass(new GestureHandlerWebDelegate())
74
+ );
71
75
  InteractionManager.getInstance().configureInteractions(
72
76
  NodeManager.getHandler(handlerTag),
73
77
  config as unknown as Config
@@ -27,6 +27,7 @@ import {
27
27
  GestureEvent,
28
28
  HandlerStateChangeEvent,
29
29
  UserSelect,
30
+ ActiveCursor,
30
31
  } from '../handlers/gestureHandlerCommon';
31
32
  import {
32
33
  PanGestureHandler,
@@ -165,6 +166,13 @@ export interface DrawerLayoutProps {
165
166
  * Values: 'none'|'text'|'auto'
166
167
  */
167
168
  userSelect?: UserSelect;
169
+
170
+ /**
171
+ * @default 'auto'
172
+ * Defines which cursor property should be used when gesture activates.
173
+ * Values: see CSS cursor values
174
+ */
175
+ activeCursor?: ActiveCursor;
168
176
  }
169
177
 
170
178
  export type DrawerLayoutState = {
@@ -691,6 +699,7 @@ export default class DrawerLayout extends Component<
691
699
  <PanGestureHandler
692
700
  // @ts-ignore could be fixed in handler types
693
701
  userSelect={this.props.userSelect}
702
+ activeCursor={this.props.activeCursor}
694
703
  ref={this.setPanGestureRef}
695
704
  hitSlop={hitSlop}
696
705
  activeOffsetX={gestureOrientation * minSwipeDistance!}
@@ -6,6 +6,7 @@ import {
6
6
  StyleProp,
7
7
  ViewStyle,
8
8
  TouchableWithoutFeedbackProps,
9
+ Insets,
9
10
  } from 'react-native';
10
11
 
11
12
  import { State } from '../../State';
@@ -33,7 +34,8 @@ export const TOUCHABLE_STATE = {
33
34
 
34
35
  type TouchableState = typeof TOUCHABLE_STATE[keyof typeof TOUCHABLE_STATE];
35
36
 
36
- export interface GenericTouchableProps extends TouchableWithoutFeedbackProps {
37
+ export interface GenericTouchableProps
38
+ extends Omit<TouchableWithoutFeedbackProps, 'hitSlop'> {
37
39
  // Decided to drop not used fields from RN's implementation.
38
40
  // e.g. onBlur and onFocus as well as deprecated props. - TODO: this comment may be unuseful in this moment
39
41
 
@@ -48,6 +50,7 @@ export interface GenericTouchableProps extends TouchableWithoutFeedbackProps {
48
50
  disallowInterruption?: boolean;
49
51
 
50
52
  containerStyle?: StyleProp<ViewStyle>;
53
+ hitSlop?: Insets | number;
51
54
  }
52
55
 
53
56
  interface InternalProps {
@@ -272,9 +275,6 @@ export default class GenericTouchable extends Component<
272
275
  onAccessibilityAction: this.props.onAccessibilityAction,
273
276
  nativeID: this.props.nativeID,
274
277
  onLayout: this.props.onLayout,
275
- hitSlop: hitSlop as
276
- | Animated.WithAnimatedObject<typeof hitSlop>
277
- | undefined,
278
278
  };
279
279
 
280
280
  return (
@@ -7,7 +7,7 @@ import GenericTouchable, {
7
7
  import {
8
8
  StyleSheet,
9
9
  View,
10
- TouchableHighlightProps,
10
+ TouchableHighlightProps as RNTouchableHighlightProps,
11
11
  ColorValue,
12
12
  ViewProps,
13
13
  } from 'react-native';
@@ -21,11 +21,14 @@ interface State {
21
21
  };
22
22
  }
23
23
 
24
+ export type TouchableHighlightProps = RNTouchableHighlightProps &
25
+ GenericTouchableProps;
26
+
24
27
  /**
25
28
  * TouchableHighlight follows RN's implementation
26
29
  */
27
30
  export default class TouchableHighlight extends Component<
28
- TouchableHighlightProps & GenericTouchableProps,
31
+ TouchableHighlightProps,
29
32
  State
30
33
  > {
31
34
  static defaultProps = {
@@ -35,7 +38,7 @@ export default class TouchableHighlight extends Component<
35
38
  underlayColor: 'black',
36
39
  };
37
40
 
38
- constructor(props: TouchableHighlightProps & GenericTouchableProps) {
41
+ constructor(props: TouchableHighlightProps) {
39
42
  super(props);
40
43
  this.state = {
41
44
  extraChildStyle: null,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Platform,
3
- TouchableNativeFeedbackProps,
3
+ TouchableNativeFeedbackProps as RNTouchableNativeFeedbackProps,
4
4
  ColorValue,
5
5
  } from 'react-native';
6
6
  import * as React from 'react';
@@ -14,15 +14,16 @@ export type TouchableNativeFeedbackExtraProps = {
14
14
  foreground?: boolean;
15
15
  };
16
16
 
17
+ export type TouchableNativeFeedbackProps = RNTouchableNativeFeedbackProps &
18
+ GenericTouchableProps;
19
+
17
20
  /**
18
21
  * TouchableNativeFeedback behaves slightly different than RN's TouchableNativeFeedback.
19
22
  * There's small difference with handling long press ripple since RN's implementation calls
20
23
  * ripple animation via bridge. This solution leaves all animations' handling for native components so
21
24
  * it follows native behaviours.
22
25
  */
23
- export default class TouchableNativeFeedback extends Component<
24
- TouchableNativeFeedbackProps & GenericTouchableProps
25
- > {
26
+ export default class TouchableNativeFeedback extends Component<TouchableNativeFeedbackProps> {
26
27
  static defaultProps = {
27
28
  ...GenericTouchable.defaultProps,
28
29
  useForeground: true,
@@ -3,7 +3,7 @@ import {
3
3
  Easing,
4
4
  StyleSheet,
5
5
  View,
6
- TouchableOpacityProps,
6
+ TouchableOpacityProps as RNTouchableOpacityProps,
7
7
  } from 'react-native';
8
8
  import GenericTouchable, {
9
9
  TOUCHABLE_STATE,
@@ -12,16 +12,15 @@ import GenericTouchable, {
12
12
  import * as React from 'react';
13
13
  import { Component } from 'react';
14
14
 
15
- interface GHTouchableOpacityProps {
16
- useNativeAnimations?: boolean;
17
- }
15
+ export type TouchableOpacityProps = RNTouchableOpacityProps &
16
+ GenericTouchableProps & {
17
+ useNativeAnimations?: boolean;
18
+ };
18
19
 
19
20
  /**
20
21
  * TouchableOpacity bases on timing animation which has been used in RN's core
21
22
  */
22
- export default class TouchableOpacity extends Component<
23
- TouchableOpacityProps & GenericTouchableProps & GHTouchableOpacityProps
24
- > {
23
+ export default class TouchableOpacity extends Component<TouchableOpacityProps> {
25
24
  static defaultProps = {
26
25
  ...GenericTouchable.defaultProps,
27
26
  activeOpacity: 0.2,
@@ -2,8 +2,10 @@ import * as React from 'react';
2
2
  import { PropsWithChildren } from 'react';
3
3
  import GenericTouchable, { GenericTouchableProps } from './GenericTouchable';
4
4
 
5
+ export type TouchableWithoutFeedbackProps = GenericTouchable;
6
+
5
7
  const TouchableWithoutFeedback = React.forwardRef<
6
- GenericTouchable,
8
+ TouchableWithoutFeedbackProps,
7
9
  PropsWithChildren<GenericTouchableProps>
8
10
  >((props, ref) => <GenericTouchable ref={ref} {...props} />);
9
11
 
@@ -1,3 +1,6 @@
1
+ export type { TouchableHighlightProps } from './TouchableHighlight';
2
+ export type { TouchableOpacityProps } from './TouchableOpacity';
3
+ export type { TouchableWithoutFeedbackProps } from './TouchableWithoutFeedback';
1
4
  export { default as TouchableNativeFeedback } from './TouchableNativeFeedback';
2
5
  export { default as TouchableWithoutFeedback } from './TouchableWithoutFeedback';
3
6
  export { default as TouchableOpacity } from './TouchableOpacity';
@@ -329,8 +329,10 @@ export default function createHandler<
329
329
 
330
330
  const actionType = (() => {
331
331
  if (
332
- this.props?.onGestureEvent &&
333
- 'current' in this.props.onGestureEvent
332
+ (this.props?.onGestureEvent &&
333
+ 'current' in this.props.onGestureEvent) ||
334
+ (this.props?.onHandlerStateChange &&
335
+ 'current' in this.props.onHandlerStateChange)
334
336
  ) {
335
337
  // Reanimated worklet
336
338
  return ActionType.REANIMATED_WORKLET;
@@ -19,6 +19,7 @@ const commonProps = [
19
19
  'hitSlop',
20
20
  'cancelsTouchesInView',
21
21
  'userSelect',
22
+ 'activeCursor',
22
23
  ] as const;
23
24
 
24
25
  const componentInteractionProps = ['waitFor', 'simultaneousHandlers'] as const;
@@ -64,6 +65,43 @@ export type HitSlop =
64
65
  | Record<'height' | 'bottom', number>;
65
66
 
66
67
  export type UserSelect = 'none' | 'auto' | 'text';
68
+ export type ActiveCursor =
69
+ | 'auto'
70
+ | 'default'
71
+ | 'none'
72
+ | 'context-menu'
73
+ | 'help'
74
+ | 'pointer'
75
+ | 'progress'
76
+ | 'wait'
77
+ | 'cell'
78
+ | 'crosshair'
79
+ | 'text'
80
+ | 'vertical-text'
81
+ | 'alias'
82
+ | 'copy'
83
+ | 'move'
84
+ | 'no-drop'
85
+ | 'not-allowed'
86
+ | 'grab'
87
+ | 'grabbing'
88
+ | 'e-resize'
89
+ | 'n-resize'
90
+ | 'ne-resize'
91
+ | 'nw-resize'
92
+ | 's-resize'
93
+ | 'se-resize'
94
+ | 'sw-resize'
95
+ | 'w-resize'
96
+ | 'ew-resize'
97
+ | 'ns-resize'
98
+ | 'nesw-resize'
99
+ | 'nwse-resize'
100
+ | 'col-resize'
101
+ | 'row-resize'
102
+ | 'all-scroll'
103
+ | 'zoom-in'
104
+ | 'zoom-out';
67
105
 
68
106
  //TODO(TS) events in handlers
69
107
 
@@ -105,6 +143,7 @@ export type CommonGestureConfig = {
105
143
  shouldCancelWhenOutside?: boolean;
106
144
  hitSlop?: HitSlop;
107
145
  userSelect?: UserSelect;
146
+ activeCursor?: ActiveCursor;
108
147
  };
109
148
 
110
149
  // Events payloads are types instead of interfaces due to TS limitation.
@@ -32,6 +32,7 @@ import {
32
32
  panGestureHandlerCustomNativeProps,
33
33
  } from '../PanGestureHandler';
34
34
  import { tapGestureHandlerProps } from '../TapGestureHandler';
35
+ import { hoverGestureHandlerProps } from './hoverGesture';
35
36
  import { State } from '../../State';
36
37
  import { TouchEventType } from '../../TouchEventType';
37
38
  import { ComposedGesture } from './gestureComposition';
@@ -63,6 +64,7 @@ const ALLOWED_PROPS = [
63
64
  ...longPressGestureHandlerProps,
64
65
  ...forceTouchGestureHandlerProps,
65
66
  ...flingGestureHandlerProps,
67
+ ...hoverGestureHandlerProps,
66
68
  ...nativeViewGestureHandlerProps,
67
69
  ];
68
70
 
@@ -6,6 +6,7 @@ import {
6
6
  GestureTouchEvent,
7
7
  GestureStateChangeEvent,
8
8
  GestureUpdateEvent,
9
+ ActiveCursor,
9
10
  } from '../gestureHandlerCommon';
10
11
  import { getNextHandlerTag } from '../handlersRegistry';
11
12
  import { GestureStateManagerType } from './gestureStateManager';
@@ -250,6 +251,11 @@ export abstract class BaseGesture<
250
251
  return this;
251
252
  }
252
253
 
254
+ activeCursor(activeCursor: ActiveCursor) {
255
+ this.config.activeCursor = activeCursor;
256
+ return this;
257
+ }
258
+
253
259
  runOnJS(runOnJS: boolean) {
254
260
  this.config.runOnJS = runOnJS;
255
261
  return this;
@@ -13,6 +13,7 @@ import { RotationGesture } from './rotationGesture';
13
13
  import { TapGesture } from './tapGesture';
14
14
  import { NativeGesture } from './nativeGesture';
15
15
  import { ManualGesture } from './manualGesture';
16
+ import { HoverGesture } from './hoverGesture';
16
17
 
17
18
  export const GestureObjects = {
18
19
  Tap: () => {
@@ -51,6 +52,10 @@ export const GestureObjects = {
51
52
  return new ManualGesture();
52
53
  },
53
54
 
55
+ Hover: () => {
56
+ return new HoverGesture();
57
+ },
58
+
54
59
  /**
55
60
  * Builds a composed gesture consisting of gestures provided as parameters.
56
61
  * The first one that becomes active cancels the rest of gestures.
@@ -0,0 +1,83 @@
1
+ import { BaseGestureConfig, ContinousBaseGesture } from './gesture';
2
+ import { GestureUpdateEvent } from '../gestureHandlerCommon';
3
+
4
+ export type HoverGestureHandlerEventPayload = {
5
+ x: number;
6
+ y: number;
7
+ absoluteX: number;
8
+ absoluteY: number;
9
+ };
10
+
11
+ export type HoverGestureChangeEventPayload = {
12
+ changeX: number;
13
+ changeY: number;
14
+ };
15
+
16
+ export enum HoverEffect {
17
+ NONE = 0,
18
+ LIFT = 1,
19
+ HIGHLIGHT = 2,
20
+ }
21
+
22
+ export interface HoverGestureConfig {
23
+ hoverEffect?: HoverEffect;
24
+ }
25
+
26
+ export const hoverGestureHandlerProps = ['hoverEffect'] as const;
27
+
28
+ function changeEventCalculator(
29
+ current: GestureUpdateEvent<HoverGestureHandlerEventPayload>,
30
+ previous?: GestureUpdateEvent<HoverGestureHandlerEventPayload>
31
+ ) {
32
+ 'worklet';
33
+ let changePayload: HoverGestureChangeEventPayload;
34
+ if (previous === undefined) {
35
+ changePayload = {
36
+ changeX: current.x,
37
+ changeY: current.y,
38
+ };
39
+ } else {
40
+ changePayload = {
41
+ changeX: current.x - previous.x,
42
+ changeY: current.y - previous.y,
43
+ };
44
+ }
45
+
46
+ return { ...current, ...changePayload };
47
+ }
48
+
49
+ export class HoverGesture extends ContinousBaseGesture<
50
+ HoverGestureHandlerEventPayload,
51
+ HoverGestureChangeEventPayload
52
+ > {
53
+ public config: BaseGestureConfig & HoverGestureConfig = {};
54
+
55
+ constructor() {
56
+ super();
57
+
58
+ this.handlerName = 'HoverGestureHandler';
59
+ }
60
+
61
+ /**
62
+ * Sets the visual hover effect.
63
+ * iOS only
64
+ */
65
+ effect(effect: HoverEffect) {
66
+ this.config.hoverEffect = effect;
67
+ return this;
68
+ }
69
+
70
+ onChange(
71
+ callback: (
72
+ event: GestureUpdateEvent<
73
+ HoverGestureHandlerEventPayload & HoverGestureChangeEventPayload
74
+ >
75
+ ) => void
76
+ ) {
77
+ // @ts-ignore TS being overprotective, HoverGestureHandlerEventPayload is Record
78
+ this.handlers.changeEventCalculator = changeEventCalculator;
79
+ return super.onChange(callback);
80
+ }
81
+ }
82
+
83
+ export type HoverGestureType = InstanceType<typeof HoverGesture>;