@hanzogui/react-native-use-pressable 2.0.0
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/LICENSE +21 -0
- package/dist/cjs/PressResponder.cjs +271 -0
- package/dist/cjs/PressResponder.native.js +333 -0
- package/dist/cjs/PressResponder.native.js.map +1 -0
- package/dist/cjs/index.cjs +48 -0
- package/dist/cjs/index.native.js +53 -0
- package/dist/cjs/index.native.js.map +1 -0
- package/dist/esm/PressResponder.mjs +248 -0
- package/dist/esm/PressResponder.mjs.map +1 -0
- package/dist/esm/PressResponder.native.js +307 -0
- package/dist/esm/PressResponder.native.js.map +1 -0
- package/dist/esm/index.js +14 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/index.mjs +14 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +16 -0
- package/dist/esm/index.native.js.map +1 -0
- package/package.json +42 -0
- package/src/PressResponder.ts +590 -0
- package/src/index.ts +39 -0
- package/types/PressResponder.d.ts +133 -0
- package/types/PressResponder.d.ts.map +1 -0
- package/types/index.d.ts +3 -0
- package/types/index.d.ts.map +1 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2020 Nate Wienert
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: !0
|
|
9
|
+
});
|
|
10
|
+
},
|
|
11
|
+
__copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
|
|
13
|
+
get: () => from[key],
|
|
14
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
|
+
});
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
19
|
+
value: !0
|
|
20
|
+
}), mod);
|
|
21
|
+
var PressResponder_exports = {};
|
|
22
|
+
__export(PressResponder_exports, {
|
|
23
|
+
PressResponder: () => PressResponder
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(PressResponder_exports);
|
|
26
|
+
const DELAY = "DELAY",
|
|
27
|
+
ERROR = "ERROR",
|
|
28
|
+
LONG_PRESS_DETECTED = "LONG_PRESS_DETECTED",
|
|
29
|
+
NOT_RESPONDER = "NOT_RESPONDER",
|
|
30
|
+
RESPONDER_ACTIVE_LONG_PRESS_START = "RESPONDER_ACTIVE_LONG_PRESS_START",
|
|
31
|
+
RESPONDER_ACTIVE_PRESS_START = "RESPONDER_ACTIVE_PRESS_START",
|
|
32
|
+
RESPONDER_INACTIVE_PRESS_START = "RESPONDER_INACTIVE_PRESS_START",
|
|
33
|
+
RESPONDER_GRANT = "RESPONDER_GRANT",
|
|
34
|
+
RESPONDER_RELEASE = "RESPONDER_RELEASE",
|
|
35
|
+
RESPONDER_TERMINATED = "RESPONDER_TERMINATED",
|
|
36
|
+
Transitions = Object.freeze({
|
|
37
|
+
NOT_RESPONDER: {
|
|
38
|
+
DELAY: ERROR,
|
|
39
|
+
RESPONDER_GRANT: RESPONDER_INACTIVE_PRESS_START,
|
|
40
|
+
RESPONDER_RELEASE: ERROR,
|
|
41
|
+
RESPONDER_TERMINATED: ERROR,
|
|
42
|
+
LONG_PRESS_DETECTED: ERROR
|
|
43
|
+
},
|
|
44
|
+
RESPONDER_INACTIVE_PRESS_START: {
|
|
45
|
+
DELAY: RESPONDER_ACTIVE_PRESS_START,
|
|
46
|
+
RESPONDER_GRANT: ERROR,
|
|
47
|
+
RESPONDER_RELEASE: NOT_RESPONDER,
|
|
48
|
+
RESPONDER_TERMINATED: NOT_RESPONDER,
|
|
49
|
+
LONG_PRESS_DETECTED: ERROR
|
|
50
|
+
},
|
|
51
|
+
RESPONDER_ACTIVE_PRESS_START: {
|
|
52
|
+
DELAY: ERROR,
|
|
53
|
+
RESPONDER_GRANT: ERROR,
|
|
54
|
+
RESPONDER_RELEASE: NOT_RESPONDER,
|
|
55
|
+
RESPONDER_TERMINATED: NOT_RESPONDER,
|
|
56
|
+
LONG_PRESS_DETECTED: RESPONDER_ACTIVE_LONG_PRESS_START
|
|
57
|
+
},
|
|
58
|
+
RESPONDER_ACTIVE_LONG_PRESS_START: {
|
|
59
|
+
DELAY: ERROR,
|
|
60
|
+
RESPONDER_GRANT: ERROR,
|
|
61
|
+
RESPONDER_RELEASE: NOT_RESPONDER,
|
|
62
|
+
RESPONDER_TERMINATED: NOT_RESPONDER,
|
|
63
|
+
LONG_PRESS_DETECTED: RESPONDER_ACTIVE_LONG_PRESS_START
|
|
64
|
+
},
|
|
65
|
+
ERROR: {
|
|
66
|
+
DELAY: NOT_RESPONDER,
|
|
67
|
+
RESPONDER_GRANT: RESPONDER_INACTIVE_PRESS_START,
|
|
68
|
+
RESPONDER_RELEASE: NOT_RESPONDER,
|
|
69
|
+
RESPONDER_TERMINATED: NOT_RESPONDER,
|
|
70
|
+
LONG_PRESS_DETECTED: NOT_RESPONDER
|
|
71
|
+
}
|
|
72
|
+
}),
|
|
73
|
+
isActiveSignal = signal => signal === RESPONDER_ACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_LONG_PRESS_START,
|
|
74
|
+
isButtonRole = element => element.getAttribute("role") === "button",
|
|
75
|
+
isPressStartSignal = signal => signal === RESPONDER_INACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_LONG_PRESS_START,
|
|
76
|
+
isTerminalSignal = signal => signal === RESPONDER_TERMINATED || signal === RESPONDER_RELEASE,
|
|
77
|
+
isValidKeyPress = event => {
|
|
78
|
+
const key = event.key,
|
|
79
|
+
role = event.target.getAttribute("role");
|
|
80
|
+
return key === "Enter" || (key === " " || key === "Spacebar") && role === "button";
|
|
81
|
+
},
|
|
82
|
+
DEFAULT_LONG_PRESS_DELAY_MS = 450,
|
|
83
|
+
DEFAULT_PRESS_DELAY_MS = 50;
|
|
84
|
+
class PressResponder {
|
|
85
|
+
_touchActivatePosition = null;
|
|
86
|
+
_pressDelayTimeout = 0;
|
|
87
|
+
_selectionTerminated = !1;
|
|
88
|
+
_isPointerTouch = !1;
|
|
89
|
+
_longPressDelayTimeout = 0;
|
|
90
|
+
_longPressDispatched = !1;
|
|
91
|
+
_pressOutDelayTimeout = 0;
|
|
92
|
+
_touchState = NOT_RESPONDER;
|
|
93
|
+
_config = null;
|
|
94
|
+
_eventHandlers = null;
|
|
95
|
+
constructor(config) {
|
|
96
|
+
this.configure(config);
|
|
97
|
+
}
|
|
98
|
+
configure(config) {
|
|
99
|
+
this._config = config;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Resets any pending timers. This should be called on unmount.
|
|
103
|
+
*/
|
|
104
|
+
reset() {
|
|
105
|
+
this._cancelLongPressDelayTimeout(), this._cancelPressDelayTimeout(), this._cancelPressOutDelayTimeout();
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Returns a set of props to spread into the interactive element.
|
|
109
|
+
*/
|
|
110
|
+
getEventHandlers() {
|
|
111
|
+
return this._eventHandlers == null && (this._eventHandlers = this._createEventHandlers()), this._eventHandlers;
|
|
112
|
+
}
|
|
113
|
+
_createEventHandlers() {
|
|
114
|
+
const start = (event, shouldDelay) => {
|
|
115
|
+
event.persist(), this._cancelPressOutDelayTimeout(), this._longPressDispatched = !1, this._selectionTerminated = !1, this._touchState = NOT_RESPONDER, this._isPointerTouch = event.nativeEvent.type === "touchstart", this._receiveSignal(RESPONDER_GRANT, event);
|
|
116
|
+
const delayPressStart = normalizeDelay(this._config.delayPressStart, 0, DEFAULT_PRESS_DELAY_MS);
|
|
117
|
+
shouldDelay !== !1 && delayPressStart > 0 ? this._pressDelayTimeout = setTimeout(() => {
|
|
118
|
+
this._receiveSignal(DELAY, event);
|
|
119
|
+
}, delayPressStart) : this._receiveSignal(DELAY, event);
|
|
120
|
+
const delayLongPress = normalizeDelay(this._config.delayLongPress, 10, DEFAULT_LONG_PRESS_DELAY_MS);
|
|
121
|
+
this._longPressDelayTimeout = setTimeout(() => {
|
|
122
|
+
this._handleLongPress(event);
|
|
123
|
+
}, delayLongPress + delayPressStart);
|
|
124
|
+
},
|
|
125
|
+
end = event => {
|
|
126
|
+
this._receiveSignal(RESPONDER_RELEASE, event);
|
|
127
|
+
},
|
|
128
|
+
keyupHandler = event => {
|
|
129
|
+
const onPress = this._config.onPress,
|
|
130
|
+
target = event.target;
|
|
131
|
+
if (this._touchState !== NOT_RESPONDER && isValidKeyPress(event)) {
|
|
132
|
+
end(event), document.removeEventListener("keyup", keyupHandler);
|
|
133
|
+
const role = target.getAttribute("role"),
|
|
134
|
+
elementType = target.tagName.toLowerCase(),
|
|
135
|
+
isNativeInteractiveElement = role === "link" || elementType === "a" || elementType === "button" || elementType === "input" || elementType === "select" || elementType === "textarea";
|
|
136
|
+
onPress != null && !isNativeInteractiveElement && onPress(event);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
return {
|
|
140
|
+
onStartShouldSetResponder: event => {
|
|
141
|
+
const disabled = this._config.disabled;
|
|
142
|
+
return disabled && isButtonRole(event.currentTarget) && event.stopPropagation(), disabled == null ? !0 : !disabled;
|
|
143
|
+
},
|
|
144
|
+
onKeyDown: event => {
|
|
145
|
+
const disabled = this._config.disabled,
|
|
146
|
+
key = event.key,
|
|
147
|
+
target = event.target;
|
|
148
|
+
if (!disabled && isValidKeyPress(event)) {
|
|
149
|
+
this._touchState === NOT_RESPONDER && (start(event, !1), document.addEventListener("keyup", keyupHandler));
|
|
150
|
+
const role = target.getAttribute("role");
|
|
151
|
+
(key === " " || key === "Spacebar") && (role === "button" || role === "menuitem") && event.preventDefault(), event.stopPropagation();
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
onResponderGrant: event => start(event),
|
|
155
|
+
onResponderMove: event => {
|
|
156
|
+
this._config.onPressMove != null && this._config.onPressMove(event);
|
|
157
|
+
const touch = getTouchFromResponderEvent(event);
|
|
158
|
+
if (this._touchActivatePosition != null) {
|
|
159
|
+
const deltaX = this._touchActivatePosition.pageX - touch.pageX,
|
|
160
|
+
deltaY = this._touchActivatePosition.pageY - touch.pageY;
|
|
161
|
+
Math.hypot(deltaX, deltaY) > 10 && this._cancelLongPressDelayTimeout();
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
onResponderRelease: event => end(event),
|
|
165
|
+
onResponderTerminate: event => {
|
|
166
|
+
event.nativeEvent.type === "selectionchange" && (this._selectionTerminated = !0), this._receiveSignal(RESPONDER_TERMINATED, event);
|
|
167
|
+
},
|
|
168
|
+
onResponderTerminationRequest: event => {
|
|
169
|
+
const _this$_config = this._config,
|
|
170
|
+
cancelable = _this$_config.cancelable,
|
|
171
|
+
disabled = _this$_config.disabled,
|
|
172
|
+
onLongPress = _this$_config.onLongPress;
|
|
173
|
+
return !disabled && onLongPress != null && this._isPointerTouch && event.nativeEvent.type === "contextmenu" ? !1 : cancelable ?? !0;
|
|
174
|
+
},
|
|
175
|
+
// NOTE: this diverges from react-native in 3 significant ways:
|
|
176
|
+
// * The `onPress` callback is not connected to the responder system (the native
|
|
177
|
+
// `click` event must be used but is dispatched in many scenarios where no pointers
|
|
178
|
+
// are on the screen.) Therefore, it's possible for `onPress` to be called without
|
|
179
|
+
// `onPress{Start,End}` being called first.
|
|
180
|
+
// * The `onPress` callback is only be called on the first ancestor of the native
|
|
181
|
+
// `click` target that is using the PressResponder.
|
|
182
|
+
// * The event's `nativeEvent` is a `MouseEvent` not a `TouchEvent`.
|
|
183
|
+
onClick: event => {
|
|
184
|
+
const _this$_config2 = this._config,
|
|
185
|
+
disabled = _this$_config2.disabled,
|
|
186
|
+
onPress = _this$_config2.onPress;
|
|
187
|
+
disabled ? isButtonRole(event.currentTarget) && event.stopPropagation() : (event.stopPropagation(), this._longPressDispatched || this._selectionTerminated ? event.preventDefault() : onPress != null && event.altKey === !1 && onPress(event));
|
|
188
|
+
},
|
|
189
|
+
// If `onLongPress` is provided and a touch pointer is being used, prevent the
|
|
190
|
+
// default context menu from opening.
|
|
191
|
+
onContextMenu: event => {
|
|
192
|
+
const _this$_config3 = this._config,
|
|
193
|
+
disabled = _this$_config3.disabled,
|
|
194
|
+
onLongPress = _this$_config3.onLongPress;
|
|
195
|
+
disabled ? isButtonRole(event.currentTarget) && event.stopPropagation() : onLongPress != null && this._isPointerTouch && !event.defaultPrevented && (event.preventDefault(), event.stopPropagation());
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Receives a state machine signal, performs side effects of the transition
|
|
201
|
+
* and stores the new state. Validates the transition as well.
|
|
202
|
+
*/
|
|
203
|
+
_receiveSignal(signal, event) {
|
|
204
|
+
const prevState = this._touchState;
|
|
205
|
+
let nextState = null;
|
|
206
|
+
Transitions[prevState] != null && (nextState = Transitions[prevState][signal]), !(this._touchState === NOT_RESPONDER && signal === RESPONDER_RELEASE) && (nextState == null || nextState === ERROR ? console.error(`PressResponder: Invalid signal ${signal} for state ${prevState} on responder`) : prevState !== nextState && (this._performTransitionSideEffects(prevState, nextState, signal, event), this._touchState = nextState));
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Performs a transition between touchable states and identify any activations
|
|
210
|
+
* or deactivations (and callback invocations).
|
|
211
|
+
*/
|
|
212
|
+
_performTransitionSideEffects(prevState, nextState, signal, event) {
|
|
213
|
+
if (isTerminalSignal(signal) && (setTimeout(() => {
|
|
214
|
+
this._isPointerTouch = !1;
|
|
215
|
+
}, 0), this._touchActivatePosition = null, this._cancelLongPressDelayTimeout()), isPressStartSignal(prevState) && signal === LONG_PRESS_DETECTED) {
|
|
216
|
+
const onLongPress = this._config.onLongPress;
|
|
217
|
+
onLongPress != null && event.nativeEvent.key == null && (onLongPress(event), this._longPressDispatched = !0);
|
|
218
|
+
}
|
|
219
|
+
const isPrevActive = isActiveSignal(prevState),
|
|
220
|
+
isNextActive = isActiveSignal(nextState);
|
|
221
|
+
if (!isPrevActive && isNextActive ? this._activate(event) : isPrevActive && !isNextActive && this._deactivate(event), isPressStartSignal(prevState) && signal === RESPONDER_RELEASE) {
|
|
222
|
+
const _this$_config4 = this._config,
|
|
223
|
+
_onLongPress = _this$_config4.onLongPress;
|
|
224
|
+
_this$_config4.onPress != null && (_onLongPress != null && prevState === RESPONDER_ACTIVE_LONG_PRESS_START || isNextActive || isPrevActive || (this._activate(event), this._deactivate(event)));
|
|
225
|
+
}
|
|
226
|
+
this._cancelPressDelayTimeout();
|
|
227
|
+
}
|
|
228
|
+
_activate(event) {
|
|
229
|
+
const _this$_config5 = this._config,
|
|
230
|
+
onPressChange = _this$_config5.onPressChange,
|
|
231
|
+
onPressStart = _this$_config5.onPressStart,
|
|
232
|
+
touch = getTouchFromResponderEvent(event);
|
|
233
|
+
this._touchActivatePosition = {
|
|
234
|
+
pageX: touch.pageX,
|
|
235
|
+
pageY: touch.pageY
|
|
236
|
+
}, onPressStart?.(event), onPressChange?.(!0);
|
|
237
|
+
}
|
|
238
|
+
_deactivate(event) {
|
|
239
|
+
const _this$_config6 = this._config,
|
|
240
|
+
onPressChange = _this$_config6.onPressChange,
|
|
241
|
+
onPressEnd = _this$_config6.onPressEnd;
|
|
242
|
+
function end() {
|
|
243
|
+
onPressEnd?.(event), onPressChange?.(!1);
|
|
244
|
+
}
|
|
245
|
+
const delayPressEnd = normalizeDelay(this._config.delayPressEnd);
|
|
246
|
+
delayPressEnd > 0 ? this._pressOutDelayTimeout = setTimeout(() => {
|
|
247
|
+
end();
|
|
248
|
+
}, delayPressEnd) : end();
|
|
249
|
+
}
|
|
250
|
+
_handleLongPress(event) {
|
|
251
|
+
(this._touchState === RESPONDER_ACTIVE_PRESS_START || this._touchState === RESPONDER_ACTIVE_LONG_PRESS_START) && this._receiveSignal(LONG_PRESS_DETECTED, event);
|
|
252
|
+
}
|
|
253
|
+
_cancelLongPressDelayTimeout() {
|
|
254
|
+
this._longPressDelayTimeout != null && (clearTimeout(this._longPressDelayTimeout), this._longPressDelayTimeout = null);
|
|
255
|
+
}
|
|
256
|
+
_cancelPressDelayTimeout() {
|
|
257
|
+
this._pressDelayTimeout != null && (clearTimeout(this._pressDelayTimeout), this._pressDelayTimeout = null);
|
|
258
|
+
}
|
|
259
|
+
_cancelPressOutDelayTimeout() {
|
|
260
|
+
this._pressOutDelayTimeout != null && (clearTimeout(this._pressOutDelayTimeout), this._pressOutDelayTimeout = null);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
function normalizeDelay(delay, min, fallback) {
|
|
264
|
+
return min === void 0 && (min = 0), fallback === void 0 && (fallback = 0), Math.max(min, delay ?? fallback);
|
|
265
|
+
}
|
|
266
|
+
function getTouchFromResponderEvent(event) {
|
|
267
|
+
const _event$nativeEvent = event.nativeEvent,
|
|
268
|
+
changedTouches = _event$nativeEvent.changedTouches,
|
|
269
|
+
touches = _event$nativeEvent.touches;
|
|
270
|
+
return touches != null && touches.length > 0 ? touches[0] : changedTouches != null && changedTouches.length > 0 ? changedTouches[0] : event.nativeEvent;
|
|
271
|
+
}
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: !0
|
|
11
|
+
});
|
|
12
|
+
},
|
|
13
|
+
__copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from == "object" || typeof from == "function") for (let key of __getOwnPropNames(from)) !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, {
|
|
15
|
+
get: () => from[key],
|
|
16
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
17
|
+
});
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
21
|
+
value: !0
|
|
22
|
+
}), mod);
|
|
23
|
+
var PressResponder_exports = {};
|
|
24
|
+
__export(PressResponder_exports, {
|
|
25
|
+
PressResponder: () => PressResponder
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(PressResponder_exports);
|
|
28
|
+
function _class_call_check(instance, Constructor) {
|
|
29
|
+
if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
|
|
30
|
+
}
|
|
31
|
+
function _defineProperties(target, props) {
|
|
32
|
+
for (var i = 0; i < props.length; i++) {
|
|
33
|
+
var descriptor = props[i];
|
|
34
|
+
descriptor.enumerable = descriptor.enumerable || !1, descriptor.configurable = !0, "value" in descriptor && (descriptor.writable = !0), Object.defineProperty(target, descriptor.key, descriptor);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function _create_class(Constructor, protoProps, staticProps) {
|
|
38
|
+
return protoProps && _defineProperties(Constructor.prototype, protoProps), staticProps && _defineProperties(Constructor, staticProps), Constructor;
|
|
39
|
+
}
|
|
40
|
+
function _define_property(obj, key, value) {
|
|
41
|
+
return key in obj ? Object.defineProperty(obj, key, {
|
|
42
|
+
value,
|
|
43
|
+
enumerable: !0,
|
|
44
|
+
configurable: !0,
|
|
45
|
+
writable: !0
|
|
46
|
+
}) : obj[key] = value, obj;
|
|
47
|
+
}
|
|
48
|
+
var DELAY = "DELAY",
|
|
49
|
+
ERROR = "ERROR",
|
|
50
|
+
LONG_PRESS_DETECTED = "LONG_PRESS_DETECTED",
|
|
51
|
+
NOT_RESPONDER = "NOT_RESPONDER",
|
|
52
|
+
RESPONDER_ACTIVE_LONG_PRESS_START = "RESPONDER_ACTIVE_LONG_PRESS_START",
|
|
53
|
+
RESPONDER_ACTIVE_PRESS_START = "RESPONDER_ACTIVE_PRESS_START",
|
|
54
|
+
RESPONDER_INACTIVE_PRESS_START = "RESPONDER_INACTIVE_PRESS_START",
|
|
55
|
+
RESPONDER_GRANT = "RESPONDER_GRANT",
|
|
56
|
+
RESPONDER_RELEASE = "RESPONDER_RELEASE",
|
|
57
|
+
RESPONDER_TERMINATED = "RESPONDER_TERMINATED",
|
|
58
|
+
Transitions = Object.freeze({
|
|
59
|
+
NOT_RESPONDER: {
|
|
60
|
+
DELAY: ERROR,
|
|
61
|
+
RESPONDER_GRANT: RESPONDER_INACTIVE_PRESS_START,
|
|
62
|
+
RESPONDER_RELEASE: ERROR,
|
|
63
|
+
RESPONDER_TERMINATED: ERROR,
|
|
64
|
+
LONG_PRESS_DETECTED: ERROR
|
|
65
|
+
},
|
|
66
|
+
RESPONDER_INACTIVE_PRESS_START: {
|
|
67
|
+
DELAY: RESPONDER_ACTIVE_PRESS_START,
|
|
68
|
+
RESPONDER_GRANT: ERROR,
|
|
69
|
+
RESPONDER_RELEASE: NOT_RESPONDER,
|
|
70
|
+
RESPONDER_TERMINATED: NOT_RESPONDER,
|
|
71
|
+
LONG_PRESS_DETECTED: ERROR
|
|
72
|
+
},
|
|
73
|
+
RESPONDER_ACTIVE_PRESS_START: {
|
|
74
|
+
DELAY: ERROR,
|
|
75
|
+
RESPONDER_GRANT: ERROR,
|
|
76
|
+
RESPONDER_RELEASE: NOT_RESPONDER,
|
|
77
|
+
RESPONDER_TERMINATED: NOT_RESPONDER,
|
|
78
|
+
LONG_PRESS_DETECTED: RESPONDER_ACTIVE_LONG_PRESS_START
|
|
79
|
+
},
|
|
80
|
+
RESPONDER_ACTIVE_LONG_PRESS_START: {
|
|
81
|
+
DELAY: ERROR,
|
|
82
|
+
RESPONDER_GRANT: ERROR,
|
|
83
|
+
RESPONDER_RELEASE: NOT_RESPONDER,
|
|
84
|
+
RESPONDER_TERMINATED: NOT_RESPONDER,
|
|
85
|
+
LONG_PRESS_DETECTED: RESPONDER_ACTIVE_LONG_PRESS_START
|
|
86
|
+
},
|
|
87
|
+
ERROR: {
|
|
88
|
+
DELAY: NOT_RESPONDER,
|
|
89
|
+
RESPONDER_GRANT: RESPONDER_INACTIVE_PRESS_START,
|
|
90
|
+
RESPONDER_RELEASE: NOT_RESPONDER,
|
|
91
|
+
RESPONDER_TERMINATED: NOT_RESPONDER,
|
|
92
|
+
LONG_PRESS_DETECTED: NOT_RESPONDER
|
|
93
|
+
}
|
|
94
|
+
}),
|
|
95
|
+
isActiveSignal = function (signal) {
|
|
96
|
+
return signal === RESPONDER_ACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_LONG_PRESS_START;
|
|
97
|
+
},
|
|
98
|
+
isButtonRole = function (element) {
|
|
99
|
+
return element.getAttribute("role") === "button";
|
|
100
|
+
},
|
|
101
|
+
isPressStartSignal = function (signal) {
|
|
102
|
+
return signal === RESPONDER_INACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_LONG_PRESS_START;
|
|
103
|
+
},
|
|
104
|
+
isTerminalSignal = function (signal) {
|
|
105
|
+
return signal === RESPONDER_TERMINATED || signal === RESPONDER_RELEASE;
|
|
106
|
+
},
|
|
107
|
+
isValidKeyPress = function (event) {
|
|
108
|
+
var key = event.key,
|
|
109
|
+
target = event.target,
|
|
110
|
+
role = target.getAttribute("role"),
|
|
111
|
+
isSpacebar = key === " " || key === "Spacebar";
|
|
112
|
+
return key === "Enter" || isSpacebar && role === "button";
|
|
113
|
+
},
|
|
114
|
+
DEFAULT_LONG_PRESS_DELAY_MS = 450,
|
|
115
|
+
DEFAULT_PRESS_DELAY_MS = 50,
|
|
116
|
+
PressResponder = /* @__PURE__ */function () {
|
|
117
|
+
"use strict";
|
|
118
|
+
|
|
119
|
+
function PressResponder2(config) {
|
|
120
|
+
_class_call_check(this, PressResponder2), _define_property(this, "_touchActivatePosition", null), _define_property(this, "_pressDelayTimeout", 0), _define_property(this, "_selectionTerminated", !1), _define_property(this, "_isPointerTouch", !1), _define_property(this, "_longPressDelayTimeout", 0), _define_property(this, "_longPressDispatched", !1), _define_property(this, "_pressOutDelayTimeout", 0), _define_property(this, "_touchState", NOT_RESPONDER), _define_property(this, "_config", null), _define_property(this, "_eventHandlers", null), this.configure(config);
|
|
121
|
+
}
|
|
122
|
+
return _create_class(PressResponder2, [{
|
|
123
|
+
key: "configure",
|
|
124
|
+
value: function (config) {
|
|
125
|
+
this._config = config;
|
|
126
|
+
}
|
|
127
|
+
}, {
|
|
128
|
+
/**
|
|
129
|
+
* Resets any pending timers. This should be called on unmount.
|
|
130
|
+
*/
|
|
131
|
+
key: "reset",
|
|
132
|
+
value: function () {
|
|
133
|
+
this._cancelLongPressDelayTimeout(), this._cancelPressDelayTimeout(), this._cancelPressOutDelayTimeout();
|
|
134
|
+
}
|
|
135
|
+
}, {
|
|
136
|
+
/**
|
|
137
|
+
* Returns a set of props to spread into the interactive element.
|
|
138
|
+
*/
|
|
139
|
+
key: "getEventHandlers",
|
|
140
|
+
value: function () {
|
|
141
|
+
return this._eventHandlers == null && (this._eventHandlers = this._createEventHandlers()), this._eventHandlers;
|
|
142
|
+
}
|
|
143
|
+
}, {
|
|
144
|
+
key: "_createEventHandlers",
|
|
145
|
+
value: function () {
|
|
146
|
+
var _this = this,
|
|
147
|
+
start = function (event, shouldDelay) {
|
|
148
|
+
event.persist(), _this._cancelPressOutDelayTimeout(), _this._longPressDispatched = !1, _this._selectionTerminated = !1, _this._touchState = NOT_RESPONDER, _this._isPointerTouch = event.nativeEvent.type === "touchstart", _this._receiveSignal(RESPONDER_GRANT, event);
|
|
149
|
+
var delayPressStart = normalizeDelay(_this._config.delayPressStart, 0, DEFAULT_PRESS_DELAY_MS);
|
|
150
|
+
shouldDelay !== !1 && delayPressStart > 0 ? _this._pressDelayTimeout = setTimeout(function () {
|
|
151
|
+
_this._receiveSignal(DELAY, event);
|
|
152
|
+
}, delayPressStart) : _this._receiveSignal(DELAY, event);
|
|
153
|
+
var delayLongPress = normalizeDelay(_this._config.delayLongPress, 10, DEFAULT_LONG_PRESS_DELAY_MS);
|
|
154
|
+
_this._longPressDelayTimeout = setTimeout(function () {
|
|
155
|
+
_this._handleLongPress(event);
|
|
156
|
+
}, delayLongPress + delayPressStart);
|
|
157
|
+
},
|
|
158
|
+
end = function (event) {
|
|
159
|
+
_this._receiveSignal(RESPONDER_RELEASE, event);
|
|
160
|
+
},
|
|
161
|
+
keyupHandler = function (event) {
|
|
162
|
+
var onPress = _this._config.onPress,
|
|
163
|
+
target = event.target;
|
|
164
|
+
if (_this._touchState !== NOT_RESPONDER && isValidKeyPress(event)) {
|
|
165
|
+
end(event), document.removeEventListener("keyup", keyupHandler);
|
|
166
|
+
var role = target.getAttribute("role"),
|
|
167
|
+
elementType = target.tagName.toLowerCase(),
|
|
168
|
+
isNativeInteractiveElement = role === "link" || elementType === "a" || elementType === "button" || elementType === "input" || elementType === "select" || elementType === "textarea";
|
|
169
|
+
onPress != null && !isNativeInteractiveElement && onPress(event);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
return {
|
|
173
|
+
onStartShouldSetResponder: function (event) {
|
|
174
|
+
var disabled = _this._config.disabled;
|
|
175
|
+
return disabled && isButtonRole(event.currentTarget) && event.stopPropagation(), disabled == null ? !0 : !disabled;
|
|
176
|
+
},
|
|
177
|
+
onKeyDown: function (event) {
|
|
178
|
+
var disabled = _this._config.disabled,
|
|
179
|
+
key = event.key,
|
|
180
|
+
target = event.target;
|
|
181
|
+
if (!disabled && isValidKeyPress(event)) {
|
|
182
|
+
_this._touchState === NOT_RESPONDER && (start(event, !1), document.addEventListener("keyup", keyupHandler));
|
|
183
|
+
var role = target.getAttribute("role"),
|
|
184
|
+
isSpacebarKey = key === " " || key === "Spacebar",
|
|
185
|
+
_isButtonRole = role === "button" || role === "menuitem";
|
|
186
|
+
isSpacebarKey && _isButtonRole && event.preventDefault(), event.stopPropagation();
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
onResponderGrant: function (event) {
|
|
190
|
+
return start(event);
|
|
191
|
+
},
|
|
192
|
+
onResponderMove: function (event) {
|
|
193
|
+
_this._config.onPressMove != null && _this._config.onPressMove(event);
|
|
194
|
+
var touch = getTouchFromResponderEvent(event);
|
|
195
|
+
if (_this._touchActivatePosition != null) {
|
|
196
|
+
var deltaX = _this._touchActivatePosition.pageX - touch.pageX,
|
|
197
|
+
deltaY = _this._touchActivatePosition.pageY - touch.pageY;
|
|
198
|
+
Math.hypot(deltaX, deltaY) > 10 && _this._cancelLongPressDelayTimeout();
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
onResponderRelease: function (event) {
|
|
202
|
+
return end(event);
|
|
203
|
+
},
|
|
204
|
+
onResponderTerminate: function (event) {
|
|
205
|
+
event.nativeEvent.type === "selectionchange" && (_this._selectionTerminated = !0), _this._receiveSignal(RESPONDER_TERMINATED, event);
|
|
206
|
+
},
|
|
207
|
+
onResponderTerminationRequest: function (event) {
|
|
208
|
+
var _this$_config = _this._config,
|
|
209
|
+
cancelable = _this$_config.cancelable,
|
|
210
|
+
disabled = _this$_config.disabled,
|
|
211
|
+
onLongPress = _this$_config.onLongPress;
|
|
212
|
+
return !disabled && onLongPress != null && _this._isPointerTouch && event.nativeEvent.type === "contextmenu" ? !1 : cancelable ?? !0;
|
|
213
|
+
},
|
|
214
|
+
// NOTE: this diverges from react-native in 3 significant ways:
|
|
215
|
+
// * The `onPress` callback is not connected to the responder system (the native
|
|
216
|
+
// `click` event must be used but is dispatched in many scenarios where no pointers
|
|
217
|
+
// are on the screen.) Therefore, it's possible for `onPress` to be called without
|
|
218
|
+
// `onPress{Start,End}` being called first.
|
|
219
|
+
// * The `onPress` callback is only be called on the first ancestor of the native
|
|
220
|
+
// `click` target that is using the PressResponder.
|
|
221
|
+
// * The event's `nativeEvent` is a `MouseEvent` not a `TouchEvent`.
|
|
222
|
+
onClick: function (event) {
|
|
223
|
+
var _this$_config2 = _this._config,
|
|
224
|
+
disabled = _this$_config2.disabled,
|
|
225
|
+
onPress = _this$_config2.onPress;
|
|
226
|
+
disabled ? isButtonRole(event.currentTarget) && event.stopPropagation() : (event.stopPropagation(), _this._longPressDispatched || _this._selectionTerminated ? event.preventDefault() : onPress != null && event.altKey === !1 && onPress(event));
|
|
227
|
+
},
|
|
228
|
+
// If `onLongPress` is provided and a touch pointer is being used, prevent the
|
|
229
|
+
// default context menu from opening.
|
|
230
|
+
onContextMenu: function (event) {
|
|
231
|
+
var _this$_config3 = _this._config,
|
|
232
|
+
disabled = _this$_config3.disabled,
|
|
233
|
+
onLongPress = _this$_config3.onLongPress;
|
|
234
|
+
disabled ? isButtonRole(event.currentTarget) && event.stopPropagation() : onLongPress != null && _this._isPointerTouch && !event.defaultPrevented && (event.preventDefault(), event.stopPropagation());
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
}, {
|
|
239
|
+
/**
|
|
240
|
+
* Receives a state machine signal, performs side effects of the transition
|
|
241
|
+
* and stores the new state. Validates the transition as well.
|
|
242
|
+
*/
|
|
243
|
+
key: "_receiveSignal",
|
|
244
|
+
value: function (signal, event) {
|
|
245
|
+
var prevState = this._touchState,
|
|
246
|
+
nextState = null;
|
|
247
|
+
Transitions[prevState] != null && (nextState = Transitions[prevState][signal]), !(this._touchState === NOT_RESPONDER && signal === RESPONDER_RELEASE) && (nextState == null || nextState === ERROR ? console.error(`PressResponder: Invalid signal ${signal} for state ${prevState} on responder`) : prevState !== nextState && (this._performTransitionSideEffects(prevState, nextState, signal, event), this._touchState = nextState));
|
|
248
|
+
}
|
|
249
|
+
}, {
|
|
250
|
+
/**
|
|
251
|
+
* Performs a transition between touchable states and identify any activations
|
|
252
|
+
* or deactivations (and callback invocations).
|
|
253
|
+
*/
|
|
254
|
+
key: "_performTransitionSideEffects",
|
|
255
|
+
value: function (prevState, nextState, signal, event) {
|
|
256
|
+
var _this = this;
|
|
257
|
+
if (isTerminalSignal(signal) && (setTimeout(function () {
|
|
258
|
+
_this._isPointerTouch = !1;
|
|
259
|
+
}, 0), this._touchActivatePosition = null, this._cancelLongPressDelayTimeout()), isPressStartSignal(prevState) && signal === LONG_PRESS_DETECTED) {
|
|
260
|
+
var onLongPress = this._config.onLongPress;
|
|
261
|
+
onLongPress != null && event.nativeEvent.key == null && (onLongPress(event), this._longPressDispatched = !0);
|
|
262
|
+
}
|
|
263
|
+
var isPrevActive = isActiveSignal(prevState),
|
|
264
|
+
isNextActive = isActiveSignal(nextState);
|
|
265
|
+
if (!isPrevActive && isNextActive ? this._activate(event) : isPrevActive && !isNextActive && this._deactivate(event), isPressStartSignal(prevState) && signal === RESPONDER_RELEASE) {
|
|
266
|
+
var _this$_config4 = this._config,
|
|
267
|
+
_onLongPress = _this$_config4.onLongPress,
|
|
268
|
+
onPress = _this$_config4.onPress;
|
|
269
|
+
if (onPress != null) {
|
|
270
|
+
var isPressCanceledByLongPress = _onLongPress != null && prevState === RESPONDER_ACTIVE_LONG_PRESS_START;
|
|
271
|
+
isPressCanceledByLongPress || isNextActive || isPrevActive || (this._activate(event), this._deactivate(event));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
this._cancelPressDelayTimeout();
|
|
275
|
+
}
|
|
276
|
+
}, {
|
|
277
|
+
key: "_activate",
|
|
278
|
+
value: function (event) {
|
|
279
|
+
var _this$_config5 = this._config,
|
|
280
|
+
onPressChange = _this$_config5.onPressChange,
|
|
281
|
+
onPressStart = _this$_config5.onPressStart,
|
|
282
|
+
touch = getTouchFromResponderEvent(event);
|
|
283
|
+
this._touchActivatePosition = {
|
|
284
|
+
pageX: touch.pageX,
|
|
285
|
+
pageY: touch.pageY
|
|
286
|
+
}, onPressStart?.(event), onPressChange?.(!0);
|
|
287
|
+
}
|
|
288
|
+
}, {
|
|
289
|
+
key: "_deactivate",
|
|
290
|
+
value: function (event) {
|
|
291
|
+
var _this$_config6 = this._config,
|
|
292
|
+
onPressChange = _this$_config6.onPressChange,
|
|
293
|
+
onPressEnd = _this$_config6.onPressEnd;
|
|
294
|
+
function end() {
|
|
295
|
+
onPressEnd?.(event), onPressChange?.(!1);
|
|
296
|
+
}
|
|
297
|
+
var delayPressEnd = normalizeDelay(this._config.delayPressEnd);
|
|
298
|
+
delayPressEnd > 0 ? this._pressOutDelayTimeout = setTimeout(function () {
|
|
299
|
+
end();
|
|
300
|
+
}, delayPressEnd) : end();
|
|
301
|
+
}
|
|
302
|
+
}, {
|
|
303
|
+
key: "_handleLongPress",
|
|
304
|
+
value: function (event) {
|
|
305
|
+
(this._touchState === RESPONDER_ACTIVE_PRESS_START || this._touchState === RESPONDER_ACTIVE_LONG_PRESS_START) && this._receiveSignal(LONG_PRESS_DETECTED, event);
|
|
306
|
+
}
|
|
307
|
+
}, {
|
|
308
|
+
key: "_cancelLongPressDelayTimeout",
|
|
309
|
+
value: function () {
|
|
310
|
+
this._longPressDelayTimeout != null && (clearTimeout(this._longPressDelayTimeout), this._longPressDelayTimeout = null);
|
|
311
|
+
}
|
|
312
|
+
}, {
|
|
313
|
+
key: "_cancelPressDelayTimeout",
|
|
314
|
+
value: function () {
|
|
315
|
+
this._pressDelayTimeout != null && (clearTimeout(this._pressDelayTimeout), this._pressDelayTimeout = null);
|
|
316
|
+
}
|
|
317
|
+
}, {
|
|
318
|
+
key: "_cancelPressOutDelayTimeout",
|
|
319
|
+
value: function () {
|
|
320
|
+
this._pressOutDelayTimeout != null && (clearTimeout(this._pressOutDelayTimeout), this._pressOutDelayTimeout = null);
|
|
321
|
+
}
|
|
322
|
+
}]), PressResponder2;
|
|
323
|
+
}();
|
|
324
|
+
function normalizeDelay(delay, min, fallback) {
|
|
325
|
+
return min === void 0 && (min = 0), fallback === void 0 && (fallback = 0), Math.max(min, delay ?? fallback);
|
|
326
|
+
}
|
|
327
|
+
function getTouchFromResponderEvent(event) {
|
|
328
|
+
var _event$nativeEvent = event.nativeEvent,
|
|
329
|
+
changedTouches = _event$nativeEvent.changedTouches,
|
|
330
|
+
touches = _event$nativeEvent.touches;
|
|
331
|
+
return touches != null && touches.length > 0 ? touches[0] : changedTouches != null && changedTouches.length > 0 ? changedTouches[0] : event.nativeEvent;
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=PressResponder.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","PressResponder_exports","__export","PressResponder","module","exports","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","DELAY","ERROR","LONG_PRESS_DETECTED","NOT_RESPONDER","RESPONDER_ACTIVE_LONG_PRESS_START","RESPONDER_ACTIVE_PRESS_START","RESPONDER_INACTIVE_PRESS_START","RESPONDER_GRANT","RESPONDER_RELEASE","RESPONDER_TERMINATED","Transitions","freeze","isActiveSignal","signal","isButtonRole","element","getAttribute","isPressStartSignal","isTerminalSignal","isValidKeyPress","event","role","isSpacebar","DEFAULT_LONG_PRESS_DELAY_MS","DEFAULT_PRESS_DELAY_MS","PressResponder2","config","configure","_config","_cancelLongPressDelayTimeout","_cancelPressDelayTimeout","_cancelPressOutDelayTimeout","_eventHandlers","_createEventHandlers","_this","start","shouldDelay","persist","_longPressDispatched","_selectionTerminated","_touchState","_isPointerTouch","nativeEvent","type","_receiveSignal","delayPressStart","normalizeDelay","_pressDelayTimeout","setTimeout","delayLongPress","_longPressDelayTimeout","_handleLongPress","end","keyupHandler","onPress","document","removeEventListener","elementType","tagName","toLowerCase","isNativeInteractiveElement","onStartShouldSetResponder","disabled","currentTarget","stopPropagation","onKeyDown","addEventListener","isSpacebarKey","_isButtonRole","preventDefault","onResponderGrant","onResponderMove","onPressMove","touch","getTouchFromResponderEvent","_touchActivatePosition","deltaX","pageX","deltaY","pageY","Math","hypot","onResponderRelease","onResponderTerminate","onResponderTerminationRequest","_this$_config","cancelable","onLongPress","onClick","_this$_config2","altKey","onContextMenu","_this$_config3","defaultPrevented","prevState","nextState","console","error","_performTransitionSideEffects","isPrevActive","isNextActive","_activate","_deactivate","_this$_config4","_onLongPress","isPressCanceledByLongPress"],"sources":["../../src/PressResponder.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|