react-native-gesture-handler 2.15.0 → 2.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (254) hide show
  1. package/RNGestureHandler.podspec +2 -23
  2. package/android/build.gradle +1 -1
  3. package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +2 -0
  4. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +9 -0
  5. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +3 -0
  6. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +11 -6
  7. package/android/src/main/java/com/swmansion/gesturehandler/core/DiagonalDirections.kt +8 -0
  8. package/android/src/main/java/com/swmansion/gesturehandler/core/FlingGestureHandler.kt +65 -24
  9. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +86 -22
  10. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +54 -29
  11. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureUtils.kt +3 -0
  12. package/android/src/main/java/com/swmansion/gesturehandler/core/LongPressGestureHandler.kt +5 -1
  13. package/android/src/main/java/com/swmansion/gesturehandler/core/PanGestureHandler.kt +5 -1
  14. package/android/src/main/java/com/swmansion/gesturehandler/core/TapGestureHandler.kt +7 -3
  15. package/android/src/main/java/com/swmansion/gesturehandler/core/Vector.kt +66 -0
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +119 -19
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +2 -2
  18. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +1 -4
  19. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +8 -5
  20. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +7 -4
  21. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +1 -1
  22. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +1 -4
  23. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +4 -7
  24. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/GestureHandlerEventDataBuilder.kt +3 -0
  25. package/android/src/main/jni/cpp-adapter.cpp +18 -22
  26. package/apple/Handlers/RNFlingHandler.m +5 -4
  27. package/apple/Handlers/RNForceTouchHandler.m +3 -1
  28. package/apple/Handlers/RNHoverHandler.m +2 -1
  29. package/apple/Handlers/RNLongPressHandler.m +8 -14
  30. package/apple/Handlers/RNManualHandler.m +1 -0
  31. package/apple/Handlers/RNNativeViewHandler.mm +9 -7
  32. package/apple/Handlers/RNPanHandler.m +7 -2
  33. package/apple/Handlers/RNPinchHandler.m +50 -26
  34. package/apple/Handlers/RNRotationHandler.m +43 -29
  35. package/apple/Handlers/RNTapHandler.m +6 -4
  36. package/apple/RNGestureHandler.h +9 -0
  37. package/apple/RNGestureHandler.m +41 -4
  38. package/apple/RNGestureHandlerEvents.h +18 -9
  39. package/apple/RNGestureHandlerEvents.m +29 -11
  40. package/apple/RNGestureHandlerManager.h +5 -0
  41. package/apple/RNGestureHandlerManager.mm +32 -6
  42. package/apple/RNGestureHandlerModule.h +5 -3
  43. package/apple/RNGestureHandlerModule.mm +33 -19
  44. package/apple/RNGestureHandlerPointerType.h +8 -0
  45. package/lib/commonjs/Directions.js +19 -6
  46. package/lib/commonjs/Directions.js.map +1 -1
  47. package/lib/commonjs/PointerType.js +16 -0
  48. package/lib/commonjs/PointerType.js.map +1 -0
  49. package/lib/commonjs/RNGestureHandlerModule.web.js +7 -61
  50. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  51. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  52. package/lib/commonjs/components/GestureHandlerRootView.android.js +17 -2
  53. package/lib/commonjs/components/GestureHandlerRootView.android.js.map +1 -1
  54. package/lib/commonjs/components/GestureHandlerRootView.js +15 -2
  55. package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
  56. package/lib/commonjs/components/GestureHandlerRootView.web.js +15 -2
  57. package/lib/commonjs/components/GestureHandlerRootView.web.js.map +1 -1
  58. package/lib/commonjs/components/Swipeable.js +3 -1
  59. package/lib/commonjs/components/Swipeable.js.map +1 -1
  60. package/lib/commonjs/components/touchables/GenericTouchable.js +1 -0
  61. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  62. package/lib/commonjs/getShadowNodeFromRef.js +19 -2
  63. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
  64. package/lib/commonjs/handlers/createHandler.js +5 -0
  65. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  66. package/lib/commonjs/handlers/customDirectEventTypes.js +14 -0
  67. package/lib/commonjs/handlers/customDirectEventTypes.js.map +1 -0
  68. package/lib/commonjs/handlers/customDirectEventTypes.web.js +11 -0
  69. package/lib/commonjs/handlers/customDirectEventTypes.web.js.map +1 -0
  70. package/lib/commonjs/handlers/gestureHandlerCommon.js +13 -2
  71. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  72. package/lib/commonjs/handlers/gestures/GestureDetector.js +10 -0
  73. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  74. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  75. package/lib/commonjs/index.js +11 -3
  76. package/lib/commonjs/index.js.map +1 -1
  77. package/lib/commonjs/mocks.js +2 -0
  78. package/lib/commonjs/mocks.js.map +1 -1
  79. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js.map +1 -1
  80. package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  81. package/lib/commonjs/web/Gestures.js +66 -0
  82. package/lib/commonjs/web/Gestures.js.map +1 -0
  83. package/lib/commonjs/web/constants.js +3 -8
  84. package/lib/commonjs/web/constants.js.map +1 -1
  85. package/lib/commonjs/web/handlers/FlingGestureHandler.js +36 -12
  86. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  87. package/lib/commonjs/web/handlers/GestureHandler.js +10 -5
  88. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  89. package/lib/commonjs/web/handlers/IGestureHandler.js +2 -0
  90. package/lib/commonjs/web/handlers/IGestureHandler.js.map +1 -0
  91. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +5 -6
  92. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  93. package/lib/commonjs/web/interfaces.js +1 -23
  94. package/lib/commonjs/web/interfaces.js.map +1 -1
  95. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  96. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +117 -118
  97. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  98. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +10 -5
  99. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  100. package/lib/commonjs/web/tools/InteractionManager.js +12 -3
  101. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  102. package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
  103. package/lib/commonjs/web/tools/PointerEventManager.js +77 -27
  104. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  105. package/lib/commonjs/web/tools/TouchEventManager.js +29 -6
  106. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
  107. package/lib/commonjs/web/tools/Vector.js +58 -0
  108. package/lib/commonjs/web/tools/Vector.js.map +1 -0
  109. package/lib/commonjs/web/utils.js +14 -0
  110. package/lib/commonjs/web/utils.js.map +1 -1
  111. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
  112. package/lib/module/Directions.js +16 -4
  113. package/lib/module/Directions.js.map +1 -1
  114. package/lib/module/PointerType.js +9 -0
  115. package/lib/module/PointerType.js.map +1 -0
  116. package/lib/module/RNGestureHandlerModule.web.js +2 -39
  117. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  118. package/lib/module/components/DrawerLayout.js.map +1 -1
  119. package/lib/module/components/GestureHandlerRootView.android.js +15 -2
  120. package/lib/module/components/GestureHandlerRootView.android.js.map +1 -1
  121. package/lib/module/components/GestureHandlerRootView.js +15 -3
  122. package/lib/module/components/GestureHandlerRootView.js.map +1 -1
  123. package/lib/module/components/GestureHandlerRootView.web.js +15 -3
  124. package/lib/module/components/GestureHandlerRootView.web.js.map +1 -1
  125. package/lib/module/components/Swipeable.js +3 -1
  126. package/lib/module/components/Swipeable.js.map +1 -1
  127. package/lib/module/components/touchables/GenericTouchable.js +1 -0
  128. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  129. package/lib/module/getShadowNodeFromRef.js +19 -2
  130. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  131. package/lib/module/handlers/createHandler.js +5 -1
  132. package/lib/module/handlers/createHandler.js.map +1 -1
  133. package/lib/module/handlers/customDirectEventTypes.js +3 -0
  134. package/lib/module/handlers/customDirectEventTypes.js.map +1 -0
  135. package/lib/module/handlers/customDirectEventTypes.web.js +5 -0
  136. package/lib/module/handlers/customDirectEventTypes.web.js.map +1 -0
  137. package/lib/module/handlers/gestureHandlerCommon.js +11 -1
  138. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  139. package/lib/module/handlers/gestures/GestureDetector.js +10 -0
  140. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  141. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  142. package/lib/module/index.js +2 -1
  143. package/lib/module/index.js.map +1 -1
  144. package/lib/module/mocks.js +2 -0
  145. package/lib/module/mocks.js.map +1 -1
  146. package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -1
  147. package/lib/module/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  148. package/lib/module/web/Gestures.js +39 -0
  149. package/lib/module/web/Gestures.js.map +1 -0
  150. package/lib/module/web/constants.js +1 -6
  151. package/lib/module/web/constants.js.map +1 -1
  152. package/lib/module/web/handlers/FlingGestureHandler.js +34 -12
  153. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  154. package/lib/module/web/handlers/GestureHandler.js +7 -4
  155. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  156. package/lib/module/web/handlers/IGestureHandler.js +2 -0
  157. package/lib/module/web/handlers/IGestureHandler.js.map +1 -0
  158. package/lib/module/web/handlers/NativeViewGestureHandler.js +5 -6
  159. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  160. package/lib/module/web/interfaces.js +0 -20
  161. package/lib/module/web/interfaces.js.map +1 -1
  162. package/lib/module/web/tools/EventManager.js.map +1 -1
  163. package/lib/module/web/tools/GestureHandlerOrchestrator.js +116 -117
  164. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  165. package/lib/module/web/tools/GestureHandlerWebDelegate.js +9 -4
  166. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  167. package/lib/module/web/tools/InteractionManager.js +9 -3
  168. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  169. package/lib/module/web/tools/NodeManager.js.map +1 -1
  170. package/lib/module/web/tools/PointerEventManager.js +75 -27
  171. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  172. package/lib/module/web/tools/TouchEventManager.js +28 -6
  173. package/lib/module/web/tools/TouchEventManager.js.map +1 -1
  174. package/lib/module/web/tools/Vector.js +47 -0
  175. package/lib/module/web/tools/Vector.js.map +1 -0
  176. package/lib/module/web/utils.js +4 -0
  177. package/lib/module/web/utils.js.map +1 -1
  178. package/lib/module/web_hammer/NodeManager.js.map +1 -1
  179. package/lib/typescript/Directions.d.ts +7 -0
  180. package/lib/typescript/PointerType.d.ts +6 -0
  181. package/lib/typescript/RNGestureHandlerModule.web.d.ts +4 -39
  182. package/lib/typescript/components/DrawerLayout.d.ts +1 -2
  183. package/lib/typescript/components/GestureHandlerRootView.android.d.ts +1 -1
  184. package/lib/typescript/components/GestureHandlerRootView.d.ts +1 -1
  185. package/lib/typescript/components/GestureHandlerRootView.web.d.ts +1 -1
  186. package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -1
  187. package/lib/typescript/getShadowNodeFromRef.d.ts +1 -1
  188. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
  189. package/lib/typescript/handlers/customDirectEventTypes.d.ts +1 -0
  190. package/lib/typescript/handlers/customDirectEventTypes.web.d.ts +2 -0
  191. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +13 -2
  192. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -1
  193. package/lib/typescript/handlers/gestures/gesture.d.ts +1 -2
  194. package/lib/typescript/index.d.ts +2 -1
  195. package/lib/typescript/mocks.d.ts +1 -0
  196. package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +6 -6
  197. package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +4 -1
  198. package/lib/typescript/web/Gestures.d.ts +36 -0
  199. package/lib/typescript/web/constants.d.ts +1 -6
  200. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +3 -3
  201. package/lib/typescript/web/handlers/GestureHandler.d.ts +12 -9
  202. package/lib/typescript/web/handlers/IGestureHandler.d.ts +38 -0
  203. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -0
  204. package/lib/typescript/web/interfaces.d.ts +9 -16
  205. package/lib/typescript/web/tools/EventManager.d.ts +15 -12
  206. package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +3 -4
  207. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +7 -5
  208. package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +3 -3
  209. package/lib/typescript/web/tools/InteractionManager.d.ts +6 -6
  210. package/lib/typescript/web/tools/NodeManager.d.ts +4 -3
  211. package/lib/typescript/web/tools/PointerEventManager.d.ts +11 -2
  212. package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -1
  213. package/lib/typescript/web/tools/Vector.d.ts +15 -0
  214. package/lib/typescript/web/utils.d.ts +6 -4
  215. package/lib/typescript/web_hammer/NodeManager.d.ts +1 -1
  216. package/package.json +2 -1
  217. package/src/Directions.ts +21 -4
  218. package/src/PointerType.ts +6 -0
  219. package/src/RNGestureHandlerModule.web.ts +3 -44
  220. package/src/components/DrawerLayout.tsx +1 -1
  221. package/src/components/GestureHandlerRootView.android.tsx +13 -5
  222. package/src/components/GestureHandlerRootView.tsx +10 -5
  223. package/src/components/GestureHandlerRootView.web.tsx +10 -5
  224. package/src/components/Swipeable.tsx +2 -0
  225. package/src/components/touchables/GenericTouchable.tsx +3 -0
  226. package/src/getShadowNodeFromRef.ts +28 -6
  227. package/src/handlers/createHandler.tsx +14 -2
  228. package/src/handlers/customDirectEventTypes.ts +2 -0
  229. package/src/handlers/customDirectEventTypes.web.ts +5 -0
  230. package/src/handlers/gestureHandlerCommon.ts +30 -1
  231. package/src/handlers/gestures/GestureDetector.tsx +15 -0
  232. package/src/handlers/gestures/gesture.ts +1 -1
  233. package/src/index.ts +2 -1
  234. package/src/mocks.ts +2 -0
  235. package/src/specs/NativeRNGestureHandlerModule.ts +8 -8
  236. package/src/specs/RNGestureHandlerButtonNativeComponent.ts +4 -0
  237. package/src/web/Gestures.ts +41 -0
  238. package/src/web/constants.ts +1 -7
  239. package/src/web/handlers/FlingGestureHandler.ts +54 -24
  240. package/src/web/handlers/GestureHandler.ts +17 -12
  241. package/src/web/handlers/IGestureHandler.ts +50 -0
  242. package/src/web/handlers/NativeViewGestureHandler.ts +5 -6
  243. package/src/web/interfaces.ts +15 -17
  244. package/src/web/tools/EventManager.ts +16 -14
  245. package/src/web/tools/GestureHandlerDelegate.ts +3 -4
  246. package/src/web/tools/GestureHandlerOrchestrator.ts +162 -147
  247. package/src/web/tools/GestureHandlerWebDelegate.ts +14 -9
  248. package/src/web/tools/InteractionManager.ts +18 -12
  249. package/src/web/tools/NodeManager.ts +4 -3
  250. package/src/web/tools/PointerEventManager.ts +189 -154
  251. package/src/web/tools/TouchEventManager.ts +128 -120
  252. package/src/web/tools/Vector.ts +60 -0
  253. package/src/web/utils.ts +16 -4
  254. package/src/web_hammer/NodeManager.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["InteractionManager.ts"],"names":["InteractionManager","constructor","Map","configureInteractions","handler","config","dropRelationsForHandlerWithTag","getTag","waitFor","forEach","otherHandler","push","handlerTag","waitForRelations","set","simultaneousHandlers","simultaneousRelations","blocksHandlers","blocksHandlersRelations","shouldWaitForHandlerFailure","get","find","tag","undefined","shouldRecognizeSimultaneously","shouldRequireHandlerToWaitForFailure","shouldHandlerBeCancelledBy","_handler","_otherHandler","delete","reset","clear","getInstance","instance"],"mappings":";;;;;;;;;AAGe,MAAMA,kBAAN,CAAyB;AAMtC;AACA;AACQC,EAAAA,WAAW,GAAG;AAAA,8CANqC,IAAIC,GAAJ,EAMrC;;AAAA,mDAL0C,IAAIA,GAAJ,EAK1C;;AAAA,qDAJ4C,IAAIA,GAAJ,EAI5C;AAAE;;AAEjBC,EAAAA,qBAAqB,CAACC,OAAD,EAA0BC,MAA1B,EAA0C;AACpE,SAAKC,8BAAL,CAAoCF,OAAO,CAACG,MAAR,EAApC;;AAEA,QAAIF,MAAM,CAACG,OAAX,EAAoB;AAClB,YAAMA,OAAiB,GAAG,EAA1B;AACAH,MAAAA,MAAM,CAACG,OAAP,CAAeC,OAAf,CAAwBC,YAAD,IAAiC;AACtD;AACA,YAAI,OAAOA,YAAP,KAAwB,QAA5B,EAAsC;AACpCF,UAAAA,OAAO,CAACG,IAAR,CAAaD,YAAb;AACD,SAFD,MAEO;AACL;AACAF,UAAAA,OAAO,CAACG,IAAR,CAAaD,YAAY,CAACE,UAA1B;AACD;AACF,OARD;AAUA,WAAKC,gBAAL,CAAsBC,GAAtB,CAA0BV,OAAO,CAACG,MAAR,EAA1B,EAA4CC,OAA5C;AACD;;AAED,QAAIH,MAAM,CAACU,oBAAX,EAAiC;AAC/B,YAAMA,oBAA8B,GAAG,EAAvC;AACAV,MAAAA,MAAM,CAACU,oBAAP,CAA4BN,OAA5B,CAAqCC,YAAD,IAAiC;AACnE,YAAI,OAAOA,YAAP,KAAwB,QAA5B,EAAsC;AACpCK,UAAAA,oBAAoB,CAACJ,IAArB,CAA0BD,YAA1B;AACD,SAFD,MAEO;AACLK,UAAAA,oBAAoB,CAACJ,IAArB,CAA0BD,YAAY,CAACE,UAAvC;AACD;AACF,OAND;AAQA,WAAKI,qBAAL,CAA2BF,GAA3B,CAA+BV,OAAO,CAACG,MAAR,EAA/B,EAAiDQ,oBAAjD;AACD;;AAED,QAAIV,MAAM,CAACY,cAAX,EAA2B;AACzB,YAAMA,cAAwB,GAAG,EAAjC;AACAZ,MAAAA,MAAM,CAACY,cAAP,CAAsBR,OAAtB,CAA+BC,YAAD,IAAiC;AAC7D,YAAI,OAAOA,YAAP,KAAwB,QAA5B,EAAsC;AACpCO,UAAAA,cAAc,CAACN,IAAf,CAAoBD,YAApB;AACD,SAFD,MAEO;AACLO,UAAAA,cAAc,CAACN,IAAf,CAAoBD,YAAY,CAACE,UAAjC;AACD;AACF,OAND;AAQA,WAAKM,uBAAL,CAA6BJ,GAA7B,CAAiCV,OAAO,CAACG,MAAR,EAAjC,EAAmDU,cAAnD;AACD;AACF;;AAEME,EAAAA,2BAA2B,CAChCf,OADgC,EAEhCM,YAFgC,EAGvB;AACT,UAAMF,OAA6B,GAAG,KAAKK,gBAAL,CAAsBO,GAAtB,CACpChB,OAAO,CAACG,MAAR,EADoC,CAAtC;AAIA,WACE,CAAAC,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEa,IAAT,CAAeC,GAAD,IAAiB;AAC7B,aAAOA,GAAG,KAAKZ,YAAY,CAACH,MAAb,EAAf;AACD,KAFD,OAEOgB,SAHT;AAKD;;AAEMC,EAAAA,6BAA6B,CAClCpB,OADkC,EAElCM,YAFkC,EAGzB;AACT,UAAMK,oBAA0C,GAC9C,KAAKC,qBAAL,CAA2BI,GAA3B,CAA+BhB,OAAO,CAACG,MAAR,EAA/B,CADF;AAGA,WACE,CAAAQ,oBAAoB,SAApB,IAAAA,oBAAoB,WAApB,YAAAA,oBAAoB,CAAEM,IAAtB,CAA4BC,GAAD,IAAiB;AAC1C,aAAOA,GAAG,KAAKZ,YAAY,CAACH,MAAb,EAAf;AACD,KAFD,OAEOgB,SAHT;AAKD;;AAEME,EAAAA,oCAAoC,CACzCrB,OADyC,EAEzCM,YAFyC,EAGhC;AACT,UAAMF,OAA6B,GAAG,KAAKU,uBAAL,CAA6BE,GAA7B,CACpChB,OAAO,CAACG,MAAR,EADoC,CAAtC;AAIA,WACE,CAAAC,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEa,IAAT,CAAeC,GAAD,IAAiB;AAC7B,aAAOA,GAAG,KAAKZ,YAAY,CAACH,MAAb,EAAf;AACD,KAFD,OAEOgB,SAHT;AAKD;;AAEMG,EAAAA,0BAA0B,CAC/BC,QAD+B,EAE/BC,aAF+B,EAGtB;AACT;AACA,WAAO,KAAP;AACD;;AAEMtB,EAAAA,8BAA8B,CAACM,UAAD,EAA2B;AAC9D,SAAKC,gBAAL,CAAsBgB,MAAtB,CAA6BjB,UAA7B;AACA,SAAKI,qBAAL,CAA2Ba,MAA3B,CAAkCjB,UAAlC;AACA,SAAKM,uBAAL,CAA6BW,MAA7B,CAAoCjB,UAApC;AACD;;AAEMkB,EAAAA,KAAK,GAAG;AACb,SAAKjB,gBAAL,CAAsBkB,KAAtB;AACA,SAAKf,qBAAL,CAA2Be,KAA3B;AACA,SAAKb,uBAAL,CAA6Ba,KAA7B;AACD;;AAEwB,SAAXC,WAAW,GAAuB;AAC9C,QAAI,CAAC,KAAKC,QAAV,EAAoB;AAClB,WAAKA,QAAL,GAAgB,IAAIjC,kBAAJ,EAAhB;AACD;;AAED,WAAO,KAAKiC,QAAZ;AACD;;AA7HqC;;;;gBAAnBjC,kB","sourcesContent":["import GestureHandler from '../handlers/GestureHandler';\nimport { Config, Handler } from '../interfaces';\n\nexport default class InteractionManager {\n private static instance: InteractionManager;\n private readonly waitForRelations: Map<number, number[]> = new Map();\n private readonly simultaneousRelations: Map<number, number[]> = new Map();\n private readonly blocksHandlersRelations: Map<number, number[]> = new Map();\n\n // Private becaues of singleton\n // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n private constructor() {}\n\n public configureInteractions(handler: GestureHandler, config: Config) {\n this.dropRelationsForHandlerWithTag(handler.getTag());\n\n if (config.waitFor) {\n const waitFor: number[] = [];\n config.waitFor.forEach((otherHandler: Handler): void => {\n // New API reference\n if (typeof otherHandler === 'number') {\n waitFor.push(otherHandler);\n } else {\n // Old API reference\n waitFor.push(otherHandler.handlerTag);\n }\n });\n\n this.waitForRelations.set(handler.getTag(), waitFor);\n }\n\n if (config.simultaneousHandlers) {\n const simultaneousHandlers: number[] = [];\n config.simultaneousHandlers.forEach((otherHandler: Handler): void => {\n if (typeof otherHandler === 'number') {\n simultaneousHandlers.push(otherHandler);\n } else {\n simultaneousHandlers.push(otherHandler.handlerTag);\n }\n });\n\n this.simultaneousRelations.set(handler.getTag(), simultaneousHandlers);\n }\n\n if (config.blocksHandlers) {\n const blocksHandlers: number[] = [];\n config.blocksHandlers.forEach((otherHandler: Handler): void => {\n if (typeof otherHandler === 'number') {\n blocksHandlers.push(otherHandler);\n } else {\n blocksHandlers.push(otherHandler.handlerTag);\n }\n });\n\n this.blocksHandlersRelations.set(handler.getTag(), blocksHandlers);\n }\n }\n\n public shouldWaitForHandlerFailure(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n const waitFor: number[] | undefined = this.waitForRelations.get(\n handler.getTag()\n );\n\n return (\n waitFor?.find((tag: number) => {\n return tag === otherHandler.getTag();\n }) !== undefined\n );\n }\n\n public shouldRecognizeSimultaneously(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n const simultaneousHandlers: number[] | undefined =\n this.simultaneousRelations.get(handler.getTag());\n\n return (\n simultaneousHandlers?.find((tag: number) => {\n return tag === otherHandler.getTag();\n }) !== undefined\n );\n }\n\n public shouldRequireHandlerToWaitForFailure(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n const waitFor: number[] | undefined = this.blocksHandlersRelations.get(\n handler.getTag()\n );\n\n return (\n waitFor?.find((tag: number) => {\n return tag === otherHandler.getTag();\n }) !== undefined\n );\n }\n\n public shouldHandlerBeCancelledBy(\n _handler: GestureHandler,\n _otherHandler: GestureHandler\n ): boolean {\n //TODO: Implement logic\n return false;\n }\n\n public dropRelationsForHandlerWithTag(handlerTag: number): void {\n this.waitForRelations.delete(handlerTag);\n this.simultaneousRelations.delete(handlerTag);\n this.blocksHandlersRelations.delete(handlerTag);\n }\n\n public reset() {\n this.waitForRelations.clear();\n this.simultaneousRelations.clear();\n this.blocksHandlersRelations.clear();\n }\n\n public static getInstance(): InteractionManager {\n if (!this.instance) {\n this.instance = new InteractionManager();\n }\n\n return this.instance;\n }\n}\n"]}
