react-native-gesture-handler 2.18.0 → 2.19.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 (141) hide show
  1. package/README.md +1 -0
  2. package/android/build.gradle +4 -17
  3. package/android/src/main/AndroidManifest.xml +1 -3
  4. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +21 -21
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +2 -2
  6. package/android/src/main/java/com/swmansion/gesturehandler/core/HoverGestureHandler.kt +5 -0
  7. package/android/src/main/java/com/swmansion/gesturehandler/core/LongPressGestureHandler.kt +80 -4
  8. package/android/src/main/java/com/swmansion/gesturehandler/core/PinchGestureHandler.kt +2 -1
  9. package/android/src/main/java/com/swmansion/gesturehandler/core/ScaleGestureDetector.java +10 -0
  10. package/android/src/main/java/com/swmansion/gesturehandler/core/Vector.kt +2 -2
  11. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +3 -0
  12. package/android/src/main/jni/cpp-adapter.cpp +2 -4
  13. package/apple/Handlers/RNFlingHandler.h +1 -0
  14. package/apple/Handlers/RNFlingHandler.m +153 -19
  15. package/apple/Handlers/RNHoverHandler.m +44 -2
  16. package/apple/Handlers/RNLongPressHandler.m +109 -20
  17. package/apple/Handlers/RNManualHandler.m +53 -29
  18. package/apple/Handlers/RNNativeViewHandler.mm +22 -15
  19. package/apple/RNGHUIKit.h +2 -0
  20. package/apple/RNGHVector.h +31 -0
  21. package/apple/RNGHVector.m +67 -0
  22. package/apple/RNGestureHandler.h +7 -0
  23. package/apple/{RNGestureHandler.m → RNGestureHandler.mm} +63 -1
  24. package/apple/RNGestureHandlerButtonComponentView.mm +6 -0
  25. package/apple/RNGestureHandlerDirection.h +25 -0
  26. package/apple/RNGestureHandlerModule.mm +2 -4
  27. package/lib/commonjs/PointerType.js +2 -1
  28. package/lib/commonjs/PointerType.js.map +1 -1
  29. package/lib/commonjs/components/Pressable/Pressable.js +67 -70
  30. package/lib/commonjs/components/Pressable/Pressable.js.map +1 -1
  31. package/lib/commonjs/components/Pressable/index.js +0 -8
  32. package/lib/commonjs/components/Pressable/index.js.map +1 -1
  33. package/lib/commonjs/components/ReanimatedSwipeable.js +60 -41
  34. package/lib/commonjs/components/ReanimatedSwipeable.js.map +1 -1
  35. package/lib/commonjs/components/Swipeable.js +5 -0
  36. package/lib/commonjs/components/Swipeable.js.map +1 -1
  37. package/lib/commonjs/handlers/LongPressGestureHandler.js +1 -1
  38. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
  39. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js +1 -1
  40. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js.map +1 -1
  41. package/lib/commonjs/handlers/gestures/longPressGesture.js +10 -0
  42. package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -1
  43. package/lib/commonjs/mocks.js +16 -3
  44. package/lib/commonjs/mocks.js.map +1 -1
  45. package/lib/commonjs/utils.js +4 -0
  46. package/lib/commonjs/utils.js.map +1 -1
  47. package/lib/commonjs/web/constants.js +3 -3
  48. package/lib/commonjs/web/constants.js.map +1 -1
  49. package/lib/commonjs/web/handlers/GestureHandler.js +1 -0
  50. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  51. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +43 -9
  52. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  53. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +14 -3
  54. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  55. package/lib/commonjs/web/handlers/PanGestureHandler.js +4 -0
  56. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  57. package/lib/commonjs/web/interfaces.js.map +1 -1
  58. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +55 -8
  59. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  60. package/lib/commonjs/web/tools/KeyboardEventManager.js +110 -0
  61. package/lib/commonjs/web/tools/KeyboardEventManager.js.map +1 -0
  62. package/lib/commonjs/web/tools/Vector.js +4 -2
  63. package/lib/commonjs/web/tools/Vector.js.map +1 -1
  64. package/lib/commonjs/web/utils.js +14 -13
  65. package/lib/commonjs/web/utils.js.map +1 -1
  66. package/lib/module/PointerType.js +2 -1
  67. package/lib/module/PointerType.js.map +1 -1
  68. package/lib/module/components/Pressable/Pressable.js +66 -70
  69. package/lib/module/components/Pressable/Pressable.js.map +1 -1
  70. package/lib/module/components/Pressable/index.js +0 -1
  71. package/lib/module/components/Pressable/index.js.map +1 -1
  72. package/lib/module/components/ReanimatedSwipeable.js +58 -37
  73. package/lib/module/components/ReanimatedSwipeable.js.map +1 -1
  74. package/lib/module/components/Swipeable.js +6 -0
  75. package/lib/module/components/Swipeable.js.map +1 -1
  76. package/lib/module/handlers/LongPressGestureHandler.js +1 -1
  77. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
  78. package/lib/module/handlers/gestures/GestureDetector/utils.js +2 -2
  79. package/lib/module/handlers/gestures/GestureDetector/utils.js.map +1 -1
  80. package/lib/module/handlers/gestures/longPressGesture.js +10 -0
  81. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
  82. package/lib/module/mocks.js +13 -3
  83. package/lib/module/mocks.js.map +1 -1
  84. package/lib/module/utils.js +1 -0
  85. package/lib/module/utils.js.map +1 -1
  86. package/lib/module/web/constants.js +1 -1
  87. package/lib/module/web/constants.js.map +1 -1
  88. package/lib/module/web/handlers/GestureHandler.js +1 -0
  89. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  90. package/lib/module/web/handlers/LongPressGestureHandler.js +43 -9
  91. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  92. package/lib/module/web/handlers/NativeViewGestureHandler.js +14 -3
  93. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  94. package/lib/module/web/handlers/PanGestureHandler.js +4 -0
  95. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  96. package/lib/module/web/interfaces.js.map +1 -1
  97. package/lib/module/web/tools/GestureHandlerWebDelegate.js +54 -8
  98. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  99. package/lib/module/web/tools/KeyboardEventManager.js +96 -0
  100. package/lib/module/web/tools/KeyboardEventManager.js.map +1 -0
  101. package/lib/module/web/tools/Vector.js +5 -3
  102. package/lib/module/web/tools/Vector.js.map +1 -1
  103. package/lib/module/web/utils.js +14 -13
  104. package/lib/module/web/utils.js.map +1 -1
  105. package/lib/typescript/PointerType.d.ts +2 -1
  106. package/lib/typescript/components/Pressable/index.d.ts +1 -1
  107. package/lib/typescript/components/Swipeable.d.ts +5 -0
  108. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +5 -1
  109. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +5 -0
  110. package/lib/typescript/mocks.d.ts +4 -3
  111. package/lib/typescript/utils.d.ts +1 -0
  112. package/lib/typescript/web/constants.d.ts +1 -1
  113. package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -1
  114. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +3 -0
  115. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -0
  116. package/lib/typescript/web/interfaces.d.ts +1 -1
  117. package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +1 -0
  118. package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +6 -0
  119. package/lib/typescript/web/tools/KeyboardEventManager.d.ts +13 -0
  120. package/package.json +3 -3
  121. package/src/PointerType.ts +1 -0
  122. package/src/components/Pressable/Pressable.tsx +70 -50
  123. package/src/components/Pressable/index.ts +1 -1
  124. package/src/components/ReanimatedSwipeable.tsx +70 -47
  125. package/src/components/Swipeable.tsx +6 -0
  126. package/src/handlers/LongPressGestureHandler.ts +6 -0
  127. package/src/handlers/gestures/GestureDetector/utils.ts +2 -2
  128. package/src/handlers/gestures/longPressGesture.ts +9 -0
  129. package/src/{mocks.ts → mocks.tsx} +8 -3
  130. package/src/utils.ts +2 -0
  131. package/src/web/constants.ts +1 -1
  132. package/src/web/handlers/GestureHandler.ts +3 -1
  133. package/src/web/handlers/LongPressGestureHandler.ts +49 -10
  134. package/src/web/handlers/NativeViewGestureHandler.ts +14 -4
  135. package/src/web/handlers/PanGestureHandler.ts +4 -0
  136. package/src/web/interfaces.ts +1 -1
  137. package/src/web/tools/GestureHandlerDelegate.ts +1 -0
  138. package/src/web/tools/GestureHandlerWebDelegate.ts +67 -8
  139. package/src/web/tools/KeyboardEventManager.ts +91 -0
  140. package/src/web/tools/Vector.ts +4 -3
  141. package/src/web/utils.ts +15 -13
