react-native-gesture-handler 2.16.0-rc.0 → 2.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (196) hide show
  1. package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +2 -0
  2. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +9 -0
  3. package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +3 -0
  4. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +2 -2
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/DiagonalDirections.kt +8 -0
  6. package/android/src/main/java/com/swmansion/gesturehandler/core/FlingGestureHandler.kt +61 -24
  7. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +17 -22
  8. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +30 -11
  9. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureUtils.kt +3 -0
  10. package/android/src/main/java/com/swmansion/gesturehandler/core/Vector.kt +66 -0
  11. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +119 -19
  12. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +2 -2
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +1 -4
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +4 -2
  15. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +1 -1
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +1 -4
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +4 -7
  18. package/apple/Handlers/RNLongPressHandler.m +5 -13
  19. package/apple/Handlers/RNPinchHandler.m +12 -1
  20. package/apple/RNGestureHandler.m +3 -1
  21. package/lib/commonjs/Directions.js +19 -6
  22. package/lib/commonjs/Directions.js.map +1 -1
  23. package/lib/commonjs/RNGestureHandlerModule.web.js +7 -61
  24. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  25. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  26. package/lib/commonjs/components/Swipeable.js +3 -1
  27. package/lib/commonjs/components/Swipeable.js.map +1 -1
  28. package/lib/commonjs/components/touchables/GenericTouchable.js +1 -0
  29. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  30. package/lib/commonjs/handlers/createHandler.js +2 -2
  31. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  32. package/lib/commonjs/handlers/customDirectEventTypes.js +14 -0
  33. package/lib/commonjs/handlers/customDirectEventTypes.js.map +1 -0
  34. package/lib/commonjs/handlers/customDirectEventTypes.web.js +11 -0
  35. package/lib/commonjs/handlers/customDirectEventTypes.web.js.map +1 -0
  36. package/lib/commonjs/handlers/gestureHandlerCommon.js +13 -2
  37. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  38. package/lib/commonjs/handlers/gestures/GestureDetector.js +10 -0
  39. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  40. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  41. package/lib/commonjs/index.js +8 -8
  42. package/lib/commonjs/index.js.map +1 -1
  43. package/lib/commonjs/mocks.js +2 -0
  44. package/lib/commonjs/mocks.js.map +1 -1
  45. package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  46. package/lib/commonjs/web/Gestures.js +66 -0
  47. package/lib/commonjs/web/Gestures.js.map +1 -0
  48. package/lib/commonjs/web/constants.js +3 -8
  49. package/lib/commonjs/web/constants.js.map +1 -1
  50. package/lib/commonjs/web/handlers/FlingGestureHandler.js +36 -12
  51. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  52. package/lib/commonjs/web/handlers/GestureHandler.js +4 -2
  53. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  54. package/lib/commonjs/web/handlers/IGestureHandler.js +2 -0
  55. package/lib/commonjs/web/handlers/IGestureHandler.js.map +1 -0
  56. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +5 -6
  57. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  58. package/lib/commonjs/web/interfaces.js +1 -13
  59. package/lib/commonjs/web/interfaces.js.map +1 -1
  60. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  61. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +114 -115
  62. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  63. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +10 -5
  64. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  65. package/lib/commonjs/web/tools/InteractionManager.js +12 -3
  66. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  67. package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
  68. package/lib/commonjs/web/tools/PointerEventManager.js +55 -27
  69. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  70. package/lib/commonjs/web/tools/TouchEventManager.js +26 -5
  71. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
  72. package/lib/commonjs/web/tools/Vector.js +58 -0
  73. package/lib/commonjs/web/tools/Vector.js.map +1 -0
  74. package/lib/commonjs/web/utils.js +9 -1
  75. package/lib/commonjs/web/utils.js.map +1 -1
  76. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
  77. package/lib/module/Directions.js +16 -4
  78. package/lib/module/Directions.js.map +1 -1
  79. package/lib/module/RNGestureHandlerModule.web.js +2 -39
  80. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  81. package/lib/module/components/DrawerLayout.js.map +1 -1
  82. package/lib/module/components/Swipeable.js +3 -1
  83. package/lib/module/components/Swipeable.js.map +1 -1
  84. package/lib/module/components/touchables/GenericTouchable.js +1 -0
  85. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  86. package/lib/module/handlers/createHandler.js +2 -3
  87. package/lib/module/handlers/createHandler.js.map +1 -1
  88. package/lib/module/handlers/customDirectEventTypes.js +3 -0
  89. package/lib/module/handlers/customDirectEventTypes.js.map +1 -0
  90. package/lib/module/handlers/customDirectEventTypes.web.js +5 -0
  91. package/lib/module/handlers/customDirectEventTypes.web.js.map +1 -0
  92. package/lib/module/handlers/gestureHandlerCommon.js +11 -1
  93. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  94. package/lib/module/handlers/gestures/GestureDetector.js +10 -0
  95. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  96. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  97. package/lib/module/index.js +1 -1
  98. package/lib/module/index.js.map +1 -1
  99. package/lib/module/mocks.js +2 -0
  100. package/lib/module/mocks.js.map +1 -1
  101. package/lib/module/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  102. package/lib/module/web/Gestures.js +39 -0
  103. package/lib/module/web/Gestures.js.map +1 -0
  104. package/lib/module/web/constants.js +1 -6
  105. package/lib/module/web/constants.js.map +1 -1
  106. package/lib/module/web/handlers/FlingGestureHandler.js +34 -12
  107. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  108. package/lib/module/web/handlers/GestureHandler.js +3 -2
  109. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  110. package/lib/module/web/handlers/IGestureHandler.js +2 -0
  111. package/lib/module/web/handlers/IGestureHandler.js.map +1 -0
  112. package/lib/module/web/handlers/NativeViewGestureHandler.js +5 -6
  113. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  114. package/lib/module/web/interfaces.js +0 -11
  115. package/lib/module/web/interfaces.js.map +1 -1
  116. package/lib/module/web/tools/EventManager.js.map +1 -1
  117. package/lib/module/web/tools/GestureHandlerOrchestrator.js +114 -115
  118. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  119. package/lib/module/web/tools/GestureHandlerWebDelegate.js +9 -4
  120. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  121. package/lib/module/web/tools/InteractionManager.js +9 -3
  122. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  123. package/lib/module/web/tools/NodeManager.js.map +1 -1
  124. package/lib/module/web/tools/PointerEventManager.js +53 -26
  125. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  126. package/lib/module/web/tools/TouchEventManager.js +26 -5
  127. package/lib/module/web/tools/TouchEventManager.js.map +1 -1
  128. package/lib/module/web/tools/Vector.js +47 -0
  129. package/lib/module/web/tools/Vector.js.map +1 -0
  130. package/lib/module/web/utils.js +2 -0
  131. package/lib/module/web/utils.js.map +1 -1
  132. package/lib/module/web_hammer/NodeManager.js.map +1 -1
  133. package/lib/typescript/Directions.d.ts +7 -0
  134. package/lib/typescript/RNGestureHandlerModule.web.d.ts +4 -39
  135. package/lib/typescript/components/DrawerLayout.d.ts +1 -2
  136. package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -1
  137. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
  138. package/lib/typescript/handlers/customDirectEventTypes.d.ts +1 -0
  139. package/lib/typescript/handlers/customDirectEventTypes.web.d.ts +2 -0
  140. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +11 -2
  141. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -1
  142. package/lib/typescript/handlers/gestures/gesture.d.ts +1 -2
  143. package/lib/typescript/index.d.ts +1 -1
  144. package/lib/typescript/mocks.d.ts +1 -0
  145. package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +4 -1
  146. package/lib/typescript/web/Gestures.d.ts +36 -0
  147. package/lib/typescript/web/constants.d.ts +1 -6
  148. package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +3 -3
  149. package/lib/typescript/web/handlers/GestureHandler.d.ts +11 -9
  150. package/lib/typescript/web/handlers/IGestureHandler.d.ts +38 -0
  151. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -0
  152. package/lib/typescript/web/interfaces.d.ts +7 -10
  153. package/lib/typescript/web/tools/EventManager.d.ts +15 -12
  154. package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +3 -4
  155. package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +7 -5
  156. package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +3 -3
  157. package/lib/typescript/web/tools/InteractionManager.d.ts +6 -6
  158. package/lib/typescript/web/tools/NodeManager.d.ts +4 -3
  159. package/lib/typescript/web/tools/PointerEventManager.d.ts +11 -2
  160. package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -1
  161. package/lib/typescript/web/tools/Vector.d.ts +15 -0
  162. package/lib/typescript/web/utils.d.ts +4 -4
  163. package/lib/typescript/web_hammer/NodeManager.d.ts +1 -1
  164. package/package.json +2 -1
  165. package/src/Directions.ts +21 -4
  166. package/src/RNGestureHandlerModule.web.ts +3 -44
  167. package/src/components/DrawerLayout.tsx +1 -1
  168. package/src/components/Swipeable.tsx +2 -0
  169. package/src/components/touchables/GenericTouchable.tsx +3 -0
  170. package/src/handlers/createHandler.tsx +10 -4
  171. package/src/handlers/customDirectEventTypes.ts +2 -0
  172. package/src/handlers/customDirectEventTypes.web.ts +5 -0
  173. package/src/handlers/gestureHandlerCommon.ts +28 -1
  174. package/src/handlers/gestures/GestureDetector.tsx +15 -0
  175. package/src/handlers/gestures/gesture.ts +1 -1
  176. package/src/index.ts +1 -1
  177. package/src/mocks.ts +2 -0
  178. package/src/specs/RNGestureHandlerButtonNativeComponent.ts +4 -0
  179. package/src/web/Gestures.ts +41 -0
  180. package/src/web/constants.ts +1 -7
  181. package/src/web/handlers/FlingGestureHandler.ts +54 -24
  182. package/src/web/handlers/GestureHandler.ts +14 -10
  183. package/src/web/handlers/IGestureHandler.ts +50 -0
  184. package/src/web/handlers/NativeViewGestureHandler.ts +5 -6
  185. package/src/web/interfaces.ts +13 -10
  186. package/src/web/tools/EventManager.ts +16 -14
  187. package/src/web/tools/GestureHandlerDelegate.ts +3 -4
  188. package/src/web/tools/GestureHandlerOrchestrator.ts +160 -145
  189. package/src/web/tools/GestureHandlerWebDelegate.ts +14 -9
  190. package/src/web/tools/InteractionManager.ts +18 -12
  191. package/src/web/tools/NodeManager.ts +4 -3
  192. package/src/web/tools/PointerEventManager.ts +181 -166
  193. package/src/web/tools/TouchEventManager.ts +126 -114
  194. package/src/web/tools/Vector.ts +60 -0
  195. package/src/web/utils.ts +7 -4
  196. package/src/web_hammer/NodeManager.ts +1 -1