1
+ {"version":3,"sources":["InteractionManager.ts"],"names":["InteractionManager","constructor","Map","configureInteractions","handler","config","dropRelationsForHandlerWithTag","getTag","waitFor","forEach","otherHandler","push","handlerTag","waitForRelations","set","simultaneousHandlers","simultaneousRelations","blocksHandlers","blocksHandlersRelations","shouldWaitForHandlerFailure","get","find","tag","undefined","shouldRecognizeSimultaneously","shouldRequireHandlerToWaitForFailure","shouldHandlerBeCancelledBy","_handler","isNativeHandler","name","isActive","getState","State","ACTIVE","isButton","delete","reset","clear","getInstance","instance"],"mappings":"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","sourcesContent":["import type IGestureHandler from '../handlers/IGestureHandler';\nimport { State } from '../../State';\nimport { Config, Handler } from '../interfaces';\n\nexport default class InteractionManager {\n private static instance: InteractionManager;\n private readonly waitForRelations: Map<number, number[]> = new Map();\n private readonly simultaneousRelations: Map<number, number[]> = new Map();\n private readonly blocksHandlersRelations: Map<number, number[]> = new Map();\n\n // Private becaues of singleton\n // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n private constructor() {}\n\n public configureInteractions(handler: IGestureHandler, config: Config) {\n this.dropRelationsForHandlerWithTag(handler.getTag());\n\n if (config.waitFor) {\n const waitFor: number[] = [];\n config.waitFor.forEach((otherHandler: Handler): void => {\n // New API reference\n if (typeof otherHandler === 'number') {\n waitFor.push(otherHandler);\n } else {\n // Old API reference\n waitFor.push(otherHandler.handlerTag);\n }\n });\n\n this.waitForRelations.set(handler.getTag(), waitFor);\n }\n\n if (config.simultaneousHandlers) {\n const simultaneousHandlers: number[] = [];\n config.simultaneousHandlers.forEach((otherHandler: Handler): void => {\n if (typeof otherHandler === 'number') {\n simultaneousHandlers.push(otherHandler);\n } else {\n simultaneousHandlers.push(otherHandler.handlerTag);\n }\n });\n\n this.simultaneousRelations.set(handler.getTag(), simultaneousHandlers);\n }\n\n if (config.blocksHandlers) {\n const blocksHandlers: number[] = [];\n config.blocksHandlers.forEach((otherHandler: Handler): void => {\n if (typeof otherHandler === 'number') {\n blocksHandlers.push(otherHandler);\n } else {\n blocksHandlers.push(otherHandler.handlerTag);\n }\n });\n\n this.blocksHandlersRelations.set(handler.getTag(), blocksHandlers);\n }\n }\n\n public shouldWaitForHandlerFailure(\n handler: IGestureHandler,\n otherHandler: IGestureHandler\n ): boolean {\n const waitFor: number[] | undefined = this.waitForRelations.get(\n handler.getTag()\n );\n\n return (\n waitFor?.find((tag: number) => {\n return tag === otherHandler.getTag();\n }) !== undefined\n );\n }\n\n public shouldRecognizeSimultaneously(\n handler: IGestureHandler,\n otherHandler: IGestureHandler\n ): boolean {\n const simultaneousHandlers: number[] | undefined =\n this.simultaneousRelations.get(handler.getTag());\n\n return (\n simultaneousHandlers?.find((tag: number) => {\n return tag === otherHandler.getTag();\n }) !== undefined\n );\n }\n\n public shouldRequireHandlerToWaitForFailure(\n handler: IGestureHandler,\n otherHandler: IGestureHandler\n ): boolean {\n const waitFor: number[] | undefined = this.blocksHandlersRelations.get(\n handler.getTag()\n );\n\n return (\n waitFor?.find((tag: number) => {\n return tag === otherHandler.getTag();\n }) !== undefined\n );\n }\n\n public shouldHandlerBeCancelledBy(\n _handler: IGestureHandler,\n otherHandler: IGestureHandler\n ): boolean {\n // We check constructor name instead of using `instanceof` in order do avoid circular dependencies\n const isNativeHandler =\n otherHandler.constructor.name === 'NativeViewGestureHandler';\n const isActive = otherHandler.getState() === State.ACTIVE;\n const isButton = otherHandler.isButton?.() === true;\n\n return isNativeHandler && isActive && !isButton;\n }\n\n public dropRelationsForHandlerWithTag(handlerTag: number): void {\n this.waitForRelations.delete(handlerTag);\n this.simultaneousRelations.delete(handlerTag);\n this.blocksHandlersRelations.delete(handlerTag);\n }\n\n public reset() {\n this.waitForRelations.clear();\n this.simultaneousRelations.clear();\n this.blocksHandlersRelations.clear();\n }\n\n public static getInstance(): InteractionManager {\n if (!this.instance) {\n this.instance = new InteractionManager();\n }\n\n return this.instance;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["NodeManager.ts"],"names":["NodeManager","getHandler","tag","gestures","Error","createGestureHandler","handlerTag","handler","setTag","dropGestureHandler","onDestroy","getNodes"],"mappings":";;;;;;;;;AAGA;AACe,MAAeA,WAAf,CAA2B;AAMhB,SAAVC,UAAU,CAACC,GAAD,EAAc;AACpC,QAAIA,GAAG,IAAI,KAAKC,QAAhB,EAA0B;AACxB,aAAO,KAAKA,QAAL,CAAcD,GAAd,CAAP;AACD;;AAED,UAAM,IAAIE,KAAJ,CAAW,sBAAqBF,GAAI,EAApC,CAAN;AACD;;AAEiC,SAApBG,oBAAoB,CAChCC,UADgC,EAEhCC,OAFgC,EAG1B;AACN,QAAID,UAAU,IAAI,KAAKH,QAAvB,EAAiC;AAC/B,YAAM,IAAIC,KAAJ,CACH,oBAAmBE,UAAW,mGAD3B,CAAN;AAGD;;AAED,SAAKH,QAAL,CAAcG,UAAd,IAA4BC,OAA5B;AACA,SAAKJ,QAAL,CAAcG,UAAd,EAA0BE,MAA1B,CAAiCF,UAAjC;AACD;;AAE+B,SAAlBG,kBAAkB,CAACH,UAAD,EAA2B;AACzD,QAAI,EAAEA,UAAU,IAAI,KAAKH,QAArB,CAAJ,EAAoC;AAClC;AACD;;AAED,SAAKA,QAAL,CAAcG,UAAd,EAA0BI,SAA1B,GALyD,CAOzD;;AACA,WAAO,KAAKP,QAAL,CAAcG,UAAd,CAAP;AACD;;AAEqB,SAARK,QAAQ,GAAG;AACvB,WAAO,EAAE,GAAG,KAAKR;AAAV,KAAP;AACD;;AAzCuC;;;;gBAAZH,W,cAIxB,E","sourcesContent":["import { ValueOf } from '../../typeUtils';\nimport { Gestures } from '../../RNGestureHandlerModule.web';\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport default abstract class NodeManager {\n private static gestures: Record<\n number,\n InstanceType<ValueOf<typeof Gestures>>\n > = {};\n\n public static getHandler(tag: number) {\n if (tag in this.gestures) {\n return this.gestures[tag];\n }\n\n throw new Error(`No handler for tag ${tag}`);\n }\n\n public static createGestureHandler(\n handlerTag: number,\n handler: InstanceType<ValueOf<typeof Gestures>>\n ): void {\n if (handlerTag in this.gestures) {\n throw new Error(\n `Handler with tag ${handlerTag} already exists. Please ensure that no Gesture instance is used across multiple GestureDetectors.`\n );\n }\n\n this.gestures[handlerTag] = handler;\n this.gestures[handlerTag].setTag(handlerTag);\n }\n\n public static dropGestureHandler(handlerTag: number): void {\n if (!(handlerTag in this.gestures)) {\n return;\n }\n\n this.gestures[handlerTag].onDestroy();\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.gestures[handlerTag];\n }\n\n public static getNodes() {\n return { ...this.gestures };\n }\n}\n"]}
1
+ {"version":3,"sources":["NodeManager.ts"],"names":["NodeManager","getHandler","tag","gestures","Error","createGestureHandler","handlerTag","handler","setTag","dropGestureHandler","onDestroy","getNodes"],"mappings":";;;;;;;;;AAIA;AACe,MAAeA,WAAf,CAA2B;AAMhB,SAAVC,UAAU,CAACC,GAAD,EAA+B;AACrD,QAAIA,GAAG,IAAI,KAAKC,QAAhB,EAA0B;AACxB,aAAO,KAAKA,QAAL,CAAcD,GAAd,CAAP;AACD;;AAED,UAAM,IAAIE,KAAJ,CAAW,sBAAqBF,GAAI,EAApC,CAAN;AACD;;AAEiC,SAApBG,oBAAoB,CAChCC,UADgC,EAEhCC,OAFgC,EAG1B;AACN,QAAID,UAAU,IAAI,KAAKH,QAAvB,EAAiC;AAC/B,YAAM,IAAIC,KAAJ,CACH,oBAAmBE,UAAW,mGAD3B,CAAN;AAGD;;AAED,SAAKH,QAAL,CAAcG,UAAd,IAA4BC,OAA5B;AACA,SAAKJ,QAAL,CAAcG,UAAd,EAA0BE,MAA1B,CAAiCF,UAAjC;AACD;;AAE+B,SAAlBG,kBAAkB,CAACH,UAAD,EAA2B;AACzD,QAAI,EAAEA,UAAU,IAAI,KAAKH,QAArB,CAAJ,EAAoC;AAClC;AACD;;AAED,SAAKA,QAAL,CAAcG,UAAd,EAA0BI,SAA1B,GALyD,CAOzD;;AACA,WAAO,KAAKP,QAAL,CAAcG,UAAd,CAAP;AACD;;AAEqB,SAARK,QAAQ,GAAG;AACvB,WAAO,EAAE,GAAG,KAAKR;AAAV,KAAP;AACD;;AAzCuC;;;;gBAAZH,W,cAIxB,E","sourcesContent":["import { ValueOf } from '../../typeUtils';\nimport { Gestures } from '../Gestures';\nimport type IGestureHandler from '../handlers/IGestureHandler';\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport default abstract class NodeManager {\n private static gestures: Record<\n number,\n InstanceType<ValueOf<typeof Gestures>>\n > = {};\n\n public static getHandler(tag: number): IGestureHandler {\n if (tag in this.gestures) {\n return this.gestures[tag] as IGestureHandler;\n }\n\n throw new Error(`No handler for tag ${tag}`);\n }\n\n public static createGestureHandler(\n handlerTag: number,\n handler: InstanceType<ValueOf<typeof Gestures>>\n ): void {\n if (handlerTag in this.gestures) {\n throw new Error(\n `Handler with tag ${handlerTag} already exists. Please ensure that no Gesture instance is used across multiple GestureDetectors.`\n );\n }\n\n this.gestures[handlerTag] = handler;\n this.gestures[handlerTag].setTag(handlerTag);\n }\n\n public static dropGestureHandler(handlerTag: number): void {\n if (!(handlerTag in this.gestures)) {\n return;\n }\n\n this.gestures[handlerTag].onDestroy();\n\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this.gestures[handlerTag];\n }\n\n public static getNodes() {\n return { ...this.gestures };\n }\n}\n"]}
@@ -5,17 +5,25 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _interfaces = require("../interfaces");
9
-
10
8
  var _EventManager = _interopRequireDefault(require("./EventManager"));
11
9
 
10
+ var _gestureHandlerCommon = require("../../handlers/gestureHandlerCommon");
11
+
12
+ var _interfaces = require("../interfaces");
13
+
12
14
  var _utils = require("../utils");
13
15
 
16
+ var _PointerType = require("../../PointerType");
17
+
14
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
19
 
16
20
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
21
 
18
22
  const POINTER_CAPTURE_EXCLUDE_LIST = new Set(['SELECT', 'INPUT']);
23
+ const PointerTypes = {
24
+ Touch: 'touch',
25
+ Stylus: 'pen'
26
+ };
19
27
 
20
28
  class PointerEventManager extends _EventManager.default {
21
29
  constructor(view) {
@@ -25,16 +33,10 @@ class PointerEventManager extends _EventManager.default {
25
33
 
26
34
  _defineProperty(this, "mouseButtonsMapper", new Map());
27
35
 
28
- this.mouseButtonsMapper.set(0, _interfaces.MouseButton.LEFT);
29
- this.mouseButtonsMapper.set(1, _interfaces.MouseButton.MIDDLE);
30
- this.mouseButtonsMapper.set(2, _interfaces.MouseButton.RIGHT);
31
- this.mouseButtonsMapper.set(3, _interfaces.MouseButton.BUTTON_4);
32
- this.mouseButtonsMapper.set(4, _interfaces.MouseButton.BUTTON_5);
33
- }
36
+ _defineProperty(this, "lastPosition", void 0);
34
37
 
35
- setListeners() {
36
- this.view.addEventListener('pointerdown', event => {
37
- if (event.pointerType === _interfaces.PointerType.TOUCH) {
38
+ _defineProperty(this, "pointerDownCallback", event => {
39
+ if (event.pointerType === PointerTypes.Touch) {
38
40
  return;
39
41
  }
40
42
 
@@ -62,8 +64,9 @@ class PointerEventManager extends _EventManager.default {
62
64
  this.onPointerDown(adaptedEvent);
63
65
  }
64
66
  });
65
- this.view.addEventListener('pointerup', event => {
66
- if (event.pointerType === _interfaces.PointerType.TOUCH) {
67
+
68
+ _defineProperty(this, "pointerUpCallback", event => {
69
+ if (event.pointerType === PointerTypes.Touch) {
67
70
  return;
68
71
  } // When we call reset on gesture handlers, it also resets their event managers
69
72
  // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view
@@ -92,8 +95,16 @@ class PointerEventManager extends _EventManager.default {
92
95
  this.onPointerUp(adaptedEvent);
93
96
  }
94
97
  });
95
- this.view.addEventListener('pointermove', event => {
96
- if (event.pointerType === _interfaces.PointerType.TOUCH) {
98
+
99
+ _defineProperty(this, "pointerMoveCallback", event => {
100
+ if (event.pointerType === PointerTypes.Touch) {
101
+ return;
102
+ } // Stylus triggers `pointermove` event when it detects changes in pressure. Since it is very sensitive to those changes,
103
+ // it constantly sends events, even though there was no change in position. To fix that we check whether
104
+ // pointer has actually moved and if not, we do not send event.
105
+
106
+
107
+ if (event.pointerType === PointerTypes.Stylus && event.x === this.lastPosition.x && event.y === this.lastPosition.y) {
97
108
  return;
98
109
  }
99
110
 
@@ -138,9 +149,13 @@ class PointerEventManager extends _EventManager.default {
138
149
  this.onPointerOutOfBounds(adaptedEvent);
139
150
  }
140
151
  }
152
+
153
+ this.lastPosition.x = event.x;
154
+ this.lastPosition.y = event.y;
141
155
  });
142
- this.view.addEventListener('pointercancel', event => {
143
- if (event.pointerType === _interfaces.PointerType.TOUCH) {
156
+
157
+ _defineProperty(this, "pointerCancelCallback", event => {
158
+ if (event.pointerType === PointerTypes.Touch) {
144
159
  return;
145
160
  }
146
161
 
@@ -149,28 +164,27 @@ class PointerEventManager extends _EventManager.default {
149
164
  this.markAsOutOfBounds(adaptedEvent.pointerId);
150
165
  this.activePointersCounter = 0;
151
166
  this.trackedPointers.clear();
152
- }); // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for
153
- // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.
154
- // We therefore use pointerenter and pointerleave events to handle the hover gesture,
155
- // mapping them to onPointerMoveOver and onPointerMoveOut respectively.
167
+ });
156
168
 
157
- this.view.addEventListener('pointerenter', event => {
158
- if (event.pointerType === _interfaces.PointerType.TOUCH) {
169
+ _defineProperty(this, "pointerEnterCallback", event => {
170
+ if (event.pointerType === PointerTypes.Touch) {
159
171
  return;
160
172
  }
161
173
 
162
174
  const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.ENTER);
163
175
  this.onPointerMoveOver(adaptedEvent);
164
176
  });
165
- this.view.addEventListener('pointerleave', event => {
166
- if (event.pointerType === _interfaces.PointerType.TOUCH) {
177
+
178
+ _defineProperty(this, "pointerLeaveCallback", event => {
179
+ if (event.pointerType === PointerTypes.Touch) {
167
180
  return;
168
181
  }
169
182
 
170
183
  const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.LEAVE);
171
184
  this.onPointerMoveOut(adaptedEvent);
172
185
  });
173
- this.view.addEventListener('lostpointercapture', event => {
186
+
187
+ _defineProperty(this, "lostPointerCaptureCallback", event => {
174
188
  const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.CANCEL);
175
189
 
176
190
  if (this.trackedPointers.has(adaptedEvent.pointerId)) {
@@ -181,9 +195,45 @@ class PointerEventManager extends _EventManager.default {
181
195
  this.trackedPointers.clear();
182
196
  }
183
197
  });
198
+
199
+ this.mouseButtonsMapper.set(0, _gestureHandlerCommon.MouseButton.LEFT);
200
+ this.mouseButtonsMapper.set(1, _gestureHandlerCommon.MouseButton.MIDDLE);
201
+ this.mouseButtonsMapper.set(2, _gestureHandlerCommon.MouseButton.RIGHT);
202
+ this.mouseButtonsMapper.set(3, _gestureHandlerCommon.MouseButton.BUTTON_4);
203
+ this.mouseButtonsMapper.set(4, _gestureHandlerCommon.MouseButton.BUTTON_5);
204
+ this.lastPosition = {
205
+ x: -Infinity,
206
+ y: -Infinity
207
+ };
208
+ }
209
+
210
+ registerListeners() {
211
+ this.view.addEventListener('pointerdown', this.pointerDownCallback);
212
+ this.view.addEventListener('pointerup', this.pointerUpCallback);
213
+ this.view.addEventListener('pointermove', this.pointerMoveCallback);
214
+ this.view.addEventListener('pointercancel', this.pointerCancelCallback); // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for
215
+ // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.
216
+ // We therefore use pointerenter and pointerleave events to handle the hover gesture,
217
+ // mapping them to onPointerMoveOver and onPointerMoveOut respectively.
218
+
219
+ this.view.addEventListener('pointerenter', this.pointerEnterCallback);
220
+ this.view.addEventListener('pointerleave', this.pointerLeaveCallback);
221
+ this.view.addEventListener('lostpointercapture', this.lostPointerCaptureCallback);
222
+ }
223
+
224
+ unregisterListeners() {
225
+ this.view.removeEventListener('pointerdown', this.pointerDownCallback);
226
+ this.view.removeEventListener('pointerup', this.pointerUpCallback);
227
+ this.view.removeEventListener('pointermove', this.pointerMoveCallback);
228
+ this.view.removeEventListener('pointercancel', this.pointerCancelCallback);
229
+ this.view.removeEventListener('pointerenter', this.pointerEnterCallback);
230
+ this.view.removeEventListener('pointerleave', this.pointerLeaveCallback);
231
+ this.view.removeEventListener('lostpointercapture', this.lostPointerCaptureCallback);
184
232
  }
185
233
 
186
234
  mapEvent(event, eventType) {
235
+ var _PointerTypeMapping$g;
236
+
187
237
  return {
188
238
  x: event.clientX,
189
239
  y: event.clientY,
@@ -191,7 +241,7 @@ class PointerEventManager extends _EventManager.default {
191
241
  offsetY: event.offsetY,
192
242
  pointerId: event.pointerId,
193
243
  eventType: eventType,
194
- pointerType: event.pointerType,
244
+ pointerType: (_PointerTypeMapping$g = _utils.PointerTypeMapping.get(event.pointerType)) !== null && _PointerTypeMapping$g !== void 0 ? _PointerTypeMapping$g : _PointerType.PointerType.OTHER,
195
245
  button: this.mouseButtonsMapper.get(event.button),
196
246
  time: event.timeStamp
197
247
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["PointerEventManager.ts"],"names":["POINTER_CAPTURE_EXCLUDE_LIST","Set","PointerEventManager","EventManager","constructor","view","Map","mouseButtonsMapper","set","MouseButton","LEFT","MIDDLE","RIGHT","BUTTON_4","BUTTON_5","setListeners","addEventListener","event","pointerType","PointerType","TOUCH","x","clientX","y","clientY","adaptedEvent","mapEvent","EventTypes","DOWN","target","has","tagName","setPointerCapture","pointerId","markAsInBounds","trackedPointers","add","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","UP","releasePointerCapture","markAsOutOfBounds","delete","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","MOVE","hasPointerCapture","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","LEAVE","onPointerLeave","onPointerOutOfBounds","CANCEL","onPointerCancel","clear","onPointerMoveOver","onPointerMoveOut","offsetX","offsetY","button","get","time","timeStamp","resetManager"],"mappings":"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","sourcesContent":["import {\n AdaptedEvent,\n EventTypes,\n MouseButton,\n PointerType,\n} from '../interfaces';\nimport EventManager from './EventManager';\nimport { isPointerInBounds } from '../utils';\n\nconst POINTER_CAPTURE_EXCLUDE_LIST = new Set<string>(['SELECT', 'INPUT']);\n\nexport default class PointerEventManager extends EventManager<HTMLElement> {\n private trackedPointers = new Set<number>();\n private readonly mouseButtonsMapper = new Map<number, MouseButton>();\n\n constructor(view: HTMLElement) {\n super(view);\n\n this.mouseButtonsMapper.set(0, MouseButton.LEFT);\n this.mouseButtonsMapper.set(1, MouseButton.MIDDLE);\n this.mouseButtonsMapper.set(2, MouseButton.RIGHT);\n this.mouseButtonsMapper.set(3, MouseButton.BUTTON_4);\n this.mouseButtonsMapper.set(4, MouseButton.BUTTON_5);\n }\n\n public setListeners(): void {\n this.view.addEventListener('pointerdown', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n if (\n !isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })\n ) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);\n const target = event.target as HTMLElement;\n\n if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {\n target.setPointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n this.trackedPointers.add(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointerup', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);\n const target = event.target as HTMLElement;\n\n if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {\n target.releasePointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.trackedPointers.delete(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointermove', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE);\n const target = event.target as HTMLElement;\n\n // You may be wondering why are we setting pointer capture here, when we\n // already set it in `pointerdown` handler. Well, that's a great question,\n // for which I don't have an answer. Specification (https://www.w3.org/TR/pointerevents2/#dom-element-setpointercapture)\n // says that the requirement for `setPointerCapture` to work is that pointer\n // must be in 'active buttons state`, otherwise it will fail silently, which\n // is lovely. Obviously, when `pointerdown` is fired, one of the buttons\n // (when using mouse) is pressed, but that doesn't mean that `setPointerCapture`\n // will succeed, for some reason. Since it fails silently, we don't actually know\n // if it worked or not (there's `gotpointercapture` event, but the complexity of\n // incorporating it here seems stupid), so we just call it again here, every time\n // pointer moves until it succeeds.\n // God, I do love web development.\n if (\n !target.hasPointerCapture(event.pointerId) &&\n !POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)\n ) {\n target.setPointerCapture(event.pointerId);\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('pointercancel', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n });\n\n // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for\n // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.\n // We therefore use pointerenter and pointerleave events to handle the hover gesture,\n // mapping them to onPointerMoveOver and onPointerMoveOut respectively.\n\n this.view.addEventListener('pointerenter', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);\n\n this.onPointerMoveOver(adaptedEvent);\n });\n\n this.view.addEventListener('pointerleave', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);\n\n this.onPointerMoveOut(adaptedEvent);\n });\n\n this.view.addEventListener(\n 'lostpointercapture',\n (event: PointerEvent): void => {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n if (this.trackedPointers.has(adaptedEvent.pointerId)) {\n // in some cases the `pointerup` event is not fired, but `lostpointercapture` is\n // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it\n this.onPointerCancel(adaptedEvent);\n\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n }\n }\n );\n }\n\n protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent {\n return {\n x: event.clientX,\n y: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n pointerId: event.pointerId,\n eventType: eventType,\n pointerType: event.pointerType as PointerType,\n button: this.mouseButtonsMapper.get(event.button),\n time: event.timeStamp,\n };\n }\n\n public resetManager(): void {\n super.resetManager();\n this.trackedPointers.clear();\n }\n}\n"]}
1
+ {"version":3,"sources":["PointerEventManager.ts"],"names":["POINTER_CAPTURE_EXCLUDE_LIST","Set","PointerTypes","Touch","Stylus","PointerEventManager","EventManager","constructor","view","Map","event","pointerType","x","clientX","y","clientY","adaptedEvent","mapEvent","EventTypes","DOWN","target","has","tagName","setPointerCapture","pointerId","markAsInBounds","trackedPointers","add","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","UP","releasePointerCapture","markAsOutOfBounds","delete","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","lastPosition","MOVE","hasPointerCapture","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","LEAVE","onPointerLeave","onPointerOutOfBounds","CANCEL","onPointerCancel","clear","onPointerMoveOver","onPointerMoveOut","mouseButtonsMapper","set","MouseButton","LEFT","MIDDLE","RIGHT","BUTTON_4","BUTTON_5","Infinity","registerListeners","addEventListener","pointerDownCallback","pointerUpCallback","pointerMoveCallback","pointerCancelCallback","pointerEnterCallback","pointerLeaveCallback","lostPointerCaptureCallback","unregisterListeners","removeEventListener","offsetX","offsetY","PointerTypeMapping","get","PointerType","OTHER","button","time","timeStamp","resetManager"],"mappings":"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","sourcesContent":["import EventManager from './EventManager';\nimport { MouseButton } from '../../handlers/gestureHandlerCommon';\nimport { AdaptedEvent, EventTypes, Point } from '../interfaces';\nimport { PointerTypeMapping, isPointerInBounds } from '../utils';\nimport { PointerType } from '../../PointerType';\n\nconst POINTER_CAPTURE_EXCLUDE_LIST = new Set<string>(['SELECT', 'INPUT']);\nconst PointerTypes = {\n Touch: 'touch',\n Stylus: 'pen',\n};\n\nexport default class PointerEventManager extends EventManager<HTMLElement> {\n private trackedPointers = new Set<number>();\n private readonly mouseButtonsMapper = new Map<number, MouseButton>();\n private lastPosition: Point;\n\n constructor(view: HTMLElement) {\n super(view);\n\n this.mouseButtonsMapper.set(0, MouseButton.LEFT);\n this.mouseButtonsMapper.set(1, MouseButton.MIDDLE);\n this.mouseButtonsMapper.set(2, MouseButton.RIGHT);\n this.mouseButtonsMapper.set(3, MouseButton.BUTTON_4);\n this.mouseButtonsMapper.set(4, MouseButton.BUTTON_5);\n\n this.lastPosition = {\n x: -Infinity,\n y: -Infinity,\n };\n }\n\n private pointerDownCallback = (event: PointerEvent) => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n if (!isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);\n const target = event.target as HTMLElement;\n\n if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {\n target.setPointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n this.trackedPointers.add(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n };\n\n private pointerUpCallback = (event: PointerEvent) => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);\n const target = event.target as HTMLElement;\n\n if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {\n target.releasePointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.trackedPointers.delete(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n };\n\n private pointerMoveCallback = (event: PointerEvent) => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n\n // Stylus triggers `pointermove` event when it detects changes in pressure. Since it is very sensitive to those changes,\n // it constantly sends events, even though there was no change in position. To fix that we check whether\n // pointer has actually moved and if not, we do not send event.\n if (\n event.pointerType === PointerTypes.Stylus &&\n event.x === this.lastPosition.x &&\n event.y === this.lastPosition.y\n ) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE);\n const target = event.target as HTMLElement;\n\n // You may be wondering why are we setting pointer capture here, when we\n // already set it in `pointerdown` handler. Well, that's a great question,\n // for which I don't have an answer. Specification (https://www.w3.org/TR/pointerevents2/#dom-element-setpointercapture)\n // says that the requirement for `setPointerCapture` to work is that pointer\n // must be in 'active buttons state`, otherwise it will fail silently, which\n // is lovely. Obviously, when `pointerdown` is fired, one of the buttons\n // (when using mouse) is pressed, but that doesn't mean that `setPointerCapture`\n // will succeed, for some reason. Since it fails silently, we don't actually know\n // if it worked or not (there's `gotpointercapture` event, but the complexity of\n // incorporating it here seems stupid), so we just call it again here, every time\n // pointer moves until it succeeds.\n // God, I do love web development.\n if (\n !target.hasPointerCapture(event.pointerId) &&\n !POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)\n ) {\n target.setPointerCapture(event.pointerId);\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n\n this.lastPosition.x = event.x;\n this.lastPosition.y = event.y;\n };\n\n private pointerCancelCallback = (event: PointerEvent) => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.CANCEL);\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n };\n\n private pointerEnterCallback = (event: PointerEvent) => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);\n\n this.onPointerMoveOver(adaptedEvent);\n };\n\n private pointerLeaveCallback = (event: PointerEvent) => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);\n\n this.onPointerMoveOut(adaptedEvent);\n };\n\n private lostPointerCaptureCallback = (event: PointerEvent) => {\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.CANCEL);\n\n if (this.trackedPointers.has(adaptedEvent.pointerId)) {\n // in some cases the `pointerup` event is not fired, but `lostpointercapture` is\n // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it\n this.onPointerCancel(adaptedEvent);\n\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n }\n };\n\n public registerListeners(): void {\n this.view.addEventListener('pointerdown', this.pointerDownCallback);\n this.view.addEventListener('pointerup', this.pointerUpCallback);\n this.view.addEventListener('pointermove', this.pointerMoveCallback);\n this.view.addEventListener('pointercancel', this.pointerCancelCallback);\n\n // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for\n // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.\n // We therefore use pointerenter and pointerleave events to handle the hover gesture,\n // mapping them to onPointerMoveOver and onPointerMoveOut respectively.\n this.view.addEventListener('pointerenter', this.pointerEnterCallback);\n this.view.addEventListener('pointerleave', this.pointerLeaveCallback);\n this.view.addEventListener(\n 'lostpointercapture',\n this.lostPointerCaptureCallback\n );\n }\n\n public unregisterListeners(): void {\n this.view.removeEventListener('pointerdown', this.pointerDownCallback);\n this.view.removeEventListener('pointerup', this.pointerUpCallback);\n this.view.removeEventListener('pointermove', this.pointerMoveCallback);\n this.view.removeEventListener('pointercancel', this.pointerCancelCallback);\n this.view.removeEventListener('pointerenter', this.pointerEnterCallback);\n this.view.removeEventListener('pointerleave', this.pointerLeaveCallback);\n this.view.removeEventListener(\n 'lostpointercapture',\n this.lostPointerCaptureCallback\n );\n }\n\n protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent {\n return {\n x: event.clientX,\n y: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n pointerId: event.pointerId,\n eventType: eventType,\n pointerType:\n PointerTypeMapping.get(event.pointerType) ?? PointerType.OTHER,\n button: this.mouseButtonsMapper.get(event.button),\n time: event.timeStamp,\n };\n }\n\n public resetManager(): void {\n super.resetManager();\n this.trackedPointers.clear();\n }\n}\n"]}
@@ -11,11 +11,17 @@ var _EventManager = _interopRequireDefault(require("./EventManager"));
11
11
 
12
12
  var _utils = require("../utils");
13
13
 
14
+ var _PointerType = require("../../PointerType");
15
+
14
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
17
 
18
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
+
16
20
  class TouchEventManager extends _EventManager.default {
17
- setListeners() {
18
- this.view.addEventListener('touchstart', event => {
21
+ constructor(...args) {
22
+ super(...args);
23
+
24
+ _defineProperty(this, "touchStartCallback", event => {
19
25
  for (let i = 0; i < event.changedTouches.length; ++i) {
20
26
  const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.DOWN, i, _interfaces.TouchEventType.DOWN); // Here we skip stylus, because in case of anything different than touch we want to handle it by using PointerEvents
21
27
  // If we leave stylus to send touch events, handlers will receive every action twice
@@ -38,7 +44,8 @@ class TouchEventManager extends _EventManager.default {
38
44
  }
39
45
  }
40
46
  });
41
- this.view.addEventListener('touchmove', event => {
47
+
48
+ _defineProperty(this, "touchMoveCallback", event => {
42
49
  for (let i = 0; i < event.changedTouches.length; ++i) {
43
50
  const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.MOVE, i, _interfaces.TouchEventType.MOVE); //@ts-ignore touchType field does exist
44
51
 
@@ -71,7 +78,8 @@ class TouchEventManager extends _EventManager.default {
71
78
  }
72
79
  }
73
80
  });
74
- this.view.addEventListener('touchend', event => {
81
+
82
+ _defineProperty(this, "touchEndCallback", event => {
75
83
  for (let i = 0; i < event.changedTouches.length; ++i) {
76
84
  // When we call reset on gesture handlers, it also resets their event managers
77
85
  // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view
@@ -97,7 +105,8 @@ class TouchEventManager extends _EventManager.default {
97
105
  }
98
106
  }
99
107
  });
100
- this.view.addEventListener('touchcancel', event => {
108
+
109
+ _defineProperty(this, "touchCancelCallback", event => {
101
110
  for (let i = 0; i < event.changedTouches.length; ++i) {
102
111
  const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.CANCEL, i, _interfaces.TouchEventType.CANCELLED); //@ts-ignore touchType field does exist
103
112
 
@@ -112,6 +121,20 @@ class TouchEventManager extends _EventManager.default {
112
121
  });
113
122
  }
114
123
 
124
+ registerListeners() {
125
+ this.view.addEventListener('touchstart', this.touchStartCallback);
126
+ this.view.addEventListener('touchmove', this.touchMoveCallback);
127
+ this.view.addEventListener('touchend', this.touchEndCallback);
128
+ this.view.addEventListener('touchcancel', this.touchCancelCallback);
129
+ }
130
+
131
+ unregisterListeners() {
132
+ this.view.removeEventListener('touchstart', this.touchStartCallback);
133
+ this.view.removeEventListener('touchmove', this.touchMoveCallback);
134
+ this.view.removeEventListener('touchend', this.touchEndCallback);
135
+ this.view.removeEventListener('touchcancel', this.touchCancelCallback);
136
+ }
137
+
115
138
  mapEvent(event, eventType, index, touchEventType) {
116
139
  const rect = this.view.getBoundingClientRect();
117
140
  const clientX = event.changedTouches[index].clientX;
@@ -123,7 +146,7 @@ class TouchEventManager extends _EventManager.default {
123
146
  offsetY: clientY - rect.top,
124
147
  pointerId: event.changedTouches[index].identifier,
125
148
  eventType: eventType,
126
- pointerType: _interfaces.PointerType.TOUCH,
149
+ pointerType: _PointerType.PointerType.TOUCH,
127
150
  time: event.timeStamp,
128
151
  allTouches: event.touches,
129
152
  changedTouches: event.changedTouches,
@@ -1 +1 @@
1
- {"version":3,"sources":["TouchEventManager.ts"],"names":["TouchEventManager","EventManager","setListeners","view","addEventListener","event","i","changedTouches","length","adaptedEvent","mapEvent","EventTypes","DOWN","TouchEventType","x","y","touchType","markAsInBounds","pointerId","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","MOVE","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","LEAVE","onPointerLeave","markAsOutOfBounds","onPointerOutOfBounds","UP","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","CANCEL","CANCELLED","onPointerCancel","index","touchEventType","rect","getBoundingClientRect","clientX","clientY","offsetX","left","offsetY","top","identifier","pointerType","PointerType","TOUCH","time","timeStamp","allTouches","touches"],"mappings":"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","sourcesContent":["import {\n AdaptedEvent,\n EventTypes,\n PointerType,\n TouchEventType,\n} from '../interfaces';\nimport EventManager from './EventManager';\nimport { isPointerInBounds } from '../utils';\n\nexport default class TouchEventManager extends EventManager<HTMLElement> {\n public setListeners(): void {\n this.view.addEventListener('touchstart', (event: TouchEvent) => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.DOWN,\n i,\n TouchEventType.DOWN\n );\n\n // Here we skip stylus, because in case of anything different than touch we want to handle it by using PointerEvents\n // If we leave stylus to send touch events, handlers will receive every action twice\n if (\n !isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n }) ||\n //@ts-ignore touchType field does exist\n event.changedTouches[i].touchType === 'stylus'\n ) {\n continue;\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('touchmove', (event: TouchEvent) => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.MOVE,\n i,\n TouchEventType.MOVE\n );\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n }\n });\n\n this.view.addEventListener('touchend', (event: TouchEvent) => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n break;\n }\n\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.UP,\n i,\n TouchEventType.UP\n );\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('touchcancel', (event: TouchEvent) => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL,\n i,\n TouchEventType.CANCELLED\n );\n\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n }\n });\n }\n\n protected mapEvent(\n event: TouchEvent,\n eventType: EventTypes,\n index: number,\n touchEventType: TouchEventType\n ): AdaptedEvent {\n const rect = this.view.getBoundingClientRect();\n const clientX = event.changedTouches[index].clientX;\n const clientY = event.changedTouches[index].clientY;\n\n return {\n x: clientX,\n y: clientY,\n offsetX: clientX - rect.left,\n offsetY: clientY - rect.top,\n pointerId: event.changedTouches[index].identifier,\n eventType: eventType,\n pointerType: PointerType.TOUCH,\n time: event.timeStamp,\n allTouches: event.touches,\n changedTouches: event.changedTouches,\n touchEventType: touchEventType,\n };\n }\n}\n"]}
1
+ {"version":3,"sources":["TouchEventManager.ts"],"names":["TouchEventManager","EventManager","event","i","changedTouches","length","adaptedEvent","mapEvent","EventTypes","DOWN","TouchEventType","view","x","y","touchType","markAsInBounds","pointerId","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","MOVE","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","LEAVE","onPointerLeave","markAsOutOfBounds","onPointerOutOfBounds","UP","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","CANCEL","CANCELLED","onPointerCancel","registerListeners","addEventListener","touchStartCallback","touchMoveCallback","touchEndCallback","touchCancelCallback","unregisterListeners","removeEventListener","index","touchEventType","rect","getBoundingClientRect","clientX","clientY","offsetX","left","offsetY","top","identifier","pointerType","PointerType","TOUCH","time","timeStamp","allTouches","touches"],"mappings":"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","sourcesContent":["import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';\nimport EventManager from './EventManager';\nimport { isPointerInBounds } from '../utils';\nimport { PointerType } from '../../PointerType';\n\nexport default class TouchEventManager extends EventManager<HTMLElement> {\n private touchStartCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.DOWN,\n i,\n TouchEventType.DOWN\n );\n\n // Here we skip stylus, because in case of anything different than touch we want to handle it by using PointerEvents\n // If we leave stylus to send touch events, handlers will receive every action twice\n if (\n !isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n }) ||\n //@ts-ignore touchType field does exist\n event.changedTouches[i].touchType === 'stylus'\n ) {\n continue;\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n }\n };\n\n private touchMoveCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.MOVE,\n i,\n TouchEventType.MOVE\n );\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n }\n };\n\n private touchEndCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n break;\n }\n\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.UP,\n i,\n TouchEventType.UP\n );\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n }\n };\n\n private touchCancelCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL,\n i,\n TouchEventType.CANCELLED\n );\n\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n }\n };\n\n public registerListeners(): void {\n this.view.addEventListener('touchstart', this.touchStartCallback);\n this.view.addEventListener('touchmove', this.touchMoveCallback);\n this.view.addEventListener('touchend', this.touchEndCallback);\n this.view.addEventListener('touchcancel', this.touchCancelCallback);\n }\n\n public unregisterListeners(): void {\n this.view.removeEventListener('touchstart', this.touchStartCallback);\n this.view.removeEventListener('touchmove', this.touchMoveCallback);\n this.view.removeEventListener('touchend', this.touchEndCallback);\n this.view.removeEventListener('touchcancel', this.touchCancelCallback);\n }\n\n protected mapEvent(\n event: TouchEvent,\n eventType: EventTypes,\n index: number,\n touchEventType: TouchEventType\n ): AdaptedEvent {\n const rect = this.view.getBoundingClientRect();\n const clientX = event.changedTouches[index].clientX;\n const clientY = event.changedTouches[index].clientY;\n\n return {\n x: clientX,\n y: clientY,\n offsetX: clientX - rect.left,\n offsetY: clientY - rect.top,\n pointerId: event.changedTouches[index].identifier,\n eventType: eventType,\n pointerType: PointerType.TOUCH,\n time: event.timeStamp,\n allTouches: event.touches,\n changedTouches: event.changedTouches,\n touchEventType: touchEventType,\n };\n }\n}\n"]}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _Directions = require("../../Directions");
9
+
10
+ var _constants = require("../constants");
11
+
12
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
+
14
+ class Vector {
15
+ constructor(x, y) {
16
+ _defineProperty(this, "x", void 0);
17
+
18
+ _defineProperty(this, "y", void 0);
19
+
20
+ _defineProperty(this, "unitX", void 0);
21
+
22
+ _defineProperty(this, "unitY", void 0);
23
+
24
+ _defineProperty(this, "_magnitude", void 0);
25
+
26
+ this.x = x;
27
+ this.y = y;
28
+ this._magnitude = Math.hypot(this.x, this.y);
29
+ const isMagnitudeSufficient = this._magnitude > _constants.MINIMAL_FLING_VELOCITY;
30
+ this.unitX = isMagnitudeSufficient ? this.x / this._magnitude : 0;
31
+ this.unitY = isMagnitudeSufficient ? this.y / this._magnitude : 0;
32
+ }
33
+
34
+ static fromDirection(direction) {
35
+ return DirectionToVectorMappings.get(direction);
36
+ }
37
+
38
+ static fromVelocity(tracker, pointerId) {
39
+ return new Vector(tracker.getVelocityX(pointerId), tracker.getVelocityY(pointerId));
40
+ }
41
+
42
+ get magnitude() {
43
+ return this._magnitude;
44
+ }
45
+
46
+ computeSimilarity(vector) {
47
+ return this.unitX * vector.unitX + this.unitY * vector.unitY;
48
+ }
49
+
50
+ isSimilar(vector, threshold) {
51
+ return this.computeSimilarity(vector) > threshold;
52
+ }
53
+
54
+ }
55
+
56
+ exports.default = Vector;
57
+ const DirectionToVectorMappings = new Map([[_Directions.Directions.LEFT, new Vector(-1, 0)], [_Directions.Directions.RIGHT, new Vector(1, 0)], [_Directions.Directions.UP, new Vector(0, -1)], [_Directions.Directions.DOWN, new Vector(0, 1)], [_Directions.DiagonalDirections.UP_RIGHT, new Vector(1, -1)], [_Directions.DiagonalDirections.DOWN_RIGHT, new Vector(1, 1)], [_Directions.DiagonalDirections.UP_LEFT, new Vector(-1, -1)], [_Directions.DiagonalDirections.DOWN_LEFT, new Vector(-1, 1)]]);
58
+ //# sourceMappingURL=Vector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["Vector.ts"],"names":["Vector","constructor","x","y","_magnitude","Math","hypot","isMagnitudeSufficient","MINIMAL_FLING_VELOCITY","unitX","unitY","fromDirection","direction","DirectionToVectorMappings","get","fromVelocity","tracker","pointerId","getVelocityX","getVelocityY","magnitude","computeSimilarity","vector","isSimilar","threshold","Map","Directions","LEFT","RIGHT","UP","DOWN","DiagonalDirections","UP_RIGHT","DOWN_RIGHT","UP_LEFT","DOWN_LEFT"],"mappings":";;;;;;;AAAA;;AACA;;;;AAGe,MAAMA,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,GAAkBI,iCAAhD;AAEA,SAAKC,KAAL,GAAaF,qBAAqB,GAAG,KAAKL,CAAL,GAAS,KAAKE,UAAjB,GAA8B,CAAhE;AACA,SAAKM,KAAL,GAAaH,qBAAqB,GAAG,KAAKJ,CAAL,GAAS,KAAKC,UAAjB,GAA8B,CAAhE;AACD;;AAEmB,SAAbO,aAAa,CAACC,SAAD,EAAqD;AACvE,WAAOC,yBAAyB,CAACC,GAA1B,CAA8BF,SAA9B,CAAP;AACD;;AAEkB,SAAZG,YAAY,CAACC,OAAD,EAA0BC,SAA1B,EAA6C;AAC9D,WAAO,IAAIjB,MAAJ,CACLgB,OAAO,CAACE,YAAR,CAAqBD,SAArB,CADK,EAELD,OAAO,CAACG,YAAR,CAAqBF,SAArB,CAFK,CAAP;AAID;;AAEY,MAATG,SAAS,GAAG;AACd,WAAO,KAAKhB,UAAZ;AACD;;AAEDiB,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,CAACC,uBAAWC,IAAZ,EAAkB,IAAI3B,MAAJ,CAAW,CAAC,CAAZ,EAAe,CAAf,CAAlB,CADA,EAEA,CAAC0B,uBAAWE,KAAZ,EAAmB,IAAI5B,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAnB,CAFA,EAGA,CAAC0B,uBAAWG,EAAZ,EAAgB,IAAI7B,MAAJ,CAAW,CAAX,EAAc,CAAC,CAAf,CAAhB,CAHA,EAIA,CAAC0B,uBAAWI,IAAZ,EAAkB,IAAI9B,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAlB,CAJA,EAMA,CAAC+B,+BAAmBC,QAApB,EAA8B,IAAIhC,MAAJ,CAAW,CAAX,EAAc,CAAC,CAAf,CAA9B,CANA,EAOA,CAAC+B,+BAAmBE,UAApB,EAAgC,IAAIjC,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAhC,CAPA,EAQA,CAAC+B,+BAAmBG,OAApB,EAA6B,IAAIlC,MAAJ,CAAW,CAAC,CAAZ,EAAe,CAAC,CAAhB,CAA7B,CARA,EASA,CAAC+B,+BAAmBI,SAApB,EAA+B,IAAInC,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"]}
@@ -4,6 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.isPointerInBounds = isPointerInBounds;
7
+ exports.coneToDeviation = exports.degToRad = exports.PointerTypeMapping = void 0;
8
+
9
+ var _PointerType = require("../PointerType");
7
10
 
8
11
  function isPointerInBounds(view, {
9
12
  x,
@@ -12,4 +15,15 @@ function isPointerInBounds(view, {
12
15
  const rect = view.getBoundingClientRect();
13
16
  return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
14
17
  }
18
+
19
+ const PointerTypeMapping = new Map([['mouse', _PointerType.PointerType.MOUSE], ['touch', _PointerType.PointerType.TOUCH], ['pen', _PointerType.PointerType.STYLUS], ['none', _PointerType.PointerType.OTHER]]);
20
+ exports.PointerTypeMapping = PointerTypeMapping;
21
+
22
+ const degToRad = degrees => degrees * Math.PI / 180;
23
+
24
+ exports.degToRad = degToRad;
25
+
26
+ const coneToDeviation = degrees => Math.cos(degToRad(degrees / 2));
27
+
28
+ exports.coneToDeviation = coneToDeviation;
15
29
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["utils.ts"],"names":["isPointerInBounds","view","x","y","rect","getBoundingClientRect","left","right","top","bottom"],"mappings":";;;;;;;AAAO,SAASA,iBAAT,CACLC,IADK,EAEL;AAAEC,EAAAA,CAAF;AAAKC,EAAAA;AAAL,CAFK,EAGI;AACT,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","sourcesContent":["export function isPointerInBounds(\n view: HTMLElement,\n { x, y }: { x: number; y: number }\n): boolean {\n const rect: DOMRect = view.getBoundingClientRect();\n\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n}\n"]}
1
+ {"version":3,"sources":["utils.ts"],"names":["isPointerInBounds","view","x","y","rect","getBoundingClientRect","left","right","top","bottom","PointerTypeMapping","Map","PointerType","MOUSE","TOUCH","STYLUS","OTHER","degToRad","degrees","Math","PI","coneToDeviation","cos"],"mappings":";;;;;;;;AAAA;;AAGO,SAASA,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;;AAEM,MAAMC,kBAAkB,GAAG,IAAIC,GAAJ,CAA6B,CAC7D,CAAC,OAAD,EAAUC,yBAAYC,KAAtB,CAD6D,EAE7D,CAAC,OAAD,EAAUD,yBAAYE,KAAtB,CAF6D,EAG7D,CAAC,KAAD,EAAQF,yBAAYG,MAApB,CAH6D,EAI7D,CAAC,MAAD,EAASH,yBAAYI,KAArB,CAJ6D,CAA7B,CAA3B;;;AAOA,MAAMC,QAAQ,GAAIC,OAAD,IAAsBA,OAAO,GAAGC,IAAI,CAACC,EAAhB,GAAsB,GAA5D;;;;AAEA,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 +1 @@
1
- {"version":3,"sources":["NodeManager.ts"],"names":["gestures","getHandler","tag","Error","createGestureHandler","handlerTag","handler","dropGestureHandler","destroy","getNodes"],"mappings":";;;;;;;;;AAGA,MAAMA,QAGL,GAAG,EAHJ;;AAKO,SAASC,UAAT,CAAoBC,GAApB,EAAiC;AACtC,MAAIA,GAAG,IAAIF,QAAX,EAAqB;AACnB,WAAOA,QAAQ,CAACE,GAAD,CAAf;AACD;;AAED,QAAM,IAAIC,KAAJ,CAAW,sBAAqBD,GAAI,EAApC,CAAN;AACD;;AAEM,SAASE,oBAAT,CACLC,UADK,EAELC,OAFK,EAGL;AACA,MAAID,UAAU,IAAIL,QAAlB,EAA4B;AAC1B,UAAM,IAAIG,KAAJ,CAAW,oBAAmBE,UAAW,iBAAzC,CAAN;AACD;;AACDL,EAAAA,QAAQ,CAACK,UAAD,CAAR,GAAuBC,OAAvB,CAJA,CAKA;;AACAN,EAAAA,QAAQ,CAACK,UAAD,CAAR,CAAqBA,UAArB,GAAkCA,UAAlC;AACD;;AAEM,SAASE,kBAAT,CAA4BF,UAA5B,EAAgD;AACrD;AACA;AACA,MAAI,EAAEA,UAAU,IAAIL,QAAhB,CAAJ,EAA+B;AAC7B;AACD;;AACDC,EAAAA,UAAU,CAACI,UAAD,CAAV,CAAuBG,OAAvB,GANqD,CAOrD;;AACA,SAAOR,QAAQ,CAACK,UAAD,CAAf;AACD;;AAEM,SAASI,QAAT,GAAoB;AACzB,SAAO,EAAE,GAAGT;AAAL,GAAP;AACD","sourcesContent":["import { ValueOf } from '../typeUtils';\nimport { HammerGestures } from '../RNGestureHandlerModule.web';\n\nconst gestures: Record<\n number,\n InstanceType<ValueOf<typeof HammerGestures>>\n> = {};\n\nexport function getHandler(tag: number) {\n if (tag in gestures) {\n return gestures[tag];\n }\n\n throw new Error(`No handler for tag ${tag}`);\n}\n\nexport function createGestureHandler(\n handlerTag: number,\n handler: InstanceType<ValueOf<typeof HammerGestures>>\n) {\n if (handlerTag in gestures) {\n throw new Error(`Handler with tag ${handlerTag} already exists`);\n }\n gestures[handlerTag] = handler;\n // @ts-ignore no types for web handlers yet\n gestures[handlerTag].handlerTag = handlerTag;\n}\n\nexport function dropGestureHandler(handlerTag: number) {\n // Since React 18, there are cases where componentWillUnmount gets called twice in a row\n // so skip this if the tag was already removed.\n if (!(handlerTag in gestures)) {\n return;\n }\n getHandler(handlerTag).destroy();\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete gestures[handlerTag];\n}\n\nexport function getNodes() {\n return { ...gestures };\n}\n"]}
1
+ {"version":3,"sources":["NodeManager.ts"],"names":["gestures","getHandler","tag","Error","createGestureHandler","handlerTag","handler","dropGestureHandler","destroy","getNodes"],"mappings":";;;;;;;;;AAGA,MAAMA,QAGL,GAAG,EAHJ;;AAKO,SAASC,UAAT,CAAoBC,GAApB,EAAiC;AACtC,MAAIA,GAAG,IAAIF,QAAX,EAAqB;AACnB,WAAOA,QAAQ,CAACE,GAAD,CAAf;AACD;;AAED,QAAM,IAAIC,KAAJ,CAAW,sBAAqBD,GAAI,EAApC,CAAN;AACD;;AAEM,SAASE,oBAAT,CACLC,UADK,EAELC,OAFK,EAGL;AACA,MAAID,UAAU,IAAIL,QAAlB,EAA4B;AAC1B,UAAM,IAAIG,KAAJ,CAAW,oBAAmBE,UAAW,iBAAzC,CAAN;AACD;;AACDL,EAAAA,QAAQ,CAACK,UAAD,CAAR,GAAuBC,OAAvB,CAJA,CAKA;;AACAN,EAAAA,QAAQ,CAACK,UAAD,CAAR,CAAqBA,UAArB,GAAkCA,UAAlC;AACD;;AAEM,SAASE,kBAAT,CAA4BF,UAA5B,EAAgD;AACrD;AACA;AACA,MAAI,EAAEA,UAAU,IAAIL,QAAhB,CAAJ,EAA+B;AAC7B;AACD;;AACDC,EAAAA,UAAU,CAACI,UAAD,CAAV,CAAuBG,OAAvB,GANqD,CAOrD;;AACA,SAAOR,QAAQ,CAACK,UAAD,CAAf;AACD;;AAEM,SAASI,QAAT,GAAoB;AACzB,SAAO,EAAE,GAAGT;AAAL,GAAP;AACD","sourcesContent":["import { ValueOf } from '../typeUtils';\nimport { HammerGestures } from '../web/Gestures';\n\nconst gestures: Record<\n number,\n InstanceType<ValueOf<typeof HammerGestures>>\n> = {};\n\nexport function getHandler(tag: number) {\n if (tag in gestures) {\n return gestures[tag];\n }\n\n throw new Error(`No handler for tag ${tag}`);\n}\n\nexport function createGestureHandler(\n handlerTag: number,\n handler: InstanceType<ValueOf<typeof HammerGestures>>\n) {\n if (handlerTag in gestures) {\n throw new Error(`Handler with tag ${handlerTag} already exists`);\n }\n gestures[handlerTag] = handler;\n // @ts-ignore no types for web handlers yet\n gestures[handlerTag].handlerTag = handlerTag;\n}\n\nexport function dropGestureHandler(handlerTag: number) {\n // Since React 18, there are cases where componentWillUnmount gets called twice in a row\n // so skip this if the tag was already removed.\n if (!(handlerTag in gestures)) {\n return;\n }\n getHandler(handlerTag).destroy();\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete gestures[handlerTag];\n}\n\nexport function getNodes() {\n return { ...gestures };\n}\n"]}
@@ -1,7 +1,19 @@
1
+ const RIGHT = 1;
2
+ const LEFT = 2;
3
+ const UP = 4;
4
+ const DOWN = 8; // public interface
5
+
1
6
  export const Directions = {
2
- RIGHT: 1,
3
- LEFT: 2,
4
- UP: 4,
5
- DOWN: 8
7
+ RIGHT: RIGHT,
8
+ LEFT: LEFT,
9
+ UP: UP,
10
+ DOWN: DOWN
11
+ }; // internal interface
12
+
13
+ export const DiagonalDirections = {
14
+ UP_RIGHT: UP | RIGHT,
15
+ DOWN_RIGHT: DOWN | RIGHT,
16
+ UP_LEFT: UP | LEFT,
17
+ DOWN_LEFT: DOWN | LEFT
6
18
  }; // eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; it can be used as a type and as a value
7
19
  //# sourceMappingURL=Directions.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["Directions.ts"],"names":["Directions","RIGHT","LEFT","UP","DOWN"],"mappings":"AAAA,OAAO,MAAMA,UAAU,GAAG;AACxBC,EAAAA,KAAK,EAAE,CADiB;AAExBC,EAAAA,IAAI,EAAE,CAFkB;AAGxBC,EAAAA,EAAE,EAAE,CAHoB;AAIxBC,EAAAA,IAAI,EAAE;AAJkB,CAAnB,C,CAOP","sourcesContent":["export const Directions = {\n RIGHT: 1,\n LEFT: 2,\n UP: 4,\n DOWN: 8,\n} as const;\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; it can be used as a type and as a value\nexport type Directions = typeof Directions[keyof typeof Directions];\n"]}
1
+ {"version":3,"sources":["Directions.ts"],"names":["RIGHT","LEFT","UP","DOWN","Directions","DiagonalDirections","UP_RIGHT","DOWN_RIGHT","UP_LEFT","DOWN_LEFT"],"mappings":"AAAA,MAAMA,KAAK,GAAG,CAAd;AACA,MAAMC,IAAI,GAAG,CAAb;AACA,MAAMC,EAAE,GAAG,CAAX;AACA,MAAMC,IAAI,GAAG,CAAb,C,CAEA;;AACA,OAAO,MAAMC,UAAU,GAAG;AACxBJ,EAAAA,KAAK,EAAEA,KADiB;AAExBC,EAAAA,IAAI,EAAEA,IAFkB;AAGxBC,EAAAA,EAAE,EAAEA,EAHoB;AAIxBC,EAAAA,IAAI,EAAEA;AAJkB,CAAnB,C,CAOP;;AACA,OAAO,MAAME,kBAAkB,GAAG;AAChCC,EAAAA,QAAQ,EAAEJ,EAAE,GAAGF,KADiB;AAEhCO,EAAAA,UAAU,EAAEJ,IAAI,GAAGH,KAFa;AAGhCQ,EAAAA,OAAO,EAAEN,EAAE,GAAGD,IAHkB;AAIhCQ,EAAAA,SAAS,EAAEN,IAAI,GAAGF;AAJc,CAA3B,C,CAOP","sourcesContent":["const RIGHT = 1;\nconst LEFT = 2;\nconst UP = 4;\nconst DOWN = 8;\n\n// public interface\nexport const Directions = {\n RIGHT: RIGHT,\n LEFT: LEFT,\n UP: UP,\n DOWN: DOWN,\n} as const;\n\n// internal interface\nexport const DiagonalDirections = {\n UP_RIGHT: UP | RIGHT,\n DOWN_RIGHT: DOWN | RIGHT,\n UP_LEFT: UP | LEFT,\n DOWN_LEFT: DOWN | LEFT,\n} as const;\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- backward compatibility; it can be used as a type and as a value\nexport type Directions = typeof Directions[keyof typeof Directions];\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport type DiagonalDirections =\n typeof DiagonalDirections[keyof typeof DiagonalDirections];\n"]}
@@ -0,0 +1,9 @@
1
+ export let PointerType;
2
+
3
+ (function (PointerType) {
4
+ PointerType[PointerType["TOUCH"] = 0] = "TOUCH";
5
+ PointerType[PointerType["STYLUS"] = 1] = "STYLUS";
6
+ PointerType[PointerType["MOUSE"] = 2] = "MOUSE";
7
+ PointerType[PointerType["OTHER"] = 3] = "OTHER";
8
+ })(PointerType || (PointerType = {}));
9
+ //# sourceMappingURL=PointerType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["PointerType.ts"],"names":["PointerType"],"mappings":"AAAA,WAAYA,WAAZ;;WAAYA,W;AAAAA,EAAAA,W,CAAAA,W;AAAAA,EAAAA,W,CAAAA,W;AAAAA,EAAAA,W,CAAAA,W;AAAAA,EAAAA,W,CAAAA,W;GAAAA,W,KAAAA,W","sourcesContent":["export enum PointerType {\n TOUCH,\n STYLUS,\n MOUSE,\n OTHER,\n}\n"]}