@@ -1,3 +1,5 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
1
3
  import React, { useCallback, useMemo, useRef, useState } from 'react';
2
4
  import { GestureObjects as Gesture } from '../../handlers/gestures/gestureObjects';
3
5
  import { GestureDetector } from '../../handlers/gestures/GestureDetector';
@@ -5,71 +7,71 @@ import { Platform, View, processColor, StyleSheet } from 'react-native';
5
7
  import NativeButton from '../GestureHandlerButton';
6
8
  import { numberAsInset, gestureToPressableEvent, isTouchWithinInset, gestureTouchToPressableEvent, addInsets, splitStyles } from './utils';
7
9
  import { PressabilityDebugView } from '../../handlers/PressabilityDebugView';
10
+ import { INT32_MAX } from '../../utils';
8
11
  const DEFAULT_LONG_PRESS_DURATION = 500;
9
12
  export default function Pressable(props) {
10
- var _props$testOnly_press, _props$delayLongPress, _props$unstable_press, _props$android_disabl, _props$android_ripple, _props$android_ripple2, _props$android_ripple3, _props$android_ripple4;
11
-
12
- const [pressedState, setPressedState] = useState((_props$testOnly_press = props.testOnly_pressed) !== null && _props$testOnly_press !== void 0 ? _props$testOnly_press : false);
13
+ var _android_ripple$color, _android_ripple$radiu;
14
+
15
+ const {
16
+ testOnly_pressed,
17
+ hitSlop,
18
+ pressRetentionOffset,
19
+ delayHoverIn,
20
+ onHoverIn,
21
+ delayHoverOut,
22
+ onHoverOut,
23
+ delayLongPress,
24
+ unstable_pressDelay,
25
+ onPress,
26
+ onPressIn,
27
+ onPressOut,
28
+ onLongPress,
29
+ style,
30
+ children,
31
+ android_disableSound,
32
+ android_ripple,
33
+ disabled,
34
+ ...remainingProps
35
+ } = props;
36
+ const [pressedState, setPressedState] = useState(testOnly_pressed !== null && testOnly_pressed !== void 0 ? testOnly_pressed : false);
13
37
  const pressableRef = useRef(null); // Disabled when onLongPress has been called
14
38
 
15
39
  const isPressCallbackEnabled = useRef(true);
16
40
  const hasPassedBoundsChecks = useRef(false);
17
41
  const shouldPreventNativeEffects = useRef(false);
18
- const normalizedHitSlop = useMemo(() => {
19
- var _props$hitSlop;
20
-
21
- return typeof props.hitSlop === 'number' ? numberAsInset(props.hitSlop) : (_props$hitSlop = props.hitSlop) !== null && _props$hitSlop !== void 0 ? _props$hitSlop : {};
22
- }, [props.hitSlop]);
23
- const normalizedPressRetentionOffset = useMemo(() => {
24
- var _props$pressRetention;
25
-
26
- return typeof props.pressRetentionOffset === 'number' ? numberAsInset(props.pressRetentionOffset) : (_props$pressRetention = props.pressRetentionOffset) !== null && _props$pressRetention !== void 0 ? _props$pressRetention : {};
27
- }, [props.pressRetentionOffset]);
42
+ const normalizedHitSlop = useMemo(() => typeof hitSlop === 'number' ? numberAsInset(hitSlop) : hitSlop !== null && hitSlop !== void 0 ? hitSlop : {}, [hitSlop]);
43
+ const normalizedPressRetentionOffset = useMemo(() => typeof pressRetentionOffset === 'number' ? numberAsInset(pressRetentionOffset) : pressRetentionOffset !== null && pressRetentionOffset !== void 0 ? pressRetentionOffset : {}, [pressRetentionOffset]);
28
44
  const hoverInTimeout = useRef(null);
29
45
  const hoverOutTimeout = useRef(null);
30
46
  const hoverGesture = useMemo(() => Gesture.Hover().manualActivation(true) // Stops Hover from blocking Native gesture activation on web
31
47
  .cancelsTouchesInView(false).onBegin(event => {
32
- var _props$onHoverIn2;
33
-
34
48
  if (hoverOutTimeout.current) {
35
49
  clearTimeout(hoverOutTimeout.current);
36
50
  }
37
51
 
38
- if (props.delayHoverIn) {
39
- hoverInTimeout.current = setTimeout(() => {
40
- var _props$onHoverIn;
41
-
42
- return (_props$onHoverIn = props.onHoverIn) === null || _props$onHoverIn === void 0 ? void 0 : _props$onHoverIn.call(props, gestureToPressableEvent(event));
43
- }, props.delayHoverIn);
52
+ if (delayHoverIn) {
53
+ hoverInTimeout.current = setTimeout(() => onHoverIn === null || onHoverIn === void 0 ? void 0 : onHoverIn(gestureToPressableEvent(event)), delayHoverIn);
44
54
  return;
45
55
  }
46
56
 
47
- (_props$onHoverIn2 = props.onHoverIn) === null || _props$onHoverIn2 === void 0 ? void 0 : _props$onHoverIn2.call(props, gestureToPressableEvent(event));
57
+ onHoverIn === null || onHoverIn === void 0 ? void 0 : onHoverIn(gestureToPressableEvent(event));
48
58
  }).onFinalize(event => {
49
- var _props$onHoverOut2;
50
-
51
59
  if (hoverInTimeout.current) {
52
60
  clearTimeout(hoverInTimeout.current);
53
61
  }
54
62
 
55
- if (props.delayHoverOut) {
56
- hoverOutTimeout.current = setTimeout(() => {
57
- var _props$onHoverOut;
58
-
59
- return (_props$onHoverOut = props.onHoverOut) === null || _props$onHoverOut === void 0 ? void 0 : _props$onHoverOut.call(props, gestureToPressableEvent(event));
60
- }, props.delayHoverOut);
63
+ if (delayHoverOut) {
64
+ hoverOutTimeout.current = setTimeout(() => onHoverOut === null || onHoverOut === void 0 ? void 0 : onHoverOut(gestureToPressableEvent(event)), delayHoverOut);
61
65
  return;
62
66
  }
63
67
 
64
- (_props$onHoverOut2 = props.onHoverOut) === null || _props$onHoverOut2 === void 0 ? void 0 : _props$onHoverOut2.call(props, gestureToPressableEvent(event));
65
- }), [props]);
68
+ onHoverOut === null || onHoverOut === void 0 ? void 0 : onHoverOut(gestureToPressableEvent(event));
69
+ }), [delayHoverIn, delayHoverOut, onHoverIn, onHoverOut]);
66
70
  const pressDelayTimeoutRef = useRef(null);
67
71
  const isTouchPropagationAllowed = useRef(false); // iOS only: due to varying flow of gestures, events sometimes have to be saved for later use
68
72
 
69
73
  const deferredEventPayload = useRef(null);
