@hanzogui/react-native-use-responder-events 8.3.1 → 8.3.2

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 (95) hide show
  1. package/dist/cjs/ResponderSystem.js +444 -0
  2. package/dist/cjs/ResponderSystem.js.map +1 -0
  3. package/dist/cjs/ResponderTouchHistoryStore.js +175 -0
  4. package/dist/cjs/ResponderTouchHistoryStore.js.map +1 -0
  5. package/dist/cjs/createResponderEvent.js +151 -0
  6. package/dist/cjs/createResponderEvent.js.map +1 -0
  7. package/dist/cjs/index.js +5 -0
  8. package/dist/cjs/index.js.map +1 -0
  9. package/dist/cjs/package.json +1 -0
  10. package/dist/cjs/types.js +47 -0
  11. package/dist/cjs/types.js.map +1 -0
  12. package/dist/cjs/useResponderEvents.js +81 -0
  13. package/dist/cjs/useResponderEvents.js.map +1 -0
  14. package/dist/cjs/utils.js +182 -0
  15. package/dist/cjs/utils.js.map +1 -0
  16. package/dist/esm/ResponderSystem.js +437 -0
  17. package/dist/esm/ResponderSystem.js.map +1 -0
  18. package/dist/esm/ResponderTouchHistoryStore.js +171 -0
  19. package/dist/esm/ResponderTouchHistoryStore.js.map +1 -0
  20. package/dist/esm/createResponderEvent.js +148 -0
  21. package/dist/esm/createResponderEvent.js.map +1 -0
  22. package/dist/esm/index.js +2 -2
  23. package/dist/esm/index.js.map +1 -1
  24. package/dist/esm/types.js +38 -0
  25. package/dist/esm/types.js.map +1 -0
  26. package/dist/esm/useResponderEvents.js +76 -0
  27. package/dist/esm/useResponderEvents.js.map +1 -0
  28. package/dist/esm/utils.js +171 -0
  29. package/dist/esm/utils.js.map +1 -0
  30. package/package.json +18 -13
  31. package/src/ResponderSystem.ts +6 -6
  32. package/src/ResponderTouchHistoryStore.ts +2 -2
  33. package/src/createResponderEvent.ts +2 -2
  34. package/src/index.ts +1 -1
  35. package/src/useResponderEvents.ts +2 -2
  36. package/types/ResponderSystem.d.ts +1 -1
  37. package/types/ResponderSystem.d.ts.map +1 -1
  38. package/types/ResponderTouchHistoryStore.d.ts +1 -1
  39. package/types/ResponderTouchHistoryStore.d.ts.map +1 -1
  40. package/types/createResponderEvent.d.ts +1 -1
  41. package/types/createResponderEvent.d.ts.map +1 -1
  42. package/types/index.d.ts +1 -1
  43. package/types/index.d.ts.map +1 -1
  44. package/types/useResponderEvents.d.ts +2 -2
  45. package/types/useResponderEvents.d.ts.map +1 -1
  46. package/types/utils.d.ts.map +1 -1
  47. package/dist/cjs/ResponderSystem.cjs +0 -392
  48. package/dist/cjs/ResponderSystem.native.js +0 -395
  49. package/dist/cjs/ResponderSystem.native.js.map +0 -1
  50. package/dist/cjs/ResponderTouchHistoryStore.cjs +0 -179
  51. package/dist/cjs/ResponderTouchHistoryStore.native.js +0 -232
  52. package/dist/cjs/ResponderTouchHistoryStore.native.js.map +0 -1
  53. package/dist/cjs/createResponderEvent.cjs +0 -149
  54. package/dist/cjs/createResponderEvent.native.js +0 -152
  55. package/dist/cjs/createResponderEvent.native.js.map +0 -1
  56. package/dist/cjs/index.cjs +0 -20
  57. package/dist/cjs/index.native.js +0 -23
  58. package/dist/cjs/index.native.js.map +0 -1
  59. package/dist/cjs/types.cjs +0 -78
  60. package/dist/cjs/types.native.js +0 -81
  61. package/dist/cjs/types.native.js.map +0 -1
  62. package/dist/cjs/useResponderEvents.cjs +0 -107
  63. package/dist/cjs/useResponderEvents.native.js +0 -113
  64. package/dist/cjs/useResponderEvents.native.js.map +0 -1
  65. package/dist/cjs/utils.cjs +0 -169
  66. package/dist/cjs/utils.native.js +0 -173
  67. package/dist/cjs/utils.native.js.map +0 -1
  68. package/dist/esm/ResponderSystem.mjs +0 -363
  69. package/dist/esm/ResponderSystem.mjs.map +0 -1
  70. package/dist/esm/ResponderSystem.native.js +0 -363
  71. package/dist/esm/ResponderSystem.native.js.map +0 -1
  72. package/dist/esm/ResponderTouchHistoryStore.mjs +0 -154
  73. package/dist/esm/ResponderTouchHistoryStore.mjs.map +0 -1
  74. package/dist/esm/ResponderTouchHistoryStore.native.js +0 -204
  75. package/dist/esm/ResponderTouchHistoryStore.native.js.map +0 -1
  76. package/dist/esm/createResponderEvent.mjs +0 -124
  77. package/dist/esm/createResponderEvent.mjs.map +0 -1
  78. package/dist/esm/createResponderEvent.native.js +0 -124
  79. package/dist/esm/createResponderEvent.native.js.map +0 -1
  80. package/dist/esm/index.mjs +0 -2
  81. package/dist/esm/index.mjs.map +0 -1
  82. package/dist/esm/index.native.js +0 -2
  83. package/dist/esm/index.native.js.map +0 -1
  84. package/dist/esm/types.mjs +0 -34
  85. package/dist/esm/types.mjs.map +0 -1
  86. package/dist/esm/types.native.js +0 -34
  87. package/dist/esm/types.native.js.map +0 -1
  88. package/dist/esm/useResponderEvents.mjs +0 -69
  89. package/dist/esm/useResponderEvents.mjs.map +0 -1
  90. package/dist/esm/useResponderEvents.native.js +0 -72
  91. package/dist/esm/useResponderEvents.native.js.map +0 -1
  92. package/dist/esm/utils.mjs +0 -136
  93. package/dist/esm/utils.mjs.map +0 -1
  94. package/dist/esm/utils.native.js +0 -137
  95. package/dist/esm/utils.native.js.map +0 -1
