@tamagui/react-native-use-pressable 2.0.0-rc.4 → 2.0.0-rc.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/PressResponder.cjs +289 -149
- package/dist/cjs/PressResponder.native.js +431 -275
- package/dist/cjs/PressResponder.native.js.map +1 -1
- package/dist/cjs/index.cjs +38 -29
- package/dist/cjs/index.native.js +35 -28
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/esm/PressResponder.mjs +277 -139
- package/dist/esm/PressResponder.mjs.map +1 -1
- package/dist/esm/PressResponder.native.js +419 -265
- package/dist/esm/PressResponder.native.js.map +1 -1
- package/dist/esm/index.js +14 -9
- package/dist/esm/index.js.map +1 -6
- package/dist/esm/index.mjs +12 -5
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +9 -4
- package/dist/esm/index.native.js.map +1 -1
- package/package.json +5 -8
- package/dist/cjs/PressResponder.js +0 -234
- package/dist/cjs/PressResponder.js.map +0 -6
- package/dist/cjs/index.js +0 -39
- package/dist/cjs/index.js.map +0 -6
- package/dist/esm/PressResponder.js +0 -218
- package/dist/esm/PressResponder.js.map +0 -6
|
@@ -3,91 +3,95 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
5
|
var __export = (target, all) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
13
14
|
get: () => from[key],
|
|
14
15
|
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
16
|
});
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
18
20
|
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
19
|
-
value:
|
|
21
|
+
value: true
|
|
20
22
|
}), mod);
|
|
21
23
|
var PressResponder_exports = {};
|
|
22
24
|
__export(PressResponder_exports, {
|
|
23
25
|
PressResponder: () => PressResponder
|
|
24
26
|
});
|
|
25
27
|
module.exports = __toCommonJS(PressResponder_exports);
|
|
26
|
-
const DELAY = "DELAY"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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";
|
|
28
|
+
const DELAY = "DELAY";
|
|
29
|
+
const ERROR = "ERROR";
|
|
30
|
+
const LONG_PRESS_DETECTED = "LONG_PRESS_DETECTED";
|
|
31
|
+
const NOT_RESPONDER = "NOT_RESPONDER";
|
|
32
|
+
const RESPONDER_ACTIVE_LONG_PRESS_START = "RESPONDER_ACTIVE_LONG_PRESS_START";
|
|
33
|
+
const RESPONDER_ACTIVE_PRESS_START = "RESPONDER_ACTIVE_PRESS_START";
|
|
34
|
+
const RESPONDER_INACTIVE_PRESS_START = "RESPONDER_INACTIVE_PRESS_START";
|
|
35
|
+
const RESPONDER_GRANT = "RESPONDER_GRANT";
|
|
36
|
+
const RESPONDER_RELEASE = "RESPONDER_RELEASE";
|
|
37
|
+
const RESPONDER_TERMINATED = "RESPONDER_TERMINATED";
|
|
38
|
+
const Transitions = Object.freeze({
|
|
39
|
+
NOT_RESPONDER: {
|
|
40
|
+
DELAY: ERROR,
|
|
41
|
+
RESPONDER_GRANT: RESPONDER_INACTIVE_PRESS_START,
|
|
42
|
+
RESPONDER_RELEASE: ERROR,
|
|
43
|
+
RESPONDER_TERMINATED: ERROR,
|
|
44
|
+
LONG_PRESS_DETECTED: ERROR
|
|
45
|
+
},
|
|
46
|
+
RESPONDER_INACTIVE_PRESS_START: {
|
|
47
|
+
DELAY: RESPONDER_ACTIVE_PRESS_START,
|
|
48
|
+
RESPONDER_GRANT: ERROR,
|
|
49
|
+
RESPONDER_RELEASE: NOT_RESPONDER,
|
|
50
|
+
RESPONDER_TERMINATED: NOT_RESPONDER,
|
|
51
|
+
LONG_PRESS_DETECTED: ERROR
|
|
52
|
+
},
|
|
53
|
+
RESPONDER_ACTIVE_PRESS_START: {
|
|
54
|
+
DELAY: ERROR,
|
|
55
|
+
RESPONDER_GRANT: ERROR,
|
|
56
|
+
RESPONDER_RELEASE: NOT_RESPONDER,
|
|
57
|
+
RESPONDER_TERMINATED: NOT_RESPONDER,
|
|
58
|
+
LONG_PRESS_DETECTED: RESPONDER_ACTIVE_LONG_PRESS_START
|
|
59
|
+
},
|
|
60
|
+
RESPONDER_ACTIVE_LONG_PRESS_START: {
|
|
61
|
+
DELAY: ERROR,
|
|
62
|
+
RESPONDER_GRANT: ERROR,
|
|
63
|
+
RESPONDER_RELEASE: NOT_RESPONDER,
|
|
64
|
+
RESPONDER_TERMINATED: NOT_RESPONDER,
|
|
65
|
+
LONG_PRESS_DETECTED: RESPONDER_ACTIVE_LONG_PRESS_START
|
|
81
66
|
},
|
|
82
|
-
|
|
83
|
-
|
|
67
|
+
ERROR: {
|
|
68
|
+
DELAY: NOT_RESPONDER,
|
|
69
|
+
RESPONDER_GRANT: RESPONDER_INACTIVE_PRESS_START,
|
|
70
|
+
RESPONDER_RELEASE: NOT_RESPONDER,
|
|
71
|
+
RESPONDER_TERMINATED: NOT_RESPONDER,
|
|
72
|
+
LONG_PRESS_DETECTED: NOT_RESPONDER
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
const isActiveSignal = signal => signal === RESPONDER_ACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_LONG_PRESS_START;
|
|
76
|
+
const isButtonRole = element => element.getAttribute("role") === "button";
|
|
77
|
+
const isPressStartSignal = signal => signal === RESPONDER_INACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_LONG_PRESS_START;
|
|
78
|
+
const isTerminalSignal = signal => signal === RESPONDER_TERMINATED || signal === RESPONDER_RELEASE;
|
|
79
|
+
const isValidKeyPress = event => {
|
|
80
|
+
const key = event.key;
|
|
81
|
+
const target = event.target;
|
|
82
|
+
const role = target.getAttribute("role");
|
|
83
|
+
const isSpacebar = key === " " || key === "Spacebar";
|
|
84
|
+
return key === "Enter" || isSpacebar && role === "button";
|
|
85
|
+
};
|
|
86
|
+
const DEFAULT_LONG_PRESS_DELAY_MS = 450;
|
|
87
|
+
const DEFAULT_PRESS_DELAY_MS = 50;
|
|
84
88
|
class PressResponder {
|
|
85
89
|
_touchActivatePosition = null;
|
|
86
90
|
_pressDelayTimeout = 0;
|
|
87
|
-
_selectionTerminated =
|
|
88
|
-
_isPointerTouch =
|
|
91
|
+
_selectionTerminated = false;
|
|
92
|
+
_isPointerTouch = false;
|
|
89
93
|
_longPressDelayTimeout = 0;
|
|
90
|
-
_longPressDispatched =
|
|
94
|
+
_longPressDispatched = false;
|
|
91
95
|
_pressOutDelayTimeout = 0;
|
|
92
96
|
_touchState = NOT_RESPONDER;
|
|
93
97
|
_config = null;
|
|
@@ -102,75 +106,120 @@ class PressResponder {
|
|
|
102
106
|
* Resets any pending timers. This should be called on unmount.
|
|
103
107
|
*/
|
|
104
108
|
reset() {
|
|
105
|
-
this._cancelLongPressDelayTimeout()
|
|
109
|
+
this._cancelLongPressDelayTimeout();
|
|
110
|
+
this._cancelPressDelayTimeout();
|
|
111
|
+
this._cancelPressOutDelayTimeout();
|
|
106
112
|
}
|
|
107
113
|
/**
|
|
108
114
|
* Returns a set of props to spread into the interactive element.
|
|
109
115
|
*/
|
|
110
116
|
getEventHandlers() {
|
|
111
|
-
|
|
117
|
+
if (this._eventHandlers == null) {
|
|
118
|
+
this._eventHandlers = this._createEventHandlers();
|
|
119
|
+
}
|
|
120
|
+
return this._eventHandlers;
|
|
112
121
|
}
|
|
113
122
|
_createEventHandlers() {
|
|
114
123
|
const start = (event, shouldDelay) => {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
124
|
+
event.persist();
|
|
125
|
+
this._cancelPressOutDelayTimeout();
|
|
126
|
+
this._longPressDispatched = false;
|
|
127
|
+
this._selectionTerminated = false;
|
|
128
|
+
this._touchState = NOT_RESPONDER;
|
|
129
|
+
this._isPointerTouch = event.nativeEvent.type === "touchstart";
|
|
130
|
+
this._receiveSignal(RESPONDER_GRANT, event);
|
|
131
|
+
const delayPressStart = normalizeDelay(this._config.delayPressStart, 0, DEFAULT_PRESS_DELAY_MS);
|
|
132
|
+
if (shouldDelay !== false && delayPressStart > 0) {
|
|
133
|
+
this._pressDelayTimeout = setTimeout(() => {
|
|
118
134
|
this._receiveSignal(DELAY, event);
|
|
119
|
-
}, delayPressStart)
|
|
120
|
-
|
|
121
|
-
this.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
135
|
+
}, delayPressStart);
|
|
136
|
+
} else {
|
|
137
|
+
this._receiveSignal(DELAY, event);
|
|
138
|
+
}
|
|
139
|
+
const delayLongPress = normalizeDelay(this._config.delayLongPress, 10, DEFAULT_LONG_PRESS_DELAY_MS);
|
|
140
|
+
this._longPressDelayTimeout = setTimeout(() => {
|
|
141
|
+
this._handleLongPress(event);
|
|
142
|
+
}, delayLongPress + delayPressStart);
|
|
143
|
+
};
|
|
144
|
+
const end = event => {
|
|
145
|
+
this._receiveSignal(RESPONDER_RELEASE, event);
|
|
146
|
+
};
|
|
147
|
+
const keyupHandler = event => {
|
|
148
|
+
const onPress = this._config.onPress;
|
|
149
|
+
const target = event.target;
|
|
150
|
+
if (this._touchState !== NOT_RESPONDER && isValidKeyPress(event)) {
|
|
151
|
+
end(event);
|
|
152
|
+
document.removeEventListener("keyup", keyupHandler);
|
|
153
|
+
const role = target.getAttribute("role");
|
|
154
|
+
const elementType = target.tagName.toLowerCase();
|
|
155
|
+
const isNativeInteractiveElement = role === "link" || elementType === "a" || elementType === "button" || elementType === "input" || elementType === "select" || elementType === "textarea";
|
|
156
|
+
if (onPress != null && !isNativeInteractiveElement) {
|
|
157
|
+
onPress(event);
|
|
137
158
|
}
|
|
138
|
-
}
|
|
159
|
+
}
|
|
160
|
+
};
|
|
139
161
|
return {
|
|
140
162
|
onStartShouldSetResponder: event => {
|
|
141
163
|
const disabled = this._config.disabled;
|
|
142
|
-
|
|
164
|
+
if (disabled && isButtonRole(event.currentTarget)) {
|
|
165
|
+
event.stopPropagation();
|
|
166
|
+
}
|
|
167
|
+
if (disabled == null) {
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
return !disabled;
|
|
143
171
|
},
|
|
144
172
|
onKeyDown: event => {
|
|
145
|
-
const disabled = this._config.disabled
|
|
146
|
-
|
|
147
|
-
|
|
173
|
+
const disabled = this._config.disabled;
|
|
174
|
+
const key = event.key;
|
|
175
|
+
const target = event.target;
|
|
148
176
|
if (!disabled && isValidKeyPress(event)) {
|
|
149
|
-
this._touchState === NOT_RESPONDER
|
|
177
|
+
if (this._touchState === NOT_RESPONDER) {
|
|
178
|
+
start(event, false);
|
|
179
|
+
document.addEventListener("keyup", keyupHandler);
|
|
180
|
+
}
|
|
150
181
|
const role = target.getAttribute("role");
|
|
151
|
-
|
|
182
|
+
const isSpacebarKey = key === " " || key === "Spacebar";
|
|
183
|
+
const _isButtonRole = role === "button" || role === "menuitem";
|
|
184
|
+
if (isSpacebarKey && _isButtonRole) {
|
|
185
|
+
event.preventDefault();
|
|
186
|
+
}
|
|
187
|
+
event.stopPropagation();
|
|
152
188
|
}
|
|
153
189
|
},
|
|
154
190
|
onResponderGrant: event => start(event),
|
|
155
191
|
onResponderMove: event => {
|
|
156
|
-
this._config.onPressMove != null
|
|
192
|
+
if (this._config.onPressMove != null) {
|
|
193
|
+
this._config.onPressMove(event);
|
|
194
|
+
}
|
|
157
195
|
const touch = getTouchFromResponderEvent(event);
|
|
158
196
|
if (this._touchActivatePosition != null) {
|
|
159
|
-
const deltaX = this._touchActivatePosition.pageX - touch.pageX
|
|
160
|
-
|
|
161
|
-
Math.hypot(deltaX, deltaY) > 10
|
|
197
|
+
const deltaX = this._touchActivatePosition.pageX - touch.pageX;
|
|
198
|
+
const deltaY = this._touchActivatePosition.pageY - touch.pageY;
|
|
199
|
+
if (Math.hypot(deltaX, deltaY) > 10) {
|
|
200
|
+
this._cancelLongPressDelayTimeout();
|
|
201
|
+
}
|
|
162
202
|
}
|
|
163
203
|
},
|
|
164
204
|
onResponderRelease: event => end(event),
|
|
165
205
|
onResponderTerminate: event => {
|
|
166
|
-
event.nativeEvent.type === "selectionchange"
|
|
206
|
+
if (event.nativeEvent.type === "selectionchange") {
|
|
207
|
+
this._selectionTerminated = true;
|
|
208
|
+
}
|
|
209
|
+
this._receiveSignal(RESPONDER_TERMINATED, event);
|
|
167
210
|
},
|
|
168
211
|
onResponderTerminationRequest: event => {
|
|
169
|
-
const _this$_config = this._config
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
212
|
+
const _this$_config = this._config;
|
|
213
|
+
const cancelable = _this$_config.cancelable;
|
|
214
|
+
const disabled = _this$_config.disabled;
|
|
215
|
+
const onLongPress = _this$_config.onLongPress;
|
|
216
|
+
if (!disabled && onLongPress != null && this._isPointerTouch && event.nativeEvent.type === "contextmenu") {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
if (cancelable == null) {
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
return cancelable;
|
|
174
223
|
},
|
|
175
224
|
// NOTE: this diverges from react-native in 3 significant ways:
|
|
176
225
|
// * The `onPress` callback is not connected to the responder system (the native
|
|
@@ -181,18 +230,38 @@ class PressResponder {
|
|
|
181
230
|
// `click` target that is using the PressResponder.
|
|
182
231
|
// * The event's `nativeEvent` is a `MouseEvent` not a `TouchEvent`.
|
|
183
232
|
onClick: event => {
|
|
184
|
-
const _this$_config2 = this._config
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
233
|
+
const _this$_config2 = this._config;
|
|
234
|
+
const disabled = _this$_config2.disabled;
|
|
235
|
+
const onPress = _this$_config2.onPress;
|
|
236
|
+
if (!disabled) {
|
|
237
|
+
event.stopPropagation();
|
|
238
|
+
if (this._longPressDispatched || this._selectionTerminated) {
|
|
239
|
+
event.preventDefault();
|
|
240
|
+
} else if (onPress != null && event.altKey === false) {
|
|
241
|
+
onPress(event);
|
|
242
|
+
}
|
|
243
|
+
} else {
|
|
244
|
+
if (isButtonRole(event.currentTarget)) {
|
|
245
|
+
event.stopPropagation();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
188
248
|
},
|
|
189
249
|
// If `onLongPress` is provided and a touch pointer is being used, prevent the
|
|
190
250
|
// default context menu from opening.
|
|
191
251
|
onContextMenu: event => {
|
|
192
|
-
const _this$_config3 = this._config
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
252
|
+
const _this$_config3 = this._config;
|
|
253
|
+
const disabled = _this$_config3.disabled;
|
|
254
|
+
const onLongPress = _this$_config3.onLongPress;
|
|
255
|
+
if (!disabled) {
|
|
256
|
+
if (onLongPress != null && this._isPointerTouch && !event.defaultPrevented) {
|
|
257
|
+
event.preventDefault();
|
|
258
|
+
event.stopPropagation();
|
|
259
|
+
}
|
|
260
|
+
} else {
|
|
261
|
+
if (isButtonRole(event.currentTarget)) {
|
|
262
|
+
event.stopPropagation();
|
|
263
|
+
}
|
|
264
|
+
}
|
|
196
265
|
}
|
|
197
266
|
};
|
|
198
267
|
}
|
|
@@ -203,69 +272,140 @@ class PressResponder {
|
|
|
203
272
|
_receiveSignal(signal, event) {
|
|
204
273
|
const prevState = this._touchState;
|
|
205
274
|
let nextState = null;
|
|
206
|
-
Transitions[prevState] != null
|
|
275
|
+
if (Transitions[prevState] != null) {
|
|
276
|
+
nextState = Transitions[prevState][signal];
|
|
277
|
+
}
|
|
278
|
+
if (this._touchState === NOT_RESPONDER && signal === RESPONDER_RELEASE) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
if (nextState == null || nextState === ERROR) {
|
|
282
|
+
console.error(`PressResponder: Invalid signal ${signal} for state ${prevState} on responder`);
|
|
283
|
+
} else if (prevState !== nextState) {
|
|
284
|
+
this._performTransitionSideEffects(prevState, nextState, signal, event);
|
|
285
|
+
this._touchState = nextState;
|
|
286
|
+
}
|
|
207
287
|
}
|
|
208
288
|
/**
|
|
209
289
|
* Performs a transition between touchable states and identify any activations
|
|
210
290
|
* or deactivations (and callback invocations).
|
|
211
291
|
*/
|
|
212
292
|
_performTransitionSideEffects(prevState, nextState, signal, event) {
|
|
213
|
-
if (isTerminalSignal(signal)
|
|
214
|
-
|
|
215
|
-
|
|
293
|
+
if (isTerminalSignal(signal)) {
|
|
294
|
+
setTimeout(() => {
|
|
295
|
+
this._isPointerTouch = false;
|
|
296
|
+
}, 0);
|
|
297
|
+
this._touchActivatePosition = null;
|
|
298
|
+
this._cancelLongPressDelayTimeout();
|
|
299
|
+
}
|
|
300
|
+
if (isPressStartSignal(prevState) && signal === LONG_PRESS_DETECTED) {
|
|
216
301
|
const onLongPress = this._config.onLongPress;
|
|
217
|
-
onLongPress != null && event.nativeEvent.key == null
|
|
302
|
+
if (onLongPress != null && event.nativeEvent.key == null) {
|
|
303
|
+
onLongPress(event);
|
|
304
|
+
this._longPressDispatched = true;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
const isPrevActive = isActiveSignal(prevState);
|
|
308
|
+
const isNextActive = isActiveSignal(nextState);
|
|
309
|
+
if (!isPrevActive && isNextActive) {
|
|
310
|
+
this._activate(event);
|
|
311
|
+
} else if (isPrevActive && !isNextActive) {
|
|
312
|
+
this._deactivate(event);
|
|
218
313
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
const _this$_config4
|
|
223
|
-
|
|
224
|
-
|
|
314
|
+
if (isPressStartSignal(prevState) && signal === RESPONDER_RELEASE) {
|
|
315
|
+
const _this$_config4 = this._config;
|
|
316
|
+
const _onLongPress = _this$_config4.onLongPress;
|
|
317
|
+
const onPress = _this$_config4.onPress;
|
|
318
|
+
if (onPress != null) {
|
|
319
|
+
const isPressCanceledByLongPress = _onLongPress != null && prevState === RESPONDER_ACTIVE_LONG_PRESS_START;
|
|
320
|
+
if (!isPressCanceledByLongPress) {
|
|
321
|
+
if (!(isNextActive || isPrevActive)) {
|
|
322
|
+
this._activate(event);
|
|
323
|
+
this._deactivate(event);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
225
327
|
}
|
|
226
328
|
this._cancelPressDelayTimeout();
|
|
227
329
|
}
|
|
228
330
|
_activate(event) {
|
|
229
|
-
const _this$_config5 = this._config
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
331
|
+
const _this$_config5 = this._config;
|
|
332
|
+
const onPressChange = _this$_config5.onPressChange;
|
|
333
|
+
const onPressStart = _this$_config5.onPressStart;
|
|
334
|
+
const touch = getTouchFromResponderEvent(event);
|
|
233
335
|
this._touchActivatePosition = {
|
|
234
336
|
pageX: touch.pageX,
|
|
235
337
|
pageY: touch.pageY
|
|
236
|
-
}
|
|
338
|
+
};
|
|
339
|
+
if (onPressStart != null) {
|
|
340
|
+
onPressStart(event);
|
|
341
|
+
}
|
|
342
|
+
if (onPressChange != null) {
|
|
343
|
+
onPressChange(true);
|
|
344
|
+
}
|
|
237
345
|
}
|
|
238
346
|
_deactivate(event) {
|
|
239
|
-
const _this$_config6 = this._config
|
|
240
|
-
|
|
241
|
-
|
|
347
|
+
const _this$_config6 = this._config;
|
|
348
|
+
const onPressChange = _this$_config6.onPressChange;
|
|
349
|
+
const onPressEnd = _this$_config6.onPressEnd;
|
|
242
350
|
function end() {
|
|
243
|
-
onPressEnd
|
|
351
|
+
if (onPressEnd != null) {
|
|
352
|
+
onPressEnd(event);
|
|
353
|
+
}
|
|
354
|
+
if (onPressChange != null) {
|
|
355
|
+
onPressChange(false);
|
|
356
|
+
}
|
|
244
357
|
}
|
|
245
358
|
const delayPressEnd = normalizeDelay(this._config.delayPressEnd);
|
|
246
|
-
delayPressEnd > 0
|
|
359
|
+
if (delayPressEnd > 0) {
|
|
360
|
+
this._pressOutDelayTimeout = setTimeout(() => {
|
|
361
|
+
end();
|
|
362
|
+
}, delayPressEnd);
|
|
363
|
+
} else {
|
|
247
364
|
end();
|
|
248
|
-
}
|
|
365
|
+
}
|
|
249
366
|
}
|
|
250
367
|
_handleLongPress(event) {
|
|
251
|
-
(this._touchState === RESPONDER_ACTIVE_PRESS_START || this._touchState === RESPONDER_ACTIVE_LONG_PRESS_START)
|
|
368
|
+
if (this._touchState === RESPONDER_ACTIVE_PRESS_START || this._touchState === RESPONDER_ACTIVE_LONG_PRESS_START) {
|
|
369
|
+
this._receiveSignal(LONG_PRESS_DETECTED, event);
|
|
370
|
+
}
|
|
252
371
|
}
|
|
253
372
|
_cancelLongPressDelayTimeout() {
|
|
254
|
-
this._longPressDelayTimeout != null
|
|
373
|
+
if (this._longPressDelayTimeout != null) {
|
|
374
|
+
clearTimeout(this._longPressDelayTimeout);
|
|
375
|
+
this._longPressDelayTimeout = null;
|
|
376
|
+
}
|
|
255
377
|
}
|
|
256
378
|
_cancelPressDelayTimeout() {
|
|
257
|
-
this._pressDelayTimeout != null
|
|
379
|
+
if (this._pressDelayTimeout != null) {
|
|
380
|
+
clearTimeout(this._pressDelayTimeout);
|
|
381
|
+
this._pressDelayTimeout = null;
|
|
382
|
+
}
|
|
258
383
|
}
|
|
259
384
|
_cancelPressOutDelayTimeout() {
|
|
260
|
-
this._pressOutDelayTimeout != null
|
|
385
|
+
if (this._pressOutDelayTimeout != null) {
|
|
386
|
+
clearTimeout(this._pressOutDelayTimeout);
|
|
387
|
+
this._pressOutDelayTimeout = null;
|
|
388
|
+
}
|
|
261
389
|
}
|
|
262
390
|
}
|
|
263
391
|
function normalizeDelay(delay, min, fallback) {
|
|
264
|
-
|
|
392
|
+
if (min === void 0) {
|
|
393
|
+
min = 0;
|
|
394
|
+
}
|
|
395
|
+
if (fallback === void 0) {
|
|
396
|
+
fallback = 0;
|
|
397
|
+
}
|
|
398
|
+
return Math.max(min, delay !== null && delay !== void 0 ? delay : fallback);
|
|
265
399
|
}
|
|
266
400
|
function getTouchFromResponderEvent(event) {
|
|
267
|
-
const _event$nativeEvent = event.nativeEvent
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
401
|
+
const _event$nativeEvent = event.nativeEvent;
|
|
402
|
+
const changedTouches = _event$nativeEvent.changedTouches;
|
|
403
|
+
const touches = _event$nativeEvent.touches;
|
|
404
|
+
if (touches != null && touches.length > 0) {
|
|
405
|
+
return touches[0];
|
|
406
|
+
}
|
|
407
|
+
if (changedTouches != null && changedTouches.length > 0) {
|
|
408
|
+
return changedTouches[0];
|
|
409
|
+
}
|
|
410
|
+
return event.nativeEvent;
|
|
271
411
|
}
|