@react-aria/interactions 3.25.6 → 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 +186 -114
- package/dist/usePress.main.js.map +1 -1
- package/dist/usePress.mjs +188 -116
- package/dist/usePress.module.js +188 -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 +3 -3
- 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 +183 -147
- 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,15 +186,26 @@ 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)=>{
|
|
179
202
|
if (isDisabled) return;
|
|
180
203
|
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
181
|
-
}
|
|
182
|
-
|
|
204
|
+
}, [
|
|
205
|
+
isDisabled,
|
|
206
|
+
onClick
|
|
207
|
+
]);
|
|
208
|
+
let triggerSyntheticClick = (0, $bBqCQ$react.useCallback)((e, target)=>{
|
|
183
209
|
if (isDisabled) return;
|
|
184
210
|
// Some third-party libraries pass in onClick instead of onPress.
|
|
185
211
|
// Create a fake mouse event and trigger onClick as well.
|
|
@@ -191,7 +217,147 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
191
217
|
(0, $625cf83917e112ad$exports.setEventTarget)(event, target);
|
|
192
218
|
onClick((0, $625cf83917e112ad$exports.createSyntheticEvent)(event));
|
|
193
219
|
}
|
|
194
|
-
}
|
|
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
|
+
]);
|
|
195
361
|
let pressProps = (0, $bBqCQ$react.useMemo)(()=>{
|
|
196
362
|
let state = ref.current;
|
|
197
363
|
let pressProps = {
|
|
@@ -206,16 +372,9 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
206
372
|
if (!state.isPressed && !e.repeat) {
|
|
207
373
|
state.target = e.currentTarget;
|
|
208
374
|
state.isPressed = true;
|
|
375
|
+
setIsElemKeyPressed(true);
|
|
209
376
|
state.pointerType = 'keyboard';
|
|
210
377
|
shouldStopPropagation = triggerPressStart(e, 'keyboard');
|
|
211
|
-
// Focus may move before the key up event, so register the event on the document
|
|
212
|
-
// instead of the same element where the key down event occurred. Make it capturing so that it will trigger
|
|
213
|
-
// before stopPropagation from useKeyboard on a child element may happen and thus we can still call triggerPress for the parent element.
|
|
214
|
-
let originalTarget = e.currentTarget;
|
|
215
|
-
let pressUp = (e)=>{
|
|
216
|
-
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');
|
|
217
|
-
};
|
|
218
|
-
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(e.currentTarget), 'keyup', (0, $bBqCQ$reactariautils.chain)(pressUp, onKeyUp), true);
|
|
219
378
|
}
|
|
220
379
|
if (shouldStopPropagation) e.stopPropagation();
|
|
221
380
|
// Keep track of the keydown events that occur while the Meta (e.g. Command) key is held.
|
|
@@ -255,37 +414,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
255
414
|
}
|
|
256
415
|
}
|
|
257
416
|
};
|
|
258
|
-
let onKeyUp = (e)=>{
|
|
259
|
-
var _state_metaKeyEvents;
|
|
260
|
-
if (state.isPressed && state.target && $0294ea432cd92340$var$isValidKeyboardEvent(e, state.target)) {
|
|
261
|
-
var _state_metaKeyEvents1;
|
|
262
|
-
if ($0294ea432cd92340$var$shouldPreventDefaultKeyboard((0, $bBqCQ$reactariautils.getEventTarget)(e), e.key)) e.preventDefault();
|
|
263
|
-
let target = (0, $bBqCQ$reactariautils.getEventTarget)(e);
|
|
264
|
-
let wasPressed = (0, $bBqCQ$reactariautils.nodeContains)(state.target, (0, $bBqCQ$reactariautils.getEventTarget)(e));
|
|
265
|
-
triggerPressEnd($0294ea432cd92340$var$createEvent(state.target, e), 'keyboard', wasPressed);
|
|
266
|
-
if (wasPressed) triggerSyntheticClick(e, state.target);
|
|
267
|
-
removeAllGlobalListeners();
|
|
268
|
-
// If a link was triggered with a key other than Enter, open the URL ourselves.
|
|
269
|
-
// This means the link has a role override, and the default browser behavior
|
|
270
|
-
// only applies when using the Enter key.
|
|
271
|
-
if (e.key !== 'Enter' && $0294ea432cd92340$var$isHTMLAnchorLink(state.target) && (0, $bBqCQ$reactariautils.nodeContains)(state.target, target) && !e[$0294ea432cd92340$var$LINK_CLICKED]) {
|
|
272
|
-
// Store a hidden property on the event so we only trigger link click once,
|
|
273
|
-
// even if there are multiple usePress instances attached to the element.
|
|
274
|
-
e[$0294ea432cd92340$var$LINK_CLICKED] = true;
|
|
275
|
-
(0, $bBqCQ$reactariautils.openLink)(state.target, e, false);
|
|
276
|
-
}
|
|
277
|
-
state.isPressed = false;
|
|
278
|
-
(_state_metaKeyEvents1 = state.metaKeyEvents) === null || _state_metaKeyEvents1 === void 0 ? void 0 : _state_metaKeyEvents1.delete(e.key);
|
|
279
|
-
} else if (e.key === 'Meta' && ((_state_metaKeyEvents = state.metaKeyEvents) === null || _state_metaKeyEvents === void 0 ? void 0 : _state_metaKeyEvents.size)) {
|
|
280
|
-
var _state_target;
|
|
281
|
-
// If we recorded keydown events that occurred while the Meta key was pressed,
|
|
282
|
-
// and those haven't received keyup events already, fire keyup events ourselves.
|
|
283
|
-
// See comment above for more info about the macOS bug causing this.
|
|
284
|
-
let events = state.metaKeyEvents;
|
|
285
|
-
state.metaKeyEvents = undefined;
|
|
286
|
-
for (let event of events.values())(_state_target = state.target) === null || _state_target === void 0 ? void 0 : _state_target.dispatchEvent(new KeyboardEvent('keyup', event));
|
|
287
|
-
}
|
|
288
|
-
};
|
|
289
417
|
if (typeof PointerEvent !== 'undefined') {
|
|
290
418
|
pressProps.onPointerDown = (e)=>{
|
|
291
419
|
// Only handle left clicks, and ignore events that bubbled through portals.
|
|
@@ -302,6 +430,7 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
302
430
|
let shouldStopPropagation = true;
|
|
303
431
|
if (!state.isPressed) {
|
|
304
432
|
state.isPressed = true;
|
|
433
|
+
setIsPointerPressed('pointer');
|
|
305
434
|
state.isOverTarget = true;
|
|
306
435
|
state.activePointerId = e.pointerId;
|
|
307
436
|
state.target = e.currentTarget;
|
|
@@ -311,8 +440,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
311
440
|
// This enables onPointerLeave and onPointerEnter to fire.
|
|
312
441
|
let target = (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent);
|
|
313
442
|
if ('releasePointerCapture' in target) target.releasePointerCapture(e.pointerId);
|
|
314
|
-
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(e.currentTarget), 'pointerup', onPointerUp, false);
|
|
315
|
-
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(e.currentTarget), 'pointercancel', onPointerCancel, false);
|
|
316
443
|
}
|
|
317
444
|
if (shouldStopPropagation) e.stopPropagation();
|
|
318
445
|
};
|
|
@@ -345,41 +472,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
345
472
|
cancelOnPointerExit(e);
|
|
346
473
|
}
|
|
347
474
|
};
|
|
348
|
-
let onPointerUp = (e)=>{
|
|
349
|
-
if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0 && state.target) {
|
|
350
|
-
if ((0, $bBqCQ$reactariautils.nodeContains)(state.target, (0, $bBqCQ$reactariautils.getEventTarget)(e)) && state.pointerType != null) {
|
|
351
|
-
// Wait for onClick to fire onPress. This avoids browser issues when the DOM
|
|
352
|
-
// is mutated between onPointerUp and onClick, and is more compatible with third party libraries.
|
|
353
|
-
// https://github.com/adobe/react-spectrum/issues/1513
|
|
354
|
-
// https://issues.chromium.org/issues/40732224
|
|
355
|
-
// However, iOS and Android do not focus or fire onClick after a long press.
|
|
356
|
-
// We work around this by triggering a click ourselves after a timeout.
|
|
357
|
-
// This timeout is canceled during the click event in case the real one fires first.
|
|
358
|
-
// The timeout must be at least 32ms, because Safari on iOS delays the click event on
|
|
359
|
-
// non-form elements without certain ARIA roles (for hover emulation).
|
|
360
|
-
// https://github.com/WebKit/WebKit/blob/dccfae42bb29bd4bdef052e469f604a9387241c0/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm#L875-L892
|
|
361
|
-
let clicked = false;
|
|
362
|
-
let timeout = setTimeout(()=>{
|
|
363
|
-
if (state.isPressed && state.target instanceof HTMLElement) {
|
|
364
|
-
if (clicked) cancel(e);
|
|
365
|
-
else {
|
|
366
|
-
(0, $bBqCQ$reactariautils.focusWithoutScrolling)(state.target);
|
|
367
|
-
state.target.click();
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
}, 80);
|
|
371
|
-
// Use a capturing listener to track if a click occurred.
|
|
372
|
-
// If stopPropagation is called it may never reach our handler.
|
|
373
|
-
addGlobalListener(e.currentTarget, 'click', ()=>clicked = true, true);
|
|
374
|
-
state.disposables.push(()=>clearTimeout(timeout));
|
|
375
|
-
} else cancel(e);
|
|
376
|
-
// Ignore subsequent onPointerLeave event before onClick on touch devices.
|
|
377
|
-
state.isOverTarget = false;
|
|
378
|
-
}
|
|
379
|
-
};
|
|
380
|
-
let onPointerCancel = (e)=>{
|
|
381
|
-
cancel(e);
|
|
382
|
-
};
|
|
383
475
|
pressProps.onDragStart = (e)=>{
|
|
384
476
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
385
477
|
// Safari does not call onPointerCancel when a drag starts, whereas Chrome and Firefox do.
|
|
@@ -396,6 +488,7 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
396
488
|
return;
|
|
397
489
|
}
|
|
398
490
|
state.isPressed = true;
|
|
491
|
+
setIsPointerPressed('mouse');
|
|
399
492
|
state.isOverTarget = true;
|
|
400
493
|
state.target = e.currentTarget;
|
|
401
494
|
state.pointerType = (0, $bBqCQ$reactariautils.isVirtualClick)(e.nativeEvent) ? 'virtual' : 'mouse';
|
|
@@ -406,7 +499,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
406
499
|
let dispose = (0, $625cf83917e112ad$exports.preventFocus)(e.target);
|
|
407
500
|
if (dispose) state.disposables.push(dispose);
|
|
408
501
|
}
|
|
409
|
-
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(e.currentTarget), 'mouseup', onMouseUp, false);
|
|
410
502
|
};
|
|
411
503
|
pressProps.onMouseEnter = (e)=>{
|
|
412
504
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
@@ -431,17 +523,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
431
523
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
432
524
|
if (!state.ignoreEmulatedMouseEvents && e.button === 0 && !state.isPressed) triggerPressUp(e, state.pointerType || 'mouse');
|
|
433
525
|
};
|
|
434
|
-
let onMouseUp = (e)=>{
|
|
435
|
-
// Only handle left clicks
|
|
436
|
-
if (e.button !== 0) return;
|
|
437
|
-
if (state.ignoreEmulatedMouseEvents) {
|
|
438
|
-
state.ignoreEmulatedMouseEvents = false;
|
|
439
|
-
return;
|
|
440
|
-
}
|
|
441
|
-
if (state.target && state.target.contains(e.target) && state.pointerType != null) ;
|
|
442
|
-
else cancel(e);
|
|
443
|
-
state.isOverTarget = false;
|
|
444
|
-
};
|
|
445
526
|
pressProps.onTouchStart = (e)=>{
|
|
446
527
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
447
528
|
let touch = $0294ea432cd92340$var$getTouchFromEvent(e.nativeEvent);
|
|
@@ -450,12 +531,12 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
450
531
|
state.ignoreEmulatedMouseEvents = true;
|
|
451
532
|
state.isOverTarget = true;
|
|
452
533
|
state.isPressed = true;
|
|
534
|
+
setIsPointerPressed('touch');
|
|
453
535
|
state.target = e.currentTarget;
|
|
454
536
|
state.pointerType = 'touch';
|
|
455
537
|
if (!allowTextSelectionOnPress) (0, $f7e14e656343df57$exports.disableTextSelection)(state.target);
|
|
456
538
|
let shouldStopPropagation = triggerPressStart($0294ea432cd92340$var$createTouchEvent(state.target, e), state.pointerType);
|
|
457
539
|
if (shouldStopPropagation) e.stopPropagation();
|
|
458
|
-
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerWindow)(e.currentTarget), 'scroll', onScroll, true);
|
|
459
540
|
};
|
|
460
541
|
pressProps.onTouchMove = (e)=>{
|
|
461
542
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
@@ -492,6 +573,7 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
492
573
|
} else if (state.isOverTarget && state.pointerType != null) shouldStopPropagation = triggerPressEnd($0294ea432cd92340$var$createTouchEvent(state.target, e), state.pointerType, false);
|
|
493
574
|
if (shouldStopPropagation) e.stopPropagation();
|
|
494
575
|
state.isPressed = false;
|
|
576
|
+
setIsPointerPressed(null);
|
|
495
577
|
state.activePointerId = null;
|
|
496
578
|
state.isOverTarget = false;
|
|
497
579
|
state.ignoreEmulatedMouseEvents = true;
|
|
@@ -503,15 +585,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
503
585
|
e.stopPropagation();
|
|
504
586
|
if (state.isPressed) cancel($0294ea432cd92340$var$createTouchEvent(state.target, e));
|
|
505
587
|
};
|
|
506
|
-
let onScroll = (e)=>{
|
|
507
|
-
if (state.isPressed && (0, $bBqCQ$reactariautils.nodeContains)((0, $bBqCQ$reactariautils.getEventTarget)(e), state.target)) cancel({
|
|
508
|
-
currentTarget: state.target,
|
|
509
|
-
shiftKey: false,
|
|
510
|
-
ctrlKey: false,
|
|
511
|
-
metaKey: false,
|
|
512
|
-
altKey: false
|
|
513
|
-
});
|
|
514
|
-
};
|
|
515
588
|
pressProps.onDragStart = (e)=>{
|
|
516
589
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
517
590
|
cancel(e);
|
|
@@ -519,7 +592,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
519
592
|
}
|
|
520
593
|
return pressProps;
|
|
521
594
|
}, [
|
|
522
|
-
addGlobalListener,
|
|
523
595
|
isDisabled,
|
|
524
596
|
preventFocusOnPress,
|
|
525
597
|
removeAllGlobalListeners,
|