react-native-gesture-handler 2.16.0 → 2.16.2

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 (98) hide show
  1. package/README.md +1 -0
  2. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
  3. package/lib/commonjs/handlers/createHandler.js +9 -3
  4. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  5. package/lib/commonjs/handlers/gestures/GestureDetector.js +15 -0
  6. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  7. package/lib/commonjs/handlers/gestures/flingGesture.js +13 -0
  8. package/lib/commonjs/handlers/gestures/flingGesture.js.map +1 -1
  9. package/lib/commonjs/handlers/gestures/forceTouchGesture.js +17 -0
  10. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
  11. package/lib/commonjs/handlers/gestures/gesture.js +135 -0
  12. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  13. package/lib/commonjs/handlers/gestures/gestureObjects.js +66 -0
  14. package/lib/commonjs/handlers/gestures/gestureObjects.js.map +1 -1
  15. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js +1 -1
  16. package/lib/commonjs/handlers/gestures/gestureStateManager.web.js.map +1 -1
  17. package/lib/commonjs/handlers/gestures/hoverGesture.js +1 -1
  18. package/lib/commonjs/handlers/gestures/hoverGesture.js.map +1 -1
  19. package/lib/commonjs/handlers/gestures/longPressGesture.js +12 -0
  20. package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -1
  21. package/lib/commonjs/handlers/gestures/nativeGesture.js +10 -0
  22. package/lib/commonjs/handlers/gestures/nativeGesture.js.map +1 -1
  23. package/lib/commonjs/handlers/gestures/panGesture.js +76 -0
  24. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  25. package/lib/commonjs/handlers/gestures/tapGesture.js +42 -0
  26. package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -1
  27. package/lib/commonjs/utils.js +5 -1
  28. package/lib/commonjs/utils.js.map +1 -1
  29. package/lib/commonjs/web/handlers/GestureHandler.js +7 -7
  30. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  31. package/lib/commonjs/web/handlers/PanGestureHandler.js +3 -1
  32. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  33. package/lib/commonjs/web/interfaces.js.map +1 -1
  34. package/lib/module/handlers/PanGestureHandler.js.map +1 -1
  35. package/lib/module/handlers/createHandler.js +9 -3
  36. package/lib/module/handlers/createHandler.js.map +1 -1
  37. package/lib/module/handlers/gestures/GestureDetector.js +15 -0
  38. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  39. package/lib/module/handlers/gestures/flingGesture.js +13 -0
  40. package/lib/module/handlers/gestures/flingGesture.js.map +1 -1
  41. package/lib/module/handlers/gestures/forceTouchGesture.js +17 -0
  42. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
  43. package/lib/module/handlers/gestures/gesture.js +135 -0
  44. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  45. package/lib/module/handlers/gestures/gestureObjects.js +67 -0
  46. package/lib/module/handlers/gestures/gestureObjects.js.map +1 -1
  47. package/lib/module/handlers/gestures/gestureStateManager.web.js +1 -1
  48. package/lib/module/handlers/gestures/gestureStateManager.web.js.map +1 -1
  49. package/lib/module/handlers/gestures/hoverGesture.js +1 -1
  50. package/lib/module/handlers/gestures/hoverGesture.js.map +1 -1
  51. package/lib/module/handlers/gestures/longPressGesture.js +12 -0
  52. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
  53. package/lib/module/handlers/gestures/nativeGesture.js +10 -0
  54. package/lib/module/handlers/gestures/nativeGesture.js.map +1 -1
  55. package/lib/module/handlers/gestures/panGesture.js +76 -0
  56. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  57. package/lib/module/handlers/gestures/tapGesture.js +42 -0
  58. package/lib/module/handlers/gestures/tapGesture.js.map +1 -1
  59. package/lib/module/utils.js +5 -1
  60. package/lib/module/utils.js.map +1 -1
  61. package/lib/module/web/handlers/GestureHandler.js +7 -7
  62. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  63. package/lib/module/web/handlers/PanGestureHandler.js +3 -1
  64. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  65. package/lib/module/web/interfaces.js.map +1 -1
  66. package/lib/typescript/handlers/PanGestureHandler.d.ts +4 -4
  67. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +36 -0
  68. package/lib/typescript/handlers/gestures/flingGesture.d.ts +11 -0
  69. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +14 -0
  70. package/lib/typescript/handlers/gestures/gesture.d.ts +113 -0
  71. package/lib/typescript/handlers/gestures/gestureObjects.d.ts +57 -0
  72. package/lib/typescript/handlers/gestures/hoverGesture.d.ts +1 -1
  73. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +10 -0
  74. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +8 -0
  75. package/lib/typescript/handlers/gestures/panGesture.d.ts +67 -4
  76. package/lib/typescript/handlers/gestures/tapGesture.d.ts +35 -0
  77. package/lib/typescript/web/handlers/GestureHandler.d.ts +2 -2
  78. package/lib/typescript/web/handlers/IGestureHandler.d.ts +1 -1
  79. package/lib/typescript/web/interfaces.d.ts +1 -0
  80. package/package.json +3 -2
  81. package/src/handlers/PanGestureHandler.ts +8 -4
  82. package/src/handlers/createHandler.tsx +14 -10
  83. package/src/handlers/gestures/GestureDetector.tsx +38 -0
  84. package/src/handlers/gestures/flingGesture.ts +11 -0
  85. package/src/handlers/gestures/forceTouchGesture.ts +14 -0
  86. package/src/handlers/gestures/gesture.ts +113 -0
  87. package/src/handlers/gestures/gestureObjects.ts +57 -0
  88. package/src/handlers/gestures/gestureStateManager.web.ts +1 -1
  89. package/src/handlers/gestures/hoverGesture.ts +1 -1
  90. package/src/handlers/gestures/longPressGesture.ts +10 -0
  91. package/src/handlers/gestures/nativeGesture.ts +8 -0
  92. package/src/handlers/gestures/panGesture.ts +75 -4
  93. package/src/handlers/gestures/tapGesture.ts +35 -0
  94. package/src/utils.ts +9 -2
  95. package/src/web/handlers/GestureHandler.ts +9 -9
  96. package/src/web/handlers/IGestureHandler.ts +1 -1
  97. package/src/web/handlers/PanGestureHandler.ts +4 -0
  98. package/src/web/interfaces.ts +1 -0
