react-native-gesture-handler 2.20.2 → 2.21.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/RNGestureHandler.podspec +9 -0
  2. package/ReanimatedDrawerLayout/package.json +6 -0
  3. package/android/build.gradle +19 -0
  4. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +6 -2
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/RotationGestureDetector.kt +53 -21
  6. package/apple/RNGestureHandlerPointerTracker.m +4 -2
  7. package/lib/commonjs/RNGestureHandlerModule.web.js +15 -2
  8. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  9. package/lib/commonjs/components/Pressable/Pressable.js +2 -6
  10. package/lib/commonjs/components/Pressable/Pressable.js.map +1 -1
  11. package/lib/commonjs/components/ReanimatedDrawerLayout.js +389 -0
  12. package/lib/commonjs/components/ReanimatedDrawerLayout.js.map +1 -0
  13. package/lib/commonjs/components/ReanimatedSwipeable.js +117 -148
  14. package/lib/commonjs/components/ReanimatedSwipeable.js.map +1 -1
  15. package/lib/commonjs/findNodeHandle.js +12 -0
  16. package/lib/commonjs/findNodeHandle.js.map +1 -0
  17. package/lib/commonjs/findNodeHandle.web.js +40 -0
  18. package/lib/commonjs/findNodeHandle.web.js.map +1 -0
  19. package/lib/commonjs/handlers/createHandler.js +4 -2
  20. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  21. package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.web.js +51 -0
  22. package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.web.js.map +1 -0
  23. package/lib/commonjs/handlers/gestures/GestureDetector/index.js +3 -1
  24. package/lib/commonjs/handlers/gestures/GestureDetector/index.js.map +1 -1
  25. package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js +5 -3
  26. package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
  27. package/lib/commonjs/handlers/gestures/GestureDetector/useViewRefHandler.js +4 -2
  28. package/lib/commonjs/handlers/gestures/GestureDetector/useViewRefHandler.js.map +1 -1
  29. package/lib/commonjs/web/handlers/GestureHandler.js +4 -0
  30. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  31. package/lib/commonjs/web/handlers/PanGestureHandler.js +59 -0
  32. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  33. package/lib/commonjs/web/interfaces.js +10 -1
  34. package/lib/commonjs/web/interfaces.js.map +1 -1
  35. package/lib/commonjs/web/tools/EventManager.js +6 -0
  36. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  37. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +1 -3
  38. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  39. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +5 -2
  40. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  41. package/lib/commonjs/web/tools/KeyboardEventManager.js +2 -2
  42. package/lib/commonjs/web/tools/KeyboardEventManager.js.map +1 -1
  43. package/lib/commonjs/web/tools/PointerTracker.js +6 -30
  44. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
  45. package/lib/commonjs/web/tools/WheelEventManager.js +74 -0
  46. package/lib/commonjs/web/tools/WheelEventManager.js.map +1 -0
  47. package/lib/commonjs/web/utils.js +16 -0
  48. package/lib/commonjs/web/utils.js.map +1 -1
  49. package/lib/module/RNGestureHandlerModule.web.js +16 -3
  50. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  51. package/lib/module/components/Pressable/Pressable.js +2 -6
  52. package/lib/module/components/Pressable/Pressable.js.map +1 -1
  53. package/lib/module/components/ReanimatedDrawerLayout.js +365 -0
  54. package/lib/module/components/ReanimatedDrawerLayout.js.map +1 -0
  55. package/lib/module/components/ReanimatedSwipeable.js +119 -145
  56. package/lib/module/components/ReanimatedSwipeable.js.map +1 -1
  57. package/lib/module/findNodeHandle.js +3 -0
  58. package/lib/module/findNodeHandle.js.map +1 -0
  59. package/lib/module/findNodeHandle.web.js +32 -0
  60. package/lib/module/findNodeHandle.web.js.map +1 -0
  61. package/lib/module/handlers/createHandler.js +2 -1
  62. package/lib/module/handlers/createHandler.js.map +1 -1
  63. package/lib/module/handlers/gestures/GestureDetector/Wrap.web.js +34 -0
  64. package/lib/module/handlers/gestures/GestureDetector/Wrap.web.js.map +1 -0
  65. package/lib/module/handlers/gestures/GestureDetector/index.js +2 -1
  66. package/lib/module/handlers/gestures/GestureDetector/index.js.map +1 -1
  67. package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js +2 -2
  68. package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
  69. package/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js +1 -1
  70. package/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js.map +1 -1
  71. package/lib/module/web/handlers/GestureHandler.js +4 -0
  72. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  73. package/lib/module/web/handlers/PanGestureHandler.js +58 -0
  74. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  75. package/lib/module/web/interfaces.js +8 -0
  76. package/lib/module/web/interfaces.js.map +1 -1
  77. package/lib/module/web/tools/EventManager.js +6 -0
  78. package/lib/module/web/tools/EventManager.js.map +1 -1
  79. package/lib/module/web/tools/GestureHandlerOrchestrator.js +1 -3
  80. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  81. package/lib/module/web/tools/GestureHandlerWebDelegate.js +3 -1
  82. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  83. package/lib/module/web/tools/KeyboardEventManager.js +2 -2
  84. package/lib/module/web/tools/KeyboardEventManager.js.map +1 -1
  85. package/lib/module/web/tools/PointerTracker.js +6 -30
  86. package/lib/module/web/tools/PointerTracker.js.map +1 -1
  87. package/lib/module/web/tools/WheelEventManager.js +60 -0
  88. package/lib/module/web/tools/WheelEventManager.js.map +1 -0
  89. package/lib/module/web/utils.js +15 -0
  90. package/lib/module/web/utils.js.map +1 -1
  91. package/lib/typescript/components/ReanimatedDrawerLayout.d.ts +162 -0
  92. package/lib/typescript/components/ReanimatedSwipeable.d.ts +22 -16
  93. package/lib/typescript/findNodeHandle.d.ts +2 -0
  94. package/lib/typescript/findNodeHandle.web.d.ts +2 -0
  95. package/lib/typescript/handlers/gestures/GestureDetector/Wrap.web.d.ts +7 -0
  96. package/lib/typescript/web/handlers/GestureHandler.d.ts +2 -1
  97. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +5 -0
  98. package/lib/typescript/web/interfaces.d.ts +16 -0
  99. package/lib/typescript/web/tools/EventManager.d.ts +2 -0
  100. package/lib/typescript/web/tools/PointerTracker.d.ts +2 -8
  101. package/lib/typescript/web/tools/WheelEventManager.d.ts +11 -0
  102. package/lib/typescript/web/utils.d.ts +2 -1
  103. package/package.json +3 -2
  104. package/src/RNGestureHandlerModule.web.ts +23 -4
  105. package/src/components/Pressable/Pressable.tsx +2 -6
  106. package/src/components/ReanimatedDrawerLayout.tsx +741 -0
  107. package/src/components/ReanimatedSwipeable.tsx +361 -305
  108. package/src/findNodeHandle.ts +3 -0
  109. package/src/findNodeHandle.web.ts +35 -0
  110. package/src/handlers/createHandler.tsx +2 -1
  111. package/src/handlers/gestures/GestureDetector/Wrap.web.tsx +44 -0
  112. package/src/handlers/gestures/GestureDetector/index.tsx +2 -1
  113. package/src/handlers/gestures/GestureDetector/useDetectorUpdater.ts +1 -1
  114. package/src/handlers/gestures/GestureDetector/useViewRefHandler.ts +1 -1
  115. package/src/web/handlers/GestureHandler.ts +5 -1
  116. package/src/web/handlers/PanGestureHandler.ts +69 -1
  117. package/src/web/interfaces.ts +17 -0
  118. package/src/web/tools/EventManager.ts +4 -0
  119. package/src/web/tools/GestureHandlerOrchestrator.ts +1 -7
  120. package/src/web/tools/GestureHandlerWebDelegate.ts +3 -1
  121. package/src/web/tools/KeyboardEventManager.ts +2 -2
  122. package/src/web/tools/PointerTracker.ts +6 -28
  123. package/src/web/tools/WheelEventManager.ts +48 -0
  124. package/src/web/utils.ts +47 -1
@@ -22,24 +22,44 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj;
22
22
  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); }
23
23
 
24
24
  const DRAG_TOSS = 0.05;
