@tamagui/react-native-use-responder-events 1.74.3 → 1.74.4

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.
@@ -0,0 +1,207 @@
1
+ import createResponderEvent from "./createResponderEvent";
2
+ import { ResponderTouchHistoryStore } from "./ResponderTouchHistoryStore";
3
+ import {
4
+ isCancelish,
5
+ isEndish,
6
+ isMoveish,
7
+ isScroll,
8
+ isSelectionChange,
9
+ isStartish
10
+ } from "./types";
11
+ import { canUseDOM } from "./utils";
12
+ import {
13
+ getLowestCommonAncestor,
14
+ getResponderPaths,
15
+ hasTargetTouches,
16
+ hasValidSelection,
17
+ isPrimaryPointerDown,
18
+ setResponderId
19
+ } from "./utils";
20
+ const emptyObject = {}, startRegistration = [
21
+ "onStartShouldSetResponderCapture",
22
+ "onStartShouldSetResponder",
23
+ { bubbles: !0 }
24
+ ], moveRegistration = [
25
+ "onMoveShouldSetResponderCapture",
26
+ "onMoveShouldSetResponder",
27
+ { bubbles: !0 }
28
+ ], scrollRegistration = [
29
+ "onScrollShouldSetResponderCapture",
30
+ "onScrollShouldSetResponder",
31
+ { bubbles: !1 }
32
+ ], shouldSetResponderEvents = {
33
+ touchstart: startRegistration,
34
+ mousedown: startRegistration,
35
+ touchmove: moveRegistration,
36
+ mousemove: moveRegistration,
37
+ scroll: scrollRegistration
38
+ }, emptyResponder = { id: null, idPath: null, node: null }, responderListenersMap = /* @__PURE__ */ new Map();
39
+ let isEmulatingMouseEvents = !1, trackedTouchCount = 0, currentResponder = {
40
+ id: null,
41
+ node: null,
42
+ idPath: null
43
+ };
44
+ const responderTouchHistoryStore = new ResponderTouchHistoryStore();
45
+ function changeCurrentResponder(responder) {
46
+ currentResponder = responder;
47
+ }
48
+ function getResponderConfig(id) {
49
+ const config = responderListenersMap.get(id);
50
+ return config ?? emptyObject;
51
+ }
52
+ function eventListener(domEvent) {
53
+ const eventType = domEvent.type, eventTarget = domEvent.target;
54
+ if (eventType === "touchstart" && (isEmulatingMouseEvents = !0), (eventType === "touchmove" || trackedTouchCount > 1) && (isEmulatingMouseEvents = !1), // Ignore browser emulated mouse events
55
+ eventType === "mousedown" && isEmulatingMouseEvents || eventType === "mousemove" && isEmulatingMouseEvents || // Ignore mousemove if a mousedown didn't occur first
56
+ eventType === "mousemove" && trackedTouchCount < 1)
57
+ return;
58
+ if (isEmulatingMouseEvents && eventType === "mouseup") {
59
+ trackedTouchCount === 0 && (isEmulatingMouseEvents = !1);
60
+ return;
61
+ }
62
+ const isStartEvent = isStartish(eventType) && isPrimaryPointerDown(domEvent), isMoveEvent = isMoveish(eventType), isEndEvent = isEndish(eventType), isScrollEvent = isScroll(eventType), isSelectionChangeEvent = isSelectionChange(eventType), responderEvent = createResponderEvent(domEvent, responderTouchHistoryStore);
63
+ (isStartEvent || isMoveEvent || isEndEvent) && (domEvent.touches ? trackedTouchCount = domEvent.touches.length : isStartEvent ? trackedTouchCount = 1 : isEndEvent && (trackedTouchCount = 0), responderTouchHistoryStore.recordTouchTrack(
64
+ eventType,
65
+ responderEvent.nativeEvent
66
+ ));
67
+ let eventPaths = getResponderPaths(domEvent), wasNegotiated = !1, wantsResponder;
68
+ if (isStartEvent || isMoveEvent || isScrollEvent && trackedTouchCount > 0) {
69
+ const currentResponderIdPath = currentResponder.idPath, eventIdPath = eventPaths.idPath;
70
+ if (currentResponderIdPath != null && eventIdPath != null) {
71
+ const lowestCommonAncestor = getLowestCommonAncestor(
72
+ currentResponderIdPath,
73
+ eventIdPath
74
+ );
75
+ if (lowestCommonAncestor != null) {
76
+ const index = eventIdPath.indexOf(lowestCommonAncestor) + (lowestCommonAncestor === currentResponder.id ? 1 : 0);
77
+ eventPaths = {
78
+ idPath: eventIdPath.slice(index),
79
+ nodePath: eventPaths.nodePath.slice(index)
80
+ };
81
+ } else
82
+ eventPaths = null;
83
+ }
84
+ eventPaths != null && (wantsResponder = findWantsResponder(eventPaths, domEvent, responderEvent), wantsResponder != null && (attemptTransfer(responderEvent, wantsResponder), wasNegotiated = !0));
85
+ }
86
+ if (currentResponder.id != null && currentResponder.node != null) {
87
+ const { id, node } = currentResponder, {
88
+ onResponderStart,
89
+ onResponderMove,
90
+ onResponderEnd,
91
+ onResponderRelease,
92
+ onResponderTerminate,
93
+ onResponderTerminationRequest
94
+ } = getResponderConfig(id);
95
+ if (responderEvent.bubbles = !1, responderEvent.cancelable = !1, responderEvent.currentTarget = node, isStartEvent)
96
+ onResponderStart != null && (responderEvent.dispatchConfig.registrationName = "onResponderStart", onResponderStart(responderEvent));
97
+ else if (isMoveEvent)
98
+ onResponderMove != null && (responderEvent.dispatchConfig.registrationName = "onResponderMove", onResponderMove(responderEvent));
99
+ else {
100
+ const isTerminateEvent = isCancelish(eventType) || // native context menu
101
+ eventType === "contextmenu" || // window blur
102
+ eventType === "blur" && eventTarget === window || // responder (or ancestors) blur
103
+ eventType === "blur" && eventTarget.contains(node) && domEvent.relatedTarget !== node || // native scroll without using a pointer
104
+ isScrollEvent && trackedTouchCount === 0 || // native scroll on node that is parent of the responder (allow siblings to scroll)
105
+ isScrollEvent && eventTarget.contains(node) && eventTarget !== node || // native select/selectionchange on node
106
+ isSelectionChangeEvent && hasValidSelection(domEvent), isReleaseEvent = isEndEvent && !isTerminateEvent && !hasTargetTouches(node, domEvent.touches);
107
+ if (isEndEvent && onResponderEnd != null && (responderEvent.dispatchConfig.registrationName = "onResponderEnd", onResponderEnd(responderEvent)), isReleaseEvent && (onResponderRelease != null && (responderEvent.dispatchConfig.registrationName = "onResponderRelease", onResponderRelease(responderEvent)), changeCurrentResponder(emptyResponder)), isTerminateEvent) {
108
+ let shouldTerminate = !0;
109
+ (eventType === "contextmenu" || eventType === "scroll" || eventType === "selectionchange") && (wasNegotiated ? shouldTerminate = !1 : onResponderTerminationRequest != null && (responderEvent.dispatchConfig.registrationName = "onResponderTerminationRequest", onResponderTerminationRequest(responderEvent) === !1 && (shouldTerminate = !1))), shouldTerminate && (onResponderTerminate != null && (responderEvent.dispatchConfig.registrationName = "onResponderTerminate", onResponderTerminate(responderEvent)), changeCurrentResponder(emptyResponder), isEmulatingMouseEvents = !1, trackedTouchCount = 0);
110
+ }
111
+ }
112
+ }
113
+ }
114
+ function findWantsResponder(eventPaths, domEvent, responderEvent) {
115
+ const shouldSetCallbacks = shouldSetResponderEvents[domEvent.type];
116
+ if (shouldSetCallbacks != null) {
117
+ const { idPath, nodePath } = eventPaths, shouldSetCallbackCaptureName = shouldSetCallbacks[0], shouldSetCallbackBubbleName = shouldSetCallbacks[1], { bubbles } = shouldSetCallbacks[2], check = function(id, node, callbackName) {
118
+ const shouldSetCallback = getResponderConfig(id)[callbackName];
119
+ if (shouldSetCallback != null && (responderEvent.currentTarget = node, shouldSetCallback(responderEvent) === !0)) {
120
+ const prunedIdPath = idPath.slice(idPath.indexOf(id));
121
+ return { id, node, idPath: prunedIdPath };
122
+ }
123
+ };
124
+ for (let i = idPath.length - 1; i >= 0; i--) {
125
+ const id = idPath[i], node = nodePath[i], result = check(id, node, shouldSetCallbackCaptureName);
126
+ if (result != null)
127
+ return result;
128
+ if (responderEvent.isPropagationStopped() === !0)
129
+ return;
130
+ }
131
+ if (bubbles)
132
+ for (let i = 0; i < idPath.length; i++) {
133
+ const id = idPath[i], node = nodePath[i], result = check(id, node, shouldSetCallbackBubbleName);
134
+ if (result != null)
135
+ return result;
136
+ if (responderEvent.isPropagationStopped() === !0)
137
+ return;
138
+ }
139
+ else {
140
+ const id = idPath[0], node = nodePath[0];
141
+ if (domEvent.target === node)
142
+ return check(id, node, shouldSetCallbackBubbleName);
143
+ }
144
+ }
145
+ }
146
+ function attemptTransfer(responderEvent, wantsResponder) {
147
+ const { id: currentId, node: currentNode } = currentResponder, { id, node } = wantsResponder, { onResponderGrant, onResponderReject } = getResponderConfig(id);
148
+ if (responderEvent.bubbles = !1, responderEvent.cancelable = !1, responderEvent.currentTarget = node, currentId == null)
149
+ onResponderGrant != null && (responderEvent.currentTarget = node, responderEvent.dispatchConfig.registrationName = "onResponderGrant", onResponderGrant(responderEvent)), changeCurrentResponder(wantsResponder);
150
+ else {
151
+ const { onResponderTerminate, onResponderTerminationRequest } = getResponderConfig(currentId);
152
+ let allowTransfer = !0;
153
+ onResponderTerminationRequest != null && (responderEvent.currentTarget = currentNode, responderEvent.dispatchConfig.registrationName = "onResponderTerminationRequest", onResponderTerminationRequest(responderEvent) === !1 && (allowTransfer = !1)), allowTransfer ? (onResponderTerminate != null && (responderEvent.currentTarget = currentNode, responderEvent.dispatchConfig.registrationName = "onResponderTerminate", onResponderTerminate(responderEvent)), onResponderGrant != null && (responderEvent.currentTarget = node, responderEvent.dispatchConfig.registrationName = "onResponderGrant", onResponderGrant(responderEvent)), changeCurrentResponder(wantsResponder)) : onResponderReject != null && (responderEvent.currentTarget = node, responderEvent.dispatchConfig.registrationName = "onResponderReject", onResponderReject(responderEvent));
154
+ }
155
+ }
156
+ const documentEventsCapturePhase = ["blur", "scroll"], documentEventsBubblePhase = [
157
+ // mouse
158
+ "mousedown",
159
+ "mousemove",
160
+ "mouseup",
161
+ "dragstart",
162
+ // touch
163
+ "touchstart",
164
+ "touchmove",
165
+ "touchend",
166
+ "touchcancel",
167
+ // other
168
+ "contextmenu",
169
+ "select",
170
+ "selectionchange"
171
+ ], isTamaguiResponderActive = Symbol();
172
+ function attachListeners() {
173
+ canUseDOM && !window[isTamaguiResponderActive] && (window.addEventListener("blur", eventListener), documentEventsBubblePhase.forEach((eventType) => {
174
+ document.addEventListener(eventType, eventListener);
175
+ }), documentEventsCapturePhase.forEach((eventType) => {
176
+ document.addEventListener(eventType, eventListener, !0);
177
+ }), window[isTamaguiResponderActive] = !0);
178
+ }
179
+ function addNode(id, node, config) {
180
+ setResponderId(node, id), responderListenersMap.set(id, config);
181
+ }
182
+ function removeNode(id) {
183
+ currentResponder.id === id && terminateResponder(), responderListenersMap.has(id) && responderListenersMap.delete(id);
184
+ }
185
+ function terminateResponder() {
186
+ const { id, node } = currentResponder;
187
+ if (id != null && node != null) {
188
+ const { onResponderTerminate } = getResponderConfig(id);
189
+ if (onResponderTerminate != null) {
190
+ const event = createResponderEvent({}, responderTouchHistoryStore);
191
+ event.currentTarget = node, onResponderTerminate(event);
192
+ }
193
+ changeCurrentResponder(emptyResponder);
194
+ }
195
+ isEmulatingMouseEvents = !1, trackedTouchCount = 0;
196
+ }
197
+ function getResponderNode() {
198
+ return currentResponder.node;
199
+ }
200
+ export {
201
+ addNode,
202
+ attachListeners,
203
+ getResponderNode,
204
+ removeNode,
205
+ terminateResponder
206
+ };
207
+ //# sourceMappingURL=ResponderSystem.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ResponderSystem.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,103 @@
1
+ import { isEndish, isMoveish, isStartish } from "./types";
2
+ const MAX_TOUCH_BANK = 20;
3
+ function timestampForTouch(touch) {
4
+ return touch.timeStamp || touch.timestamp;
5
+ }
6
+ function createTouchRecord(touch) {
7
+ return {
8
+ touchActive: !0,
9
+ startPageX: touch.pageX,
10
+ startPageY: touch.pageY,
11
+ startTimeStamp: timestampForTouch(touch),
12
+ currentPageX: touch.pageX,
13
+ currentPageY: touch.pageY,
14
+ currentTimeStamp: timestampForTouch(touch),
15
+ previousPageX: touch.pageX,
16
+ previousPageY: touch.pageY,
17
+ previousTimeStamp: timestampForTouch(touch)
18
+ };
19
+ }
20
+ function resetTouchRecord(touchRecord, touch) {
21
+ touchRecord.touchActive = !0, touchRecord.startPageX = touch.pageX, touchRecord.startPageY = touch.pageY, touchRecord.startTimeStamp = timestampForTouch(touch), touchRecord.currentPageX = touch.pageX, touchRecord.currentPageY = touch.pageY, touchRecord.currentTimeStamp = timestampForTouch(touch), touchRecord.previousPageX = touch.pageX, touchRecord.previousPageY = touch.pageY, touchRecord.previousTimeStamp = timestampForTouch(touch);
22
+ }
23
+ function getTouchIdentifier({ identifier }) {
24
+ return identifier == null && console.error("Touch object is missing identifier."), process.env.NODE_ENV === "development" && identifier > MAX_TOUCH_BANK && console.error(
25
+ "Touch identifier %s is greater than maximum supported %s which causes performance issues backfilling array locations for all of the indices.",
26
+ identifier,
27
+ MAX_TOUCH_BANK
28
+ ), identifier;
29
+ }
30
+ function recordTouchStart(touch, touchHistory) {
31
+ const identifier = getTouchIdentifier(touch), touchRecord = touchHistory.touchBank[identifier];
32
+ touchRecord ? resetTouchRecord(touchRecord, touch) : touchHistory.touchBank[identifier] = createTouchRecord(touch), touchHistory.mostRecentTimeStamp = timestampForTouch(touch);
33
+ }
34
+ function recordTouchMove(touch, touchHistory) {
35
+ const touchRecord = touchHistory.touchBank[getTouchIdentifier(touch)];
36
+ touchRecord ? (touchRecord.touchActive = !0, touchRecord.previousPageX = touchRecord.currentPageX, touchRecord.previousPageY = touchRecord.currentPageY, touchRecord.previousTimeStamp = touchRecord.currentTimeStamp, touchRecord.currentPageX = touch.pageX, touchRecord.currentPageY = touch.pageY, touchRecord.currentTimeStamp = timestampForTouch(touch), touchHistory.mostRecentTimeStamp = timestampForTouch(touch)) : console.warn(
37
+ `Cannot record touch move without a touch start.
38
+ `,
39
+ `Touch Move: ${printTouch(touch)}
40
+ `,
41
+ `Touch Bank: ${printTouchBank(touchHistory)}`
42
+ );
43
+ }
44
+ function recordTouchEnd(touch, touchHistory) {
45
+ const touchRecord = touchHistory.touchBank[getTouchIdentifier(touch)];
46
+ touchRecord ? (touchRecord.touchActive = !1, touchRecord.previousPageX = touchRecord.currentPageX, touchRecord.previousPageY = touchRecord.currentPageY, touchRecord.previousTimeStamp = touchRecord.currentTimeStamp, touchRecord.currentPageX = touch.pageX, touchRecord.currentPageY = touch.pageY, touchRecord.currentTimeStamp = timestampForTouch(touch), touchHistory.mostRecentTimeStamp = timestampForTouch(touch)) : console.warn(
47
+ `Cannot record touch end without a touch start.
48
+ `,
49
+ `Touch End: ${printTouch(touch)}
50
+ `,
51
+ `Touch Bank: ${printTouchBank(touchHistory)}`
52
+ );
53
+ }
54
+ function printTouch(touch) {
55
+ return JSON.stringify({
56
+ identifier: touch.identifier,
57
+ pageX: touch.pageX,
58
+ pageY: touch.pageY,
59
+ timestamp: timestampForTouch(touch)
60
+ });
61
+ }
62
+ function printTouchBank(touchHistory) {
63
+ const { touchBank } = touchHistory;
64
+ let printed = JSON.stringify(touchBank.slice(0, MAX_TOUCH_BANK));
65
+ return touchBank.length > MAX_TOUCH_BANK && (printed += ` (original size: ${touchBank.length})`), printed;
66
+ }
67
+ class ResponderTouchHistoryStore {
68
+ constructor() {
69
+ this._touchHistory = {
70
+ touchBank: [],
71
+ //Array<TouchRecord>
72
+ numberActiveTouches: 0,
73
+ // If there is only one active touch, we remember its location. This prevents
74
+ // us having to loop through all of the touches all the time in the most
75
+ // common case.
76
+ indexOfSingleActiveTouch: -1,
77
+ mostRecentTimeStamp: 0
78
+ };
79
+ }
80
+ recordTouchTrack(topLevelType, nativeEvent) {
81
+ const touchHistory = this._touchHistory;
82
+ if (isMoveish(topLevelType))
83
+ nativeEvent.changedTouches.forEach((touch) => recordTouchMove(touch, touchHistory));
84
+ else if (isStartish(topLevelType))
85
+ nativeEvent.changedTouches.forEach((touch) => recordTouchStart(touch, touchHistory)), touchHistory.numberActiveTouches = nativeEvent.touches.length, touchHistory.numberActiveTouches === 1 && (touchHistory.indexOfSingleActiveTouch = nativeEvent.touches[0].identifier);
86
+ else if (isEndish(topLevelType) && (nativeEvent.changedTouches.forEach((touch) => recordTouchEnd(touch, touchHistory)), touchHistory.numberActiveTouches = nativeEvent.touches.length, touchHistory.numberActiveTouches === 1)) {
87
+ const { touchBank } = touchHistory;
88
+ for (let i = 0; i < touchBank.length; i++)
89
+ if (touchBank[i]?.touchActive) {
90
+ touchHistory.indexOfSingleActiveTouch = i;
91
+ break;
92
+ }
93
+ process.env.NODE_ENV === "development" && (touchBank[touchHistory.indexOfSingleActiveTouch]?.touchActive || console.error("Cannot find single active touch."));
94
+ }
95
+ }
96
+ get touchHistory() {
97
+ return this._touchHistory;
98
+ }
99
+ }
100
+ export {
101
+ ResponderTouchHistoryStore
102
+ };
103
+ //# sourceMappingURL=ResponderTouchHistoryStore.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ResponderTouchHistoryStore.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,105 @@
1
+ import { getBoundingClientRect } from "./utils";
2
+ const emptyFunction = () => {
3
+ }, emptyObject = {}, emptyArray = [];
4
+ function normalizeIdentifier(identifier) {
5
+ return identifier > 20 ? identifier % 20 : identifier;
6
+ }
7
+ function createResponderEvent(domEvent, responderTouchHistoryStore) {
8
+ let rect, propagationWasStopped = !1, changedTouches, touches;
9
+ const domEventChangedTouches = domEvent.changedTouches, domEventType = domEvent.type, metaKey = domEvent.metaKey === !0, shiftKey = domEvent.shiftKey === !0, force = domEventChangedTouches?.[0].force || 0, identifier = normalizeIdentifier(domEventChangedTouches?.[0].identifier || 0), clientX = domEventChangedTouches?.[0].clientX || domEvent.clientX, clientY = domEventChangedTouches?.[0].clientY || domEvent.clientY, pageX = domEventChangedTouches?.[0].pageX || domEvent.pageX, pageY = domEventChangedTouches?.[0].pageY || domEvent.pageY, preventDefault = typeof domEvent.preventDefault == "function" ? domEvent.preventDefault.bind(domEvent) : emptyFunction, timestamp = domEvent.timeStamp;
10
+ function normalizeTouches(touches2) {
11
+ return Array.prototype.slice.call(touches2).map((touch) => ({
12
+ force: touch.force,
13
+ identifier: normalizeIdentifier(touch.identifier),
14
+ get locationX() {
15
+ return locationX(touch.clientX);
16
+ },
17
+ get locationY() {
18
+ return locationY(touch.clientY);
19
+ },
20
+ pageX: touch.pageX,
21
+ pageY: touch.pageY,
22
+ target: touch.target,
23
+ timestamp
24
+ }));
25
+ }
26
+ if (domEventChangedTouches != null)
27
+ changedTouches = normalizeTouches(domEventChangedTouches), touches = normalizeTouches(domEvent.touches);
28
+ else {
29
+ const emulatedTouches = [
30
+ {
31
+ force,
32
+ identifier,
33
+ get locationX() {
34
+ return locationX(clientX);
35
+ },
36
+ get locationY() {
37
+ return locationY(clientY);
38
+ },
39
+ pageX,
40
+ pageY,
41
+ target: domEvent.target,
42
+ timestamp
43
+ }
44
+ ];
45
+ changedTouches = emulatedTouches, touches = domEventType === "mouseup" || domEventType === "dragstart" ? emptyArray : emulatedTouches;
46
+ }
47
+ const responderEvent = {
48
+ bubbles: !0,
49
+ cancelable: !0,
50
+ // `currentTarget` is set before dispatch
51
+ currentTarget: null,
52
+ defaultPrevented: domEvent.defaultPrevented,
53
+ dispatchConfig: emptyObject,
54
+ eventPhase: domEvent.eventPhase,
55
+ isDefaultPrevented() {
56
+ return domEvent.defaultPrevented;
57
+ },
58
+ isPropagationStopped() {
59
+ return propagationWasStopped;
60
+ },
61
+ isTrusted: domEvent.isTrusted,
62
+ nativeEvent: {
63
+ altKey: !1,
64
+ ctrlKey: !1,
65
+ metaKey,
66
+ shiftKey,
67
+ changedTouches,
68
+ force,
69
+ identifier,
70
+ get locationX() {
71
+ return locationX(clientX);
72
+ },
73
+ get locationY() {
74
+ return locationY(clientY);
75
+ },
76
+ pageX,
77
+ pageY,
78
+ target: domEvent.target,
79
+ timestamp,
80
+ touches,
81
+ type: domEventType
82
+ },
83
+ persist: emptyFunction,
84
+ preventDefault,
85
+ stopPropagation() {
86
+ propagationWasStopped = !0;
87
+ },
88
+ target: domEvent.target,
89
+ timeStamp: timestamp,
90
+ touchHistory: responderTouchHistoryStore.touchHistory
91
+ };
92
+ function locationX(x) {
93
+ if (rect = rect || getBoundingClientRect(responderEvent.currentTarget), rect)
94
+ return x - rect.left;
95
+ }
96
+ function locationY(y) {
97
+ if (rect = rect || getBoundingClientRect(responderEvent.currentTarget), rect)
98
+ return y - rect.top;
99
+ }
100
+ return responderEvent;
101
+ }
102
+ export {
103
+ createResponderEvent as default
104
+ };
105
+ //# sourceMappingURL=createResponderEvent.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/createResponderEvent.ts"],
4
+ "mappings": "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",
5
+ "names": ["touches"]
6
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./useResponderEvents";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": "AAAA,cAAc;",
5
+ "names": []
6
+ }
@@ -0,0 +1,42 @@
1
+ const BLUR = "blur", CONTEXT_MENU = "contextmenu", FOCUS_OUT = "focusout", MOUSE_DOWN = "mousedown", MOUSE_MOVE = "mousemove", MOUSE_UP = "mouseup", MOUSE_CANCEL = "dragstart", TOUCH_START = "touchstart", TOUCH_MOVE = "touchmove", TOUCH_END = "touchend", TOUCH_CANCEL = "touchcancel", SCROLL = "scroll", SELECT = "select", SELECTION_CHANGE = "selectionchange";
2
+ function isStartish(eventType) {
3
+ return eventType === TOUCH_START || eventType === MOUSE_DOWN;
4
+ }
5
+ function isMoveish(eventType) {
6
+ return eventType === TOUCH_MOVE || eventType === MOUSE_MOVE;
7
+ }
8
+ function isEndish(eventType) {
9
+ return eventType === TOUCH_END || eventType === MOUSE_UP || isCancelish(eventType);
10
+ }
11
+ function isCancelish(eventType) {
12
+ return eventType === TOUCH_CANCEL || eventType === MOUSE_CANCEL;
13
+ }
14
+ function isScroll(eventType) {
15
+ return eventType === SCROLL;
16
+ }
17
+ function isSelectionChange(eventType) {
18
+ return eventType === SELECT || eventType === SELECTION_CHANGE;
19
+ }
20
+ export {
21
+ BLUR,
22
+ CONTEXT_MENU,
23
+ FOCUS_OUT,
24
+ MOUSE_CANCEL,
25
+ MOUSE_DOWN,
26
+ MOUSE_MOVE,
27
+ MOUSE_UP,
28
+ SCROLL,
29
+ SELECT,
30
+ SELECTION_CHANGE,
31
+ TOUCH_CANCEL,
32
+ TOUCH_END,
33
+ TOUCH_MOVE,
34
+ TOUCH_START,
35
+ isCancelish,
36
+ isEndish,
37
+ isMoveish,
38
+ isScroll,
39
+ isSelectionChange,
40
+ isStartish
41
+ };
42
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/types.ts"],
4
+ "mappings": "AAwCO,MAAM,OAAO,QACP,eAAe,eACf,YAAY,YACZ,aAAa,aACb,aAAa,aACb,WAAW,WACX,eAAe,aACf,cAAc,cACd,aAAa,aACb,YAAY,YACZ,eAAe,eACf,SAAS,UACT,SAAS,UACT,mBAAmB;AAEzB,SAAS,WAAW,WAA6B;AACtD,SAAO,cAAc,eAAe,cAAc;AACpD;AAEO,SAAS,UAAU,WAA6B;AACrD,SAAO,cAAc,cAAc,cAAc;AACnD;AAEO,SAAS,SAAS,WAA6B;AACpD,SAAO,cAAc,aAAa,cAAc,YAAY,YAAY,SAAS;AACnF;AAEO,SAAS,YAAY,WAA6B;AACvD,SAAO,cAAc,gBAAgB,cAAc;AACrD;AAEO,SAAS,SAAS,WAA6B;AACpD,SAAO,cAAc;AACvB;AAEO,SAAS,kBAAkB,WAA6B;AAC7D,SAAO,cAAc,UAAU,cAAc;AAC/C;",
5
+ "names": []
6
+ }
@@ -0,0 +1,28 @@
1
+ import * as React from "react";
2
+ import * as ResponderSystem from "./ResponderSystem";
3
+ export * from "./utils";
4
+ const emptyObject = {};
5
+ function useResponderEvents(hostRef, config = emptyObject) {
6
+ const id = React.useId(), isAttachedRef = React.useRef(!1);
7
+ React.useEffect(() => (ResponderSystem.attachListeners(), () => {
8
+ ResponderSystem.removeNode(id);
9
+ }), [id]), React.useEffect(() => {
10
+ const {
11
+ onMoveShouldSetResponder,
12
+ onMoveShouldSetResponderCapture,
13
+ onScrollShouldSetResponder,
14
+ onScrollShouldSetResponderCapture,
15
+ onSelectionChangeShouldSetResponder,
16
+ onSelectionChangeShouldSetResponderCapture,
17
+ onStartShouldSetResponder,
18
+ onStartShouldSetResponderCapture
19
+ } = config, requiresResponderSystem = onMoveShouldSetResponder != null || onMoveShouldSetResponderCapture != null || onScrollShouldSetResponder != null || onScrollShouldSetResponderCapture != null || onSelectionChangeShouldSetResponder != null || onSelectionChangeShouldSetResponderCapture != null || onStartShouldSetResponder != null || onStartShouldSetResponderCapture != null, node = hostRef.current;
20
+ requiresResponderSystem ? (ResponderSystem.addNode(id, node, config), isAttachedRef.current = !0) : isAttachedRef.current && (ResponderSystem.removeNode(id), isAttachedRef.current = !1);
21
+ }, [config, hostRef, id]), process.env.NODE_ENV === "development" && (React.useDebugValue({
22
+ isResponder: hostRef.current === ResponderSystem.getResponderNode()
23
+ }), React.useDebugValue(config));
24
+ }
25
+ export {
26
+ useResponderEvents
27
+ };
28
+ //# sourceMappingURL=useResponderEvents.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/useResponderEvents.ts"],
4
+ "mappings": "AAMA,YAAY,WAAW;AAEvB,YAAY,qBAAqB;AAEjC,cAAc;AAEd,MAAM,cAAc,CAAC;AAEd,SAAS,mBACd,SACA,SAA0C,aAC1C;AACA,QAAM,KAAK,MAAM,MAAM,GACjB,gBAAgB,MAAM,OAAO,EAAK;AAKxC,QAAM,UAAU,OACd,gBAAgB,gBAAgB,GACzB,MAAM;AACX,oBAAgB,WAAW,EAAE;AAAA,EAC/B,IACC,CAAC,EAAE,CAAC,GAGP,MAAM,UAAU,MAAM;AACpB,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,QAEE,0BACJ,4BAA4B,QAC5B,mCAAmC,QACnC,8BAA8B,QAC9B,qCAAqC,QACrC,uCAAuC,QACvC,8CAA8C,QAC9C,6BAA6B,QAC7B,oCAAoC,MAEhC,OAAO,QAAQ;AAErB,IAAI,2BACF,gBAAgB,QAAQ,IAAI,MAAM,MAAM,GACxC,cAAc,UAAU,MACf,cAAc,YACvB,gBAAgB,WAAW,EAAE,GAC7B,cAAc,UAAU;AAAA,EAE5B,GAAG,CAAC,QAAQ,SAAS,EAAE,CAAC,GAEpB,QAAQ,IAAI,aAAa,kBAC3B,MAAM,cAAc;AAAA,IAClB,aAAa,QAAQ,YAAY,gBAAgB,iBAAiB;AAAA,EACpE,CAAC,GACD,MAAM,cAAc,MAAM;AAE9B;",
5
+ "names": []
6
+ }
@@ -0,0 +1,87 @@
1
+ const keyName = "__reactResponderId", canUseDOM = !!(typeof window < "u" && window.document && window.document.createElement), getBoundingClientRect = (node) => {
2
+ if (node && node.nodeType === 1 && node.getBoundingClientRect)
3
+ return node.getBoundingClientRect();
4
+ };
5
+ function getEventPath(domEvent) {
6
+ if (domEvent.type === "selectionchange") {
7
+ const target = window.getSelection()?.anchorNode;
8
+ return composedPathFallback(target);
9
+ } else
10
+ return domEvent.composedPath != null ? domEvent.composedPath() : composedPathFallback(domEvent.target);
11
+ }
12
+ function composedPathFallback(target) {
13
+ const path = [];
14
+ for (; target != null && target !== document.body; )
15
+ path.push(target), target = target.parentNode;
16
+ return path;
17
+ }
18
+ function getResponderId(node) {
19
+ return node != null ? node[keyName] : null;
20
+ }
21
+ function setResponderId(node, id) {
22
+ node != null && (node[keyName] = id);
23
+ }
24
+ function getResponderPaths(domEvent) {
25
+ const idPath = [], nodePath = [], eventPath = getEventPath(domEvent);
26
+ for (let i = 0; i < eventPath.length; i++) {
27
+ const node = eventPath[i], id = getResponderId(node);
28
+ id != null && (idPath.push(id), nodePath.push(node));
29
+ }
30
+ return { idPath, nodePath };
31
+ }
32
+ function getLowestCommonAncestor(pathA, pathB) {
33
+ let pathALength = pathA.length, pathBLength = pathB.length;
34
+ if (
35
+ // If either path is empty
36
+ pathALength === 0 || pathBLength === 0 || // If the last elements aren't the same there can't be a common ancestor
37
+ // that is connected to the responder system
38
+ pathA[pathALength - 1] !== pathB[pathBLength - 1]
39
+ )
40
+ return null;
41
+ let itemA = pathA[0], indexA = 0, itemB = pathB[0], indexB = 0;
42
+ pathALength - pathBLength > 0 && (indexA = pathALength - pathBLength, itemA = pathA[indexA], pathALength = pathBLength), pathBLength - pathALength > 0 && (indexB = pathBLength - pathALength, itemB = pathB[indexB], pathBLength = pathALength);
43
+ let depth = pathALength;
44
+ for (; depth--; ) {
45
+ if (itemA === itemB)
46
+ return itemA;
47
+ itemA = pathA[indexA++], itemB = pathB[indexB++];
48
+ }
49
+ return null;
50
+ }
51
+ function hasTargetTouches(target, touches) {
52
+ if (!touches || touches.length === 0)
53
+ return !1;
54
+ for (let i = 0; i < touches.length; i++) {
55
+ const node = touches[i].target;
56
+ if (node != null && target.contains(node))
57
+ return !0;
58
+ }
59
+ return !1;
60
+ }
61
+ function hasValidSelection(domEvent) {
62
+ return domEvent.type === "selectionchange" ? isSelectionValid() : domEvent.type === "select";
63
+ }
64
+ function isPrimaryPointerDown(domEvent) {
65
+ const { altKey, button, buttons, ctrlKey, type } = domEvent, isTouch = type === "touchstart" || type === "touchmove", isPrimaryMouseDown = type === "mousedown" && (button === 0 || buttons === 1), isPrimaryMouseMove = type === "mousemove" && buttons === 1, noModifiers = altKey === !1 && ctrlKey === !1;
66
+ return !!(isTouch || isPrimaryMouseDown && noModifiers || isPrimaryMouseMove && noModifiers);
67
+ }
68
+ function isSelectionValid() {
69
+ const selection = window.getSelection();
70
+ if (!selection)
71
+ return !1;
72
+ const string = selection.toString(), anchorNode = selection.anchorNode, focusNode = selection.focusNode, isTextNode = anchorNode && anchorNode.nodeType === window.Node.TEXT_NODE || focusNode && focusNode.nodeType === window.Node.TEXT_NODE;
73
+ return string.length >= 1 && string !== `
74
+ ` && !!isTextNode;
75
+ }
76
+ export {
77
+ canUseDOM,
78
+ getBoundingClientRect,
79
+ getLowestCommonAncestor,
80
+ getResponderPaths,
81
+ hasTargetTouches,
82
+ hasValidSelection,
83
+ isPrimaryPointerDown,
84
+ isSelectionValid,
85
+ setResponderId
86
+ };
87
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils.ts"],
4
+ "mappings": "AAMA,MAAM,UAAU,sBAEH,YAAY,CAAC,EACxB,OAAO,SAAW,OAClB,OAAO,YACP,OAAO,SAAS,gBAGL,wBAAwB,CAAC,SAA6C;AACjF,MAAK,QACD,KAAK,aAAa,KAClB,KAAK;AACP,WAAO,KAAK,sBAAsB;AAEtC;AAEA,SAAS,aAAa,UAA2B;AAI/C,MAAI,SAAS,SAAS,mBAAmB;AACvC,UAAM,SAAS,OAAO,aAAa,GAAG;AACtC,WAAO,qBAAqB,MAAM;AAAA,EACpC;AAKE,WAHE,SAAS,gBAAgB,OACrB,SAAS,aAAa,IACtB,qBAAqB,SAAS,MAAM;AAG9C;AAEA,SAAS,qBAAqB,QAAyB;AACrD,QAAM,OAAc,CAAC;AACrB,SAAO,UAAU,QAAQ,WAAW,SAAS;AAC3C,SAAK,KAAK,MAAM,GAChB,SAAS,OAAO;AAElB,SAAO;AACT;AAKA,SAAS,eAAe,MAA0B;AAChD,SAAI,QAAQ,OACH,KAAK,OAAO,IAEd;AACT;AAKO,SAAS,eAAe,MAAW,IAAS;AACjD,EAAI,QAAQ,SACV,KAAK,OAAO,IAAI;AAEpB;AAKO,SAAS,kBAAkB,UAGhC;AACA,QAAM,SAAgB,CAAC,GACjB,WAAkB,CAAC,GACnB,YAAY,aAAa,QAAQ;AACvC,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAM,OAAO,UAAU,CAAC,GAClB,KAAK,eAAe,IAAI;AAC9B,IAAI,MAAM,SACR,OAAO,KAAK,EAAE,GACd,SAAS,KAAK,IAAI;AAAA,EAEtB;AACA,SAAO,EAAE,QAAQ,SAAS;AAC5B;AAKO,SAAS,wBAAwB,OAAmB,OAAwB;AACjF,MAAI,cAAc,MAAM,QACpB,cAAc,MAAM;AACxB;AAAA;AAAA,IAEE,gBAAgB,KAChB,gBAAgB;AAAA;AAAA,IAGhB,MAAM,cAAc,CAAC,MAAM,MAAM,cAAc,CAAC;AAAA;AAEhD,WAAO;AAGT,MAAI,QAAQ,MAAM,CAAC,GACf,SAAS,GACT,QAAQ,MAAM,CAAC,GACf,SAAS;AAGb,EAAI,cAAc,cAAc,MAC9B,SAAS,cAAc,aACvB,QAAQ,MAAM,MAAM,GACpB,cAAc,cAIZ,cAAc,cAAc,MAC9B,SAAS,cAAc,aACvB,QAAQ,MAAM,MAAM,GACpB,cAAc;AAIhB,MAAI,QAAQ;AACZ,SAAO,WAAS;AACd,QAAI,UAAU;AACZ,aAAO;AAET,YAAQ,MAAM,QAAQ,GACtB,QAAQ,MAAM,QAAQ;AAAA,EACxB;AACA,SAAO;AACT;AAMO,SAAS,iBAAiB,QAAa,SAAuB;AACnE,MAAI,CAAC,WAAW,QAAQ,WAAW;AACjC,WAAO;AAET,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,OAAO,QAAQ,CAAC,EAAE;AACxB,QAAI,QAAQ,QACN,OAAO,SAAS,IAAI;AACtB,aAAO;AAAA,EAGb;AACA,SAAO;AACT;AAMO,SAAS,kBAAkB,UAAwB;AACxD,SAAI,SAAS,SAAS,oBACb,iBAAiB,IAEnB,SAAS,SAAS;AAC3B;AAKO,SAAS,qBAAqB,UAAwB;AAC3D,QAAM,EAAE,QAAQ,QAAQ,SAAS,SAAS,KAAK,IAAI,UAC7C,UAAU,SAAS,gBAAgB,SAAS,aAC5C,qBAAqB,SAAS,gBAAgB,WAAW,KAAK,YAAY,IAC1E,qBAAqB,SAAS,eAAe,YAAY,GACzD,cAAc,WAAW,MAAS,YAAY;AAEpD,SACE,cACC,sBAAsB,eACtB,sBAAsB;AAK3B;AAEO,SAAS,mBAA4B;AAC1C,QAAM,YAAY,OAAO,aAAa;AACtC,MAAI,CAAC;AAAW,WAAO;AACvB,QAAM,SAAS,UAAU,SAAS,GAC5B,aAAa,UAAU,YACvB,YAAY,UAAU,WACtB,aACH,cAAc,WAAW,aAAa,OAAO,KAAK,aAClD,aAAa,UAAU,aAAa,OAAO,KAAK;AACnD,SAAO,OAAO,UAAU,KAAK,WAAW;AAAA,KAAQ,CAAC,CAAC;AACpD;",
5
+ "names": []
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/react-native-use-responder-events",
3
- "version": "1.74.3",
3
+ "version": "1.74.4",
4
4
  "types": "./types/index.d.ts",
5
5
  "main": "dist/cjs",
6
6
  "module": "dist/esm",
@@ -29,7 +29,7 @@
29
29
  "react": "*"
30
30
  },
31
31
  "devDependencies": {
32
- "@tamagui/build": "1.74.3",
32
+ "@tamagui/build": "1.74.4",
33
33
  "react": "^18.2.0"
34
34
  },
35
35
  "publishConfig": {