react-native-gesture-handler 2.15.0 → 2.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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":"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","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":";;;;;;;AAAA;;AAMA;;AACA;;;;;;AAEA,MAAMA,4BAA4B,GAAG,IAAIC,GAAJ,CAAgB,CAAC,QAAD,EAAW,OAAX,CAAhB,CAArC;;AAEe,MAAMC,mBAAN,SAAkCC,qBAAlC,CAA4D;AAIzEC,EAAAA,WAAW,CAACC,IAAD,EAAoB;AAC7B,UAAMA,IAAN;;AAD6B,6CAHL,IAAIJ,GAAJ,EAGK;;AAAA,gDAFO,IAAIK,GAAJ,EAEP;;AAG7B,SAAKC,kBAAL,CAAwBC,GAAxB,CAA4B,CAA5B,EAA+BC,wBAAYC,IAA3C;AACA,SAAKH,kBAAL,CAAwBC,GAAxB,CAA4B,CAA5B,EAA+BC,wBAAYE,MAA3C;AACA,SAAKJ,kBAAL,CAAwBC,GAAxB,CAA4B,CAA5B,EAA+BC,wBAAYG,KAA3C;AACA,SAAKL,kBAAL,CAAwBC,GAAxB,CAA4B,CAA5B,EAA+BC,wBAAYI,QAA3C;AACA,SAAKN,kBAAL,CAAwBC,GAAxB,CAA4B,CAA5B,EAA+BC,wBAAYK,QAA3C;AACD;;AAEMC,EAAAA,YAAY,GAAS;AAC1B,SAAKV,IAAL,CAAUW,gBAAV,CAA2B,aAA3B,EAA2CC,KAAD,IAA+B;AACvE,UAAIA,KAAK,CAACC,WAAN,KAAsBC,wBAAYC,KAAtC,EAA6C;AAC3C;AACD;;AACD,UACE,CAAC,8BAAkB,KAAKf,IAAvB,EAA6B;AAAEgB,QAAAA,CAAC,EAAEJ,KAAK,CAACK,OAAX;AAAoBC,QAAAA,CAAC,EAAEN,KAAK,CAACO;AAA7B,OAA7B,CADH,EAEE;AACA;AACD;;AAED,YAAMC,YAA0B,GAAG,KAAKC,QAAL,CAAcT,KAAd,EAAqBU,uBAAWC,IAAhC,CAAnC;AACA,YAAMC,MAAM,GAAGZ,KAAK,CAACY,MAArB;;AAEA,UAAI,CAAC7B,4BAA4B,CAAC8B,GAA7B,CAAiCD,MAAM,CAACE,OAAxC,CAAL,EAAuD;AACrDF,QAAAA,MAAM,CAACG,iBAAP,CAAyBP,YAAY,CAACQ,SAAtC;AACD;;AAED,WAAKC,cAAL,CAAoBT,YAAY,CAACQ,SAAjC;AACA,WAAKE,eAAL,CAAqBC,GAArB,CAAyBX,YAAY,CAACQ,SAAtC;;AAEA,UAAI,EAAE,KAAKI,qBAAP,GAA+B,CAAnC,EAAsC;AACpCZ,QAAAA,YAAY,CAACa,SAAb,GAAyBX,uBAAWY,uBAApC;AACA,aAAKC,YAAL,CAAkBf,YAAlB;AACD,OAHD,MAGO;AACL,aAAKgB,aAAL,CAAmBhB,YAAnB;AACD;AACF,KA1BD;AA4BA,SAAKpB,IAAL,CAAUW,gBAAV,CAA2B,WAA3B,EAAyCC,KAAD,IAA+B;AACrE,UAAIA,KAAK,CAACC,WAAN,KAAsBC,wBAAYC,KAAtC,EAA6C;AAC3C;AACD,OAHoE,CAKrE;AACA;AACA;AACA;;;AACA,UAAI,KAAKiB,qBAAL,KAA+B,CAAnC,EAAsC;AACpC;AACD;;AAED,YAAMZ,YAA0B,GAAG,KAAKC,QAAL,CAAcT,KAAd,EAAqBU,uBAAWe,EAAhC,CAAnC;AACA,YAAMb,MAAM,GAAGZ,KAAK,CAACY,MAArB;;AAEA,UAAI,CAAC7B,4BAA4B,CAAC8B,GAA7B,CAAiCD,MAAM,CAACE,OAAxC,CAAL,EAAuD;AACrDF,QAAAA,MAAM,CAACc,qBAAP,CAA6BlB,YAAY,CAACQ,SAA1C;AACD;;AAED,WAAKW,iBAAL,CAAuBnB,YAAY,CAACQ,SAApC;AACA,WAAKE,eAAL,CAAqBU,MAArB,CAA4BpB,YAAY,CAACQ,SAAzC;;AAEA,UAAI,EAAE,KAAKI,qBAAP,GAA+B,CAAnC,EAAsC;AACpCZ,QAAAA,YAAY,CAACa,SAAb,GAAyBX,uBAAWmB,qBAApC;AACA,aAAKC,eAAL,CAAqBtB,YAArB;AACD,OAHD,MAGO;AACL,aAAKuB,WAAL,CAAiBvB,YAAjB;AACD;AACF,KA7BD;AA+BA,SAAKpB,IAAL,CAAUW,gBAAV,CAA2B,aAA3B,EAA2CC,KAAD,IAA+B;AACvE,UAAIA,KAAK,CAACC,WAAN,KAAsBC,wBAAYC,KAAtC,EAA6C;AAC3C;AACD;;AAED,YAAMK,YAA0B,GAAG,KAAKC,QAAL,CAAcT,KAAd,EAAqBU,uBAAWsB,IAAhC,CAAnC;AACA,YAAMpB,MAAM,GAAGZ,KAAK,CAACY,MAArB,CANuE,CAQvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,UACE,CAACA,MAAM,CAACqB,iBAAP,CAAyBjC,KAAK,CAACgB,SAA/B,CAAD,IACA,CAACjC,4BAA4B,CAAC8B,GAA7B,CAAiCD,MAAM,CAACE,OAAxC,CAFH,EAGE;AACAF,QAAAA,MAAM,CAACG,iBAAP,CAAyBf,KAAK,CAACgB,SAA/B;AACD;;AAED,YAAMkB,QAAiB,GAAG,8BAAkB,KAAK9C,IAAvB,EAA6B;AACrDgB,QAAAA,CAAC,EAAEI,YAAY,CAACJ,CADqC;AAErDE,QAAAA,CAAC,EAAEE,YAAY,CAACF;AAFqC,OAA7B,CAA1B;AAKA,YAAM6B,YAAoB,GAAG,KAAKC,gBAAL,CAAsBC,OAAtB,CAC3B7B,YAAY,CAACQ,SADc,CAA7B;;AAIA,UAAIkB,QAAJ,EAAc;AACZ,YAAIC,YAAY,GAAG,CAAnB,EAAsB;AACpB3B,UAAAA,YAAY,CAACa,SAAb,GAAyBX,uBAAW4B,KAApC;AACA,eAAKC,cAAL,CAAoB/B,YAApB;AACA,eAAKS,cAAL,CAAoBT,YAAY,CAACQ,SAAjC;AACD,SAJD,MAIO;AACL,eAAKwB,aAAL,CAAmBhC,YAAnB;AACD;AACF,OARD,MAQO;AACL,YAAI2B,YAAY,IAAI,CAApB,EAAuB;AACrB3B,UAAAA,YAAY,CAACa,SAAb,GAAyBX,uBAAW+B,KAApC;AACA,eAAKC,cAAL,CAAoBlC,YAApB;AACA,eAAKmB,iBAAL,CAAuBnB,YAAY,CAACQ,SAApC;AACD,SAJD,MAIO;AACL,eAAK2B,oBAAL,CAA0BnC,YAA1B;AACD;AACF;AACF,KArDD;AAuDA,SAAKpB,IAAL,CAAUW,gBAAV,CAA2B,eAA3B,EAA6CC,KAAD,IAA+B;AACzE,UAAIA,KAAK,CAACC,WAAN,KAAsBC,wBAAYC,KAAtC,EAA6C;AAC3C;AACD;;AAED,YAAMK,YAA0B,GAAG,KAAKC,QAAL,CACjCT,KADiC,EAEjCU,uBAAWkC,MAFsB,CAAnC;AAKA,WAAKC,eAAL,CAAqBrC,YAArB;AACA,WAAKmB,iBAAL,CAAuBnB,YAAY,CAACQ,SAApC;AACA,WAAKI,qBAAL,GAA6B,CAA7B;AACA,WAAKF,eAAL,CAAqB4B,KAArB;AACD,KAdD,EAnH0B,CAmI1B;AACA;AACA;AACA;;AAEA,SAAK1D,IAAL,CAAUW,gBAAV,CAA2B,cAA3B,EAA4CC,KAAD,IAA+B;AACxE,UAAIA,KAAK,CAACC,WAAN,KAAsBC,wBAAYC,KAAtC,EAA6C;AAC3C;AACD;;AAED,YAAMK,YAA0B,GAAG,KAAKC,QAAL,CAAcT,KAAd,EAAqBU,uBAAW4B,KAAhC,CAAnC;AAEA,WAAKS,iBAAL,CAAuBvC,YAAvB;AACD,KARD;AAUA,SAAKpB,IAAL,CAAUW,gBAAV,CAA2B,cAA3B,EAA4CC,KAAD,IAA+B;AACxE,UAAIA,KAAK,CAACC,WAAN,KAAsBC,wBAAYC,KAAtC,EAA6C;AAC3C;AACD;;AAED,YAAMK,YAA0B,GAAG,KAAKC,QAAL,CAAcT,KAAd,EAAqBU,uBAAW+B,KAAhC,CAAnC;AAEA,WAAKO,gBAAL,CAAsBxC,YAAtB;AACD,KARD;AAUA,SAAKpB,IAAL,CAAUW,gBAAV,CACE,oBADF,EAEGC,KAAD,IAA+B;AAC7B,YAAMQ,YAA0B,GAAG,KAAKC,QAAL,CACjCT,KADiC,EAEjCU,uBAAWkC,MAFsB,CAAnC;;AAKA,UAAI,KAAK1B,eAAL,CAAqBL,GAArB,CAAyBL,YAAY,CAACQ,SAAtC,CAAJ,EAAsD;AACpD;AACA;AACA,aAAK6B,eAAL,CAAqBrC,YAArB;AAEA,aAAKY,qBAAL,GAA6B,CAA7B;AACA,aAAKF,eAAL,CAAqB4B,KAArB;AACD;AACF,KAhBH;AAkBD;;AAESrC,EAAAA,QAAQ,CAACT,KAAD,EAAsBqB,SAAtB,EAA2D;AAC3E,WAAO;AACLjB,MAAAA,CAAC,EAAEJ,KAAK,CAACK,OADJ;AAELC,MAAAA,CAAC,EAAEN,KAAK,CAACO,OAFJ;AAGL0C,MAAAA,OAAO,EAAEjD,KAAK,CAACiD,OAHV;AAILC,MAAAA,OAAO,EAAElD,KAAK,CAACkD,OAJV;AAKLlC,MAAAA,SAAS,EAAEhB,KAAK,CAACgB,SALZ;AAMLK,MAAAA,SAAS,EAAEA,SANN;AAOLpB,MAAAA,WAAW,EAAED,KAAK,CAACC,WAPd;AAQLkD,MAAAA,MAAM,EAAE,KAAK7D,kBAAL,CAAwB8D,GAAxB,CAA4BpD,KAAK,CAACmD,MAAlC,CARH;AASLE,MAAAA,IAAI,EAAErD,KAAK,CAACsD;AATP,KAAP;AAWD;;AAEMC,EAAAA,YAAY,GAAS;AAC1B,UAAMA,YAAN;AACA,SAAKrC,eAAL,CAAqB4B,KAArB;AACD;;AA/MwE","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"]}