70
74
  const pressInHandler = useCallback(event => {
71
- var _props$onPressIn;
72
-
73
75
  if (handlingOnTouchesDown.current) {
74
76
  deferredEventPayload.current = event;
75
77
  }
@@ -79,19 +81,17 @@ export default function Pressable(props) {
79
81
  }
80
82
 
81
83
  deferredEventPayload.current = null;
82
- (_props$onPressIn = props.onPressIn) === null || _props$onPressIn === void 0 ? void 0 : _props$onPressIn.call(props, event);
84
+ onPressIn === null || onPressIn === void 0 ? void 0 : onPressIn(event);
83
85
  isPressCallbackEnabled.current = true;
84
86
  pressDelayTimeoutRef.current = null;
85
87
  setPressedState(true);
86
- }, [props]);
88
+ }, [onPressIn]);
87
89
  const pressOutHandler = useCallback(event => {
88
- var _props$onPressOut;
89
-
90
90
  if (!hasPassedBoundsChecks.current || event.nativeEvent.touches.length > event.nativeEvent.changedTouches.length) {
91
91
  return;
92
92
  }
93
93
 
94
- if (props.unstable_pressDelay && pressDelayTimeoutRef.current !== null) {
94
+ if (unstable_pressDelay && pressDelayTimeoutRef.current !== null) {
95
95
  // When delay is preemptively finished by lifting touches,
96
96
  // we want to immediately activate it's effects - pressInHandler,
97
97
  // even though we are located at the pressOutHandler
@@ -100,18 +100,14 @@ export default function Pressable(props) {
100
100
  }
101
101
 
102
102
  if (deferredEventPayload.current) {
103
- var _props$onPressIn2;
104
-
105
- (_props$onPressIn2 = props.onPressIn) === null || _props$onPressIn2 === void 0 ? void 0 : _props$onPressIn2.call(props, deferredEventPayload.current);
103
+ onPressIn === null || onPressIn === void 0 ? void 0 : onPressIn(deferredEventPayload.current);
106
104
  deferredEventPayload.current = null;
107
105
  }
108
106
 
109
- (_props$onPressOut = props.onPressOut) === null || _props$onPressOut === void 0 ? void 0 : _props$onPressOut.call(props, event);
107
+ onPressOut === null || onPressOut === void 0 ? void 0 : onPressOut(event);
110
108
 
111
109
  if (isPressCallbackEnabled.current) {
112
- var _props$onPress;
113
-
114
- (_props$onPress = props.onPress) === null || _props$onPress === void 0 ? void 0 : _props$onPress.call(props, event);
110
+ onPress === null || onPress === void 0 ? void 0 : onPress(event);
115
111
  }
116
112
 
117
113
  if (longPressTimeoutRef.current) {
@@ -123,7 +119,7 @@ export default function Pressable(props) {
123
119
  hasPassedBoundsChecks.current = false;
124
120
  isPressCallbackEnabled.current = true;
125
121
  setPressedState(false);
126
- }, [pressInHandler, props]);
122
+ }, [onPress, onPressIn, onPressOut, pressInHandler, unstable_pressDelay]);
127
123
  const handlingOnTouchesDown = useRef(false);
128
124
  const onEndHandlingTouchesDown = useRef(null);
129
125
  const cancelledMidPress = useRef(false);
@@ -133,9 +129,7 @@ export default function Pressable(props) {
133
129
  }
134
130
 
135
131
  if (hasPassedBoundsChecks.current) {
136
- var _props$onLongPress;
137
-
138
- (_props$onLongPress = props.onLongPress) === null || _props$onLongPress === void 0 ? void 0 : _props$onLongPress.call(props, gestureTouchToPressableEvent(event));
132
+ onLongPress === null || onLongPress === void 0 ? void 0 : onLongPress(gestureTouchToPressableEvent(event));
139
133
  isPressCallbackEnabled.current = false;
140
134
  }
141
135
 
@@ -143,11 +137,11 @@ export default function Pressable(props) {
143
137
  clearTimeout(longPressTimeoutRef.current);
144
138
  longPressTimeoutRef.current = null;
145
139
  }
146
- }, [props]);
140
+ }, [onLongPress]);
147
141
  const longPressTimeoutRef = useRef(null);
148
- const longPressMinDuration = ((_props$delayLongPress = props.delayLongPress) !== null && _props$delayLongPress !== void 0 ? _props$delayLongPress : DEFAULT_LONG_PRESS_DURATION) + ((_props$unstable_press = props.unstable_pressDelay) !== null && _props$unstable_press !== void 0 ? _props$unstable_press : 0);
149
- const pressAndTouchGesture = useMemo(() => Gesture.LongPress().minDuration(Number.MAX_SAFE_INTEGER) // Stops long press from blocking native gesture
150
- .maxDistance(Number.MAX_SAFE_INTEGER) // Stops long press from cancelling after set distance
142
+ const longPressMinDuration = (delayLongPress !== null && delayLongPress !== void 0 ? delayLongPress : DEFAULT_LONG_PRESS_DURATION) + (unstable_pressDelay !== null && unstable_pressDelay !== void 0 ? unstable_pressDelay : 0);
143
+ const pressAndTouchGesture = useMemo(() => Gesture.LongPress().minDuration(INT32_MAX) // Stops long press from blocking native gesture
144
+ .maxDistance(INT32_MAX) // Stops long press from cancelling after set distance
151
145
  .cancelsTouchesInView(false).onTouchesDown(event => {
152
146
  var _pressableRef$current;
153
147
 
@@ -172,10 +166,10 @@ export default function Pressable(props) {
172
166
  longPressTimeoutRef.current = setTimeout(() => activateLongPress(event), longPressMinDuration);
173
167
  }
174
168
 
175
- if (props.unstable_pressDelay) {
169
+ if (unstable_pressDelay) {
176
170
  pressDelayTimeoutRef.current = setTimeout(() => {
177
171
  pressInHandler(gestureTouchToPressableEvent(event));
178
- }, props.unstable_pressDelay);
172
+ }, unstable_pressDelay);
179
173
  } else {
180
174
  pressInHandler(gestureTouchToPressableEvent(event));
181
175
  }
@@ -214,7 +208,7 @@ export default function Pressable(props) {
214
208
  }
215
209
 
216
210
  pressOutHandler(gestureTouchToPressableEvent(event));
217
- }), [activateLongPress, longPressMinDuration, normalizedHitSlop, pressInHandler, pressOutHandler, props.unstable_pressDelay]); // RNButton is placed inside ButtonGesture to enable Android's ripple and to capture non-propagating events
211
+ }), [activateLongPress, longPressMinDuration, normalizedHitSlop, pressInHandler, pressOutHandler, unstable_pressDelay]); // RNButton is placed inside ButtonGesture to enable Android's ripple and to capture non-propagating events
218
212
 
