react-native-gesture-handler 2.16.2 → 2.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (212) hide show
  1. package/README.md +9 -3
  2. package/android/build.gradle +105 -0
  3. package/android/gradle.properties +7 -0
  4. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +7 -7
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt +16 -8
  6. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +9 -5
  7. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +4 -0
  8. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +1 -1
  9. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +1 -0
  10. package/apple/RNGestureHandlerButtonComponentView.mm +10 -0
  11. package/apple/RNGestureHandlerModule.mm +2 -3
  12. package/lib/commonjs/components/GestureButtons.js +27 -12
  13. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  14. package/lib/commonjs/handlers/createHandler.js +1 -3
  15. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  16. package/lib/commonjs/handlers/gestureHandlerCommon.js +3 -3
  17. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  18. package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.js +42 -0
  19. package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.js.map +1 -0
  20. package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js +83 -0
  21. package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -0
  22. package/lib/commonjs/handlers/gestures/GestureDetector/dropHandlers.js +25 -0
  23. package/lib/commonjs/handlers/gestures/GestureDetector/dropHandlers.js.map +1 -0
  24. package/lib/commonjs/handlers/gestures/GestureDetector/index.js +143 -0
  25. package/lib/commonjs/handlers/gestures/GestureDetector/index.js.map +1 -0
  26. package/lib/commonjs/handlers/gestures/GestureDetector/needsToReattach.js +25 -0
  27. package/lib/commonjs/handlers/gestures/GestureDetector/needsToReattach.js.map +1 -0
  28. package/lib/commonjs/handlers/gestures/GestureDetector/types.js +6 -0
  29. package/lib/commonjs/handlers/gestures/GestureDetector/types.js.map +1 -0
  30. package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js +80 -0
  31. package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -0
  32. package/lib/commonjs/handlers/gestures/GestureDetector/useAnimatedGesture.js +180 -0
  33. package/lib/commonjs/handlers/gestures/GestureDetector/useAnimatedGesture.js.map +1 -0
  34. package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js +55 -0
  35. package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -0
  36. package/lib/commonjs/handlers/gestures/GestureDetector/useViewRefHandler.js +47 -0
  37. package/lib/commonjs/handlers/gestures/GestureDetector/useViewRefHandler.js.map +1 -0
  38. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js +176 -0
  39. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js.map +1 -0
  40. package/lib/commonjs/handlers/gestures/gestureComposition.js +3 -1
  41. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -1
  42. package/lib/commonjs/handlers/gestures/gestureStateManager.js +8 -0
  43. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
  44. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
  45. package/lib/commonjs/utils.js +36 -0
  46. package/lib/commonjs/utils.js.map +1 -1
  47. package/lib/commonjs/web/detectors/RotationGestureDetector.js +6 -8
  48. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  49. package/lib/commonjs/web/detectors/ScaleGestureDetector.js +5 -6
  50. package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
  51. package/lib/commonjs/web/handlers/FlingGestureHandler.js +1 -0
  52. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  53. package/lib/commonjs/web/handlers/GestureHandler.js +56 -64
  54. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  55. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +1 -0
  56. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  57. package/lib/commonjs/web/handlers/ManualGestureHandler.js +1 -0
  58. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
  59. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +7 -4
  60. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  61. package/lib/commonjs/web/handlers/PanGestureHandler.js +28 -18
  62. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  63. package/lib/commonjs/web/handlers/PinchGestureHandler.js +1 -0
  64. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  65. package/lib/commonjs/web/handlers/RotationGestureHandler.js +1 -0
  66. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  67. package/lib/commonjs/web/handlers/TapGestureHandler.js +18 -12
  68. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  69. package/lib/commonjs/web/interfaces.js.map +1 -1
  70. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +1 -6
  71. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  72. package/lib/commonjs/web/tools/PointerEventManager.js +7 -2
  73. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  74. package/lib/commonjs/web/tools/PointerTracker.js +89 -57
  75. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
  76. package/lib/commonjs/web/tools/TouchEventManager.js +6 -2
  77. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
  78. package/lib/commonjs/web/tools/Vector.js +2 -1
  79. package/lib/commonjs/web/tools/Vector.js.map +1 -1
  80. package/lib/commonjs/web/utils.js +31 -0
  81. package/lib/commonjs/web/utils.js.map +1 -1
  82. package/lib/module/components/GestureButtons.js +24 -6
  83. package/lib/module/components/GestureButtons.js.map +1 -1
  84. package/lib/module/handlers/createHandler.js +2 -4
  85. package/lib/module/handlers/createHandler.js.map +1 -1
  86. package/lib/module/handlers/gestureHandlerCommon.js +1 -1
  87. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  88. package/lib/module/handlers/gestures/GestureDetector/Wrap.js +26 -0
  89. package/lib/module/handlers/gestures/GestureDetector/Wrap.js.map +1 -0
  90. package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js +65 -0
  91. package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -0
  92. package/lib/module/handlers/gestures/GestureDetector/dropHandlers.js +12 -0
  93. package/lib/module/handlers/gestures/GestureDetector/dropHandlers.js.map +1 -0
  94. package/lib/module/handlers/gestures/GestureDetector/index.js +115 -0
  95. package/lib/module/handlers/gestures/GestureDetector/index.js.map +1 -0
  96. package/lib/module/handlers/gestures/GestureDetector/needsToReattach.js +18 -0
  97. package/lib/module/handlers/gestures/GestureDetector/needsToReattach.js.map +1 -0
  98. package/lib/module/handlers/gestures/GestureDetector/types.js +2 -0
  99. package/lib/module/handlers/gestures/GestureDetector/types.js.map +1 -0
  100. package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js +64 -0
  101. package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -0
  102. package/lib/module/handlers/gestures/GestureDetector/useAnimatedGesture.js +165 -0
  103. package/lib/module/handlers/gestures/GestureDetector/useAnimatedGesture.js.map +1 -0
  104. package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js +41 -0
  105. package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -0
  106. package/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js +36 -0
  107. package/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js.map +1 -0
  108. package/lib/module/handlers/gestures/GestureDetector/utils.js +142 -0
  109. package/lib/module/handlers/gestures/GestureDetector/utils.js.map +1 -0
  110. package/lib/module/handlers/gestures/gestureComposition.js +3 -1
  111. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
  112. package/lib/module/handlers/gestures/gestureStateManager.js +8 -0
  113. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  114. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
  115. package/lib/module/utils.js +34 -0
  116. package/lib/module/utils.js.map +1 -1
  117. package/lib/module/web/detectors/RotationGestureDetector.js +6 -8
  118. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  119. package/lib/module/web/detectors/ScaleGestureDetector.js +5 -6
  120. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
  121. package/lib/module/web/handlers/FlingGestureHandler.js +1 -0
  122. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  123. package/lib/module/web/handlers/GestureHandler.js +56 -64
  124. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  125. package/lib/module/web/handlers/LongPressGestureHandler.js +1 -0
  126. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  127. package/lib/module/web/handlers/ManualGestureHandler.js +1 -0
  128. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
  129. package/lib/module/web/handlers/NativeViewGestureHandler.js +7 -4
  130. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  131. package/lib/module/web/handlers/PanGestureHandler.js +28 -18
  132. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  133. package/lib/module/web/handlers/PinchGestureHandler.js +1 -0
  134. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  135. package/lib/module/web/handlers/RotationGestureHandler.js +1 -0
  136. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  137. package/lib/module/web/handlers/TapGestureHandler.js +18 -12
  138. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  139. package/lib/module/web/interfaces.js.map +1 -1
  140. package/lib/module/web/tools/GestureHandlerOrchestrator.js +1 -6
  141. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  142. package/lib/module/web/tools/PointerEventManager.js +8 -3
  143. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  144. package/lib/module/web/tools/PointerTracker.js +89 -57
  145. package/lib/module/web/tools/PointerTracker.js.map +1 -1
  146. package/lib/module/web/tools/TouchEventManager.js +7 -3
  147. package/lib/module/web/tools/TouchEventManager.js.map +1 -1
  148. package/lib/module/web/tools/Vector.js +2 -1
  149. package/lib/module/web/tools/Vector.js.map +1 -1
  150. package/lib/module/web/utils.js +29 -0
  151. package/lib/module/web/utils.js.map +1 -1
  152. package/lib/typescript/components/GestureButtons.d.ts +3 -34
  153. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -2
  154. package/lib/typescript/handlers/gestures/GestureDetector/Wrap.d.ts +13 -0
  155. package/lib/typescript/handlers/gestures/GestureDetector/attachHandlers.d.ts +13 -0
  156. package/lib/typescript/handlers/gestures/GestureDetector/dropHandlers.d.ts +2 -0
  157. package/lib/typescript/handlers/gestures/{GestureDetector.d.ts → GestureDetector/index.d.ts} +4 -12
  158. package/lib/typescript/handlers/gestures/GestureDetector/needsToReattach.d.ts +3 -0
  159. package/lib/typescript/handlers/gestures/GestureDetector/types.d.ts +20 -0
  160. package/lib/typescript/handlers/gestures/GestureDetector/updateHandlers.d.ts +4 -0
  161. package/lib/typescript/handlers/gestures/GestureDetector/useAnimatedGesture.d.ts +2 -0
  162. package/lib/typescript/handlers/gestures/GestureDetector/useDetectorUpdater.d.ts +5 -0
  163. package/lib/typescript/handlers/gestures/GestureDetector/useViewRefHandler.d.ts +3 -0
  164. package/lib/typescript/handlers/gestures/GestureDetector/utils.d.ts +12 -0
  165. package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts +1 -1
  166. package/lib/typescript/utils.d.ts +10 -0
  167. package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -0
  168. package/lib/typescript/web/interfaces.d.ts +1 -0
  169. package/lib/typescript/web/tools/PointerTracker.d.ts +34 -31
  170. package/lib/typescript/web/utils.d.ts +4 -0
  171. package/package.json +5 -5
  172. package/src/components/GestureButtons.tsx +36 -4
  173. package/src/handlers/createHandler.tsx +1 -3
  174. package/src/handlers/gestureHandlerCommon.ts +4 -1
  175. package/src/handlers/gestures/GestureDetector/Wrap.tsx +35 -0
  176. package/src/handlers/gestures/GestureDetector/attachHandlers.ts +112 -0
  177. package/src/handlers/gestures/GestureDetector/dropHandlers.ts +14 -0
  178. package/src/handlers/gestures/GestureDetector/index.tsx +187 -0
  179. package/src/handlers/gestures/GestureDetector/needsToReattach.ts +27 -0
  180. package/src/handlers/gestures/GestureDetector/types.ts +32 -0
  181. package/src/handlers/gestures/GestureDetector/updateHandlers.ts +94 -0
  182. package/src/handlers/gestures/GestureDetector/useAnimatedGesture.ts +206 -0
  183. package/src/handlers/gestures/GestureDetector/useDetectorUpdater.ts +69 -0
  184. package/src/handlers/gestures/GestureDetector/useViewRefHandler.ts +54 -0
  185. package/src/handlers/gestures/GestureDetector/utils.ts +185 -0
  186. package/src/handlers/gestures/gestureComposition.ts +2 -0
  187. package/src/handlers/gestures/gestureStateManager.ts +12 -4
  188. package/src/handlers/gestures/reanimatedWrapper.ts +19 -17
  189. package/src/utils.ts +39 -0
  190. package/src/web/detectors/RotationGestureDetector.ts +6 -8
  191. package/src/web/detectors/ScaleGestureDetector.ts +5 -6
  192. package/src/web/handlers/FlingGestureHandler.ts +2 -0
  193. package/src/web/handlers/GestureHandler.ts +53 -62
  194. package/src/web/handlers/LongPressGestureHandler.ts +2 -0
  195. package/src/web/handlers/ManualGestureHandler.ts +2 -0
  196. package/src/web/handlers/NativeViewGestureHandler.ts +8 -4
  197. package/src/web/handlers/PanGestureHandler.ts +32 -19
  198. package/src/web/handlers/PinchGestureHandler.ts +2 -0
  199. package/src/web/handlers/RotationGestureHandler.ts +2 -0
  200. package/src/web/handlers/TapGestureHandler.ts +20 -12
  201. package/src/web/interfaces.ts +1 -0
  202. package/src/web/tools/GestureHandlerOrchestrator.ts +1 -7
  203. package/src/web/tools/PointerEventManager.ts +10 -3
  204. package/src/web/tools/PointerTracker.ts +81 -74
  205. package/src/web/tools/TouchEventManager.ts +5 -3
  206. package/src/web/tools/Vector.ts +2 -4
  207. package/src/web/utils.ts +34 -0
  208. package/lib/commonjs/handlers/gestures/GestureDetector.js +0 -704
  209. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +0 -1
  210. package/lib/module/handlers/gestures/GestureDetector.js +0 -654
  211. package/lib/module/handlers/gestures/GestureDetector.js.map +0 -1
  212. package/src/handlers/gestures/GestureDetector.tsx +0 -889
