@hanzogui/react-native-use-responder-events 8.3.0 → 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.
- package/dist/cjs/ResponderSystem.js +444 -0
- package/dist/cjs/ResponderSystem.js.map +1 -0
- package/dist/cjs/ResponderTouchHistoryStore.js +175 -0
- package/dist/cjs/ResponderTouchHistoryStore.js.map +1 -0
- package/dist/cjs/createResponderEvent.js +151 -0
- package/dist/cjs/createResponderEvent.js.map +1 -0
- package/dist/cjs/index.js +5 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/types.js +47 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/useResponderEvents.js +81 -0
- package/dist/cjs/useResponderEvents.js.map +1 -0
- package/dist/cjs/utils.js +182 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/ResponderSystem.js +437 -0
- package/dist/esm/ResponderSystem.js.map +1 -0
- package/dist/esm/ResponderTouchHistoryStore.js +171 -0
- package/dist/esm/ResponderTouchHistoryStore.js.map +1 -0
- package/dist/esm/createResponderEvent.js +148 -0
- package/dist/esm/createResponderEvent.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types.js +38 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/useResponderEvents.js +76 -0
- package/dist/esm/useResponderEvents.js.map +1 -0
- package/dist/esm/utils.js +171 -0
- package/dist/esm/utils.js.map +1 -0
- package/package.json +13 -13
- package/src/ResponderSystem.ts +6 -6
- package/src/ResponderTouchHistoryStore.ts +2 -2
- package/src/createResponderEvent.ts +2 -2
- package/src/index.ts +1 -1
- package/src/useResponderEvents.ts +2 -2
- package/types/ResponderSystem.d.ts +1 -1
- package/types/ResponderSystem.d.ts.map +1 -1
- package/types/ResponderTouchHistoryStore.d.ts +1 -1
- package/types/ResponderTouchHistoryStore.d.ts.map +1 -1
- package/types/createResponderEvent.d.ts +1 -1
- package/types/createResponderEvent.d.ts.map +1 -1
- package/types/index.d.ts +1 -1
- package/types/index.d.ts.map +1 -1
- package/types/useResponderEvents.d.ts +2 -2
- package/types/useResponderEvents.d.ts.map +1 -1
- package/types/utils.d.ts.map +1 -1
- package/dist/cjs/ResponderSystem.cjs +0 -392
- package/dist/cjs/ResponderSystem.native.js +0 -395
- package/dist/cjs/ResponderSystem.native.js.map +0 -1
- package/dist/cjs/ResponderTouchHistoryStore.cjs +0 -179
- package/dist/cjs/ResponderTouchHistoryStore.native.js +0 -232
- package/dist/cjs/ResponderTouchHistoryStore.native.js.map +0 -1
- package/dist/cjs/createResponderEvent.cjs +0 -149
- package/dist/cjs/createResponderEvent.native.js +0 -152
- package/dist/cjs/createResponderEvent.native.js.map +0 -1
- package/dist/cjs/index.cjs +0 -20
- package/dist/cjs/index.native.js +0 -23
- package/dist/cjs/index.native.js.map +0 -1
- package/dist/cjs/types.cjs +0 -78
- package/dist/cjs/types.native.js +0 -81
- package/dist/cjs/types.native.js.map +0 -1
- package/dist/cjs/useResponderEvents.cjs +0 -107
- package/dist/cjs/useResponderEvents.native.js +0 -113
- package/dist/cjs/useResponderEvents.native.js.map +0 -1
- package/dist/cjs/utils.cjs +0 -169
- package/dist/cjs/utils.native.js +0 -173
- package/dist/cjs/utils.native.js.map +0 -1
- package/dist/esm/ResponderSystem.mjs +0 -363
- package/dist/esm/ResponderSystem.mjs.map +0 -1
- package/dist/esm/ResponderSystem.native.js +0 -363
- package/dist/esm/ResponderSystem.native.js.map +0 -1
- package/dist/esm/ResponderTouchHistoryStore.mjs +0 -154
- package/dist/esm/ResponderTouchHistoryStore.mjs.map +0 -1
- package/dist/esm/ResponderTouchHistoryStore.native.js +0 -204
- package/dist/esm/ResponderTouchHistoryStore.native.js.map +0 -1
- package/dist/esm/createResponderEvent.mjs +0 -124
- package/dist/esm/createResponderEvent.mjs.map +0 -1
- package/dist/esm/createResponderEvent.native.js +0 -124
- package/dist/esm/createResponderEvent.native.js.map +0 -1
- package/dist/esm/index.mjs +0 -2
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm/index.native.js +0 -2
- package/dist/esm/index.native.js.map +0 -1
- package/dist/esm/types.mjs +0 -34
- package/dist/esm/types.mjs.map +0 -1
- package/dist/esm/types.native.js +0 -34
- package/dist/esm/types.native.js.map +0 -1
- package/dist/esm/useResponderEvents.mjs +0 -69
- package/dist/esm/useResponderEvents.mjs.map +0 -1
- package/dist/esm/useResponderEvents.native.js +0 -72
- package/dist/esm/useResponderEvents.native.js.map +0 -1
- package/dist/esm/utils.mjs +0 -136
- package/dist/esm/utils.mjs.map +0 -1
- package/dist/esm/utils.native.js +0 -137
- 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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"}
|