@@ -1,7 +1,8 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
2
 
3
- import { EventTypes, MouseButton } from '../interfaces';
4
3
  import EventManager from './EventManager';
4
+ import { MouseButton } from '../../handlers/gestureHandlerCommon';
5
+ import { EventTypes } from '../interfaces';
5
6
  import { PointerTypeMapping, isPointerInBounds } from '../utils';
6
7
  import { PointerType } from '../../PointerType';
7
8
  const POINTER_CAPTURE_EXCLUDE_LIST = new Set(['SELECT', 'INPUT']);
@@ -17,15 +18,9 @@ export default class PointerEventManager extends EventManager {
17
18
 
18
19
  _defineProperty(this, "mouseButtonsMapper", new Map());
19
20
 
20
- this.mouseButtonsMapper.set(0, MouseButton.LEFT);
21
- this.mouseButtonsMapper.set(1, MouseButton.MIDDLE);
22
- this.mouseButtonsMapper.set(2, MouseButton.RIGHT);
23
- this.mouseButtonsMapper.set(3, MouseButton.BUTTON_4);
24
- this.mouseButtonsMapper.set(4, MouseButton.BUTTON_5);
25
- }
21
+ _defineProperty(this, "lastPosition", void 0);
26
22
 
27
- setListeners() {
28
- this.view.addEventListener('pointerdown', event => {
23
+ _defineProperty(this, "pointerDownCallback", event => {
29
24
  if (event.pointerType === PointerTypes.Touch) {
30
25
  return;
31
26
  }
@@ -54,7 +49,8 @@ export default class PointerEventManager extends EventManager {
54
49
  this.onPointerDown(adaptedEvent);
55
50
  }
56
51
  });
57
- this.view.addEventListener('pointerup', event => {
52
+
53
+ _defineProperty(this, "pointerUpCallback", event => {
58
54
  if (event.pointerType === PointerTypes.Touch) {
59
55
  return;
60
56
  } // When we call reset on gesture handlers, it also resets their event managers
@@ -84,11 +80,8 @@ export default class PointerEventManager extends EventManager {
84
80
  this.onPointerUp(adaptedEvent);
85
81
  }
86
82
  });
87
- const lastPosition = {
88
- x: null,
89
- y: null
90
- };
91
- this.view.addEventListener('pointermove', event => {
83
+
84
+ _defineProperty(this, "pointerMoveCallback", event => {
92
85
  if (event.pointerType === PointerTypes.Touch) {
93
86
  return;
94
87
  } // Stylus triggers `pointermove` event when it detects changes in pressure. Since it is very sensitive to those changes,
@@ -96,7 +89,7 @@ export default class PointerEventManager extends EventManager {
96
89
  // pointer has actually moved and if not, we do not send event.
97
90
 
98
91
 
99
- if (event.pointerType === PointerTypes.Stylus && event.x === lastPosition.x && event.y === lastPosition.y) {
92
+ if (event.pointerType === PointerTypes.Stylus && event.x === this.lastPosition.x && event.y === this.lastPosition.y) {
100
93
  return;
101
94
  }
102
95
 
@@ -142,10 +135,11 @@ export default class PointerEventManager extends EventManager {
142
135
  }
143
136
  }
144
137
 
145
- lastPosition.x = event.x;
146
- lastPosition.y = event.y;
138
+ this.lastPosition.x = event.x;
139
+ this.lastPosition.y = event.y;
147
140
  });
148
- this.view.addEventListener('pointercancel', event => {
141
+
142
+ _defineProperty(this, "pointerCancelCallback", event => {
149
143
  if (event.pointerType === PointerTypes.Touch) {
150
144
  return;
151
145
  }
@@ -155,12 +149,9 @@ export default class PointerEventManager extends EventManager {
155
149
  this.markAsOutOfBounds(adaptedEvent.pointerId);
156
150
  this.activePointersCounter = 0;
157
151
  this.trackedPointers.clear();
158
- }); // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for
159
- // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.
160
- // We therefore use pointerenter and pointerleave events to handle the hover gesture,
161
- // mapping them to onPointerMoveOver and onPointerMoveOut respectively.
152
+ });
162
153
 
163
- this.view.addEventListener('pointerenter', event => {
154
+ _defineProperty(this, "pointerEnterCallback", event => {
164
155
  if (event.pointerType === PointerTypes.Touch) {
165
156
  return;
166
157
  }
@@ -168,7 +159,8 @@ export default class PointerEventManager extends EventManager {
168
159
  const adaptedEvent = this.mapEvent(event, EventTypes.ENTER);
169
160
  this.onPointerMoveOver(adaptedEvent);
170
161
  });
171
- this.view.addEventListener('pointerleave', event => {
162
+
163
+ _defineProperty(this, "pointerLeaveCallback", event => {
172
164
  if (event.pointerType === PointerTypes.Touch) {
173
165
  return;
174
166
  }
@@ -176,7 +168,8 @@ export default class PointerEventManager extends EventManager {
176
168
  const adaptedEvent = this.mapEvent(event, EventTypes.LEAVE);
177
169
  this.onPointerMoveOut(adaptedEvent);
178
170
  });
179
- this.view.addEventListener('lostpointercapture', event => {
171
+
172
+ _defineProperty(this, "lostPointerCaptureCallback", event => {
180
173
  const adaptedEvent = this.mapEvent(event, EventTypes.CANCEL);
181
174
 
182
175
  if (this.trackedPointers.has(adaptedEvent.pointerId)) {
@@ -187,6 +180,40 @@ export default class PointerEventManager extends EventManager {
187
180
  this.trackedPointers.clear();
188
181
  }
189
182
  });
183
+
184
+ this.mouseButtonsMapper.set(0, MouseButton.LEFT);
185
+ this.mouseButtonsMapper.set(1, MouseButton.MIDDLE);
186
+ this.mouseButtonsMapper.set(2, MouseButton.RIGHT);
187
+ this.mouseButtonsMapper.set(3, MouseButton.BUTTON_4);
188
+ this.mouseButtonsMapper.set(4, MouseButton.BUTTON_5);
189
+ this.lastPosition = {
190
+ x: -Infinity,
191
+ y: -Infinity
192
+ };
193
+ }
194
+
195
+ registerListeners() {
196
+ this.view.addEventListener('pointerdown', this.pointerDownCallback);
197
+ this.view.addEventListener('pointerup', this.pointerUpCallback);
198
+ this.view.addEventListener('pointermove', this.pointerMoveCallback);
199
+ this.view.addEventListener('pointercancel', this.pointerCancelCallback); // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for
200
+ // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.
201
+ // We therefore use pointerenter and pointerleave events to handle the hover gesture,
202
+ // mapping them to onPointerMoveOver and onPointerMoveOut respectively.
203
+
204
+ this.view.addEventListener('pointerenter', this.pointerEnterCallback);
205
+ this.view.addEventListener('pointerleave', this.pointerLeaveCallback);
206
+ this.view.addEventListener('lostpointercapture', this.lostPointerCaptureCallback);
207
+ }
208
+
209
+ unregisterListeners() {
210
+ this.view.removeEventListener('pointerdown', this.pointerDownCallback);
211
+ this.view.removeEventListener('pointerup', this.pointerUpCallback);
212
+ this.view.removeEventListener('pointermove', this.pointerMoveCallback);
213
+ this.view.removeEventListener('pointercancel', this.pointerCancelCallback);
214
+ this.view.removeEventListener('pointerenter', this.pointerEnterCallback);
215
+ this.view.removeEventListener('pointerleave', this.pointerLeaveCallback);
216
+ this.view.removeEventListener('lostpointercapture', this.lostPointerCaptureCallback);
190
217
  }
191
218
 
192
219
  mapEvent(event, eventType) {
@@ -1 +1 @@
1
- {"version":3,"sources":["PointerEventManager.ts"],"names":["EventTypes","MouseButton","EventManager","PointerTypeMapping","isPointerInBounds","PointerType","POINTER_CAPTURE_EXCLUDE_LIST","Set","PointerTypes","Touch","Stylus","PointerEventManager","constructor","view","Map","mouseButtonsMapper","set","LEFT","MIDDLE","RIGHT","BUTTON_4","BUTTON_5","setListeners","addEventListener","event","pointerType","x","clientX","y","clientY","adaptedEvent","mapEvent","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","offsetX","offsetY","get","OTHER","button","time","timeStamp","resetManager"],"mappings":"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","sourcesContent":["import { AdaptedEvent, EventTypes, MouseButton } from '../interfaces';\nimport EventManager from './EventManager';\nimport { PointerTypeMapping, isPointerInBounds } from '../utils';\nimport { PointerType } from '../../PointerType';\n\nconst POINTER_CAPTURE_EXCLUDE_LIST = new Set<string>(['SELECT', 'INPUT']);\nconst PointerTypes = {\n Touch: 'touch',\n Stylus: 'pen',\n};\n\nexport default class PointerEventManager extends EventManager<HTMLElement> {\n private trackedPointers = new Set<number>();\n private readonly mouseButtonsMapper = new Map<number, MouseButton>();\n\n constructor(view: HTMLElement) {\n super(view);\n\n this.mouseButtonsMapper.set(0, MouseButton.LEFT);\n this.mouseButtonsMapper.set(1, MouseButton.MIDDLE);\n this.mouseButtonsMapper.set(2, MouseButton.RIGHT);\n this.mouseButtonsMapper.set(3, MouseButton.BUTTON_4);\n this.mouseButtonsMapper.set(4, MouseButton.BUTTON_5);\n }\n\n public setListeners(): void {\n this.view.addEventListener('pointerdown', (event: PointerEvent): void => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n if (\n !isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })\n ) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);\n const target = event.target as HTMLElement;\n\n if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {\n target.setPointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n this.trackedPointers.add(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointerup', (event: PointerEvent): void => {\n if (event.pointerType === 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 const lastPosition: { x: number | null; y: number | null } = {\n x: null,\n y: null,\n };\n\n this.view.addEventListener('pointermove', (event: PointerEvent): void => {\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 === lastPosition.x &&\n event.y === 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 lastPosition.x = event.x;\n lastPosition.y = event.y;\n });\n\n this.view.addEventListener('pointercancel', (event: PointerEvent): void => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n });\n\n // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for\n // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.\n // We therefore use pointerenter and pointerleave events to handle the hover gesture,\n // mapping them to onPointerMoveOver and onPointerMoveOut respectively.\n\n this.view.addEventListener('pointerenter', (event: PointerEvent): void => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);\n\n this.onPointerMoveOver(adaptedEvent);\n });\n\n this.view.addEventListener('pointerleave', (event: PointerEvent): void => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);\n\n this.onPointerMoveOut(adaptedEvent);\n });\n\n this.view.addEventListener(\n 'lostpointercapture',\n (event: PointerEvent): void => {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n if (this.trackedPointers.has(adaptedEvent.pointerId)) {\n // in some cases the `pointerup` event is not fired, but `lostpointercapture` is\n // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it\n this.onPointerCancel(adaptedEvent);\n\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n }\n }\n );\n }\n\n protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent {\n return {\n x: event.clientX,\n y: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n pointerId: event.pointerId,\n eventType: eventType,\n pointerType:\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":["EventManager","MouseButton","EventTypes","PointerTypeMapping","isPointerInBounds","PointerType","POINTER_CAPTURE_EXCLUDE_LIST","Set","PointerTypes","Touch","Stylus","PointerEventManager","constructor","view","Map","event","pointerType","x","clientX","y","clientY","adaptedEvent","mapEvent","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","LEFT","MIDDLE","RIGHT","BUTTON_4","BUTTON_5","Infinity","registerListeners","addEventListener","pointerDownCallback","pointerUpCallback","pointerMoveCallback","pointerCancelCallback","pointerEnterCallback","pointerLeaveCallback","lostPointerCaptureCallback","unregisterListeners","removeEventListener","offsetX","offsetY","get","OTHER","button","time","timeStamp","resetManager"],"mappings":"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","sourcesContent":["import EventManager from './EventManager';\nimport { MouseButton } from '../../handlers/gestureHandlerCommon';\nimport { AdaptedEvent, EventTypes, Point } from '../interfaces';\nimport { PointerTypeMapping, isPointerInBounds } from '../utils';\nimport { PointerType } from '../../PointerType';\n\nconst POINTER_CAPTURE_EXCLUDE_LIST = new Set<string>(['SELECT', 'INPUT']);\nconst PointerTypes = {\n Touch: 'touch',\n Stylus: 'pen',\n};\n\nexport default class PointerEventManager extends EventManager<HTMLElement> {\n private trackedPointers = new Set<number>();\n private readonly mouseButtonsMapper = new Map<number, MouseButton>();\n private lastPosition: Point;\n\n constructor(view: HTMLElement) {\n super(view);\n\n this.mouseButtonsMapper.set(0, MouseButton.LEFT);\n this.mouseButtonsMapper.set(1, MouseButton.MIDDLE);\n this.mouseButtonsMapper.set(2, MouseButton.RIGHT);\n this.mouseButtonsMapper.set(3, MouseButton.BUTTON_4);\n this.mouseButtonsMapper.set(4, MouseButton.BUTTON_5);\n\n this.lastPosition = {\n x: -Infinity,\n y: -Infinity,\n };\n }\n\n private pointerDownCallback = (event: PointerEvent) => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n if (!isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);\n const target = event.target as HTMLElement;\n\n if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {\n target.setPointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n this.trackedPointers.add(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n };\n\n private pointerUpCallback = (event: PointerEvent) => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);\n const target = event.target as HTMLElement;\n\n if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {\n target.releasePointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.trackedPointers.delete(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n };\n\n private pointerMoveCallback = (event: PointerEvent) => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n\n // Stylus triggers `pointermove` event when it detects changes in pressure. Since it is very sensitive to those changes,\n // it constantly sends events, even though there was no change in position. To fix that we check whether\n // pointer has actually moved and if not, we do not send event.\n if (\n event.pointerType === PointerTypes.Stylus &&\n event.x === this.lastPosition.x &&\n event.y === this.lastPosition.y\n ) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE);\n const target = event.target as HTMLElement;\n\n // You may be wondering why are we setting pointer capture here, when we\n // already set it in `pointerdown` handler. Well, that's a great question,\n // for which I don't have an answer. Specification (https://www.w3.org/TR/pointerevents2/#dom-element-setpointercapture)\n // says that the requirement for `setPointerCapture` to work is that pointer\n // must be in 'active buttons state`, otherwise it will fail silently, which\n // is lovely. Obviously, when `pointerdown` is fired, one of the buttons\n // (when using mouse) is pressed, but that doesn't mean that `setPointerCapture`\n // will succeed, for some reason. Since it fails silently, we don't actually know\n // if it worked or not (there's `gotpointercapture` event, but the complexity of\n // incorporating it here seems stupid), so we just call it again here, every time\n // pointer moves until it succeeds.\n // God, I do love web development.\n if (\n !target.hasPointerCapture(event.pointerId) &&\n !POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)\n ) {\n target.setPointerCapture(event.pointerId);\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n\n this.lastPosition.x = event.x;\n this.lastPosition.y = event.y;\n };\n\n private pointerCancelCallback = (event: PointerEvent) => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.CANCEL);\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n };\n\n private pointerEnterCallback = (event: PointerEvent) => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);\n\n this.onPointerMoveOver(adaptedEvent);\n };\n\n private pointerLeaveCallback = (event: PointerEvent) => {\n if (event.pointerType === PointerTypes.Touch) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);\n\n this.onPointerMoveOut(adaptedEvent);\n };\n\n private lostPointerCaptureCallback = (event: PointerEvent) => {\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.CANCEL);\n\n if (this.trackedPointers.has(adaptedEvent.pointerId)) {\n // in some cases the `pointerup` event is not fired, but `lostpointercapture` is\n // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it\n this.onPointerCancel(adaptedEvent);\n\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n }\n };\n\n public registerListeners(): void {\n this.view.addEventListener('pointerdown', this.pointerDownCallback);\n this.view.addEventListener('pointerup', this.pointerUpCallback);\n this.view.addEventListener('pointermove', this.pointerMoveCallback);\n this.view.addEventListener('pointercancel', this.pointerCancelCallback);\n\n // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for\n // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.\n // We therefore use pointerenter and pointerleave events to handle the hover gesture,\n // mapping them to onPointerMoveOver and onPointerMoveOut respectively.\n this.view.addEventListener('pointerenter', this.pointerEnterCallback);\n this.view.addEventListener('pointerleave', this.pointerLeaveCallback);\n this.view.addEventListener(\n 'lostpointercapture',\n this.lostPointerCaptureCallback\n );\n }\n\n public unregisterListeners(): void {\n this.view.removeEventListener('pointerdown', this.pointerDownCallback);\n this.view.removeEventListener('pointerup', this.pointerUpCallback);\n this.view.removeEventListener('pointermove', this.pointerMoveCallback);\n this.view.removeEventListener('pointercancel', this.pointerCancelCallback);\n this.view.removeEventListener('pointerenter', this.pointerEnterCallback);\n this.view.removeEventListener('pointerleave', this.pointerLeaveCallback);\n this.view.removeEventListener(\n 'lostpointercapture',\n this.lostPointerCaptureCallback\n );\n }\n\n protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent {\n return {\n x: event.clientX,\n y: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n pointerId: event.pointerId,\n eventType: eventType,\n pointerType:\n PointerTypeMapping.get(event.pointerType) ?? PointerType.OTHER,\n button: this.mouseButtonsMapper.get(event.button),\n time: event.timeStamp,\n };\n }\n\n public resetManager(): void {\n super.resetManager();\n this.trackedPointers.clear();\n }\n}\n"]}
@@ -1,10 +1,14 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
1
3
  import { EventTypes, TouchEventType } from '../interfaces';
2
4
  import EventManager from './EventManager';
3
5
  import { isPointerInBounds } from '../utils';
4
6
  import { PointerType } from '../../PointerType';
5
7
  export default class TouchEventManager extends EventManager {
6
- setListeners() {
7
- this.view.addEventListener('touchstart', event => {
8
+ constructor(...args) {
9
+ super(...args);
10
+
11
+ _defineProperty(this, "touchStartCallback", event => {
8
12
  for (let i = 0; i < event.changedTouches.length; ++i) {
9
13
  const adaptedEvent = this.mapEvent(event, EventTypes.DOWN, i, TouchEventType.DOWN); // Here we skip stylus, because in case of anything different than touch we want to handle it by using PointerEvents
10
14
  // If we leave stylus to send touch events, handlers will receive every action twice
@@ -27,7 +31,8 @@ export default class TouchEventManager extends EventManager {
27
31
  }
28
32
  }
29
33
  });
30
- this.view.addEventListener('touchmove', event => {
34
+
35
+ _defineProperty(this, "touchMoveCallback", event => {
31
36
  for (let i = 0; i < event.changedTouches.length; ++i) {
32
37
  const adaptedEvent = this.mapEvent(event, EventTypes.MOVE, i, TouchEventType.MOVE); //@ts-ignore touchType field does exist
33
38
 
@@ -60,7 +65,8 @@ export default class TouchEventManager extends EventManager {
60
65
  }
61
66
  }
62
67
  });
63
- this.view.addEventListener('touchend', event => {
68
+
69
+ _defineProperty(this, "touchEndCallback", event => {
64
70
  for (let i = 0; i < event.changedTouches.length; ++i) {
65
71
  // When we call reset on gesture handlers, it also resets their event managers
66
72
  // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view
@@ -86,7 +92,8 @@ export default class TouchEventManager extends EventManager {
86
92
  }
87
93
  }
88
94
  });
89
- this.view.addEventListener('touchcancel', event => {
95
+
96
+ _defineProperty(this, "touchCancelCallback", event => {
90
97
  for (let i = 0; i < event.changedTouches.length; ++i) {
91
98
  const adaptedEvent = this.mapEvent(event, EventTypes.CANCEL, i, TouchEventType.CANCELLED); //@ts-ignore touchType field does exist
92
99
 
@@ -101,6 +108,20 @@ export default class TouchEventManager extends EventManager {
101
108
  });
102
109
  }
103
110
 
111
+ registerListeners() {
112
+ this.view.addEventListener('touchstart', this.touchStartCallback);
113
+ this.view.addEventListener('touchmove', this.touchMoveCallback);
114
+ this.view.addEventListener('touchend', this.touchEndCallback);
115
+ this.view.addEventListener('touchcancel', this.touchCancelCallback);
116
+ }
117
+
118
+ unregisterListeners() {
119
+ this.view.removeEventListener('touchstart', this.touchStartCallback);
120
+ this.view.removeEventListener('touchmove', this.touchMoveCallback);
121
+ this.view.removeEventListener('touchend', this.touchEndCallback);
122
+ this.view.removeEventListener('touchcancel', this.touchCancelCallback);
123
+ }
124
+
104
125
  mapEvent(event, eventType, index, touchEventType) {
105
126
  const rect = this.view.getBoundingClientRect();
106
127
  const clientX = event.changedTouches[index].clientX;
@@ -1 +1 @@
1
- {"version":3,"sources":["TouchEventManager.ts"],"names":["EventTypes","TouchEventType","EventManager","isPointerInBounds","PointerType","TouchEventManager","setListeners","view","addEventListener","event","i","changedTouches","length","adaptedEvent","mapEvent","DOWN","x","y","touchType","markAsInBounds","pointerId","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","MOVE","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","LEAVE","onPointerLeave","markAsOutOfBounds","onPointerOutOfBounds","UP","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","CANCEL","CANCELLED","onPointerCancel","index","touchEventType","rect","getBoundingClientRect","clientX","clientY","offsetX","left","offsetY","top","identifier","pointerType","TOUCH","time","timeStamp","allTouches","touches"],"mappings":"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","sourcesContent":["import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';\nimport EventManager from './EventManager';\nimport { isPointerInBounds } from '../utils';\nimport { PointerType } from '../../PointerType';\n\nexport default class TouchEventManager extends EventManager<HTMLElement> {\n public setListeners(): void {\n this.view.addEventListener('touchstart', (event: TouchEvent) => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.DOWN,\n i,\n TouchEventType.DOWN\n );\n\n // Here we skip stylus, because in case of anything different than touch we want to handle it by using PointerEvents\n // If we leave stylus to send touch events, handlers will receive every action twice\n if (\n !isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n }) ||\n //@ts-ignore touchType field does exist\n event.changedTouches[i].touchType === 'stylus'\n ) {\n continue;\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('touchmove', (event: TouchEvent) => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.MOVE,\n i,\n TouchEventType.MOVE\n );\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n }\n });\n\n this.view.addEventListener('touchend', (event: TouchEvent) => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n break;\n }\n\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.UP,\n i,\n TouchEventType.UP\n );\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('touchcancel', (event: TouchEvent) => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL,\n i,\n TouchEventType.CANCELLED\n );\n\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n }\n });\n }\n\n protected mapEvent(\n event: TouchEvent,\n eventType: EventTypes,\n index: number,\n touchEventType: TouchEventType\n ): AdaptedEvent {\n const rect = this.view.getBoundingClientRect();\n const clientX = event.changedTouches[index].clientX;\n const clientY = event.changedTouches[index].clientY;\n\n return {\n x: clientX,\n y: clientY,\n offsetX: clientX - rect.left,\n offsetY: clientY - rect.top,\n pointerId: event.changedTouches[index].identifier,\n eventType: eventType,\n pointerType: PointerType.TOUCH,\n time: event.timeStamp,\n allTouches: event.touches,\n changedTouches: event.changedTouches,\n touchEventType: touchEventType,\n };\n }\n}\n"]}
1
+ {"version":3,"sources":["TouchEventManager.ts"],"names":["EventTypes","TouchEventType","EventManager","isPointerInBounds","PointerType","TouchEventManager","event","i","changedTouches","length","adaptedEvent","mapEvent","DOWN","view","x","y","touchType","markAsInBounds","pointerId","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","MOVE","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","LEAVE","onPointerLeave","markAsOutOfBounds","onPointerOutOfBounds","UP","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","CANCEL","CANCELLED","onPointerCancel","registerListeners","addEventListener","touchStartCallback","touchMoveCallback","touchEndCallback","touchCancelCallback","unregisterListeners","removeEventListener","index","touchEventType","rect","getBoundingClientRect","clientX","clientY","offsetX","left","offsetY","top","identifier","pointerType","TOUCH","time","timeStamp","allTouches","touches"],"mappings":"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","sourcesContent":["import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';\nimport EventManager from './EventManager';\nimport { isPointerInBounds } from '../utils';\nimport { PointerType } from '../../PointerType';\n\nexport default class TouchEventManager extends EventManager<HTMLElement> {\n private touchStartCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.DOWN,\n i,\n TouchEventType.DOWN\n );\n\n // Here we skip stylus, because in case of anything different than touch we want to handle it by using PointerEvents\n // If we leave stylus to send touch events, handlers will receive every action twice\n if (\n !isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n }) ||\n //@ts-ignore touchType field does exist\n event.changedTouches[i].touchType === 'stylus'\n ) {\n continue;\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n }\n };\n\n private touchMoveCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.MOVE,\n i,\n TouchEventType.MOVE\n );\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n }\n };\n\n private touchEndCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n break;\n }\n\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.UP,\n i,\n TouchEventType.UP\n );\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n }\n };\n\n private touchCancelCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL,\n i,\n TouchEventType.CANCELLED\n );\n\n //@ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n }\n };\n\n public registerListeners(): void {\n this.view.addEventListener('touchstart', this.touchStartCallback);\n this.view.addEventListener('touchmove', this.touchMoveCallback);\n this.view.addEventListener('touchend', this.touchEndCallback);\n this.view.addEventListener('touchcancel', this.touchCancelCallback);\n }\n\n public unregisterListeners(): void {\n this.view.removeEventListener('touchstart', this.touchStartCallback);\n this.view.removeEventListener('touchmove', this.touchMoveCallback);\n this.view.removeEventListener('touchend', this.touchEndCallback);\n this.view.removeEventListener('touchcancel', this.touchCancelCallback);\n }\n\n protected mapEvent(\n event: TouchEvent,\n eventType: EventTypes,\n index: number,\n touchEventType: TouchEventType\n ): AdaptedEvent {\n const rect = this.view.getBoundingClientRect();\n const clientX = event.changedTouches[index].clientX;\n const clientY = event.changedTouches[index].clientY;\n\n return {\n x: clientX,\n y: clientY,\n offsetX: clientX - rect.left,\n offsetY: clientY - rect.top,\n pointerId: event.changedTouches[index].identifier,\n eventType: eventType,\n pointerType: PointerType.TOUCH,\n time: event.timeStamp,\n allTouches: event.touches,\n changedTouches: event.changedTouches,\n touchEventType: touchEventType,\n };\n }\n}\n"]}
@@ -0,0 +1,47 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
3
+ import { DiagonalDirections, Directions } from '../../Directions';
4
+ import { MINIMAL_FLING_VELOCITY } from '../constants';
5
+ export default class Vector {
6
+ constructor(x, y) {
7
+ _defineProperty(this, "x", void 0);
8
+
9
+ _defineProperty(this, "y", void 0);
10
+
11
+ _defineProperty(this, "unitX", void 0);
12
+
13
+ _defineProperty(this, "unitY", void 0);
14
+
15
+ _defineProperty(this, "_magnitude", void 0);
16
+
17
+ this.x = x;
18
+ this.y = y;
19
+ this._magnitude = Math.hypot(this.x, this.y);
20
+ const isMagnitudeSufficient = this._magnitude > MINIMAL_FLING_VELOCITY;
21
+ this.unitX = isMagnitudeSufficient ? this.x / this._magnitude : 0;
22
+ this.unitY = isMagnitudeSufficient ? this.y / this._magnitude : 0;
23
+ }
24
+
25
+ static fromDirection(direction) {
26
+ return DirectionToVectorMappings.get(direction);
27
+ }
28
+
29
+ static fromVelocity(tracker, pointerId) {
30
+ return new Vector(tracker.getVelocityX(pointerId), tracker.getVelocityY(pointerId));
31
+ }
32
+
33
+ get magnitude() {
34
+ return this._magnitude;
35
+ }
36
+
37
+ computeSimilarity(vector) {
38
+ return this.unitX * vector.unitX + this.unitY * vector.unitY;
39
+ }
40
+
41
+ isSimilar(vector, threshold) {
42
+ return this.computeSimilarity(vector) > threshold;
43
+ }
44
+
45
+ }
46
+ const DirectionToVectorMappings = new Map([[Directions.LEFT, new Vector(-1, 0)], [Directions.RIGHT, new Vector(1, 0)], [Directions.UP, new Vector(0, -1)], [Directions.DOWN, new Vector(0, 1)], [DiagonalDirections.UP_RIGHT, new Vector(1, -1)], [DiagonalDirections.DOWN_RIGHT, new Vector(1, 1)], [DiagonalDirections.UP_LEFT, new Vector(-1, -1)], [DiagonalDirections.DOWN_LEFT, new Vector(-1, 1)]]);
47
+ //# sourceMappingURL=Vector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["Vector.ts"],"names":["DiagonalDirections","Directions","MINIMAL_FLING_VELOCITY","Vector","constructor","x","y","_magnitude","Math","hypot","isMagnitudeSufficient","unitX","unitY","fromDirection","direction","DirectionToVectorMappings","get","fromVelocity","tracker","pointerId","getVelocityX","getVelocityY","magnitude","computeSimilarity","vector","isSimilar","threshold","Map","LEFT","RIGHT","UP","DOWN","UP_RIGHT","DOWN_RIGHT","UP_LEFT","DOWN_LEFT"],"mappings":";;AAAA,SAASA,kBAAT,EAA6BC,UAA7B,QAA+C,kBAA/C;AACA,SAASC,sBAAT,QAAuC,cAAvC;AAGA,eAAe,MAAMC,MAAN,CAAa;AAO1BC,EAAAA,WAAW,CAACC,CAAD,EAAYC,CAAZ,EAAuB;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAChC,SAAKD,CAAL,GAASA,CAAT;AACA,SAAKC,CAAL,GAASA,CAAT;AAEA,SAAKC,UAAL,GAAkBC,IAAI,CAACC,KAAL,CAAW,KAAKJ,CAAhB,EAAmB,KAAKC,CAAxB,CAAlB;AACA,UAAMI,qBAAqB,GAAG,KAAKH,UAAL,GAAkBL,sBAAhD;AAEA,SAAKS,KAAL,GAAaD,qBAAqB,GAAG,KAAKL,CAAL,GAAS,KAAKE,UAAjB,GAA8B,CAAhE;AACA,SAAKK,KAAL,GAAaF,qBAAqB,GAAG,KAAKJ,CAAL,GAAS,KAAKC,UAAjB,GAA8B,CAAhE;AACD;;AAEmB,SAAbM,aAAa,CAACC,SAAD,EAAqD;AACvE,WAAOC,yBAAyB,CAACC,GAA1B,CAA8BF,SAA9B,CAAP;AACD;;AAEkB,SAAZG,YAAY,CAACC,OAAD,EAA0BC,SAA1B,EAA6C;AAC9D,WAAO,IAAIhB,MAAJ,CACLe,OAAO,CAACE,YAAR,CAAqBD,SAArB,CADK,EAELD,OAAO,CAACG,YAAR,CAAqBF,SAArB,CAFK,CAAP;AAID;;AAEY,MAATG,SAAS,GAAG;AACd,WAAO,KAAKf,UAAZ;AACD;;AAEDgB,EAAAA,iBAAiB,CAACC,MAAD,EAAiB;AAChC,WAAO,KAAKb,KAAL,GAAaa,MAAM,CAACb,KAApB,GAA4B,KAAKC,KAAL,GAAaY,MAAM,CAACZ,KAAvD;AACD;;AAEDa,EAAAA,SAAS,CAACD,MAAD,EAAiBE,SAAjB,EAAoC;AAC3C,WAAO,KAAKH,iBAAL,CAAuBC,MAAvB,IAAiCE,SAAxC;AACD;;AAvCyB;AA0C5B,MAAMX,yBAAyB,GAAG,IAAIY,GAAJ,CAGhC,CACA,CAAC1B,UAAU,CAAC2B,IAAZ,EAAkB,IAAIzB,MAAJ,CAAW,CAAC,CAAZ,EAAe,CAAf,CAAlB,CADA,EAEA,CAACF,UAAU,CAAC4B,KAAZ,EAAmB,IAAI1B,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAnB,CAFA,EAGA,CAACF,UAAU,CAAC6B,EAAZ,EAAgB,IAAI3B,MAAJ,CAAW,CAAX,EAAc,CAAC,CAAf,CAAhB,CAHA,EAIA,CAACF,UAAU,CAAC8B,IAAZ,EAAkB,IAAI5B,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAlB,CAJA,EAMA,CAACH,kBAAkB,CAACgC,QAApB,EAA8B,IAAI7B,MAAJ,CAAW,CAAX,EAAc,CAAC,CAAf,CAA9B,CANA,EAOA,CAACH,kBAAkB,CAACiC,UAApB,EAAgC,IAAI9B,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAhC,CAPA,EAQA,CAACH,kBAAkB,CAACkC,OAApB,EAA6B,IAAI/B,MAAJ,CAAW,CAAC,CAAZ,EAAe,CAAC,CAAhB,CAA7B,CARA,EASA,CAACH,kBAAkB,CAACmC,SAApB,EAA+B,IAAIhC,MAAJ,CAAW,CAAC,CAAZ,EAAe,CAAf,CAA/B,CATA,CAHgC,CAAlC","sourcesContent":["import { DiagonalDirections, Directions } from '../../Directions';\nimport { MINIMAL_FLING_VELOCITY } from '../constants';\nimport PointerTracker from './PointerTracker';\n\nexport default class Vector {\n private readonly x;\n private readonly y;\n private readonly unitX;\n private readonly unitY;\n private readonly _magnitude;\n\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n\n this._magnitude = Math.hypot(this.x, this.y);\n const isMagnitudeSufficient = this._magnitude > MINIMAL_FLING_VELOCITY;\n\n this.unitX = isMagnitudeSufficient ? this.x / this._magnitude : 0;\n this.unitY = isMagnitudeSufficient ? this.y / this._magnitude : 0;\n }\n\n static fromDirection(direction: Directions | DiagonalDirections): Vector {\n return DirectionToVectorMappings.get(direction)!;\n }\n\n static fromVelocity(tracker: PointerTracker, pointerId: number) {\n return new Vector(\n tracker.getVelocityX(pointerId),\n tracker.getVelocityY(pointerId)\n );\n }\n\n get magnitude() {\n return this._magnitude;\n }\n\n computeSimilarity(vector: Vector) {\n return this.unitX * vector.unitX + this.unitY * vector.unitY;\n }\n\n isSimilar(vector: Vector, threshold: number) {\n return this.computeSimilarity(vector) > threshold;\n }\n}\n\nconst DirectionToVectorMappings = new Map<\n Directions | DiagonalDirections,\n Vector\n>([\n [Directions.LEFT, new Vector(-1, 0)],\n [Directions.RIGHT, new Vector(1, 0)],\n [Directions.UP, new Vector(0, -1)],\n [Directions.DOWN, new Vector(0, 1)],\n\n [DiagonalDirections.UP_RIGHT, new Vector(1, -1)],\n [DiagonalDirections.DOWN_RIGHT, new Vector(1, 1)],\n [DiagonalDirections.UP_LEFT, new Vector(-1, -1)],\n [DiagonalDirections.DOWN_LEFT, new Vector(-1, 1)],\n]);\n"]}
@@ -7,4 +7,6 @@ export function isPointerInBounds(view, {
7
7
  return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
8
8
  }
9
9
  export const PointerTypeMapping = new Map([['mouse', PointerType.MOUSE], ['touch', PointerType.TOUCH], ['pen', PointerType.STYLUS], ['none', PointerType.OTHER]]);
10
+ export const degToRad = degrees => degrees * Math.PI / 180;
11
+ export const coneToDeviation = degrees => Math.cos(degToRad(degrees / 2));
10
12
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["utils.ts"],"names":["PointerType","isPointerInBounds","view","x","y","rect","getBoundingClientRect","left","right","top","bottom","PointerTypeMapping","Map","MOUSE","TOUCH","STYLUS","OTHER"],"mappings":"AAAA,SAASA,WAAT,QAA4B,gBAA5B;AAEA,OAAO,SAASC,iBAAT,CACLC,IADK,EAEL;AAAEC,EAAAA,CAAF;AAAKC,EAAAA;AAAL,CAFK,EAGI;AACT,QAAMC,IAAa,GAAGH,IAAI,CAACI,qBAAL,EAAtB;AAEA,SAAOH,CAAC,IAAIE,IAAI,CAACE,IAAV,IAAkBJ,CAAC,IAAIE,IAAI,CAACG,KAA5B,IAAqCJ,CAAC,IAAIC,IAAI,CAACI,GAA/C,IAAsDL,CAAC,IAAIC,IAAI,CAACK,MAAvE;AACD;AAED,OAAO,MAAMC,kBAAkB,GAAG,IAAIC,GAAJ,CAA6B,CAC7D,CAAC,OAAD,EAAUZ,WAAW,CAACa,KAAtB,CAD6D,EAE7D,CAAC,OAAD,EAAUb,WAAW,CAACc,KAAtB,CAF6D,EAG7D,CAAC,KAAD,EAAQd,WAAW,CAACe,MAApB,CAH6D,EAI7D,CAAC,MAAD,EAASf,WAAW,CAACgB,KAArB,CAJ6D,CAA7B,CAA3B","sourcesContent":["import { PointerType } from '../PointerType';\n\nexport function isPointerInBounds(\n view: HTMLElement,\n { x, y }: { x: number; y: number }\n): boolean {\n const rect: DOMRect = view.getBoundingClientRect();\n\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n}\n\nexport const PointerTypeMapping = new Map<string, PointerType>([\n ['mouse', PointerType.MOUSE],\n ['touch', PointerType.TOUCH],\n ['pen', PointerType.STYLUS],\n ['none', PointerType.OTHER],\n]);\n"]}
1
+ {"version":3,"sources":["utils.ts"],"names":["PointerType","isPointerInBounds","view","x","y","rect","getBoundingClientRect","left","right","top","bottom","PointerTypeMapping","Map","MOUSE","TOUCH","STYLUS","OTHER","degToRad","degrees","Math","PI","coneToDeviation","cos"],"mappings":"AAAA,SAASA,WAAT,QAA4B,gBAA5B;AAGA,OAAO,SAASC,iBAAT,CAA2BC,IAA3B,EAA8C;AAAEC,EAAAA,CAAF;AAAKC,EAAAA;AAAL,CAA9C,EAAwE;AAC7E,QAAMC,IAAa,GAAGH,IAAI,CAACI,qBAAL,EAAtB;AAEA,SAAOH,CAAC,IAAIE,IAAI,CAACE,IAAV,IAAkBJ,CAAC,IAAIE,IAAI,CAACG,KAA5B,IAAqCJ,CAAC,IAAIC,IAAI,CAACI,GAA/C,IAAsDL,CAAC,IAAIC,IAAI,CAACK,MAAvE;AACD;AAED,OAAO,MAAMC,kBAAkB,GAAG,IAAIC,GAAJ,CAA6B,CAC7D,CAAC,OAAD,EAAUZ,WAAW,CAACa,KAAtB,CAD6D,EAE7D,CAAC,OAAD,EAAUb,WAAW,CAACc,KAAtB,CAF6D,EAG7D,CAAC,KAAD,EAAQd,WAAW,CAACe,MAApB,CAH6D,EAI7D,CAAC,MAAD,EAASf,WAAW,CAACgB,KAArB,CAJ6D,CAA7B,CAA3B;AAOP,OAAO,MAAMC,QAAQ,GAAIC,OAAD,IAAsBA,OAAO,GAAGC,IAAI,CAACC,EAAhB,GAAsB,GAA5D;AAEP,OAAO,MAAMC,eAAe,GAAIH,OAAD,IAC7BC,IAAI,CAACG,GAAL,CAASL,QAAQ,CAACC,OAAO,GAAG,CAAX,CAAjB,CADK","sourcesContent":["import { PointerType } from '../PointerType';\nimport { Point } from './interfaces';\n\nexport function isPointerInBounds(view: HTMLElement, { x, y }: Point): boolean {\n const rect: DOMRect = view.getBoundingClientRect();\n\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n}\n\nexport const PointerTypeMapping = new Map<string, PointerType>([\n ['mouse', PointerType.MOUSE],\n ['touch', PointerType.TOUCH],\n ['pen', PointerType.STYLUS],\n ['none', PointerType.OTHER],\n]);\n\nexport const degToRad = (degrees: number) => (degrees * Math.PI) / 180;\n\nexport const coneToDeviation = (degrees: number) =>\n Math.cos(degToRad(degrees / 2));\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["NodeManager.ts"],"names":["gestures","getHandler","tag","Error","createGestureHandler","handlerTag","handler","dropGestureHandler","destroy","getNodes"],"mappings":"AAGA,MAAMA,QAGL,GAAG,EAHJ;AAKA,OAAO,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;AAED,OAAO,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;AAED,OAAO,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;AAED,OAAO,SAASI,QAAT,GAAoB;AACzB,SAAO,EAAE,GAAGT;AAAL,GAAP;AACD","sourcesContent":["import { ValueOf } from '../typeUtils';\nimport { HammerGestures } from '../RNGestureHandlerModule.web';\n\nconst gestures: Record<\n number,\n InstanceType<ValueOf<typeof HammerGestures>>\n> = {};\n\nexport function getHandler(tag: number) {\n if (tag in gestures) {\n return gestures[tag];\n }\n\n throw new Error(`No handler for tag ${tag}`);\n}\n\nexport function createGestureHandler(\n handlerTag: number,\n handler: InstanceType<ValueOf<typeof HammerGestures>>\n) {\n if (handlerTag in gestures) {\n throw new Error(`Handler with tag ${handlerTag} already exists`);\n }\n gestures[handlerTag] = handler;\n // @ts-ignore no types for web handlers yet\n gestures[handlerTag].handlerTag = handlerTag;\n}\n\nexport function dropGestureHandler(handlerTag: number) {\n // Since React 18, there are cases where componentWillUnmount gets called twice in a row\n // so skip this if the tag was already removed.\n if (!(handlerTag in gestures)) {\n return;\n }\n getHandler(handlerTag).destroy();\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete gestures[handlerTag];\n}\n\nexport function getNodes() {\n return { ...gestures };\n}\n"]}
1
+ {"version":3,"sources":["NodeManager.ts"],"names":["gestures","getHandler","tag","Error","createGestureHandler","handlerTag","handler","dropGestureHandler","destroy","getNodes"],"mappings":"AAGA,MAAMA,QAGL,GAAG,EAHJ;AAKA,OAAO,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;AAED,OAAO,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;AAED,OAAO,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;AAED,OAAO,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"]}
@@ -4,4 +4,11 @@ export declare const Directions: {
4
4
  readonly UP: 4;
5
5
  readonly DOWN: 8;
6
6
  };
7
+ export declare const DiagonalDirections: {
8
+ readonly UP_RIGHT: number;
9
+ readonly DOWN_RIGHT: number;
10
+ readonly UP_LEFT: number;
11
+ readonly DOWN_LEFT: number;
12
+ };
7
13
  export type Directions = typeof Directions[keyof typeof Directions];
14
+ export type DiagonalDirections = typeof DiagonalDirections[keyof typeof DiagonalDirections];
@@ -1,49 +1,14 @@
1
1
  import React from 'react';
2
- import { ActionType } from './ActionType';
3
- import PanGestureHandler from './web/handlers/PanGestureHandler';
4
- import TapGestureHandler from './web/handlers/TapGestureHandler';
5
- import LongPressGestureHandler from './web/handlers/LongPressGestureHandler';
6
- import PinchGestureHandler from './web/handlers/PinchGestureHandler';
7
- import RotationGestureHandler from './web/handlers/RotationGestureHandler';
8
- import FlingGestureHandler from './web/handlers/FlingGestureHandler';
9
- import NativeViewGestureHandler from './web/handlers/NativeViewGestureHandler';
10
- import ManualGestureHandler from './web/handlers/ManualGestureHandler';
11
- import HoverGestureHandler from './web/handlers/HoverGestureHandler';
12
- import HammerNativeViewGestureHandler from './web_hammer/NativeViewGestureHandler';
13
- import HammerPanGestureHandler from './web_hammer/PanGestureHandler';
14
- import HammerTapGestureHandler from './web_hammer/TapGestureHandler';
15
- import HammerLongPressGestureHandler from './web_hammer/LongPressGestureHandler';
16
- import HammerPinchGestureHandler from './web_hammer/PinchGestureHandler';
17
- import HammerRotationGestureHandler from './web_hammer/RotationGestureHandler';
18
- import HammerFlingGestureHandler from './web_hammer/FlingGestureHandler';
19
- import { Config } from './web/interfaces';
20
- export declare const Gestures: {
21
- NativeViewGestureHandler: typeof NativeViewGestureHandler;
22
- PanGestureHandler: typeof PanGestureHandler;
23
- TapGestureHandler: typeof TapGestureHandler;
24
- LongPressGestureHandler: typeof LongPressGestureHandler;
25
- PinchGestureHandler: typeof PinchGestureHandler;
26
- RotationGestureHandler: typeof RotationGestureHandler;
27
- FlingGestureHandler: typeof FlingGestureHandler;
28
- ManualGestureHandler: typeof ManualGestureHandler;
29
- HoverGestureHandler: typeof HoverGestureHandler;
30
- };
31
- export declare const HammerGestures: {
32
- NativeViewGestureHandler: typeof HammerNativeViewGestureHandler;
33
- PanGestureHandler: typeof HammerPanGestureHandler;
34
- TapGestureHandler: typeof HammerTapGestureHandler;
35
- LongPressGestureHandler: typeof HammerLongPressGestureHandler;
36
- PinchGestureHandler: typeof HammerPinchGestureHandler;
37
- RotationGestureHandler: typeof HammerRotationGestureHandler;
38
- FlingGestureHandler: typeof HammerFlingGestureHandler;
39
- };
2
+ import type { ActionType } from './ActionType';
3
+ import { Gestures } from './web/Gestures';
4
+ import type { Config } from './web/interfaces';
40
5
  declare const _default: {
41
6
  handleSetJSResponder(tag: number, blockNativeResponder: boolean): void;
42
7
  handleClearJSResponder(): void;
43
8
  createGestureHandler<T>(handlerName: keyof typeof Gestures, handlerTag: number, config: T): void;
44
9
  attachGestureHandler(handlerTag: number, newView: any, _actionType: ActionType, propsRef: React.RefObject<unknown>): void;
45
10
  updateGestureHandler(handlerTag: number, newConfig: Config): void;
46
- getGestureHandlerNode(handlerTag: number): NativeViewGestureHandler | PanGestureHandler | TapGestureHandler | LongPressGestureHandler | PinchGestureHandler | RotationGestureHandler | FlingGestureHandler | ManualGestureHandler | HoverGestureHandler | HammerNativeViewGestureHandler | HammerPanGestureHandler | HammerTapGestureHandler | HammerLongPressGestureHandler | HammerPinchGestureHandler | HammerRotationGestureHandler | HammerFlingGestureHandler;
11
+ getGestureHandlerNode(handlerTag: number): import("./web/handlers/IGestureHandler").default | import("./web_hammer/NativeViewGestureHandler").default | import("./web_hammer/PanGestureHandler").default | import("./web_hammer/TapGestureHandler").default | import("./web_hammer/LongPressGestureHandler").default | import("./web_hammer/PinchGestureHandler").default | import("./web_hammer/RotationGestureHandler").default | import("./web_hammer/FlingGestureHandler").default;
47
12
  dropGestureHandler(handlerTag: number): void;
48
13
  flushOperations(): void;
49
14
  };
@@ -1,9 +1,8 @@
1
1
  import * as React from 'react';
2
2
  import { Component } from 'react';
3
3
  import { Animated, StatusBarAnimation, StyleProp, ViewStyle } from 'react-native';
4
- import { UserSelect, ActiveCursor } from '../handlers/gestureHandlerCommon';
4
+ import { UserSelect, ActiveCursor, MouseButton } from '../handlers/gestureHandlerCommon';
5
5
  import { PanGestureHandler } from '../handlers/PanGestureHandler';
6
- import { MouseButton } from '../web/interfaces';
7
6
  export type DrawerPosition = 'left' | 'right';
8
7
  export type DrawerState = 'Idle' | 'Dragging' | 'Settling';
9
8
  export type DrawerType = 'front' | 'back' | 'slide';
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { Component } from 'react';
3
3
  import { StyleProp, ViewStyle, TouchableWithoutFeedbackProps, Insets } from 'react-native';
4
- import { GestureEvent, HandlerStateChangeEvent } from '../../handlers/gestureHandlerCommon';
4
+ import { GestureEvent, HandlerStateChangeEvent, UserSelect } from '../../handlers/gestureHandlerCommon';
5
5
  import { NativeViewGestureHandlerPayload } from '../../handlers/NativeViewGestureHandler';
6
6
  import { TouchableNativeFeedbackExtraProps } from './TouchableNativeFeedback.android';
7
7
  /**
@@ -27,6 +27,7 @@ export interface GenericTouchableProps extends Omit<TouchableWithoutFeedbackProp
27
27
  disallowInterruption?: boolean;
28
28
  containerStyle?: StyleProp<ViewStyle>;
29
29
  hitSlop?: Insets | number;
30
+ userSelect?: UserSelect;
30
31
  }
31
32
  interface InternalProps {
32
33
  extraButtonProps: TouchableNativeFeedbackExtraProps;
@@ -22,7 +22,7 @@ export type NativeViewGestureHandlerPayload = {
22
22
  */
23
23
  pointerInside: boolean;
24
24
  };
25
- export declare const nativeViewProps: readonly ["id", "enabled", "shouldCancelWhenOutside", "hitSlop", "cancelsTouchesInView", "userSelect", "activeCursor", "mouseButton", "enableContextMenu", "waitFor", "simultaneousHandlers", "blocksHandlers", "onBegan", "onFailed", "onCancelled", "onActivated", "onEnded", "onGestureEvent", "onHandlerStateChange", "shouldActivateOnStart", "disallowInterruption"];
25
+ export declare const nativeViewProps: readonly ["id", "enabled", "shouldCancelWhenOutside", "hitSlop", "cancelsTouchesInView", "userSelect", "activeCursor", "mouseButton", "enableContextMenu", "touchAction", "waitFor", "simultaneousHandlers", "blocksHandlers", "onBegan", "onFailed", "onCancelled", "onActivated", "onEnded", "onGestureEvent", "onHandlerStateChange", "shouldActivateOnStart", "disallowInterruption"];
26
26
  export declare const nativeViewHandlerName = "NativeViewGestureHandler";
27
27
  export type NativeViewGestureHandler = typeof NativeViewGestureHandler;
28
28
  export declare const NativeViewGestureHandler: import("react").ComponentType<NativeViewGestureHandlerProps & import("react").RefAttributes<any>>;
@@ -0,0 +1 @@
1
+ export { customDirectEventTypes } from 'react-native/Libraries/Renderer/shims/ReactNativeViewConfigRegistry';
@@ -0,0 +1,2 @@
1
+ declare const customDirectEventTypes: {};
2
+ export { customDirectEventTypes };
@@ -2,9 +2,8 @@ import * as React from 'react';
2
2
  import { State } from '../State';
3
3
  import { TouchEventType } from '../TouchEventType';
4
4
  import { ValueOf } from '../typeUtils';
5
- import { MouseButton } from '../web/interfaces';
6
5
  import { PointerType } from '../PointerType';
7
- export declare const baseGestureHandlerProps: readonly ["id", "enabled", "shouldCancelWhenOutside", "hitSlop", "cancelsTouchesInView", "userSelect", "activeCursor", "mouseButton", "enableContextMenu", "waitFor", "simultaneousHandlers", "blocksHandlers", "onBegan", "onFailed", "onCancelled", "onActivated", "onEnded", "onGestureEvent", "onHandlerStateChange"];
6
+ export declare const baseGestureHandlerProps: readonly ["id", "enabled", "shouldCancelWhenOutside", "hitSlop", "cancelsTouchesInView", "userSelect", "activeCursor", "mouseButton", "enableContextMenu", "touchAction", "waitFor", "simultaneousHandlers", "blocksHandlers", "onBegan", "onFailed", "onCancelled", "onActivated", "onEnded", "onGestureEvent", "onHandlerStateChange"];
8
7
  export declare const baseGestureHandlerWithMonitorProps: string[];
9
8
  export interface GestureEventPayload {
10
9
  handlerTag: number;
@@ -18,6 +17,15 @@ export interface HandlerStateChangeEventPayload extends GestureEventPayload {
18
17
  export type HitSlop = number | Partial<Record<'left' | 'right' | 'top' | 'bottom' | 'vertical' | 'horizontal', number>> | Record<'width' | 'left', number> | Record<'width' | 'right', number> | Record<'height' | 'top', number> | Record<'height' | 'bottom', number>;
19
18
  export type UserSelect = 'none' | 'auto' | 'text';
20
19
  export type ActiveCursor = 'auto' | 'default' | 'none' | 'context-menu' | 'help' | 'pointer' | 'progress' | 'wait' | 'cell' | 'crosshair' | 'text' | 'vertical-text' | 'alias' | 'copy' | 'move' | 'no-drop' | 'not-allowed' | 'grab' | 'grabbing' | 'e-resize' | 'n-resize' | 'ne-resize' | 'nw-resize' | 's-resize' | 'se-resize' | 'sw-resize' | 'w-resize' | 'ew-resize' | 'ns-resize' | 'nesw-resize' | 'nwse-resize' | 'col-resize' | 'row-resize' | 'all-scroll' | 'zoom-in' | 'zoom-out';
20
+ export declare enum MouseButton {
21
+ LEFT = 1,
22
+ RIGHT = 2,
23
+ MIDDLE = 4,
24
+ BUTTON_4 = 8,
25
+ BUTTON_5 = 16,
26
+ ALL = 31
27
+ }
28
+ export type TouchAction = 'auto' | 'none' | 'pan-x' | 'pan-left' | 'pan-right' | 'pan-y' | 'pan-up' | 'pan-down' | 'pinch-zoom' | 'manipulation' | 'inherit' | 'initial' | 'revert' | 'revert-layer' | 'unset';
21
29
  export interface GestureEvent<ExtraEventPayloadT = Record<string, unknown>> {
22
30
  nativeEvent: Readonly<GestureEventPayload & ExtraEventPayloadT>;
23
31
  }
@@ -49,6 +57,7 @@ export type CommonGestureConfig = {
49
57
  activeCursor?: ActiveCursor;
50
58
  mouseButton?: MouseButton;
51
59
  enableContextMenu?: boolean;
60
+ touchAction?: TouchAction;
52
61
  };
53
62
  export type BaseGestureHandlerProps<ExtraEventPayloadT extends Record<string, unknown> = Record<string, unknown>> = CommonGestureConfig & {
54
63
  id?: string;