219
213
  const buttonGesture = useMemo(() => Gesture.Native().onBegin(() => {
220
214
  // Android sets BEGAN state on press down
@@ -258,7 +252,7 @@ export default function Pressable(props) {
258
252
  isTouchPropagationAllowed.current = true;
259
253
  }), [pressInHandler, pressOutHandler]);
260
254
  const appliedHitSlop = addInsets(normalizedHitSlop, normalizedPressRetentionOffset);
261
- const isPressableEnabled = props.disabled !== true;
255
+ const isPressableEnabled = disabled !== true;
262
256
  const gestures = [pressAndTouchGesture, hoverGesture, buttonGesture];
263
257
 
264
258
  for (const gesture of gestures) {
@@ -275,32 +269,34 @@ export default function Pressable(props) {
275
269
 
276
270
  buttonGesture.hitSlop(normalizedHitSlop);
277
271
  const gesture = Gesture.Simultaneous(...gestures);
278
- const defaultRippleColor = props.android_ripple ? undefined : 'transparent'; // `cursor: 'pointer'` on `RNButton` crashes iOS
272
+ const defaultRippleColor = android_ripple ? undefined : 'transparent'; // `cursor: 'pointer'` on `RNButton` crashes iOS
279
273
 
280
274
  const pointerStyle = Platform.OS === 'web' ? {
281
275
  cursor: 'pointer'
282
276
  } : {};
283
- const styleProp = typeof props.style === 'function' ? props.style({
277
+ const styleProp = typeof style === 'function' ? style({
284
278
  pressed: pressedState
285
- }) : props.style;
286
- const childrenProp = typeof props.children === 'function' ? props.children({
279
+ }) : style;
280
+ const childrenProp = typeof children === 'function' ? children({
287
281
  pressed: pressedState
288
- }) : props.children;
282
+ }) : children;
289
283
  const flattenedStyles = StyleSheet.flatten(styleProp !== null && styleProp !== void 0 ? styleProp : {});
290
284
  const [innerStyles, outerStyles] = splitStyles(flattenedStyles);
291
- return /*#__PURE__*/React.createElement(View, {
285
+ return /*#__PURE__*/React.createElement(View, _extends({}, remainingProps, {
292
286
  style: outerStyles
293
- }, /*#__PURE__*/React.createElement(GestureDetector, {
287
+ }), /*#__PURE__*/React.createElement(GestureDetector, {
294
288
  gesture: gesture
295
289
  }, /*#__PURE__*/React.createElement(NativeButton, {
296
290
  ref: pressableRef,
297
- testID: props.testID,
298
291
  hitSlop: appliedHitSlop,
299
292
  enabled: isPressableEnabled,
300
- touchSoundDisabled: (_props$android_disabl = props.android_disableSound) !== null && _props$android_disabl !== void 0 ? _props$android_disabl : undefined,
301
- rippleColor: processColor((_props$android_ripple = (_props$android_ripple2 = props.android_ripple) === null || _props$android_ripple2 === void 0 ? void 0 : _props$android_ripple2.color) !== null && _props$android_ripple !== void 0 ? _props$android_ripple : defaultRippleColor),
302
- rippleRadius: (_props$android_ripple3 = (_props$android_ripple4 = props.android_ripple) === null || _props$android_ripple4 === void 0 ? void 0 : _props$android_ripple4.radius) !== null && _props$android_ripple3 !== void 0 ? _props$android_ripple3 : undefined,
303
- style: [StyleSheet.absoluteFill, pointerStyle, innerStyles]
293
+ touchSoundDisabled: android_disableSound !== null && android_disableSound !== void 0 ? android_disableSound : undefined,
294
+ rippleColor: processColor((_android_ripple$color = android_ripple === null || android_ripple === void 0 ? void 0 : android_ripple.color) !== null && _android_ripple$color !== void 0 ? _android_ripple$color : defaultRippleColor),
295
+ rippleRadius: (_android_ripple$radiu = android_ripple === null || android_ripple === void 0 ? void 0 : android_ripple.radius) !== null && _android_ripple$radiu !== void 0 ? _android_ripple$radiu : undefined,
296
+ style: [{
297
+ width: '100%',
298
+ height: '100%'
299
+ }, pointerStyle, innerStyles]
304
300
  }, childrenProp, __DEV__ ? /*#__PURE__*/React.createElement(PressabilityDebugView, {
305
301
  color: "red",
306
302
  hitSlop: normalizedHitSlop
@@ -1 +1 @@
1
- {"version":3,"sources":["Pressable.tsx"],"names":["React","useCallback","useMemo","useRef","useState","GestureObjects","Gesture","GestureDetector","Platform","View","processColor","StyleSheet","NativeButton","numberAsInset","gestureToPressableEvent","isTouchWithinInset","gestureTouchToPressableEvent","addInsets","splitStyles","PressabilityDebugView","DEFAULT_LONG_PRESS_DURATION","Pressable","props","pressedState","setPressedState","testOnly_pressed","pressableRef","isPressCallbackEnabled","hasPassedBoundsChecks","shouldPreventNativeEffects","normalizedHitSlop","hitSlop","normalizedPressRetentionOffset","pressRetentionOffset","hoverInTimeout","hoverOutTimeout","hoverGesture","Hover","manualActivation","cancelsTouchesInView","onBegin","event","current","clearTimeout","delayHoverIn","setTimeout","onHoverIn","onFinalize","delayHoverOut","onHoverOut","pressDelayTimeoutRef","isTouchPropagationAllowed","deferredEventPayload","pressInHandler","handlingOnTouchesDown","onPressIn","pressOutHandler","nativeEvent","touches","length","changedTouches","unstable_pressDelay","onPressOut","onPress","longPressTimeoutRef","onEndHandlingTouchesDown","cancelledMidPress","activateLongPress","onLongPress","longPressMinDuration","delayLongPress","pressAndTouchGesture","LongPress","minDuration","Number","MAX_SAFE_INTEGER","maxDistance","onTouchesDown","measure","_x","_y","width","height","at","onTouchesUp","onTouchesCancelled","allTouches","buttonGesture","Native","OS","onStart","appliedHitSlop","isPressableEnabled","disabled","gestures","gesture","enabled","runOnJS","shouldCancelWhenOutside","Simultaneous","defaultRippleColor","android_ripple","undefined","pointerStyle","cursor","styleProp","style","pressed","childrenProp","children","flattenedStyles","flatten","innerStyles","outerStyles","testID","android_disableSound","color","radius","absoluteFill","__DEV__"],"mappings":"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","sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { GestureObjects as Gesture } from '../../handlers/gestures/gestureObjects';\nimport { GestureDetector } from '../../handlers/gestures/GestureDetector';\nimport { PressableEvent, PressableProps } from './PressableProps';\nimport {\n Insets,\n Platform,\n StyleProp,\n View,\n ViewStyle,\n processColor,\n StyleSheet,\n} from 'react-native';\nimport NativeButton from '../GestureHandlerButton';\nimport {\n numberAsInset,\n gestureToPressableEvent,\n isTouchWithinInset,\n gestureTouchToPressableEvent,\n addInsets,\n splitStyles,\n} from './utils';\nimport { PressabilityDebugView } from '../../handlers/PressabilityDebugView';\nimport { GestureTouchEvent } from '../../handlers/gestureHandlerCommon';\n\nconst DEFAULT_LONG_PRESS_DURATION = 500;\n\nexport default function Pressable(props: PressableProps) {\n const [pressedState, setPressedState] = useState(\n props.testOnly_pressed ?? false\n );\n\n const pressableRef = useRef<View>(null);\n\n // Disabled when onLongPress has been called\n const isPressCallbackEnabled = useRef<boolean>(true);\n const hasPassedBoundsChecks = useRef<boolean>(false);\n const shouldPreventNativeEffects = useRef<boolean>(false);\n\n const normalizedHitSlop: Insets = useMemo(\n () =>\n typeof props.hitSlop === 'number'\n ? numberAsInset(props.hitSlop)\n : props.hitSlop ?? {},\n [props.hitSlop]\n );\n\n const normalizedPressRetentionOffset: Insets = useMemo(\n () =>\n typeof props.pressRetentionOffset === 'number'\n ? numberAsInset(props.pressRetentionOffset)\n : props.pressRetentionOffset ?? {},\n [props.pressRetentionOffset]\n );\n\n const hoverInTimeout = useRef<number | null>(null);\n const hoverOutTimeout = useRef<number | null>(null);\n\n const hoverGesture = useMemo(\n () =>\n Gesture.Hover()\n .manualActivation(true) // Stops Hover from blocking Native gesture activation on web\n .cancelsTouchesInView(false)\n .onBegin((event) => {\n if (hoverOutTimeout.current) {\n clearTimeout(hoverOutTimeout.current);\n }\n if (props.delayHoverIn) {\n hoverInTimeout.current = setTimeout(\n () => props.onHoverIn?.(gestureToPressableEvent(event)),\n props.delayHoverIn\n );\n return;\n }\n props.onHoverIn?.(gestureToPressableEvent(event));\n })\n .onFinalize((event) => {\n if (hoverInTimeout.current) {\n clearTimeout(hoverInTimeout.current);\n }\n if (props.delayHoverOut) {\n hoverOutTimeout.current = setTimeout(\n () => props.onHoverOut?.(gestureToPressableEvent(event)),\n props.delayHoverOut\n );\n return;\n }\n props.onHoverOut?.(gestureToPressableEvent(event));\n }),\n [props]\n );\n\n const pressDelayTimeoutRef = useRef<number | null>(null);\n const isTouchPropagationAllowed = useRef<boolean>(false);\n\n // iOS only: due to varying flow of gestures, events sometimes have to be saved for later use\n const deferredEventPayload = useRef<PressableEvent | null>(null);\n\n const pressInHandler = useCallback(\n (event: PressableEvent) => {\n if (handlingOnTouchesDown.current) {\n deferredEventPayload.current = event;\n }\n\n if (!isTouchPropagationAllowed.current) {\n return;\n }\n\n deferredEventPayload.current = null;\n\n props.onPressIn?.(event);\n isPressCallbackEnabled.current = true;\n pressDelayTimeoutRef.current = null;\n setPressedState(true);\n },\n [props]\n );\n\n const pressOutHandler = useCallback(\n (event: PressableEvent) => {\n if (\n !hasPassedBoundsChecks.current ||\n event.nativeEvent.touches.length >\n event.nativeEvent.changedTouches.length\n ) {\n return;\n }\n\n if (props.unstable_pressDelay && pressDelayTimeoutRef.current !== null) {\n // When delay is preemptively finished by lifting touches,\n // we want to immediately activate it's effects - pressInHandler,\n // even though we are located at the pressOutHandler\n clearTimeout(pressDelayTimeoutRef.current);\n pressInHandler(event);\n }\n\n if (deferredEventPayload.current) {\n props.onPressIn?.(deferredEventPayload.current);\n deferredEventPayload.current = null;\n }\n\n props.onPressOut?.(event);\n\n if (isPressCallbackEnabled.current) {\n props.onPress?.(event);\n }\n\n if (longPressTimeoutRef.current) {\n clearTimeout(longPressTimeoutRef.current);\n longPressTimeoutRef.current = null;\n }\n\n isTouchPropagationAllowed.current = false;\n hasPassedBoundsChecks.current = false;\n isPressCallbackEnabled.current = true;\n setPressedState(false);\n },\n [pressInHandler, props]\n );\n\n const handlingOnTouchesDown = useRef<boolean>(false);\n const onEndHandlingTouchesDown = useRef<(() => void) | null>(null);\n const cancelledMidPress = useRef<boolean>(false);\n\n const activateLongPress = useCallback(\n (event: GestureTouchEvent) => {\n if (!isTouchPropagationAllowed.current) {\n return;\n }\n\n if (hasPassedBoundsChecks.current) {\n props.onLongPress?.(gestureTouchToPressableEvent(event));\n isPressCallbackEnabled.current = false;\n }\n\n if (longPressTimeoutRef.current) {\n clearTimeout(longPressTimeoutRef.current);\n longPressTimeoutRef.current = null;\n }\n },\n [props]\n );\n\n const longPressTimeoutRef = useRef<number | null>(null);\n const longPressMinDuration =\n (props.delayLongPress ?? DEFAULT_LONG_PRESS_DURATION) +\n (props.unstable_pressDelay ?? 0);\n\n const pressAndTouchGesture = useMemo(\n () =>\n Gesture.LongPress()\n .minDuration(Number.MAX_SAFE_INTEGER) // Stops long press from blocking native gesture\n .maxDistance(Number.MAX_SAFE_INTEGER) // Stops long press from cancelling after set distance\n .cancelsTouchesInView(false)\n .onTouchesDown((event) => {\n handlingOnTouchesDown.current = true;\n pressableRef.current?.measure((_x, _y, width, height) => {\n if (\n !isTouchWithinInset(\n {\n width,\n height,\n },\n normalizedHitSlop,\n event.changedTouches.at(-1)\n ) ||\n hasPassedBoundsChecks.current ||\n cancelledMidPress.current\n ) {\n cancelledMidPress.current = false;\n onEndHandlingTouchesDown.current = null;\n handlingOnTouchesDown.current = false;\n return;\n }\n\n hasPassedBoundsChecks.current = true;\n\n // In case of multiple touches, the first one starts long press gesture\n if (longPressTimeoutRef.current === null) {\n // Start long press gesture timer\n longPressTimeoutRef.current = setTimeout(\n () => activateLongPress(event),\n longPressMinDuration\n );\n }\n\n if (props.unstable_pressDelay) {\n pressDelayTimeoutRef.current = setTimeout(() => {\n pressInHandler(gestureTouchToPressableEvent(event));\n }, props.unstable_pressDelay);\n } else {\n pressInHandler(gestureTouchToPressableEvent(event));\n }\n\n onEndHandlingTouchesDown.current?.();\n onEndHandlingTouchesDown.current = null;\n handlingOnTouchesDown.current = false;\n });\n })\n .onTouchesUp((event) => {\n if (handlingOnTouchesDown.current) {\n onEndHandlingTouchesDown.current = () =>\n pressOutHandler(gestureTouchToPressableEvent(event));\n return;\n }\n // On iOS, short taps will make LongPress gesture call onTouchesUp before Native gesture calls onStart\n // This variable ensures that onStart isn't detected as the first gesture since Pressable is pressed.\n if (deferredEventPayload.current !== null) {\n shouldPreventNativeEffects.current = true;\n }\n pressOutHandler(gestureTouchToPressableEvent(event));\n })\n .onTouchesCancelled((event) => {\n isPressCallbackEnabled.current = false;\n\n if (handlingOnTouchesDown.current) {\n cancelledMidPress.current = true;\n onEndHandlingTouchesDown.current = () =>\n pressOutHandler(gestureTouchToPressableEvent(event));\n return;\n }\n\n if (\n !hasPassedBoundsChecks.current ||\n event.allTouches.length > event.changedTouches.length\n ) {\n return;\n }\n\n pressOutHandler(gestureTouchToPressableEvent(event));\n }),\n [\n activateLongPress,\n longPressMinDuration,\n normalizedHitSlop,\n pressInHandler,\n pressOutHandler,\n props.unstable_pressDelay,\n ]\n );\n\n // RNButton is placed inside ButtonGesture to enable Android's ripple and to capture non-propagating events\n const buttonGesture = useMemo(\n () =>\n Gesture.Native()\n .onBegin(() => {\n // Android sets BEGAN state on press down\n if (Platform.OS === 'android') {\n isTouchPropagationAllowed.current = true;\n }\n })\n .onStart(() => {\n if (Platform.OS === 'web') {\n isTouchPropagationAllowed.current = true;\n }\n\n // iOS sets ACTIVE state on press down\n if (Platform.OS !== 'ios') {\n return;\n }\n\n if (deferredEventPayload.current) {\n isTouchPropagationAllowed.current = true;\n\n if (hasPassedBoundsChecks.current) {\n pressInHandler(deferredEventPayload.current);\n deferredEventPayload.current = null;\n } else {\n pressOutHandler(deferredEventPayload.current);\n isTouchPropagationAllowed.current = false;\n }\n\n return;\n }\n\n if (hasPassedBoundsChecks.current) {\n isTouchPropagationAllowed.current = true;\n return;\n }\n\n if (shouldPreventNativeEffects.current) {\n shouldPreventNativeEffects.current = false;\n return;\n }\n\n isTouchPropagationAllowed.current = true;\n }),\n [pressInHandler, pressOutHandler]\n );\n\n const appliedHitSlop = addInsets(\n normalizedHitSlop,\n normalizedPressRetentionOffset\n );\n\n const isPressableEnabled = props.disabled !== true;\n\n const gestures = [pressAndTouchGesture, hoverGesture, buttonGesture];\n\n for (const gesture of gestures) {\n gesture.enabled(isPressableEnabled);\n gesture.runOnJS(true);\n gesture.hitSlop(appliedHitSlop);\n gesture.shouldCancelWhenOutside(false);\n\n if (Platform.OS !== 'web') {\n gesture.shouldCancelWhenOutside(true);\n }\n }\n\n // Uses different hitSlop, to activate on hitSlop area instead of pressRetentionOffset area\n buttonGesture.hitSlop(normalizedHitSlop);\n\n const gesture = Gesture.Simultaneous(...gestures);\n\n const defaultRippleColor = props.android_ripple ? undefined : 'transparent';\n\n // `cursor: 'pointer'` on `RNButton` crashes iOS\n const pointerStyle: StyleProp<ViewStyle> =\n Platform.OS === 'web' ? { cursor: 'pointer' } : {};\n\n const styleProp =\n typeof props.style === 'function'\n ? props.style({ pressed: pressedState })\n : props.style;\n\n const childrenProp =\n typeof props.children === 'function'\n ? props.children({ pressed: pressedState })\n : props.children;\n\n const flattenedStyles = StyleSheet.flatten(styleProp ?? {});\n\n const [innerStyles, outerStyles] = splitStyles(flattenedStyles);\n\n return (\n <View style={outerStyles}>\n <GestureDetector gesture={gesture}>\n <NativeButton\n ref={pressableRef}\n testID={props.testID}\n hitSlop={appliedHitSlop}\n enabled={isPressableEnabled}\n touchSoundDisabled={props.android_disableSound ?? undefined}\n rippleColor={processColor(\n props.android_ripple?.color ?? defaultRippleColor\n )}\n rippleRadius={props.android_ripple?.radius ?? undefined}\n style={[StyleSheet.absoluteFill, pointerStyle, innerStyles]}>\n {childrenProp}\n {__DEV__ ? (\n <PressabilityDebugView color=\"red\" hitSlop={normalizedHitSlop} />\n ) : null}\n </NativeButton>\n </GestureDetector>\n </View>\n );\n}\n"]}
1
+ {"version":3,"sources":["Pressable.tsx"],"names":["React","useCallback","useMemo","useRef","useState","GestureObjects","Gesture","GestureDetector","Platform","View","processColor","StyleSheet","NativeButton","numberAsInset","gestureToPressableEvent","isTouchWithinInset","gestureTouchToPressableEvent","addInsets","splitStyles","PressabilityDebugView","INT32_MAX","DEFAULT_LONG_PRESS_DURATION","Pressable","props","testOnly_pressed","hitSlop","pressRetentionOffset","delayHoverIn","onHoverIn","delayHoverOut","onHoverOut","delayLongPress","unstable_pressDelay","onPress","onPressIn","onPressOut","onLongPress","style","children","android_disableSound","android_ripple","disabled","remainingProps","pressedState","setPressedState","pressableRef","isPressCallbackEnabled","hasPassedBoundsChecks","shouldPreventNativeEffects","normalizedHitSlop","normalizedPressRetentionOffset","hoverInTimeout","hoverOutTimeout","hoverGesture","Hover","manualActivation","cancelsTouchesInView","onBegin","event","current","clearTimeout","setTimeout","onFinalize","pressDelayTimeoutRef","isTouchPropagationAllowed","deferredEventPayload","pressInHandler","handlingOnTouchesDown","pressOutHandler","nativeEvent","touches","length","changedTouches","longPressTimeoutRef","onEndHandlingTouchesDown","cancelledMidPress","activateLongPress","longPressMinDuration","pressAndTouchGesture","LongPress","minDuration","maxDistance","onTouchesDown","measure","_x","_y","width","height","at","onTouchesUp","onTouchesCancelled","allTouches","buttonGesture","Native","OS","onStart","appliedHitSlop","isPressableEnabled","gestures","gesture","enabled","runOnJS","shouldCancelWhenOutside","Simultaneous","defaultRippleColor","undefined","pointerStyle","cursor","styleProp","pressed","childrenProp","flattenedStyles","flatten","innerStyles","outerStyles","color","radius","__DEV__"],"mappings":"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","sourcesContent":["import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport { GestureObjects as Gesture } from '../../handlers/gestures/gestureObjects';\nimport { GestureDetector } from '../../handlers/gestures/GestureDetector';\nimport { PressableEvent, PressableProps } from './PressableProps';\nimport {\n Insets,\n Platform,\n StyleProp,\n View,\n ViewStyle,\n processColor,\n StyleSheet,\n} from 'react-native';\nimport NativeButton from '../GestureHandlerButton';\nimport {\n numberAsInset,\n gestureToPressableEvent,\n isTouchWithinInset,\n gestureTouchToPressableEvent,\n addInsets,\n splitStyles,\n} from './utils';\nimport { PressabilityDebugView } from '../../handlers/PressabilityDebugView';\nimport { GestureTouchEvent } from '../../handlers/gestureHandlerCommon';\nimport { INT32_MAX } from '../../utils';\n\nconst DEFAULT_LONG_PRESS_DURATION = 500;\n\nexport default function Pressable(props: PressableProps) {\n const {\n testOnly_pressed,\n hitSlop,\n pressRetentionOffset,\n delayHoverIn,\n onHoverIn,\n delayHoverOut,\n onHoverOut,\n delayLongPress,\n unstable_pressDelay,\n onPress,\n onPressIn,\n onPressOut,\n onLongPress,\n style,\n children,\n android_disableSound,\n android_ripple,\n disabled,\n ...remainingProps\n } = props;\n\n const [pressedState, setPressedState] = useState(testOnly_pressed ?? false);\n\n const pressableRef = useRef<View>(null);\n\n // Disabled when onLongPress has been called\n const isPressCallbackEnabled = useRef<boolean>(true);\n const hasPassedBoundsChecks = useRef<boolean>(false);\n const shouldPreventNativeEffects = useRef<boolean>(false);\n\n const normalizedHitSlop: Insets = useMemo(\n () =>\n typeof hitSlop === 'number' ? numberAsInset(hitSlop) : hitSlop ?? {},\n [hitSlop]\n );\n\n const normalizedPressRetentionOffset: Insets = useMemo(\n () =>\n typeof pressRetentionOffset === 'number'\n ? numberAsInset(pressRetentionOffset)\n : pressRetentionOffset ?? {},\n [pressRetentionOffset]\n );\n\n const hoverInTimeout = useRef<number | null>(null);\n const hoverOutTimeout = useRef<number | null>(null);\n\n const hoverGesture = useMemo(\n () =>\n Gesture.Hover()\n .manualActivation(true) // Stops Hover from blocking Native gesture activation on web\n .cancelsTouchesInView(false)\n .onBegin((event) => {\n if (hoverOutTimeout.current) {\n clearTimeout(hoverOutTimeout.current);\n }\n if (delayHoverIn) {\n hoverInTimeout.current = setTimeout(\n () => onHoverIn?.(gestureToPressableEvent(event)),\n delayHoverIn\n );\n return;\n }\n onHoverIn?.(gestureToPressableEvent(event));\n })\n .onFinalize((event) => {\n if (hoverInTimeout.current) {\n clearTimeout(hoverInTimeout.current);\n }\n if (delayHoverOut) {\n hoverOutTimeout.current = setTimeout(\n () => onHoverOut?.(gestureToPressableEvent(event)),\n delayHoverOut\n );\n return;\n }\n onHoverOut?.(gestureToPressableEvent(event));\n }),\n [delayHoverIn, delayHoverOut, onHoverIn, onHoverOut]\n );\n\n const pressDelayTimeoutRef = useRef<number | null>(null);\n const isTouchPropagationAllowed = useRef<boolean>(false);\n\n // iOS only: due to varying flow of gestures, events sometimes have to be saved for later use\n const deferredEventPayload = useRef<PressableEvent | null>(null);\n\n const pressInHandler = useCallback(\n (event: PressableEvent) => {\n if (handlingOnTouchesDown.current) {\n deferredEventPayload.current = event;\n }\n\n if (!isTouchPropagationAllowed.current) {\n return;\n }\n\n deferredEventPayload.current = null;\n\n onPressIn?.(event);\n isPressCallbackEnabled.current = true;\n pressDelayTimeoutRef.current = null;\n setPressedState(true);\n },\n [onPressIn]\n );\n\n const pressOutHandler = useCallback(\n (event: PressableEvent) => {\n if (\n !hasPassedBoundsChecks.current ||\n event.nativeEvent.touches.length >\n event.nativeEvent.changedTouches.length\n ) {\n return;\n }\n\n if (unstable_pressDelay && pressDelayTimeoutRef.current !== null) {\n // When delay is preemptively finished by lifting touches,\n // we want to immediately activate it's effects - pressInHandler,\n // even though we are located at the pressOutHandler\n clearTimeout(pressDelayTimeoutRef.current);\n pressInHandler(event);\n }\n\n if (deferredEventPayload.current) {\n onPressIn?.(deferredEventPayload.current);\n deferredEventPayload.current = null;\n }\n\n onPressOut?.(event);\n\n if (isPressCallbackEnabled.current) {\n onPress?.(event);\n }\n\n if (longPressTimeoutRef.current) {\n clearTimeout(longPressTimeoutRef.current);\n longPressTimeoutRef.current = null;\n }\n\n isTouchPropagationAllowed.current = false;\n hasPassedBoundsChecks.current = false;\n isPressCallbackEnabled.current = true;\n setPressedState(false);\n },\n [onPress, onPressIn, onPressOut, pressInHandler, unstable_pressDelay]\n );\n\n const handlingOnTouchesDown = useRef<boolean>(false);\n const onEndHandlingTouchesDown = useRef<(() => void) | null>(null);\n const cancelledMidPress = useRef<boolean>(false);\n\n const activateLongPress = useCallback(\n (event: GestureTouchEvent) => {\n if (!isTouchPropagationAllowed.current) {\n return;\n }\n\n if (hasPassedBoundsChecks.current) {\n onLongPress?.(gestureTouchToPressableEvent(event));\n isPressCallbackEnabled.current = false;\n }\n\n if (longPressTimeoutRef.current) {\n clearTimeout(longPressTimeoutRef.current);\n longPressTimeoutRef.current = null;\n }\n },\n [onLongPress]\n );\n\n const longPressTimeoutRef = useRef<number | null>(null);\n const longPressMinDuration =\n (delayLongPress ?? DEFAULT_LONG_PRESS_DURATION) +\n (unstable_pressDelay ?? 0);\n\n const pressAndTouchGesture = useMemo(\n () =>\n Gesture.LongPress()\n .minDuration(INT32_MAX) // Stops long press from blocking native gesture\n .maxDistance(INT32_MAX) // Stops long press from cancelling after set distance\n .cancelsTouchesInView(false)\n .onTouchesDown((event) => {\n handlingOnTouchesDown.current = true;\n pressableRef.current?.measure((_x, _y, width, height) => {\n if (\n !isTouchWithinInset(\n {\n width,\n height,\n },\n normalizedHitSlop,\n event.changedTouches.at(-1)\n ) ||\n hasPassedBoundsChecks.current ||\n cancelledMidPress.current\n ) {\n cancelledMidPress.current = false;\n onEndHandlingTouchesDown.current = null;\n handlingOnTouchesDown.current = false;\n return;\n }\n\n hasPassedBoundsChecks.current = true;\n\n // In case of multiple touches, the first one starts long press gesture\n if (longPressTimeoutRef.current === null) {\n // Start long press gesture timer\n longPressTimeoutRef.current = setTimeout(\n () => activateLongPress(event),\n longPressMinDuration\n );\n }\n\n if (unstable_pressDelay) {\n pressDelayTimeoutRef.current = setTimeout(() => {\n pressInHandler(gestureTouchToPressableEvent(event));\n }, unstable_pressDelay);\n } else {\n pressInHandler(gestureTouchToPressableEvent(event));\n }\n\n onEndHandlingTouchesDown.current?.();\n onEndHandlingTouchesDown.current = null;\n handlingOnTouchesDown.current = false;\n });\n })\n .onTouchesUp((event) => {\n if (handlingOnTouchesDown.current) {\n onEndHandlingTouchesDown.current = () =>\n pressOutHandler(gestureTouchToPressableEvent(event));\n return;\n }\n // On iOS, short taps will make LongPress gesture call onTouchesUp before Native gesture calls onStart\n // This variable ensures that onStart isn't detected as the first gesture since Pressable is pressed.\n if (deferredEventPayload.current !== null) {\n shouldPreventNativeEffects.current = true;\n }\n pressOutHandler(gestureTouchToPressableEvent(event));\n })\n .onTouchesCancelled((event) => {\n isPressCallbackEnabled.current = false;\n\n if (handlingOnTouchesDown.current) {\n cancelledMidPress.current = true;\n onEndHandlingTouchesDown.current = () =>\n pressOutHandler(gestureTouchToPressableEvent(event));\n return;\n }\n\n if (\n !hasPassedBoundsChecks.current ||\n event.allTouches.length > event.changedTouches.length\n ) {\n return;\n }\n\n pressOutHandler(gestureTouchToPressableEvent(event));\n }),\n [\n activateLongPress,\n longPressMinDuration,\n normalizedHitSlop,\n pressInHandler,\n pressOutHandler,\n unstable_pressDelay,\n ]\n );\n\n // RNButton is placed inside ButtonGesture to enable Android's ripple and to capture non-propagating events\n const buttonGesture = useMemo(\n () =>\n Gesture.Native()\n .onBegin(() => {\n // Android sets BEGAN state on press down\n if (Platform.OS === 'android') {\n isTouchPropagationAllowed.current = true;\n }\n })\n .onStart(() => {\n if (Platform.OS === 'web') {\n isTouchPropagationAllowed.current = true;\n }\n\n // iOS sets ACTIVE state on press down\n if (Platform.OS !== 'ios') {\n return;\n }\n\n if (deferredEventPayload.current) {\n isTouchPropagationAllowed.current = true;\n\n if (hasPassedBoundsChecks.current) {\n pressInHandler(deferredEventPayload.current);\n deferredEventPayload.current = null;\n } else {\n pressOutHandler(deferredEventPayload.current);\n isTouchPropagationAllowed.current = false;\n }\n\n return;\n }\n\n if (hasPassedBoundsChecks.current) {\n isTouchPropagationAllowed.current = true;\n return;\n }\n\n if (shouldPreventNativeEffects.current) {\n shouldPreventNativeEffects.current = false;\n return;\n }\n\n isTouchPropagationAllowed.current = true;\n }),\n [pressInHandler, pressOutHandler]\n );\n\n const appliedHitSlop = addInsets(\n normalizedHitSlop,\n normalizedPressRetentionOffset\n );\n\n const isPressableEnabled = disabled !== true;\n\n const gestures = [pressAndTouchGesture, hoverGesture, buttonGesture];\n\n for (const gesture of gestures) {\n gesture.enabled(isPressableEnabled);\n gesture.runOnJS(true);\n gesture.hitSlop(appliedHitSlop);\n gesture.shouldCancelWhenOutside(false);\n\n if (Platform.OS !== 'web') {\n gesture.shouldCancelWhenOutside(true);\n }\n }\n\n // Uses different hitSlop, to activate on hitSlop area instead of pressRetentionOffset area\n buttonGesture.hitSlop(normalizedHitSlop);\n\n const gesture = Gesture.Simultaneous(...gestures);\n\n const defaultRippleColor = android_ripple ? undefined : 'transparent';\n\n // `cursor: 'pointer'` on `RNButton` crashes iOS\n const pointerStyle: StyleProp<ViewStyle> =\n Platform.OS === 'web' ? { cursor: 'pointer' } : {};\n\n const styleProp =\n typeof style === 'function' ? style({ pressed: pressedState }) : style;\n\n const childrenProp =\n typeof children === 'function'\n ? children({ pressed: pressedState })\n : children;\n\n const flattenedStyles = StyleSheet.flatten(styleProp ?? {});\n\n const [innerStyles, outerStyles] = splitStyles(flattenedStyles);\n\n return (\n <View {...remainingProps} style={outerStyles}>\n <GestureDetector gesture={gesture}>\n <NativeButton\n ref={pressableRef}\n hitSlop={appliedHitSlop}\n enabled={isPressableEnabled}\n touchSoundDisabled={android_disableSound ?? undefined}\n rippleColor={processColor(\n android_ripple?.color ?? defaultRippleColor\n )}\n rippleRadius={android_ripple?.radius ?? undefined}\n style={[\n { width: '100%', height: '100%' },\n pointerStyle,\n innerStyles,\n ]}>\n {childrenProp}\n {__DEV__ ? (\n <PressabilityDebugView color=\"red\" hitSlop={normalizedHitSlop} />\n ) : null}\n </NativeButton>\n </GestureDetector>\n </View>\n );\n}\n"]}
@@ -1,3 +1,2 @@
1
- export { PressableProps } from './PressableProps';
2
1
  export { default } from './Pressable';
3
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["PressableProps","default"],"mappings":"AAAA,SAASA,cAAT,QAA+B,kBAA/B;AACA,SAASC,OAAT,QAAwB,aAAxB","sourcesContent":["export { PressableProps } from './PressableProps';\nexport { default } from './Pressable';\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":["default"],"mappings":"AACA,SAASA,OAAT,QAAwB,aAAxB","sourcesContent":["export type { PressableProps } from './PressableProps';\nexport { default } from './Pressable';\n"]}
@@ -1,3 +1,5 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
1
3
  // Similarily to the DrawerLayout component this deserves to be put in a
2
4
  // separate repo. Although, keeping it here for the time being will allow us to
3
5
  // move faster and fix possible issues quicker
@@ -8,6 +10,25 @@ import Animated, { Extrapolation, interpolate, runOnJS, useAnimatedStyle, useSha
8
10
  import { I18nManager, StyleSheet, View } from 'react-native';
9
11
  const DRAG_TOSS = 0.05;
10
12
  const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
13
+ const {
14
+ leftThreshold,
15
+ rightThreshold,
16
+ onSwipeableOpenStartDrag,
17
+ onSwipeableCloseStartDrag,
18
+ enableTrackpadTwoFingerGesture,
19
+ enabled,
20
+ containerStyle,
21
+ childrenContainerStyle,
22
+ animationOptions,
23
+ overshootLeft,
24
+ overshootRight,
25
+ onSwipeableWillOpen,
26
+ onSwipeableWillClose,
27
+ onSwipeableOpen,
28
+ onSwipeableClose,
29
+ testID,
30
+ ...remainingProps
31
+ } = props;
11
32
  const rowState = useSharedValue(0);
12
33
  const userDrag = useSharedValue(0);
13
34
  const appliedTranslation = useSharedValue(0);
@@ -41,8 +62,8 @@ const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
41
62
  friction = defaultProps.friction,
42
63
  overshootFriction = defaultProps.overshootFriction
43
64
  } = props;
44
- const overshootLeftProp = props.overshootLeft;
45
- const overshootRightProp = props.overshootRight;
65
+ const overshootLeftProp = overshootLeft;
66
+ const overshootRightProp = overshootRight;
46
67
  const calculateCurrentOffset = useCallback(() => {
47
68
  'worklet';
48
69
 
@@ -71,31 +92,31 @@ const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
71
92
  };
72
93
 
73
94
  const dispatchImmediateEvents = useCallback((fromValue, toValue) => {
74
- if (toValue > 0 && props.onSwipeableWillOpen) {
75
- props.onSwipeableWillOpen('left');
76
- } else if (toValue < 0 && props.onSwipeableWillOpen) {
77
- props.onSwipeableWillOpen('right');
78
- } else if (props.onSwipeableWillClose) {
95
+ if (toValue > 0 && onSwipeableWillOpen) {
96
+ onSwipeableWillOpen('left');
97
+ } else if (toValue < 0 && onSwipeableWillOpen) {
98
+ onSwipeableWillOpen('right');
99
+ } else if (onSwipeableWillClose) {
79
100
  const closingDirection = fromValue > 0 ? 'left' : 'right';
80
- props.onSwipeableWillClose(closingDirection);
101
+ onSwipeableWillClose(closingDirection);
81
102
  }
82
- }, [props, props.onSwipeableWillClose, props.onSwipeableWillOpen, swipeableMethods]);
103
+ }, [onSwipeableWillClose, onSwipeableWillOpen]);
83
104
  const dispatchEndEvents = useCallback((fromValue, toValue) => {
84
- if (toValue > 0 && props.onSwipeableOpen) {
85
- props.onSwipeableOpen('left', swipeableMethods.current);
86
- } else if (toValue < 0 && props.onSwipeableOpen) {
87
- props.onSwipeableOpen('right', swipeableMethods.current);
88
- } else if (props.onSwipeableClose) {
105
+ if (toValue > 0 && onSwipeableOpen) {
106
+ onSwipeableOpen('left', swipeableMethods.current);
107
+ } else if (toValue < 0 && onSwipeableOpen) {
108
+ onSwipeableOpen('right', swipeableMethods.current);
109
+ } else if (onSwipeableClose) {
89
110
  const closingDirection = fromValue > 0 ? 'left' : 'right';
90
- props.onSwipeableClose(closingDirection, swipeableMethods.current);
111
+ onSwipeableClose(closingDirection, swipeableMethods.current);
91
112
  }
92
- }, [props, props.onSwipeableClose, props.onSwipeableOpen, swipeableMethods]);
93
- const animationOptionsProp = props.animationOptions;
113
+ }, [onSwipeableClose, onSwipeableOpen]);
114
+ const animationOptionsProp = animationOptions;
94
115
  const animateRow = useCallback((fromValue, toValue, velocityX) => {
95
116
  'worklet';
96
117
 
97
118
  rowState.value = Math.sign(toValue);
98
- const springConfig = {
119
+ const translationSpringConfig = {
99
120
  duration: 1000,
100
121
  dampingRatio: 0.9,
101
122
  stiffness: 500,
@@ -103,18 +124,19 @@ const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
103
124
  overshootClamping: true,
104
125
  ...animationOptionsProp
105
126
  };
106
- appliedTranslation.value = withSpring(toValue, springConfig, isFinished => {
127
+ const progressSpringConfig = { ...translationSpringConfig,
128
+ velocity: 0
129
+ };
130
+ appliedTranslation.value = withSpring(toValue, translationSpringConfig, isFinished => {
107
131
  if (isFinished) {
108
132
  runOnJS(dispatchEndEvents)(fromValue, toValue);
109
133
  }
110
134
  });
111
- const progressTarget = toValue === 0 ? 0 : 1; // Velocity is in px, while progress is in %
112
-
113
- springConfig.velocity = 0;
114
- showLeftProgress.value = leftWidth.value > 0 ? withSpring(progressTarget, springConfig) : 0;
115
- showRightProgress.value = rightWidth.value > 0 ? withSpring(progressTarget, springConfig) : 0;
135
+ const progressTarget = toValue === 0 ? 0 : 1;
136
+ showLeftProgress.value = leftWidth.value > 0 ? withSpring(progressTarget, progressSpringConfig) : 0;
137
+ showRightProgress.value = rightWidth.value > 0 ? withSpring(progressTarget, progressSpringConfig) : 0;
116
138
  runOnJS(dispatchImmediateEvents)(fromValue, toValue);
117
- }, [showLeftProgress, appliedTranslation, dispatchEndEvents, dispatchImmediateEvents, animationOptionsProp, rowState]);
139
+ }, [rowState, animationOptionsProp, appliedTranslation, showLeftProgress, leftWidth.value, showRightProgress, rightWidth.value, dispatchImmediateEvents, dispatchEndEvents]);
118
140
 
119
141
  const onRowLayout = ({
120
142
  nativeEvent
@@ -183,8 +205,8 @@ const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
183
205
  nativeEvent
184
206
  }) => rightOffset.value = nativeEvent.layout.x
185
207
  }));
186
- const leftThresholdProp = props.leftThreshold;
187
- const rightThresholdProp = props.rightThreshold;
208
+ const leftThresholdProp = leftThreshold;
209
+ const rightThresholdProp = rightThreshold;
188
210
 
189
211
  const handleRelease = event => {
190
212
  'worklet';
@@ -232,8 +254,6 @@ const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
232
254
  close();
233
255
  }
234
256
  });
235
- const onSwipeableOpenStartDrag = props.onSwipeableOpenStartDrag;
236
- const onSwipeableCloseStartDrag = props.onSwipeableCloseStartDrag;
237
257
  const panGesture = Gesture.Pan().onUpdate(event => {
238
258
  userDrag.value = event.translationX;
239
259
  const direction = rowState.value === -1 ? 'right' : rowState.value === 1 ? 'left' : event.translationX > 0 ? 'left' : 'right';
@@ -249,34 +269,35 @@ const Swipeable = /*#__PURE__*/forwardRef(function Swipeable(props, ref) {
249
269
  handleRelease(event);
250
270
  });
251
271
 
252
- if (props.enableTrackpadTwoFingerGesture) {
253
- panGesture.enableTrackpadTwoFingerGesture(props.enableTrackpadTwoFingerGesture);
272
+ if (enableTrackpadTwoFingerGesture) {
273
+ panGesture.enableTrackpadTwoFingerGesture(enableTrackpadTwoFingerGesture);
254
274
  }
255
275
 
256
276
  panGesture.activeOffsetX([-dragOffsetFromRightEdge, dragOffsetFromLeftEdge]);
257
277
  tapGesture.shouldCancelWhenOutside(true);
258
278
  useImperativeHandle(ref, () => swipeableMethods.current, [swipeableMethods]);
259
- panGesture.enabled(props.enabled !== false);
279
+ panGesture.enabled(enabled !== false);
260
280
  const animatedStyle = useAnimatedStyle(() => ({
261
281
  transform: [{
262
282
  translateX: appliedTranslation.value
263
283
  }],
264
284
  pointerEvents: rowState.value === 0 ? 'auto' : 'box-only'
265
285
  }), [appliedTranslation, rowState]);
266
- const containerStyle = props.containerStyle;
267
- const childrenContainerStyle = props.childrenContainerStyle;
268
- return /*#__PURE__*/React.createElement(GestureDetector, {
286
+ const swipeableComponent = /*#__PURE__*/React.createElement(GestureDetector, {
269
287
  gesture: panGesture,
270
288
  touchAction: "pan-y"
271
- }, /*#__PURE__*/React.createElement(Animated.View, {
289
+ }, /*#__PURE__*/React.createElement(Animated.View, _extends({}, remainingProps, {
272
290
  onLayout: onRowLayout,
273
291
  style: [styles.container, containerStyle]
274
- }, leftElement, rightElement, /*#__PURE__*/React.createElement(GestureDetector, {
292
+ }), leftElement, rightElement, /*#__PURE__*/React.createElement(GestureDetector, {
275
293
  gesture: tapGesture,
276
294
  touchAction: "pan-y"
277
295
  }, /*#__PURE__*/React.createElement(Animated.View, {
278
296
  style: [animatedStyle, childrenContainerStyle]
279
297
  }, children))));
298
+ return testID ? /*#__PURE__*/React.createElement(View, {
299
+ testID: testID
300
+ }, swipeableComponent) : swipeableComponent;
280
301
  });
281
302
  export default Swipeable;
282
303
  const styles = StyleSheet.create({