@tamagui/react-native-use-responder-events 2.7.7 → 3.0.0-beta.643.1

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 (61) hide show
  1. package/dist/cjs/ResponderSystem.cjs +307 -344
  2. package/dist/cjs/ResponderSystem.native.cjs +357 -0
  3. package/dist/cjs/ResponderSystem.native.js +307 -343
  4. package/dist/cjs/ResponderSystem.native.js.map +1 -1
  5. package/dist/cjs/ResponderTouchHistoryStore.cjs +136 -149
  6. package/dist/cjs/ResponderTouchHistoryStore.native.cjs +217 -0
  7. package/dist/cjs/ResponderTouchHistoryStore.native.js +176 -189
  8. package/dist/cjs/ResponderTouchHistoryStore.native.js.map +1 -1
  9. package/dist/cjs/createResponderEvent.cjs +128 -132
  10. package/dist/cjs/createResponderEvent.native.cjs +147 -0
  11. package/dist/cjs/createResponderEvent.native.js +129 -132
  12. package/dist/cjs/createResponderEvent.native.js.map +1 -1
  13. package/dist/cjs/index.cjs +10 -11
  14. package/dist/cjs/index.native.cjs +21 -0
  15. package/dist/cjs/index.native.js +10 -10
  16. package/dist/cjs/index.native.js.map +1 -1
  17. package/dist/cjs/types.cjs +40 -41
  18. package/dist/cjs/types.native.cjs +79 -0
  19. package/dist/cjs/types.native.js +40 -40
  20. package/dist/cjs/types.native.js.map +1 -1
  21. package/dist/cjs/useResponderEvents.cjs +60 -85
  22. package/dist/cjs/useResponderEvents.native.cjs +87 -0
  23. package/dist/cjs/useResponderEvents.native.js +62 -86
  24. package/dist/cjs/useResponderEvents.native.js.map +1 -1
  25. package/dist/cjs/utils.cjs +123 -135
  26. package/dist/cjs/utils.native.cjs +160 -0
  27. package/dist/cjs/utils.native.js +124 -135
  28. package/dist/cjs/utils.native.js.map +1 -1
  29. package/dist/esm/ResponderSystem.mjs +291 -326
  30. package/dist/esm/ResponderSystem.mjs.map +1 -1
  31. package/dist/esm/ResponderSystem.native.js +291 -326
  32. package/dist/esm/ResponderSystem.native.js.map +1 -1
  33. package/dist/esm/ResponderTouchHistoryStore.mjs +123 -131
  34. package/dist/esm/ResponderTouchHistoryStore.mjs.map +1 -1
  35. package/dist/esm/ResponderTouchHistoryStore.native.js +163 -172
  36. package/dist/esm/ResponderTouchHistoryStore.native.js.map +1 -1
  37. package/dist/esm/createResponderEvent.mjs +115 -114
  38. package/dist/esm/createResponderEvent.mjs.map +1 -1
  39. package/dist/esm/createResponderEvent.native.js +116 -115
  40. package/dist/esm/createResponderEvent.native.js.map +1 -1
  41. package/dist/esm/index.js +1 -2
  42. package/dist/esm/index.mjs +1 -2
  43. package/dist/esm/index.native.js +1 -2
  44. package/dist/esm/types.mjs +7 -6
  45. package/dist/esm/types.mjs.map +1 -1
  46. package/dist/esm/types.native.js +7 -6
  47. package/dist/esm/types.native.js.map +1 -1
  48. package/dist/esm/useResponderEvents.mjs +45 -61
  49. package/dist/esm/useResponderEvents.mjs.map +1 -1
  50. package/dist/esm/useResponderEvents.native.js +47 -63
  51. package/dist/esm/useResponderEvents.native.js.map +1 -1
  52. package/dist/esm/utils.mjs +101 -111
  53. package/dist/esm/utils.mjs.map +1 -1
  54. package/dist/esm/utils.native.js +102 -112
  55. package/dist/esm/utils.native.js.map +1 -1
  56. package/package.json +2 -2
  57. package/types/ResponderTouchHistoryStore.d.ts.map +1 -1
  58. package/types/utils.d.ts.map +1 -1
  59. package/dist/esm/index.js.map +0 -1
  60. package/dist/esm/index.mjs.map +0 -1
  61. package/dist/esm/index.native.js.map +0 -1
