react-native-gesture-handler 2.17.0 → 2.18.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 (428) hide show
  1. package/ReanimatedSwipeable/package.json +6 -0
  2. package/android/build.gradle +0 -105
  3. package/android/gradle.properties +0 -7
  4. package/android/paper/src/main/java/com/swmansion/gesturehandler/NativeRNGestureHandlerModuleSpec.java +22 -10
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +1 -1
  6. package/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt +16 -0
  7. package/android/src/main/java/com/swmansion/gesturehandler/core/PinchGestureHandler.kt +7 -8
  8. package/android/src/main/java/com/swmansion/gesturehandler/core/RotationGestureDetector.kt +14 -4
  9. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +3 -1
  10. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +3 -1
  11. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +2 -1
  12. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +8 -7
  13. package/android/src/main/jni/cpp-adapter.cpp +5 -3
  14. package/apple/Handlers/RNFlingHandler.m +1 -0
  15. package/apple/Handlers/RNForceTouchHandler.m +2 -0
  16. package/apple/Handlers/RNLongPressHandler.m +2 -1
  17. package/apple/Handlers/RNManualHandler.m +1 -0
  18. package/apple/Handlers/RNNativeViewHandler.mm +31 -27
  19. package/apple/Handlers/RNPanHandler.m +1 -0
  20. package/apple/Handlers/RNPinchHandler.m +1 -0
  21. package/apple/Handlers/RNRotationHandler.m +1 -0
  22. package/apple/Handlers/RNTapHandler.m +1 -0
  23. package/apple/RNGestureHandlerModule.mm +3 -2
  24. package/apple/RNRootViewGestureRecognizer.m +5 -0
  25. package/lib/commonjs/Directions.js +2 -2
  26. package/lib/commonjs/Directions.js.map +1 -1
  27. package/lib/commonjs/RNGestureHandlerModule.web.js +2 -2
  28. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  29. package/lib/commonjs/components/DrawerLayout.js +2 -2
  30. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  31. package/lib/commonjs/components/GestureButtons.js +3 -3
  32. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  33. package/lib/commonjs/components/GestureButtonsProps.js +6 -0
  34. package/lib/commonjs/components/GestureButtonsProps.js.map +1 -0
  35. package/lib/commonjs/components/GestureComponents.js +1 -1
  36. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  37. package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
  38. package/lib/commonjs/components/GestureHandlerRootView.android.js +1 -1
  39. package/lib/commonjs/components/GestureHandlerRootView.android.js.map +1 -1
  40. package/lib/commonjs/components/GestureHandlerRootView.js +1 -1
  41. package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
  42. package/lib/commonjs/components/Pressable/Pressable.js +334 -0
  43. package/lib/commonjs/components/Pressable/Pressable.js.map +1 -0
  44. package/lib/commonjs/components/Pressable/PressableProps.js +6 -0
  45. package/lib/commonjs/components/Pressable/PressableProps.js.map +1 -0
  46. package/lib/commonjs/components/Pressable/index.js +24 -0
  47. package/lib/commonjs/components/Pressable/index.js.map +1 -0
  48. package/lib/commonjs/components/Pressable/utils.js +136 -0
  49. package/lib/commonjs/components/Pressable/utils.js.map +1 -0
  50. package/lib/commonjs/components/ReanimatedSwipeable.js +317 -0
  51. package/lib/commonjs/components/ReanimatedSwipeable.js.map +1 -0
  52. package/lib/commonjs/components/Swipeable.js +3 -3
  53. package/lib/commonjs/components/Swipeable.js.map +1 -1
  54. package/lib/commonjs/components/touchables/GenericTouchable.js +4 -4
  55. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  56. package/lib/commonjs/components/touchables/GenericTouchableProps.js +6 -0
  57. package/lib/commonjs/components/touchables/GenericTouchableProps.js.map +1 -0
  58. package/lib/commonjs/components/touchables/TouchableHighlight.js.map +1 -1
  59. package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js +1 -1
  60. package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  61. package/lib/commonjs/components/touchables/TouchableNativeFeedbackProps.js +6 -0
  62. package/lib/commonjs/components/touchables/TouchableNativeFeedbackProps.js.map +1 -0
  63. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  64. package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js.map +1 -1
  65. package/lib/commonjs/getShadowNodeFromRef.js +2 -2
  66. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
  67. package/lib/commonjs/ghQueueMicrotask.js +3 -4
  68. package/lib/commonjs/ghQueueMicrotask.js.map +1 -1
  69. package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -1
  70. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
  71. package/lib/commonjs/handlers/GestureHandlerEventPayload.js +2 -0
  72. package/lib/commonjs/handlers/GestureHandlerEventPayload.js.map +1 -0
  73. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
  74. package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
  75. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
  76. package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -1
  77. package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -1
  78. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
  79. package/lib/commonjs/handlers/createHandler.js +21 -19
  80. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  81. package/lib/commonjs/handlers/createNativeWrapper.js +3 -3
  82. package/lib/commonjs/handlers/createNativeWrapper.js.map +1 -1
  83. package/lib/commonjs/handlers/gestureHandlerCommon.js +0 -86
  84. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  85. package/lib/commonjs/handlers/gestures/GestureDetector/Wrap.js.map +1 -1
  86. package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js +9 -9
  87. package/lib/commonjs/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -1
  88. package/lib/commonjs/handlers/gestures/GestureDetector/dropHandlers.js +2 -2
  89. package/lib/commonjs/handlers/gestures/GestureDetector/dropHandlers.js.map +1 -1
  90. package/lib/commonjs/handlers/gestures/GestureDetector/index.js +1 -1
  91. package/lib/commonjs/handlers/gestures/GestureDetector/index.js.map +1 -1
  92. package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js +21 -31
  93. package/lib/commonjs/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -1
  94. package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js +1 -1
  95. package/lib/commonjs/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
  96. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js +5 -5
  97. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js.map +1 -1
  98. package/lib/commonjs/handlers/gestures/flingGesture.js.map +1 -1
  99. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -1
  100. package/lib/commonjs/handlers/gestures/gesture.js +7 -7
  101. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  102. package/lib/commonjs/handlers/gestures/gestureComposition.js +5 -5
  103. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -1
  104. package/lib/commonjs/handlers/gestures/gestureStateManager.js +1 -1
  105. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
  106. package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -1
  107. package/lib/commonjs/handlers/gestures/nativeGesture.js.map +1 -1
  108. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
  109. package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -1
  110. package/lib/commonjs/handlers/gestures/rotationGesture.js.map +1 -1
  111. package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -1
  112. package/lib/commonjs/handlers/getNextHandlerTag.js +12 -0
  113. package/lib/commonjs/handlers/getNextHandlerTag.js.map +1 -0
  114. package/lib/commonjs/handlers/handlersRegistry.js +0 -6
  115. package/lib/commonjs/handlers/handlersRegistry.js.map +1 -1
  116. package/lib/commonjs/handlers/utils.js +91 -0
  117. package/lib/commonjs/handlers/utils.js.map +1 -0
  118. package/lib/commonjs/index.js +8 -0
  119. package/lib/commonjs/index.js.map +1 -1
  120. package/lib/commonjs/init.js +1 -1
  121. package/lib/commonjs/init.js.map +1 -1
  122. package/lib/commonjs/jestUtils/jestUtils.js +2 -2
  123. package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
  124. package/lib/commonjs/mocks.js +2 -2
  125. package/lib/commonjs/mocks.js.map +1 -1
  126. package/lib/commonjs/utils.js +1 -1
  127. package/lib/commonjs/utils.js.map +1 -1
  128. package/lib/commonjs/web/Gestures.js +1 -1
  129. package/lib/commonjs/web/Gestures.js.map +1 -1
  130. package/lib/commonjs/web/detectors/RotationGestureDetector.js +1 -1
  131. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  132. package/lib/commonjs/web/detectors/ScaleGestureDetector.js +4 -4
  133. package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
  134. package/lib/commonjs/web/handlers/FlingGestureHandler.js +1 -1
  135. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  136. package/lib/commonjs/web/handlers/GestureHandler.js +6 -11
  137. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  138. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +1 -1
  139. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  140. package/lib/commonjs/web/handlers/PanGestureHandler.js +1 -1
  141. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  142. package/lib/commonjs/web/handlers/TapGestureHandler.js +1 -1
  143. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  144. package/lib/commonjs/web/tools/EventManager.js +2 -2
  145. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  146. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +4 -11
  147. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  148. package/lib/commonjs/web/tools/LeastSquareSolver.js +18 -18
  149. package/lib/commonjs/web/tools/LeastSquareSolver.js.map +1 -1
  150. package/lib/commonjs/web/tools/PointerEventManager.js +2 -2
  151. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  152. package/lib/commonjs/web/tools/PointerTracker.js +1 -1
  153. package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
  154. package/lib/commonjs/web/tools/TouchEventManager.js +4 -4
  155. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
  156. package/lib/commonjs/web/tools/VelocityTracker.js +6 -6
  157. package/lib/commonjs/web/tools/VelocityTracker.js.map +1 -1
  158. package/lib/commonjs/web_hammer/NodeManager.js +2 -0
  159. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
  160. package/lib/module/Directions.js +2 -2
  161. package/lib/module/Directions.js.map +1 -1
  162. package/lib/module/RNGestureHandlerModule.web.js +2 -2
  163. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  164. package/lib/module/components/DrawerLayout.js +2 -2
  165. package/lib/module/components/DrawerLayout.js.map +1 -1
  166. package/lib/module/components/GestureButtons.js +3 -3
  167. package/lib/module/components/GestureButtons.js.map +1 -1
  168. package/lib/module/components/GestureButtonsProps.js +2 -0
  169. package/lib/module/components/GestureButtonsProps.js.map +1 -0
  170. package/lib/module/components/GestureComponents.js +1 -1
  171. package/lib/module/components/GestureComponents.js.map +1 -1
  172. package/lib/module/components/GestureHandlerButton.js.map +1 -1
  173. package/lib/module/components/GestureHandlerRootView.android.js +1 -1
  174. package/lib/module/components/GestureHandlerRootView.android.js.map +1 -1
  175. package/lib/module/components/GestureHandlerRootView.js +1 -1
  176. package/lib/module/components/GestureHandlerRootView.js.map +1 -1
  177. package/lib/module/components/Pressable/Pressable.js +309 -0
  178. package/lib/module/components/Pressable/Pressable.js.map +1 -0
  179. package/lib/module/components/Pressable/PressableProps.js +2 -0
  180. package/lib/module/components/Pressable/PressableProps.js.map +1 -0
  181. package/lib/module/components/Pressable/index.js +3 -0
  182. package/lib/module/components/Pressable/index.js.map +1 -0
  183. package/lib/module/components/Pressable/utils.js +120 -0
  184. package/lib/module/components/Pressable/utils.js.map +1 -0
  185. package/lib/module/components/ReanimatedSwipeable.js +293 -0
  186. package/lib/module/components/ReanimatedSwipeable.js.map +1 -0
  187. package/lib/module/components/Swipeable.js +3 -3
  188. package/lib/module/components/Swipeable.js.map +1 -1
  189. package/lib/module/components/touchables/GenericTouchable.js +4 -4
  190. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  191. package/lib/module/components/touchables/GenericTouchableProps.js +2 -0
  192. package/lib/module/components/touchables/GenericTouchableProps.js.map +1 -0
  193. package/lib/module/components/touchables/TouchableHighlight.js.map +1 -1
  194. package/lib/module/components/touchables/TouchableNativeFeedback.android.js +1 -1
  195. package/lib/module/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
  196. package/lib/module/components/touchables/TouchableNativeFeedbackProps.js +2 -0
  197. package/lib/module/components/touchables/TouchableNativeFeedbackProps.js.map +1 -0
  198. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  199. package/lib/module/components/touchables/TouchableWithoutFeedback.js.map +1 -1
  200. package/lib/module/getShadowNodeFromRef.js +2 -2
  201. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  202. package/lib/module/ghQueueMicrotask.js +3 -4
  203. package/lib/module/ghQueueMicrotask.js.map +1 -1
  204. package/lib/module/handlers/FlingGestureHandler.js.map +1 -1
  205. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
  206. package/lib/module/handlers/GestureHandlerEventPayload.js +2 -0
  207. package/lib/module/handlers/GestureHandlerEventPayload.js.map +1 -0
  208. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
  209. package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
  210. package/lib/module/handlers/PanGestureHandler.js.map +1 -1
  211. package/lib/module/handlers/PinchGestureHandler.js.map +1 -1
  212. package/lib/module/handlers/RotationGestureHandler.js.map +1 -1
  213. package/lib/module/handlers/TapGestureHandler.js.map +1 -1
  214. package/lib/module/handlers/createHandler.js +6 -5
  215. package/lib/module/handlers/createHandler.js.map +1 -1
  216. package/lib/module/handlers/createNativeWrapper.js +3 -3
  217. package/lib/module/handlers/createNativeWrapper.js.map +1 -1
  218. package/lib/module/handlers/gestureHandlerCommon.js +0 -72
  219. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  220. package/lib/module/handlers/gestures/GestureDetector/Wrap.js.map +1 -1
  221. package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js +4 -4
  222. package/lib/module/handlers/gestures/GestureDetector/attachHandlers.js.map +1 -1
  223. package/lib/module/handlers/gestures/GestureDetector/dropHandlers.js +1 -1
  224. package/lib/module/handlers/gestures/GestureDetector/dropHandlers.js.map +1 -1
  225. package/lib/module/handlers/gestures/GestureDetector/index.js +1 -1
  226. package/lib/module/handlers/gestures/GestureDetector/index.js.map +1 -1
  227. package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js +18 -28
  228. package/lib/module/handlers/gestures/GestureDetector/updateHandlers.js.map +1 -1
  229. package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js +1 -1
  230. package/lib/module/handlers/gestures/GestureDetector/useDetectorUpdater.js.map +1 -1
  231. package/lib/module/handlers/gestures/GestureDetector/utils.js +5 -5
  232. package/lib/module/handlers/gestures/GestureDetector/utils.js.map +1 -1
  233. package/lib/module/handlers/gestures/flingGesture.js.map +1 -1
  234. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -1
  235. package/lib/module/handlers/gestures/gesture.js +6 -6
  236. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  237. package/lib/module/handlers/gestures/gestureComposition.js +5 -5
  238. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
  239. package/lib/module/handlers/gestures/gestureStateManager.js +1 -1
  240. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
  241. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
  242. package/lib/module/handlers/gestures/nativeGesture.js.map +1 -1
  243. package/lib/module/handlers/gestures/panGesture.js.map +1 -1
  244. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -1
  245. package/lib/module/handlers/gestures/rotationGesture.js.map +1 -1
  246. package/lib/module/handlers/gestures/tapGesture.js.map +1 -1
  247. package/lib/module/handlers/getNextHandlerTag.js +5 -0
  248. package/lib/module/handlers/getNextHandlerTag.js.map +1 -0
  249. package/lib/module/handlers/handlersRegistry.js +0 -4
  250. package/lib/module/handlers/handlersRegistry.js.map +1 -1
  251. package/lib/module/handlers/utils.js +73 -0
  252. package/lib/module/handlers/utils.js.map +1 -0
  253. package/lib/module/index.js +1 -0
  254. package/lib/module/index.js.map +1 -1
  255. package/lib/module/init.js +1 -1
  256. package/lib/module/init.js.map +1 -1
  257. package/lib/module/jestUtils/jestUtils.js +2 -2
  258. package/lib/module/jestUtils/jestUtils.js.map +1 -1
  259. package/lib/module/mocks.js +2 -2
  260. package/lib/module/mocks.js.map +1 -1
  261. package/lib/module/utils.js +1 -1
  262. package/lib/module/utils.js.map +1 -1
  263. package/lib/module/web/Gestures.js +1 -1
  264. package/lib/module/web/Gestures.js.map +1 -1
  265. package/lib/module/web/detectors/RotationGestureDetector.js +1 -1
  266. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  267. package/lib/module/web/detectors/ScaleGestureDetector.js +4 -4
  268. package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
  269. package/lib/module/web/handlers/FlingGestureHandler.js +1 -1
  270. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  271. package/lib/module/web/handlers/GestureHandler.js +6 -11
  272. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  273. package/lib/module/web/handlers/NativeViewGestureHandler.js +1 -1
  274. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  275. package/lib/module/web/handlers/PanGestureHandler.js +1 -1
  276. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  277. package/lib/module/web/handlers/TapGestureHandler.js +1 -1
  278. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  279. package/lib/module/web/tools/EventManager.js +2 -2
  280. package/lib/module/web/tools/EventManager.js.map +1 -1
  281. package/lib/module/web/tools/GestureHandlerWebDelegate.js +4 -11
  282. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  283. package/lib/module/web/tools/LeastSquareSolver.js +18 -18
  284. package/lib/module/web/tools/LeastSquareSolver.js.map +1 -1
  285. package/lib/module/web/tools/PointerEventManager.js +2 -2
  286. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  287. package/lib/module/web/tools/PointerTracker.js +1 -1
  288. package/lib/module/web/tools/PointerTracker.js.map +1 -1
  289. package/lib/module/web/tools/TouchEventManager.js +4 -4
  290. package/lib/module/web/tools/TouchEventManager.js.map +1 -1
  291. package/lib/module/web/tools/VelocityTracker.js +6 -6
  292. package/lib/module/web/tools/VelocityTracker.js.map +1 -1
  293. package/lib/module/web_hammer/NodeManager.js +1 -1
  294. package/lib/module/web_hammer/NodeManager.js.map +1 -1
  295. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  296. package/lib/typescript/components/GestureButtons.d.ts +2 -85
  297. package/lib/typescript/components/GestureButtonsProps.d.ts +99 -0
  298. package/lib/typescript/components/GestureHandlerButton.d.ts +1 -1
  299. package/lib/typescript/components/Pressable/Pressable.d.ts +3 -0
  300. package/lib/typescript/components/Pressable/PressableProps.d.ts +116 -0
  301. package/lib/typescript/components/Pressable/index.d.ts +2 -0
  302. package/lib/typescript/components/Pressable/utils.d.ts +15 -0
  303. package/lib/typescript/components/ReanimatedSwipeable.d.ts +125 -0
  304. package/lib/typescript/components/touchables/GenericTouchable.d.ts +4 -16
  305. package/lib/typescript/components/touchables/GenericTouchableProps.d.ts +14 -0
  306. package/lib/typescript/components/touchables/TouchableHighlight.d.ts +1 -1
  307. package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +2 -9
  308. package/lib/typescript/components/touchables/TouchableNativeFeedbackProps.d.ts +9 -0
  309. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +1 -1
  310. package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +2 -1
  311. package/lib/typescript/handlers/FlingGestureHandler.d.ts +2 -6
  312. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +1 -10
  313. package/lib/typescript/handlers/GestureHandlerEventPayload.d.ts +159 -0
  314. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +2 -35
  315. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +2 -6
  316. package/lib/typescript/handlers/PanGestureHandler.d.ts +3 -51
  317. package/lib/typescript/handlers/PinchGestureHandler.d.ts +2 -23
  318. package/lib/typescript/handlers/RotationGestureHandler.d.ts +2 -23
  319. package/lib/typescript/handlers/TapGestureHandler.d.ts +2 -6
  320. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +0 -5
  321. package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +10 -9
  322. package/lib/typescript/handlers/gestures/GestureDetector/types.d.ts +1 -0
  323. package/lib/typescript/handlers/gestures/GestureDetector/utils.d.ts +1 -0
  324. package/lib/typescript/handlers/gestures/flingGesture.d.ts +2 -1
  325. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +2 -1
  326. package/lib/typescript/handlers/gestures/gesture.d.ts +2 -8
  327. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +2 -1
  328. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +2 -1
  329. package/lib/typescript/handlers/gestures/panGesture.d.ts +2 -1
  330. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +1 -1
  331. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +1 -1
  332. package/lib/typescript/handlers/gestures/tapGesture.d.ts +2 -1
  333. package/lib/typescript/handlers/getNextHandlerTag.d.ts +1 -0
  334. package/lib/typescript/handlers/handlersRegistry.d.ts +1 -2
  335. package/lib/typescript/handlers/utils.d.ts +6 -0
  336. package/lib/typescript/index.d.ts +12 -9
  337. package/lib/typescript/jestUtils/jestUtils.d.ts +9 -7
  338. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +1 -0
  339. package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -0
  340. package/lib/typescript/web/handlers/HoverGestureHandler.d.ts +1 -0
  341. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +1 -0
  342. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +1 -0
  343. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -0
  344. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +1 -0
  345. package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +1 -0
  346. package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +1 -0
  347. package/lib/typescript/web/handlers/TapGestureHandler.d.ts +1 -0
  348. package/lib/typescript/web_hammer/NodeManager.d.ts +4 -5
  349. package/package.json +14 -16
  350. package/src/Directions.ts +2 -2
  351. package/src/RNGestureHandlerModule.web.ts +2 -2
  352. package/src/components/DrawerLayout.tsx +7 -9
  353. package/src/components/GestureButtons.tsx +13 -123
  354. package/src/components/GestureButtonsProps.ts +115 -0
  355. package/src/components/GestureComponents.tsx +1 -1
  356. package/src/components/GestureHandlerButton.tsx +1 -1
  357. package/src/components/GestureHandlerRootView.android.tsx +1 -1
  358. package/src/components/GestureHandlerRootView.tsx +1 -1
  359. package/src/components/Pressable/Pressable.tsx +398 -0
  360. package/src/components/Pressable/PressableProps.tsx +149 -0
  361. package/src/components/Pressable/index.ts +2 -0
  362. package/src/components/Pressable/utils.ts +180 -0
  363. package/src/components/ReanimatedSwipeable.tsx +629 -0
  364. package/src/components/Swipeable.tsx +6 -6
  365. package/src/components/touchables/GenericTouchable.tsx +9 -36
  366. package/src/components/touchables/GenericTouchableProps.ts +26 -0
  367. package/src/components/touchables/TouchableHighlight.tsx +2 -4
  368. package/src/components/touchables/TouchableNativeFeedback.android.tsx +7 -17
  369. package/src/components/touchables/TouchableNativeFeedbackProps.tsx +12 -0
  370. package/src/components/touchables/TouchableOpacity.tsx +3 -5
  371. package/src/components/touchables/TouchableWithoutFeedback.tsx +2 -1
  372. package/src/getShadowNodeFromRef.ts +2 -2
  373. package/src/ghQueueMicrotask.ts +7 -4
  374. package/src/handlers/FlingGestureHandler.ts +1 -6
  375. package/src/handlers/ForceTouchGestureHandler.ts +1 -12
  376. package/src/handlers/GestureHandlerEventPayload.ts +184 -0
  377. package/src/handlers/LongPressGestureHandler.ts +1 -40
  378. package/src/handlers/NativeViewGestureHandler.ts +1 -7
  379. package/src/handlers/PanGestureHandler.ts +1 -58
  380. package/src/handlers/PinchGestureHandler.ts +1 -27
  381. package/src/handlers/RotationGestureHandler.ts +1 -27
  382. package/src/handlers/TapGestureHandler.ts +1 -6
  383. package/src/handlers/createHandler.tsx +6 -11
  384. package/src/handlers/createNativeWrapper.tsx +3 -3
  385. package/src/handlers/gestureHandlerCommon.ts +3 -79
  386. package/src/handlers/gestureHandlerTypesCompat.ts +16 -30
  387. package/src/handlers/gestures/GestureDetector/Wrap.tsx +1 -1
  388. package/src/handlers/gestures/GestureDetector/attachHandlers.ts +4 -7
  389. package/src/handlers/gestures/GestureDetector/dropHandlers.ts +1 -1
  390. package/src/handlers/gestures/GestureDetector/index.tsx +1 -1
  391. package/src/handlers/gestures/GestureDetector/updateHandlers.ts +20 -30
  392. package/src/handlers/gestures/GestureDetector/useDetectorUpdater.ts +1 -1
  393. package/src/handlers/gestures/GestureDetector/utils.ts +5 -5
  394. package/src/handlers/gestures/flingGesture.ts +2 -4
  395. package/src/handlers/gestures/forceTouchGesture.ts +2 -4
  396. package/src/handlers/gestures/gesture.ts +17 -15
  397. package/src/handlers/gestures/gestureComposition.ts +5 -5
  398. package/src/handlers/gestures/gestureStateManager.ts +1 -1
  399. package/src/handlers/gestures/longPressGesture.ts +2 -4
  400. package/src/handlers/gestures/nativeGesture.ts +2 -4
  401. package/src/handlers/gestures/panGesture.ts +2 -4
  402. package/src/handlers/gestures/pinchGesture.ts +1 -1
  403. package/src/handlers/gestures/rotationGesture.ts +1 -1
  404. package/src/handlers/gestures/tapGesture.ts +2 -4
  405. package/src/handlers/getNextHandlerTag.ts +5 -0
  406. package/src/handlers/handlersRegistry.ts +0 -6
  407. package/src/handlers/utils.ts +75 -0
  408. package/src/index.ts +25 -36
  409. package/src/init.ts +1 -1
  410. package/src/jestUtils/jestUtils.ts +12 -10
  411. package/src/mocks.ts +2 -2
  412. package/src/utils.ts +1 -1
  413. package/src/web/Gestures.ts +1 -1
  414. package/src/web/detectors/RotationGestureDetector.ts +1 -1
  415. package/src/web/detectors/ScaleGestureDetector.ts +4 -4
  416. package/src/web/handlers/FlingGestureHandler.ts +1 -1
  417. package/src/web/handlers/GestureHandler.ts +8 -14
  418. package/src/web/handlers/NativeViewGestureHandler.ts +3 -3
  419. package/src/web/handlers/PanGestureHandler.ts +1 -1
  420. package/src/web/handlers/TapGestureHandler.ts +1 -1
  421. package/src/web/tools/EventManager.ts +2 -2
  422. package/src/web/tools/GestureHandlerWebDelegate.ts +3 -8
  423. package/src/web/tools/LeastSquareSolver.ts +18 -18
  424. package/src/web/tools/PointerEventManager.ts +2 -2
  425. package/src/web/tools/PointerTracker.ts +2 -1
  426. package/src/web/tools/TouchEventManager.ts +4 -4
  427. package/src/web/tools/VelocityTracker.ts +6 -6
  428. package/src/web_hammer/NodeManager.ts +2 -11
