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