react-native-gesture-handler 2.13.4 → 2.14.1

Sign up to get free protection for your applications and to get access to all the features.
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'];