@@ -0,0 +1,444 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Nicolas Gallagher
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.attachListeners = attachListeners;
9
+ exports.addNode = addNode;
10
+ exports.removeNode = removeNode;
11
+ exports.terminateResponder = terminateResponder;
12
+ exports.getResponderNode = getResponderNode;
13
+ const createResponderEvent_ts_1 = require("./createResponderEvent.js");
14
+ const ResponderTouchHistoryStore_ts_1 = require("./ResponderTouchHistoryStore.js");
15
+ const types_ts_1 = require("./types.js");
16
+ const utils_ts_1 = require("./utils.js");
17
+ const utils_ts_2 = require("./utils.js");
18
+ const emptyObject = {};
19
+ /* ------------ IMPLEMENTATION ------------ */
20
+ const startRegistration = [
21
+ 'onStartShouldSetResponderCapture',
22
+ 'onStartShouldSetResponder',
23
+ { bubbles: true },
24
+ ];
25
+ const moveRegistration = [
26
+ 'onMoveShouldSetResponderCapture',
27
+ 'onMoveShouldSetResponder',
28
+ { bubbles: true },
29
+ ];
30
+ const scrollRegistration = [
31
+ 'onScrollShouldSetResponderCapture',
32
+ 'onScrollShouldSetResponder',
33
+ { bubbles: false },
34
+ ];
35
+ const shouldSetResponderEvents = {
36
+ touchstart: startRegistration,
37
+ mousedown: startRegistration,
38
+ touchmove: moveRegistration,
39
+ mousemove: moveRegistration,
40
+ scroll: scrollRegistration,
41
+ };
42
+ const emptyResponder = { id: null, idPath: null, node: null };
43
+ const responderListenersMap = new Map();
44
+ let isEmulatingMouseEvents = false;
45
+ let trackedTouchCount = 0;
46
+ let currentResponder = {
47
+ id: null,
48
+ node: null,
49
+ idPath: null,
50
+ };
51
+ const responderTouchHistoryStore = new ResponderTouchHistoryStore_ts_1.ResponderTouchHistoryStore();
52
+ function changeCurrentResponder(responder) {
53
+ currentResponder = responder;
54
+ }
55
+ function getResponderConfig(id) {
56
+ const config = responderListenersMap.get(id);
57
+ return config != null ? config : emptyObject;
58
+ }
59
+ /**
60
+ * Process native events
61
+ *
62
+ * A single event listener is used to manage the responder system.
63
+ * All pointers are tracked in the ResponderTouchHistoryStore. Native events
64
+ * are interpreted in terms of the Responder System and checked to see if
65
+ * the responder should be transferred. Each host node that is attached to
66
+ * the Responder System has an ID, which is used to look up its associated
67
+ * callbacks.
68
+ */
69
+ function eventListener(domEvent) {
70
+ const eventType = domEvent.type;
71
+ const eventTarget = domEvent.target;
72
+ /**
73
+ * Manage emulated events and early bailout.
74
+ * Since PointerEvent is not used yet (lack of support in older Safari), it's
75
+ * necessary to manually manage the mess of browser touch/mouse events.
76
+ * And bailout early for termination events when there is no active responder.
77
+ */
78
+ // Flag when browser may produce emulated events
79
+ if (eventType === 'touchstart') {
80
+ isEmulatingMouseEvents = true;
81
+ }
82
+ // Remove flag when browser will not produce emulated events
83
+ if (eventType === 'touchmove' || trackedTouchCount > 1) {
84
+ isEmulatingMouseEvents = false;
85
+ }
86
+ // Ignore various events in particular circumstances
87
+ if (
88
+ // Ignore browser emulated mouse events
89
+ (eventType === 'mousedown' && isEmulatingMouseEvents) ||
90
+ (eventType === 'mousemove' && isEmulatingMouseEvents) ||
91
+ // Ignore mousemove if a mousedown didn't occur first
92
+ (eventType === 'mousemove' && trackedTouchCount < 1)) {
93
+ return;
94
+ }
95
+ // Remove flag after emulated events are finished
96
+ if (isEmulatingMouseEvents && eventType === 'mouseup') {
97
+ if (trackedTouchCount === 0) {
98
+ isEmulatingMouseEvents = false;
99
+ }
100
+ return;
101
+ }
102
+ const isStartEvent = (0, types_ts_1.isStartish)(eventType) && (0, utils_ts_2.isPrimaryPointerDown)(domEvent);
103
+ const isMoveEvent = (0, types_ts_1.isMoveish)(eventType);
104
+ const isEndEvent = (0, types_ts_1.isEndish)(eventType);
105
+ const isScrollEvent = (0, types_ts_1.isScroll)(eventType);
106
+ const isSelectionChangeEvent = (0, types_ts_1.isSelectionChange)(eventType);
107
+ const responderEvent = (0, createResponderEvent_ts_1.createResponderEvent)(domEvent, responderTouchHistoryStore);
108
+ /**
109
+ * Record the state of active pointers
110
+ */
111
+ if (isStartEvent || isMoveEvent || isEndEvent) {
112
+ if (domEvent.touches) {
113
+ trackedTouchCount = domEvent.touches.length;
114
+ }
115
+ else {
116
+ if (isStartEvent) {
117
+ trackedTouchCount = 1;
118
+ }
119
+ else if (isEndEvent) {
120
+ trackedTouchCount = 0;
121
+ }
122
+ }
123
+ responderTouchHistoryStore.recordTouchTrack(eventType, responderEvent.nativeEvent);
124
+ }
125
+ /**
126
+ * Responder System logic
127
+ */
128
+ let eventPaths = (0, utils_ts_2.getResponderPaths)(domEvent);
129
+ let wasNegotiated = false;
130
+ let wantsResponder;
131
+ // If an event occured that might change the current responder...
132
+ if (isStartEvent || isMoveEvent || (isScrollEvent && trackedTouchCount > 0)) {
133
+ // If there is already a responder, prune the event paths to the lowest common ancestor
134
+ // of the existing responder and deepest target of the event.
135
+ const currentResponderIdPath = currentResponder.idPath;
136
+ const eventIdPath = eventPaths.idPath;
137
+ if (currentResponderIdPath != null && eventIdPath != null) {
138
+ const lowestCommonAncestor = (0, utils_ts_2.getLowestCommonAncestor)(currentResponderIdPath, eventIdPath);
139
+ if (lowestCommonAncestor != null) {
140
+ const indexOfLowestCommonAncestor = eventIdPath.indexOf(lowestCommonAncestor);
141
+ // Skip the current responder so it doesn't receive unexpected "shouldSet" events.
142
+ const index = indexOfLowestCommonAncestor +
143
+ (lowestCommonAncestor === currentResponder.id ? 1 : 0);
144
+ eventPaths = {
145
+ idPath: eventIdPath.slice(index),
146
+ nodePath: eventPaths.nodePath.slice(index),
147
+ };
148
+ }
149
+ else {
150
+ eventPaths = null;
151
+ }
152
+ }
153
+ if (eventPaths != null) {
154
+ // If a node wants to become the responder, attempt to transfer.
155
+ wantsResponder = findWantsResponder(eventPaths, domEvent, responderEvent);
156
+ if (wantsResponder != null) {
157
+ // Sets responder if none exists, or negotates with existing responder.
158
+ attemptTransfer(responderEvent, wantsResponder);
159
+ wasNegotiated = true;
160
+ }
161
+ }
162
+ }
163
+ // If there is now a responder, invoke its callbacks for the lifecycle of the gesture.
164
+ if (currentResponder.id != null && currentResponder.node != null) {
165
+ const { id, node } = currentResponder;
166
+ const { onResponderStart, onResponderMove, onResponderEnd, onResponderRelease, onResponderTerminate, onResponderTerminationRequest, } = getResponderConfig(id);
167
+ responderEvent.bubbles = false;
168
+ responderEvent.cancelable = false;
169
+ responderEvent.currentTarget = node;
170
+ // Start
171
+ if (isStartEvent) {
172
+ if (onResponderStart != null) {
173
+ responderEvent.dispatchConfig.registrationName = 'onResponderStart';
174
+ onResponderStart(responderEvent);
175
+ }
176
+ }
177
+ // Move
178
+ else if (isMoveEvent) {
179
+ if (onResponderMove != null) {
180
+ responderEvent.dispatchConfig.registrationName = 'onResponderMove';
181
+ onResponderMove(responderEvent);
182
+ }
183
+ }
184
+ else {
185
+ const isTerminateEvent = (0, types_ts_1.isCancelish)(eventType) ||
186
+ // native context menu
187
+ eventType === 'contextmenu' ||
188
+ // window blur
189
+ (eventType === 'blur' && eventTarget === window) ||
190
+ // responder (or ancestors) blur
191
+ (eventType === 'blur' &&
192
+ eventTarget.contains(node) &&
193
+ domEvent.relatedTarget !== node) ||
194
+ // native scroll without using a pointer
195
+ (isScrollEvent && trackedTouchCount === 0) ||
196
+ // native scroll on node that is parent of the responder (allow siblings to scroll)
197
+ (isScrollEvent && eventTarget.contains(node) && eventTarget !== node) ||
198
+ // native select/selectionchange on node
199
+ (isSelectionChangeEvent && (0, utils_ts_2.hasValidSelection)(domEvent));
200
+ const isReleaseEvent = isEndEvent && !isTerminateEvent && !(0, utils_ts_2.hasTargetTouches)(node, domEvent.touches);
201
+ // End
202
+ if (isEndEvent) {
203
+ if (onResponderEnd != null) {
204
+ responderEvent.dispatchConfig.registrationName = 'onResponderEnd';
205
+ onResponderEnd(responderEvent);
206
+ }
207
+ }
208
+ // Release
209
+ if (isReleaseEvent) {
210
+ if (onResponderRelease != null) {
211
+ responderEvent.dispatchConfig.registrationName = 'onResponderRelease';
212
+ onResponderRelease(responderEvent);
213
+ }
214
+ changeCurrentResponder(emptyResponder);
215
+ }
216
+ // Terminate
217
+ if (isTerminateEvent) {
218
+ let shouldTerminate = true;
219
+ // Responders can still avoid termination but only for these events.
220
+ if (eventType === 'contextmenu' ||
221
+ eventType === 'scroll' ||
222
+ eventType === 'selectionchange') {
223
+ // Only call this function is it wasn't already called during negotiation.
224
+ if (wasNegotiated) {
225
+ shouldTerminate = false;
226
+ }
227
+ else if (onResponderTerminationRequest != null) {
228
+ responderEvent.dispatchConfig.registrationName =
229
+ 'onResponderTerminationRequest';
230
+ if (onResponderTerminationRequest(responderEvent) === false) {
231
+ shouldTerminate = false;
232
+ }
233
+ }
234
+ }
235
+ if (shouldTerminate) {
236
+ if (onResponderTerminate != null) {
237
+ responderEvent.dispatchConfig.registrationName = 'onResponderTerminate';
238
+ onResponderTerminate(responderEvent);
239
+ }
240
+ changeCurrentResponder(emptyResponder);
241
+ isEmulatingMouseEvents = false;
242
+ trackedTouchCount = 0;
243
+ }
244
+ }
245
+ }
246
+ }
247
+ }
248
+ /**
249
+ * Walk the event path to/from the target node. At each node, stop and call the
250
+ * relevant "shouldSet" functions for the given event type. If any of those functions
251
+ * call "stopPropagation" on the event, stop searching for a responder.
252
+ */
253
+ function findWantsResponder(eventPaths, domEvent, responderEvent) {
254
+ const shouldSetCallbacks = shouldSetResponderEvents[domEvent.type]; // for Flow
255
+ if (shouldSetCallbacks != null) {
256
+ const { idPath, nodePath } = eventPaths;
257
+ const shouldSetCallbackCaptureName = shouldSetCallbacks[0];
258
+ const shouldSetCallbackBubbleName = shouldSetCallbacks[1];
259
+ const { bubbles } = shouldSetCallbacks[2];
260
+ const check = (id, node, callbackName) => {
261
+ const config = getResponderConfig(id);
262
+ const shouldSetCallback = config[callbackName];
263
+ if (shouldSetCallback != null) {
264
+ responderEvent.currentTarget = node;
265
+ if (shouldSetCallback(responderEvent) === true) {
266
+ // Start the path from the potential responder
267
+ const prunedIdPath = idPath.slice(idPath.indexOf(id));
268
+ return { id, node, idPath: prunedIdPath };
269
+ }
270
+ }
271
+ };
272
+ // capture
273
+ for (let i = idPath.length - 1; i >= 0; i--) {
274
+ const id = idPath[i];
275
+ const node = nodePath[i];
276
+ const result = check(id, node, shouldSetCallbackCaptureName);
277
+ if (result != null) {
278
+ return result;
279
+ }
280
+ if (responderEvent.isPropagationStopped() === true) {
281
+ return;
282
+ }
283
+ }
284
+ // bubble
285
+ if (bubbles) {
286
+ for (let i = 0; i < idPath.length; i++) {
287
+ const id = idPath[i];
288
+ const node = nodePath[i];
289
+ const result = check(id, node, shouldSetCallbackBubbleName);
290
+ if (result != null) {
291
+ return result;
292
+ }
293
+ if (responderEvent.isPropagationStopped() === true) {
294
+ return;
295
+ }
296
+ }
297
+ }
298
+ else {
299
+ const id = idPath[0];
300
+ const node = nodePath[0];
301
+ const target = domEvent.target;
302
+ if (target === node) {
303
+ return check(id, node, shouldSetCallbackBubbleName);
304
+ }
305
+ }
306
+ }
307
+ }
308
+ /**
309
+ * Attempt to transfer the responder.
310
+ */
311
+ function attemptTransfer(responderEvent, wantsResponder) {
312
+ const { id: currentId, node: currentNode } = currentResponder;
313
+ const { id, node } = wantsResponder;
314
+ const { onResponderGrant, onResponderReject } = getResponderConfig(id);
315
+ responderEvent.bubbles = false;
316
+ responderEvent.cancelable = false;
317
+ responderEvent.currentTarget = node;
318
+ // Set responder
319
+ if (currentId == null) {
320
+ if (onResponderGrant != null) {
321
+ responderEvent.currentTarget = node;
322
+ responderEvent.dispatchConfig.registrationName = 'onResponderGrant';
323
+ onResponderGrant(responderEvent);
324
+ }
325
+ changeCurrentResponder(wantsResponder);
326
+ }
327
+ // Negotiate with current responder
328
+ else {
329
+ const { onResponderTerminate, onResponderTerminationRequest } = getResponderConfig(currentId);
330
+ let allowTransfer = true;
331
+ if (onResponderTerminationRequest != null) {
332
+ responderEvent.currentTarget = currentNode;
333
+ responderEvent.dispatchConfig.registrationName = 'onResponderTerminationRequest';
334
+ if (onResponderTerminationRequest(responderEvent) === false) {
335
+ allowTransfer = false;
336
+ }
337
+ }
338
+ if (allowTransfer) {
339
+ // Terminate existing responder
340
+ if (onResponderTerminate != null) {
341
+ responderEvent.currentTarget = currentNode;
342
+ responderEvent.dispatchConfig.registrationName = 'onResponderTerminate';
343
+ onResponderTerminate(responderEvent);
344
+ }
345
+ // Grant next responder
346
+ if (onResponderGrant != null) {
347
+ responderEvent.currentTarget = node;
348
+ responderEvent.dispatchConfig.registrationName = 'onResponderGrant';
349
+ onResponderGrant(responderEvent);
350
+ }
351
+ changeCurrentResponder(wantsResponder);
352
+ }
353
+ else {
354
+ // Reject responder request
355
+ if (onResponderReject != null) {
356
+ responderEvent.currentTarget = node;
357
+ responderEvent.dispatchConfig.registrationName = 'onResponderReject';
358
+ onResponderReject(responderEvent);
359
+ }
360
+ }
361
+ }
362
+ }
363
+ /* ------------ PUBLIC API ------------ */
364
+ /**
365
+ * Attach Listeners
366
+ *
367
+ * Use native events as ReactDOM doesn't have a non-plugin API to implement
368
+ * this system.
369
+ */
370
+ const documentEventsCapturePhase = ['blur', 'scroll'];
371
+ const documentEventsBubblePhase = [
372
+ // mouse
373
+ 'mousedown',
374
+ 'mousemove',
375
+ 'mouseup',
376
+ 'dragstart',
377
+ // touch
378
+ 'touchstart',
379
+ 'touchmove',
380
+ 'touchend',
381
+ 'touchcancel',
382
+ // other
383
+ 'contextmenu',
384
+ 'select',
385
+ 'selectionchange',
386
+ ];
387
+ const isGuiResponderActive = Symbol();
388
+ function attachListeners() {
389
+ if (utils_ts_1.canUseDOM && !window[isGuiResponderActive]) {
390
+ window.addEventListener('blur', eventListener);
391
+ documentEventsBubblePhase.forEach((eventType) => {
392
+ document.addEventListener(eventType, eventListener);
393
+ });
394
+ documentEventsCapturePhase.forEach((eventType) => {
395
+ document.addEventListener(eventType, eventListener, true);
396
+ });
397
+ window[isGuiResponderActive] = true;
398
+ }
399
+ }
400
+ /**
401
+ * Register a node with the ResponderSystem.
402
+ */
403
+ function addNode(id, node, config) {
404
+ (0, utils_ts_2.setResponderId)(node, id);
405
+ responderListenersMap.set(id, config);
406
+ }
407
+ /**
408
+ * Unregister a node with the ResponderSystem.
409
+ */
410
+ function removeNode(id) {
411
+ if (currentResponder.id === id) {
412
+ terminateResponder();
413
+ }
414
+ if (responderListenersMap.has(id)) {
415
+ responderListenersMap.delete(id);
416
+ }
417
+ }
418
+ /**
419
+ * Allow the current responder to be terminated from within components to support
420
+ * more complex requirements, such as use with other React libraries for working
421
+ * with scroll views, input views, etc.
422
+ */
423
+ function terminateResponder() {
424
+ const { id, node } = currentResponder;
425
+ if (id != null && node != null) {
426
+ const { onResponderTerminate } = getResponderConfig(id);
427
+ if (onResponderTerminate != null) {
428
+ const event = (0, createResponderEvent_ts_1.createResponderEvent)({}, responderTouchHistoryStore);
429
+ event.currentTarget = node;
430
+ onResponderTerminate(event);
431
+ }
432
+ changeCurrentResponder(emptyResponder);
433
+ }
434
+ isEmulatingMouseEvents = false;
435
+ trackedTouchCount = 0;
436
+ }
437
+ /**
438
+ * Allow unit tests to inspect the current responder in the system.
439
+ * FOR TESTING ONLY.
440
+ */
441
+ function getResponderNode() {
442
+ return currentResponder.node;
443
+ }
444
+ //# sourceMappingURL=ResponderSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponderSystem.js","sourceRoot":"","sources":["../../src/ResponderSystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ResponderTouchHistoryStore = void 0;
10
+ const types_ts_1 = require("./types.js");
11
+ class ResponderTouchHistoryStore {
12
+ constructor() {
13
+ this._touchHistory = {
14
+ touchBank: [], //Array<TouchRecord>
15
+ numberActiveTouches: 0,
16
+ // If there is only one active touch, we remember its location. This prevents
17
+ // us having to loop through all of the touches all the time in the most
18
+ // common case.
19
+ indexOfSingleActiveTouch: -1,
20
+ mostRecentTimeStamp: 0,
21
+ };
22
+ }
23
+ recordTouchTrack(topLevelType, nativeEvent) {
24
+ const touchHistory = this._touchHistory;
25
+ if ((0, types_ts_1.isMoveish)(topLevelType)) {
26
+ nativeEvent.changedTouches.forEach((touch) => recordTouchMove(touch, touchHistory));
27
+ }
28
+ else if ((0, types_ts_1.isStartish)(topLevelType)) {
29
+ nativeEvent.changedTouches.forEach((touch) => recordTouchStart(touch, touchHistory));
30
+ touchHistory.numberActiveTouches = nativeEvent.touches.length;
31
+ if (touchHistory.numberActiveTouches === 1) {
32
+ touchHistory.indexOfSingleActiveTouch = nativeEvent.touches[0].identifier;
33
+ }
34
+ }
35
+ else if ((0, types_ts_1.isEndish)(topLevelType)) {
36
+ nativeEvent.changedTouches.forEach((touch) => recordTouchEnd(touch, touchHistory));
37
+ touchHistory.numberActiveTouches = nativeEvent.touches.length;
38
+ if (touchHistory.numberActiveTouches === 1) {
39
+ const { touchBank } = touchHistory;
40
+ for (let i = 0; i < touchBank.length; i++) {
41
+ const touchTrackToCheck = touchBank[i];
42
+ // @ts-ignore
43
+ if (touchTrackToCheck?.touchActive) {
44
+ touchHistory.indexOfSingleActiveTouch = i;
45
+ break;
46
+ }
47
+ }
48
+ if (process.env.NODE_ENV === 'development') {
49
+ const activeRecord = touchBank[touchHistory.indexOfSingleActiveTouch];
50
+ // @ts-ignore
51
+ if (!activeRecord?.touchActive) {
52
+ console.error('Cannot find single active touch.');
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
58
+ get touchHistory() {
59
+ return this._touchHistory;
60
+ }
61
+ }
62
+ exports.ResponderTouchHistoryStore = ResponderTouchHistoryStore;
63
+ /**
64
+ * Tracks the position and time of each active touch by `touch.identifier`. We
65
+ * should typically only see IDs in the range of 1-20 because IDs get recycled
66
+ * when touches end and start again.
67
+ */
68
+ const MAX_TOUCH_BANK = 20;
69
+ function timestampForTouch(touch) {
70
+ // The legacy internal implementation provides "timeStamp", which has been
71
+ // renamed to "timestamp".
72
+ return touch['timeStamp'] || touch.timestamp;
73
+ }
74
+ /**
75
+ * TODO: Instead of making gestures recompute filtered velocity, we could
76
+ * include a built in velocity computation that can be reused globally.
77
+ */
78
+ function createTouchRecord(touch) {
79
+ return {
80
+ touchActive: true,
81
+ startPageX: touch.pageX,
82
+ startPageY: touch.pageY,
83
+ startTimeStamp: timestampForTouch(touch),
84
+ currentPageX: touch.pageX,
85
+ currentPageY: touch.pageY,
86
+ currentTimeStamp: timestampForTouch(touch),
87
+ previousPageX: touch.pageX,
88
+ previousPageY: touch.pageY,
89
+ previousTimeStamp: timestampForTouch(touch),
90
+ };
91
+ }
92
+ function resetTouchRecord(touchRecord, touch) {
93
+ touchRecord.touchActive = true;
94
+ touchRecord.startPageX = touch.pageX;
95
+ touchRecord.startPageY = touch.pageY;
96
+ touchRecord.startTimeStamp = timestampForTouch(touch);
97
+ touchRecord.currentPageX = touch.pageX;
98
+ touchRecord.currentPageY = touch.pageY;
99
+ touchRecord.currentTimeStamp = timestampForTouch(touch);
100
+ touchRecord.previousPageX = touch.pageX;
101
+ touchRecord.previousPageY = touch.pageY;
102
+ touchRecord.previousTimeStamp = timestampForTouch(touch);
103
+ }
104
+ function getTouchIdentifier({ identifier }) {
105
+ if (identifier == null) {
106
+ console.error('Touch object is missing identifier.');
107
+ }
108
+ if (process.env.NODE_ENV === 'development') {
109
+ if (identifier > MAX_TOUCH_BANK) {
110
+ console.error('Touch identifier %s is greater than maximum supported %s which causes ' +
111
+ 'performance issues backfilling array locations for all of the indices.', identifier, MAX_TOUCH_BANK);
112
+ }
113
+ }
114
+ return identifier;
115
+ }
116
+ function recordTouchStart(touch, touchHistory) {
117
+ const identifier = getTouchIdentifier(touch);
118
+ const touchRecord = touchHistory.touchBank[identifier];
119
+ if (touchRecord) {
120
+ resetTouchRecord(touchRecord, touch);
121
+ }
122
+ else {
123
+ touchHistory.touchBank[identifier] = createTouchRecord(touch);
124
+ }
125
+ touchHistory.mostRecentTimeStamp = timestampForTouch(touch);
126
+ }
127
+ function recordTouchMove(touch, touchHistory) {
128
+ const touchRecord = touchHistory.touchBank[getTouchIdentifier(touch)];
129
+ if (touchRecord) {
130
+ touchRecord.touchActive = true;
131
+ touchRecord.previousPageX = touchRecord.currentPageX;
132
+ touchRecord.previousPageY = touchRecord.currentPageY;
133
+ touchRecord.previousTimeStamp = touchRecord.currentTimeStamp;
134
+ touchRecord.currentPageX = touch.pageX;
135
+ touchRecord.currentPageY = touch.pageY;
136
+ touchRecord.currentTimeStamp = timestampForTouch(touch);
137
+ touchHistory.mostRecentTimeStamp = timestampForTouch(touch);
138
+ }
139
+ else {
140
+ console.warn('Cannot record touch move without a touch start.\n', `Touch Move: ${printTouch(touch)}\n`, `Touch Bank: ${printTouchBank(touchHistory)}`);
141
+ }
142
+ }
143
+ function recordTouchEnd(touch, touchHistory) {
144
+ const touchRecord = touchHistory.touchBank[getTouchIdentifier(touch)];
145
+ if (touchRecord) {
146
+ touchRecord.touchActive = false;
147
+ touchRecord.previousPageX = touchRecord.currentPageX;
148
+ touchRecord.previousPageY = touchRecord.currentPageY;
149
+ touchRecord.previousTimeStamp = touchRecord.currentTimeStamp;
150
+ touchRecord.currentPageX = touch.pageX;
151
+ touchRecord.currentPageY = touch.pageY;
152
+ touchRecord.currentTimeStamp = timestampForTouch(touch);
153
+ touchHistory.mostRecentTimeStamp = timestampForTouch(touch);
154
+ }
155
+ else {
156
+ console.warn('Cannot record touch end without a touch start.\n', `Touch End: ${printTouch(touch)}\n`, `Touch Bank: ${printTouchBank(touchHistory)}`);
157
+ }
158
+ }
159
+ function printTouch(touch) {
160
+ return JSON.stringify({
161
+ identifier: touch.identifier,
162
+ pageX: touch.pageX,
163
+ pageY: touch.pageY,
164
+ timestamp: timestampForTouch(touch),
165
+ });
166
+ }
167
+ function printTouchBank(touchHistory) {
168
+ const { touchBank } = touchHistory;
169
+ let printed = JSON.stringify(touchBank.slice(0, MAX_TOUCH_BANK));
170
+ if (touchBank.length > MAX_TOUCH_BANK) {
171
+ printed += ` (original size: ${touchBank.length})`;
172
+ }
173
+ return printed;
174
+ }
175
+ //# sourceMappingURL=ResponderTouchHistoryStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponderTouchHistoryStore.js","sourceRoot":"","sources":["../../src/ResponderTouchHistoryStore.ts"],"names":[],"mappings":"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"}