@react-aria/interactions 3.25.6 → 3.27.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/PressResponder.main.js +2 -3
- package/dist/PressResponder.main.js.map +1 -1
- package/dist/PressResponder.mjs +3 -4
- package/dist/PressResponder.module.js +3 -4
- package/dist/PressResponder.module.js.map +1 -1
- 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 +4 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/useFocusVisible.main.js +19 -8
- package/dist/useFocusVisible.main.js.map +1 -1
- package/dist/useFocusVisible.mjs +20 -10
- package/dist/useFocusVisible.module.js +20 -10
- package/dist/useFocusVisible.module.js.map +1 -1
- package/dist/useFocusWithin.main.js +3 -3
- package/dist/useFocusWithin.main.js.map +1 -1
- package/dist/useFocusWithin.mjs +4 -4
- package/dist/useFocusWithin.module.js +4 -4
- package/dist/useFocusWithin.module.js.map +1 -1
- package/dist/useHover.main.js +3 -3
- package/dist/useHover.main.js.map +1 -1
- package/dist/useHover.mjs +4 -4
- package/dist/useHover.module.js +4 -4
- package/dist/useHover.module.js.map +1 -1
- package/dist/useInteractOutside.main.js +2 -4
- package/dist/useInteractOutside.main.js.map +1 -1
- package/dist/useInteractOutside.mjs +3 -5
- package/dist/useInteractOutside.module.js +3 -5
- 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 +197 -117
- package/dist/usePress.main.js.map +1 -1
- package/dist/usePress.mjs +199 -119
- package/dist/usePress.module.js +199 -119
- 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/PressResponder.tsx +3 -4
- package/src/focusSafely.ts +4 -4
- package/src/index.ts +1 -0
- package/src/useFocusVisible.ts +21 -5
- package/src/useFocusWithin.ts +3 -3
- package/src/useHover.ts +3 -3
- package/src/useInteractOutside.ts +3 -3
- package/src/useMove.ts +85 -57
- package/src/usePress.ts +199 -151
- package/src/utils.ts +3 -7
package/dist/usePress.main.js
CHANGED
|
@@ -41,7 +41,9 @@ function $0294ea432cd92340$var$usePressResponderContext(props) {
|
|
|
41
41
|
// Consume context from <PressResponder> and merge with props.
|
|
42
42
|
let context = (0, $bBqCQ$react.useContext)((0, $01d3f539e91688c8$exports.PressResponderContext));
|
|
43
43
|
if (context) {
|
|
44
|
-
|
|
44
|
+
// Prevent mergeProps from merging ref.
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
46
|
+
let { register: register, ref: ref, ...contextProps } = context;
|
|
45
47
|
props = (0, $bBqCQ$reactariautils.mergeProps)(contextProps, props);
|
|
46
48
|
register();
|
|
47
49
|
}
|
|
@@ -89,6 +91,7 @@ class $0294ea432cd92340$var$PressEvent {
|
|
|
89
91
|
this.altKey = originalEvent.altKey;
|
|
90
92
|
this.x = x;
|
|
91
93
|
this.y = y;
|
|
94
|
+
this.key = originalEvent.key;
|
|
92
95
|
}
|
|
93
96
|
}
|
|
94
97
|
const $0294ea432cd92340$var$LINK_CLICKED = Symbol('linkClicked');
|
|
@@ -108,8 +111,8 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
108
111
|
pointerType: null,
|
|
109
112
|
disposables: []
|
|
110
113
|
});
|
|
111
|
-
let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $bBqCQ$reactariautils.useGlobalListeners)();
|
|
112
|
-
let triggerPressStart = (0, $bBqCQ$
|
|
114
|
+
let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners, removeGlobalListener: removeGlobalListener } = (0, $bBqCQ$reactariautils.useGlobalListeners)();
|
|
115
|
+
let triggerPressStart = (0, $bBqCQ$react.useCallback)((originalEvent, pointerType)=>{
|
|
113
116
|
let state = ref.current;
|
|
114
117
|
if (isDisabled || state.didFirePressStart) return false;
|
|
115
118
|
let shouldStopPropagation = true;
|
|
@@ -124,8 +127,12 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
124
127
|
state.didFirePressStart = true;
|
|
125
128
|
setPressed(true);
|
|
126
129
|
return shouldStopPropagation;
|
|
127
|
-
}
|
|
128
|
-
|
|
130
|
+
}, [
|
|
131
|
+
isDisabled,
|
|
132
|
+
onPressStart,
|
|
133
|
+
onPressChange
|
|
134
|
+
]);
|
|
135
|
+
let triggerPressEnd = (0, $bBqCQ$react.useCallback)((originalEvent, pointerType, wasPressed = true)=>{
|
|
129
136
|
let state = ref.current;
|
|
130
137
|
if (!state.didFirePressStart) return false;
|
|
131
138
|
state.didFirePressStart = false;
|
|
@@ -145,8 +152,14 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
145
152
|
}
|
|
146
153
|
state.isTriggeringEvent = false;
|
|
147
154
|
return shouldStopPropagation;
|
|
148
|
-
}
|
|
149
|
-
|
|
155
|
+
}, [
|
|
156
|
+
isDisabled,
|
|
157
|
+
onPressEnd,
|
|
158
|
+
onPressChange,
|
|
159
|
+
onPress
|
|
160
|
+
]);
|
|
161
|
+
let triggerPressEndEvent = (0, $bBqCQ$reactariautils.useEffectEvent)(triggerPressEnd);
|
|
162
|
+
let triggerPressUp = (0, $bBqCQ$react.useCallback)((originalEvent, pointerType)=>{
|
|
150
163
|
let state = ref.current;
|
|
151
164
|
if (isDisabled) return false;
|
|
152
165
|
if (onPressUp) {
|
|
@@ -157,12 +170,17 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
157
170
|
return event.shouldStopPropagation;
|
|
158
171
|
}
|
|
159
172
|
return true;
|
|
160
|
-
}
|
|
161
|
-
|
|
173
|
+
}, [
|
|
174
|
+
isDisabled,
|
|
175
|
+
onPressUp
|
|
176
|
+
]);
|
|
177
|
+
let triggerPressUpEvent = (0, $bBqCQ$reactariautils.useEffectEvent)(triggerPressUp);
|
|
178
|
+
let cancel = (0, $bBqCQ$react.useCallback)((e)=>{
|
|
162
179
|
let state = ref.current;
|
|
163
180
|
if (state.isPressed && state.target) {
|
|
164
181
|
if (state.didFirePressStart && state.pointerType != null) triggerPressEnd($0294ea432cd92340$var$createEvent(state.target, e), state.pointerType, false);
|
|
165
182
|
state.isPressed = false;
|
|
183
|
+
setIsPointerPressed(null);
|
|
166
184
|
state.isOverTarget = false;
|
|
167
185
|
state.activePointerId = null;
|
|
168
186
|
state.pointerType = null;
|
|
@@ -171,15 +189,26 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
171
189
|
for (let dispose of state.disposables)dispose();
|
|
172
190
|
state.disposables = [];
|
|
173
191
|
}
|
|
174
|
-
}
|
|
175
|
-
|
|
192
|
+
}, [
|
|
193
|
+
allowTextSelectionOnPress,
|
|
194
|
+
removeAllGlobalListeners,
|
|
195
|
+
triggerPressEnd
|
|
196
|
+
]);
|
|
197
|
+
let cancelEvent = (0, $bBqCQ$reactariautils.useEffectEvent)(cancel);
|
|
198
|
+
let cancelOnPointerExit = (0, $bBqCQ$react.useCallback)((e)=>{
|
|
176
199
|
if (shouldCancelOnPointerExit) cancel(e);
|
|
177
|
-
}
|
|
178
|
-
|
|
200
|
+
}, [
|
|
201
|
+
shouldCancelOnPointerExit,
|
|
202
|
+
cancel
|
|
203
|
+
]);
|
|
204
|
+
let triggerClick = (0, $bBqCQ$react.useCallback)((e)=>{
|
|
179
205
|
if (isDisabled) return;
|
|
180
206
|
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
181
|
-
}
|
|
182
|
-
|
|
207
|
+
}, [
|
|
208
|
+
isDisabled,
|
|
209
|
+
onClick
|
|
210
|
+
]);
|
|
211
|
+
let triggerSyntheticClick = (0, $bBqCQ$react.useCallback)((e, target)=>{
|
|
183
212
|
if (isDisabled) return;
|
|
184
213
|
// Some third-party libraries pass in onClick instead of onPress.
|
|
185
214
|
// Create a fake mouse event and trigger onClick as well.
|
|
@@ -191,7 +220,147 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
191
220
|
(0, $625cf83917e112ad$exports.setEventTarget)(event, target);
|
|
192
221
|
onClick((0, $625cf83917e112ad$exports.createSyntheticEvent)(event));
|
|
193
222
|
}
|
|
194
|
-
}
|
|
223
|
+
}, [
|
|
224
|
+
isDisabled,
|
|
225
|
+
onClick
|
|
226
|
+
]);
|
|
227
|
+
let triggerSyntheticClickEvent = (0, $bBqCQ$reactariautils.useEffectEvent)(triggerSyntheticClick);
|
|
228
|
+
let [isElemKeyPressed, setIsElemKeyPressed] = (0, $bBqCQ$react.useState)(false);
|
|
229
|
+
(0, $bBqCQ$reactariautils.useLayoutEffect)(()=>{
|
|
230
|
+
let state = ref.current;
|
|
231
|
+
if (isElemKeyPressed) {
|
|
232
|
+
let onKeyUp = (e)=>{
|
|
233
|
+
var _state_metaKeyEvents;
|
|
234
|
+
if (state.isPressed && state.target && $0294ea432cd92340$var$isValidKeyboardEvent(e, state.target)) {
|
|
235
|
+
var _state_metaKeyEvents1;
|
|
236
|
+
if ($0294ea432cd92340$var$shouldPreventDefaultKeyboard((0, $bBqCQ$reactariautils.getEventTarget)(e), e.key)) e.preventDefault();
|
|
237
|
+
let target = (0, $bBqCQ$reactariautils.getEventTarget)(e);
|
|
238
|
+
let wasPressed = (0, $bBqCQ$reactariautils.nodeContains)(state.target, (0, $bBqCQ$reactariautils.getEventTarget)(e));
|
|
239
|
+
triggerPressEndEvent($0294ea432cd92340$var$createEvent(state.target, e), 'keyboard', wasPressed);
|
|
240
|
+
if (wasPressed) triggerSyntheticClickEvent(e, state.target);
|
|
241
|
+
removeAllGlobalListeners();
|
|
242
|
+
// If a link was triggered with a key other than Enter, open the URL ourselves.
|
|
243
|
+
// This means the link has a role override, and the default browser behavior
|
|
244
|
+
// only applies when using the Enter key.
|
|
245
|
+
if (e.key !== 'Enter' && $0294ea432cd92340$var$isHTMLAnchorLink(state.target) && (0, $bBqCQ$reactariautils.nodeContains)(state.target, target) && !e[$0294ea432cd92340$var$LINK_CLICKED]) {
|
|
246
|
+
// Store a hidden property on the event so we only trigger link click once,
|
|
247
|
+
// even if there are multiple usePress instances attached to the element.
|
|
248
|
+
e[$0294ea432cd92340$var$LINK_CLICKED] = true;
|
|
249
|
+
(0, $bBqCQ$reactariautils.openLink)(state.target, e, false);
|
|
250
|
+
}
|
|
251
|
+
state.isPressed = false;
|
|
252
|
+
setIsElemKeyPressed(false);
|
|
253
|
+
(_state_metaKeyEvents1 = state.metaKeyEvents) === null || _state_metaKeyEvents1 === void 0 ? void 0 : _state_metaKeyEvents1.delete(e.key);
|
|
254
|
+
} else if (e.key === 'Meta' && ((_state_metaKeyEvents = state.metaKeyEvents) === null || _state_metaKeyEvents === void 0 ? void 0 : _state_metaKeyEvents.size)) {
|
|
255
|
+
var _state_target;
|
|
256
|
+
// If we recorded keydown events that occurred while the Meta key was pressed,
|
|
257
|
+
// and those haven't received keyup events already, fire keyup events ourselves.
|
|
258
|
+
// See comment above for more info about the macOS bug causing this.
|
|
259
|
+
let events = state.metaKeyEvents;
|
|
260
|
+
state.metaKeyEvents = undefined;
|
|
261
|
+
for (let event of events.values())(_state_target = state.target) === null || _state_target === void 0 ? void 0 : _state_target.dispatchEvent(new KeyboardEvent('keyup', event));
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
// Focus may move before the key up event, so register the event on the document
|
|
265
|
+
// instead of the same element where the key down event occurred. Make it capturing so that it will trigger
|
|
266
|
+
// before stopPropagation from useKeyboard on a child element may happen and thus we can still call triggerPress for the parent element.
|
|
267
|
+
let originalTarget = state.target;
|
|
268
|
+
let pressUp = (e)=>{
|
|
269
|
+
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');
|
|
270
|
+
};
|
|
271
|
+
let listener = (0, $bBqCQ$reactariautils.chain)(pressUp, onKeyUp);
|
|
272
|
+
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'keyup', listener, true);
|
|
273
|
+
return ()=>{
|
|
274
|
+
removeGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'keyup', listener, true);
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
}, [
|
|
278
|
+
isElemKeyPressed,
|
|
279
|
+
addGlobalListener,
|
|
280
|
+
removeAllGlobalListeners,
|
|
281
|
+
removeGlobalListener
|
|
282
|
+
]);
|
|
283
|
+
let [isPointerPressed, setIsPointerPressed] = (0, $bBqCQ$react.useState)(null);
|
|
284
|
+
(0, $bBqCQ$reactariautils.useLayoutEffect)(()=>{
|
|
285
|
+
let state = ref.current;
|
|
286
|
+
if (isPointerPressed === 'pointer') {
|
|
287
|
+
let onPointerUp = (e)=>{
|
|
288
|
+
if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0 && state.target) {
|
|
289
|
+
if ((0, $bBqCQ$reactariautils.nodeContains)(state.target, (0, $bBqCQ$reactariautils.getEventTarget)(e)) && state.pointerType != null) {
|
|
290
|
+
// Wait for onClick to fire onPress. This avoids browser issues when the DOM
|
|
291
|
+
// is mutated between onPointerUp and onClick, and is more compatible with third party libraries.
|
|
292
|
+
// https://github.com/adobe/react-spectrum/issues/1513
|
|
293
|
+
// https://issues.chromium.org/issues/40732224
|
|
294
|
+
// However, iOS and Android do not focus or fire onClick after a long press.
|
|
295
|
+
// We work around this by triggering a click ourselves after a timeout.
|
|
296
|
+
// This timeout is canceled during the click event in case the real one fires first.
|
|
297
|
+
// The timeout must be at least 32ms, because Safari on iOS delays the click event on
|
|
298
|
+
// non-form elements without certain ARIA roles (for hover emulation).
|
|
299
|
+
// https://github.com/WebKit/WebKit/blob/dccfae42bb29bd4bdef052e469f604a9387241c0/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm#L875-L892
|
|
300
|
+
let clicked = false;
|
|
301
|
+
let timeout = setTimeout(()=>{
|
|
302
|
+
if (state.isPressed && state.target instanceof HTMLElement) {
|
|
303
|
+
if (clicked) cancelEvent(e);
|
|
304
|
+
else {
|
|
305
|
+
(0, $bBqCQ$reactariautils.focusWithoutScrolling)(state.target);
|
|
306
|
+
state.target.click();
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}, 80);
|
|
310
|
+
// Use a capturing listener to track if a click occurred.
|
|
311
|
+
// If stopPropagation is called it may never reach our handler.
|
|
312
|
+
addGlobalListener(e.currentTarget, 'click', ()=>clicked = true, true);
|
|
313
|
+
state.disposables.push(()=>clearTimeout(timeout));
|
|
314
|
+
} else cancelEvent(e);
|
|
315
|
+
// Ignore subsequent onPointerLeave event before onClick on touch devices.
|
|
316
|
+
state.isOverTarget = false;
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
let onPointerCancel = (e)=>{
|
|
320
|
+
cancelEvent(e);
|
|
321
|
+
};
|
|
322
|
+
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'pointerup', onPointerUp, false);
|
|
323
|
+
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'pointercancel', onPointerCancel, false);
|
|
324
|
+
return ()=>{
|
|
325
|
+
removeGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'pointerup', onPointerUp, false);
|
|
326
|
+
removeGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'pointercancel', onPointerCancel, false);
|
|
327
|
+
};
|
|
328
|
+
} else if (isPointerPressed === 'mouse' && process.env.NODE_ENV === 'test') {
|
|
329
|
+
let onMouseUp = (e)=>{
|
|
330
|
+
// Only handle left clicks
|
|
331
|
+
if (e.button !== 0) return;
|
|
332
|
+
if (state.ignoreEmulatedMouseEvents) {
|
|
333
|
+
state.ignoreEmulatedMouseEvents = false;
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
if (state.target && (0, $bBqCQ$reactariautils.nodeContains)(state.target, e.target) && state.pointerType != null) ;
|
|
337
|
+
else cancelEvent(e);
|
|
338
|
+
state.isOverTarget = false;
|
|
339
|
+
};
|
|
340
|
+
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'mouseup', onMouseUp, false);
|
|
341
|
+
return ()=>{
|
|
342
|
+
removeGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(state.target), 'mouseup', onMouseUp, false);
|
|
343
|
+
};
|
|
344
|
+
} else if (isPointerPressed === 'touch' && process.env.NODE_ENV === 'test') {
|
|
345
|
+
let onScroll = (e)=>{
|
|
346
|
+
if (state.isPressed && (0, $bBqCQ$reactariautils.nodeContains)((0, $bBqCQ$reactariautils.getEventTarget)(e), state.target)) cancelEvent({
|
|
347
|
+
currentTarget: state.target,
|
|
348
|
+
shiftKey: false,
|
|
349
|
+
ctrlKey: false,
|
|
350
|
+
metaKey: false,
|
|
351
|
+
altKey: false
|
|
352
|
+
});
|
|
353
|
+
};
|
|
354
|
+
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerWindow)(state.target), 'scroll', onScroll, true);
|
|
355
|
+
return ()=>{
|
|
356
|
+
removeGlobalListener((0, $bBqCQ$reactariautils.getOwnerWindow)(state.target), 'scroll', onScroll, true);
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
}, [
|
|
360
|
+
isPointerPressed,
|
|
361
|
+
addGlobalListener,
|
|
362
|
+
removeGlobalListener
|
|
363
|
+
]);
|
|
195
364
|
let pressProps = (0, $bBqCQ$react.useMemo)(()=>{
|
|
196
365
|
let state = ref.current;
|
|
197
366
|
let pressProps = {
|
|
@@ -206,16 +375,9 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
206
375
|
if (!state.isPressed && !e.repeat) {
|
|
207
376
|
state.target = e.currentTarget;
|
|
208
377
|
state.isPressed = true;
|
|
378
|
+
setIsElemKeyPressed(true);
|
|
209
379
|
state.pointerType = 'keyboard';
|
|
210
380
|
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
381
|
}
|
|
220
382
|
if (shouldStopPropagation) e.stopPropagation();
|
|
221
383
|
// Keep track of the keydown events that occur while the Meta (e.g. Command) key is held.
|
|
@@ -255,37 +417,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
255
417
|
}
|
|
256
418
|
}
|
|
257
419
|
};
|
|
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
420
|
if (typeof PointerEvent !== 'undefined') {
|
|
290
421
|
pressProps.onPointerDown = (e)=>{
|
|
291
422
|
// Only handle left clicks, and ignore events that bubbled through portals.
|
|
@@ -302,6 +433,7 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
302
433
|
let shouldStopPropagation = true;
|
|
303
434
|
if (!state.isPressed) {
|
|
304
435
|
state.isPressed = true;
|
|
436
|
+
setIsPointerPressed('pointer');
|
|
305
437
|
state.isOverTarget = true;
|
|
306
438
|
state.activePointerId = e.pointerId;
|
|
307
439
|
state.target = e.currentTarget;
|
|
@@ -310,9 +442,11 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
310
442
|
// Release pointer capture so that touch interactions can leave the original target.
|
|
311
443
|
// This enables onPointerLeave and onPointerEnter to fire.
|
|
312
444
|
let target = (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent);
|
|
313
|
-
if ('releasePointerCapture' in target)
|
|
314
|
-
|
|
315
|
-
|
|
445
|
+
if ('releasePointerCapture' in target) {
|
|
446
|
+
if ('hasPointerCapture' in target) {
|
|
447
|
+
if (target.hasPointerCapture(e.pointerId)) target.releasePointerCapture(e.pointerId);
|
|
448
|
+
} else target.releasePointerCapture(e.pointerId);
|
|
449
|
+
}
|
|
316
450
|
}
|
|
317
451
|
if (shouldStopPropagation) e.stopPropagation();
|
|
318
452
|
};
|
|
@@ -345,41 +479,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
345
479
|
cancelOnPointerExit(e);
|
|
346
480
|
}
|
|
347
481
|
};
|
|
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
482
|
pressProps.onDragStart = (e)=>{
|
|
384
483
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
385
484
|
// Safari does not call onPointerCancel when a drag starts, whereas Chrome and Firefox do.
|
|
@@ -396,6 +495,7 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
396
495
|
return;
|
|
397
496
|
}
|
|
398
497
|
state.isPressed = true;
|
|
498
|
+
setIsPointerPressed('mouse');
|
|
399
499
|
state.isOverTarget = true;
|
|
400
500
|
state.target = e.currentTarget;
|
|
401
501
|
state.pointerType = (0, $bBqCQ$reactariautils.isVirtualClick)(e.nativeEvent) ? 'virtual' : 'mouse';
|
|
@@ -406,7 +506,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
406
506
|
let dispose = (0, $625cf83917e112ad$exports.preventFocus)(e.target);
|
|
407
507
|
if (dispose) state.disposables.push(dispose);
|
|
408
508
|
}
|
|
409
|
-
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerDocument)(e.currentTarget), 'mouseup', onMouseUp, false);
|
|
410
509
|
};
|
|
411
510
|
pressProps.onMouseEnter = (e)=>{
|
|
412
511
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
@@ -431,17 +530,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
431
530
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
432
531
|
if (!state.ignoreEmulatedMouseEvents && e.button === 0 && !state.isPressed) triggerPressUp(e, state.pointerType || 'mouse');
|
|
433
532
|
};
|
|
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
533
|
pressProps.onTouchStart = (e)=>{
|
|
446
534
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
447
535
|
let touch = $0294ea432cd92340$var$getTouchFromEvent(e.nativeEvent);
|
|
@@ -450,12 +538,12 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
450
538
|
state.ignoreEmulatedMouseEvents = true;
|
|
451
539
|
state.isOverTarget = true;
|
|
452
540
|
state.isPressed = true;
|
|
541
|
+
setIsPointerPressed('touch');
|
|
453
542
|
state.target = e.currentTarget;
|
|
454
543
|
state.pointerType = 'touch';
|
|
455
544
|
if (!allowTextSelectionOnPress) (0, $f7e14e656343df57$exports.disableTextSelection)(state.target);
|
|
456
545
|
let shouldStopPropagation = triggerPressStart($0294ea432cd92340$var$createTouchEvent(state.target, e), state.pointerType);
|
|
457
546
|
if (shouldStopPropagation) e.stopPropagation();
|
|
458
|
-
addGlobalListener((0, $bBqCQ$reactariautils.getOwnerWindow)(e.currentTarget), 'scroll', onScroll, true);
|
|
459
547
|
};
|
|
460
548
|
pressProps.onTouchMove = (e)=>{
|
|
461
549
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
@@ -492,6 +580,7 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
492
580
|
} else if (state.isOverTarget && state.pointerType != null) shouldStopPropagation = triggerPressEnd($0294ea432cd92340$var$createTouchEvent(state.target, e), state.pointerType, false);
|
|
493
581
|
if (shouldStopPropagation) e.stopPropagation();
|
|
494
582
|
state.isPressed = false;
|
|
583
|
+
setIsPointerPressed(null);
|
|
495
584
|
state.activePointerId = null;
|
|
496
585
|
state.isOverTarget = false;
|
|
497
586
|
state.ignoreEmulatedMouseEvents = true;
|
|
@@ -503,15 +592,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
503
592
|
e.stopPropagation();
|
|
504
593
|
if (state.isPressed) cancel($0294ea432cd92340$var$createTouchEvent(state.target, e));
|
|
505
594
|
};
|
|
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
595
|
pressProps.onDragStart = (e)=>{
|
|
516
596
|
if (!(0, $bBqCQ$reactariautils.nodeContains)(e.currentTarget, (0, $bBqCQ$reactariautils.getEventTarget)(e.nativeEvent))) return;
|
|
517
597
|
cancel(e);
|
|
@@ -519,7 +599,6 @@ function $0294ea432cd92340$export$45712eceda6fad21(props) {
|
|
|
519
599
|
}
|
|
520
600
|
return pressProps;
|
|
521
601
|
}, [
|
|
522
|
-
addGlobalListener,
|
|
523
602
|
isDisabled,
|
|
524
603
|
preventFocusOnPress,
|
|
525
604
|
removeAllGlobalListeners,
|
|
@@ -624,7 +703,8 @@ function $0294ea432cd92340$var$createEvent(target, e) {
|
|
|
624
703
|
metaKey: e.metaKey,
|
|
625
704
|
altKey: e.altKey,
|
|
626
705
|
clientX: clientX,
|
|
627
|
-
clientY: clientY
|
|
706
|
+
clientY: clientY,
|
|
707
|
+
key: e.key
|
|
628
708
|
};
|
|
629
709
|
}
|
|
630
710
|
function $0294ea432cd92340$var$getPointClientRect(point) {
|