@@ -155,6 +155,10 @@ export abstract class BaseGesture<
155
155
  : [gesture];
156
156
  }
157
157
 
158
+ /**
159
+ * Sets a `ref` to the gesture object, allowing for interoperability with the old API.
160
+ * @param ref
161
+ */
158
162
  withRef(ref: React.MutableRefObject<GestureType | undefined>) {
159
163
  this.config.ref = ref;
160
164
  return this;
@@ -166,18 +170,32 @@ export abstract class BaseGesture<
166
170
  return callback.__workletHash !== undefined;
167
171
  }
168
172
 
173
+ /**
174
+ * Set the callback that is being called when given gesture handler starts receiving touches.
175
+ * At the moment of this callback the handler is in `BEGAN` state and we don't know yet if it will recognize the gesture at all.
176
+ * @param callback
177
+ */
169
178
  onBegin(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void) {
170
179
  this.handlers.onBegin = callback;
171
180
  this.handlers.isWorklet[CALLBACK_TYPE.BEGAN] = this.isWorklet(callback);
172
181
  return this;
173
182
  }
174
183
 
184
+ /**
185
+ * Set the callback that is being called when the gesture is recognized by the handler and it transitions to the `ACTIVE` state.
186
+ * @param callback
187
+ */
175
188
  onStart(callback: (event: GestureStateChangeEvent<EventPayloadT>) => void) {
176
189
  this.handlers.onStart = callback;
177
190
  this.handlers.isWorklet[CALLBACK_TYPE.START] = this.isWorklet(callback);
178
191
  return this;
179
192
  }
180
193
 