@@ -0,0 +1,357 @@
1
+ "use strict";
2
+
3
+
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all) __defProp(target, name, {
10
+ get: all[name],
11
+ enumerable: true
12
+ });
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
17
+ get: () => from[key],
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
21
+ return to;
22
+ };
23
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
+ var ResponderSystem_exports = {};
25
+ __export(ResponderSystem_exports, {
26
+ addNode: () => addNode,
27
+ attachListeners: () => attachListeners,
28
+ getResponderNode: () => getResponderNode,
29
+ removeNode: () => removeNode,
30
+ terminateResponder: () => terminateResponder
31
+ });
32
+ module.exports = __toCommonJS(ResponderSystem_exports);
33
+ var import_createResponderEvent = require("./createResponderEvent.native.js");
34
+ var import_ResponderTouchHistoryStore = require("./ResponderTouchHistoryStore.native.js");
35
+ var import_types = require("./types.native.js");
36
+ var import_utils = require("./utils.native.js");
37
+ var import_utils2 = require("./utils.native.js");
38
+ var emptyObject = {};
39
+ var startRegistration = [
40
+ "onStartShouldSetResponderCapture",
41
+ "onStartShouldSetResponder",
42
+ { bubbles: true }
43
+ ];
44
+ var moveRegistration = [
45
+ "onMoveShouldSetResponderCapture",
46
+ "onMoveShouldSetResponder",
47
+ { bubbles: true }
48
+ ];
49
+ var scrollRegistration = [
50
+ "onScrollShouldSetResponderCapture",
51
+ "onScrollShouldSetResponder",
52
+ { bubbles: false }
53
+ ];
54
+ var shouldSetResponderEvents = {
55
+ touchstart: startRegistration,
56
+ mousedown: startRegistration,
57
+ touchmove: moveRegistration,
58
+ mousemove: moveRegistration,
59
+ scroll: scrollRegistration
60
+ };
61
+ var emptyResponder = {
62
+ id: null,
63
+ idPath: null,
64
+ node: null
65
+ };
66
+ var responderListenersMap = /* @__PURE__ */ new Map();
67
+ var isEmulatingMouseEvents = false;
68
+ var trackedTouchCount = 0;
69
+ var currentResponder = {
70
+ id: null,
71
+ node: null,
72
+ idPath: null
73
+ };
74
+ var responderTouchHistoryStore = new import_ResponderTouchHistoryStore.ResponderTouchHistoryStore();
75
+ function changeCurrentResponder(responder) {
76
+ currentResponder = responder;
77
+ }
78
+ function getResponderConfig(id) {
79
+ var config = responderListenersMap.get(id);
80
+ return config != null ? config : emptyObject;
81
+ }
82
+ function eventListener(domEvent) {
83
+ var eventType = domEvent.type;
84
+ var eventTarget = domEvent.target;
85
+ if (eventType === "touchstart") {
86
+ isEmulatingMouseEvents = true;
87
+ }
88
+ if (eventType === "touchmove" || trackedTouchCount > 1) {
89
+ isEmulatingMouseEvents = false;
90
+ }
91
+ if (eventType === "mousedown" && isEmulatingMouseEvents || eventType === "mousemove" && isEmulatingMouseEvents || eventType === "mousemove" && trackedTouchCount < 1) {
92
+ return;
93
+ }
94
+ if (isEmulatingMouseEvents && eventType === "mouseup") {
95
+ if (trackedTouchCount === 0) {
96
+ isEmulatingMouseEvents = false;
97
+ }
98
+ return;
99
+ }
100
+ var isStartEvent = (0, import_types.isStartish)(eventType) && (0, import_utils2.isPrimaryPointerDown)(domEvent);
101
+ var isMoveEvent = (0, import_types.isMoveish)(eventType);
102
+ var isEndEvent = (0, import_types.isEndish)(eventType);
103
+ var isScrollEvent = (0, import_types.isScroll)(eventType);
104
+ var isSelectionChangeEvent = (0, import_types.isSelectionChange)(eventType);
105
+ var responderEvent = (0, import_createResponderEvent.createResponderEvent)(domEvent, responderTouchHistoryStore);
106
+ if (isStartEvent || isMoveEvent || isEndEvent) {
107
+ if (domEvent.touches) {
108
+ trackedTouchCount = domEvent.touches.length;
109
+ } else {
110
+ if (isStartEvent) {
111
+ trackedTouchCount = 1;
112
+ } else if (isEndEvent) {
113
+ trackedTouchCount = 0;
114
+ }
115
+ }
116
+ responderTouchHistoryStore.recordTouchTrack(eventType, responderEvent.nativeEvent);
117
+ }
118
+ var eventPaths = (0, import_utils2.getResponderPaths)(domEvent);
119
+ var wasNegotiated = false;
120
+ var wantsResponder;
121
+ if (isStartEvent || isMoveEvent || isScrollEvent && trackedTouchCount > 0) {
122
+ var currentResponderIdPath = currentResponder.idPath;
123
+ var eventIdPath = eventPaths.idPath;
124
+ if (currentResponderIdPath != null && eventIdPath != null) {
125
+ var lowestCommonAncestor = (0, import_utils2.getLowestCommonAncestor)(currentResponderIdPath, eventIdPath);
126
+ if (lowestCommonAncestor != null) {
127
+ var indexOfLowestCommonAncestor = eventIdPath.indexOf(lowestCommonAncestor);
128
+ var index = indexOfLowestCommonAncestor + (lowestCommonAncestor === currentResponder.id ? 1 : 0);
129
+ eventPaths = {
130
+ idPath: eventIdPath.slice(index),
131
+ nodePath: eventPaths.nodePath.slice(index)
132
+ };
133
+ } else {
134
+ eventPaths = null;
135
+ }
136
+ }
137
+ if (eventPaths != null) {
138
+ wantsResponder = findWantsResponder(eventPaths, domEvent, responderEvent);
139
+ if (wantsResponder != null) {
140
+ attemptTransfer(responderEvent, wantsResponder);
141
+ wasNegotiated = true;
142
+ }
143
+ }
144
+ }
145
+ if (currentResponder.id != null && currentResponder.node != null) {
146
+ var { id, node } = currentResponder;
147
+ var { onResponderStart, onResponderMove, onResponderEnd, onResponderRelease, onResponderTerminate, onResponderTerminationRequest } = getResponderConfig(id);
148
+ responderEvent.bubbles = false;
149
+ responderEvent.cancelable = false;
150
+ responderEvent.currentTarget = node;
151
+ if (isStartEvent) {
152
+ if (onResponderStart != null) {
153
+ responderEvent.dispatchConfig.registrationName = "onResponderStart";
154
+ onResponderStart(responderEvent);
155
+ }
156
+ } else if (isMoveEvent) {
157
+ if (onResponderMove != null) {
158
+ responderEvent.dispatchConfig.registrationName = "onResponderMove";
159
+ onResponderMove(responderEvent);
160
+ }
161
+ } else {
162
+ var isTerminateEvent = (0, import_types.isCancelish)(eventType) || eventType === "contextmenu" || eventType === "blur" && eventTarget === window || eventType === "blur" && eventTarget.contains(node) && domEvent.relatedTarget !== node || isScrollEvent && trackedTouchCount === 0 || isScrollEvent && eventTarget.contains(node) && eventTarget !== node || isSelectionChangeEvent && (0, import_utils2.hasValidSelection)(domEvent);
163
+ var isReleaseEvent = isEndEvent && !isTerminateEvent && !(0, import_utils2.hasTargetTouches)(node, domEvent.touches);
164
+ if (isEndEvent) {
165
+ if (onResponderEnd != null) {
166
+ responderEvent.dispatchConfig.registrationName = "onResponderEnd";
167
+ onResponderEnd(responderEvent);
168
+ }
169
+ }
170
+ if (isReleaseEvent) {
171
+ if (onResponderRelease != null) {
172
+ responderEvent.dispatchConfig.registrationName = "onResponderRelease";
173
+ onResponderRelease(responderEvent);
174
+ }
175
+ changeCurrentResponder(emptyResponder);
176
+ }
177
+ if (isTerminateEvent) {
178
+ var shouldTerminate = true;
179
+ if (eventType === "contextmenu" || eventType === "scroll" || eventType === "selectionchange") {
180
+ if (wasNegotiated) {
181
+ shouldTerminate = false;
182
+ } else if (onResponderTerminationRequest != null) {
183
+ responderEvent.dispatchConfig.registrationName = "onResponderTerminationRequest";
184
+ if (onResponderTerminationRequest(responderEvent) === false) {
185
+ shouldTerminate = false;
186
+ }
187
+ }
188
+ }
189
+ if (shouldTerminate) {
190
+ if (onResponderTerminate != null) {
191
+ responderEvent.dispatchConfig.registrationName = "onResponderTerminate";
192
+ onResponderTerminate(responderEvent);
193
+ }
194
+ changeCurrentResponder(emptyResponder);
195
+ isEmulatingMouseEvents = false;
196
+ trackedTouchCount = 0;
197
+ }
198
+ }
199
+ }
200
+ }
201
+ }
202
+ function findWantsResponder(eventPaths, domEvent, responderEvent) {
203
+ var shouldSetCallbacks = shouldSetResponderEvents[domEvent.type];
204
+ if (shouldSetCallbacks != null) {
205
+ var { idPath, nodePath } = eventPaths;
206
+ var shouldSetCallbackCaptureName = shouldSetCallbacks[0];
207
+ var shouldSetCallbackBubbleName = shouldSetCallbacks[1];
208
+ var { bubbles } = shouldSetCallbacks[2];
209
+ var check = function(id3, node3, callbackName) {
210
+ var config = getResponderConfig(id3);
211
+ var shouldSetCallback = config[callbackName];
212
+ if (shouldSetCallback != null) {
213
+ responderEvent.currentTarget = node3;
214
+ if (shouldSetCallback(responderEvent) === true) {
215
+ var prunedIdPath = idPath.slice(idPath.indexOf(id3));
216
+ return {
217
+ id: id3,
218
+ node: node3,
219
+ idPath: prunedIdPath
220
+ };
221
+ }
222
+ }
223
+ };
224
+ for (var i = idPath.length - 1; i >= 0; i--) {
225
+ var id = idPath[i];
226
+ var node = nodePath[i];
227
+ var result = check(id, node, shouldSetCallbackCaptureName);
228
+ if (result != null) {
229
+ return result;
230
+ }
231
+ if (responderEvent.isPropagationStopped() === true) {
232
+ return;
233
+ }
234
+ }
235
+ if (bubbles) {
236
+ for (var i1 = 0; i1 < idPath.length; i1++) {
237
+ var id1 = idPath[i1];
238
+ var node1 = nodePath[i1];
239
+ var result1 = check(id1, node1, shouldSetCallbackBubbleName);
240
+ if (result1 != null) {
241
+ return result1;
242
+ }
243
+ if (responderEvent.isPropagationStopped() === true) {
244
+ return;
245
+ }
246
+ }
247
+ } else {
248
+ var id2 = idPath[0];
249
+ var node2 = nodePath[0];
250
+ var target = domEvent.target;
251
+ if (target === node2) {
252
+ return check(id2, node2, shouldSetCallbackBubbleName);
253
+ }
254
+ }
255
+ }
256
+ }
257
+ function attemptTransfer(responderEvent, wantsResponder) {
258
+ var { id: currentId, node: currentNode } = currentResponder;
259
+ var { id, node } = wantsResponder;
260
+ var { onResponderGrant, onResponderReject } = getResponderConfig(id);
261
+ responderEvent.bubbles = false;
262
+ responderEvent.cancelable = false;
263
+ responderEvent.currentTarget = node;
264
+ if (currentId == null) {
265
+ if (onResponderGrant != null) {
266
+ responderEvent.currentTarget = node;
267
+ responderEvent.dispatchConfig.registrationName = "onResponderGrant";
268
+ onResponderGrant(responderEvent);
269
+ }
270
+ changeCurrentResponder(wantsResponder);
271
+ } else {
272
+ var { onResponderTerminate, onResponderTerminationRequest } = getResponderConfig(currentId);
273
+ var allowTransfer = true;
274
+ if (onResponderTerminationRequest != null) {
275
+ responderEvent.currentTarget = currentNode;
276
+ responderEvent.dispatchConfig.registrationName = "onResponderTerminationRequest";
277
+ if (onResponderTerminationRequest(responderEvent) === false) {
278
+ allowTransfer = false;
279
+ }
280
+ }
281
+ if (allowTransfer) {
282
+ if (onResponderTerminate != null) {
283
+ responderEvent.currentTarget = currentNode;
284
+ responderEvent.dispatchConfig.registrationName = "onResponderTerminate";
285
+ onResponderTerminate(responderEvent);
286
+ }
287
+ if (onResponderGrant != null) {
288
+ responderEvent.currentTarget = node;
289
+ responderEvent.dispatchConfig.registrationName = "onResponderGrant";
290
+ onResponderGrant(responderEvent);
291
+ }
292
+ changeCurrentResponder(wantsResponder);
293
+ } else {
294
+ if (onResponderReject != null) {
295
+ responderEvent.currentTarget = node;
296
+ responderEvent.dispatchConfig.registrationName = "onResponderReject";
297
+ onResponderReject(responderEvent);
298
+ }
299
+ }
300
+ }
301
+ }
302
+ var documentEventsCapturePhase = ["blur", "scroll"];
303
+ var documentEventsBubblePhase = [
304
+ "mousedown",
305
+ "mousemove",
306
+ "mouseup",
307
+ "dragstart",
308
+ "touchstart",
309
+ "touchmove",
310
+ "touchend",
311
+ "touchcancel",
312
+ "contextmenu",
313
+ "select",
314
+ "selectionchange"
315
+ ];
316
+ var isTamaguiResponderActive = /* @__PURE__ */ Symbol();
317
+ function attachListeners() {
318
+ if (import_utils.canUseDOM && !window[isTamaguiResponderActive]) {
319
+ window.addEventListener("blur", eventListener);
320
+ documentEventsBubblePhase.forEach(function(eventType) {
321
+ document.addEventListener(eventType, eventListener);
322
+ });
323
+ documentEventsCapturePhase.forEach(function(eventType) {
324
+ document.addEventListener(eventType, eventListener, true);
325
+ });
326
+ window[isTamaguiResponderActive] = true;
327
+ }
328
+ }
329
+ function addNode(id, node, config) {
330
+ (0, import_utils2.setResponderId)(node, id);
331
+ responderListenersMap.set(id, config);
332
+ }
333
+ function removeNode(id) {
334
+ if (currentResponder.id === id) {
335
+ terminateResponder();
336
+ }
337
+ if (responderListenersMap.has(id)) {
338
+ responderListenersMap.delete(id);
339
+ }
340
+ }
341
+ function terminateResponder() {
342
+ var { id, node } = currentResponder;
343
+ if (id != null && node != null) {
344
+ var { onResponderTerminate } = getResponderConfig(id);
345
+ if (onResponderTerminate != null) {
346
+ var event = (0, import_createResponderEvent.createResponderEvent)({}, responderTouchHistoryStore);
347
+ event.currentTarget = node;
348
+ onResponderTerminate(event);
349
+ }
350
+ changeCurrentResponder(emptyResponder);
351
+ }
352
+ isEmulatingMouseEvents = false;
353
+ trackedTouchCount = 0;
354
+ }
355
+ function getResponderNode() {
356
+ return currentResponder.node;
357
+ }