@@ -1 +1 @@
1
- {"version":3,"sources":["Vector.ts"],"names":["DiagonalDirections","Directions","MINIMAL_FLING_VELOCITY","Vector","constructor","x","y","_magnitude","Math","hypot","isMagnitudeSufficient","unitX","unitY","fromDirection","direction","DirectionToVectorMappings","get","fromVelocity","tracker","pointerId","getVelocityX","getVelocityY","magnitude","computeSimilarity","vector","isSimilar","threshold","Map","LEFT","RIGHT","UP","DOWN","UP_RIGHT","DOWN_RIGHT","UP_LEFT","DOWN_LEFT"],"mappings":";;AAAA,SAASA,kBAAT,EAA6BC,UAA7B,QAA+C,kBAA/C;AACA,SAASC,sBAAT,QAAuC,cAAvC;AAGA,eAAe,MAAMC,MAAN,CAAa;AAO1BC,EAAAA,WAAW,CAACC,CAAD,EAAYC,CAAZ,EAAuB;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAChC,SAAKD,CAAL,GAASA,CAAT;AACA,SAAKC,CAAL,GAASA,CAAT;AAEA,SAAKC,UAAL,GAAkBC,IAAI,CAACC,KAAL,CAAW,KAAKJ,CAAhB,EAAmB,KAAKC,CAAxB,CAAlB;AACA,UAAMI,qBAAqB,GAAG,KAAKH,UAAL,GAAkBL,sBAAhD;AAEA,SAAKS,KAAL,GAAaD,qBAAqB,GAAG,KAAKL,CAAL,GAAS,KAAKE,UAAjB,GAA8B,CAAhE;AACA,SAAKK,KAAL,GAAaF,qBAAqB,GAAG,KAAKJ,CAAL,GAAS,KAAKC,UAAjB,GAA8B,CAAhE;AACD;;AAEmB,SAAbM,aAAa,CAACC,SAAD,EAAqD;AACvE,WAAOC,yBAAyB,CAACC,GAA1B,CAA8BF,SAA9B,CAAP;AACD;;AAEkB,SAAZG,YAAY,CAACC,OAAD,EAA0BC,SAA1B,EAA6C;AAC9D,WAAO,IAAIhB,MAAJ,CACLe,OAAO,CAACE,YAAR,CAAqBD,SAArB,CADK,EAELD,OAAO,CAACG,YAAR,CAAqBF,SAArB,CAFK,CAAP;AAID;;AAEY,MAATG,SAAS,GAAG;AACd,WAAO,KAAKf,UAAZ;AACD;;AAEDgB,EAAAA,iBAAiB,CAACC,MAAD,EAAiB;AAChC,WAAO,KAAKb,KAAL,GAAaa,MAAM,CAACb,KAApB,GAA4B,KAAKC,KAAL,GAAaY,MAAM,CAACZ,KAAvD;AACD;;AAEDa,EAAAA,SAAS,CAACD,MAAD,EAAiBE,SAAjB,EAAoC;AAC3C,WAAO,KAAKH,iBAAL,CAAuBC,MAAvB,IAAiCE,SAAxC;AACD;;AAvCyB;AA0C5B,MAAMX,yBAAyB,GAAG,IAAIY,GAAJ,CAGhC,CACA,CAAC1B,UAAU,CAAC2B,IAAZ,EAAkB,IAAIzB,MAAJ,CAAW,CAAC,CAAZ,EAAe,CAAf,CAAlB,CADA,EAEA,CAACF,UAAU,CAAC4B,KAAZ,EAAmB,IAAI1B,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAnB,CAFA,EAGA,CAACF,UAAU,CAAC6B,EAAZ,EAAgB,IAAI3B,MAAJ,CAAW,CAAX,EAAc,CAAC,CAAf,CAAhB,CAHA,EAIA,CAACF,UAAU,CAAC8B,IAAZ,EAAkB,IAAI5B,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAlB,CAJA,EAMA,CAACH,kBAAkB,CAACgC,QAApB,EAA8B,IAAI7B,MAAJ,CAAW,CAAX,EAAc,CAAC,CAAf,CAA9B,CANA,EAOA,CAACH,kBAAkB,CAACiC,UAApB,EAAgC,IAAI9B,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAhC,CAPA,EAQA,CAACH,kBAAkB,CAACkC,OAApB,EAA6B,IAAI/B,MAAJ,CAAW,CAAC,CAAZ,EAAe,CAAC,CAAhB,CAA7B,CARA,EASA,CAACH,kBAAkB,CAACmC,SAApB,EAA+B,IAAIhC,MAAJ,CAAW,CAAC,CAAZ,EAAe,CAAf,CAA/B,CATA,CAHgC,CAAlC","sourcesContent":["import { DiagonalDirections, Directions } from '../../Directions';\nimport { MINIMAL_FLING_VELOCITY } from '../constants';\nimport PointerTracker from './PointerTracker';\n\nexport default class Vector {\n private readonly x;\n private readonly y;\n private readonly unitX;\n private readonly unitY;\n private readonly _magnitude;\n\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n\n this._magnitude = Math.hypot(this.x, this.y);\n const isMagnitudeSufficient = this._magnitude > MINIMAL_FLING_VELOCITY;\n\n this.unitX = isMagnitudeSufficient ? this.x / this._magnitude : 0;\n this.unitY = isMagnitudeSufficient ? this.y / this._magnitude : 0;\n }\n\n static fromDirection(direction: Directions | DiagonalDirections): Vector {\n return DirectionToVectorMappings.get(direction)!;\n }\n\n static fromVelocity(tracker: PointerTracker, pointerId: number) {\n return new Vector(\n tracker.getVelocityX(pointerId),\n tracker.getVelocityY(pointerId)\n );\n }\n\n get magnitude() {\n return this._magnitude;\n }\n\n computeSimilarity(vector: Vector) {\n return this.unitX * vector.unitX + this.unitY * vector.unitY;\n }\n\n isSimilar(vector: Vector, threshold: number) {\n return this.computeSimilarity(vector) > threshold;\n }\n}\n\nconst DirectionToVectorMappings = new Map<\n Directions | DiagonalDirections,\n Vector\n>([\n [Directions.LEFT, new Vector(-1, 0)],\n [Directions.RIGHT, new Vector(1, 0)],\n [Directions.UP, new Vector(0, -1)],\n [Directions.DOWN, new Vector(0, 1)],\n\n [DiagonalDirections.UP_RIGHT, new Vector(1, -1)],\n [DiagonalDirections.DOWN_RIGHT, new Vector(1, 1)],\n [DiagonalDirections.UP_LEFT, new Vector(-1, -1)],\n [DiagonalDirections.DOWN_LEFT, new Vector(-1, 1)],\n]);\n"]}
1
+ {"version":3,"sources":["Vector.ts"],"names":["DiagonalDirections","Directions","MINIMAL_FLING_VELOCITY","Vector","constructor","x","y","_magnitude","Math","hypot","isMagnitudeSufficient","unitX","unitY","fromDirection","direction","DirectionToVectorMappings","get","fromVelocity","tracker","pointerId","velocity","getVelocity","magnitude","computeSimilarity","vector","isSimilar","threshold","Map","LEFT","RIGHT","UP","DOWN","UP_RIGHT","DOWN_RIGHT","UP_LEFT","DOWN_LEFT"],"mappings":";;AAAA,SAASA,kBAAT,EAA6BC,UAA7B,QAA+C,kBAA/C;AACA,SAASC,sBAAT,QAAuC,cAAvC;AAGA,eAAe,MAAMC,MAAN,CAAa;AAO1BC,EAAAA,WAAW,CAACC,CAAD,EAAYC,CAAZ,EAAuB;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAChC,SAAKD,CAAL,GAASA,CAAT;AACA,SAAKC,CAAL,GAASA,CAAT;AAEA,SAAKC,UAAL,GAAkBC,IAAI,CAACC,KAAL,CAAW,KAAKJ,CAAhB,EAAmB,KAAKC,CAAxB,CAAlB;AACA,UAAMI,qBAAqB,GAAG,KAAKH,UAAL,GAAkBL,sBAAhD;AAEA,SAAKS,KAAL,GAAaD,qBAAqB,GAAG,KAAKL,CAAL,GAAS,KAAKE,UAAjB,GAA8B,CAAhE;AACA,SAAKK,KAAL,GAAaF,qBAAqB,GAAG,KAAKJ,CAAL,GAAS,KAAKC,UAAjB,GAA8B,CAAhE;AACD;;AAEmB,SAAbM,aAAa,CAACC,SAAD,EAAqD;AACvE,WAAOC,yBAAyB,CAACC,GAA1B,CAA8BF,SAA9B,CAAP;AACD;;AAEkB,SAAZG,YAAY,CAACC,OAAD,EAA0BC,SAA1B,EAA6C;AAC9D,UAAMC,QAAQ,GAAGF,OAAO,CAACG,WAAR,CAAoBF,SAApB,CAAjB;AACA,WAAO,IAAIhB,MAAJ,CAAWiB,QAAQ,CAACf,CAApB,EAAuBe,QAAQ,CAACd,CAAhC,CAAP;AACD;;AAEY,MAATgB,SAAS,GAAG;AACd,WAAO,KAAKf,UAAZ;AACD;;AAEDgB,EAAAA,iBAAiB,CAACC,MAAD,EAAiB;AAChC,WAAO,KAAKb,KAAL,GAAaa,MAAM,CAACb,KAApB,GAA4B,KAAKC,KAAL,GAAaY,MAAM,CAACZ,KAAvD;AACD;;AAEDa,EAAAA,SAAS,CAACD,MAAD,EAAiBE,SAAjB,EAAoC;AAC3C,WAAO,KAAKH,iBAAL,CAAuBC,MAAvB,IAAiCE,SAAxC;AACD;;AArCyB;AAwC5B,MAAMX,yBAAyB,GAAG,IAAIY,GAAJ,CAGhC,CACA,CAAC1B,UAAU,CAAC2B,IAAZ,EAAkB,IAAIzB,MAAJ,CAAW,CAAC,CAAZ,EAAe,CAAf,CAAlB,CADA,EAEA,CAACF,UAAU,CAAC4B,KAAZ,EAAmB,IAAI1B,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAnB,CAFA,EAGA,CAACF,UAAU,CAAC6B,EAAZ,EAAgB,IAAI3B,MAAJ,CAAW,CAAX,EAAc,CAAC,CAAf,CAAhB,CAHA,EAIA,CAACF,UAAU,CAAC8B,IAAZ,EAAkB,IAAI5B,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAlB,CAJA,EAMA,CAACH,kBAAkB,CAACgC,QAApB,EAA8B,IAAI7B,MAAJ,CAAW,CAAX,EAAc,CAAC,CAAf,CAA9B,CANA,EAOA,CAACH,kBAAkB,CAACiC,UAApB,EAAgC,IAAI9B,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAhC,CAPA,EAQA,CAACH,kBAAkB,CAACkC,OAApB,EAA6B,IAAI/B,MAAJ,CAAW,CAAC,CAAZ,EAAe,CAAC,CAAhB,CAA7B,CARA,EASA,CAACH,kBAAkB,CAACmC,SAApB,EAA+B,IAAIhC,MAAJ,CAAW,CAAC,CAAZ,EAAe,CAAf,CAA/B,CATA,CAHgC,CAAlC","sourcesContent":["import { DiagonalDirections, Directions } from '../../Directions';\nimport { MINIMAL_FLING_VELOCITY } from '../constants';\nimport PointerTracker from './PointerTracker';\n\nexport default class Vector {\n private readonly x;\n private readonly y;\n private readonly unitX;\n private readonly unitY;\n private readonly _magnitude;\n\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n\n this._magnitude = Math.hypot(this.x, this.y);\n const isMagnitudeSufficient = this._magnitude > MINIMAL_FLING_VELOCITY;\n\n this.unitX = isMagnitudeSufficient ? this.x / this._magnitude : 0;\n this.unitY = isMagnitudeSufficient ? this.y / this._magnitude : 0;\n }\n\n static fromDirection(direction: Directions | DiagonalDirections): Vector {\n return DirectionToVectorMappings.get(direction)!;\n }\n\n static fromVelocity(tracker: PointerTracker, pointerId: number) {\n const velocity = tracker.getVelocity(pointerId);\n return new Vector(velocity.x, velocity.y);\n }\n\n get magnitude() {\n return this._magnitude;\n }\n\n computeSimilarity(vector: Vector) {\n return this.unitX * vector.unitX + this.unitY * vector.unitY;\n }\n\n isSimilar(vector: Vector, threshold: number) {\n return this.computeSimilarity(vector) > threshold;\n }\n}\n\nconst DirectionToVectorMappings = new Map<\n Directions | DiagonalDirections,\n Vector\n>([\n [Directions.LEFT, new Vector(-1, 0)],\n [Directions.RIGHT, new Vector(1, 0)],\n [Directions.UP, new Vector(0, -1)],\n [Directions.DOWN, new Vector(0, 1)],\n\n [DiagonalDirections.UP_RIGHT, new Vector(1, -1)],\n [DiagonalDirections.DOWN_RIGHT, new Vector(1, 1)],\n [DiagonalDirections.UP_LEFT, new Vector(-1, -1)],\n [DiagonalDirections.DOWN_LEFT, new Vector(-1, 1)],\n]);\n"]}
@@ -9,4 +9,33 @@ export function isPointerInBounds(view, {
9
9
  export const PointerTypeMapping = new Map([['mouse', PointerType.MOUSE], ['touch', PointerType.TOUCH], ['pen', PointerType.STYLUS], ['none', PointerType.OTHER]]);
10
10
  export const degToRad = degrees => degrees * Math.PI / 180;
11
11
  export const coneToDeviation = degrees => Math.cos(degToRad(degrees / 2));
12
+ export function calculateViewScale(view) {
13
+ var _RegExp$exec;
14
+
15
+ const styles = getComputedStyle(view);
16
+ const resultScales = {
17
+ scaleX: 1,
18
+ scaleY: 1
19
+ };
20
+ const scales = styles.scale.split(' ');
21
+
22
+ if (scales[0] !== 'none') {
23
+ resultScales.scaleX = parseFloat(scales[0]);
24
+ }
25
+
26
+ if (scales[1]) {
27
+ resultScales.scaleY = parseFloat(scales[1]);
28
+ }
29
+
30
+ const matrixElements = (_RegExp$exec = new RegExp(/matrix\((.+)\)/).exec(styles.transform)) === null || _RegExp$exec === void 0 ? void 0 : _RegExp$exec[1];
31
+
32
+ if (!matrixElements) {
33
+ return resultScales;
34
+ }
35
+
36
+ const matrixElementsArray = matrixElements.split(', ');
37
+ resultScales.scaleX *= parseFloat(matrixElementsArray[0]);
38
+ resultScales.scaleY *= parseFloat(matrixElementsArray[3]);
39
+ return resultScales;
40
+ }
12
41
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["utils.ts"],"names":["PointerType","isPointerInBounds","view","x","y","rect","getBoundingClientRect","left","right","top","bottom","PointerTypeMapping","Map","MOUSE","TOUCH","STYLUS","OTHER","degToRad","degrees","Math","PI","coneToDeviation","cos"],"mappings":"AAAA,SAASA,WAAT,QAA4B,gBAA5B;AAGA,OAAO,SAASC,iBAAT,CAA2BC,IAA3B,EAA8C;AAAEC,EAAAA,CAAF;AAAKC,EAAAA;AAAL,CAA9C,EAAwE;AAC7E,QAAMC,IAAa,GAAGH,IAAI,CAACI,qBAAL,EAAtB;AAEA,SAAOH,CAAC,IAAIE,IAAI,CAACE,IAAV,IAAkBJ,CAAC,IAAIE,IAAI,CAACG,KAA5B,IAAqCJ,CAAC,IAAIC,IAAI,CAACI,GAA/C,IAAsDL,CAAC,IAAIC,IAAI,CAACK,MAAvE;AACD;AAED,OAAO,MAAMC,kBAAkB,GAAG,IAAIC,GAAJ,CAA6B,CAC7D,CAAC,OAAD,EAAUZ,WAAW,CAACa,KAAtB,CAD6D,EAE7D,CAAC,OAAD,EAAUb,WAAW,CAACc,KAAtB,CAF6D,EAG7D,CAAC,KAAD,EAAQd,WAAW,CAACe,MAApB,CAH6D,EAI7D,CAAC,MAAD,EAASf,WAAW,CAACgB,KAArB,CAJ6D,CAA7B,CAA3B;AAOP,OAAO,MAAMC,QAAQ,GAAIC,OAAD,IAAsBA,OAAO,GAAGC,IAAI,CAACC,EAAhB,GAAsB,GAA5D;AAEP,OAAO,MAAMC,eAAe,GAAIH,OAAD,IAC7BC,IAAI,CAACG,GAAL,CAASL,QAAQ,CAACC,OAAO,GAAG,CAAX,CAAjB,CADK","sourcesContent":["import { PointerType } from '../PointerType';\nimport { Point } from './interfaces';\n\nexport function isPointerInBounds(view: HTMLElement, { x, y }: Point): boolean {\n const rect: DOMRect = view.getBoundingClientRect();\n\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n}\n\nexport const PointerTypeMapping = new Map<string, PointerType>([\n ['mouse', PointerType.MOUSE],\n ['touch', PointerType.TOUCH],\n ['pen', PointerType.STYLUS],\n ['none', PointerType.OTHER],\n]);\n\nexport const degToRad = (degrees: number) => (degrees * Math.PI) / 180;\n\nexport const coneToDeviation = (degrees: number) =>\n Math.cos(degToRad(degrees / 2));\n"]}
1
+ {"version":3,"sources":["utils.ts"],"names":["PointerType","isPointerInBounds","view","x","y","rect","getBoundingClientRect","left","right","top","bottom","PointerTypeMapping","Map","MOUSE","TOUCH","STYLUS","OTHER","degToRad","degrees","Math","PI","coneToDeviation","cos","calculateViewScale","styles","getComputedStyle","resultScales","scaleX","scaleY","scales","scale","split","parseFloat","matrixElements","RegExp","exec","transform","matrixElementsArray"],"mappings":"AAAA,SAASA,WAAT,QAA4B,gBAA5B;AAGA,OAAO,SAASC,iBAAT,CAA2BC,IAA3B,EAA8C;AAAEC,EAAAA,CAAF;AAAKC,EAAAA;AAAL,CAA9C,EAAwE;AAC7E,QAAMC,IAAa,GAAGH,IAAI,CAACI,qBAAL,EAAtB;AAEA,SAAOH,CAAC,IAAIE,IAAI,CAACE,IAAV,IAAkBJ,CAAC,IAAIE,IAAI,CAACG,KAA5B,IAAqCJ,CAAC,IAAIC,IAAI,CAACI,GAA/C,IAAsDL,CAAC,IAAIC,IAAI,CAACK,MAAvE;AACD;AAED,OAAO,MAAMC,kBAAkB,GAAG,IAAIC,GAAJ,CAA6B,CAC7D,CAAC,OAAD,EAAUZ,WAAW,CAACa,KAAtB,CAD6D,EAE7D,CAAC,OAAD,EAAUb,WAAW,CAACc,KAAtB,CAF6D,EAG7D,CAAC,KAAD,EAAQd,WAAW,CAACe,MAApB,CAH6D,EAI7D,CAAC,MAAD,EAASf,WAAW,CAACgB,KAArB,CAJ6D,CAA7B,CAA3B;AAOP,OAAO,MAAMC,QAAQ,GAAIC,OAAD,IAAsBA,OAAO,GAAGC,IAAI,CAACC,EAAhB,GAAsB,GAA5D;AAEP,OAAO,MAAMC,eAAe,GAAIH,OAAD,IAC7BC,IAAI,CAACG,GAAL,CAASL,QAAQ,CAACC,OAAO,GAAG,CAAX,CAAjB,CADK;AAGP,OAAO,SAASK,kBAAT,CAA4BrB,IAA5B,EAA+C;AAAA;;AACpD,QAAMsB,MAAM,GAAGC,gBAAgB,CAACvB,IAAD,CAA/B;AAEA,QAAMwB,YAAY,GAAG;AACnBC,IAAAA,MAAM,EAAE,CADW;AAEnBC,IAAAA,MAAM,EAAE;AAFW,GAArB;AAKA,QAAMC,MAAM,GAAGL,MAAM,CAACM,KAAP,CAAaC,KAAb,CAAmB,GAAnB,CAAf;;AAEA,MAAIF,MAAM,CAAC,CAAD,CAAN,KAAc,MAAlB,EAA0B;AACxBH,IAAAA,YAAY,CAACC,MAAb,GAAsBK,UAAU,CAACH,MAAM,CAAC,CAAD,CAAP,CAAhC;AACD;;AAED,MAAIA,MAAM,CAAC,CAAD,CAAV,EAAe;AACbH,IAAAA,YAAY,CAACE,MAAb,GAAsBI,UAAU,CAACH,MAAM,CAAC,CAAD,CAAP,CAAhC;AACD;;AAED,QAAMI,cAAc,mBAAG,IAAIC,MAAJ,CAAW,gBAAX,EAA6BC,IAA7B,CACrBX,MAAM,CAACY,SADc,CAAH,iDAAG,aAEnB,CAFmB,CAAvB;;AAIA,MAAI,CAACH,cAAL,EAAqB;AACnB,WAAOP,YAAP;AACD;;AAED,QAAMW,mBAAmB,GAAGJ,cAAc,CAACF,KAAf,CAAqB,IAArB,CAA5B;AAEAL,EAAAA,YAAY,CAACC,MAAb,IAAuBK,UAAU,CAACK,mBAAmB,CAAC,CAAD,CAApB,CAAjC;AACAX,EAAAA,YAAY,CAACE,MAAb,IAAuBI,UAAU,CAACK,mBAAmB,CAAC,CAAD,CAApB,CAAjC;AAEA,SAAOX,YAAP;AACD","sourcesContent":["import { PointerType } from '../PointerType';\nimport { Point } from './interfaces';\n\nexport function isPointerInBounds(view: HTMLElement, { x, y }: Point): boolean {\n const rect: DOMRect = view.getBoundingClientRect();\n\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n}\n\nexport const PointerTypeMapping = new Map<string, PointerType>([\n ['mouse', PointerType.MOUSE],\n ['touch', PointerType.TOUCH],\n ['pen', PointerType.STYLUS],\n ['none', PointerType.OTHER],\n]);\n\nexport const degToRad = (degrees: number) => (degrees * Math.PI) / 180;\n\nexport const coneToDeviation = (degrees: number) =>\n Math.cos(degToRad(degrees / 2));\n\nexport function calculateViewScale(view: HTMLElement) {\n const styles = getComputedStyle(view);\n\n const resultScales = {\n scaleX: 1,\n scaleY: 1,\n };\n\n const scales = styles.scale.split(' ');\n\n if (scales[0] !== 'none') {\n resultScales.scaleX = parseFloat(scales[0]);\n }\n\n if (scales[1]) {\n resultScales.scaleY = parseFloat(scales[1]);\n }\n\n const matrixElements = new RegExp(/matrix\\((.+)\\)/).exec(\n styles.transform\n )?.[1];\n\n if (!matrixElements) {\n return resultScales;\n }\n\n const matrixElementsArray = matrixElements.split(', ');\n\n resultScales.scaleX *= parseFloat(matrixElementsArray[0]);\n resultScales.scaleY *= parseFloat(matrixElementsArray[3]);\n\n return resultScales;\n}\n"]}
@@ -84,38 +84,7 @@ export interface BorderlessButtonProps extends BaseButtonProps {
84
84
  activeOpacity?: number;
85
85
  }
86
86
  export declare const RawButton: React.ForwardRefExoticComponent<RawButtonProps & NativeViewGestureHandlerProps & React.RefAttributes<React.ComponentType<any>>>;
87
- export declare class BaseButton extends React.Component<BaseButtonProps> {
88
- static defaultProps: {
89
- delayLongPress: number;
90
- };
91
- private lastActive;
92
- private longPressTimeout;
93
- private longPressDetected;
94
- constructor(props: BaseButtonProps);
95
- private handleEvent;
96
- private onLongPress;
97
- private onHandlerStateChange;
98
- private onGestureEvent;
99
- render(): React.JSX.Element;
100
- }
101
- export declare class RectButton extends React.Component<RectButtonProps> {
102
- static defaultProps: {
103
- activeOpacity: number;
104
- underlayColor: string;
105
- };
106
- private opacity;
107
- constructor(props: RectButtonProps);
108
- private onActiveStateChange;
109
- render(): React.JSX.Element;
110
- }
111
- export declare class BorderlessButton extends React.Component<BorderlessButtonProps> {
112
- static defaultProps: {
113
- activeOpacity: number;
114
- borderless: boolean;
115
- };
116
- private opacity;
117
- constructor(props: BorderlessButtonProps);
118
- private onActiveStateChange;
119
- render(): React.JSX.Element;
120
- }
87
+ export declare const BaseButton: React.ForwardRefExoticComponent<Omit<BaseButtonProps, "innerRef"> & React.RefAttributes<any>>;
88
+ export declare const RectButton: React.ForwardRefExoticComponent<Omit<RectButtonProps, "innerRef"> & React.RefAttributes<any>>;
89
+ export declare const BorderlessButton: React.ForwardRefExoticComponent<Omit<BorderlessButtonProps, "innerRef"> & React.RefAttributes<any>>;
121
90
  export { default as PureNativeButton } from './GestureHandlerButton';
@@ -4,7 +4,7 @@ import { TouchEventType } from '../TouchEventType';
4
4
  import { ValueOf } from '../typeUtils';
5
5
  import { PointerType } from '../PointerType';
6
6
  export declare const baseGestureHandlerProps: readonly ["id", "enabled", "shouldCancelWhenOutside", "hitSlop", "cancelsTouchesInView", "userSelect", "activeCursor", "mouseButton", "enableContextMenu", "touchAction", "waitFor", "simultaneousHandlers", "blocksHandlers", "onBegan", "onFailed", "onCancelled", "onActivated", "onEnded", "onGestureEvent", "onHandlerStateChange"];
7
- export declare const baseGestureHandlerWithMonitorProps: string[];
7
+ export declare const baseGestureHandlerWithDetectorProps: string[];
8
8
  export interface GestureEventPayload {
9
9
  handlerTag: number;
10
10
  numberOfPointers: number;
@@ -14,7 +14,7 @@ export interface GestureEventPayload {
14
14
  export interface HandlerStateChangeEventPayload extends GestureEventPayload {
15
15
  oldState: ValueOf<typeof State>;
16
16
  }
17
- export type HitSlop = number | Partial<Record<'left' | 'right' | 'top' | 'bottom' | 'vertical' | 'horizontal', number>> | Record<'width' | 'left', number> | Record<'width' | 'right', number> | Record<'height' | 'top', number> | Record<'height' | 'bottom', number>;
17
+ export type HitSlop = number | null | undefined | Partial<Record<'left' | 'right' | 'top' | 'bottom' | 'vertical' | 'horizontal', number>> | Record<'width' | 'left', number> | Record<'width' | 'right', number> | Record<'height' | 'top', number> | Record<'height' | 'bottom', number>;
18
18
  export type UserSelect = 'none' | 'auto' | 'text';
19
19
  export type ActiveCursor = 'auto' | 'default' | 'none' | 'context-menu' | 'help' | 'pointer' | 'progress' | 'wait' | 'cell' | 'crosshair' | 'text' | 'vertical-text' | 'alias' | 'copy' | 'move' | 'no-drop' | 'not-allowed' | 'grab' | 'grabbing' | 'e-resize' | 'n-resize' | 'ne-resize' | 'nw-resize' | 's-resize' | 'se-resize' | 'sw-resize' | 'w-resize' | 'ew-resize' | 'ns-resize' | 'nesw-resize' | 'nwse-resize' | 'col-resize' | 'row-resize' | 'all-scroll' | 'zoom-in' | 'zoom-out';
20
20
  export declare enum MouseButton {
@@ -46,6 +46,7 @@ export type GestureTouchEvent = {
46
46
  eventType: TouchEventType;
47
47
  allTouches: TouchData[];
48
48
  changedTouches: TouchData[];
49
+ pointerType: PointerType;
49
50
  };
50
51
  export type GestureUpdateEvent<GestureEventPayloadT = Record<string, unknown>> = GestureEventPayload & GestureEventPayloadT;
51
52
  export type GestureStateChangeEvent<GestureStateChangeEventPayloadT = Record<string, unknown>> = HandlerStateChangeEventPayload & GestureStateChangeEventPayloadT;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ export declare class Wrap extends React.Component<{
3
+ onGestureHandlerEvent?: unknown;
4
+ children?: React.ReactNode;
5
+ }> {
6
+ render(): React.FunctionComponentElement<{
7
+ collapsable: boolean;
8
+ }>;
9
+ }
10
+ export declare const AnimatedWrap: typeof Wrap | React.ComponentClass<{
11
+ onGestureHandlerEvent?: unknown;
12
+ children?: React.ReactNode;
13
+ }, any>;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { GestureType } from '../gesture';
3
+ import { ComposedGesture } from '../gestureComposition';
4
+ import { AttachedGestureState, WebEventHandler } from './types';
5
+ interface AttachHandlersConfig {
6
+ preparedGesture: AttachedGestureState;
7
+ gestureConfig: ComposedGesture | GestureType;
8
+ gesturesToAttach: GestureType[];
9
+ viewTag: number;
10
+ webEventHandlersRef: React.RefObject<WebEventHandler>;
11
+ }
12
+ export declare function attachHandlers({ preparedGesture, gestureConfig, gesturesToAttach, viewTag, webEventHandlersRef, }: AttachHandlersConfig): void;
13
+ export {};
@@ -0,0 +1,2 @@
1
+ import { AttachedGestureState } from './types';
2
+ export declare function dropHandlers(preparedGesture: AttachedGestureState): void;
@@ -1,16 +1,9 @@
1
1
  import React from 'react';
2
- import { GestureType, HandlerCallbacks } from './gesture';
3
- import { SharedValue } from './reanimatedWrapper';
4
- import { UserSelect, TouchAction } from '../gestureHandlerCommon';
5
- import { ComposedGesture } from './gestureComposition';
6
- export type GestureConfigReference = {
7
- config: GestureType[];
8
- animatedEventHandler: unknown;
9
- animatedHandlers: SharedValue<HandlerCallbacks<Record<string, unknown>>[] | null> | null;
10
- firstExecution: boolean;
11
- useReanimatedHook: boolean;
12
- };
2
+ import { GestureType } from '../gesture';
3
+ import { UserSelect, TouchAction } from '../../gestureHandlerCommon';
4
+ import { ComposedGesture } from '../gestureComposition';
13
5
  interface GestureDetectorProps {
6
+ children?: React.ReactNode;
14
7
  /**
15
8
  * A gesture object containing the configuration and callbacks.
16
9
  * Can be any of:
@@ -18,7 +11,6 @@ interface GestureDetectorProps {
18
11
  * - `ComposedGesture` (`Race`, `Simultaneous`, `Exclusive`)
19
12
  */
20
13
  gesture: ComposedGesture | GestureType;
21
- children?: React.ReactNode;
22
14
  /**
23
15
  * #### Web only
24
16
  * This parameter allows to specify which `userSelect` property should be applied to underlying view.
@@ -0,0 +1,3 @@
1
+ import { GestureType } from '../gesture';
2
+ import { AttachedGestureState } from './types';
3
+ export declare function needsToReattach(preparedGesture: AttachedGestureState, newGestures: GestureType[]): boolean;
@@ -0,0 +1,20 @@
1
+ import { GestureType, HandlerCallbacks } from '../gesture';
2
+ import { SharedValue } from '../reanimatedWrapper';
3
+ import { HandlerStateChangeEvent } from '../../gestureHandlerCommon';
4
+ export interface AttachedGestureState {
5
+ attachedGestures: GestureType[];
6
+ animatedEventHandler: unknown;
7
+ animatedHandlers: SharedValue<HandlerCallbacks<Record<string, unknown>>[] | null> | null;
8
+ shouldUseReanimated: boolean;
9
+ isMounted: boolean;
10
+ }
11
+ export interface GestureDetectorState {
12
+ firstRender: boolean;
13
+ viewRef: React.Component | null;
14
+ previousViewTag: number;
15
+ forceRebuildReanimatedEvent: boolean;
16
+ }
17
+ export interface WebEventHandler {
18
+ onGestureHandlerEvent: (event: HandlerStateChangeEvent<unknown>) => void;
19
+ onGestureHandlerStateChange?: (event: HandlerStateChangeEvent<unknown>) => void;
20
+ }
@@ -0,0 +1,4 @@
1
+ import { GestureType } from '../gesture';
2
+ import { ComposedGesture } from '../gestureComposition';
3
+ import { AttachedGestureState } from './types';
4
+ export declare function updateHandlers(preparedGesture: AttachedGestureState, gestureConfig: ComposedGesture | GestureType, newGestures: GestureType[]): void;
@@ -0,0 +1,2 @@
1
+ import { AttachedGestureState } from './types';
2
+ export declare function useAnimatedGesture(preparedGesture: AttachedGestureState, needsRebuild: boolean): void;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { GestureType } from '../gesture';
3
+ import { ComposedGesture } from '../gestureComposition';
4
+ import { AttachedGestureState, GestureDetectorState, WebEventHandler } from './types';
5
+ export declare function useDetectorUpdater(state: GestureDetectorState, preparedGesture: AttachedGestureState, gesturesToAttach: GestureType[], gestureConfig: ComposedGesture | GestureType, webEventHandlersRef: React.RefObject<WebEventHandler>): (skipConfigUpdate?: boolean) => void;
@@ -0,0 +1,3 @@
1
+ import { GestureDetectorState } from './types';
2
+ import React from 'react';
3
+ export declare function useViewRefHandler(state: GestureDetectorState, updateAttachedGestures: (skipConfigUpdate?: boolean) => void): (ref: React.Component | null) => void;
@@ -0,0 +1,12 @@
1
+ import { GestureType } from '../gesture';
2
+ import { WebEventHandler } from './types';
3
+ export declare const ALLOWED_PROPS: string[];
4
+ export declare function extractGestureRelations(gesture: GestureType): {
5
+ waitFor: number[];
6
+ simultaneousHandlers: number[];
7
+ blocksHandlers: number[];
8
+ };
9
+ export declare function checkGestureCallbacksForWorklets(gesture: GestureType): void;
10
+ export declare function validateDetectorChildren(ref: any): void;
11
+ export declare function useForceRender(): () => void;
12
+ export declare function useWebEventHandlers(): import("react").MutableRefObject<WebEventHandler>;
@@ -10,5 +10,5 @@ declare let Reanimated: {
10
10
  useEvent: (callback: (event: GestureUpdateEvent | GestureStateChangeEvent) => void, events: string[], rebuild: boolean) => unknown;
11
11
  useSharedValue: <T>(value: T) => SharedValue<T>;
12
12
  setGestureState: (handlerTag: number, newState: number) => void;
13
- };
13
+ } | undefined;
14
14
  export { Reanimated };
@@ -6,3 +6,13 @@ export declare function isJestEnv(): boolean;
6
6
  export declare function tagMessage(msg: string): string;
7
7
  export declare function isFabric(): boolean;
8
8
  export declare function isRemoteDebuggingEnabled(): boolean;
9
+ /**
10
+ * Recursively compares two objects for deep equality.
11
+ *
12
+ * **Note:** This function does not support cyclic references.
13
+ *
14
+ * @param obj1 - The first object to compare.
15
+ * @param obj2 - The second object to compare.
16
+ * @returns `true` if the objects are deeply equal, `false` otherwise.
17
+ */
18
+ export declare function deepEqual(obj1: any, obj2: any): boolean;
@@ -67,6 +67,7 @@ export default abstract class GestureHandler implements IGestureHandler {
67
67
  protected onPointerMoveOver(_event: AdaptedEvent): void;
68
68
  protected onPointerMoveOut(_event: AdaptedEvent): void;
69
69
  private tryToSendMoveEvent;
70
+ protected tryToSendTouchEvent(event: AdaptedEvent): void;
70
71
  sendTouchEvent(event: AdaptedEvent): void;
71
72
  sendEvent: (newState: State, oldState: State) => void;
72
73
  private transformEventData;
@@ -88,6 +88,7 @@ interface NativeTouchEvent extends Record<string, TouchNativeArgs> {
88
88
  changedTouches: PointerData[];
89
89
  allTouches: PointerData[];
90
90
  numberOfTouches: number;
91
+ pointerType: PointerType;
91
92
  }
92
93
  export interface ResultEvent extends Record<string, NativeEvent | number> {
93
94
  nativeEvent: NativeEvent;
@@ -1,8 +1,8 @@
1
- import { AdaptedEvent } from '../interfaces';
1
+ import { AdaptedEvent, Point } from '../interfaces';
2
2
  export interface TrackerElement {
3
- lastX: number;
4
- lastY: number;
5
- timeStamp: number;
3
+ abosoluteCoords: Point;
4
+ relativeCoords: Point;
5
+ timestamp: number;
6
6
  velocityX: number;
7
7
  velocityY: number;
8
8
  }
@@ -11,7 +11,8 @@ export default class PointerTracker {
11
11
  private trackedPointers;
12
12
  private touchEventsIds;
13
13
  private lastMovedPointerId;
14
- private cachedAverages;
14
+ private cachedAbsoluteAverages;
15
+ private cachedRelativeAverages;
15
16
  constructor();
16
17
  addToTracker(event: AdaptedEvent): void;
17
18
  removeFromTracker(pointerId: number): void;
@@ -19,32 +20,34 @@ export default class PointerTracker {
19
20
  private mapTouchEventId;
20
21
  private removeMappedTouchId;
21
22
  getMappedTouchEventId(touchEventId: number): number;
22
- getVelocityX(pointerId: number): number;
23
- getVelocityY(pointerId: number): number;
24
- /**
25
- * Returns X coordinate of last moved pointer
26
- */
27
- getLastX(): number;
28
- /**
29
- *
30
- * @param pointerId
31
- * Returns X coordinate of given pointer
32
- */
33
- getLastX(pointerId: number): number;
34
- /**
35
- * Returns Y coordinate of last moved pointer
36
- */
37
- getLastY(): number;
38
- /**
39
- *
40
- * @param pointerId
41
- * Returns Y coordinate of given pointer
42
- */
43
- getLastY(pointerId: number): number;
44
- getLastAvgX(): number;
45
- getLastAvgY(): number;
46
- getSumX(ignoredPointer?: number): number;
47
- getSumY(ignoredPointer?: number): number;
23
+ getVelocity(pointerId: number): {
24
+ x: number;
25
+ y: number;
26
+ };
27
+ getLastAbsoluteCoords(pointerId?: number): {
28
+ x: number;
29
+ y: number;
30
+ };
31
+ getLastRelativeCoords(pointerId?: number): {
32
+ x: number;
33
+ y: number;
34
+ };
35
+ getAbsoluteCoordsAverage(): {
36
+ x: number;
37
+ y: number;
38
+ };
39
+ getRelativeCoordsAverage(): {
40
+ x: number;
41
+ y: number;
42
+ };
43
+ getAbsoluteCoordsSum(ignoredPointer?: number): {
44
+ x: number;
45
+ y: number;
46
+ };
47
+ getRelativeCoordsSum(ignoredPointer?: number): {
48
+ x: number;
49
+ y: number;
50
+ };
48
51
  getTrackedPointersCount(): number;
49
52
  getTrackedPointersID(): number[];
50
53
  getData(): Map<number, TrackerElement>;
@@ -4,3 +4,7 @@ export declare function isPointerInBounds(view: HTMLElement, { x, y }: Point): b
4
4
  export declare const PointerTypeMapping: Map<string, PointerType>;
5
5
  export declare const degToRad: (degrees: number) => number;
6
6
  export declare const coneToDeviation: (degrees: number) => number;
7
+ export declare function calculateViewScale(view: HTMLElement): {
8
+ scaleX: number;
9
+ scaleY: number;
10
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-gesture-handler",
3
- "version": "2.16.2",
3
+ "version": "2.17.0",
4
4
  "description": "Experimental implementation of a new declarative API for gesture handling in react-native",
5
5
  "scripts": {
6
6
  "prepare": "bob build && husky install",
@@ -14,7 +14,8 @@
14
14
  "format:ios": "find apple/ -iname *.h -o -iname *.m -o -iname *.cpp -o -iname *.mm | xargs clang-format -i",
15
15
  "lint:js": "eslint --ext '.js,.ts,.tsx' src/ example/src FabricExample/src MacOSExample/src && yarn prettier --check './{src,example,FabricExample,MacOSExample}/**/*.{js,jsx,ts,tsx}'",
16
16
  "lint:js-root": "eslint --ext '.js,.ts,.tsx' src/ && yarn prettier --check './src/**/*.{js,jsx,ts,tsx}'",
17
- "lint:android": "./android/gradlew -p android spotlessCheck -q"
17
+ "lint:android": "./android/gradlew -p android spotlessCheck -q",
18
+ "checkIntegrity": "(cd ./FabricExample/android && ./gradlew generateCodegenArtifactsFromSchema -PskipCodegenCopyTask) && (cd ./android && ./gradlew checkIntegrityBetweenArchitectures)"
18
19
  },
19
20
  "react-native": "src/index.ts",
20
21
  "main": "lib/commonjs/index.js",
@@ -62,7 +63,6 @@
62
63
  "@egjs/hammerjs": "^2.0.17",
63
64
  "hoist-non-react-statics": "^3.3.0",
64
65
  "invariant": "^2.2.4",
65
- "lodash": "^4.17.21",
66
66
  "prop-types": "^15.7.2"
67
67
  },
68
68
  "jest": {
@@ -102,9 +102,9 @@
102
102
  "prettier": "^2.7.1",
103
103
  "react": "18.2.0",
104
104
  "react-dom": "^16.12.0",
105
- "react-native": "0.73.2",
105
+ "react-native": "0.74.1",
106
106
  "react-native-builder-bob": "^0.17.1",
107
- "react-native-reanimated": "^2.3.1",
107
+ "react-native-reanimated": "^3.12.0",
108
108
  "react-native-web": "^0.11.7",
109
109
  "react-test-renderer": "17.0.2",
110
110
  "release-it": "^13.6.5",
@@ -65,6 +65,10 @@ export interface RawButtonProps extends NativeViewGestureHandlerProps {
65
65
  touchSoundDisabled?: boolean;
66
66
  }
67
67
 
68
+ interface ButtonWithRefProps {
69
+ innerRef?: React.ForwardedRef<React.ComponentType<any>>;
70
+ }
71
+
68
72
  export interface BaseButtonProps extends RawButtonProps {
69
73
  /**
70
74
  * Called when the button gets pressed (analogous to `onPress` in
@@ -94,6 +98,8 @@ export interface BaseButtonProps extends RawButtonProps {
94
98
  delayLongPress?: number;
95
99
  }
96
100
 
101
+ interface BaseButtonWithRefProps extends BaseButtonProps, ButtonWithRefProps {}
102
+
97
103
  export interface RectButtonProps extends BaseButtonProps {
98
104
  /**
99
105
  * Background color that will be dimmed when button is in active state.
@@ -108,6 +114,8 @@ export interface RectButtonProps extends BaseButtonProps {
108
114
  activeOpacity?: number;
109
115
  }
110
116
 
117
+ interface RectButtonWithRefProps extends RectButtonProps, ButtonWithRefProps {}
118
+
111
119
  export interface BorderlessButtonProps extends BaseButtonProps {
112
120
  /**
113
121
  * iOS only.
@@ -117,12 +125,16 @@ export interface BorderlessButtonProps extends BaseButtonProps {
117
125
  activeOpacity?: number;
118
126
  }
119
127
 
128
+ interface BorderlessButtonWithRefProps
129
+ extends BorderlessButtonProps,
130
+ ButtonWithRefProps {}
131
+
120
132
  export const RawButton = createNativeWrapper(GestureHandlerButton, {
121
133
  shouldCancelWhenOutside: false,
122
134
  shouldActivateOnStart: false,
123
135
  });
124
136
 
125
- export class BaseButton extends React.Component<BaseButtonProps> {
137
+ class InnerBaseButton extends React.Component<BaseButtonWithRefProps> {
126
138
  static defaultProps = {
127
139
  delayLongPress: 600,
128
140
  };
@@ -222,6 +234,7 @@ export class BaseButton extends React.Component<BaseButtonProps> {
222
234
 
223
235
  return (
224
236
  <RawButton
237
+ ref={this.props.innerRef}
225
238
  rippleColor={processColor(rippleColor)}
226
239
  {...rest}
227
240
  onGestureEvent={this.onGestureEvent}
@@ -231,6 +244,11 @@ export class BaseButton extends React.Component<BaseButtonProps> {
231
244
  }
232
245
  }
233
246
 
247
+ export const BaseButton = React.forwardRef<
248
+ any,
249
+ Omit<BaseButtonProps, 'innerRef'>
250
+ >((props, ref) => <InnerBaseButton innerRef={ref} {...props} />);
251
+
234
252
  const AnimatedBaseButton = Animated.createAnimatedComponent(BaseButton);
235
253
 
236
254
  const btnStyles = StyleSheet.create({
@@ -243,7 +261,7 @@ const btnStyles = StyleSheet.create({
243
261
  },
244
262
  });
245
263
 
246
- export class RectButton extends React.Component<RectButtonProps> {
264
+ class InnerRectButton extends React.Component<RectButtonWithRefProps> {
247
265
  static defaultProps = {
248
266
  activeOpacity: 0.105,
249
267
  underlayColor: 'black',
@@ -272,6 +290,7 @@ export class RectButton extends React.Component<RectButtonProps> {
272
290
  return (
273
291
  <BaseButton
274
292
  {...rest}
293
+ ref={this.props.innerRef}
275
294
  style={resolvedStyle}
276
295
  onActiveStateChange={this.onActiveStateChange}>
277
296
  <Animated.View
@@ -294,7 +313,12 @@ export class RectButton extends React.Component<RectButtonProps> {
294
313
  }
295
314
  }
296
315
 
297
- export class BorderlessButton extends React.Component<BorderlessButtonProps> {
316
+ export const RectButton = React.forwardRef<
317
+ any,
318
+ Omit<RectButtonProps, 'innerRef'>
319
+ >((props, ref) => <InnerRectButton innerRef={ref} {...props} />);
320
+
321
+ class InnerBorderlessButton extends React.Component<BorderlessButtonWithRefProps> {
298
322
  static defaultProps = {
299
323
  activeOpacity: 0.3,
300
324
  borderless: true,
@@ -316,11 +340,14 @@ export class BorderlessButton extends React.Component<BorderlessButtonProps> {
316
340
  };
317
341
 
318
342
  render() {
319
- const { children, style, ...rest } = this.props;
343
+ const { children, style, innerRef, ...rest } = this.props;
320
344
 
321
345
  return (
322
346
  <AnimatedBaseButton
323
347
  {...rest}
348
+ // @ts-ignore We don't want `innerRef` to be accessible from public API.
349
+ // However in this case we need to set it indirectly on `BaseButton`, hence we use ts-ignore
350
+ innerRef={innerRef}
324
351
  onActiveStateChange={this.onActiveStateChange}
325
352
  style={[style, Platform.OS === 'ios' && { opacity: this.opacity }]}>
326
353
  {children}
@@ -329,4 +356,9 @@ export class BorderlessButton extends React.Component<BorderlessButtonProps> {
329
356
  }
330
357
  }
331
358
 
359
+ export const BorderlessButton = React.forwardRef<
360
+ any,
361
+ Omit<BorderlessButtonProps, 'innerRef'>
362
+ >((props, ref) => <InnerBorderlessButton innerRef={ref} {...props} />);
363
+
332
364
  export { default as PureNativeButton } from './GestureHandlerButton';
@@ -6,8 +6,6 @@ import {
6
6
  EmitterSubscription,
7
7
  } from 'react-native';
8
8
  import { customDirectEventTypes } from './customDirectEventTypes';
9
- // @ts-ignore - it isn't typed by TS & don't have definitelyTyped types
10
- import deepEqual from 'lodash/isEqual';
11
9
  import RNGestureHandlerModule from '../RNGestureHandlerModule';
12
10
  import { State } from '../State';
13
11
  import {
@@ -25,7 +23,7 @@ import {
25
23
  scheduleFlushOperations,
26
24
  } from './gestureHandlerCommon';
27
25
  import { ValueOf } from '../typeUtils';
28
- import { isFabric, isJestEnv, tagMessage } from '../utils';
26
+ import { deepEqual, isFabric, isJestEnv, tagMessage } from '../utils';
29
27
  import { ActionType } from '../ActionType';
30
28
  import { PressabilityDebugView } from './PressabilityDebugView';
31
29
  import GestureHandlerRootViewContext from '../GestureHandlerRootViewContext';
@@ -45,7 +45,7 @@ export const baseGestureHandlerProps = [
45
45
  'onHandlerStateChange',
46
46
  ] as const;
47
47
 
48
- export const baseGestureHandlerWithMonitorProps = [
48
+ export const baseGestureHandlerWithDetectorProps = [
49
49
  ...commonProps,
50
50
  'needsPointerData',
51
51
  'manualActivation',
@@ -63,6 +63,8 @@ export interface HandlerStateChangeEventPayload extends GestureEventPayload {
63
63
 
64
64
  export type HitSlop =
65
65
  | number
66
+ | null
67
+ | undefined
66
68
  | Partial<
67
69
  Record<
68
70
  'left' | 'right' | 'top' | 'bottom' | 'vertical' | 'horizontal',
@@ -165,6 +167,7 @@ export type GestureTouchEvent = {
165
167
  eventType: TouchEventType;
166
168
  allTouches: TouchData[];
167
169
  changedTouches: TouchData[];
170
+ pointerType: PointerType;
168
171
  };
169
172
 
170
173
  export type GestureUpdateEvent<GestureEventPayloadT = Record<string, unknown>> =