194
+ /**
195
+ * Set the callback that is being called when the gesture that was recognized by the handler finishes and handler reaches `END` state.
196
+ * It will be called only if the handler was previously in the `ACTIVE` state.
197
+ * @param callback
198
+ */
181
199
  onEnd(
182
200
  callback: (
183
201
  event: GestureStateChangeEvent<EventPayloadT>,
@@ -190,6 +208,10 @@ export abstract class BaseGesture<
190
208
  return this;
191
209
  }
192
210
 
211
+ /**
212
+ * Set the callback that is being called when the handler finalizes handling gesture - the gesture was recognized and has finished or it failed to recognize.
213
+ * @param callback
214
+ */
193
215
  onFinalize(
194
216
  callback: (
195
217
  event: GestureStateChangeEvent<EventPayloadT>,
@@ -202,6 +224,10 @@ export abstract class BaseGesture<
202
224
  return this;
203
225
  }
204
226
 
227
+ /**
228
+ * Set the `onTouchesDown` callback which is called every time a pointer is placed on the screen.
229
+ * @param callback
230
+ */
205
231
  onTouchesDown(callback: TouchEventHandlerType) {
206
232
  this.config.needsPointerData = true;
207
233
  this.handlers.onTouchesDown = callback;
@@ -211,6 +237,10 @@ export abstract class BaseGesture<
211
237
  return this;
212
238
  }
213
239
 
240
+ /**
241
+ * Set the `onTouchesMove` callback which is called every time a pointer is moved on the screen.
242
+ * @param callback
243
+ */
214
244
  onTouchesMove(callback: TouchEventHandlerType) {
215
245
  this.config.needsPointerData = true;
216
246
  this.handlers.onTouchesMove = callback;
@@ -220,6 +250,10 @@ export abstract class BaseGesture<
220
250
  return this;
221
251
  }
222
252
 
253
+ /**
254
+ * Set the `onTouchesUp` callback which is called every time a pointer is lifted from the screen.
255
+ * @param callback
256
+ */
223
257
  onTouchesUp(callback: TouchEventHandlerType) {
224
258
  this.config.needsPointerData = true;
225
259
  this.handlers.onTouchesUp = callback;
@@ -229,6 +263,10 @@ export abstract class BaseGesture<
229
263
  return this;
230
264
  }
231
265
 
266
+ /**
267
+ * Set the `onTouchesCancelled` callback which is called every time a pointer stops being tracked, for example when the gesture finishes.
268
+ * @param callback
269
+ */
232
270
  onTouchesCancelled(callback: TouchEventHandlerType) {
233
271
  this.config.needsPointerData = true;
234
272
  this.handlers.onTouchesCancelled = callback;
@@ -238,36 +276,77 @@ export abstract class BaseGesture<
238
276
  return this;
239
277
  }
240
278
 
279
+ /**
280
+ * Indicates whether the given handler should be analyzing stream of touch events or not.
281
+ * @param enabled
282
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture#enabledvalue-boolean
283
+ */
241
284
  enabled(enabled: boolean) {
242
285
  this.config.enabled = enabled;
243
286
  return this;
244
287
  }
245
288
 
289
+ /**
290
+ * When true the handler will cancel or fail recognition (depending on its current state) whenever the finger leaves the area of the connected view.
291
+ * @param value
292
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture#shouldcancelwhenoutsidevalue-boolean
293
+ */
246
294
  shouldCancelWhenOutside(value: boolean) {
247
295
  this.config.shouldCancelWhenOutside = value;
248
296
  return this;
249
297
  }
250
298
 
299
+ /**
300
+ * This parameter enables control over what part of the connected view area can be used to begin recognizing the gesture.
301
+ * When a negative number is provided the bounds of the view will reduce the area by the given number of points in each of the sides evenly.
302
+ * @param hitSlop
303
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture#hitslopsettings
304
+ */
251
305
  hitSlop(hitSlop: HitSlop) {
252
306
  this.config.hitSlop = hitSlop;
253
307
  return this;
254
308
  }
255
309
 
310
+ /**
311
+ * #### Web only
312
+ * This parameter allows to specify which `cursor` should be used when gesture activates.
313
+ * Supports all CSS cursor values (e.g. `"grab"`, `"zoom-in"`). Default value is set to `"auto"`.
314
+ * @param activeCursor
315
+ */
256
316
  activeCursor(activeCursor: ActiveCursor) {
257
317
  this.config.activeCursor = activeCursor;
258
318
  return this;
259
319
  }
260
320
 
321
+ /**
322
+ * #### Web & Android only
323
+ * Allows users to choose which mouse button should handler respond to.
324
+ * Arguments can be combined using `|` operator, e.g. `mouseButton(MouseButton.LEFT | MouseButton.RIGHT)`.
325
+ * Default value is set to `MouseButton.LEFT`.
326
+ * @param mouseButton
327
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture#mousebuttonvalue-mousebutton-web--android-only
328
+ */
261
329
  mouseButton(mouseButton: MouseButton) {
262
330
  this.config.mouseButton = mouseButton;
263
331
  return this;
264
332
  }
265
333
 
334
+ /**
335
+ * When `react-native-reanimated` is installed, the callbacks passed to the gestures are automatically workletized and run on the UI thread when called.
336
+ * This option allows for changing this behavior: when `true`, all the callbacks will be run on the JS thread instead of the UI thread, regardless of whether they are worklets or not.
337
+ * Defaults to `false`.
338
+ * @param runOnJS
339
+ */
266
340
  runOnJS(runOnJS: boolean) {
267
341
  this.config.runOnJS = runOnJS;
268
342
  return this;
269
343
  }
270
344
 
345
+ /**
346
+ * Allows gestures across different components to be recognized simultaneously.
347
+ * @param gestures
348
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/fundamentals/gesture-composition/#simultaneouswithexternalgesture
349
+ */
271
350
  simultaneousWithExternalGesture(...gestures: Exclude<GestureRef, number>[]) {
272
351
  for (const gesture of gestures) {
273
352
  this.addDependency('simultaneousWith', gesture);
@@ -275,6 +354,11 @@ export abstract class BaseGesture<
275
354
  return this;
276
355
  }
277
356
 
357
+ /**
358
+ * Allows to delay activation of the handler until all handlers passed as arguments to this method fail (or don't begin at all).
359
+ * @param gestures
360
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/fundamentals/gesture-composition/#requireexternalgesturetofail
361
+ */
278
362
  requireExternalGestureToFail(...gestures: Exclude<GestureRef, number>[]) {
279
363
  for (const gesture of gestures) {
280
364
  this.addDependency('requireToFail', gesture);
@@ -282,6 +366,11 @@ export abstract class BaseGesture<
282
366
  return this;
283
367
  }
284
368
 
369
+ /**
370
+ * Works similarily to `requireExternalGestureToFail` but the direction of the relation is reversed - instead of being one-to-many relation, it's many-to-one.
371
+ * @param gestures
372
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/fundamentals/gesture-composition/#blocksexternalgesture
373
+ */
285
374
  blocksExternalGesture(...gestures: Exclude<GestureRef, number>[]) {
286
375
  for (const gesture of gestures) {
287
376
  this.addDependency('blocksHandlers', gesture);
@@ -289,11 +378,21 @@ export abstract class BaseGesture<
289
378
  return this;
290
379
  }
291
380
 
381
+ /**
382
+ * Sets a `testID` property for gesture object, allowing for querying for it in tests.
383
+ * @param id
384
+ */
292
385
  withTestId(id: string) {
293
386
  this.config.testId = id;
294
387
  return this;
295
388
  }
296
389
 
390
+ /**
391
+ * #### iOS only
392
+ * When `true`, the handler will cancel touches for native UI components (`UIButton`, `UISwitch`, etc) it's attached to when it becomes `ACTIVE`.
393
+ * Default value is `true`.
394
+ * @param value
395
+ */
297
396
  cancelsTouchesInView(value: boolean) {
298
397
  this.config.cancelsTouchesInView = value;
299
398
  return this;
@@ -332,12 +431,21 @@ export abstract class ContinousBaseGesture<
332
431
  EventPayloadT extends Record<string, unknown>,
333
432
  EventChangePayloadT extends Record<string, unknown>
334
433
  > extends BaseGesture<EventPayloadT> {
434
+ /**
435
+ * Set the callback that is being called every time the gesture receives an update while it's active.
436
+ * @param callback
437
+ */
335
438
  onUpdate(callback: (event: GestureUpdateEvent<EventPayloadT>) => void) {
336
439
  this.handlers.onUpdate = callback;
337
440
  this.handlers.isWorklet[CALLBACK_TYPE.UPDATE] = this.isWorklet(callback);
338
441
  return this;
339
442
  }
340
443
 
444
+ /**
445
+ * Set the callback that is being called every time the gesture receives an update while it's active.
446
+ * This callback will receive information about change in value in relation to the last received event.
447
+ * @param callback
448
+ */
341
449
  onChange(
342
450
  callback: (
343
451
  event: GestureUpdateEvent<EventPayloadT & EventChangePayloadT>
@@ -348,6 +456,11 @@ export abstract class ContinousBaseGesture<
348
456
  return this;
349
457
  }
350
458
 
459
+ /**
460
+ * When `true` the handler will not activate by itself even if its activation criteria are met.
461
+ * Instead you can manipulate its state using state manager.
462
+ * @param manualActivation
463
+ */
351
464
  manualActivation(manualActivation: boolean) {
352
465
  this.config.manualActivation = manualActivation;
353
466
  return this;
@@ -15,43 +15,97 @@ import { NativeGesture } from './nativeGesture';
15
15
  import { ManualGesture } from './manualGesture';
16
16
  import { HoverGesture } from './hoverGesture';
17
17
 
18
+ /**
19
+ * `Gesture` is the object that allows you to create and compose gestures.
20
+ *
21
+ * ### Remarks
22
+ * - Consider wrapping your gesture configurations with `useMemo`, as it will reduce the amount of work Gesture Handler has to do under the hood when updating gestures.
23
+ *
24
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/gesture
25
+ */
18
26
  export const GestureObjects = {
27
+ /**
28
+ * A discrete gesture that recognizes one or many taps.
29
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/tap-gesture
30
+ */
19
31
  Tap: () => {
20
32
  return new TapGesture();
21
33
  },
22
34
 
35
+ /**
36
+ * A continuous gesture that can recognize a panning (dragging) gesture and track its movement.
37
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture
38
+ */
23
39
  Pan: () => {
24
40
  return new PanGesture();
25
41
  },
26
42
 
43
+ /**
44
+ * A continuous gesture that recognizes pinch gesture. It allows for tracking the distance between two fingers and use that information to scale or zoom your content.
45
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pinch-gesture
46
+ */
27
47
  Pinch: () => {
28
48
  return new PinchGesture();
29
49
  },
30
50
 
51
+ /**
52
+ * A continuous gesture that can recognize rotation and track its movement.
53
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/rotation-gesture
54
+ */
31
55
  Rotation: () => {
32
56
  return new RotationGesture();
33
57
  },
34
58
 
59
+ /**
60
+ * A discrete gesture that activates when the movement is sufficiently fast.
61
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/fling-gesture
62
+ */
35
63
  Fling: () => {
36
64
  return new FlingGesture();
37
65
  },
38
66
 
67
+ /**
68
+ * A discrete gesture that activates when the corresponding view is pressed for a sufficiently long time.
69
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/long-press-gesture
70
+ */
39
71
  LongPress: () => {
40
72
  return new LongPressGesture();
41
73
  },
42
74
 
75
+ /**
76
+ * #### iOS only
77
+ * A continuous gesture that recognizes force of a touch. It allows for tracking pressure of touch on some iOS devices.
78
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/force-touch-gesture
79
+ */
43
80
  ForceTouch: () => {
44
81
  return new ForceTouchGesture();
45
82
  },
46
83
 
84
+ /**
85
+ * A gesture that allows other touch handling components to participate in RNGH's gesture system.
86
+ * When used, the other component should be the direct child of a `GestureDetector`.
87
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/native-gesture
88
+ */
47
89
  Native: () => {
48
90
  return new NativeGesture();
49
91
  },
50
92
 
93
+ /**
94
+ * A plain gesture that has no specific activation criteria nor event data set.
95
+ * Its state has to be controlled manually using a state manager.
96
+ * It will not fail when all the pointers are lifted from the screen.
97
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/manual-gesture
98
+ */
51
99
  Manual: () => {
52
100
  return new ManualGesture();
53
101
  },
54
102
 
103
+ /**
104
+ * A continuous gesture that can recognize hovering above the view it's attached to.
105
+ * The hover effect may be activated by moving a mouse or a stylus over the view.
106
+ *
107
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/hover-gesture
108
+ */
55
109
  Hover: () => {
56
110
  return new HoverGesture();
57
111
  },
@@ -59,6 +113,7 @@ export const GestureObjects = {
59
113
  /**
60
114
  * Builds a composed gesture consisting of gestures provided as parameters.
61
115
  * The first one that becomes active cancels the rest of gestures.
116
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/fundamentals/gesture-composition/#race
62
117
  */
63
118
  Race: (...gestures: Gesture[]) => {
64
119
  return new ComposedGesture(...gestures);
@@ -66,6 +121,7 @@ export const GestureObjects = {
66
121
 
67
122
  /**
68
123
  * Builds a composed gesture that allows all base gestures to run simultaneously.
124
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/fundamentals/gesture-composition/#simultaneous
69
125
  */
70
126
  Simultaneous(...gestures: Gesture[]) {
71
127
  return new SimultaneousGesture(...gestures);
@@ -77,6 +133,7 @@ export const GestureObjects = {
77
133
  * than the second one, second one has higher priority than the third one, and so on.
78
134
  * For example, to make a gesture that recognizes both single and double tap you need
79
135
  * to call Exclusive(doubleTap, singleTap).
136
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/fundamentals/gesture-composition/#exclusive
80
137
  */
81
138
  Exclusive(...gestures: Gesture[]) {
82
139
  return new ExclusiveGesture(...gestures);
@@ -9,7 +9,7 @@ export const GestureStateManager = {
9
9
  },
10
10
 
11
11
  activate: () => {
12
- NodeManager.getHandler(handlerTag).activate();
12
+ NodeManager.getHandler(handlerTag).activate(true);
13
13
  },
14
14
 
15
15
  fail: () => {
@@ -59,8 +59,8 @@ export class HoverGesture extends ContinousBaseGesture<
59
59
  }
60
60
 
61
61
  /**
62
+ * #### iOS only
62
63
  * Sets the visual hover effect.
63
- * iOS only
64
64
  */
65
65
  effect(effect: HoverEffect) {
66
66
  this.config.hoverEffect = effect;
@@ -14,11 +14,21 @@ export class LongPressGesture extends BaseGesture<LongPressGestureHandlerEventPa
14
14
  this.shouldCancelWhenOutside(true);
15
15
  }
16
16
 
17
+ /**
18
+ * Minimum time, expressed in milliseconds, that a finger must remain pressed on the corresponding view.
19
+ * The default value is 500.
20
+ * @param duration
21
+ */
17
22
  minDuration(duration: number) {
18
23
  this.config.minDurationMs = duration;
19
24
  return this;
20
25
  }
21
26
 
27
+ /**
28
+ * Maximum distance, expressed in points, that defines how far the finger is allowed to travel during a long press gesture.
29
+ * @param distance
30
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/long-press-gesture#maxdistancevalue-number
31
+ */
22
32
  maxDistance(distance: number) {
23
33
  this.config.maxDist = distance;
24
34
  return this;
@@ -13,11 +13,19 @@ export class NativeGesture extends BaseGesture<NativeViewGestureHandlerPayload>
13
13
  this.handlerName = 'NativeViewGestureHandler';
14
14
  }
15
15
 
16
+ /**
17
+ * When true, underlying handler will activate unconditionally when in `BEGAN` or `UNDETERMINED` state.
18
+ * @param value
19
+ */
16
20
  shouldActivateOnStart(value: boolean) {
17
21
  this.config.shouldActivateOnStart = value;
18
22
  return this;
19
23
  }
20
24
 
25
+ /**
26
+ * When true, cancels all other gesture handlers when this `NativeViewGestureHandler` receives an `ACTIVE` state event.
27
+ * @param value
28
+ */
21
29
  disallowInterruption(value: boolean) {
22
30
  this.config.disallowInterruption = value;
23
31
  return this;
@@ -43,7 +43,14 @@ export class PanGesture extends ContinousBaseGesture<
43
43
  this.handlerName = 'PanGestureHandler';
44
44
  }
45
45
 
46
- activeOffsetY(offset: number | number[]) {
46
+ /**
47
+ * Range along Y axis (in points) where fingers travels without activation of gesture.
48
+ * @param offset
49
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture#activeoffsetyvalue-number--number
50
+ */
51
+ activeOffsetY(
52
+ offset: number | [activeOffsetYStart: number, activeOffsetYEnd: number]
53
+ ) {
47
54
  if (Array.isArray(offset)) {
48
55
  this.config.activeOffsetYStart = offset[0];
49
56
  this.config.activeOffsetYEnd = offset[1];
@@ -55,7 +62,14 @@ export class PanGesture extends ContinousBaseGesture<
55
62
  return this;
56
63
  }
57
64
 
58
- activeOffsetX(offset: number | number[]) {
65
+ /**
66
+ * Range along X axis (in points) where fingers travels without activation of gesture.
67
+ * @param offset
68
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture#activeoffsetxvalue-number--number
69
+ */
70
+ activeOffsetX(
71
+ offset: number | [activeOffsetXStart: number, activeOffsetXEnd: number]
72
+ ) {
59
73
  if (Array.isArray(offset)) {
60
74
  this.config.activeOffsetXStart = offset[0];
61
75
  this.config.activeOffsetXEnd = offset[1];
@@ -67,7 +81,14 @@ export class PanGesture extends ContinousBaseGesture<
67
81
  return this;
68
82
  }
69
83
 
70
- failOffsetY(offset: number | number[]) {
84
+ /**
85
+ * When the finger moves outside this range (in points) along Y axis and gesture hasn't yet activated it will fail recognizing the gesture.
86
+ * @param offset
87
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture#failoffsetyvalue-number--number
88
+ */
89
+ failOffsetY(
90
+ offset: number | [failOffsetYStart: number, failOffsetYEnd: number]
91
+ ) {
71
92
  if (Array.isArray(offset)) {
72
93
  this.config.failOffsetYStart = offset[0];
73
94
  this.config.failOffsetYEnd = offset[1];
@@ -79,7 +100,14 @@ export class PanGesture extends ContinousBaseGesture<
79
100
  return this;
80
101
  }
81
102
 
82
- failOffsetX(offset: number | number[]) {
103
+ /**
104
+ * When the finger moves outside this range (in points) along X axis and gesture hasn't yet activated it will fail recognizing the gesture.
105
+ * @param offset
106
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture#failoffsetxvalue-number--number
107
+ */
108
+ failOffsetX(
109
+ offset: number | [failOffsetXStart: number, failOffsetXEnd: number]
110
+ ) {
83
111
  if (Array.isArray(offset)) {
84
112
  this.config.failOffsetXStart = offset[0];
85
113
  this.config.failOffsetXEnd = offset[1];
@@ -91,46 +119,89 @@ export class PanGesture extends ContinousBaseGesture<
91
119
  return this;
92
120
  }
93
121
 
122
+ /**
123
+ * A number of fingers that is required to be placed before gesture can activate. Should be a higher or equal to 0 integer.
124
+ * @param minPointers
125
+ */
94
126
  minPointers(minPointers: number) {
95
127
  this.config.minPointers = minPointers;
96
128
  return this;
97
129
  }
98
130
 
131
+ /**
132
+ * When the given number of fingers is placed on the screen and gesture hasn't yet activated it will fail recognizing the gesture.
133
+ * Should be a higher or equal to 0 integer.
134
+ * @param maxPointers
135
+ */
99
136
  maxPointers(maxPointers: number) {
100
137
  this.config.maxPointers = maxPointers;
101
138
  return this;
102
139
  }
103
140
 
141
+ /**
142
+ * Minimum distance the finger (or multiple finger) need to travel before the gesture activates.
143
+ * Expressed in points.
144
+ * @param distance
145
+ */
104
146
  minDistance(distance: number) {
105
147
  this.config.minDist = distance;
106
148
  return this;
107
149
  }
108
150
 
151
+ /**
152
+ * Minimum velocity the finger has to reach in order to activate handler.
153
+ * @param velocity
154
+ */
109
155
  minVelocity(velocity: number) {
110
156
  this.config.minVelocity = velocity;
111
157
  return this;
112
158
  }
113
159
 
160
+ /**
161
+ * Minimum velocity along X axis the finger has to reach in order to activate handler.
162
+ * @param velocity
163
+ */
114
164
  minVelocityX(velocity: number) {
115
165
  this.config.minVelocityX = velocity;
116
166
  return this;
117
167
  }
118
168
 
169
+ /**
170
+ * Minimum velocity along Y axis the finger has to reach in order to activate handler.
171
+ * @param velocity
172
+ */
119
173
  minVelocityY(velocity: number) {
120
174
  this.config.minVelocityY = velocity;
121
175
  return this;
122
176
  }
123
177
 
178
+ /**
179
+ * #### Android only
180
+ * Android, by default, will calculate translation values based on the position of the leading pointer (the first one that was placed on the screen).
181
+ * This modifier allows that behavior to be changed to the one that is default on iOS - the averaged position of all active pointers will be used to calculate the translation values.
182
+ * @param value
183
+ */
124
184
  averageTouches(value: boolean) {
125
185
  this.config.avgTouches = value;
126
186
  return this;
127
187
  }
128
188
 
189
+ /**
190
+ * #### iOS only
191
+ * Enables two-finger gestures on supported devices, for example iPads with trackpads.
192
+ * @param value
193
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture/#enabletrackpadtwofingergesturevalue-boolean-ios-only
194
+ */
129
195
  enableTrackpadTwoFingerGesture(value: boolean) {
130
196
  this.config.enableTrackpadTwoFingerGesture = value;
131
197
  return this;
132
198
  }
133
199
 
200
+ /**
201
+ * Duration in milliseconds of the LongPress gesture before Pan is allowed to activate.
202
+ * @param duration
203
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/pan-gesture/#activateafterlongpressduration-number
204
+ */
134
205
  activateAfterLongPress(duration: number) {
135
206
  this.config.activateAfterLongPress = duration;
136
207
  return this;
@@ -14,36 +14,71 @@ export class TapGesture extends BaseGesture<TapGestureHandlerEventPayload> {
14
14
  this.shouldCancelWhenOutside(true);
15
15
  }
16
16
 
17
+ /**
18
+ * Minimum number of pointers (fingers) required to be placed before the gesture activates.
19
+ * Should be a positive integer. The default value is 1.
20
+ * @param minPointers
21
+ */
17
22
  minPointers(minPointers: number) {
18
23
  this.config.minPointers = minPointers;
19
24
  return this;
20
25
  }
21
26
 
27
+ /**
28
+ * Number of tap gestures required to activate the gesture.
29
+ * The default value is 1.
30
+ * @param count
31
+ */
22
32
  numberOfTaps(count: number) {
23
33
  this.config.numberOfTaps = count;
24
34
  return this;
25
35
  }
26
36
 
37
+ /**
38
+ * Maximum distance, expressed in points, that defines how far the finger is allowed to travel during a tap gesture.
39
+ * @param maxDist
40
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/tap-gesture#maxdistancevalue-number
41
+ */
27
42
  maxDistance(maxDist: number) {
28
43
  this.config.maxDist = maxDist;
29
44
  return this;
30
45
  }
31
46
 
47
+ /**
48
+ * Maximum time, expressed in milliseconds, that defines how fast a finger must be released after a touch.
49
+ * The default value is 500.
50
+ * @param duration
51
+ */
32
52
  maxDuration(duration: number) {
33
53
  this.config.maxDurationMs = duration;
34
54
  return this;
35
55
  }
36
56
 
57
+ /**
58
+ * Maximum time, expressed in milliseconds, that can pass before the next tap — if many taps are required.
59
+ * The default value is 500.
60
+ * @param delay
61
+ */
37
62
  maxDelay(delay: number) {
38
63
  this.config.maxDelayMs = delay;
39
64
  return this;
40
65
  }
41
66
 
67
+ /**
68
+ * Maximum distance, expressed in points, that defines how far the finger is allowed to travel along the X axis during a tap gesture.
69
+ * @param delta
70
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/tap-gesture#maxdeltaxvalue-number
71
+ */
42
72
  maxDeltaX(delta: number) {
43
73
  this.config.maxDeltaX = delta;
44
74
  return this;
45
75
  }
46
76
 
77
+ /**
78
+ * Maximum distance, expressed in points, that defines how far the finger is allowed to travel along the Y axis during a tap gesture.
79
+ * @param delta
80
+ * @see https://docs.swmansion.com/react-native-gesture-handler/docs/gestures/tap-gesture#maxdeltayvalue-number
81
+ */
47
82
  maxDeltaY(delta: number) {
48
83
  this.config.maxDeltaY = delta;
49
84
  return this;
package/src/utils.ts CHANGED
@@ -18,7 +18,10 @@ export function withPrevAndCurrent<T, Transformed>(
18
18
  const currentArr = [...array];
19
19
  const transformedArr: Transformed[] = [];
20
20
  currentArr.forEach((current, i) => {
21
- const previous = previousArr[i];
21
+ // This type cast is fine and solves problem mentioned in https://github.com/software-mansion/react-native-gesture-handler/pull/2867 (namely that `previous` can be undefined).
22
+ // Unfortunately, linter on our CI does not allow this type of casting as it is unnecessary. To bypass that we use eslint-disable.
23
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
24
+ const previous = previousArr[i] as Transformed | null;
22
25
  const transformed = mapFn(previous, current);
23
26
  previousArr.push(transformed);
24
27
  transformedArr.push(transformed);
@@ -50,5 +53,9 @@ export function isFabric(): boolean {
50
53
  export function isRemoteDebuggingEnabled(): boolean {
51
54
  // react-native-reanimated checks if in remote debugging in the same way
52
55
  // @ts-ignore global is available but node types are not included
53
- return !(global as any).nativeCallSyncHook || (global as any).__REMOTEDEV__;
56
+ const localGlobal = global as any;
57
+ return (
58
+ (!localGlobal.nativeCallSyncHook || !!localGlobal.__REMOTEDEV__) &&
59
+ !localGlobal.RN$Bridgeless
60
+ );
54
61
  }