@@ -35,7 +35,7 @@ class GestureHandlerWebDelegate {
35
35
  }
36
36
 
37
37
  init(viewRef, handler) {
38
- var _config$touchAction;
38
+ var _config$userSelect, _config$userSelect2, _config$touchAction;
39
39
 
40
40
  if (!viewRef) {
41
41
  throw new Error(`Cannot find HTML Element for handler ${handler.getTag()}`);
@@ -45,16 +45,9 @@ class GestureHandlerWebDelegate {
45
45
  this.view = (0, _reactNative.findNodeHandle)(viewRef);
46
46
  const config = handler.getConfig();
47
47
  this.addContextMenuListeners(config);
48
-
49
- if (!config.userSelect) {
50
- this.view.style['webkitUserSelect'] = 'none';
51
- this.view.style['userSelect'] = 'none';
52
- } else {
53
- this.view.style['webkitUserSelect'] = config.userSelect;
54
- this.view.style['userSelect'] = config.userSelect;
55
- }
56
-
57
- this.view.style['touchAction'] = (_config$touchAction = config.touchAction) !== null && _config$touchAction !== void 0 ? _config$touchAction : 'none'; //@ts-ignore This one disables default events on Safari
48
+ this.view.style['userSelect'] = (_config$userSelect = config.userSelect) !== null && _config$userSelect !== void 0 ? _config$userSelect : 'none';
49
+ this.view.style['webkitUserSelect'] = (_config$userSelect2 = config.userSelect) !== null && _config$userSelect2 !== void 0 ? _config$userSelect2 : 'none';
50
+ this.view.style['touchAction'] = (_config$touchAction = config.touchAction) !== null && _config$touchAction !== void 0 ? _config$touchAction : 'none'; // @ts-ignore This one disables default events on Safari
58
51
 
59
52
  this.view.style['WebkitTouchCallout'] = 'none';
60
53
  this.eventManagers.push(new _PointerEventManager.default(this.view));
@@ -1 +1 @@
1
- {"version":3,"sources":["GestureHandlerWebDelegate.ts"],"names":["GestureHandlerWebDelegate","getView","view","init","viewRef","handler","Error","getTag","gestureHandler","config","getConfig","addContextMenuListeners","userSelect","style","touchAction","eventManagers","push","PointerEventManager","TouchEventManager","forEach","manager","attachEventManager","isPointerInBounds","x","y","measureView","rect","getBoundingClientRect","pageX","left","pageY","top","width","height","reset","resetManager","tryResetCursor","activeCursor","getState","State","ACTIVE","cursor","shouldDisableContextMenu","enableContextMenu","undefined","isButtonInConfig","MouseButton","RIGHT","addEventListener","disableContextMenu","removeContextMenuListeners","removeEventListener","e","preventDefault","stopPropagation","onBegin","onActivate","onEnd","onCancel","onFail","destroy","unregisterListeners"],"mappings":"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","sourcesContent":["import { findNodeHandle } from 'react-native';\nimport type IGestureHandler from '../handlers/IGestureHandler';\nimport {\n GestureHandlerDelegate,\n MeasureResult,\n} from './GestureHandlerDelegate';\nimport PointerEventManager from './PointerEventManager';\nimport TouchEventManager from './TouchEventManager';\nimport { State } from '../../State';\nimport { isPointerInBounds } from '../utils';\nimport EventManager from './EventManager';\nimport { Config } from '../interfaces';\nimport { MouseButton } from '../../handlers/gestureHandlerCommon';\n\nexport class GestureHandlerWebDelegate\n implements GestureHandlerDelegate<HTMLElement, IGestureHandler>\n{\n private view!: HTMLElement;\n private gestureHandler!: IGestureHandler;\n private eventManagers: EventManager<unknown>[] = [];\n\n getView(): HTMLElement {\n return this.view;\n }\n\n init(viewRef: number, handler: IGestureHandler): void {\n if (!viewRef) {\n throw new Error(\n `Cannot find HTML Element for handler ${handler.getTag()}`\n );\n }\n\n this.gestureHandler = handler;\n this.view = findNodeHandle(viewRef) as unknown as HTMLElement;\n\n const config = handler.getConfig();\n\n this.addContextMenuListeners(config);\n\n if (!config.userSelect) {\n this.view.style['webkitUserSelect'] = 'none';\n this.view.style['userSelect'] = 'none';\n } else {\n this.view.style['webkitUserSelect'] = config.userSelect;\n this.view.style['userSelect'] = config.userSelect;\n }\n\n this.view.style['touchAction'] = config.touchAction ?? 'none';\n //@ts-ignore This one disables default events on Safari\n this.view.style['WebkitTouchCallout'] = 'none';\n\n this.eventManagers.push(new PointerEventManager(this.view));\n this.eventManagers.push(new TouchEventManager(this.view));\n\n this.eventManagers.forEach((manager) =>\n this.gestureHandler.attachEventManager(manager)\n );\n }\n\n isPointerInBounds({ x, y }: { x: number; y: number }): boolean {\n return isPointerInBounds(this.view, { x, y });\n }\n\n measureView(): MeasureResult {\n const rect = this.view.getBoundingClientRect();\n\n return {\n pageX: rect.left,\n pageY: rect.top,\n width: rect.width,\n height: rect.height,\n };\n }\n\n reset(): void {\n this.eventManagers.forEach((manager: EventManager<unknown>) =>\n manager.resetManager()\n );\n }\n\n tryResetCursor() {\n const config = this.gestureHandler.getConfig();\n\n if (\n config.activeCursor &&\n config.activeCursor !== 'auto' &&\n this.gestureHandler.getState() === State.ACTIVE\n ) {\n this.view.style.cursor = 'auto';\n }\n }\n\n private shouldDisableContextMenu(config: Config) {\n return (\n (config.enableContextMenu === undefined &&\n this.gestureHandler.isButtonInConfig(MouseButton.RIGHT)) ||\n config.enableContextMenu === false\n );\n }\n\n private addContextMenuListeners(config: Config): void {\n if (this.shouldDisableContextMenu(config)) {\n this.view.addEventListener('contextmenu', this.disableContextMenu);\n } else if (config.enableContextMenu) {\n this.view.addEventListener('contextmenu', this.enableContextMenu);\n }\n }\n\n private removeContextMenuListeners(config: Config): void {\n if (this.shouldDisableContextMenu(config)) {\n this.view.removeEventListener('contextmenu', this.disableContextMenu);\n } else if (config.enableContextMenu) {\n this.view.removeEventListener('contextmenu', this.enableContextMenu);\n }\n }\n\n private disableContextMenu(this: void, e: MouseEvent): void {\n e.preventDefault();\n }\n\n private enableContextMenu(this: void, e: MouseEvent): void {\n e.stopPropagation();\n }\n\n onBegin(): void {\n // no-op for now\n }\n\n onActivate(): void {\n const config = this.gestureHandler.getConfig();\n\n if (\n (!this.view.style.cursor || this.view.style.cursor === 'auto') &&\n config.activeCursor\n ) {\n this.view.style.cursor = config.activeCursor;\n }\n }\n\n onEnd(): void {\n this.tryResetCursor();\n }\n\n onCancel(): void {\n this.tryResetCursor();\n }\n\n onFail(): void {\n this.tryResetCursor();\n }\n\n public destroy(config: Config): void {\n this.removeContextMenuListeners(config);\n\n this.eventManagers.forEach((manager) => {\n manager.unregisterListeners();\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["GestureHandlerWebDelegate.ts"],"names":["GestureHandlerWebDelegate","getView","view","init","viewRef","handler","Error","getTag","gestureHandler","config","getConfig","addContextMenuListeners","style","userSelect","touchAction","eventManagers","push","PointerEventManager","TouchEventManager","forEach","manager","attachEventManager","isPointerInBounds","x","y","measureView","rect","getBoundingClientRect","pageX","left","pageY","top","width","height","reset","resetManager","tryResetCursor","activeCursor","getState","State","ACTIVE","cursor","shouldDisableContextMenu","enableContextMenu","undefined","isButtonInConfig","MouseButton","RIGHT","addEventListener","disableContextMenu","removeContextMenuListeners","removeEventListener","e","preventDefault","stopPropagation","onBegin","onActivate","onEnd","onCancel","onFail","destroy","unregisterListeners"],"mappings":"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","sourcesContent":["import { findNodeHandle } from 'react-native';\nimport type IGestureHandler from '../handlers/IGestureHandler';\nimport {\n GestureHandlerDelegate,\n MeasureResult,\n} from './GestureHandlerDelegate';\nimport PointerEventManager from './PointerEventManager';\nimport TouchEventManager from './TouchEventManager';\nimport { State } from '../../State';\nimport { isPointerInBounds } from '../utils';\nimport EventManager from './EventManager';\nimport { Config } from '../interfaces';\nimport { MouseButton } from '../../handlers/gestureHandlerCommon';\n\nexport class GestureHandlerWebDelegate\n implements GestureHandlerDelegate<HTMLElement, IGestureHandler>\n{\n private view!: HTMLElement;\n private gestureHandler!: IGestureHandler;\n private eventManagers: EventManager<unknown>[] = [];\n\n getView(): HTMLElement {\n return this.view;\n }\n\n init(viewRef: number, handler: IGestureHandler): void {\n if (!viewRef) {\n throw new Error(\n `Cannot find HTML Element for handler ${handler.getTag()}`\n );\n }\n\n this.gestureHandler = handler;\n this.view = findNodeHandle(viewRef) as unknown as HTMLElement;\n\n const config = handler.getConfig();\n\n this.addContextMenuListeners(config);\n\n this.view.style['userSelect'] = config.userSelect ?? 'none';\n this.view.style['webkitUserSelect'] = config.userSelect ?? 'none';\n\n this.view.style['touchAction'] = config.touchAction ?? 'none';\n // @ts-ignore This one disables default events on Safari\n this.view.style['WebkitTouchCallout'] = 'none';\n\n this.eventManagers.push(new PointerEventManager(this.view));\n this.eventManagers.push(new TouchEventManager(this.view));\n\n this.eventManagers.forEach((manager) =>\n this.gestureHandler.attachEventManager(manager)\n );\n }\n\n isPointerInBounds({ x, y }: { x: number; y: number }): boolean {\n return isPointerInBounds(this.view, { x, y });\n }\n\n measureView(): MeasureResult {\n const rect = this.view.getBoundingClientRect();\n\n return {\n pageX: rect.left,\n pageY: rect.top,\n width: rect.width,\n height: rect.height,\n };\n }\n\n reset(): void {\n this.eventManagers.forEach((manager: EventManager<unknown>) =>\n manager.resetManager()\n );\n }\n\n tryResetCursor() {\n const config = this.gestureHandler.getConfig();\n\n if (\n config.activeCursor &&\n config.activeCursor !== 'auto' &&\n this.gestureHandler.getState() === State.ACTIVE\n ) {\n this.view.style.cursor = 'auto';\n }\n }\n\n private shouldDisableContextMenu(config: Config) {\n return (\n (config.enableContextMenu === undefined &&\n this.gestureHandler.isButtonInConfig(MouseButton.RIGHT)) ||\n config.enableContextMenu === false\n );\n }\n\n private addContextMenuListeners(config: Config): void {\n if (this.shouldDisableContextMenu(config)) {\n this.view.addEventListener('contextmenu', this.disableContextMenu);\n } else if (config.enableContextMenu) {\n this.view.addEventListener('contextmenu', this.enableContextMenu);\n }\n }\n\n private removeContextMenuListeners(config: Config): void {\n if (this.shouldDisableContextMenu(config)) {\n this.view.removeEventListener('contextmenu', this.disableContextMenu);\n } else if (config.enableContextMenu) {\n this.view.removeEventListener('contextmenu', this.enableContextMenu);\n }\n }\n\n private disableContextMenu(this: void, e: MouseEvent): void {\n e.preventDefault();\n }\n\n private enableContextMenu(this: void, e: MouseEvent): void {\n e.stopPropagation();\n }\n\n onBegin(): void {\n // no-op for now\n }\n\n onActivate(): void {\n const config = this.gestureHandler.getConfig();\n\n if (\n (!this.view.style.cursor || this.view.style.cursor === 'auto') &&\n config.activeCursor\n ) {\n this.view.style.cursor = config.activeCursor;\n }\n }\n\n onEnd(): void {\n this.tryResetCursor();\n }\n\n onCancel(): void {\n this.tryResetCursor();\n }\n\n onFail(): void {\n this.tryResetCursor();\n }\n\n public destroy(config: Config): void {\n this.removeContextMenuListeners(config);\n\n this.eventManagers.forEach((manager) => {\n manager.unregisterListeners();\n });\n }\n}\n"]}
@@ -76,17 +76,17 @@ class Matrix {
76
76
  return Vector.fromVOL(this.elements, row * this.columns, this.columns);
77
77
  }
78
78
 
79
- } /// An nth degree polynomial fit to a dataset.
79
+ } // An nth degree polynomial fit to a dataset.
80
80
 
81
81
 
82
82
  class PolynomialFit {
83
- /// The polynomial coefficients of the fit.
84
- ///
85
- /// For each `i`, the element `coefficients[i]` is the coefficient of
86
- /// the `i`-th power of the variable.
87
- /// Creates a polynomial fit of the given degree.
88
- ///
89
- /// There are n + 1 coefficients in a fit of degree n.
83
+ // The polynomial coefficients of the fit.
84
+ //
85
+ // For each `i`, the element `coefficients[i]` is the coefficient of
86
+ // the `i`-th power of the variable.
87
+ // Creates a polynomial fit of the given degree.
88
+ //
89
+ // There are n + 1 coefficients in a fit of degree n.
90
90
  constructor(degree) {
91
91
  _defineProperty(this, "coefficients", void 0);
92
92
 
@@ -95,15 +95,15 @@ class PolynomialFit {
95
95
 
96
96
  }
97
97
 
98
- const precisionErrorTolerance = 1e-10; /// Uses the least-squares algorithm to fit a polynomial to a set of data.
98
+ const precisionErrorTolerance = 1e-10; // Uses the least-squares algorithm to fit a polynomial to a set of data.
99
99
 
100
100
  class LeastSquareSolver {
101
- /// The x-coordinates of each data point.
102
- /// The y-coordinates of each data point.
103
- /// The weight to use for each data point.
104
- /// Creates a least-squares solver.
105
- ///
106
- /// The [x], [y], and [w] arguments must not be null.
101
+ // The x-coordinates of each data point.
102
+ // The y-coordinates of each data point.
103
+ // The weight to use for each data point.
104
+ // Creates a least-squares solver.
105
+ //
106
+ // The [x], [y], and [w] arguments must not be null.
107
107
  constructor(x, y, w) {
108
108
  _defineProperty(this, "x", void 0);
109
109
 
@@ -114,9 +114,9 @@ class LeastSquareSolver {
114
114
  this.x = x;
115
115
  this.y = y;
116
116
  this.w = w;
117
- } /// Fits a polynomial of the given degree to the data points.
118
- ///
119
- /// When there is not enough data to fit a curve null is returned.
117
+ } // Fits a polynomial of the given degree to the data points.
118
+ //
119
+ // When there is not enough data to fit a curve null is returned.
120
120
 
121
121
 
122
122
  solve(degree) {
@@ -1 +1 @@
1
- {"version":3,"sources":["LeastSquareSolver.ts"],"names":["Vector","constructor","length","offset","elements","Array","fromVOL","values","result","get","index","set","value","dot","other","i","norm","Math","sqrt","Matrix","rows","columns","row","column","getRow","PolynomialFit","degree","coefficients","precisionErrorTolerance","LeastSquareSolver","x","y","w","solve","m","n","a","h","q","r","j","inverseNorm","wy"],"mappings":"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","sourcesContent":["// Implementation taken from Flutter's LeastSquareSolver\n// https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/gestures/lsq_solver.dart\n\nclass Vector {\n private offset: number;\n private length: number;\n private elements: number[];\n\n constructor(length: number) {\n this.offset = 0;\n this.length = length;\n this.elements = new Array<number>(length);\n }\n\n public static fromVOL(\n values: number[],\n offset: number,\n length: number\n ): Vector {\n const result = new Vector(0);\n\n result.offset = offset;\n result.length = length;\n result.elements = values;\n\n return result;\n }\n\n public get(index: number): number {\n return this.elements[this.offset + index];\n }\n\n public set(index: number, value: number): void {\n this.elements[this.offset + index] = value;\n }\n\n public dot(other: Vector): number {\n let result = 0;\n for (let i = 0; i < this.length; i++) {\n result += this.get(i) * other.get(i);\n }\n return result;\n }\n\n public norm() {\n return Math.sqrt(this.dot(this));\n }\n}\n\nclass Matrix {\n private columns: number;\n private elements: number[];\n\n constructor(rows: number, columns: number) {\n this.columns = columns;\n this.elements = new Array<number>(rows * columns);\n }\n\n public get(row: number, column: number): number {\n return this.elements[row * this.columns + column];\n }\n\n public set(row: number, column: number, value: number): void {\n this.elements[row * this.columns + column] = value;\n }\n\n public getRow(row: number): Vector {\n return Vector.fromVOL(this.elements, row * this.columns, this.columns);\n }\n}\n\n/// An nth degree polynomial fit to a dataset.\nclass PolynomialFit {\n /// The polynomial coefficients of the fit.\n ///\n /// For each `i`, the element `coefficients[i]` is the coefficient of\n /// the `i`-th power of the variable.\n public coefficients: number[];\n\n /// Creates a polynomial fit of the given degree.\n ///\n /// There are n + 1 coefficients in a fit of degree n.\n constructor(degree: number) {\n this.coefficients = new Array<number>(degree + 1);\n }\n}\n\nconst precisionErrorTolerance = 1e-10;\n\n/// Uses the least-squares algorithm to fit a polynomial to a set of data.\nexport default class LeastSquareSolver {\n /// The x-coordinates of each data point.\n private x: number[];\n /// The y-coordinates of each data point.\n private y: number[];\n /// The weight to use for each data point.\n private w: number[];\n\n /// Creates a least-squares solver.\n ///\n /// The [x], [y], and [w] arguments must not be null.\n constructor(x: number[], y: number[], w: number[]) {\n this.x = x;\n this.y = y;\n this.w = w;\n }\n\n /// Fits a polynomial of the given degree to the data points.\n ///\n /// When there is not enough data to fit a curve null is returned.\n public solve(degree: number): PolynomialFit | null {\n if (degree > this.x.length) {\n // Not enough data to fit a curve.\n return null;\n }\n\n const result = new PolynomialFit(degree);\n\n // Shorthands for the purpose of notation equivalence to original C++ code.\n const m = this.x.length;\n const n = degree + 1;\n\n // Expand the X vector to a matrix A, pre-multiplied by the weights.\n const a = new Matrix(n, m);\n for (let h = 0; h < m; h++) {\n a.set(0, h, this.w[h]);\n\n for (let i = 1; i < n; i++) {\n a.set(i, h, a.get(i - 1, h) * this.x[h]);\n }\n }\n\n // Apply the Gram-Schmidt process to A to obtain its QR decomposition.\n\n // Orthonormal basis, column-major ordVectorer.\n const q = new Matrix(n, m);\n // Upper triangular matrix, row-major order.\n const r = new Matrix(n, m);\n\n for (let j = 0; j < n; j += 1) {\n for (let h = 0; h < m; h += 1) {\n q.set(j, h, a.get(j, h));\n }\n for (let i = 0; i < j; i += 1) {\n const dot = q.getRow(j).dot(q.getRow(i));\n for (let h = 0; h < m; h += 1) {\n q.set(j, h, q.get(j, h) - dot * q.get(i, h));\n }\n }\n\n const norm = q.getRow(j).norm();\n if (norm < precisionErrorTolerance) {\n // Vectors are linearly dependent or zero so no solution.\n return null;\n }\n\n const inverseNorm = 1.0 / norm;\n for (let h = 0; h < m; h += 1) {\n q.set(j, h, q.get(j, h) * inverseNorm);\n }\n for (let i = 0; i < n; i += 1) {\n r.set(j, i, i < j ? 0.0 : q.getRow(j).dot(a.getRow(i)));\n }\n }\n\n // Solve R B = Qt W Y to find B. This is easy because R is upper triangular.\n // We just work from bottom-right to top-left calculating B's coefficients.\n const wy = new Vector(m);\n for (let h = 0; h < m; h += 1) {\n wy.set(h, this.y[h] * this.w[h]);\n }\n for (let i = n - 1; i >= 0; i -= 1) {\n result.coefficients[i] = q.getRow(i).dot(wy);\n for (let j = n - 1; j > i; j -= 1) {\n result.coefficients[i] -= r.get(i, j) * result.coefficients[j];\n }\n result.coefficients[i] /= r.get(i, i);\n }\n\n return result;\n }\n}\n"]}
1
+ {"version":3,"sources":["LeastSquareSolver.ts"],"names":["Vector","constructor","length","offset","elements","Array","fromVOL","values","result","get","index","set","value","dot","other","i","norm","Math","sqrt","Matrix","rows","columns","row","column","getRow","PolynomialFit","degree","coefficients","precisionErrorTolerance","LeastSquareSolver","x","y","w","solve","m","n","a","h","q","r","j","inverseNorm","wy"],"mappings":"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","sourcesContent":["// Implementation taken from Flutter's LeastSquareSolver\n// https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/gestures/lsq_solver.dart\n\nclass Vector {\n private offset: number;\n private length: number;\n private elements: number[];\n\n constructor(length: number) {\n this.offset = 0;\n this.length = length;\n this.elements = new Array<number>(length);\n }\n\n public static fromVOL(\n values: number[],\n offset: number,\n length: number\n ): Vector {\n const result = new Vector(0);\n\n result.offset = offset;\n result.length = length;\n result.elements = values;\n\n return result;\n }\n\n public get(index: number): number {\n return this.elements[this.offset + index];\n }\n\n public set(index: number, value: number): void {\n this.elements[this.offset + index] = value;\n }\n\n public dot(other: Vector): number {\n let result = 0;\n for (let i = 0; i < this.length; i++) {\n result += this.get(i) * other.get(i);\n }\n return result;\n }\n\n public norm() {\n return Math.sqrt(this.dot(this));\n }\n}\n\nclass Matrix {\n private columns: number;\n private elements: number[];\n\n constructor(rows: number, columns: number) {\n this.columns = columns;\n this.elements = new Array<number>(rows * columns);\n }\n\n public get(row: number, column: number): number {\n return this.elements[row * this.columns + column];\n }\n\n public set(row: number, column: number, value: number): void {\n this.elements[row * this.columns + column] = value;\n }\n\n public getRow(row: number): Vector {\n return Vector.fromVOL(this.elements, row * this.columns, this.columns);\n }\n}\n\n// An nth degree polynomial fit to a dataset.\nclass PolynomialFit {\n // The polynomial coefficients of the fit.\n //\n // For each `i`, the element `coefficients[i]` is the coefficient of\n // the `i`-th power of the variable.\n public coefficients: number[];\n\n // Creates a polynomial fit of the given degree.\n //\n // There are n + 1 coefficients in a fit of degree n.\n constructor(degree: number) {\n this.coefficients = new Array<number>(degree + 1);\n }\n}\n\nconst precisionErrorTolerance = 1e-10;\n\n// Uses the least-squares algorithm to fit a polynomial to a set of data.\nexport default class LeastSquareSolver {\n // The x-coordinates of each data point.\n private x: number[];\n // The y-coordinates of each data point.\n private y: number[];\n // The weight to use for each data point.\n private w: number[];\n\n // Creates a least-squares solver.\n //\n // The [x], [y], and [w] arguments must not be null.\n constructor(x: number[], y: number[], w: number[]) {\n this.x = x;\n this.y = y;\n this.w = w;\n }\n\n // Fits a polynomial of the given degree to the data points.\n //\n // When there is not enough data to fit a curve null is returned.\n public solve(degree: number): PolynomialFit | null {\n if (degree > this.x.length) {\n // Not enough data to fit a curve.\n return null;\n }\n\n const result = new PolynomialFit(degree);\n\n // Shorthands for the purpose of notation equivalence to original C++ code.\n const m = this.x.length;\n const n = degree + 1;\n\n // Expand the X vector to a matrix A, pre-multiplied by the weights.\n const a = new Matrix(n, m);\n for (let h = 0; h < m; h++) {\n a.set(0, h, this.w[h]);\n\n for (let i = 1; i < n; i++) {\n a.set(i, h, a.get(i - 1, h) * this.x[h]);\n }\n }\n\n // Apply the Gram-Schmidt process to A to obtain its QR decomposition.\n\n // Orthonormal basis, column-major ordVectorer.\n const q = new Matrix(n, m);\n // Upper triangular matrix, row-major order.\n const r = new Matrix(n, m);\n\n for (let j = 0; j < n; j += 1) {\n for (let h = 0; h < m; h += 1) {\n q.set(j, h, a.get(j, h));\n }\n for (let i = 0; i < j; i += 1) {\n const dot = q.getRow(j).dot(q.getRow(i));\n for (let h = 0; h < m; h += 1) {\n q.set(j, h, q.get(j, h) - dot * q.get(i, h));\n }\n }\n\n const norm = q.getRow(j).norm();\n if (norm < precisionErrorTolerance) {\n // Vectors are linearly dependent or zero so no solution.\n return null;\n }\n\n const inverseNorm = 1.0 / norm;\n for (let h = 0; h < m; h += 1) {\n q.set(j, h, q.get(j, h) * inverseNorm);\n }\n for (let i = 0; i < n; i += 1) {\n r.set(j, i, i < j ? 0.0 : q.getRow(j).dot(a.getRow(i)));\n }\n }\n\n // Solve R B = Qt W Y to find B. This is easy because R is upper triangular.\n // We just work from bottom-right to top-left calculating B's coefficients.\n const wy = new Vector(m);\n for (let h = 0; h < m; h += 1) {\n wy.set(h, this.y[h] * this.w[h]);\n }\n for (let i = n - 1; i >= 0; i -= 1) {\n result.coefficients[i] = q.getRow(i).dot(wy);\n for (let j = n - 1; j > i; j -= 1) {\n result.coefficients[i] -= r.get(i, j) * result.coefficients[j];\n }\n result.coefficients[i] /= r.get(i, i);\n }\n\n return result;\n }\n}\n"]}
@@ -188,8 +188,8 @@ class PointerEventManager extends _EventManager.default {
188
188
  const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.CANCEL);
189
189
 
190
190
  if (this.trackedPointers.has(adaptedEvent.pointerId)) {
191
- // in some cases the `pointerup` event is not fired, but `lostpointercapture` is
192
- // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it
191
+ // In some cases the `pointerup` event is not fired, but `lostpointercapture` is.
192
+ // Here we simulate the `pointercancel` event to make sure the gesture handler stops tracking it.
193
193
  this.onPointerCancel(adaptedEvent);
194
194
  this.activePointersCounter = 0;
195
195
  this.trackedPointers.clear();
@@ -1 +1 @@
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","rect","getBoundingClientRect","scaleX","scaleY","offsetX","left","offsetY","top","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 {\n PointerTypeMapping,\n calculateViewScale,\n isPointerInBounds,\n} 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 const rect = this.view.getBoundingClientRect();\n const { scaleX, scaleY } = calculateViewScale(this.view);\n\n return {\n x: event.clientX,\n y: event.clientY,\n offsetX: (event.clientX - rect.left) / scaleX,\n offsetY: (event.clientY - rect.top) / scaleY,\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"]}
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","rect","getBoundingClientRect","scaleX","scaleY","offsetX","left","offsetY","top","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 {\n PointerTypeMapping,\n calculateViewScale,\n isPointerInBounds,\n} 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 // Here we simulate the `pointercancel` event 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 const rect = this.view.getBoundingClientRect();\n const { scaleX, scaleY } = calculateViewScale(this.view);\n\n return {\n x: event.clientX,\n y: event.clientY,\n offsetX: (event.clientX - rect.left) / scaleX,\n offsetY: (event.clientY - rect.top) / scaleY,\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"]}
@@ -93,7 +93,7 @@ class PointerTracker {
93
93
  this.trackedPointers.set(event.pointerId, element);
94
94
  this.cachedAbsoluteAverages = this.getAbsoluteCoordsAverage();
95
95
  this.cachedRelativeAverages = this.getRelativeCoordsAverage();
96
- } //Mapping TouchEvents ID
96
+ } // Mapping TouchEvents ID
97
97
 
98
98
 
99
99
  mapTouchEventId(id) {
@@ -1 +1 @@
1
- {"version":3,"sources":["PointerTracker.ts"],"names":["MAX_POINTERS","PointerTracker","constructor","VelocityTracker","Map","x","y","lastMovedPointerId","NaN","i","touchEventsIds","set","addToTracker","event","trackedPointers","has","pointerId","newElement","abosoluteCoords","relativeCoords","offsetX","offsetY","timestamp","time","velocityX","velocityY","mapTouchEventId","cachedAbsoluteAverages","getAbsoluteCoordsAverage","cachedRelativeAverages","getRelativeCoordsAverage","removeFromTracker","delete","removeMappedTouchId","track","element","get","velocityTracker","add","getVelocity","id","mappedId","touchId","isNaN","getMappedTouchEventId","touchEventId","key","value","entries","getLastAbsoluteCoords","undefined","getLastRelativeCoords","coordsSum","getAbsoluteCoordsSum","avgX","size","avgY","averages","getRelativeCoordsSum","ignoredPointer","sum","forEach","getTrackedPointersCount","getTrackedPointersID","keys","_value","push","getData","resetTracker","reset","clear","shareCommonPointers","stPointers","ndPointers","some","includes"],"mappings":"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","sourcesContent":["import { AdaptedEvent, Point } from '../interfaces';\nimport VelocityTracker from './VelocityTracker';\n\nexport interface TrackerElement {\n abosoluteCoords: Point;\n relativeCoords: Point;\n timestamp: number;\n velocityX: number;\n velocityY: number;\n}\n\nconst MAX_POINTERS = 20;\n\nexport default class PointerTracker {\n private velocityTracker = new VelocityTracker();\n private trackedPointers: Map<number, TrackerElement> = new Map<\n number,\n TrackerElement\n >();\n\n private touchEventsIds: Map<number, number> = new Map<number, number>();\n\n private lastMovedPointerId: number;\n\n private cachedAbsoluteAverages: { x: number; y: number } = { x: 0, y: 0 };\n private cachedRelativeAverages: { x: number; y: number } = { x: 0, y: 0 };\n\n public constructor() {\n this.lastMovedPointerId = NaN;\n\n for (let i = 0; i < MAX_POINTERS; ++i) {\n this.touchEventsIds.set(i, NaN);\n }\n }\n\n public addToTracker(event: AdaptedEvent): void {\n if (this.trackedPointers.has(event.pointerId)) {\n return;\n }\n\n this.lastMovedPointerId = event.pointerId;\n\n const newElement: TrackerElement = {\n abosoluteCoords: { x: event.x, y: event.y },\n relativeCoords: { x: event.offsetX, y: event.offsetY },\n timestamp: event.time,\n velocityX: 0,\n velocityY: 0,\n };\n\n this.trackedPointers.set(event.pointerId, newElement);\n this.mapTouchEventId(event.pointerId);\n\n this.cachedAbsoluteAverages = this.getAbsoluteCoordsAverage();\n this.cachedRelativeAverages = this.getRelativeCoordsAverage();\n }\n\n public removeFromTracker(pointerId: number): void {\n this.trackedPointers.delete(pointerId);\n this.removeMappedTouchId(pointerId);\n }\n\n public track(event: AdaptedEvent): void {\n const element: TrackerElement = this.trackedPointers.get(\n event.pointerId\n ) as TrackerElement;\n\n if (!element) {\n return;\n }\n\n this.lastMovedPointerId = event.pointerId;\n\n this.velocityTracker.add(event);\n const [velocityX, velocityY] = this.velocityTracker.getVelocity();\n\n element.velocityX = velocityX;\n element.velocityY = velocityY;\n\n element.abosoluteCoords = { x: event.x, y: event.y };\n element.relativeCoords = { x: event.offsetX, y: event.offsetY };\n\n this.trackedPointers.set(event.pointerId, element);\n\n this.cachedAbsoluteAverages = this.getAbsoluteCoordsAverage();\n this.cachedRelativeAverages = this.getRelativeCoordsAverage();\n }\n\n //Mapping TouchEvents ID\n private mapTouchEventId(id: number): void {\n for (const [mappedId, touchId] of this.touchEventsIds) {\n if (isNaN(touchId)) {\n this.touchEventsIds.set(mappedId, id);\n break;\n }\n }\n }\n\n private removeMappedTouchId(id: number): void {\n const mappedId: number = this.getMappedTouchEventId(id);\n if (!isNaN(mappedId)) {\n this.touchEventsIds.set(mappedId, NaN);\n }\n }\n\n public getMappedTouchEventId(touchEventId: number): number {\n for (const [key, value] of this.touchEventsIds.entries()) {\n if (value === touchEventId) {\n return key;\n }\n }\n\n return NaN;\n }\n\n public getVelocity(pointerId: number) {\n return {\n x: this.trackedPointers.get(pointerId)?.velocityX as number,\n y: this.trackedPointers.get(pointerId)?.velocityY as number,\n };\n }\n\n public getLastAbsoluteCoords(pointerId?: number) {\n if (pointerId !== undefined) {\n return {\n x: this.trackedPointers.get(pointerId)?.abosoluteCoords.x as number,\n y: this.trackedPointers.get(pointerId)?.abosoluteCoords.y as number,\n };\n } else {\n return {\n x: this.trackedPointers.get(this.lastMovedPointerId)?.abosoluteCoords\n .x as number,\n y: this.trackedPointers.get(this.lastMovedPointerId)?.abosoluteCoords\n .y as number,\n };\n }\n }\n\n public getLastRelativeCoords(pointerId?: number) {\n if (pointerId !== undefined) {\n return {\n x: this.trackedPointers.get(pointerId)?.relativeCoords.x as number,\n y: this.trackedPointers.get(pointerId)?.relativeCoords.y as number,\n };\n } else {\n return {\n x: this.trackedPointers.get(this.lastMovedPointerId)?.relativeCoords\n .x as number,\n y: this.trackedPointers.get(this.lastMovedPointerId)?.relativeCoords\n .y as number,\n };\n }\n }\n\n // Some handlers use these methods to send average values in native event.\n // This may happen when pointers have already been removed from tracker (i.e. pointerup event).\n // In situation when NaN would be sent as a response, we return cached value.\n // That prevents handlers from crashing\n public getAbsoluteCoordsAverage() {\n const coordsSum = this.getAbsoluteCoordsSum();\n\n const avgX = coordsSum.x / this.trackedPointers.size;\n const avgY = coordsSum.y / this.trackedPointers.size;\n\n const averages = {\n x: isNaN(avgX) ? this.cachedAbsoluteAverages.x : avgX,\n y: isNaN(avgY) ? this.cachedAbsoluteAverages.y : avgY,\n };\n\n return averages;\n }\n\n public getRelativeCoordsAverage() {\n const coordsSum = this.getRelativeCoordsSum();\n\n const avgX = coordsSum.x / this.trackedPointers.size;\n const avgY = coordsSum.y / this.trackedPointers.size;\n\n const averages = {\n x: isNaN(avgX) ? this.cachedRelativeAverages.x : avgX,\n y: isNaN(avgY) ? this.cachedRelativeAverages.y : avgY,\n };\n\n return averages;\n }\n\n public getAbsoluteCoordsSum(ignoredPointer?: number) {\n const sum = { x: 0, y: 0 };\n\n this.trackedPointers.forEach((value, key) => {\n if (key !== ignoredPointer) {\n sum.x += value.abosoluteCoords.x;\n sum.y += value.abosoluteCoords.y;\n }\n });\n\n return sum;\n }\n\n public getRelativeCoordsSum(ignoredPointer?: number) {\n const sum = { x: 0, y: 0 };\n\n this.trackedPointers.forEach((value, key) => {\n if (key !== ignoredPointer) {\n sum.x += value.relativeCoords.x;\n sum.y += value.relativeCoords.y;\n }\n });\n\n return sum;\n }\n\n public getTrackedPointersCount(): number {\n return this.trackedPointers.size;\n }\n\n public getTrackedPointersID(): number[] {\n const keys: number[] = [];\n\n this.trackedPointers.forEach((_value, key) => {\n keys.push(key);\n });\n\n return keys;\n }\n\n public getData(): Map<number, TrackerElement> {\n return this.trackedPointers;\n }\n\n public resetTracker(): void {\n this.velocityTracker.reset();\n this.trackedPointers.clear();\n this.lastMovedPointerId = NaN;\n\n for (let i = 0; i < MAX_POINTERS; ++i) {\n this.touchEventsIds.set(i, NaN);\n }\n }\n\n public static shareCommonPointers(\n stPointers: number[],\n ndPointers: number[]\n ): boolean {\n return stPointers.some((pointerId) => ndPointers.includes(pointerId));\n }\n}\n"]}
1
+ {"version":3,"sources":["PointerTracker.ts"],"names":["MAX_POINTERS","PointerTracker","constructor","VelocityTracker","Map","x","y","lastMovedPointerId","NaN","i","touchEventsIds","set","addToTracker","event","trackedPointers","has","pointerId","newElement","abosoluteCoords","relativeCoords","offsetX","offsetY","timestamp","time","velocityX","velocityY","mapTouchEventId","cachedAbsoluteAverages","getAbsoluteCoordsAverage","cachedRelativeAverages","getRelativeCoordsAverage","removeFromTracker","delete","removeMappedTouchId","track","element","get","velocityTracker","add","getVelocity","id","mappedId","touchId","isNaN","getMappedTouchEventId","touchEventId","key","value","entries","getLastAbsoluteCoords","undefined","getLastRelativeCoords","coordsSum","getAbsoluteCoordsSum","avgX","size","avgY","averages","getRelativeCoordsSum","ignoredPointer","sum","forEach","getTrackedPointersCount","getTrackedPointersID","keys","_value","push","getData","resetTracker","reset","clear","shareCommonPointers","stPointers","ndPointers","some","includes"],"mappings":"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","sourcesContent":["import { AdaptedEvent, Point } from '../interfaces';\nimport VelocityTracker from './VelocityTracker';\n\nexport interface TrackerElement {\n abosoluteCoords: Point;\n relativeCoords: Point;\n timestamp: number;\n velocityX: number;\n velocityY: number;\n}\n\nconst MAX_POINTERS = 20;\n\nexport default class PointerTracker {\n private velocityTracker = new VelocityTracker();\n private trackedPointers: Map<number, TrackerElement> = new Map<\n number,\n TrackerElement\n >();\n\n private touchEventsIds: Map<number, number> = new Map<number, number>();\n\n private lastMovedPointerId: number;\n\n private cachedAbsoluteAverages: { x: number; y: number } = { x: 0, y: 0 };\n private cachedRelativeAverages: { x: number; y: number } = { x: 0, y: 0 };\n\n public constructor() {\n this.lastMovedPointerId = NaN;\n\n for (let i = 0; i < MAX_POINTERS; ++i) {\n this.touchEventsIds.set(i, NaN);\n }\n }\n\n public addToTracker(event: AdaptedEvent): void {\n if (this.trackedPointers.has(event.pointerId)) {\n return;\n }\n\n this.lastMovedPointerId = event.pointerId;\n\n const newElement: TrackerElement = {\n abosoluteCoords: { x: event.x, y: event.y },\n relativeCoords: { x: event.offsetX, y: event.offsetY },\n timestamp: event.time,\n velocityX: 0,\n velocityY: 0,\n };\n\n this.trackedPointers.set(event.pointerId, newElement);\n this.mapTouchEventId(event.pointerId);\n\n this.cachedAbsoluteAverages = this.getAbsoluteCoordsAverage();\n this.cachedRelativeAverages = this.getRelativeCoordsAverage();\n }\n\n public removeFromTracker(pointerId: number): void {\n this.trackedPointers.delete(pointerId);\n this.removeMappedTouchId(pointerId);\n }\n\n public track(event: AdaptedEvent): void {\n const element: TrackerElement = this.trackedPointers.get(\n event.pointerId\n ) as TrackerElement;\n\n if (!element) {\n return;\n }\n\n this.lastMovedPointerId = event.pointerId;\n\n this.velocityTracker.add(event);\n const [velocityX, velocityY] = this.velocityTracker.getVelocity();\n\n element.velocityX = velocityX;\n element.velocityY = velocityY;\n\n element.abosoluteCoords = { x: event.x, y: event.y };\n element.relativeCoords = { x: event.offsetX, y: event.offsetY };\n\n this.trackedPointers.set(event.pointerId, element);\n\n this.cachedAbsoluteAverages = this.getAbsoluteCoordsAverage();\n this.cachedRelativeAverages = this.getRelativeCoordsAverage();\n }\n\n // Mapping TouchEvents ID\n private mapTouchEventId(id: number): void {\n for (const [mappedId, touchId] of this.touchEventsIds) {\n if (isNaN(touchId)) {\n this.touchEventsIds.set(mappedId, id);\n break;\n }\n }\n }\n\n private removeMappedTouchId(id: number): void {\n const mappedId: number = this.getMappedTouchEventId(id);\n if (!isNaN(mappedId)) {\n this.touchEventsIds.set(mappedId, NaN);\n }\n }\n\n public getMappedTouchEventId(touchEventId: number): number {\n for (const [key, value] of this.touchEventsIds.entries()) {\n if (value === touchEventId) {\n return key;\n }\n }\n\n return NaN;\n }\n\n public getVelocity(pointerId: number) {\n return {\n x: this.trackedPointers.get(pointerId)?.velocityX as number,\n y: this.trackedPointers.get(pointerId)?.velocityY as number,\n };\n }\n\n public getLastAbsoluteCoords(pointerId?: number) {\n if (pointerId !== undefined) {\n return {\n x: this.trackedPointers.get(pointerId)?.abosoluteCoords.x as number,\n y: this.trackedPointers.get(pointerId)?.abosoluteCoords.y as number,\n };\n } else {\n return {\n x: this.trackedPointers.get(this.lastMovedPointerId)?.abosoluteCoords\n .x as number,\n y: this.trackedPointers.get(this.lastMovedPointerId)?.abosoluteCoords\n .y as number,\n };\n }\n }\n\n public getLastRelativeCoords(pointerId?: number) {\n if (pointerId !== undefined) {\n return {\n x: this.trackedPointers.get(pointerId)?.relativeCoords.x as number,\n y: this.trackedPointers.get(pointerId)?.relativeCoords.y as number,\n };\n } else {\n return {\n x: this.trackedPointers.get(this.lastMovedPointerId)?.relativeCoords\n .x as number,\n y: this.trackedPointers.get(this.lastMovedPointerId)?.relativeCoords\n .y as number,\n };\n }\n }\n\n // Some handlers use these methods to send average values in native event.\n // This may happen when pointers have already been removed from tracker (i.e. pointerup event).\n // In situation when NaN would be sent as a response, we return cached value.\n // That prevents handlers from crashing\n\n public getAbsoluteCoordsAverage() {\n const coordsSum = this.getAbsoluteCoordsSum();\n\n const avgX = coordsSum.x / this.trackedPointers.size;\n const avgY = coordsSum.y / this.trackedPointers.size;\n\n const averages = {\n x: isNaN(avgX) ? this.cachedAbsoluteAverages.x : avgX,\n y: isNaN(avgY) ? this.cachedAbsoluteAverages.y : avgY,\n };\n\n return averages;\n }\n\n public getRelativeCoordsAverage() {\n const coordsSum = this.getRelativeCoordsSum();\n\n const avgX = coordsSum.x / this.trackedPointers.size;\n const avgY = coordsSum.y / this.trackedPointers.size;\n\n const averages = {\n x: isNaN(avgX) ? this.cachedRelativeAverages.x : avgX,\n y: isNaN(avgY) ? this.cachedRelativeAverages.y : avgY,\n };\n\n return averages;\n }\n\n public getAbsoluteCoordsSum(ignoredPointer?: number) {\n const sum = { x: 0, y: 0 };\n\n this.trackedPointers.forEach((value, key) => {\n if (key !== ignoredPointer) {\n sum.x += value.abosoluteCoords.x;\n sum.y += value.abosoluteCoords.y;\n }\n });\n\n return sum;\n }\n\n public getRelativeCoordsSum(ignoredPointer?: number) {\n const sum = { x: 0, y: 0 };\n\n this.trackedPointers.forEach((value, key) => {\n if (key !== ignoredPointer) {\n sum.x += value.relativeCoords.x;\n sum.y += value.relativeCoords.y;\n }\n });\n\n return sum;\n }\n\n public getTrackedPointersCount(): number {\n return this.trackedPointers.size;\n }\n\n public getTrackedPointersID(): number[] {\n const keys: number[] = [];\n\n this.trackedPointers.forEach((_value, key) => {\n keys.push(key);\n });\n\n return keys;\n }\n\n public getData(): Map<number, TrackerElement> {\n return this.trackedPointers;\n }\n\n public resetTracker(): void {\n this.velocityTracker.reset();\n this.trackedPointers.clear();\n this.lastMovedPointerId = NaN;\n\n for (let i = 0; i < MAX_POINTERS; ++i) {\n this.touchEventsIds.set(i, NaN);\n }\n }\n\n public static shareCommonPointers(\n stPointers: number[],\n ndPointers: number[]\n ): boolean {\n return stPointers.some((pointerId) => ndPointers.includes(pointerId));\n }\n}\n"]}
@@ -29,7 +29,7 @@ class TouchEventManager extends _EventManager.default {
29
29
  if (!(0, _utils.isPointerInBounds)(this.view, {
30
30
  x: adaptedEvent.x,
31
31
  y: adaptedEvent.y
32
- }) || //@ts-ignore touchType field does exist
32
+ }) || // @ts-ignore touchType field does exist
33
33
  event.changedTouches[i].touchType === 'stylus') {
34
34
  continue;
35
35
  }
@@ -47,7 +47,7 @@ class TouchEventManager extends _EventManager.default {
47
47
 
48
48
  _defineProperty(this, "touchMoveCallback", event => {
49
49
  for (let i = 0; i < event.changedTouches.length; ++i) {
50
- const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.MOVE, i, _interfaces.TouchEventType.MOVE); //@ts-ignore touchType field does exist
50
+ const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.MOVE, i, _interfaces.TouchEventType.MOVE); // @ts-ignore touchType field does exist
51
51
 
52
52
  if (event.changedTouches[i].touchType === 'stylus') {
53
53
  continue;
@@ -87,7 +87,7 @@ class TouchEventManager extends _EventManager.default {
87
87
  // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly
88
88
  if (this.activePointersCounter === 0) {
89
89
  break;
90
- } //@ts-ignore touchType field does exist
90
+ } // @ts-ignore touchType field does exist
91
91
 
92
92
 
93
93
  if (event.changedTouches[i].touchType === 'stylus') {
@@ -108,7 +108,7 @@ class TouchEventManager extends _EventManager.default {
108
108
 
109
109
  _defineProperty(this, "touchCancelCallback", event => {
110
110
  for (let i = 0; i < event.changedTouches.length; ++i) {
111
- const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.CANCEL, i, _interfaces.TouchEventType.CANCELLED); //@ts-ignore touchType field does exist
111
+ const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.CANCEL, i, _interfaces.TouchEventType.CANCELLED); // @ts-ignore touchType field does exist
112
112
 
113
113
  if (event.changedTouches[i].touchType === 'stylus') {
114
114
  continue;
@@ -1 +1 @@
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","scaleX","scaleY","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 { calculateViewScale, 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 const { scaleX, scaleY } = calculateViewScale(this.view);\n\n return {\n x: clientX,\n y: clientY,\n offsetX: (clientX - rect.left) / scaleX,\n offsetY: (clientY - rect.top) / scaleY,\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","scaleX","scaleY","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 { calculateViewScale, 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 const { scaleX, scaleY } = calculateViewScale(this.view);\n\n return {\n x: clientX,\n y: clientY,\n offsetX: (clientX - rect.left) / scaleX,\n offsetY: (clientY - rect.top) / scaleY,\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"]}
@@ -30,12 +30,12 @@ class VelocityTracker {
30
30
 
31
31
  add(event) {
32
32
  this.samples.push(event);
33
- } /// Returns an estimate of the velocity of the object being tracked by the
34
- /// tracker given the current information available to the tracker.
35
- ///
36
- /// Information is added using [addPosition].
37
- ///
38
- /// Returns null if there is no data on which to base an estimate.
33
+ } // Returns an estimate of the velocity of the object being tracked by the
34
+ // tracker given the current information available to the tracker.
35
+ //
36
+ // Information is added using [addPosition].
37
+ //
38
+ // Returns null if there is no data on which to base an estimate.
39
39
 
40
40
 
41
41
  getVelocityEstimate() {
@@ -1 +1 @@
1
- {"version":3,"sources":["VelocityTracker.ts"],"names":["VelocityTracker","constructor","samples","CircularBuffer","historySize","add","event","push","getVelocityEstimate","x","y","w","time","sampleCount","index","size","newestSample","get","previousSample","sample","age","delta","Math","abs","horizonMilliseconds","assumePointerMoveStoppedMilliseconds","minSampleSize","xSolver","LeastSquareSolver","xFit","solve","ySolver","yFit","xVelocity","coefficients","yVelocity","getVelocity","estimate","reset","clear"],"mappings":"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","sourcesContent":["import { AdaptedEvent } from '../interfaces';\nimport CircularBuffer from './CircularBuffer';\nimport LeastSquareSolver from './LeastSquareSolver';\n\nexport default class VelocityTracker {\n private assumePointerMoveStoppedMilliseconds = 40;\n private historySize = 20;\n private horizonMilliseconds = 300;\n private minSampleSize = 3;\n\n private samples: CircularBuffer<AdaptedEvent>;\n\n constructor() {\n this.samples = new CircularBuffer<AdaptedEvent>(this.historySize);\n }\n\n public add(event: AdaptedEvent): void {\n this.samples.push(event);\n }\n\n /// Returns an estimate of the velocity of the object being tracked by the\n /// tracker given the current information available to the tracker.\n ///\n /// Information is added using [addPosition].\n ///\n /// Returns null if there is no data on which to base an estimate.\n private getVelocityEstimate(): [number, number] | null {\n const x = [];\n const y = [];\n const w = [];\n const time = [];\n\n let sampleCount = 0;\n let index = this.samples.size - 1;\n const newestSample = this.samples.get(index);\n if (!newestSample) {\n return null;\n }\n\n let previousSample = newestSample;\n\n // Starting with the most recent PointAtTime sample, iterate backwards while\n // the samples represent continuous motion.\n while (sampleCount < this.samples.size) {\n const sample = this.samples.get(index);\n\n const age = newestSample.time - sample.time;\n const delta = Math.abs(sample.time - previousSample.time);\n previousSample = sample;\n\n if (\n age > this.horizonMilliseconds ||\n delta > this.assumePointerMoveStoppedMilliseconds\n ) {\n break;\n }\n\n x.push(sample.x);\n y.push(sample.y);\n w.push(1);\n time.push(-age);\n\n sampleCount++;\n index--;\n }\n\n if (sampleCount >= this.minSampleSize) {\n const xSolver = new LeastSquareSolver(time, x, w);\n const xFit = xSolver.solve(2);\n\n if (xFit !== null) {\n const ySolver = new LeastSquareSolver(time, y, w);\n const yFit = ySolver.solve(2);\n\n if (yFit !== null) {\n const xVelocity = xFit.coefficients[1] * 1000;\n const yVelocity = yFit.coefficients[1] * 1000;\n\n return [xVelocity, yVelocity];\n }\n }\n }\n\n return null;\n }\n\n public getVelocity(): [number, number] {\n const estimate = this.getVelocityEstimate();\n if (estimate !== null) {\n return estimate;\n }\n return [0, 0];\n }\n\n public reset(): void {\n this.samples.clear();\n }\n}\n"]}
1
+ {"version":3,"sources":["VelocityTracker.ts"],"names":["VelocityTracker","constructor","samples","CircularBuffer","historySize","add","event","push","getVelocityEstimate","x","y","w","time","sampleCount","index","size","newestSample","get","previousSample","sample","age","delta","Math","abs","horizonMilliseconds","assumePointerMoveStoppedMilliseconds","minSampleSize","xSolver","LeastSquareSolver","xFit","solve","ySolver","yFit","xVelocity","coefficients","yVelocity","getVelocity","estimate","reset","clear"],"mappings":"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","sourcesContent":["import { AdaptedEvent } from '../interfaces';\nimport CircularBuffer from './CircularBuffer';\nimport LeastSquareSolver from './LeastSquareSolver';\n\nexport default class VelocityTracker {\n private assumePointerMoveStoppedMilliseconds = 40;\n private historySize = 20;\n private horizonMilliseconds = 300;\n private minSampleSize = 3;\n\n private samples: CircularBuffer<AdaptedEvent>;\n\n constructor() {\n this.samples = new CircularBuffer<AdaptedEvent>(this.historySize);\n }\n\n public add(event: AdaptedEvent): void {\n this.samples.push(event);\n }\n\n // Returns an estimate of the velocity of the object being tracked by the\n // tracker given the current information available to the tracker.\n //\n // Information is added using [addPosition].\n //\n // Returns null if there is no data on which to base an estimate.\n private getVelocityEstimate(): [number, number] | null {\n const x = [];\n const y = [];\n const w = [];\n const time = [];\n\n let sampleCount = 0;\n let index = this.samples.size - 1;\n const newestSample = this.samples.get(index);\n if (!newestSample) {\n return null;\n }\n\n let previousSample = newestSample;\n\n // Starting with the most recent PointAtTime sample, iterate backwards while\n // the samples represent continuous motion.\n while (sampleCount < this.samples.size) {\n const sample = this.samples.get(index);\n\n const age = newestSample.time - sample.time;\n const delta = Math.abs(sample.time - previousSample.time);\n previousSample = sample;\n\n if (\n age > this.horizonMilliseconds ||\n delta > this.assumePointerMoveStoppedMilliseconds\n ) {\n break;\n }\n\n x.push(sample.x);\n y.push(sample.y);\n w.push(1);\n time.push(-age);\n\n sampleCount++;\n index--;\n }\n\n if (sampleCount >= this.minSampleSize) {\n const xSolver = new LeastSquareSolver(time, x, w);\n const xFit = xSolver.solve(2);\n\n if (xFit !== null) {\n const ySolver = new LeastSquareSolver(time, y, w);\n const yFit = ySolver.solve(2);\n\n if (yFit !== null) {\n const xVelocity = xFit.coefficients[1] * 1000;\n const yVelocity = yFit.coefficients[1] * 1000;\n\n return [xVelocity, yVelocity];\n }\n }\n }\n\n return null;\n }\n\n public getVelocity(): [number, number] {\n const estimate = this.getVelocityEstimate();\n if (estimate !== null) {\n return estimate;\n }\n return [0, 0];\n }\n\n public reset(): void {\n this.samples.clear();\n }\n}\n"]}
@@ -7,7 +7,9 @@ exports.getHandler = getHandler;
7
7
  exports.createGestureHandler = createGestureHandler;
8
8
  exports.dropGestureHandler = dropGestureHandler;
9
9
  exports.getNodes = getNodes;
10
+ exports.gestures = void 0;
10
11
  const gestures = {};
12
+ exports.gestures = gestures;
11
13
 
12
14
  function getHandler(tag) {
13
15
  if (tag in gestures) {
@@ -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 '../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
+ {"version":3,"sources":["NodeManager.ts"],"names":["gestures","getHandler","tag","Error","createGestureHandler","handlerTag","handler","dropGestureHandler","destroy","getNodes"],"mappings":";;;;;;;;;;AAAO,MAAMA,QAA6B,GAAG,EAAtC;;;AAEA,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,CAA8BC,UAA9B,EAAkDC,OAAlD,EAAgE;AACrE,MAAID,UAAU,IAAIL,QAAlB,EAA4B;AAC1B,UAAM,IAAIG,KAAJ,CAAW,oBAAmBE,UAAW,iBAAzC,CAAN;AACD;;AACDL,EAAAA,QAAQ,CAACK,UAAD,CAAR,GAAuBC,OAAvB,CAJqE,CAKrE;;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":["export const gestures: Record<number, any> = {};\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(handlerTag: number, handler: any) {\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,14 +1,14 @@
1
1
  const RIGHT = 1;
2
2
  const LEFT = 2;
3
3
  const UP = 4;
4
- const DOWN = 8; // public interface
4
+ const DOWN = 8; // Public interface
5
5
 
6
6
  export const Directions = {
7
7
  RIGHT: RIGHT,
8
8
  LEFT: LEFT,
9
9
  UP: UP,
10
10
  DOWN: DOWN
11
- }; // internal interface
11
+ }; // Internal interface
12
12
 
13
13
  export const DiagonalDirections = {
14
14
  UP_RIGHT: UP | RIGHT,
@@ -1 +1 @@
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"]}
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"]}
@@ -45,10 +45,10 @@ export default {
45
45
  }
46
46
 
47
47
  if (isNewWebImplementationEnabled()) {
48
- //@ts-ignore Types should be HTMLElement or React.Component
48
+ // @ts-ignore Types should be HTMLElement or React.Component
49
49
  NodeManager.getHandler(handlerTag).init(newView, propsRef);
50
50
  } else {
51
- //@ts-ignore Types should be HTMLElement or React.Component
51
+ // @ts-ignore Types should be HTMLElement or React.Component
52
52
  HammerNodeManager.getHandler(handlerTag).setView(newView, propsRef);
53
53
  }
54
54
  },