@react-aria/interactions 3.25.5 → 3.26.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/dist/focusSafely.main.js +4 -4
- package/dist/focusSafely.main.js.map +1 -1
- package/dist/focusSafely.mjs +4 -4
- package/dist/focusSafely.module.js +4 -4
- package/dist/focusSafely.module.js.map +1 -1
- package/dist/import.mjs +2 -2
- package/dist/main.js +1 -0
- package/dist/main.js.map +1 -1
- package/dist/module.js +2 -2
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/useFocusVisible.main.js +12 -2
- package/dist/useFocusVisible.main.js.map +1 -1
- package/dist/useFocusVisible.mjs +13 -4
- package/dist/useFocusVisible.module.js +13 -4
- package/dist/useFocusVisible.module.js.map +1 -1
- package/dist/useInteractOutside.main.js +1 -3
- package/dist/useInteractOutside.main.js.map +1 -1
- package/dist/useInteractOutside.mjs +1 -3
- package/dist/useInteractOutside.module.js +1 -3
- package/dist/useInteractOutside.module.js.map +1 -1
- package/dist/useMove.main.js +110 -74
- package/dist/useMove.main.js.map +1 -1
- package/dist/useMove.mjs +112 -76
- package/dist/useMove.module.js +112 -76
- package/dist/useMove.module.js.map +1 -1
- package/dist/usePress.main.js +188 -114
- package/dist/usePress.main.js.map +1 -1
- package/dist/usePress.mjs +190 -116
- package/dist/usePress.module.js +190 -116
- package/dist/usePress.module.js.map +1 -1
- package/dist/utils.main.js +2 -5
- package/dist/utils.main.js.map +1 -1
- package/dist/utils.mjs +3 -6
- package/dist/utils.module.js +3 -6
- package/dist/utils.module.js.map +1 -1
- package/package.json +4 -4
- package/src/focusSafely.ts +4 -4
- package/src/index.ts +1 -0
- package/src/useFocusVisible.ts +15 -3
- package/src/useInteractOutside.ts +1 -1
- package/src/useMove.ts +85 -57
- package/src/usePress.ts +192 -148
- package/src/utils.ts +3 -7
package/dist/usePress.main.js
CHANGED
|
@@ -108,8 +108,8 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
108
108
|
pointerType: null,
|
|
109
109
|
disposables: []
|
|
110
110
|
});
|
|
111
|
-
let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $bBqCQ$reactariautils.useGlobalListeners)();
|
|
112
|
-
let triggerPressStart = (0, $bBqCQ$
|
|
111
|
+
let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners, removeGlobalListener: removeGlobalListener } = (0, $bBqCQ$reactariautils.useGlobalListeners)();
|
|
112
|
+
let triggerPressStart = (0, $bBqCQ$react.useCallback)((originalEvent, pointerType)=>{
|
|
113
113
|
let state = ref.current;
|
|
114
114
|
if (isDisabled || state.didFirePressStart) return false;
|
|
115
115
|
let shouldStopPropagation = true;
|
|
@@ -124,8 +124,12 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
124
124
|
state.didFirePressStart = true;
|
|
125
125
|
setPressed(true);
|
|
126
126
|
return shouldStopPropagation;
|
|
127
|
-
}
|
|
128
|
-
|
|
127
|
+
}, [
|
|
128
|
+
isDisabled,
|
|
129
|
+
onPressStart,
|
|
130
|
+
onPressChange
|
|
131
|
+
]);
|
|
132
|
+
let triggerPressEnd = (0, $bBqCQ$react.useCallback)((originalEvent, pointerType, wasPressed = true)=>{
|
|
129
133
|
let state = ref.current;
|
|
130
134
|
if (!state.didFirePressStart) return false;
|
|
131
135
|
state.didFirePressStart = false;
|
|
@@ -145,8 +149,14 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
145
149
|
}
|
|
146
150
|
state.isTriggeringEvent = false;
|
|
147
151
|
return shouldStopPropagation;
|
|
148
|
-
}
|
|
149
|
-
|
|
152
|
+
}, [
|
|
153
|
+
isDisabled,
|
|
154
|
+
onPressEnd,
|
|
155
|
+
onPressChange,
|
|
156
|
+
onPress
|
|
157
|
+
]);
|
|
158
|
+
let triggerPressEndEvent = (0, $bBqCQ$reactariautils.useEffectEvent)(triggerPressEnd);
|
|
159
|
+
let triggerPressUp = (0, $bBqCQ$react.useCallback)((originalEvent, pointerType)=>{
|
|
150
160
|
let state = ref.current;
|
|
151
161
|
if (isDisabled) return false;
|
|
152
162
|
if (onPressUp) {
|
|
@@ -157,12 +167,17 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
157
167
|
return event.shouldStopPropagation;
|
|
158
168
|
}
|
|
159
169
|
return true;
|
|
160
|
-
}
|
|
161
|
-
|
|
170
|
+
}, [
|
|
171
|
+
isDisabled,
|
|
172
|
+
onPressUp
|
|
173
|
+
]);
|
|
174
|
+
let triggerPressUpEvent = (0, $bBqCQ$reactariautils.useEffectEvent)(triggerPressUp);
|
|
175
|
+
let cancel = (0, $bBqCQ$react.useCallback)((e)=>{
|
|
162
176
|
let state = ref.current;
|
|
163
177
|
if (state.isPressed && state.target) {
|
|
164
178
|
if (state.didFirePressStart && state.pointerType != null) triggerPressEnd($0294ea432cd92340$var$createEvent(state.target, e), state.pointerType, false);
|
|
165
179
|
state.isPressed = false;
|
|
180
|
+
setIsPointerPressed(null);
|
|
166
181
|
state.isOverTarget = false;
|
|
167
182
|
state.activePointerId = null;
|
|
168
183
|
state.pointerType = null;
|
|
@@ -171,14 +186,27 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
171
186
|
for (let dispose of state.disposables)dispose();
|
|
172
187
|
state.disposables = [];
|
|
173
188
|
}
|
|
174
|
-
}
|
|
175
|
-
|
|
189
|
+
}, [
|
|
190
|
+
allowTextSelectionOnPress,
|
|
191
|
+
removeAllGlobalListeners,
|
|
192
|
+
triggerPressEnd
|
|
193
|
+
]);
|
|
194
|
+
let cancelEvent = (0, $bBqCQ$reactariautils.useEffectEvent)(cancel);
|
|
195
|
+
let cancelOnPointerExit = (0, $bBqCQ$react.useCallback)((e)=>{
|
|
176
196
|
if (shouldCancelOnPointerExit) cancel(e);
|
|
177
|
-
}
|
|
178
|
-
|
|
197
|
+
}, [
|
|
198
|
+
shouldCancelOnPointerExit,
|
|
199
|
+
cancel
|
|
200
|
+
]);
|
|
201
|
+
let triggerClick = (0, $bBqCQ$react.useCallback)((e)=>{
|
|
202
|
+
if (isDisabled) return;
|
|
179
203
|
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
180
|
-
}
|
|
181
|
-
|
|
204
|
+
}, [
|
|
205
|
+
isDisabled,
|
|
206
|
+
onClick
|
|
207
|
+
]);
|
|
208
|
+
let triggerSyntheticClick = (0, $bBqCQ$react.useCallback)((e, target)=>{
|
|
209
|
+
if (isDisabled) return;
|
|
182
210
|
// Some third-party libraries pass in onClick instead of onPress.
|
|
183
211
|
// Create a fake mouse event and trigger onClick as well.
|
|
184
212
|
// This matches the browser's native activation behavior for certain elements (e.g. button).
|
|
@@ -189,7 +217,147 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
189
217
|
(0, $625cf83917e112ad$exports.setEventTarget)(event, target);
|
|
190
218
|
onClick((0, $625cf83917e112ad$exports.createSyntheticEvent)(event));
|
|
191
219
|
}
|
|
192
|
-
}
|
|
220
|
+
}, [
|
|
221
|
+
isDisabled,
|
|
222
|
+
onClick
|
|
223
|
+
]);
|
|
224
|
+
let triggerSyntheticClickEvent = (0, $bBqCQ$reactariautils.useEffectEvent)(triggerSyntheticClick);
|
|
225
|
+
let [isElemKeyPressed, setIsElemKeyPressed] = (0, $bBqCQ$react.useState)(false);
|
|
226
|
+
(0, $bBqCQ$reactariautils.useLayoutEffect)(()=>{
|
|
227
|
+
let state = ref.current;
|
|
228
|
+
if (isElemKeyPressed) {
|
|
229
|
+
let onKeyUp = (e)=>{
|
|
230
|
+
var _state_metaKeyEvents;
|
|
231
|
+
if (state.isPressed && state.target && $0294ea432cd92340$var$isValidKeyboardEvent(e, state.target)) {
|
|
232
|
+
var _state_metaKeyEvents1;
|
|
233
|
+
if ($0294ea432cd92340$var$shouldPreventDefaultKeyboard((0, $bBqCQ$reactariautils.getEventTarget)(e), e.key)) e.preventDefault();
|
|
234
|
+
let target = (0, $bBqCQ$reactariautils.getEventTarget)(e);
|
|
235
|
+
let wasPressed = (0, $bBqCQ$reactariautils.nodeContains)(state.target, (0, $bBqCQ$reactariautils.getEventTarget)(e));
|
|
236
|
+
triggerPressEndEvent($0294ea432cd92340$var$createEvent(state.target, e), 'keyboard', wasPressed);
|
|
237
|
+
if (wasPressed) triggerSyntheticClickEvent(e, state.target);
|
|
238
|
+
removeAllGlobalListeners();
|
|
239
|
+
// If a link was triggered with a key other than Enter, open the URL ourselves.
|
|
240
|
+
// This means the link has a role override, and the default browser behavior
|
|
241
|
+
// only applies when using the Enter key.
|
|
242
|
+
if (e.key !== 'Enter' && $0294ea432cd92340$var$isHTMLAnchorLink(state.target) && (0, $bBqCQ$reactariautils.nodeContains)(state.target, target) && !e[$0294ea432cd92340$var$LINK_CLICKED]) {
|
|
243
|
+
// Store a hidden property on the event so we only trigger link click once,
|
|
244
|
+
// even if there are multiple usePress instances attached to the element.
|
|
245
|
+
e[$0294ea432cd92340$var$LINK_CLICKED] = true;
|
|
246
|
+
(0, $bBqCQ$reactariautils.openLink)(state.target, e, false);
|
|
247
|
+
}
|
|
248
|
+
state.isPressed = false;
|
|
249
|
+
setIsElemKeyPressed(false);
|
|
250
|
+
(_state_metaKeyEvents1 = state.metaKeyEvents) === null || _state_metaKeyEvents1 === void 0 ? void 0 : _state_metaKeyEvents1.delete(e.key);
|
|
251
|
+
} else if (e.key === 'Meta' && ((_state_metaKeyEvents = state.metaKeyEvents) === null || _state_metaKeyEvents === void 0 ? void 0 : _state_metaKeyEvents.size)) {
|
|
252
|
+
var _state_target;
|
|
253
|
+
// If we recorded keydown events that occurred while the Meta key was pressed,
|
|
254
|
+
// and those haven't received keyup events already, fire keyup events ourselves.
|
|
255
|
+
// See comment above for more info about the macOS bug causing this.
|
|
256
|
+
let events = state.metaKeyEvents;
|
|
257
|
+
state.metaKeyEvents = undefined;
|
|
258
|
+
for (let event of events.values())(_state_target = state.target) === null || _state_target === void 0 ? void 0 : _state_target.dispatchEvent(new KeyboardEvent('keyup', event));
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
// Focus may move before the key up event, so register the event on the document
|
|
262
|
+
// instead of the same element where the key down event occurred. Make it capturing so that it will trigger
|
|
263
|
+
// before stopPropagation from useKeyboard on a child element may happen and thus we can still call triggerPress for the parent element.
|
|
264
|
+
let originalTarget = state.target;
|
|
265
|
+
let pressUp = (e)=>{
|
|
266
|
+
if (originalTarget && $0294ea432cd92340$var$isValidKeyboardEvent(e, originalTarget) && !e.repeat && (0, $bBqCQ$reactariautils.nodeContains)(originalTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e)) && state.target) triggerPressUpEvent($0294ea432cd92340$var$createEvent(state.target, e), 'keyboard');
|
|
267
|
+
};
|
|
268
|
+
let listener = (0, $bBqCQ$reactariautils.chain)(pressUp, onKeyUp);
|
|
269
|
+
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'keyup', listener, true);
|
|
270
|
+
return ()=>{
|
|
271
|
+
removeGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'keyup', listener, true);
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
}, [
|
|
275
|
+
isElemKeyPressed,
|
|
276
|
+
addGlobalListener,
|
|
277
|
+
removeAllGlobalListeners,
|
|
278
|
+
removeGlobalListener
|
|
279
|
+
]);
|
|
280
|
+
let [isPointerPressed, setIsPointerPressed] = (0, $bBqCQ$react.useState)(null);
|
|
281
|
+
(0, $bBqCQ$reactariautils.useLayoutEffect)(()=>{
|
|
282
|
+
let state = ref.current;
|
|
283
|
+
if (isPointerPressed === 'pointer') {
|
|
284
|
+
let onPointerUp = (e)=>{
|
|
285
|
+
if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0 && state.target) {
|
|
286
|
+
if ((0, $bBqCQ$reactariautils.nodeContains)(state.target, (0, $bBqCQ$reactariautils.getEventTarget)(e)) && state.pointerType != null) {
|
|
287
|
+
// Wait for onClick to fire onPress. This avoids browser issues when the DOM
|
|
288
|
+
// is mutated between onPointerUp and onClick, and is more compatible with third party libraries.
|
|
289
|
+
// https://github.com/adobe/react-spectrum/issues/1513
|
|
290
|
+
// https://issues.chromium.org/issues/40732224
|
|
291
|
+
// However, iOS and Android do not focus or fire onClick after a long press.
|
|
292
|
+
// We work around this by triggering a click ourselves after a timeout.
|
|
293
|
+
// This timeout is canceled during the click event in case the real one fires first.
|
|
294
|
+
// The timeout must be at least 32ms, because Safari on iOS delays the click event on
|
|
295
|
+
// non-form elements without certain ARIA roles (for hover emulation).
|
|
296
|
+
// https://github.com/WebKit/WebKit/blob/dccfae42bb29bd4bdef052e469f604a9387241c0/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm#L875-L892
|
|
297
|
+
let clicked = false;
|
|
298
|
+
let timeout = setTimeout(()=>{
|
|
299
|
+
if (state.isPressed && state.target instanceof HTMLElement) {
|
|
300
|
+
if (clicked) cancelEvent(e);
|
|
301
|
+
else {
|
|
302
|
+
(0, $bBqCQ$reactariautils.focusWithoutScrolling)(state.target);
|
|
303
|
+
state.target.click();
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}, 80);
|
|
307
|
+
// Use a capturing listener to track if a click occurred.
|
|
308
|
+
// If stopPropagation is called it may never reach our handler.
|
|
309
|
+
addGlobalListener(e.currentTarget, 'click', ()=>clicked = true, true);
|
|
310
|
+
state.disposables.push(()=>clearTimeout(timeout));
|
|
311
|
+
} else cancelEvent(e);
|
|
312
|
+
// Ignore subsequent onPointerLeave event before onClick on touch devices.
|
|
313
|
+
state.isOverTarget = false;
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
let onPointerCancel = (e)=>{
|
|
317
|
+
cancelEvent(e);
|
|
318
|
+
};
|
|
319
|
+
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'pointerup', onPointerUp, false);
|
|
320
|
+
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'pointercancel', onPointerCancel, false);
|
|
321
|
+
return ()=>{
|
|
322
|
+
removeGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'pointerup', onPointerUp, false);
|
|
323
|
+
removeGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'pointercancel', onPointerCancel, false);
|
|
324
|
+
};
|
|
325
|
+
} else if (isPointerPressed === 'mouse' && process.env.NODE_ENV === 'test') {
|
|
326
|
+
let onMouseUp = (e)=>{
|
|
327
|
+
// Only handle left clicks
|
|
328
|
+
if (e.button !== 0) return;
|
|
329
|
+
if (state.ignoreEmulatedMouseEvents) {
|
|
330
|
+
state.ignoreEmulatedMouseEvents = false;
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
if (state.target && state.target.contains(e.target) && state.pointerType != null) ;
|
|
334
|
+
else cancelEvent(e);
|
|
335
|
+
state.isOverTarget = false;
|
|
336
|
+
};
|
|
337
|
+
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'mouseup', onMouseUp, false);
|
|
338
|
+
return ()=>{
|
|
339
|
+
removeGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'mouseup', onMouseUp, false);
|
|
340
|
+
};
|
|
341
|
+
} else if (isPointerPressed === 'touch' && process.env.NODE_ENV === 'test') {
|
|
342
|
+
let onScroll = (e)=>{
|
|
343
|
+
if (state.isPressed && (0, $bBqCQ$reactariautils.nodeContains)((0, $bBqCQ$reactariautils.getEventTarget)(e), state.target)) cancelEvent({
|
|
344
|
+
currentTarget: state.target,
|
|
345
|
+
shiftKey: false,
|
|
346
|
+
ctrlKey: false,
|
|
347
|
+
metaKey: false,
|
|
348
|
+
altKey: false
|
|
349
|
+
});
|
|
350
|
+
};
|
|
351
|
+
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerWindow)(state.target), 'scroll', onScroll, true);
|
|
352
|
+
return ()=>{
|
|
353
|
+
removeGlobalListener((0, $bBqCQ$reactariautils.getOwnerWindow)(state.target), 'scroll', onScroll, true);
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
}, [
|
|
357
|
+
isPointerPressed,
|
|
358
|
+
addGlobalListener,
|
|
359
|
+
removeGlobalListener
|
|
360
|
+
]);
|
|
193
361
|
let pressProps = (0, $bBqCQ$react.useMemo)(()=>{
|
|
194
362
|
let state = ref.current;
|
|
195
363
|
let pressProps = {
|
|
@@ -204,16 +372,9 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
204
372
|
if (!state.isPressed && !e.repeat) {
|
|
205
373
|
state.target = e.currentTarget;
|
|
206
374
|
state.isPressed = true;
|
|
375
|
+
setIsElemKeyPressed(true);
|
|
207
376
|
state.pointerType = 'keyboard';
|
|
208
377
|
shouldStopPropagation = triggerPressStart(e, 'keyboard');
|
|
209
|
-
// Focus may move before the key up event, so register the event on the document
|
|
210
|
-
// instead of the same element where the key down event occurred. Make it capturing so that it will trigger
|
|
211
|
-
// before stopPropagation from useKeyboard on a child element may happen and thus we can still call triggerPress for the parent element.
|
|
212
|
-
let originalTarget = e.currentTarget;
|
|
213
|
-
let pressUp = (e)=>{
|
|
214
|
-
if ($0294ea432cd92340$var$isValidKeyboardEvent(e, originalTarget) && !e.repeat && (0, $bBqCQ$reactariautils.nodeContains)(originalTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e)) && state.target) triggerPressUp($0294ea432cd92340$var$createEvent(state.target, e), 'keyboard');
|
|
215
|
-
};
|
|
216
|
-
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(e.currentTarget), 'keyup', (0, $bBqCQ$reactariautils.chain)(pressUp, onKeyUp), true);
|
|
217
378
|
}
|
|
218
379
|
if (shouldStopPropagation) e.stopPropagation();
|
|
219
380
|
// Keep track of the keydown events that occur while the Meta (e.g. Command) key is held.
|
|
@@ -253,37 +414,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
253
414
|
}
|
|
254
415
|
}
|
|
255
416
|
};
|
|
256
|
-
let onKeyUp = (e)=>{
|
|
257
|
-
var _state_metaKeyEvents;
|
|
258
|
-
if (state.isPressed && state.target && $0294ea432cd92340$var$isValidKeyboardEvent(e, state.target)) {
|
|
259
|
-
var _state_metaKeyEvents1;
|
|
260
|
-
if ($0294ea432cd92340$var$shouldPreventDefaultKeyboard((0, $bBqCQ$reactariautils.getEventTarget)(e), e.key)) e.preventDefault();
|
|
261
|
-
let target = (0, $bBqCQ$reactariautils.getEventTarget)(e);
|
|
262
|
-
let wasPressed = (0, $bBqCQ$reactariautils.nodeContains)(state.target, (0, $bBqCQ$reactariautils.getEventTarget)(e));
|
|
263
|
-
triggerPressEnd($0294ea432cd92340$var$createEvent(state.target, e), 'keyboard', wasPressed);
|
|
264
|
-
if (wasPressed) triggerSyntheticClick(e, state.target);
|
|
265
|
-
removeAllGlobalListeners();
|
|
266
|
-
// If a link was triggered with a key other than Enter, open the URL ourselves.
|
|
267
|
-
// This means the link has a role override, and the default browser behavior
|
|
268
|
-
// only applies when using the Enter key.
|
|
269
|
-
if (e.key !== 'Enter' && $0294ea432cd92340$var$isHTMLAnchorLink(state.target) && (0, $bBqCQ$reactariautils.nodeContains)(state.target, target) && !e[$0294ea432cd92340$var$LINK_CLICKED]) {
|
|
270
|
-
// Store a hidden property on the event so we only trigger link click once,
|
|
271
|
-
// even if there are multiple usePress instances attached to the element.
|
|
272
|
-
e[$0294ea432cd92340$var$LINK_CLICKED] = true;
|
|
273
|
-
(0, $bBqCQ$reactariautils.openLink)(state.target, e, false);
|
|
274
|
-
}
|
|
275
|
-
state.isPressed = false;
|
|
276
|
-
(_state_metaKeyEvents1 = state.metaKeyEvents) === null || _state_metaKeyEvents1 === void 0 ? void 0 : _state_metaKeyEvents1.delete(e.key);
|
|
277
|
-
} else if (e.key === 'Meta' && ((_state_metaKeyEvents = state.metaKeyEvents) === null || _state_metaKeyEvents === void 0 ? void 0 : _state_metaKeyEvents.size)) {
|
|
278
|
-
var _state_target;
|
|
279
|
-
// If we recorded keydown events that occurred while the Meta key was pressed,
|
|
280
|
-
// and those haven't received keyup events already, fire keyup events ourselves.
|
|
281
|
-
// See comment above for more info about the macOS bug causing this.
|
|
282
|
-
let events = state.metaKeyEvents;
|
|
283
|
-
state.metaKeyEvents = undefined;
|
|
284
|
-
for (let event of events.values())(_state_target = state.target) === null || _state_target === void 0 ? void 0 : _state_target.dispatchEvent(new KeyboardEvent('keyup', event));
|
|
285
|
-
}
|
|
286
|
-
};
|
|
287
417
|
if (typeof PointerEvent !== 'undefined') {
|
|
288
418
|
pressProps.onPointerDown = (e)=>{
|
|
289
419
|
// Only handle left clicks, and ignore events that bubbled through portals.
|
|
@@ -300,6 +430,7 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
300
430
|
let shouldStopPropagation = true;
|
|
301
431
|
if (!state.isPressed) {
|
|
302
432
|
state.isPressed = true;
|
|
433
|
+
setIsPointerPressed('pointer');
|
|
303
434
|
state.isOverTarget = true;
|
|
304
435
|
state.activePointerId = e.pointerId;
|
|
305
436
|
state.target = e.currentTarget;
|
|
@@ -309,8 +440,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
309
440
|
// This enables onPointerLeave and onPointerEnter to fire.
|
|
310
441
|
let target = (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent);
|
|
311
442
|
if ('releasePointerCapture' in target) target.releasePointerCapture(e.pointerId);
|
|
312
|
-
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(e.currentTarget), 'pointerup', onPointerUp, false);
|
|
313
|
-
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(e.currentTarget), 'pointercancel', onPointerCancel, false);
|
|
314
443
|
}
|
|
315
444
|
if (shouldStopPropagation) e.stopPropagation();
|
|
316
445
|
};
|
|
@@ -343,41 +472,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
343
472
|
cancelOnPointerExit(e);
|
|
344
473
|
}
|
|
345
474
|
};
|
|
346
|
-
let onPointerUp = (e)=>{
|
|
347
|
-
if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0 && state.target) {
|
|
348
|
-
if ((0, $bBqCQ$reactariautils.nodeContains)(state.target, (0, $bBqCQ$reactariautils.getEventTarget)(e)) && state.pointerType != null) {
|
|
349
|
-
// Wait for onClick to fire onPress. This avoids browser issues when the DOM
|
|
350
|
-
// is mutated between onPointerUp and onClick, and is more compatible with third party libraries.
|
|
351
|
-
// https://github.com/adobe/react-spectrum/issues/1513
|
|
352
|
-
// https://issues.chromium.org/issues/40732224
|
|
353
|
-
// However, iOS and Android do not focus or fire onClick after a long press.
|
|
354
|
-
// We work around this by triggering a click ourselves after a timeout.
|
|
355
|
-
// This timeout is canceled during the click event in case the real one fires first.
|
|
356
|
-
// The timeout must be at least 32ms, because Safari on iOS delays the click event on
|
|
357
|
-
// non-form elements without certain ARIA roles (for hover emulation).
|
|
358
|
-
// https://github.com/WebKit/WebKit/blob/dccfae42bb29bd4bdef052e469f604a9387241c0/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm#L875-L892
|
|
359
|
-
let clicked = false;
|
|
360
|
-
let timeout = setTimeout(()=>{
|
|
361
|
-
if (state.isPressed && state.target instanceof HTMLElement) {
|
|
362
|
-
if (clicked) cancel(e);
|
|
363
|
-
else {
|
|
364
|
-
(0, $bBqCQ$reactariautils.focusWithoutScrolling)(state.target);
|
|
365
|
-
state.target.click();
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
}, 80);
|
|
369
|
-
// Use a capturing listener to track if a click occurred.
|
|
370
|
-
// If stopPropagation is called it may never reach our handler.
|
|
371
|
-
addGlobalListener(e.currentTarget, 'click', ()=>clicked = true, true);
|
|
372
|
-
state.disposables.push(()=>clearTimeout(timeout));
|
|
373
|
-
} else cancel(e);
|
|
374
|
-
// Ignore subsequent onPointerLeave event before onClick on touch devices.
|
|
375
|
-
state.isOverTarget = false;
|
|
376
|
-
}
|
|
377
|
-
};
|
|
378
|
-
let onPointerCancel = (e)=>{
|
|
379
|
-
cancel(e);
|
|
380
|
-
};
|
|
381
475
|
pressProps.onDragStart = (e)=>{
|
|
382
476
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
383
477
|
// Safari does not call onPointerCancel when a drag starts, whereas Chrome and Firefox do.
|
|
@@ -394,6 +488,7 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
394
488
|
return;
|
|
395
489
|
}
|
|
396
490
|
state.isPressed = true;
|
|
491
|
+
setIsPointerPressed('mouse');
|
|
397
492
|
state.isOverTarget = true;
|
|
398
493
|
state.target = e.currentTarget;
|
|
399
494
|
state.pointerType = (0, $bBqCQ$reactariautils.isVirtualClick)(e.nativeEvent) ? 'virtual' : 'mouse';
|
|
@@ -404,7 +499,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
404
499
|
let dispose = (0, $625cf83917e112ad$exports.preventFocus)(e.target);
|
|
405
500
|
if (dispose) state.disposables.push(dispose);
|
|
406
501
|
}
|
|
407
|
-
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(e.currentTarget), 'mouseup', onMouseUp, false);
|
|
408
502
|
};
|
|
409
503
|
pressProps.onMouseEnter = (e)=>{
|
|
410
504
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
@@ -429,17 +523,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
429
523
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
430
524
|
if (!state.ignoreEmulatedMouseEvents && e.button === 0 && !state.isPressed) triggerPressUp(e, state.pointerType || 'mouse');
|
|
431
525
|
};
|
|
432
|
-
let onMouseUp = (e)=>{
|
|
433
|
-
// Only handle left clicks
|
|
434
|
-
if (e.button !== 0) return;
|
|
435
|
-
if (state.ignoreEmulatedMouseEvents) {
|
|
436
|
-
state.ignoreEmulatedMouseEvents = false;
|
|
437
|
-
return;
|
|
438
|
-
}
|
|
439
|
-
if (state.target && state.target.contains(e.target) && state.pointerType != null) ;
|
|
440
|
-
else cancel(e);
|
|
441
|
-
state.isOverTarget = false;
|
|
442
|
-
};
|
|
443
526
|
pressProps.onTouchStart = (e)=>{
|
|
444
527
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
445
528
|
let touch = $0294ea432cd92340$var$getTouchFromEvent(e.nativeEvent);
|
|
@@ -448,12 +531,12 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
448
531
|
state.ignoreEmulatedMouseEvents = true;
|
|
449
532
|
state.isOverTarget = true;
|
|
450
533
|
state.isPressed = true;
|
|
534
|
+
setIsPointerPressed('touch');
|
|
451
535
|
state.target = e.currentTarget;
|
|
452
536
|
state.pointerType = 'touch';
|
|
453
537
|
if (!allowTextSelectionOnPress) (0, $f7e14e656343df57$exports.disableTextSelection)(state.target);
|
|
454
538
|
let shouldStopPropagation = triggerPressStart($0294ea432cd92340$var$createTouchEvent(state.target, e), state.pointerType);
|
|
455
539
|
if (shouldStopPropagation) e.stopPropagation();
|
|
456
|
-
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerWindow)(e.currentTarget), 'scroll', onScroll, true);
|
|
457
540
|
};
|
|
458
541
|
pressProps.onTouchMove = (e)=>{
|
|
459
542
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
@@ -490,6 +573,7 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
490
573
|
} else if (state.isOverTarget && state.pointerType != null) shouldStopPropagation = triggerPressEnd($0294ea432cd92340$var$createTouchEvent(state.target, e), state.pointerType, false);
|
|
491
574
|
if (shouldStopPropagation) e.stopPropagation();
|
|
492
575
|
state.isPressed = false;
|
|
576
|
+
setIsPointerPressed(null);
|
|
493
577
|
state.activePointerId = null;
|
|
494
578
|
state.isOverTarget = false;
|
|
495
579
|
state.ignoreEmulatedMouseEvents = true;
|
|
@@ -501,15 +585,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
501
585
|
e.stopPropagation();
|
|
502
586
|
if (state.isPressed) cancel($0294ea432cd92340$var$createTouchEvent(state.target, e));
|
|
503
587
|
};
|
|
504
|
-
let onScroll = (e)=>{
|
|
505
|
-
if (state.isPressed && (0, $bBqCQ$reactariautils.nodeContains)((0, $bBqCQ$reactariautils.getEventTarget)(e), state.target)) cancel({
|
|
506
|
-
currentTarget: state.target,
|
|
507
|
-
shiftKey: false,
|
|
508
|
-
ctrlKey: false,
|
|
509
|
-
metaKey: false,
|
|
510
|
-
altKey: false
|
|
511
|
-
});
|
|
512
|
-
};
|
|
513
588
|
pressProps.onDragStart = (e)=>{
|
|
514
589
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
515
590
|
cancel(e);
|
|
@@ -517,7 +592,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
517
592
|
}
|
|
518
593
|
return pressProps;
|
|
519
594
|
}, [
|
|
520
|
-
addGlobalListener,
|
|
521
595
|
isDisabled,
|
|
522
596
|
preventFocusOnPress,
|
|
523
597
|
removeAllGlobalListeners,
|