react-native-gesture-handler 2.13.4 → 2.14.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 (158) hide show
  1. package/android/build.gradle +3 -2
  2. package/android/gradle.properties +2 -2
  3. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +36 -72
  4. package/android/src/main/java/com/swmansion/gesturehandler/react/Extensions.kt +1 -1
  5. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +12 -14
  6. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +8 -1
  7. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +34 -88
  8. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +1 -1
  9. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +18 -12
  10. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/FlingGestureHandlerEventDataBuilder.kt +30 -0
  11. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/GestureHandlerEventDataBuilder.kt +22 -0
  12. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/HoverGestureHandlerEventDataBuilder.kt +30 -0
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/LongPressGestureHandlerEventDataBuilder.kt +33 -0
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/ManualGestureHandlerEventDataBuilder.kt +5 -0
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/NativeGestureHandlerEventDataBuilder.kt +18 -0
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PanGestureHandlerEventDataBuilder.kt +42 -0
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PinchGestureHandlerEventDataBuilder.kt +30 -0
  18. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/RotationGestureHandlerEventDataBuilder.kt +30 -0
  19. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/TapGestureHandlerEventDataBuilder.kt +30 -0
  20. package/android/src/main/jni/CMakeLists.txt +14 -2
  21. package/ios/Handlers/RNHoverHandler.m +15 -14
  22. package/ios/RNGestureHandler.m +11 -0
  23. package/ios/RNGestureHandlerButtonComponentView.mm +2 -0
  24. package/lib/commonjs/components/gestureHandlerRootHOC.js.map +1 -1
  25. package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js +1 -1
  26. package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  27. package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js.map +1 -1
  28. package/lib/commonjs/getReactNativeVersion.js +22 -0
  29. package/lib/commonjs/getReactNativeVersion.js.map +1 -0
  30. package/lib/commonjs/getReactNativeVersion.web.js +11 -0
  31. package/lib/commonjs/getReactNativeVersion.web.js.map +1 -0
  32. package/lib/commonjs/handlers/gestureHandlerCommon.js +1 -1
  33. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  34. package/lib/commonjs/handlers/gestures/GestureDetector.js +13 -3
  35. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  36. package/lib/commonjs/handlers/gestures/gesture.js +8 -0
  37. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  38. package/lib/commonjs/handlers/gestures/gestureStateManager.js +39 -37
  39. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
  40. package/lib/commonjs/utils.js +0 -13
  41. package/lib/commonjs/utils.js.map +1 -1
  42. package/lib/commonjs/web/handlers/FlingGestureHandler.js +4 -6
  43. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  44. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  45. package/lib/commonjs/web/interfaces.js.map +1 -1
  46. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +4 -15
  47. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  48. package/lib/commonjs/web/tools/InteractionManager.js +27 -29
  49. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  50. package/lib/commonjs/web/tools/PointerEventManager.js +13 -3
  51. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  52. package/lib/module/components/gestureHandlerRootHOC.js.map +1 -1
  53. package/lib/module/components/touchables/TouchableNativeFeedback.android.js +1 -1
  54. package/lib/module/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  55. package/lib/module/components/touchables/TouchableWithoutFeedback.js.map +1 -1
  56. package/lib/module/getReactNativeVersion.js +10 -0
  57. package/lib/module/getReactNativeVersion.js.map +1 -0
  58. package/lib/module/getReactNativeVersion.web.js +4 -0
  59. package/lib/module/getReactNativeVersion.web.js.map +1 -0
  60. package/lib/module/handlers/gestureHandlerCommon.js +1 -1
  61. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  62. package/lib/module/handlers/gestures/GestureDetector.js +12 -3
  63. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  64. package/lib/module/handlers/gestures/gesture.js +8 -0
  65. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  66. package/lib/module/handlers/gestures/gestureStateManager.js +44 -42
  67. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  68. package/lib/module/utils.js +0 -6
  69. package/lib/module/utils.js.map +1 -1
  70. package/lib/module/web/handlers/FlingGestureHandler.js +4 -6
  71. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  72. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  73. package/lib/module/web/interfaces.js.map +1 -1
  74. package/lib/module/web/tools/GestureHandlerOrchestrator.js +4 -15
  75. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  76. package/lib/module/web/tools/InteractionManager.js +27 -29
  77. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  78. package/lib/module/web/tools/PointerEventManager.js +12 -3
  79. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  80. package/lib/typescript/ActionType.d.ts +1 -1
  81. package/lib/typescript/Directions.d.ts +1 -1
  82. package/lib/typescript/PlatformConstants.d.ts +1 -1
  83. package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
  84. package/lib/typescript/State.d.ts +1 -1
  85. package/lib/typescript/TouchEventType.d.ts +1 -1
  86. package/lib/typescript/components/DrawerLayout.d.ts +9 -9
  87. package/lib/typescript/components/GestureButtons.d.ts +3 -3
  88. package/lib/typescript/components/GestureComponents.d.ts +6 -6
  89. package/lib/typescript/components/GestureComponents.web.d.ts +1 -1
  90. package/lib/typescript/components/GestureHandlerRootView.android.d.ts +2 -1
  91. package/lib/typescript/components/GestureHandlerRootView.d.ts +2 -1
  92. package/lib/typescript/components/GestureHandlerRootView.web.d.ts +2 -1
  93. package/lib/typescript/components/Swipeable.d.ts +4 -4
  94. package/lib/typescript/components/gestureHandlerRootHOC.d.ts +1 -1
  95. package/lib/typescript/components/touchables/GenericTouchable.d.ts +4 -3
  96. package/lib/typescript/components/touchables/TouchableHighlight.d.ts +4 -3
  97. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +7 -6
  98. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +3 -2
  99. package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +1 -1
  100. package/lib/typescript/getReactNativeVersion.d.ts +4 -0
  101. package/lib/typescript/getReactNativeVersion.web.d.ts +1 -0
  102. package/lib/typescript/handlers/FlingGestureHandler.d.ts +2 -2
  103. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -2
  104. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +2 -2
  105. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +3 -3
  106. package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -2
  107. package/lib/typescript/handlers/PinchGestureHandler.d.ts +2 -2
  108. package/lib/typescript/handlers/RotationGestureHandler.d.ts +2 -2
  109. package/lib/typescript/handlers/TapGestureHandler.d.ts +2 -2
  110. package/lib/typescript/handlers/createHandler.d.ts +1 -1
  111. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +11 -10
  112. package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +32 -32
  113. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -2
  114. package/lib/typescript/handlers/gestures/flingGesture.d.ts +1 -1
  115. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +2 -2
  116. package/lib/typescript/handlers/gestures/gesture.d.ts +7 -5
  117. package/lib/typescript/handlers/gestures/gestureComposition.d.ts +4 -4
  118. package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +3 -1
  119. package/lib/typescript/handlers/gestures/hoverGesture.d.ts +3 -3
  120. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +1 -1
  121. package/lib/typescript/handlers/gestures/manualGesture.d.ts +1 -1
  122. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +1 -1
  123. package/lib/typescript/handlers/gestures/panGesture.d.ts +2 -2
  124. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +2 -2
  125. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +2 -2
  126. package/lib/typescript/handlers/gestures/tapGesture.d.ts +1 -1
  127. package/lib/typescript/jestUtils/jestUtils.d.ts +6 -6
  128. package/lib/typescript/typeUtils.d.ts +1 -1
  129. package/lib/typescript/utils.d.ts +1 -5
  130. package/lib/typescript/web/interfaces.d.ts +4 -3
  131. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +0 -1
  132. package/lib/typescript/web/tools/InteractionManager.d.ts +2 -1
  133. package/lib/typescript/web_hammer/GestureHandler.d.ts +2 -2
  134. package/package.json +7 -7
  135. package/src/components/gestureHandlerRootHOC.tsx +1 -3
  136. package/src/components/touchables/TouchableNativeFeedback.android.tsx +2 -1
  137. package/src/components/touchables/TouchableWithoutFeedback.tsx +3 -3
  138. package/src/getReactNativeVersion.ts +11 -0
  139. package/src/getReactNativeVersion.web.ts +3 -0
  140. package/src/handlers/gestureHandlerCommon.ts +6 -1
  141. package/src/handlers/gestures/GestureDetector.tsx +9 -6
  142. package/src/handlers/gestures/gesture.ts +9 -1
  143. package/src/handlers/gestures/gestureStateManager.ts +42 -40
  144. package/src/utils.ts +0 -8
  145. package/src/web/handlers/FlingGestureHandler.ts +5 -5
  146. package/src/web/handlers/GestureHandler.ts +1 -1
  147. package/src/web/interfaces.ts +1 -0
  148. package/src/web/tools/GestureHandlerOrchestrator.ts +4 -13
  149. package/src/web/tools/InteractionManager.ts +37 -30
  150. package/src/web/tools/PointerEventManager.ts +14 -3
  151. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +0 -8
  152. /package/android/{src/fabric → fabric/src/main}/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +0 -0
  153. /package/android/{src/fabric → fabric/src/main}/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +0 -0
  154. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +0 -0
  155. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +0 -0
  156. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerDelegate.java +0 -0
  157. /package/android/{src/paper → paper/src/main}/java/com/facebook/react/viewmanagers/RNGestureHandlerRootViewManagerInterface.java +0 -0
  158. /package/android/{src/paper → paper/src/main}/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +0 -0