25
+ var SwipeDirection;
26
+
27
+ (function (SwipeDirection) {
28
+ SwipeDirection["LEFT"] = "left";
29
+ SwipeDirection["RIGHT"] = "right";
30
+ })(SwipeDirection || (SwipeDirection = {}));
31
+
25
32
  const Swipeable = /*#__PURE__*/(0, _react.forwardRef)(function Swipeable(props, ref) {
33
+ const defaultProps = {
34
+ friction: 1,
35
+ overshootFriction: 1,
36
+ dragOffset: 10,
37
+ enableTrackpadTwoFingerGesture: false
38
+ };
26
39
  const {
27
40
  leftThreshold,
28
41
  rightThreshold,
29
- onSwipeableOpenStartDrag,
30
- onSwipeableCloseStartDrag,
31
- enableTrackpadTwoFingerGesture,
32
42
  enabled,
33
43
  containerStyle,
34
44
  childrenContainerStyle,
35
45
  animationOptions,
36
46
  overshootLeft,
37
47
  overshootRight,
48
+ testID,
49
+ children,
50
+ enableTrackpadTwoFingerGesture = defaultProps.enableTrackpadTwoFingerGesture,
51
+ dragOffsetFromLeftEdge = defaultProps.dragOffset,
52
+ dragOffsetFromRightEdge = defaultProps.dragOffset,
53
+ friction = defaultProps.friction,
54
+ overshootFriction = defaultProps.overshootFriction,
55
+ onSwipeableOpenStartDrag,
56
+ onSwipeableCloseStartDrag,
38
57
  onSwipeableWillOpen,
39
58
  onSwipeableWillClose,
40
59
  onSwipeableOpen,
41
60
  onSwipeableClose,
42
- testID,
61
+ renderLeftActions,
62
+ renderRightActions,
43
63
  ...remainingProps
44
64
  } = props;
45
65
  const rowState = (0, _reactNativeReanimated.useSharedValue)(0);
@@ -47,141 +67,103 @@ const Swipeable = /*#__PURE__*/(0, _react.forwardRef)(function Swipeable(props,
47
67
  const appliedTranslation = (0, _reactNativeReanimated.useSharedValue)(0);
48
68
  const rowWidth = (0, _reactNativeReanimated.useSharedValue)(0);
49
69
  const leftWidth = (0, _reactNativeReanimated.useSharedValue)(0);
50
- const rightWidth = (0, _reactNativeReanimated.useSharedValue)(0);
51
- const rightOffset = (0, _reactNativeReanimated.useSharedValue)(0);
52
- const leftActionTranslate = (0, _reactNativeReanimated.useSharedValue)(0);
53
- const rightActionTranslate = (0, _reactNativeReanimated.useSharedValue)(0);
70
+ const rightWidth = (0, _reactNativeReanimated.useSharedValue)(0); // used for synchronizing layout measurements between JS and UI
71
+
72
+ const rightOffset = (0, _reactNativeReanimated.useSharedValue)(null);
54
73
  const showLeftProgress = (0, _reactNativeReanimated.useSharedValue)(0);
55
74
  const showRightProgress = (0, _reactNativeReanimated.useSharedValue)(0);
56
- const swipeableMethods = (0, _react.useRef)({
57
- close: () => {
58
- 'worklet';
59
- },
60
- openLeft: () => {
61
- 'worklet';
62
- },
63
- openRight: () => {
64
- 'worklet';
65
- },
66
- reset: () => {
67
- 'worklet';
68
- }
69
- });
70
- const defaultProps = {
71
- friction: 1,
72
- overshootFriction: 1
73
- };
74
- const {
75
- friction = defaultProps.friction,
76
- overshootFriction = defaultProps.overshootFriction
77
- } = props;
78
- const overshootLeftProp = overshootLeft;
79
- const overshootRightProp = overshootRight;
80
- const calculateCurrentOffset = (0, _react.useCallback)(() => {
75
+ const updateRightElementWidth = (0, _react.useCallback)(() => {
81
76
  'worklet';
82
77
 
83
- if (rowState.value === 1) {
84
- return leftWidth.value;
85
- } else if (rowState.value === -1) {
86
- return -rowWidth.value - rightOffset.value;
78
+ if (rightOffset.value === null) {
79
+ rightOffset.value = rowWidth.value;
87
80
  }
88
81
 
89
- return 0;
90
- }, [leftWidth, rightOffset, rowState, rowWidth]);
91
-
92
- const updateAnimatedEvent = () => {
82
+ rightWidth.value = Math.max(0, rowWidth.value - rightOffset.value);
83
+ }, [rightOffset, rightWidth, rowWidth]);
84
+ const updateAnimatedEvent = (0, _react.useCallback)(() => {
93
85
  'worklet';
94
86
 
95
- rightWidth.value = Math.max(0, rowWidth.value - rightOffset.value);
96
- const overshootLeft = overshootLeftProp !== null && overshootLeftProp !== void 0 ? overshootLeftProp : leftWidth.value > 0;
97
- const overshootRight = overshootRightProp !== null && overshootRightProp !== void 0 ? overshootRightProp : rightWidth.value > 0;
87
+ const shouldOvershootLeft = overshootLeft !== null && overshootLeft !== void 0 ? overshootLeft : leftWidth.value > 0;
88
+ const shouldOvershootRight = overshootRight !== null && overshootRight !== void 0 ? overshootRight : rightWidth.value > 0;
98
89
  const startOffset = rowState.value === 1 ? leftWidth.value : rowState.value === -1 ? -rightWidth.value : 0;
99
90
  const offsetDrag = userDrag.value / friction + startOffset;
100
- appliedTranslation.value = (0, _reactNativeReanimated.interpolate)(offsetDrag, [-rightWidth.value - 1, -rightWidth.value, leftWidth.value, leftWidth.value + 1], [-rightWidth.value - (overshootRight ? 1 / overshootFriction : 0), -rightWidth.value, leftWidth.value, leftWidth.value + (overshootLeft ? 1 / overshootFriction : 0)]);
91
+ appliedTranslation.value = (0, _reactNativeReanimated.interpolate)(offsetDrag, [-rightWidth.value - 1, -rightWidth.value, leftWidth.value, leftWidth.value + 1], [-rightWidth.value - (shouldOvershootRight ? 1 / overshootFriction : 0), -rightWidth.value, leftWidth.value, leftWidth.value + (shouldOvershootLeft ? 1 / overshootFriction : 0)]);
101
92
  showLeftProgress.value = leftWidth.value > 0 ? (0, _reactNativeReanimated.interpolate)(appliedTranslation.value, [-1, 0, leftWidth.value], [0, 0, 1]) : 0;
102
- leftActionTranslate.value = (0, _reactNativeReanimated.interpolate)(showLeftProgress.value, [0, Number.MIN_VALUE], [-10000, 0], _reactNativeReanimated.Extrapolation.CLAMP);
103
93
  showRightProgress.value = rightWidth.value > 0 ? (0, _reactNativeReanimated.interpolate)(appliedTranslation.value, [-rightWidth.value, 0, 1], [1, 0, 0]) : 0;
104
- rightActionTranslate.value = (0, _reactNativeReanimated.interpolate)(showRightProgress.value, [0, Number.MIN_VALUE], [-10000, 0], _reactNativeReanimated.Extrapolation.CLAMP);
105
- };
106
-
94
+ }, [appliedTranslation, friction, leftWidth, overshootFriction, rightWidth, rowState, showLeftProgress, showRightProgress, userDrag, overshootLeft, overshootRight]);
107
95
  const dispatchImmediateEvents = (0, _react.useCallback)((fromValue, toValue) => {
96
+ 'worklet';
97
+
108
98
  if (toValue > 0 && onSwipeableWillOpen) {
109
- onSwipeableWillOpen('left');
99
+ (0, _reactNativeReanimated.runOnJS)(onSwipeableWillOpen)(SwipeDirection.RIGHT);
110
100
  } else if (toValue < 0 && onSwipeableWillOpen) {
111
- onSwipeableWillOpen('right');
101
+ (0, _reactNativeReanimated.runOnJS)(onSwipeableWillOpen)(SwipeDirection.LEFT);
112
102
  } else if (onSwipeableWillClose) {
113
- const closingDirection = fromValue > 0 ? 'left' : 'right';
114
- onSwipeableWillClose(closingDirection);
103
+ (0, _reactNativeReanimated.runOnJS)(onSwipeableWillClose)(fromValue > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT);
115
104
  }
116
105
  }, [onSwipeableWillClose, onSwipeableWillOpen]);
117
106
  const dispatchEndEvents = (0, _react.useCallback)((fromValue, toValue) => {
107
+ 'worklet';
108
+
118
109
  if (toValue > 0 && onSwipeableOpen) {
119
- onSwipeableOpen('left', swipeableMethods.current);
110
+ (0, _reactNativeReanimated.runOnJS)(onSwipeableOpen)(SwipeDirection.RIGHT);
120
111
  } else if (toValue < 0 && onSwipeableOpen) {
121
- onSwipeableOpen('right', swipeableMethods.current);
112
+ (0, _reactNativeReanimated.runOnJS)(onSwipeableOpen)(SwipeDirection.LEFT);
122
113
  } else if (onSwipeableClose) {
123
- const closingDirection = fromValue > 0 ? 'left' : 'right';
124
- onSwipeableClose(closingDirection, swipeableMethods.current);
114
+ (0, _reactNativeReanimated.runOnJS)(onSwipeableClose)(fromValue > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT);
125
115
  }
126
116
  }, [onSwipeableClose, onSwipeableOpen]);
127
- const animationOptionsProp = animationOptions;
128
- const animateRow = (0, _react.useCallback)((fromValue, toValue, velocityX) => {
117
+ const animateRow = (0, _react.useCallback)((toValue, velocityX) => {
129
118
  'worklet';
130
119
 
131
- rowState.value = Math.sign(toValue);
132
120
  const translationSpringConfig = {
133
121
  duration: 1000,
134
122
  dampingRatio: 0.9,
135
123
  stiffness: 500,
136
124
  velocity: velocityX,
137
125
  overshootClamping: true,
138
- ...animationOptionsProp
126
+ ...animationOptions
139
127
  };
128
+ const isClosing = toValue === 0;
129
+ const moveToRight = isClosing ? rowState.value < 0 : toValue > 0;
130
+ const usedWidth = isClosing ? moveToRight ? rightWidth.value : leftWidth.value : moveToRight ? leftWidth.value : rightWidth.value;
140
131
  const progressSpringConfig = { ...translationSpringConfig,
141
- velocity: 0
132
+ restDisplacementThreshold: 0.01,
133
+ restSpeedThreshold: 0.01,
134
+ velocity: velocityX && (0, _reactNativeReanimated.interpolate)(velocityX, [-usedWidth, usedWidth], [-1, 1])
142
135
  };
136
+ const frozenRowState = rowState.value;
143
137
  appliedTranslation.value = (0, _reactNativeReanimated.withSpring)(toValue, translationSpringConfig, isFinished => {
144
138
  if (isFinished) {
145
- (0, _reactNativeReanimated.runOnJS)(dispatchEndEvents)(fromValue, toValue);
139
+ dispatchEndEvents(frozenRowState, toValue);
146
140
  }
147
141
  });
148
142
  const progressTarget = toValue === 0 ? 0 : 1;
149
143
  showLeftProgress.value = leftWidth.value > 0 ? (0, _reactNativeReanimated.withSpring)(progressTarget, progressSpringConfig) : 0;
150
144
  showRightProgress.value = rightWidth.value > 0 ? (0, _reactNativeReanimated.withSpring)(progressTarget, progressSpringConfig) : 0;
151
- (0, _reactNativeReanimated.runOnJS)(dispatchImmediateEvents)(fromValue, toValue);
152
- }, [rowState, animationOptionsProp, appliedTranslation, showLeftProgress, leftWidth.value, showRightProgress, rightWidth.value, dispatchImmediateEvents, dispatchEndEvents]);
153
-
154
- const onRowLayout = ({
155
- nativeEvent
156
- }) => {
157
- rowWidth.value = nativeEvent.layout.width;
158
- };
159
-
160
- const {
161
- children,
162
- renderLeftActions,
163
- renderRightActions,
164
- dragOffsetFromLeftEdge = 10,
165
- dragOffsetFromRightEdge = 10
166
- } = props;
167
- swipeableMethods.current = {
145
+ dispatchImmediateEvents(frozenRowState, toValue);
146
+ rowState.value = Math.sign(toValue);
147
+ }, [rowState, animationOptions, appliedTranslation, showLeftProgress, leftWidth, showRightProgress, rightWidth, dispatchImmediateEvents, dispatchEndEvents]);
148
+ const swipeableMethods = (0, _react.useMemo)(() => ({
168
149
  close() {
169
150
  'worklet';
170
151
 
171
- animateRow(calculateCurrentOffset(), 0);
152
+ animateRow(0);
172
153
  },
173
154
 
174
155
  openLeft() {
175
156
  'worklet';
176
157
 
177
- animateRow(calculateCurrentOffset(), leftWidth.value);
158
+ animateRow(leftWidth.value);
178
159
  },
179
160
 
180
161
  openRight() {
181
- 'worklet';
162
+ 'worklet'; // rightOffset and rowWidth are already much sooner than rightWidth
182
163
 
183
- rightWidth.value = rowWidth.value - rightOffset.value;
184
- animateRow(calculateCurrentOffset(), -rightWidth.value);
164
+ var _rightOffset$value;
165
+
166
+ animateRow(((_rightOffset$value = rightOffset.value) !== null && _rightOffset$value !== void 0 ? _rightOffset$value : 0) - rowWidth.value);
185
167
  },
186
168
 
187
169
  reset() {
@@ -193,108 +175,95 @@ const Swipeable = /*#__PURE__*/(0, _react.forwardRef)(function Swipeable(props,
193
175
  rowState.value = 0;
194
176
  }
195
177
 
196
- };
197
- const leftAnimatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
198
- transform: [{
199
- translateX: leftActionTranslate.value
200
- }]
201
- }), [leftActionTranslate]);
202
-
203
- const leftElement = renderLeftActions && /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
204
- style: [styles.leftActions, leftAnimatedStyle]
205
- }, renderLeftActions(showLeftProgress, appliedTranslation, swipeableMethods.current), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
178
+ }), [leftWidth, rightOffset, rowWidth, userDrag, showLeftProgress, appliedTranslation, rowState, animateRow]);
179
+ const onRowLayout = (0, _react.useCallback)(({
180
+ nativeEvent
181
+ }) => {
182
+ rowWidth.value = nativeEvent.layout.width;
183
+ }, [rowWidth]);
184
+ const leftElement = (0, _react.useCallback)(() => /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
185
+ style: [styles.leftActions]
186
+ }, renderLeftActions === null || renderLeftActions === void 0 ? void 0 : renderLeftActions(showLeftProgress, appliedTranslation, swipeableMethods), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
206
187
  onLayout: ({
207
188
  nativeEvent
208
189
  }) => leftWidth.value = nativeEvent.layout.x
209
- }));
210
-
211
- const rightAnimatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
212
- transform: [{
213
- translateX: rightActionTranslate.value
214
- }]
215
- }), [rightActionTranslate]);
216
-
217
- const rightElement = renderRightActions && /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
218
- style: [styles.rightActions, rightAnimatedStyle]
219
- }, renderRightActions(showRightProgress, appliedTranslation, swipeableMethods.current), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
190
+ })), [appliedTranslation, leftWidth, renderLeftActions, showLeftProgress, swipeableMethods]);
191
+ const rightElement = (0, _react.useCallback)(() => /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
192
+ style: [styles.rightActions]
193
+ }, renderRightActions === null || renderRightActions === void 0 ? void 0 : renderRightActions(showRightProgress, appliedTranslation, swipeableMethods), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
220
194
  onLayout: ({
221
195
  nativeEvent
222
- }) => rightOffset.value = nativeEvent.layout.x
223
- }));
224
-
225
- const leftThresholdProp = leftThreshold;
226
- const rightThresholdProp = rightThreshold;
227
-
228
- const handleRelease = event => {
196
+ }) => {
197
+ rightOffset.value = nativeEvent.layout.x;
198
+ }
199
+ })), [appliedTranslation, renderRightActions, rightOffset, showRightProgress, swipeableMethods]);
200
+ const handleRelease = (0, _react.useCallback)(event => {
229
201
  'worklet';
230
202
 
231
203
  const {
232
204
  velocityX
233
205
  } = event;
234
206
  userDrag.value = event.translationX;
235
- rightWidth.value = rowWidth.value - rightOffset.value;
236
- const leftThreshold = leftThresholdProp !== null && leftThresholdProp !== void 0 ? leftThresholdProp : leftWidth.value / 2;
237
- const rightThreshold = rightThresholdProp !== null && rightThresholdProp !== void 0 ? rightThresholdProp : rightWidth.value / 2;
238
- const startOffsetX = calculateCurrentOffset() + userDrag.value / friction;
207
+ updateRightElementWidth();
208
+ const leftThresholdProp = leftThreshold !== null && leftThreshold !== void 0 ? leftThreshold : leftWidth.value / 2;
209
+ const rightThresholdProp = rightThreshold !== null && rightThreshold !== void 0 ? rightThreshold : rightWidth.value / 2;
239
210
  const translationX = (userDrag.value + DRAG_TOSS * velocityX) / friction;
240
211
  let toValue = 0;
241
212
 
242
213
  if (rowState.value === 0) {
243
- if (translationX > leftThreshold) {
214
+ if (translationX > leftThresholdProp) {
244
215
  toValue = leftWidth.value;
245
- } else if (translationX < -rightThreshold) {
216
+ } else if (translationX < -rightThresholdProp) {
246
217
  toValue = -rightWidth.value;
247
218
  }
248
219
  } else if (rowState.value === 1) {
249
220
  // Swiped to left
250
- if (translationX > -leftThreshold) {
221
+ if (translationX > -leftThresholdProp) {
251
222
  toValue = leftWidth.value;
252
223
  }
253
224
  } else {
254
225
  // Swiped to right
255
- if (translationX < rightThreshold) {
226
+ if (translationX < rightThresholdProp) {
256
227
  toValue = -rightWidth.value;
257
228
  }
258
229
  }
259
230
 
260
- animateRow(startOffsetX, toValue, velocityX / friction);
261
- };
262
-
263
- const close = () => {
231
+ animateRow(toValue, velocityX / friction);
232
+ }, [animateRow, friction, leftThreshold, leftWidth, rightThreshold, rightWidth, rowState, userDrag, updateRightElementWidth]);
233
+ const close = (0, _react.useCallback)(() => {
264
234
  'worklet';
265
235
 
266
- animateRow(calculateCurrentOffset(), 0);
267
- };
268
-
269
- const tapGesture = _gestureObjects.GestureObjects.Tap().onStart(() => {
236
+ animateRow(0);
237
+ }, [animateRow]);
238
+ const dragStarted = (0, _reactNativeReanimated.useSharedValue)(false);
239
+ const tapGesture = (0, _react.useMemo)(() => _gestureObjects.GestureObjects.Tap().shouldCancelWhenOutside(true).onStart(() => {
270
240
  if (rowState.value !== 0) {
271
241
  close();
272
242
  }
273
- });
274
-
275
- const panGesture = _gestureObjects.GestureObjects.Pan().onUpdate(event => {
243
+ }), [close, rowState]);
244
+ const panGesture = (0, _react.useMemo)(() => _gestureObjects.GestureObjects.Pan().enabled(enabled !== false).enableTrackpadTwoFingerGesture(enableTrackpadTwoFingerGesture).activeOffsetX([-dragOffsetFromRightEdge, dragOffsetFromLeftEdge]).onStart(() => {
245
+ updateRightElementWidth();
246
+ }).onUpdate(event => {
276
247
  userDrag.value = event.translationX;
277
- const direction = rowState.value === -1 ? 'right' : rowState.value === 1 ? 'left' : event.translationX > 0 ? 'left' : 'right';
248
+ const direction = rowState.value === -1 ? SwipeDirection.RIGHT : rowState.value === 1 ? SwipeDirection.LEFT : event.translationX > 0 ? SwipeDirection.RIGHT : SwipeDirection.LEFT;
249
+
250
+ if (!dragStarted.value) {
251
+ dragStarted.value = true;
278
252
 
279
- if (rowState.value === 0 && onSwipeableOpenStartDrag) {
280
- (0, _reactNativeReanimated.runOnJS)(onSwipeableOpenStartDrag)(direction);
281
- } else if (rowState.value !== 0 && onSwipeableCloseStartDrag) {
282
- (0, _reactNativeReanimated.runOnJS)(onSwipeableCloseStartDrag)(direction);
253
+ if (rowState.value === 0 && onSwipeableOpenStartDrag) {
254
+ (0, _reactNativeReanimated.runOnJS)(onSwipeableOpenStartDrag)(direction);
255
+ } else if (onSwipeableCloseStartDrag) {
256
+ (0, _reactNativeReanimated.runOnJS)(onSwipeableCloseStartDrag)(direction);
257
+ }
283
258
  }
284
259
 
285
260
  updateAnimatedEvent();
286
261
  }).onEnd(event => {
287
262
  handleRelease(event);
288
- });
289
-
290
- if (enableTrackpadTwoFingerGesture) {
291
- panGesture.enableTrackpadTwoFingerGesture(enableTrackpadTwoFingerGesture);
292
- }
293
-
294
- panGesture.activeOffsetX([-dragOffsetFromRightEdge, dragOffsetFromLeftEdge]);
295
- tapGesture.shouldCancelWhenOutside(true);
296
- (0, _react.useImperativeHandle)(ref, () => swipeableMethods.current, [swipeableMethods]);
297
- panGesture.enabled(enabled !== false);
263
+ }).onFinalize(() => {
264
+ dragStarted.value = false;
265
+ }), [dragOffsetFromLeftEdge, dragOffsetFromRightEdge, dragStarted, enableTrackpadTwoFingerGesture, enabled, handleRelease, onSwipeableCloseStartDrag, onSwipeableOpenStartDrag, rowState, updateAnimatedEvent, updateRightElementWidth, userDrag]);
266
+ (0, _react.useImperativeHandle)(ref, () => swipeableMethods, [swipeableMethods]);
298
267
  const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
299
268
  transform: [{
300
269
  translateX: appliedTranslation.value
@@ -308,7 +277,7 @@ const Swipeable = /*#__PURE__*/(0, _react.forwardRef)(function Swipeable(props,
308
277
  }, /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, _extends({}, remainingProps, {
309
278
  onLayout: onRowLayout,
310
279
  style: [styles.container, containerStyle]
311
- }), leftElement, rightElement, /*#__PURE__*/_react.default.createElement(_GestureDetector.GestureDetector, {
280
+ }), leftElement(), rightElement(), /*#__PURE__*/_react.default.createElement(_GestureDetector.GestureDetector, {
312
281
  gesture: tapGesture,
313
282
  touchAction: "pan-y"
314
283
  }, /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
@@ -1 +1 @@
1
- {"version":3,"sources":["ReanimatedSwipeable.tsx"],"names":["DRAG_TOSS","Swipeable","props","ref","leftThreshold","rightThreshold","onSwipeableOpenStartDrag","onSwipeableCloseStartDrag","enableTrackpadTwoFingerGesture","enabled","containerStyle","childrenContainerStyle","animationOptions","overshootLeft","overshootRight","onSwipeableWillOpen","onSwipeableWillClose","onSwipeableOpen","onSwipeableClose","testID","remainingProps","rowState","userDrag","appliedTranslation","rowWidth","leftWidth","rightWidth","rightOffset","leftActionTranslate","rightActionTranslate","showLeftProgress","showRightProgress","swipeableMethods","close","openLeft","openRight","reset","defaultProps","friction","overshootFriction","overshootLeftProp","overshootRightProp","calculateCurrentOffset","value","updateAnimatedEvent","Math","max","startOffset","offsetDrag","Number","MIN_VALUE","Extrapolation","CLAMP","dispatchImmediateEvents","fromValue","toValue","closingDirection","dispatchEndEvents","current","animationOptionsProp","animateRow","velocityX","sign","translationSpringConfig","duration","dampingRatio","stiffness","velocity","overshootClamping","progressSpringConfig","isFinished","progressTarget","onRowLayout","nativeEvent","layout","width","children","renderLeftActions","renderRightActions","dragOffsetFromLeftEdge","dragOffsetFromRightEdge","leftAnimatedStyle","transform","translateX","leftElement","styles","leftActions","x","rightAnimatedStyle","rightElement","rightActions","leftThresholdProp","rightThresholdProp","handleRelease","event","translationX","startOffsetX","tapGesture","Gesture","Tap","onStart","panGesture","Pan","onUpdate","direction","onEnd","activeOffsetX","shouldCancelWhenOutside","animatedStyle","pointerEvents","swipeableComponent","container","StyleSheet","create","overflow","absoluteFillObject","flexDirection","I18nManager","isRTL"],"mappings":"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","sourcesContent":["// Similarily to the DrawerLayout component this deserves to be put in a\n// separate repo. Although, keeping it here for the time being will allow us to\n// move faster and fix possible issues quicker\n\nimport React, {\n ForwardedRef,\n forwardRef,\n useCallback,\n useImperativeHandle,\n useRef,\n} from 'react';\nimport { GestureObjects as Gesture } from '../handlers/gestures/gestureObjects';\nimport { GestureDetector } from '../handlers/gestures/GestureDetector';\nimport {\n GestureStateChangeEvent,\n GestureUpdateEvent,\n} from '../handlers/gestureHandlerCommon';\nimport type { PanGestureHandlerProps } from '../handlers/PanGestureHandler';\nimport type { PanGestureHandlerEventPayload } from '../handlers/GestureHandlerEventPayload';\nimport Animated, {\n Extrapolation,\n SharedValue,\n interpolate,\n runOnJS,\n useAnimatedStyle,\n useSharedValue,\n withSpring,\n} from 'react-native-reanimated';\nimport {\n I18nManager,\n LayoutChangeEvent,\n StyleProp,\n StyleSheet,\n View,\n ViewStyle,\n} from 'react-native';\n\nconst DRAG_TOSS = 0.05;\n\ntype SwipeableExcludes = Exclude<\n keyof PanGestureHandlerProps,\n 'onGestureEvent' | 'onHandlerStateChange'\n>;\n\nexport interface SwipeableProps\n extends Pick<PanGestureHandlerProps, SwipeableExcludes> {\n /**\n * Enables two-finger gestures on supported devices, for example iPads with\n * trackpads. If not enabled the gesture will require click + drag, with\n * `enableTrackpadTwoFingerGesture` swiping with two fingers will also trigger\n * the gesture.\n */\n enableTrackpadTwoFingerGesture?: boolean;\n\n /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance. e.g. value of 1 will indicate that the swipeable panel\n * should exactly follow the gesture, 2 means it is going to be two times\n * \"slower\".\n */\n friction?: number;\n\n /**\n * Distance from the left edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n leftThreshold?: number;\n\n /**\n * Distance from the right edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n rightThreshold?: number;\n\n /**\n * Distance that the panel must be dragged from the left edge to be considered\n * a swipe. The default value is 10.\n */\n dragOffsetFromLeftEdge?: number;\n\n /**\n * Distance that the panel must be dragged from the right edge to be considered\n * a swipe. The default value is 10.\n */\n dragOffsetFromRightEdge?: number;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the left\n * actions panel's width. It is set to true by default as long as the left\n * panel render method is present.\n */\n overshootLeft?: boolean;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the\n * right actions panel's width. It is set to true by default as long as the\n * right panel render method is present.\n */\n overshootRight?: boolean;\n\n /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance at overshoot. Default value is 1, it mean no friction, for\n * a native feel, try 8 or above.\n */\n overshootFriction?: number;\n\n /**\n * Called when action panel gets open (either right or left).\n */\n onSwipeableOpen?: (\n direction: 'left' | 'right',\n swipeable: SwipeableMethods\n ) => void;\n\n /**\n * Called when action panel is closed.\n */\n onSwipeableClose?: (\n direction: 'left' | 'right',\n swipeable: SwipeableMethods\n ) => void;\n\n /**\n * Called when action panel starts animating on open (either right or left).\n */\n onSwipeableWillOpen?: (direction: 'left' | 'right') => void;\n\n /**\n * Called when action panel starts animating on close.\n */\n onSwipeableWillClose?: (direction: 'left' | 'right') => void;\n\n /**\n * Called when action panel starts being shown on dragging to open.\n */\n onSwipeableOpenStartDrag?: (direction: 'left' | 'right') => void;\n\n /**\n * Called when action panel starts being shown on dragging to close.\n */\n onSwipeableCloseStartDrag?: (direction: 'left' | 'right') => void;\n\n /**\n *\n * This map describes the values to use as inputRange for extra interpolation:\n * AnimatedValue: [startValue, endValue]\n *\n * progressAnimatedValue: [0, 1] dragAnimatedValue: [0, +]\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderLeftActions?: (\n progressAnimatedValue: SharedValue<number>,\n dragAnimatedValue: SharedValue<number>,\n swipeable: SwipeableMethods\n ) => React.ReactNode;\n /**\n *\n * This map describes the values to use as inputRange for extra interpolation:\n * AnimatedValue: [startValue, endValue]\n *\n * progressAnimatedValue: [0, 1] dragAnimatedValue: [0, -]\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderRightActions?: (\n progressAnimatedValue: SharedValue<number>,\n dragAnimatedValue: SharedValue<number>,\n swipeable: SwipeableMethods\n ) => React.ReactNode;\n\n animationOptions?: Record<string, unknown>;\n\n /**\n * Style object for the container (`Animated.View`), for example to override\n * `overflow: 'hidden'`.\n */\n containerStyle?: StyleProp<ViewStyle>;\n\n /**\n * Style object for the children container (`Animated.View`), for example to\n * apply `flex: 1`\n */\n childrenContainerStyle?: StyleProp<ViewStyle>;\n}\n\nexport interface SwipeableMethods {\n close: () => void;\n openLeft: () => void;\n openRight: () => void;\n reset: () => void;\n}\n\nconst Swipeable = forwardRef<SwipeableMethods, SwipeableProps>(\n function Swipeable(\n props: SwipeableProps,\n ref: ForwardedRef<SwipeableMethods>\n ) {\n const {\n leftThreshold,\n rightThreshold,\n onSwipeableOpenStartDrag,\n onSwipeableCloseStartDrag,\n enableTrackpadTwoFingerGesture,\n enabled,\n containerStyle,\n childrenContainerStyle,\n animationOptions,\n overshootLeft,\n overshootRight,\n onSwipeableWillOpen,\n onSwipeableWillClose,\n onSwipeableOpen,\n onSwipeableClose,\n testID,\n ...remainingProps\n } = props;\n\n const rowState = useSharedValue<number>(0);\n\n const userDrag = useSharedValue<number>(0);\n const appliedTranslation = useSharedValue<number>(0);\n\n const rowWidth = useSharedValue<number>(0);\n const leftWidth = useSharedValue<number>(0);\n const rightWidth = useSharedValue<number>(0);\n const rightOffset = useSharedValue<number>(0);\n\n const leftActionTranslate = useSharedValue<number>(0);\n const rightActionTranslate = useSharedValue<number>(0);\n\n const showLeftProgress = useSharedValue<number>(0);\n const showRightProgress = useSharedValue<number>(0);\n\n const swipeableMethods = useRef<SwipeableMethods>({\n close: () => {\n 'worklet';\n },\n openLeft: () => {\n 'worklet';\n },\n openRight: () => {\n 'worklet';\n },\n reset: () => {\n 'worklet';\n },\n });\n\n const defaultProps = {\n friction: 1,\n overshootFriction: 1,\n };\n\n const {\n friction = defaultProps.friction,\n overshootFriction = defaultProps.overshootFriction,\n } = props;\n\n const overshootLeftProp = overshootLeft;\n const overshootRightProp = overshootRight;\n\n const calculateCurrentOffset = useCallback(() => {\n 'worklet';\n if (rowState.value === 1) {\n return leftWidth.value;\n } else if (rowState.value === -1) {\n return -rowWidth.value - rightOffset.value;\n }\n return 0;\n }, [leftWidth, rightOffset, rowState, rowWidth]);\n\n const updateAnimatedEvent = () => {\n 'worklet';\n rightWidth.value = Math.max(0, rowWidth.value - rightOffset.value);\n\n const overshootLeft = overshootLeftProp ?? leftWidth.value > 0;\n const overshootRight = overshootRightProp ?? rightWidth.value > 0;\n\n const startOffset =\n rowState.value === 1\n ? leftWidth.value\n : rowState.value === -1\n ? -rightWidth.value\n : 0;\n\n const offsetDrag = userDrag.value / friction + startOffset;\n\n appliedTranslation.value = interpolate(\n offsetDrag,\n [\n -rightWidth.value - 1,\n -rightWidth.value,\n leftWidth.value,\n leftWidth.value + 1,\n ],\n [\n -rightWidth.value - (overshootRight ? 1 / overshootFriction : 0),\n -rightWidth.value,\n leftWidth.value,\n leftWidth.value + (overshootLeft ? 1 / overshootFriction : 0),\n ]\n );\n\n showLeftProgress.value =\n leftWidth.value > 0\n ? interpolate(\n appliedTranslation.value,\n [-1, 0, leftWidth.value],\n [0, 0, 1]\n )\n : 0;\n leftActionTranslate.value = interpolate(\n showLeftProgress.value,\n [0, Number.MIN_VALUE],\n [-10000, 0],\n Extrapolation.CLAMP\n );\n showRightProgress.value =\n rightWidth.value > 0\n ? interpolate(\n appliedTranslation.value,\n [-rightWidth.value, 0, 1],\n [1, 0, 0]\n )\n : 0;\n rightActionTranslate.value = interpolate(\n showRightProgress.value,\n [0, Number.MIN_VALUE],\n [-10000, 0],\n Extrapolation.CLAMP\n );\n };\n\n const dispatchImmediateEvents = useCallback(\n (fromValue: number, toValue: number) => {\n if (toValue > 0 && onSwipeableWillOpen) {\n onSwipeableWillOpen('left');\n } else if (toValue < 0 && onSwipeableWillOpen) {\n onSwipeableWillOpen('right');\n } else if (onSwipeableWillClose) {\n const closingDirection = fromValue > 0 ? 'left' : 'right';\n onSwipeableWillClose(closingDirection);\n }\n },\n [onSwipeableWillClose, onSwipeableWillOpen]\n );\n\n const dispatchEndEvents = useCallback(\n (fromValue: number, toValue: number) => {\n if (toValue > 0 && onSwipeableOpen) {\n onSwipeableOpen('left', swipeableMethods.current);\n } else if (toValue < 0 && onSwipeableOpen) {\n onSwipeableOpen('right', swipeableMethods.current);\n } else if (onSwipeableClose) {\n const closingDirection = fromValue > 0 ? 'left' : 'right';\n onSwipeableClose(closingDirection, swipeableMethods.current);\n }\n },\n [onSwipeableClose, onSwipeableOpen]\n );\n\n const animationOptionsProp = animationOptions;\n\n const animateRow = useCallback(\n (fromValue: number, toValue: number, velocityX?: number) => {\n 'worklet';\n rowState.value = Math.sign(toValue);\n\n const translationSpringConfig = {\n duration: 1000,\n dampingRatio: 0.9,\n stiffness: 500,\n velocity: velocityX,\n overshootClamping: true,\n ...animationOptionsProp,\n };\n\n const progressSpringConfig = {\n ...translationSpringConfig,\n velocity: 0,\n };\n\n appliedTranslation.value = withSpring(\n toValue,\n translationSpringConfig,\n (isFinished) => {\n if (isFinished) {\n runOnJS(dispatchEndEvents)(fromValue, toValue);\n }\n }\n );\n\n const progressTarget = toValue === 0 ? 0 : 1;\n\n showLeftProgress.value =\n leftWidth.value > 0\n ? withSpring(progressTarget, progressSpringConfig)\n : 0;\n showRightProgress.value =\n rightWidth.value > 0\n ? withSpring(progressTarget, progressSpringConfig)\n : 0;\n\n runOnJS(dispatchImmediateEvents)(fromValue, toValue);\n },\n [\n rowState,\n animationOptionsProp,\n appliedTranslation,\n showLeftProgress,\n leftWidth.value,\n showRightProgress,\n rightWidth.value,\n dispatchImmediateEvents,\n dispatchEndEvents,\n ]\n );\n\n const onRowLayout = ({ nativeEvent }: LayoutChangeEvent) => {\n rowWidth.value = nativeEvent.layout.width;\n };\n\n const {\n children,\n renderLeftActions,\n renderRightActions,\n dragOffsetFromLeftEdge = 10,\n dragOffsetFromRightEdge = 10,\n } = props;\n\n swipeableMethods.current = {\n close() {\n 'worklet';\n animateRow(calculateCurrentOffset(), 0);\n },\n openLeft() {\n 'worklet';\n animateRow(calculateCurrentOffset(), leftWidth.value);\n },\n openRight() {\n 'worklet';\n rightWidth.value = rowWidth.value - rightOffset.value;\n animateRow(calculateCurrentOffset(), -rightWidth.value);\n },\n reset() {\n 'worklet';\n userDrag.value = 0;\n showLeftProgress.value = 0;\n appliedTranslation.value = 0;\n rowState.value = 0;\n },\n };\n\n const leftAnimatedStyle = useAnimatedStyle(\n () => ({\n transform: [\n {\n translateX: leftActionTranslate.value,\n },\n ],\n }),\n [leftActionTranslate]\n );\n\n const leftElement = renderLeftActions && (\n <Animated.View style={[styles.leftActions, leftAnimatedStyle]}>\n {renderLeftActions(\n showLeftProgress,\n appliedTranslation,\n swipeableMethods.current\n )}\n <View\n onLayout={({ nativeEvent }) =>\n (leftWidth.value = nativeEvent.layout.x)\n }\n />\n </Animated.View>\n );\n\n const rightAnimatedStyle = useAnimatedStyle(\n () => ({\n transform: [\n {\n translateX: rightActionTranslate.value,\n },\n ],\n }),\n [rightActionTranslate]\n );\n\n const rightElement = renderRightActions && (\n <Animated.View style={[styles.rightActions, rightAnimatedStyle]}>\n {renderRightActions(\n showRightProgress,\n appliedTranslation,\n swipeableMethods.current\n )}\n <View\n onLayout={({ nativeEvent }) =>\n (rightOffset.value = nativeEvent.layout.x)\n }\n />\n </Animated.View>\n );\n\n const leftThresholdProp = leftThreshold;\n const rightThresholdProp = rightThreshold;\n\n const handleRelease = (\n event: GestureStateChangeEvent<PanGestureHandlerEventPayload>\n ) => {\n 'worklet';\n const { velocityX } = event;\n userDrag.value = event.translationX;\n\n rightWidth.value = rowWidth.value - rightOffset.value;\n\n const leftThreshold = leftThresholdProp ?? leftWidth.value / 2;\n const rightThreshold = rightThresholdProp ?? rightWidth.value / 2;\n\n const startOffsetX = calculateCurrentOffset() + userDrag.value / friction;\n const translationX = (userDrag.value + DRAG_TOSS * velocityX) / friction;\n\n let toValue = 0;\n\n if (rowState.value === 0) {\n if (translationX > leftThreshold) {\n toValue = leftWidth.value;\n } else if (translationX < -rightThreshold) {\n toValue = -rightWidth.value;\n }\n } else if (rowState.value === 1) {\n // Swiped to left\n if (translationX > -leftThreshold) {\n toValue = leftWidth.value;\n }\n } else {\n // Swiped to right\n if (translationX < rightThreshold) {\n toValue = -rightWidth.value;\n }\n }\n\n animateRow(startOffsetX, toValue, velocityX / friction);\n };\n\n const close = () => {\n 'worklet';\n animateRow(calculateCurrentOffset(), 0);\n };\n\n const tapGesture = Gesture.Tap().onStart(() => {\n if (rowState.value !== 0) {\n close();\n }\n });\n\n const panGesture = Gesture.Pan()\n .onUpdate((event: GestureUpdateEvent<PanGestureHandlerEventPayload>) => {\n userDrag.value = event.translationX;\n\n const direction =\n rowState.value === -1\n ? 'right'\n : rowState.value === 1\n ? 'left'\n : event.translationX > 0\n ? 'left'\n : 'right';\n\n if (rowState.value === 0 && onSwipeableOpenStartDrag) {\n runOnJS(onSwipeableOpenStartDrag)(direction);\n } else if (rowState.value !== 0 && onSwipeableCloseStartDrag) {\n runOnJS(onSwipeableCloseStartDrag)(direction);\n }\n updateAnimatedEvent();\n })\n .onEnd(\n (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {\n handleRelease(event);\n }\n );\n\n if (enableTrackpadTwoFingerGesture) {\n panGesture.enableTrackpadTwoFingerGesture(enableTrackpadTwoFingerGesture);\n }\n\n panGesture.activeOffsetX([\n -dragOffsetFromRightEdge,\n dragOffsetFromLeftEdge,\n ]);\n tapGesture.shouldCancelWhenOutside(true);\n\n useImperativeHandle(ref, () => swipeableMethods.current, [\n swipeableMethods,\n ]);\n\n panGesture.enabled(enabled !== false);\n\n const animatedStyle = useAnimatedStyle(\n () => ({\n transform: [{ translateX: appliedTranslation.value }],\n pointerEvents: rowState.value === 0 ? 'auto' : 'box-only',\n }),\n [appliedTranslation, rowState]\n );\n\n const swipeableComponent = (\n <GestureDetector gesture={panGesture} touchAction=\"pan-y\">\n <Animated.View\n {...remainingProps}\n onLayout={onRowLayout}\n style={[styles.container, containerStyle]}>\n {leftElement}\n {rightElement}\n <GestureDetector gesture={tapGesture} touchAction=\"pan-y\">\n <Animated.View style={[animatedStyle, childrenContainerStyle]}>\n {children}\n </Animated.View>\n </GestureDetector>\n </Animated.View>\n </GestureDetector>\n );\n\n return testID ? (\n <View testID={testID}>{swipeableComponent}</View>\n ) : (\n swipeableComponent\n );\n }\n);\n\nexport default Swipeable;\nexport type SwipeableRef = ForwardedRef<SwipeableMethods>;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n leftActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row-reverse' : 'row',\n },\n rightActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row' : 'row-reverse',\n },\n});\n"]}
1
+ {"version":3,"sources":["ReanimatedSwipeable.tsx"],"names":["DRAG_TOSS","SwipeDirection","Swipeable","props","ref","defaultProps","friction","overshootFriction","dragOffset","enableTrackpadTwoFingerGesture","leftThreshold","rightThreshold","enabled","containerStyle","childrenContainerStyle","animationOptions","overshootLeft","overshootRight","testID","children","dragOffsetFromLeftEdge","dragOffsetFromRightEdge","onSwipeableOpenStartDrag","onSwipeableCloseStartDrag","onSwipeableWillOpen","onSwipeableWillClose","onSwipeableOpen","onSwipeableClose","renderLeftActions","renderRightActions","remainingProps","rowState","userDrag","appliedTranslation","rowWidth","leftWidth","rightWidth","rightOffset","showLeftProgress","showRightProgress","updateRightElementWidth","value","Math","max","updateAnimatedEvent","shouldOvershootLeft","shouldOvershootRight","startOffset","offsetDrag","dispatchImmediateEvents","fromValue","toValue","RIGHT","LEFT","dispatchEndEvents","animateRow","velocityX","translationSpringConfig","duration","dampingRatio","stiffness","velocity","overshootClamping","isClosing","moveToRight","usedWidth","progressSpringConfig","restDisplacementThreshold","restSpeedThreshold","frozenRowState","isFinished","progressTarget","sign","swipeableMethods","close","openLeft","openRight","reset","onRowLayout","nativeEvent","layout","width","leftElement","styles","leftActions","x","rightElement","rightActions","handleRelease","event","translationX","leftThresholdProp","rightThresholdProp","dragStarted","tapGesture","Gesture","Tap","shouldCancelWhenOutside","onStart","panGesture","Pan","activeOffsetX","onUpdate","direction","onEnd","onFinalize","animatedStyle","transform","translateX","pointerEvents","swipeableComponent","container","StyleSheet","create","overflow","absoluteFillObject","flexDirection","I18nManager","isRTL"],"mappings":"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","sourcesContent":["// Similarily to the DrawerLayout component this deserves to be put in a\n// separate repo. Although, keeping it here for the time being will allow us to\n// move faster and fix possible issues quicker\n\nimport React, {\n ForwardedRef,\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n} from 'react';\nimport { GestureObjects as Gesture } from '../handlers/gestures/gestureObjects';\nimport { GestureDetector } from '../handlers/gestures/GestureDetector';\nimport {\n GestureStateChangeEvent,\n GestureUpdateEvent,\n} from '../handlers/gestureHandlerCommon';\nimport type { PanGestureHandlerProps } from '../handlers/PanGestureHandler';\nimport type { PanGestureHandlerEventPayload } from '../handlers/GestureHandlerEventPayload';\nimport Animated, {\n SharedValue,\n interpolate,\n runOnJS,\n useAnimatedStyle,\n useSharedValue,\n withSpring,\n} from 'react-native-reanimated';\nimport {\n I18nManager,\n LayoutChangeEvent,\n StyleProp,\n StyleSheet,\n View,\n ViewStyle,\n} from 'react-native';\n\nconst DRAG_TOSS = 0.05;\n\ntype SwipeableExcludes = Exclude<\n keyof PanGestureHandlerProps,\n 'onGestureEvent' | 'onHandlerStateChange'\n>;\n\nenum SwipeDirection {\n LEFT = 'left',\n RIGHT = 'right',\n}\n\nexport interface SwipeableProps\n extends Pick<PanGestureHandlerProps, SwipeableExcludes> {\n /**\n * Enables two-finger gestures on supported devices, for example iPads with\n * trackpads. If not enabled the gesture will require click + drag, with\n * `enableTrackpadTwoFingerGesture` swiping with two fingers will also trigger\n * the gesture.\n */\n enableTrackpadTwoFingerGesture?: boolean;\n\n /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance. e.g. value of 1 will indicate that the swipeable panel\n * should exactly follow the gesture, 2 means it is going to be two times\n * \"slower\".\n */\n friction?: number;\n\n /**\n * Distance from the left edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n leftThreshold?: number;\n\n /**\n * Distance from the right edge at which released panel will animate to the\n * open state (or the open panel will animate into the closed state). By\n * default it's a half of the panel's width.\n */\n rightThreshold?: number;\n\n /**\n * Distance that the panel must be dragged from the left edge to be considered\n * a swipe. The default value is 10.\n */\n dragOffsetFromLeftEdge?: number;\n\n /**\n * Distance that the panel must be dragged from the right edge to be considered\n * a swipe. The default value is 10.\n */\n dragOffsetFromRightEdge?: number;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the left\n * actions panel's width. It is set to true by default as long as the left\n * panel render method is present.\n */\n overshootLeft?: boolean;\n\n /**\n * Value indicating if the swipeable panel can be pulled further than the\n * right actions panel's width. It is set to true by default as long as the\n * right panel render method is present.\n */\n overshootRight?: boolean;\n\n /**\n * Specifies how much the visual interaction will be delayed compared to the\n * gesture distance at overshoot. Default value is 1, it mean no friction, for\n * a native feel, try 8 or above.\n */\n overshootFriction?: number;\n\n /**\n * Called when action panel gets open (either right or left).\n */\n onSwipeableOpen?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel is closed.\n */\n onSwipeableClose?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel starts animating on open (either right or left).\n */\n onSwipeableWillOpen?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel starts animating on close.\n */\n onSwipeableWillClose?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel starts being shown on dragging to open.\n */\n onSwipeableOpenStartDrag?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * Called when action panel starts being shown on dragging to close.\n */\n onSwipeableCloseStartDrag?: (\n direction: SwipeDirection.LEFT | SwipeDirection.RIGHT\n ) => void;\n\n /**\n * `progress`: Equals `0` when `swipeable` is closed, `1` when `swipeable` is opened.\n * - When the element overshoots it's opened position the value tends towards `Infinity`.\n * - Goes back to `1` when `swipeable` is released.\n *\n * `translation`: a horizontal offset of the `swipeable` relative to its closed position.\\\n * `swipeableMethods`: provides an object exposing methods for controlling the `swipeable`.\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderLeftActions?: (\n progress: SharedValue<number>,\n translation: SharedValue<number>,\n swipeableMethods: SwipeableMethods\n ) => React.ReactNode;\n\n /**\n * `progress`: Equals `0` when `swipeable` is closed, `1` when `swipeable` is opened.\n * - When the element overshoots it's opened position the value tends towards `Infinity`.\n * - Goes back to `1` when `swipeable` is released.\n *\n * `translation`: a horizontal offset of the `swipeable` relative to its closed position.\\\n * `swipeableMethods`: provides an object exposing methods for controlling the `swipeable`.\n *\n * To support `rtl` flexbox layouts use `flexDirection` styling.\n * */\n renderRightActions?: (\n progress: SharedValue<number>,\n translation: SharedValue<number>,\n swipeableMethods: SwipeableMethods\n ) => React.ReactNode;\n\n animationOptions?: Record<string, unknown>;\n\n /**\n * Style object for the container (`Animated.View`), for example to override\n * `overflow: 'hidden'`.\n */\n containerStyle?: StyleProp<ViewStyle>;\n\n /**\n * Style object for the children container (`Animated.View`), for example to\n * apply `flex: 1`\n */\n childrenContainerStyle?: StyleProp<ViewStyle>;\n}\n\nexport interface SwipeableMethods {\n close: () => void;\n openLeft: () => void;\n openRight: () => void;\n reset: () => void;\n}\n\nconst Swipeable = forwardRef<SwipeableMethods, SwipeableProps>(\n function Swipeable(\n props: SwipeableProps,\n ref: ForwardedRef<SwipeableMethods>\n ) {\n const defaultProps = {\n friction: 1,\n overshootFriction: 1,\n dragOffset: 10,\n enableTrackpadTwoFingerGesture: false,\n };\n\n const {\n leftThreshold,\n rightThreshold,\n enabled,\n containerStyle,\n childrenContainerStyle,\n animationOptions,\n overshootLeft,\n overshootRight,\n testID,\n children,\n enableTrackpadTwoFingerGesture = defaultProps.enableTrackpadTwoFingerGesture,\n dragOffsetFromLeftEdge = defaultProps.dragOffset,\n dragOffsetFromRightEdge = defaultProps.dragOffset,\n friction = defaultProps.friction,\n overshootFriction = defaultProps.overshootFriction,\n onSwipeableOpenStartDrag,\n onSwipeableCloseStartDrag,\n onSwipeableWillOpen,\n onSwipeableWillClose,\n onSwipeableOpen,\n onSwipeableClose,\n renderLeftActions,\n renderRightActions,\n ...remainingProps\n } = props;\n\n const rowState = useSharedValue<number>(0);\n\n const userDrag = useSharedValue<number>(0);\n\n const appliedTranslation = useSharedValue<number>(0);\n\n const rowWidth = useSharedValue<number>(0);\n const leftWidth = useSharedValue<number>(0);\n const rightWidth = useSharedValue<number>(0);\n\n // used for synchronizing layout measurements between JS and UI\n const rightOffset = useSharedValue<number | null>(null);\n\n const showLeftProgress = useSharedValue<number>(0);\n const showRightProgress = useSharedValue<number>(0);\n\n const updateRightElementWidth = useCallback(() => {\n 'worklet';\n if (rightOffset.value === null) {\n rightOffset.value = rowWidth.value;\n }\n rightWidth.value = Math.max(0, rowWidth.value - rightOffset.value);\n }, [rightOffset, rightWidth, rowWidth]);\n\n const updateAnimatedEvent = useCallback(() => {\n 'worklet';\n\n const shouldOvershootLeft = overshootLeft ?? leftWidth.value > 0;\n const shouldOvershootRight = overshootRight ?? rightWidth.value > 0;\n\n const startOffset =\n rowState.value === 1\n ? leftWidth.value\n : rowState.value === -1\n ? -rightWidth.value\n : 0;\n\n const offsetDrag = userDrag.value / friction + startOffset;\n\n appliedTranslation.value = interpolate(\n offsetDrag,\n [\n -rightWidth.value - 1,\n -rightWidth.value,\n leftWidth.value,\n leftWidth.value + 1,\n ],\n [\n -rightWidth.value -\n (shouldOvershootRight ? 1 / overshootFriction : 0),\n -rightWidth.value,\n leftWidth.value,\n leftWidth.value + (shouldOvershootLeft ? 1 / overshootFriction : 0),\n ]\n );\n\n showLeftProgress.value =\n leftWidth.value > 0\n ? interpolate(\n appliedTranslation.value,\n [-1, 0, leftWidth.value],\n [0, 0, 1]\n )\n : 0;\n\n showRightProgress.value =\n rightWidth.value > 0\n ? interpolate(\n appliedTranslation.value,\n [-rightWidth.value, 0, 1],\n [1, 0, 0]\n )\n : 0;\n }, [\n appliedTranslation,\n friction,\n leftWidth,\n overshootFriction,\n rightWidth,\n rowState,\n showLeftProgress,\n showRightProgress,\n userDrag,\n overshootLeft,\n overshootRight,\n ]);\n\n const dispatchImmediateEvents = useCallback(\n (fromValue: number, toValue: number) => {\n 'worklet';\n if (toValue > 0 && onSwipeableWillOpen) {\n runOnJS(onSwipeableWillOpen)(SwipeDirection.RIGHT);\n } else if (toValue < 0 && onSwipeableWillOpen) {\n runOnJS(onSwipeableWillOpen)(SwipeDirection.LEFT);\n } else if (onSwipeableWillClose) {\n runOnJS(onSwipeableWillClose)(\n fromValue > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT\n );\n }\n },\n [onSwipeableWillClose, onSwipeableWillOpen]\n );\n\n const dispatchEndEvents = useCallback(\n (fromValue: number, toValue: number) => {\n 'worklet';\n if (toValue > 0 && onSwipeableOpen) {\n runOnJS(onSwipeableOpen)(SwipeDirection.RIGHT);\n } else if (toValue < 0 && onSwipeableOpen) {\n runOnJS(onSwipeableOpen)(SwipeDirection.LEFT);\n } else if (onSwipeableClose) {\n runOnJS(onSwipeableClose)(\n fromValue > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT\n );\n }\n },\n [onSwipeableClose, onSwipeableOpen]\n );\n\n const animateRow: (toValue: number, velocityX?: number) => void =\n useCallback(\n (toValue: number, velocityX?: number) => {\n 'worklet';\n\n const translationSpringConfig = {\n duration: 1000,\n dampingRatio: 0.9,\n stiffness: 500,\n velocity: velocityX,\n overshootClamping: true,\n ...animationOptions,\n };\n\n const isClosing = toValue === 0;\n const moveToRight = isClosing ? rowState.value < 0 : toValue > 0;\n\n const usedWidth = isClosing\n ? moveToRight\n ? rightWidth.value\n : leftWidth.value\n : moveToRight\n ? leftWidth.value\n : rightWidth.value;\n\n const progressSpringConfig = {\n ...translationSpringConfig,\n restDisplacementThreshold: 0.01,\n restSpeedThreshold: 0.01,\n velocity:\n velocityX &&\n interpolate(velocityX, [-usedWidth, usedWidth], [-1, 1]),\n };\n\n const frozenRowState = rowState.value;\n\n appliedTranslation.value = withSpring(\n toValue,\n translationSpringConfig,\n (isFinished) => {\n if (isFinished) {\n dispatchEndEvents(frozenRowState, toValue);\n }\n }\n );\n\n const progressTarget = toValue === 0 ? 0 : 1;\n\n showLeftProgress.value =\n leftWidth.value > 0\n ? withSpring(progressTarget, progressSpringConfig)\n : 0;\n showRightProgress.value =\n rightWidth.value > 0\n ? withSpring(progressTarget, progressSpringConfig)\n : 0;\n\n dispatchImmediateEvents(frozenRowState, toValue);\n\n rowState.value = Math.sign(toValue);\n },\n [\n rowState,\n animationOptions,\n appliedTranslation,\n showLeftProgress,\n leftWidth,\n showRightProgress,\n rightWidth,\n dispatchImmediateEvents,\n dispatchEndEvents,\n ]\n );\n\n const swipeableMethods = useMemo<SwipeableMethods>(\n () => ({\n close() {\n 'worklet';\n animateRow(0);\n },\n openLeft() {\n 'worklet';\n animateRow(leftWidth.value);\n },\n openRight() {\n 'worklet';\n // rightOffset and rowWidth are already much sooner than rightWidth\n animateRow((rightOffset.value ?? 0) - rowWidth.value);\n },\n reset() {\n 'worklet';\n userDrag.value = 0;\n showLeftProgress.value = 0;\n appliedTranslation.value = 0;\n rowState.value = 0;\n },\n }),\n [\n leftWidth,\n rightOffset,\n rowWidth,\n userDrag,\n showLeftProgress,\n appliedTranslation,\n rowState,\n animateRow,\n ]\n );\n\n const onRowLayout = useCallback(\n ({ nativeEvent }: LayoutChangeEvent) => {\n rowWidth.value = nativeEvent.layout.width;\n },\n [rowWidth]\n );\n\n const leftElement = useCallback(\n () => (\n <Animated.View style={[styles.leftActions]}>\n {renderLeftActions?.(\n showLeftProgress,\n appliedTranslation,\n swipeableMethods\n )}\n <View\n onLayout={({ nativeEvent }) =>\n (leftWidth.value = nativeEvent.layout.x)\n }\n />\n </Animated.View>\n ),\n [\n appliedTranslation,\n leftWidth,\n renderLeftActions,\n showLeftProgress,\n swipeableMethods,\n ]\n );\n\n const rightElement = useCallback(\n () => (\n <Animated.View style={[styles.rightActions]}>\n {renderRightActions?.(\n showRightProgress,\n appliedTranslation,\n swipeableMethods\n )}\n <View\n onLayout={({ nativeEvent }) => {\n rightOffset.value = nativeEvent.layout.x;\n }}\n />\n </Animated.View>\n ),\n [\n appliedTranslation,\n renderRightActions,\n rightOffset,\n showRightProgress,\n swipeableMethods,\n ]\n );\n\n const handleRelease = useCallback(\n (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {\n 'worklet';\n const { velocityX } = event;\n userDrag.value = event.translationX;\n\n updateRightElementWidth();\n\n const leftThresholdProp = leftThreshold ?? leftWidth.value / 2;\n const rightThresholdProp = rightThreshold ?? rightWidth.value / 2;\n\n const translationX =\n (userDrag.value + DRAG_TOSS * velocityX) / friction;\n\n let toValue = 0;\n\n if (rowState.value === 0) {\n if (translationX > leftThresholdProp) {\n toValue = leftWidth.value;\n } else if (translationX < -rightThresholdProp) {\n toValue = -rightWidth.value;\n }\n } else if (rowState.value === 1) {\n // Swiped to left\n if (translationX > -leftThresholdProp) {\n toValue = leftWidth.value;\n }\n } else {\n // Swiped to right\n if (translationX < rightThresholdProp) {\n toValue = -rightWidth.value;\n }\n }\n\n animateRow(toValue, velocityX / friction);\n },\n [\n animateRow,\n friction,\n leftThreshold,\n leftWidth,\n rightThreshold,\n rightWidth,\n rowState,\n userDrag,\n updateRightElementWidth,\n ]\n );\n\n const close = useCallback(() => {\n 'worklet';\n animateRow(0);\n }, [animateRow]);\n\n const dragStarted = useSharedValue<boolean>(false);\n\n const tapGesture = useMemo(\n () =>\n Gesture.Tap()\n .shouldCancelWhenOutside(true)\n .onStart(() => {\n if (rowState.value !== 0) {\n close();\n }\n }),\n [close, rowState]\n );\n\n const panGesture = useMemo(\n () =>\n Gesture.Pan()\n .enabled(enabled !== false)\n .enableTrackpadTwoFingerGesture(enableTrackpadTwoFingerGesture)\n .activeOffsetX([-dragOffsetFromRightEdge, dragOffsetFromLeftEdge])\n .onStart(() => {\n updateRightElementWidth();\n })\n .onUpdate(\n (event: GestureUpdateEvent<PanGestureHandlerEventPayload>) => {\n userDrag.value = event.translationX;\n\n const direction =\n rowState.value === -1\n ? SwipeDirection.RIGHT\n : rowState.value === 1\n ? SwipeDirection.LEFT\n : event.translationX > 0\n ? SwipeDirection.RIGHT\n : SwipeDirection.LEFT;\n\n if (!dragStarted.value) {\n dragStarted.value = true;\n if (rowState.value === 0 && onSwipeableOpenStartDrag) {\n runOnJS(onSwipeableOpenStartDrag)(direction);\n } else if (onSwipeableCloseStartDrag) {\n runOnJS(onSwipeableCloseStartDrag)(direction);\n }\n }\n\n updateAnimatedEvent();\n }\n )\n .onEnd(\n (event: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {\n handleRelease(event);\n }\n )\n .onFinalize(() => {\n dragStarted.value = false;\n }),\n [\n dragOffsetFromLeftEdge,\n dragOffsetFromRightEdge,\n dragStarted,\n enableTrackpadTwoFingerGesture,\n enabled,\n handleRelease,\n onSwipeableCloseStartDrag,\n onSwipeableOpenStartDrag,\n rowState,\n updateAnimatedEvent,\n updateRightElementWidth,\n userDrag,\n ]\n );\n\n useImperativeHandle(ref, () => swipeableMethods, [swipeableMethods]);\n\n const animatedStyle = useAnimatedStyle(\n () => ({\n transform: [{ translateX: appliedTranslation.value }],\n pointerEvents: rowState.value === 0 ? 'auto' : 'box-only',\n }),\n [appliedTranslation, rowState]\n );\n\n const swipeableComponent = (\n <GestureDetector gesture={panGesture} touchAction=\"pan-y\">\n <Animated.View\n {...remainingProps}\n onLayout={onRowLayout}\n style={[styles.container, containerStyle]}>\n {leftElement()}\n {rightElement()}\n <GestureDetector gesture={tapGesture} touchAction=\"pan-y\">\n <Animated.View style={[animatedStyle, childrenContainerStyle]}>\n {children}\n </Animated.View>\n </GestureDetector>\n </Animated.View>\n </GestureDetector>\n );\n\n return testID ? (\n <View testID={testID}>{swipeableComponent}</View>\n ) : (\n swipeableComponent\n );\n }\n);\n\nexport default Swipeable;\nexport type SwipeableRef = ForwardedRef<SwipeableMethods>;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n leftActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row-reverse' : 'row',\n },\n rightActions: {\n ...StyleSheet.absoluteFillObject,\n flexDirection: I18nManager.isRTL ? 'row' : 'row-reverse',\n },\n});\n"]}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _reactNative = require("react-native");
9
+
10
+ var _default = _reactNative.findNodeHandle;
11
+ exports.default = _default;
12
+ //# sourceMappingURL=findNodeHandle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["findNodeHandle.ts"],"names":["findNodeHandle"],"mappings":";;;;;;;AAAA;;eAEeA,2B","sourcesContent":["import { findNodeHandle } from 'react-native';\n\nexport default findNodeHandle;\n"]}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = findNodeHandle;
7
+
8
+ var _utils = require("./web/utils");
9
+
10
+ function findNodeHandle(viewRef) {
11
+ // Old API assumes that child handler is HTMLElement.
12
+ // However, if we nest handlers, we will get ref to another handler.
13
+ // In that case, we want to recursively call findNodeHandle with new handler viewTag (which can also be ref to another handler).
14
+ if ((viewRef === null || viewRef === void 0 ? void 0 : viewRef.viewTag) !== undefined) {
15
+ return findNodeHandle(viewRef.viewTag);
16
+ }
17
+
18
+ if (viewRef instanceof Element) {
19
+ if (viewRef.style.display === 'contents') {
20
+ return findNodeHandle(viewRef.firstChild);
21
+ }
22
+
23
+ return viewRef;
24
+ }
25
+
26
+ if ((0, _utils.isRNSVGElement)(viewRef)) {
27
+ return viewRef.elementRef.current;
28
+ } // In new API, we receive ref object which `current` field points to wrapper `div` with `display: contents;`.
29
+ // We want to return the first descendant (in DFS order) that doesn't have this property.
30
+
31
+
32
+ let element = viewRef === null || viewRef === void 0 ? void 0 : viewRef.current;
33
+
34
+ while (element && element.style.display === 'contents') {
35
+ element = element.firstChild;
36
+ }
37
+
38
+ return element;
39
+ }
40
+ //# sourceMappingURL=findNodeHandle.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["findNodeHandle.web.ts"],"names":["findNodeHandle","viewRef","viewTag","undefined","Element","style","display","firstChild","elementRef","current","element"],"mappings":";;;;;;;AACA;;AAEe,SAASA,cAAT,CACbC,OADa,EAEsB;AACnC;AACA;AACA;AACA,MAAI,CAACA,OAAD,aAACA,OAAD,uBAACA,OAAD,CAAgCC,OAAhC,MAA4CC,SAAhD,EAA2D;AACzD,WAAOH,cAAc,CAAEC,OAAD,CAA+BC,OAAhC,CAArB;AACD;;AAED,MAAID,OAAO,YAAYG,OAAvB,EAAgC;AAC9B,QAAIH,OAAO,CAACI,KAAR,CAAcC,OAAd,KAA0B,UAA9B,EAA0C;AACxC,aAAON,cAAc,CAACC,OAAO,CAACM,UAAT,CAArB;AACD;;AAED,WAAON,OAAP;AACD;;AAED,MAAI,2BAAeA,OAAf,CAAJ,EAA6B;AAC3B,WAAQA,OAAD,CAAoBO,UAApB,CAA+BC,OAAtC;AACD,GAlBkC,CAoBnC;AACA;;;AACA,MAAIC,OAAO,GAAIT,OAAJ,aAAIA,OAAJ,uBAAIA,OAAD,CAAgCQ,OAA9C;;AAEA,SAAOC,OAAO,IAAIA,OAAO,CAACL,KAAR,CAAcC,OAAd,KAA0B,UAA5C,EAAwD;AACtDI,IAAAA,OAAO,GAAGA,OAAO,CAACH,UAAlB;AACD;;AAED,SAAOG,OAAP;AACD","sourcesContent":["import type { GestureHandlerRef, SVGRef } from './web/interfaces';\nimport { isRNSVGElement } from './web/utils';\n\nexport default function findNodeHandle(\n viewRef: GestureHandlerRef | SVGRef | HTMLElement | SVGElement\n): HTMLElement | SVGElement | number {\n // Old API assumes that child handler is HTMLElement.\n // However, if we nest handlers, we will get ref to another handler.\n // In that case, we want to recursively call findNodeHandle with new handler viewTag (which can also be ref to another handler).\n if ((viewRef as GestureHandlerRef)?.viewTag !== undefined) {\n return findNodeHandle((viewRef as GestureHandlerRef).viewTag);\n }\n\n if (viewRef instanceof Element) {\n if (viewRef.style.display === 'contents') {\n return findNodeHandle(viewRef.firstChild as HTMLElement);\n }\n\n return viewRef;\n }\n\n if (isRNSVGElement(viewRef)) {\n return (viewRef as SVGRef).elementRef.current;\n }\n\n // In new API, we receive ref object which `current` field points to wrapper `div` with `display: contents;`.\n // We want to return the first descendant (in DFS order) that doesn't have this property.\n let element = (viewRef as GestureHandlerRef)?.current;\n\n while (element && element.style.display === 'contents') {\n element = element.firstChild as HTMLElement;\n }\n\n return element;\n}\n"]}