@@ -12,21 +12,29 @@ import com.facebook.react.bridge.WritableMap
12
12
  import com.facebook.react.uimanager.events.Event
13
13
  import com.facebook.react.uimanager.events.RCTEventEmitter
14
14
  import com.swmansion.gesturehandler.core.GestureHandler
15
+ import com.swmansion.gesturehandler.react.eventbuilders.GestureHandlerEventDataBuilder
15
16
 
16
17
  class RNGestureHandlerStateChangeEvent private constructor() : Event<RNGestureHandlerStateChangeEvent>() {
17
- private var extraData: WritableMap? = null
18
+ private var dataBuilder: GestureHandlerEventDataBuilder<*>? = null
19
+ private var newState: Int = GestureHandler.STATE_UNDETERMINED
20
+ private var oldState: Int = GestureHandler.STATE_UNDETERMINED
21
+
18
22
  private fun <T : GestureHandler<T>> init(
19
23
  handler: T,
20
24
  newState: Int,
21
25
  oldState: Int,
22
- dataExtractor: RNGestureHandlerEventDataExtractor<T>?,
26
+ dataBuilder: GestureHandlerEventDataBuilder<T>,
23
27
  ) {
24
28
  super.init(handler.view!!.id)
25
- extraData = createEventData(handler, dataExtractor, newState, oldState)
29
+ this.dataBuilder = dataBuilder
30
+ this.newState = newState
31
+ this.oldState = oldState
26
32
  }
27
33
 
28
34
  override fun onDispose() {
29
- extraData = null
35
+ dataBuilder = null
36
+ newState = GestureHandler.STATE_UNDETERMINED
37
+ oldState = GestureHandler.STATE_UNDETERMINED
30
38
  EVENTS_POOL.release(this)
31
39
  }
32
40
 
@@ -39,7 +47,7 @@ class RNGestureHandlerStateChangeEvent private constructor() : Event<RNGestureHa
39
47
  override fun getCoalescingKey(): Short = 0
40
48
 
41
49
  override fun dispatch(rctEventEmitter: RCTEventEmitter) {
42
- rctEventEmitter.receiveEvent(viewTag, EVENT_NAME, extraData)
50
+ rctEventEmitter.receiveEvent(viewTag, EVENT_NAME, createEventData(dataBuilder!!, newState, oldState))
43
51
  }
44
52
 
45
53
  companion object {
@@ -51,20 +59,18 @@ class RNGestureHandlerStateChangeEvent private constructor() : Event<RNGestureHa
51
59
  handler: T,
52
60
  newState: Int,
53
61
  oldState: Int,
54
- dataExtractor: RNGestureHandlerEventDataExtractor<T>?,
62
+ dataBuilder: GestureHandlerEventDataBuilder<T>,
55
63
  ): RNGestureHandlerStateChangeEvent =
56
64
  (EVENTS_POOL.acquire() ?: RNGestureHandlerStateChangeEvent()).apply {
57
- init(handler, newState, oldState, dataExtractor)
65
+ init(handler, newState, oldState, dataBuilder)
58
66
  }
59
67
 
60
- fun <T : GestureHandler<T>> createEventData(
61
- handler: T,
62
- dataExtractor: RNGestureHandlerEventDataExtractor<T>?,
68
+ fun createEventData(
69
+ dataBuilder: GestureHandlerEventDataBuilder<*>,
63
70
  newState: Int,
64
71
  oldState: Int,
65
72
  ): WritableMap = Arguments.createMap().apply {
66
- dataExtractor?.extractEventData(handler, this)
67
- putInt("handlerTag", handler.tag)
73
+ dataBuilder.buildEventData(this)
68
74
  putInt("state", newState)
69
75
  putInt("oldState", oldState)
70
76
  }
@@ -0,0 +1,30 @@
1
+ package com.swmansion.gesturehandler.react.eventbuilders
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.PixelUtil
5
+ import com.swmansion.gesturehandler.core.FlingGestureHandler
6
+
7
+ class FlingGestureHandlerEventDataBuilder(handler: FlingGestureHandler) : GestureHandlerEventDataBuilder<FlingGestureHandler>(handler) {
8
+ private val x: Float
9
+ private val y: Float
10
+ private val absoluteX: Float
11
+ private val absoluteY: Float
12
+
13
+ init {
14
+ x = handler.lastRelativePositionX
15
+ y = handler.lastRelativePositionY
16
+ absoluteX = handler.lastPositionInWindowX
17
+ absoluteY = handler.lastPositionInWindowY
18
+ }
19
+
20
+ override fun buildEventData(eventData: WritableMap) {
21
+ super.buildEventData(eventData)
22
+
23
+ with(eventData) {
24
+ putDouble("x", PixelUtil.toDIPFromPixel(x).toDouble())
25
+ putDouble("y", PixelUtil.toDIPFromPixel(y).toDouble())
26
+ putDouble("absoluteX", PixelUtil.toDIPFromPixel(absoluteX).toDouble())
27
+ putDouble("absoluteY", PixelUtil.toDIPFromPixel(absoluteY).toDouble())
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,22 @@
1
+ package com.swmansion.gesturehandler.react.eventbuilders
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.swmansion.gesturehandler.core.GestureHandler
5
+
6
+ abstract class GestureHandlerEventDataBuilder<T : GestureHandler<T>>(handler: T) {
7
+ private val numberOfPointers: Int
8
+ private val handlerTag: Int
9
+ private val state: Int
10
+
11
+ init {
12
+ numberOfPointers = handler.numberOfPointers
13
+ handlerTag = handler.tag
14
+ state = handler.state
15
+ }
16
+
17
+ open fun buildEventData(eventData: WritableMap) {
18
+ eventData.putInt("numberOfPointers", numberOfPointers)
19
+ eventData.putInt("handlerTag", handlerTag)
20
+ eventData.putInt("state", state)
21
+ }
22
+ }
@@ -0,0 +1,30 @@
1
+ package com.swmansion.gesturehandler.react.eventbuilders
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.PixelUtil
5
+ import com.swmansion.gesturehandler.core.HoverGestureHandler
6
+
7
+ class HoverGestureHandlerEventDataBuilder(handler: HoverGestureHandler) : GestureHandlerEventDataBuilder<HoverGestureHandler>(handler) {
8
+ private val x: Float
9
+ private val y: Float
10
+ private val absoluteX: Float
11
+ private val absoluteY: Float
12
+
13
+ init {
14
+ x = handler.lastRelativePositionX
15
+ y = handler.lastRelativePositionY
16
+ absoluteX = handler.lastPositionInWindowX
17
+ absoluteY = handler.lastPositionInWindowY
18
+ }
19
+
20
+ override fun buildEventData(eventData: WritableMap) {
21
+ super.buildEventData(eventData)
22
+
23
+ with(eventData) {
24
+ putDouble("x", PixelUtil.toDIPFromPixel(x).toDouble())
25
+ putDouble("y", PixelUtil.toDIPFromPixel(y).toDouble())
26
+ putDouble("absoluteX", PixelUtil.toDIPFromPixel(absoluteX).toDouble())
27
+ putDouble("absoluteY", PixelUtil.toDIPFromPixel(absoluteY).toDouble())
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,33 @@
1
+ package com.swmansion.gesturehandler.react.eventbuilders
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.PixelUtil
5
+ import com.swmansion.gesturehandler.core.LongPressGestureHandler
6
+
7
+ class LongPressGestureHandlerEventDataBuilder(handler: LongPressGestureHandler) : GestureHandlerEventDataBuilder<LongPressGestureHandler>(handler) {
8
+ private val x: Float
9
+ private val y: Float
10
+ private val absoluteX: Float
11
+ private val absoluteY: Float
12
+ private val duration: Int
13
+
14
+ init {
15
+ x = handler.lastRelativePositionX
16
+ y = handler.lastRelativePositionY
17
+ absoluteX = handler.lastPositionInWindowX
18
+ absoluteY = handler.lastPositionInWindowY
19
+ duration = handler.duration
20
+ }
21
+
22
+ override fun buildEventData(eventData: WritableMap) {
23
+ super.buildEventData(eventData)
24
+
25
+ with(eventData) {
26
+ putDouble("x", PixelUtil.toDIPFromPixel(x).toDouble())
27
+ putDouble("y", PixelUtil.toDIPFromPixel(y).toDouble())
28
+ putDouble("absoluteX", PixelUtil.toDIPFromPixel(absoluteX).toDouble())
29
+ putDouble("absoluteY", PixelUtil.toDIPFromPixel(absoluteY).toDouble())
30
+ putInt("duration", duration)
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,5 @@
1
+ package com.swmansion.gesturehandler.react.eventbuilders
2
+
3
+ import com.swmansion.gesturehandler.core.ManualGestureHandler
4
+
5
+ class ManualGestureHandlerEventDataBuilder(handler: ManualGestureHandler) : GestureHandlerEventDataBuilder<ManualGestureHandler>(handler)
@@ -0,0 +1,18 @@
1
+ package com.swmansion.gesturehandler.react.eventbuilders
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.swmansion.gesturehandler.core.NativeViewGestureHandler
5
+
6
+ class NativeGestureHandlerEventDataBuilder(handler: NativeViewGestureHandler) : GestureHandlerEventDataBuilder<NativeViewGestureHandler>(handler) {
7
+ private val pointerInside: Boolean
8
+
9
+ init {
10
+ pointerInside = handler.isWithinBounds
11
+ }
12
+
13
+ override fun buildEventData(eventData: WritableMap) {
14
+ super.buildEventData(eventData)
15
+
16
+ eventData.putBoolean("pointerInside", pointerInside)
17
+ }
18
+ }
@@ -0,0 +1,42 @@
1
+ package com.swmansion.gesturehandler.react.eventbuilders
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.PixelUtil
5
+ import com.swmansion.gesturehandler.core.PanGestureHandler
6
+
7
+ class PanGestureHandlerEventDataBuilder(handler: PanGestureHandler) : GestureHandlerEventDataBuilder<PanGestureHandler>(handler) {
8
+ private val x: Float
9
+ private val y: Float
10
+ private val absoluteX: Float
11
+ private val absoluteY: Float
12
+ private val translationX: Float
13
+ private val translationY: Float
14
+ private val velocityX: Float
15
+ private val velocityY: Float
16
+
17
+ init {
18
+ x = handler.lastRelativePositionX
19
+ y = handler.lastRelativePositionY
20
+ absoluteX = handler.lastPositionInWindowX
21
+ absoluteY = handler.lastPositionInWindowY
22
+ translationX = handler.translationX
23
+ translationY = handler.translationY
24
+ velocityX = handler.velocityX
25
+ velocityY = handler.velocityY
26
+ }
27
+
28
+ override fun buildEventData(eventData: WritableMap) {
29
+ super.buildEventData(eventData)
30
+
31
+ with(eventData) {
32
+ putDouble("x", PixelUtil.toDIPFromPixel(x).toDouble())
33
+ putDouble("y", PixelUtil.toDIPFromPixel(y).toDouble())
34
+ putDouble("absoluteX", PixelUtil.toDIPFromPixel(absoluteX).toDouble())
35
+ putDouble("absoluteY", PixelUtil.toDIPFromPixel(absoluteY).toDouble())
36
+ putDouble("translationX", PixelUtil.toDIPFromPixel(translationX).toDouble())
37
+ putDouble("translationY", PixelUtil.toDIPFromPixel(translationY).toDouble())
38
+ putDouble("velocityX", PixelUtil.toDIPFromPixel(velocityX).toDouble())
39
+ putDouble("velocityY", PixelUtil.toDIPFromPixel(velocityY).toDouble())
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,30 @@
1
+ package com.swmansion.gesturehandler.react.eventbuilders
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.PixelUtil
5
+ import com.swmansion.gesturehandler.core.PinchGestureHandler
6
+
7
+ class PinchGestureHandlerEventDataBuilder(handler: PinchGestureHandler) : GestureHandlerEventDataBuilder<PinchGestureHandler>(handler) {
8
+ private val scale: Double
9
+ private val focalX: Float
10
+ private val focalY: Float
11
+ private val velocity: Double
12
+
13
+ init {
14
+ scale = handler.scale
15
+ focalX = handler.focalPointX
16
+ focalY = handler.focalPointY
17
+ velocity = handler.velocity
18
+ }
19
+
20
+ override fun buildEventData(eventData: WritableMap) {
21
+ super.buildEventData(eventData)
22
+
23
+ with(eventData) {
24
+ putDouble("scale", scale)
25
+ putDouble("focalX", PixelUtil.toDIPFromPixel(focalX).toDouble())
26
+ putDouble("focalY", PixelUtil.toDIPFromPixel(focalY).toDouble())
27
+ putDouble("velocity", velocity)
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,30 @@
1
+ package com.swmansion.gesturehandler.react.eventbuilders
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.PixelUtil
5
+ import com.swmansion.gesturehandler.core.RotationGestureHandler
6
+
7
+ class RotationGestureHandlerEventDataBuilder(handler: RotationGestureHandler) : GestureHandlerEventDataBuilder<RotationGestureHandler>(handler) {
8
+ private val rotation: Double
9
+ private val anchorX: Float
10
+ private val anchorY: Float
11
+ private val velocity: Double
12
+
13
+ init {
14
+ rotation = handler.rotation
15
+ anchorX = handler.anchorX
16
+ anchorY = handler.anchorY
17
+ velocity = handler.velocity
18
+ }
19
+
20
+ override fun buildEventData(eventData: WritableMap) {
21
+ super.buildEventData(eventData)
22
+
23
+ with(eventData) {
24
+ putDouble("rotation", rotation)
25
+ putDouble("anchorX", PixelUtil.toDIPFromPixel(anchorX).toDouble())
26
+ putDouble("anchorY", PixelUtil.toDIPFromPixel(anchorY).toDouble())
27
+ putDouble("velocity", velocity)
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,30 @@
1
+ package com.swmansion.gesturehandler.react.eventbuilders
2
+
3
+ import com.facebook.react.bridge.WritableMap
4
+ import com.facebook.react.uimanager.PixelUtil
5
+ import com.swmansion.gesturehandler.core.TapGestureHandler
6
+
7
+ class TapGestureHandlerEventDataBuilder(handler: TapGestureHandler) : GestureHandlerEventDataBuilder<TapGestureHandler>(handler) {
8
+ private val x: Float
9
+ private val y: Float
10
+ private val absoluteX: Float
11
+ private val absoluteY: Float
12
+
13
+ init {
14
+ x = handler.lastRelativePositionX
15
+ y = handler.lastRelativePositionY
16
+ absoluteX = handler.lastPositionInWindowX
17
+ absoluteY = handler.lastPositionInWindowY
18
+ }
19
+
20
+ override fun buildEventData(eventData: WritableMap) {
21
+ super.buildEventData(eventData)
22
+
23
+ with(eventData) {
24
+ putDouble("x", PixelUtil.toDIPFromPixel(x).toDouble())
25
+ putDouble("y", PixelUtil.toDIPFromPixel(y).toDouble())
26
+ putDouble("absoluteX", PixelUtil.toDIPFromPixel(absoluteX).toDouble())
27
+ putDouble("absoluteY", PixelUtil.toDIPFromPixel(absoluteY).toDouble())
28
+ }
29
+ }
30
+ }
@@ -2,24 +2,36 @@ project(GestureHandler)
2
2
  cmake_minimum_required(VERSION 3.9.0)
3
3
 
4
4
  set(CMAKE_VERBOSE_MAKEFILE ON)
5
- set(CMAKE_CXX_STANDARD 17)
5
+ if(${REACT_NATIVE_MINOR_VERSION} GREATER_EQUAL 73)
6
+ set(CMAKE_CXX_STANDARD 20)
7
+ else()
8
+ set(CMAKE_CXX_STANDARD 17)
9
+ endif()
6
10
 
11
+ set(PACKAGE_NAME "gesturehandler")
7
12
  set(REACT_ANDROID_DIR "${REACT_NATIVE_DIR}/ReactAndroid")
8
13
 
9
14
  include(${REACT_ANDROID_DIR}/cmake-utils/folly-flags.cmake)
10
15
  add_compile_options(${folly_FLAGS})
11
16
 
12
- add_library(gesturehandler
17
+ add_library(${PACKAGE_NAME}
13
18
  SHARED
14
19
  cpp-adapter.cpp
15
20
  )
16
21
 
22
+ target_include_directories(
23
+ ${PACKAGE_NAME}
24
+ PRIVATE
25
+ "${REACT_NATIVE_DIR}/ReactCommon"
26
+ )
27
+
17
28
  find_package(ReactAndroid REQUIRED CONFIG)
18
29
 
19
30
  target_link_libraries(
20
31
  gesturehandler
21
32
  ReactAndroid::react_render_core
22
33
  ReactAndroid::react_render_uimanager
34
+ ReactAndroid::react_render_graphics
23
35
  ReactAndroid::jsi
24
36
  ReactAndroid::react_nativemodule_core
25
37
  )
@@ -10,14 +10,17 @@
10
10
  #import <React/RCTConvert.h>
11
11
  #import <UIKit/UIGestureRecognizerSubclass.h>
12
12
 
13
+ #define CHECK_TARGET(__VERSION__) \
14
+ defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_##__VERSION__) && \
15
+ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_##__VERSION__ && !TARGET_OS_TV
16
+
13
17
  typedef NS_ENUM(NSInteger, RNGestureHandlerHoverEffect) {
14
18
  RNGestureHandlerHoverEffectNone = 0,
15
19
  RNGestureHandlerHoverEffectLift,
16
20
  RNGestureHandlerHoverEffectHightlight,
17
21
  };
18
22
 
19
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_4) && \
20
- __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_4
23
+ #if CHECK_TARGET(13_4)
21
24
 
22
25
  API_AVAILABLE(ios(13.4))
23
26
  @interface RNBetterHoverGestureRecognizer : UIHoverGestureRecognizer <UIPointerInteractionDelegate>
@@ -74,17 +77,19 @@ API_AVAILABLE(ios(13.4))
74
77
  #endif
75
78
 
76
79
  @implementation RNHoverGestureHandler {
77
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_4) && \
78
- __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_4
80
+ #if CHECK_TARGET(13_4)
79
81
  UIPointerInteraction *_pointerInteraction;
80
82
  #endif
81
83
  }
82
84
 
83
85
  - (instancetype)initWithTag:(NSNumber *)tag
84
86
  {
87
+ #if TARGET_OS_TV
88
+ RCTLogWarn(@"Hover gesture handler is not supported on tvOS");
89
+ #endif
90
+
85
91
  if ((self = [super initWithTag:tag])) {
86
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_4) && \
87
- __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_4
92
+ #if CHECK_TARGET(13_4)
88
93
  if (@available(iOS 13.4, *)) {
89
94
  _recognizer = [[RNBetterHoverGestureRecognizer alloc] initWithGestureHandler:self];
90
95
  _pointerInteraction =
@@ -97,8 +102,7 @@ API_AVAILABLE(ios(13.4))
97
102
 
98
103
  - (void)bindToView:(UIView *)view
99
104
  {
100
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_4) && \
101
- __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_4
105
+ #if CHECK_TARGET(13_4)
102
106
  if (@available(iOS 13.4, *)) {
103
107
  [super bindToView:view];
104
108
  [view addInteraction:_pointerInteraction];
@@ -108,8 +112,7 @@ API_AVAILABLE(ios(13.4))
108
112
 
109
113
  - (void)unbindFromView
110
114
  {
111
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_4) && \
112
- __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_4
115
+ #if CHECK_TARGET(13_4)
113
116
  if (@available(iOS 13.4, *)) {
114
117
  [super unbindFromView];
115
118
  [self.recognizer.view removeInteraction:_pointerInteraction];
@@ -121,8 +124,7 @@ API_AVAILABLE(ios(13.4))
121
124
  {
122
125
  [super resetConfig];
123
126
 
124
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_4) && \
125
- __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_4
127
+ #if CHECK_TARGET(13_4)
126
128
  if (@available(iOS 13.4, *)) {
127
129
  RNBetterHoverGestureRecognizer *recognizer = (RNBetterHoverGestureRecognizer *)_recognizer;
128
130
  recognizer.hoverEffect = RNGestureHandlerHoverEffectNone;
@@ -134,8 +136,7 @@ API_AVAILABLE(ios(13.4))
134
136
  {
135
137
  [super configure:config];
136
138
 
137
- #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_4) && \
138
- __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_4
139
+ #if CHECK_TARGET(13_4)
139
140
  if (@available(iOS 13.4, *)) {
140
141
  RNBetterHoverGestureRecognizer *recognizer = (RNBetterHoverGestureRecognizer *)_recognizer;
141
142
  APPLY_INT_PROP(hoverEffect);
@@ -66,6 +66,7 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
66
66
  RNGestureHandlerState _state;
67
67
  RNManualActivationRecognizer *_manualActivationRecognizer;
68
68
  NSArray<NSNumber *> *_handlersToWaitFor;
69
+ NSArray<NSNumber *> *_handlersThatShouldWait;
69
70
  NSArray<NSNumber *> *_simultaneousHandlers;
70
71
  RNGHHitSlop _hitSlop;
71
72
  uint16_t _eventCoalescingKey;
@@ -98,6 +99,7 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
98
99
  _shouldCancelWhenOutside = NO;
99
100
  _handlersToWaitFor = nil;
100
101
  _simultaneousHandlers = nil;
102
+ _handlersThatShouldWait = nil;
101
103
  _hitSlop = RNGHHitSlopEmpty;
102
104
  _needsPointerData = NO;
103
105
 
@@ -109,6 +111,7 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
109
111
  [self resetConfig];
110
112
  _handlersToWaitFor = [RCTConvert NSNumberArray:config[@"waitFor"]];
111
113
  _simultaneousHandlers = [RCTConvert NSNumberArray:config[@"simultaneousHandlers"]];
114
+ _handlersThatShouldWait = [RCTConvert NSNumberArray:config[@"blocksHandlers"]];
112
115
 
113
116
  id prop = config[@"enabled"];
114
117
  if (prop != nil) {
@@ -380,6 +383,14 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
380
383
  }
381
384
  }
382
385
 
386
+ if (handler != nil) {
387
+ for (NSNumber *handlerTag in _handlersThatShouldWait) {
388
+ if ([handler.tag isEqual:handlerTag]) {
389
+ return YES;
390
+ }
391
+ }
392
+ }
393
+
383
394
  return NO;
384
395
  }
385
396
 
@@ -46,7 +46,9 @@ using namespace facebook::react;
46
46
  const auto &newProps = *std::static_pointer_cast<const RNGestureHandlerButtonProps>(props);
47
47
 
48
48
  _buttonView.userEnabled = newProps.enabled;
49
+ #if !TARGET_OS_TV
49
50
  _buttonView.exclusiveTouch = newProps.exclusive;
51
+ #endif
50
52
  _buttonView.hitTestEdgeInsets = UIEdgeInsetsMake(
51
53
  -newProps.hitSlop.top, -newProps.hitSlop.left, -newProps.hitSlop.bottom, -newProps.hitSlop.right);
52
54
 
@@ -1 +1 @@
1
- {"version":3,"sources":["gestureHandlerRootHOC.tsx"],"names":["gestureHandlerRootHOC","Component","containerStyles","Wrapper","props","styles","container","displayName","name","StyleSheet","create","flex"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;AAEe,SAASA,qBAAT,CAGbC,SAHa,EAIbC,eAJa,EAKW;AACxB,WAASC,OAAT,CAAiBC,KAAjB,EAA2B;AACzB,wBACE,oBAAC,+BAAD;AAAwB,MAAA,KAAK,EAAE,CAACC,MAAM,CAACC,SAAR,EAAmBJ,eAAnB;AAA/B,oBACE,oBAAC,SAAD,EAAeE,KAAf,CADF,CADF;AAKD;;AAEDD,EAAAA,OAAO,CAACI,WAAR,GAAuB,yBACrBN,SAAS,CAACM,WAAV,IAAyBN,SAAS,CAACO,IACpC,GAFD,CATwB,CAaxB;;AACA,qCAAqBL,OAArB,EAA8BF,SAA9B;AAEA,SAAOE,OAAP;AACD;;AAED,MAAME,MAAM,GAAGI,wBAAWC,MAAX,CAAkB;AAC/BJ,EAAAA,SAAS,EAAE;AAAEK,IAAAA,IAAI,EAAE;AAAR;AADoB,CAAlB,CAAf","sourcesContent":["import * as React from 'react';\nimport { StyleSheet, StyleProp, ViewStyle } from 'react-native';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport GestureHandlerRootView from './GestureHandlerRootView';\n\nexport default function gestureHandlerRootHOC<\n P extends Record<string, unknown>\n>(\n Component: React.ComponentType<P>,\n containerStyles?: StyleProp<ViewStyle>\n): React.ComponentType<P> {\n function Wrapper(props: P) {\n return (\n <GestureHandlerRootView style={[styles.container, containerStyles]}>\n <Component {...props} />\n </GestureHandlerRootView>\n );\n }\n\n Wrapper.displayName = `gestureHandlerRootHOC(${\n Component.displayName || Component.name\n })`;\n\n // @ts-ignore - hoistNonReactStatics uses old version of @types/react\n hoistNonReactStatics(Wrapper, Component);\n\n return Wrapper;\n}\n\nconst styles = StyleSheet.create({\n container: { flex: 1 },\n});\n"]}
1
+ {"version":3,"sources":["gestureHandlerRootHOC.tsx"],"names":["gestureHandlerRootHOC","Component","containerStyles","Wrapper","props","styles","container","displayName","name","StyleSheet","create","flex"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;AAEe,SAASA,qBAAT,CACbC,SADa,EAEbC,eAFa,EAGW;AACxB,WAASC,OAAT,CAAiBC,KAAjB,EAA2B;AACzB,wBACE,oBAAC,+BAAD;AAAwB,MAAA,KAAK,EAAE,CAACC,MAAM,CAACC,SAAR,EAAmBJ,eAAnB;AAA/B,oBACE,oBAAC,SAAD,EAAeE,KAAf,CADF,CADF;AAKD;;AAEDD,EAAAA,OAAO,CAACI,WAAR,GAAuB,yBACrBN,SAAS,CAACM,WAAV,IAAyBN,SAAS,CAACO,IACpC,GAFD,CATwB,CAaxB;;AACA,qCAAqBL,OAArB,EAA8BF,SAA9B;AAEA,SAAOE,OAAP;AACD;;AAED,MAAME,MAAM,GAAGI,wBAAWC,MAAX,CAAkB;AAC/BJ,EAAAA,SAAS,EAAE;AAAEK,IAAAA,IAAI,EAAE;AAAR;AADoB,CAAlB,CAAf","sourcesContent":["import * as React from 'react';\nimport { StyleSheet, StyleProp, ViewStyle } from 'react-native';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport GestureHandlerRootView from './GestureHandlerRootView';\n\nexport default function gestureHandlerRootHOC<P extends object>(\n Component: React.ComponentType<P>,\n containerStyles?: StyleProp<ViewStyle>\n): React.ComponentType<P> {\n function Wrapper(props: P) {\n return (\n <GestureHandlerRootView style={[styles.container, containerStyles]}>\n <Component {...props} />\n </GestureHandlerRootView>\n );\n }\n\n Wrapper.displayName = `gestureHandlerRootHOC(${\n Component.displayName || Component.name\n })`;\n\n // @ts-ignore - hoistNonReactStatics uses old version of @types/react\n hoistNonReactStatics(Wrapper, Component);\n\n return Wrapper;\n}\n\nconst styles = StyleSheet.create({\n container: { flex: 1 },\n});\n"]}
@@ -96,5 +96,5 @@ _defineProperty(TouchableNativeFeedback, "Ripple", (color, borderless, rippleRad
96
96
  rippleRadius
97
97
  }));
98
98
 
99
- _defineProperty(TouchableNativeFeedback, "canUseNativeForeground", () => _reactNative.Platform.Version >= 23);
99
+ _defineProperty(TouchableNativeFeedback, "canUseNativeForeground", () => _reactNative.Platform.OS === 'android' && _reactNative.Platform.Version >= 23);
100
100
  //# sourceMappingURL=TouchableNativeFeedback.android.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["TouchableNativeFeedback.android.tsx"],"names":["TouchableNativeFeedback","Component","getExtraButtonProps","extraProps","background","props","type","borderless","color","attribute","rippleRadius","useForeground","render","style","rest","GenericTouchable","defaultProps","extraButtonProps","rippleColor","Platform","Version"],"mappings":";;;;;;;AAAA;;AAKA;;AAEA;;;;;;;;;;;;AAYA;AACA;AACA;AACA;AACA;AACA;AACe,MAAMA,uBAAN,SAAsCC,eAAtC,CAA8E;AAU3F;AAyBAC,EAAAA,mBAAmB,GAAG;AACpB,UAAMC,UAA6C,GAAG,EAAtD;AACA,UAAM;AAAEC,MAAAA;AAAF,QAAiB,KAAKC,KAA5B;;AACA,QAAID,UAAJ,EAAgB;AACd;AACA;AACA,UAAIA,UAAU,CAACE,IAAX,KAAoB,eAAxB,EAAyC;AACvCH,QAAAA,UAAU,CAAC,YAAD,CAAV,GAA2BC,UAAU,CAACG,UAAtC;AACAJ,QAAAA,UAAU,CAAC,aAAD,CAAV,GAA4BC,UAAU,CAACI,KAAvC;AACD,OAHD,MAGO,IAAIJ,UAAU,CAACE,IAAX,KAAoB,kBAAxB,EAA4C;AACjDH,QAAAA,UAAU,CAAC,YAAD,CAAV,GACEC,UAAU,CAACK,SAAX,KAAyB,oCAD3B;AAED,OATa,CAUd;;;AACAN,MAAAA,UAAU,CAAC,cAAD,CAAV,GAA6BC,UAAU,CAACM,YAAxC;AACD;;AACDP,IAAAA,UAAU,CAAC,YAAD,CAAV,GAA2B,KAAKE,KAAL,CAAWM,aAAtC;AACA,WAAOR,UAAP;AACD;;AACDS,EAAAA,MAAM,GAAG;AACP,UAAM;AAAEC,MAAAA,KAAK,GAAG,EAAV;AAAc,SAAGC;AAAjB,QAA0B,KAAKT,KAArC;AACA,wBACE,oBAAC,yBAAD,eACMS,IADN;AAEE,MAAA,KAAK,EAAED,KAFT;AAGE,MAAA,gBAAgB,EAAE,KAAKX,mBAAL;AAHpB,OADF;AAOD;;AA/D0F;;;;gBAAxEF,uB,kBACG,EACpB,GAAGe,0BAAiBC,YADA;AAEpBL,EAAAA,aAAa,EAAE,IAFK;AAGpBM,EAAAA,gBAAgB,EAAE;AAChB;AACAC,IAAAA,WAAW,EAAE;AAFG;AAHE,C;;gBADHlB,uB,0BAWYU,YAAD,KAA4B;AACxDJ,EAAAA,IAAI,EAAE,kBADkD;AAExD;AACAG,EAAAA,SAAS,EAAE,0BAH6C;AAIxDC,EAAAA;AAJwD,CAA5B,C;;gBAXXV,uB,oCAiBsBU,YAAD,KAA4B;AAClEJ,EAAAA,IAAI,EAAE,kBAD4D;AAElEG,EAAAA,SAAS,EAAE,oCAFuD;AAGlEC,EAAAA;AAHkE,CAA5B,C;;gBAjBrBV,uB,YAsBH,CACdQ,KADc,EAEdD,UAFc,EAGdG,YAHc,MAIV;AACJJ,EAAAA,IAAI,EAAE,eADF;AAEJE,EAAAA,KAFI;AAGJD,EAAAA,UAHI;AAIJG,EAAAA;AAJI,CAJU,C;;gBAtBGV,uB,4BAiCa,MAAMmB,sBAASC,OAAT,IAAoB,E","sourcesContent":["import {\n Platform,\n TouchableNativeFeedbackProps as RNTouchableNativeFeedbackProps,\n ColorValue,\n} from 'react-native';\nimport * as React from 'react';\nimport { Component } from 'react';\nimport GenericTouchable, { GenericTouchableProps } from './GenericTouchable';\n\nexport type TouchableNativeFeedbackExtraProps = {\n borderless?: boolean;\n rippleColor?: number | null;\n rippleRadius?: number | null;\n foreground?: boolean;\n};\n\nexport type TouchableNativeFeedbackProps = RNTouchableNativeFeedbackProps &\n GenericTouchableProps;\n\n/**\n * TouchableNativeFeedback behaves slightly different than RN's TouchableNativeFeedback.\n * There's small difference with handling long press ripple since RN's implementation calls\n * ripple animation via bridge. This solution leaves all animations' handling for native components so\n * it follows native behaviours.\n */\nexport default class TouchableNativeFeedback extends Component<TouchableNativeFeedbackProps> {\n static defaultProps = {\n ...GenericTouchable.defaultProps,\n useForeground: true,\n extraButtonProps: {\n // Disable hiding ripple on Android\n rippleColor: null,\n },\n };\n\n // could be taken as RNTouchableNativeFeedback.SelectableBackground etc. but the API may change\n static SelectableBackground = (rippleRadius?: number) => ({\n type: 'ThemeAttrAndroid',\n // I added `attribute` prop to clone the implementation of RN and be able to use only 2 types\n attribute: 'selectableItemBackground',\n rippleRadius,\n });\n static SelectableBackgroundBorderless = (rippleRadius?: number) => ({\n type: 'ThemeAttrAndroid',\n attribute: 'selectableItemBackgroundBorderless',\n rippleRadius,\n });\n static Ripple = (\n color: ColorValue,\n borderless: boolean,\n rippleRadius?: number\n ) => ({\n type: 'RippleAndroid',\n color,\n borderless,\n rippleRadius,\n });\n\n static canUseNativeForeground = () => Platform.Version >= 23;\n\n getExtraButtonProps() {\n const extraProps: TouchableNativeFeedbackExtraProps = {};\n const { background } = this.props;\n if (background) {\n // I changed type values to match those used in RN\n // TODO(TS): check if it works the same as previous implementation - looks like it works the same as RN component, so it should be ok\n if (background.type === 'RippleAndroid') {\n extraProps['borderless'] = background.borderless;\n extraProps['rippleColor'] = background.color;\n } else if (background.type === 'ThemeAttrAndroid') {\n extraProps['borderless'] =\n background.attribute === 'selectableItemBackgroundBorderless';\n }\n // I moved it from above since it should be available in all options\n extraProps['rippleRadius'] = background.rippleRadius;\n }\n extraProps['foreground'] = this.props.useForeground;\n return extraProps;\n }\n render() {\n const { style = {}, ...rest } = this.props;\n return (\n <GenericTouchable\n {...rest}\n style={style}\n extraButtonProps={this.getExtraButtonProps()}\n />\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["TouchableNativeFeedback.android.tsx"],"names":["TouchableNativeFeedback","Component","getExtraButtonProps","extraProps","background","props","type","borderless","color","attribute","rippleRadius","useForeground","render","style","rest","GenericTouchable","defaultProps","extraButtonProps","rippleColor","Platform","OS","Version"],"mappings":";;;;;;;AAAA;;AAKA;;AAEA;;;;;;;;;;;;AAYA;AACA;AACA;AACA;AACA;AACA;AACe,MAAMA,uBAAN,SAAsCC,eAAtC,CAA8E;AAU3F;AA0BAC,EAAAA,mBAAmB,GAAG;AACpB,UAAMC,UAA6C,GAAG,EAAtD;AACA,UAAM;AAAEC,MAAAA;AAAF,QAAiB,KAAKC,KAA5B;;AACA,QAAID,UAAJ,EAAgB;AACd;AACA;AACA,UAAIA,UAAU,CAACE,IAAX,KAAoB,eAAxB,EAAyC;AACvCH,QAAAA,UAAU,CAAC,YAAD,CAAV,GAA2BC,UAAU,CAACG,UAAtC;AACAJ,QAAAA,UAAU,CAAC,aAAD,CAAV,GAA4BC,UAAU,CAACI,KAAvC;AACD,OAHD,MAGO,IAAIJ,UAAU,CAACE,IAAX,KAAoB,kBAAxB,EAA4C;AACjDH,QAAAA,UAAU,CAAC,YAAD,CAAV,GACEC,UAAU,CAACK,SAAX,KAAyB,oCAD3B;AAED,OATa,CAUd;;;AACAN,MAAAA,UAAU,CAAC,cAAD,CAAV,GAA6BC,UAAU,CAACM,YAAxC;AACD;;AACDP,IAAAA,UAAU,CAAC,YAAD,CAAV,GAA2B,KAAKE,KAAL,CAAWM,aAAtC;AACA,WAAOR,UAAP;AACD;;AACDS,EAAAA,MAAM,GAAG;AACP,UAAM;AAAEC,MAAAA,KAAK,GAAG,EAAV;AAAc,SAAGC;AAAjB,QAA0B,KAAKT,KAArC;AACA,wBACE,oBAAC,yBAAD,eACMS,IADN;AAEE,MAAA,KAAK,EAAED,KAFT;AAGE,MAAA,gBAAgB,EAAE,KAAKX,mBAAL;AAHpB,OADF;AAOD;;AAhE0F;;;;gBAAxEF,uB,kBACG,EACpB,GAAGe,0BAAiBC,YADA;AAEpBL,EAAAA,aAAa,EAAE,IAFK;AAGpBM,EAAAA,gBAAgB,EAAE;AAChB;AACAC,IAAAA,WAAW,EAAE;AAFG;AAHE,C;;gBADHlB,uB,0BAWYU,YAAD,KAA4B;AACxDJ,EAAAA,IAAI,EAAE,kBADkD;AAExD;AACAG,EAAAA,SAAS,EAAE,0BAH6C;AAIxDC,EAAAA;AAJwD,CAA5B,C;;gBAXXV,uB,oCAiBsBU,YAAD,KAA4B;AAClEJ,EAAAA,IAAI,EAAE,kBAD4D;AAElEG,EAAAA,SAAS,EAAE,oCAFuD;AAGlEC,EAAAA;AAHkE,CAA5B,C;;gBAjBrBV,uB,YAsBH,CACdQ,KADc,EAEdD,UAFc,EAGdG,YAHc,MAIV;AACJJ,EAAAA,IAAI,EAAE,eADF;AAEJE,EAAAA,KAFI;AAGJD,EAAAA,UAHI;AAIJG,EAAAA;AAJI,CAJU,C;;gBAtBGV,uB,4BAiCa,MAC9BmB,sBAASC,EAAT,KAAgB,SAAhB,IAA6BD,sBAASE,OAAT,IAAoB,E","sourcesContent":["import {\n Platform,\n TouchableNativeFeedbackProps as RNTouchableNativeFeedbackProps,\n ColorValue,\n} from 'react-native';\nimport * as React from 'react';\nimport { Component } from 'react';\nimport GenericTouchable, { GenericTouchableProps } from './GenericTouchable';\n\nexport type TouchableNativeFeedbackExtraProps = {\n borderless?: boolean;\n rippleColor?: number | null;\n rippleRadius?: number | null;\n foreground?: boolean;\n};\n\nexport type TouchableNativeFeedbackProps = RNTouchableNativeFeedbackProps &\n GenericTouchableProps;\n\n/**\n * TouchableNativeFeedback behaves slightly different than RN's TouchableNativeFeedback.\n * There's small difference with handling long press ripple since RN's implementation calls\n * ripple animation via bridge. This solution leaves all animations' handling for native components so\n * it follows native behaviours.\n */\nexport default class TouchableNativeFeedback extends Component<TouchableNativeFeedbackProps> {\n static defaultProps = {\n ...GenericTouchable.defaultProps,\n useForeground: true,\n extraButtonProps: {\n // Disable hiding ripple on Android\n rippleColor: null,\n },\n };\n\n // could be taken as RNTouchableNativeFeedback.SelectableBackground etc. but the API may change\n static SelectableBackground = (rippleRadius?: number) => ({\n type: 'ThemeAttrAndroid',\n // I added `attribute` prop to clone the implementation of RN and be able to use only 2 types\n attribute: 'selectableItemBackground',\n rippleRadius,\n });\n static SelectableBackgroundBorderless = (rippleRadius?: number) => ({\n type: 'ThemeAttrAndroid',\n attribute: 'selectableItemBackgroundBorderless',\n rippleRadius,\n });\n static Ripple = (\n color: ColorValue,\n borderless: boolean,\n rippleRadius?: number\n ) => ({\n type: 'RippleAndroid',\n color,\n borderless,\n rippleRadius,\n });\n\n static canUseNativeForeground = () =>\n Platform.OS === 'android' && Platform.Version >= 23;\n\n getExtraButtonProps() {\n const extraProps: TouchableNativeFeedbackExtraProps = {};\n const { background } = this.props;\n if (background) {\n // I changed type values to match those used in RN\n // TODO(TS): check if it works the same as previous implementation - looks like it works the same as RN component, so it should be ok\n if (background.type === 'RippleAndroid') {\n extraProps['borderless'] = background.borderless;\n extraProps['rippleColor'] = background.color;\n } else if (background.type === 'ThemeAttrAndroid') {\n extraProps['borderless'] =\n background.attribute === 'selectableItemBackgroundBorderless';\n }\n // I moved it from above since it should be available in all options\n extraProps['rippleRadius'] = background.rippleRadius;\n }\n extraProps['foreground'] = this.props.useForeground;\n return extraProps;\n }\n render() {\n const { style = {}, ...rest } = this.props;\n return (\n <GenericTouchable\n {...rest}\n style={style}\n extraButtonProps={this.getExtraButtonProps()}\n />\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["TouchableWithoutFeedback.tsx"],"names":["TouchableWithoutFeedback","React","forwardRef","props","ref","defaultProps","GenericTouchable"],"mappings":";;;;;;;AAAA;;AAEA;;;;;;;;;;AAIA,MAAMA,wBAAwB,gBAAGC,KAAK,CAACC,UAAN,CAG/B,CAACC,KAAD,EAAQC,GAAR,kBAAgB,oBAAC,yBAAD;AAAkB,EAAA,GAAG,EAAEA;AAAvB,GAAgCD,KAAhC,EAHe,CAAjC;AAKAH,wBAAwB,CAACK,YAAzB,GAAwCC,0BAAiBD,YAAzD;eAEeL,wB","sourcesContent":["import * as React from 'react';\nimport { PropsWithChildren } from 'react';\nimport GenericTouchable, { GenericTouchableProps } from './GenericTouchable';\n\nexport type TouchableWithoutFeedbackProps = GenericTouchable;\n\nconst TouchableWithoutFeedback = React.forwardRef<\n TouchableWithoutFeedbackProps,\n PropsWithChildren<GenericTouchableProps>\n>((props, ref) => <GenericTouchable ref={ref} {...props} />);\n\nTouchableWithoutFeedback.defaultProps = GenericTouchable.defaultProps;\n\nexport default TouchableWithoutFeedback;\n"]}
1
+ {"version":3,"sources":["TouchableWithoutFeedback.tsx"],"names":["TouchableWithoutFeedback","React","forwardRef","props","ref","defaultProps","GenericTouchable"],"mappings":";;;;;;;AAAA;;AAEA;;;;;;;;;;AAIA,MAAMA,wBAAwB,gBAAGC,KAAK,CAACC,UAAN,CAG/B,CAACC,KAAD,EAAQC,GAAR,kBAAgB,oBAAC,yBAAD;AAAkB,EAAA,GAAG,EAAEA;AAAvB,GAAgCD,KAAhC,EAHe,CAAjC;AAKAH,wBAAwB,CAACK,YAAzB,GAAwCC,0BAAiBD,YAAzD;eAEeL,wB","sourcesContent":["import * as React from 'react';\nimport { PropsWithChildren } from 'react';\nimport GenericTouchable, { GenericTouchableProps } from './GenericTouchable';\n\nexport type TouchableWithoutFeedbackProps = GenericTouchableProps;\n\nconst TouchableWithoutFeedback = React.forwardRef<\n GenericTouchable,\n PropsWithChildren<TouchableWithoutFeedbackProps>\n>((props, ref) => <GenericTouchable ref={ref} {...props} />);\n\nTouchableWithoutFeedback.defaultProps = GenericTouchable.defaultProps;\n\nexport default TouchableWithoutFeedback;\n"]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getReactNativeVersion = getReactNativeVersion;
7
+
8
+ var _package = _interopRequireDefault(require("react-native/package.json"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ const [majorStr, minorStr] = _package.default.version.split('.');
13
+
14
+ const REACT_NATIVE_VERSION = {
15
+ major: parseInt(majorStr, 10),
16
+ minor: parseInt(minorStr, 10)
17
+ };
18
+
19
+ function getReactNativeVersion() {
20
+ return REACT_NATIVE_VERSION;
21
+ }
22
+ //# sourceMappingURL=getReactNativeVersion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["getReactNativeVersion.ts"],"names":["majorStr","minorStr","pack","version","split","REACT_NATIVE_VERSION","major","parseInt","minor","getReactNativeVersion"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAM,CAACA,QAAD,EAAWC,QAAX,IAAuBC,iBAAKC,OAAL,CAAaC,KAAb,CAAmB,GAAnB,CAA7B;;AACA,MAAMC,oBAAoB,GAAG;AAC3BC,EAAAA,KAAK,EAAEC,QAAQ,CAACP,QAAD,EAAW,EAAX,CADY;AAE3BQ,EAAAA,KAAK,EAAED,QAAQ,CAACN,QAAD,EAAW,EAAX;AAFY,CAA7B;;AAKO,SAASQ,qBAAT,GAAiC;AACtC,SAAOJ,oBAAP;AACD","sourcesContent":["import pack from 'react-native/package.json';\n\nconst [majorStr, minorStr] = pack.version.split('.');\nconst REACT_NATIVE_VERSION = {\n major: parseInt(majorStr, 10),\n minor: parseInt(minorStr, 10),\n};\n\nexport function getReactNativeVersion() {\n return REACT_NATIVE_VERSION;\n}\n"]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getReactNativeVersion = getReactNativeVersion;
7
+
8
+ function getReactNativeVersion() {
9
+ throw new Error('getReactNativeVersion is not supported on web');
10
+ }
11
+ //# sourceMappingURL=getReactNativeVersion.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["getReactNativeVersion.web.ts"],"names":["getReactNativeVersion","Error"],"mappings":";;;;;;;AAAO,SAASA,qBAAT,GAAiC;AACtC,QAAM,IAAIC,KAAJ,CAAU,+CAAV,CAAN;AACD","sourcesContent":["export function getReactNativeVersion() {\n throw new Error('getReactNativeVersion is not supported on web');\n}\n"]}
@@ -25,7 +25,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
25
25
  // e.g. React.createRef<TapGestureHandler> -> React.createRef<typeof TapGestureHandler>.
26
26
  // See https://www.typescriptlang.org/docs/handbook/classes.html#constructor-functions for reference.
27
27
  const commonProps = ['id', 'enabled', 'shouldCancelWhenOutside', 'hitSlop', 'cancelsTouchesInView', 'userSelect', 'activeCursor'];
28
- const componentInteractionProps = ['waitFor', 'simultaneousHandlers'];
28
+ const componentInteractionProps = ['waitFor', 'simultaneousHandlers', 'blocksHandlers'];
29
29
  const baseGestureHandlerProps = [...commonProps, ...componentInteractionProps, 'onBegan', 'onFailed', 'onCancelled', 'onActivated', 'onEnded', 'onGestureEvent', 'onHandlerStateChange'];
30
30
  exports.baseGestureHandlerProps = baseGestureHandlerProps;
31
31
  const baseGestureHandlerWithMonitorProps = [...commonProps, 'needsPointerData', 'manualActivation'];